void sce_encrypt_npdrm(u8 *ptr, struct keylist *klist, u8 *klicensee) { u32 meta_offset; u8 d_klic[0x10]; u8 iv[0x10]; meta_offset = be32(ptr + 0x0c); aes128(klist->klic, klicensee, d_klic); // iv is 0 memset(iv, 0, sizeof iv); aes128cbc_enc(d_klic, iv, ptr + meta_offset + 0x20, 0x40, ptr + meta_offset + 0x20); }
static void paged_file_crypt_internal_encrypt (PagedFile *f) { if (f->size > 0) { if (f->crypt == PAGED_FILE_CRYPT_AES_128_CBC) { aes128cbc_enc (f->key, f->iv, f->ptr, f->size, f->ptr); if (f->size >= 0x10) memcpy (f->iv, f->ptr + f->size - 0x10, 0x10); } else if (f->crypt == PAGED_FILE_CRYPT_AES_256_CBC) { aes256cbc_enc (f->key, f->iv, f->ptr, f->size, f->ptr); if (f->size >= 0x10) memcpy (f->iv, f->ptr + f->size - 0x10, 0x10); } else if (f->crypt == PAGED_FILE_CRYPT_AES_128_CTR) { aes128ctr (f->key, f->iv, f->ptr, f->size, f->ptr); } else if (f->crypt == PAGED_FILE_CRYPT_CUSTOM) { f->crypt_cb (f, PAGED_FILE_CRYPT_ENCRYPT, f->ptr, f->size, f->crypt_cb_data); } } }