diff --git a/netann/msg_hash.go b/netann/msg_hash.go new file mode 100644 index 000000000..3c4806f9b --- /dev/null +++ b/netann/msg_hash.go @@ -0,0 +1,30 @@ +package netann + +import ( + "github.com/btcsuite/btcd/chaincfg/chainhash" +) + +// MsgHashTag will prefix the message name and the field name in order to +// construct the message tag. +const MsgHashTag = "lightning" + +// MsgTag computes the full tag that will be used to prefix a message before +// calculating the tagged hash. The tag is constructed as follows: +// +// tag = "lightning"||"msg_name"||"field_name" +func MsgTag(msgName, fieldName string) []byte { + tag := []byte(MsgHashTag) + tag = append(tag, []byte(msgName)...) + + return append(tag, []byte(fieldName)...) +} + +// MsgHash computes the tagged hash of the given message as follows: +// +// tag = "lightning"||"msg_name"||"field_name" +// hash = sha256(sha246(tag) || sha256(tag) || msg) +func MsgHash(msgName, fieldName string, msg []byte) *chainhash.Hash { + tag := MsgTag(msgName, fieldName) + + return chainhash.TaggedHash(tag, msg) +}