Skip to content

Commit

Permalink
base_restore: Add populate_tss_request_from_manifest()
Browse files Browse the repository at this point in the history
  • Loading branch information
doronz88 committed Feb 24, 2025
1 parent df704b4 commit 9ab8939
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 13 deletions.
36 changes: 36 additions & 0 deletions pymobiledevice3/restore/base_restore.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,3 +71,39 @@ def __init__(self, ipsw: ZipFile, device: Device, tss: Optional[dict] = None,
@property
def logger(self) -> logging.Logger:
return logging.getLogger(f'{asyncio.current_task().get_name()}-{self.__class__.__module__}')

def populate_tss_request_from_manifest(self, parameters: dict, additional_keys: Optional[list[str]] = None) -> None:
""" equivalent to idevicerestore:tss_parameters_add_from_manifest """
key_list = ['ApBoardID', 'ApChipID']
if additional_keys is None:
key_list += ['UniqueBuildID', 'Ap,OSLongVersion', 'Ap,OSReleaseType', 'Ap,ProductType', 'Ap,SDKPlatform',
'Ap,SikaFuse', 'Ap,Target', 'Ap,TargetType', 'ApBoardID', 'ApChipID',
'ApSecurityDomain', 'BMU,BoardID', 'BMU,ChipID', 'BbChipID', 'BbProvisioningManifestKeyHash',
'BbActivationManifestKeyHash', 'BbCalibrationManifestKeyHash', 'Ap,ProductMarketingVersion',
'BbFactoryActivationManifestKeyHash', 'BbFDRSecurityKeyHash', 'BbSkeyId', 'SE,ChipID',
'Savage,ChipID', 'Savage,PatchEpoch', 'Yonkers,BoardID', 'Yonkers,ChipID',
'Yonkers,PatchEpoch', 'Rap,BoardID', 'Rap,ChipID', 'Rap,SecurityDomain', 'Baobab,BoardID',
'Baobab,ChipID', 'Baobab,ManifestEpoch', 'Baobab,SecurityDomain', 'eUICC,ChipID',
'PearlCertificationRootPub', 'Timer,BoardID,1', 'Timer,BoardID,2', 'Timer,ChipID,1',
'Timer,ChipID,2', 'Timer,SecurityDomain,1', 'Timer,SecurityDomain,2', 'Manifest',
]
else:
key_list += additional_keys

for k in key_list:
try:
v = self.build_identity[k]
if isinstance(v, str) and v.startswith('0x'):
v = int(v, 16)
parameters[k] = v
except KeyError:
pass

if additional_keys is None:
# special treat for RequiresUIDMode
info = self.build_identity.get('Info')
if info is None:
return
requires_uid_mode = info.get('RequiresUIDMode')
if requires_uid_mode is not None:
parameters['RequiresUIDMode'] = requires_uid_mode
8 changes: 4 additions & 4 deletions pymobiledevice3/restore/recovery.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ def get_preboard_manifest(self):
'ApSupportsImg4': True,
}

self.build_identity.populate_tss_request_parameters(parameters)
self.populate_tss_request_from_manifest(parameters)

tss = TSSRequest()
tss.add_common_tags(parameters, overrides)
Expand Down Expand Up @@ -74,7 +74,7 @@ async def get_tss_response(self) -> TSSResponse:
else:
parameters['ApSupportsImg4'] = False

self.build_identity.populate_tss_request_parameters(parameters)
self.populate_tss_request_from_manifest(parameters)

tss = TSSRequest()
tss.add_common_tags(parameters)
Expand Down Expand Up @@ -159,7 +159,7 @@ def get_local_policy_tss_response(self):
else:
parameters['ApSupportsImg4'] = False

self.build_identity.populate_tss_request_parameters(parameters)
self.populate_tss_request_from_manifest(parameters)

