iPXE
Data Structures | Macros | Functions
elliptic_test.h File Reference
#include <stdint.h>
#include <ipxe/crypto.h>
#include <ipxe/test.h>

Go to the source code of this file.

Data Structures

struct  elliptic_test
 An elliptic curve point multiplication test. More...
 

Macros

#define BASE(...)   { __VA_ARGS__ }
 Define inline base point. More...
 
#define BASE_GENERATOR   BASE()
 Define base point to be curve's generator. More...
 
#define SCALAR(...)   { __VA_ARGS__ }
 Define inline scalar multiple. More...
 
#define EXPECTED(...)   { __VA_ARGS__ }
 Define inline expected result point. More...
 
#define EXPECTED_FAIL   EXPECTED()
 Define result as an expected failure. More...
 
#define ELLIPTIC_TEST(name, CURVE, BASE, SCALAR, EXPECTED)
 Define an elliptic curve point multiplication test. More...
 
#define elliptic_ok(test)   elliptic_okx ( test, __FILE__, __LINE__ )
 Report an elliptic curve point multiplication test result. More...
 

Functions

 FILE_LICENCE (GPL2_OR_LATER_OR_UBDL)
 
void elliptic_okx (struct elliptic_test *test, const char *file, unsigned int line)
 Report elliptic curve point multiplication test result. More...
 

Macro Definition Documentation

◆ BASE

#define BASE (   ...)    { __VA_ARGS__ }

Define inline base point.

Definition at line 29 of file elliptic_test.h.

◆ BASE_GENERATOR

#define BASE_GENERATOR   BASE()

Define base point to be curve's generator.

Definition at line 32 of file elliptic_test.h.

◆ SCALAR

#define SCALAR (   ...)    { __VA_ARGS__ }

Define inline scalar multiple.

Definition at line 35 of file elliptic_test.h.

◆ EXPECTED

#define EXPECTED (   ...)    { __VA_ARGS__ }

Define inline expected result point.

Definition at line 38 of file elliptic_test.h.

◆ EXPECTED_FAIL

#define EXPECTED_FAIL   EXPECTED()

Define result as an expected failure.

Definition at line 41 of file elliptic_test.h.

◆ ELLIPTIC_TEST

#define ELLIPTIC_TEST (   name,
  CURVE,
  BASE,
  SCALAR,
  EXPECTED 
)
Value:
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 ), \
};
const char * name
Definition: ath9k_hw.c:1984
const void * scalar
Scalar multiple.
Definition: elliptic_test.h:19
An elliptic curve point multiplication test.
Definition: elliptic_test.h:11
#define SCALAR(...)
Define inline scalar multiple.
Definition: elliptic_test.h:35
size_t scalar_len
Length of scalar multiple.
Definition: elliptic_test.h:21
#define BASE(...)
Define inline base point.
Definition: elliptic_test.h:29
unsigned char uint8_t
Definition: stdint.h:10
#define EXPECTED(...)
Define inline expected result point.
Definition: elliptic_test.h:38

Define an elliptic curve point multiplication test.

Parameters
nameTest name
CURVEElliptic curve
BASEBase point
SCALARScalar multiple
EXPECTEDExpected result point
Return values
testElliptic curve point multiplication test

Definition at line 53 of file elliptic_test.h.

◆ elliptic_ok

#define elliptic_ok (   test)    elliptic_okx ( test, __FILE__, __LINE__ )

Report an elliptic curve point multiplication test result.

Parameters
testElliptic curve point multiplication test

Definition at line 75 of file elliptic_test.h.

Function Documentation

◆ FILE_LICENCE()

FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL  )

◆ elliptic_okx()

void elliptic_okx ( struct elliptic_test test,
const char *  file,
unsigned int  line 
)

Report elliptic curve point multiplication test result.

Parameters
testElliptic curve point multiplication test
fileTest code file
lineTest code line

Definition at line 49 of file elliptic_test.c.

50  {
51  struct elliptic_curve *curve = test->curve;
52  size_t pointsize = curve->pointsize;
53  size_t keysize = curve->keysize;
54  uint8_t actual[pointsize];
55  int rc;
56 
57  /* Sanity checks */
58  okx ( ( test->base_len == pointsize ) || ( ! test->base_len ),
59  file, line );
60  okx ( test->scalar_len == keysize, file, line );
61  okx ( ( test->expected_len == pointsize ) || ( ! test->expected_len ),
62  file, line );
63 
64  /* Perform point multiplication */
65  rc = elliptic_multiply ( curve, ( test->base_len ? test->base : NULL ),
66  test->scalar, actual );
67  if ( test->expected_len ) {
68  okx ( rc == 0, file, line );
69  } else {
70  okx ( rc != 0, file, line );
71  }
72 
73  /* Check expected result */
74  okx ( memcmp ( actual, test->expected, test->expected_len ) == 0,
75  file, line );
76 }
struct arbelprm_rc_send_wqe rc
Definition: arbel.h:14
static int elliptic_multiply(struct elliptic_curve *curve, const void *base, const void *scalar, void *result)
Definition: crypto.h:310
#define okx(success, file, line)
Report test result.
Definition: test.h:44
size_t keysize
Scalar (and private key) size.
Definition: crypto.h:190
unsigned char uint8_t
Definition: stdint.h:10
u16 keysize
Length of encryption key to be used, network byte order.
Definition: wpa.h:37
An elliptic curve.
Definition: crypto.h:184
size_t pointsize
Point (and public key) size.
Definition: crypto.h:188
int memcmp(const void *first, const void *second, size_t len)
Compare memory regions.
Definition: string.c:114
#define NULL
NULL pointer (VOID *)
Definition: Base.h:321
static int test
Definition: epic100.c:73

References elliptic_multiply(), keysize, elliptic_curve::keysize, memcmp(), NULL, okx, elliptic_curve::pointsize, rc, and test.