aboutsummaryrefslogtreecommitdiffstats
path: root/src/tests/test_dh.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/tests/test_dh.cpp')
-rw-r--r--src/tests/test_dh.cpp110
1 files changed, 58 insertions, 52 deletions
diff --git a/src/tests/test_dh.cpp b/src/tests/test_dh.cpp
index e48d41154..362ffcf24 100644
--- a/src/tests/test_dh.cpp
+++ b/src/tests/test_dh.cpp
@@ -7,67 +7,73 @@
#include "tests.h"
#if defined(BOTAN_HAS_DIFFIE_HELLMAN)
+ #include "test_pubkey.h"
+ #include <botan/pubkey.h>
+ #include <botan/dh.h>
+#endif
-#include "test_pubkey.h"
-
-#include <botan/pubkey.h>
-#include <botan/dh.h>
-#include <botan/hex.h>
-#include <iostream>
-#include <fstream>
-
-using namespace Botan;
+namespace Botan_Tests {
namespace {
-size_t dh_sig_kat(const std::string& p,
- const std::string& g,
- const std::string& x,
- const std::string& y,
- std::string kdf,
- const std::string& outlen,
- const std::string& key)
- {
- auto& rng = test_rng();
-
- BigInt p_bn(p), g_bn(g), x_bn(x), y_bn(y);
-
- DL_Group domain(p_bn, g_bn);
-
- DH_PrivateKey mykey(rng, domain, x_bn);
- DH_PublicKey otherkey(domain, y_bn);
-
- if(kdf == "")
- kdf = "Raw";
-
- size_t keylen = 0;
- if(outlen != "")
- keylen = to_u32bit(outlen);
-
- PK_Key_Agreement kas(mykey, kdf);
-
- return validate_kas(kas, "DH/" + kdf, otherkey.public_value(), key, keylen);
- }
-
-}
+#if defined(BOTAN_HAS_DIFFIE_HELLMAN)
-size_t test_dh()
+class Diffie_Hellman_KAT_Tests : public PK_Key_Agreement_Test
+ {
+ public:
+ Diffie_Hellman_KAT_Tests() : PK_Key_Agreement_Test(
+ "Diffie-Hellman",
+ Test::data_file("pubkey/dh.vec"),
+ {"P", "G", "X", "Y", "Msg", "OutLen", "K"},
+ {"KDF"})
+ {}
+
+ std::string default_kdf(const VarMap&) { return "Raw"; }
+
+ std::unique_ptr<Botan::Private_Key> load_our_key(const VarMap& vars) override
+ {
+ const Botan::BigInt p = get_req_bn(vars, "P");
+ const Botan::BigInt g = get_req_bn(vars, "G");
+ const Botan::BigInt x = get_req_bn(vars, "X");
+
+ const Botan::DL_Group grp(p, g);
+
+ std::unique_ptr<Botan::Private_Key> key(new Botan::DH_PrivateKey(Test::rng(), grp, x));
+ return key;
+ }
+
+ std::vector<uint8_t> load_their_key(const VarMap& vars) override
+ {
+ const Botan::BigInt p = get_req_bn(vars, "P");
+ const Botan::BigInt g = get_req_bn(vars, "G");
+ const Botan::BigInt y = get_req_bn(vars, "Y");
+ const Botan::DL_Group grp(p, g);
+
+ Botan::DH_PublicKey key(grp, y);
+ return key.public_value();
+ }
+ };
+
+class Diffie_Hellman_Keygen_Tests : public PK_Key_Generation_Test
{
- size_t fails = 0;
+ public:
+ std::vector<std::string> keygen_params() const override { return { "modp/ietf/1024", "modp/ietf/2048" }; }
- std::ifstream dh_sig(TEST_DATA_DIR_PK "/dh.vec");
+ std::unique_ptr<Botan::Private_Key> make_key(Botan::RandomNumberGenerator& rng,
+ const std::string& param) const override
+ {
+ Botan::DL_Group group(param);
+ std::unique_ptr<Botan::Private_Key> key(new Botan::DH_PrivateKey(rng, group));
+ return key;
+ }
+ };
- fails += run_tests_bb(dh_sig, "DH Kex", "K", true,
- [](std::map<std::string, std::string> m) -> size_t
- {
- return dh_sig_kat(m["P"], m["G"], m["X"], m["Y"], m["KDF"], m["OutLen"], m["K"]);
- });
- return fails;
- }
+BOTAN_REGISTER_TEST("dh_kat", Diffie_Hellman_KAT_Tests);
+BOTAN_REGISTER_TEST("dh_keygen", Diffie_Hellman_Keygen_Tests);
-#else
+#endif
-SKIP_TEST(dh);
+}
-#endif // BOTAN_HAS_DIFFIE_HELLMAN
+}