47#if !defined(MBEDTLS_CONFIG_FILE)
50#include MBEDTLS_CONFIG_FILE
53#if defined(MBEDTLS_BASE64_C)
59#if defined(MBEDTLS_SELF_TEST)
61#if defined(MBEDTLS_PLATFORM_C)
65#define mbedtls_printf printf
69static const unsigned char base64_enc_map[64] =
71 'A',
'B',
'C',
'D',
'E',
'F',
'G',
'H',
'I',
'J',
72 'K',
'L',
'M',
'N',
'O',
'P',
'Q',
'R',
'S',
'T',
73 'U',
'V',
'W',
'X',
'Y',
'Z',
'a',
'b',
'c',
'd',
74 'e',
'f',
'g',
'h',
'i',
'j',
'k',
'l',
'm',
'n',
75 'o',
'p',
'q',
'r',
's',
't',
'u',
'v',
'w',
'x',
76 'y',
'z',
'0',
'1',
'2',
'3',
'4',
'5',
'6',
'7',
80static const unsigned char base64_dec_map[128] =
82 127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
83 127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
84 127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
85 127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
86 127, 127, 127, 62, 127, 127, 127, 63, 52, 53,
87 54, 55, 56, 57, 58, 59, 60, 61, 127, 127,
88 127, 64, 127, 127, 127, 0, 1, 2, 3, 4,
89 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
90 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
91 25, 127, 127, 127, 127, 127, 127, 26, 27, 28,
92 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
93 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
94 49, 50, 51, 127, 127, 127, 127, 127
97#define BASE64_SIZE_T_MAX ( (size_t) -1 )
102static void mbedtls_base64_cond_assign_uchar(
unsigned char *
dest,
const unsigned char *
const src,
108#pragma warning( push )
109#pragma warning( disable : 4146 )
118#pragma warning( pop )
133#pragma warning( push )
134#pragma warning( disable : 4146 )
143#pragma warning( pop )
152static unsigned char mbedtls_base64_eq(
size_t in_a,
size_t in_b )
154 size_t difference = in_a ^ in_b;
159#pragma warning( push )
160#pragma warning( disable : 4146 )
163 difference |= -difference;
166#pragma warning( pop )
170 difference >>= (
sizeof( difference ) * 8 - 1 );
172 return (
unsigned char) ( 1 ^ difference );
178static unsigned char mbedtls_base64_table_lookup(
const unsigned char *
const table,
179 const size_t table_size,
const size_t table_index )
186 mbedtls_base64_cond_assign_uchar( &
result, &
table[
i], mbedtls_base64_eq(
i, table_index ) );
196 const unsigned char *
src,
size_t slen )
208 n = slen / 3 + ( slen % 3 != 0 );
210 if(
n > ( BASE64_SIZE_T_MAX - 1 ) / 4 )
212 *olen = BASE64_SIZE_T_MAX;
218 if( ( dlen <
n + 1 ) || (
NULL ==
dst ) )
224 n = ( slen / 3 ) * 3;
226 for(
i = 0,
p =
dst;
i <
n;
i += 3 )
232 *
p++ = mbedtls_base64_table_lookup( base64_enc_map,
sizeof( base64_enc_map ),
233 ( ( C1 >> 2 ) & 0x3F ) );
235 *
p++ = mbedtls_base64_table_lookup( base64_enc_map,
sizeof( base64_enc_map ),
236 ( ( ( ( C1 & 3 ) << 4 ) + (
C2 >> 4 ) ) & 0x3F ) );
238 *
p++ = mbedtls_base64_table_lookup( base64_enc_map,
sizeof( base64_enc_map ),
239 ( ( ( (
C2 & 15 ) << 2 ) + ( C3 >> 6 ) ) & 0x3F ) );
241 *
p++ = mbedtls_base64_table_lookup( base64_enc_map,
sizeof( base64_enc_map ),
248 C2 = ( (
i + 1 ) < slen ) ? *
src++ : 0;
250 *
p++ = mbedtls_base64_table_lookup( base64_enc_map,
sizeof( base64_enc_map ),
251 ( ( C1 >> 2 ) & 0x3F ) );
253 *
p++ = mbedtls_base64_table_lookup( base64_enc_map,
sizeof( base64_enc_map ),
254 ( ( ( ( C1 & 3 ) << 4 ) + (
C2 >> 4 ) ) & 0x3F ) );
256 if( (
i + 1 ) < slen )
257 *
p++ = mbedtls_base64_table_lookup( base64_enc_map,
sizeof( base64_enc_map ),
258 ( ( (
C2 & 15 ) << 2 ) & 0x3F ) );
274 const unsigned char *
src,
size_t slen )
279 unsigned char dec_map_lookup;
282 for(
i =
n =
j = 0;
i < slen;
i++ )
286 while(
i < slen &&
src[
i] ==
' ' )
296 if( ( slen -
i ) >= 2 &&
297 src[
i] ==
'\r' &&
src[
i + 1] ==
'\n' )
307 if(
src[
i] ==
'=' && ++
j > 2 )
310 dec_map_lookup = mbedtls_base64_table_lookup( base64_dec_map,
sizeof( base64_dec_map ),
src[
i] );
312 if(
src[
i] > 127 || dec_map_lookup == 127 )
315 if( dec_map_lookup < 64 &&
j != 0 )
331 n = ( 6 * (
n >> 3 ) ) + ( ( 6 * (
n & 0x7 ) + 7 ) >> 3 );
342 if( *
src ==
'\r' || *
src ==
'\n' || *
src ==
' ' )
345 dec_map_lookup = mbedtls_base64_table_lookup( base64_dec_map,
sizeof( base64_dec_map ), *
src );
347 mbedtls_base64_cond_assign_uint32( &
j,
j - 1, mbedtls_base64_eq( dec_map_lookup, 64 ) );
348 x = (
x << 6 ) | ( dec_map_lookup & 0x3F );
353 if(
j > 0 ) *
p++ = (
unsigned char)(
x >> 16 );
354 if(
j > 1 ) *
p++ = (
unsigned char)(
x >> 8 );
355 if(
j > 2 ) *
p++ = (
unsigned char)(
x );
364#if defined(MBEDTLS_SELF_TEST)
366static const unsigned char base64_test_dec[64] =
368 0x24, 0x48, 0x6E, 0x56, 0x87, 0x62, 0x5A, 0xBD,
369 0xBF, 0x17, 0xD9, 0xA2, 0xC4, 0x17, 0x1A, 0x01,
370 0x94, 0xED, 0x8F, 0x1E, 0x11, 0xB3, 0xD7, 0x09,
371 0x0C, 0xB6, 0xE9, 0x10, 0x6F, 0x22, 0xEE, 0x13,
372 0xCA, 0xB3, 0x07, 0x05, 0x76, 0xC9, 0xFA, 0x31,
373 0x6C, 0x08, 0x34, 0xFF, 0x8D, 0xC2, 0x6C, 0x38,
374 0x00, 0x43, 0xE9, 0x54, 0x97, 0xAF, 0x50, 0x4B,
375 0xD1, 0x41, 0xBA, 0x95, 0x31, 0x5A, 0x0B, 0x97
378static const unsigned char base64_test_enc[] =
379 "JEhuVodiWr2/F9mixBcaAZTtjx4Rs9cJDLbpEG8i7hPK"
380 "swcFdsn6MWwINP+Nwmw4AEPpVJevUEvRQbqVMVoLlw==";
385int mbedtls_base64_self_test(
int verbose )
388 const unsigned char *
src;
389 unsigned char buffer[128];
394 src = base64_test_dec;
408 src = base64_test_enc;
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
RFC 1521 base64 encoding/decoding.
int mbedtls_base64_decode(unsigned char *dst, size_t dlen, size_t *olen, const unsigned char *src, size_t slen)
Decode a base64-formatted buffer.
int mbedtls_base64_encode(unsigned char *dst, size_t dlen, size_t *olen, const unsigned char *src, size_t slen)
Encode a buffer into base64 format.
#define MBEDTLS_ERR_BASE64_INVALID_CHARACTER
#define MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL
GLint GLint GLint GLint GLint x
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
Configuration options (set of defines)