| /* |
| * Copyright (c) 2001-2019, Arm Limited and Contributors. All rights reserved. |
| * |
| * SPDX-License-Identifier: BSD-3-Clause |
| */ |
| |
| #include "aes.h" |
| |
| /*! |
| @defgroup cryptocell_api CryptoCell runtime library |
| |
| @{ |
| @} |
| */ |
| |
| /* |
| ############################TOP-LEVEL APIs################################### |
| */ |
| /*! |
| @defgroup cc_top Basic CryptoCell library definitions |
| @brief Contains basic CryptoCell library definitions. |
| |
| @{ |
| @ingroup cryptocell_api |
| @} |
| */ |
| |
| /*! |
| @defgroup cc_lib Basic CryptoCell library APIs |
| @brief Contains basic CryptoCell library APIs. |
| |
| This module lists the basic CryptoCell library APIs. |
| |
| @{ |
| @ingroup cc_top |
| @} |
| */ |
| |
| /*! |
| @defgroup cc_general_defs General CryptoCell definitions |
| @brief Contains general definitions of the CryptoCell runtime SW APIs. |
| |
| @{ |
| @ingroup cc_top |
| @} |
| */ |
| |
| /*! |
| @defgroup cc_error General base error codes for CryptoCell |
| @brief Contains general base-error codes for CryptoCell. |
| |
| |
| @{ |
| @ingroup cc_top |
| @} |
| */ |
| |
| |
| /* |
| ################################AES APIs##################################### |
| */ |
| /*! |
| @defgroup cc_aes CryptoCell AES APIs |
| |
| @ingroup cryptocell_api |
| |
| @brief AES is a symmetric block cipher that uses a combination of both substitution |
| and permutation. It is fast in both software and hardware. |
| |
| AES has a fixed block size of 128 bits, and supports the following key sizes: |
| <ul><li>128 bits.</li><li>192 bits.</li><li>256 bits.</li></ul> |
| |
| For the implementation of AES, see aes.h. |
| |
| */ |
| |
| /*! |
| @defgroup cc_aes_hw_limit CryptoCell-312 hardware limitations for AES |
| |
| @ingroup cc_aes |
| |
| The CrytoCell-312 hardware accelerates the following AES operations: |
| <ul><li>ECB.</li> |
| <li>CBC.</li> |
| <li>CTR.</li> |
| <li>CMAC. For the implementation of CMAC, see cmac.h.</li> |
| <li>OFB.</li> |
| <li>CCM. For the implementation of CCM, see ccm.h.</li> |
| <li>CCM star. For the implementation of CCM star, see mbedtls_cc_ccm_star.h and ccm.h.</li> |
| <li>GCM. For the implementation of GCM, see gcm.h.</li></ul> |
| |
| To support the accelerated algorithms, the following conditions |
| must be met: |
| <ul><li>The input and output buffers must be DMA-able.</li> |
| <li>The input and output buffers must be physically contingous |
| blocks in memory.</li> |
| <li>Buffer size must be up to 64KB.</li> |
| <li>The context must also be DMA-able, as partial |
| and final results are written to the context.</li> |
| <li>Only integrated operations are supported for CCM, CCM star and GCM algorithms.</li></ul> |
| */ |
| |
| /*! |
| @defgroup cc_aes_typical Typical usage of AES in CryptoCell-312 |
| |
| @ingroup cc_aes |
| |
| The following is a typical AES Block operation flow: |
| <ol><li>mbedtls_aes_init().</li> |
| <li>mbedtls_aes_setkey_enc().</li> |
| <li>mbedtls_aes_crypt_cbc().</li></ol> |
| |
| */ |
| |
| /*! |
| @defgroup cc_aesccm_star CryptoCell AES-CCM star APIs |
| @brief Contains the CryptoCell AES-CCM star APIs. |
| |
| @{ |
| @ingroup cc_aes |
| @} |
| */ |
| |
| /*! |
| @defgroup cc_aes_defs Definitions of CryptoCell AES APIs |
| @brief Contains CryptoCell AES API type definitions. |
| |
| @{ |
| @ingroup cc_aes |
| @} |
| */ |
| |
| /*! |
| @defgroup cc_aes_defs_proj Project definitions of CryptoCell AES APIs |
| @brief Contains CryptoCell AES API project type definitions. |
| |
| @{ |
| @ingroup cc_aes_defs |
| @} |
| */ |
| |
| /*! |
| @defgroup cc_aesccm_star_common Common definitions of the CryptoCell AES-CCM star APIs |
| @brief Contains the CryptoCell AES-CCM star APIs. |
| |
| @{ |
| @ingroup cc_aes_defs |
| @} |
| */ |
| |
| |
| /* |
| ################################DHM APIs##################################### |
| */ |
| /*! |
| @defgroup dhm_module CryptoCell DHM APIs |
| |
| @ingroup cryptocell_api |
| |
| @brief Diffie-Hellman-Merkle (DHM) is used to securely exchange cryptographic |
| keys over a public channel. |
| |
| As described in <em>Public-Key Cryptography Standards (PKCS) #3: Diffie Hellman |
| Key Agreement Standard</em>: |
| "[T]wo parties, without any prior arrangements, can agree upon a secret key |
| that is known only to them...This secret key can then be used, for example, |
| to encrypt further communications between the parties." |
| |
| The DHM module is implemented based on the definitions in the following |
| standards: |
| <ul><li><em>RFC-3526: More Modular Exponential (MODP) Diffie-Hellman groups |
| for Internet Key Exchange (IKE)</em>: defines a number of standardized |
| Diffie-Hellman groups for IKE.</li> |
| <li><em>RFC-5114: Additional Diffie-Hellman Groups for Use with IETF |
| Standards</em>: defines a number of standardized Diffie-Hellman |
| groups that can be used.</li></ul> |
| |
| For the implementation of DHM, see dhm.h. |
| */ |
| |
| /*! |
| @defgroup cc_dhm_hw_limit CryptoCell-312 hardware limitations for DHM |
| |
| @ingroup dhm_module |
| |
| To support the accelerated algorithms, the following conditions |
| must be met: |
| <ul><li>The contexts must be DMA-able, as they might |
| be used for some symmetric operations.</li></ul> |
| */ |
| |
| /*! |
| @defgroup cc_dhm_typical Typical usage of DHM in CryptoCell-312 |
| |
| @ingroup dhm_module |
| |
| The following is a typical DHM flow for one party: |
| <ol><li>mbedtls_dhm_init().</li> |
| <li>mbedtls_mpi_read_string().</li> |
| <li>mbedtls_mpi_read_string().</li> |
| <li>mbedtls_dhm_make_params().</li> |
| <li>mbedtls_dhm_read_public().</li> |
| <li>mbedtls_dhm_calc_secret().</li></ol> |
| */ |
| |
| /* |
| ################################ECC APIs##################################### |
| */ |
| |
| /*! |
| @defgroup cc_ecc CryptoCell Elliptic Curve APIs |
| @brief Contains all CryptoCell Elliptic Curve APIs. |
| |
| Elliptic-curve cryptography (ECC) is defined in <em>Standards for Efficient |
| Cryptography Group (SECG): SEC1 Elliptic Curve Cryptography</em>. |
| |
| @{ |
| @ingroup cryptocell_api |
| @} |
| */ |
| |
| /*! |
| @defgroup ecdh_module ECDH module overview |
| |
| @ingroup cc_ecc |
| |
| @brief Elliptic-curve Diffie–Hellman (ECDH) is an anonymous key agreement |
| protocol. It allows two parties to establish a shared secret over an |
| insecure channel. Each party must have an elliptic-curve public–private |
| key pair. |
| |
| For more information, see <em>NIST SP 800-56A Rev. 2: Recommendation |
| for Pair-Wise Key Establishment Schemes Using Discrete Logarithm |
| Cryptography</em>. |
| |
| For the implementation of ECDH, see ecdh.h. |
| */ |
| |
| /*! |
| @defgroup cc_ecdh_hw_limit CryptoCell-312 hardware limitations for ECDH |
| |
| @ingroup ecdh_module |
| |
| CryotoCell-312 does not support Brainpool curves. |
| |
| */ |
| |
| /*! |
| @defgroup cc_ecdh_typical Typical usage of ECDH in CryptoCell-312 |
| |
| @ingroup ecdh_module |
| |
| The following is a typical ECDH operation flow: |
| <ol><li>mbedtls_ecp_group_init().</li> |
| <li>mbedtls_mpi_init() for each group parameter.</li> |
| <li>mbedtls_ecdh_gen_public().</li></ol> |
| */ |
| |
| /*! |
| @defgroup ecdh_edwards CryptoCell ECDH Edwards curve APIs |
| @brief Contains the CryptoCell ECDH Edwards curve APIs. |
| @{ |
| @ingroup ecdh_module |
| @} |
| */ |
| |
| /*! |
| @defgroup ecdsa_module ECDSA module overview |
| |
| @ingroup cc_ecc |
| |
| @brief The Elliptic Curve Digital Signature Algorithm (ECDSA) is a used for |
| generating and validating digital signatures. |
| |
| For the definition of ECDSA, see <em>Standards for Efficient Cryptography Group (SECG): |
| SEC1 Elliptic Curve Cryptography</em>. |
| |
| For the use of ECDSA for TLS, see <em>RFC-4492: Elliptic Curve |
| Cryptography (ECC) Cipher Suites for Transport Layer Security (TLS)</em>. |
| |
| For the implementation of ECDSA, see ecdsa.h. |
| */ |
| |
| /*! |
| @defgroup cc_ecdsa_hw_limit CryptoCell-312 hardware limitations for ECDSA |
| |
| @ingroup ecdsa_module |
| |
| CryotoCell-312 does not support Brainpool curves. |
| |
| \note Using hash functions with hash size greater than the EC modulus size |
| is not recommended. |
| */ |
| /*! |
| @defgroup cc_ecdsa_typical Typical usage of ECDSA in CryptoCell-312 |
| |
| @ingroup ecdsa_module |
| |
| The following is a typical ECDSA operation flow: |
| <ol><li>mbedtls_ecp_group_init().</li> |
| <li>mbedtls_mpi_init() for each group parameter.</li> |
| <li>mbedtls_ecp_gen_keypair().</li> |
| <li>mbedtls_ecdsa_sign() or mbedtls_ecdsa_verify().</li></ol> |
| */ |
| |
| /*! |
| @defgroup eddsa CryptoCell EDDSA Edwards curve APIs |
| @brief Contains the CryptoCell EDDSA Edwards curve APIs. |
| @{ |
| @ingroup ecdsa_module |
| @} |
| */ |
| |
| /*! |
| @defgroup cc_ecies CryptoCell ECIES APIs |
| @brief Contains the CryptoCell Elliptic Curve Integrated Encryption Scheme (ECIES) APIs. |
| @{ |
| |
| @ingroup cc_ecc |
| @} |
| */ |
| |
| /*! |
| @defgroup cc_ecpki CryptoCell ECPKI APIs |
| @brief Contains all CryptoCell ECPKI APIs. |
| |
| This module contains all definitions relating to Elliptic Curve Public Key Infrastructure. |
| @{ |
| @ingroup cc_ecc |
| @} |
| */ |
| |
| /*! |
| @defgroup cc_ecpki_domains_defs CryptoCell ECPKI supported domains |
| @brief Contains CryptoCell ECPKI domains supported by the project. |
| |
| @{ |
| @ingroup cc_ecpki |
| @} |
| */ |
| |
| /*! |
| @defgroup cc_ecpki_types CryptoCell ECPKI type definitions |
| @brief Contains CryptoCell ECPKI API type definitions. |
| |
| @{ |
| @ingroup cc_ecpki |
| @} |
| */ |
| |
| /* |
| ##############################EXT DMA APIs################################### |
| */ |
| |
| /*! |
| @defgroup ext_dma CryptoCell external DMA APIs |
| @brief Contains all CryptoCell external DMA API definitions. |
| |
| @{ |
| @ingroup cryptocell_api |
| @} |
| */ |
| |
| /*! |
| @defgroup aes_ext_dma CryptoCell AES external DMA APIs |
| @brief Contains CryptoCell AES external DMA API definitions. |
| |
| @{ |
| @ingroup ext_dma |
| @} |
| */ |
| |
| /*! |
| @defgroup chacha_ext_dma CryptoCell ChaCha external DMA APIs |
| @brief Contains CryptoCell ChaCha external DMA APIs. |
| |
| @{ |
| @ingroup ext_dma |
| @} |
| */ |
| |
| /*! |
| @defgroup hash_ext_dma CryptoCell hash external DMA APIs |
| @brief Contains CryptoCell hash external DMA APIs. |
| |
| @{ |
| @ingroup ext_dma |
| @} |
| */ |
| |
| /*! |
| @defgroup ext_dma_errors Specific errors of the CryptoCell external DMA APIs |
| @brief Contains the CryptoCell external DMA-API error definitions. |
| |
| @{ |
| @ingroup ext_dma |
| @} |
| */ |
| |
| |
| /* |
| ###############################HASH APIs##################################### |
| */ |
| |
| /*! |
| @defgroup cc_hash CryptoCell hash APIs |
| @brief Contains all CryptoCell hash APIs and definitions. |
| |
| The hash or Message Digest (MD) module allows you to calculate |
| hash digests from data, and create signatures based on those hash digests. |
| |
| HMAC is a wrapping algorithm that uses one of the supported |
| hash algorithms and a key, to generate a unique |
| authentication code over the input data. |
| |
| All hash algorithms can be accessed via the generic MD layer. |
| For more information, see ::mbedtls_md_setup(). |
| |
| For more information on supported hash algorithms, @see cc_hash_hw_limit. |
| |
| For the implementation of hash and HMAC, see md.h. |
| @{ |
| @ingroup cryptocell_api |
| @} |
| */ |
| |
| /*! |
| @defgroup cc_hash_hw_limit CryptoCell-312 hardware limitations for hash |
| |
| @ingroup cc_hash |
| |
| The CryptoCell-312 hardware supports accelerated hash operations for |
| the following modes: |
| <ul><li>SHA-1</li> |
| <li>SHA-224</li> |
| <li>SHA-256</li></ul> |
| |
| SHA-384 and SHA-512 operations are only supported in a |
| non-accelerated software mode. |
| |
| To support the accelerated algorithms, the following conditions |
| must be met: |
| <ul><li>The input buffer must be DMA-able.</li> |
| <li>The input buffer must be physically contingous |
| block in memory.</li> |
| <li>Buffer size must be up to 64KB.</li> |
| <li>The context must also be DMA-able, as partial |
| and final results are written to the context.</li></ul> |
| */ |
| |
| /*! |
| @defgroup cc_hash_typical Typical usage of hash in CryptoCell-312 |
| |
| @ingroup cc_hash |
| |
| The following is a typical hash Block operation flow |
| directly using the SHA module: |
| <ol><li>mbedtls_sha1_init().</li> |
| <li>mbedtls_sha1_starts_ret().</li> |
| <li>mbedtls_sha1_update_ret().</li> |
| <li>mbedtls_sha1_finish_ret().</li></ol> |
| |
| The following is a typical HMAC Block operation flow |
| using the MD module: |
| <ol><li>mbedtls_md_setup().</li> |
| <li>mbedtls_md_hmac_starts().</li> |
| <li>mbedtls_md_hmac_update().</li> |
| <li>mbedtls_md_hmac_finish().</li></ol> |
| */ |
| |
| /*! |
| @defgroup cc_sha512_t_h CryptoCell SHA-512 truncated APIs |
| |
| @ingroup cc_hash |
| |
| @brief Contains all CryptoCell SHA-512 truncated APIs. |
| |
| */ |
| |
| /*! |
| @defgroup cc_hash_defs CryptoCell hash API definitions |
| @brief Contains CryptoCell hash API definitions. |
| |
| @{ |
| @ingroup cc_hash |
| @} |
| */ |
| |
| /*! |
| @defgroup cc_hash_defs_proj CryptoCell hash API project-specific definitions |
| @brief Contains the project-specific hash API definitions. |
| |
| @{ |
| @ingroup cc_hash |
| @} |
| */ |
| |
| /* |
| ###############################MGMT APIs##################################### |
| */ |
| /*! |
| @defgroup cc_management CryptoCell management APIs |
| @brief Contains CryptoCell Management APIs. |
| |
| @{ |
| @ingroup cryptocell_api |
| @} |
| */ |
| |
| /*! |
| @defgroup cc_management_error Specific errors of the CryptoCell Management APIs |
| @brief Contains the CryptoCell management-API error definitions. |
| |
| @{ |
| @ingroup cc_management |
| @} |
| */ |
| |
| /* |
| ################################PAL APIs##################################### |
| */ |
| /*! |
| @defgroup cc_pal CryptoCell PAL APIs |
| @brief Groups all PAL APIs and definitions. |
| |
| @{ |
| @ingroup cryptocell_api |
| @} |
| */ |
| |
| /*! |
| @defgroup cc_pal_abort CryptoCell PAL abort operations |
| @brief Contains CryptoCell PAL abort operations. |
| |
| @{ |
| @ingroup cc_pal |
| @} |
| */ |
| |
| /*! |
| @defgroup cc_pal_apbc CryptoCell PAL APB-C APIs |
| @brief Contains PAL APB-C APIs. |
| |
| @{ |
| @ingroup cc_pal |
| @} |
| */ |
| |
| /*! |
| @defgroup cc_pal_sb_plat CryptoCell PAL definitions for Boot Services |
| @brief Contains CryptoCell PAL Secure Boot definitions. |
| |
| @{ |
| @ingroup cc_pal |
| @} |
| */ |
| |
| /*! |
| @defgroup cc_pal_init CryptoCell PAL entry or exit point APIs |
| @brief Contains PAL initialization and termination APIs. |
| |
| @{ |
| @ingroup cc_pal |
| @} |
| */ |
| |
| /*! |
| @defgroup cc_pal_log CryptoCell PAL logging APIs and definitions |
| @brief Contains CryptoCell PAL layer log definitions. |
| |
| @{ |
| @ingroup cc_pal |
| @} |
| */ |
| |
| /*! |
| @defgroup cc_pal_mem CryptoCell PAL memory operations |
| @brief Contains memory-operation functions. |
| |
| @{ |
| @ingroup cc_pal |
| @} |
| */ |
| |
| /*! |
| @defgroup cc_pal_barrier CryptoCell PAL memory Barrier APIs |
| @brief Contains memory-barrier implementation definitions and APIs. |
| |
| @{ |
| @ingroup cc_pal_mem |
| @} |
| */ |
| |
| /*! |
| @defgroup cc_pal_memmap CryptoCell PAL memory mapping APIs |
| @brief Contains memory mapping functions. |
| |
| @{ |
| @ingroup cc_pal_mem |
| @} |
| */ |
| |
| /*! |
| @defgroup cc_pal_mutex CryptoCell PAL mutex APIs |
| @brief Contains resource management functions. |
| |
| @{ |
| @ingroup cc_pal |
| @} |
| */ |
| |
| /*! |
| @defgroup cc_pal_types CryptoCell PAL platform-dependent definitions and types |
| @brief Contains CryptoCell PAL platform-dependent definitions and types. |
| |
| @{ |
| @ingroup cc_pal |
| @} |
| */ |
| |
| /*! |
| @defgroup cc_pal_compiler CryptoCell PAL platform-dependent compiler-related definitions |
| @brief Contains CryptoCell PAL platform-dependent compiler-related definitions. |
| @{ |
| @ingroup cc_pal |
| @} |
| */ |
| |
| /*! |
| @defgroup cc_pal_pm CryptoCell PAL power-management APIs |
| @brief Contains PAL power-management APIs. |
| |
| @{ |
| @ingroup cc_pal |
| @} |
| */ |
| |
| /*! |
| @defgroup cc_pal_trng CryptoCell PAL TRNG APIs |
| @brief Contains APIs for retrieving TRNG user parameters. |
| |
| @{ |
| @ingroup cc_pal |
| @} |
| */ |
| |
| /*! |
| @defgroup cc_pal_error Specific errors of the CryptoCell PAL APIs |
| @brief Contains platform-dependent PAL-API error definitions. |
| |
| @{ |
| @ingroup cc_pal |
| @} |
| */ |
| |
| /* |
| ################################PKA APIs##################################### |
| */ |
| /*! |
| @defgroup cc_pka CryptoCell PKA APIs |
| @brief Contains all CryptoCell PKA APIs. |
| |
| @{ |
| @ingroup cryptocell_api |
| @} |
| */ |
| |
| /*! |
| @defgroup cc_pka_defs_hw CryptoCell PKA-specific definitions |
| @brief Contains the CryptoCell PKA API definitions. |
| |
| @{ |
| @ingroup cc_pka |
| @} |
| */ |
| |
| /*! |
| @defgroup cc_pka_hw_plat_defs CryptoCell PKA-API platform-dependent types and definitions |
| @brief Contains the platform-dependent definitions of the CryptoCell PKA APIs. |
| |
| @{ |
| @ingroup cc_pka_defs_hw |
| @} |
| */ |
| |
| |
| /* |
| ###############################PROD APIs##################################### |
| */ |
| |
| /*! |
| @addtogroup prod CryptoCell production-library APIs |
| @brief Contains CryptoCell production-library APIs. |
| |
| @{ |
| @ingroup cryptocell_api |
| @} |
| */ |
| |
| /*! |
| @defgroup prod_mem CryptoCell production-library definitions |
| @brief Contains CryptoCell production-library definitions. |
| |
| @{ |
| @ingroup prod |
| @} |
| */ |
| |
| /*! |
| @defgroup cc_cmpu CryptoCell ICV production library APIs |
| @brief Contains CryptoCell ICV production library APIs. |
| |
| @{ |
| @ingroup prod |
| @} |
| */ |
| |
| /*! |
| @defgroup cc_dmpu CryptoCell OEM production library APIs |
| @brief Contains CryptoCell OEM production library APIs. |
| |
| @{ |
| @ingroup prod |
| @} |
| */ |
| |
| /*! |
| @defgroup prod_errors Specific errors of the CryptoCell production-library APIs |
| @brief Contains the CryptoCell production-library-API error definitions. |
| |
| @{ |
| @ingroup prod |
| @} |
| */ |
| |
| |
| /* |
| ################################RNG APIs##################################### |
| */ |
| /*! |
| @defgroup rng_module CryptoCell RNG APIs |
| |
| @brief The Random Number Generator (RNG) module supports random number |
| generation, as defined in <em>NIST SP 800-90A: Recommendation for Random |
| Number Generation Using Deterministic Random Bit Generators</em>. |
| See mbedtls_ctr_drbg_random(). |
| |
| The block-cipher counter-mode based deterministic random-bit |
| generator (CTR_DBRG). CryptoCell provides the source of entropy. |
| |
| For the implementation of RNG, see ctr_drbg.h. |
| @{ |
| @ingroup cryptocell_api |
| @} |
| */ |
| |
| /*! |
| @defgroup cc_rnd CryptoCell random-number generation APIs. |
| @brief Contains the CryptoCell random-number generation APIs. |
| @{ |
| @ingroup rng_module |
| @} |
| */ |
| |
| |
| /* |
| ################################RSA APIs##################################### |
| */ |
| /*! |
| @defgroup rsa_module CryptoCell RSA APIs |
| |
| @ingroup cryptocell_api |
| |
| @brief RSA is an asymmetric algorithm used for secure-data transmission. |
| |
| @note As it is considered slow, it is mainly used to pass encrypted shared |
| keys for symmetric key cryptography. |
| |
| The RSA module implements the standards defined in <em>Public-Key Cryptography |
| Standards (PKCS) #1 v1.5: RSA Encryption</em> and <em>Public-Key |
| Cryptography Standards (PKCS) #1 v2.1: RSA Cryptography Specifications</em>. |
| |
| @note CryptoCell-312 does not support blinding for RSA. If a function receives |
| random pointers as input, these may be NULL. |
| |
| For the implementation of RSA, see rsa.h |
| */ |
| |
| /*! |
| @defgroup cc_rsa_hw_limit CryptoCell-312 hardware limitations for RSA |
| |
| @ingroup rsa_module |
| |
| CryptoCell-312 supports the following RSA key sizes for private-public |
| operations: |
| <ul><li>256 bytes (2048 bits).</li> |
| <li>384 bytes (3072 bits).</li> |
| <li>512 bytes (4096 bits).</li></ul> |
| |
| For key-generation, CryptoCell-312 supports the following RSA key sizes: |
| <ul><li>256 bytes (2048 bits).</li> |
| <li>384 bytes (3072 bits).</li></ul> |
| */ |
| |
| /*! |
| @defgroup cc_rsa_typical Typical usage of RSA in CryptoCell-312 |
| |
| @ingroup rsa_module |
| |
| The following is a typical RSA operation flow: |
| <ol><li>mbedtls_rsa_init().</li> |
| <li>mbedtls_rsa_gen_key().</li> |
| <li>mbedtls_rsa_pkcs1_encrypt().</li></ol> |
| |
| @note CryptoCell-312 requires that the same \c hash_id used for |
| mbedtls_rsa_init() is used for all subsequent operations. |
| Otherwise, it returns an error. |
| */ |
| |
| /*! |
| @defgroup cc_rsa_typical_ki Typical insertion of keys in CryptoCell-312 |
| |
| @ingroup rsa_module |
| |
| The following is a typical RSA key-insertion flow: |
| <ol><li>mbedtls_rsa_import() or mbedtls_rsa_import_raw().</li> |
| <li>mbedtls_rsa_complete().</li></ol> |
| |
| If you insert keys that are not derived by CryptoCell-312, |
| the following restrictions apply: |
| <ul><li>The user may insert \c N, \c D, \c E, and the complete function does |
| not derive the \c P and \c Q (the CRT values).</li> |
| <li>The user may insert \c P and \c Q, and the complete function derives the |
| CRT values from that, but does not derive \c D.</li> |
| <li>Its Illegal to insert only part of the CRT key (only \c DP for example).</li> |
| <li> If all the required key parameters were inserted the function does nothing.</li></ul> |
| */ |
| |
| /* |
| #############################Secure Boot APIs################################ |
| */ |
| /*! |
| @defgroup cc_sb CryptoCell Secure Boot and Secure Debug APIs. |
| @brief Contains all Secure Boot and Secure Debug APIs and definitions. |
| |
| @{ |
| @ingroup cryptocell_api |
| @} |
| */ |
| |
| /*! |
| @defgroup cc_sb_image_verifier CryptoCell Secure Boot and Secure Debug API definitions |
| @brief Contains definitions used for the Secure Boot and Secure Debug APIs. |
| |
| @{ |
| @ingroup cc_sb |
| @} |
| */ |
| |
| /*! |
| @defgroup cc_sb_basetypes CryptoCell Secure Boot basic type definitions |
| @brief Contains CryptoCell Secure Boot basic type definitions. |
| @{ |
| @ingroup cc_sb |
| @} |
| */ |
| |
| /*! |
| @defgroup cc_sbrt CryptoCell Secure Boot certificate-chain-processing APIs. |
| @brief Contains CryptoCell Secure Boot certificate-chain-processing APIs. |
| |
| @{ |
| @ingroup cc_sb |
| @} |
| */ |
| |
| /*! |
| @defgroup cc_sb_defs CryptoCell Secure Boot type definitions |
| @brief Contains CryptoCell Secure Boot type definitions. |
| @{ |
| @ingroup cc_sb |
| @} |
| */ |
| |
| /*! |
| @defgroup cc_sb_gen_defs CryptoCell Secure Boot and Secure Debug definitions and structures |
| @brief Contains CryptoCell Secure Boot and Secure Debug definitions and structures. |
| |
| @{ |
| @ingroup cc_sb_defs |
| @} |
| */ |
| |
| /* |
| ##############################SRAM MAP APIs################################### |
| */ |
| /*! |
| @defgroup cc_sram_map CryptoCell SRAM mapping APIs |
| @brief Contains internal SRAM mapping APIs. |
| |
| @{ |
| @ingroup cryptocell_api |
| @} |
| */ |
| |
| |
| /* |
| ################################SRP APIs##################################### |
| */ |
| /*! |
| @defgroup cc_srp CryptoCell SRP APIs |
| @brief Contains CryptoCell SRP APIs. |
| |
| @{ |
| @ingroup cryptocell_api |
| @} |
| */ |
| |
| /*! |
| @defgroup cc_srp_errors Specific errors of the CryptoCell SRP APIs |
| @brief Contains the CryptoCell SRP-API error definitions. |
| @{ |
| @ingroup cc_srp |
| @} |
| */ |
| |
| |
| /* |
| ################################UTIL APIs#################################### |
| */ |
| /*! |
| @defgroup cc_utils CryptoCell utility APIs |
| @brief This contains all utility APIs. |
| @{ |
| @ingroup cryptocell_api |
| @} |
| */ |
| |
| /*! |
| @defgroup cc_util_asset_prov CryptoCell runtime-library asset-provisioning APIs |
| @brief Contains CryptoCell runtime-library ICV and OEM asset-provisioning APIs |
| and definitions. |
| |
| @{ |
| @ingroup cc_utils |
| @} |
| */ |
| |
| /*! |
| @defgroup cc_utils_defs CryptoCell utility APIs general definitions |
| @brief Contains CryptoCell utility APIs general definitions. |
| @{ |
| @ingroup cc_utils |
| @} |
| */ |
| |
| /*! |
| @defgroup cc_utils_key_defs CryptoCell utility general key definitions |
| @brief Contains KDF API definitions. |
| @{ |
| @ingroup cc_utils_key_derivation |
| @} |
| */ |
| |
| /*! |
| @defgroup cc_utils_key_derivation CryptoCell utility key-derivation APIs |
| @brief Contains the CryptoCell utility key-derivation function API. |
| |
| @{ |
| @ingroup cc_utils |
| @} |
| */ |
| |
| /*! |
| @defgroup cc_utils_errors Specific errors of the CryptoCell utility module APIs |
| @brief Contains utility API error definitions. |
| |
| @{ |
| @ingroup cc_utils |
| @} |
| */ |
| |