summaryrefslogtreecommitdiff
path: root/validat1.cpp
diff options
context:
space:
mode:
authorJeffrey Walton <noloader@gmail.com>2017-08-20 07:01:59 -0400
committerJeffrey Walton <noloader@gmail.com>2017-08-20 07:01:59 -0400
commit88f08afcb0451f32e3db8e8e4929e046584b6ea4 (patch)
tree4beee31e00fb9601d279816a1d0edc046100fb9a /validat1.cpp
parent855922b2ca8c27c9a29f73df6f45cf132e4a7d85 (diff)
downloadcryptopp-git-88f08afcb0451f32e3db8e8e4929e046584b6ea4.tar.gz
Add additional VIA RNG tests
The are configurations tests as recommended by Cryptography Research, Inc in their 2003 audit report
Diffstat (limited to 'validat1.cpp')
-rw-r--r--validat1.cpp57
1 files changed, 57 insertions, 0 deletions
diff --git a/validat1.cpp b/validat1.cpp
index 650e5f20..fdeaaaed 100644
--- a/validat1.cpp
+++ b/validat1.cpp
@@ -1058,6 +1058,62 @@ bool TestMersenne()
{
PadlockRNG& padlock = dynamic_cast<PadlockRNG&>(*rng.get());
static const unsigned int SIZE = 10000;
+ SecByteBlock zero(16), one(16), t(16);
+ std::memset(zero, 0x00, 16);
+ std::memset( one, 0xff, 16);
+
+ // Cryptography Research, Inc tests
+ word32 oldDivisor = padlock.SetDivisor(0);
+ padlock.GenerateBlock(t, t.size());
+ word32 msr = padlock.GetMSR();
+ padlock.SetDivisor(oldDivisor);
+
+ // Bit 6 should be set
+ fail = !(msr & (1 << 6U));
+ pass &= !fail;
+ if (fail)
+ std::cout << "FAILED:";
+ else
+ std::cout << "passed:";
+ std::cout << " VIA RNG is activated\n";
+
+ // Bit 13 should be unset
+ fail = (msr & (1 << 13U));
+ pass &= !fail;
+ if (fail)
+ std::cout << "FAILED:";
+ else
+ std::cout << "passed:";
+ std::cout << " von Neumann corrector is activated\n";
+
+ // Bit 14 should be unset
+ fail = (msr & (1 << 14U));
+ pass &= !fail;
+ if (fail)
+ std::cout << "FAILED:";
+ else
+ std::cout << "passed:";
+ std::cout << " String filter is deactivated\n";
+
+ // Bit 12:10 should be unset
+ fail = (msr & (0x7 << 10U));
+ pass &= !fail;
+ if (fail)
+ std::cout << "FAILED:";
+ else
+ std::cout << "passed:";
+ std::cout << " Bias voltage is unmodified\n";
+
+ fail = false;
+ if (t == zero || t == one)
+ fail = true;
+
+ pass &= !fail;
+ if (fail)
+ std::cout << "FAILED:";
+ else
+ std::cout << "passed:";
+ std::cout << " All 0's or all 1's test\n";
MeterFilter meter(new Redirector(TheBitBucket()));
Deflator deflator(new Redirector(meter));
@@ -1072,6 +1128,7 @@ bool TestMersenne()
CRYPTOPP_ASSERT(0 == maurer.BytesNeeded());
const double mv = maurer.GetTestValue();
+ fail = false;
if (mv < 0.98f)
fail = true;