xref: /optee_os/core/crypto/crypto.c (revision 33790cc18342231b13f7e6791196bd7c1f41e33f)
1b887bd8fSJens Wiklander /*
2b887bd8fSJens Wiklander  * Copyright (c) 2017, Linaro Limited
3b887bd8fSJens Wiklander  * All rights reserved.
4b887bd8fSJens Wiklander  *
5b887bd8fSJens Wiklander  * SPDX-License-Identifier: BSD-2-Clause
6b887bd8fSJens Wiklander  */
7b887bd8fSJens Wiklander 
8b887bd8fSJens Wiklander #include <compiler.h>
9*33790cc1SJens Wiklander #include <kernel/panic.h>
10b887bd8fSJens Wiklander #include <tee/tee_cryp_provider.h>
11b887bd8fSJens Wiklander 
12b887bd8fSJens Wiklander #if !defined(_CFG_CRYPTO_WITH_HASH)
13b887bd8fSJens Wiklander TEE_Result crypto_hash_get_ctx_size(uint32_t algo __unused,
14b887bd8fSJens Wiklander 				    size_t *size __unused)
15b887bd8fSJens Wiklander {
16b887bd8fSJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
17b887bd8fSJens Wiklander }
18b887bd8fSJens Wiklander 
19b887bd8fSJens Wiklander TEE_Result crypto_hash_init(void *ctx __unused, uint32_t algo __unused)
20b887bd8fSJens Wiklander {
21b887bd8fSJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
22b887bd8fSJens Wiklander }
23b887bd8fSJens Wiklander TEE_Result crypto_hash_update(void *ctx __unused, uint32_t algo __unused,
24b887bd8fSJens Wiklander 			      const uint8_t *data __unused, size_t len __unused)
25b887bd8fSJens Wiklander {
26b887bd8fSJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
27b887bd8fSJens Wiklander }
28b887bd8fSJens Wiklander TEE_Result crypto_hash_final(void *ctx __unused, uint32_t algo __unused,
29b887bd8fSJens Wiklander 			     uint8_t *digest __unused, size_t len __unused)
30b887bd8fSJens Wiklander {
31b887bd8fSJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
32b887bd8fSJens Wiklander }
33b887bd8fSJens Wiklander #endif /*_CFG_CRYPTO_WITH_HASH*/
3482d91db1SJens Wiklander 
3582d91db1SJens Wiklander #if !defined(_CFG_CRYPTO_WITH_CIPHER)
3682d91db1SJens Wiklander TEE_Result crypto_cipher_get_ctx_size(uint32_t algo, size_t *size)
3782d91db1SJens Wiklander {
3882d91db1SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED
3982d91db1SJens Wiklander }
4082d91db1SJens Wiklander 
4182d91db1SJens Wiklander TEE_Result crypto_cipher_init(void *ctx __unused, uint32_t algo __unused,
4282d91db1SJens Wiklander 			      TEE_OperationMode mode __unused,
4382d91db1SJens Wiklander 			      const uint8_t *key1 __unused,
4482d91db1SJens Wiklander 			      size_t key1_len __unused,
4582d91db1SJens Wiklander 			      const uint8_t *key2 __unused,
4682d91db1SJens Wiklander 			      size_t key2_len __unused,
4782d91db1SJens Wiklander 			      const uint8_t *iv __unused,
4882d91db1SJens Wiklander 			      size_t iv_len __unused)
4982d91db1SJens Wiklander {
5082d91db1SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED
5182d91db1SJens Wiklander }
5282d91db1SJens Wiklander 
5382d91db1SJens Wiklander TEE_Result crypto_cipher_update(void *ctx __unused, uint32_t algo __unused,
5482d91db1SJens Wiklander 				TEE_OperationMode mode __unused,
5582d91db1SJens Wiklander 				bool last_block __unused,
5682d91db1SJens Wiklander 				const uint8_t *data __unused,
5782d91db1SJens Wiklander 				size_t len __unused, uint8_t *dst __unused)
5882d91db1SJens Wiklander {
5982d91db1SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED
6082d91db1SJens Wiklander }
6182d91db1SJens Wiklander 
6282d91db1SJens Wiklander void crypto_cipher_final(void *ctx __unused, uint32_t algo __unused)
6382d91db1SJens Wiklander {
6482d91db1SJens Wiklander }
6582d91db1SJens Wiklander 
6682d91db1SJens Wiklander TEE_Result crypto_cipher_get_block_size(uint32_t algo __unused,
6782d91db1SJens Wiklander 					size_t *size __unused)
6882d91db1SJens Wiklander {
6982d91db1SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED
7082d91db1SJens Wiklander }
7182d91db1SJens Wiklander #endif /*_CFG_CRYPTO_WITH_CIPHER*/
72e9eaba5cSJens Wiklander 
73e9eaba5cSJens Wiklander #if !defined(_CFG_CRYPTO_WITH_MAC)
74e9eaba5cSJens Wiklander TEE_Result crypto_mac_get_ctx_size(uint32_t algo __unused,
75e9eaba5cSJens Wiklander 				   size_t *size __unused)
76e9eaba5cSJens Wiklander {
77e9eaba5cSJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
78e9eaba5cSJens Wiklander }
79e9eaba5cSJens Wiklander 
80e9eaba5cSJens Wiklander TEE_Result crypto_mac_init(void *ctx __unused, uint32_t algo __unused,
81e9eaba5cSJens Wiklander 			   const uint8_t *key __unused, size_t len __unused)
82e9eaba5cSJens Wiklander {
83e9eaba5cSJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
84e9eaba5cSJens Wiklander }
85e9eaba5cSJens Wiklander 
86e9eaba5cSJens Wiklander TEE_Result crypto_mac_update(void *ctx __unused, uint32_t algo __unused,
87e9eaba5cSJens Wiklander 			     const uint8_t *data __unused, size_t len __unused)
88e9eaba5cSJens Wiklander {
89e9eaba5cSJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
90e9eaba5cSJens Wiklander }
91e9eaba5cSJens Wiklander 
92e9eaba5cSJens Wiklander TEE_Result crypto_mac_final(void *ctx __unused, uint32_t algo __unused,
93e9eaba5cSJens Wiklander 			    uint8_t *digest __unused,
94e9eaba5cSJens Wiklander 			    size_t digest_len __unused)
95e9eaba5cSJens Wiklander {
96e9eaba5cSJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
97e9eaba5cSJens Wiklander }
98e9eaba5cSJens Wiklander #endif /*_CFG_CRYPTO_WITH_MAC*/
99e9eaba5cSJens Wiklander 
1008875ce46SJens Wiklander #if !defined(_CFG_CRYPTO_WITH_AUTHENC)
1018875ce46SJens Wiklander TEE_Result crypto_authenc_get_ctx_size(uint32_t algo __unused,
1028875ce46SJens Wiklander 				       size_t *size __unused)
1038875ce46SJens Wiklander {
1048875ce46SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
1058875ce46SJens Wiklander }
1068875ce46SJens Wiklander 
1078875ce46SJens Wiklander TEE_Result crypto_authenc_init(void *ctx __unused, uint32_t algo __unused,
1088875ce46SJens Wiklander 			       TEE_OperationMode mode __unused,
1098875ce46SJens Wiklander 			       const uint8_t *key __unused,
1108875ce46SJens Wiklander 			       size_t key_len __unused,
1118875ce46SJens Wiklander 			       const uint8_t *nonce __unused,
1128875ce46SJens Wiklander 			       size_t nonce_len __unused,
1138875ce46SJens Wiklander 			       size_t tag_len __unused,
1148875ce46SJens Wiklander 			       size_t aad_len __unused,
1158875ce46SJens Wiklander 			       size_t payload_len __unused)
1168875ce46SJens Wiklander {
1178875ce46SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
1188875ce46SJens Wiklander }
1198875ce46SJens Wiklander 
1208875ce46SJens Wiklander TEE_Result crypto_authenc_update_aad(void *ctx __unused, uint32_t algo __unused,
1218875ce46SJens Wiklander 				     TEE_OperationMode mode __unused,
1228875ce46SJens Wiklander 				     const uint8_t *data __unused,
1238875ce46SJens Wiklander 				     size_t len __unused)
1248875ce46SJens Wiklander {
1258875ce46SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
1268875ce46SJens Wiklander }
1278875ce46SJens Wiklander 
1288875ce46SJens Wiklander TEE_Result crypto_authenc_update_payload(void *ctx __unused,
1298875ce46SJens Wiklander 					 uint32_t algo __unused,
1308875ce46SJens Wiklander 					 TEE_OperationMode mode __unused,
1318875ce46SJens Wiklander 					 const uint8_t *src_data __unused,
1328875ce46SJens Wiklander 					 size_t src_len __unused,
1338875ce46SJens Wiklander 					 uint8_t *dst_data __unused,
1348875ce46SJens Wiklander 					 size_t *dst_len __unused)
1358875ce46SJens Wiklander {
1368875ce46SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
1378875ce46SJens Wiklander }
1388875ce46SJens Wiklander 
1398875ce46SJens Wiklander TEE_Result crypto_authenc_enc_final(void *ctx __unused, uint32_t algo __unused,
1408875ce46SJens Wiklander 				    const uint8_t *src_data __unused,
1418875ce46SJens Wiklander 				    size_t src_len __unused,
1428875ce46SJens Wiklander 				    uint8_t *dst_data __unused,
1438875ce46SJens Wiklander 				    size_t *dst_len __unused,
1448875ce46SJens Wiklander 				    uint8_t *dst_tag __unused,
1458875ce46SJens Wiklander 				    size_t *dst_tag_len __unused)
1468875ce46SJens Wiklander {
1478875ce46SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
1488875ce46SJens Wiklander }
1498875ce46SJens Wiklander 
1508875ce46SJens Wiklander TEE_Result crypto_authenc_dec_final(void *ctx __unused, uint32_t algo __unused,
1518875ce46SJens Wiklander 				    const uint8_t *src_data __unused,
1528875ce46SJens Wiklander 				    size_t src_len __unused,
1538875ce46SJens Wiklander 				    uint8_t *dst_data __unused,
1548875ce46SJens Wiklander 				    size_t *dst_len __unused,
1558875ce46SJens Wiklander 				    const uint8_t *tag __unused,
1568875ce46SJens Wiklander 				    size_t tag_len __unused)
1578875ce46SJens Wiklander {
1588875ce46SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
1598875ce46SJens Wiklander }
1608875ce46SJens Wiklander 
1618875ce46SJens Wiklander void crypto_authenc_final(void *ctx __unused, uint32_t algo __unused)
1628875ce46SJens Wiklander {
1638875ce46SJens Wiklander }
1648875ce46SJens Wiklander #endif /*_CFG_CRYPTO_WITH_AUTHENC*/
165*33790cc1SJens Wiklander 
166*33790cc1SJens Wiklander #if !defined(_CFG_CRYPTO_WITH_ACIPHER)
167*33790cc1SJens Wiklander struct bignum *crypto_bignum_allocate(size_t size_bits __unused)
168*33790cc1SJens Wiklander {
169*33790cc1SJens Wiklander 	return NULL;
170*33790cc1SJens Wiklander }
171*33790cc1SJens Wiklander 
172*33790cc1SJens Wiklander TEE_Result crypto_bignum_bin2bn(const uint8_t *from __unused,
173*33790cc1SJens Wiklander 				size_t fromsize __unused,
174*33790cc1SJens Wiklander 				struct bignum *to __unused)
175*33790cc1SJens Wiklander {
176*33790cc1SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
177*33790cc1SJens Wiklander }
178*33790cc1SJens Wiklander 
179*33790cc1SJens Wiklander size_t crypto_bignum_num_bytes(struct bignum *a __unused)
180*33790cc1SJens Wiklander {
181*33790cc1SJens Wiklander 	return 0;
182*33790cc1SJens Wiklander }
183*33790cc1SJens Wiklander 
184*33790cc1SJens Wiklander size_t crypto_bignum_num_bits(struct bignum *a __unused)
185*33790cc1SJens Wiklander {
186*33790cc1SJens Wiklander 	return 0;
187*33790cc1SJens Wiklander }
188*33790cc1SJens Wiklander 
189*33790cc1SJens Wiklander /*
190*33790cc1SJens Wiklander  * crypto_bignum_allocate() and crypto_bignum_bin2bn() failing should be
191*33790cc1SJens Wiklander  * enough to guarantee that the functions calling this function aren't
192*33790cc1SJens Wiklander  * called, but just in case add a panic() here to avoid unexpected
193*33790cc1SJens Wiklander  * behavoir.
194*33790cc1SJens Wiklander  */
195*33790cc1SJens Wiklander static void bignum_cant_happen(void)
196*33790cc1SJens Wiklander {
197*33790cc1SJens Wiklander 	volatile bool b = true;
198*33790cc1SJens Wiklander 
199*33790cc1SJens Wiklander 	/* Avoid warning about function does not return */
200*33790cc1SJens Wiklander 	if (b)
201*33790cc1SJens Wiklander 		panic();
202*33790cc1SJens Wiklander }
203*33790cc1SJens Wiklander 
204*33790cc1SJens Wiklander void crypto_bignum_bn2bin(const struct bignum *from __unused,
205*33790cc1SJens Wiklander 			  uint8_t *to __unused)
206*33790cc1SJens Wiklander {
207*33790cc1SJens Wiklander 	bignum_cant_happen();
208*33790cc1SJens Wiklander }
209*33790cc1SJens Wiklander 
210*33790cc1SJens Wiklander void crypto_bignum_copy(struct bignum *to __unused,
211*33790cc1SJens Wiklander 			const struct bignum *from __unused)
212*33790cc1SJens Wiklander {
213*33790cc1SJens Wiklander 	bignum_cant_happen();
214*33790cc1SJens Wiklander }
215*33790cc1SJens Wiklander 
216*33790cc1SJens Wiklander void crypto_bignum_free(struct bignum *a)
217*33790cc1SJens Wiklander {
218*33790cc1SJens Wiklander 	if (a)
219*33790cc1SJens Wiklander 		panic();
220*33790cc1SJens Wiklander }
221*33790cc1SJens Wiklander 
222*33790cc1SJens Wiklander void crypto_bignum_clear(struct bignum *a __unused)
223*33790cc1SJens Wiklander {
224*33790cc1SJens Wiklander 	bignum_cant_happen();
225*33790cc1SJens Wiklander }
226*33790cc1SJens Wiklander 
227*33790cc1SJens Wiklander /* return -1 if a<b, 0 if a==b, +1 if a>b */
228*33790cc1SJens Wiklander int32_t crypto_bignum_compare(struct bignum *a __unused,
229*33790cc1SJens Wiklander 			      struct bignum *b __unused)
230*33790cc1SJens Wiklander {
231*33790cc1SJens Wiklander 	bignum_cant_happen();
232*33790cc1SJens Wiklander 	return -1;
233*33790cc1SJens Wiklander }
234*33790cc1SJens Wiklander #endif /*!_CFG_CRYPTO_WITH_ACIPHER*/
235