@@ -81,15 +81,16 @@ def signed(self) -> str:
81
81
def signatures (self ) -> List :
82
82
return self .signable ['signatures' ]
83
83
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.
87
84
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.
91
85
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 })
93
94
94
95
signed = self .signed
95
96
signatures = self .signatures
@@ -98,7 +99,8 @@ def update_signature(signatures, keyid, signature):
98
99
signature = create_signature (keypair .private .obj , signed )
99
100
keyid = keypair .private .obj ['keyid' ]
100
101
update_signature (signatures , keyid , signature )
101
-
102
+
103
+ self .signatures = signatures
102
104
return {'signed' : signed , 'signatures' : signatures }
103
105
104
106
def verify (self ) -> bool :
0 commit comments