[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 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
View File
@@ -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] =