Go to the documentation of this file.
52 #ifndef __GR5XX_LL_PKC_H__
53 #define __GR5XX_LL_PKC_H__
72 #define ECC_U32_LENGTH (8U)
73 #define RSA_U32_LENGTH (64U)
150 #define LL_PKC_WORKSTAT_BUSY PKC_STAT_BUSY
157 #define LL_PKC_INTEN_DONE PKC_INT_EN_CPLT_INT_EN
158 #define LL_PKC_INTEN_ERR PKC_INT_EN_ERR_INT_EN
159 #define LL_PKC_INTEN_BAOVF PKC_INT_EN_BIAO_INT_EN
165 #define LL_PKC_BITS_LENGTH_MIN (256U)
166 #define LL_PKC_BITS_LENGTH_MAX (2048U)
167 #define LL_PKC_BIGMULTI_BITS_LENGTH_MAX (1024U)
173 #define LL_PKC_operation_mode_MULTIPLY (0x00000000U)
174 #define LL_PKC_operation_mode_INVERTION (1UL << PKC_SW_CTRL_MODE_POS)
175 #define LL_PKC_operation_mode_ADD (2UL << PKC_SW_CTRL_MODE_POS)
176 #define LL_PKC_operation_mode_SUB (3UL << PKC_SW_CTRL_MODE_POS)
177 #define LL_PKC_operation_mode_COMPARE (4UL << PKC_SW_CTRL_MODE_POS)
178 #define LL_PKC_operation_mode_LEFTSHIFT (5UL << PKC_SW_CTRL_MODE_POS)
179 #define LL_PKC_operation_mode_BIGINTEGERMULTIPLY (6UL << PKC_SW_CTRL_MODE_POS)
180 #define LL_PKC_operation_mode_BIGINTEGERADD (7UL << PKC_SW_CTRL_MODE_POS)
190 #define LL_ECC_CURVE_DEFAULT_CONFIG LL_ECC_CURVE_SECP256R1_CONFIG
195 #define LL_ECC_CURVE_SECP256R1_CONFIG \
197 .A = {0xFFFFFFFC, 0x00000004, 0x00000000, 0x00000000, 0x00000003, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFC}, \
198 .B = {0xDC30061D, 0x04874834, 0xE5A220AB, 0xF7212ED6, 0xACF005CD, 0x78843090, 0xD89CDF62, 0x29C4BDDF}, \
199 .P = {0xFFFFFFFF, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF}, \
200 .PRSquare = {0x00000004, 0xFFFFFFFD, 0xFFFFFFFF, 0xFFFFFFFE, 0xFFFFFFFB, 0xFFFFFFFF, 0x00000000, 0x00000003}, \
202 .N = {0xFFFFFFFF, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xBCE6FAAD, 0xA7179E84, 0xF3B9CAC2, 0xFC632551}, \
203 .NRSquare = {0x66E12D94, 0xF3D95620, 0x2845B239, 0x2B6BEC59, 0x4699799C, 0x49BD6FA6, 0x83244C95, 0xBE79EEA2}, \
204 .ConstN = 0xEE00BC4F, \
206 .G.X = {0x6B17D1F2, 0xE12C4247, 0xF8BCE6E5, 0x63A440F2, 0x77037D81, 0x2DEB33A0, 0xF4A13945, 0xD898C296}, \
207 .G.Y = {0x4FE342E2, 0xFE1A7F9B, 0x8EE7EB4A, 0x7C0F9E16, 0x2BCE3357, 0x6B315ECE, 0xCBB64068, 0x37BF51F5}, \
213 #define LL_ECC_CURVE_SECP256K1_CONFIG \
215 .A = {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, \
216 .B = {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000007, 0x00001AB7}, \
217 .P = {0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFE, 0xFFFFFC2F}, \
218 .PRSquare = {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x000007A2, 0x000E90A1}, \
219 .ConstP = 0XD2253531, \
220 .N = {0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFE, 0xBAAEDCE6, 0xAF48A03B, 0xBFD25E8C, 0xD0364141}, \
221 .NRSquare = {0x9D671CD5, 0x81C69BC5, 0xE697F5E4, 0x5BCD07C6, 0x741496C2, 0x0E7CF878, 0x896CF214, 0x67D7D140}, \
222 .ConstN = 0X5588B13F, \
224 .G.X = {0x79BE667E, 0xF9DCBBAC, 0x55A06295, 0xCE870B07, 0x029BFCDB, 0x2DCE28D9, 0x59F2815B, 0x16F81798}, \
225 .G.Y = {0x483ADA77, 0x26A3C465, 0x5DA4FBFC, 0x0E1108A8, 0xFD17B448, 0xA6855419, 0x9C47D08F, 0xFB10D4B8}, \
248 #define LL_PKC_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, (__VALUE__))
256 #define LL_PKC_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__)
285 SET_BITS(PKCx->CTRL, PKC_CTRL_EN);
300 CLEAR_BITS(PKCx->CTRL, PKC_CTRL_EN);
315 return (READ_BITS(PKCx->CTRL, PKC_CTRL_EN) == (PKC_CTRL_EN));
330 SET_BITS(PKCx->CTRL, PKC_CTRL_START);
345 CLEAR_BITS(PKCx->CTRL, PKC_CTRL_START);
360 return (READ_BITS(PKCx->CTRL, PKC_CTRL_START) == (PKC_CTRL_START));
375 SET_BITS(PKCx->CTRL, PKC_CTRL_SW_CTRL);
390 CLEAR_BITS(PKCx->CTRL, PKC_CTRL_SW_CTRL);
405 return (READ_BITS(PKCx->CTRL, PKC_CTRL_SW_CTRL) == (PKC_CTRL_SW_CTRL));
420 SET_BITS(PKCx->CTRL, PKC_CTRL_RST);
435 CLEAR_BITS(PKCx->CTRL, PKC_CTRL_RST);
450 return (READ_BITS(PKCx->CTRL, PKC_CTRL_RST) == (PKC_CTRL_RST));
466 MODIFY_REG(PKCx->CFG0, PKC_CFG0_K_POINT, pointer << PKC_CFG0_K_POINT_POS);
481 return (READ_BITS(PKCx->CFG0, PKC_CFG0_K_POINT) >> PKC_CFG0_K_POINT_POS);
497 MODIFY_REG(PKCx->CFG0, PKC_CFG0_R_POINT, pointer << PKC_CFG0_R_POINT_POS);
512 return (READ_BITS(PKCx->CFG0, PKC_CFG0_R_POINT) >> PKC_CFG0_R_POINT_POS);
528 MODIFY_REG(PKCx->CFG1, PKC_CFG1_P_POINT, pointer << PKC_CFG1_P_POINT_POS);
543 return (READ_BITS(PKCx->CFG1, PKC_CFG1_P_POINT) >> PKC_CFG1_P_POINT_POS);
559 MODIFY_REG(PKCx->CFG1, PKC_CFG1_R2_POINT, pointer << PKC_CFG1_R2_POINT_POS);
574 return (READ_BITS(PKCx->CFG1, PKC_CFG1_R2_POINT) >> PKC_CFG1_R2_POINT_POS);
590 MODIFY_REG(PKCx->CFG2, PKC_CFG2_GX_POINT, pointer << PKC_CFG2_GX_POINT_POS);
605 return (READ_BITS(PKCx->CFG2, PKC_CFG2_GX_POINT) >> PKC_CFG2_GX_POINT_POS);
621 MODIFY_REG(PKCx->CFG2, PKC_CFG2_GY_POINT, pointer << PKC_CFG2_GY_POINT_POS);
636 return (READ_BITS(PKCx->CFG2, PKC_CFG2_GY_POINT) >> PKC_CFG2_GY_POINT_POS);
652 MODIFY_REG(PKCx->CFG3, PKC_CFG3_GZ_POINT, pointer << PKC_CFG3_GZ_POINT_POS);
667 return (READ_BITS(PKCx->CFG3, PKC_CFG3_GZ_POINT) >> PKC_CFG3_GZ_POINT_POS);
683 MODIFY_REG(PKCx->CFG3, PKC_CFG3_R0X_POINT, pointer << PKC_CFG3_R0X_POINT_POS);
698 return (READ_BITS(PKCx->CFG3, PKC_CFG3_R0X_POINT) >> PKC_CFG3_R0X_POINT_POS);
714 MODIFY_REG(PKCx->CFG4, PKC_CFG4_R0Y_POINT, pointer << PKC_CFG4_R0Y_POINT_POS);
729 return (READ_BITS(PKCx->CFG4, PKC_CFG4_R0Y_POINT) >> PKC_CFG4_R0Y_POINT_POS);
745 MODIFY_REG(PKCx->CFG4, PKC_CFG4_R0Z_POINT, pointer << PKC_CFG4_R0Z_POINT_POS);
760 return (READ_BITS(PKCx->CFG4, PKC_CFG4_R0Z_POINT) >> PKC_CFG4_R0Z_POINT_POS);
776 MODIFY_REG(PKCx->CFG5, PKC_CFG5_R1X_POINT, pointer << PKC_CFG5_R1X_POINT_POS);
791 return (READ_BITS(PKCx->CFG5, PKC_CFG5_R1X_POINT) >> PKC_CFG5_R1X_POINT_POS);
807 MODIFY_REG(PKCx->CFG5, PKC_CFG5_R1Y_POINT, pointer << PKC_CFG5_R1Y_POINT_POS);
822 return (READ_BITS(PKCx->CFG5, PKC_CFG5_R1Y_POINT) >> PKC_CFG5_R1Y_POINT_POS);
838 MODIFY_REG(PKCx->CFG6, PKC_CFG6_R1Z_POINT, pointer << PKC_CFG6_R1Z_POINT_POS);
853 return (READ_BITS(PKCx->CFG6, PKC_CFG6_R1Z_POINT) >> PKC_CFG6_R1Z_POINT_POS);
869 MODIFY_REG(PKCx->CFG6, PKC_CFG6_TEMP1_POINT, pointer << PKC_CFG6_TEMP1_POINT_POS);
884 return (READ_BITS(PKCx->CFG6, PKC_CFG6_TEMP1_POINT) >> PKC_CFG6_TEMP1_POINT_POS);
900 MODIFY_REG(PKCx->CFG7, PKC_CFG7_TEMP2_POINT, pointer << PKC_CFG7_TEMP2_POINT_POS);
915 return (READ_BITS(PKCx->CFG7, PKC_CFG7_TEMP2_POINT) >> PKC_CFG7_TEMP2_POINT_POS);
931 MODIFY_REG(PKCx->CFG7, PKC_CFG7_TEMP3_POINT, pointer << PKC_CFG7_TEMP3_POINT_POS);
946 return (READ_BITS(PKCx->CFG7, PKC_CFG7_TEMP3_POINT) >> PKC_CFG7_TEMP3_POINT_POS);
962 MODIFY_REG(PKCx->CFG8, PKC_CFG8_TEMP4_POINT, pointer << PKC_CFG8_TEMP4_POINT_POS);
977 return (READ_BITS(PKCx->CFG8, PKC_CFG8_TEMP4_POINT) >> PKC_CFG8_TEMP4_POINT_POS);
993 MODIFY_REG(PKCx->CFG8, PKC_CFG8_TEMP5_POINT, pointer << PKC_CFG8_TEMP5_POINT_POS);
1008 return (READ_BITS(PKCx->CFG8, PKC_CFG8_TEMP5_POINT) >> PKC_CFG8_TEMP5_POINT_POS);
1024 MODIFY_REG(PKCx->CFG9, PKC_CFG9_TEMP6_POINT, pointer << PKC_CFG9_TEMP6_POINT_POS);
1039 return (READ_BITS(PKCx->CFG9, PKC_CFG9_TEMP6_POINT) >> PKC_CFG9_TEMP6_POINT_POS);
1055 MODIFY_REG(PKCx->CFG9, PKC_CFG9_CONT1_POINT, pointer << PKC_CFG9_CONT1_POINT_POS);
1070 return (READ_BITS(PKCx->CFG9, PKC_CFG9_CONT1_POINT) >> PKC_CFG9_CONT1_POINT_POS);
1086 MODIFY_REG(PKCx->CFG10, PKC_CFG10_X1_POINT, pointer << PKC_CFG10_X1_POINT_POS);
1101 return (READ_BITS(PKCx->CFG10, PKC_CFG10_X1_POINT) >> PKC_CFG10_X1_POINT_POS);
1117 MODIFY_REG(PKCx->CFG10, PKC_CFG10_X2_POINT, pointer << PKC_CFG10_X2_POINT_POS);
1132 return (READ_BITS(PKCx->CFG10, PKC_CFG10_X2_POINT) >> PKC_CFG10_X2_POINT_POS);
1148 MODIFY_REG(PKCx->CFG11, PKC_CFG11_MIT_POINT, pointer << PKC_CFG11_MIT_POINT_POS);
1163 return (READ_BITS(PKCx->CFG11, PKC_CFG11_MIT_POINT) >> PKC_CFG11_MIT_POINT_POS);
1179 MODIFY_REG(PKCx->CFG11, PKC_CFG11_KT_POINT, pointer << PKC_CFG11_KT_POINT_POS);
1194 return (READ_BITS(PKCx->CFG11, PKC_CFG11_KT_POINT) >> PKC_CFG11_KT_POINT_POS);
1210 MODIFY_REG(PKCx->CFG12, PKC_CFG12_A_POINT, pointer << PKC_CFG12_A_POINT_POS);
1225 return (READ_BITS(PKCx->CFG12, PKC_CFG12_A_POINT) >> PKC_CFG12_A_POINT_POS);
1241 MODIFY_REG(PKCx->CFG12, PKC_CFG12_B_POINT, pointer << PKC_CFG12_B_POINT_POS);
1256 return (READ_BITS(PKCx->CFG12, PKC_CFG12_B_POINT) >> PKC_CFG12_B_POINT_POS);
1272 WRITE_REG(PKCx->CFG13, ConstP);
1287 return (READ_REG(PKCx->CFG13));
1302 SET_BITS(PKCx->SW_CTRL, PKC_SW_CTRL_START);
1317 CLEAR_BITS(PKCx->SW_CTRL, PKC_SW_CTRL_START);
1332 return (READ_BITS(PKCx->SW_CTRL, PKC_SW_CTRL_START) == (PKC_SW_CTRL_START));
1356 MODIFY_REG(PKCx->SW_CTRL, PKC_SW_CTRL_MODE, operation_mode);
1379 return (READ_BITS(PKCx->SW_CTRL, PKC_SW_CTRL_MODE));
1394 SET_BITS(PKCx->SW_CTRL, PKC_SW_CTRL_DM_EN);
1409 CLEAR_BITS(PKCx->SW_CTRL, PKC_SW_CTRL_DM_EN);
1424 return (READ_BITS(PKCx->SW_CTRL, PKC_SW_CTRL_DM_EN) == (PKC_SW_CTRL_DM_EN));
1439 SET_BITS(PKCx->SW_CTRL, PKC_SW_CTRL_RCG_EN);
1454 CLEAR_BITS(PKCx->SW_CTRL, PKC_SW_CTRL_RCG_EN);
1469 return (READ_BITS(PKCx->SW_CTRL, PKC_SW_CTRL_RCG_EN) == (PKC_SW_CTRL_RCG_EN));
1485 MODIFY_REG(PKCx->SW_CFG0, PKC_SW_CFG0_MMA_POINT, pointer << PKC_SW_CFG0_MMA_POINT_POS);
1500 return (READ_BITS(PKCx->SW_CFG0, PKC_SW_CFG0_MMA_POINT) >> PKC_SW_CFG0_MMA_POINT_POS);
1516 MODIFY_REG(PKCx->SW_CFG0, PKC_SW_CFG0_MMB_POINT, pointer << PKC_SW_CFG0_MMB_POINT_POS);
1531 return (READ_BITS(PKCx->SW_CFG0, PKC_SW_CFG0_MMB_POINT) >> PKC_SW_CFG0_MMB_POINT_POS);
1547 MODIFY_REG(PKCx->SW_CFG1, PKC_SW_CFG1_MMP_POINT, pointer << PKC_SW_CFG1_MMP_POINT_POS);
1562 return (READ_BITS(PKCx->SW_CFG1, PKC_SW_CFG1_MMP_POINT) >> PKC_SW_CFG1_MMP_POINT_POS);
1578 MODIFY_REG(PKCx->SW_CFG1, PKC_SW_CFG1_MMC_POINT, pointer << PKC_SW_CFG1_MMC_POINT_POS);
1593 return (READ_BITS(PKCx->SW_CFG1, PKC_SW_CFG1_MMC_POINT) >> PKC_SW_CFG1_MMC_POINT_POS);
1609 MODIFY_REG(PKCx->SW_CFG2, PKC_SW_CFG2_MASA_POINT, pointer << PKC_SW_CFG2_MASA_POINT_POS);
1624 return (READ_BITS(PKCx->SW_CFG2, PKC_SW_CFG2_MASA_POINT) >> PKC_SW_CFG2_MASA_POINT_POS);
1640 MODIFY_REG(PKCx->SW_CFG2, PKC_SW_CFG2_MASB_POINT, pointer << PKC_SW_CFG2_MASB_POINT_POS);
1655 return (READ_BITS(PKCx->SW_CFG2, PKC_SW_CFG2_MASB_POINT) >> PKC_SW_CFG2_MASB_POINT_POS);
1671 MODIFY_REG(PKCx->SW_CFG3, PKC_SW_CFG3_MASP_POINT, pointer << PKC_SW_CFG3_MASP_POINT_POS);
1686 return (READ_BITS(PKCx->SW_CFG3, PKC_SW_CFG3_MASP_POINT) >> PKC_SW_CFG3_MASP_POINT_POS);
1702 MODIFY_REG(PKCx->SW_CFG3, PKC_SW_CFG3_MASC_POINT, pointer << PKC_SW_CFG3_MASC_POINT_POS);
1717 return (READ_BITS(PKCx->SW_CFG3, PKC_SW_CFG3_MASC_POINT) >> PKC_SW_CFG3_MASC_POINT_POS);
1733 MODIFY_REG(PKCx->SW_CFG4, PKC_SW_CFG4_MIU_POINT, pointer << PKC_SW_CFG4_MIU_POINT_POS);
1748 return (READ_BITS(PKCx->SW_CFG4, PKC_SW_CFG4_MIU_POINT) >> PKC_SW_CFG4_MIU_POINT_POS);
1764 MODIFY_REG(PKCx->SW_CFG4, PKC_SW_CFG4_MIV_POINT, pointer << PKC_SW_CFG4_MIV_POINT_POS);
1779 return (READ_BITS(PKCx->SW_CFG4, PKC_SW_CFG4_MIV_POINT) >> PKC_SW_CFG4_MIV_POINT_POS);
1795 MODIFY_REG(PKCx->SW_CFG5, PKC_SW_CFG5_MIX1_POINT, pointer << PKC_SW_CFG5_MIX1_POINT_POS);
1810 return (READ_BITS(PKCx->SW_CFG5, PKC_SW_CFG5_MIX1_POINT) >> PKC_SW_CFG5_MIX1_POINT_POS);
1826 MODIFY_REG(PKCx->SW_CFG5, PKC_SW_CFG5_MIX2_POINT, pointer << PKC_SW_CFG5_MIX2_POINT_POS);
1841 return (READ_BITS(PKCx->SW_CFG5, PKC_SW_CFG5_MIX2_POINT) >> PKC_SW_CFG5_MIX2_POINT_POS);
1857 MODIFY_REG(PKCx->SW_CFG6, PKC_SW_CFG6_MIT_POINT, pointer << PKC_SW_CFG6_MIT_POINT_POS);
1872 return (READ_BITS(PKCx->SW_CFG6, PKC_SW_CFG6_MIT_POINT) >> PKC_SW_CFG6_MIT_POINT_POS);
1888 MODIFY_REG(PKCx->SW_CFG7, PKC_SW_CFG7_LEN, (WordLength >> 5) - 1);
1903 return ((READ_BITS(PKCx->SW_CFG7, PKC_SW_CFG7_LEN) + 1) << 5);
1918 return (READ_REG(PKCx->SW_CFG8) & PKC_SW_CFG8_MIK_OUT);
1934 WRITE_REG(PKCx->SW_CFG9, seed);
1949 return (READ_REG(PKCx->SW_CFG9));
1965 MODIFY_REG(PKCx->SW_CFG10, PKC_SW_CFG10_BMA_POINT, pointer << PKC_SW_CFG10_BMA_POINT_POS);
1980 return (READ_BITS(PKCx->SW_CFG10, PKC_SW_CFG10_BMA_POINT) >> PKC_SW_CFG10_BMA_POINT_POS);
1996 MODIFY_REG(PKCx->SW_CFG10, PKC_SW_CFG10_BMB_POINT, pointer << PKC_SW_CFG10_BMB_POINT_POS);
2011 return (READ_BITS(PKCx->SW_CFG10, PKC_SW_CFG10_BMB_POINT) >> PKC_SW_CFG10_BMB_POINT_POS);
2027 MODIFY_REG(PKCx->SW_CFG11, PKC_SW_CFG11_BMC_POINT, pointer << PKC_SW_CFG11_BMC_POINT_POS);
2042 return (READ_BITS(PKCx->SW_CFG11, PKC_SW_CFG11_BMC_POINT) >> PKC_SW_CFG11_BMC_POINT_POS);
2058 MODIFY_REG(PKCx->SW_CFG11, PKC_SW_CFG11_BAA_POINT, pointer << PKC_SW_CFG11_BAA_POINT_POS);
2073 return (READ_BITS(PKCx->SW_CFG11, PKC_SW_CFG11_BAA_POINT) >> PKC_SW_CFG11_BAA_POINT_POS);
2089 MODIFY_REG(PKCx->SW_CFG12, PKC_SW_CFG12_BAB_POINT, pointer << PKC_SW_CFG12_BAB_POINT_POS);
2104 return (READ_BITS(PKCx->SW_CFG12, PKC_SW_CFG12_BAB_POINT) >> PKC_SW_CFG12_BAB_POINT_POS);
2120 MODIFY_REG(PKCx->SW_CFG12, PKC_SW_CFG12_BAC_POINT, pointer << PKC_SW_CFG12_BAC_POINT_POS);
2135 return (READ_BITS(PKCx->SW_CFG12, PKC_SW_CFG12_BAC_POINT) >> PKC_SW_CFG12_BAC_POINT_POS);
2151 WRITE_REG(PKCx->SW_CFG13, seed);
2166 return (READ_REG(PKCx->SW_CFG13));
2187 SET_BITS(PKCx->INT_EN, PKC_INT_EN_CPLT_INT_EN);
2202 SET_BITS(PKCx->INT_EN, PKC_INT_EN_ERR_INT_EN);
2217 SET_BITS(PKCx->INT_EN, PKC_INT_EN_BIAO_INT_EN);
2232 CLEAR_BITS(PKCx->INT_EN, PKC_INT_EN_CPLT_INT_EN);
2247 CLEAR_BITS(PKCx->INT_EN, PKC_INT_EN_ERR_INT_EN);
2262 CLEAR_BITS(PKCx->INT_EN, PKC_INT_EN_BIAO_INT_EN);
2277 return (READ_BITS(PKCx->INT_EN, PKC_INT_EN_CPLT_INT_EN) == PKC_INT_EN_CPLT_INT_EN);
2292 return (READ_BITS(PKCx->INT_EN, PKC_INT_EN_ERR_INT_EN) == PKC_INT_EN_ERR_INT_EN);
2307 return (READ_BITS(PKCx->INT_EN, PKC_INT_EN_BIAO_INT_EN) == PKC_INT_EN_BIAO_INT_EN);
2328 return (READ_BITS(PKCx->INT_STAT, PKC_INT_STAT_CPLT_INT_FLAG) == PKC_INT_STAT_CPLT_INT_FLAG);
2343 return (READ_BITS(PKCx->INT_STAT, PKC_INT_STAT_ERR_INT_FLAG) == PKC_INT_STAT_ERR_INT_FLAG);
2358 return (READ_BITS(PKCx->INT_STAT, PKC_INT_STAT_BIAO_INT_FLAG) == PKC_INT_STAT_BIAO_INT_FLAG);
2373 SET_BITS(PKCx->INT_STAT, PKC_INT_STAT_CPLT_INT_FLAG);
2388 SET_BITS(PKCx->INT_STAT, PKC_INT_STAT_ERR_INT_FLAG);
2403 SET_BITS(PKCx->INT_STAT, PKC_INT_STAT_BIAO_INT_FLAG);
2418 return (READ_BITS(PKCx->STAT, PKC_STAT_BUSY) == PKC_STAT_BUSY);
__STATIC_INLINE uint32_t ll_pkc_is_enabled_hardware_start(pkc_regs_t *PKCx)
Indicate whether the pkc start in hardware mode is enabled.
__STATIC_INLINE void ll_pkc_enable_it_err(pkc_regs_t *PKCx)
Enable the operation error interrupt.
__STATIC_INLINE uint32_t ll_pkc_get_bm_a_pointer(pkc_regs_t *PKCx)
Get big integer operand A pointer in pkc sram.
__STATIC_INLINE uint32_t ll_pkc_get_tmp6_pointer(pkc_regs_t *PKCx)
Get PKC parameter Tmp6 pointer in pkc sram.
__STATIC_INLINE void ll_pkc_set_k_pointer(pkc_regs_t *PKCx, uint32_t pointer)
Set PKC parameter k pointer in pkc sram.
__STATIC_INLINE uint32_t ll_pkc_get_tmp1_pointer(pkc_regs_t *PKCx)
Get PKC parameter Tmp1 pointer in pkc sram.
__STATIC_INLINE void ll_pkc_set_tmpk_pointer(pkc_regs_t *PKCx, uint32_t pointer)
Set PKC parameter TmpK pointer in pkc sram.
__STATIC_INLINE uint32_t ll_pkc_get_gy_pointer(pkc_regs_t *PKCx)
Get PKC parameter Gy pointer in pkc sram.
__STATIC_INLINE void ll_pkc_disable_software(pkc_regs_t *PKCx)
Disable pkc software mode.
__STATIC_INLINE uint32_t ll_pkc_get_tmpk_pointer(pkc_regs_t *PKCx)
Get PKC parameter TmpK pointer in pkc sram.
__STATIC_INLINE uint32_t ll_pkc_get_random_clock_gating_seed(pkc_regs_t *PKCx)
Get random clock gating seed.
__STATIC_INLINE uint32_t ll_pkc_is_enabled(pkc_regs_t *PKCx)
Indicate whether the pkc is enabled.
__STATIC_INLINE uint32_t ll_pkc_get_p_pointer(pkc_regs_t *PKCx)
Get PKC parameter p pointer in pkc sram.
__STATIC_INLINE uint32_t ll_pkc_get_gx_pointer(pkc_regs_t *PKCx)
Get PKC parameter Gx pointer in pkc sram.
__STATIC_INLINE void ll_pkc_clear_flag_it_done(pkc_regs_t *PKCx)
Clear the operation done interrupt flag.
__STATIC_INLINE void ll_pkc_set_mm_a_pointer(pkc_regs_t *PKCx, uint32_t pointer)
Set modular multiplication parameter A pointer in pkc sram.
__STATIC_INLINE void ll_pkc_set_mi_x1_pointer(pkc_regs_t *PKCx, uint32_t pointer)
Set modular invertion parameter X1 pointer in pkc sram.
__STATIC_INLINE void ll_pkc_set_operation_word_length(pkc_regs_t *PKCx, uint32_t WordLength)
Set operation word length-bits.
__STATIC_INLINE uint32_t ll_pkc_get_r0z_pointer(pkc_regs_t *PKCx)
Get PKC parameter R0z pointer in pkc sram.
__STATIC_INLINE uint32_t ll_pkc_get_mitmp_pointer(pkc_regs_t *PKCx)
Get PKC parameter MITmp pointer in pkc sram.
__STATIC_INLINE void ll_pkc_set_mitmp_pointer(pkc_regs_t *PKCx, uint32_t pointer)
Set PKC parameter MITmp pointer in pkc sram.
__STATIC_INLINE uint32_t ll_pkc_get_mm_a_pointer(pkc_regs_t *PKCx)
Get modular multiplication parameter A pointer in pkc sram.
__STATIC_INLINE void ll_pkc_set_gx_pointer(pkc_regs_t *PKCx, uint32_t pointer)
Set PKC parameter Gx pointer in pkc sram.
__STATIC_INLINE uint32_t ll_pkc_get_constp(pkc_regs_t *PKCx)
Get constant value for montgomery multiply in pkc sram.
__STATIC_INLINE void ll_pkc_set_r_pointer(pkc_regs_t *PKCx, uint32_t pointer)
Set PKC parameter r pointer in pkc sram.
struct _ll_ecc_curve_init ll_ecc_curve_init_t
LL PKC ECC P-256 Elliptic Curve Init Structure definition.
__STATIC_INLINE uint32_t ll_pkc_get_rsq_pointer(pkc_regs_t *PKCx)
Get PKC parameter R^2 pointer in pkc sram.
__STATIC_INLINE void ll_pkc_enable_dummy_multi(pkc_regs_t *PKCx)
Enable Dummy Multi in software mode.
__STATIC_INLINE uint32_t ll_pkc_is_enabled_reset(pkc_regs_t *PKCx)
Indicate whether the pkc reset is enabled.
__STATIC_INLINE void ll_pkc_disable_random_clock_gating(pkc_regs_t *PKCx)
Disable Random Clock Gating in software mode.
__STATIC_INLINE void ll_pkc_set_mm_b_pointer(pkc_regs_t *PKCx, uint32_t pointer)
Set modular multiplication parameter B pointer in pkc sram.
__STATIC_INLINE void ll_pkc_set_mas_p_pointer(pkc_regs_t *PKCx, uint32_t pointer)
Set modular add/sub parameter P pointer in pkc sram.
__STATIC_INLINE uint32_t ll_pkc_get_r1z_pointer(pkc_regs_t *PKCx)
Get PKC parameter R1z pointer in pkc sram.
__STATIC_INLINE uint32_t ll_pkc_get_tmp2_pointer(pkc_regs_t *PKCx)
Get PKC parameter Tmp2 pointer in pkc sram.
__STATIC_INLINE uint32_t ll_pkc_get_mi_x2_pointer(pkc_regs_t *PKCx)
Get modular invertion parameter X1 pointer in pkc sram.
__STATIC_INLINE void ll_pkc_set_r1z_pointer(pkc_regs_t *PKCx, uint32_t pointer)
Set PKC parameter R1z pointer in pkc sram.
__STATIC_INLINE uint32_t ll_pkc_get_ba_c_pointer(pkc_regs_t *PKCx)
Get big integer result C pointer in pkc sram.
ll_ecc_curve_init_t * p_ecc_curve
uint32_t A[ECC_U32_LENGTH]
__STATIC_INLINE void ll_pkc_set_bm_a_pointer(pkc_regs_t *PKCx, uint32_t pointer)
Set big integer operand A pointer in pkc sram.
__STATIC_INLINE uint32_t ll_pkc_is_enable_it_big_add_overflow(pkc_regs_t *PKCx)
Indicate whether the big integer overflow interrupt is enable.
__STATIC_INLINE uint32_t ll_pkc_get_mas_b_pointer(pkc_regs_t *PKCx)
Get modular add/sub parameter B pointer in pkc sram.
__STATIC_INLINE void ll_pkc_disable_it_big_add_overflow(pkc_regs_t *PKCx)
Disable the big integer overflow interrupt.
__STATIC_INLINE void ll_pkc_set_x1_pointer(pkc_regs_t *PKCx, uint32_t pointer)
Set PKC parameter X1 pointer in pkc sram.
__STATIC_INLINE void ll_pkc_enable_software_start(pkc_regs_t *PKCx)
Enable pkc start in software mode.
__STATIC_INLINE void ll_pkc_set_mm_c_pointer(pkc_regs_t *PKCx, uint32_t pointer)
Set modular multiplication parameter C pointer in pkc sram.
__STATIC_INLINE void ll_pkc_set_ecc_b_pointer(pkc_regs_t *PKCx, uint32_t pointer)
Set ECC parameter B pointer in pkc sram.
__STATIC_INLINE void ll_pkc_set_mas_c_pointer(pkc_regs_t *PKCx, uint32_t pointer)
Set modular add/sub parameter C pointer in pkc sram.
__STATIC_INLINE uint32_t ll_pkc_get_r1y_pointer(pkc_regs_t *PKCx)
Get PKC parameter R1y pointer in pkc sram.
__STATIC_INLINE uint32_t ll_pkc_get_r0y_pointer(pkc_regs_t *PKCx)
Get PKC parameter R0y pointer in pkc sram.
__STATIC_INLINE void ll_pkc_set_mi_v_pointer(pkc_regs_t *PKCx, uint32_t pointer)
Set modular invertion parameter V pointer in pkc sram.
__STATIC_INLINE uint32_t ll_pkc_get_bm_b_pointer(pkc_regs_t *PKCx)
Get big integer operand B pointer in pkc sram.
LL PKC ECC P-256 Elliptic Curve Init Structure definition.
LL PKC Init Structure definition.
__STATIC_INLINE void ll_pkc_set_x2_pointer(pkc_regs_t *PKCx, uint32_t pointer)
Set PKC parameter X2 pointer in pkc sram.
__STATIC_INLINE uint32_t ll_pkc_is_action_flag_busy(pkc_regs_t *PKCx)
Indicate whether the busy flag is set.
__STATIC_INLINE uint32_t ll_pkc_get_gz_pointer(pkc_regs_t *PKCx)
Get PKC parameter Gz pointer in pkc sram.
__STATIC_INLINE void ll_pkc_set_r1y_pointer(pkc_regs_t *PKCx, uint32_t pointer)
Set PKC parameter R1y pointer in pkc sram.
__STATIC_INLINE void ll_pkc_set_random_clock_gating_seed(pkc_regs_t *PKCx, uint32_t seed)
Set random clock gating seed.
uint32_t PRSquare[ECC_U32_LENGTH]
CMSIS Cortex-M# Core Peripheral Access Layer Header File for Device GR5405.
__STATIC_INLINE void ll_pkc_disable_it_done(pkc_regs_t *PKCx)
Disable the operation done interrupt.
__STATIC_INLINE void ll_pkc_set_swmi_tmp_pointer(pkc_regs_t *PKCx, uint32_t pointer)
Set modular invertion parameter Tmp pointer in pkc sram.
__STATIC_INLINE uint32_t ll_pkc_get_mas_c_pointer(pkc_regs_t *PKCx)
Get modular add/sub parameter C pointer in pkc sram.
__STATIC_INLINE uint32_t ll_pkc_get_operation_word_length(pkc_regs_t *PKCx)
Get operation word length-bits.
__STATIC_INLINE uint32_t ll_pkc_get_mm_c_pointer(pkc_regs_t *PKCx)
Get modular multiplication parameter C pointer in pkc sram.
__STATIC_INLINE uint32_t ll_pkc_get_mas_p_pointer(pkc_regs_t *PKCx)
Get modular add/sub parameter P pointer in pkc sram.
__STATIC_INLINE uint32_t ll_pkc_is_action_flag_it_big_add_overflow(pkc_regs_t *PKCx)
Indicate whether the big integer overflow interrupt is pending.
__STATIC_INLINE void ll_pkc_set_r1x_pointer(pkc_regs_t *PKCx, uint32_t pointer)
Set PKC parameter R1x pointer in pkc sram.
__STATIC_INLINE void ll_pkc_set_tmp1_pointer(pkc_regs_t *PKCx, uint32_t pointer)
Set PKC parameter Tmp1 pointer in pkc sram.
__STATIC_INLINE void ll_pkc_set_tmp4_pointer(pkc_regs_t *PKCx, uint32_t pointer)
Set PKC parameter Tmp4 pointer in pkc sram.
__STATIC_INLINE void ll_pkc_set_tmp2_pointer(pkc_regs_t *PKCx, uint32_t pointer)
Set PKC parameter Tmp2 pointer in pkc sram.
__STATIC_INLINE void ll_pkc_set_constant1_pointer(pkc_regs_t *PKCx, uint32_t pointer)
Set PKC parameter Constant1 pointer in pkc sram.
__STATIC_INLINE uint32_t ll_pkc_get_ecc_b_pointer(pkc_regs_t *PKCx)
Get ECC parameter B pointer in pkc sram.
__STATIC_INLINE void ll_pkc_set_mm_p_pointer(pkc_regs_t *PKCx, uint32_t pointer)
Set modular multiplication parameter P pointer in pkc sram.
__STATIC_INLINE uint32_t ll_pkc_get_mm_b_pointer(pkc_regs_t *PKCx)
Get modular multiplication parameter B pointer in pkc sram.
__STATIC_INLINE uint32_t ll_pkc_get_r_pointer(pkc_regs_t *PKCx)
Get PKC parameter r pointer in pkc sram.
__STATIC_INLINE uint32_t ll_pkc_get_tmp4_pointer(pkc_regs_t *PKCx)
Get PKC parameter Tmp4 pointer in pkc sram.
__STATIC_INLINE void ll_pkc_disable_reset(pkc_regs_t *PKCx)
Disable pkc reset.
__STATIC_INLINE void ll_pkc_set_mi_x2_pointer(pkc_regs_t *PKCx, uint32_t pointer)
Set modular invertion parameter X1 pointer in pkc sram.
__STATIC_INLINE void ll_pkc_enable(pkc_regs_t *PKCx)
Enable pkc.
__STATIC_INLINE uint32_t ll_pkc_get_operation_mode(pkc_regs_t *PKCx)
Get operation mode in software mode.
uint32_t P[ECC_U32_LENGTH]
__STATIC_INLINE uint32_t ll_pkc_get_ba_a_pointer(pkc_regs_t *PKCx)
Get big integer operand A pointer in pkc sram.
__STATIC_INLINE uint32_t ll_pkc_is_action_flag_it_done(pkc_regs_t *PKCx)
Indicate whether the operation done interrupt is pending.
__STATIC_INLINE void ll_pkc_clear_flag_it_err(pkc_regs_t *PKCx)
Clear the operation error interrupt flag.
LL PKC ECC Point Structure definition.
__STATIC_INLINE uint32_t ll_pkc_get_bm_c_pointer(pkc_regs_t *PKCx)
Get big integer result C pointer in pkc sram.
uint32_t NRSquare[ECC_U32_LENGTH]
__STATIC_INLINE void ll_pkc_set_tmp5_pointer(pkc_regs_t *PKCx, uint32_t pointer)
Set PKC parameter Tmp5 pointer in pkc sram.
__STATIC_INLINE void ll_pkc_set_dummy_multiply_seed(pkc_regs_t *PKCx, uint32_t seed)
Set dummy multiply seed.
__STATIC_INLINE void ll_pkc_set_ba_c_pointer(pkc_regs_t *PKCx, uint32_t pointer)
Set big integer result C pointer in pkc sram.
__STATIC_INLINE uint32_t ll_pkc_get_mi_x1_pointer(pkc_regs_t *PKCx)
Get modular invertion parameter X1 pointer in pkc sram.
__STATIC_INLINE void ll_pkc_set_bm_c_pointer(pkc_regs_t *PKCx, uint32_t pointer)
Set big integer result C pointer in pkc sram.
__STATIC_INLINE void ll_pkc_set_r0x_pointer(pkc_regs_t *PKCx, uint32_t pointer)
Set PKC parameter R0x pointer in pkc sram.
__STATIC_INLINE uint32_t ll_pkc_is_enabled_dummy_multi(pkc_regs_t *PKCx)
Indicate whether the Dummy Multi in software mode is enabled.
__STATIC_INLINE void ll_pkc_disable(pkc_regs_t *PKCx)
Disable pkc.
__STATIC_INLINE uint32_t ll_pkc_get_r1x_pointer(pkc_regs_t *PKCx)
Get PKC parameter R1x pointer in pkc sram.
__STATIC_INLINE uint32_t ll_pkc_get_tmp5_pointer(pkc_regs_t *PKCx)
Get PKC parameter Tmp5 pointer in pkc sram.
__STATIC_INLINE uint32_t ll_pkc_get_x2_pointer(pkc_regs_t *PKCx)
Get PKC parameter X2 pointer in pkc sram.
__STATIC_INLINE uint32_t ll_pkc_get_mi_v_pointer(pkc_regs_t *PKCx)
Get modular invertion parameter V pointer in pkc sram.
__STATIC_INLINE void ll_pkc_disable_software_start(pkc_regs_t *PKCx)
Disable pkc start in software mode.
__STATIC_INLINE void ll_pkc_disable_it_err(pkc_regs_t *PKCx)
Disable the operation error interrupt.
__STATIC_INLINE void ll_pkc_set_r0z_pointer(pkc_regs_t *PKCx, uint32_t pointer)
Set PKC parameter R0z pointer in pkc sram.
__STATIC_INLINE uint32_t ll_pkc_get_k_pointer(pkc_regs_t *PKCx)
Get PKC parameter k pointer in pkc sram.
__STATIC_INLINE void ll_pkc_enable_it_done(pkc_regs_t *PKCx)
Enable the operation done interrupt.
__STATIC_INLINE uint32_t ll_pkc_is_enable_it_err(pkc_regs_t *PKCx)
Indicate whether the operation error interrupt is enable.
__STATIC_INLINE uint32_t ll_pkc_is_enabled_random_clock_gating(pkc_regs_t *PKCx)
Indicate whether the Random Clock Gating in software mode is enabled.
__STATIC_INLINE void ll_pkc_set_rsq_pointer(pkc_regs_t *PKCx, uint32_t pointer)
Set PKC parameter R^2 pointer in pkc sram.
__STATIC_INLINE uint32_t ll_pkc_get_mi_u_pointer(pkc_regs_t *PKCx)
Get modular invertion parameter U pointer in pkc sram.
__STATIC_INLINE void ll_pkc_set_tmp3_pointer(pkc_regs_t *PKCx, uint32_t pointer)
Set PKC parameter Tmp3 pointer in pkc sram.
__STATIC_INLINE void ll_pkc_set_mas_a_pointer(pkc_regs_t *PKCx, uint32_t pointer)
Set modular add/sub parameter A pointer in pkc sram.
uint32_t Y[ECC_U32_LENGTH]
__STATIC_INLINE uint32_t ll_pkc_get_r0x_pointer(pkc_regs_t *PKCx)
Get PKC parameter R0x pointer in pkc sram.
__STATIC_INLINE uint32_t ll_pkc_get_mik_output(pkc_regs_t *PKCx)
Get K output in invertion operation.
__STATIC_INLINE void ll_pkc_set_r0y_pointer(pkc_regs_t *PKCx, uint32_t pointer)
Set PKC parameter R0y pointer in pkc sram.
__STATIC_INLINE uint32_t ll_pkc_is_enable_it_done(pkc_regs_t *PKCx)
Indicate whether the operation done interrupt is enable.
__STATIC_INLINE uint32_t ll_pkc_get_constant1_pointer(pkc_regs_t *PKCx)
Get PKC parameter Constant1 pointer in pkc sram.
__STATIC_INLINE uint32_t ll_pkc_get_ecc_a_pointer(pkc_regs_t *PKCx)
Get ECC parameter A pointer in pkc sram.
__STATIC_INLINE void ll_pkc_set_tmp6_pointer(pkc_regs_t *PKCx, uint32_t pointer)
Set PKC parameter Tmp6 pointer in pkc sram.
__STATIC_INLINE void ll_pkc_enable_hardware_start(pkc_regs_t *PKCx)
Enable pkc start in hardware mode.
__STATIC_INLINE uint32_t ll_pkc_get_mm_p_pointer(pkc_regs_t *PKCx)
Get modular multiplication parameter P pointer in pkc sram.
__STATIC_INLINE void ll_pkc_enable_reset(pkc_regs_t *PKCx)
Enable pkc reset.
__STATIC_INLINE uint32_t ll_pkc_is_enabled_software_start(pkc_regs_t *PKCx)
Indicate whether the pkc start in software mode is enabled.
__STATIC_INLINE uint32_t ll_pkc_is_enabled_software(pkc_regs_t *PKCx)
Indicate whether the pkc software mode is enabled.
__STATIC_INLINE void ll_pkc_disable_dummy_multi(pkc_regs_t *PKCx)
Disable Dummy Multi in software mode.
__STATIC_INLINE void ll_pkc_set_p_pointer(pkc_regs_t *PKCx, uint32_t pointer)
Set PKC parameter p pointer in pkc sram.
__STATIC_INLINE void ll_pkc_set_gz_pointer(pkc_regs_t *PKCx, uint32_t pointer)
Set PKC parameter Gz pointer in pkc sram.
__STATIC_INLINE uint32_t ll_pkc_is_action_flag_it_err(pkc_regs_t *PKCx)
Indicate whether the operation error interrupt is pending.
__STATIC_INLINE void ll_pkc_set_mas_b_pointer(pkc_regs_t *PKCx, uint32_t pointer)
Set modular add/sub parameter B pointer in pkc sram.
__STATIC_INLINE void ll_pkc_disable_hardware_start(pkc_regs_t *PKCx)
Disable pkc start in hardware mode.
__STATIC_INLINE void ll_pkc_set_ba_a_pointer(pkc_regs_t *PKCx, uint32_t pointer)
Set big integer operand A pointer in pkc sram.
__STATIC_INLINE uint32_t ll_pkc_get_tmp3_pointer(pkc_regs_t *PKCx)
Get PKC parameter Tmp3 pointer in pkc sram.
uint32_t B[ECC_U32_LENGTH]
uint32_t X[ECC_U32_LENGTH]
__STATIC_INLINE void ll_pkc_enable_random_clock_gating(pkc_regs_t *PKCx)
Enable Random Clock Gating in software mode.
uint32_t N[ECC_U32_LENGTH]
__STATIC_INLINE void ll_pkc_clear_flag_it_big_add_overflow(pkc_regs_t *PKCx)
Clear the big integer overflow interrupt flag.
__STATIC_INLINE void ll_pkc_set_ba_b_pointer(pkc_regs_t *PKCx, uint32_t pointer)
Set big integer operand B pointer in pkc sram.
__STATIC_INLINE uint32_t ll_pkc_get_mas_a_pointer(pkc_regs_t *PKCx)
Get modular add/sub parameter A pointer in pkc sram.
__STATIC_INLINE void ll_pkc_enable_it_big_add_overflow(pkc_regs_t *PKCx)
Enable the big integer overflow interrupt.
__STATIC_INLINE void ll_pkc_set_constp(pkc_regs_t *PKCx, uint32_t ConstP)
Set constant value for montgomery multiply in pkc sram.
__STATIC_INLINE uint32_t ll_pkc_get_x1_pointer(pkc_regs_t *PKCx)
Get PKC parameter X1 pointer in pkc sram.
struct _ll_pkc_init ll_pkc_init_t
LL PKC Init Structure definition.
__STATIC_INLINE void ll_pkc_set_gy_pointer(pkc_regs_t *PKCx, uint32_t pointer)
Set PKC parameter Gy pointer in pkc sram.
__STATIC_INLINE void ll_pkc_set_ecc_a_pointer(pkc_regs_t *PKCx, uint32_t pointer)
Set ECC parameter A pointer in pkc sram.
struct _ll_ecc_point ll_ecc_point_t
LL PKC ECC Point Structure definition.
__STATIC_INLINE uint32_t ll_pkc_get_dummy_multiply_seed(pkc_regs_t *PKCx)
Get dummy multiply seed.
__STATIC_INLINE void ll_pkc_enable_software(pkc_regs_t *PKCx)
Enable pkc software mode.
__STATIC_INLINE void ll_pkc_set_bm_b_pointer(pkc_regs_t *PKCx, uint32_t pointer)
Set big integer operand B pointer in pkc sram.
__STATIC_INLINE uint32_t ll_pkc_get_ba_b_pointer(pkc_regs_t *PKCx)
Get big integer operand B pointer in pkc sram.
__STATIC_INLINE void ll_pkc_set_mi_u_pointer(pkc_regs_t *PKCx, uint32_t pointer)
Set modular invertion parameter U pointer in pkc sram.
__STATIC_INLINE uint32_t ll_pkc_get_swmi_tmp_pointer(pkc_regs_t *PKCx)
Get modular invertion parameter Tmp pointer in pkc sram.
__STATIC_INLINE void ll_pkc_set_operation_mode(pkc_regs_t *PKCx, uint32_t operation_mode)
Set operation mode in software mode.