summaryrefslogtreecommitdiffstats
path: root/src/tests/data/test_validate_key_material/readme.txt
diff options
context:
space:
mode:
Diffstat (limited to 'src/tests/data/test_validate_key_material/readme.txt')
-rw-r--r--src/tests/data/test_validate_key_material/readme.txt48
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;
+}