Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.15.
   1// SPDX-License-Identifier: GPL-2.0 OR MIT
   2/*
   3 * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
   4 */
   5
   6#include <crypto/curve25519.h>
   7
   8struct curve25519_test_vector {
   9	u8 private[CURVE25519_KEY_SIZE];
  10	u8 public[CURVE25519_KEY_SIZE];
  11	u8 result[CURVE25519_KEY_SIZE];
  12	bool valid;
  13};
  14static const struct curve25519_test_vector curve25519_test_vectors[] __initconst = {
  15	{
  16		.private = { 0x77, 0x07, 0x6d, 0x0a, 0x73, 0x18, 0xa5, 0x7d,
  17			     0x3c, 0x16, 0xc1, 0x72, 0x51, 0xb2, 0x66, 0x45,
  18			     0xdf, 0x4c, 0x2f, 0x87, 0xeb, 0xc0, 0x99, 0x2a,
  19			     0xb1, 0x77, 0xfb, 0xa5, 0x1d, 0xb9, 0x2c, 0x2a },
  20		.public = { 0xde, 0x9e, 0xdb, 0x7d, 0x7b, 0x7d, 0xc1, 0xb4,
  21			    0xd3, 0x5b, 0x61, 0xc2, 0xec, 0xe4, 0x35, 0x37,
  22			    0x3f, 0x83, 0x43, 0xc8, 0x5b, 0x78, 0x67, 0x4d,
  23			    0xad, 0xfc, 0x7e, 0x14, 0x6f, 0x88, 0x2b, 0x4f },
  24		.result = { 0x4a, 0x5d, 0x9d, 0x5b, 0xa4, 0xce, 0x2d, 0xe1,
  25			    0x72, 0x8e, 0x3b, 0xf4, 0x80, 0x35, 0x0f, 0x25,
  26			    0xe0, 0x7e, 0x21, 0xc9, 0x47, 0xd1, 0x9e, 0x33,
  27			    0x76, 0xf0, 0x9b, 0x3c, 0x1e, 0x16, 0x17, 0x42 },
  28		.valid = true
  29	},
  30	{
  31		.private = { 0x5d, 0xab, 0x08, 0x7e, 0x62, 0x4a, 0x8a, 0x4b,
  32			     0x79, 0xe1, 0x7f, 0x8b, 0x83, 0x80, 0x0e, 0xe6,
  33			     0x6f, 0x3b, 0xb1, 0x29, 0x26, 0x18, 0xb6, 0xfd,
  34			     0x1c, 0x2f, 0x8b, 0x27, 0xff, 0x88, 0xe0, 0xeb },
  35		.public = { 0x85, 0x20, 0xf0, 0x09, 0x89, 0x30, 0xa7, 0x54,
  36			    0x74, 0x8b, 0x7d, 0xdc, 0xb4, 0x3e, 0xf7, 0x5a,
  37			    0x0d, 0xbf, 0x3a, 0x0d, 0x26, 0x38, 0x1a, 0xf4,
  38			    0xeb, 0xa4, 0xa9, 0x8e, 0xaa, 0x9b, 0x4e, 0x6a },
  39		.result = { 0x4a, 0x5d, 0x9d, 0x5b, 0xa4, 0xce, 0x2d, 0xe1,
  40			    0x72, 0x8e, 0x3b, 0xf4, 0x80, 0x35, 0x0f, 0x25,
  41			    0xe0, 0x7e, 0x21, 0xc9, 0x47, 0xd1, 0x9e, 0x33,
  42			    0x76, 0xf0, 0x9b, 0x3c, 0x1e, 0x16, 0x17, 0x42 },
  43		.valid = true
  44	},
  45	{
  46		.private = { 1 },
  47		.public = { 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  48			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  49			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  50			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
  51		.result = { 0x3c, 0x77, 0x77, 0xca, 0xf9, 0x97, 0xb2, 0x64,
  52			    0x41, 0x60, 0x77, 0x66, 0x5b, 0x4e, 0x22, 0x9d,
  53			    0x0b, 0x95, 0x48, 0xdc, 0x0c, 0xd8, 0x19, 0x98,
  54			    0xdd, 0xcd, 0xc5, 0xc8, 0x53, 0x3c, 0x79, 0x7f },
  55		.valid = true
  56	},
  57	{
  58		.private = { 1 },
  59		.public = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  60			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  61			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  62			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
  63		.result = { 0xb3, 0x2d, 0x13, 0x62, 0xc2, 0x48, 0xd6, 0x2f,
  64			    0xe6, 0x26, 0x19, 0xcf, 0xf0, 0x4d, 0xd4, 0x3d,
  65			    0xb7, 0x3f, 0xfc, 0x1b, 0x63, 0x08, 0xed, 0xe3,
  66			    0x0b, 0x78, 0xd8, 0x73, 0x80, 0xf1, 0xe8, 0x34 },
  67		.valid = true
  68	},
  69	{
  70		.private = { 0xa5, 0x46, 0xe3, 0x6b, 0xf0, 0x52, 0x7c, 0x9d,
  71			     0x3b, 0x16, 0x15, 0x4b, 0x82, 0x46, 0x5e, 0xdd,
  72			     0x62, 0x14, 0x4c, 0x0a, 0xc1, 0xfc, 0x5a, 0x18,
  73			     0x50, 0x6a, 0x22, 0x44, 0xba, 0x44, 0x9a, 0xc4 },
  74		.public = { 0xe6, 0xdb, 0x68, 0x67, 0x58, 0x30, 0x30, 0xdb,
  75			    0x35, 0x94, 0xc1, 0xa4, 0x24, 0xb1, 0x5f, 0x7c,
  76			    0x72, 0x66, 0x24, 0xec, 0x26, 0xb3, 0x35, 0x3b,
  77			    0x10, 0xa9, 0x03, 0xa6, 0xd0, 0xab, 0x1c, 0x4c },
  78		.result = { 0xc3, 0xda, 0x55, 0x37, 0x9d, 0xe9, 0xc6, 0x90,
  79			    0x8e, 0x94, 0xea, 0x4d, 0xf2, 0x8d, 0x08, 0x4f,
  80			    0x32, 0xec, 0xcf, 0x03, 0x49, 0x1c, 0x71, 0xf7,
  81			    0x54, 0xb4, 0x07, 0x55, 0x77, 0xa2, 0x85, 0x52 },
  82		.valid = true
  83	},
  84	{
  85		.private = { 1, 2, 3, 4 },
  86		.public = { 0 },
  87		.result = { 0 },
  88		.valid = false
  89	},
  90	{
  91		.private = { 2, 4, 6, 8 },
  92		.public = { 0xe0, 0xeb, 0x7a, 0x7c, 0x3b, 0x41, 0xb8, 0xae,
  93			    0x16, 0x56, 0xe3, 0xfa, 0xf1, 0x9f, 0xc4, 0x6a,
  94			    0xda, 0x09, 0x8d, 0xeb, 0x9c, 0x32, 0xb1, 0xfd,
  95			    0x86, 0x62, 0x05, 0x16, 0x5f, 0x49, 0xb8 },
  96		.result = { 0 },
  97		.valid = false
  98	},
  99	{
 100		.private = { 0xff, 0xff, 0xff, 0xff, 0x0a, 0xff, 0xff, 0xff,
 101			     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 102			     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 103			     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
 104		.public = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 105			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 106			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 107			    0xff, 0xff, 0xff, 0xff, 0x0a, 0x00, 0xfb, 0x9f },
 108		.result = { 0x77, 0x52, 0xb6, 0x18, 0xc1, 0x2d, 0x48, 0xd2,
 109			    0xc6, 0x93, 0x46, 0x83, 0x81, 0x7c, 0xc6, 0x57,
 110			    0xf3, 0x31, 0x03, 0x19, 0x49, 0x48, 0x20, 0x05,
 111			    0x42, 0x2b, 0x4e, 0xae, 0x8d, 0x1d, 0x43, 0x23 },
 112		.valid = true
 113	},
 114	{
 115		.private = { 0x8e, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 116			     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 117			     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 118			     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
 119		.public = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 120			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 121			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 122			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8e, 0x06 },
 123		.result = { 0x5a, 0xdf, 0xaa, 0x25, 0x86, 0x8e, 0x32, 0x3d,
 124			    0xae, 0x49, 0x62, 0xc1, 0x01, 0x5c, 0xb3, 0x12,
 125			    0xe1, 0xc5, 0xc7, 0x9e, 0x95, 0x3f, 0x03, 0x99,
 126			    0xb0, 0xba, 0x16, 0x22, 0xf3, 0xb6, 0xf7, 0x0c },
 127		.valid = true
 128	},
 129	/* wycheproof - normal case */
 130	{
 131		.private = { 0x48, 0x52, 0x83, 0x4d, 0x9d, 0x6b, 0x77, 0xda,
 132			     0xde, 0xab, 0xaa, 0xf2, 0xe1, 0x1d, 0xca, 0x66,
 133			     0xd1, 0x9f, 0xe7, 0x49, 0x93, 0xa7, 0xbe, 0xc3,
 134			     0x6c, 0x6e, 0x16, 0xa0, 0x98, 0x3f, 0xea, 0xba },
 135		.public = { 0x9c, 0x64, 0x7d, 0x9a, 0xe5, 0x89, 0xb9, 0xf5,
 136			    0x8f, 0xdc, 0x3c, 0xa4, 0x94, 0x7e, 0xfb, 0xc9,
 137			    0x15, 0xc4, 0xb2, 0xe0, 0x8e, 0x74, 0x4a, 0x0e,
 138			    0xdf, 0x46, 0x9d, 0xac, 0x59, 0xc8, 0xf8, 0x5a },
 139		.result = { 0x87, 0xb7, 0xf2, 0x12, 0xb6, 0x27, 0xf7, 0xa5,
 140			    0x4c, 0xa5, 0xe0, 0xbc, 0xda, 0xdd, 0xd5, 0x38,
 141			    0x9d, 0x9d, 0xe6, 0x15, 0x6c, 0xdb, 0xcf, 0x8e,
 142			    0xbe, 0x14, 0xff, 0xbc, 0xfb, 0x43, 0x65, 0x51 },
 143		.valid = true
 144	},
 145	/* wycheproof - public key on twist */
 146	{
 147		.private = { 0x58, 0x8c, 0x06, 0x1a, 0x50, 0x80, 0x4a, 0xc4,
 148			     0x88, 0xad, 0x77, 0x4a, 0xc7, 0x16, 0xc3, 0xf5,
 149			     0xba, 0x71, 0x4b, 0x27, 0x12, 0xe0, 0x48, 0x49,
 150			     0x13, 0x79, 0xa5, 0x00, 0x21, 0x19, 0x98, 0xa8 },
 151		.public = { 0x63, 0xaa, 0x40, 0xc6, 0xe3, 0x83, 0x46, 0xc5,
 152			    0xca, 0xf2, 0x3a, 0x6d, 0xf0, 0xa5, 0xe6, 0xc8,
 153			    0x08, 0x89, 0xa0, 0x86, 0x47, 0xe5, 0x51, 0xb3,
 154			    0x56, 0x34, 0x49, 0xbe, 0xfc, 0xfc, 0x97, 0x33 },
 155		.result = { 0xb1, 0xa7, 0x07, 0x51, 0x94, 0x95, 0xff, 0xff,
 156			    0xb2, 0x98, 0xff, 0x94, 0x17, 0x16, 0xb0, 0x6d,
 157			    0xfa, 0xb8, 0x7c, 0xf8, 0xd9, 0x11, 0x23, 0xfe,
 158			    0x2b, 0xe9, 0xa2, 0x33, 0xdd, 0xa2, 0x22, 0x12 },
 159		.valid = true
 160	},
 161	/* wycheproof - public key on twist */
 162	{
 163		.private = { 0xb0, 0x5b, 0xfd, 0x32, 0xe5, 0x53, 0x25, 0xd9,
 164			     0xfd, 0x64, 0x8c, 0xb3, 0x02, 0x84, 0x80, 0x39,
 165			     0x00, 0x0b, 0x39, 0x0e, 0x44, 0xd5, 0x21, 0xe5,
 166			     0x8a, 0xab, 0x3b, 0x29, 0xa6, 0x96, 0x0b, 0xa8 },
 167		.public = { 0x0f, 0x83, 0xc3, 0x6f, 0xde, 0xd9, 0xd3, 0x2f,
 168			    0xad, 0xf4, 0xef, 0xa3, 0xae, 0x93, 0xa9, 0x0b,
 169			    0xb5, 0xcf, 0xa6, 0x68, 0x93, 0xbc, 0x41, 0x2c,
 170			    0x43, 0xfa, 0x72, 0x87, 0xdb, 0xb9, 0x97, 0x79 },
 171		.result = { 0x67, 0xdd, 0x4a, 0x6e, 0x16, 0x55, 0x33, 0x53,
 172			    0x4c, 0x0e, 0x3f, 0x17, 0x2e, 0x4a, 0xb8, 0x57,
 173			    0x6b, 0xca, 0x92, 0x3a, 0x5f, 0x07, 0xb2, 0xc0,
 174			    0x69, 0xb4, 0xc3, 0x10, 0xff, 0x2e, 0x93, 0x5b },
 175		.valid = true
 176	},
 177	/* wycheproof - public key on twist */
 178	{
 179		.private = { 0x70, 0xe3, 0x4b, 0xcb, 0xe1, 0xf4, 0x7f, 0xbc,
 180			     0x0f, 0xdd, 0xfd, 0x7c, 0x1e, 0x1a, 0xa5, 0x3d,
 181			     0x57, 0xbf, 0xe0, 0xf6, 0x6d, 0x24, 0x30, 0x67,
 182			     0xb4, 0x24, 0xbb, 0x62, 0x10, 0xbe, 0xd1, 0x9c },
 183		.public = { 0x0b, 0x82, 0x11, 0xa2, 0xb6, 0x04, 0x90, 0x97,
 184			    0xf6, 0x87, 0x1c, 0x6c, 0x05, 0x2d, 0x3c, 0x5f,
 185			    0xc1, 0xba, 0x17, 0xda, 0x9e, 0x32, 0xae, 0x45,
 186			    0x84, 0x03, 0xb0, 0x5b, 0xb2, 0x83, 0x09, 0x2a },
 187		.result = { 0x4a, 0x06, 0x38, 0xcf, 0xaa, 0x9e, 0xf1, 0x93,
 188			    0x3b, 0x47, 0xf8, 0x93, 0x92, 0x96, 0xa6, 0xb2,
 189			    0x5b, 0xe5, 0x41, 0xef, 0x7f, 0x70, 0xe8, 0x44,
 190			    0xc0, 0xbc, 0xc0, 0x0b, 0x13, 0x4d, 0xe6, 0x4a },
 191		.valid = true
 192	},
 193	/* wycheproof - public key on twist */
 194	{
 195		.private = { 0x68, 0xc1, 0xf3, 0xa6, 0x53, 0xa4, 0xcd, 0xb1,
 196			     0xd3, 0x7b, 0xba, 0x94, 0x73, 0x8f, 0x8b, 0x95,
 197			     0x7a, 0x57, 0xbe, 0xb2, 0x4d, 0x64, 0x6e, 0x99,
 198			     0x4d, 0xc2, 0x9a, 0x27, 0x6a, 0xad, 0x45, 0x8d },
 199		.public = { 0x34, 0x3a, 0xc2, 0x0a, 0x3b, 0x9c, 0x6a, 0x27,
 200			    0xb1, 0x00, 0x81, 0x76, 0x50, 0x9a, 0xd3, 0x07,
 201			    0x35, 0x85, 0x6e, 0xc1, 0xc8, 0xd8, 0xfc, 0xae,
 202			    0x13, 0x91, 0x2d, 0x08, 0xd1, 0x52, 0xf4, 0x6c },
 203		.result = { 0x39, 0x94, 0x91, 0xfc, 0xe8, 0xdf, 0xab, 0x73,
 204			    0xb4, 0xf9, 0xf6, 0x11, 0xde, 0x8e, 0xa0, 0xb2,
 205			    0x7b, 0x28, 0xf8, 0x59, 0x94, 0x25, 0x0b, 0x0f,
 206			    0x47, 0x5d, 0x58, 0x5d, 0x04, 0x2a, 0xc2, 0x07 },
 207		.valid = true
 208	},
 209	/* wycheproof - public key on twist */
 210	{
 211		.private = { 0xd8, 0x77, 0xb2, 0x6d, 0x06, 0xdf, 0xf9, 0xd9,
 212			     0xf7, 0xfd, 0x4c, 0x5b, 0x37, 0x69, 0xf8, 0xcd,
 213			     0xd5, 0xb3, 0x05, 0x16, 0xa5, 0xab, 0x80, 0x6b,
 214			     0xe3, 0x24, 0xff, 0x3e, 0xb6, 0x9e, 0xa0, 0xb2 },
 215		.public = { 0xfa, 0x69, 0x5f, 0xc7, 0xbe, 0x8d, 0x1b, 0xe5,
 216			    0xbf, 0x70, 0x48, 0x98, 0xf3, 0x88, 0xc4, 0x52,
 217			    0xba, 0xfd, 0xd3, 0xb8, 0xea, 0xe8, 0x05, 0xf8,
 218			    0x68, 0x1a, 0x8d, 0x15, 0xc2, 0xd4, 0xe1, 0x42 },
 219		.result = { 0x2c, 0x4f, 0xe1, 0x1d, 0x49, 0x0a, 0x53, 0x86,
 220			    0x17, 0x76, 0xb1, 0x3b, 0x43, 0x54, 0xab, 0xd4,
 221			    0xcf, 0x5a, 0x97, 0x69, 0x9d, 0xb6, 0xe6, 0xc6,
 222			    0x8c, 0x16, 0x26, 0xd0, 0x76, 0x62, 0xf7, 0x58 },
 223		.valid = true
 224	},
 225	/* wycheproof - public key = 0 */
 226	{
 227		.private = { 0x20, 0x74, 0x94, 0x03, 0x8f, 0x2b, 0xb8, 0x11,
 228			     0xd4, 0x78, 0x05, 0xbc, 0xdf, 0x04, 0xa2, 0xac,
 229			     0x58, 0x5a, 0xda, 0x7f, 0x2f, 0x23, 0x38, 0x9b,
 230			     0xfd, 0x46, 0x58, 0xf9, 0xdd, 0xd4, 0xde, 0xbc },
 231		.public = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 232			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 233			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 234			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
 235		.result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 236			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 237			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 238			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
 239		.valid = false
 240	},
 241	/* wycheproof - public key = 1 */
 242	{
 243		.private = { 0x20, 0x2e, 0x89, 0x72, 0xb6, 0x1c, 0x7e, 0x61,
 244			     0x93, 0x0e, 0xb9, 0x45, 0x0b, 0x50, 0x70, 0xea,
 245			     0xe1, 0xc6, 0x70, 0x47, 0x56, 0x85, 0x54, 0x1f,
 246			     0x04, 0x76, 0x21, 0x7e, 0x48, 0x18, 0xcf, 0xab },
 247		.public = { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 248			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 249			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 250			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
 251		.result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 252			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 253			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 254			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
 255		.valid = false
 256	},
 257	/* wycheproof - edge case on twist */
 258	{
 259		.private = { 0x38, 0xdd, 0xe9, 0xf3, 0xe7, 0xb7, 0x99, 0x04,
 260			     0x5f, 0x9a, 0xc3, 0x79, 0x3d, 0x4a, 0x92, 0x77,
 261			     0xda, 0xde, 0xad, 0xc4, 0x1b, 0xec, 0x02, 0x90,
 262			     0xf8, 0x1f, 0x74, 0x4f, 0x73, 0x77, 0x5f, 0x84 },
 263		.public = { 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 264			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 265			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 266			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
 267		.result = { 0x9a, 0x2c, 0xfe, 0x84, 0xff, 0x9c, 0x4a, 0x97,
 268			    0x39, 0x62, 0x5c, 0xae, 0x4a, 0x3b, 0x82, 0xa9,
 269			    0x06, 0x87, 0x7a, 0x44, 0x19, 0x46, 0xf8, 0xd7,
 270			    0xb3, 0xd7, 0x95, 0xfe, 0x8f, 0x5d, 0x16, 0x39 },
 271		.valid = true
 272	},
 273	/* wycheproof - edge case on twist */
 274	{
 275		.private = { 0x98, 0x57, 0xa9, 0x14, 0xe3, 0xc2, 0x90, 0x36,
 276			     0xfd, 0x9a, 0x44, 0x2b, 0xa5, 0x26, 0xb5, 0xcd,
 277			     0xcd, 0xf2, 0x82, 0x16, 0x15, 0x3e, 0x63, 0x6c,
 278			     0x10, 0x67, 0x7a, 0xca, 0xb6, 0xbd, 0x6a, 0xa5 },
 279		.public = { 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 280			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 281			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 282			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
 283		.result = { 0x4d, 0xa4, 0xe0, 0xaa, 0x07, 0x2c, 0x23, 0x2e,
 284			    0xe2, 0xf0, 0xfa, 0x4e, 0x51, 0x9a, 0xe5, 0x0b,
 285			    0x52, 0xc1, 0xed, 0xd0, 0x8a, 0x53, 0x4d, 0x4e,
 286			    0xf3, 0x46, 0xc2, 0xe1, 0x06, 0xd2, 0x1d, 0x60 },
 287		.valid = true
 288	},
 289	/* wycheproof - edge case on twist */
 290	{
 291		.private = { 0x48, 0xe2, 0x13, 0x0d, 0x72, 0x33, 0x05, 0xed,
 292			     0x05, 0xe6, 0xe5, 0x89, 0x4d, 0x39, 0x8a, 0x5e,
 293			     0x33, 0x36, 0x7a, 0x8c, 0x6a, 0xac, 0x8f, 0xcd,
 294			     0xf0, 0xa8, 0x8e, 0x4b, 0x42, 0x82, 0x0d, 0xb7 },
 295		.public = { 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0xf8, 0xff,
 296			    0xff, 0x1f, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff,
 297			    0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x07, 0x00,
 298			    0x00, 0xf0, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00 },
 299		.result = { 0x9e, 0xd1, 0x0c, 0x53, 0x74, 0x7f, 0x64, 0x7f,
 300			    0x82, 0xf4, 0x51, 0x25, 0xd3, 0xde, 0x15, 0xa1,
 301			    0xe6, 0xb8, 0x24, 0x49, 0x6a, 0xb4, 0x04, 0x10,
 302			    0xff, 0xcc, 0x3c, 0xfe, 0x95, 0x76, 0x0f, 0x3b },
 303		.valid = true
 304	},
 305	/* wycheproof - edge case on twist */
 306	{
 307		.private = { 0x28, 0xf4, 0x10, 0x11, 0x69, 0x18, 0x51, 0xb3,
 308			     0xa6, 0x2b, 0x64, 0x15, 0x53, 0xb3, 0x0d, 0x0d,
 309			     0xfd, 0xdc, 0xb8, 0xff, 0xfc, 0xf5, 0x37, 0x00,
 310			     0xa7, 0xbe, 0x2f, 0x6a, 0x87, 0x2e, 0x9f, 0xb0 },
 311		.public = { 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x07, 0x00,
 312			    0x00, 0xe0, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00,
 313			    0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0xf8, 0xff,
 314			    0xff, 0x0f, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x7f },
 315		.result = { 0xcf, 0x72, 0xb4, 0xaa, 0x6a, 0xa1, 0xc9, 0xf8,
 316			    0x94, 0xf4, 0x16, 0x5b, 0x86, 0x10, 0x9a, 0xa4,
 317			    0x68, 0x51, 0x76, 0x48, 0xe1, 0xf0, 0xcc, 0x70,
 318			    0xe1, 0xab, 0x08, 0x46, 0x01, 0x76, 0x50, 0x6b },
 319		.valid = true
 320	},
 321	/* wycheproof - edge case on twist */
 322	{
 323		.private = { 0x18, 0xa9, 0x3b, 0x64, 0x99, 0xb9, 0xf6, 0xb3,
 324			     0x22, 0x5c, 0xa0, 0x2f, 0xef, 0x41, 0x0e, 0x0a,
 325			     0xde, 0xc2, 0x35, 0x32, 0x32, 0x1d, 0x2d, 0x8e,
 326			     0xf1, 0xa6, 0xd6, 0x02, 0xa8, 0xc6, 0x5b, 0x83 },
 327		.public = { 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
 328			    0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
 329			    0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
 330			    0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x7f },
 331		.result = { 0x5d, 0x50, 0xb6, 0x28, 0x36, 0xbb, 0x69, 0x57,
 332			    0x94, 0x10, 0x38, 0x6c, 0xf7, 0xbb, 0x81, 0x1c,
 333			    0x14, 0xbf, 0x85, 0xb1, 0xc7, 0xb1, 0x7e, 0x59,
 334			    0x24, 0xc7, 0xff, 0xea, 0x91, 0xef, 0x9e, 0x12 },
 335		.valid = true
 336	},
 337	/* wycheproof - edge case on twist */
 338	{
 339		.private = { 0xc0, 0x1d, 0x13, 0x05, 0xa1, 0x33, 0x8a, 0x1f,
 340			     0xca, 0xc2, 0xba, 0x7e, 0x2e, 0x03, 0x2b, 0x42,
 341			     0x7e, 0x0b, 0x04, 0x90, 0x31, 0x65, 0xac, 0xa9,
 342			     0x57, 0xd8, 0xd0, 0x55, 0x3d, 0x87, 0x17, 0xb0 },
 343		.public = { 0xea, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 344			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 345			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 346			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
 347		.result = { 0x19, 0x23, 0x0e, 0xb1, 0x48, 0xd5, 0xd6, 0x7c,
 348			    0x3c, 0x22, 0xab, 0x1d, 0xae, 0xff, 0x80, 0xa5,
 349			    0x7e, 0xae, 0x42, 0x65, 0xce, 0x28, 0x72, 0x65,
 350			    0x7b, 0x2c, 0x80, 0x99, 0xfc, 0x69, 0x8e, 0x50 },
 351		.valid = true
 352	},
 353	/* wycheproof - edge case for public key */
 354	{
 355		.private = { 0x38, 0x6f, 0x7f, 0x16, 0xc5, 0x07, 0x31, 0xd6,
 356			     0x4f, 0x82, 0xe6, 0xa1, 0x70, 0xb1, 0x42, 0xa4,
 357			     0xe3, 0x4f, 0x31, 0xfd, 0x77, 0x68, 0xfc, 0xb8,
 358			     0x90, 0x29, 0x25, 0xe7, 0xd1, 0xe2, 0x1a, 0xbe },
 359		.public = { 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 360			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 361			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 362			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
 363		.result = { 0x0f, 0xca, 0xb5, 0xd8, 0x42, 0xa0, 0x78, 0xd7,
 364			    0xa7, 0x1f, 0xc5, 0x9b, 0x57, 0xbf, 0xb4, 0xca,
 365			    0x0b, 0xe6, 0x87, 0x3b, 0x49, 0xdc, 0xdb, 0x9f,
 366			    0x44, 0xe1, 0x4a, 0xe8, 0xfb, 0xdf, 0xa5, 0x42 },
 367		.valid = true
 368	},
 369	/* wycheproof - edge case for public key */
 370	{
 371		.private = { 0xe0, 0x23, 0xa2, 0x89, 0xbd, 0x5e, 0x90, 0xfa,
 372			     0x28, 0x04, 0xdd, 0xc0, 0x19, 0xa0, 0x5e, 0xf3,
 373			     0xe7, 0x9d, 0x43, 0x4b, 0xb6, 0xea, 0x2f, 0x52,
 374			     0x2e, 0xcb, 0x64, 0x3a, 0x75, 0x29, 0x6e, 0x95 },
 375		.public = { 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
 376			    0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
 377			    0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
 378			    0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 },
 379		.result = { 0x54, 0xce, 0x8f, 0x22, 0x75, 0xc0, 0x77, 0xe3,
 380			    0xb1, 0x30, 0x6a, 0x39, 0x39, 0xc5, 0xe0, 0x3e,
 381			    0xef, 0x6b, 0xbb, 0x88, 0x06, 0x05, 0x44, 0x75,
 382			    0x8d, 0x9f, 0xef, 0x59, 0xb0, 0xbc, 0x3e, 0x4f },
 383		.valid = true
 384	},
 385	/* wycheproof - edge case for public key */
 386	{
 387		.private = { 0x68, 0xf0, 0x10, 0xd6, 0x2e, 0xe8, 0xd9, 0x26,
 388			     0x05, 0x3a, 0x36, 0x1c, 0x3a, 0x75, 0xc6, 0xea,
 389			     0x4e, 0xbd, 0xc8, 0x60, 0x6a, 0xb2, 0x85, 0x00,
 390			     0x3a, 0x6f, 0x8f, 0x40, 0x76, 0xb0, 0x1e, 0x83 },
 391		.public = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 392			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 393			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 394			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03 },
 395		.result = { 0xf1, 0x36, 0x77, 0x5c, 0x5b, 0xeb, 0x0a, 0xf8,
 396			    0x11, 0x0a, 0xf1, 0x0b, 0x20, 0x37, 0x23, 0x32,
 397			    0x04, 0x3c, 0xab, 0x75, 0x24, 0x19, 0x67, 0x87,
 398			    0x75, 0xa2, 0x23, 0xdf, 0x57, 0xc9, 0xd3, 0x0d },
 399		.valid = true
 400	},
 401	/* wycheproof - edge case for public key */
 402	{
 403		.private = { 0x58, 0xeb, 0xcb, 0x35, 0xb0, 0xf8, 0x84, 0x5c,
 404			     0xaf, 0x1e, 0xc6, 0x30, 0xf9, 0x65, 0x76, 0xb6,
 405			     0x2c, 0x4b, 0x7b, 0x6c, 0x36, 0xb2, 0x9d, 0xeb,
 406			     0x2c, 0xb0, 0x08, 0x46, 0x51, 0x75, 0x5c, 0x96 },
 407		.public = { 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xfb, 0xff,
 408			    0xff, 0xdf, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff,
 409			    0xfe, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xf7, 0xff,
 410			    0xff, 0xf7, 0xff, 0xff, 0xbf, 0xff, 0xff, 0x3f },
 411		.result = { 0xbf, 0x9a, 0xff, 0xd0, 0x6b, 0x84, 0x40, 0x85,
 412			    0x58, 0x64, 0x60, 0x96, 0x2e, 0xf2, 0x14, 0x6f,
 413			    0xf3, 0xd4, 0x53, 0x3d, 0x94, 0x44, 0xaa, 0xb0,
 414			    0x06, 0xeb, 0x88, 0xcc, 0x30, 0x54, 0x40, 0x7d },
 415		.valid = true
 416	},
 417	/* wycheproof - edge case for public key */
 418	{
 419		.private = { 0x18, 0x8c, 0x4b, 0xc5, 0xb9, 0xc4, 0x4b, 0x38,
 420			     0xbb, 0x65, 0x8b, 0x9b, 0x2a, 0xe8, 0x2d, 0x5b,
 421			     0x01, 0x01, 0x5e, 0x09, 0x31, 0x84, 0xb1, 0x7c,
 422			     0xb7, 0x86, 0x35, 0x03, 0xa7, 0x83, 0xe1, 0xbb },
 423		.public = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 424			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 425			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 426			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f },
 427		.result = { 0xd4, 0x80, 0xde, 0x04, 0xf6, 0x99, 0xcb, 0x3b,
 428			    0xe0, 0x68, 0x4a, 0x9c, 0xc2, 0xe3, 0x12, 0x81,
 429			    0xea, 0x0b, 0xc5, 0xa9, 0xdc, 0xc1, 0x57, 0xd3,
 430			    0xd2, 0x01, 0x58, 0xd4, 0x6c, 0xa5, 0x24, 0x6d },
 431		.valid = true
 432	},
 433	/* wycheproof - edge case for public key */
 434	{
 435		.private = { 0xe0, 0x6c, 0x11, 0xbb, 0x2e, 0x13, 0xce, 0x3d,
 436			     0xc7, 0x67, 0x3f, 0x67, 0xf5, 0x48, 0x22, 0x42,
 437			     0x90, 0x94, 0x23, 0xa9, 0xae, 0x95, 0xee, 0x98,
 438			     0x6a, 0x98, 0x8d, 0x98, 0xfa, 0xee, 0x23, 0xa2 },
 439		.public = { 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0x7f,
 440			    0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0x7f,
 441			    0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0x7f,
 442			    0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0x7f },
 443		.result = { 0x4c, 0x44, 0x01, 0xcc, 0xe6, 0xb5, 0x1e, 0x4c,
 444			    0xb1, 0x8f, 0x27, 0x90, 0x24, 0x6c, 0x9b, 0xf9,
 445			    0x14, 0xdb, 0x66, 0x77, 0x50, 0xa1, 0xcb, 0x89,
 446			    0x06, 0x90, 0x92, 0xaf, 0x07, 0x29, 0x22, 0x76 },
 447		.valid = true
 448	},
 449	/* wycheproof - edge case for public key */
 450	{
 451		.private = { 0xc0, 0x65, 0x8c, 0x46, 0xdd, 0xe1, 0x81, 0x29,
 452			     0x29, 0x38, 0x77, 0x53, 0x5b, 0x11, 0x62, 0xb6,
 453			     0xf9, 0xf5, 0x41, 0x4a, 0x23, 0xcf, 0x4d, 0x2c,
 454			     0xbc, 0x14, 0x0a, 0x4d, 0x99, 0xda, 0x2b, 0x8f },
 455		.public = { 0xeb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 456			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 457			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 458			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
 459		.result = { 0x57, 0x8b, 0xa8, 0xcc, 0x2d, 0xbd, 0xc5, 0x75,
 460			    0xaf, 0xcf, 0x9d, 0xf2, 0xb3, 0xee, 0x61, 0x89,
 461			    0xf5, 0x33, 0x7d, 0x68, 0x54, 0xc7, 0x9b, 0x4c,
 462			    0xe1, 0x65, 0xea, 0x12, 0x29, 0x3b, 0x3a, 0x0f },
 463		.valid = true
 464	},
 465	/* wycheproof - public key with low order */
 466	{
 467		.private = { 0x10, 0x25, 0x5c, 0x92, 0x30, 0xa9, 0x7a, 0x30,
 468			     0xa4, 0x58, 0xca, 0x28, 0x4a, 0x62, 0x96, 0x69,
 469			     0x29, 0x3a, 0x31, 0x89, 0x0c, 0xda, 0x9d, 0x14,
 470			     0x7f, 0xeb, 0xc7, 0xd1, 0xe2, 0x2d, 0x6b, 0xb1 },
 471		.public = { 0xe0, 0xeb, 0x7a, 0x7c, 0x3b, 0x41, 0xb8, 0xae,
 472			    0x16, 0x56, 0xe3, 0xfa, 0xf1, 0x9f, 0xc4, 0x6a,
 473			    0xda, 0x09, 0x8d, 0xeb, 0x9c, 0x32, 0xb1, 0xfd,
 474			    0x86, 0x62, 0x05, 0x16, 0x5f, 0x49, 0xb8, 0x00 },
 475		.result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 476			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 477			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 478			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
 479		.valid = false
 480	},
 481	/* wycheproof - public key with low order */
 482	{
 483		.private = { 0x78, 0xf1, 0xe8, 0xed, 0xf1, 0x44, 0x81, 0xb3,
 484			     0x89, 0x44, 0x8d, 0xac, 0x8f, 0x59, 0xc7, 0x0b,
 485			     0x03, 0x8e, 0x7c, 0xf9, 0x2e, 0xf2, 0xc7, 0xef,
 486			     0xf5, 0x7a, 0x72, 0x46, 0x6e, 0x11, 0x52, 0x96 },
 487		.public = { 0x5f, 0x9c, 0x95, 0xbc, 0xa3, 0x50, 0x8c, 0x24,
 488			    0xb1, 0xd0, 0xb1, 0x55, 0x9c, 0x83, 0xef, 0x5b,
 489			    0x04, 0x44, 0x5c, 0xc4, 0x58, 0x1c, 0x8e, 0x86,
 490			    0xd8, 0x22, 0x4e, 0xdd, 0xd0, 0x9f, 0x11, 0x57 },
 491		.result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 492			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 493			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 494			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
 495		.valid = false
 496	},
 497	/* wycheproof - public key with low order */
 498	{
 499		.private = { 0xa0, 0xa0, 0x5a, 0x3e, 0x8f, 0x9f, 0x44, 0x20,
 500			     0x4d, 0x5f, 0x80, 0x59, 0xa9, 0x4a, 0xc7, 0xdf,
 501			     0xc3, 0x9a, 0x49, 0xac, 0x01, 0x6d, 0xd7, 0x43,
 502			     0xdb, 0xfa, 0x43, 0xc5, 0xd6, 0x71, 0xfd, 0x88 },
 503		.public = { 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 504			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 505			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 506			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
 507		.result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 508			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 509			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 510			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
 511		.valid = false
 512	},
 513	/* wycheproof - public key with low order */
 514	{
 515		.private = { 0xd0, 0xdb, 0xb3, 0xed, 0x19, 0x06, 0x66, 0x3f,
 516			     0x15, 0x42, 0x0a, 0xf3, 0x1f, 0x4e, 0xaf, 0x65,
 517			     0x09, 0xd9, 0xa9, 0x94, 0x97, 0x23, 0x50, 0x06,
 518			     0x05, 0xad, 0x7c, 0x1c, 0x6e, 0x74, 0x50, 0xa9 },
 519		.public = { 0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 520			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 521			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 522			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
 523		.result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 524			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 525			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 526			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
 527		.valid = false
 528	},
 529	/* wycheproof - public key with low order */
 530	{
 531		.private = { 0xc0, 0xb1, 0xd0, 0xeb, 0x22, 0xb2, 0x44, 0xfe,
 532			     0x32, 0x91, 0x14, 0x00, 0x72, 0xcd, 0xd9, 0xd9,
 533			     0x89, 0xb5, 0xf0, 0xec, 0xd9, 0x6c, 0x10, 0x0f,
 534			     0xeb, 0x5b, 0xca, 0x24, 0x1c, 0x1d, 0x9f, 0x8f },
 535		.public = { 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 536			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 537			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 538			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
 539		.result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 540			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 541			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 542			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
 543		.valid = false
 544	},
 545	/* wycheproof - public key with low order */
 546	{
 547		.private = { 0x48, 0x0b, 0xf4, 0x5f, 0x59, 0x49, 0x42, 0xa8,
 548			     0xbc, 0x0f, 0x33, 0x53, 0xc6, 0xe8, 0xb8, 0x85,
 549			     0x3d, 0x77, 0xf3, 0x51, 0xf1, 0xc2, 0xca, 0x6c,
 550			     0x2d, 0x1a, 0xbf, 0x8a, 0x00, 0xb4, 0x22, 0x9c },
 551		.public = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 552			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 553			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 554			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80 },
 555		.result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 556			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 557			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 558			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
 559		.valid = false
 560	},
 561	/* wycheproof - public key with low order */
 562	{
 563		.private = { 0x30, 0xf9, 0x93, 0xfc, 0xf8, 0x51, 0x4f, 0xc8,
 564			     0x9b, 0xd8, 0xdb, 0x14, 0xcd, 0x43, 0xba, 0x0d,
 565			     0x4b, 0x25, 0x30, 0xe7, 0x3c, 0x42, 0x76, 0xa0,
 566			     0x5e, 0x1b, 0x14, 0x5d, 0x42, 0x0c, 0xed, 0xb4 },
 567		.public = { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 568			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 569			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 570			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80 },
 571		.result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 572			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 573			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 574			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
 575		.valid = false
 576	},
 577	/* wycheproof - public key with low order */
 578	{
 579		.private = { 0xc0, 0x49, 0x74, 0xb7, 0x58, 0x38, 0x0e, 0x2a,
 580			     0x5b, 0x5d, 0xf6, 0xeb, 0x09, 0xbb, 0x2f, 0x6b,
 581			     0x34, 0x34, 0xf9, 0x82, 0x72, 0x2a, 0x8e, 0x67,
 582			     0x6d, 0x3d, 0xa2, 0x51, 0xd1, 0xb3, 0xde, 0x83 },
 583		.public = { 0xe0, 0xeb, 0x7a, 0x7c, 0x3b, 0x41, 0xb8, 0xae,
 584			    0x16, 0x56, 0xe3, 0xfa, 0xf1, 0x9f, 0xc4, 0x6a,
 585			    0xda, 0x09, 0x8d, 0xeb, 0x9c, 0x32, 0xb1, 0xfd,
 586			    0x86, 0x62, 0x05, 0x16, 0x5f, 0x49, 0xb8, 0x80 },
 587		.result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 588			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 589			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 590			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
 591		.valid = false
 592	},
 593	/* wycheproof - public key with low order */
 594	{
 595		.private = { 0x50, 0x2a, 0x31, 0x37, 0x3d, 0xb3, 0x24, 0x46,
 596			     0x84, 0x2f, 0xe5, 0xad, 0xd3, 0xe0, 0x24, 0x02,
 597			     0x2e, 0xa5, 0x4f, 0x27, 0x41, 0x82, 0xaf, 0xc3,
 598			     0xd9, 0xf1, 0xbb, 0x3d, 0x39, 0x53, 0x4e, 0xb5 },
 599		.public = { 0x5f, 0x9c, 0x95, 0xbc, 0xa3, 0x50, 0x8c, 0x24,
 600			    0xb1, 0xd0, 0xb1, 0x55, 0x9c, 0x83, 0xef, 0x5b,
 601			    0x04, 0x44, 0x5c, 0xc4, 0x58, 0x1c, 0x8e, 0x86,
 602			    0xd8, 0x22, 0x4e, 0xdd, 0xd0, 0x9f, 0x11, 0xd7 },
 603		.result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 604			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 605			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 606			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
 607		.valid = false
 608	},
 609	/* wycheproof - public key with low order */
 610	{
 611		.private = { 0x90, 0xfa, 0x64, 0x17, 0xb0, 0xe3, 0x70, 0x30,
 612			     0xfd, 0x6e, 0x43, 0xef, 0xf2, 0xab, 0xae, 0xf1,
 613			     0x4c, 0x67, 0x93, 0x11, 0x7a, 0x03, 0x9c, 0xf6,
 614			     0x21, 0x31, 0x8b, 0xa9, 0x0f, 0x4e, 0x98, 0xbe },
 615		.public = { 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 616			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 617			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 618			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
 619		.result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 620			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 621			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 622			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
 623		.valid = false
 624	},
 625	/* wycheproof - public key with low order */
 626	{
 627		.private = { 0x78, 0xad, 0x3f, 0x26, 0x02, 0x7f, 0x1c, 0x9f,
 628			     0xdd, 0x97, 0x5a, 0x16, 0x13, 0xb9, 0x47, 0x77,
 629			     0x9b, 0xad, 0x2c, 0xf2, 0xb7, 0x41, 0xad, 0xe0,
 630			     0x18, 0x40, 0x88, 0x5a, 0x30, 0xbb, 0x97, 0x9c },
 631		.public = { 0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 632			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 633			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 634			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
 635		.result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 636			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 637			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 638			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
 639		.valid = false
 640	},
 641	/* wycheproof - public key with low order */
 642	{
 643		.private = { 0x98, 0xe2, 0x3d, 0xe7, 0xb1, 0xe0, 0x92, 0x6e,
 644			     0xd9, 0xc8, 0x7e, 0x7b, 0x14, 0xba, 0xf5, 0x5f,
 645			     0x49, 0x7a, 0x1d, 0x70, 0x96, 0xf9, 0x39, 0x77,
 646			     0x68, 0x0e, 0x44, 0xdc, 0x1c, 0x7b, 0x7b, 0x8b },
 647		.public = { 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 648			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 649			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 650			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
 651		.result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 652			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 653			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 654			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
 655		.valid = false
 656	},
 657	/* wycheproof - public key >= p */
 658	{
 659		.private = { 0xf0, 0x1e, 0x48, 0xda, 0xfa, 0xc9, 0xd7, 0xbc,
 660			     0xf5, 0x89, 0xcb, 0xc3, 0x82, 0xc8, 0x78, 0xd1,
 661			     0x8b, 0xda, 0x35, 0x50, 0x58, 0x9f, 0xfb, 0x5d,
 662			     0x50, 0xb5, 0x23, 0xbe, 0xbe, 0x32, 0x9d, 0xae },
 663		.public = { 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 664			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 665			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 666			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
 667		.result = { 0xbd, 0x36, 0xa0, 0x79, 0x0e, 0xb8, 0x83, 0x09,
 668			    0x8c, 0x98, 0x8b, 0x21, 0x78, 0x67, 0x73, 0xde,
 669			    0x0b, 0x3a, 0x4d, 0xf1, 0x62, 0x28, 0x2c, 0xf1,
 670			    0x10, 0xde, 0x18, 0xdd, 0x48, 0x4c, 0xe7, 0x4b },
 671		.valid = true
 672	},
 673	/* wycheproof - public key >= p */
 674	{
 675		.private = { 0x28, 0x87, 0x96, 0xbc, 0x5a, 0xff, 0x4b, 0x81,
 676			     0xa3, 0x75, 0x01, 0x75, 0x7b, 0xc0, 0x75, 0x3a,
 677			     0x3c, 0x21, 0x96, 0x47, 0x90, 0xd3, 0x86, 0x99,
 678			     0x30, 0x8d, 0xeb, 0xc1, 0x7a, 0x6e, 0xaf, 0x8d },
 679		.public = { 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 680			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 681			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 682			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
 683		.result = { 0xb4, 0xe0, 0xdd, 0x76, 0xda, 0x7b, 0x07, 0x17,
 684			    0x28, 0xb6, 0x1f, 0x85, 0x67, 0x71, 0xaa, 0x35,
 685			    0x6e, 0x57, 0xed, 0xa7, 0x8a, 0x5b, 0x16, 0x55,
 686			    0xcc, 0x38, 0x20, 0xfb, 0x5f, 0x85, 0x4c, 0x5c },
 687		.valid = true
 688	},
 689	/* wycheproof - public key >= p */
 690	{
 691		.private = { 0x98, 0xdf, 0x84, 0x5f, 0x66, 0x51, 0xbf, 0x11,
 692			     0x38, 0x22, 0x1f, 0x11, 0x90, 0x41, 0xf7, 0x2b,
 693			     0x6d, 0xbc, 0x3c, 0x4a, 0xce, 0x71, 0x43, 0xd9,
 694			     0x9f, 0xd5, 0x5a, 0xd8, 0x67, 0x48, 0x0d, 0xa8 },
 695		.public = { 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 696			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 697			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 698			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
 699		.result = { 0x6f, 0xdf, 0x6c, 0x37, 0x61, 0x1d, 0xbd, 0x53,
 700			    0x04, 0xdc, 0x0f, 0x2e, 0xb7, 0xc9, 0x51, 0x7e,
 701			    0xb3, 0xc5, 0x0e, 0x12, 0xfd, 0x05, 0x0a, 0xc6,
 702			    0xde, 0xc2, 0x70, 0x71, 0xd4, 0xbf, 0xc0, 0x34 },
 703		.valid = true
 704	},
 705	/* wycheproof - public key >= p */
 706	{
 707		.private = { 0xf0, 0x94, 0x98, 0xe4, 0x6f, 0x02, 0xf8, 0x78,
 708			     0x82, 0x9e, 0x78, 0xb8, 0x03, 0xd3, 0x16, 0xa2,
 709			     0xed, 0x69, 0x5d, 0x04, 0x98, 0xa0, 0x8a, 0xbd,
 710			     0xf8, 0x27, 0x69, 0x30, 0xe2, 0x4e, 0xdc, 0xb0 },
 711		.public = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 712			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 713			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 714			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
 715		.result = { 0x4c, 0x8f, 0xc4, 0xb1, 0xc6, 0xab, 0x88, 0xfb,
 716			    0x21, 0xf1, 0x8f, 0x6d, 0x4c, 0x81, 0x02, 0x40,
 717			    0xd4, 0xe9, 0x46, 0x51, 0xba, 0x44, 0xf7, 0xa2,
 718			    0xc8, 0x63, 0xce, 0xc7, 0xdc, 0x56, 0x60, 0x2d },
 719		.valid = true
 720	},
 721	/* wycheproof - public key >= p */
 722	{
 723		.private = { 0x18, 0x13, 0xc1, 0x0a, 0x5c, 0x7f, 0x21, 0xf9,
 724			     0x6e, 0x17, 0xf2, 0x88, 0xc0, 0xcc, 0x37, 0x60,
 725			     0x7c, 0x04, 0xc5, 0xf5, 0xae, 0xa2, 0xdb, 0x13,
 726			     0x4f, 0x9e, 0x2f, 0xfc, 0x66, 0xbd, 0x9d, 0xb8 },
 727		.public = { 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 728			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 729			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 730			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80 },
 731		.result = { 0x1c, 0xd0, 0xb2, 0x82, 0x67, 0xdc, 0x54, 0x1c,
 732			    0x64, 0x2d, 0x6d, 0x7d, 0xca, 0x44, 0xa8, 0xb3,
 733			    0x8a, 0x63, 0x73, 0x6e, 0xef, 0x5c, 0x4e, 0x65,
 734			    0x01, 0xff, 0xbb, 0xb1, 0x78, 0x0c, 0x03, 0x3c },
 735		.valid = true
 736	},
 737	/* wycheproof - public key >= p */
 738	{
 739		.private = { 0x78, 0x57, 0xfb, 0x80, 0x86, 0x53, 0x64, 0x5a,
 740			     0x0b, 0xeb, 0x13, 0x8a, 0x64, 0xf5, 0xf4, 0xd7,
 741			     0x33, 0xa4, 0x5e, 0xa8, 0x4c, 0x3c, 0xda, 0x11,
 742			     0xa9, 0xc0, 0x6f, 0x7e, 0x71, 0x39, 0x14, 0x9e },
 743		.public = { 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 744			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 745			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 746			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80 },
 747		.result = { 0x87, 0x55, 0xbe, 0x01, 0xc6, 0x0a, 0x7e, 0x82,
 748			    0x5c, 0xff, 0x3e, 0x0e, 0x78, 0xcb, 0x3a, 0xa4,
 749			    0x33, 0x38, 0x61, 0x51, 0x6a, 0xa5, 0x9b, 0x1c,
 750			    0x51, 0xa8, 0xb2, 0xa5, 0x43, 0xdf, 0xa8, 0x22 },
 751		.valid = true
 752	},
 753	/* wycheproof - public key >= p */
 754	{
 755		.private = { 0xe0, 0x3a, 0xa8, 0x42, 0xe2, 0xab, 0xc5, 0x6e,
 756			     0x81, 0xe8, 0x7b, 0x8b, 0x9f, 0x41, 0x7b, 0x2a,
 757			     0x1e, 0x59, 0x13, 0xc7, 0x23, 0xee, 0xd2, 0x8d,
 758			     0x75, 0x2f, 0x8d, 0x47, 0xa5, 0x9f, 0x49, 0x8f },
 759		.public = { 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 760			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 761			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 762			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80 },
 763		.result = { 0x54, 0xc9, 0xa1, 0xed, 0x95, 0xe5, 0x46, 0xd2,
 764			    0x78, 0x22, 0xa3, 0x60, 0x93, 0x1d, 0xda, 0x60,
 765			    0xa1, 0xdf, 0x04, 0x9d, 0xa6, 0xf9, 0x04, 0x25,
 766			    0x3c, 0x06, 0x12, 0xbb, 0xdc, 0x08, 0x74, 0x76 },
 767		.valid = true
 768	},
 769	/* wycheproof - public key >= p */
 770	{
 771		.private = { 0xf8, 0xf7, 0x07, 0xb7, 0x99, 0x9b, 0x18, 0xcb,
 772			     0x0d, 0x6b, 0x96, 0x12, 0x4f, 0x20, 0x45, 0x97,
 773			     0x2c, 0xa2, 0x74, 0xbf, 0xc1, 0x54, 0xad, 0x0c,
 774			     0x87, 0x03, 0x8c, 0x24, 0xc6, 0xd0, 0xd4, 0xb2 },
 775		.public = { 0xda, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 776			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 777			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 778			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
 779		.result = { 0xcc, 0x1f, 0x40, 0xd7, 0x43, 0xcd, 0xc2, 0x23,
 780			    0x0e, 0x10, 0x43, 0xda, 0xba, 0x8b, 0x75, 0xe8,
 781			    0x10, 0xf1, 0xfb, 0xab, 0x7f, 0x25, 0x52, 0x69,
 782			    0xbd, 0x9e, 0xbb, 0x29, 0xe6, 0xbf, 0x49, 0x4f },
 783		.valid = true
 784	},
 785	/* wycheproof - public key >= p */
 786	{
 787		.private = { 0xa0, 0x34, 0xf6, 0x84, 0xfa, 0x63, 0x1e, 0x1a,
 788			     0x34, 0x81, 0x18, 0xc1, 0xce, 0x4c, 0x98, 0x23,
 789			     0x1f, 0x2d, 0x9e, 0xec, 0x9b, 0xa5, 0x36, 0x5b,
 790			     0x4a, 0x05, 0xd6, 0x9a, 0x78, 0x5b, 0x07, 0x96 },
 791		.public = { 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 792			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 793			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 794			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
 795		.result = { 0x54, 0x99, 0x8e, 0xe4, 0x3a, 0x5b, 0x00, 0x7b,
 796			    0xf4, 0x99, 0xf0, 0x78, 0xe7, 0x36, 0x52, 0x44,
 797			    0x00, 0xa8, 0xb5, 0xc7, 0xe9, 0xb9, 0xb4, 0x37,
 798			    0x71, 0x74, 0x8c, 0x7c, 0xdf, 0x88, 0x04, 0x12 },
 799		.valid = true
 800	},
 801	/* wycheproof - public key >= p */
 802	{
 803		.private = { 0x30, 0xb6, 0xc6, 0xa0, 0xf2, 0xff, 0xa6, 0x80,
 804			     0x76, 0x8f, 0x99, 0x2b, 0xa8, 0x9e, 0x15, 0x2d,
 805			     0x5b, 0xc9, 0x89, 0x3d, 0x38, 0xc9, 0x11, 0x9b,
 806			     0xe4, 0xf7, 0x67, 0xbf, 0xab, 0x6e, 0x0c, 0xa5 },
 807		.public = { 0xdc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 808			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 809			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 810			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
 811		.result = { 0xea, 0xd9, 0xb3, 0x8e, 0xfd, 0xd7, 0x23, 0x63,
 812			    0x79, 0x34, 0xe5, 0x5a, 0xb7, 0x17, 0xa7, 0xae,
 813			    0x09, 0xeb, 0x86, 0xa2, 0x1d, 0xc3, 0x6a, 0x3f,
 814			    0xee, 0xb8, 0x8b, 0x75, 0x9e, 0x39, 0x1e, 0x09 },
 815		.valid = true
 816	},
 817	/* wycheproof - public key >= p */
 818	{
 819		.private = { 0x90, 0x1b, 0x9d, 0xcf, 0x88, 0x1e, 0x01, 0xe0,
 820			     0x27, 0x57, 0x50, 0x35, 0xd4, 0x0b, 0x43, 0xbd,
 821			     0xc1, 0xc5, 0x24, 0x2e, 0x03, 0x08, 0x47, 0x49,
 822			     0x5b, 0x0c, 0x72, 0x86, 0x46, 0x9b, 0x65, 0x91 },
 823		.public = { 0xea, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 824			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 825			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 826			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
 827		.result = { 0x60, 0x2f, 0xf4, 0x07, 0x89, 0xb5, 0x4b, 0x41,
 828			    0x80, 0x59, 0x15, 0xfe, 0x2a, 0x62, 0x21, 0xf0,
 829			    0x7a, 0x50, 0xff, 0xc2, 0xc3, 0xfc, 0x94, 0xcf,
 830			    0x61, 0xf1, 0x3d, 0x79, 0x04, 0xe8, 0x8e, 0x0e },
 831		.valid = true
 832	},
 833	/* wycheproof - public key >= p */
 834	{
 835		.private = { 0x80, 0x46, 0x67, 0x7c, 0x28, 0xfd, 0x82, 0xc9,
 836			     0xa1, 0xbd, 0xb7, 0x1a, 0x1a, 0x1a, 0x34, 0xfa,
 837			     0xba, 0x12, 0x25, 0xe2, 0x50, 0x7f, 0xe3, 0xf5,
 838			     0x4d, 0x10, 0xbd, 0x5b, 0x0d, 0x86, 0x5f, 0x8e },
 839		.public = { 0xeb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 840			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 841			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 842			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
 843		.result = { 0xe0, 0x0a, 0xe8, 0xb1, 0x43, 0x47, 0x12, 0x47,
 844			    0xba, 0x24, 0xf1, 0x2c, 0x88, 0x55, 0x36, 0xc3,
 845			    0xcb, 0x98, 0x1b, 0x58, 0xe1, 0xe5, 0x6b, 0x2b,
 846			    0xaf, 0x35, 0xc1, 0x2a, 0xe1, 0xf7, 0x9c, 0x26 },
 847		.valid = true
 848	},
 849	/* wycheproof - public key >= p */
 850	{
 851		.private = { 0x60, 0x2f, 0x7e, 0x2f, 0x68, 0xa8, 0x46, 0xb8,
 852			     0x2c, 0xc2, 0x69, 0xb1, 0xd4, 0x8e, 0x93, 0x98,
 853			     0x86, 0xae, 0x54, 0xfd, 0x63, 0x6c, 0x1f, 0xe0,
 854			     0x74, 0xd7, 0x10, 0x12, 0x7d, 0x47, 0x24, 0x91 },
 855		.public = { 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 856			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 857			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 858			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
 859		.result = { 0x98, 0xcb, 0x9b, 0x50, 0xdd, 0x3f, 0xc2, 0xb0,
 860			    0xd4, 0xf2, 0xd2, 0xbf, 0x7c, 0x5c, 0xfd, 0xd1,
 861			    0x0c, 0x8f, 0xcd, 0x31, 0xfc, 0x40, 0xaf, 0x1a,
 862			    0xd4, 0x4f, 0x47, 0xc1, 0x31, 0x37, 0x63, 0x62 },
 863		.valid = true
 864	},
 865	/* wycheproof - public key >= p */
 866	{
 867		.private = { 0x60, 0x88, 0x7b, 0x3d, 0xc7, 0x24, 0x43, 0x02,
 868			     0x6e, 0xbe, 0xdb, 0xbb, 0xb7, 0x06, 0x65, 0xf4,
 869			     0x2b, 0x87, 0xad, 0xd1, 0x44, 0x0e, 0x77, 0x68,
 870			     0xfb, 0xd7, 0xe8, 0xe2, 0xce, 0x5f, 0x63, 0x9d },
 871		.public = { 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 872			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 873			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 874			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
 875		.result = { 0x38, 0xd6, 0x30, 0x4c, 0x4a, 0x7e, 0x6d, 0x9f,
 876			    0x79, 0x59, 0x33, 0x4f, 0xb5, 0x24, 0x5b, 0xd2,
 877			    0xc7, 0x54, 0x52, 0x5d, 0x4c, 0x91, 0xdb, 0x95,
 878			    0x02, 0x06, 0x92, 0x62, 0x34, 0xc1, 0xf6, 0x33 },
 879		.valid = true
 880	},
 881	/* wycheproof - public key >= p */
 882	{
 883		.private = { 0x78, 0xd3, 0x1d, 0xfa, 0x85, 0x44, 0x97, 0xd7,
 884			     0x2d, 0x8d, 0xef, 0x8a, 0x1b, 0x7f, 0xb0, 0x06,
 885			     0xce, 0xc2, 0xd8, 0xc4, 0x92, 0x46, 0x47, 0xc9,
 886			     0x38, 0x14, 0xae, 0x56, 0xfa, 0xed, 0xa4, 0x95 },
 887		.public = { 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 888			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 889			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 890			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
 891		.result = { 0x78, 0x6c, 0xd5, 0x49, 0x96, 0xf0, 0x14, 0xa5,
 892			    0xa0, 0x31, 0xec, 0x14, 0xdb, 0x81, 0x2e, 0xd0,
 893			    0x83, 0x55, 0x06, 0x1f, 0xdb, 0x5d, 0xe6, 0x80,
 894			    0xa8, 0x00, 0xac, 0x52, 0x1f, 0x31, 0x8e, 0x23 },
 895		.valid = true
 896	},
 897	/* wycheproof - public key >= p */
 898	{
 899		.private = { 0xc0, 0x4c, 0x5b, 0xae, 0xfa, 0x83, 0x02, 0xdd,
 900			     0xde, 0xd6, 0xa4, 0xbb, 0x95, 0x77, 0x61, 0xb4,
 901			     0xeb, 0x97, 0xae, 0xfa, 0x4f, 0xc3, 0xb8, 0x04,
 902			     0x30, 0x85, 0xf9, 0x6a, 0x56, 0x59, 0xb3, 0xa5 },
 903		.public = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 904			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 905			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 906			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
 907		.result = { 0x29, 0xae, 0x8b, 0xc7, 0x3e, 0x9b, 0x10, 0xa0,
 908			    0x8b, 0x4f, 0x68, 0x1c, 0x43, 0xc3, 0xe0, 0xac,
 909			    0x1a, 0x17, 0x1d, 0x31, 0xb3, 0x8f, 0x1a, 0x48,
 910			    0xef, 0xba, 0x29, 0xae, 0x63, 0x9e, 0xa1, 0x34 },
 911		.valid = true
 912	},
 913	/* wycheproof - RFC 7748 */
 914	{
 915		.private = { 0xa0, 0x46, 0xe3, 0x6b, 0xf0, 0x52, 0x7c, 0x9d,
 916			     0x3b, 0x16, 0x15, 0x4b, 0x82, 0x46, 0x5e, 0xdd,
 917			     0x62, 0x14, 0x4c, 0x0a, 0xc1, 0xfc, 0x5a, 0x18,
 918			     0x50, 0x6a, 0x22, 0x44, 0xba, 0x44, 0x9a, 0x44 },
 919		.public = { 0xe6, 0xdb, 0x68, 0x67, 0x58, 0x30, 0x30, 0xdb,
 920			    0x35, 0x94, 0xc1, 0xa4, 0x24, 0xb1, 0x5f, 0x7c,
 921			    0x72, 0x66, 0x24, 0xec, 0x26, 0xb3, 0x35, 0x3b,
 922			    0x10, 0xa9, 0x03, 0xa6, 0xd0, 0xab, 0x1c, 0x4c },
 923		.result = { 0xc3, 0xda, 0x55, 0x37, 0x9d, 0xe9, 0xc6, 0x90,
 924			    0x8e, 0x94, 0xea, 0x4d, 0xf2, 0x8d, 0x08, 0x4f,
 925			    0x32, 0xec, 0xcf, 0x03, 0x49, 0x1c, 0x71, 0xf7,
 926			    0x54, 0xb4, 0x07, 0x55, 0x77, 0xa2, 0x85, 0x52 },
 927		.valid = true
 928	},
 929	/* wycheproof - RFC 7748 */
 930	{
 931		.private = { 0x48, 0x66, 0xe9, 0xd4, 0xd1, 0xb4, 0x67, 0x3c,
 932			     0x5a, 0xd2, 0x26, 0x91, 0x95, 0x7d, 0x6a, 0xf5,
 933			     0xc1, 0x1b, 0x64, 0x21, 0xe0, 0xea, 0x01, 0xd4,
 934			     0x2c, 0xa4, 0x16, 0x9e, 0x79, 0x18, 0xba, 0x4d },
 935		.public = { 0xe5, 0x21, 0x0f, 0x12, 0x78, 0x68, 0x11, 0xd3,
 936			    0xf4, 0xb7, 0x95, 0x9d, 0x05, 0x38, 0xae, 0x2c,
 937			    0x31, 0xdb, 0xe7, 0x10, 0x6f, 0xc0, 0x3c, 0x3e,
 938			    0xfc, 0x4c, 0xd5, 0x49, 0xc7, 0x15, 0xa4, 0x13 },
 939		.result = { 0x95, 0xcb, 0xde, 0x94, 0x76, 0xe8, 0x90, 0x7d,
 940			    0x7a, 0xad, 0xe4, 0x5c, 0xb4, 0xb8, 0x73, 0xf8,
 941			    0x8b, 0x59, 0x5a, 0x68, 0x79, 0x9f, 0xa1, 0x52,
 942			    0xe6, 0xf8, 0xf7, 0x64, 0x7a, 0xac, 0x79, 0x57 },
 943		.valid = true
 944	},
 945	/* wycheproof - edge case for shared secret */
 946	{
 947		.private = { 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
 948			     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
 949			     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
 950			     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
 951		.public = { 0x0a, 0xb4, 0xe7, 0x63, 0x80, 0xd8, 0x4d, 0xde,
 952			    0x4f, 0x68, 0x33, 0xc5, 0x8f, 0x2a, 0x9f, 0xb8,
 953			    0xf8, 0x3b, 0xb0, 0x16, 0x9b, 0x17, 0x2b, 0xe4,
 954			    0xb6, 0xe0, 0x59, 0x28, 0x87, 0x74, 0x1a, 0x36 },
 955		.result = { 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 956			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 957			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 958			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
 959		.valid = true
 960	},
 961	/* wycheproof - edge case for shared secret */
 962	{
 963		.private = { 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
 964			     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
 965			     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
 966			     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
 967		.public = { 0x89, 0xe1, 0x0d, 0x57, 0x01, 0xb4, 0x33, 0x7d,
 968			    0x2d, 0x03, 0x21, 0x81, 0x53, 0x8b, 0x10, 0x64,
 969			    0xbd, 0x40, 0x84, 0x40, 0x1c, 0xec, 0xa1, 0xfd,
 970			    0x12, 0x66, 0x3a, 0x19, 0x59, 0x38, 0x80, 0x00 },
 971		.result = { 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 972			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 973			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 974			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
 975		.valid = true
 976	},
 977	/* wycheproof - edge case for shared secret */
 978	{
 979		.private = { 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
 980			     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
 981			     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
 982			     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
 983		.public = { 0x2b, 0x55, 0xd3, 0xaa, 0x4a, 0x8f, 0x80, 0xc8,
 984			    0xc0, 0xb2, 0xae, 0x5f, 0x93, 0x3e, 0x85, 0xaf,
 985			    0x49, 0xbe, 0xac, 0x36, 0xc2, 0xfa, 0x73, 0x94,
 986			    0xba, 0xb7, 0x6c, 0x89, 0x33, 0xf8, 0xf8, 0x1d },
 987		.result = { 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 988			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 989			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 990			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
 991		.valid = true
 992	},
 993	/* wycheproof - edge case for shared secret */
 994	{
 995		.private = { 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
 996			     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
 997			     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
 998			     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
 999		.public = { 0x63, 0xe5, 0xb1, 0xfe, 0x96, 0x01, 0xfe, 0x84,
1000			    0x38, 0x5d, 0x88, 0x66, 0xb0, 0x42, 0x12, 0x62,
1001			    0xf7, 0x8f, 0xbf, 0xa5, 0xaf, 0xf9, 0x58, 0x5e,
1002			    0x62, 0x66, 0x79, 0xb1, 0x85, 0x47, 0xd9, 0x59 },
1003		.result = { 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1004			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1005			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1006			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f },
1007		.valid = true
1008	},
1009	/* wycheproof - edge case for shared secret */
1010	{
1011		.private = { 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
1012			     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
1013			     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
1014			     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
1015		.public = { 0xe4, 0x28, 0xf3, 0xda, 0xc1, 0x78, 0x09, 0xf8,
1016			    0x27, 0xa5, 0x22, 0xce, 0x32, 0x35, 0x50, 0x58,
1017			    0xd0, 0x73, 0x69, 0x36, 0x4a, 0xa7, 0x89, 0x02,
1018			    0xee, 0x10, 0x13, 0x9b, 0x9f, 0x9d, 0xd6, 0x53 },
1019		.result = { 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1020			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1021			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1022			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f },
1023		.valid = true
1024	},
1025	/* wycheproof - edge case for shared secret */
1026	{
1027		.private = { 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
1028			     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
1029			     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
1030			     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
1031		.public = { 0xb3, 0xb5, 0x0e, 0x3e, 0xd3, 0xa4, 0x07, 0xb9,
1032			    0x5d, 0xe9, 0x42, 0xef, 0x74, 0x57, 0x5b, 0x5a,
1033			    0xb8, 0xa1, 0x0c, 0x09, 0xee, 0x10, 0x35, 0x44,
1034			    0xd6, 0x0b, 0xdf, 0xed, 0x81, 0x38, 0xab, 0x2b },
1035		.result = { 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1036			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1037			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1038			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f },
1039		.valid = true
1040	},
1041	/* wycheproof - edge case for shared secret */
1042	{
1043		.private = { 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
1044			     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
1045			     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
1046			     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
1047		.public = { 0x21, 0x3f, 0xff, 0xe9, 0x3d, 0x5e, 0xa8, 0xcd,
1048			    0x24, 0x2e, 0x46, 0x28, 0x44, 0x02, 0x99, 0x22,
1049			    0xc4, 0x3c, 0x77, 0xc9, 0xe3, 0xe4, 0x2f, 0x56,
1050			    0x2f, 0x48, 0x5d, 0x24, 0xc5, 0x01, 0xa2, 0x0b },
1051		.result = { 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1052			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1053			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1054			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f },
1055		.valid = true
1056	},
1057	/* wycheproof - edge case for shared secret */
1058	{
1059		.private = { 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
1060			     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
1061			     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
1062			     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
1063		.public = { 0x91, 0xb2, 0x32, 0xa1, 0x78, 0xb3, 0xcd, 0x53,
1064			    0x09, 0x32, 0x44, 0x1e, 0x61, 0x39, 0x41, 0x8f,
1065			    0x72, 0x17, 0x22, 0x92, 0xf1, 0xda, 0x4c, 0x18,
1066			    0x34, 0xfc, 0x5e, 0xbf, 0xef, 0xb5, 0x1e, 0x3f },
1067		.result = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1068			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1069			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1070			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03 },
1071		.valid = true
1072	},
1073	/* wycheproof - edge case for shared secret */
1074	{
1075		.private = { 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
1076			     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
1077			     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
1078			     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
1079		.public = { 0x04, 0x5c, 0x6e, 0x11, 0xc5, 0xd3, 0x32, 0x55,
1080			    0x6c, 0x78, 0x22, 0xfe, 0x94, 0xeb, 0xf8, 0x9b,
1081			    0x56, 0xa3, 0x87, 0x8d, 0xc2, 0x7c, 0xa0, 0x79,
1082			    0x10, 0x30, 0x58, 0x84, 0x9f, 0xab, 0xcb, 0x4f },
1083		.result = { 0xe5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1084			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1085			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1086			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
1087		.valid = true
1088	},
1089	/* wycheproof - edge case for shared secret */
1090	{
1091		.private = { 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
1092			     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
1093			     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
1094			     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
1095		.public = { 0x1c, 0xa2, 0x19, 0x0b, 0x71, 0x16, 0x35, 0x39,
1096			    0x06, 0x3c, 0x35, 0x77, 0x3b, 0xda, 0x0c, 0x9c,
1097			    0x92, 0x8e, 0x91, 0x36, 0xf0, 0x62, 0x0a, 0xeb,
1098			    0x09, 0x3f, 0x09, 0x91, 0x97, 0xb7, 0xf7, 0x4e },
1099		.result = { 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1100			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1101			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1102			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
1103		.valid = true
1104	},
1105	/* wycheproof - edge case for shared secret */
1106	{
1107		.private = { 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
1108			     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
1109			     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
1110			     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
1111		.public = { 0xf7, 0x6e, 0x90, 0x10, 0xac, 0x33, 0xc5, 0x04,
1112			    0x3b, 0x2d, 0x3b, 0x76, 0xa8, 0x42, 0x17, 0x10,
1113			    0x00, 0xc4, 0x91, 0x62, 0x22, 0xe9, 0xe8, 0x58,
1114			    0x97, 0xa0, 0xae, 0xc7, 0xf6, 0x35, 0x0b, 0x3c },
1115		.result = { 0xdd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1116			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1117			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1118			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
1119		.valid = true
1120	},
1121	/* wycheproof - edge case for shared secret */
1122	{
1123		.private = { 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
1124			     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
1125			     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
1126			     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
1127		.public = { 0xbb, 0x72, 0x68, 0x8d, 0x8f, 0x8a, 0xa7, 0xa3,
1128			    0x9c, 0xd6, 0x06, 0x0c, 0xd5, 0xc8, 0x09, 0x3c,
1129			    0xde, 0xc6, 0xfe, 0x34, 0x19, 0x37, 0xc3, 0x88,
1130			    0x6a, 0x99, 0x34, 0x6c, 0xd0, 0x7f, 0xaa, 0x55 },
1131		.result = { 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1132			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1133			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1134			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
1135		.valid = true
1136	},
1137	/* wycheproof - edge case for shared secret */
1138	{
1139		.private = { 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
1140			     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
1141			     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
1142			     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
1143		.public = { 0x88, 0xfd, 0xde, 0xa1, 0x93, 0x39, 0x1c, 0x6a,
1144			    0x59, 0x33, 0xef, 0x9b, 0x71, 0x90, 0x15, 0x49,
1145			    0x44, 0x72, 0x05, 0xaa, 0xe9, 0xda, 0x92, 0x8a,
1146			    0x6b, 0x91, 0xa3, 0x52, 0xba, 0x10, 0xf4, 0x1f },
1147		.result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1148			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1149			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1150			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 },
1151		.valid = true
1152	},
1153	/* wycheproof - edge case for shared secret */
1154	{
1155		.private = { 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
1156			     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
1157			     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
1158			     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
1159		.public = { 0x30, 0x3b, 0x39, 0x2f, 0x15, 0x31, 0x16, 0xca,
1160			    0xd9, 0xcc, 0x68, 0x2a, 0x00, 0xcc, 0xc4, 0x4c,
1161			    0x95, 0xff, 0x0d, 0x3b, 0xbe, 0x56, 0x8b, 0xeb,
1162			    0x6c, 0x4e, 0x73, 0x9b, 0xaf, 0xdc, 0x2c, 0x68 },
1163		.result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1164			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1165			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1166			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00 },
1167		.valid = true
1168	},
1169	/* wycheproof - checking for overflow */
1170	{
1171		.private = { 0xc8, 0x17, 0x24, 0x70, 0x40, 0x00, 0xb2, 0x6d,
1172			     0x31, 0x70, 0x3c, 0xc9, 0x7e, 0x3a, 0x37, 0x8d,
1173			     0x56, 0xfa, 0xd8, 0x21, 0x93, 0x61, 0xc8, 0x8c,
1174			     0xca, 0x8b, 0xd7, 0xc5, 0x71, 0x9b, 0x12, 0xb2 },
1175		.public = { 0xfd, 0x30, 0x0a, 0xeb, 0x40, 0xe1, 0xfa, 0x58,
1176			    0x25, 0x18, 0x41, 0x2b, 0x49, 0xb2, 0x08, 0xa7,
1177			    0x84, 0x2b, 0x1e, 0x1f, 0x05, 0x6a, 0x04, 0x01,
1178			    0x78, 0xea, 0x41, 0x41, 0x53, 0x4f, 0x65, 0x2d },
1179		.result = { 0xb7, 0x34, 0x10, 0x5d, 0xc2, 0x57, 0x58, 0x5d,
1180			    0x73, 0xb5, 0x66, 0xcc, 0xb7, 0x6f, 0x06, 0x27,
1181			    0x95, 0xcc, 0xbe, 0xc8, 0x91, 0x28, 0xe5, 0x2b,
1182			    0x02, 0xf3, 0xe5, 0x96, 0x39, 0xf1, 0x3c, 0x46 },
1183		.valid = true
1184	},
1185	/* wycheproof - checking for overflow */
1186	{
1187		.private = { 0xc8, 0x17, 0x24, 0x70, 0x40, 0x00, 0xb2, 0x6d,
1188			     0x31, 0x70, 0x3c, 0xc9, 0x7e, 0x3a, 0x37, 0x8d,
1189			     0x56, 0xfa, 0xd8, 0x21, 0x93, 0x61, 0xc8, 0x8c,
1190			     0xca, 0x8b, 0xd7, 0xc5, 0x71, 0x9b, 0x12, 0xb2 },
1191		.public = { 0xc8, 0xef, 0x79, 0xb5, 0x14, 0xd7, 0x68, 0x26,
1192			    0x77, 0xbc, 0x79, 0x31, 0xe0, 0x6e, 0xe5, 0xc2,
1193			    0x7c, 0x9b, 0x39, 0x2b, 0x4a, 0xe9, 0x48, 0x44,
1194			    0x73, 0xf5, 0x54, 0xe6, 0x67, 0x8e, 0xcc, 0x2e },
1195		.result = { 0x64, 0x7a, 0x46, 0xb6, 0xfc, 0x3f, 0x40, 0xd6,
1196			    0x21, 0x41, 0xee, 0x3c, 0xee, 0x70, 0x6b, 0x4d,
1197			    0x7a, 0x92, 0x71, 0x59, 0x3a, 0x7b, 0x14, 0x3e,
1198			    0x8e, 0x2e, 0x22, 0x79, 0x88, 0x3e, 0x45, 0x50 },
1199		.valid = true
1200	},
1201	/* wycheproof - checking for overflow */
1202	{
1203		.private = { 0xc8, 0x17, 0x24, 0x70, 0x40, 0x00, 0xb2, 0x6d,
1204			     0x31, 0x70, 0x3c, 0xc9, 0x7e, 0x3a, 0x37, 0x8d,
1205			     0x56, 0xfa, 0xd8, 0x21, 0x93, 0x61, 0xc8, 0x8c,
1206			     0xca, 0x8b, 0xd7, 0xc5, 0x71, 0x9b, 0x12, 0xb2 },
1207		.public = { 0x64, 0xae, 0xac, 0x25, 0x04, 0x14, 0x48, 0x61,
1208			    0x53, 0x2b, 0x7b, 0xbc, 0xb6, 0xc8, 0x7d, 0x67,
1209			    0xdd, 0x4c, 0x1f, 0x07, 0xeb, 0xc2, 0xe0, 0x6e,
1210			    0xff, 0xb9, 0x5a, 0xec, 0xc6, 0x17, 0x0b, 0x2c },
1211		.result = { 0x4f, 0xf0, 0x3d, 0x5f, 0xb4, 0x3c, 0xd8, 0x65,
1212			    0x7a, 0x3c, 0xf3, 0x7c, 0x13, 0x8c, 0xad, 0xce,
1213			    0xcc, 0xe5, 0x09, 0xe4, 0xeb, 0xa0, 0x89, 0xd0,
1214			    0xef, 0x40, 0xb4, 0xe4, 0xfb, 0x94, 0x61, 0x55 },
1215		.valid = true
1216	},
1217	/* wycheproof - checking for overflow */
1218	{
1219		.private = { 0xc8, 0x17, 0x24, 0x70, 0x40, 0x00, 0xb2, 0x6d,
1220			     0x31, 0x70, 0x3c, 0xc9, 0x7e, 0x3a, 0x37, 0x8d,
1221			     0x56, 0xfa, 0xd8, 0x21, 0x93, 0x61, 0xc8, 0x8c,
1222			     0xca, 0x8b, 0xd7, 0xc5, 0x71, 0x9b, 0x12, 0xb2 },
1223		.public = { 0xbf, 0x68, 0xe3, 0x5e, 0x9b, 0xdb, 0x7e, 0xee,
1224			    0x1b, 0x50, 0x57, 0x02, 0x21, 0x86, 0x0f, 0x5d,
1225			    0xcd, 0xad, 0x8a, 0xcb, 0xab, 0x03, 0x1b, 0x14,
1226			    0x97, 0x4c, 0xc4, 0x90, 0x13, 0xc4, 0x98, 0x31 },
1227		.result = { 0x21, 0xce, 0xe5, 0x2e, 0xfd, 0xbc, 0x81, 0x2e,
1228			    0x1d, 0x02, 0x1a, 0x4a, 0xf1, 0xe1, 0xd8, 0xbc,
1229			    0x4d, 0xb3, 0xc4, 0x00, 0xe4, 0xd2, 0xa2, 0xc5,
1230			    0x6a, 0x39, 0x26, 0xdb, 0x4d, 0x99, 0xc6, 0x5b },
1231		.valid = true
1232	},
1233	/* wycheproof - checking for overflow */
1234	{
1235		.private = { 0xc8, 0x17, 0x24, 0x70, 0x40, 0x00, 0xb2, 0x6d,
1236			     0x31, 0x70, 0x3c, 0xc9, 0x7e, 0x3a, 0x37, 0x8d,
1237			     0x56, 0xfa, 0xd8, 0x21, 0x93, 0x61, 0xc8, 0x8c,
1238			     0xca, 0x8b, 0xd7, 0xc5, 0x71, 0x9b, 0x12, 0xb2 },
1239		.public = { 0x53, 0x47, 0xc4, 0x91, 0x33, 0x1a, 0x64, 0xb4,
1240			    0x3d, 0xdc, 0x68, 0x30, 0x34, 0xe6, 0x77, 0xf5,
1241			    0x3d, 0xc3, 0x2b, 0x52, 0xa5, 0x2a, 0x57, 0x7c,
1242			    0x15, 0xa8, 0x3b, 0xf2, 0x98, 0xe9, 0x9f, 0x19 },
1243		.result = { 0x18, 0xcb, 0x89, 0xe4, 0xe2, 0x0c, 0x0c, 0x2b,
1244			    0xd3, 0x24, 0x30, 0x52, 0x45, 0x26, 0x6c, 0x93,
1245			    0x27, 0x69, 0x0b, 0xbe, 0x79, 0xac, 0xb8, 0x8f,
1246			    0x5b, 0x8f, 0xb3, 0xf7, 0x4e, 0xca, 0x3e, 0x52 },
1247		.valid = true
1248	},
1249	/* wycheproof - private key == -1 (mod order) */
1250	{
1251		.private = { 0xa0, 0x23, 0xcd, 0xd0, 0x83, 0xef, 0x5b, 0xb8,
1252			     0x2f, 0x10, 0xd6, 0x2e, 0x59, 0xe1, 0x5a, 0x68,
1253			     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1254			     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50 },
1255		.public = { 0x25, 0x8e, 0x04, 0x52, 0x3b, 0x8d, 0x25, 0x3e,
1256			    0xe6, 0x57, 0x19, 0xfc, 0x69, 0x06, 0xc6, 0x57,
1257			    0x19, 0x2d, 0x80, 0x71, 0x7e, 0xdc, 0x82, 0x8f,
1258			    0xa0, 0xaf, 0x21, 0x68, 0x6e, 0x2f, 0xaa, 0x75 },
1259		.result = { 0x25, 0x8e, 0x04, 0x52, 0x3b, 0x8d, 0x25, 0x3e,
1260			    0xe6, 0x57, 0x19, 0xfc, 0x69, 0x06, 0xc6, 0x57,
1261			    0x19, 0x2d, 0x80, 0x71, 0x7e, 0xdc, 0x82, 0x8f,
1262			    0xa0, 0xaf, 0x21, 0x68, 0x6e, 0x2f, 0xaa, 0x75 },
1263		.valid = true
1264	},
1265	/* wycheproof - private key == 1 (mod order) on twist */
1266	{
1267		.private = { 0x58, 0x08, 0x3d, 0xd2, 0x61, 0xad, 0x91, 0xef,
1268			     0xf9, 0x52, 0x32, 0x2e, 0xc8, 0x24, 0xc6, 0x82,
1269			     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1270			     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f },
1271		.public = { 0x2e, 0xae, 0x5e, 0xc3, 0xdd, 0x49, 0x4e, 0x9f,
1272			    0x2d, 0x37, 0xd2, 0x58, 0xf8, 0x73, 0xa8, 0xe6,
1273			    0xe9, 0xd0, 0xdb, 0xd1, 0xe3, 0x83, 0xef, 0x64,
1274			    0xd9, 0x8b, 0xb9, 0x1b, 0x3e, 0x0b, 0xe0, 0x35 },
1275		.result = { 0x2e, 0xae, 0x5e, 0xc3, 0xdd, 0x49, 0x4e, 0x9f,
1276			    0x2d, 0x37, 0xd2, 0x58, 0xf8, 0x73, 0xa8, 0xe6,
1277			    0xe9, 0xd0, 0xdb, 0xd1, 0xe3, 0x83, 0xef, 0x64,
1278			    0xd9, 0x8b, 0xb9, 0x1b, 0x3e, 0x0b, 0xe0, 0x35 },
1279		.valid = true
1280	}
1281};
1282
1283bool __init curve25519_selftest(void)
1284{
1285	bool success = true, ret, ret2;
1286	size_t i = 0, j;
1287	u8 in[CURVE25519_KEY_SIZE];
1288	u8 out[CURVE25519_KEY_SIZE], out2[CURVE25519_KEY_SIZE],
1289	   out3[CURVE25519_KEY_SIZE];
1290
1291	for (i = 0; i < ARRAY_SIZE(curve25519_test_vectors); ++i) {
1292		memset(out, 0, CURVE25519_KEY_SIZE);
1293		ret = curve25519(out, curve25519_test_vectors[i].private,
1294				 curve25519_test_vectors[i].public);
1295		if (ret != curve25519_test_vectors[i].valid ||
1296		    memcmp(out, curve25519_test_vectors[i].result,
1297			   CURVE25519_KEY_SIZE)) {
1298			pr_err("curve25519 self-test %zu: FAIL\n", i + 1);
1299			success = false;
1300		}
1301	}
1302
1303	for (i = 0; i < 5; ++i) {
1304		get_random_bytes(in, sizeof(in));
1305		ret = curve25519_generate_public(out, in);
1306		ret2 = curve25519(out2, in, (u8[CURVE25519_KEY_SIZE]){ 9 });
1307		curve25519_generic(out3, in, (u8[CURVE25519_KEY_SIZE]){ 9 });
1308		if (ret != ret2 ||
1309		    memcmp(out, out2, CURVE25519_KEY_SIZE) ||
1310		    memcmp(out, out3, CURVE25519_KEY_SIZE)) {
1311			pr_err("curve25519 basepoint self-test %zu: FAIL: input - 0x",
1312			       i + 1);
1313			for (j = CURVE25519_KEY_SIZE; j-- > 0;)
1314				printk(KERN_CONT "%02x", in[j]);
1315			printk(KERN_CONT "\n");
1316			success = false;
1317		}
1318	}
1319
1320	return success;
1321}