You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

以太坊公钥转换及椭圆曲线点加法invert转Mod的Python实现

以太坊公钥转换与椭圆曲线点加法优化实现

需求说明

在以太坊区块链开发中,需将公钥转换为特定格式的整数(原公式为 x + k*y,其中x是公钥X坐标,y是Y坐标,k=2^256),同时要将椭圆曲线点加法函数point_add中使用的sympy.invert替换为Mod函数计算模逆元,并调整公钥转换逻辑以适配修改后的点加法实现。

完整实现代码

1. 公钥转换模块

# 十六进制公钥
hex_public_key = '6d7c9b524dcad3695d0c479b4f5e88bdea35714cf859ede6d7fef67027b1ed15ee5c95bfc0e1c9b8ead9cabf8ed485a29593af925b394bed1b113af742de80fb'

# 十六进制转字节并提取X、Y坐标
public_key_bytes = bytes.fromhex(hex_public_key)
public_key_x = int.from_bytes(public_key_bytes[:32], 'big')
public_key_y = int.from_bytes(public_key_bytes[32:], 'big')

# 椭圆曲线参数
k = 2 ** 256
p = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F

# 调整后的公钥整数转换逻辑:确保坐标在模p范围内后再组合
x_mod = public_key_x % p
y_mod = public_key_y % p
public_key_c = x_mod + k * y_mod

print("转换后的公钥整数:")
print(public_key_c)

2. 修改后的点加法函数

from sympy import Mod

def point_add(P1_c, P2_c, p, k):
    """椭圆曲线上的点加法实现(使用Mod计算模逆)"""
    x1, y1 = P1_c % k, P1_c // k
    x2, y2 = P2_c % k, P2_c // k

    if x1 == x2 and y1 == y2:
        # 点加倍:使用Mod计算2*y1在模p下的逆元
        inv_2y1 = Mod(1, p) / Mod(2 * y1, p)
        m = (3 * x1 ** 2 * inv_2y1) % p
    else:
        # 点加法:使用Mod计算(x2 - x1)在模p下的逆元
        inv_xdiff = Mod(1, p) / Mod(x2 - x1, p)
        m = ((y2 - y1) * inv_xdiff) % p

    x3 = (m ** 2 - x1 - x2) % p
    y3 = (m * (x1 - x3) - y1) % p

    return x3 + k * y3

3. 调用示例

# 假设两个转换后的公钥整数
P1_c = public_key_c  # 用上面转换得到的公钥
P2_c = public_key_c  # 示例用同一个点,实际替换为另一个公钥整数

# 执行点加法
result_c = point_add(P1_c, P2_c, p, k)
result_x = result_c % k
result_y = result_c // k

print("\n点加法结果:")
print(f"X坐标: {result_x}")
print(f"Y坐标: {result_y}")

修改说明

  • 公钥转换逻辑调整:

    • 增加显式对X、Y坐标取模p的操作,确保坐标始终在椭圆曲线有限域范围内,提升代码鲁棒性(以太坊公钥本身已满足该条件,显式处理可兼容异常输入)。
    • 保留原x + k*y组合方式,确保与点加法函数的坐标解析逻辑匹配。
  • 点加法函数修改:

    • 替换sympy.invert为Mod计算模逆元:通过Mod(1, p) / Mod(a, p)实现等价的模逆运算,符合sympy的Mod类运算规则。
    • 所有中间运算保留% p取模,确保结果始终在有限域内。

内容的提问来源于stack exchange,提问作者user27394478

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 11:53:10