blob: 1f06361318c8558dfe87e56823eb1847973e0a4c [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
Jerome Forissier3ed850a2019-12-13 10:58:23 +0100895/*
896 * SM3
897 * https://tools.ietf.org/html/draft-sca-cfrg-sm3-02
898 * Appendic A.1
899 */
900static const uint8_t hash_data_sm3_a1_in[3] = "abc";
901
902static const uint8_t hash_data_sm3_a1_out[] = {
903 0x66, 0xc7, 0xf0, 0xf4, 0x62, 0xee, 0xed, 0xd9,
904 0xd1, 0xf2, 0xd4, 0x6b, 0xdc, 0x10, 0xe4, 0xe2,
905 0x41, 0x67, 0xc4, 0x87, 0x5c, 0xf2, 0xf7, 0xa2,
906 0x29, 0x7d, 0xa0, 0x2b, 0x8f, 0x4b, 0xa8, 0xe0
907};
908
909/*
910 * SM3
911 * https://tools.ietf.org/html/draft-sca-cfrg-sm3-02
912 * Appendic A.2
913 */
914static const uint8_t hash_data_sm3_a2_in[] = {
915 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64,
916 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64,
917 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64,
918 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64,
919 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64,
920 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64,
921 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64,
922 0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64
923};
924
925static const uint8_t hash_data_sm3_a2_out[] = {
926 0xde, 0xbe, 0x9f, 0xf9, 0x22, 0x75, 0xb8, 0xa1,
927 0x38, 0x60, 0x48, 0x89, 0xc1, 0x8e, 0x5a, 0x4d,
928 0x6f, 0xdb, 0x70, 0xe5, 0x38, 0x7e, 0x57, 0x65,
929 0x29, 0x3d, 0xcb, 0xa3, 0x9c, 0x0c, 0x57, 0x32
930};
931
Pascal Brandc639ac82015-07-02 08:53:34 +0200932struct xtest_hash_case {
933 uint32_t algo;
934 size_t in_incr;
935 const uint8_t *in;
936 size_t in_len;
937 const uint8_t *out;
938 size_t out_len;
939};
940
941#define XTEST_HASH_CASE(algo, in_incr, in, out) \
942 { (algo), (in_incr), (in), ARRAY_SIZE(in), (out), ARRAY_SIZE(out) }
943
944static const struct xtest_hash_case hash_cases[] = {
945 XTEST_HASH_CASE(TEE_ALG_MD5, 6, hash_data_md5_in1,
946 hash_data_md5_out1),
947 XTEST_HASH_CASE(TEE_ALG_SHA1, 3, hash_data_sha1_in1,
948 hash_data_sha1_out1),
949 XTEST_HASH_CASE(TEE_ALG_SHA224, 7, hash_data_sha224_in1,
950 hash_data_sha224_out1),
951 XTEST_HASH_CASE(TEE_ALG_SHA256, 1, hash_data_sha256_in1,
952 hash_data_sha256_out1),
953 XTEST_HASH_CASE(TEE_ALG_SHA256, 1, hash_data_sha256_in2,
954 hash_data_sha256_out2),
955 XTEST_HASH_CASE(TEE_ALG_SHA384, 1, hash_data_sha384_in1,
956 hash_data_sha384_out1),
957 XTEST_HASH_CASE(TEE_ALG_SHA512, 1, hash_data_sha512_in1,
958 hash_data_sha512_out1),
Jerome Forissier3ed850a2019-12-13 10:58:23 +0100959 XTEST_HASH_CASE(TEE_ALG_SM3, 2, hash_data_sm3_a1_in,
960 hash_data_sm3_a1_out),
961 XTEST_HASH_CASE(TEE_ALG_SM3, 19, hash_data_sm3_a2_in,
962 hash_data_sm3_a2_out),
Pascal Brandc639ac82015-07-02 08:53:34 +0200963};
964
965static void xtest_tee_test_4001(ADBG_Case_t *c)
966{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100967 TEEC_Session session = { };
968 uint32_t ret_orig = 0;
969 size_t n = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +0200970
971 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
972 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
973 &ret_orig)))
974 return;
975
976
977 for (n = 0; n < ARRAY_SIZE(hash_cases); n++) {
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100978 TEE_OperationHandle op1 = TEE_HANDLE_NULL;
979 TEE_OperationHandle op2 = TEE_HANDLE_NULL;
980 uint8_t out[64] = { };
981 size_t out_size = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +0200982
983 Do_ADBG_BeginSubCase(c, "Hash case %d algo 0x%x",
984 (int)n, (unsigned int)hash_cases[n].algo);
985
986 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
987 ta_crypt_cmd_allocate_operation(c, &session, &op1,
988 hash_cases[n].algo,
989 TEE_MODE_DIGEST, 0)))
990 goto out;
991
992 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
993 ta_crypt_cmd_allocate_operation(c, &session, &op2,
994 hash_cases[n].algo,
995 TEE_MODE_DIGEST, 0)))
996 goto out;
997
998 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
999 ta_crypt_cmd_digest_update(c, &session, op1,
1000 hash_cases[n].in,
1001 hash_cases[n].in_incr)))
1002 goto out;
1003
1004 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1005 ta_crypt_cmd_copy_operation(c, &session, op2, op1)))
1006 goto out;
1007
1008 out_size = sizeof(out);
1009 memset(out, 0, sizeof(out));
1010 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1011 ta_crypt_cmd_digest_do_final(c, &session, op2,
1012 hash_cases[n].in + hash_cases[n].in_incr,
1013 hash_cases[n].in_len - hash_cases[n].in_incr,
1014 out, &out_size)))
1015 goto out;
1016
1017 (void)ADBG_EXPECT_BUFFER(c, hash_cases[n].out,
1018 hash_cases[n].out_len, out, out_size);
1019
1020 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1021 ta_crypt_cmd_reset_operation(c, &session, op1)))
1022 goto out;
1023
1024 out_size = sizeof(out);
1025 memset(out, 0, sizeof(out));
1026 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1027 ta_crypt_cmd_digest_do_final(c, &session, op1,
1028 hash_cases[n].in,
1029 hash_cases[n].in_len, out,
1030 &out_size)))
1031 goto out;
1032
1033 (void)ADBG_EXPECT_BUFFER(c, hash_cases[n].out,
1034 hash_cases[n].out_len, out, out_size);
1035
Jerome Forissier1e05e262015-07-29 16:09:07 +02001036 /*
1037 * Invoke TEE_DigestDoFinal() a second time to check that state
1038 * was properly reset
1039 */
1040 out_size = sizeof(out);
1041 memset(out, 0, sizeof(out));
1042 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1043 ta_crypt_cmd_digest_do_final(c, &session, op1,
1044 hash_cases[n].in,
1045 hash_cases[n].in_len, out,
1046 &out_size)))
1047 goto out;
1048
1049 (void)ADBG_EXPECT_BUFFER(c, hash_cases[n].out,
1050 hash_cases[n].out_len, out, out_size);
1051
Pascal Brandc639ac82015-07-02 08:53:34 +02001052 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1053 ta_crypt_cmd_free_operation(c, &session, op1)))
1054 goto out;
1055
1056 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1057 ta_crypt_cmd_free_operation(c, &session, op2)))
1058 goto out;
1059
1060 Do_ADBG_EndSubCase(c, NULL);
1061 }
1062
1063out:
1064 TEEC_CloseSession(&session);
1065}
Jens Wiklander14f48872018-06-29 15:30:13 +02001066ADBG_CASE_DEFINE(regression, 4001, xtest_tee_test_4001,
1067 "Test TEE Internal API hash operations");
Pascal Brandc639ac82015-07-02 08:53:34 +02001068
1069static const uint8_t mac_data_md5_key1[10] = {
1070 0x6B, 0x65, 0x79, /* key */
1071};
1072
1073static const uint8_t mac_data_md5_in1[] = {
1074 0x54, 0x68, 0x65, 0x20, 0x71, 0x75, 0x69, 0x63, /* The quic */
1075 0x6B, 0x20, 0x62, 0x72, 0x6F, 0x77, 0x6E, 0x20, /* k brown */
1076 0x66, 0x6F, 0x78, 0x20, 0x6A, 0x75, 0x6D, 0x70, /* fox jump */
1077 0x73, 0x20, 0x6F, 0x76, 0x65, 0x72, 0x20, 0x74, /* s over t */
1078 0x68, 0x65, 0x20, 0x6C, 0x61, 0x7A, 0x79, 0x20, /* he lazy */
1079 0x64, 0x6F, 0x67, /* dog */
1080};
1081
1082static const uint8_t mac_data_md5_out1[] = {
1083 0x80, 0x07, 0x07, 0x13, 0x46, 0x3e, 0x77, 0x49,
1084 0xb9, 0x0c, 0x2d, 0xc2, 0x49, 0x11, 0xe2, 0x75
1085};
1086
1087
1088/* generated with scripts/digest_hmac.pl */
1089static const uint8_t mac_data_sha1_key1[10] = {
1090 0x6B, 0x65, 0x79, /* key */
1091};
1092
1093static const uint8_t mac_data_sha1_in1[] = {
1094 0x54, 0x68, 0x65, 0x20, 0x71, 0x75, 0x69, 0x63, /* The quic */
1095 0x6B, 0x20, 0x62, 0x72, 0x6F, 0x77, 0x6E, 0x20, /* k brown */
1096 0x66, 0x6F, 0x78, 0x20, 0x6A, 0x75, 0x6D, 0x70, /* fox jump */
1097 0x73, 0x20, 0x6F, 0x76, 0x65, 0x72, 0x20, 0x74, /* s over t */
1098 0x68, 0x65, 0x20, 0x6C, 0x61, 0x7A, 0x79, 0x20, /* he lazy */
1099 0x64, 0x6F, 0x67, /* dog */
1100};
1101
1102static const uint8_t mac_data_sha1_out1[] = {
1103 0xDE, 0x7C, 0x9B, 0x85, 0xB8, 0xB7, 0x8A, 0xA6, /* .|...... */
1104 0xBC, 0x8A, 0x7A, 0x36, 0xF7, 0x0A, 0x90, 0x70, /* ..z6...p */
1105 0x1C, 0x9D, 0xB4, 0xD9, /* .... */
1106};
1107
1108static const uint8_t mac_data_sha224_key1[24] = {
1109 0x6B, 0x65, 0x79, /* key */
1110};
1111
1112static const uint8_t mac_data_sha224_in1[] = {
1113 0x54, 0x68, 0x65, 0x20, 0x71, 0x75, 0x69, 0x63, /* The quic */
1114 0x6B, 0x20, 0x62, 0x72, 0x6F, 0x77, 0x6E, 0x20, /* k brown */
1115 0x66, 0x6F, 0x78, 0x20, 0x6A, 0x75, 0x6D, 0x70, /* fox jump */
1116 0x73, 0x20, 0x6F, 0x76, 0x65, 0x72, 0x20, 0x74, /* s over t */
1117 0x68, 0x65, 0x20, 0x6C, 0x61, 0x7A, 0x79, 0x20, /* he lazy */
1118 0x64, 0x6F, 0x67, /* dog */
1119};
1120
1121static const uint8_t mac_data_sha224_out1[] = {
1122 0x88, 0xFF, 0x8B, 0x54, 0x67, 0x5D, 0x39, 0xB8, /* ...Tg]9. */
1123 0xF7, 0x23, 0x22, 0xE6, 0x5F, 0xF9, 0x45, 0xC5, /* .#"._.E. */
1124 0x2D, 0x96, 0x37, 0x99, 0x88, 0xAD, 0xA2, 0x56, /* -.7....V */
1125 0x39, 0x74, 0x7E, 0x69, /* 9t~i */
1126};
1127
1128
1129static const uint8_t mac_data_sha256_key1[24] = {
1130 'Q', 'W', 'E', 'R', 'T', 'Y'
1131};
1132
1133static const uint8_t mac_data_sha256_in1[] = { 'a', 'b', 'c' };
1134
1135static const uint8_t mac_data_sha256_out1[] = {
1136 0xee, 0x2e, 0x5d, 0x9b, 0x51, 0xe2, 0x9c, 0x1d,
1137 0x49, 0xe9, 0xae, 0x6f, 0x0a, 0xcc, 0x15, 0x18,
1138 0xde, 0x1e, 0xa3, 0x88, 0x8e, 0xee, 0x48, 0xbb,
1139 0x82, 0x77, 0xe9, 0x09, 0x74, 0x4b, 0xa2, 0xf2
1140};
1141
1142/* generated with scripts/digest_hmac.pl */
1143static const uint8_t mac_data_sha256_key2[24] = {
1144 0x6B, 0x65, 0x79, /* key */
1145};
1146
1147static const uint8_t mac_data_sha256_in2[] = {
1148 0x54, 0x68, 0x65, 0x20, 0x71, 0x75, 0x69, 0x63, /* The quic */
1149 0x6B, 0x20, 0x62, 0x72, 0x6F, 0x77, 0x6E, 0x20, /* k brown */
1150 0x66, 0x6F, 0x78, 0x20, 0x6A, 0x75, 0x6D, 0x70, /* fox jump */
1151 0x73, 0x20, 0x6F, 0x76, 0x65, 0x72, 0x20, 0x74, /* s over t */
1152 0x68, 0x65, 0x20, 0x6C, 0x61, 0x7A, 0x79, 0x20, /* he lazy */
1153 0x64, 0x6F, 0x67, /* dog */
1154};
1155
1156static const uint8_t mac_data_sha256_out2[] = {
1157 0xF7, 0xBC, 0x83, 0xF4, 0x30, 0x53, 0x84, 0x24, /* ....0S.$ */
1158 0xB1, 0x32, 0x98, 0xE6, 0xAA, 0x6F, 0xB1, 0x43, /* .2...o.C */
1159 0xEF, 0x4D, 0x59, 0xA1, 0x49, 0x46, 0x17, 0x59, /* .MY.IF.Y */
1160 0x97, 0x47, 0x9D, 0xBC, 0x2D, 0x1A, 0x3C, 0xD8, /* .G..-.<. */
1161};
1162
1163static const uint8_t mac_data_sha384_key1[32] = {
1164 0x6B, 0x65, 0x79, /* key */
1165};
1166
1167static const uint8_t mac_data_sha384_in1[] = {
1168 0x54, 0x68, 0x65, 0x20, 0x71, 0x75, 0x69, 0x63, /* The quic */
1169 0x6B, 0x20, 0x62, 0x72, 0x6F, 0x77, 0x6E, 0x20, /* k brown */
1170 0x66, 0x6F, 0x78, 0x20, 0x6A, 0x75, 0x6D, 0x70, /* fox jump */
1171 0x73, 0x20, 0x6F, 0x76, 0x65, 0x72, 0x20, 0x74, /* s over t */
1172 0x68, 0x65, 0x20, 0x6C, 0x61, 0x7A, 0x79, 0x20, /* he lazy */
1173 0x64, 0x6F, 0x67, /* dog */
1174};
1175
1176static const uint8_t mac_data_sha384_out1[] = {
1177 0xD7, 0xF4, 0x72, 0x7E, 0x2C, 0x0B, 0x39, 0xAE, /* ..r~, .9. */
1178 0x0F, 0x1E, 0x40, 0xCC, 0x96, 0xF6, 0x02, 0x42, /* ..@....B */
1179 0xD5, 0xB7, 0x80, 0x18, 0x41, 0xCE, 0xA6, 0xFC, /* ....A... */
1180 0x59, 0x2C, 0x5D, 0x3E, 0x1A, 0xE5, 0x07, 0x00, /* Y, ]>.... */
1181 0x58, 0x2A, 0x96, 0xCF, 0x35, 0xE1, 0xE5, 0x54, /* X...5..T */
1182 0x99, 0x5F, 0xE4, 0xE0, 0x33, 0x81, 0xC2, 0x37, /* ._..3..7 */
1183};
1184
1185static const uint8_t mac_data_sha512_key1[32] = {
1186 0x6B, 0x65, 0x79, /* key */
1187};
1188
1189static const uint8_t mac_data_sha512_in1[] = {
1190 0x54, 0x68, 0x65, 0x20, 0x71, 0x75, 0x69, 0x63, /* The quic */
1191 0x6B, 0x20, 0x62, 0x72, 0x6F, 0x77, 0x6E, 0x20, /* k brown */
1192 0x66, 0x6F, 0x78, 0x20, 0x6A, 0x75, 0x6D, 0x70, /* fox jump */
1193 0x73, 0x20, 0x6F, 0x76, 0x65, 0x72, 0x20, 0x74, /* s over t */
1194 0x68, 0x65, 0x20, 0x6C, 0x61, 0x7A, 0x79, 0x20, /* he lazy */
1195 0x64, 0x6F, 0x67, /* dog */
1196};
1197
1198static const uint8_t mac_data_sha512_out1[] = {
1199 0xB4, 0x2A, 0xF0, 0x90, 0x57, 0xBA, 0xC1, 0xE2, /* ....W... */
1200 0xD4, 0x17, 0x08, 0xE4, 0x8A, 0x90, 0x2E, 0x09, /* ........ */
1201 0xB5, 0xFF, 0x7F, 0x12, 0xAB, 0x42, 0x8A, 0x4F, /* .....B.O */
1202 0xE8, 0x66, 0x53, 0xC7, 0x3D, 0xD2, 0x48, 0xFB, /* .fS.=.H. */
1203 0x82, 0xF9, 0x48, 0xA5, 0x49, 0xF7, 0xB7, 0x91, /* ..H.I... */
1204 0xA5, 0xB4, 0x19, 0x15, 0xEE, 0x4D, 0x1E, 0xC3, /* .....M.. */
1205 0x93, 0x53, 0x57, 0xE4, 0xE2, 0x31, 0x72, 0x50, /* .SW..1rP */
1206 0xD0, 0x37, 0x2A, 0xFA, 0x2E, 0xBE, 0xEB, 0x3A, /* .7.....: */
1207};
1208
1209
1210/* AES-CBC-MAC */
1211static const uint8_t mac_cbc_vect1_key[] = {
1212 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1213 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1214};
1215
1216static const uint8_t mac_cbc_vect1_data[] = {
1217 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x20, 0x62, /* Cipher b */
1218 0x6C, 0x6F, 0x63, 0x6B, 0x20, 0x63, 0x68, 0x61, /* lock cha */
1219 0x69, 0x6E, 0x69, 0x6E, 0x67, 0x20, 0x28, 0x43, /* ining (C */
1220 0x42, 0x43, 0x29, 0x20, 0x69, 0x73, 0x20, 0x61, /* BC) is a */
1221 0x20, 0x63, 0x6F, 0x6D, 0x6D, 0x6F, 0x6E, 0x20, /* common */
1222 0x63, 0x68, 0x61, 0x69, 0x6E, 0x69, 0x6E, 0x67, /* chaining */
1223 0x20, 0x6D, 0x6F, 0x64, 0x65, 0x20, 0x69, 0x6E, /* mode in */
1224 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x74, /* which t */
1225 0x68, 0x65, 0x20, 0x70, 0x72, 0x65, 0x76, 0x69, /* he previ */
1226 0x6F, 0x75, 0x73, 0x20, 0x62, 0x6C, 0x6F, 0x63, /* ous bloc */
1227 0x6B, 0x27, 0x73, 0x20, 0x63, 0x69, 0x70, 0x68, /* k's ciph */
1228 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x20, 0x69, /* ertext i */
1229 0x73, 0x20, 0x78, 0x6F, 0x72, 0x65, 0x64, 0x20, /* s xored */
1230 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, /* with the */
1231 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6E, 0x74, /* current */
1232 0x20, 0x62, 0x6C, 0x6F, 0x63, 0x6B, 0x27, 0x73, /* block's */
1233 0x20, 0x70, 0x6C, 0x61, 0x69, 0x6E, 0x74, 0x65, /* plainte */
1234 0x78, 0x74, 0x20, 0x62, 0x65, 0x66, 0x6F, 0x72, /* xt befor */
1235 0x65, 0x20, 0x65, 0x6E, 0x63, 0x72, 0x79, 0x70, /* e encryp */
1236 0x74, 0x69, 0x6F, 0x6E, 0x2E, 0x2E, 0x2E, 0x2E, /* tion.... */
1237};
1238
1239static const uint8_t mac_cbc_vect1_out[] = {
1240 0xC9, 0x6E, 0x83, 0x7E, 0x35, 0xC8, 0xA7, 0xA0, /* .n.~5... */
1241 0x33, 0xA3, 0xB1, 0x4B, 0x5A, 0x92, 0x51, 0x2E, /* 3..KZ.Q. */
1242};
1243
1244/* DES-CBC-MAC */
1245static const uint8_t mac_cbc_vect2_key[] = {
1246 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1247};
1248
1249#define mac_cbc_vect2_data mac_cbc_vect1_data
1250static const uint8_t mac_cbc_vect2_out[] = {
1251 0xE9, 0x41, 0x46, 0x30, 0x69, 0x32, 0xBD, 0xD6, /* .AF0i2.. */
1252};
1253
1254/* DES3-CBC-MAC */
1255static const uint8_t mac_cbc_vect3_key[] = {
1256 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1257 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1258 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, /* 12345678 */
1259};
1260
1261#define mac_cbc_vect3_data mac_cbc_vect2_data
1262static const uint8_t mac_cbc_vect3_out[] = {
1263 0x1C, 0x17, 0xB7, 0xB5, 0x9F, 0x54, 0x9C, 0x63, /* .....T.c */
1264};
1265
1266/* AES-CBC-MAC PKCS#5 pad*/
1267static const uint8_t mac_cbc_vect4_key[] = {
1268 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1269 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1270 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1271 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1272};
1273
1274#define mac_cbc_vect4_data mac_cbc_vect1_data
1275static const uint8_t mac_cbc_vect4_out[] = {
1276 0x0B, 0x46, 0xC7, 0xA2, 0xE1, 0x5A, 0xE2, 0x23, /* .F...Z.# */
1277 0x83, 0x34, 0x1C, 0x86, 0x53, 0xF8, 0x51, 0x24, /* .4..S.Q$ */
1278};
1279
1280/* DES-CBC-MAC PKCS#5 pad*/
1281static const uint8_t mac_cbc_vect5_key[] = {
1282 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1283};
1284
1285#define mac_cbc_vect5_data mac_cbc_vect1_data
1286static const uint8_t mac_cbc_vect5_out[] = {
1287 0x30, 0x81, 0x4F, 0x42, 0x03, 0x7E, 0xD8, 0xA9, /* 0.OB.~.. */
1288};
1289
1290/* DES3-CBC-MAC PKCS#5 pad*/
1291static const uint8_t mac_cbc_vect6_key[] = {
1292 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1293 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1294 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, /* 12345678 */
1295};
1296
1297#define mac_cbc_vect6_data mac_cbc_vect1_data
1298static const uint8_t mac_cbc_vect6_out[] = {
1299 0x6E, 0x37, 0x6E, 0x14, 0x5E, 0x21, 0xDD, 0xF8, /* n7n.^!.. */
1300};
1301
1302/* AES-CBC-MAC PKCS#5 pad*/
1303#define mac_cbc_vect7_key mac_cbc_vect4_key
1304static const uint8_t mac_cbc_vect7_data[] = {
1305 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x20, 0x62, /* Cipher b */
1306 0x6C, 0x6F, 0x63, 0x6B, 0x20, 0x63, 0x68, 0x61, /* lock cha */
1307 0x69, 0x6E, 0x69, 0x6E, 0x67, 0x20, 0x28, 0x43, /* ining (C */
1308 0x42, 0x43, 0x29, 0x20, 0x69, 0x73, 0x20, 0x61, /* BC) is a */
1309 0x20, 0x63, 0x6F, 0x6D, 0x6D, 0x6F, 0x6E, 0x20, /* common */
1310 0x63, 0x68, 0x61, 0x69, 0x6E, 0x69, 0x6E, 0x67, /* chaining */
1311 0x20, 0x6D, 0x6F, 0x64, 0x65, 0x20, 0x69, 0x6E, /* mode in */
1312 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x74, /* which t */
1313 0x68, 0x65, 0x20, 0x70, 0x72, 0x65, 0x76, 0x69, /* he previ */
1314 0x6F, 0x75, 0x73, 0x20, 0x62, 0x6C, 0x6F, 0x63, /* ous bloc */
1315 0x6B, 0x27, 0x73, 0x20, 0x63, 0x69, 0x70, 0x68, /* k's ciph */
1316 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x20, 0x69, /* ertext i */
1317 0x73, 0x20, 0x78, 0x6F, 0x72, 0x65, 0x64, 0x20, /* s xored */
1318 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, /* with the */
1319 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6E, 0x74, /* current */
1320 0x20, 0x62, 0x6C, 0x6F, 0x63, 0x6B, 0x27, 0x73, /* block's */
1321 0x20, 0x70, 0x6C, 0x61, 0x69, 0x6E, 0x74, 0x65, /* plainte */
1322 0x78, 0x74, 0x20, 0x62, 0x65, 0x66, 0x6F, 0x72, /* xt befor */
1323 0x65, 0x20, 0x65, 0x6E, 0x63, 0x72, 0x79, 0x70, /* e encryp */
1324 0x74, 0x69, 0x6F, 0x6E, 0x2E, /* tion. */
1325};
1326
1327static const uint8_t mac_cbc_vect7_out[] = {
1328 0xFD, 0x89, 0x35, 0xB3, 0x93, 0x7F, 0xBB, 0xA2, /* ..5..... */
1329 0xFB, 0x65, 0x60, 0xC4, 0x0A, 0x62, 0xA0, 0xF9, /* .e`..b.. */
1330};
1331
1332/* DES-CBC-MAC PKCS#5 pad*/
1333#define mac_cbc_vect8_key mac_cbc_vect5_key
1334#define mac_cbc_vect8_data mac_cbc_vect7_data
1335static const uint8_t mac_cbc_vect8_out[] = {
1336 0x02, 0x2A, 0xA8, 0x2E, 0x47, 0xC6, 0xBB, 0x7C, /* ....G..| */
1337};
1338
1339/* DES3-CBC-MAC PKCS#5 pad*/
1340#define mac_cbc_vect9_key mac_cbc_vect6_key
1341#define mac_cbc_vect9_data mac_cbc_vect7_data
1342static const uint8_t mac_cbc_vect9_out[] = {
1343 0xD4, 0xF7, 0x3E, 0x27, 0x78, 0x0E, 0x1C, 0x79, /* ..>'x..y */
1344};
1345
1346/*
Pascal Brand5c3d8092015-07-23 08:20:26 +02001347 * DES3-CBC-MAC, with key size of 112bit
1348 * out obtained with:
1349 * 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
1350 */
1351/* DES3-CBC-MAC PKCS#5 pad*/
1352static const uint8_t mac_cbc_vect10_key[] = {
1353 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1354 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1355};
1356#define mac_cbc_vect10_data mac_cbc_vect1_data
1357static const uint8_t mac_cbc_vect10_out[] = {
1358 0x30, 0x92, 0x60, 0x99, 0x66, 0xac, 0x8c, 0xa6,
1359};
1360
1361
1362/*
Pascal Brandc639ac82015-07-02 08:53:34 +02001363 * AES-CMAC
1364 * Test vectors from
1365 * http://csrc.nist.gov/publications/nistpubs/800-38B/SP_800-38B.pdf
1366 */
1367
1368/* AES-128 */
1369static const uint8_t mac_cmac_vect1_key[] = {
1370 0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6,
1371 0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c
1372};
1373
1374static const uint8_t mac_cmac_vect1_out[] = {
1375 0xbb, 0x1d, 0x69, 0x29, 0xe9, 0x59, 0x37, 0x28,
1376 0x7f, 0xa3, 0x7d, 0x12, 0x9b, 0x75, 0x67, 0x46
1377};
1378
1379#define mac_cmac_vect2_key mac_cmac_vect1_key
1380static const uint8_t mac_cmac_vect2_data[] = {
1381 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
1382 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a
1383};
1384
1385static const uint8_t mac_cmac_vect2_out[] = {
1386 0x07, 0x0a, 0x16, 0xb4, 0x6b, 0x4d, 0x41, 0x44,
1387 0xf7, 0x9b, 0xdd, 0x9d, 0xd0, 0x4a, 0x28, 0x7c
1388};
1389
1390#define mac_cmac_vect3_key mac_cmac_vect1_key
1391static const uint8_t mac_cmac_vect3_data[] = {
1392 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
1393 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a,
1394 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c,
1395 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51,
1396 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11
1397};
1398
1399static const uint8_t mac_cmac_vect3_out[] = {
1400 0xdf, 0xa6, 0x67, 0x47, 0xde, 0x9a, 0xe6, 0x30,
1401 0x30, 0xca, 0x32, 0x61, 0x14, 0x97, 0xc8, 0x27
1402};
1403
1404#define mac_cmac_vect4_key mac_cmac_vect1_key
1405static const uint8_t mac_cmac_vect4_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 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef,
1412 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17,
1413 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10
1414};
1415
1416static const uint8_t mac_cmac_vect4_out[] = {
1417 0x51, 0xf0, 0xbe, 0xbf, 0x7e, 0x3b, 0x9d, 0x92,
1418 0xfc, 0x49, 0x74, 0x17, 0x79, 0x36, 0x3c, 0xfe
1419};
1420
1421/* AES-192 */
1422static const uint8_t mac_cmac_vect5_key[] = {
1423 0x8e, 0x73, 0xb0, 0xf7, 0xda, 0x0e, 0x64, 0x52,
1424 0xc8, 0x10, 0xf3, 0x2b, 0x80, 0x90, 0x79, 0xe5,
1425 0x62, 0xf8, 0xea, 0xd2, 0x52, 0x2c, 0x6b, 0x7b
1426};
1427
1428static const uint8_t mac_cmac_vect5_out[] = {
1429 0xd1, 0x7d, 0xdf, 0x46, 0xad, 0xaa, 0xcd, 0xe5,
1430 0x31, 0xca, 0xc4, 0x83, 0xde, 0x7a, 0x93, 0x67
1431};
1432
1433
1434#define mac_cmac_vect6_key mac_cmac_vect5_key
1435static const uint8_t mac_cmac_vect6_data[] = {
1436 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
1437 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a
1438};
1439
1440static const uint8_t mac_cmac_vect6_out[] = {
1441 0x9e, 0x99, 0xa7, 0xbf, 0x31, 0xe7, 0x10, 0x90,
1442 0x06, 0x62, 0xf6, 0x5e, 0x61, 0x7c, 0x51, 0x84
1443};
1444
1445#define mac_cmac_vect7_key mac_cmac_vect5_key
1446static const uint8_t mac_cmac_vect7_data[] = {
1447 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
1448 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a,
1449 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c,
1450 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51,
1451 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11
1452};
1453
1454static const uint8_t mac_cmac_vect7_out[] = {
1455 0x8a, 0x1d, 0xe5, 0xbe, 0x2e, 0xb3, 0x1a, 0xad,
1456 0x08, 0x9a, 0x82, 0xe6, 0xee, 0x90, 0x8b, 0x0e
1457};
1458
1459#define mac_cmac_vect8_key mac_cmac_vect5_key
1460static const uint8_t mac_cmac_vect8_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 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef,
1467 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17,
1468 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10
1469};
1470
1471static const uint8_t mac_cmac_vect8_out[] = {
1472 0xa1, 0xd5, 0xdf, 0x0e, 0xed, 0x79, 0x0f, 0x79,
1473 0x4d, 0x77, 0x58, 0x96, 0x59, 0xf3, 0x9a, 0x11
1474};
1475
1476/* AES-256 */
1477static const uint8_t mac_cmac_vect9_key[] = {
1478 0x60, 0x3d, 0xeb, 0x10, 0x15, 0xca, 0x71, 0xbe,
1479 0x2b, 0x73, 0xae, 0xf0, 0x85, 0x7d, 0x77, 0x81,
1480 0x1f, 0x35, 0x2c, 0x07, 0x3b, 0x61, 0x08, 0xd7,
1481 0x2d, 0x98, 0x10, 0xa3, 0x09, 0x14, 0xdf, 0xf4
1482};
1483
1484static const uint8_t mac_cmac_vect9_out[] = {
1485 0x02, 0x89, 0x62, 0xf6, 0x1b, 0x7b, 0xf8, 0x9e,
1486 0xfc, 0x6b, 0x55, 0x1f, 0x46, 0x67, 0xd9, 0x83
1487};
1488
1489#define mac_cmac_vect10_key mac_cmac_vect9_key
1490static const uint8_t mac_cmac_vect10_data[] = {
1491 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
1492 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a
1493};
1494
1495static const uint8_t mac_cmac_vect10_out[] = {
1496 0x28, 0xa7, 0x02, 0x3f, 0x45, 0x2e, 0x8f, 0x82,
1497 0xbd, 0x4b, 0xf2, 0x8d, 0x8c, 0x37, 0xc3, 0x5c
1498};
1499
1500#define mac_cmac_vect11_key mac_cmac_vect9_key
1501static const uint8_t mac_cmac_vect11_data[] = {
1502 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
1503 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a,
1504 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c,
1505 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51,
1506 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11
1507};
1508
1509static const uint8_t mac_cmac_vect11_out[] = {
1510 0xaa, 0xf3, 0xd8, 0xf1, 0xde, 0x56, 0x40, 0xc2,
1511 0x32, 0xf5, 0xb1, 0x69, 0xb9, 0xc9, 0x11, 0xe6
1512};
1513
1514#define mac_cmac_vect12_key mac_cmac_vect9_key
1515static const uint8_t mac_cmac_vect12_data[] = {
1516 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
1517 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a,
1518 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c,
1519 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51,
1520 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11,
1521 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef,
1522 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17,
1523 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10
1524};
1525
1526static const uint8_t mac_cmac_vect12_out[] = {
1527 0xe1, 0x99, 0x21, 0x90, 0x54, 0x9f, 0x6e, 0xd5,
1528 0x69, 0x6a, 0x2c, 0x05, 0x6c, 0x31, 0x54, 0x10
1529};
1530
1531struct xtest_mac_case {
1532 uint32_t algo;
1533 uint32_t key_type;
1534 const uint8_t *key;
1535 size_t key_len;
1536 size_t in_incr;
1537 const uint8_t *in;
1538 size_t in_len;
1539 const uint8_t *out;
1540 size_t out_len;
Jerome Forissier3dec7442019-01-30 17:50:05 +01001541 bool multiple_incr;
Pascal Brandc639ac82015-07-02 08:53:34 +02001542};
1543
Jerome Forissier3dec7442019-01-30 17:50:05 +01001544#define XTEST_MAC_CASE_1(algo, key_type, key, in_incr, in, out) \
Pascal Brandc639ac82015-07-02 08:53:34 +02001545 { (algo), (key_type), (key), ARRAY_SIZE(key), \
Jerome Forissier3dec7442019-01-30 17:50:05 +01001546 (in_incr), (in), ARRAY_SIZE(in), (out), ARRAY_SIZE(out), false }
1547
1548#define XTEST_MAC_CASE_MULT(algo, key_type, key, in_incr, in, out) \
1549 { (algo), (key_type), (key), ARRAY_SIZE(key), \
1550 (in_incr), (in), ARRAY_SIZE(in), (out), ARRAY_SIZE(out), true }
1551
1552#define XTEST_MAC_CASE(algo, key_type, key, in_incr, in, out) \
1553 XTEST_MAC_CASE_1((algo), (key_type), (key), (in_incr), (in), (out)), \
1554 XTEST_MAC_CASE_MULT((algo), (key_type), (key), (in_incr), (in), (out))
Pascal Brandc639ac82015-07-02 08:53:34 +02001555
1556#define XTEST_MAC_CBC_CASE(algo, key_type, vect, in_incr) \
1557 XTEST_MAC_CASE((algo), (key_type), \
1558 mac_cbc_ ## vect ## _key, (in_incr), \
1559 mac_cbc_ ## vect ## _data, mac_cbc_ ## vect ## _out)
1560
1561#define XTEST_MAC_CMAC_CASE(vect, in_incr) \
1562 XTEST_MAC_CASE(TEE_ALG_AES_CMAC, TEE_TYPE_AES, \
1563 mac_cmac_ ## vect ## _key, (in_incr), \
1564 mac_cmac_ ## vect ## _data, mac_cmac_ ## vect ## _out)
1565
1566static const struct xtest_mac_case mac_cases[] = {
1567 XTEST_MAC_CASE(TEE_ALG_HMAC_MD5, TEE_TYPE_HMAC_MD5,
1568 mac_data_md5_key1,
1569 4, mac_data_md5_in1, mac_data_md5_out1),
1570 XTEST_MAC_CASE(TEE_ALG_HMAC_SHA1, TEE_TYPE_HMAC_SHA1,
1571 mac_data_sha1_key1,
1572 5, mac_data_sha1_in1, mac_data_sha1_out1),
1573 XTEST_MAC_CASE(TEE_ALG_HMAC_SHA224, TEE_TYPE_HMAC_SHA224,
1574 mac_data_sha224_key1,
1575 8, mac_data_sha224_in1, mac_data_sha224_out1),
1576 XTEST_MAC_CASE(TEE_ALG_HMAC_SHA256, TEE_TYPE_HMAC_SHA256,
1577 mac_data_sha256_key1,
1578 1, mac_data_sha256_in1, mac_data_sha256_out1),
1579 XTEST_MAC_CASE(TEE_ALG_HMAC_SHA256, TEE_TYPE_HMAC_SHA256,
1580 mac_data_sha256_key2,
1581 7, mac_data_sha256_in2, mac_data_sha256_out2),
1582 XTEST_MAC_CASE(TEE_ALG_HMAC_SHA384, TEE_TYPE_HMAC_SHA384,
1583 mac_data_sha384_key1,
1584 11, mac_data_sha384_in1, mac_data_sha384_out1),
1585 XTEST_MAC_CASE(TEE_ALG_HMAC_SHA512, TEE_TYPE_HMAC_SHA512,
1586 mac_data_sha512_key1,
1587 13, mac_data_sha512_in1, mac_data_sha512_out1),
1588
1589 XTEST_MAC_CBC_CASE(TEE_ALG_AES_CBC_MAC_NOPAD, TEE_TYPE_AES, vect1, 14),
1590 XTEST_MAC_CBC_CASE(TEE_ALG_DES_CBC_MAC_NOPAD, TEE_TYPE_DES, vect2, 16),
1591 XTEST_MAC_CBC_CASE(TEE_ALG_DES3_CBC_MAC_NOPAD, TEE_TYPE_DES3, vect3,
1592 17),
1593 XTEST_MAC_CBC_CASE(TEE_ALG_AES_CBC_MAC_PKCS5, TEE_TYPE_AES, vect4, 11),
1594 XTEST_MAC_CBC_CASE(TEE_ALG_DES_CBC_MAC_PKCS5, TEE_TYPE_DES, vect5, 9),
1595 XTEST_MAC_CBC_CASE(TEE_ALG_DES3_CBC_MAC_PKCS5, TEE_TYPE_DES3, vect6, 4),
1596 XTEST_MAC_CBC_CASE(TEE_ALG_AES_CBC_MAC_PKCS5, TEE_TYPE_AES, vect7, 3),
1597 XTEST_MAC_CBC_CASE(TEE_ALG_DES_CBC_MAC_PKCS5, TEE_TYPE_DES, vect8, 23),
1598 XTEST_MAC_CBC_CASE(TEE_ALG_DES3_CBC_MAC_PKCS5, TEE_TYPE_DES3, vect9,
1599 34),
Pascal Brand5c3d8092015-07-23 08:20:26 +02001600 XTEST_MAC_CBC_CASE(TEE_ALG_DES3_CBC_MAC_PKCS5, TEE_TYPE_DES3, vect10, 4),
Pascal Brandc639ac82015-07-02 08:53:34 +02001601
1602 { TEE_ALG_AES_CMAC, TEE_TYPE_AES, mac_cmac_vect1_key,
1603 ARRAY_SIZE(mac_cmac_vect1_key), 0, NULL, 0, mac_cmac_vect1_out,
1604 ARRAY_SIZE(mac_cmac_vect1_out) },
1605 XTEST_MAC_CMAC_CASE(vect2, 9),
1606 XTEST_MAC_CMAC_CASE(vect3, 9),
1607 XTEST_MAC_CMAC_CASE(vect4, 9),
1608 { TEE_ALG_AES_CMAC, TEE_TYPE_AES, mac_cmac_vect5_key,
1609 ARRAY_SIZE(mac_cmac_vect5_key), 0, NULL, 0, mac_cmac_vect5_out,
1610 ARRAY_SIZE(mac_cmac_vect5_out) },
1611 XTEST_MAC_CMAC_CASE(vect6, 9),
1612 XTEST_MAC_CMAC_CASE(vect7, 9),
1613 XTEST_MAC_CMAC_CASE(vect8, 9),
1614 { TEE_ALG_AES_CMAC, TEE_TYPE_AES, mac_cmac_vect9_key,
1615 ARRAY_SIZE(mac_cmac_vect9_key), 0, NULL, 0, mac_cmac_vect9_out,
1616 ARRAY_SIZE(mac_cmac_vect9_out) },
1617 XTEST_MAC_CMAC_CASE(vect10, 9),
1618 XTEST_MAC_CMAC_CASE(vect11, 9),
1619 XTEST_MAC_CMAC_CASE(vect12, 9),
1620};
1621
1622static void xtest_tee_test_4002(ADBG_Case_t *c)
1623{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01001624 TEEC_Session session = { };
1625 TEE_OperationHandle op1 = TEE_HANDLE_NULL;
1626 TEE_OperationHandle op2 = TEE_HANDLE_NULL;
1627 TEE_ObjectHandle key_handle = TEE_HANDLE_NULL;
1628 uint8_t out[64] = { };
1629 size_t out_size = 0;
1630 uint32_t ret_orig = 0;
1631 size_t n = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +02001632
1633 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1634 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
1635 &ret_orig)))
1636 return;
1637
1638 for (n = 0; n < ARRAY_SIZE(mac_cases); n++) {
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01001639 TEE_Attribute key_attr = { };
1640 size_t key_size = 0;
1641 size_t offs = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +02001642
1643 Do_ADBG_BeginSubCase(c, "MAC case %d algo 0x%x",
1644 (int)n, (unsigned int)mac_cases[n].algo);
1645
1646 key_attr.attributeID = TEE_ATTR_SECRET_VALUE;
1647 key_attr.content.ref.buffer = (void *)mac_cases[n].key;
1648 key_attr.content.ref.length = mac_cases[n].key_len;
1649
1650 key_size = key_attr.content.ref.length * 8;
1651 if (mac_cases[n].key_type == TEE_TYPE_DES ||
1652 mac_cases[n].key_type == TEE_TYPE_DES3)
1653 /* Exclude parity in bit size of key */
1654 key_size -= key_size / 8;
1655
1656 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1657 ta_crypt_cmd_allocate_operation(c, &session, &op1,
1658 mac_cases[n].algo, TEE_MODE_MAC, key_size)))
1659 goto out;
1660
1661 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1662 ta_crypt_cmd_allocate_operation(c, &session, &op2,
1663 mac_cases[n].algo, TEE_MODE_MAC, key_size)))
1664 goto out;
1665
1666 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1667 ta_crypt_cmd_allocate_transient_object(c, &session,
1668 mac_cases[n].key_type, key_size, &key_handle)))
1669 goto out;
1670
1671 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1672 ta_crypt_cmd_populate_transient_object(c, &session,
1673 key_handle, &key_attr, 1)))
1674 goto out;
1675
1676 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1677 ta_crypt_cmd_set_operation_key(c, &session, op1,
1678 key_handle)))
1679 goto out;
1680
1681 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1682 ta_crypt_cmd_free_transient_object(c, &session,
1683 key_handle)))
1684 goto out;
1685
1686 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1687 ta_crypt_cmd_mac_init(c, &session, op1, NULL, 0)))
1688 goto out;
1689
Jerome Forissier3dec7442019-01-30 17:50:05 +01001690 offs = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +02001691 if (mac_cases[n].in != NULL) {
Jerome Forissier3dec7442019-01-30 17:50:05 +01001692 while (offs + mac_cases[n].in_incr <
1693 mac_cases[n].in_len) {
1694 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1695 ta_crypt_cmd_mac_update(c, &session,
1696 op1, mac_cases[n].in + offs,
1697 mac_cases[n].in_incr)))
1698 goto out;
1699 offs += mac_cases[n].in_incr;
1700 if (!mac_cases[n].multiple_incr)
1701 break;
1702 }
Pascal Brandc639ac82015-07-02 08:53:34 +02001703 }
1704
1705 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1706 ta_crypt_cmd_copy_operation(c, &session, op2, op1)))
1707 goto out;
1708
1709 out_size = sizeof(out);
1710 memset(out, 0, sizeof(out));
1711 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1712 ta_crypt_cmd_mac_final_compute(c, &session, op2,
Jerome Forissier3dec7442019-01-30 17:50:05 +01001713 mac_cases[n].in + offs,
1714 mac_cases [n].in_len - offs,
Pascal Brandc639ac82015-07-02 08:53:34 +02001715 out, &out_size)))
1716 goto out;
1717
1718 (void)ADBG_EXPECT_BUFFER(c, mac_cases[n].out,
1719 mac_cases[n].out_len, out, out_size);
1720
1721 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1722 ta_crypt_cmd_mac_init(c, &session, op1, NULL, 0)))
1723 goto out;
1724
1725 out_size = sizeof(out);
1726 memset(out, 0, sizeof(out));
1727 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1728 ta_crypt_cmd_mac_final_compute(c, &session, op1,
1729 mac_cases[n].in, mac_cases[n].in_len, out,
1730 &out_size)))
1731 goto out;
1732
1733 (void)ADBG_EXPECT_BUFFER(c, mac_cases[n].out,
1734 mac_cases[n].out_len, out, out_size);
1735
1736 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1737 ta_crypt_cmd_free_operation(c, &session, op1)))
1738 goto out;
1739
1740 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1741 ta_crypt_cmd_free_operation(c, &session, op2)))
1742 goto out;
1743
1744 Do_ADBG_EndSubCase(c, NULL);
1745 }
1746out:
1747 TEEC_CloseSession(&session);
1748}
Jens Wiklander14f48872018-06-29 15:30:13 +02001749ADBG_CASE_DEFINE(regression, 4002, xtest_tee_test_4002,
1750 "Test TEE Internal API MAC operations");
Pascal Brandc639ac82015-07-02 08:53:34 +02001751
Pascal Brandc639ac82015-07-02 08:53:34 +02001752static const uint8_t ciph_data_aes_key1[] = {
1753 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1754 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1755};
1756
Jerome Forissier0780ad42018-06-05 15:02:37 +02001757static const uint8_t ciph_data_aes_key2[] = {
1758 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
1759 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
1760};
1761
Pascal Brandc639ac82015-07-02 08:53:34 +02001762static const uint8_t ciph_data_des_key1[] = {
1763 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37 /* 01234567 */
1764};
1765
1766static const uint8_t ciph_data_des_key2[] = {
1767 0x13, 0x34, 0x57, 0x79, 0x9B, 0xBC, 0xDF, 0xF1
1768};
1769
1770
1771static const uint8_t ciph_data_des3_key1[] = {
1772 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1773 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1774 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, /* 12345678 */
1775};
1776
1777static const uint8_t ciph_data_des3_key2[] = {
1778 0x13, 0x34, 0x57, 0x79, 0x9B, 0xBC, 0xDF, 0xF1,
1779 0x13, 0x34, 0x57, 0x79, 0x9B, 0xBC, 0xDF, 0xF1,
1780 0x13, 0x34, 0x57, 0x79, 0x9B, 0xBC, 0xDF, 0xF1
1781};
1782
1783static const uint8_t ciph_data_des2_key1[] = {
1784 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1785 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1786};
1787
1788static const uint8_t ciph_data_in1[] = {
1789 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, /* 23456789 */
1790 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, /* ABCDEF01 */
1791 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, /* 3456789A */
1792 0x42, 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, 0x32, /* BCDEF012 */
1793 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, /* 456789AB */
1794 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, 0x32, 0x33, /* CDEF0123 */
1795};
1796
1797static const uint8_t ciph_data_in3[] = {
1798 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, /* 23456789 */
1799 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, /* ABCDEF01 */
1800 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, /* 3456789A */
1801 0x42, 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, 0x32, /* BCDEF012 */
1802 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, /* 456789AB */
1803 0x43, 0x44, 0x45, 0x46, 0x30, /* CDEF0 */
1804};
1805
Jerome Forissier45218eb2018-04-11 13:03:26 +02001806static const uint8_t ciph_data_in4[] = {
1807 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, /* 23456789 */
1808 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, /* ABCDEF01 */
1809 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, /* 3456789A */
1810 0x42, 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, 0x32, /* BCDEF012 */
1811 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, /* 456789AB */
1812 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, 0x32, 0x33, /* CDEF0123 */
1813 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1814 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1815};
1816
Jerome Forissier0780ad42018-06-05 15:02:37 +02001817static const uint8_t ciph_data_in5[] = {
1818 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
1819 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
1820 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
1821 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
1822 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
1823 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
1824 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
1825 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
Jerome Forissierbf9009e2018-06-05 18:44:42 +02001826 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
1827 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
Jerome Forissier0780ad42018-06-05 15:02:37 +02001828 0x01, 0x01, 0x01
1829};
1830
Pascal Brandc639ac82015-07-02 08:53:34 +02001831static const uint8_t ciph_data_128_iv1[] = {
1832 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, /* 12345678 */
1833 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x30, /* 9ABCDEF0 */
1834};
1835
Jerome Forissier0780ad42018-06-05 15:02:37 +02001836static const uint8_t ciph_data_128_iv2[] = {
1837 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
1838 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
1839};
1840
Pascal Brandc639ac82015-07-02 08:53:34 +02001841static const uint8_t ciph_data_64_iv1[] = {
1842 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, /* 12345678 */
1843};
1844
1845static const uint8_t ciph_data_in2[] = {
1846 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef
1847};
1848
1849static const uint8_t ciph_data_aes_ecb_nopad_out1[] = {
1850 0xA5, 0xBE, 0x14, 0xD5, 0x01, 0x05, 0x24, 0x48, /* ......$H */
1851 0x58, 0x1A, 0x6B, 0x82, 0xD4, 0x41, 0xD2, 0xB3, /* X.k..A.. */
1852 0xBB, 0xF9, 0xAE, 0x37, 0x94, 0xAC, 0x18, 0x50, /* ...7...P */
1853 0x87, 0x09, 0xCC, 0x3F, 0x43, 0xD2, 0xC2, 0xB7, /* ...?C... */
1854 0xD7, 0x6F, 0x84, 0x07, 0xB4, 0x78, 0xCE, 0x34, /* .o...x.4 */
1855 0x48, 0xC9, 0x16, 0x86, 0x42, 0xB8, 0xFF, 0xCF, /* H...B... */
1856};
1857
1858static const uint8_t ciph_data_aes_cbc_nopad_out1[] = {
1859 0x8D, 0x9F, 0x88, 0xD8, 0xAF, 0x9F, 0xC1, 0x3B, /* .......; */
1860 0x02, 0x15, 0x43, 0x6A, 0x8C, 0x1E, 0x34, 0x5C, /* ..Cj..4\ */
1861 0x83, 0xF4, 0x85, 0x3E, 0x43, 0x0F, 0xE5, 0x5F, /* ...>C.._ */
1862 0x81, 0x4C, 0xC0, 0x28, 0x3F, 0xD9, 0x98, 0x53, /* .L.(?..S */
1863 0xB1, 0x44, 0x51, 0x38, 0x21, 0xAB, 0x10, 0xCE, /* .DQ8!... */
1864 0xC2, 0xEC, 0x65, 0x54, 0xDD, 0x5C, 0xEA, 0xDC, /* ..eT.\.. */
1865};
1866
1867static const uint8_t ciph_data_aes_ctr_out1[] = {
1868 0xD2, 0xDD, 0x11, 0xA8, 0xF7, 0xB0, 0xAE, 0x55, /* .......U */
1869 0xBE, 0x61, 0x7A, 0xE6, 0xA1, 0x6C, 0x79, 0xF4, /* .az..ly. */
1870 0x62, 0x51, 0x7B, 0xE9, 0x7C, 0xA0, 0x31, 0x0C, /* bQ{.|.1. */
1871 0x24, 0x15, 0x70, 0x7F, 0x47, 0x37, 0x69, 0xE0, /* $.p.G7i. */
1872 0x24, 0xC3, 0x29, 0xCD, 0xF2, 0x26, 0x69, 0xFF, /* $.)..&i. */
1873 0x72, 0x0E, 0x3C, 0xD1, 0xA1, 0x2F, 0x5D, 0x33, /* r.<../]3 */
1874};
1875
1876static const uint8_t ciph_data_aes_ctr_out2[] = {
1877 0xD2, 0xDD, 0x11, 0xA8, 0xF7, 0xB0, 0xAE, 0x55, /* .......U */
1878 0xBE, 0x61, 0x7A, 0xE6, 0xA1, 0x6C, 0x79, 0xF4, /* .az..ly. */
1879 0x62, 0x51, 0x7B, 0xE9, 0x7C, 0xA0, 0x31, 0x0C, /* bQ{.|.1. */
1880 0x24, 0x15, 0x70, 0x7F, 0x47, 0x37, 0x69, 0xE0, /* $.p.G7i. */
1881 0x24, 0xC3, 0x29, 0xCD, 0xF2, 0x26, 0x69, 0xFF, /* $.)..&i. */
1882 0x72, 0x0E, 0x3C, 0xD1, 0xA1, /* r.<.. */
1883};
1884
Jerome Forissier45218eb2018-04-11 13:03:26 +02001885static const uint8_t ciph_data_aes_ctr_out4[] = {
1886 0xD2, 0xDD, 0x11, 0xA8, 0xF7, 0xB0, 0xAE, 0x55, /* .......U */
1887 0xBE, 0x61, 0x7A, 0xE6, 0xA1, 0x6C, 0x79, 0xF4, /* .az..ly. */
1888 0x62, 0x51, 0x7B, 0xE9, 0x7C, 0xA0, 0x31, 0x0C, /* bQ{.|.1. */
1889 0x24, 0x15, 0x70, 0x7F, 0x47, 0x37, 0x69, 0xE0, /* $.p.G7i. */
1890 0x24, 0xC3, 0x29, 0xCD, 0xF2, 0x26, 0x69, 0xFF, /* $.)..&i. */
1891 0x72, 0x0E, 0x3C, 0xD1, 0xA1, 0x2F, 0x5D, 0x33, /* r.<../]3 */
1892 0x9F, 0xD7, 0x0C, 0x92, 0xD4, 0xA5, 0x9D, 0x06, /* ........ */
1893 0x01, 0x80, 0x38, 0xCD, 0xC2, 0x71, 0x5D, 0x4A, /* ..8..q]J */
1894};
1895
Jerome Forissier0780ad42018-06-05 15:02:37 +02001896static const uint8_t ciph_data_aes_ctr_out5[] = {
1897 0xbb, 0xfe, 0x07, 0x04, 0x1c, 0x8e, 0x09, 0x61,
1898 0xfb, 0xb1, 0x7c, 0xa5, 0x4d, 0x2b, 0x30, 0xf6,
1899 0x26, 0x9e, 0xff, 0x61, 0x18, 0x47, 0xc6, 0x06,
1900 0x81, 0x02, 0x84, 0xcd, 0x9c, 0x4b, 0x6d, 0x21,
1901 0xe2, 0x64, 0xa6, 0x50, 0x7f, 0x28, 0x81, 0x6f,
1902 0x29, 0xda, 0xd5, 0x56, 0x3f, 0x46, 0xac, 0xca,
1903 0x37, 0xe7, 0x77, 0x36, 0xbc, 0x76, 0x39, 0x57,
1904 0xaa, 0x67, 0x1b, 0x2a, 0xe6, 0x36, 0x57, 0x6d,
Jerome Forissierbf9009e2018-06-05 18:44:42 +02001905 0x2a, 0xb8, 0x77, 0x41, 0xc2, 0x4e, 0x4f, 0x27,
1906 0x4c, 0x34, 0x7a, 0x01, 0x6a, 0xda, 0x75, 0x75,
1907 0x3e, 0x68, 0xb2
Jerome Forissier0780ad42018-06-05 15:02:37 +02001908};
1909
Pascal Brandc639ac82015-07-02 08:53:34 +02001910static const uint8_t ciph_data_aes_cbc_vect1_key[] = {
1911 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1912 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1913};
1914
1915static const uint8_t ciph_data_aes_cbc_vect1_iv[] = {
1916 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* ........ */
1917 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* ........ */
1918};
1919
1920static const uint8_t ciph_data_aes_cbc_vect1_ptx[] = {
1921 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x20, 0x62, /* Cipher b */
1922 0x6C, 0x6F, 0x63, 0x6B, 0x20, 0x63, 0x68, 0x61, /* lock cha */
1923 0x69, 0x6E, 0x69, 0x6E, 0x67, 0x20, 0x28, 0x43, /* ining (C */
1924 0x42, 0x43, 0x29, 0x20, 0x69, 0x73, 0x20, 0x61, /* BC) is a */
1925 0x20, 0x63, 0x6F, 0x6D, 0x6D, 0x6F, 0x6E, 0x20, /* common */
1926 0x63, 0x68, 0x61, 0x69, 0x6E, 0x69, 0x6E, 0x67, /* chaining */
1927 0x20, 0x6D, 0x6F, 0x64, 0x65, 0x20, 0x69, 0x6E, /* mode in */
1928 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x74, /* which t */
1929 0x68, 0x65, 0x20, 0x70, 0x72, 0x65, 0x76, 0x69, /* he previ */
1930 0x6F, 0x75, 0x73, 0x20, 0x62, 0x6C, 0x6F, 0x63, /* ous bloc */
1931 0x6B, 0x27, 0x73, 0x20, 0x63, 0x69, 0x70, 0x68, /* k's ciph */
1932 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x20, 0x69, /* ertext i */
1933 0x73, 0x20, 0x78, 0x6F, 0x72, 0x65, 0x64, 0x20, /* s xored */
1934 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, /* with the */
1935 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6E, 0x74, /* current */
1936 0x20, 0x62, 0x6C, 0x6F, 0x63, 0x6B, 0x27, 0x73, /* block's */
1937 0x20, 0x70, 0x6C, 0x61, 0x69, 0x6E, 0x74, 0x65, /* plainte */
1938 0x78, 0x74, 0x20, 0x62, 0x65, 0x66, 0x6F, 0x72, /* xt befor */
1939 0x65, 0x20, 0x65, 0x6E, 0x63, 0x72, 0x79, 0x70, /* e encryp */
1940 0x74, 0x69, 0x6F, 0x6E, 0x2E, 0x2E, 0x2E, 0x2E, /* tion.... */
1941};
1942
1943static const uint8_t ciph_data_aes_cbc_vect1_ctx[] = {
1944 0xDD, 0x16, 0xC3, 0x47, 0x69, 0xEC, 0xF5, 0x86, /* ...Gi... */
1945 0x20, 0xB4, 0xF7, 0xE3, 0xB9, 0x36, 0xE8, 0xAC, /* ....6.. */
1946 0xC9, 0xA2, 0x11, 0x71, 0x3B, 0x10, 0x9D, 0x45, /* ...q;..E */
1947 0xCA, 0xE2, 0x49, 0xA6, 0x4E, 0x56, 0x07, 0xC5, /* ..I.NV.. */
1948 0xCE, 0xA3, 0x14, 0xB5, 0x30, 0x1B, 0x63, 0xBB, /* ....0.c. */
1949 0x2D, 0x6F, 0xE9, 0xCA, 0x0B, 0x00, 0x31, 0x3F, /* -o....1? */
1950 0xA4, 0x9A, 0x39, 0xE1, 0xC8, 0xD2, 0x24, 0x95, /* ..9...$. */
1951 0x14, 0xE9, 0xD2, 0x43, 0xE8, 0xA8, 0x1E, 0x0A, /* ...C.... */
1952 0xFE, 0x9D, 0x4F, 0xF5, 0xBB, 0x16, 0xB9, 0x54, /* ..O....T */
1953 0x78, 0x07, 0x94, 0x05, 0x8E, 0x47, 0xC3, 0xCB, /* x....G.. */
1954 0x7C, 0xEC, 0xF4, 0xF8, 0xF2, 0xA4, 0x59, 0x6E, /* |.....Yn */
1955 0xED, 0xAD, 0x7F, 0x62, 0xAF, 0x89, 0xA8, 0x5B, /* ...b...[ */
1956 0x75, 0xD4, 0x73, 0xE3, 0xBA, 0x9F, 0x9A, 0xD2, /* u.s..... */
1957 0x0F, 0xFD, 0x3C, 0xE6, 0xC6, 0xA4, 0xD6, 0x6C, /* ..<....l */
1958 0x6A, 0x09, 0xE2, 0x16, 0xB0, 0x8C, 0x69, 0x3C, /* j.....i< */
1959 0xC8, 0x1C, 0xE4, 0x3E, 0x86, 0x4D, 0xB0, 0x2B, /* ...>.M.+ */
1960 0x29, 0xA0, 0x5A, 0xA3, 0x67, 0xBA, 0xDC, 0x11, /* ).Z.g... */
1961 0x08, 0x5E, 0x69, 0xB4, 0x6F, 0xA5, 0xE2, 0xB8, /* .^i.o... */
1962 0xC9, 0x6E, 0x83, 0x7E, 0x35, 0xC8, 0xA7, 0xA0, /* .n.~5... */
1963 0x33, 0xA3, 0xB1, 0x4B, 0x5A, 0x92, 0x51, 0x2E, /* 3..KZ.Q. */
1964};
1965
1966/* AES-CTS test vectors from http://tools.ietf.org/html/rfc3962
1967 * and http://tools.ietf.org/html/draft-raeburn-krb-rijndael-krb-02 */
1968static const uint8_t ciph_data_aes_cts_vect1_key[] = {
1969 0x63, 0x68, 0x69, 0x63, 0x6b, 0x65, 0x6e, 0x20,
1970 0x74, 0x65, 0x72, 0x69, 0x79, 0x61, 0x6b, 0x69
1971};
1972
1973static const uint8_t ciph_data_aes_cts_vect1_iv[16] = {
1974 0x00
1975};
1976
1977static const uint8_t ciph_data_aes_cts_vect1_ptx[] = {
1978 0x49, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20,
1979 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65,
1980 0x20
1981};
1982
1983static const uint8_t ciph_data_aes_cts_vect1_ctx[] = {
1984 0xc6, 0x35, 0x35, 0x68, 0xf2, 0xbf, 0x8c, 0xb4,
1985 0xd8, 0xa5, 0x80, 0x36, 0x2d, 0xa7, 0xff, 0x7f,
1986 0x97
1987};
1988
1989#define ciph_data_aes_cts_vect2_key ciph_data_aes_cts_vect1_key
1990#define ciph_data_aes_cts_vect2_iv ciph_data_aes_cts_vect1_iv
1991static const uint8_t ciph_data_aes_cts_vect2_ptx[] = {
1992 0x49, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20,
1993 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65,
1994 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c,
1995 0x20, 0x47, 0x61, 0x75, 0x27, 0x73, 0x20
1996};
1997
1998static const uint8_t ciph_data_aes_cts_vect2_ctx[] = {
1999 0xfc, 0x00, 0x78, 0x3e, 0x0e, 0xfd, 0xb2, 0xc1,
2000 0xd4, 0x45, 0xd4, 0xc8, 0xef, 0xf7, 0xed, 0x22,
2001 0x97, 0x68, 0x72, 0x68, 0xd6, 0xec, 0xcc, 0xc0,
2002 0xc0, 0x7b, 0x25, 0xe2, 0x5e, 0xcf, 0xe5
2003};
2004
2005#define ciph_data_aes_cts_vect3_key ciph_data_aes_cts_vect1_key
2006#define ciph_data_aes_cts_vect3_iv ciph_data_aes_cts_vect1_iv
2007static const uint8_t ciph_data_aes_cts_vect3_ptx[] = {
2008 0x49, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20,
2009 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65,
2010 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c,
2011 0x20, 0x47, 0x61, 0x75, 0x27, 0x73, 0x20, 0x43,
2012};
2013
2014static const uint8_t ciph_data_aes_cts_vect3_ctx[] = {
2015 0x39, 0x31, 0x25, 0x23, 0xa7, 0x86, 0x62, 0xd5,
2016 0xbe, 0x7f, 0xcb, 0xcc, 0x98, 0xeb, 0xf5, 0xa8,
2017 0x97, 0x68, 0x72, 0x68, 0xd6, 0xec, 0xcc, 0xc0,
2018 0xc0, 0x7b, 0x25, 0xe2, 0x5e, 0xcf, 0xe5, 0x84,
2019};
2020
2021#define ciph_data_aes_cts_vect4_key ciph_data_aes_cts_vect1_key
2022#define ciph_data_aes_cts_vect4_iv ciph_data_aes_cts_vect1_iv
2023static const uint8_t ciph_data_aes_cts_vect4_ptx[] = {
2024 0x49, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20,
2025 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65,
2026 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c,
2027 0x20, 0x47, 0x61, 0x75, 0x27, 0x73, 0x20, 0x43,
2028 0x68, 0x69, 0x63, 0x6b, 0x65, 0x6e, 0x2c, 0x20,
2029 0x70, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x2c,
2030};
2031
2032static const uint8_t ciph_data_aes_cts_vect4_ctx[] = {
2033 0x97, 0x68, 0x72, 0x68, 0xd6, 0xec, 0xcc, 0xc0,
2034 0xc0, 0x7b, 0x25, 0xe2, 0x5e, 0xcf, 0xe5, 0x84,
2035 0xb3, 0xff, 0xfd, 0x94, 0x0c, 0x16, 0xa1, 0x8c,
2036 0x1b, 0x55, 0x49, 0xd2, 0xf8, 0x38, 0x02, 0x9e,
2037 0x39, 0x31, 0x25, 0x23, 0xa7, 0x86, 0x62, 0xd5,
2038 0xbe, 0x7f, 0xcb, 0xcc, 0x98, 0xeb, 0xf5,
2039};
2040
2041#define ciph_data_aes_cts_vect5_key ciph_data_aes_cts_vect1_key
2042#define ciph_data_aes_cts_vect5_iv ciph_data_aes_cts_vect1_iv
2043static const uint8_t ciph_data_aes_cts_vect5_ptx[] = {
2044 0x49, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20,
2045 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65,
2046 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c,
2047 0x20, 0x47, 0x61, 0x75, 0x27, 0x73, 0x20, 0x43,
2048 0x68, 0x69, 0x63, 0x6b, 0x65, 0x6e, 0x2c, 0x20,
2049 0x70, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x2c, 0x20,
2050};
2051
2052static const uint8_t ciph_data_aes_cts_vect5_ctx[] = {
2053 0x97, 0x68, 0x72, 0x68, 0xd6, 0xec, 0xcc, 0xc0,
2054 0xc0, 0x7b, 0x25, 0xe2, 0x5e, 0xcf, 0xe5, 0x84,
2055 0x9d, 0xad, 0x8b, 0xbb, 0x96, 0xc4, 0xcd, 0xc0,
2056 0x3b, 0xc1, 0x03, 0xe1, 0xa1, 0x94, 0xbb, 0xd8,
2057 0x39, 0x31, 0x25, 0x23, 0xa7, 0x86, 0x62, 0xd5,
2058 0xbe, 0x7f, 0xcb, 0xcc, 0x98, 0xeb, 0xf5, 0xa8,
2059};
2060
2061#define ciph_data_aes_cts_vect6_key ciph_data_aes_cts_vect1_key
2062#define ciph_data_aes_cts_vect6_iv ciph_data_aes_cts_vect1_iv
2063static const uint8_t ciph_data_aes_cts_vect6_ptx[] = {
2064 0x49, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20,
2065 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65,
2066 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c,
2067 0x20, 0x47, 0x61, 0x75, 0x27, 0x73, 0x20, 0x43,
2068 0x68, 0x69, 0x63, 0x6b, 0x65, 0x6e, 0x2c, 0x20,
2069 0x70, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x2c, 0x20,
2070 0x61, 0x6e, 0x64, 0x20, 0x77, 0x6f, 0x6e, 0x74,
2071 0x6f, 0x6e, 0x20, 0x73, 0x6f, 0x75, 0x70, 0x2e,
2072};
2073
2074static const uint8_t ciph_data_aes_cts_vect6_ctx[] = {
2075 0x97, 0x68, 0x72, 0x68, 0xd6, 0xec, 0xcc, 0xc0,
2076 0xc0, 0x7b, 0x25, 0xe2, 0x5e, 0xcf, 0xe5, 0x84,
2077 0x39, 0x31, 0x25, 0x23, 0xa7, 0x86, 0x62, 0xd5,
2078 0xbe, 0x7f, 0xcb, 0xcc, 0x98, 0xeb, 0xf5, 0xa8,
2079 0x48, 0x07, 0xef, 0xe8, 0x36, 0xee, 0x89, 0xa5,
2080 0x26, 0x73, 0x0d, 0xbc, 0x2f, 0x7b, 0xc8, 0x40,
2081 0x9d, 0xad, 0x8b, 0xbb, 0x96, 0xc4, 0xcd, 0xc0,
2082 0x3b, 0xc1, 0x03, 0xe1, 0xa1, 0x94, 0xbb, 0xd8,
2083};
2084
Jerome Forissiered00e162017-01-20 09:22:52 +01002085/*
2086 * Test case for https://github.com/OP-TEE/optee_os/issues/1203
2087 * 80 bytes of data, processed in two steps (32 + 48).
2088 */
2089
2090#define ciph_data_aes_cts_issue1203_key ciph_data_aes_cts_vect1_key
2091
2092static const uint8_t ciph_data_aes_cts_issue1203_iv[] = {
2093 0x5b, 0x11, 0x7b, 0xf9, 0x83, 0x6a, 0x01, 0x27,
2094 0x1d, 0x2a, 0xae, 0x0a, 0xd3, 0x27, 0x35, 0x81,
2095};
2096
2097static const uint8_t ciph_data_aes_cts_issue1203_ptx[] = {
2098 0x33, 0x2a, 0xf4, 0x8c, 0x18, 0xa1, 0x30, 0x7c,
2099 0xa7, 0x52, 0x76, 0xca, 0xa6, 0x68, 0xad, 0xf6,
2100 0x1e, 0xba, 0xc9, 0x66, 0x66, 0x52, 0x1a, 0xe7,
2101 0x3e, 0xbc, 0xba, 0x60, 0x95, 0x71, 0x04, 0x5e,
2102 0xb4, 0xb7, 0x10, 0xd7, 0x93, 0x6d, 0x5f, 0x9a,
2103 0xb8, 0xbb, 0x6b, 0xb0, 0x6d, 0x47, 0x93, 0x41,
2104 0x29, 0x21, 0xf2, 0x84, 0xf5, 0xb2, 0xf2, 0x6d,
2105 0xbe, 0xe5, 0x8a, 0x2b, 0x58, 0x8d, 0x1b, 0x5e,
2106 0x41, 0x04, 0xba, 0x9e, 0x92, 0xe9, 0x52, 0xb6,
2107 0x8b, 0x1e, 0x36, 0x72, 0x91, 0xe4, 0x56, 0x66,
2108};
2109
2110/*
2111 * Ciphertext was generated by an online tool for AES CBC.
2112 * Since the input size is a multiple of the block size, and the ciphertext
2113 * format is CS3, the output is the same as plain AES CBC with the last
2114 * two blocks swapped.
2115 */
2116static const uint8_t ciph_data_aes_cts_issue1203_ctx[] = {
2117 0x6c, 0xfe, 0xef, 0x6a, 0x1c, 0x8f, 0xd3, 0xc3,
2118 0x66, 0xc4, 0xd9, 0x0e, 0xbe, 0x24, 0x17, 0x3f,
2119 0xcd, 0x19, 0xc9, 0xd2, 0x10, 0x3f, 0xcf, 0xdc,
2120 0xe9, 0x05, 0xab, 0xd5, 0x1a, 0x31, 0x41, 0x77,
2121 0x3b, 0xd7, 0x6a, 0x26, 0xae, 0x0d, 0xc9, 0x47,
2122 0x77, 0xd4, 0xa7, 0xd5, 0x73, 0x88, 0x9e, 0xde,
2123 0x72, 0x66, 0xe0, 0xe2, 0x3d, 0x62, 0x91, 0x22,
2124 0xae, 0x11, 0x01, 0x97, 0x22, 0x6a, 0x45, 0xa9,
2125 0xba, 0x56, 0xd2, 0xbc, 0x55, 0x2d, 0x99, 0x4d,
2126 0x3d, 0x22, 0x27, 0x9a, 0xac, 0x66, 0x2f, 0xf5,
2127};
2128
Pascal Brandc639ac82015-07-02 08:53:34 +02002129static const uint8_t ciph_data_des_ecb_nopad_out1[] = {
2130 0x46, 0x2B, 0x91, 0xA8, 0x55, 0xE6, 0x7E, 0x75, /* F+..U.~u */
2131 0x5E, 0x53, 0xF4, 0x8F, 0x29, 0x41, 0x4E, 0xEF, /* ^S..)AN. */
2132 0x32, 0x1B, 0x58, 0x42, 0x9B, 0xB4, 0x3A, 0x1F, /* 2.XB..:. */
2133 0x9A, 0xEA, 0xA4, 0xB4, 0xCD, 0xE9, 0x87, 0x7C, /* .......| */
2134 0xC0, 0x05, 0x34, 0xED, 0x86, 0x3C, 0x2A, 0x81, /* ..4..<.. */
2135 0x5E, 0x93, 0x0E, 0x86, 0xA9, 0xBB, 0x80, 0xFF, /* ^....... */
2136};
2137
2138static const uint8_t ciph_data_des_ecb_nopad_out2[] = {
2139 0x85, 0xE8, 0x13, 0x54, 0x0F, 0x0A, 0xB4, 0x05
2140};
2141
2142static const uint8_t ciph_data_des_cbc_nopad_out1[] = {
2143 0xAD, 0xD6, 0xD6, 0x3E, 0x88, 0xD0, 0xDD, 0xD4, /* ...>.... */
2144 0x9A, 0x93, 0x95, 0xA0, 0x86, 0x22, 0x5B, 0x9E, /* ....."[. */
2145 0x84, 0x0C, 0x6F, 0x12, 0x04, 0x11, 0x6F, 0xD4, /* ..o...o. */
2146 0x12, 0x29, 0xC6, 0x78, 0x0C, 0xFB, 0x58, 0x5B, /* .).x..X[ */
2147 0x66, 0x82, 0x0E, 0x52, 0xDC, 0x25, 0x16, 0x51, /* f..R.%.Q */
2148 0x69, 0xDF, 0xFE, 0x4E, 0x11, 0x1D, 0x9D, 0x08, /* i..N.... */
2149};
2150
2151static const uint8_t ciph_data_des3_ecb_nopad_out1[] = {
2152 0xA7, 0x46, 0xEC, 0xA8, 0x6A, 0x7F, 0x4A, 0xF1, /* .F..j.J. */
2153 0x44, 0x60, 0x37, 0x3B, 0x7F, 0x76, 0xE5, 0xFF, /* D`7;.v.. */
2154 0xC1, 0xE7, 0xA5, 0x04, 0x9C, 0x29, 0x5C, 0xA5, /* .....)\. */
2155 0xDD, 0xC8, 0xEE, 0x36, 0x1F, 0x48, 0xE0, 0xA9, /* ...6.H.. */
2156 0x82, 0x2D, 0x53, 0x84, 0x49, 0x69, 0x78, 0xFA, /* .-S.Iix. */
2157 0x23, 0x69, 0x1D, 0xF7, 0x08, 0x38, 0x44, 0x05, /* #i...8D. */
2158};
2159
2160static const uint8_t ciph_data_des3_cbc_nopad_out1[] = {
2161 0x18, 0x09, 0xEB, 0x98, 0xE4, 0x58, 0x72, 0x11, /* .....Xr. */
2162 0x30, 0x58, 0xAB, 0x38, 0xB0, 0xC9, 0x2B, 0xED, /* 0X.8..+. */
2163 0xDA, 0xC5, 0xE8, 0xA9, 0xF6, 0x8A, 0xA7, 0x80, /* ........ */
2164 0xBE, 0x54, 0x1F, 0x63, 0xF6, 0xEE, 0xA2, 0x4C, /* .T.c...L */
2165 0x7C, 0xEB, 0x84, 0x7D, 0xDA, 0xCA, 0x1E, 0xB2, /* |..}.... */
2166 0xED, 0x5E, 0x96, 0xB8, 0x01, 0x4B, 0x77, 0x02, /* .^...Kw. */
2167};
2168
2169static const uint8_t ciph_data_des2_ecb_nopad_out1[] = {
2170 0xAB, 0x12, 0xB6, 0xE2, 0x4A, 0x3A, 0x26, 0x14, /* ....J:&. */
2171 0xF0, 0x7D, 0x23, 0xD0, 0x55, 0xDF, 0x5C, 0x16, /* .}#.U.\. */
2172 0x43, 0x59, 0x1E, 0x44, 0x01, 0x76, 0xD7, 0x50, /* CY.D.v.P */
2173 0x44, 0xC0, 0x15, 0xDF, 0x2E, 0x7F, 0x8B, 0xC5, /* D....... */
2174 0xFF, 0x8B, 0x87, 0xFE, 0x33, 0xD7, 0xCB, 0x2C, /* ....3.., */
2175 0xDA, 0x79, 0x6F, 0xA4, 0x05, 0x2B, 0x30, 0xCE, /* .yo..+0. */
2176};
2177
2178static const uint8_t ciph_data_des2_cbc_nopad_out1[] = {
2179 0x47, 0x2F, 0xB1, 0x83, 0xC4, 0xBB, 0x93, 0x16, /* G/...... */
2180 0x73, 0xF9, 0xAD, 0x6F, 0x00, 0xF9, 0xCB, 0x4A, /* s..o...J */
2181 0x0F, 0x4F, 0x75, 0x75, 0xFB, 0x39, 0x0B, 0xFC, /* .Ouu.9.. */
2182 0x9F, 0x48, 0x52, 0xAD, 0xA2, 0x75, 0x2C, 0xF1, /* .HR..u, . */
2183 0x7D, 0xC3, 0x8F, 0x16, 0xCF, 0xC9, 0x76, 0x29, /* }.....v) */
2184 0x1A, 0xBF, 0xB3, 0xD9, 0x10, 0x7E, 0xAA, 0x49, /* .....~.I */
2185};
2186
Jerome Forissiere73e0fb2019-12-12 17:08:03 +01002187/* SM4 ECB */
2188
2189static const uint8_t ciph_data_sm4_key1[] = {
2190 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
2191 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10,
2192};
2193
2194static const uint8_t ciph_data_sm4_in1[] = {
2195 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
2196 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10,
2197};
2198
2199static const uint8_t ciph_data_sm4_ecb_nopad_out1[] = {
2200 0x68, 0x1e, 0xdf, 0x34, 0xd2, 0x06, 0x96, 0x5e,
2201 0x86, 0xb3, 0xe9, 0x4f, 0x53, 0x6e, 0x42, 0x46,
2202};
2203
2204/*
2205 * SM4 CBC
2206 * https://tools.ietf.org/html/draft-ribose-cfrg-sm4-10#appendix-A.2.2.1
2207 */
2208static const uint8_t ciph_data_sm4_cbc_a221_key[] = {
2209 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
2210 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10,
2211};
2212
2213static const uint8_t ciph_data_sm4_cbc_a221_iv[] = {
2214 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
2215 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
2216};
2217
2218static const uint8_t ciph_data_sm4_cbc_a221_in[] = {
2219 0xaa, 0xaa, 0xaa, 0xaa, 0xbb, 0xbb, 0xbb, 0xbb,
2220 0xcc, 0xcc, 0xcc, 0xcc, 0xdd, 0xdd, 0xdd, 0xdd,
2221 0xee, 0xee, 0xee, 0xee, 0xff, 0xff, 0xff, 0xff,
2222 0xaa, 0xaa, 0xaa, 0xaa, 0xbb, 0xbb, 0xbb, 0xbb,
2223};
2224
2225static const uint8_t ciph_data_sm4_cbc_a221_out[] = {
2226 0x78, 0xeb, 0xb1, 0x1c, 0xc4, 0x0b, 0x0a, 0x48,
2227 0x31, 0x2a, 0xae, 0xb2, 0x04, 0x02, 0x44, 0xcb,
2228 0x4c, 0xb7, 0x01, 0x69, 0x51, 0x90, 0x92, 0x26,
2229 0x97, 0x9b, 0x0d, 0x15, 0xdc, 0x6a, 0x8f, 0x6d,
2230};
2231
2232/*
2233 * SM4 CBC
2234 * https://tools.ietf.org/html/draft-ribose-cfrg-sm4-10#appendix-A.2.2.2
2235 */
2236static const uint8_t ciph_data_sm4_cbc_a222_key[] = {
2237 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10,
2238 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
2239};
2240
2241static const uint8_t ciph_data_sm4_cbc_a222_iv[] = {
2242 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
2243 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
2244};
2245
2246static const uint8_t ciph_data_sm4_cbc_a222_in[] = {
2247 0xaa, 0xaa, 0xaa, 0xaa, 0xbb, 0xbb, 0xbb, 0xbb,
2248 0xcc, 0xcc, 0xcc, 0xcc, 0xdd, 0xdd, 0xdd, 0xdd,
2249 0xee, 0xee, 0xee, 0xee, 0xff, 0xff, 0xff, 0xff,
2250 0xaa, 0xaa, 0xaa, 0xaa, 0xbb, 0xbb, 0xbb, 0xbb,
2251};
2252
2253static const uint8_t ciph_data_sm4_cbc_a222_out[] = {
2254 0x0d, 0x3a, 0x6d, 0xdc, 0x2d, 0x21, 0xc6, 0x98,
2255 0x85, 0x72, 0x15, 0x58, 0x7b, 0x7b, 0xb5, 0x9a,
2256 0x91, 0xf2, 0xc1, 0x47, 0x91, 0x1a, 0x41, 0x44,
2257 0x66, 0x5e, 0x1f, 0xa1, 0xd4, 0x0b, 0xae, 0x38,
2258};
2259
2260/*
2261 * SM4 CTR
2262 * https://tools.ietf.org/html/draft-ribose-cfrg-sm4-10#appendix-A.2.5.1
2263 */
2264static const uint8_t ciph_data_sm4_ctr_a251_key[] = {
2265 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
2266 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10,
2267};
2268
2269static const uint8_t ciph_data_sm4_ctr_a251_iv[] = {
2270 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
2271 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
2272};
2273
2274static const uint8_t ciph_data_sm4_ctr_a251_in[] = {
2275 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
2276 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb,
2277 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
2278 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
2279 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
2280 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2281 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
2282 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb,
2283};
2284
2285static const uint8_t ciph_data_sm4_ctr_a251_out[] = {
2286 0xac, 0x32, 0x36, 0xcb, 0x97, 0x0c, 0xc2, 0x07,
2287 0x91, 0x36, 0x4c, 0x39, 0x5a, 0x13, 0x42, 0xd1,
2288 0xa3, 0xcb, 0xc1, 0x87, 0x8c, 0x6f, 0x30, 0xcd,
2289 0x07, 0x4c, 0xce, 0x38, 0x5c, 0xdd, 0x70, 0xc7,
2290 0xf2, 0x34, 0xbc, 0x0e, 0x24, 0xc1, 0x19, 0x80,
2291 0xfd, 0x12, 0x86, 0x31, 0x0c, 0xe3, 0x7b, 0x92,
2292 0x6e, 0x02, 0xfc, 0xd0, 0xfa, 0xa0, 0xba, 0xf3,
2293 0x8b, 0x29, 0x33, 0x85, 0x1d, 0x82, 0x45, 0x14,
2294};
2295
2296/*
2297 * SM4 CTR
2298 * https://tools.ietf.org/html/draft-ribose-cfrg-sm4-10#appendix-A.2.5.2
2299 */
2300static const uint8_t ciph_data_sm4_ctr_a252_key[] = {
2301 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10,
2302 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
2303};
2304
2305static const uint8_t ciph_data_sm4_ctr_a252_iv[] = {
2306 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
2307 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
2308};
2309
2310static const uint8_t ciph_data_sm4_ctr_a252_in[] = {
2311 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
2312 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb,
2313 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
2314 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
2315 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee,
2316 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2317 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
2318 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb,
2319};
2320
2321static const uint8_t ciph_data_sm4_ctr_a252_out[] = {
2322 0x5d, 0xcc, 0xcd, 0x25, 0xb9, 0x5a, 0xb0, 0x74,
2323 0x17, 0xa0, 0x85, 0x12, 0xee, 0x16, 0x0e, 0x2f,
2324 0x8f, 0x66, 0x15, 0x21, 0xcb, 0xba, 0xb4, 0x4c,
2325 0xc8, 0x71, 0x38, 0x44, 0x5b, 0xc2, 0x9e, 0x5c,
2326 0x0a, 0xe0, 0x29, 0x72, 0x05, 0xd6, 0x27, 0x04,
2327 0x17, 0x3b, 0x21, 0x23, 0x9b, 0x88, 0x7f, 0x6c,
2328 0x8c, 0xb5, 0xb8, 0x00, 0x91, 0x7a, 0x24, 0x88,
2329 0x28, 0x4b, 0xde, 0x9e, 0x16, 0xea, 0x29, 0x06,
2330};
2331
Pascal Brandc639ac82015-07-02 08:53:34 +02002332struct xtest_ciph_case {
2333 uint32_t algo;
2334 uint32_t mode;
2335 uint32_t key_type;
2336 const uint8_t *key1;
2337 size_t key1_len;
2338 const uint8_t *key2;
2339 size_t key2_len;
2340 const uint8_t *iv;
2341 size_t iv_len;
2342 size_t in_incr;
2343 const uint8_t *in;
2344 size_t in_len;
2345 const uint8_t *out;
2346 size_t out_len;
2347 size_t line;
2348};
2349
2350#define XTEST_CIPH_CASE_NO_IV(algo, key_type, key, in_incr, ptx, ctx) \
2351 { (algo), TEE_MODE_ENCRYPT, (key_type), (key), ARRAY_SIZE(key), \
2352 NULL, 0, NULL, 0, \
2353 (in_incr), (ptx), ARRAY_SIZE(ptx), (ctx), ARRAY_SIZE(ctx), \
2354 __LINE__ }, \
2355 { (algo), TEE_MODE_DECRYPT, (key_type), (key), ARRAY_SIZE(key), \
2356 NULL, 0, NULL, 0, \
2357 (in_incr), (ctx), ARRAY_SIZE(ctx), (ptx), ARRAY_SIZE(ptx), __LINE__ }
2358
2359#define XTEST_CIPH_CASE(algo, key_type, key, iv, in_incr, ptx, ctx) \
2360 { (algo), TEE_MODE_ENCRYPT, (key_type), (key), ARRAY_SIZE(key), \
2361 NULL, 0, iv, ARRAY_SIZE(iv), (in_incr), (ptx), ARRAY_SIZE(ptx), \
2362 (ctx), ARRAY_SIZE(ctx), __LINE__ }, \
2363 { (algo), TEE_MODE_DECRYPT, (key_type), (key), ARRAY_SIZE(key), \
2364 NULL, 0, iv, ARRAY_SIZE(iv), (in_incr), (ctx), ARRAY_SIZE(ctx), \
2365 (ptx), ARRAY_SIZE(ptx), __LINE__ }
2366
2367#define XTEST_CIPH_CASE_AES_XTS(vect, in_incr) \
2368 { TEE_ALG_AES_XTS, TEE_MODE_ENCRYPT, TEE_TYPE_AES, \
2369 ciph_data_aes_xts_ ## vect ## _key1, \
2370 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _key1), \
2371 ciph_data_aes_xts_ ## vect ## _key2, \
2372 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _key2), \
2373 ciph_data_aes_xts_ ## vect ## _iv, \
2374 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _iv), \
2375 (in_incr), \
2376 ciph_data_aes_xts_ ## vect ## _ptx, \
2377 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _ptx), \
2378 ciph_data_aes_xts_ ## vect ## _ctx, \
2379 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _ctx), __LINE__ }, \
2380 { TEE_ALG_AES_XTS, TEE_MODE_DECRYPT, TEE_TYPE_AES, \
2381 ciph_data_aes_xts_ ## vect ## _key1, \
2382 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _key1), \
2383 ciph_data_aes_xts_ ## vect ## _key2, \
2384 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _key2), \
2385 ciph_data_aes_xts_ ## vect ## _iv, \
2386 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _iv), \
2387 (in_incr), \
2388 ciph_data_aes_xts_ ## vect ## _ctx, \
2389 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _ctx), \
2390 ciph_data_aes_xts_ ## vect ## _ptx, \
2391 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _ptx), __LINE__ }
2392
2393#define XTEST_CIPH_CASE_AES_CBC(vect, in_incr) \
2394 XTEST_CIPH_CASE(TEE_ALG_AES_CBC_NOPAD, TEE_TYPE_AES, \
2395 ciph_data_aes_cbc_ ## vect ## _key, \
2396 ciph_data_aes_cbc_ ## vect ## _iv, \
2397 (in_incr), ciph_data_aes_cbc_ ## vect ## _ptx, \
2398 ciph_data_aes_cbc_ ## vect ## _ctx)
2399
2400#define XTEST_CIPH_CASE_AES_CTS(vect, in_incr) \
2401 XTEST_CIPH_CASE(TEE_ALG_AES_CTS, TEE_TYPE_AES, \
2402 ciph_data_aes_cts_ ## vect ## _key, \
2403 ciph_data_aes_cts_ ## vect ## _iv, \
2404 (in_incr), ciph_data_aes_cts_ ## vect ## _ptx, \
2405 ciph_data_aes_cts_ ## vect ## _ctx)
2406
2407static const struct xtest_ciph_case ciph_cases[] = {
2408 /* AES */
2409 XTEST_CIPH_CASE_NO_IV(TEE_ALG_AES_ECB_NOPAD, TEE_TYPE_AES,
2410 ciph_data_aes_key1, 11, ciph_data_in1,
2411 ciph_data_aes_ecb_nopad_out1),
2412 XTEST_CIPH_CASE(TEE_ALG_AES_CBC_NOPAD, TEE_TYPE_AES,
2413 ciph_data_aes_key1, ciph_data_128_iv1, 11,
2414 ciph_data_in1,
2415 ciph_data_aes_cbc_nopad_out1),
2416 XTEST_CIPH_CASE(TEE_ALG_AES_CTR, TEE_TYPE_AES,
2417 ciph_data_aes_key1, ciph_data_128_iv1, 13,
2418 ciph_data_in1,
2419 ciph_data_aes_ctr_out1),
2420 XTEST_CIPH_CASE(TEE_ALG_AES_CTR, TEE_TYPE_AES,
2421 ciph_data_aes_key1, ciph_data_128_iv1, 13,
2422 ciph_data_in3,
2423 ciph_data_aes_ctr_out2),
Jens Wiklander692efd12018-01-19 09:52:00 +01002424 XTEST_CIPH_CASE(TEE_ALG_AES_CTR, TEE_TYPE_AES,
2425 ciph_data_aes_key1, ciph_data_128_iv1, 16,
2426 ciph_data_in3,
2427 ciph_data_aes_ctr_out2),
Jerome Forissier45218eb2018-04-11 13:03:26 +02002428 XTEST_CIPH_CASE(TEE_ALG_AES_CTR, TEE_TYPE_AES,
2429 ciph_data_aes_key1, ciph_data_128_iv1, 16,
2430 ciph_data_in4,
2431 ciph_data_aes_ctr_out4),
Jerome Forissier0780ad42018-06-05 15:02:37 +02002432 XTEST_CIPH_CASE(TEE_ALG_AES_CTR, TEE_TYPE_AES,
2433 ciph_data_aes_key2, ciph_data_128_iv2, 11,
2434 ciph_data_in5,
2435 ciph_data_aes_ctr_out5),
Pascal Brandc639ac82015-07-02 08:53:34 +02002436
2437 XTEST_CIPH_CASE_AES_CBC(vect1, 11),
Jerome Forissierfc1bbc32018-06-12 10:13:04 +02002438 XTEST_CIPH_CASE_AES_CBC(vect1, 64),
Pascal Brandc639ac82015-07-02 08:53:34 +02002439
2440 /* AES-CTS */
2441 XTEST_CIPH_CASE_AES_CTS(vect1, 13),
2442 XTEST_CIPH_CASE_AES_CTS(vect2, 14),
2443 XTEST_CIPH_CASE_AES_CTS(vect3, 11),
2444 XTEST_CIPH_CASE_AES_CTS(vect4, 9),
2445 XTEST_CIPH_CASE_AES_CTS(vect5, 7),
2446 XTEST_CIPH_CASE_AES_CTS(vect6, 17),
2447 XTEST_CIPH_CASE_AES_CTS(vect6, 0x20),
Jerome Forissiered00e162017-01-20 09:22:52 +01002448 XTEST_CIPH_CASE_AES_CTS(issue1203, 32),
Pascal Brandc639ac82015-07-02 08:53:34 +02002449
2450 /* DES */
2451 XTEST_CIPH_CASE_NO_IV(TEE_ALG_DES_ECB_NOPAD, TEE_TYPE_DES,
2452 ciph_data_des_key1, 14, ciph_data_in1,
2453 ciph_data_des_ecb_nopad_out1),
2454 XTEST_CIPH_CASE_NO_IV(TEE_ALG_DES_ECB_NOPAD, TEE_TYPE_DES,
2455 ciph_data_des_key2, 3, ciph_data_in2,
2456 ciph_data_des_ecb_nopad_out2),
2457 XTEST_CIPH_CASE(TEE_ALG_DES_CBC_NOPAD, TEE_TYPE_DES,
2458 ciph_data_des_key1, ciph_data_64_iv1, 15, ciph_data_in1,
2459 ciph_data_des_cbc_nopad_out1),
2460
2461 /* DES3 */
2462 XTEST_CIPH_CASE_NO_IV(TEE_ALG_DES3_ECB_NOPAD, TEE_TYPE_DES3,
2463 ciph_data_des3_key1, 11, ciph_data_in1,
2464 ciph_data_des3_ecb_nopad_out1),
2465 XTEST_CIPH_CASE_NO_IV(TEE_ALG_DES3_ECB_NOPAD, TEE_TYPE_DES3,
2466 ciph_data_des3_key2, 3, ciph_data_in2,
2467 ciph_data_des_ecb_nopad_out2),
2468 XTEST_CIPH_CASE(TEE_ALG_DES3_CBC_NOPAD, TEE_TYPE_DES3,
2469 ciph_data_des3_key1, ciph_data_64_iv1, 11,
2470 ciph_data_in1,
2471 ciph_data_des3_cbc_nopad_out1),
2472
2473 /* DES2 */
2474 XTEST_CIPH_CASE_NO_IV(TEE_ALG_DES3_ECB_NOPAD, TEE_TYPE_DES3,
2475 ciph_data_des2_key1, 11, ciph_data_in1,
2476 ciph_data_des2_ecb_nopad_out1),
2477 XTEST_CIPH_CASE(TEE_ALG_DES3_CBC_NOPAD, TEE_TYPE_DES3,
2478 ciph_data_des2_key1, ciph_data_64_iv1, 11,
2479 ciph_data_in1,
2480 ciph_data_des2_cbc_nopad_out1),
Pascal Brandc639ac82015-07-02 08:53:34 +02002481
Pascal Brandc639ac82015-07-02 08:53:34 +02002482 /* AES-XTS */
2483 XTEST_CIPH_CASE_AES_XTS(vect1, 3),
2484 XTEST_CIPH_CASE_AES_XTS(vect2, 6),
2485 XTEST_CIPH_CASE_AES_XTS(vect3, 7),
2486 XTEST_CIPH_CASE_AES_XTS(vect4, 8),
2487 XTEST_CIPH_CASE_AES_XTS(vect5, 9),
2488 XTEST_CIPH_CASE_AES_XTS(vect6, 13),
2489 XTEST_CIPH_CASE_AES_XTS(vect7, 1),
2490 XTEST_CIPH_CASE_AES_XTS(vect8, 3),
2491 XTEST_CIPH_CASE_AES_XTS(vect9, 2),
2492 XTEST_CIPH_CASE_AES_XTS(vect10, 5),
2493 XTEST_CIPH_CASE_AES_XTS(vect11, 6),
2494 XTEST_CIPH_CASE_AES_XTS(vect12, 7),
2495 XTEST_CIPH_CASE_AES_XTS(vect13, 3),
2496 XTEST_CIPH_CASE_AES_XTS(vect14, 2),
2497 XTEST_CIPH_CASE_AES_XTS(vect15, 0),
2498 XTEST_CIPH_CASE_AES_XTS(vect16, 9),
2499 XTEST_CIPH_CASE_AES_XTS(vect17, 6),
2500 XTEST_CIPH_CASE_AES_XTS(vect18, 8),
2501 XTEST_CIPH_CASE_AES_XTS(vect19, 23),
Jerome Forissiere73e0fb2019-12-12 17:08:03 +01002502
2503 /* SM4 */
2504 XTEST_CIPH_CASE_NO_IV(TEE_ALG_SM4_ECB_NOPAD, TEE_TYPE_SM4,
2505 ciph_data_sm4_key1, 11, ciph_data_sm4_in1,
2506 ciph_data_sm4_ecb_nopad_out1),
2507 XTEST_CIPH_CASE(TEE_ALG_SM4_CBC_NOPAD, TEE_TYPE_SM4,
2508 ciph_data_sm4_cbc_a221_key, ciph_data_sm4_cbc_a221_iv,
2509 11, ciph_data_sm4_cbc_a221_in,
2510 ciph_data_sm4_cbc_a221_out),
2511 XTEST_CIPH_CASE(TEE_ALG_SM4_CBC_NOPAD, TEE_TYPE_SM4,
2512 ciph_data_sm4_cbc_a222_key, ciph_data_sm4_cbc_a222_iv,
2513 11, ciph_data_sm4_cbc_a222_in,
2514 ciph_data_sm4_cbc_a222_out),
2515 XTEST_CIPH_CASE(TEE_ALG_SM4_CTR, TEE_TYPE_SM4,
2516 ciph_data_sm4_ctr_a251_key, ciph_data_sm4_ctr_a251_iv,
2517 11, ciph_data_sm4_ctr_a251_in,
2518 ciph_data_sm4_ctr_a251_out),
2519 XTEST_CIPH_CASE(TEE_ALG_SM4_CTR, TEE_TYPE_SM4,
2520 ciph_data_sm4_ctr_a252_key, ciph_data_sm4_ctr_a252_iv,
2521 11, ciph_data_sm4_ctr_a252_in,
2522 ciph_data_sm4_ctr_a252_out),
Pascal Brandc639ac82015-07-02 08:53:34 +02002523};
2524
Jerome Forissier23256842018-02-16 09:25:35 +01002525static void xtest_tee_test_4003(ADBG_Case_t *c)
Pascal Brandc639ac82015-07-02 08:53:34 +02002526{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01002527 TEEC_Session session = { };
2528 TEE_OperationHandle op = TEE_HANDLE_NULL;
Pascal Brandc639ac82015-07-02 08:53:34 +02002529 TEE_ObjectHandle key1_handle = TEE_HANDLE_NULL;
2530 TEE_ObjectHandle key2_handle = TEE_HANDLE_NULL;
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01002531 uint8_t out[2048] = { };
2532 size_t out_size = 0;
2533 size_t out_offs = 0;
2534 uint32_t ret_orig = 0;
2535 size_t n = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +02002536
2537 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2538 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
2539 &ret_orig)))
2540 return;
2541
2542 for (n = 0; n < ARRAY_SIZE(ciph_cases); n++) {
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01002543 TEE_Attribute key_attr = { };
2544 size_t key_size = 0;
2545 size_t op_key_size = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +02002546
2547 Do_ADBG_BeginSubCase(c, "Cipher case %d algo 0x%x line %d",
2548 (int)n, (unsigned int)ciph_cases[n].algo,
2549 (int)ciph_cases[n].line);
2550
2551 key_attr.attributeID = TEE_ATTR_SECRET_VALUE;
2552 key_attr.content.ref.buffer = (void *)ciph_cases[n].key1;
2553 key_attr.content.ref.length = ciph_cases[n].key1_len;
2554
2555 key_size = key_attr.content.ref.length * 8;
2556 if (ciph_cases[n].key_type == TEE_TYPE_DES ||
2557 ciph_cases[n].key_type == TEE_TYPE_DES3)
2558 /* Exclude parity in bit size of key */
2559 key_size -= key_size / 8;
2560
2561 op_key_size = key_size;
2562 if (ciph_cases[n].key2 != NULL)
2563 op_key_size *= 2;
2564
2565 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2566 ta_crypt_cmd_allocate_operation(c, &session, &op,
2567 ciph_cases[n].algo, ciph_cases[n].mode,
2568 op_key_size)))
2569 goto out;
2570
2571 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2572 ta_crypt_cmd_allocate_transient_object(c, &session,
2573 ciph_cases[n].key_type, key_size,
2574 &key1_handle)))
2575 goto out;
2576
2577 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2578 ta_crypt_cmd_populate_transient_object(c, &session,
2579 key1_handle, &key_attr, 1)))
2580 goto out;
2581
2582 if (ciph_cases[n].key2 != NULL) {
2583 key_attr.content.ref.buffer =
2584 (void *)ciph_cases[n].key2;
2585 key_attr.content.ref.length = ciph_cases[n].key2_len;
2586
2587 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2588 ta_crypt_cmd_allocate_transient_object(c,
2589 &session, ciph_cases[n].key_type,
2590 key_attr.content.ref.length * 8,
2591 &key2_handle)))
2592 goto out;
2593
2594 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2595 ta_crypt_cmd_populate_transient_object(c,
2596 &session, key2_handle, &key_attr, 1)))
2597 goto out;
2598
2599 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2600 ta_crypt_cmd_set_operation_key2(c, &session, op,
2601 key1_handle, key2_handle)))
2602 goto out;
2603 } else {
2604 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2605 ta_crypt_cmd_set_operation_key(c, &session, op,
2606 key1_handle)))
2607 goto out;
2608 }
2609
2610 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2611 ta_crypt_cmd_free_transient_object(c, &session,
2612 key1_handle)))
2613 goto out;
2614 key1_handle = TEE_HANDLE_NULL;
2615
2616 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2617 ta_crypt_cmd_free_transient_object(c, &session,
2618 key2_handle)))
2619 goto out;
2620 key2_handle = TEE_HANDLE_NULL;
2621
2622 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2623 ta_crypt_cmd_cipher_init(c, &session, op,
2624 ciph_cases[n].iv, ciph_cases[n].iv_len)))
2625 goto out;
2626
2627 out_offs = 0;
2628 out_size = sizeof(out);
2629 memset(out, 0, sizeof(out));
2630 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2631 ta_crypt_cmd_cipher_update(c, &session, op,
2632 ciph_cases[n].in, ciph_cases[n].in_incr, out,
2633 &out_size)))
2634 goto out;
2635
Jerome Forissierd2d94b42017-06-02 16:39:34 +02002636 if (ciph_cases[n].algo == TEE_ALG_AES_CTR)
2637 ADBG_EXPECT_COMPARE_UNSIGNED(c, out_size, ==,
2638 ciph_cases[n].in_incr);
2639
Pascal Brandc639ac82015-07-02 08:53:34 +02002640 out_offs += out_size;
2641 out_size = sizeof(out) - out_offs;
2642
2643 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2644 ta_crypt_cmd_cipher_do_final(c, &session, op,
2645 ciph_cases[n].in + ciph_cases[n].in_incr,
2646 ciph_cases[n].in_len - ciph_cases[n].in_incr,
2647 out + out_offs,
2648 &out_size)))
2649 goto out;
2650
2651 out_offs += out_size;
2652
2653 (void)ADBG_EXPECT_BUFFER(c, ciph_cases[n].out,
2654 ciph_cases[n].out_len, out, out_offs);
2655
2656 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2657 ta_crypt_cmd_free_operation(c, &session, op)))
2658 goto out;
2659
2660 Do_ADBG_EndSubCase(c, NULL);
2661 }
2662out:
2663 TEEC_CloseSession(&session);
2664}
Jens Wiklander14f48872018-06-29 15:30:13 +02002665ADBG_CASE_DEFINE(regression, 4003, xtest_tee_test_4003,
2666 "Test TEE Internal API cipher operations");
Pascal Brandc639ac82015-07-02 08:53:34 +02002667
Pascal Brandc639ac82015-07-02 08:53:34 +02002668static void xtest_tee_test_4004(ADBG_Case_t *c)
2669{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01002670 TEEC_Session session = { };
2671 uint32_t ret_orig = 0;
2672 uint8_t buf1[45] = { };
2673 uint8_t buf2[45] = { };
2674 static const uint8_t zeros[45];
Pascal Brandc639ac82015-07-02 08:53:34 +02002675
2676 Do_ADBG_BeginSubCase(c, "TEE get random");
2677 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2678 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
2679 &ret_orig)))
2680 return;
2681
2682 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2683 ta_crypt_cmd_random_number_generate(c, &session, buf1,
2684 sizeof(buf1))))
2685 goto out;
2686
2687 (void)ADBG_EXPECT_COMPARE_SIGNED(c,
2688 0, !=, memcmp(buf1, zeros, sizeof(buf1)));
2689
2690 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2691 ta_crypt_cmd_random_number_generate(c, &session, buf2,
2692 sizeof(buf2))))
2693 goto out;
2694
2695 (void)ADBG_EXPECT_COMPARE_SIGNED(c,
2696 0, !=, memcmp(buf2, zeros, sizeof(buf2)));
2697
2698 (void)ADBG_EXPECT_COMPARE_SIGNED(c,
2699 0, !=, memcmp(buf2, buf1, sizeof(buf1)));
2700out:
2701 TEEC_CloseSession(&session);
2702 Do_ADBG_EndSubCase(c, "TEE get random");
2703}
Jens Wiklander14f48872018-06-29 15:30:13 +02002704ADBG_CASE_DEFINE(regression, 4004, xtest_tee_test_4004,
2705 "Test TEE Internal API get random");
Pascal Brandc639ac82015-07-02 08:53:34 +02002706
2707struct xtest_ae_case {
2708 uint32_t algo;
2709 uint32_t mode;
2710 uint32_t key_type;
2711 const uint8_t *key;
2712 size_t key_len;
2713 const uint8_t *nonce;
2714 size_t nonce_len;
2715 size_t aad_incr;
2716 const uint8_t *aad;
2717 size_t aad_len;
2718 size_t in_incr;
2719 const uint8_t *ptx;
2720 size_t ptx_len;
2721 const uint8_t *ctx;
2722 size_t ctx_len;
2723 const uint8_t *tag;
2724 size_t tag_len;
2725 size_t line;
2726};
2727
2728
2729#define ARRAY(a) a, ARRAY_SIZE(a)
2730#define NULL_ARRAY(a) NULL, 0
2731
2732#define XTEST_AE_CASE(algo, vect, aad_incr, in_incr, \
2733 aad_array, ptx_array, ctx_array) \
2734 { (algo), TEE_MODE_ENCRYPT, TEE_TYPE_AES, ARRAY(vect ## _key), \
2735 ARRAY(vect ## _nonce), (aad_incr), \
2736 aad_array(vect ## _aad), (in_incr), \
2737 ptx_array(vect ## _ptx), ctx_array(vect ## _ctx), \
2738 ARRAY(vect ## _tag), \
2739 __LINE__ }, \
2740 { (algo), TEE_MODE_DECRYPT, TEE_TYPE_AES, ARRAY(vect ## _key), \
2741 ARRAY(vect ## _nonce), (aad_incr), \
2742 aad_array(vect ## _aad), (in_incr), \
2743 ptx_array(vect ## _ptx), ctx_array(vect ## _ctx), \
2744 ARRAY(vect ## _tag), \
2745 __LINE__ }
2746
2747#define XTEST_AE_CASE_AES_CCM(vect, aad_incr, in_incr) \
2748 XTEST_AE_CASE(TEE_ALG_AES_CCM, ae_data_aes_ccm_ ## vect, aad_incr, \
2749 in_incr, ARRAY, ARRAY, ARRAY)
2750
2751#define XTEST_AE_CASE_AES_GCM(vect, aad_incr, in_incr, \
2752 aad_array, ptx_array, ctx_array) \
2753 XTEST_AE_CASE(TEE_ALG_AES_GCM, ae_data_aes_gcm_ ## vect, aad_incr, \
2754 in_incr, aad_array, ptx_array, ctx_array)
2755
2756
2757
2758static const struct xtest_ae_case ae_cases[] = {
2759 XTEST_AE_CASE_AES_CCM(vect1, 3, 2),
2760 XTEST_AE_CASE_AES_CCM(vect2, 7, 13),
2761 XTEST_AE_CASE_AES_CCM(vect3, 5, 21),
2762
2763 XTEST_AE_CASE_AES_GCM(vect1, 0, 0, NULL_ARRAY, NULL_ARRAY, NULL_ARRAY),
2764 XTEST_AE_CASE_AES_GCM(vect2, 0, 9, NULL_ARRAY, ARRAY, ARRAY),
2765 XTEST_AE_CASE_AES_GCM(vect3, 0, 9, NULL_ARRAY, ARRAY, ARRAY),
Jens Wiklander9fc63f52017-11-10 11:13:26 +01002766 XTEST_AE_CASE_AES_GCM(vect3, 0, 0x1F, NULL_ARRAY, ARRAY, ARRAY),
2767 XTEST_AE_CASE_AES_GCM(vect4, 5, 0x20, ARRAY, ARRAY, ARRAY),
Pascal Brandc639ac82015-07-02 08:53:34 +02002768 XTEST_AE_CASE_AES_GCM(vect5, 5, 9, ARRAY, ARRAY, ARRAY),
2769 XTEST_AE_CASE_AES_GCM(vect6, 5, 9, ARRAY, ARRAY, ARRAY),
2770 XTEST_AE_CASE_AES_GCM(vect7, 0, 0, NULL_ARRAY, NULL_ARRAY, NULL_ARRAY),
2771 XTEST_AE_CASE_AES_GCM(vect8, 0, 9, NULL_ARRAY, ARRAY, ARRAY),
2772 XTEST_AE_CASE_AES_GCM(vect9, 0, 9, NULL_ARRAY, ARRAY, ARRAY),
2773 XTEST_AE_CASE_AES_GCM(vect10, 5, 9, ARRAY, ARRAY, ARRAY),
2774 XTEST_AE_CASE_AES_GCM(vect11, 5, 9, ARRAY, ARRAY, ARRAY),
2775 XTEST_AE_CASE_AES_GCM(vect12, 5, 9, ARRAY, ARRAY, ARRAY),
2776 XTEST_AE_CASE_AES_GCM(vect13, 0, 0, NULL_ARRAY, NULL_ARRAY, NULL_ARRAY),
2777 XTEST_AE_CASE_AES_GCM(vect14, 0, 9, NULL_ARRAY, ARRAY, ARRAY),
2778 XTEST_AE_CASE_AES_GCM(vect15, 0, 9, NULL_ARRAY, ARRAY, ARRAY),
2779 XTEST_AE_CASE_AES_GCM(vect16, 5, 9, ARRAY, ARRAY, ARRAY),
2780 XTEST_AE_CASE_AES_GCM(vect17, 5, 9, ARRAY, ARRAY, ARRAY),
2781 XTEST_AE_CASE_AES_GCM(vect18, 5, 9, ARRAY, ARRAY, ARRAY),
Jens Wiklanderf6efe242017-11-06 13:16:43 +01002782#ifdef CFG_GCM_NIST_VECTORS
2783#include "gcmDecrypt128.h"
2784#include "gcmDecrypt192.h"
2785#include "gcmDecrypt256.h"
2786#include "gcmEncryptExtIV128.h"
2787#include "gcmEncryptExtIV192.h"
2788#include "gcmEncryptExtIV256.h"
2789#endif
Pascal Brandc639ac82015-07-02 08:53:34 +02002790};
2791
2792static void xtest_tee_test_4005(ADBG_Case_t *c)
2793{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01002794 TEEC_Session session = { };
2795 TEE_OperationHandle op = TEE_HANDLE_NULL;
Pascal Brandc639ac82015-07-02 08:53:34 +02002796 TEE_ObjectHandle key_handle = TEE_HANDLE_NULL;
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01002797 TEE_Attribute key_attr = { };
2798 uint8_t out[512] = { };
2799 size_t out_size = 0;
2800 size_t out_offs = 0;
2801 uint32_t ret_orig = 0;
2802 size_t n = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +02002803
2804 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2805 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
2806 &ret_orig)))
2807 return;
2808
2809 for (n = 0; n < ARRAY_SIZE(ae_cases); n++) {
2810 Do_ADBG_BeginSubCase(c, "AE case %d algo 0x%x line %d",
2811 (int)n, (unsigned int)ae_cases[n].algo,
2812 (int)ae_cases[n].line);
2813
2814 key_attr.attributeID = TEE_ATTR_SECRET_VALUE;
2815 key_attr.content.ref.buffer = (void *)ae_cases[n].key;
2816 key_attr.content.ref.length = ae_cases[n].key_len;
2817
2818 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2819 ta_crypt_cmd_allocate_operation(c, &session, &op,
2820 ae_cases[n].algo, ae_cases[n].mode,
2821 key_attr.content.ref.length * 8)))
2822 goto out;
2823
2824 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2825 ta_crypt_cmd_allocate_transient_object(c, &session,
2826 ae_cases[n].key_type,
2827 key_attr.content.ref.length * 8,
2828 &key_handle)))
2829 goto out;
2830
2831 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2832 ta_crypt_cmd_populate_transient_object(c, &session,
2833 key_handle, &key_attr, 1)))
2834 goto out;
2835
2836 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2837 ta_crypt_cmd_set_operation_key(c, &session, op,
2838 key_handle)))
2839 goto out;
2840
2841 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2842 ta_crypt_cmd_free_transient_object(c, &session,
2843 key_handle)))
2844 goto out;
2845 key_handle = TEE_HANDLE_NULL;
2846
2847 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2848 ta_crypt_cmd_ae_init(c, &session, op, ae_cases[n].nonce,
2849 ae_cases[n].nonce_len, ae_cases[n].tag_len,
2850 ae_cases[n].aad_len, ae_cases[n].ptx_len)))
2851 goto out;
2852
2853 if (ae_cases[n].aad != NULL) {
2854 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2855 ta_crypt_cmd_ae_update_aad(c, &session, op,
2856 ae_cases[n].aad, ae_cases[n].aad_incr)))
2857 goto out;
2858
2859 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2860 ta_crypt_cmd_ae_update_aad(c, &session, op,
2861 ae_cases[n].aad + ae_cases[n].aad_incr,
2862 ae_cases [n].aad_len -
2863 ae_cases[n].aad_incr)))
2864 goto out;
2865 }
2866
2867 out_offs = 0;
2868 out_size = sizeof(out);
2869 memset(out, 0, sizeof(out));
2870 if (ae_cases[n].mode == TEE_MODE_ENCRYPT) {
2871 if (ae_cases[n].ptx != NULL) {
2872 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2873 ta_crypt_cmd_ae_update(c, &session, op,
2874 ae_cases[n].ptx,
2875 ae_cases[n].in_incr, out,
2876 &out_size)))
2877 goto out;
2878 out_offs += out_size;
Jerome Forissierc13fafa2017-06-01 15:49:07 +02002879 if (ae_cases[n].algo == TEE_ALG_AES_GCM)
2880 ADBG_EXPECT_COMPARE_UNSIGNED(c,
2881 out_size, ==, ae_cases[n].in_incr);
Pascal Brandc639ac82015-07-02 08:53:34 +02002882 }
2883 } else {
2884 if (ae_cases[n].ctx != NULL) {
2885 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2886 ta_crypt_cmd_ae_update(c, &session, op,
2887 ae_cases[n].ctx,
2888 ae_cases[n].in_incr, out,
2889 &out_size)))
2890 goto out;
2891 out_offs += out_size;
Jerome Forissierc13fafa2017-06-01 15:49:07 +02002892 if (ae_cases[n].algo == TEE_ALG_AES_GCM)
2893 ADBG_EXPECT_COMPARE_UNSIGNED(c,
2894 out_size, ==, ae_cases[n].in_incr);
Pascal Brandc639ac82015-07-02 08:53:34 +02002895 }
2896 }
2897
2898 out_size = sizeof(out) - out_offs;
2899 if (ae_cases[n].mode == TEE_MODE_ENCRYPT) {
2900 uint8_t out_tag[64];
2901 size_t out_tag_len = MIN(sizeof(out_tag),
2902 ae_cases[n].tag_len);
2903
2904 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2905 ta_crypt_cmd_ae_encrypt_final(c, &session, op,
2906 ae_cases[n].ptx + ae_cases[n].in_incr,
2907 ae_cases[n].ptx_len -
2908 ae_cases[n].in_incr,
2909 out + out_offs,
2910 &out_size, out_tag, &out_tag_len)))
2911 goto out;
2912
2913 (void)ADBG_EXPECT_BUFFER(c,
2914 ae_cases[n].tag, ae_cases[n].tag_len, out_tag,
2915 out_tag_len);
2916
2917 out_offs += out_size;
2918
2919 (void)ADBG_EXPECT_BUFFER(c, ae_cases[n].ctx,
2920 ae_cases[n].ctx_len, out, out_offs);
2921 } else {
2922 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2923 ta_crypt_cmd_ae_decrypt_final(c, &session, op,
2924 ae_cases[n].ctx + ae_cases[n].in_incr,
2925 ae_cases[n].ctx_len -
2926 ae_cases[n].in_incr,
2927 out + out_offs,
2928 &out_size, ae_cases[n].tag,
2929 ae_cases[n].tag_len)))
2930 goto out;
2931
2932 out_offs += out_size;
2933
2934 (void)ADBG_EXPECT_BUFFER(c, ae_cases[n].ptx,
2935 ae_cases[n].ptx_len, out, out_offs);
2936 }
2937
2938 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2939 ta_crypt_cmd_free_operation(c, &session, op)))
2940 goto out;
2941
2942 Do_ADBG_EndSubCase(c, NULL);
2943 }
2944out:
2945 TEEC_CloseSession(&session);
2946}
Jens Wiklander14f48872018-06-29 15:30:13 +02002947ADBG_CASE_DEFINE(regression, 4005, xtest_tee_test_4005,
2948 "Test TEE Internal API Authenticated Encryption operations");
Pascal Brandc639ac82015-07-02 08:53:34 +02002949
2950struct xtest_ac_case {
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02002951 unsigned int level;
Pascal Brandc639ac82015-07-02 08:53:34 +02002952 uint32_t algo;
2953 TEE_OperationMode mode;
2954
2955 union {
2956 struct {
2957 const uint8_t *modulus;
2958 size_t modulus_len;
2959
2960 const uint8_t *pub_exp;
2961 size_t pub_exp_len;
2962
2963 const uint8_t *priv_exp;
2964 size_t priv_exp_len;
2965
2966 const uint8_t *prime1; /* q */
2967 size_t prime1_len;
2968 const uint8_t *prime2; /* p */
2969 size_t prime2_len;
2970 const uint8_t *exp1; /* dp */
2971 size_t exp1_len;
2972 const uint8_t *exp2; /* dq */
2973 size_t exp2_len;
2974 const uint8_t *coeff; /* iq */
2975 size_t coeff_len;
2976
2977 int salt_len;
2978 } rsa;
2979 struct {
2980 const uint8_t *prime;
2981 size_t prime_len;
2982 const uint8_t *sub_prime;
2983 size_t sub_prime_len;
2984 const uint8_t *base;
2985 size_t base_len;
2986 const uint8_t *pub_val;
2987 size_t pub_val_len;
2988 const uint8_t *priv_val;
2989 size_t priv_val_len;
2990 } dsa;
Pascal Brand3e143ee2015-07-15 17:17:16 +02002991 struct {
2992 const uint8_t *private;
2993 size_t private_len;
2994 const uint8_t *public_x;
2995 size_t public_x_len;
2996 const uint8_t *public_y;
2997 size_t public_y_len;
2998 } ecdsa;
Pascal Brandc639ac82015-07-02 08:53:34 +02002999 } params;
3000
3001 const uint8_t *ptx;
3002 size_t ptx_len;
3003 const uint8_t *ctx;
3004 size_t ctx_len;
3005 size_t line;
3006};
3007
3008#define WITHOUT_SALT(x) -1
3009#define WITH_SALT(x) x
3010
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003011#define XTEST_AC_CASE(level, algo, mode, vect, union_params) \
3012 { level, (algo), (mode), .params = union_params, \
Pascal Brandc639ac82015-07-02 08:53:34 +02003013 ARRAY(vect ## _ptx), \
3014 ARRAY(vect ## _out), \
3015 __LINE__ }
3016
3017#define XTEST_AC_RSA_UNION(vect, opt_crt_array, opt_salt) \
3018 { .rsa = { \
3019 ARRAY(vect ## _modulus), \
3020 ARRAY(vect ## _pub_exp), \
3021 ARRAY(vect ## _priv_exp), \
3022 opt_crt_array(vect ## _prime1), \
3023 opt_crt_array(vect ## _prime2), \
3024 opt_crt_array(vect ## _exp1), \
3025 opt_crt_array(vect ## _exp2), \
3026 opt_crt_array(vect ## _coeff), \
3027 opt_salt(vect ## _salt_len) \
3028 } }
3029
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003030#define XTEST_AC_RSA_CASE(level, algo, mode, vect, opt_crt_array, opt_salt) \
3031 XTEST_AC_CASE(level, algo, mode, vect, \
Pascal Brandc639ac82015-07-02 08:53:34 +02003032 XTEST_AC_RSA_UNION(vect, opt_crt_array, opt_salt))
3033
3034#define XTEST_AC_DSA_UNION(vect) \
3035 { .dsa = { \
3036 ARRAY(vect ## _prime), \
3037 ARRAY(vect ## _sub_prime), \
3038 ARRAY(vect ## _base), \
3039 ARRAY(vect ## _pub_val), \
3040 ARRAY(vect ## _priv_val), \
3041 } }
3042
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003043#define XTEST_AC_DSA_CASE(level, algo, mode, vect) \
3044 XTEST_AC_CASE(level, algo, mode, vect, XTEST_AC_DSA_UNION(vect))
Pascal Brandc639ac82015-07-02 08:53:34 +02003045
Pascal Brand3e143ee2015-07-15 17:17:16 +02003046#define XTEST_AC_ECDSA_UNION(vect) \
3047 { .ecdsa = { \
3048 ARRAY(vect ## _private), \
3049 ARRAY(vect ## _public_x), \
3050 ARRAY(vect ## _public_y), \
3051 } }
3052
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003053#define XTEST_AC_ECDSA_CASE(level, algo, mode, vect) \
3054 XTEST_AC_CASE(level, algo, mode, vect, XTEST_AC_ECDSA_UNION(vect))
Pascal Brand3e143ee2015-07-15 17:17:16 +02003055
Pascal Brandc639ac82015-07-02 08:53:34 +02003056static const struct xtest_ac_case xtest_ac_cases[] = {
3057 /* RSA test without crt parameters */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003058 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003059 ac_rsassa_vect1, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003060 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003061 ac_rsassa_vect1, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003062 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003063 ac_rsassa_vect2, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003064 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003065 ac_rsassa_vect2, NULL_ARRAY, WITHOUT_SALT),
Jerome Forissiere576f052018-03-23 21:24:21 +08003066 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_ENCRYPT,
3067 ac_rsassa_vect18, NULL_ARRAY, WITHOUT_SALT),
3068 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_DECRYPT,
3069 ac_rsassa_vect18, NULL_ARRAY, WITHOUT_SALT),
Jerome Forissier0451e372018-03-27 00:10:23 +08003070 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_ENCRYPT,
3071 ac_rsassa_vect19, NULL_ARRAY, WITHOUT_SALT),
3072 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_DECRYPT,
3073 ac_rsassa_vect19, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003074 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003075 ac_rsassa_vect3, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003076 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003077 ac_rsassa_vect3, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003078 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003079 ac_rsassa_vect4, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003080 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003081 ac_rsassa_vect4, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003082 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003083 ac_rsassa_vect5, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003084 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003085 ac_rsassa_vect5, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003086 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003087 ac_rsassa_vect6, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003088 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003089 ac_rsassa_vect6, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003090 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003091 ac_rsassa_vect7, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003092 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003093 ac_rsassa_vect7, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003094 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
3095 ac_rsassa_vect8, NULL_ARRAY, WITHOUT_SALT),
3096 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
3097 ac_rsassa_vect8, NULL_ARRAY, WITHOUT_SALT),
Pascal Brandc639ac82015-07-02 08:53:34 +02003098
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003099 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA224, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003100 ac_rsassa_vect16, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003101 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA224, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003102 ac_rsassa_vect16, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003103
Gabor Szekely2ad190f2018-09-14 14:05:06 +00003104#ifdef CFG_CRYPTO_RSASSA_NA1
3105 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5, TEE_MODE_SIGN,
3106 ac_rsassa_vect20, NULL_ARRAY, WITHOUT_SALT),
3107 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5, TEE_MODE_VERIFY,
3108 ac_rsassa_vect20, NULL_ARRAY, WITHOUT_SALT),
3109#endif
3110
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003111 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA256, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003112 ac_rsassa_vect9, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003113 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA256, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003114 ac_rsassa_vect9, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003115
3116 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA384, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003117 ac_rsassa_vect10, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003118 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA384, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003119 ac_rsassa_vect10, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003120
3121 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA512, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003122 ac_rsassa_vect11, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003123 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA512, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003124 ac_rsassa_vect11, NULL_ARRAY, WITHOUT_SALT),
3125
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003126 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA1,
3127 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003128 ac_rsassa_vect12, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003129 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003130 ac_rsassa_vect12, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003131
3132 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA224,
3133 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003134 ac_rsassa_vect17, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003135 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA224,
3136 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003137 ac_rsassa_vect17, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003138
3139 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA256,
3140 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003141 ac_rsassa_vect13, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003142 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA256,
3143 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003144 ac_rsassa_vect13, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003145
3146 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA384,
3147 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003148 ac_rsassa_vect14, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003149 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA384,
3150 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003151 ac_rsassa_vect14, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003152
3153 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA512,
3154 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003155 ac_rsassa_vect15, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003156 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA512,
3157 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003158 ac_rsassa_vect15, NULL_ARRAY, WITH_SALT),
3159
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003160 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003161 ac_rsaes_pkcs1_v1_5_vect1, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003162 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003163 ac_rsaes_pkcs1_v1_5_vect1, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003164 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003165 ac_rsaes_pkcs1_v1_5_vect2, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003166 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003167 ac_rsaes_pkcs1_v1_5_vect2, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003168 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003169 ac_rsaes_pkcs1_v1_5_vect15, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003170 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003171 ac_rsaes_pkcs1_v1_5_vect15, NULL_ARRAY, WITHOUT_SALT),
3172
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003173 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3174 TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003175 ac_rsaes_oaep_vect1, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003176 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3177 TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003178 ac_rsaes_oaep_vect1, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003179 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3180 TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003181 ac_rsaes_oaep_vect2, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003182 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3183 TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003184 ac_rsaes_oaep_vect2, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003185 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3186 TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003187 ac_rsaes_oaep_vect10, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003188 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3189 TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003190 ac_rsaes_oaep_vect10, NULL_ARRAY, WITHOUT_SALT),
3191
3192 /* RSA test with crt parameters */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003193 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003194 ac_rsassa_vect1, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003195 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003196 ac_rsassa_vect1, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003197 XTEST_AC_RSA_CASE(1, TEE_ALG_RSA_NOPAD, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003198 ac_rsassa_vect2, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003199 XTEST_AC_RSA_CASE(1, TEE_ALG_RSA_NOPAD, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003200 ac_rsassa_vect2, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003201 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003202 ac_rsassa_vect3, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003203 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003204 ac_rsassa_vect3, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003205 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003206 ac_rsassa_vect4, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003207 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003208 ac_rsassa_vect4, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003209 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003210 ac_rsassa_vect5, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003211 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003212 ac_rsassa_vect5, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003213 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003214 ac_rsassa_vect6, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003215 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003216 ac_rsassa_vect6, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003217 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003218 ac_rsassa_vect7, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003219 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003220 ac_rsassa_vect7, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003221 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003222 ac_rsassa_vect8, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003223 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003224 ac_rsassa_vect8, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003225 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA256, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003226 ac_rsassa_vect9, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003227 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA256, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003228 ac_rsassa_vect9, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003229 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA384, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003230 ac_rsassa_vect10, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003231 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA384, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003232 ac_rsassa_vect10, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003233 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA512, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003234 ac_rsassa_vect11, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003235 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA512, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003236 ac_rsassa_vect11, ARRAY, WITHOUT_SALT),
3237
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003238 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA1,
3239 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003240 ac_rsassa_vect12, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003241 XTEST_AC_RSA_CASE(1,TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003242 ac_rsassa_vect12, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003243 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA224,
3244 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003245 ac_rsassa_vect17, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003246 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA224,
3247 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003248 ac_rsassa_vect17, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003249 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA256,
3250 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003251 ac_rsassa_vect13, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003252 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA256,
3253 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003254 ac_rsassa_vect13, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003255 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA384,
3256 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003257 ac_rsassa_vect14, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003258 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA384,
3259 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003260 ac_rsassa_vect14, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003261 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA512,
3262 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003263 ac_rsassa_vect15, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003264 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA512,
3265 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003266 ac_rsassa_vect15, ARRAY, WITH_SALT),
3267
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003268 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003269 ac_rsaes_pkcs1_v1_5_vect1, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003270 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003271 ac_rsaes_pkcs1_v1_5_vect1, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003272 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003273 ac_rsaes_pkcs1_v1_5_vect2, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003274 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003275 ac_rsaes_pkcs1_v1_5_vect2, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003276 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003277 ac_rsaes_pkcs1_v1_5_vect15, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003278 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003279 ac_rsaes_pkcs1_v1_5_vect15, ARRAY, WITHOUT_SALT),
3280
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003281 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3282 TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003283 ac_rsaes_oaep_vect1, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003284 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3285 TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003286 ac_rsaes_oaep_vect1, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003287 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3288 TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003289 ac_rsaes_oaep_vect2, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003290 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3291 TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003292 ac_rsaes_oaep_vect2, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003293 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3294 TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003295 ac_rsaes_oaep_vect10, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003296 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3297 TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003298 ac_rsaes_oaep_vect10, ARRAY, WITHOUT_SALT),
3299
3300 /* DSA tests */
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003301 /* [mod = L=1024, N=160, SHA-1] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003302 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect1),
3303 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect1),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003304 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect2),
3305 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect2),
3306 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect3),
3307 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect3),
3308 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect4),
3309 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect4),
3310 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect5),
3311 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect5),
3312 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect6),
3313 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect6),
3314 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect7),
3315 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect7),
3316 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect8),
3317 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect8),
3318 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect9),
3319 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect9),
3320 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect10),
3321 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect10),
3322 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect11),
3323 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect11),
3324 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect12),
3325 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect12),
3326 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect13),
3327 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect13),
3328 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect14),
3329 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect14),
3330 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect15),
3331 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect15),
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003332 /* [mod = L=1024, N=160, SHA-224] - GP NOT SUPPORTED */
3333 /* [mod = L=1024, N=160, SHA-256] - GP NOT SUPPORTED */
3334 /* [mod = L=1024, N=160, SHA-384] - GP NOT SUPPORTED */
3335 /* [mod = L=1024, N=160, SHA-512] - GP NOT SUPPORTED */
3336 /* [mod = L=2048, N=224, SHA-1] - GP NOT SUPPORTED */
3337 /* [mod = L=2048, N=224, SHA-224] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003338 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect91),
3339 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect91),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003340 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect92),
3341 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect92),
3342 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect93),
3343 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect93),
3344 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect94),
3345 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect94),
3346 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect95),
3347 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect95),
3348 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect96),
3349 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect96),
3350 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect97),
3351 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect97),
3352 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect98),
3353 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect98),
3354 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect99),
3355 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect99),
3356 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect100),
3357 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect100),
3358 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect101),
3359 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect101),
3360 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect102),
3361 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect102),
3362 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect103),
3363 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect103),
3364 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect104),
3365 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect104),
3366 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect105),
3367 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect105),
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003368 /* [mod = L=2048, N=224, SHA-256] */
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003369 XTEST_AC_DSA_CASE(0, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect106),
3370 XTEST_AC_DSA_CASE(0, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect106),
3371 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect107),
3372 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect107),
3373 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect108),
3374 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect108),
3375 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect109),
3376 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect109),
3377 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect110),
3378 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect110),
3379 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect111),
3380 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect111),
3381 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect112),
3382 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect112),
3383 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect113),
3384 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect113),
3385 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect114),
3386 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect114),
3387 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect115),
3388 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect115),
3389 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect116),
3390 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect116),
3391 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect117),
3392 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect117),
3393 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect118),
3394 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect118),
3395 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect119),
3396 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect119),
3397 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect120),
3398 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect120),
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003399 /* [mod = L=2048, N=224, SHA-384] - GP NOT SUPPORTED */
3400 /* [mod = L=2048, N=224, SHA-512] - GP NOT SUPPORTED */
3401 /* [mod = L=2048, N=256, SHA-1] - GP NOT SUPPORTED */
3402 /* [mod = L=2048, N=256, SHA-224] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003403 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect166),
3404 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect166),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003405 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect167),
3406 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect167),
3407 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect168),
3408 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect168),
3409 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect169),
3410 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect169),
3411 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect170),
3412 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect170),
3413 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect171),
3414 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect171),
3415 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect172),
3416 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect172),
3417 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect173),
3418 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect173),
3419 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect174),
3420 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect174),
3421 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect175),
3422 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect175),
3423 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect176),
3424 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect176),
3425 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect177),
3426 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect177),
3427 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect178),
3428 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect178),
3429 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect179),
3430 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect179),
3431 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect180),
3432 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect180),
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003433 /* [mod = L=2048, N=256, SHA-256] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003434 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect181),
3435 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect181),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003436 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect182),
3437 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect182),
3438 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect183),
3439 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect183),
3440 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect184),
3441 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect184),
3442 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect185),
3443 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect185),
3444 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect186),
3445 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect186),
3446 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect187),
3447 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect187),
3448 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect188),
3449 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect188),
3450 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect189),
3451 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect189),
3452 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect190),
3453 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect190),
3454 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect191),
3455 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect191),
3456 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect192),
3457 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect192),
3458 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect193),
3459 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect193),
3460 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect194),
3461 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect194),
3462 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect195),
3463 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect195),
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003464 /* [mod = L=2048, N=256, SHA-384] - GP NOT SUPPORTED */
3465 /* [mod = L=2048, N=256, SHA-512] - GP NOT SUPPORTED */
3466 /* [mod = L=3072, N=256, SHA-1] - GP NOT SUPPORTED */
3467 /* [mod = L=3072, N=256, SHA-224] - GP NOT SUPPORTED */
3468 /* [mod = L=3072, N=256, SHA-256] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003469 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect256),
3470 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect256),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003471 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect257),
3472 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect257),
3473 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect258),
3474 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect258),
3475 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect259),
3476 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect259),
3477 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect260),
3478 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect260),
3479 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect261),
3480 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect261),
3481 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect262),
3482 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect262),
3483 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect263),
3484 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect263),
3485 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect264),
3486 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect264),
3487 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect265),
3488 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect265),
3489 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect266),
3490 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect266),
3491 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect267),
3492 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect267),
3493 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect268),
3494 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect268),
3495 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect269),
3496 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect269),
3497 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect270),
3498 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect270),
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003499 /* [mod = L=3072, N=256, SHA-384] - GP NOT SUPPORTED */
3500 /* [mod = L=3072, N=256, SHA-512] - GP NOT SUPPORTED */
Pascal Brand3e143ee2015-07-15 17:17:16 +02003501
3502 /* ECDSA tests */
Cedric Chaumontc7654962015-09-09 14:56:36 +02003503 /* [P-192] */
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003504 XTEST_AC_ECDSA_CASE(0, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003505 nist_186_2_ecdsa_testvector_1),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003506 XTEST_AC_ECDSA_CASE(0, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003507 nist_186_2_ecdsa_testvector_1),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003508 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003509 nist_186_2_ecdsa_testvector_2),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003510 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003511 nist_186_2_ecdsa_testvector_2),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003512 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003513 nist_186_2_ecdsa_testvector_3),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003514 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003515 nist_186_2_ecdsa_testvector_3),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003516 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003517 nist_186_2_ecdsa_testvector_4),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003518 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003519 nist_186_2_ecdsa_testvector_4),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003520 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003521 nist_186_2_ecdsa_testvector_5),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003522 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003523 nist_186_2_ecdsa_testvector_5),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003524 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003525 nist_186_2_ecdsa_testvector_6),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003526 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003527 nist_186_2_ecdsa_testvector_6),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003528 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003529 nist_186_2_ecdsa_testvector_7),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003530 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003531 nist_186_2_ecdsa_testvector_7),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003532 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003533 nist_186_2_ecdsa_testvector_8),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003534 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003535 nist_186_2_ecdsa_testvector_8),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003536 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003537 nist_186_2_ecdsa_testvector_9),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003538 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003539 nist_186_2_ecdsa_testvector_9),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003540 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003541 nist_186_2_ecdsa_testvector_10),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003542 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003543 nist_186_2_ecdsa_testvector_10),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003544 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003545 nist_186_2_ecdsa_testvector_11),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003546 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003547 nist_186_2_ecdsa_testvector_11),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003548 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003549 nist_186_2_ecdsa_testvector_12),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003550 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003551 nist_186_2_ecdsa_testvector_12),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003552 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003553 nist_186_2_ecdsa_testvector_13),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003554 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003555 nist_186_2_ecdsa_testvector_13),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003556 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003557 nist_186_2_ecdsa_testvector_14),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003558 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003559 nist_186_2_ecdsa_testvector_14),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003560 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003561 nist_186_2_ecdsa_testvector_15),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003562 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003563 nist_186_2_ecdsa_testvector_15),
3564 /* [P-224] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003565 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003566 nist_186_2_ecdsa_testvector_16),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003567 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003568 nist_186_2_ecdsa_testvector_16),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003569 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003570 nist_186_2_ecdsa_testvector_17),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003571 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003572 nist_186_2_ecdsa_testvector_17),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003573 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003574 nist_186_2_ecdsa_testvector_18),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003575 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003576 nist_186_2_ecdsa_testvector_18),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003577 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003578 nist_186_2_ecdsa_testvector_19),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003579 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003580 nist_186_2_ecdsa_testvector_19),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003581 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003582 nist_186_2_ecdsa_testvector_20),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003583 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003584 nist_186_2_ecdsa_testvector_20),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003585 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003586 nist_186_2_ecdsa_testvector_21),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003587 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003588 nist_186_2_ecdsa_testvector_21),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003589 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003590 nist_186_2_ecdsa_testvector_22),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003591 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003592 nist_186_2_ecdsa_testvector_22),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003593 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003594 nist_186_2_ecdsa_testvector_23),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003595 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003596 nist_186_2_ecdsa_testvector_23),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003597 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003598 nist_186_2_ecdsa_testvector_24),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003599 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003600 nist_186_2_ecdsa_testvector_24),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003601 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003602 nist_186_2_ecdsa_testvector_25),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003603 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003604 nist_186_2_ecdsa_testvector_25),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003605 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003606 nist_186_2_ecdsa_testvector_26),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003607 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003608 nist_186_2_ecdsa_testvector_26),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003609 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003610 nist_186_2_ecdsa_testvector_27),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003611 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003612 nist_186_2_ecdsa_testvector_27),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003613 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003614 nist_186_2_ecdsa_testvector_28),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003615 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003616 nist_186_2_ecdsa_testvector_28),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003617 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003618 nist_186_2_ecdsa_testvector_29),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003619 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003620 nist_186_2_ecdsa_testvector_29),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003621 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003622 nist_186_2_ecdsa_testvector_30),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003623 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003624 nist_186_2_ecdsa_testvector_30),
3625 /* [P-256] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003626 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003627 nist_186_2_ecdsa_testvector_31),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003628 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003629 nist_186_2_ecdsa_testvector_31),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003630 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003631 nist_186_2_ecdsa_testvector_32),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003632 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003633 nist_186_2_ecdsa_testvector_32),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003634 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003635 nist_186_2_ecdsa_testvector_33),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003636 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003637 nist_186_2_ecdsa_testvector_33),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003638 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003639 nist_186_2_ecdsa_testvector_34),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003640 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003641 nist_186_2_ecdsa_testvector_34),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003642 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003643 nist_186_2_ecdsa_testvector_35),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003644 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003645 nist_186_2_ecdsa_testvector_35),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003646 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003647 nist_186_2_ecdsa_testvector_36),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003648 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003649 nist_186_2_ecdsa_testvector_36),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003650 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003651 nist_186_2_ecdsa_testvector_37),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003652 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003653 nist_186_2_ecdsa_testvector_37),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003654 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003655 nist_186_2_ecdsa_testvector_38),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003656 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003657 nist_186_2_ecdsa_testvector_38),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003658 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003659 nist_186_2_ecdsa_testvector_39),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003660 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003661 nist_186_2_ecdsa_testvector_39),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003662 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003663 nist_186_2_ecdsa_testvector_40),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003664 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003665 nist_186_2_ecdsa_testvector_40),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003666 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003667 nist_186_2_ecdsa_testvector_41),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003668 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003669 nist_186_2_ecdsa_testvector_41),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003670 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003671 nist_186_2_ecdsa_testvector_42),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003672 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003673 nist_186_2_ecdsa_testvector_42),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003674 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003675 nist_186_2_ecdsa_testvector_43),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003676 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003677 nist_186_2_ecdsa_testvector_43),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003678 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003679 nist_186_2_ecdsa_testvector_44),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003680 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003681 nist_186_2_ecdsa_testvector_44),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003682 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003683 nist_186_2_ecdsa_testvector_45),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003684 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003685 nist_186_2_ecdsa_testvector_45),
3686 /* [P-384] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003687 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003688 nist_186_2_ecdsa_testvector_46),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003689 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003690 nist_186_2_ecdsa_testvector_46),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003691 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003692 nist_186_2_ecdsa_testvector_47),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003693 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003694 nist_186_2_ecdsa_testvector_47),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003695 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003696 nist_186_2_ecdsa_testvector_48),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003697 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003698 nist_186_2_ecdsa_testvector_48),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003699 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003700 nist_186_2_ecdsa_testvector_49),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003701 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003702 nist_186_2_ecdsa_testvector_49),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003703 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003704 nist_186_2_ecdsa_testvector_50),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003705 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003706 nist_186_2_ecdsa_testvector_50),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003707 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003708 nist_186_2_ecdsa_testvector_51),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003709 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003710 nist_186_2_ecdsa_testvector_51),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003711 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003712 nist_186_2_ecdsa_testvector_52),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003713 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003714 nist_186_2_ecdsa_testvector_52),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003715 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003716 nist_186_2_ecdsa_testvector_53),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003717 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003718 nist_186_2_ecdsa_testvector_53),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003719 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003720 nist_186_2_ecdsa_testvector_54),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003721 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003722 nist_186_2_ecdsa_testvector_54),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003723 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003724 nist_186_2_ecdsa_testvector_55),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003725 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003726 nist_186_2_ecdsa_testvector_55),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003727 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003728 nist_186_2_ecdsa_testvector_56),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003729 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003730 nist_186_2_ecdsa_testvector_56),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003731 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003732 nist_186_2_ecdsa_testvector_57),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003733 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003734 nist_186_2_ecdsa_testvector_57),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003735 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003736 nist_186_2_ecdsa_testvector_58),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003737 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003738 nist_186_2_ecdsa_testvector_58),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003739 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003740 nist_186_2_ecdsa_testvector_59),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003741 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003742 nist_186_2_ecdsa_testvector_59),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003743 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003744 nist_186_2_ecdsa_testvector_60),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003745 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003746 nist_186_2_ecdsa_testvector_60),
3747 /* [P-521] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003748 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003749 nist_186_2_ecdsa_testvector_61),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003750 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003751 nist_186_2_ecdsa_testvector_61),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003752 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003753 nist_186_2_ecdsa_testvector_62),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003754 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003755 nist_186_2_ecdsa_testvector_62),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003756 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003757 nist_186_2_ecdsa_testvector_63),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003758 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003759 nist_186_2_ecdsa_testvector_63),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003760 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003761 nist_186_2_ecdsa_testvector_64),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003762 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003763 nist_186_2_ecdsa_testvector_64),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003764 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003765 nist_186_2_ecdsa_testvector_65),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003766 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003767 nist_186_2_ecdsa_testvector_65),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003768 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003769 nist_186_2_ecdsa_testvector_66),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003770 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003771 nist_186_2_ecdsa_testvector_66),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003772 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003773 nist_186_2_ecdsa_testvector_67),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003774 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003775 nist_186_2_ecdsa_testvector_67),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003776 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003777 nist_186_2_ecdsa_testvector_68),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003778 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003779 nist_186_2_ecdsa_testvector_68),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003780 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003781 nist_186_2_ecdsa_testvector_69),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003782 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003783 nist_186_2_ecdsa_testvector_69),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003784 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003785 nist_186_2_ecdsa_testvector_70),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003786 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003787 nist_186_2_ecdsa_testvector_70),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003788 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003789 nist_186_2_ecdsa_testvector_71),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003790 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003791 nist_186_2_ecdsa_testvector_71),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003792 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003793 nist_186_2_ecdsa_testvector_72),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003794 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003795 nist_186_2_ecdsa_testvector_72),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003796 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003797 nist_186_2_ecdsa_testvector_73),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003798 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003799 nist_186_2_ecdsa_testvector_73),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003800 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003801 nist_186_2_ecdsa_testvector_74),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003802 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003803 nist_186_2_ecdsa_testvector_74),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003804 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003805 nist_186_2_ecdsa_testvector_75),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003806 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003807 nist_186_2_ecdsa_testvector_75),
3808 /* [K-163] - GP NOT SUPPORTED */
3809 /* [K-233] - GP NOT SUPPORTED */
3810 /* [K-283] - GP NOT SUPPORTED */
3811 /* [K-409] - GP NOT SUPPORTED */
3812 /* [K-571] - GP NOT SUPPORTED */
3813 /* [B-163] - GP NOT SUPPORTED */
3814 /* [B-233] - GP NOT SUPPORTED */
3815 /* [B-283] - GP NOT SUPPORTED */
3816 /* [B-409] - GP NOT SUPPORTED */
3817 /* [B-571] - GP NOT SUPPORTED */
Pascal Brandc639ac82015-07-02 08:53:34 +02003818};
3819
3820static bool create_key(ADBG_Case_t *c, TEEC_Session *s,
3821 uint32_t max_key_size, uint32_t key_type,
3822 TEE_Attribute *attrs, size_t num_attrs,
3823 TEE_ObjectHandle *handle)
3824{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01003825 size_t n = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +02003826
3827 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3828 ta_crypt_cmd_allocate_transient_object(c, s, key_type,
3829 max_key_size, handle)))
3830 return false;
3831
3832 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3833 ta_crypt_cmd_populate_transient_object(c, s, *handle, attrs,
3834 num_attrs)))
3835 return false;
3836
3837 for (n = 0; n < num_attrs; n++) {
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01003838 uint8_t out[512] = { };
3839 size_t out_size = sizeof(out);
Pascal Brand3e143ee2015-07-15 17:17:16 +02003840
3841 if (attrs[n].attributeID == TEE_ATTR_ECC_CURVE)
3842 continue;
3843
Pascal Brandc639ac82015-07-02 08:53:34 +02003844 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3845 ta_crypt_cmd_get_object_buffer_attribute(c, s, *handle,
3846 attrs[n].attributeID, out, &out_size)))
3847 return false;
3848
Pascal Brand3e143ee2015-07-15 17:17:16 +02003849 if (out_size < attrs[n].content.ref.length) {
3850 memmove(out + (attrs[n].content.ref.length - out_size),
3851 out,
3852 attrs[n].content.ref.length);
3853 memset(out, 0, attrs[n].content.ref.length - out_size);
3854 out_size = attrs[n].content.ref.length;
3855 }
3856
Pascal Brandc639ac82015-07-02 08:53:34 +02003857 if (!ADBG_EXPECT_BUFFER(c, attrs[n].content.ref.buffer,
3858 attrs[n].content.ref.length, out, out_size))
3859 return false;
3860 }
3861
3862 return true;
3863}
3864
3865static void xtest_tee_test_4006(ADBG_Case_t *c)
3866{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01003867 TEEC_Session session = { };
Pascal Brandc639ac82015-07-02 08:53:34 +02003868 TEE_OperationHandle op = TEE_HANDLE_NULL;
3869 TEE_ObjectHandle priv_key_handle = TEE_HANDLE_NULL;
3870 TEE_ObjectHandle pub_key_handle = TEE_HANDLE_NULL;
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01003871 TEE_Attribute key_attrs[8] = { };
3872 TEE_Attribute algo_params[1] = { };
3873 size_t num_algo_params = 0;
3874 uint8_t out[512] = { };
3875 size_t out_size = 0;
3876 uint8_t out_enc[512] = { };
3877 size_t out_enc_size = 0;
3878 uint8_t ptx_hash[TEE_MAX_HASH_SIZE] = { };
Etienne Carriere481c6602019-01-22 13:27:26 +01003879 size_t ptx_hash_size = 0;
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01003880 size_t max_key_size = 0;
3881 size_t num_key_attrs = 0;
3882 uint32_t ret_orig = 0;
3883 size_t n = 0;
3884 uint32_t curve = 0;
3885 uint32_t hash_algo = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +02003886
3887 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3888 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
3889 &ret_orig)))
3890 return;
3891
3892 for (n = 0; n < ARRAY_SIZE(xtest_ac_cases); n++) {
3893 const struct xtest_ac_case *tv = xtest_ac_cases + n;
3894
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003895 if (tv->level > level)
3896 continue;
3897
Pascal Brandc639ac82015-07-02 08:53:34 +02003898 Do_ADBG_BeginSubCase(c, "Asym Crypto case %d algo 0x%x line %d",
3899 (int)n, (unsigned int)tv->algo,
3900 (int)tv->line);
3901
3902 /*
3903 * When signing or verifying we're working with the hash of
3904 * the payload.
3905 */
3906 if (tv->mode == TEE_MODE_VERIFY || tv->mode == TEE_MODE_SIGN) {
Pascal Brand3e143ee2015-07-15 17:17:16 +02003907 if (TEE_ALG_GET_MAIN_ALG(tv->algo) == TEE_MAIN_ALGO_ECDSA)
3908 hash_algo = TEE_ALG_SHA1;
Gabor Szekely2ad190f2018-09-14 14:05:06 +00003909#if defined(CFG_CRYPTO_RSASSA_NA1)
3910 else if (tv->algo == TEE_ALG_RSASSA_PKCS1_V1_5)
3911 hash_algo = TEE_ALG_SHA256;
3912#endif
Pascal Brand3e143ee2015-07-15 17:17:16 +02003913 else
3914 hash_algo = TEE_ALG_HASH_ALGO(
3915 TEE_ALG_GET_DIGEST_HASH(tv->algo));
Pascal Brandc639ac82015-07-02 08:53:34 +02003916
3917 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3918 ta_crypt_cmd_allocate_operation(c, &session,
3919 &op, hash_algo, TEE_MODE_DIGEST, 0)))
3920 goto out;
3921
3922 ptx_hash_size = sizeof(ptx_hash);
3923 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3924 ta_crypt_cmd_digest_do_final(c, & session, op,
3925 tv->ptx, tv->ptx_len, ptx_hash,
3926 &ptx_hash_size)))
3927 goto out;
3928
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003929 /*
3930 * When we use DSA algorithms, the size of the hash we
3931 * consider equals the min between the size of the
3932 * "subprime" in the key and the size of the hash
3933 */
3934 if (TEE_ALG_GET_MAIN_ALG(tv->algo) ==
3935 TEE_MAIN_ALGO_DSA) {
3936 if (tv->params.dsa.sub_prime_len <=
3937 ptx_hash_size)
3938 ptx_hash_size =
3939 tv->params.dsa.sub_prime_len;
3940 }
3941
Pascal Brandc639ac82015-07-02 08:53:34 +02003942 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3943 ta_crypt_cmd_free_operation(c, &session, op)))
3944 goto out;
3945 }
3946
3947 num_algo_params = 0;
3948 num_key_attrs = 0;
3949 switch (TEE_ALG_GET_MAIN_ALG(tv->algo)) {
3950 case TEE_MAIN_ALGO_RSA:
3951 if (tv->params.rsa.salt_len > 0) {
3952 algo_params[0].attributeID =
3953 TEE_ATTR_RSA_PSS_SALT_LENGTH;
3954 algo_params[0].content.value.a =
3955 tv->params.rsa.salt_len;
3956 algo_params[0].content.value.b = 0;
3957 num_algo_params = 1;
3958 }
3959
3960 max_key_size = tv->params.rsa.modulus_len * 8;
3961
3962 xtest_add_attr(&num_key_attrs, key_attrs,
3963 TEE_ATTR_RSA_MODULUS,
3964 tv->params.rsa.modulus,
3965 tv->params.rsa.modulus_len);
3966 xtest_add_attr(&num_key_attrs, key_attrs,
3967 TEE_ATTR_RSA_PUBLIC_EXPONENT,
3968 tv->params.rsa.pub_exp,
3969 tv->params.rsa.pub_exp_len);
3970
3971 if (!ADBG_EXPECT_TRUE(c,
3972 create_key(c, &session,
3973 max_key_size,
3974 TEE_TYPE_RSA_PUBLIC_KEY,
3975 key_attrs,
3976 num_key_attrs,
3977 &pub_key_handle)))
3978 goto out;
3979
3980 xtest_add_attr(&num_key_attrs, key_attrs,
3981 TEE_ATTR_RSA_PRIVATE_EXPONENT,
3982 tv->params.rsa.priv_exp,
3983 tv->params.rsa.priv_exp_len);
3984
3985 if (tv->params.rsa.prime1_len != 0) {
3986 xtest_add_attr(&num_key_attrs, key_attrs,
3987 TEE_ATTR_RSA_PRIME1,
3988 tv->params.rsa.prime1,
3989 tv->params.rsa.prime1_len);
3990 }
3991
3992 if (tv->params.rsa.prime2_len != 0) {
3993 xtest_add_attr(&num_key_attrs, key_attrs,
3994 TEE_ATTR_RSA_PRIME2,
3995 tv->params.rsa.prime2,
3996 tv->params.rsa.prime2_len);
3997 }
3998
3999 if (tv->params.rsa.exp1_len != 0) {
4000 xtest_add_attr(&num_key_attrs, key_attrs,
4001 TEE_ATTR_RSA_EXPONENT1,
4002 tv->params.rsa.exp1,
4003 tv->params.rsa.exp1_len);
4004 }
4005
4006 if (tv->params.rsa.exp2_len != 0) {
4007 xtest_add_attr(&num_key_attrs, key_attrs,
4008 TEE_ATTR_RSA_EXPONENT2,
4009 tv->params.rsa.exp2,
4010 tv->params.rsa.exp2_len);
4011 }
4012
4013 if (tv->params.rsa.coeff_len != 0) {
4014 xtest_add_attr(&num_key_attrs, key_attrs,
4015 TEE_ATTR_RSA_COEFFICIENT,
4016 tv->params.rsa.coeff,
4017 tv->params.rsa.coeff_len);
4018 }
4019
4020 if (!ADBG_EXPECT_TRUE(c,
4021 create_key(c, &session,
4022 max_key_size,
4023 TEE_TYPE_RSA_KEYPAIR,
4024 key_attrs,
4025 num_key_attrs,
4026 &priv_key_handle)))
4027 goto out;
4028 break;
4029
4030 case TEE_MAIN_ALGO_DSA:
4031 max_key_size = tv->params.dsa.prime_len * 8;
4032
4033 xtest_add_attr(&num_key_attrs, key_attrs,
4034 TEE_ATTR_DSA_PRIME,
4035 tv->params.dsa.prime,
4036 tv->params.dsa.prime_len);
4037 xtest_add_attr(&num_key_attrs, key_attrs,
4038 TEE_ATTR_DSA_SUBPRIME,
4039 tv->params.dsa.sub_prime,
4040 tv->params.dsa.sub_prime_len);
4041 xtest_add_attr(&num_key_attrs, key_attrs,
4042 TEE_ATTR_DSA_BASE,
4043 tv->params.dsa.base,
4044 tv->params.dsa.base_len);
4045 xtest_add_attr(&num_key_attrs, key_attrs,
4046 TEE_ATTR_DSA_PUBLIC_VALUE,
4047 tv->params.dsa.pub_val,
4048 tv->params.dsa.pub_val_len);
4049
4050 if (!ADBG_EXPECT_TRUE(c,
4051 create_key(c, &session, max_key_size,
4052 TEE_TYPE_DSA_PUBLIC_KEY, key_attrs,
4053 num_key_attrs, &pub_key_handle)))
4054 goto out;
4055
4056 xtest_add_attr(&num_key_attrs, key_attrs,
4057 TEE_ATTR_DSA_PRIVATE_VALUE,
4058 tv->params.dsa.priv_val,
4059 tv->params.dsa.priv_val_len);
4060
4061 if (!ADBG_EXPECT_TRUE(c,
4062 create_key(c, &session, max_key_size,
4063 TEE_TYPE_DSA_KEYPAIR, key_attrs,
4064 num_key_attrs, &priv_key_handle)))
4065 goto out;
4066 break;
4067
Pascal Brand3e143ee2015-07-15 17:17:16 +02004068 case TEE_MAIN_ALGO_ECDSA:
4069 switch (tv->algo) {
4070 case TEE_ALG_ECDSA_P192:
4071 curve = TEE_ECC_CURVE_NIST_P192;
4072 break;
4073 case TEE_ALG_ECDSA_P224:
4074 curve = TEE_ECC_CURVE_NIST_P224;
4075 break;
4076 case TEE_ALG_ECDSA_P256:
4077 curve = TEE_ECC_CURVE_NIST_P256;
4078 break;
4079 case TEE_ALG_ECDSA_P384:
4080 curve = TEE_ECC_CURVE_NIST_P384;
4081 break;
4082 case TEE_ALG_ECDSA_P521:
4083 curve = TEE_ECC_CURVE_NIST_P521;
4084 break;
4085 default:
4086 curve = 0xFF;
4087 break;
4088 }
4089
4090 if (tv->algo == TEE_ALG_ECDSA_P521)
4091 max_key_size = 521;
4092 else
4093 max_key_size = tv->params.ecdsa.private_len * 8;
4094
4095 xtest_add_attr_value(&num_key_attrs, key_attrs,
4096 TEE_ATTR_ECC_CURVE, curve, 0);
4097 xtest_add_attr(&num_key_attrs, key_attrs,
4098 TEE_ATTR_ECC_PUBLIC_VALUE_X,
4099 tv->params.ecdsa.public_x,
4100 tv->params.ecdsa.public_x_len);
4101 xtest_add_attr(&num_key_attrs, key_attrs,
4102 TEE_ATTR_ECC_PUBLIC_VALUE_Y,
4103 tv->params.ecdsa.public_y,
4104 tv->params.ecdsa.public_y_len);
4105
4106 if (!ADBG_EXPECT_TRUE(c,
4107 create_key(c, &session, max_key_size,
4108 TEE_TYPE_ECDSA_PUBLIC_KEY, key_attrs,
4109 num_key_attrs, &pub_key_handle)))
4110 goto out;
4111
4112 xtest_add_attr(&num_key_attrs, key_attrs,
4113 TEE_ATTR_ECC_PRIVATE_VALUE,
4114 tv->params.ecdsa.private,
4115 tv->params.ecdsa.private_len);
4116
4117 if (!ADBG_EXPECT_TRUE(c,
4118 create_key(c, &session, max_key_size,
4119 TEE_TYPE_ECDSA_KEYPAIR, key_attrs,
4120 num_key_attrs, &priv_key_handle)))
4121 goto out;
4122 break;
4123
Pascal Brandc639ac82015-07-02 08:53:34 +02004124 default:
4125 ADBG_EXPECT_TRUE(c, false);
4126 goto out;
4127 }
4128
4129 out_size = sizeof(out);
4130 memset(out, 0, sizeof(out));
4131 switch (tv->mode) {
4132 case TEE_MODE_ENCRYPT:
4133 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4134 ta_crypt_cmd_allocate_operation(c, &session,
Pascal Brand3e143ee2015-07-15 17:17:16 +02004135 &op, tv->algo, TEE_MODE_ENCRYPT,
4136 max_key_size)))
Pascal Brandc639ac82015-07-02 08:53:34 +02004137 goto out;
4138
4139 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4140 ta_crypt_cmd_set_operation_key(c, &session, op,
4141 pub_key_handle)))
4142 goto out;
4143
4144 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4145 ta_crypt_cmd_free_transient_object(c, &session,
4146 pub_key_handle)))
4147 goto out;
4148 pub_key_handle = TEE_HANDLE_NULL;
4149
4150 out_enc_size = sizeof(out_enc);
4151 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4152 ta_crypt_cmd_asymmetric_encrypt(c, &session, op,
4153 NULL, 0, tv->ptx, tv->ptx_len, out_enc,
4154 &out_enc_size)))
4155 goto out;
4156
4157 /*
4158 * A PS which is random is added when formatting the
4159 * message internally of the algorithm so we can't
4160 * verify against precomputed values, instead we use the
4161 * decrypt operation to see that output is correct.
4162 */
4163
4164 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4165 ta_crypt_cmd_free_operation(c, &session, op)))
4166 goto out;
4167
4168 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4169 ta_crypt_cmd_allocate_operation(c, &session,
4170 &op, tv->algo, TEE_MODE_DECRYPT,
4171 max_key_size)))
4172 goto out;
4173
4174 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4175 ta_crypt_cmd_set_operation_key(c, &session, op,
4176 priv_key_handle)))
4177 goto out;
4178
4179 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4180 ta_crypt_cmd_free_transient_object(c, &session,
4181 priv_key_handle)))
4182 goto out;
4183
4184 priv_key_handle = TEE_HANDLE_NULL;
4185
4186 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4187 ta_crypt_cmd_asymmetric_decrypt(c, &session, op,
4188 NULL, 0, out_enc, out_enc_size, out,
4189 &out_size)))
4190 goto out;
4191
4192 (void)ADBG_EXPECT_BUFFER(c, tv->ptx, tv->ptx_len, out,
4193 out_size);
4194 break;
4195
4196 case TEE_MODE_DECRYPT:
4197 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4198 ta_crypt_cmd_allocate_operation(c, &session,
4199 &op, tv->algo, TEE_MODE_DECRYPT,
4200 max_key_size)))
4201 goto out;
4202
4203 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4204 ta_crypt_cmd_set_operation_key(c, &session, op,
4205 priv_key_handle)))
4206 goto out;
4207
4208 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4209 ta_crypt_cmd_free_transient_object(c, &session,
4210 priv_key_handle)))
4211 goto out;
4212
4213 priv_key_handle = TEE_HANDLE_NULL;
4214
4215 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4216 ta_crypt_cmd_asymmetric_decrypt(c, &session, op,
4217 NULL, 0, tv->ctx, tv->ctx_len, out,
4218 &out_size)))
4219 goto out;
4220
4221 (void)ADBG_EXPECT_BUFFER(c, tv->ptx, tv->ptx_len, out,
4222 out_size);
4223 break;
4224
4225 case TEE_MODE_VERIFY:
4226 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4227 ta_crypt_cmd_allocate_operation(c, &session,
4228 &op, tv->algo, TEE_MODE_VERIFY,
4229 max_key_size)))
4230 goto out;
4231
4232 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4233 ta_crypt_cmd_set_operation_key(c, &session, op,
4234 pub_key_handle)))
4235 goto out;
4236
4237 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4238 ta_crypt_cmd_free_transient_object(c, &session,
4239 pub_key_handle)))
4240 goto out;
4241
4242 pub_key_handle = TEE_HANDLE_NULL;
4243
4244 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4245 ta_crypt_cmd_asymmetric_verify(c, &session, op,
4246 algo_params, num_algo_params, ptx_hash,
4247 ptx_hash_size, tv->ctx, tv->ctx_len)))
4248 goto out;
4249 break;
4250
4251 case TEE_MODE_SIGN:
4252 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4253 ta_crypt_cmd_allocate_operation(c, &session,
4254 &op, tv->algo, TEE_MODE_SIGN,
4255 max_key_size)))
4256 goto out;
4257
4258 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4259 ta_crypt_cmd_set_operation_key(c, &session, op,
4260 priv_key_handle)))
4261 goto out;
4262
4263 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4264 ta_crypt_cmd_free_transient_object(c, &session,
4265 priv_key_handle)))
4266 goto out;
4267
4268 priv_key_handle = TEE_HANDLE_NULL;
4269
4270 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4271 ta_crypt_cmd_asymmetric_sign(c, &session, op,
4272 algo_params, num_algo_params, ptx_hash,
4273 ptx_hash_size, out, &out_size)))
4274 goto out;
4275
4276 if (TEE_ALG_GET_CHAIN_MODE(tv->algo) ==
4277 TEE_CHAIN_MODE_PKCS1_PSS_MGF1 ||
Pascal Brand3e143ee2015-07-15 17:17:16 +02004278 tv->algo == TEE_ALG_DSA_SHA1 ||
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02004279 tv->algo == TEE_ALG_DSA_SHA224 ||
4280 tv->algo == TEE_ALG_DSA_SHA256 ||
Pascal Brand3e143ee2015-07-15 17:17:16 +02004281 TEE_ALG_GET_MAIN_ALG(tv->algo) ==
4282 TEE_MAIN_ALGO_ECDSA) {
Pascal Brandc639ac82015-07-02 08:53:34 +02004283 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4284 ta_crypt_cmd_free_operation(c, &session,
4285 op)))
4286 goto out;
4287 /*
4288 * The salt or K is random so we can't verify
4289 * signing against precomputed values, instead
4290 * we use the verify operation to see that
4291 * output is correct.
4292 */
4293 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4294 ta_crypt_cmd_allocate_operation(c,
4295 &session, &op, tv->algo,
4296 TEE_MODE_VERIFY, max_key_size)))
4297 goto out;
4298
4299 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4300 ta_crypt_cmd_set_operation_key(c,
4301 &session, op, pub_key_handle)))
4302 goto out;
4303
4304 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4305 ta_crypt_cmd_free_transient_object(c,
4306 &session, pub_key_handle)))
4307 goto out;
4308
4309 pub_key_handle = TEE_HANDLE_NULL;
4310
4311 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4312 ta_crypt_cmd_asymmetric_verify(c,
4313 &session, op, algo_params,
4314 num_algo_params, ptx_hash,
4315 ptx_hash_size, out, out_size)))
4316 goto out;
4317 } else {
4318 (void)ADBG_EXPECT_BUFFER(c, tv->ctx,
4319 tv->ctx_len, out,
4320 out_size);
4321 }
4322 break;
4323
4324 default:
4325 break;
4326 }
4327
4328 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4329 ta_crypt_cmd_free_operation(c, &session, op)))
4330 goto out;
4331
4332 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4333 ta_crypt_cmd_free_transient_object(c, &session,
4334 pub_key_handle)))
4335 goto out;
4336 pub_key_handle = TEE_HANDLE_NULL;
4337
4338 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4339 ta_crypt_cmd_free_transient_object(c, &session,
4340 priv_key_handle)))
4341 goto out;
4342
4343 priv_key_handle = TEE_HANDLE_NULL;
4344
4345 Do_ADBG_EndSubCase(c, NULL);
4346 }
4347out:
4348 TEEC_CloseSession(&session);
4349}
Jens Wiklander14f48872018-06-29 15:30:13 +02004350ADBG_CASE_DEFINE(regression, 4006, xtest_tee_test_4006,
4351 "Test TEE Internal API Asymmetric Cipher operations");
Pascal Brandc639ac82015-07-02 08:53:34 +02004352
4353#define KEY_ATTR(x, y) { #x, (x), y }
4354
4355struct key_attrs {
4356 const char *name;
4357 uint32_t attr;
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004358 /*
4359 * When keysize_check != 0: size of attribute is checked
4360 * Expected value is key_size bits except for DH in which case it is
4361 * the value of keysize_check.
4362 */
4363 uint32_t keysize_check;
Pascal Brandc639ac82015-07-02 08:53:34 +02004364};
4365
4366static bool test_keygen_attributes(ADBG_Case_t *c, TEEC_Session *s,
4367 TEE_ObjectHandle key, uint32_t key_size,
4368 struct key_attrs *attrs, size_t num_attrs)
4369{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01004370 uint8_t out[2048] = { };
4371 size_t out_size = 0;
4372 size_t n = 0;
4373 size_t m = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +02004374
4375 for (m = 0; m < num_attrs; m++) {
4376 if ((attrs[m].attr & TEE_ATTR_BIT_VALUE) == 0) {
4377 out_size = sizeof(out);
4378 memset(out, 0, sizeof(out));
4379 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4380 ta_crypt_cmd_get_object_buffer_attribute(c, s,
4381 key, attrs[m].attr, out, &out_size)))
4382 return false;
4383
4384 if (attrs[m].keysize_check)
4385 ADBG_EXPECT_COMPARE_UNSIGNED(c, out_size, ==,
4386 key_size / 8);
4387
4388 if (out_size > 0) {
4389 /* Check that buffer isn't all zeroes */
4390 for (n = 0; n < out_size; n++)
4391 if (out[n] != 0)
4392 break;
4393 if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, n, <,
4394 out_size))
4395 return false;
4396 }
4397 } else {
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01004398 uint32_t a = 0;
4399 uint32_t b = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +02004400
4401 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4402 ta_crypt_cmd_get_object_value_attribute(c, s, key,
4403 attrs[m].attr, &a, &b)))
4404 return false;
4405 }
4406 }
4407 return true;
4408}
4409
4410static bool test_secret_value(ADBG_Case_t *c, TEEC_Session *s,
4411 TEE_ObjectHandle key, uint32_t key_size)
4412{
4413 const struct key_attrs attrs[] = {
4414 KEY_ATTR(TEE_ATTR_SECRET_VALUE, true),
4415 };
4416
4417 return test_keygen_attributes(c, s, key, key_size,
4418 (struct key_attrs *)&attrs,
4419 ARRAY_SIZE(attrs));
4420}
4421
4422
4423static bool test_rsa_key_pair(ADBG_Case_t *c, TEEC_Session *s,
4424 TEE_ObjectHandle key, uint32_t key_size)
4425{
4426 const struct key_attrs attrs[] = {
4427 KEY_ATTR(TEE_ATTR_RSA_MODULUS, true),
4428 KEY_ATTR(TEE_ATTR_RSA_PUBLIC_EXPONENT, false),
4429 KEY_ATTR(TEE_ATTR_RSA_PRIVATE_EXPONENT, false),
4430 KEY_ATTR(TEE_ATTR_RSA_PRIME1, false),
4431 KEY_ATTR(TEE_ATTR_RSA_PRIME2, false),
4432 KEY_ATTR(TEE_ATTR_RSA_EXPONENT1, false),
4433 KEY_ATTR(TEE_ATTR_RSA_EXPONENT2, false),
4434 KEY_ATTR(TEE_ATTR_RSA_COEFFICIENT, false),
4435 };
4436
4437 return test_keygen_attributes(c, s, key, key_size,
4438 (struct key_attrs *)&attrs,
4439 ARRAY_SIZE(attrs));
4440}
4441
Pascal Brande61133f2015-07-08 15:38:37 +02004442static bool test_ecc_key_pair(ADBG_Case_t *c, TEEC_Session *s,
4443 TEE_ObjectHandle key, uint32_t key_size)
4444{
4445 const struct key_attrs attrs[] = {
4446 KEY_ATTR(TEE_ATTR_ECC_PRIVATE_VALUE, false),
4447 KEY_ATTR(TEE_ATTR_ECC_PUBLIC_VALUE_X , false),
4448 KEY_ATTR(TEE_ATTR_ECC_PUBLIC_VALUE_Y , false),
4449 /* KEY_ATTR(TEE_ATTR_ECC_CURVE, false), - do not test */
4450 };
4451
4452 return test_keygen_attributes(c, s, key, key_size,
4453 (struct key_attrs *)&attrs,
4454 ARRAY_SIZE(attrs));
4455}
4456
Pascal Brandc639ac82015-07-02 08:53:34 +02004457static bool test_dh_key_pair(ADBG_Case_t *c, TEEC_Session *s,
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004458 TEE_ObjectHandle key, uint32_t check_keysize)
Pascal Brandc639ac82015-07-02 08:53:34 +02004459{
4460 const struct key_attrs attrs[] = {
4461 KEY_ATTR(TEE_ATTR_DH_PRIME, false),
4462 KEY_ATTR(TEE_ATTR_DH_BASE, false),
4463 KEY_ATTR(TEE_ATTR_DH_PUBLIC_VALUE, false),
4464 KEY_ATTR(TEE_ATTR_DH_PRIVATE_VALUE, check_keysize),
4465 KEY_ATTR(TEE_ATTR_DH_X_BITS, false),
4466 };
4467
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004468 return test_keygen_attributes(c, s, key, check_keysize,
Pascal Brandc639ac82015-07-02 08:53:34 +02004469 (struct key_attrs *)&attrs,
4470 ARRAY_SIZE(attrs));
4471}
4472
4473static bool test_dsa_key_pair(ADBG_Case_t *c, TEEC_Session *s,
4474 TEE_ObjectHandle key, uint32_t key_size)
4475{
4476 const struct key_attrs attrs[] = {
4477 KEY_ATTR(TEE_ATTR_DSA_PRIME, true),
4478 KEY_ATTR(TEE_ATTR_DSA_SUBPRIME, false),
4479 KEY_ATTR(TEE_ATTR_DSA_BASE, false),
4480 KEY_ATTR(TEE_ATTR_DSA_PUBLIC_VALUE, false),
4481 KEY_ATTR(TEE_ATTR_DSA_PRIVATE_VALUE, false),
4482 };
4483
4484 return test_keygen_attributes(c, s, key, key_size,
4485 (struct key_attrs *)&attrs,
4486 ARRAY_SIZE(attrs));
4487}
4488
4489static bool generate_and_test_key(ADBG_Case_t *c, TEEC_Session *s,
4490 uint32_t key_type, uint32_t check_keysize,
4491 uint32_t key_size,
4492 TEE_Attribute *params, size_t param_count)
4493{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01004494 TEE_ObjectHandle key = TEE_HANDLE_NULL;
Pascal Brandc639ac82015-07-02 08:53:34 +02004495 bool ret_val = true;
4496
4497 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4498 ta_crypt_cmd_allocate_transient_object(c, s, key_type, key_size,
4499 &key)))
4500 return false;
4501
4502 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4503 ta_crypt_cmd_generate_key(c, s, key, key_size, params,
4504 param_count)))
4505 return false;
4506
4507 switch (key_type) {
4508 case TEE_TYPE_DES:
4509 case TEE_TYPE_DES3:
4510 ret_val = ADBG_EXPECT_TRUE(c,
4511 test_secret_value(c, s, key,
4512 key_size + key_size / 7));
4513 break;
4514 case TEE_TYPE_AES:
4515 case TEE_TYPE_HMAC_MD5:
4516 case TEE_TYPE_HMAC_SHA1:
4517 case TEE_TYPE_HMAC_SHA224:
4518 case TEE_TYPE_HMAC_SHA256:
4519 case TEE_TYPE_HMAC_SHA384:
4520 case TEE_TYPE_HMAC_SHA512:
4521 case TEE_TYPE_GENERIC_SECRET:
4522 ret_val = ADBG_EXPECT_TRUE(c,
4523 test_secret_value(c, s, key, key_size));
4524 break;
4525
4526 case TEE_TYPE_RSA_KEYPAIR:
4527 ret_val = ADBG_EXPECT_TRUE(c,
4528 test_rsa_key_pair(c, s, key, key_size));
4529 break;
4530
Pascal Brande61133f2015-07-08 15:38:37 +02004531 case TEE_TYPE_ECDSA_KEYPAIR:
4532 case TEE_TYPE_ECDH_KEYPAIR:
4533 ret_val = ADBG_EXPECT_TRUE(c,
4534 test_ecc_key_pair(c, s, key, key_size));
4535 break;
4536
Pascal Brandc639ac82015-07-02 08:53:34 +02004537 case TEE_TYPE_DH_KEYPAIR:
Pascal Brande61133f2015-07-08 15:38:37 +02004538 ret_val = ADBG_EXPECT_TRUE(c,
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004539 test_dh_key_pair(c, s, key, check_keysize));
Pascal Brandc639ac82015-07-02 08:53:34 +02004540 break;
4541
4542 case TEE_TYPE_DSA_KEYPAIR:
4543 ret_val = ADBG_EXPECT_TRUE(c,
4544 test_dsa_key_pair(c, s, key, key_size));
4545 break;
4546
4547 default:
4548 ret_val = false;
4549 break;
4550 }
4551
4552 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4553 ta_crypt_cmd_free_transient_object(c, s, key)))
4554 return false;
4555
4556 return ret_val;
4557}
4558
Jens Wiklandera8c8f872018-12-14 11:41:36 +01004559struct key_types_noparam {
4560 unsigned level;
4561 const char *name;
4562 uint32_t key_type;
4563 uint32_t quanta;
4564 uint32_t min_size;
4565 uint32_t max_size;
4566};
4567
4568static void keygen_noparams(ADBG_Case_t *c, TEEC_Session *session,
4569 const struct key_types_noparam *key_types,
4570 size_t num_key_types)
Pascal Brandc639ac82015-07-02 08:53:34 +02004571{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01004572 size_t n = 0;
4573 uint32_t key_size = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +02004574
Jens Wiklandera8c8f872018-12-14 11:41:36 +01004575 for (n = 0; n < num_key_types; n++) {
Pascal Brandc639ac82015-07-02 08:53:34 +02004576 uint32_t min_size = key_types[n].min_size;
4577 uint32_t max_size = key_types[n].max_size;
4578 uint32_t quanta = key_types[n].quanta;
4579
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004580 if (key_types[n].level > level)
4581 continue;
4582
Pascal Brandc639ac82015-07-02 08:53:34 +02004583 Do_ADBG_BeginSubCase(c, "Generate %s key", key_types[n].name);
4584
4585 for (key_size = min_size; key_size <= max_size;
4586 key_size += quanta) {
4587 if (!ADBG_EXPECT_TRUE(c,
4588 generate_and_test_key(c, session, key_types
4589 [n].key_type, 1, key_size, NULL, 0)))
4590 break;
4591 }
4592
4593 Do_ADBG_EndSubCase(c, "Generate %s key", key_types[n].name);
4594 }
4595}
4596
Jens Wiklandera8c8f872018-12-14 11:41:36 +01004597static void xtest_tee_test_4007_symmetric(ADBG_Case_t *c)
Pascal Brandc639ac82015-07-02 08:53:34 +02004598{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01004599 TEEC_Session session = { };
4600 uint32_t ret_orig = 0;
Jens Wiklandera8c8f872018-12-14 11:41:36 +01004601 static const struct key_types_noparam key_types[] = {
4602 { 0, "AES", TEE_TYPE_AES, 64, 128,
4603 256 /* valid sizes 128, 192, 256 */ },
4604 { 0, "DES", TEE_TYPE_DES, 56, 56, 56 /* valid size 56 */ },
4605 { 0, "DES3", TEE_TYPE_DES3, 56, 112,
4606 168 /* valid sizes 112, 168 */ },
4607 { 0, "HMAC-MD5", TEE_TYPE_HMAC_MD5, 8, 64, 512 },
4608 { 0, "HMAC-SHA1", TEE_TYPE_HMAC_SHA1, 8, 80, 512 },
4609 { 0, "HMAC-SHA224", TEE_TYPE_HMAC_SHA224, 8, 112, 512 },
4610 { 0, "HMAC-SHA256", TEE_TYPE_HMAC_SHA256, 8, 192, 1024 },
4611 { 0, "HMAC-SHA384", TEE_TYPE_HMAC_SHA384, 8, 256, 1024 },
4612 { 0, "HMAC-SHA512", TEE_TYPE_HMAC_SHA512, 8, 256, 1024 },
4613 { 0, "Generic secret", TEE_TYPE_GENERIC_SECRET, 8, 128, 4096 },
4614 };
4615
4616 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4617 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
4618 &ret_orig)))
4619 return;
4620
4621 keygen_noparams(c, &session, key_types, ARRAY_SIZE(key_types));
4622
4623 TEEC_CloseSession(&session);
4624}
4625ADBG_CASE_DEFINE(regression, 4007_symmetric, xtest_tee_test_4007_symmetric,
4626 "Test TEE Internal API Generate Symmetric key");
4627
4628static void xtest_tee_test_4007_rsa(ADBG_Case_t *c)
4629{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01004630 TEEC_Session session = { };
4631 uint32_t ret_orig = 0;
Jens Wiklandera8c8f872018-12-14 11:41:36 +01004632 static const struct key_types_noparam key_types[] = {
4633 { 0, "RSA-256", TEE_TYPE_RSA_KEYPAIR, 1, 256, 256 },
4634 { 1, "RSA-384", TEE_TYPE_RSA_KEYPAIR, 1, 384, 384 },
4635 { 1, "RSA-512", TEE_TYPE_RSA_KEYPAIR, 1, 512, 512 },
4636 { 1, "RSA-640", TEE_TYPE_RSA_KEYPAIR, 1, 640, 640 },
4637 { 1, "RSA-768", TEE_TYPE_RSA_KEYPAIR, 1, 768, 768 },
4638 { 1, "RSA-896", TEE_TYPE_RSA_KEYPAIR, 1, 896, 896 },
4639 { 1, "RSA-1024", TEE_TYPE_RSA_KEYPAIR, 1, 1024, 1024 },
4640 { 1, "RSA-2048", TEE_TYPE_RSA_KEYPAIR, 1, 2048, 2048 },
4641 { 1, "RSA-3072", TEE_TYPE_RSA_KEYPAIR, 1, 3072, 3072 },
4642 { 1, "RSA-4096", TEE_TYPE_RSA_KEYPAIR, 1, 4096, 4096 },
4643 };
4644
4645 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4646 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
4647 &ret_orig)))
4648 return;
4649
4650 keygen_noparams(c, &session, key_types, ARRAY_SIZE(key_types));
4651
4652 TEEC_CloseSession(&session);
4653}
4654ADBG_CASE_DEFINE(regression, 4007_rsa, xtest_tee_test_4007_rsa,
4655 "Test TEE Internal API Generate RSA key");
4656
4657static void xtest_tee_test_4007_dh(ADBG_Case_t *c)
4658{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01004659 TEEC_Session session = { };
4660 uint32_t ret_orig = 0;
4661 size_t n = 0;
4662 size_t param_count = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +02004663 /*
4664 * Note that the key size parameter is not used when creating the keys
4665 * but specifying these sizes make it possible to test the expected size
4666 * of the private value. This also means that the keysize must match the
4667 * size of p or what is specified in private_bits or the equvivalent
4668 * size of the subprime parameter.
4669 */
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01004670 TEE_Attribute params[4] = { };
Pascal Brandc639ac82015-07-02 08:53:34 +02004671
4672#define XTEST_DH_GK_DATA(vect) \
4673 ARRAY(vect ## _p), \
4674 ARRAY(vect ## _g), \
4675 &vect ## _private_bits, \
4676 0, 0
4677#define XTEST_DH_GK_DATA_SUBPRIME(vect) \
4678 ARRAY(vect ## _p), \
4679 ARRAY(vect ## _g), \
4680 &vect ## _private_bits, \
4681 ARRAY(vect ## _subprime)
4682 static const struct {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004683 unsigned level;
Pascal Brandc639ac82015-07-02 08:53:34 +02004684 uint32_t key_size;
4685 const uint8_t *p;
4686 size_t p_len;
4687 const uint8_t *g;
4688 size_t g_len;
4689 const uint32_t *private_bits;
4690 const uint8_t *subprime;
4691 size_t subprime_len;
4692 } key_types[] = {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004693 { 0, 256, XTEST_DH_GK_DATA(keygen_dh256) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004694 { 0, 320, XTEST_DH_GK_DATA(keygen_dh320) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004695 { 1, 384, XTEST_DH_GK_DATA(keygen_dh384) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004696 { 1, 448, XTEST_DH_GK_DATA(keygen_dh448) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004697 { 1, 512, XTEST_DH_GK_DATA(keygen_dh512) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004698 { 1, 576, XTEST_DH_GK_DATA(keygen_dh576) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004699 { 1, 640, XTEST_DH_GK_DATA(keygen_dh640) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004700 { 1, 704, XTEST_DH_GK_DATA(keygen_dh704) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004701 { 1, 768, XTEST_DH_GK_DATA(keygen_dh768) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004702 { 1, 832, XTEST_DH_GK_DATA(keygen_dh832) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004703 { 1, 896, XTEST_DH_GK_DATA(keygen_dh896) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004704 { 1, 960, XTEST_DH_GK_DATA(keygen_dh960) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004705 { 1, 1024, XTEST_DH_GK_DATA(keygen_dh1024) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004706 { 1, 1088, XTEST_DH_GK_DATA(keygen_dh1088) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004707 { 1, 1152, XTEST_DH_GK_DATA(keygen_dh1152) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004708 { 1, 1216, XTEST_DH_GK_DATA(keygen_dh1216) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004709 { 1, 1280, XTEST_DH_GK_DATA(keygen_dh1280) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004710 { 1, 1344, XTEST_DH_GK_DATA(keygen_dh1344) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004711 { 1, 1408, XTEST_DH_GK_DATA(keygen_dh1408) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004712 { 1, 1472, XTEST_DH_GK_DATA(keygen_dh1472) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004713 { 1, 1536, XTEST_DH_GK_DATA(keygen_dh1536) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004714 { 1, 1600, XTEST_DH_GK_DATA(keygen_dh1600) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004715 { 1, 1664, XTEST_DH_GK_DATA(keygen_dh1664) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004716 { 1, 1728, XTEST_DH_GK_DATA(keygen_dh1728) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004717 { 1, 1792, XTEST_DH_GK_DATA(keygen_dh1792) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004718 { 1, 1856, XTEST_DH_GK_DATA(keygen_dh1856) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004719 { 1, 1920, XTEST_DH_GK_DATA(keygen_dh1920) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004720 { 1, 1984, XTEST_DH_GK_DATA(keygen_dh1984) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004721 { 1, 2048, XTEST_DH_GK_DATA(keygen_dh2048) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004722 { 1, 2048, XTEST_DH_GK_DATA_SUBPRIME(keygen_dh2048_subprime) }
Pascal Brandc639ac82015-07-02 08:53:34 +02004723 };
4724
Jens Wiklandera8c8f872018-12-14 11:41:36 +01004725 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4726 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
4727 &ret_orig)))
4728 return;
Pascal Brandc639ac82015-07-02 08:53:34 +02004729
4730 for (n = 0; n < ARRAY_SIZE(key_types); n++) {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004731 if (key_types[n].level > level)
4732 continue;
4733
Pascal Brandc639ac82015-07-02 08:53:34 +02004734 Do_ADBG_BeginSubCase(c,
4735 "Generate DH key %d bits - Private bits = %d",
4736 key_types[n].key_size,
4737 *key_types[n].private_bits);
4738 param_count = 0;
4739
4740 xtest_add_attr(&param_count, params,
4741 TEE_ATTR_DH_PRIME,
4742 key_types[n].p, key_types[n].p_len);
4743
4744 xtest_add_attr(&param_count, params, TEE_ATTR_DH_BASE,
4745 key_types[n].g, key_types[n].g_len);
4746
4747 if (key_types[n].private_bits != 0) {
4748 params[param_count].attributeID = TEE_ATTR_DH_X_BITS;
4749
4750 params[param_count].content.value.a =
4751 *key_types[n].private_bits;
4752
4753 params[param_count].content.value.b = 0;
4754 param_count++;
4755 }
4756
4757 if (key_types[n].subprime != 0) {
4758 xtest_add_attr(&param_count, params,
4759 TEE_ATTR_DH_SUBPRIME,
4760 key_types[n].subprime,
4761 key_types[n].subprime_len);
4762 }
4763
4764 if (!ADBG_EXPECT_TRUE(c,
Jens Wiklandera8c8f872018-12-14 11:41:36 +01004765 generate_and_test_key(c, &session, TEE_TYPE_DH_KEYPAIR,
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004766 *key_types[n].private_bits,
Pascal Brandc639ac82015-07-02 08:53:34 +02004767 key_types[n]. key_size, params, param_count)))
4768 break;
4769
4770 Do_ADBG_EndSubCase(c,
4771 "Generate DH key %d bits - Private bits = %d",
4772 key_types[n].key_size,
4773 *key_types[n].private_bits);
4774 }
Pascal Brandc639ac82015-07-02 08:53:34 +02004775
Jens Wiklandera8c8f872018-12-14 11:41:36 +01004776 TEEC_CloseSession(&session);
4777}
4778ADBG_CASE_DEFINE(regression, 4007_dh, xtest_tee_test_4007_dh,
4779 "Test TEE Internal API Generate DH key");
4780
4781static void xtest_tee_test_4007_dsa(ADBG_Case_t *c)
Pascal Brandc639ac82015-07-02 08:53:34 +02004782{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01004783 TEEC_Session session = { };
4784 uint32_t ret_orig = 0;
4785 size_t n = 0;
4786 size_t param_count = 0;
4787 TEE_Attribute params[4] = { };
Pascal Brandc639ac82015-07-02 08:53:34 +02004788
4789#define XTEST_DSA_GK_DATA(vect) \
4790 ARRAY(vect ## _p), \
4791 ARRAY(vect ## _g), \
4792 ARRAY(vect ## _q)
4793 static const struct {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004794 unsigned level;
Pascal Brandc639ac82015-07-02 08:53:34 +02004795 uint32_t key_size;
4796 const uint8_t *prime;
4797 size_t prime_len;
4798 const uint8_t *base;
4799 size_t base_len;
4800 const uint8_t *sub_prime;
4801 size_t sub_prime_len;
4802 } key_types[] = {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004803 { 1, 1024, XTEST_DSA_GK_DATA(keygen_dsa_test1) },
4804 { 0, 512, XTEST_DSA_GK_DATA(keygen_dsa512) },
4805 { 1, 576, XTEST_DSA_GK_DATA(keygen_dsa576) },
4806 { 1, 640, XTEST_DSA_GK_DATA(keygen_dsa640) },
4807 { 1, 704, XTEST_DSA_GK_DATA(keygen_dsa704) },
4808 { 1, 768, XTEST_DSA_GK_DATA(keygen_dsa768) },
4809 { 1, 832, XTEST_DSA_GK_DATA(keygen_dsa832) },
4810 { 1, 896, XTEST_DSA_GK_DATA(keygen_dsa896) },
4811 { 1, 960, XTEST_DSA_GK_DATA(keygen_dsa960) },
4812 { 1, 1024, XTEST_DSA_GK_DATA(keygen_dsa1024) },
Pascal Brandc639ac82015-07-02 08:53:34 +02004813 };
4814
Jens Wiklandera8c8f872018-12-14 11:41:36 +01004815 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4816 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
4817 &ret_orig)))
4818 return;
4819
Pascal Brandc639ac82015-07-02 08:53:34 +02004820 for (n = 0; n < ARRAY_SIZE(key_types); n++) {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004821 if (key_types[n].level > level)
4822 continue;
4823
Pascal Brandc639ac82015-07-02 08:53:34 +02004824 Do_ADBG_BeginSubCase(c, "Generate DSA key %d bits",
4825 key_types[n].key_size);
4826 param_count = 0;
4827
4828
4829 xtest_add_attr(&param_count, params, TEE_ATTR_DSA_PRIME,
4830 key_types[n].prime, key_types[n].prime_len);
4831
4832 xtest_add_attr(&param_count, params, TEE_ATTR_DSA_SUBPRIME,
4833 key_types[n].sub_prime,
4834 key_types[n].sub_prime_len);
4835
4836 xtest_add_attr(&param_count, params, TEE_ATTR_DSA_BASE,
4837 key_types[n].base, key_types[n].base_len);
4838
4839 if (!ADBG_EXPECT_TRUE(c,
Jens Wiklandera8c8f872018-12-14 11:41:36 +01004840 generate_and_test_key(c, &session, TEE_TYPE_DSA_KEYPAIR,
Pascal Brandc639ac82015-07-02 08:53:34 +02004841 1, key_types[n]. key_size, params,
4842 param_count)))
4843 break;
4844
4845 Do_ADBG_EndSubCase(c, "Generate DSA key %d bits",
4846 key_types[n].key_size);
4847 }
Pascal Brandc639ac82015-07-02 08:53:34 +02004848
Jens Wiklandera8c8f872018-12-14 11:41:36 +01004849 TEEC_CloseSession(&session);
4850}
4851ADBG_CASE_DEFINE(regression, 4007_dsa, xtest_tee_test_4007_dsa,
4852 "Test TEE Internal API Generate DSA key");
4853
4854static void xtest_tee_test_4007_ecc(ADBG_Case_t *c)
Pascal Brande61133f2015-07-08 15:38:37 +02004855{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01004856 TEEC_Session session = { };
4857 uint32_t ret_orig = 0;
4858 size_t n = 0;
4859 size_t param_count = 0;
4860 TEE_Attribute params[4] = { };
Pascal Brande61133f2015-07-08 15:38:37 +02004861
4862 static const struct {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004863 unsigned level;
Pascal Brande61133f2015-07-08 15:38:37 +02004864 const char *name;
4865 uint32_t algo;
4866 uint32_t curve;
4867 uint32_t key_size;
4868 } key_types[] = {
4869 /* ECDSA */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004870 { 0, "ECDSA-192", TEE_TYPE_ECDSA_KEYPAIR, TEE_ECC_CURVE_NIST_P192,
4871 192 },
4872 { 1, "ECDSA-224", TEE_TYPE_ECDSA_KEYPAIR, TEE_ECC_CURVE_NIST_P224,
4873 224 },
4874 { 1, "ECDSA-256", TEE_TYPE_ECDSA_KEYPAIR, TEE_ECC_CURVE_NIST_P256,
4875 256 },
4876 { 1, "ECDSA-384", TEE_TYPE_ECDSA_KEYPAIR, TEE_ECC_CURVE_NIST_P384,
4877 384 },
4878 { 1, "ECDSA-521", TEE_TYPE_ECDSA_KEYPAIR, TEE_ECC_CURVE_NIST_P521,
4879 521 },
Pascal Brande61133f2015-07-08 15:38:37 +02004880
4881 /* ECDH */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004882 { 0, "ECDH-192", TEE_TYPE_ECDH_KEYPAIR, TEE_ECC_CURVE_NIST_P192,
4883 192 },
4884 { 1, "ECDH-224", TEE_TYPE_ECDH_KEYPAIR, TEE_ECC_CURVE_NIST_P224,
4885 224 },
4886 { 1, "ECDH-256", TEE_TYPE_ECDH_KEYPAIR, TEE_ECC_CURVE_NIST_P256,
4887 256 },
4888 { 1, "ECDH-384", TEE_TYPE_ECDH_KEYPAIR, TEE_ECC_CURVE_NIST_P384,
4889 384 },
4890 { 1, "ECDH-521", TEE_TYPE_ECDH_KEYPAIR, TEE_ECC_CURVE_NIST_P521,
4891 521 },
Pascal Brande61133f2015-07-08 15:38:37 +02004892 };
4893
Jens Wiklandera8c8f872018-12-14 11:41:36 +01004894 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4895 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
4896 &ret_orig)))
4897 return;
4898
Pascal Brande61133f2015-07-08 15:38:37 +02004899 for (n = 0; n < ARRAY_SIZE(key_types); n++) {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004900 if (key_types[n].level > level)
4901 continue;
4902
Pascal Brande61133f2015-07-08 15:38:37 +02004903 Do_ADBG_BeginSubCase(c, "Generate %s", key_types[n].name);
4904 param_count = 0;
4905
4906 xtest_add_attr_value(&param_count, params, TEE_ATTR_ECC_CURVE,
4907 key_types[n].curve, 0);
4908
4909 if (!ADBG_EXPECT_TRUE(c,
Jens Wiklandera8c8f872018-12-14 11:41:36 +01004910 generate_and_test_key(c, &session, key_types[n].algo,
Pascal Brande61133f2015-07-08 15:38:37 +02004911 0, key_types[n].key_size, params,
4912 param_count)))
4913 break;
4914
4915 Do_ADBG_EndSubCase(c, "Generate %s", key_types[n].name);
4916 }
Pascal Brande61133f2015-07-08 15:38:37 +02004917
Pascal Brandc639ac82015-07-02 08:53:34 +02004918 TEEC_CloseSession(&session);
4919}
Jens Wiklandera8c8f872018-12-14 11:41:36 +01004920ADBG_CASE_DEFINE(regression, 4007_ecc, xtest_tee_test_4007_ecc,
4921 "Test TEE Internal API Generate ECC key");
Pascal Brandc639ac82015-07-02 08:53:34 +02004922
4923static void xtest_tee_test_4008(ADBG_Case_t *c)
4924{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01004925 TEEC_Session session = { };
4926 uint32_t ret_orig = 0;
4927 TEE_OperationHandle op = TEE_HANDLE_NULL;
4928 TEE_ObjectHandle key_handle = TEE_HANDLE_NULL;
4929 TEE_ObjectHandle sv_handle = TEE_HANDLE_NULL;
4930 TEE_Attribute params[4] = { };
Pascal Brandc639ac82015-07-02 08:53:34 +02004931 size_t param_count = 0;
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01004932 uint8_t out[2048] = { };
4933 size_t out_size = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +02004934
4935 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4936 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
4937 &ret_orig)))
4938 return;
4939
4940 Do_ADBG_BeginSubCase(c, "Derive DH key success");
4941
4942 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4943 ta_crypt_cmd_allocate_operation(c, &session, &op,
4944 TEE_ALG_DH_DERIVE_SHARED_SECRET, TEE_MODE_DERIVE,
4945 derive_key_max_keysize)))
4946 goto out;
4947
4948 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4949 ta_crypt_cmd_allocate_transient_object(c, & session,
4950 TEE_TYPE_DH_KEYPAIR, derive_key_max_keysize,
4951 &key_handle)))
4952 goto out;
4953
4954 xtest_add_attr(&param_count, params, TEE_ATTR_DH_PRIME,
4955 ARRAY(derive_key_dh_prime));
4956
4957 xtest_add_attr(&param_count, params, TEE_ATTR_DH_BASE,
4958 ARRAY(derive_key_dh_base));
4959
4960 xtest_add_attr(&param_count, params, TEE_ATTR_DH_PUBLIC_VALUE,
4961 ARRAY(derive_key_dh_public_value));
4962
4963 xtest_add_attr(&param_count, params, TEE_ATTR_DH_PRIVATE_VALUE,
4964 ARRAY(derive_key_dh_private_value));
4965
4966 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4967 ta_crypt_cmd_populate_transient_object(c, &session, key_handle,
4968 params, param_count)))
4969 goto out;
4970
4971 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4972 ta_crypt_cmd_set_operation_key(c, &session, op, key_handle)))
4973 goto out;
4974
4975 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4976 ta_crypt_cmd_free_transient_object(c, & session, key_handle)))
4977 goto out;
4978
4979 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4980 ta_crypt_cmd_allocate_transient_object(c, &session,
4981 TEE_TYPE_GENERIC_SECRET, derive_key_max_keysize,
4982 &sv_handle)))
4983 goto out;
4984
Pascal Brand2b92b642015-07-16 13:29:42 +02004985 /* reuse but reset params and param-count */
Pascal Brandc639ac82015-07-02 08:53:34 +02004986 param_count = 0;
4987
4988 xtest_add_attr(&param_count, params, TEE_ATTR_DH_PUBLIC_VALUE,
4989 ARRAY(derive_key_dh_public_value_2));
4990
4991 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4992 ta_crypt_cmd_derive_key(c, &session, op, sv_handle, params,
4993 param_count)))
4994 goto out;
4995
4996 out_size = sizeof(out);
4997 memset(out, 0, sizeof(out));
4998 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4999 ta_crypt_cmd_get_object_buffer_attribute(c, &session, sv_handle,
5000 TEE_ATTR_SECRET_VALUE, out, &out_size)))
5001 goto out;
5002
5003 if (!ADBG_EXPECT_BUFFER(c, derive_key_dh_shared_secret,
5004 sizeof(derive_key_dh_shared_secret), out,
5005 out_size))
5006 goto out;
5007
5008 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5009 ta_crypt_cmd_free_operation(c, &session, op)))
5010 goto out;
5011
5012 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5013 ta_crypt_cmd_free_transient_object(c, &session, sv_handle)))
5014 goto out;
5015out:
5016 Do_ADBG_EndSubCase(c, "Derive DH key success");
5017 TEEC_CloseSession(&session);
5018}
Jens Wiklander14f48872018-06-29 15:30:13 +02005019ADBG_CASE_DEFINE(regression, 4008, xtest_tee_test_4008,
5020 "Test TEE Internal API Derive key");
Pascal Brand2b92b642015-07-16 13:29:42 +02005021
5022static void xtest_tee_test_4009(ADBG_Case_t *c)
5023{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01005024 TEEC_Session session = { };
5025 uint32_t ret_orig = 0;
5026 TEE_OperationHandle op = TEE_HANDLE_NULL;
5027 TEE_ObjectHandle key_handle = TEE_HANDLE_NULL;
5028 TEE_ObjectHandle sv_handle = TEE_HANDLE_NULL;
5029 TEE_Attribute params[4] = { };
Pascal Brand2b92b642015-07-16 13:29:42 +02005030 size_t param_count = 0;
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01005031 uint8_t out[2048] = { };
5032 size_t out_size = 0;
5033 uint32_t size_bytes = 0;
5034 uint32_t i = 0;
5035 struct derive_key_ecdh_t *pt = NULL;
Pascal Brand2b92b642015-07-16 13:29:42 +02005036
5037 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5038 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
5039 &ret_orig)))
5040 return;
5041
5042 for (i = 0; i < ARRAY_SIZE(derive_key_ecdh); i++) {
5043 pt = &derive_key_ecdh[i];
5044
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02005045 if (pt->level > level)
5046 continue;
5047
Pascal Brand2b92b642015-07-16 13:29:42 +02005048 Do_ADBG_BeginSubCase(c, "Derive ECDH key - algo = 0x%x",
5049 pt->algo);
5050 size_bytes = (pt->keysize + 7) / 8;
5051 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5052 ta_crypt_cmd_allocate_operation(c, &session, &op,
5053 pt->algo,
5054 TEE_MODE_DERIVE, pt->keysize)))
5055 goto out;
5056
5057 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5058 ta_crypt_cmd_allocate_transient_object(c, & session,
5059 TEE_TYPE_ECDH_KEYPAIR, pt->keysize,
5060 &key_handle)))
5061 goto out;
5062
5063 param_count = 0;
5064 xtest_add_attr_value(&param_count, params,
5065 TEE_ATTR_ECC_CURVE, pt->curve, 0);
5066 xtest_add_attr(&param_count, params,
5067 TEE_ATTR_ECC_PRIVATE_VALUE,
5068 pt->private, size_bytes);
5069 /*
Cedric Auger719047c2019-09-11 12:08:14 +02005070 * The public value is not used, but we should provide a valid
5071 * one to avoid rejection in case TEE_PopulateTransientObject()
5072 * checks for key validity.
Pascal Brand2b92b642015-07-16 13:29:42 +02005073 */
5074 xtest_add_attr(&param_count, params,
Cedric Auger719047c2019-09-11 12:08:14 +02005075 TEE_ATTR_ECC_PUBLIC_VALUE_X,
5076 pt->public_x, size_bytes);
Pascal Brand2b92b642015-07-16 13:29:42 +02005077 xtest_add_attr(&param_count, params,
Cedric Auger719047c2019-09-11 12:08:14 +02005078 TEE_ATTR_ECC_PUBLIC_VALUE_Y,
5079 pt->public_y, size_bytes);
Pascal Brand2b92b642015-07-16 13:29:42 +02005080
5081 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5082 ta_crypt_cmd_populate_transient_object(c,
5083 &session,
5084 key_handle, params, param_count)))
5085 goto out;
5086
5087 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5088 ta_crypt_cmd_set_operation_key(c, &session, op,
5089 key_handle)))
5090 goto out;
5091
5092 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5093 ta_crypt_cmd_free_transient_object(c, & session,
5094 key_handle)))
5095 goto out;
5096
5097 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5098 ta_crypt_cmd_allocate_transient_object(c, &session,
5099 TEE_TYPE_GENERIC_SECRET, size_bytes * 8,
5100 &sv_handle)))
5101 goto out;
5102
5103 /* reuse but reset params and param-count */
5104 param_count = 0;
5105
5106 xtest_add_attr(&param_count, params,
5107 TEE_ATTR_ECC_PUBLIC_VALUE_X,
5108 pt->public_x, size_bytes);
5109 xtest_add_attr(&param_count, params,
5110 TEE_ATTR_ECC_PUBLIC_VALUE_Y,
5111 pt->public_y, size_bytes);
5112
5113 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5114 ta_crypt_cmd_derive_key(c, &session, op, sv_handle,
5115 params, param_count)))
5116 goto out;
5117
5118 out_size = sizeof(out);
5119 memset(out, 0, sizeof(out));
5120 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5121 ta_crypt_cmd_get_object_buffer_attribute(c, &session,
5122 sv_handle,
5123 TEE_ATTR_SECRET_VALUE, out, &out_size)))
5124 goto out;
5125
5126 if (!ADBG_EXPECT_BUFFER(c, pt->out, size_bytes,
5127 out, out_size))
5128 goto out;
5129
5130 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5131 ta_crypt_cmd_free_operation(c, &session, op)))
5132 goto out;
5133
5134 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5135 ta_crypt_cmd_free_transient_object(c, &session,
5136 sv_handle)))
5137 goto out;
5138
5139 Do_ADBG_EndSubCase(c, "Derive ECDH key - algo = 0x%x",
5140 pt->algo);
5141 }
5142
5143 goto noerror;
5144
5145out:
5146 Do_ADBG_EndSubCase(c, "Derive ECDH key - algo = 0x%x", pt->algo);
5147
5148noerror:
5149 TEEC_CloseSession(&session);
5150}
Jens Wiklander14f48872018-06-29 15:30:13 +02005151ADBG_CASE_DEFINE(regression, 4009, xtest_tee_test_4009,
5152 "Test TEE Internal API Derive key ECDH");
Jens Wiklander70a0b2c2016-05-18 08:39:35 +02005153
5154static void xtest_tee_test_4010(ADBG_Case_t *c)
5155{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01005156 TEEC_Session session = { };
5157 uint32_t ret_orig = 0;
5158 TEE_ObjectHandle o = TEE_HANDLE_NULL;
Jens Wiklander70a0b2c2016-05-18 08:39:35 +02005159 static const uint8_t large_key[1024] = { 1, 2, 3, 4, 5, 6 };
5160 static const TEE_Attribute attr = {
5161 .attributeID = TEE_ATTR_SECRET_VALUE,
5162 .content.ref.buffer = (void *)large_key,
5163 .content.ref.length = sizeof(large_key),
5164 };
5165
5166 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5167 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
5168 &ret_orig)))
5169 return;
5170
5171 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5172 ta_crypt_cmd_allocate_transient_object(c, &session,
5173 TEE_TYPE_HMAC_SHA256, 1024, &o)))
5174 goto out;
5175
5176 ADBG_EXPECT_TEEC_RESULT(c, TEEC_ERROR_TARGET_DEAD,
5177 ta_crypt_cmd_populate_transient_object(c, &session, o,
5178 &attr, 1));
5179
5180out:
5181 TEEC_CloseSession(&session);
5182}
Jens Wiklander14f48872018-06-29 15:30:13 +02005183ADBG_CASE_DEFINE(regression, 4010, xtest_tee_test_4010,
5184 "Test TEE Internal API create transient object (negative)");
Jens Wiklanderb58916e2016-07-07 15:29:32 +02005185
5186static void xtest_tee_test_4011(ADBG_Case_t *c)
5187{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01005188 TEEC_Session s = { };
Jens Wiklanderb58916e2016-07-07 15:29:32 +02005189 size_t key_size = 512;
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01005190 TEE_ObjectHandle key = TEE_HANDLE_NULL;
5191 TEE_OperationHandle ops = TEE_HANDLE_NULL;
5192 TEE_OperationHandle opv = TEE_HANDLE_NULL;
5193 TEE_OperationHandle ope = TEE_HANDLE_NULL;
5194 TEE_OperationHandle opd = TEE_HANDLE_NULL;
5195 uint32_t ret_orig = 0;
5196 uint8_t in[TEE_SHA1_HASH_SIZE] = { };
5197 uint8_t out[1024] = { };
5198 uint8_t tmp[1024] = { };
5199 size_t out_size = 0;
5200 size_t tmp_size = 0;
5201 size_t n = 0;
5202 size_t m = 0;
Jens Wiklanderb58916e2016-07-07 15:29:32 +02005203 size_t i = 0;
5204
5205 /* Setup session, initialize message to sign, create a keypair */
5206 if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&s,
5207 &crypt_user_ta_uuid, NULL, &ret_orig)))
5208 return;
5209 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_random_number_generate(c,
5210 &s, in, sizeof(in))))
5211 goto out;
5212 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_transient_object(
5213 c, &s, TEE_TYPE_RSA_KEYPAIR, key_size, &key)))
5214 goto out;
5215 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_generate_key(c, &s,
5216 key, key_size, NULL, 0)))
5217 goto out;
5218
5219 /* Allocate operations for sign, verify, encrypt and decrypt */
5220 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, &s,
5221 &ops, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
5222 key_size)))
5223 goto out;
5224 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, &s,
5225 &opv, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
5226 key_size)))
5227 goto out;
5228 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, &s,
5229 &ope, TEE_ALG_RSA_NOPAD, TEE_MODE_ENCRYPT, key_size)))
5230 goto out;
5231 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, &s,
5232 &opd, TEE_ALG_RSA_NOPAD, TEE_MODE_DECRYPT, key_size)))
5233 goto out;
5234
5235 /* Assign the keypair to all operations */
5236 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5237 ta_crypt_cmd_set_operation_key(c, &s, ops, key)))
5238 goto out;
5239 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5240 ta_crypt_cmd_set_operation_key(c, &s, opv, key)))
5241 goto out;
5242 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5243 ta_crypt_cmd_set_operation_key(c, &s, ope, key)))
5244 goto out;
5245 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5246 ta_crypt_cmd_set_operation_key(c, &s, opd, key)))
5247 goto out;
5248
5249 /*
5250 * The core of the test case is inspired by the one in libtomcrypt:
5251 * https://github.com/libtom/libtomcrypt/blob/6ad52252688bb34f90b5e79da4830a927e87b81f/testprof/rsa_test.c#L398
5252 *
5253 * Testcase for Bleichenbacher attack
5254 *
5255 * (1) Create a valid signature
5256 * (2) Check that it can be verified
5257 * (3) Transform the package to fetch plain text (using the encrypt
5258 * operation in GP TEE Internal API)
5259 * (4) Forge the structure of PKCS#1-EMSA encoded data
5260 * (4.1) Search for start and end of the padding string
5261 * (4.2) Move the signature to the front of the padding string
5262 * (4.3) Zero the message until the end
5263 * (5) Transform the package back (using the decrypt operation in
5264 * GP TEE Internal API)
5265 * (6) The result should not be valid if the implementation is robust.
5266 */
5267
5268
5269 for (i = 0; i < 9; i++) {
5270 Do_ADBG_Log("Iteration %zu", i);
5271
5272 /* 1 */
5273 out_size = sizeof(out);
5274 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5275 ta_crypt_cmd_asymmetric_sign(c, &s, ops, NULL, 0,
5276 in, sizeof(in), out, &out_size)))
5277 goto out;
5278
5279 /* 2 */
5280 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5281 ta_crypt_cmd_asymmetric_verify(c, &s, opv, NULL, 0,
5282 in, sizeof(in), out, out_size)))
5283 goto out;
5284
5285 /* 3 */
5286 tmp_size = sizeof(tmp);
5287 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5288 ta_crypt_cmd_asymmetric_encrypt(c, &s, ope, NULL, 0,
5289 out, out_size, tmp, &tmp_size)))
5290 goto out;
5291
Etienne Carriere0953bf02018-12-21 15:36:25 +01005292 if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, tmp_size, <=, sizeof(tmp)))
5293 goto out;
5294
Jens Wiklanderb58916e2016-07-07 15:29:32 +02005295 /* 4.1 */
Etienne Carriere0953bf02018-12-21 15:36:25 +01005296 for (n = 0; n < tmp_size - i; n++)
Jens Wiklanderb58916e2016-07-07 15:29:32 +02005297 if (tmp[n] == 0xff)
5298 break;
Etienne Carriere0953bf02018-12-21 15:36:25 +01005299
5300 /* Shall find at least a padding start before buffer end */
5301 if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, n, <, tmp_size - i - 1))
5302 goto out;
5303
Jens Wiklanderb58916e2016-07-07 15:29:32 +02005304 for (m = n + 1; m < tmp_size; m++)
5305 if (tmp[m] != 0xff)
5306 break;
Etienne Carriere0953bf02018-12-21 15:36:25 +01005307
Jens Wiklanderb58916e2016-07-07 15:29:32 +02005308 /* 4.2 */
5309 memmove(tmp + n + i, tmp + m, tmp_size - m);
Etienne Carriere0953bf02018-12-21 15:36:25 +01005310
Jens Wiklanderb58916e2016-07-07 15:29:32 +02005311 /* 4.3 */
Etienne Carriere0953bf02018-12-21 15:36:25 +01005312 n = n + i + tmp_size - m;
5313 memset(tmp + n, 0, tmp_size - n);
Jens Wiklanderb58916e2016-07-07 15:29:32 +02005314
5315 /* 5 */
5316 out_size = sizeof(out);
5317 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5318 ta_crypt_cmd_asymmetric_decrypt(c, &s, opd, NULL, 0,
5319 tmp, tmp_size, out, &out_size)))
5320 goto out;
5321
5322 /* 6 */
5323 if (!ADBG_EXPECT_TEEC_RESULT(c, TEE_ERROR_SIGNATURE_INVALID,
5324 ta_crypt_cmd_asymmetric_verify(c, &s, opv, NULL, 0,
5325 in, sizeof(in), out, out_size)))
5326 goto out;
5327 }
5328
5329out:
5330 TEEC_CloseSession(&s);
5331}
Jens Wiklander14f48872018-06-29 15:30:13 +02005332ADBG_CASE_DEFINE(regression, 4011, xtest_tee_test_4011,
5333 "Test TEE Internal API Bleichenbacher attack (negative)");
Igor Opaniuk7ddaa782018-05-25 15:14:05 +03005334
5335#ifdef CFG_SYSTEM_PTA
5336static void xtest_tee_test_4012(ADBG_Case_t *c)
5337{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01005338 TEEC_Session session = { };
5339 uint32_t ret_orig = 0;
Igor Opaniuk7ddaa782018-05-25 15:14:05 +03005340 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
5341 /* Fortuna PRNG requires seed <= 32 bytes */
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01005342 uint8_t pool_input[32] = { };
5343 time_t t = 0;
5344 struct tm tm_local = { };
Igor Opaniuk7ddaa782018-05-25 15:14:05 +03005345
5346 t = time(NULL);
5347 tm_local = *localtime(&t);
5348
5349 memcpy((void *)pool_input, (void *)&tm_local,
5350 sizeof(pool_input) < sizeof(tm_local) ?
5351 sizeof(pool_input) : sizeof(tm_local));
5352
5353
5354 op.params[0].tmpref.buffer = pool_input;
5355 op.params[0].tmpref.size = sizeof(pool_input);
5356 op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT,
5357 TEEC_NONE,
5358 TEEC_NONE,
5359 TEEC_NONE);
5360 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5361 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
5362 &ret_orig)))
5363 return;
5364
5365 (void)ADBG_EXPECT_TEEC_SUCCESS(c,
5366 TEEC_InvokeCommand(&session,
5367 TA_CRYPT_CMD_SEED_RNG_POOL,
5368 &op,
5369 &ret_orig));
5370 TEEC_CloseSession(&session);
5371}
Jens Wiklander14f48872018-06-29 15:30:13 +02005372ADBG_CASE_DEFINE(regression, 4012, xtest_tee_test_4012,
5373 "Test seeding RNG entropy");
Joakim Bech83a30ca2019-05-29 11:22:27 +02005374
5375static void xtest_tee_test_4013(ADBG_Case_t *c)
5376{
5377 TEEC_Session session = { };
5378 uint32_t ret_orig = 0;
5379 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
5380 uint8_t key[32] = { };
5381 uint8_t extra_data[32] = { };
5382
5383 op.paramTypes = TEEC_PARAM_TYPES(TEEC_NONE,
5384 TEEC_NONE,
5385 TEEC_NONE,
5386 TEEC_NONE);
5387 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5388 xtest_teec_open_session(&session, &crypt_user_ta_uuid,
5389 NULL, &ret_orig)))
5390 return;
5391
5392 (void)ADBG_EXPECT_TEEC_SUCCESS(c,
5393 TEEC_InvokeCommand(&session,
5394 TA_CRYPT_CMD_DERIVE_TA_UNIQUE_KEY,
5395 &op,
5396 &ret_orig));
5397
5398 /* Negative test using non-secure memory */
5399 memset(&op, 0, sizeof(op));
5400 op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT,
5401 TEEC_MEMREF_TEMP_OUTPUT,
5402 TEEC_NONE,
5403 TEEC_NONE);
5404
5405 op.params[0].tmpref.buffer = extra_data;
5406 op.params[0].tmpref.size = sizeof(extra_data);
5407 op.params[1].tmpref.buffer = key;
5408 op.params[1].tmpref.size = sizeof(key);
5409 (void)ADBG_EXPECT_TEEC_RESULT(c,
5410 TEEC_ERROR_SECURITY,
5411 TEEC_InvokeCommand(&session,
5412 TA_CRYPT_CMD_DERIVE_TA_UNIQUE_KEY_SHM,
5413 &op,
5414 &ret_orig));
5415
5416 TEEC_CloseSession(&session);
5417}
5418ADBG_CASE_DEFINE(regression, 4013, xtest_tee_test_4013,
5419 "Test generation of device unique TA keys");
Jens Wiklander14f48872018-06-29 15:30:13 +02005420#endif /*CFG_SYSTEM_PTA*/