/// <summary> /// Step 2: Generate transport integer a where: /// a = (g ^ secret) mod p /// </summary> /// <param name="secret"></param> /// <param name="diffieHellmanPublicKeystore">p and g</param> /// <returns></returns> public BigInteger GenerateTransport(int secret, DiffieHellmanPublicKeystore diffieHellmanPublicKeystore) { var raised = BigInteger.Pow(diffieHellmanPublicKeystore.G, secret); var result = raised % diffieHellmanPublicKeystore.P; return(result); }
/// <summary> /// Step 3: Generate shared secret /// </summary> /// <param name="secret"></param> /// <param name="receivedTransport"></param> /// <param name="diffieHellmanPublicKeystore"></param> /// <returns></returns> public BigInteger GenerateSharedSecret(int secret, BigInteger receivedTransport, DiffieHellmanPublicKeystore diffieHellmanPublicKeystore) { var raised = BigInteger.Pow(receivedTransport, secret); var result = raised % diffieHellmanPublicKeystore.P; return(result); }