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