1 // hex.cpp - originally written and placed in the public domain by Wei Dai
2
3 #include "pch.h"
4
5 #ifndef CRYPTOPP_IMPORTS
6
7 #include "hex.h"
8
9 NAMESPACE_BEGIN(CryptoPP)
10 ANONYMOUS_NAMESPACE_BEGIN
11
12 const byte s_vecUpper[] = "0123456789ABCDEF";
13 const byte s_vecLower[] = "0123456789abcdef";
14 const int s_array[256] = {
15 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
16 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
17 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
18 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1, -1, -1, -1, -1, -1,
19 -1, 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1,
20 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
21 -1, 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1,
22 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
23 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
24 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
25 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
26 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
27 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
28 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
29 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
30 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
31 };
32
33 ANONYMOUS_NAMESPACE_END
34
IsolatedInitialize(const NameValuePairs & parameters)35 void HexEncoder::IsolatedInitialize(const NameValuePairs ¶meters)
36 {
37 bool uppercase = parameters.GetValueWithDefault(Name::Uppercase(), true);
38 m_filter->Initialize(CombinedNameValuePairs(
39 parameters,
40 MakeParameters(Name::EncodingLookupArray(), uppercase ? &s_vecUpper[0] : &s_vecLower[0], false)(Name::Log2Base(), 4, true)));
41 }
42
IsolatedInitialize(const NameValuePairs & parameters)43 void HexDecoder::IsolatedInitialize(const NameValuePairs ¶meters)
44 {
45 BaseN_Decoder::IsolatedInitialize(CombinedNameValuePairs(
46 parameters,
47 MakeParameters(Name::DecodingLookupArray(), GetDefaultDecodingLookupArray(), false)(Name::Log2Base(), 4, true)));
48 }
49
50 // Unrolled initialization, http://github.com/weidai11/cryptopp/issues/376
GetDefaultDecodingLookupArray()51 const int *HexDecoder::GetDefaultDecodingLookupArray()
52 {
53 return s_array;
54 }
55
56 NAMESPACE_END
57
58 #endif // CRYPTOPP_IMPORTS
59