From: Fred Morcos Date: Wed, 27 Apr 2022 09:30:46 +0000 (+0200) Subject: RSA PEM export X-Git-Tag: auth-4.8.0-alpha0~115^2~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fd421a48655d1b1190596e8533d253f05ddffc95;p=thirdparty%2Fpdns.git RSA PEM export --- diff --git a/pdns/opensslsigners.cc b/pdns/opensslsigners.cc index 0123d29fc3..967c25f0f8 100644 --- a/pdns/opensslsigners.cc +++ b/pdns/opensslsigners.cc @@ -189,6 +189,19 @@ public: int getBits() const override { return RSA_size(d_key.get()) << 3; } void create(unsigned int bits) override; + + /** + * \brief Writes this key's contents to a file. + * + * Receives an open file handle and writes this key's contents to the + * file. + * + * \param[in] fp An open file handle for writing. + * + * \exception std::runtime_error In case of OpenSSL errors. + */ + void convertToPEM(std::FILE& fp) const override; + storvector_t convertToISCVector() const override; std::string hash(const std::string& hash) const override; std::string sign(const std::string& hash) const override; @@ -253,6 +266,12 @@ void OpenSSLRSADNSCryptoKeyEngine::create(unsigned int bits) d_key = std::move(key); } +void OpenSSLRSADNSCryptoKeyEngine::convertToPEM(std::FILE& fp) const { + auto ret = PEM_write_RSAPrivateKey(&fp, d_key.get(), nullptr, nullptr, 0, nullptr, nullptr); + if (ret == 0) { + throw runtime_error(getName() + ": Could not convert private key to PEM"); + } +} DNSCryptoKeyEngine::storvector_t OpenSSLRSADNSCryptoKeyEngine::convertToISCVector() const {