Crypto++  5.6.3
Free C++ class library of cryptographic schemes
base64.cpp
1 // base64.cpp - written and placed in the public domain by Wei Dai
2 
3 #include "pch.h"
4 #include "base64.h"
5 
6 NAMESPACE_BEGIN(CryptoPP)
7 
8 
9 // Base64
10 static const byte s_stdVec[] =
11  "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
12 // Base64URL
13 static const byte s_urlVec[] =
14  "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
15 static const byte s_padding = '=';
16 
17 void Base64Encoder::IsolatedInitialize(const NameValuePairs &parameters)
18 {
19  bool insertLineBreaks = parameters.GetValueWithDefault(Name::InsertLineBreaks(), true);
20  int maxLineLength = parameters.GetIntValueWithDefault(Name::MaxLineLength(), 72);
21 
22  const char *lineBreak = insertLineBreaks ? "\n" : "";
23 
25  parameters,
26  MakeParameters(Name::EncodingLookupArray(), &s_stdVec[0], false)
27  (Name::PaddingByte(), s_padding)
28  (Name::GroupSize(), insertLineBreaks ? maxLineLength : 0)
29  (Name::Separator(), ConstByteArrayParameter(lineBreak))
30  (Name::Terminator(), ConstByteArrayParameter(lineBreak))
31  (Name::Log2Base(), 6, true)));
32 }
33 
35 {
36  bool insertLineBreaks = parameters.GetValueWithDefault(Name::InsertLineBreaks(), true);
37  int maxLineLength = parameters.GetIntValueWithDefault(Name::MaxLineLength(), 72);
38 
39  const char *lineBreak = insertLineBreaks ? "\n" : "";
40 
41  m_filter->Initialize(CombinedNameValuePairs(
42  parameters,
43  MakeParameters(Name::EncodingLookupArray(), &s_urlVec[0], false)
44  (Name::PaddingByte(), s_padding)
45  (Name::GroupSize(), insertLineBreaks ? maxLineLength : 0)
46  (Name::Separator(), ConstByteArrayParameter(lineBreak))
47  (Name::Terminator(), ConstByteArrayParameter(lineBreak))
48  (Name::Log2Base(), 6, true)));
49 }
50 
51 const int *Base64Decoder::GetDecodingLookupArray()
52 {
53  static volatile bool s_initialized = false;
54  static int s_array[256];
55 
56  if (!s_initialized)
57  {
58  InitializeDecodingLookupArray(s_array, s_stdVec, 64, false);
59  s_initialized = true;
60  }
61  return s_array;
62 }
63 
64 const int *Base64URLDecoder::GetDecodingLookupArray()
65 {
66  static volatile bool s_initialized = false;
67  static int s_array[256];
68 
69  if (!s_initialized)
70  {
71  InitializeDecodingLookupArray(s_array, s_urlVec, 64, false);
72  s_initialized = true;
73  }
74  return s_array;
75 }
76 
77 NAMESPACE_END
used to pass byte array input as part of a NameValuePairs object
Definition: algparam.h:30
T GetValueWithDefault(const char *name, T defaultValue) const
Get a named value.
Definition: cryptlib.h:332
Base64 encodes data.
Definition: base64.h:18
int GetIntValueWithDefault(const char *name, int defaultValue) const
Get a named value with type int, with default.
Definition: cryptlib.h:364
AlgorithmParameters MakeParameters(const char *name, const T &value, bool throwIfNotUsed=true)
Create an object that implements NameValuePairs.
Definition: algparam.h:487
Classes for the Base64Encoder, Base64Decoder, Base64URLEncoder and Base64URLDecoder.
void IsolatedInitialize(const NameValuePairs &parameters)
Definition: base64.cpp:34
void Initialize(const NameValuePairs &parameters=g_nullNameValuePairs, int propagation=-1)
Initialize or reinitialize this object, with signal propagation.
Definition: filters.cpp:71
Crypto++ library namespace.
Interface for retrieving values given their names.
Definition: cryptlib.h:261