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

本文详细介绍了如何在椭圆曲线密码学中使用射影坐标系,包括设置和获取Jacob射影点的坐标,以及在计算中采用Montgomery整数以提高效率的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

设置射影系数就是将分别对射影点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)

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值