From 3702b58db37d8a471d304c9be06bbb636a563628 Mon Sep 17 00:00:00 2001 From: jakcron Date: Sat, 24 Oct 2015 01:32:08 +0800 Subject: [PATCH] [makerom] Cleaned keyset.c --- makerom/keyset.c | 149 ++++++++++++++++++++++++----------------------- makerom/keyset.h | 8 +-- makerom/utils.c | 16 +---- makerom/utils.h | 3 +- 4 files changed, 81 insertions(+), 95 deletions(-) diff --git a/makerom/keyset.c b/makerom/keyset.c index a270d38..cdb32a6 100644 --- a/makerom/keyset.c +++ b/makerom/keyset.c @@ -6,24 +6,23 @@ #include "pki/dev.h" // Development PKI // Private Prototypes -int SetRsaKeySet(u8 **PrivDest, u8 *PrivSource, u8 **PubDest, u8 *PubSource); -int SetunFixedKey(keys_struct *keys, u8 *unFixedKey); +int SetRsaKeySet(u8 **priv_exp_dst, const u8 *priv_exp_src, u8 **modulus_dst, const u8 *modulus_src); void InitCommonKeySlots(keys_struct *keys); void InitNcchKeyXSlots(keys_struct *keys); -int SetNcchKeyX(keys_struct *keys, u8 *keyX, u8 index); +int SetNcchKeyX(keys_struct *keys, const u8 *keyX, u8 index); -FILE* keyset_OpenFile(char *dir, char *name, bool FileRequired); void keysetOpenError(char *file); +FILE* keyset_OpenFile(char *dir, char *name, bool FileRequired); -int SetTIK_RsaKey(keys_struct *keys, u8 *PrivateExp, u8 *PublicMod); -int SetTMD_RsaKey(keys_struct *keys, u8 *PrivateExp, u8 *PublicMod); -int Set_CCI_CFA_RsaKey(keys_struct *keys, u8 *PrivateExp, u8 *PublicMod); -int SetAccessDesc_RsaKey(keys_struct *keys, u8 *PrivateExp, u8 *PublicMod); -int SetCXI_RsaKey(keys_struct *keys, u8 *PrivateExp, u8 *PublicMod); +int SetTIK_RsaKey(keys_struct *keys, const u8 *priv_exp, const u8 *modulus); +int SetTMD_RsaKey(keys_struct *keys, const u8 *priv_exp, const u8 *modulus); +int Set_CCI_CFA_RsaKey(keys_struct *keys, const u8 *priv_exp, const u8 *modulus); +int SetAccessDesc_RsaKey(keys_struct *keys, const u8 *priv_exp, const u8 *modulus); +int SetCXI_RsaKey(keys_struct *keys, const u8 *priv_exp, const u8 *modulus); -int SetCaCert(keys_struct *keys, u8 *Cert); -int SetTikCert(keys_struct *keys, u8 *Cert); -int SetTmdCert(keys_struct *keys, u8 *Cert); +int SetCaCert(keys_struct *keys, const u8 *cert); +int SetTikCert(keys_struct *keys, const u8 *cert); +int SetTmdCert(keys_struct *keys, const u8 *cert); int LoadKeysFromResources(keys_struct *keys); void SetDummyRsaData(keys_struct *keys); @@ -48,7 +47,7 @@ void PrintBadKeySize(char *path, u32 size) fprintf(stderr,"[KEYSET ERROR] %s has invalid size (0x%x)\n",path,size); } -u8* AesKeyScrambler(u8 *key, u8 *keyX, u8 *keyY) +u8* AesKeyScrambler(u8 *key, const u8 *keyX, const u8 *keyY) { // Process keyX/keyY to get raw normal key for(int i = 0; i < 16; i++) @@ -91,7 +90,7 @@ int LoadKeysFromResources(keys_struct *keys) keys->keysetLoaded = true; /* AES Keys */ // CIA - //SetCommonKey(keys,(u8*)zeros_aesKey,1); + //SetCommonKey(keys, zeros_aesKey,1); if(keys->aes.currentCommonKey > 0xff) SetCurrentCommonKey(keys,0); @@ -107,33 +106,33 @@ int LoadKeysFromResources(keys_struct *keys) /* AES Keys */ // CIA for(int i = 0; i < 2; i++) - SetCommonKey(keys,(u8*)ctr_common_etd_key_dpki[i],i); + SetCommonKey(keys, ctr_common_etd_key_dpki[i],i); if(keys->aes.currentCommonKey > 0xff) SetCurrentCommonKey(keys,0); // NCCH - SetNormalKey(keys,(u8*)dev_fixed_ncch_key[0]); - SetSystemFixedKey(keys,(u8*)dev_fixed_ncch_key[1]); + SetNormalKey(keys, dev_fixed_ncch_key[0]); + SetSystemFixedKey(keys, dev_fixed_ncch_key[1]); /* for(int i = 0; i < 2; i++) - SetNcchKeyX(keys,(u8*)dev_unfixed_ncch_keyX[i],i); + SetNcchKeyX(keys, dev_unfixed_ncch_keyX[i],i); */ /* RSA Keys */ // CIA - SetTIK_RsaKey(keys,(u8*)xs9_dpki_rsa_priv,(u8*)xs9_dpki_rsa_pub); - SetTMD_RsaKey(keys,(u8*)cpA_dpki_rsa_priv,(u8*)cpA_dpki_rsa_pub); + SetTIK_RsaKey(keys, xs9_dpki_rsa_priv, xs9_dpki_rsa_pub); + SetTMD_RsaKey(keys, cpA_dpki_rsa_priv, cpA_dpki_rsa_pub); // CCI/CFA - Set_CCI_CFA_RsaKey(keys,(u8*)dev_ncsd_cfa_priv,(u8*)dev_ncsd_cfa_pub); + Set_CCI_CFA_RsaKey(keys, dev_ncsd_cfa_priv, dev_ncsd_cfa_pub); // CXI - SetAccessDesc_RsaKey(keys,(u8*)dev_acex_priv,(u8*)dev_acex_pub); + SetAccessDesc_RsaKey(keys, dev_acex_priv, dev_acex_pub); /* Certs */ - SetCaCert(keys,(u8*)ca4_dpki_cert); - SetTikCert(keys,(u8*)xs9_dpki_cert); - SetTmdCert(keys,(u8*)cpA_dpki_cert); + SetCaCert(keys, ca4_dpki_cert); + SetTikCert(keys, xs9_dpki_cert); + SetTmdCert(keys, cpA_dpki_cert); } else if(keys->keyset == pki_PRODUCTION){ keys->keysetLoaded = true; @@ -141,7 +140,7 @@ int LoadKeysFromResources(keys_struct *keys) // CIA //for(int i = 0; i < 6; i++){ // keys->aes.commonKey[i] = malloc(16); - // AesKeyScrambler(keys->aes.commonKey[i],(u8*)ctr_common_etd_keyX_ppki,(u8*)ctr_common_etd_keyY_ppki[i]); + // AesKeyScrambler(keys->aes.commonKey[i], ctr_common_etd_keyX_ppki, ctr_common_etd_keyY_ppki[i]); //} if(keys->aes.currentCommonKey > 0xff) SetCurrentCommonKey(keys,0); @@ -151,22 +150,22 @@ int LoadKeysFromResources(keys_struct *keys) keys->aes.systemFixedKey = NULL; /* for(int i = 0; i < 2; i++) - SetNcchKeyX(keys,(u8*)prod_unfixed_ncch_keyX[i],i); + SetNcchKeyX(keys, prod_unfixed_ncch_keyX[i],i); */ /* RSA Keys */ // CIA - SetTIK_RsaKey(keys,(u8*)xsC_ppki_rsa_priv,(u8*)xsC_ppki_rsa_pub); - SetTMD_RsaKey(keys,(u8*)cpB_ppki_rsa_priv,(u8*)cpB_ppki_rsa_pub); + SetTIK_RsaKey(keys, xsC_ppki_rsa_priv, xsC_ppki_rsa_pub); + SetTMD_RsaKey(keys, cpB_ppki_rsa_priv, cpB_ppki_rsa_pub); // CCI/CFA - Set_CCI_CFA_RsaKey(keys,(u8*)prod_ncsd_cfa_priv,(u8*)prod_ncsd_cfa_pub); + Set_CCI_CFA_RsaKey(keys, prod_ncsd_cfa_priv, prod_ncsd_cfa_pub); // CXI - SetAccessDesc_RsaKey(keys,(u8*)prod_acex_priv,(u8*)prod_acex_pub); + SetAccessDesc_RsaKey(keys, prod_acex_priv, prod_acex_pub); /* Certs */ - SetCaCert(keys,(u8*)ca3_ppki_cert); - SetTikCert(keys,(u8*)xsC_ppki_cert); - SetTmdCert(keys,(u8*)cpB_ppki_cert); + SetCaCert(keys, ca3_ppki_cert); + SetTikCert(keys, xsC_ppki_cert); + SetTmdCert(keys, cpB_ppki_cert); } return 0; } @@ -174,23 +173,23 @@ int LoadKeysFromResources(keys_struct *keys) void SetDummyRsaData(keys_struct *keys) { if(!keys->rsa.xsPvt || !keys->rsa.xsPub) - SetTIK_RsaKey(keys,(u8*)tpki_rsa_privExp,(u8*)tpki_rsa_pubMod); + SetTIK_RsaKey(keys, tpki_rsa_privExp, tpki_rsa_pubMod); if(!keys->rsa.cpPvt || !keys->rsa.cpPub) - SetTMD_RsaKey(keys,(u8*)tpki_rsa_privExp,(u8*)tpki_rsa_pubMod); + SetTMD_RsaKey(keys, tpki_rsa_privExp, tpki_rsa_pubMod); if(!keys->rsa.cciCfaPvt || !keys->rsa.cciCfaPub) - Set_CCI_CFA_RsaKey(keys,(u8*)tpki_rsa_privExp,(u8*)tpki_rsa_pubMod); + Set_CCI_CFA_RsaKey(keys, tpki_rsa_privExp, tpki_rsa_pubMod); if(!keys->rsa.acexPvt || !keys->rsa.acexPub) - SetAccessDesc_RsaKey(keys,(u8*)tpki_rsa_privExp,(u8*)tpki_rsa_pubMod); + SetAccessDesc_RsaKey(keys, tpki_rsa_privExp, tpki_rsa_pubMod); /* Certs */ if(!keys->certs.caCert) - SetCaCert(keys,(u8*)ca3_tpki_cert); + SetCaCert(keys, ca3_tpki_cert); if(!keys->certs.xsCert) - SetTikCert(keys,(u8*)xsC_tpki_cert); + SetTikCert(keys, xsC_tpki_cert); if(!keys->certs.cpCert) - SetTmdCert(keys,(u8*)cpB_tpki_cert); + SetTmdCert(keys, cpB_tpki_cert); } int LoadKeysFromKeyfile(keys_struct *keys) @@ -255,7 +254,12 @@ void DumpKeyset(keys_struct *keys) memdump(stdout," [PVT] ",keys->rsa.cciCfaPvt,0x100); } -FILE* keyset_OpenFile(char *dir, char *name, bool FileRequired) +void keysetOpenError(char *file) +{ + fprintf(stderr, "[KEYSET ERROR] Failed to open: %s\n", file); +} + +FILE* keyset_OpenFile(char *dir, char *name, bool is_required) { int file_path_len = sizeof(char)*(strlen(dir)+strlen(name)+1); char *file_path = malloc(file_path_len); @@ -265,17 +269,14 @@ FILE* keyset_OpenFile(char *dir, char *name, bool FileRequired) FILE *fp = fopen(file_path,"rb"); - if(!fp && FileRequired) - fprintf(stderr,"[KEYSET ERROR] Failed to open: %s\n",file_path); + if (!fp && is_required) + keysetOpenError(file_path); free(file_path); return fp; } -void keysetOpenError(char *file) -{ - fprintf(stderr,"[KEYSET ERROR] Failed to open: %s\n",file); -} + void FreeKeys(keys_struct *keys) { @@ -316,24 +317,24 @@ void FreeKeys(keys_struct *keys) memset(keys,0,sizeof(keys_struct)); } -int SetRsaKeySet(u8 **PrivDest, u8 *PrivSource, u8 **PubDest, u8 *PubSource) +int SetRsaKeySet(u8 **priv_exp_dst, const u8 *priv_exp_src, u8 **modulus_dst, const u8 *modulus_src) { int result = 0; - if(PrivSource){ - result = CopyData(PrivDest,PrivSource,0x100); + if(priv_exp_src){ + result = CopyData(priv_exp_dst,priv_exp_src,0x100); if(result) return result; } - if(PubSource){ - result = CopyData(PubDest,PubSource,0x100); + if(modulus_src){ + result = CopyData(modulus_dst,modulus_src,0x100); if(result) return result; } return 0; } -int SetCommonKey(keys_struct *keys, u8 *commonKey, u8 index) +int SetCommonKey(keys_struct *keys, const u8 *key, u8 index) { if(!keys) return -1; - return CopyData(&keys->aes.commonKey[index],commonKey,AES_128_KEY_SIZE); + return CopyData(&keys->aes.commonKey[index],key,AES_128_KEY_SIZE); } void InitCommonKeySlots(keys_struct *keys) @@ -342,7 +343,7 @@ void InitCommonKeySlots(keys_struct *keys) keys->aes.commonKey = calloc(MAX_CMN_KEY+1,sizeof(u8*)); } -int SetNcchKeyX(keys_struct *keys, u8 *keyX, u8 index) +int SetNcchKeyX(keys_struct *keys, const u8 *keyX, u8 index) { if(!keys) return -1; return CopyData(&keys->aes.ncchKeyX[index],keyX,AES_128_KEY_SIZE); @@ -361,55 +362,55 @@ int SetCurrentCommonKey(keys_struct *keys, u8 Index) return 0; } -int SetNormalKey(keys_struct *keys, u8 *systemFixedKey) +int SetNormalKey(keys_struct *keys, const u8 *key) { if(!keys) return -1; - return CopyData(&keys->aes.normalKey,systemFixedKey,16); + return CopyData(&keys->aes.normalKey,key,16); } -int SetSystemFixedKey(keys_struct *keys, u8 *systemFixedKey) +int SetSystemFixedKey(keys_struct *keys, const u8 *key) { if(!keys) return -1; - return CopyData(&keys->aes.systemFixedKey,systemFixedKey,16); + return CopyData(&keys->aes.systemFixedKey,key,16); } -int SetTIK_RsaKey(keys_struct *keys, u8 *PrivateExp, u8 *PublicMod) +int SetTIK_RsaKey(keys_struct *keys, const u8 *priv_exp, const u8 *modulus) { if(!keys) return -1; - return SetRsaKeySet(&keys->rsa.xsPvt,PrivateExp,&keys->rsa.xsPub,PublicMod); + return SetRsaKeySet(&keys->rsa.xsPvt,priv_exp,&keys->rsa.xsPub,modulus); } -int SetTMD_RsaKey(keys_struct *keys, u8 *PrivateExp, u8 *PublicMod) +int SetTMD_RsaKey(keys_struct *keys, const u8 *priv_exp, const u8 *modulus) { if(!keys) return -1; - return SetRsaKeySet(&keys->rsa.cpPvt,PrivateExp,&keys->rsa.cpPub,PublicMod); + return SetRsaKeySet(&keys->rsa.cpPvt,priv_exp,&keys->rsa.cpPub,modulus); } -int Set_CCI_CFA_RsaKey(keys_struct *keys, u8 *PrivateExp, u8 *PublicMod) +int Set_CCI_CFA_RsaKey(keys_struct *keys, const u8 *priv_exp, const u8 *modulus) { if(!keys) return -1; - return SetRsaKeySet(&keys->rsa.cciCfaPvt,PrivateExp,&keys->rsa.cciCfaPub,PublicMod); + return SetRsaKeySet(&keys->rsa.cciCfaPvt,priv_exp,&keys->rsa.cciCfaPub,modulus); } -int SetAccessDesc_RsaKey(keys_struct *keys, u8 *PrivateExp, u8 *PublicMod) +int SetAccessDesc_RsaKey(keys_struct *keys, const u8 *priv_exp, const u8 *modulus) { if(!keys) return -1; - return SetRsaKeySet(&keys->rsa.acexPvt,PrivateExp,&keys->rsa.acexPub,PublicMod); + return SetRsaKeySet(&keys->rsa.acexPvt,priv_exp,&keys->rsa.acexPub,modulus); } -int SetCaCert(keys_struct *keys, u8 *Cert) +int SetCaCert(keys_struct *keys, const u8 *cert) { if(!keys) return -1; - return CopyData(&keys->certs.caCert,Cert,0x400); + return CopyData(&keys->certs.caCert,cert,0x400); } -int SetTikCert(keys_struct *keys, u8 *Cert) +int SetTikCert(keys_struct *keys, const u8 *cert) { if(!keys) return -1; - return CopyData(&keys->certs.xsCert,Cert,0x300); + return CopyData(&keys->certs.xsCert,cert,0x300); } -int SetTmdCert(keys_struct *keys, u8 *Cert) +int SetTmdCert(keys_struct *keys, const u8 *cert) { if(!keys) return -1; - return CopyData(&keys->certs.cpCert,Cert,0x400); + return CopyData(&keys->certs.cpCert,cert,0x400); } \ No newline at end of file diff --git a/makerom/keyset.h b/makerom/keyset.h index 9d6c0c6..54d38fc 100644 --- a/makerom/keyset.h +++ b/makerom/keyset.h @@ -102,9 +102,9 @@ void InitKeys(keys_struct *keys); int SetKeys(keys_struct *keys); void FreeKeys(keys_struct *keys); -int SetCommonKey(keys_struct *keys, u8 *commonKey, u8 Index); +int SetCommonKey(keys_struct *keys, const u8 *key, u8 Index); int SetCurrentCommonKey(keys_struct *keys, u8 Index); -int SetNormalKey(keys_struct *keys, u8 *systemFixedKey); -int SetSystemFixedKey(keys_struct *keys, u8 *systemFixedKey); +int SetNormalKey(keys_struct *keys, const u8 *key); +int SetSystemFixedKey(keys_struct *keys, const u8 *key); -u8* AesKeyScrambler(u8 *key, u8 *keyX, u8 *keyY); +u8* AesKeyScrambler(u8 *key, const u8 *keyX, const u8 *keyY); diff --git a/makerom/utils.c b/makerom/utils.c index 450427f..5a97fb6 100644 --- a/makerom/utils.c +++ b/makerom/utils.c @@ -4,21 +4,7 @@ #include "polarssl/base64.h" // Memory -void endian_memcpy(u8 *destination, u8 *source, u32 size, int endianness) -{ - for (u32 i = 0; i < size; i++){ - switch (endianness){ - case(BE): - destination[i] = source[i]; - break; - case(LE): - destination[i] = source[((size-1)-i)]; - break; - } - } -} - -int CopyData(u8 **dest, u8 *source, u64 size) +int CopyData(u8 **dest, const u8 *source, u64 size) { if(!*dest){ *dest = malloc(size); diff --git a/makerom/utils.h b/makerom/utils.h index da32454..c479f11 100644 --- a/makerom/utils.h +++ b/makerom/utils.h @@ -7,8 +7,7 @@ typedef struct } buffer_struct; // Memory -void endian_memcpy(u8 *destination, u8 *source, u32 size, int endianness); -int CopyData(u8 **dest, u8 *source, u64 size); +int CopyData(u8 **dest, const u8 *source, u64 size); void rndset(void *ptr, u64 num); void clrmem(void *ptr, u64 num);