OpenSSL密码库算法笔记——第5.4.7章 椭圆曲线点的射影系数

设置射影系数就是将分别对射影点pointXYZ分量赋值:


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射影点的xyz坐标

输入:    groupxyz

输出:    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)

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

获取射影系数需要根据设置射影系数的函数来定。

如果设置时只是普通的复制对应分量,那获取射影系数就只需要将射影点pointXYZ分量拷贝出来即可:

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射影点的xyz坐标

输入:    grouppoint

输出:    xyz

返回:    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)