以太坊go-ethereum签名部分源码解析

以太坊go-ethereum签名部分源码解析

golang标准库里的crypto/ecdsa椭圆曲线加密算法所提供的函数有:

  • ecdsa.PublicKey结构体通过持有一个elliptic,Curve接口的实现体,可以提供椭圆曲线的所有属性,和相关操作;PublicKey的成员(X,Y),对应于算法理论中公钥的坐标。

  • func GenerateKey(c elliptic.Curve, rand io.Reader) (*PrivateKey, error)
  • elliptic.Curve接口声明了椭圆曲线的相关操作方法,其中Add()方法就是椭圆曲线点倍积中的“点相加”操作,Double()就是点倍积中的“点翻倍”操作,ScalarMult()根本就是一个点倍积运算(参数k是标量),IsOnCurve()检查参数所代表的点是否在该椭圆曲线上;

  • elliptic.CurveParams结构体实现了curve接口的所有方法,另外用成员属性定义了一个具体的椭圆曲线,比如(Gx, Gy) 表示该椭圆曲线的基点,即算法理论中的G点; N 是与基点对应的可倍积阶数n;B是椭圆曲线几何方程中的参数b,注意此处ecdsa代码包中隐含的椭圆曲线方程为y^2 = x^3 - 3x + b,故只需一项参数b即可。

  • ecdsa.PrivateKey是暴露给外部使用的主要结构体类型,它其实是算法理论中的私钥和公钥的集合。它的成员D,才真正对应于算法理论中的(标量)私钥。

  • ecdsa.ecdsaSignature对应于生成的数字签名(r, s)。

  • // PublicKey represents an ECDSA public key.两个big.Int类型
    type PublicKey struct {
       elliptic.Curve
       X, Y *big.Int
    }
    
    // PrivateKey represents a ECDSA private key.
    type PrivateKey struct {
       PublicKey
       D *big.Int
    }
    
    type ecdsaSignature struct {
       R, S *big.Int
    }
//@Time  : 2018/3/23 11:33
//@Author: Greg Li
package main

import (
    "encoding/hex"
    "fmt"
    "github.com/ethereum/go-ethereum/crypto"
)

func main()  {
    // 创建账户
    key, err := crypto.GenerateKey()
    if err !=nil {
        fmt.Println(err)
    }

    // 私钥:64个字
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值