4
4
#if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
5
5
6
6
#include " util.h"
7
- #include " base64-inl.h"
8
7
9
8
#include < cstddef>
10
9
#include < cstdint>
@@ -24,85 +23,16 @@ static inline constexpr size_t base64_decoded_size_fast(size_t size) {
24
23
inline uint32_t ReadUint32BE (const unsigned char * p);
25
24
26
25
template <typename TypeName>
27
- size_t base64_decoded_size (const TypeName* src, size_t size) {
28
- // 1-byte input cannot be decoded
29
- if (size < 2 )
30
- return 0 ;
31
-
32
- if (src[size - 1 ] == ' =' ) {
33
- size--;
34
- if (src[size - 1 ] == ' =' )
35
- size--;
36
- }
37
- return base64_decoded_size_fast (size);
38
- }
26
+ size_t base64_decoded_size (const TypeName* src, size_t size);
39
27
40
28
template <typename TypeName>
41
29
size_t base64_decode (char * const dst, const size_t dstlen,
42
- const TypeName* const src, const size_t srclen) {
43
- const size_t decoded_size = base64_decoded_size (src, srclen);
44
- return base64_decode_fast (dst, dstlen, src, srclen, decoded_size);
45
- }
30
+ const TypeName* const src, const size_t srclen);
46
31
47
- static size_t base64_encode (const char * src,
32
+ inline size_t base64_encode (const char * src,
48
33
size_t slen,
49
34
char * dst,
50
- size_t dlen) {
51
- // We know how much we'll write, just make sure that there's space.
52
- CHECK (dlen >= base64_encoded_size (slen) &&
53
- " not enough space provided for base64 encode" );
54
-
55
- dlen = base64_encoded_size (slen);
56
-
57
- unsigned a;
58
- unsigned b;
59
- unsigned c;
60
- unsigned i;
61
- unsigned k;
62
- unsigned n;
63
-
64
- static const char table[] = " ABCDEFGHIJKLMNOPQRSTUVWXYZ"
65
- " abcdefghijklmnopqrstuvwxyz"
66
- " 0123456789+/" ;
67
-
68
- i = 0 ;
69
- k = 0 ;
70
- n = slen / 3 * 3 ;
71
-
72
- while (i < n) {
73
- a = src[i + 0 ] & 0xff ;
74
- b = src[i + 1 ] & 0xff ;
75
- c = src[i + 2 ] & 0xff ;
76
-
77
- dst[k + 0 ] = table[a >> 2 ];
78
- dst[k + 1 ] = table[((a & 3 ) << 4 ) | (b >> 4 )];
79
- dst[k + 2 ] = table[((b & 0x0f ) << 2 ) | (c >> 6 )];
80
- dst[k + 3 ] = table[c & 0x3f ];
81
-
82
- i += 3 ;
83
- k += 4 ;
84
- }
85
-
86
- switch (slen - n) {
87
- case 1 :
88
- a = src[i + 0 ] & 0xff ;
89
- dst[k + 0 ] = table[a >> 2 ];
90
- dst[k + 1 ] = table[(a & 3 ) << 4 ];
91
- dst[k + 2 ] = ' =' ;
92
- dst[k + 3 ] = ' =' ;
93
- break ;
94
- case 2 :
95
- a = src[i + 0 ] & 0xff ;
96
- b = src[i + 1 ] & 0xff ;
97
- dst[k + 0 ] = table[a >> 2 ];
98
- dst[k + 1 ] = table[((a & 3 ) << 4 ) | (b >> 4 )];
99
- dst[k + 2 ] = table[(b & 0x0f ) << 2 ];
100
- dst[k + 3 ] = ' =' ;
101
- break ;
102
- }
103
-
104
- return dlen;
105
- }
35
+ size_t dlen);
106
36
} // namespace node
107
37
108
38
0 commit comments