iPXE
Data Structures | Macros | Functions | Variables
x25519_test.c File Reference

X25519 key exchange test. More...

#include <stdint.h>
#include <string.h>
#include <ipxe/x25519.h>
#include <ipxe/test.h>

Go to the source code of this file.

Data Structures

struct  x25519_multiply_test
 An X25519 multiplication self-test. More...
 
struct  x25519_invert_test
 An X25519 multiplicative inversion self-test. More...
 
struct  x25519_key_test
 An X25519 key exchange self-test. More...
 

Macros

#define MULTIPLICAND(...)   { __VA_ARGS__ }
 Define inline multiplicand. More...
 
#define MULTIPLIER(...)   { __VA_ARGS__ }
 Define inline multiplier. More...
 
#define INVERTEND(...)   { __VA_ARGS__ }
 Define inline invertend. More...
 
#define BASE(...)   { __VA_ARGS__ }
 Define inline base point. More...
 
#define SCALAR(...)   { __VA_ARGS__ }
 Define inline scalar multiple. More...
 
#define EXPECTED(...)   { __VA_ARGS__ }
 Define inline expected result. More...
 
#define X25519_MULTIPLY_TEST(name, MULTIPLICAND, MULTIPLIER, EXPECTED)
 Define an X25519 multiplication test. More...
 
#define X25519_INVERT_TEST(name, INVERTEND, EXPECTED)
 Define an X25519 multiplicative inversion test. More...
 
#define X25519_KEY_TEST(name, COUNT, FAIL, BASE, SCALAR, EXPECTED)
 Define an X25519 key exchange test. More...
 
#define x25519_multiply_ok(test)   x25519_multiply_okx ( test, __FILE__, __LINE__ )
 
#define x25519_invert_ok(test)   x25519_invert_okx ( test, __FILE__, __LINE__ )
 
#define x25519_key_ok(test)   x25519_key_okx ( test, __FILE__, __LINE__ )
 

Functions

 FILE_LICENCE (GPL2_OR_LATER_OR_UBDL)
 
static void x25519_multiply_okx (struct x25519_multiply_test *test, const char *file, unsigned int line)
 Report an X25519 multiplication test result. More...
 
static void x25519_invert_okx (struct x25519_invert_test *test, const char *file, unsigned int line)
 Report an X25519 multiplicative inversion test result. More...
 
