From c1e7673eafd4b40982fdada91584e4fa051a5d2b Mon Sep 17 00:00:00 2001 From: "Mike A." Date: Mon, 17 Nov 2025 21:32:52 +0100 Subject: [PATCH] fix: define `__hash__` and `__eq__` for `FindMyAccessory` --- findmy/accessory.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/findmy/accessory.py b/findmy/accessory.py index 78b4b3c..30ef467 100644 --- a/findmy/accessory.py +++ b/findmy/accessory.py @@ -373,6 +373,22 @@ class FindMyAccessory(RollingKeyPairSource, util.abc.Serializable[FindMyAccessor msg = f"Failed to restore account data: {e}" raise ValueError(msg) from None + @override + def __hash__(self) -> int: + master = crypto.bytes_to_int(self.master_key) + skn = crypto.bytes_to_int(self.skn) + sks = crypto.bytes_to_int(self.sks) + return hash((master, skn, sks)) + + @override + def __eq__(self, other: object) -> bool: + if not isinstance(other, FindMyAccessory): + return False + + return ( + self.master_key == other.master_key and self.skn == other.skn and self.sks == other.sks + ) + class _AccessoryKeyGenerator(KeyGenerator[KeyPair]): """KeyPair generator. Uses the same algorithm internally as FindMy accessories do."""