diff options
author | Jay Berkenbilt <ejb@ql.org> | 2019-11-06 03:14:37 +0100 |
---|---|---|
committer | Jay Berkenbilt <ejb@ql.org> | 2019-11-09 15:53:42 +0100 |
commit | 127a957aee7bf7ae242a606d035e9e3d9b300307 (patch) | |
tree | 4a8df19c744ac408a8c19d9d944a551c90aa788b /libqpdf/QPDFCryptoProvider.cc | |
parent | fb4c6c150345c76c73de7cdfcb48caab34c5cab6 (diff) | |
download | qpdf-127a957aee7bf7ae242a606d035e9e3d9b300307.tar.zst |
Allow runtime inspection/override of crypto provider
Diffstat (limited to 'libqpdf/QPDFCryptoProvider.cc')
-rw-r--r-- | libqpdf/QPDFCryptoProvider.cc | 34 |
1 files changed, 33 insertions, 1 deletions
diff --git a/libqpdf/QPDFCryptoProvider.cc b/libqpdf/QPDFCryptoProvider.cc index 133a16f7..5755fcca 100644 --- a/libqpdf/QPDFCryptoProvider.cc +++ b/libqpdf/QPDFCryptoProvider.cc @@ -1,5 +1,6 @@ #include <qpdf/QPDFCryptoProvider.hh> #include <qpdf/qpdf-config.h> +#include <qpdf/QUtil.hh> #include <stdexcept> #ifdef USE_CRYPTO_NATIVE @@ -49,7 +50,12 @@ QPDFCryptoProvider::QPDFCryptoProvider() : #ifdef USE_CRYPTO_GNUTLS registerImpl_internal<QPDFCrypto_gnutls>("gnutls"); #endif - setDefaultProvider_internal(DEFAULT_CRYPTO); + std::string default_crypto; + if (! QUtil::get_env("QPDF_CRYPTO_PROVIDER", &default_crypto)) + { + default_crypto = DEFAULT_CRYPTO; + } + setDefaultProvider_internal(default_crypto); } QPDFCryptoProvider& @@ -83,5 +89,31 @@ QPDFCryptoProvider::registerImpl_internal(std::string const& name) void QPDFCryptoProvider::setDefaultProvider_internal(std::string const& name) { + if (! this->m->providers.count(name)) + { + throw std::logic_error( + "QPDFCryptoProvider: request to set default" + " provider to unknown implementation \"" + + name + "\""); + } this->m->default_provider = name; } + +std::set<std::string> +QPDFCryptoProvider::getRegisteredImpls() +{ + std::set<std::string> result; + QPDFCryptoProvider& p = getInstance(); + for (auto iter = p.m->providers.begin(); iter != p.m->providers.end(); + ++iter) + { + result.insert((*iter).first); + } + return result; +} + +std::string +QPDFCryptoProvider::getDefaultProvider() +{ + return getInstance().m->default_provider; +} |