# Add Ap,LocalPolicy
lpol = {
Expand Down Expand Up @@ -205,7 +205,7 @@ def get_recoveryos_root_ticket_tss_response(self):
else:
parameters['ApSupportsImg4'] = False

self.build_identity.populate_tss_request_parameters(parameters)
self.populate_tss_request_from_manifest(parameters)

# create basic request
# Adds @HostPlatformInfo, @VersionInfo, @UUID
Expand Down
18 changes: 9 additions & 9 deletions pymobiledevice3/restore/restore.py
Original file line number Diff line number Diff line change
Expand Up @@ -579,7 +579,7 @@ async def send_baseband_data(self, message: dict):
parameters['BbGoldCertId'] = bb_cert_id
parameters['BbSNUM'] = bb_snum

self.build_identity.populate_tss_request_parameters(parameters)
self.populate_tss_request_from_manifest(parameters)

# create baseband request
request = TSSRequest()
Expand Down Expand Up @@ -721,7 +721,7 @@ async def get_se_firmware_data(self, updater_name: str, info: dict, arguments: d
parameters = dict()

# add manifest for current build_identity to parameters
self.build_identity.populate_tss_request_parameters(parameters)
self.populate_tss_request_from_manifest(parameters)

# add SE,* tags from info dictionary to parameters
parameters.update(info)
Expand All @@ -747,7 +747,7 @@ async def get_yonkers_firmware_data(self, info: dict):
parameters = dict()

# add manifest for current build_identity to parameters
self.build_identity.populate_tss_request_parameters(parameters)
self.populate_tss_request_from_manifest(parameters)

# add Yonkers,* tags from info dictionary to parameters
parameters.update(info)
Expand Down Expand Up @@ -785,7 +785,7 @@ async def get_savage_firmware_data(self, info: dict):
parameters = dict()

# add manifest for current build_identity to parameters
self.build_identity.populate_tss_request_parameters(parameters)
self.populate_tss_request_from_manifest(parameters)

# add Savage,* tags from info dictionary to parameters
parameters.update(info)
Expand Down Expand Up @@ -826,7 +826,7 @@ async def get_rose_firmware_data(self, updater_name: str, info: dict, arguments:
parameters = dict()

# add manifest for current build_identity to parameters
self.build_identity.populate_tss_request_parameters(parameters)
self.populate_tss_request_from_manifest(parameters)

parameters['ApProductionMode'] = True

Expand Down Expand Up @@ -880,7 +880,7 @@ async def get_veridian_firmware_data(self, updater_name: str, info: dict, argume
parameters = dict()

# add manifest for current build_identity to parameters
self.build_identity.populate_tss_request_parameters(parameters)
self.populate_tss_request_from_manifest(parameters)

# add BMU,* tags from info dictionary to parameters
parameters.update(info)
Expand Down Expand Up @@ -913,7 +913,7 @@ async def get_tcon_firmware_data(self, info: dict):
parameters = dict()

# add manifest for current build_identity to parameters
self.build_identity.populate_tss_request_parameters(parameters)
self.populate_tss_request_from_manifest(parameters)

# add Baobab,* tags from info dictionary to parameters
parameters.update(info)
Expand All @@ -938,7 +938,7 @@ async def get_device_generated_firmware_data(self, updater_name: str, info: dict
parameters = dict()

# add manifest for current build_identity to parameters
self.build_identity.populate_tss_request_parameters(
self.populate_tss_request_from_manifest(
parameters, arguments['DeviceGeneratedTags']['BuildIdentityTags'])

parameters['@BBTicket'] = True
Expand Down Expand Up @@ -981,7 +981,7 @@ async def get_timer_firmware_data(self, info: dict):
parameters = dict()

# add manifest for current build_identity to parameters
self.build_identity.populate_tss_request_parameters(parameters)
self.populate_tss_request_from_manifest(parameters)

parameters['ApProductionMode'] = True
if self.device.is_image4_supported:
Expand Down

0 comments on commit 9ab8939

Please sign in to comment.