ctrtool: allow specify tik titlekey

This commit is contained in:
applestash
2014-09-09 14:12:55 +10:00
parent 07aa854e60
commit b4b22944a4
6 changed files with 29 additions and 1 deletions
+3 -1
View File
@@ -217,7 +217,9 @@ void cia_process(cia_context* ctx, u32 actions)
if (settings_get_common_key(ctx->usersettings))
tik_get_decrypted_titlekey(&ctx->tik, ctx->titlekey);
else if(settings_get_title_key(ctx->usersettings))
memcpy(ctx->titlekey, settings_get_title_key(ctx->usersettings), 16);
tmd_set_file(&ctx->tmd, ctx->file);
tmd_set_offset(&ctx->tmd, ctx->offsettmd);
tmd_set_size(&ctx->tmd, ctx->sizetmd);
+12
View File
@@ -175,6 +175,8 @@ void keyset_merge(keyset* keys, keyset* src)
keyset_set_key128(&keys->ncchfixedsystemkey, src->ncchfixedsystemkey.data);
if (src->commonkey.valid)
keyset_set_key128(&keys->commonkey, src->commonkey.data);
if (src->titlekey.valid)
keyset_set_key128(&keys->titlekey, src->titlekey.data);
}
void keyset_set_key128(key128* key, unsigned char* keydata)
@@ -198,6 +200,16 @@ void keyset_parse_commonkey(keyset* keys, char* keytext, int keylen)
keyset_parse_key128(&keys->commonkey, keytext, keylen);
}
void keyset_set_titlekey(keyset* keys, unsigned char* keydata)
{
keyset_set_key128(&keys->titlekey, keydata);
}
void keyset_parse_titlekey(keyset* keys, char* keytext, int keylen)
{
keyset_parse_key128(&keys->titlekey, keytext, keylen);
}
void keyset_set_ncchkey(keyset* keys, unsigned char* keydata)
{
keyset_set_key128(&keys->ncchkey, keydata);
+3
View File
@@ -43,6 +43,7 @@ typedef struct
typedef struct
{
key128 commonkey;
key128 titlekey;
key128 ncchkey;
key128 ncchfixedsystemkey;
rsakey2048 ncsdrsakey;
@@ -56,6 +57,8 @@ int keyset_load(keyset* keys, const char* fname, int verbose);
void keyset_merge(keyset* keys, keyset* src);
void keyset_set_commonkey(keyset* keys, unsigned char* keydata);
void keyset_parse_commonkey(keyset* keys, char* keytext, int keylen);
void keyset_set_titlekey(keyset* keys, unsigned char* keydata);
void keyset_parse_titlekey(keyset* keys, char* keytext, int keylen);
void keyset_set_ncchkey(keyset* keys, unsigned char* keydata);
void keyset_parse_ncchkey(keyset* keys, char* keytext, int keylen);
void keyset_set_ncchfixedsystemkey(keyset* keys, unsigned char* keydata);
+3
View File
@@ -53,6 +53,7 @@ static void usage(const char *argv0)
" -y, --verify Verify hashes and signatures.\n"
" --unitsize=size Set media unit size (default 0x200).\n"
" --commonkey=key Set common key.\n"
" --titlekey=key Set tik title key.\n"
" --ncchkey=key Set ncch key.\n"
" --ncchsyskey=key Set ncch fixed system key.\n"
" --showkeys Show the keys being used.\n"
@@ -146,6 +147,7 @@ int main(int argc, char* argv[])
{"wavloops", 1, NULL, 19},
{"logo", 1, NULL, 20},
{"decompresscode", 0, NULL, 21},
{"titlekey", 1, NULL, 22},
{NULL},
};
@@ -233,6 +235,7 @@ int main(int argc, char* argv[])
case 19: settings_set_cwav_loopcount(&ctx.usersettings, strtoul(optarg, 0, 0)); break;
case 20: settings_set_logo_path(&ctx.usersettings, optarg); break;
case 21: ctx.actions |= DecompressCodeFlag; break;
case 22: keyset_parse_titlekey(&tmpkeys, optarg, strlen(optarg)); break;
default:
usage(argv[0]);
+7
View File
@@ -152,6 +152,13 @@ unsigned char* settings_get_common_key(settings* usersettings)
return 0;
}
unsigned char* settings_get_title_key(settings* usersettings)
{
if (usersettings && usersettings->keys.titlekey.valid)
return usersettings->keys.titlekey.data;
else
return 0;
}
int settings_get_ignore_programid(settings* usersettings)
{
+1
View File
@@ -47,6 +47,7 @@ unsigned int settings_get_mediaunit_size(settings* usersettings);
unsigned char* settings_get_ncch_key(settings* usersettings);
unsigned char* settings_get_ncch_fixedsystemkey(settings* usersettings);
unsigned char* settings_get_common_key(settings* usersettings);
unsigned char* settings_get_title_key(settings* usersettings);
int settings_get_ignore_programid(settings* usersettings);
int settings_get_list_romfs_files(settings* usersettings);
int settings_get_cwav_loopcount(settings* usersettings);