mirror of
https://github.com/ipxe/ipxe
synced 2026-01-24 21:24:47 +03:00
78 lines
2.1 KiB
C
78 lines
2.1 KiB
C
#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 */
|