Files
Project_CTR/makerom/keyset.h
T

103 lines
1.6 KiB
C

#pragma once
#include "desc/desc.h"
typedef enum
{
AES_128_KEY_SIZE = 16,
MAX_CMN_KEY = 0x05,
MAX_NCCH_KEYX = MAX_U8
} keydata_limits;
typedef enum
{
KEYSET_ERROR = -10,
} keyset_errors;
typedef enum
{
RSA_1024_KEY_SIZE = 0x80,
RSA_2048_KEY_SIZE = 0x100,
RSA_4096_KEY_SIZE = 0x200,
} rsa_keysize;
typedef enum
{
pki_TEST,
pki_BETA, // Not used, but is here for completeness
pki_DEVELOPMENT,
pki_PRODUCTION,
pki_CUSTOM,
} pki_keyset;
// Structs
typedef struct
{
u8 *pub;
u8 *pvt;
} rsa2048_key;
typedef struct
{
pki_keyset keyset;
bool keysetLoaded;
bool dumpkeys;
bool ignore_sign;
struct
{
u32 presetType;
u32 targetFirmware;
} accessDescSign;
struct
{
// CIA
u8 **commonKey;
u16 currentCommonKey;
// NCCH Keys
u8 *normalKey;
u8 *systemFixedKey;
u8 **ncchKeyX;
u8 *ncchKey0;
u8 *ncchKey1;
} aes;
struct
{
// CIA RSA
rsa2048_key cp;
rsa2048_key xs;
// CCI/CFA
rsa2048_key cciCfa;
// CXI
rsa2048_key acex;
rsa2048_key cxi;
} rsa;
struct
{
// CIA
u8 *caCert;
u8 *xsCert;
u8 *cpCert;
} certs;
} keys_struct;
// Public Prototypes
void InitKeys(keys_struct *keys);
int SetKeys(keys_struct *keys);
void FreeKeys(keys_struct *keys);
int SetCommonKey(keys_struct *keys, const u8 *key, u8 Index);
int SetCurrentCommonKey(keys_struct *keys, u8 Index);
int SetNormalKey(keys_struct *keys, const u8 *key);
int SetSystemFixedKey(keys_struct *keys, const u8 *key);
void Rsa2048Key_Alloc(rsa2048_key* key);
void Rsa2048Key_Free(rsa2048_key* key);
void Rsa2048Key_Set(rsa2048_key* key, const u8* pvt, const u8* pub);
bool Rsa2048Key_CanSign(const rsa2048_key* key);