aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJ08nY2017-08-29 16:59:14 +0200
committerJ08nY2017-08-29 16:59:14 +0200
commit3e9be5f5db1bccb5eb11d51cf615182eb394afb6 (patch)
tree93977fbc769daaf1b89620753070e4f408b7bf41
parentf98b11a252ca227cf0376a3cd7cf1d69f6686385 (diff)
parent4b5d03eda289aa477e693cad8b598a398bb7e04c (diff)
downloadecgen-3e9be5f5db1bccb5eb11d51cf615182eb394afb6.tar.gz
ecgen-3e9be5f5db1bccb5eb11d51cf615182eb394afb6.tar.zst
ecgen-3e9be5f5db1bccb5eb11d51cf615182eb394afb6.zip
-rw-r--r--.gitignore3
-rw-r--r--.gitmodules3
-rw-r--r--.travis.yml2
-rw-r--r--CMakeLists.txt8
-rw-r--r--Makefile10
-rw-r--r--src/math/subgroups.c2
-rw-r--r--test/CMakeLists.txt16
-rw-r--r--test/Makefile15
-rw-r--r--test/data/econvert_format.csv (renamed from test/econvert_format.csv)0
-rw-r--r--test/data/econvert_format.json (renamed from test/econvert_format.json)0
-rw-r--r--test/data/f2m_10_a.csv (renamed from test/f2m_10_a.csv)0
-rw-r--r--test/data/f2m_10_a.csv.in (renamed from test/f2m_10_a.csv.in)0
-rw-r--r--test/data/f2m_10_a.json (renamed from test/f2m_10_a.json)0
-rw-r--r--test/data/fp_10_a.csv (renamed from test/fp_10_a.csv)0
-rw-r--r--test/data/fp_10_a.csv.in (renamed from test/fp_10_a.csv.in)0
-rw-r--r--test/data/fp_10_a.json (renamed from test/fp_10_a.json)0
-rwxr-xr-xtest/ecgen.sh12
m---------test/lib/criterion0
-rw-r--r--test/src/Makefile42
-rw-r--r--test/src/math/test_subgroups.c28
-rw-r--r--test/src/test/utils.c14
-rw-r--r--test/src/test/utils.h12
-rw-r--r--test/verify.gp0
23 files changed, 151 insertions, 16 deletions
diff --git a/.gitignore b/.gitignore
index 98bad3c..4d915de 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,9 +1,8 @@
### Custom
-/data/
-/gen/
/lib/pari/
/ecgen
/econvert
+/test/src/test_ecgen
### Doxygen
/docs/html/
diff --git a/.gitmodules b/.gitmodules
index 450ea9a..7340c03 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -4,3 +4,6 @@
[submodule "test/lib/JSON.sh"]
path = test/lib/JSON.sh
url = https://github.com/jimklimov/JSON.sh
+[submodule "test/lib/criterion"]
+ path = test/lib/criterion
+ url = https://github.com/Snaipe/Criterion
diff --git a/.travis.yml b/.travis.yml
index d10cd52..da792fc 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -27,7 +27,7 @@ before_install:
- sudo dpkg --force-all -i libreadline7_7.0-0ubuntu2_amd64.deb libpari-gmp-tls5_2.9.3-1_amd64.deb libpari-dev_2.9.3-1_amd64.deb pari-gp_2.9.3-1_amd64.deb
script:
- - TEST=1 make -j2 test
+ - TEST=1 make -j2 unittest
after_success:
- bash <(curl -s https://codecov.io/bash)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index b696f5e..a13030d 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -2,8 +2,8 @@ cmake_minimum_required(VERSION 2.8.11)
project(ecgen C)
set(CMAKE_LIBRARY_PATH ${CMAKE_SOURCE_DIR}/lib)
-SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DDEBUG -g -Wall -Werror -pedantic")
-SET(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -DNDEBUG -O3 -Wall")
+set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DDEBUG -g -Wall -Werror -pedantic")
+set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -DNDEBUG -O3 -Wall")
include_directories(src)
include_directories(lib)
@@ -19,4 +19,6 @@ add_executable(ecgen ${ECGEN_SRC})
add_executable(econvert ${ECONVERT_SRC})
target_link_libraries(ecgen pthread rt pari ${parson} ${sha1})
-target_link_libraries(econvert pthread rt pari ${parson} ${sha1}) \ No newline at end of file
+target_link_libraries(econvert pthread rt pari ${parson} ${sha1})
+
+add_subdirectory(test) \ No newline at end of file
diff --git a/Makefile b/Makefile
index 9a3a880..443d873 100644
--- a/Makefile
+++ b/Makefile
@@ -10,11 +10,13 @@ all:
clean:
+$(MAKE) -C src clean
+ +$(MAKE) -C test clean
rm -rf *.gcov
clean-all:
+$(MAKE) -C lib clean
+$(MAKE) -C src clean-all
+ +$(MAKE) -C test clean-all
rm -rf *.gcov
rm -rf doc/*
@@ -24,6 +26,9 @@ docs:
test: all
+$(MAKE) -C test test
+unittest: all
+ +$(MAKE) -C test unittest
+
help:
@echo "ecgen, tool for generating Elliptic curve domain parameters"
@echo
@@ -33,14 +38,15 @@ help:
@echo " - econvert : build the format conversion binary"
@echo " - docs : generate doxygen docs"
@echo " - test : test the main binary"
+ @echo " - unittest : "
@echo " - clean : cleans up after a build"
@echo " - clean-all : cleans all"
@echo " - format : run clang-format on source files"
@echo " - help : print this help"
-.PHONY: all clean clean-all docs test help
+.PHONY: all clean clean-all docs test unittest help
-ifeq (, $(filter all clean clean-all docs test help, $(MAKECMDGOALS)))
+ifeq (, $(filter all clean clean-all docs test unittest help, $(MAKECMDGOALS)))
# Just pass all targets to a Makefile in src
$(MAKECMDGOALS):
+$(MAKE) -C src $@
diff --git a/src/math/subgroups.c b/src/math/subgroups.c
index 903401e..3b84d5c 100644
--- a/src/math/subgroups.c
+++ b/src/math/subgroups.c
@@ -61,7 +61,7 @@ static GEN subgroups_exponents(GEN order) {
GEN subgroups_prime(const curve_t *curve, const config_t *cfg) {
if (cfg->prime || isprime(curve->order)) {
- return gtovec(curve->order);
+ return gtocol(curve->order);
} else {
return subgroups_factors(curve->order);
}
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
new file mode 100644
index 0000000..066defb
--- /dev/null
+++ b/test/CMakeLists.txt
@@ -0,0 +1,16 @@
+cmake_minimum_required(VERSION 2.8.11)
+project(test_ecgen C)
+
+include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src)
+include_directories(${CMAKE_CURRENT_SOURCE_DIR}/lib/criterion/include)
+
+find_library(criterion NAMES criterion PATHS ${CMAKE_CURRENT_SOURCE_DIR}/lib/criterion/build)
+
+file(GLOB TEST_SRC "src/math/*.c" "src/gen/*.c" "src/cm/*.c" "src/invalid/*.c" "src/io/*.c" "src/exhaustive/*.c" "src/util/*.c")
+file(GLOB TESTING_SRC "src/test/*.c")
+add_executable(test_ecgen ${TEST_SRC} ${TESTING_SRC} ${SRC})
+
+target_link_libraries(test_ecgen pthread rt pari ${parson} ${sha1} ${criterion})
+
+enable_testing()
+add_test(NAME test_ecgen COMMAND test_ecgen) \ No newline at end of file
diff --git a/test/Makefile b/test/Makefile
index 10de2dc..7ac8236 100644
--- a/test/Makefile
+++ b/test/Makefile
@@ -7,8 +7,21 @@
test: ecgen econvert
+unittest: unit ecgen econvert
+
+unit:
+ cd lib/criterion && mkdir -p build && cd build && cmake .. && cmake --build .
+ +$(MAKE) -C src all
+
ecgen:
./ecgen.sh
econvert:
- ./econvert.sh \ No newline at end of file
+ ./econvert.sh
+
+clean:
+ +$(MAKE) -C src clean
+
+clean-all:
+ cd lib/criterion && rm -r build
+ +$(MAKE) -C src clean-all \ No newline at end of file
diff --git a/test/econvert_format.csv b/test/data/econvert_format.csv
index 358d807..358d807 100644
--- a/test/econvert_format.csv
+++ b/test/data/econvert_format.csv
diff --git a/test/econvert_format.json b/test/data/econvert_format.json
index 8bb9bc2..8bb9bc2 100644
--- a/test/econvert_format.json
+++ b/test/data/econvert_format.json
diff --git a/test/f2m_10_a.csv b/test/data/f2m_10_a.csv
index 913fe0f..913fe0f 100644
--- a/test/f2m_10_a.csv
+++ b/test/data/f2m_10_a.csv
diff --git a/test/f2m_10_a.csv.in b/test/data/f2m_10_a.csv.in
index 33d08e3..33d08e3 100644
--- a/test/f2m_10_a.csv.in
+++ b/test/data/f2m_10_a.csv.in
diff --git a/test/f2m_10_a.json b/test/data/f2m_10_a.json
index e04fbd8..e04fbd8 100644
--- a/test/f2m_10_a.json
+++ b/test/data/f2m_10_a.json
diff --git a/test/fp_10_a.csv b/test/data/fp_10_a.csv
index b9ec96c..b9ec96c 100644
--- a/test/fp_10_a.csv
+++ b/test/data/fp_10_a.csv
diff --git a/test/fp_10_a.csv.in b/test/data/fp_10_a.csv.in
index 4f4cff3..4f4cff3 100644
--- a/test/fp_10_a.csv.in
+++ b/test/data/fp_10_a.csv.in
diff --git a/test/fp_10_a.json b/test/data/fp_10_a.json
index 666491a..666491a 100644
--- a/test/fp_10_a.json
+++ b/test/data/fp_10_a.json
diff --git a/test/ecgen.sh b/test/ecgen.sh
index 2f69c60..c1cbc07 100755
--- a/test/ecgen.sh
+++ b/test/ecgen.sh
@@ -17,16 +17,16 @@ function runs() {
function csv() {
start_test
- assert_matches "${ecgen} --fp -tcsv --input=fp_10_a.csv.in 10" "$(cat fp_10_a.csv)"
- assert_matches "${ecgen} --f2m -tcsv --input=f2m_10_a.csv.in 10" "$(cat f2m_10_a.csv)"
+ assert_matches "${ecgen} --fp -tcsv --input=data/fp_10_a.csv.in 10" "$(cat data/fp_10_a.csv)"
+ assert_matches "${ecgen} --f2m -tcsv --input=data/f2m_10_a.csv.in 10" "$(cat data/f2m_10_a.csv)"
}
function json() {
start_test
- assert_raises "${ecgen} --fp -tjson --input=fp_10_a.csv.in 10"
- assert_raises "${ecgen} --f2m -tjson --input=f2m_10_a.csv.in 10"
- fp=$(${ecgen} --fp -tjson --input=fp_10_a.csv.in 10 2>/dev/null)
- f2m=$(${ecgen} --f2m -tjson --input=f2m_10_a.csv.in 10 2>/dev/null)
+ assert_raises "${ecgen} --fp -tjson --input=data/fp_10_a.csv.in 10"
+ assert_raises "${ecgen} --f2m -tjson --input=data/f2m_10_a.csv.in 10"
+ fp=$(${ecgen} --fp -tjson --input=data/fp_10_a.csv.in 10 2>/dev/null)
+ f2m=$(${ecgen} --f2m -tjson --input=data/f2m_10_a.csv.in 10 2>/dev/null)
assert_raises "${JSON}" 0 "${fp}"
assert_matches "${JSON} -x field\\\",\\\"p" "0x000b" "${fp}"
assert_matches "${JSON} -x \\\"a\\\"" "0x0001" "${fp}"
diff --git a/test/lib/criterion b/test/lib/criterion
new file mode 160000
+Subproject 514b4d820e2f8fb4daa2b95b69c981853656cb7
diff --git a/test/src/Makefile b/test/src/Makefile
new file mode 100644
index 0000000..27e6ea2
--- /dev/null
+++ b/test/src/Makefile
@@ -0,0 +1,42 @@
+####
+#
+# ecgen, tool for generating Elliptic curve domain parameters
+# Copyright (C) 2017 J08nY
+#
+####
+
+
+CC ?= gcc
+CFLAGS = -Wall
+TEST ?= 0
+ifeq ($(TEST), 1)
+ CFLAGS += --coverage -g -O0
+endif
+LDFLAGS = -L../../lib/parson -L../../lib/sha1 -L../../lib/pari -L../lib/criterion/build
+INCLUDES = -I. -I../../src -I../../lib -I../lib/criterion/include
+LIBS = -lrt -lpari -lpthread -lparson -lsha1 -lcriterion
+
+TEST_SRC = $(wildcard *.c) $(wildcard */*.c)
+TEST_OBJ = $(patsubst %.c,%.o, $(TEST_SRC))
+TESTS = $(patsubst %.c,%, $(TEST_SRC))
+
+ECGEN_SRC = $(wildcard ../../src/*/*.c)
+ECGEN_OBJ = $(patsubst %.c,%.o, $(ECGEN_SRC))
+
+all: test_ecgen
+ LD_LIBRARY_PATH=../lib/criterion/build ./test_ecgen
+
+test_ecgen: $(TEST_OBJ) $(ECGEN_OBJ)
+ $(CC) $(CFLAGS) $(INCLUDES) -o $@ $^ $(LDFLAGS) $(LIBS)
+
+%.o: %.c
+ $(CC) $(CFLAGS) $(INCLUDES) -c -o $@ $<
+
+clean-all: clean
+ rm -f ./test_ecgen
+
+clean:
+ find . -type f -name '*.o' -exec rm {} +
+ find . -type f -name '*.gcda' -exec rm {} +
+ find . -type f -name '*.gcno' -exec rm {} +
+ find . -type f -name '*.gcov' -exec rm {} +
diff --git a/test/src/math/test_subgroups.c b/test/src/math/test_subgroups.c
new file mode 100644
index 0000000..ad42282
--- /dev/null
+++ b/test/src/math/test_subgroups.c
@@ -0,0 +1,28 @@
+/*
+ * ecgen, tool for generating Elliptic curve domain parameters
+ * Copyright (C) 2017 J08nY
+ */
+#include "gen/types.h"
+#include "math/subgroups.h"
+#include <criterion/criterion.h>
+#include "test/utils.h"
+
+TestSuite(subgroups, .init=default_setup, .fini=default_teardown);
+
+Test(subgroups, test_prime_factors) {
+ curve_t curve = {.order = stoi(12)};
+ config_t cfg = {.prime = false};
+ GEN divs = subgroups_prime(&curve, &cfg);
+ GEN vec = gtocol0(gen_0, 2);
+ gel(vec, 1) = stoi(2);
+ gel(vec, 2) = stoi(3);
+ cr_assert(gequal(divs, vec), "Factors not equal!");
+}
+
+Test(subgroups, test_prime_prime) {
+ curve_t curve = {.order = stoi(5)};
+ config_t cfg = {.prime = true};
+ GEN divs = subgroups_prime(&curve, &cfg);
+ GEN vec = gtocol(stoi(5));
+ cr_assert(gequal(divs, vec), "Factors not equal!");
+} \ No newline at end of file
diff --git a/test/src/test/utils.c b/test/src/test/utils.c
new file mode 100644
index 0000000..a8a11db
--- /dev/null
+++ b/test/src/test/utils.c
@@ -0,0 +1,14 @@
+/*
+ * ecgen, tool for generating Elliptic curve domain parameters
+ * Copyright (C) 2017 J08nY
+ */
+#include "utils.h"
+#include <pari/pari.h>
+
+void default_setup(void) {
+ pari_init(1000000, 1000000);
+}
+
+void default_teardown(void) {
+ pari_close();
+} \ No newline at end of file
diff --git a/test/src/test/utils.h b/test/src/test/utils.h
new file mode 100644
index 0000000..2780bd2
--- /dev/null
+++ b/test/src/test/utils.h
@@ -0,0 +1,12 @@
+/*
+ * ecgen, tool for generating Elliptic curve domain parameters
+ * Copyright (C) 2017 J08nY
+ */
+#ifndef ECGEN_UTILS_H
+#define ECGEN_UTILS_H
+
+void default_setup(void);
+
+void default_teardown(void);
+
+#endif //ECGEN_UTILS_H
diff --git a/test/verify.gp b/test/verify.gp
deleted file mode 100644
index e69de29..0000000
--- a/test/verify.gp
+++ /dev/null