mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-23 14:19:46 -06:00
Merge pull request #6088 from leoetlino/personalised-import
IOS: Assume ticket is unpersonalised for WAD imports
This commit is contained in:
@ -106,7 +106,15 @@ public:
|
|||||||
s32 SeekContent(u32 cfd, u32 offset, SeekMode mode, u32 uid);
|
s32 SeekContent(u32 cfd, u32 offset, SeekMode mode, u32 uid);
|
||||||
|
|
||||||
// Title management
|
// Title management
|
||||||
ReturnCode ImportTicket(const std::vector<u8>& ticket_bytes, const std::vector<u8>& cert_chain);
|
enum class TicketImportType
|
||||||
|
{
|
||||||
|
// Ticket may be personalised, so use console specific data for decryption if needed.
|
||||||
|
PossiblyPersonalised,
|
||||||
|
// Ticket is unpersonalised, so ignore any console specific decryption data.
|
||||||
|
Unpersonalised,
|
||||||
|
};
|
||||||
|
ReturnCode ImportTicket(const std::vector<u8>& ticket_bytes, const std::vector<u8>& cert_chain,
|
||||||
|
TicketImportType type = TicketImportType::PossiblyPersonalised);
|
||||||
ReturnCode ImportTmd(Context& context, const std::vector<u8>& tmd_bytes);
|
ReturnCode ImportTmd(Context& context, const std::vector<u8>& tmd_bytes);
|
||||||
ReturnCode ImportTitleInit(Context& context, const std::vector<u8>& tmd_bytes,
|
ReturnCode ImportTitleInit(Context& context, const std::vector<u8>& tmd_bytes,
|
||||||
const std::vector<u8>& cert_chain);
|
const std::vector<u8>& cert_chain);
|
||||||
|
@ -56,7 +56,8 @@ void ES::TitleImportExportContext::DoState(PointerWrap& p)
|
|||||||
p.Do(content.buffer);
|
p.Do(content.buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
ReturnCode ES::ImportTicket(const std::vector<u8>& ticket_bytes, const std::vector<u8>& cert_chain)
|
ReturnCode ES::ImportTicket(const std::vector<u8>& ticket_bytes, const std::vector<u8>& cert_chain,
|
||||||
|
TicketImportType type)
|
||||||
{
|
{
|
||||||
IOS::ES::TicketReader ticket{ticket_bytes};
|
IOS::ES::TicketReader ticket{ticket_bytes};
|
||||||
if (!ticket.IsValid())
|
if (!ticket.IsValid())
|
||||||
@ -64,7 +65,7 @@ ReturnCode ES::ImportTicket(const std::vector<u8>& ticket_bytes, const std::vect
|
|||||||
|
|
||||||
const u32 ticket_device_id = ticket.GetDeviceId();
|
const u32 ticket_device_id = ticket.GetDeviceId();
|
||||||
const u32 device_id = EcWii::GetInstance().GetNGID();
|
const u32 device_id = EcWii::GetInstance().GetNGID();
|
||||||
if (ticket_device_id != 0)
|
if (type == TicketImportType::PossiblyPersonalised && ticket_device_id != 0)
|
||||||
{
|
{
|
||||||
if (device_id != ticket_device_id)
|
if (device_id != ticket_device_id)
|
||||||
{
|
{
|
||||||
|
@ -65,7 +65,8 @@ static bool InstallWAD(IOS::HLE::Kernel& ios, const DiscIO::WiiWAD& wad)
|
|||||||
// Ensure the common key index is correct, as it's checked by IOS.
|
// Ensure the common key index is correct, as it's checked by IOS.
|
||||||
ticket.FixCommonKeyIndex();
|
ticket.FixCommonKeyIndex();
|
||||||
|
|
||||||
while ((ret = es->ImportTicket(ticket.GetBytes(), wad.GetCertificateChain())) < 0 ||
|
while ((ret = es->ImportTicket(ticket.GetBytes(), wad.GetCertificateChain(),
|
||||||
|
IOS::HLE::Device::ES::TicketImportType::Unpersonalised)) < 0 ||
|
||||||
(ret = es->ImportTitleInit(context, tmd.GetBytes(), wad.GetCertificateChain())) < 0)
|
(ret = es->ImportTitleInit(context, tmd.GetBytes(), wad.GetCertificateChain())) < 0)
|
||||||
{
|
{
|
||||||
if (checks_enabled && ret == IOS::HLE::IOSC_FAIL_CHECKVALUE &&
|
if (checks_enabled && ret == IOS::HLE::IOSC_FAIL_CHECKVALUE &&
|
||||||
|
Reference in New Issue
Block a user