|
@@ -51,6 +51,7 @@
|
|
#include "node/SHA512.hpp"
|
|
#include "node/SHA512.hpp"
|
|
#include "node/C25519.hpp"
|
|
#include "node/C25519.hpp"
|
|
#include "node/Poly1305.hpp"
|
|
#include "node/Poly1305.hpp"
|
|
|
|
+#include "node/CertificateOfMembership.hpp"
|
|
|
|
|
|
#ifdef __WINDOWS__
|
|
#ifdef __WINDOWS__
|
|
#include <tchar.h>
|
|
#include <tchar.h>
|
|
@@ -307,6 +308,81 @@ static int testIdentity()
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static int testCertificate()
|
|
|
|
+{
|
|
|
|
+ Identity authority;
|
|
|
|
+ std::cout << "[certificate] Generating identity to act as authority... "; std::cout.flush();
|
|
|
|
+ authority.generate();
|
|
|
|
+ std::cout << authority.address().toString() << std::endl;
|
|
|
|
+
|
|
|
|
+ Identity idA,idB;
|
|
|
|
+ std::cout << "[certificate] Generating identities A and B... "; std::cout.flush();
|
|
|
|
+ idA.generate();
|
|
|
|
+ idB.generate();
|
|
|
|
+ std::cout << idA.address().toString() << ", " << idB.address().toString() << std::endl;
|
|
|
|
+
|
|
|
|
+ std::cout << "[certificate] Generating certificates A and B...";
|
|
|
|
+ CertificateOfMembership cA(10000,100,1,idA.address());
|
|
|
|
+ CertificateOfMembership cB(10099,100,1,idB.address());
|
|
|
|
+ std::cout << std::endl;
|
|
|
|
+
|
|
|
|
+ std::cout << "[certificate] Signing certificates A and B with authority...";
|
|
|
|
+ cA.sign(authority);
|
|
|
|
+ cB.sign(authority);
|
|
|
|
+ std::cout << std::endl;
|
|
|
|
+
|
|
|
|
+ //std::cout << "[certificate] A: " << cA.toString() << std::endl;
|
|
|
|
+ //std::cout << "[certificate] B: " << cB.toString() << std::endl;
|
|
|
|
+
|
|
|
|
+ std::cout << "[certificate] A agrees with B and B with A... ";
|
|
|
|
+ if (cA.agreesWith(cB))
|
|
|
|
+ std::cout << "yes, ";
|
|
|
|
+ else {
|
|
|
|
+ std::cout << "FAIL" << std::endl;
|
|
|
|
+ return -1;
|
|
|
|
+ }
|
|
|
|
+ if (cB.agreesWith(cA))
|
|
|
|
+ std::cout << "yes." << std::endl;
|
|
|
|
+ else {
|
|
|
|
+ std::cout << "FAIL" << std::endl;
|
|
|
|
+ return -1;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ std::cout << "[certificate] Testing string serialization... ";
|
|
|
|
+ CertificateOfMembership copyA(cA.toString());
|
|
|
|
+ CertificateOfMembership copyB(cB.toString());
|
|
|
|
+ if (copyA != cA) {
|
|
|
|
+ std::cout << "FAIL" << std::endl;
|
|
|
|
+ return -1;
|
|
|
|
+ }
|
|
|
|
+ if (copyB != cB) {
|
|
|
|
+ std::cout << "FAIL" << std::endl;
|
|
|
|
+ return -1;
|
|
|
|
+ }
|
|
|
|
+ std::cout << "PASS" << std::endl;
|
|
|
|
+
|
|
|
|
+ std::cout << "[certificate] Generating two certificates that should not agree...";
|
|
|
|
+ cA = CertificateOfMembership(10000,100,1,idA.address());
|
|
|
|
+ cB = CertificateOfMembership(10101,100,1,idB.address());
|
|
|
|
+ std::cout << std::endl;
|
|
|
|
+
|
|
|
|
+ std::cout << "[certificate] A agrees with B and B with A... ";
|
|
|
|
+ if (!cA.agreesWith(cB))
|
|
|
|
+ std::cout << "no, ";
|
|
|
|
+ else {
|
|
|
|
+ std::cout << "FAIL" << std::endl;
|
|
|
|
+ return -1;
|
|
|
|
+ }
|
|
|
|
+ if (!cB.agreesWith(cA))
|
|
|
|
+ std::cout << "no." << std::endl;
|
|
|
|
+ else {
|
|
|
|
+ std::cout << "FAIL" << std::endl;
|
|
|
|
+ return -1;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return 0;
|
|
|
|
+}
|
|
|
|
+
|
|
static int testPacket()
|
|
static int testPacket()
|
|
{
|
|
{
|
|
unsigned char salsaKey[32],hmacKey[32];
|
|
unsigned char salsaKey[32],hmacKey[32];
|
|
@@ -476,10 +552,14 @@ int main(int argc,char **argv)
|
|
|
|
|
|
srand((unsigned int)time(0));
|
|
srand((unsigned int)time(0));
|
|
|
|
|
|
|
|
+ r |= testCertificate();
|
|
|
|
+ /*
|
|
r |= testCrypto();
|
|
r |= testCrypto();
|
|
r |= testPacket();
|
|
r |= testPacket();
|
|
r |= testOther();
|
|
r |= testOther();
|
|
r |= testIdentity();
|
|
r |= testIdentity();
|
|
|
|
+ r |= testCertificate();
|
|
|
|
+ */
|
|
|
|
|
|
if (r)
|
|
if (r)
|
|
std::cout << std::endl << "SOMETHING FAILED!" << std::endl;
|
|
std::cout << std::endl << "SOMETHING FAILED!" << std::endl;
|