github.com/linapex/ethereum-dpos-chinese@v0.0.0-20190316121959-b78b3a4a1ece/crypto/sha3/shake.go (about) 1 2 //<developer> 3 // <name>linapex 曹一峰</name> 4 // <email>linapex@163.com</email> 5 // <wx>superexc</wx> 6 // <qqgroup>128148617</qqgroup> 7 // <url>https://jsq.ink</url> 8 // <role>pku engineer</role> 9 // <date>2019-03-16 12:09:37</date> 10 //</624342628418195456> 11 12 //版权所有2014 Go作者。版权所有。 13 //此源代码的使用受BSD样式的控制 14 //可以在许可文件中找到的许可证。 15 16 package sha3 17 18 //此文件定义了ShakeHash接口,并提供 19 //用于创建震动实例的函数以及实用程序 20 //用于将字节散列为任意长度输出的函数。 21 22 import ( 23 "io" 24 ) 25 26 //shakehash定义哈希函数的接口 27 //支持任意长度输出。 28 type ShakeHash interface { 29 //写将吸收更多的数据进入散列状态。如果输入为 30 //在从中读取输出后写入。 31 io.Writer 32 33 //读取从哈希中读取更多输出;读取会影响哈希的 34 //状态。(因此,shakehash.read与hash.sum非常不同) 35 //它从不返回错误。 36 io.Reader 37 38 //Clone returns a copy of the ShakeHash in its current state. 39 Clone() ShakeHash 40 41 //重置将ShakeHash重置为其初始状态。 42 Reset() 43 } 44 45 func (d *state) Clone() ShakeHash { 46 return d.clone() 47 } 48 49 //new shake128创建一个新的shake128变量输出长度shakehash。 50 //Its generic security strength is 128 bits against all attacks if at 51 //至少使用32个字节的输出。 52 func NewShake128() ShakeHash { return &state{rate: 168, dsbyte: 0x1f} } 53 54 //newshake256创建一个新的shake128变量输出长度shakehash。 55 //如果 56 //至少使用64个字节的输出。 57 func NewShake256() ShakeHash { return &state{rate: 136, dsbyte: 0x1f} } 58 59 //shakesum128将任意长度的数据摘要写入哈希。 60 func ShakeSum128(hash, data []byte) { 61 h := NewShake128() 62 h.Write(data) 63 h.Read(hash) 64 } 65 66 //shakesum256将任意长度的数据摘要写入哈希。 67 func ShakeSum256(hash, data []byte) { 68 h := NewShake256() 69 h.Write(data) 70 h.Read(hash) 71 } 72