aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTobias Brunner <tobias@strongswan.org>2014-12-05 16:36:13 +0100
committerAndreas Steffen <andreas.steffen@strongswan.org>2014-12-12 12:00:20 +0100
commit700df2388670a7d374f58c2005001d277deb1618 (patch)
tree82a5c2686a625c69c19eac4776617de7440636fd
parentf55a03a2de5d95389ef2417ad6ca393e1921f9ba (diff)
downloadstrongswan-700df2388670a7d374f58c2005001d277deb1618.tar.bz2
strongswan-700df2388670a7d374f58c2005001d277deb1618.tar.xz
bliss: Fix monolithic build
This requires moving test files so that the Makefile for the tests can be included after building libstrongswan, which requires the plugin when building monolithically. Due to this a static helper library is required as directly referring to object files (or source files) is not possible. It's also necessary to avoid any link-time dependency on libstrongswan in bliss_huffman, to avoid circular dependencies (bliss_huffman -> libstrongswan -> bliss -> bliss_huffman).
-rw-r--r--configure.ac1
-rw-r--r--src/libstrongswan/Makefile.am15
-rw-r--r--src/libstrongswan/plugins/bliss/.gitignore1
-rw-r--r--src/libstrongswan/plugins/bliss/Makefile.am75
-rw-r--r--src/libstrongswan/plugins/bliss/bliss_huffman.c106
-rw-r--r--src/libstrongswan/plugins/bliss/tests/.gitignore1
-rw-r--r--src/libstrongswan/plugins/bliss/tests/Makefile.am24
-rw-r--r--src/libstrongswan/plugins/bliss/tests/bliss_tests.c (renamed from src/libstrongswan/plugins/bliss/bliss_tests.c)0
-rw-r--r--src/libstrongswan/plugins/bliss/tests/bliss_tests.h (renamed from src/libstrongswan/plugins/bliss/bliss_tests.h)0
-rw-r--r--src/libstrongswan/plugins/bliss/tests/suites/test_bliss_bitpacker.c (renamed from src/libstrongswan/plugins/bliss/suites/test_bliss_bitpacker.c)0
-rw-r--r--src/libstrongswan/plugins/bliss/tests/suites/test_bliss_fft.c (renamed from src/libstrongswan/plugins/bliss/suites/test_bliss_fft.c)0
-rw-r--r--src/libstrongswan/plugins/bliss/tests/suites/test_bliss_sampler.c (renamed from src/libstrongswan/plugins/bliss/suites/test_bliss_sampler.c)0
-rw-r--r--src/libstrongswan/plugins/bliss/tests/suites/test_bliss_sign.c (renamed from src/libstrongswan/plugins/bliss/suites/test_bliss_sign.c)0
13 files changed, 123 insertions, 100 deletions
diff --git a/configure.ac b/configure.ac
index 4e31e0684..5fa82573f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1645,6 +1645,7 @@ AC_CONFIG_FILES([
src/libstrongswan/plugins/af_alg/Makefile
src/libstrongswan/plugins/ntru/Makefile
src/libstrongswan/plugins/bliss/Makefile
+ src/libstrongswan/plugins/bliss/tests/Makefile
src/libstrongswan/plugins/test_vectors/Makefile
src/libstrongswan/tests/Makefile
src/libhydra/Makefile
diff --git a/src/libstrongswan/Makefile.am b/src/libstrongswan/Makefile.am
index 9a6e03632..91d92c3f3 100644
--- a/src/libstrongswan/Makefile.am
+++ b/src/libstrongswan/Makefile.am
@@ -546,6 +546,13 @@ if MONOLITHIC
endif
endif
+if USE_BLISS
+ SUBDIRS += plugins/bliss
+if MONOLITHIC
+ libstrongswan_la_LIBADD += plugins/bliss/libstrongswan-bliss.la
+endif
+endif
+
if USE_TEST_VECTORS
SUBDIRS += plugins/test_vectors
if MONOLITHIC
@@ -557,12 +564,6 @@ if MONOLITHIC
SUBDIRS += .
endif
SUBDIRS += tests
-
if USE_BLISS
- SUBDIRS += plugins/bliss
-if MONOLITHIC
- libstrongswan_la_LIBADD += plugins/bliss/libstrongswan-bliss.la
+ SUBDIRS += plugins/bliss/tests
endif
-endif
-
-
diff --git a/src/libstrongswan/plugins/bliss/.gitignore b/src/libstrongswan/plugins/bliss/.gitignore
index fcce5a9d9..f1ba4e2a5 100644
--- a/src/libstrongswan/plugins/bliss/.gitignore
+++ b/src/libstrongswan/plugins/bliss/.gitignore
@@ -1,4 +1,3 @@
-bliss_tests
bliss_huffman
bliss_huffman_code_1.c
bliss_huffman_code_3.c
diff --git a/src/libstrongswan/plugins/bliss/Makefile.am b/src/libstrongswan/plugins/bliss/Makefile.am
index c4db1544c..27d179be9 100644
--- a/src/libstrongswan/plugins/bliss/Makefile.am
+++ b/src/libstrongswan/plugins/bliss/Makefile.am
@@ -5,75 +5,56 @@ AM_CFLAGS = \
$(PLUGIN_CFLAGS) \
@COVERAGE_CFLAGS@
-if MONOLITHIC
-noinst_LTLIBRARIES = libstrongswan-bliss.la
-else
-plugin_LTLIBRARIES = libstrongswan-bliss.la
-endif
-
-libstrongswan_bliss_la_SOURCES = \
- bliss_plugin.h bliss_plugin.c \
+# these file are also used by bliss_huffman
+noinst_LTLIBRARIES = libbliss-params.la
+libbliss_params_la_SOURCES = \
bliss_param_set.h bliss_param_set.c \
+ bliss_fft_params.h bliss_fft_params.c
+
+# these files are also used by the tests, we can't directly refer to them
+# because of the subdirectory, which would cause distclean to fail
+noinst_LTLIBRARIES += libbliss.la
+libbliss_la_SOURCES = \
bliss_private_key.h bliss_private_key.c \
bliss_public_key.h bliss_public_key.c \
bliss_signature.h bliss_signature.c \
bliss_utils.h bliss_utils.c \
bliss_bitpacker.h bliss_bitpacker.c \
bliss_fft.h bliss_fft.c \
- bliss_fft_params.h bliss_fft_params.c \
bliss_huffman_code.h bliss_huffman_code.c \
bliss_huffman_code_1.c bliss_huffman_code_3.c bliss_huffman_code_4.c \
bliss_sampler.h bliss_sampler.c
+libbliss_la_LIBADD = libbliss-params.la
+
+CLEANFILES = \
+ bliss_huffman_code_1.c bliss_huffman_code_3.c bliss_huffman_code_4.c
+
+if MONOLITHIC
+noinst_LTLIBRARIES += libstrongswan-bliss.la
+else
+plugin_LTLIBRARIES = libstrongswan-bliss.la
+endif
+
+libstrongswan_bliss_la_SOURCES = \
+ bliss_plugin.h bliss_plugin.c
libstrongswan_bliss_la_LDFLAGS = -module -avoid-version
+libstrongswan_bliss_la_LIBADD = libbliss.la
+
noinst_PROGRAMS = bliss_huffman
bliss_huffman_SOURCES = bliss_huffman.c
-bliss_huffman_LDADD = \
- $(top_builddir)/src/libstrongswan/libstrongswan.la -lm \
- bliss_param_set.o bliss_fft_params.o
+bliss_huffman_LDADD = -lm libbliss-params.la
bliss_huffman_code_1.c : bliss_huffman bliss_huffman_code.h
$(AM_V_GEN) \
- ./bliss_huffman 1 8 > $@
+ ./bliss_huffman 1 8 > $@ 2>/dev/null
bliss_huffman_code_3.c : bliss_huffman bliss_huffman_code.h
$(AM_V_GEN) \
- ./bliss_huffman 3 16 > $@
+ ./bliss_huffman 3 16 > $@ 2>/dev/null
bliss_huffman_code_4.c : bliss_huffman bliss_huffman_code.h
$(AM_V_GEN) \
- ./bliss_huffman 4 32 > $@
-
-TESTS = bliss_tests
-
-check_PROGRAMS = $(TESTS)
-
-bliss_tests_SOURCES = \
- suites/test_bliss_fft.c \
- suites/test_bliss_bitpacker.c \
- suites/test_bliss_sampler.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_bitpacker.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@
-bliss_tests_LDADD = \
- $(top_builddir)/src/libstrongswan/libstrongswan.la \
- $(top_builddir)/src/libstrongswan/tests/libtest.la
+ ./bliss_huffman 4 32 > $@ 2>/dev/null
diff --git a/src/libstrongswan/plugins/bliss/bliss_huffman.c b/src/libstrongswan/plugins/bliss/bliss_huffman.c
index 890dfba06..6667b09dc 100644
--- a/src/libstrongswan/plugins/bliss/bliss_huffman.c
+++ b/src/libstrongswan/plugins/bliss/bliss_huffman.c
@@ -1,4 +1,5 @@
/*
+ * Copyright (C) 2014 Tobias Brunner
* Copyright (C) 2014 Andreas Steffen
* HSR Hochschule fuer Technik Rapperswil
*
@@ -33,6 +34,7 @@ struct tuple_t {
typedef struct node_t node_t;
struct node_t {
+ node_t *next;
node_t *l;
node_t *r;
tuple_t *tuple;
@@ -119,8 +121,7 @@ static void write_code_tables(int bliss_type, int n_z1, int n_z2, node_t *nodes,
printf(" * Copyright (C) 2014 Andreas Steffen\n");
printf(" * HSR Hochschule fuer Technik Rapperswil\n");
printf(" *\n");
- printf(" * Optimum Huffman code for %N signatures\n",
- bliss_param_set_id_names, bliss_type);
+ printf(" * Optimum Huffman code for BLISS-X signatures\n");
printf(" *\n");
printf(" * This file has been automatically generated by the"
" bliss_huffman utility\n");
@@ -182,6 +183,25 @@ static void destroy_node(node_t *node)
free(node);
}
+static void remove_node(node_t *list, node_t **last, node_t *node)
+{
+ node_t *current, *prev;
+
+ for (current = list->next, prev = list; current;
+ prev = current, current = current->next)
+ {
+ if (current == node)
+ {
+ prev->next = current->next;
+ if (*last == current)
+ {
+ *last = prev->next ?: prev;
+ }
+ break;
+ }
+ }
+}
+
/**
* Generate a Huffman code for the optimum encoding of BLISS signatures
*/
@@ -190,14 +210,13 @@ int main(int argc, char *argv[])
bliss_param_set_t *set;
int dx, bliss_type, depth = 1, groups, groups_left, pairs = 1;
int i_max = 9, k_max = 8, index_max = (2*k_max - 1) * i_max;
- int i, i_top, k, k_top;
+ int i, i_top, k, k_top;
uint16_t index;
double p, p_z1[i_max], p_z2[k_max], x_z1[i_max], x_z2[k_max];
double t, x, x0, p_sum, entropy = 0, erf_i, erf_k, erf_0 = 0;
tuple_t *tuple, *tuples[index_max];
node_t *node, *node_l, *node_r, *nodes = NULL;
- linked_list_t *node_list;
- enumerator_t *enumerator;
+ node_t *node_list, *node_last;
if (argc < 2)
{
@@ -211,10 +230,6 @@ int main(int argc, char *argv[])
fprintf(stderr, "%d code pairs with constant length\n\n", pairs);
groups_left = groups = pairs >> 1;
- library_init(NULL, "bliss_huffman");
- lib->plugins->load(lib->plugins, "bliss");
- atexit(library_deinit);
-
bliss_type = atoi(argv[1]);
set = bliss_param_set_get_by_id(bliss_type);
if (!set)
@@ -222,7 +237,7 @@ int main(int argc, char *argv[])
fprintf(stderr, "bliss type %d unsupported\n");
exit(1);
}
-
+
t = 1/(sqrt(2) * set->sigma);
/* Probability distribution for z1 */
@@ -261,7 +276,7 @@ int main(int argc, char *argv[])
for (k = 0; k < k_top; k++)
{
-
+
erf_k = erf(t*x) / 2;
p_z2[k] = (k == 0) ? 2*erf_k : erf_k - erf_0;
p_sum += (k == 0) ? p_z2[k] : 2*p_z2[k];
@@ -275,18 +290,18 @@ int main(int argc, char *argv[])
{
p_z2[k] /= p_sum;
}
-
+
/* Print the probability distribution for z2 */
fprintf(stderr, " k p_z2[k] dx = %d\n", dx);
for (k = 1 - k_top; k < k_top; k++)
{
-
+
fprintf(stderr, "%2d %18.16f ",k, p_z2[abs(k)]);
if (k < 0)
{
fprintf(stderr, "%7.1f ..%7.1f\n", -x_z2[-k], -x_z2[-k-1]);
- }
+ }
else if (k == 0)
{
fprintf(stderr, "%7.1f ..%7.1f\n", -x_z2[k], x_z2[k]);
@@ -294,12 +309,13 @@ int main(int argc, char *argv[])
else
{
fprintf(stderr, "%7.1f ..%7.1f\n", x_z2[k-1], x_z2[k]);
- }
+ }
}
fprintf(stderr, "\n");
/* Compute probabilities of tuples (z1, z2) */
- node_list =linked_list_create();
+ INIT(node_list);
+ node_last = node_list;
fprintf(stderr, "(i, k) p\n");
p_sum =0;
index = 0;
@@ -313,18 +329,19 @@ int main(int argc, char *argv[])
p_sum += p;
entropy += -log(p) * p;
- tuple = malloc_thing(tuple_t);
- node = malloc_thing(node_t);
- tuple->z1 = i;
- tuple->z2 = k;
- tuple->index = index;
+ INIT(tuple,
+ .z1 = i,
+ .z2 = k,
+ .index = index,
+ );
tuples[index++] = tuple;
- node->p = p;
- node->tuple = tuple;
- node->depth = 0;
- node->r = NULL;
- node->l = NULL;
- node_list->insert_last(node_list, node);
+
+ INIT(node,
+ .p = p,
+ .tuple = tuple,
+ );
+ node_last->next = node;
+ node_last = node;
}
}
entropy /= log(2);
@@ -332,12 +349,11 @@ int main(int argc, char *argv[])
p_sum, entropy, (int)(512 * entropy));
/* Build Huffman tree */
- while (node_list->get_count(node_list) > 1)
+ while (node_list->next != node_last)
{
node_r = node_l = NULL;
- enumerator = node_list->create_enumerator(node_list);
- while (enumerator->enumerate(enumerator, &node))
+ for (node = node_list->next; node; node = node->next)
{
if (pairs > 0)
{
@@ -363,23 +379,22 @@ int main(int argc, char *argv[])
node_l = node;
}
}
- enumerator->destroy(enumerator);
-
- node = malloc_thing(node_t);
- node->l = node_l;
- node->r = node_r;
- node->p = node_l->p + node_r->p;
- node->depth = 1 + max(node_l->depth, node_r->depth);
- node->tuple = NULL;
+ INIT(node,
+ .l = node_l,
+ .r = node_r,
+ .p = node_l->p + node_r->p,
+ .depth = 1 + max(node_l->depth, node_r->depth),
+ .tuple = NULL,
+ );
print_node(node_r);
print_node(node_l);
fprintf(stderr, " %18.16f", node->p);
- node_list->remove(node_list, node_l, NULL);
- node_list->remove(node_list, node_r, NULL);
- node_list->insert_last(node_list, node);
-
+ remove_node(node_list, &node_last, node_l);
+ remove_node(node_list, &node_last, node_r);
+ node_last->next = node;
+ node_last = node;
if (pairs > 0)
{
@@ -394,15 +409,16 @@ int main(int argc, char *argv[])
depth++;
}
}
- fprintf(stderr, " %3d\n\n", node_list->get_count(node_list));
+ fprintf(stderr, "\n\n");
}
- node_list->remove_first(node_list, (void**)&nodes);
- node_list->destroy(node_list);
+
+ nodes = node_list->next;
write_code_tables(bliss_type, i_top, k_top, nodes, tuples);
destroy_node(nodes);
+ destroy_node(node_list);
exit(0);
}
diff --git a/src/libstrongswan/plugins/bliss/tests/.gitignore b/src/libstrongswan/plugins/bliss/tests/.gitignore
new file mode 100644
index 000000000..94f77f0f9
--- /dev/null
+++ b/src/libstrongswan/plugins/bliss/tests/.gitignore
@@ -0,0 +1 @@
+bliss_tests
diff --git a/src/libstrongswan/plugins/bliss/tests/Makefile.am b/src/libstrongswan/plugins/bliss/tests/Makefile.am
new file mode 100644
index 000000000..57d58e98f
--- /dev/null
+++ b/src/libstrongswan/plugins/bliss/tests/Makefile.am
@@ -0,0 +1,24 @@
+TESTS = bliss_tests
+
+check_PROGRAMS = $(TESTS)
+
+bliss_tests_SOURCES = \
+ suites/test_bliss_fft.c \
+ suites/test_bliss_bitpacker.c \
+ suites/test_bliss_sampler.c \
+ suites/test_bliss_sign.c \
+ bliss_tests.h bliss_tests.c
+
+bliss_tests_CFLAGS = \
+ -I$(top_srcdir)/src/libstrongswan \
+ -I$(top_srcdir)/src/libstrongswan/tests \
+ -I$(top_srcdir)/src/libstrongswan/plugins/bliss \
+ -DPLUGINDIR=\""$(abs_top_builddir)/src/libstrongswan/plugins\"" \
+ -DPLUGINS=\""${s_plugins}\"" \
+ @COVERAGE_CFLAGS@
+
+bliss_tests_LDFLAGS = @COVERAGE_LDFLAGS@
+bliss_tests_LDADD = \
+ $(top_builddir)/src/libstrongswan/libstrongswan.la \
+ $(top_builddir)/src/libstrongswan/tests/libtest.la \
+ ../libbliss.la
diff --git a/src/libstrongswan/plugins/bliss/bliss_tests.c b/src/libstrongswan/plugins/bliss/tests/bliss_tests.c
index de21e77b7..de21e77b7 100644
--- a/src/libstrongswan/plugins/bliss/bliss_tests.c
+++ b/src/libstrongswan/plugins/bliss/tests/bliss_tests.c
diff --git a/src/libstrongswan/plugins/bliss/bliss_tests.h b/src/libstrongswan/plugins/bliss/tests/bliss_tests.h
index 67b0cdd23..67b0cdd23 100644
--- a/src/libstrongswan/plugins/bliss/bliss_tests.h
+++ b/src/libstrongswan/plugins/bliss/tests/bliss_tests.h
diff --git a/src/libstrongswan/plugins/bliss/suites/test_bliss_bitpacker.c b/src/libstrongswan/plugins/bliss/tests/suites/test_bliss_bitpacker.c
index f040ba70e..f040ba70e 100644
--- a/src/libstrongswan/plugins/bliss/suites/test_bliss_bitpacker.c
+++ b/src/libstrongswan/plugins/bliss/tests/suites/test_bliss_bitpacker.c
diff --git a/src/libstrongswan/plugins/bliss/suites/test_bliss_fft.c b/src/libstrongswan/plugins/bliss/tests/suites/test_bliss_fft.c
index 009aaf802..009aaf802 100644
--- a/src/libstrongswan/plugins/bliss/suites/test_bliss_fft.c
+++ b/src/libstrongswan/plugins/bliss/tests/suites/test_bliss_fft.c
diff --git a/src/libstrongswan/plugins/bliss/suites/test_bliss_sampler.c b/src/libstrongswan/plugins/bliss/tests/suites/test_bliss_sampler.c
index 1bd1266ad..1bd1266ad 100644
--- a/src/libstrongswan/plugins/bliss/suites/test_bliss_sampler.c
+++ b/src/libstrongswan/plugins/bliss/tests/suites/test_bliss_sampler.c
diff --git a/src/libstrongswan/plugins/bliss/suites/test_bliss_sign.c b/src/libstrongswan/plugins/bliss/tests/suites/test_bliss_sign.c
index dbe459143..dbe459143 100644
--- a/src/libstrongswan/plugins/bliss/suites/test_bliss_sign.c
+++ b/src/libstrongswan/plugins/bliss/tests/suites/test_bliss_sign.c