1: #include "first.h"
2:
3: #include "base64.h"
4:
5: static void check_all_len_0() {
6: buffer *check = buffer_init();
7: const char empty[] = "";
8:
9: {
10: unsigned char* check_res;
11:
12: force_assert(0 == li_to_base64_no_padding(NULL, 0, NULL, 0, BASE64_STANDARD));
13:
14: buffer_reset(check);
15: check_res = buffer_append_base64_decode(check, NULL, 0, BASE64_STANDARD);
16: force_assert((check_res != NULL) && (check_res == (unsigned char*) check->ptr));
17: force_assert(buffer_is_equal_string(check, empty, 0));
18: }
19:
20: {
21: unsigned char* check_res;
22:
23: force_assert(0 == li_to_base64_no_padding(NULL, 0, NULL, 0, BASE64_URL));
24:
25: buffer_reset(check);
26: check_res = buffer_append_base64_decode(check, NULL, 0, BASE64_URL);
27: force_assert((check_res != NULL) && (check_res == (unsigned char*) check->ptr));
28: force_assert(buffer_is_equal_string(check, empty, 0));
29: }
30:
31: buffer_free(check);
32: }
33:
34: static void check_all_len_1() {
35: unsigned int c1;
36: buffer *check = buffer_init();
37:
38: for (c1 = 0; c1 < 256; ++c1) {
39: {
40: unsigned char in[] = { c1 };
41: char out[2] = { 0, 0 };
42: unsigned char* check_res;
43:
44: force_assert(sizeof(out) == li_to_base64_no_padding(out, sizeof(out), in, sizeof(in), BASE64_STANDARD));
45:
46: buffer_reset(check);
47: check_res = buffer_append_base64_decode(check, out, sizeof(out), BASE64_STANDARD);
48: force_assert((check_res != NULL) && (check_res == (unsigned char*) check->ptr));
49: force_assert(buffer_is_equal_string(check, (const char*) in, sizeof(in)));
50: }
51:
52: {
53: unsigned char in[] = { c1 };
54: char out[2] = { 0, 0 };
55: unsigned char* check_res;
56:
57: force_assert(sizeof(out) == li_to_base64_no_padding(out, sizeof(out), in, sizeof(in), BASE64_URL));
58:
59: buffer_reset(check);
60: check_res = buffer_append_base64_decode(check, out, sizeof(out), BASE64_URL);
61: force_assert((check_res != NULL) && (check_res == (unsigned char*) check->ptr));
62: force_assert(buffer_is_equal_string(check, (const char*) in, sizeof(in)));
63: }
64: }
65:
66: buffer_free(check);
67: }
68:
69: static void check_all_len_2() {
70: unsigned int c1, c2;
71: buffer *check = buffer_init();
72:
73: for (c1 = 0; c1 < 256; ++c1) for (c2 = 0; c2 < 256; ++c2) {
74: {
75: unsigned char in[] = { c1, c2 };
76: char out[3] = { 0, 0, 0 };
77: unsigned char* check_res;
78:
79: force_assert(sizeof(out) == li_to_base64_no_padding(out, sizeof(out), in, sizeof(in), BASE64_STANDARD));
80:
81: buffer_reset(check);
82: check_res = buffer_append_base64_decode(check, out, sizeof(out), BASE64_STANDARD);
83: force_assert((check_res != NULL) && (check_res == (unsigned char*) check->ptr));
84: force_assert(buffer_is_equal_string(check, (const char*) in, sizeof(in)));
85: }
86:
87: {
88: unsigned char in[] = { c1, c2 };
89: char out[3] = { 0, 0, 0 };
90: unsigned char* check_res;
91:
92: force_assert(sizeof(out) == li_to_base64_no_padding(out, sizeof(out), in, sizeof(in), BASE64_URL));
93:
94: buffer_reset(check);
95: check_res = buffer_append_base64_decode(check, out, sizeof(out), BASE64_URL);
96: force_assert((check_res != NULL) && (check_res == (unsigned char*) check->ptr));
97: force_assert(buffer_is_equal_string(check, (const char*) in, sizeof(in)));
98: }
99: }
100:
101: buffer_free(check);
102: }
103:
104: static void check_all_len_3() {
105: unsigned int c1, c2, c3;
106: buffer *check = buffer_init();
107:
108: for (c1 = 0; c1 < 256; ++c1) for (c2 = 0; c2 < 256; ++c2) for (c3 = 0; c3 < 256; ++c3) {
109: {
110: unsigned char in[] = { c1, c2, c3 };
111: char out[4] = { 0, 0, 0, 0 };
112: unsigned char* check_res;
113:
114: force_assert(sizeof(out) == li_to_base64_no_padding(out, sizeof(out), in, sizeof(in), BASE64_STANDARD));
115:
116: buffer_reset(check);
117: check_res = buffer_append_base64_decode(check, out, sizeof(out), BASE64_STANDARD);
118: force_assert((check_res != NULL) && (check_res == (unsigned char*) check->ptr));
119: force_assert(buffer_is_equal_string(check, (const char*) in, sizeof(in)));
120: }
121:
122: {
123: unsigned char in[] = { c1, c2, c3 };
124: char out[4] = { 0, 0, 0, 0 };
125: unsigned char* check_res;
126:
127: force_assert(sizeof(out) == li_to_base64_no_padding(out, sizeof(out), in, sizeof(in), BASE64_URL));
128:
129: buffer_reset(check);
130: check_res = buffer_append_base64_decode(check, out, sizeof(out), BASE64_URL);
131: force_assert((check_res != NULL) && (check_res == (unsigned char*) check->ptr));
132: force_assert(buffer_is_equal_string(check, (const char*) in, sizeof(in)));
133: }
134: }
135:
136: buffer_free(check);
137: }
138:
139: int main() {
140: check_all_len_0();
141: check_all_len_1();
142: check_all_len_2();
143: check_all_len_3();
144:
145: return 0;
146: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>