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> 1133790cc1SJens Wiklander #include <kernel/panic.h> 12d7ac7d0fSJens Wiklander #include <stdlib.h> 13d7ac7d0fSJens Wiklander #include <string.h> 14b887bd8fSJens Wiklander 15b887bd8fSJens Wiklander #if !defined(_CFG_CRYPTO_WITH_HASH) 16ecf2e014SJens Wiklander TEE_Result crypto_hash_alloc_ctx(void **ctx __unused, uint32_t algo __unused) 17b887bd8fSJens Wiklander { 18b887bd8fSJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 19b887bd8fSJens Wiklander } 20b887bd8fSJens Wiklander 21*ce7a47f5SJerome Forissier void crypto_hash_free_ctx(void *ctx, uint32_t algo __unused) 22ecf2e014SJens Wiklander { 23*ce7a47f5SJerome Forissier if (ctx) 24ecf2e014SJens Wiklander assert(0); 25ecf2e014SJens Wiklander } 26ecf2e014SJens Wiklander 27ecf2e014SJens Wiklander void crypto_hash_copy_state(void *dst_ctx __unused, void *src_ctx __unused, 28ecf2e014SJens Wiklander uint32_t algo __unused) 29ecf2e014SJens Wiklander { 30ecf2e014SJens Wiklander assert(0); 31ecf2e014SJens Wiklander } 32ecf2e014SJens Wiklander 33b887bd8fSJens Wiklander TEE_Result crypto_hash_init(void *ctx __unused, uint32_t algo __unused) 34b887bd8fSJens Wiklander { 35b887bd8fSJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 36b887bd8fSJens Wiklander } 37b887bd8fSJens Wiklander TEE_Result crypto_hash_update(void *ctx __unused, uint32_t algo __unused, 38b887bd8fSJens Wiklander const uint8_t *data __unused, size_t len __unused) 39b887bd8fSJens Wiklander { 40b887bd8fSJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 41b887bd8fSJens Wiklander } 42b887bd8fSJens Wiklander TEE_Result crypto_hash_final(void *ctx __unused, uint32_t algo __unused, 43b887bd8fSJens Wiklander uint8_t *digest __unused, size_t len __unused) 44b887bd8fSJens Wiklander { 45b887bd8fSJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 46b887bd8fSJens Wiklander } 47b887bd8fSJens Wiklander #endif /*_CFG_CRYPTO_WITH_HASH*/ 4882d91db1SJens Wiklander 4982d91db1SJens Wiklander #if !defined(_CFG_CRYPTO_WITH_CIPHER) 5072a9b1a0SJens Wiklander TEE_Result crypto_cipher_alloc_ctx(void **ctx __unused, uint32_t algo __unused) 5182d91db1SJens Wiklander { 521c5fdd1fSJerome Forissier return TEE_ERROR_NOT_IMPLEMENTED; 5382d91db1SJens Wiklander } 5482d91db1SJens Wiklander 55*ce7a47f5SJerome Forissier void crypto_cipher_free_ctx(void *ctx, uint32_t algo __unused) 5672a9b1a0SJens Wiklander { 57*ce7a47f5SJerome Forissier if (ctx) 5872a9b1a0SJens Wiklander assert(0); 5972a9b1a0SJens Wiklander } 6072a9b1a0SJens Wiklander 6172a9b1a0SJens Wiklander void crypto_cipher_copy_state(void *dst_ctx __unused, void *src_ctx __unused, 6272a9b1a0SJens Wiklander uint32_t algo __unused) 6372a9b1a0SJens Wiklander { 6472a9b1a0SJens Wiklander assert(0); 6572a9b1a0SJens Wiklander } 6672a9b1a0SJens Wiklander 6782d91db1SJens Wiklander TEE_Result crypto_cipher_init(void *ctx __unused, uint32_t algo __unused, 6882d91db1SJens Wiklander TEE_OperationMode mode __unused, 6982d91db1SJens Wiklander const uint8_t *key1 __unused, 7082d91db1SJens Wiklander size_t key1_len __unused, 7182d91db1SJens Wiklander const uint8_t *key2 __unused, 7282d91db1SJens Wiklander size_t key2_len __unused, 7382d91db1SJens Wiklander const uint8_t *iv __unused, 7482d91db1SJens Wiklander size_t iv_len __unused) 7582d91db1SJens Wiklander { 761c5fdd1fSJerome Forissier return TEE_ERROR_NOT_IMPLEMENTED; 7782d91db1SJens Wiklander } 7882d91db1SJens Wiklander 7982d91db1SJens Wiklander TEE_Result crypto_cipher_update(void *ctx __unused, uint32_t algo __unused, 8082d91db1SJens Wiklander TEE_OperationMode mode __unused, 8182d91db1SJens Wiklander bool last_block __unused, 8282d91db1SJens Wiklander const uint8_t *data __unused, 8382d91db1SJens Wiklander size_t len __unused, uint8_t *dst __unused) 8482d91db1SJens Wiklander { 851c5fdd1fSJerome Forissier return TEE_ERROR_NOT_IMPLEMENTED; 8682d91db1SJens Wiklander } 8782d91db1SJens Wiklander 8882d91db1SJens Wiklander void crypto_cipher_final(void *ctx __unused, uint32_t algo __unused) 8982d91db1SJens Wiklander { 9082d91db1SJens Wiklander } 9182d91db1SJens Wiklander 9282d91db1SJens Wiklander TEE_Result crypto_cipher_get_block_size(uint32_t algo __unused, 9382d91db1SJens Wiklander size_t *size __unused) 9482d91db1SJens Wiklander { 951c5fdd1fSJerome Forissier return TEE_ERROR_NOT_IMPLEMENTED; 9682d91db1SJens Wiklander } 9782d91db1SJens Wiklander #endif /*_CFG_CRYPTO_WITH_CIPHER*/ 98e9eaba5cSJens Wiklander 99e9eaba5cSJens Wiklander #if !defined(_CFG_CRYPTO_WITH_MAC) 10082ef73bcSJens Wiklander TEE_Result crypto_mac_alloc_ctx(void **ctx __unused, uint32_t algo __unused) 101e9eaba5cSJens Wiklander { 102e9eaba5cSJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 103e9eaba5cSJens Wiklander } 104e9eaba5cSJens Wiklander 105*ce7a47f5SJerome Forissier void crypto_mac_free_ctx(void *ctx, uint32_t algo __unused) 10682ef73bcSJens Wiklander { 107*ce7a47f5SJerome Forissier if (ctx) 10882ef73bcSJens Wiklander assert(0); 10982ef73bcSJens Wiklander } 11082ef73bcSJens Wiklander 11182ef73bcSJens Wiklander void crypto_mac_copy_state(void *dst_ctx __unused, void *src_ctx __unused, 11282ef73bcSJens Wiklander uint32_t algo __unused) 11382ef73bcSJens Wiklander { 11482ef73bcSJens Wiklander assert(0); 11582ef73bcSJens Wiklander } 11682ef73bcSJens Wiklander 117e9eaba5cSJens Wiklander TEE_Result crypto_mac_init(void *ctx __unused, uint32_t algo __unused, 118e9eaba5cSJens Wiklander const uint8_t *key __unused, size_t len __unused) 119e9eaba5cSJens Wiklander { 120e9eaba5cSJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 121e9eaba5cSJens Wiklander } 122e9eaba5cSJens Wiklander 123e9eaba5cSJens Wiklander TEE_Result crypto_mac_update(void *ctx __unused, uint32_t algo __unused, 124e9eaba5cSJens Wiklander const uint8_t *data __unused, size_t len __unused) 125e9eaba5cSJens Wiklander { 126e9eaba5cSJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 127e9eaba5cSJens Wiklander } 128e9eaba5cSJens Wiklander 129e9eaba5cSJens Wiklander TEE_Result crypto_mac_final(void *ctx __unused, uint32_t algo __unused, 130e9eaba5cSJens Wiklander uint8_t *digest __unused, 131e9eaba5cSJens Wiklander size_t digest_len __unused) 132e9eaba5cSJens Wiklander { 133e9eaba5cSJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 134e9eaba5cSJens Wiklander } 135e9eaba5cSJens Wiklander #endif /*_CFG_CRYPTO_WITH_MAC*/ 136e9eaba5cSJens Wiklander 137d7ac7d0fSJens Wiklander TEE_Result crypto_authenc_alloc_ctx(void **ctx, uint32_t algo) 1388875ce46SJens Wiklander { 139d0620b01SJens Wiklander switch (algo) { 140d0620b01SJens Wiklander #if defined(CFG_CRYPTO_CCM) 141d0620b01SJens Wiklander case TEE_ALG_AES_CCM: 142d7ac7d0fSJens Wiklander return crypto_aes_ccm_alloc_ctx(ctx); 143d0620b01SJens Wiklander #endif 144d0620b01SJens Wiklander #if defined(CFG_CRYPTO_GCM) 145d0620b01SJens Wiklander case TEE_ALG_AES_GCM: 146d7ac7d0fSJens Wiklander return crypto_aes_gcm_alloc_ctx(ctx); 147d0620b01SJens Wiklander #endif 148d0620b01SJens Wiklander default: 1498875ce46SJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 1508875ce46SJens Wiklander } 151d0620b01SJens Wiklander } 1528875ce46SJens Wiklander 153d7ac7d0fSJens Wiklander void crypto_authenc_free_ctx(void *ctx, uint32_t algo) 154d7ac7d0fSJens Wiklander { 155d7ac7d0fSJens Wiklander switch (algo) { 156d7ac7d0fSJens Wiklander #if defined(CFG_CRYPTO_CCM) 157d7ac7d0fSJens Wiklander case TEE_ALG_AES_CCM: 158d7ac7d0fSJens Wiklander crypto_aes_ccm_free_ctx(ctx); 159d7ac7d0fSJens Wiklander break; 160d7ac7d0fSJens Wiklander #endif 161d7ac7d0fSJens Wiklander #if defined(CFG_CRYPTO_GCM) 162d7ac7d0fSJens Wiklander case TEE_ALG_AES_GCM: 163d7ac7d0fSJens Wiklander crypto_aes_gcm_free_ctx(ctx); 164d7ac7d0fSJens Wiklander break; 165d7ac7d0fSJens Wiklander #endif 166d7ac7d0fSJens Wiklander default: 167*ce7a47f5SJerome Forissier if (ctx) 168d7ac7d0fSJens Wiklander assert(0); 169d7ac7d0fSJens Wiklander } 170d7ac7d0fSJens Wiklander } 171d7ac7d0fSJens Wiklander 172d7ac7d0fSJens Wiklander void crypto_authenc_copy_state(void *dst_ctx, void *src_ctx, uint32_t algo) 173d7ac7d0fSJens Wiklander { 174d7ac7d0fSJens Wiklander switch (algo) { 175d7ac7d0fSJens Wiklander #if defined(CFG_CRYPTO_CCM) 176d7ac7d0fSJens Wiklander case TEE_ALG_AES_CCM: 177d7ac7d0fSJens Wiklander crypto_aes_ccm_copy_state(dst_ctx, src_ctx); 178d7ac7d0fSJens Wiklander break; 179d7ac7d0fSJens Wiklander #endif 180d7ac7d0fSJens Wiklander #if defined(CFG_CRYPTO_GCM) 181d7ac7d0fSJens Wiklander case TEE_ALG_AES_GCM: 182d7ac7d0fSJens Wiklander crypto_aes_gcm_copy_state(dst_ctx, src_ctx); 183d7ac7d0fSJens Wiklander break; 184d7ac7d0fSJens Wiklander #endif 185d7ac7d0fSJens Wiklander default: 186d7ac7d0fSJens Wiklander assert(0); 187d7ac7d0fSJens Wiklander } 188d7ac7d0fSJens Wiklander } 189d7ac7d0fSJens Wiklander 190d0620b01SJens Wiklander TEE_Result crypto_authenc_init(void *ctx __maybe_unused, 191d0620b01SJens Wiklander uint32_t algo __maybe_unused, 192d0620b01SJens Wiklander TEE_OperationMode mode __maybe_unused, 193d0620b01SJens Wiklander const uint8_t *key __maybe_unused, 194d0620b01SJens Wiklander size_t key_len __maybe_unused, 195d0620b01SJens Wiklander const uint8_t *nonce __maybe_unused, 196d0620b01SJens Wiklander size_t nonce_len __maybe_unused, 197d0620b01SJens Wiklander size_t tag_len __maybe_unused, 198d0620b01SJens Wiklander size_t aad_len __maybe_unused, 199d0620b01SJens Wiklander size_t payload_len __maybe_unused) 200d0620b01SJens Wiklander { 201d0620b01SJens Wiklander switch (algo) { 202d0620b01SJens Wiklander #if defined(CFG_CRYPTO_CCM) 203d0620b01SJens Wiklander case TEE_ALG_AES_CCM: 204d0620b01SJens Wiklander return crypto_aes_ccm_init(ctx, mode, key, key_len, nonce, 205d0620b01SJens Wiklander nonce_len, tag_len, aad_len, 206d0620b01SJens Wiklander payload_len); 207d0620b01SJens Wiklander #endif 208d0620b01SJens Wiklander #if defined(CFG_CRYPTO_GCM) 209d0620b01SJens Wiklander case TEE_ALG_AES_GCM: 210d0620b01SJens Wiklander return crypto_aes_gcm_init(ctx, mode, key, key_len, nonce, 211d0620b01SJens Wiklander nonce_len, tag_len); 212d0620b01SJens Wiklander #endif 213d0620b01SJens Wiklander default: 214d0620b01SJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 215d0620b01SJens Wiklander } 216d0620b01SJens Wiklander } 217d0620b01SJens Wiklander 218d0620b01SJens Wiklander TEE_Result crypto_authenc_update_aad(void *ctx __maybe_unused, 219d0620b01SJens Wiklander uint32_t algo __maybe_unused, 2208875ce46SJens Wiklander TEE_OperationMode mode __unused, 221d0620b01SJens Wiklander const uint8_t *data __maybe_unused, 222d0620b01SJens Wiklander size_t len __maybe_unused) 2238875ce46SJens Wiklander { 224d0620b01SJens Wiklander switch (algo) { 225d0620b01SJens Wiklander #if defined(CFG_CRYPTO_CCM) 226d0620b01SJens Wiklander case TEE_ALG_AES_CCM: 227d0620b01SJens Wiklander return crypto_aes_ccm_update_aad(ctx, data, len); 228d0620b01SJens Wiklander #endif 229d0620b01SJens Wiklander #if defined(CFG_CRYPTO_GCM) 230d0620b01SJens Wiklander case TEE_ALG_AES_GCM: 231d0620b01SJens Wiklander return crypto_aes_gcm_update_aad(ctx, data, len); 232d0620b01SJens Wiklander #endif 233d0620b01SJens Wiklander default: 2348875ce46SJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 2358875ce46SJens Wiklander } 236d0620b01SJens Wiklander } 2378875ce46SJens Wiklander 238d0620b01SJens Wiklander TEE_Result crypto_authenc_update_payload(void *ctx __maybe_unused, 239d0620b01SJens Wiklander uint32_t algo __maybe_unused, 240d0620b01SJens Wiklander TEE_OperationMode mode __maybe_unused, 241d0620b01SJens Wiklander const uint8_t *src_data __maybe_unused, 242d0620b01SJens Wiklander size_t src_len __maybe_unused, 243d0620b01SJens Wiklander uint8_t *dst_data __maybe_unused, 244d0620b01SJens Wiklander size_t *dst_len __maybe_unused) 2458875ce46SJens Wiklander { 246d0620b01SJens Wiklander size_t dl = *dst_len; 247d0620b01SJens Wiklander 248d0620b01SJens Wiklander *dst_len = src_len; 249d0620b01SJens Wiklander if (dl < src_len) 250d0620b01SJens Wiklander return TEE_ERROR_SHORT_BUFFER; 251d0620b01SJens Wiklander 252d0620b01SJens Wiklander switch (algo) { 253d0620b01SJens Wiklander #if defined(CFG_CRYPTO_CCM) 254d0620b01SJens Wiklander case TEE_ALG_AES_CCM: 255d0620b01SJens Wiklander return crypto_aes_ccm_update_payload(ctx, mode, src_data, 256d0620b01SJens Wiklander src_len, dst_data); 257d0620b01SJens Wiklander #endif 258d0620b01SJens Wiklander #if defined(CFG_CRYPTO_GCM) 259d0620b01SJens Wiklander case TEE_ALG_AES_GCM: 260d0620b01SJens Wiklander return crypto_aes_gcm_update_payload(ctx, mode, src_data, 261d0620b01SJens Wiklander src_len, dst_data); 262d0620b01SJens Wiklander #endif 263d0620b01SJens Wiklander default: 2648875ce46SJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 2658875ce46SJens Wiklander } 266d0620b01SJens Wiklander } 2678875ce46SJens Wiklander 268d0620b01SJens Wiklander TEE_Result crypto_authenc_enc_final(void *ctx __maybe_unused, 269d0620b01SJens Wiklander uint32_t algo __maybe_unused, 270d0620b01SJens Wiklander const uint8_t *src_data __maybe_unused, 271d0620b01SJens Wiklander size_t src_len __maybe_unused, 272d0620b01SJens Wiklander uint8_t *dst_data __maybe_unused, 273d0620b01SJens Wiklander size_t *dst_len __maybe_unused, 274d0620b01SJens Wiklander uint8_t *dst_tag __maybe_unused, 275d0620b01SJens Wiklander size_t *dst_tag_len __maybe_unused) 2768875ce46SJens Wiklander { 277d0620b01SJens Wiklander size_t dl = *dst_len; 278d0620b01SJens Wiklander 279d0620b01SJens Wiklander *dst_len = src_len; 280d0620b01SJens Wiklander if (dl < src_len) 281d0620b01SJens Wiklander return TEE_ERROR_SHORT_BUFFER; 282d0620b01SJens Wiklander 283d0620b01SJens Wiklander switch (algo) { 284d0620b01SJens Wiklander #if defined(CFG_CRYPTO_CCM) 285d0620b01SJens Wiklander case TEE_ALG_AES_CCM: 286d0620b01SJens Wiklander return crypto_aes_ccm_enc_final(ctx, src_data, src_len, 287d0620b01SJens Wiklander dst_data, dst_tag, dst_tag_len); 288d0620b01SJens Wiklander #endif 289d0620b01SJens Wiklander #if defined(CFG_CRYPTO_GCM) 290d0620b01SJens Wiklander case TEE_ALG_AES_GCM: 291d0620b01SJens Wiklander return crypto_aes_gcm_enc_final(ctx, src_data, src_len, 292d0620b01SJens Wiklander dst_data, dst_tag, dst_tag_len); 293d0620b01SJens Wiklander #endif 294d0620b01SJens Wiklander default: 2958875ce46SJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 2968875ce46SJens Wiklander } 297d0620b01SJens Wiklander } 2988875ce46SJens Wiklander 299d0620b01SJens Wiklander TEE_Result crypto_authenc_dec_final(void *ctx __maybe_unused, 300d0620b01SJens Wiklander uint32_t algo __maybe_unused, 301d0620b01SJens Wiklander const uint8_t *src_data __maybe_unused, 302d0620b01SJens Wiklander size_t src_len __maybe_unused, 303d0620b01SJens Wiklander uint8_t *dst_data __maybe_unused, 304d0620b01SJens Wiklander size_t *dst_len __maybe_unused, 305d0620b01SJens Wiklander const uint8_t *tag __maybe_unused, 306d0620b01SJens Wiklander size_t tag_len __maybe_unused) 3078875ce46SJens Wiklander { 308d0620b01SJens Wiklander size_t dl = *dst_len; 309d0620b01SJens Wiklander 310d0620b01SJens Wiklander *dst_len = src_len; 311d0620b01SJens Wiklander if (dl < src_len) 312d0620b01SJens Wiklander return TEE_ERROR_SHORT_BUFFER; 313d0620b01SJens Wiklander 314d0620b01SJens Wiklander switch (algo) { 315d0620b01SJens Wiklander #if defined(CFG_CRYPTO_CCM) 316d0620b01SJens Wiklander case TEE_ALG_AES_CCM: 317d0620b01SJens Wiklander return crypto_aes_ccm_dec_final(ctx, src_data, src_len, 318d0620b01SJens Wiklander dst_data, tag, tag_len); 319d0620b01SJens Wiklander #endif 320d0620b01SJens Wiklander #if defined(CFG_CRYPTO_GCM) 321d0620b01SJens Wiklander case TEE_ALG_AES_GCM: 322d0620b01SJens Wiklander return crypto_aes_gcm_dec_final(ctx, src_data, src_len, 323d0620b01SJens Wiklander dst_data, tag, tag_len); 324d0620b01SJens Wiklander #endif 325d0620b01SJens Wiklander default: 3268875ce46SJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 3278875ce46SJens Wiklander } 3288875ce46SJens Wiklander } 3298875ce46SJens Wiklander 330d0620b01SJens Wiklander void crypto_authenc_final(void *ctx __maybe_unused, 331d0620b01SJens Wiklander uint32_t algo __maybe_unused) 3328875ce46SJens Wiklander { 333d0620b01SJens Wiklander switch (algo) { 334d0620b01SJens Wiklander #if defined(CFG_CRYPTO_CCM) 335d0620b01SJens Wiklander case TEE_ALG_AES_CCM: 336d0620b01SJens Wiklander crypto_aes_ccm_final(ctx); 337d0620b01SJens Wiklander break; 338d0620b01SJens Wiklander #endif 339d0620b01SJens Wiklander #if defined(CFG_CRYPTO_GCM) 340d0620b01SJens Wiklander case TEE_ALG_AES_GCM: 341d0620b01SJens Wiklander crypto_aes_gcm_final(ctx); 342d0620b01SJens Wiklander break; 343d0620b01SJens Wiklander #endif 344d0620b01SJens Wiklander default: 345d0620b01SJens Wiklander break; 3468875ce46SJens Wiklander } 347d0620b01SJens Wiklander } 34833790cc1SJens Wiklander 34933790cc1SJens Wiklander #if !defined(_CFG_CRYPTO_WITH_ACIPHER) 35033790cc1SJens Wiklander struct bignum *crypto_bignum_allocate(size_t size_bits __unused) 35133790cc1SJens Wiklander { 35233790cc1SJens Wiklander return NULL; 35333790cc1SJens Wiklander } 35433790cc1SJens Wiklander 35533790cc1SJens Wiklander TEE_Result crypto_bignum_bin2bn(const uint8_t *from __unused, 35633790cc1SJens Wiklander size_t fromsize __unused, 35733790cc1SJens Wiklander struct bignum *to __unused) 35833790cc1SJens Wiklander { 35933790cc1SJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 36033790cc1SJens Wiklander } 36133790cc1SJens Wiklander 36233790cc1SJens Wiklander size_t crypto_bignum_num_bytes(struct bignum *a __unused) 36333790cc1SJens Wiklander { 36433790cc1SJens Wiklander return 0; 36533790cc1SJens Wiklander } 36633790cc1SJens Wiklander 36733790cc1SJens Wiklander size_t crypto_bignum_num_bits(struct bignum *a __unused) 36833790cc1SJens Wiklander { 36933790cc1SJens Wiklander return 0; 37033790cc1SJens Wiklander } 37133790cc1SJens Wiklander 37233790cc1SJens Wiklander /* 37333790cc1SJens Wiklander * crypto_bignum_allocate() and crypto_bignum_bin2bn() failing should be 37433790cc1SJens Wiklander * enough to guarantee that the functions calling this function aren't 37533790cc1SJens Wiklander * called, but just in case add a panic() here to avoid unexpected 37633790cc1SJens Wiklander * behavoir. 37733790cc1SJens Wiklander */ 37833790cc1SJens Wiklander static void bignum_cant_happen(void) 37933790cc1SJens Wiklander { 38033790cc1SJens Wiklander volatile bool b = true; 38133790cc1SJens Wiklander 38233790cc1SJens Wiklander /* Avoid warning about function does not return */ 38333790cc1SJens Wiklander if (b) 38433790cc1SJens Wiklander panic(); 38533790cc1SJens Wiklander } 38633790cc1SJens Wiklander 38733790cc1SJens Wiklander void crypto_bignum_bn2bin(const struct bignum *from __unused, 38833790cc1SJens Wiklander uint8_t *to __unused) 38933790cc1SJens Wiklander { 39033790cc1SJens Wiklander bignum_cant_happen(); 39133790cc1SJens Wiklander } 39233790cc1SJens Wiklander 39333790cc1SJens Wiklander void crypto_bignum_copy(struct bignum *to __unused, 39433790cc1SJens Wiklander const struct bignum *from __unused) 39533790cc1SJens Wiklander { 39633790cc1SJens Wiklander bignum_cant_happen(); 39733790cc1SJens Wiklander } 39833790cc1SJens Wiklander 39933790cc1SJens Wiklander void crypto_bignum_free(struct bignum *a) 40033790cc1SJens Wiklander { 40133790cc1SJens Wiklander if (a) 40233790cc1SJens Wiklander panic(); 40333790cc1SJens Wiklander } 40433790cc1SJens Wiklander 40533790cc1SJens Wiklander void crypto_bignum_clear(struct bignum *a __unused) 40633790cc1SJens Wiklander { 40733790cc1SJens Wiklander bignum_cant_happen(); 40833790cc1SJens Wiklander } 40933790cc1SJens Wiklander 41033790cc1SJens Wiklander /* return -1 if a<b, 0 if a==b, +1 if a>b */ 41133790cc1SJens Wiklander int32_t crypto_bignum_compare(struct bignum *a __unused, 41233790cc1SJens Wiklander struct bignum *b __unused) 41333790cc1SJens Wiklander { 41433790cc1SJens Wiklander bignum_cant_happen(); 41533790cc1SJens Wiklander return -1; 41633790cc1SJens Wiklander } 41733790cc1SJens Wiklander #endif /*!_CFG_CRYPTO_WITH_ACIPHER*/ 418291e5450SJens Wiklander 419291e5450SJens Wiklander #if !defined(CFG_CRYPTO_RSA) || !defined(_CFG_CRYPTO_WITH_ACIPHER) 420291e5450SJens Wiklander TEE_Result crypto_acipher_alloc_rsa_keypair(struct rsa_keypair *s __unused, 421291e5450SJens Wiklander size_t key_size_bits __unused) 422291e5450SJens Wiklander { 423291e5450SJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 424291e5450SJens Wiklander } 425291e5450SJens Wiklander 426291e5450SJens Wiklander TEE_Result 427291e5450SJens Wiklander crypto_acipher_alloc_rsa_public_key(struct rsa_public_key *s __unused, 428291e5450SJens Wiklander size_t key_size_bits __unused) 429291e5450SJens Wiklander { 430291e5450SJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 431291e5450SJens Wiklander } 432291e5450SJens Wiklander 433291e5450SJens Wiklander void crypto_acipher_free_rsa_public_key(struct rsa_public_key *s __unused) 434291e5450SJens Wiklander { 435291e5450SJens Wiklander } 436291e5450SJens Wiklander 437291e5450SJens Wiklander TEE_Result crypto_acipher_gen_rsa_key(struct rsa_keypair *key __unused, 438291e5450SJens Wiklander size_t key_size __unused) 439291e5450SJens Wiklander { 440291e5450SJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 441291e5450SJens Wiklander } 442291e5450SJens Wiklander 443291e5450SJens Wiklander TEE_Result crypto_acipher_rsanopad_decrypt(struct rsa_keypair *key __unused, 444291e5450SJens Wiklander const uint8_t *src __unused, 445291e5450SJens Wiklander size_t src_len __unused, 446291e5450SJens Wiklander uint8_t *dst __unused, 447291e5450SJens Wiklander size_t *dst_len __unused) 448291e5450SJens Wiklander { 449291e5450SJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 450291e5450SJens Wiklander } 451291e5450SJens Wiklander 452291e5450SJens Wiklander TEE_Result crypto_acipher_rsanopad_encrypt(struct rsa_public_key *key __unused, 453291e5450SJens Wiklander const uint8_t *src __unused, 454291e5450SJens Wiklander size_t src_len __unused, 455291e5450SJens Wiklander uint8_t *dst __unused, 456291e5450SJens Wiklander size_t *dst_len __unused) 457291e5450SJens Wiklander { 458291e5450SJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 459291e5450SJens Wiklander } 460291e5450SJens Wiklander 461291e5450SJens Wiklander TEE_Result crypto_acipher_rsaes_decrypt(uint32_t algo __unused, 462291e5450SJens Wiklander struct rsa_keypair *key __unused, 463291e5450SJens Wiklander const uint8_t *label __unused, 464291e5450SJens Wiklander size_t label_len __unused, 465291e5450SJens Wiklander const uint8_t *src __unused, 466291e5450SJens Wiklander size_t src_len __unused, 467291e5450SJens Wiklander uint8_t *dst __unused, 468291e5450SJens Wiklander size_t *dst_len __unused) 469291e5450SJens Wiklander { 470291e5450SJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 471291e5450SJens Wiklander } 472291e5450SJens Wiklander 473291e5450SJens Wiklander TEE_Result crypto_acipher_rsaes_encrypt(uint32_t algo __unused, 474291e5450SJens Wiklander struct rsa_public_key *key __unused, 475291e5450SJens Wiklander const uint8_t *label __unused, 476291e5450SJens Wiklander size_t label_len __unused, 477291e5450SJens Wiklander const uint8_t *src __unused, 478291e5450SJens Wiklander size_t src_len __unused, 479291e5450SJens Wiklander uint8_t *dst __unused, 480291e5450SJens Wiklander size_t *dst_len __unused) 481291e5450SJens Wiklander { 482291e5450SJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 483291e5450SJens Wiklander } 484291e5450SJens Wiklander 485291e5450SJens Wiklander TEE_Result crypto_acipher_rsassa_sign(uint32_t algo __unused, 486291e5450SJens Wiklander struct rsa_keypair *key __unused, 487291e5450SJens Wiklander int salt_len __unused, 488291e5450SJens Wiklander const uint8_t *msg __unused, 489291e5450SJens Wiklander size_t msg_len __unused, 490291e5450SJens Wiklander uint8_t *sig __unused, 491291e5450SJens Wiklander size_t *sig_len __unused) 492291e5450SJens Wiklander { 493291e5450SJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 494291e5450SJens Wiklander } 495291e5450SJens Wiklander 496291e5450SJens Wiklander TEE_Result crypto_acipher_rsassa_verify(uint32_t algo __unused, 497291e5450SJens Wiklander struct rsa_public_key *key __unused, 498291e5450SJens Wiklander int salt_len __unused, 499291e5450SJens Wiklander const uint8_t *msg __unused, 500291e5450SJens Wiklander size_t msg_len __unused, 501291e5450SJens Wiklander const uint8_t *sig __unused, 502291e5450SJens Wiklander size_t sig_len __unused) 503291e5450SJens Wiklander { 504291e5450SJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 505291e5450SJens Wiklander } 506291e5450SJens Wiklander #endif /*!CFG_CRYPTO_RSA || !_CFG_CRYPTO_WITH_ACIPHER*/ 507291e5450SJens Wiklander 508291e5450SJens Wiklander #if !defined(CFG_CRYPTO_DSA) || !defined(_CFG_CRYPTO_WITH_ACIPHER) 509291e5450SJens Wiklander TEE_Result crypto_acipher_alloc_dsa_keypair(struct dsa_keypair *s __unused, 510291e5450SJens Wiklander size_t key_size_bits __unused) 511291e5450SJens Wiklander { 512291e5450SJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 513291e5450SJens Wiklander } 514291e5450SJens Wiklander 515291e5450SJens Wiklander TEE_Result 516291e5450SJens Wiklander crypto_acipher_alloc_dsa_public_key(struct dsa_public_key *s __unused, 517291e5450SJens Wiklander size_t key_size_bits __unused) 518291e5450SJens Wiklander { 519291e5450SJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 520291e5450SJens Wiklander } 521291e5450SJens Wiklander 522291e5450SJens Wiklander TEE_Result crypto_acipher_gen_dsa_key(struct dsa_keypair *key __unused, 523291e5450SJens Wiklander size_t key_size __unused) 524291e5450SJens Wiklander { 525291e5450SJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 526291e5450SJens Wiklander } 527291e5450SJens Wiklander 528291e5450SJens Wiklander TEE_Result crypto_acipher_dsa_sign(uint32_t algo __unused, 529291e5450SJens Wiklander struct dsa_keypair *key __unused, 530291e5450SJens Wiklander const uint8_t *msg __unused, 531291e5450SJens Wiklander size_t msg_len __unused, 532291e5450SJens Wiklander uint8_t *sig __unused, 533291e5450SJens Wiklander size_t *sig_len __unused) 534291e5450SJens Wiklander { 535291e5450SJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 536291e5450SJens Wiklander } 537291e5450SJens Wiklander 538291e5450SJens Wiklander TEE_Result crypto_acipher_dsa_verify(uint32_t algo __unused, 539291e5450SJens Wiklander struct dsa_public_key *key __unused, 540291e5450SJens Wiklander const uint8_t *msg __unused, 541291e5450SJens Wiklander size_t msg_len __unused, 542291e5450SJens Wiklander const uint8_t *sig __unused, 543291e5450SJens Wiklander size_t sig_len __unused) 544291e5450SJens Wiklander { 545291e5450SJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 546291e5450SJens Wiklander } 547291e5450SJens Wiklander #endif /*!CFG_CRYPTO_DSA || !_CFG_CRYPTO_WITH_ACIPHER*/ 548291e5450SJens Wiklander 549291e5450SJens Wiklander #if !defined(CFG_CRYPTO_DH) || !defined(_CFG_CRYPTO_WITH_ACIPHER) 550291e5450SJens Wiklander TEE_Result crypto_acipher_alloc_dh_keypair(struct dh_keypair *s __unused, 551291e5450SJens Wiklander size_t key_size_bits __unused) 552291e5450SJens Wiklander { 553291e5450SJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 554291e5450SJens Wiklander } 555291e5450SJens Wiklander 556291e5450SJens Wiklander TEE_Result crypto_acipher_gen_dh_key(struct dh_keypair *key __unused, 557291e5450SJens Wiklander struct bignum *q __unused, 558291e5450SJens Wiklander size_t xbits __unused) 559291e5450SJens Wiklander { 560291e5450SJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 561291e5450SJens Wiklander } 562291e5450SJens Wiklander 563291e5450SJens Wiklander TEE_Result 564291e5450SJens Wiklander crypto_acipher_dh_shared_secret(struct dh_keypair *private_key __unused, 565291e5450SJens Wiklander struct bignum *public_key __unused, 566291e5450SJens Wiklander struct bignum *secret __unused) 567291e5450SJens Wiklander { 568291e5450SJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 569291e5450SJens Wiklander } 570291e5450SJens Wiklander #endif /*!CFG_CRYPTO_DH || !_CFG_CRYPTO_WITH_ACIPHER*/ 571291e5450SJens Wiklander 572291e5450SJens Wiklander #if !defined(CFG_CRYPTO_ECC) || !defined(_CFG_CRYPTO_WITH_ACIPHER) 573291e5450SJens Wiklander TEE_Result 574291e5450SJens Wiklander crypto_acipher_alloc_ecc_public_key(struct ecc_public_key *s __unused, 575291e5450SJens Wiklander size_t key_size_bits __unused) 576291e5450SJens Wiklander { 577291e5450SJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 578291e5450SJens Wiklander } 579291e5450SJens Wiklander 580291e5450SJens Wiklander TEE_Result crypto_acipher_alloc_ecc_keypair(struct ecc_keypair *s __unused, 581291e5450SJens Wiklander size_t key_size_bits __unused) 582291e5450SJens Wiklander { 583291e5450SJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 584291e5450SJens Wiklander } 585291e5450SJens Wiklander 586291e5450SJens Wiklander void crypto_acipher_free_ecc_public_key(struct ecc_public_key *s __unused) 587291e5450SJens Wiklander { 588291e5450SJens Wiklander } 589291e5450SJens Wiklander 590291e5450SJens Wiklander TEE_Result crypto_acipher_gen_ecc_key(struct ecc_keypair *key __unused) 591291e5450SJens Wiklander { 592291e5450SJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 593291e5450SJens Wiklander } 594291e5450SJens Wiklander 595291e5450SJens Wiklander TEE_Result crypto_acipher_ecc_sign(uint32_t algo __unused, 596291e5450SJens Wiklander struct ecc_keypair *key __unused, 597291e5450SJens Wiklander const uint8_t *msg __unused, 598291e5450SJens Wiklander size_t msg_len __unused, 599291e5450SJens Wiklander uint8_t *sig __unused, 600291e5450SJens Wiklander size_t *sig_len __unused) 601291e5450SJens Wiklander { 602291e5450SJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 603291e5450SJens Wiklander } 604291e5450SJens Wiklander 605291e5450SJens Wiklander TEE_Result crypto_acipher_ecc_verify(uint32_t algo __unused, 606291e5450SJens Wiklander struct ecc_public_key *key __unused, 607291e5450SJens Wiklander const uint8_t *msg __unused, 608291e5450SJens Wiklander size_t msg_len __unused, 609291e5450SJens Wiklander const uint8_t *sig __unused, 610291e5450SJens Wiklander size_t sig_len __unused) 611291e5450SJens Wiklander { 612291e5450SJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 613291e5450SJens Wiklander } 614291e5450SJens Wiklander 615291e5450SJens Wiklander TEE_Result 616291e5450SJens Wiklander crypto_acipher_ecc_shared_secret(struct ecc_keypair *private_key __unused, 617291e5450SJens Wiklander struct ecc_public_key *public_key __unused, 618291e5450SJens Wiklander void *secret __unused, 619291e5450SJens Wiklander unsigned long *secret_len __unused) 620291e5450SJens Wiklander { 621291e5450SJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 622291e5450SJens Wiklander } 623291e5450SJens Wiklander #endif /*!CFG_CRYPTO_ECC || !_CFG_CRYPTO_WITH_ACIPHER*/ 624