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 dsa

import "crypto/dsa"

dsa包实现FIPS 186-3定义的数字签名算法(Digital Signature Algorithm),即DSA算法。

Go语言标准库 >>


  • Variables
  • type ParameterSizes
  • type Parameters
  • type PublicKey
  • type PrivateKey
  • func GenerateParameters(params *Parameters, rand io.Reader, sizes ParameterSizes) (err error)
  • func GenerateKey(priv *PrivateKey, rand io.Reader) error
  • func Sign(rand io.Reader, priv *PrivateKey, hash []byte) (r, s *big.Int, err error)
  • func Verify(pub *PublicKey, hash []byte, r, s *big.Int) bool
  • Variables

    var ErrInvalidPublicKey = errors.New("crypto/dsa: invalid public key")

    非法公钥,FIPS标准的公钥格式是很严格的,但有些实现没这么严格,使用这些实现的公钥时,就会导致这个错误。

    type ParameterSizes

    type ParameterSizes int

    是DSA参数中的质数可以接受的字位长度的枚举,参见FIPS 186-3 section 4.2。

    const (
        L1024N160 ParameterSizes = iota
        L2048N224
        L2048N256
        L3072N256
    )

    type Parameters

    type Parameters struct {
        P, Q, G *big.Int
    }

    Parameters代表密钥的域参数,这些参数可以被一组密钥共享,Q的字位长度必须是8的倍数。

    type PublicKey

    type PublicKey struct {
        Parameters
        Y   *big.Int
    }

    PublicKey代表一个DSA公钥。

    type PrivateKey

    type PrivateKey struct {
        PublicKey
        X   *big.Int
    }

    PrivateKey代表一个DSA私钥。

    func GenerateKey

    func GenerateParameters

    func GenerateParameters(params *Parameters, rand io.Reader, sizes ParameterSizes) (err error)

    GenerateParameters函数随机设置合法的参数到params。即使机器很快,函数也可能会花费很多时间来生成参数。

    func GenerateKey(priv *PrivateKey, rand io.Reader) error

    GenerateKey生成一对公钥和私钥;priv.PublicKey.Parameters字段必须已经(被GenerateParameters函数)设置了合法的参数。

    func Sign

    func Sign(rand io.Reader, priv *PrivateKey, hash []byte) (r, s *big.Int, err error)

    使用私钥对任意长度的hash值(必须是较大信息的hash结果)进行签名,返回签名结果(一对大整数)。私钥的安全性取决于密码读取器的熵度(随机程度)。

    注意根据FIPS 186-3 section 4.6的规定,hash必须被截断到亚组的长度,本函数是不会自己截断的。

    func Verify

    func Verify(pub *PublicKey, hash []byte, r, s *big.Int) bool

    使用公钥认证hash和两个大整数r、s构成的签名,报告签名是否合法。

    注意根据FIPS 186-3 section 4.6的规定,hash必须被截断到亚组的长度,本函数是不会自己截断的。