diff --git a/makerom/cia.c b/makerom/cia.c index 492181a..fb9f178 100644 --- a/makerom/cia.c +++ b/makerom/cia.c @@ -184,6 +184,12 @@ int GetSettingsFromUsrset(cia_settings *ciaset, user_settings *usrset) if(usrset->cia.randomTitleKey) rndset(ciaset->common.titleKey,AES_128_KEY_SIZE); + else if(usrset->cia.titleKey){ + for (size_t count = 0; count < sizeof(ciaset->common.titleKey)/sizeof(ciaset->common.titleKey[0]); count++) { + sscanf(usrset->cia.titleKey, "%2hhx", &ciaset->common.titleKey[count]); + usrset->cia.titleKey += 2; + } + } else clrmem(ciaset->common.titleKey,AES_128_KEY_SIZE); diff --git a/makerom/tik.c b/makerom/tik.c index df95599..f28f2e5 100644 --- a/makerom/tik.c +++ b/makerom/tik.c @@ -65,7 +65,7 @@ void SetupTicketHeader(tik_hdr *hdr, cia_settings *ciaset) SetLimits(hdr,ciaset); // Crypt TitleKey - if(ciaset->content.encryptCia) + if(ciaset->content.encryptCia || ciaset->common.titleKey) CryptTitleKey(ciaset->common.titleKey, hdr->encryptedTitleKey, hdr->titleId, ciaset->keys, ENC); else rndset(hdr->encryptedTitleKey,AES_128_KEY_SIZE); diff --git a/makerom/user_settings.c b/makerom/user_settings.c index 3e498b6..e5e07e9 100644 --- a/makerom/user_settings.c +++ b/makerom/user_settings.c @@ -559,6 +559,14 @@ int SetArgument(int argc, int i, char *argv[], user_settings *set) set->cia.randomTitleKey = true; return 1; } + else if (strcmp(argv[i], "-titlekey") == 0) { + if (ParamNum != 1) { + PrintArgReqParam(argv[i], 1); + return USR_ARG_REQ_PARAM; + } + set->cia.titleKey = argv[i + 1]; + return 2; + } else if (strcmp(argv[i], "-dlc") == 0) { if (ParamNum) { PrintNoNeedParam(argv[i]); @@ -990,6 +998,7 @@ void DisplayExtendedHelp(char *app_name) printf(" -dver Data-title version\n"); printf(" -deviceid 3DS unique device ID\n"); printf(" -esaccid e-Shop account ID\n"); + printf(" -titlekey Specify decrypted title key\n"); printf(" -rand Use a random title key\n"); printf(" -dlc Create DLC CIA\n"); printf(" -srl Package a TWL SRL in a CIA\n"); diff --git a/makerom/user_settings.h b/makerom/user_settings.h index ba6af79..e09ec50 100644 --- a/makerom/user_settings.h +++ b/makerom/user_settings.h @@ -284,6 +284,7 @@ typedef struct struct{ bool randomTitleKey; + char *titleKey; bool encryptCia; bool DlcContent; bool includeUpdateNcch;