Go to the documentation of this file.
52 #ifndef __GR55xx_HAL_PKC_H__
53 #define __GR55xx_HAL_PKC_H__
120 uint32_t (*random_func)(void);
314 #define HAL_PKC_ERROR_NONE ((uint32_t)0x00000000)
315 #define HAL_PKC_ERROR_TIMEOUT ((uint32_t)0x00000001)
316 #define HAL_PKC_ERROR_TRANSFER ((uint32_t)0x00000002)
317 #define HAL_PKC_ERROR_OVERFLOW ((uint32_t)0x00000004)
318 #define HAL_PKC_ERROR_INVALID_PARAM ((uint32_t)0x00000008)
319 #define HAL_PKC_ERROR_INVERSE_K ((uint32_t)0x00000010)
320 #define HAL_PKC_ERROR_IRREVERSIBLE ((uint32_t)0x00000020)
326 #define PKC_SECURE_MODE_DISABLE ((uint32_t)0x00000000)
327 #define PKC_SECURE_MODE_ENABLE ((uint32_t)0x00000001)
333 #define PKC_OPERATION_MODE_MULTI LL_PKC_operation_mode_MULTIPLY
334 #define PKC_OPERATION_MODE_INVER LL_PKC_operation_mode_INVERTION
335 #define PKC_OPERATION_MODE_ADD LL_PKC_operation_mode_ADD
336 #define PKC_OPERATION_MODE_SUB LL_PKC_operation_mode_SUB
337 #define PKC_OPERATION_MODE_CMP LL_PKC_operation_mode_COMPARE
338 #define PKC_OPERATION_MODE_LSHIFT LL_PKC_operation_mode_LEFTSHIFT
339 #define PKC_OPERATION_MODE_BIGMULTI LL_PKC_operation_mode_BIGINTEGERMULTIPLY
340 #define PKC_OPERATION_MODE_BIGADD LL_PKC_operation_mode_BIGINTEGERADD
346 #define PKC_BITS_LENGTH_MIN LL_PKC_BITS_LENGTH_MIN
347 #define PKC_BITS_LENGTH_MAX LL_PKC_BITS_LENGTH_MAX
348 #define PKC_BIGMULTI_BITS_LENGTH_MAX LL_PKC_BIGMULTI_BITS_LENGTH_MAX
354 #define PKC_FLAG_BUSY LL_PKC_WORKSTAT_BUSY
360 #define PKC_IT_DONE LL_PKC_INTEN_DONE
361 #define PKC_IT_ERR LL_PKC_INTEN_ERR
362 #define PKC_IT_OVF LL_PKC_INTEN_BAOVF
368 #define HAL_PKC_TIMEOUT_DEFAULT_VALUE ((uint32_t)5000)
382 #define __HAL_PKC_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->state = HAL_PKC_STATE_RESET)
388 #define __HAL_PKC_RESET(__HANDLE__) CLEAR_BITS((__HANDLE__)->p_instance->CTRL, PKC_CTRL_SWRST); \
389 SET_BITS((__HANDLE__)->p_instance->CTRL, PKC_CTRL_SWRST)
395 #define __HAL_PKC_ENABLE(__HANDLE__) SET_BITS((__HANDLE__)->p_instance->CTRL, PKC_CTRL_EN)
401 #define __HAL_PKC_DISABLE(__HANDLE__) CLEAR_BITS((__HANDLE__)->p_instance->CTRL, PKC_CTRL_EN)
412 #define __HAL_PKC_ENABLE_IT(__HANDLE__, __INTERRUPT__) SET_BITS((__HANDLE__)->p_instance->INTEN, (__INTERRUPT__))
423 #define __HAL_PKC_DISABLE_IT(__HANDLE__, __INTERRUPT__) CLEAR_BITS((__HANDLE__)->p_instance->INTEN, (__INTERRUPT__))
434 #define __HAL_PKC_GET_FLAG_IT(__HANDLE__, __FLAG__) (READ_BITS((__HANDLE__)->p_instance->INTSTAT, (__FLAG__)) == (__FLAG__))
445 #define __HAL_PKC_CLEAR_FLAG_IT(__HANDLE__, __FLAG__) SET_BITS((__HANDLE__)->p_instance->INTSTAT, (__FLAG__))
454 #define __HAL_PKC_GET_FLAG(__HANDLE__, __FLAG__) ((READ_BITS((__HANDLE__)->p_instance->WORKSTAT, (__FLAG__)) != 0) ? SET : RESET)
467 #define IS_PKC_BITS_LENGTH(__BITS__) (((__BITS__) >= PKC_BITS_LENGTH_MIN) && ((__BITS__) <= PKC_BITS_LENGTH_MAX))
473 #define IS_PKC_BIGMULTI_BITS_LENGTH(__BITS__) (((__BITS__) >= PKC_BITS_LENGTH_MIN) && ((__BITS__) <= PKC_BIGMULTI_BITS_LENGTH_MAX))
479 #define IS_PKC_SECURE_MODE(__MODE__) (((__MODE__) == PKC_SECURE_MODE_DISABLE) || \
480 ((__MODE__) == PKC_SECURE_MODE_ENABLE))
486 #define IS_PKC_OPERATION_MODE(__MODE__) (((__MODE__) == PKC_OPERATION_MODE_MULTI) || \
487 ((__MODE__) == PKC_OPERATION_MODE_INVER) || \
488 ((__MODE__) == PKC_OPERATION_MODE_ADD) || \
489 ((__MODE__) == PKC_OPERATION_MODE_SUB) || \
490 ((__MODE__) == PKC_OPERATION_MODE_CMP) || \
491 ((__MODE__) == PKC_OPERATION_MODE_LSHIFT) || \
492 ((__MODE__) == PKC_OPERATION_MODE_BIGMULTI) || \
493 ((__MODE__) == PKC_OPERATION_MODE_BIGADD))
hal_status_t hal_pkc_rsa_modular_exponent(pkc_handle_t *p_pkc, pkc_rsa_modular_exponent_t *p_input, uint32_t timeout)
Execute RSA Modular Exponentiation in blocking mode.
hal_status_t hal_pkc_montgomery_multi(pkc_handle_t *p_pkc, pkc_montgomery_multi_t *p_input, uint32_t timeout)
Execute Montgomery Modular Multiplication in blocking mode.
uint32_t * p_B
Definition: gr55xx_hal_pkc.h:202
uint32_t * p_B
Definition: gr55xx_hal_pkc.h:191
uint32_t * p_A
Definition: gr55xx_hal_pkc.h:268
pkc_regs_t * p_instance
Definition: gr55xx_hal_pkc.h:135
uint32_t ConstP
Definition: gr55xx_hal_pkc.h:236
uint32_t shift_count
Definition: gr55xx_hal_pkc.h:141
@ HAL_PKC_STATE_RESET
Definition: gr55xx_hal_pkc.h:77
hal_lock_t
HAL Lock structures definition.
Definition: gr55xx_hal_def.h:81
PKC Montgomery Modular Multiplication expression input.
Definition: gr55xx_hal_pkc.h:232
hal_status_t hal_pkc_modular_sub(pkc_handle_t *p_pkc, pkc_modular_sub_t *p_input, uint32_t timeout)
Execute Modular Subtraction in blocking mode.
uint32_t shift_bits
Definition: gr55xx_hal_pkc.h:213
ecc_point_t * p_ecc_point
Definition: gr55xx_hal_pkc.h:168
uint32_t * p_P
Definition: gr55xx_hal_pkc.h:203
uint32_t * p_A
Definition: gr55xx_hal_pkc.h:233
PKC Montgomery Inversion expression input.
Definition: gr55xx_hal_pkc.h:245
uint32_t * p_B
Definition: gr55xx_hal_pkc.h:269
hal_status_t hal_pkc_montgomery_inversion(pkc_handle_t *p_pkc, pkc_montgomery_inversion_t *p_input, uint32_t timeout)
Execute Montgomery Inversion in blocking mode.
PKC Modular Left Shift expression input.
Definition: gr55xx_hal_pkc.h:211
hal_status_t hal_pkc_modular_compare(pkc_handle_t *p_pkc, pkc_modular_compare_t *p_input, uint32_t timeout)
Execute Modular Comparison in blocking mode.
uint32_t * p_P
Definition: gr55xx_hal_pkc.h:247
hal_status_t hal_pkc_resume_reg(pkc_handle_t *p_pkc)
Restore some registers related to PKC configuration after sleep. This function must be used in conjun...
hal_status_t hal_pkc_ecc_point_multi(pkc_handle_t *p_pkc, pkc_ecc_point_multi_t *p_input, uint32_t timeout)
Execute ECC Point Multiplication in blocking mode.
__IO hal_pkc_state_t state
Definition: gr55xx_hal_pkc.h:147
void(* pkc_error_callback)(pkc_handle_t *p_pkc)
Definition: gr55xx_hal_pkc.h:293
@ HAL_PKC_STATE_READY
Definition: gr55xx_hal_pkc.h:78
PKC Modular Comparison expression input.
Definition: gr55xx_hal_pkc.h:222
__IO uint32_t error_code
Definition: gr55xx_hal_pkc.h:149
uint32_t * p_A
Definition: gr55xx_hal_pkc.h:190
ecc_curve_init_t * p_ecc_curve
Definition: gr55xx_hal_pkc.h:112
uint32_t retention[1]
Definition: gr55xx_hal_pkc.h:153
uint32_t * p_P
Definition: gr55xx_hal_pkc.h:214
hal_status_t hal_pkc_modular_left_shift_it(pkc_handle_t *p_pkc, pkc_modular_shift_t *p_input)
Execute Modular Left Shift in non-blocking mode with Interrupt.
PKC handle Structure definition.
Definition: gr55xx_hal_pkc.h:134
PKC Big Number Addition expression input.
Definition: gr55xx_hal_pkc.h:267
hal_status_t hal_pkc_init(pkc_handle_t *p_pkc)
Initialize the PKC according to the specified parameters in the pkc_init_t and initialize the associa...
hal_pkc_state_t hal_pkc_get_state(pkc_handle_t *p_pkc)
Return the PKC handle state.
@ HAL_PKC_STATE_TIMEOUT
Definition: gr55xx_hal_pkc.h:81
Header file containing functions prototypes of PKC LL library.
uint32_t * p_B
Definition: gr55xx_hal_pkc.h:234
LL PKC ECC P-256 Elliptic Curve Init Structure definition.
Definition: gr55xx_ll_pkc.h:103
uint32_t * p_P
Definition: gr55xx_hal_pkc.h:143
hal_status_t hal_pkc_deinit(pkc_handle_t *p_pkc)
De-initialize the PKC peripheral.
uint32_t * p_K
Definition: gr55xx_hal_pkc.h:167
uint32_t * p_P
Definition: gr55xx_hal_pkc.h:192
hal_status_t hal_pkc_suspend_reg(pkc_handle_t *p_pkc)
Suspend some registers related to PKC configuration before sleep.
__IO hal_lock_t lock
Definition: gr55xx_hal_pkc.h:145
hal_status_t hal_pkc_montgomery_multi_it(pkc_handle_t *p_pkc, pkc_montgomery_multi_t *p_input)
Execute Montgomery Modular Multiplication in non-blocking mode with Interrupt.
hal_status_t hal_pkc_modular_add(pkc_handle_t *p_pkc, pkc_modular_add_t *p_input, uint32_t timeout)
Execute Modular Addition in blocking mode.
uint32_t * p_A
Definition: gr55xx_hal_pkc.h:258
uint32_t secure_mode
Definition: gr55xx_hal_pkc.h:116
hal_status_t hal_pkc_modular_sub_it(pkc_handle_t *p_pkc, pkc_modular_sub_t *p_input)
Execute Modular Subtraction in non-blocking mode with Interrupt.
PKC Init Structure definition.
Definition: gr55xx_hal_pkc.h:111
void hal_pkc_msp_init(pkc_handle_t *p_pkc)
Initialize the PKC MSP.
@ HAL_PKC_STATE_ERROR
Definition: gr55xx_hal_pkc.h:80
PKC Modular Subtraction expression input.
Definition: gr55xx_hal_pkc.h:200
uint32_t * p_A
Definition: gr55xx_hal_pkc.h:223
uint32_t * p_P_R2
Definition: gr55xx_hal_pkc.h:180
void hal_pkc_msp_deinit(pkc_handle_t *p_pkc)
De-initialize the PKC MSP.
uint32_t ConstP
Definition: gr55xx_hal_pkc.h:248
pkc_init_t init
Definition: gr55xx_hal_pkc.h:137
void hal_pkc_overflow_callback(pkc_handle_t *p_pkc)
PKC over flow callback.
void * p_result
Definition: gr55xx_hal_pkc.h:139
uint32_t timeout
Definition: gr55xx_hal_pkc.h:151
uint32_t ConstP
Definition: gr55xx_hal_pkc.h:181
LL PKC ECC Point Structure definition.
Definition: gr55xx_ll_pkc.h:92
uint32_t * p_A
Definition: gr55xx_hal_pkc.h:201
void(* pkc_done_callback)(pkc_handle_t *p_pkc)
Definition: gr55xx_hal_pkc.h:292
PKC ECC Point Multiplication expression input.
Definition: gr55xx_hal_pkc.h:166
hal_status_t hal_pkc_modular_left_shift(pkc_handle_t *p_pkc, pkc_modular_shift_t *p_input, uint32_t timeout)
Execute Modular Left Shift in blocking mode.
uint32_t * p_B
Definition: gr55xx_hal_pkc.h:178
uint32_t data_bits
Definition: gr55xx_hal_pkc.h:114
hal_status_t
HAL Status structures definition.
Definition: gr55xx_hal_def.h:70
void hal_pkc_done_callback(pkc_handle_t *p_pkc)
PKC calculate done callback.
uint32_t * p_B
Definition: gr55xx_hal_pkc.h:259
uint32_t * p_A
Definition: gr55xx_hal_pkc.h:177
uint32_t * p_A
Definition: gr55xx_hal_pkc.h:246
hal_status_t hal_pkc_big_number_add_it(pkc_handle_t *p_pkc, pkc_big_number_add_t *p_input)
Execute Big Number Addition in non-blocking mode with Interrupt.
uint32_t * p_P
Definition: gr55xx_hal_pkc.h:235
hal_status_t hal_pkc_modular_add_it(pkc_handle_t *p_pkc, pkc_modular_add_t *p_input)
Execute Modular Addition in non-blocking mode with Interrupt.
void hal_pkc_error_callback(pkc_handle_t *p_pkc)
PKC error callback.
hal_status_t hal_pkc_big_number_add(pkc_handle_t *p_pkc, pkc_big_number_add_t *p_input, uint32_t timeout)
Execute Big Number Addition in blocking mode.
hal_status_t hal_pkc_montgomery_inversion_it(pkc_handle_t *p_pkc, pkc_montgomery_inversion_t *p_input)
Execute Montgomery Inversion in non-blocking mode with Interrupt.
hal_status_t hal_pkc_big_number_multi_it(pkc_handle_t *p_pkc, pkc_big_number_multi_t *p_input)
Execute Big Number Multiplication in non-blocking mode with Interrupt.
@ HAL_PKC_STATE_BUSY
Definition: gr55xx_hal_pkc.h:79
hal_status_t hal_pkc_modular_compare_it(pkc_handle_t *p_pkc, pkc_modular_compare_t *p_input)
Execute Modular Comparison in non-blocking mode with Interrupt.
void hal_pkc_irq_handler(pkc_handle_t *p_pkc)
Handle PKC interrupt request.
HAL_PKC Callback function definition.
Definition: gr55xx_hal_pkc.h:289
PKC Modular Addition expression input.
Definition: gr55xx_hal_pkc.h:189
PKC Big Number Multiplication expression input.
Definition: gr55xx_hal_pkc.h:257
uint32_t * p_A
Definition: gr55xx_hal_pkc.h:212
hal_pkc_state_t
HAL PKC State Enumerations definition.
Definition: gr55xx_hal_pkc.h:76
void(* pkc_msp_deinit)(pkc_handle_t *p_pkc)
Definition: gr55xx_hal_pkc.h:291
void(* pkc_overflow_callback)(pkc_handle_t *p_pkc)
Definition: gr55xx_hal_pkc.h:294
struct _hal_pkc_callback hal_pkc_callback_t
HAL_PKC Callback function definition.
uint32_t * p_P
Definition: gr55xx_hal_pkc.h:179
uint32_t * p_P
Definition: gr55xx_hal_pkc.h:224
struct _pkc_handle pkc_handle_t
PKC handle Structure definition.
void(* pkc_msp_init)(pkc_handle_t *p_pkc)
Definition: gr55xx_hal_pkc.h:290
PKC RSA Modular Exponentiation expression input.
Definition: gr55xx_hal_pkc.h:176
uint32_t hal_pkc_get_error(pkc_handle_t *p_pkc)
Return the PKC error code.
hal_status_t hal_pkc_big_number_multi(pkc_handle_t *p_pkc, pkc_big_number_multi_t *p_input, uint32_t timeout)
Execute Big Number Multiplication in blocking mode.
This file contains HAL common definitions, enumeration, macros and structures definitions.
void hal_pkc_set_timeout(pkc_handle_t *p_pkc, uint32_t timeout)
Set the PKC internal process timeout value.
hal_status_t hal_pkc_ecc_point_multi_it(pkc_handle_t *p_pkc, pkc_ecc_point_multi_t *p_input)
Execute ECC Point Multiplication in non-blocking mode with Interrupt.