aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf/QPDFCryptoProvider.cc
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2019-11-06 03:14:37 +0100
committerJay Berkenbilt <ejb@ql.org>2019-11-09 15:53:42 +0100
commit127a957aee7bf7ae242a606d035e9e3d9b300307 (patch)
tree4a8df19c744ac408a8c19d9d944a551c90aa788b /libqpdf/QPDFCryptoProvider.cc
parentfb4c6c150345c76c73de7cdfcb48caab34c5cab6 (diff)
downloadqpdf-127a957aee7bf7ae242a606d035e9e3d9b300307.tar.zst
Allow runtime inspection/override of crypto provider
Diffstat (limited to 'libqpdf/QPDFCryptoProvider.cc')
-rw-r--r--libqpdf/QPDFCryptoProvider.cc34
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;
+}