Warning: Attempt to read property "date" on null in /usr/local/www/websvn.planix.org/blame.php on line 247

Warning: Attempt to read property "msg" on null in /usr/local/www/websvn.planix.org/blame.php on line 247
WebSVN – planix.SVN – Blame – /os/trunk/sys/src/libsec/port/aesgcmtest.c – Rev 26

Subversion Repositories planix.SVN

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
26 7u83 1
#include <u.h>
2
#include <libc.h>
3
#include <mp.h>
4
#include <libsec.h>
5
 
6
typedef struct Test Test;
7
struct Test
8
{
9
	char *K;
10
	char *P;
11
	char *A;
12
	char *IV;
13
	char *T;
14
};
15
 
16
Test tests[] = {
17
	{	/* Test Case 1 */
18
		"00000000000000000000000000000000",
19
		"",
20
		"",
21
		"000000000000000000000000",
22
 
23
		"58E2FCCEFA7E3061367F1D57A4E7455A"
24
	},
25
	{	/* Test Case 2 */
26
		"00000000000000000000000000000000",
27
		"00000000000000000000000000000000",
28
		"",
29
		"000000000000000000000000",
30
 
31
		"AB6E47D42CEC13BDF53A67B21257BDDF",
32
	},
33
	{	/* Test Case 3 */
34
		"feffe9928665731c6d6a8f9467308308",
35
		"d9313225f88406e5a55909c5aff5269a"
36
		"86a7a9531534f7da2e4c303d8a318a72"
37
		"1c3c0c95956809532fcf0e2449a6b525"
38
		"b16aedf5aa0de657ba637b391aafd255",
39
		"",
40
		"cafebabefacedbaddecaf888",
41
 
42
		"4D5C2AF327CD64A62CF35ABD2BA6FAB4"
43
	},
44
	{	/* Test Case 4 */
45
		"feffe9928665731c6d6a8f9467308308",
46
		"d9313225f88406e5a55909c5aff5269a"
47
		"86a7a9531534f7da2e4c303d8a318a72"
48
		"1c3c0c95956809532fcf0e2449a6b525"
49
		"b16aedf5aa0de657ba637b39",
50
		"feedfacedeadbeeffeedfacedeadbeef"
51
		"abaddad2",
52
		"cafebabefacedbaddecaf888",
53
 
54
		"5BC94FBC3221A5DB94FAE95AE7121A47"
55
	},
56
	{	/* Test Case 5 */
57
		"feffe9928665731c6d6a8f9467308308",
58
		"d9313225f88406e5a55909c5aff5269a"
59
		"86a7a9531534f7da2e4c303d8a318a72"
60
		"1c3c0c95956809532fcf0e2449a6b525"
61
		"b16aedf5aa0de657ba637b39",
62
		"feedfacedeadbeeffeedfacedeadbeef"
63
		"abaddad2",
64
		"cafebabefacedbad",
65
 
66
		"3612D2E79E3B0785561BE14AACA2FCCB"
67
	},
68
	{	/* Test Case 6 */
69
		"feffe9928665731c6d6a8f9467308308",
70
		"d9313225f88406e5a55909c5aff5269a"
71
		"86a7a9531534f7da2e4c303d8a318a72"
72
		"1c3c0c95956809532fcf0e2449a6b525"
73
		"b16aedf5aa0de657ba637b39",
74
		"feedfacedeadbeeffeedfacedeadbeef"
75
		"abaddad2",
76
		"9313225df88406e555909c5aff5269aa"
77
		"6a7a9538534f7da1e4c303d2a318a728"
78
		"c3c0c95156809539fcf0e2429a6b5254"
79
		"16aedbf5a0de6a57a637b39b",
80
 
81
		"619CC5AEFFFE0BFA462AF43C1699D050"
82
	},
83
	{	/* Test Case 7 */
84
		"00000000000000000000000000000000"
85
		"0000000000000000",
86
		"",
87
		"",
88
		"000000000000000000000000",
89
 
90
		"CD33B28AC773F74BA00ED1F312572435"
91
	},
92
	{	/* Test Case 8 */
93
		"00000000000000000000000000000000"
94
		"0000000000000000",
95
		"00000000000000000000000000000000",
96
		"",
97
		"000000000000000000000000",
98
 
99
		"2FF58D80033927AB8EF4D4587514F0FB"
100
	},
101
	{	/* Test Case 9 */
102
		"feffe9928665731c6d6a8f9467308308"
103
		"feffe9928665731c",
104
		"d9313225f88406e5a55909c5aff5269a"
105
		"86a7a9531534f7da2e4c303d8a318a72"
106
		"1c3c0c95956809532fcf0e2449a6b525"
107
		"b16aedf5aa0de657ba637b391aafd255",
108
		"",
109
		"cafebabefacedbaddecaf888",
110
 
111
		"9924A7C8587336BFB118024DB8674A14"
112
	},
113
	{	/* Test Case 10 */
114
		"feffe9928665731c6d6a8f9467308308"
115
		"feffe9928665731c",
116
		"d9313225f88406e5a55909c5aff5269a"
117
		"86a7a9531534f7da2e4c303d8a318a72"
118
		"1c3c0c95956809532fcf0e2449a6b525"
119
		"b16aedf5aa0de657ba637b39",
120
		"feedfacedeadbeeffeedfacedeadbeef"
121
		"abaddad2",
122
		"cafebabefacedbaddecaf888",
123
 
124
		"2519498E80F1478F37BA55BD6D27618C"
125
	},
126
	{	/* Test Case 11 */
127
		"feffe9928665731c6d6a8f9467308308"
128
		"feffe9928665731c",
129
		"d9313225f88406e5a55909c5aff5269a"
130
		"86a7a9531534f7da2e4c303d8a318a72"
131
		"1c3c0c95956809532fcf0e2449a6b525"
132
		"b16aedf5aa0de657ba637b39",
133
		"feedfacedeadbeeffeedfacedeadbeef"
134
		"abaddad2",
135
		"cafebabefacedbad",
136
 
137
		"65DCC57FCF623A24094FCCA40D3533F8"
138
	},
139
	{	/* Test Case 12 */
140
		"feffe9928665731c6d6a8f9467308308"
141
		"feffe9928665731c",
142
		"d9313225f88406e5a55909c5aff5269a"
143
		"86a7a9531534f7da2e4c303d8a318a72"
144
		"1c3c0c95956809532fcf0e2449a6b525"
145
		"b16aedf5aa0de657ba637b39",
146
		"feedfacedeadbeeffeedfacedeadbeef"
147
		"abaddad2",
148
		"9313225df88406e555909c5aff5269aa"
149
		"6a7a9538534f7da1e4c303d2a318a728"
150
		"c3c0c95156809539fcf0e2429a6b5254"
151
		"16aedbf5a0de6a57a637b39b",
152
 
153
		"DCF566FF291C25BBB8568FC3D376A6D9"
154
	},
155
	{	/* Test Case 13 */
156
		"00000000000000000000000000000000"
157
		"00000000000000000000000000000000",
158
		"",
159
		"",
160
		"000000000000000000000000",
161
 
162
		"530F8AFBC74536B9A963B4F1C4CB738B"
163
	},
164
	{	/* Test Case 14 */
165
		"00000000000000000000000000000000"
166
		"00000000000000000000000000000000",
167
		"00000000000000000000000000000000",
168
		"",
169
		"000000000000000000000000",
170
 
171
		"D0D1C8A799996BF0265B98B5D48AB919"
172
	},
173
	{	/* Test Case 15 */
174
		"feffe9928665731c6d6a8f9467308308"
175
		"feffe9928665731c6d6a8f9467308308",
176
		"d9313225f88406e5a55909c5aff5269a"
177
		"86a7a9531534f7da2e4c303d8a318a72"
178
		"1c3c0c95956809532fcf0e2449a6b525"
179
		"b16aedf5aa0de657ba637b391aafd255",
180
		"",
181
		"cafebabefacedbaddecaf888",
182
 
183
		"B094DAC5D93471BDEC1A502270E3CC6C"
184
	},
185
	{	/* Test Case 16 */
186
		"feffe9928665731c6d6a8f9467308308"
187
		"feffe9928665731c6d6a8f9467308308",
188
		"d9313225f88406e5a55909c5aff5269a"
189
		"86a7a9531534f7da2e4c303d8a318a72"
190
		"1c3c0c95956809532fcf0e2449a6b525"
191
		"b16aedf5aa0de657ba637b39",
192
		"feedfacedeadbeeffeedfacedeadbeef"
193
		"abaddad2",
194
		"cafebabefacedbaddecaf888",
195
 
196
		"76FC6ECE0F4E1768CDDF8853BB2D551B"
197
	},
198
	{	/* Test Case 17 */
199
		"feffe9928665731c6d6a8f9467308308"
200
		"feffe9928665731c6d6a8f9467308308",
201
		"d9313225f88406e5a55909c5aff5269a"
202
		"86a7a9531534f7da2e4c303d8a318a72"
203
		"1c3c0c95956809532fcf0e2449a6b525"
204
		"b16aedf5aa0de657ba637b39",
205
		"feedfacedeadbeeffeedfacedeadbeef"
206
		"abaddad2",
207
		"cafebabefacedbad",
208
 
209
		"3A337DBF46A792C45E454913FE2EA8F2"
210
	},
211
	{	/* Test Case 18 */
212
		"feffe9928665731c6d6a8f9467308308"
213
		"feffe9928665731c6d6a8f9467308308",
214
		"d9313225f88406e5a55909c5aff5269a"
215
		"86a7a9531534f7da2e4c303d8a318a72"
216
		"1c3c0c95956809532fcf0e2449a6b525"
217
		"b16aedf5aa0de657ba637b39",
218
		"feedfacedeadbeeffeedfacedeadbeef"
219
		"abaddad2",
220
		"9313225df88406e555909c5aff5269aa"
221
		"6a7a9538534f7da1e4c303d2a318a728"
222
		"c3c0c95156809539fcf0e2429a6b5254"
223
		"16aedbf5a0de6a57a637b39b",
224
 
225
		"A44A8266EE1C8EB0C8B5D4CF5AE9F19A"
226
	},
227
};
228
 
