summaryrefslogtreecommitdiffstats
path: root/libtests
diff options
context:
space:
mode:
Diffstat (limited to 'libtests')
-rw-r--r--libtests/build.mk1
-rw-r--r--libtests/qtest/random.test16
-rw-r--r--libtests/random.cc65
3 files changed, 82 insertions, 0 deletions
diff --git a/libtests/build.mk b/libtests/build.mk
index 7a535953..22d9299e 100644
--- a/libtests/build.mk
+++ b/libtests/build.mk
@@ -12,6 +12,7 @@ BINS_libtests = \
png_filter \
pointer_holder \
qutil \
+ random \
rc4 \
sha2
diff --git a/libtests/qtest/random.test b/libtests/qtest/random.test
new file mode 100644
index 00000000..c3b4b9d7
--- /dev/null
+++ b/libtests/qtest/random.test
@@ -0,0 +1,16 @@
+#!/usr/bin/env perl
+require 5.008;
+BEGIN { $^W = 1; }
+use strict;
+
+require TestDriver;
+
+my $td = new TestDriver('random');
+
+$td->runtest("Random Data Providers",
+ {$td->COMMAND => "random"},
+ {$td->STRING => "random: end of tests\n",
+ $td->EXIT_STATUS => 0},
+ $td->NORMALIZE_NEWLINES);
+
+$td->report(1);
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;
+}