summaryrefslogtreecommitdiffstats
path: root/libtests/random.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libtests/random.cc')
-rw-r--r--libtests/random.cc65
1 files changed, 65 insertions, 0 deletions
diff --git a/libtests/random.cc b/libtests/random.cc
new file mode 100644
index 00000000..644fdd91
--- /dev/null
+++ b/libtests/random.cc
@@ -0,0 +1,65 @@
+#include <qpdf/QUtil.hh>
+#include <qpdf/InsecureRandomDataProvider.hh>
+#include <qpdf/SecureRandomDataProvider.hh>
+#include <iostream>
+
+class BogusRandomDataProvider: public RandomDataProvider
+{
+ public:
+ virtual ~BogusRandomDataProvider()
+ {
+ }
+ BogusRandomDataProvider()
+ {
+ }
+ virtual void provideRandomData(unsigned char* data, size_t len)
+ {
+ for (size_t i = 0; i < len; ++i)
+ {
+ data[i] = static_cast<unsigned char>(i & 0xff);
+ }
+ }
+};
+
+int main()
+{
+ long r1 = QUtil::random();
+ long r2 = QUtil::random();
+ if (r1 == r2)
+ {
+ std::cout << "fail: two randoms were the same\n";
+ }
+ InsecureRandomDataProvider irdp;
+ irdp.provideRandomData(reinterpret_cast<unsigned char*>(&r1), 4);
+ irdp.provideRandomData(reinterpret_cast<unsigned char*>(&r2), 4);
+ if (r1 == r2)
+ {
+ std::cout << "fail: two insecure randoms were the same\n";
+ }
+ SecureRandomDataProvider srdp;
+ srdp.provideRandomData(reinterpret_cast<unsigned char*>(&r1), 4);
+ srdp.provideRandomData(reinterpret_cast<unsigned char*>(&r2), 4);
+ if (r1 == r2)
+ {
+ std::cout << "fail: two secure randoms were the same\n";
+ }
+ BogusRandomDataProvider brdp;
+ QUtil::setRandomDataProvider(&brdp);
+ r1 = QUtil::random();
+ r2 = QUtil::random();
+ if (r1 != r2)
+ {
+ std::cout << "fail: two bogus randoms were different\n";
+ }
+ unsigned char buf[4];
+ QUtil::initializeWithRandomBytes(buf, 4);
+ if (! ((buf[0] == 0) &&
+ (buf[1] == 1) &&
+ (buf[2] == 2) &&
+ (buf[3] == 3)))
+ {
+ std::cout << "fail: bogus random didn't provide correct bytes\n";
+ }
+ std::cout << "random: end of tests\n";
+ return 0;
+}