github.com/lazyledger/lazyledger-core@v0.35.0-dev.0.20210613111200-4c651f053571/crypto/merkle/hash.go (about) 1 package merkle 2 3 import ( 4 "hash" 5 6 "github.com/lazyledger/lazyledger-core/crypto/tmhash" 7 ) 8 9 // TODO: make these have a large predefined capacity 10 var ( 11 leafPrefix = []byte{0} 12 innerPrefix = []byte{1} 13 ) 14 15 // returns tmhash(<empty>) 16 func emptyHash() []byte { 17 return tmhash.Sum([]byte{}) 18 } 19 20 // returns tmhash(0x00 || leaf) 21 func leafHash(leaf []byte) []byte { 22 return tmhash.Sum(append(leafPrefix, leaf...)) 23 } 24 25 // returns tmhash(0x00 || leaf) 26 func leafHashOpt(s hash.Hash, leaf []byte) []byte { 27 s.Reset() 28 s.Write(leafPrefix) 29 s.Write(leaf) 30 return s.Sum(nil) 31 } 32 33 // returns tmhash(0x01 || left || right) 34 func innerHash(left []byte, right []byte) []byte { 35 return tmhash.Sum(append(innerPrefix, append(left, right...)...)) 36 } 37 38 func innerHashOpt(s hash.Hash, left []byte, right []byte) []byte { 39 s.Reset() 40 s.Write(innerPrefix) 41 s.Write(left) 42 s.Write(right) 43 return s.Sum(nil) 44 }