Exemplo n.º 1
0
void _KEY1::applyKeycode(u8 modulo)
{
	encrypt(&keyCode[1]);
	encrypt(&keyCode[0]);
	
	u32 scratch[2] = {0};

	for (u32 i = 0; i <= 0x44; i += 4)			// xor with reversed byte-order (bswap)
		keyBuf[DWNUM(i)] ^= bswap32(keyCode[DWNUM(i % modulo)]);

	for (u32 i = 0; i <= 0x1040; i += 8)
	{
		encrypt(scratch);						// encrypt S (64bit) by keybuf
		keyBuf[DWNUM(i)] = scratch[1];			// write S to keybuf (first upper 32bit)
		keyBuf[DWNUM(i+4)] = scratch[0];		// write S to keybuf (then lower 32bit)
	}
}
Exemplo n.º 2
0
void _KEY1::decrypt(u32 *ptr)
{
	u32 y = ptr[0];
	u32 x = ptr[1];

	for (u32 i = 0x11; i >= 0x02; i--)
	{
		u32 z = keyBuf[i] ^ x;
		x = keyBuf[DWNUM(0x048 + (((z >> 24) & 0xFF) << 2))];
		x = keyBuf[DWNUM(0x448 + (((z >> 16) & 0xFF) << 2))] + x;
		x = keyBuf[DWNUM(0x848 + (((z >>  8) & 0xFF) << 2))] ^ x;
		x = keyBuf[DWNUM(0xC48 + (((z >>  0) & 0xFF) << 2))] + x;
		x = y ^ x;
		y = z;
	}
	ptr[0] = x ^ keyBuf[DWNUM(0x04)];
	ptr[1] = y ^ keyBuf[DWNUM(0x00)];
}
Exemplo n.º 3
0
void _KEY1::encrypt(u32 *ptr)
{
	u32 y = ptr[0];
	u32 x = ptr[1];

	for (u32 i = 0x00; i <= 0x0F; i++)
	{
		u32 z = keyBuf[i] ^ x;
		x = keyBuf[DWNUM(0x048 + (((z >> 24) & 0xFF) << 2))];
		x = keyBuf[DWNUM(0x448 + (((z >> 16) & 0xFF) << 2))] + x;
		x = keyBuf[DWNUM(0x848 + (((z >>  8) & 0xFF) << 2))] ^ x;
		x = keyBuf[DWNUM(0xC48 + (((z >>  0) & 0xFF) << 2))] + x;
		x = y ^ x;
		y = z;
	}

	ptr[0] = x ^ keyBuf[DWNUM(0x40)];
	ptr[1] = y ^ keyBuf[DWNUM(0x44)];
}
Exemplo n.º 4
0
$NetBSD$

Relocated patch for src/NDSSystem.cpp to here. Source file changed.

--- src/firmware.cpp.orig	2011-01-27 10:27:00.000000000 +0000
+++ src/firmware.cpp
@@ -74,7 +74,9 @@ void CFIRMWARE::crypt64BitDown(u32 *ptr)
 	ptr[1] = (Y ^ keyBuf[DWNUM(0x00)]);
 }
 
+#ifndef bswap32
 #define bswap32(val) (((val & 0x000000FF) << 24) | ((val & 0x0000FF00) << 8) | ((val & 0x00FF0000) >> 8) | ((val & 0xFF000000) >> 24))
+#endif
 void CFIRMWARE::applyKeycode(u32 modulo)
 {
 	crypt64BitUp(&keyCode[1]);