]> git.ipfire.org Git - thirdparty/strongswan.git/commitdiff
unit-tests: created bliss_sign test suite
authorAndreas Steffen <andreas.steffen@strongswan.org>
Mon, 24 Nov 2014 21:02:49 +0000 (22:02 +0100)
committerAndreas Steffen <andreas.steffen@strongswan.org>
Sat, 29 Nov 2014 13:51:17 +0000 (14:51 +0100)
src/libstrongswan/plugins/bliss/Makefile.am
src/libstrongswan/plugins/bliss/bliss_public_key.c
src/libstrongswan/plugins/bliss/bliss_tests.c
src/libstrongswan/plugins/bliss/bliss_tests.h
src/libstrongswan/plugins/bliss/suites/test_bliss_sign.c [new file with mode: 0644]

index c83e577a407f679e425e199f7ef0f06a9e53a950..b88964dafd28ee8a0cd57b8ca364fd391a297786 100644 (file)
@@ -30,13 +30,22 @@ check_PROGRAMS = $(TESTS)
 
 bliss_tests_SOURCES = \
        suites/test_bliss_fft.c \
+       suites/test_bliss_sign.c \
        bliss_fft_params.c \
        bliss_fft.c \
+       bliss_private_key.c \
+       bliss_public_key.c \
+       bliss_param_set.c \
+       bliss_sampler.c \
+       bliss_signature.c \
+       bliss_utils.c \
        bliss_tests.h bliss_tests.c
 
 bliss_tests_CFLAGS = \
        -I$(top_srcdir)/src/libstrongswan \
        -I$(top_srcdir)/src/libstrongswan/tests \
+       -DPLUGINDIR=\""$(abs_top_builddir)/src/libstrongswan/plugins\"" \
+       -DPLUGINS=\""${s_plugins}\"" \
        @COVERAGE_CFLAGS@
 
 bliss_tests_LDFLAGS = @COVERAGE_LDFLAGS@
index b767b0478cccbb3ce44b106421d59b2f5857d5dd..a131d3497cfdc8eccf83d584b865880794f6a927 100644 (file)
@@ -166,6 +166,7 @@ static bool verify_bliss_with_sha512(private_bliss_public_key_t *this,
        {
                if (indices[i] != c_indices[i])
                {
+                       DBG1(DBG_LIB, "signature verification failed");
                        goto end;
                }
        }
index 5d355aed8f6615229246551222e7037470de566c..de21e77b7debda9510366f9b65be32f2f3fb631e 100644 (file)
@@ -31,10 +31,25 @@ static test_configuration_t tests[] = {
 
 static bool test_runner_init(bool init)
 {
-       if (!init)
+       if (init)
+       {
+               char *plugins, *plugindir;
+
+               plugins = lib->settings->get_str(lib->settings,
+                                                                               "tests.load", PLUGINS);
+               plugindir = lib->settings->get_str(lib->settings,
+                                                                               "tests.plugindir", PLUGINDIR);
+               plugin_loader_add_plugindirs(plugindir, plugins);
+               if (!lib->plugins->load(lib->plugins, plugins))
+               {
+                       return FALSE;
+               }
+       }
+       else
        {
                lib->processor->set_threads(lib->processor, 0);
                lib->processor->cancel(lib->processor);
+               lib->plugins->unload(lib->plugins);
        }
        return TRUE;
 }
index 4c3e10b279a6320fb5c852f96a4c0f4ff066d824..d808bcf6f6b835fd16ac2a7c515031e324bb7e76 100644 (file)
@@ -14,4 +14,5 @@
  */
 
 TEST_SUITE(bliss_fft_suite_create)
+TEST_SUITE(bliss_sign_suite_create)
 
diff --git a/src/libstrongswan/plugins/bliss/suites/test_bliss_sign.c b/src/libstrongswan/plugins/bliss/suites/test_bliss_sign.c
new file mode 100644 (file)
index 0000000..dbe4591
--- /dev/null
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2014 Andreas Steffen
+ * HSR Hochschule fuer Technik Rapperswil
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * for more details.
+ */
+
+#include "test_suite.h"
+
+#include <bliss_private_key.h>
+#include <bliss_public_key.h>
+
+static u_int key_type[] = { 1, 3, 4 };
+
+START_TEST(test_bliss_sign_all)
+{
+       private_key_t *privkey;
+       public_key_t *pubkey;
+       chunk_t msg, signature;
+       int verify_count = 1000;
+       
+       msg = chunk_from_str("Hello Dolly!");
+       privkey = lib->creds->create(lib->creds, CRED_PRIVATE_KEY, KEY_BLISS,
+                                                                BUILD_KEY_SIZE, key_type[_i], BUILD_END);
+       ck_assert(privkey);
+
+       pubkey = privkey->get_public_key(privkey);
+       ck_assert(pubkey);
+
+       while (verify_count--)
+       {
+               ck_assert(privkey->sign(privkey, SIGN_BLISS_WITH_SHA512, msg,
+                                                               &signature));
+               ck_assert(pubkey->verify(pubkey, SIGN_BLISS_WITH_SHA512, msg,
+                                                                signature));
+               free(signature.ptr);
+       }
+       privkey->destroy(privkey);
+       pubkey->destroy(pubkey);
+}
+END_TEST
+
+Suite *bliss_sign_suite_create()
+{
+       Suite *s;
+       TCase *tc;
+
+       s = suite_create("bliss_sign");
+
+       tc = tcase_create("all");
+       test_case_set_timeout(tc, 30);
+       tcase_add_loop_test(tc, test_bliss_sign_all, 0, countof(key_type));
+       suite_add_tcase(s, tc);
+
+       return s;
+}