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

本文详细介绍了Comba平方算法,这是一种结合了Comba乘法和经典平方思想的高效算法,适用于大数运算。文章深入讲解了算法的具体步骤,包括如何进行乘法、加法以及进位操作,并提供了实现该算法的函数说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

comba平方就是将comba乘法和经典平方的思想结合在一起:

 …………(1.9)

具体算法如下:(参见[3]算法4

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

算法:    comba平方

step1:  c_{0}\leftarrow c_{1}\leftarrow c_{2}\leftarrow 0

step2:   对k从0到(2n-1),执行:

               2.1) 对每一对,执行:

2.1.1)      (uv)=ai×bj,

2.1.2)      如果(i < j),(uv)<<1,c2←带进位加法(c2,0),

2.1.3)      c0←加法(c0,v),c1←带进位加法(c1,u),c2←带进位加法(c2,0)。

               2.2)

step3:   r_{2n-1}\leftarrow c_{0}

step3:   返回r

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

在步骤2中:当i=j时,做一个乘法(uv)=ai×bj和三个加法: c0←加法(c0,v),c1←带进位加法(c1,u),c2←带进位加法(c2,0),这可以用宏定义#define sqr_add_c (BN_ULONG a, int i, BN_ULONG c0, BN_ULONG c1, BN_ULONG c2) 实现,即

                  …………(1.10)

当i < j时,还要多做(uv)<<1和c2←带进位加法(c2,0),此时用#define sqr_add_c2 (BN_ULONG a, int i, int j, BN_ULONG c0, BN_ULONG c1, BN_ULONG c2) 实现,即

。            …………(1.11)

comba平方算法的函数为:

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

void bn_sqr_comba8(BN_ULONG *r, const BN_ULONG *a)

功能:    8个字的comba平方

输入:    a

输出:   

返回:    -

出处:    bn_asm.c

备注:    a实际长度超过8时,也仅仅将a的低8个字平方。

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

说明:另外还有一个使用comba乘法思想的函数void bn_sqr_comba8(BN_ULONG *r, const BN_ULONG *a),它是做4个字的comba平方。

关于这些函数与宏定义的关系请参见下节§1.2.6。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值