mirror of
https://github.com/ipxe/ipxe
synced 2026-02-28 03:11:18 +03:00
[test] Add generic tests for elliptic curve point multiplication
Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
77
src/tests/elliptic_test.h
Normal file
77
src/tests/elliptic_test.h
Normal file
@@ -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 */
|
||||
Reference in New Issue
Block a user