blob: 5749af8db5d8ded8670d5b7c2c230cfdfb75495d [file] [log] [blame]
Pascal Brandc639ac82015-07-02 08:53:34 +02001/*
2 * Copyright (c) 2014, STMicroelectronics International N.V.
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License Version 2 as
6 * published by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 */
13
14#include <stdio.h>
15#include <string.h>
16#include <inttypes.h>
17#include <malloc.h>
Igor Opaniuk7ddaa782018-05-25 15:14:05 +030018#include <time.h>
Pascal Brandc639ac82015-07-02 08:53:34 +020019
20#include "xtest_test.h"
21#include "xtest_helpers.h"
22
23#include <tee_api_types.h>
Gabor Szekely2ad190f2018-09-14 14:05:06 +000024#include <tee_api_defines_extensions.h>
Pascal Brandc639ac82015-07-02 08:53:34 +020025#include <ta_crypt.h>
26#include <utee_defines.h>
27#include <util.h>
28
Jerome Forissier213ca8a2017-03-31 11:27:56 +020029#include <regression_4000_data.h>
Cedric Chaumontc7654962015-09-09 14:56:36 +020030#include <nist/186-2ecdsatestvectors.h>
Pascal Brandc639ac82015-07-02 08:53:34 +020031
32#include <assert.h>
33
Pascal Brandc639ac82015-07-02 08:53:34 +020034static TEEC_Result ta_crypt_cmd_reset_operation(ADBG_Case_t *c, TEEC_Session *s,
35 TEE_OperationHandle oph)
36{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +010037 TEEC_Result res = TEEC_ERROR_GENERIC;
Pascal Brandc639ac82015-07-02 08:53:34 +020038 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Etienne Carrieree4ec9e42019-03-28 13:30:21 +010039 uint32_t ret_orig = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +020040
41 assert((uintptr_t)oph <= UINT32_MAX);
42 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
43 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE,
44 TEEC_NONE);
45 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_RESET_OPERATION, &op,
46 &ret_orig);
47 if (res != TEEC_SUCCESS) {
48 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
49 ret_orig);
50 }
51 return res;
52}
53
54static TEEC_Result ta_crypt_cmd_copy_operation(ADBG_Case_t *c,
55 TEEC_Session *s,
56 TEE_OperationHandle dst_oph,
57 TEE_OperationHandle src_oph)
58{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +010059 TEEC_Result res = TEEC_ERROR_GENERIC;
Pascal Brandc639ac82015-07-02 08:53:34 +020060 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Etienne Carrieree4ec9e42019-03-28 13:30:21 +010061 uint32_t ret_orig = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +020062
63 assert((uintptr_t)dst_oph <= UINT32_MAX);
64 op.params[0].value.a = (uint32_t)(uintptr_t)dst_oph;
65
66 assert((uintptr_t)src_oph <= UINT32_MAX);
67 op.params[0].value.b = (uint32_t)(uintptr_t)src_oph;
68 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE,
69 TEEC_NONE);
70
71 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_COPY_OPERATION, &op,
72 &ret_orig);
73
74 if (res != TEEC_SUCCESS) {
75 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
76 ret_orig);
77 }
78 return res;
79}
80
81static TEEC_Result ta_crypt_cmd_digest_update(ADBG_Case_t *c, TEEC_Session *s,
82 TEE_OperationHandle oph,
83 const void *chunk,
84 size_t chunk_size)
85{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +010086 TEEC_Result res = TEEC_ERROR_GENERIC;
Pascal Brandc639ac82015-07-02 08:53:34 +020087 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Etienne Carrieree4ec9e42019-03-28 13:30:21 +010088 uint32_t ret_orig = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +020089
90 assert((uintptr_t)oph <= UINT32_MAX);
91 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
92 op.params[1].tmpref.buffer = (void *)chunk;
93 op.params[1].tmpref.size = chunk_size;
94
95 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
96 TEEC_MEMREF_TEMP_INPUT, TEEC_NONE,
97 TEEC_NONE);
98
99 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_DIGEST_UPDATE, &op, &ret_orig);
100
101 if (res != TEEC_SUCCESS) {
102 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
103 ret_orig);
104 }
105
106 return res;
107}
108
109static TEEC_Result ta_crypt_cmd_digest_do_final(ADBG_Case_t *c, TEEC_Session *s,
110 TEE_OperationHandle oph,
111 const void *chunk,
112 size_t chunk_len, void *hash,
113 size_t *hash_len)
114{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100115 TEEC_Result res = TEEC_ERROR_GENERIC;
Pascal Brandc639ac82015-07-02 08:53:34 +0200116 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100117 uint32_t ret_orig = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +0200118
119 assert((uintptr_t)oph <= UINT32_MAX);
120 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
121
122 op.params[1].tmpref.buffer = (void *)chunk;
123 op.params[1].tmpref.size = chunk_len;
124
125 op.params[2].tmpref.buffer = (void *)hash;
126 op.params[2].tmpref.size = *hash_len;
127
128 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
129 TEEC_MEMREF_TEMP_INPUT,
130 TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE);
131
132 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_DIGEST_DO_FINAL, &op,
133 &ret_orig);
134
135 if (res != TEEC_SUCCESS) {
136 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
137 ret_orig);
138 }
139
140 if (res == TEEC_SUCCESS)
141 *hash_len = op.params[2].tmpref.size;
142
143 return res;
144}
145
146static TEE_Result ta_crypt_cmd_set_operation_key2(ADBG_Case_t *c,
147 TEEC_Session *s,
148 TEE_OperationHandle oph,
149 TEE_ObjectHandle key1,
150 TEE_ObjectHandle key2)
151{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100152 TEEC_Result res = TEEC_ERROR_GENERIC;
Pascal Brandc639ac82015-07-02 08:53:34 +0200153 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100154 uint32_t ret_orig = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +0200155
156 assert((uintptr_t)oph <= UINT32_MAX);
157 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
158
159 assert((uintptr_t)key1 <= UINT32_MAX);
160 op.params[0].value.b = (uint32_t)(uintptr_t)key1;
161
162 assert((uintptr_t)key2 <= UINT32_MAX);
163 op.params[1].value.a = (uint32_t)(uintptr_t)key2;
164 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_INPUT,
165 TEEC_NONE, TEEC_NONE);
166
167 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_SET_OPERATION_KEY2, &op,
168 &ret_orig);
169
170 if (res != TEEC_SUCCESS) {
171 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
172 ret_orig);
173 }
174
175 return res;
176}
177
178static TEEC_Result ta_crypt_cmd_mac_init(ADBG_Case_t *c, TEEC_Session *s,
179 TEE_OperationHandle oph,
180 const void *iv, size_t iv_len)
181{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100182 TEEC_Result res = TEEC_ERROR_GENERIC;
Pascal Brandc639ac82015-07-02 08:53:34 +0200183 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100184 uint32_t ret_orig = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +0200185
186 assert((uintptr_t)oph <= UINT32_MAX);
187 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
188
189 if (iv != NULL) {
190 op.params[1].tmpref.buffer = (void *)iv;
191 op.params[1].tmpref.size = iv_len;
192 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
193 TEEC_MEMREF_TEMP_INPUT,
194 TEEC_NONE, TEEC_NONE);
195 } else {
196 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE,
197 TEEC_NONE, TEEC_NONE);
198 }
199
200 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_MAC_INIT, &op, &ret_orig);
201
202 if (res != TEEC_SUCCESS) {
203 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
204 ret_orig);
205 }
206
207 return res;
208}
209
210static TEEC_Result ta_crypt_cmd_mac_update(ADBG_Case_t *c, TEEC_Session *s,
211 TEE_OperationHandle oph,
212 const void *chunk, size_t chunk_size)
213{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100214 TEEC_Result res = TEEC_ERROR_GENERIC;
Pascal Brandc639ac82015-07-02 08:53:34 +0200215 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100216 uint32_t ret_orig = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +0200217
218 assert((uintptr_t)oph <= UINT32_MAX);
219 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
220
221 op.params[1].tmpref.buffer = (void *)chunk;
222 op.params[1].tmpref.size = chunk_size;
223
224 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
225 TEEC_MEMREF_TEMP_INPUT, TEEC_NONE,
226 TEEC_NONE);
227
228 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_MAC_UPDATE, &op, &ret_orig);
229
230 if (res != TEEC_SUCCESS) {
231 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
232 ret_orig);
233 }
234
235 return res;
236}
237
238static TEEC_Result ta_crypt_cmd_mac_final_compute(ADBG_Case_t *c,
239 TEEC_Session *s,
240 TEE_OperationHandle oph,
241 const void *chunk,
242 size_t chunk_len,
243 void *hash,
244 size_t *hash_len)
245{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100246 TEEC_Result res = TEEC_ERROR_GENERIC;
Pascal Brandc639ac82015-07-02 08:53:34 +0200247 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100248 uint32_t ret_orig = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +0200249
250 assert((uintptr_t)oph <= UINT32_MAX);
251 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
252
253 op.params[1].tmpref.buffer = (void *)chunk;
254 op.params[1].tmpref.size = chunk_len;
255
256 op.params[2].tmpref.buffer = (void *)hash;
257 op.params[2].tmpref.size = *hash_len;
258
259 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
260 TEEC_MEMREF_TEMP_INPUT,
261 TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE);
262
263 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_MAC_FINAL_COMPUTE, &op,
264 &ret_orig);
265
266 if (res != TEEC_SUCCESS) {
267 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
268 ret_orig);
269 }
270
271 if (res == TEEC_SUCCESS)
272 *hash_len = op.params[2].tmpref.size;
273
274 return res;
275}
276
277static TEEC_Result ta_crypt_cmd_cipher_init(ADBG_Case_t *c, TEEC_Session *s,
278 TEE_OperationHandle oph,
279 const void *iv, size_t iv_len)
280{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100281 TEEC_Result res = TEEC_ERROR_GENERIC;
Pascal Brandc639ac82015-07-02 08:53:34 +0200282 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100283 uint32_t ret_orig = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +0200284
285 assert((uintptr_t)oph <= UINT32_MAX);
286 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
287
288 if (iv != NULL) {
289 op.params[1].tmpref.buffer = (void *)iv;
290 op.params[1].tmpref.size = iv_len;
291
292 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
293 TEEC_MEMREF_TEMP_INPUT,
294 TEEC_NONE, TEEC_NONE);
295 } else {
296 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE,
297 TEEC_NONE, TEEC_NONE);
298 }
299
300 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_CIPHER_INIT, &op, &ret_orig);
301
302 if (res != TEEC_SUCCESS) {
303 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
304 ret_orig);
305 }
306
307 return res;
308}
309
310static TEEC_Result ta_crypt_cmd_cipher_update(ADBG_Case_t *c, TEEC_Session *s,
311 TEE_OperationHandle oph,
312 const void *src, size_t src_len,
313 void *dst, size_t *dst_len)
314{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100315 TEEC_Result res = TEEC_ERROR_GENERIC;
Pascal Brandc639ac82015-07-02 08:53:34 +0200316 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100317 uint32_t ret_orig = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +0200318
319 assert((uintptr_t)oph <= UINT32_MAX);
320 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
321
322 op.params[1].tmpref.buffer = (void *)src;
323 op.params[1].tmpref.size = src_len;
324
325 op.params[2].tmpref.buffer = dst;
326 op.params[2].tmpref.size = *dst_len;
327
328 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
329 TEEC_MEMREF_TEMP_INPUT,
330 TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE);
331
332 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_CIPHER_UPDATE, &op, &ret_orig);
333
334 if (res != TEEC_SUCCESS) {
335 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
336 ret_orig);
337 }
338
339 if (res == TEEC_SUCCESS)
340 *dst_len = op.params[2].tmpref.size;
341
342 return res;
343}
344
345static TEEC_Result ta_crypt_cmd_cipher_do_final(ADBG_Case_t *c,
346 TEEC_Session *s,
347 TEE_OperationHandle oph,
348 const void *src,
349 size_t src_len,
350 void *dst,
351 size_t *dst_len)
352{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100353 TEEC_Result res = TEEC_ERROR_GENERIC;
Pascal Brandc639ac82015-07-02 08:53:34 +0200354 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100355 uint32_t ret_orig = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +0200356
357 assert((uintptr_t)oph <= UINT32_MAX);
358 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
359
360 op.params[1].tmpref.buffer = (void *)src;
361 op.params[1].tmpref.size = src_len;
362
363 op.params[2].tmpref.buffer = (void *)dst;
364 op.params[2].tmpref.size = *dst_len;
365
366 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
367 TEEC_MEMREF_TEMP_INPUT,
368 TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE);
369
370 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_CIPHER_DO_FINAL, &op,
371 &ret_orig);
372
373 if (res != TEEC_SUCCESS) {
374 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
375 ret_orig);
376 }
377
378 if (res == TEEC_SUCCESS)
379 *dst_len = op.params[2].tmpref.size;
380
381 return res;
382}
383
384static TEEC_Result ta_crypt_cmd_random_number_generate(ADBG_Case_t *c,
385 TEEC_Session *s,
386 void *buf,
387 size_t blen)
388{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100389 TEEC_Result res = TEEC_ERROR_GENERIC;
Pascal Brandc639ac82015-07-02 08:53:34 +0200390 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100391 uint32_t ret_orig = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +0200392
393 op.params[0].tmpref.buffer = buf;
394 op.params[0].tmpref.size = blen;
395
396 op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE,
397 TEEC_NONE, TEEC_NONE);
398
399 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_RANDOM_NUMBER_GENEREATE, &op,
400 &ret_orig);
401
402 if (res != TEEC_SUCCESS) {
403 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
404 ret_orig);
405 }
406
407 (void)ADBG_EXPECT_COMPARE_UNSIGNED(c, blen, ==,
408 op.params[0].tmpref.size);
409 return res;
410}
411
412static TEEC_Result ta_crypt_cmd_ae_init(ADBG_Case_t *c, TEEC_Session *s,
413 TEE_OperationHandle oph,
414 const void *nonce, size_t nonce_len,
415 size_t tag_len, size_t aad_len,
416 size_t payload_len)
417{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100418 TEEC_Result res = TEEC_ERROR_GENERIC;
Pascal Brandc639ac82015-07-02 08:53:34 +0200419 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100420 uint32_t ret_orig = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +0200421
422 assert((uintptr_t)oph <= UINT32_MAX);
423 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
424 op.params[0].value.b = tag_len;
425
426 op.params[1].tmpref.buffer = (void *)nonce;
427 op.params[1].tmpref.size = nonce_len;
428
429 op.params[2].value.a = aad_len;
430 op.params[2].value.b = payload_len;
431
432 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
433 TEEC_MEMREF_TEMP_INPUT,
Jens Wiklander74a42302015-07-07 01:08:41 +0200434 TEEC_VALUE_INPUT, TEEC_NONE);
Pascal Brandc639ac82015-07-02 08:53:34 +0200435
436 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_AE_INIT, &op, &ret_orig);
437
438 if (res != TEEC_SUCCESS) {
439 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
440 ret_orig);
441 }
442 return res;
443}
444
445static TEEC_Result ta_crypt_cmd_ae_update_aad(ADBG_Case_t *c, TEEC_Session *s,
446 TEE_OperationHandle oph,
447 const void *aad, size_t aad_len)
448{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100449 TEEC_Result res = TEEC_ERROR_GENERIC;
Pascal Brandc639ac82015-07-02 08:53:34 +0200450 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100451 uint32_t ret_orig = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +0200452
453 assert((uintptr_t)oph <= UINT32_MAX);
454 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
455
456 op.params[1].tmpref.buffer = (void *)aad;
457 op.params[1].tmpref.size = aad_len;
458
459 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
460 TEEC_MEMREF_TEMP_INPUT, TEEC_NONE,
461 TEEC_NONE);
462
463 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_AE_UPDATE_AAD, &op, &ret_orig);
464
465 if (res != TEEC_SUCCESS) {
466 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
467 ret_orig);
468 }
469
470 return res;
471}
472
473static TEEC_Result ta_crypt_cmd_ae_update(ADBG_Case_t *c,
474 TEEC_Session *s,
475 TEE_OperationHandle oph,
476 const void *src,
477 size_t src_len,
478 void *dst,
479 size_t *dst_len)
480{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100481 TEEC_Result res = TEEC_ERROR_GENERIC;
Pascal Brandc639ac82015-07-02 08:53:34 +0200482 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100483 uint32_t ret_orig = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +0200484
485 assert((uintptr_t)oph <= UINT32_MAX);
486 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
487
488 op.params[1].tmpref.buffer = (void *)src;
489 op.params[1].tmpref.size = src_len;
490
491 op.params[2].tmpref.buffer = (void *)dst;
492 op.params[2].tmpref.size = *dst_len;
493
494 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
495 TEEC_MEMREF_TEMP_INPUT,
496 TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE);
497
498 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_AE_UPDATE, &op, &ret_orig);
499
500 if (res != TEEC_SUCCESS) {
501 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
502 ret_orig);
503 }
504
505 if (res == TEEC_SUCCESS)
506 *dst_len = op.params[2].tmpref.size;
507
508 return res;
509}
510
511static TEEC_Result ta_crypt_cmd_ae_encrypt_final(ADBG_Case_t *c,
512 TEEC_Session *s,
513 TEE_OperationHandle oph,
514 const void *src,
515 size_t src_len, void *dst,
516 size_t *dst_len, void *tag,
517 size_t *tag_len)
518{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100519 TEEC_Result res = TEEC_ERROR_GENERIC;
Pascal Brandc639ac82015-07-02 08:53:34 +0200520 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100521 uint32_t ret_orig = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +0200522
523 assert((uintptr_t)oph <= UINT32_MAX);
524 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
525
526 op.params[1].tmpref.buffer = (void *)src;
527 op.params[1].tmpref.size = src_len;
528
529 op.params[2].tmpref.buffer = (void *)dst;
530 op.params[2].tmpref.size = *dst_len;
531
532 op.params[3].tmpref.buffer = (void *)tag;
533 op.params[3].tmpref.size = *tag_len;
534
535 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
536 TEEC_MEMREF_TEMP_INPUT,
537 TEEC_MEMREF_TEMP_OUTPUT,
538 TEEC_MEMREF_TEMP_OUTPUT);
539
540 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_AE_ENCRYPT_FINAL, &op,
541 &ret_orig);
542
543 if (res != TEEC_SUCCESS) {
544 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
545 ret_orig);
546 }
547
548 if (res == TEEC_SUCCESS) {
549 *dst_len = op.params[2].tmpref.size;
550 *tag_len = op.params[3].tmpref.size;
551 }
552
553 return res;
554}
555
556static TEEC_Result ta_crypt_cmd_ae_decrypt_final(ADBG_Case_t *c,
557 TEEC_Session *s,
558 TEE_OperationHandle oph,
559 const void *src, size_t src_len,
560 void *dst, size_t *dst_len,
561 const void *tag, size_t tag_len)
562{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100563 TEEC_Result res = TEEC_ERROR_GENERIC;
Pascal Brandc639ac82015-07-02 08:53:34 +0200564 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100565 uint32_t ret_orig = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +0200566
567 assert((uintptr_t)oph <= UINT32_MAX);
568 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
569
570 op.params[1].tmpref.buffer = (void *)src;
571 op.params[1].tmpref.size = src_len;
572
573 op.params[2].tmpref.buffer = dst;
574 op.params[2].tmpref.size = *dst_len;
575
576 op.params[3].tmpref.buffer = (void *)tag;
577 op.params[3].tmpref.size = tag_len;
578
579 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
580 TEEC_MEMREF_TEMP_INPUT,
581 TEEC_MEMREF_TEMP_OUTPUT,
582 TEEC_MEMREF_TEMP_INPUT);
583
584 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_AE_DECRYPT_FINAL, &op,
585 &ret_orig);
586
587 if (res != TEEC_SUCCESS) {
588 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
589 ret_orig);
590 }
591
592 if (res == TEEC_SUCCESS)
593 *dst_len = op.params[2].tmpref.size;
594
595 return res;
596}
597
598static TEEC_Result ta_crypt_cmd_asymmetric_operate(ADBG_Case_t *c,
599 TEEC_Session *s,
600 TEE_OperationHandle oph,
601 uint32_t cmd,
602 const TEE_Attribute *params,
603 uint32_t paramCount,
604 const void *src,
605 size_t src_len,
606 void *dst,
607 size_t *dst_len)
608{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100609 TEEC_Result res = TEEC_ERROR_GENERIC;
Pascal Brandc639ac82015-07-02 08:53:34 +0200610 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100611 uint32_t ret_orig = 0;
612 uint8_t *buf = NULL;
613 size_t blen = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +0200614
615 res = pack_attrs(params, paramCount, &buf, &blen);
616 if (!ADBG_EXPECT_TEEC_SUCCESS(c, res))
617 return res;
618
619 assert((uintptr_t)oph <= UINT32_MAX);
620 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
621
622 op.params[1].tmpref.buffer = buf;
623 op.params[1].tmpref.size = blen;
624
625 op.params[2].tmpref.buffer = (void *)src;
626 op.params[2].tmpref.size = src_len;
627
628 op.params[3].tmpref.buffer = dst;
629 op.params[3].tmpref.size = *dst_len;
630
631 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
632 TEEC_MEMREF_TEMP_INPUT,
633 TEEC_MEMREF_TEMP_INPUT,
634 TEEC_MEMREF_TEMP_OUTPUT);
635
636 res = TEEC_InvokeCommand(s, cmd, &op, &ret_orig);
637
638 if (res != TEEC_SUCCESS) {
639 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
640 ret_orig);
641 }
642
643 if (res == TEEC_SUCCESS)
644 *dst_len = op.params[3].tmpref.size;
645
646 free(buf);
647 return res;
648}
649
650static TEEC_Result ta_crypt_cmd_asymmetric_encrypt(ADBG_Case_t *c,
651 TEEC_Session *s,
652 TEE_OperationHandle oph,
653 const TEE_Attribute *params,
654 uint32_t paramCount,
655 const void *src,
656 size_t src_len,
657 void *dst,
658 size_t *dst_len)
659{
660 return ta_crypt_cmd_asymmetric_operate(c, s, oph,
661 TA_CRYPT_CMD_ASYMMETRIC_ENCRYPT,
662 params, paramCount,
663 src, src_len, dst, dst_len);
664}
665
666static TEEC_Result ta_crypt_cmd_asymmetric_decrypt(ADBG_Case_t *c,
667 TEEC_Session *s,
668 TEE_OperationHandle oph,
669 const TEE_Attribute *params,
670 uint32_t paramCount,
671 const void *src,
672 size_t src_len,
673 void *dst,
674 size_t *dst_len)
675{
676 return ta_crypt_cmd_asymmetric_operate(c, s, oph,
677 TA_CRYPT_CMD_ASYMMETRIC_DECRYPT,
678 params, paramCount,
679 src, src_len, dst, dst_len);
680}
681
682static TEEC_Result ta_crypt_cmd_asymmetric_sign(ADBG_Case_t *c,
683 TEEC_Session *s,
684 TEE_OperationHandle oph,
685 const TEE_Attribute *params,
686 uint32_t paramCount,
687 const void *digest,
688 size_t digest_len,
689 void *signature,
690 size_t *signature_len)
691{
692 return ta_crypt_cmd_asymmetric_operate(c, s, oph,
693 TA_CRYPT_CMD_ASYMMETRIC_SIGN_DIGEST, params, paramCount,
694 digest, digest_len, signature, signature_len);
695}
696
697static TEEC_Result ta_crypt_cmd_asymmetric_verify(ADBG_Case_t *c,
698 TEEC_Session *s,
699 TEE_OperationHandle oph,
700 const TEE_Attribute *params,
701 uint32_t paramCount,
702 const void *digest,
703 size_t digest_len,
704 const void *signature,
705 size_t signature_len)
706{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100707 TEEC_Result res = TEEC_ERROR_GENERIC;
Pascal Brandc639ac82015-07-02 08:53:34 +0200708 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100709 uint32_t ret_orig = 0;
710 uint8_t *buf = NULL;
711 size_t blen = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +0200712
713 res = pack_attrs(params, paramCount, &buf, &blen);
714 if (!ADBG_EXPECT_TEEC_SUCCESS(c, res))
715 return res;
716
717 assert((uintptr_t)oph <= UINT32_MAX);
718 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
719
720 op.params[1].tmpref.buffer = buf;
721 op.params[1].tmpref.size = blen;
722
723 op.params[2].tmpref.buffer = (void *)digest;
724 op.params[2].tmpref.size = digest_len;
725
726 op.params[3].tmpref.buffer = (void *)signature;
727 op.params[3].tmpref.size = signature_len;
728
729 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
730 TEEC_MEMREF_TEMP_INPUT,
731 TEEC_MEMREF_TEMP_INPUT,
732 TEEC_MEMREF_TEMP_INPUT);
733
734 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_ASYMMETRIC_VERIFY_DIGEST,
735 &op, &ret_orig);
736
737 if (res != TEEC_SUCCESS) {
738 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
739 ret_orig);
740 }
741
742 free(buf);
743 return res;
744}
745
746static TEEC_Result ta_crypt_cmd_get_object_value_attribute(ADBG_Case_t *c,
747 TEEC_Session *s,
748 TEE_ObjectHandle o,
749 uint32_t attr_id,
750 uint32_t *valuea,
751 uint32_t *valueb)
752{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100753 TEEC_Result res = TEEC_ERROR_GENERIC;
Pascal Brandc639ac82015-07-02 08:53:34 +0200754 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100755 uint32_t ret_orig = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +0200756
757 assert((uintptr_t)o <= UINT32_MAX);
758 op.params[0].value.a = (uint32_t)(uintptr_t)o;
759 op.params[0].value.b = attr_id;
760 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_OUTPUT,
761 TEEC_NONE, TEEC_NONE);
762
763 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_GET_OBJECT_VALUE_ATTRIBUTE,
764 &op, &ret_orig);
765
766 if (res != TEEC_SUCCESS) {
767 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
768 ret_orig);
769 }
770
771 if (res == TEEC_SUCCESS) {
772 *valuea = op.params[1].value.a;
773 *valueb = op.params[1].value.b;
774 }
775
776 return res;
777}
778
779static TEEC_Result ta_crypt_cmd_generate_key(ADBG_Case_t *c,
780 TEEC_Session *s,
781 TEE_ObjectHandle o,
782 uint32_t key_size,
783 const TEE_Attribute *params,
784 uint32_t paramCount)
785{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100786 TEEC_Result res = TEEC_ERROR_GENERIC;
Pascal Brandc639ac82015-07-02 08:53:34 +0200787 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100788 uint32_t ret_orig = 0;
789 uint8_t *buf = NULL;
790 size_t blen = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +0200791
792 res = pack_attrs(params, paramCount, &buf, &blen);
793 if (!ADBG_EXPECT_TEEC_SUCCESS(c, res))
794 return res;
795
796 assert((uintptr_t)o <= UINT32_MAX);
797 op.params[0].value.a = (uint32_t)(uintptr_t)o;
798 op.params[0].value.b = key_size;
799
800 op.params[1].tmpref.buffer = buf;
801 op.params[1].tmpref.size = blen;
802
803 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
804 TEEC_MEMREF_TEMP_INPUT, TEEC_NONE,
805 TEEC_NONE);
806
807 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_GENERATE_KEY, &op, &ret_orig);
808
809 if (res != TEEC_SUCCESS) {
810 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
811 ret_orig);
812 }
813
814 free(buf);
815 return res;
816}
817
818static const uint8_t hash_data_md5_in1[] = {
819 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm'
820};
821
822static const uint8_t hash_data_md5_out1[] = {
823 0x61, 0x12, 0x71, 0x83, 0x70, 0x8d, 0x3a, 0xc7,
824 0xf1, 0x9b, 0x66, 0x06, 0xfc, 0xae, 0x7d, 0xf6
825};
826
827static const uint8_t hash_data_sha1_in1[] = {
828 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm'
829};
830
831static const uint8_t hash_data_sha1_out1[] = {
832 0x4b, 0x98, 0x92, 0xb6, 0x52, 0x72, 0x14, 0xaf,
833 0xc6, 0x55, 0xb8, 0xaa, 0x52, 0xf4, 0xd2, 0x03,
834 0xc1, 0x5e, 0x7c, 0x9c
835};
836
837static const uint8_t hash_data_sha224_in1[] = {
838 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm'
839};
840
841static const uint8_t hash_data_sha224_out1[] = {
842 0x08, 0x21, 0x69, 0xf9, 0x77, 0x1b, 0x80, 0x15,
843 0xf3, 0x97, 0xae, 0xde, 0x5b, 0xba, 0xa2, 0x72,
844 0x2d, 0x8f, 0x5c, 0x19, 0xfe, 0xd2, 0xe2, 0x68,
845 0x92, 0x49, 0xd8, 0x44
846};
847
848static const uint8_t hash_data_sha256_in1[] = { 'a', 'b', 'c' };
849
850static const uint8_t hash_data_sha256_out1[] = {
851 0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea,
852 0x41, 0x41, 0x40, 0xde, 0x5d, 0xae, 0x22, 0x23,
853 0xb0, 0x03, 0x61, 0xa3, 0x96, 0x17, 0x7a, 0x9c,
854 0xb4, 0x10, 0xff, 0x61, 0xf2, 0x00, 0x15, 0xad
855};
856
857static const uint8_t hash_data_sha256_in2[] = { 'e', 'f', 'g' };
858
859static const uint8_t hash_data_sha256_out2[] = {
860 0xd4, 0xff, 0xe8, 0xe9, 0xee, 0x0b, 0x48, 0xeb,
861 0xa7, 0x16, 0x70, 0x61, 0x23, 0xa7, 0x18, 0x7f,
862 0x32, 0xea, 0xe3, 0xbd, 0xcb, 0x0e, 0x77, 0x63,
863 0xe4, 0x1e, 0x53, 0x32, 0x67, 0xbd, 0x8a, 0x53
864};
865
866
867static const uint8_t hash_data_sha384_in1[] = {
868 'a', 'b', 'c', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm'
869};
870
871static const uint8_t hash_data_sha384_out1[] = {
872 0x4c, 0xab, 0x80, 0x9d, 0x96, 0x84, 0x01, 0x47,
873 0x67, 0x0a, 0xc1, 0x7a, 0xb6, 0xb9, 0xf7, 0x6e,
874 0x35, 0xa6, 0xb0, 0x8c, 0xf5, 0x2a, 0x3d, 0x64,
875 0x9a, 0x8c, 0x7e, 0x0c, 0x55, 0x45, 0xd3, 0x7d,
876 0x1f, 0x7f, 0x28, 0x34, 0x96, 0x14, 0x44, 0x2a,
877 0xf5, 0x98, 0xa2, 0x95, 0x24, 0x76, 0x53, 0x97
878};
879
880static const uint8_t hash_data_sha512_in1[] = {
881 'a', 'b', 'c', 'd', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm'
882};
883
884static const uint8_t hash_data_sha512_out1[] = {
885 0x20, 0xd8, 0x64, 0x4f, 0x54, 0xa2, 0x5f, 0x6f,
886 0x0a, 0xf9, 0xd5, 0x27, 0x7d, 0x17, 0xa8, 0x99,
887 0x4c, 0x64, 0x3f, 0xd0, 0xf3, 0x83, 0x36, 0xee,
888 0x93, 0x12, 0x55, 0xcd, 0x2e, 0x12, 0x34, 0xa0,
889 0xc2, 0xaa, 0xf9, 0xbb, 0x15, 0xc5, 0xe9, 0xfa,
890 0xf7, 0xa7, 0xda, 0xb8, 0x2f, 0x72, 0xa0, 0x47,
891 0xe3, 0x02, 0x04, 0xe8, 0xa0, 0x35, 0x0c, 0x96,
892 0x26, 0xd1, 0xcb, 0x8b, 0x47, 0x45, 0x25, 0xd0
893};
894
895struct xtest_hash_case {
896 uint32_t algo;
897 size_t in_incr;
898 const uint8_t *in;
899 size_t in_len;
900 const uint8_t *out;
901 size_t out_len;
902};
903
904#define XTEST_HASH_CASE(algo, in_incr, in, out) \
905 { (algo), (in_incr), (in), ARRAY_SIZE(in), (out), ARRAY_SIZE(out) }
906
907static const struct xtest_hash_case hash_cases[] = {
908 XTEST_HASH_CASE(TEE_ALG_MD5, 6, hash_data_md5_in1,
909 hash_data_md5_out1),
910 XTEST_HASH_CASE(TEE_ALG_SHA1, 3, hash_data_sha1_in1,
911 hash_data_sha1_out1),
912 XTEST_HASH_CASE(TEE_ALG_SHA224, 7, hash_data_sha224_in1,
913 hash_data_sha224_out1),
914 XTEST_HASH_CASE(TEE_ALG_SHA256, 1, hash_data_sha256_in1,
915 hash_data_sha256_out1),
916 XTEST_HASH_CASE(TEE_ALG_SHA256, 1, hash_data_sha256_in2,
917 hash_data_sha256_out2),
918 XTEST_HASH_CASE(TEE_ALG_SHA384, 1, hash_data_sha384_in1,
919 hash_data_sha384_out1),
920 XTEST_HASH_CASE(TEE_ALG_SHA512, 1, hash_data_sha512_in1,
921 hash_data_sha512_out1),
922};
923
924static void xtest_tee_test_4001(ADBG_Case_t *c)
925{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100926 TEEC_Session session = { };
927 uint32_t ret_orig = 0;
928 size_t n = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +0200929
930 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
931 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
932 &ret_orig)))
933 return;
934
935
936 for (n = 0; n < ARRAY_SIZE(hash_cases); n++) {
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100937 TEE_OperationHandle op1 = TEE_HANDLE_NULL;
938 TEE_OperationHandle op2 = TEE_HANDLE_NULL;
939 uint8_t out[64] = { };
940 size_t out_size = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +0200941
942 Do_ADBG_BeginSubCase(c, "Hash case %d algo 0x%x",
943 (int)n, (unsigned int)hash_cases[n].algo);
944
945 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
946 ta_crypt_cmd_allocate_operation(c, &session, &op1,
947 hash_cases[n].algo,
948 TEE_MODE_DIGEST, 0)))
949 goto out;
950
951 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
952 ta_crypt_cmd_allocate_operation(c, &session, &op2,
953 hash_cases[n].algo,
954 TEE_MODE_DIGEST, 0)))
955 goto out;
956
957 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
958 ta_crypt_cmd_digest_update(c, &session, op1,
959 hash_cases[n].in,
960 hash_cases[n].in_incr)))
961 goto out;
962
963 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
964 ta_crypt_cmd_copy_operation(c, &session, op2, op1)))
965 goto out;
966
967 out_size = sizeof(out);
968 memset(out, 0, sizeof(out));
969 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
970 ta_crypt_cmd_digest_do_final(c, &session, op2,
971 hash_cases[n].in + hash_cases[n].in_incr,
972 hash_cases[n].in_len - hash_cases[n].in_incr,
973 out, &out_size)))
974 goto out;
975
976 (void)ADBG_EXPECT_BUFFER(c, hash_cases[n].out,
977 hash_cases[n].out_len, out, out_size);
978
979 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
980 ta_crypt_cmd_reset_operation(c, &session, op1)))
981 goto out;
982
983 out_size = sizeof(out);
984 memset(out, 0, sizeof(out));
985 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
986 ta_crypt_cmd_digest_do_final(c, &session, op1,
987 hash_cases[n].in,
988 hash_cases[n].in_len, out,
989 &out_size)))
990 goto out;
991
992 (void)ADBG_EXPECT_BUFFER(c, hash_cases[n].out,
993 hash_cases[n].out_len, out, out_size);
994
Jerome Forissier1e05e262015-07-29 16:09:07 +0200995 /*
996 * Invoke TEE_DigestDoFinal() a second time to check that state
997 * was properly reset
998 */
999 out_size = sizeof(out);
1000 memset(out, 0, sizeof(out));
1001 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1002 ta_crypt_cmd_digest_do_final(c, &session, op1,
1003 hash_cases[n].in,
1004 hash_cases[n].in_len, out,
1005 &out_size)))
1006 goto out;
1007
1008 (void)ADBG_EXPECT_BUFFER(c, hash_cases[n].out,
1009 hash_cases[n].out_len, out, out_size);
1010
Pascal Brandc639ac82015-07-02 08:53:34 +02001011 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1012 ta_crypt_cmd_free_operation(c, &session, op1)))
1013 goto out;
1014
1015 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1016 ta_crypt_cmd_free_operation(c, &session, op2)))
1017 goto out;
1018
1019 Do_ADBG_EndSubCase(c, NULL);
1020 }
1021
1022out:
1023 TEEC_CloseSession(&session);
1024}
Jens Wiklander14f48872018-06-29 15:30:13 +02001025ADBG_CASE_DEFINE(regression, 4001, xtest_tee_test_4001,
1026 "Test TEE Internal API hash operations");
Pascal Brandc639ac82015-07-02 08:53:34 +02001027
1028static const uint8_t mac_data_md5_key1[10] = {
1029 0x6B, 0x65, 0x79, /* key */
1030};
1031
1032static const uint8_t mac_data_md5_in1[] = {
1033 0x54, 0x68, 0x65, 0x20, 0x71, 0x75, 0x69, 0x63, /* The quic */
1034 0x6B, 0x20, 0x62, 0x72, 0x6F, 0x77, 0x6E, 0x20, /* k brown */
1035 0x66, 0x6F, 0x78, 0x20, 0x6A, 0x75, 0x6D, 0x70, /* fox jump */
1036 0x73, 0x20, 0x6F, 0x76, 0x65, 0x72, 0x20, 0x74, /* s over t */
1037 0x68, 0x65, 0x20, 0x6C, 0x61, 0x7A, 0x79, 0x20, /* he lazy */
1038 0x64, 0x6F, 0x67, /* dog */
1039};
1040
1041static const uint8_t mac_data_md5_out1[] = {
1042 0x80, 0x07, 0x07, 0x13, 0x46, 0x3e, 0x77, 0x49,
1043 0xb9, 0x0c, 0x2d, 0xc2, 0x49, 0x11, 0xe2, 0x75
1044};
1045
1046
1047/* generated with scripts/digest_hmac.pl */
1048static const uint8_t mac_data_sha1_key1[10] = {
1049 0x6B, 0x65, 0x79, /* key */
1050};
1051
1052static const uint8_t mac_data_sha1_in1[] = {
1053 0x54, 0x68, 0x65, 0x20, 0x71, 0x75, 0x69, 0x63, /* The quic */
1054 0x6B, 0x20, 0x62, 0x72, 0x6F, 0x77, 0x6E, 0x20, /* k brown */
1055 0x66, 0x6F, 0x78, 0x20, 0x6A, 0x75, 0x6D, 0x70, /* fox jump */
1056 0x73, 0x20, 0x6F, 0x76, 0x65, 0x72, 0x20, 0x74, /* s over t */
1057 0x68, 0x65, 0x20, 0x6C, 0x61, 0x7A, 0x79, 0x20, /* he lazy */
1058 0x64, 0x6F, 0x67, /* dog */
1059};
1060
1061static const uint8_t mac_data_sha1_out1[] = {
1062 0xDE, 0x7C, 0x9B, 0x85, 0xB8, 0xB7, 0x8A, 0xA6, /* .|...... */
1063 0xBC, 0x8A, 0x7A, 0x36, 0xF7, 0x0A, 0x90, 0x70, /* ..z6...p */
1064 0x1C, 0x9D, 0xB4, 0xD9, /* .... */
1065};
1066
1067static const uint8_t mac_data_sha224_key1[24] = {
1068 0x6B, 0x65, 0x79, /* key */
1069};
1070
1071static const uint8_t mac_data_sha224_in1[] = {
1072 0x54, 0x68, 0x65, 0x20, 0x71, 0x75, 0x69, 0x63, /* The quic */
1073 0x6B, 0x20, 0x62, 0x72, 0x6F, 0x77, 0x6E, 0x20, /* k brown */
1074 0x66, 0x6F, 0x78, 0x20, 0x6A, 0x75, 0x6D, 0x70, /* fox jump */
1075 0x73, 0x20, 0x6F, 0x76, 0x65, 0x72, 0x20, 0x74, /* s over t */
1076 0x68, 0x65, 0x20, 0x6C, 0x61, 0x7A, 0x79, 0x20, /* he lazy */
1077 0x64, 0x6F, 0x67, /* dog */
1078};
1079
1080static const uint8_t mac_data_sha224_out1[] = {
1081 0x88, 0xFF, 0x8B, 0x54, 0x67, 0x5D, 0x39, 0xB8, /* ...Tg]9. */
1082 0xF7, 0x23, 0x22, 0xE6, 0x5F, 0xF9, 0x45, 0xC5, /* .#"._.E. */
1083 0x2D, 0x96, 0x37, 0x99, 0x88, 0xAD, 0xA2, 0x56, /* -.7....V */
1084 0x39, 0x74, 0x7E, 0x69, /* 9t~i */
1085};
1086
1087
1088static const uint8_t mac_data_sha256_key1[24] = {
1089 'Q', 'W', 'E', 'R', 'T', 'Y'
1090};
1091
1092static const uint8_t mac_data_sha256_in1[] = { 'a', 'b', 'c' };
1093
1094static const uint8_t mac_data_sha256_out1[] = {
1095 0xee, 0x2e, 0x5d, 0x9b, 0x51, 0xe2, 0x9c, 0x1d,
1096 0x49, 0xe9, 0xae, 0x6f, 0x0a, 0xcc, 0x15, 0x18,
1097 0xde, 0x1e, 0xa3, 0x88, 0x8e, 0xee, 0x48, 0xbb,
1098 0x82, 0x77, 0xe9, 0x09, 0x74, 0x4b, 0xa2, 0xf2
1099};
1100
1101/* generated with scripts/digest_hmac.pl */
1102static const uint8_t mac_data_sha256_key2[24] = {
1103 0x6B, 0x65, 0x79, /* key */
1104};
1105
1106static const uint8_t mac_data_sha256_in2[] = {
1107 0x54, 0x68, 0x65, 0x20, 0x71, 0x75, 0x69, 0x63, /* The quic */
1108 0x6B, 0x20, 0x62, 0x72, 0x6F, 0x77, 0x6E, 0x20, /* k brown */
1109 0x66, 0x6F, 0x78, 0x20, 0x6A, 0x75, 0x6D, 0x70, /* fox jump */
1110 0x73, 0x20, 0x6F, 0x76, 0x65, 0x72, 0x20, 0x74, /* s over t */
1111 0x68, 0x65, 0x20, 0x6C, 0x61, 0x7A, 0x79, 0x20, /* he lazy */
1112 0x64, 0x6F, 0x67, /* dog */
1113};
1114
1115static const uint8_t mac_data_sha256_out2[] = {
1116 0xF7, 0xBC, 0x83, 0xF4, 0x30, 0x53, 0x84, 0x24, /* ....0S.$ */
1117 0xB1, 0x32, 0x98, 0xE6, 0xAA, 0x6F, 0xB1, 0x43, /* .2...o.C */
1118 0xEF, 0x4D, 0x59, 0xA1, 0x49, 0x46, 0x17, 0x59, /* .MY.IF.Y */
1119 0x97, 0x47, 0x9D, 0xBC, 0x2D, 0x1A, 0x3C, 0xD8, /* .G..-.<. */
1120};
1121
1122static const uint8_t mac_data_sha384_key1[32] = {
1123 0x6B, 0x65, 0x79, /* key */
1124};
1125
1126static const uint8_t mac_data_sha384_in1[] = {
1127 0x54, 0x68, 0x65, 0x20, 0x71, 0x75, 0x69, 0x63, /* The quic */
1128 0x6B, 0x20, 0x62, 0x72, 0x6F, 0x77, 0x6E, 0x20, /* k brown */
1129 0x66, 0x6F, 0x78, 0x20, 0x6A, 0x75, 0x6D, 0x70, /* fox jump */
1130 0x73, 0x20, 0x6F, 0x76, 0x65, 0x72, 0x20, 0x74, /* s over t */
1131 0x68, 0x65, 0x20, 0x6C, 0x61, 0x7A, 0x79, 0x20, /* he lazy */
1132 0x64, 0x6F, 0x67, /* dog */
1133};
1134
1135static const uint8_t mac_data_sha384_out1[] = {
1136 0xD7, 0xF4, 0x72, 0x7E, 0x2C, 0x0B, 0x39, 0xAE, /* ..r~, .9. */
1137 0x0F, 0x1E, 0x40, 0xCC, 0x96, 0xF6, 0x02, 0x42, /* ..@....B */
1138 0xD5, 0xB7, 0x80, 0x18, 0x41, 0xCE, 0xA6, 0xFC, /* ....A... */
1139 0x59, 0x2C, 0x5D, 0x3E, 0x1A, 0xE5, 0x07, 0x00, /* Y, ]>.... */
1140 0x58, 0x2A, 0x96, 0xCF, 0x35, 0xE1, 0xE5, 0x54, /* X...5..T */
1141 0x99, 0x5F, 0xE4, 0xE0, 0x33, 0x81, 0xC2, 0x37, /* ._..3..7 */
1142};
1143
1144static const uint8_t mac_data_sha512_key1[32] = {
1145 0x6B, 0x65, 0x79, /* key */
1146};
1147
1148static const uint8_t mac_data_sha512_in1[] = {
1149 0x54, 0x68, 0x65, 0x20, 0x71, 0x75, 0x69, 0x63, /* The quic */
1150 0x6B, 0x20, 0x62, 0x72, 0x6F, 0x77, 0x6E, 0x20, /* k brown */
1151 0x66, 0x6F, 0x78, 0x20, 0x6A, 0x75, 0x6D, 0x70, /* fox jump */
1152 0x73, 0x20, 0x6F, 0x76, 0x65, 0x72, 0x20, 0x74, /* s over t */
1153 0x68, 0x65, 0x20, 0x6C, 0x61, 0x7A, 0x79, 0x20, /* he lazy */
1154 0x64, 0x6F, 0x67, /* dog */
1155};
1156
1157static const uint8_t mac_data_sha512_out1[] = {
1158 0xB4, 0x2A, 0xF0, 0x90, 0x57, 0xBA, 0xC1, 0xE2, /* ....W... */
1159 0xD4, 0x17, 0x08, 0xE4, 0x8A, 0x90, 0x2E, 0x09, /* ........ */
1160 0xB5, 0xFF, 0x7F, 0x12, 0xAB, 0x42, 0x8A, 0x4F, /* .....B.O */
1161 0xE8, 0x66, 0x53, 0xC7, 0x3D, 0xD2, 0x48, 0xFB, /* .fS.=.H. */
1162 0x82, 0xF9, 0x48, 0xA5, 0x49, 0xF7, 0xB7, 0x91, /* ..H.I... */
1163 0xA5, 0xB4, 0x19, 0x15, 0xEE, 0x4D, 0x1E, 0xC3, /* .....M.. */
1164 0x93, 0x53, 0x57, 0xE4, 0xE2, 0x31, 0x72, 0x50, /* .SW..1rP */
1165 0xD0, 0x37, 0x2A, 0xFA, 0x2E, 0xBE, 0xEB, 0x3A, /* .7.....: */
1166};
1167
1168
1169/* AES-CBC-MAC */
1170static const uint8_t mac_cbc_vect1_key[] = {
1171 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1172 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1173};
1174
1175static const uint8_t mac_cbc_vect1_data[] = {
1176 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x20, 0x62, /* Cipher b */
1177 0x6C, 0x6F, 0x63, 0x6B, 0x20, 0x63, 0x68, 0x61, /* lock cha */
1178 0x69, 0x6E, 0x69, 0x6E, 0x67, 0x20, 0x28, 0x43, /* ining (C */
1179 0x42, 0x43, 0x29, 0x20, 0x69, 0x73, 0x20, 0x61, /* BC) is a */
1180 0x20, 0x63, 0x6F, 0x6D, 0x6D, 0x6F, 0x6E, 0x20, /* common */
1181 0x63, 0x68, 0x61, 0x69, 0x6E, 0x69, 0x6E, 0x67, /* chaining */
1182 0x20, 0x6D, 0x6F, 0x64, 0x65, 0x20, 0x69, 0x6E, /* mode in */
1183 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x74, /* which t */
1184 0x68, 0x65, 0x20, 0x70, 0x72, 0x65, 0x76, 0x69, /* he previ */
1185 0x6F, 0x75, 0x73, 0x20, 0x62, 0x6C, 0x6F, 0x63, /* ous bloc */
1186 0x6B, 0x27, 0x73, 0x20, 0x63, 0x69, 0x70, 0x68, /* k's ciph */
1187 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x20, 0x69, /* ertext i */
1188 0x73, 0x20, 0x78, 0x6F, 0x72, 0x65, 0x64, 0x20, /* s xored */
1189 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, /* with the */
1190 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6E, 0x74, /* current */
1191 0x20, 0x62, 0x6C, 0x6F, 0x63, 0x6B, 0x27, 0x73, /* block's */
1192 0x20, 0x70, 0x6C, 0x61, 0x69, 0x6E, 0x74, 0x65, /* plainte */
1193 0x78, 0x74, 0x20, 0x62, 0x65, 0x66, 0x6F, 0x72, /* xt befor */
1194 0x65, 0x20, 0x65, 0x6E, 0x63, 0x72, 0x79, 0x70, /* e encryp */
1195 0x74, 0x69, 0x6F, 0x6E, 0x2E, 0x2E, 0x2E, 0x2E, /* tion.... */
1196};
1197
1198static const uint8_t mac_cbc_vect1_out[] = {
1199 0xC9, 0x6E, 0x83, 0x7E, 0x35, 0xC8, 0xA7, 0xA0, /* .n.~5... */
1200 0x33, 0xA3, 0xB1, 0x4B, 0x5A, 0x92, 0x51, 0x2E, /* 3..KZ.Q. */
1201};
1202
1203/* DES-CBC-MAC */
1204static const uint8_t mac_cbc_vect2_key[] = {
1205 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1206};
1207
1208#define mac_cbc_vect2_data mac_cbc_vect1_data
1209static const uint8_t mac_cbc_vect2_out[] = {
1210 0xE9, 0x41, 0x46, 0x30, 0x69, 0x32, 0xBD, 0xD6, /* .AF0i2.. */
1211};
1212
1213/* DES3-CBC-MAC */
1214static const uint8_t mac_cbc_vect3_key[] = {
1215 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1216 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1217 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, /* 12345678 */
1218};
1219
1220#define mac_cbc_vect3_data mac_cbc_vect2_data
1221static const uint8_t mac_cbc_vect3_out[] = {
1222 0x1C, 0x17, 0xB7, 0xB5, 0x9F, 0x54, 0x9C, 0x63, /* .....T.c */
1223};
1224
1225/* AES-CBC-MAC PKCS#5 pad*/
1226static const uint8_t mac_cbc_vect4_key[] = {
1227 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1228 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1229 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1230 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1231};
1232
1233#define mac_cbc_vect4_data mac_cbc_vect1_data
1234static const uint8_t mac_cbc_vect4_out[] = {
1235 0x0B, 0x46, 0xC7, 0xA2, 0xE1, 0x5A, 0xE2, 0x23, /* .F...Z.# */
1236 0x83, 0x34, 0x1C, 0x86, 0x53, 0xF8, 0x51, 0x24, /* .4..S.Q$ */
1237};
1238
1239/* DES-CBC-MAC PKCS#5 pad*/
1240static const uint8_t mac_cbc_vect5_key[] = {
1241 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1242};
1243
1244#define mac_cbc_vect5_data mac_cbc_vect1_data
1245static const uint8_t mac_cbc_vect5_out[] = {
1246 0x30, 0x81, 0x4F, 0x42, 0x03, 0x7E, 0xD8, 0xA9, /* 0.OB.~.. */
1247};
1248
1249/* DES3-CBC-MAC PKCS#5 pad*/
1250static const uint8_t mac_cbc_vect6_key[] = {
1251 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1252 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1253 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, /* 12345678 */
1254};
1255
1256#define mac_cbc_vect6_data mac_cbc_vect1_data
1257static const uint8_t mac_cbc_vect6_out[] = {
1258 0x6E, 0x37, 0x6E, 0x14, 0x5E, 0x21, 0xDD, 0xF8, /* n7n.^!.. */
1259};
1260
1261/* AES-CBC-MAC PKCS#5 pad*/
1262#define mac_cbc_vect7_key mac_cbc_vect4_key
1263static const uint8_t mac_cbc_vect7_data[] = {
1264 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x20, 0x62, /* Cipher b */
1265 0x6C, 0x6F, 0x63, 0x6B, 0x20, 0x63, 0x68, 0x61, /* lock cha */
1266 0x69, 0x6E, 0x69, 0x6E, 0x67, 0x20, 0x28, 0x43, /* ining (C */
1267 0x42, 0x43, 0x29, 0x20, 0x69, 0x73, 0x20, 0x61, /* BC) is a */
1268 0x20, 0x63, 0x6F, 0x6D, 0x6D, 0x6F, 0x6E, 0x20, /* common */
1269 0x63, 0x68, 0x61, 0x69, 0x6E, 0x69, 0x6E, 0x67, /* chaining */
1270 0x20, 0x6D, 0x6F, 0x64, 0x65, 0x20, 0x69, 0x6E, /* mode in */
1271 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x74, /* which t */
1272 0x68, 0x65, 0x20, 0x70, 0x72, 0x65, 0x76, 0x69, /* he previ */
1273 0x6F, 0x75, 0x73, 0x20, 0x62, 0x6C, 0x6F, 0x63, /* ous bloc */
1274 0x6B, 0x27, 0x73, 0x20, 0x63, 0x69, 0x70, 0x68, /* k's ciph */
1275 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x20, 0x69, /* ertext i */
1276 0x73, 0x20, 0x78, 0x6F, 0x72, 0x65, 0x64, 0x20, /* s xored */
1277 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, /* with the */
1278 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6E, 0x74, /* current */
1279 0x20, 0x62, 0x6C, 0x6F, 0x63, 0x6B, 0x27, 0x73, /* block's */
1280 0x20, 0x70, 0x6C, 0x61, 0x69, 0x6E, 0x74, 0x65, /* plainte */
1281 0x78, 0x74, 0x20, 0x62, 0x65, 0x66, 0x6F, 0x72, /* xt befor */
1282 0x65, 0x20, 0x65, 0x6E, 0x63, 0x72, 0x79, 0x70, /* e encryp */
1283 0x74, 0x69, 0x6F, 0x6E, 0x2E, /* tion. */
1284};
1285
1286static const uint8_t mac_cbc_vect7_out[] = {
1287 0xFD, 0x89, 0x35, 0xB3, 0x93, 0x7F, 0xBB, 0xA2, /* ..5..... */
1288 0xFB, 0x65, 0x60, 0xC4, 0x0A, 0x62, 0xA0, 0xF9, /* .e`..b.. */
1289};
1290
1291/* DES-CBC-MAC PKCS#5 pad*/
1292#define mac_cbc_vect8_key mac_cbc_vect5_key
1293#define mac_cbc_vect8_data mac_cbc_vect7_data
1294static const uint8_t mac_cbc_vect8_out[] = {
1295 0x02, 0x2A, 0xA8, 0x2E, 0x47, 0xC6, 0xBB, 0x7C, /* ....G..| */
1296};
1297
1298/* DES3-CBC-MAC PKCS#5 pad*/
1299#define mac_cbc_vect9_key mac_cbc_vect6_key
1300#define mac_cbc_vect9_data mac_cbc_vect7_data
1301static const uint8_t mac_cbc_vect9_out[] = {
1302 0xD4, 0xF7, 0x3E, 0x27, 0x78, 0x0E, 0x1C, 0x79, /* ..>'x..y */
1303};
1304
1305/*
Pascal Brand5c3d8092015-07-23 08:20:26 +02001306 * DES3-CBC-MAC, with key size of 112bit
1307 * out obtained with:
1308 * 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
1309 */
1310/* DES3-CBC-MAC PKCS#5 pad*/
1311static const uint8_t mac_cbc_vect10_key[] = {
1312 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1313 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1314};
1315#define mac_cbc_vect10_data mac_cbc_vect1_data
1316static const uint8_t mac_cbc_vect10_out[] = {
1317 0x30, 0x92, 0x60, 0x99, 0x66, 0xac, 0x8c, 0xa6,
1318};
1319
1320
1321/*
Pascal Brandc639ac82015-07-02 08:53:34 +02001322 * AES-CMAC
1323 * Test vectors from
1324 * http://csrc.nist.gov/publications/nistpubs/800-38B/SP_800-38B.pdf
1325 */
1326
1327/* AES-128 */
1328static const uint8_t mac_cmac_vect1_key[] = {
1329 0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6,
1330 0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c
1331};
1332
1333static const uint8_t mac_cmac_vect1_out[] = {
1334 0xbb, 0x1d, 0x69, 0x29, 0xe9, 0x59, 0x37, 0x28,
1335 0x7f, 0xa3, 0x7d, 0x12, 0x9b, 0x75, 0x67, 0x46
1336};
1337
1338#define mac_cmac_vect2_key mac_cmac_vect1_key
1339static const uint8_t mac_cmac_vect2_data[] = {
1340 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
1341 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a
1342};
1343
1344static const uint8_t mac_cmac_vect2_out[] = {
1345 0x07, 0x0a, 0x16, 0xb4, 0x6b, 0x4d, 0x41, 0x44,
1346 0xf7, 0x9b, 0xdd, 0x9d, 0xd0, 0x4a, 0x28, 0x7c
1347};
1348
1349#define mac_cmac_vect3_key mac_cmac_vect1_key
1350static const uint8_t mac_cmac_vect3_data[] = {
1351 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
1352 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a,
1353 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c,
1354 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51,
1355 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11
1356};
1357
1358static const uint8_t mac_cmac_vect3_out[] = {
1359 0xdf, 0xa6, 0x67, 0x47, 0xde, 0x9a, 0xe6, 0x30,
1360 0x30, 0xca, 0x32, 0x61, 0x14, 0x97, 0xc8, 0x27
1361};
1362
1363#define mac_cmac_vect4_key mac_cmac_vect1_key
1364static const uint8_t mac_cmac_vect4_data[] = {
1365 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
1366 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a,
1367 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c,
1368 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51,
1369 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11,
1370 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef,
1371 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17,
1372 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10
1373};
1374
1375static const uint8_t mac_cmac_vect4_out[] = {
1376 0x51, 0xf0, 0xbe, 0xbf, 0x7e, 0x3b, 0x9d, 0x92,
1377 0xfc, 0x49, 0x74, 0x17, 0x79, 0x36, 0x3c, 0xfe
1378};
1379
1380/* AES-192 */
1381static const uint8_t mac_cmac_vect5_key[] = {
1382 0x8e, 0x73, 0xb0, 0xf7, 0xda, 0x0e, 0x64, 0x52,
1383 0xc8, 0x10, 0xf3, 0x2b, 0x80, 0x90, 0x79, 0xe5,
1384 0x62, 0xf8, 0xea, 0xd2, 0x52, 0x2c, 0x6b, 0x7b
1385};
1386
1387static const uint8_t mac_cmac_vect5_out[] = {
1388 0xd1, 0x7d, 0xdf, 0x46, 0xad, 0xaa, 0xcd, 0xe5,
1389 0x31, 0xca, 0xc4, 0x83, 0xde, 0x7a, 0x93, 0x67
1390};
1391
1392
1393#define mac_cmac_vect6_key mac_cmac_vect5_key
1394static const uint8_t mac_cmac_vect6_data[] = {
1395 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
1396 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a
1397};
1398
1399static const uint8_t mac_cmac_vect6_out[] = {
1400 0x9e, 0x99, 0xa7, 0xbf, 0x31, 0xe7, 0x10, 0x90,
1401 0x06, 0x62, 0xf6, 0x5e, 0x61, 0x7c, 0x51, 0x84
1402};
1403
1404#define mac_cmac_vect7_key mac_cmac_vect5_key
1405static const uint8_t mac_cmac_vect7_data[] = {
1406 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
1407 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a,
1408 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c,
1409 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51,
1410 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11
1411};
1412
1413static const uint8_t mac_cmac_vect7_out[] = {
1414 0x8a, 0x1d, 0xe5, 0xbe, 0x2e, 0xb3, 0x1a, 0xad,
1415 0x08, 0x9a, 0x82, 0xe6, 0xee, 0x90, 0x8b, 0x0e
1416};
1417
1418#define mac_cmac_vect8_key mac_cmac_vect5_key
1419static const uint8_t mac_cmac_vect8_data[] = {
1420 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
1421 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a,
1422 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c,
1423 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51,
1424 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11,
1425 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef,
1426 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17,
1427 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10
1428};
1429
1430static const uint8_t mac_cmac_vect8_out[] = {
1431 0xa1, 0xd5, 0xdf, 0x0e, 0xed, 0x79, 0x0f, 0x79,
1432 0x4d, 0x77, 0x58, 0x96, 0x59, 0xf3, 0x9a, 0x11
1433};
1434
1435/* AES-256 */
1436static const uint8_t mac_cmac_vect9_key[] = {
1437 0x60, 0x3d, 0xeb, 0x10, 0x15, 0xca, 0x71, 0xbe,
1438 0x2b, 0x73, 0xae, 0xf0, 0x85, 0x7d, 0x77, 0x81,
1439 0x1f, 0x35, 0x2c, 0x07, 0x3b, 0x61, 0x08, 0xd7,
1440 0x2d, 0x98, 0x10, 0xa3, 0x09, 0x14, 0xdf, 0xf4
1441};
1442
1443static const uint8_t mac_cmac_vect9_out[] = {
1444 0x02, 0x89, 0x62, 0xf6, 0x1b, 0x7b, 0xf8, 0x9e,
1445 0xfc, 0x6b, 0x55, 0x1f, 0x46, 0x67, 0xd9, 0x83
1446};
1447
1448#define mac_cmac_vect10_key mac_cmac_vect9_key
1449static const uint8_t mac_cmac_vect10_data[] = {
1450 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
1451 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a
1452};
1453
1454static const uint8_t mac_cmac_vect10_out[] = {
1455 0x28, 0xa7, 0x02, 0x3f, 0x45, 0x2e, 0x8f, 0x82,
1456 0xbd, 0x4b, 0xf2, 0x8d, 0x8c, 0x37, 0xc3, 0x5c
1457};
1458
1459#define mac_cmac_vect11_key mac_cmac_vect9_key
1460static const uint8_t mac_cmac_vect11_data[] = {
1461 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
1462 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a,
1463 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c,
1464 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51,
1465 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11
1466};
1467
1468static const uint8_t mac_cmac_vect11_out[] = {
1469 0xaa, 0xf3, 0xd8, 0xf1, 0xde, 0x56, 0x40, 0xc2,
1470 0x32, 0xf5, 0xb1, 0x69, 0xb9, 0xc9, 0x11, 0xe6
1471};
1472
1473#define mac_cmac_vect12_key mac_cmac_vect9_key
1474static const uint8_t mac_cmac_vect12_data[] = {
1475 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
1476 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a,
1477 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c,
1478 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51,
1479 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11,
1480 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef,
1481 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17,
1482 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10
1483};
1484
1485static const uint8_t mac_cmac_vect12_out[] = {
1486 0xe1, 0x99, 0x21, 0x90, 0x54, 0x9f, 0x6e, 0xd5,
1487 0x69, 0x6a, 0x2c, 0x05, 0x6c, 0x31, 0x54, 0x10
1488};
1489
1490struct xtest_mac_case {
1491 uint32_t algo;
1492 uint32_t key_type;
1493 const uint8_t *key;
1494 size_t key_len;
1495 size_t in_incr;
1496 const uint8_t *in;
1497 size_t in_len;
1498 const uint8_t *out;
1499 size_t out_len;
Jerome Forissier3dec7442019-01-30 17:50:05 +01001500 bool multiple_incr;
Pascal Brandc639ac82015-07-02 08:53:34 +02001501};
1502
Jerome Forissier3dec7442019-01-30 17:50:05 +01001503#define XTEST_MAC_CASE_1(algo, key_type, key, in_incr, in, out) \
Pascal Brandc639ac82015-07-02 08:53:34 +02001504 { (algo), (key_type), (key), ARRAY_SIZE(key), \
Jerome Forissier3dec7442019-01-30 17:50:05 +01001505 (in_incr), (in), ARRAY_SIZE(in), (out), ARRAY_SIZE(out), false }
1506
1507#define XTEST_MAC_CASE_MULT(algo, key_type, key, in_incr, in, out) \
1508 { (algo), (key_type), (key), ARRAY_SIZE(key), \
1509 (in_incr), (in), ARRAY_SIZE(in), (out), ARRAY_SIZE(out), true }
1510
1511#define XTEST_MAC_CASE(algo, key_type, key, in_incr, in, out) \
1512 XTEST_MAC_CASE_1((algo), (key_type), (key), (in_incr), (in), (out)), \
1513 XTEST_MAC_CASE_MULT((algo), (key_type), (key), (in_incr), (in), (out))
Pascal Brandc639ac82015-07-02 08:53:34 +02001514
1515#define XTEST_MAC_CBC_CASE(algo, key_type, vect, in_incr) \
1516 XTEST_MAC_CASE((algo), (key_type), \
1517 mac_cbc_ ## vect ## _key, (in_incr), \
1518 mac_cbc_ ## vect ## _data, mac_cbc_ ## vect ## _out)
1519
1520#define XTEST_MAC_CMAC_CASE(vect, in_incr) \
1521 XTEST_MAC_CASE(TEE_ALG_AES_CMAC, TEE_TYPE_AES, \
1522 mac_cmac_ ## vect ## _key, (in_incr), \
1523 mac_cmac_ ## vect ## _data, mac_cmac_ ## vect ## _out)
1524
1525static const struct xtest_mac_case mac_cases[] = {
1526 XTEST_MAC_CASE(TEE_ALG_HMAC_MD5, TEE_TYPE_HMAC_MD5,
1527 mac_data_md5_key1,
1528 4, mac_data_md5_in1, mac_data_md5_out1),
1529 XTEST_MAC_CASE(TEE_ALG_HMAC_SHA1, TEE_TYPE_HMAC_SHA1,
1530 mac_data_sha1_key1,
1531 5, mac_data_sha1_in1, mac_data_sha1_out1),
1532 XTEST_MAC_CASE(TEE_ALG_HMAC_SHA224, TEE_TYPE_HMAC_SHA224,
1533 mac_data_sha224_key1,
1534 8, mac_data_sha224_in1, mac_data_sha224_out1),
1535 XTEST_MAC_CASE(TEE_ALG_HMAC_SHA256, TEE_TYPE_HMAC_SHA256,
1536 mac_data_sha256_key1,
1537 1, mac_data_sha256_in1, mac_data_sha256_out1),
1538 XTEST_MAC_CASE(TEE_ALG_HMAC_SHA256, TEE_TYPE_HMAC_SHA256,
1539 mac_data_sha256_key2,
1540 7, mac_data_sha256_in2, mac_data_sha256_out2),
1541 XTEST_MAC_CASE(TEE_ALG_HMAC_SHA384, TEE_TYPE_HMAC_SHA384,
1542 mac_data_sha384_key1,
1543 11, mac_data_sha384_in1, mac_data_sha384_out1),
1544 XTEST_MAC_CASE(TEE_ALG_HMAC_SHA512, TEE_TYPE_HMAC_SHA512,
1545 mac_data_sha512_key1,
1546 13, mac_data_sha512_in1, mac_data_sha512_out1),
1547
1548 XTEST_MAC_CBC_CASE(TEE_ALG_AES_CBC_MAC_NOPAD, TEE_TYPE_AES, vect1, 14),
1549 XTEST_MAC_CBC_CASE(TEE_ALG_DES_CBC_MAC_NOPAD, TEE_TYPE_DES, vect2, 16),
1550 XTEST_MAC_CBC_CASE(TEE_ALG_DES3_CBC_MAC_NOPAD, TEE_TYPE_DES3, vect3,
1551 17),
1552 XTEST_MAC_CBC_CASE(TEE_ALG_AES_CBC_MAC_PKCS5, TEE_TYPE_AES, vect4, 11),
1553 XTEST_MAC_CBC_CASE(TEE_ALG_DES_CBC_MAC_PKCS5, TEE_TYPE_DES, vect5, 9),
1554 XTEST_MAC_CBC_CASE(TEE_ALG_DES3_CBC_MAC_PKCS5, TEE_TYPE_DES3, vect6, 4),
1555 XTEST_MAC_CBC_CASE(TEE_ALG_AES_CBC_MAC_PKCS5, TEE_TYPE_AES, vect7, 3),
1556 XTEST_MAC_CBC_CASE(TEE_ALG_DES_CBC_MAC_PKCS5, TEE_TYPE_DES, vect8, 23),
1557 XTEST_MAC_CBC_CASE(TEE_ALG_DES3_CBC_MAC_PKCS5, TEE_TYPE_DES3, vect9,
1558 34),
Pascal Brand5c3d8092015-07-23 08:20:26 +02001559 XTEST_MAC_CBC_CASE(TEE_ALG_DES3_CBC_MAC_PKCS5, TEE_TYPE_DES3, vect10, 4),
Pascal Brandc639ac82015-07-02 08:53:34 +02001560
1561 { TEE_ALG_AES_CMAC, TEE_TYPE_AES, mac_cmac_vect1_key,
1562 ARRAY_SIZE(mac_cmac_vect1_key), 0, NULL, 0, mac_cmac_vect1_out,
1563 ARRAY_SIZE(mac_cmac_vect1_out) },
1564 XTEST_MAC_CMAC_CASE(vect2, 9),
1565 XTEST_MAC_CMAC_CASE(vect3, 9),
1566 XTEST_MAC_CMAC_CASE(vect4, 9),
1567 { TEE_ALG_AES_CMAC, TEE_TYPE_AES, mac_cmac_vect5_key,
1568 ARRAY_SIZE(mac_cmac_vect5_key), 0, NULL, 0, mac_cmac_vect5_out,
1569 ARRAY_SIZE(mac_cmac_vect5_out) },
1570 XTEST_MAC_CMAC_CASE(vect6, 9),
1571 XTEST_MAC_CMAC_CASE(vect7, 9),
1572 XTEST_MAC_CMAC_CASE(vect8, 9),
1573 { TEE_ALG_AES_CMAC, TEE_TYPE_AES, mac_cmac_vect9_key,
1574 ARRAY_SIZE(mac_cmac_vect9_key), 0, NULL, 0, mac_cmac_vect9_out,
1575 ARRAY_SIZE(mac_cmac_vect9_out) },
1576 XTEST_MAC_CMAC_CASE(vect10, 9),
1577 XTEST_MAC_CMAC_CASE(vect11, 9),
1578 XTEST_MAC_CMAC_CASE(vect12, 9),
1579};
1580
1581static void xtest_tee_test_4002(ADBG_Case_t *c)
1582{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01001583 TEEC_Session session = { };
1584 TEE_OperationHandle op1 = TEE_HANDLE_NULL;
1585 TEE_OperationHandle op2 = TEE_HANDLE_NULL;
1586 TEE_ObjectHandle key_handle = TEE_HANDLE_NULL;
1587 uint8_t out[64] = { };
1588 size_t out_size = 0;
1589 uint32_t ret_orig = 0;
1590 size_t n = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +02001591
1592 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1593 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
1594 &ret_orig)))
1595 return;
1596
1597 for (n = 0; n < ARRAY_SIZE(mac_cases); n++) {
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01001598 TEE_Attribute key_attr = { };
1599 size_t key_size = 0;
1600 size_t offs = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +02001601
1602 Do_ADBG_BeginSubCase(c, "MAC case %d algo 0x%x",
1603 (int)n, (unsigned int)mac_cases[n].algo);
1604
1605 key_attr.attributeID = TEE_ATTR_SECRET_VALUE;
1606 key_attr.content.ref.buffer = (void *)mac_cases[n].key;
1607 key_attr.content.ref.length = mac_cases[n].key_len;
1608
1609 key_size = key_attr.content.ref.length * 8;
1610 if (mac_cases[n].key_type == TEE_TYPE_DES ||
1611 mac_cases[n].key_type == TEE_TYPE_DES3)
1612 /* Exclude parity in bit size of key */
1613 key_size -= key_size / 8;
1614
1615 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1616 ta_crypt_cmd_allocate_operation(c, &session, &op1,
1617 mac_cases[n].algo, TEE_MODE_MAC, key_size)))
1618 goto out;
1619
1620 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1621 ta_crypt_cmd_allocate_operation(c, &session, &op2,
1622 mac_cases[n].algo, TEE_MODE_MAC, key_size)))
1623 goto out;
1624
1625 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1626 ta_crypt_cmd_allocate_transient_object(c, &session,
1627 mac_cases[n].key_type, key_size, &key_handle)))
1628 goto out;
1629
1630 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1631 ta_crypt_cmd_populate_transient_object(c, &session,
1632 key_handle, &key_attr, 1)))
1633 goto out;
1634
1635 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1636 ta_crypt_cmd_set_operation_key(c, &session, op1,
1637 key_handle)))
1638 goto out;
1639
1640 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1641 ta_crypt_cmd_free_transient_object(c, &session,
1642 key_handle)))
1643 goto out;
1644
1645 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1646 ta_crypt_cmd_mac_init(c, &session, op1, NULL, 0)))
1647 goto out;
1648
Jerome Forissier3dec7442019-01-30 17:50:05 +01001649 offs = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +02001650 if (mac_cases[n].in != NULL) {
Jerome Forissier3dec7442019-01-30 17:50:05 +01001651 while (offs + mac_cases[n].in_incr <
1652 mac_cases[n].in_len) {
1653 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1654 ta_crypt_cmd_mac_update(c, &session,
1655 op1, mac_cases[n].in + offs,
1656 mac_cases[n].in_incr)))
1657 goto out;
1658 offs += mac_cases[n].in_incr;
1659 if (!mac_cases[n].multiple_incr)
1660 break;
1661 }
Pascal Brandc639ac82015-07-02 08:53:34 +02001662 }
1663
1664 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1665 ta_crypt_cmd_copy_operation(c, &session, op2, op1)))
1666 goto out;
1667
1668 out_size = sizeof(out);
1669 memset(out, 0, sizeof(out));
1670 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1671 ta_crypt_cmd_mac_final_compute(c, &session, op2,
Jerome Forissier3dec7442019-01-30 17:50:05 +01001672 mac_cases[n].in + offs,
1673 mac_cases [n].in_len - offs,
Pascal Brandc639ac82015-07-02 08:53:34 +02001674 out, &out_size)))
1675 goto out;
1676
1677 (void)ADBG_EXPECT_BUFFER(c, mac_cases[n].out,
1678 mac_cases[n].out_len, out, out_size);
1679
1680 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1681 ta_crypt_cmd_mac_init(c, &session, op1, NULL, 0)))
1682 goto out;
1683
1684 out_size = sizeof(out);
1685 memset(out, 0, sizeof(out));
1686 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1687 ta_crypt_cmd_mac_final_compute(c, &session, op1,
1688 mac_cases[n].in, mac_cases[n].in_len, out,
1689 &out_size)))
1690 goto out;
1691
1692 (void)ADBG_EXPECT_BUFFER(c, mac_cases[n].out,
1693 mac_cases[n].out_len, out, out_size);
1694
1695 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1696 ta_crypt_cmd_free_operation(c, &session, op1)))
1697 goto out;
1698
1699 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1700 ta_crypt_cmd_free_operation(c, &session, op2)))
1701 goto out;
1702
1703 Do_ADBG_EndSubCase(c, NULL);
1704 }
1705out:
1706 TEEC_CloseSession(&session);
1707}
Jens Wiklander14f48872018-06-29 15:30:13 +02001708ADBG_CASE_DEFINE(regression, 4002, xtest_tee_test_4002,
1709 "Test TEE Internal API MAC operations");
Pascal Brandc639ac82015-07-02 08:53:34 +02001710
Pascal Brandc639ac82015-07-02 08:53:34 +02001711static const uint8_t ciph_data_aes_key1[] = {
1712 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1713 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1714};
1715
Jerome Forissier0780ad42018-06-05 15:02:37 +02001716static const uint8_t ciph_data_aes_key2[] = {
1717 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
1718 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
1719};
1720
Pascal Brandc639ac82015-07-02 08:53:34 +02001721static const uint8_t ciph_data_des_key1[] = {
1722 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37 /* 01234567 */
1723};
1724
1725static const uint8_t ciph_data_des_key2[] = {
1726 0x13, 0x34, 0x57, 0x79, 0x9B, 0xBC, 0xDF, 0xF1
1727};
1728
1729
1730static const uint8_t ciph_data_des3_key1[] = {
1731 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1732 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1733 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, /* 12345678 */
1734};
1735
1736static const uint8_t ciph_data_des3_key2[] = {
1737 0x13, 0x34, 0x57, 0x79, 0x9B, 0xBC, 0xDF, 0xF1,
1738 0x13, 0x34, 0x57, 0x79, 0x9B, 0xBC, 0xDF, 0xF1,
1739 0x13, 0x34, 0x57, 0x79, 0x9B, 0xBC, 0xDF, 0xF1
1740};
1741
1742static const uint8_t ciph_data_des2_key1[] = {
1743 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1744 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1745};
1746
1747static const uint8_t ciph_data_in1[] = {
1748 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, /* 23456789 */
1749 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, /* ABCDEF01 */
1750 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, /* 3456789A */
1751 0x42, 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, 0x32, /* BCDEF012 */
1752 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, /* 456789AB */
1753 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, 0x32, 0x33, /* CDEF0123 */
1754};
1755
1756static const uint8_t ciph_data_in3[] = {
1757 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, /* 23456789 */
1758 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, /* ABCDEF01 */
1759 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, /* 3456789A */
1760 0x42, 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, 0x32, /* BCDEF012 */
1761 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, /* 456789AB */
1762 0x43, 0x44, 0x45, 0x46, 0x30, /* CDEF0 */
1763};
1764
Jerome Forissier45218eb2018-04-11 13:03:26 +02001765static const uint8_t ciph_data_in4[] = {
1766 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, /* 23456789 */
1767 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, /* ABCDEF01 */
1768 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, /* 3456789A */
1769 0x42, 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, 0x32, /* BCDEF012 */
1770 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, /* 456789AB */
1771 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, 0x32, 0x33, /* CDEF0123 */
1772 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1773 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1774};
1775
Jerome Forissier0780ad42018-06-05 15:02:37 +02001776static const uint8_t ciph_data_in5[] = {
1777 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
1778 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
1779 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
1780 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
1781 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
1782 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
1783 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
1784 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
Jerome Forissierbf9009e2018-06-05 18:44:42 +02001785 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
1786 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
Jerome Forissier0780ad42018-06-05 15:02:37 +02001787 0x01, 0x01, 0x01
1788};
1789
Pascal Brandc639ac82015-07-02 08:53:34 +02001790static const uint8_t ciph_data_128_iv1[] = {
1791 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, /* 12345678 */
1792 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x30, /* 9ABCDEF0 */
1793};
1794
Jerome Forissier0780ad42018-06-05 15:02:37 +02001795static const uint8_t ciph_data_128_iv2[] = {
1796 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
1797 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
1798};
1799
Pascal Brandc639ac82015-07-02 08:53:34 +02001800static const uint8_t ciph_data_64_iv1[] = {
1801 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, /* 12345678 */
1802};
1803
1804static const uint8_t ciph_data_in2[] = {
1805 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef
1806};
1807
1808static const uint8_t ciph_data_aes_ecb_nopad_out1[] = {
1809 0xA5, 0xBE, 0x14, 0xD5, 0x01, 0x05, 0x24, 0x48, /* ......$H */
1810 0x58, 0x1A, 0x6B, 0x82, 0xD4, 0x41, 0xD2, 0xB3, /* X.k..A.. */
1811 0xBB, 0xF9, 0xAE, 0x37, 0x94, 0xAC, 0x18, 0x50, /* ...7...P */
1812 0x87, 0x09, 0xCC, 0x3F, 0x43, 0xD2, 0xC2, 0xB7, /* ...?C... */
1813 0xD7, 0x6F, 0x84, 0x07, 0xB4, 0x78, 0xCE, 0x34, /* .o...x.4 */
1814 0x48, 0xC9, 0x16, 0x86, 0x42, 0xB8, 0xFF, 0xCF, /* H...B... */
1815};
1816
1817static const uint8_t ciph_data_aes_cbc_nopad_out1[] = {
1818 0x8D, 0x9F, 0x88, 0xD8, 0xAF, 0x9F, 0xC1, 0x3B, /* .......; */
1819 0x02, 0x15, 0x43, 0x6A, 0x8C, 0x1E, 0x34, 0x5C, /* ..Cj..4\ */
1820 0x83, 0xF4, 0x85, 0x3E, 0x43, 0x0F, 0xE5, 0x5F, /* ...>C.._ */
1821 0x81, 0x4C, 0xC0, 0x28, 0x3F, 0xD9, 0x98, 0x53, /* .L.(?..S */
1822 0xB1, 0x44, 0x51, 0x38, 0x21, 0xAB, 0x10, 0xCE, /* .DQ8!... */
1823 0xC2, 0xEC, 0x65, 0x54, 0xDD, 0x5C, 0xEA, 0xDC, /* ..eT.\.. */
1824};
1825
1826static const uint8_t ciph_data_aes_ctr_out1[] = {
1827 0xD2, 0xDD, 0x11, 0xA8, 0xF7, 0xB0, 0xAE, 0x55, /* .......U */
1828 0xBE, 0x61, 0x7A, 0xE6, 0xA1, 0x6C, 0x79, 0xF4, /* .az..ly. */
1829 0x62, 0x51, 0x7B, 0xE9, 0x7C, 0xA0, 0x31, 0x0C, /* bQ{.|.1. */
1830 0x24, 0x15, 0x70, 0x7F, 0x47, 0x37, 0x69, 0xE0, /* $.p.G7i. */
1831 0x24, 0xC3, 0x29, 0xCD, 0xF2, 0x26, 0x69, 0xFF, /* $.)..&i. */
1832 0x72, 0x0E, 0x3C, 0xD1, 0xA1, 0x2F, 0x5D, 0x33, /* r.<../]3 */
1833};
1834
1835static const uint8_t ciph_data_aes_ctr_out2[] = {
1836 0xD2, 0xDD, 0x11, 0xA8, 0xF7, 0xB0, 0xAE, 0x55, /* .......U */
1837 0xBE, 0x61, 0x7A, 0xE6, 0xA1, 0x6C, 0x79, 0xF4, /* .az..ly. */
1838 0x62, 0x51, 0x7B, 0xE9, 0x7C, 0xA0, 0x31, 0x0C, /* bQ{.|.1. */
1839 0x24, 0x15, 0x70, 0x7F, 0x47, 0x37, 0x69, 0xE0, /* $.p.G7i. */
1840 0x24, 0xC3, 0x29, 0xCD, 0xF2, 0x26, 0x69, 0xFF, /* $.)..&i. */
1841 0x72, 0x0E, 0x3C, 0xD1, 0xA1, /* r.<.. */
1842};
1843
Jerome Forissier45218eb2018-04-11 13:03:26 +02001844static const uint8_t ciph_data_aes_ctr_out4[] = {
1845 0xD2, 0xDD, 0x11, 0xA8, 0xF7, 0xB0, 0xAE, 0x55, /* .......U */
1846 0xBE, 0x61, 0x7A, 0xE6, 0xA1, 0x6C, 0x79, 0xF4, /* .az..ly. */
1847 0x62, 0x51, 0x7B, 0xE9, 0x7C, 0xA0, 0x31, 0x0C, /* bQ{.|.1. */
1848 0x24, 0x15, 0x70, 0x7F, 0x47, 0x37, 0x69, 0xE0, /* $.p.G7i. */
1849 0x24, 0xC3, 0x29, 0xCD, 0xF2, 0x26, 0x69, 0xFF, /* $.)..&i. */
1850 0x72, 0x0E, 0x3C, 0xD1, 0xA1, 0x2F, 0x5D, 0x33, /* r.<../]3 */
1851 0x9F, 0xD7, 0x0C, 0x92, 0xD4, 0xA5, 0x9D, 0x06, /* ........ */
1852 0x01, 0x80, 0x38, 0xCD, 0xC2, 0x71, 0x5D, 0x4A, /* ..8..q]J */
1853};
1854
Jerome Forissier0780ad42018-06-05 15:02:37 +02001855static const uint8_t ciph_data_aes_ctr_out5[] = {
1856 0xbb, 0xfe, 0x07, 0x04, 0x1c, 0x8e, 0x09, 0x61,
1857 0xfb, 0xb1, 0x7c, 0xa5, 0x4d, 0x2b, 0x30, 0xf6,
1858 0x26, 0x9e, 0xff, 0x61, 0x18, 0x47, 0xc6, 0x06,
1859 0x81, 0x02, 0x84, 0xcd, 0x9c, 0x4b, 0x6d, 0x21,
1860 0xe2, 0x64, 0xa6, 0x50, 0x7f, 0x28, 0x81, 0x6f,
1861 0x29, 0xda, 0xd5, 0x56, 0x3f, 0x46, 0xac, 0xca,
1862 0x37, 0xe7, 0x77, 0x36, 0xbc, 0x76, 0x39, 0x57,
1863 0xaa, 0x67, 0x1b, 0x2a, 0xe6, 0x36, 0x57, 0x6d,
Jerome Forissierbf9009e2018-06-05 18:44:42 +02001864 0x2a, 0xb8, 0x77, 0x41, 0xc2, 0x4e, 0x4f, 0x27,
1865 0x4c, 0x34, 0x7a, 0x01, 0x6a, 0xda, 0x75, 0x75,
1866 0x3e, 0x68, 0xb2
Jerome Forissier0780ad42018-06-05 15:02:37 +02001867};
1868
Pascal Brandc639ac82015-07-02 08:53:34 +02001869static const uint8_t ciph_data_aes_cbc_vect1_key[] = {
1870 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1871 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1872};
1873
1874static const uint8_t ciph_data_aes_cbc_vect1_iv[] = {
1875 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* ........ */
1876 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* ........ */
1877};
1878
1879static const uint8_t ciph_data_aes_cbc_vect1_ptx[] = {
1880 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x20, 0x62, /* Cipher b */
1881 0x6C, 0x6F, 0x63, 0x6B, 0x20, 0x63, 0x68, 0x61, /* lock cha */
1882 0x69, 0x6E, 0x69, 0x6E, 0x67, 0x20, 0x28, 0x43, /* ining (C */
1883 0x42, 0x43, 0x29, 0x20, 0x69, 0x73, 0x20, 0x61, /* BC) is a */
1884 0x20, 0x63, 0x6F, 0x6D, 0x6D, 0x6F, 0x6E, 0x20, /* common */
1885 0x63, 0x68, 0x61, 0x69, 0x6E, 0x69, 0x6E, 0x67, /* chaining */
1886 0x20, 0x6D, 0x6F, 0x64, 0x65, 0x20, 0x69, 0x6E, /* mode in */
1887 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x74, /* which t */
1888 0x68, 0x65, 0x20, 0x70, 0x72, 0x65, 0x76, 0x69, /* he previ */
1889 0x6F, 0x75, 0x73, 0x20, 0x62, 0x6C, 0x6F, 0x63, /* ous bloc */
1890 0x6B, 0x27, 0x73, 0x20, 0x63, 0x69, 0x70, 0x68, /* k's ciph */
1891 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x20, 0x69, /* ertext i */
1892 0x73, 0x20, 0x78, 0x6F, 0x72, 0x65, 0x64, 0x20, /* s xored */
1893 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, /* with the */
1894 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6E, 0x74, /* current */
1895 0x20, 0x62, 0x6C, 0x6F, 0x63, 0x6B, 0x27, 0x73, /* block's */
1896 0x20, 0x70, 0x6C, 0x61, 0x69, 0x6E, 0x74, 0x65, /* plainte */
1897 0x78, 0x74, 0x20, 0x62, 0x65, 0x66, 0x6F, 0x72, /* xt befor */
1898 0x65, 0x20, 0x65, 0x6E, 0x63, 0x72, 0x79, 0x70, /* e encryp */
1899 0x74, 0x69, 0x6F, 0x6E, 0x2E, 0x2E, 0x2E, 0x2E, /* tion.... */
1900};
1901
1902static const uint8_t ciph_data_aes_cbc_vect1_ctx[] = {
1903 0xDD, 0x16, 0xC3, 0x47, 0x69, 0xEC, 0xF5, 0x86, /* ...Gi... */
1904 0x20, 0xB4, 0xF7, 0xE3, 0xB9, 0x36, 0xE8, 0xAC, /* ....6.. */
1905 0xC9, 0xA2, 0x11, 0x71, 0x3B, 0x10, 0x9D, 0x45, /* ...q;..E */
1906 0xCA, 0xE2, 0x49, 0xA6, 0x4E, 0x56, 0x07, 0xC5, /* ..I.NV.. */
1907 0xCE, 0xA3, 0x14, 0xB5, 0x30, 0x1B, 0x63, 0xBB, /* ....0.c. */
1908 0x2D, 0x6F, 0xE9, 0xCA, 0x0B, 0x00, 0x31, 0x3F, /* -o....1? */
1909 0xA4, 0x9A, 0x39, 0xE1, 0xC8, 0xD2, 0x24, 0x95, /* ..9...$. */
1910 0x14, 0xE9, 0xD2, 0x43, 0xE8, 0xA8, 0x1E, 0x0A, /* ...C.... */
1911 0xFE, 0x9D, 0x4F, 0xF5, 0xBB, 0x16, 0xB9, 0x54, /* ..O....T */
1912 0x78, 0x07, 0x94, 0x05, 0x8E, 0x47, 0xC3, 0xCB, /* x....G.. */
1913 0x7C, 0xEC, 0xF4, 0xF8, 0xF2, 0xA4, 0x59, 0x6E, /* |.....Yn */
1914 0xED, 0xAD, 0x7F, 0x62, 0xAF, 0x89, 0xA8, 0x5B, /* ...b...[ */
1915 0x75, 0xD4, 0x73, 0xE3, 0xBA, 0x9F, 0x9A, 0xD2, /* u.s..... */
1916 0x0F, 0xFD, 0x3C, 0xE6, 0xC6, 0xA4, 0xD6, 0x6C, /* ..<....l */
1917 0x6A, 0x09, 0xE2, 0x16, 0xB0, 0x8C, 0x69, 0x3C, /* j.....i< */
1918 0xC8, 0x1C, 0xE4, 0x3E, 0x86, 0x4D, 0xB0, 0x2B, /* ...>.M.+ */
1919 0x29, 0xA0, 0x5A, 0xA3, 0x67, 0xBA, 0xDC, 0x11, /* ).Z.g... */
1920 0x08, 0x5E, 0x69, 0xB4, 0x6F, 0xA5, 0xE2, 0xB8, /* .^i.o... */
1921 0xC9, 0x6E, 0x83, 0x7E, 0x35, 0xC8, 0xA7, 0xA0, /* .n.~5... */
1922 0x33, 0xA3, 0xB1, 0x4B, 0x5A, 0x92, 0x51, 0x2E, /* 3..KZ.Q. */
1923};
1924
1925/* AES-CTS test vectors from http://tools.ietf.org/html/rfc3962
1926 * and http://tools.ietf.org/html/draft-raeburn-krb-rijndael-krb-02 */
1927static const uint8_t ciph_data_aes_cts_vect1_key[] = {
1928 0x63, 0x68, 0x69, 0x63, 0x6b, 0x65, 0x6e, 0x20,
1929 0x74, 0x65, 0x72, 0x69, 0x79, 0x61, 0x6b, 0x69
1930};
1931
1932static const uint8_t ciph_data_aes_cts_vect1_iv[16] = {
1933 0x00
1934};
1935
1936static const uint8_t ciph_data_aes_cts_vect1_ptx[] = {
1937 0x49, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20,
1938 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65,
1939 0x20
1940};
1941
1942static const uint8_t ciph_data_aes_cts_vect1_ctx[] = {
1943 0xc6, 0x35, 0x35, 0x68, 0xf2, 0xbf, 0x8c, 0xb4,
1944 0xd8, 0xa5, 0x80, 0x36, 0x2d, 0xa7, 0xff, 0x7f,
1945 0x97
1946};
1947
1948#define ciph_data_aes_cts_vect2_key ciph_data_aes_cts_vect1_key
1949#define ciph_data_aes_cts_vect2_iv ciph_data_aes_cts_vect1_iv
1950static const uint8_t ciph_data_aes_cts_vect2_ptx[] = {
1951 0x49, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20,
1952 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65,
1953 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c,
1954 0x20, 0x47, 0x61, 0x75, 0x27, 0x73, 0x20
1955};
1956
1957static const uint8_t ciph_data_aes_cts_vect2_ctx[] = {
1958 0xfc, 0x00, 0x78, 0x3e, 0x0e, 0xfd, 0xb2, 0xc1,
1959 0xd4, 0x45, 0xd4, 0xc8, 0xef, 0xf7, 0xed, 0x22,
1960 0x97, 0x68, 0x72, 0x68, 0xd6, 0xec, 0xcc, 0xc0,
1961 0xc0, 0x7b, 0x25, 0xe2, 0x5e, 0xcf, 0xe5
1962};
1963
1964#define ciph_data_aes_cts_vect3_key ciph_data_aes_cts_vect1_key
1965#define ciph_data_aes_cts_vect3_iv ciph_data_aes_cts_vect1_iv
1966static const uint8_t ciph_data_aes_cts_vect3_ptx[] = {
1967 0x49, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20,
1968 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65,
1969 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c,
1970 0x20, 0x47, 0x61, 0x75, 0x27, 0x73, 0x20, 0x43,
1971};
1972
1973static const uint8_t ciph_data_aes_cts_vect3_ctx[] = {
1974 0x39, 0x31, 0x25, 0x23, 0xa7, 0x86, 0x62, 0xd5,
1975 0xbe, 0x7f, 0xcb, 0xcc, 0x98, 0xeb, 0xf5, 0xa8,
1976 0x97, 0x68, 0x72, 0x68, 0xd6, 0xec, 0xcc, 0xc0,
1977 0xc0, 0x7b, 0x25, 0xe2, 0x5e, 0xcf, 0xe5, 0x84,
1978};
1979
1980#define ciph_data_aes_cts_vect4_key ciph_data_aes_cts_vect1_key
1981#define ciph_data_aes_cts_vect4_iv ciph_data_aes_cts_vect1_iv
1982static const uint8_t ciph_data_aes_cts_vect4_ptx[] = {
1983 0x49, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20,
1984 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65,
1985 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c,
1986 0x20, 0x47, 0x61, 0x75, 0x27, 0x73, 0x20, 0x43,
1987 0x68, 0x69, 0x63, 0x6b, 0x65, 0x6e, 0x2c, 0x20,
1988 0x70, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x2c,
1989};
1990
1991static const uint8_t ciph_data_aes_cts_vect4_ctx[] = {
1992 0x97, 0x68, 0x72, 0x68, 0xd6, 0xec, 0xcc, 0xc0,
1993 0xc0, 0x7b, 0x25, 0xe2, 0x5e, 0xcf, 0xe5, 0x84,
1994 0xb3, 0xff, 0xfd, 0x94, 0x0c, 0x16, 0xa1, 0x8c,
1995 0x1b, 0x55, 0x49, 0xd2, 0xf8, 0x38, 0x02, 0x9e,
1996 0x39, 0x31, 0x25, 0x23, 0xa7, 0x86, 0x62, 0xd5,
1997 0xbe, 0x7f, 0xcb, 0xcc, 0x98, 0xeb, 0xf5,
1998};
1999
2000#define ciph_data_aes_cts_vect5_key ciph_data_aes_cts_vect1_key
2001#define ciph_data_aes_cts_vect5_iv ciph_data_aes_cts_vect1_iv
2002static const uint8_t ciph_data_aes_cts_vect5_ptx[] = {
2003 0x49, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20,
2004 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65,
2005 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c,
2006 0x20, 0x47, 0x61, 0x75, 0x27, 0x73, 0x20, 0x43,
2007 0x68, 0x69, 0x63, 0x6b, 0x65, 0x6e, 0x2c, 0x20,
2008 0x70, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x2c, 0x20,
2009};
2010
2011static const uint8_t ciph_data_aes_cts_vect5_ctx[] = {
2012 0x97, 0x68, 0x72, 0x68, 0xd6, 0xec, 0xcc, 0xc0,
2013 0xc0, 0x7b, 0x25, 0xe2, 0x5e, 0xcf, 0xe5, 0x84,
2014 0x9d, 0xad, 0x8b, 0xbb, 0x96, 0xc4, 0xcd, 0xc0,
2015 0x3b, 0xc1, 0x03, 0xe1, 0xa1, 0x94, 0xbb, 0xd8,
2016 0x39, 0x31, 0x25, 0x23, 0xa7, 0x86, 0x62, 0xd5,
2017 0xbe, 0x7f, 0xcb, 0xcc, 0x98, 0xeb, 0xf5, 0xa8,
2018};
2019
2020#define ciph_data_aes_cts_vect6_key ciph_data_aes_cts_vect1_key
2021#define ciph_data_aes_cts_vect6_iv ciph_data_aes_cts_vect1_iv
2022static const uint8_t ciph_data_aes_cts_vect6_ptx[] = {
2023 0x49, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20,
2024 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65,
2025 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c,
2026 0x20, 0x47, 0x61, 0x75, 0x27, 0x73, 0x20, 0x43,
2027 0x68, 0x69, 0x63, 0x6b, 0x65, 0x6e, 0x2c, 0x20,
2028 0x70, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x2c, 0x20,
2029 0x61, 0x6e, 0x64, 0x20, 0x77, 0x6f, 0x6e, 0x74,
2030 0x6f, 0x6e, 0x20, 0x73, 0x6f, 0x75, 0x70, 0x2e,
2031};
2032
2033static const uint8_t ciph_data_aes_cts_vect6_ctx[] = {
2034 0x97, 0x68, 0x72, 0x68, 0xd6, 0xec, 0xcc, 0xc0,
2035 0xc0, 0x7b, 0x25, 0xe2, 0x5e, 0xcf, 0xe5, 0x84,
2036 0x39, 0x31, 0x25, 0x23, 0xa7, 0x86, 0x62, 0xd5,
2037 0xbe, 0x7f, 0xcb, 0xcc, 0x98, 0xeb, 0xf5, 0xa8,
2038 0x48, 0x07, 0xef, 0xe8, 0x36, 0xee, 0x89, 0xa5,
2039 0x26, 0x73, 0x0d, 0xbc, 0x2f, 0x7b, 0xc8, 0x40,
2040 0x9d, 0xad, 0x8b, 0xbb, 0x96, 0xc4, 0xcd, 0xc0,
2041 0x3b, 0xc1, 0x03, 0xe1, 0xa1, 0x94, 0xbb, 0xd8,
2042};
2043
Jerome Forissiered00e162017-01-20 09:22:52 +01002044/*
2045 * Test case for https://github.com/OP-TEE/optee_os/issues/1203
2046 * 80 bytes of data, processed in two steps (32 + 48).
2047 */
2048
2049#define ciph_data_aes_cts_issue1203_key ciph_data_aes_cts_vect1_key
2050
2051static const uint8_t ciph_data_aes_cts_issue1203_iv[] = {
2052 0x5b, 0x11, 0x7b, 0xf9, 0x83, 0x6a, 0x01, 0x27,
2053 0x1d, 0x2a, 0xae, 0x0a, 0xd3, 0x27, 0x35, 0x81,
2054};
2055
2056static const uint8_t ciph_data_aes_cts_issue1203_ptx[] = {
2057 0x33, 0x2a, 0xf4, 0x8c, 0x18, 0xa1, 0x30, 0x7c,
2058 0xa7, 0x52, 0x76, 0xca, 0xa6, 0x68, 0xad, 0xf6,
2059 0x1e, 0xba, 0xc9, 0x66, 0x66, 0x52, 0x1a, 0xe7,
2060 0x3e, 0xbc, 0xba, 0x60, 0x95, 0x71, 0x04, 0x5e,
2061 0xb4, 0xb7, 0x10, 0xd7, 0x93, 0x6d, 0x5f, 0x9a,
2062 0xb8, 0xbb, 0x6b, 0xb0, 0x6d, 0x47, 0x93, 0x41,
2063 0x29, 0x21, 0xf2, 0x84, 0xf5, 0xb2, 0xf2, 0x6d,
2064 0xbe, 0xe5, 0x8a, 0x2b, 0x58, 0x8d, 0x1b, 0x5e,
2065 0x41, 0x04, 0xba, 0x9e, 0x92, 0xe9, 0x52, 0xb6,
2066 0x8b, 0x1e, 0x36, 0x72, 0x91, 0xe4, 0x56, 0x66,
2067};
2068
2069/*
2070 * Ciphertext was generated by an online tool for AES CBC.
2071 * Since the input size is a multiple of the block size, and the ciphertext
2072 * format is CS3, the output is the same as plain AES CBC with the last
2073 * two blocks swapped.
2074 */
2075static const uint8_t ciph_data_aes_cts_issue1203_ctx[] = {
2076 0x6c, 0xfe, 0xef, 0x6a, 0x1c, 0x8f, 0xd3, 0xc3,
2077 0x66, 0xc4, 0xd9, 0x0e, 0xbe, 0x24, 0x17, 0x3f,
2078 0xcd, 0x19, 0xc9, 0xd2, 0x10, 0x3f, 0xcf, 0xdc,
2079 0xe9, 0x05, 0xab, 0xd5, 0x1a, 0x31, 0x41, 0x77,
2080 0x3b, 0xd7, 0x6a, 0x26, 0xae, 0x0d, 0xc9, 0x47,
2081 0x77, 0xd4, 0xa7, 0xd5, 0x73, 0x88, 0x9e, 0xde,
2082 0x72, 0x66, 0xe0, 0xe2, 0x3d, 0x62, 0x91, 0x22,
2083 0xae, 0x11, 0x01, 0x97, 0x22, 0x6a, 0x45, 0xa9,
2084 0xba, 0x56, 0xd2, 0xbc, 0x55, 0x2d, 0x99, 0x4d,
2085 0x3d, 0x22, 0x27, 0x9a, 0xac, 0x66, 0x2f, 0xf5,
2086};
2087
Pascal Brandc639ac82015-07-02 08:53:34 +02002088static const uint8_t ciph_data_des_ecb_nopad_out1[] = {
2089 0x46, 0x2B, 0x91, 0xA8, 0x55, 0xE6, 0x7E, 0x75, /* F+..U.~u */
2090 0x5E, 0x53, 0xF4, 0x8F, 0x29, 0x41, 0x4E, 0xEF, /* ^S..)AN. */
2091 0x32, 0x1B, 0x58, 0x42, 0x9B, 0xB4, 0x3A, 0x1F, /* 2.XB..:. */
2092 0x9A, 0xEA, 0xA4, 0xB4, 0xCD, 0xE9, 0x87, 0x7C, /* .......| */
2093 0xC0, 0x05, 0x34, 0xED, 0x86, 0x3C, 0x2A, 0x81, /* ..4..<.. */
2094 0x5E, 0x93, 0x0E, 0x86, 0xA9, 0xBB, 0x80, 0xFF, /* ^....... */
2095};
2096
2097static const uint8_t ciph_data_des_ecb_nopad_out2[] = {
2098 0x85, 0xE8, 0x13, 0x54, 0x0F, 0x0A, 0xB4, 0x05
2099};
2100
2101static const uint8_t ciph_data_des_cbc_nopad_out1[] = {
2102 0xAD, 0xD6, 0xD6, 0x3E, 0x88, 0xD0, 0xDD, 0xD4, /* ...>.... */
2103 0x9A, 0x93, 0x95, 0xA0, 0x86, 0x22, 0x5B, 0x9E, /* ....."[. */
2104 0x84, 0x0C, 0x6F, 0x12, 0x04, 0x11, 0x6F, 0xD4, /* ..o...o. */
2105 0x12, 0x29, 0xC6, 0x78, 0x0C, 0xFB, 0x58, 0x5B, /* .).x..X[ */
2106 0x66, 0x82, 0x0E, 0x52, 0xDC, 0x25, 0x16, 0x51, /* f..R.%.Q */
2107 0x69, 0xDF, 0xFE, 0x4E, 0x11, 0x1D, 0x9D, 0x08, /* i..N.... */
2108};
2109
2110static const uint8_t ciph_data_des3_ecb_nopad_out1[] = {
2111 0xA7, 0x46, 0xEC, 0xA8, 0x6A, 0x7F, 0x4A, 0xF1, /* .F..j.J. */
2112 0x44, 0x60, 0x37, 0x3B, 0x7F, 0x76, 0xE5, 0xFF, /* D`7;.v.. */
2113 0xC1, 0xE7, 0xA5, 0x04, 0x9C, 0x29, 0x5C, 0xA5, /* .....)\. */
2114 0xDD, 0xC8, 0xEE, 0x36, 0x1F, 0x48, 0xE0, 0xA9, /* ...6.H.. */
2115 0x82, 0x2D, 0x53, 0x84, 0x49, 0x69, 0x78, 0xFA, /* .-S.Iix. */
2116 0x23, 0x69, 0x1D, 0xF7, 0x08, 0x38, 0x44, 0x05, /* #i...8D. */
2117};
2118
2119static const uint8_t ciph_data_des3_cbc_nopad_out1[] = {
2120 0x18, 0x09, 0xEB, 0x98, 0xE4, 0x58, 0x72, 0x11, /* .....Xr. */
2121 0x30, 0x58, 0xAB, 0x38, 0xB0, 0xC9, 0x2B, 0xED, /* 0X.8..+. */
2122 0xDA, 0xC5, 0xE8, 0xA9, 0xF6, 0x8A, 0xA7, 0x80, /* ........ */
2123 0xBE, 0x54, 0x1F, 0x63, 0xF6, 0xEE, 0xA2, 0x4C, /* .T.c...L */
2124 0x7C, 0xEB, 0x84, 0x7D, 0xDA, 0xCA, 0x1E, 0xB2, /* |..}.... */
2125 0xED, 0x5E, 0x96, 0xB8, 0x01, 0x4B, 0x77, 0x02, /* .^...Kw. */
2126};
2127
2128static const uint8_t ciph_data_des2_ecb_nopad_out1[] = {
2129 0xAB, 0x12, 0xB6, 0xE2, 0x4A, 0x3A, 0x26, 0x14, /* ....J:&. */
2130 0xF0, 0x7D, 0x23, 0xD0, 0x55, 0xDF, 0x5C, 0x16, /* .}#.U.\. */
2131 0x43, 0x59, 0x1E, 0x44, 0x01, 0x76, 0xD7, 0x50, /* CY.D.v.P */
2132 0x44, 0xC0, 0x15, 0xDF, 0x2E, 0x7F, 0x8B, 0xC5, /* D....... */
2133 0xFF, 0x8B, 0x87, 0xFE, 0x33, 0xD7, 0xCB, 0x2C, /* ....3.., */
2134 0xDA, 0x79, 0x6F, 0xA4, 0x05, 0x2B, 0x30, 0xCE, /* .yo..+0. */
2135};
2136
2137static const uint8_t ciph_data_des2_cbc_nopad_out1[] = {
2138 0x47, 0x2F, 0xB1, 0x83, 0xC4, 0xBB, 0x93, 0x16, /* G/...... */
2139 0x73, 0xF9, 0xAD, 0x6F, 0x00, 0xF9, 0xCB, 0x4A, /* s..o...J */
2140 0x0F, 0x4F, 0x75, 0x75, 0xFB, 0x39, 0x0B, 0xFC, /* .Ouu.9.. */
2141 0x9F, 0x48, 0x52, 0xAD, 0xA2, 0x75, 0x2C, 0xF1, /* .HR..u, . */
2142 0x7D, 0xC3, 0x8F, 0x16, 0xCF, 0xC9, 0x76, 0x29, /* }.....v) */
2143 0x1A, 0xBF, 0xB3, 0xD9, 0x10, 0x7E, 0xAA, 0x49, /* .....~.I */
2144};
2145
Jerome Forissiere73e0fb2019-12-12 17:08:03 +01002146/* SM4 ECB */
2147
2148static const uint8_t ciph_data_sm4_key1[] = {
2149 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
2150 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10,
2151};
2152
2153static const uint8_t ciph_data_sm4_in1[] = {
2154 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
2155 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10,
2156};
2157
2158static const uint8_t ciph_data_sm4_ecb_nopad_out1[] = {
2159 0x68, 0x1e, 0xdf, 0x34, 0xd2, 0x06, 0x96, 0x5e,
2160 0x86, 0xb3, 0xe9, 0x4f, 0x53, 0x6e, 0x42, 0x46,
2161};
2162
2163/*
2164 * SM4 CBC
2165 * https://tools.ietf.org/html/draft-ribose-cfrg-sm4-10#appendix-A.2.2.1
2166 */
2167static const uint8_t ciph_data_sm4_cbc_a221_key[] = {
2168 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
2169 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10,
2170};
2171
2172static const uint8_t ciph_data_sm4_cbc_a221_iv[] = {
2173 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
2174 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
2175};
2176
2177static const uint8_t ciph_data_sm4_cbc_a221_in[] = {
2178 0xaa, 0xaa, 0xaa, 0xaa, 0xbb, 0xbb, 0xbb, 0xbb,
2179 0xcc, 0xcc, 0xcc, 0xcc, 0xdd, 0xdd, 0xdd, 0xdd,
2180 0xee, 0xee, 0xee, 0xee, 0xff, 0xff, 0xff, 0xff,
2181 0xaa, 0xaa, 0xaa, 0xaa, 0xbb, 0xbb, 0xbb, 0xbb,
2182};
2183
2184static const uint8_t ciph_data_sm4_cbc_a221_out[] = {
2185 0x78, 0xeb, 0xb1, 0x1c, 0xc4, 0x0b, 0x0a, 0x48,
2186 0x31, 0x2a, 0xae, 0xb2, 0x04, 0x02, 0x44, 0xcb,
2187 0x4c, 0xb7, 0x01, 0x69, 0x51, 0x90, 0x92, 0x26,
2188 0x97, 0x9b, 0x0d, 0x15, 0xdc, 0x6a, 0x8f, 0x6d,
2189};
2190
2191/*
2192 * SM4 CBC
2193 * https://tools.ietf.org/html/draft-ribose-cfrg-sm4-10#appendix-A.2.2.2
2194 */
2195static const uint8_t ciph_data_sm4_cbc_a222_key[] = {
2196 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10,
2197 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
2198};
2199
2200static const uint8_t ciph_data_sm4_cbc_a222_iv[] = {
2201 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
2202 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
2203};
2204
2205static const uint8_t ciph_data_sm4_cbc_a222_in[] = {
2206 0xaa, 0xaa, 0xaa, 0xaa, 0xbb, 0xbb, 0xbb, 0xbb,
2207 0xcc, 0xcc, 0xcc, 0xcc, 0xdd, 0xdd, 0xdd, 0xdd,
2208 0xee, 0xee, 0xee, 0xee, 0xff, 0xff, 0xff, 0xff,
2209 0xaa, 0xaa, 0xaa, 0xaa, 0xbb, 0xbb, 0xbb, 0xbb,
2210};
2211
2212static const uint8_t ciph_data_sm4_cbc_a222_out[] = {
2213 0x0d, 0x3a, 0x6d, 0xdc, 0x2d, 0x21, 0xc6, 0x98,
2214 0x85, 0x72, 0x15, 0x58, 0x7b, 0x7b, 0xb5, 0x9a,
2215 0x91, 0xf2, 0xc1, 0x47, 0x91, 0x1a, 0x41, 0x44,
2216 0x66, 0x5e, 0x1f, 0xa1, 0xd4, 0x0b, 0xae, 0x38,
2217};
2218
2219/*
2220 * SM4 CTR
2221 * https://tools.ietf.org/html/draft-ribose-cfrg-sm4-10#appendix-A.2.5.1
2222 */
2223static const uint8_t ciph_data_sm4_ctr_a251_key[] = {
2224 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
2225 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10,
2226};
2227
2228static const uint8_t ciph_data_sm4_ctr_a251_iv[] = {
2229 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
2230 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
2231};
2232
2233static const uint8_t ciph_data_sm4_ctr_a251_in[] = {
2234 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
2235 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb,
2236 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
2237 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
2238 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
2239 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2240 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
2241 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb,
2242};
2243
2244static const uint8_t ciph_data_sm4_ctr_a251_out[] = {
2245 0xac, 0x32, 0x36, 0xcb, 0x97, 0x0c, 0xc2, 0x07,
2246 0x91, 0x36, 0x4c, 0x39, 0x5a, 0x13, 0x42, 0xd1,
2247 0xa3, 0xcb, 0xc1, 0x87, 0x8c, 0x6f, 0x30, 0xcd,
2248 0x07, 0x4c, 0xce, 0x38, 0x5c, 0xdd, 0x70, 0xc7,
2249 0xf2, 0x34, 0xbc, 0x0e, 0x24, 0xc1, 0x19, 0x80,
2250 0xfd, 0x12, 0x86, 0x31, 0x0c, 0xe3, 0x7b, 0x92,
2251 0x6e, 0x02, 0xfc, 0xd0, 0xfa, 0xa0, 0xba, 0xf3,
2252 0x8b, 0x29, 0x33, 0x85, 0x1d, 0x82, 0x45, 0x14,
2253};
2254
2255/*
2256 * SM4 CTR
2257 * https://tools.ietf.org/html/draft-ribose-cfrg-sm4-10#appendix-A.2.5.2
2258 */
2259static const uint8_t ciph_data_sm4_ctr_a252_key[] = {
2260 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10,
2261 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
2262};
2263
2264static const uint8_t ciph_data_sm4_ctr_a252_iv[] = {
2265 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
2266 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
2267};
2268
2269static const uint8_t ciph_data_sm4_ctr_a252_in[] = {
2270 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
2271 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb,
2272 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
2273 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
2274 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
2275 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2276 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
2277 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb,
2278};
2279
2280static const uint8_t ciph_data_sm4_ctr_a252_out[] = {
2281 0x5d, 0xcc, 0xcd, 0x25, 0xb9, 0x5a, 0xb0, 0x74,
2282 0x17, 0xa0, 0x85, 0x12, 0xee, 0x16, 0x0e, 0x2f,
2283 0x8f, 0x66, 0x15, 0x21, 0xcb, 0xba, 0xb4, 0x4c,
2284 0xc8, 0x71, 0x38, 0x44, 0x5b, 0xc2, 0x9e, 0x5c,
2285 0x0a, 0xe0, 0x29, 0x72, 0x05, 0xd6, 0x27, 0x04,
2286 0x17, 0x3b, 0x21, 0x23, 0x9b, 0x88, 0x7f, 0x6c,
2287 0x8c, 0xb5, 0xb8, 0x00, 0x91, 0x7a, 0x24, 0x88,
2288 0x28, 0x4b, 0xde, 0x9e, 0x16, 0xea, 0x29, 0x06,
2289};
2290
Pascal Brandc639ac82015-07-02 08:53:34 +02002291struct xtest_ciph_case {
2292 uint32_t algo;
2293 uint32_t mode;
2294 uint32_t key_type;
2295 const uint8_t *key1;
2296 size_t key1_len;
2297 const uint8_t *key2;
2298 size_t key2_len;
2299 const uint8_t *iv;
2300 size_t iv_len;
2301 size_t in_incr;
2302 const uint8_t *in;
2303 size_t in_len;
2304 const uint8_t *out;
2305 size_t out_len;
2306 size_t line;
2307};
2308
2309#define XTEST_CIPH_CASE_NO_IV(algo, key_type, key, in_incr, ptx, ctx) \
2310 { (algo), TEE_MODE_ENCRYPT, (key_type), (key), ARRAY_SIZE(key), \
2311 NULL, 0, NULL, 0, \
2312 (in_incr), (ptx), ARRAY_SIZE(ptx), (ctx), ARRAY_SIZE(ctx), \
2313 __LINE__ }, \
2314 { (algo), TEE_MODE_DECRYPT, (key_type), (key), ARRAY_SIZE(key), \
2315 NULL, 0, NULL, 0, \
2316 (in_incr), (ctx), ARRAY_SIZE(ctx), (ptx), ARRAY_SIZE(ptx), __LINE__ }
2317
2318#define XTEST_CIPH_CASE(algo, key_type, key, iv, in_incr, ptx, ctx) \
2319 { (algo), TEE_MODE_ENCRYPT, (key_type), (key), ARRAY_SIZE(key), \
2320 NULL, 0, iv, ARRAY_SIZE(iv), (in_incr), (ptx), ARRAY_SIZE(ptx), \
2321 (ctx), ARRAY_SIZE(ctx), __LINE__ }, \
2322 { (algo), TEE_MODE_DECRYPT, (key_type), (key), ARRAY_SIZE(key), \
2323 NULL, 0, iv, ARRAY_SIZE(iv), (in_incr), (ctx), ARRAY_SIZE(ctx), \
2324 (ptx), ARRAY_SIZE(ptx), __LINE__ }
2325
2326#define XTEST_CIPH_CASE_AES_XTS(vect, in_incr) \
2327 { TEE_ALG_AES_XTS, TEE_MODE_ENCRYPT, TEE_TYPE_AES, \
2328 ciph_data_aes_xts_ ## vect ## _key1, \
2329 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _key1), \
2330 ciph_data_aes_xts_ ## vect ## _key2, \
2331 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _key2), \
2332 ciph_data_aes_xts_ ## vect ## _iv, \
2333 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _iv), \
2334 (in_incr), \
2335 ciph_data_aes_xts_ ## vect ## _ptx, \
2336 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _ptx), \
2337 ciph_data_aes_xts_ ## vect ## _ctx, \
2338 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _ctx), __LINE__ }, \
2339 { TEE_ALG_AES_XTS, TEE_MODE_DECRYPT, TEE_TYPE_AES, \
2340 ciph_data_aes_xts_ ## vect ## _key1, \
2341 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _key1), \
2342 ciph_data_aes_xts_ ## vect ## _key2, \
2343 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _key2), \
2344 ciph_data_aes_xts_ ## vect ## _iv, \
2345 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _iv), \
2346 (in_incr), \
2347 ciph_data_aes_xts_ ## vect ## _ctx, \
2348 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _ctx), \
2349 ciph_data_aes_xts_ ## vect ## _ptx, \
2350 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _ptx), __LINE__ }
2351
2352#define XTEST_CIPH_CASE_AES_CBC(vect, in_incr) \
2353 XTEST_CIPH_CASE(TEE_ALG_AES_CBC_NOPAD, TEE_TYPE_AES, \
2354 ciph_data_aes_cbc_ ## vect ## _key, \
2355 ciph_data_aes_cbc_ ## vect ## _iv, \
2356 (in_incr), ciph_data_aes_cbc_ ## vect ## _ptx, \
2357 ciph_data_aes_cbc_ ## vect ## _ctx)
2358
2359#define XTEST_CIPH_CASE_AES_CTS(vect, in_incr) \
2360 XTEST_CIPH_CASE(TEE_ALG_AES_CTS, TEE_TYPE_AES, \
2361 ciph_data_aes_cts_ ## vect ## _key, \
2362 ciph_data_aes_cts_ ## vect ## _iv, \
2363 (in_incr), ciph_data_aes_cts_ ## vect ## _ptx, \
2364 ciph_data_aes_cts_ ## vect ## _ctx)
2365
2366static const struct xtest_ciph_case ciph_cases[] = {
2367 /* AES */
2368 XTEST_CIPH_CASE_NO_IV(TEE_ALG_AES_ECB_NOPAD, TEE_TYPE_AES,
2369 ciph_data_aes_key1, 11, ciph_data_in1,
2370 ciph_data_aes_ecb_nopad_out1),
2371 XTEST_CIPH_CASE(TEE_ALG_AES_CBC_NOPAD, TEE_TYPE_AES,
2372 ciph_data_aes_key1, ciph_data_128_iv1, 11,
2373 ciph_data_in1,
2374 ciph_data_aes_cbc_nopad_out1),
2375 XTEST_CIPH_CASE(TEE_ALG_AES_CTR, TEE_TYPE_AES,
2376 ciph_data_aes_key1, ciph_data_128_iv1, 13,
2377 ciph_data_in1,
2378 ciph_data_aes_ctr_out1),
2379 XTEST_CIPH_CASE(TEE_ALG_AES_CTR, TEE_TYPE_AES,
2380 ciph_data_aes_key1, ciph_data_128_iv1, 13,
2381 ciph_data_in3,
2382 ciph_data_aes_ctr_out2),
Jens Wiklander692efd12018-01-19 09:52:00 +01002383 XTEST_CIPH_CASE(TEE_ALG_AES_CTR, TEE_TYPE_AES,
2384 ciph_data_aes_key1, ciph_data_128_iv1, 16,
2385 ciph_data_in3,
2386 ciph_data_aes_ctr_out2),
Jerome Forissier45218eb2018-04-11 13:03:26 +02002387 XTEST_CIPH_CASE(TEE_ALG_AES_CTR, TEE_TYPE_AES,
2388 ciph_data_aes_key1, ciph_data_128_iv1, 16,
2389 ciph_data_in4,
2390 ciph_data_aes_ctr_out4),
Jerome Forissier0780ad42018-06-05 15:02:37 +02002391 XTEST_CIPH_CASE(TEE_ALG_AES_CTR, TEE_TYPE_AES,
2392 ciph_data_aes_key2, ciph_data_128_iv2, 11,
2393 ciph_data_in5,
2394 ciph_data_aes_ctr_out5),
Pascal Brandc639ac82015-07-02 08:53:34 +02002395
2396 XTEST_CIPH_CASE_AES_CBC(vect1, 11),
Jerome Forissierfc1bbc32018-06-12 10:13:04 +02002397 XTEST_CIPH_CASE_AES_CBC(vect1, 64),
Pascal Brandc639ac82015-07-02 08:53:34 +02002398
2399 /* AES-CTS */
2400 XTEST_CIPH_CASE_AES_CTS(vect1, 13),
2401 XTEST_CIPH_CASE_AES_CTS(vect2, 14),
2402 XTEST_CIPH_CASE_AES_CTS(vect3, 11),
2403 XTEST_CIPH_CASE_AES_CTS(vect4, 9),
2404 XTEST_CIPH_CASE_AES_CTS(vect5, 7),
2405 XTEST_CIPH_CASE_AES_CTS(vect6, 17),
2406 XTEST_CIPH_CASE_AES_CTS(vect6, 0x20),
Jerome Forissiered00e162017-01-20 09:22:52 +01002407 XTEST_CIPH_CASE_AES_CTS(issue1203, 32),
Pascal Brandc639ac82015-07-02 08:53:34 +02002408
2409 /* DES */
2410 XTEST_CIPH_CASE_NO_IV(TEE_ALG_DES_ECB_NOPAD, TEE_TYPE_DES,
2411 ciph_data_des_key1, 14, ciph_data_in1,
2412 ciph_data_des_ecb_nopad_out1),
2413 XTEST_CIPH_CASE_NO_IV(TEE_ALG_DES_ECB_NOPAD, TEE_TYPE_DES,
2414 ciph_data_des_key2, 3, ciph_data_in2,
2415 ciph_data_des_ecb_nopad_out2),
2416 XTEST_CIPH_CASE(TEE_ALG_DES_CBC_NOPAD, TEE_TYPE_DES,
2417 ciph_data_des_key1, ciph_data_64_iv1, 15, ciph_data_in1,
2418 ciph_data_des_cbc_nopad_out1),
2419
2420 /* DES3 */
2421 XTEST_CIPH_CASE_NO_IV(TEE_ALG_DES3_ECB_NOPAD, TEE_TYPE_DES3,
2422 ciph_data_des3_key1, 11, ciph_data_in1,
2423 ciph_data_des3_ecb_nopad_out1),
2424 XTEST_CIPH_CASE_NO_IV(TEE_ALG_DES3_ECB_NOPAD, TEE_TYPE_DES3,
2425 ciph_data_des3_key2, 3, ciph_data_in2,
2426 ciph_data_des_ecb_nopad_out2),
2427 XTEST_CIPH_CASE(TEE_ALG_DES3_CBC_NOPAD, TEE_TYPE_DES3,
2428 ciph_data_des3_key1, ciph_data_64_iv1, 11,
2429 ciph_data_in1,
2430 ciph_data_des3_cbc_nopad_out1),
2431
2432 /* DES2 */
2433 XTEST_CIPH_CASE_NO_IV(TEE_ALG_DES3_ECB_NOPAD, TEE_TYPE_DES3,
2434 ciph_data_des2_key1, 11, ciph_data_in1,
2435 ciph_data_des2_ecb_nopad_out1),
2436 XTEST_CIPH_CASE(TEE_ALG_DES3_CBC_NOPAD, TEE_TYPE_DES3,
2437 ciph_data_des2_key1, ciph_data_64_iv1, 11,
2438 ciph_data_in1,
2439 ciph_data_des2_cbc_nopad_out1),
Pascal Brandc639ac82015-07-02 08:53:34 +02002440
Pascal Brandc639ac82015-07-02 08:53:34 +02002441 /* AES-XTS */
2442 XTEST_CIPH_CASE_AES_XTS(vect1, 3),
2443 XTEST_CIPH_CASE_AES_XTS(vect2, 6),
2444 XTEST_CIPH_CASE_AES_XTS(vect3, 7),
2445 XTEST_CIPH_CASE_AES_XTS(vect4, 8),
2446 XTEST_CIPH_CASE_AES_XTS(vect5, 9),
2447 XTEST_CIPH_CASE_AES_XTS(vect6, 13),
2448 XTEST_CIPH_CASE_AES_XTS(vect7, 1),
2449 XTEST_CIPH_CASE_AES_XTS(vect8, 3),
2450 XTEST_CIPH_CASE_AES_XTS(vect9, 2),
2451 XTEST_CIPH_CASE_AES_XTS(vect10, 5),
2452 XTEST_CIPH_CASE_AES_XTS(vect11, 6),
2453 XTEST_CIPH_CASE_AES_XTS(vect12, 7),
2454 XTEST_CIPH_CASE_AES_XTS(vect13, 3),
2455 XTEST_CIPH_CASE_AES_XTS(vect14, 2),
2456 XTEST_CIPH_CASE_AES_XTS(vect15, 0),
2457 XTEST_CIPH_CASE_AES_XTS(vect16, 9),
2458 XTEST_CIPH_CASE_AES_XTS(vect17, 6),
2459 XTEST_CIPH_CASE_AES_XTS(vect18, 8),
2460 XTEST_CIPH_CASE_AES_XTS(vect19, 23),
Jerome Forissiere73e0fb2019-12-12 17:08:03 +01002461
2462 /* SM4 */
2463 XTEST_CIPH_CASE_NO_IV(TEE_ALG_SM4_ECB_NOPAD, TEE_TYPE_SM4,
2464 ciph_data_sm4_key1, 11, ciph_data_sm4_in1,
2465 ciph_data_sm4_ecb_nopad_out1),
2466 XTEST_CIPH_CASE(TEE_ALG_SM4_CBC_NOPAD, TEE_TYPE_SM4,
2467 ciph_data_sm4_cbc_a221_key, ciph_data_sm4_cbc_a221_iv,
2468 11, ciph_data_sm4_cbc_a221_in,
2469 ciph_data_sm4_cbc_a221_out),
2470 XTEST_CIPH_CASE(TEE_ALG_SM4_CBC_NOPAD, TEE_TYPE_SM4,
2471 ciph_data_sm4_cbc_a222_key, ciph_data_sm4_cbc_a222_iv,
2472 11, ciph_data_sm4_cbc_a222_in,
2473 ciph_data_sm4_cbc_a222_out),
2474 XTEST_CIPH_CASE(TEE_ALG_SM4_CTR, TEE_TYPE_SM4,
2475 ciph_data_sm4_ctr_a251_key, ciph_data_sm4_ctr_a251_iv,
2476 11, ciph_data_sm4_ctr_a251_in,
2477 ciph_data_sm4_ctr_a251_out),
2478 XTEST_CIPH_CASE(TEE_ALG_SM4_CTR, TEE_TYPE_SM4,
2479 ciph_data_sm4_ctr_a252_key, ciph_data_sm4_ctr_a252_iv,
2480 11, ciph_data_sm4_ctr_a252_in,
2481 ciph_data_sm4_ctr_a252_out),
Pascal Brandc639ac82015-07-02 08:53:34 +02002482};
2483
Jerome Forissier23256842018-02-16 09:25:35 +01002484static void xtest_tee_test_4003(ADBG_Case_t *c)
Pascal Brandc639ac82015-07-02 08:53:34 +02002485{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01002486 TEEC_Session session = { };
2487 TEE_OperationHandle op = TEE_HANDLE_NULL;
Pascal Brandc639ac82015-07-02 08:53:34 +02002488 TEE_ObjectHandle key1_handle = TEE_HANDLE_NULL;
2489 TEE_ObjectHandle key2_handle = TEE_HANDLE_NULL;
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01002490 uint8_t out[2048] = { };
2491 size_t out_size = 0;
2492 size_t out_offs = 0;
2493 uint32_t ret_orig = 0;
2494 size_t n = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +02002495
2496 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2497 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
2498 &ret_orig)))
2499 return;
2500
2501 for (n = 0; n < ARRAY_SIZE(ciph_cases); n++) {
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01002502 TEE_Attribute key_attr = { };
2503 size_t key_size = 0;
2504 size_t op_key_size = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +02002505
2506 Do_ADBG_BeginSubCase(c, "Cipher case %d algo 0x%x line %d",
2507 (int)n, (unsigned int)ciph_cases[n].algo,
2508 (int)ciph_cases[n].line);
2509
2510 key_attr.attributeID = TEE_ATTR_SECRET_VALUE;
2511 key_attr.content.ref.buffer = (void *)ciph_cases[n].key1;
2512 key_attr.content.ref.length = ciph_cases[n].key1_len;
2513
2514 key_size = key_attr.content.ref.length * 8;
2515 if (ciph_cases[n].key_type == TEE_TYPE_DES ||
2516 ciph_cases[n].key_type == TEE_TYPE_DES3)
2517 /* Exclude parity in bit size of key */
2518 key_size -= key_size / 8;
2519
2520 op_key_size = key_size;
2521 if (ciph_cases[n].key2 != NULL)
2522 op_key_size *= 2;
2523
2524 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2525 ta_crypt_cmd_allocate_operation(c, &session, &op,
2526 ciph_cases[n].algo, ciph_cases[n].mode,
2527 op_key_size)))
2528 goto out;
2529
2530 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2531 ta_crypt_cmd_allocate_transient_object(c, &session,
2532 ciph_cases[n].key_type, key_size,
2533 &key1_handle)))
2534 goto out;
2535
2536 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2537 ta_crypt_cmd_populate_transient_object(c, &session,
2538 key1_handle, &key_attr, 1)))
2539 goto out;
2540
2541 if (ciph_cases[n].key2 != NULL) {
2542 key_attr.content.ref.buffer =
2543 (void *)ciph_cases[n].key2;
2544 key_attr.content.ref.length = ciph_cases[n].key2_len;
2545
2546 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2547 ta_crypt_cmd_allocate_transient_object(c,
2548 &session, ciph_cases[n].key_type,
2549 key_attr.content.ref.length * 8,
2550 &key2_handle)))
2551 goto out;
2552
2553 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2554 ta_crypt_cmd_populate_transient_object(c,
2555 &session, key2_handle, &key_attr, 1)))
2556 goto out;
2557
2558 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2559 ta_crypt_cmd_set_operation_key2(c, &session, op,
2560 key1_handle, key2_handle)))
2561 goto out;
2562 } else {
2563 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2564 ta_crypt_cmd_set_operation_key(c, &session, op,
2565 key1_handle)))
2566 goto out;
2567 }
2568
2569 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2570 ta_crypt_cmd_free_transient_object(c, &session,
2571 key1_handle)))
2572 goto out;
2573 key1_handle = TEE_HANDLE_NULL;
2574
2575 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2576 ta_crypt_cmd_free_transient_object(c, &session,
2577 key2_handle)))
2578 goto out;
2579 key2_handle = TEE_HANDLE_NULL;
2580
2581 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2582 ta_crypt_cmd_cipher_init(c, &session, op,
2583 ciph_cases[n].iv, ciph_cases[n].iv_len)))
2584 goto out;
2585
2586 out_offs = 0;
2587 out_size = sizeof(out);
2588 memset(out, 0, sizeof(out));
2589 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2590 ta_crypt_cmd_cipher_update(c, &session, op,
2591 ciph_cases[n].in, ciph_cases[n].in_incr, out,
2592 &out_size)))
2593 goto out;
2594
Jerome Forissierd2d94b42017-06-02 16:39:34 +02002595 if (ciph_cases[n].algo == TEE_ALG_AES_CTR)
2596 ADBG_EXPECT_COMPARE_UNSIGNED(c, out_size, ==,
2597 ciph_cases[n].in_incr);
2598
Pascal Brandc639ac82015-07-02 08:53:34 +02002599 out_offs += out_size;
2600 out_size = sizeof(out) - out_offs;
2601
2602 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2603 ta_crypt_cmd_cipher_do_final(c, &session, op,
2604 ciph_cases[n].in + ciph_cases[n].in_incr,
2605 ciph_cases[n].in_len - ciph_cases[n].in_incr,
2606 out + out_offs,
2607 &out_size)))
2608 goto out;
2609
2610 out_offs += out_size;
2611
2612 (void)ADBG_EXPECT_BUFFER(c, ciph_cases[n].out,
2613 ciph_cases[n].out_len, out, out_offs);
2614
2615 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2616 ta_crypt_cmd_free_operation(c, &session, op)))
2617 goto out;
2618
2619 Do_ADBG_EndSubCase(c, NULL);
2620 }
2621out:
2622 TEEC_CloseSession(&session);
2623}
Jens Wiklander14f48872018-06-29 15:30:13 +02002624ADBG_CASE_DEFINE(regression, 4003, xtest_tee_test_4003,
2625 "Test TEE Internal API cipher operations");
Pascal Brandc639ac82015-07-02 08:53:34 +02002626
Pascal Brandc639ac82015-07-02 08:53:34 +02002627static void xtest_tee_test_4004(ADBG_Case_t *c)
2628{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01002629 TEEC_Session session = { };
2630 uint32_t ret_orig = 0;
2631 uint8_t buf1[45] = { };
2632 uint8_t buf2[45] = { };
2633 static const uint8_t zeros[45];
Pascal Brandc639ac82015-07-02 08:53:34 +02002634
2635 Do_ADBG_BeginSubCase(c, "TEE get random");
2636 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2637 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
2638 &ret_orig)))
2639 return;
2640
2641 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2642 ta_crypt_cmd_random_number_generate(c, &session, buf1,
2643 sizeof(buf1))))
2644 goto out;
2645
2646 (void)ADBG_EXPECT_COMPARE_SIGNED(c,
2647 0, !=, memcmp(buf1, zeros, sizeof(buf1)));
2648
2649 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2650 ta_crypt_cmd_random_number_generate(c, &session, buf2,
2651 sizeof(buf2))))
2652 goto out;
2653
2654 (void)ADBG_EXPECT_COMPARE_SIGNED(c,
2655 0, !=, memcmp(buf2, zeros, sizeof(buf2)));
2656
2657 (void)ADBG_EXPECT_COMPARE_SIGNED(c,
2658 0, !=, memcmp(buf2, buf1, sizeof(buf1)));
2659out:
2660 TEEC_CloseSession(&session);
2661 Do_ADBG_EndSubCase(c, "TEE get random");
2662}
Jens Wiklander14f48872018-06-29 15:30:13 +02002663ADBG_CASE_DEFINE(regression, 4004, xtest_tee_test_4004,
2664 "Test TEE Internal API get random");
Pascal Brandc639ac82015-07-02 08:53:34 +02002665
2666struct xtest_ae_case {
2667 uint32_t algo;
2668 uint32_t mode;
2669 uint32_t key_type;
2670 const uint8_t *key;
2671 size_t key_len;
2672 const uint8_t *nonce;
2673 size_t nonce_len;
2674 size_t aad_incr;
2675 const uint8_t *aad;
2676 size_t aad_len;
2677 size_t in_incr;
2678 const uint8_t *ptx;
2679 size_t ptx_len;
2680 const uint8_t *ctx;
2681 size_t ctx_len;
2682 const uint8_t *tag;
2683 size_t tag_len;
2684 size_t line;
2685};
2686
2687
2688#define ARRAY(a) a, ARRAY_SIZE(a)
2689#define NULL_ARRAY(a) NULL, 0
2690
2691#define XTEST_AE_CASE(algo, vect, aad_incr, in_incr, \
2692 aad_array, ptx_array, ctx_array) \
2693 { (algo), TEE_MODE_ENCRYPT, TEE_TYPE_AES, ARRAY(vect ## _key), \
2694 ARRAY(vect ## _nonce), (aad_incr), \
2695 aad_array(vect ## _aad), (in_incr), \
2696 ptx_array(vect ## _ptx), ctx_array(vect ## _ctx), \
2697 ARRAY(vect ## _tag), \
2698 __LINE__ }, \
2699 { (algo), TEE_MODE_DECRYPT, TEE_TYPE_AES, ARRAY(vect ## _key), \
2700 ARRAY(vect ## _nonce), (aad_incr), \
2701 aad_array(vect ## _aad), (in_incr), \
2702 ptx_array(vect ## _ptx), ctx_array(vect ## _ctx), \
2703 ARRAY(vect ## _tag), \
2704 __LINE__ }
2705
2706#define XTEST_AE_CASE_AES_CCM(vect, aad_incr, in_incr) \
2707 XTEST_AE_CASE(TEE_ALG_AES_CCM, ae_data_aes_ccm_ ## vect, aad_incr, \
2708 in_incr, ARRAY, ARRAY, ARRAY)
2709
2710#define XTEST_AE_CASE_AES_GCM(vect, aad_incr, in_incr, \
2711 aad_array, ptx_array, ctx_array) \
2712 XTEST_AE_CASE(TEE_ALG_AES_GCM, ae_data_aes_gcm_ ## vect, aad_incr, \
2713 in_incr, aad_array, ptx_array, ctx_array)
2714
2715
2716
2717static const struct xtest_ae_case ae_cases[] = {
2718 XTEST_AE_CASE_AES_CCM(vect1, 3, 2),
2719 XTEST_AE_CASE_AES_CCM(vect2, 7, 13),
2720 XTEST_AE_CASE_AES_CCM(vect3, 5, 21),
2721
2722 XTEST_AE_CASE_AES_GCM(vect1, 0, 0, NULL_ARRAY, NULL_ARRAY, NULL_ARRAY),
2723 XTEST_AE_CASE_AES_GCM(vect2, 0, 9, NULL_ARRAY, ARRAY, ARRAY),
2724 XTEST_AE_CASE_AES_GCM(vect3, 0, 9, NULL_ARRAY, ARRAY, ARRAY),
Jens Wiklander9fc63f52017-11-10 11:13:26 +01002725 XTEST_AE_CASE_AES_GCM(vect3, 0, 0x1F, NULL_ARRAY, ARRAY, ARRAY),
2726 XTEST_AE_CASE_AES_GCM(vect4, 5, 0x20, ARRAY, ARRAY, ARRAY),
Pascal Brandc639ac82015-07-02 08:53:34 +02002727 XTEST_AE_CASE_AES_GCM(vect5, 5, 9, ARRAY, ARRAY, ARRAY),
2728 XTEST_AE_CASE_AES_GCM(vect6, 5, 9, ARRAY, ARRAY, ARRAY),
2729 XTEST_AE_CASE_AES_GCM(vect7, 0, 0, NULL_ARRAY, NULL_ARRAY, NULL_ARRAY),
2730 XTEST_AE_CASE_AES_GCM(vect8, 0, 9, NULL_ARRAY, ARRAY, ARRAY),
2731 XTEST_AE_CASE_AES_GCM(vect9, 0, 9, NULL_ARRAY, ARRAY, ARRAY),
2732 XTEST_AE_CASE_AES_GCM(vect10, 5, 9, ARRAY, ARRAY, ARRAY),
2733 XTEST_AE_CASE_AES_GCM(vect11, 5, 9, ARRAY, ARRAY, ARRAY),
2734 XTEST_AE_CASE_AES_GCM(vect12, 5, 9, ARRAY, ARRAY, ARRAY),
2735 XTEST_AE_CASE_AES_GCM(vect13, 0, 0, NULL_ARRAY, NULL_ARRAY, NULL_ARRAY),
2736 XTEST_AE_CASE_AES_GCM(vect14, 0, 9, NULL_ARRAY, ARRAY, ARRAY),
2737 XTEST_AE_CASE_AES_GCM(vect15, 0, 9, NULL_ARRAY, ARRAY, ARRAY),
2738 XTEST_AE_CASE_AES_GCM(vect16, 5, 9, ARRAY, ARRAY, ARRAY),
2739 XTEST_AE_CASE_AES_GCM(vect17, 5, 9, ARRAY, ARRAY, ARRAY),
2740 XTEST_AE_CASE_AES_GCM(vect18, 5, 9, ARRAY, ARRAY, ARRAY),
Jens Wiklanderf6efe242017-11-06 13:16:43 +01002741#ifdef CFG_GCM_NIST_VECTORS
2742#include "gcmDecrypt128.h"
2743#include "gcmDecrypt192.h"
2744#include "gcmDecrypt256.h"
2745#include "gcmEncryptExtIV128.h"
2746#include "gcmEncryptExtIV192.h"
2747#include "gcmEncryptExtIV256.h"
2748#endif
Pascal Brandc639ac82015-07-02 08:53:34 +02002749};
2750
2751static void xtest_tee_test_4005(ADBG_Case_t *c)
2752{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01002753 TEEC_Session session = { };
2754 TEE_OperationHandle op = TEE_HANDLE_NULL;
Pascal Brandc639ac82015-07-02 08:53:34 +02002755 TEE_ObjectHandle key_handle = TEE_HANDLE_NULL;
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01002756 TEE_Attribute key_attr = { };
2757 uint8_t out[512] = { };
2758 size_t out_size = 0;
2759 size_t out_offs = 0;
2760 uint32_t ret_orig = 0;
2761 size_t n = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +02002762
2763 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2764 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
2765 &ret_orig)))
2766 return;
2767
2768 for (n = 0; n < ARRAY_SIZE(ae_cases); n++) {
2769 Do_ADBG_BeginSubCase(c, "AE case %d algo 0x%x line %d",
2770 (int)n, (unsigned int)ae_cases[n].algo,
2771 (int)ae_cases[n].line);
2772
2773 key_attr.attributeID = TEE_ATTR_SECRET_VALUE;
2774 key_attr.content.ref.buffer = (void *)ae_cases[n].key;
2775 key_attr.content.ref.length = ae_cases[n].key_len;
2776
2777 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2778 ta_crypt_cmd_allocate_operation(c, &session, &op,
2779 ae_cases[n].algo, ae_cases[n].mode,
2780 key_attr.content.ref.length * 8)))
2781 goto out;
2782
2783 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2784 ta_crypt_cmd_allocate_transient_object(c, &session,
2785 ae_cases[n].key_type,
2786 key_attr.content.ref.length * 8,
2787 &key_handle)))
2788 goto out;
2789
2790 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2791 ta_crypt_cmd_populate_transient_object(c, &session,
2792 key_handle, &key_attr, 1)))
2793 goto out;
2794
2795 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2796 ta_crypt_cmd_set_operation_key(c, &session, op,
2797 key_handle)))
2798 goto out;
2799
2800 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2801 ta_crypt_cmd_free_transient_object(c, &session,
2802 key_handle)))
2803 goto out;
2804 key_handle = TEE_HANDLE_NULL;
2805
2806 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2807 ta_crypt_cmd_ae_init(c, &session, op, ae_cases[n].nonce,
2808 ae_cases[n].nonce_len, ae_cases[n].tag_len,
2809 ae_cases[n].aad_len, ae_cases[n].ptx_len)))
2810 goto out;
2811
2812 if (ae_cases[n].aad != NULL) {
2813 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2814 ta_crypt_cmd_ae_update_aad(c, &session, op,
2815 ae_cases[n].aad, ae_cases[n].aad_incr)))
2816 goto out;
2817
2818 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2819 ta_crypt_cmd_ae_update_aad(c, &session, op,
2820 ae_cases[n].aad + ae_cases[n].aad_incr,
2821 ae_cases [n].aad_len -
2822 ae_cases[n].aad_incr)))
2823 goto out;
2824 }
2825
2826 out_offs = 0;
2827 out_size = sizeof(out);
2828 memset(out, 0, sizeof(out));
2829 if (ae_cases[n].mode == TEE_MODE_ENCRYPT) {
2830 if (ae_cases[n].ptx != NULL) {
2831 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2832 ta_crypt_cmd_ae_update(c, &session, op,
2833 ae_cases[n].ptx,
2834 ae_cases[n].in_incr, out,
2835 &out_size)))
2836 goto out;
2837 out_offs += out_size;
Jerome Forissierc13fafa2017-06-01 15:49:07 +02002838 if (ae_cases[n].algo == TEE_ALG_AES_GCM)
2839 ADBG_EXPECT_COMPARE_UNSIGNED(c,
2840 out_size, ==, ae_cases[n].in_incr);
Pascal Brandc639ac82015-07-02 08:53:34 +02002841 }
2842 } else {
2843 if (ae_cases[n].ctx != NULL) {
2844 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2845 ta_crypt_cmd_ae_update(c, &session, op,
2846 ae_cases[n].ctx,
2847 ae_cases[n].in_incr, out,
2848 &out_size)))
2849 goto out;
2850 out_offs += out_size;
Jerome Forissierc13fafa2017-06-01 15:49:07 +02002851 if (ae_cases[n].algo == TEE_ALG_AES_GCM)
2852 ADBG_EXPECT_COMPARE_UNSIGNED(c,
2853 out_size, ==, ae_cases[n].in_incr);
Pascal Brandc639ac82015-07-02 08:53:34 +02002854 }
2855 }
2856
2857 out_size = sizeof(out) - out_offs;
2858 if (ae_cases[n].mode == TEE_MODE_ENCRYPT) {
2859 uint8_t out_tag[64];
2860 size_t out_tag_len = MIN(sizeof(out_tag),
2861 ae_cases[n].tag_len);
2862
2863 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2864 ta_crypt_cmd_ae_encrypt_final(c, &session, op,
2865 ae_cases[n].ptx + ae_cases[n].in_incr,
2866 ae_cases[n].ptx_len -
2867 ae_cases[n].in_incr,
2868 out + out_offs,
2869 &out_size, out_tag, &out_tag_len)))
2870 goto out;
2871
2872 (void)ADBG_EXPECT_BUFFER(c,
2873 ae_cases[n].tag, ae_cases[n].tag_len, out_tag,
2874 out_tag_len);
2875
2876 out_offs += out_size;
2877
2878 (void)ADBG_EXPECT_BUFFER(c, ae_cases[n].ctx,
2879 ae_cases[n].ctx_len, out, out_offs);
2880 } else {
2881 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2882 ta_crypt_cmd_ae_decrypt_final(c, &session, op,
2883 ae_cases[n].ctx + ae_cases[n].in_incr,
2884 ae_cases[n].ctx_len -
2885 ae_cases[n].in_incr,
2886 out + out_offs,
2887 &out_size, ae_cases[n].tag,
2888 ae_cases[n].tag_len)))
2889 goto out;
2890
2891 out_offs += out_size;
2892
2893 (void)ADBG_EXPECT_BUFFER(c, ae_cases[n].ptx,
2894 ae_cases[n].ptx_len, out, out_offs);
2895 }
2896
2897 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2898 ta_crypt_cmd_free_operation(c, &session, op)))
2899 goto out;
2900
2901 Do_ADBG_EndSubCase(c, NULL);
2902 }
2903out:
2904 TEEC_CloseSession(&session);
2905}
Jens Wiklander14f48872018-06-29 15:30:13 +02002906ADBG_CASE_DEFINE(regression, 4005, xtest_tee_test_4005,
2907 "Test TEE Internal API Authenticated Encryption operations");
Pascal Brandc639ac82015-07-02 08:53:34 +02002908
2909struct xtest_ac_case {
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02002910 unsigned int level;
Pascal Brandc639ac82015-07-02 08:53:34 +02002911 uint32_t algo;
2912 TEE_OperationMode mode;
2913
2914 union {
2915 struct {
2916 const uint8_t *modulus;
2917 size_t modulus_len;
2918
2919 const uint8_t *pub_exp;
2920 size_t pub_exp_len;
2921
2922 const uint8_t *priv_exp;
2923 size_t priv_exp_len;
2924
2925 const uint8_t *prime1; /* q */
2926 size_t prime1_len;
2927 const uint8_t *prime2; /* p */
2928 size_t prime2_len;
2929 const uint8_t *exp1; /* dp */
2930 size_t exp1_len;
2931 const uint8_t *exp2; /* dq */
2932 size_t exp2_len;
2933 const uint8_t *coeff; /* iq */
2934 size_t coeff_len;
2935
2936 int salt_len;
2937 } rsa;
2938 struct {
2939 const uint8_t *prime;
2940 size_t prime_len;
2941 const uint8_t *sub_prime;
2942 size_t sub_prime_len;
2943 const uint8_t *base;
2944 size_t base_len;
2945 const uint8_t *pub_val;
2946 size_t pub_val_len;
2947 const uint8_t *priv_val;
2948 size_t priv_val_len;
2949 } dsa;
Pascal Brand3e143ee2015-07-15 17:17:16 +02002950 struct {
2951 const uint8_t *private;
2952 size_t private_len;
2953 const uint8_t *public_x;
2954 size_t public_x_len;
2955 const uint8_t *public_y;
2956 size_t public_y_len;
2957 } ecdsa;
Pascal Brandc639ac82015-07-02 08:53:34 +02002958 } params;
2959
2960 const uint8_t *ptx;
2961 size_t ptx_len;
2962 const uint8_t *ctx;
2963 size_t ctx_len;
2964 size_t line;
2965};
2966
2967#define WITHOUT_SALT(x) -1
2968#define WITH_SALT(x) x
2969
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02002970#define XTEST_AC_CASE(level, algo, mode, vect, union_params) \
2971 { level, (algo), (mode), .params = union_params, \
Pascal Brandc639ac82015-07-02 08:53:34 +02002972 ARRAY(vect ## _ptx), \
2973 ARRAY(vect ## _out), \
2974 __LINE__ }
2975
2976#define XTEST_AC_RSA_UNION(vect, opt_crt_array, opt_salt) \
2977 { .rsa = { \
2978 ARRAY(vect ## _modulus), \
2979 ARRAY(vect ## _pub_exp), \
2980 ARRAY(vect ## _priv_exp), \
2981 opt_crt_array(vect ## _prime1), \
2982 opt_crt_array(vect ## _prime2), \
2983 opt_crt_array(vect ## _exp1), \
2984 opt_crt_array(vect ## _exp2), \
2985 opt_crt_array(vect ## _coeff), \
2986 opt_salt(vect ## _salt_len) \
2987 } }
2988
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002989#define XTEST_AC_RSA_CASE(level, algo, mode, vect, opt_crt_array, opt_salt) \
2990 XTEST_AC_CASE(level, algo, mode, vect, \
Pascal Brandc639ac82015-07-02 08:53:34 +02002991 XTEST_AC_RSA_UNION(vect, opt_crt_array, opt_salt))
2992
2993#define XTEST_AC_DSA_UNION(vect) \
2994 { .dsa = { \
2995 ARRAY(vect ## _prime), \
2996 ARRAY(vect ## _sub_prime), \
2997 ARRAY(vect ## _base), \
2998 ARRAY(vect ## _pub_val), \
2999 ARRAY(vect ## _priv_val), \
3000 } }
3001
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003002#define XTEST_AC_DSA_CASE(level, algo, mode, vect) \
3003 XTEST_AC_CASE(level, algo, mode, vect, XTEST_AC_DSA_UNION(vect))
Pascal Brandc639ac82015-07-02 08:53:34 +02003004
Pascal Brand3e143ee2015-07-15 17:17:16 +02003005#define XTEST_AC_ECDSA_UNION(vect) \
3006 { .ecdsa = { \
3007 ARRAY(vect ## _private), \
3008 ARRAY(vect ## _public_x), \
3009 ARRAY(vect ## _public_y), \
3010 } }
3011
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003012#define XTEST_AC_ECDSA_CASE(level, algo, mode, vect) \
3013 XTEST_AC_CASE(level, algo, mode, vect, XTEST_AC_ECDSA_UNION(vect))
Pascal Brand3e143ee2015-07-15 17:17:16 +02003014
Pascal Brandc639ac82015-07-02 08:53:34 +02003015static const struct xtest_ac_case xtest_ac_cases[] = {
3016 /* RSA test without crt parameters */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003017 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003018 ac_rsassa_vect1, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003019 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003020 ac_rsassa_vect1, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003021 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003022 ac_rsassa_vect2, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003023 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003024 ac_rsassa_vect2, NULL_ARRAY, WITHOUT_SALT),
Jerome Forissiere576f052018-03-23 21:24:21 +08003025 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_ENCRYPT,
3026 ac_rsassa_vect18, NULL_ARRAY, WITHOUT_SALT),
3027 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_DECRYPT,
3028 ac_rsassa_vect18, NULL_ARRAY, WITHOUT_SALT),
Jerome Forissier0451e372018-03-27 00:10:23 +08003029 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_ENCRYPT,
3030 ac_rsassa_vect19, NULL_ARRAY, WITHOUT_SALT),
3031 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_DECRYPT,
3032 ac_rsassa_vect19, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003033 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003034 ac_rsassa_vect3, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003035 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003036 ac_rsassa_vect3, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003037 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003038 ac_rsassa_vect4, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003039 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003040 ac_rsassa_vect4, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003041 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003042 ac_rsassa_vect5, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003043 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003044 ac_rsassa_vect5, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003045 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003046 ac_rsassa_vect6, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003047 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003048 ac_rsassa_vect6, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003049 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003050 ac_rsassa_vect7, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003051 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003052 ac_rsassa_vect7, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003053 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
3054 ac_rsassa_vect8, NULL_ARRAY, WITHOUT_SALT),
3055 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
3056 ac_rsassa_vect8, NULL_ARRAY, WITHOUT_SALT),
Pascal Brandc639ac82015-07-02 08:53:34 +02003057
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003058 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA224, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003059 ac_rsassa_vect16, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003060 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA224, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003061 ac_rsassa_vect16, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003062
Gabor Szekely2ad190f2018-09-14 14:05:06 +00003063#ifdef CFG_CRYPTO_RSASSA_NA1
3064 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5, TEE_MODE_SIGN,
3065 ac_rsassa_vect20, NULL_ARRAY, WITHOUT_SALT),
3066 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5, TEE_MODE_VERIFY,
3067 ac_rsassa_vect20, NULL_ARRAY, WITHOUT_SALT),
3068#endif
3069
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003070 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA256, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003071 ac_rsassa_vect9, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003072 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA256, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003073 ac_rsassa_vect9, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003074
3075 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA384, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003076 ac_rsassa_vect10, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003077 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA384, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003078 ac_rsassa_vect10, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003079
3080 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA512, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003081 ac_rsassa_vect11, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003082 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA512, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003083 ac_rsassa_vect11, NULL_ARRAY, WITHOUT_SALT),
3084
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003085 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA1,
3086 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003087 ac_rsassa_vect12, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003088 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003089 ac_rsassa_vect12, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003090
3091 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA224,
3092 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003093 ac_rsassa_vect17, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003094 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA224,
3095 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003096 ac_rsassa_vect17, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003097
3098 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA256,
3099 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003100 ac_rsassa_vect13, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003101 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA256,
3102 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003103 ac_rsassa_vect13, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003104
3105 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA384,
3106 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003107 ac_rsassa_vect14, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003108 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA384,
3109 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003110 ac_rsassa_vect14, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003111
3112 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA512,
3113 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003114 ac_rsassa_vect15, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003115 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA512,
3116 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003117 ac_rsassa_vect15, NULL_ARRAY, WITH_SALT),
3118
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003119 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003120 ac_rsaes_pkcs1_v1_5_vect1, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003121 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003122 ac_rsaes_pkcs1_v1_5_vect1, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003123 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003124 ac_rsaes_pkcs1_v1_5_vect2, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003125 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003126 ac_rsaes_pkcs1_v1_5_vect2, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003127 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003128 ac_rsaes_pkcs1_v1_5_vect15, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003129 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003130 ac_rsaes_pkcs1_v1_5_vect15, NULL_ARRAY, WITHOUT_SALT),
3131
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003132 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3133 TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003134 ac_rsaes_oaep_vect1, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003135 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3136 TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003137 ac_rsaes_oaep_vect1, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003138 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3139 TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003140 ac_rsaes_oaep_vect2, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003141 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3142 TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003143 ac_rsaes_oaep_vect2, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003144 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3145 TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003146 ac_rsaes_oaep_vect10, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003147 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3148 TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003149 ac_rsaes_oaep_vect10, NULL_ARRAY, WITHOUT_SALT),
3150
3151 /* RSA test with crt parameters */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003152 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003153 ac_rsassa_vect1, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003154 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003155 ac_rsassa_vect1, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003156 XTEST_AC_RSA_CASE(1, TEE_ALG_RSA_NOPAD, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003157 ac_rsassa_vect2, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003158 XTEST_AC_RSA_CASE(1, TEE_ALG_RSA_NOPAD, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003159 ac_rsassa_vect2, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003160 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003161 ac_rsassa_vect3, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003162 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003163 ac_rsassa_vect3, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003164 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003165 ac_rsassa_vect4, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003166 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003167 ac_rsassa_vect4, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003168 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003169 ac_rsassa_vect5, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003170 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003171 ac_rsassa_vect5, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003172 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003173 ac_rsassa_vect6, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003174 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003175 ac_rsassa_vect6, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003176 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003177 ac_rsassa_vect7, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003178 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003179 ac_rsassa_vect7, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003180 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003181 ac_rsassa_vect8, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003182 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003183 ac_rsassa_vect8, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003184 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA256, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003185 ac_rsassa_vect9, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003186 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA256, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003187 ac_rsassa_vect9, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003188 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA384, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003189 ac_rsassa_vect10, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003190 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA384, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003191 ac_rsassa_vect10, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003192 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA512, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003193 ac_rsassa_vect11, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003194 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA512, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003195 ac_rsassa_vect11, ARRAY, WITHOUT_SALT),
3196
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003197 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA1,
3198 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003199 ac_rsassa_vect12, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003200 XTEST_AC_RSA_CASE(1,TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003201 ac_rsassa_vect12, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003202 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA224,
3203 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003204 ac_rsassa_vect17, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003205 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA224,
3206 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003207 ac_rsassa_vect17, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003208 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA256,
3209 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003210 ac_rsassa_vect13, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003211 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA256,
3212 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003213 ac_rsassa_vect13, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003214 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA384,
3215 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003216 ac_rsassa_vect14, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003217 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA384,
3218 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003219 ac_rsassa_vect14, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003220 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA512,
3221 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003222 ac_rsassa_vect15, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003223 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA512,
3224 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003225 ac_rsassa_vect15, ARRAY, WITH_SALT),
3226
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003227 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003228 ac_rsaes_pkcs1_v1_5_vect1, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003229 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003230 ac_rsaes_pkcs1_v1_5_vect1, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003231 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003232 ac_rsaes_pkcs1_v1_5_vect2, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003233 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003234 ac_rsaes_pkcs1_v1_5_vect2, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003235 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003236 ac_rsaes_pkcs1_v1_5_vect15, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003237 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003238 ac_rsaes_pkcs1_v1_5_vect15, ARRAY, WITHOUT_SALT),
3239
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003240 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3241 TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003242 ac_rsaes_oaep_vect1, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003243 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3244 TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003245 ac_rsaes_oaep_vect1, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003246 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3247 TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003248 ac_rsaes_oaep_vect2, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003249 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3250 TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003251 ac_rsaes_oaep_vect2, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003252 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3253 TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003254 ac_rsaes_oaep_vect10, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003255 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3256 TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003257 ac_rsaes_oaep_vect10, ARRAY, WITHOUT_SALT),
3258
3259 /* DSA tests */
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003260 /* [mod = L=1024, N=160, SHA-1] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003261 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect1),
3262 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect1),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003263 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect2),
3264 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect2),
3265 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect3),
3266 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect3),
3267 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect4),
3268 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect4),
3269 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect5),
3270 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect5),
3271 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect6),
3272 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect6),
3273 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect7),
3274 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect7),
3275 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect8),
3276 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect8),
3277 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect9),
3278 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect9),
3279 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect10),
3280 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect10),
3281 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect11),
3282 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect11),
3283 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect12),
3284 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect12),
3285 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect13),
3286 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect13),
3287 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect14),
3288 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect14),
3289 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect15),
3290 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect15),
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003291 /* [mod = L=1024, N=160, SHA-224] - GP NOT SUPPORTED */
3292 /* [mod = L=1024, N=160, SHA-256] - GP NOT SUPPORTED */
3293 /* [mod = L=1024, N=160, SHA-384] - GP NOT SUPPORTED */
3294 /* [mod = L=1024, N=160, SHA-512] - GP NOT SUPPORTED */
3295 /* [mod = L=2048, N=224, SHA-1] - GP NOT SUPPORTED */
3296 /* [mod = L=2048, N=224, SHA-224] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003297 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect91),
3298 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect91),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003299 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect92),
3300 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect92),
3301 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect93),
3302 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect93),
3303 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect94),
3304 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect94),
3305 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect95),
3306 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect95),
3307 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect96),
3308 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect96),
3309 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect97),
3310 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect97),
3311 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect98),
3312 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect98),
3313 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect99),
3314 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect99),
3315 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect100),
3316 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect100),
3317 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect101),
3318 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect101),
3319 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect102),
3320 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect102),
3321 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect103),
3322 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect103),
3323 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect104),
3324 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect104),
3325 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect105),
3326 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect105),
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003327 /* [mod = L=2048, N=224, SHA-256] */
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003328 XTEST_AC_DSA_CASE(0, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect106),
3329 XTEST_AC_DSA_CASE(0, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect106),
3330 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect107),
3331 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect107),
3332 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect108),
3333 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect108),
3334 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect109),
3335 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect109),
3336 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect110),
3337 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect110),
3338 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect111),
3339 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect111),
3340 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect112),
3341 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect112),
3342 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect113),
3343 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect113),
3344 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect114),
3345 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect114),
3346 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect115),
3347 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect115),
3348 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect116),
3349 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect116),
3350 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect117),
3351 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect117),
3352 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect118),
3353 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect118),
3354 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect119),
3355 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect119),
3356 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect120),
3357 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect120),
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003358 /* [mod = L=2048, N=224, SHA-384] - GP NOT SUPPORTED */
3359 /* [mod = L=2048, N=224, SHA-512] - GP NOT SUPPORTED */
3360 /* [mod = L=2048, N=256, SHA-1] - GP NOT SUPPORTED */
3361 /* [mod = L=2048, N=256, SHA-224] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003362 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect166),
3363 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect166),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003364 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect167),
3365 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect167),
3366 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect168),
3367 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect168),
3368 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect169),
3369 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect169),
3370 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect170),
3371 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect170),
3372 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect171),
3373 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect171),
3374 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect172),
3375 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect172),
3376 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect173),
3377 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect173),
3378 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect174),
3379 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect174),
3380 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect175),
3381 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect175),
3382 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect176),
3383 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect176),
3384 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect177),
3385 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect177),
3386 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect178),
3387 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect178),
3388 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect179),
3389 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect179),
3390 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect180),
3391 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect180),
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003392 /* [mod = L=2048, N=256, SHA-256] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003393 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect181),
3394 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect181),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003395 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect182),
3396 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect182),
3397 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect183),
3398 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect183),
3399 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect184),
3400 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect184),
3401 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect185),
3402 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect185),
3403 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect186),
3404 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect186),
3405 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect187),
3406 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect187),
3407 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect188),
3408 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect188),
3409 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect189),
3410 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect189),
3411 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect190),
3412 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect190),
3413 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect191),
3414 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect191),
3415 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect192),
3416 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect192),
3417 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect193),
3418 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect193),
3419 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect194),
3420 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect194),
3421 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect195),
3422 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect195),
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003423 /* [mod = L=2048, N=256, SHA-384] - GP NOT SUPPORTED */
3424 /* [mod = L=2048, N=256, SHA-512] - GP NOT SUPPORTED */
3425 /* [mod = L=3072, N=256, SHA-1] - GP NOT SUPPORTED */
3426 /* [mod = L=3072, N=256, SHA-224] - GP NOT SUPPORTED */
3427 /* [mod = L=3072, N=256, SHA-256] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003428 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect256),
3429 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect256),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003430 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect257),
3431 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect257),
3432 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect258),
3433 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect258),
3434 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect259),
3435 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect259),
3436 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect260),
3437 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect260),
3438 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect261),
3439 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect261),
3440 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect262),
3441 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect262),
3442 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect263),
3443 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect263),
3444 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect264),
3445 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect264),
3446 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect265),
3447 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect265),
3448 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect266),
3449 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect266),
3450 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect267),
3451 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect267),
3452 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect268),
3453 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect268),
3454 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect269),
3455 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect269),
3456 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect270),
3457 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect270),
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003458 /* [mod = L=3072, N=256, SHA-384] - GP NOT SUPPORTED */
3459 /* [mod = L=3072, N=256, SHA-512] - GP NOT SUPPORTED */
Pascal Brand3e143ee2015-07-15 17:17:16 +02003460
3461 /* ECDSA tests */
Cedric Chaumontc7654962015-09-09 14:56:36 +02003462 /* [P-192] */
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003463 XTEST_AC_ECDSA_CASE(0, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003464 nist_186_2_ecdsa_testvector_1),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003465 XTEST_AC_ECDSA_CASE(0, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003466 nist_186_2_ecdsa_testvector_1),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003467 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003468 nist_186_2_ecdsa_testvector_2),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003469 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003470 nist_186_2_ecdsa_testvector_2),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003471 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003472 nist_186_2_ecdsa_testvector_3),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003473 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003474 nist_186_2_ecdsa_testvector_3),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003475 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003476 nist_186_2_ecdsa_testvector_4),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003477 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003478 nist_186_2_ecdsa_testvector_4),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003479 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003480 nist_186_2_ecdsa_testvector_5),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003481 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003482 nist_186_2_ecdsa_testvector_5),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003483 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003484 nist_186_2_ecdsa_testvector_6),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003485 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003486 nist_186_2_ecdsa_testvector_6),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003487 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003488 nist_186_2_ecdsa_testvector_7),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003489 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003490 nist_186_2_ecdsa_testvector_7),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003491 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003492 nist_186_2_ecdsa_testvector_8),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003493 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003494 nist_186_2_ecdsa_testvector_8),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003495 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003496 nist_186_2_ecdsa_testvector_9),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003497 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003498 nist_186_2_ecdsa_testvector_9),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003499 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003500 nist_186_2_ecdsa_testvector_10),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003501 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003502 nist_186_2_ecdsa_testvector_10),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003503 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003504 nist_186_2_ecdsa_testvector_11),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003505 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003506 nist_186_2_ecdsa_testvector_11),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003507 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003508 nist_186_2_ecdsa_testvector_12),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003509 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003510 nist_186_2_ecdsa_testvector_12),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003511 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003512 nist_186_2_ecdsa_testvector_13),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003513 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003514 nist_186_2_ecdsa_testvector_13),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003515 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003516 nist_186_2_ecdsa_testvector_14),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003517 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003518 nist_186_2_ecdsa_testvector_14),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003519 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003520 nist_186_2_ecdsa_testvector_15),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003521 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003522 nist_186_2_ecdsa_testvector_15),
3523 /* [P-224] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003524 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003525 nist_186_2_ecdsa_testvector_16),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003526 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003527 nist_186_2_ecdsa_testvector_16),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003528 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003529 nist_186_2_ecdsa_testvector_17),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003530 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003531 nist_186_2_ecdsa_testvector_17),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003532 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003533 nist_186_2_ecdsa_testvector_18),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003534 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003535 nist_186_2_ecdsa_testvector_18),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003536 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003537 nist_186_2_ecdsa_testvector_19),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003538 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003539 nist_186_2_ecdsa_testvector_19),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003540 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003541 nist_186_2_ecdsa_testvector_20),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003542 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003543 nist_186_2_ecdsa_testvector_20),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003544 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003545 nist_186_2_ecdsa_testvector_21),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003546 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003547 nist_186_2_ecdsa_testvector_21),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003548 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003549 nist_186_2_ecdsa_testvector_22),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003550 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003551 nist_186_2_ecdsa_testvector_22),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003552 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003553 nist_186_2_ecdsa_testvector_23),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003554 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003555 nist_186_2_ecdsa_testvector_23),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003556 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003557 nist_186_2_ecdsa_testvector_24),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003558 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003559 nist_186_2_ecdsa_testvector_24),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003560 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003561 nist_186_2_ecdsa_testvector_25),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003562 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003563 nist_186_2_ecdsa_testvector_25),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003564 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003565 nist_186_2_ecdsa_testvector_26),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003566 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003567 nist_186_2_ecdsa_testvector_26),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003568 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003569 nist_186_2_ecdsa_testvector_27),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003570 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003571 nist_186_2_ecdsa_testvector_27),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003572 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003573 nist_186_2_ecdsa_testvector_28),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003574 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003575 nist_186_2_ecdsa_testvector_28),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003576 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003577 nist_186_2_ecdsa_testvector_29),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003578 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003579 nist_186_2_ecdsa_testvector_29),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003580 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003581 nist_186_2_ecdsa_testvector_30),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003582 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003583 nist_186_2_ecdsa_testvector_30),
3584 /* [P-256] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003585 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003586 nist_186_2_ecdsa_testvector_31),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003587 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003588 nist_186_2_ecdsa_testvector_31),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003589 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003590 nist_186_2_ecdsa_testvector_32),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003591 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003592 nist_186_2_ecdsa_testvector_32),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003593 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003594 nist_186_2_ecdsa_testvector_33),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003595 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003596 nist_186_2_ecdsa_testvector_33),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003597 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003598 nist_186_2_ecdsa_testvector_34),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003599 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003600 nist_186_2_ecdsa_testvector_34),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003601 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003602 nist_186_2_ecdsa_testvector_35),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003603 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003604 nist_186_2_ecdsa_testvector_35),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003605 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003606 nist_186_2_ecdsa_testvector_36),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003607 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003608 nist_186_2_ecdsa_testvector_36),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003609 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003610 nist_186_2_ecdsa_testvector_37),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003611 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003612 nist_186_2_ecdsa_testvector_37),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003613 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003614 nist_186_2_ecdsa_testvector_38),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003615 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003616 nist_186_2_ecdsa_testvector_38),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003617 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003618 nist_186_2_ecdsa_testvector_39),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003619 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003620 nist_186_2_ecdsa_testvector_39),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003621 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003622 nist_186_2_ecdsa_testvector_40),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003623 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003624 nist_186_2_ecdsa_testvector_40),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003625 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003626 nist_186_2_ecdsa_testvector_41),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003627 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003628 nist_186_2_ecdsa_testvector_41),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003629 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003630 nist_186_2_ecdsa_testvector_42),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003631 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003632 nist_186_2_ecdsa_testvector_42),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003633 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003634 nist_186_2_ecdsa_testvector_43),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003635 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003636 nist_186_2_ecdsa_testvector_43),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003637 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003638 nist_186_2_ecdsa_testvector_44),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003639 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003640 nist_186_2_ecdsa_testvector_44),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003641 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003642 nist_186_2_ecdsa_testvector_45),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003643 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003644 nist_186_2_ecdsa_testvector_45),
3645 /* [P-384] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003646 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003647 nist_186_2_ecdsa_testvector_46),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003648 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003649 nist_186_2_ecdsa_testvector_46),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003650 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003651 nist_186_2_ecdsa_testvector_47),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003652 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003653 nist_186_2_ecdsa_testvector_47),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003654 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003655 nist_186_2_ecdsa_testvector_48),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003656 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003657 nist_186_2_ecdsa_testvector_48),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003658 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003659 nist_186_2_ecdsa_testvector_49),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003660 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003661 nist_186_2_ecdsa_testvector_49),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003662 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003663 nist_186_2_ecdsa_testvector_50),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003664 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003665 nist_186_2_ecdsa_testvector_50),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003666 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003667 nist_186_2_ecdsa_testvector_51),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003668 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003669 nist_186_2_ecdsa_testvector_51),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003670 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003671 nist_186_2_ecdsa_testvector_52),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003672 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003673 nist_186_2_ecdsa_testvector_52),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003674 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003675 nist_186_2_ecdsa_testvector_53),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003676 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003677 nist_186_2_ecdsa_testvector_53),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003678 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003679 nist_186_2_ecdsa_testvector_54),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003680 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003681 nist_186_2_ecdsa_testvector_54),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003682 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003683 nist_186_2_ecdsa_testvector_55),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003684 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003685 nist_186_2_ecdsa_testvector_55),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003686 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003687 nist_186_2_ecdsa_testvector_56),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003688 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003689 nist_186_2_ecdsa_testvector_56),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003690 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003691 nist_186_2_ecdsa_testvector_57),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003692 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003693 nist_186_2_ecdsa_testvector_57),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003694 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003695 nist_186_2_ecdsa_testvector_58),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003696 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003697 nist_186_2_ecdsa_testvector_58),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003698 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003699 nist_186_2_ecdsa_testvector_59),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003700 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003701 nist_186_2_ecdsa_testvector_59),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003702 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003703 nist_186_2_ecdsa_testvector_60),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003704 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003705 nist_186_2_ecdsa_testvector_60),
3706 /* [P-521] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003707 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003708 nist_186_2_ecdsa_testvector_61),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003709 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003710 nist_186_2_ecdsa_testvector_61),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003711 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003712 nist_186_2_ecdsa_testvector_62),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003713 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003714 nist_186_2_ecdsa_testvector_62),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003715 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003716 nist_186_2_ecdsa_testvector_63),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003717 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003718 nist_186_2_ecdsa_testvector_63),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003719 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003720 nist_186_2_ecdsa_testvector_64),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003721 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003722 nist_186_2_ecdsa_testvector_64),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003723 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003724 nist_186_2_ecdsa_testvector_65),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003725 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003726 nist_186_2_ecdsa_testvector_65),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003727 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003728 nist_186_2_ecdsa_testvector_66),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003729 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003730 nist_186_2_ecdsa_testvector_66),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003731 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003732 nist_186_2_ecdsa_testvector_67),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003733 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003734 nist_186_2_ecdsa_testvector_67),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003735 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003736 nist_186_2_ecdsa_testvector_68),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003737 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003738 nist_186_2_ecdsa_testvector_68),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003739 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003740 nist_186_2_ecdsa_testvector_69),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003741 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003742 nist_186_2_ecdsa_testvector_69),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003743 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003744 nist_186_2_ecdsa_testvector_70),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003745 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003746 nist_186_2_ecdsa_testvector_70),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003747 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003748 nist_186_2_ecdsa_testvector_71),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003749 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003750 nist_186_2_ecdsa_testvector_71),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003751 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003752 nist_186_2_ecdsa_testvector_72),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003753 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003754 nist_186_2_ecdsa_testvector_72),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003755 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003756 nist_186_2_ecdsa_testvector_73),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003757 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003758 nist_186_2_ecdsa_testvector_73),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003759 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003760 nist_186_2_ecdsa_testvector_74),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003761 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003762 nist_186_2_ecdsa_testvector_74),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003763 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003764 nist_186_2_ecdsa_testvector_75),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003765 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003766 nist_186_2_ecdsa_testvector_75),
3767 /* [K-163] - GP NOT SUPPORTED */
3768 /* [K-233] - GP NOT SUPPORTED */
3769 /* [K-283] - GP NOT SUPPORTED */
3770 /* [K-409] - GP NOT SUPPORTED */
3771 /* [K-571] - GP NOT SUPPORTED */
3772 /* [B-163] - GP NOT SUPPORTED */
3773 /* [B-233] - GP NOT SUPPORTED */
3774 /* [B-283] - GP NOT SUPPORTED */
3775 /* [B-409] - GP NOT SUPPORTED */
3776 /* [B-571] - GP NOT SUPPORTED */
Pascal Brandc639ac82015-07-02 08:53:34 +02003777};
3778
3779static bool create_key(ADBG_Case_t *c, TEEC_Session *s,
3780 uint32_t max_key_size, uint32_t key_type,
3781 TEE_Attribute *attrs, size_t num_attrs,
3782 TEE_ObjectHandle *handle)
3783{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01003784 size_t n = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +02003785
3786 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3787 ta_crypt_cmd_allocate_transient_object(c, s, key_type,
3788 max_key_size, handle)))
3789 return false;
3790
3791 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3792 ta_crypt_cmd_populate_transient_object(c, s, *handle, attrs,
3793 num_attrs)))
3794 return false;
3795
3796 for (n = 0; n < num_attrs; n++) {
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01003797 uint8_t out[512] = { };
3798 size_t out_size = sizeof(out);
Pascal Brand3e143ee2015-07-15 17:17:16 +02003799
3800 if (attrs[n].attributeID == TEE_ATTR_ECC_CURVE)
3801 continue;
3802
Pascal Brandc639ac82015-07-02 08:53:34 +02003803 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3804 ta_crypt_cmd_get_object_buffer_attribute(c, s, *handle,
3805 attrs[n].attributeID, out, &out_size)))
3806 return false;
3807
Pascal Brand3e143ee2015-07-15 17:17:16 +02003808 if (out_size < attrs[n].content.ref.length) {
3809 memmove(out + (attrs[n].content.ref.length - out_size),
3810 out,
3811 attrs[n].content.ref.length);
3812 memset(out, 0, attrs[n].content.ref.length - out_size);
3813 out_size = attrs[n].content.ref.length;
3814 }
3815
Pascal Brandc639ac82015-07-02 08:53:34 +02003816 if (!ADBG_EXPECT_BUFFER(c, attrs[n].content.ref.buffer,
3817 attrs[n].content.ref.length, out, out_size))
3818 return false;
3819 }
3820
3821 return true;
3822}
3823
3824static void xtest_tee_test_4006(ADBG_Case_t *c)
3825{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01003826 TEEC_Session session = { };
Pascal Brandc639ac82015-07-02 08:53:34 +02003827 TEE_OperationHandle op = TEE_HANDLE_NULL;
3828 TEE_ObjectHandle priv_key_handle = TEE_HANDLE_NULL;
3829 TEE_ObjectHandle pub_key_handle = TEE_HANDLE_NULL;
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01003830 TEE_Attribute key_attrs[8] = { };
3831 TEE_Attribute algo_params[1] = { };
3832 size_t num_algo_params = 0;
3833 uint8_t out[512] = { };
3834 size_t out_size = 0;
3835 uint8_t out_enc[512] = { };
3836 size_t out_enc_size = 0;
3837 uint8_t ptx_hash[TEE_MAX_HASH_SIZE] = { };
Etienne Carriere481c6602019-01-22 13:27:26 +01003838 size_t ptx_hash_size = 0;
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01003839 size_t max_key_size = 0;
3840 size_t num_key_attrs = 0;
3841 uint32_t ret_orig = 0;
3842 size_t n = 0;
3843 uint32_t curve = 0;
3844 uint32_t hash_algo = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +02003845
3846 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3847 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
3848 &ret_orig)))
3849 return;
3850
3851 for (n = 0; n < ARRAY_SIZE(xtest_ac_cases); n++) {
3852 const struct xtest_ac_case *tv = xtest_ac_cases + n;
3853
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003854 if (tv->level > level)
3855 continue;
3856
Pascal Brandc639ac82015-07-02 08:53:34 +02003857 Do_ADBG_BeginSubCase(c, "Asym Crypto case %d algo 0x%x line %d",
3858 (int)n, (unsigned int)tv->algo,
3859 (int)tv->line);
3860
3861 /*
3862 * When signing or verifying we're working with the hash of
3863 * the payload.
3864 */
3865 if (tv->mode == TEE_MODE_VERIFY || tv->mode == TEE_MODE_SIGN) {
Pascal Brand3e143ee2015-07-15 17:17:16 +02003866 if (TEE_ALG_GET_MAIN_ALG(tv->algo) == TEE_MAIN_ALGO_ECDSA)
3867 hash_algo = TEE_ALG_SHA1;
Gabor Szekely2ad190f2018-09-14 14:05:06 +00003868#if defined(CFG_CRYPTO_RSASSA_NA1)
3869 else if (tv->algo == TEE_ALG_RSASSA_PKCS1_V1_5)
3870 hash_algo = TEE_ALG_SHA256;
3871#endif
Pascal Brand3e143ee2015-07-15 17:17:16 +02003872 else
3873 hash_algo = TEE_ALG_HASH_ALGO(
3874 TEE_ALG_GET_DIGEST_HASH(tv->algo));
Pascal Brandc639ac82015-07-02 08:53:34 +02003875
3876 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3877 ta_crypt_cmd_allocate_operation(c, &session,
3878 &op, hash_algo, TEE_MODE_DIGEST, 0)))
3879 goto out;
3880
3881 ptx_hash_size = sizeof(ptx_hash);
3882 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3883 ta_crypt_cmd_digest_do_final(c, & session, op,
3884 tv->ptx, tv->ptx_len, ptx_hash,
3885 &ptx_hash_size)))
3886 goto out;
3887
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003888 /*
3889 * When we use DSA algorithms, the size of the hash we
3890 * consider equals the min between the size of the
3891 * "subprime" in the key and the size of the hash
3892 */
3893 if (TEE_ALG_GET_MAIN_ALG(tv->algo) ==
3894 TEE_MAIN_ALGO_DSA) {
3895 if (tv->params.dsa.sub_prime_len <=
3896 ptx_hash_size)
3897 ptx_hash_size =
3898 tv->params.dsa.sub_prime_len;
3899 }
3900
Pascal Brandc639ac82015-07-02 08:53:34 +02003901 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3902 ta_crypt_cmd_free_operation(c, &session, op)))
3903 goto out;
3904 }
3905
3906 num_algo_params = 0;
3907 num_key_attrs = 0;
3908 switch (TEE_ALG_GET_MAIN_ALG(tv->algo)) {
3909 case TEE_MAIN_ALGO_RSA:
3910 if (tv->params.rsa.salt_len > 0) {
3911 algo_params[0].attributeID =
3912 TEE_ATTR_RSA_PSS_SALT_LENGTH;
3913 algo_params[0].content.value.a =
3914 tv->params.rsa.salt_len;
3915 algo_params[0].content.value.b = 0;
3916 num_algo_params = 1;
3917 }
3918
3919 max_key_size = tv->params.rsa.modulus_len * 8;
3920
3921 xtest_add_attr(&num_key_attrs, key_attrs,
3922 TEE_ATTR_RSA_MODULUS,
3923 tv->params.rsa.modulus,
3924 tv->params.rsa.modulus_len);
3925 xtest_add_attr(&num_key_attrs, key_attrs,
3926 TEE_ATTR_RSA_PUBLIC_EXPONENT,
3927 tv->params.rsa.pub_exp,
3928 tv->params.rsa.pub_exp_len);
3929
3930 if (!ADBG_EXPECT_TRUE(c,
3931 create_key(c, &session,
3932 max_key_size,
3933 TEE_TYPE_RSA_PUBLIC_KEY,
3934 key_attrs,
3935 num_key_attrs,
3936 &pub_key_handle)))
3937 goto out;
3938
3939 xtest_add_attr(&num_key_attrs, key_attrs,
3940 TEE_ATTR_RSA_PRIVATE_EXPONENT,
3941 tv->params.rsa.priv_exp,
3942 tv->params.rsa.priv_exp_len);
3943
3944 if (tv->params.rsa.prime1_len != 0) {
3945 xtest_add_attr(&num_key_attrs, key_attrs,
3946 TEE_ATTR_RSA_PRIME1,
3947 tv->params.rsa.prime1,
3948 tv->params.rsa.prime1_len);
3949 }
3950
3951 if (tv->params.rsa.prime2_len != 0) {
3952 xtest_add_attr(&num_key_attrs, key_attrs,
3953 TEE_ATTR_RSA_PRIME2,
3954 tv->params.rsa.prime2,
3955 tv->params.rsa.prime2_len);
3956 }
3957
3958 if (tv->params.rsa.exp1_len != 0) {
3959 xtest_add_attr(&num_key_attrs, key_attrs,
3960 TEE_ATTR_RSA_EXPONENT1,
3961 tv->params.rsa.exp1,
3962 tv->params.rsa.exp1_len);
3963 }
3964
3965 if (tv->params.rsa.exp2_len != 0) {
3966 xtest_add_attr(&num_key_attrs, key_attrs,
3967 TEE_ATTR_RSA_EXPONENT2,
3968 tv->params.rsa.exp2,
3969 tv->params.rsa.exp2_len);
3970 }
3971
3972 if (tv->params.rsa.coeff_len != 0) {
3973 xtest_add_attr(&num_key_attrs, key_attrs,
3974 TEE_ATTR_RSA_COEFFICIENT,
3975 tv->params.rsa.coeff,
3976 tv->params.rsa.coeff_len);
3977 }
3978
3979 if (!ADBG_EXPECT_TRUE(c,
3980 create_key(c, &session,
3981 max_key_size,
3982 TEE_TYPE_RSA_KEYPAIR,
3983 key_attrs,
3984 num_key_attrs,
3985 &priv_key_handle)))
3986 goto out;
3987 break;
3988
3989 case TEE_MAIN_ALGO_DSA:
3990 max_key_size = tv->params.dsa.prime_len * 8;
3991
3992 xtest_add_attr(&num_key_attrs, key_attrs,
3993 TEE_ATTR_DSA_PRIME,
3994 tv->params.dsa.prime,
3995 tv->params.dsa.prime_len);
3996 xtest_add_attr(&num_key_attrs, key_attrs,
3997 TEE_ATTR_DSA_SUBPRIME,
3998 tv->params.dsa.sub_prime,
3999 tv->params.dsa.sub_prime_len);
4000 xtest_add_attr(&num_key_attrs, key_attrs,
4001 TEE_ATTR_DSA_BASE,
4002 tv->params.dsa.base,
4003 tv->params.dsa.base_len);
4004 xtest_add_attr(&num_key_attrs, key_attrs,
4005 TEE_ATTR_DSA_PUBLIC_VALUE,
4006 tv->params.dsa.pub_val,
4007 tv->params.dsa.pub_val_len);
4008
4009 if (!ADBG_EXPECT_TRUE(c,
4010 create_key(c, &session, max_key_size,
4011 TEE_TYPE_DSA_PUBLIC_KEY, key_attrs,
4012 num_key_attrs, &pub_key_handle)))
4013 goto out;
4014
4015 xtest_add_attr(&num_key_attrs, key_attrs,
4016 TEE_ATTR_DSA_PRIVATE_VALUE,
4017 tv->params.dsa.priv_val,
4018 tv->params.dsa.priv_val_len);
4019
4020 if (!ADBG_EXPECT_TRUE(c,
4021 create_key(c, &session, max_key_size,
4022 TEE_TYPE_DSA_KEYPAIR, key_attrs,
4023 num_key_attrs, &priv_key_handle)))
4024 goto out;
4025 break;
4026
Pascal Brand3e143ee2015-07-15 17:17:16 +02004027 case TEE_MAIN_ALGO_ECDSA:
4028 switch (tv->algo) {
4029 case TEE_ALG_ECDSA_P192:
4030 curve = TEE_ECC_CURVE_NIST_P192;
4031 break;
4032 case TEE_ALG_ECDSA_P224:
4033 curve = TEE_ECC_CURVE_NIST_P224;
4034 break;
4035 case TEE_ALG_ECDSA_P256:
4036 curve = TEE_ECC_CURVE_NIST_P256;
4037 break;
4038 case TEE_ALG_ECDSA_P384:
4039 curve = TEE_ECC_CURVE_NIST_P384;
4040 break;
4041 case TEE_ALG_ECDSA_P521:
4042 curve = TEE_ECC_CURVE_NIST_P521;
4043 break;
4044 default:
4045 curve = 0xFF;
4046 break;
4047 }
4048
4049 if (tv->algo == TEE_ALG_ECDSA_P521)
4050 max_key_size = 521;
4051 else
4052 max_key_size = tv->params.ecdsa.private_len * 8;
4053
4054 xtest_add_attr_value(&num_key_attrs, key_attrs,
4055 TEE_ATTR_ECC_CURVE, curve, 0);
4056 xtest_add_attr(&num_key_attrs, key_attrs,
4057 TEE_ATTR_ECC_PUBLIC_VALUE_X,
4058 tv->params.ecdsa.public_x,
4059 tv->params.ecdsa.public_x_len);
4060 xtest_add_attr(&num_key_attrs, key_attrs,
4061 TEE_ATTR_ECC_PUBLIC_VALUE_Y,
4062 tv->params.ecdsa.public_y,
4063 tv->params.ecdsa.public_y_len);
4064
4065 if (!ADBG_EXPECT_TRUE(c,
4066 create_key(c, &session, max_key_size,
4067 TEE_TYPE_ECDSA_PUBLIC_KEY, key_attrs,
4068 num_key_attrs, &pub_key_handle)))
4069 goto out;
4070
4071 xtest_add_attr(&num_key_attrs, key_attrs,
4072 TEE_ATTR_ECC_PRIVATE_VALUE,
4073 tv->params.ecdsa.private,
4074 tv->params.ecdsa.private_len);
4075
4076 if (!ADBG_EXPECT_TRUE(c,
4077 create_key(c, &session, max_key_size,
4078 TEE_TYPE_ECDSA_KEYPAIR, key_attrs,
4079 num_key_attrs, &priv_key_handle)))
4080 goto out;
4081 break;
4082
Pascal Brandc639ac82015-07-02 08:53:34 +02004083 default:
4084 ADBG_EXPECT_TRUE(c, false);
4085 goto out;
4086 }
4087
4088 out_size = sizeof(out);
4089 memset(out, 0, sizeof(out));
4090 switch (tv->mode) {
4091 case TEE_MODE_ENCRYPT:
4092 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4093 ta_crypt_cmd_allocate_operation(c, &session,
Pascal Brand3e143ee2015-07-15 17:17:16 +02004094 &op, tv->algo, TEE_MODE_ENCRYPT,
4095 max_key_size)))
Pascal Brandc639ac82015-07-02 08:53:34 +02004096 goto out;
4097
4098 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4099 ta_crypt_cmd_set_operation_key(c, &session, op,
4100 pub_key_handle)))
4101 goto out;
4102
4103 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4104 ta_crypt_cmd_free_transient_object(c, &session,
4105 pub_key_handle)))
4106 goto out;
4107 pub_key_handle = TEE_HANDLE_NULL;
4108
4109 out_enc_size = sizeof(out_enc);
4110 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4111 ta_crypt_cmd_asymmetric_encrypt(c, &session, op,
4112 NULL, 0, tv->ptx, tv->ptx_len, out_enc,
4113 &out_enc_size)))
4114 goto out;
4115
4116 /*
4117 * A PS which is random is added when formatting the
4118 * message internally of the algorithm so we can't
4119 * verify against precomputed values, instead we use the
4120 * decrypt operation to see that output is correct.
4121 */
4122
4123 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4124 ta_crypt_cmd_free_operation(c, &session, op)))
4125 goto out;
4126
4127 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4128 ta_crypt_cmd_allocate_operation(c, &session,
4129 &op, tv->algo, TEE_MODE_DECRYPT,
4130 max_key_size)))
4131 goto out;
4132
4133 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4134 ta_crypt_cmd_set_operation_key(c, &session, op,
4135 priv_key_handle)))
4136 goto out;
4137
4138 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4139 ta_crypt_cmd_free_transient_object(c, &session,
4140 priv_key_handle)))
4141 goto out;
4142
4143 priv_key_handle = TEE_HANDLE_NULL;
4144
4145 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4146 ta_crypt_cmd_asymmetric_decrypt(c, &session, op,
4147 NULL, 0, out_enc, out_enc_size, out,
4148 &out_size)))
4149 goto out;
4150
4151 (void)ADBG_EXPECT_BUFFER(c, tv->ptx, tv->ptx_len, out,
4152 out_size);
4153 break;
4154
4155 case TEE_MODE_DECRYPT:
4156 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4157 ta_crypt_cmd_allocate_operation(c, &session,
4158 &op, tv->algo, TEE_MODE_DECRYPT,
4159 max_key_size)))
4160 goto out;
4161
4162 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4163 ta_crypt_cmd_set_operation_key(c, &session, op,
4164 priv_key_handle)))
4165 goto out;
4166
4167 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4168 ta_crypt_cmd_free_transient_object(c, &session,
4169 priv_key_handle)))
4170 goto out;
4171
4172 priv_key_handle = TEE_HANDLE_NULL;
4173
4174 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4175 ta_crypt_cmd_asymmetric_decrypt(c, &session, op,
4176 NULL, 0, tv->ctx, tv->ctx_len, out,
4177 &out_size)))
4178 goto out;
4179
4180 (void)ADBG_EXPECT_BUFFER(c, tv->ptx, tv->ptx_len, out,
4181 out_size);
4182 break;
4183
4184 case TEE_MODE_VERIFY:
4185 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4186 ta_crypt_cmd_allocate_operation(c, &session,
4187 &op, tv->algo, TEE_MODE_VERIFY,
4188 max_key_size)))
4189 goto out;
4190
4191 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4192 ta_crypt_cmd_set_operation_key(c, &session, op,
4193 pub_key_handle)))
4194 goto out;
4195
4196 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4197 ta_crypt_cmd_free_transient_object(c, &session,
4198 pub_key_handle)))
4199 goto out;
4200
4201 pub_key_handle = TEE_HANDLE_NULL;
4202
4203 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4204 ta_crypt_cmd_asymmetric_verify(c, &session, op,
4205 algo_params, num_algo_params, ptx_hash,
4206 ptx_hash_size, tv->ctx, tv->ctx_len)))
4207 goto out;
4208 break;
4209
4210 case TEE_MODE_SIGN:
4211 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4212 ta_crypt_cmd_allocate_operation(c, &session,
4213 &op, tv->algo, TEE_MODE_SIGN,
4214 max_key_size)))
4215 goto out;
4216
4217 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4218 ta_crypt_cmd_set_operation_key(c, &session, op,
4219 priv_key_handle)))
4220 goto out;
4221
4222 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4223 ta_crypt_cmd_free_transient_object(c, &session,
4224 priv_key_handle)))
4225 goto out;
4226
4227 priv_key_handle = TEE_HANDLE_NULL;
4228
4229 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4230 ta_crypt_cmd_asymmetric_sign(c, &session, op,
4231 algo_params, num_algo_params, ptx_hash,
4232 ptx_hash_size, out, &out_size)))
4233 goto out;
4234
4235 if (TEE_ALG_GET_CHAIN_MODE(tv->algo) ==
4236 TEE_CHAIN_MODE_PKCS1_PSS_MGF1 ||
Pascal Brand3e143ee2015-07-15 17:17:16 +02004237 tv->algo == TEE_ALG_DSA_SHA1 ||
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02004238 tv->algo == TEE_ALG_DSA_SHA224 ||
4239 tv->algo == TEE_ALG_DSA_SHA256 ||
Pascal Brand3e143ee2015-07-15 17:17:16 +02004240 TEE_ALG_GET_MAIN_ALG(tv->algo) ==
4241 TEE_MAIN_ALGO_ECDSA) {
Pascal Brandc639ac82015-07-02 08:53:34 +02004242 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4243 ta_crypt_cmd_free_operation(c, &session,
4244 op)))
4245 goto out;
4246 /*
4247 * The salt or K is random so we can't verify
4248 * signing against precomputed values, instead
4249 * we use the verify operation to see that
4250 * output is correct.
4251 */
4252 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4253 ta_crypt_cmd_allocate_operation(c,
4254 &session, &op, tv->algo,
4255 TEE_MODE_VERIFY, max_key_size)))
4256 goto out;
4257
4258 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4259 ta_crypt_cmd_set_operation_key(c,
4260 &session, op, pub_key_handle)))
4261 goto out;
4262
4263 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4264 ta_crypt_cmd_free_transient_object(c,
4265 &session, pub_key_handle)))
4266 goto out;
4267
4268 pub_key_handle = TEE_HANDLE_NULL;
4269
4270 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4271 ta_crypt_cmd_asymmetric_verify(c,
4272 &session, op, algo_params,
4273 num_algo_params, ptx_hash,
4274 ptx_hash_size, out, out_size)))
4275 goto out;
4276 } else {
4277 (void)ADBG_EXPECT_BUFFER(c, tv->ctx,
4278 tv->ctx_len, out,
4279 out_size);
4280 }
4281 break;
4282
4283 default:
4284 break;
4285 }
4286
4287 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4288 ta_crypt_cmd_free_operation(c, &session, op)))
4289 goto out;
4290
4291 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4292 ta_crypt_cmd_free_transient_object(c, &session,
4293 pub_key_handle)))
4294 goto out;
4295 pub_key_handle = TEE_HANDLE_NULL;
4296
4297 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4298 ta_crypt_cmd_free_transient_object(c, &session,
4299 priv_key_handle)))
4300 goto out;
4301
4302 priv_key_handle = TEE_HANDLE_NULL;
4303
4304 Do_ADBG_EndSubCase(c, NULL);
4305 }
4306out:
4307 TEEC_CloseSession(&session);
4308}
Jens Wiklander14f48872018-06-29 15:30:13 +02004309ADBG_CASE_DEFINE(regression, 4006, xtest_tee_test_4006,
4310 "Test TEE Internal API Asymmetric Cipher operations");
Pascal Brandc639ac82015-07-02 08:53:34 +02004311
4312#define KEY_ATTR(x, y) { #x, (x), y }
4313
4314struct key_attrs {
4315 const char *name;
4316 uint32_t attr;
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004317 /*
4318 * When keysize_check != 0: size of attribute is checked
4319 * Expected value is key_size bits except for DH in which case it is
4320 * the value of keysize_check.
4321 */
4322 uint32_t keysize_check;
Pascal Brandc639ac82015-07-02 08:53:34 +02004323};
4324
4325static bool test_keygen_attributes(ADBG_Case_t *c, TEEC_Session *s,
4326 TEE_ObjectHandle key, uint32_t key_size,
4327 struct key_attrs *attrs, size_t num_attrs)
4328{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01004329 uint8_t out[2048] = { };
4330 size_t out_size = 0;
4331 size_t n = 0;
4332 size_t m = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +02004333
4334 for (m = 0; m < num_attrs; m++) {
4335 if ((attrs[m].attr & TEE_ATTR_BIT_VALUE) == 0) {
4336 out_size = sizeof(out);
4337 memset(out, 0, sizeof(out));
4338 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4339 ta_crypt_cmd_get_object_buffer_attribute(c, s,
4340 key, attrs[m].attr, out, &out_size)))
4341 return false;
4342
4343 if (attrs[m].keysize_check)
4344 ADBG_EXPECT_COMPARE_UNSIGNED(c, out_size, ==,
4345 key_size / 8);
4346
4347 if (out_size > 0) {
4348 /* Check that buffer isn't all zeroes */
4349 for (n = 0; n < out_size; n++)
4350 if (out[n] != 0)
4351 break;
4352 if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, n, <,
4353 out_size))
4354 return false;
4355 }
4356 } else {
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01004357 uint32_t a = 0;
4358 uint32_t b = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +02004359
4360 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4361 ta_crypt_cmd_get_object_value_attribute(c, s, key,
4362 attrs[m].attr, &a, &b)))
4363 return false;
4364 }
4365 }
4366 return true;
4367}
4368
4369static bool test_secret_value(ADBG_Case_t *c, TEEC_Session *s,
4370 TEE_ObjectHandle key, uint32_t key_size)
4371{
4372 const struct key_attrs attrs[] = {
4373 KEY_ATTR(TEE_ATTR_SECRET_VALUE, true),
4374 };
4375
4376 return test_keygen_attributes(c, s, key, key_size,
4377 (struct key_attrs *)&attrs,
4378 ARRAY_SIZE(attrs));
4379}
4380
4381
4382static bool test_rsa_key_pair(ADBG_Case_t *c, TEEC_Session *s,
4383 TEE_ObjectHandle key, uint32_t key_size)
4384{
4385 const struct key_attrs attrs[] = {
4386 KEY_ATTR(TEE_ATTR_RSA_MODULUS, true),
4387 KEY_ATTR(TEE_ATTR_RSA_PUBLIC_EXPONENT, false),
4388 KEY_ATTR(TEE_ATTR_RSA_PRIVATE_EXPONENT, false),
4389 KEY_ATTR(TEE_ATTR_RSA_PRIME1, false),
4390 KEY_ATTR(TEE_ATTR_RSA_PRIME2, false),
4391 KEY_ATTR(TEE_ATTR_RSA_EXPONENT1, false),
4392 KEY_ATTR(TEE_ATTR_RSA_EXPONENT2, false),
4393 KEY_ATTR(TEE_ATTR_RSA_COEFFICIENT, false),
4394 };
4395
4396 return test_keygen_attributes(c, s, key, key_size,
4397 (struct key_attrs *)&attrs,
4398 ARRAY_SIZE(attrs));
4399}
4400
Pascal Brande61133f2015-07-08 15:38:37 +02004401static bool test_ecc_key_pair(ADBG_Case_t *c, TEEC_Session *s,
4402 TEE_ObjectHandle key, uint32_t key_size)
4403{
4404 const struct key_attrs attrs[] = {
4405 KEY_ATTR(TEE_ATTR_ECC_PRIVATE_VALUE, false),
4406 KEY_ATTR(TEE_ATTR_ECC_PUBLIC_VALUE_X , false),
4407 KEY_ATTR(TEE_ATTR_ECC_PUBLIC_VALUE_Y , false),
4408 /* KEY_ATTR(TEE_ATTR_ECC_CURVE, false), - do not test */
4409 };
4410
4411 return test_keygen_attributes(c, s, key, key_size,
4412 (struct key_attrs *)&attrs,
4413 ARRAY_SIZE(attrs));
4414}
4415
Pascal Brandc639ac82015-07-02 08:53:34 +02004416static bool test_dh_key_pair(ADBG_Case_t *c, TEEC_Session *s,
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004417 TEE_ObjectHandle key, uint32_t check_keysize)
Pascal Brandc639ac82015-07-02 08:53:34 +02004418{
4419 const struct key_attrs attrs[] = {
4420 KEY_ATTR(TEE_ATTR_DH_PRIME, false),
4421 KEY_ATTR(TEE_ATTR_DH_BASE, false),
4422 KEY_ATTR(TEE_ATTR_DH_PUBLIC_VALUE, false),
4423 KEY_ATTR(TEE_ATTR_DH_PRIVATE_VALUE, check_keysize),
4424 KEY_ATTR(TEE_ATTR_DH_X_BITS, false),
4425 };
4426
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004427 return test_keygen_attributes(c, s, key, check_keysize,
Pascal Brandc639ac82015-07-02 08:53:34 +02004428 (struct key_attrs *)&attrs,
4429 ARRAY_SIZE(attrs));
4430}
4431
4432static bool test_dsa_key_pair(ADBG_Case_t *c, TEEC_Session *s,
4433 TEE_ObjectHandle key, uint32_t key_size)
4434{
4435 const struct key_attrs attrs[] = {
4436 KEY_ATTR(TEE_ATTR_DSA_PRIME, true),
4437 KEY_ATTR(TEE_ATTR_DSA_SUBPRIME, false),
4438 KEY_ATTR(TEE_ATTR_DSA_BASE, false),
4439 KEY_ATTR(TEE_ATTR_DSA_PUBLIC_VALUE, false),
4440 KEY_ATTR(TEE_ATTR_DSA_PRIVATE_VALUE, false),
4441 };
4442
4443 return test_keygen_attributes(c, s, key, key_size,
4444 (struct key_attrs *)&attrs,
4445 ARRAY_SIZE(attrs));
4446}
4447
4448static bool generate_and_test_key(ADBG_Case_t *c, TEEC_Session *s,
4449 uint32_t key_type, uint32_t check_keysize,
4450 uint32_t key_size,
4451 TEE_Attribute *params, size_t param_count)
4452{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01004453 TEE_ObjectHandle key = TEE_HANDLE_NULL;
Pascal Brandc639ac82015-07-02 08:53:34 +02004454 bool ret_val = true;
4455
4456 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4457 ta_crypt_cmd_allocate_transient_object(c, s, key_type, key_size,
4458 &key)))
4459 return false;
4460
4461 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4462 ta_crypt_cmd_generate_key(c, s, key, key_size, params,
4463 param_count)))
4464 return false;
4465
4466 switch (key_type) {
4467 case TEE_TYPE_DES:
4468 case TEE_TYPE_DES3:
4469 ret_val = ADBG_EXPECT_TRUE(c,
4470 test_secret_value(c, s, key,
4471 key_size + key_size / 7));
4472 break;
4473 case TEE_TYPE_AES:
4474 case TEE_TYPE_HMAC_MD5:
4475 case TEE_TYPE_HMAC_SHA1:
4476 case TEE_TYPE_HMAC_SHA224:
4477 case TEE_TYPE_HMAC_SHA256:
4478 case TEE_TYPE_HMAC_SHA384:
4479 case TEE_TYPE_HMAC_SHA512:
4480 case TEE_TYPE_GENERIC_SECRET:
4481 ret_val = ADBG_EXPECT_TRUE(c,
4482 test_secret_value(c, s, key, key_size));
4483 break;
4484
4485 case TEE_TYPE_RSA_KEYPAIR:
4486 ret_val = ADBG_EXPECT_TRUE(c,
4487 test_rsa_key_pair(c, s, key, key_size));
4488 break;
4489
Pascal Brande61133f2015-07-08 15:38:37 +02004490 case TEE_TYPE_ECDSA_KEYPAIR:
4491 case TEE_TYPE_ECDH_KEYPAIR:
4492 ret_val = ADBG_EXPECT_TRUE(c,
4493 test_ecc_key_pair(c, s, key, key_size));
4494 break;
4495
Pascal Brandc639ac82015-07-02 08:53:34 +02004496 case TEE_TYPE_DH_KEYPAIR:
Pascal Brande61133f2015-07-08 15:38:37 +02004497 ret_val = ADBG_EXPECT_TRUE(c,
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004498 test_dh_key_pair(c, s, key, check_keysize));
Pascal Brandc639ac82015-07-02 08:53:34 +02004499 break;
4500
4501 case TEE_TYPE_DSA_KEYPAIR:
4502 ret_val = ADBG_EXPECT_TRUE(c,
4503 test_dsa_key_pair(c, s, key, key_size));
4504 break;
4505
4506 default:
4507 ret_val = false;
4508 break;
4509 }
4510
4511 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4512 ta_crypt_cmd_free_transient_object(c, s, key)))
4513 return false;
4514
4515 return ret_val;
4516}
4517
Jens Wiklandera8c8f872018-12-14 11:41:36 +01004518struct key_types_noparam {
4519 unsigned level;
4520 const char *name;
4521 uint32_t key_type;
4522 uint32_t quanta;
4523 uint32_t min_size;
4524 uint32_t max_size;
4525};
4526
4527static void keygen_noparams(ADBG_Case_t *c, TEEC_Session *session,
4528 const struct key_types_noparam *key_types,
4529 size_t num_key_types)
Pascal Brandc639ac82015-07-02 08:53:34 +02004530{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01004531 size_t n = 0;
4532 uint32_t key_size = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +02004533
Jens Wiklandera8c8f872018-12-14 11:41:36 +01004534 for (n = 0; n < num_key_types; n++) {
Pascal Brandc639ac82015-07-02 08:53:34 +02004535 uint32_t min_size = key_types[n].min_size;
4536 uint32_t max_size = key_types[n].max_size;
4537 uint32_t quanta = key_types[n].quanta;
4538
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004539 if (key_types[n].level > level)
4540 continue;
4541
Pascal Brandc639ac82015-07-02 08:53:34 +02004542 Do_ADBG_BeginSubCase(c, "Generate %s key", key_types[n].name);
4543
4544 for (key_size = min_size; key_size <= max_size;
4545 key_size += quanta) {
4546 if (!ADBG_EXPECT_TRUE(c,
4547 generate_and_test_key(c, session, key_types
4548 [n].key_type, 1, key_size, NULL, 0)))
4549 break;
4550 }
4551
4552 Do_ADBG_EndSubCase(c, "Generate %s key", key_types[n].name);
4553 }
4554}
4555
Jens Wiklandera8c8f872018-12-14 11:41:36 +01004556static void xtest_tee_test_4007_symmetric(ADBG_Case_t *c)
Pascal Brandc639ac82015-07-02 08:53:34 +02004557{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01004558 TEEC_Session session = { };
4559 uint32_t ret_orig = 0;
Jens Wiklandera8c8f872018-12-14 11:41:36 +01004560 static const struct key_types_noparam key_types[] = {
4561 { 0, "AES", TEE_TYPE_AES, 64, 128,
4562 256 /* valid sizes 128, 192, 256 */ },
4563 { 0, "DES", TEE_TYPE_DES, 56, 56, 56 /* valid size 56 */ },
4564 { 0, "DES3", TEE_TYPE_DES3, 56, 112,
4565 168 /* valid sizes 112, 168 */ },
4566 { 0, "HMAC-MD5", TEE_TYPE_HMAC_MD5, 8, 64, 512 },
4567 { 0, "HMAC-SHA1", TEE_TYPE_HMAC_SHA1, 8, 80, 512 },
4568 { 0, "HMAC-SHA224", TEE_TYPE_HMAC_SHA224, 8, 112, 512 },
4569 { 0, "HMAC-SHA256", TEE_TYPE_HMAC_SHA256, 8, 192, 1024 },
4570 { 0, "HMAC-SHA384", TEE_TYPE_HMAC_SHA384, 8, 256, 1024 },
4571 { 0, "HMAC-SHA512", TEE_TYPE_HMAC_SHA512, 8, 256, 1024 },
4572 { 0, "Generic secret", TEE_TYPE_GENERIC_SECRET, 8, 128, 4096 },
4573 };
4574
4575 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4576 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
4577 &ret_orig)))
4578 return;
4579
4580 keygen_noparams(c, &session, key_types, ARRAY_SIZE(key_types));
4581
4582 TEEC_CloseSession(&session);
4583}
4584ADBG_CASE_DEFINE(regression, 4007_symmetric, xtest_tee_test_4007_symmetric,
4585 "Test TEE Internal API Generate Symmetric key");
4586
4587static void xtest_tee_test_4007_rsa(ADBG_Case_t *c)
4588{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01004589 TEEC_Session session = { };
4590 uint32_t ret_orig = 0;
Jens Wiklandera8c8f872018-12-14 11:41:36 +01004591 static const struct key_types_noparam key_types[] = {
4592 { 0, "RSA-256", TEE_TYPE_RSA_KEYPAIR, 1, 256, 256 },
4593 { 1, "RSA-384", TEE_TYPE_RSA_KEYPAIR, 1, 384, 384 },
4594 { 1, "RSA-512", TEE_TYPE_RSA_KEYPAIR, 1, 512, 512 },
4595 { 1, "RSA-640", TEE_TYPE_RSA_KEYPAIR, 1, 640, 640 },
4596 { 1, "RSA-768", TEE_TYPE_RSA_KEYPAIR, 1, 768, 768 },
4597 { 1, "RSA-896", TEE_TYPE_RSA_KEYPAIR, 1, 896, 896 },
4598 { 1, "RSA-1024", TEE_TYPE_RSA_KEYPAIR, 1, 1024, 1024 },
4599 { 1, "RSA-2048", TEE_TYPE_RSA_KEYPAIR, 1, 2048, 2048 },
4600 { 1, "RSA-3072", TEE_TYPE_RSA_KEYPAIR, 1, 3072, 3072 },
4601 { 1, "RSA-4096", TEE_TYPE_RSA_KEYPAIR, 1, 4096, 4096 },
4602 };
4603
4604 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4605 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
4606 &ret_orig)))
4607 return;
4608
4609 keygen_noparams(c, &session, key_types, ARRAY_SIZE(key_types));
4610
4611 TEEC_CloseSession(&session);
4612}
4613ADBG_CASE_DEFINE(regression, 4007_rsa, xtest_tee_test_4007_rsa,
4614 "Test TEE Internal API Generate RSA key");
4615
4616static void xtest_tee_test_4007_dh(ADBG_Case_t *c)
4617{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01004618 TEEC_Session session = { };
4619 uint32_t ret_orig = 0;
4620 size_t n = 0;
4621 size_t param_count = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +02004622 /*
4623 * Note that the key size parameter is not used when creating the keys
4624 * but specifying these sizes make it possible to test the expected size
4625 * of the private value. This also means that the keysize must match the
4626 * size of p or what is specified in private_bits or the equvivalent
4627 * size of the subprime parameter.
4628 */
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01004629 TEE_Attribute params[4] = { };
Pascal Brandc639ac82015-07-02 08:53:34 +02004630
4631#define XTEST_DH_GK_DATA(vect) \
4632 ARRAY(vect ## _p), \
4633 ARRAY(vect ## _g), \
4634 &vect ## _private_bits, \
4635 0, 0
4636#define XTEST_DH_GK_DATA_SUBPRIME(vect) \
4637 ARRAY(vect ## _p), \
4638 ARRAY(vect ## _g), \
4639 &vect ## _private_bits, \
4640 ARRAY(vect ## _subprime)
4641 static const struct {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004642 unsigned level;
Pascal Brandc639ac82015-07-02 08:53:34 +02004643 uint32_t key_size;
4644 const uint8_t *p;
4645 size_t p_len;
4646 const uint8_t *g;
4647 size_t g_len;
4648 const uint32_t *private_bits;
4649 const uint8_t *subprime;
4650 size_t subprime_len;
4651 } key_types[] = {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004652 { 0, 256, XTEST_DH_GK_DATA(keygen_dh256) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004653 { 0, 320, XTEST_DH_GK_DATA(keygen_dh320) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004654 { 1, 384, XTEST_DH_GK_DATA(keygen_dh384) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004655 { 1, 448, XTEST_DH_GK_DATA(keygen_dh448) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004656 { 1, 512, XTEST_DH_GK_DATA(keygen_dh512) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004657 { 1, 576, XTEST_DH_GK_DATA(keygen_dh576) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004658 { 1, 640, XTEST_DH_GK_DATA(keygen_dh640) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004659 { 1, 704, XTEST_DH_GK_DATA(keygen_dh704) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004660 { 1, 768, XTEST_DH_GK_DATA(keygen_dh768) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004661 { 1, 832, XTEST_DH_GK_DATA(keygen_dh832) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004662 { 1, 896, XTEST_DH_GK_DATA(keygen_dh896) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004663 { 1, 960, XTEST_DH_GK_DATA(keygen_dh960) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004664 { 1, 1024, XTEST_DH_GK_DATA(keygen_dh1024) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004665 { 1, 1088, XTEST_DH_GK_DATA(keygen_dh1088) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004666 { 1, 1152, XTEST_DH_GK_DATA(keygen_dh1152) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004667 { 1, 1216, XTEST_DH_GK_DATA(keygen_dh1216) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004668 { 1, 1280, XTEST_DH_GK_DATA(keygen_dh1280) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004669 { 1, 1344, XTEST_DH_GK_DATA(keygen_dh1344) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004670 { 1, 1408, XTEST_DH_GK_DATA(keygen_dh1408) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004671 { 1, 1472, XTEST_DH_GK_DATA(keygen_dh1472) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004672 { 1, 1536, XTEST_DH_GK_DATA(keygen_dh1536) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004673 { 1, 1600, XTEST_DH_GK_DATA(keygen_dh1600) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004674 { 1, 1664, XTEST_DH_GK_DATA(keygen_dh1664) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004675 { 1, 1728, XTEST_DH_GK_DATA(keygen_dh1728) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004676 { 1, 1792, XTEST_DH_GK_DATA(keygen_dh1792) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004677 { 1, 1856, XTEST_DH_GK_DATA(keygen_dh1856) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004678 { 1, 1920, XTEST_DH_GK_DATA(keygen_dh1920) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004679 { 1, 1984, XTEST_DH_GK_DATA(keygen_dh1984) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004680 { 1, 2048, XTEST_DH_GK_DATA(keygen_dh2048) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004681 { 1, 2048, XTEST_DH_GK_DATA_SUBPRIME(keygen_dh2048_subprime) }
Pascal Brandc639ac82015-07-02 08:53:34 +02004682 };
4683
Jens Wiklandera8c8f872018-12-14 11:41:36 +01004684 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4685 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
4686 &ret_orig)))
4687 return;
Pascal Brandc639ac82015-07-02 08:53:34 +02004688
4689 for (n = 0; n < ARRAY_SIZE(key_types); n++) {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004690 if (key_types[n].level > level)
4691 continue;
4692
Pascal Brandc639ac82015-07-02 08:53:34 +02004693 Do_ADBG_BeginSubCase(c,
4694 "Generate DH key %d bits - Private bits = %d",
4695 key_types[n].key_size,
4696 *key_types[n].private_bits);
4697 param_count = 0;
4698
4699 xtest_add_attr(&param_count, params,
4700 TEE_ATTR_DH_PRIME,
4701 key_types[n].p, key_types[n].p_len);
4702
4703 xtest_add_attr(&param_count, params, TEE_ATTR_DH_BASE,
4704 key_types[n].g, key_types[n].g_len);
4705
4706 if (key_types[n].private_bits != 0) {
4707 params[param_count].attributeID = TEE_ATTR_DH_X_BITS;
4708
4709 params[param_count].content.value.a =
4710 *key_types[n].private_bits;
4711
4712 params[param_count].content.value.b = 0;
4713 param_count++;
4714 }
4715
4716 if (key_types[n].subprime != 0) {
4717 xtest_add_attr(&param_count, params,
4718 TEE_ATTR_DH_SUBPRIME,
4719 key_types[n].subprime,
4720 key_types[n].subprime_len);
4721 }
4722
4723 if (!ADBG_EXPECT_TRUE(c,
Jens Wiklandera8c8f872018-12-14 11:41:36 +01004724 generate_and_test_key(c, &session, TEE_TYPE_DH_KEYPAIR,
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004725 *key_types[n].private_bits,
Pascal Brandc639ac82015-07-02 08:53:34 +02004726 key_types[n]. key_size, params, param_count)))
4727 break;
4728
4729 Do_ADBG_EndSubCase(c,
4730 "Generate DH key %d bits - Private bits = %d",
4731 key_types[n].key_size,
4732 *key_types[n].private_bits);
4733 }
Pascal Brandc639ac82015-07-02 08:53:34 +02004734
Jens Wiklandera8c8f872018-12-14 11:41:36 +01004735 TEEC_CloseSession(&session);
4736}
4737ADBG_CASE_DEFINE(regression, 4007_dh, xtest_tee_test_4007_dh,
4738 "Test TEE Internal API Generate DH key");
4739
4740static void xtest_tee_test_4007_dsa(ADBG_Case_t *c)
Pascal Brandc639ac82015-07-02 08:53:34 +02004741{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01004742 TEEC_Session session = { };
4743 uint32_t ret_orig = 0;
4744 size_t n = 0;
4745 size_t param_count = 0;
4746 TEE_Attribute params[4] = { };
Pascal Brandc639ac82015-07-02 08:53:34 +02004747
4748#define XTEST_DSA_GK_DATA(vect) \
4749 ARRAY(vect ## _p), \
4750 ARRAY(vect ## _g), \
4751 ARRAY(vect ## _q)
4752 static const struct {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004753 unsigned level;
Pascal Brandc639ac82015-07-02 08:53:34 +02004754 uint32_t key_size;
4755 const uint8_t *prime;
4756 size_t prime_len;
4757 const uint8_t *base;
4758 size_t base_len;
4759 const uint8_t *sub_prime;
4760 size_t sub_prime_len;
4761 } key_types[] = {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004762 { 1, 1024, XTEST_DSA_GK_DATA(keygen_dsa_test1) },
4763 { 0, 512, XTEST_DSA_GK_DATA(keygen_dsa512) },
4764 { 1, 576, XTEST_DSA_GK_DATA(keygen_dsa576) },
4765 { 1, 640, XTEST_DSA_GK_DATA(keygen_dsa640) },
4766 { 1, 704, XTEST_DSA_GK_DATA(keygen_dsa704) },
4767 { 1, 768, XTEST_DSA_GK_DATA(keygen_dsa768) },
4768 { 1, 832, XTEST_DSA_GK_DATA(keygen_dsa832) },
4769 { 1, 896, XTEST_DSA_GK_DATA(keygen_dsa896) },
4770 { 1, 960, XTEST_DSA_GK_DATA(keygen_dsa960) },
4771 { 1, 1024, XTEST_DSA_GK_DATA(keygen_dsa1024) },
Pascal Brandc639ac82015-07-02 08:53:34 +02004772 };
4773
Jens Wiklandera8c8f872018-12-14 11:41:36 +01004774 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4775 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
4776 &ret_orig)))
4777 return;
4778
Pascal Brandc639ac82015-07-02 08:53:34 +02004779 for (n = 0; n < ARRAY_SIZE(key_types); n++) {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004780 if (key_types[n].level > level)
4781 continue;
4782
Pascal Brandc639ac82015-07-02 08:53:34 +02004783 Do_ADBG_BeginSubCase(c, "Generate DSA key %d bits",
4784 key_types[n].key_size);
4785 param_count = 0;
4786
4787
4788 xtest_add_attr(&param_count, params, TEE_ATTR_DSA_PRIME,
4789 key_types[n].prime, key_types[n].prime_len);
4790
4791 xtest_add_attr(&param_count, params, TEE_ATTR_DSA_SUBPRIME,
4792 key_types[n].sub_prime,
4793 key_types[n].sub_prime_len);
4794
4795 xtest_add_attr(&param_count, params, TEE_ATTR_DSA_BASE,
4796 key_types[n].base, key_types[n].base_len);
4797
4798 if (!ADBG_EXPECT_TRUE(c,
Jens Wiklandera8c8f872018-12-14 11:41:36 +01004799 generate_and_test_key(c, &session, TEE_TYPE_DSA_KEYPAIR,
Pascal Brandc639ac82015-07-02 08:53:34 +02004800 1, key_types[n]. key_size, params,
4801 param_count)))
4802 break;
4803
4804 Do_ADBG_EndSubCase(c, "Generate DSA key %d bits",
4805 key_types[n].key_size);
4806 }
Pascal Brandc639ac82015-07-02 08:53:34 +02004807
Jens Wiklandera8c8f872018-12-14 11:41:36 +01004808 TEEC_CloseSession(&session);
4809}
4810ADBG_CASE_DEFINE(regression, 4007_dsa, xtest_tee_test_4007_dsa,
4811 "Test TEE Internal API Generate DSA key");
4812
4813static void xtest_tee_test_4007_ecc(ADBG_Case_t *c)
Pascal Brande61133f2015-07-08 15:38:37 +02004814{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01004815 TEEC_Session session = { };
4816 uint32_t ret_orig = 0;
4817 size_t n = 0;
4818 size_t param_count = 0;
4819 TEE_Attribute params[4] = { };
Pascal Brande61133f2015-07-08 15:38:37 +02004820
4821 static const struct {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004822 unsigned level;
Pascal Brande61133f2015-07-08 15:38:37 +02004823 const char *name;
4824 uint32_t algo;
4825 uint32_t curve;
4826 uint32_t key_size;
4827 } key_types[] = {
4828 /* ECDSA */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004829 { 0, "ECDSA-192", TEE_TYPE_ECDSA_KEYPAIR, TEE_ECC_CURVE_NIST_P192,
4830 192 },
4831 { 1, "ECDSA-224", TEE_TYPE_ECDSA_KEYPAIR, TEE_ECC_CURVE_NIST_P224,
4832 224 },
4833 { 1, "ECDSA-256", TEE_TYPE_ECDSA_KEYPAIR, TEE_ECC_CURVE_NIST_P256,
4834 256 },
4835 { 1, "ECDSA-384", TEE_TYPE_ECDSA_KEYPAIR, TEE_ECC_CURVE_NIST_P384,
4836 384 },
4837 { 1, "ECDSA-521", TEE_TYPE_ECDSA_KEYPAIR, TEE_ECC_CURVE_NIST_P521,
4838 521 },
Pascal Brande61133f2015-07-08 15:38:37 +02004839
4840 /* ECDH */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004841 { 0, "ECDH-192", TEE_TYPE_ECDH_KEYPAIR, TEE_ECC_CURVE_NIST_P192,
4842 192 },
4843 { 1, "ECDH-224", TEE_TYPE_ECDH_KEYPAIR, TEE_ECC_CURVE_NIST_P224,
4844 224 },
4845 { 1, "ECDH-256", TEE_TYPE_ECDH_KEYPAIR, TEE_ECC_CURVE_NIST_P256,
4846 256 },
4847 { 1, "ECDH-384", TEE_TYPE_ECDH_KEYPAIR, TEE_ECC_CURVE_NIST_P384,
4848 384 },
4849 { 1, "ECDH-521", TEE_TYPE_ECDH_KEYPAIR, TEE_ECC_CURVE_NIST_P521,
4850 521 },
Pascal Brande61133f2015-07-08 15:38:37 +02004851 };
4852
Jens Wiklandera8c8f872018-12-14 11:41:36 +01004853 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4854 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
4855 &ret_orig)))
4856 return;
4857
Pascal Brande61133f2015-07-08 15:38:37 +02004858 for (n = 0; n < ARRAY_SIZE(key_types); n++) {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004859 if (key_types[n].level > level)
4860 continue;
4861
Pascal Brande61133f2015-07-08 15:38:37 +02004862 Do_ADBG_BeginSubCase(c, "Generate %s", key_types[n].name);
4863 param_count = 0;
4864
4865 xtest_add_attr_value(&param_count, params, TEE_ATTR_ECC_CURVE,
4866 key_types[n].curve, 0);
4867
4868 if (!ADBG_EXPECT_TRUE(c,
Jens Wiklandera8c8f872018-12-14 11:41:36 +01004869 generate_and_test_key(c, &session, key_types[n].algo,
Pascal Brande61133f2015-07-08 15:38:37 +02004870 0, key_types[n].key_size, params,
4871 param_count)))
4872 break;
4873
4874 Do_ADBG_EndSubCase(c, "Generate %s", key_types[n].name);
4875 }
Pascal Brande61133f2015-07-08 15:38:37 +02004876
Pascal Brandc639ac82015-07-02 08:53:34 +02004877 TEEC_CloseSession(&session);
4878}
Jens Wiklandera8c8f872018-12-14 11:41:36 +01004879ADBG_CASE_DEFINE(regression, 4007_ecc, xtest_tee_test_4007_ecc,
4880 "Test TEE Internal API Generate ECC key");
Pascal Brandc639ac82015-07-02 08:53:34 +02004881
4882static void xtest_tee_test_4008(ADBG_Case_t *c)
4883{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01004884 TEEC_Session session = { };
4885 uint32_t ret_orig = 0;
4886 TEE_OperationHandle op = TEE_HANDLE_NULL;
4887 TEE_ObjectHandle key_handle = TEE_HANDLE_NULL;
4888 TEE_ObjectHandle sv_handle = TEE_HANDLE_NULL;
4889 TEE_Attribute params[4] = { };
Pascal Brandc639ac82015-07-02 08:53:34 +02004890 size_t param_count = 0;
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01004891 uint8_t out[2048] = { };
4892 size_t out_size = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +02004893
4894 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4895 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
4896 &ret_orig)))
4897 return;
4898
4899 Do_ADBG_BeginSubCase(c, "Derive DH key success");
4900
4901 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4902 ta_crypt_cmd_allocate_operation(c, &session, &op,
4903 TEE_ALG_DH_DERIVE_SHARED_SECRET, TEE_MODE_DERIVE,
4904 derive_key_max_keysize)))
4905 goto out;
4906
4907 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4908 ta_crypt_cmd_allocate_transient_object(c, & session,
4909 TEE_TYPE_DH_KEYPAIR, derive_key_max_keysize,
4910 &key_handle)))
4911 goto out;
4912
4913 xtest_add_attr(&param_count, params, TEE_ATTR_DH_PRIME,
4914 ARRAY(derive_key_dh_prime));
4915
4916 xtest_add_attr(&param_count, params, TEE_ATTR_DH_BASE,
4917 ARRAY(derive_key_dh_base));
4918
4919 xtest_add_attr(&param_count, params, TEE_ATTR_DH_PUBLIC_VALUE,
4920 ARRAY(derive_key_dh_public_value));
4921
4922 xtest_add_attr(&param_count, params, TEE_ATTR_DH_PRIVATE_VALUE,
4923 ARRAY(derive_key_dh_private_value));
4924
4925 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4926 ta_crypt_cmd_populate_transient_object(c, &session, key_handle,
4927 params, param_count)))
4928 goto out;
4929
4930 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4931 ta_crypt_cmd_set_operation_key(c, &session, op, key_handle)))
4932 goto out;
4933
4934 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4935 ta_crypt_cmd_free_transient_object(c, & session, key_handle)))
4936 goto out;
4937
4938 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4939 ta_crypt_cmd_allocate_transient_object(c, &session,
4940 TEE_TYPE_GENERIC_SECRET, derive_key_max_keysize,
4941 &sv_handle)))
4942 goto out;
4943
Pascal Brand2b92b642015-07-16 13:29:42 +02004944 /* reuse but reset params and param-count */
Pascal Brandc639ac82015-07-02 08:53:34 +02004945 param_count = 0;
4946
4947 xtest_add_attr(&param_count, params, TEE_ATTR_DH_PUBLIC_VALUE,
4948 ARRAY(derive_key_dh_public_value_2));
4949
4950 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4951 ta_crypt_cmd_derive_key(c, &session, op, sv_handle, params,
4952 param_count)))
4953 goto out;
4954
4955 out_size = sizeof(out);
4956 memset(out, 0, sizeof(out));
4957 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4958 ta_crypt_cmd_get_object_buffer_attribute(c, &session, sv_handle,
4959 TEE_ATTR_SECRET_VALUE, out, &out_size)))
4960 goto out;
4961
4962 if (!ADBG_EXPECT_BUFFER(c, derive_key_dh_shared_secret,
4963 sizeof(derive_key_dh_shared_secret), out,
4964 out_size))
4965 goto out;
4966
4967 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4968 ta_crypt_cmd_free_operation(c, &session, op)))
4969 goto out;
4970
4971 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4972 ta_crypt_cmd_free_transient_object(c, &session, sv_handle)))
4973 goto out;
4974out:
4975 Do_ADBG_EndSubCase(c, "Derive DH key success");
4976 TEEC_CloseSession(&session);
4977}
Jens Wiklander14f48872018-06-29 15:30:13 +02004978ADBG_CASE_DEFINE(regression, 4008, xtest_tee_test_4008,
4979 "Test TEE Internal API Derive key");
Pascal Brand2b92b642015-07-16 13:29:42 +02004980
4981static void xtest_tee_test_4009(ADBG_Case_t *c)
4982{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01004983 TEEC_Session session = { };
4984 uint32_t ret_orig = 0;
4985 TEE_OperationHandle op = TEE_HANDLE_NULL;
4986 TEE_ObjectHandle key_handle = TEE_HANDLE_NULL;
4987 TEE_ObjectHandle sv_handle = TEE_HANDLE_NULL;
4988 TEE_Attribute params[4] = { };
Pascal Brand2b92b642015-07-16 13:29:42 +02004989 size_t param_count = 0;
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01004990 uint8_t out[2048] = { };
4991 size_t out_size = 0;
4992 uint32_t size_bytes = 0;
4993 uint32_t i = 0;
4994 struct derive_key_ecdh_t *pt = NULL;
Pascal Brand2b92b642015-07-16 13:29:42 +02004995
4996 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4997 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
4998 &ret_orig)))
4999 return;
5000
5001 for (i = 0; i < ARRAY_SIZE(derive_key_ecdh); i++) {
5002 pt = &derive_key_ecdh[i];
5003
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02005004 if (pt->level > level)
5005 continue;
5006
Pascal Brand2b92b642015-07-16 13:29:42 +02005007 Do_ADBG_BeginSubCase(c, "Derive ECDH key - algo = 0x%x",
5008 pt->algo);
5009 size_bytes = (pt->keysize + 7) / 8;
5010 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5011 ta_crypt_cmd_allocate_operation(c, &session, &op,
5012 pt->algo,
5013 TEE_MODE_DERIVE, pt->keysize)))
5014 goto out;
5015
5016 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5017 ta_crypt_cmd_allocate_transient_object(c, & session,
5018 TEE_TYPE_ECDH_KEYPAIR, pt->keysize,
5019 &key_handle)))
5020 goto out;
5021
5022 param_count = 0;
5023 xtest_add_attr_value(&param_count, params,
5024 TEE_ATTR_ECC_CURVE, pt->curve, 0);
5025 xtest_add_attr(&param_count, params,
5026 TEE_ATTR_ECC_PRIVATE_VALUE,
5027 pt->private, size_bytes);
5028 /*
Cedric Auger719047c2019-09-11 12:08:14 +02005029 * The public value is not used, but we should provide a valid
5030 * one to avoid rejection in case TEE_PopulateTransientObject()
5031 * checks for key validity.
Pascal Brand2b92b642015-07-16 13:29:42 +02005032 */
5033 xtest_add_attr(&param_count, params,
Cedric Auger719047c2019-09-11 12:08:14 +02005034 TEE_ATTR_ECC_PUBLIC_VALUE_X,
5035 pt->public_x, size_bytes);
Pascal Brand2b92b642015-07-16 13:29:42 +02005036 xtest_add_attr(&param_count, params,
Cedric Auger719047c2019-09-11 12:08:14 +02005037 TEE_ATTR_ECC_PUBLIC_VALUE_Y,
5038 pt->public_y, size_bytes);
Pascal Brand2b92b642015-07-16 13:29:42 +02005039
5040 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5041 ta_crypt_cmd_populate_transient_object(c,
5042 &session,
5043 key_handle, params, param_count)))
5044 goto out;
5045
5046 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5047 ta_crypt_cmd_set_operation_key(c, &session, op,
5048 key_handle)))
5049 goto out;
5050
5051 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5052 ta_crypt_cmd_free_transient_object(c, & session,
5053 key_handle)))
5054 goto out;
5055
5056 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5057 ta_crypt_cmd_allocate_transient_object(c, &session,
5058 TEE_TYPE_GENERIC_SECRET, size_bytes * 8,
5059 &sv_handle)))
5060 goto out;
5061
5062 /* reuse but reset params and param-count */
5063 param_count = 0;
5064
5065 xtest_add_attr(&param_count, params,
5066 TEE_ATTR_ECC_PUBLIC_VALUE_X,
5067 pt->public_x, size_bytes);
5068 xtest_add_attr(&param_count, params,
5069 TEE_ATTR_ECC_PUBLIC_VALUE_Y,
5070 pt->public_y, size_bytes);
5071
5072 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5073 ta_crypt_cmd_derive_key(c, &session, op, sv_handle,
5074 params, param_count)))
5075 goto out;
5076
5077 out_size = sizeof(out);
5078 memset(out, 0, sizeof(out));
5079 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5080 ta_crypt_cmd_get_object_buffer_attribute(c, &session,
5081 sv_handle,
5082 TEE_ATTR_SECRET_VALUE, out, &out_size)))
5083 goto out;
5084
5085 if (!ADBG_EXPECT_BUFFER(c, pt->out, size_bytes,
5086 out, out_size))
5087 goto out;
5088
5089 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5090 ta_crypt_cmd_free_operation(c, &session, op)))
5091 goto out;
5092
5093 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5094 ta_crypt_cmd_free_transient_object(c, &session,
5095 sv_handle)))
5096 goto out;
5097
5098 Do_ADBG_EndSubCase(c, "Derive ECDH key - algo = 0x%x",
5099 pt->algo);
5100 }
5101
5102 goto noerror;
5103
5104out:
5105 Do_ADBG_EndSubCase(c, "Derive ECDH key - algo = 0x%x", pt->algo);
5106
5107noerror:
5108 TEEC_CloseSession(&session);
5109}
Jens Wiklander14f48872018-06-29 15:30:13 +02005110ADBG_CASE_DEFINE(regression, 4009, xtest_tee_test_4009,
5111 "Test TEE Internal API Derive key ECDH");
Jens Wiklander70a0b2c2016-05-18 08:39:35 +02005112
5113static void xtest_tee_test_4010(ADBG_Case_t *c)
5114{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01005115 TEEC_Session session = { };
5116 uint32_t ret_orig = 0;
5117 TEE_ObjectHandle o = TEE_HANDLE_NULL;
Jens Wiklander70a0b2c2016-05-18 08:39:35 +02005118 static const uint8_t large_key[1024] = { 1, 2, 3, 4, 5, 6 };
5119 static const TEE_Attribute attr = {
5120 .attributeID = TEE_ATTR_SECRET_VALUE,
5121 .content.ref.buffer = (void *)large_key,
5122 .content.ref.length = sizeof(large_key),
5123 };
5124
5125 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5126 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
5127 &ret_orig)))
5128 return;
5129
5130 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5131 ta_crypt_cmd_allocate_transient_object(c, &session,
5132 TEE_TYPE_HMAC_SHA256, 1024, &o)))
5133 goto out;
5134
5135 ADBG_EXPECT_TEEC_RESULT(c, TEEC_ERROR_TARGET_DEAD,
5136 ta_crypt_cmd_populate_transient_object(c, &session, o,
5137 &attr, 1));
5138
5139out:
5140 TEEC_CloseSession(&session);
5141}
Jens Wiklander14f48872018-06-29 15:30:13 +02005142ADBG_CASE_DEFINE(regression, 4010, xtest_tee_test_4010,
5143 "Test TEE Internal API create transient object (negative)");
Jens Wiklanderb58916e2016-07-07 15:29:32 +02005144
5145static void xtest_tee_test_4011(ADBG_Case_t *c)
5146{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01005147 TEEC_Session s = { };
Jens Wiklanderb58916e2016-07-07 15:29:32 +02005148 size_t key_size = 512;
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01005149 TEE_ObjectHandle key = TEE_HANDLE_NULL;
5150 TEE_OperationHandle ops = TEE_HANDLE_NULL;
5151 TEE_OperationHandle opv = TEE_HANDLE_NULL;
5152 TEE_OperationHandle ope = TEE_HANDLE_NULL;
5153 TEE_OperationHandle opd = TEE_HANDLE_NULL;
5154 uint32_t ret_orig = 0;
5155 uint8_t in[TEE_SHA1_HASH_SIZE] = { };
5156 uint8_t out[1024] = { };
5157 uint8_t tmp[1024] = { };
5158 size_t out_size = 0;
5159 size_t tmp_size = 0;
5160 size_t n = 0;
5161 size_t m = 0;
Jens Wiklanderb58916e2016-07-07 15:29:32 +02005162 size_t i = 0;
5163
5164 /* Setup session, initialize message to sign, create a keypair */
5165 if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&s,
5166 &crypt_user_ta_uuid, NULL, &ret_orig)))
5167 return;
5168 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_random_number_generate(c,
5169 &s, in, sizeof(in))))
5170 goto out;
5171 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_transient_object(
5172 c, &s, TEE_TYPE_RSA_KEYPAIR, key_size, &key)))
5173 goto out;
5174 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_generate_key(c, &s,
5175 key, key_size, NULL, 0)))
5176 goto out;
5177
5178 /* Allocate operations for sign, verify, encrypt and decrypt */
5179 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, &s,
5180 &ops, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
5181 key_size)))
5182 goto out;
5183 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, &s,
5184 &opv, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
5185 key_size)))
5186 goto out;
5187 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, &s,
5188 &ope, TEE_ALG_RSA_NOPAD, TEE_MODE_ENCRYPT, key_size)))
5189 goto out;
5190 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, &s,
5191 &opd, TEE_ALG_RSA_NOPAD, TEE_MODE_DECRYPT, key_size)))
5192 goto out;
5193
5194 /* Assign the keypair to all operations */
5195 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5196 ta_crypt_cmd_set_operation_key(c, &s, ops, key)))
5197 goto out;
5198 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5199 ta_crypt_cmd_set_operation_key(c, &s, opv, key)))
5200 goto out;
5201 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5202 ta_crypt_cmd_set_operation_key(c, &s, ope, key)))
5203 goto out;
5204 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5205 ta_crypt_cmd_set_operation_key(c, &s, opd, key)))
5206 goto out;
5207
5208 /*
5209 * The core of the test case is inspired by the one in libtomcrypt:
5210 * https://github.com/libtom/libtomcrypt/blob/6ad52252688bb34f90b5e79da4830a927e87b81f/testprof/rsa_test.c#L398
5211 *
5212 * Testcase for Bleichenbacher attack
5213 *
5214 * (1) Create a valid signature
5215 * (2) Check that it can be verified
5216 * (3) Transform the package to fetch plain text (using the encrypt
5217 * operation in GP TEE Internal API)
5218 * (4) Forge the structure of PKCS#1-EMSA encoded data
5219 * (4.1) Search for start and end of the padding string
5220 * (4.2) Move the signature to the front of the padding string
5221 * (4.3) Zero the message until the end
5222 * (5) Transform the package back (using the decrypt operation in
5223 * GP TEE Internal API)
5224 * (6) The result should not be valid if the implementation is robust.
5225 */
5226
5227
5228 for (i = 0; i < 9; i++) {
5229 Do_ADBG_Log("Iteration %zu", i);
5230
5231 /* 1 */
5232 out_size = sizeof(out);
5233 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5234 ta_crypt_cmd_asymmetric_sign(c, &s, ops, NULL, 0,
5235 in, sizeof(in), out, &out_size)))
5236 goto out;
5237
5238 /* 2 */
5239 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5240 ta_crypt_cmd_asymmetric_verify(c, &s, opv, NULL, 0,
5241 in, sizeof(in), out, out_size)))
5242 goto out;
5243
5244 /* 3 */
5245 tmp_size = sizeof(tmp);
5246 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5247 ta_crypt_cmd_asymmetric_encrypt(c, &s, ope, NULL, 0,
5248 out, out_size, tmp, &tmp_size)))
5249 goto out;
5250
Etienne Carriere0953bf02018-12-21 15:36:25 +01005251 if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, tmp_size, <=, sizeof(tmp)))
5252 goto out;
5253
Jens Wiklanderb58916e2016-07-07 15:29:32 +02005254 /* 4.1 */
Etienne Carriere0953bf02018-12-21 15:36:25 +01005255 for (n = 0; n < tmp_size - i; n++)
Jens Wiklanderb58916e2016-07-07 15:29:32 +02005256 if (tmp[n] == 0xff)
5257 break;
Etienne Carriere0953bf02018-12-21 15:36:25 +01005258
5259 /* Shall find at least a padding start before buffer end */
5260 if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, n, <, tmp_size - i - 1))
5261 goto out;
5262
Jens Wiklanderb58916e2016-07-07 15:29:32 +02005263 for (m = n + 1; m < tmp_size; m++)
5264 if (tmp[m] != 0xff)
5265 break;
Etienne Carriere0953bf02018-12-21 15:36:25 +01005266
Jens Wiklanderb58916e2016-07-07 15:29:32 +02005267 /* 4.2 */
5268 memmove(tmp + n + i, tmp + m, tmp_size - m);
Etienne Carriere0953bf02018-12-21 15:36:25 +01005269
Jens Wiklanderb58916e2016-07-07 15:29:32 +02005270 /* 4.3 */
Etienne Carriere0953bf02018-12-21 15:36:25 +01005271 n = n + i + tmp_size - m;
5272 memset(tmp + n, 0, tmp_size - n);
Jens Wiklanderb58916e2016-07-07 15:29:32 +02005273
5274 /* 5 */
5275 out_size = sizeof(out);
5276 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5277 ta_crypt_cmd_asymmetric_decrypt(c, &s, opd, NULL, 0,
5278 tmp, tmp_size, out, &out_size)))
5279 goto out;
5280
5281 /* 6 */
5282 if (!ADBG_EXPECT_TEEC_RESULT(c, TEE_ERROR_SIGNATURE_INVALID,
5283 ta_crypt_cmd_asymmetric_verify(c, &s, opv, NULL, 0,
5284 in, sizeof(in), out, out_size)))
5285 goto out;
5286 }
5287
5288out:
5289 TEEC_CloseSession(&s);
5290}
Jens Wiklander14f48872018-06-29 15:30:13 +02005291ADBG_CASE_DEFINE(regression, 4011, xtest_tee_test_4011,
5292 "Test TEE Internal API Bleichenbacher attack (negative)");
Igor Opaniuk7ddaa782018-05-25 15:14:05 +03005293
5294#ifdef CFG_SYSTEM_PTA
5295static void xtest_tee_test_4012(ADBG_Case_t *c)
5296{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01005297 TEEC_Session session = { };
5298 uint32_t ret_orig = 0;
Igor Opaniuk7ddaa782018-05-25 15:14:05 +03005299 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
5300 /* Fortuna PRNG requires seed <= 32 bytes */
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01005301 uint8_t pool_input[32] = { };
5302 time_t t = 0;
5303 struct tm tm_local = { };
Igor Opaniuk7ddaa782018-05-25 15:14:05 +03005304
5305 t = time(NULL);
5306 tm_local = *localtime(&t);
5307
5308 memcpy((void *)pool_input, (void *)&tm_local,
5309 sizeof(pool_input) < sizeof(tm_local) ?
5310 sizeof(pool_input) : sizeof(tm_local));
5311
5312
5313 op.params[0].tmpref.buffer = pool_input;
5314 op.params[0].tmpref.size = sizeof(pool_input);
5315 op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT,
5316 TEEC_NONE,
5317 TEEC_NONE,
5318 TEEC_NONE);
5319 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5320 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
5321 &ret_orig)))
5322 return;
5323
5324 (void)ADBG_EXPECT_TEEC_SUCCESS(c,
5325 TEEC_InvokeCommand(&session,
5326 TA_CRYPT_CMD_SEED_RNG_POOL,
5327 &op,
5328 &ret_orig));
5329 TEEC_CloseSession(&session);
5330}
Jens Wiklander14f48872018-06-29 15:30:13 +02005331ADBG_CASE_DEFINE(regression, 4012, xtest_tee_test_4012,
5332 "Test seeding RNG entropy");
Joakim Bech83a30ca2019-05-29 11:22:27 +02005333
5334static void xtest_tee_test_4013(ADBG_Case_t *c)
5335{
5336 TEEC_Session session = { };
5337 uint32_t ret_orig = 0;
5338 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
5339 uint8_t key[32] = { };
5340 uint8_t extra_data[32] = { };
5341
5342 op.paramTypes = TEEC_PARAM_TYPES(TEEC_NONE,
5343 TEEC_NONE,
5344 TEEC_NONE,
5345 TEEC_NONE);
5346 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5347 xtest_teec_open_session(&session, &crypt_user_ta_uuid,
5348 NULL, &ret_orig)))
5349 return;
5350
5351 (void)ADBG_EXPECT_TEEC_SUCCESS(c,
5352 TEEC_InvokeCommand(&session,
5353 TA_CRYPT_CMD_DERIVE_TA_UNIQUE_KEY,
5354 &op,
5355 &ret_orig));
5356
5357 /* Negative test using non-secure memory */
5358 memset(&op, 0, sizeof(op));
5359 op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT,
5360 TEEC_MEMREF_TEMP_OUTPUT,
5361 TEEC_NONE,
5362 TEEC_NONE);
5363
5364 op.params[0].tmpref.buffer = extra_data;
5365 op.params[0].tmpref.size = sizeof(extra_data);
5366 op.params[1].tmpref.buffer = key;
5367 op.params[1].tmpref.size = sizeof(key);
5368 (void)ADBG_EXPECT_TEEC_RESULT(c,
5369 TEEC_ERROR_SECURITY,
5370 TEEC_InvokeCommand(&session,
5371 TA_CRYPT_CMD_DERIVE_TA_UNIQUE_KEY_SHM,
5372 &op,
5373 &ret_orig));
5374
5375 TEEC_CloseSession(&session);
5376}
5377ADBG_CASE_DEFINE(regression, 4013, xtest_tee_test_4013,
5378 "Test generation of device unique TA keys");
Jens Wiklander14f48872018-06-29 15:30:13 +02005379#endif /*CFG_SYSTEM_PTA*/