aboutsummaryrefslogtreecommitdiffstats
path: root/src/tests/elliptic_test.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/tests/elliptic_test.h')
-rw-r--r--src/tests/elliptic_test.h77
1 files changed, 77 insertions, 0 deletions
diff --git a/src/tests/elliptic_test.h b/src/tests/elliptic_test.h
new file mode 100644
index 000000000..94fca60aa
--- /dev/null
+++ b/src/tests/elliptic_test.h
@@ -0,0 +1,77 @@
+#ifndef _ELLIPTIC_TEST_H
+#define _ELLIPTIC_TEST_H
+
+FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
+
+#include <stdint.h>
+#include <ipxe/crypto.h>
+#include <ipxe/test.h>
+
+/** An elliptic curve point multiplication test */
+struct elliptic_test {
+ /** Elliptic curve */
+ struct elliptic_curve *curve;
+ /** Base point */
+ const void *base;
+ /** Length of base point (or 0 to use generator) */
+ size_t base_len;
+ /** Scalar multiple */
+ const void *scalar;
+ /** Length of scalar multiple */
+ size_t scalar_len;
+ /** Expected result point */
+ const void *expected;
+ /** Length of expected result point (or 0 to expect failure) */
+ size_t expected_len;
+};
+
+/** Define inline base point */
+#define BASE(...) { __VA_ARGS__ }
+
+/** Define base point to be curve's generator */
+#define BASE_GENERATOR BASE()
+
+/** Define inline scalar multiple */
+#define SCALAR(...) { __VA_ARGS__ }
+
+/** Define inline expected result point */
+#define EXPECTED(...) { __VA_ARGS__ }
+
+/** Define result as an expected failure */
+#define EXPECTED_FAIL EXPECTED()
+
+/**
+ * Define an elliptic curve point multiplication test
+ *
+ * @v name Test name
+ * @v CURVE Elliptic curve
+ * @v BASE Base point
+ * @v SCALAR Scalar multiple
+ * @v EXPECTED Expected result point
+ * @ret test Elliptic curve point multiplication test
+ */
+#define ELLIPTIC_TEST( name, CURVE, BASE, SCALAR, EXPECTED ) \
+ static const uint8_t name ## _base[] = BASE; \
+ static const uint8_t name ## _scalar[] = SCALAR; \
+ static const uint8_t name ## _expected[] = EXPECTED; \
+ static struct elliptic_test name = { \
+ .curve = CURVE, \
+ .base = name ## _base, \
+ .base_len = sizeof ( name ## _base ), \
+ .scalar = name ## _scalar, \
+ .scalar_len = sizeof ( name ## _scalar ), \
+ .expected = name ## _expected, \
+ .expected_len = sizeof ( name ## _expected ), \
+ };
+
+extern void elliptic_okx ( struct elliptic_test *test, const char *file,
+ unsigned int line );
+
+/**
+ * Report an elliptic curve point multiplication test result
+ *
+ * @v test Elliptic curve point multiplication test
+ */
+#define elliptic_ok( test ) elliptic_okx ( test, __FILE__, __LINE__ )
+
+#endif /* _ELLIPTIC_TEST_H */