iPXE
elliptic_test.h
Go to the documentation of this file.
1 #ifndef _ELLIPTIC_TEST_H
2 #define _ELLIPTIC_TEST_H
3 
4 FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
5 
6 #include <stdint.h>
7 #include <ipxe/crypto.h>
8 #include <ipxe/test.h>
9 
10 /** An elliptic curve point multiplication test */
11 struct elliptic_test {
12  /** Elliptic curve */
14  /** Base point */
15  const void *base;
16  /** Length of base point (or 0 to use generator) */
17  size_t base_len;
18  /** Scalar multiple */
19  const void *scalar;
20  /** Length of scalar multiple */
21  size_t scalar_len;
22  /** Expected result point */
23  const void *expected;
24  /** Length of expected result point (or 0 to expect failure) */
25  size_t expected_len;
26 };
27 
28 /** Define inline base point */
29 #define BASE(...) { __VA_ARGS__ }
30 
31 /** Define base point to be curve's generator */
32 #define BASE_GENERATOR BASE()
33 
34 /** Define inline scalar multiple */
35 #define SCALAR(...) { __VA_ARGS__ }
36 
37 /** Define inline expected result point */
38 #define EXPECTED(...) { __VA_ARGS__ }
39 
40 /** Define result as an expected failure */
41 #define EXPECTED_FAIL EXPECTED()
42 
43 /**
44  * Define an elliptic curve point multiplication test
45  *
46  * @v name Test name
47  * @v CURVE Elliptic curve
48  * @v BASE Base point
49  * @v SCALAR Scalar multiple
50  * @v EXPECTED Expected result point
51  * @ret test Elliptic curve point multiplication test
52  */
53 #define ELLIPTIC_TEST( name, CURVE, BASE, SCALAR, EXPECTED ) \
54  static const uint8_t name ## _base[] = BASE; \
55  static const uint8_t name ## _scalar[] = SCALAR; \
56  static const uint8_t name ## _expected[] = EXPECTED; \
57  static struct elliptic_test name = { \
58  .curve = CURVE, \
59  .base = name ## _base, \
60  .base_len = sizeof ( name ## _base ), \
61  .scalar = name ## _scalar, \
62  .scalar_len = sizeof ( name ## _scalar ), \
63  .expected = name ## _expected, \
64  .expected_len = sizeof ( name ## _expected ), \
65  };
66 
67 extern void elliptic_okx ( struct elliptic_test *test, const char *file,
68  unsigned int line );
69 
70 /**
71  * Report an elliptic curve point multiplication test result
72  *
73  * @v test Elliptic curve point multiplication test
74  */
75 #define elliptic_ok( test ) elliptic_okx ( test, __FILE__, __LINE__ )
76 
77 #endif /* _ELLIPTIC_TEST_H */
size_t expected_len
Length of expected result point (or 0 to expect failure)
Definition: elliptic_test.h:25
const void * scalar
Scalar multiple.
Definition: elliptic_test.h:19
struct elliptic_curve * curve
Elliptic curve.
Definition: elliptic_test.h:13
Self-test infrastructure.
Cryptographic API.
An elliptic curve point multiplication test.
Definition: elliptic_test.h:11
size_t base_len
Length of base point (or 0 to use generator)
Definition: elliptic_test.h:17
size_t scalar_len
Length of scalar multiple.
Definition: elliptic_test.h:21
const void * base
Base point.
Definition: elliptic_test.h:15
void elliptic_okx(struct elliptic_test *test, const char *file, unsigned int line)
Report elliptic curve point multiplication test result.
Definition: elliptic_test.c:49
An elliptic curve.
Definition: crypto.h:177
const void * expected
Expected result point.
Definition: elliptic_test.h:23
static int test
Definition: epic100.c:73
FILE_LICENCE(GPL2_OR_LATER_OR_UBDL)