/* */ #ifndef D_LIBGMP_DH_KEY_EXCHANGE_H #define D_LIBGMP_DH_KEY_EXCHANGE_H #include "common.h" #include namespace aria2 { class DHKeyExchange { private: size_t keyLength_; mpz_t prime_; mpz_t generator_; mpz_t privateKey_; mpz_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_LIBGMP_DH_KEY_EXCHANGE_H