summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjsing <>2014-05-26 13:03:46 +0000
committerjsing <>2014-05-26 13:03:46 +0000
commit28f53f223454b76b7fe6ebbc3393a2b36769fa86 (patch)
treea0b564930f350e0d462f6d60aea4104bfc7ae4e6
parent1e04f96479c885fa94175f42f348872cbdd3c9d4 (diff)
downloadopenbsd-28f53f223454b76b7fe6ebbc3393a2b36769fa86.tar.gz
openbsd-28f53f223454b76b7fe6ebbc3393a2b36769fa86.tar.bz2
openbsd-28f53f223454b76b7fe6ebbc3393a2b36769fa86.zip
Update the aead regress to work with the improved EVP AEAD API.
-rw-r--r--src/regress/lib/libcrypto/aead/aeadtest.c36
1 files changed, 14 insertions, 22 deletions
diff --git a/src/regress/lib/libcrypto/aead/aeadtest.c b/src/regress/lib/libcrypto/aead/aeadtest.c
index 910aa5b3d4..7a339bc23c 100644
--- a/src/regress/lib/libcrypto/aead/aeadtest.c
+++ b/src/regress/lib/libcrypto/aead/aeadtest.c
@@ -111,7 +111,7 @@ hex_digit(char h)
111 return 16; 111 return 16;
112} 112}
113 113
114int 114static int
115aead_from_name(const EVP_AEAD **aead, const char *name) 115aead_from_name(const EVP_AEAD **aead, const char *name)
116{ 116{
117 *aead = NULL; 117 *aead = NULL;
@@ -150,9 +150,8 @@ run_test_case(const EVP_AEAD* aead, unsigned char bufs[NUM_TYPES][BUF_MAX],
150 const unsigned int lengths[NUM_TYPES], unsigned int line_no) 150 const unsigned int lengths[NUM_TYPES], unsigned int line_no)
151{ 151{
152 EVP_AEAD_CTX ctx; 152 EVP_AEAD_CTX ctx;
153 ssize_t n;
154 size_t un;
155 unsigned char out[BUF_MAX + EVP_AEAD_MAX_TAG_LENGTH], out2[BUF_MAX]; 153 unsigned char out[BUF_MAX + EVP_AEAD_MAX_TAG_LENGTH], out2[BUF_MAX];
154 size_t out_len, out_len2;
156 155
157 if (!EVP_AEAD_CTX_init(&ctx, aead, bufs[KEY], lengths[KEY], 156 if (!EVP_AEAD_CTX_init(&ctx, aead, bufs[KEY], lengths[KEY],
158 lengths[TAG], NULL)) { 157 lengths[TAG], NULL)) {
@@ -160,20 +159,15 @@ run_test_case(const EVP_AEAD* aead, unsigned char bufs[NUM_TYPES][BUF_MAX],
160 return 0; 159 return 0;
161 } 160 }
162 161
163 n = EVP_AEAD_CTX_seal(&ctx, out, sizeof(out), bufs[NONCE], 162 if (!EVP_AEAD_CTX_seal(&ctx, out, &out_len, sizeof(out), bufs[NONCE],
164 lengths[NONCE], bufs[IN], lengths[IN], bufs[AD], lengths[AD]); 163 lengths[NONCE], bufs[IN], lengths[IN], bufs[AD], lengths[AD])) {
165
166 if (n < 0) {
167 fprintf(stderr, "Failed to run AEAD on line %u\n", line_no); 164 fprintf(stderr, "Failed to run AEAD on line %u\n", line_no);
168 return 0; 165 return 0;
169 } 166 }
170 167
171 un = (size_t)n; 168 if (out_len != lengths[CT] + lengths[TAG]) {
172 169 fprintf(stderr, "Bad output length on line %u: %zu vs %u\n",
173 if (un != lengths[CT] + lengths[TAG]) { 170 line_no, out_len, (unsigned)(lengths[CT] + lengths[TAG]));
174 fprintf(stderr, "Bad output length on line %u: %u vs %u\n",
175 line_no, (unsigned) un,
176 (unsigned)(lengths[CT] + lengths[TAG]));
177 return 0; 171 return 0;
178 } 172 }
179 173
@@ -187,23 +181,21 @@ run_test_case(const EVP_AEAD* aead, unsigned char bufs[NUM_TYPES][BUF_MAX],
187 return 0; 181 return 0;
188 } 182 }
189 183
190 n = EVP_AEAD_CTX_open(&ctx, out2, lengths[IN], bufs[NONCE], 184 if (!EVP_AEAD_CTX_open(&ctx, out2, &out_len2, lengths[IN], bufs[NONCE],
191 lengths[NONCE], out, un, bufs[AD], lengths[AD]); 185 lengths[NONCE], out, out_len, bufs[AD], lengths[AD])) {
192 if (n < 0) {
193 fprintf(stderr, "Failed to decrypt on line %u\n", line_no); 186 fprintf(stderr, "Failed to decrypt on line %u\n", line_no);
194 return 0; 187 return 0;
195 } 188 }
196 189
197 if ((size_t)n != lengths[IN]) { 190 if (out_len2 != lengths[IN]) {
198 fprintf(stderr, "Bad decrypt on line %u: %u\n", line_no, 191 fprintf(stderr, "Bad decrypt on line %u: %zu\n",
199 (unsigned) n); 192 line_no, out_len2);
200 return 0; 193 return 0;
201 } 194 }
202 195
203 out[0] ^= 0x80; 196 out[0] ^= 0x80;
204 n = EVP_AEAD_CTX_open(&ctx, out2, lengths[IN], bufs[NONCE], 197 if (EVP_AEAD_CTX_open(&ctx, out2, &out_len2, lengths[IN], bufs[NONCE],
205 lengths[NONCE], out, un, bufs[AD], lengths[AD]); 198 lengths[NONCE], out, out_len, bufs[AD], lengths[AD])) {
206 if (n >= 0) {
207 fprintf(stderr, "Decrypted bad data on line %u\n", line_no); 199 fprintf(stderr, "Decrypted bad data on line %u\n", line_no);
208 return 0; 200 return 0;
209 } 201 }