findmy.accessory

Module to interact with accessories that implement Find My.

Accessories could be anything ranging from AirTags to iPhones.

Classes

RollingKeyPairSource

A class that generates rolling `KeyPair`s.

FindMyAccessory

A findable Find My-accessory using official key rollover.

AccessoryKeyGenerator

KeyPair generator. Uses the same algorithm internally as FindMy accessories do.

Module Contents

class findmy.accessory.RollingKeyPairSource

Bases: abc.ABC

A class that generates rolling `KeyPair`s.

property interval: datetime.timedelta
Abstractmethod:

KeyPair rollover interval.

abstract keys_at(ind: int | datetime.datetime) set[findmy.keys.KeyPair]

Generate potential key(s) occurring at a certain index or timestamp.

keys_between(start: int, end: int) set[findmy.keys.KeyPair]
keys_between(start: datetime.datetime, end: datetime.datetime) set[findmy.keys.KeyPair]

Generate potential key(s) occurring between two indices or timestamps.

class findmy.accessory.FindMyAccessory(master_key: bytes, skn: bytes, sks: bytes, paired_at: datetime.datetime, name: str | None = None, model: str | None = None, identifier: str | None = None)

Bases: RollingKeyPairSource

A findable Find My-accessory using official key rollover.

property paired_at: datetime.datetime

Date and time at which this accessory was paired with an Apple account.

property name: str | None

Name of this accessory.

property model: str | None

Model string of this accessory, as provided by the manufacturer.

property identifier: str | None

Internal identifier of this accessory.

property interval: datetime.timedelta

Official FindMy accessory rollover interval (15 minutes).

keys_at(ind: int | datetime.datetime) set[findmy.keys.KeyPair]

Get the potential primary and secondary keys active at a certain time or index.

classmethod from_plist(plist: IO[bytes]) FindMyAccessory

Create a FindMyAccessory from a .plist file dumped from the FindMy app.

class findmy.accessory.AccessoryKeyGenerator(master_key: bytes, initial_sk: bytes, key_type: findmy.keys.KeyType = KeyType.UNKNOWN)

Bases: findmy.keys.KeyGenerator[findmy.keys.KeyPair]

KeyPair generator. Uses the same algorithm internally as FindMy accessories do.

__iter__() findmy.keys.KeyGenerator
__next__() findmy.keys.KeyPair
__getitem__(val: int) findmy.keys.KeyPair
__getitem__(val: slice) Generator[findmy.keys.KeyPair, None, None]