44#if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
55
66#include " util.h"
7- #include " base64-inl.h"
87
98#include < cstddef>
109#include < cstdint>
@@ -24,85 +23,16 @@ static inline constexpr size_t base64_decoded_size_fast(size_t size) {
2423inline uint32_t ReadUint32BE (const unsigned char * p);
2524
2625template <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);
3927
4028template <typename TypeName>
4129size_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);
4631
47- static size_t base64_encode (const char * src,
32+ inline size_t base64_encode (const char * src,
4833 size_t slen,
4934 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);
10636} // namespace node
10737
10838
0 commit comments