diff options
Diffstat (limited to 'src/tests/data/test_validate_key_material/readme.txt')
-rw-r--r-- | src/tests/data/test_validate_key_material/readme.txt | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/src/tests/data/test_validate_key_material/readme.txt b/src/tests/data/test_validate_key_material/readme.txt new file mode 100644 index 0000000..cf14e06 --- /dev/null +++ b/src/tests/data/test_validate_key_material/readme.txt @@ -0,0 +1,48 @@ +Some of ElGamal samples were generated by using the following custom key generation snippet: + +{ + std::unique_ptr<Botan::RandomNumberGenerator> rng; + rng.reset(new Botan::System_RNG); + + Botan::BigInt p = Botan::random_prime(*rng, keybits, 0, 2, 3, 64); + Botan::BigInt p1(p - 1); + Botan::BigInt sg = 1; + Botan::BigInt g; + + size_t mod = 2; + while (mod < 65536) { + if (p1 % mod == 0) { + if (sg * mod > (1 << 16)) { + break; + } + RNP_LOG("Reduced by %zu", mod); + p1 = p1 / mod; + sg *= mod; + continue; + } + mod++; + } + if (Botan::power_mod(3, p - 1, p).cmp_word(1) != 0) { + RNP_LOG("3 ^ (p - 1) != 1 (mod p)"); + goto end; + } + Botan::BigInt ng = Botan::power_mod(3, p1, p); + if (Botan::power_mod(ng, sg, p).cmp_word(1) != 0) { + RNP_LOG("ng ^ sg != 1 (mod p)"); + goto end; + } + g = ng; + + Botan::BigInt x(*rng, keybits, true); + Botan::BigInt y = Botan::power_mod(g, x, p); + + key->p.len = p.bytes(); + p.binary_encode(key->p.mpi); + key->g.len = g.bytes(); + g.binary_encode(key->g.mpi); + key->x.len = x.bytes(); + x.binary_encode(key->x.mpi); + key->y.len = y.bytes(); + y.binary_encode(key->y.mpi); + ret = RNP_SUCCESS; +} |