大家好,又见面了,我是你们的朋友全栈君。
在定义椭圆曲线点群时出现了描述曲线所用算法的参数const EC_METHOD *meth,这一节就来看看这个参数有什么用处。
椭圆曲线算法集的定义如下。
typedef struct ec_method_st EC_METHOD;
struct ec_method_st {
(具体定义略,详情可参见代码文件ec_lcl.h)
};// EC_METHOD
在结构体ec_method_st中列举了实现过程中用到的各种椭圆曲线算法,比如椭圆曲线点群的建立和释放,设置群参数,点的比较,点的加法和倍乘等等,覆盖面很广,几乎涉及所有的椭圆曲线算法。
为什么需要这个算法集呢,它有什么作用呢?
其主要作用在于能够将函数在素域和二元域的接口统一起来。举个例子,“判断点是否在曲线上”只需要调用EC_POINT_is_on_curve函数,而无需考虑是二元域还是素域。那EC_POINT_is_on_curve怎么知道是对哪种类型的有限域呢?其中关键就在这个方法集上。先来看看EC_POINT_is_on_curve是怎么实现的吧。
int EC_POINT_is_on_curve(const EC_GROUP *group, const EC_POINT *point)
{
if (group->meth->is_on_curve == 0) return 0;
if (group->meth != point->meth) return 0;
return group->meth->is_on_curve(group, point);
}
对于不同类型的有限域,只要将各自“判断点是否在曲线上”的算法定义好,并在方法集中将指向函数说明清楚,那么函数group->meth->is_on_curve(group, point)就可以各自指向正确的地方。对素域而言,方法集将is_on_curve指向ec_GFp_simple_is_on_curve,而对二元域而言,方法集将is_on_curve指向ec_GF2m_simple_is_on_curve。这样就做到了将“判断点是否在曲线上”函数接口的统一。
关于函数接口的统一问题,在后面会进一步讨论。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/162144.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...