229
int
230
parsehex(char *s, uchar *h, char *l)
231
{
232
	char *e;
233
	mpint *m;
234
	int n;
235
 
236
	n = strlen(s);
237
	if(n == 0)
238
		return 0;
239
	assert((n & 1) == 0);
240
	n >>= 1;
241
	e = nil;
242
	m = strtomp(s, &e, 16, nil);
243
	if(m == nil || *e != '\0')
244
		abort();
245
	mptober(m, h, n);
246
	if(l != nil)
247
		print("%s = %.*H\n", l, n, h);
248
	return n;
249
}
250
 
251
void
252
runtest(Test *t)
253
{
254
	AESGCMstate s;
255
	uchar key[1024], plain[1024], aad[1024], iv[1024], tag[16], tmp[16];
256
	int nkey, nplain, naad, niv;
257
 
258
	nkey = parsehex(t->K, key, "K");
259
	nplain = parsehex(t->P, plain, "P");
260
	naad = parsehex(t->A, aad, "A");
261
	niv = parsehex(t->IV, iv, "IV");
262
 
263
	setupAESGCMstate(&s, key, nkey, iv, niv);
264
	aesgcm_encrypt(plain, nplain, aad, naad, tag, &s);
265
	print("C = %.*H\n", nplain, plain);
266
	print("T = %.*H\n", 16, tag);
267
 
268
	parsehex(t->T, tmp, nil);
269
	assert(memcmp(tmp, tag, 16) == 0);
270
}
271
 