static void x25519_key_okx (struct x25519_key_test *test, const char *file, unsigned int line)
 Report an X25519 key exchange test result. More...
 
 X25519_MULTIPLY_TEST (multiply_small, MULTIPLICAND(6), MULTIPLIER(9), EXPECTED(6 *9))
 
 X25519_MULTIPLY_TEST (multiply_k_p, MULTIPLICAND(0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xed), MULTIPLIER(0x00, 0xe8, 0x0d, 0x83, 0xd4, 0xe9, 0x1e, 0xdd, 0x7a, 0x45, 0x14, 0x87, 0xb7, 0xfc, 0x62, 0x54, 0x1f, 0xb2, 0x97, 0x24, 0xde, 0xfa, 0xd3, 0xe7, 0x3e, 0x83, 0x93, 0x60, 0xbc, 0x20, 0x97, 0x9b, 0x22), EXPECTED(0x00))
 
 X25519_MULTIPLY_TEST (multiply_1, MULTIPLICAND(0x02, 0x23, 0xb8, 0xc1, 0xe9, 0x39, 0x24, 0x56, 0xde, 0x3e, 0xb1, 0x3b, 0x90, 0x46, 0x68, 0x52, 0x57, 0xbd, 0xd6, 0x40, 0xfb, 0x06, 0x67, 0x1a, 0xd1, 0x1c, 0x80, 0x31, 0x7f, 0xa3, 0xb1, 0x79, 0x9d), MULTIPLIER(0x00, 0x6c, 0x03, 0x11, 0x99, 0x97, 0x2a, 0x84, 0x69, 0x16, 0x41, 0x9f, 0x82, 0x8b, 0x9d, 0x24, 0x34, 0xe4, 0x65, 0xe1, 0x50, 0xbd, 0x9c, 0x66, 0xb3, 0xad, 0x3c, 0x2d, 0x6d, 0x1a, 0x3d, 0x1f, 0xa7), EXPECTED(0x1b, 0xa8, 0x7e, 0x98, 0x2f, 0x7c, 0x47, 0x76, 0x16, 0xb4, 0xd5, 0x13, 0x6b, 0xa5, 0x47, 0x33, 0xe4, 0x00, 0x81, 0xc1, 0xc2, 0xe2, 0x7d, 0x86, 0x4a, 0xa1, 0x78, 0xce, 0x89, 0x3d, 0x12, 0x97))
 
 X25519_MULTIPLY_TEST (multiply_2, MULTIPLICAND(0x00, 0x8f, 0xad, 0xc1, 0xa6, 0x06, 0xcb, 0x0f, 0xb3, 0x9a, 0x1d, 0xe6, 0x44, 0x81, 0x5e, 0xf6, 0xd1, 0x3b, 0x8f, 0xaa, 0x18, 0x37, 0xf8, 0xa8, 0x8b, 0x17, 0xfc, 0x69, 0x5a, 0x07, 0xa0, 0xca, 0x6e), MULTIPLIER(0x01, 0x96, 0xda, 0x1d, 0xac, 0x72, 0xff, 0x5d, 0x2a, 0x38, 0x6e, 0xcb, 0xe0, 0x6b, 0x65, 0xa6, 0xa4, 0x8b, 0x81, 0x48, 0xf6, 0xb3, 0x8a, 0x08, 0x8c, 0xa6, 0x5e, 0xd3, 0x89, 0xb7, 0x4d, 0x0f, 0xb1), EXPECTED(0x35, 0x1f, 0x7b, 0xf7, 0x5e, 0xf5, 0x80, 0x24, 0x9e, 0xd6, 0xf9, 0xff, 0x39, 0x96, 0x46, 0x3b, 0x07, 0x30, 0xa1, 0xd4, 0x9b, 0x5d, 0x36, 0xb8, 0x63, 0xe1, 0x92, 0x59, 0x11, 0x57, 0xe9, 0x50))
 
 X25519_MULTIPLY_TEST (multiply_3, MULTIPLICAND(0x01, 0x6c, 0x30, 0x75, 0x11, 0xb2, 0xb9, 0x43, 0x7a, 0x28, 0xdf, 0x6e, 0xc4, 0xce, 0x4a, 0x2b, 0xbd, 0xc2, 0x41, 0x33, 0x0b, 0x01, 0xa9, 0xe7, 0x1f, 0xde, 0x8a, 0x77, 0x4b, 0xcf, 0x36, 0xd5, 0x8b), MULTIPLIER(0x01, 0x17, 0xbe, 0x31, 0x11, 0x1a, 0x2a, 0x73, 0xed, 0x56, 0x2b, 0x0f, 0x79, 0xc3, 0x74, 0x59, 0xee, 0xf5, 0x0b, 0xea, 0x63, 0x37, 0x1e, 0xcd, 0x7b, 0x27, 0xcd, 0x81, 0x30, 0x47, 0x22, 0x93, 0x89), EXPECTED(0x6b, 0x43, 0xb5, 0x18, 0x59, 0x65, 0xf8, 0xf0, 0x92, 0x0f, 0x31, 0xae, 0x1b, 0x2c, 0xef, 0xad, 0xd7, 0xb0, 0x78, 0xfe, 0xcf, 0x68, 0xdb, 0xea, 0xa1, 0x7b, 0x9c, 0x38, 0x5b, 0x55, 0x83, 0x29))
 
 X25519_MULTIPLY_TEST (multiply_4, MULTIPLICAND(0x02, 0x0b, 0x1f, 0x91, 0x63, 0xce, 0x9f, 0xf5, 0x7f, 0x43, 0xb7, 0xa3, 0xa6, 0x9a, 0x8d, 0xca, 0x03, 0x58, 0x0d, 0x7b, 0x71, 0xd8, 0xf5, 0x64, 0x13, 0x5b, 0xe6, 0x12, 0x8e, 0x18, 0xc2, 0x67, 0x97), MULTIPLIER(0x01, 0x8d, 0x52, 0x88, 0xf1, 0x14, 0x2c, 0x3f, 0xe8, 0x60, 0xe7, 0xa1, 0x13, 0xec, 0x1b, 0x8c, 0xa1, 0xf9, 0x1e, 0x1d, 0x4c, 0x1f, 0xf4, 0x9b, 0x78, 0x89, 0x46, 0x3e, 0x85, 0x75, 0x9c, 0xde, 0x66), EXPECTED(0x28, 0xa7, 0x7d, 0x3c, 0x8a, 0x14, 0x32, 0x3d, 0x63, 0xb2, 0x88, 0xdb, 0xd4, 0x03, 0x15, 0xb3, 0xf1, 0x92, 0xb8, 0x48, 0x5d, 0x86, 0xa0, 0x2c, 0xb8, 0x7d, 0x3d, 0xfb, 0x7a, 0x0b, 0x54, 0x47))
 
 X25519_MULTIPLY_TEST (multiply_5, MULTIPLICAND(0x02, 0x31, 0x39, 0xd3, 0x2c, 0x93, 0xcd, 0x59, 0xbf, 0x5c, 0x94, 0x1c, 0xf0, 0xdc, 0x98, 0xd2, 0xc1, 0xe2, 0xac, 0xf7, 0x2f, 0x9e, 0x57, 0x4f, 0x7a, 0xa0, 0xee, 0x89, 0xae, 0xd4, 0x53, 0xdd, 0x32), MULTIPLIER(0x03, 0x14, 0x6d, 0x3f, 0x31, 0xfc, 0x37, 0x7a, 0x4c, 0x4a, 0x15, 0x54, 0x4d, 0xc5, 0xe7, 0xce, 0x8a, 0x3a, 0x57, 0x8a, 0x8e, 0xa9, 0x48, 0x8d, 0x99, 0x0b, 0xbb, 0x25, 0x99, 0x11, 0xce, 0x5d, 0xd2), EXPECTED(0x4b, 0xdb, 0x7a, 0x35, 0xc0, 0xa5, 0x18, 0x20, 0x00, 0xaa, 0x67, 0x55, 0x47, 0x41, 0xe8, 0x8c, 0xfd, 0xf4, 0x60, 0xa7, 0x8c, 0x6f, 0xae, 0x07, 0xad, 0xf8, 0x3d, 0x2f, 0x00, 0x5d, 0x27, 0x67))
 
 X25519_INVERT_TEST (invert_1, INVERTEND(0x01, 0xd5, 0x88, 0x42, 0xde, 0xa2, 0xbc, 0x37, 0x2f, 0x74, 0x12, 0xb2, 0x93, 0x47, 0x29, 0x47, 0x39, 0x61, 0x4f, 0xf3, 0xd7, 0x19, 0xdb, 0x3a, 0xd0, 0xdd, 0xd1, 0xdf, 0xb2, 0x3b, 0x98, 0x2e, 0xf8), EXPECTED(0x09, 0x3f, 0xf5, 0x17, 0x50, 0x80, 0x9d, 0x18, 0x1a, 0x9a, 0x54, 0x81, 0xc5, 0x64, 0xe3, 0x7c, 0xff, 0x61, 0x8d, 0xef, 0x8e, 0xc4, 0x5f, 0x46, 0x4b, 0x1a, 0x6e, 0x24, 0xf8, 0xb8, 0x26, 0xbd))
 
 X25519_INVERT_TEST (invert_2, INVERTEND(0x02, 0xef, 0xc8, 0x98, 0x49, 0xb3, 0xaa, 0x7e, 0xfe, 0x44, 0x58, 0xa8, 0x85, 0xab, 0x90, 0x99, 0xa4, 0x35, 0xa2, 0x40, 0xae, 0x5a, 0xf3, 0x05, 0x53, 0x5e, 0xc4, 0x2e, 0x08, 0x29, 0xa3, 0xb2, 0xe9), EXPECTED(0x59, 0x16, 0x07, 0xb1, 0x63, 0xe8, 0x9d, 0x0a, 0xc3, 0x3a, 0x62, 0xc8, 0x81, 0xe9, 0x84, 0xa2, 0x5d, 0x38, 0x26, 0xe3, 0xdb, 0x5c, 0xe2, 0x29, 0xaf, 0x24, 0x0d, 0xc5, 0x8e, 0x5b, 0x57, 0x9a))
 
 X25519_INVERT_TEST (invert_3, INVERTEND(0x00, 0x3e, 0xab, 0xed, 0xcb, 0xba, 0xa8, 0x0d, 0xd4, 0x88, 0xbd, 0x64, 0x07, 0x2b, 0xcf, 0xbe, 0x01, 0xa2, 0x8d, 0xef, 0xe3, 0x9b, 0xf0, 0x02, 0x73, 0x12, 0x47, 0x6f, 0x57, 0xa5, 0xe5, 0xa5, 0xab), EXPECTED(0x7d, 0x87, 0xc2, 0xe5, 0x65, 0xb2, 0x7c, 0x50, 0x38, 0x18, 0x1a, 0x0a, 0x7c, 0xae, 0x9e, 0xbe, 0x82, 0x6c, 0x8a, 0xfc, 0x1f, 0x77, 0x12, 0x8a, 0x4d, 0x62, 0xcc, 0xe9, 0x6d, 0x27, 0x59, 0xa2))
 
 X25519_INVERT_TEST (invert_4, INVERTEND(0x00, 0x8e, 0x94, 0x42, 0x39, 0xb0, 0x2b, 0x61, 0xc4, 0xa3, 0xd7, 0x06, 0x28, 0xec, 0xe6, 0x6f, 0xa2, 0xfd, 0x51, 0x66, 0xe6, 0x45, 0x1b, 0x4c, 0xf3, 0x61, 0x23, 0xfd, 0xf7, 0x76, 0x56, 0xaf, 0x72), EXPECTED(0x08, 0xe9, 0x61, 0x61, 0xa0, 0xee, 0xe1, 0xb2, 0x9a, 0xf3, 0x96, 0xf1, 0x54, 0x95, 0x0d, 0x5c, 0x71, 0x5d, 0xc6, 0x1a, 0xff, 0x66, 0xee, 0x97, 0x37, 0x7a, 0xb2, 0x2a, 0xdf, 0x33, 0x21, 0xd7))
 
 X25519_INVERT_TEST (invert_5, INVERTEND(0x00, 0xd2, 0x61, 0xa7, 0xab, 0x3a, 0xa2, 0xe4, 0xf9, 0x0e, 0x51, 0xf3, 0x0d, 0xc6, 0xa7, 0xee, 0x39, 0xc4, 0xb0, 0x32, 0xcc, 0xd7, 0xc5, 0x24, 0xa5, 0x53, 0x04, 0x31, 0x7f, 0xaf, 0x42, 0xe1, 0x2f), EXPECTED(0x07, 0x38, 0x78, 0x1c, 0x0a, 0xea, 0xbf, 0xbe, 0x6e, 0x84, 0x0c, 0x85, 0xbd, 0x30, 0x99, 0x6e, 0xf7, 0x1b, 0xc5, 0x49, 0x88, 0xce, 0x16, 0xce, 0xdd, 0x5a, 0xb4, 0xf3, 0x0c, 0x28, 0x15, 0x97))
 
 X25519_KEY_TEST (rfc7748_1, 1, 0, BASE(0xe6, 0xdb, 0x68, 0x67, 0x58, 0x30, 0x30, 0xdb, 0x35, 0x94, 0xc1, 0xa4, 0x24, 0xb1, 0x5f, 0x7c, 0x72, 0x66, 0x24, 0xec, 0x26, 0xb3, 0x35, 0x3b, 0x10, 0xa9, 0x03, 0xa6, 0xd0, 0xab, 0x1c, 0x4c), SCALAR(0xa5, 0x46, 0xe3, 0x6b, 0xf0, 0x52, 0x7c, 0x9d, 0x3b, 0x16, 0x15, 0x4b, 0x82, 0x46, 0x5e, 0xdd, 0x62, 0x14, 0x4c, 0x0a, 0xc1, 0xfc, 0x5a, 0x18, 0x50, 0x6a, 0x22, 0x44, 0xba, 0x44, 0x9a, 0xc4), EXPECTED(0xc3, 0xda, 0x55, 0x37, 0x9d, 0xe9, 0xc6, 0x90, 0x8e, 0x94, 0xea, 0x4d, 0xf2, 0x8d, 0x08, 0x4f, 0x32, 0xec, 0xcf, 0x03, 0x49, 0x1c, 0x71, 0xf7, 0x54, 0xb4, 0x07, 0x55, 0x77, 0xa2, 0x85, 0x52))
 
 X25519_KEY_TEST (rfc7748_2, 1, 0, BASE(0xe5, 0x21, 0x0f, 0x12, 0x78, 0x68, 0x11, 0xd3, 0xf4, 0xb7, 0x95, 0x9d, 0x05, 0x38, 0xae, 0x2c, 0x31, 0xdb, 0xe7, 0x10, 0x6f, 0xc0, 0x3c, 0x3e, 0xfc, 0x4c, 0xd5, 0x49, 0xc7, 0x15, 0xa4, 0x93), SCALAR(0x4b, 0x66, 0xe9, 0xd4, 0xd1, 0xb4, 0x67, 0x3c, 0x5a, 0xd2, 0x26, 0x91, 0x95, 0x7d, 0x6a, 0xf5, 0xc1, 0x1b, 0x64, 0x21, 0xe0, 0xea, 0x01, 0xd4, 0x2c, 0xa4, 0x16, 0x9e, 0x79, 0x18, 0xba, 0x0d), EXPECTED(0x95, 0xcb, 0xde, 0x94, 0x76, 0xe8, 0x90, 0x7d, 0x7a, 0xad, 0xe4, 0x5c, 0xb4, 0xb8, 0x73, 0xf8, 0x8b, 0x59, 0x5a, 0x68, 0x79, 0x9f, 0xa1, 0x52, 0xe6, 0xf8, 0xf7, 0x64, 0x7a, 0xac, 0x79, 0x57))
 
 X25519_KEY_TEST (rfc7748_3, 1, 0, BASE(0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00), SCALAR(0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00), EXPECTED(0x42, 0x2c, 0x8e, 0x7a, 0x62, 0x27, 0xd7, 0xbc, 0xa1, 0x35, 0x0b, 0x3e, 0x2b, 0xb7, 0x27, 0x9f, 0x78, 0x97, 0xb8, 0x7b, 0xb6, 0x85, 0x4b, 0x78, 0x3c, 0x60, 0xe8, 0x03, 0x11, 0xae, 0x30, 0x79))
 
 X25519_KEY_TEST (rfc7748_4_100, 100, 0, BASE(0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00), SCALAR(0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00), EXPECTED(0xb1, 0xa5, 0xa7, 0x31, 0x58, 0x90, 0x4c, 0x02, 0x08, 0x66, 0xc1, 0x39, 0x39, 0xdd, 0x7e, 0x1a, 0xa2, 0x68, 0x52, 0xee, 0x1d, 0x26, 0x09, 0xc9, 0x2e, 0x5a, 0x8f, 0x1d, 0xeb, 0xe2, 0x15, 0x0a))
 
 X25519_KEY_TEST (malicious, 1, 1, BASE(0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f), SCALAR(0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f), EXPECTED(0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00))
 
