示例#1
0
int bign_params_by_name(bign_params* params, int nid)
{
	char* oid = NULL;

	if (!params)
		return 0;
	if (nid == id_bign_curve256v1)
		oid = "1.2.112.0.2.0.34.101.45.3.1";
	/*else if (nid == id_bign_curve384v1)
		oid = "1.2.112.0.2.0.34.101.45.3.2";
	else if (nid == id_bign_curve512v1)
		oid = "1.2.112.0.2.0.34.101.45.3.3";*/
	else
		return 0;
	return bignStdParams(params, oid) == ERR_OK;
}
示例#2
0
int bign_get_params_name(const bign_params* params)
{
	bign_params std;

	if (!params)
		return 0;
	if (bignStdParams(&std, "1.2.112.0.2.0.34.101.45.3.1") != ERR_OK)
		return 0;
	if (bign_cmp_params(params, &std))
		return id_bign_curve256v1;
	/*if (bignStdParams(&std, "1.2.112.0.2.0.34.101.45.3.2") != ERR_SUCCESS)
		return 0;
	if (bign_cmp_params(params, &std))
		return id_bign_curve384v1;
	if (bignStdParams(&std, "1.2.112.0.2.0.34.101.45.3.3") != ERR_SUCCESS)
		return 0;
	if (bign_cmp_params(params, &std))
		return id_bign_curve512v1;*/
	return 0;
}
示例#3
0
文件: bake-test.c 项目: agievich/bee2
bool_t bakeTest()
{
	err_t codea;
	err_t codeb;
	bign_params params[1];
	octet randa[48];
	octet randb[48];
	octet echoa[64];
	octet echob[64];
	bake_settings settingsa[1];
	bake_settings settingsb[1];
	octet da[32];
	octet db[32];
	octet certdataa[5 /* Alice */ + 64 + 3 /* align */];
	octet certdatab[3 /* Bob */ + 64 + 5 /* align */];
	bake_cert certa[1];
	bake_cert certb[1];
	file_msg_st filea[1];
	file_msg_st fileb[1];
	const char pwd[] = "8086";
	octet keya[32];
	octet keyb[32];
	octet secret[32];
	octet iv[64];
	// загрузить долговременные параметры
	if (bignStdParams(params, "1.2.112.0.2.0.34.101.45.3.1") != ERR_OK)
		return FALSE;
	// настроить генераторы
	ASSERT(prngEcho_keep() <= sizeof(echoa));
	// задать настройки
	memSetZero(settingsa, sizeof(bake_settings));
	memSetZero(settingsb, sizeof(bake_settings));
	settingsa->kca = settingsa->kcb = TRUE;
	settingsb->kca = settingsb->kcb = TRUE;
	settingsa->rng = settingsb->rng = prngEchoStepR;
	settingsa->rng_state = echoa;
	settingsb->rng_state = echob;
	// загрузить личные ключи
	hexTo(da, _da);
	hexTo(db, _db);
	// загрузить сертификаты
	hexTo(certdataa, _certa);
	hexTo(certdatab, _certb);
	certa->data = certdataa;
	certa->len = strLen(_certa) / 2;
	certb->data = certdatab;
	certb->len = strLen(_certb) / 2;
	certa->val = certb->val = bakeTestCertVal;
	// тест Б.2
	hexTo(randa, _bmqv_randa);
	hexTo(randb, _bmqv_randb);
	fileMsgFlash();
	do
	{
		filea->i = filea->offset = 0;
		fileb->i = fileb->offset = 0;
		prngEchoStart(echoa, randa, strLen(_bmqv_randb) / 2);
		prngEchoStart(echob, randb, strLen(_bmqv_randb) / 2);
		codeb = bakeBMQVRunB(keyb, params, settingsb, db, certb, certa,
			fileMsgRead, fileMsgWrite, fileb);
		if (codeb != ERR_OK && codeb != ERR_FILE_NOT_FOUND)
			return FALSE;
		codea = bakeBMQVRunA(keya, params, settingsa, da, certa, certb,
			fileMsgRead, fileMsgWrite, filea);
		if (codea != ERR_OK && codea != ERR_FILE_NOT_FOUND)
			return FALSE;
	}
	while (codea == ERR_FILE_NOT_FOUND || codeb == ERR_FILE_NOT_FOUND);
	if (!memEq(keya, keyb, 32) ||
		!hexEq(keya,
			"C6F86D0E468D5EF1A9955B2EE0CF0581"
			"050C81D1B47727092408E863C7EEB48C"))
		return FALSE;
	// тест Б.3
	hexTo(randa, _bsts_randa);
	hexTo(randb, _bsts_randb);
	fileMsgFlash();
	do
	{
		filea->i = filea->offset = 0;
		fileb->i = fileb->offset = 0;
		prngEchoStart(echoa, randa, strLen(_bsts_randb) / 2);
		prngEchoStart(echob, randb, strLen(_bsts_randb) / 2);
		codeb = bakeBSTSRunB(keyb, params, settingsb, db, certb,
			bakeTestCertVal, fileMsgRead, fileMsgWrite, fileb);
		if (codeb != ERR_OK && codeb != ERR_FILE_NOT_FOUND)
			return FALSE;
		codea = bakeBSTSRunA(keya, params, settingsa, da, certa,
			bakeTestCertVal, fileMsgRead, fileMsgWrite, filea);
		if (codea != ERR_OK && codea != ERR_FILE_NOT_FOUND)
			return FALSE;
	}
	while (codea == ERR_FILE_NOT_FOUND || codeb == ERR_FILE_NOT_FOUND);
	if (!memEq(keya, keyb, 32) ||
		!hexEq(keya,
			"78EF2C56BD6DA2116BB5BEE80CEE5C05"
			"394E7609183CF7F76DF0C2DCFB25C4AD"))
		return FALSE;
	// тест Б.4
	hexTo(randa, _bpace_randa);
	hexTo(randb, _bpace_randb);
	fileMsgFlash();
	do
	{
		filea->i = filea->offset = 0;
		fileb->i = fileb->offset = 0;
		prngEchoStart(echoa, randa, strLen(_bpace_randb) / 2);
		prngEchoStart(echob, randb, strLen(_bpace_randb) / 2);
		codeb = bakeBPACERunB(keyb, params, settingsb, (const octet*)pwd,
            strLen(pwd), fileMsgRead, fileMsgWrite, fileb);
		if (codeb != ERR_OK && codeb != ERR_FILE_NOT_FOUND)
			return FALSE;
		codea = bakeBPACERunA(keya, params, settingsa, (const octet*)pwd,
            strLen(pwd), fileMsgRead, fileMsgWrite, filea);
		if (codea != ERR_OK && codea != ERR_FILE_NOT_FOUND)
			return FALSE;
	}
	while (codea == ERR_FILE_NOT_FOUND || codeb == ERR_FILE_NOT_FOUND);
	if (!memEq(keya, keyb, 32) ||
		!hexEq(keya,
			"DAC4D8F411F9C523D28BBAAB32A5270E"
			"4DFA1F0F757EF8E0F30AF08FBDE1E7F4"))
		return FALSE;
	// тест bakeKDF (по данным из теста Б.4)
	hexTo(secret, 
		"723356E335ED70620FFB1842752092C3"
		"2603EB666040920587D800575BECFC42");
	hexTo(iv, 
		"6B13ACBB086FB87618BCC2EF20A3FA89"
		"475654CB367E670A2441730B24B8AB31"
		"CD3D6487DC4EEB23456978186A069C71"
		"375D75C2DF198BAD1E61EEA0DBBFF737");
	if (bakeKDF(keya, secret, 32, iv, 64, 0) != ERR_OK ||
		bakeKDF(keyb, secret, 32, iv, 64, 1) != ERR_OK ||
		!hexEq(keya,
			"DAC4D8F411F9C523D28BBAAB32A5270E"
			"4DFA1F0F757EF8E0F30AF08FBDE1E7F4") ||
		!hexEq(keyb,
			"54AC058284D679CF4C47D3D72651F3E4"
			"EF0D61D1D0ED5BAF8FF30B8924E599D8"))
		return FALSE;
	// тест bakeSWU (по данным из теста Б.4)
	hexTo(secret, 
		"AD1362A8F9A3D42FBE1B8E6F1C88AAD5"
		"0F51D91347617C20BD4AB07AEF4F26A1");
	if (bakeSWU(iv, params, secret) != ERR_OK ||
		!hexEq(iv,
			"014417D3355557317D2E2AB6D0875487"
			"8D19E8D97B71FDC95DBB2A9B894D16D7"
			"7704A0B5CAA9CDA10791E4760671E105"
			"0DDEAB7083A7458447866ADB01473810"))
		return FALSE;
	// все нормально
	return TRUE;
}
示例#4
0
文件: bake-demo.c 项目: agievich/bee2
bool_t bakeDemo()
{
	bign_params params[1];
	octet randa[48];
	octet randb[48];
	octet echoa[64];
	octet echob[64];
	bake_settings settingsa[1];
	bake_settings settingsb[1];
	octet da[32];
	octet db[32];
	octet certdataa[5 + 64];
	octet certdatab[3 + 64];
	bake_cert certa[1];
	bake_cert certb[1];
	octet file_data[1024];
	file_st filea[1];
	file_st fileb[1];
	const char pwd[] = "8086";
	octet keya[32];
	octet keyb[32];
	// загрузить долговременные параметры
	if (bignStdParams(params, "1.2.112.0.2.0.34.101.45.3.1") != ERR_OK)
	 return FALSE;
	// настроить генераторы
	ASSERT(prngEcho_keep() <= sizeof(echoa));
	// задать настройки
	memSetZero(settingsa, sizeof(bake_settings));
	memSetZero(settingsb, sizeof(bake_settings));
	settingsa->kca = settingsa->kcb = TRUE;
	settingsb->kca = settingsb->kcb = TRUE;
	settingsa->rng = settingsb->rng = prngEchoStepR;
	settingsa->rng_state = echoa;
	settingsb->rng_state = echob;
	// загрузить личные ключи
	hexTo(da, _da);
	hexTo(db, _db);
	// загрузить сертификаты
	hexTo(certdataa, _certa);
	hexTo(certdatab, _certb);
	certa->data = certdataa;
	certa->len = strLen(_certa) / 2;
	certb->data = certdatab;
	certb->len = strLen(_certb) / 2;
	certa->val = certb->val = certVal;
	// тест Б.2
	hexTo(randa, _bmqv_randa);
	hexTo(randb, _bmqv_randb);
	ASSERT(sizeof(file_data) >= sizeof(_bmqv_data) / 2);
	hexTo(file_data, _bmqv_data);
	if (fileCreate(filea, file_data, strlen(_bmqv_data) / 2) != ERR_OK ||
		fileCreate(fileb, file_data, strlen(_bmqv_data) / 2) != ERR_OK)
		return FALSE;
	prngEchoStart(echoa, randa, strLen(_bmqv_randb) / 2);
	prngEchoStart(echob, randb, strLen(_bmqv_randb) / 2);
	if (bakeBMQVRunB(keyb, params, settingsb, db, certb, certa,
			fileRead, fileWrite, fileb) != ERR_OK ||
		bakeBMQVRunA(keya, params, settingsa, da, certa, certb,
			fileRead, fileWrite, filea))
			return FALSE;
	if (!memEq(keya, keyb, 32) ||
		!hexEq(keya,
			"C6F86D0E468D5EF1A9955B2EE0CF0581"
			"050C81D1B47727092408E863C7EEB48C"))
		return FALSE;
	// тест Б.3
	hexTo(randa, _bsts_randa);
	hexTo(randb, _bsts_randb);
	ASSERT(sizeof(file_data) >= strlen(_bsts_data) / 2);
	hexTo(file_data, _bsts_data);
	if (fileCreate(filea, file_data, strlen(_bsts_data) / 2) != ERR_OK ||
		fileCreate(fileb, file_data, strlen(_bsts_data) / 2) != ERR_OK)
		return FALSE;
	prngEchoStart(echoa, randa, strLen(_bsts_randb) / 2);
	prngEchoStart(echob, randb, strLen(_bsts_randb) / 2);
	if (bakeBSTSRunB(keyb, params, settingsb, db, certb, certVal,
			fileRead, fileWrite, fileb) != ERR_OK ||
		bakeBSTSRunA(keya, params, settingsa, da, certa, certVal,
			fileRead, fileWrite, filea))
			return FALSE;
	if (!memEq(keya, keyb, 32) ||
		!hexEq(keya,
			"78EF2C56BD6DA2116BB5BEE80CEE5C05"
			"394E7609183CF7F76DF0C2DCFB25C4AD"))
		return FALSE;
	// тест Б.4
	hexTo(randa, _bpace_randa);
	hexTo(randb, _bpace_randb);
	ASSERT(sizeof(file_data) >= strlen(_bsts_data) / 2);
	hexTo(file_data, _bpace_data);
	if (fileCreate(filea, file_data, strlen(_bpace_data) / 2) != ERR_OK ||
		fileCreate(fileb, file_data, strlen(_bpace_data) / 2) != ERR_OK)
		return FALSE;
	prngEchoStart(echoa, randa, strLen(_bpace_randb) / 2);
	prngEchoStart(echob, randb, strLen(_bpace_randb) / 2);
	if (bakeBPACERunB(keyb, params, settingsb, (octet*)pwd, strLen(pwd),
			fileRead, fileWrite, fileb) != ERR_OK ||
		bakeBPACERunA(keya, params, settingsa, (octet*)pwd, strLen(pwd),
			fileRead, fileWrite, filea))
			return FALSE;
	if (!memEq(keya, keyb, 32) ||
		!hexEq(keya,
			"DAC4D8F411F9C523D28BBAAB32A5270E"
			"4DFA1F0F757EF8E0F30AF08FBDE1E7F4"))
		return FALSE;
	// все нормально
	return TRUE;
}