Remove execute permission.
[gnulib.git] / tests / test-base64.c
1 /* Self tests for base64.
2    Copyright (C) 2004 Free Software Foundation, Inc.
3    Written by Simon Josefsson.
4
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 2, or (at your option)
8    any later version.
9
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.
14
15    You should have received a copy of the GNU General Public License along
16    with this program; if not, write to the Free Software Foundation,
17    Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
18
19 #include <config.h>
20
21 #include <stddef.h>
22 #include <stdio.h>
23 #include <stdbool.h>
24 #include <string.h>
25
26 #include "base64.h"
27
28 int
29 main (int argc, char *argv[])
30 {
31   const char *in = "abcdefghijklmnop";
32   const char *b64in = "YWJjZGVmZw==";
33   char out[255];
34   size_t len;
35   bool ok;
36
37   memset (out, 0x42, sizeof (out));
38   base64_encode (in, 0, out, 0);
39   if (out[0] != '\x42')
40     fprintf (stderr, "failure\n");
41
42   memset (out, 0x42, sizeof (out));
43   base64_encode (in, 1, out, 1);
44   if (memcmp (out, "YQ==", 1) != 0)
45     {
46       out[4] = '\0';
47       fprintf (stderr, "failure (%s)\n", out);
48     }
49
50   memset (out, 0x42, sizeof (out));
51   base64_encode (in, 1, out, 2);
52   if (memcmp (out, "YQ==", 2) != 0)
53     {
54       out[4] = '\0';
55       fprintf (stderr, "failure (%s)\n", out);
56     }
57
58   memset (out, 0x42, sizeof (out));
59   base64_encode (in, 1, out, 3);
60   if (memcmp (out, "YQ==", 3) != 0)
61     {
62       out[4] = '\0';
63       fprintf (stderr, "failure (%s)\n", out);
64     }
65
66   memset (out, 0x42, sizeof (out));
67   base64_encode (in, 1, out, 4);
68   if (memcmp (out, "YQ==", 4) != 0)
69     {
70       out[4] = '\0';
71       fprintf (stderr, "failure (%s)\n", out);
72     }
73
74   memset (out, 0x42, sizeof (out));
75   base64_encode (in, 1, out, 8);
76   if (memcmp (out, "YQ==", 4) != 0)
77     {
78       out[4] = '\0';
79       fprintf (stderr, "failure (%s)\n", out);
80     }
81
82   memset (out, 0x42, sizeof (out));
83   base64_encode (in, 2, out, 4);
84   if (memcmp (out, "YWI=", 4) != 0)
85     {
86       out[4] = '\0';
87       fprintf (stderr, "failure (%s)\n", out);
88     }
89
90   memset (out, 0x42, sizeof (out));
91   base64_encode (in, 3, out, 4);
92   if (memcmp (out, "YWJj", 4) != 0)
93     {
94       out[4] = '\0';
95       fprintf (stderr, "failure (%s)\n", out);
96     }
97
98   memset (out, 0x42, sizeof (out));
99   base64_encode (in, 4, out, 5);
100   if (memcmp (out, "YWJjZA==", 5) != 0)
101     {
102       out[5] = '\0';
103       fprintf (stderr, "failure (%s)\n", out);
104     }
105
106   memset (out, 0x42, sizeof (out));
107   base64_encode (in, 4, out, 100);
108   if (memcmp (out, "YWJjZA==", 6) != 0)
109     {
110       out[6] = '\0';
111       fprintf (stderr, "failure (%s)\n", out);
112     }
113
114   /* Decode. */
115
116   memset (out, 0x42, sizeof (out));
117   len = 0;
118   ok = base64_decode (b64in, 4, out, &len);
119   if (!ok)
120     fprintf (stderr, "decode failed\n");
121   if (len != 0)
122     fprintf (stderr, "failure (%d)\n", len);
123
124   memset (out, 0x42, sizeof (out));
125   len = 1;
126   ok = base64_decode (b64in, 4, out, &len);
127   if (!ok)
128     fprintf (stderr, "decode failed\n");
129   if (len != 1 || memcmp (out, "abcdefg", 1) != 0)
130     {
131       out[2] = '\0';
132       fprintf (stderr, "failure (%d: %s)\n", len, out);
133     }
134
135   memset (out, 0x42, sizeof (out));
136   len = 2;
137   ok = base64_decode (b64in, 4, out, &len);
138   if (!ok)
139     fprintf (stderr, "decode failed\n");
140   if (len != 2 || memcmp (out, "abcdefg", 2) != 0)
141     {
142       out[3] = '\0';
143       fprintf (stderr, "failure (%d: %s)\n", len, out);
144     }
145
146   memset (out, 0x42, sizeof (out));
147   len = 3;
148   ok = base64_decode (b64in, 4, out, &len);
149   if (!ok)
150     fprintf (stderr, "decode failed\n");
151   if (len != 3 || memcmp (out, "abcdefg", 3) != 0)
152     {
153       out[4] = '\0';
154       fprintf (stderr, "failure (%d: %s)\n", len, out);
155     }
156
157   memset (out, 0x42, sizeof (out));
158   len = 4;
159   ok = base64_decode (b64in, 4, out, &len);
160   if (!ok)
161     fprintf (stderr, "decode failed\n");
162   if (len != 3 || memcmp (out, "abcdefg", 3) != 0)
163     {
164       out[3] = '\0';
165       fprintf (stderr, "failure (%d: %s)\n", len, out);
166     }
167
168   memset (out, 0x42, sizeof (out));
169   len = 100;
170   ok = base64_decode (b64in, strlen (b64in), out, &len);
171   if (!ok)
172     fprintf (stderr, "decode failed\n");
173   if (len != 7 || memcmp (out, "abcdefg", 7) != 0)
174     {
175       out[7] = '\0';
176       fprintf (stderr, "failure (%d: %s)\n", len, out);
177     }
178
179   return 0;
180 }