下面来看看利用Barrett约化实现的模乘运算。该运算和前面提到的模乘运算差别不大,都是先做大整数的乘法,只不过现在改用Barrett约化的思想来做模运算,而不是用经典模运算BN_nnmod。

───────────────────────────────────────

int BN_mod_mul_reciprocal(BIGNUM *r, const BIGNUM *x, const BIGNUM *y, BN_RECP_CTX * recp)

功能: 利用Barrett约化做模乘

输入: x【被乘数】,y【乘数】,recp【Barrett模数】

输出: r ← x×y mod recp

返回: 1【正常】 or 0【出错】

出处: bn_recp.c

───────────────────────────────────────

注意:这个模乘法其实是包含了模平方的。在函数体内部,会判断x与y是否相等,如果x=y则先做平方再做Barrett约化,否则,先做乘法再做Barrett约化。

OpenSSL密码库算法笔记——第 3.2.2章 利用Barrett约化实现相关推荐

  1. OpenSSL密码库算法笔记——第 2.2.4章 Barrett模数与相关函数

    为了便于使用Barrett约化,专门定义了一个结构体,我们将它称作Barrett模数.结构体的定义如下: struct bn_recp_ctx_st { BIGNUM N; BIGNUM Nr; in ...

  2. OpenSSL密码库算法笔记——第6.5.2章 密钥协商函数

    现在来看看OpenSSL中哪些函数是用来具体实现密钥协商的. ─────────────────────────────────────── int ECDH_compute_key(void *ou ...

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

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

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

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

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

    在定义椭圆曲线点群时出现了描述曲线所用算法的参数const EC_METHOD *meth,这一节就来看看这个参数有什么用处. 椭圆曲线算法集的定义如下. typedef struct ec_meth ...

  6. OpenSSL密码库算法笔记——第1.2.2章 comba乘法

    comba乘法就是用另外一种顺序来做乘法:           ----(1.4) 即按照由低到高的顺序计算乘积r的每一个字.其具体算法如下:(参见[3]算法3) ────────────────── ...

  7. OpenSSL密码库算法笔记——第1.2.5章 comba平方

    comba平方就是将comba乘法和经典平方的思想结合在一起: ----(1.9) 具体算法如下:(参见[3]算法4) ─────────────────────────────────────── ...

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

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

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

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

  10. OpenSSL密码库算法笔记——第2.2.2章 Barrett约化的优越性

    现在简单的将经典运算和Barrett约化做下对比.经典模运算就是做长除法,而Barrett约化与经典模运算不同. 经典模运算 = 除法. Barrett约化 = 2次特殊的除法 + 2次较特殊的乘法 ...

最新文章

  1. 重大要素改变中的机会选择包括_财务人员专业胜任能力要素及框架
  2. 从原理到落地,七大维度详解矩阵分解推荐算法
  3. scala-04For与Function进阶实战、Lazy的使用
  4. openfiler setup一,安装
  5. python web-python web入坑指南
  6. 揭开雷达的面纱(科普) 发射机
  7. processing python模式_python学习Processing
  8. 让AI学习如何玩游戏 OpenAI打造强化学习通用模型
  9. linux待机流程,Linux睡眠喚醒機制--Kernel態
  10. Libevent初探
  11. 多mysql实例下开发需要注意主从同步延迟
  12. stringreader_Java StringReader skip()方法与示例
  13. Android 控件
  14. 解密小程序码:36条放射线
  15. Redis详细安装教程与启动redis
  16. 图像处理中的数学原理归类
  17. TKinter美化库——tkkbootstrap
  18. HTML5游戏实战 1 50行代码实现正面跑酷游戏
  19. php银行卡号查询接口,银行卡归属地查询
  20. TypeError: only size-1 arrays can be converted to Python scalars 报错如何解决

热门文章

  1. 自己处理域名、主机备案流程 + 公网安备流程,总共耗时半个月左右
  2. android app 检测是否开启了开发者模式
  3. centos7创建asm磁盘_centos7下安装oracle rac使用udev绑定磁盘方法
  4. 剑网三手游哪个服务器人多稳定,“剑网三”手游开服后,我听了半个小时的骂街...
  5. 网易2020校招数据分析方向正式批笔试题 解析
  6. JavaScript和TypeScript学习心得
  7. 如何用文本文档编写python程序
  8. 常用iOS开发网站资源
  9. Jmeter性能测试之命令行执行和生成测试报告
  10. selenium调用edge driver的坑