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

所谓的经典平方就是利用经典乘法的那套思想为基础,再结合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。

猜你喜欢

转载自blog.csdn.net/samsho2/article/details/85841288