在§5.3.3设置椭圆曲线特征等函数中会遇到编码函数ec_GFp_mont_field_encode和解码函数ec_GFp_mont_field_decode,其实这两个函数是在做大整数和Montgomery整数之间的转换,它们与前面提到的符号to_mont和from_mont是一个意思。
ec_GFp_mont_field_encode(group, r, a)
BN_to_montgomery(r, a, group->field_data1)
r ← to_mont(a)
表示将大整数a转化成Montgomery整数r。
ec_GFp_mont_field_decode(group, r, a)
BN_from_montgomery(r, a, group->field_data1)
r ← from_mont(a)
表示将Montgomery整数a转化成大整数r。
to_mont和from_mont是我们自己定义的见名识意的简单记号,而另外的四个函数ec_GFp_mont_field_encode、ec_GFp_mont_field_decode、BN_to_montgomery和BN_from_montgomery是代码中定义了的函数。BN_to_montgomery和BN_from_montgomery的详细介绍请参见§3.2.3,ec_GFp_mont_field_encode和ec_GFp_mont_field_decode的详细介绍马上给出。
───────────────────────────────────────
int ec_GFp_mont_field_encode(const EC_GROUP *group, BIGNUM *r, const BIGNUM *a)
功能: 利用群特征将大整数a转化成Montgomery整数r
输入: group,a
输出: r
返回: 1【正常】or 0【出错】
出处: ecp_mont.c
备注: 其作用等价于 r ← to_mont(a)
也等价于 BN_to_montgomery(r, a, group->field_data1);
───────────────────────────────────────
接下来是解码函数ec_GFp_mont_field_decode的详细解释。
───────────────────────────────────────
int ec_GFp_mont_field_decode(const EC_GROUP *group, BIGNUM *r, const BIGNUM *a)
功能: 利用群特征将Montgomery型数a转化成大整数r
输入: group,a
输出: r
返回: 1【正常】or 0【出错】
出处: ecp_mont.c
备注: 其作用等价于 r ← from_mont(a)
也等价于 BN_from_montgomery(r, a, group->field_data1);
───────────────────────────────────────