aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/qpdf/QUtil.hh20
-rw-r--r--include/qpdf/RandomDataProvider.hh32
2 files changed, 52 insertions, 0 deletions
diff --git a/include/qpdf/QUtil.hh b/include/qpdf/QUtil.hh
index cbdc065c..f61fa844 100644
--- a/include/qpdf/QUtil.hh
+++ b/include/qpdf/QUtil.hh
@@ -15,6 +15,8 @@
#include <stdexcept>
#include <stdio.h>
+class RandomDataProvider;
+
namespace QUtil
{
// This is a collection of useful utility functions that don't
@@ -123,8 +125,26 @@ namespace QUtil
QPDF_DLL
void srandom(unsigned int seed);
+ // Initialize a buffer with random bytes. By default, qpdf tries
+ // to use a secure random number source. It can be configured at
+ // compile time to use an insecure random number source (from
+ // stdlib). You can also call setRandomDataProvider with a
+ // RandomDataProvider, in which case this method will get its
+ // random bytes from that.
+
QPDF_DLL
void initializeWithRandomBytes(unsigned char* data, size_t len);
+
+ // Supply a random data provider. If not supplied, depending on
+ // compile time options, qpdf will either use the operating
+ // system's secure random number source or an insecure random
+ // source from stdlib. The caller is responsible for managing the
+ // memory for the RandomDataProvider. This method modifies a
+ // static variable. If you are providing your own random data
+ // provider, you should call this at the beginning of your program
+ // before creating any QPDF objects.
+ QPDF_DLL
+ void setRandomDataProvider(RandomDataProvider*);
};
#endif // __QUTIL_HH__
diff --git a/include/qpdf/RandomDataProvider.hh b/include/qpdf/RandomDataProvider.hh
new file mode 100644
index 00000000..68c9cb6e
--- /dev/null
+++ b/include/qpdf/RandomDataProvider.hh
@@ -0,0 +1,32 @@
+/* Copyright (c) 2005-2013 Jay Berkenbilt
+ *
+ * This file is part of qpdf. This software may be distributed under
+ * the terms of version 2 of the Artistic License which may be found
+ * in the source distribution. It is provided "as is" without express
+ * or implied warranty.
+ */
+
+#ifndef __RANDOMDATAPROVIDER_HH__
+#define __RANDOMDATAPROVIDER_HH__
+
+#include <string.h> // for size_t
+
+class RandomDataProvider
+{
+ public:
+ virtual ~RandomDataProvider()
+ {
+ }
+ virtual void provideRandomData(unsigned char* data, size_t len) = 0;
+
+ protected:
+ RandomDataProvider()
+ {
+ }
+
+ private:
+ RandomDataProvider(RandomDataProvider const&);
+ RandomDataProvider& operator=(RandomDataProvider const&);
+};
+
+#endif // __RANDOMDATAPROVIDER_HH__