1// hex.cpp - 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
9NAMESPACE_BEGIN(CryptoPP)
10
11static const byte s_vecUpper[] = "0123456789ABCDEF";
12static const byte s_vecLower[] = "0123456789abcdef";
13
14void HexEncoder::IsolatedInitialize(const NameValuePairs &parameters)
15{
16	bool uppercase = parameters.GetValueWithDefault(Name::Uppercase(), true);
17	m_filter->Initialize(CombinedNameValuePairs(
18		parameters,
19		MakeParameters(Name::EncodingLookupArray(), uppercase ? &s_vecUpper[0] : &s_vecLower[0], false)(Name::Log2Base(), 4, true)));
20}
21
22void HexDecoder::IsolatedInitialize(const NameValuePairs &parameters)
23{
24	BaseN_Decoder::IsolatedInitialize(CombinedNameValuePairs(
25		parameters,
26		MakeParameters(Name::DecodingLookupArray(), GetDefaultDecodingLookupArray(), false)(Name::Log2Base(), 4, true)));
27}
28
29const int *HexDecoder::GetDefaultDecodingLookupArray()
30{
31	static bool s_initialized = false;
32	static int s_array[256];
33
34	if (!s_initialized)
35	{
36		InitializeDecodingLookupArray(s_array, s_vecUpper, 16, true);
37		s_initialized = true;
38	}
39	return s_array;
40}
41
42NAMESPACE_END
43
44#endif
45