rpcs3/scetool/keys.h

132 lines
2.6 KiB
C

/*
* Copyright (c) 2011-2013 by naehrwert
* This file is released under the GPLv2.
*/
#ifndef _KEYS_H_
#define _KEYS_H_
#include "types.h"
#include "sce.h"
#define KEYBITS(klen) BYTES2BITS(klen)
#define KEYTYPE_SELF 1
#define KEYTYPE_RVK 2
#define KEYTYPE_PKG 3
#define KEYTYPE_SPP 4
#define KEYTYPE_OTHER 5
/*! Flag to use VSH curve. */
#define USE_VSH_CURVE 0x40
/*! Length of whole curves file. */
#define CURVES_LENGTH 0x1E40
#define CTYPE_MIN 0
#define CTYPE_MAX 63
/*! Length of the whole VSH curves file. */
#define VSH_CURVES_LENGTH 0x168
#define VSH_CTYPE_MIN 0
#define VSH_CTYPE_MAX 2
/*! Length of the idps, act.dat, .rif and .rap files. */
#define IDPS_LENGTH 0x10
#define ACT_DAT_LENGTH 0x1038
#define RIF_LENGTH 0x98
#define RAP_LENGTH 0x10
/*! IDPS, RIF, act.dat key lengths. */
#define IDPS_KEYBITS 128
#define ACT_DAT_KEYBITS 128
#define RIF_KEYBITS 128
#define RAP_KEYBITS 128
/*! Keyset. */
typedef struct _keyset
{
/*! Name. */
scetool::s8 *name;
/*! Type. */
scetool::u32 type;
/*! Key revision. */
scetool::u16 key_revision;
/*! Version. */
scetool::u64 version;
/*! SELF type. */
scetool::u32 self_type;
/*! Key length. */
scetool::u32 erklen;
/*! Key. */
scetool::u8 *erk;
/*! IV length. */
scetool::u32 rivlen;
/*! IV. */
scetool::u8 *riv;
/*! Pub. */
scetool::u8 *pub;
/*! Priv. */
scetool::u8 *priv;
/*! Curve type. */
scetool::u8 ctype;
} keyset_t;
/*! Curve entry. */
typedef struct _curve
{
scetool::u8 p[20];
scetool::u8 a[20];
scetool::u8 b[20];
scetool::u8 N[21];
scetool::u8 Gx[20];
scetool::u8 Gy[20];
} curve_t;
/*! VSH Curve entry. */
typedef struct _vsh_curve
{
scetool::u8 a[20];
scetool::u8 b[20];
scetool::u8 N[20];
scetool::u8 p[20];
scetool::u8 Gx[20];
scetool::u8 Gy[20];
} vsh_curve_t;
/*! act.dat. */
typedef struct _act_dat
{
scetool::u8 account_info[16];
scetool::u8 primary_key_table[2048];
scetool::u8 secondary_key_table[2048];
scetool::u8 signature[40];
} act_dat_t;
/*! RIF. */
typedef struct _rif
{
scetool::u8 account_info[16];
scetool::u8 content_id[48];
scetool::u8 act_key_index[16];
scetool::u8 klicensee[16];
scetool::u64 timestamp;
scetool::u64 zero;
scetool::u8 signature[40];
} rif_t;
BOOL keys_load(const scetool::s8 *kfile);
keyset_t *keyset_find(sce_buffer_ctxt_t *ctxt);
keyset_t *keyset_find_by_name(const scetool::s8 *name);
BOOL curves_load(const scetool::s8 *cfile);
curve_t *curve_find(scetool::u8 ctype);
BOOL vsh_curves_load(const scetool::s8 *cfile);
curve_t *vsh_curve_find(scetool::u8 ctype);
BOOL klicensee_by_content_id(const scetool::s8 *content_id, scetool::u8 *klicensee);
keyset_t *keyset_from_buffer(scetool::u8 *keyset);
#endif