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

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

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的库了。

区块链 源码 tendermint

发表新评论