Mercurial > dropbear
comparison libtomcrypt/src/encauth/ocb3/ocb3_test.c @ 1471:6dba84798cd5
Update to libtomcrypt 1.18.1, merged with Dropbear changes
author | Matt Johnston <matt@ucc.asn.au> |
---|---|
date | Fri, 09 Feb 2018 21:44:05 +0800 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
1470:8bba51a55704 | 1471:6dba84798cd5 |
---|---|
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 | |
10 /** | |
11 @file ocb3_test.c | |
12 OCB implementation, self-test by Tom St Denis | |
13 */ | |
14 #include "tomcrypt.h" | |
15 | |
16 #ifdef LTC_OCB3_MODE | |
17 | |
18 /** | |
19 Test the OCB protocol | |
20 @return CRYPT_OK if successful | |
21 */ | |
22 int ocb3_test(void) | |
23 { | |
24 #ifndef LTC_TEST | |
25 return CRYPT_NOP; | |
26 #else | |
27 /* test vectors from: http://tools.ietf.org/html/draft-krovetz-ocb-03 */ | |
28 unsigned char key[16] = { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F }; | |
29 unsigned char nonce[12] = { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B }; | |
30 const struct { | |
31 int ptlen; | |
32 int aadlen; | |
33 unsigned char pt[64], aad[64], ct[64], tag[16]; | |
34 } tests[] = { | |
35 | |
36 { /* index:0 */ | |
37 0, /* PLAINTEXT length */ | |
38 0, /* AAD length */ | |
39 { 0 }, /* PLAINTEXT */ | |
40 { 0 }, /* AAD */ | |
41 { 0 }, /* CIPHERTEXT */ | |
42 { 0x19,0x7b,0x9c,0x3c,0x44,0x1d,0x3c,0x83,0xea,0xfb,0x2b,0xef,0x63,0x3b,0x91,0x82 }, /* TAG */ | |
43 }, | |
44 { /* index:1 */ | |
45 8, /* PLAINTEXT length */ | |
46 8, /* AAD length */ | |
47 { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07 }, /* PLAINTEXT */ | |
48 { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07 }, /* AAD */ | |
49 { 0x92,0xb6,0x57,0x13,0x0a,0x74,0xb8,0x5a }, /* CIPHERTEXT */ | |
50 { 0x16,0xdc,0x76,0xa4,0x6d,0x47,0xe1,0xea,0xd5,0x37,0x20,0x9e,0x8a,0x96,0xd1,0x4e }, /* TAG */ | |
51 }, | |
52 { /* index:2 */ | |
53 0, /* PLAINTEXT length */ | |
54 8, /* AAD length */ | |
55 { 0 }, /* PLAINTEXT */ | |
56 { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07 }, /* AAD */ | |
57 { 0 }, /* CIPHERTEXT */ | |
58 { 0x98,0xb9,0x15,0x52,0xc8,0xc0,0x09,0x18,0x50,0x44,0xe3,0x0a,0x6e,0xb2,0xfe,0x21 }, /* TAG */ | |
59 }, | |
60 { /* index:3 */ | |
61 8, /* PLAINTEXT length */ | |
62 0, /* AAD length */ | |
63 { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07 }, /* PLAINTEXT */ | |
64 { 0 }, /* AAD */ | |
65 { 0x92,0xb6,0x57,0x13,0x0a,0x74,0xb8,0x5a }, /* CIPHERTEXT */ | |
66 { 0x97,0x1e,0xff,0xca,0xe1,0x9a,0xd4,0x71,0x6f,0x88,0xe8,0x7b,0x87,0x1f,0xbe,0xed }, /* TAG */ | |
67 }, | |
68 { /* index:4 */ | |
69 16, /* PLAINTEXT length */ | |
70 16, /* AAD length */ | |
71 { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f }, /* PLAINTEXT */ | |
72 { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f }, /* AAD */ | |
73 { 0xbe,0xa5,0xe8,0x79,0x8d,0xbe,0x71,0x10,0x03,0x1c,0x14,0x4d,0xa0,0xb2,0x61,0x22 }, /* CIPHERTEXT */ | |
74 { 0x77,0x6c,0x99,0x24,0xd6,0x72,0x3a,0x1f,0xc4,0x52,0x45,0x32,0xac,0x3e,0x5b,0xeb }, /* TAG */ | |
75 }, | |
76 { /* index:5 */ | |
77 0, /* PLAINTEXT length */ | |
78 16, /* AAD length */ | |
79 { 0 }, /* PLAINTEXT */ | |
80 { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f }, /* AAD */ | |
81 { 0 }, /* CIPHERTEXT */ | |
82 { 0x7d,0xdb,0x8e,0x6c,0xea,0x68,0x14,0x86,0x62,0x12,0x50,0x96,0x19,0xb1,0x9c,0xc6 }, /* TAG */ | |
83 }, | |
84 { /* index:6 */ | |
85 16, /* PLAINTEXT length */ | |
86 0, /* AAD length */ | |
87 { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f }, /* PLAINTEXT */ | |
88 { 0 }, /* AAD */ | |
89 { 0xbe,0xa5,0xe8,0x79,0x8d,0xbe,0x71,0x10,0x03,0x1c,0x14,0x4d,0xa0,0xb2,0x61,0x22 }, /* CIPHERTEXT */ | |
90 { 0x13,0xcc,0x8b,0x74,0x78,0x07,0x12,0x1a,0x4c,0xbb,0x3e,0x4b,0xd6,0xb4,0x56,0xaf }, /* TAG */ | |
91 }, | |
92 { /* index:7 */ | |
93 24, /* PLAINTEXT length */ | |
94 24, /* AAD length */ | |
95 { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17 }, /* PLAINTEXT */ | |
96 { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17 }, /* AAD */ | |
97 { 0xbe,0xa5,0xe8,0x79,0x8d,0xbe,0x71,0x10,0x03,0x1c,0x14,0x4d,0xa0,0xb2,0x61,0x22,0xfc,0xfc,0xee,0x7a,0x2a,0x8d,0x4d,0x48 }, /* CIPHERTEXT */ | |
98 { 0x5f,0xa9,0x4f,0xc3,0xf3,0x88,0x20,0xf1,0xdc,0x3f,0x3d,0x1f,0xd4,0xe5,0x5e,0x1c }, /* TAG */ | |
99 }, | |
100 { /* index:8 */ | |
101 0, /* PLAINTEXT length */ | |
102 24, /* AAD length */ | |
103 { 0 }, /* PLAINTEXT */ | |
104 { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17 }, /* AAD */ | |
105 { 0 }, /* CIPHERTEXT */ | |
106 { 0x28,0x20,0x26,0xda,0x30,0x68,0xbc,0x9f,0xa1,0x18,0x68,0x1d,0x55,0x9f,0x10,0xf6 }, /* TAG */ | |
107 }, | |
108 { /* index:9 */ | |
109 24, /* PLAINTEXT length */ | |
110 0, /* AAD length */ | |
111 { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17 }, /* PLAINTEXT */ | |
112 { 0 }, /* AAD */ | |
113 { 0xbe,0xa5,0xe8,0x79,0x8d,0xbe,0x71,0x10,0x03,0x1c,0x14,0x4d,0xa0,0xb2,0x61,0x22,0xfc,0xfc,0xee,0x7a,0x2a,0x8d,0x4d,0x48 }, /* CIPHERTEXT */ | |
114 { 0x6e,0xf2,0xf5,0x25,0x87,0xfd,0xa0,0xed,0x97,0xdc,0x7e,0xed,0xe2,0x41,0xdf,0x68 }, /* TAG */ | |
115 }, | |
116 { /* index:10 */ | |
117 32, /* PLAINTEXT length */ | |
118 32, /* AAD length */ | |
119 { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f }, /* PLAINTEXT */ | |
120 { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f }, /* AAD */ | |
121 { 0xbe,0xa5,0xe8,0x79,0x8d,0xbe,0x71,0x10,0x03,0x1c,0x14,0x4d,0xa0,0xb2,0x61,0x22,0xce,0xaa,0xb9,0xb0,0x5d,0xf7,0x71,0xa6,0x57,0x14,0x9d,0x53,0x77,0x34,0x63,0xcb }, /* CIPHERTEXT */ | |
122 { 0xb2,0xa0,0x40,0xdd,0x3b,0xd5,0x16,0x43,0x72,0xd7,0x6d,0x7b,0xb6,0x82,0x42,0x40 }, /* TAG */ | |
123 }, | |
124 { /* index:11 */ | |
125 0, /* PLAINTEXT length */ | |
126 32, /* AAD length */ | |
127 { 0 }, /* PLAINTEXT */ | |
128 { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f }, /* AAD */ | |
129 { 0 }, /* CIPHERTEXT */ | |
130 { 0xe1,0xe0,0x72,0x63,0x3b,0xad,0xe5,0x1a,0x60,0xe8,0x59,0x51,0xd9,0xc4,0x2a,0x1b }, /* TAG */ | |
131 }, | |
132 { /* index:12 */ | |
133 32, /* PLAINTEXT length */ | |
134 0, /* AAD length */ | |
135 { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f }, /* PLAINTEXT */ | |
136 { 0 }, /* AAD */ | |
137 { 0xbe,0xa5,0xe8,0x79,0x8d,0xbe,0x71,0x10,0x03,0x1c,0x14,0x4d,0xa0,0xb2,0x61,0x22,0xce,0xaa,0xb9,0xb0,0x5d,0xf7,0x71,0xa6,0x57,0x14,0x9d,0x53,0x77,0x34,0x63,0xcb }, /* CIPHERTEXT */ | |
138 { 0x4a,0x3b,0xae,0x82,0x44,0x65,0xcf,0xda,0xf8,0xc4,0x1f,0xc5,0x0c,0x7d,0xf9,0xd9 }, /* TAG */ | |
139 }, | |
140 { /* index:13 */ | |
141 40, /* PLAINTEXT length */ | |
142 40, /* AAD length */ | |
143 { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27 }, /* PLAINTEXT */ | |
144 { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27 }, /* AAD */ | |
145 { 0xbe,0xa5,0xe8,0x79,0x8d,0xbe,0x71,0x10,0x03,0x1c,0x14,0x4d,0xa0,0xb2,0x61,0x22,0xce,0xaa,0xb9,0xb0,0x5d,0xf7,0x71,0xa6,0x57,0x14,0x9d,0x53,0x77,0x34,0x63,0xcb,0x68,0xc6,0x57,0x78,0xb0,0x58,0xa6,0x35 }, /* CIPHERTEXT */ | |
146 { 0x65,0x9c,0x62,0x32,0x11,0xde,0xea,0x0d,0xe3,0x0d,0x2c,0x38,0x18,0x79,0xf4,0xc8 }, /* TAG */ | |
147 }, | |
148 { /* index:14 */ | |
149 0, /* PLAINTEXT length */ | |
150 40, /* AAD length */ | |
151 { 0 }, /* PLAINTEXT */ | |
152 { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27 }, /* AAD */ | |
153 { 0 }, /* CIPHERTEXT */ | |
154 { 0x7a,0xeb,0x7a,0x69,0xa1,0x68,0x7d,0xd0,0x82,0xca,0x27,0xb0,0xd9,0xa3,0x70,0x96 }, /* TAG */ | |
155 }, | |
156 { /* index:15 */ | |
157 40, /* PLAINTEXT length */ | |
158 0, /* AAD length */ | |
159 { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27 }, /* PLAINTEXT */ | |
160 { 0 }, /* AAD */ | |
161 { 0xbe,0xa5,0xe8,0x79,0x8d,0xbe,0x71,0x10,0x03,0x1c,0x14,0x4d,0xa0,0xb2,0x61,0x22,0xce,0xaa,0xb9,0xb0,0x5d,0xf7,0x71,0xa6,0x57,0x14,0x9d,0x53,0x77,0x34,0x63,0xcb,0x68,0xc6,0x57,0x78,0xb0,0x58,0xa6,0x35 }, /* CIPHERTEXT */ | |
162 { 0x06,0x0c,0x84,0x67,0xf4,0xab,0xab,0x5e,0x8b,0x3c,0x20,0x67,0xa2,0xe1,0x15,0xdc }, /* TAG */ | |
163 }, | |
164 | |
165 }; | |
166 /* As of RFC 7253 - 'Appendix A. Sample Results' | |
167 * The next tuple shows a result with a tag length of 96 bits and a | |
168 different key. | |
169 | |
170 K: 0F0E0D0C0B0A09080706050403020100 | |
171 | |
172 N: BBAA9988776655443322110D | |
173 A: 000102030405060708090A0B0C0D0E0F1011121314151617 | |
174 18191A1B1C1D1E1F2021222324252627 | |
175 P: 000102030405060708090A0B0C0D0E0F1011121314151617 | |
176 18191A1B1C1D1E1F2021222324252627 | |
177 C: 1792A4E31E0755FB03E31B22116E6C2DDF9EFD6E33D536F1 | |
178 A0124B0A55BAE884ED93481529C76B6AD0C515F4D1CDD4FD | |
179 AC4F02AA | |
180 | |
181 The C has been split up in C and T (tag) | |
182 */ | |
183 const unsigned char K[] = { 0x0F,0x0E,0x0D,0x0C,0x0B,0x0A,0x09,0x08, | |
184 0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x00 }; | |
185 const unsigned char N[] = { 0xBB,0xAA,0x99,0x88,0x77,0x66,0x55,0x44, | |
186 0x33,0x22,0x11,0x0D }; | |
187 const unsigned char A[] = { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07, | |
188 0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, | |
189 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17, | |
190 0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, | |
191 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27 }; | |
192 const unsigned char P[] = { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07, | |
193 0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, | |
194 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17, | |
195 0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, | |
196 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27 }; | |
197 const unsigned char C[] = { 0x17,0x92,0xA4,0xE3,0x1E,0x07,0x55,0xFB, | |
198 0x03,0xE3,0x1B,0x22,0x11,0x6E,0x6C,0x2D, | |
199 0xDF,0x9E,0xFD,0x6E,0x33,0xD5,0x36,0xF1, | |
200 0xA0,0x12,0x4B,0x0A,0x55,0xBA,0xE8,0x84, | |
201 0xED,0x93,0x48,0x15,0x29,0xC7,0x6B,0x6A }; | |
202 const unsigned char T[] = { 0xD0,0xC5,0x15,0xF4,0xD1,0xCD,0xD4,0xFD, | |
203 0xAC,0x4F,0x02,0xAA }; | |
204 | |
205 int err, x, idx, res; | |
206 unsigned long len; | |
207 unsigned char outct[MAXBLOCKSIZE] = { 0 }; | |
208 unsigned char outtag[MAXBLOCKSIZE] = { 0 }; | |
209 ocb3_state ocb; | |
210 | |
211 /* AES can be under rijndael or aes... try to find it */ | |
212 if ((idx = find_cipher("aes")) == -1) { | |
213 if ((idx = find_cipher("rijndael")) == -1) { | |
214 return CRYPT_NOP; | |
215 } | |
216 } | |
217 | |
218 for (x = 0; x < (int)(sizeof(tests)/sizeof(tests[0])); x++) { | |
219 len = 16; /* must be the same as the required taglen */ | |
220 if ((err = ocb3_encrypt_authenticate_memory(idx, | |
221 key, sizeof(key), | |
222 nonce, sizeof(nonce), | |
223 tests[x].aadlen != 0 ? tests[x].aad : NULL, tests[x].aadlen, | |
224 tests[x].ptlen != 0 ? tests[x].pt : NULL, tests[x].ptlen, | |
225 tests[x].ptlen != 0 ? outct : NULL, outtag, &len)) != CRYPT_OK) { | |
226 return err; | |
227 } | |
228 | |
229 if (compare_testvector(outtag, len, tests[x].tag, sizeof(tests[x].tag), "OCB3 Tag", x) || | |
230 compare_testvector(outct, tests[x].ptlen, tests[x].ct, tests[x].ptlen, "OCB3 CT", x)) { | |
231 return CRYPT_FAIL_TESTVECTOR; | |
232 } | |
233 | |
234 if ((err = ocb3_decrypt_verify_memory(idx, | |
235 key, sizeof(key), | |
236 nonce, sizeof(nonce), | |
237 tests[x].aadlen != 0 ? tests[x].aad : NULL, tests[x].aadlen, | |
238 tests[x].ptlen != 0 ? outct : NULL, tests[x].ptlen, | |
239 tests[x].ptlen != 0 ? outct : NULL, tests[x].tag, len, &res)) != CRYPT_OK) { | |
240 return err; | |
241 } | |
242 if ((res != 1) || compare_testvector(outct, tests[x].ptlen, tests[x].pt, tests[x].ptlen, "OCB3", x)) { | |
243 #ifdef LTC_TEST_DBG | |
244 printf("\n\nOCB3: Failure-decrypt - res = %d\n", res); | |
245 #endif | |
246 return CRYPT_FAIL_TESTVECTOR; | |
247 } | |
248 } | |
249 | |
250 /* RFC 7253 - test vector with a tag length of 96 bits - part 1 */ | |
251 x = 99; | |
252 len = 12; | |
253 if ((err = ocb3_encrypt_authenticate_memory(idx, | |
254 K, sizeof(K), | |
255 N, sizeof(N), | |
256 A, sizeof(A), | |
257 P, sizeof(P), | |
258 outct, outtag, &len)) != CRYPT_OK) { | |
259 return err; | |
260 } | |
261 | |
262 if (compare_testvector(outtag, len, T, sizeof(T), "OCB3 Tag", x) || | |
263 compare_testvector(outct, sizeof(P), C, sizeof(C), "OCB3 CT", x)) { | |
264 return CRYPT_FAIL_TESTVECTOR; | |
265 } | |
266 | |
267 if ((err = ocb3_decrypt_verify_memory(idx, | |
268 K, sizeof(K), | |
269 N, sizeof(N), | |
270 A, sizeof(A), | |
271 C, sizeof(C), | |
272 outct, T, sizeof(T), &res)) != CRYPT_OK) { | |
273 return err; | |
274 } | |
275 if ((res != 1) || compare_testvector(outct, sizeof(C), P, sizeof(P), "OCB3", x)) { | |
276 #ifdef LTC_TEST_DBG | |
277 printf("\n\nOCB3: Failure-decrypt - res = %d\n", res); | |
278 #endif | |
279 return CRYPT_FAIL_TESTVECTOR; | |
280 } | |
281 | |
282 /* RFC 7253 - test vector with a tag length of 96 bits - part 2 */ | |
283 x = 100; | |
284 if ((err = ocb3_init(&ocb, idx, K, sizeof(K), N, sizeof(N), 12)) != CRYPT_OK) return err; | |
285 if ((err = ocb3_add_aad(&ocb, A, sizeof(A))) != CRYPT_OK) return err; | |
286 if ((err = ocb3_encrypt(&ocb, P, 32, outct)) != CRYPT_OK) return err; | |
287 if ((err = ocb3_encrypt_last(&ocb, P+32, sizeof(P)-32, outct+32)) != CRYPT_OK) return err; | |
288 len = sizeof(outtag); /* intentionally more than 12 */ | |
289 if ((err = ocb3_done(&ocb, outtag, &len)) != CRYPT_OK) return err; | |
290 if (compare_testvector(outct, sizeof(P), C, sizeof(C), "OCB3 CT", x)) return CRYPT_FAIL_TESTVECTOR; | |
291 if (compare_testvector(outtag, len, T, sizeof(T), "OCB3 Tag.enc", x)) return CRYPT_FAIL_TESTVECTOR; | |
292 if ((err = ocb3_init(&ocb, idx, K, sizeof(K), N, sizeof(N), 12)) != CRYPT_OK) return err; | |
293 if ((err = ocb3_add_aad(&ocb, A, sizeof(A))) != CRYPT_OK) return err; | |
294 if ((err = ocb3_decrypt(&ocb, C, 32, outct)) != CRYPT_OK) return err; | |
295 if ((err = ocb3_decrypt_last(&ocb, C+32, sizeof(C)-32, outct+32)) != CRYPT_OK) return err; | |
296 len = sizeof(outtag); /* intentionally more than 12 */ | |
297 if ((err = ocb3_done(&ocb, outtag, &len)) != CRYPT_OK) return err; | |
298 if (compare_testvector(outct, sizeof(C), P, sizeof(P), "OCB3 PT", x)) return CRYPT_FAIL_TESTVECTOR; | |
299 if (compare_testvector(outtag, len, T, sizeof(T), "OCB3 Tag.dec", x)) return CRYPT_FAIL_TESTVECTOR; | |
300 | |
301 return CRYPT_OK; | |
302 #endif /* LTC_TEST */ | |
303 } | |
304 | |
305 #endif /* LTC_OCB3_MODE */ | |
306 | |
307 /* ref: $Format:%D$ */ | |
308 /* git commit: $Format:%H$ */ | |
309 /* commit time: $Format:%ai$ */ |