Mercurial > dropbear
comparison libtomcrypt/testprof/modes_test.c @ 389:5ff8218bcee9
propagate from branch 'au.asn.ucc.matt.ltm.dropbear' (head 2af95f00ebd5bb7a28b3817db1218442c935388e)
to branch 'au.asn.ucc.matt.dropbear' (head ecd779509ef23a8cdf64888904fc9b31d78aa933)
author | Matt Johnston <matt@ucc.asn.au> |
---|---|
date | Thu, 11 Jan 2007 03:14:55 +0000 |
parents | 0cbe8f6dbf9e |
children | f849a5ca2efc |
comparison
equal
deleted
inserted
replaced
388:fb54020f78e1 | 389:5ff8218bcee9 |
---|---|
1 /* test CFB/OFB/CBC modes */ | |
2 #include <tomcrypt_test.h> | |
3 | |
4 int modes_test(void) | |
5 { | |
6 unsigned char pt[64], ct[64], tmp[64], key[16], iv[16], iv2[16]; | |
7 int cipher_idx; | |
8 #ifdef LTC_CBC_MODE | |
9 symmetric_CBC cbc; | |
10 #endif | |
11 #ifdef LTC_CFB_MODE | |
12 symmetric_CFB cfb; | |
13 #endif | |
14 #ifdef LTC_OFB_MODE | |
15 symmetric_OFB ofb; | |
16 #endif | |
17 unsigned long l; | |
18 | |
19 /* make a random pt, key and iv */ | |
20 yarrow_read(pt, 64, &yarrow_prng); | |
21 yarrow_read(key, 16, &yarrow_prng); | |
22 yarrow_read(iv, 16, &yarrow_prng); | |
23 | |
24 /* get idx of AES handy */ | |
25 cipher_idx = find_cipher("aes"); | |
26 if (cipher_idx == -1) { | |
27 fprintf(stderr, "test requires AES"); | |
28 return 1; | |
29 } | |
30 | |
31 #ifdef LTC_F8_MODE | |
32 DO(f8_test_mode()); | |
33 #endif | |
34 | |
35 #ifdef LTC_LRW_MODE | |
36 DO(lrw_test()); | |
37 #endif | |
38 | |
39 #ifdef LTC_CBC_MODE | |
40 /* test CBC mode */ | |
41 /* encode the block */ | |
42 DO(cbc_start(cipher_idx, iv, key, 16, 0, &cbc)); | |
43 l = sizeof(iv2); | |
44 DO(cbc_getiv(iv2, &l, &cbc)); | |
45 if (l != 16 || memcmp(iv2, iv, 16)) { | |
46 fprintf(stderr, "cbc_getiv failed"); | |
47 return 1; | |
48 } | |
49 DO(cbc_encrypt(pt, ct, 64, &cbc)); | |
50 | |
51 /* decode the block */ | |
52 DO(cbc_setiv(iv2, l, &cbc)); | |
53 zeromem(tmp, sizeof(tmp)); | |
54 DO(cbc_decrypt(ct, tmp, 64, &cbc)); | |
55 if (memcmp(tmp, pt, 64) != 0) { | |
56 fprintf(stderr, "CBC failed"); | |
57 return 1; | |
58 } | |
59 #endif | |
60 | |
61 #ifdef LTC_CFB_MODE | |
62 /* test CFB mode */ | |
63 /* encode the block */ | |
64 DO(cfb_start(cipher_idx, iv, key, 16, 0, &cfb)); | |
65 l = sizeof(iv2); | |
66 DO(cfb_getiv(iv2, &l, &cfb)); | |
67 /* note we don't memcmp iv2/iv since cfb_start processes the IV for the first block */ | |
68 if (l != 16) { | |
69 fprintf(stderr, "cfb_getiv failed"); | |
70 return 1; | |
71 } | |
72 DO(cfb_encrypt(pt, ct, 64, &cfb)); | |
73 | |
74 /* decode the block */ | |
75 DO(cfb_setiv(iv, l, &cfb)); | |
76 zeromem(tmp, sizeof(tmp)); | |
77 DO(cfb_decrypt(ct, tmp, 64, &cfb)); | |
78 if (memcmp(tmp, pt, 64) != 0) { | |
79 fprintf(stderr, "CFB failed"); | |
80 return 1; | |
81 } | |
82 #endif | |
83 | |
84 #ifdef LTC_OFB_MODE | |
85 /* test OFB mode */ | |
86 /* encode the block */ | |
87 DO(ofb_start(cipher_idx, iv, key, 16, 0, &ofb)); | |
88 l = sizeof(iv2); | |
89 DO(ofb_getiv(iv2, &l, &ofb)); | |
90 if (l != 16 || memcmp(iv2, iv, 16)) { | |
91 fprintf(stderr, "ofb_getiv failed"); | |
92 return 1; | |
93 } | |
94 DO(ofb_encrypt(pt, ct, 64, &ofb)); | |
95 | |
96 /* decode the block */ | |
97 DO(ofb_setiv(iv2, l, &ofb)); | |
98 zeromem(tmp, sizeof(tmp)); | |
99 DO(ofb_decrypt(ct, tmp, 64, &ofb)); | |
100 if (memcmp(tmp, pt, 64) != 0) { | |
101 fprintf(stderr, "OFB failed"); | |
102 return 1; | |
103 } | |
104 #endif | |
105 | |
106 #ifdef LTC_CTR_MODE | |
107 DO(ctr_test()); | |
108 #endif | |
109 | |
110 return 0; | |
111 } | |
112 | |
113 /* $Source: /cvs/libtom/libtomcrypt/testprof/modes_test.c,v $ */ | |
114 /* $Revision: 1.14 $ */ | |
115 /* $Date: 2006/11/13 11:55:25 $ */ |