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