OpenSSL密码库算法笔记——第2.3.3章 Montgomery模数与相关函数
为了便于使用Montgomery约化,专门定义了一个结构体,我们将它称作Montgomery模数,这点与Barrett模数类似。结构体的定义如下:
struct bn_mont_ctx_st
{
int ri;
BIGNUM RR;
BIGNUM N;
BIGNUM Ni;
BN_ULONG n0;
int flags;
};
typedef struct bn_mont_ctx_st BN_MONT_CTX;
其中:
- ri 模数N的长度,若记N的字长为len,则ri=len×32;
- RR 即R2 mod N,在将大整数转化到Montgomery整数时用。R=2ri=Blen。
- N 模数;
- Ni 即上面算法中提到的,。
- n0 Ni的最低字。
- flags Montgomery模数的属性,和大整数的属性类似。
为了方便对这种新的结构体进行操作与管理,定义了许多相关的基本函数来做实现一些基本的功能——初始化、新建、释放、设置模数、Montgomery模数和普通大整数之间的转换。
(1). 首先看看怎样新建和释放一个Montgomery模数。这一点与大整数的新建和释放(见§0.2.1)是非常相似的。同样是两种方法都可以新建一个Montgomery模数。
- 方法1:先定义再初始化:
BN_MONT_CTX mont;
BN_MONT_CTX_init (&mont);
- 方法2:新建一个指向Montgomery模数的指针,再调用新建函数。
BIGNUM * mont;
mont=BN_MONT_CTX_new();
Montgomery模数的释放也和大整数相同。
- 用方法1——BN_MONT_CTX_init新建的Montgomery数,无法人为地释放。只有当该大整数所在的函数执行完毕后,才能同别的数据类型一起被释放。
- 用方法2——BN_MONT_CTX_new新建的Montgomery数,可以人为地释放。调用专门的释放函数BN_free即可:
BN_MONT_CTX_free (mont);
下面简要介绍下上面涉及到的三个函数。方法1用到的初始化函数:
───────────────────────────────────────
void BN_MONT_CTX_init(BN_MONT_CTX *ctx)
功能: 初始化Montgomery模数,内部信息置零。
输入: ctx
输出: -
返回: -
出处: bn_mont.c
备注: 内部信息(n0除外)置零。
───────────────────────────────────────
方法2用到的新建函数:
───────────────────────────────────────
BN_MONT_CTX *BN_MONT_CTX_new(void)
功能: 新建一个Montgomery模数,并将内部信息置零
输入: -
输出: -
返回: 新建的Montgomery模数地址
出处: bn_mont.c
───────────────────────────────────────
释放Montgomery模数用到的函数:
───────────────────────────────────────
void BN_MONT_CTX_free(BN_MONT_CTX *mont)
功能: 释放Montgomery模数
输入: mont
输出: -
返回: -
出处: bn_mont.c
───────────────────────────────────────
(2). 设置Montgomery模数。初始化或者新建好一个Montgomery模数以后,该模数内部信息全部为零,所以需要设置其内部信息。可以是用一个大整数来设置模数的内部信息,也可以直接从一个已有的Montgomey模数那里复制。
───────────────────────────────────────
int BN_MONT_CTX_set(BN_MONT_CTX *mont, const BIGNUM *mod)
功能: 利用给定大数设置Montgomery模数
输入: mod【用来设置Montgomey模数的大整数】
输出: mont【Montgomery模数】
返回: 1【正常】 or 0【出错】
出处: bn_mont.c
备注: 利用给定大数mod设置好Montgomery模数中相关信息——ri,RR,N,Ni,n0。
───────────────────────────────────────
复制Montgomery模数如下:
───────────────────────────────────────
BN_MONT_CTX *BN_MONT_CTX_copy (BN_MONT_CTX *to, BN_MONT_CTX *from)
功能: 复制Montgomery模数
输入: from【源模数】
输出: to ← from
返回: to【目标模数,正常】 or NULL【出错】
出处: bn_mont.c
───────────────────────────────────────
OpenSSL密码库算法笔记——第2.3.3章 Montgomery模数与相关函数相关推荐
- OpenSSL密码库算法笔记——第 2.2.4章 Barrett模数与相关函数
为了便于使用Barrett约化,专门定义了一个结构体,我们将它称作Barrett模数.结构体的定义如下: struct bn_recp_ctx_st { BIGNUM N; BIGNUM Nr; in ...
- OpenSSL密码库算法笔记——第6.5.2章 密钥协商函数
现在来看看OpenSSL中哪些函数是用来具体实现密钥协商的. ─────────────────────────────────────── int ECDH_compute_key(void *ou ...
- OpenSSL密码库算法笔记——第4.1.1章 平方和算法
平方和算法是模指数运算的基本.如果指数e的二进制展开为,则利用平方和算法可以这样计算模指数: . ----(4.1) 现在 ...
- OpenSSL密码库算法笔记——第4.1.2章 窗口算法
如果存储空间足够的话,可以事先将一部分计算结果(比如指数很小时的运算结果)存储起来,到后面需要时再直接调用.窗口算法就用到了这种思想,它一次可以处理指数e的多个比特(不妨设为k比特,而k称为窗口的大小 ...
- OpenSSL密码库算法笔记——第5.1.2章 椭圆曲线算法集
在定义椭圆曲线点群时出现了描述曲线所用算法的参数const EC_METHOD *meth,这一节就来看看这个参数有什么用处. 椭圆曲线算法集的定义如下. typedef struct ec_meth ...
- OpenSSL密码库算法笔记——第1.2.2章 comba乘法
comba乘法就是用另外一种顺序来做乘法: ----(1.4) 即按照由低到高的顺序计算乘积r的每一个字.其具体算法如下:(参见[3]算法3) ────────────────── ...
- OpenSSL密码库算法笔记——第1.2.5章 comba平方
comba平方就是将comba乘法和经典平方的思想结合在一起: ----(1.9) 具体算法如下:(参见[3]算法4) ─────────────────────────────────────── ...
- OpenSSL密码库算法笔记——第5.1.1章 椭圆曲线点群的定义
下面定义的椭圆曲线点群不仅包含了域的信息和曲线的信息,甚至还包括了很多别的有利于实现的信息. 椭圆曲线点群的定义如下. typedef struct ec_group_st EC_GROUP; s ...
- OpenSSL密码库算法笔记——第5.3.1章 椭圆曲线点群的算法集
在使用椭圆曲线之前,必需先设定好曲线上的算法集,只有这样在应用中才知道应该使用哪些函数. 下面就来看看怎样设定好曲线上的方法集. ─────────────────────────────────── ...
- OpenSSL密码库算法笔记——第2.2.2章 Barrett约化的优越性
现在简单的将经典运算和Barrett约化做下对比.经典模运算就是做长除法,而Barrett约化与经典模运算不同. 经典模运算 = 除法. Barrett约化 = 2次特殊的除法 + 2次较特殊的乘法 ...
最新文章
- 简单的 基于seajs一个base基础库
- 情感分析之电影评论分析-基于Tensorflow的LSTM
- 如何简单的在 ASP.NET Core 中集成 JWT 认证?
- python如何创建一个类_python 3——自定义一个类、object类
- Native方式运行Fabric(非Docker方式)
- linux下加载so文件
- 软件设计模式学习总结
- 【Android音视频开发】【007】SurfaceView实现H264播放器
- Shell中IF大于等于小于
- PyTorch深度学习(B站刘二大爷)第八讲作业——Kaggle网站泰坦尼克号Titanic
- Docker容器之Consul部署
- pygame创建透明背景
- python提示unmatched_Python: Unmatched group exception
- 飞思卡尔 I.MX6Q-高分辨率(1080P)视频采集编码
- plt.scatter 中cmap参数详解
- FPG-超越FPN/NAS-FPN的表现 | Feature Pyramid Grids
- 上海30K*16和深圳22K*14的offer同时揽下,真的是行情不好吗?
- 突发!IBM 中国研究院倒闭了,码农:又少了一个上岸养老的地方,搞科研的打不过搞996的...
- 电路板焊接技巧实践(没有电烤箱条件下)
- 大幅面柔性印刷线路板缺陷在线视觉检测系统设计