diff options
Diffstat (limited to 'libqpdf/QPDFCrypto_native.cc')
-rw-r--r-- | libqpdf/QPDFCrypto_native.cc | 35 |
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() { |