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:
Martin Vrachev 2021-12-16 19:58:39 +02:00
parent 8415d38ad6
commit 0cbe2a2034
4 changed files with 20 additions and 51 deletions

View file

@ -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:

View file

@ -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)

View file

@ -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 ####

View file

@ -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