OpenSSL密码库算法笔记——第5.1.2章 椭圆曲线算法集
大家好,又见面了,我是你们的朋友全栈君。
在定义椭圆曲线点群时出现了描述曲线所用算法的参数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.cn/162144.html原文链接:https://javaforall.cn
相关文章
- 【NLP基础】英文关键词抽取RAKE算法
- 密码发展史以及常用编码算法介绍
- 修改MySQL密码:快速又安全(改mysql密码)
- 使用Redis设置安全的用户名和密码(redis用户名和密码)
- 基于Pari数学软件浅谈RSA算法相关密码题型(基础篇)
- 解锁Oracle的密码之路(oracle的密码文件)
- wdcp控制面板密码忘记了重置密码的方法
- 如何快速更改MSSQL数据库密码(更改mssql密码)
- MSSQL密码修改命令的正确使用方法(命令修改mssql的密码)
- Oracle教你如何修改HR用户的密码(oracle修改hr密码)
- MySQL下载密码是什么(mysql下载密码是什么)
- phpmyadmin中配置文件现在需要绝密的短语密码的解决方法
- php密码生成类实例