aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--GNUmakefile4
-rw-r--r--aes_keywrap.c2
-rw-r--r--asn1.c4
-rw-r--r--asn1_internal.h1
-rw-r--r--csprng.c3
-rw-r--r--ecdsa.c4
-rw-r--r--errorstrings.c6
-rw-r--r--hal.h4
-rw-r--r--hal_io_eim.c6
-rw-r--r--hash.c4
-rw-r--r--modexp.c2
-rw-r--r--pbkdf2.c6
-rw-r--r--tests/GNUmakefile2
-rw-r--r--tests/test-aes-key-wrap.c1
-rw-r--r--tests/test-bus.c163
-rw-r--r--tests/test-ecdsa.c7
-rw-r--r--tests/test-hash.c1
-rw-r--r--tests/test-pbkdf2.c8
-rw-r--r--tests/test-rsa.c2
-rw-r--r--utils/GNUmakefile2
-rw-r--r--utils/cores.c81
21 files changed, 255 insertions, 58 deletions
diff --git a/GNUmakefile b/GNUmakefile
index 5c14b11..bb3821e 100644
--- a/GNUmakefile
+++ b/GNUmakefile
@@ -37,7 +37,7 @@ IO_OBJ_I2C = hal_io_i2c.o
IO_OBJ = ${IO_OBJ_EIM}
TFMDIR := $(abspath ../thirdparty/libtfm)
-CFLAGS := -g3 -Wall -fPIC -std=c99 -I${TFMDIR} -DHAL_ECDSA_DEBUG_ONLY_STATIC_TEST_VECTOR_RANDOM=1
+CFLAGS += -g3 -Wall -fPIC -std=c99 -I${TFMDIR} -DHAL_ECDSA_DEBUG_ONLY_STATIC_TEST_VECTOR_RANDOM=1
LDFLAGS := -g3 -L${TFMDIR} -ltfm
all: ${LIB}
@@ -47,7 +47,7 @@ all: ${LIB}
${OBJ}: ${INC}
${LIB}: ${OBJ}
- ar rcs $@ $^
+ ${AR} rcs $@ $^
asn1.o rsa.o ecdsa.o: asn1_internal.h
diff --git a/aes_keywrap.c b/aes_keywrap.c
index 324b4ba..f8ce63c 100644
--- a/aes_keywrap.c
+++ b/aes_keywrap.c
@@ -41,8 +41,6 @@
* then split the result back to 64-bit blocks immediately afterwards.
*/
-#include <stdio.h>
-#include <stdlib.h>
#include <stdint.h>
#include <string.h>
#include <assert.h>
diff --git a/asn1.c b/asn1.c
index 2ea44bd..54f022a 100644
--- a/asn1.c
+++ b/asn1.c
@@ -46,11 +46,7 @@
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#include <stdio.h>
#include <stdint.h>
-#include <stdlib.h>
-#include <stddef.h>
-#include <string.h>
#include <assert.h>
#include "hal.h"
diff --git a/asn1_internal.h b/asn1_internal.h
index f6e470f..5dc2a13 100644
--- a/asn1_internal.h
+++ b/asn1_internal.h
@@ -42,7 +42,6 @@
#define _HAL_ASN1_H_
#include <stdint.h>
-#include <stdlib.h>
#include <tfm.h>
diff --git a/csprng.c b/csprng.c
index 4fc80d0..9517d0d 100644
--- a/csprng.c
+++ b/csprng.c
@@ -32,10 +32,7 @@
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#include <assert.h>
#include <stdint.h>
-#include <stddef.h>
-#include <stdio.h>
#include "hal.h"
#include "verilog_constants.h"
diff --git a/ecdsa.c b/ecdsa.c
index 7077dd5..f33e57c 100644
--- a/ecdsa.c
+++ b/ecdsa.c
@@ -65,11 +65,7 @@
* in a relatively type-safe manner before calling libtom.
*/
-#include <stdio.h>
#include <stdint.h>
-#include <stdlib.h>
-#include <stddef.h>
-#include <string.h>
#include <assert.h>
#include "hal.h"
diff --git a/errorstrings.c b/errorstrings.c
index 1a234dd..5a79546 100644
--- a/errorstrings.c
+++ b/errorstrings.c
@@ -32,12 +32,6 @@
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdint.h>
-#include <string.h>
-#include <assert.h>
-
#include "hal.h"
#define DEFINE_HAL_ERROR(_code_,_text_) \
diff --git a/hal.h b/hal.h
index 2ae412b..eb1e253 100644
--- a/hal.h
+++ b/hal.h
@@ -60,7 +60,7 @@
#define I2C_INTERFACE_VERSION "0.10"
#define TRNG_NAME "trng "
-#define TRNG_VERSION "0.50"
+#define TRNG_VERSION "0.51"
#define AVALANCHE_ENTROPY_NAME "extnoise"
#define AVALANCHE_ENTROPY_VERSION "0.10"
@@ -75,7 +75,7 @@
#define SHA1_VERSION "0.50"
#define SHA256_NAME "sha2-256"
-#define SHA256_VERSION "0.80"
+#define SHA256_VERSION "0.81"
#define SHA512_NAME "sha2-512"
#define SHA512_VERSION "0.80"
diff --git a/hal_io_eim.c b/hal_io_eim.c
index 7d2e32a..fbf1d67 100644
--- a/hal_io_eim.c
+++ b/hal_io_eim.c
@@ -34,12 +34,8 @@
*/
#include <stdio.h>
-#include <stdlib.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <sys/ioctl.h>
#include <stdint.h>
-#include <arpa/inet.h>
+#include <arpa/inet.h> /* htonl/ntohl */
#include "novena-eim.h"
#include "hal.h"
diff --git a/hash.c b/hash.c
index 5316a2d..0ba6b50 100644
--- a/hash.c
+++ b/hash.c
@@ -37,10 +37,6 @@
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <sys/ioctl.h>
#include "hal.h"
#include "verilog_constants.h"
diff --git a/modexp.c b/modexp.c
index f008064..83bf811 100644
--- a/modexp.c
+++ b/modexp.c
@@ -41,8 +41,6 @@
#include <stdio.h>
#include <stdint.h>
-#include <stdlib.h>
-#include <string.h>
#include <assert.h>
#include "hal.h"
diff --git a/pbkdf2.c b/pbkdf2.c
index def5067..85273f0 100644
--- a/pbkdf2.c
+++ b/pbkdf2.c
@@ -34,13 +34,7 @@
#include <assert.h>
#include <string.h>
-#include <stdio.h>
-#include <stdlib.h>
#include <stdint.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <sys/ioctl.h>
#include "hal.h"
#include "verilog_constants.h"
diff --git a/tests/GNUmakefile b/tests/GNUmakefile
index a1cd4b4..2361ede 100644
--- a/tests/GNUmakefile
+++ b/tests/GNUmakefile
@@ -27,7 +27,7 @@
INC = ../hal.h
LIB = ../libhal.a
-BIN = test-aes-key-wrap test-hash test-pbkdf2 test-rsa test-ecdsa
+BIN = test-aes-key-wrap test-hash test-pbkdf2 test-rsa test-ecdsa test-bus
CFLAGS = -g3 -Wall -fPIC -std=c99 -I..
diff --git a/tests/test-aes-key-wrap.c b/tests/test-aes-key-wrap.c
index 3e9b10d..caf3a2c 100644
--- a/tests/test-aes-key-wrap.c
+++ b/tests/test-aes-key-wrap.c
@@ -33,7 +33,6 @@
*/
#include <stdio.h>
-#include <stdlib.h>
#include <stdint.h>
#include <string.h>
#include <assert.h>
diff --git a/tests/test-bus.c b/tests/test-bus.c
new file mode 100644
index 0000000..bffe5d3
--- /dev/null
+++ b/tests/test-bus.c
@@ -0,0 +1,163 @@
+/*
+ * test-bus.c
+ * ----------
+ * Test raw read/write performance across the EIM or FMC bus.
+ *
+ * Copyright (c) 2015, NORDUnet A/S All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * - Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * - Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * - Neither the name of the NORDUnet nor the names of its contributors may
+ * be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+#include <assert.h>
+
+#include <sys/time.h>
+
+#include <hal.h>
+
+#define TEST_NUM_ROUNDS 2000000
+
+/*
+ * Sanity test - are the cores present, and can we get a random number?
+ */
+
+static int sanity(void)
+{
+ uint32_t rnd, data;
+ int n = 10;
+ hal_error_t err;
+
+ if (((err = hal_io_expected(BOARD_ADDR_NAME0, (const uint8_t *) NOVENA_BOARD_NAME0, 4)) != HAL_OK) ||
+ ((err = hal_io_expected(CSPRNG_ADDR_NAME0, (const uint8_t *) CSPRNG_NAME0, 4)) != HAL_OK)) {
+ printf("initialization failed (is the bitstream loaded?): %s\n",
+ hal_error_string(err));
+ return 1;
+ }
+
+ if ((err = hal_io_wait(CSPRNG_ADDR_STATUS, CSPRNG_STATUS_VALID, &n)) != HAL_OK) {
+ printf("waiting for CSPRNG: %s\n", hal_error_string(err));
+ return 1;
+ }
+ if ((err = hal_io_read(CSPRNG_ADDR_RANDOM, (uint8_t *) &rnd, sizeof(rnd))) != HAL_OK) {
+ printf("reading CSPRNG: %s\n", hal_error_string(err));
+ return 1;
+ }
+
+ if ((err = hal_io_write(BOARD_ADDR_DUMMY, (const uint8_t *) &rnd, sizeof(rnd))) != HAL_OK) {
+ printf("writing dummy: %s\n", hal_error_string(err));
+ return 1;
+ }
+ if ((err = hal_io_read(BOARD_ADDR_DUMMY, (uint8_t *) &data, sizeof(data))) != HAL_OK) {
+ printf("reading dummy: %s\n", hal_error_string(err));
+ return 1;
+ }
+
+ if (data != rnd) {
+ printf("Data bus fail: expected %08lx, got %08lx, diff %08lx\n", rnd, data, data ^ rnd);
+ return 1;
+ }
+
+ return 0;
+}
+
+/*
+ * Time a test.
+ */
+
+static void _time_check(char *label, const struct timeval t0, const int err)
+{
+ struct timeval t;
+ float rounds;
+ gettimeofday(&t, NULL);
+ t.tv_sec -= t0.tv_sec;
+ t.tv_usec -= t0.tv_usec;
+ if (t.tv_usec < 0) {
+ t.tv_usec += 1000000;
+ t.tv_sec -= 1;
+ }
+ rounds = (float)TEST_NUM_ROUNDS/((float)t.tv_sec + ((float)t.tv_usec / 1000000));
+ printf("%s%lu.%06lu seconds, %u/sec\n", label, t.tv_sec, t.tv_usec, (unsigned)rounds);
+}
+
+#define time_check(_label_, _expr_) \
+ do { \
+ struct timeval _t; \
+ gettimeofday(&_t, NULL); \
+ int _err = (_expr_); \
+ _time_check(_label_, _t, _err); \
+ err |= _err; \
+ } while (0)
+
+/*
+ * Read and write over and over again.
+ */
+
+static int test_read(void)
+{
+ uint32_t i, data;
+ hal_error_t err;
+
+ for (i = 0; i < TEST_NUM_ROUNDS; ++i) {
+ if ((err = hal_io_read(BOARD_ADDR_DUMMY, (uint8_t *) &data, sizeof(data))) != HAL_OK) {
+ printf("reading dummy: %s\n", hal_error_string(err));
+ return 1;
+ }
+ }
+
+ return 0;
+}
+
+static int test_write(void)
+{
+ uint32_t i;
+ hal_error_t err;
+
+ for (i = 0; i < TEST_NUM_ROUNDS; ++i) {
+ if ((err = hal_io_write(BOARD_ADDR_DUMMY, (const uint8_t *) &i, sizeof(i))) != HAL_OK) {
+ printf("writing dummy: %s\n", hal_error_string(err));
+ return 1;
+ }
+ }
+
+ return 0;
+}
+
+int main(void)
+{
+ int err = 0;
+
+ if (sanity() != 0)
+ return 1;
+
+ time_check("read ", test_read());
+ time_check("write ", test_write());
+
+ return err;
+}
diff --git a/tests/test-ecdsa.c b/tests/test-ecdsa.c
index e940498..4a0a361 100644
--- a/tests/test-ecdsa.c
+++ b/tests/test-ecdsa.c
@@ -46,10 +46,7 @@
#include <stdio.h>
#include <stdint.h>
-#include <stdlib.h>
#include <string.h>
-#include <assert.h>
-#include <errno.h>
#include <sys/time.h>
@@ -285,7 +282,7 @@ static void _time_check(const struct timeval t0, const int ok)
struct timeval t;
gettimeofday(&t, NULL);
t.tv_sec -= t0.tv_sec;
- t.tv_usec = t0.tv_usec;
+ t.tv_usec -= t0.tv_usec;
if (t.tv_usec < 0) {
t.tv_usec += 1000000;
t.tv_sec -= 1;
@@ -327,11 +324,13 @@ int main(int argc, char *argv[])
int ok = 1;
+#if HAL_ECDSA_DEBUG_ONLY_STATIC_TEST_VECTOR_RANDOM
/*
* Test vectors (where we have them).
*/
for (int i = 0; i < sizeof(ecdsa_tc)/sizeof(*ecdsa_tc); i++)
time_check(test_against_static_vectors(&ecdsa_tc[i]));
+#endif
/*
* Generate/sign/verify test for each curve.
diff --git a/tests/test-hash.c b/tests/test-hash.c
index 3f45911..9e71a0e 100644
--- a/tests/test-hash.c
+++ b/tests/test-hash.c
@@ -33,7 +33,6 @@
*/
#include <stdio.h>
-#include <stdlib.h>
#include <stdint.h>
#include <string.h>
#include <assert.h>
diff --git a/tests/test-pbkdf2.c b/tests/test-pbkdf2.c
index 744ca47..112775a 100644
--- a/tests/test-pbkdf2.c
+++ b/tests/test-pbkdf2.c
@@ -32,15 +32,9 @@
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#include <assert.h>
-#include <string.h>
#include <stdio.h>
-#include <stdlib.h>
#include <stdint.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <sys/ioctl.h>
+#include <string.h>
#include <hal.h>
diff --git a/tests/test-rsa.c b/tests/test-rsa.c
index c6bf97a..c7103c9 100644
--- a/tests/test-rsa.c
+++ b/tests/test-rsa.c
@@ -40,9 +40,7 @@
#include <stdio.h>
#include <stdint.h>
-#include <stdlib.h>
#include <string.h>
-#include <assert.h>
#include <errno.h>
#include <sys/time.h>
diff --git a/utils/GNUmakefile b/utils/GNUmakefile
index 8ebebf1..dcc6679 100644
--- a/utils/GNUmakefile
+++ b/utils/GNUmakefile
@@ -27,7 +27,7 @@
INC = ../hal.h
LIB = ../libhal.a
-BIN = eim_peek_poke
+BIN = eim_peek_poke cores
CFLAGS = -g3 -Wall -fPIC -std=c99 -I..
diff --git a/utils/cores.c b/utils/cores.c
new file mode 100644
index 0000000..da823a7
--- /dev/null
+++ b/utils/cores.c
@@ -0,0 +1,81 @@
+/*
+ * cores.c
+ * -------
+ * Report which cores are present on the FPGA.
+ *
+ * Copyright (c) 2015, NORDUnet A/S All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * - Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * - Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * - Neither the name of the NORDUnet nor the names of its contributors may
+ * be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <stdio.h>
+#include <stdint.h>
+#include <string.h>
+#include <errno.h>
+
+#include <sys/time.h>
+
+#include <hal.h>
+
+off_t cores[] = {
+ BOARD_ADDR_BASE,
+ COMM_ADDR_BASE,
+ SHA1_ADDR_BASE,
+ SHA256_ADDR_BASE,
+ SHA512_ADDR_BASE,
+ TRNG_ADDR_BASE,
+ ENTROPY1_ADDR_BASE,
+ ENTROPY2_ADDR_BASE,
+ MIXER_ADDR_BASE,
+ CSPRNG_ADDR_BASE,
+ AES_ADDR_BASE,
+ CHACHA_ADDR_BASE,
+ MODEXPS6_ADDR_BASE
+};
+
+int main(int argc, char *argv[])
+{
+ uint8_t name[9] = {0}, version[5] = {0};
+ hal_error_t err;
+ int i;
+
+ /*
+ * Initialize EIM and report what cores we've got.
+ */
+ for (i = 0; i < sizeof(cores)/sizeof(cores[0]); ++i) {
+ if ((err = hal_io_read(cores[i], name, 8)) != HAL_OK ||
+ (err = hal_io_read(cores[i] + 2, version, 4)) != HAL_OK) {
+ printf("hal_io_read failed: %s\n", hal_error_string(err));
+ return 1;
+ }
+
+ if (name[0] != 0)
+ printf("%08lx: %8s %4s\n", cores[i], name, version);
+ }
+
+ return 0;
+}