multi: update payload validation to account for blinded routes

This commit is contained in:
Carla Kirk-Cohen
2023-11-01 15:36:44 -04:00
parent 343a6ed831
commit 69d5496e7c
4 changed files with 238 additions and 23 deletions

View File

@@ -42,9 +42,9 @@ var (
// ErrMissingField is returned if a required TLV is missing.
ErrMissingField = errors.New("required tlv missing")
// ErrIncorrectField is returned if a tlv field is included when it
// ErrUnexpectedField is returned if a tlv field is included when it
// should not be.
ErrIncorrectField = errors.New("incorrect tlv included")
ErrUnexpectedField = errors.New("unexpected tlv included")
)
// Vertex is a simple alias for the serialization of a compressed Bitcoin
@@ -337,7 +337,7 @@ func optionalBlindedField(isZero, blindedHop, finalHop bool) error {
// In an intermediate hop in a blinded route and the field is not zero.
case !finalHop && !isZero:
return ErrIncorrectField
return ErrUnexpectedField
}
return nil
@@ -351,7 +351,7 @@ func validateNextChanID(nextChanIDIsSet, isBlinded, finalHop bool) error {
switch {
// Hops in a blinded route should not have a next channel ID set.
case isBlinded && nextChanIDIsSet:
return ErrIncorrectField
return ErrUnexpectedField
// Otherwise, blinded hops are allowed to have a zero value.
case isBlinded:
@@ -359,7 +359,7 @@ func validateNextChanID(nextChanIDIsSet, isBlinded, finalHop bool) error {
// The final hop in a regular route is expected to have a zero value.
case finalHop && nextChanIDIsSet:
return ErrIncorrectField
return ErrUnexpectedField
// Intermediate hops in regular routes require non-zero value.
case !finalHop && !nextChanIDIsSet: