Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions metadata/metadata.go
Original file line number Diff line number Diff line change
Expand Up @@ -258,6 +258,26 @@ func (meta *Metadata[T]) VerifyDelegate(delegatedRole string, delegatedMetadata

log.Info("Verifying", "role", delegatedRole)

// Early check for duplicate signatures in the delegated metadata
switch d := delegatedMetadata.(type) {
case *Metadata[RootType]:
Comment on lines +261 to +263
if err := checkUniqueSignatures(*d); err != nil {
return err
}
case *Metadata[SnapshotType]:
if err := checkUniqueSignatures(*d); err != nil {
return err
}
case *Metadata[TimestampType]:
if err := checkUniqueSignatures(*d); err != nil {
return err
}
case *Metadata[TargetsType]:
if err := checkUniqueSignatures(*d); err != nil {
return err
}
}
Comment on lines +261 to +279

// collect keys, keyIDs and threshold based on delegator type
switch i := i.(type) {
// Root delegator
Expand Down Expand Up @@ -365,6 +385,7 @@ func (meta *Metadata[T]) VerifyDelegate(delegatedRole string, delegatedMetadata
for _, signature := range d.Signatures {
if signature.KeyID == keyID {
sign = signature
break
}
}
payload, err = cjson.EncodeCanonical(d.Signed)
Expand All @@ -375,6 +396,7 @@ func (meta *Metadata[T]) VerifyDelegate(delegatedRole string, delegatedMetadata
for _, signature := range d.Signatures {
if signature.KeyID == keyID {
sign = signature
break
}
}
payload, err = cjson.EncodeCanonical(d.Signed)
Expand All @@ -385,6 +407,7 @@ func (meta *Metadata[T]) VerifyDelegate(delegatedRole string, delegatedMetadata
for _, signature := range d.Signatures {
if signature.KeyID == keyID {
sign = signature
break
}
}
payload, err = cjson.EncodeCanonical(d.Signed)
Expand All @@ -395,6 +418,7 @@ func (meta *Metadata[T]) VerifyDelegate(delegatedRole string, delegatedMetadata
for _, signature := range d.Signatures {
if signature.KeyID == keyID {
sign = signature
break
}
}
payload, err = cjson.EncodeCanonical(d.Signed)
Expand Down
Loading