void ECDHTests::testDeriveKnownVector() { ECPublicKey* pubKeya = (ECPublicKey*) ecdh->newPublicKey(); ECPublicKey* pubKeyb = (ECPublicKey*) ecdh->newPublicKey(); ECPrivateKey* privKeya = (ECPrivateKey*) ecdh->newPrivateKey(); ECPrivateKey* privKeyb = (ECPrivateKey*) ecdh->newPrivateKey(); // Reconstruct public and private key for Alice ByteString ec = "06082a8648ce3d030107"; // X9.62 prime256v1 ByteString da = "c88f01f510d9ac3f70a292daa2316de544e9aab8afe84049c62a9c57862d1433"; // add 04 (ASN_String) <len+1> 04 (UNCOMPRESSED) in front! ByteString qa = "044104dad0b65394221cf9b051e1feca5787d098dfe637fc90b9ef945d0c37725811805271a0461cdb8252d61f1c456fa3e59ab1f45b33accf5f58389e0577b8990bb3"; pubKeya->setEC(ec); pubKeya->setQ(qa); privKeya->setEC(ec); privKeya->setD(da); // Reconstruct public and private key for Bob ByteString db = "c6ef9c5d78ae012a011164acb397ce2088685d8f06bf9be0b283ab46476bee53"; ByteString qb = "044104d12dfb5289c8d4f81208b70270398c342296970a0bccb74c736fc7554494bf6356fbf3ca366cc23e8157854c13c58d6aac23f046ada30f8353e74f33039872ab"; pubKeyb->setEC(ec); pubKeyb->setQ(qb); privKeyb->setEC(ec); privKeyb->setD(db); // Test ByteString expected = "d6840f6b42f6edafd13116e0e12565202fef8e9ece7dce03812464d04b9442de"; SymmetricKey* sa; CPPUNIT_ASSERT(ecdh->deriveKey(&sa, pubKeya, privKeyb)); CPPUNIT_ASSERT(sa->getKeyBits() == expected); SymmetricKey* sb; CPPUNIT_ASSERT(ecdh->deriveKey(&sb, pubKeyb, privKeya)); CPPUNIT_ASSERT(sb->getKeyBits() == expected); ecdh->recyclePublicKey(pubKeya); ecdh->recyclePublicKey(pubKeyb); ecdh->recyclePrivateKey(privKeya); ecdh->recyclePrivateKey(privKeyb); ecdh->recycleSymmetricKey(sa); ecdh->recycleSymmetricKey(sb); }
void DHTests::testDerivation() { AsymmetricKeyPair* kpa; AsymmetricKeyPair* kpb; // Key sizes to test std::vector<size_t> keySizes; #ifdef WITH_FIPS keySizes.push_back(1024); #else keySizes.push_back(512); //keySizes.push_back(768); //keySizes.push_back(1024); #endif for (std::vector<size_t>::iterator k = keySizes.begin(); k != keySizes.end(); k++) { // Generate parameters AsymmetricParameters* p; CPPUNIT_ASSERT(dh->generateParameters(&p, (void*) *k)); // Generate key-pairs CPPUNIT_ASSERT(dh->generateKeyPair(&kpa, p)); CPPUNIT_ASSERT(dh->generateKeyPair(&kpb, p)); // Derive secrets SymmetricKey* sa; CPPUNIT_ASSERT(dh->deriveKey(&sa, kpb->getPublicKey(), kpa->getPrivateKey())); SymmetricKey* sb; CPPUNIT_ASSERT(dh->deriveKey(&sb, kpa->getPublicKey(), kpb->getPrivateKey())); // Must be the same CPPUNIT_ASSERT(sa->getKeyBits() == sb->getKeyBits()); // Clean up dh->recycleSymmetricKey(sa); dh->recycleSymmetricKey(sb); dh->recycleKeyPair(kpa); dh->recycleKeyPair(kpb); dh->recycleParameters(p); } }
void EDDSATests::testDeriveKnownVector() { EDPublicKey* pubKeya = (EDPublicKey*) eddsa->newPublicKey(); EDPublicKey* pubKeyb = (EDPublicKey*) eddsa->newPublicKey(); EDPrivateKey* privKeya = (EDPrivateKey*) eddsa->newPrivateKey(); EDPrivateKey* privKeyb = (EDPrivateKey*) eddsa->newPrivateKey(); // Reconstruct public and private key for Alice ByteString ec = "06032b656e"; // x25519 ByteString ka = "77076d0a7318a57d3c16c17251b26645df4c2f87ebc0992ab177fba51db92c2a"; ByteString aa = "04208520f0098930a754748b7ddcb43ef75a0dbf3a0d26381af4eba4a98eaa9b4e6a"; pubKeya->setEC(ec); pubKeya->setA(aa); privKeya->setEC(ec); privKeya->setK(ka); // Reconstruct public and private key for Bob ByteString kb = "5dab087e624a8a4b79e17f8b83800ee66f3bb1292618b6fd1c2f8b27ff88e0eb"; ByteString ab = "0420de9edb7d7b7dc1b4d35b61c2ece435373f8343c85b78674dadfc7e146f882b4f"; pubKeyb->setEC(ec); pubKeyb->setA(ab); privKeyb->setEC(ec); privKeyb->setK(kb); // Test ByteString expected = "4a5d9d5ba4ce2de1728e3bf480350f25e07e21c947d19e3376f09b3c1e161742"; SymmetricKey* sa; CPPUNIT_ASSERT(eddsa->deriveKey(&sa, pubKeya, privKeyb)); CPPUNIT_ASSERT(sa->getKeyBits() == expected); SymmetricKey* sb; CPPUNIT_ASSERT(eddsa->deriveKey(&sb, pubKeyb, privKeya)); CPPUNIT_ASSERT(sb->getKeyBits() == expected); eddsa->recyclePublicKey(pubKeya); eddsa->recyclePublicKey(pubKeyb); eddsa->recyclePrivateKey(privKeya); eddsa->recyclePrivateKey(privKeyb); eddsa->recycleSymmetricKey(sa); eddsa->recycleSymmetricKey(sb); }
void ECDHTests::testDerivation() { AsymmetricKeyPair* kpa; AsymmetricKeyPair* kpb; ECParameters* p; // Curves to test std::vector<ByteString> curves; // Add X9.62 prime256v1 curves.push_back(ByteString("06082a8648ce3d030107")); // Add secp384r1 curves.push_back(ByteString("06052b81040022")); for (std::vector<ByteString>::iterator c = curves.begin(); c != curves.end(); c++) { // Get parameters p = new ECParameters; CPPUNIT_ASSERT(p != NULL); p->setEC(*c); // Generate key-pairs CPPUNIT_ASSERT(ecdh->generateKeyPair(&kpa, p)); CPPUNIT_ASSERT(ecdh->generateKeyPair(&kpb, p)); // Derive secrets SymmetricKey* sa; CPPUNIT_ASSERT(ecdh->deriveKey(&sa, kpb->getPublicKey(), kpa->getPrivateKey())); SymmetricKey* sb; CPPUNIT_ASSERT(ecdh->deriveKey(&sb, kpa->getPublicKey(), kpb->getPrivateKey())); // Must be the same CPPUNIT_ASSERT(sa->getKeyBits() == sb->getKeyBits()); // Clean up ecdh->recycleSymmetricKey(sa); ecdh->recycleSymmetricKey(sb); ecdh->recycleKeyPair(kpa); ecdh->recycleKeyPair(kpb); ecdh->recycleParameters(p); } }
void EDDSATests::testDerivation() { AsymmetricKeyPair* kpa; AsymmetricKeyPair* kpb; ECParameters* p; // Curves to test std::vector<ByteString> curves; // Add x25519 curves.push_back(ByteString("06032b656e")); for (std::vector<ByteString>::iterator c = curves.begin(); c != curves.end(); c++) { // Get parameters p = new ECParameters; CPPUNIT_ASSERT(p != NULL); p->setEC(*c); // Generate key-pairs CPPUNIT_ASSERT(eddsa->generateKeyPair(&kpa, p)); CPPUNIT_ASSERT(eddsa->generateKeyPair(&kpb, p)); // Derive secrets SymmetricKey* sa; CPPUNIT_ASSERT(eddsa->deriveKey(&sa, kpb->getPublicKey(), kpa->getPrivateKey())); SymmetricKey* sb; CPPUNIT_ASSERT(eddsa->deriveKey(&sb, kpa->getPublicKey(), kpb->getPrivateKey())); // Must be the same CPPUNIT_ASSERT(sa->getKeyBits() == sb->getKeyBits()); // Clean up eddsa->recycleSymmetricKey(sa); eddsa->recycleSymmetricKey(sb); eddsa->recycleKeyPair(kpa); eddsa->recycleKeyPair(kpb); eddsa->recycleParameters(p); } }