comparison libtomcrypt/tests/modes_test.c @ 1511:5916af64acd4 fuzz

merge from main
author Matt Johnston <matt@ucc.asn.au>
date Sat, 17 Feb 2018 19:29:51 +0800
parents 6dba84798cd5
children
comparison
equal deleted inserted replaced
1457:32f990cc96b1 1511:5916af64acd4
1 /* LibTomCrypt, modular cryptographic library -- Tom St Denis
2 *
3 * LibTomCrypt is a library that provides various cryptographic
4 * algorithms in a highly modular and flexible manner.
5 *
6 * The library is free for all purposes without any express
7 * guarantee it works.
8 */
9 /* test CFB/OFB/CBC modes */
10 #include <tomcrypt_test.h>
11
12 int modes_test(void)
13 {
14 int ret = CRYPT_NOP;
15 #ifdef LTC_CBC_MODE
16 symmetric_CBC cbc;
17 #endif
18 #ifdef LTC_CFB_MODE
19 symmetric_CFB cfb;
20 #endif
21 #ifdef LTC_OFB_MODE
22 symmetric_OFB ofb;
23 #endif
24 #if defined(LTC_CBC_MODE) || defined(LTC_CFB_MODE) || defined(LTC_OFB_MODE)
25 unsigned char pt[64], ct[64], tmp[64], key[16], iv[16], iv2[16];
26 int cipher_idx;
27 unsigned long l;
28
29 /* make a random pt, key and iv */
30 yarrow_read(pt, 64, &yarrow_prng);
31 yarrow_read(key, 16, &yarrow_prng);
32 yarrow_read(iv, 16, &yarrow_prng);
33
34 /* get idx of AES handy */
35 cipher_idx = find_cipher("aes");
36 if (cipher_idx == -1) {
37 fprintf(stderr, "test requires AES");
38 return 1;
39 }
40 #endif
41
42 #ifdef LTC_F8_MODE
43 DO(ret = f8_test_mode());
44 #endif
45
46 #ifdef LTC_LRW_MODE
47 DO(ret = lrw_test());
48 #endif
49
50 #ifdef LTC_CBC_MODE
51 /* test CBC mode */
52 /* encode the block */
53 DO(ret = cbc_start(cipher_idx, iv, key, 16, 0, &cbc));
54 l = sizeof(iv2);
55 DO(ret = cbc_getiv(iv2, &l, &cbc));
56 if (l != 16 || memcmp(iv2, iv, 16)) {
57 fprintf(stderr, "cbc_getiv failed");
58 return 1;
59 }
60 DO(ret = cbc_encrypt(pt, ct, 64, &cbc));
61
62 /* decode the block */
63 DO(ret = cbc_setiv(iv2, l, &cbc));
64 zeromem(tmp, sizeof(tmp));
65 DO(ret = cbc_decrypt(ct, tmp, 64, &cbc));
66 if (memcmp(tmp, pt, 64) != 0) {
67 fprintf(stderr, "CBC failed");
68 return 1;
69 }
70 #endif
71
72 #ifdef LTC_CFB_MODE
73 /* test CFB mode */
74 /* encode the block */
75 DO(ret = cfb_start(cipher_idx, iv, key, 16, 0, &cfb));
76 l = sizeof(iv2);
77 DO(ret = cfb_getiv(iv2, &l, &cfb));
78 /* note we don't memcmp iv2/iv since cfb_start processes the IV for the first block */
79 if (l != 16) {
80 fprintf(stderr, "cfb_getiv failed");
81 return 1;
82 }
83 DO(ret = cfb_encrypt(pt, ct, 64, &cfb));
84
85 /* decode the block */
86 DO(ret = cfb_setiv(iv, l, &cfb));
87 zeromem(tmp, sizeof(tmp));
88 DO(ret = cfb_decrypt(ct, tmp, 64, &cfb));
89 if (memcmp(tmp, pt, 64) != 0) {
90 fprintf(stderr, "CFB failed");
91 return 1;
92 }
93 #endif
94
95 #ifdef LTC_OFB_MODE
96 /* test OFB mode */
97 /* encode the block */
98 DO(ret = ofb_start(cipher_idx, iv, key, 16, 0, &ofb));
99 l = sizeof(iv2);
100 DO(ret = ofb_getiv(iv2, &l, &ofb));
101 if (l != 16 || memcmp(iv2, iv, 16)) {
102 fprintf(stderr, "ofb_getiv failed");
103 return 1;
104 }
105 DO(ret = ofb_encrypt(pt, ct, 64, &ofb));
106
107 /* decode the block */
108 DO(ret = ofb_setiv(iv2, l, &ofb));
109 zeromem(tmp, sizeof(tmp));
110 DO(ret = ofb_decrypt(ct, tmp, 64, &ofb));
111 if (memcmp(tmp, pt, 64) != 0) {
112 fprintf(stderr, "OFB failed");
113 return 1;
114 }
115 #endif
116
117 #if defined(LTC_CTR_MODE) && defined(LTC_RIJNDAEL)
118 DO(ret = ctr_test());
119 #endif
120
121 #ifdef LTC_XTS_MODE
122 DO(ret = xts_test());
123 #endif
124
125 return 0;
126 }
127
128 /* ref: $Format:%D$ */
129 /* git commit: $Format:%H$ */
130 /* commit time: $Format:%ai$ */