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