static void x25519_test_exec (void)
 Perform X25519 self-tests. More...
 

Variables

struct self_test x25519_test __self_test
 X25519 self-test. More...
 

Detailed Description

X25519 key exchange test.

Full key exchange test vectors are taken from RFC7748.

Definition in file x25519_test.c.

Macro Definition Documentation

◆ MULTIPLICAND

#define MULTIPLICAND (   ...)    { __VA_ARGS__ }

Define inline multiplicand.

Definition at line 43 of file x25519_test.c.

◆ MULTIPLIER

#define MULTIPLIER (   ...)    { __VA_ARGS__ }

Define inline multiplier.

Definition at line 46 of file x25519_test.c.

◆ INVERTEND

#define INVERTEND (   ...)    { __VA_ARGS__ }

Define inline invertend.

Definition at line 49 of file x25519_test.c.

◆ BASE

#define BASE (   ...)    { __VA_ARGS__ }

Define inline base point.

Definition at line 52 of file x25519_test.c.

◆ SCALAR

#define SCALAR (   ...)    { __VA_ARGS__ }

Define inline scalar multiple.

Definition at line 55 of file x25519_test.c.

◆ EXPECTED

#define EXPECTED (   ...)    { __VA_ARGS__ }

Define inline expected result.

Definition at line 58 of file x25519_test.c.

