xref: /optee_os/core/crypto/crypto.c (revision 96098f011f7cc334d2c9eb694e1cc45ded4f64cf)
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>
8d0620b01SJens Wiklander #include <crypto/aes-ccm.h>
9d0620b01SJens Wiklander #include <crypto/aes-gcm.h>
10e1770e71SJens Wiklander #include <crypto/crypto.h>
116648f482SJens Wiklander #include <crypto/crypto_impl.h>
1233790cc1SJens Wiklander #include <kernel/panic.h>
13d7ac7d0fSJens Wiklander #include <stdlib.h>
14d7ac7d0fSJens Wiklander #include <string.h>
156d259e05SJens Wiklander #include <utee_defines.h>
16b887bd8fSJens Wiklander 
176648f482SJens Wiklander TEE_Result crypto_hash_alloc_ctx(void **ctx, uint32_t algo)
18b887bd8fSJens Wiklander {
196648f482SJens Wiklander 	TEE_Result res = TEE_SUCCESS;
206648f482SJens Wiklander 	struct crypto_hash_ctx *c = NULL;
216648f482SJens Wiklander 
226648f482SJens Wiklander 	switch (algo) {
236648f482SJens Wiklander 	case TEE_ALG_MD5:
246648f482SJens Wiklander 		res = crypto_md5_alloc_ctx(&c);
256648f482SJens Wiklander 		break;
266648f482SJens Wiklander 	case TEE_ALG_SHA1:
276648f482SJens Wiklander 		res = crypto_sha1_alloc_ctx(&c);
286648f482SJens Wiklander 		break;
296648f482SJens Wiklander 	case TEE_ALG_SHA224:
306648f482SJens Wiklander 		res = crypto_sha224_alloc_ctx(&c);
316648f482SJens Wiklander 		break;
326648f482SJens Wiklander 	case TEE_ALG_SHA256:
336648f482SJens Wiklander 		res = crypto_sha256_alloc_ctx(&c);
346648f482SJens Wiklander 		break;
356648f482SJens Wiklander 	case TEE_ALG_SHA384:
366648f482SJens Wiklander 		res = crypto_sha384_alloc_ctx(&c);
376648f482SJens Wiklander 		break;
386648f482SJens Wiklander 	case TEE_ALG_SHA512:
396648f482SJens Wiklander 		res = crypto_sha512_alloc_ctx(&c);
406648f482SJens Wiklander 		break;
416648f482SJens Wiklander 	default:
42b887bd8fSJens Wiklander 		return TEE_ERROR_NOT_IMPLEMENTED;
43b887bd8fSJens Wiklander 	}
44b887bd8fSJens Wiklander 
456648f482SJens Wiklander 	if (!res)
466648f482SJens Wiklander 		*ctx = c;
476648f482SJens Wiklander 
486648f482SJens Wiklander 	return res;
496648f482SJens Wiklander }
506648f482SJens Wiklander 
516648f482SJens Wiklander static const struct crypto_hash_ops *hash_ops(void *ctx)
526648f482SJens Wiklander {
536648f482SJens Wiklander 	struct crypto_hash_ctx *c = ctx;
546648f482SJens Wiklander 
556648f482SJens Wiklander 	assert(c && c->ops);
566648f482SJens Wiklander 
576648f482SJens Wiklander 	return c->ops;
586648f482SJens Wiklander }
596648f482SJens Wiklander 
60ce7a47f5SJerome Forissier void crypto_hash_free_ctx(void *ctx, uint32_t algo __unused)
61ecf2e014SJens Wiklander {
62ce7a47f5SJerome Forissier 	if (ctx)
636648f482SJens Wiklander 		hash_ops(ctx)->free_ctx(ctx);
64ecf2e014SJens Wiklander }
65ecf2e014SJens Wiklander 
666648f482SJens Wiklander void crypto_hash_copy_state(void *dst_ctx, void *src_ctx,
67ecf2e014SJens Wiklander 			    uint32_t algo __unused)
68ecf2e014SJens Wiklander {
696648f482SJens Wiklander 	hash_ops(dst_ctx)->copy_state(dst_ctx, src_ctx);
70ecf2e014SJens Wiklander }
71ecf2e014SJens Wiklander 
726648f482SJens Wiklander TEE_Result crypto_hash_init(void *ctx, uint32_t algo __unused)
73b887bd8fSJens Wiklander {
746648f482SJens Wiklander 	return hash_ops(ctx)->init(ctx);
75b887bd8fSJens Wiklander }
766648f482SJens Wiklander 
776648f482SJens Wiklander TEE_Result crypto_hash_update(void *ctx, uint32_t algo __unused,
786648f482SJens Wiklander 			      const uint8_t *data, size_t len)
79b887bd8fSJens Wiklander {
806648f482SJens Wiklander 	return hash_ops(ctx)->update(ctx, data, len);
81b887bd8fSJens Wiklander }
826648f482SJens Wiklander 
836648f482SJens Wiklander TEE_Result crypto_hash_final(void *ctx, uint32_t algo __unused,
846648f482SJens Wiklander 			     uint8_t *digest, size_t len)
85b887bd8fSJens Wiklander {
866648f482SJens Wiklander 	return hash_ops(ctx)->final(ctx, digest, len);
87b887bd8fSJens Wiklander }
8882d91db1SJens Wiklander 
89*96098f01SJens Wiklander TEE_Result crypto_cipher_alloc_ctx(void **ctx, uint32_t algo)
9082d91db1SJens Wiklander {
91*96098f01SJens Wiklander 	TEE_Result res = TEE_SUCCESS;
92*96098f01SJens Wiklander 	struct crypto_cipher_ctx *c = NULL;
93*96098f01SJens Wiklander 
94*96098f01SJens Wiklander 	switch (algo) {
95*96098f01SJens Wiklander 	case TEE_ALG_AES_ECB_NOPAD:
96*96098f01SJens Wiklander 		res = crypto_aes_ecb_alloc_ctx(&c);
97*96098f01SJens Wiklander 		break;
98*96098f01SJens Wiklander 	case TEE_ALG_AES_CBC_NOPAD:
99*96098f01SJens Wiklander 		res = crypto_aes_cbc_alloc_ctx(&c);
100*96098f01SJens Wiklander 		break;
101*96098f01SJens Wiklander 	case TEE_ALG_AES_CTR:
102*96098f01SJens Wiklander 		res = crypto_aes_ctr_alloc_ctx(&c);
103*96098f01SJens Wiklander 		break;
104*96098f01SJens Wiklander 	case TEE_ALG_AES_CTS:
105*96098f01SJens Wiklander 		res = crypto_aes_cts_alloc_ctx(&c);
106*96098f01SJens Wiklander 		break;
107*96098f01SJens Wiklander 	case TEE_ALG_AES_XTS:
108*96098f01SJens Wiklander 		res = crypto_aes_xts_alloc_ctx(&c);
109*96098f01SJens Wiklander 		break;
110*96098f01SJens Wiklander 	case TEE_ALG_DES_ECB_NOPAD:
111*96098f01SJens Wiklander 		res = crypto_des_ecb_alloc_ctx(&c);
112*96098f01SJens Wiklander 		break;
113*96098f01SJens Wiklander 	case TEE_ALG_DES3_ECB_NOPAD:
114*96098f01SJens Wiklander 		res = crypto_des3_ecb_alloc_ctx(&c);
115*96098f01SJens Wiklander 		break;
116*96098f01SJens Wiklander 	case TEE_ALG_DES_CBC_NOPAD:
117*96098f01SJens Wiklander 		res = crypto_des_cbc_alloc_ctx(&c);
118*96098f01SJens Wiklander 		break;
119*96098f01SJens Wiklander 	case TEE_ALG_DES3_CBC_NOPAD:
120*96098f01SJens Wiklander 		res = crypto_des3_cbc_alloc_ctx(&c);
121*96098f01SJens Wiklander 		break;
122*96098f01SJens Wiklander 	default:
1231c5fdd1fSJerome Forissier 		return TEE_ERROR_NOT_IMPLEMENTED;
12482d91db1SJens Wiklander 	}
12582d91db1SJens Wiklander 
126*96098f01SJens Wiklander 	if (!res)
127*96098f01SJens Wiklander 		*ctx = c;
128*96098f01SJens Wiklander 
129*96098f01SJens Wiklander 	return res;
130*96098f01SJens Wiklander }
131*96098f01SJens Wiklander 
132*96098f01SJens Wiklander static const struct crypto_cipher_ops *cipher_ops(void *ctx)
133*96098f01SJens Wiklander {
134*96098f01SJens Wiklander 	struct crypto_cipher_ctx *c = ctx;
135*96098f01SJens Wiklander 
136*96098f01SJens Wiklander 	assert(c && c->ops);
137*96098f01SJens Wiklander 
138*96098f01SJens Wiklander 	return c->ops;
139*96098f01SJens Wiklander }
140*96098f01SJens Wiklander 
141ce7a47f5SJerome Forissier void crypto_cipher_free_ctx(void *ctx, uint32_t algo __unused)
14272a9b1a0SJens Wiklander {
143ce7a47f5SJerome Forissier 	if (ctx)
144*96098f01SJens Wiklander 		cipher_ops(ctx)->free_ctx(ctx);
14572a9b1a0SJens Wiklander }
14672a9b1a0SJens Wiklander 
147*96098f01SJens Wiklander void crypto_cipher_copy_state(void *dst_ctx, void *src_ctx,
14872a9b1a0SJens Wiklander 			      uint32_t algo __unused)
14972a9b1a0SJens Wiklander {
150*96098f01SJens Wiklander 	cipher_ops(dst_ctx)->copy_state(dst_ctx, src_ctx);
15172a9b1a0SJens Wiklander }
15272a9b1a0SJens Wiklander 
15382d91db1SJens Wiklander TEE_Result crypto_cipher_init(void *ctx __unused, uint32_t algo __unused,
154*96098f01SJens Wiklander 			      TEE_OperationMode mode, const uint8_t *key1,
155*96098f01SJens Wiklander 			      size_t key1_len, const uint8_t *key2,
156*96098f01SJens Wiklander 			      size_t key2_len, const uint8_t *iv, size_t iv_len)
15782d91db1SJens Wiklander {
158*96098f01SJens Wiklander 	if (mode != TEE_MODE_DECRYPT && mode != TEE_MODE_ENCRYPT)
159*96098f01SJens Wiklander 		return TEE_ERROR_BAD_PARAMETERS;
160*96098f01SJens Wiklander 
161*96098f01SJens Wiklander 	return cipher_ops(ctx)->init(ctx, mode, key1, key1_len, key2, key2_len,
162*96098f01SJens Wiklander 				     iv, iv_len);
16382d91db1SJens Wiklander }
16482d91db1SJens Wiklander 
165*96098f01SJens Wiklander TEE_Result crypto_cipher_update(void *ctx, uint32_t algo __unused,
16682d91db1SJens Wiklander 				TEE_OperationMode mode __unused,
167*96098f01SJens Wiklander 				bool last_block, const uint8_t *data,
168*96098f01SJens Wiklander 				size_t len, uint8_t *dst)
16982d91db1SJens Wiklander {
170*96098f01SJens Wiklander 	return cipher_ops(ctx)->update(ctx, last_block, data, len, dst);
17182d91db1SJens Wiklander }
17282d91db1SJens Wiklander 
173*96098f01SJens Wiklander void crypto_cipher_final(void *ctx, uint32_t algo __unused)
17482d91db1SJens Wiklander {
175*96098f01SJens Wiklander 	cipher_ops(ctx)->final(ctx);
17682d91db1SJens Wiklander }
177e9eaba5cSJens Wiklander 
1786d259e05SJens Wiklander TEE_Result crypto_cipher_get_block_size(uint32_t algo, size_t *size)
1796d259e05SJens Wiklander {
1806d259e05SJens Wiklander 	uint32_t class = TEE_ALG_GET_CLASS(algo);
1816d259e05SJens Wiklander 
1826d259e05SJens Wiklander 	if (class != TEE_OPERATION_CIPHER && class != TEE_OPERATION_MAC &&
1836d259e05SJens Wiklander 	    class != TEE_OPERATION_AE)
1846d259e05SJens Wiklander 		return TEE_ERROR_BAD_PARAMETERS;
1856d259e05SJens Wiklander 
1866d259e05SJens Wiklander 	switch (TEE_ALG_GET_MAIN_ALG(algo)) {
1876d259e05SJens Wiklander 	case TEE_MAIN_ALGO_AES:
1886d259e05SJens Wiklander 		*size = TEE_AES_BLOCK_SIZE;
1896d259e05SJens Wiklander 		return TEE_SUCCESS;
1906d259e05SJens Wiklander 	case TEE_MAIN_ALGO_DES:
1916d259e05SJens Wiklander 	case TEE_MAIN_ALGO_DES3:
1926d259e05SJens Wiklander 		*size = TEE_DES_BLOCK_SIZE;
1936d259e05SJens Wiklander 		return TEE_SUCCESS;
1946d259e05SJens Wiklander 	default:
1956d259e05SJens Wiklander 		return TEE_ERROR_NOT_SUPPORTED;
1966d259e05SJens Wiklander 	}
1976d259e05SJens Wiklander }
1986d259e05SJens Wiklander 
1995da36a24SJens Wiklander TEE_Result crypto_mac_alloc_ctx(void **ctx, uint32_t algo)
200e9eaba5cSJens Wiklander {
2015da36a24SJens Wiklander 	TEE_Result res = TEE_SUCCESS;
2025da36a24SJens Wiklander 	struct crypto_mac_ctx *c = NULL;
2035da36a24SJens Wiklander 
2045da36a24SJens Wiklander 	switch (algo) {
2055da36a24SJens Wiklander 	case TEE_ALG_HMAC_MD5:
2065da36a24SJens Wiklander 		res = crypto_hmac_md5_alloc_ctx(&c);
2075da36a24SJens Wiklander 		break;
2085da36a24SJens Wiklander 	case TEE_ALG_HMAC_SHA1:
2095da36a24SJens Wiklander 		res = crypto_hmac_sha1_alloc_ctx(&c);
2105da36a24SJens Wiklander 		break;
2115da36a24SJens Wiklander 	case TEE_ALG_HMAC_SHA224:
2125da36a24SJens Wiklander 		res = crypto_hmac_sha224_alloc_ctx(&c);
2135da36a24SJens Wiklander 		break;
2145da36a24SJens Wiklander 	case TEE_ALG_HMAC_SHA256:
2155da36a24SJens Wiklander 		res = crypto_hmac_sha256_alloc_ctx(&c);
2165da36a24SJens Wiklander 		break;
2175da36a24SJens Wiklander 	case TEE_ALG_HMAC_SHA384:
2185da36a24SJens Wiklander 		res = crypto_hmac_sha384_alloc_ctx(&c);
2195da36a24SJens Wiklander 		break;
2205da36a24SJens Wiklander 	case TEE_ALG_HMAC_SHA512:
2215da36a24SJens Wiklander 		res = crypto_hmac_sha512_alloc_ctx(&c);
2225da36a24SJens Wiklander 		break;
2235da36a24SJens Wiklander 	case TEE_ALG_AES_CBC_MAC_NOPAD:
2245da36a24SJens Wiklander 		res = crypto_aes_cbc_mac_nopad_alloc_ctx(&c);
2255da36a24SJens Wiklander 		break;
2265da36a24SJens Wiklander 	case TEE_ALG_AES_CBC_MAC_PKCS5:
2275da36a24SJens Wiklander 		res = crypto_aes_cbc_mac_pkcs5_alloc_ctx(&c);
2285da36a24SJens Wiklander 		break;
2295da36a24SJens Wiklander 	case TEE_ALG_DES_CBC_MAC_NOPAD:
2305da36a24SJens Wiklander 		res = crypto_des_cbc_mac_nopad_alloc_ctx(&c);
2315da36a24SJens Wiklander 		break;
2325da36a24SJens Wiklander 	case TEE_ALG_DES_CBC_MAC_PKCS5:
2335da36a24SJens Wiklander 		res = crypto_des_cbc_mac_pkcs5_alloc_ctx(&c);
2345da36a24SJens Wiklander 		break;
2355da36a24SJens Wiklander 	case TEE_ALG_DES3_CBC_MAC_NOPAD:
2365da36a24SJens Wiklander 		res = crypto_des3_cbc_mac_nopad_alloc_ctx(&c);
2375da36a24SJens Wiklander 		break;
2385da36a24SJens Wiklander 	case TEE_ALG_DES3_CBC_MAC_PKCS5:
2395da36a24SJens Wiklander 		res = crypto_des3_cbc_mac_pkcs5_alloc_ctx(&c);
2405da36a24SJens Wiklander 		break;
2415da36a24SJens Wiklander 	case TEE_ALG_AES_CMAC:
2425da36a24SJens Wiklander 		res = crypto_aes_cmac_alloc_ctx(&c);
2435da36a24SJens Wiklander 		break;
2445da36a24SJens Wiklander 	default:
2455da36a24SJens Wiklander 		return TEE_ERROR_NOT_SUPPORTED;
2465da36a24SJens Wiklander 	}
2475da36a24SJens Wiklander 
2485da36a24SJens Wiklander 	if (!res)
2495da36a24SJens Wiklander 		*ctx = c;
2505da36a24SJens Wiklander 
2515da36a24SJens Wiklander 	return res;
2525da36a24SJens Wiklander }
2535da36a24SJens Wiklander 
2545da36a24SJens Wiklander static const struct crypto_mac_ops *mac_ops(void *ctx)
2555da36a24SJens Wiklander {
2565da36a24SJens Wiklander 	struct crypto_mac_ctx *c = ctx;
2575da36a24SJens Wiklander 
2585da36a24SJens Wiklander 	assert(c && c->ops);
2595da36a24SJens Wiklander 
2605da36a24SJens Wiklander 	return c->ops;
261e9eaba5cSJens Wiklander }
262e9eaba5cSJens Wiklander 
263ce7a47f5SJerome Forissier void crypto_mac_free_ctx(void *ctx, uint32_t algo __unused)
26482ef73bcSJens Wiklander {
265ce7a47f5SJerome Forissier 	if (ctx)
2665da36a24SJens Wiklander 		mac_ops(ctx)->free_ctx(ctx);
26782ef73bcSJens Wiklander }
26882ef73bcSJens Wiklander 
2695da36a24SJens Wiklander void crypto_mac_copy_state(void *dst_ctx, void *src_ctx, uint32_t algo __unused)
27082ef73bcSJens Wiklander {
2715da36a24SJens Wiklander 	mac_ops(dst_ctx)->copy_state(dst_ctx, src_ctx);
27282ef73bcSJens Wiklander }
27382ef73bcSJens Wiklander 
2745da36a24SJens Wiklander TEE_Result crypto_mac_init(void *ctx, uint32_t algo __unused,
2755da36a24SJens Wiklander 			   const uint8_t *key, size_t len)
276e9eaba5cSJens Wiklander {
2775da36a24SJens Wiklander 	return mac_ops(ctx)->init(ctx, key, len);
278e9eaba5cSJens Wiklander }
279e9eaba5cSJens Wiklander 
2805da36a24SJens Wiklander TEE_Result crypto_mac_update(void *ctx, uint32_t algo __unused,
2815da36a24SJens Wiklander 			     const uint8_t *data, size_t len)
282e9eaba5cSJens Wiklander {
2835da36a24SJens Wiklander 	if (!len)
2845da36a24SJens Wiklander 		return TEE_SUCCESS;
2855da36a24SJens Wiklander 
2865da36a24SJens Wiklander 	return mac_ops(ctx)->update(ctx, data, len);
287e9eaba5cSJens Wiklander }
288e9eaba5cSJens Wiklander 
2895da36a24SJens Wiklander TEE_Result crypto_mac_final(void *ctx, uint32_t algo __unused,
2905da36a24SJens Wiklander 			    uint8_t *digest, size_t digest_len)
291e9eaba5cSJens Wiklander {
2925da36a24SJens Wiklander 	return mac_ops(ctx)->final(ctx, digest, digest_len);
293e9eaba5cSJens Wiklander }
294e9eaba5cSJens Wiklander 
295d7ac7d0fSJens Wiklander TEE_Result crypto_authenc_alloc_ctx(void **ctx, uint32_t algo)
2968875ce46SJens Wiklander {
297d0620b01SJens Wiklander 	switch (algo) {
298d0620b01SJens Wiklander #if defined(CFG_CRYPTO_CCM)
299d0620b01SJens Wiklander 	case TEE_ALG_AES_CCM:
300d7ac7d0fSJens Wiklander 		return crypto_aes_ccm_alloc_ctx(ctx);
301d0620b01SJens Wiklander #endif
302d0620b01SJens Wiklander #if defined(CFG_CRYPTO_GCM)
303d0620b01SJens Wiklander 	case TEE_ALG_AES_GCM:
304d7ac7d0fSJens Wiklander 		return crypto_aes_gcm_alloc_ctx(ctx);
305d0620b01SJens Wiklander #endif
306d0620b01SJens Wiklander 	default:
3078875ce46SJens Wiklander 		return TEE_ERROR_NOT_IMPLEMENTED;
3088875ce46SJens Wiklander 	}
309d0620b01SJens Wiklander }
3108875ce46SJens Wiklander 
311d7ac7d0fSJens Wiklander void crypto_authenc_free_ctx(void *ctx, uint32_t algo)
312d7ac7d0fSJens Wiklander {
313d7ac7d0fSJens Wiklander 	switch (algo) {
314d7ac7d0fSJens Wiklander #if defined(CFG_CRYPTO_CCM)
315d7ac7d0fSJens Wiklander 	case TEE_ALG_AES_CCM:
316d7ac7d0fSJens Wiklander 		crypto_aes_ccm_free_ctx(ctx);
317d7ac7d0fSJens Wiklander 		break;
318d7ac7d0fSJens Wiklander #endif
319d7ac7d0fSJens Wiklander #if defined(CFG_CRYPTO_GCM)
320d7ac7d0fSJens Wiklander 	case TEE_ALG_AES_GCM:
321d7ac7d0fSJens Wiklander 		crypto_aes_gcm_free_ctx(ctx);
322d7ac7d0fSJens Wiklander 		break;
323d7ac7d0fSJens Wiklander #endif
324d7ac7d0fSJens Wiklander 	default:
325ce7a47f5SJerome Forissier 		if (ctx)
326d7ac7d0fSJens Wiklander 			assert(0);
327d7ac7d0fSJens Wiklander 	}
328d7ac7d0fSJens Wiklander }
329d7ac7d0fSJens Wiklander 
330d7ac7d0fSJens Wiklander void crypto_authenc_copy_state(void *dst_ctx, void *src_ctx, uint32_t algo)
331d7ac7d0fSJens Wiklander {
332d7ac7d0fSJens Wiklander 	switch (algo) {
333d7ac7d0fSJens Wiklander #if defined(CFG_CRYPTO_CCM)
334d7ac7d0fSJens Wiklander 	case TEE_ALG_AES_CCM:
335d7ac7d0fSJens Wiklander 		crypto_aes_ccm_copy_state(dst_ctx, src_ctx);
336d7ac7d0fSJens Wiklander 		break;
337d7ac7d0fSJens Wiklander #endif
338d7ac7d0fSJens Wiklander #if defined(CFG_CRYPTO_GCM)
339d7ac7d0fSJens Wiklander 	case TEE_ALG_AES_GCM:
340d7ac7d0fSJens Wiklander 		crypto_aes_gcm_copy_state(dst_ctx, src_ctx);
341d7ac7d0fSJens Wiklander 		break;
342d7ac7d0fSJens Wiklander #endif
343d7ac7d0fSJens Wiklander 	default:
344d7ac7d0fSJens Wiklander 		assert(0);
345d7ac7d0fSJens Wiklander 	}
346d7ac7d0fSJens Wiklander }
347d7ac7d0fSJens Wiklander 
348d0620b01SJens Wiklander TEE_Result crypto_authenc_init(void *ctx __maybe_unused,
349d0620b01SJens Wiklander 			       uint32_t algo __maybe_unused,
350d0620b01SJens Wiklander 			       TEE_OperationMode mode __maybe_unused,
351d0620b01SJens Wiklander 			       const uint8_t *key __maybe_unused,
352d0620b01SJens Wiklander 			       size_t key_len __maybe_unused,
353d0620b01SJens Wiklander 			       const uint8_t *nonce __maybe_unused,
354d0620b01SJens Wiklander 			       size_t nonce_len __maybe_unused,
355d0620b01SJens Wiklander 			       size_t tag_len __maybe_unused,
356d0620b01SJens Wiklander 			       size_t aad_len __maybe_unused,
357d0620b01SJens Wiklander 			       size_t payload_len __maybe_unused)
358d0620b01SJens Wiklander {
359d0620b01SJens Wiklander 	switch (algo) {
360d0620b01SJens Wiklander #if defined(CFG_CRYPTO_CCM)
361d0620b01SJens Wiklander 	case TEE_ALG_AES_CCM:
362d0620b01SJens Wiklander 		return crypto_aes_ccm_init(ctx, mode, key, key_len, nonce,
363d0620b01SJens Wiklander 					   nonce_len, tag_len, aad_len,
364d0620b01SJens Wiklander 					   payload_len);
365d0620b01SJens Wiklander #endif
366d0620b01SJens Wiklander #if defined(CFG_CRYPTO_GCM)
367d0620b01SJens Wiklander 	case TEE_ALG_AES_GCM:
368d0620b01SJens Wiklander 		return crypto_aes_gcm_init(ctx, mode, key, key_len, nonce,
369d0620b01SJens Wiklander 					   nonce_len, tag_len);
370d0620b01SJens Wiklander #endif
371d0620b01SJens Wiklander 	default:
372d0620b01SJens Wiklander 		return TEE_ERROR_NOT_IMPLEMENTED;
373d0620b01SJens Wiklander 	}
374d0620b01SJens Wiklander }
375d0620b01SJens Wiklander 
376d0620b01SJens Wiklander TEE_Result crypto_authenc_update_aad(void *ctx __maybe_unused,
377d0620b01SJens Wiklander 				     uint32_t algo __maybe_unused,
3788875ce46SJens Wiklander 				     TEE_OperationMode mode __unused,
379d0620b01SJens Wiklander 				     const uint8_t *data __maybe_unused,
380d0620b01SJens Wiklander 				     size_t len __maybe_unused)
3818875ce46SJens Wiklander {
382d0620b01SJens Wiklander 	switch (algo) {
383d0620b01SJens Wiklander #if defined(CFG_CRYPTO_CCM)
384d0620b01SJens Wiklander 	case TEE_ALG_AES_CCM:
385d0620b01SJens Wiklander 		return crypto_aes_ccm_update_aad(ctx, data, len);
386d0620b01SJens Wiklander #endif
387d0620b01SJens Wiklander #if defined(CFG_CRYPTO_GCM)
388d0620b01SJens Wiklander 	case TEE_ALG_AES_GCM:
389d0620b01SJens Wiklander 		return crypto_aes_gcm_update_aad(ctx, data, len);
390d0620b01SJens Wiklander #endif
391d0620b01SJens Wiklander 	default:
3928875ce46SJens Wiklander 		return TEE_ERROR_NOT_IMPLEMENTED;
3938875ce46SJens Wiklander 	}
394d0620b01SJens Wiklander }
3958875ce46SJens Wiklander 
396d0620b01SJens Wiklander TEE_Result crypto_authenc_update_payload(void *ctx __maybe_unused,
397d0620b01SJens Wiklander 					 uint32_t algo __maybe_unused,
398d0620b01SJens Wiklander 					 TEE_OperationMode mode __maybe_unused,
399d0620b01SJens Wiklander 					 const uint8_t *src_data __maybe_unused,
400d0620b01SJens Wiklander 					 size_t src_len __maybe_unused,
401d0620b01SJens Wiklander 					 uint8_t *dst_data __maybe_unused,
402d0620b01SJens Wiklander 					 size_t *dst_len __maybe_unused)
4038875ce46SJens Wiklander {
404d0620b01SJens Wiklander 	size_t dl = *dst_len;
405d0620b01SJens Wiklander 
406d0620b01SJens Wiklander 	*dst_len = src_len;
407d0620b01SJens Wiklander 	if (dl < src_len)
408d0620b01SJens Wiklander 		return TEE_ERROR_SHORT_BUFFER;
409d0620b01SJens Wiklander 
410d0620b01SJens Wiklander 	switch (algo) {
411d0620b01SJens Wiklander #if defined(CFG_CRYPTO_CCM)
412d0620b01SJens Wiklander 	case TEE_ALG_AES_CCM:
413d0620b01SJens Wiklander 		return crypto_aes_ccm_update_payload(ctx, mode, src_data,
414d0620b01SJens Wiklander 						     src_len, dst_data);
415d0620b01SJens Wiklander #endif
416d0620b01SJens Wiklander #if defined(CFG_CRYPTO_GCM)
417d0620b01SJens Wiklander 	case TEE_ALG_AES_GCM:
418d0620b01SJens Wiklander 		return crypto_aes_gcm_update_payload(ctx, mode, src_data,
419d0620b01SJens Wiklander 						     src_len, dst_data);
420d0620b01SJens Wiklander #endif
421d0620b01SJens Wiklander 	default:
4228875ce46SJens Wiklander 		return TEE_ERROR_NOT_IMPLEMENTED;
4238875ce46SJens Wiklander 	}
424d0620b01SJens Wiklander }
4258875ce46SJens Wiklander 
426d0620b01SJens Wiklander TEE_Result crypto_authenc_enc_final(void *ctx __maybe_unused,
427d0620b01SJens Wiklander 				    uint32_t algo __maybe_unused,
428d0620b01SJens Wiklander 				    const uint8_t *src_data __maybe_unused,
429d0620b01SJens Wiklander 				    size_t src_len __maybe_unused,
430d0620b01SJens Wiklander 				    uint8_t *dst_data __maybe_unused,
431d0620b01SJens Wiklander 				    size_t *dst_len __maybe_unused,
432d0620b01SJens Wiklander 				    uint8_t *dst_tag __maybe_unused,
433d0620b01SJens Wiklander 				    size_t *dst_tag_len __maybe_unused)
4348875ce46SJens Wiklander {
435d0620b01SJens Wiklander 	size_t dl = *dst_len;
436d0620b01SJens Wiklander 
437d0620b01SJens Wiklander 	*dst_len = src_len;
438d0620b01SJens Wiklander 	if (dl < src_len)
439d0620b01SJens Wiklander 		return TEE_ERROR_SHORT_BUFFER;
440d0620b01SJens Wiklander 
441d0620b01SJens Wiklander 	switch (algo) {
442d0620b01SJens Wiklander #if defined(CFG_CRYPTO_CCM)
443d0620b01SJens Wiklander 	case TEE_ALG_AES_CCM:
444d0620b01SJens Wiklander 		return crypto_aes_ccm_enc_final(ctx, src_data, src_len,
445d0620b01SJens Wiklander 						dst_data, dst_tag, dst_tag_len);
446d0620b01SJens Wiklander #endif
447d0620b01SJens Wiklander #if defined(CFG_CRYPTO_GCM)
448d0620b01SJens Wiklander 	case TEE_ALG_AES_GCM:
449d0620b01SJens Wiklander 		return crypto_aes_gcm_enc_final(ctx, src_data, src_len,
450d0620b01SJens Wiklander 						dst_data, dst_tag, dst_tag_len);
451d0620b01SJens Wiklander #endif
452d0620b01SJens Wiklander 	default:
4538875ce46SJens Wiklander 		return TEE_ERROR_NOT_IMPLEMENTED;
4548875ce46SJens Wiklander 	}
455d0620b01SJens Wiklander }
4568875ce46SJens Wiklander 
457d0620b01SJens Wiklander TEE_Result crypto_authenc_dec_final(void *ctx __maybe_unused,
458d0620b01SJens Wiklander 				    uint32_t algo __maybe_unused,
459d0620b01SJens Wiklander 				    const uint8_t *src_data __maybe_unused,
460d0620b01SJens Wiklander 				    size_t src_len __maybe_unused,
461d0620b01SJens Wiklander 				    uint8_t *dst_data __maybe_unused,
462d0620b01SJens Wiklander 				    size_t *dst_len __maybe_unused,
463d0620b01SJens Wiklander 				    const uint8_t *tag __maybe_unused,
464d0620b01SJens Wiklander 				    size_t tag_len __maybe_unused)
4658875ce46SJens Wiklander {
466d0620b01SJens Wiklander 	size_t dl = *dst_len;
467d0620b01SJens Wiklander 
468d0620b01SJens Wiklander 	*dst_len = src_len;
469d0620b01SJens Wiklander 	if (dl < src_len)
470d0620b01SJens Wiklander 		return TEE_ERROR_SHORT_BUFFER;
471d0620b01SJens Wiklander 
472d0620b01SJens Wiklander 	switch (algo) {
473d0620b01SJens Wiklander #if defined(CFG_CRYPTO_CCM)
474d0620b01SJens Wiklander 	case TEE_ALG_AES_CCM:
475d0620b01SJens Wiklander 		return crypto_aes_ccm_dec_final(ctx, src_data, src_len,
476d0620b01SJens Wiklander 						dst_data, tag, tag_len);
477d0620b01SJens Wiklander #endif
478d0620b01SJens Wiklander #if defined(CFG_CRYPTO_GCM)
479d0620b01SJens Wiklander 	case TEE_ALG_AES_GCM:
480d0620b01SJens Wiklander 		return crypto_aes_gcm_dec_final(ctx, src_data, src_len,
481d0620b01SJens Wiklander 						dst_data, tag, tag_len);
482d0620b01SJens Wiklander #endif
483d0620b01SJens Wiklander 	default:
4848875ce46SJens Wiklander 		return TEE_ERROR_NOT_IMPLEMENTED;
4858875ce46SJens Wiklander 	}
4868875ce46SJens Wiklander }
4878875ce46SJens Wiklander 
488d0620b01SJens Wiklander void crypto_authenc_final(void *ctx __maybe_unused,
489d0620b01SJens Wiklander 			  uint32_t algo __maybe_unused)
4908875ce46SJens Wiklander {
491d0620b01SJens Wiklander 	switch (algo) {
492d0620b01SJens Wiklander #if defined(CFG_CRYPTO_CCM)
493d0620b01SJens Wiklander 	case TEE_ALG_AES_CCM:
494d0620b01SJens Wiklander 		crypto_aes_ccm_final(ctx);
495d0620b01SJens Wiklander 		break;
496d0620b01SJens Wiklander #endif
497d0620b01SJens Wiklander #if defined(CFG_CRYPTO_GCM)
498d0620b01SJens Wiklander 	case TEE_ALG_AES_GCM:
499d0620b01SJens Wiklander 		crypto_aes_gcm_final(ctx);
500d0620b01SJens Wiklander 		break;
501d0620b01SJens Wiklander #endif
502d0620b01SJens Wiklander 	default:
503d0620b01SJens Wiklander 		break;
5048875ce46SJens Wiklander 	}
505d0620b01SJens Wiklander }
50633790cc1SJens Wiklander 
50733790cc1SJens Wiklander #if !defined(_CFG_CRYPTO_WITH_ACIPHER)
50833790cc1SJens Wiklander struct bignum *crypto_bignum_allocate(size_t size_bits __unused)
50933790cc1SJens Wiklander {
51033790cc1SJens Wiklander 	return NULL;
51133790cc1SJens Wiklander }
51233790cc1SJens Wiklander 
51333790cc1SJens Wiklander TEE_Result crypto_bignum_bin2bn(const uint8_t *from __unused,
51433790cc1SJens Wiklander 				size_t fromsize __unused,
51533790cc1SJens Wiklander 				struct bignum *to __unused)
51633790cc1SJens Wiklander {
51733790cc1SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
51833790cc1SJens Wiklander }
51933790cc1SJens Wiklander 
52033790cc1SJens Wiklander size_t crypto_bignum_num_bytes(struct bignum *a __unused)
52133790cc1SJens Wiklander {
52233790cc1SJens Wiklander 	return 0;
52333790cc1SJens Wiklander }
52433790cc1SJens Wiklander 
52533790cc1SJens Wiklander size_t crypto_bignum_num_bits(struct bignum *a __unused)
52633790cc1SJens Wiklander {
52733790cc1SJens Wiklander 	return 0;
52833790cc1SJens Wiklander }
52933790cc1SJens Wiklander 
53033790cc1SJens Wiklander /*
53133790cc1SJens Wiklander  * crypto_bignum_allocate() and crypto_bignum_bin2bn() failing should be
53233790cc1SJens Wiklander  * enough to guarantee that the functions calling this function aren't
53333790cc1SJens Wiklander  * called, but just in case add a panic() here to avoid unexpected
53433790cc1SJens Wiklander  * behavoir.
53533790cc1SJens Wiklander  */
53633790cc1SJens Wiklander static void bignum_cant_happen(void)
53733790cc1SJens Wiklander {
53833790cc1SJens Wiklander 	volatile bool b = true;
53933790cc1SJens Wiklander 
54033790cc1SJens Wiklander 	/* Avoid warning about function does not return */
54133790cc1SJens Wiklander 	if (b)
54233790cc1SJens Wiklander 		panic();
54333790cc1SJens Wiklander }
54433790cc1SJens Wiklander 
54533790cc1SJens Wiklander void crypto_bignum_bn2bin(const struct bignum *from __unused,
54633790cc1SJens Wiklander 			  uint8_t *to __unused)
54733790cc1SJens Wiklander {
54833790cc1SJens Wiklander 	bignum_cant_happen();
54933790cc1SJens Wiklander }
55033790cc1SJens Wiklander 
55133790cc1SJens Wiklander void crypto_bignum_copy(struct bignum *to __unused,
55233790cc1SJens Wiklander 			const struct bignum *from __unused)
55333790cc1SJens Wiklander {
55433790cc1SJens Wiklander 	bignum_cant_happen();
55533790cc1SJens Wiklander }
55633790cc1SJens Wiklander 
55733790cc1SJens Wiklander void crypto_bignum_free(struct bignum *a)
55833790cc1SJens Wiklander {
55933790cc1SJens Wiklander 	if (a)
56033790cc1SJens Wiklander 		panic();
56133790cc1SJens Wiklander }
56233790cc1SJens Wiklander 
56333790cc1SJens Wiklander void crypto_bignum_clear(struct bignum *a __unused)
56433790cc1SJens Wiklander {
56533790cc1SJens Wiklander 	bignum_cant_happen();
56633790cc1SJens Wiklander }
56733790cc1SJens Wiklander 
56833790cc1SJens Wiklander /* return -1 if a<b, 0 if a==b, +1 if a>b */
56933790cc1SJens Wiklander int32_t crypto_bignum_compare(struct bignum *a __unused,
57033790cc1SJens Wiklander 			      struct bignum *b __unused)
57133790cc1SJens Wiklander {
57233790cc1SJens Wiklander 	bignum_cant_happen();
57333790cc1SJens Wiklander 	return -1;
57433790cc1SJens Wiklander }
57533790cc1SJens Wiklander #endif /*!_CFG_CRYPTO_WITH_ACIPHER*/
576291e5450SJens Wiklander 
577291e5450SJens Wiklander #if !defined(CFG_CRYPTO_RSA) || !defined(_CFG_CRYPTO_WITH_ACIPHER)
578291e5450SJens Wiklander TEE_Result crypto_acipher_alloc_rsa_keypair(struct rsa_keypair *s __unused,
579291e5450SJens Wiklander 					    size_t key_size_bits __unused)
580291e5450SJens Wiklander {
581291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
582291e5450SJens Wiklander }
583291e5450SJens Wiklander 
584291e5450SJens Wiklander TEE_Result
585291e5450SJens Wiklander crypto_acipher_alloc_rsa_public_key(struct rsa_public_key *s __unused,
586291e5450SJens Wiklander 				    size_t key_size_bits __unused)
587291e5450SJens Wiklander {
588291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
589291e5450SJens Wiklander }
590291e5450SJens Wiklander 
591291e5450SJens Wiklander void crypto_acipher_free_rsa_public_key(struct rsa_public_key *s __unused)
592291e5450SJens Wiklander {
593291e5450SJens Wiklander }
594291e5450SJens Wiklander 
595291e5450SJens Wiklander TEE_Result crypto_acipher_gen_rsa_key(struct rsa_keypair *key __unused,
596291e5450SJens Wiklander 				      size_t key_size __unused)
597291e5450SJens Wiklander {
598291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
599291e5450SJens Wiklander }
600291e5450SJens Wiklander 
601291e5450SJens Wiklander TEE_Result crypto_acipher_rsanopad_decrypt(struct rsa_keypair *key __unused,
602291e5450SJens Wiklander 					   const uint8_t *src __unused,
603291e5450SJens Wiklander 					   size_t src_len __unused,
604291e5450SJens Wiklander 					   uint8_t *dst __unused,
605291e5450SJens Wiklander 					   size_t *dst_len __unused)
606291e5450SJens Wiklander {
607291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
608291e5450SJens Wiklander }
609291e5450SJens Wiklander 
610291e5450SJens Wiklander TEE_Result crypto_acipher_rsanopad_encrypt(struct rsa_public_key *key __unused,
611291e5450SJens Wiklander 					   const uint8_t *src __unused,
612291e5450SJens Wiklander 					   size_t src_len __unused,
613291e5450SJens Wiklander 					   uint8_t *dst __unused,
614291e5450SJens Wiklander 					   size_t *dst_len __unused)
615291e5450SJens Wiklander {
616291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
617291e5450SJens Wiklander }
618291e5450SJens Wiklander 
619291e5450SJens Wiklander TEE_Result crypto_acipher_rsaes_decrypt(uint32_t algo __unused,
620291e5450SJens Wiklander 					struct rsa_keypair *key __unused,
621291e5450SJens Wiklander 					const uint8_t *label __unused,
622291e5450SJens Wiklander 					size_t label_len __unused,
623291e5450SJens Wiklander 					const uint8_t *src __unused,
624291e5450SJens Wiklander 					size_t src_len __unused,
625291e5450SJens Wiklander 					uint8_t *dst __unused,
626291e5450SJens Wiklander 					size_t *dst_len __unused)
627291e5450SJens Wiklander {
628291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
629291e5450SJens Wiklander }
630291e5450SJens Wiklander 
631291e5450SJens Wiklander TEE_Result crypto_acipher_rsaes_encrypt(uint32_t algo __unused,
632291e5450SJens Wiklander 					struct rsa_public_key *key __unused,
633291e5450SJens Wiklander 					const uint8_t *label __unused,
634291e5450SJens Wiklander 					size_t label_len __unused,
635291e5450SJens Wiklander 					const uint8_t *src __unused,
636291e5450SJens Wiklander 					size_t src_len __unused,
637291e5450SJens Wiklander 					uint8_t *dst __unused,
638291e5450SJens Wiklander 					size_t *dst_len __unused)
639291e5450SJens Wiklander {
640291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
641291e5450SJens Wiklander }
642291e5450SJens Wiklander 
643291e5450SJens Wiklander TEE_Result crypto_acipher_rsassa_sign(uint32_t algo __unused,
644291e5450SJens Wiklander 				      struct rsa_keypair *key __unused,
645291e5450SJens Wiklander 				      int salt_len __unused,
646291e5450SJens Wiklander 				      const uint8_t *msg __unused,
647291e5450SJens Wiklander 				      size_t msg_len __unused,
648291e5450SJens Wiklander 				      uint8_t *sig __unused,
649291e5450SJens Wiklander 				      size_t *sig_len __unused)
650291e5450SJens Wiklander {
651291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
652291e5450SJens Wiklander }
653291e5450SJens Wiklander 
654291e5450SJens Wiklander TEE_Result crypto_acipher_rsassa_verify(uint32_t algo __unused,
655291e5450SJens Wiklander 					struct rsa_public_key *key __unused,
656291e5450SJens Wiklander 					int salt_len __unused,
657291e5450SJens Wiklander 					const uint8_t *msg __unused,
658291e5450SJens Wiklander 					size_t msg_len __unused,
659291e5450SJens Wiklander 					const uint8_t *sig __unused,
660291e5450SJens Wiklander 					size_t sig_len __unused)
661291e5450SJens Wiklander {
662291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
663291e5450SJens Wiklander }
664291e5450SJens Wiklander #endif /*!CFG_CRYPTO_RSA || !_CFG_CRYPTO_WITH_ACIPHER*/
665291e5450SJens Wiklander 
666291e5450SJens Wiklander #if !defined(CFG_CRYPTO_DSA) || !defined(_CFG_CRYPTO_WITH_ACIPHER)
667291e5450SJens Wiklander TEE_Result crypto_acipher_alloc_dsa_keypair(struct dsa_keypair *s __unused,
668291e5450SJens Wiklander 					    size_t key_size_bits __unused)
669291e5450SJens Wiklander {
670291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
671291e5450SJens Wiklander }
672291e5450SJens Wiklander 
673291e5450SJens Wiklander TEE_Result
674291e5450SJens Wiklander crypto_acipher_alloc_dsa_public_key(struct dsa_public_key *s __unused,
675291e5450SJens Wiklander 				    size_t key_size_bits __unused)
676291e5450SJens Wiklander {
677291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
678291e5450SJens Wiklander }
679291e5450SJens Wiklander 
680291e5450SJens Wiklander TEE_Result crypto_acipher_gen_dsa_key(struct dsa_keypair *key __unused,
681291e5450SJens Wiklander 				      size_t key_size __unused)
682291e5450SJens Wiklander {
683291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
684291e5450SJens Wiklander }
685291e5450SJens Wiklander 
686291e5450SJens Wiklander TEE_Result crypto_acipher_dsa_sign(uint32_t algo __unused,
687291e5450SJens Wiklander 				   struct dsa_keypair *key __unused,
688291e5450SJens Wiklander 				   const uint8_t *msg __unused,
689291e5450SJens Wiklander 				   size_t msg_len __unused,
690291e5450SJens Wiklander 				   uint8_t *sig __unused,
691291e5450SJens Wiklander 				   size_t *sig_len __unused)
692291e5450SJens Wiklander {
693291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
694291e5450SJens Wiklander }
695291e5450SJens Wiklander 
696291e5450SJens Wiklander TEE_Result crypto_acipher_dsa_verify(uint32_t algo __unused,
697291e5450SJens Wiklander 				     struct dsa_public_key *key __unused,
698291e5450SJens Wiklander 				     const uint8_t *msg __unused,
699291e5450SJens Wiklander 				     size_t msg_len __unused,
700291e5450SJens Wiklander 				     const uint8_t *sig __unused,
701291e5450SJens Wiklander 				     size_t sig_len __unused)
702291e5450SJens Wiklander {
703291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
704291e5450SJens Wiklander }
705291e5450SJens Wiklander #endif /*!CFG_CRYPTO_DSA || !_CFG_CRYPTO_WITH_ACIPHER*/
706291e5450SJens Wiklander 
707291e5450SJens Wiklander #if !defined(CFG_CRYPTO_DH) || !defined(_CFG_CRYPTO_WITH_ACIPHER)
708291e5450SJens Wiklander TEE_Result crypto_acipher_alloc_dh_keypair(struct dh_keypair *s __unused,
709291e5450SJens Wiklander 					   size_t key_size_bits __unused)
710291e5450SJens Wiklander {
711291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
712291e5450SJens Wiklander }
713291e5450SJens Wiklander 
714291e5450SJens Wiklander TEE_Result crypto_acipher_gen_dh_key(struct dh_keypair *key __unused,
715291e5450SJens Wiklander 				     struct bignum *q __unused,
716291e5450SJens Wiklander 				     size_t xbits __unused)
717291e5450SJens Wiklander {
718291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
719291e5450SJens Wiklander }
720291e5450SJens Wiklander 
721291e5450SJens Wiklander TEE_Result
722291e5450SJens Wiklander crypto_acipher_dh_shared_secret(struct dh_keypair *private_key __unused,
723291e5450SJens Wiklander 				struct bignum *public_key __unused,
724291e5450SJens Wiklander 				struct bignum *secret __unused)
725291e5450SJens Wiklander {
726291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
727291e5450SJens Wiklander }
728291e5450SJens Wiklander #endif /*!CFG_CRYPTO_DH || !_CFG_CRYPTO_WITH_ACIPHER*/
729291e5450SJens Wiklander 
730291e5450SJens Wiklander #if !defined(CFG_CRYPTO_ECC) || !defined(_CFG_CRYPTO_WITH_ACIPHER)
731291e5450SJens Wiklander TEE_Result
732291e5450SJens Wiklander crypto_acipher_alloc_ecc_public_key(struct ecc_public_key *s __unused,
733291e5450SJens Wiklander 				    size_t key_size_bits __unused)
734291e5450SJens Wiklander {
735291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
736291e5450SJens Wiklander }
737291e5450SJens Wiklander 
738291e5450SJens Wiklander TEE_Result crypto_acipher_alloc_ecc_keypair(struct ecc_keypair *s __unused,
739291e5450SJens Wiklander 					    size_t key_size_bits __unused)
740291e5450SJens Wiklander {
741291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
742291e5450SJens Wiklander }
743291e5450SJens Wiklander 
744291e5450SJens Wiklander void crypto_acipher_free_ecc_public_key(struct ecc_public_key *s __unused)
745291e5450SJens Wiklander {
746291e5450SJens Wiklander }
747291e5450SJens Wiklander 
748291e5450SJens Wiklander TEE_Result crypto_acipher_gen_ecc_key(struct ecc_keypair *key __unused)
749291e5450SJens Wiklander {
750291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
751291e5450SJens Wiklander }
752291e5450SJens Wiklander 
753291e5450SJens Wiklander TEE_Result crypto_acipher_ecc_sign(uint32_t algo __unused,
754291e5450SJens Wiklander 				   struct ecc_keypair *key __unused,
755291e5450SJens Wiklander 				   const uint8_t *msg __unused,
756291e5450SJens Wiklander 				   size_t msg_len __unused,
757291e5450SJens Wiklander 				   uint8_t *sig __unused,
758291e5450SJens Wiklander 				   size_t *sig_len __unused)
759291e5450SJens Wiklander {
760291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
761291e5450SJens Wiklander }
762291e5450SJens Wiklander 
763291e5450SJens Wiklander TEE_Result crypto_acipher_ecc_verify(uint32_t algo __unused,
764291e5450SJens Wiklander 				     struct ecc_public_key *key __unused,
765291e5450SJens Wiklander 				     const uint8_t *msg __unused,
766291e5450SJens Wiklander 				     size_t msg_len __unused,
767291e5450SJens Wiklander 				     const uint8_t *sig __unused,
768291e5450SJens Wiklander 				     size_t sig_len __unused)
769291e5450SJens Wiklander {
770291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
771291e5450SJens Wiklander }
772291e5450SJens Wiklander 
773291e5450SJens Wiklander TEE_Result
774291e5450SJens Wiklander crypto_acipher_ecc_shared_secret(struct ecc_keypair *private_key __unused,
775291e5450SJens Wiklander 				 struct ecc_public_key *public_key __unused,
776291e5450SJens Wiklander 				 void *secret __unused,
777291e5450SJens Wiklander 				 unsigned long *secret_len __unused)
778291e5450SJens Wiklander {
779291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
780291e5450SJens Wiklander }
781291e5450SJens Wiklander #endif /*!CFG_CRYPTO_ECC || !_CFG_CRYPTO_WITH_ACIPHER*/
782