mirror of
https://github.com/NinjaCheetah/libWiiPy.git
synced 2025-04-26 13:21:01 -04:00
Merge remote-tracking branch 'origin/main' into breakdown_wad
This commit is contained in:
commit
9614defc2d
@ -23,14 +23,14 @@ class TMD:
|
|||||||
self.sig_type: int
|
self.sig_type: int
|
||||||
self.sig: bytearray
|
self.sig: bytearray
|
||||||
self.issuer: bytearray # Follows the format "Root-CA%08x-CP%08x"
|
self.issuer: bytearray # Follows the format "Root-CA%08x-CP%08x"
|
||||||
self.version: bytearray # This seems to always be 0 no matter what?
|
self.version: int # This seems to always be 0 no matter what?
|
||||||
self.ca_crl_version: int
|
self.ca_crl_version: int
|
||||||
self.signer_crl_version: int
|
self.signer_crl_version: int
|
||||||
self.vwii: int
|
self.vwii: int
|
||||||
self.ios_tid: str
|
self.ios_tid: str
|
||||||
self.ios_version: int
|
self.ios_version: int
|
||||||
self.title_id: str
|
self.title_id: str
|
||||||
self.title_type: str
|
self.content_type: str
|
||||||
self.group_id: int # Publisher of the title
|
self.group_id: int # Publisher of the title
|
||||||
self.region: int
|
self.region: int
|
||||||
self.ratings: int
|
self.ratings: int
|
||||||
@ -44,9 +44,9 @@ class TMD:
|
|||||||
# Signing certificate issuer
|
# Signing certificate issuer
|
||||||
tmdfile.seek(0x140)
|
tmdfile.seek(0x140)
|
||||||
self.issuer = tmdfile.read(64)
|
self.issuer = tmdfile.read(64)
|
||||||
# TMD version, always seems to be 0?
|
# TMD version, seems to usually be 0, but I've seen references to other numbers
|
||||||
tmdfile.seek(0x180)
|
tmdfile.seek(0x180)
|
||||||
self.version = tmdfile.read(1)
|
self.version = int.from_bytes(tmdfile.read(1))
|
||||||
# TODO: label
|
# TODO: label
|
||||||
tmdfile.seek(0x181)
|
tmdfile.seek(0x181)
|
||||||
self.ca_crl_version = tmdfile.read(1)
|
self.ca_crl_version = tmdfile.read(1)
|
||||||
@ -68,11 +68,11 @@ class TMD:
|
|||||||
title_id_bin = tmdfile.read(8)
|
title_id_bin = tmdfile.read(8)
|
||||||
title_id_hex = binascii.hexlify(title_id_bin)
|
title_id_hex = binascii.hexlify(title_id_bin)
|
||||||
self.title_id = str(title_id_hex.decode())
|
self.title_id = str(title_id_hex.decode())
|
||||||
# Type of title
|
# Type of content
|
||||||
tmdfile.seek(0x194)
|
tmdfile.seek(0x194)
|
||||||
title_type_bin = tmdfile.read(4)
|
content_type_bin = tmdfile.read(4)
|
||||||
title_type_hex = binascii.hexlify(title_type_bin)
|
content_type_hex = binascii.hexlify(content_type_bin)
|
||||||
self.title_type = str(title_type_hex.decode())
|
self.content_type = str(content_type_hex.decode())
|
||||||
# Publisher of the title
|
# Publisher of the title
|
||||||
tmdfile.seek(0x198)
|
tmdfile.seek(0x198)
|
||||||
self.group_id = tmdfile.read(2)
|
self.group_id = tmdfile.read(2)
|
||||||
@ -94,7 +94,7 @@ class TMD:
|
|||||||
self.title_version = title_version_high + title_version_low
|
self.title_version = title_version_high + title_version_low
|
||||||
# The number of contents listed in the TMD
|
# The number of contents listed in the TMD
|
||||||
tmdfile.seek(0x1DE)
|
tmdfile.seek(0x1DE)
|
||||||
self.num_contents = tmdfile.read(2)
|
self.num_contents = int.from_bytes(tmdfile.read(2))
|
||||||
# Content index in content list that contains the boot file
|
# Content index in content list that contains the boot file
|
||||||
tmdfile.seek(0x1E0)
|
tmdfile.seek(0x1E0)
|
||||||
self.boot_index = tmdfile.read(2)
|
self.boot_index = tmdfile.read(2)
|
||||||
@ -128,6 +128,10 @@ class TMD:
|
|||||||
else:
|
else:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
def get_tmd_version(self):
|
||||||
|
"""Returns the version of the TMD."""
|
||||||
|
return self.version
|
||||||
|
|
||||||
def get_required_ios_tid(self):
|
def get_required_ios_tid(self):
|
||||||
"""Returns the TID of the required IOS for the title."""
|
"""Returns the TID of the required IOS for the title."""
|
||||||
return self.ios_tid
|
return self.ios_tid
|
||||||
@ -154,3 +158,25 @@ class TMD:
|
|||||||
return "DLC"
|
return "DLC"
|
||||||
case '00010008':
|
case '00010008':
|
||||||
return "HiddenChannel"
|
return "HiddenChannel"
|
||||||
|
case _:
|
||||||
|
return "Unknown"
|
||||||
|
|
||||||
|
def get_content_type(self):
|
||||||
|
"""Returns the type of content contained in the TMD's associated title."""
|
||||||
|
match self.content_type:
|
||||||
|
case '00000001':
|
||||||
|
return "Normal"
|
||||||
|
case '00000002':
|
||||||
|
return "Development/Unknown"
|
||||||
|
case '00000003':
|
||||||
|
return "Hash Tree"
|
||||||
|
case '00004001':
|
||||||
|
return "DLC"
|
||||||
|
case '00008001':
|
||||||
|
return "Shared"
|
||||||
|
case _:
|
||||||
|
return "Unknown"
|
||||||
|
|
||||||
|
def get_num_contents(self):
|
||||||
|
"""Returns the number of contents listed in the TMD."""
|
||||||
|
return self.num_contents
|
||||||
|
Loading…
x
Reference in New Issue
Block a user