Fix rebase
diff --git a/client/delegations.go b/client/delegations.go
index 9190aa3..de3e664 100644
--- a/client/delegations.go
+++ b/client/delegations.go
@@ -20,7 +20,11 @@
// - filter delegations with paths or path_hash_prefixes matching searched target
// - 5.6.7.1 cycles protection
// - 5.6.7.2 terminations
- delegations := targets.NewDelegationsIterator(target, c.db)
+ delegations, err := targets.NewDelegationsIterator(target, c.db)
+ if err != nil {
+ return data.TargetFileMeta{}, err
+ }
+
for i := 0; i < c.MaxDelegations; i++ {
d, ok := delegations.Next()
if !ok {
diff --git a/local_store.go b/local_store.go
index 1ef5147..c019af7 100644
--- a/local_store.go
+++ b/local_store.go
@@ -592,8 +592,9 @@
return err
}
- innerKeyIdsForRole := f.keyIDsForRole[role]
-
+ // Merge privKeys into f.keyIDsForRole and register signers with
+ // f.signerForKeyID.
+ keyIDsForRole := f.keyIDsForRole[role]
for _, key := range privKeys {
signer, err := keys.GetSigner(key)
if err != nil {
@@ -606,10 +607,10 @@
f.signerForKeyID[keyID] = signer
}
- innerKeyIdsForRole = append(innerKeyIdsForRole, keyIDs...)
+ keyIDsForRole = append(keyIDsForRole, keyIDs...)
}
- f.keyIDsForRole[role] = sets.DeduplicateStrings(innerKeyIdsForRole)
+ f.keyIDsForRole[role] = sets.DeduplicateStrings(keyIDsForRole)
return nil
}
diff --git a/local_store_test.go b/local_store_test.go
index bc69f18..8badcfc 100644
--- a/local_store_test.go
+++ b/local_store_test.go
@@ -63,6 +63,7 @@
assert.Equal(t, []keys.Signer{aSigner1}, store.SignersForKeyIDs(a1KeyIDs))
assert.Equal(t, []keys.Signer{aSigner2}, store.SignersForKeyIDs(a2KeyIDs))
+ assert.ElementsMatch(t, []keys.Signer{aSigner1, aSigner2}, store.SignersForKeyIDs(append(a1KeyIDs, a2KeyIDs...)))
assert.Equal(t, []keys.Signer{bSigner}, store.SignersForKeyIDs(bKeyIDs))
})
}
diff --git a/pkg/targets/delegation.go b/pkg/targets/delegation.go
index 92597ca..ccd52ba 100644
--- a/pkg/targets/delegation.go
+++ b/pkg/targets/delegation.go
@@ -24,11 +24,10 @@
// NewDelegationsIterator initialises an iterator with a first step
// on top level targets.
-func NewDelegationsIterator(target string, topLevelKeysDB *verify.DB) *delegationsIterator {
- role := topLevelKeysDB.GetRole("targets")
- keyIDs := []string{}
- if role != nil {
- keyIDs = sets.StringSetToSlice(role.KeyIDs)
+func NewDelegationsIterator(target string, topLevelKeysDB *verify.DB) (*delegationsIterator, error) {
+ targetsRole := topLevelKeysDB.GetRole("targets")
+ if targetsRole == nil {
+ return nil, ErrTopLevelTargetsRoleMissing
}
i := &delegationsIterator{
@@ -36,8 +35,9 @@
stack: []Delegation{
{
Delegatee: data.DelegatedRole{
- Name: "targets",
- KeyIDs: keyIDs,
+ Name: "targets",
+ KeyIDs: sets.StringSetToSlice(targetsRole.KeyIDs),
+ Threshold: targetsRole.Threshold,
},
DB: topLevelKeysDB,
},
diff --git a/pkg/targets/delegation_test.go b/pkg/targets/delegation_test.go
index 316d8cd..2e0c42b 100644
--- a/pkg/targets/delegation_test.go
+++ b/pkg/targets/delegation_test.go
@@ -14,7 +14,20 @@
)
func TestDelegationsIterator(t *testing.T) {
- defaultKeyIDs := []string{"26b878ad73362774b8b69dd4fdeb2cc6a2688e4133ed5ace9e18a06e9d998a6d"}
+ topTargetsPubKey := &data.PublicKey{
+ Type: data.KeyTypeEd25519,
+ Scheme: data.KeySchemeEd25519,
+ Algorithms: data.HashAlgorithms,
+ Value: []byte(`{"public":"aaaaec567e5901ba3976c34f7cd5169704292439bf71e6aa19c64b96706f95ef"}`),
+ }
+ delTargetsPubKey := &data.PublicKey{
+ Type: data.KeyTypeEd25519,
+ Scheme: data.KeySchemeEd25519,
+ Algorithms: data.HashAlgorithms,
+ Value: []byte(`{"public":"bbbbec567e5901ba3976c34f7cd5169704292439bf71e6aa19c64b96706f95ef"}`),
+ }
+
+ defaultKeyIDs := delTargetsPubKey.IDs()
var iteratorTests = []struct {
testName string
roles map[string][]data.DelegatedRole
@@ -188,16 +201,15 @@
for _, tt := range iteratorTests {
t.Run(tt.testName, func(t *testing.T) {
- flattened := []data.DelegatedRole{}
- for _, roles := range tt.roles {
- flattened = append(flattened, roles...)
- }
- db, err := verify.NewDBFromDelegations(&data.Delegations{
- Roles: flattened,
+ topLevelDB := verify.NewDB()
+ topLevelDB.AddKey(topTargetsPubKey.IDs()[0], topTargetsPubKey)
+ topLevelDB.AddRole("targets", &data.Role{
+ KeyIDs: topTargetsPubKey.IDs(),
+ Threshold: 1,
})
+ d, err := NewDelegationsIterator(tt.file, topLevelDB)
assert.NoError(t, err)
- d := NewDelegationsIterator(tt.file, db)
var iterationOrder []string
for {