OpenSSL密码库算法笔记——第5.4.4章 椭圆曲线点的比较

本文详细解析了如何判断两个三维空间中的点是否相等,特别关注于通过仿射点比较的方法,并深入探讨了EC_POINT_cmp函数的实现原理,该函数用于判断椭圆曲线上的两个点是否相同。

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

对点的比较有必要先解释一下。怎样判断两个点P1=(x1, y1, z1)和P2=(x2, y2, z2)相等呢?很明显不能根据各分量对应相等来判断点相同,正确的做法是判断这两个点对应过去的仿射点是否相等。即比较(x1/z12, y1/z13)和(x2/z22, y2/z23)是否相等。为了避免做逆运算,可以消去分母:

    如果某个点的Z分量为1,很明显(5.3)式就可以简化。这就是在点的定义中加入参数Z_is_one的原因。

下面来解释点的比较函数。

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

int EC_POINT_cmp(const EC_GROUP *group, const EC_POINT *a, const EC_POINT *b)

功能:    判断两个点是否相同

输入:    groupab

输出:   

返回:    1【不相同】 or 0【相同】 or 1【出错】

出处:    ec_lib.c

调用:        int ec_GFp_simple_cmp(const EC_GROUP *group, const EC_POINT *a, const EC_POINT *b)

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值