/
she.go
51 lines (41 loc) · 1010 Bytes
/
she.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package hash
import (
"encoding/binary"
"golang.org/x/crypto/sha3"
)
// ShakeHashEx extends the sha3.ShakeHash,
// able to taking in uint32, uint16, uint8
type ShakeHashEx struct {
sha3.ShakeHash
}
// NewShakeHashEx makes the ShakeHashEx
func NewShakeHashEx() *ShakeHashEx {
return &ShakeHashEx{
ShakeHash: sha3.NewShake256(),
}
}
// WriteUint32 takes in an uint32 to update its
// internal state
func (sh *ShakeHashEx) WriteUint32(x uint32) {
var buf [4]byte
binary.BigEndian.PutUint32(buf[:], x)
sh.Write(buf[:])
}
// WriteUint16 takes in an uint16 to update its
// internal state
func (sh *ShakeHashEx) WriteUint16(x uint16) {
var buf [2]byte
binary.BigEndian.PutUint16(buf[:], x)
sh.Write(buf[:])
}
// WriteUint8 takes in an uint8 to update its
// internal state
func (sh *ShakeHashEx) WriteUint8(x uint8) {
sh.Write([]byte{uint8(x)})
}
// Clone makes a copy of ShakeHashEx
func (sh *ShakeHashEx) Clone() *ShakeHashEx {
return &ShakeHashEx{
ShakeHash: sh.ShakeHash.Clone(),
}
}