Пример #1
0
void tmd_process(tmd_context* ctx, u32 actions)
{
	if (ctx->buffer == 0)
		ctx->buffer = malloc(ctx->size);

	if (ctx->buffer)
	{
		fseeko64(ctx->file, ctx->offset, SEEK_SET);
		fread(ctx->buffer, 1, ctx->size, ctx->file);

		if (actions & InfoFlag)
		{
			tmd_print(ctx);
		}
	}
}
Пример #2
0
void cia_process(cia_context* ctx, u32 actions)
{	
	fseek(ctx->file, 0, SEEK_SET);

	if (fread(&ctx->header, 1, sizeof(ctr_ciaheader), ctx->file) != sizeof(ctr_ciaheader))
	{
		fprintf(stderr, "Error reading CIA header\n");
		goto clean;
	}

	ctx->sizeheader = getle32(ctx->header.headersize);
	ctx->sizecert = getle32(ctx->header.certsize);
	ctx->sizetik = getle32(ctx->header.ticketsize);
	ctx->sizetmd = getle32(ctx->header.tmdsize);
	ctx->sizecontent = (u32)getle64(ctx->header.contentsize);
	ctx->sizemeta = getle32(ctx->header.metasize);
	
	ctx->offsetcerts = align(ctx->sizeheader, 64);
	ctx->offsettik = align(ctx->offsetcerts + ctx->sizecert, 64);
	ctx->offsettmd = align(ctx->offsettik + ctx->sizetik, 64);
	ctx->offsetcontent = align(ctx->offsettmd + ctx->sizetmd, 64);
	ctx->offsetmeta = align(ctx->offsetcontent + ctx->sizecontent, 64);

	if (actions & InfoFlag)
		cia_print(ctx);


	tik_set_file(&ctx->tik, ctx->file);
	tik_set_offset(&ctx->tik, ctx->offsettik);
	tik_set_size(&ctx->tik, ctx->sizetik);
	tik_set_usersettings(&ctx->tik, ctx->usersettings);

	tik_process(&ctx->tik, actions);
	memset(ctx->iv, 0, 16);

	

	if (settings_get_common_key(ctx->usersettings))
		tik_get_decrypted_titlekey(&ctx->tik, ctx->titlekey);

	tmd_set_file(&ctx->tmd, ctx->file);
	tmd_set_offset(&ctx->tmd, ctx->offsettmd);
	tmd_set_size(&ctx->tmd, ctx->sizetmd);
	tmd_set_usersettings(&ctx->tmd, ctx->usersettings);
	tmd_process(&ctx->tmd, actions);

	if (actions & VerifyFlag)
	{
		cia_verify_contents(ctx, actions);
	}

	if (actions & InfoFlag || actions & VerifyFlag)
		tmd_print(&ctx->tmd);

	if (actions & ExtractFlag)
	{
		cia_save(ctx, CIATYPE_CERTS, actions);
		cia_save(ctx, CIATYPE_TMD, actions);
		cia_save(ctx, CIATYPE_TIK, actions);
		cia_save(ctx, CIATYPE_META, actions);
		cia_save(ctx, CIATYPE_CONTENT, actions);
	}

clean:
	return;
}