diff options
Diffstat (limited to 'src/tss.c')
| -rw-r--r-- | src/tss.c | 29 | 
1 files changed, 11 insertions, 18 deletions
| @@ -695,8 +695,6 @@ int tss_request_add_se_tags(plist_t request, plist_t parameters, plist_t overrid  		return -1;  	}  	plist_dict_set_item(request, "SE,ChipID", plist_copy(node)); -	uint64_t chip_id = 0; -	plist_get_uint_val(node, &chip_id);  	node = NULL;  	/* add SE,ID */ @@ -726,24 +724,11 @@ int tss_request_add_se_tags(plist_t request, plist_t parameters, plist_t overrid  	plist_dict_set_item(request, "SE,RootKeyIdentifier", plist_copy(node));  	node = NULL; -	const char *development_key = NULL; -	const char *production_key = NULL; -	if (chip_id == 0x20211) { -		development_key = "DevelopmentCMAC"; -		production_key = "ProductionCMAC"; -	} else if (chip_id == 0x73) { -		development_key = "DevelopmentUpdatePayloadHash"; -		production_key = "ProductionUpdatePayloadHash"; -	} else { -		error("WARNING: Unsupported SE,ChipID 0x%lx. Restore will likely fail.\n", (unsigned long)chip_id); -	} -	const char *key_to_remove = development_key;  	/* 'IsDev' determines whether we have Production or Development */ +	uint8_t is_dev = 0;  	node = plist_dict_get_item(parameters, "SE,IsDev");  	if (node && plist_get_node_type(node) == PLIST_BOOLEAN) { -		uint8_t is_dev = 0;  		plist_get_bool_val(node, &is_dev); -		key_to_remove = (is_dev) ? production_key : development_key;  	}  	/* add SE,* components from build manifest to request */ @@ -774,8 +759,16 @@ int tss_request_add_se_tags(plist_t request, plist_t parameters, plist_t overrid  		plist_dict_remove_item(tss_entry, "Info");  		/* remove Development or Production key/hash node */ -		if (key_to_remove && plist_dict_get_item(tss_entry, key_to_remove)) { -			plist_dict_remove_item(tss_entry, key_to_remove); +		if (is_dev) { +			if (plist_dict_get_item(tss_entry, "ProductionCMAC")) +				plist_dict_remove_item(tss_entry, "ProductionCMAC"); +			if (plist_dict_get_item(tss_entry, "ProductionUpdatePayloadHash")) +				plist_dict_remove_item(tss_entry, "ProductionUpdatePayloadHash"); +		} else { +			if (plist_dict_get_item(tss_entry, "DevelopmentCMAC")) +				plist_dict_remove_item(tss_entry, "DevelopmentCMAC"); +			if (plist_dict_get_item(tss_entry, "DevelopmentUpdatePayloadHash")) +				plist_dict_remove_item(tss_entry, "DevelopmentUpdatePayloadHash");  		}  		/* add entry to request */ | 
