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  }