Diffie-Hellman key exchange.
Alice and Bob use Diffie-Hellman key exchange to share secrets. They start with prime numbers, pick private keys, generate and share public keys, and then generate a shared secret key.
The test program supplies prime numbers p and g.
Alice picks a private key, a, greater than 1 and less than p. Bob does the same to pick a private key b.
Alice calculates a public key A.
A = gᵃ mod p
Using the same p and g, Bob similarly calculates a public key B from his private key b.
Alice and Bob exchange public keys. Alice calculates secret key s.
s = Bᵃ mod p
s = Aᵇ mod p
The calculations produce the same result! Alice and Bob now share secret s.
One possible solution for this exercise is to implement your own modular exponentiation function. To learn more about it refer to the following page.
Many implementations do not work for the entire domain of inputs. There are additional optional tests defined which help ensure that all valid inputs produce valid results.
To run the bonus tests, remove the
#[ignore] flag and execute the tests with
big-primes feature, like this:
$ cargo test --features big-primes