aboutsummaryrefslogtreecommitdiff
path: root/src/bech32.cpp
diff options
context:
space:
mode:
authorSamuel Dobson <dobsonsa68@gmail.com>2021-11-23 15:52:33 +1300
committerSamuel Dobson <dobsonsa68@gmail.com>2021-12-01 11:01:20 +1300
commit405c96fc9fd909ccc461f10d55dfdd822b76f5bf (patch)
tree839c476f0b9e9ccefee8c63b1e604caa3afa08d6 /src/bech32.cpp
parent28d9c2857f1c430069bffe0547d12800c84ed9ec (diff)
downloadbitcoin-405c96fc9fd909ccc461f10d55dfdd822b76f5bf.tar.xz
Use bounds-checked array lookups in Bech32 error detection code
Diffstat (limited to 'src/bech32.cpp')
-rw-r--r--src/bech32.cpp20
1 files changed, 10 insertions, 10 deletions
diff --git a/src/bech32.cpp b/src/bech32.cpp
index 740c331989..484586cfa5 100644
--- a/src/bech32.cpp
+++ b/src/bech32.cpp
@@ -457,9 +457,9 @@ std::string LocateErrors(const std::string& str, std::vector<int>& error_locatio
int s2 = syn >> 20;
// Get the discrete logs of these values in GF1024 for more efficient computation
- int l_s0 = GF1024_LOG[s0];
- int l_s1 = GF1024_LOG[s1];
- int l_s2 = GF1024_LOG[s2];
+ int l_s0 = GF1024_LOG.at(s0);
+ int l_s1 = GF1024_LOG.at(s1);
+ int l_s2 = GF1024_LOG.at(s2);
// First, suppose there is only a single error. Then E(x) = e1*x^p1 for some position p1
// Then s0 = E((e)^997) = e1*(e)^(997*p1) and s1 = E((e)^998) = e1*(e)^(998*p1)
@@ -494,15 +494,15 @@ std::string LocateErrors(const std::string& str, std::vector<int>& error_locatio
// (Because we are working in characteristic 2.)
// = e2*(e)^(998*p2) ((e)^p2 + (e)^p1)
//
- int s2_s1p1 = s2 ^ (s1 == 0 ? 0 : GF1024_EXP[(l_s1 + p1) % 1023]);
+ int s2_s1p1 = s2 ^ (s1 == 0 ? 0 : GF1024_EXP.at((l_s1 + p1) % 1023));
if (s2_s1p1 == 0) continue;
- int l_s2_s1p1 = GF1024_LOG[s2_s1p1];
+ int l_s2_s1p1 = GF1024_LOG.at(s2_s1p1);
// Similarly, s1 + s0*(e)^p1
// = e2*(e)^(997*p2) ((e)^p2 + (e)^p1)
- int s1_s0p1 = s1 ^ (s0 == 0 ? 0 : GF1024_EXP[(l_s0 + p1) % 1023]);
+ int s1_s0p1 = s1 ^ (s0 == 0 ? 0 : GF1024_EXP.at((l_s0 + p1) % 1023));
if (s1_s0p1 == 0) continue;
- int l_s1_s0p1 = GF1024_LOG[s1_s0p1];
+ int l_s1_s0p1 = GF1024_LOG.at(s1_s0p1);
// So, putting these together, we can compute the second error position as
// (e)^p2 = (s2 + s1^p1)/(s1 + s0^p1)
@@ -515,12 +515,12 @@ std::string LocateErrors(const std::string& str, std::vector<int>& error_locatio
// Now we want to compute the error values e1 and e2.
// Similar to above, we compute s1 + s0*(e)^p2
// = e1*(e)^(997*p1) ((e)^p1 + (e)^p2)
- int s1_s0p2 = s1 ^ (s0 == 0 ? 0 : GF1024_EXP[(l_s0 + p2) % 1023]);
+ int s1_s0p2 = s1 ^ (s0 == 0 ? 0 : GF1024_EXP.at((l_s0 + p2) % 1023));
if (s1_s0p2 == 0) continue;
- int l_s1_s0p2 = GF1024_LOG[s1_s0p2];
+ int l_s1_s0p2 = GF1024_LOG.at(s1_s0p2);
// And compute (the log of) 1/((e)^p1 + (e)^p2))
- int inv_p1_p2 = 1023 - GF1024_LOG[GF1024_EXP[p1] ^ GF1024_EXP[p2]];
+ int inv_p1_p2 = 1023 - GF1024_LOG.at(GF1024_EXP.at(p1) ^ GF1024_EXP.at(p2));
// Then (s1 + s0*(e)^p1) * (1/((e)^p1 + (e)^p2)))
// = e2*(e)^(997*p2)