diff --git a/source/fs/filetype.c b/source/fs/filetype.c index c2a7358..0b5e62c 100644 --- a/source/fs/filetype.c +++ b/source/fs/filetype.c @@ -45,7 +45,9 @@ u32 IdentifyFileType(const char* path) { } else if (memcmp(header, romfs_magic, sizeof(romfs_magic)) == 0) { return GAME_ROMFS; // RomFS file (check could be better) } else if (strncmp(TMD_ISSUER, (char*) (header + 0x140), 0x40) == 0) { - if (fsize >= TMD_SIZE_N(getbe16(header + 0x1DE))) + if (fsize == TMD_SIZE_N(getbe16(header + 0x1DE)) + TMD_CDNCERT_SIZE) + return GAME_TMD | FLAG_NUSCDN; // TMD file from NUS/CDN + else if (fsize >= TMD_SIZE_N(getbe16(header + 0x1DE))) return GAME_TMD; // TMD file } else if (ValidateFirmHeader((FirmHeader*) data, fsize) == 0) { return SYS_FIRM; // FIRM file diff --git a/source/fs/filetype.h b/source/fs/filetype.h index a22f7f2..0b30245 100644 --- a/source/fs/filetype.h +++ b/source/fs/filetype.h @@ -16,6 +16,7 @@ #define BIN_LAUNCH (1<<11) #define TYPE_BASE 0x00FFFFFF // 24 bit reserved for base types +#define FLAG_NUSCDN (1<<30) #define FLAG_CXI (1<<31) #define FTYPE_MOUNTABLE(tp) (tp&(IMG_FAT|IMG_NAND|GAME_CIA|GAME_NCSD|GAME_NCCH|GAME_EXEFS|GAME_ROMFS|SYS_FIRM)) diff --git a/source/game/ticket.c b/source/game/ticket.c index 63f9ea6..609f1d8 100644 --- a/source/game/ticket.c +++ b/source/game/ticket.c @@ -65,7 +65,7 @@ u32 GetTitleKey(u8* titlekey, Ticket* ticket) { memcpy(tik.titlekey, ticket->titlekey, 16); tik.commonkey_idx = ticket->commonkey_idx; - if (CryptTitleKey(&tik, false) != 0) return 0; + if (CryptTitleKey(&tik, false) != 0) return 1; memcpy(titlekey, tik.titlekey, 16); return 0; } diff --git a/source/game/ticket.h b/source/game/ticket.h index 1b672e3..bf2c517 100644 --- a/source/game/ticket.h +++ b/source/game/ticket.h @@ -3,6 +3,7 @@ #include "common.h" #define TICKET_SIZE sizeof(Ticket) +#define TICKET_CDNCERT_SIZE 0x700 #define TICKET_ISSUER "Root-CA00000003-XS0000000c" #define TICKET_ISSUER_DEV "Root-CA00000004-XS00000009" diff --git a/source/game/tmd.h b/source/game/tmd.h index edcf209..8678f4e 100644 --- a/source/game/tmd.h +++ b/source/game/tmd.h @@ -7,6 +7,7 @@ #define TMD_SIZE_MIN sizeof(TitleMetaData) #define TMD_SIZE_MAX (sizeof(TitleMetaData) + (TMD_MAX_CONTENTS*sizeof(TmdContentChunk))) #define TMD_SIZE_N(n) (sizeof(TitleMetaData) + (n*sizeof(TmdContentChunk))) +#define TMD_CDNCERT_SIZE 0x700 #define TMD_ISSUER "Root-CA00000003-CP0000000b" #define TMD_SIG_TYPE 0x00, 0x01, 0x00, 0x04 // RSA_2048 SHA256