看了两个复杂的,我们来看一个简单的模块,crypto模块。这个模块封装了很多常用的加密所用的包。我们就大体介绍一下。

这个包最重要的是两个接口定义PubKeyPrivKey的定义,分别如下

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
type PubKey interface {
	Address() Address
	Bytes() []byte
	VerifyBytes(msg []byte, sig []byte) bool
	Equals(PubKey) bool
}

type PrivKey interface {
	Bytes() []byte
	Sign(msg []byte) ([]byte, error)
	PubKey() PubKey
	Equals(PrivKey) bool
}

后续的就是这个的实现及应用。我们一个包一个包的看。 armor包是一个对数据封装和解析的模块,把数据按照要求来封装和解析,没有难点。 ed25519是一种加密方式,实现了我们之前说到的这两个接口。 encoding是对公钥和私钥进行序列化的处理,是使用了amino提供的接口来处理的。 merkle就是常说的默克尔树了,这里面提供了常见的建立数,验证树的操作。想到我很久之前还写过一次生成默克尔树的源码呢! multisig就是对信息的多人签名,这个在比特币中有过应用,在这由于还没看完源码,不清楚如何使用的。 secp256k1是两一种加密方式,这个地方是调用的btcsuite的库。看来btcd已经成为go常用的包之一了。 tmhash这个是对sha256hash的封装,挺简单的。 xchacha20poly1305对称加密aead算法的一种实现,这个chacha20在ssr中目前应用的比较广泛,因为资源占用少,速度快。 xsalsa20symmetric`也是一个对称加密。 看起来这个的实现实际比较少,也比较简单,如果需要调用库的话还不如直接去使用btcd的库了。