|
9 | 9 | from copy import deepcopy |
10 | 10 | from typing import Dict, Generator, Optional, Tuple |
11 | 11 |
|
| 12 | +from tuf.api.exceptions import UnsignedMetadataError |
12 | 13 | from tuf.api.metadata import ( |
13 | 14 | Metadata, |
14 | 15 | MetaFile, |
@@ -188,6 +189,18 @@ def do_snapshot( |
188 | 189 | update_version = force |
189 | 190 | removed: Dict[str, MetaFile] = {} |
190 | 191 |
|
| 192 | + root = self.root() |
| 193 | + snapshot_md = self.open(Snapshot.type) |
| 194 | + |
| 195 | + try: |
| 196 | + root.verify_delegate( |
| 197 | + Snapshot.type, |
| 198 | + snapshot_md.signed_bytes, |
| 199 | + snapshot_md.signatures, |
| 200 | + ) |
| 201 | + except UnsignedMetadataError: |
| 202 | + update_version = True |
| 203 | + |
191 | 204 | with self.edit_snapshot() as snapshot: |
192 | 205 | for keyname, new_meta in self.targets_infos.items(): |
193 | 206 | if keyname not in snapshot.meta: |
@@ -228,6 +241,19 @@ def do_timestamp( |
228 | 241 | """ |
229 | 242 | update_version = force |
230 | 243 | removed = None |
| 244 | + |
| 245 | + root = self.root() |
| 246 | + timestamp_md = self.open(Timestamp.type) |
| 247 | + |
| 248 | + try: |
| 249 | + root.verify_delegate( |
| 250 | + Timestamp.type, |
| 251 | + timestamp_md.signed_bytes, |
| 252 | + timestamp_md.signatures, |
| 253 | + ) |
| 254 | + except UnsignedMetadataError: |
| 255 | + update_version = True |
| 256 | + |
231 | 257 | with self.edit_timestamp() as timestamp: |
232 | 258 | if self.snapshot_info.version < timestamp.snapshot_meta.version: |
233 | 259 | raise ValueError("snapshot version rollback") |
|
0 commit comments