示例代码
PKC
示例工程使用PKC模块实现大模数运算,工程路径:SDK_Folder\projects\peripheral\pkc\app_pkc。
示例工程流程图
PKC示例工程实现了大数模加、大数模减、大数模乘、大数模对比、大数模逆、大数模移位、大数加、大数乘、大数RSA模幂、大数ECC点乘运算。通过和理想运算结果进行比较验证运算正确性。
初始化参数
以大数模加为例,其他参考示例工程。
static void params_init(void)
{
params_t.use_type = APP_PKC_TYPE_INTERRUPT;
params_t.init.p_ecc_curve = NULL;
params_t.init.data_bits = 256;
params_t.init.secure_mode = PKC_SECURE_MODE_DISABLE;
params_t.init.random_func = NULL;
params_t.p_kout = NULL;
params_t.p_result = NULL;
}
params_init();
params_t.p_result = Out_c;
-
use_type:传输方式,APP_PKC_TYPE_INTERRUPT(中断方式)
-
init.p_ecc_curve:椭圆曲线描述指针,示例工程不进行设置
-
params_t.init.data_bits:数据大小,256 bits
-
init.secure_mode:使能/不使能安全模式,PKC_SECURE_MODE_DISABLE(不使能安全模式)
-
init.random_func:指向生成随机数的函数,示例工程不进行设置
-
p_kout:运算结果Out_c(初始化参数为0的数值)
重要函数
- 初始化PKC
app_pkc_init(¶ms_t, app_pkc_event_handler)
- params_t:初始化参数结构体
- app_pkc_event_handler:回调函数
- 实现大数模加运算
app_pkc_modular_add_t pkc_modular_add_config = { .p_A = In_a, .p_B = In_b, .p_P = In_n }; ret = app_pkc_modular_add_async(&pkc_modular_add_config);
将In_a和In_b进行大数模加运算,结果输出到Out_c。
测试验证
连接开发板到PC端,打开串口助手,连接串口,查看串口日志,串口将打印是否正确生成消息。
[TestCase pkc_modular_add]:PASS
[TestCase pkc_modular_add_2048bit]:PASS
[TestCase pkc_modular_sub]:PASS
[TestCase pkc_modular_sub_2048bit]:PASS
[TestCase pkc_montgomery_mul]:PASS
[TestCase pkc_montgomery_mul_2048bit]:PASS
[TestCase pkc_montgomery_inv]:PASS
[TestCase pkc_montgomery_inv_2048bit]:PASS
[TestCase pkc_modular_cmp]:PASS
[TestCase pkc_modular_cmp_2048bit]:PASS
[TestCase pkc_modular_shift]:PASS
[TestCase pkc_modular_shift_2048bit]:PASS
[TestCase pkc_big_add]:PASS
[TestCase pkc_big_add_2048bit]:PASS
[TestCase pkc_big_mul]:PASS
[TestCase pkc_big_mul_1024bit]:PASS
[TestCase pkc_ecc_point_mul_256r1]:PASS
[TestCase pkc_ecc_point_mul_256k1]:PASS
This example demo end.