下面来看看利用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约化。