aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf/QPDFCrypto_native.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libqpdf/QPDFCrypto_native.cc')
-rw-r--r--libqpdf/QPDFCrypto_native.cc35
1 files changed, 35 insertions, 0 deletions
diff --git a/libqpdf/QPDFCrypto_native.cc b/libqpdf/QPDFCrypto_native.cc
index d078ba77..389b5708 100644
--- a/libqpdf/QPDFCrypto_native.cc
+++ b/libqpdf/QPDFCrypto_native.cc
@@ -1,6 +1,41 @@
#include <qpdf/QPDFCrypto_native.hh>
#include <qpdf/QUtil.hh>
+#ifdef USE_INSECURE_RANDOM
+# include <qpdf/InsecureRandomDataProvider.hh>
+#endif
+#include <qpdf/SecureRandomDataProvider.hh>
+
+static RandomDataProvider* getRandomProvider()
+{
+#ifdef USE_INSECURE_RANDOM
+ static RandomDataProvider* insecure_random_data_provider =
+ InsecureRandomDataProvider::getInstance();
+#else
+ static RandomDataProvider* insecure_random_data_provider = 0;
+#endif
+ static RandomDataProvider* secure_random_data_provider =
+ SecureRandomDataProvider::getInstance();
+
+ static RandomDataProvider* provider = (
+ secure_random_data_provider ? secure_random_data_provider
+ : insecure_random_data_provider ? insecure_random_data_provider
+ : 0);
+
+ if (provider == 0)
+ {
+ throw std::logic_error("QPDFCrypto_native has no random data provider");
+ }
+
+ return provider;
+}
+
+void
+QPDFCrypto_native::provideRandomData(unsigned char* data, size_t len)
+{
+ getRandomProvider()->provideRandomData(data, len);
+}
+
void
QPDFCrypto_native::MD5_init()
{