mirror of
https://github.com/DarkStore-3DS/Project_CTR.git
synced 2026-07-03 00:39:14 +00:00
[makerom] Updated NCSD spec, as per 3dbrew.org contributor research.
This commit is contained in:
+26
-12
@@ -7,8 +7,8 @@ void InitCardInfoHdr(cardinfo_hdr **cihdr, devcardinfo_hdr **dcihdr, cci_setting
|
|||||||
int SetWriteableAddress(cardinfo_hdr *hdr, cci_settings *set);
|
int SetWriteableAddress(cardinfo_hdr *hdr, cci_settings *set);
|
||||||
int SetCardInfoBitmask(cardinfo_hdr *hdr, cci_settings *set);
|
int SetCardInfoBitmask(cardinfo_hdr *hdr, cci_settings *set);
|
||||||
int SetCardInfoNotes(cardinfo_hdr *hdr, cci_settings *set);
|
int SetCardInfoNotes(cardinfo_hdr *hdr, cci_settings *set);
|
||||||
void ImportNcch0Data(cardinfo_hdr *hdr, cci_settings *set);
|
void SetNcchHeader(cardinfo_hdr *hdr, cci_settings *set);
|
||||||
void SetInitialData(cardinfo_hdr *hdr, cci_settings *set);
|
void SetCardSeedData(cardinfo_hdr *hdr, cci_settings *set);
|
||||||
void SetDevCardInfo(devcardinfo_hdr *hdr, cci_settings *set);
|
void SetDevCardInfo(devcardinfo_hdr *hdr, cci_settings *set);
|
||||||
|
|
||||||
|
|
||||||
@@ -25,8 +25,8 @@ int GenCardInfoHdr(cci_settings *set)
|
|||||||
return GEN_HDR_FAIL;
|
return GEN_HDR_FAIL;
|
||||||
if(SetCardInfoNotes(cihdr,set))
|
if(SetCardInfoNotes(cihdr,set))
|
||||||
return GEN_HDR_FAIL;
|
return GEN_HDR_FAIL;
|
||||||
ImportNcch0Data(cihdr,set);
|
SetNcchHeader(cihdr,set);
|
||||||
SetInitialData(cihdr,set);
|
SetCardSeedData(cihdr,set);
|
||||||
|
|
||||||
if(dcihdr)
|
if(dcihdr)
|
||||||
SetDevCardInfo(dcihdr,set);
|
SetDevCardInfo(dcihdr,set);
|
||||||
@@ -49,6 +49,8 @@ void InitCardInfoHdr(cardinfo_hdr **cihdr, devcardinfo_hdr **dcihdr, cci_setting
|
|||||||
else
|
else
|
||||||
*dcihdr = NULL;
|
*dcihdr = NULL;
|
||||||
|
|
||||||
|
//clrmem(set->headers.cardinfohdr.buffer, set->headers.cardinfohdr.size);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -174,7 +176,7 @@ int SetCardInfoNotes(cardinfo_hdr *hdr, cci_settings *set)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImportNcch0Data(cardinfo_hdr *hdr, cci_settings *set)
|
void SetNcchHeader(cardinfo_hdr *hdr, cci_settings *set)
|
||||||
{
|
{
|
||||||
u8 *ncch;
|
u8 *ncch;
|
||||||
ncch_hdr *ncchHdr;
|
ncch_hdr *ncchHdr;
|
||||||
@@ -182,19 +184,31 @@ void ImportNcch0Data(cardinfo_hdr *hdr, cci_settings *set)
|
|||||||
ncch = set->content.data + set->content.dOffset[0];
|
ncch = set->content.data + set->content.dOffset[0];
|
||||||
ncchHdr = (ncch_hdr*)ncch;
|
ncchHdr = (ncch_hdr*)ncch;
|
||||||
|
|
||||||
memcpy(hdr->ncch0TitleId,ncchHdr->titleId,8);
|
|
||||||
memcpy(hdr->ncch0Hdr,GetNcchHdrData(ncchHdr),GetNcchHdrDataLen(ncchHdr));
|
memcpy(hdr->ncch0Hdr,GetNcchHdrData(ncchHdr),GetNcchHdrDataLen(ncchHdr));
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetInitialData(cardinfo_hdr *hdr, cci_settings *set)
|
void SetCardSeedData(cardinfo_hdr *hdr, cci_settings *set)
|
||||||
{
|
{
|
||||||
clrmem(hdr->initialData,0x30);
|
u8 *ncch;
|
||||||
if(set->options.useExternalSdkCardInfo)
|
ncch_hdr *ncchHdr;
|
||||||
memcpy(hdr->initialData,(u8*)stock_initial_data,0x30);
|
|
||||||
else
|
ncch = set->content.data + set->content.dOffset[0];
|
||||||
rndset(hdr->initialData,0x2c);
|
ncchHdr = (ncch_hdr*)ncch;
|
||||||
|
|
||||||
|
if (set->options.useExternalSdkCardInfo) {
|
||||||
|
memcpy(hdr->cardSeedKeyY, ncchHdr->titleId, 8);
|
||||||
|
clrmem(hdr->encCardSeed, 0x10);
|
||||||
|
memcpy(hdr->cardSeedMac, stock_card_seed_mac, 0x10);
|
||||||
|
clrmem(hdr->cardSeedNonce, 0xC);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
memcpy(hdr->cardSeedKeyY, ncchHdr->titleId, 8);
|
||||||
|
rndset(hdr->encCardSeed, 0x10);
|
||||||
|
rndset(hdr->cardSeedMac, 0x10);
|
||||||
|
rndset(hdr->cardSeedNonce, 0xC);
|
||||||
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
+7
-13
@@ -17,10 +17,11 @@ typedef struct
|
|||||||
u8 writableAddress[4];
|
u8 writableAddress[4];
|
||||||
u8 cardInfoBitmask[4];
|
u8 cardInfoBitmask[4];
|
||||||
cardinfo_notes notes;
|
cardinfo_notes notes;
|
||||||
u8 ncch0TitleId[8];
|
u8 cardSeedKeyY[0x10];
|
||||||
u8 reserved0[8];
|
u8 encCardSeed[0x10];
|
||||||
u8 initialData[0x30];
|
u8 cardSeedMac[0x10];
|
||||||
u8 reserved1[0xc0];
|
u8 cardSeedNonce[0xc];
|
||||||
|
u8 reserved1[0xc4];
|
||||||
u8 ncch0Hdr[0x100];
|
u8 ncch0Hdr[0x100];
|
||||||
} cardinfo_hdr;
|
} cardinfo_hdr;
|
||||||
|
|
||||||
@@ -31,16 +32,9 @@ typedef struct
|
|||||||
u8 cardDeviceReserved2[0xf0];
|
u8 cardDeviceReserved2[0xf0];
|
||||||
} devcardinfo_hdr;
|
} devcardinfo_hdr;
|
||||||
|
|
||||||
static const u8 stock_initial_data[0x30] =
|
static const u8 stock_card_seed_mac[0x30] =
|
||||||
{
|
{
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0xAD, 0x88, 0xAC, 0x41, 0xA2, 0xB1, 0x5E, 0x8F, 0x66, 0x9C, 0x97, 0xE5, 0xE1, 0x5E, 0xA3, 0xEB
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0xAD, 0x88,
|
|
||||||
0xAC, 0x41, 0xA2, 0xB1, 0x5E, 0x8F,
|
|
||||||
0x66, 0x9C, 0x97, 0xE5, 0xE1, 0x5E,
|
|
||||||
0xA3, 0xEB, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static const u8 stock_title_key[0x10] =
|
static const u8 stock_title_key[0x10] =
|
||||||
|
|||||||
Reference in New Issue
Block a user