Навигация по репозиторию:
- документация - documentation/..
- реализация - realization/..
- демонстрация - demonstration/..
- логгирование (в формате jsonl) - Logging.jsonl
- Сравнение через xor - не дает никакой информации о времени сравнения ,что может позволить понять с какого символа/цифры ответ злоумышленника неправильный
- Добавлена временная метка
- R=[k]*G
R = curve.get_G() * k;
- Yi =∑[-xi]*G
for (int i = 0; i < m; ++i) {
mpz_class mult = (-xi[i]) % curve.get_order();
while (mult < 0) {
mult += curve.get_order();
}
Y[i] = curve.get_G() * mult;
}
- ( a1, ..., am ) ∈ {0, 1}m
std::random_device dev;
std::mt19937 rng(dev());
std::uniform_int_distribution<std::mt19937::result_type> dist6(
0, std::numeric_limits<int>::max());
int random = dist6(rng);
mpz_class bit_string = random % static_cast<int>(pow(2, Y.size())); //длины m
- s=k+aixi
s = k + (sum(binary_string)) % q;
- R=[s]G+ ∑[ai]Yi
Point sG = curve.get_G() * s;
Point d = sum(binary, Y) + sG;
bool flag = false;
for (size_t i = 0; i < d.x.get_str(2).length(); ++i)
{
flag |= d.x.get_str(2)[i] ^ R.x.get_str(2)[i];
}
for (size_t j = 0; j < d.y.get_str(2).length(); ++j)
{
flag |= d.y.get_str(2)[j] ^ R.y.get_str(2)[j];
}
return !flag;