mirror of
https://github.com/DarkStore-3DS/Project_CTR.git
synced 2026-07-03 00:39:14 +00:00
ctrtool: allow specify tik titlekey
This commit is contained in:
+3
-1
@@ -217,7 +217,9 @@ void cia_process(cia_context* ctx, u32 actions)
|
|||||||
|
|
||||||
if (settings_get_common_key(ctx->usersettings))
|
if (settings_get_common_key(ctx->usersettings))
|
||||||
tik_get_decrypted_titlekey(&ctx->tik, ctx->titlekey);
|
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_file(&ctx->tmd, ctx->file);
|
||||||
tmd_set_offset(&ctx->tmd, ctx->offsettmd);
|
tmd_set_offset(&ctx->tmd, ctx->offsettmd);
|
||||||
tmd_set_size(&ctx->tmd, ctx->sizetmd);
|
tmd_set_size(&ctx->tmd, ctx->sizetmd);
|
||||||
|
|||||||
@@ -175,6 +175,8 @@ void keyset_merge(keyset* keys, keyset* src)
|
|||||||
keyset_set_key128(&keys->ncchfixedsystemkey, src->ncchfixedsystemkey.data);
|
keyset_set_key128(&keys->ncchfixedsystemkey, src->ncchfixedsystemkey.data);
|
||||||
if (src->commonkey.valid)
|
if (src->commonkey.valid)
|
||||||
keyset_set_key128(&keys->commonkey, src->commonkey.data);
|
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)
|
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);
|
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)
|
void keyset_set_ncchkey(keyset* keys, unsigned char* keydata)
|
||||||
{
|
{
|
||||||
keyset_set_key128(&keys->ncchkey, keydata);
|
keyset_set_key128(&keys->ncchkey, keydata);
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ typedef struct
|
|||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
key128 commonkey;
|
key128 commonkey;
|
||||||
|
key128 titlekey;
|
||||||
key128 ncchkey;
|
key128 ncchkey;
|
||||||
key128 ncchfixedsystemkey;
|
key128 ncchfixedsystemkey;
|
||||||
rsakey2048 ncsdrsakey;
|
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_merge(keyset* keys, keyset* src);
|
||||||
void keyset_set_commonkey(keyset* keys, unsigned char* keydata);
|
void keyset_set_commonkey(keyset* keys, unsigned char* keydata);
|
||||||
void keyset_parse_commonkey(keyset* keys, char* keytext, int keylen);
|
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_set_ncchkey(keyset* keys, unsigned char* keydata);
|
||||||
void keyset_parse_ncchkey(keyset* keys, char* keytext, int keylen);
|
void keyset_parse_ncchkey(keyset* keys, char* keytext, int keylen);
|
||||||
void keyset_set_ncchfixedsystemkey(keyset* keys, unsigned char* keydata);
|
void keyset_set_ncchfixedsystemkey(keyset* keys, unsigned char* keydata);
|
||||||
|
|||||||
@@ -53,6 +53,7 @@ static void usage(const char *argv0)
|
|||||||
" -y, --verify Verify hashes and signatures.\n"
|
" -y, --verify Verify hashes and signatures.\n"
|
||||||
" --unitsize=size Set media unit size (default 0x200).\n"
|
" --unitsize=size Set media unit size (default 0x200).\n"
|
||||||
" --commonkey=key Set common key.\n"
|
" --commonkey=key Set common key.\n"
|
||||||
|
" --titlekey=key Set tik title key.\n"
|
||||||
" --ncchkey=key Set ncch key.\n"
|
" --ncchkey=key Set ncch key.\n"
|
||||||
" --ncchsyskey=key Set ncch fixed system key.\n"
|
" --ncchsyskey=key Set ncch fixed system key.\n"
|
||||||
" --showkeys Show the keys being used.\n"
|
" --showkeys Show the keys being used.\n"
|
||||||
@@ -146,6 +147,7 @@ int main(int argc, char* argv[])
|
|||||||
{"wavloops", 1, NULL, 19},
|
{"wavloops", 1, NULL, 19},
|
||||||
{"logo", 1, NULL, 20},
|
{"logo", 1, NULL, 20},
|
||||||
{"decompresscode", 0, NULL, 21},
|
{"decompresscode", 0, NULL, 21},
|
||||||
|
{"titlekey", 1, NULL, 22},
|
||||||
{NULL},
|
{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 19: settings_set_cwav_loopcount(&ctx.usersettings, strtoul(optarg, 0, 0)); break;
|
||||||
case 20: settings_set_logo_path(&ctx.usersettings, optarg); break;
|
case 20: settings_set_logo_path(&ctx.usersettings, optarg); break;
|
||||||
case 21: ctx.actions |= DecompressCodeFlag; break;
|
case 21: ctx.actions |= DecompressCodeFlag; break;
|
||||||
|
case 22: keyset_parse_titlekey(&tmpkeys, optarg, strlen(optarg)); break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
usage(argv[0]);
|
usage(argv[0]);
|
||||||
|
|||||||
@@ -152,6 +152,13 @@ unsigned char* settings_get_common_key(settings* usersettings)
|
|||||||
return 0;
|
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)
|
int settings_get_ignore_programid(settings* usersettings)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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_key(settings* usersettings);
|
||||||
unsigned char* settings_get_ncch_fixedsystemkey(settings* usersettings);
|
unsigned char* settings_get_ncch_fixedsystemkey(settings* usersettings);
|
||||||
unsigned char* settings_get_common_key(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_ignore_programid(settings* usersettings);
|
||||||
int settings_get_list_romfs_files(settings* usersettings);
|
int settings_get_list_romfs_files(settings* usersettings);
|
||||||
int settings_get_cwav_loopcount(settings* usersettings);
|
int settings_get_cwav_loopcount(settings* usersettings);
|
||||||
|
|||||||
Reference in New Issue
Block a user