OSDN Git Service

writer close
[bytom/vapor.git] / crypto / sha3pool / pool.go
1 // Package sha3pool is a freelist for SHA3-256 hash objects.
2 package sha3pool
3
4 import (
5         "sync"
6
7         "golang.org/x/crypto/sha3"
8 )
9
10 var pool = &sync.Pool{New: func() interface{} { return sha3.New256() }}
11
12 // Get256 returns an initialized SHA3-256 hash ready to use.
13 // It is like sha3.New256 except it uses the freelist.
14 // The caller should call Put256 when finished with the returned object.
15 func Get256() sha3.ShakeHash {
16         return pool.Get().(sha3.ShakeHash)
17 }
18
19 // Put256 resets h and puts it in the freelist.
20 func Put256(h sha3.ShakeHash) {
21         h.Reset()
22         pool.Put(h)
23 }
24
25 // Sum256 uses a ShakeHash from the pool to sum into hash.
26 func Sum256(hash, data []byte) {
27         h := Get256()
28         h.Write(data)
29         h.Read(hash)
30         Put256(h)
31 }