OpenSSL密码库算法笔记——第1.2.4章 经典平方

本文深入探讨了经典平方算法,一种基于经典乘法思想并结合特殊公式简化运算的方法。通过使用字与字的平方和乘法,该算法有效地实现了大数的平方计算。文章详细介绍了其实现过程及所涉及的函数和宏定义。

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

所谓的经典平方就是利用经典乘法的那套思想为基础,再结合ai×aj+aj×ai=2ai×aj来简化运算:

                    …………(1.7)

即用字与字的平方做ai2,用字与字的乘法做ai×aj(i≠j)。

经典平方的函数为:

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

void bn_sqr_normal(BN_ULONG *r, const BN_ULONG *a, int n, BN_ULONG *tmp)

功能:    经典平方算法

输入:    a,n【a的字长】,tmp【临时变量】

输出:    r=a^{2}

返回:    -

出处:    bn_sqr.c

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

说明:

(1)、(1.7)式的第二个求和项直接用函数void bn_sqr_words(BN_ULONG *r, const BN_ULONG *a, int n)可以实现。而第一个求和项,可以用经典乘法的思想将之分割成a×a0和a×ai(i≠0),分别调用函数BN_ULONG bn_mul_words(BN_ULONG *rp, const BN_ULONG *ap, int num, BN_ULONG w)BN_ULONG bn_mul_add_words (BN_ULONG *rp, const BN_ULONG *ap, int num, BN_ULONG w)实现。

(2)、平方的基础是字的平方ai2,用宏定义#define sqr64(BN_ULONG lo, BN_ULONG ho, BN_ULONG in)来实现。即:

                           ho||lo=in^{2}             …………(1.8)

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值