前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Golang语言情怀-第60期 Go 语言标准库翻译 crypto/elliptic

Golang语言情怀-第60期 Go 语言标准库翻译 crypto/elliptic

作者头像
李海彬
发布2021-03-09 11:03:42
4050
发布2021-03-09 11:03:42
举报
文章被收录于专栏:Golang语言社区Golang语言社区

import "crypto/elliptic"

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

代码语言:javascript
复制
type Curve
func P224() Curve
func P256() Curve
func P384() Curve
func P521() Curve
type CurveParams
func (curve *CurveParams) Add(x1, y1, x2, y2 *big.Int) (*big.Int, *big.Int)
func (curve *CurveParams) Double(x1, y1 *big.Int) (*big.Int, *big.Int)
func (curve *CurveParams) IsOnCurve(x, y *big.Int) bool
func (curve *CurveParams) Params() *CurveParams
func (curve *CurveParams) ScalarBaseMult(k []byte) (*big.Int, *big.Int)
func (curve *CurveParams) ScalarMult(Bx, By *big.Int, k []byte) (*big.Int, *big.Int)
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

代码语言:javascript
复制
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
代码语言:javascript
复制
func P224() Curve

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

func P256
代码语言:javascript
复制
func P256() Curve

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

func P384
代码语言:javascript
复制
func P384() Curve

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

func P521
代码语言:javascript
复制
func P521() Curve

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

type CurveParams

代码语言:javascript
复制
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
代码语言:javascript
复制
func (curve *CurveParams) Params() *CurveParams
func (*CurveParams) IsOnCurve
代码语言:javascript
复制
func (curve *CurveParams) IsOnCurve(x, y *big.Int) bool
func (*CurveParams) Add
代码语言:javascript
复制
func (curve *CurveParams) Add(x1, y1, x2, y2 *big.Int) (*big.Int, *big.Int)
func (*CurveParams) Double
代码语言:javascript
复制
func (curve *CurveParams) Double(x1, y1 *big.Int) (*big.Int, *big.Int)
func (*CurveParams) ScalarMult
代码语言:javascript
复制
func (curve *CurveParams) ScalarMult(Bx, By *big.Int, k []byte) (*big.Int, *big.Int)
func (*CurveParams) ScalarBaseMult
代码语言:javascript
复制
func (curve *CurveParams) ScalarBaseMult(k []byte) (*big.Int, *big.Int)

func GenerateKey

代码语言:javascript
复制
func GenerateKey(curve Curve, rand io.Reader) (priv []byte, x, y *big.Int, err error)

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

func Marshal

代码语言:javascript
复制
func Marshal(curve Curve, x, y *big.Int) []byte

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

func Unmarshal

代码语言:javascript
复制
func Unmarshal(curve Curve, data []byte) (x, y *big.Int)

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


参考资料:

Go语言中文文档

http://www.golang.ltd/

Go语言官方文档

https://golang.google.cn/

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-03-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Golang语言情怀 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • type Curve
    • func P224
      • func P256
        • func P384
          • func P521
          • type CurveParams
            • func (*CurveParams) Params
              • func (*CurveParams) IsOnCurve
                • func (*CurveParams) Add
                  • func (*CurveParams) Double
                    • func (*CurveParams) ScalarMult
                      • func (*CurveParams) ScalarBaseMult
                      • func GenerateKey
                      • func Marshal
                      • func Unmarshal
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档