OpenSSL密码库算法笔记——第5.1.2章 椭圆曲线算法集

OpenSSL密码库算法笔记——第5.1.2章 椭圆曲线算法集在定义椭圆曲线点群时出现了描述曲线所用算法的参数constEC_METHOD*meth,这一节就来看看这个参数有什么用处。椭圆曲线算法集的定义如下。typedefstructec_method_stEC_METHOD;structec_method_st{(具体定义略,详情可参见代码文件ec_lcl.h)};//EC_METHOD在结构体ec…

大家好,又见面了,我是你们的朋友全栈君。

在定义椭圆曲线点群时出现了描述曲线所用算法的参数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。这样就做到了将“判断点是否在曲线上”函数接口的统一。

关于函数接口的统一问题,在后面会进一步讨论。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/162144.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • jvm调优工具介绍

    jvm调优工具介绍jvm实战调优

    2022年5月25日
    34
  • NSGA2 算法Matlab实现「建议收藏」

    NSGA2 算法Matlab实现「建议收藏」为了能随时了解Matlab主要操作及思想。故本文贴上NSGA-Ⅱ算法Matlab实现(测试函数为ZDT1)。更多内容访问omegaxyz.comNSGA-Ⅱ就是在第一代非支配排序遗传算法的基础上改进而来,其改进主要是针对如上所述的三个方面:①提出了快速非支配排序算法,一方面降低了计算的复杂度,另一方面它将父代种群跟子代种群进行合并,使得下一代的种群从双倍的空间中进行选取,从而保留了

    2022年5月19日
    42
  • 关于sstream的灵活使用

    关于sstream的灵活使用问题有10000个队伍参加。经过工作人员认真负责的统计,本来已经统计好了这一万个队伍的分数和排名,并按照排名从高到低依次进行了编号(从1到10000)但是由于一个非常偶然的因素,导致其中三个编号的数据丢失,而且剩余编号的顺序也全被打乱了。你需要编写一个程序,根据还保留的统计数据,来判断哪些编号的数据丢失了,并将这些编号按照从小到大的顺序重新拼接为一个新数字,然后计算这个新数字除以11的余数。如…

    2022年6月3日
    35
  • es6数组的flat()方法

    es6数组的flat()方法Array.prototype.flat()flat()方法会按照一个可指定的深度递归遍历数组,并将所有元素与遍历到的子数组中的元素合并为一个新数组返回。Array.prototype.flat()用于将嵌套的数组“扁平化”,将二维数组变成一维数组。该方法返回一个新数组,对原数据没有影响。语法:varnewArray=arr.flat([depth])参数:depth可选,指定要提取嵌套数组的结构深度,默认值为1。返回值:一个包含数组与子数组中所有元素的新数组。示例:var

    2022年5月3日
    121
  • dstat使用[通俗易懂]

    dstat使用[通俗易懂]1、安装方法一:yum#yuminstall-ydstat方法二:rpm官网下载地址:http://dag.wieers.com/rpm/packages/dstat #wget http://dag.wieers.com/rpm/packages/dstat/dstat-0.6.7-1.rh7.rf.noarch.rpm#rp

    2022年6月15日
    45
  • Android使用HttpClient方法和易错问题

    Android使用HttpClient方法和易错问题

    2021年9月1日
    176

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号