本文主要是介绍OpenSSL密码库算法笔记——第5.4.7章 椭圆曲线点的射影系数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
设置射影系数就是将分别对射影点point的X、Y、Z分量赋值:
point->X←x,point->Y←y,point->Z←z。 …………(5.4)
如果希望在今后的计算中提高运算效率,可以将各分量(大整数)转化成Montgomery整数后再做对应的赋值:
point->X←to_mont(x),
point->Y←to_mont(y),
point->Z←to_mont(z),…………(5.5)
至于采用那种方案,这就得看方法集meth 对编码函数ec_GFp_mont_field_encode和解码函数ec_GFp_mont_field_decode的定义,这一点可参见设置射影系数的代码函数。
另外,为了今后计算的方便,在设置点时还需要记录下表示Z分量是否为1的参数Z_is_one,即point->Z_is_one ← (Z==1)。
───────────────────────────────────────
int EC_POINT_set_Jprojective_coordinates_GFp(const EC_GROUP *group, EC_POINT *point, const BIGNUM *x, const BIGNUM *y, const BIGNUM *z)
功能: 设置Jacob射影点的x、y、z坐标
输入: group,x,y,z
输出: point
返回: 1【正常】or 0【出错】
出处: ec_lib.c
调用: ▼ int ec_GFp_simple_set_Jprojective_coordinates_GFp(const EC_GROUP *group, EC_POINT *point,const BIGNUM *x, const BIGNUM *y, const BIGNUM *z)
───────────────────────────────────────
获取射影系数需要根据设置射影系数的函数来定。
如果设置时只是普通的复制对应分量,那获取射影系数就只需要将射影点point的X、Y、Z分量拷贝出来即可:
x←point->X,y←point->Y,z←point->Z。 …………(5.6)
如果设置时将各分量大整数转化成Montgomery整数,那就读取时需要进行转化:
x←from_mont(point->X),
y←from_mont(point->Y),
z←from_mont(point->Z),…………(5.7)
同样地,采用哪种方案得看方法集meth 对编码函数ec_GFp_mont_field_encode和解码函数ec_GFp_mont_field_decode的定义。详情参见原代码。
───────────────────────────────────────
int EC_POINT_get_Jprojective_coordinates_GFp(const EC_GROUP *group, const EC_POINT *point, BIGNUM *x, BIGNUM *y, BIGNUM *z)
功能: 获取Jacobi射影点的x、y、z坐标
输入: group,point
输出: x,y,z
返回: 1【正常】 or 0【出错】
出处: ec_lib.c
调用: ▼ int ec_GFp_simple_get_Jprojective_coordinates_GFp(const EC_GROUP *group, const EC_POINT *point, BIGNUM *x, BIGNUM *y, BIGNUM *z)
───────────────────────────────────────
这篇关于OpenSSL密码库算法笔记——第5.4.7章 椭圆曲线点的射影系数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!