Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
att
GitHub Repository: att/ast
Path: blob/master/src/cmd/tests/base64.c
1808 views
1
/***********************************************************************
2
* *
3
* This software is part of the ast package *
4
* Copyright (c) 1999-2011 AT&T Intellectual Property *
5
* and is licensed under the *
6
* Eclipse Public License, Version 1.0 *
7
* by AT&T Intellectual Property *
8
* *
9
* A copy of the License is available at *
10
* http://www.eclipse.org/org/documents/epl-v10.html *
11
* (with md5 checksum b35adb5213ca9657e911e9befb180842) *
12
* *
13
* Information and Software Systems Research *
14
* AT&T Research *
15
* Florham Park NJ *
16
* *
17
* Glenn Fowler <[email protected]> *
18
* *
19
***********************************************************************/
20
#pragma prototyped
21
/*
22
* base64encode()/base64decode() tester
23
*/
24
25
#include <ast.h>
26
27
main()
28
{
29
register int i;
30
int testno;
31
int errors;
32
ssize_t l;
33
ssize_t r;
34
ssize_t t;
35
unsigned char dat[256];
36
unsigned char tst[sizeof(dat)];
37
char buf[1024];
38
unsigned char pat[16];
39
40
static char en[] = "YWJjZGVmZ2hpams=";
41
static char de[] = "abcdefghijk";
42
43
testno = errors = 0;
44
sfprintf(sfstdout, "TEST base64\n");
45
for (i = 0; i < sizeof(dat); i++)
46
dat[i] = i;
47
for (i = 0; i < sizeof(dat) - 1; i++)
48
{
49
testno++;
50
if (i > 0)
51
{
52
l = base64encode(dat, i, NiL, buf, sizeof(buf), NiL);
53
if (l < 0 || l > sizeof(buf))
54
{
55
errors++;
56
sfprintf(sfstdout, "test %02d left buffer encode size %ld failed\n", testno, l);
57
continue;
58
}
59
t = base64decode(buf, l, NiL, tst, sizeof(tst), NiL);
60
if (t != i)
61
{
62
errors++;
63
sfprintf(sfstdout, "test %02d left buffer decode size %ld failed\n", testno, t);
64
continue;
65
}
66
if (memcmp(dat, tst, i))
67
{
68
errors++;
69
sfprintf(sfstdout, "test %02d left buffer decode failed\n", testno);
70
continue;
71
}
72
}
73
else
74
l = 0;
75
r = base64encode(dat + i, sizeof(dat) - i, NiL, buf + l, sizeof(buf) - l, NiL);
76
if (r < 0 || r > sizeof(buf) - l)
77
{
78
errors++;
79
sfprintf(sfstdout, "test %02d right buffer encode size %ld failed\n", testno, r);
80
continue;
81
}
82
t = base64decode(buf + l, r, NiL, tst, sizeof(tst), NiL);
83
if (t != (sizeof(dat) - i))
84
{
85
errors++;
86
sfprintf(sfstdout, "test %02d total buffer decode size %ld failed\n", testno, t);
87
continue;
88
}
89
if (memcmp(dat + i, tst, sizeof(dat) - i))
90
{
91
errors++;
92
sfprintf(sfstdout, "test %02d right buffer decode failed\n", testno);
93
continue;
94
}
95
t = base64decode(buf, l + r, NiL, tst, sizeof(tst), NiL);
96
if (t != sizeof(dat))
97
{
98
errors++;
99
sfprintf(sfstdout, "test %02d total buffer decode size %ld failed\n", testno, t);
100
continue;
101
}
102
if (memcmp(dat, tst, sizeof(dat)))
103
{
104
errors++;
105
sfprintf(sfstdout, "test %02d total buffer decode failed\n", testno);
106
continue;
107
}
108
}
109
for (r = 0; r <= sizeof(pat); r++)
110
{
111
testno++;
112
memset(tst, '*', sizeof(pat));
113
tst[sizeof(pat)-1] = 0;
114
t = base64decode(en, sizeof(en)-1, NiL, tst, r, NiL);
115
if (t != (sizeof(de)-1))
116
{
117
sfprintf(sfstdout, "decode size %r failed, %r expected\n", t, sizeof(de)-1);
118
errors++;
119
}
120
else
121
{
122
memset(pat, '*', sizeof(pat));
123
pat[sizeof(pat)-1] = 0;
124
memcpy(pat, de, r >= sizeof(de) ? sizeof(de) : r);
125
if (memcmp(tst, pat, sizeof(pat)))
126
{
127
sfprintf(sfstdout, "decode failed, \"%s\" != \"%s\"\n", tst, pat);
128
errors++;
129
}
130
}
131
}
132
sfprintf(sfstdout, "TEST base64, %d test%s", testno, testno == 1 ? "" : "s");
133
sfprintf(sfstdout, ", %d error%s\n", errors, errors == 1 ? "" : "s");
134
return 0;
135
}
136
137