CC312: Fork CC312 runtime library inside tf-m

Files from https://github.com/ARM-software/cryptocell-312-runtime, on
commit a31f19d6fa2173c53f5181a90af100866a78c314

Change-Id: Idd00e58a5bb694de978207823e7553ec051a67ed
Signed-off-by: Raef Coles <raef.coles@arm.com>
diff --git a/lib/ext/cryptocell-312-runtime/doxygen/module_definitions.h b/lib/ext/cryptocell-312-runtime/doxygen/module_definitions.h
new file mode 100644
index 0000000..12c8d1e
--- /dev/null
+++ b/lib/ext/cryptocell-312-runtime/doxygen/module_definitions.h
@@ -0,0 +1,982 @@
+/*
+ * 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
+ @}
+ */
+