xref: /optee_os/core/crypto/crypto.c (revision 33790cc18342231b13f7e6791196bd7c1f41e33f)
1 /*
2  * Copyright (c) 2017, Linaro Limited
3  * All rights reserved.
4  *
5  * SPDX-License-Identifier: BSD-2-Clause
6  */
7 
8 #include <compiler.h>
9 #include <kernel/panic.h>
10 #include <tee/tee_cryp_provider.h>
11 
12 #if !defined(_CFG_CRYPTO_WITH_HASH)
13 TEE_Result crypto_hash_get_ctx_size(uint32_t algo __unused,
14 				    size_t *size __unused)
15 {
16 	return TEE_ERROR_NOT_IMPLEMENTED;
17 }
18 
19 TEE_Result crypto_hash_init(void *ctx __unused, uint32_t algo __unused)
20 {
21 	return TEE_ERROR_NOT_IMPLEMENTED;
22 }
23 TEE_Result crypto_hash_update(void *ctx __unused, uint32_t algo __unused,
24 			      const uint8_t *data __unused, size_t len __unused)
25 {
26 	return TEE_ERROR_NOT_IMPLEMENTED;
27 }
28 TEE_Result crypto_hash_final(void *ctx __unused, uint32_t algo __unused,
29 			     uint8_t *digest __unused, size_t len __unused)
30 {
31 	return TEE_ERROR_NOT_IMPLEMENTED;
32 }
33 #endif /*_CFG_CRYPTO_WITH_HASH*/
34 
35 #if !defined(_CFG_CRYPTO_WITH_CIPHER)
36 TEE_Result crypto_cipher_get_ctx_size(uint32_t algo, size_t *size)
37 {
38 	return TEE_ERROR_NOT_IMPLEMENTED
39 }
40 
41 TEE_Result crypto_cipher_init(void *ctx __unused, uint32_t algo __unused,
42 			      TEE_OperationMode mode __unused,
43 			      const uint8_t *key1 __unused,
44 			      size_t key1_len __unused,
45 			      const uint8_t *key2 __unused,
46 			      size_t key2_len __unused,
47 			      const uint8_t *iv __unused,
48 			      size_t iv_len __unused)
49 {
50 	return TEE_ERROR_NOT_IMPLEMENTED
51 }
52 
53 TEE_Result crypto_cipher_update(void *ctx __unused, uint32_t algo __unused,
54 				TEE_OperationMode mode __unused,
55 				bool last_block __unused,
56 				const uint8_t *data __unused,
57 				size_t len __unused, uint8_t *dst __unused)
58 {
59 	return TEE_ERROR_NOT_IMPLEMENTED
60 }
61 
62 void crypto_cipher_final(void *ctx __unused, uint32_t algo __unused)
63 {
64 }
65 
66 TEE_Result crypto_cipher_get_block_size(uint32_t algo __unused,
67 					size_t *size __unused)
68 {
69 	return TEE_ERROR_NOT_IMPLEMENTED
70 }
71 #endif /*_CFG_CRYPTO_WITH_CIPHER*/
72 
73 #if !defined(_CFG_CRYPTO_WITH_MAC)
74 TEE_Result crypto_mac_get_ctx_size(uint32_t algo __unused,
75 				   size_t *size __unused)
76 {
77 	return TEE_ERROR_NOT_IMPLEMENTED;
78 }
79 
80 TEE_Result crypto_mac_init(void *ctx __unused, uint32_t algo __unused,
81 			   const uint8_t *key __unused, size_t len __unused)
82 {
83 	return TEE_ERROR_NOT_IMPLEMENTED;
84 }
85 
86 TEE_Result crypto_mac_update(void *ctx __unused, uint32_t algo __unused,
87 			     const uint8_t *data __unused, size_t len __unused)
88 {
89 	return TEE_ERROR_NOT_IMPLEMENTED;
90 }
91 
92 TEE_Result crypto_mac_final(void *ctx __unused, uint32_t algo __unused,
93 			    uint8_t *digest __unused,
94 			    size_t digest_len __unused)
95 {
96 	return TEE_ERROR_NOT_IMPLEMENTED;
97 }
98 #endif /*_CFG_CRYPTO_WITH_MAC*/
99 
100 #if !defined(_CFG_CRYPTO_WITH_AUTHENC)
101 TEE_Result crypto_authenc_get_ctx_size(uint32_t algo __unused,
102 				       size_t *size __unused)
103 {
104 	return TEE_ERROR_NOT_IMPLEMENTED;
105 }
106 
107 TEE_Result crypto_authenc_init(void *ctx __unused, uint32_t algo __unused,
108 			       TEE_OperationMode mode __unused,
109 			       const uint8_t *key __unused,
110 			       size_t key_len __unused,
111 			       const uint8_t *nonce __unused,
112 			       size_t nonce_len __unused,
113 			       size_t tag_len __unused,
114 			       size_t aad_len __unused,
115 			       size_t payload_len __unused)
116 {
117 	return TEE_ERROR_NOT_IMPLEMENTED;
118 }
119 
120 TEE_Result crypto_authenc_update_aad(void *ctx __unused, uint32_t algo __unused,
121 				     TEE_OperationMode mode __unused,
122 				     const uint8_t *data __unused,
123 				     size_t len __unused)
124 {
125 	return TEE_ERROR_NOT_IMPLEMENTED;
126 }
127 
128 TEE_Result crypto_authenc_update_payload(void *ctx __unused,
129 					 uint32_t algo __unused,
130 					 TEE_OperationMode mode __unused,
131 					 const uint8_t *src_data __unused,
132 					 size_t src_len __unused,
133 					 uint8_t *dst_data __unused,
134 					 size_t *dst_len __unused)
135 {
136 	return TEE_ERROR_NOT_IMPLEMENTED;
137 }
138 
139 TEE_Result crypto_authenc_enc_final(void *ctx __unused, uint32_t algo __unused,
140 				    const uint8_t *src_data __unused,
141 				    size_t src_len __unused,
142 				    uint8_t *dst_data __unused,
143 				    size_t *dst_len __unused,
144 				    uint8_t *dst_tag __unused,
145 				    size_t *dst_tag_len __unused)
146 {
147 	return TEE_ERROR_NOT_IMPLEMENTED;
148 }
149 
150 TEE_Result crypto_authenc_dec_final(void *ctx __unused, uint32_t algo __unused,
151 				    const uint8_t *src_data __unused,
152 				    size_t src_len __unused,
153 				    uint8_t *dst_data __unused,
154 				    size_t *dst_len __unused,
155 				    const uint8_t *tag __unused,
156 				    size_t tag_len __unused)
157 {
158 	return TEE_ERROR_NOT_IMPLEMENTED;
159 }
160 
161 void crypto_authenc_final(void *ctx __unused, uint32_t algo __unused)
162 {
163 }
164 #endif /*_CFG_CRYPTO_WITH_AUTHENC*/
165 
166 #if !defined(_CFG_CRYPTO_WITH_ACIPHER)
167 struct bignum *crypto_bignum_allocate(size_t size_bits __unused)
168 {
169 	return NULL;
170 }
171 
172 TEE_Result crypto_bignum_bin2bn(const uint8_t *from __unused,
173 				size_t fromsize __unused,
174 				struct bignum *to __unused)
175 {
176 	return TEE_ERROR_NOT_IMPLEMENTED;
177 }
178 
179 size_t crypto_bignum_num_bytes(struct bignum *a __unused)
180 {
181 	return 0;
182 }
183 
184 size_t crypto_bignum_num_bits(struct bignum *a __unused)
185 {
186 	return 0;
187 }
188 
189 /*
190  * crypto_bignum_allocate() and crypto_bignum_bin2bn() failing should be
191  * enough to guarantee that the functions calling this function aren't
192  * called, but just in case add a panic() here to avoid unexpected
193  * behavoir.
194  */
195 static void bignum_cant_happen(void)
196 {
197 	volatile bool b = true;
198 
199 	/* Avoid warning about function does not return */
200 	if (b)
201 		panic();
202 }
203 
204 void crypto_bignum_bn2bin(const struct bignum *from __unused,
205 			  uint8_t *to __unused)
206 {
207 	bignum_cant_happen();
208 }
209 
210 void crypto_bignum_copy(struct bignum *to __unused,
211 			const struct bignum *from __unused)
212 {
213 	bignum_cant_happen();
214 }
215 
216 void crypto_bignum_free(struct bignum *a)
217 {
218 	if (a)
219 		panic();
220 }
221 
222 void crypto_bignum_clear(struct bignum *a __unused)
223 {
224 	bignum_cant_happen();
225 }
226 
227 /* return -1 if a<b, 0 if a==b, +1 if a>b */
228 int32_t crypto_bignum_compare(struct bignum *a __unused,
229 			      struct bignum *b __unused)
230 {
231 	bignum_cant_happen();
232 	return -1;
233 }
234 #endif /*!_CFG_CRYPTO_WITH_ACIPHER*/
235