12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- package lntypes
- import (
- "crypto/sha256"
- "encoding/hex"
- "fmt"
- )
- // PreimageSize of array used to store preimagees.
- const PreimageSize = 32
- // Preimage is used in several of the lightning messages and common structures.
- // It represents a payment preimage.
- type Preimage [PreimageSize]byte
- // String returns the Preimage as a hexadecimal string.
- func (p Preimage) String() string {
- return hex.EncodeToString(p[:])
- }
- // MakePreimage returns a new Preimage from a bytes slice. An error is returned
- // if the number of bytes passed in is not PreimageSize.
- func MakePreimage(newPreimage []byte) (Preimage, error) {
- nhlen := len(newPreimage)
- if nhlen != PreimageSize {
- return Preimage{}, fmt.Errorf("invalid preimage length of %v, "+
- "want %v", nhlen, PreimageSize)
- }
- var preimage Preimage
- copy(preimage[:], newPreimage)
- return preimage, nil
- }
- // MakePreimageFromStr creates a Preimage from a hex preimage string.
- func MakePreimageFromStr(newPreimage string) (Preimage, error) {
- // Return error if preimage string is of incorrect length.
- if len(newPreimage) != PreimageSize*2 {
- return Preimage{}, fmt.Errorf("invalid preimage string length "+
- "of %v, want %v", len(newPreimage), PreimageSize*2)
- }
- preimage, err := hex.DecodeString(newPreimage)
- if err != nil {
- return Preimage{}, err
- }
- return MakePreimage(preimage)
- }
- // Hash returns the sha256 hash of the preimage.
- func (p *Preimage) Hash() Hash {
- return Hash(sha256.Sum256(p[:]))
- }
- // Matches returns whether this preimage is the preimage of the given hash.
- func (p *Preimage) Matches(h Hash) bool {
- return h == p.Hash()
- }
|