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  }