◆ X25519_MULTIPLY_TEST

#define X25519_MULTIPLY_TEST (   name,
  MULTIPLICAND,
  MULTIPLIER,
  EXPECTED 
)
Value:
static const uint8_t name ## _multiplicand[] = MULTIPLICAND; \
static const uint8_t name ## _multiplier[] = MULTIPLIER; \
static const uint8_t name ## _expected[] = EXPECTED; \
static struct x25519_multiply_test name = { \
.multiplicand = name ## _multiplicand, \
.multiplicand_len = sizeof ( name ## _multiplicand ), \
.multiplier = name ## _multiplier, \
.multiplier_len = sizeof ( name ## _multiplier ), \
.expected = name ## _expected, \
.expected_len = sizeof ( name ## _expected ), \
}
const char * name
Definition: ath9k_hw.c:1984
#define EXPECTED(...)
Define inline expected result.
Definition: x25519_test.c:58
size_t multiplier_len
Length of multiplier.
Definition: x25519_test.c:69
#define MULTIPLICAND(...)
Define inline multiplicand.
Definition: x25519_test.c:43
#define MULTIPLIER(...)
Define inline multiplier.
Definition: x25519_test.c:46
unsigned char uint8_t
Definition: stdint.h:10
static const uint32_t multiplier
Port multiplier number.
Definition: bigint.h:323
An X25519 multiplication self-test.
Definition: x25519_test.c:61

Define an X25519 multiplication test.

Parameters
nameTest name
MULTIPLICAND258-bit multiplicand
MULTIPLIER258-bit multiplier
EXPECTED255-bit expected result
Return values
testX25519 multiplication test

Definition at line 85 of file x25519_test.c.

◆ X25519_INVERT_TEST

#define X25519_INVERT_TEST (   name,
  INVERTEND,
  EXPECTED 
)
Value:
static const uint8_t name ## _invertend[] = INVERTEND; \
static const uint8_t name ## _expected[] = EXPECTED; \
static struct x25519_invert_test name = { \
.invertend = name ## _invertend, \
.invertend_len = sizeof ( name ## _invertend ), \
.expected = name ## _expected, \
.expected_len = sizeof ( name ## _expected ), \
}
const char * name
Definition: ath9k_hw.c:1984
#define EXPECTED(...)
Define inline expected result.
Definition: x25519_test.c:58
const void * expected
Expected result.
Definition: x25519_test.c:106
An X25519 multiplicative inversion self-test.
Definition: x25519_test.c:100
unsigned char uint8_t
Definition: stdint.h:10
#define INVERTEND(...)
Define inline invertend.
Definition: x25519_test.c:49
size_t expected_len
Length of expected result.
Definition: x25519_test.c:108

Define an X25519 multiplicative inversion test.

Parameters
nameTest name
INVERTEND258-bit invertend
EXPECTED255-bit expected result
Return values
testX25519 multiplicative inversion test

Definition at line 119 of file x25519_test.c.

◆ X25519_KEY_TEST

#define X25519_KEY_TEST (   name,
  COUNT,
  FAIL,
  BASE,
  SCALAR,
  EXPECTED 
)
Value:
static struct x25519_key_test name = { \
.count = COUNT, \
.fail = FAIL, \
.base = { .raw = BASE }, \
.scalar = { .raw = SCALAR }, \
.expected = { .raw = EXPECTED }, \
}
const char * name
Definition: ath9k_hw.c:1984
#define EXPECTED(...)
Define inline expected result.
Definition: x25519_test.c:58
#define SCALAR(...)
Define inline scalar multiple.
Definition: x25519_test.c:55
An X25519 key exchange self-test.
Definition: x25519_test.c:130
#define BASE(...)
Define inline base point.
Definition: x25519_test.c:52

Define an X25519 key exchange test.

Parameters
nameTest name
COUNTNumber of iterations
FAILExpected failure status
BASEBase point
SCALARScalar multiple
EXPECTEDExpected result
Return values
testX25519 key exchange test

Definition at line 154 of file x25519_test.c.

◆ x25519_multiply_ok

#define x25519_multiply_ok (   test)    x25519_multiply_okx ( test, __FILE__, __LINE__ )

Definition at line 202 of file x25519_test.c.

◆ x25519_invert_ok

#define x25519_invert_ok (   test)    x25519_invert_okx ( test, __FILE__, __LINE__ )

Definition at line 250 of file x25519_test.c.

◆ x25519_key_ok

#define x25519_key_ok (   test)    x25519_key_okx ( test, __FILE__, __LINE__ )

Definition at line 296 of file x25519_test.c.

Function Documentation

◆ FILE_LICENCE()

FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL  )

◆ x25519_multiply_okx()

static void x25519_multiply_okx ( struct x25519_multiply_test test,
const char *  file,
unsigned int  line 
)
static

Report an X25519 multiplication test result.

Parameters
testX25519 multiplication test
fileTest code file
lineTest code line

Definition at line 170 of file x25519_test.c.

171  {
172  union x25519_oct258 multiplicand;
174  union x25519_quad257 expected;
175  union x25519_quad257 actual;
176 
177  /* Construct big integers */
178  bigint_init ( &multiplicand.value, test->multiplicand,
179  test->multiplicand_len );
180  DBGC ( test, "X25519 multiplicand:\n" );
181  DBGC_HDA ( test, 0, &multiplicand, sizeof ( multiplicand ) );
182  bigint_init ( &multiplier.value, test->multiplier,
183  test->multiplier_len );
184  DBGC ( test, "X25519 multiplier:\n" );
185  DBGC_HDA ( test, 0, &multiplier, sizeof ( multiplier ) );
186  bigint_init ( &expected.value, test->expected, test->expected_len );
187  DBGC ( test, "X25519 expected product:\n" );
188  DBGC_HDA ( test, 0, &expected, sizeof ( expected ) );
189 
190  /* Perform multiplication */
191  x25519_multiply ( &multiplicand, &multiplier, &actual );
192 
193  /* Reduce result to allow for comparison */
194  x25519_reduce ( &actual );
195  DBGC ( test, "X25519 actual product:\n" );
196  DBGC_HDA ( test, 0, &actual, sizeof ( actual ) );
197 
198  /* Compare against expected result */
199  okx ( memcmp ( &actual, &expected, sizeof ( expected ) ) == 0,
200  file, line );
201 }
void x25519_reduce(union x25519_quad257 *value)
Reduce big integer to canonical range.
Definition: x25519.c:584
void x25519_multiply(const union x25519_oct258 *multiplicand, const union x25519_oct258 *multiplier, union x25519_quad257 *result)
Multiply big integers modulo field prime.
Definition: x25519.c:425
An X25519 unsigned 257-bit integer.
Definition: x25519.h:64
#define DBGC(...)
Definition: compiler.h:505
An X25519 unsigned 258-bit integer.
Definition: x25519.h:45
#define bigint_init(value, data, len)
Initialise big integer.
Definition: bigint.h:50
#define okx(success, file, line)
Report test result.
Definition: test.h:44
#define DBGC_HDA(...)
Definition: compiler.h:506
static const uint32_t multiplier
Port multiplier number.
Definition: bigint.h:323
int memcmp(const void *first, const void *second, size_t len)
Compare memory regions.
Definition: string.c:114
static int test
Definition: epic100.c:73

References bigint_init, DBGC, DBGC_HDA, memcmp(), multiplier, okx, test, x25519_oct258::value, x25519_quad257::value, x25519_multiply(), and x25519_reduce().

◆ x25519_invert_okx()

static void x25519_invert_okx ( struct x25519_invert_test test,
const char *  file,
unsigned int  line 
)
static

Report an X25519 multiplicative inversion test result.

Parameters
testX25519 multiplicative inversion test
fileTest code file
lineTest code line

Definition at line 212 of file x25519_test.c.

213  {
214  static const uint8_t one[] = { 1 };
215  union x25519_oct258 invertend;
216  union x25519_quad257 expected;
217  union x25519_quad257 actual;
218  union x25519_quad257 product;
219  union x25519_quad257 identity;
220 
221  /* Construct big integers */
222  bigint_init ( &invertend.value, test->invertend, test->invertend_len );
223  DBGC ( test, "X25519 invertend:\n" );
224  DBGC_HDA ( test, 0, &invertend, sizeof ( invertend ) );
225  bigint_init ( &expected.value, test->expected, test->expected_len );
226  DBGC ( test, "X25519 expected inverse:\n" );
227  DBGC_HDA ( test, 0, &expected, sizeof ( expected ) );
228  bigint_init ( &identity.value, one, sizeof ( one ) );
229 
230  /* Perform inversion */
231  x25519_invert ( &invertend, &actual );
232 
233  /* Multiply invertend by inverse */
234  x25519_multiply ( &invertend, &actual.oct258, &product );
235 
236  /* Reduce results to allow for comparison */
237  x25519_reduce ( &actual );
238  DBGC ( test, "X25519 actual inverse:\n" );
239  DBGC_HDA ( test, 0, &actual, sizeof ( actual ) );
240  x25519_reduce ( &product );
241  DBGC ( test, "X25519 actual product:\n" );
242  DBGC_HDA ( test, 0, &product, sizeof ( product ) );
243 
244  /* Compare against expected results */
245  okx ( memcmp ( &actual, &expected, sizeof ( expected ) ) == 0,
246  file, line );
247  okx ( memcmp ( &product, &identity, sizeof ( identity ) ) == 0,
248  file, line );
249 }
void x25519_reduce(union x25519_quad257 *value)
Reduce big integer to canonical range.
Definition: x25519.c:584
void x25519_multiply(const union x25519_oct258 *multiplicand, const union x25519_oct258 *multiplier, union x25519_quad257 *result)
Multiply big integers modulo field prime.
Definition: x25519.c:425
An X25519 unsigned 257-bit integer.
Definition: x25519.h:64
#define DBGC(...)
Definition: compiler.h:505
An X25519 unsigned 258-bit integer.
Definition: x25519.h:45
#define bigint_init(value, data, len)
Initialise big integer.
Definition: bigint.h:50
#define okx(success, file, line)
Report test result.
Definition: test.h:44
#define DBGC_HDA(...)
Definition: compiler.h:506
unsigned char uint8_t
Definition: stdint.h:10
uint8_t product
Product string.
Definition: smbios.h:16
void x25519_invert(const union x25519_oct258 *invertend, union x25519_quad257 *result)
Compute multiplicative inverse.
Definition: x25519.c:527
int memcmp(const void *first, const void *second, size_t len)
Compare memory regions.
Definition: string.c:114
static int test
Definition: epic100.c:73

References bigint_init, DBGC, DBGC_HDA, memcmp(), x25519_quad257::oct258, okx, product, test, x25519_oct258::value, x25519_quad257::value, x25519_invert(), x25519_multiply(), and x25519_reduce().

◆ x25519_key_okx()

static void x25519_key_okx ( struct x25519_key_test test,
const char *  file,
unsigned int  line 
)
static

Report an X25519 key exchange test result.

Parameters
testX25519 key exchange test
fileTest code file
lineTest code line

Definition at line 260 of file x25519_test.c.

261  {
262  struct x25519_value base;
263  struct x25519_value scalar;
264  struct x25519_value actual;
265  unsigned int i;
266  int rc;
267 
268  /* Construct input values */
269  memcpy ( &base, &test->base, sizeof ( test->base ) );
270  memcpy ( &scalar, &test->scalar, sizeof ( test->scalar ) );
271  DBGC ( test, "X25519 base:\n" );
272  DBGC_HDA ( test, 0, &base, sizeof ( base ) );
273  DBGC ( test, "X25519 scalar:\n" );
274  DBGC_HDA ( test, 0, &scalar, sizeof ( scalar ) );
275  DBGC ( test, "X25519 expected result (x%d):\n", test->count );
276  DBGC_HDA ( test, 0, &test->expected, sizeof ( test->expected ) );
277 
278  /* Calculate key */
279  for ( i = 0 ; i < test->count ; i++ ) {
280  rc = x25519_key ( &base, &scalar, &actual );
281  if ( test->fail ) {
282  okx ( rc != 0, file, line );
283  } else {
284  okx ( rc == 0, file, line );
285  }
286  memcpy ( &base, &scalar, sizeof ( base ) );
287  memcpy ( &scalar, &actual, sizeof ( scalar ) );
288  }
289  DBGC ( test, "X25519 actual result (x%d):\n", test->count );
290  DBGC_HDA ( test, 0, &actual, sizeof ( actual ) );
291 
292  /* Compare against expected result */
293  okx ( memcmp ( &actual, &test->expected,
294  sizeof ( test->expected ) ) == 0, file, line );
295 }
uint32_t base
Base.
Definition: librm.h:252
struct arbelprm_rc_send_wqe rc
Definition: arbel.h:14
int x25519_key(const struct x25519_value *base, const struct x25519_value *scalar, struct x25519_value *result)
Calculate X25519 key.
Definition: x25519.c:793
#define DBGC(...)
Definition: compiler.h:505
void * memcpy(void *dest, const void *src, size_t len) __nonnull
#define okx(success, file, line)
Report test result.
Definition: test.h:44
#define DBGC_HDA(...)
Definition: compiler.h:506
int memcmp(const void *first, const void *second, size_t len)
Compare memory regions.
Definition: string.c:114
static int test
Definition: epic100.c:73
An X25519 32-byte value.
Definition: x25519.h:77

References base, DBGC, DBGC_HDA, memcmp(), memcpy(), okx, rc, test, and x25519_key().

◆ X25519_MULTIPLY_TEST() [1/7]

X25519_MULTIPLY_TEST ( multiply_small  ,
MULTIPLICAND(6)  ,
MULTIPLIER(9)  ,
EXPECTED(6 *9)   
)

◆ X25519_MULTIPLY_TEST() [2/7]

X25519_MULTIPLY_TEST ( multiply_k_p  ,
MULTIPLICAND(0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xed)  ,
MULTIPLIER(0x00, 0xe8, 0x0d, 0x83, 0xd4, 0xe9, 0x1e, 0xdd, 0x7a, 0x45, 0x14, 0x87, 0xb7, 0xfc, 0x62, 0x54, 0x1f, 0xb2, 0x97, 0x24, 0xde, 0xfa, 0xd3, 0xe7, 0x3e, 0x83, 0x93, 0x60, 0xbc, 0x20, 0x97, 0x9b, 0x22)  ,
EXPECTED(0x00)   
)

◆ X25519_MULTIPLY_TEST() [3/7]

X25519_MULTIPLY_TEST ( multiply_1  ,
MULTIPLICAND(0x02, 0x23, 0xb8, 0xc1, 0xe9, 0x39, 0x24, 0x56, 0xde, 0x3e, 0xb1, 0x3b, 0x90, 0x46, 0x68, 0x52, 0x57, 0xbd, 0xd6, 0x40, 0xfb, 0x06, 0x67, 0x1a, 0xd1, 0x1c, 0x80, 0x31, 0x7f, 0xa3, 0xb1, 0x79, 0x9d)  ,
MULTIPLIER(0x00, 0x6c, 0x03, 0x11, 0x99, 0x97, 0x2a, 0x84, 0x69, 0x16, 0x41, 0x9f, 0x82, 0x8b, 0x9d, 0x24, 0x34, 0xe4, 0x65, 0xe1, 0x50, 0xbd, 0x9c, 0x66, 0xb3, 0xad, 0x3c, 0x2d, 0x6d, 0x1a, 0x3d, 0x1f, 0xa7)  ,
EXPECTED(0x1b, 0xa8, 0x7e, 0x98, 0x2f, 0x7c, 0x47, 0x76, 0x16, 0xb4, 0xd5, 0x13, 0x6b, 0xa5, 0x47, 0x33, 0xe4, 0x00, 0x81, 0xc1, 0xc2, 0xe2, 0x7d, 0x86, 0x4a, 0xa1, 0x78, 0xce, 0x89, 0x3d, 0x12, 0x97)   
)

◆ X25519_MULTIPLY_TEST() [4/7]

X25519_MULTIPLY_TEST ( multiply_2  ,
MULTIPLICAND(0x00, 0x8f, 0xad, 0xc1, 0xa6, 0x06, 0xcb, 0x0f, 0xb3, 0x9a, 0x1d, 0xe6, 0x44, 0x81, 0x5e, 0xf6, 0xd1, 0x3b, 0x8f, 0xaa, 0x18, 0x37, 0xf8, 0xa8, 0x8b, 0x17, 0xfc, 0x69, 0x5a, 0x07, 0xa0, 0xca, 0x6e)  ,
MULTIPLIER(0x01, 0x96, 0xda, 0x1d, 0xac, 0x72, 0xff, 0x5d, 0x2a, 0x38, 0x6e, 0xcb, 0xe0, 0x6b, 0x65, 0xa6, 0xa4, 0x8b, 0x81, 0x48, 0xf6, 0xb3, 0x8a, 0x08, 0x8c, 0xa6, 0x5e, 0xd3, 0x89, 0xb7, 0x4d, 0x0f, 0xb1)  ,
EXPECTED(0x35, 0x1f, 0x7b, 0xf7, 0x5e, 0xf5, 0x80, 0x24, 0x9e, 0xd6, 0xf9, 0xff, 0x39, 0x96, 0x46, 0x3b, 0x07, 0x30, 0xa1, 0xd4, 0x9b, 0x5d, 0x36, 0xb8, 0x63, 0xe1, 0x92, 0x59, 0x11, 0x57, 0xe9, 0x50)   
)

◆ X25519_MULTIPLY_TEST() [5/7]

X25519_MULTIPLY_TEST ( multiply_3  ,
MULTIPLICAND(0x01, 0x6c, 0x30, 0x75, 0x11, 0xb2, 0xb9, 0x43, 0x7a, 0x28, 0xdf, 0x6e, 0xc4, 0xce, 0x4a, 0x2b, 0xbd, 0xc2, 0x41, 0x33, 0x0b, 0x01, 0xa9, 0xe7, 0x1f, 0xde, 0x8a, 0x77, 0x4b, 0xcf, 0x36, 0xd5, 0x8b)  ,
MULTIPLIER(0x01, 0x17, 0xbe, 0x31, 0x11, 0x1a, 0x2a, 0x73, 0xed, 0x56, 0x2b, 0x0f, 0x79, 0xc3, 0x74, 0x59, 0xee, 0xf5, 0x0b, 0xea, 0x63, 0x37, 0x1e, 0xcd, 0x7b, 0x27, 0xcd, 0x81, 0x30, 0x47, 0x22, 0x93, 0x89)  ,
EXPECTED(0x6b, 0x43, 0xb5, 0x18, 0x59, 0x65, 0xf8, 0xf0, 0x92, 0x0f, 0x31, 0xae, 0x1b, 0x2c, 0xef, 0xad, 0xd7, 0xb0, 0x78, 0xfe, 0xcf, 0x68, 0xdb, 0xea, 0xa1, 0x7b, 0x9c, 0x38, 0x5b, 0x55, 0x83, 0x29)   
)

◆ X25519_MULTIPLY_TEST() [6/7]

X25519_MULTIPLY_TEST ( multiply_4  ,
MULTIPLICAND(0x02, 0x0b, 0x1f, 0x91, 0x63, 0xce, 0x9f, 0xf5, 0x7f, 0x43, 0xb7, 0xa3, 0xa6, 0x9a, 0x8d, 0xca, 0x03, 0x58, 0x0d, 0x7b, 0x71, 0xd8, 0xf5, 0x64, 0x13, 0x5b, 0xe6, 0x12, 0x8e, 0x18, 0xc2, 0x67, 0x97)  ,
MULTIPLIER(0x01, 0x8d, 0x52, 0x88, 0xf1, 0x14, 0x2c, 0x3f, 0xe8, 0x60, 0xe7, 0xa1, 0x13, 0xec, 0x1b, 0x8c, 0xa1, 0xf9, 0x1e, 0x1d, 0x4c, 0x1f, 0xf4, 0x9b, 0x78, 0x89, 0x46, 0x3e, 0x85, 0x75, 0x9c, 0xde, 0x66)  ,
EXPECTED(0x28, 0xa7, 0x7d, 0x3c, 0x8a, 0x14, 0x32, 0x3d, 0x63, 0xb2, 0x88, 0xdb, 0xd4, 0x03, 0x15, 0xb3, 0xf1, 0x92, 0xb8, 0x48, 0x5d, 0x86, 0xa0, 0x2c, 0xb8, 0x7d, 0x3d, 0xfb, 0x7a, 0x0b, 0x54, 0x47)   
)

◆ X25519_MULTIPLY_TEST() [7/7]

X25519_MULTIPLY_TEST ( multiply_5  ,
MULTIPLICAND(0x02, 0x31, 0x39, 0xd3, 0x2c, 0x93, 0xcd, 0x59, 0xbf, 0x5c, 0x94, 0x1c, 0xf0, 0xdc, 0x98, 0xd2, 0xc1, 0xe2, 0xac, 0xf7, 0x2f, 0x9e, 0x57, 0x4f, 0x7a, 0xa0, 0xee, 0x89, 0xae, 0xd4, 0x53, 0xdd, 0x32)  ,
MULTIPLIER(0x03, 0x14, 0x6d, 0x3f, 0x31, 0xfc, 0x37, 0x7a, 0x4c, 0x4a, 0x15, 0x54, 0x4d, 0xc5, 0xe7, 0xce, 0x8a, 0x3a, 0x57, 0x8a, 0x8e, 0xa9, 0x48, 0x8d, 0x99, 0x0b, 0xbb, 0x25, 0x99, 0x11, 0xce, 0x5d, 0xd2)  ,
EXPECTED(0x4b, 0xdb, 0x7a, 0x35, 0xc0, 0xa5, 0x18, 0x20, 0x00, 0xaa, 0x67, 0x55, 0x47, 0x41, 0xe8, 0x8c, 0xfd, 0xf4, 0x60, 0xa7, 0x8c, 0x6f, 0xae, 0x07, 0xad, 0xf8, 0x3d, 0x2f, 0x00, 0x5d, 0x27, 0x67)   
)

◆ X25519_INVERT_TEST() [1/5]

X25519_INVERT_TEST ( invert_1  ,
INVERTEND(0x01, 0xd5, 0x88, 0x42, 0xde, 0xa2, 0xbc, 0x37, 0x2f, 0x74, 0x12, 0xb2, 0x93, 0x47, 0x29, 0x47, 0x39, 0x61, 0x4f, 0xf3, 0xd7, 0x19, 0xdb, 0x3a, 0xd0, 0xdd, 0xd1, 0xdf, 0xb2, 0x3b, 0x98, 0x2e, 0xf8)  ,
EXPECTED(0x09, 0x3f, 0xf5, 0x17, 0x50, 0x80, 0x9d, 0x18, 0x1a, 0x9a, 0x54, 0x81, 0xc5, 0x64, 0xe3, 0x7c, 0xff, 0x61, 0x8d, 0xef, 0x8e, 0xc4, 0x5f, 0x46, 0x4b, 0x1a, 0x6e, 0x24, 0xf8, 0xb8, 0x26, 0xbd)   
)

◆ X25519_INVERT_TEST() [2/5]

X25519_INVERT_TEST ( invert_2  ,
INVERTEND(0x02, 0xef, 0xc8, 0x98, 0x49, 0xb3, 0xaa, 0x7e, 0xfe, 0x44, 0x58, 0xa8, 0x85, 0xab, 0x90, 0x99, 0xa4, 0x35, 0xa2, 0x40, 0xae, 0x5a, 0xf3, 0x05, 0x53, 0x5e, 0xc4, 0x2e, 0x08, 0x29, 0xa3, 0xb2, 0xe9)  ,
EXPECTED(0x59, 0x16, 0x07, 0xb1, 0x63, 0xe8, 0x9d, 0x0a, 0xc3, 0x3a, 0x62, 0xc8, 0x81, 0xe9, 0x84, 0xa2, 0x5d, 0x38, 0x26, 0xe3, 0xdb, 0x5c, 0xe2, 0x29, 0xaf, 0x24, 0x0d, 0xc5, 0x8e, 0x5b, 0x57, 0x9a)   
)

◆ X25519_INVERT_TEST() [3/5]

X25519_INVERT_TEST ( invert_3  ,
INVERTEND(0x00, 0x3e, 0xab, 0xed, 0xcb, 0xba, 0xa8, 0x0d, 0xd4, 0x88, 0xbd, 0x64, 0x07, 0x2b, 0xcf, 0xbe, 0x01, 0xa2, 0x8d, 0xef, 0xe3, 0x9b, 0xf0, 0x02, 0x73, 0x12, 0x47, 0x6f, 0x57, 0xa5, 0xe5, 0xa5, 0xab)  ,
EXPECTED(0x7d, 0x87, 0xc2, 0xe5, 0x65, 0xb2, 0x7c, 0x50, 0x38, 0x18, 0x1a, 0x0a, 0x7c, 0xae, 0x9e, 0xbe, 0x82, 0x6c, 0x8a, 0xfc, 0x1f, 0x77, 0x12, 0x8a, 0x4d, 0x62, 0xcc, 0xe9, 0x6d, 0x27, 0x59, 0xa2)   
)

◆ X25519_INVERT_TEST() [4/5]

X25519_INVERT_TEST ( invert_4  ,
INVERTEND(0x00, 0x8e, 0x94, 0x42, 0x39, 0xb0, 0x2b, 0x61, 0xc4, 0xa3, 0xd7, 0x06, 0x28, 0xec, 0xe6, 0x6f, 0xa2, 0xfd, 0x51, 0x66, 0xe6, 0x45, 0x1b, 0x4c, 0xf3, 0x61, 0x23, 0xfd, 0xf7, 0x76, 0x56, 0xaf, 0x72)  ,
EXPECTED(0x08, 0xe9, 0x61, 0x61, 0xa0, 0xee, 0xe1, 0xb2, 0x9a, 0xf3, 0x96, 0xf1, 0x54, 0x95, 0x0d, 0x5c, 0x71, 0x5d, 0xc6, 0x1a, 0xff, 0x66, 0xee, 0x97, 0x37, 0x7a, 0xb2, 0x2a, 0xdf, 0x33, 0x21, 0xd7)   
)

◆ X25519_INVERT_TEST() [5/5]

X25519_INVERT_TEST ( invert_5  ,
INVERTEND(0x00, 0xd2, 0x61, 0xa7, 0xab, 0x3a, 0xa2, 0xe4, 0xf9, 0x0e, 0x51, 0xf3, 0x0d, 0xc6, 0xa7, 0xee, 0x39, 0xc4, 0xb0, 0x32, 0xcc, 0xd7, 0xc5, 0x24, 0xa5, 0x53, 0x04, 0x31, 0x7f, 0xaf, 0x42, 0xe1, 0x2f)  ,
EXPECTED(0x07, 0x38, 0x78, 0x1c, 0x0a, 0xea, 0xbf, 0xbe, 0x6e, 0x84, 0x0c, 0x85, 0xbd, 0x30, 0x99, 0x6e, 0xf7, 0x1b, 0xc5, 0x49, 0x88, 0xce, 0x16, 0xce, 0xdd, 0x5a, 0xb4, 0xf3, 0x0c, 0x28, 0x15, 0x97)   
)

◆ X25519_KEY_TEST() [1/5]

X25519_KEY_TEST ( rfc7748_1  ,
,
,
BASE(0xe6, 0xdb, 0x68, 0x67, 0x58, 0x30, 0x30, 0xdb, 0x35, 0x94, 0xc1, 0xa4, 0x24, 0xb1, 0x5f, 0x7c, 0x72, 0x66, 0x24, 0xec, 0x26, 0xb3, 0x35, 0x3b, 0x10, 0xa9, 0x03, 0xa6, 0xd0, 0xab, 0x1c, 0x4c)  ,
SCALAR(0xa5, 0x46, 0xe3, 0x6b, 0xf0, 0x52, 0x7c, 0x9d, 0x3b, 0x16, 0x15, 0x4b, 0x82, 0x46, 0x5e, 0xdd, 0x62, 0x14, 0x4c, 0x0a, 0xc1, 0xfc, 0x5a, 0x18, 0x50, 0x6a, 0x22, 0x44, 0xba, 0x44, 0x9a, 0xc4)  ,
EXPECTED(0xc3, 0xda, 0x55, 0x37, 0x9d, 0xe9, 0xc6, 0x90, 0x8e, 0x94, 0xea, 0x4d, 0xf2, 0x8d, 0x08, 0x4f, 0x32, 0xec, 0xcf, 0x03, 0x49, 0x1c, 0x71, 0xf7, 0x54, 0xb4, 0x07, 0x55, 0x77, 0xa2, 0x85, 0x52)   
)

◆ X25519_KEY_TEST() [2/5]

X25519_KEY_TEST ( rfc7748_2  ,
,
,
BASE(0xe5, 0x21, 0x0f, 0x12, 0x78, 0x68, 0x11, 0xd3, 0xf4, 0xb7, 0x95, 0x9d, 0x05, 0x38, 0xae, 0x2c, 0x31, 0xdb, 0xe7, 0x10, 0x6f, 0xc0, 0x3c, 0x3e, 0xfc, 0x4c, 0xd5, 0x49, 0xc7, 0x15, 0xa4, 0x93)  ,
SCALAR(0x4b, 0x66, 0xe9, 0xd4, 0xd1, 0xb4, 0x67, 0x3c, 0x5a, 0xd2, 0x26, 0x91, 0x95, 0x7d, 0x6a, 0xf5, 0xc1, 0x1b, 0x64, 0x21, 0xe0, 0xea, 0x01, 0xd4, 0x2c, 0xa4, 0x16, 0x9e, 0x79, 0x18, 0xba, 0x0d)  ,
EXPECTED(0x95, 0xcb, 0xde, 0x94, 0x76, 0xe8, 0x90, 0x7d, 0x7a, 0xad, 0xe4, 0x5c, 0xb4, 0xb8, 0x73, 0xf8, 0x8b, 0x59, 0x5a, 0x68, 0x79, 0x9f, 0xa1, 0x52, 0xe6, 0xf8, 0xf7, 0x64, 0x7a, 0xac, 0x79, 0x57)   
)

◆ X25519_KEY_TEST() [3/5]

X25519_KEY_TEST ( rfc7748_3  ,
,
,
BASE(0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00)  ,
SCALAR(0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00)  ,
EXPECTED(0x42, 0x2c, 0x8e, 0x7a, 0x62, 0x27, 0xd7, 0xbc, 0xa1, 0x35, 0x0b, 0x3e, 0x2b, 0xb7, 0x27, 0x9f, 0x78, 0x97, 0xb8, 0x7b, 0xb6, 0x85, 0x4b, 0x78, 0x3c, 0x60, 0xe8, 0x03, 0x11, 0xae, 0x30, 0x79)   
)

◆ X25519_KEY_TEST() [4/5]

X25519_KEY_TEST ( rfc7748_4_100  ,
100  ,
,
BASE(0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00)  ,
SCALAR(0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00)  ,
EXPECTED(0xb1, 0xa5, 0xa7, 0x31, 0x58, 0x90, 0x4c, 0x02, 0x08, 0x66, 0xc1, 0x39, 0x39, 0xdd, 0x7e, 0x1a, 0xa2, 0x68, 0x52, 0xee, 0x1d, 0x26, 0x09, 0xc9, 0x2e, 0x5a, 0x8f, 0x1d, 0xeb, 0xe2, 0x15, 0x0a)   
)

◆ X25519_KEY_TEST() [5/5]

X25519_KEY_TEST ( malicious  ,
,
,
BASE(0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f)  ,
SCALAR(0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f)  ,
EXPECTED(0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00)   
)

◆ x25519_test_exec()

static void x25519_test_exec ( void  )
static

Perform X25519 self-tests.

Definition at line 570 of file x25519_test.c.

570  {
571 
572  /* Perform multiplication tests */
573  x25519_multiply_ok ( &multiply_small );
574  x25519_multiply_ok ( &multiply_k_p );
575  x25519_multiply_ok ( &multiply_1 );
576  x25519_multiply_ok ( &multiply_2 );
577  x25519_multiply_ok ( &multiply_3 );
578  x25519_multiply_ok ( &multiply_4 );
579  x25519_multiply_ok ( &multiply_5 );
580 
581  /* Perform multiplicative inversion tests */
582  x25519_invert_ok ( &invert_1 );
583  x25519_invert_ok ( &invert_2 );
584  x25519_invert_ok ( &invert_3 );
585  x25519_invert_ok ( &invert_4 );
586  x25519_invert_ok ( &invert_5 );
587 
588  /* Perform key exchange tests */
589  x25519_key_ok ( &rfc7748_1 );
590  x25519_key_ok ( &rfc7748_2 );
591  x25519_key_ok ( &rfc7748_3 );
592  x25519_key_ok ( &rfc7748_4_100 );
593  x25519_key_ok ( &malicious );
594 }
#define x25519_multiply_ok(test)
Definition: x25519_test.c:202
#define x25519_invert_ok(test)
Definition: x25519_test.c:250
#define x25519_key_ok(test)
Definition: x25519_test.c:296

References x25519_invert_ok, x25519_key_ok, and x25519_multiply_ok.

Variable Documentation

◆ __self_test

struct self_test x25519_test __self_test
Initial value:
= {
.name = "x25519",
}
static void x25519_test_exec(void)
Perform X25519 self-tests.
Definition: x25519_test.c:570

X25519 self-test.

Definition at line 597 of file x25519_test.c.