1
0
Fork 0
mirror of https://github.com/DarkMatterCore/nxdumptool.git synced 2024-11-26 12:12:02 +00:00

Remove wrong references to ECC data in gamecards.

This commit is contained in:
Pablo Curiel 2020-07-17 14:42:48 -04:00
parent 6bee2c5d20
commit cddf57363c
2 changed files with 8 additions and 7 deletions

View file

@ -28,8 +28,8 @@
#define GAMECARD_ACCESS_WAIT_TIME 3 /* Seconds. */ #define GAMECARD_ACCESS_WAIT_TIME 3 /* Seconds. */
#define GAMECARD_ECC_BLOCK_SIZE 0x200 #define GAMECARD_UNUSED_AREA_BLOCK_SIZE 0x24
#define GAMECARD_ECC_DATA_SIZE 0x24 #define GAMECARD_UNUSED_AREA_SIZE(x) (((x) / GAMECARD_MEDIA_UNIT_SIZE) * GAMECARD_UNUSED_AREA_BLOCK_SIZE)
#define GAMECARD_STORAGE_AREA_NAME(x) ((x) == GameCardStorageArea_Normal ? "normal" : ((x) == GameCardStorageArea_Secure ? "secure" : "none")) #define GAMECARD_STORAGE_AREA_NAME(x) ((x) == GameCardStorageArea_Normal ? "normal" : ((x) == GameCardStorageArea_Secure ? "secure" : "none"))
@ -323,7 +323,7 @@ bool gamecardGetTrimmedSize(u64 *out)
{ {
mutexLock(&g_gamecardMutex); mutexLock(&g_gamecardMutex);
bool ret = (g_gameCardInserted && g_gameCardInfoLoaded && out); bool ret = (g_gameCardInserted && g_gameCardInfoLoaded && out);
if (ret) *out = (sizeof(GameCardHeader) + ((u64)g_gameCardHeader.valid_data_end_address * GAMECARD_MEDIA_UNIT_SIZE)); if (ret) *out = (sizeof(GameCardHeader) + GAMECARD_MEDIA_UNIT_OFFSET(g_gameCardHeader.valid_data_end_address));
mutexUnlock(&g_gamecardMutex); mutexUnlock(&g_gamecardMutex);
return ret; return ret;
} }
@ -619,7 +619,7 @@ static void gamecardLoadInfo(void)
{ {
/* The total size for the secure storage area is maxed out under SX OS. */ /* The total size for the secure storage area is maxed out under SX OS. */
/* Let's try to calculate it manually. */ /* Let's try to calculate it manually. */
g_gameCardStorageSecureAreaSize = ((g_gameCardCapacity - ((g_gameCardCapacity / GAMECARD_ECC_BLOCK_SIZE) * GAMECARD_ECC_DATA_SIZE)) - g_gameCardStorageNormalAreaSize); g_gameCardStorageSecureAreaSize = (g_gameCardCapacity - (g_gameCardStorageNormalAreaSize + GAMECARD_UNUSED_AREA_SIZE(g_gameCardCapacity)));
} }
/* Allocate memory for the root hash FS header. */ /* Allocate memory for the root hash FS header. */

View file

@ -29,6 +29,7 @@
#define GAMECARD_CERT_MAGIC 0x43455254 /* "CERT". */ #define GAMECARD_CERT_MAGIC 0x43455254 /* "CERT". */
#define GAMECARD_MEDIA_UNIT_SIZE 0x200 #define GAMECARD_MEDIA_UNIT_SIZE 0x200
#define GAMECARD_MEDIA_UNIT_OFFSET(x) ((u64)(x) * GAMECARD_MEDIA_UNIT_SIZE)
#define GAMECARD_UPDATE_TID (u64)0x0100000000000816 #define GAMECARD_UPDATE_TID (u64)0x0100000000000816
@ -57,10 +58,10 @@ typedef struct {
u8 reserved[0xCF0]; u8 reserved[0xCF0];
} GameCardTitleKey; } GameCardTitleKey;
/// Encrypted using RSA-2048-OAEP. Assumed to be all zeroes in retail gamecards. /// Encrypted using RSA-2048-OAEP and a private OAEP key from AuthoringTool. Assumed to be all zeroes in retail gamecards.
typedef struct { typedef struct {
u8 titlekey_encryption_key[0x10]; ///< Used as the AES-128-CTR key for the `GameCardTitleKey` section. u8 titlekey_encryption_key[0x10]; ///< Used as the AES-128-CTR key for the `GameCardTitleKey` section. Randomly generated during XCI creation by AuthoringTool.
u8 titlekey_encryption_iv[0x10]; ///< Used as the AES-128-CTR IV/counter for the `GameCardTitleKey` section. u8 titlekey_encryption_iv[0x10]; ///< Used as the AES-128-CTR IV/counter for the `GameCardTitleKey` section. Randomly generated during XCI creation by AuthoringTool.
u8 reserved[0xE0]; u8 reserved[0xE0];
} GameCardTitleKeyEncryption; } GameCardTitleKeyEncryption;