Пример #1
0
s32 Title_GetTitleKey(tik *p_tik, u8 *key)
{
	static u8 iv[16]  ATTRIBUTE_ALIGN(32);
	static u8 enc[16] ATTRIBUTE_ALIGN(32);
	static u8 dec[16] ATTRIBUTE_ALIGN(32);

	s32 ret;

	/* Set IV */
	memset(iv, 0, sizeof(iv));
	memcpy(iv, &p_tik->titleid, sizeof(u64));

	/* Set encrypted key */
	memset(enc, 0, sizeof(enc));
	memcpy(enc, &p_tik->cipher_title_key, sizeof(enc));

	/* Clear output buffer */
	memset(dec, 0, sizeof(dec));

	/* Decrypt title key */
	ret = ES_Decrypt(ES_KEY_COMMON, iv, enc, sizeof(enc), dec);
	if (ret < 0)
		return ret;

	/* Copy key */
	memcpy(key, dec, sizeof(dec));

	return 0;
}
Пример #2
0
//---------------------------------------------------------------------------------
int get_title_key(signed_blob *s_tik, u8 *key){
//---------------------------------------------------------------------------------
  static u8 iv[16] ATTRIBUTE_ALIGN(0x20);
  static u8 keyin[16] ATTRIBUTE_ALIGN(0x20);
  static u8 keyout[16] ATTRIBUTE_ALIGN(0x20);
  int retval;

  const tik *p_tik;
  p_tik = (tik*)SIGNATURE_PAYLOAD(s_tik);
  u8 *enc_key = (u8 *)&p_tik->cipher_title_key;
  memcpy(keyin, enc_key, sizeof keyin);
  memset(keyout, 0, sizeof keyout);
  memset(iv, 0, sizeof iv);
  memcpy(iv, &p_tik->titleid, sizeof p_tik->titleid);
  
  retval = ES_Decrypt(ES_KEY_COMMON, iv, keyin, sizeof keyin, keyout);
  if (retval){
	//  printf("ES_Decrypt returned %d\n", retval);
  }
  memcpy(key, keyout, sizeof keyout);
  return retval;
}