PKC驱动API描述
PKC驱动的API主要包括:
| API类别 | API名称 | 描述 |
|---|---|---|
|
初始化 |
hal_pkc_init() |
初始化PKC外设,配置数据位宽等参数。 |
|
hal_pkc_deinit() |
反初始化PKC外设。 |
|
|
hal_pkc_msp_init() |
初始化PKC外设所使用的NVIC中断。 |
|
|
hal_pkc_msp_deinit() |
反初始化PKC外设所使用的NVIC中断。 |
|
|
IO操作 |
hal_pkc_rsa_modular_exponent() |
RSA模幂运算,轮询方式。 |
|
hal_pkc_ecc_point_multi() |
ECC点乘运算,轮询方式。 |
|
|
hal_pkc_modular_add() |
模加运算,轮询方式。 |
|
|
hal_pkc_modular_sub() |
模减运算,轮询方式。 |
|
|
hal_pkc_modular_left_shift() |
模左移运算,轮询方式。 |
|
|
hal_pkc_modular_compare() |
模比较运算,轮询方式。 |
|
|
hal_pkc_montgomery_multi() |
蒙哥马利乘运算,轮询方式。 |
|
|
hal_pkc_montgomery_inversion() |
蒙哥马利逆运算,轮询方式。 |
|
|
hal_pkc_big_number_multi() |
大数乘运算,轮询方式。 |
|
|
hal_pkc_big_number_add() |
大数加运算,轮询方式。 |
|
|
hal_pkc_ecc_point_multi_it() |
ECC点乘运算,中断方式。 |
|
|
hal_pkc_modular_add_it() |
模加运算,中断方式。 |
|
|
hal_pkc_modular_sub_it() |
模减运算,中断方式。 |
|
|
hal_pkc_modular_left_shift_it() |
模左移运算,中断方式。 |
|
|
hal_pkc_modular_compare_it() |
模比较运算,中断方式。 |
|
|
hal_pkc_montgomery_multi_it() |
蒙哥马利乘运算,中断方式。 |
|
|
hal_pkc_montgomery_inversion_it() |
蒙哥马利逆运算,中断方式。 |
|
|
hal_pkc_big_number_multi_it() |
大数乘运算,中断方式。 |
|
|
hal_pkc_big_number_add_it() |
大数加运算,中断方式。 |
|
|
中断处理及回调函数 |
hal_pkc_irq_handler() |
中断处理函数。 |
|
hal_pkc_done_callback() |
运算完成中断回调函数。 |
|
|
hal_pkc_error_callback() |
错误中断回调函数。 |
|
|
hal_pkc_overflow_callback() |
运算溢出中断回调函数。 |
|
|
状态及错误 |
hal_pkc_get_state() |
获取驱动运行状态。 |
|
hal_pkc_get_error() |
获取错误码。 |
|
|
控制 |
hal_pkc_set_timeout() |
设置超时时间。 |
|
睡眠相关 |
hal_pkc_suspend_reg() |
睡眠时挂起PKC配置相关的寄存器。 |
|
hal_pkc_resume_reg() |
唤醒时恢复PKC配置相关的寄存器。 |
下面章节将对各API进行详细描述。
hal_pkc_init
| 函数原型 | hal_status_t hal_pkc_init(pkc_handle_t *p_pkc) |
|---|---|
| 功能说明 | 根据pkc_init_t里的参数初始化PKC外设和初始化关联句柄。 |
| 输入参数 | p_pkc:指向pkc_handle_t结构体变量的指针,该结构体变量包含指定的PKC的配置信息。 |
| 返回值 | HAL状态。 |
| 备注 |
hal_pkc_deinit
| 函数原型 | hal_status_t hal_pkc_deinit(pkc_handle_t *p_pkc) |
|---|---|
| 功能说明 | 反初始化PKC外设。 |
| 输入参数 | p_pkc:指向pkc_handle_t结构体变量的指针,该结构体变量包含指定的PKC的配置信息。 |
| 返回值 | HAL状态。 |
| 备注 |
hal_pkc_msp_init
| 函数原型 | void hal_pkc_msp_init(pkc_handle_t *p_pkc) |
|---|---|
| 功能说明 | 初始化PKC外设所使用的NVIC中断等配置。 |
| 输入参数 | p_pkc:指向pkc_handle_t结构体变量的指针。 |
| 返回值 | 无 |
| 备注 | 该函数为weak类型的空函数,开发者需重写该API完成NVIC中断的初始化。 |
hal_pkc_msp_deinit
| 函数原型 | void hal_pkc_msp_deinit(pkc_handle_t *p_pkc) |
|---|---|
| 功能说明 | 反初始化PKC外设所使用的NVIC中断等配置。 |
| 输入参数 | p_pkc:指向pkc_handle_t结构体变量的指针。 |
| 返回值 | 无 |
| 备注 | 该函数为weak类型的空函数,开发者需重写该API完成NVIC中断的反初始化。 |
hal_pkc_rsa_modular_exponent
| 函数原型 | hal_status_t hal_pkc_rsa_modular_exponent(pkc_handle_t *p_pkc, pkc_rsa_modular_exponent_t *p_input, uint32_t timeout) |
|---|---|
| 功能说明 | 实现RSA算法中模幂运算:Result = A^B mod P,运算数最大位数2048 bits,结果数最大位数2048 bits,轮询方式。 |
| 输入参数 | p_pkc:指向pkc_handle_t结构体变量的指针。 p_input:指向输入参数pkc_rsa_modular_exponent_t结构体变量的指针。 timeout:超时时间。 |
| 返回值 | HAL状态。 |
| 备注 |
hal_pkc_ecc_point_multi
| 函数原型 | hal_status_t hal_pkc_ecc_point_multi(pkc_handle_t *p_pkc, pkc_ecc_point_multi_t *p_input, uint32_t timeout) |
|---|---|
| 功能说明 | 实现ECC椭圆算法中点乘运算:Result = K * Point,运算数最大位数2048 bits,结果数最大位数2048 bits,轮询方式。 |
| 输入参数 | p_pkc:指向pkc_handle_t结构体变量的指针。 p_input:指向输入参数pkc_ecc_point_multi_t结构体变量的指针。 timeout:超时时间。 |
| 返回值 | HAL状态。 |
| 备注 |
hal_pkc_ecc_point_multi_it
| 函数原型 | hal_status_t hal_pkc_ecc_point_multi_it(pkc_handle_t *p_pkc, pkc_ecc_point_multi_t *p_input) |
|---|---|
| 功能说明 | 实现ECC椭圆算法中点乘运算:Result = K * Point,运算数最大位数2048 bits,结果数最大位数2048 bits,中断方式。 |
| 输入参数 | p_pkc:指向pkc_handle_t结构体变量的指针。 p_input:指向输入参数pkc_ecc_point_multi_t结构体变量的指针。 |
| 返回值 | HAL状态。 |
| 备注 |
hal_pkc_modular_add
| 函数原型 | hal_status_t hal_pkc_modular_add(pkc_handle_t *p_pkc, pkc_modular_add_t *p_input, uint32_t timeout) |
|---|---|
| 功能说明 | 实现模加运算:Result = (A + B) mod P,运算数最大位数2048 bits,结果数最大位数2048 bits,轮询方式。 |
| 输入参数 | p_pkc:指向pkc_handle_t结构体变量的指针。 p_input:指向输入参数pkc_modular_add_t结构体变量的指针。 timeout:超时时间。 |
| 返回值 | HAL状态。 |
| 备注 |
hal_pkc_modular_add_it
| 函数原型 | hal_status_t hal_pkc_modular_add_it(pkc_handle_t *p_pkc, pkc_modular_add_t *p_input) |
|---|---|
| 功能说明 | 实现模加运算:Result = (A + B) mod P,运算数最大位数2048 bits,结果数最大位数2048 bits,中断方式。 |
| 输入参数 | p_pkc:指向pkc_handle_t结构体变量的指针。 p_input:指向输入参数pkc_modular_add_t结构体变量的指针。 |
| 返回值 | HAL状态。 |
| 备注 |
hal_pkc_modular_sub
| 函数原型 | hal_status_t hal_pkc_modular_sub(pkc_handle_t *p_pkc, pkc_modular_sub_t *p_input, uint32_t timeout) |
|---|---|
| 功能说明 | 实现模减运算:Result = (A - B) mod P,运算数最大位数2048 bits,结果数最大位数2048 bits,轮询方式。 |
| 输入参数 | p_pkc:指向pkc_handle_t结构体变量的指针。 p_input:指向输入参数pkc_modular_sub_t结构体变量的指针。 timeout:超时时间。 |
| 返回值 | HAL状态。 |
| 备注 |
hal_pkc_modular_sub_it
| 函数原型 | hal_status_t hal_pkc_modular_sub_it(pkc_handle_t *p_pkc, pkc_modular_sub_t *p_input) |
|---|---|
| 功能说明 | 实现模减运算:Result = (A - B) mod P,运算数最大位数2048 bits,结果数最大位数2048 bits,中断方式。 |
| 输入参数 | p_pkc:指向pkc_handle_t结构体变量的指针。 p_input:指向输入参数pkc_modular_sub_t结构体变量的指针。 |
| 返回值 | HAL状态。 |
| 备注 |
hal_pkc_modular_left_shift
| 函数原型 | hal_status_t hal_pkc_modular_left_shift(pkc_handle_t *p_pkc, pkc_modular_shift_t *p_input, uint32_t timeout) |
|---|---|
| 功能说明 | 实现模左移运算:Result = (A << ShiftBits) mod P,运算数最大位数2048 bits,结果数最大位数2048 bits,轮询方式。 |
| 输入参数 | p_pkc:指向pkc_handle_t结构体变量的指针。 p_input:指向输入参数pkc_modular_shift_t结构体变量的指针。 timeout:超时时间。 |
| 返回值 | HAL状态。 |
| 备注 |
hal_pkc_modular_left_shift_it
| 函数原型 | hal_status_t hal_pkc_modular_left_shift_it(pkc_handle_t *p_pkc, pkc_modular_shift_t *p_input) |
|---|---|
| 功能说明 | 实现模左移运算:Result = (A << ShiftBits) mod P,运算数最大位数2048 bits,结果数最大位数2048 bits,中断方式。 |
| 输入参数 | p_pkc:指向pkc_handle_t结构体变量的指针。 p_input:指向输入参数pkc_modular_shift_t结构体变量的指针。 |
| 返回值 | HAL状态。 |
| 备注 |
hal_pkc_modular_compare
| 函数原型 | hal_status_t hal_pkc_modular_compare(pkc_handle_t *p_pkc, pkc_modular_compare_t *p_input, uint32_t timeout) |
|---|---|
| 功能说明 | 实现模比较运算:Result = A mod P,运算数最大位数2048 bits,结果数最大位数2048 bits,轮询方式。 |
| 输入参数 | p_pkc:指向pkc_handle_t结构体变量的指针。 p_input:指向输入参数pkc_modular_compare_t结构体变量指针。 timeout:超时时间。 |
| 返回值 | HAL状态。 |
| 备注 |
hal_pkc_modular_compare_it
| 函数原型 |
hal_status_t hal_pkc_modular_compare_it(pkc_handle_t *p_pkc, pkc_modular_compare_t *p_input) |
|---|---|
| 功能说明 |
实现模比较运算:Result = A mod P,运算数最大位数2048 bits,结果数最大位数2048 bits,中断方式。 |
| 输入参数 |
p_pkc:指向pkc_handle_t结构体变量的指针。 p_input:指向输入参数pkc_modular_compare_t结构体变量指针。 |
| 返回值 |
HAL状态。 |
| 备注 |
hal_pkc_montgomery_multi
| 函数原型 | hal_status_t hal_pkc_montgomery_multi(pkc_handle_t *p_pkc, pkc_montgomery_multi_t *p_input, uint32_t timeout) |
|---|---|
| 功能说明 | 实现模乘运算:Result = A * B mod P,运算数最大位数2048 bits,结果数最大位数2048 bits,轮询方式。 |
| 输入参数 | p_pkc:指向pkc_handle_t结构体变量的指针。 p_input:指向输入参数pkc_montgomery_multi_t结构体变量的指针。 timeout:超时时间。 |
| 返回值 | HAL状态。 |
| 备注 |
hal_pkc_montgomery_multi_it
| 函数原型 | hal_status_t hal_pkc_montgomery_multi_it(pkc_handle_t *p_pkc, pkc_montgomery_multi_t *p_input) |
|---|---|
| 功能说明 | 实现模乘运算:Result = A * B mod P,运算数最大位数2048 bits,结果数最大位数2048 bits,中断方式。 |
| 输入参数 | p_pkc:指向pkc_handle_t结构体变量的指针。 p_input:指向输入参数pkc_montgomery_multi_t结构体变量的指针。 |
| 返回值 | HAL状态。 |
| 备注 |
hal_pkc_montgomery_inversion
| 函数原型 | hal_status_t hal_pkc_montgomery_inversion(pkc_handle_t *p_pkc, pkc_montgomery_inversion_t *p_input, uint32_t *p_K, uint32_t timeout) |
|---|---|
| 功能说明 | 实现模逆运算:Result = A^(-1) mod P,运算数最大位数2048 bits,结果数最大位数2048 bits,轮询方式。 |
| 输入参数 | p_pkc:指向pkc_handle_t结构体变量的指针。 p_input:指向输入参数pkc_montgomery_inversion_t结构体变量的指针。 p_K:指向输出参数K的指针。 timeout:超时时间。 |
| 返回值 | HAL状态。 |
| 备注 |
hal_pkc_montgomery_inversion_it
| 函数原型 | hal_status_t hal_pkc_montgomery_inversion_it(pkc_handle_t *p_pkc, pkc_montgomery_inversion_t *p_input, uint32_t *p_K) |
|---|---|
| 功能说明 | 实现模逆运算:Result = A^(-1) mod P,运算数最大位数2048 bits,结果数最大位数2048 bits,中断方式。 |
| 输入参数 | p_pkc:指向pkc_handle_t结构体变量的指针。 p_input:指向输入参数pkc_montgomery_inversion_t结构体变量的指针。 p_K:指向输出参数K的指针。 |
| 返回值 | HAL状态。 |
| 备注 |
hal_pkc_big_number_multi
| 函数原型 | hal_status_t hal_pkc_big_number_multi(pkc_handle_t *p_pkc, pkc_big_number_multi_t *p_input, uint32_t timeout) |
|---|---|
| 功能说明 | 实现大数乘运算:Result = A * B,运算数最大位数1024 bits,结果数最大位数2048 bits,轮询方式。 |
| 输入参数 | p_pkc:指向pkc_handle_t结构体变量的指针。 p_input:指向输入参数pkc_big_number_multi_t结构体变量的指针。 timeout:超时时间。 |
| 返回值 | HAL状态。 |
| 备注 |
hal_pkc_big_number_multi_it
| 函数原型 | hal_status_t hal_pkc_big_number_multi_it(pkc_handle_t *p_pkc, pkc_big_number_multi_t *p_input) |
|---|---|
| 功能说明 | 实现大数乘运算:Result = A * B,运算数最大位数1024 bits,结果数最大位数2048 bits,中断方式。 |
| 输入参数 | p_pkc:指向pkc_handle_t结构体变量的指针。 p_input:指向输入参数pkc_big_number_multi_t结构体变量的指针。 |
| 返回值 | HAL状态。 |
| 备注 |
hal_pkc_big_number_add
| 函数原型 | hal_status_t hal_pkc_big_number_add(pkc_handle_t *p_pkc, pkc_big_number_add_t *p_input, uint32_t timeout) |
|---|---|
| 功能说明 | 实现大数加运算:Result = A + B,运算数最大位数2048 bits,结果数最大位数2048 bits,轮询方式。 |
| 输入参数 | p_pkc:指向pkc_handle_t结构体变量的指针。 p_input:指向输入参数pkc_big_number_add_t结构体变量的指针。 timeout:超时时间。 |
| 返回值 | HAL状态。 |
| 备注 |
hal_pkc_big_number_add_it
| 函数原型 | hal_status_t hal_pkc_big_number_add_it(pkc_handle_t *p_pkc, pkc_big_number_add_t *p_input) |
|---|---|
| 功能说明 | 实现大数加运算:Result = A + B,运算数最大位数2048 bits,结果数最大位数2048 bits,中断方式。 |
| 输入参数 | p_pkc:指向pkc_handle_t结构体变量的指针。 p_input:指向输入参数pkc_big_number_add_t结构体变量的指针。 |
| 返回值 | HAL状态。 |
| 备注 |
hal_pkc_irq_handler
| 函数原型 | void hal_pkc_irq_handler(pkc_handle_t *p_pkc) |
|---|---|
| 功能说明 | 处理PKC中断请求。 |
| 输入参数 | p_pkc:指向pkc_handle_t结构体变量的指针。 |
| 返回值 | 无 |
| 备注 |
hal_pkc_done_callback
| 函数原型 | void hal_pkc_done_callback(pkc_handle_t *p_pkc) |
|---|---|
| 功能说明 | PKC运算完成回调。 |
| 输入参数 | p_pkc:指向pkc_handle_t结构体变量的指针。 |
| 返回值 | 无 |
| 备注 | 该函数为weak类型的空函数,当开发者需要使用该回调函数时,可重写该API。 |
hal_pkc_error_callback
| 函数原型 | void hal_pkc_error_callback(pkc_handle_t *p_pkc) |
|---|---|
| 功能说明 | PKC运算错误回调。 |
| 输入参数 | p_pkc:指向pkc_handle_t结构体变量的指针。 |
| 返回值 | 无 |
| 备注 | 该函数为weak类型的空函数,当开发者需要使用该回调函数时,可重写该API。 |
hal_pkc_overflow_callback
| 函数原型 | void hal_pkc_overflow_callback(pkc_handle_t *p_pkc) |
|---|---|
| 功能说明 | PKC大数乘/加运算溢出回调。 |
| 输入参数 | p_pkc:指向pkc_handle_t结构体变量的指针。 |
| 返回值 | 无 |
| 备注 | 该函数为weak类型的空函数,当开发者需要使用该回调函数时,可重写该API。 |
hal_pkc_get_state
| 函数原型 | hal_pkc_state_t hal_pkc_get_state(pkc_handle_t *p_pkc) |
|---|---|
| 功能说明 | 获取PKC运行状态。 |
| 输入参数 | p_pkc:指向pkc_handle_t结构体变量的指针。 |
| 返回值 |
PKC运行状态,该参数的取值可以是下列值中的任意一个:
|
| 备注 |
hal_pkc_get_error
| 函数原型 | uint32_t hal_pkc_get_error(pkc_handle_t *p_pkc) |
|---|---|
| 功能说明 | 获取PKC错误码。 |
| 输入参数 | p_pkc:指向pkc_handle_t结构体变量的指针。 |
| 返回值 |
PKC错误码,该参数的取值可以是下列值中的任意一个:
|
| 备注 |
hal_pkc_set_timeout
| 函数原型 | void hal_pkc_set_timeout(pkc_handle_t *p_pkc , uint32_t timeout) |
|---|---|
| 功能说明 | 设置PKC运算超时时间。 |
| 输入参数 | p_pkc:指向pkc_handle_t结构体变量的指针。 timeout:运算超时时间。 |
| 返回值 | 无 |
| 备注 |
hal_pkc_suspend_reg
| 函数原型 | hal_status_t hal_pkc_suspend_reg(pkc_handle_t *p_pkc) |
|---|---|
| 功能说明 | 睡眠时挂起PKC配置相关的寄存器。 |
| 输入参数 | p_pkc:指向pkc_handle_t结构体变量的指针 |
| 返回值 |
PKC运行状态,该参数的取值可以是下列值中的任意一个:
|
| 备注 |
hal_pkc_resume_reg
| 函数原型 | hal_status_t hal_pkc_resume_reg(pkc_handle_t *p_pkc) |
|---|---|
| 功能说明 | 唤醒时恢复PKC配置相关的寄存器。 |
| 输入参数 | p_pkc:指向pkc_handle_t结构体变量的指针 |
| 返回值 |
PKC运行状态,该参数的取值可以是下列值中的任意一个:
|
| 备注 |