summaryrefslogtreecommitdiff
path: root/src/LibsslDHKeyExchange.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2016-03-26 17:12:52 +0900
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2016-03-26 17:20:27 +0900
commitd64089632e82a2548752c7a6baaa68365a795a74 (patch)
tree57fc7b85a8c1290975d58fa4761b04a7695bf7e3 /src/LibsslDHKeyExchange.cc
parentc81b1321122e8509b55c94c0cbca0d8d6d319f0c (diff)
parenta7cd943a06b1a5ff4515b57060b84037f8d01f9f (diff)
Merge branch 'master' into random-webseeding
Diffstat (limited to 'src/LibsslDHKeyExchange.cc')
-rw-r--r--src/LibsslDHKeyExchange.cc97
1 files changed, 48 insertions, 49 deletions
diff --git a/src/LibsslDHKeyExchange.cc b/src/LibsslDHKeyExchange.cc
index 82daa433..ca4e3947 100644
--- a/src/LibsslDHKeyExchange.cc
+++ b/src/LibsslDHKeyExchange.cc
@@ -47,20 +47,21 @@ namespace aria2 {
namespace {
void handleError(const std::string& funName)
{
- throw DL_ABORT_EX
- (fmt("Exception in libssl routine %s(DHKeyExchange class): %s",
- funName.c_str(), ERR_error_string(ERR_get_error(), nullptr)));
+ throw DL_ABORT_EX(
+ fmt("Exception in libssl routine %s(DHKeyExchange class): %s",
+ funName.c_str(), ERR_error_string(ERR_get_error(), nullptr)));
}
} // namespace
DHKeyExchange::DHKeyExchange()
- : bnCtx_(nullptr),
- keyLength_(0),
- prime_(nullptr),
- generator_(nullptr),
- privateKey_(nullptr),
- publicKey_(nullptr)
-{}
+ : bnCtx_(nullptr),
+ keyLength_(0),
+ prime_(nullptr),
+ generator_(nullptr),
+ privateKey_(nullptr),
+ publicKey_(nullptr)
+{
+}
DHKeyExchange::~DHKeyExchange()
{
@@ -72,12 +73,11 @@ DHKeyExchange::~DHKeyExchange()
}
void DHKeyExchange::init(const unsigned char* prime, size_t primeBits,
- const unsigned char* generator,
- size_t privateKeyBits)
+ const unsigned char* generator, size_t privateKeyBits)
{
BN_CTX_free(bnCtx_);
bnCtx_ = BN_CTX_new();
- if(!bnCtx_) {
+ if (!bnCtx_) {
handleError("BN_CTX_new in init");
}
@@ -88,17 +88,17 @@ void DHKeyExchange::init(const unsigned char* prime, size_t primeBits,
BN_free(privateKey_);
privateKey_ = nullptr;
- if(BN_hex2bn(&prime_, reinterpret_cast<const char*>(prime)) == 0) {
+ if (BN_hex2bn(&prime_, reinterpret_cast<const char*>(prime)) == 0) {
handleError("BN_hex2bn in init");
}
- if(BN_hex2bn(&generator_, reinterpret_cast<const char*>(generator)) == 0) {
+ if (BN_hex2bn(&generator_, reinterpret_cast<const char*>(generator)) == 0) {
handleError("BN_hex2bn in init");
}
privateKey_ = BN_new();
- if(BN_rand(privateKey_, privateKeyBits, -1, false) == 0) {
+ if (BN_rand(privateKey_, privateKeyBits, -1, false) == 0) {
handleError("BN_new in init");
}
- keyLength_ = (primeBits+7)/8;
+ keyLength_ = (primeBits + 7) / 8;
}
void DHKeyExchange::generatePublicKey()
@@ -108,32 +108,31 @@ void DHKeyExchange::generatePublicKey()
BN_mod_exp(publicKey_, generator_, privateKey_, prime_, bnCtx_);
}
-size_t DHKeyExchange::getPublicKey
-(unsigned char* out, size_t outLength) const
+size_t DHKeyExchange::getPublicKey(unsigned char* out, size_t outLength) const
{
- if(outLength < keyLength_) {
- throw DL_ABORT_EX
- (fmt("Insufficient buffer for public key. expect:%lu, actual:%lu",
- static_cast<unsigned long>(keyLength_),
- static_cast<unsigned long>(outLength)));
+ if (outLength < keyLength_) {
+ throw DL_ABORT_EX(
+ fmt("Insufficient buffer for public key. expect:%lu, actual:%lu",
+ static_cast<unsigned long>(keyLength_),
+ static_cast<unsigned long>(outLength)));
}
memset(out, 0, outLength);
size_t publicKeyBytes = BN_num_bytes(publicKey_);
- size_t offset = keyLength_-publicKeyBytes;
- size_t nwritten = BN_bn2bin(publicKey_, out+offset);
- if(nwritten != publicKeyBytes) {
- throw DL_ABORT_EX
- (fmt("BN_bn2bin in DHKeyExchange::getPublicKey, %lu bytes written,"
- " but %lu bytes expected.",
- static_cast<unsigned long>(nwritten),
- static_cast<unsigned long>(publicKeyBytes)));
+ size_t offset = keyLength_ - publicKeyBytes;
+ size_t nwritten = BN_bn2bin(publicKey_, out + offset);
+ if (nwritten != publicKeyBytes) {
+ throw DL_ABORT_EX(
+ fmt("BN_bn2bin in DHKeyExchange::getPublicKey, %lu bytes written,"
+ " but %lu bytes expected.",
+ static_cast<unsigned long>(nwritten),
+ static_cast<unsigned long>(publicKeyBytes)));
}
return nwritten;
}
void DHKeyExchange::generateNonce(unsigned char* out, size_t outLength) const
{
- if(RAND_bytes(out, outLength) != 1) {
+ if (RAND_bytes(out, outLength) != 1) {
handleError("RAND_bytes in generateNonce");
}
}
@@ -142,16 +141,16 @@ size_t DHKeyExchange::computeSecret(unsigned char* out, size_t outLength,
const unsigned char* peerPublicKeyData,
size_t peerPublicKeyLength) const
{
- if(outLength < keyLength_) {
- throw DL_ABORT_EX
- (fmt("Insufficient buffer for secret. expect:%lu, actual:%lu",
- static_cast<unsigned long>(keyLength_),
- static_cast<unsigned long>(outLength)));
+ if (outLength < keyLength_) {
+ throw DL_ABORT_EX(
+ fmt("Insufficient buffer for secret. expect:%lu, actual:%lu",
+ static_cast<unsigned long>(keyLength_),
+ static_cast<unsigned long>(outLength)));
}
-
- BIGNUM* peerPublicKey = BN_bin2bn(peerPublicKeyData, peerPublicKeyLength, nullptr);
- if(!peerPublicKey) {
+ BIGNUM* peerPublicKey =
+ BN_bin2bn(peerPublicKeyData, peerPublicKeyLength, nullptr);
+ if (!peerPublicKey) {
handleError("BN_bin2bn in computeSecret");
}
@@ -161,15 +160,15 @@ size_t DHKeyExchange::computeSecret(unsigned char* out, size_t outLength,
memset(out, 0, outLength);
size_t secretBytes = BN_num_bytes(secret);
- size_t offset = keyLength_-secretBytes;
- size_t nwritten = BN_bn2bin(secret, out+offset);
+ size_t offset = keyLength_ - secretBytes;
+ size_t nwritten = BN_bn2bin(secret, out + offset);
BN_free(secret);
- if(nwritten != secretBytes) {
- throw DL_ABORT_EX
- (fmt("BN_bn2bin in DHKeyExchange::getPublicKey, %lu bytes written,"
- " but %lu bytes expected.",
- static_cast<unsigned long>(nwritten),
- static_cast<unsigned long>(secretBytes)));
+ if (nwritten != secretBytes) {
+ throw DL_ABORT_EX(
+ fmt("BN_bn2bin in DHKeyExchange::getPublicKey, %lu bytes written,"
+ " but %lu bytes expected.",
+ static_cast<unsigned long>(nwritten),
+ static_cast<unsigned long>(secretBytes)));
}
return nwritten;
}