Skip to content

Commit 5ef60ca

Browse files
committed
tuf.api: implement update_signatures()
Signed-off-by: Joshua Lock <[email protected]>
1 parent 721def4 commit 5ef60ca

File tree

1 file changed

+10
-8
lines changed

1 file changed

+10
-8
lines changed

tuf/api/metadata.py

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -81,15 +81,16 @@ def signed(self) -> str:
8181
def signatures(self) -> List:
8282
return self.signable['signatures']
8383

84-
# TODO: We need to update the expiration timestamp using self.expiration.
85-
# Oh, and bump the version number.
86-
# And, oh, take care of consistent snapshot of metadata.
8784
def sign(self) -> JsonDict:
88-
# TODO: not so simple. IDK why we don't index signatures by
89-
# keyids,but we need to walk through the list to find any previous
90-
# signature by the same keyid.
9185
def update_signature(signatures, keyid, signature):
92-
raise NotImplementedError()
86+
updated = False
87+
keyid_signature = {'keyid':keyid, 'sig':signature}
88+
for idx, keyid_sig in enumerate(signatures):
89+
if keyid_sig['keyid'] == keyid:
90+
signatures[idx] = keyid_signature
91+
updated = True
92+
if not updated:
93+
signatures.append({'keyid':keyid, 'sig':signature})
9394

9495
signed = self.signed
9596
signatures = self.signatures
@@ -98,7 +99,8 @@ def update_signature(signatures, keyid, signature):
9899
signature = create_signature(keypair.private.obj, signed)
99100
keyid = keypair.private.obj['keyid']
100101
update_signature(signatures, keyid, signature)
101-
102+
103+
self.signatures = signatures
102104
return {'signed': signed, 'signatures': signatures}
103105

104106
def verify(self) -> bool:

0 commit comments

Comments
 (0)