1 /* Self tests for base64.
2 Copyright (C) 2004, 2008 Free Software Foundation, Inc.
3 Written by Simon Josefsson.
5 This program is free software: you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 3 of the License, or
8 (at your option) any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>. */
28 main (int argc, char *argv[])
30 const char *in = "abcdefghijklmnop";
31 const char *b64in = "YWJjZGVmZw==";
36 memset (out, 0x42, sizeof (out));
37 base64_encode (in, 0, out, 0);
39 fprintf (stderr, "failure\n");
41 memset (out, 0x42, sizeof (out));
42 base64_encode (in, 1, out, 1);
43 if (memcmp (out, "YQ==", 1) != 0)
46 fprintf (stderr, "failure (%s)\n", out);
49 memset (out, 0x42, sizeof (out));
50 base64_encode (in, 1, out, 2);
51 if (memcmp (out, "YQ==", 2) != 0)
54 fprintf (stderr, "failure (%s)\n", out);
57 memset (out, 0x42, sizeof (out));
58 base64_encode (in, 1, out, 3);
59 if (memcmp (out, "YQ==", 3) != 0)
62 fprintf (stderr, "failure (%s)\n", out);
65 memset (out, 0x42, sizeof (out));
66 base64_encode (in, 1, out, 4);
67 if (memcmp (out, "YQ==", 4) != 0)
70 fprintf (stderr, "failure (%s)\n", out);
73 memset (out, 0x42, sizeof (out));
74 base64_encode (in, 1, out, 8);
75 if (memcmp (out, "YQ==", 4) != 0)
78 fprintf (stderr, "failure (%s)\n", out);
81 memset (out, 0x42, sizeof (out));
82 base64_encode (in, 2, out, 4);
83 if (memcmp (out, "YWI=", 4) != 0)
86 fprintf (stderr, "failure (%s)\n", out);
89 memset (out, 0x42, sizeof (out));
90 base64_encode (in, 3, out, 4);
91 if (memcmp (out, "YWJj", 4) != 0)
94 fprintf (stderr, "failure (%s)\n", out);
97 memset (out, 0x42, sizeof (out));
98 base64_encode (in, 4, out, 5);
99 if (memcmp (out, "YWJjZA==", 5) != 0)
102 fprintf (stderr, "failure (%s)\n", out);
105 memset (out, 0x42, sizeof (out));
106 base64_encode (in, 4, out, 100);
107 if (memcmp (out, "YWJjZA==", 6) != 0)
110 fprintf (stderr, "failure (%s)\n", out);
115 memset (out, 0x42, sizeof (out));
117 ok = base64_decode (b64in, 4, out, &len);
119 fprintf (stderr, "decode failed\n");
121 fprintf (stderr, "failure (%lu)\n", (unsigned long) len);
123 memset (out, 0x42, sizeof (out));
125 ok = base64_decode (b64in, 4, out, &len);
127 fprintf (stderr, "decode failed\n");
128 if (len != 1 || memcmp (out, "abcdefg", 1) != 0)
131 fprintf (stderr, "failure (%lu: %s)\n", (unsigned long) len, out);
134 memset (out, 0x42, sizeof (out));
136 ok = base64_decode (b64in, 4, out, &len);
138 fprintf (stderr, "decode failed\n");
139 if (len != 2 || memcmp (out, "abcdefg", 2) != 0)
142 fprintf (stderr, "failure (%lu: %s)\n", (unsigned long) len, out);
145 memset (out, 0x42, sizeof (out));
147 ok = base64_decode (b64in, 4, out, &len);
149 fprintf (stderr, "decode failed\n");
150 if (len != 3 || memcmp (out, "abcdefg", 3) != 0)
153 fprintf (stderr, "failure (%lu: %s)\n", (unsigned long) len, out);
156 memset (out, 0x42, sizeof (out));
158 ok = base64_decode (b64in, 4, out, &len);
160 fprintf (stderr, "decode failed\n");
161 if (len != 3 || memcmp (out, "abcdefg", 3) != 0)
164 fprintf (stderr, "failure (%lu: %s)\n", (unsigned long) len, out);
167 memset (out, 0x42, sizeof (out));
169 ok = base64_decode (b64in, strlen (b64in), out, &len);
171 fprintf (stderr, "decode failed\n");
172 if (len != 7 || memcmp (out, "abcdefg", 7) != 0)
175 fprintf (stderr, "failure (%lu: %s)\n", (unsigned long) len, out);