Go 语言

Go 语言教程 Go 语言环境安装 Go 语言结构 Go 语言基础语法 Go 语言数据类型 Go 语言变量 Go 语言常量 Go 语言运算符 Go 语言条件语句 Go 语言 if 语句 Go 语言 if...else 语句 Go 语言 if 语句嵌套 Go 语言 switch 语句 Go 语言 select 语句 Go 语言循环语句 Go 语言 for 循环 Go 语言循环嵌套 Go 语言 break 语句 Go 语言 continue 语句 Go 语言 goto 语句 Go 语言函数 Go 语言函数值传递值 Go 语言函数引用传递值 Go 语言函数作为值 Go 语言函数闭包 Go 语言函数方法 Go 语言变量作用域 Go 语言数组 Go 语言多维数组 Go 语言向函数传递数组 Go 语言指针 Go 语言指针数组 Go 语言指向指针的指针 Go 语言指针作为函数参数 Go 语言结构体 Go 语言切片(Slice) Go 语言范围(Range) Go 语言Map(集合) Go 语言递归函数 Go 语言类型转换 Go 语言接口 Go 错误处理 Go 语言开发工具Go 语言标准库

Go 语言标准库


package elliptic

import "crypto/elliptic"

elliptic包实现了几条覆盖素数有限域的标准椭圆曲线。

Go语言标准库 >>


  • type Curve
  • type CurveParams
  • func GenerateKey(curve Curve, rand io.Reader) (priv []byte, x, y *big.Int, err error)
  • func Marshal(curve Curve, x, y *big.Int) []byte
  • func Unmarshal(curve Curve, data []byte) (x, y *big.Int)
  • type Curve

    type Curve interface {
        // Params返回椭圆曲线的参数
        Params() *CurveParams
        // IsOnCurve判断一个点是否在椭圆曲线上
        IsOnCurve(x, y *big.Int) bool
        // 返回点(x1,y1)和点(x2,y2)相加的结果
        Add(x1, y1, x2, y2 *big.Int) (x, y *big.Int)
        // 返回2*(x,y),即(x,y)+(x,y)
        Double(x1, y1 *big.Int) (x, y *big.Int)
        // k是一个大端在前格式的数字,返回k*(Bx,By)
        ScalarMult(x1, y1 *big.Int, k []byte) (x, y *big.Int)
        // k是一个大端在前格式的数字,返回k*G,G是本椭圆曲线的基点
        ScalarBaseMult(k []byte) (x, y *big.Int)
    }

    Curve代表一个短格式的Weierstrass椭圆曲线,其中a=-3。

    Weierstrass椭圆曲线的格式:y**2 = x**3 + a*x + b

    参见http://www.hyperelliptic.org/EFD/g1p/auto-shortw.html

    func P224

    func P224() Curve

    返回一个实现了P-224的曲线。(参见FIPS 186-3, section D.2.2)

    func P256

    func P256() Curve

    返回一个实现了P-256的曲线。(参见FIPS 186-3, section D.2.3)

    func P384

    func P384() Curve

    返回一个实现了P-384的曲线。(参见FIPS 186-3, section D.2.4)

    func P521

    func P521() Curve

    返回一个实现了P-512的曲线。(参见FIPS 186-3, section D.2.5)

    type CurveParams

    type CurveParams struct {
        P       *big.Int // 决定有限域的p的值(必须是素数)
        N       *big.Int // 基点的阶(必须是素数)
        B       *big.Int // 曲线公式的常量(B!=2)
        Gx, Gy  *big.Int // 基点的坐标
        BitSize int      // 决定有限域的p的字位数
    }

    CurveParams包含一个椭圆曲线的所有参数,也可提供一般的、非常数时间实现的椭圆曲线。

    func (*CurveParams) Params

    func (curve *CurveParams) Params() *CurveParams

    func (*CurveParams) IsOnCurve

    func (curve *CurveParams) IsOnCurve(x, y *big.Int) bool

    func (*CurveParams) Add

    func (curve *CurveParams) Add(x1, y1, x2, y2 *big.Int) (*big.Int, *big.Int)

    func (*CurveParams) Double

    func (curve *CurveParams) Double(x1, y1 *big.Int) (*big.Int, *big.Int)

    func (*CurveParams) ScalarMult

    func (curve *CurveParams) ScalarMult(Bx, By *big.Int, k []byte) (*big.Int, *big.Int)

    func (*CurveParams) ScalarBaseMult

    func (curve *CurveParams) ScalarBaseMult(k []byte) (*big.Int, *big.Int)

    func GenerateKey

    func GenerateKey(curve Curve, rand io.Reader) (priv []byte, x, y *big.Int, err error)

    GenerateKey返回一个公钥/私钥对。priv是私钥,而(x,y)是公钥。密钥对是通过提供的随机数读取器来生成的,该io.Reader接口必须返回随机数据。

    func Marshal

    func Marshal(curve Curve, x, y *big.Int) []byte

    Marshal将一个点编码为ANSI X9.62指定的格式。

    func Unmarshal

    func Unmarshal(curve Curve, data []byte) (x, y *big.Int)

    将一个Marshal编码后的点还原;如果出错,x会被设为nil。