mirror of
https://github.com/d0k3/GodMode9.git
synced 2025-06-26 13:42:47 +00:00
Fix all occurences of NAND_BUFFER & SDCRYPT_BUFFER
This commit is contained in:
parent
d731a5960f
commit
7927c742c6
@ -49,15 +49,6 @@
|
||||
// used in several places
|
||||
#define STD_BUFFER_SIZE 0x100000 // must be a multiple of 0x200
|
||||
|
||||
// buffer area defines (in use by godmode.c)
|
||||
#define DIR_BUFFER (0x20000000)
|
||||
#define DIR_BUFFER_SIZE (0x100000)
|
||||
// buffer area defines (in use by nand.c)
|
||||
#define NAND_BUFFER ((u8*)0x20100000)
|
||||
#define NAND_BUFFER_SIZE (0x100000) // must be multiple of 0x200
|
||||
// buffer area defines (in use by sddata.c)
|
||||
#define SDCRYPT_BUFFER ((u8*)0x20200000)
|
||||
#define SDCRYPT_BUFFER_SIZE (0x100000)
|
||||
// buffer area defines (in use by scripting.c)
|
||||
#define SCRIPT_BUFFER ((u8*)0x20300000)
|
||||
#define SCRIPT_BUFFER_SIZE (0x100000)
|
||||
|
@ -644,7 +644,10 @@ bool PathMoveCopy(const char* dest, const char* orig, u32* flags, bool move) {
|
||||
|
||||
// setup buffer
|
||||
u8* buffer = (u8*) malloc(STD_BUFFER_SIZE);
|
||||
if (!buffer) return false;
|
||||
if (!buffer) {
|
||||
ShowPrompt(false, "Out of memory.");
|
||||
return false;
|
||||
}
|
||||
|
||||
// actual move / copy operation
|
||||
bool same_drv = (strncasecmp(lorig, ldest, 2) == 0);
|
||||
@ -680,7 +683,10 @@ bool PathMoveCopy(const char* dest, const char* orig, u32* flags, bool move) {
|
||||
|
||||
// setup buffer
|
||||
u8* buffer = (u8*) malloc(STD_BUFFER_SIZE);
|
||||
if (!buffer) return false;
|
||||
if (!buffer) {
|
||||
ShowPrompt(false, "Out of memory.");
|
||||
return false;
|
||||
}
|
||||
|
||||
// actual virtual copy operation
|
||||
if (force_unmount) DismountDriveType(DriveType(ldest)&(DRV_SYSNAND|DRV_EMUNAND|DRV_IMAGE));
|
||||
|
@ -192,19 +192,25 @@ FRESULT fx_write (FIL* fp, const void* buff, UINT btw, UINT* bw) {
|
||||
FilCryptInfo* info = fx_find_cryptinfo(fp);
|
||||
FSIZE_t off = f_tell(fp);
|
||||
FRESULT res = FR_OK;
|
||||
|
||||
if (info && info->fptr) {
|
||||
if (memcmp(info->ctr, DSIWARE_MAGIC, 16) == 0) return FR_DENIED;
|
||||
void* crypt_buff = (void*) malloc(min(btw, STD_BUFFER_SIZE));
|
||||
if (!crypt_buff) return FR_DENIED;
|
||||
|
||||
setup_aeskeyY(0x34, info->keyy);
|
||||
use_aeskey(0x34);
|
||||
*bw = 0;
|
||||
for (UINT p = 0; (p < btw) && (res == FR_OK); p += SDCRYPT_BUFFER_SIZE) {
|
||||
UINT pcount = min(SDCRYPT_BUFFER_SIZE, (btw - p));
|
||||
for (UINT p = 0; (p < btw) && (res == FR_OK); p += STD_BUFFER_SIZE) {
|
||||
UINT pcount = min(STD_BUFFER_SIZE, (btw - p));
|
||||
UINT bwl = 0;
|
||||
memcpy(SDCRYPT_BUFFER, (u8*) buff + p, pcount);
|
||||
ctr_decrypt_byte(SDCRYPT_BUFFER, SDCRYPT_BUFFER, pcount, off + p, AES_CNT_CTRNAND_MODE, info->ctr);
|
||||
res = f_write(fp, (const void*) SDCRYPT_BUFFER, pcount, &bwl);
|
||||
memcpy(crypt_buff, (u8*) buff + p, pcount);
|
||||
ctr_decrypt_byte(crypt_buff, crypt_buff, pcount, off + p, AES_CNT_CTRNAND_MODE, info->ctr);
|
||||
res = f_write(fp, (const void*) crypt_buff, pcount, &bwl);
|
||||
*bw += bwl;
|
||||
}
|
||||
|
||||
free(crypt_buff);
|
||||
} else res = f_write(fp, buff, btw, bw);
|
||||
return res;
|
||||
}
|
||||
|
@ -352,32 +352,32 @@ int ReadNandSectors(void* buffer, u32 sector, u32 count, u32 keyslot, u32 nand_s
|
||||
|
||||
int WriteNandSectors(const void* buffer, u32 sector, u32 count, u32 keyslot, u32 nand_dst)
|
||||
{
|
||||
u8* buffer8 = (u8*) buffer;
|
||||
// buffer must not be changed, so this is a little complicated
|
||||
for (u32 s = 0; s < count; s += (NAND_BUFFER_SIZE / 0x200)) {
|
||||
u32 pcount = min((NAND_BUFFER_SIZE/0x200), (count - s));
|
||||
memcpy(NAND_BUFFER, buffer8 + (s*0x200), pcount * 0x200);
|
||||
if ((keyslot == 0x11) && (sector == SECTOR_SECRET)) CryptSector0x96(NAND_BUFFER, true);
|
||||
else if (keyslot < 0x40) CryptNand(NAND_BUFFER, sector + s, pcount, keyslot);
|
||||
void* nand_buffer = (void*) malloc(min(STD_BUFFER_SIZE, count * 0x200));
|
||||
if (!nand_buffer) return -1;
|
||||
int errorcode = 0;
|
||||
|
||||
for (u32 s = 0; s < count; s += (STD_BUFFER_SIZE / 0x200)) {
|
||||
u32 pcount = min((STD_BUFFER_SIZE/0x200), (count - s));
|
||||
memcpy(nand_buffer, ((u8*) buffer) + (s*0x200), pcount * 0x200);
|
||||
if ((keyslot == 0x11) && (sector == SECTOR_SECRET)) CryptSector0x96(nand_buffer, true);
|
||||
else if (keyslot < 0x40) CryptNand(nand_buffer, sector + s, pcount, keyslot);
|
||||
if (nand_dst == NAND_EMUNAND) {
|
||||
int errorcode = 0;
|
||||
if ((sector + s == 0) && (emunand_base_sector % 0x200000 == 0)) { // GW EmuNAND header handling
|
||||
errorcode = sdmmc_sdcard_writesectors(emunand_base_sector + getMMCDevice(0)->total_size, 1, NAND_BUFFER);
|
||||
errorcode = (!errorcode && (pcount > 1)) ? sdmmc_sdcard_writesectors(emunand_base_sector + 1, pcount - 1, NAND_BUFFER + 0x200) : errorcode;
|
||||
} else errorcode = sdmmc_sdcard_writesectors(emunand_base_sector + sector + s, pcount, NAND_BUFFER);
|
||||
if (errorcode) return errorcode;
|
||||
errorcode = sdmmc_sdcard_writesectors(emunand_base_sector + getMMCDevice(0)->total_size, 1, nand_buffer);
|
||||
if (!errorcode && (pcount > 1)) errorcode = sdmmc_sdcard_writesectors(emunand_base_sector + 1, pcount - 1, ((u8*) nand_buffer) + 0x200);
|
||||
} else errorcode = sdmmc_sdcard_writesectors(emunand_base_sector + sector + s, pcount, nand_buffer);
|
||||
} else if (nand_dst == NAND_IMGNAND) {
|
||||
int errorcode = WriteImageSectors(NAND_BUFFER, sector + s, pcount);
|
||||
if (errorcode) return errorcode;
|
||||
errorcode = WriteImageSectors(nand_buffer, sector + s, pcount);
|
||||
} else if (nand_dst == NAND_SYSNAND) {
|
||||
int errorcode = sdmmc_nand_writesectors(sector + s, pcount, NAND_BUFFER);
|
||||
if (errorcode) return errorcode;
|
||||
errorcode = sdmmc_nand_writesectors(sector + s, pcount, nand_buffer);
|
||||
} else {
|
||||
return -1;
|
||||
errorcode = -1;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
free(nand_buffer);
|
||||
return errorcode;
|
||||
}
|
||||
|
||||
u32 ValidateSecretSector(u8* sector)
|
||||
|
Loading…
x
Reference in New Issue
Block a user