xref: /openbmc/libcper/tests/base64_test.c (revision 3e72806517cfd324023e6e6268000eb5dc783678)
154640298SEd Tanous #include <libcper/base64.h>
254640298SEd Tanous 
354640298SEd Tanous #include <stdio.h>
454640298SEd Tanous #include <stdlib.h>
554640298SEd Tanous #include <assert.h>
654640298SEd Tanous #include <string.h>
754640298SEd Tanous 
8*3e728065SEd Tanous const char *good_encode_outputs[] = {
9*3e728065SEd Tanous 	"Zg==", "Zm8=", "Zm9v", "Zm9vYg==", "Zm9vYmE=", "Zm9vYmFy",
10*3e728065SEd Tanous };
11*3e728065SEd Tanous const char *good_encode_inputs[] = {
12*3e728065SEd Tanous 	"f", "fo", "foo", "foob", "fooba", "foobar",
13*3e728065SEd Tanous };
14*3e728065SEd Tanous 
test_base64_encode_good()1554640298SEd Tanous void test_base64_encode_good()
1654640298SEd Tanous {
1754640298SEd Tanous 	int32_t encoded_len = 0;
18*3e728065SEd Tanous 	for (long unsigned int i = 0;
19*3e728065SEd Tanous 	     i < sizeof(good_encode_inputs) / sizeof(good_encode_inputs[0]);
20*3e728065SEd Tanous 	     i++) {
21*3e728065SEd Tanous 		const char *data = good_encode_inputs[i];
22*3e728065SEd Tanous 		char *encoded = base64_encode((unsigned char *)data,
23*3e728065SEd Tanous 					      strlen(data), &encoded_len);
24*3e728065SEd Tanous 		assert((size_t)encoded_len == strlen(good_encode_outputs[i]));
25*3e728065SEd Tanous 		assert(memcmp(encoded, good_encode_outputs[i], encoded_len) ==
26*3e728065SEd Tanous 		       0);
2754640298SEd Tanous 		free(encoded);
2854640298SEd Tanous 	}
29*3e728065SEd Tanous }
30*3e728065SEd Tanous 
31*3e728065SEd Tanous const char *good_decode_inputs[] = {
32*3e728065SEd Tanous 	"Zg==", "Zg", "Zm8=", "Zm8", "Zm9v",
33*3e728065SEd Tanous };
34*3e728065SEd Tanous const char *good_decode_outputs[] = {
35*3e728065SEd Tanous 	"f", "f", "fo", "fo", "foo",
36*3e728065SEd Tanous };
3754640298SEd Tanous 
test_base64_decode_good()3854640298SEd Tanous void test_base64_decode_good()
3954640298SEd Tanous {
40*3e728065SEd Tanous 	for (long unsigned int i = 0;
41*3e728065SEd Tanous 	     i < sizeof(good_decode_inputs) / sizeof(good_decode_inputs[0]);
42*3e728065SEd Tanous 	     i++) {
4354640298SEd Tanous 		int32_t decoded_len = 0;
44*3e728065SEd Tanous 		const char *data = good_decode_inputs[i];
45*3e728065SEd Tanous 		UINT8 *decoded =
46*3e728065SEd Tanous 			base64_decode(data, strlen(data), &decoded_len);
47*3e728065SEd Tanous 		assert(decoded != NULL);
48*3e728065SEd Tanous 		assert((size_t)decoded_len == strlen(good_decode_outputs[i]));
49*3e728065SEd Tanous 		assert(memcmp(decoded, good_decode_outputs[i], decoded_len) ==
50*3e728065SEd Tanous 		       0);
5154640298SEd Tanous 		free(decoded);
5254640298SEd Tanous 	}
53*3e728065SEd Tanous }
54