17777dab0Sopenharmony_ci/*
27777dab0Sopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd.
37777dab0Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
47777dab0Sopenharmony_ci * you may not use this file except in compliance with the License.
57777dab0Sopenharmony_ci * You may obtain a copy of the License at
67777dab0Sopenharmony_ci *
77777dab0Sopenharmony_ci *    http://www.apache.org/licenses/LICENSE-2.0
87777dab0Sopenharmony_ci *
97777dab0Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
107777dab0Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
117777dab0Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
127777dab0Sopenharmony_ci * See the License for the specific language governing permissions and
137777dab0Sopenharmony_ci * limitations under the License.
147777dab0Sopenharmony_ci */
157777dab0Sopenharmony_ci
167777dab0Sopenharmony_ci#ifndef TEE_CRYPTO_API_H
177777dab0Sopenharmony_ci#define TEE_CRYPTO_API_H
187777dab0Sopenharmony_ci
197777dab0Sopenharmony_ci/**
207777dab0Sopenharmony_ci * @addtogroup TeeTrusted
217777dab0Sopenharmony_ci * @{
227777dab0Sopenharmony_ci *
237777dab0Sopenharmony_ci * @brief TEE(Trusted Excution Environment) API.
247777dab0Sopenharmony_ci * Provides security capability APIs such as trusted storage, encryption and decryption,
257777dab0Sopenharmony_ci * and trusted time for trusted application development.
267777dab0Sopenharmony_ci *
277777dab0Sopenharmony_ci * @since 12
287777dab0Sopenharmony_ci */
297777dab0Sopenharmony_ci
307777dab0Sopenharmony_ci/**
317777dab0Sopenharmony_ci * @file tee_crypto_api.h
327777dab0Sopenharmony_ci *
337777dab0Sopenharmony_ci * @brief Provides APIs for cryptographic operations.
347777dab0Sopenharmony_ci *
357777dab0Sopenharmony_ci * You can use these APIs to implement encryption and decryption.
367777dab0Sopenharmony_ci *
377777dab0Sopenharmony_ci * @library NA
387777dab0Sopenharmony_ci * @kit TEEKit
397777dab0Sopenharmony_ci * @syscap SystemCapability.Tee.TeeClient
407777dab0Sopenharmony_ci * @since 12
417777dab0Sopenharmony_ci * @version 1.0
427777dab0Sopenharmony_ci */
437777dab0Sopenharmony_ci
447777dab0Sopenharmony_ci#include <pthread.h> /* pthread_mutex_t */
457777dab0Sopenharmony_ci#include <tee_defines.h>
467777dab0Sopenharmony_ci#include <tee_mem_mgmt_api.h>
477777dab0Sopenharmony_ci
487777dab0Sopenharmony_ci#ifdef __cplusplus
497777dab0Sopenharmony_ciextern "C" {
507777dab0Sopenharmony_ci#endif
517777dab0Sopenharmony_ci
527777dab0Sopenharmony_ci#ifndef NULL
537777dab0Sopenharmony_ci/**
547777dab0Sopenharmony_ci * @brief Definition of <b>NULL</b>.
557777dab0Sopenharmony_ci *
567777dab0Sopenharmony_ci * @since 12
577777dab0Sopenharmony_ci */
587777dab0Sopenharmony_ci#define NULL ((void *)0)
597777dab0Sopenharmony_ci#endif
607777dab0Sopenharmony_ci/**
617777dab0Sopenharmony_ci * @brief Defines the maximum key length, in bits.
627777dab0Sopenharmony_ci *
637777dab0Sopenharmony_ci * @since 12
647777dab0Sopenharmony_ci */
657777dab0Sopenharmony_ci#define TEE_MAX_KEY_SIZE_IN_BITS      (1024 * 8)
667777dab0Sopenharmony_ci/**
677777dab0Sopenharmony_ci * @brief Defines the length of the SW_RSA key, in bytes.
687777dab0Sopenharmony_ci *
697777dab0Sopenharmony_ci * @since 12
707777dab0Sopenharmony_ci */
717777dab0Sopenharmony_ci#define SW_RSA_KEYLEN                 1024
727777dab0Sopenharmony_ci/**
737777dab0Sopenharmony_ci * @brief Defines the maximum length of other Diffie-Hellman (DH) information, in bytes.
747777dab0Sopenharmony_ci *
757777dab0Sopenharmony_ci * @since 12
767777dab0Sopenharmony_ci */
777777dab0Sopenharmony_ci#define TEE_DH_MAX_SIZE_OF_OTHER_INFO 64 /* bytes */
787777dab0Sopenharmony_ci
797777dab0Sopenharmony_ci/**
807777dab0Sopenharmony_ci * @brief Enumerates the cryptographic operation handles.
817777dab0Sopenharmony_ci *
827777dab0Sopenharmony_ci * @since 12
837777dab0Sopenharmony_ci */
847777dab0Sopenharmony_cienum __TEE_Operation_Constants {
857777dab0Sopenharmony_ci    /** Cipher */
867777dab0Sopenharmony_ci    TEE_OPERATION_CIPHER               = 0x1,
877777dab0Sopenharmony_ci    /** MAC */
887777dab0Sopenharmony_ci    TEE_OPERATION_MAC                  = 3,
897777dab0Sopenharmony_ci    /** AE */
907777dab0Sopenharmony_ci    TEE_OPERATION_AE                   = 4,
917777dab0Sopenharmony_ci    /** Digest */
927777dab0Sopenharmony_ci    TEE_OPERATION_DIGEST               = 5,
937777dab0Sopenharmony_ci    /** Asymmetric Cipher */
947777dab0Sopenharmony_ci    TEE_OPERATION_ASYMMETRIC_CIPHER    = 6,
957777dab0Sopenharmony_ci    /** Asymmetric Signature */
967777dab0Sopenharmony_ci    TEE_OPERATION_ASYMMETRIC_SIGNATURE = 7,
977777dab0Sopenharmony_ci    /** Key Derivation */
987777dab0Sopenharmony_ci    TEE_OPERATION_KEY_DERIVATION       = 8,
997777dab0Sopenharmony_ci};
1007777dab0Sopenharmony_ci
1017777dab0Sopenharmony_ci/**
1027777dab0Sopenharmony_ci * @brief Enumerates the cryptographic algorithms.
1037777dab0Sopenharmony_ci *
1047777dab0Sopenharmony_ci * @since 12
1057777dab0Sopenharmony_ci */
1067777dab0Sopenharmony_cienum __tee_crypto_algorithm_id {
1077777dab0Sopenharmony_ci    /** Invalid algorithm */
1087777dab0Sopenharmony_ci    TEE_ALG_INVALID                      = 0x0,
1097777dab0Sopenharmony_ci    /** AES_ECB_NOPAD */
1107777dab0Sopenharmony_ci    TEE_ALG_AES_ECB_NOPAD                = 0x10000010,
1117777dab0Sopenharmony_ci    /** AES_CBC_NOPAD */
1127777dab0Sopenharmony_ci    TEE_ALG_AES_CBC_NOPAD                = 0x10000110,
1137777dab0Sopenharmony_ci    /** AES_CTR */
1147777dab0Sopenharmony_ci    TEE_ALG_AES_CTR                      = 0x10000210,
1157777dab0Sopenharmony_ci    /** AES_CTS */
1167777dab0Sopenharmony_ci    TEE_ALG_AES_CTS                      = 0x10000310,
1177777dab0Sopenharmony_ci    /** AES_XTS */
1187777dab0Sopenharmony_ci    TEE_ALG_AES_XTS                      = 0x10000410,
1197777dab0Sopenharmony_ci    /** AES_CBC_MAC_NOPAD */
1207777dab0Sopenharmony_ci    TEE_ALG_AES_CBC_MAC_NOPAD            = 0x30000110,
1217777dab0Sopenharmony_ci    /** AES_CBC_MAC_PKCS5 */
1227777dab0Sopenharmony_ci    TEE_ALG_AES_CBC_MAC_PKCS5            = 0x30000510,
1237777dab0Sopenharmony_ci    /** AES_CMAC */
1247777dab0Sopenharmony_ci    TEE_ALG_AES_CMAC                     = 0x30000610,
1257777dab0Sopenharmony_ci    /** AES_GMAC */
1267777dab0Sopenharmony_ci    TEE_ALG_AES_GMAC                     = 0x30000810,
1277777dab0Sopenharmony_ci    /** AES_CCM */
1287777dab0Sopenharmony_ci    TEE_ALG_AES_CCM                      = 0x40000710,
1297777dab0Sopenharmony_ci    /** AES_GCM */
1307777dab0Sopenharmony_ci    TEE_ALG_AES_GCM                      = 0x40000810,
1317777dab0Sopenharmony_ci    /** DES_ECB_NOPAD */
1327777dab0Sopenharmony_ci    TEE_ALG_DES_ECB_NOPAD                = 0x10000011,
1337777dab0Sopenharmony_ci    /** DES_CBC_NOPAD */
1347777dab0Sopenharmony_ci    TEE_ALG_DES_CBC_NOPAD                = 0x10000111,
1357777dab0Sopenharmony_ci    /** DES_CBC_MAC_NOPAD */
1367777dab0Sopenharmony_ci    TEE_ALG_DES_CBC_MAC_NOPAD            = 0x30000111,
1377777dab0Sopenharmony_ci    /** DES_CBC_MAC_PKCS5 */
1387777dab0Sopenharmony_ci    TEE_ALG_DES_CBC_MAC_PKCS5            = 0x30000511,
1397777dab0Sopenharmony_ci    /** DES3_ECB_NOPAD */
1407777dab0Sopenharmony_ci    TEE_ALG_DES3_ECB_NOPAD               = 0x10000013,
1417777dab0Sopenharmony_ci    /** DES3_CBC_NOPAD */
1427777dab0Sopenharmony_ci    TEE_ALG_DES3_CBC_NOPAD               = 0x10000113,
1437777dab0Sopenharmony_ci    /** DES3_CBC_MAC_NOPAD */
1447777dab0Sopenharmony_ci    TEE_ALG_DES3_CBC_MAC_NOPAD           = 0x30000113,
1457777dab0Sopenharmony_ci    /** DES3_CBC_MAC_PKCS5 */
1467777dab0Sopenharmony_ci    TEE_ALG_DES3_CBC_MAC_PKCS5           = 0x30000513,
1477777dab0Sopenharmony_ci    /** RSASSA_PKCS1_V1_5_MD5 */
1487777dab0Sopenharmony_ci    TEE_ALG_RSASSA_PKCS1_V1_5_MD5        = 0x70001830,
1497777dab0Sopenharmony_ci    /** RSASSA_PKCS1_V1_5_SHA1 */
1507777dab0Sopenharmony_ci    TEE_ALG_RSASSA_PKCS1_V1_5_SHA1       = 0x70002830,
1517777dab0Sopenharmony_ci    /** RSASSA_PKCS1_V1_5_SHA224 */
1527777dab0Sopenharmony_ci    TEE_ALG_RSASSA_PKCS1_V1_5_SHA224     = 0x70003830,
1537777dab0Sopenharmony_ci    /** RSASSA_PKCS1_V1_5_SHA256 */
1547777dab0Sopenharmony_ci    TEE_ALG_RSASSA_PKCS1_V1_5_SHA256     = 0x70004830,
1557777dab0Sopenharmony_ci    /** RSASSA_PKCS1_V1_5_SHA384 */
1567777dab0Sopenharmony_ci    TEE_ALG_RSASSA_PKCS1_V1_5_SHA384     = 0x70005830,
1577777dab0Sopenharmony_ci    /** RSASSA_PKCS1_V1_5_SHA512 */
1587777dab0Sopenharmony_ci    TEE_ALG_RSASSA_PKCS1_V1_5_SHA512     = 0x70006830,
1597777dab0Sopenharmony_ci    /** RSASSA_PKCS1_PSS_MGF1_MD5 */
1607777dab0Sopenharmony_ci    TEE_ALG_RSASSA_PKCS1_PSS_MGF1_MD5    = 0x70111930,
1617777dab0Sopenharmony_ci    /** RSASSA_PKCS1_PSS_MGF1_SHA1 */
1627777dab0Sopenharmony_ci    TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA1   = 0x70212930,
1637777dab0Sopenharmony_ci    /** RSASSA_PKCS1_PSS_MGF1_SHA224 */
1647777dab0Sopenharmony_ci    TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA224 = 0x70313930,
1657777dab0Sopenharmony_ci    /** RSASSA_PKCS1_PSS_MGF1_SHA256 */
1667777dab0Sopenharmony_ci    TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA256 = 0x70414930,
1677777dab0Sopenharmony_ci    /** RSASSA_PKCS1_PSS_MGF1_SHA384 */
1687777dab0Sopenharmony_ci    TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA384 = 0x70515930,
1697777dab0Sopenharmony_ci    /** RSASSA_PKCS1_PSS_MGF1_SHA512 */
1707777dab0Sopenharmony_ci    TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA512 = 0x70616930,
1717777dab0Sopenharmony_ci    /** RSAES_PKCS1_V1_5 */
1727777dab0Sopenharmony_ci    TEE_ALG_RSAES_PKCS1_V1_5             = 0x60000130,
1737777dab0Sopenharmony_ci    /** RSAES_PKCS1_OAEP_MGF1_SHA1 */
1747777dab0Sopenharmony_ci    TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1   = 0x60210230,
1757777dab0Sopenharmony_ci    /** RSAES_PKCS1_OAEP_MGF1_SHA224 */
1767777dab0Sopenharmony_ci    TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA224 = 0x60211230,
1777777dab0Sopenharmony_ci    /** RSAES_PKCS1_OAEP_MGF1_SHA256 */
1787777dab0Sopenharmony_ci    TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA256 = 0x60212230,
1797777dab0Sopenharmony_ci    /** RSAES_PKCS1_OAEP_MGF1_SHA384 */
1807777dab0Sopenharmony_ci    TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA384 = 0x60213230,
1817777dab0Sopenharmony_ci    /** RSAES_PKCS1_OAEP_MGF1_SHA512 */
1827777dab0Sopenharmony_ci    TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA512 = 0x60214230,
1837777dab0Sopenharmony_ci    /** RSA_NOPAD */
1847777dab0Sopenharmony_ci    TEE_ALG_RSA_NOPAD                    = 0x60000030,
1857777dab0Sopenharmony_ci    /** DSA_SHA1 */
1867777dab0Sopenharmony_ci    TEE_ALG_DSA_SHA1                     = 0x70002131,
1877777dab0Sopenharmony_ci    /** DSA_SHA224 */
1887777dab0Sopenharmony_ci    TEE_ALG_DSA_SHA224                   = 0x70003131,
1897777dab0Sopenharmony_ci    /** DSA_SHA256 */
1907777dab0Sopenharmony_ci    TEE_ALG_DSA_SHA256                   = 0x70004131,
1917777dab0Sopenharmony_ci    /** DH_DERIVE_SHARED_SECRET */
1927777dab0Sopenharmony_ci    TEE_ALG_DH_DERIVE_SHARED_SECRET      = 0x80000032,
1937777dab0Sopenharmony_ci    /** MD5 */
1947777dab0Sopenharmony_ci    TEE_ALG_MD5                          = 0x50000001,
1957777dab0Sopenharmony_ci    /** SHA1 */
1967777dab0Sopenharmony_ci    TEE_ALG_SHA1                         = 0x50000002,
1977777dab0Sopenharmony_ci    /** SHA224 */
1987777dab0Sopenharmony_ci    TEE_ALG_SHA224                       = 0x50000003,
1997777dab0Sopenharmony_ci    /** SHA256 */
2007777dab0Sopenharmony_ci    TEE_ALG_SHA256                       = 0x50000004,
2017777dab0Sopenharmony_ci    /** SHA384 */
2027777dab0Sopenharmony_ci    TEE_ALG_SHA384                       = 0x50000005,
2037777dab0Sopenharmony_ci    /** SHA512 */
2047777dab0Sopenharmony_ci    TEE_ALG_SHA512                       = 0x50000006,
2057777dab0Sopenharmony_ci    /** HMAC_MD5 */
2067777dab0Sopenharmony_ci    TEE_ALG_HMAC_MD5                     = 0x30000001,
2077777dab0Sopenharmony_ci    /** HMAC_SHA1 */
2087777dab0Sopenharmony_ci    TEE_ALG_HMAC_SHA1                    = 0x30000002,
2097777dab0Sopenharmony_ci    /** HMAC_SHA1 */
2107777dab0Sopenharmony_ci    TEE_ALG_HMAC_SHA224                  = 0x30000003,
2117777dab0Sopenharmony_ci    /** HMAC_SHA224 */
2127777dab0Sopenharmony_ci    TEE_ALG_HMAC_SHA256                  = 0x30000004,
2137777dab0Sopenharmony_ci    /** HMAC_SHA256 */
2147777dab0Sopenharmony_ci    TEE_ALG_HMAC_SHA384                  = 0x30000005,
2157777dab0Sopenharmony_ci    /** HMAC_SHA384 */
2167777dab0Sopenharmony_ci    TEE_ALG_HMAC_SHA512                  = 0x30000006,
2177777dab0Sopenharmony_ci    /** HMAC_SHA512 */
2187777dab0Sopenharmony_ci    TEE_ALG_HMAC_SM3                     = 0x30000007,
2197777dab0Sopenharmony_ci    /** HMAC_SM3 */
2207777dab0Sopenharmony_ci    TEE_ALG_AES_ECB_PKCS5                = 0x10000020,
2217777dab0Sopenharmony_ci    /** AES_ECB_PKCS5 */
2227777dab0Sopenharmony_ci    TEE_ALG_AES_CBC_PKCS5                = 0x10000220,
2237777dab0Sopenharmony_ci    /** AES_CBC_PKCS5 */
2247777dab0Sopenharmony_ci    TEE_ALG_ECDSA_SHA1                   = 0x70001042,
2257777dab0Sopenharmony_ci    /** ECDSA_SHA1 */
2267777dab0Sopenharmony_ci    TEE_ALG_ECDSA_SHA224                 = 0x70002042,
2277777dab0Sopenharmony_ci    /** ECDSA_SHA224 */
2287777dab0Sopenharmony_ci    TEE_ALG_ECDSA_SHA256                 = 0x70003042,
2297777dab0Sopenharmony_ci    /** ECDSA_SHA256 */
2307777dab0Sopenharmony_ci    TEE_ALG_ECDSA_SHA384                 = 0x70004042,
2317777dab0Sopenharmony_ci    /** ECDSA_SHA384 */
2327777dab0Sopenharmony_ci    TEE_ALG_ECDSA_SHA512                 = 0x70005042,
2337777dab0Sopenharmony_ci    /** ECDSA_SHA512 */
2347777dab0Sopenharmony_ci    TEE_ALG_ED25519                      = 0x70005043,
2357777dab0Sopenharmony_ci    /** ED25519 */
2367777dab0Sopenharmony_ci    TEE_ALG_ECDH_DERIVE_SHARED_SECRET    = 0x80000042,
2377777dab0Sopenharmony_ci    /** ECDH_DERIVE_SHARED_SECRET */
2387777dab0Sopenharmony_ci    TEE_ALG_X25519                       = 0x80000044,
2397777dab0Sopenharmony_ci    /** X25519 */
2407777dab0Sopenharmony_ci    TEE_ALG_ECC                          = 0x80000001,
2417777dab0Sopenharmony_ci    /** ECC */
2427777dab0Sopenharmony_ci    TEE_ALG_ECDSA_P192                   = 0x70001042,
2437777dab0Sopenharmony_ci    /** ECDSA_P192 */
2447777dab0Sopenharmony_ci    TEE_ALG_ECDSA_P224                   = 0x70002042,
2457777dab0Sopenharmony_ci    /** ECDSA_P224 */
2467777dab0Sopenharmony_ci    TEE_ALG_ECDSA_P256                   = 0x70003042,
2477777dab0Sopenharmony_ci    /** ECDSA_P256 */
2487777dab0Sopenharmony_ci    TEE_ALG_ECDSA_P384                   = 0x70004042,
2497777dab0Sopenharmony_ci    /** ECDSA_P521 */
2507777dab0Sopenharmony_ci    TEE_ALG_ECDSA_P521                   = 0x70005042,
2517777dab0Sopenharmony_ci    /** ECDH_P192 */
2527777dab0Sopenharmony_ci    TEE_ALG_ECDH_P192                    = 0x80001042,
2537777dab0Sopenharmony_ci    /** ECDH_P224 */
2547777dab0Sopenharmony_ci    TEE_ALG_ECDH_P224                    = 0x80002042,
2557777dab0Sopenharmony_ci    /** ECDH_P256 */
2567777dab0Sopenharmony_ci    TEE_ALG_ECDH_P256                    = 0x80003042,
2577777dab0Sopenharmony_ci    /** ECDH_P384 */
2587777dab0Sopenharmony_ci    TEE_ALG_ECDH_P384                    = 0x80004042,
2597777dab0Sopenharmony_ci    /** ECDH_P521 */
2607777dab0Sopenharmony_ci    TEE_ALG_ECDH_P521                    = 0x80005042,
2617777dab0Sopenharmony_ci    /** SIP_HASH */
2627777dab0Sopenharmony_ci    TEE_ALG_SIP_HASH                     = 0xF0000002,
2637777dab0Sopenharmony_ci    /** SM2_DSA_SM3 */
2647777dab0Sopenharmony_ci    TEE_ALG_SM2_DSA_SM3                  = 0x70006045,
2657777dab0Sopenharmony_ci    /** SM2_PKE */
2667777dab0Sopenharmony_ci    TEE_ALG_SM2_PKE                      = 0x80000045,
2677777dab0Sopenharmony_ci    /** SM3 */
2687777dab0Sopenharmony_ci    TEE_ALG_SM3                          = 0x50000007,
2697777dab0Sopenharmony_ci    /** SM4_ECB_NOPAD */
2707777dab0Sopenharmony_ci    TEE_ALG_SM4_ECB_NOPAD                = 0x10000014,
2717777dab0Sopenharmony_ci    /** SM4_CBC_NOPAD */
2727777dab0Sopenharmony_ci    TEE_ALG_SM4_CBC_NOPAD                = 0x10000114,
2737777dab0Sopenharmony_ci    /** SM4_CBC_PKCS7 */
2747777dab0Sopenharmony_ci    TEE_ALG_SM4_CBC_PKCS7                = 0xF0000003,
2757777dab0Sopenharmony_ci    /** SM4_CTR */
2767777dab0Sopenharmony_ci    TEE_ALG_SM4_CTR                      = 0x10000214,
2777777dab0Sopenharmony_ci    /** SM4_CFB128 */
2787777dab0Sopenharmony_ci    TEE_ALG_SM4_CFB128                   = 0xF0000000,
2797777dab0Sopenharmony_ci    /** SM4_XTS */
2807777dab0Sopenharmony_ci    TEE_ALG_SM4_XTS                      = 0x10000414,
2817777dab0Sopenharmony_ci    /** SM4_OFB */
2827777dab0Sopenharmony_ci    TEE_ALG_SM4_OFB                      = 0x10000514,
2837777dab0Sopenharmony_ci    /** AES_OFB */
2847777dab0Sopenharmony_ci    TEE_ALG_AES_OFB                      = 0x10000510,
2857777dab0Sopenharmony_ci    /** SM4_GCM */
2867777dab0Sopenharmony_ci    TEE_ALG_SM4_GCM                      = 0xF0000005,
2877777dab0Sopenharmony_ci};
2887777dab0Sopenharmony_ci
2897777dab0Sopenharmony_ci/**
2907777dab0Sopenharmony_ci * @see __tee_crypto_algorithm_id
2917777dab0Sopenharmony_ci */
2927777dab0Sopenharmony_citypedef enum __tee_crypto_algorithm_id tee_crypto_algorithm_id;
2937777dab0Sopenharmony_ci/**
2947777dab0Sopenharmony_ci * @brief No element is available.
2957777dab0Sopenharmony_ci *
2967777dab0Sopenharmony_ci * @since 12
2977777dab0Sopenharmony_ci */
2987777dab0Sopenharmony_ci#define TEE_OPTIONAL_ELEMENT_NONE 0x00000000
2997777dab0Sopenharmony_ci
3007777dab0Sopenharmony_ci/**
3017777dab0Sopenharmony_ci * @brief Enumerates the Elliptic-Curve Cryptography (ECC) curves supported.
3027777dab0Sopenharmony_ci *
3037777dab0Sopenharmony_ci * @since 12
3047777dab0Sopenharmony_ci */
3057777dab0Sopenharmony_citypedef enum {
3067777dab0Sopenharmony_ci    /** CURVE_NIST_P192 */
3077777dab0Sopenharmony_ci    TEE_ECC_CURVE_NIST_P192 = 0x00000001,
3087777dab0Sopenharmony_ci    /** CURVE_NIST_P224 */
3097777dab0Sopenharmony_ci    TEE_ECC_CURVE_NIST_P224 = 0x00000002,
3107777dab0Sopenharmony_ci    /** CURVE_NIST_P256 */
3117777dab0Sopenharmony_ci    TEE_ECC_CURVE_NIST_P256 = 0x00000003,
3127777dab0Sopenharmony_ci    /** CURVE_NIST_P384 */
3137777dab0Sopenharmony_ci    TEE_ECC_CURVE_NIST_P384 = 0x00000004,
3147777dab0Sopenharmony_ci    /** CURVE_NIST_P521 */
3157777dab0Sopenharmony_ci    TEE_ECC_CURVE_NIST_P521 = 0x00000005,
3167777dab0Sopenharmony_ci    /** CURVE_SM2 256 bits */
3177777dab0Sopenharmony_ci    TEE_ECC_CURVE_SM2       = 0x00000300,
3187777dab0Sopenharmony_ci    /** CURVE_25519 256 bits */
3197777dab0Sopenharmony_ci    TEE_ECC_CURVE_25519     = 0x00000200,
3207777dab0Sopenharmony_ci} TEE_ECC_CURVE;
3217777dab0Sopenharmony_ci
3227777dab0Sopenharmony_ci/**
3237777dab0Sopenharmony_ci * @brief Enumerates the Mask Generation Function (MGF1) modes.
3247777dab0Sopenharmony_ci *
3257777dab0Sopenharmony_ci * @since 12
3267777dab0Sopenharmony_ci */
3277777dab0Sopenharmony_citypedef enum {
3287777dab0Sopenharmony_ci    TEE_DH_HASH_SHA1_mode   = 0,
3297777dab0Sopenharmony_ci    TEE_DH_HASH_SHA224_mode = 1,
3307777dab0Sopenharmony_ci    TEE_DH_HASH_SHA256_mode = 2,
3317777dab0Sopenharmony_ci    TEE_DH_HASH_SHA384_mode = 3,
3327777dab0Sopenharmony_ci    TEE_DH_HASH_SHA512_mode = 4,
3337777dab0Sopenharmony_ci    TEE_DH_HASH_NumOfModes,
3347777dab0Sopenharmony_ci} TEE_DH_HASH_Mode;
3357777dab0Sopenharmony_ci
3367777dab0Sopenharmony_ci/**
3377777dab0Sopenharmony_ci * @brief Enumerates the cryptographic operation modes.
3387777dab0Sopenharmony_ci *
3397777dab0Sopenharmony_ci * @since 12
3407777dab0Sopenharmony_ci */
3417777dab0Sopenharmony_cienum __TEE_OperationMode {
3427777dab0Sopenharmony_ci    /** Encryption */
3437777dab0Sopenharmony_ci    TEE_MODE_ENCRYPT = 0x0,
3447777dab0Sopenharmony_ci    /** Decryption */
3457777dab0Sopenharmony_ci    TEE_MODE_DECRYPT,
3467777dab0Sopenharmony_ci    /** Signing */
3477777dab0Sopenharmony_ci    TEE_MODE_SIGN,
3487777dab0Sopenharmony_ci    /** Signature verification */
3497777dab0Sopenharmony_ci    TEE_MODE_VERIFY,
3507777dab0Sopenharmony_ci    /** MAC */
3517777dab0Sopenharmony_ci    TEE_MODE_MAC,
3527777dab0Sopenharmony_ci    /** Digest */
3537777dab0Sopenharmony_ci    TEE_MODE_DIGEST,
3547777dab0Sopenharmony_ci    /** Key derivation */
3557777dab0Sopenharmony_ci    TEE_MODE_DERIVE
3567777dab0Sopenharmony_ci};
3577777dab0Sopenharmony_ci
3587777dab0Sopenharmony_ci/**
3597777dab0Sopenharmony_ci * @brief Enumerates the cryptographic operation states.
3607777dab0Sopenharmony_ci *
3617777dab0Sopenharmony_ci * @since 12
3627777dab0Sopenharmony_ci */
3637777dab0Sopenharmony_cienum tee_operation_state {
3647777dab0Sopenharmony_ci    /** Initial */
3657777dab0Sopenharmony_ci    TEE_OPERATION_STATE_INITIAL = 0x00000000,
3667777dab0Sopenharmony_ci    /** Active */
3677777dab0Sopenharmony_ci    TEE_OPERATION_STATE_ACTIVE  = 0x00000001,
3687777dab0Sopenharmony_ci};
3697777dab0Sopenharmony_ci
3707777dab0Sopenharmony_ci/**
3717777dab0Sopenharmony_ci * @see __TEE_OperationMode
3727777dab0Sopenharmony_ci */
3737777dab0Sopenharmony_citypedef uint32_t TEE_OperationMode;
3747777dab0Sopenharmony_ci
3757777dab0Sopenharmony_ci/**
3767777dab0Sopenharmony_ci * @brief Defines the operation information.
3777777dab0Sopenharmony_ci *
3787777dab0Sopenharmony_ci * @since 12
3797777dab0Sopenharmony_ci */
3807777dab0Sopenharmony_cistruct __TEE_OperationInfo {
3817777dab0Sopenharmony_ci    /** Algorithm ID */
3827777dab0Sopenharmony_ci    uint32_t algorithm;        /* #__TEE_CRYPTO_ALGORITHM_ID */
3837777dab0Sopenharmony_ci    /** Operation type */
3847777dab0Sopenharmony_ci    uint32_t operationClass;   /* #__TEE_Operation_Constants */
3857777dab0Sopenharmony_ci    /** Operation mode */
3867777dab0Sopenharmony_ci    uint32_t mode;             /* #__TEE_OperationMode */
3877777dab0Sopenharmony_ci    /** Digest length */
3887777dab0Sopenharmony_ci    uint32_t digestLength;
3897777dab0Sopenharmony_ci    /** Maximum key length */
3907777dab0Sopenharmony_ci    uint32_t maxKeySize;
3917777dab0Sopenharmony_ci    /** Key length*/
3927777dab0Sopenharmony_ci    uint32_t keySize;
3937777dab0Sopenharmony_ci    /** Required key usage */
3947777dab0Sopenharmony_ci    uint32_t requiredKeyUsage;
3957777dab0Sopenharmony_ci    /** Handle state */
3967777dab0Sopenharmony_ci    uint32_t handleState;
3977777dab0Sopenharmony_ci    /** Key */
3987777dab0Sopenharmony_ci    void *keyValue;
3997777dab0Sopenharmony_ci};
4007777dab0Sopenharmony_ci
4017777dab0Sopenharmony_ci/**
4027777dab0Sopenharmony_ci * @brief Defines the <b>__TEE_OperationInfo</b> struct.
4037777dab0Sopenharmony_ci *
4047777dab0Sopenharmony_ci * @see __TEE_OperationInfo
4057777dab0Sopenharmony_ci */
4067777dab0Sopenharmony_citypedef struct __TEE_OperationInfo TEE_OperationInfo;
4077777dab0Sopenharmony_ci
4087777dab0Sopenharmony_ci/**
4097777dab0Sopenharmony_ci * @brief Defines the key information stored in the <b>OperationInfo</b>.
4107777dab0Sopenharmony_ci *
4117777dab0Sopenharmony_ci * @since 12
4127777dab0Sopenharmony_ci */
4137777dab0Sopenharmony_citypedef struct {
4147777dab0Sopenharmony_ci    /** Key length */
4157777dab0Sopenharmony_ci    uint32_t keySize;
4167777dab0Sopenharmony_ci    /** Required key usage */
4177777dab0Sopenharmony_ci    uint32_t requiredKeyUsage;
4187777dab0Sopenharmony_ci} TEE_OperationInfoKey;
4197777dab0Sopenharmony_ci
4207777dab0Sopenharmony_ci/**
4217777dab0Sopenharmony_ci * @brief Defines information about an operation.
4227777dab0Sopenharmony_ci *
4237777dab0Sopenharmony_ci * @since 12
4247777dab0Sopenharmony_ci */
4257777dab0Sopenharmony_citypedef struct {
4267777dab0Sopenharmony_ci    /** Algorithm ID */
4277777dab0Sopenharmony_ci    uint32_t algorithm;
4287777dab0Sopenharmony_ci    /** Operation type */
4297777dab0Sopenharmony_ci    uint32_t operationClass;
4307777dab0Sopenharmony_ci    /** Operation mode */
4317777dab0Sopenharmony_ci    uint32_t mode;
4327777dab0Sopenharmony_ci    /** Digest length */
4337777dab0Sopenharmony_ci    uint32_t digestLength;
4347777dab0Sopenharmony_ci    /** Maximum key length */
4357777dab0Sopenharmony_ci    uint32_t maxKeySize;
4367777dab0Sopenharmony_ci    /** Handle state */
4377777dab0Sopenharmony_ci    uint32_t handleState;
4387777dab0Sopenharmony_ci    /** Operation state */
4397777dab0Sopenharmony_ci    uint32_t operationState;
4407777dab0Sopenharmony_ci    /** Number of keys */
4417777dab0Sopenharmony_ci    uint32_t numberOfKeys;
4427777dab0Sopenharmony_ci    /** Key information */
4437777dab0Sopenharmony_ci    TEE_OperationInfoKey keyInformation[];
4447777dab0Sopenharmony_ci} TEE_OperationInfoMultiple;
4457777dab0Sopenharmony_ci
4467777dab0Sopenharmony_ci/**
4477777dab0Sopenharmony_ci * @brief Defines the cryptographic operation handle.
4487777dab0Sopenharmony_ci *
4497777dab0Sopenharmony_ci * @since 12
4507777dab0Sopenharmony_ci */
4517777dab0Sopenharmony_cistruct __TEE_OperationHandle {
4527777dab0Sopenharmony_ci    /** Algorithm ID */
4537777dab0Sopenharmony_ci    uint32_t algorithm;
4547777dab0Sopenharmony_ci    /** Operation type */
4557777dab0Sopenharmony_ci    uint32_t operationClass;
4567777dab0Sopenharmony_ci    /** Operation mode */
4577777dab0Sopenharmony_ci    uint32_t mode;
4587777dab0Sopenharmony_ci    /** Digest length */
4597777dab0Sopenharmony_ci    uint32_t digestLength;
4607777dab0Sopenharmony_ci    /** Maximum key length */
4617777dab0Sopenharmony_ci    uint32_t maxKeySize;
4627777dab0Sopenharmony_ci    /** Key length */
4637777dab0Sopenharmony_ci    uint32_t keySize;
4647777dab0Sopenharmony_ci    /** Key length */
4657777dab0Sopenharmony_ci    uint32_t keySize2;
4667777dab0Sopenharmony_ci    /** Required key usage */
4677777dab0Sopenharmony_ci    uint32_t requiredKeyUsage;
4687777dab0Sopenharmony_ci    /** Handle state */
4697777dab0Sopenharmony_ci    uint32_t handleState;
4707777dab0Sopenharmony_ci    /** Key */
4717777dab0Sopenharmony_ci    void *keyValue;
4727777dab0Sopenharmony_ci    /** Key */
4737777dab0Sopenharmony_ci    void *keyValue2;
4747777dab0Sopenharmony_ci    /** */
4757777dab0Sopenharmony_ci    void *crypto_ctxt;
4767777dab0Sopenharmony_ci    /** */
4777777dab0Sopenharmony_ci    void *hmac_rest_ctext;
4787777dab0Sopenharmony_ci    /** iv */
4797777dab0Sopenharmony_ci    void *IV;
4807777dab0Sopenharmony_ci    /** Public key */
4817777dab0Sopenharmony_ci    void *publicKey;
4827777dab0Sopenharmony_ci    /** Length of the public key */
4837777dab0Sopenharmony_ci    uint32_t publicKeyLen;
4847777dab0Sopenharmony_ci    /** Private key */
4857777dab0Sopenharmony_ci    void *privateKey;
4867777dab0Sopenharmony_ci    /** Length of the private key */
4877777dab0Sopenharmony_ci    uint32_t privateKeyLen;
4887777dab0Sopenharmony_ci    /** Length of the IV */
4897777dab0Sopenharmony_ci    uint32_t IVLen;
4907777dab0Sopenharmony_ci    /** Operation lock */
4917777dab0Sopenharmony_ci    pthread_mutex_t operation_lock;
4927777dab0Sopenharmony_ci    /** HAL information */
4937777dab0Sopenharmony_ci    void *hal_info;
4947777dab0Sopenharmony_ci};
4957777dab0Sopenharmony_ci
4967777dab0Sopenharmony_ci/**
4977777dab0Sopenharmony_ci * @brief Defines the data used for conversion of integers.
4987777dab0Sopenharmony_ci *
4997777dab0Sopenharmony_ci * @since 12
5007777dab0Sopenharmony_ci */
5017777dab0Sopenharmony_citypedef struct {
5027777dab0Sopenharmony_ci    /** Source */
5037777dab0Sopenharmony_ci    uint32_t src;
5047777dab0Sopenharmony_ci    /** Destination */
5057777dab0Sopenharmony_ci    uint32_t dest;
5067777dab0Sopenharmony_ci} crypto_uint2uint;
5077777dab0Sopenharmony_ci
5087777dab0Sopenharmony_ci/**
5097777dab0Sopenharmony_ci * @brief Defines the maximum length of an RSA public key.
5107777dab0Sopenharmony_ci *
5117777dab0Sopenharmony_ci * @since 12
5127777dab0Sopenharmony_ci */
5137777dab0Sopenharmony_ci#define RSA_PUBKEY_MAXSIZE sizeof(CRYS_RSAUserPubKey_t)
5147777dab0Sopenharmony_ci/**
5157777dab0Sopenharmony_ci * @brief Defines the maximum length of an RES private key.
5167777dab0Sopenharmony_ci *
5177777dab0Sopenharmony_ci * @since 12
5187777dab0Sopenharmony_ci */
5197777dab0Sopenharmony_ci#define RSA_PRIVKEY_MAXSIZE sizeof(CRYS_RSAUserPrivKey_t)
5207777dab0Sopenharmony_ci
5217777dab0Sopenharmony_ci/**
5227777dab0Sopenharmony_ci * @brief Defines a structure to hold the input and output data.
5237777dab0Sopenharmony_ci *
5247777dab0Sopenharmony_ci * @since 12
5257777dab0Sopenharmony_ci */
5267777dab0Sopenharmony_citypedef struct {
5277777dab0Sopenharmony_ci    /** Source data */
5287777dab0Sopenharmony_ci    void *src_data;
5297777dab0Sopenharmony_ci    /** Length of the source data */
5307777dab0Sopenharmony_ci    size_t src_len;
5317777dab0Sopenharmony_ci    /** Destination data */
5327777dab0Sopenharmony_ci    void *dest_data;
5337777dab0Sopenharmony_ci    /** Length of the destination data */
5347777dab0Sopenharmony_ci    size_t *dest_len;
5357777dab0Sopenharmony_ci} operation_src_dest;
5367777dab0Sopenharmony_ci
5377777dab0Sopenharmony_ci/**
5387777dab0Sopenharmony_ci * @brief Defines the AE initialization data.
5397777dab0Sopenharmony_ci *
5407777dab0Sopenharmony_ci * @since 12
5417777dab0Sopenharmony_ci */
5427777dab0Sopenharmony_citypedef struct {
5437777dab0Sopenharmony_ci    /** nonce */
5447777dab0Sopenharmony_ci    void *nonce;
5457777dab0Sopenharmony_ci    /** Leng of nonce */
5467777dab0Sopenharmony_ci    size_t nonce_len;
5477777dab0Sopenharmony_ci    /** Length of the tag */
5487777dab0Sopenharmony_ci    uint32_t tag_len;
5497777dab0Sopenharmony_ci    /** Length of the additional authenticated data (AAD) */
5507777dab0Sopenharmony_ci    size_t aad_len;
5517777dab0Sopenharmony_ci    /** Length of the payload */
5527777dab0Sopenharmony_ci    size_t payload_len;
5537777dab0Sopenharmony_ci} operation_ae_init;
5547777dab0Sopenharmony_ci
5557777dab0Sopenharmony_ci/**
5567777dab0Sopenharmony_ci * @brief Defines the pointer to <b>__TEE_OperationHandle</b>.
5577777dab0Sopenharmony_ci *
5587777dab0Sopenharmony_ci * @see __TEE_OperationHandle
5597777dab0Sopenharmony_ci *
5607777dab0Sopenharmony_ci * @since 12
5617777dab0Sopenharmony_ci */
5627777dab0Sopenharmony_citypedef struct __TEE_OperationHandle *TEE_OperationHandle;
5637777dab0Sopenharmony_ci
5647777dab0Sopenharmony_ci/**
5657777dab0Sopenharmony_ci * @brief Defines the <b>__TEE_OperationHandle</b> struct.
5667777dab0Sopenharmony_ci *
5677777dab0Sopenharmony_ci * @see __TEE_OperationHandle
5687777dab0Sopenharmony_ci *
5697777dab0Sopenharmony_ci * @since 12
5707777dab0Sopenharmony_ci */
5717777dab0Sopenharmony_citypedef struct __TEE_OperationHandle TEE_OperationHandleVar;
5727777dab0Sopenharmony_ci
5737777dab0Sopenharmony_ci/**
5747777dab0Sopenharmony_ci * @brief Defines the <b>__TEE_ObjectHandle</b> struct.
5757777dab0Sopenharmony_ci *
5767777dab0Sopenharmony_ci * @since 12
5777777dab0Sopenharmony_ci */
5787777dab0Sopenharmony_citypedef struct __TEE_ObjectHandle TEE_ObjectHandleVar;
5797777dab0Sopenharmony_ci
5807777dab0Sopenharmony_ci/**
5817777dab0Sopenharmony_ci * @brief Allocates an operation handle.
5827777dab0Sopenharmony_ci *
5837777dab0Sopenharmony_ci * @param operation Indicates the pointer to the operation handle.
5847777dab0Sopenharmony_ci * @param algorithm Indicates the cipher algorithm.
5857777dab0Sopenharmony_ci * @param mode Indicates the operation mode.
5867777dab0Sopenharmony_ci * @param maxKeySize Indicates the maximum length of the key.
5877777dab0Sopenharmony_ci *
5887777dab0Sopenharmony_ci * @return Returns <b>TEE_SUCCESS</b> if the operation handle is allocated.
5897777dab0Sopenharmony_ci *         Returns <b>TEE_ERROR_OUT_OF_MEMORY</b> if there is no enough memory for this operation.
5907777dab0Sopenharmony_ci *         Returns <b>TEE_ERROR_NOT_SUPPORTED</b> if the specified algorithm is not supported.
5917777dab0Sopenharmony_ci *         Returns <b>TEE_ERROR_GENERIC</b> if the operation fails due to other errors.
5927777dab0Sopenharmony_ci *
5937777dab0Sopenharmony_ci * @since 12
5947777dab0Sopenharmony_ci * @version 1.0
5957777dab0Sopenharmony_ci */
5967777dab0Sopenharmony_ciTEE_Result TEE_AllocateOperation(TEE_OperationHandle *operation, uint32_t algorithm, uint32_t mode,
5977777dab0Sopenharmony_ci                                 uint32_t maxKeySize);
5987777dab0Sopenharmony_ci
5997777dab0Sopenharmony_ci/**
6007777dab0Sopenharmony_ci * @brief Releases an operation handle.
6017777dab0Sopenharmony_ci *
6027777dab0Sopenharmony_ci * @param operation Indicates the operation handle to release.
6037777dab0Sopenharmony_ci *
6047777dab0Sopenharmony_ci * @since 12
6057777dab0Sopenharmony_ci * @version 1.0
6067777dab0Sopenharmony_ci */
6077777dab0Sopenharmony_civoid TEE_FreeOperation(TEE_OperationHandle operation);
6087777dab0Sopenharmony_ci
6097777dab0Sopenharmony_ci/**
6107777dab0Sopenharmony_ci * @brief Obtains operation information.
6117777dab0Sopenharmony_ci *
6127777dab0Sopenharmony_ci * @param operation Indicates the operation handle.
6137777dab0Sopenharmony_ci * @param operationInfo Indicates the pointer to the operation information.
6147777dab0Sopenharmony_ci *
6157777dab0Sopenharmony_ci * @since 12
6167777dab0Sopenharmony_ci * @version 1.0
6177777dab0Sopenharmony_ci */
6187777dab0Sopenharmony_civoid TEE_GetOperationInfo(const TEE_OperationHandle operation, TEE_OperationInfo *operationInfo);
6197777dab0Sopenharmony_ci
6207777dab0Sopenharmony_ci/**
6217777dab0Sopenharmony_ci * @brief Resets an operation handle.
6227777dab0Sopenharmony_ci *
6237777dab0Sopenharmony_ci * @param operation Indicates the operation handle to reset.
6247777dab0Sopenharmony_ci *
6257777dab0Sopenharmony_ci * @since 12
6267777dab0Sopenharmony_ci * @version 1.0
6277777dab0Sopenharmony_ci */
6287777dab0Sopenharmony_civoid TEE_ResetOperation(TEE_OperationHandle operation);
6297777dab0Sopenharmony_ci
6307777dab0Sopenharmony_ci/**
6317777dab0Sopenharmony_ci * @brief Sets the key for an operation.
6327777dab0Sopenharmony_ci *
6337777dab0Sopenharmony_ci * @param operation Indicates the operation handle.
6347777dab0Sopenharmony_ci * @param key Indicates the key.
6357777dab0Sopenharmony_ci *
6367777dab0Sopenharmony_ci * @return Returns <b>TEE_SUCCESS</b> if the operation is successful.
6377777dab0Sopenharmony_ci *         Returns <b>TEE_ERROR_BAD_PARAMETERS</b> if the operation fails due to invalid parameters.
6387777dab0Sopenharmony_ci *         Returns <b>TEE_ERROR_OUT_OF_MEMORY</b> if there is no enough memory for this operation.
6397777dab0Sopenharmony_ci *
6407777dab0Sopenharmony_ci * @since 12
6417777dab0Sopenharmony_ci * @version 1.0
6427777dab0Sopenharmony_ci */
6437777dab0Sopenharmony_ciTEE_Result TEE_SetOperationKey(TEE_OperationHandle operation, const TEE_ObjectHandle key);
6447777dab0Sopenharmony_ci
6457777dab0Sopenharmony_ci/**
6467777dab0Sopenharmony_ci * @brief Sets two keys for an operation.
6477777dab0Sopenharmony_ci *
6487777dab0Sopenharmony_ci * @param operation Indicates the operation handle.
6497777dab0Sopenharmony_ci * @param key1 Indicates key 1.
6507777dab0Sopenharmony_ci * @param key2 Indicates key 2.
6517777dab0Sopenharmony_ci *
6527777dab0Sopenharmony_ci * @return Returns <b>TEE_SUCCESS</b> if the operation is successful.
6537777dab0Sopenharmony_ci *         Returns <b>TEE_ERROR_BAD_PARAMETERS</b> if the operation fails due to invalid parameters.
6547777dab0Sopenharmony_ci *
6557777dab0Sopenharmony_ci * @since 12
6567777dab0Sopenharmony_ci * @version 1.0
6577777dab0Sopenharmony_ci */
6587777dab0Sopenharmony_ciTEE_Result TEE_SetOperationKey2(TEE_OperationHandle operation, const TEE_ObjectHandle key1,
6597777dab0Sopenharmony_ci                                const TEE_ObjectHandle key2);
6607777dab0Sopenharmony_ci
6617777dab0Sopenharmony_ci/**
6627777dab0Sopenharmony_ci * @brief Copies an operation handle.
6637777dab0Sopenharmony_ci *
6647777dab0Sopenharmony_ci * @param dstOperation Indicates the destination operation handle.
6657777dab0Sopenharmony_ci * @param srcOperation Indicates the source operation handle.
6667777dab0Sopenharmony_ci *
6677777dab0Sopenharmony_ci * @since 12
6687777dab0Sopenharmony_ci * @version 1.0
6697777dab0Sopenharmony_ci */
6707777dab0Sopenharmony_civoid TEE_CopyOperation(TEE_OperationHandle dstOperation, const TEE_OperationHandle srcOperation);
6717777dab0Sopenharmony_ci
6727777dab0Sopenharmony_ci/**
6737777dab0Sopenharmony_ci * @brief Initializes the context to start a cipher operation.
6747777dab0Sopenharmony_ci *
6757777dab0Sopenharmony_ci * @param operation Indicates the operation handle.
6767777dab0Sopenharmony_ci * @param IV Indicates the pointer to the buffer storing the operation IV. If this parameter is not used,
6777777dab0Sopenharmony_ci * set it to <b>NULL</b>.
6787777dab0Sopenharmony_ci * @param IVLen Indicates the length of the IV buffer.
6797777dab0Sopenharmony_ci *
6807777dab0Sopenharmony_ci * @since 12
6817777dab0Sopenharmony_ci * @version 1.0
6827777dab0Sopenharmony_ci */
6837777dab0Sopenharmony_civoid TEE_CipherInit(TEE_OperationHandle operation, const void *IV, size_t IVLen);
6847777dab0Sopenharmony_ci
6857777dab0Sopenharmony_ci/**
6867777dab0Sopenharmony_ci * @brief Updates the data for a cipher operation.
6877777dab0Sopenharmony_ci *
6887777dab0Sopenharmony_ci * @param operation Indicates the operation handle.
6897777dab0Sopenharmony_ci * @param srcData Indicates the pointer to the source data.
6907777dab0Sopenharmony_ci * @param srcLen Indicates the length of the source data.
6917777dab0Sopenharmony_ci * @param destData Indicates the pointer to the destination data.
6927777dab0Sopenharmony_ci * @param destLen Indicates the pointer to the destination data length.
6937777dab0Sopenharmony_ci *
6947777dab0Sopenharmony_ci * @return Returns <b>TEE_SUCCESS</b> if the operation is successful.
6957777dab0Sopenharmony_ci *         Returns <b>TEE_ERROR_BAD_PARAMETERS</b> if the operation fails due to invalid parameters.
6967777dab0Sopenharmony_ci *         Returns <b>TEE_ERROR_GENERIC</b> if the operation fails due to other errors.
6977777dab0Sopenharmony_ci *
6987777dab0Sopenharmony_ci * @since 12
6997777dab0Sopenharmony_ci * @version 1.0
7007777dab0Sopenharmony_ci */
7017777dab0Sopenharmony_ciTEE_Result TEE_CipherUpdate(TEE_OperationHandle operation, const void *srcData, size_t srcLen, void *destData,
7027777dab0Sopenharmony_ci                            size_t *destLen);
7037777dab0Sopenharmony_ci
7047777dab0Sopenharmony_ci/**
7057777dab0Sopenharmony_ci * @brief Finalizes a cipher operation.
7067777dab0Sopenharmony_ci *
7077777dab0Sopenharmony_ci * @param operation Indicates the operation handle.
7087777dab0Sopenharmony_ci * @param srcData Indicates the pointer to the source data.
7097777dab0Sopenharmony_ci * @param srcLen Indicates the length of the source data.
7107777dab0Sopenharmony_ci * @param destData Indicates the pointer to the destination data.
7117777dab0Sopenharmony_ci * @param destLen Indicates the pointer to the destination data length.
7127777dab0Sopenharmony_ci *
7137777dab0Sopenharmony_ci * @return Returns <b>TEE_SUCCESS</b> if the operation is successful.
7147777dab0Sopenharmony_ci *         Returns <b>TEE_ERROR_BAD_PARAMETERS</b> if the operation fails due to invalid parameters.
7157777dab0Sopenharmony_ci *         Returns <b>TEE_ERROR_GENERIC</b> if the operation fails due to other errors.
7167777dab0Sopenharmony_ci *
7177777dab0Sopenharmony_ci * @since 12
7187777dab0Sopenharmony_ci * @version 1.0
7197777dab0Sopenharmony_ci */
7207777dab0Sopenharmony_ciTEE_Result TEE_CipherDoFinal(TEE_OperationHandle operation, const void *srcData, size_t srcLen, void *destData,
7217777dab0Sopenharmony_ci                             size_t *destLen);
7227777dab0Sopenharmony_ci
7237777dab0Sopenharmony_ci/**
7247777dab0Sopenharmony_ci * @brief Updates the digest.
7257777dab0Sopenharmony_ci *
7267777dab0Sopenharmony_ci * @param operation Indicates the operation handle.
7277777dab0Sopenharmony_ci * @param chunk Indicates the pointer to the chunk of data to be hashed.
7287777dab0Sopenharmony_ci * @param chunkSize Indicates the length of the chunk.
7297777dab0Sopenharmony_ci *
7307777dab0Sopenharmony_ci * @since 12
7317777dab0Sopenharmony_ci * @version 1.0
7327777dab0Sopenharmony_ci */
7337777dab0Sopenharmony_civoid TEE_DigestUpdate(TEE_OperationHandle operation, const void *chunk, size_t chunkSize);
7347777dab0Sopenharmony_ci
7357777dab0Sopenharmony_ci/**
7367777dab0Sopenharmony_ci * @brief Finalizes the message digest operation.
7377777dab0Sopenharmony_ci *
7387777dab0Sopenharmony_ci * @param operation Indicates the operation handle.
7397777dab0Sopenharmony_ci * @param chunk Indicates the pointer to the chunk of data to be hashed.
7407777dab0Sopenharmony_ci * @param chunkLen Indicates the length of the chunk.
7417777dab0Sopenharmony_ci * @param hash Indicates the pointer to the buffer storing the message hash.
7427777dab0Sopenharmony_ci * @param hashLen
7437777dab0Sopenharmony_ci *
7447777dab0Sopenharmony_ci * @since 12
7457777dab0Sopenharmony_ci * @version 1.0
7467777dab0Sopenharmony_ci */
7477777dab0Sopenharmony_ciTEE_Result TEE_DigestDoFinal(TEE_OperationHandle operation, const void *chunk, size_t chunkLen, void *hash,
7487777dab0Sopenharmony_ci                             size_t *hashLen);
7497777dab0Sopenharmony_ci
7507777dab0Sopenharmony_ci/**
7517777dab0Sopenharmony_ci * @brief Initializes a MAC operation.
7527777dab0Sopenharmony_ci *
7537777dab0Sopenharmony_ci * @param operation Indicates the operation handle.
7547777dab0Sopenharmony_ci * @param IV Indicates the pointer to the buffer storing the operation IV. If this parameter is not used,
7557777dab0Sopenharmony_ci * set it to <b>NULL</b>.
7567777dab0Sopenharmony_ci * @param IVLen Indicates the length of the IV buffer.
7577777dab0Sopenharmony_ci *
7587777dab0Sopenharmony_ci * @since 12
7597777dab0Sopenharmony_ci * @version 1.0
7607777dab0Sopenharmony_ci */
7617777dab0Sopenharmony_civoid TEE_MACInit(TEE_OperationHandle operation, void *IV, size_t IVLen);
7627777dab0Sopenharmony_ci
7637777dab0Sopenharmony_ci/**
7647777dab0Sopenharmony_ci * @brief Updates the MAC.
7657777dab0Sopenharmony_ci *
7667777dab0Sopenharmony_ci * @param operation Indicates the operation handle.
7677777dab0Sopenharmony_ci * @param chunk Indicates the pointer to the chunk of MAC data.
7687777dab0Sopenharmony_ci * @param chunkSize Indicates the size of the chunk.
7697777dab0Sopenharmony_ci *
7707777dab0Sopenharmony_ci * @since 12
7717777dab0Sopenharmony_ci * @version 1.0
7727777dab0Sopenharmony_ci */
7737777dab0Sopenharmony_civoid TEE_MACUpdate(TEE_OperationHandle operation, const void *chunk, size_t chunkSize);
7747777dab0Sopenharmony_ci
7757777dab0Sopenharmony_ci/**
7767777dab0Sopenharmony_ci * @brief MAC Finalizes the MAC operation with a last chunk of message and computes the MAC.
7777777dab0Sopenharmony_ci *
7787777dab0Sopenharmony_ci * @param operation Indicates the operation handle.
7797777dab0Sopenharmony_ci * @param message Indicates the pointer to the buffer containing the last message chunk to MAC.
7807777dab0Sopenharmony_ci * @param messageLen Indicates the length of the message buffer.
7817777dab0Sopenharmony_ci * @param mac Indicates the pointer to the buffer storing the computed MAC.
7827777dab0Sopenharmony_ci * @param macLen Indicates the pointer to the MAC buffer length.
7837777dab0Sopenharmony_ci *
7847777dab0Sopenharmony_ci * @return Returns <b>TEE_SUCCESS</b> if the operation is successful.
7857777dab0Sopenharmony_ci *         Returns <b>TEE_ERROR_GENERIC</b> if the operation fails due to other errors.
7867777dab0Sopenharmony_ci *
7877777dab0Sopenharmony_ci * @since 12
7887777dab0Sopenharmony_ci * @version 1.0
7897777dab0Sopenharmony_ci */
7907777dab0Sopenharmony_ciTEE_Result TEE_MACComputeFinal(TEE_OperationHandle operation, const void *message, size_t messageLen, void *mac,
7917777dab0Sopenharmony_ci                               size_t *macLen);
7927777dab0Sopenharmony_ci
7937777dab0Sopenharmony_ci/**
7947777dab0Sopenharmony_ci * @brief Finalizes the MAC operation and compares the MAC with the one passed in.
7957777dab0Sopenharmony_ci *
7967777dab0Sopenharmony_ci * @param operation Indicates the operation handle.
7977777dab0Sopenharmony_ci * @param message Indicates the pointer to the buffer containing the last message chunk to MAC.
7987777dab0Sopenharmony_ci * @param messageLen Indicates the length of the buffer.
7997777dab0Sopenharmony_ci * @param mac Indicates the pointer to the buffer storing the computed MAC.
8007777dab0Sopenharmony_ci * @param macLen Indicates the MAC buffer length.
8017777dab0Sopenharmony_ci *
8027777dab0Sopenharmony_ci * @return Returns <b>TEE_SUCCESS</b> if the operation is successful.
8037777dab0Sopenharmony_ci *         Returns <b>TEE_ERROR_GENERIC</b> if the operation fails due to other errors.
8047777dab0Sopenharmony_ci *         Returns <b>TEE_ERROR_MAC_INVALID</b> if the computed MAC is not the same as that passed in.
8057777dab0Sopenharmony_ci *
8067777dab0Sopenharmony_ci * @since 12
8077777dab0Sopenharmony_ci * @version 1.0
8087777dab0Sopenharmony_ci */
8097777dab0Sopenharmony_ciTEE_Result TEE_MACCompareFinal(TEE_OperationHandle operation, const void *message, size_t messageLen, const void *mac,
8107777dab0Sopenharmony_ci                               const size_t macLen);
8117777dab0Sopenharmony_ci
8127777dab0Sopenharmony_ci/**
8137777dab0Sopenharmony_ci * @brief Derives a key.
8147777dab0Sopenharmony_ci *
8157777dab0Sopenharmony_ci * @param operation Indicates the operation handle.
8167777dab0Sopenharmony_ci * @param params Indicates the pointer to the parameters for this operation.
8177777dab0Sopenharmony_ci * @param paramCount Indicates the number of parameters.
8187777dab0Sopenharmony_ci * @param derivedKey Indicates the derived key.
8197777dab0Sopenharmony_ci *
8207777dab0Sopenharmony_ci * @since 12
8217777dab0Sopenharmony_ci * @version 1.0
8227777dab0Sopenharmony_ci */
8237777dab0Sopenharmony_civoid TEE_DeriveKey(TEE_OperationHandle operation, const TEE_Attribute *params, uint32_t paramCount,
8247777dab0Sopenharmony_ci                   TEE_ObjectHandle derivedKey);
8257777dab0Sopenharmony_ci
8267777dab0Sopenharmony_ci/**
8277777dab0Sopenharmony_ci * @brief Generates random data.
8287777dab0Sopenharmony_ci *
8297777dab0Sopenharmony_ci * @param randomBuffer Indicates the pointer to the buffer storing the random data generated.
8307777dab0Sopenharmony_ci * @param randomBufferLen Indicates the length of the buffer storing the random data.
8317777dab0Sopenharmony_ci *
8327777dab0Sopenharmony_ci * @since 12
8337777dab0Sopenharmony_ci * @version 1.0
8347777dab0Sopenharmony_ci */
8357777dab0Sopenharmony_civoid TEE_GenerateRandom(void *randomBuffer, size_t randomBufferLen);
8367777dab0Sopenharmony_ci
8377777dab0Sopenharmony_ci/**
8387777dab0Sopenharmony_ci * @brief Initializes an AE operation.
8397777dab0Sopenharmony_ci *
8407777dab0Sopenharmony_ci * @param operation Indicates the operation handle.
8417777dab0Sopenharmony_ci * @param nonce Indicates the pointer to the buffer for storing the nonce.
8427777dab0Sopenharmony_ci * @param nonceLen Indicates the length of the nonce.
8437777dab0Sopenharmony_ci * @param tagLen Indicates the length of the tag.
8447777dab0Sopenharmony_ci * @param AADLen Indicates the length of the AAD.
8457777dab0Sopenharmony_ci * @param payloadLen Indicates the length of the payload.
8467777dab0Sopenharmony_ci *
8477777dab0Sopenharmony_ci * @return Returns <b>TEE_SUCCESS</b> if the operation is successful.
8487777dab0Sopenharmony_ci *         Returns <b>TEE_ERROR_GENERIC</b> if the operation fails due to other errors.
8497777dab0Sopenharmony_ci *
8507777dab0Sopenharmony_ci * @since 12
8517777dab0Sopenharmony_ci * @version 1.0
8527777dab0Sopenharmony_ci */
8537777dab0Sopenharmony_ciTEE_Result TEE_AEInit(TEE_OperationHandle operation, void *nonce, size_t nonceLen, uint32_t tagLen, size_t AADLen,
8547777dab0Sopenharmony_ci                      size_t payloadLen);
8557777dab0Sopenharmony_ci
8567777dab0Sopenharmony_ci/**
8577777dab0Sopenharmony_ci * @brief Updates the AAD in an AE operation.
8587777dab0Sopenharmony_ci *
8597777dab0Sopenharmony_ci * @param operation Indicates the operation handle.
8607777dab0Sopenharmony_ci * @param AADdata Indicates the pointer to the new AAD.
8617777dab0Sopenharmony_ci * @param AADdataLen Indicates the length of the new AAD.
8627777dab0Sopenharmony_ci *
8637777dab0Sopenharmony_ci * @since 12
8647777dab0Sopenharmony_ci * @version 1.0
8657777dab0Sopenharmony_ci */
8667777dab0Sopenharmony_civoid TEE_AEUpdateAAD(TEE_OperationHandle operation, const void *AADdata, size_t AADdataLen);
8677777dab0Sopenharmony_ci
8687777dab0Sopenharmony_ci/**
8697777dab0Sopenharmony_ci * @brief Updates data for an AE operation.
8707777dab0Sopenharmony_ci *
8717777dab0Sopenharmony_ci * @param operation Indicates the operation handle.
8727777dab0Sopenharmony_ci * @param srcData Indicates the pointer to the source data.
8737777dab0Sopenharmony_ci * @param srcLen Indicates the length of the source data.
8747777dab0Sopenharmony_ci * @param destData Indicates the pointer to the destination data.
8757777dab0Sopenharmony_ci * @param destLen Indicates the pointer to the destination data length.
8767777dab0Sopenharmony_ci *
8777777dab0Sopenharmony_ci * @return Returns <b>TEE_SUCCESS</b> if the operation is successful.
8787777dab0Sopenharmony_ci *         Returns <b>TEE_ERROR_GENERIC</b> if the operation fails due to other errors.
8797777dab0Sopenharmony_ci *
8807777dab0Sopenharmony_ci * @since 12
8817777dab0Sopenharmony_ci * @version 1.0
8827777dab0Sopenharmony_ci */
8837777dab0Sopenharmony_ciTEE_Result TEE_AEUpdate(TEE_OperationHandle operation, void *srcData, size_t srcLen, void *destData, size_t *destLen);
8847777dab0Sopenharmony_ci
8857777dab0Sopenharmony_ci/**
8867777dab0Sopenharmony_ci * @brief Finalizes the AE encryption operation.
8877777dab0Sopenharmony_ci *
8887777dab0Sopenharmony_ci * @param operation Indicates the operation handle.
8897777dab0Sopenharmony_ci * @param srcData Indicates the pointer to the source data.
8907777dab0Sopenharmony_ci * @param srcLen Indicates the length of the source data.
8917777dab0Sopenharmony_ci * @param destData Indicates the pointer to the destination data.
8927777dab0Sopenharmony_ci * @param destLen Indicates the pointer to the destination data length.
8937777dab0Sopenharmony_ci * @param tag Indicates the pointer to the buffer storing the computed tag.
8947777dab0Sopenharmony_ci * @param tagLen Indicates the pointer to the tag buffer length.
8957777dab0Sopenharmony_ci *
8967777dab0Sopenharmony_ci * @return Returns <b>TEE_SUCCESS</b> if the operation is successful.
8977777dab0Sopenharmony_ci *         Returns <b>TEE_ERROR_GENERIC</b> if the operation fails due to other errors.
8987777dab0Sopenharmony_ci *
8997777dab0Sopenharmony_ci * @since 12
9007777dab0Sopenharmony_ci * @version 1.0
9017777dab0Sopenharmony_ci */
9027777dab0Sopenharmony_ciTEE_Result TEE_AEEncryptFinal(TEE_OperationHandle operation, void *srcData, size_t srcLen, void *destData,
9037777dab0Sopenharmony_ci                              size_t *destLen, void *tag, size_t *tagLen);
9047777dab0Sopenharmony_ci
9057777dab0Sopenharmony_ci/**
9067777dab0Sopenharmony_ci * @brief Finalizes an AE decryption operation.
9077777dab0Sopenharmony_ci *
9087777dab0Sopenharmony_ci * @param operation Indicates the operation handle.
9097777dab0Sopenharmony_ci * @param srcData Indicates the pointer to the source data.
9107777dab0Sopenharmony_ci * @param srcLen Indicates the length of the source data.
9117777dab0Sopenharmony_ci * @param destData Indicates the pointer to the destination data.
9127777dab0Sopenharmony_ci * @param destLen Indicates the pointer to the destination data length.
9137777dab0Sopenharmony_ci * @param tag Indicates the pointer to the buffer storing the computed tag.
9147777dab0Sopenharmony_ci * @param tagLen Indicates the tag buffer length.
9157777dab0Sopenharmony_ci *
9167777dab0Sopenharmony_ci * @return Returns <b>TEE_SUCCESS</b> if the operation is successful.
9177777dab0Sopenharmony_ci *         Returns <b>TEE_ERROR_MAC_INVALID</b> if the computed tag does not match the provided tag.
9187777dab0Sopenharmony_ci *
9197777dab0Sopenharmony_ci * @since 12
9207777dab0Sopenharmony_ci * @version 1.0
9217777dab0Sopenharmony_ci */
9227777dab0Sopenharmony_ciTEE_Result TEE_AEDecryptFinal(TEE_OperationHandle operation, void *srcData, size_t srcLen, void *destData,
9237777dab0Sopenharmony_ci                              size_t *destLen, void *tag, size_t tagLen);
9247777dab0Sopenharmony_ci
9257777dab0Sopenharmony_ci/**
9267777dab0Sopenharmony_ci * @brief Performs asymmetric encryption.
9277777dab0Sopenharmony_ci *
9287777dab0Sopenharmony_ci * @param operation Indicates the operation handle.
9297777dab0Sopenharmony_ci * @param params Indicates the pointer to the parameters for this operation.
9307777dab0Sopenharmony_ci * @param paramCount Indicates the number of parameters.
9317777dab0Sopenharmony_ci * @param srcData Indicates the pointer to the source data.
9327777dab0Sopenharmony_ci * @param srcLen Indicates the length of the source data.
9337777dab0Sopenharmony_ci * @param destData Indicates the pointer to the destination data.
9347777dab0Sopenharmony_ci * @param destLen Indicates the pointer to the destination data length.
9357777dab0Sopenharmony_ci *
9367777dab0Sopenharmony_ci * @return Returns <b>TEE_SUCCESS</b> if the operation is successful.
9377777dab0Sopenharmony_ci *         Returns <b>TEE_ERROR_BAD_PARAMETERS</b> if the operation fails due to invalid parameters.
9387777dab0Sopenharmony_ci *         Returns <b>TEE_ERROR_GENERIC</b> if the operation fails due to other errors.
9397777dab0Sopenharmony_ci *
9407777dab0Sopenharmony_ci * @since 12
9417777dab0Sopenharmony_ci * @version 1.0
9427777dab0Sopenharmony_ci */
9437777dab0Sopenharmony_ciTEE_Result TEE_AsymmetricEncrypt(TEE_OperationHandle operation, const TEE_Attribute *params, uint32_t paramCount,
9447777dab0Sopenharmony_ci                                 void *srcData, size_t srcLen, void *destData, size_t *destLen);
9457777dab0Sopenharmony_ci
9467777dab0Sopenharmony_ci/**
9477777dab0Sopenharmony_ci * @brief Performs asymmetric decryption.
9487777dab0Sopenharmony_ci *
9497777dab0Sopenharmony_ci * @param operation Indicates the operation handle.
9507777dab0Sopenharmony_ci * @param params Indicates the pointer to the parameters for this operation.
9517777dab0Sopenharmony_ci * @param paramCount Indicates the number of parameters.
9527777dab0Sopenharmony_ci * @param srcData Indicates the pointer to the source data.
9537777dab0Sopenharmony_ci * @param srcLen Indicates the length of the source data.
9547777dab0Sopenharmony_ci * @param destData Indicates the pointer to the destination data.
9557777dab0Sopenharmony_ci * @param destLen Indicates the pointer to the destination data length.
9567777dab0Sopenharmony_ci *
9577777dab0Sopenharmony_ci * @return Returns <b>TEE_SUCCESS</b> if the operation is successful.
9587777dab0Sopenharmony_ci *         Returns <b>TEE_ERROR_BAD_PARAMETERS</b> if the operation fails due to invalid parameters.
9597777dab0Sopenharmony_ci *         Returns <b>TEE_ERROR_GENERIC</b> if the operation fails due to other errors.
9607777dab0Sopenharmony_ci *
9617777dab0Sopenharmony_ci * @since 12
9627777dab0Sopenharmony_ci * @version 1.0
9637777dab0Sopenharmony_ci */
9647777dab0Sopenharmony_ciTEE_Result TEE_AsymmetricDecrypt(TEE_OperationHandle operation, const TEE_Attribute *params, uint32_t paramCount,
9657777dab0Sopenharmony_ci                                 void *srcData, size_t srcLen, void *destData, size_t *destLen);
9667777dab0Sopenharmony_ci
9677777dab0Sopenharmony_ci/**
9687777dab0Sopenharmony_ci * @brief Signs a message digest in an asymmetric operation.
9697777dab0Sopenharmony_ci *
9707777dab0Sopenharmony_ci * @param operation Indicates the operation handle.
9717777dab0Sopenharmony_ci * @param params Indicates the pointer to the parameters for this operation.
9727777dab0Sopenharmony_ci * @param paramCount Indicates the number of parameters.
9737777dab0Sopenharmony_ci * @param digest Indicates the pointer to the message digest.
9747777dab0Sopenharmony_ci * @param digestLen Indicates the digest length.
9757777dab0Sopenharmony_ci * @param signature Indicates the pointer to the signature.
9767777dab0Sopenharmony_ci * @param signatureLen Indicates the pointer to the signature length.
9777777dab0Sopenharmony_ci *
9787777dab0Sopenharmony_ci * @return Returns <b>TEE_SUCCESS</b> if the operation is successful.
9797777dab0Sopenharmony_ci *         Returns <b>TEE_ERROR_BAD_PARAMETERS</b> if the operation fails due to invalid parameters.
9807777dab0Sopenharmony_ci *         Returns <b>TEE_ERROR_GENERIC</b> if the operation fails due to other errors.
9817777dab0Sopenharmony_ci *
9827777dab0Sopenharmony_ci * @since 12
9837777dab0Sopenharmony_ci * @version 1.0
9847777dab0Sopenharmony_ci */
9857777dab0Sopenharmony_ciTEE_Result TEE_AsymmetricSignDigest(TEE_OperationHandle operation, const TEE_Attribute *params, uint32_t paramCount,
9867777dab0Sopenharmony_ci                                    void *digest, size_t digestLen, void *signature, size_t *signatureLen);
9877777dab0Sopenharmony_ci
9887777dab0Sopenharmony_ci/**
9897777dab0Sopenharmony_ci * @brief Verifies a message digest signature in an asymmetric operation.
9907777dab0Sopenharmony_ci *
9917777dab0Sopenharmony_ci * @param operation Indicates the operation handle.
9927777dab0Sopenharmony_ci * @param params Indicates the pointer to the parameters for this operation.
9937777dab0Sopenharmony_ci * @param paramCount Indicates the number of parameters.
9947777dab0Sopenharmony_ci * @param digest Indicates the pointer to the message digest.
9957777dab0Sopenharmony_ci * @param digestLen Indicates the digest length.
9967777dab0Sopenharmony_ci * @param signature Indicates the pointer to the signature.
9977777dab0Sopenharmony_ci * @param signatureLen Indicates the signature length.
9987777dab0Sopenharmony_ci *
9997777dab0Sopenharmony_ci * @return Returns <b>TEE_SUCCESS</b> if the operation is successful.
10007777dab0Sopenharmony_ci *         Returns <b>TEE_ERROR_BAD_PARAMETERS</b> if the operation fails due to invalid parameters.
10017777dab0Sopenharmony_ci *         Returns <b>TEE_ERROR_GENERIC</b> if the operation fails due to other errors.
10027777dab0Sopenharmony_ci *
10037777dab0Sopenharmony_ci * @since 12
10047777dab0Sopenharmony_ci * @version 1.0
10057777dab0Sopenharmony_ci */
10067777dab0Sopenharmony_ciTEE_Result TEE_AsymmetricVerifyDigest(TEE_OperationHandle operation, const TEE_Attribute *params, uint32_t paramCount,
10077777dab0Sopenharmony_ci                                      void *digest, size_t digestLen, void *signature, size_t signatureLen);
10087777dab0Sopenharmony_ci
10097777dab0Sopenharmony_ci/**
10107777dab0Sopenharmony_ci * @brief Obtains information about the operation involving multiple keys.
10117777dab0Sopenharmony_ci *
10127777dab0Sopenharmony_ci * @param operation Indicates the operation handle.
10137777dab0Sopenharmony_ci * @param operationInfoMultiple Indicates the pointer to the operation information obtained.
10147777dab0Sopenharmony_ci * @param operationSize [IN/OUT] Indicates the pointer to the operation information size.
10157777dab0Sopenharmony_ci *
10167777dab0Sopenharmony_ci * @return Returns <b>TEE_SUCCESS</b> if the operation is successful.
10177777dab0Sopenharmony_ci *         Returns <b>TEE_ERROR_BAD_PARAMETERS</b> if the operation fails due to invalid parameters.
10187777dab0Sopenharmony_ci *         Returns <b>TEE_ERROR_SHORT_BUFFER</b> if the operationInfo buffer is not large enough to
10197777dab0Sopenharmony_ci * hold the information obtained.
10207777dab0Sopenharmony_ci *
10217777dab0Sopenharmony_ci * @since 12
10227777dab0Sopenharmony_ci * @version 1.0
10237777dab0Sopenharmony_ci */
10247777dab0Sopenharmony_ciTEE_Result TEE_GetOperationInfoMultiple(TEE_OperationHandle operation, TEE_OperationInfoMultiple *operationInfoMultiple,
10257777dab0Sopenharmony_ci                                        const size_t *operationSize);
10267777dab0Sopenharmony_ci
10277777dab0Sopenharmony_ci/**
10287777dab0Sopenharmony_ci * @brief Checks whether the algorithm is supported.
10297777dab0Sopenharmony_ci *
10307777dab0Sopenharmony_ci * @param algId Indicates the algorithm to check.
10317777dab0Sopenharmony_ci * @param element Indicates the cryptographic element.
10327777dab0Sopenharmony_ci *
10337777dab0Sopenharmony_ci * @return Returns <b>TEE_SUCCESS</b> if the algorithm is supported.
10347777dab0Sopenharmony_ci *         Returns <b>TEE_ERROR_NOT_SUPPORTED</b> otherwise.
10357777dab0Sopenharmony_ci *
10367777dab0Sopenharmony_ci * @since 12
10377777dab0Sopenharmony_ci * @version 1.0
10387777dab0Sopenharmony_ci */
10397777dab0Sopenharmony_ciTEE_Result TEE_IsAlgorithmSupported(uint32_t algId, uint32_t element);
10407777dab0Sopenharmony_ci
10417777dab0Sopenharmony_ci#ifdef __cplusplus
10427777dab0Sopenharmony_ci}
10437777dab0Sopenharmony_ci#endif
10447777dab0Sopenharmony_ci/** @} */
10457777dab0Sopenharmony_ci#endif
1046