xref: /optee_os/core/crypto/crypto.c (revision 0f1519439f5bff0608f4a24baaaed108a0d0be5c)
1fb7ef469SJerome Forissier // SPDX-License-Identifier: BSD-2-Clause
2b887bd8fSJens Wiklander /*
3b887bd8fSJens Wiklander  * Copyright (c) 2017, Linaro Limited
4b887bd8fSJens Wiklander  */
5b887bd8fSJens Wiklander 
6d7ac7d0fSJens Wiklander #include <assert.h>
7b887bd8fSJens Wiklander #include <compiler.h>
8e1770e71SJens Wiklander #include <crypto/crypto.h>
96648f482SJens Wiklander #include <crypto/crypto_impl.h>
1033790cc1SJens Wiklander #include <kernel/panic.h>
11d7ac7d0fSJens Wiklander #include <stdlib.h>
12d7ac7d0fSJens Wiklander #include <string.h>
136d259e05SJens Wiklander #include <utee_defines.h>
14b887bd8fSJens Wiklander 
156648f482SJens Wiklander TEE_Result crypto_hash_alloc_ctx(void **ctx, uint32_t algo)
16b887bd8fSJens Wiklander {
177222fc6aSCedric Neveux 	TEE_Result res = TEE_ERROR_NOT_IMPLEMENTED;
186648f482SJens Wiklander 	struct crypto_hash_ctx *c = NULL;
196648f482SJens Wiklander 
207222fc6aSCedric Neveux 	/*
217222fc6aSCedric Neveux 	 * Use default cryptographic implement if no matching
227222fc6aSCedric Neveux 	 * drvcrypt device.
237222fc6aSCedric Neveux 	 */
247222fc6aSCedric Neveux 	res = drvcrypt_hash_alloc_ctx(&c, algo);
257222fc6aSCedric Neveux 
267222fc6aSCedric Neveux 	if (res == TEE_ERROR_NOT_IMPLEMENTED) {
276648f482SJens Wiklander 		switch (algo) {
286648f482SJens Wiklander 		case TEE_ALG_MD5:
296648f482SJens Wiklander 			res = crypto_md5_alloc_ctx(&c);
306648f482SJens Wiklander 			break;
316648f482SJens Wiklander 		case TEE_ALG_SHA1:
326648f482SJens Wiklander 			res = crypto_sha1_alloc_ctx(&c);
336648f482SJens Wiklander 			break;
346648f482SJens Wiklander 		case TEE_ALG_SHA224:
356648f482SJens Wiklander 			res = crypto_sha224_alloc_ctx(&c);
366648f482SJens Wiklander 			break;
376648f482SJens Wiklander 		case TEE_ALG_SHA256:
386648f482SJens Wiklander 			res = crypto_sha256_alloc_ctx(&c);
396648f482SJens Wiklander 			break;
406648f482SJens Wiklander 		case TEE_ALG_SHA384:
416648f482SJens Wiklander 			res = crypto_sha384_alloc_ctx(&c);
426648f482SJens Wiklander 			break;
436648f482SJens Wiklander 		case TEE_ALG_SHA512:
446648f482SJens Wiklander 			res = crypto_sha512_alloc_ctx(&c);
456648f482SJens Wiklander 			break;
4647645577SJerome Forissier 		case TEE_ALG_SM3:
4747645577SJerome Forissier 			res = crypto_sm3_alloc_ctx(&c);
4847645577SJerome Forissier 			break;
496648f482SJens Wiklander 		default:
507222fc6aSCedric Neveux 			break;
517222fc6aSCedric Neveux 		}
52b887bd8fSJens Wiklander 	}
53b887bd8fSJens Wiklander 
546648f482SJens Wiklander 	if (!res)
556648f482SJens Wiklander 		*ctx = c;
566648f482SJens Wiklander 
576648f482SJens Wiklander 	return res;
586648f482SJens Wiklander }
596648f482SJens Wiklander 
606648f482SJens Wiklander static const struct crypto_hash_ops *hash_ops(void *ctx)
616648f482SJens Wiklander {
626648f482SJens Wiklander 	struct crypto_hash_ctx *c = ctx;
636648f482SJens Wiklander 
646648f482SJens Wiklander 	assert(c && c->ops);
656648f482SJens Wiklander 
666648f482SJens Wiklander 	return c->ops;
676648f482SJens Wiklander }
686648f482SJens Wiklander 
696b3a371cSJens Wiklander void crypto_hash_free_ctx(void *ctx)
70ecf2e014SJens Wiklander {
71ce7a47f5SJerome Forissier 	if (ctx)
726648f482SJens Wiklander 		hash_ops(ctx)->free_ctx(ctx);
73ecf2e014SJens Wiklander }
74ecf2e014SJens Wiklander 
756b3a371cSJens Wiklander void crypto_hash_copy_state(void *dst_ctx, void *src_ctx)
76ecf2e014SJens Wiklander {
776648f482SJens Wiklander 	hash_ops(dst_ctx)->copy_state(dst_ctx, src_ctx);
78ecf2e014SJens Wiklander }
79ecf2e014SJens Wiklander 
806b3a371cSJens Wiklander TEE_Result crypto_hash_init(void *ctx)
81b887bd8fSJens Wiklander {
826648f482SJens Wiklander 	return hash_ops(ctx)->init(ctx);
83b887bd8fSJens Wiklander }
846648f482SJens Wiklander 
856b3a371cSJens Wiklander TEE_Result crypto_hash_update(void *ctx, const uint8_t *data, size_t len)
86b887bd8fSJens Wiklander {
876648f482SJens Wiklander 	return hash_ops(ctx)->update(ctx, data, len);
88b887bd8fSJens Wiklander }
896648f482SJens Wiklander 
906b3a371cSJens Wiklander TEE_Result crypto_hash_final(void *ctx, uint8_t *digest, size_t len)
91b887bd8fSJens Wiklander {
926648f482SJens Wiklander 	return hash_ops(ctx)->final(ctx, digest, len);
93b887bd8fSJens Wiklander }
9482d91db1SJens Wiklander 
9596098f01SJens Wiklander TEE_Result crypto_cipher_alloc_ctx(void **ctx, uint32_t algo)
9682d91db1SJens Wiklander {
9796098f01SJens Wiklander 	TEE_Result res = TEE_SUCCESS;
9896098f01SJens Wiklander 	struct crypto_cipher_ctx *c = NULL;
9996098f01SJens Wiklander 
10096098f01SJens Wiklander 	switch (algo) {
10196098f01SJens Wiklander 	case TEE_ALG_AES_ECB_NOPAD:
10296098f01SJens Wiklander 		res = crypto_aes_ecb_alloc_ctx(&c);
10396098f01SJens Wiklander 		break;
10496098f01SJens Wiklander 	case TEE_ALG_AES_CBC_NOPAD:
10596098f01SJens Wiklander 		res = crypto_aes_cbc_alloc_ctx(&c);
10696098f01SJens Wiklander 		break;
10796098f01SJens Wiklander 	case TEE_ALG_AES_CTR:
10896098f01SJens Wiklander 		res = crypto_aes_ctr_alloc_ctx(&c);
10996098f01SJens Wiklander 		break;
11096098f01SJens Wiklander 	case TEE_ALG_AES_CTS:
11196098f01SJens Wiklander 		res = crypto_aes_cts_alloc_ctx(&c);
11296098f01SJens Wiklander 		break;
11396098f01SJens Wiklander 	case TEE_ALG_AES_XTS:
11496098f01SJens Wiklander 		res = crypto_aes_xts_alloc_ctx(&c);
11596098f01SJens Wiklander 		break;
11696098f01SJens Wiklander 	case TEE_ALG_DES_ECB_NOPAD:
11796098f01SJens Wiklander 		res = crypto_des_ecb_alloc_ctx(&c);
11896098f01SJens Wiklander 		break;
11996098f01SJens Wiklander 	case TEE_ALG_DES3_ECB_NOPAD:
12096098f01SJens Wiklander 		res = crypto_des3_ecb_alloc_ctx(&c);
12196098f01SJens Wiklander 		break;
12296098f01SJens Wiklander 	case TEE_ALG_DES_CBC_NOPAD:
12396098f01SJens Wiklander 		res = crypto_des_cbc_alloc_ctx(&c);
12496098f01SJens Wiklander 		break;
12596098f01SJens Wiklander 	case TEE_ALG_DES3_CBC_NOPAD:
12696098f01SJens Wiklander 		res = crypto_des3_cbc_alloc_ctx(&c);
12796098f01SJens Wiklander 		break;
128ade6f848SJerome Forissier 	case TEE_ALG_SM4_ECB_NOPAD:
129ade6f848SJerome Forissier 		res = crypto_sm4_ecb_alloc_ctx(&c);
130ade6f848SJerome Forissier 		break;
131ade6f848SJerome Forissier 	case TEE_ALG_SM4_CBC_NOPAD:
132ade6f848SJerome Forissier 		res = crypto_sm4_cbc_alloc_ctx(&c);
133ade6f848SJerome Forissier 		break;
134ade6f848SJerome Forissier 	case TEE_ALG_SM4_CTR:
135ade6f848SJerome Forissier 		res = crypto_sm4_ctr_alloc_ctx(&c);
136ade6f848SJerome Forissier 		break;
13796098f01SJens Wiklander 	default:
1381c5fdd1fSJerome Forissier 		return TEE_ERROR_NOT_IMPLEMENTED;
13982d91db1SJens Wiklander 	}
14082d91db1SJens Wiklander 
14196098f01SJens Wiklander 	if (!res)
14296098f01SJens Wiklander 		*ctx = c;
14396098f01SJens Wiklander 
14496098f01SJens Wiklander 	return res;
14596098f01SJens Wiklander }
14696098f01SJens Wiklander 
14796098f01SJens Wiklander static const struct crypto_cipher_ops *cipher_ops(void *ctx)
14896098f01SJens Wiklander {
14996098f01SJens Wiklander 	struct crypto_cipher_ctx *c = ctx;
15096098f01SJens Wiklander 
15196098f01SJens Wiklander 	assert(c && c->ops);
15296098f01SJens Wiklander 
15396098f01SJens Wiklander 	return c->ops;
15496098f01SJens Wiklander }
15596098f01SJens Wiklander 
156cbda7091SJens Wiklander void crypto_cipher_free_ctx(void *ctx)
15772a9b1a0SJens Wiklander {
158ce7a47f5SJerome Forissier 	if (ctx)
15996098f01SJens Wiklander 		cipher_ops(ctx)->free_ctx(ctx);
16072a9b1a0SJens Wiklander }
16172a9b1a0SJens Wiklander 
162cbda7091SJens Wiklander void crypto_cipher_copy_state(void *dst_ctx, void *src_ctx)
16372a9b1a0SJens Wiklander {
16496098f01SJens Wiklander 	cipher_ops(dst_ctx)->copy_state(dst_ctx, src_ctx);
16572a9b1a0SJens Wiklander }
16672a9b1a0SJens Wiklander 
167cbda7091SJens Wiklander TEE_Result crypto_cipher_init(void *ctx, TEE_OperationMode mode,
168cbda7091SJens Wiklander 			      const uint8_t *key1, size_t key1_len,
169cbda7091SJens Wiklander 			      const uint8_t *key2, size_t key2_len,
170cbda7091SJens Wiklander 			      const uint8_t *iv, size_t iv_len)
17182d91db1SJens Wiklander {
17296098f01SJens Wiklander 	if (mode != TEE_MODE_DECRYPT && mode != TEE_MODE_ENCRYPT)
17396098f01SJens Wiklander 		return TEE_ERROR_BAD_PARAMETERS;
17496098f01SJens Wiklander 
17596098f01SJens Wiklander 	return cipher_ops(ctx)->init(ctx, mode, key1, key1_len, key2, key2_len,
17696098f01SJens Wiklander 				     iv, iv_len);
17782d91db1SJens Wiklander }
17882d91db1SJens Wiklander 
179cbda7091SJens Wiklander TEE_Result crypto_cipher_update(void *ctx, TEE_OperationMode mode __unused,
18096098f01SJens Wiklander 				bool last_block, const uint8_t *data,
18196098f01SJens Wiklander 				size_t len, uint8_t *dst)
18282d91db1SJens Wiklander {
18396098f01SJens Wiklander 	return cipher_ops(ctx)->update(ctx, last_block, data, len, dst);
18482d91db1SJens Wiklander }
18582d91db1SJens Wiklander 
186cbda7091SJens Wiklander void crypto_cipher_final(void *ctx)
18782d91db1SJens Wiklander {
18896098f01SJens Wiklander 	cipher_ops(ctx)->final(ctx);
18982d91db1SJens Wiklander }
190e9eaba5cSJens Wiklander 
1916d259e05SJens Wiklander TEE_Result crypto_cipher_get_block_size(uint32_t algo, size_t *size)
1926d259e05SJens Wiklander {
1936d259e05SJens Wiklander 	uint32_t class = TEE_ALG_GET_CLASS(algo);
1946d259e05SJens Wiklander 
1956d259e05SJens Wiklander 	if (class != TEE_OPERATION_CIPHER && class != TEE_OPERATION_MAC &&
1966d259e05SJens Wiklander 	    class != TEE_OPERATION_AE)
1976d259e05SJens Wiklander 		return TEE_ERROR_BAD_PARAMETERS;
1986d259e05SJens Wiklander 
1996d259e05SJens Wiklander 	switch (TEE_ALG_GET_MAIN_ALG(algo)) {
2006d259e05SJens Wiklander 	case TEE_MAIN_ALGO_AES:
2016d259e05SJens Wiklander 		*size = TEE_AES_BLOCK_SIZE;
2026d259e05SJens Wiklander 		return TEE_SUCCESS;
2036d259e05SJens Wiklander 	case TEE_MAIN_ALGO_DES:
2046d259e05SJens Wiklander 	case TEE_MAIN_ALGO_DES3:
2056d259e05SJens Wiklander 		*size = TEE_DES_BLOCK_SIZE;
2066d259e05SJens Wiklander 		return TEE_SUCCESS;
207ade6f848SJerome Forissier 	case TEE_MAIN_ALGO_SM4:
208ade6f848SJerome Forissier 		*size = TEE_SM4_BLOCK_SIZE;
209ade6f848SJerome Forissier 		return TEE_SUCCESS;
2106d259e05SJens Wiklander 	default:
2116d259e05SJens Wiklander 		return TEE_ERROR_NOT_SUPPORTED;
2126d259e05SJens Wiklander 	}
2136d259e05SJens Wiklander }
2146d259e05SJens Wiklander 
2155da36a24SJens Wiklander TEE_Result crypto_mac_alloc_ctx(void **ctx, uint32_t algo)
216e9eaba5cSJens Wiklander {
2175da36a24SJens Wiklander 	TEE_Result res = TEE_SUCCESS;
2185da36a24SJens Wiklander 	struct crypto_mac_ctx *c = NULL;
2195da36a24SJens Wiklander 
2205da36a24SJens Wiklander 	switch (algo) {
2215da36a24SJens Wiklander 	case TEE_ALG_HMAC_MD5:
2225da36a24SJens Wiklander 		res = crypto_hmac_md5_alloc_ctx(&c);
2235da36a24SJens Wiklander 		break;
2245da36a24SJens Wiklander 	case TEE_ALG_HMAC_SHA1:
2255da36a24SJens Wiklander 		res = crypto_hmac_sha1_alloc_ctx(&c);
2265da36a24SJens Wiklander 		break;
2275da36a24SJens Wiklander 	case TEE_ALG_HMAC_SHA224:
2285da36a24SJens Wiklander 		res = crypto_hmac_sha224_alloc_ctx(&c);
2295da36a24SJens Wiklander 		break;
2305da36a24SJens Wiklander 	case TEE_ALG_HMAC_SHA256:
2315da36a24SJens Wiklander 		res = crypto_hmac_sha256_alloc_ctx(&c);
2325da36a24SJens Wiklander 		break;
2335da36a24SJens Wiklander 	case TEE_ALG_HMAC_SHA384:
2345da36a24SJens Wiklander 		res = crypto_hmac_sha384_alloc_ctx(&c);
2355da36a24SJens Wiklander 		break;
2365da36a24SJens Wiklander 	case TEE_ALG_HMAC_SHA512:
2375da36a24SJens Wiklander 		res = crypto_hmac_sha512_alloc_ctx(&c);
2385da36a24SJens Wiklander 		break;
23947645577SJerome Forissier 	case TEE_ALG_HMAC_SM3:
24047645577SJerome Forissier 		res = crypto_hmac_sm3_alloc_ctx(&c);
24147645577SJerome Forissier 		break;
2425da36a24SJens Wiklander 	case TEE_ALG_AES_CBC_MAC_NOPAD:
2435da36a24SJens Wiklander 		res = crypto_aes_cbc_mac_nopad_alloc_ctx(&c);
2445da36a24SJens Wiklander 		break;
2455da36a24SJens Wiklander 	case TEE_ALG_AES_CBC_MAC_PKCS5:
2465da36a24SJens Wiklander 		res = crypto_aes_cbc_mac_pkcs5_alloc_ctx(&c);
2475da36a24SJens Wiklander 		break;
2485da36a24SJens Wiklander 	case TEE_ALG_DES_CBC_MAC_NOPAD:
2495da36a24SJens Wiklander 		res = crypto_des_cbc_mac_nopad_alloc_ctx(&c);
2505da36a24SJens Wiklander 		break;
2515da36a24SJens Wiklander 	case TEE_ALG_DES_CBC_MAC_PKCS5:
2525da36a24SJens Wiklander 		res = crypto_des_cbc_mac_pkcs5_alloc_ctx(&c);
2535da36a24SJens Wiklander 		break;
2545da36a24SJens Wiklander 	case TEE_ALG_DES3_CBC_MAC_NOPAD:
2555da36a24SJens Wiklander 		res = crypto_des3_cbc_mac_nopad_alloc_ctx(&c);
2565da36a24SJens Wiklander 		break;
2575da36a24SJens Wiklander 	case TEE_ALG_DES3_CBC_MAC_PKCS5:
2585da36a24SJens Wiklander 		res = crypto_des3_cbc_mac_pkcs5_alloc_ctx(&c);
2595da36a24SJens Wiklander 		break;
2605da36a24SJens Wiklander 	case TEE_ALG_AES_CMAC:
2615da36a24SJens Wiklander 		res = crypto_aes_cmac_alloc_ctx(&c);
2625da36a24SJens Wiklander 		break;
2635da36a24SJens Wiklander 	default:
2645da36a24SJens Wiklander 		return TEE_ERROR_NOT_SUPPORTED;
2655da36a24SJens Wiklander 	}
2665da36a24SJens Wiklander 
2675da36a24SJens Wiklander 	if (!res)
2685da36a24SJens Wiklander 		*ctx = c;
2695da36a24SJens Wiklander 
2705da36a24SJens Wiklander 	return res;
2715da36a24SJens Wiklander }
2725da36a24SJens Wiklander 
2735da36a24SJens Wiklander static const struct crypto_mac_ops *mac_ops(void *ctx)
2745da36a24SJens Wiklander {
2755da36a24SJens Wiklander 	struct crypto_mac_ctx *c = ctx;
2765da36a24SJens Wiklander 
2775da36a24SJens Wiklander 	assert(c && c->ops);
2785da36a24SJens Wiklander 
2795da36a24SJens Wiklander 	return c->ops;
280e9eaba5cSJens Wiklander }
281e9eaba5cSJens Wiklander 
282c69bc615SJens Wiklander void crypto_mac_free_ctx(void *ctx)
28382ef73bcSJens Wiklander {
284ce7a47f5SJerome Forissier 	if (ctx)
2855da36a24SJens Wiklander 		mac_ops(ctx)->free_ctx(ctx);
28682ef73bcSJens Wiklander }
28782ef73bcSJens Wiklander 
288c69bc615SJens Wiklander void crypto_mac_copy_state(void *dst_ctx, void *src_ctx)
28982ef73bcSJens Wiklander {
2905da36a24SJens Wiklander 	mac_ops(dst_ctx)->copy_state(dst_ctx, src_ctx);
29182ef73bcSJens Wiklander }
29282ef73bcSJens Wiklander 
293c69bc615SJens Wiklander TEE_Result crypto_mac_init(void *ctx, const uint8_t *key, size_t len)
294e9eaba5cSJens Wiklander {
2955da36a24SJens Wiklander 	return mac_ops(ctx)->init(ctx, key, len);
296e9eaba5cSJens Wiklander }
297e9eaba5cSJens Wiklander 
298c69bc615SJens Wiklander TEE_Result crypto_mac_update(void *ctx, const uint8_t *data, size_t len)
299e9eaba5cSJens Wiklander {
3005da36a24SJens Wiklander 	if (!len)
3015da36a24SJens Wiklander 		return TEE_SUCCESS;
3025da36a24SJens Wiklander 
3035da36a24SJens Wiklander 	return mac_ops(ctx)->update(ctx, data, len);
304e9eaba5cSJens Wiklander }
305e9eaba5cSJens Wiklander 
306c69bc615SJens Wiklander TEE_Result crypto_mac_final(void *ctx, uint8_t *digest, size_t digest_len)
307e9eaba5cSJens Wiklander {
3085da36a24SJens Wiklander 	return mac_ops(ctx)->final(ctx, digest, digest_len);
309e9eaba5cSJens Wiklander }
310e9eaba5cSJens Wiklander 
311d7ac7d0fSJens Wiklander TEE_Result crypto_authenc_alloc_ctx(void **ctx, uint32_t algo)
3128875ce46SJens Wiklander {
313f1e9b21bSJens Wiklander 	TEE_Result res = TEE_SUCCESS;
314f1e9b21bSJens Wiklander 	struct crypto_authenc_ctx *c = NULL;
315f1e9b21bSJens Wiklander 
316d0620b01SJens Wiklander 	switch (algo) {
317d0620b01SJens Wiklander #if defined(CFG_CRYPTO_CCM)
318d0620b01SJens Wiklander 	case TEE_ALG_AES_CCM:
319f1e9b21bSJens Wiklander 		res = crypto_aes_ccm_alloc_ctx(&c);
320f1e9b21bSJens Wiklander 		break;
321d0620b01SJens Wiklander #endif
322d0620b01SJens Wiklander #if defined(CFG_CRYPTO_GCM)
323d0620b01SJens Wiklander 	case TEE_ALG_AES_GCM:
324f1e9b21bSJens Wiklander 		res = crypto_aes_gcm_alloc_ctx(&c);
325f1e9b21bSJens Wiklander 		break;
326d0620b01SJens Wiklander #endif
327d0620b01SJens Wiklander 	default:
3288875ce46SJens Wiklander 		return TEE_ERROR_NOT_IMPLEMENTED;
3298875ce46SJens Wiklander 	}
330f1e9b21bSJens Wiklander 
331f1e9b21bSJens Wiklander 	if (!res)
332f1e9b21bSJens Wiklander 		*ctx = c;
333f1e9b21bSJens Wiklander 
334f1e9b21bSJens Wiklander 	return res;
335d0620b01SJens Wiklander }
3368875ce46SJens Wiklander 
337f1e9b21bSJens Wiklander static const struct crypto_authenc_ops *ae_ops(void *ctx)
338d7ac7d0fSJens Wiklander {
339f1e9b21bSJens Wiklander 	struct crypto_authenc_ctx *c = ctx;
340f1e9b21bSJens Wiklander 
341f1e9b21bSJens Wiklander 	assert(c && c->ops);
342f1e9b21bSJens Wiklander 
343f1e9b21bSJens Wiklander 	return c->ops;
344d7ac7d0fSJens Wiklander }
345d7ac7d0fSJens Wiklander 
34652ee414bSJens Wiklander TEE_Result crypto_authenc_init(void *ctx, TEE_OperationMode mode,
347f1e9b21bSJens Wiklander 			       const uint8_t *key, size_t key_len,
348f1e9b21bSJens Wiklander 			       const uint8_t *nonce, size_t nonce_len,
349f1e9b21bSJens Wiklander 			       size_t tag_len, size_t aad_len,
350f1e9b21bSJens Wiklander 			       size_t payload_len)
351d7ac7d0fSJens Wiklander {
352f1e9b21bSJens Wiklander 	return ae_ops(ctx)->init(ctx, mode, key, key_len, nonce, nonce_len,
353f1e9b21bSJens Wiklander 				 tag_len, aad_len, payload_len);
354d7ac7d0fSJens Wiklander }
355d7ac7d0fSJens Wiklander 
35652ee414bSJens Wiklander TEE_Result crypto_authenc_update_aad(void *ctx, TEE_OperationMode mode __unused,
357f1e9b21bSJens Wiklander 				     const uint8_t *data, size_t len)
3588875ce46SJens Wiklander {
359f1e9b21bSJens Wiklander 	return ae_ops(ctx)->update_aad(ctx, data, len);
360d0620b01SJens Wiklander }
3618875ce46SJens Wiklander 
362d0620b01SJens Wiklander 
36352ee414bSJens Wiklander TEE_Result crypto_authenc_update_payload(void *ctx, TEE_OperationMode mode,
364f1e9b21bSJens Wiklander 					 const uint8_t *src_data,
365f1e9b21bSJens Wiklander 					 size_t src_len, uint8_t *dst_data,
366f1e9b21bSJens Wiklander 					 size_t *dst_len)
367f1e9b21bSJens Wiklander {
368f1e9b21bSJens Wiklander 	if (*dst_len < src_len)
369d0620b01SJens Wiklander 		return TEE_ERROR_SHORT_BUFFER;
370d0620b01SJens Wiklander 	*dst_len = src_len;
371d0620b01SJens Wiklander 
372f1e9b21bSJens Wiklander 	return ae_ops(ctx)->update_payload(ctx, mode, src_data, src_len,
373f1e9b21bSJens Wiklander 					   dst_data);
374d0620b01SJens Wiklander }
3758875ce46SJens Wiklander 
37652ee414bSJens Wiklander TEE_Result crypto_authenc_enc_final(void *ctx, const uint8_t *src_data,
37752ee414bSJens Wiklander 				    size_t src_len, uint8_t *dst_data,
37852ee414bSJens Wiklander 				    size_t *dst_len, uint8_t *dst_tag,
37952ee414bSJens Wiklander 				    size_t *dst_tag_len)
3808875ce46SJens Wiklander {
381f1e9b21bSJens Wiklander 	if (*dst_len < src_len)
382f1e9b21bSJens Wiklander 		return TEE_ERROR_SHORT_BUFFER;
383d0620b01SJens Wiklander 	*dst_len = src_len;
384d0620b01SJens Wiklander 
385f1e9b21bSJens Wiklander 	return ae_ops(ctx)->enc_final(ctx, src_data, src_len, dst_data,
386f1e9b21bSJens Wiklander 				      dst_tag, dst_tag_len);
3878875ce46SJens Wiklander }
3888875ce46SJens Wiklander 
38952ee414bSJens Wiklander TEE_Result crypto_authenc_dec_final(void *ctx, const uint8_t *src_data,
39052ee414bSJens Wiklander 				    size_t src_len, uint8_t *dst_data,
39152ee414bSJens Wiklander 				    size_t *dst_len, const uint8_t *tag,
39252ee414bSJens Wiklander 				    size_t tag_len)
3938875ce46SJens Wiklander {
394f1e9b21bSJens Wiklander 	if (*dst_len < src_len)
395f1e9b21bSJens Wiklander 		return TEE_ERROR_SHORT_BUFFER;
396f1e9b21bSJens Wiklander 	*dst_len = src_len;
397f1e9b21bSJens Wiklander 
398f1e9b21bSJens Wiklander 	return ae_ops(ctx)->dec_final(ctx, src_data, src_len, dst_data, tag,
399f1e9b21bSJens Wiklander 				      tag_len);
4008875ce46SJens Wiklander }
401f1e9b21bSJens Wiklander 
40252ee414bSJens Wiklander void crypto_authenc_final(void *ctx)
403f1e9b21bSJens Wiklander {
404f1e9b21bSJens Wiklander 	ae_ops(ctx)->final(ctx);
405f1e9b21bSJens Wiklander }
406f1e9b21bSJens Wiklander 
40752ee414bSJens Wiklander void crypto_authenc_free_ctx(void *ctx)
408f1e9b21bSJens Wiklander {
409f1e9b21bSJens Wiklander 	if (ctx)
410f1e9b21bSJens Wiklander 		ae_ops(ctx)->free_ctx(ctx);
411f1e9b21bSJens Wiklander }
412f1e9b21bSJens Wiklander 
41352ee414bSJens Wiklander void crypto_authenc_copy_state(void *dst_ctx, void *src_ctx)
414f1e9b21bSJens Wiklander {
415f1e9b21bSJens Wiklander 	ae_ops(dst_ctx)->copy_state(dst_ctx, src_ctx);
416d0620b01SJens Wiklander }
41733790cc1SJens Wiklander 
418da1de557SJens Wiklander #if !defined(CFG_CRYPTO_RSA) && !defined(CFG_CRYPTO_DSA) && \
419da1de557SJens Wiklander     !defined(CFG_CRYPTO_DH) && !defined(CFG_CRYPTO_ECC)
42033790cc1SJens Wiklander struct bignum *crypto_bignum_allocate(size_t size_bits __unused)
42133790cc1SJens Wiklander {
42233790cc1SJens Wiklander 	return NULL;
42333790cc1SJens Wiklander }
42433790cc1SJens Wiklander 
42533790cc1SJens Wiklander TEE_Result crypto_bignum_bin2bn(const uint8_t *from __unused,
42633790cc1SJens Wiklander 				size_t fromsize __unused,
42733790cc1SJens Wiklander 				struct bignum *to __unused)
42833790cc1SJens Wiklander {
42933790cc1SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
43033790cc1SJens Wiklander }
43133790cc1SJens Wiklander 
43233790cc1SJens Wiklander size_t crypto_bignum_num_bytes(struct bignum *a __unused)
43333790cc1SJens Wiklander {
43433790cc1SJens Wiklander 	return 0;
43533790cc1SJens Wiklander }
43633790cc1SJens Wiklander 
43733790cc1SJens Wiklander size_t crypto_bignum_num_bits(struct bignum *a __unused)
43833790cc1SJens Wiklander {
43933790cc1SJens Wiklander 	return 0;
44033790cc1SJens Wiklander }
44133790cc1SJens Wiklander 
44233790cc1SJens Wiklander /*
44333790cc1SJens Wiklander  * crypto_bignum_allocate() and crypto_bignum_bin2bn() failing should be
44433790cc1SJens Wiklander  * enough to guarantee that the functions calling this function aren't
44533790cc1SJens Wiklander  * called, but just in case add a panic() here to avoid unexpected
44633790cc1SJens Wiklander  * behavoir.
44733790cc1SJens Wiklander  */
44833790cc1SJens Wiklander static void bignum_cant_happen(void)
44933790cc1SJens Wiklander {
45033790cc1SJens Wiklander 	volatile bool b = true;
45133790cc1SJens Wiklander 
45233790cc1SJens Wiklander 	/* Avoid warning about function does not return */
45333790cc1SJens Wiklander 	if (b)
45433790cc1SJens Wiklander 		panic();
45533790cc1SJens Wiklander }
45633790cc1SJens Wiklander 
45733790cc1SJens Wiklander void crypto_bignum_bn2bin(const struct bignum *from __unused,
45833790cc1SJens Wiklander 			  uint8_t *to __unused)
45933790cc1SJens Wiklander {
46033790cc1SJens Wiklander 	bignum_cant_happen();
46133790cc1SJens Wiklander }
46233790cc1SJens Wiklander 
46333790cc1SJens Wiklander void crypto_bignum_copy(struct bignum *to __unused,
46433790cc1SJens Wiklander 			const struct bignum *from __unused)
46533790cc1SJens Wiklander {
46633790cc1SJens Wiklander 	bignum_cant_happen();
46733790cc1SJens Wiklander }
46833790cc1SJens Wiklander 
46933790cc1SJens Wiklander void crypto_bignum_free(struct bignum *a)
47033790cc1SJens Wiklander {
47133790cc1SJens Wiklander 	if (a)
47233790cc1SJens Wiklander 		panic();
47333790cc1SJens Wiklander }
47433790cc1SJens Wiklander 
47533790cc1SJens Wiklander void crypto_bignum_clear(struct bignum *a __unused)
47633790cc1SJens Wiklander {
47733790cc1SJens Wiklander 	bignum_cant_happen();
47833790cc1SJens Wiklander }
47933790cc1SJens Wiklander 
48033790cc1SJens Wiklander /* return -1 if a<b, 0 if a==b, +1 if a>b */
48133790cc1SJens Wiklander int32_t crypto_bignum_compare(struct bignum *a __unused,
48233790cc1SJens Wiklander 			      struct bignum *b __unused)
48333790cc1SJens Wiklander {
48433790cc1SJens Wiklander 	bignum_cant_happen();
48533790cc1SJens Wiklander 	return -1;
48633790cc1SJens Wiklander }
487da1de557SJens Wiklander #endif
488291e5450SJens Wiklander 
489da1de557SJens Wiklander #if !defined(CFG_CRYPTO_RSA)
490291e5450SJens Wiklander TEE_Result crypto_acipher_alloc_rsa_keypair(struct rsa_keypair *s __unused,
491291e5450SJens Wiklander 					    size_t key_size_bits __unused)
492291e5450SJens Wiklander {
493291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
494291e5450SJens Wiklander }
495291e5450SJens Wiklander 
496291e5450SJens Wiklander TEE_Result
497291e5450SJens Wiklander crypto_acipher_alloc_rsa_public_key(struct rsa_public_key *s __unused,
498291e5450SJens Wiklander 				    size_t key_size_bits __unused)
499291e5450SJens Wiklander {
500291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
501291e5450SJens Wiklander }
502291e5450SJens Wiklander 
503291e5450SJens Wiklander void crypto_acipher_free_rsa_public_key(struct rsa_public_key *s __unused)
504291e5450SJens Wiklander {
505291e5450SJens Wiklander }
506291e5450SJens Wiklander 
507291e5450SJens Wiklander TEE_Result crypto_acipher_gen_rsa_key(struct rsa_keypair *key __unused,
508291e5450SJens Wiklander 				      size_t key_size __unused)
509291e5450SJens Wiklander {
510291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
511291e5450SJens Wiklander }
512291e5450SJens Wiklander 
513291e5450SJens Wiklander TEE_Result crypto_acipher_rsanopad_decrypt(struct rsa_keypair *key __unused,
514291e5450SJens Wiklander 					   const uint8_t *src __unused,
515291e5450SJens Wiklander 					   size_t src_len __unused,
516291e5450SJens Wiklander 					   uint8_t *dst __unused,
517291e5450SJens Wiklander 					   size_t *dst_len __unused)
518291e5450SJens Wiklander {
519291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
520291e5450SJens Wiklander }
521291e5450SJens Wiklander 
522291e5450SJens Wiklander TEE_Result crypto_acipher_rsanopad_encrypt(struct rsa_public_key *key __unused,
523291e5450SJens Wiklander 					   const uint8_t *src __unused,
524291e5450SJens Wiklander 					   size_t src_len __unused,
525291e5450SJens Wiklander 					   uint8_t *dst __unused,
526291e5450SJens Wiklander 					   size_t *dst_len __unused)
527291e5450SJens Wiklander {
528291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
529291e5450SJens Wiklander }
530291e5450SJens Wiklander 
531291e5450SJens Wiklander TEE_Result crypto_acipher_rsaes_decrypt(uint32_t algo __unused,
532291e5450SJens Wiklander 					struct rsa_keypair *key __unused,
533291e5450SJens Wiklander 					const uint8_t *label __unused,
534291e5450SJens Wiklander 					size_t label_len __unused,
535291e5450SJens Wiklander 					const uint8_t *src __unused,
536291e5450SJens Wiklander 					size_t src_len __unused,
537291e5450SJens Wiklander 					uint8_t *dst __unused,
538291e5450SJens Wiklander 					size_t *dst_len __unused)
539291e5450SJens Wiklander {
540291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
541291e5450SJens Wiklander }
542291e5450SJens Wiklander 
543291e5450SJens Wiklander TEE_Result crypto_acipher_rsaes_encrypt(uint32_t algo __unused,
544291e5450SJens Wiklander 					struct rsa_public_key *key __unused,
545291e5450SJens Wiklander 					const uint8_t *label __unused,
546291e5450SJens Wiklander 					size_t label_len __unused,
547291e5450SJens Wiklander 					const uint8_t *src __unused,
548291e5450SJens Wiklander 					size_t src_len __unused,
549291e5450SJens Wiklander 					uint8_t *dst __unused,
550291e5450SJens Wiklander 					size_t *dst_len __unused)
551291e5450SJens Wiklander {
552291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
553291e5450SJens Wiklander }
554291e5450SJens Wiklander 
555291e5450SJens Wiklander TEE_Result crypto_acipher_rsassa_sign(uint32_t algo __unused,
556291e5450SJens Wiklander 				      struct rsa_keypair *key __unused,
557291e5450SJens Wiklander 				      int salt_len __unused,
558291e5450SJens Wiklander 				      const uint8_t *msg __unused,
559291e5450SJens Wiklander 				      size_t msg_len __unused,
560291e5450SJens Wiklander 				      uint8_t *sig __unused,
561291e5450SJens Wiklander 				      size_t *sig_len __unused)
562291e5450SJens Wiklander {
563291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
564291e5450SJens Wiklander }
565291e5450SJens Wiklander 
566291e5450SJens Wiklander TEE_Result crypto_acipher_rsassa_verify(uint32_t algo __unused,
567291e5450SJens Wiklander 					struct rsa_public_key *key __unused,
568291e5450SJens Wiklander 					int salt_len __unused,
569291e5450SJens Wiklander 					const uint8_t *msg __unused,
570291e5450SJens Wiklander 					size_t msg_len __unused,
571291e5450SJens Wiklander 					const uint8_t *sig __unused,
572291e5450SJens Wiklander 					size_t sig_len __unused)
573291e5450SJens Wiklander {
574291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
575291e5450SJens Wiklander }
576da1de557SJens Wiklander #endif /*!CFG_CRYPTO_RSA*/
577291e5450SJens Wiklander 
578da1de557SJens Wiklander #if !defined(CFG_CRYPTO_DSA)
579291e5450SJens Wiklander TEE_Result crypto_acipher_alloc_dsa_keypair(struct dsa_keypair *s __unused,
580291e5450SJens Wiklander 					    size_t key_size_bits __unused)
581291e5450SJens Wiklander {
582291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
583291e5450SJens Wiklander }
584291e5450SJens Wiklander 
585291e5450SJens Wiklander TEE_Result
586291e5450SJens Wiklander crypto_acipher_alloc_dsa_public_key(struct dsa_public_key *s __unused,
587291e5450SJens Wiklander 				    size_t key_size_bits __unused)
588291e5450SJens Wiklander {
589291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
590291e5450SJens Wiklander }
591291e5450SJens Wiklander 
592291e5450SJens Wiklander TEE_Result crypto_acipher_gen_dsa_key(struct dsa_keypair *key __unused,
593291e5450SJens Wiklander 				      size_t key_size __unused)
594291e5450SJens Wiklander {
595291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
596291e5450SJens Wiklander }
597291e5450SJens Wiklander 
598291e5450SJens Wiklander TEE_Result crypto_acipher_dsa_sign(uint32_t algo __unused,
599291e5450SJens Wiklander 				   struct dsa_keypair *key __unused,
600291e5450SJens Wiklander 				   const uint8_t *msg __unused,
601291e5450SJens Wiklander 				   size_t msg_len __unused,
602291e5450SJens Wiklander 				   uint8_t *sig __unused,
603291e5450SJens Wiklander 				   size_t *sig_len __unused)
604291e5450SJens Wiklander {
605291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
606291e5450SJens Wiklander }
607291e5450SJens Wiklander 
608291e5450SJens Wiklander TEE_Result crypto_acipher_dsa_verify(uint32_t algo __unused,
609291e5450SJens Wiklander 				     struct dsa_public_key *key __unused,
610291e5450SJens Wiklander 				     const uint8_t *msg __unused,
611291e5450SJens Wiklander 				     size_t msg_len __unused,
612291e5450SJens Wiklander 				     const uint8_t *sig __unused,
613291e5450SJens Wiklander 				     size_t sig_len __unused)
614291e5450SJens Wiklander {
615291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
616291e5450SJens Wiklander }
617da1de557SJens Wiklander #endif /*!CFG_CRYPTO_DSA*/
618291e5450SJens Wiklander 
619da1de557SJens Wiklander #if !defined(CFG_CRYPTO_DH)
620291e5450SJens Wiklander TEE_Result crypto_acipher_alloc_dh_keypair(struct dh_keypair *s __unused,
621291e5450SJens Wiklander 					   size_t key_size_bits __unused)
622291e5450SJens Wiklander {
623291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
624291e5450SJens Wiklander }
625291e5450SJens Wiklander 
626291e5450SJens Wiklander TEE_Result crypto_acipher_gen_dh_key(struct dh_keypair *key __unused,
627291e5450SJens Wiklander 				     struct bignum *q __unused,
628291e5450SJens Wiklander 				     size_t xbits __unused)
629291e5450SJens Wiklander {
630291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
631291e5450SJens Wiklander }
632291e5450SJens Wiklander 
633291e5450SJens Wiklander TEE_Result
634291e5450SJens Wiklander crypto_acipher_dh_shared_secret(struct dh_keypair *private_key __unused,
635291e5450SJens Wiklander 				struct bignum *public_key __unused,
636291e5450SJens Wiklander 				struct bignum *secret __unused)
637291e5450SJens Wiklander {
638291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
639291e5450SJens Wiklander }
640da1de557SJens Wiklander #endif /*!CFG_CRYPTO_DH*/
641291e5450SJens Wiklander 
642da1de557SJens Wiklander #if !defined(CFG_CRYPTO_ECC)
643291e5450SJens Wiklander TEE_Result
644291e5450SJens Wiklander crypto_acipher_alloc_ecc_public_key(struct ecc_public_key *s __unused,
645291e5450SJens Wiklander 				    size_t key_size_bits __unused)
646291e5450SJens Wiklander {
647291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
648291e5450SJens Wiklander }
649291e5450SJens Wiklander 
650291e5450SJens Wiklander TEE_Result crypto_acipher_alloc_ecc_keypair(struct ecc_keypair *s __unused,
651291e5450SJens Wiklander 					    size_t key_size_bits __unused)
652291e5450SJens Wiklander {
653291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
654291e5450SJens Wiklander }
655291e5450SJens Wiklander 
656291e5450SJens Wiklander void crypto_acipher_free_ecc_public_key(struct ecc_public_key *s __unused)
657291e5450SJens Wiklander {
658291e5450SJens Wiklander }
659291e5450SJens Wiklander 
660291e5450SJens Wiklander TEE_Result crypto_acipher_gen_ecc_key(struct ecc_keypair *key __unused)
661291e5450SJens Wiklander {
662291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
663291e5450SJens Wiklander }
664291e5450SJens Wiklander 
665291e5450SJens Wiklander TEE_Result crypto_acipher_ecc_sign(uint32_t algo __unused,
666291e5450SJens Wiklander 				   struct ecc_keypair *key __unused,
667291e5450SJens Wiklander 				   const uint8_t *msg __unused,
668291e5450SJens Wiklander 				   size_t msg_len __unused,
669291e5450SJens Wiklander 				   uint8_t *sig __unused,
670291e5450SJens Wiklander 				   size_t *sig_len __unused)
671291e5450SJens Wiklander {
672291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
673291e5450SJens Wiklander }
674291e5450SJens Wiklander 
675291e5450SJens Wiklander TEE_Result crypto_acipher_ecc_verify(uint32_t algo __unused,
676291e5450SJens Wiklander 				     struct ecc_public_key *key __unused,
677291e5450SJens Wiklander 				     const uint8_t *msg __unused,
678291e5450SJens Wiklander 				     size_t msg_len __unused,
679291e5450SJens Wiklander 				     const uint8_t *sig __unused,
680291e5450SJens Wiklander 				     size_t sig_len __unused)
681291e5450SJens Wiklander {
682291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
683291e5450SJens Wiklander }
684291e5450SJens Wiklander 
685291e5450SJens Wiklander TEE_Result
686291e5450SJens Wiklander crypto_acipher_ecc_shared_secret(struct ecc_keypair *private_key __unused,
687291e5450SJens Wiklander 				 struct ecc_public_key *public_key __unused,
688291e5450SJens Wiklander 				 void *secret __unused,
689291e5450SJens Wiklander 				 unsigned long *secret_len __unused)
690291e5450SJens Wiklander {
691291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
692291e5450SJens Wiklander }
693da1de557SJens Wiklander #endif /*!CFG_CRYPTO_ECC*/
69491fc6bd8SJerome Forissier 
69591fc6bd8SJerome Forissier #if !defined(CFG_CRYPTO_SM2_PKE)
69691fc6bd8SJerome Forissier TEE_Result crypto_acipher_sm2_pke_decrypt(struct ecc_keypair *key __unused,
69791fc6bd8SJerome Forissier 					  const uint8_t *src __unused,
69891fc6bd8SJerome Forissier 					  size_t src_len __unused,
69991fc6bd8SJerome Forissier 					  uint8_t *dst __unused,
70091fc6bd8SJerome Forissier 					  size_t *dst_len __unused)
70191fc6bd8SJerome Forissier {
70291fc6bd8SJerome Forissier 	return TEE_ERROR_NOT_IMPLEMENTED;
70391fc6bd8SJerome Forissier }
70491fc6bd8SJerome Forissier 
70591fc6bd8SJerome Forissier TEE_Result crypto_acipher_sm2_pke_encrypt(struct ecc_public_key *key __unused,
70691fc6bd8SJerome Forissier 					  const uint8_t *src __unused,
70791fc6bd8SJerome Forissier 					  size_t src_len __unused,
70891fc6bd8SJerome Forissier 					  uint8_t *dst __unused,
70991fc6bd8SJerome Forissier 					  size_t *dst_len __unused)
71091fc6bd8SJerome Forissier {
71191fc6bd8SJerome Forissier 	return TEE_ERROR_NOT_IMPLEMENTED;
71291fc6bd8SJerome Forissier }
71391fc6bd8SJerome Forissier #endif /* !CFG_CRYPTO_SM2_PKE */
714*0f151943SJerome Forissier 
715*0f151943SJerome Forissier #if !defined(CFG_CRYPTO_SM2_DSA)
716*0f151943SJerome Forissier TEE_Result crypto_acipher_sm2_dsa_sign(uint32_t algo __unused,
717*0f151943SJerome Forissier 				       struct ecc_keypair *key __unused,
718*0f151943SJerome Forissier 				       const uint8_t *msg __unused,
719*0f151943SJerome Forissier 				       size_t msg_len __unused,
720*0f151943SJerome Forissier 				       uint8_t *sig __unused,
721*0f151943SJerome Forissier 				       size_t *sig_len __unused)
722*0f151943SJerome Forissier {
723*0f151943SJerome Forissier 	return TEE_ERROR_NOT_IMPLEMENTED;
724*0f151943SJerome Forissier }
725*0f151943SJerome Forissier 
726*0f151943SJerome Forissier TEE_Result crypto_acipher_sm2_dsa_verify(uint32_t algo __unused,
727*0f151943SJerome Forissier 					 struct ecc_public_key *key __unused,
728*0f151943SJerome Forissier 					 const uint8_t *msg __unused,
729*0f151943SJerome Forissier 					 size_t msg_len __unused,
730*0f151943SJerome Forissier 					 const uint8_t *sig __unused,
731*0f151943SJerome Forissier 					 size_t sig_len __unused)
732*0f151943SJerome Forissier {
733*0f151943SJerome Forissier 	return TEE_ERROR_NOT_IMPLEMENTED;
734*0f151943SJerome Forissier }
735*0f151943SJerome Forissier #endif /* !CFG_CRYPTO_SM2_DSA */
736