OpenSSL密码库算法笔记——第1.1.1章 绝对值加减法

192 篇文章 62 订阅
137 篇文章 80 订阅

粗略的说,两个大整数a、b做绝对值加法r=|a|+|b|就是从低字到高字分别做带进位的加法。具体说来就是:

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

算法:    绝对值加法

step 1.     做低n个字的齐字加法,其中n=min(a的字长,b的字长),最终进位记为carry。

step 2.     将余下的高位字复制到r的相应字。

step 3.     如果carry不为零,则对应的字加上这个进位。

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

step1中低n个字的齐字加法即:

BN_ULONG bn_add_words(BN_ULONG *r, const BN_ULONG *a, const BN_ULONG *b, int n)函数实现,其中的n控制a、b的字长,它必须小于等于a、b的实际长度。

绝对值加法的函数为:

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

int BN_uadd(BIGNUM *r, const BIGNUM *a, const BIGNUM *b)

功能:    绝对值加法

输入:    a,b

输出:    r=|a|+|b|

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

出处:    bn_add.c

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

两个大整数a、b做绝对值减法r=|a|-|b|就是从低字到高字分别做带借位的减法。为了保证正确性,要求|a| > |b|。

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

算法:    绝对值减法

step 1.     做低n个字的齐字减法,其中n为b的字长,最终借位记为borrow。

step 2.     将a余下的高位字复制到r的相应字。

step 3.     如果borrow不为零,则对应的字减去这个进位。

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

step1中低n个字的齐字减法即:

BN_ULONG bn_sub_words(BN_ULONG *r, const BN_ULONG *a, const BN_ULONG *b, int n)函数实现,其中的n控制a、b的字长,它必须小于等于a、b的实际字长。

绝对值加法的函数为:

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

int BN_usub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b)

功能:    绝对值减法

输入:    a,b

输出:    r=|a|-|b|

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

出处:    bn_add.c

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值