15
|
1 /* test CFB/OFB/CBC modes */ |
|
2 #include "test.h" |
|
3 |
|
4 int modes_test(void) |
|
5 { |
|
6 unsigned char pt[64], ct[64], tmp[64], key[16], iv[16]; |
|
7 int x, cipher_idx; |
|
8 symmetric_CBC cbc; |
|
9 |
|
10 /* make a random pt, key and iv */ |
|
11 yarrow_read(pt, 64, &test_yarrow); |
|
12 yarrow_read(key, 16, &test_yarrow); |
|
13 yarrow_read(iv, 16, &test_yarrow); |
|
14 |
|
15 /* test CBC mode */ |
|
16 cipher_idx = find_cipher("aes"); |
|
17 if (cipher_idx == -1) { |
|
18 printf("test requires AES"); |
|
19 return 1; |
|
20 } |
|
21 |
|
22 |
|
23 /* encode the block */ |
|
24 DO(cbc_start(cipher_idx, iv, key, 16, 0, &cbc)); |
|
25 for (x = 0; x < 4; x++) { |
|
26 DO(cbc_encrypt(pt+x*16, ct+x*16, &cbc)); |
|
27 } |
|
28 |
|
29 /* decode the block */ |
|
30 DO(cbc_start(cipher_idx, iv, key, 16, 0, &cbc)); |
|
31 for (x = 0; x < 4; x++) { |
|
32 DO(cbc_decrypt(ct+x*16, tmp+x*16, &cbc)); |
|
33 } |
|
34 if (memcmp(tmp, pt, 64) != 0) { |
|
35 printf("CBC failed"); |
|
36 return 1; |
|
37 } |
|
38 |
|
39 /* |
|
40 extern int cbc_start(int cipher, const unsigned char *IV, const unsigned char *key, |
|
41 int keylen, int num_rounds, symmetric_CBC *cbc); |
|
42 extern int cbc_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_CBC *cbc); |
|
43 extern int cbc_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_CBC *cbc); |
|
44 */ |
|
45 |
|
46 } |