CN / EN
文档反馈
感谢关注汇顶文档,期待您的宝贵建议!
感谢您的反馈,祝您愉快!

PKC

PKC的示例工程实现了大数模加、大数模减、大数模乘、大数模对比、大数模逆、大数模移位、大数加、大数乘、大数RSA模幂、大数ECC点乘运算。

本章节以大数模加运算为例,进行PKC示例的代码及测试验证说明。其他运算的相关代码请参考示例工程代码。

PKC示例的源代码和工程文件位于SDK_Folder\projects\peripheral\pkc\pkc,其中工程文件在文件夹Keil_5下。

代码理解

PKC示例工程(大数模加运算)流程图如图 21所示:

图 21 PKC示例工程流程图
  1. 配置PKC模块。
    pkc_modular_add_t PKC_ModularAddStruct = {
        .p_A = In_a,
        .p_B = In_b,
        .p_P = In_n
    };
    
    PKCHandle.p_instance         = PKC;
    PKCHandle.p_result           = Out_c;
    PKCHandle.init.p_ecc_curve   = &ECC_CurveInitStruct;
    PKCHandle.init.data_bits   = 256;
    PKCHandle.init.secure_mode = PKC_SECURE_MODE_DISABLE;
    PKCHandle.init.random_func = NULL;
    
    hal_pkc_deinit(&PKCHandle);
    hal_pkc_init(&PKCHandle);
    • init.p_ecc_curve:椭圆曲线描述指针。
    • init.data_bits:数据位数大小。
    • init.secure_mode:安全模式设置,可选择PKC_SECURE_MODE_DISABLE、PKC_SECURE_MODE_ENABLE。
    • init.random_func:函数指针,指向生成随机数的函数。
  2. 调用阻塞接口hal_pkc_modular_add()或中断接口hal_pkc_modular_add_it(),进行In_a和In_b大数模加运算,结果输出到Out_c,并与Exc_c进行比较。代码如下:
    if (HAL_OK != hal_pkc_modular_add(&PKCHandle, &PKC_ModularAddStruct, 1000))
    {
        printf("\r\n%dth add operation got error\r\n", count++);
        continue;
    }
    if (check_result((uint8_t*)"pkc_modular_add", Out_c, Exc_c, PKCHandle.init.data_bits))
    {
        error++;
    }
    
    if (HAL_OK != hal_pkc_modular_add_it(&PKCHandle, &PKC_ModularAddStruct))
    {
        printf("\r\n%dth add it operation got error\r\n", count++);
        continue;
    }
    while(int_done_flag == 0);
    if (check_result((uint8_t*)"pkc_modular_add_it", Out_c, Exc_c, PKCHandle.init.data_bits))
    {
        error++;
    }
    

测试验证

  1. 用GProgrammer下载pkc.bin至开发板。
  2. 将开发板串口连接至PC端,打开并配置GRUart。
  3. 在GRUart的Receive Data窗口中将显示PKC的数据执行结果。

扫描关注

打开微信,使用“扫一扫”即可关注。