Beispiel #1
0
static void
paged_file_crypt_internal_decrypt (PagedFile *f)
{
  if (f->size - f->pos > 0) {
    if (f->crypt == PAGED_FILE_CRYPT_AES_128_CBC) {
      u8 iv[0x10];

      memcpy (iv, f->iv, 0x10);
      if ((f->size - f->pos) >= 0x10)
        memcpy (f->iv, f->ptr + f->size - 0x10, 0x10);
      aes128cbc (f->key, iv, f->ptr + f->pos, f->size - f->pos,
          f->ptr + f->pos);
    } else if (f->crypt == PAGED_FILE_CRYPT_AES_256_CBC) {
      u8 iv[0x10];

      memcpy (iv, f->iv, 0x10);
      if ((f->size - f->pos) >= 0x10)
        memcpy (f->iv, f->ptr + f->size - 0x10, 0x10);
      aes256cbc (f->key, iv, f->ptr + f->pos, f->size - f->pos, f->ptr + f->pos);
    } else if (f->crypt == PAGED_FILE_CRYPT_AES_128_CTR) {
      aes128ctr (f->key, f->iv, f->ptr + f->pos, f->size - f->pos, f->ptr + f->pos);
    } else if (f->crypt == PAGED_FILE_CRYPT_CUSTOM) {
      f->crypt_cb (f, PAGED_FILE_CRYPT_DECRYPT, f->ptr + f->pos,
          f->size - f->pos, f->crypt_cb_data);
    }
  }
}
Beispiel #2
0
static void
decrypt_npdrm(uint8_t *metadata, struct keylist *klist, struct key *klicensee)
{
    struct key d_klic;

    // iv is 0
    memset(&d_klic, 0, sizeof(struct key));
    aes128(klist->klic->key, klicensee->key, d_klic.key);

    aes128cbc(d_klic.key, d_klic.iv, metadata, 0x40, metadata);
}
Beispiel #3
0
static void
decrypt_npdrm(uint8_t *metadata, struct keylist *klist, u8 *klicensee)
{
    u8 d_klic[0x10];
    u8 iv[0x10];

    aes128(klist->klic, klicensee, d_klic);

    // iv is 0
    memset(iv, 0, sizeof iv);
    aes128cbc(d_klic, iv, metadata, 0x40, metadata);
}
void sce_decrypt_npdrm(u8 *ptr, struct keylist *klist, struct key *klicensee)
{
	u32 meta_offset;
    struct key d_klic;

	meta_offset = be32(ptr + 0x0c);

    // iv is 0
    memset(&d_klic, 0, sizeof(struct key));
    aes128(klist->klic->key, klicensee->key, d_klic.key);

    aes128cbc(d_klic.key, d_klic.iv, ptr + meta_offset + 0x20, 0x40, ptr + meta_offset + 0x20);
}
Beispiel #5
0
void sce_decrypt_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(d_klic, iv, ptr + meta_offset + 0x20, 0x40, ptr + meta_offset + 0x20);
}