1 /*
2  * Copyright (c) 2001-2019, Arm Limited and Contributors. All rights reserved.
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  */
6 
7 #include "aes.h"
8 
9 /*!
10  @defgroup cryptocell_api CryptoCell runtime library
11 
12  @{
13  @}
14  */
15 
16 /*
17   ############################TOP-LEVEL APIs###################################
18  */
19 /*!
20  @defgroup cc_top Basic CryptoCell library definitions
21  @brief Contains basic CryptoCell library definitions.
22 
23  @{
24  @ingroup cryptocell_api
25  @}
26  */
27 
28 /*!
29  @defgroup cc_lib Basic CryptoCell library APIs
30  @brief Contains basic CryptoCell library APIs.
31 
32  This module lists the basic CryptoCell library APIs.
33 
34  @{
35  @ingroup cc_top
36  @}
37  */
38 
39   /*!
40  @defgroup cc_general_defs General CryptoCell definitions
41  @brief Contains general definitions of the CryptoCell runtime SW APIs.
42 
43  @{
44  @ingroup cc_top
45  @}
46  */
47 
48 /*!
49  @defgroup cc_error General base error codes for CryptoCell
50  @brief Contains general base-error codes for CryptoCell.
51 
52 
53  @{
54  @ingroup cc_top
55  @}
56  */
57 
58 
59  /*
60   ################################AES APIs#####################################
61  */
62 /*!
63   @defgroup cc_aes CryptoCell AES APIs
64 
65   @ingroup cryptocell_api
66 
67   @brief AES is a symmetric block cipher that uses a combination of both substitution
68   and permutation. It is fast in both software and hardware.
69 
70   AES has a fixed block size of 128 bits, and supports the following key sizes:
71   <ul><li>128 bits.</li><li>192 bits.</li><li>256 bits.</li></ul>
72 
73   For the implementation of AES, see aes.h.
74 
75  */
76 
77  /*!
78   @defgroup cc_aes_hw_limit CryptoCell-312 hardware limitations for AES
79 
80   @ingroup cc_aes
81 
82   The CrytoCell-312 hardware accelerates the following AES operations:
83   <ul><li>ECB.</li>
84   <li>CBC.</li>
85   <li>CTR.</li>
86   <li>CMAC. For the implementation of CMAC, see cmac.h.</li>
87   <li>OFB.</li>
88   <li>CCM. For the implementation of CCM, see ccm.h.</li>
89   <li>CCM star. For the implementation of CCM star, see mbedtls_cc_ccm_star.h and ccm.h.</li>
90   <li>GCM. For the implementation of GCM, see gcm.h.</li></ul>
91 
92   To support the accelerated algorithms, the following conditions
93   must be met:
94   <ul><li>The input and output buffers must be DMA-able.</li>
95   <li>The input and output buffers must be physically contingous
96   blocks in memory.</li>
97   <li>Buffer size must be up to 64KB.</li>
98   <li>The context must also be DMA-able, as partial
99   and final results are written to the context.</li>
100   <li>Only integrated operations are supported for CCM, CCM star and GCM algorithms.</li></ul>
101  */
102 
103  /*!
104   @defgroup cc_aes_typical Typical usage of AES in CryptoCell-312
105 
106   @ingroup cc_aes
107 
108   The following is a typical AES Block operation flow:
109   <ol><li>mbedtls_aes_init().</li>
110   <li>mbedtls_aes_setkey_enc().</li>
111   <li>mbedtls_aes_crypt_cbc().</li></ol>
112 
113 */
114 
115 /*!
116  @defgroup cc_aesccm_star CryptoCell AES-CCM star APIs
117  @brief Contains the CryptoCell AES-CCM star APIs.
118 
119  @{
120  @ingroup cc_aes
121  @}
122  */
123 
124 /*!
125  @defgroup cc_aes_defs Definitions of CryptoCell AES APIs
126  @brief Contains CryptoCell AES API type definitions.
127 
128  @{
129  @ingroup cc_aes
130  @}
131  */
132 
133 /*!
134  @defgroup cc_aes_defs_proj Project definitions of CryptoCell AES APIs
135  @brief Contains CryptoCell AES API project type definitions.
136 
137  @{
138  @ingroup cc_aes_defs
139  @}
140  */
141 
142  /*!
143  @defgroup cc_aesccm_star_common Common definitions of the CryptoCell AES-CCM star APIs
144  @brief Contains the CryptoCell AES-CCM star APIs.
145 
146  @{
147  @ingroup cc_aes_defs
148  @}
149  */
150 
151 
152  /*
153   ################################DHM APIs#####################################
154  */
155  /*!
156   @defgroup dhm_module CryptoCell DHM APIs
157 
158   @ingroup cryptocell_api
159 
160   @brief Diffie-Hellman-Merkle (DHM) is used to securely exchange cryptographic
161   keys over a public channel.
162 
163   As described in <em>Public-Key Cryptography Standards (PKCS) #3: Diffie Hellman
164   Key Agreement Standard</em>:
165   "[T]wo parties, without any prior arrangements, can agree upon a secret key
166   that is known only to them...This secret key can then be used, for example,
167   to encrypt further communications between the parties."
168 
169   The DHM module is implemented based on the definitions in the following
170   standards:
171   <ul><li><em>RFC-3526: More Modular Exponential (MODP) Diffie-Hellman groups
172   for Internet Key Exchange (IKE)</em>: defines a number of standardized
173   Diffie-Hellman groups for IKE.</li>
174   <li><em>RFC-5114: Additional Diffie-Hellman Groups for Use with IETF
175   Standards</em>: defines a number of standardized Diffie-Hellman
176   groups that can be used.</li></ul>
177 
178   For the implementation of DHM, see dhm.h.
179  */
180 
181  /*!
182   @defgroup cc_dhm_hw_limit CryptoCell-312 hardware limitations for DHM
183 
184   @ingroup dhm_module
185 
186   To support the accelerated algorithms, the following conditions
187   must be met:
188   <ul><li>The contexts must be DMA-able, as they might
189   be used for some symmetric operations.</li></ul>
190  */
191 
192  /*!
193   @defgroup cc_dhm_typical Typical usage of DHM in CryptoCell-312
194 
195   @ingroup dhm_module
196 
197   The following is a typical DHM flow for one party:
198   <ol><li>mbedtls_dhm_init().</li>
199   <li>mbedtls_mpi_read_string().</li>
200   <li>mbedtls_mpi_read_string().</li>
201   <li>mbedtls_dhm_make_params().</li>
202   <li>mbedtls_dhm_read_public().</li>
203   <li>mbedtls_dhm_calc_secret().</li></ol>
204  */
205 
206 /*
207   ################################ECC APIs#####################################
208  */
209 
210 /*!
211  @defgroup cc_ecc CryptoCell Elliptic Curve APIs
212  @brief Contains all CryptoCell Elliptic Curve APIs.
213 
214  Elliptic-curve cryptography (ECC) is defined in <em>Standards for Efficient
215  Cryptography Group (SECG): SEC1 Elliptic Curve Cryptography</em>.
216 
217  @{
218  @ingroup cryptocell_api
219  @}
220 */
221 
222  /*!
223   @defgroup ecdh_module ECDH module overview
224 
225   @ingroup cc_ecc
226 
227   @brief Elliptic-curve Diffie–Hellman (ECDH) is an anonymous key agreement
228   protocol. It allows two parties to establish a shared secret over an
229   insecure channel. Each party must have an elliptic-curve public–private
230   key pair.
231 
232   For more information, see <em>NIST SP 800-56A Rev. 2: Recommendation
233   for Pair-Wise Key Establishment Schemes Using Discrete Logarithm
234   Cryptography</em>.
235 
236   For the implementation of ECDH, see ecdh.h.
237  */
238 
239  /*!
240   @defgroup cc_ecdh_hw_limit CryptoCell-312 hardware limitations for ECDH
241 
242   @ingroup ecdh_module
243 
244   CryotoCell-312 does not support Brainpool curves.
245 
246   */
247 
248 /*!
249   @defgroup cc_ecdh_typical Typical usage of ECDH in CryptoCell-312
250 
251   @ingroup ecdh_module
252 
253   The following is a typical ECDH operation flow:
254   <ol><li>mbedtls_ecp_group_init().</li>
255   <li>mbedtls_mpi_init() for each group parameter.</li>
256   <li>mbedtls_ecdh_gen_public().</li></ol>
257  */
258 
259 /*!
260  @defgroup ecdh_edwards CryptoCell ECDH Edwards curve APIs
261  @brief Contains the CryptoCell ECDH Edwards curve APIs.
262  @{
263  @ingroup ecdh_module
264  @}
265  */
266 
267 /*!
268   @defgroup ecdsa_module ECDSA module overview
269 
270   @ingroup cc_ecc
271 
272   @brief The Elliptic Curve Digital Signature Algorithm (ECDSA) is a used for
273   generating and validating digital signatures.
274 
275   For the definition of ECDSA, see <em>Standards for Efficient Cryptography Group (SECG):
276   SEC1 Elliptic Curve Cryptography</em>.
277 
278   For the use of ECDSA for TLS, see <em>RFC-4492: Elliptic Curve
279   Cryptography (ECC) Cipher Suites for Transport Layer Security (TLS)</em>.
280 
281   For the implementation of ECDSA, see ecdsa.h.
282  */
283 
284 /*!
285   @defgroup cc_ecdsa_hw_limit CryptoCell-312 hardware limitations for ECDSA
286 
287   @ingroup ecdsa_module
288 
289   CryotoCell-312 does not support Brainpool curves.
290 
291   \note Using hash functions with hash size greater than the EC modulus size
292         is not recommended.
293  */
294 /*!
295   @defgroup cc_ecdsa_typical Typical usage of ECDSA in CryptoCell-312
296 
297   @ingroup ecdsa_module
298 
299   The following is a typical ECDSA operation flow:
300   <ol><li>mbedtls_ecp_group_init().</li>
301   <li>mbedtls_mpi_init() for each group parameter.</li>
302   <li>mbedtls_ecp_gen_keypair().</li>
303   <li>mbedtls_ecdsa_sign() or mbedtls_ecdsa_verify().</li></ol>
304  */
305 
306 /*!
307  @defgroup eddsa CryptoCell EDDSA Edwards curve APIs
308  @brief Contains the CryptoCell EDDSA Edwards curve APIs.
309  @{
310  @ingroup ecdsa_module
311  @}
312  */
313 
314 /*!
315  @defgroup cc_ecies CryptoCell ECIES APIs
316  @brief Contains the CryptoCell Elliptic Curve Integrated Encryption Scheme (ECIES) APIs.
317  @{
318 
319  @ingroup cc_ecc
320  @}
321 */
322 
323 /*!
324  @defgroup cc_ecpki CryptoCell ECPKI APIs
325  @brief Contains all CryptoCell ECPKI APIs.
326 
327  This module contains all definitions relating to Elliptic Curve Public Key Infrastructure.
328  @{
329  @ingroup cc_ecc
330  @}
331 */
332 
333 /*!
334  @defgroup cc_ecpki_domains_defs CryptoCell ECPKI supported domains
335  @brief Contains CryptoCell ECPKI domains supported by the project.
336 
337  @{
338  @ingroup cc_ecpki
339  @}
340  */
341 
342  /*!
343  @defgroup cc_ecpki_types CryptoCell ECPKI type definitions
344  @brief Contains CryptoCell ECPKI API type definitions.
345 
346  @{
347  @ingroup cc_ecpki
348  @}
349  */
350 
351 /*
352   ##############################EXT DMA APIs###################################
353  */
354 
355 /*!
356  @defgroup ext_dma CryptoCell external DMA APIs
357  @brief Contains all CryptoCell external DMA API definitions.
358 
359  @{
360  @ingroup cryptocell_api
361  @}
362 */
363 
364 /*!
365  @defgroup aes_ext_dma CryptoCell AES external DMA APIs
366  @brief Contains CryptoCell AES external DMA API definitions.
367 
368  @{
369  @ingroup ext_dma
370  @}
371 */
372 
373 /*!
374  @defgroup chacha_ext_dma CryptoCell ChaCha external DMA APIs
375  @brief Contains CryptoCell ChaCha external DMA APIs.
376 
377  @{
378  @ingroup ext_dma
379  @}
380  */
381 
382 /*!
383  @defgroup hash_ext_dma CryptoCell hash external DMA APIs
384  @brief Contains CryptoCell hash external DMA APIs.
385 
386  @{
387  @ingroup ext_dma
388  @}
389  */
390 
391 /*!
392  @defgroup ext_dma_errors Specific errors of the CryptoCell external DMA APIs
393  @brief Contains the CryptoCell external DMA-API error definitions.
394 
395  @{
396  @ingroup ext_dma
397  @}
398  */
399 
400 
401 /*
402   ###############################HASH APIs#####################################
403  */
404 
405 /*!
406  @defgroup cc_hash CryptoCell hash APIs
407  @brief Contains all CryptoCell hash APIs and definitions.
408 
409   The hash or Message Digest (MD) module allows you to calculate
410   hash digests from data, and create signatures based on those hash digests.
411 
412   HMAC is a wrapping algorithm that uses one of the supported
413   hash algorithms and a key, to generate a unique
414   authentication code over the input data.
415 
416   All hash algorithms can be accessed via the generic MD layer.
417   For more information, see ::mbedtls_md_setup().
418 
419   For more information on supported hash algorithms, @see cc_hash_hw_limit.
420 
421   For the implementation of hash and HMAC, see md.h.
422  @{
423  @ingroup cryptocell_api
424  @}
425  */
426 
427 /*!
428   @defgroup cc_hash_hw_limit CryptoCell-312 hardware limitations for hash
429 
430   @ingroup cc_hash
431 
432   The CryptoCell-312 hardware supports accelerated hash operations for
433   the following modes:
434   <ul><li>SHA-1</li>
435   <li>SHA-224</li>
436   <li>SHA-256</li></ul>
437 
438   SHA-384 and SHA-512 operations are only supported in a
439   non-accelerated software mode.
440 
441   To support the accelerated algorithms, the following conditions
442   must be met:
443   <ul><li>The input buffer must be DMA-able.</li>
444   <li>The input buffer must be physically contingous
445   block in memory.</li>
446   <li>Buffer size must be up to 64KB.</li>
447   <li>The context must also be DMA-able, as partial
448   and final results are written to the context.</li></ul>
449  */
450 
451 /*!
452   @defgroup cc_hash_typical Typical usage of hash in CryptoCell-312
453 
454   @ingroup cc_hash
455 
456   The following is a typical hash Block operation flow
457   directly using the SHA module:
458   <ol><li>mbedtls_sha1_init().</li>
459   <li>mbedtls_sha1_starts_ret().</li>
460   <li>mbedtls_sha1_update_ret().</li>
461   <li>mbedtls_sha1_finish_ret().</li></ol>
462 
463   The following is a typical HMAC Block operation flow
464   using the MD module:
465   <ol><li>mbedtls_md_setup().</li>
466   <li>mbedtls_md_hmac_starts().</li>
467   <li>mbedtls_md_hmac_update().</li>
468   <li>mbedtls_md_hmac_finish().</li></ol>
469  */
470 
471  /*!
472  @defgroup cc_sha512_t_h CryptoCell SHA-512 truncated APIs
473 
474  @ingroup cc_hash
475 
476  @brief Contains all CryptoCell SHA-512 truncated APIs.
477 
478  */
479 
480  /*!
481  @defgroup cc_hash_defs CryptoCell hash API definitions
482  @brief Contains CryptoCell hash API definitions.
483 
484  @{
485  @ingroup cc_hash
486  @}
487 */
488 
489 /*!
490  @defgroup cc_hash_defs_proj CryptoCell hash API project-specific definitions
491  @brief Contains the project-specific hash API definitions.
492 
493  @{
494  @ingroup cc_hash
495  @}
496  */
497 
498 /*
499   ###############################MGMT APIs#####################################
500  */
501 /*!
502  @defgroup cc_management CryptoCell management APIs
503  @brief Contains CryptoCell Management APIs.
504 
505  @{
506  @ingroup cryptocell_api
507  @}
508  */
509 
510 /*!
511  @defgroup cc_management_error Specific errors of the CryptoCell Management APIs
512  @brief Contains the CryptoCell management-API error definitions.
513 
514  @{
515  @ingroup cc_management
516  @}
517 */
518 
519 /*
520   ################################PAL APIs#####################################
521  */
522 /*!
523  @defgroup cc_pal CryptoCell PAL APIs
524  @brief Groups all PAL APIs and definitions.
525 
526  @{
527  @ingroup cryptocell_api
528  @}
529  */
530 
531  /*!
532  @defgroup cc_pal_abort CryptoCell PAL abort operations
533  @brief Contains CryptoCell PAL abort operations.
534 
535  @{
536  @ingroup cc_pal
537  @}
538  */
539 
540 /*!
541  @defgroup cc_pal_apbc CryptoCell PAL APB-C APIs
542  @brief Contains PAL APB-C APIs.
543 
544  @{
545  @ingroup cc_pal
546  @}
547  */
548 
549 /*!
550  @defgroup cc_pal_sb_plat CryptoCell PAL definitions for Boot Services
551  @brief Contains CryptoCell PAL Secure Boot definitions.
552 
553  @{
554  @ingroup cc_pal
555  @}
556  */
557 
558 /*!
559  @defgroup cc_pal_init CryptoCell PAL entry or exit point APIs
560  @brief Contains PAL initialization and termination APIs.
561 
562  @{
563  @ingroup cc_pal
564  @}
565  */
566 
567 /*!
568  @defgroup cc_pal_log CryptoCell PAL logging APIs and definitions
569  @brief Contains CryptoCell PAL layer log definitions.
570 
571  @{
572  @ingroup cc_pal
573  @}
574  */
575 
576 /*!
577  @defgroup cc_pal_mem CryptoCell PAL memory operations
578  @brief Contains memory-operation functions.
579 
580  @{
581  @ingroup cc_pal
582  @}
583  */
584 
585 /*!
586  @defgroup cc_pal_barrier CryptoCell PAL memory Barrier APIs
587  @brief Contains memory-barrier implementation definitions and APIs.
588 
589  @{
590  @ingroup cc_pal_mem
591  @}
592 */
593 
594 /*!
595  @defgroup cc_pal_memmap CryptoCell PAL memory mapping APIs
596  @brief Contains memory mapping functions.
597 
598  @{
599  @ingroup cc_pal_mem
600  @}
601  */
602 
603 /*!
604  @defgroup cc_pal_mutex CryptoCell PAL mutex APIs
605  @brief Contains resource management functions.
606 
607  @{
608  @ingroup cc_pal
609  @}
610  */
611 
612 /*!
613  @defgroup cc_pal_types CryptoCell PAL platform-dependent definitions and types
614  @brief Contains CryptoCell PAL platform-dependent definitions and types.
615 
616  @{
617  @ingroup cc_pal
618  @}
619 */
620 
621 /*!
622  @defgroup cc_pal_compiler CryptoCell PAL platform-dependent compiler-related definitions
623  @brief Contains CryptoCell PAL platform-dependent compiler-related definitions.
624  @{
625  @ingroup cc_pal
626  @}
627  */
628 
629  /*!
630  @defgroup cc_pal_pm CryptoCell PAL power-management APIs
631  @brief Contains PAL power-management APIs.
632 
633  @{
634  @ingroup cc_pal
635  @}
636  */
637 
638 /*!
639  @defgroup cc_pal_trng CryptoCell PAL TRNG APIs
640  @brief Contains APIs for retrieving TRNG user parameters.
641 
642  @{
643  @ingroup cc_pal
644  @}
645  */
646 
647 /*!
648  @defgroup cc_pal_error Specific errors of the CryptoCell PAL APIs
649  @brief Contains platform-dependent PAL-API error definitions.
650 
651  @{
652  @ingroup cc_pal
653  @}
654  */
655 
656 /*
657   ################################PKA APIs#####################################
658  */
659 /*!
660  @defgroup cc_pka CryptoCell PKA APIs
661  @brief Contains all CryptoCell PKA APIs.
662 
663  @{
664  @ingroup cryptocell_api
665  @}
666  */
667 
668  /*!
669  @defgroup cc_pka_defs_hw CryptoCell PKA-specific definitions
670  @brief Contains the CryptoCell PKA API definitions.
671 
672  @{
673  @ingroup cc_pka
674  @}
675  */
676 
677 /*!
678  @defgroup cc_pka_hw_plat_defs CryptoCell PKA-API platform-dependent types and definitions
679  @brief Contains the platform-dependent definitions of the CryptoCell PKA APIs.
680 
681  @{
682  @ingroup cc_pka_defs_hw
683  @}
684  */
685 
686 
687 /*
688   ###############################PROD APIs#####################################
689  */
690 
691 /*!
692  @addtogroup prod CryptoCell production-library APIs
693  @brief Contains CryptoCell production-library APIs.
694 
695  @{
696  @ingroup cryptocell_api
697  @}
698  */
699 
700  /*!
701  @defgroup prod_mem CryptoCell production-library definitions
702  @brief Contains CryptoCell production-library definitions.
703 
704  @{
705  @ingroup prod
706  @}
707  */
708 
709 /*!
710  @defgroup cc_cmpu CryptoCell ICV production library APIs
711  @brief Contains CryptoCell ICV production library APIs.
712 
713  @{
714  @ingroup prod
715  @}
716  */
717 
718 /*!
719  @defgroup cc_dmpu CryptoCell OEM production library APIs
720  @brief Contains CryptoCell OEM production library APIs.
721 
722  @{
723  @ingroup prod
724  @}
725  */
726 
727 /*!
728  @defgroup prod_errors Specific errors of the CryptoCell production-library APIs
729  @brief Contains the CryptoCell production-library-API error definitions.
730 
731  @{
732  @ingroup prod
733  @}
734  */
735 
736 
737 /*
738   ################################RNG APIs#####################################
739  */
740 /*!
741   @defgroup rng_module CryptoCell RNG APIs
742 
743   @brief The Random Number Generator (RNG) module supports random number
744   generation, as defined in <em>NIST SP 800-90A: Recommendation for Random
745   Number Generation Using Deterministic Random Bit Generators</em>.
746   See mbedtls_ctr_drbg_random().
747 
748   The block-cipher counter-mode based deterministic random-bit
749   generator (CTR_DBRG). CryptoCell provides the source of entropy.
750 
751   For the implementation of RNG, see ctr_drbg.h.
752   @{
753   @ingroup cryptocell_api
754   @}
755  */
756 
757 /*!
758  @defgroup cc_rnd CryptoCell random-number generation APIs.
759  @brief Contains the CryptoCell random-number generation APIs.
760  @{
761  @ingroup rng_module
762  @}
763  */
764 
765 
766  /*
767   ################################RSA APIs#####################################
768  */
769 /*!
770   @defgroup rsa_module CryptoCell RSA APIs
771 
772   @ingroup cryptocell_api
773 
774   @brief RSA is an asymmetric algorithm used for secure-data transmission.
775 
776   @note As it is considered slow, it is mainly used to pass encrypted shared
777   keys for symmetric key cryptography.
778 
779   The RSA module implements the standards defined in <em>Public-Key Cryptography
780   Standards (PKCS) #1 v1.5: RSA Encryption</em> and <em>Public-Key
781   Cryptography Standards (PKCS) #1 v2.1: RSA Cryptography Specifications</em>.
782 
783   @note CryptoCell-312 does not support blinding for RSA. If a function receives
784         random pointers as input, these may be NULL.
785 
786   For the implementation of RSA, see rsa.h
787  */
788 
789 /*!
790   @defgroup cc_rsa_hw_limit CryptoCell-312 hardware limitations for RSA
791 
792   @ingroup rsa_module
793 
794   CryptoCell-312 supports the following RSA key sizes for private-public
795   operations:
796   <ul><li>256 bytes (2048 bits).</li>
797   <li>384 bytes (3072 bits).</li>
798   <li>512 bytes (4096 bits).</li></ul>
799 
800   For key-generation, CryptoCell-312 supports the following RSA key sizes:
801   <ul><li>256 bytes (2048 bits).</li>
802   <li>384 bytes (3072 bits).</li></ul>
803  */
804 
805 /*!
806   @defgroup cc_rsa_typical Typical usage of RSA in CryptoCell-312
807 
808   @ingroup rsa_module
809 
810   The following is a typical RSA operation flow:
811   <ol><li>mbedtls_rsa_init().</li>
812   <li>mbedtls_rsa_gen_key().</li>
813   <li>mbedtls_rsa_pkcs1_encrypt().</li></ol>
814 
815   @note CryptoCell-312 requires that the same \c hash_id used for
816         mbedtls_rsa_init() is used for all subsequent operations.
817         Otherwise, it returns an error.
818  */
819 
820  /*!
821   @defgroup cc_rsa_typical_ki Typical insertion of keys in CryptoCell-312
822 
823   @ingroup rsa_module
824 
825   The following is a typical RSA key-insertion flow:
826   <ol><li>mbedtls_rsa_import() or mbedtls_rsa_import_raw().</li>
827   <li>mbedtls_rsa_complete().</li></ol>
828 
829   If you insert keys that are not derived by CryptoCell-312,
830   the following restrictions apply:
831   <ul><li>The user may insert \c N, \c D, \c E, and the complete function does
832   not derive the \c P and \c Q (the CRT values).</li>
833   <li>The user may insert \c P and \c Q, and the complete function derives the
834   CRT values from that, but does not derive \c D.</li>
835   <li>Its Illegal to insert only part of the CRT key (only \c DP for example).</li>
836   <li> If all the required key parameters were inserted the function does nothing.</li></ul>
837  */
838 
839 /*
840   #############################Secure Boot APIs################################
841  */
842 /*!
843  @defgroup cc_sb CryptoCell Secure Boot and Secure Debug APIs.
844  @brief Contains all Secure Boot and Secure Debug APIs and definitions.
845 
846  @{
847  @ingroup cryptocell_api
848  @}
849  */
850 
851  /*!
852  @defgroup cc_sb_image_verifier CryptoCell Secure Boot and Secure Debug API definitions
853  @brief Contains definitions used for the Secure Boot and Secure Debug APIs.
854 
855  @{
856  @ingroup cc_sb
857  @}
858  */
859 
860  /*!
861  @defgroup cc_sb_basetypes CryptoCell Secure Boot basic type definitions
862  @brief Contains CryptoCell Secure Boot basic type definitions.
863  @{
864  @ingroup cc_sb
865  @}
866  */
867 
868 /*!
869  @defgroup cc_sbrt CryptoCell Secure Boot certificate-chain-processing APIs.
870  @brief Contains CryptoCell Secure Boot certificate-chain-processing APIs.
871 
872  @{
873  @ingroup cc_sb
874  @}
875  */
876 
877 /*!
878  @defgroup cc_sb_defs CryptoCell Secure Boot type definitions
879  @brief Contains CryptoCell Secure Boot type definitions.
880  @{
881  @ingroup cc_sb
882  @}
883  */
884 
885 /*!
886  @defgroup cc_sb_gen_defs CryptoCell Secure Boot and Secure Debug definitions and structures
887  @brief Contains CryptoCell Secure Boot and Secure Debug definitions and structures.
888 
889  @{
890  @ingroup cc_sb_defs
891  @}
892  */
893 
894 /*
895   ##############################SRAM MAP APIs###################################
896  */
897 /*!
898  @defgroup cc_sram_map CryptoCell SRAM mapping APIs
899  @brief Contains internal SRAM mapping APIs.
900 
901  @{
902  @ingroup cryptocell_api
903  @}
904  */
905 
906 
907 /*
908   ################################SRP APIs#####################################
909  */
910 /*!
911  @defgroup cc_srp CryptoCell SRP APIs
912  @brief Contains CryptoCell SRP APIs.
913 
914  @{
915  @ingroup cryptocell_api
916  @}
917  */
918 
919 /*!
920  @defgroup cc_srp_errors Specific errors of the CryptoCell SRP APIs
921  @brief Contains the CryptoCell SRP-API error definitions.
922  @{
923  @ingroup cc_srp
924  @}
925  */
926 
927 
928  /*
929   ################################UTIL APIs####################################
930  */
931 /*!
932  @defgroup cc_utils CryptoCell utility APIs
933  @brief This contains all utility APIs.
934  @{
935  @ingroup cryptocell_api
936  @}
937  */
938 
939  /*!
940  @defgroup cc_util_asset_prov CryptoCell runtime-library asset-provisioning APIs
941  @brief Contains CryptoCell runtime-library ICV and OEM asset-provisioning APIs
942  and definitions.
943 
944  @{
945  @ingroup cc_utils
946  @}
947  */
948 
949  /*!
950  @defgroup cc_utils_defs CryptoCell utility APIs general definitions
951  @brief Contains CryptoCell utility APIs general definitions.
952  @{
953  @ingroup cc_utils
954  @}
955  */
956 
957  /*!
958  @defgroup cc_utils_key_defs CryptoCell utility general key definitions
959  @brief Contains KDF API definitions.
960  @{
961  @ingroup cc_utils_key_derivation
962  @}
963  */
964 
965  /*!
966  @defgroup cc_utils_key_derivation CryptoCell utility key-derivation APIs
967  @brief Contains the CryptoCell utility key-derivation function API.
968 
969  @{
970  @ingroup cc_utils
971  @}
972  */
973 
974 /*!
975  @defgroup cc_utils_errors Specific errors of the CryptoCell utility module APIs
976  @brief Contains utility API error definitions.
977 
978  @{
979  @ingroup cc_utils
980  @}
981  */
982 
983