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 // Base64
9 static const byte s_stdVec[] =
10  "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
11 // Base64URL
12 static const byte s_urlVec[] =
13  "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
14 static const byte s_padding = '=';
15 
17 {
18  bool insertLineBreaks = parameters.GetValueWithDefault(Name::InsertLineBreaks(), true);
19  int maxLineLength = parameters.GetIntValueWithDefault(Name::MaxLineLength(), 72);
20 
21  const char *lineBreak = insertLineBreaks ? "\n" : "";
22 
23  m_filter->Initialize(CombinedNameValuePairs(
24  parameters,
25  MakeParameters(Name::EncodingLookupArray(), &s_stdVec[0], false)
26  (Name::PaddingByte(), s_padding)
27  (Name::GroupSize(), insertLineBreaks ? maxLineLength : 0)
28  (Name::Separator(), ConstByteArrayParameter(lineBreak))
29  (Name::Terminator(), ConstByteArrayParameter(lineBreak))
30  (Name::Log2Base(), 6, true)));
31 }
32 
34 {
35  bool insertLineBreaks = parameters.GetValueWithDefault(Name::InsertLineBreaks(), true);
36  int maxLineLength = parameters.GetIntValueWithDefault(Name::MaxLineLength(), 72);
37 
38  const char *lineBreak = insertLineBreaks ? "\n" : "";
39 
40  m_filter->Initialize(CombinedNameValuePairs(
41  parameters,
42  MakeParameters(Name::EncodingLookupArray(), &s_urlVec[0], false)
43  (Name::PaddingByte(), s_padding)
44  (Name::GroupSize(), insertLineBreaks ? maxLineLength : 0)
45  (Name::Separator(), ConstByteArrayParameter(lineBreak))
46  (Name::Terminator(), ConstByteArrayParameter(lineBreak))
47  (Name::Log2Base(), 6, true)));
48 }
49 
50 const int *Base64Decoder::GetDecodingLookupArray()
51 {
52  static volatile bool s_initialized = false;
53  static int s_array[256];
54 
55  if (!s_initialized)
56  {
57  InitializeDecodingLookupArray(s_array, s_stdVec, 64, false);
58  s_initialized = true;
59  }
60  return s_array;
61 }
62 
63 const int *Base64URLDecoder::GetDecodingLookupArray()
64 {
65  static volatile bool s_initialized = false;
66  static int s_array[256];
67 
68  if (!s_initialized)
69  {
70  InitializeDecodingLookupArray(s_array, s_urlVec, 64, false);
71  s_initialized = true;
72  }
73  return s_array;
74 }
75 
76 NAMESPACE_END
used to pass byte array input as part of a NameValuePairs object
Definition: algparam.h:30
int GetIntValueWithDefault(const char *name, int defaultValue) const
Get a named value with type int, with default.
Definition: cryptlib.h:364
T GetValueWithDefault(const char *name, T defaultValue) const
Get a named value.
Definition: cryptlib.h:332
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:33
Crypto++ library namespace.
void IsolatedInitialize(const NameValuePairs &parameters)
Initialize or reinitialize this object, without signal propagation.
Definition: base64.cpp:16
Interface for retrieving values given their names.
Definition: cryptlib.h:261