github.com/decred/dcrlnd@v0.7.6/lntypes/hash.go (about) 1 package lntypes 2 3 import ( 4 "encoding/hex" 5 "fmt" 6 ) 7 8 // HashSize of array used to store hashes. 9 const HashSize = 32 10 11 // ZeroHash is a predefined hash containing all zeroes. 12 var ZeroHash Hash 13 14 // Hash is used in several of the lightning messages and common structures. It 15 // typically represents a payment hash. 16 type Hash [HashSize]byte 17 18 // String returns the Hash as a hexadecimal string. 19 func (hash Hash) String() string { 20 return hex.EncodeToString(hash[:]) 21 } 22 23 // MakeHash returns a new Hash from a byte slice. An error is returned if 24 // the number of bytes passed in is not HashSize. 25 func MakeHash(newHash []byte) (Hash, error) { 26 nhlen := len(newHash) 27 if nhlen != HashSize { 28 return Hash{}, fmt.Errorf("invalid hash length of %v, want %v", 29 nhlen, HashSize) 30 } 31 32 var hash Hash 33 copy(hash[:], newHash) 34 35 return hash, nil 36 } 37 38 // MakeHashFromStr creates a Hash from a hex hash string. 39 func MakeHashFromStr(newHash string) (Hash, error) { 40 // Return error if hash string is of incorrect length. 41 if len(newHash) != HashSize*2 { 42 return Hash{}, fmt.Errorf("invalid hash string length of %v, "+ 43 "want %v", len(newHash), HashSize*2) 44 } 45 46 hash, err := hex.DecodeString(newHash) 47 if err != nil { 48 return Hash{}, err 49 } 50 51 return MakeHash(hash) 52 }