int sceUtilsBufferCopyWithRange(void* outbuff, int outsize, void* inbuff, int insize, int cmd) { switch(cmd) { case KIRK_CMD_DECRYPT_PRIVATE: if(insize % 16) return SUBCWR_NOT_16_ALGINED; int ret = kirk_CMD1(outbuff, inbuff, insize, 1); if(ret == KIRK_HEADER_HASH_INVALID) return SUBCWR_HEADER_HASH_INVALID; return ret; break; case KIRK_CMD_ENCRYPT_IV_0: return kirk_CMD4(outbuff, inbuff, insize); break; case KIRK_CMD_DECRYPT_IV_0: return kirk_CMD7(outbuff, inbuff, insize); break; case KIRK_CMD_PRIV_SIG_CHECK: return kirk_CMD10(inbuff, insize); break; case KIRK_CMD_SHA1_HASH: return kirk_CMD11(outbuff, inbuff, insize); break; } return -1; }
void test_cmd7() { int result; u8 src[0x20 + 0x14] = { 0 }; u8 dst[0x20] = { 0 }; printf("CMD7 test...\n"); *(u32 *)(&src[0x00]) = 5 ; // Mode *(u32 *)(&src[0x0C]) = 0x03; // KeySeed *(u32 *)(&src[0x10]) = 1; // DataSize result = kirk_CMD7(dst, (void*)src, 0x20); hex_dump("CMD 7 in", src, 0x20 + 0x14); hex_dump("CMD 7 out", dst, 0x20); printf("CMD 7 result: %d\n", result); }