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

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

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

  1. OpenSSL密码库算法笔记——第4.1.1章 平方和算法

    平方和算法是模指数运算的基本.如果指数e的二进制展开为,则利用平方和算法可以这样计算模指数: .                                        ----(4.1) 现在 ...

  2. OpenSSL密码库算法笔记——第4.1.2章 窗口算法

    如果存储空间足够的话,可以事先将一部分计算结果(比如指数很小时的运算结果)存储起来,到后面需要时再直接调用.窗口算法就用到了这种思想,它一次可以处理指数e的多个比特(不妨设为k比特,而k称为窗口的大小 ...

  3. OpenSSL密码库算法笔记——第5.1.1章 椭圆曲线点群的定义

    下面定义的椭圆曲线点群不仅包含了域的信息和曲线的信息,甚至还包括了很多别的有利于实现的信息. 椭圆曲线点群的定义如下. typedef struct ec_group_st   EC_GROUP; s ...

  4. OpenSSL密码库算法笔记——第5.3.1章 椭圆曲线点群的算法集

    在使用椭圆曲线之前,必需先设定好曲线上的算法集,只有这样在应用中才知道应该使用哪些函数. 下面就来看看怎样设定好曲线上的方法集. ─────────────────────────────────── ...

  5. OpenSSL密码库算法笔记——第5.4.6章 椭圆曲线的无穷远点

    前面已经提到无穷远点为椭圆曲线加法群的单位元,记为O.这个无穷远点在仿射坐标系下是无法表示的,在Jacobi射影坐标系下为,.为了实现起来方便,在代码中将无穷远点简化为Z分量为0,而不再去考虑X坐标和 ...

  6. OpenSSL密码库算法笔记——第5.4.2章 椭圆曲线上点的射影坐标表示

    射影坐标又分成好几种--标准射影坐标.Jacobi射影坐标.Chudnovsky射影坐标. 在标准射影坐标中,射影点(x, y, z),z≠0,对应仿射点(x/z, y/z),椭圆曲线的射影方程为y2 ...

  7. OpenSSL密码库算法笔记——第5.1.3章 椭圆曲线点的定义

    有了椭圆曲线后,自然就得考虑曲线上的点.点的表示有很多种,最简单最常见的是用仿射坐标(x, y)表示,但使用仿射坐标会使得点的运算速度很慢,所以出现了多种射影坐标.在代码中选择使用的是仿射坐标和Jac ...

  8. OpenSSL密码库算法笔记——第5.4.9章 椭圆曲线点的加法

    先来回忆下前面提到的仿射点的加法. 曲线上的两个放射点P1=(x1,y1)和P2=(x2,y2)做加法P3=P1+P2=(x3,y3),当P1=P2时,称此时的加法运算为二倍点运算.如果P1≠-P2, ...

  9. OpenSSL密码库算法笔记——第5.4.1章 椭圆曲线上点的仿射坐标表示

    椭圆曲线上点的表示分成仿射坐标系表示和射影坐标表示形式,首先来看看仿射坐标表示形式. 素域Fp上的椭圆曲线E由(仿射)方程y2=x3+ax+b决定,设曲线上的两个点为P1=(x1,y1),P2=(x2 ...

最新文章

  1. 开发板tftp:timeout问题
  2. html5语义化标签大全
  3. 用Eclipse开发JavaWeb项目:错误信息 javax.servlet.http.HttpServlet was not found on the Java Build Path...
  4. linux下文件描述符的介绍
  5. 怎么取消自动格式化_iPhone自动扣费怎么取消?App Store、微信、支付宝关闭自动扣费教程...
  6. 95-10-120-启动-GroupCoordinator
  7. BAT自动IP地址切换脚本
  8. vue + ElementUI如何动态删除表格当前行内容
  9. 计算机基础知识教程excel试题,大学生计算机基础excel试题及答案
  10. 计算机科学导论整理知识点,《计算机科学导论》 数据库基础知识
  11. CTF-密码学-培根密码
  12. 第22次 CCF CSP认证一二题题解及感悟
  13. 计算机电源风扇是吹风还是吸风,回答一些网友关于机箱内风道以及电源吸风还是抽风的问题...
  14. xshell如何使用
  15. 【那些年,我们一起追的女孩】第十四章
  16. S700K转辙机多机牵引道岔故障处理【转自微信公众号高速铁路信号技术交流】
  17. 设计模式:可复用面向对象软件的基础
  18. C#代码中用UL 0B 0X等前后缀表示数字
  19. 嵌入式开发对学历门槛要求高吗?
  20. 我们都是代码接盘侠,请做一位好前任!

热门文章

  1. 金蝶引出文件到服务器,金蝶K3标准凭证引出并引入
  2. TP5放到线上lnmp环境 无法访问,以及隐藏inde.php 我的解决步骤
  3. html地图模块,百度地图自定义控件模板.html
  4. 建筑行业全周期区块链产融平台
  5. centos pdf 方块的解决方法
  6. 用MS Windows 字体美化 Ubuntu(6.06)
  7. CVE-2017-7494的复现(Linux永恒之蓝)
  8. adb命令以及云平台测试的报告
  9. 观纪录片《定位》有感
  10. CCL latex template脚注的问题