blob: 52a7e576ce63f90250be54d66e54c45175906350 [file] [log] [blame]
Pascal Brandc639ac82015-07-02 08:53:34 +02001/*
2 * Copyright (c) 2014, STMicroelectronics International N.V.
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License Version 2 as
6 * published by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 */
13
14#include <stdio.h>
15#include <string.h>
16#include <inttypes.h>
17#include <malloc.h>
18
19#include "xtest_test.h"
20#include "xtest_helpers.h"
21
22#include <tee_api_types.h>
23#include <ta_crypt.h>
24#include <utee_defines.h>
25#include <util.h>
26
27#include <xtest_4000_data.h>
Cedric Chaumontc7654962015-09-09 14:56:36 +020028#include <nist/186-2ecdsatestvectors.h>
Pascal Brandc639ac82015-07-02 08:53:34 +020029
30#include <assert.h>
31
32static void xtest_tee_test_4001(ADBG_Case_t *Case_p);
33static void xtest_tee_test_4002(ADBG_Case_t *Case_p);
34static void xtest_tee_test_4003_no_xts(ADBG_Case_t *Case_p);
35static void xtest_tee_test_4003_xts(ADBG_Case_t *Case_p);
36static void xtest_tee_test_4004(ADBG_Case_t *Case_p);
37static void xtest_tee_test_4005(ADBG_Case_t *Case_p);
38static void xtest_tee_test_4006(ADBG_Case_t *Case_p);
39static void xtest_tee_test_4007(ADBG_Case_t *Case_p);
40static void xtest_tee_test_4008(ADBG_Case_t *Case_p);
Pascal Brand2b92b642015-07-16 13:29:42 +020041static void xtest_tee_test_4009(ADBG_Case_t *Case_p);
Jens Wiklander70a0b2c2016-05-18 08:39:35 +020042static void xtest_tee_test_4010(ADBG_Case_t *Case_p);
Jens Wiklanderb58916e2016-07-07 15:29:32 +020043static void xtest_tee_test_4011(ADBG_Case_t *Case_p);
Pascal Brandc639ac82015-07-02 08:53:34 +020044
Jens Wiklander74abfe32017-01-03 14:17:47 +010045ADBG_CASE_DEFINE(regression, 4001, xtest_tee_test_4001,
Jens Wiklander25a57fe2016-12-26 21:46:24 +010046 "Test TEE Internal API hash operations");
Jens Wiklander74abfe32017-01-03 14:17:47 +010047ADBG_CASE_DEFINE(regression, 4002, xtest_tee_test_4002,
Jens Wiklander25a57fe2016-12-26 21:46:24 +010048 "Test TEE Internal API MAC operations");
Jens Wiklander74abfe32017-01-03 14:17:47 +010049ADBG_CASE_DEFINE(regression, 4003_NO_XTS, xtest_tee_test_4003_no_xts,
Jens Wiklander25a57fe2016-12-26 21:46:24 +010050 "Test TEE Internal API cipher operations without AES XTS");
Jens Wiklander74abfe32017-01-03 14:17:47 +010051ADBG_CASE_DEFINE(regression, 4003_XTS, xtest_tee_test_4003_xts,
Jens Wiklander25a57fe2016-12-26 21:46:24 +010052 "Test TEE Internal API cipher operations for AES XTS");
Jens Wiklander74abfe32017-01-03 14:17:47 +010053ADBG_CASE_DEFINE(regression, 4004, xtest_tee_test_4004,
Jens Wiklander25a57fe2016-12-26 21:46:24 +010054 "Test TEE Internal API get random");
Jens Wiklander74abfe32017-01-03 14:17:47 +010055ADBG_CASE_DEFINE(regression, 4005, xtest_tee_test_4005,
Jens Wiklander25a57fe2016-12-26 21:46:24 +010056 "Test TEE Internal API Authenticated Encryption operations");
Jens Wiklander74abfe32017-01-03 14:17:47 +010057ADBG_CASE_DEFINE(regression, 4006, xtest_tee_test_4006,
Jens Wiklander25a57fe2016-12-26 21:46:24 +010058 "Test TEE Internal API Asymmetric Cipher operations");
Jens Wiklander74abfe32017-01-03 14:17:47 +010059ADBG_CASE_DEFINE(regression, 4007, xtest_tee_test_4007,
Jens Wiklander25a57fe2016-12-26 21:46:24 +010060 "Test TEE Internal API Generate key");
Jens Wiklander74abfe32017-01-03 14:17:47 +010061ADBG_CASE_DEFINE(regression, 4008, xtest_tee_test_4008,
Jens Wiklander25a57fe2016-12-26 21:46:24 +010062 "Test TEE Internal API Derive key");
Jens Wiklander74abfe32017-01-03 14:17:47 +010063ADBG_CASE_DEFINE(regression, 4009, xtest_tee_test_4009,
Jens Wiklander25a57fe2016-12-26 21:46:24 +010064 "Test TEE Internal API Derive key ECDH");
Jens Wiklander74abfe32017-01-03 14:17:47 +010065ADBG_CASE_DEFINE(regression, 4010, xtest_tee_test_4010,
Jens Wiklander25a57fe2016-12-26 21:46:24 +010066 "Test TEE Internal API create transient object (negative)");
Jens Wiklander74abfe32017-01-03 14:17:47 +010067ADBG_CASE_DEFINE(regression, 4011, xtest_tee_test_4011,
Jens Wiklander25a57fe2016-12-26 21:46:24 +010068 "Test TEE Internal API Bleichenbacher attack (negative)");
Jens Wiklanderb58916e2016-07-07 15:29:32 +020069
Pascal Brandc639ac82015-07-02 08:53:34 +020070static TEEC_Result ta_crypt_cmd_random_number_generate(ADBG_Case_t *c,
71 TEEC_Session *s,
72 void *buf, size_t blen);
73
74static TEEC_Result ta_crypt_cmd_reset_operation(ADBG_Case_t *c, TEEC_Session *s,
75 TEE_OperationHandle oph)
76{
77 TEEC_Result res;
78 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
79 uint32_t ret_orig;
80
81 assert((uintptr_t)oph <= UINT32_MAX);
82 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
83 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE,
84 TEEC_NONE);
85 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_RESET_OPERATION, &op,
86 &ret_orig);
87 if (res != TEEC_SUCCESS) {
88 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
89 ret_orig);
90 }
91 return res;
92}
93
94static TEEC_Result ta_crypt_cmd_copy_operation(ADBG_Case_t *c,
95 TEEC_Session *s,
96 TEE_OperationHandle dst_oph,
97 TEE_OperationHandle src_oph)
98{
99 TEEC_Result res;
100 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
101 uint32_t ret_orig;
102
103 assert((uintptr_t)dst_oph <= UINT32_MAX);
104 op.params[0].value.a = (uint32_t)(uintptr_t)dst_oph;
105
106 assert((uintptr_t)src_oph <= UINT32_MAX);
107 op.params[0].value.b = (uint32_t)(uintptr_t)src_oph;
108 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE,
109 TEEC_NONE);
110
111 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_COPY_OPERATION, &op,
112 &ret_orig);
113
114 if (res != TEEC_SUCCESS) {
115 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
116 ret_orig);
117 }
118 return res;
119}
120
121static TEEC_Result ta_crypt_cmd_digest_update(ADBG_Case_t *c, TEEC_Session *s,
122 TEE_OperationHandle oph,
123 const void *chunk,
124 size_t chunk_size)
125{
126 TEEC_Result res;
127 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
128 uint32_t ret_orig;
129
130 assert((uintptr_t)oph <= UINT32_MAX);
131 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
132 op.params[1].tmpref.buffer = (void *)chunk;
133 op.params[1].tmpref.size = chunk_size;
134
135 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
136 TEEC_MEMREF_TEMP_INPUT, TEEC_NONE,
137 TEEC_NONE);
138
139 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_DIGEST_UPDATE, &op, &ret_orig);
140
141 if (res != TEEC_SUCCESS) {
142 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
143 ret_orig);
144 }
145
146 return res;
147}
148
149static TEEC_Result ta_crypt_cmd_digest_do_final(ADBG_Case_t *c, TEEC_Session *s,
150 TEE_OperationHandle oph,
151 const void *chunk,
152 size_t chunk_len, void *hash,
153 size_t *hash_len)
154{
155 TEEC_Result res;
156 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
157 uint32_t ret_orig;
158
159 assert((uintptr_t)oph <= UINT32_MAX);
160 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
161
162 op.params[1].tmpref.buffer = (void *)chunk;
163 op.params[1].tmpref.size = chunk_len;
164
165 op.params[2].tmpref.buffer = (void *)hash;
166 op.params[2].tmpref.size = *hash_len;
167
168 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
169 TEEC_MEMREF_TEMP_INPUT,
170 TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE);
171
172 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_DIGEST_DO_FINAL, &op,
173 &ret_orig);
174
175 if (res != TEEC_SUCCESS) {
176 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
177 ret_orig);
178 }
179
180 if (res == TEEC_SUCCESS)
181 *hash_len = op.params[2].tmpref.size;
182
183 return res;
184}
185
186static TEE_Result ta_crypt_cmd_set_operation_key2(ADBG_Case_t *c,
187 TEEC_Session *s,
188 TEE_OperationHandle oph,
189 TEE_ObjectHandle key1,
190 TEE_ObjectHandle key2)
191{
192 TEEC_Result res;
193 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
194 uint32_t ret_orig;
195
196 assert((uintptr_t)oph <= UINT32_MAX);
197 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
198
199 assert((uintptr_t)key1 <= UINT32_MAX);
200 op.params[0].value.b = (uint32_t)(uintptr_t)key1;
201
202 assert((uintptr_t)key2 <= UINT32_MAX);
203 op.params[1].value.a = (uint32_t)(uintptr_t)key2;
204 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_INPUT,
205 TEEC_NONE, TEEC_NONE);
206
207 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_SET_OPERATION_KEY2, &op,
208 &ret_orig);
209
210 if (res != TEEC_SUCCESS) {
211 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
212 ret_orig);
213 }
214
215 return res;
216}
217
218static TEEC_Result ta_crypt_cmd_mac_init(ADBG_Case_t *c, TEEC_Session *s,
219 TEE_OperationHandle oph,
220 const void *iv, size_t iv_len)
221{
222 TEEC_Result res;
223 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
224 uint32_t ret_orig;
225
226 assert((uintptr_t)oph <= UINT32_MAX);
227 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
228
229 if (iv != NULL) {
230 op.params[1].tmpref.buffer = (void *)iv;
231 op.params[1].tmpref.size = iv_len;
232 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
233 TEEC_MEMREF_TEMP_INPUT,
234 TEEC_NONE, TEEC_NONE);
235 } else {
236 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE,
237 TEEC_NONE, TEEC_NONE);
238 }
239
240 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_MAC_INIT, &op, &ret_orig);
241
242 if (res != TEEC_SUCCESS) {
243 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
244 ret_orig);
245 }
246
247 return res;
248}
249
250static TEEC_Result ta_crypt_cmd_mac_update(ADBG_Case_t *c, TEEC_Session *s,
251 TEE_OperationHandle oph,
252 const void *chunk, size_t chunk_size)
253{
254 TEEC_Result res;
255 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
256 uint32_t ret_orig;
257
258 assert((uintptr_t)oph <= UINT32_MAX);
259 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
260
261 op.params[1].tmpref.buffer = (void *)chunk;
262 op.params[1].tmpref.size = chunk_size;
263
264 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
265 TEEC_MEMREF_TEMP_INPUT, TEEC_NONE,
266 TEEC_NONE);
267
268 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_MAC_UPDATE, &op, &ret_orig);
269
270 if (res != TEEC_SUCCESS) {
271 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
272 ret_orig);
273 }
274
275 return res;
276}
277
278static TEEC_Result ta_crypt_cmd_mac_final_compute(ADBG_Case_t *c,
279 TEEC_Session *s,
280 TEE_OperationHandle oph,
281 const void *chunk,
282 size_t chunk_len,
283 void *hash,
284 size_t *hash_len)
285{
286 TEEC_Result res;
287 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
288 uint32_t ret_orig;
289
290 assert((uintptr_t)oph <= UINT32_MAX);
291 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
292
293 op.params[1].tmpref.buffer = (void *)chunk;
294 op.params[1].tmpref.size = chunk_len;
295
296 op.params[2].tmpref.buffer = (void *)hash;
297 op.params[2].tmpref.size = *hash_len;
298
299 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
300 TEEC_MEMREF_TEMP_INPUT,
301 TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE);
302
303 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_MAC_FINAL_COMPUTE, &op,
304 &ret_orig);
305
306 if (res != TEEC_SUCCESS) {
307 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
308 ret_orig);
309 }
310
311 if (res == TEEC_SUCCESS)
312 *hash_len = op.params[2].tmpref.size;
313
314 return res;
315}
316
317static TEEC_Result ta_crypt_cmd_cipher_init(ADBG_Case_t *c, TEEC_Session *s,
318 TEE_OperationHandle oph,
319 const void *iv, size_t iv_len)
320{
321 TEEC_Result res;
322 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
323 uint32_t ret_orig;
324
325 assert((uintptr_t)oph <= UINT32_MAX);
326 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
327
328 if (iv != NULL) {
329 op.params[1].tmpref.buffer = (void *)iv;
330 op.params[1].tmpref.size = iv_len;
331
332 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
333 TEEC_MEMREF_TEMP_INPUT,
334 TEEC_NONE, TEEC_NONE);
335 } else {
336 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE,
337 TEEC_NONE, TEEC_NONE);
338 }
339
340 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_CIPHER_INIT, &op, &ret_orig);
341
342 if (res != TEEC_SUCCESS) {
343 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
344 ret_orig);
345 }
346
347 return res;
348}
349
350static TEEC_Result ta_crypt_cmd_cipher_update(ADBG_Case_t *c, TEEC_Session *s,
351 TEE_OperationHandle oph,
352 const void *src, size_t src_len,
353 void *dst, size_t *dst_len)
354{
355 TEEC_Result res;
356 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
357 uint32_t ret_orig;
358
359 assert((uintptr_t)oph <= UINT32_MAX);
360 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
361
362 op.params[1].tmpref.buffer = (void *)src;
363 op.params[1].tmpref.size = src_len;
364
365 op.params[2].tmpref.buffer = dst;
366 op.params[2].tmpref.size = *dst_len;
367
368 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
369 TEEC_MEMREF_TEMP_INPUT,
370 TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE);
371
372 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_CIPHER_UPDATE, &op, &ret_orig);
373
374 if (res != TEEC_SUCCESS) {
375 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
376 ret_orig);
377 }
378
379 if (res == TEEC_SUCCESS)
380 *dst_len = op.params[2].tmpref.size;
381
382 return res;
383}
384
385static TEEC_Result ta_crypt_cmd_cipher_do_final(ADBG_Case_t *c,
386 TEEC_Session *s,
387 TEE_OperationHandle oph,
388 const void *src,
389 size_t src_len,
390 void *dst,
391 size_t *dst_len)
392{
393 TEEC_Result res;
394 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
395 uint32_t ret_orig;
396
397 assert((uintptr_t)oph <= UINT32_MAX);
398 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
399
400 op.params[1].tmpref.buffer = (void *)src;
401 op.params[1].tmpref.size = src_len;
402
403 op.params[2].tmpref.buffer = (void *)dst;
404 op.params[2].tmpref.size = *dst_len;
405
406 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
407 TEEC_MEMREF_TEMP_INPUT,
408 TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE);
409
410 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_CIPHER_DO_FINAL, &op,
411 &ret_orig);
412
413 if (res != TEEC_SUCCESS) {
414 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
415 ret_orig);
416 }
417
418 if (res == TEEC_SUCCESS)
419 *dst_len = op.params[2].tmpref.size;
420
421 return res;
422}
423
424static TEEC_Result ta_crypt_cmd_random_number_generate(ADBG_Case_t *c,
425 TEEC_Session *s,
426 void *buf,
427 size_t blen)
428{
429 TEEC_Result res;
430 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
431 uint32_t ret_orig;
432
433 op.params[0].tmpref.buffer = buf;
434 op.params[0].tmpref.size = blen;
435
436 op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE,
437 TEEC_NONE, TEEC_NONE);
438
439 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_RANDOM_NUMBER_GENEREATE, &op,
440 &ret_orig);
441
442 if (res != TEEC_SUCCESS) {
443 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
444 ret_orig);
445 }
446
447 (void)ADBG_EXPECT_COMPARE_UNSIGNED(c, blen, ==,
448 op.params[0].tmpref.size);
449 return res;
450}
451
452static TEEC_Result ta_crypt_cmd_ae_init(ADBG_Case_t *c, TEEC_Session *s,
453 TEE_OperationHandle oph,
454 const void *nonce, size_t nonce_len,
455 size_t tag_len, size_t aad_len,
456 size_t payload_len)
457{
458 TEEC_Result res;
459 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
460 uint32_t ret_orig;
461
462 assert((uintptr_t)oph <= UINT32_MAX);
463 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
464 op.params[0].value.b = tag_len;
465
466 op.params[1].tmpref.buffer = (void *)nonce;
467 op.params[1].tmpref.size = nonce_len;
468
469 op.params[2].value.a = aad_len;
470 op.params[2].value.b = payload_len;
471
472 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
473 TEEC_MEMREF_TEMP_INPUT,
Jens Wiklander74a42302015-07-07 01:08:41 +0200474 TEEC_VALUE_INPUT, TEEC_NONE);
Pascal Brandc639ac82015-07-02 08:53:34 +0200475
476 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_AE_INIT, &op, &ret_orig);
477
478 if (res != TEEC_SUCCESS) {
479 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
480 ret_orig);
481 }
482 return res;
483}
484
485static TEEC_Result ta_crypt_cmd_ae_update_aad(ADBG_Case_t *c, TEEC_Session *s,
486 TEE_OperationHandle oph,
487 const void *aad, size_t aad_len)
488{
489 TEEC_Result res;
490 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
491 uint32_t ret_orig;
492
493 assert((uintptr_t)oph <= UINT32_MAX);
494 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
495
496 op.params[1].tmpref.buffer = (void *)aad;
497 op.params[1].tmpref.size = aad_len;
498
499 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
500 TEEC_MEMREF_TEMP_INPUT, TEEC_NONE,
501 TEEC_NONE);
502
503 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_AE_UPDATE_AAD, &op, &ret_orig);
504
505 if (res != TEEC_SUCCESS) {
506 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
507 ret_orig);
508 }
509
510 return res;
511}
512
513static TEEC_Result ta_crypt_cmd_ae_update(ADBG_Case_t *c,
514 TEEC_Session *s,
515 TEE_OperationHandle oph,
516 const void *src,
517 size_t src_len,
518 void *dst,
519 size_t *dst_len)
520{
521 TEEC_Result res;
522 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
523 uint32_t ret_orig;
524
525 assert((uintptr_t)oph <= UINT32_MAX);
526 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
527
528 op.params[1].tmpref.buffer = (void *)src;
529 op.params[1].tmpref.size = src_len;
530
531 op.params[2].tmpref.buffer = (void *)dst;
532 op.params[2].tmpref.size = *dst_len;
533
534 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
535 TEEC_MEMREF_TEMP_INPUT,
536 TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE);
537
538 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_AE_UPDATE, &op, &ret_orig);
539
540 if (res != TEEC_SUCCESS) {
541 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
542 ret_orig);
543 }
544
545 if (res == TEEC_SUCCESS)
546 *dst_len = op.params[2].tmpref.size;
547
548 return res;
549}
550
551static TEEC_Result ta_crypt_cmd_ae_encrypt_final(ADBG_Case_t *c,
552 TEEC_Session *s,
553 TEE_OperationHandle oph,
554 const void *src,
555 size_t src_len, void *dst,
556 size_t *dst_len, void *tag,
557 size_t *tag_len)
558{
559 TEEC_Result res;
560 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
561 uint32_t ret_orig;
562
563 assert((uintptr_t)oph <= UINT32_MAX);
564 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
565
566 op.params[1].tmpref.buffer = (void *)src;
567 op.params[1].tmpref.size = src_len;
568
569 op.params[2].tmpref.buffer = (void *)dst;
570 op.params[2].tmpref.size = *dst_len;
571
572 op.params[3].tmpref.buffer = (void *)tag;
573 op.params[3].tmpref.size = *tag_len;
574
575 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
576 TEEC_MEMREF_TEMP_INPUT,
577 TEEC_MEMREF_TEMP_OUTPUT,
578 TEEC_MEMREF_TEMP_OUTPUT);
579
580 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_AE_ENCRYPT_FINAL, &op,
581 &ret_orig);
582
583 if (res != TEEC_SUCCESS) {
584 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
585 ret_orig);
586 }
587
588 if (res == TEEC_SUCCESS) {
589 *dst_len = op.params[2].tmpref.size;
590 *tag_len = op.params[3].tmpref.size;
591 }
592
593 return res;
594}
595
596static TEEC_Result ta_crypt_cmd_ae_decrypt_final(ADBG_Case_t *c,
597 TEEC_Session *s,
598 TEE_OperationHandle oph,
599 const void *src, size_t src_len,
600 void *dst, size_t *dst_len,
601 const void *tag, size_t tag_len)
602{
603 TEEC_Result res;
604 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
605 uint32_t ret_orig;
606
607 assert((uintptr_t)oph <= UINT32_MAX);
608 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
609
610 op.params[1].tmpref.buffer = (void *)src;
611 op.params[1].tmpref.size = src_len;
612
613 op.params[2].tmpref.buffer = dst;
614 op.params[2].tmpref.size = *dst_len;
615
616 op.params[3].tmpref.buffer = (void *)tag;
617 op.params[3].tmpref.size = tag_len;
618
619 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
620 TEEC_MEMREF_TEMP_INPUT,
621 TEEC_MEMREF_TEMP_OUTPUT,
622 TEEC_MEMREF_TEMP_INPUT);
623
624 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_AE_DECRYPT_FINAL, &op,
625 &ret_orig);
626
627 if (res != TEEC_SUCCESS) {
628 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
629 ret_orig);
630 }
631
632 if (res == TEEC_SUCCESS)
633 *dst_len = op.params[2].tmpref.size;
634
635 return res;
636}
637
638static TEEC_Result ta_crypt_cmd_asymmetric_operate(ADBG_Case_t *c,
639 TEEC_Session *s,
640 TEE_OperationHandle oph,
641 uint32_t cmd,
642 const TEE_Attribute *params,
643 uint32_t paramCount,
644 const void *src,
645 size_t src_len,
646 void *dst,
647 size_t *dst_len)
648{
649 TEEC_Result res;
650 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
651 uint32_t ret_orig;
652 uint8_t *buf;
653 size_t blen;
654
655 res = pack_attrs(params, paramCount, &buf, &blen);
656 if (!ADBG_EXPECT_TEEC_SUCCESS(c, res))
657 return res;
658
659 assert((uintptr_t)oph <= UINT32_MAX);
660 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
661
662 op.params[1].tmpref.buffer = buf;
663 op.params[1].tmpref.size = blen;
664
665 op.params[2].tmpref.buffer = (void *)src;
666 op.params[2].tmpref.size = src_len;
667
668 op.params[3].tmpref.buffer = dst;
669 op.params[3].tmpref.size = *dst_len;
670
671 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
672 TEEC_MEMREF_TEMP_INPUT,
673 TEEC_MEMREF_TEMP_INPUT,
674 TEEC_MEMREF_TEMP_OUTPUT);
675
676 res = TEEC_InvokeCommand(s, cmd, &op, &ret_orig);
677
678 if (res != TEEC_SUCCESS) {
679 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
680 ret_orig);
681 }
682
683 if (res == TEEC_SUCCESS)
684 *dst_len = op.params[3].tmpref.size;
685
686 free(buf);
687 return res;
688}
689
690static TEEC_Result ta_crypt_cmd_asymmetric_encrypt(ADBG_Case_t *c,
691 TEEC_Session *s,
692 TEE_OperationHandle oph,
693 const TEE_Attribute *params,
694 uint32_t paramCount,
695 const void *src,
696 size_t src_len,
697 void *dst,
698 size_t *dst_len)
699{
700 return ta_crypt_cmd_asymmetric_operate(c, s, oph,
701 TA_CRYPT_CMD_ASYMMETRIC_ENCRYPT,
702 params, paramCount,
703 src, src_len, dst, dst_len);
704}
705
706static TEEC_Result ta_crypt_cmd_asymmetric_decrypt(ADBG_Case_t *c,
707 TEEC_Session *s,
708 TEE_OperationHandle oph,
709 const TEE_Attribute *params,
710 uint32_t paramCount,
711 const void *src,
712 size_t src_len,
713 void *dst,
714 size_t *dst_len)
715{
716 return ta_crypt_cmd_asymmetric_operate(c, s, oph,
717 TA_CRYPT_CMD_ASYMMETRIC_DECRYPT,
718 params, paramCount,
719 src, src_len, dst, dst_len);
720}
721
722static TEEC_Result ta_crypt_cmd_asymmetric_sign(ADBG_Case_t *c,
723 TEEC_Session *s,
724 TEE_OperationHandle oph,
725 const TEE_Attribute *params,
726 uint32_t paramCount,
727 const void *digest,
728 size_t digest_len,
729 void *signature,
730 size_t *signature_len)
731{
732 return ta_crypt_cmd_asymmetric_operate(c, s, oph,
733 TA_CRYPT_CMD_ASYMMETRIC_SIGN_DIGEST, params, paramCount,
734 digest, digest_len, signature, signature_len);
735}
736
737static TEEC_Result ta_crypt_cmd_asymmetric_verify(ADBG_Case_t *c,
738 TEEC_Session *s,
739 TEE_OperationHandle oph,
740 const TEE_Attribute *params,
741 uint32_t paramCount,
742 const void *digest,
743 size_t digest_len,
744 const void *signature,
745 size_t signature_len)
746{
747 TEEC_Result res;
748 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
749 uint32_t ret_orig;
750 uint8_t *buf;
751 size_t blen;
752
753 res = pack_attrs(params, paramCount, &buf, &blen);
754 if (!ADBG_EXPECT_TEEC_SUCCESS(c, res))
755 return res;
756
757 assert((uintptr_t)oph <= UINT32_MAX);
758 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
759
760 op.params[1].tmpref.buffer = buf;
761 op.params[1].tmpref.size = blen;
762
763 op.params[2].tmpref.buffer = (void *)digest;
764 op.params[2].tmpref.size = digest_len;
765
766 op.params[3].tmpref.buffer = (void *)signature;
767 op.params[3].tmpref.size = signature_len;
768
769 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
770 TEEC_MEMREF_TEMP_INPUT,
771 TEEC_MEMREF_TEMP_INPUT,
772 TEEC_MEMREF_TEMP_INPUT);
773
774 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_ASYMMETRIC_VERIFY_DIGEST,
775 &op, &ret_orig);
776
777 if (res != TEEC_SUCCESS) {
778 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
779 ret_orig);
780 }
781
782 free(buf);
783 return res;
784}
785
786static TEEC_Result ta_crypt_cmd_get_object_value_attribute(ADBG_Case_t *c,
787 TEEC_Session *s,
788 TEE_ObjectHandle o,
789 uint32_t attr_id,
790 uint32_t *valuea,
791 uint32_t *valueb)
792{
793 TEEC_Result res;
794 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
795 uint32_t ret_orig;
796
797 assert((uintptr_t)o <= UINT32_MAX);
798 op.params[0].value.a = (uint32_t)(uintptr_t)o;
799 op.params[0].value.b = attr_id;
800 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_OUTPUT,
801 TEEC_NONE, TEEC_NONE);
802
803 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_GET_OBJECT_VALUE_ATTRIBUTE,
804 &op, &ret_orig);
805
806 if (res != TEEC_SUCCESS) {
807 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
808 ret_orig);
809 }
810
811 if (res == TEEC_SUCCESS) {
812 *valuea = op.params[1].value.a;
813 *valueb = op.params[1].value.b;
814 }
815
816 return res;
817}
818
819static TEEC_Result ta_crypt_cmd_generate_key(ADBG_Case_t *c,
820 TEEC_Session *s,
821 TEE_ObjectHandle o,
822 uint32_t key_size,
823 const TEE_Attribute *params,
824 uint32_t paramCount)
825{
826 TEEC_Result res;
827 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
828 uint32_t ret_orig;
829 uint8_t *buf;
830 size_t blen;
831
832 res = pack_attrs(params, paramCount, &buf, &blen);
833 if (!ADBG_EXPECT_TEEC_SUCCESS(c, res))
834 return res;
835
836 assert((uintptr_t)o <= UINT32_MAX);
837 op.params[0].value.a = (uint32_t)(uintptr_t)o;
838 op.params[0].value.b = key_size;
839
840 op.params[1].tmpref.buffer = buf;
841 op.params[1].tmpref.size = blen;
842
843 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
844 TEEC_MEMREF_TEMP_INPUT, TEEC_NONE,
845 TEEC_NONE);
846
847 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_GENERATE_KEY, &op, &ret_orig);
848
849 if (res != TEEC_SUCCESS) {
850 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
851 ret_orig);
852 }
853
854 free(buf);
855 return res;
856}
857
858static const uint8_t hash_data_md5_in1[] = {
859 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm'
860};
861
862static const uint8_t hash_data_md5_out1[] = {
863 0x61, 0x12, 0x71, 0x83, 0x70, 0x8d, 0x3a, 0xc7,
864 0xf1, 0x9b, 0x66, 0x06, 0xfc, 0xae, 0x7d, 0xf6
865};
866
867static const uint8_t hash_data_sha1_in1[] = {
868 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm'
869};
870
871static const uint8_t hash_data_sha1_out1[] = {
872 0x4b, 0x98, 0x92, 0xb6, 0x52, 0x72, 0x14, 0xaf,
873 0xc6, 0x55, 0xb8, 0xaa, 0x52, 0xf4, 0xd2, 0x03,
874 0xc1, 0x5e, 0x7c, 0x9c
875};
876
877static const uint8_t hash_data_sha224_in1[] = {
878 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm'
879};
880
881static const uint8_t hash_data_sha224_out1[] = {
882 0x08, 0x21, 0x69, 0xf9, 0x77, 0x1b, 0x80, 0x15,
883 0xf3, 0x97, 0xae, 0xde, 0x5b, 0xba, 0xa2, 0x72,
884 0x2d, 0x8f, 0x5c, 0x19, 0xfe, 0xd2, 0xe2, 0x68,
885 0x92, 0x49, 0xd8, 0x44
886};
887
888static const uint8_t hash_data_sha256_in1[] = { 'a', 'b', 'c' };
889
890static const uint8_t hash_data_sha256_out1[] = {
891 0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea,
892 0x41, 0x41, 0x40, 0xde, 0x5d, 0xae, 0x22, 0x23,
893 0xb0, 0x03, 0x61, 0xa3, 0x96, 0x17, 0x7a, 0x9c,
894 0xb4, 0x10, 0xff, 0x61, 0xf2, 0x00, 0x15, 0xad
895};
896
897static const uint8_t hash_data_sha256_in2[] = { 'e', 'f', 'g' };
898
899static const uint8_t hash_data_sha256_out2[] = {
900 0xd4, 0xff, 0xe8, 0xe9, 0xee, 0x0b, 0x48, 0xeb,
901 0xa7, 0x16, 0x70, 0x61, 0x23, 0xa7, 0x18, 0x7f,
902 0x32, 0xea, 0xe3, 0xbd, 0xcb, 0x0e, 0x77, 0x63,
903 0xe4, 0x1e, 0x53, 0x32, 0x67, 0xbd, 0x8a, 0x53
904};
905
906
907static const uint8_t hash_data_sha384_in1[] = {
908 'a', 'b', 'c', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm'
909};
910
911static const uint8_t hash_data_sha384_out1[] = {
912 0x4c, 0xab, 0x80, 0x9d, 0x96, 0x84, 0x01, 0x47,
913 0x67, 0x0a, 0xc1, 0x7a, 0xb6, 0xb9, 0xf7, 0x6e,
914 0x35, 0xa6, 0xb0, 0x8c, 0xf5, 0x2a, 0x3d, 0x64,
915 0x9a, 0x8c, 0x7e, 0x0c, 0x55, 0x45, 0xd3, 0x7d,
916 0x1f, 0x7f, 0x28, 0x34, 0x96, 0x14, 0x44, 0x2a,
917 0xf5, 0x98, 0xa2, 0x95, 0x24, 0x76, 0x53, 0x97
918};
919
920static const uint8_t hash_data_sha512_in1[] = {
921 'a', 'b', 'c', 'd', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm'
922};
923
924static const uint8_t hash_data_sha512_out1[] = {
925 0x20, 0xd8, 0x64, 0x4f, 0x54, 0xa2, 0x5f, 0x6f,
926 0x0a, 0xf9, 0xd5, 0x27, 0x7d, 0x17, 0xa8, 0x99,
927 0x4c, 0x64, 0x3f, 0xd0, 0xf3, 0x83, 0x36, 0xee,
928 0x93, 0x12, 0x55, 0xcd, 0x2e, 0x12, 0x34, 0xa0,
929 0xc2, 0xaa, 0xf9, 0xbb, 0x15, 0xc5, 0xe9, 0xfa,
930 0xf7, 0xa7, 0xda, 0xb8, 0x2f, 0x72, 0xa0, 0x47,
931 0xe3, 0x02, 0x04, 0xe8, 0xa0, 0x35, 0x0c, 0x96,
932 0x26, 0xd1, 0xcb, 0x8b, 0x47, 0x45, 0x25, 0xd0
933};
934
935struct xtest_hash_case {
936 uint32_t algo;
937 size_t in_incr;
938 const uint8_t *in;
939 size_t in_len;
940 const uint8_t *out;
941 size_t out_len;
942};
943
944#define XTEST_HASH_CASE(algo, in_incr, in, out) \
945 { (algo), (in_incr), (in), ARRAY_SIZE(in), (out), ARRAY_SIZE(out) }
946
947static const struct xtest_hash_case hash_cases[] = {
948 XTEST_HASH_CASE(TEE_ALG_MD5, 6, hash_data_md5_in1,
949 hash_data_md5_out1),
950 XTEST_HASH_CASE(TEE_ALG_SHA1, 3, hash_data_sha1_in1,
951 hash_data_sha1_out1),
952 XTEST_HASH_CASE(TEE_ALG_SHA224, 7, hash_data_sha224_in1,
953 hash_data_sha224_out1),
954 XTEST_HASH_CASE(TEE_ALG_SHA256, 1, hash_data_sha256_in1,
955 hash_data_sha256_out1),
956 XTEST_HASH_CASE(TEE_ALG_SHA256, 1, hash_data_sha256_in2,
957 hash_data_sha256_out2),
958 XTEST_HASH_CASE(TEE_ALG_SHA384, 1, hash_data_sha384_in1,
959 hash_data_sha384_out1),
960 XTEST_HASH_CASE(TEE_ALG_SHA512, 1, hash_data_sha512_in1,
961 hash_data_sha512_out1),
962};
963
964static void xtest_tee_test_4001(ADBG_Case_t *c)
965{
966 TEEC_Session session = { 0 };
967 uint32_t ret_orig;
968 size_t n;
969
970 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
971 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
972 &ret_orig)))
973 return;
974
975
976 for (n = 0; n < ARRAY_SIZE(hash_cases); n++) {
977 TEE_OperationHandle op1;
978 TEE_OperationHandle op2;
979 uint8_t out[64];
980 size_t out_size;
981
982 Do_ADBG_BeginSubCase(c, "Hash case %d algo 0x%x",
983 (int)n, (unsigned int)hash_cases[n].algo);
984
985 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
986 ta_crypt_cmd_allocate_operation(c, &session, &op1,
987 hash_cases[n].algo,
988 TEE_MODE_DIGEST, 0)))
989 goto out;
990
991 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
992 ta_crypt_cmd_allocate_operation(c, &session, &op2,
993 hash_cases[n].algo,
994 TEE_MODE_DIGEST, 0)))
995 goto out;
996
997 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
998 ta_crypt_cmd_digest_update(c, &session, op1,
999 hash_cases[n].in,
1000 hash_cases[n].in_incr)))
1001 goto out;
1002
1003 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1004 ta_crypt_cmd_copy_operation(c, &session, op2, op1)))
1005 goto out;
1006
1007 out_size = sizeof(out);
1008 memset(out, 0, sizeof(out));
1009 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1010 ta_crypt_cmd_digest_do_final(c, &session, op2,
1011 hash_cases[n].in + hash_cases[n].in_incr,
1012 hash_cases[n].in_len - hash_cases[n].in_incr,
1013 out, &out_size)))
1014 goto out;
1015
1016 (void)ADBG_EXPECT_BUFFER(c, hash_cases[n].out,
1017 hash_cases[n].out_len, out, out_size);
1018
1019 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1020 ta_crypt_cmd_reset_operation(c, &session, op1)))
1021 goto out;
1022
1023 out_size = sizeof(out);
1024 memset(out, 0, sizeof(out));
1025 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1026 ta_crypt_cmd_digest_do_final(c, &session, op1,
1027 hash_cases[n].in,
1028 hash_cases[n].in_len, out,
1029 &out_size)))
1030 goto out;
1031
1032 (void)ADBG_EXPECT_BUFFER(c, hash_cases[n].out,
1033 hash_cases[n].out_len, out, out_size);
1034
Jerome Forissier1e05e262015-07-29 16:09:07 +02001035 /*
1036 * Invoke TEE_DigestDoFinal() a second time to check that state
1037 * was properly reset
1038 */
1039 out_size = sizeof(out);
1040 memset(out, 0, sizeof(out));
1041 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1042 ta_crypt_cmd_digest_do_final(c, &session, op1,
1043 hash_cases[n].in,
1044 hash_cases[n].in_len, out,
1045 &out_size)))
1046 goto out;
1047
1048 (void)ADBG_EXPECT_BUFFER(c, hash_cases[n].out,
1049 hash_cases[n].out_len, out, out_size);
1050
Pascal Brandc639ac82015-07-02 08:53:34 +02001051 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1052 ta_crypt_cmd_free_operation(c, &session, op1)))
1053 goto out;
1054
1055 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1056 ta_crypt_cmd_free_operation(c, &session, op2)))
1057 goto out;
1058
1059 Do_ADBG_EndSubCase(c, NULL);
1060 }
1061
1062out:
1063 TEEC_CloseSession(&session);
1064}
1065
1066static const uint8_t mac_data_md5_key1[10] = {
1067 0x6B, 0x65, 0x79, /* key */
1068};
1069
1070static const uint8_t mac_data_md5_in1[] = {
1071 0x54, 0x68, 0x65, 0x20, 0x71, 0x75, 0x69, 0x63, /* The quic */
1072 0x6B, 0x20, 0x62, 0x72, 0x6F, 0x77, 0x6E, 0x20, /* k brown */
1073 0x66, 0x6F, 0x78, 0x20, 0x6A, 0x75, 0x6D, 0x70, /* fox jump */
1074 0x73, 0x20, 0x6F, 0x76, 0x65, 0x72, 0x20, 0x74, /* s over t */
1075 0x68, 0x65, 0x20, 0x6C, 0x61, 0x7A, 0x79, 0x20, /* he lazy */
1076 0x64, 0x6F, 0x67, /* dog */
1077};
1078
1079static const uint8_t mac_data_md5_out1[] = {
1080 0x80, 0x07, 0x07, 0x13, 0x46, 0x3e, 0x77, 0x49,
1081 0xb9, 0x0c, 0x2d, 0xc2, 0x49, 0x11, 0xe2, 0x75
1082};
1083
1084
1085/* generated with scripts/digest_hmac.pl */
1086static const uint8_t mac_data_sha1_key1[10] = {
1087 0x6B, 0x65, 0x79, /* key */
1088};
1089
1090static const uint8_t mac_data_sha1_in1[] = {
1091 0x54, 0x68, 0x65, 0x20, 0x71, 0x75, 0x69, 0x63, /* The quic */
1092 0x6B, 0x20, 0x62, 0x72, 0x6F, 0x77, 0x6E, 0x20, /* k brown */
1093 0x66, 0x6F, 0x78, 0x20, 0x6A, 0x75, 0x6D, 0x70, /* fox jump */
1094 0x73, 0x20, 0x6F, 0x76, 0x65, 0x72, 0x20, 0x74, /* s over t */
1095 0x68, 0x65, 0x20, 0x6C, 0x61, 0x7A, 0x79, 0x20, /* he lazy */
1096 0x64, 0x6F, 0x67, /* dog */
1097};
1098
1099static const uint8_t mac_data_sha1_out1[] = {
1100 0xDE, 0x7C, 0x9B, 0x85, 0xB8, 0xB7, 0x8A, 0xA6, /* .|...... */
1101 0xBC, 0x8A, 0x7A, 0x36, 0xF7, 0x0A, 0x90, 0x70, /* ..z6...p */
1102 0x1C, 0x9D, 0xB4, 0xD9, /* .... */
1103};
1104
1105static const uint8_t mac_data_sha224_key1[24] = {
1106 0x6B, 0x65, 0x79, /* key */
1107};
1108
1109static const uint8_t mac_data_sha224_in1[] = {
1110 0x54, 0x68, 0x65, 0x20, 0x71, 0x75, 0x69, 0x63, /* The quic */
1111 0x6B, 0x20, 0x62, 0x72, 0x6F, 0x77, 0x6E, 0x20, /* k brown */
1112 0x66, 0x6F, 0x78, 0x20, 0x6A, 0x75, 0x6D, 0x70, /* fox jump */
1113 0x73, 0x20, 0x6F, 0x76, 0x65, 0x72, 0x20, 0x74, /* s over t */
1114 0x68, 0x65, 0x20, 0x6C, 0x61, 0x7A, 0x79, 0x20, /* he lazy */
1115 0x64, 0x6F, 0x67, /* dog */
1116};
1117
1118static const uint8_t mac_data_sha224_out1[] = {
1119 0x88, 0xFF, 0x8B, 0x54, 0x67, 0x5D, 0x39, 0xB8, /* ...Tg]9. */
1120 0xF7, 0x23, 0x22, 0xE6, 0x5F, 0xF9, 0x45, 0xC5, /* .#"._.E. */
1121 0x2D, 0x96, 0x37, 0x99, 0x88, 0xAD, 0xA2, 0x56, /* -.7....V */
1122 0x39, 0x74, 0x7E, 0x69, /* 9t~i */
1123};
1124
1125
1126static const uint8_t mac_data_sha256_key1[24] = {
1127 'Q', 'W', 'E', 'R', 'T', 'Y'
1128};
1129
1130static const uint8_t mac_data_sha256_in1[] = { 'a', 'b', 'c' };
1131
1132static const uint8_t mac_data_sha256_out1[] = {
1133 0xee, 0x2e, 0x5d, 0x9b, 0x51, 0xe2, 0x9c, 0x1d,
1134 0x49, 0xe9, 0xae, 0x6f, 0x0a, 0xcc, 0x15, 0x18,
1135 0xde, 0x1e, 0xa3, 0x88, 0x8e, 0xee, 0x48, 0xbb,
1136 0x82, 0x77, 0xe9, 0x09, 0x74, 0x4b, 0xa2, 0xf2
1137};
1138
1139/* generated with scripts/digest_hmac.pl */
1140static const uint8_t mac_data_sha256_key2[24] = {
1141 0x6B, 0x65, 0x79, /* key */
1142};
1143
1144static const uint8_t mac_data_sha256_in2[] = {
1145 0x54, 0x68, 0x65, 0x20, 0x71, 0x75, 0x69, 0x63, /* The quic */
1146 0x6B, 0x20, 0x62, 0x72, 0x6F, 0x77, 0x6E, 0x20, /* k brown */
1147 0x66, 0x6F, 0x78, 0x20, 0x6A, 0x75, 0x6D, 0x70, /* fox jump */
1148 0x73, 0x20, 0x6F, 0x76, 0x65, 0x72, 0x20, 0x74, /* s over t */
1149 0x68, 0x65, 0x20, 0x6C, 0x61, 0x7A, 0x79, 0x20, /* he lazy */
1150 0x64, 0x6F, 0x67, /* dog */
1151};
1152
1153static const uint8_t mac_data_sha256_out2[] = {
1154 0xF7, 0xBC, 0x83, 0xF4, 0x30, 0x53, 0x84, 0x24, /* ....0S.$ */
1155 0xB1, 0x32, 0x98, 0xE6, 0xAA, 0x6F, 0xB1, 0x43, /* .2...o.C */
1156 0xEF, 0x4D, 0x59, 0xA1, 0x49, 0x46, 0x17, 0x59, /* .MY.IF.Y */
1157 0x97, 0x47, 0x9D, 0xBC, 0x2D, 0x1A, 0x3C, 0xD8, /* .G..-.<. */
1158};
1159
1160static const uint8_t mac_data_sha384_key1[32] = {
1161 0x6B, 0x65, 0x79, /* key */
1162};
1163
1164static const uint8_t mac_data_sha384_in1[] = {
1165 0x54, 0x68, 0x65, 0x20, 0x71, 0x75, 0x69, 0x63, /* The quic */
1166 0x6B, 0x20, 0x62, 0x72, 0x6F, 0x77, 0x6E, 0x20, /* k brown */
1167 0x66, 0x6F, 0x78, 0x20, 0x6A, 0x75, 0x6D, 0x70, /* fox jump */
1168 0x73, 0x20, 0x6F, 0x76, 0x65, 0x72, 0x20, 0x74, /* s over t */
1169 0x68, 0x65, 0x20, 0x6C, 0x61, 0x7A, 0x79, 0x20, /* he lazy */
1170 0x64, 0x6F, 0x67, /* dog */
1171};
1172
1173static const uint8_t mac_data_sha384_out1[] = {
1174 0xD7, 0xF4, 0x72, 0x7E, 0x2C, 0x0B, 0x39, 0xAE, /* ..r~, .9. */
1175 0x0F, 0x1E, 0x40, 0xCC, 0x96, 0xF6, 0x02, 0x42, /* ..@....B */
1176 0xD5, 0xB7, 0x80, 0x18, 0x41, 0xCE, 0xA6, 0xFC, /* ....A... */
1177 0x59, 0x2C, 0x5D, 0x3E, 0x1A, 0xE5, 0x07, 0x00, /* Y, ]>.... */
1178 0x58, 0x2A, 0x96, 0xCF, 0x35, 0xE1, 0xE5, 0x54, /* X...5..T */
1179 0x99, 0x5F, 0xE4, 0xE0, 0x33, 0x81, 0xC2, 0x37, /* ._..3..7 */
1180};
1181
1182static const uint8_t mac_data_sha512_key1[32] = {
1183 0x6B, 0x65, 0x79, /* key */
1184};
1185
1186static const uint8_t mac_data_sha512_in1[] = {
1187 0x54, 0x68, 0x65, 0x20, 0x71, 0x75, 0x69, 0x63, /* The quic */
1188 0x6B, 0x20, 0x62, 0x72, 0x6F, 0x77, 0x6E, 0x20, /* k brown */
1189 0x66, 0x6F, 0x78, 0x20, 0x6A, 0x75, 0x6D, 0x70, /* fox jump */
1190 0x73, 0x20, 0x6F, 0x76, 0x65, 0x72, 0x20, 0x74, /* s over t */
1191 0x68, 0x65, 0x20, 0x6C, 0x61, 0x7A, 0x79, 0x20, /* he lazy */
1192 0x64, 0x6F, 0x67, /* dog */
1193};
1194
1195static const uint8_t mac_data_sha512_out1[] = {
1196 0xB4, 0x2A, 0xF0, 0x90, 0x57, 0xBA, 0xC1, 0xE2, /* ....W... */
1197 0xD4, 0x17, 0x08, 0xE4, 0x8A, 0x90, 0x2E, 0x09, /* ........ */
1198 0xB5, 0xFF, 0x7F, 0x12, 0xAB, 0x42, 0x8A, 0x4F, /* .....B.O */
1199 0xE8, 0x66, 0x53, 0xC7, 0x3D, 0xD2, 0x48, 0xFB, /* .fS.=.H. */
1200 0x82, 0xF9, 0x48, 0xA5, 0x49, 0xF7, 0xB7, 0x91, /* ..H.I... */
1201 0xA5, 0xB4, 0x19, 0x15, 0xEE, 0x4D, 0x1E, 0xC3, /* .....M.. */
1202 0x93, 0x53, 0x57, 0xE4, 0xE2, 0x31, 0x72, 0x50, /* .SW..1rP */
1203 0xD0, 0x37, 0x2A, 0xFA, 0x2E, 0xBE, 0xEB, 0x3A, /* .7.....: */
1204};
1205
1206
1207/* AES-CBC-MAC */
1208static const uint8_t mac_cbc_vect1_key[] = {
1209 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1210 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1211};
1212
1213static const uint8_t mac_cbc_vect1_data[] = {
1214 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x20, 0x62, /* Cipher b */
1215 0x6C, 0x6F, 0x63, 0x6B, 0x20, 0x63, 0x68, 0x61, /* lock cha */
1216 0x69, 0x6E, 0x69, 0x6E, 0x67, 0x20, 0x28, 0x43, /* ining (C */
1217 0x42, 0x43, 0x29, 0x20, 0x69, 0x73, 0x20, 0x61, /* BC) is a */
1218 0x20, 0x63, 0x6F, 0x6D, 0x6D, 0x6F, 0x6E, 0x20, /* common */
1219 0x63, 0x68, 0x61, 0x69, 0x6E, 0x69, 0x6E, 0x67, /* chaining */
1220 0x20, 0x6D, 0x6F, 0x64, 0x65, 0x20, 0x69, 0x6E, /* mode in */
1221 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x74, /* which t */
1222 0x68, 0x65, 0x20, 0x70, 0x72, 0x65, 0x76, 0x69, /* he previ */
1223 0x6F, 0x75, 0x73, 0x20, 0x62, 0x6C, 0x6F, 0x63, /* ous bloc */
1224 0x6B, 0x27, 0x73, 0x20, 0x63, 0x69, 0x70, 0x68, /* k's ciph */
1225 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x20, 0x69, /* ertext i */
1226 0x73, 0x20, 0x78, 0x6F, 0x72, 0x65, 0x64, 0x20, /* s xored */
1227 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, /* with the */
1228 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6E, 0x74, /* current */
1229 0x20, 0x62, 0x6C, 0x6F, 0x63, 0x6B, 0x27, 0x73, /* block's */
1230 0x20, 0x70, 0x6C, 0x61, 0x69, 0x6E, 0x74, 0x65, /* plainte */
1231 0x78, 0x74, 0x20, 0x62, 0x65, 0x66, 0x6F, 0x72, /* xt befor */
1232 0x65, 0x20, 0x65, 0x6E, 0x63, 0x72, 0x79, 0x70, /* e encryp */
1233 0x74, 0x69, 0x6F, 0x6E, 0x2E, 0x2E, 0x2E, 0x2E, /* tion.... */
1234};
1235
1236static const uint8_t mac_cbc_vect1_out[] = {
1237 0xC9, 0x6E, 0x83, 0x7E, 0x35, 0xC8, 0xA7, 0xA0, /* .n.~5... */
1238 0x33, 0xA3, 0xB1, 0x4B, 0x5A, 0x92, 0x51, 0x2E, /* 3..KZ.Q. */
1239};
1240
1241/* DES-CBC-MAC */
1242static const uint8_t mac_cbc_vect2_key[] = {
1243 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1244};
1245
1246#define mac_cbc_vect2_data mac_cbc_vect1_data
1247static const uint8_t mac_cbc_vect2_out[] = {
1248 0xE9, 0x41, 0x46, 0x30, 0x69, 0x32, 0xBD, 0xD6, /* .AF0i2.. */
1249};
1250
1251/* DES3-CBC-MAC */
1252static const uint8_t mac_cbc_vect3_key[] = {
1253 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1254 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1255 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, /* 12345678 */
1256};
1257
1258#define mac_cbc_vect3_data mac_cbc_vect2_data
1259static const uint8_t mac_cbc_vect3_out[] = {
1260 0x1C, 0x17, 0xB7, 0xB5, 0x9F, 0x54, 0x9C, 0x63, /* .....T.c */
1261};
1262
1263/* AES-CBC-MAC PKCS#5 pad*/
1264static const uint8_t mac_cbc_vect4_key[] = {
1265 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1266 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1267 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1268 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1269};
1270
1271#define mac_cbc_vect4_data mac_cbc_vect1_data
1272static const uint8_t mac_cbc_vect4_out[] = {
1273 0x0B, 0x46, 0xC7, 0xA2, 0xE1, 0x5A, 0xE2, 0x23, /* .F...Z.# */
1274 0x83, 0x34, 0x1C, 0x86, 0x53, 0xF8, 0x51, 0x24, /* .4..S.Q$ */
1275};
1276
1277/* DES-CBC-MAC PKCS#5 pad*/
1278static const uint8_t mac_cbc_vect5_key[] = {
1279 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1280};
1281
1282#define mac_cbc_vect5_data mac_cbc_vect1_data
1283static const uint8_t mac_cbc_vect5_out[] = {
1284 0x30, 0x81, 0x4F, 0x42, 0x03, 0x7E, 0xD8, 0xA9, /* 0.OB.~.. */
1285};
1286
1287/* DES3-CBC-MAC PKCS#5 pad*/
1288static const uint8_t mac_cbc_vect6_key[] = {
1289 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1290 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1291 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, /* 12345678 */
1292};
1293
1294#define mac_cbc_vect6_data mac_cbc_vect1_data
1295static const uint8_t mac_cbc_vect6_out[] = {
1296 0x6E, 0x37, 0x6E, 0x14, 0x5E, 0x21, 0xDD, 0xF8, /* n7n.^!.. */
1297};
1298
1299/* AES-CBC-MAC PKCS#5 pad*/
1300#define mac_cbc_vect7_key mac_cbc_vect4_key
1301static const uint8_t mac_cbc_vect7_data[] = {
1302 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x20, 0x62, /* Cipher b */
1303 0x6C, 0x6F, 0x63, 0x6B, 0x20, 0x63, 0x68, 0x61, /* lock cha */
1304 0x69, 0x6E, 0x69, 0x6E, 0x67, 0x20, 0x28, 0x43, /* ining (C */
1305 0x42, 0x43, 0x29, 0x20, 0x69, 0x73, 0x20, 0x61, /* BC) is a */
1306 0x20, 0x63, 0x6F, 0x6D, 0x6D, 0x6F, 0x6E, 0x20, /* common */
1307 0x63, 0x68, 0x61, 0x69, 0x6E, 0x69, 0x6E, 0x67, /* chaining */
1308 0x20, 0x6D, 0x6F, 0x64, 0x65, 0x20, 0x69, 0x6E, /* mode in */
1309 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x74, /* which t */
1310 0x68, 0x65, 0x20, 0x70, 0x72, 0x65, 0x76, 0x69, /* he previ */
1311 0x6F, 0x75, 0x73, 0x20, 0x62, 0x6C, 0x6F, 0x63, /* ous bloc */
1312 0x6B, 0x27, 0x73, 0x20, 0x63, 0x69, 0x70, 0x68, /* k's ciph */
1313 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x20, 0x69, /* ertext i */
1314 0x73, 0x20, 0x78, 0x6F, 0x72, 0x65, 0x64, 0x20, /* s xored */
1315 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, /* with the */
1316 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6E, 0x74, /* current */
1317 0x20, 0x62, 0x6C, 0x6F, 0x63, 0x6B, 0x27, 0x73, /* block's */
1318 0x20, 0x70, 0x6C, 0x61, 0x69, 0x6E, 0x74, 0x65, /* plainte */
1319 0x78, 0x74, 0x20, 0x62, 0x65, 0x66, 0x6F, 0x72, /* xt befor */
1320 0x65, 0x20, 0x65, 0x6E, 0x63, 0x72, 0x79, 0x70, /* e encryp */
1321 0x74, 0x69, 0x6F, 0x6E, 0x2E, /* tion. */
1322};
1323
1324static const uint8_t mac_cbc_vect7_out[] = {
1325 0xFD, 0x89, 0x35, 0xB3, 0x93, 0x7F, 0xBB, 0xA2, /* ..5..... */
1326 0xFB, 0x65, 0x60, 0xC4, 0x0A, 0x62, 0xA0, 0xF9, /* .e`..b.. */
1327};
1328
1329/* DES-CBC-MAC PKCS#5 pad*/
1330#define mac_cbc_vect8_key mac_cbc_vect5_key
1331#define mac_cbc_vect8_data mac_cbc_vect7_data
1332static const uint8_t mac_cbc_vect8_out[] = {
1333 0x02, 0x2A, 0xA8, 0x2E, 0x47, 0xC6, 0xBB, 0x7C, /* ....G..| */
1334};
1335
1336/* DES3-CBC-MAC PKCS#5 pad*/
1337#define mac_cbc_vect9_key mac_cbc_vect6_key
1338#define mac_cbc_vect9_data mac_cbc_vect7_data
1339static const uint8_t mac_cbc_vect9_out[] = {
1340 0xD4, 0xF7, 0x3E, 0x27, 0x78, 0x0E, 0x1C, 0x79, /* ..>'x..y */
1341};
1342
1343/*
Pascal Brand5c3d8092015-07-23 08:20:26 +02001344 * DES3-CBC-MAC, with key size of 112bit
1345 * out obtained with:
1346 * echo -n "Cipher block chaining (CBC) is a common chaining mode in which the previous block's ciphertext is xored with the current block's plaintext before encryption...."|openssl enc -iv 0 -des3 -K 303132333435363738394142434445463031323334353637 |xxd
1347 */
1348/* DES3-CBC-MAC PKCS#5 pad*/
1349static const uint8_t mac_cbc_vect10_key[] = {
1350 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1351 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1352};
1353#define mac_cbc_vect10_data mac_cbc_vect1_data
1354static const uint8_t mac_cbc_vect10_out[] = {
1355 0x30, 0x92, 0x60, 0x99, 0x66, 0xac, 0x8c, 0xa6,
1356};
1357
1358
1359/*
Pascal Brandc639ac82015-07-02 08:53:34 +02001360 * AES-CMAC
1361 * Test vectors from
1362 * http://csrc.nist.gov/publications/nistpubs/800-38B/SP_800-38B.pdf
1363 */
1364
1365/* AES-128 */
1366static const uint8_t mac_cmac_vect1_key[] = {
1367 0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6,
1368 0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c
1369};
1370
1371static const uint8_t mac_cmac_vect1_out[] = {
1372 0xbb, 0x1d, 0x69, 0x29, 0xe9, 0x59, 0x37, 0x28,
1373 0x7f, 0xa3, 0x7d, 0x12, 0x9b, 0x75, 0x67, 0x46
1374};
1375
1376#define mac_cmac_vect2_key mac_cmac_vect1_key
1377static const uint8_t mac_cmac_vect2_data[] = {
1378 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
1379 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a
1380};
1381
1382static const uint8_t mac_cmac_vect2_out[] = {
1383 0x07, 0x0a, 0x16, 0xb4, 0x6b, 0x4d, 0x41, 0x44,
1384 0xf7, 0x9b, 0xdd, 0x9d, 0xd0, 0x4a, 0x28, 0x7c
1385};
1386
1387#define mac_cmac_vect3_key mac_cmac_vect1_key
1388static const uint8_t mac_cmac_vect3_data[] = {
1389 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
1390 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a,
1391 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c,
1392 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51,
1393 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11
1394};
1395
1396static const uint8_t mac_cmac_vect3_out[] = {
1397 0xdf, 0xa6, 0x67, 0x47, 0xde, 0x9a, 0xe6, 0x30,
1398 0x30, 0xca, 0x32, 0x61, 0x14, 0x97, 0xc8, 0x27
1399};
1400
1401#define mac_cmac_vect4_key mac_cmac_vect1_key
1402static const uint8_t mac_cmac_vect4_data[] = {
1403 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
1404 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a,
1405 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c,
1406 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51,
1407 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11,
1408 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef,
1409 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17,
1410 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10
1411};
1412
1413static const uint8_t mac_cmac_vect4_out[] = {
1414 0x51, 0xf0, 0xbe, 0xbf, 0x7e, 0x3b, 0x9d, 0x92,
1415 0xfc, 0x49, 0x74, 0x17, 0x79, 0x36, 0x3c, 0xfe
1416};
1417
1418/* AES-192 */
1419static const uint8_t mac_cmac_vect5_key[] = {
1420 0x8e, 0x73, 0xb0, 0xf7, 0xda, 0x0e, 0x64, 0x52,
1421 0xc8, 0x10, 0xf3, 0x2b, 0x80, 0x90, 0x79, 0xe5,
1422 0x62, 0xf8, 0xea, 0xd2, 0x52, 0x2c, 0x6b, 0x7b
1423};
1424
1425static const uint8_t mac_cmac_vect5_out[] = {
1426 0xd1, 0x7d, 0xdf, 0x46, 0xad, 0xaa, 0xcd, 0xe5,
1427 0x31, 0xca, 0xc4, 0x83, 0xde, 0x7a, 0x93, 0x67
1428};
1429
1430
1431#define mac_cmac_vect6_key mac_cmac_vect5_key
1432static const uint8_t mac_cmac_vect6_data[] = {
1433 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
1434 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a
1435};
1436
1437static const uint8_t mac_cmac_vect6_out[] = {
1438 0x9e, 0x99, 0xa7, 0xbf, 0x31, 0xe7, 0x10, 0x90,
1439 0x06, 0x62, 0xf6, 0x5e, 0x61, 0x7c, 0x51, 0x84
1440};
1441
1442#define mac_cmac_vect7_key mac_cmac_vect5_key
1443static const uint8_t mac_cmac_vect7_data[] = {
1444 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
1445 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a,
1446 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c,
1447 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51,
1448 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11
1449};
1450
1451static const uint8_t mac_cmac_vect7_out[] = {
1452 0x8a, 0x1d, 0xe5, 0xbe, 0x2e, 0xb3, 0x1a, 0xad,
1453 0x08, 0x9a, 0x82, 0xe6, 0xee, 0x90, 0x8b, 0x0e
1454};
1455
1456#define mac_cmac_vect8_key mac_cmac_vect5_key
1457static const uint8_t mac_cmac_vect8_data[] = {
1458 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
1459 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a,
1460 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c,
1461 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51,
1462 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11,
1463 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef,
1464 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17,
1465 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10
1466};
1467
1468static const uint8_t mac_cmac_vect8_out[] = {
1469 0xa1, 0xd5, 0xdf, 0x0e, 0xed, 0x79, 0x0f, 0x79,
1470 0x4d, 0x77, 0x58, 0x96, 0x59, 0xf3, 0x9a, 0x11
1471};
1472
1473/* AES-256 */
1474static const uint8_t mac_cmac_vect9_key[] = {
1475 0x60, 0x3d, 0xeb, 0x10, 0x15, 0xca, 0x71, 0xbe,
1476 0x2b, 0x73, 0xae, 0xf0, 0x85, 0x7d, 0x77, 0x81,
1477 0x1f, 0x35, 0x2c, 0x07, 0x3b, 0x61, 0x08, 0xd7,
1478 0x2d, 0x98, 0x10, 0xa3, 0x09, 0x14, 0xdf, 0xf4
1479};
1480
1481static const uint8_t mac_cmac_vect9_out[] = {
1482 0x02, 0x89, 0x62, 0xf6, 0x1b, 0x7b, 0xf8, 0x9e,
1483 0xfc, 0x6b, 0x55, 0x1f, 0x46, 0x67, 0xd9, 0x83
1484};
1485
1486#define mac_cmac_vect10_key mac_cmac_vect9_key
1487static const uint8_t mac_cmac_vect10_data[] = {
1488 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
1489 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a
1490};
1491
1492static const uint8_t mac_cmac_vect10_out[] = {
1493 0x28, 0xa7, 0x02, 0x3f, 0x45, 0x2e, 0x8f, 0x82,
1494 0xbd, 0x4b, 0xf2, 0x8d, 0x8c, 0x37, 0xc3, 0x5c
1495};
1496
1497#define mac_cmac_vect11_key mac_cmac_vect9_key
1498static const uint8_t mac_cmac_vect11_data[] = {
1499 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
1500 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a,
1501 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c,
1502 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51,
1503 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11
1504};
1505
1506static const uint8_t mac_cmac_vect11_out[] = {
1507 0xaa, 0xf3, 0xd8, 0xf1, 0xde, 0x56, 0x40, 0xc2,
1508 0x32, 0xf5, 0xb1, 0x69, 0xb9, 0xc9, 0x11, 0xe6
1509};
1510
1511#define mac_cmac_vect12_key mac_cmac_vect9_key
1512static const uint8_t mac_cmac_vect12_data[] = {
1513 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
1514 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a,
1515 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c,
1516 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51,
1517 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11,
1518 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef,
1519 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17,
1520 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10
1521};
1522
1523static const uint8_t mac_cmac_vect12_out[] = {
1524 0xe1, 0x99, 0x21, 0x90, 0x54, 0x9f, 0x6e, 0xd5,
1525 0x69, 0x6a, 0x2c, 0x05, 0x6c, 0x31, 0x54, 0x10
1526};
1527
1528struct xtest_mac_case {
1529 uint32_t algo;
1530 uint32_t key_type;
1531 const uint8_t *key;
1532 size_t key_len;
1533 size_t in_incr;
1534 const uint8_t *in;
1535 size_t in_len;
1536 const uint8_t *out;
1537 size_t out_len;
1538};
1539
1540#define XTEST_MAC_CASE(algo, key_type, key, in_incr, in, out) \
1541 { (algo), (key_type), (key), ARRAY_SIZE(key), \
1542 (in_incr), (in), ARRAY_SIZE(in), (out), ARRAY_SIZE(out) }
1543
1544#define XTEST_MAC_CBC_CASE(algo, key_type, vect, in_incr) \
1545 XTEST_MAC_CASE((algo), (key_type), \
1546 mac_cbc_ ## vect ## _key, (in_incr), \
1547 mac_cbc_ ## vect ## _data, mac_cbc_ ## vect ## _out)
1548
1549#define XTEST_MAC_CMAC_CASE(vect, in_incr) \
1550 XTEST_MAC_CASE(TEE_ALG_AES_CMAC, TEE_TYPE_AES, \
1551 mac_cmac_ ## vect ## _key, (in_incr), \
1552 mac_cmac_ ## vect ## _data, mac_cmac_ ## vect ## _out)
1553
1554static const struct xtest_mac_case mac_cases[] = {
1555 XTEST_MAC_CASE(TEE_ALG_HMAC_MD5, TEE_TYPE_HMAC_MD5,
1556 mac_data_md5_key1,
1557 4, mac_data_md5_in1, mac_data_md5_out1),
1558 XTEST_MAC_CASE(TEE_ALG_HMAC_SHA1, TEE_TYPE_HMAC_SHA1,
1559 mac_data_sha1_key1,
1560 5, mac_data_sha1_in1, mac_data_sha1_out1),
1561 XTEST_MAC_CASE(TEE_ALG_HMAC_SHA224, TEE_TYPE_HMAC_SHA224,
1562 mac_data_sha224_key1,
1563 8, mac_data_sha224_in1, mac_data_sha224_out1),
1564 XTEST_MAC_CASE(TEE_ALG_HMAC_SHA256, TEE_TYPE_HMAC_SHA256,
1565 mac_data_sha256_key1,
1566 1, mac_data_sha256_in1, mac_data_sha256_out1),
1567 XTEST_MAC_CASE(TEE_ALG_HMAC_SHA256, TEE_TYPE_HMAC_SHA256,
1568 mac_data_sha256_key2,
1569 7, mac_data_sha256_in2, mac_data_sha256_out2),
1570 XTEST_MAC_CASE(TEE_ALG_HMAC_SHA384, TEE_TYPE_HMAC_SHA384,
1571 mac_data_sha384_key1,
1572 11, mac_data_sha384_in1, mac_data_sha384_out1),
1573 XTEST_MAC_CASE(TEE_ALG_HMAC_SHA512, TEE_TYPE_HMAC_SHA512,
1574 mac_data_sha512_key1,
1575 13, mac_data_sha512_in1, mac_data_sha512_out1),
1576
1577 XTEST_MAC_CBC_CASE(TEE_ALG_AES_CBC_MAC_NOPAD, TEE_TYPE_AES, vect1, 14),
1578 XTEST_MAC_CBC_CASE(TEE_ALG_DES_CBC_MAC_NOPAD, TEE_TYPE_DES, vect2, 16),
1579 XTEST_MAC_CBC_CASE(TEE_ALG_DES3_CBC_MAC_NOPAD, TEE_TYPE_DES3, vect3,
1580 17),
1581 XTEST_MAC_CBC_CASE(TEE_ALG_AES_CBC_MAC_PKCS5, TEE_TYPE_AES, vect4, 11),
1582 XTEST_MAC_CBC_CASE(TEE_ALG_DES_CBC_MAC_PKCS5, TEE_TYPE_DES, vect5, 9),
1583 XTEST_MAC_CBC_CASE(TEE_ALG_DES3_CBC_MAC_PKCS5, TEE_TYPE_DES3, vect6, 4),
1584 XTEST_MAC_CBC_CASE(TEE_ALG_AES_CBC_MAC_PKCS5, TEE_TYPE_AES, vect7, 3),
1585 XTEST_MAC_CBC_CASE(TEE_ALG_DES_CBC_MAC_PKCS5, TEE_TYPE_DES, vect8, 23),
1586 XTEST_MAC_CBC_CASE(TEE_ALG_DES3_CBC_MAC_PKCS5, TEE_TYPE_DES3, vect9,
1587 34),
Pascal Brand5c3d8092015-07-23 08:20:26 +02001588 XTEST_MAC_CBC_CASE(TEE_ALG_DES3_CBC_MAC_PKCS5, TEE_TYPE_DES3, vect10, 4),
Pascal Brandc639ac82015-07-02 08:53:34 +02001589
1590 { TEE_ALG_AES_CMAC, TEE_TYPE_AES, mac_cmac_vect1_key,
1591 ARRAY_SIZE(mac_cmac_vect1_key), 0, NULL, 0, mac_cmac_vect1_out,
1592 ARRAY_SIZE(mac_cmac_vect1_out) },
1593 XTEST_MAC_CMAC_CASE(vect2, 9),
1594 XTEST_MAC_CMAC_CASE(vect3, 9),
1595 XTEST_MAC_CMAC_CASE(vect4, 9),
1596 { TEE_ALG_AES_CMAC, TEE_TYPE_AES, mac_cmac_vect5_key,
1597 ARRAY_SIZE(mac_cmac_vect5_key), 0, NULL, 0, mac_cmac_vect5_out,
1598 ARRAY_SIZE(mac_cmac_vect5_out) },
1599 XTEST_MAC_CMAC_CASE(vect6, 9),
1600 XTEST_MAC_CMAC_CASE(vect7, 9),
1601 XTEST_MAC_CMAC_CASE(vect8, 9),
1602 { TEE_ALG_AES_CMAC, TEE_TYPE_AES, mac_cmac_vect9_key,
1603 ARRAY_SIZE(mac_cmac_vect9_key), 0, NULL, 0, mac_cmac_vect9_out,
1604 ARRAY_SIZE(mac_cmac_vect9_out) },
1605 XTEST_MAC_CMAC_CASE(vect10, 9),
1606 XTEST_MAC_CMAC_CASE(vect11, 9),
1607 XTEST_MAC_CMAC_CASE(vect12, 9),
1608};
1609
1610static void xtest_tee_test_4002(ADBG_Case_t *c)
1611{
1612 TEEC_Session session = { 0 };
1613 TEE_OperationHandle op1;
1614 TEE_OperationHandle op2;
1615 TEE_ObjectHandle key_handle;
1616 uint8_t out[64];
1617 size_t out_size;
1618 uint32_t ret_orig;
1619 size_t n;
1620
1621 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1622 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
1623 &ret_orig)))
1624 return;
1625
1626 for (n = 0; n < ARRAY_SIZE(mac_cases); n++) {
1627 TEE_Attribute key_attr;
1628 size_t key_size;
1629
1630 Do_ADBG_BeginSubCase(c, "MAC case %d algo 0x%x",
1631 (int)n, (unsigned int)mac_cases[n].algo);
1632
1633 key_attr.attributeID = TEE_ATTR_SECRET_VALUE;
1634 key_attr.content.ref.buffer = (void *)mac_cases[n].key;
1635 key_attr.content.ref.length = mac_cases[n].key_len;
1636
1637 key_size = key_attr.content.ref.length * 8;
1638 if (mac_cases[n].key_type == TEE_TYPE_DES ||
1639 mac_cases[n].key_type == TEE_TYPE_DES3)
1640 /* Exclude parity in bit size of key */
1641 key_size -= key_size / 8;
1642
1643 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1644 ta_crypt_cmd_allocate_operation(c, &session, &op1,
1645 mac_cases[n].algo, TEE_MODE_MAC, key_size)))
1646 goto out;
1647
1648 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1649 ta_crypt_cmd_allocate_operation(c, &session, &op2,
1650 mac_cases[n].algo, TEE_MODE_MAC, key_size)))
1651 goto out;
1652
1653 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1654 ta_crypt_cmd_allocate_transient_object(c, &session,
1655 mac_cases[n].key_type, key_size, &key_handle)))
1656 goto out;
1657
1658 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1659 ta_crypt_cmd_populate_transient_object(c, &session,
1660 key_handle, &key_attr, 1)))
1661 goto out;
1662
1663 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1664 ta_crypt_cmd_set_operation_key(c, &session, op1,
1665 key_handle)))
1666 goto out;
1667
1668 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1669 ta_crypt_cmd_free_transient_object(c, &session,
1670 key_handle)))
1671 goto out;
1672
1673 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1674 ta_crypt_cmd_mac_init(c, &session, op1, NULL, 0)))
1675 goto out;
1676
1677 if (mac_cases[n].in != NULL) {
1678 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1679 ta_crypt_cmd_mac_update(c, &session, op1,
1680 mac_cases[n].in, mac_cases[n].in_incr)))
1681 goto out;
1682 }
1683
1684 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1685 ta_crypt_cmd_copy_operation(c, &session, op2, op1)))
1686 goto out;
1687
1688 out_size = sizeof(out);
1689 memset(out, 0, sizeof(out));
1690 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1691 ta_crypt_cmd_mac_final_compute(c, &session, op2,
1692 mac_cases[n].in + mac_cases[n].in_incr,
1693 mac_cases [n].in_len - mac_cases[n].in_incr,
1694 out, &out_size)))
1695 goto out;
1696
1697 (void)ADBG_EXPECT_BUFFER(c, mac_cases[n].out,
1698 mac_cases[n].out_len, out, out_size);
1699
1700 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1701 ta_crypt_cmd_mac_init(c, &session, op1, NULL, 0)))
1702 goto out;
1703
1704 out_size = sizeof(out);
1705 memset(out, 0, sizeof(out));
1706 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1707 ta_crypt_cmd_mac_final_compute(c, &session, op1,
1708 mac_cases[n].in, mac_cases[n].in_len, out,
1709 &out_size)))
1710 goto out;
1711
1712 (void)ADBG_EXPECT_BUFFER(c, mac_cases[n].out,
1713 mac_cases[n].out_len, out, out_size);
1714
1715 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1716 ta_crypt_cmd_free_operation(c, &session, op1)))
1717 goto out;
1718
1719 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1720 ta_crypt_cmd_free_operation(c, &session, op2)))
1721 goto out;
1722
1723 Do_ADBG_EndSubCase(c, NULL);
1724 }
1725out:
1726 TEEC_CloseSession(&session);
1727}
1728
1729/* generated with scripts/crypt_aes_cbc_nopad.pl */
1730static const uint8_t ciph_data_aes_key1[] = {
1731 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1732 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1733};
1734
1735static const uint8_t ciph_data_des_key1[] = {
1736 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37 /* 01234567 */
1737};
1738
1739static const uint8_t ciph_data_des_key2[] = {
1740 0x13, 0x34, 0x57, 0x79, 0x9B, 0xBC, 0xDF, 0xF1
1741};
1742
1743
1744static const uint8_t ciph_data_des3_key1[] = {
1745 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1746 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1747 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, /* 12345678 */
1748};
1749
1750static const uint8_t ciph_data_des3_key2[] = {
1751 0x13, 0x34, 0x57, 0x79, 0x9B, 0xBC, 0xDF, 0xF1,
1752 0x13, 0x34, 0x57, 0x79, 0x9B, 0xBC, 0xDF, 0xF1,
1753 0x13, 0x34, 0x57, 0x79, 0x9B, 0xBC, 0xDF, 0xF1
1754};
1755
1756static const uint8_t ciph_data_des2_key1[] = {
1757 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1758 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1759};
1760
1761static const uint8_t ciph_data_in1[] = {
1762 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, /* 23456789 */
1763 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, /* ABCDEF01 */
1764 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, /* 3456789A */
1765 0x42, 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, 0x32, /* BCDEF012 */
1766 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, /* 456789AB */
1767 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, 0x32, 0x33, /* CDEF0123 */
1768};
1769
1770static const uint8_t ciph_data_in3[] = {
1771 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, /* 23456789 */
1772 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, /* ABCDEF01 */
1773 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, /* 3456789A */
1774 0x42, 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, 0x32, /* BCDEF012 */
1775 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, /* 456789AB */
1776 0x43, 0x44, 0x45, 0x46, 0x30, /* CDEF0 */
1777};
1778
1779static const uint8_t ciph_data_128_iv1[] = {
1780 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, /* 12345678 */
1781 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x30, /* 9ABCDEF0 */
1782};
1783
1784static const uint8_t ciph_data_64_iv1[] = {
1785 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, /* 12345678 */
1786};
1787
1788static const uint8_t ciph_data_in2[] = {
1789 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef
1790};
1791
1792static const uint8_t ciph_data_aes_ecb_nopad_out1[] = {
1793 0xA5, 0xBE, 0x14, 0xD5, 0x01, 0x05, 0x24, 0x48, /* ......$H */
1794 0x58, 0x1A, 0x6B, 0x82, 0xD4, 0x41, 0xD2, 0xB3, /* X.k..A.. */
1795 0xBB, 0xF9, 0xAE, 0x37, 0x94, 0xAC, 0x18, 0x50, /* ...7...P */
1796 0x87, 0x09, 0xCC, 0x3F, 0x43, 0xD2, 0xC2, 0xB7, /* ...?C... */
1797 0xD7, 0x6F, 0x84, 0x07, 0xB4, 0x78, 0xCE, 0x34, /* .o...x.4 */
1798 0x48, 0xC9, 0x16, 0x86, 0x42, 0xB8, 0xFF, 0xCF, /* H...B... */
1799};
1800
1801static const uint8_t ciph_data_aes_cbc_nopad_out1[] = {
1802 0x8D, 0x9F, 0x88, 0xD8, 0xAF, 0x9F, 0xC1, 0x3B, /* .......; */
1803 0x02, 0x15, 0x43, 0x6A, 0x8C, 0x1E, 0x34, 0x5C, /* ..Cj..4\ */
1804 0x83, 0xF4, 0x85, 0x3E, 0x43, 0x0F, 0xE5, 0x5F, /* ...>C.._ */
1805 0x81, 0x4C, 0xC0, 0x28, 0x3F, 0xD9, 0x98, 0x53, /* .L.(?..S */
1806 0xB1, 0x44, 0x51, 0x38, 0x21, 0xAB, 0x10, 0xCE, /* .DQ8!... */
1807 0xC2, 0xEC, 0x65, 0x54, 0xDD, 0x5C, 0xEA, 0xDC, /* ..eT.\.. */
1808};
1809
1810static const uint8_t ciph_data_aes_ctr_out1[] = {
1811 0xD2, 0xDD, 0x11, 0xA8, 0xF7, 0xB0, 0xAE, 0x55, /* .......U */
1812 0xBE, 0x61, 0x7A, 0xE6, 0xA1, 0x6C, 0x79, 0xF4, /* .az..ly. */
1813 0x62, 0x51, 0x7B, 0xE9, 0x7C, 0xA0, 0x31, 0x0C, /* bQ{.|.1. */
1814 0x24, 0x15, 0x70, 0x7F, 0x47, 0x37, 0x69, 0xE0, /* $.p.G7i. */
1815 0x24, 0xC3, 0x29, 0xCD, 0xF2, 0x26, 0x69, 0xFF, /* $.)..&i. */
1816 0x72, 0x0E, 0x3C, 0xD1, 0xA1, 0x2F, 0x5D, 0x33, /* r.<../]3 */
1817};
1818
1819static const uint8_t ciph_data_aes_ctr_out2[] = {
1820 0xD2, 0xDD, 0x11, 0xA8, 0xF7, 0xB0, 0xAE, 0x55, /* .......U */
1821 0xBE, 0x61, 0x7A, 0xE6, 0xA1, 0x6C, 0x79, 0xF4, /* .az..ly. */
1822 0x62, 0x51, 0x7B, 0xE9, 0x7C, 0xA0, 0x31, 0x0C, /* bQ{.|.1. */
1823 0x24, 0x15, 0x70, 0x7F, 0x47, 0x37, 0x69, 0xE0, /* $.p.G7i. */
1824 0x24, 0xC3, 0x29, 0xCD, 0xF2, 0x26, 0x69, 0xFF, /* $.)..&i. */
1825 0x72, 0x0E, 0x3C, 0xD1, 0xA1, /* r.<.. */
1826};
1827
1828static const uint8_t ciph_data_aes_cbc_vect1_key[] = {
1829 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1830 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1831};
1832
1833static const uint8_t ciph_data_aes_cbc_vect1_iv[] = {
1834 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* ........ */
1835 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* ........ */
1836};
1837
1838static const uint8_t ciph_data_aes_cbc_vect1_ptx[] = {
1839 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x20, 0x62, /* Cipher b */
1840 0x6C, 0x6F, 0x63, 0x6B, 0x20, 0x63, 0x68, 0x61, /* lock cha */
1841 0x69, 0x6E, 0x69, 0x6E, 0x67, 0x20, 0x28, 0x43, /* ining (C */
1842 0x42, 0x43, 0x29, 0x20, 0x69, 0x73, 0x20, 0x61, /* BC) is a */
1843 0x20, 0x63, 0x6F, 0x6D, 0x6D, 0x6F, 0x6E, 0x20, /* common */
1844 0x63, 0x68, 0x61, 0x69, 0x6E, 0x69, 0x6E, 0x67, /* chaining */
1845 0x20, 0x6D, 0x6F, 0x64, 0x65, 0x20, 0x69, 0x6E, /* mode in */
1846 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x74, /* which t */
1847 0x68, 0x65, 0x20, 0x70, 0x72, 0x65, 0x76, 0x69, /* he previ */
1848 0x6F, 0x75, 0x73, 0x20, 0x62, 0x6C, 0x6F, 0x63, /* ous bloc */
1849 0x6B, 0x27, 0x73, 0x20, 0x63, 0x69, 0x70, 0x68, /* k's ciph */
1850 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x20, 0x69, /* ertext i */
1851 0x73, 0x20, 0x78, 0x6F, 0x72, 0x65, 0x64, 0x20, /* s xored */
1852 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, /* with the */
1853 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6E, 0x74, /* current */
1854 0x20, 0x62, 0x6C, 0x6F, 0x63, 0x6B, 0x27, 0x73, /* block's */
1855 0x20, 0x70, 0x6C, 0x61, 0x69, 0x6E, 0x74, 0x65, /* plainte */
1856 0x78, 0x74, 0x20, 0x62, 0x65, 0x66, 0x6F, 0x72, /* xt befor */
1857 0x65, 0x20, 0x65, 0x6E, 0x63, 0x72, 0x79, 0x70, /* e encryp */
1858 0x74, 0x69, 0x6F, 0x6E, 0x2E, 0x2E, 0x2E, 0x2E, /* tion.... */
1859};
1860
1861static const uint8_t ciph_data_aes_cbc_vect1_ctx[] = {
1862 0xDD, 0x16, 0xC3, 0x47, 0x69, 0xEC, 0xF5, 0x86, /* ...Gi... */
1863 0x20, 0xB4, 0xF7, 0xE3, 0xB9, 0x36, 0xE8, 0xAC, /* ....6.. */
1864 0xC9, 0xA2, 0x11, 0x71, 0x3B, 0x10, 0x9D, 0x45, /* ...q;..E */
1865 0xCA, 0xE2, 0x49, 0xA6, 0x4E, 0x56, 0x07, 0xC5, /* ..I.NV.. */
1866 0xCE, 0xA3, 0x14, 0xB5, 0x30, 0x1B, 0x63, 0xBB, /* ....0.c. */
1867 0x2D, 0x6F, 0xE9, 0xCA, 0x0B, 0x00, 0x31, 0x3F, /* -o....1? */
1868 0xA4, 0x9A, 0x39, 0xE1, 0xC8, 0xD2, 0x24, 0x95, /* ..9...$. */
1869 0x14, 0xE9, 0xD2, 0x43, 0xE8, 0xA8, 0x1E, 0x0A, /* ...C.... */
1870 0xFE, 0x9D, 0x4F, 0xF5, 0xBB, 0x16, 0xB9, 0x54, /* ..O....T */
1871 0x78, 0x07, 0x94, 0x05, 0x8E, 0x47, 0xC3, 0xCB, /* x....G.. */
1872 0x7C, 0xEC, 0xF4, 0xF8, 0xF2, 0xA4, 0x59, 0x6E, /* |.....Yn */
1873 0xED, 0xAD, 0x7F, 0x62, 0xAF, 0x89, 0xA8, 0x5B, /* ...b...[ */
1874 0x75, 0xD4, 0x73, 0xE3, 0xBA, 0x9F, 0x9A, 0xD2, /* u.s..... */
1875 0x0F, 0xFD, 0x3C, 0xE6, 0xC6, 0xA4, 0xD6, 0x6C, /* ..<....l */
1876 0x6A, 0x09, 0xE2, 0x16, 0xB0, 0x8C, 0x69, 0x3C, /* j.....i< */
1877 0xC8, 0x1C, 0xE4, 0x3E, 0x86, 0x4D, 0xB0, 0x2B, /* ...>.M.+ */
1878 0x29, 0xA0, 0x5A, 0xA3, 0x67, 0xBA, 0xDC, 0x11, /* ).Z.g... */
1879 0x08, 0x5E, 0x69, 0xB4, 0x6F, 0xA5, 0xE2, 0xB8, /* .^i.o... */
1880 0xC9, 0x6E, 0x83, 0x7E, 0x35, 0xC8, 0xA7, 0xA0, /* .n.~5... */
1881 0x33, 0xA3, 0xB1, 0x4B, 0x5A, 0x92, 0x51, 0x2E, /* 3..KZ.Q. */
1882};
1883
1884/* AES-CTS test vectors from http://tools.ietf.org/html/rfc3962
1885 * and http://tools.ietf.org/html/draft-raeburn-krb-rijndael-krb-02 */
1886static const uint8_t ciph_data_aes_cts_vect1_key[] = {
1887 0x63, 0x68, 0x69, 0x63, 0x6b, 0x65, 0x6e, 0x20,
1888 0x74, 0x65, 0x72, 0x69, 0x79, 0x61, 0x6b, 0x69
1889};
1890
1891static const uint8_t ciph_data_aes_cts_vect1_iv[16] = {
1892 0x00
1893};
1894
1895static const uint8_t ciph_data_aes_cts_vect1_ptx[] = {
1896 0x49, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20,
1897 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65,
1898 0x20
1899};
1900
1901static const uint8_t ciph_data_aes_cts_vect1_ctx[] = {
1902 0xc6, 0x35, 0x35, 0x68, 0xf2, 0xbf, 0x8c, 0xb4,
1903 0xd8, 0xa5, 0x80, 0x36, 0x2d, 0xa7, 0xff, 0x7f,
1904 0x97
1905};
1906
1907#define ciph_data_aes_cts_vect2_key ciph_data_aes_cts_vect1_key
1908#define ciph_data_aes_cts_vect2_iv ciph_data_aes_cts_vect1_iv
1909static const uint8_t ciph_data_aes_cts_vect2_ptx[] = {
1910 0x49, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20,
1911 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65,
1912 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c,
1913 0x20, 0x47, 0x61, 0x75, 0x27, 0x73, 0x20
1914};
1915
1916static const uint8_t ciph_data_aes_cts_vect2_ctx[] = {
1917 0xfc, 0x00, 0x78, 0x3e, 0x0e, 0xfd, 0xb2, 0xc1,
1918 0xd4, 0x45, 0xd4, 0xc8, 0xef, 0xf7, 0xed, 0x22,
1919 0x97, 0x68, 0x72, 0x68, 0xd6, 0xec, 0xcc, 0xc0,
1920 0xc0, 0x7b, 0x25, 0xe2, 0x5e, 0xcf, 0xe5
1921};
1922
1923#define ciph_data_aes_cts_vect3_key ciph_data_aes_cts_vect1_key
1924#define ciph_data_aes_cts_vect3_iv ciph_data_aes_cts_vect1_iv
1925static const uint8_t ciph_data_aes_cts_vect3_ptx[] = {
1926 0x49, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20,
1927 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65,
1928 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c,
1929 0x20, 0x47, 0x61, 0x75, 0x27, 0x73, 0x20, 0x43,
1930};
1931
1932static const uint8_t ciph_data_aes_cts_vect3_ctx[] = {
1933 0x39, 0x31, 0x25, 0x23, 0xa7, 0x86, 0x62, 0xd5,
1934 0xbe, 0x7f, 0xcb, 0xcc, 0x98, 0xeb, 0xf5, 0xa8,
1935 0x97, 0x68, 0x72, 0x68, 0xd6, 0xec, 0xcc, 0xc0,
1936 0xc0, 0x7b, 0x25, 0xe2, 0x5e, 0xcf, 0xe5, 0x84,
1937};
1938
1939#define ciph_data_aes_cts_vect4_key ciph_data_aes_cts_vect1_key
1940#define ciph_data_aes_cts_vect4_iv ciph_data_aes_cts_vect1_iv
1941static const uint8_t ciph_data_aes_cts_vect4_ptx[] = {
1942 0x49, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20,
1943 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65,
1944 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c,
1945 0x20, 0x47, 0x61, 0x75, 0x27, 0x73, 0x20, 0x43,
1946 0x68, 0x69, 0x63, 0x6b, 0x65, 0x6e, 0x2c, 0x20,
1947 0x70, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x2c,
1948};
1949
1950static const uint8_t ciph_data_aes_cts_vect4_ctx[] = {
1951 0x97, 0x68, 0x72, 0x68, 0xd6, 0xec, 0xcc, 0xc0,
1952 0xc0, 0x7b, 0x25, 0xe2, 0x5e, 0xcf, 0xe5, 0x84,
1953 0xb3, 0xff, 0xfd, 0x94, 0x0c, 0x16, 0xa1, 0x8c,
1954 0x1b, 0x55, 0x49, 0xd2, 0xf8, 0x38, 0x02, 0x9e,
1955 0x39, 0x31, 0x25, 0x23, 0xa7, 0x86, 0x62, 0xd5,
1956 0xbe, 0x7f, 0xcb, 0xcc, 0x98, 0xeb, 0xf5,
1957};
1958
1959#define ciph_data_aes_cts_vect5_key ciph_data_aes_cts_vect1_key
1960#define ciph_data_aes_cts_vect5_iv ciph_data_aes_cts_vect1_iv
1961static const uint8_t ciph_data_aes_cts_vect5_ptx[] = {
1962 0x49, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20,
1963 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65,
1964 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c,
1965 0x20, 0x47, 0x61, 0x75, 0x27, 0x73, 0x20, 0x43,
1966 0x68, 0x69, 0x63, 0x6b, 0x65, 0x6e, 0x2c, 0x20,
1967 0x70, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x2c, 0x20,
1968};
1969
1970static const uint8_t ciph_data_aes_cts_vect5_ctx[] = {
1971 0x97, 0x68, 0x72, 0x68, 0xd6, 0xec, 0xcc, 0xc0,
1972 0xc0, 0x7b, 0x25, 0xe2, 0x5e, 0xcf, 0xe5, 0x84,
1973 0x9d, 0xad, 0x8b, 0xbb, 0x96, 0xc4, 0xcd, 0xc0,
1974 0x3b, 0xc1, 0x03, 0xe1, 0xa1, 0x94, 0xbb, 0xd8,
1975 0x39, 0x31, 0x25, 0x23, 0xa7, 0x86, 0x62, 0xd5,
1976 0xbe, 0x7f, 0xcb, 0xcc, 0x98, 0xeb, 0xf5, 0xa8,
1977};
1978
1979#define ciph_data_aes_cts_vect6_key ciph_data_aes_cts_vect1_key
1980#define ciph_data_aes_cts_vect6_iv ciph_data_aes_cts_vect1_iv
1981static const uint8_t ciph_data_aes_cts_vect6_ptx[] = {
1982 0x49, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20,
1983 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65,
1984 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c,
1985 0x20, 0x47, 0x61, 0x75, 0x27, 0x73, 0x20, 0x43,
1986 0x68, 0x69, 0x63, 0x6b, 0x65, 0x6e, 0x2c, 0x20,
1987 0x70, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x2c, 0x20,
1988 0x61, 0x6e, 0x64, 0x20, 0x77, 0x6f, 0x6e, 0x74,
1989 0x6f, 0x6e, 0x20, 0x73, 0x6f, 0x75, 0x70, 0x2e,
1990};
1991
1992static const uint8_t ciph_data_aes_cts_vect6_ctx[] = {
1993 0x97, 0x68, 0x72, 0x68, 0xd6, 0xec, 0xcc, 0xc0,
1994 0xc0, 0x7b, 0x25, 0xe2, 0x5e, 0xcf, 0xe5, 0x84,
1995 0x39, 0x31, 0x25, 0x23, 0xa7, 0x86, 0x62, 0xd5,
1996 0xbe, 0x7f, 0xcb, 0xcc, 0x98, 0xeb, 0xf5, 0xa8,
1997 0x48, 0x07, 0xef, 0xe8, 0x36, 0xee, 0x89, 0xa5,
1998 0x26, 0x73, 0x0d, 0xbc, 0x2f, 0x7b, 0xc8, 0x40,
1999 0x9d, 0xad, 0x8b, 0xbb, 0x96, 0xc4, 0xcd, 0xc0,
2000 0x3b, 0xc1, 0x03, 0xe1, 0xa1, 0x94, 0xbb, 0xd8,
2001};
2002
2003static const uint8_t ciph_data_des_ecb_nopad_out1[] = {
2004 0x46, 0x2B, 0x91, 0xA8, 0x55, 0xE6, 0x7E, 0x75, /* F+..U.~u */
2005 0x5E, 0x53, 0xF4, 0x8F, 0x29, 0x41, 0x4E, 0xEF, /* ^S..)AN. */
2006 0x32, 0x1B, 0x58, 0x42, 0x9B, 0xB4, 0x3A, 0x1F, /* 2.XB..:. */
2007 0x9A, 0xEA, 0xA4, 0xB4, 0xCD, 0xE9, 0x87, 0x7C, /* .......| */
2008 0xC0, 0x05, 0x34, 0xED, 0x86, 0x3C, 0x2A, 0x81, /* ..4..<.. */
2009 0x5E, 0x93, 0x0E, 0x86, 0xA9, 0xBB, 0x80, 0xFF, /* ^....... */
2010};
2011
2012static const uint8_t ciph_data_des_ecb_nopad_out2[] = {
2013 0x85, 0xE8, 0x13, 0x54, 0x0F, 0x0A, 0xB4, 0x05
2014};
2015
2016static const uint8_t ciph_data_des_cbc_nopad_out1[] = {
2017 0xAD, 0xD6, 0xD6, 0x3E, 0x88, 0xD0, 0xDD, 0xD4, /* ...>.... */
2018 0x9A, 0x93, 0x95, 0xA0, 0x86, 0x22, 0x5B, 0x9E, /* ....."[. */
2019 0x84, 0x0C, 0x6F, 0x12, 0x04, 0x11, 0x6F, 0xD4, /* ..o...o. */
2020 0x12, 0x29, 0xC6, 0x78, 0x0C, 0xFB, 0x58, 0x5B, /* .).x..X[ */
2021 0x66, 0x82, 0x0E, 0x52, 0xDC, 0x25, 0x16, 0x51, /* f..R.%.Q */
2022 0x69, 0xDF, 0xFE, 0x4E, 0x11, 0x1D, 0x9D, 0x08, /* i..N.... */
2023};
2024
2025static const uint8_t ciph_data_des3_ecb_nopad_out1[] = {
2026 0xA7, 0x46, 0xEC, 0xA8, 0x6A, 0x7F, 0x4A, 0xF1, /* .F..j.J. */
2027 0x44, 0x60, 0x37, 0x3B, 0x7F, 0x76, 0xE5, 0xFF, /* D`7;.v.. */
2028 0xC1, 0xE7, 0xA5, 0x04, 0x9C, 0x29, 0x5C, 0xA5, /* .....)\. */
2029 0xDD, 0xC8, 0xEE, 0x36, 0x1F, 0x48, 0xE0, 0xA9, /* ...6.H.. */
2030 0x82, 0x2D, 0x53, 0x84, 0x49, 0x69, 0x78, 0xFA, /* .-S.Iix. */
2031 0x23, 0x69, 0x1D, 0xF7, 0x08, 0x38, 0x44, 0x05, /* #i...8D. */
2032};
2033
2034static const uint8_t ciph_data_des3_cbc_nopad_out1[] = {
2035 0x18, 0x09, 0xEB, 0x98, 0xE4, 0x58, 0x72, 0x11, /* .....Xr. */
2036 0x30, 0x58, 0xAB, 0x38, 0xB0, 0xC9, 0x2B, 0xED, /* 0X.8..+. */
2037 0xDA, 0xC5, 0xE8, 0xA9, 0xF6, 0x8A, 0xA7, 0x80, /* ........ */
2038 0xBE, 0x54, 0x1F, 0x63, 0xF6, 0xEE, 0xA2, 0x4C, /* .T.c...L */
2039 0x7C, 0xEB, 0x84, 0x7D, 0xDA, 0xCA, 0x1E, 0xB2, /* |..}.... */
2040 0xED, 0x5E, 0x96, 0xB8, 0x01, 0x4B, 0x77, 0x02, /* .^...Kw. */
2041};
2042
2043static const uint8_t ciph_data_des2_ecb_nopad_out1[] = {
2044 0xAB, 0x12, 0xB6, 0xE2, 0x4A, 0x3A, 0x26, 0x14, /* ....J:&. */
2045 0xF0, 0x7D, 0x23, 0xD0, 0x55, 0xDF, 0x5C, 0x16, /* .}#.U.\. */
2046 0x43, 0x59, 0x1E, 0x44, 0x01, 0x76, 0xD7, 0x50, /* CY.D.v.P */
2047 0x44, 0xC0, 0x15, 0xDF, 0x2E, 0x7F, 0x8B, 0xC5, /* D....... */
2048 0xFF, 0x8B, 0x87, 0xFE, 0x33, 0xD7, 0xCB, 0x2C, /* ....3.., */
2049 0xDA, 0x79, 0x6F, 0xA4, 0x05, 0x2B, 0x30, 0xCE, /* .yo..+0. */
2050};
2051
2052static const uint8_t ciph_data_des2_cbc_nopad_out1[] = {
2053 0x47, 0x2F, 0xB1, 0x83, 0xC4, 0xBB, 0x93, 0x16, /* G/...... */
2054 0x73, 0xF9, 0xAD, 0x6F, 0x00, 0xF9, 0xCB, 0x4A, /* s..o...J */
2055 0x0F, 0x4F, 0x75, 0x75, 0xFB, 0x39, 0x0B, 0xFC, /* .Ouu.9.. */
2056 0x9F, 0x48, 0x52, 0xAD, 0xA2, 0x75, 0x2C, 0xF1, /* .HR..u, . */
2057 0x7D, 0xC3, 0x8F, 0x16, 0xCF, 0xC9, 0x76, 0x29, /* }.....v) */
2058 0x1A, 0xBF, 0xB3, 0xD9, 0x10, 0x7E, 0xAA, 0x49, /* .....~.I */
2059};
2060
2061struct xtest_ciph_case {
2062 uint32_t algo;
2063 uint32_t mode;
2064 uint32_t key_type;
2065 const uint8_t *key1;
2066 size_t key1_len;
2067 const uint8_t *key2;
2068 size_t key2_len;
2069 const uint8_t *iv;
2070 size_t iv_len;
2071 size_t in_incr;
2072 const uint8_t *in;
2073 size_t in_len;
2074 const uint8_t *out;
2075 size_t out_len;
2076 size_t line;
2077};
2078
2079#define XTEST_CIPH_CASE_NO_IV(algo, key_type, key, in_incr, ptx, ctx) \
2080 { (algo), TEE_MODE_ENCRYPT, (key_type), (key), ARRAY_SIZE(key), \
2081 NULL, 0, NULL, 0, \
2082 (in_incr), (ptx), ARRAY_SIZE(ptx), (ctx), ARRAY_SIZE(ctx), \
2083 __LINE__ }, \
2084 { (algo), TEE_MODE_DECRYPT, (key_type), (key), ARRAY_SIZE(key), \
2085 NULL, 0, NULL, 0, \
2086 (in_incr), (ctx), ARRAY_SIZE(ctx), (ptx), ARRAY_SIZE(ptx), __LINE__ }
2087
2088#define XTEST_CIPH_CASE(algo, key_type, key, iv, in_incr, ptx, ctx) \
2089 { (algo), TEE_MODE_ENCRYPT, (key_type), (key), ARRAY_SIZE(key), \
2090 NULL, 0, iv, ARRAY_SIZE(iv), (in_incr), (ptx), ARRAY_SIZE(ptx), \
2091 (ctx), ARRAY_SIZE(ctx), __LINE__ }, \
2092 { (algo), TEE_MODE_DECRYPT, (key_type), (key), ARRAY_SIZE(key), \
2093 NULL, 0, iv, ARRAY_SIZE(iv), (in_incr), (ctx), ARRAY_SIZE(ctx), \
2094 (ptx), ARRAY_SIZE(ptx), __LINE__ }
2095
2096#define XTEST_CIPH_CASE_AES_XTS(vect, in_incr) \
2097 { TEE_ALG_AES_XTS, TEE_MODE_ENCRYPT, TEE_TYPE_AES, \
2098 ciph_data_aes_xts_ ## vect ## _key1, \
2099 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _key1), \
2100 ciph_data_aes_xts_ ## vect ## _key2, \
2101 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _key2), \
2102 ciph_data_aes_xts_ ## vect ## _iv, \
2103 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _iv), \
2104 (in_incr), \
2105 ciph_data_aes_xts_ ## vect ## _ptx, \
2106 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _ptx), \
2107 ciph_data_aes_xts_ ## vect ## _ctx, \
2108 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _ctx), __LINE__ }, \
2109 { TEE_ALG_AES_XTS, TEE_MODE_DECRYPT, TEE_TYPE_AES, \
2110 ciph_data_aes_xts_ ## vect ## _key1, \
2111 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _key1), \
2112 ciph_data_aes_xts_ ## vect ## _key2, \
2113 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _key2), \
2114 ciph_data_aes_xts_ ## vect ## _iv, \
2115 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _iv), \
2116 (in_incr), \
2117 ciph_data_aes_xts_ ## vect ## _ctx, \
2118 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _ctx), \
2119 ciph_data_aes_xts_ ## vect ## _ptx, \
2120 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _ptx), __LINE__ }
2121
2122#define XTEST_CIPH_CASE_AES_CBC(vect, in_incr) \
2123 XTEST_CIPH_CASE(TEE_ALG_AES_CBC_NOPAD, TEE_TYPE_AES, \
2124 ciph_data_aes_cbc_ ## vect ## _key, \
2125 ciph_data_aes_cbc_ ## vect ## _iv, \
2126 (in_incr), ciph_data_aes_cbc_ ## vect ## _ptx, \
2127 ciph_data_aes_cbc_ ## vect ## _ctx)
2128
2129#define XTEST_CIPH_CASE_AES_CTS(vect, in_incr) \
2130 XTEST_CIPH_CASE(TEE_ALG_AES_CTS, TEE_TYPE_AES, \
2131 ciph_data_aes_cts_ ## vect ## _key, \
2132 ciph_data_aes_cts_ ## vect ## _iv, \
2133 (in_incr), ciph_data_aes_cts_ ## vect ## _ptx, \
2134 ciph_data_aes_cts_ ## vect ## _ctx)
2135
2136static const struct xtest_ciph_case ciph_cases[] = {
2137 /* AES */
2138 XTEST_CIPH_CASE_NO_IV(TEE_ALG_AES_ECB_NOPAD, TEE_TYPE_AES,
2139 ciph_data_aes_key1, 11, ciph_data_in1,
2140 ciph_data_aes_ecb_nopad_out1),
2141 XTEST_CIPH_CASE(TEE_ALG_AES_CBC_NOPAD, TEE_TYPE_AES,
2142 ciph_data_aes_key1, ciph_data_128_iv1, 11,
2143 ciph_data_in1,
2144 ciph_data_aes_cbc_nopad_out1),
2145 XTEST_CIPH_CASE(TEE_ALG_AES_CTR, TEE_TYPE_AES,
2146 ciph_data_aes_key1, ciph_data_128_iv1, 13,
2147 ciph_data_in1,
2148 ciph_data_aes_ctr_out1),
2149 XTEST_CIPH_CASE(TEE_ALG_AES_CTR, TEE_TYPE_AES,
2150 ciph_data_aes_key1, ciph_data_128_iv1, 13,
2151 ciph_data_in3,
2152 ciph_data_aes_ctr_out2),
2153
2154 XTEST_CIPH_CASE_AES_CBC(vect1, 11),
2155
2156 /* AES-CTS */
2157 XTEST_CIPH_CASE_AES_CTS(vect1, 13),
2158 XTEST_CIPH_CASE_AES_CTS(vect2, 14),
2159 XTEST_CIPH_CASE_AES_CTS(vect3, 11),
2160 XTEST_CIPH_CASE_AES_CTS(vect4, 9),
2161 XTEST_CIPH_CASE_AES_CTS(vect5, 7),
2162 XTEST_CIPH_CASE_AES_CTS(vect6, 17),
2163 XTEST_CIPH_CASE_AES_CTS(vect6, 0x20),
2164
2165 /* DES */
2166 XTEST_CIPH_CASE_NO_IV(TEE_ALG_DES_ECB_NOPAD, TEE_TYPE_DES,
2167 ciph_data_des_key1, 14, ciph_data_in1,
2168 ciph_data_des_ecb_nopad_out1),
2169 XTEST_CIPH_CASE_NO_IV(TEE_ALG_DES_ECB_NOPAD, TEE_TYPE_DES,
2170 ciph_data_des_key2, 3, ciph_data_in2,
2171 ciph_data_des_ecb_nopad_out2),
2172 XTEST_CIPH_CASE(TEE_ALG_DES_CBC_NOPAD, TEE_TYPE_DES,
2173 ciph_data_des_key1, ciph_data_64_iv1, 15, ciph_data_in1,
2174 ciph_data_des_cbc_nopad_out1),
2175
2176 /* DES3 */
2177 XTEST_CIPH_CASE_NO_IV(TEE_ALG_DES3_ECB_NOPAD, TEE_TYPE_DES3,
2178 ciph_data_des3_key1, 11, ciph_data_in1,
2179 ciph_data_des3_ecb_nopad_out1),
2180 XTEST_CIPH_CASE_NO_IV(TEE_ALG_DES3_ECB_NOPAD, TEE_TYPE_DES3,
2181 ciph_data_des3_key2, 3, ciph_data_in2,
2182 ciph_data_des_ecb_nopad_out2),
2183 XTEST_CIPH_CASE(TEE_ALG_DES3_CBC_NOPAD, TEE_TYPE_DES3,
2184 ciph_data_des3_key1, ciph_data_64_iv1, 11,
2185 ciph_data_in1,
2186 ciph_data_des3_cbc_nopad_out1),
2187
2188 /* DES2 */
2189 XTEST_CIPH_CASE_NO_IV(TEE_ALG_DES3_ECB_NOPAD, TEE_TYPE_DES3,
2190 ciph_data_des2_key1, 11, ciph_data_in1,
2191 ciph_data_des2_ecb_nopad_out1),
2192 XTEST_CIPH_CASE(TEE_ALG_DES3_CBC_NOPAD, TEE_TYPE_DES3,
2193 ciph_data_des2_key1, ciph_data_64_iv1, 11,
2194 ciph_data_in1,
2195 ciph_data_des2_cbc_nopad_out1),
2196};
2197
2198static const struct xtest_ciph_case ciph_cases_xts[] = {
2199 /* AES-XTS */
2200 XTEST_CIPH_CASE_AES_XTS(vect1, 3),
2201 XTEST_CIPH_CASE_AES_XTS(vect2, 6),
2202 XTEST_CIPH_CASE_AES_XTS(vect3, 7),
2203 XTEST_CIPH_CASE_AES_XTS(vect4, 8),
2204 XTEST_CIPH_CASE_AES_XTS(vect5, 9),
2205 XTEST_CIPH_CASE_AES_XTS(vect6, 13),
2206 XTEST_CIPH_CASE_AES_XTS(vect7, 1),
2207 XTEST_CIPH_CASE_AES_XTS(vect8, 3),
2208 XTEST_CIPH_CASE_AES_XTS(vect9, 2),
2209 XTEST_CIPH_CASE_AES_XTS(vect10, 5),
2210 XTEST_CIPH_CASE_AES_XTS(vect11, 6),
2211 XTEST_CIPH_CASE_AES_XTS(vect12, 7),
2212 XTEST_CIPH_CASE_AES_XTS(vect13, 3),
2213 XTEST_CIPH_CASE_AES_XTS(vect14, 2),
2214 XTEST_CIPH_CASE_AES_XTS(vect15, 0),
2215 XTEST_CIPH_CASE_AES_XTS(vect16, 9),
2216 XTEST_CIPH_CASE_AES_XTS(vect17, 6),
2217 XTEST_CIPH_CASE_AES_XTS(vect18, 8),
2218 XTEST_CIPH_CASE_AES_XTS(vect19, 23),
2219};
2220
2221static void xtest_tee_test_4003_no_xts(ADBG_Case_t *c)
2222{
2223 TEEC_Session session = { 0 };
2224 TEE_OperationHandle op;
2225 TEE_ObjectHandle key1_handle = TEE_HANDLE_NULL;
2226 TEE_ObjectHandle key2_handle = TEE_HANDLE_NULL;
2227 uint8_t out[2048];
2228 size_t out_size;
2229 size_t out_offs;
2230 uint32_t ret_orig;
2231 size_t n;
2232
2233 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2234 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
2235 &ret_orig)))
2236 return;
2237
2238 for (n = 0; n < ARRAY_SIZE(ciph_cases); n++) {
2239 TEE_Attribute key_attr;
2240 size_t key_size;
2241 size_t op_key_size;
2242
2243
2244 Do_ADBG_BeginSubCase(c, "Cipher case %d algo 0x%x line %d",
2245 (int)n, (unsigned int)ciph_cases[n].algo,
2246 (int)ciph_cases[n].line);
2247
2248 key_attr.attributeID = TEE_ATTR_SECRET_VALUE;
2249 key_attr.content.ref.buffer = (void *)ciph_cases[n].key1;
2250 key_attr.content.ref.length = ciph_cases[n].key1_len;
2251
2252 key_size = key_attr.content.ref.length * 8;
2253 if (ciph_cases[n].key_type == TEE_TYPE_DES ||
2254 ciph_cases[n].key_type == TEE_TYPE_DES3)
2255 /* Exclude parity in bit size of key */
2256 key_size -= key_size / 8;
2257
2258 op_key_size = key_size;
2259 if (ciph_cases[n].key2 != NULL)
2260 op_key_size *= 2;
2261
2262 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2263 ta_crypt_cmd_allocate_operation(c, &session, &op,
2264 ciph_cases[n].algo, ciph_cases[n].mode,
2265 op_key_size)))
2266 goto out;
2267
2268 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2269 ta_crypt_cmd_allocate_transient_object(c, &session,
2270 ciph_cases[n].key_type, key_size,
2271 &key1_handle)))
2272 goto out;
2273
2274 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2275 ta_crypt_cmd_populate_transient_object(c, &session,
2276 key1_handle, &key_attr, 1)))
2277 goto out;
2278
2279 if (ciph_cases[n].key2 != NULL) {
2280 key_attr.content.ref.buffer =
2281 (void *)ciph_cases[n].key2;
2282 key_attr.content.ref.length = ciph_cases[n].key2_len;
2283
2284 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2285 ta_crypt_cmd_allocate_transient_object(c,
2286 &session, ciph_cases[n].key_type,
2287 key_attr.content.ref.length * 8,
2288 &key2_handle)))
2289 goto out;
2290
2291 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2292 ta_crypt_cmd_populate_transient_object(c,
2293 &session, key2_handle, &key_attr, 1)))
2294 goto out;
2295
2296 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2297 ta_crypt_cmd_set_operation_key2(c, &session, op,
2298 key1_handle, key2_handle)))
2299 goto out;
2300 } else {
2301 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2302 ta_crypt_cmd_set_operation_key(c, &session, op,
2303 key1_handle)))
2304 goto out;
2305 }
2306
2307 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2308 ta_crypt_cmd_free_transient_object(c, &session,
2309 key1_handle)))
2310 goto out;
2311 key1_handle = TEE_HANDLE_NULL;
2312
2313 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2314 ta_crypt_cmd_free_transient_object(c, &session,
2315 key2_handle)))
2316 goto out;
2317 key2_handle = TEE_HANDLE_NULL;
2318
2319 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2320 ta_crypt_cmd_cipher_init(c, &session, op,
2321 ciph_cases[n].iv, ciph_cases[n].iv_len)))
2322 goto out;
2323
2324 out_offs = 0;
2325 out_size = sizeof(out);
2326 memset(out, 0, sizeof(out));
2327 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2328 ta_crypt_cmd_cipher_update(c, &session, op,
2329 ciph_cases[n].in, ciph_cases[n].in_incr, out,
2330 &out_size)))
2331 goto out;
2332
2333 out_offs += out_size;
2334 out_size = sizeof(out) - out_offs;
2335
2336 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2337 ta_crypt_cmd_cipher_do_final(c, &session, op,
2338 ciph_cases[n].in + ciph_cases[n].in_incr,
2339 ciph_cases[n].in_len - ciph_cases[n].in_incr,
2340 out + out_offs,
2341 &out_size)))
2342 goto out;
2343
2344 out_offs += out_size;
2345
2346 (void)ADBG_EXPECT_BUFFER(c, ciph_cases[n].out,
2347 ciph_cases[n].out_len, out, out_offs);
2348
2349 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2350 ta_crypt_cmd_free_operation(c, &session, op)))
2351 goto out;
2352
2353 Do_ADBG_EndSubCase(c, NULL);
2354 }
2355out:
2356 TEEC_CloseSession(&session);
2357}
2358
2359/*
2360 * This is a split of the original xtest 4003 as eary version of the ST TEE.
2361 *
2362 * Core did not support xts.
2363 */
2364static void xtest_tee_test_4003_xts(ADBG_Case_t *c)
2365{
2366 TEEC_Session session = { 0 };
2367 TEE_OperationHandle op;
2368 TEE_ObjectHandle key1_handle = TEE_HANDLE_NULL;
2369 TEE_ObjectHandle key2_handle = TEE_HANDLE_NULL;
2370 uint8_t out[2048];
2371 size_t out_size;
2372 size_t out_offs;
2373 uint32_t ret_orig;
2374 size_t n;
2375
2376 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2377 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
2378 &ret_orig)))
2379 return;
2380
2381 for (n = 0; n < ARRAY_SIZE(ciph_cases_xts); n++) {
2382 TEE_Attribute key_attr;
2383 size_t key_size;
2384 size_t op_key_size;
2385
2386 Do_ADBG_BeginSubCase(c, "Cipher case %d algo 0x%x line %d",
2387 (int)n,
2388 (unsigned int)ciph_cases_xts[n].algo,
2389 (int)ciph_cases_xts[n].line);
2390
2391 key_attr.attributeID = TEE_ATTR_SECRET_VALUE;
2392 key_attr.content.ref.buffer = (void *)ciph_cases_xts[n].key1;
2393 key_attr.content.ref.length = ciph_cases_xts[n].key1_len;
2394
2395 key_size = key_attr.content.ref.length * 8;
2396 if (ciph_cases_xts[n].key_type == TEE_TYPE_DES ||
2397 ciph_cases_xts[n].key_type == TEE_TYPE_DES3)
2398 /* Exclude parity in bit size of key */
2399 key_size -= key_size / 8;
2400
2401 op_key_size = key_size;
2402 if (ciph_cases_xts[n].key2 != NULL)
2403 op_key_size *= 2;
2404
2405 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2406 ta_crypt_cmd_allocate_operation(c, &session, &op,
2407 ciph_cases_xts[n].algo, ciph_cases_xts[n].mode,
2408 op_key_size)))
2409 goto out;
2410
2411 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2412 ta_crypt_cmd_allocate_transient_object(c, &session,
2413 ciph_cases_xts[n].key_type, key_size,
2414 &key1_handle)))
2415 goto out;
2416
2417 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2418 ta_crypt_cmd_populate_transient_object(c, &session,
2419 key1_handle, &key_attr, 1)))
2420 goto out;
2421
2422 if (ciph_cases_xts[n].key2 != NULL) {
2423 key_attr.content.ref.buffer =
2424 (void *)ciph_cases_xts[n].key2;
2425
2426 key_attr.content.ref.length =
2427 ciph_cases_xts[n].key2_len;
2428
2429 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2430 ta_crypt_cmd_allocate_transient_object(c,
2431 &session, ciph_cases_xts[n].key_type,
2432 key_attr.content.ref.length * 8,
2433 &key2_handle)))
2434 goto out;
2435
2436 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2437 ta_crypt_cmd_populate_transient_object(c,
2438 &session, key2_handle, &key_attr, 1)))
2439 goto out;
2440
2441 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2442 ta_crypt_cmd_set_operation_key2(c, &session, op,
2443 key1_handle, key2_handle)))
2444 goto out;
2445 } else {
2446 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2447 ta_crypt_cmd_set_operation_key(c, &session, op,
2448 key1_handle)))
2449 goto out;
2450 }
2451
2452 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2453 ta_crypt_cmd_free_transient_object(c, &session,
2454 key1_handle)))
2455 goto out;
2456
2457 key1_handle = TEE_HANDLE_NULL;
2458
2459 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2460 ta_crypt_cmd_free_transient_object(c, &session,
2461 key2_handle)))
2462 goto out;
2463
2464 key2_handle = TEE_HANDLE_NULL;
2465
2466 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_cipher_init(c,
2467 &
2468 session,
2469 op,
2470 ciph_cases_xts
2471 [n].iv, ciph_cases_xts[n].iv_len)))
2472 goto out;
2473
2474 out_offs = 0;
2475 out_size = sizeof(out);
2476 memset(out, 0, sizeof(out));
2477 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2478 ta_crypt_cmd_cipher_update(c, &session, op,
2479 ciph_cases_xts[n].in, ciph_cases_xts[n].in_incr,
2480 out, &out_size)))
2481 goto out;
2482
2483 out_offs += out_size;
2484 out_size = sizeof(out) - out_offs;
2485
2486 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2487 ta_crypt_cmd_cipher_do_final(c, &session, op,
2488 ciph_cases_xts[n].in +
2489 ciph_cases_xts[n].in_incr,
2490 ciph_cases_xts[n].in_len -
2491 ciph_cases_xts[n].in_incr,
2492 out + out_offs,
2493 &out_size)))
2494 goto out;
2495 out_offs += out_size;
2496
2497 (void)ADBG_EXPECT_BUFFER(c, ciph_cases_xts[n].out,
2498 ciph_cases_xts[n].out_len, out,
2499 out_offs);
2500
2501 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2502 ta_crypt_cmd_free_operation(c, &session, op)))
2503 goto out;
2504
2505 Do_ADBG_EndSubCase(c, NULL);
2506 }
2507out:
2508 TEEC_CloseSession(&session);
2509}
2510
2511static void xtest_tee_test_4004(ADBG_Case_t *c)
2512{
2513 TEEC_Session session = { 0 };
2514 uint32_t ret_orig;
2515 uint8_t buf1[45] = { 0 };
2516 uint8_t buf2[45] = { 0 };
2517 static const uint8_t zeros[45] = { 0 };
2518
2519 Do_ADBG_BeginSubCase(c, "TEE get random");
2520 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2521 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
2522 &ret_orig)))
2523 return;
2524
2525 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2526 ta_crypt_cmd_random_number_generate(c, &session, buf1,
2527 sizeof(buf1))))
2528 goto out;
2529
2530 (void)ADBG_EXPECT_COMPARE_SIGNED(c,
2531 0, !=, memcmp(buf1, zeros, sizeof(buf1)));
2532
2533 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2534 ta_crypt_cmd_random_number_generate(c, &session, buf2,
2535 sizeof(buf2))))
2536 goto out;
2537
2538 (void)ADBG_EXPECT_COMPARE_SIGNED(c,
2539 0, !=, memcmp(buf2, zeros, sizeof(buf2)));
2540
2541 (void)ADBG_EXPECT_COMPARE_SIGNED(c,
2542 0, !=, memcmp(buf2, buf1, sizeof(buf1)));
2543out:
2544 TEEC_CloseSession(&session);
2545 Do_ADBG_EndSubCase(c, "TEE get random");
2546}
2547
2548
2549struct xtest_ae_case {
2550 uint32_t algo;
2551 uint32_t mode;
2552 uint32_t key_type;
2553 const uint8_t *key;
2554 size_t key_len;
2555 const uint8_t *nonce;
2556 size_t nonce_len;
2557 size_t aad_incr;
2558 const uint8_t *aad;
2559 size_t aad_len;
2560 size_t in_incr;
2561 const uint8_t *ptx;
2562 size_t ptx_len;
2563 const uint8_t *ctx;
2564 size_t ctx_len;
2565 const uint8_t *tag;
2566 size_t tag_len;
2567 size_t line;
2568};
2569
2570
2571#define ARRAY(a) a, ARRAY_SIZE(a)
2572#define NULL_ARRAY(a) NULL, 0
2573
2574#define XTEST_AE_CASE(algo, vect, aad_incr, in_incr, \
2575 aad_array, ptx_array, ctx_array) \
2576 { (algo), TEE_MODE_ENCRYPT, TEE_TYPE_AES, ARRAY(vect ## _key), \
2577 ARRAY(vect ## _nonce), (aad_incr), \
2578 aad_array(vect ## _aad), (in_incr), \
2579 ptx_array(vect ## _ptx), ctx_array(vect ## _ctx), \
2580 ARRAY(vect ## _tag), \
2581 __LINE__ }, \
2582 { (algo), TEE_MODE_DECRYPT, TEE_TYPE_AES, ARRAY(vect ## _key), \
2583 ARRAY(vect ## _nonce), (aad_incr), \
2584 aad_array(vect ## _aad), (in_incr), \
2585 ptx_array(vect ## _ptx), ctx_array(vect ## _ctx), \
2586 ARRAY(vect ## _tag), \
2587 __LINE__ }
2588
2589#define XTEST_AE_CASE_AES_CCM(vect, aad_incr, in_incr) \
2590 XTEST_AE_CASE(TEE_ALG_AES_CCM, ae_data_aes_ccm_ ## vect, aad_incr, \
2591 in_incr, ARRAY, ARRAY, ARRAY)
2592
2593#define XTEST_AE_CASE_AES_GCM(vect, aad_incr, in_incr, \
2594 aad_array, ptx_array, ctx_array) \
2595 XTEST_AE_CASE(TEE_ALG_AES_GCM, ae_data_aes_gcm_ ## vect, aad_incr, \
2596 in_incr, aad_array, ptx_array, ctx_array)
2597
2598
2599
2600static const struct xtest_ae_case ae_cases[] = {
2601 XTEST_AE_CASE_AES_CCM(vect1, 3, 2),
2602 XTEST_AE_CASE_AES_CCM(vect2, 7, 13),
2603 XTEST_AE_CASE_AES_CCM(vect3, 5, 21),
2604
2605 XTEST_AE_CASE_AES_GCM(vect1, 0, 0, NULL_ARRAY, NULL_ARRAY, NULL_ARRAY),
2606 XTEST_AE_CASE_AES_GCM(vect2, 0, 9, NULL_ARRAY, ARRAY, ARRAY),
2607 XTEST_AE_CASE_AES_GCM(vect3, 0, 9, NULL_ARRAY, ARRAY, ARRAY),
2608 XTEST_AE_CASE_AES_GCM(vect3, 0, 0x20, NULL_ARRAY, ARRAY, ARRAY),
2609 XTEST_AE_CASE_AES_GCM(vect4, 5, 9, ARRAY, ARRAY, ARRAY),
2610 XTEST_AE_CASE_AES_GCM(vect5, 5, 9, ARRAY, ARRAY, ARRAY),
2611 XTEST_AE_CASE_AES_GCM(vect6, 5, 9, ARRAY, ARRAY, ARRAY),
2612 XTEST_AE_CASE_AES_GCM(vect7, 0, 0, NULL_ARRAY, NULL_ARRAY, NULL_ARRAY),
2613 XTEST_AE_CASE_AES_GCM(vect8, 0, 9, NULL_ARRAY, ARRAY, ARRAY),
2614 XTEST_AE_CASE_AES_GCM(vect9, 0, 9, NULL_ARRAY, ARRAY, ARRAY),
2615 XTEST_AE_CASE_AES_GCM(vect10, 5, 9, ARRAY, ARRAY, ARRAY),
2616 XTEST_AE_CASE_AES_GCM(vect11, 5, 9, ARRAY, ARRAY, ARRAY),
2617 XTEST_AE_CASE_AES_GCM(vect12, 5, 9, ARRAY, ARRAY, ARRAY),
2618 XTEST_AE_CASE_AES_GCM(vect13, 0, 0, NULL_ARRAY, NULL_ARRAY, NULL_ARRAY),
2619 XTEST_AE_CASE_AES_GCM(vect14, 0, 9, NULL_ARRAY, ARRAY, ARRAY),
2620 XTEST_AE_CASE_AES_GCM(vect15, 0, 9, NULL_ARRAY, ARRAY, ARRAY),
2621 XTEST_AE_CASE_AES_GCM(vect16, 5, 9, ARRAY, ARRAY, ARRAY),
2622 XTEST_AE_CASE_AES_GCM(vect17, 5, 9, ARRAY, ARRAY, ARRAY),
2623 XTEST_AE_CASE_AES_GCM(vect18, 5, 9, ARRAY, ARRAY, ARRAY),
2624};
2625
2626static void xtest_tee_test_4005(ADBG_Case_t *c)
2627{
2628 TEEC_Session session = { 0 };
2629 TEE_OperationHandle op;
2630 TEE_ObjectHandle key_handle = TEE_HANDLE_NULL;
2631 TEE_Attribute key_attr;
2632 uint8_t out[512];
2633 size_t out_size;
2634 size_t out_offs;
2635 uint32_t ret_orig;
2636 size_t n;
2637
2638 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2639 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
2640 &ret_orig)))
2641 return;
2642
2643 for (n = 0; n < ARRAY_SIZE(ae_cases); n++) {
2644 Do_ADBG_BeginSubCase(c, "AE case %d algo 0x%x line %d",
2645 (int)n, (unsigned int)ae_cases[n].algo,
2646 (int)ae_cases[n].line);
2647
2648 key_attr.attributeID = TEE_ATTR_SECRET_VALUE;
2649 key_attr.content.ref.buffer = (void *)ae_cases[n].key;
2650 key_attr.content.ref.length = ae_cases[n].key_len;
2651
2652 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2653 ta_crypt_cmd_allocate_operation(c, &session, &op,
2654 ae_cases[n].algo, ae_cases[n].mode,
2655 key_attr.content.ref.length * 8)))
2656 goto out;
2657
2658 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2659 ta_crypt_cmd_allocate_transient_object(c, &session,
2660 ae_cases[n].key_type,
2661 key_attr.content.ref.length * 8,
2662 &key_handle)))
2663 goto out;
2664
2665 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2666 ta_crypt_cmd_populate_transient_object(c, &session,
2667 key_handle, &key_attr, 1)))
2668 goto out;
2669
2670 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2671 ta_crypt_cmd_set_operation_key(c, &session, op,
2672 key_handle)))
2673 goto out;
2674
2675 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2676 ta_crypt_cmd_free_transient_object(c, &session,
2677 key_handle)))
2678 goto out;
2679 key_handle = TEE_HANDLE_NULL;
2680
2681 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2682 ta_crypt_cmd_ae_init(c, &session, op, ae_cases[n].nonce,
2683 ae_cases[n].nonce_len, ae_cases[n].tag_len,
2684 ae_cases[n].aad_len, ae_cases[n].ptx_len)))
2685 goto out;
2686
2687 if (ae_cases[n].aad != NULL) {
2688 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2689 ta_crypt_cmd_ae_update_aad(c, &session, op,
2690 ae_cases[n].aad, ae_cases[n].aad_incr)))
2691 goto out;
2692
2693 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2694 ta_crypt_cmd_ae_update_aad(c, &session, op,
2695 ae_cases[n].aad + ae_cases[n].aad_incr,
2696 ae_cases [n].aad_len -
2697 ae_cases[n].aad_incr)))
2698 goto out;
2699 }
2700
2701 out_offs = 0;
2702 out_size = sizeof(out);
2703 memset(out, 0, sizeof(out));
2704 if (ae_cases[n].mode == TEE_MODE_ENCRYPT) {
2705 if (ae_cases[n].ptx != NULL) {
2706 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2707 ta_crypt_cmd_ae_update(c, &session, op,
2708 ae_cases[n].ptx,
2709 ae_cases[n].in_incr, out,
2710 &out_size)))
2711 goto out;
2712 out_offs += out_size;
2713 }
2714 } else {
2715 if (ae_cases[n].ctx != NULL) {
2716 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2717 ta_crypt_cmd_ae_update(c, &session, op,
2718 ae_cases[n].ctx,
2719 ae_cases[n].in_incr, out,
2720 &out_size)))
2721 goto out;
2722 out_offs += out_size;
2723 }
2724 }
2725
2726 out_size = sizeof(out) - out_offs;
2727 if (ae_cases[n].mode == TEE_MODE_ENCRYPT) {
2728 uint8_t out_tag[64];
2729 size_t out_tag_len = MIN(sizeof(out_tag),
2730 ae_cases[n].tag_len);
2731
2732 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2733 ta_crypt_cmd_ae_encrypt_final(c, &session, op,
2734 ae_cases[n].ptx + ae_cases[n].in_incr,
2735 ae_cases[n].ptx_len -
2736 ae_cases[n].in_incr,
2737 out + out_offs,
2738 &out_size, out_tag, &out_tag_len)))
2739 goto out;
2740
2741 (void)ADBG_EXPECT_BUFFER(c,
2742 ae_cases[n].tag, ae_cases[n].tag_len, out_tag,
2743 out_tag_len);
2744
2745 out_offs += out_size;
2746
2747 (void)ADBG_EXPECT_BUFFER(c, ae_cases[n].ctx,
2748 ae_cases[n].ctx_len, out, out_offs);
2749 } else {
2750 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2751 ta_crypt_cmd_ae_decrypt_final(c, &session, op,
2752 ae_cases[n].ctx + ae_cases[n].in_incr,
2753 ae_cases[n].ctx_len -
2754 ae_cases[n].in_incr,
2755 out + out_offs,
2756 &out_size, ae_cases[n].tag,
2757 ae_cases[n].tag_len)))
2758 goto out;
2759
2760 out_offs += out_size;
2761
2762 (void)ADBG_EXPECT_BUFFER(c, ae_cases[n].ptx,
2763 ae_cases[n].ptx_len, out, out_offs);
2764 }
2765
2766 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2767 ta_crypt_cmd_free_operation(c, &session, op)))
2768 goto out;
2769
2770 Do_ADBG_EndSubCase(c, NULL);
2771 }
2772out:
2773 TEEC_CloseSession(&session);
2774}
2775
2776struct xtest_ac_case {
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02002777 unsigned int level;
Pascal Brandc639ac82015-07-02 08:53:34 +02002778 uint32_t algo;
2779 TEE_OperationMode mode;
2780
2781 union {
2782 struct {
2783 const uint8_t *modulus;
2784 size_t modulus_len;
2785
2786 const uint8_t *pub_exp;
2787 size_t pub_exp_len;
2788
2789 const uint8_t *priv_exp;
2790 size_t priv_exp_len;
2791
2792 const uint8_t *prime1; /* q */
2793 size_t prime1_len;
2794 const uint8_t *prime2; /* p */
2795 size_t prime2_len;
2796 const uint8_t *exp1; /* dp */
2797 size_t exp1_len;
2798 const uint8_t *exp2; /* dq */
2799 size_t exp2_len;
2800 const uint8_t *coeff; /* iq */
2801 size_t coeff_len;
2802
2803 int salt_len;
2804 } rsa;
2805 struct {
2806 const uint8_t *prime;
2807 size_t prime_len;
2808 const uint8_t *sub_prime;
2809 size_t sub_prime_len;
2810 const uint8_t *base;
2811 size_t base_len;
2812 const uint8_t *pub_val;
2813 size_t pub_val_len;
2814 const uint8_t *priv_val;
2815 size_t priv_val_len;
2816 } dsa;
Pascal Brand3e143ee2015-07-15 17:17:16 +02002817 struct {
2818 const uint8_t *private;
2819 size_t private_len;
2820 const uint8_t *public_x;
2821 size_t public_x_len;
2822 const uint8_t *public_y;
2823 size_t public_y_len;
2824 } ecdsa;
Pascal Brandc639ac82015-07-02 08:53:34 +02002825 } params;
2826
2827 const uint8_t *ptx;
2828 size_t ptx_len;
2829 const uint8_t *ctx;
2830 size_t ctx_len;
2831 size_t line;
2832};
2833
2834#define WITHOUT_SALT(x) -1
2835#define WITH_SALT(x) x
2836
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02002837#define XTEST_AC_CASE(level, algo, mode, vect, union_params) \
2838 { level, (algo), (mode), .params = union_params, \
Pascal Brandc639ac82015-07-02 08:53:34 +02002839 ARRAY(vect ## _ptx), \
2840 ARRAY(vect ## _out), \
2841 __LINE__ }
2842
2843#define XTEST_AC_RSA_UNION(vect, opt_crt_array, opt_salt) \
2844 { .rsa = { \
2845 ARRAY(vect ## _modulus), \
2846 ARRAY(vect ## _pub_exp), \
2847 ARRAY(vect ## _priv_exp), \
2848 opt_crt_array(vect ## _prime1), \
2849 opt_crt_array(vect ## _prime2), \
2850 opt_crt_array(vect ## _exp1), \
2851 opt_crt_array(vect ## _exp2), \
2852 opt_crt_array(vect ## _coeff), \
2853 opt_salt(vect ## _salt_len) \
2854 } }
2855
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002856#define XTEST_AC_RSA_CASE(level, algo, mode, vect, opt_crt_array, opt_salt) \
2857 XTEST_AC_CASE(level, algo, mode, vect, \
Pascal Brandc639ac82015-07-02 08:53:34 +02002858 XTEST_AC_RSA_UNION(vect, opt_crt_array, opt_salt))
2859
2860#define XTEST_AC_DSA_UNION(vect) \
2861 { .dsa = { \
2862 ARRAY(vect ## _prime), \
2863 ARRAY(vect ## _sub_prime), \
2864 ARRAY(vect ## _base), \
2865 ARRAY(vect ## _pub_val), \
2866 ARRAY(vect ## _priv_val), \
2867 } }
2868
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02002869#define XTEST_AC_DSA_CASE(level, algo, mode, vect) \
2870 XTEST_AC_CASE(level, algo, mode, vect, XTEST_AC_DSA_UNION(vect))
Pascal Brandc639ac82015-07-02 08:53:34 +02002871
Pascal Brand3e143ee2015-07-15 17:17:16 +02002872#define XTEST_AC_ECDSA_UNION(vect) \
2873 { .ecdsa = { \
2874 ARRAY(vect ## _private), \
2875 ARRAY(vect ## _public_x), \
2876 ARRAY(vect ## _public_y), \
2877 } }
2878
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02002879#define XTEST_AC_ECDSA_CASE(level, algo, mode, vect) \
2880 XTEST_AC_CASE(level, algo, mode, vect, XTEST_AC_ECDSA_UNION(vect))
Pascal Brand3e143ee2015-07-15 17:17:16 +02002881
Pascal Brandc639ac82015-07-02 08:53:34 +02002882static const struct xtest_ac_case xtest_ac_cases[] = {
2883 /* RSA test without crt parameters */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002884 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002885 ac_rsassa_vect1, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002886 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002887 ac_rsassa_vect1, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002888 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002889 ac_rsassa_vect2, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002890 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002891 ac_rsassa_vect2, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002892 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002893 ac_rsassa_vect3, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002894 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002895 ac_rsassa_vect3, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002896 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002897 ac_rsassa_vect4, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002898 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002899 ac_rsassa_vect4, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002900 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002901 ac_rsassa_vect5, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002902 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002903 ac_rsassa_vect5, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002904 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002905 ac_rsassa_vect6, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002906 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002907 ac_rsassa_vect6, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002908 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002909 ac_rsassa_vect7, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002910 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002911 ac_rsassa_vect7, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002912 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
2913 ac_rsassa_vect8, NULL_ARRAY, WITHOUT_SALT),
2914 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
2915 ac_rsassa_vect8, NULL_ARRAY, WITHOUT_SALT),
Pascal Brandc639ac82015-07-02 08:53:34 +02002916
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002917 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA224, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002918 ac_rsassa_vect16, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002919 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA224, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002920 ac_rsassa_vect16, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002921
2922 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA256, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002923 ac_rsassa_vect9, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002924 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA256, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002925 ac_rsassa_vect9, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002926
2927 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA384, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002928 ac_rsassa_vect10, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002929 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA384, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002930 ac_rsassa_vect10, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002931
2932 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA512, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002933 ac_rsassa_vect11, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002934 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA512, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002935 ac_rsassa_vect11, NULL_ARRAY, WITHOUT_SALT),
2936
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002937 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA1,
2938 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002939 ac_rsassa_vect12, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002940 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002941 ac_rsassa_vect12, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002942
2943 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA224,
2944 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002945 ac_rsassa_vect17, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002946 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA224,
2947 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002948 ac_rsassa_vect17, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002949
2950 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA256,
2951 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002952 ac_rsassa_vect13, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002953 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA256,
2954 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002955 ac_rsassa_vect13, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002956
2957 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA384,
2958 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002959 ac_rsassa_vect14, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002960 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA384,
2961 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002962 ac_rsassa_vect14, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002963
2964 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA512,
2965 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002966 ac_rsassa_vect15, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002967 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA512,
2968 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002969 ac_rsassa_vect15, NULL_ARRAY, WITH_SALT),
2970
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002971 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002972 ac_rsaes_pkcs1_v1_5_vect1, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002973 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002974 ac_rsaes_pkcs1_v1_5_vect1, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002975 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002976 ac_rsaes_pkcs1_v1_5_vect2, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002977 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002978 ac_rsaes_pkcs1_v1_5_vect2, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002979 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002980 ac_rsaes_pkcs1_v1_5_vect15, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002981 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002982 ac_rsaes_pkcs1_v1_5_vect15, NULL_ARRAY, WITHOUT_SALT),
2983
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002984 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
2985 TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002986 ac_rsaes_oaep_vect1, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002987 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
2988 TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002989 ac_rsaes_oaep_vect1, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002990 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
2991 TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002992 ac_rsaes_oaep_vect2, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002993 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
2994 TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002995 ac_rsaes_oaep_vect2, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002996 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
2997 TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002998 ac_rsaes_oaep_vect10, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002999 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3000 TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003001 ac_rsaes_oaep_vect10, NULL_ARRAY, WITHOUT_SALT),
3002
3003 /* RSA test with crt parameters */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003004 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003005 ac_rsassa_vect1, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003006 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003007 ac_rsassa_vect1, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003008 XTEST_AC_RSA_CASE(1, TEE_ALG_RSA_NOPAD, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003009 ac_rsassa_vect2, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003010 XTEST_AC_RSA_CASE(1, TEE_ALG_RSA_NOPAD, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003011 ac_rsassa_vect2, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003012 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003013 ac_rsassa_vect3, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003014 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003015 ac_rsassa_vect3, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003016 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003017 ac_rsassa_vect4, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003018 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003019 ac_rsassa_vect4, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003020 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003021 ac_rsassa_vect5, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003022 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003023 ac_rsassa_vect5, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003024 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003025 ac_rsassa_vect6, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003026 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003027 ac_rsassa_vect6, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003028 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003029 ac_rsassa_vect7, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003030 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003031 ac_rsassa_vect7, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003032 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003033 ac_rsassa_vect8, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003034 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003035 ac_rsassa_vect8, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003036 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA256, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003037 ac_rsassa_vect9, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003038 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA256, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003039 ac_rsassa_vect9, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003040 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA384, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003041 ac_rsassa_vect10, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003042 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA384, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003043 ac_rsassa_vect10, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003044 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA512, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003045 ac_rsassa_vect11, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003046 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA512, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003047 ac_rsassa_vect11, ARRAY, WITHOUT_SALT),
3048
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003049 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA1,
3050 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003051 ac_rsassa_vect12, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003052 XTEST_AC_RSA_CASE(1,TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003053 ac_rsassa_vect12, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003054 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA224,
3055 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003056 ac_rsassa_vect17, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003057 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA224,
3058 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003059 ac_rsassa_vect17, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003060 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA256,
3061 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003062 ac_rsassa_vect13, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003063 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA256,
3064 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003065 ac_rsassa_vect13, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003066 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA384,
3067 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003068 ac_rsassa_vect14, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003069 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA384,
3070 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003071 ac_rsassa_vect14, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003072 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA512,
3073 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003074 ac_rsassa_vect15, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003075 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA512,
3076 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003077 ac_rsassa_vect15, ARRAY, WITH_SALT),
3078
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003079 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003080 ac_rsaes_pkcs1_v1_5_vect1, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003081 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003082 ac_rsaes_pkcs1_v1_5_vect1, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003083 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003084 ac_rsaes_pkcs1_v1_5_vect2, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003085 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003086 ac_rsaes_pkcs1_v1_5_vect2, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003087 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003088 ac_rsaes_pkcs1_v1_5_vect15, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003089 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003090 ac_rsaes_pkcs1_v1_5_vect15, ARRAY, WITHOUT_SALT),
3091
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003092 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3093 TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003094 ac_rsaes_oaep_vect1, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003095 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3096 TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003097 ac_rsaes_oaep_vect1, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003098 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3099 TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003100 ac_rsaes_oaep_vect2, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003101 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3102 TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003103 ac_rsaes_oaep_vect2, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003104 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3105 TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003106 ac_rsaes_oaep_vect10, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003107 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3108 TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003109 ac_rsaes_oaep_vect10, ARRAY, WITHOUT_SALT),
3110
3111 /* DSA tests */
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003112 /* [mod = L=1024, N=160, SHA-1] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003113 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect1),
3114 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect1),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003115 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect2),
3116 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect2),
3117 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect3),
3118 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect3),
3119 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect4),
3120 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect4),
3121 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect5),
3122 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect5),
3123 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect6),
3124 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect6),
3125 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect7),
3126 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect7),
3127 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect8),
3128 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect8),
3129 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect9),
3130 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect9),
3131 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect10),
3132 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect10),
3133 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect11),
3134 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect11),
3135 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect12),
3136 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect12),
3137 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect13),
3138 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect13),
3139 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect14),
3140 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect14),
3141 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect15),
3142 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect15),
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003143 /* [mod = L=1024, N=160, SHA-224] - GP NOT SUPPORTED */
3144 /* [mod = L=1024, N=160, SHA-256] - GP NOT SUPPORTED */
3145 /* [mod = L=1024, N=160, SHA-384] - GP NOT SUPPORTED */
3146 /* [mod = L=1024, N=160, SHA-512] - GP NOT SUPPORTED */
3147 /* [mod = L=2048, N=224, SHA-1] - GP NOT SUPPORTED */
3148 /* [mod = L=2048, N=224, SHA-224] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003149 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect91),
3150 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect91),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003151 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect92),
3152 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect92),
3153 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect93),
3154 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect93),
3155 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect94),
3156 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect94),
3157 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect95),
3158 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect95),
3159 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect96),
3160 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect96),
3161 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect97),
3162 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect97),
3163 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect98),
3164 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect98),
3165 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect99),
3166 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect99),
3167 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect100),
3168 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect100),
3169 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect101),
3170 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect101),
3171 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect102),
3172 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect102),
3173 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect103),
3174 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect103),
3175 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect104),
3176 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect104),
3177 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect105),
3178 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect105),
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003179 /* [mod = L=2048, N=224, SHA-256] */
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003180 XTEST_AC_DSA_CASE(0, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect106),
3181 XTEST_AC_DSA_CASE(0, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect106),
3182 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect107),
3183 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect107),
3184 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect108),
3185 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect108),
3186 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect109),
3187 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect109),
3188 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect110),
3189 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect110),
3190 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect111),
3191 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect111),
3192 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect112),
3193 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect112),
3194 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect113),
3195 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect113),
3196 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect114),
3197 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect114),
3198 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect115),
3199 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect115),
3200 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect116),
3201 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect116),
3202 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect117),
3203 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect117),
3204 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect118),
3205 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect118),
3206 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect119),
3207 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect119),
3208 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect120),
3209 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect120),
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003210 /* [mod = L=2048, N=224, SHA-384] - GP NOT SUPPORTED */
3211 /* [mod = L=2048, N=224, SHA-512] - GP NOT SUPPORTED */
3212 /* [mod = L=2048, N=256, SHA-1] - GP NOT SUPPORTED */
3213 /* [mod = L=2048, N=256, SHA-224] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003214 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect166),
3215 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect166),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003216 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect167),
3217 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect167),
3218 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect168),
3219 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect168),
3220 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect169),
3221 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect169),
3222 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect170),
3223 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect170),
3224 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect171),
3225 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect171),
3226 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect172),
3227 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect172),
3228 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect173),
3229 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect173),
3230 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect174),
3231 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect174),
3232 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect175),
3233 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect175),
3234 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect176),
3235 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect176),
3236 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect177),
3237 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect177),
3238 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect178),
3239 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect178),
3240 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect179),
3241 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect179),
3242 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect180),
3243 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect180),
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003244 /* [mod = L=2048, N=256, SHA-256] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003245 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect181),
3246 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect181),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003247 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect182),
3248 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect182),
3249 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect183),
3250 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect183),
3251 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect184),
3252 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect184),
3253 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect185),
3254 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect185),
3255 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect186),
3256 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect186),
3257 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect187),
3258 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect187),
3259 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect188),
3260 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect188),
3261 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect189),
3262 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect189),
3263 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect190),
3264 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect190),
3265 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect191),
3266 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect191),
3267 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect192),
3268 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect192),
3269 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect193),
3270 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect193),
3271 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect194),
3272 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect194),
3273 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect195),
3274 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect195),
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003275 /* [mod = L=2048, N=256, SHA-384] - GP NOT SUPPORTED */
3276 /* [mod = L=2048, N=256, SHA-512] - GP NOT SUPPORTED */
3277 /* [mod = L=3072, N=256, SHA-1] - GP NOT SUPPORTED */
3278 /* [mod = L=3072, N=256, SHA-224] - GP NOT SUPPORTED */
3279 /* [mod = L=3072, N=256, SHA-256] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003280 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect256),
3281 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect256),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003282 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect257),
3283 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect257),
3284 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect258),
3285 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect258),
3286 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect259),
3287 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect259),
3288 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect260),
3289 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect260),
3290 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect261),
3291 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect261),
3292 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect262),
3293 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect262),
3294 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect263),
3295 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect263),
3296 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect264),
3297 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect264),
3298 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect265),
3299 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect265),
3300 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect266),
3301 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect266),
3302 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect267),
3303 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect267),
3304 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect268),
3305 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect268),
3306 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect269),
3307 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect269),
3308 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect270),
3309 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect270),
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003310 /* [mod = L=3072, N=256, SHA-384] - GP NOT SUPPORTED */
3311 /* [mod = L=3072, N=256, SHA-512] - GP NOT SUPPORTED */
Pascal Brand3e143ee2015-07-15 17:17:16 +02003312
3313 /* ECDSA tests */
Cedric Chaumontc7654962015-09-09 14:56:36 +02003314 /* [P-192] */
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003315 XTEST_AC_ECDSA_CASE(0, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003316 nist_186_2_ecdsa_testvector_1),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003317 XTEST_AC_ECDSA_CASE(0, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003318 nist_186_2_ecdsa_testvector_1),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003319 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003320 nist_186_2_ecdsa_testvector_2),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003321 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003322 nist_186_2_ecdsa_testvector_2),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003323 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003324 nist_186_2_ecdsa_testvector_3),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003325 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003326 nist_186_2_ecdsa_testvector_3),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003327 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003328 nist_186_2_ecdsa_testvector_4),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003329 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003330 nist_186_2_ecdsa_testvector_4),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003331 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003332 nist_186_2_ecdsa_testvector_5),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003333 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003334 nist_186_2_ecdsa_testvector_5),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003335 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003336 nist_186_2_ecdsa_testvector_6),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003337 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003338 nist_186_2_ecdsa_testvector_6),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003339 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003340 nist_186_2_ecdsa_testvector_7),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003341 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003342 nist_186_2_ecdsa_testvector_7),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003343 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003344 nist_186_2_ecdsa_testvector_8),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003345 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003346 nist_186_2_ecdsa_testvector_8),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003347 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003348 nist_186_2_ecdsa_testvector_9),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003349 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003350 nist_186_2_ecdsa_testvector_9),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003351 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003352 nist_186_2_ecdsa_testvector_10),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003353 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003354 nist_186_2_ecdsa_testvector_10),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003355 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003356 nist_186_2_ecdsa_testvector_11),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003357 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003358 nist_186_2_ecdsa_testvector_11),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003359 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003360 nist_186_2_ecdsa_testvector_12),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003361 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003362 nist_186_2_ecdsa_testvector_12),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003363 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003364 nist_186_2_ecdsa_testvector_13),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003365 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003366 nist_186_2_ecdsa_testvector_13),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003367 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003368 nist_186_2_ecdsa_testvector_14),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003369 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003370 nist_186_2_ecdsa_testvector_14),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003371 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003372 nist_186_2_ecdsa_testvector_15),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003373 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003374 nist_186_2_ecdsa_testvector_15),
3375 /* [P-224] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003376 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003377 nist_186_2_ecdsa_testvector_16),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003378 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003379 nist_186_2_ecdsa_testvector_16),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003380 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003381 nist_186_2_ecdsa_testvector_17),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003382 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003383 nist_186_2_ecdsa_testvector_17),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003384 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003385 nist_186_2_ecdsa_testvector_18),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003386 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003387 nist_186_2_ecdsa_testvector_18),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003388 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003389 nist_186_2_ecdsa_testvector_19),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003390 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003391 nist_186_2_ecdsa_testvector_19),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003392 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003393 nist_186_2_ecdsa_testvector_20),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003394 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003395 nist_186_2_ecdsa_testvector_20),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003396 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003397 nist_186_2_ecdsa_testvector_21),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003398 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003399 nist_186_2_ecdsa_testvector_21),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003400 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003401 nist_186_2_ecdsa_testvector_22),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003402 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003403 nist_186_2_ecdsa_testvector_22),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003404 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003405 nist_186_2_ecdsa_testvector_23),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003406 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003407 nist_186_2_ecdsa_testvector_23),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003408 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003409 nist_186_2_ecdsa_testvector_24),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003410 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003411 nist_186_2_ecdsa_testvector_24),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003412 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003413 nist_186_2_ecdsa_testvector_25),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003414 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003415 nist_186_2_ecdsa_testvector_25),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003416 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003417 nist_186_2_ecdsa_testvector_26),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003418 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003419 nist_186_2_ecdsa_testvector_26),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003420 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003421 nist_186_2_ecdsa_testvector_27),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003422 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003423 nist_186_2_ecdsa_testvector_27),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003424 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003425 nist_186_2_ecdsa_testvector_28),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003426 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003427 nist_186_2_ecdsa_testvector_28),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003428 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003429 nist_186_2_ecdsa_testvector_29),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003430 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003431 nist_186_2_ecdsa_testvector_29),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003432 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003433 nist_186_2_ecdsa_testvector_30),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003434 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003435 nist_186_2_ecdsa_testvector_30),
3436 /* [P-256] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003437 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003438 nist_186_2_ecdsa_testvector_31),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003439 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003440 nist_186_2_ecdsa_testvector_31),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003441 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003442 nist_186_2_ecdsa_testvector_32),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003443 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003444 nist_186_2_ecdsa_testvector_32),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003445 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003446 nist_186_2_ecdsa_testvector_33),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003447 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003448 nist_186_2_ecdsa_testvector_33),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003449 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003450 nist_186_2_ecdsa_testvector_34),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003451 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003452 nist_186_2_ecdsa_testvector_34),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003453 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003454 nist_186_2_ecdsa_testvector_35),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003455 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003456 nist_186_2_ecdsa_testvector_35),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003457 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003458 nist_186_2_ecdsa_testvector_36),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003459 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003460 nist_186_2_ecdsa_testvector_36),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003461 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003462 nist_186_2_ecdsa_testvector_37),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003463 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003464 nist_186_2_ecdsa_testvector_37),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003465 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003466 nist_186_2_ecdsa_testvector_38),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003467 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003468 nist_186_2_ecdsa_testvector_38),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003469 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003470 nist_186_2_ecdsa_testvector_39),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003471 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003472 nist_186_2_ecdsa_testvector_39),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003473 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003474 nist_186_2_ecdsa_testvector_40),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003475 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003476 nist_186_2_ecdsa_testvector_40),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003477 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003478 nist_186_2_ecdsa_testvector_41),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003479 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003480 nist_186_2_ecdsa_testvector_41),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003481 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003482 nist_186_2_ecdsa_testvector_42),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003483 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003484 nist_186_2_ecdsa_testvector_42),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003485 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003486 nist_186_2_ecdsa_testvector_43),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003487 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003488 nist_186_2_ecdsa_testvector_43),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003489 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003490 nist_186_2_ecdsa_testvector_44),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003491 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003492 nist_186_2_ecdsa_testvector_44),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003493 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003494 nist_186_2_ecdsa_testvector_45),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003495 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003496 nist_186_2_ecdsa_testvector_45),
3497 /* [P-384] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003498 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003499 nist_186_2_ecdsa_testvector_46),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003500 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003501 nist_186_2_ecdsa_testvector_46),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003502 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003503 nist_186_2_ecdsa_testvector_47),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003504 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003505 nist_186_2_ecdsa_testvector_47),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003506 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003507 nist_186_2_ecdsa_testvector_48),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003508 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003509 nist_186_2_ecdsa_testvector_48),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003510 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003511 nist_186_2_ecdsa_testvector_49),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003512 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003513 nist_186_2_ecdsa_testvector_49),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003514 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003515 nist_186_2_ecdsa_testvector_50),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003516 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003517 nist_186_2_ecdsa_testvector_50),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003518 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003519 nist_186_2_ecdsa_testvector_51),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003520 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003521 nist_186_2_ecdsa_testvector_51),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003522 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003523 nist_186_2_ecdsa_testvector_52),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003524 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003525 nist_186_2_ecdsa_testvector_52),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003526 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003527 nist_186_2_ecdsa_testvector_53),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003528 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003529 nist_186_2_ecdsa_testvector_53),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003530 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003531 nist_186_2_ecdsa_testvector_54),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003532 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003533 nist_186_2_ecdsa_testvector_54),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003534 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003535 nist_186_2_ecdsa_testvector_55),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003536 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003537 nist_186_2_ecdsa_testvector_55),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003538 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003539 nist_186_2_ecdsa_testvector_56),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003540 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003541 nist_186_2_ecdsa_testvector_56),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003542 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003543 nist_186_2_ecdsa_testvector_57),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003544 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003545 nist_186_2_ecdsa_testvector_57),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003546 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003547 nist_186_2_ecdsa_testvector_58),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003548 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003549 nist_186_2_ecdsa_testvector_58),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003550 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003551 nist_186_2_ecdsa_testvector_59),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003552 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003553 nist_186_2_ecdsa_testvector_59),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003554 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003555 nist_186_2_ecdsa_testvector_60),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003556 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003557 nist_186_2_ecdsa_testvector_60),
3558 /* [P-521] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003559 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003560 nist_186_2_ecdsa_testvector_61),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003561 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003562 nist_186_2_ecdsa_testvector_61),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003563 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003564 nist_186_2_ecdsa_testvector_62),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003565 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003566 nist_186_2_ecdsa_testvector_62),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003567 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003568 nist_186_2_ecdsa_testvector_63),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003569 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003570 nist_186_2_ecdsa_testvector_63),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003571 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003572 nist_186_2_ecdsa_testvector_64),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003573 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003574 nist_186_2_ecdsa_testvector_64),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003575 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003576 nist_186_2_ecdsa_testvector_65),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003577 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003578 nist_186_2_ecdsa_testvector_65),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003579 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003580 nist_186_2_ecdsa_testvector_66),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003581 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003582 nist_186_2_ecdsa_testvector_66),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003583 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003584 nist_186_2_ecdsa_testvector_67),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003585 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003586 nist_186_2_ecdsa_testvector_67),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003587 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003588 nist_186_2_ecdsa_testvector_68),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003589 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003590 nist_186_2_ecdsa_testvector_68),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003591 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003592 nist_186_2_ecdsa_testvector_69),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003593 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003594 nist_186_2_ecdsa_testvector_69),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003595 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003596 nist_186_2_ecdsa_testvector_70),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003597 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003598 nist_186_2_ecdsa_testvector_70),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003599 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003600 nist_186_2_ecdsa_testvector_71),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003601 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003602 nist_186_2_ecdsa_testvector_71),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003603 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003604 nist_186_2_ecdsa_testvector_72),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003605 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003606 nist_186_2_ecdsa_testvector_72),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003607 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003608 nist_186_2_ecdsa_testvector_73),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003609 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003610 nist_186_2_ecdsa_testvector_73),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003611 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003612 nist_186_2_ecdsa_testvector_74),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003613 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003614 nist_186_2_ecdsa_testvector_74),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003615 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003616 nist_186_2_ecdsa_testvector_75),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003617 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003618 nist_186_2_ecdsa_testvector_75),
3619 /* [K-163] - GP NOT SUPPORTED */
3620 /* [K-233] - GP NOT SUPPORTED */
3621 /* [K-283] - GP NOT SUPPORTED */
3622 /* [K-409] - GP NOT SUPPORTED */
3623 /* [K-571] - GP NOT SUPPORTED */
3624 /* [B-163] - GP NOT SUPPORTED */
3625 /* [B-233] - GP NOT SUPPORTED */
3626 /* [B-283] - GP NOT SUPPORTED */
3627 /* [B-409] - GP NOT SUPPORTED */
3628 /* [B-571] - GP NOT SUPPORTED */
Pascal Brandc639ac82015-07-02 08:53:34 +02003629};
3630
3631static bool create_key(ADBG_Case_t *c, TEEC_Session *s,
3632 uint32_t max_key_size, uint32_t key_type,
3633 TEE_Attribute *attrs, size_t num_attrs,
3634 TEE_ObjectHandle *handle)
3635{
3636 size_t n;
3637
3638 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3639 ta_crypt_cmd_allocate_transient_object(c, s, key_type,
3640 max_key_size, handle)))
3641 return false;
3642
3643 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3644 ta_crypt_cmd_populate_transient_object(c, s, *handle, attrs,
3645 num_attrs)))
3646 return false;
3647
3648 for (n = 0; n < num_attrs; n++) {
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003649 uint8_t out[384];
Pascal Brandc639ac82015-07-02 08:53:34 +02003650 size_t out_size;
3651
3652 out_size = sizeof(out);
3653 memset(out, 0, sizeof(out));
Pascal Brand3e143ee2015-07-15 17:17:16 +02003654
3655 if (attrs[n].attributeID == TEE_ATTR_ECC_CURVE)
3656 continue;
3657
Pascal Brandc639ac82015-07-02 08:53:34 +02003658 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3659 ta_crypt_cmd_get_object_buffer_attribute(c, s, *handle,
3660 attrs[n].attributeID, out, &out_size)))
3661 return false;
3662
Pascal Brand3e143ee2015-07-15 17:17:16 +02003663 if (out_size < attrs[n].content.ref.length) {
3664 memmove(out + (attrs[n].content.ref.length - out_size),
3665 out,
3666 attrs[n].content.ref.length);
3667 memset(out, 0, attrs[n].content.ref.length - out_size);
3668 out_size = attrs[n].content.ref.length;
3669 }
3670
Pascal Brandc639ac82015-07-02 08:53:34 +02003671 if (!ADBG_EXPECT_BUFFER(c, attrs[n].content.ref.buffer,
3672 attrs[n].content.ref.length, out, out_size))
3673 return false;
3674 }
3675
3676 return true;
3677}
3678
3679static void xtest_tee_test_4006(ADBG_Case_t *c)
3680{
3681 TEEC_Session session = { 0 };
3682 TEE_OperationHandle op = TEE_HANDLE_NULL;
3683 TEE_ObjectHandle priv_key_handle = TEE_HANDLE_NULL;
3684 TEE_ObjectHandle pub_key_handle = TEE_HANDLE_NULL;
3685 TEE_Attribute key_attrs[8];
3686 TEE_Attribute algo_params[1];
3687 size_t num_algo_params;
3688 uint8_t out[512];
3689 size_t out_size;
3690 uint8_t out_enc[512];
3691 size_t out_enc_size;
3692 uint8_t ptx_hash[TEE_MAX_HASH_SIZE];
3693 size_t ptx_hash_size;
3694 size_t max_key_size;
3695 size_t num_key_attrs;
3696 uint32_t ret_orig;
3697 size_t n;
Pascal Brand3e143ee2015-07-15 17:17:16 +02003698 uint32_t curve;
3699 uint32_t hash_algo;
Pascal Brandc639ac82015-07-02 08:53:34 +02003700
3701 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3702 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
3703 &ret_orig)))
3704 return;
3705
3706 for (n = 0; n < ARRAY_SIZE(xtest_ac_cases); n++) {
3707 const struct xtest_ac_case *tv = xtest_ac_cases + n;
3708
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003709 if (tv->level > level)
3710 continue;
3711
Pascal Brandc639ac82015-07-02 08:53:34 +02003712 Do_ADBG_BeginSubCase(c, "Asym Crypto case %d algo 0x%x line %d",
3713 (int)n, (unsigned int)tv->algo,
3714 (int)tv->line);
3715
3716 /*
3717 * When signing or verifying we're working with the hash of
3718 * the payload.
3719 */
3720 if (tv->mode == TEE_MODE_VERIFY || tv->mode == TEE_MODE_SIGN) {
Pascal Brand3e143ee2015-07-15 17:17:16 +02003721 if (TEE_ALG_GET_MAIN_ALG(tv->algo) == TEE_MAIN_ALGO_ECDSA)
3722 hash_algo = TEE_ALG_SHA1;
3723 else
3724 hash_algo = TEE_ALG_HASH_ALGO(
3725 TEE_ALG_GET_DIGEST_HASH(tv->algo));
Pascal Brandc639ac82015-07-02 08:53:34 +02003726
3727 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3728 ta_crypt_cmd_allocate_operation(c, &session,
3729 &op, hash_algo, TEE_MODE_DIGEST, 0)))
3730 goto out;
3731
3732 ptx_hash_size = sizeof(ptx_hash);
3733 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3734 ta_crypt_cmd_digest_do_final(c, & session, op,
3735 tv->ptx, tv->ptx_len, ptx_hash,
3736 &ptx_hash_size)))
3737 goto out;
3738
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003739 /*
3740 * When we use DSA algorithms, the size of the hash we
3741 * consider equals the min between the size of the
3742 * "subprime" in the key and the size of the hash
3743 */
3744 if (TEE_ALG_GET_MAIN_ALG(tv->algo) ==
3745 TEE_MAIN_ALGO_DSA) {
3746 if (tv->params.dsa.sub_prime_len <=
3747 ptx_hash_size)
3748 ptx_hash_size =
3749 tv->params.dsa.sub_prime_len;
3750 }
3751
Pascal Brandc639ac82015-07-02 08:53:34 +02003752 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3753 ta_crypt_cmd_free_operation(c, &session, op)))
3754 goto out;
3755 }
3756
3757 num_algo_params = 0;
3758 num_key_attrs = 0;
3759 switch (TEE_ALG_GET_MAIN_ALG(tv->algo)) {
3760 case TEE_MAIN_ALGO_RSA:
3761 if (tv->params.rsa.salt_len > 0) {
3762 algo_params[0].attributeID =
3763 TEE_ATTR_RSA_PSS_SALT_LENGTH;
3764 algo_params[0].content.value.a =
3765 tv->params.rsa.salt_len;
3766 algo_params[0].content.value.b = 0;
3767 num_algo_params = 1;
3768 }
3769
3770 max_key_size = tv->params.rsa.modulus_len * 8;
3771
3772 xtest_add_attr(&num_key_attrs, key_attrs,
3773 TEE_ATTR_RSA_MODULUS,
3774 tv->params.rsa.modulus,
3775 tv->params.rsa.modulus_len);
3776 xtest_add_attr(&num_key_attrs, key_attrs,
3777 TEE_ATTR_RSA_PUBLIC_EXPONENT,
3778 tv->params.rsa.pub_exp,
3779 tv->params.rsa.pub_exp_len);
3780
3781 if (!ADBG_EXPECT_TRUE(c,
3782 create_key(c, &session,
3783 max_key_size,
3784 TEE_TYPE_RSA_PUBLIC_KEY,
3785 key_attrs,
3786 num_key_attrs,
3787 &pub_key_handle)))
3788 goto out;
3789
3790 xtest_add_attr(&num_key_attrs, key_attrs,
3791 TEE_ATTR_RSA_PRIVATE_EXPONENT,
3792 tv->params.rsa.priv_exp,
3793 tv->params.rsa.priv_exp_len);
3794
3795 if (tv->params.rsa.prime1_len != 0) {
3796 xtest_add_attr(&num_key_attrs, key_attrs,
3797 TEE_ATTR_RSA_PRIME1,
3798 tv->params.rsa.prime1,
3799 tv->params.rsa.prime1_len);
3800 }
3801
3802 if (tv->params.rsa.prime2_len != 0) {
3803 xtest_add_attr(&num_key_attrs, key_attrs,
3804 TEE_ATTR_RSA_PRIME2,
3805 tv->params.rsa.prime2,
3806 tv->params.rsa.prime2_len);
3807 }
3808
3809 if (tv->params.rsa.exp1_len != 0) {
3810 xtest_add_attr(&num_key_attrs, key_attrs,
3811 TEE_ATTR_RSA_EXPONENT1,
3812 tv->params.rsa.exp1,
3813 tv->params.rsa.exp1_len);
3814 }
3815
3816 if (tv->params.rsa.exp2_len != 0) {
3817 xtest_add_attr(&num_key_attrs, key_attrs,
3818 TEE_ATTR_RSA_EXPONENT2,
3819 tv->params.rsa.exp2,
3820 tv->params.rsa.exp2_len);
3821 }
3822
3823 if (tv->params.rsa.coeff_len != 0) {
3824 xtest_add_attr(&num_key_attrs, key_attrs,
3825 TEE_ATTR_RSA_COEFFICIENT,
3826 tv->params.rsa.coeff,
3827 tv->params.rsa.coeff_len);
3828 }
3829
3830 if (!ADBG_EXPECT_TRUE(c,
3831 create_key(c, &session,
3832 max_key_size,
3833 TEE_TYPE_RSA_KEYPAIR,
3834 key_attrs,
3835 num_key_attrs,
3836 &priv_key_handle)))
3837 goto out;
3838 break;
3839
3840 case TEE_MAIN_ALGO_DSA:
3841 max_key_size = tv->params.dsa.prime_len * 8;
3842
3843 xtest_add_attr(&num_key_attrs, key_attrs,
3844 TEE_ATTR_DSA_PRIME,
3845 tv->params.dsa.prime,
3846 tv->params.dsa.prime_len);
3847 xtest_add_attr(&num_key_attrs, key_attrs,
3848 TEE_ATTR_DSA_SUBPRIME,
3849 tv->params.dsa.sub_prime,
3850 tv->params.dsa.sub_prime_len);
3851 xtest_add_attr(&num_key_attrs, key_attrs,
3852 TEE_ATTR_DSA_BASE,
3853 tv->params.dsa.base,
3854 tv->params.dsa.base_len);
3855 xtest_add_attr(&num_key_attrs, key_attrs,
3856 TEE_ATTR_DSA_PUBLIC_VALUE,
3857 tv->params.dsa.pub_val,
3858 tv->params.dsa.pub_val_len);
3859
3860 if (!ADBG_EXPECT_TRUE(c,
3861 create_key(c, &session, max_key_size,
3862 TEE_TYPE_DSA_PUBLIC_KEY, key_attrs,
3863 num_key_attrs, &pub_key_handle)))
3864 goto out;
3865
3866 xtest_add_attr(&num_key_attrs, key_attrs,
3867 TEE_ATTR_DSA_PRIVATE_VALUE,
3868 tv->params.dsa.priv_val,
3869 tv->params.dsa.priv_val_len);
3870
3871 if (!ADBG_EXPECT_TRUE(c,
3872 create_key(c, &session, max_key_size,
3873 TEE_TYPE_DSA_KEYPAIR, key_attrs,
3874 num_key_attrs, &priv_key_handle)))
3875 goto out;
3876 break;
3877
Pascal Brand3e143ee2015-07-15 17:17:16 +02003878 case TEE_MAIN_ALGO_ECDSA:
3879 switch (tv->algo) {
3880 case TEE_ALG_ECDSA_P192:
3881 curve = TEE_ECC_CURVE_NIST_P192;
3882 break;
3883 case TEE_ALG_ECDSA_P224:
3884 curve = TEE_ECC_CURVE_NIST_P224;
3885 break;
3886 case TEE_ALG_ECDSA_P256:
3887 curve = TEE_ECC_CURVE_NIST_P256;
3888 break;
3889 case TEE_ALG_ECDSA_P384:
3890 curve = TEE_ECC_CURVE_NIST_P384;
3891 break;
3892 case TEE_ALG_ECDSA_P521:
3893 curve = TEE_ECC_CURVE_NIST_P521;
3894 break;
3895 default:
3896 curve = 0xFF;
3897 break;
3898 }
3899
3900 if (tv->algo == TEE_ALG_ECDSA_P521)
3901 max_key_size = 521;
3902 else
3903 max_key_size = tv->params.ecdsa.private_len * 8;
3904
3905 xtest_add_attr_value(&num_key_attrs, key_attrs,
3906 TEE_ATTR_ECC_CURVE, curve, 0);
3907 xtest_add_attr(&num_key_attrs, key_attrs,
3908 TEE_ATTR_ECC_PUBLIC_VALUE_X,
3909 tv->params.ecdsa.public_x,
3910 tv->params.ecdsa.public_x_len);
3911 xtest_add_attr(&num_key_attrs, key_attrs,
3912 TEE_ATTR_ECC_PUBLIC_VALUE_Y,
3913 tv->params.ecdsa.public_y,
3914 tv->params.ecdsa.public_y_len);
3915
3916 if (!ADBG_EXPECT_TRUE(c,
3917 create_key(c, &session, max_key_size,
3918 TEE_TYPE_ECDSA_PUBLIC_KEY, key_attrs,
3919 num_key_attrs, &pub_key_handle)))
3920 goto out;
3921
3922 xtest_add_attr(&num_key_attrs, key_attrs,
3923 TEE_ATTR_ECC_PRIVATE_VALUE,
3924 tv->params.ecdsa.private,
3925 tv->params.ecdsa.private_len);
3926
3927 if (!ADBG_EXPECT_TRUE(c,
3928 create_key(c, &session, max_key_size,
3929 TEE_TYPE_ECDSA_KEYPAIR, key_attrs,
3930 num_key_attrs, &priv_key_handle)))
3931 goto out;
3932 break;
3933
Pascal Brandc639ac82015-07-02 08:53:34 +02003934 default:
3935 ADBG_EXPECT_TRUE(c, false);
3936 goto out;
3937 }
3938
3939 out_size = sizeof(out);
3940 memset(out, 0, sizeof(out));
3941 switch (tv->mode) {
3942 case TEE_MODE_ENCRYPT:
3943 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3944 ta_crypt_cmd_allocate_operation(c, &session,
Pascal Brand3e143ee2015-07-15 17:17:16 +02003945 &op, tv->algo, TEE_MODE_ENCRYPT,
3946 max_key_size)))
Pascal Brandc639ac82015-07-02 08:53:34 +02003947 goto out;
3948
3949 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3950 ta_crypt_cmd_set_operation_key(c, &session, op,
3951 pub_key_handle)))
3952 goto out;
3953
3954 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3955 ta_crypt_cmd_free_transient_object(c, &session,
3956 pub_key_handle)))
3957 goto out;
3958 pub_key_handle = TEE_HANDLE_NULL;
3959
3960 out_enc_size = sizeof(out_enc);
3961 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3962 ta_crypt_cmd_asymmetric_encrypt(c, &session, op,
3963 NULL, 0, tv->ptx, tv->ptx_len, out_enc,
3964 &out_enc_size)))
3965 goto out;
3966
3967 /*
3968 * A PS which is random is added when formatting the
3969 * message internally of the algorithm so we can't
3970 * verify against precomputed values, instead we use the
3971 * decrypt operation to see that output is correct.
3972 */
3973
3974 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3975 ta_crypt_cmd_free_operation(c, &session, op)))
3976 goto out;
3977
3978 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3979 ta_crypt_cmd_allocate_operation(c, &session,
3980 &op, tv->algo, TEE_MODE_DECRYPT,
3981 max_key_size)))
3982 goto out;
3983
3984 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3985 ta_crypt_cmd_set_operation_key(c, &session, op,
3986 priv_key_handle)))
3987 goto out;
3988
3989 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3990 ta_crypt_cmd_free_transient_object(c, &session,
3991 priv_key_handle)))
3992 goto out;
3993
3994 priv_key_handle = TEE_HANDLE_NULL;
3995
3996 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3997 ta_crypt_cmd_asymmetric_decrypt(c, &session, op,
3998 NULL, 0, out_enc, out_enc_size, out,
3999 &out_size)))
4000 goto out;
4001
4002 (void)ADBG_EXPECT_BUFFER(c, tv->ptx, tv->ptx_len, out,
4003 out_size);
4004 break;
4005
4006 case TEE_MODE_DECRYPT:
4007 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4008 ta_crypt_cmd_allocate_operation(c, &session,
4009 &op, tv->algo, TEE_MODE_DECRYPT,
4010 max_key_size)))
4011 goto out;
4012
4013 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4014 ta_crypt_cmd_set_operation_key(c, &session, op,
4015 priv_key_handle)))
4016 goto out;
4017
4018 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4019 ta_crypt_cmd_free_transient_object(c, &session,
4020 priv_key_handle)))
4021 goto out;
4022
4023 priv_key_handle = TEE_HANDLE_NULL;
4024
4025 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4026 ta_crypt_cmd_asymmetric_decrypt(c, &session, op,
4027 NULL, 0, tv->ctx, tv->ctx_len, out,
4028 &out_size)))
4029 goto out;
4030
4031 (void)ADBG_EXPECT_BUFFER(c, tv->ptx, tv->ptx_len, out,
4032 out_size);
4033 break;
4034
4035 case TEE_MODE_VERIFY:
4036 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4037 ta_crypt_cmd_allocate_operation(c, &session,
4038 &op, tv->algo, TEE_MODE_VERIFY,
4039 max_key_size)))
4040 goto out;
4041
4042 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4043 ta_crypt_cmd_set_operation_key(c, &session, op,
4044 pub_key_handle)))
4045 goto out;
4046
4047 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4048 ta_crypt_cmd_free_transient_object(c, &session,
4049 pub_key_handle)))
4050 goto out;
4051
4052 pub_key_handle = TEE_HANDLE_NULL;
4053
4054 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4055 ta_crypt_cmd_asymmetric_verify(c, &session, op,
4056 algo_params, num_algo_params, ptx_hash,
4057 ptx_hash_size, tv->ctx, tv->ctx_len)))
4058 goto out;
4059 break;
4060
4061 case TEE_MODE_SIGN:
4062 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4063 ta_crypt_cmd_allocate_operation(c, &session,
4064 &op, tv->algo, TEE_MODE_SIGN,
4065 max_key_size)))
4066 goto out;
4067
4068 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4069 ta_crypt_cmd_set_operation_key(c, &session, op,
4070 priv_key_handle)))
4071 goto out;
4072
4073 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4074 ta_crypt_cmd_free_transient_object(c, &session,
4075 priv_key_handle)))
4076 goto out;
4077
4078 priv_key_handle = TEE_HANDLE_NULL;
4079
4080 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4081 ta_crypt_cmd_asymmetric_sign(c, &session, op,
4082 algo_params, num_algo_params, ptx_hash,
4083 ptx_hash_size, out, &out_size)))
4084 goto out;
4085
4086 if (TEE_ALG_GET_CHAIN_MODE(tv->algo) ==
4087 TEE_CHAIN_MODE_PKCS1_PSS_MGF1 ||
Pascal Brand3e143ee2015-07-15 17:17:16 +02004088 tv->algo == TEE_ALG_DSA_SHA1 ||
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02004089 tv->algo == TEE_ALG_DSA_SHA224 ||
4090 tv->algo == TEE_ALG_DSA_SHA256 ||
Pascal Brand3e143ee2015-07-15 17:17:16 +02004091 TEE_ALG_GET_MAIN_ALG(tv->algo) ==
4092 TEE_MAIN_ALGO_ECDSA) {
Pascal Brandc639ac82015-07-02 08:53:34 +02004093 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4094 ta_crypt_cmd_free_operation(c, &session,
4095 op)))
4096 goto out;
4097 /*
4098 * The salt or K is random so we can't verify
4099 * signing against precomputed values, instead
4100 * we use the verify operation to see that
4101 * output is correct.
4102 */
4103 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4104 ta_crypt_cmd_allocate_operation(c,
4105 &session, &op, tv->algo,
4106 TEE_MODE_VERIFY, max_key_size)))
4107 goto out;
4108
4109 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4110 ta_crypt_cmd_set_operation_key(c,
4111 &session, op, pub_key_handle)))
4112 goto out;
4113
4114 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4115 ta_crypt_cmd_free_transient_object(c,
4116 &session, pub_key_handle)))
4117 goto out;
4118
4119 pub_key_handle = TEE_HANDLE_NULL;
4120
4121 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4122 ta_crypt_cmd_asymmetric_verify(c,
4123 &session, op, algo_params,
4124 num_algo_params, ptx_hash,
4125 ptx_hash_size, out, out_size)))
4126 goto out;
4127 } else {
4128 (void)ADBG_EXPECT_BUFFER(c, tv->ctx,
4129 tv->ctx_len, out,
4130 out_size);
4131 }
4132 break;
4133
4134 default:
4135 break;
4136 }
4137
4138 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4139 ta_crypt_cmd_free_operation(c, &session, op)))
4140 goto out;
4141
4142 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4143 ta_crypt_cmd_free_transient_object(c, &session,
4144 pub_key_handle)))
4145 goto out;
4146 pub_key_handle = TEE_HANDLE_NULL;
4147
4148 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4149 ta_crypt_cmd_free_transient_object(c, &session,
4150 priv_key_handle)))
4151 goto out;
4152
4153 priv_key_handle = TEE_HANDLE_NULL;
4154
4155 Do_ADBG_EndSubCase(c, NULL);
4156 }
4157out:
4158 TEEC_CloseSession(&session);
4159}
4160
4161#define KEY_ATTR(x, y) { #x, (x), y }
4162
4163struct key_attrs {
4164 const char *name;
4165 uint32_t attr;
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004166 /*
4167 * When keysize_check != 0: size of attribute is checked
4168 * Expected value is key_size bits except for DH in which case it is
4169 * the value of keysize_check.
4170 */
4171 uint32_t keysize_check;
Pascal Brandc639ac82015-07-02 08:53:34 +02004172};
4173
4174static bool test_keygen_attributes(ADBG_Case_t *c, TEEC_Session *s,
4175 TEE_ObjectHandle key, uint32_t key_size,
4176 struct key_attrs *attrs, size_t num_attrs)
4177{
4178 uint8_t out[2048];
4179 size_t out_size;
4180 size_t n;
4181 size_t m;
4182
4183 for (m = 0; m < num_attrs; m++) {
4184 if ((attrs[m].attr & TEE_ATTR_BIT_VALUE) == 0) {
4185 out_size = sizeof(out);
4186 memset(out, 0, sizeof(out));
4187 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4188 ta_crypt_cmd_get_object_buffer_attribute(c, s,
4189 key, attrs[m].attr, out, &out_size)))
4190 return false;
4191
4192 if (attrs[m].keysize_check)
4193 ADBG_EXPECT_COMPARE_UNSIGNED(c, out_size, ==,
4194 key_size / 8);
4195
4196 if (out_size > 0) {
4197 /* Check that buffer isn't all zeroes */
4198 for (n = 0; n < out_size; n++)
4199 if (out[n] != 0)
4200 break;
4201 if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, n, <,
4202 out_size))
4203 return false;
4204 }
4205 } else {
4206 uint32_t a;
4207 uint32_t b;
4208
4209 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4210 ta_crypt_cmd_get_object_value_attribute(c, s, key,
4211 attrs[m].attr, &a, &b)))
4212 return false;
4213 }
4214 }
4215 return true;
4216}
4217
4218static bool test_secret_value(ADBG_Case_t *c, TEEC_Session *s,
4219 TEE_ObjectHandle key, uint32_t key_size)
4220{
4221 const struct key_attrs attrs[] = {
4222 KEY_ATTR(TEE_ATTR_SECRET_VALUE, true),
4223 };
4224
4225 return test_keygen_attributes(c, s, key, key_size,
4226 (struct key_attrs *)&attrs,
4227 ARRAY_SIZE(attrs));
4228}
4229
4230
4231static bool test_rsa_key_pair(ADBG_Case_t *c, TEEC_Session *s,
4232 TEE_ObjectHandle key, uint32_t key_size)
4233{
4234 const struct key_attrs attrs[] = {
4235 KEY_ATTR(TEE_ATTR_RSA_MODULUS, true),
4236 KEY_ATTR(TEE_ATTR_RSA_PUBLIC_EXPONENT, false),
4237 KEY_ATTR(TEE_ATTR_RSA_PRIVATE_EXPONENT, false),
4238 KEY_ATTR(TEE_ATTR_RSA_PRIME1, false),
4239 KEY_ATTR(TEE_ATTR_RSA_PRIME2, false),
4240 KEY_ATTR(TEE_ATTR_RSA_EXPONENT1, false),
4241 KEY_ATTR(TEE_ATTR_RSA_EXPONENT2, false),
4242 KEY_ATTR(TEE_ATTR_RSA_COEFFICIENT, false),
4243 };
4244
4245 return test_keygen_attributes(c, s, key, key_size,
4246 (struct key_attrs *)&attrs,
4247 ARRAY_SIZE(attrs));
4248}
4249
Pascal Brande61133f2015-07-08 15:38:37 +02004250static bool test_ecc_key_pair(ADBG_Case_t *c, TEEC_Session *s,
4251 TEE_ObjectHandle key, uint32_t key_size)
4252{
4253 const struct key_attrs attrs[] = {
4254 KEY_ATTR(TEE_ATTR_ECC_PRIVATE_VALUE, false),
4255 KEY_ATTR(TEE_ATTR_ECC_PUBLIC_VALUE_X , false),
4256 KEY_ATTR(TEE_ATTR_ECC_PUBLIC_VALUE_Y , false),
4257 /* KEY_ATTR(TEE_ATTR_ECC_CURVE, false), - do not test */
4258 };
4259
4260 return test_keygen_attributes(c, s, key, key_size,
4261 (struct key_attrs *)&attrs,
4262 ARRAY_SIZE(attrs));
4263}
4264
Pascal Brandc639ac82015-07-02 08:53:34 +02004265static bool test_dh_key_pair(ADBG_Case_t *c, TEEC_Session *s,
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004266 TEE_ObjectHandle key, uint32_t check_keysize)
Pascal Brandc639ac82015-07-02 08:53:34 +02004267{
4268 const struct key_attrs attrs[] = {
4269 KEY_ATTR(TEE_ATTR_DH_PRIME, false),
4270 KEY_ATTR(TEE_ATTR_DH_BASE, false),
4271 KEY_ATTR(TEE_ATTR_DH_PUBLIC_VALUE, false),
4272 KEY_ATTR(TEE_ATTR_DH_PRIVATE_VALUE, check_keysize),
4273 KEY_ATTR(TEE_ATTR_DH_X_BITS, false),
4274 };
4275
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004276 return test_keygen_attributes(c, s, key, check_keysize,
Pascal Brandc639ac82015-07-02 08:53:34 +02004277 (struct key_attrs *)&attrs,
4278 ARRAY_SIZE(attrs));
4279}
4280
4281static bool test_dsa_key_pair(ADBG_Case_t *c, TEEC_Session *s,
4282 TEE_ObjectHandle key, uint32_t key_size)
4283{
4284 const struct key_attrs attrs[] = {
4285 KEY_ATTR(TEE_ATTR_DSA_PRIME, true),
4286 KEY_ATTR(TEE_ATTR_DSA_SUBPRIME, false),
4287 KEY_ATTR(TEE_ATTR_DSA_BASE, false),
4288 KEY_ATTR(TEE_ATTR_DSA_PUBLIC_VALUE, false),
4289 KEY_ATTR(TEE_ATTR_DSA_PRIVATE_VALUE, false),
4290 };
4291
4292 return test_keygen_attributes(c, s, key, key_size,
4293 (struct key_attrs *)&attrs,
4294 ARRAY_SIZE(attrs));
4295}
4296
4297static bool generate_and_test_key(ADBG_Case_t *c, TEEC_Session *s,
4298 uint32_t key_type, uint32_t check_keysize,
4299 uint32_t key_size,
4300 TEE_Attribute *params, size_t param_count)
4301{
4302 TEE_ObjectHandle key;
4303 bool ret_val = true;
4304
4305 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4306 ta_crypt_cmd_allocate_transient_object(c, s, key_type, key_size,
4307 &key)))
4308 return false;
4309
4310 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4311 ta_crypt_cmd_generate_key(c, s, key, key_size, params,
4312 param_count)))
4313 return false;
4314
4315 switch (key_type) {
4316 case TEE_TYPE_DES:
4317 case TEE_TYPE_DES3:
4318 ret_val = ADBG_EXPECT_TRUE(c,
4319 test_secret_value(c, s, key,
4320 key_size + key_size / 7));
4321 break;
4322 case TEE_TYPE_AES:
4323 case TEE_TYPE_HMAC_MD5:
4324 case TEE_TYPE_HMAC_SHA1:
4325 case TEE_TYPE_HMAC_SHA224:
4326 case TEE_TYPE_HMAC_SHA256:
4327 case TEE_TYPE_HMAC_SHA384:
4328 case TEE_TYPE_HMAC_SHA512:
4329 case TEE_TYPE_GENERIC_SECRET:
4330 ret_val = ADBG_EXPECT_TRUE(c,
4331 test_secret_value(c, s, key, key_size));
4332 break;
4333
4334 case TEE_TYPE_RSA_KEYPAIR:
4335 ret_val = ADBG_EXPECT_TRUE(c,
4336 test_rsa_key_pair(c, s, key, key_size));
4337 break;
4338
Pascal Brande61133f2015-07-08 15:38:37 +02004339 case TEE_TYPE_ECDSA_KEYPAIR:
4340 case TEE_TYPE_ECDH_KEYPAIR:
4341 ret_val = ADBG_EXPECT_TRUE(c,
4342 test_ecc_key_pair(c, s, key, key_size));
4343 break;
4344
Pascal Brandc639ac82015-07-02 08:53:34 +02004345 case TEE_TYPE_DH_KEYPAIR:
Pascal Brande61133f2015-07-08 15:38:37 +02004346 ret_val = ADBG_EXPECT_TRUE(c,
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004347 test_dh_key_pair(c, s, key, check_keysize));
Pascal Brandc639ac82015-07-02 08:53:34 +02004348 break;
4349
4350 case TEE_TYPE_DSA_KEYPAIR:
4351 ret_val = ADBG_EXPECT_TRUE(c,
4352 test_dsa_key_pair(c, s, key, key_size));
4353 break;
4354
4355 default:
4356 ret_val = false;
4357 break;
4358 }
4359
4360 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4361 ta_crypt_cmd_free_transient_object(c, s, key)))
4362 return false;
4363
4364 return ret_val;
4365}
4366
4367static void xtest_test_keygen_noparams(ADBG_Case_t *c, TEEC_Session *session)
4368{
4369 size_t n;
4370 uint32_t key_size;
4371 static const struct {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004372 unsigned level;
Pascal Brandc639ac82015-07-02 08:53:34 +02004373 const char *name;
4374 uint32_t key_type;
4375 uint32_t quanta;
4376 uint32_t min_size;
4377 uint32_t max_size;
4378 } key_types[] = {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004379 { 0, "AES", TEE_TYPE_AES, 64, 128,
Pascal Brandc639ac82015-07-02 08:53:34 +02004380 256 /* valid sizes 128, 192, 256 */ },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004381 { 0, "DES", TEE_TYPE_DES, 56, 56, 56 /* valid size 56 */ },
4382 { 0, "DES3", TEE_TYPE_DES3, 56, 112,
Pascal Brandc639ac82015-07-02 08:53:34 +02004383 168 /* valid sizes 112, 168 */ },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004384 { 0, "HMAC-MD5", TEE_TYPE_HMAC_MD5, 8, 64, 512 },
4385 { 0, "HMAC-SHA1", TEE_TYPE_HMAC_SHA1, 8, 80, 512 },
4386 { 0, "HMAC-SHA224", TEE_TYPE_HMAC_SHA224, 8, 112, 512 },
4387 { 0, "HMAC-SHA256", TEE_TYPE_HMAC_SHA256, 8, 192, 1024 },
4388 { 0, "HMAC-SHA384", TEE_TYPE_HMAC_SHA384, 8, 256, 1024 },
4389 { 0, "HMAC-SHA512", TEE_TYPE_HMAC_SHA512, 8, 256, 1024 },
4390 { 0, "Generic secret", TEE_TYPE_GENERIC_SECRET, 8, 128, 4096 },
4391 { 1, "RSA-2048", TEE_TYPE_RSA_KEYPAIR, 1, 2048, 2048 },
Pascal Brandc639ac82015-07-02 08:53:34 +02004392
4393 /* New tests added to check non-regression of issue #5398 */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004394 { 0, "RSA-256", TEE_TYPE_RSA_KEYPAIR, 1, 256, 256 },
4395 { 1, "RSA-384", TEE_TYPE_RSA_KEYPAIR, 1, 384, 384 },
4396 { 1, "RSA-512", TEE_TYPE_RSA_KEYPAIR, 1, 512, 512 },
4397 { 1, "RSA-640", TEE_TYPE_RSA_KEYPAIR, 1, 640, 640 },
4398 { 1, "RSA-768", TEE_TYPE_RSA_KEYPAIR, 1, 768, 768 },
4399 { 1, "RSA-896", TEE_TYPE_RSA_KEYPAIR, 1, 896, 896 },
4400 { 1, "RSA-1024", TEE_TYPE_RSA_KEYPAIR, 1, 1024, 1024 },
Pascal Brandc639ac82015-07-02 08:53:34 +02004401 };
4402
4403 for (n = 0; n < ARRAY_SIZE(key_types); n++) {
4404 uint32_t min_size = key_types[n].min_size;
4405 uint32_t max_size = key_types[n].max_size;
4406 uint32_t quanta = key_types[n].quanta;
4407
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004408 if (key_types[n].level > level)
4409 continue;
4410
Pascal Brandc639ac82015-07-02 08:53:34 +02004411 Do_ADBG_BeginSubCase(c, "Generate %s key", key_types[n].name);
4412
4413 for (key_size = min_size; key_size <= max_size;
4414 key_size += quanta) {
4415 if (!ADBG_EXPECT_TRUE(c,
4416 generate_and_test_key(c, session, key_types
4417 [n].key_type, 1, key_size, NULL, 0)))
4418 break;
4419 }
4420
4421 Do_ADBG_EndSubCase(c, "Generate %s key", key_types[n].name);
4422 }
4423}
4424
4425static void xtest_test_keygen_dh(ADBG_Case_t *c, TEEC_Session *session)
4426{
4427 size_t n;
4428 size_t param_count;
4429 /*
4430 * Note that the key size parameter is not used when creating the keys
4431 * but specifying these sizes make it possible to test the expected size
4432 * of the private value. This also means that the keysize must match the
4433 * size of p or what is specified in private_bits or the equvivalent
4434 * size of the subprime parameter.
4435 */
4436 TEE_Attribute params[4];
4437
4438#define XTEST_DH_GK_DATA(vect) \
4439 ARRAY(vect ## _p), \
4440 ARRAY(vect ## _g), \
4441 &vect ## _private_bits, \
4442 0, 0
4443#define XTEST_DH_GK_DATA_SUBPRIME(vect) \
4444 ARRAY(vect ## _p), \
4445 ARRAY(vect ## _g), \
4446 &vect ## _private_bits, \
4447 ARRAY(vect ## _subprime)
4448 static const struct {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004449 unsigned level;
Pascal Brandc639ac82015-07-02 08:53:34 +02004450 uint32_t key_size;
4451 const uint8_t *p;
4452 size_t p_len;
4453 const uint8_t *g;
4454 size_t g_len;
4455 const uint32_t *private_bits;
4456 const uint8_t *subprime;
4457 size_t subprime_len;
4458 } key_types[] = {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004459 { 0, 256, XTEST_DH_GK_DATA(keygen_dh256) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004460 { 0, 320, XTEST_DH_GK_DATA(keygen_dh320) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004461 { 1, 384, XTEST_DH_GK_DATA(keygen_dh384) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004462 { 1, 448, XTEST_DH_GK_DATA(keygen_dh448) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004463 { 1, 512, XTEST_DH_GK_DATA(keygen_dh512) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004464 { 1, 576, XTEST_DH_GK_DATA(keygen_dh576) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004465 { 1, 640, XTEST_DH_GK_DATA(keygen_dh640) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004466 { 1, 704, XTEST_DH_GK_DATA(keygen_dh704) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004467 { 1, 768, XTEST_DH_GK_DATA(keygen_dh768) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004468 { 1, 832, XTEST_DH_GK_DATA(keygen_dh832) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004469 { 1, 896, XTEST_DH_GK_DATA(keygen_dh896) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004470 { 1, 960, XTEST_DH_GK_DATA(keygen_dh960) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004471 { 1, 1024, XTEST_DH_GK_DATA(keygen_dh1024) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004472 { 1, 1088, XTEST_DH_GK_DATA(keygen_dh1088) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004473 { 1, 1152, XTEST_DH_GK_DATA(keygen_dh1152) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004474 { 1, 1216, XTEST_DH_GK_DATA(keygen_dh1216) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004475 { 1, 1280, XTEST_DH_GK_DATA(keygen_dh1280) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004476 { 1, 1344, XTEST_DH_GK_DATA(keygen_dh1344) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004477 { 1, 1408, XTEST_DH_GK_DATA(keygen_dh1408) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004478 { 1, 1472, XTEST_DH_GK_DATA(keygen_dh1472) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004479 { 1, 1536, XTEST_DH_GK_DATA(keygen_dh1536) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004480 { 1, 1600, XTEST_DH_GK_DATA(keygen_dh1600) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004481 { 1, 1664, XTEST_DH_GK_DATA(keygen_dh1664) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004482 { 1, 1728, XTEST_DH_GK_DATA(keygen_dh1728) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004483 { 1, 1792, XTEST_DH_GK_DATA(keygen_dh1792) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004484 { 1, 1856, XTEST_DH_GK_DATA(keygen_dh1856) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004485 { 1, 1920, XTEST_DH_GK_DATA(keygen_dh1920) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004486 { 1, 1984, XTEST_DH_GK_DATA(keygen_dh1984) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004487 { 1, 2048, XTEST_DH_GK_DATA(keygen_dh2048) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004488 { 1, 2048, XTEST_DH_GK_DATA_SUBPRIME(keygen_dh2048_subprime) }
Pascal Brandc639ac82015-07-02 08:53:34 +02004489 };
4490
4491
4492 for (n = 0; n < ARRAY_SIZE(key_types); n++) {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004493 if (key_types[n].level > level)
4494 continue;
4495
Pascal Brandc639ac82015-07-02 08:53:34 +02004496 Do_ADBG_BeginSubCase(c,
4497 "Generate DH key %d bits - Private bits = %d",
4498 key_types[n].key_size,
4499 *key_types[n].private_bits);
4500 param_count = 0;
4501
4502 xtest_add_attr(&param_count, params,
4503 TEE_ATTR_DH_PRIME,
4504 key_types[n].p, key_types[n].p_len);
4505
4506 xtest_add_attr(&param_count, params, TEE_ATTR_DH_BASE,
4507 key_types[n].g, key_types[n].g_len);
4508
4509 if (key_types[n].private_bits != 0) {
4510 params[param_count].attributeID = TEE_ATTR_DH_X_BITS;
4511
4512 params[param_count].content.value.a =
4513 *key_types[n].private_bits;
4514
4515 params[param_count].content.value.b = 0;
4516 param_count++;
4517 }
4518
4519 if (key_types[n].subprime != 0) {
4520 xtest_add_attr(&param_count, params,
4521 TEE_ATTR_DH_SUBPRIME,
4522 key_types[n].subprime,
4523 key_types[n].subprime_len);
4524 }
4525
4526 if (!ADBG_EXPECT_TRUE(c,
4527 generate_and_test_key(c, session, TEE_TYPE_DH_KEYPAIR,
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004528 *key_types[n].private_bits,
Pascal Brandc639ac82015-07-02 08:53:34 +02004529 key_types[n]. key_size, params, param_count)))
4530 break;
4531
4532 Do_ADBG_EndSubCase(c,
4533 "Generate DH key %d bits - Private bits = %d",
4534 key_types[n].key_size,
4535 *key_types[n].private_bits);
4536 }
4537}
4538
4539static void xtest_test_keygen_dsa(ADBG_Case_t *c, TEEC_Session *session)
4540{
4541 size_t n;
4542 size_t param_count;
4543 TEE_Attribute params[4];
4544
4545#define XTEST_DSA_GK_DATA(vect) \
4546 ARRAY(vect ## _p), \
4547 ARRAY(vect ## _g), \
4548 ARRAY(vect ## _q)
4549 static const struct {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004550 unsigned level;
Pascal Brandc639ac82015-07-02 08:53:34 +02004551 uint32_t key_size;
4552 const uint8_t *prime;
4553 size_t prime_len;
4554 const uint8_t *base;
4555 size_t base_len;
4556 const uint8_t *sub_prime;
4557 size_t sub_prime_len;
4558 } key_types[] = {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004559 { 1, 1024, XTEST_DSA_GK_DATA(keygen_dsa_test1) },
4560 { 0, 512, XTEST_DSA_GK_DATA(keygen_dsa512) },
4561 { 1, 576, XTEST_DSA_GK_DATA(keygen_dsa576) },
4562 { 1, 640, XTEST_DSA_GK_DATA(keygen_dsa640) },
4563 { 1, 704, XTEST_DSA_GK_DATA(keygen_dsa704) },
4564 { 1, 768, XTEST_DSA_GK_DATA(keygen_dsa768) },
4565 { 1, 832, XTEST_DSA_GK_DATA(keygen_dsa832) },
4566 { 1, 896, XTEST_DSA_GK_DATA(keygen_dsa896) },
4567 { 1, 960, XTEST_DSA_GK_DATA(keygen_dsa960) },
4568 { 1, 1024, XTEST_DSA_GK_DATA(keygen_dsa1024) },
Pascal Brandc639ac82015-07-02 08:53:34 +02004569 };
4570
4571 for (n = 0; n < ARRAY_SIZE(key_types); n++) {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004572 if (key_types[n].level > level)
4573 continue;
4574
Pascal Brandc639ac82015-07-02 08:53:34 +02004575 Do_ADBG_BeginSubCase(c, "Generate DSA key %d bits",
4576 key_types[n].key_size);
4577 param_count = 0;
4578
4579
4580 xtest_add_attr(&param_count, params, TEE_ATTR_DSA_PRIME,
4581 key_types[n].prime, key_types[n].prime_len);
4582
4583 xtest_add_attr(&param_count, params, TEE_ATTR_DSA_SUBPRIME,
4584 key_types[n].sub_prime,
4585 key_types[n].sub_prime_len);
4586
4587 xtest_add_attr(&param_count, params, TEE_ATTR_DSA_BASE,
4588 key_types[n].base, key_types[n].base_len);
4589
4590 if (!ADBG_EXPECT_TRUE(c,
4591 generate_and_test_key(c, session, TEE_TYPE_DSA_KEYPAIR,
4592 1, key_types[n]. key_size, params,
4593 param_count)))
4594 break;
4595
4596 Do_ADBG_EndSubCase(c, "Generate DSA key %d bits",
4597 key_types[n].key_size);
4598 }
4599}
4600
Pascal Brande61133f2015-07-08 15:38:37 +02004601static void xtest_test_keygen_ecc(ADBG_Case_t *c, TEEC_Session *session)
4602{
4603 size_t n;
4604 size_t param_count;
4605 TEE_Attribute params[4];
4606
4607 static const struct {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004608 unsigned level;
Pascal Brande61133f2015-07-08 15:38:37 +02004609 const char *name;
4610 uint32_t algo;
4611 uint32_t curve;
4612 uint32_t key_size;
4613 } key_types[] = {
4614 /* ECDSA */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004615 { 0, "ECDSA-192", TEE_TYPE_ECDSA_KEYPAIR, TEE_ECC_CURVE_NIST_P192,
4616 192 },
4617 { 1, "ECDSA-224", TEE_TYPE_ECDSA_KEYPAIR, TEE_ECC_CURVE_NIST_P224,
4618 224 },
4619 { 1, "ECDSA-256", TEE_TYPE_ECDSA_KEYPAIR, TEE_ECC_CURVE_NIST_P256,
4620 256 },
4621 { 1, "ECDSA-384", TEE_TYPE_ECDSA_KEYPAIR, TEE_ECC_CURVE_NIST_P384,
4622 384 },
4623 { 1, "ECDSA-521", TEE_TYPE_ECDSA_KEYPAIR, TEE_ECC_CURVE_NIST_P521,
4624 521 },
Pascal Brande61133f2015-07-08 15:38:37 +02004625
4626 /* ECDH */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004627 { 0, "ECDH-192", TEE_TYPE_ECDH_KEYPAIR, TEE_ECC_CURVE_NIST_P192,
4628 192 },
4629 { 1, "ECDH-224", TEE_TYPE_ECDH_KEYPAIR, TEE_ECC_CURVE_NIST_P224,
4630 224 },
4631 { 1, "ECDH-256", TEE_TYPE_ECDH_KEYPAIR, TEE_ECC_CURVE_NIST_P256,
4632 256 },
4633 { 1, "ECDH-384", TEE_TYPE_ECDH_KEYPAIR, TEE_ECC_CURVE_NIST_P384,
4634 384 },
4635 { 1, "ECDH-521", TEE_TYPE_ECDH_KEYPAIR, TEE_ECC_CURVE_NIST_P521,
4636 521 },
Pascal Brande61133f2015-07-08 15:38:37 +02004637 };
4638
4639 for (n = 0; n < ARRAY_SIZE(key_types); n++) {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004640 if (key_types[n].level > level)
4641 continue;
4642
Pascal Brande61133f2015-07-08 15:38:37 +02004643 Do_ADBG_BeginSubCase(c, "Generate %s", key_types[n].name);
4644 param_count = 0;
4645
4646 xtest_add_attr_value(&param_count, params, TEE_ATTR_ECC_CURVE,
4647 key_types[n].curve, 0);
4648
4649 if (!ADBG_EXPECT_TRUE(c,
4650 generate_and_test_key(c, session, key_types[n].algo,
4651 0, key_types[n].key_size, params,
4652 param_count)))
4653 break;
4654
4655 Do_ADBG_EndSubCase(c, "Generate %s", key_types[n].name);
4656 }
4657}
4658
Pascal Brandc639ac82015-07-02 08:53:34 +02004659static void xtest_tee_test_4007(ADBG_Case_t *c)
4660{
4661 TEEC_Session session = { 0 };
4662 uint32_t ret_orig;
4663
4664 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4665 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
4666 &ret_orig)))
4667 return;
4668
4669 xtest_test_keygen_noparams(c, &session);
4670
4671 xtest_test_keygen_dh(c, &session);
4672
4673 xtest_test_keygen_dsa(c, &session);
4674
Pascal Brande61133f2015-07-08 15:38:37 +02004675 xtest_test_keygen_ecc (c, &session);
4676
Pascal Brandc639ac82015-07-02 08:53:34 +02004677 TEEC_CloseSession(&session);
4678}
4679
4680static void xtest_tee_test_4008(ADBG_Case_t *c)
4681{
4682 TEEC_Session session = { 0 };
4683 uint32_t ret_orig;
4684 TEE_OperationHandle op;
4685 TEE_ObjectHandle key_handle;
4686 TEE_ObjectHandle sv_handle;
4687 TEE_Attribute params[4];
4688 size_t param_count = 0;
4689 uint8_t out[2048];
4690 size_t out_size;
4691
4692 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4693 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
4694 &ret_orig)))
4695 return;
4696
4697 Do_ADBG_BeginSubCase(c, "Derive DH key success");
4698
4699 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4700 ta_crypt_cmd_allocate_operation(c, &session, &op,
4701 TEE_ALG_DH_DERIVE_SHARED_SECRET, TEE_MODE_DERIVE,
4702 derive_key_max_keysize)))
4703 goto out;
4704
4705 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4706 ta_crypt_cmd_allocate_transient_object(c, & session,
4707 TEE_TYPE_DH_KEYPAIR, derive_key_max_keysize,
4708 &key_handle)))
4709 goto out;
4710
4711 xtest_add_attr(&param_count, params, TEE_ATTR_DH_PRIME,
4712 ARRAY(derive_key_dh_prime));
4713
4714 xtest_add_attr(&param_count, params, TEE_ATTR_DH_BASE,
4715 ARRAY(derive_key_dh_base));
4716
4717 xtest_add_attr(&param_count, params, TEE_ATTR_DH_PUBLIC_VALUE,
4718 ARRAY(derive_key_dh_public_value));
4719
4720 xtest_add_attr(&param_count, params, TEE_ATTR_DH_PRIVATE_VALUE,
4721 ARRAY(derive_key_dh_private_value));
4722
4723 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4724 ta_crypt_cmd_populate_transient_object(c, &session, key_handle,
4725 params, param_count)))
4726 goto out;
4727
4728 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4729 ta_crypt_cmd_set_operation_key(c, &session, op, key_handle)))
4730 goto out;
4731
4732 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4733 ta_crypt_cmd_free_transient_object(c, & session, key_handle)))
4734 goto out;
4735
4736 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4737 ta_crypt_cmd_allocate_transient_object(c, &session,
4738 TEE_TYPE_GENERIC_SECRET, derive_key_max_keysize,
4739 &sv_handle)))
4740 goto out;
4741
Pascal Brand2b92b642015-07-16 13:29:42 +02004742 /* reuse but reset params and param-count */
Pascal Brandc639ac82015-07-02 08:53:34 +02004743 param_count = 0;
4744
4745 xtest_add_attr(&param_count, params, TEE_ATTR_DH_PUBLIC_VALUE,
4746 ARRAY(derive_key_dh_public_value_2));
4747
4748 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4749 ta_crypt_cmd_derive_key(c, &session, op, sv_handle, params,
4750 param_count)))
4751 goto out;
4752
4753 out_size = sizeof(out);
4754 memset(out, 0, sizeof(out));
4755 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4756 ta_crypt_cmd_get_object_buffer_attribute(c, &session, sv_handle,
4757 TEE_ATTR_SECRET_VALUE, out, &out_size)))
4758 goto out;
4759
4760 if (!ADBG_EXPECT_BUFFER(c, derive_key_dh_shared_secret,
4761 sizeof(derive_key_dh_shared_secret), out,
4762 out_size))
4763 goto out;
4764
4765 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4766 ta_crypt_cmd_free_operation(c, &session, op)))
4767 goto out;
4768
4769 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4770 ta_crypt_cmd_free_transient_object(c, &session, sv_handle)))
4771 goto out;
4772out:
4773 Do_ADBG_EndSubCase(c, "Derive DH key success");
4774 TEEC_CloseSession(&session);
4775}
Pascal Brand2b92b642015-07-16 13:29:42 +02004776
4777static void xtest_tee_test_4009(ADBG_Case_t *c)
4778{
4779 TEEC_Session session = { 0 };
4780 uint32_t ret_orig;
4781 TEE_OperationHandle op;
4782 TEE_ObjectHandle key_handle;
4783 TEE_ObjectHandle sv_handle;
4784 TEE_Attribute params[4];
4785 size_t param_count = 0;
4786 uint8_t out[2048];
4787 size_t out_size;
4788 uint32_t size_bytes;
Peng Fane13ad9b2015-07-21 11:46:26 +08004789 uint32_t i;
Pascal Brand2b92b642015-07-16 13:29:42 +02004790 struct derive_key_ecdh_t *pt;
4791
4792 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4793 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
4794 &ret_orig)))
4795 return;
4796
4797 for (i = 0; i < ARRAY_SIZE(derive_key_ecdh); i++) {
4798 pt = &derive_key_ecdh[i];
4799
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02004800 if (pt->level > level)
4801 continue;
4802
Pascal Brand2b92b642015-07-16 13:29:42 +02004803 Do_ADBG_BeginSubCase(c, "Derive ECDH key - algo = 0x%x",
4804 pt->algo);
4805 size_bytes = (pt->keysize + 7) / 8;
4806 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4807 ta_crypt_cmd_allocate_operation(c, &session, &op,
4808 pt->algo,
4809 TEE_MODE_DERIVE, pt->keysize)))
4810 goto out;
4811
4812 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4813 ta_crypt_cmd_allocate_transient_object(c, & session,
4814 TEE_TYPE_ECDH_KEYPAIR, pt->keysize,
4815 &key_handle)))
4816 goto out;
4817
4818 param_count = 0;
4819 xtest_add_attr_value(&param_count, params,
4820 TEE_ATTR_ECC_CURVE, pt->curve, 0);
4821 xtest_add_attr(&param_count, params,
4822 TEE_ATTR_ECC_PRIVATE_VALUE,
4823 pt->private, size_bytes);
4824 /*
4825 * The public value is not used. This is why we provide
4826 * another buffer
4827 */
4828 xtest_add_attr(&param_count, params,
4829 TEE_ATTR_ECC_PUBLIC_VALUE_X,
4830 pt->private, size_bytes);
4831 xtest_add_attr(&param_count, params,
4832 TEE_ATTR_ECC_PUBLIC_VALUE_Y,
4833 pt->private, size_bytes);
4834
4835 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4836 ta_crypt_cmd_populate_transient_object(c,
4837 &session,
4838 key_handle, params, param_count)))
4839 goto out;
4840
4841 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4842 ta_crypt_cmd_set_operation_key(c, &session, op,
4843 key_handle)))
4844 goto out;
4845
4846 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4847 ta_crypt_cmd_free_transient_object(c, & session,
4848 key_handle)))
4849 goto out;
4850
4851 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4852 ta_crypt_cmd_allocate_transient_object(c, &session,
4853 TEE_TYPE_GENERIC_SECRET, size_bytes * 8,
4854 &sv_handle)))
4855 goto out;
4856
4857 /* reuse but reset params and param-count */
4858 param_count = 0;
4859
4860 xtest_add_attr(&param_count, params,
4861 TEE_ATTR_ECC_PUBLIC_VALUE_X,
4862 pt->public_x, size_bytes);
4863 xtest_add_attr(&param_count, params,
4864 TEE_ATTR_ECC_PUBLIC_VALUE_Y,
4865 pt->public_y, size_bytes);
4866
4867 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4868 ta_crypt_cmd_derive_key(c, &session, op, sv_handle,
4869 params, param_count)))
4870 goto out;
4871
4872 out_size = sizeof(out);
4873 memset(out, 0, sizeof(out));
4874 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4875 ta_crypt_cmd_get_object_buffer_attribute(c, &session,
4876 sv_handle,
4877 TEE_ATTR_SECRET_VALUE, out, &out_size)))
4878 goto out;
4879
4880 if (!ADBG_EXPECT_BUFFER(c, pt->out, size_bytes,
4881 out, out_size))
4882 goto out;
4883
4884 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4885 ta_crypt_cmd_free_operation(c, &session, op)))
4886 goto out;
4887
4888 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4889 ta_crypt_cmd_free_transient_object(c, &session,
4890 sv_handle)))
4891 goto out;
4892
4893 Do_ADBG_EndSubCase(c, "Derive ECDH key - algo = 0x%x",
4894 pt->algo);
4895 }
4896
4897 goto noerror;
4898
4899out:
4900 Do_ADBG_EndSubCase(c, "Derive ECDH key - algo = 0x%x", pt->algo);
4901
4902noerror:
4903 TEEC_CloseSession(&session);
4904}
Jens Wiklander70a0b2c2016-05-18 08:39:35 +02004905
4906static void xtest_tee_test_4010(ADBG_Case_t *c)
4907{
4908 TEEC_Session session = { 0 };
4909 uint32_t ret_orig;
4910 TEE_ObjectHandle o;
4911 static const uint8_t large_key[1024] = { 1, 2, 3, 4, 5, 6 };
4912 static const TEE_Attribute attr = {
4913 .attributeID = TEE_ATTR_SECRET_VALUE,
4914 .content.ref.buffer = (void *)large_key,
4915 .content.ref.length = sizeof(large_key),
4916 };
4917
4918 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4919 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
4920 &ret_orig)))
4921 return;
4922
4923 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4924 ta_crypt_cmd_allocate_transient_object(c, &session,
4925 TEE_TYPE_HMAC_SHA256, 1024, &o)))
4926 goto out;
4927
4928 ADBG_EXPECT_TEEC_RESULT(c, TEEC_ERROR_TARGET_DEAD,
4929 ta_crypt_cmd_populate_transient_object(c, &session, o,
4930 &attr, 1));
4931
4932out:
4933 TEEC_CloseSession(&session);
4934}
Jens Wiklanderb58916e2016-07-07 15:29:32 +02004935
4936static void xtest_tee_test_4011(ADBG_Case_t *c)
4937{
4938 TEEC_Session s = { 0 };
4939 size_t key_size = 512;
4940 TEE_ObjectHandle key;
4941 TEE_OperationHandle ops;
4942 TEE_OperationHandle opv;
4943 TEE_OperationHandle ope;
4944 TEE_OperationHandle opd;
4945 uint32_t ret_orig;
4946 uint8_t in[TEE_SHA1_HASH_SIZE];
4947 uint8_t out[1024];
4948 uint8_t tmp[1024];
4949 size_t out_size;
4950 size_t tmp_size;
4951 size_t n;
4952 size_t m;
4953 size_t i = 0;
4954
4955 /* Setup session, initialize message to sign, create a keypair */
4956 if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&s,
4957 &crypt_user_ta_uuid, NULL, &ret_orig)))
4958 return;
4959 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_random_number_generate(c,
4960 &s, in, sizeof(in))))
4961 goto out;
4962 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_transient_object(
4963 c, &s, TEE_TYPE_RSA_KEYPAIR, key_size, &key)))
4964 goto out;
4965 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_generate_key(c, &s,
4966 key, key_size, NULL, 0)))
4967 goto out;
4968
4969 /* Allocate operations for sign, verify, encrypt and decrypt */
4970 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, &s,
4971 &ops, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
4972 key_size)))
4973 goto out;
4974 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, &s,
4975 &opv, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
4976 key_size)))
4977 goto out;
4978 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, &s,
4979 &ope, TEE_ALG_RSA_NOPAD, TEE_MODE_ENCRYPT, key_size)))
4980 goto out;
4981 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, &s,
4982 &opd, TEE_ALG_RSA_NOPAD, TEE_MODE_DECRYPT, key_size)))
4983 goto out;
4984
4985 /* Assign the keypair to all operations */
4986 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4987 ta_crypt_cmd_set_operation_key(c, &s, ops, key)))
4988 goto out;
4989 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4990 ta_crypt_cmd_set_operation_key(c, &s, opv, key)))
4991 goto out;
4992 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4993 ta_crypt_cmd_set_operation_key(c, &s, ope, key)))
4994 goto out;
4995 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4996 ta_crypt_cmd_set_operation_key(c, &s, opd, key)))
4997 goto out;
4998
4999 /*
5000 * The core of the test case is inspired by the one in libtomcrypt:
5001 * https://github.com/libtom/libtomcrypt/blob/6ad52252688bb34f90b5e79da4830a927e87b81f/testprof/rsa_test.c#L398
5002 *
5003 * Testcase for Bleichenbacher attack
5004 *
5005 * (1) Create a valid signature
5006 * (2) Check that it can be verified
5007 * (3) Transform the package to fetch plain text (using the encrypt
5008 * operation in GP TEE Internal API)
5009 * (4) Forge the structure of PKCS#1-EMSA encoded data
5010 * (4.1) Search for start and end of the padding string
5011 * (4.2) Move the signature to the front of the padding string
5012 * (4.3) Zero the message until the end
5013 * (5) Transform the package back (using the decrypt operation in
5014 * GP TEE Internal API)
5015 * (6) The result should not be valid if the implementation is robust.
5016 */
5017
5018
5019 for (i = 0; i < 9; i++) {
5020 Do_ADBG_Log("Iteration %zu", i);
5021
5022 /* 1 */
5023 out_size = sizeof(out);
5024 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5025 ta_crypt_cmd_asymmetric_sign(c, &s, ops, NULL, 0,
5026 in, sizeof(in), out, &out_size)))
5027 goto out;
5028
5029 /* 2 */
5030 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5031 ta_crypt_cmd_asymmetric_verify(c, &s, opv, NULL, 0,
5032 in, sizeof(in), out, out_size)))
5033 goto out;
5034
5035 /* 3 */
5036 tmp_size = sizeof(tmp);
5037 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5038 ta_crypt_cmd_asymmetric_encrypt(c, &s, ope, NULL, 0,
5039 out, out_size, tmp, &tmp_size)))
5040 goto out;
5041
5042 /* 4.1 */
5043 for (n = 0; n < tmp_size; n++)
5044 if (tmp[n] == 0xff)
5045 break;
5046 for (m = n + 1; m < tmp_size; m++)
5047 if (tmp[m] != 0xff)
5048 break;
5049 /* 4.2 */
5050 memmove(tmp + n + i, tmp + m, tmp_size - m);
5051 /* 4.3 */
5052 for (n = n + tmp_size - m + i; n < tmp_size; n++)
5053 tmp[n] = 0;
5054
5055 /* 5 */
5056 out_size = sizeof(out);
5057 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5058 ta_crypt_cmd_asymmetric_decrypt(c, &s, opd, NULL, 0,
5059 tmp, tmp_size, out, &out_size)))
5060 goto out;
5061
5062 /* 6 */
5063 if (!ADBG_EXPECT_TEEC_RESULT(c, TEE_ERROR_SIGNATURE_INVALID,
5064 ta_crypt_cmd_asymmetric_verify(c, &s, opv, NULL, 0,
5065 in, sizeof(in), out, out_size)))
5066 goto out;
5067 }
5068
5069out:
5070 TEEC_CloseSession(&s);
5071}