test-base-64.cpp
1 #include <cassert> 2 #include <string.h> 3 4 #include "Base.h" 5 6 using namespace i2p::data; 7 8 int main() { 9 const char *in = "test"; 10 size_t in_len = strlen(in); 11 char out[16]; 12 13 /* bytes -> b64 */ 14 assert(ByteStreamToBase64(NULL, 0) == ""); 15 16 assert(Base64EncodingBufferSize(2) == 4); 17 assert(Base64EncodingBufferSize(4) == 8); 18 assert(Base64EncodingBufferSize(6) == 8); 19 assert(Base64EncodingBufferSize(7) == 12); 20 assert(Base64EncodingBufferSize(9) == 12); 21 assert(Base64EncodingBufferSize(10) == 16); 22 assert(Base64EncodingBufferSize(12) == 16); 23 assert(Base64EncodingBufferSize(13) == 20); 24 25 const std::string out_str(ByteStreamToBase64((uint8_t *) in, in_len)); 26 assert(out_str.size() == 8); 27 assert(out_str == "dGVzdA=="); 28 29 /* b64 -> bytes */ 30 assert(Base64ToByteStream("", NULL, 0) == 0); 31 assert(Base64ToByteStream("", (uint8_t *) out, sizeof(out)) == 0); 32 33 in = "dGVzdA=="; /* valid b64 */ 34 assert(Base64ToByteStream(in, (uint8_t *) out, sizeof(out)) == 4); 35 assert(memcmp(out, "test", 4) == 0); 36 37 in = "dGVzdA="; /* invalid b64 : not padded */ 38 assert(Base64ToByteStream(in, (uint8_t *) out, sizeof(out)) == 0); 39 40 in = "dG/z.A=="; /* invalid b64 : char not from alphabet */ 41 // assert(Base64ToByteStream(in, strlen(in), (uint8_t *) out, sizeof(out)) == 0); 42 // ^^^ fails, current implementation not checks acceptable symbols 43 44 return 0; 45 }