/* */ #ifndef D_LIBSSL_DH_KEY_EXCHANGE_H #define D_LIBSSL_DH_KEY_EXCHANGE_H #include "common.h" #include namespace aria2 { class DHKeyExchange { private: BN_CTX* bnCtx_; size_t keyLength_; BIGNUM* prime_; BIGNUM* generator_; BIGNUM* privateKey_; BIGNUM* 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_LIBSSL_DH_KEY_EXCHANGE_H