Unroll decoder initialization (Issue 376)
parent
62f92dd592
commit
0dc97f1d3a
30
base32.cpp
30
base32.cpp
|
|
@ -26,16 +26,30 @@ void Base32Decoder::IsolatedInitialize(const NameValuePairs ¶meters)
|
||||||
MakeParameters(Name::DecodingLookupArray(), GetDefaultDecodingLookupArray(), false)(Name::Log2Base(), 5, true)));
|
MakeParameters(Name::DecodingLookupArray(), GetDefaultDecodingLookupArray(), false)(Name::Log2Base(), 5, true)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ANONYMOUS_NAMESPACE_BEGIN
|
||||||
|
static const int s_array[256] = {
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, 24, 25, 26, 27, 28, 29, 30, 31, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, -1, 11, 12, -1,
|
||||||
|
13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, -1, -1, -1, -1, -1,
|
||||||
|
-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, -1, 11, 12, -1,
|
||||||
|
13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
|
||||||
|
};
|
||||||
|
NAMESPACE_END
|
||||||
|
|
||||||
|
// Unrolled initialization, http://github.com/weidai11/cryptopp/issues/376
|
||||||
const int *Base32Decoder::GetDefaultDecodingLookupArray()
|
const int *Base32Decoder::GetDefaultDecodingLookupArray()
|
||||||
{
|
{
|
||||||
static volatile bool s_initialized = false;
|
|
||||||
static int s_array[256];
|
|
||||||
|
|
||||||
if (!s_initialized)
|
|
||||||
{
|
|
||||||
InitializeDecodingLookupArray(s_array, s_vecUpper, 32, true);
|
|
||||||
s_initialized = true;
|
|
||||||
}
|
|
||||||
return s_array;
|
return s_array;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
63
base64.cpp
63
base64.cpp
|
|
@ -53,17 +53,30 @@ void Base64Decoder::IsolatedInitialize(const NameValuePairs ¶meters)
|
||||||
MakeParameters(Name::DecodingLookupArray(), GetDecodingLookupArray(), false)(Name::Log2Base(), 6, true)));
|
MakeParameters(Name::DecodingLookupArray(), GetDecodingLookupArray(), false)(Name::Log2Base(), 6, true)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ANONYMOUS_NAMESPACE_BEGIN
|
||||||
|
static const int s_stdArray[256] = {
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63,
|
||||||
|
52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
|
||||||
|
15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1,
|
||||||
|
-1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
|
||||||
|
41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
|
||||||
|
};
|
||||||
|
NAMESPACE_END
|
||||||
|
|
||||||
const int *Base64Decoder::GetDecodingLookupArray()
|
const int *Base64Decoder::GetDecodingLookupArray()
|
||||||
{
|
{
|
||||||
static volatile bool s_initialized = false;
|
return s_stdArray;
|
||||||
static int s_array[256];
|
|
||||||
|
|
||||||
if (!s_initialized)
|
|
||||||
{
|
|
||||||
InitializeDecodingLookupArray(s_array, s_stdVec, 64, false);
|
|
||||||
s_initialized = true;
|
|
||||||
}
|
|
||||||
return s_array;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Base64URLDecoder::IsolatedInitialize(const NameValuePairs ¶meters)
|
void Base64URLDecoder::IsolatedInitialize(const NameValuePairs ¶meters)
|
||||||
|
|
@ -73,17 +86,31 @@ void Base64URLDecoder::IsolatedInitialize(const NameValuePairs ¶meters)
|
||||||
MakeParameters(Name::DecodingLookupArray(), GetDecodingLookupArray(), false)(Name::Log2Base(), 6, true)));
|
MakeParameters(Name::DecodingLookupArray(), GetDecodingLookupArray(), false)(Name::Log2Base(), 6, true)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ANONYMOUS_NAMESPACE_BEGIN
|
||||||
|
static const int s_urlArray[256] = {
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1,
|
||||||
|
52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
|
||||||
|
15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, 63,
|
||||||
|
-1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
|
||||||
|
41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
|
||||||
|
};
|
||||||
|
NAMESPACE_END
|
||||||
|
|
||||||
|
// Unrolled initialization, http://github.com/weidai11/cryptopp/issues/376
|
||||||
const int *Base64URLDecoder::GetDecodingLookupArray()
|
const int *Base64URLDecoder::GetDecodingLookupArray()
|
||||||
{
|
{
|
||||||
static volatile bool s_initialized = false;
|
return s_urlArray;
|
||||||
static int s_array[256];
|
|
||||||
|
|
||||||
if (!s_initialized)
|
|
||||||
{
|
|
||||||
InitializeDecodingLookupArray(s_array, s_urlVec, 64, false);
|
|
||||||
s_initialized = true;
|
|
||||||
}
|
|
||||||
return s_array;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
NAMESPACE_END
|
NAMESPACE_END
|
||||||
|
|
|
||||||
30
hex.cpp
30
hex.cpp
|
|
@ -29,16 +29,30 @@ void HexDecoder::IsolatedInitialize(const NameValuePairs ¶meters)
|
||||||
MakeParameters(Name::DecodingLookupArray(), GetDefaultDecodingLookupArray(), false)(Name::Log2Base(), 4, true)));
|
MakeParameters(Name::DecodingLookupArray(), GetDefaultDecodingLookupArray(), false)(Name::Log2Base(), 4, true)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ANONYMOUS_NAMESPACE_BEGIN
|
||||||
|
static const int s_array[256] = {
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
|
||||||
|
};
|
||||||
|
NAMESPACE_END
|
||||||
|
|
||||||
|
// Unrolled initialization, http://github.com/weidai11/cryptopp/issues/376
|
||||||
const int *HexDecoder::GetDefaultDecodingLookupArray()
|
const int *HexDecoder::GetDefaultDecodingLookupArray()
|
||||||
{
|
{
|
||||||
static volatile bool s_initialized = false;
|
|
||||||
static int s_array[256];
|
|
||||||
|
|
||||||
if (!s_initialized)
|
|
||||||
{
|
|
||||||
InitializeDecodingLookupArray(s_array, s_vecUpper, 16, true);
|
|
||||||
s_initialized = true;
|
|
||||||
}
|
|
||||||
return s_array;
|
return s_array;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
25
validat1.cpp
25
validat1.cpp
|
|
@ -2430,6 +2430,7 @@ bool ValidateBaseCode()
|
||||||
byte data[255];
|
byte data[255];
|
||||||
for (unsigned int i=0; i<255; i++)
|
for (unsigned int i=0; i<255; i++)
|
||||||
data[i] = byte(i);
|
data[i] = byte(i);
|
||||||
|
|
||||||
static const char hexEncoded[] =
|
static const char hexEncoded[] =
|
||||||
"000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627"
|
"000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627"
|
||||||
"28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F"
|
"28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F"
|
||||||
|
|
@ -2445,7 +2446,7 @@ bool ValidateBaseCode()
|
||||||
"U4M3TGN4VQQJ5HW9WCS4FI7EWYVKRKFJXKX43MPQX82MDNXVYU45PP72ZG7MZRF7Z496BSQC2RCNMTYH"
|
"U4M3TGN4VQQJ5HW9WCS4FI7EWYVKRKFJXKX43MPQX82MDNXVYU45PP72ZG7MZRF7Z496BSQC2RCNMTYH"
|
||||||
"3DE6XU8N3ZHN9WGT4MJ7JXQY49NPVYY55VQ77Z9A6HTQH3HF65V8T4RK7RYQ55ZR8D29F69W8Z5RR8H3"
|
"3DE6XU8N3ZHN9WGT4MJ7JXQY49NPVYY55VQ77Z9A6HTQH3HF65V8T4RK7RYQ55ZR8D29F69W8Z5RR8H3"
|
||||||
"9M7939R8";
|
"9M7939R8";
|
||||||
const char *base64AndHexEncoded =
|
static const char base64AndHexEncoded[] =
|
||||||
"41414543417751464267634943516F4C4441304F4478415245684D554652595847426B6147787764"
|
"41414543417751464267634943516F4C4441304F4478415245684D554652595847426B6147787764"
|
||||||
"486838674953496A4A43556D4A7967704B6973734C5334764D4445794D7A51310A4E6A63344F546F"
|
"486838674953496A4A43556D4A7967704B6973734C5334764D4445794D7A51310A4E6A63344F546F"
|
||||||
"375044302B50304242516B4E4552555A4853456C4B5330784E546B395155564A5456465657563168"
|
"375044302B50304242516B4E4552555A4853456C4B5330784E546B395155564A5456465657563168"
|
||||||
|
|
@ -2455,8 +2456,18 @@ bool ValidateBaseCode()
|
||||||
"624B7A744C573274376935757275387662362F774D484377385446787366497963724C7A4D334F7A"
|
"624B7A744C573274376935757275387662362F774D484377385446787366497963724C7A4D334F7A"
|
||||||
"39445230745055316462580A324E6E6132397A6433742F6734654C6A354F586D352B6A7036757673"
|
"39445230745055316462580A324E6E6132397A6433742F6734654C6A354F586D352B6A7036757673"
|
||||||
"3765377638504879382F5431397666342B6672372F50332B0A";
|
"3765377638504879382F5431397666342B6672372F50332B0A";
|
||||||
|
static const char base64URLAndHexEncoded[] =
|
||||||
|
"41414543417751464267634943516F4C4441304F4478415245684D554652595847426B6147787764"
|
||||||
|
"486838674953496A4A43556D4A7967704B6973734C5334764D4445794D7A51314E6A63344F546F37"
|
||||||
|
"5044302D50304242516B4E4552555A4853456C4B5330784E546B395155564A54564656575631685A"
|
||||||
|
"576C746358563566594746695932526C5A6D646F615770726247317562334278636E4E3064585A33"
|
||||||
|
"65486C3665337839666E2D4167594B44684957476834694A696F754D6A5936506B4A47536B355356"
|
||||||
|
"6C7065596D5A71626E4A32656E3643686F714F6B7061616E714B6D717136797472712D7773624B7A"
|
||||||
|
"744C573274376935757275387662365F774D484377385446787366497963724C7A4D334F7A394452"
|
||||||
|
"3074505531646258324E6E6132397A6433745F6734654C6A354F586D352D6A703675767337653776"
|
||||||
|
"38504879385F5431397666342D6672375F50332D";
|
||||||
|
|
||||||
std::cout << "\nBase64, base32 and hex coding validation suite running...\n\n";
|
std::cout << "\nBase64, Base64URL, Base32 and Base16 coding validation suite running...\n\n";
|
||||||
|
|
||||||
fail = !TestFilter(HexEncoder().Ref(), data, 255, (const byte *)hexEncoded, strlen(hexEncoded));
|
fail = !TestFilter(HexEncoder().Ref(), data, 255, (const byte *)hexEncoded, strlen(hexEncoded));
|
||||||
std::cout << (fail ? "FAILED " : "passed ");
|
std::cout << (fail ? "FAILED " : "passed ");
|
||||||
|
|
@ -2488,6 +2499,16 @@ bool ValidateBaseCode()
|
||||||
std::cout << "Base64 Decoding\n";
|
std::cout << "Base64 Decoding\n";
|
||||||
pass = pass && !fail;
|
pass = pass && !fail;
|
||||||
|
|
||||||
|
fail = !TestFilter(Base64URLEncoder(new HexEncoder).Ref(), data, 255, (const byte *)base64URLAndHexEncoded, strlen(base64URLAndHexEncoded));
|
||||||
|
std::cout << (fail ? "FAILED " : "passed ");
|
||||||
|
std::cout << "Base64 URL Encoding\n";
|
||||||
|
pass = pass && !fail;
|
||||||
|
|
||||||
|
fail = !TestFilter(HexDecoder(new Base64URLDecoder).Ref(), (const byte *)base64URLAndHexEncoded, strlen(base64URLAndHexEncoded), data, 255);
|
||||||
|
std::cout << (fail ? "FAILED " : "passed ");
|
||||||
|
std::cout << "Base64 URL Decoding\n";
|
||||||
|
pass = pass && !fail;
|
||||||
|
|
||||||
return pass;
|
return pass;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue