Example #1
0
int sce_encrypt_header(u8 *ptr, struct key *k)
{
	u32 meta_offset;
	u32 meta_len;
	u64 header_len;
	u8 iv[16];

	meta_offset = be32(ptr + 0x0c);
	header_len  = be64(ptr + 0x10);
	meta_len = header_len - meta_offset;

	memcpy(iv, ptr + meta_offset + 0x40, 0x10);
	aes128ctr(ptr + meta_offset + 0x20,
		  iv,
		  ptr + meta_offset + 0x60,
		  meta_len - 0x60,
		  ptr + meta_offset + 0x60);

	aes256cbc_enc(k->key, k->iv,
	              ptr + meta_offset + 0x20,
		      0x40,
		      ptr + meta_offset + 0x20);


	return 0;
}
Example #2
0
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);
    }
  }
}