#include #include /* Example calculation of Diffie-Helman key exchange Author: Tim Pierson, Dartmouth CS55, Winter 2021 compile: gcc diffie_helman.c -lm note: add -lm to get math library, even though imported: https://stackoverflow.com/questions/12824134/undefined-reference-to-pow-in-c-despite-including-math-h run: a.out */ void main() { int g = 5; //prime, known to alice, bob, eve int p = 23; //prime, known to alice, bob, eve int a = 6; //random private, known only to alice int b = 15; //random private, known only to bob //alice knows g, p, and a //bob knows g, p, and b //eve knows g, p //alice sends to bob g^a mod p //bob sends to alice g^b mod p int a_to_b = (long long)(pow(g,a)) % p; printf("atob %i\n",a_to_b); int b_to_a = (long long)(pow(g,b)) % p; printf("btoa %i\n",b_to_a); //eve sees both a_to_b and b_to_a //alice calcualtes b_to_a^a % p //bob calculates a_to_b^b %p int alice = (long long)(pow(b_to_a,a)) % p; int bob = (long long)(pow(a_to_b,b)) % p; printf("Alice calculates %i\n",alice); printf("Bob calculates %i\n",bob); }