272
void
273
perftest(void)
274
{
275
	AESGCMstate s;
276
	static uchar zeros[16];
277
	uchar buf[1024*1024], tag[16];
278
	vlong now;
279
	int i, delta;
280
 
281
	now = nsec();
282
	for(i=0; i<100; i++){
283
		memset(buf, 0, sizeof(buf));
284
		if(1){
285
			setupAESGCMstate(&s, zeros, 16, zeros, 12);
286
			aesgcm_encrypt(buf, sizeof(buf), nil, 0, tag, &s);
287
		} else {
288
			setupAESstate(&s, zeros, 16, zeros);
289
			aesCBCencrypt(buf, sizeof(buf), &s);
290
		}
291
	}
292
	delta = (nsec() - now) / 1000000000LL;
293
	fprint(2, "%ds = %d/s\n", delta, i*sizeof(buf) / delta);
294
}
295
 
296
void
297
main(int argc, char **argv)
298
{
299
	int i;
300
 
301
	fmtinstall('H', encodefmt);
302
 
303
	ARGBEGIN {
304
	case 'p':
305
		perftest();
306
		exits(nil);
307
	} ARGEND;
308
 
309
	for(i=0; i<nelem(tests); i++){
310
		print("Test Case %d\n", i+1);
311
		runtest(&tests[i]);
312
		print("\n");
313
	}
314
}