/* */ #ifndef D_LIBGCRYPT_DH_KEY_EXCHANGE_H #define D_LIBGCRYPT_DH_KEY_EXCHANGE_H #include "common.h" #include namespace aria2 { class DHKeyExchange { private: size_t keyLength_; gcry_mpi_t prime_; gcry_mpi_t generator_; gcry_mpi_t privateKey_; gcry_mpi_t publicKey_; public: DHKeyExchange(); ~DHKeyExchange(); void init(const unsigned char* prime, size_t primeBits, const unsigned char* generator, size_t privateKeyBits); void generatePublicKey(); size_t getPublicKey(unsigned char* out, size_t outLength) const; void generateNonce(unsigned char* out, size_t outLength) const; size_t computeSecret(unsigned char* out, size_t outLength, const unsigned char* peerPublicKeyData, size_t peerPublicKeyLength) const; }; } // namespace aria2 #endif // D_LIBGCRYPT_DH_KEY_EXCHANGE_H