/* */ #include "LibgnutlsTLSContext.h" #ifdef HAVE_LIBGNUTLS # include #endif // HAVE_LIBGNUTLS #include "LogFactory.h" #include "Logger.h" #include "StringFormat.h" #include "message.h" namespace aria2 { TLSContext::TLSContext():certCred_(0), peerVerificationEnabled_(false), logger_(LogFactory::getInstance()) { int r = gnutls_certificate_allocate_credentials(&certCred_); if(r == GNUTLS_E_SUCCESS) { good_ = true; gnutls_certificate_set_verify_flags(certCred_, GNUTLS_VERIFY_ALLOW_X509_V1_CA_CRT); } else { good_ =false; logger_->error("gnutls_certificate_allocate_credentials() failed." " Cause: %s", gnutls_strerror(r)); } } TLSContext::~TLSContext() { if(certCred_) { gnutls_certificate_free_credentials(certCred_); } } bool TLSContext::good() const { return good_; } bool TLSContext::bad() const { return !good_; } bool TLSContext::addClientKeyFile(const std::string& certfile, const std::string& keyfile) { int ret = gnutls_certificate_set_x509_key_file(certCred_, certfile.c_str(), keyfile.c_str(), GNUTLS_X509_FMT_PEM); if(ret == GNUTLS_E_SUCCESS) { logger_->info("Client Key File(cert=%s, key=%s) were successfully added.", certfile.c_str(), keyfile.c_str()); return true; } else { logger_->error("Failed to load client certificate from %s and" " private key from %s. Cause: %s", certfile.c_str(), keyfile.c_str(), gnutls_strerror(ret)); return false; } } bool TLSContext::addTrustedCACertFile(const std::string& certfile) { int ret = gnutls_certificate_set_x509_trust_file(certCred_, certfile.c_str(), GNUTLS_X509_FMT_PEM); if(ret < 0) { logger_->error(MSG_LOADING_TRUSTED_CA_CERT_FAILED, certfile.c_str(), gnutls_strerror(ret)); return false; } else { logger_->info("%d certificate(s) were imported.", ret); return true; } } gnutls_certificate_credentials_t TLSContext::getCertCred() const { return certCred_; } void TLSContext::enablePeerVerification() { peerVerificationEnabled_ = true; } void TLSContext::disablePeerVerification() { peerVerificationEnabled_ = false; } bool TLSContext::peerVerificationEnabled() const { return peerVerificationEnabled_; } } // namespace aria2