blob: 9af0a3ecc7fc269967c39e6de8bd6302993069b2 [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
Jerome Forissier213ca8a2017-03-31 11:27:56 +020027#include <regression_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
Jerome Forissiered00e162017-01-20 09:22:52 +01002003/*
2004 * Test case for https://github.com/OP-TEE/optee_os/issues/1203
2005 * 80 bytes of data, processed in two steps (32 + 48).
2006 */
2007
2008#define ciph_data_aes_cts_issue1203_key ciph_data_aes_cts_vect1_key
2009
2010static const uint8_t ciph_data_aes_cts_issue1203_iv[] = {
2011 0x5b, 0x11, 0x7b, 0xf9, 0x83, 0x6a, 0x01, 0x27,
2012 0x1d, 0x2a, 0xae, 0x0a, 0xd3, 0x27, 0x35, 0x81,
2013};
2014
2015static const uint8_t ciph_data_aes_cts_issue1203_ptx[] = {
2016 0x33, 0x2a, 0xf4, 0x8c, 0x18, 0xa1, 0x30, 0x7c,
2017 0xa7, 0x52, 0x76, 0xca, 0xa6, 0x68, 0xad, 0xf6,
2018 0x1e, 0xba, 0xc9, 0x66, 0x66, 0x52, 0x1a, 0xe7,
2019 0x3e, 0xbc, 0xba, 0x60, 0x95, 0x71, 0x04, 0x5e,
2020 0xb4, 0xb7, 0x10, 0xd7, 0x93, 0x6d, 0x5f, 0x9a,
2021 0xb8, 0xbb, 0x6b, 0xb0, 0x6d, 0x47, 0x93, 0x41,
2022 0x29, 0x21, 0xf2, 0x84, 0xf5, 0xb2, 0xf2, 0x6d,
2023 0xbe, 0xe5, 0x8a, 0x2b, 0x58, 0x8d, 0x1b, 0x5e,
2024 0x41, 0x04, 0xba, 0x9e, 0x92, 0xe9, 0x52, 0xb6,
2025 0x8b, 0x1e, 0x36, 0x72, 0x91, 0xe4, 0x56, 0x66,
2026};
2027
2028/*
2029 * Ciphertext was generated by an online tool for AES CBC.
2030 * Since the input size is a multiple of the block size, and the ciphertext
2031 * format is CS3, the output is the same as plain AES CBC with the last
2032 * two blocks swapped.
2033 */
2034static const uint8_t ciph_data_aes_cts_issue1203_ctx[] = {
2035 0x6c, 0xfe, 0xef, 0x6a, 0x1c, 0x8f, 0xd3, 0xc3,
2036 0x66, 0xc4, 0xd9, 0x0e, 0xbe, 0x24, 0x17, 0x3f,
2037 0xcd, 0x19, 0xc9, 0xd2, 0x10, 0x3f, 0xcf, 0xdc,
2038 0xe9, 0x05, 0xab, 0xd5, 0x1a, 0x31, 0x41, 0x77,
2039 0x3b, 0xd7, 0x6a, 0x26, 0xae, 0x0d, 0xc9, 0x47,
2040 0x77, 0xd4, 0xa7, 0xd5, 0x73, 0x88, 0x9e, 0xde,
2041 0x72, 0x66, 0xe0, 0xe2, 0x3d, 0x62, 0x91, 0x22,
2042 0xae, 0x11, 0x01, 0x97, 0x22, 0x6a, 0x45, 0xa9,
2043 0xba, 0x56, 0xd2, 0xbc, 0x55, 0x2d, 0x99, 0x4d,
2044 0x3d, 0x22, 0x27, 0x9a, 0xac, 0x66, 0x2f, 0xf5,
2045};
2046
Pascal Brandc639ac82015-07-02 08:53:34 +02002047static const uint8_t ciph_data_des_ecb_nopad_out1[] = {
2048 0x46, 0x2B, 0x91, 0xA8, 0x55, 0xE6, 0x7E, 0x75, /* F+..U.~u */
2049 0x5E, 0x53, 0xF4, 0x8F, 0x29, 0x41, 0x4E, 0xEF, /* ^S..)AN. */
2050 0x32, 0x1B, 0x58, 0x42, 0x9B, 0xB4, 0x3A, 0x1F, /* 2.XB..:. */
2051 0x9A, 0xEA, 0xA4, 0xB4, 0xCD, 0xE9, 0x87, 0x7C, /* .......| */
2052 0xC0, 0x05, 0x34, 0xED, 0x86, 0x3C, 0x2A, 0x81, /* ..4..<.. */
2053 0x5E, 0x93, 0x0E, 0x86, 0xA9, 0xBB, 0x80, 0xFF, /* ^....... */
2054};
2055
2056static const uint8_t ciph_data_des_ecb_nopad_out2[] = {
2057 0x85, 0xE8, 0x13, 0x54, 0x0F, 0x0A, 0xB4, 0x05
2058};
2059
2060static const uint8_t ciph_data_des_cbc_nopad_out1[] = {
2061 0xAD, 0xD6, 0xD6, 0x3E, 0x88, 0xD0, 0xDD, 0xD4, /* ...>.... */
2062 0x9A, 0x93, 0x95, 0xA0, 0x86, 0x22, 0x5B, 0x9E, /* ....."[. */
2063 0x84, 0x0C, 0x6F, 0x12, 0x04, 0x11, 0x6F, 0xD4, /* ..o...o. */
2064 0x12, 0x29, 0xC6, 0x78, 0x0C, 0xFB, 0x58, 0x5B, /* .).x..X[ */
2065 0x66, 0x82, 0x0E, 0x52, 0xDC, 0x25, 0x16, 0x51, /* f..R.%.Q */
2066 0x69, 0xDF, 0xFE, 0x4E, 0x11, 0x1D, 0x9D, 0x08, /* i..N.... */
2067};
2068
2069static const uint8_t ciph_data_des3_ecb_nopad_out1[] = {
2070 0xA7, 0x46, 0xEC, 0xA8, 0x6A, 0x7F, 0x4A, 0xF1, /* .F..j.J. */
2071 0x44, 0x60, 0x37, 0x3B, 0x7F, 0x76, 0xE5, 0xFF, /* D`7;.v.. */
2072 0xC1, 0xE7, 0xA5, 0x04, 0x9C, 0x29, 0x5C, 0xA5, /* .....)\. */
2073 0xDD, 0xC8, 0xEE, 0x36, 0x1F, 0x48, 0xE0, 0xA9, /* ...6.H.. */
2074 0x82, 0x2D, 0x53, 0x84, 0x49, 0x69, 0x78, 0xFA, /* .-S.Iix. */
2075 0x23, 0x69, 0x1D, 0xF7, 0x08, 0x38, 0x44, 0x05, /* #i...8D. */
2076};
2077
2078static const uint8_t ciph_data_des3_cbc_nopad_out1[] = {
2079 0x18, 0x09, 0xEB, 0x98, 0xE4, 0x58, 0x72, 0x11, /* .....Xr. */
2080 0x30, 0x58, 0xAB, 0x38, 0xB0, 0xC9, 0x2B, 0xED, /* 0X.8..+. */
2081 0xDA, 0xC5, 0xE8, 0xA9, 0xF6, 0x8A, 0xA7, 0x80, /* ........ */
2082 0xBE, 0x54, 0x1F, 0x63, 0xF6, 0xEE, 0xA2, 0x4C, /* .T.c...L */
2083 0x7C, 0xEB, 0x84, 0x7D, 0xDA, 0xCA, 0x1E, 0xB2, /* |..}.... */
2084 0xED, 0x5E, 0x96, 0xB8, 0x01, 0x4B, 0x77, 0x02, /* .^...Kw. */
2085};
2086
2087static const uint8_t ciph_data_des2_ecb_nopad_out1[] = {
2088 0xAB, 0x12, 0xB6, 0xE2, 0x4A, 0x3A, 0x26, 0x14, /* ....J:&. */
2089 0xF0, 0x7D, 0x23, 0xD0, 0x55, 0xDF, 0x5C, 0x16, /* .}#.U.\. */
2090 0x43, 0x59, 0x1E, 0x44, 0x01, 0x76, 0xD7, 0x50, /* CY.D.v.P */
2091 0x44, 0xC0, 0x15, 0xDF, 0x2E, 0x7F, 0x8B, 0xC5, /* D....... */
2092 0xFF, 0x8B, 0x87, 0xFE, 0x33, 0xD7, 0xCB, 0x2C, /* ....3.., */
2093 0xDA, 0x79, 0x6F, 0xA4, 0x05, 0x2B, 0x30, 0xCE, /* .yo..+0. */
2094};
2095
2096static const uint8_t ciph_data_des2_cbc_nopad_out1[] = {
2097 0x47, 0x2F, 0xB1, 0x83, 0xC4, 0xBB, 0x93, 0x16, /* G/...... */
2098 0x73, 0xF9, 0xAD, 0x6F, 0x00, 0xF9, 0xCB, 0x4A, /* s..o...J */
2099 0x0F, 0x4F, 0x75, 0x75, 0xFB, 0x39, 0x0B, 0xFC, /* .Ouu.9.. */
2100 0x9F, 0x48, 0x52, 0xAD, 0xA2, 0x75, 0x2C, 0xF1, /* .HR..u, . */
2101 0x7D, 0xC3, 0x8F, 0x16, 0xCF, 0xC9, 0x76, 0x29, /* }.....v) */
2102 0x1A, 0xBF, 0xB3, 0xD9, 0x10, 0x7E, 0xAA, 0x49, /* .....~.I */
2103};
2104
2105struct xtest_ciph_case {
2106 uint32_t algo;
2107 uint32_t mode;
2108 uint32_t key_type;
2109 const uint8_t *key1;
2110 size_t key1_len;
2111 const uint8_t *key2;
2112 size_t key2_len;
2113 const uint8_t *iv;
2114 size_t iv_len;
2115 size_t in_incr;
2116 const uint8_t *in;
2117 size_t in_len;
2118 const uint8_t *out;
2119 size_t out_len;
2120 size_t line;
2121};
2122
2123#define XTEST_CIPH_CASE_NO_IV(algo, key_type, key, in_incr, ptx, ctx) \
2124 { (algo), TEE_MODE_ENCRYPT, (key_type), (key), ARRAY_SIZE(key), \
2125 NULL, 0, NULL, 0, \
2126 (in_incr), (ptx), ARRAY_SIZE(ptx), (ctx), ARRAY_SIZE(ctx), \
2127 __LINE__ }, \
2128 { (algo), TEE_MODE_DECRYPT, (key_type), (key), ARRAY_SIZE(key), \
2129 NULL, 0, NULL, 0, \
2130 (in_incr), (ctx), ARRAY_SIZE(ctx), (ptx), ARRAY_SIZE(ptx), __LINE__ }
2131
2132#define XTEST_CIPH_CASE(algo, key_type, key, iv, in_incr, ptx, ctx) \
2133 { (algo), TEE_MODE_ENCRYPT, (key_type), (key), ARRAY_SIZE(key), \
2134 NULL, 0, iv, ARRAY_SIZE(iv), (in_incr), (ptx), ARRAY_SIZE(ptx), \
2135 (ctx), ARRAY_SIZE(ctx), __LINE__ }, \
2136 { (algo), TEE_MODE_DECRYPT, (key_type), (key), ARRAY_SIZE(key), \
2137 NULL, 0, iv, ARRAY_SIZE(iv), (in_incr), (ctx), ARRAY_SIZE(ctx), \
2138 (ptx), ARRAY_SIZE(ptx), __LINE__ }
2139
2140#define XTEST_CIPH_CASE_AES_XTS(vect, in_incr) \
2141 { TEE_ALG_AES_XTS, TEE_MODE_ENCRYPT, TEE_TYPE_AES, \
2142 ciph_data_aes_xts_ ## vect ## _key1, \
2143 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _key1), \
2144 ciph_data_aes_xts_ ## vect ## _key2, \
2145 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _key2), \
2146 ciph_data_aes_xts_ ## vect ## _iv, \
2147 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _iv), \
2148 (in_incr), \
2149 ciph_data_aes_xts_ ## vect ## _ptx, \
2150 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _ptx), \
2151 ciph_data_aes_xts_ ## vect ## _ctx, \
2152 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _ctx), __LINE__ }, \
2153 { TEE_ALG_AES_XTS, TEE_MODE_DECRYPT, TEE_TYPE_AES, \
2154 ciph_data_aes_xts_ ## vect ## _key1, \
2155 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _key1), \
2156 ciph_data_aes_xts_ ## vect ## _key2, \
2157 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _key2), \
2158 ciph_data_aes_xts_ ## vect ## _iv, \
2159 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _iv), \
2160 (in_incr), \
2161 ciph_data_aes_xts_ ## vect ## _ctx, \
2162 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _ctx), \
2163 ciph_data_aes_xts_ ## vect ## _ptx, \
2164 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _ptx), __LINE__ }
2165
2166#define XTEST_CIPH_CASE_AES_CBC(vect, in_incr) \
2167 XTEST_CIPH_CASE(TEE_ALG_AES_CBC_NOPAD, TEE_TYPE_AES, \
2168 ciph_data_aes_cbc_ ## vect ## _key, \
2169 ciph_data_aes_cbc_ ## vect ## _iv, \
2170 (in_incr), ciph_data_aes_cbc_ ## vect ## _ptx, \
2171 ciph_data_aes_cbc_ ## vect ## _ctx)
2172
2173#define XTEST_CIPH_CASE_AES_CTS(vect, in_incr) \
2174 XTEST_CIPH_CASE(TEE_ALG_AES_CTS, TEE_TYPE_AES, \
2175 ciph_data_aes_cts_ ## vect ## _key, \
2176 ciph_data_aes_cts_ ## vect ## _iv, \
2177 (in_incr), ciph_data_aes_cts_ ## vect ## _ptx, \
2178 ciph_data_aes_cts_ ## vect ## _ctx)
2179
2180static const struct xtest_ciph_case ciph_cases[] = {
2181 /* AES */
2182 XTEST_CIPH_CASE_NO_IV(TEE_ALG_AES_ECB_NOPAD, TEE_TYPE_AES,
2183 ciph_data_aes_key1, 11, ciph_data_in1,
2184 ciph_data_aes_ecb_nopad_out1),
2185 XTEST_CIPH_CASE(TEE_ALG_AES_CBC_NOPAD, TEE_TYPE_AES,
2186 ciph_data_aes_key1, ciph_data_128_iv1, 11,
2187 ciph_data_in1,
2188 ciph_data_aes_cbc_nopad_out1),
2189 XTEST_CIPH_CASE(TEE_ALG_AES_CTR, TEE_TYPE_AES,
2190 ciph_data_aes_key1, ciph_data_128_iv1, 13,
2191 ciph_data_in1,
2192 ciph_data_aes_ctr_out1),
2193 XTEST_CIPH_CASE(TEE_ALG_AES_CTR, TEE_TYPE_AES,
2194 ciph_data_aes_key1, ciph_data_128_iv1, 13,
2195 ciph_data_in3,
2196 ciph_data_aes_ctr_out2),
Jens Wiklander692efd12018-01-19 09:52:00 +01002197 XTEST_CIPH_CASE(TEE_ALG_AES_CTR, TEE_TYPE_AES,
2198 ciph_data_aes_key1, ciph_data_128_iv1, 16,
2199 ciph_data_in3,
2200 ciph_data_aes_ctr_out2),
Pascal Brandc639ac82015-07-02 08:53:34 +02002201
2202 XTEST_CIPH_CASE_AES_CBC(vect1, 11),
2203
2204 /* AES-CTS */
2205 XTEST_CIPH_CASE_AES_CTS(vect1, 13),
2206 XTEST_CIPH_CASE_AES_CTS(vect2, 14),
2207 XTEST_CIPH_CASE_AES_CTS(vect3, 11),
2208 XTEST_CIPH_CASE_AES_CTS(vect4, 9),
2209 XTEST_CIPH_CASE_AES_CTS(vect5, 7),
2210 XTEST_CIPH_CASE_AES_CTS(vect6, 17),
2211 XTEST_CIPH_CASE_AES_CTS(vect6, 0x20),
Jerome Forissiered00e162017-01-20 09:22:52 +01002212 XTEST_CIPH_CASE_AES_CTS(issue1203, 32),
Pascal Brandc639ac82015-07-02 08:53:34 +02002213
2214 /* DES */
2215 XTEST_CIPH_CASE_NO_IV(TEE_ALG_DES_ECB_NOPAD, TEE_TYPE_DES,
2216 ciph_data_des_key1, 14, ciph_data_in1,
2217 ciph_data_des_ecb_nopad_out1),
2218 XTEST_CIPH_CASE_NO_IV(TEE_ALG_DES_ECB_NOPAD, TEE_TYPE_DES,
2219 ciph_data_des_key2, 3, ciph_data_in2,
2220 ciph_data_des_ecb_nopad_out2),
2221 XTEST_CIPH_CASE(TEE_ALG_DES_CBC_NOPAD, TEE_TYPE_DES,
2222 ciph_data_des_key1, ciph_data_64_iv1, 15, ciph_data_in1,
2223 ciph_data_des_cbc_nopad_out1),
2224
2225 /* DES3 */
2226 XTEST_CIPH_CASE_NO_IV(TEE_ALG_DES3_ECB_NOPAD, TEE_TYPE_DES3,
2227 ciph_data_des3_key1, 11, ciph_data_in1,
2228 ciph_data_des3_ecb_nopad_out1),
2229 XTEST_CIPH_CASE_NO_IV(TEE_ALG_DES3_ECB_NOPAD, TEE_TYPE_DES3,
2230 ciph_data_des3_key2, 3, ciph_data_in2,
2231 ciph_data_des_ecb_nopad_out2),
2232 XTEST_CIPH_CASE(TEE_ALG_DES3_CBC_NOPAD, TEE_TYPE_DES3,
2233 ciph_data_des3_key1, ciph_data_64_iv1, 11,
2234 ciph_data_in1,
2235 ciph_data_des3_cbc_nopad_out1),
2236
2237 /* DES2 */
2238 XTEST_CIPH_CASE_NO_IV(TEE_ALG_DES3_ECB_NOPAD, TEE_TYPE_DES3,
2239 ciph_data_des2_key1, 11, ciph_data_in1,
2240 ciph_data_des2_ecb_nopad_out1),
2241 XTEST_CIPH_CASE(TEE_ALG_DES3_CBC_NOPAD, TEE_TYPE_DES3,
2242 ciph_data_des2_key1, ciph_data_64_iv1, 11,
2243 ciph_data_in1,
2244 ciph_data_des2_cbc_nopad_out1),
2245};
2246
2247static const struct xtest_ciph_case ciph_cases_xts[] = {
2248 /* AES-XTS */
2249 XTEST_CIPH_CASE_AES_XTS(vect1, 3),
2250 XTEST_CIPH_CASE_AES_XTS(vect2, 6),
2251 XTEST_CIPH_CASE_AES_XTS(vect3, 7),
2252 XTEST_CIPH_CASE_AES_XTS(vect4, 8),
2253 XTEST_CIPH_CASE_AES_XTS(vect5, 9),
2254 XTEST_CIPH_CASE_AES_XTS(vect6, 13),
2255 XTEST_CIPH_CASE_AES_XTS(vect7, 1),
2256 XTEST_CIPH_CASE_AES_XTS(vect8, 3),
2257 XTEST_CIPH_CASE_AES_XTS(vect9, 2),
2258 XTEST_CIPH_CASE_AES_XTS(vect10, 5),
2259 XTEST_CIPH_CASE_AES_XTS(vect11, 6),
2260 XTEST_CIPH_CASE_AES_XTS(vect12, 7),
2261 XTEST_CIPH_CASE_AES_XTS(vect13, 3),
2262 XTEST_CIPH_CASE_AES_XTS(vect14, 2),
2263 XTEST_CIPH_CASE_AES_XTS(vect15, 0),
2264 XTEST_CIPH_CASE_AES_XTS(vect16, 9),
2265 XTEST_CIPH_CASE_AES_XTS(vect17, 6),
2266 XTEST_CIPH_CASE_AES_XTS(vect18, 8),
2267 XTEST_CIPH_CASE_AES_XTS(vect19, 23),
2268};
2269
2270static void xtest_tee_test_4003_no_xts(ADBG_Case_t *c)
2271{
2272 TEEC_Session session = { 0 };
2273 TEE_OperationHandle op;
2274 TEE_ObjectHandle key1_handle = TEE_HANDLE_NULL;
2275 TEE_ObjectHandle key2_handle = TEE_HANDLE_NULL;
2276 uint8_t out[2048];
2277 size_t out_size;
2278 size_t out_offs;
2279 uint32_t ret_orig;
2280 size_t n;
2281
2282 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2283 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
2284 &ret_orig)))
2285 return;
2286
2287 for (n = 0; n < ARRAY_SIZE(ciph_cases); n++) {
2288 TEE_Attribute key_attr;
2289 size_t key_size;
2290 size_t op_key_size;
2291
2292
2293 Do_ADBG_BeginSubCase(c, "Cipher case %d algo 0x%x line %d",
2294 (int)n, (unsigned int)ciph_cases[n].algo,
2295 (int)ciph_cases[n].line);
2296
2297 key_attr.attributeID = TEE_ATTR_SECRET_VALUE;
2298 key_attr.content.ref.buffer = (void *)ciph_cases[n].key1;
2299 key_attr.content.ref.length = ciph_cases[n].key1_len;
2300
2301 key_size = key_attr.content.ref.length * 8;
2302 if (ciph_cases[n].key_type == TEE_TYPE_DES ||
2303 ciph_cases[n].key_type == TEE_TYPE_DES3)
2304 /* Exclude parity in bit size of key */
2305 key_size -= key_size / 8;
2306
2307 op_key_size = key_size;
2308 if (ciph_cases[n].key2 != NULL)
2309 op_key_size *= 2;
2310
2311 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2312 ta_crypt_cmd_allocate_operation(c, &session, &op,
2313 ciph_cases[n].algo, ciph_cases[n].mode,
2314 op_key_size)))
2315 goto out;
2316
2317 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2318 ta_crypt_cmd_allocate_transient_object(c, &session,
2319 ciph_cases[n].key_type, key_size,
2320 &key1_handle)))
2321 goto out;
2322
2323 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2324 ta_crypt_cmd_populate_transient_object(c, &session,
2325 key1_handle, &key_attr, 1)))
2326 goto out;
2327
2328 if (ciph_cases[n].key2 != NULL) {
2329 key_attr.content.ref.buffer =
2330 (void *)ciph_cases[n].key2;
2331 key_attr.content.ref.length = ciph_cases[n].key2_len;
2332
2333 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2334 ta_crypt_cmd_allocate_transient_object(c,
2335 &session, ciph_cases[n].key_type,
2336 key_attr.content.ref.length * 8,
2337 &key2_handle)))
2338 goto out;
2339
2340 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2341 ta_crypt_cmd_populate_transient_object(c,
2342 &session, key2_handle, &key_attr, 1)))
2343 goto out;
2344
2345 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2346 ta_crypt_cmd_set_operation_key2(c, &session, op,
2347 key1_handle, key2_handle)))
2348 goto out;
2349 } else {
2350 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2351 ta_crypt_cmd_set_operation_key(c, &session, op,
2352 key1_handle)))
2353 goto out;
2354 }
2355
2356 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2357 ta_crypt_cmd_free_transient_object(c, &session,
2358 key1_handle)))
2359 goto out;
2360 key1_handle = TEE_HANDLE_NULL;
2361
2362 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2363 ta_crypt_cmd_free_transient_object(c, &session,
2364 key2_handle)))
2365 goto out;
2366 key2_handle = TEE_HANDLE_NULL;
2367
2368 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2369 ta_crypt_cmd_cipher_init(c, &session, op,
2370 ciph_cases[n].iv, ciph_cases[n].iv_len)))
2371 goto out;
2372
2373 out_offs = 0;
2374 out_size = sizeof(out);
2375 memset(out, 0, sizeof(out));
2376 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2377 ta_crypt_cmd_cipher_update(c, &session, op,
2378 ciph_cases[n].in, ciph_cases[n].in_incr, out,
2379 &out_size)))
2380 goto out;
2381
Jerome Forissierd2d94b42017-06-02 16:39:34 +02002382 if (ciph_cases[n].algo == TEE_ALG_AES_CTR)
2383 ADBG_EXPECT_COMPARE_UNSIGNED(c, out_size, ==,
2384 ciph_cases[n].in_incr);
2385
Pascal Brandc639ac82015-07-02 08:53:34 +02002386 out_offs += out_size;
2387 out_size = sizeof(out) - out_offs;
2388
2389 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2390 ta_crypt_cmd_cipher_do_final(c, &session, op,
2391 ciph_cases[n].in + ciph_cases[n].in_incr,
2392 ciph_cases[n].in_len - ciph_cases[n].in_incr,
2393 out + out_offs,
2394 &out_size)))
2395 goto out;
2396
2397 out_offs += out_size;
2398
2399 (void)ADBG_EXPECT_BUFFER(c, ciph_cases[n].out,
2400 ciph_cases[n].out_len, out, out_offs);
2401
2402 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2403 ta_crypt_cmd_free_operation(c, &session, op)))
2404 goto out;
2405
2406 Do_ADBG_EndSubCase(c, NULL);
2407 }
2408out:
2409 TEEC_CloseSession(&session);
2410}
2411
2412/*
2413 * This is a split of the original xtest 4003 as eary version of the ST TEE.
2414 *
2415 * Core did not support xts.
2416 */
2417static void xtest_tee_test_4003_xts(ADBG_Case_t *c)
2418{
2419 TEEC_Session session = { 0 };
2420 TEE_OperationHandle op;
2421 TEE_ObjectHandle key1_handle = TEE_HANDLE_NULL;
2422 TEE_ObjectHandle key2_handle = TEE_HANDLE_NULL;
2423 uint8_t out[2048];
2424 size_t out_size;
2425 size_t out_offs;
2426 uint32_t ret_orig;
2427 size_t n;
2428
2429 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2430 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
2431 &ret_orig)))
2432 return;
2433
2434 for (n = 0; n < ARRAY_SIZE(ciph_cases_xts); n++) {
2435 TEE_Attribute key_attr;
2436 size_t key_size;
2437 size_t op_key_size;
2438
2439 Do_ADBG_BeginSubCase(c, "Cipher case %d algo 0x%x line %d",
2440 (int)n,
2441 (unsigned int)ciph_cases_xts[n].algo,
2442 (int)ciph_cases_xts[n].line);
2443
2444 key_attr.attributeID = TEE_ATTR_SECRET_VALUE;
2445 key_attr.content.ref.buffer = (void *)ciph_cases_xts[n].key1;
2446 key_attr.content.ref.length = ciph_cases_xts[n].key1_len;
2447
2448 key_size = key_attr.content.ref.length * 8;
2449 if (ciph_cases_xts[n].key_type == TEE_TYPE_DES ||
2450 ciph_cases_xts[n].key_type == TEE_TYPE_DES3)
2451 /* Exclude parity in bit size of key */
2452 key_size -= key_size / 8;
2453
2454 op_key_size = key_size;
2455 if (ciph_cases_xts[n].key2 != NULL)
2456 op_key_size *= 2;
2457
2458 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2459 ta_crypt_cmd_allocate_operation(c, &session, &op,
2460 ciph_cases_xts[n].algo, ciph_cases_xts[n].mode,
2461 op_key_size)))
2462 goto out;
2463
2464 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2465 ta_crypt_cmd_allocate_transient_object(c, &session,
2466 ciph_cases_xts[n].key_type, key_size,
2467 &key1_handle)))
2468 goto out;
2469
2470 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2471 ta_crypt_cmd_populate_transient_object(c, &session,
2472 key1_handle, &key_attr, 1)))
2473 goto out;
2474
2475 if (ciph_cases_xts[n].key2 != NULL) {
2476 key_attr.content.ref.buffer =
2477 (void *)ciph_cases_xts[n].key2;
2478
2479 key_attr.content.ref.length =
2480 ciph_cases_xts[n].key2_len;
2481
2482 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2483 ta_crypt_cmd_allocate_transient_object(c,
2484 &session, ciph_cases_xts[n].key_type,
2485 key_attr.content.ref.length * 8,
2486 &key2_handle)))
2487 goto out;
2488
2489 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2490 ta_crypt_cmd_populate_transient_object(c,
2491 &session, key2_handle, &key_attr, 1)))
2492 goto out;
2493
2494 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2495 ta_crypt_cmd_set_operation_key2(c, &session, op,
2496 key1_handle, key2_handle)))
2497 goto out;
2498 } else {
2499 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2500 ta_crypt_cmd_set_operation_key(c, &session, op,
2501 key1_handle)))
2502 goto out;
2503 }
2504
2505 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2506 ta_crypt_cmd_free_transient_object(c, &session,
2507 key1_handle)))
2508 goto out;
2509
2510 key1_handle = TEE_HANDLE_NULL;
2511
2512 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2513 ta_crypt_cmd_free_transient_object(c, &session,
2514 key2_handle)))
2515 goto out;
2516
2517 key2_handle = TEE_HANDLE_NULL;
2518
2519 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_cipher_init(c,
2520 &
2521 session,
2522 op,
2523 ciph_cases_xts
2524 [n].iv, ciph_cases_xts[n].iv_len)))
2525 goto out;
2526
2527 out_offs = 0;
2528 out_size = sizeof(out);
2529 memset(out, 0, sizeof(out));
2530 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2531 ta_crypt_cmd_cipher_update(c, &session, op,
2532 ciph_cases_xts[n].in, ciph_cases_xts[n].in_incr,
2533 out, &out_size)))
2534 goto out;
2535
2536 out_offs += out_size;
2537 out_size = sizeof(out) - out_offs;
2538
2539 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2540 ta_crypt_cmd_cipher_do_final(c, &session, op,
2541 ciph_cases_xts[n].in +
2542 ciph_cases_xts[n].in_incr,
2543 ciph_cases_xts[n].in_len -
2544 ciph_cases_xts[n].in_incr,
2545 out + out_offs,
2546 &out_size)))
2547 goto out;
2548 out_offs += out_size;
2549
2550 (void)ADBG_EXPECT_BUFFER(c, ciph_cases_xts[n].out,
2551 ciph_cases_xts[n].out_len, out,
2552 out_offs);
2553
2554 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2555 ta_crypt_cmd_free_operation(c, &session, op)))
2556 goto out;
2557
2558 Do_ADBG_EndSubCase(c, NULL);
2559 }
2560out:
2561 TEEC_CloseSession(&session);
2562}
2563
2564static void xtest_tee_test_4004(ADBG_Case_t *c)
2565{
2566 TEEC_Session session = { 0 };
2567 uint32_t ret_orig;
2568 uint8_t buf1[45] = { 0 };
2569 uint8_t buf2[45] = { 0 };
2570 static const uint8_t zeros[45] = { 0 };
2571
2572 Do_ADBG_BeginSubCase(c, "TEE get random");
2573 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2574 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
2575 &ret_orig)))
2576 return;
2577
2578 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2579 ta_crypt_cmd_random_number_generate(c, &session, buf1,
2580 sizeof(buf1))))
2581 goto out;
2582
2583 (void)ADBG_EXPECT_COMPARE_SIGNED(c,
2584 0, !=, memcmp(buf1, zeros, sizeof(buf1)));
2585
2586 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2587 ta_crypt_cmd_random_number_generate(c, &session, buf2,
2588 sizeof(buf2))))
2589 goto out;
2590
2591 (void)ADBG_EXPECT_COMPARE_SIGNED(c,
2592 0, !=, memcmp(buf2, zeros, sizeof(buf2)));
2593
2594 (void)ADBG_EXPECT_COMPARE_SIGNED(c,
2595 0, !=, memcmp(buf2, buf1, sizeof(buf1)));
2596out:
2597 TEEC_CloseSession(&session);
2598 Do_ADBG_EndSubCase(c, "TEE get random");
2599}
2600
2601
2602struct xtest_ae_case {
2603 uint32_t algo;
2604 uint32_t mode;
2605 uint32_t key_type;
2606 const uint8_t *key;
2607 size_t key_len;
2608 const uint8_t *nonce;
2609 size_t nonce_len;
2610 size_t aad_incr;
2611 const uint8_t *aad;
2612 size_t aad_len;
2613 size_t in_incr;
2614 const uint8_t *ptx;
2615 size_t ptx_len;
2616 const uint8_t *ctx;
2617 size_t ctx_len;
2618 const uint8_t *tag;
2619 size_t tag_len;
2620 size_t line;
2621};
2622
2623
2624#define ARRAY(a) a, ARRAY_SIZE(a)
2625#define NULL_ARRAY(a) NULL, 0
2626
2627#define XTEST_AE_CASE(algo, vect, aad_incr, in_incr, \
2628 aad_array, ptx_array, ctx_array) \
2629 { (algo), TEE_MODE_ENCRYPT, TEE_TYPE_AES, ARRAY(vect ## _key), \
2630 ARRAY(vect ## _nonce), (aad_incr), \
2631 aad_array(vect ## _aad), (in_incr), \
2632 ptx_array(vect ## _ptx), ctx_array(vect ## _ctx), \
2633 ARRAY(vect ## _tag), \
2634 __LINE__ }, \
2635 { (algo), TEE_MODE_DECRYPT, TEE_TYPE_AES, ARRAY(vect ## _key), \
2636 ARRAY(vect ## _nonce), (aad_incr), \
2637 aad_array(vect ## _aad), (in_incr), \
2638 ptx_array(vect ## _ptx), ctx_array(vect ## _ctx), \
2639 ARRAY(vect ## _tag), \
2640 __LINE__ }
2641
2642#define XTEST_AE_CASE_AES_CCM(vect, aad_incr, in_incr) \
2643 XTEST_AE_CASE(TEE_ALG_AES_CCM, ae_data_aes_ccm_ ## vect, aad_incr, \
2644 in_incr, ARRAY, ARRAY, ARRAY)
2645
2646#define XTEST_AE_CASE_AES_GCM(vect, aad_incr, in_incr, \
2647 aad_array, ptx_array, ctx_array) \
2648 XTEST_AE_CASE(TEE_ALG_AES_GCM, ae_data_aes_gcm_ ## vect, aad_incr, \
2649 in_incr, aad_array, ptx_array, ctx_array)
2650
2651
2652
2653static const struct xtest_ae_case ae_cases[] = {
2654 XTEST_AE_CASE_AES_CCM(vect1, 3, 2),
2655 XTEST_AE_CASE_AES_CCM(vect2, 7, 13),
2656 XTEST_AE_CASE_AES_CCM(vect3, 5, 21),
2657
2658 XTEST_AE_CASE_AES_GCM(vect1, 0, 0, NULL_ARRAY, NULL_ARRAY, NULL_ARRAY),
2659 XTEST_AE_CASE_AES_GCM(vect2, 0, 9, NULL_ARRAY, ARRAY, ARRAY),
2660 XTEST_AE_CASE_AES_GCM(vect3, 0, 9, NULL_ARRAY, ARRAY, ARRAY),
Jens Wiklander9fc63f52017-11-10 11:13:26 +01002661 XTEST_AE_CASE_AES_GCM(vect3, 0, 0x1F, NULL_ARRAY, ARRAY, ARRAY),
2662 XTEST_AE_CASE_AES_GCM(vect4, 5, 0x20, ARRAY, ARRAY, ARRAY),
Pascal Brandc639ac82015-07-02 08:53:34 +02002663 XTEST_AE_CASE_AES_GCM(vect5, 5, 9, ARRAY, ARRAY, ARRAY),
2664 XTEST_AE_CASE_AES_GCM(vect6, 5, 9, ARRAY, ARRAY, ARRAY),
2665 XTEST_AE_CASE_AES_GCM(vect7, 0, 0, NULL_ARRAY, NULL_ARRAY, NULL_ARRAY),
2666 XTEST_AE_CASE_AES_GCM(vect8, 0, 9, NULL_ARRAY, ARRAY, ARRAY),
2667 XTEST_AE_CASE_AES_GCM(vect9, 0, 9, NULL_ARRAY, ARRAY, ARRAY),
2668 XTEST_AE_CASE_AES_GCM(vect10, 5, 9, ARRAY, ARRAY, ARRAY),
2669 XTEST_AE_CASE_AES_GCM(vect11, 5, 9, ARRAY, ARRAY, ARRAY),
2670 XTEST_AE_CASE_AES_GCM(vect12, 5, 9, ARRAY, ARRAY, ARRAY),
2671 XTEST_AE_CASE_AES_GCM(vect13, 0, 0, NULL_ARRAY, NULL_ARRAY, NULL_ARRAY),
2672 XTEST_AE_CASE_AES_GCM(vect14, 0, 9, NULL_ARRAY, ARRAY, ARRAY),
2673 XTEST_AE_CASE_AES_GCM(vect15, 0, 9, NULL_ARRAY, ARRAY, ARRAY),
2674 XTEST_AE_CASE_AES_GCM(vect16, 5, 9, ARRAY, ARRAY, ARRAY),
2675 XTEST_AE_CASE_AES_GCM(vect17, 5, 9, ARRAY, ARRAY, ARRAY),
2676 XTEST_AE_CASE_AES_GCM(vect18, 5, 9, ARRAY, ARRAY, ARRAY),
Jens Wiklanderf6efe242017-11-06 13:16:43 +01002677#ifdef CFG_GCM_NIST_VECTORS
2678#include "gcmDecrypt128.h"
2679#include "gcmDecrypt192.h"
2680#include "gcmDecrypt256.h"
2681#include "gcmEncryptExtIV128.h"
2682#include "gcmEncryptExtIV192.h"
2683#include "gcmEncryptExtIV256.h"
2684#endif
Pascal Brandc639ac82015-07-02 08:53:34 +02002685};
2686
2687static void xtest_tee_test_4005(ADBG_Case_t *c)
2688{
2689 TEEC_Session session = { 0 };
2690 TEE_OperationHandle op;
2691 TEE_ObjectHandle key_handle = TEE_HANDLE_NULL;
2692 TEE_Attribute key_attr;
2693 uint8_t out[512];
2694 size_t out_size;
2695 size_t out_offs;
2696 uint32_t ret_orig;
2697 size_t n;
2698
2699 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2700 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
2701 &ret_orig)))
2702 return;
2703
2704 for (n = 0; n < ARRAY_SIZE(ae_cases); n++) {
2705 Do_ADBG_BeginSubCase(c, "AE case %d algo 0x%x line %d",
2706 (int)n, (unsigned int)ae_cases[n].algo,
2707 (int)ae_cases[n].line);
2708
2709 key_attr.attributeID = TEE_ATTR_SECRET_VALUE;
2710 key_attr.content.ref.buffer = (void *)ae_cases[n].key;
2711 key_attr.content.ref.length = ae_cases[n].key_len;
2712
2713 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2714 ta_crypt_cmd_allocate_operation(c, &session, &op,
2715 ae_cases[n].algo, ae_cases[n].mode,
2716 key_attr.content.ref.length * 8)))
2717 goto out;
2718
2719 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2720 ta_crypt_cmd_allocate_transient_object(c, &session,
2721 ae_cases[n].key_type,
2722 key_attr.content.ref.length * 8,
2723 &key_handle)))
2724 goto out;
2725
2726 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2727 ta_crypt_cmd_populate_transient_object(c, &session,
2728 key_handle, &key_attr, 1)))
2729 goto out;
2730
2731 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2732 ta_crypt_cmd_set_operation_key(c, &session, op,
2733 key_handle)))
2734 goto out;
2735
2736 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2737 ta_crypt_cmd_free_transient_object(c, &session,
2738 key_handle)))
2739 goto out;
2740 key_handle = TEE_HANDLE_NULL;
2741
2742 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2743 ta_crypt_cmd_ae_init(c, &session, op, ae_cases[n].nonce,
2744 ae_cases[n].nonce_len, ae_cases[n].tag_len,
2745 ae_cases[n].aad_len, ae_cases[n].ptx_len)))
2746 goto out;
2747
2748 if (ae_cases[n].aad != NULL) {
2749 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2750 ta_crypt_cmd_ae_update_aad(c, &session, op,
2751 ae_cases[n].aad, ae_cases[n].aad_incr)))
2752 goto out;
2753
2754 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2755 ta_crypt_cmd_ae_update_aad(c, &session, op,
2756 ae_cases[n].aad + ae_cases[n].aad_incr,
2757 ae_cases [n].aad_len -
2758 ae_cases[n].aad_incr)))
2759 goto out;
2760 }
2761
2762 out_offs = 0;
2763 out_size = sizeof(out);
2764 memset(out, 0, sizeof(out));
2765 if (ae_cases[n].mode == TEE_MODE_ENCRYPT) {
2766 if (ae_cases[n].ptx != NULL) {
2767 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2768 ta_crypt_cmd_ae_update(c, &session, op,
2769 ae_cases[n].ptx,
2770 ae_cases[n].in_incr, out,
2771 &out_size)))
2772 goto out;
2773 out_offs += out_size;
Jerome Forissierc13fafa2017-06-01 15:49:07 +02002774 if (ae_cases[n].algo == TEE_ALG_AES_GCM)
2775 ADBG_EXPECT_COMPARE_UNSIGNED(c,
2776 out_size, ==, ae_cases[n].in_incr);
Pascal Brandc639ac82015-07-02 08:53:34 +02002777 }
2778 } else {
2779 if (ae_cases[n].ctx != NULL) {
2780 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2781 ta_crypt_cmd_ae_update(c, &session, op,
2782 ae_cases[n].ctx,
2783 ae_cases[n].in_incr, out,
2784 &out_size)))
2785 goto out;
2786 out_offs += out_size;
Jerome Forissierc13fafa2017-06-01 15:49:07 +02002787 if (ae_cases[n].algo == TEE_ALG_AES_GCM)
2788 ADBG_EXPECT_COMPARE_UNSIGNED(c,
2789 out_size, ==, ae_cases[n].in_incr);
Pascal Brandc639ac82015-07-02 08:53:34 +02002790 }
2791 }
2792
2793 out_size = sizeof(out) - out_offs;
2794 if (ae_cases[n].mode == TEE_MODE_ENCRYPT) {
2795 uint8_t out_tag[64];
2796 size_t out_tag_len = MIN(sizeof(out_tag),
2797 ae_cases[n].tag_len);
2798
2799 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2800 ta_crypt_cmd_ae_encrypt_final(c, &session, op,
2801 ae_cases[n].ptx + ae_cases[n].in_incr,
2802 ae_cases[n].ptx_len -
2803 ae_cases[n].in_incr,
2804 out + out_offs,
2805 &out_size, out_tag, &out_tag_len)))
2806 goto out;
2807
2808 (void)ADBG_EXPECT_BUFFER(c,
2809 ae_cases[n].tag, ae_cases[n].tag_len, out_tag,
2810 out_tag_len);
2811
2812 out_offs += out_size;
2813
2814 (void)ADBG_EXPECT_BUFFER(c, ae_cases[n].ctx,
2815 ae_cases[n].ctx_len, out, out_offs);
2816 } else {
2817 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2818 ta_crypt_cmd_ae_decrypt_final(c, &session, op,
2819 ae_cases[n].ctx + ae_cases[n].in_incr,
2820 ae_cases[n].ctx_len -
2821 ae_cases[n].in_incr,
2822 out + out_offs,
2823 &out_size, ae_cases[n].tag,
2824 ae_cases[n].tag_len)))
2825 goto out;
2826
2827 out_offs += out_size;
2828
2829 (void)ADBG_EXPECT_BUFFER(c, ae_cases[n].ptx,
2830 ae_cases[n].ptx_len, out, out_offs);
2831 }
2832
2833 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2834 ta_crypt_cmd_free_operation(c, &session, op)))
2835 goto out;
2836
2837 Do_ADBG_EndSubCase(c, NULL);
2838 }
2839out:
2840 TEEC_CloseSession(&session);
2841}
2842
2843struct xtest_ac_case {
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02002844 unsigned int level;
Pascal Brandc639ac82015-07-02 08:53:34 +02002845 uint32_t algo;
2846 TEE_OperationMode mode;
2847
2848 union {
2849 struct {
2850 const uint8_t *modulus;
2851 size_t modulus_len;
2852
2853 const uint8_t *pub_exp;
2854 size_t pub_exp_len;
2855
2856 const uint8_t *priv_exp;
2857 size_t priv_exp_len;
2858
2859 const uint8_t *prime1; /* q */
2860 size_t prime1_len;
2861 const uint8_t *prime2; /* p */
2862 size_t prime2_len;
2863 const uint8_t *exp1; /* dp */
2864 size_t exp1_len;
2865 const uint8_t *exp2; /* dq */
2866 size_t exp2_len;
2867 const uint8_t *coeff; /* iq */
2868 size_t coeff_len;
2869
2870 int salt_len;
2871 } rsa;
2872 struct {
2873 const uint8_t *prime;
2874 size_t prime_len;
2875 const uint8_t *sub_prime;
2876 size_t sub_prime_len;
2877 const uint8_t *base;
2878 size_t base_len;
2879 const uint8_t *pub_val;
2880 size_t pub_val_len;
2881 const uint8_t *priv_val;
2882 size_t priv_val_len;
2883 } dsa;
Pascal Brand3e143ee2015-07-15 17:17:16 +02002884 struct {
2885 const uint8_t *private;
2886 size_t private_len;
2887 const uint8_t *public_x;
2888 size_t public_x_len;
2889 const uint8_t *public_y;
2890 size_t public_y_len;
2891 } ecdsa;
Pascal Brandc639ac82015-07-02 08:53:34 +02002892 } params;
2893
2894 const uint8_t *ptx;
2895 size_t ptx_len;
2896 const uint8_t *ctx;
2897 size_t ctx_len;
2898 size_t line;
2899};
2900
2901#define WITHOUT_SALT(x) -1
2902#define WITH_SALT(x) x
2903
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02002904#define XTEST_AC_CASE(level, algo, mode, vect, union_params) \
2905 { level, (algo), (mode), .params = union_params, \
Pascal Brandc639ac82015-07-02 08:53:34 +02002906 ARRAY(vect ## _ptx), \
2907 ARRAY(vect ## _out), \
2908 __LINE__ }
2909
2910#define XTEST_AC_RSA_UNION(vect, opt_crt_array, opt_salt) \
2911 { .rsa = { \
2912 ARRAY(vect ## _modulus), \
2913 ARRAY(vect ## _pub_exp), \
2914 ARRAY(vect ## _priv_exp), \
2915 opt_crt_array(vect ## _prime1), \
2916 opt_crt_array(vect ## _prime2), \
2917 opt_crt_array(vect ## _exp1), \
2918 opt_crt_array(vect ## _exp2), \
2919 opt_crt_array(vect ## _coeff), \
2920 opt_salt(vect ## _salt_len) \
2921 } }
2922
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002923#define XTEST_AC_RSA_CASE(level, algo, mode, vect, opt_crt_array, opt_salt) \
2924 XTEST_AC_CASE(level, algo, mode, vect, \
Pascal Brandc639ac82015-07-02 08:53:34 +02002925 XTEST_AC_RSA_UNION(vect, opt_crt_array, opt_salt))
2926
2927#define XTEST_AC_DSA_UNION(vect) \
2928 { .dsa = { \
2929 ARRAY(vect ## _prime), \
2930 ARRAY(vect ## _sub_prime), \
2931 ARRAY(vect ## _base), \
2932 ARRAY(vect ## _pub_val), \
2933 ARRAY(vect ## _priv_val), \
2934 } }
2935
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02002936#define XTEST_AC_DSA_CASE(level, algo, mode, vect) \
2937 XTEST_AC_CASE(level, algo, mode, vect, XTEST_AC_DSA_UNION(vect))
Pascal Brandc639ac82015-07-02 08:53:34 +02002938
Pascal Brand3e143ee2015-07-15 17:17:16 +02002939#define XTEST_AC_ECDSA_UNION(vect) \
2940 { .ecdsa = { \
2941 ARRAY(vect ## _private), \
2942 ARRAY(vect ## _public_x), \
2943 ARRAY(vect ## _public_y), \
2944 } }
2945
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02002946#define XTEST_AC_ECDSA_CASE(level, algo, mode, vect) \
2947 XTEST_AC_CASE(level, algo, mode, vect, XTEST_AC_ECDSA_UNION(vect))
Pascal Brand3e143ee2015-07-15 17:17:16 +02002948
Pascal Brandc639ac82015-07-02 08:53:34 +02002949static const struct xtest_ac_case xtest_ac_cases[] = {
2950 /* RSA test without crt parameters */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002951 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002952 ac_rsassa_vect1, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002953 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002954 ac_rsassa_vect1, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002955 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002956 ac_rsassa_vect2, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002957 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002958 ac_rsassa_vect2, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002959 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002960 ac_rsassa_vect3, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002961 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002962 ac_rsassa_vect3, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002963 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002964 ac_rsassa_vect4, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002965 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002966 ac_rsassa_vect4, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002967 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002968 ac_rsassa_vect5, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002969 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002970 ac_rsassa_vect5, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002971 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002972 ac_rsassa_vect6, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002973 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002974 ac_rsassa_vect6, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002975 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002976 ac_rsassa_vect7, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002977 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002978 ac_rsassa_vect7, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002979 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
2980 ac_rsassa_vect8, NULL_ARRAY, WITHOUT_SALT),
2981 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
2982 ac_rsassa_vect8, NULL_ARRAY, WITHOUT_SALT),
Pascal Brandc639ac82015-07-02 08:53:34 +02002983
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002984 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA224, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002985 ac_rsassa_vect16, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002986 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA224, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002987 ac_rsassa_vect16, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002988
2989 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA256, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002990 ac_rsassa_vect9, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002991 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA256, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002992 ac_rsassa_vect9, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002993
2994 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA384, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002995 ac_rsassa_vect10, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002996 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA384, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002997 ac_rsassa_vect10, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002998
2999 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA512, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003000 ac_rsassa_vect11, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003001 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA512, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003002 ac_rsassa_vect11, NULL_ARRAY, WITHOUT_SALT),
3003
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003004 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA1,
3005 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003006 ac_rsassa_vect12, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003007 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003008 ac_rsassa_vect12, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003009
3010 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA224,
3011 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003012 ac_rsassa_vect17, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003013 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA224,
3014 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003015 ac_rsassa_vect17, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003016
3017 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA256,
3018 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003019 ac_rsassa_vect13, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003020 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA256,
3021 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003022 ac_rsassa_vect13, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003023
3024 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA384,
3025 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003026 ac_rsassa_vect14, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003027 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA384,
3028 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003029 ac_rsassa_vect14, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003030
3031 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA512,
3032 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003033 ac_rsassa_vect15, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003034 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA512,
3035 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003036 ac_rsassa_vect15, NULL_ARRAY, WITH_SALT),
3037
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003038 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003039 ac_rsaes_pkcs1_v1_5_vect1, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003040 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003041 ac_rsaes_pkcs1_v1_5_vect1, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003042 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003043 ac_rsaes_pkcs1_v1_5_vect2, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003044 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003045 ac_rsaes_pkcs1_v1_5_vect2, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003046 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003047 ac_rsaes_pkcs1_v1_5_vect15, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003048 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003049 ac_rsaes_pkcs1_v1_5_vect15, NULL_ARRAY, WITHOUT_SALT),
3050
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003051 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3052 TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003053 ac_rsaes_oaep_vect1, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003054 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3055 TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003056 ac_rsaes_oaep_vect1, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003057 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3058 TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003059 ac_rsaes_oaep_vect2, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003060 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3061 TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003062 ac_rsaes_oaep_vect2, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003063 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3064 TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003065 ac_rsaes_oaep_vect10, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003066 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3067 TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003068 ac_rsaes_oaep_vect10, NULL_ARRAY, WITHOUT_SALT),
3069
3070 /* RSA test with crt parameters */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003071 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003072 ac_rsassa_vect1, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003073 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003074 ac_rsassa_vect1, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003075 XTEST_AC_RSA_CASE(1, TEE_ALG_RSA_NOPAD, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003076 ac_rsassa_vect2, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003077 XTEST_AC_RSA_CASE(1, TEE_ALG_RSA_NOPAD, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003078 ac_rsassa_vect2, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003079 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003080 ac_rsassa_vect3, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003081 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003082 ac_rsassa_vect3, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003083 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003084 ac_rsassa_vect4, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003085 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003086 ac_rsassa_vect4, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003087 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003088 ac_rsassa_vect5, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003089 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003090 ac_rsassa_vect5, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003091 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003092 ac_rsassa_vect6, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003093 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003094 ac_rsassa_vect6, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003095 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003096 ac_rsassa_vect7, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003097 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003098 ac_rsassa_vect7, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003099 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003100 ac_rsassa_vect8, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003101 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003102 ac_rsassa_vect8, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003103 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA256, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003104 ac_rsassa_vect9, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003105 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA256, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003106 ac_rsassa_vect9, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003107 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA384, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003108 ac_rsassa_vect10, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003109 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA384, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003110 ac_rsassa_vect10, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003111 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA512, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003112 ac_rsassa_vect11, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003113 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA512, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003114 ac_rsassa_vect11, ARRAY, WITHOUT_SALT),
3115
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003116 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA1,
3117 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003118 ac_rsassa_vect12, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003119 XTEST_AC_RSA_CASE(1,TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003120 ac_rsassa_vect12, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003121 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA224,
3122 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003123 ac_rsassa_vect17, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003124 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA224,
3125 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003126 ac_rsassa_vect17, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003127 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA256,
3128 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003129 ac_rsassa_vect13, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003130 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA256,
3131 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003132 ac_rsassa_vect13, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003133 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA384,
3134 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003135 ac_rsassa_vect14, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003136 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA384,
3137 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003138 ac_rsassa_vect14, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003139 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA512,
3140 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003141 ac_rsassa_vect15, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003142 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA512,
3143 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003144 ac_rsassa_vect15, ARRAY, WITH_SALT),
3145
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003146 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003147 ac_rsaes_pkcs1_v1_5_vect1, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003148 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003149 ac_rsaes_pkcs1_v1_5_vect1, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003150 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003151 ac_rsaes_pkcs1_v1_5_vect2, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003152 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003153 ac_rsaes_pkcs1_v1_5_vect2, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003154 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003155 ac_rsaes_pkcs1_v1_5_vect15, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003156 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003157 ac_rsaes_pkcs1_v1_5_vect15, ARRAY, WITHOUT_SALT),
3158
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003159 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3160 TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003161 ac_rsaes_oaep_vect1, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003162 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3163 TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003164 ac_rsaes_oaep_vect1, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003165 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3166 TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003167 ac_rsaes_oaep_vect2, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003168 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3169 TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003170 ac_rsaes_oaep_vect2, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003171 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3172 TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003173 ac_rsaes_oaep_vect10, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003174 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3175 TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003176 ac_rsaes_oaep_vect10, ARRAY, WITHOUT_SALT),
3177
3178 /* DSA tests */
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003179 /* [mod = L=1024, N=160, SHA-1] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003180 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect1),
3181 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect1),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003182 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect2),
3183 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect2),
3184 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect3),
3185 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect3),
3186 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect4),
3187 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect4),
3188 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect5),
3189 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect5),
3190 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect6),
3191 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect6),
3192 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect7),
3193 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect7),
3194 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect8),
3195 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect8),
3196 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect9),
3197 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect9),
3198 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect10),
3199 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect10),
3200 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect11),
3201 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect11),
3202 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect12),
3203 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect12),
3204 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect13),
3205 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect13),
3206 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect14),
3207 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect14),
3208 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect15),
3209 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect15),
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003210 /* [mod = L=1024, N=160, SHA-224] - GP NOT SUPPORTED */
3211 /* [mod = L=1024, N=160, SHA-256] - GP NOT SUPPORTED */
3212 /* [mod = L=1024, N=160, SHA-384] - GP NOT SUPPORTED */
3213 /* [mod = L=1024, N=160, SHA-512] - GP NOT SUPPORTED */
3214 /* [mod = L=2048, N=224, SHA-1] - GP NOT SUPPORTED */
3215 /* [mod = L=2048, N=224, SHA-224] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003216 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect91),
3217 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect91),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003218 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect92),
3219 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect92),
3220 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect93),
3221 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect93),
3222 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect94),
3223 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect94),
3224 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect95),
3225 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect95),
3226 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect96),
3227 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect96),
3228 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect97),
3229 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect97),
3230 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect98),
3231 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect98),
3232 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect99),
3233 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect99),
3234 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect100),
3235 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect100),
3236 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect101),
3237 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect101),
3238 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect102),
3239 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect102),
3240 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect103),
3241 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect103),
3242 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect104),
3243 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect104),
3244 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect105),
3245 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect105),
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003246 /* [mod = L=2048, N=224, SHA-256] */
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003247 XTEST_AC_DSA_CASE(0, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect106),
3248 XTEST_AC_DSA_CASE(0, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect106),
3249 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect107),
3250 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect107),
3251 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect108),
3252 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect108),
3253 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect109),
3254 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect109),
3255 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect110),
3256 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect110),
3257 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect111),
3258 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect111),
3259 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect112),
3260 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect112),
3261 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect113),
3262 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect113),
3263 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect114),
3264 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect114),
3265 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect115),
3266 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect115),
3267 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect116),
3268 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect116),
3269 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect117),
3270 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect117),
3271 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect118),
3272 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect118),
3273 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect119),
3274 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect119),
3275 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect120),
3276 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect120),
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003277 /* [mod = L=2048, N=224, SHA-384] - GP NOT SUPPORTED */
3278 /* [mod = L=2048, N=224, SHA-512] - GP NOT SUPPORTED */
3279 /* [mod = L=2048, N=256, SHA-1] - GP NOT SUPPORTED */
3280 /* [mod = L=2048, N=256, SHA-224] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003281 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect166),
3282 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect166),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003283 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect167),
3284 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect167),
3285 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect168),
3286 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect168),
3287 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect169),
3288 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect169),
3289 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect170),
3290 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect170),
3291 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect171),
3292 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect171),
3293 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect172),
3294 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect172),
3295 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect173),
3296 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect173),
3297 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect174),
3298 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect174),
3299 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect175),
3300 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect175),
3301 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect176),
3302 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect176),
3303 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect177),
3304 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect177),
3305 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect178),
3306 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect178),
3307 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect179),
3308 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect179),
3309 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect180),
3310 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect180),
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003311 /* [mod = L=2048, N=256, SHA-256] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003312 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect181),
3313 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect181),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003314 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect182),
3315 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect182),
3316 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect183),
3317 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect183),
3318 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect184),
3319 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect184),
3320 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect185),
3321 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect185),
3322 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect186),
3323 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect186),
3324 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect187),
3325 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect187),
3326 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect188),
3327 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect188),
3328 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect189),
3329 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect189),
3330 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect190),
3331 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect190),
3332 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect191),
3333 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect191),
3334 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect192),
3335 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect192),
3336 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect193),
3337 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect193),
3338 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect194),
3339 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect194),
3340 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect195),
3341 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect195),
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003342 /* [mod = L=2048, N=256, SHA-384] - GP NOT SUPPORTED */
3343 /* [mod = L=2048, N=256, SHA-512] - GP NOT SUPPORTED */
3344 /* [mod = L=3072, N=256, SHA-1] - GP NOT SUPPORTED */
3345 /* [mod = L=3072, N=256, SHA-224] - GP NOT SUPPORTED */
3346 /* [mod = L=3072, N=256, SHA-256] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003347 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect256),
3348 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect256),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003349 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect257),
3350 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect257),
3351 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect258),
3352 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect258),
3353 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect259),
3354 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect259),
3355 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect260),
3356 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect260),
3357 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect261),
3358 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect261),
3359 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect262),
3360 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect262),
3361 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect263),
3362 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect263),
3363 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect264),
3364 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect264),
3365 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect265),
3366 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect265),
3367 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect266),
3368 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect266),
3369 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect267),
3370 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect267),
3371 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect268),
3372 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect268),
3373 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect269),
3374 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect269),
3375 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect270),
3376 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect270),
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003377 /* [mod = L=3072, N=256, SHA-384] - GP NOT SUPPORTED */
3378 /* [mod = L=3072, N=256, SHA-512] - GP NOT SUPPORTED */
Pascal Brand3e143ee2015-07-15 17:17:16 +02003379
3380 /* ECDSA tests */
Cedric Chaumontc7654962015-09-09 14:56:36 +02003381 /* [P-192] */
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003382 XTEST_AC_ECDSA_CASE(0, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003383 nist_186_2_ecdsa_testvector_1),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003384 XTEST_AC_ECDSA_CASE(0, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003385 nist_186_2_ecdsa_testvector_1),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003386 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003387 nist_186_2_ecdsa_testvector_2),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003388 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003389 nist_186_2_ecdsa_testvector_2),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003390 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003391 nist_186_2_ecdsa_testvector_3),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003392 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003393 nist_186_2_ecdsa_testvector_3),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003394 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003395 nist_186_2_ecdsa_testvector_4),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003396 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003397 nist_186_2_ecdsa_testvector_4),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003398 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003399 nist_186_2_ecdsa_testvector_5),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003400 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003401 nist_186_2_ecdsa_testvector_5),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003402 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003403 nist_186_2_ecdsa_testvector_6),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003404 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003405 nist_186_2_ecdsa_testvector_6),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003406 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003407 nist_186_2_ecdsa_testvector_7),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003408 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003409 nist_186_2_ecdsa_testvector_7),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003410 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003411 nist_186_2_ecdsa_testvector_8),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003412 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003413 nist_186_2_ecdsa_testvector_8),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003414 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003415 nist_186_2_ecdsa_testvector_9),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003416 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003417 nist_186_2_ecdsa_testvector_9),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003418 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003419 nist_186_2_ecdsa_testvector_10),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003420 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003421 nist_186_2_ecdsa_testvector_10),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003422 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003423 nist_186_2_ecdsa_testvector_11),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003424 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003425 nist_186_2_ecdsa_testvector_11),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003426 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003427 nist_186_2_ecdsa_testvector_12),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003428 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003429 nist_186_2_ecdsa_testvector_12),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003430 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003431 nist_186_2_ecdsa_testvector_13),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003432 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003433 nist_186_2_ecdsa_testvector_13),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003434 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003435 nist_186_2_ecdsa_testvector_14),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003436 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003437 nist_186_2_ecdsa_testvector_14),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003438 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003439 nist_186_2_ecdsa_testvector_15),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003440 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003441 nist_186_2_ecdsa_testvector_15),
3442 /* [P-224] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003443 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003444 nist_186_2_ecdsa_testvector_16),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003445 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003446 nist_186_2_ecdsa_testvector_16),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003447 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003448 nist_186_2_ecdsa_testvector_17),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003449 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003450 nist_186_2_ecdsa_testvector_17),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003451 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003452 nist_186_2_ecdsa_testvector_18),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003453 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003454 nist_186_2_ecdsa_testvector_18),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003455 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003456 nist_186_2_ecdsa_testvector_19),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003457 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003458 nist_186_2_ecdsa_testvector_19),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003459 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003460 nist_186_2_ecdsa_testvector_20),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003461 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003462 nist_186_2_ecdsa_testvector_20),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003463 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003464 nist_186_2_ecdsa_testvector_21),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003465 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003466 nist_186_2_ecdsa_testvector_21),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003467 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003468 nist_186_2_ecdsa_testvector_22),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003469 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003470 nist_186_2_ecdsa_testvector_22),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003471 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003472 nist_186_2_ecdsa_testvector_23),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003473 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003474 nist_186_2_ecdsa_testvector_23),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003475 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003476 nist_186_2_ecdsa_testvector_24),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003477 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003478 nist_186_2_ecdsa_testvector_24),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003479 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003480 nist_186_2_ecdsa_testvector_25),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003481 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003482 nist_186_2_ecdsa_testvector_25),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003483 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003484 nist_186_2_ecdsa_testvector_26),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003485 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003486 nist_186_2_ecdsa_testvector_26),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003487 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003488 nist_186_2_ecdsa_testvector_27),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003489 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003490 nist_186_2_ecdsa_testvector_27),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003491 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003492 nist_186_2_ecdsa_testvector_28),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003493 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003494 nist_186_2_ecdsa_testvector_28),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003495 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003496 nist_186_2_ecdsa_testvector_29),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003497 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003498 nist_186_2_ecdsa_testvector_29),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003499 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003500 nist_186_2_ecdsa_testvector_30),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003501 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003502 nist_186_2_ecdsa_testvector_30),
3503 /* [P-256] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003504 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003505 nist_186_2_ecdsa_testvector_31),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003506 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003507 nist_186_2_ecdsa_testvector_31),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003508 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003509 nist_186_2_ecdsa_testvector_32),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003510 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003511 nist_186_2_ecdsa_testvector_32),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003512 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003513 nist_186_2_ecdsa_testvector_33),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003514 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003515 nist_186_2_ecdsa_testvector_33),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003516 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003517 nist_186_2_ecdsa_testvector_34),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003518 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003519 nist_186_2_ecdsa_testvector_34),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003520 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003521 nist_186_2_ecdsa_testvector_35),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003522 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003523 nist_186_2_ecdsa_testvector_35),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003524 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003525 nist_186_2_ecdsa_testvector_36),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003526 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003527 nist_186_2_ecdsa_testvector_36),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003528 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003529 nist_186_2_ecdsa_testvector_37),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003530 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003531 nist_186_2_ecdsa_testvector_37),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003532 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003533 nist_186_2_ecdsa_testvector_38),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003534 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003535 nist_186_2_ecdsa_testvector_38),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003536 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003537 nist_186_2_ecdsa_testvector_39),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003538 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003539 nist_186_2_ecdsa_testvector_39),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003540 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003541 nist_186_2_ecdsa_testvector_40),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003542 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003543 nist_186_2_ecdsa_testvector_40),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003544 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003545 nist_186_2_ecdsa_testvector_41),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003546 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003547 nist_186_2_ecdsa_testvector_41),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003548 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003549 nist_186_2_ecdsa_testvector_42),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003550 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003551 nist_186_2_ecdsa_testvector_42),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003552 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003553 nist_186_2_ecdsa_testvector_43),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003554 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003555 nist_186_2_ecdsa_testvector_43),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003556 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003557 nist_186_2_ecdsa_testvector_44),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003558 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003559 nist_186_2_ecdsa_testvector_44),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003560 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003561 nist_186_2_ecdsa_testvector_45),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003562 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003563 nist_186_2_ecdsa_testvector_45),
3564 /* [P-384] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003565 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003566 nist_186_2_ecdsa_testvector_46),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003567 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003568 nist_186_2_ecdsa_testvector_46),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003569 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003570 nist_186_2_ecdsa_testvector_47),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003571 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003572 nist_186_2_ecdsa_testvector_47),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003573 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003574 nist_186_2_ecdsa_testvector_48),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003575 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003576 nist_186_2_ecdsa_testvector_48),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003577 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003578 nist_186_2_ecdsa_testvector_49),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003579 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003580 nist_186_2_ecdsa_testvector_49),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003581 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003582 nist_186_2_ecdsa_testvector_50),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003583 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003584 nist_186_2_ecdsa_testvector_50),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003585 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003586 nist_186_2_ecdsa_testvector_51),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003587 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003588 nist_186_2_ecdsa_testvector_51),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003589 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003590 nist_186_2_ecdsa_testvector_52),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003591 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003592 nist_186_2_ecdsa_testvector_52),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003593 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003594 nist_186_2_ecdsa_testvector_53),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003595 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003596 nist_186_2_ecdsa_testvector_53),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003597 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003598 nist_186_2_ecdsa_testvector_54),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003599 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003600 nist_186_2_ecdsa_testvector_54),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003601 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003602 nist_186_2_ecdsa_testvector_55),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003603 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003604 nist_186_2_ecdsa_testvector_55),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003605 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003606 nist_186_2_ecdsa_testvector_56),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003607 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003608 nist_186_2_ecdsa_testvector_56),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003609 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003610 nist_186_2_ecdsa_testvector_57),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003611 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003612 nist_186_2_ecdsa_testvector_57),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003613 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003614 nist_186_2_ecdsa_testvector_58),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003615 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003616 nist_186_2_ecdsa_testvector_58),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003617 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003618 nist_186_2_ecdsa_testvector_59),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003619 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003620 nist_186_2_ecdsa_testvector_59),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003621 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003622 nist_186_2_ecdsa_testvector_60),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003623 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003624 nist_186_2_ecdsa_testvector_60),
3625 /* [P-521] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003626 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003627 nist_186_2_ecdsa_testvector_61),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003628 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003629 nist_186_2_ecdsa_testvector_61),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003630 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003631 nist_186_2_ecdsa_testvector_62),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003632 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003633 nist_186_2_ecdsa_testvector_62),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003634 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003635 nist_186_2_ecdsa_testvector_63),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003636 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003637 nist_186_2_ecdsa_testvector_63),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003638 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003639 nist_186_2_ecdsa_testvector_64),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003640 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003641 nist_186_2_ecdsa_testvector_64),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003642 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003643 nist_186_2_ecdsa_testvector_65),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003644 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003645 nist_186_2_ecdsa_testvector_65),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003646 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003647 nist_186_2_ecdsa_testvector_66),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003648 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003649 nist_186_2_ecdsa_testvector_66),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003650 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003651 nist_186_2_ecdsa_testvector_67),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003652 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003653 nist_186_2_ecdsa_testvector_67),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003654 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003655 nist_186_2_ecdsa_testvector_68),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003656 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003657 nist_186_2_ecdsa_testvector_68),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003658 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003659 nist_186_2_ecdsa_testvector_69),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003660 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003661 nist_186_2_ecdsa_testvector_69),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003662 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003663 nist_186_2_ecdsa_testvector_70),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003664 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003665 nist_186_2_ecdsa_testvector_70),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003666 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003667 nist_186_2_ecdsa_testvector_71),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003668 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003669 nist_186_2_ecdsa_testvector_71),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003670 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003671 nist_186_2_ecdsa_testvector_72),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003672 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003673 nist_186_2_ecdsa_testvector_72),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003674 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003675 nist_186_2_ecdsa_testvector_73),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003676 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003677 nist_186_2_ecdsa_testvector_73),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003678 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003679 nist_186_2_ecdsa_testvector_74),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003680 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003681 nist_186_2_ecdsa_testvector_74),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003682 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003683 nist_186_2_ecdsa_testvector_75),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003684 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003685 nist_186_2_ecdsa_testvector_75),
3686 /* [K-163] - GP NOT SUPPORTED */
3687 /* [K-233] - GP NOT SUPPORTED */
3688 /* [K-283] - GP NOT SUPPORTED */
3689 /* [K-409] - GP NOT SUPPORTED */
3690 /* [K-571] - GP NOT SUPPORTED */
3691 /* [B-163] - GP NOT SUPPORTED */
3692 /* [B-233] - GP NOT SUPPORTED */
3693 /* [B-283] - GP NOT SUPPORTED */
3694 /* [B-409] - GP NOT SUPPORTED */
3695 /* [B-571] - GP NOT SUPPORTED */
Pascal Brandc639ac82015-07-02 08:53:34 +02003696};
3697
3698static bool create_key(ADBG_Case_t *c, TEEC_Session *s,
3699 uint32_t max_key_size, uint32_t key_type,
3700 TEE_Attribute *attrs, size_t num_attrs,
3701 TEE_ObjectHandle *handle)
3702{
3703 size_t n;
3704
3705 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3706 ta_crypt_cmd_allocate_transient_object(c, s, key_type,
3707 max_key_size, handle)))
3708 return false;
3709
3710 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3711 ta_crypt_cmd_populate_transient_object(c, s, *handle, attrs,
3712 num_attrs)))
3713 return false;
3714
3715 for (n = 0; n < num_attrs; n++) {
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003716 uint8_t out[384];
Pascal Brandc639ac82015-07-02 08:53:34 +02003717 size_t out_size;
3718
3719 out_size = sizeof(out);
3720 memset(out, 0, sizeof(out));
Pascal Brand3e143ee2015-07-15 17:17:16 +02003721
3722 if (attrs[n].attributeID == TEE_ATTR_ECC_CURVE)
3723 continue;
3724
Pascal Brandc639ac82015-07-02 08:53:34 +02003725 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3726 ta_crypt_cmd_get_object_buffer_attribute(c, s, *handle,
3727 attrs[n].attributeID, out, &out_size)))
3728 return false;
3729
Pascal Brand3e143ee2015-07-15 17:17:16 +02003730 if (out_size < attrs[n].content.ref.length) {
3731 memmove(out + (attrs[n].content.ref.length - out_size),
3732 out,
3733 attrs[n].content.ref.length);
3734 memset(out, 0, attrs[n].content.ref.length - out_size);
3735 out_size = attrs[n].content.ref.length;
3736 }
3737
Pascal Brandc639ac82015-07-02 08:53:34 +02003738 if (!ADBG_EXPECT_BUFFER(c, attrs[n].content.ref.buffer,
3739 attrs[n].content.ref.length, out, out_size))
3740 return false;
3741 }
3742
3743 return true;
3744}
3745
3746static void xtest_tee_test_4006(ADBG_Case_t *c)
3747{
3748 TEEC_Session session = { 0 };
3749 TEE_OperationHandle op = TEE_HANDLE_NULL;
3750 TEE_ObjectHandle priv_key_handle = TEE_HANDLE_NULL;
3751 TEE_ObjectHandle pub_key_handle = TEE_HANDLE_NULL;
3752 TEE_Attribute key_attrs[8];
3753 TEE_Attribute algo_params[1];
3754 size_t num_algo_params;
3755 uint8_t out[512];
3756 size_t out_size;
3757 uint8_t out_enc[512];
3758 size_t out_enc_size;
3759 uint8_t ptx_hash[TEE_MAX_HASH_SIZE];
3760 size_t ptx_hash_size;
3761 size_t max_key_size;
3762 size_t num_key_attrs;
3763 uint32_t ret_orig;
3764 size_t n;
Pascal Brand3e143ee2015-07-15 17:17:16 +02003765 uint32_t curve;
3766 uint32_t hash_algo;
Pascal Brandc639ac82015-07-02 08:53:34 +02003767
3768 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3769 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
3770 &ret_orig)))
3771 return;
3772
3773 for (n = 0; n < ARRAY_SIZE(xtest_ac_cases); n++) {
3774 const struct xtest_ac_case *tv = xtest_ac_cases + n;
3775
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003776 if (tv->level > level)
3777 continue;
3778
Pascal Brandc639ac82015-07-02 08:53:34 +02003779 Do_ADBG_BeginSubCase(c, "Asym Crypto case %d algo 0x%x line %d",
3780 (int)n, (unsigned int)tv->algo,
3781 (int)tv->line);
3782
3783 /*
3784 * When signing or verifying we're working with the hash of
3785 * the payload.
3786 */
3787 if (tv->mode == TEE_MODE_VERIFY || tv->mode == TEE_MODE_SIGN) {
Pascal Brand3e143ee2015-07-15 17:17:16 +02003788 if (TEE_ALG_GET_MAIN_ALG(tv->algo) == TEE_MAIN_ALGO_ECDSA)
3789 hash_algo = TEE_ALG_SHA1;
3790 else
3791 hash_algo = TEE_ALG_HASH_ALGO(
3792 TEE_ALG_GET_DIGEST_HASH(tv->algo));
Pascal Brandc639ac82015-07-02 08:53:34 +02003793
3794 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3795 ta_crypt_cmd_allocate_operation(c, &session,
3796 &op, hash_algo, TEE_MODE_DIGEST, 0)))
3797 goto out;
3798
3799 ptx_hash_size = sizeof(ptx_hash);
3800 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3801 ta_crypt_cmd_digest_do_final(c, & session, op,
3802 tv->ptx, tv->ptx_len, ptx_hash,
3803 &ptx_hash_size)))
3804 goto out;
3805
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003806 /*
3807 * When we use DSA algorithms, the size of the hash we
3808 * consider equals the min between the size of the
3809 * "subprime" in the key and the size of the hash
3810 */
3811 if (TEE_ALG_GET_MAIN_ALG(tv->algo) ==
3812 TEE_MAIN_ALGO_DSA) {
3813 if (tv->params.dsa.sub_prime_len <=
3814 ptx_hash_size)
3815 ptx_hash_size =
3816 tv->params.dsa.sub_prime_len;
3817 }
3818
Pascal Brandc639ac82015-07-02 08:53:34 +02003819 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3820 ta_crypt_cmd_free_operation(c, &session, op)))
3821 goto out;
3822 }
3823
3824 num_algo_params = 0;
3825 num_key_attrs = 0;
3826 switch (TEE_ALG_GET_MAIN_ALG(tv->algo)) {
3827 case TEE_MAIN_ALGO_RSA:
3828 if (tv->params.rsa.salt_len > 0) {
3829 algo_params[0].attributeID =
3830 TEE_ATTR_RSA_PSS_SALT_LENGTH;
3831 algo_params[0].content.value.a =
3832 tv->params.rsa.salt_len;
3833 algo_params[0].content.value.b = 0;
3834 num_algo_params = 1;
3835 }
3836
3837 max_key_size = tv->params.rsa.modulus_len * 8;
3838
3839 xtest_add_attr(&num_key_attrs, key_attrs,
3840 TEE_ATTR_RSA_MODULUS,
3841 tv->params.rsa.modulus,
3842 tv->params.rsa.modulus_len);
3843 xtest_add_attr(&num_key_attrs, key_attrs,
3844 TEE_ATTR_RSA_PUBLIC_EXPONENT,
3845 tv->params.rsa.pub_exp,
3846 tv->params.rsa.pub_exp_len);
3847
3848 if (!ADBG_EXPECT_TRUE(c,
3849 create_key(c, &session,
3850 max_key_size,
3851 TEE_TYPE_RSA_PUBLIC_KEY,
3852 key_attrs,
3853 num_key_attrs,
3854 &pub_key_handle)))
3855 goto out;
3856
3857 xtest_add_attr(&num_key_attrs, key_attrs,
3858 TEE_ATTR_RSA_PRIVATE_EXPONENT,
3859 tv->params.rsa.priv_exp,
3860 tv->params.rsa.priv_exp_len);
3861
3862 if (tv->params.rsa.prime1_len != 0) {
3863 xtest_add_attr(&num_key_attrs, key_attrs,
3864 TEE_ATTR_RSA_PRIME1,
3865 tv->params.rsa.prime1,
3866 tv->params.rsa.prime1_len);
3867 }
3868
3869 if (tv->params.rsa.prime2_len != 0) {
3870 xtest_add_attr(&num_key_attrs, key_attrs,
3871 TEE_ATTR_RSA_PRIME2,
3872 tv->params.rsa.prime2,
3873 tv->params.rsa.prime2_len);
3874 }
3875
3876 if (tv->params.rsa.exp1_len != 0) {
3877 xtest_add_attr(&num_key_attrs, key_attrs,
3878 TEE_ATTR_RSA_EXPONENT1,
3879 tv->params.rsa.exp1,
3880 tv->params.rsa.exp1_len);
3881 }
3882
3883 if (tv->params.rsa.exp2_len != 0) {
3884 xtest_add_attr(&num_key_attrs, key_attrs,
3885 TEE_ATTR_RSA_EXPONENT2,
3886 tv->params.rsa.exp2,
3887 tv->params.rsa.exp2_len);
3888 }
3889
3890 if (tv->params.rsa.coeff_len != 0) {
3891 xtest_add_attr(&num_key_attrs, key_attrs,
3892 TEE_ATTR_RSA_COEFFICIENT,
3893 tv->params.rsa.coeff,
3894 tv->params.rsa.coeff_len);
3895 }
3896
3897 if (!ADBG_EXPECT_TRUE(c,
3898 create_key(c, &session,
3899 max_key_size,
3900 TEE_TYPE_RSA_KEYPAIR,
3901 key_attrs,
3902 num_key_attrs,
3903 &priv_key_handle)))
3904 goto out;
3905 break;
3906
3907 case TEE_MAIN_ALGO_DSA:
3908 max_key_size = tv->params.dsa.prime_len * 8;
3909
3910 xtest_add_attr(&num_key_attrs, key_attrs,
3911 TEE_ATTR_DSA_PRIME,
3912 tv->params.dsa.prime,
3913 tv->params.dsa.prime_len);
3914 xtest_add_attr(&num_key_attrs, key_attrs,
3915 TEE_ATTR_DSA_SUBPRIME,
3916 tv->params.dsa.sub_prime,
3917 tv->params.dsa.sub_prime_len);
3918 xtest_add_attr(&num_key_attrs, key_attrs,
3919 TEE_ATTR_DSA_BASE,
3920 tv->params.dsa.base,
3921 tv->params.dsa.base_len);
3922 xtest_add_attr(&num_key_attrs, key_attrs,
3923 TEE_ATTR_DSA_PUBLIC_VALUE,
3924 tv->params.dsa.pub_val,
3925 tv->params.dsa.pub_val_len);
3926
3927 if (!ADBG_EXPECT_TRUE(c,
3928 create_key(c, &session, max_key_size,
3929 TEE_TYPE_DSA_PUBLIC_KEY, key_attrs,
3930 num_key_attrs, &pub_key_handle)))
3931 goto out;
3932
3933 xtest_add_attr(&num_key_attrs, key_attrs,
3934 TEE_ATTR_DSA_PRIVATE_VALUE,
3935 tv->params.dsa.priv_val,
3936 tv->params.dsa.priv_val_len);
3937
3938 if (!ADBG_EXPECT_TRUE(c,
3939 create_key(c, &session, max_key_size,
3940 TEE_TYPE_DSA_KEYPAIR, key_attrs,
3941 num_key_attrs, &priv_key_handle)))
3942 goto out;
3943 break;
3944
Pascal Brand3e143ee2015-07-15 17:17:16 +02003945 case TEE_MAIN_ALGO_ECDSA:
3946 switch (tv->algo) {
3947 case TEE_ALG_ECDSA_P192:
3948 curve = TEE_ECC_CURVE_NIST_P192;
3949 break;
3950 case TEE_ALG_ECDSA_P224:
3951 curve = TEE_ECC_CURVE_NIST_P224;
3952 break;
3953 case TEE_ALG_ECDSA_P256:
3954 curve = TEE_ECC_CURVE_NIST_P256;
3955 break;
3956 case TEE_ALG_ECDSA_P384:
3957 curve = TEE_ECC_CURVE_NIST_P384;
3958 break;
3959 case TEE_ALG_ECDSA_P521:
3960 curve = TEE_ECC_CURVE_NIST_P521;
3961 break;
3962 default:
3963 curve = 0xFF;
3964 break;
3965 }
3966
3967 if (tv->algo == TEE_ALG_ECDSA_P521)
3968 max_key_size = 521;
3969 else
3970 max_key_size = tv->params.ecdsa.private_len * 8;
3971
3972 xtest_add_attr_value(&num_key_attrs, key_attrs,
3973 TEE_ATTR_ECC_CURVE, curve, 0);
3974 xtest_add_attr(&num_key_attrs, key_attrs,
3975 TEE_ATTR_ECC_PUBLIC_VALUE_X,
3976 tv->params.ecdsa.public_x,
3977 tv->params.ecdsa.public_x_len);
3978 xtest_add_attr(&num_key_attrs, key_attrs,
3979 TEE_ATTR_ECC_PUBLIC_VALUE_Y,
3980 tv->params.ecdsa.public_y,
3981 tv->params.ecdsa.public_y_len);
3982
3983 if (!ADBG_EXPECT_TRUE(c,
3984 create_key(c, &session, max_key_size,
3985 TEE_TYPE_ECDSA_PUBLIC_KEY, key_attrs,
3986 num_key_attrs, &pub_key_handle)))
3987 goto out;
3988
3989 xtest_add_attr(&num_key_attrs, key_attrs,
3990 TEE_ATTR_ECC_PRIVATE_VALUE,
3991 tv->params.ecdsa.private,
3992 tv->params.ecdsa.private_len);
3993
3994 if (!ADBG_EXPECT_TRUE(c,
3995 create_key(c, &session, max_key_size,
3996 TEE_TYPE_ECDSA_KEYPAIR, key_attrs,
3997 num_key_attrs, &priv_key_handle)))
3998 goto out;
3999 break;
4000
Pascal Brandc639ac82015-07-02 08:53:34 +02004001 default:
4002 ADBG_EXPECT_TRUE(c, false);
4003 goto out;
4004 }
4005
4006 out_size = sizeof(out);
4007 memset(out, 0, sizeof(out));
4008 switch (tv->mode) {
4009 case TEE_MODE_ENCRYPT:
4010 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4011 ta_crypt_cmd_allocate_operation(c, &session,
Pascal Brand3e143ee2015-07-15 17:17:16 +02004012 &op, tv->algo, TEE_MODE_ENCRYPT,
4013 max_key_size)))
Pascal Brandc639ac82015-07-02 08:53:34 +02004014 goto out;
4015
4016 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4017 ta_crypt_cmd_set_operation_key(c, &session, op,
4018 pub_key_handle)))
4019 goto out;
4020
4021 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4022 ta_crypt_cmd_free_transient_object(c, &session,
4023 pub_key_handle)))
4024 goto out;
4025 pub_key_handle = TEE_HANDLE_NULL;
4026
4027 out_enc_size = sizeof(out_enc);
4028 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4029 ta_crypt_cmd_asymmetric_encrypt(c, &session, op,
4030 NULL, 0, tv->ptx, tv->ptx_len, out_enc,
4031 &out_enc_size)))
4032 goto out;
4033
4034 /*
4035 * A PS which is random is added when formatting the
4036 * message internally of the algorithm so we can't
4037 * verify against precomputed values, instead we use the
4038 * decrypt operation to see that output is correct.
4039 */
4040
4041 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4042 ta_crypt_cmd_free_operation(c, &session, op)))
4043 goto out;
4044
4045 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4046 ta_crypt_cmd_allocate_operation(c, &session,
4047 &op, tv->algo, TEE_MODE_DECRYPT,
4048 max_key_size)))
4049 goto out;
4050
4051 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4052 ta_crypt_cmd_set_operation_key(c, &session, op,
4053 priv_key_handle)))
4054 goto out;
4055
4056 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4057 ta_crypt_cmd_free_transient_object(c, &session,
4058 priv_key_handle)))
4059 goto out;
4060
4061 priv_key_handle = TEE_HANDLE_NULL;
4062
4063 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4064 ta_crypt_cmd_asymmetric_decrypt(c, &session, op,
4065 NULL, 0, out_enc, out_enc_size, out,
4066 &out_size)))
4067 goto out;
4068
4069 (void)ADBG_EXPECT_BUFFER(c, tv->ptx, tv->ptx_len, out,
4070 out_size);
4071 break;
4072
4073 case TEE_MODE_DECRYPT:
4074 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4075 ta_crypt_cmd_allocate_operation(c, &session,
4076 &op, tv->algo, TEE_MODE_DECRYPT,
4077 max_key_size)))
4078 goto out;
4079
4080 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4081 ta_crypt_cmd_set_operation_key(c, &session, op,
4082 priv_key_handle)))
4083 goto out;
4084
4085 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4086 ta_crypt_cmd_free_transient_object(c, &session,
4087 priv_key_handle)))
4088 goto out;
4089
4090 priv_key_handle = TEE_HANDLE_NULL;
4091
4092 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4093 ta_crypt_cmd_asymmetric_decrypt(c, &session, op,
4094 NULL, 0, tv->ctx, tv->ctx_len, out,
4095 &out_size)))
4096 goto out;
4097
4098 (void)ADBG_EXPECT_BUFFER(c, tv->ptx, tv->ptx_len, out,
4099 out_size);
4100 break;
4101
4102 case TEE_MODE_VERIFY:
4103 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4104 ta_crypt_cmd_allocate_operation(c, &session,
4105 &op, tv->algo, TEE_MODE_VERIFY,
4106 max_key_size)))
4107 goto out;
4108
4109 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4110 ta_crypt_cmd_set_operation_key(c, &session, op,
4111 pub_key_handle)))
4112 goto out;
4113
4114 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4115 ta_crypt_cmd_free_transient_object(c, &session,
4116 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, &session, op,
4123 algo_params, num_algo_params, ptx_hash,
4124 ptx_hash_size, tv->ctx, tv->ctx_len)))
4125 goto out;
4126 break;
4127
4128 case TEE_MODE_SIGN:
4129 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4130 ta_crypt_cmd_allocate_operation(c, &session,
4131 &op, tv->algo, TEE_MODE_SIGN,
4132 max_key_size)))
4133 goto out;
4134
4135 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4136 ta_crypt_cmd_set_operation_key(c, &session, op,
4137 priv_key_handle)))
4138 goto out;
4139
4140 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4141 ta_crypt_cmd_free_transient_object(c, &session,
4142 priv_key_handle)))
4143 goto out;
4144
4145 priv_key_handle = TEE_HANDLE_NULL;
4146
4147 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4148 ta_crypt_cmd_asymmetric_sign(c, &session, op,
4149 algo_params, num_algo_params, ptx_hash,
4150 ptx_hash_size, out, &out_size)))
4151 goto out;
4152
4153 if (TEE_ALG_GET_CHAIN_MODE(tv->algo) ==
4154 TEE_CHAIN_MODE_PKCS1_PSS_MGF1 ||
Pascal Brand3e143ee2015-07-15 17:17:16 +02004155 tv->algo == TEE_ALG_DSA_SHA1 ||
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02004156 tv->algo == TEE_ALG_DSA_SHA224 ||
4157 tv->algo == TEE_ALG_DSA_SHA256 ||
Pascal Brand3e143ee2015-07-15 17:17:16 +02004158 TEE_ALG_GET_MAIN_ALG(tv->algo) ==
4159 TEE_MAIN_ALGO_ECDSA) {
Pascal Brandc639ac82015-07-02 08:53:34 +02004160 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4161 ta_crypt_cmd_free_operation(c, &session,
4162 op)))
4163 goto out;
4164 /*
4165 * The salt or K is random so we can't verify
4166 * signing against precomputed values, instead
4167 * we use the verify operation to see that
4168 * output is correct.
4169 */
4170 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4171 ta_crypt_cmd_allocate_operation(c,
4172 &session, &op, tv->algo,
4173 TEE_MODE_VERIFY, max_key_size)))
4174 goto out;
4175
4176 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4177 ta_crypt_cmd_set_operation_key(c,
4178 &session, op, pub_key_handle)))
4179 goto out;
4180
4181 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4182 ta_crypt_cmd_free_transient_object(c,
4183 &session, pub_key_handle)))
4184 goto out;
4185
4186 pub_key_handle = TEE_HANDLE_NULL;
4187
4188 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4189 ta_crypt_cmd_asymmetric_verify(c,
4190 &session, op, algo_params,
4191 num_algo_params, ptx_hash,
4192 ptx_hash_size, out, out_size)))
4193 goto out;
4194 } else {
4195 (void)ADBG_EXPECT_BUFFER(c, tv->ctx,
4196 tv->ctx_len, out,
4197 out_size);
4198 }
4199 break;
4200
4201 default:
4202 break;
4203 }
4204
4205 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4206 ta_crypt_cmd_free_operation(c, &session, op)))
4207 goto out;
4208
4209 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4210 ta_crypt_cmd_free_transient_object(c, &session,
4211 pub_key_handle)))
4212 goto out;
4213 pub_key_handle = TEE_HANDLE_NULL;
4214
4215 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4216 ta_crypt_cmd_free_transient_object(c, &session,
4217 priv_key_handle)))
4218 goto out;
4219
4220 priv_key_handle = TEE_HANDLE_NULL;
4221
4222 Do_ADBG_EndSubCase(c, NULL);
4223 }
4224out:
4225 TEEC_CloseSession(&session);
4226}
4227
4228#define KEY_ATTR(x, y) { #x, (x), y }
4229
4230struct key_attrs {
4231 const char *name;
4232 uint32_t attr;
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004233 /*
4234 * When keysize_check != 0: size of attribute is checked
4235 * Expected value is key_size bits except for DH in which case it is
4236 * the value of keysize_check.
4237 */
4238 uint32_t keysize_check;
Pascal Brandc639ac82015-07-02 08:53:34 +02004239};
4240
4241static bool test_keygen_attributes(ADBG_Case_t *c, TEEC_Session *s,
4242 TEE_ObjectHandle key, uint32_t key_size,
4243 struct key_attrs *attrs, size_t num_attrs)
4244{
4245 uint8_t out[2048];
4246 size_t out_size;
4247 size_t n;
4248 size_t m;
4249
4250 for (m = 0; m < num_attrs; m++) {
4251 if ((attrs[m].attr & TEE_ATTR_BIT_VALUE) == 0) {
4252 out_size = sizeof(out);
4253 memset(out, 0, sizeof(out));
4254 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4255 ta_crypt_cmd_get_object_buffer_attribute(c, s,
4256 key, attrs[m].attr, out, &out_size)))
4257 return false;
4258
4259 if (attrs[m].keysize_check)
4260 ADBG_EXPECT_COMPARE_UNSIGNED(c, out_size, ==,
4261 key_size / 8);
4262
4263 if (out_size > 0) {
4264 /* Check that buffer isn't all zeroes */
4265 for (n = 0; n < out_size; n++)
4266 if (out[n] != 0)
4267 break;
4268 if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, n, <,
4269 out_size))
4270 return false;
4271 }
4272 } else {
4273 uint32_t a;
4274 uint32_t b;
4275
4276 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4277 ta_crypt_cmd_get_object_value_attribute(c, s, key,
4278 attrs[m].attr, &a, &b)))
4279 return false;
4280 }
4281 }
4282 return true;
4283}
4284
4285static bool test_secret_value(ADBG_Case_t *c, TEEC_Session *s,
4286 TEE_ObjectHandle key, uint32_t key_size)
4287{
4288 const struct key_attrs attrs[] = {
4289 KEY_ATTR(TEE_ATTR_SECRET_VALUE, true),
4290 };
4291
4292 return test_keygen_attributes(c, s, key, key_size,
4293 (struct key_attrs *)&attrs,
4294 ARRAY_SIZE(attrs));
4295}
4296
4297
4298static bool test_rsa_key_pair(ADBG_Case_t *c, TEEC_Session *s,
4299 TEE_ObjectHandle key, uint32_t key_size)
4300{
4301 const struct key_attrs attrs[] = {
4302 KEY_ATTR(TEE_ATTR_RSA_MODULUS, true),
4303 KEY_ATTR(TEE_ATTR_RSA_PUBLIC_EXPONENT, false),
4304 KEY_ATTR(TEE_ATTR_RSA_PRIVATE_EXPONENT, false),
4305 KEY_ATTR(TEE_ATTR_RSA_PRIME1, false),
4306 KEY_ATTR(TEE_ATTR_RSA_PRIME2, false),
4307 KEY_ATTR(TEE_ATTR_RSA_EXPONENT1, false),
4308 KEY_ATTR(TEE_ATTR_RSA_EXPONENT2, false),
4309 KEY_ATTR(TEE_ATTR_RSA_COEFFICIENT, false),
4310 };
4311
4312 return test_keygen_attributes(c, s, key, key_size,
4313 (struct key_attrs *)&attrs,
4314 ARRAY_SIZE(attrs));
4315}
4316
Pascal Brande61133f2015-07-08 15:38:37 +02004317static bool test_ecc_key_pair(ADBG_Case_t *c, TEEC_Session *s,
4318 TEE_ObjectHandle key, uint32_t key_size)
4319{
4320 const struct key_attrs attrs[] = {
4321 KEY_ATTR(TEE_ATTR_ECC_PRIVATE_VALUE, false),
4322 KEY_ATTR(TEE_ATTR_ECC_PUBLIC_VALUE_X , false),
4323 KEY_ATTR(TEE_ATTR_ECC_PUBLIC_VALUE_Y , false),
4324 /* KEY_ATTR(TEE_ATTR_ECC_CURVE, false), - do not test */
4325 };
4326
4327 return test_keygen_attributes(c, s, key, key_size,
4328 (struct key_attrs *)&attrs,
4329 ARRAY_SIZE(attrs));
4330}
4331
Pascal Brandc639ac82015-07-02 08:53:34 +02004332static bool test_dh_key_pair(ADBG_Case_t *c, TEEC_Session *s,
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004333 TEE_ObjectHandle key, uint32_t check_keysize)
Pascal Brandc639ac82015-07-02 08:53:34 +02004334{
4335 const struct key_attrs attrs[] = {
4336 KEY_ATTR(TEE_ATTR_DH_PRIME, false),
4337 KEY_ATTR(TEE_ATTR_DH_BASE, false),
4338 KEY_ATTR(TEE_ATTR_DH_PUBLIC_VALUE, false),
4339 KEY_ATTR(TEE_ATTR_DH_PRIVATE_VALUE, check_keysize),
4340 KEY_ATTR(TEE_ATTR_DH_X_BITS, false),
4341 };
4342
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004343 return test_keygen_attributes(c, s, key, check_keysize,
Pascal Brandc639ac82015-07-02 08:53:34 +02004344 (struct key_attrs *)&attrs,
4345 ARRAY_SIZE(attrs));
4346}
4347
4348static bool test_dsa_key_pair(ADBG_Case_t *c, TEEC_Session *s,
4349 TEE_ObjectHandle key, uint32_t key_size)
4350{
4351 const struct key_attrs attrs[] = {
4352 KEY_ATTR(TEE_ATTR_DSA_PRIME, true),
4353 KEY_ATTR(TEE_ATTR_DSA_SUBPRIME, false),
4354 KEY_ATTR(TEE_ATTR_DSA_BASE, false),
4355 KEY_ATTR(TEE_ATTR_DSA_PUBLIC_VALUE, false),
4356 KEY_ATTR(TEE_ATTR_DSA_PRIVATE_VALUE, false),
4357 };
4358
4359 return test_keygen_attributes(c, s, key, key_size,
4360 (struct key_attrs *)&attrs,
4361 ARRAY_SIZE(attrs));
4362}
4363
4364static bool generate_and_test_key(ADBG_Case_t *c, TEEC_Session *s,
4365 uint32_t key_type, uint32_t check_keysize,
4366 uint32_t key_size,
4367 TEE_Attribute *params, size_t param_count)
4368{
4369 TEE_ObjectHandle key;
4370 bool ret_val = true;
4371
4372 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4373 ta_crypt_cmd_allocate_transient_object(c, s, key_type, key_size,
4374 &key)))
4375 return false;
4376
4377 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4378 ta_crypt_cmd_generate_key(c, s, key, key_size, params,
4379 param_count)))
4380 return false;
4381
4382 switch (key_type) {
4383 case TEE_TYPE_DES:
4384 case TEE_TYPE_DES3:
4385 ret_val = ADBG_EXPECT_TRUE(c,
4386 test_secret_value(c, s, key,
4387 key_size + key_size / 7));
4388 break;
4389 case TEE_TYPE_AES:
4390 case TEE_TYPE_HMAC_MD5:
4391 case TEE_TYPE_HMAC_SHA1:
4392 case TEE_TYPE_HMAC_SHA224:
4393 case TEE_TYPE_HMAC_SHA256:
4394 case TEE_TYPE_HMAC_SHA384:
4395 case TEE_TYPE_HMAC_SHA512:
4396 case TEE_TYPE_GENERIC_SECRET:
4397 ret_val = ADBG_EXPECT_TRUE(c,
4398 test_secret_value(c, s, key, key_size));
4399 break;
4400
4401 case TEE_TYPE_RSA_KEYPAIR:
4402 ret_val = ADBG_EXPECT_TRUE(c,
4403 test_rsa_key_pair(c, s, key, key_size));
4404 break;
4405
Pascal Brande61133f2015-07-08 15:38:37 +02004406 case TEE_TYPE_ECDSA_KEYPAIR:
4407 case TEE_TYPE_ECDH_KEYPAIR:
4408 ret_val = ADBG_EXPECT_TRUE(c,
4409 test_ecc_key_pair(c, s, key, key_size));
4410 break;
4411
Pascal Brandc639ac82015-07-02 08:53:34 +02004412 case TEE_TYPE_DH_KEYPAIR:
Pascal Brande61133f2015-07-08 15:38:37 +02004413 ret_val = ADBG_EXPECT_TRUE(c,
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004414 test_dh_key_pair(c, s, key, check_keysize));
Pascal Brandc639ac82015-07-02 08:53:34 +02004415 break;
4416
4417 case TEE_TYPE_DSA_KEYPAIR:
4418 ret_val = ADBG_EXPECT_TRUE(c,
4419 test_dsa_key_pair(c, s, key, key_size));
4420 break;
4421
4422 default:
4423 ret_val = false;
4424 break;
4425 }
4426
4427 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4428 ta_crypt_cmd_free_transient_object(c, s, key)))
4429 return false;
4430
4431 return ret_val;
4432}
4433
4434static void xtest_test_keygen_noparams(ADBG_Case_t *c, TEEC_Session *session)
4435{
4436 size_t n;
4437 uint32_t key_size;
4438 static const struct {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004439 unsigned level;
Pascal Brandc639ac82015-07-02 08:53:34 +02004440 const char *name;
4441 uint32_t key_type;
4442 uint32_t quanta;
4443 uint32_t min_size;
4444 uint32_t max_size;
4445 } key_types[] = {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004446 { 0, "AES", TEE_TYPE_AES, 64, 128,
Pascal Brandc639ac82015-07-02 08:53:34 +02004447 256 /* valid sizes 128, 192, 256 */ },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004448 { 0, "DES", TEE_TYPE_DES, 56, 56, 56 /* valid size 56 */ },
4449 { 0, "DES3", TEE_TYPE_DES3, 56, 112,
Pascal Brandc639ac82015-07-02 08:53:34 +02004450 168 /* valid sizes 112, 168 */ },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004451 { 0, "HMAC-MD5", TEE_TYPE_HMAC_MD5, 8, 64, 512 },
4452 { 0, "HMAC-SHA1", TEE_TYPE_HMAC_SHA1, 8, 80, 512 },
4453 { 0, "HMAC-SHA224", TEE_TYPE_HMAC_SHA224, 8, 112, 512 },
4454 { 0, "HMAC-SHA256", TEE_TYPE_HMAC_SHA256, 8, 192, 1024 },
4455 { 0, "HMAC-SHA384", TEE_TYPE_HMAC_SHA384, 8, 256, 1024 },
4456 { 0, "HMAC-SHA512", TEE_TYPE_HMAC_SHA512, 8, 256, 1024 },
4457 { 0, "Generic secret", TEE_TYPE_GENERIC_SECRET, 8, 128, 4096 },
4458 { 1, "RSA-2048", TEE_TYPE_RSA_KEYPAIR, 1, 2048, 2048 },
Pascal Brandc639ac82015-07-02 08:53:34 +02004459
4460 /* New tests added to check non-regression of issue #5398 */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004461 { 0, "RSA-256", TEE_TYPE_RSA_KEYPAIR, 1, 256, 256 },
4462 { 1, "RSA-384", TEE_TYPE_RSA_KEYPAIR, 1, 384, 384 },
4463 { 1, "RSA-512", TEE_TYPE_RSA_KEYPAIR, 1, 512, 512 },
4464 { 1, "RSA-640", TEE_TYPE_RSA_KEYPAIR, 1, 640, 640 },
4465 { 1, "RSA-768", TEE_TYPE_RSA_KEYPAIR, 1, 768, 768 },
4466 { 1, "RSA-896", TEE_TYPE_RSA_KEYPAIR, 1, 896, 896 },
4467 { 1, "RSA-1024", TEE_TYPE_RSA_KEYPAIR, 1, 1024, 1024 },
Pascal Brandc639ac82015-07-02 08:53:34 +02004468 };
4469
4470 for (n = 0; n < ARRAY_SIZE(key_types); n++) {
4471 uint32_t min_size = key_types[n].min_size;
4472 uint32_t max_size = key_types[n].max_size;
4473 uint32_t quanta = key_types[n].quanta;
4474
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004475 if (key_types[n].level > level)
4476 continue;
4477
Pascal Brandc639ac82015-07-02 08:53:34 +02004478 Do_ADBG_BeginSubCase(c, "Generate %s key", key_types[n].name);
4479
4480 for (key_size = min_size; key_size <= max_size;
4481 key_size += quanta) {
4482 if (!ADBG_EXPECT_TRUE(c,
4483 generate_and_test_key(c, session, key_types
4484 [n].key_type, 1, key_size, NULL, 0)))
4485 break;
4486 }
4487
4488 Do_ADBG_EndSubCase(c, "Generate %s key", key_types[n].name);
4489 }
4490}
4491
4492static void xtest_test_keygen_dh(ADBG_Case_t *c, TEEC_Session *session)
4493{
4494 size_t n;
4495 size_t param_count;
4496 /*
4497 * Note that the key size parameter is not used when creating the keys
4498 * but specifying these sizes make it possible to test the expected size
4499 * of the private value. This also means that the keysize must match the
4500 * size of p or what is specified in private_bits or the equvivalent
4501 * size of the subprime parameter.
4502 */
4503 TEE_Attribute params[4];
4504
4505#define XTEST_DH_GK_DATA(vect) \
4506 ARRAY(vect ## _p), \
4507 ARRAY(vect ## _g), \
4508 &vect ## _private_bits, \
4509 0, 0
4510#define XTEST_DH_GK_DATA_SUBPRIME(vect) \
4511 ARRAY(vect ## _p), \
4512 ARRAY(vect ## _g), \
4513 &vect ## _private_bits, \
4514 ARRAY(vect ## _subprime)
4515 static const struct {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004516 unsigned level;
Pascal Brandc639ac82015-07-02 08:53:34 +02004517 uint32_t key_size;
4518 const uint8_t *p;
4519 size_t p_len;
4520 const uint8_t *g;
4521 size_t g_len;
4522 const uint32_t *private_bits;
4523 const uint8_t *subprime;
4524 size_t subprime_len;
4525 } key_types[] = {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004526 { 0, 256, XTEST_DH_GK_DATA(keygen_dh256) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004527 { 0, 320, XTEST_DH_GK_DATA(keygen_dh320) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004528 { 1, 384, XTEST_DH_GK_DATA(keygen_dh384) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004529 { 1, 448, XTEST_DH_GK_DATA(keygen_dh448) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004530 { 1, 512, XTEST_DH_GK_DATA(keygen_dh512) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004531 { 1, 576, XTEST_DH_GK_DATA(keygen_dh576) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004532 { 1, 640, XTEST_DH_GK_DATA(keygen_dh640) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004533 { 1, 704, XTEST_DH_GK_DATA(keygen_dh704) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004534 { 1, 768, XTEST_DH_GK_DATA(keygen_dh768) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004535 { 1, 832, XTEST_DH_GK_DATA(keygen_dh832) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004536 { 1, 896, XTEST_DH_GK_DATA(keygen_dh896) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004537 { 1, 960, XTEST_DH_GK_DATA(keygen_dh960) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004538 { 1, 1024, XTEST_DH_GK_DATA(keygen_dh1024) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004539 { 1, 1088, XTEST_DH_GK_DATA(keygen_dh1088) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004540 { 1, 1152, XTEST_DH_GK_DATA(keygen_dh1152) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004541 { 1, 1216, XTEST_DH_GK_DATA(keygen_dh1216) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004542 { 1, 1280, XTEST_DH_GK_DATA(keygen_dh1280) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004543 { 1, 1344, XTEST_DH_GK_DATA(keygen_dh1344) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004544 { 1, 1408, XTEST_DH_GK_DATA(keygen_dh1408) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004545 { 1, 1472, XTEST_DH_GK_DATA(keygen_dh1472) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004546 { 1, 1536, XTEST_DH_GK_DATA(keygen_dh1536) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004547 { 1, 1600, XTEST_DH_GK_DATA(keygen_dh1600) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004548 { 1, 1664, XTEST_DH_GK_DATA(keygen_dh1664) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004549 { 1, 1728, XTEST_DH_GK_DATA(keygen_dh1728) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004550 { 1, 1792, XTEST_DH_GK_DATA(keygen_dh1792) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004551 { 1, 1856, XTEST_DH_GK_DATA(keygen_dh1856) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004552 { 1, 1920, XTEST_DH_GK_DATA(keygen_dh1920) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004553 { 1, 1984, XTEST_DH_GK_DATA(keygen_dh1984) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004554 { 1, 2048, XTEST_DH_GK_DATA(keygen_dh2048) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004555 { 1, 2048, XTEST_DH_GK_DATA_SUBPRIME(keygen_dh2048_subprime) }
Pascal Brandc639ac82015-07-02 08:53:34 +02004556 };
4557
4558
4559 for (n = 0; n < ARRAY_SIZE(key_types); n++) {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004560 if (key_types[n].level > level)
4561 continue;
4562
Pascal Brandc639ac82015-07-02 08:53:34 +02004563 Do_ADBG_BeginSubCase(c,
4564 "Generate DH key %d bits - Private bits = %d",
4565 key_types[n].key_size,
4566 *key_types[n].private_bits);
4567 param_count = 0;
4568
4569 xtest_add_attr(&param_count, params,
4570 TEE_ATTR_DH_PRIME,
4571 key_types[n].p, key_types[n].p_len);
4572
4573 xtest_add_attr(&param_count, params, TEE_ATTR_DH_BASE,
4574 key_types[n].g, key_types[n].g_len);
4575
4576 if (key_types[n].private_bits != 0) {
4577 params[param_count].attributeID = TEE_ATTR_DH_X_BITS;
4578
4579 params[param_count].content.value.a =
4580 *key_types[n].private_bits;
4581
4582 params[param_count].content.value.b = 0;
4583 param_count++;
4584 }
4585
4586 if (key_types[n].subprime != 0) {
4587 xtest_add_attr(&param_count, params,
4588 TEE_ATTR_DH_SUBPRIME,
4589 key_types[n].subprime,
4590 key_types[n].subprime_len);
4591 }
4592
4593 if (!ADBG_EXPECT_TRUE(c,
4594 generate_and_test_key(c, session, TEE_TYPE_DH_KEYPAIR,
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004595 *key_types[n].private_bits,
Pascal Brandc639ac82015-07-02 08:53:34 +02004596 key_types[n]. key_size, params, param_count)))
4597 break;
4598
4599 Do_ADBG_EndSubCase(c,
4600 "Generate DH key %d bits - Private bits = %d",
4601 key_types[n].key_size,
4602 *key_types[n].private_bits);
4603 }
4604}
4605
4606static void xtest_test_keygen_dsa(ADBG_Case_t *c, TEEC_Session *session)
4607{
4608 size_t n;
4609 size_t param_count;
4610 TEE_Attribute params[4];
4611
4612#define XTEST_DSA_GK_DATA(vect) \
4613 ARRAY(vect ## _p), \
4614 ARRAY(vect ## _g), \
4615 ARRAY(vect ## _q)
4616 static const struct {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004617 unsigned level;
Pascal Brandc639ac82015-07-02 08:53:34 +02004618 uint32_t key_size;
4619 const uint8_t *prime;
4620 size_t prime_len;
4621 const uint8_t *base;
4622 size_t base_len;
4623 const uint8_t *sub_prime;
4624 size_t sub_prime_len;
4625 } key_types[] = {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004626 { 1, 1024, XTEST_DSA_GK_DATA(keygen_dsa_test1) },
4627 { 0, 512, XTEST_DSA_GK_DATA(keygen_dsa512) },
4628 { 1, 576, XTEST_DSA_GK_DATA(keygen_dsa576) },
4629 { 1, 640, XTEST_DSA_GK_DATA(keygen_dsa640) },
4630 { 1, 704, XTEST_DSA_GK_DATA(keygen_dsa704) },
4631 { 1, 768, XTEST_DSA_GK_DATA(keygen_dsa768) },
4632 { 1, 832, XTEST_DSA_GK_DATA(keygen_dsa832) },
4633 { 1, 896, XTEST_DSA_GK_DATA(keygen_dsa896) },
4634 { 1, 960, XTEST_DSA_GK_DATA(keygen_dsa960) },
4635 { 1, 1024, XTEST_DSA_GK_DATA(keygen_dsa1024) },
Pascal Brandc639ac82015-07-02 08:53:34 +02004636 };
4637
4638 for (n = 0; n < ARRAY_SIZE(key_types); n++) {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004639 if (key_types[n].level > level)
4640 continue;
4641
Pascal Brandc639ac82015-07-02 08:53:34 +02004642 Do_ADBG_BeginSubCase(c, "Generate DSA key %d bits",
4643 key_types[n].key_size);
4644 param_count = 0;
4645
4646
4647 xtest_add_attr(&param_count, params, TEE_ATTR_DSA_PRIME,
4648 key_types[n].prime, key_types[n].prime_len);
4649
4650 xtest_add_attr(&param_count, params, TEE_ATTR_DSA_SUBPRIME,
4651 key_types[n].sub_prime,
4652 key_types[n].sub_prime_len);
4653
4654 xtest_add_attr(&param_count, params, TEE_ATTR_DSA_BASE,
4655 key_types[n].base, key_types[n].base_len);
4656
4657 if (!ADBG_EXPECT_TRUE(c,
4658 generate_and_test_key(c, session, TEE_TYPE_DSA_KEYPAIR,
4659 1, key_types[n]. key_size, params,
4660 param_count)))
4661 break;
4662
4663 Do_ADBG_EndSubCase(c, "Generate DSA key %d bits",
4664 key_types[n].key_size);
4665 }
4666}
4667
Pascal Brande61133f2015-07-08 15:38:37 +02004668static void xtest_test_keygen_ecc(ADBG_Case_t *c, TEEC_Session *session)
4669{
4670 size_t n;
4671 size_t param_count;
4672 TEE_Attribute params[4];
4673
4674 static const struct {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004675 unsigned level;
Pascal Brande61133f2015-07-08 15:38:37 +02004676 const char *name;
4677 uint32_t algo;
4678 uint32_t curve;
4679 uint32_t key_size;
4680 } key_types[] = {
4681 /* ECDSA */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004682 { 0, "ECDSA-192", TEE_TYPE_ECDSA_KEYPAIR, TEE_ECC_CURVE_NIST_P192,
4683 192 },
4684 { 1, "ECDSA-224", TEE_TYPE_ECDSA_KEYPAIR, TEE_ECC_CURVE_NIST_P224,
4685 224 },
4686 { 1, "ECDSA-256", TEE_TYPE_ECDSA_KEYPAIR, TEE_ECC_CURVE_NIST_P256,
4687 256 },
4688 { 1, "ECDSA-384", TEE_TYPE_ECDSA_KEYPAIR, TEE_ECC_CURVE_NIST_P384,
4689 384 },
4690 { 1, "ECDSA-521", TEE_TYPE_ECDSA_KEYPAIR, TEE_ECC_CURVE_NIST_P521,
4691 521 },
Pascal Brande61133f2015-07-08 15:38:37 +02004692
4693 /* ECDH */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004694 { 0, "ECDH-192", TEE_TYPE_ECDH_KEYPAIR, TEE_ECC_CURVE_NIST_P192,
4695 192 },
4696 { 1, "ECDH-224", TEE_TYPE_ECDH_KEYPAIR, TEE_ECC_CURVE_NIST_P224,
4697 224 },
4698 { 1, "ECDH-256", TEE_TYPE_ECDH_KEYPAIR, TEE_ECC_CURVE_NIST_P256,
4699 256 },
4700 { 1, "ECDH-384", TEE_TYPE_ECDH_KEYPAIR, TEE_ECC_CURVE_NIST_P384,
4701 384 },
4702 { 1, "ECDH-521", TEE_TYPE_ECDH_KEYPAIR, TEE_ECC_CURVE_NIST_P521,
4703 521 },
Pascal Brande61133f2015-07-08 15:38:37 +02004704 };
4705
4706 for (n = 0; n < ARRAY_SIZE(key_types); n++) {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004707 if (key_types[n].level > level)
4708 continue;
4709
Pascal Brande61133f2015-07-08 15:38:37 +02004710 Do_ADBG_BeginSubCase(c, "Generate %s", key_types[n].name);
4711 param_count = 0;
4712
4713 xtest_add_attr_value(&param_count, params, TEE_ATTR_ECC_CURVE,
4714 key_types[n].curve, 0);
4715
4716 if (!ADBG_EXPECT_TRUE(c,
4717 generate_and_test_key(c, session, key_types[n].algo,
4718 0, key_types[n].key_size, params,
4719 param_count)))
4720 break;
4721
4722 Do_ADBG_EndSubCase(c, "Generate %s", key_types[n].name);
4723 }
4724}
4725
Pascal Brandc639ac82015-07-02 08:53:34 +02004726static void xtest_tee_test_4007(ADBG_Case_t *c)
4727{
4728 TEEC_Session session = { 0 };
4729 uint32_t ret_orig;
4730
4731 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4732 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
4733 &ret_orig)))
4734 return;
4735
4736 xtest_test_keygen_noparams(c, &session);
4737
4738 xtest_test_keygen_dh(c, &session);
4739
4740 xtest_test_keygen_dsa(c, &session);
4741
Pascal Brande61133f2015-07-08 15:38:37 +02004742 xtest_test_keygen_ecc (c, &session);
4743
Pascal Brandc639ac82015-07-02 08:53:34 +02004744 TEEC_CloseSession(&session);
4745}
4746
4747static void xtest_tee_test_4008(ADBG_Case_t *c)
4748{
4749 TEEC_Session session = { 0 };
4750 uint32_t ret_orig;
4751 TEE_OperationHandle op;
4752 TEE_ObjectHandle key_handle;
4753 TEE_ObjectHandle sv_handle;
4754 TEE_Attribute params[4];
4755 size_t param_count = 0;
4756 uint8_t out[2048];
4757 size_t out_size;
4758
4759 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4760 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
4761 &ret_orig)))
4762 return;
4763
4764 Do_ADBG_BeginSubCase(c, "Derive DH key success");
4765
4766 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4767 ta_crypt_cmd_allocate_operation(c, &session, &op,
4768 TEE_ALG_DH_DERIVE_SHARED_SECRET, TEE_MODE_DERIVE,
4769 derive_key_max_keysize)))
4770 goto out;
4771
4772 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4773 ta_crypt_cmd_allocate_transient_object(c, & session,
4774 TEE_TYPE_DH_KEYPAIR, derive_key_max_keysize,
4775 &key_handle)))
4776 goto out;
4777
4778 xtest_add_attr(&param_count, params, TEE_ATTR_DH_PRIME,
4779 ARRAY(derive_key_dh_prime));
4780
4781 xtest_add_attr(&param_count, params, TEE_ATTR_DH_BASE,
4782 ARRAY(derive_key_dh_base));
4783
4784 xtest_add_attr(&param_count, params, TEE_ATTR_DH_PUBLIC_VALUE,
4785 ARRAY(derive_key_dh_public_value));
4786
4787 xtest_add_attr(&param_count, params, TEE_ATTR_DH_PRIVATE_VALUE,
4788 ARRAY(derive_key_dh_private_value));
4789
4790 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4791 ta_crypt_cmd_populate_transient_object(c, &session, key_handle,
4792 params, param_count)))
4793 goto out;
4794
4795 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4796 ta_crypt_cmd_set_operation_key(c, &session, op, key_handle)))
4797 goto out;
4798
4799 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4800 ta_crypt_cmd_free_transient_object(c, & session, key_handle)))
4801 goto out;
4802
4803 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4804 ta_crypt_cmd_allocate_transient_object(c, &session,
4805 TEE_TYPE_GENERIC_SECRET, derive_key_max_keysize,
4806 &sv_handle)))
4807 goto out;
4808
Pascal Brand2b92b642015-07-16 13:29:42 +02004809 /* reuse but reset params and param-count */
Pascal Brandc639ac82015-07-02 08:53:34 +02004810 param_count = 0;
4811
4812 xtest_add_attr(&param_count, params, TEE_ATTR_DH_PUBLIC_VALUE,
4813 ARRAY(derive_key_dh_public_value_2));
4814
4815 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4816 ta_crypt_cmd_derive_key(c, &session, op, sv_handle, params,
4817 param_count)))
4818 goto out;
4819
4820 out_size = sizeof(out);
4821 memset(out, 0, sizeof(out));
4822 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4823 ta_crypt_cmd_get_object_buffer_attribute(c, &session, sv_handle,
4824 TEE_ATTR_SECRET_VALUE, out, &out_size)))
4825 goto out;
4826
4827 if (!ADBG_EXPECT_BUFFER(c, derive_key_dh_shared_secret,
4828 sizeof(derive_key_dh_shared_secret), out,
4829 out_size))
4830 goto out;
4831
4832 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4833 ta_crypt_cmd_free_operation(c, &session, op)))
4834 goto out;
4835
4836 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4837 ta_crypt_cmd_free_transient_object(c, &session, sv_handle)))
4838 goto out;
4839out:
4840 Do_ADBG_EndSubCase(c, "Derive DH key success");
4841 TEEC_CloseSession(&session);
4842}
Pascal Brand2b92b642015-07-16 13:29:42 +02004843
4844static void xtest_tee_test_4009(ADBG_Case_t *c)
4845{
4846 TEEC_Session session = { 0 };
4847 uint32_t ret_orig;
4848 TEE_OperationHandle op;
4849 TEE_ObjectHandle key_handle;
4850 TEE_ObjectHandle sv_handle;
4851 TEE_Attribute params[4];
4852 size_t param_count = 0;
4853 uint8_t out[2048];
4854 size_t out_size;
4855 uint32_t size_bytes;
Peng Fane13ad9b2015-07-21 11:46:26 +08004856 uint32_t i;
Pascal Brand2b92b642015-07-16 13:29:42 +02004857 struct derive_key_ecdh_t *pt;
4858
4859 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4860 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
4861 &ret_orig)))
4862 return;
4863
4864 for (i = 0; i < ARRAY_SIZE(derive_key_ecdh); i++) {
4865 pt = &derive_key_ecdh[i];
4866
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02004867 if (pt->level > level)
4868 continue;
4869
Pascal Brand2b92b642015-07-16 13:29:42 +02004870 Do_ADBG_BeginSubCase(c, "Derive ECDH key - algo = 0x%x",
4871 pt->algo);
4872 size_bytes = (pt->keysize + 7) / 8;
4873 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4874 ta_crypt_cmd_allocate_operation(c, &session, &op,
4875 pt->algo,
4876 TEE_MODE_DERIVE, pt->keysize)))
4877 goto out;
4878
4879 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4880 ta_crypt_cmd_allocate_transient_object(c, & session,
4881 TEE_TYPE_ECDH_KEYPAIR, pt->keysize,
4882 &key_handle)))
4883 goto out;
4884
4885 param_count = 0;
4886 xtest_add_attr_value(&param_count, params,
4887 TEE_ATTR_ECC_CURVE, pt->curve, 0);
4888 xtest_add_attr(&param_count, params,
4889 TEE_ATTR_ECC_PRIVATE_VALUE,
4890 pt->private, size_bytes);
4891 /*
4892 * The public value is not used. This is why we provide
4893 * another buffer
4894 */
4895 xtest_add_attr(&param_count, params,
4896 TEE_ATTR_ECC_PUBLIC_VALUE_X,
4897 pt->private, size_bytes);
4898 xtest_add_attr(&param_count, params,
4899 TEE_ATTR_ECC_PUBLIC_VALUE_Y,
4900 pt->private, size_bytes);
4901
4902 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4903 ta_crypt_cmd_populate_transient_object(c,
4904 &session,
4905 key_handle, params, param_count)))
4906 goto out;
4907
4908 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4909 ta_crypt_cmd_set_operation_key(c, &session, op,
4910 key_handle)))
4911 goto out;
4912
4913 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4914 ta_crypt_cmd_free_transient_object(c, & session,
4915 key_handle)))
4916 goto out;
4917
4918 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4919 ta_crypt_cmd_allocate_transient_object(c, &session,
4920 TEE_TYPE_GENERIC_SECRET, size_bytes * 8,
4921 &sv_handle)))
4922 goto out;
4923
4924 /* reuse but reset params and param-count */
4925 param_count = 0;
4926
4927 xtest_add_attr(&param_count, params,
4928 TEE_ATTR_ECC_PUBLIC_VALUE_X,
4929 pt->public_x, size_bytes);
4930 xtest_add_attr(&param_count, params,
4931 TEE_ATTR_ECC_PUBLIC_VALUE_Y,
4932 pt->public_y, size_bytes);
4933
4934 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4935 ta_crypt_cmd_derive_key(c, &session, op, sv_handle,
4936 params, param_count)))
4937 goto out;
4938
4939 out_size = sizeof(out);
4940 memset(out, 0, sizeof(out));
4941 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4942 ta_crypt_cmd_get_object_buffer_attribute(c, &session,
4943 sv_handle,
4944 TEE_ATTR_SECRET_VALUE, out, &out_size)))
4945 goto out;
4946
4947 if (!ADBG_EXPECT_BUFFER(c, pt->out, size_bytes,
4948 out, out_size))
4949 goto out;
4950
4951 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4952 ta_crypt_cmd_free_operation(c, &session, op)))
4953 goto out;
4954
4955 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4956 ta_crypt_cmd_free_transient_object(c, &session,
4957 sv_handle)))
4958 goto out;
4959
4960 Do_ADBG_EndSubCase(c, "Derive ECDH key - algo = 0x%x",
4961 pt->algo);
4962 }
4963
4964 goto noerror;
4965
4966out:
4967 Do_ADBG_EndSubCase(c, "Derive ECDH key - algo = 0x%x", pt->algo);
4968
4969noerror:
4970 TEEC_CloseSession(&session);
4971}
Jens Wiklander70a0b2c2016-05-18 08:39:35 +02004972
4973static void xtest_tee_test_4010(ADBG_Case_t *c)
4974{
4975 TEEC_Session session = { 0 };
4976 uint32_t ret_orig;
4977 TEE_ObjectHandle o;
4978 static const uint8_t large_key[1024] = { 1, 2, 3, 4, 5, 6 };
4979 static const TEE_Attribute attr = {
4980 .attributeID = TEE_ATTR_SECRET_VALUE,
4981 .content.ref.buffer = (void *)large_key,
4982 .content.ref.length = sizeof(large_key),
4983 };
4984
4985 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4986 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
4987 &ret_orig)))
4988 return;
4989
4990 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4991 ta_crypt_cmd_allocate_transient_object(c, &session,
4992 TEE_TYPE_HMAC_SHA256, 1024, &o)))
4993 goto out;
4994
4995 ADBG_EXPECT_TEEC_RESULT(c, TEEC_ERROR_TARGET_DEAD,
4996 ta_crypt_cmd_populate_transient_object(c, &session, o,
4997 &attr, 1));
4998
4999out:
5000 TEEC_CloseSession(&session);
5001}
Jens Wiklanderb58916e2016-07-07 15:29:32 +02005002
5003static void xtest_tee_test_4011(ADBG_Case_t *c)
5004{
5005 TEEC_Session s = { 0 };
5006 size_t key_size = 512;
5007 TEE_ObjectHandle key;
5008 TEE_OperationHandle ops;
5009 TEE_OperationHandle opv;
5010 TEE_OperationHandle ope;
5011 TEE_OperationHandle opd;
5012 uint32_t ret_orig;
5013 uint8_t in[TEE_SHA1_HASH_SIZE];
5014 uint8_t out[1024];
5015 uint8_t tmp[1024];
5016 size_t out_size;
5017 size_t tmp_size;
5018 size_t n;
5019 size_t m;
5020 size_t i = 0;
5021
5022 /* Setup session, initialize message to sign, create a keypair */
5023 if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&s,
5024 &crypt_user_ta_uuid, NULL, &ret_orig)))
5025 return;
5026 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_random_number_generate(c,
5027 &s, in, sizeof(in))))
5028 goto out;
5029 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_transient_object(
5030 c, &s, TEE_TYPE_RSA_KEYPAIR, key_size, &key)))
5031 goto out;
5032 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_generate_key(c, &s,
5033 key, key_size, NULL, 0)))
5034 goto out;
5035
5036 /* Allocate operations for sign, verify, encrypt and decrypt */
5037 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, &s,
5038 &ops, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
5039 key_size)))
5040 goto out;
5041 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, &s,
5042 &opv, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
5043 key_size)))
5044 goto out;
5045 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, &s,
5046 &ope, TEE_ALG_RSA_NOPAD, TEE_MODE_ENCRYPT, key_size)))
5047 goto out;
5048 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, &s,
5049 &opd, TEE_ALG_RSA_NOPAD, TEE_MODE_DECRYPT, key_size)))
5050 goto out;
5051
5052 /* Assign the keypair to all operations */
5053 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5054 ta_crypt_cmd_set_operation_key(c, &s, ops, key)))
5055 goto out;
5056 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5057 ta_crypt_cmd_set_operation_key(c, &s, opv, key)))
5058 goto out;
5059 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5060 ta_crypt_cmd_set_operation_key(c, &s, ope, key)))
5061 goto out;
5062 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5063 ta_crypt_cmd_set_operation_key(c, &s, opd, key)))
5064 goto out;
5065
5066 /*
5067 * The core of the test case is inspired by the one in libtomcrypt:
5068 * https://github.com/libtom/libtomcrypt/blob/6ad52252688bb34f90b5e79da4830a927e87b81f/testprof/rsa_test.c#L398
5069 *
5070 * Testcase for Bleichenbacher attack
5071 *
5072 * (1) Create a valid signature
5073 * (2) Check that it can be verified
5074 * (3) Transform the package to fetch plain text (using the encrypt
5075 * operation in GP TEE Internal API)
5076 * (4) Forge the structure of PKCS#1-EMSA encoded data
5077 * (4.1) Search for start and end of the padding string
5078 * (4.2) Move the signature to the front of the padding string
5079 * (4.3) Zero the message until the end
5080 * (5) Transform the package back (using the decrypt operation in
5081 * GP TEE Internal API)
5082 * (6) The result should not be valid if the implementation is robust.
5083 */
5084
5085
5086 for (i = 0; i < 9; i++) {
5087 Do_ADBG_Log("Iteration %zu", i);
5088
5089 /* 1 */
5090 out_size = sizeof(out);
5091 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5092 ta_crypt_cmd_asymmetric_sign(c, &s, ops, NULL, 0,
5093 in, sizeof(in), out, &out_size)))
5094 goto out;
5095
5096 /* 2 */
5097 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5098 ta_crypt_cmd_asymmetric_verify(c, &s, opv, NULL, 0,
5099 in, sizeof(in), out, out_size)))
5100 goto out;
5101
5102 /* 3 */
5103 tmp_size = sizeof(tmp);
5104 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5105 ta_crypt_cmd_asymmetric_encrypt(c, &s, ope, NULL, 0,
5106 out, out_size, tmp, &tmp_size)))
5107 goto out;
5108
5109 /* 4.1 */
5110 for (n = 0; n < tmp_size; n++)
5111 if (tmp[n] == 0xff)
5112 break;
5113 for (m = n + 1; m < tmp_size; m++)
5114 if (tmp[m] != 0xff)
5115 break;
5116 /* 4.2 */
5117 memmove(tmp + n + i, tmp + m, tmp_size - m);
5118 /* 4.3 */
5119 for (n = n + tmp_size - m + i; n < tmp_size; n++)
5120 tmp[n] = 0;
5121
5122 /* 5 */
5123 out_size = sizeof(out);
5124 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5125 ta_crypt_cmd_asymmetric_decrypt(c, &s, opd, NULL, 0,
5126 tmp, tmp_size, out, &out_size)))
5127 goto out;
5128
5129 /* 6 */
5130 if (!ADBG_EXPECT_TEEC_RESULT(c, TEE_ERROR_SIGNATURE_INVALID,
5131 ta_crypt_cmd_asymmetric_verify(c, &s, opv, NULL, 0,
5132 in, sizeof(in), out, out_size)))
5133 goto out;
5134 }
5135
5136out:
5137 TEEC_CloseSession(&s);
5138}