1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
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 */
|