Пример #1
0
bool_t pfokTest()
{
	pfok_params params[1];
	octet combo_state[128];
	octet ua[O_OF_B(130)];
	octet xa[O_OF_B(130)];
	octet vb[O_OF_B(638)];
	octet yb[O_OF_B(638)];
	octet key[32];
	// тест PFOK.GENG.1
	if (pfokStdParams(params, 0, "test") != ERR_OK ||
		pfokValParams(params) != ERR_OK ||
		(params->g[0] += 2) == 0 ||
		pfokValParams(params) == ERR_OK)
		return FALSE;
	// тест PFOK.GENG.2
	if (pfokStdParams(params, 0, "1.2.112.0.2.0.1176.2.3.3.2") != ERR_OK ||
		pfokValParams(params) != ERR_OK ||
		(params->g[0] += 3) == 0 ||
		pfokValParams(params) == ERR_OK)
		return FALSE;
	// тест PFOK.GENG.3
	if (pfokStdParams(params, 0, "1.2.112.0.2.0.1176.2.3.6.2") != ERR_OK ||
		pfokValParams(params) != ERR_OK ||
		(params->g[0] += 1) == 0 ||
		pfokValParams(params) == ERR_OK)
		return FALSE;
	// тест PFOK.GENG.4
	if (pfokStdParams(params, 0, "1.2.112.0.2.0.1176.2.3.10.2") != ERR_OK ||
		pfokValParams(params) != ERR_OK ||
		(params->g[0] += 1) == 0 ||
		pfokValParams(params) == ERR_OK)
		return FALSE;
	// загрузить параметры "test"
	if (pfokStdParams(params, 0, "test") != ERR_OK)
		return FALSE;
	// сгенерировать ключи
	ASSERT(prngCOMBO_keep() <= sizeof(combo_state));
	prngCOMBOStart(combo_state, utilNonce32());
	if (pfokGenKeypair(ua, vb, params, prngCOMBOStepG, combo_state) != ERR_OK ||
		pfokValPubkey(params, vb) != ERR_OK ||
		pfokCalcPubkey(yb, params, ua) != ERR_OK ||
		!memEq(vb, yb, O_OF_B(params->l)))
		return FALSE;
	// тест PFOK.ANON.1
	hexToRev(ua, 
		"01"
		"1D4665B357DB361D106E32E353CD534B");
	hexToRev(vb, 
		"0739539C2AE25B53A05C8D16A14351D8"
		"EA86A1DD1893E08EE4A266F970E0243F"
		"8DF27F738F64E99E262E337792E5DD84"
		"7CF2A83362C6EC3C024E47313AA49A1E"
		"0A2E637AD35E31EB5F034D889B666701");
	if (pfokValPubkey(params, vb) != ERR_OK ||
		pfokDH(key, params, ua, vb) != ERR_OK ||
		!hexEqRev(key, 
			"777BB35E950D3080C1E896BE4172DBD0" 
			"61423D3BFEF78F15E3F7A7F2FF7A242B"))
		return FALSE;
	// тест PFOK.ANON.2
	hexToRev(ua, 
		"00"
		"0530110167E1443819A8662A0FAB7AC0");
	hexToRev(vb, 
		"1590312CBACB7B21FC0B173DC100AC5D"
		"8692E04813CA2F87A5763E3F4940B10C"
		"DF3F2B3ECDF28BE4BEA9363B07A8A8A3"
		"BFDDE074DCF36D669A56931D083FC3BE"
		"46D02CC8EF719EF66AE47F57BEAE8E02");
	if (pfokValPubkey(params, vb) != ERR_OK ||
		pfokDH(key, params, ua, vb) != ERR_OK ||
		!hexEqRev(key, 
			"46FA834B28D5E5D4183E28646AFFE806"
			"803E4C865CB99B1C423B0F1C78DE758D"))
		return FALSE;
	// тест PFOK.AUTH.1
	hexToRev(xa, 
		"00"
		"78E7101B4A8F421D2AF5740D6ED27680");
	hexToRev(yb, 
		"193E5E1E0839091BC7ABBDD09E8D2298"
		"8812D37EDEB39E077130A244888BE1A7"
		"53337AB5743C898D1CFC947430813448"
		"16AF5189A4E84D5B6EA310F72534D2E5"
		"E531B579CEA862EAB0251A3C20F0EC1D");
	hexToRev(ua, 
		"01"
		"27E33C0D7595566570936FEF0AA53A24");
	hexToRev(vb, 
		"0947264BEFA107E99616F347B6A05C62"
		"D7F5F26804D848FC4A7D81915F4546DD"
		"22949C07131D84F8B5A73A60ED61BC6E"
		"158E9B83F38C1EE6AD97F2BF771AA4FF"
		"B10A38298498D943995697FD0F65284C");
	if (pfokValPubkey(params, yb) != ERR_OK ||
		pfokValPubkey(params, vb) != ERR_OK ||
		pfokMTI(key, params, xa, ua, yb, vb) != ERR_OK ||
		!hexEqRev(key, 
			"EA92D5BCEC18BB44514E096748DB3E21"
			"D6E7B9C97D604699BEA7D3B96C87E18B"))
		return FALSE;
	// тест PFOK.AUTH.2
	hexToRev(xa, 
		"00"
		"05773C812D6F2A002D4E3EAC643C2CF3");
	hexToRev(yb, 
		"221CBFEB62F4AA3204D349B3D57E45E4"
		"C9BA601483CF9DDE4DD1AE1CC2694149"
		"F08765C5CCAEBD44B7B7D0F1783F9FDD"
		"2929523E1CEF2A46FBD419C5E5E2E712"
		"4099B405E0B90A5FB15A56F439DA47D1");
	hexToRev(ua, 
		"01"
		"3BB0377B3C0E55577A0D4A43627C6EC2");
	hexToRev(vb, 
		"2740ECD0631257DD8124DC38CFAC3DEF"
		"7162503B7F7C8DEC6478408B225D4C05"
		"56E566AF50661CE2F46662FC66DC429A"
		"CCF65D95E4F90BDCD08A11957C898EE2"
		"C2B77231929ACE9649B2C184CC9D8104");
	if (pfokValPubkey(params, yb) != ERR_OK ||
		pfokValPubkey(params, vb) != ERR_OK ||
		pfokMTI(key, params, xa, ua, yb, vb) != ERR_OK ||
		!hexEqRev(key, 
			"5A4C323604206C8898BF6C234F75A537"
			"DF75E9A249D87F1E55CBD7B40C4FDAFA"))
		return FALSE;
	// все нормально
	return TRUE;
}
Пример #2
0
bool_t g12sTest()
{
	g12s_params params[1];
	octet buf[G12S_ORDER_SIZE];
	octet privkey[G12S_ORDER_SIZE];
	octet pubkey[2 * G12S_FIELD_SIZE];
	octet hash[64];
	octet sig[2 * G12S_ORDER_SIZE];
	octet echo[64];
	// тест A.1 [загрузка параметров]
	if (g12sStdParams(params, "1.2.643.2.2.35.0") != ERR_OK ||
		g12sValParams(params) != ERR_OK)
		return FALSE;
	// тест A.1 [генерация ключей]
	hexToRev(buf, 
		"7A929ADE789BB9BE10ED359DD39A72C1"
		"1B60961F49397EEE1D19CE9891EC3B28");
	ASSERT(sizeof(echo) >= prngEcho_keep());
	prngEchoStart(echo, buf, 32);
	if (g12sGenKeypair(privkey, pubkey, params, prngEchoStepR, echo) 
		!= ERR_OK ||
		!hexEqRev(privkey, 
			"7A929ADE789BB9BE10ED359DD39A72C1"
			"1B60961F49397EEE1D19CE9891EC3B28") ||
		!hexEqRev(pubkey, 
			"26F1B489D6701DD185C8413A977B3CBB"
			"AF64D1C593D26627DFFB101A87FF77DA"
			"7F2B49E270DB6D90D8595BEC458B50C5"
			"8585BA1D4E9B788F6689DBD8E56FD80B"))
		return FALSE;
	// тест A.1 [выработка ЭЦП]
	hexTo(hash, 
		"2DFBC1B372D89A1188C09C52E0EEC61F"
		"CE52032AB1022E8E67ECE6672B043EE5");
	hexToRev(buf, 
		"77105C9B20BCD3122823C8CF6FCC7B95"
		"6DE33814E95B7FE64FED924594DCEAB3");
	if (g12sSign(sig, params, hash, privkey, prngEchoStepR, echo) != ERR_OK ||
		!hexEq(sig, 
			"41AA28D2F1AB148280CD9ED56FEDA419"
			"74053554A42767B83AD043FD39DC0493"
			"01456C64BA4642A1653C235A98A60249"
			"BCD6D3F746B631DF928014F6C5BF9C40"))
		return FALSE;
	// тест A.1 [проверка ЭЦП]
	if (g12sVerify(params, hash, sig, pubkey) != ERR_OK ||
		(sig[0] ^= 1, g12sVerify(params, hash, sig, pubkey) == ERR_OK))
		return FALSE;
	// тест A.2 [загрузка параметров]
	if (g12sStdParams(params, "1.2.643.7.1.2.1.2.0") != ERR_OK ||
		g12sValParams(params) != ERR_OK)
		return FALSE;
	// тест A.2 [генерация ключей]
	hexToRev(buf, 
		"0BA6048AADAE241BA40936D47756D7C9"
		"3091A0E8514669700EE7508E508B1020"
		"72E8123B2200A0563322DAD2827E2714"
		"A2636B7BFD18AADFC62967821FA18DD4");
	ASSERT(sizeof(echo) >= prngEcho_keep());
	prngEchoStart(echo, buf, 64);
	if (g12sGenKeypair(privkey, pubkey, params, prngEchoStepR, echo) 
		!= ERR_OK ||
		!hexEqRev(privkey, 
			"0BA6048AADAE241BA40936D47756D7C9"
			"3091A0E8514669700EE7508E508B1020"
			"72E8123B2200A0563322DAD2827E2714"
			"A2636B7BFD18AADFC62967821FA18DD4") ||
		!hexEqRev(pubkey, 
			"37C7C90CD40B0F5621DC3AC1B751CFA0"
			"E2634FA0503B3D52639F5D7FB72AFD61"
			"EA199441D943FFE7F0C70A2759A3CDB8"
			"4C114E1F9339FDF27F35ECA93677BEEC"
			"115DC5BC96760C7B48598D8AB9E740D4"
			"C4A85A65BE33C1815B5C320C854621DD"
			"5A515856D13314AF69BC5B924C8B4DDF"
			"F75C45415C1D9DD9DD33612CD530EFE1"))
		return FALSE;
	// тест A.2 [выработка ЭЦП]
	hexTo(hash, 
		"3754F3CFACC9E0615C4F4A7C4D8DAB53"
		"1B09B6F9C170C533A71D147035B0C591"
		"7184EE536593F4414339976C647C5D5A"
		"407ADEDB1D560C4FC6777D2972075B8C");
	hexToRev(buf, 
		"0359E7F4B1410FEACC570456C6801496"
		"946312120B39D019D455986E364F3658"
		"86748ED7A44B3E794434006011842286"
		"212273A6D14CF70EA3AF71BB1AE679F1");
	if (g12sSign(sig, params, hash, privkey, prngEchoStepR, echo) 
		!= ERR_OK ||
		!hexEq(sig, 
			"2F86FA60A081091A23DD795E1E3C689E"
			"E512A3C82EE0DCC2643C78EEA8FCACD3"
			"5492558486B20F1C9EC197C906998502"
			"60C93BCBCD9C5C3317E19344E173AE36"
			"1081B394696FFE8E6585E7A9362D26B6"
			"325F56778AADBC081C0BFBE933D52FF5"
			"823CE288E8C4F362526080DF7F70CE40"
			"6A6EEB1F56919CB92A9853BDE73E5B4A"))
		return FALSE;
	// тест A.2 [проверка ЭЦП]
	if (g12sVerify(params, hash, sig, pubkey) != ERR_OK ||
		(sig[0] ^= 1, g12sVerify(params, hash, sig, pubkey) == ERR_OK))
		return FALSE;
	// проверить кривую cryptoproA
	if (g12sStdParams(params, "1.2.643.2.2.35.1") != ERR_OK ||
		g12sValParams(params) != ERR_OK)
		return FALSE;
	// проверить кривую cryptoproB
	if (g12sStdParams(params, "1.2.643.2.2.35.2") != ERR_OK ||
		g12sValParams(params) != ERR_OK)
		return FALSE;
	// проверить кривую cryptoproC
	if (g12sStdParams(params, "1.2.643.2.2.35.3") != ERR_OK ||
		g12sValParams(params) != ERR_OK)
		return FALSE;
	// проверить кривую cryptocom
	if (g12sStdParams(params, "1.2.643.2.9.1.8.1") != ERR_OK ||
		g12sValParams(params) != ERR_OK)
		return FALSE;
	// проверить кривую paramsetA512
	if (g12sStdParams(params, "1.2.643.7.1.2.1.2.1") != ERR_OK ||
		g12sValParams(params) != ERR_OK)
		return FALSE;
	// проверить кривую paramsetB512
	if (g12sStdParams(params, "1.2.643.7.1.2.1.2.2") != ERR_OK ||
		g12sValParams(params) != ERR_OK)
		return FALSE;
	// все нормально
	return TRUE;
}