mirror of
https://github.com/theupdateframework/python-tuf
synced 2026-05-24 10:08:28 +00:00
Remove ReplayedMetadataError
ReplayedMetadataError is a subset of BadVersionNumberError and in a discussion with Jussi we realized that ReplayedMetadataError can be replaced by BadVersionNumberError with a good message. Signed-off-by: Martin Vrachev <mvrachev@vmware.com>
This commit is contained in:
parent
8415d38ad6
commit
0cbe2a2034
4 changed files with 20 additions and 51 deletions
|
|
@ -245,7 +245,7 @@ def test_update_root_new_root_fail_threshold_verification(self) -> None:
|
|||
self.trusted_set.update_root(root.to_bytes())
|
||||
|
||||
def test_update_root_new_root_ver_same_as_trusted_root_ver(self) -> None:
|
||||
with self.assertRaises(exceptions.ReplayedMetadataError):
|
||||
with self.assertRaises(exceptions.BadVersionNumberError):
|
||||
self.trusted_set.update_root(self.metadata[Root.type])
|
||||
|
||||
def test_root_expired_final_root(self) -> None:
|
||||
|
|
@ -266,7 +266,7 @@ def version_modifier(timestamp: Timestamp) -> None:
|
|||
|
||||
timestamp = self.modify_metadata(Timestamp.type, version_modifier)
|
||||
self.trusted_set.update_timestamp(timestamp)
|
||||
with self.assertRaises(exceptions.ReplayedMetadataError):
|
||||
with self.assertRaises(exceptions.BadVersionNumberError):
|
||||
self.trusted_set.update_timestamp(self.metadata[Timestamp.type])
|
||||
|
||||
def test_update_timestamp_snapshot_ver_below_current(self) -> None:
|
||||
|
|
@ -278,7 +278,7 @@ def bump_snapshot_version(timestamp: Timestamp) -> None:
|
|||
self.trusted_set.update_timestamp(timestamp)
|
||||
|
||||
# newtimestamp.meta.version < trusted_timestamp.meta.version
|
||||
with self.assertRaises(exceptions.ReplayedMetadataError):
|
||||
with self.assertRaises(exceptions.BadVersionNumberError):
|
||||
self.trusted_set.update_timestamp(self.metadata[Timestamp.type])
|
||||
|
||||
def test_update_timestamp_expired(self) -> None:
|
||||
|
|
|
|||
|
|
@ -19,7 +19,6 @@
|
|||
from tuf.api.exceptions import (
|
||||
BadVersionNumberError,
|
||||
ExpiredMetadataError,
|
||||
ReplayedMetadataError,
|
||||
RepositoryError,
|
||||
UnsignedMetadataError,
|
||||
)
|
||||
|
|
@ -267,7 +266,7 @@ def test_new_root_same_version(self) -> None:
|
|||
# Check for a rollback_attack
|
||||
# Repository serves a root file with the same version as previous
|
||||
self.sim.publish_root()
|
||||
with self.assertRaises(ReplayedMetadataError):
|
||||
with self.assertRaises(BadVersionNumberError):
|
||||
self._run_refresh()
|
||||
|
||||
# The update failed, latest root version is v1
|
||||
|
|
@ -278,7 +277,7 @@ def test_new_root_nonconsecutive_version(self) -> None:
|
|||
# Repository serves non-consecutive root version
|
||||
self.sim.root.version += 2
|
||||
self.sim.publish_root()
|
||||
with self.assertRaises(ReplayedMetadataError):
|
||||
with self.assertRaises(BadVersionNumberError):
|
||||
self._run_refresh()
|
||||
|
||||
# The update failed, latest root version is v1
|
||||
|
|
@ -313,7 +312,7 @@ def test_new_timestamp_version_rollback(self) -> None:
|
|||
self._run_refresh()
|
||||
|
||||
self.sim.timestamp.version = 1
|
||||
with self.assertRaises(ReplayedMetadataError):
|
||||
with self.assertRaises(BadVersionNumberError):
|
||||
self._run_refresh()
|
||||
|
||||
self._assert_version_equals(Timestamp.type, 2)
|
||||
|
|
@ -328,7 +327,7 @@ def test_new_timestamp_snapshot_rollback(self) -> None:
|
|||
self.sim.timestamp.snapshot_meta.version = 1
|
||||
self.sim.timestamp.version += 1 # timestamp v3
|
||||
|
||||
with self.assertRaises(ReplayedMetadataError):
|
||||
with self.assertRaises(BadVersionNumberError):
|
||||
self._run_refresh()
|
||||
|
||||
self._assert_version_equals(Timestamp.type, 2)
|
||||
|
|
@ -423,7 +422,7 @@ def test_new_snapshot_version_rollback(self) -> None:
|
|||
self.sim.snapshot.version = 1
|
||||
self.sim.update_timestamp()
|
||||
|
||||
with self.assertRaises(ReplayedMetadataError):
|
||||
with self.assertRaises(BadVersionNumberError):
|
||||
self._run_refresh()
|
||||
|
||||
self._assert_version_equals(Snapshot.type, 2)
|
||||
|
|
|
|||
|
|
@ -39,32 +39,6 @@ class ExpiredMetadataError(RepositoryError):
|
|||
"""Indicate that a TUF Metadata file has expired."""
|
||||
|
||||
|
||||
class ReplayedMetadataError(RepositoryError):
|
||||
"""Indicate that some metadata has been replayed to the client.
|
||||
|
||||
Args:
|
||||
metadata_role: Name of the role that has been replayed
|
||||
downloaded_version: The replayed downloaded version of the metadata
|
||||
current_version: The current locally available version.
|
||||
"""
|
||||
|
||||
def __init__(
|
||||
self, metadata_role: str, downloaded_version: int, current_version: int
|
||||
) -> None:
|
||||
super().__init__()
|
||||
|
||||
self.metadata_role = metadata_role
|
||||
self.downloaded_version = downloaded_version
|
||||
self.current_version = current_version
|
||||
|
||||
def __str__(self) -> str:
|
||||
return (
|
||||
f"Downloaded {self.metadata_role} is older ("
|
||||
f"{self.downloaded_version}) than the version currently installed"
|
||||
f"({self.current_version})"
|
||||
)
|
||||
|
||||
|
||||
#### Download Errors ####
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -175,10 +175,9 @@ def update_root(self, data: bytes) -> Metadata[Root]:
|
|||
self.root.verify_delegate(Root.type, new_root)
|
||||
|
||||
if new_root.signed.version != self.root.signed.version + 1:
|
||||
raise exceptions.ReplayedMetadataError(
|
||||
Root.type,
|
||||
new_root.signed.version,
|
||||
self.root.signed.version,
|
||||
raise exceptions.BadVersionNumberError(
|
||||
f"Expected root version {self.root.signed.version + 1}"
|
||||
f" instead got version {new_root.signed.version}"
|
||||
)
|
||||
|
||||
# Verify that new root is signed by itself
|
||||
|
|
@ -236,20 +235,17 @@ def update_timestamp(self, data: bytes) -> Metadata[Timestamp]:
|
|||
if self.timestamp is not None:
|
||||
# Prevent rolling back timestamp version
|
||||
if new_timestamp.signed.version < self.timestamp.signed.version:
|
||||
raise exceptions.ReplayedMetadataError(
|
||||
Timestamp.type,
|
||||
new_timestamp.signed.version,
|
||||
self.timestamp.signed.version,
|
||||
raise exceptions.BadVersionNumberError(
|
||||
f"New timestamp version {new_timestamp.signed.version} must"
|
||||
f" be >= {self.timestamp.signed.version}"
|
||||
)
|
||||
# Prevent rolling back snapshot version
|
||||
if (
|
||||
new_timestamp.signed.snapshot_meta.version
|
||||
< self.timestamp.signed.snapshot_meta.version
|
||||
):
|
||||
raise exceptions.ReplayedMetadataError(
|
||||
Snapshot.type,
|
||||
new_timestamp.signed.snapshot_meta.version,
|
||||
self.timestamp.signed.snapshot_meta.version,
|
||||
snapshot_meta = self.timestamp.signed.snapshot_meta
|
||||
new_snapshot_meta = new_timestamp.signed.snapshot_meta
|
||||
if new_snapshot_meta.version < snapshot_meta.version:
|
||||
raise exceptions.BadVersionNumberError(
|
||||
f"New snapshot version must be >= {snapshot_meta.version}"
|
||||
f", got version {new_snapshot_meta.version}"
|
||||
)
|
||||
|
||||
# expiry not checked to allow old timestamp to be used for rollback
|
||||
|
|
|
|||
Loading…
Reference in a new issue