Update for Hekate 4.8 + bis keys without master key
This commit is contained in:
@ -369,10 +369,32 @@ void KeyCollection::derive_keys() {
|
||||
header_key = {"header_key", 0x20, {}};
|
||||
if (header_kek_source.found() && header_key_source.found()) {
|
||||
u8 tempheaderkek[0x10], tempheaderkey[0x20];
|
||||
splCryptoInitialize();
|
||||
splCryptoGenerateAesKek(header_kek_source.key.data(), 0, 0, tempheaderkek);
|
||||
splCryptoGenerateAesKey(tempheaderkek, header_key_source.key.data(), tempheaderkey);
|
||||
splCryptoGenerateAesKey(tempheaderkek, header_key_source.key.data() + 0x00, tempheaderkey + 0x00);
|
||||
splCryptoGenerateAesKey(tempheaderkek, header_key_source.key.data() + 0x10, tempheaderkey + 0x10);
|
||||
header_key = {"header_key", 0x20, byte_vector(&tempheaderkey[0], &tempheaderkey[0x20])};
|
||||
header_key = {"header_key", 0x20, byte_vector(tempheaderkey, tempheaderkey + 0x20)};
|
||||
splCryptoExit();
|
||||
}
|
||||
|
||||
if (bis_key_source_00.found() && bis_key_source_01.found() && bis_key_source_02.found()) {
|
||||
u8 tempbiskek[0x10], tempbiskey[0x20];
|
||||
splFsInitialize();
|
||||
splFsGenerateSpecificAesKey(bis_key_source_00.key.data() + 0x00, 0, 0, tempbiskey + 0x00);
|
||||
splFsGenerateSpecificAesKey(bis_key_source_00.key.data() + 0x10, 0, 0, tempbiskey + 0x10);
|
||||
bis_key.push_back(Key {"bis_key_00", 0x20, byte_vector(tempbiskey, tempbiskey + 0x20)});
|
||||
splFsExit();
|
||||
|
||||
splCryptoInitialize();
|
||||
splCryptoGenerateAesKek(bis_kek_source.key.data(), 0, 1, tempbiskek);
|
||||
splCryptoGenerateAesKey(tempbiskek, bis_key_source_01.key.data() + 0x00, tempbiskey + 0x00);
|
||||
splCryptoGenerateAesKey(tempbiskek, bis_key_source_01.key.data() + 0x10, tempbiskey + 0x10);
|
||||
bis_key.push_back(Key {"bis_key_01", 0x20, byte_vector(tempbiskey, tempbiskey + 0x20)});
|
||||
splCryptoGenerateAesKey(tempbiskek, bis_key_source_02.key.data() + 0x00, tempbiskey + 0x00);
|
||||
splCryptoGenerateAesKey(tempbiskek, bis_key_source_02.key.data() + 0x10, tempbiskey + 0x10);
|
||||
bis_key.push_back(Key {"bis_key_02", 0x20, byte_vector(tempbiskey, tempbiskey + 0x20)});
|
||||
bis_key.push_back(Key {"bis_key_03", 0x20, bis_key[2].key});
|
||||
splCryptoExit();
|
||||
}
|
||||
|
||||
for (u8 i = 0; i < aes_kek_generation_source.key.size(); i++) {
|
||||
@ -390,15 +412,6 @@ void KeyCollection::derive_keys() {
|
||||
save_mac_key = Key {"save_mac_key", 0x10, kek.aes_decrypt_ecb(save_mac_key_source.key)};
|
||||
}
|
||||
|
||||
if (device_key.found()) {
|
||||
Key kek = {device_key.aes_decrypt_ecb(retail_specific_aes_key_source.key), 0x10};
|
||||
bis_key.push_back(Key {"bis_key_00", 0x20, kek.aes_decrypt_ecb(bis_key_source_00.key)});
|
||||
kek = Key {bis_kek_source.generate_kek(device_key, aes_kek_generation_source, aes_key_generation_source), 0x10};
|
||||
bis_key.push_back(Key {"bis_key_01", 0x20, kek.aes_decrypt_ecb(bis_key_source_01.key)});
|
||||
bis_key.push_back(Key {"bis_key_02", 0x20, kek.aes_decrypt_ecb(bis_key_source_02.key)});
|
||||
bis_key.push_back(Key {"bis_key_03", 0x20, bis_key[2].key});\
|
||||
}
|
||||
|
||||
char keynum[] = "00";
|
||||
for (u8 i = 0; i < master_key.size(); i++) {
|
||||
if (!master_key[i].found())
|
||||
@ -467,11 +480,11 @@ void KeyCollection::save_keys() {
|
||||
aes_kek_generation_source.save_key(key_file);
|
||||
aes_key_generation_source.save_key(key_file);
|
||||
bis_kek_source.save_key(key_file);
|
||||
for (auto k : bis_key)
|
||||
k.save_key(key_file);
|
||||
bis_key_source_00.save_key(key_file);
|
||||
bis_key_source_01.save_key(key_file);
|
||||
bis_key_source_02.save_key(key_file);
|
||||
for (auto k : bis_key)
|
||||
k.save_key(key_file);
|
||||
device_key.save_key(key_file);
|
||||
eticket_rsa_kek.save_key(key_file);
|
||||
for (auto k : es_keys)
|
||||
@ -516,11 +529,11 @@ void KeyCollection::save_keys() {
|
||||
save_mac_kek_source.save_key(key_file);
|
||||
save_mac_key.save_key(key_file);
|
||||
save_mac_key_source.save_key(key_file);
|
||||
sbk.save_key(key_file);
|
||||
sd_card_kek_source.save_key(key_file);
|
||||
sd_card_nca_key_source.save_key(key_file);
|
||||
sd_card_save_key_source.save_key(key_file);
|
||||
sd_seed.save_key(key_file);
|
||||
sbk.save_key(key_file);
|
||||
ssl_rsa_kek.save_key(key_file);
|
||||
for (auto k : ssl_keys)
|
||||
k->save_key(key_file);
|
||||
|
Reference in New Issue
Block a user