From 127a957aee7bf7ae242a606d035e9e3d9b300307 Mon Sep 17 00:00:00 2001 From: Jay Berkenbilt Date: Tue, 5 Nov 2019 21:14:37 -0500 Subject: Allow runtime inspection/override of crypto provider --- libqpdf/QPDFCryptoProvider.cc | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) (limited to 'libqpdf') 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 #include +#include #include #ifdef USE_CRYPTO_NATIVE @@ -49,7 +50,12 @@ QPDFCryptoProvider::QPDFCryptoProvider() : #ifdef USE_CRYPTO_GNUTLS registerImpl_internal("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 +QPDFCryptoProvider::getRegisteredImpls() +{ + std::set 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; +} -- cgit v1.2.3-70-g09d2