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; }
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; }
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; }
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; }