pyctr.type.save.cmac module

exception pyctr.type.save.cmac.CMACError[source]

Bases: PyCTRError

Generic error for CMAC operations.

exception pyctr.type.save.cmac.InvalidDataError[source]

Bases: CMACError

Not all the data was provided in the correct form.

pyctr.type.save.cmac.disa_to_sav0_digest(disa)[source]
Parameters:

disa (bytes)

class pyctr.type.save.cmac.CMACTypeBase(magic, keyslot, *, crypto=None)[source]

Bases: object

Base class for AES-CMAC types.

Parameters:
set_crypto(crypto)[source]
Parameters:

crypto (CryptoEngine)

generate_cmac(header)[source]
Parameters:

header (bytes)

class pyctr.type.save.cmac.CTR_NOR0(new3ds=False, *, crypto=None)[source]

Bases: CMACTypeBase

Used for gamecard saves.

This isn’t well tested since I don’t have much experience with gamecard saves.

Parameters:
generate_cmac(disa)[source]
Parameters:

disa (bytes)

class pyctr.type.save.cmac.CTR_SIGN(title_id, *, crypto=None)[source]

Bases: CMACTypeBase

Used for SD savegames.

Parameters:
generate_cmac(disa)[source]
Parameters:

disa (bytes)

class pyctr.type.save.cmac.CTR_SYS0(save_id, *, crypto=None)[source]

Bases: CMACTypeBase

Used for system savedata.

Parameters:
generate_cmac(disa)[source]
Parameters:

disa (bytes)

class pyctr.type.save.cmac.CTR_EXT0(extdata_id, is_quota, device_file_name_id=0, device_directory_name_id=0, *, crypto=None)[source]

Bases: CMACTypeBase

Used for extdata.

Parameters:
generate_cmac(diff)[source]
Parameters:

diff (bytes)

class pyctr.type.save.cmac.CTR_9DB0(database_id, is_nand, *, crypto=None)[source]

Bases: CMACTypeBase

Used for title databases.

Parameters:
generate_cmac(diff)[source]
Parameters:

diff (bytes)