diff options
author | Adam Ierymenko <adam.ierymenko@gmail.com> | 2013-09-13 19:18:01 -0400 |
---|---|---|
committer | Adam Ierymenko <adam.ierymenko@gmail.com> | 2013-09-13 19:18:01 -0400 |
commit | 09c8b4bbb37250df95ee898bcd6a0e090049d225 (patch) | |
tree | 50be7c31ef565eb2c8accfe4c2a60a8fc66b285f /selftest.cpp | |
parent | b2bb7b41fc3b1c5f33afbbe685064ee4442efe85 (diff) | |
download | infinitytier-09c8b4bbb37250df95ee898bcd6a0e090049d225.tar.gz infinitytier-09c8b4bbb37250df95ee898bcd6a0e090049d225.zip |
More new crypto: Ed25519 signatures.
Diffstat (limited to 'selftest.cpp')
-rw-r--r-- | selftest.cpp | 38 |
1 files changed, 37 insertions, 1 deletions
diff --git a/selftest.cpp b/selftest.cpp index c9e41034..56352ff6 100644 --- a/selftest.cpp +++ b/selftest.cpp @@ -112,7 +112,7 @@ static int testCrypto() C25519::agree(p2,p1.pub,buf2,64); C25519::agree(p3,p1.pub,buf3,64); if (memcmp(buf1,buf2,64)) { - std::cout << "FAIL" << std::endl; + std::cout << "FAIL (1)" << std::endl; return -1; } if (!memcmp(buf2,buf3,64)) { @@ -122,6 +122,42 @@ static int testCrypto() } std::cout << "PASS" << std::endl; + std::cout << "[crypto] Testing Ed25519 ECC signatures... "; std::cout.flush(); + C25519::Pair didntSign = C25519::generate(); + for(unsigned int i=0;i<10;++i) { + C25519::Pair p1 = C25519::generate(); + for(unsigned int k=0;k<sizeof(buf1);++k) + buf1[k] = (unsigned char)rand(); + C25519::Signature sig = C25519::sign(p1,buf1,sizeof(buf1)); + if (!C25519::verify(p1.pub,buf1,sizeof(buf1),sig)) { + std::cout << "FAIL (1)" << std::endl; + return -1; + } + ++buf1[17]; + if (C25519::verify(p1.pub,buf1,sizeof(buf1),sig)) { + std::cout << "FAIL (2)" << std::endl; + return -1; + } + --buf1[17]; + if (!C25519::verify(p1.pub,buf1,sizeof(buf1),sig)) { + std::cout << "FAIL (3)" << std::endl; + return -1; + } + if (C25519::verify(didntSign.pub,buf1,sizeof(buf1),sig)) { + std::cout << "FAIL (2)" << std::endl; + return -1; + } + for(unsigned int k=0;k<64;++k) { + C25519::Signature sig2(sig); + sig2.data[rand() % sig2.size()] ^= (unsigned char)(1 << (rand() & 7)); + if (C25519::verify(p1.pub,buf1,sizeof(buf1),sig2)) { + std::cout << "FAIL (5)" << std::endl; + return -1; + } + } + } + std::cout << "PASS" << std::endl; + std::cout << "[crypto] Testing Salsa20... "; std::cout.flush(); for(unsigned int i=0;i<4;++i) { for(unsigned int k=0;k<sizeof(buf1);++k) |