大家好,又见面了,我是你们的朋友全栈君。
椭圆曲线算法中涉及的函数纷繁复杂,比如为了实现“复制点群”功能,就定义了四个函数,有:
int EC_GROUP_copy (EC_GROUP *dest, const EC_GROUP *src)、
int ec_GFp_mont_group_copy (EC_GROUP *dest, const EC_GROUP *src)、
int ec_GFp_simple_group_copy (EC_GROUP *dest, const EC_GROUP *src)、
int ec_GF2m_simple_group_copy (EC_GROUP *dest, const EC_GROUP *src)。
怎么会有这么多函数呢,它们之间有什么关系呢?在这一节里将会向你详细解释。
首先,实现椭圆曲线中算法的函数大部分在文件ec_lib.c、ecp_mont.c、ecp_smpl.c和ec2_smpl.c里面。这四个文件所起作用各不相同:
文件 | 大致作用 | 备注 |
---|---|---|
ec_lib.c | 提供统一的对外接口 | 个别函数接口未统一 |
ecp_mont.c | 专门处理field_data1、field_data2和函数field_mod_func | 只针对素域时处理点群的部分函数 |
ecp_smpl.c | 素域底层基本功能的具体实现 | 只针对素域 |
ec2_smpl.c | 二元域底层基本功能的具体实现 | 只针对二元域 |
表5.1 ec_lib.c、ecp_mont.c、ecp_smpl.c和ec2_smpl.c的作用
接着,来看看它们之间的关系。
以上关系的图示如下:
图5.2 ec_lib.c、ecp_mont.c、ecp_smpl.c和ec2_smpl.c的调用关系
接下来,举两个例子来说明。
例1:分析本小节开始部分提到的“复制点群”各函数之间的相互关系。
注意:以下用记号“EC_GROUP_copy @ec_lib.c”表示函数EC_GROUP_copy是在文件ec_lib.c中,其余类似。
图5.3 “复制点群”函数的调用关系
例2:“设置群信息”。该例中不需要处理field_data1、field_data2和函数field_mod_func,所以就没有调用ecp_mont.c文件,而是直接调用ecp_smpl.c。
图5.4 “设置群信息”函数的调用关系
最后再多说两句。其实每个函数的函数名都写的非常清楚,从函数名中就可以读出该函数是在哪个文件中,是对素域还是二元域进行操作,亦或是作为一个统一的接口。
另外,ec_lib.c中还有部分函数的接口并没有统一(比如例2),其实这部分函数同样可以做到接口的统一,但这是后一步的工作了。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/162135.html原文链接:https://javaforall.cn