Documentation
¶
Overview ¶
Package crypto 实现了dep2p使用的各种加密工具。 包括公钥和私钥接口以及支持的密钥算法的实现。
Index ¶
- Constants
- Variables
- func ConfigDecodeKey(b string) ([]byte, error)
- func ConfigEncodeKey(b []byte) string
- func ECDSAKeyPairFromKey(priv *ecdsa.PrivateKey) (PrivKey, PubKey, error)
- func GenerateECDSAKeyPair(src io.Reader) (PrivKey, PubKey, error)
- func GenerateECDSAKeyPairWithCurve(curve elliptic.Curve, src io.Reader) (PrivKey, PubKey, error)
- func GenerateEd25519Key(src io.Reader) (PrivKey, PubKey, error)
- func GenerateKeyPair(typ, bits int) (PrivKey, PubKey, error)
- func GenerateKeyPairWithReader(typ, bits int, src io.Reader) (PrivKey, PubKey, error)
- func GenerateRSAKeyPair(bits int, src io.Reader) (PrivKey, PubKey, error)
- func GenerateSecp256k1Key(src io.Reader) (PrivKey, PubKey, error)
- func KeyEqual(k1, k2 Key) bool
- func KeyPairFromStdKey(priv crypto.PrivateKey) (PrivKey, PubKey, error)
- func MarshalECDSAPrivateKey(ePriv ECDSAPrivateKey) (res []byte, err error)
- func MarshalECDSAPublicKey(ePub ECDSAPublicKey) (res []byte, err error)
- func MarshalPrivateKey(k PrivKey) ([]byte, error)
- func MarshalPublicKey(k PubKey) ([]byte, error)
- func PrivKeyToStdKey(priv PrivKey) (crypto.PrivateKey, error)
- func PubKeyToStdKey(pub PubKey) (crypto.PublicKey, error)
- func PublicKeyToProto(k PubKey) (*pb.PublicKey, error)
- type ECDSAPrivateKey
- type ECDSAPublicKey
- type ECDSASig
- type Ed25519PrivateKey
- type Ed25519PublicKey
- type GenSharedKey
- type Key
- type PrivKey
- func UnmarshalECDSAPrivateKey(data []byte) (res PrivKey, err error)
- func UnmarshalEd25519PrivateKey(data []byte) (PrivKey, error)
- func UnmarshalPrivateKey(data []byte) (PrivKey, error)
- func UnmarshalRsaPrivateKey(b []byte) (key PrivKey, err error)
- func UnmarshalSecp256k1PrivateKey(data []byte) (k PrivKey, err error)
- type PrivKeyUnmarshaller
- type PubKey
- func ECDSAPublicKeyFromPubKey(pub ecdsa.PublicKey) (PubKey, error)
- func PublicKeyFromProto(pmes *pb.PublicKey) (PubKey, error)
- func UnmarshalECDSAPublicKey(data []byte) (key PubKey, err error)
- func UnmarshalEd25519PublicKey(data []byte) (PubKey, error)
- func UnmarshalPublicKey(data []byte) (PubKey, error)
- func UnmarshalRsaPublicKey(b []byte) (key PubKey, err error)
- func UnmarshalSecp256k1PublicKey(data []byte) (_k PubKey, err error)
- type PubKeyUnmarshaller
- type RsaPrivateKey
- type RsaPublicKey
- type Secp256k1PrivateKey
- type Secp256k1PublicKey
Constants ¶
const ( // RSA 表示RSA密钥类型 RSA = iota // Ed25519 表示Ed25519密钥类型 Ed25519 // Secp256k1 表示Secp256k1密钥类型 Secp256k1 // ECDSA 表示ECDSA密钥类型 ECDSA )
密钥类型常量定义
const WeakRsaKeyEnv = "LIBP2P_ALLOW_WEAK_RSA_KEYS"
WeakRsaKeyEnv 是一个环境变量,当设置时会将RSA密钥的最小所需位数降低到512位。 这应该仅在测试场景中使用。
Variables ¶
var ( // ErrNotECDSAPubKey 当传入的公钥不是 ECDSA 公钥时返回此错误 ErrNotECDSAPubKey = errors.New("不是 ECDSA 公钥") // ErrNilSig 当签名为 nil 时返回此错误 ErrNilSig = errors.New("签名为空") // ErrNilPrivateKey 当提供的私钥为 nil 时返回此错误 ErrNilPrivateKey = errors.New("私钥为空") // ErrNilPublicKey 当提供的公钥为 nil 时返回此错误 ErrNilPublicKey = errors.New("公钥为空") // ECDSACurve 是默认使用的 ECDSA 曲线 ECDSACurve = elliptic.P256() )
var ( // ErrBadKeyType 当密钥类型不支持时返回此错误 ErrBadKeyType = errors.New("无效或不支持的密钥类型") // KeyTypes 支持的密钥类型列表 KeyTypes = []int{ RSA, Ed25519, Secp256k1, ECDSA, } )
var ErrRsaKeyTooBig error = fmt.Errorf("RSA密钥必须小于等于%d位", maxRsaKeyBits)
ErrRsaKeyTooBig 当尝试生成或解析大于maxRsaKeyBits位的RSA密钥时返回此错误
var ErrRsaKeyTooSmall error
ErrRsaKeyTooSmall 当尝试生成或解析小于MinRsaKeyBits位的RSA密钥时返回此错误
var MinRsaKeyBits = 2048
MinRsaKeyBits 定义了RSA密钥的最小位数,默认为2048位
var PrivKeyUnmarshallers = map[pb.KeyType]PrivKeyUnmarshaller{ pb.KeyType_RSA: UnmarshalRsaPrivateKey, pb.KeyType_Ed25519: UnmarshalEd25519PrivateKey, pb.KeyType_Secp256k1: UnmarshalSecp256k1PrivateKey, pb.KeyType_ECDSA: UnmarshalECDSAPrivateKey, }
PrivKeyUnmarshallers 是按密钥类型映射的私钥反序列化器
var PubKeyUnmarshallers = map[pb.KeyType]PubKeyUnmarshaller{ pb.KeyType_RSA: UnmarshalRsaPublicKey, pb.KeyType_Ed25519: UnmarshalEd25519PublicKey, pb.KeyType_Secp256k1: UnmarshalSecp256k1PublicKey, pb.KeyType_ECDSA: UnmarshalECDSAPublicKey, }
PubKeyUnmarshallers 是按密钥类型映射的公钥反序列化器
Functions ¶
func ConfigDecodeKey ¶
ConfigDecodeKey 将base64编码的密钥(用于配置文件)解码为可以反序列化的字节数组 参数:
- b: base64编码的字符串
返回:
- []byte: 解码后的字节数组
- error: 错误信息
func ConfigEncodeKey ¶
ConfigEncodeKey 将序列化的密钥编码为base64(用于配置文件) 参数:
- b: 要编码的字节数组
返回:
- string: base64编码的字符串
func ECDSAKeyPairFromKey ¶
func ECDSAKeyPairFromKey(priv *ecdsa.PrivateKey) (PrivKey, PubKey, error)
ECDSAKeyPairFromKey 从输入的私钥生成 ECDSA 私钥和公钥对 参数:
- priv: 输入的 ECDSA 私钥
返回值:
- PrivKey: 生成的私钥
- PubKey: 生成的公钥
- error: 错误信息
func GenerateECDSAKeyPair ¶
GenerateECDSAKeyPair 生成新的 ECDSA 私钥和公钥对 参数:
- src: 随机数生成器
返回值:
- PrivKey: 生成的私钥
- PubKey: 生成的公钥
- error: 错误信息
func GenerateECDSAKeyPairWithCurve ¶
GenerateECDSAKeyPairWithCurve 使用指定曲线生成新的 ECDSA 私钥和公钥对 参数:
- curve: 指定的椭圆曲线
- src: 随机数生成器
返回值:
- PrivKey: 生成的私钥
- PubKey: 生成的公钥
- error: 错误信息
func GenerateEd25519Key ¶
GenerateEd25519Key 生成一个新的 ed25519 密钥对 参数:
- src: 随机数生成器
返回值:
- PrivKey: 生成的私钥
- PubKey: 生成的公钥
- error: 生成过程中的错误,如果成功则为 nil
func GenerateKeyPair ¶
GenerateKeyPair 生成私钥和公钥对 参数:
- typ: 密钥类型
- bits: 密钥位数
返回:
- PrivKey: 生成的私钥
- PubKey: 生成的公钥
- error: 错误信息
func GenerateKeyPairWithReader ¶
GenerateKeyPairWithReader 使用指定的随机源生成指定类型和位数的密钥对 参数:
- typ: 密钥类型
- bits: 密钥位数
- src: 随机源
返回:
- PrivKey: 生成的私钥
- PubKey: 生成的公钥
- error: 错误信息
func GenerateRSAKeyPair ¶
GenerateRSAKeyPair 生成新的RSA密钥对 参数:
- bits: RSA密钥的位数
- src: 随机数生成器
返回值:
- PrivKey: 生成的私钥
- PubKey: 生成的公钥
- error: 错误信息
func GenerateSecp256k1Key ¶
GenerateSecp256k1Key 生成一个新的 Secp256k1 私钥和公钥对 参数:
- src: 随机数生成器
返回值:
- PrivKey: 生成的私钥
- PubKey: 生成的公钥
- error: 错误信息
func KeyEqual ¶
KeyEqual 检查两个密钥是否等价(具有相同的字节表示) 参数:
- k1: 第一个密钥
- k2: 第二个密钥
返回:
- bool: 如果密钥相等返回true,否则返回false
func KeyPairFromStdKey ¶
func KeyPairFromStdKey(priv crypto.PrivateKey) (PrivKey, PubKey, error)
KeyPairFromStdKey 将标准库(和 secp256k1)的私钥包装为 dep2p/core/crypto 密钥 参数:
- priv: 标准库的私钥
返回值:
- PrivKey: dep2p 私钥
- PubKey: dep2p 公钥
- error: 错误信息
func MarshalECDSAPrivateKey ¶
func MarshalECDSAPrivateKey(ePriv ECDSAPrivateKey) (res []byte, err error)
MarshalECDSAPrivateKey 将私钥转换为 x509 字节格式 参数:
- ePriv: ECDSA 私钥
返回值:
- []byte: x509 编码的私钥
- error: 错误信息
func MarshalECDSAPublicKey ¶
func MarshalECDSAPublicKey(ePub ECDSAPublicKey) (res []byte, err error)
MarshalECDSAPublicKey 将公钥转换为 x509 字节格式 参数:
- ePub: ECDSA 公钥
返回值:
- []byte: x509 编码的公钥
- error: 错误信息
func MarshalPrivateKey ¶
MarshalPrivateKey 将私钥对象转换为其protobuf序列化形式 参数:
- k: 要序列化的私钥对象
返回:
- []byte: 序列化后的字节数据
- error: 错误信息
func MarshalPublicKey ¶
MarshalPublicKey 将公钥对象转换为protobuf序列化的公钥 参数:
- k: 要序列化的公钥对象
返回:
- []byte: 序列化后的字节数据
- error: 错误信息
func PrivKeyToStdKey ¶
func PrivKeyToStdKey(priv PrivKey) (crypto.PrivateKey, error)
PrivKeyToStdKey 将 dep2p/go-dep2p/core/crypto 私钥转换为标准库(和 secp256k1)私钥 参数:
- priv: dep2p 私钥
返回值:
- crypto.PrivateKey: 标准库私钥
- error: 错误信息
func PubKeyToStdKey ¶
PubKeyToStdKey 将 dep2p/go-dep2p/core/crypto 公钥转换为标准库(和 secp256k1)公钥 参数:
- pub: dep2p 公钥
返回值:
- crypto.PublicKey: 标准库公钥
- error: 错误信息
Types ¶
type ECDSAPrivateKey ¶
type ECDSAPrivateKey struct {
// contains filtered or unexported fields
}
ECDSAPrivateKey 实现了 ECDSA 私钥
func (*ECDSAPrivateKey) Equals ¶
func (ePriv *ECDSAPrivateKey) Equals(o Key) bool
Equals 比较两个私钥是否相等 参数:
- o: 要比较的另一个密钥
返回值:
- bool: 是否相等
func (*ECDSAPrivateKey) GetPublic ¶
func (ePriv *ECDSAPrivateKey) GetPublic() PubKey
GetPublic 获取对应的公钥 返回值:
- PubKey: 对应的公钥
func (*ECDSAPrivateKey) Raw ¶
func (ePriv *ECDSAPrivateKey) Raw() (res []byte, err error)
Raw 将私钥转换为 x509 字节格式 返回值:
- []byte: x509 编码的私钥
- error: 错误信息
func (*ECDSAPrivateKey) Sign ¶
func (ePriv *ECDSAPrivateKey) Sign(data []byte) (sig []byte, err error)
Sign 对输入数据进行签名 参数:
- data: 要签名的数据
返回值:
- []byte: 签名结果
- error: 错误信息
func (*ECDSAPrivateKey) Type ¶
func (ePriv *ECDSAPrivateKey) Type() pb.KeyType
Type 返回私钥类型 返回值:
- pb.KeyType: 密钥类型
type ECDSAPublicKey ¶
type ECDSAPublicKey struct {
// contains filtered or unexported fields
}
ECDSAPublicKey 实现了 ECDSA 公钥
func (*ECDSAPublicKey) Equals ¶
func (ePub *ECDSAPublicKey) Equals(o Key) bool
Equals 比较两个公钥是否相等 参数:
- o: 要比较的另一个密钥
返回值:
- bool: 是否相等
func (*ECDSAPublicKey) Raw ¶
func (ePub *ECDSAPublicKey) Raw() ([]byte, error)
Raw 将公钥转换为 x509 字节格式 返回值:
- []byte: x509 编码的公钥
- error: 错误信息
func (*ECDSAPublicKey) Type ¶
func (ePub *ECDSAPublicKey) Type() pb.KeyType
Type 返回公钥类型 返回值:
- pb.KeyType: 密钥类型
type Ed25519PrivateKey ¶
type Ed25519PrivateKey struct {
// contains filtered or unexported fields
}
Ed25519PrivateKey 表示一个 ed25519 私钥
func (*Ed25519PrivateKey) Equals ¶
func (k *Ed25519PrivateKey) Equals(o Key) bool
Equals 比较两个 ed25519 私钥是否相等 参数:
- o: 要比较的另一个密钥
返回值:
- bool: 如果密钥相等返回 true,否则返回 false
func (*Ed25519PrivateKey) GetPublic ¶
func (k *Ed25519PrivateKey) GetPublic() PubKey
GetPublic 从私钥获取对应的公钥 返回值:
- PubKey: 对应的公钥
func (*Ed25519PrivateKey) Raw ¶
func (k *Ed25519PrivateKey) Raw() ([]byte, error)
Raw 返回私钥的原始字节 返回值:
- []byte: 私钥的字节表示
- error: 获取过程中的错误,如果成功则为 nil
func (*Ed25519PrivateKey) Sign ¶
func (k *Ed25519PrivateKey) Sign(msg []byte) (res []byte, err error)
Sign 使用私钥对消息进行签名 参数:
- msg: 要签名的消息
返回值:
- []byte: 生成的签名
- error: 签名过程中的错误,如果成功则为 nil
func (*Ed25519PrivateKey) Type ¶
func (k *Ed25519PrivateKey) Type() pb.KeyType
Type 返回私钥的类型 返回值:
- pb.KeyType: 返回 Ed25519 类型标识
type Ed25519PublicKey ¶
type Ed25519PublicKey struct {
// contains filtered or unexported fields
}
Ed25519PublicKey 表示一个 ed25519 公钥
func (*Ed25519PublicKey) Equals ¶
func (k *Ed25519PublicKey) Equals(o Key) bool
Equals 比较两个 ed25519 公钥是否相等 参数:
- o: 要比较的另一个密钥
返回值:
- bool: 如果密钥相等返回 true,否则返回 false
func (*Ed25519PublicKey) Raw ¶
func (k *Ed25519PublicKey) Raw() ([]byte, error)
Raw 返回公钥的原始字节 返回值:
- []byte: 公钥的字节表示
- error: 获取过程中的错误,如果成功则为 nil
func (*Ed25519PublicKey) Type ¶
func (k *Ed25519PublicKey) Type() pb.KeyType
Type 返回公钥的类型 返回值:
- pb.KeyType: 返回 Ed25519 类型标识
type Key ¶
type Key interface { // Equals 检查两个密钥是否相同 Equals(Key) bool // Raw 返回密钥的原始字节(不包含在dep2p-crypto protobuf中) // 此函数是{Priv,Pub}KeyUnmarshaler的逆操作 Raw() ([]byte, error) // Type 返回protobuf密钥类型 Type() pb.KeyType }
Key 表示可以与另一个密钥进行比较的加密密钥接口
type PrivKey ¶
type PrivKey interface { Key // Sign 对给定的字节进行加密签名 Sign([]byte) ([]byte, error) // GetPublic 返回与此私钥配对的公钥 GetPublic() PubKey }
PrivKey 表示可用于生成公钥和签名数据的私钥接口
func UnmarshalECDSAPrivateKey ¶
UnmarshalECDSAPrivateKey 从 x509 字节格式解析私钥 参数:
- data: x509 编码的私钥数据
返回值:
- PrivKey: 解析出的私钥
- error: 错误信息
func UnmarshalEd25519PrivateKey ¶
UnmarshalEd25519PrivateKey 从字节数据解析出私钥 参数:
- data: 包含私钥的字节数据
返回值:
- PrivKey: 解析出的私钥
- error: 解析过程中的错误,如果成功则为 nil
func UnmarshalPrivateKey ¶
UnmarshalPrivateKey 将protobuf序列化的私钥转换为其对应的对象 参数:
- data: 序列化的私钥数据
返回:
- PrivKey: 反序列化后的私钥对象
- error: 错误信息
func UnmarshalRsaPrivateKey ¶
UnmarshalRsaPrivateKey 从PKCS1编码的数据中解析RSA私钥 参数:
- b: PKCS1编码的私钥数据
返回值:
- PrivKey: 解析出的私钥
- error: 错误信息
func UnmarshalSecp256k1PrivateKey ¶
UnmarshalSecp256k1PrivateKey 从字节数组中解析私钥 参数:
- data: 待解析的字节数组
返回值:
- PrivKey: 解析得到的私钥
- error: 错误信息
type PrivKeyUnmarshaller ¶
PrivKeyUnmarshaller 是一个从字节切片创建私钥的函数类型
type PubKey ¶
type PubKey interface { Key // Verify 验证'sig'是否是'data'的签名哈希 Verify(data []byte, sig []byte) (bool, error) }
PubKey 是可用于验证使用相应私钥签名的数据的公钥接口
func ECDSAPublicKeyFromPubKey ¶
ECDSAPublicKeyFromPubKey 从输入的公钥生成 ECDSA 公钥 参数:
- pub: 输入的 ECDSA 公钥
返回值:
- PubKey: 生成的公钥
- error: 错误信息
func PublicKeyFromProto ¶
PublicKeyFromProto 将未序列化的protobuf PublicKey消息转换为其对应的对象 参数:
- pmes: protobuf公钥消息
返回:
- PubKey: 转换后的公钥对象
- error: 错误信息
func UnmarshalECDSAPublicKey ¶
UnmarshalECDSAPublicKey 从 x509 字节格式解析公钥 参数:
- data: x509 编码的公钥数据
返回值:
- PubKey: 解析出的公钥
- error: 错误信息
func UnmarshalEd25519PublicKey ¶
UnmarshalEd25519PublicKey 从字节数据解析出公钥 参数:
- data: 包含公钥的字节数据
返回值:
- PubKey: 解析出的公钥
- error: 解析过程中的错误,如果成功则为 nil
func UnmarshalPublicKey ¶
UnmarshalPublicKey 将protobuf序列化的公钥转换为其对应的对象 参数:
- data: 序列化的公钥数据
返回:
- PubKey: 反序列化后的公钥对象
- error: 错误信息
func UnmarshalRsaPublicKey ¶
UnmarshalRsaPublicKey 从PKIX编码的数据中解析RSA公钥 参数:
- b: PKIX编码的公钥数据
返回值:
- PubKey: 解析出的公钥
- error: 错误信息
func UnmarshalSecp256k1PublicKey ¶
UnmarshalSecp256k1PublicKey 从字节数组中解析公钥 参数:
- data: 待解析的字节数组
返回值:
- PubKey: 解析得到的公钥
- error: 错误信息
type PubKeyUnmarshaller ¶
PubKeyUnmarshaller 是一个从字节切片创建公钥的函数类型
type RsaPrivateKey ¶
type RsaPrivateKey struct {
// contains filtered or unexported fields
}
RsaPrivateKey RSA私钥结构体
func (*RsaPrivateKey) Equals ¶
func (sk *RsaPrivateKey) Equals(k Key) bool
Equals 检查两个密钥是否相等 参数:
- k: 要比较的密钥
返回值:
- bool: 密钥是否相等
func (*RsaPrivateKey) GetPublic ¶
func (sk *RsaPrivateKey) GetPublic() PubKey
GetPublic 获取对应的公钥 返回值:
- PubKey: 对应的公钥
func (*RsaPrivateKey) Raw ¶
func (sk *RsaPrivateKey) Raw() (res []byte, err error)
Raw 返回私钥的PKCS1编码 返回值:
- []byte: 编码后的私钥数据
- error: 错误信息
func (*RsaPrivateKey) Sign ¶
func (sk *RsaPrivateKey) Sign(message []byte) (sig []byte, err error)
Sign 对输入数据进行签名 参数:
- message: 要签名的数据
返回值:
- []byte: 签名数据
- error: 错误信息
func (*RsaPrivateKey) Type ¶
func (sk *RsaPrivateKey) Type() pb.KeyType
Type 返回密钥类型 返回值:
- pb.KeyType: RSA密钥类型
type RsaPublicKey ¶
type RsaPublicKey struct {
// contains filtered or unexported fields
}
RsaPublicKey RSA公钥结构体
func (*RsaPublicKey) Equals ¶
func (pk *RsaPublicKey) Equals(k Key) bool
Equals 检查两个密钥是否相等 参数:
- k: 要比较的密钥
返回值:
- bool: 密钥是否相等
func (*RsaPublicKey) Raw ¶
func (pk *RsaPublicKey) Raw() (res []byte, err error)
Raw 返回公钥的PKIX编码 返回值:
- []byte: 编码后的公钥数据
- error: 错误信息
func (*RsaPublicKey) Type ¶
func (pk *RsaPublicKey) Type() pb.KeyType
Type 返回密钥类型 返回值:
- pb.KeyType: RSA密钥类型
type Secp256k1PrivateKey ¶
type Secp256k1PrivateKey secp256k1.PrivateKey
Secp256k1PrivateKey 表示一个 Secp256k1 私钥
func (*Secp256k1PrivateKey) Equals ¶
func (k *Secp256k1PrivateKey) Equals(o Key) bool
Equals 比较两个私钥是否相等 参数:
- o: 待比较的密钥
返回值:
- bool: 是否相等
func (*Secp256k1PrivateKey) GetPublic ¶
func (k *Secp256k1PrivateKey) GetPublic() PubKey
GetPublic 获取对应的公钥 返回值:
- PubKey: 对应的公钥
func (*Secp256k1PrivateKey) Raw ¶
func (k *Secp256k1PrivateKey) Raw() ([]byte, error)
Raw 返回私钥的字节表示 返回值:
- []byte: 私钥的字节数组
- error: 错误信息
func (*Secp256k1PrivateKey) Sign ¶
func (k *Secp256k1PrivateKey) Sign(data []byte) (_sig []byte, err error)
Sign 使用私钥对数据进行签名 参数:
- data: 待签名的数据
返回值:
- []byte: 签名结果
- error: 错误信息
func (*Secp256k1PrivateKey) Type ¶
func (k *Secp256k1PrivateKey) Type() pb.KeyType
Type 返回私钥类型 返回值:
- pb.KeyType: 私钥类型
type Secp256k1PublicKey ¶
type Secp256k1PublicKey secp256k1.PublicKey
Secp256k1PublicKey 表示一个 Secp256k1 公钥
func (*Secp256k1PublicKey) Equals ¶
func (k *Secp256k1PublicKey) Equals(o Key) bool
Equals 比较两个公钥是否相等 参数:
- o: 待比较的密钥
返回值:
- bool: 是否相等
func (*Secp256k1PublicKey) Raw ¶
func (k *Secp256k1PublicKey) Raw() (res []byte, err error)
Raw 返回公钥的字节表示 返回值:
- []byte: 公钥的字节数组
- error: 错误信息
func (*Secp256k1PublicKey) Type ¶
func (k *Secp256k1PublicKey) Type() pb.KeyType
Type 返回公钥类型 返回值:
- pb.KeyType: 公钥类型