1 /**
2   ******************************************************************************
3   * @file    lib_crypt.h
4   * @author  Application Team
5   * @version V1.1.0
6   * @date    2019-10-28
7   * @brief   CRYPT library.
8   ******************************************************************************
9   * @attention
10   *
11   ******************************************************************************
12   */
13 #ifndef __LIB_CRYPT_H
14 #define __LIB_CRYPT_H
15 
16 #ifdef __cplusplus
17  extern "C" {
18 #endif
19 
20 #include "target.h"
21 /**************  Bits definition for CRYPT_CTRL register     ******************/
22 #define CRYPT_CTRL_MODE_MULTIPLY      (0x0U << CRYPT_CTRL_MODE_Pos)
23 #define CRYPT_CTRL_MODE_ADD           (0x1U << CRYPT_CTRL_MODE_Pos)
24 #define CRYPT_CTRL_MODE_SUB           (0x2U << CRYPT_CTRL_MODE_Pos)
25 #define CRYPT_CTRL_MODE_RSHIFT1       (0x3U << CRYPT_CTRL_MODE_Pos)
26 #define CRYPT_CTRL_LENGTH_32          (0x0U << CRYPT_CTRL_LENGTH_Pos)
27 #define CRYPT_CTRL_LENGTH_64          (0x1U << CRYPT_CTRL_LENGTH_Pos)
28 #define CRYPT_CTRL_LENGTH_96          (0x2U << CRYPT_CTRL_LENGTH_Pos)
29 #define CRYPT_CTRL_LENGTH_128         (0x3U << CRYPT_CTRL_LENGTH_Pos)
30 #define CRYPT_CTRL_LENGTH_160         (0x4U << CRYPT_CTRL_LENGTH_Pos)
31 #define CRYPT_CTRL_LENGTH_192         (0x5U << CRYPT_CTRL_LENGTH_Pos)
32 #define CRYPT_CTRL_LENGTH_224         (0x6U << CRYPT_CTRL_LENGTH_Pos)
33 #define CRYPT_CTRL_LENGTH_256         (0x7U << CRYPT_CTRL_LENGTH_Pos)
34 #define CRYPT_CTRL_LENGTH_288         (0x8U << CRYPT_CTRL_LENGTH_Pos)
35 #define CRYPT_CTRL_LENGTH_320         (0x9U << CRYPT_CTRL_LENGTH_Pos)
36 #define CRYPT_CTRL_LENGTH_352         (0xAU << CRYPT_CTRL_LENGTH_Pos)
37 #define CRYPT_CTRL_LENGTH_384         (0xBU << CRYPT_CTRL_LENGTH_Pos)
38 #define CRYPT_CTRL_LENGTH_416         (0xCU << CRYPT_CTRL_LENGTH_Pos)
39 #define CRYPT_CTRL_LENGTH_448         (0xDU << CRYPT_CTRL_LENGTH_Pos)
40 #define CRYPT_CTRL_LENGTH_480         (0xEU << CRYPT_CTRL_LENGTH_Pos)
41 #define CRYPT_CTRL_LENGTH_512         (0xFU << CRYPT_CTRL_LENGTH_Pos)
42 //Length
43 #define CRYPT_LENGTH_32    CRYPT_CTRL_LENGTH_32
44 #define CRYPT_LENGTH_64    CRYPT_CTRL_LENGTH_64
45 #define CRYPT_LENGTH_96    CRYPT_CTRL_LENGTH_96
46 #define CRYPT_LENGTH_128   CRYPT_CTRL_LENGTH_128
47 #define CRYPT_LENGTH_160   CRYPT_CTRL_LENGTH_160
48 #define CRYPT_LENGTH_192   CRYPT_CTRL_LENGTH_192
49 #define CRYPT_LENGTH_224   CRYPT_CTRL_LENGTH_224
50 #define CRYPT_LENGTH_256   CRYPT_CTRL_LENGTH_256
51 #define CRYPT_LENGTH_288   CRYPT_CTRL_LENGTH_288
52 #define CRYPT_LENGTH_320   CRYPT_CTRL_LENGTH_320
53 #define CRYPT_LENGTH_352   CRYPT_CTRL_LENGTH_352
54 #define CRYPT_LENGTH_384   CRYPT_CTRL_LENGTH_384
55 #define CRYPT_LENGTH_416   CRYPT_CTRL_LENGTH_416
56 #define CRYPT_LENGTH_448   CRYPT_CTRL_LENGTH_448
57 #define CRYPT_LENGTH_480   CRYPT_CTRL_LENGTH_480
58 #define CRYPT_LENGTH_512   CRYPT_CTRL_LENGTH_512
59 //Nostop
60 #define CRYPT_STOPCPU     (0)
61 #define CRYPT_NOSTOPCPU    CRYPT_CTRL_NOSTOP
62 
63 /* Private macros ------------------------------------------------------------*/
64 #define IS_CRYPT_ADDR(__ADDR__)  (((__ADDR__) & 0x3U) == 0U)
65 
66 #define IS_CRYPT_LENGTH(__LENGTH__)  (((__LENGTH__) == CRYPT_LENGTH_32)  ||\
67                                       ((__LENGTH__) == CRYPT_LENGTH_64)  ||\
68                                       ((__LENGTH__) == CRYPT_LENGTH_32)  ||\
69                                       ((__LENGTH__) == CRYPT_LENGTH_96)  ||\
70                                       ((__LENGTH__) == CRYPT_LENGTH_128) ||\
71                                       ((__LENGTH__) == CRYPT_LENGTH_160) ||\
72                                       ((__LENGTH__) == CRYPT_LENGTH_192) ||\
73                                       ((__LENGTH__) == CRYPT_LENGTH_224) ||\
74                                       ((__LENGTH__) == CRYPT_LENGTH_256) ||\
75                                       ((__LENGTH__) == CRYPT_LENGTH_288) ||\
76                                       ((__LENGTH__) == CRYPT_LENGTH_320) ||\
77                                       ((__LENGTH__) == CRYPT_LENGTH_352) ||\
78                                       ((__LENGTH__) == CRYPT_LENGTH_384) ||\
79                                       ((__LENGTH__) == CRYPT_LENGTH_416) ||\
80                                       ((__LENGTH__) == CRYPT_LENGTH_448) ||\
81                                       ((__LENGTH__) == CRYPT_LENGTH_480) ||\
82                                       ((__LENGTH__) == CRYPT_LENGTH_512))
83 
84 #define IS_CRYPT_NOSTOP(__NOSTOP__)  (((__NOSTOP__) == CRYPT_STOPCPU) || ((__NOSTOP__) == CRYPT_NOSTOPCPU))
85 
86 /****************************** CRYPT Instances *******************************/
87 #define IS_CRYPT_ALL_INSTANCE(INSTANCE) ((INSTANCE) == CRYPT)
88 
89 /* Exported Functions ------------------------------------------------------- */
90 void CRYPT_AddressAConfig(uint16_t AddrA);
91 void CRYPT_AddressBConfig(uint16_t AddrB);
92 void CRYPT_AddressOConfig(uint16_t AddrO);
93 uint8_t CRYPT_GetCarryBorrowBit(void);
94 void CRYPT_StartAdd(uint32_t Length, uint32_t Nostop);
95 void CRYPT_StartMultiply(uint32_t Length, uint32_t Nostop);
96 void CRYPT_StartSub(uint32_t Length, uint32_t Nostop);
97 void CRYPT_StartRShift1(uint32_t Length, uint32_t Nostop);
98 void CRYPT_WaitForLastOperation(void);
99 
100 
101 #ifdef __cplusplus
102 }
103 #endif
104 
105 #endif  /* __LIB_CRYPT_H */
106 
107 /*********************************** END OF FILE ******************************/
108