[makerom] Updated NCSD spec, as per 3dbrew.org contributor research.

This commit is contained in:
jakcron
2015-10-24 13:50:05 +08:00
parent 3702b58db3
commit 3f3418e840
2 changed files with 33 additions and 25 deletions
+26 -12
View File
@@ -7,8 +7,8 @@ void InitCardInfoHdr(cardinfo_hdr **cihdr, devcardinfo_hdr **dcihdr, cci_setting
int SetWriteableAddress(cardinfo_hdr *hdr, cci_settings *set);
int SetCardInfoBitmask(cardinfo_hdr *hdr, cci_settings *set);
int SetCardInfoNotes(cardinfo_hdr *hdr, cci_settings *set);
void ImportNcch0Data(cardinfo_hdr *hdr, cci_settings *set);
void SetInitialData(cardinfo_hdr *hdr, cci_settings *set);
void SetNcchHeader(cardinfo_hdr *hdr, cci_settings *set);
void SetCardSeedData(cardinfo_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;
if(SetCardInfoNotes(cihdr,set))
return GEN_HDR_FAIL;
ImportNcch0Data(cihdr,set);
SetInitialData(cihdr,set);
SetNcchHeader(cihdr,set);
SetCardSeedData(cihdr,set);
if(dcihdr)
SetDevCardInfo(dcihdr,set);
@@ -49,6 +49,8 @@ void InitCardInfoHdr(cardinfo_hdr **cihdr, devcardinfo_hdr **dcihdr, cci_setting
else
*dcihdr = NULL;
//clrmem(set->headers.cardinfohdr.buffer, set->headers.cardinfohdr.size);
return;
}
@@ -174,7 +176,7 @@ int SetCardInfoNotes(cardinfo_hdr *hdr, cci_settings *set)
return 0;
}
void ImportNcch0Data(cardinfo_hdr *hdr, cci_settings *set)
void SetNcchHeader(cardinfo_hdr *hdr, cci_settings *set)
{
u8 *ncch;
ncch_hdr *ncchHdr;
@@ -182,19 +184,31 @@ void ImportNcch0Data(cardinfo_hdr *hdr, cci_settings *set)
ncch = set->content.data + set->content.dOffset[0];
ncchHdr = (ncch_hdr*)ncch;
memcpy(hdr->ncch0TitleId,ncchHdr->titleId,8);
memcpy(hdr->ncch0Hdr,GetNcchHdrData(ncchHdr),GetNcchHdrDataLen(ncchHdr));
return;
}
void SetInitialData(cardinfo_hdr *hdr, cci_settings *set)
void SetCardSeedData(cardinfo_hdr *hdr, cci_settings *set)
{
clrmem(hdr->initialData,0x30);
if(set->options.useExternalSdkCardInfo)
memcpy(hdr->initialData,(u8*)stock_initial_data,0x30);
else
rndset(hdr->initialData,0x2c);
u8 *ncch;
ncch_hdr *ncchHdr;
ncch = set->content.data + set->content.dOffset[0];
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;
}
+7 -13
View File
@@ -17,10 +17,11 @@ typedef struct
u8 writableAddress[4];
u8 cardInfoBitmask[4];
cardinfo_notes notes;
u8 ncch0TitleId[8];
u8 reserved0[8];
u8 initialData[0x30];
u8 reserved1[0xc0];
u8 cardSeedKeyY[0x10];
u8 encCardSeed[0x10];
u8 cardSeedMac[0x10];
u8 cardSeedNonce[0xc];
u8 reserved1[0xc4];
u8 ncch0Hdr[0x100];
} cardinfo_hdr;
@@ -31,16 +32,9 @@ typedef struct
u8 cardDeviceReserved2[0xf0];
} devcardinfo_hdr;
static const u8 stock_initial_data[0x30] =
static const u8 stock_card_seed_mac[0x30] =
{
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
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
0xAD, 0x88, 0xAC, 0x41, 0xA2, 0xB1, 0x5E, 0x8F, 0x66, 0x9C, 0x97, 0xE5, 0xE1, 0x5E, 0xA3, 0xEB
};
static const u8 stock_title_key[0x10] =