github.com/yinchengtsinghua/golang-Eos-dpos-Ethereum@v0.0.0-20190121132951-92cc4225ed8e/crypto/sha3/shake.go (about) 1 2 //此源码被清华学神尹成大魔王专业翻译分析并修改 3 //尹成QQ77025077 4 //尹成微信18510341407 5 //尹成所在QQ群721929980 6 //尹成邮箱 yinc13@mails.tsinghua.edu.cn 7 //尹成毕业于清华大学,微软区块链领域全球最有价值专家 8 //https://mvp.microsoft.com/zh-cn/PublicProfile/4033620 9 //版权所有2014 Go作者。版权所有。 10 //此源代码的使用受BSD样式的控制 11 //可以在许可文件中找到的许可证。 12 13 package sha3 14 15 //此文件定义了ShakeHash接口,并提供 16 //用于创建震动实例的函数以及实用程序 17 //用于将字节散列为任意长度输出的函数。 18 19 import ( 20 "io" 21 ) 22 23 //shakehash定义哈希函数的接口 24 //支持任意长度输出。 25 type ShakeHash interface { 26 //写将吸收更多的数据进入散列状态。如果输入为 27 //在从中读取输出后写入。 28 io.Writer 29 30 //读取从哈希中读取更多输出;读取会影响哈希的 31 //状态。(因此,shakehash.read与hash.sum非常不同) 32 //它从不返回错误。 33 io.Reader 34 35 //Clone returns a copy of the ShakeHash in its current state. 36 Clone() ShakeHash 37 38 //重置将ShakeHash重置为其初始状态。 39 Reset() 40 } 41 42 func (d *state) Clone() ShakeHash { 43 return d.clone() 44 } 45 46 //new shake128创建一个新的shake128变量输出长度shakehash。 47 //Its generic security strength is 128 bits against all attacks if at 48 //至少使用32个字节的输出。 49 func NewShake128() ShakeHash { return &state{rate: 168, dsbyte: 0x1f} } 50 51 //newshake256创建一个新的shake128变量输出长度shakehash。 52 //如果 53 //至少使用64个字节的输出。 54 func NewShake256() ShakeHash { return &state{rate: 136, dsbyte: 0x1f} } 55 56 //shakesum128将任意长度的数据摘要写入哈希。 57 func ShakeSum128(hash, data []byte) { 58 h := NewShake128() 59 h.Write(data) 60 h.Read(hash) 61 } 62 63 //shakesum256将任意长度的数据摘要写入哈希。 64 func ShakeSum256(hash, data []byte) { 65 h := NewShake256() 66 h.Write(data) 67 h.Read(hash) 68 }