Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0 OR MIT
0002 /*
0003  * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
0004  */
0005 
0006 #include <crypto/curve25519.h>
0007 
0008 struct curve25519_test_vector {
0009     u8 private[CURVE25519_KEY_SIZE];
0010     u8 public[CURVE25519_KEY_SIZE];
0011     u8 result[CURVE25519_KEY_SIZE];
0012     bool valid;
0013 };
0014 static const struct curve25519_test_vector curve25519_test_vectors[] __initconst = {
0015     {
0016         .private = { 0x77, 0x07, 0x6d, 0x0a, 0x73, 0x18, 0xa5, 0x7d,
0017                  0x3c, 0x16, 0xc1, 0x72, 0x51, 0xb2, 0x66, 0x45,
0018                  0xdf, 0x4c, 0x2f, 0x87, 0xeb, 0xc0, 0x99, 0x2a,
0019                  0xb1, 0x77, 0xfb, 0xa5, 0x1d, 0xb9, 0x2c, 0x2a },
0020         .public = { 0xde, 0x9e, 0xdb, 0x7d, 0x7b, 0x7d, 0xc1, 0xb4,
0021                 0xd3, 0x5b, 0x61, 0xc2, 0xec, 0xe4, 0x35, 0x37,
0022                 0x3f, 0x83, 0x43, 0xc8, 0x5b, 0x78, 0x67, 0x4d,
0023                 0xad, 0xfc, 0x7e, 0x14, 0x6f, 0x88, 0x2b, 0x4f },
0024         .result = { 0x4a, 0x5d, 0x9d, 0x5b, 0xa4, 0xce, 0x2d, 0xe1,
0025                 0x72, 0x8e, 0x3b, 0xf4, 0x80, 0x35, 0x0f, 0x25,
0026                 0xe0, 0x7e, 0x21, 0xc9, 0x47, 0xd1, 0x9e, 0x33,
0027                 0x76, 0xf0, 0x9b, 0x3c, 0x1e, 0x16, 0x17, 0x42 },
0028         .valid = true
0029     },
0030     {
0031         .private = { 0x5d, 0xab, 0x08, 0x7e, 0x62, 0x4a, 0x8a, 0x4b,
0032                  0x79, 0xe1, 0x7f, 0x8b, 0x83, 0x80, 0x0e, 0xe6,
0033                  0x6f, 0x3b, 0xb1, 0x29, 0x26, 0x18, 0xb6, 0xfd,
0034                  0x1c, 0x2f, 0x8b, 0x27, 0xff, 0x88, 0xe0, 0xeb },
0035         .public = { 0x85, 0x20, 0xf0, 0x09, 0x89, 0x30, 0xa7, 0x54,
0036                 0x74, 0x8b, 0x7d, 0xdc, 0xb4, 0x3e, 0xf7, 0x5a,
0037                 0x0d, 0xbf, 0x3a, 0x0d, 0x26, 0x38, 0x1a, 0xf4,
0038                 0xeb, 0xa4, 0xa9, 0x8e, 0xaa, 0x9b, 0x4e, 0x6a },
0039         .result = { 0x4a, 0x5d, 0x9d, 0x5b, 0xa4, 0xce, 0x2d, 0xe1,
0040                 0x72, 0x8e, 0x3b, 0xf4, 0x80, 0x35, 0x0f, 0x25,
0041                 0xe0, 0x7e, 0x21, 0xc9, 0x47, 0xd1, 0x9e, 0x33,
0042                 0x76, 0xf0, 0x9b, 0x3c, 0x1e, 0x16, 0x17, 0x42 },
0043         .valid = true
0044     },
0045     {
0046         .private = { 1 },
0047         .public = { 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0048                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0049                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0050                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
0051         .result = { 0x3c, 0x77, 0x77, 0xca, 0xf9, 0x97, 0xb2, 0x64,
0052                 0x41, 0x60, 0x77, 0x66, 0x5b, 0x4e, 0x22, 0x9d,
0053                 0x0b, 0x95, 0x48, 0xdc, 0x0c, 0xd8, 0x19, 0x98,
0054                 0xdd, 0xcd, 0xc5, 0xc8, 0x53, 0x3c, 0x79, 0x7f },
0055         .valid = true
0056     },
0057     {
0058         .private = { 1 },
0059         .public = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0060                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0061                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0062                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
0063         .result = { 0xb3, 0x2d, 0x13, 0x62, 0xc2, 0x48, 0xd6, 0x2f,
0064                 0xe6, 0x26, 0x19, 0xcf, 0xf0, 0x4d, 0xd4, 0x3d,
0065                 0xb7, 0x3f, 0xfc, 0x1b, 0x63, 0x08, 0xed, 0xe3,
0066                 0x0b, 0x78, 0xd8, 0x73, 0x80, 0xf1, 0xe8, 0x34 },
0067         .valid = true
0068     },
0069     {
0070         .private = { 0xa5, 0x46, 0xe3, 0x6b, 0xf0, 0x52, 0x7c, 0x9d,
0071                  0x3b, 0x16, 0x15, 0x4b, 0x82, 0x46, 0x5e, 0xdd,
0072                  0x62, 0x14, 0x4c, 0x0a, 0xc1, 0xfc, 0x5a, 0x18,
0073                  0x50, 0x6a, 0x22, 0x44, 0xba, 0x44, 0x9a, 0xc4 },
0074         .public = { 0xe6, 0xdb, 0x68, 0x67, 0x58, 0x30, 0x30, 0xdb,
0075                 0x35, 0x94, 0xc1, 0xa4, 0x24, 0xb1, 0x5f, 0x7c,
0076                 0x72, 0x66, 0x24, 0xec, 0x26, 0xb3, 0x35, 0x3b,
0077                 0x10, 0xa9, 0x03, 0xa6, 0xd0, 0xab, 0x1c, 0x4c },
0078         .result = { 0xc3, 0xda, 0x55, 0x37, 0x9d, 0xe9, 0xc6, 0x90,
0079                 0x8e, 0x94, 0xea, 0x4d, 0xf2, 0x8d, 0x08, 0x4f,
0080                 0x32, 0xec, 0xcf, 0x03, 0x49, 0x1c, 0x71, 0xf7,
0081                 0x54, 0xb4, 0x07, 0x55, 0x77, 0xa2, 0x85, 0x52 },
0082         .valid = true
0083     },
0084     {
0085         .private = { 1, 2, 3, 4 },
0086         .public = { 0 },
0087         .result = { 0 },
0088         .valid = false
0089     },
0090     {
0091         .private = { 2, 4, 6, 8 },
0092         .public = { 0xe0, 0xeb, 0x7a, 0x7c, 0x3b, 0x41, 0xb8, 0xae,
0093                 0x16, 0x56, 0xe3, 0xfa, 0xf1, 0x9f, 0xc4, 0x6a,
0094                 0xda, 0x09, 0x8d, 0xeb, 0x9c, 0x32, 0xb1, 0xfd,
0095                 0x86, 0x62, 0x05, 0x16, 0x5f, 0x49, 0xb8 },
0096         .result = { 0 },
0097         .valid = false
0098     },
0099     {
0100         .private = { 0xff, 0xff, 0xff, 0xff, 0x0a, 0xff, 0xff, 0xff,
0101                  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0102                  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0103                  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
0104         .public = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0105                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0106                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0107                 0xff, 0xff, 0xff, 0xff, 0x0a, 0x00, 0xfb, 0x9f },
0108         .result = { 0x77, 0x52, 0xb6, 0x18, 0xc1, 0x2d, 0x48, 0xd2,
0109                 0xc6, 0x93, 0x46, 0x83, 0x81, 0x7c, 0xc6, 0x57,
0110                 0xf3, 0x31, 0x03, 0x19, 0x49, 0x48, 0x20, 0x05,
0111                 0x42, 0x2b, 0x4e, 0xae, 0x8d, 0x1d, 0x43, 0x23 },
0112         .valid = true
0113     },
0114     {
0115         .private = { 0x8e, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0116                  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0117                  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0118                  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
0119         .public = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0120                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0121                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0122                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8e, 0x06 },
0123         .result = { 0x5a, 0xdf, 0xaa, 0x25, 0x86, 0x8e, 0x32, 0x3d,
0124                 0xae, 0x49, 0x62, 0xc1, 0x01, 0x5c, 0xb3, 0x12,
0125                 0xe1, 0xc5, 0xc7, 0x9e, 0x95, 0x3f, 0x03, 0x99,
0126                 0xb0, 0xba, 0x16, 0x22, 0xf3, 0xb6, 0xf7, 0x0c },
0127         .valid = true
0128     },
0129     /* wycheproof - normal case */
0130     {
0131         .private = { 0x48, 0x52, 0x83, 0x4d, 0x9d, 0x6b, 0x77, 0xda,
0132                  0xde, 0xab, 0xaa, 0xf2, 0xe1, 0x1d, 0xca, 0x66,
0133                  0xd1, 0x9f, 0xe7, 0x49, 0x93, 0xa7, 0xbe, 0xc3,
0134                  0x6c, 0x6e, 0x16, 0xa0, 0x98, 0x3f, 0xea, 0xba },
0135         .public = { 0x9c, 0x64, 0x7d, 0x9a, 0xe5, 0x89, 0xb9, 0xf5,
0136                 0x8f, 0xdc, 0x3c, 0xa4, 0x94, 0x7e, 0xfb, 0xc9,
0137                 0x15, 0xc4, 0xb2, 0xe0, 0x8e, 0x74, 0x4a, 0x0e,
0138                 0xdf, 0x46, 0x9d, 0xac, 0x59, 0xc8, 0xf8, 0x5a },
0139         .result = { 0x87, 0xb7, 0xf2, 0x12, 0xb6, 0x27, 0xf7, 0xa5,
0140                 0x4c, 0xa5, 0xe0, 0xbc, 0xda, 0xdd, 0xd5, 0x38,
0141                 0x9d, 0x9d, 0xe6, 0x15, 0x6c, 0xdb, 0xcf, 0x8e,
0142                 0xbe, 0x14, 0xff, 0xbc, 0xfb, 0x43, 0x65, 0x51 },
0143         .valid = true
0144     },
0145     /* wycheproof - public key on twist */
0146     {
0147         .private = { 0x58, 0x8c, 0x06, 0x1a, 0x50, 0x80, 0x4a, 0xc4,
0148                  0x88, 0xad, 0x77, 0x4a, 0xc7, 0x16, 0xc3, 0xf5,
0149                  0xba, 0x71, 0x4b, 0x27, 0x12, 0xe0, 0x48, 0x49,
0150                  0x13, 0x79, 0xa5, 0x00, 0x21, 0x19, 0x98, 0xa8 },
0151         .public = { 0x63, 0xaa, 0x40, 0xc6, 0xe3, 0x83, 0x46, 0xc5,
0152                 0xca, 0xf2, 0x3a, 0x6d, 0xf0, 0xa5, 0xe6, 0xc8,
0153                 0x08, 0x89, 0xa0, 0x86, 0x47, 0xe5, 0x51, 0xb3,
0154                 0x56, 0x34, 0x49, 0xbe, 0xfc, 0xfc, 0x97, 0x33 },
0155         .result = { 0xb1, 0xa7, 0x07, 0x51, 0x94, 0x95, 0xff, 0xff,
0156                 0xb2, 0x98, 0xff, 0x94, 0x17, 0x16, 0xb0, 0x6d,
0157                 0xfa, 0xb8, 0x7c, 0xf8, 0xd9, 0x11, 0x23, 0xfe,
0158                 0x2b, 0xe9, 0xa2, 0x33, 0xdd, 0xa2, 0x22, 0x12 },
0159         .valid = true
0160     },
0161     /* wycheproof - public key on twist */
0162     {
0163         .private = { 0xb0, 0x5b, 0xfd, 0x32, 0xe5, 0x53, 0x25, 0xd9,
0164                  0xfd, 0x64, 0x8c, 0xb3, 0x02, 0x84, 0x80, 0x39,
0165                  0x00, 0x0b, 0x39, 0x0e, 0x44, 0xd5, 0x21, 0xe5,
0166                  0x8a, 0xab, 0x3b, 0x29, 0xa6, 0x96, 0x0b, 0xa8 },
0167         .public = { 0x0f, 0x83, 0xc3, 0x6f, 0xde, 0xd9, 0xd3, 0x2f,
0168                 0xad, 0xf4, 0xef, 0xa3, 0xae, 0x93, 0xa9, 0x0b,
0169                 0xb5, 0xcf, 0xa6, 0x68, 0x93, 0xbc, 0x41, 0x2c,
0170                 0x43, 0xfa, 0x72, 0x87, 0xdb, 0xb9, 0x97, 0x79 },
0171         .result = { 0x67, 0xdd, 0x4a, 0x6e, 0x16, 0x55, 0x33, 0x53,
0172                 0x4c, 0x0e, 0x3f, 0x17, 0x2e, 0x4a, 0xb8, 0x57,
0173                 0x6b, 0xca, 0x92, 0x3a, 0x5f, 0x07, 0xb2, 0xc0,
0174                 0x69, 0xb4, 0xc3, 0x10, 0xff, 0x2e, 0x93, 0x5b },
0175         .valid = true
0176     },
0177     /* wycheproof - public key on twist */
0178     {
0179         .private = { 0x70, 0xe3, 0x4b, 0xcb, 0xe1, 0xf4, 0x7f, 0xbc,
0180                  0x0f, 0xdd, 0xfd, 0x7c, 0x1e, 0x1a, 0xa5, 0x3d,
0181                  0x57, 0xbf, 0xe0, 0xf6, 0x6d, 0x24, 0x30, 0x67,
0182                  0xb4, 0x24, 0xbb, 0x62, 0x10, 0xbe, 0xd1, 0x9c },
0183         .public = { 0x0b, 0x82, 0x11, 0xa2, 0xb6, 0x04, 0x90, 0x97,
0184                 0xf6, 0x87, 0x1c, 0x6c, 0x05, 0x2d, 0x3c, 0x5f,
0185                 0xc1, 0xba, 0x17, 0xda, 0x9e, 0x32, 0xae, 0x45,
0186                 0x84, 0x03, 0xb0, 0x5b, 0xb2, 0x83, 0x09, 0x2a },
0187         .result = { 0x4a, 0x06, 0x38, 0xcf, 0xaa, 0x9e, 0xf1, 0x93,
0188                 0x3b, 0x47, 0xf8, 0x93, 0x92, 0x96, 0xa6, 0xb2,
0189                 0x5b, 0xe5, 0x41, 0xef, 0x7f, 0x70, 0xe8, 0x44,
0190                 0xc0, 0xbc, 0xc0, 0x0b, 0x13, 0x4d, 0xe6, 0x4a },
0191         .valid = true
0192     },
0193     /* wycheproof - public key on twist */
0194     {
0195         .private = { 0x68, 0xc1, 0xf3, 0xa6, 0x53, 0xa4, 0xcd, 0xb1,
0196                  0xd3, 0x7b, 0xba, 0x94, 0x73, 0x8f, 0x8b, 0x95,
0197                  0x7a, 0x57, 0xbe, 0xb2, 0x4d, 0x64, 0x6e, 0x99,
0198                  0x4d, 0xc2, 0x9a, 0x27, 0x6a, 0xad, 0x45, 0x8d },
0199         .public = { 0x34, 0x3a, 0xc2, 0x0a, 0x3b, 0x9c, 0x6a, 0x27,
0200                 0xb1, 0x00, 0x81, 0x76, 0x50, 0x9a, 0xd3, 0x07,
0201                 0x35, 0x85, 0x6e, 0xc1, 0xc8, 0xd8, 0xfc, 0xae,
0202                 0x13, 0x91, 0x2d, 0x08, 0xd1, 0x52, 0xf4, 0x6c },
0203         .result = { 0x39, 0x94, 0x91, 0xfc, 0xe8, 0xdf, 0xab, 0x73,
0204                 0xb4, 0xf9, 0xf6, 0x11, 0xde, 0x8e, 0xa0, 0xb2,
0205                 0x7b, 0x28, 0xf8, 0x59, 0x94, 0x25, 0x0b, 0x0f,
0206                 0x47, 0x5d, 0x58, 0x5d, 0x04, 0x2a, 0xc2, 0x07 },
0207         .valid = true
0208     },
0209     /* wycheproof - public key on twist */
0210     {
0211         .private = { 0xd8, 0x77, 0xb2, 0x6d, 0x06, 0xdf, 0xf9, 0xd9,
0212                  0xf7, 0xfd, 0x4c, 0x5b, 0x37, 0x69, 0xf8, 0xcd,
0213                  0xd5, 0xb3, 0x05, 0x16, 0xa5, 0xab, 0x80, 0x6b,
0214                  0xe3, 0x24, 0xff, 0x3e, 0xb6, 0x9e, 0xa0, 0xb2 },
0215         .public = { 0xfa, 0x69, 0x5f, 0xc7, 0xbe, 0x8d, 0x1b, 0xe5,
0216                 0xbf, 0x70, 0x48, 0x98, 0xf3, 0x88, 0xc4, 0x52,
0217                 0xba, 0xfd, 0xd3, 0xb8, 0xea, 0xe8, 0x05, 0xf8,
0218                 0x68, 0x1a, 0x8d, 0x15, 0xc2, 0xd4, 0xe1, 0x42 },
0219         .result = { 0x2c, 0x4f, 0xe1, 0x1d, 0x49, 0x0a, 0x53, 0x86,
0220                 0x17, 0x76, 0xb1, 0x3b, 0x43, 0x54, 0xab, 0xd4,
0221                 0xcf, 0x5a, 0x97, 0x69, 0x9d, 0xb6, 0xe6, 0xc6,
0222                 0x8c, 0x16, 0x26, 0xd0, 0x76, 0x62, 0xf7, 0x58 },
0223         .valid = true
0224     },
0225     /* wycheproof - public key = 0 */
0226     {
0227         .private = { 0x20, 0x74, 0x94, 0x03, 0x8f, 0x2b, 0xb8, 0x11,
0228                  0xd4, 0x78, 0x05, 0xbc, 0xdf, 0x04, 0xa2, 0xac,
0229                  0x58, 0x5a, 0xda, 0x7f, 0x2f, 0x23, 0x38, 0x9b,
0230                  0xfd, 0x46, 0x58, 0xf9, 0xdd, 0xd4, 0xde, 0xbc },
0231         .public = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0232                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0233                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0234                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
0235         .result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0236                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0237                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0238                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
0239         .valid = false
0240     },
0241     /* wycheproof - public key = 1 */
0242     {
0243         .private = { 0x20, 0x2e, 0x89, 0x72, 0xb6, 0x1c, 0x7e, 0x61,
0244                  0x93, 0x0e, 0xb9, 0x45, 0x0b, 0x50, 0x70, 0xea,
0245                  0xe1, 0xc6, 0x70, 0x47, 0x56, 0x85, 0x54, 0x1f,
0246                  0x04, 0x76, 0x21, 0x7e, 0x48, 0x18, 0xcf, 0xab },
0247         .public = { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0248                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0249                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0250                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
0251         .result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0252                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0253                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0254                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
0255         .valid = false
0256     },
0257     /* wycheproof - edge case on twist */
0258     {
0259         .private = { 0x38, 0xdd, 0xe9, 0xf3, 0xe7, 0xb7, 0x99, 0x04,
0260                  0x5f, 0x9a, 0xc3, 0x79, 0x3d, 0x4a, 0x92, 0x77,
0261                  0xda, 0xde, 0xad, 0xc4, 0x1b, 0xec, 0x02, 0x90,
0262                  0xf8, 0x1f, 0x74, 0x4f, 0x73, 0x77, 0x5f, 0x84 },
0263         .public = { 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0264                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0265                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0266                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
0267         .result = { 0x9a, 0x2c, 0xfe, 0x84, 0xff, 0x9c, 0x4a, 0x97,
0268                 0x39, 0x62, 0x5c, 0xae, 0x4a, 0x3b, 0x82, 0xa9,
0269                 0x06, 0x87, 0x7a, 0x44, 0x19, 0x46, 0xf8, 0xd7,
0270                 0xb3, 0xd7, 0x95, 0xfe, 0x8f, 0x5d, 0x16, 0x39 },
0271         .valid = true
0272     },
0273     /* wycheproof - edge case on twist */
0274     {
0275         .private = { 0x98, 0x57, 0xa9, 0x14, 0xe3, 0xc2, 0x90, 0x36,
0276                  0xfd, 0x9a, 0x44, 0x2b, 0xa5, 0x26, 0xb5, 0xcd,
0277                  0xcd, 0xf2, 0x82, 0x16, 0x15, 0x3e, 0x63, 0x6c,
0278                  0x10, 0x67, 0x7a, 0xca, 0xb6, 0xbd, 0x6a, 0xa5 },
0279         .public = { 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0280                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0281                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0282                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
0283         .result = { 0x4d, 0xa4, 0xe0, 0xaa, 0x07, 0x2c, 0x23, 0x2e,
0284                 0xe2, 0xf0, 0xfa, 0x4e, 0x51, 0x9a, 0xe5, 0x0b,
0285                 0x52, 0xc1, 0xed, 0xd0, 0x8a, 0x53, 0x4d, 0x4e,
0286                 0xf3, 0x46, 0xc2, 0xe1, 0x06, 0xd2, 0x1d, 0x60 },
0287         .valid = true
0288     },
0289     /* wycheproof - edge case on twist */
0290     {
0291         .private = { 0x48, 0xe2, 0x13, 0x0d, 0x72, 0x33, 0x05, 0xed,
0292                  0x05, 0xe6, 0xe5, 0x89, 0x4d, 0x39, 0x8a, 0x5e,
0293                  0x33, 0x36, 0x7a, 0x8c, 0x6a, 0xac, 0x8f, 0xcd,
0294                  0xf0, 0xa8, 0x8e, 0x4b, 0x42, 0x82, 0x0d, 0xb7 },
0295         .public = { 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0xf8, 0xff,
0296                 0xff, 0x1f, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff,
0297                 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x07, 0x00,
0298                 0x00, 0xf0, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00 },
0299         .result = { 0x9e, 0xd1, 0x0c, 0x53, 0x74, 0x7f, 0x64, 0x7f,
0300                 0x82, 0xf4, 0x51, 0x25, 0xd3, 0xde, 0x15, 0xa1,
0301                 0xe6, 0xb8, 0x24, 0x49, 0x6a, 0xb4, 0x04, 0x10,
0302                 0xff, 0xcc, 0x3c, 0xfe, 0x95, 0x76, 0x0f, 0x3b },
0303         .valid = true
0304     },
0305     /* wycheproof - edge case on twist */
0306     {
0307         .private = { 0x28, 0xf4, 0x10, 0x11, 0x69, 0x18, 0x51, 0xb3,
0308                  0xa6, 0x2b, 0x64, 0x15, 0x53, 0xb3, 0x0d, 0x0d,
0309                  0xfd, 0xdc, 0xb8, 0xff, 0xfc, 0xf5, 0x37, 0x00,
0310                  0xa7, 0xbe, 0x2f, 0x6a, 0x87, 0x2e, 0x9f, 0xb0 },
0311         .public = { 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x07, 0x00,
0312                 0x00, 0xe0, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00,
0313                 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0xf8, 0xff,
0314                 0xff, 0x0f, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x7f },
0315         .result = { 0xcf, 0x72, 0xb4, 0xaa, 0x6a, 0xa1, 0xc9, 0xf8,
0316                 0x94, 0xf4, 0x16, 0x5b, 0x86, 0x10, 0x9a, 0xa4,
0317                 0x68, 0x51, 0x76, 0x48, 0xe1, 0xf0, 0xcc, 0x70,
0318                 0xe1, 0xab, 0x08, 0x46, 0x01, 0x76, 0x50, 0x6b },
0319         .valid = true
0320     },
0321     /* wycheproof - edge case on twist */
0322     {
0323         .private = { 0x18, 0xa9, 0x3b, 0x64, 0x99, 0xb9, 0xf6, 0xb3,
0324                  0x22, 0x5c, 0xa0, 0x2f, 0xef, 0x41, 0x0e, 0x0a,
0325                  0xde, 0xc2, 0x35, 0x32, 0x32, 0x1d, 0x2d, 0x8e,
0326                  0xf1, 0xa6, 0xd6, 0x02, 0xa8, 0xc6, 0x5b, 0x83 },
0327         .public = { 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0328                 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0329                 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0330                 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x7f },
0331         .result = { 0x5d, 0x50, 0xb6, 0x28, 0x36, 0xbb, 0x69, 0x57,
0332                 0x94, 0x10, 0x38, 0x6c, 0xf7, 0xbb, 0x81, 0x1c,
0333                 0x14, 0xbf, 0x85, 0xb1, 0xc7, 0xb1, 0x7e, 0x59,
0334                 0x24, 0xc7, 0xff, 0xea, 0x91, 0xef, 0x9e, 0x12 },
0335         .valid = true
0336     },
0337     /* wycheproof - edge case on twist */
0338     {
0339         .private = { 0xc0, 0x1d, 0x13, 0x05, 0xa1, 0x33, 0x8a, 0x1f,
0340                  0xca, 0xc2, 0xba, 0x7e, 0x2e, 0x03, 0x2b, 0x42,
0341                  0x7e, 0x0b, 0x04, 0x90, 0x31, 0x65, 0xac, 0xa9,
0342                  0x57, 0xd8, 0xd0, 0x55, 0x3d, 0x87, 0x17, 0xb0 },
0343         .public = { 0xea, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0344                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0345                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0346                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
0347         .result = { 0x19, 0x23, 0x0e, 0xb1, 0x48, 0xd5, 0xd6, 0x7c,
0348                 0x3c, 0x22, 0xab, 0x1d, 0xae, 0xff, 0x80, 0xa5,
0349                 0x7e, 0xae, 0x42, 0x65, 0xce, 0x28, 0x72, 0x65,
0350                 0x7b, 0x2c, 0x80, 0x99, 0xfc, 0x69, 0x8e, 0x50 },
0351         .valid = true
0352     },
0353     /* wycheproof - edge case for public key */
0354     {
0355         .private = { 0x38, 0x6f, 0x7f, 0x16, 0xc5, 0x07, 0x31, 0xd6,
0356                  0x4f, 0x82, 0xe6, 0xa1, 0x70, 0xb1, 0x42, 0xa4,
0357                  0xe3, 0x4f, 0x31, 0xfd, 0x77, 0x68, 0xfc, 0xb8,
0358                  0x90, 0x29, 0x25, 0xe7, 0xd1, 0xe2, 0x1a, 0xbe },
0359         .public = { 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0360                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0361                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0362                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
0363         .result = { 0x0f, 0xca, 0xb5, 0xd8, 0x42, 0xa0, 0x78, 0xd7,
0364                 0xa7, 0x1f, 0xc5, 0x9b, 0x57, 0xbf, 0xb4, 0xca,
0365                 0x0b, 0xe6, 0x87, 0x3b, 0x49, 0xdc, 0xdb, 0x9f,
0366                 0x44, 0xe1, 0x4a, 0xe8, 0xfb, 0xdf, 0xa5, 0x42 },
0367         .valid = true
0368     },
0369     /* wycheproof - edge case for public key */
0370     {
0371         .private = { 0xe0, 0x23, 0xa2, 0x89, 0xbd, 0x5e, 0x90, 0xfa,
0372                  0x28, 0x04, 0xdd, 0xc0, 0x19, 0xa0, 0x5e, 0xf3,
0373                  0xe7, 0x9d, 0x43, 0x4b, 0xb6, 0xea, 0x2f, 0x52,
0374                  0x2e, 0xcb, 0x64, 0x3a, 0x75, 0x29, 0x6e, 0x95 },
0375         .public = { 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0376                 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0377                 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0378                 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 },
0379         .result = { 0x54, 0xce, 0x8f, 0x22, 0x75, 0xc0, 0x77, 0xe3,
0380                 0xb1, 0x30, 0x6a, 0x39, 0x39, 0xc5, 0xe0, 0x3e,
0381                 0xef, 0x6b, 0xbb, 0x88, 0x06, 0x05, 0x44, 0x75,
0382                 0x8d, 0x9f, 0xef, 0x59, 0xb0, 0xbc, 0x3e, 0x4f },
0383         .valid = true
0384     },
0385     /* wycheproof - edge case for public key */
0386     {
0387         .private = { 0x68, 0xf0, 0x10, 0xd6, 0x2e, 0xe8, 0xd9, 0x26,
0388                  0x05, 0x3a, 0x36, 0x1c, 0x3a, 0x75, 0xc6, 0xea,
0389                  0x4e, 0xbd, 0xc8, 0x60, 0x6a, 0xb2, 0x85, 0x00,
0390                  0x3a, 0x6f, 0x8f, 0x40, 0x76, 0xb0, 0x1e, 0x83 },
0391         .public = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0392                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0393                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0394                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03 },
0395         .result = { 0xf1, 0x36, 0x77, 0x5c, 0x5b, 0xeb, 0x0a, 0xf8,
0396                 0x11, 0x0a, 0xf1, 0x0b, 0x20, 0x37, 0x23, 0x32,
0397                 0x04, 0x3c, 0xab, 0x75, 0x24, 0x19, 0x67, 0x87,
0398                 0x75, 0xa2, 0x23, 0xdf, 0x57, 0xc9, 0xd3, 0x0d },
0399         .valid = true
0400     },
0401     /* wycheproof - edge case for public key */
0402     {
0403         .private = { 0x58, 0xeb, 0xcb, 0x35, 0xb0, 0xf8, 0x84, 0x5c,
0404                  0xaf, 0x1e, 0xc6, 0x30, 0xf9, 0x65, 0x76, 0xb6,
0405                  0x2c, 0x4b, 0x7b, 0x6c, 0x36, 0xb2, 0x9d, 0xeb,
0406                  0x2c, 0xb0, 0x08, 0x46, 0x51, 0x75, 0x5c, 0x96 },
0407         .public = { 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xfb, 0xff,
0408                 0xff, 0xdf, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff,
0409                 0xfe, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xf7, 0xff,
0410                 0xff, 0xf7, 0xff, 0xff, 0xbf, 0xff, 0xff, 0x3f },
0411         .result = { 0xbf, 0x9a, 0xff, 0xd0, 0x6b, 0x84, 0x40, 0x85,
0412                 0x58, 0x64, 0x60, 0x96, 0x2e, 0xf2, 0x14, 0x6f,
0413                 0xf3, 0xd4, 0x53, 0x3d, 0x94, 0x44, 0xaa, 0xb0,
0414                 0x06, 0xeb, 0x88, 0xcc, 0x30, 0x54, 0x40, 0x7d },
0415         .valid = true
0416     },
0417     /* wycheproof - edge case for public key */
0418     {
0419         .private = { 0x18, 0x8c, 0x4b, 0xc5, 0xb9, 0xc4, 0x4b, 0x38,
0420                  0xbb, 0x65, 0x8b, 0x9b, 0x2a, 0xe8, 0x2d, 0x5b,
0421                  0x01, 0x01, 0x5e, 0x09, 0x31, 0x84, 0xb1, 0x7c,
0422                  0xb7, 0x86, 0x35, 0x03, 0xa7, 0x83, 0xe1, 0xbb },
0423         .public = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0424                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0425                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0426                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f },
0427         .result = { 0xd4, 0x80, 0xde, 0x04, 0xf6, 0x99, 0xcb, 0x3b,
0428                 0xe0, 0x68, 0x4a, 0x9c, 0xc2, 0xe3, 0x12, 0x81,
0429                 0xea, 0x0b, 0xc5, 0xa9, 0xdc, 0xc1, 0x57, 0xd3,
0430                 0xd2, 0x01, 0x58, 0xd4, 0x6c, 0xa5, 0x24, 0x6d },
0431         .valid = true
0432     },
0433     /* wycheproof - edge case for public key */
0434     {
0435         .private = { 0xe0, 0x6c, 0x11, 0xbb, 0x2e, 0x13, 0xce, 0x3d,
0436                  0xc7, 0x67, 0x3f, 0x67, 0xf5, 0x48, 0x22, 0x42,
0437                  0x90, 0x94, 0x23, 0xa9, 0xae, 0x95, 0xee, 0x98,
0438                  0x6a, 0x98, 0x8d, 0x98, 0xfa, 0xee, 0x23, 0xa2 },
0439         .public = { 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0x7f,
0440                 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0x7f,
0441                 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0x7f,
0442                 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0x7f },
0443         .result = { 0x4c, 0x44, 0x01, 0xcc, 0xe6, 0xb5, 0x1e, 0x4c,
0444                 0xb1, 0x8f, 0x27, 0x90, 0x24, 0x6c, 0x9b, 0xf9,
0445                 0x14, 0xdb, 0x66, 0x77, 0x50, 0xa1, 0xcb, 0x89,
0446                 0x06, 0x90, 0x92, 0xaf, 0x07, 0x29, 0x22, 0x76 },
0447         .valid = true
0448     },
0449     /* wycheproof - edge case for public key */
0450     {
0451         .private = { 0xc0, 0x65, 0x8c, 0x46, 0xdd, 0xe1, 0x81, 0x29,
0452                  0x29, 0x38, 0x77, 0x53, 0x5b, 0x11, 0x62, 0xb6,
0453                  0xf9, 0xf5, 0x41, 0x4a, 0x23, 0xcf, 0x4d, 0x2c,
0454                  0xbc, 0x14, 0x0a, 0x4d, 0x99, 0xda, 0x2b, 0x8f },
0455         .public = { 0xeb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0456                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0457                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0458                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
0459         .result = { 0x57, 0x8b, 0xa8, 0xcc, 0x2d, 0xbd, 0xc5, 0x75,
0460                 0xaf, 0xcf, 0x9d, 0xf2, 0xb3, 0xee, 0x61, 0x89,
0461                 0xf5, 0x33, 0x7d, 0x68, 0x54, 0xc7, 0x9b, 0x4c,
0462                 0xe1, 0x65, 0xea, 0x12, 0x29, 0x3b, 0x3a, 0x0f },
0463         .valid = true
0464     },
0465     /* wycheproof - public key with low order */
0466     {
0467         .private = { 0x10, 0x25, 0x5c, 0x92, 0x30, 0xa9, 0x7a, 0x30,
0468                  0xa4, 0x58, 0xca, 0x28, 0x4a, 0x62, 0x96, 0x69,
0469                  0x29, 0x3a, 0x31, 0x89, 0x0c, 0xda, 0x9d, 0x14,
0470                  0x7f, 0xeb, 0xc7, 0xd1, 0xe2, 0x2d, 0x6b, 0xb1 },
0471         .public = { 0xe0, 0xeb, 0x7a, 0x7c, 0x3b, 0x41, 0xb8, 0xae,
0472                 0x16, 0x56, 0xe3, 0xfa, 0xf1, 0x9f, 0xc4, 0x6a,
0473                 0xda, 0x09, 0x8d, 0xeb, 0x9c, 0x32, 0xb1, 0xfd,
0474                 0x86, 0x62, 0x05, 0x16, 0x5f, 0x49, 0xb8, 0x00 },
0475         .result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0476                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0477                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0478                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
0479         .valid = false
0480     },
0481     /* wycheproof - public key with low order */
0482     {
0483         .private = { 0x78, 0xf1, 0xe8, 0xed, 0xf1, 0x44, 0x81, 0xb3,
0484                  0x89, 0x44, 0x8d, 0xac, 0x8f, 0x59, 0xc7, 0x0b,
0485                  0x03, 0x8e, 0x7c, 0xf9, 0x2e, 0xf2, 0xc7, 0xef,
0486                  0xf5, 0x7a, 0x72, 0x46, 0x6e, 0x11, 0x52, 0x96 },
0487         .public = { 0x5f, 0x9c, 0x95, 0xbc, 0xa3, 0x50, 0x8c, 0x24,
0488                 0xb1, 0xd0, 0xb1, 0x55, 0x9c, 0x83, 0xef, 0x5b,
0489                 0x04, 0x44, 0x5c, 0xc4, 0x58, 0x1c, 0x8e, 0x86,
0490                 0xd8, 0x22, 0x4e, 0xdd, 0xd0, 0x9f, 0x11, 0x57 },
0491         .result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0492                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0493                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0494                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
0495         .valid = false
0496     },
0497     /* wycheproof - public key with low order */
0498     {
0499         .private = { 0xa0, 0xa0, 0x5a, 0x3e, 0x8f, 0x9f, 0x44, 0x20,
0500                  0x4d, 0x5f, 0x80, 0x59, 0xa9, 0x4a, 0xc7, 0xdf,
0501                  0xc3, 0x9a, 0x49, 0xac, 0x01, 0x6d, 0xd7, 0x43,
0502                  0xdb, 0xfa, 0x43, 0xc5, 0xd6, 0x71, 0xfd, 0x88 },
0503         .public = { 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0504                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0505                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0506                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
0507         .result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0508                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0509                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0510                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
0511         .valid = false
0512     },
0513     /* wycheproof - public key with low order */
0514     {
0515         .private = { 0xd0, 0xdb, 0xb3, 0xed, 0x19, 0x06, 0x66, 0x3f,
0516                  0x15, 0x42, 0x0a, 0xf3, 0x1f, 0x4e, 0xaf, 0x65,
0517                  0x09, 0xd9, 0xa9, 0x94, 0x97, 0x23, 0x50, 0x06,
0518                  0x05, 0xad, 0x7c, 0x1c, 0x6e, 0x74, 0x50, 0xa9 },
0519         .public = { 0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0520                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0521                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0522                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
0523         .result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0524                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0525                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0526                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
0527         .valid = false
0528     },
0529     /* wycheproof - public key with low order */
0530     {
0531         .private = { 0xc0, 0xb1, 0xd0, 0xeb, 0x22, 0xb2, 0x44, 0xfe,
0532                  0x32, 0x91, 0x14, 0x00, 0x72, 0xcd, 0xd9, 0xd9,
0533                  0x89, 0xb5, 0xf0, 0xec, 0xd9, 0x6c, 0x10, 0x0f,
0534                  0xeb, 0x5b, 0xca, 0x24, 0x1c, 0x1d, 0x9f, 0x8f },
0535         .public = { 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0536                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0537                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0538                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
0539         .result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0540                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0541                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0542                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
0543         .valid = false
0544     },
0545     /* wycheproof - public key with low order */
0546     {
0547         .private = { 0x48, 0x0b, 0xf4, 0x5f, 0x59, 0x49, 0x42, 0xa8,
0548                  0xbc, 0x0f, 0x33, 0x53, 0xc6, 0xe8, 0xb8, 0x85,
0549                  0x3d, 0x77, 0xf3, 0x51, 0xf1, 0xc2, 0xca, 0x6c,
0550                  0x2d, 0x1a, 0xbf, 0x8a, 0x00, 0xb4, 0x22, 0x9c },
0551         .public = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0552                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0553                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0554                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80 },
0555         .result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0556                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0557                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0558                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
0559         .valid = false
0560     },
0561     /* wycheproof - public key with low order */
0562     {
0563         .private = { 0x30, 0xf9, 0x93, 0xfc, 0xf8, 0x51, 0x4f, 0xc8,
0564                  0x9b, 0xd8, 0xdb, 0x14, 0xcd, 0x43, 0xba, 0x0d,
0565                  0x4b, 0x25, 0x30, 0xe7, 0x3c, 0x42, 0x76, 0xa0,
0566                  0x5e, 0x1b, 0x14, 0x5d, 0x42, 0x0c, 0xed, 0xb4 },
0567         .public = { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0568                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0569                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0570                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80 },
0571         .result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0572                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0573                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0574                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
0575         .valid = false
0576     },
0577     /* wycheproof - public key with low order */
0578     {
0579         .private = { 0xc0, 0x49, 0x74, 0xb7, 0x58, 0x38, 0x0e, 0x2a,
0580                  0x5b, 0x5d, 0xf6, 0xeb, 0x09, 0xbb, 0x2f, 0x6b,
0581                  0x34, 0x34, 0xf9, 0x82, 0x72, 0x2a, 0x8e, 0x67,
0582                  0x6d, 0x3d, 0xa2, 0x51, 0xd1, 0xb3, 0xde, 0x83 },
0583         .public = { 0xe0, 0xeb, 0x7a, 0x7c, 0x3b, 0x41, 0xb8, 0xae,
0584                 0x16, 0x56, 0xe3, 0xfa, 0xf1, 0x9f, 0xc4, 0x6a,
0585                 0xda, 0x09, 0x8d, 0xeb, 0x9c, 0x32, 0xb1, 0xfd,
0586                 0x86, 0x62, 0x05, 0x16, 0x5f, 0x49, 0xb8, 0x80 },
0587         .result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0588                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0589                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0590                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
0591         .valid = false
0592     },
0593     /* wycheproof - public key with low order */
0594     {
0595         .private = { 0x50, 0x2a, 0x31, 0x37, 0x3d, 0xb3, 0x24, 0x46,
0596                  0x84, 0x2f, 0xe5, 0xad, 0xd3, 0xe0, 0x24, 0x02,
0597                  0x2e, 0xa5, 0x4f, 0x27, 0x41, 0x82, 0xaf, 0xc3,
0598                  0xd9, 0xf1, 0xbb, 0x3d, 0x39, 0x53, 0x4e, 0xb5 },
0599         .public = { 0x5f, 0x9c, 0x95, 0xbc, 0xa3, 0x50, 0x8c, 0x24,
0600                 0xb1, 0xd0, 0xb1, 0x55, 0x9c, 0x83, 0xef, 0x5b,
0601                 0x04, 0x44, 0x5c, 0xc4, 0x58, 0x1c, 0x8e, 0x86,
0602                 0xd8, 0x22, 0x4e, 0xdd, 0xd0, 0x9f, 0x11, 0xd7 },
0603         .result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0604                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0605                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0606                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
0607         .valid = false
0608     },
0609     /* wycheproof - public key with low order */
0610     {
0611         .private = { 0x90, 0xfa, 0x64, 0x17, 0xb0, 0xe3, 0x70, 0x30,
0612                  0xfd, 0x6e, 0x43, 0xef, 0xf2, 0xab, 0xae, 0xf1,
0613                  0x4c, 0x67, 0x93, 0x11, 0x7a, 0x03, 0x9c, 0xf6,
0614                  0x21, 0x31, 0x8b, 0xa9, 0x0f, 0x4e, 0x98, 0xbe },
0615         .public = { 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0616                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0617                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0618                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
0619         .result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0620                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0621                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0622                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
0623         .valid = false
0624     },
0625     /* wycheproof - public key with low order */
0626     {
0627         .private = { 0x78, 0xad, 0x3f, 0x26, 0x02, 0x7f, 0x1c, 0x9f,
0628                  0xdd, 0x97, 0x5a, 0x16, 0x13, 0xb9, 0x47, 0x77,
0629                  0x9b, 0xad, 0x2c, 0xf2, 0xb7, 0x41, 0xad, 0xe0,
0630                  0x18, 0x40, 0x88, 0x5a, 0x30, 0xbb, 0x97, 0x9c },
0631         .public = { 0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0632                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0633                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0634                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
0635         .result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0636                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0637                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0638                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
0639         .valid = false
0640     },
0641     /* wycheproof - public key with low order */
0642     {
0643         .private = { 0x98, 0xe2, 0x3d, 0xe7, 0xb1, 0xe0, 0x92, 0x6e,
0644                  0xd9, 0xc8, 0x7e, 0x7b, 0x14, 0xba, 0xf5, 0x5f,
0645                  0x49, 0x7a, 0x1d, 0x70, 0x96, 0xf9, 0x39, 0x77,
0646                  0x68, 0x0e, 0x44, 0xdc, 0x1c, 0x7b, 0x7b, 0x8b },
0647         .public = { 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0648                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0649                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0650                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
0651         .result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0652                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0653                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0654                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
0655         .valid = false
0656     },
0657     /* wycheproof - public key >= p */
0658     {
0659         .private = { 0xf0, 0x1e, 0x48, 0xda, 0xfa, 0xc9, 0xd7, 0xbc,
0660                  0xf5, 0x89, 0xcb, 0xc3, 0x82, 0xc8, 0x78, 0xd1,
0661                  0x8b, 0xda, 0x35, 0x50, 0x58, 0x9f, 0xfb, 0x5d,
0662                  0x50, 0xb5, 0x23, 0xbe, 0xbe, 0x32, 0x9d, 0xae },
0663         .public = { 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0664                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0665                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0666                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
0667         .result = { 0xbd, 0x36, 0xa0, 0x79, 0x0e, 0xb8, 0x83, 0x09,
0668                 0x8c, 0x98, 0x8b, 0x21, 0x78, 0x67, 0x73, 0xde,
0669                 0x0b, 0x3a, 0x4d, 0xf1, 0x62, 0x28, 0x2c, 0xf1,
0670                 0x10, 0xde, 0x18, 0xdd, 0x48, 0x4c, 0xe7, 0x4b },
0671         .valid = true
0672     },
0673     /* wycheproof - public key >= p */
0674     {
0675         .private = { 0x28, 0x87, 0x96, 0xbc, 0x5a, 0xff, 0x4b, 0x81,
0676                  0xa3, 0x75, 0x01, 0x75, 0x7b, 0xc0, 0x75, 0x3a,
0677                  0x3c, 0x21, 0x96, 0x47, 0x90, 0xd3, 0x86, 0x99,
0678                  0x30, 0x8d, 0xeb, 0xc1, 0x7a, 0x6e, 0xaf, 0x8d },
0679         .public = { 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0680                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0681                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0682                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
0683         .result = { 0xb4, 0xe0, 0xdd, 0x76, 0xda, 0x7b, 0x07, 0x17,
0684                 0x28, 0xb6, 0x1f, 0x85, 0x67, 0x71, 0xaa, 0x35,
0685                 0x6e, 0x57, 0xed, 0xa7, 0x8a, 0x5b, 0x16, 0x55,
0686                 0xcc, 0x38, 0x20, 0xfb, 0x5f, 0x85, 0x4c, 0x5c },
0687         .valid = true
0688     },
0689     /* wycheproof - public key >= p */
0690     {
0691         .private = { 0x98, 0xdf, 0x84, 0x5f, 0x66, 0x51, 0xbf, 0x11,
0692                  0x38, 0x22, 0x1f, 0x11, 0x90, 0x41, 0xf7, 0x2b,
0693                  0x6d, 0xbc, 0x3c, 0x4a, 0xce, 0x71, 0x43, 0xd9,
0694                  0x9f, 0xd5, 0x5a, 0xd8, 0x67, 0x48, 0x0d, 0xa8 },
0695         .public = { 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0696                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0697                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0698                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
0699         .result = { 0x6f, 0xdf, 0x6c, 0x37, 0x61, 0x1d, 0xbd, 0x53,
0700                 0x04, 0xdc, 0x0f, 0x2e, 0xb7, 0xc9, 0x51, 0x7e,
0701                 0xb3, 0xc5, 0x0e, 0x12, 0xfd, 0x05, 0x0a, 0xc6,
0702                 0xde, 0xc2, 0x70, 0x71, 0xd4, 0xbf, 0xc0, 0x34 },
0703         .valid = true
0704     },
0705     /* wycheproof - public key >= p */
0706     {
0707         .private = { 0xf0, 0x94, 0x98, 0xe4, 0x6f, 0x02, 0xf8, 0x78,
0708                  0x82, 0x9e, 0x78, 0xb8, 0x03, 0xd3, 0x16, 0xa2,
0709                  0xed, 0x69, 0x5d, 0x04, 0x98, 0xa0, 0x8a, 0xbd,
0710                  0xf8, 0x27, 0x69, 0x30, 0xe2, 0x4e, 0xdc, 0xb0 },
0711         .public = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0712                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0713                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0714                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
0715         .result = { 0x4c, 0x8f, 0xc4, 0xb1, 0xc6, 0xab, 0x88, 0xfb,
0716                 0x21, 0xf1, 0x8f, 0x6d, 0x4c, 0x81, 0x02, 0x40,
0717                 0xd4, 0xe9, 0x46, 0x51, 0xba, 0x44, 0xf7, 0xa2,
0718                 0xc8, 0x63, 0xce, 0xc7, 0xdc, 0x56, 0x60, 0x2d },
0719         .valid = true
0720     },
0721     /* wycheproof - public key >= p */
0722     {
0723         .private = { 0x18, 0x13, 0xc1, 0x0a, 0x5c, 0x7f, 0x21, 0xf9,
0724                  0x6e, 0x17, 0xf2, 0x88, 0xc0, 0xcc, 0x37, 0x60,
0725                  0x7c, 0x04, 0xc5, 0xf5, 0xae, 0xa2, 0xdb, 0x13,
0726                  0x4f, 0x9e, 0x2f, 0xfc, 0x66, 0xbd, 0x9d, 0xb8 },
0727         .public = { 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0728                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0729                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0730                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80 },
0731         .result = { 0x1c, 0xd0, 0xb2, 0x82, 0x67, 0xdc, 0x54, 0x1c,
0732                 0x64, 0x2d, 0x6d, 0x7d, 0xca, 0x44, 0xa8, 0xb3,
0733                 0x8a, 0x63, 0x73, 0x6e, 0xef, 0x5c, 0x4e, 0x65,
0734                 0x01, 0xff, 0xbb, 0xb1, 0x78, 0x0c, 0x03, 0x3c },
0735         .valid = true
0736     },
0737     /* wycheproof - public key >= p */
0738     {
0739         .private = { 0x78, 0x57, 0xfb, 0x80, 0x86, 0x53, 0x64, 0x5a,
0740                  0x0b, 0xeb, 0x13, 0x8a, 0x64, 0xf5, 0xf4, 0xd7,
0741                  0x33, 0xa4, 0x5e, 0xa8, 0x4c, 0x3c, 0xda, 0x11,
0742                  0xa9, 0xc0, 0x6f, 0x7e, 0x71, 0x39, 0x14, 0x9e },
0743         .public = { 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0744                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0745                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0746                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80 },
0747         .result = { 0x87, 0x55, 0xbe, 0x01, 0xc6, 0x0a, 0x7e, 0x82,
0748                 0x5c, 0xff, 0x3e, 0x0e, 0x78, 0xcb, 0x3a, 0xa4,
0749                 0x33, 0x38, 0x61, 0x51, 0x6a, 0xa5, 0x9b, 0x1c,
0750                 0x51, 0xa8, 0xb2, 0xa5, 0x43, 0xdf, 0xa8, 0x22 },
0751         .valid = true
0752     },
0753     /* wycheproof - public key >= p */
0754     {
0755         .private = { 0xe0, 0x3a, 0xa8, 0x42, 0xe2, 0xab, 0xc5, 0x6e,
0756                  0x81, 0xe8, 0x7b, 0x8b, 0x9f, 0x41, 0x7b, 0x2a,
0757                  0x1e, 0x59, 0x13, 0xc7, 0x23, 0xee, 0xd2, 0x8d,
0758                  0x75, 0x2f, 0x8d, 0x47, 0xa5, 0x9f, 0x49, 0x8f },
0759         .public = { 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0760                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0761                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0762                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80 },
0763         .result = { 0x54, 0xc9, 0xa1, 0xed, 0x95, 0xe5, 0x46, 0xd2,
0764                 0x78, 0x22, 0xa3, 0x60, 0x93, 0x1d, 0xda, 0x60,
0765                 0xa1, 0xdf, 0x04, 0x9d, 0xa6, 0xf9, 0x04, 0x25,
0766                 0x3c, 0x06, 0x12, 0xbb, 0xdc, 0x08, 0x74, 0x76 },
0767         .valid = true
0768     },
0769     /* wycheproof - public key >= p */
0770     {
0771         .private = { 0xf8, 0xf7, 0x07, 0xb7, 0x99, 0x9b, 0x18, 0xcb,
0772                  0x0d, 0x6b, 0x96, 0x12, 0x4f, 0x20, 0x45, 0x97,
0773                  0x2c, 0xa2, 0x74, 0xbf, 0xc1, 0x54, 0xad, 0x0c,
0774                  0x87, 0x03, 0x8c, 0x24, 0xc6, 0xd0, 0xd4, 0xb2 },
0775         .public = { 0xda, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0776                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0777                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0778                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
0779         .result = { 0xcc, 0x1f, 0x40, 0xd7, 0x43, 0xcd, 0xc2, 0x23,
0780                 0x0e, 0x10, 0x43, 0xda, 0xba, 0x8b, 0x75, 0xe8,
0781                 0x10, 0xf1, 0xfb, 0xab, 0x7f, 0x25, 0x52, 0x69,
0782                 0xbd, 0x9e, 0xbb, 0x29, 0xe6, 0xbf, 0x49, 0x4f },
0783         .valid = true
0784     },
0785     /* wycheproof - public key >= p */
0786     {
0787         .private = { 0xa0, 0x34, 0xf6, 0x84, 0xfa, 0x63, 0x1e, 0x1a,
0788                  0x34, 0x81, 0x18, 0xc1, 0xce, 0x4c, 0x98, 0x23,
0789                  0x1f, 0x2d, 0x9e, 0xec, 0x9b, 0xa5, 0x36, 0x5b,
0790                  0x4a, 0x05, 0xd6, 0x9a, 0x78, 0x5b, 0x07, 0x96 },
0791         .public = { 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0792                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0793                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0794                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
0795         .result = { 0x54, 0x99, 0x8e, 0xe4, 0x3a, 0x5b, 0x00, 0x7b,
0796                 0xf4, 0x99, 0xf0, 0x78, 0xe7, 0x36, 0x52, 0x44,
0797                 0x00, 0xa8, 0xb5, 0xc7, 0xe9, 0xb9, 0xb4, 0x37,
0798                 0x71, 0x74, 0x8c, 0x7c, 0xdf, 0x88, 0x04, 0x12 },
0799         .valid = true
0800     },
0801     /* wycheproof - public key >= p */
0802     {
0803         .private = { 0x30, 0xb6, 0xc6, 0xa0, 0xf2, 0xff, 0xa6, 0x80,
0804                  0x76, 0x8f, 0x99, 0x2b, 0xa8, 0x9e, 0x15, 0x2d,
0805                  0x5b, 0xc9, 0x89, 0x3d, 0x38, 0xc9, 0x11, 0x9b,
0806                  0xe4, 0xf7, 0x67, 0xbf, 0xab, 0x6e, 0x0c, 0xa5 },
0807         .public = { 0xdc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0808                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0809                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0810                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
0811         .result = { 0xea, 0xd9, 0xb3, 0x8e, 0xfd, 0xd7, 0x23, 0x63,
0812                 0x79, 0x34, 0xe5, 0x5a, 0xb7, 0x17, 0xa7, 0xae,
0813                 0x09, 0xeb, 0x86, 0xa2, 0x1d, 0xc3, 0x6a, 0x3f,
0814                 0xee, 0xb8, 0x8b, 0x75, 0x9e, 0x39, 0x1e, 0x09 },
0815         .valid = true
0816     },
0817     /* wycheproof - public key >= p */
0818     {
0819         .private = { 0x90, 0x1b, 0x9d, 0xcf, 0x88, 0x1e, 0x01, 0xe0,
0820                  0x27, 0x57, 0x50, 0x35, 0xd4, 0x0b, 0x43, 0xbd,
0821                  0xc1, 0xc5, 0x24, 0x2e, 0x03, 0x08, 0x47, 0x49,
0822                  0x5b, 0x0c, 0x72, 0x86, 0x46, 0x9b, 0x65, 0x91 },
0823         .public = { 0xea, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0824                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0825                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0826                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
0827         .result = { 0x60, 0x2f, 0xf4, 0x07, 0x89, 0xb5, 0x4b, 0x41,
0828                 0x80, 0x59, 0x15, 0xfe, 0x2a, 0x62, 0x21, 0xf0,
0829                 0x7a, 0x50, 0xff, 0xc2, 0xc3, 0xfc, 0x94, 0xcf,
0830                 0x61, 0xf1, 0x3d, 0x79, 0x04, 0xe8, 0x8e, 0x0e },
0831         .valid = true
0832     },
0833     /* wycheproof - public key >= p */
0834     {
0835         .private = { 0x80, 0x46, 0x67, 0x7c, 0x28, 0xfd, 0x82, 0xc9,
0836                  0xa1, 0xbd, 0xb7, 0x1a, 0x1a, 0x1a, 0x34, 0xfa,
0837                  0xba, 0x12, 0x25, 0xe2, 0x50, 0x7f, 0xe3, 0xf5,
0838                  0x4d, 0x10, 0xbd, 0x5b, 0x0d, 0x86, 0x5f, 0x8e },
0839         .public = { 0xeb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0840                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0841                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0842                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
0843         .result = { 0xe0, 0x0a, 0xe8, 0xb1, 0x43, 0x47, 0x12, 0x47,
0844                 0xba, 0x24, 0xf1, 0x2c, 0x88, 0x55, 0x36, 0xc3,
0845                 0xcb, 0x98, 0x1b, 0x58, 0xe1, 0xe5, 0x6b, 0x2b,
0846                 0xaf, 0x35, 0xc1, 0x2a, 0xe1, 0xf7, 0x9c, 0x26 },
0847         .valid = true
0848     },
0849     /* wycheproof - public key >= p */
0850     {
0851         .private = { 0x60, 0x2f, 0x7e, 0x2f, 0x68, 0xa8, 0x46, 0xb8,
0852                  0x2c, 0xc2, 0x69, 0xb1, 0xd4, 0x8e, 0x93, 0x98,
0853                  0x86, 0xae, 0x54, 0xfd, 0x63, 0x6c, 0x1f, 0xe0,
0854                  0x74, 0xd7, 0x10, 0x12, 0x7d, 0x47, 0x24, 0x91 },
0855         .public = { 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0856                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0857                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0858                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
0859         .result = { 0x98, 0xcb, 0x9b, 0x50, 0xdd, 0x3f, 0xc2, 0xb0,
0860                 0xd4, 0xf2, 0xd2, 0xbf, 0x7c, 0x5c, 0xfd, 0xd1,
0861                 0x0c, 0x8f, 0xcd, 0x31, 0xfc, 0x40, 0xaf, 0x1a,
0862                 0xd4, 0x4f, 0x47, 0xc1, 0x31, 0x37, 0x63, 0x62 },
0863         .valid = true
0864     },
0865     /* wycheproof - public key >= p */
0866     {
0867         .private = { 0x60, 0x88, 0x7b, 0x3d, 0xc7, 0x24, 0x43, 0x02,
0868                  0x6e, 0xbe, 0xdb, 0xbb, 0xb7, 0x06, 0x65, 0xf4,
0869                  0x2b, 0x87, 0xad, 0xd1, 0x44, 0x0e, 0x77, 0x68,
0870                  0xfb, 0xd7, 0xe8, 0xe2, 0xce, 0x5f, 0x63, 0x9d },
0871         .public = { 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0872                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0873                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0874                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
0875         .result = { 0x38, 0xd6, 0x30, 0x4c, 0x4a, 0x7e, 0x6d, 0x9f,
0876                 0x79, 0x59, 0x33, 0x4f, 0xb5, 0x24, 0x5b, 0xd2,
0877                 0xc7, 0x54, 0x52, 0x5d, 0x4c, 0x91, 0xdb, 0x95,
0878                 0x02, 0x06, 0x92, 0x62, 0x34, 0xc1, 0xf6, 0x33 },
0879         .valid = true
0880     },
0881     /* wycheproof - public key >= p */
0882     {
0883         .private = { 0x78, 0xd3, 0x1d, 0xfa, 0x85, 0x44, 0x97, 0xd7,
0884                  0x2d, 0x8d, 0xef, 0x8a, 0x1b, 0x7f, 0xb0, 0x06,
0885                  0xce, 0xc2, 0xd8, 0xc4, 0x92, 0x46, 0x47, 0xc9,
0886                  0x38, 0x14, 0xae, 0x56, 0xfa, 0xed, 0xa4, 0x95 },
0887         .public = { 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0888                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0889                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0890                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
0891         .result = { 0x78, 0x6c, 0xd5, 0x49, 0x96, 0xf0, 0x14, 0xa5,
0892                 0xa0, 0x31, 0xec, 0x14, 0xdb, 0x81, 0x2e, 0xd0,
0893                 0x83, 0x55, 0x06, 0x1f, 0xdb, 0x5d, 0xe6, 0x80,
0894                 0xa8, 0x00, 0xac, 0x52, 0x1f, 0x31, 0x8e, 0x23 },
0895         .valid = true
0896     },
0897     /* wycheproof - public key >= p */
0898     {
0899         .private = { 0xc0, 0x4c, 0x5b, 0xae, 0xfa, 0x83, 0x02, 0xdd,
0900                  0xde, 0xd6, 0xa4, 0xbb, 0x95, 0x77, 0x61, 0xb4,
0901                  0xeb, 0x97, 0xae, 0xfa, 0x4f, 0xc3, 0xb8, 0x04,
0902                  0x30, 0x85, 0xf9, 0x6a, 0x56, 0x59, 0xb3, 0xa5 },
0903         .public = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0904                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0905                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0906                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
0907         .result = { 0x29, 0xae, 0x8b, 0xc7, 0x3e, 0x9b, 0x10, 0xa0,
0908                 0x8b, 0x4f, 0x68, 0x1c, 0x43, 0xc3, 0xe0, 0xac,
0909                 0x1a, 0x17, 0x1d, 0x31, 0xb3, 0x8f, 0x1a, 0x48,
0910                 0xef, 0xba, 0x29, 0xae, 0x63, 0x9e, 0xa1, 0x34 },
0911         .valid = true
0912     },
0913     /* wycheproof - RFC 7748 */
0914     {
0915         .private = { 0xa0, 0x46, 0xe3, 0x6b, 0xf0, 0x52, 0x7c, 0x9d,
0916                  0x3b, 0x16, 0x15, 0x4b, 0x82, 0x46, 0x5e, 0xdd,
0917                  0x62, 0x14, 0x4c, 0x0a, 0xc1, 0xfc, 0x5a, 0x18,
0918                  0x50, 0x6a, 0x22, 0x44, 0xba, 0x44, 0x9a, 0x44 },
0919         .public = { 0xe6, 0xdb, 0x68, 0x67, 0x58, 0x30, 0x30, 0xdb,
0920                 0x35, 0x94, 0xc1, 0xa4, 0x24, 0xb1, 0x5f, 0x7c,
0921                 0x72, 0x66, 0x24, 0xec, 0x26, 0xb3, 0x35, 0x3b,
0922                 0x10, 0xa9, 0x03, 0xa6, 0xd0, 0xab, 0x1c, 0x4c },
0923         .result = { 0xc3, 0xda, 0x55, 0x37, 0x9d, 0xe9, 0xc6, 0x90,
0924                 0x8e, 0x94, 0xea, 0x4d, 0xf2, 0x8d, 0x08, 0x4f,
0925                 0x32, 0xec, 0xcf, 0x03, 0x49, 0x1c, 0x71, 0xf7,
0926                 0x54, 0xb4, 0x07, 0x55, 0x77, 0xa2, 0x85, 0x52 },
0927         .valid = true
0928     },
0929     /* wycheproof - RFC 7748 */
0930     {
0931         .private = { 0x48, 0x66, 0xe9, 0xd4, 0xd1, 0xb4, 0x67, 0x3c,
0932                  0x5a, 0xd2, 0x26, 0x91, 0x95, 0x7d, 0x6a, 0xf5,
0933                  0xc1, 0x1b, 0x64, 0x21, 0xe0, 0xea, 0x01, 0xd4,
0934                  0x2c, 0xa4, 0x16, 0x9e, 0x79, 0x18, 0xba, 0x4d },
0935         .public = { 0xe5, 0x21, 0x0f, 0x12, 0x78, 0x68, 0x11, 0xd3,
0936                 0xf4, 0xb7, 0x95, 0x9d, 0x05, 0x38, 0xae, 0x2c,
0937                 0x31, 0xdb, 0xe7, 0x10, 0x6f, 0xc0, 0x3c, 0x3e,
0938                 0xfc, 0x4c, 0xd5, 0x49, 0xc7, 0x15, 0xa4, 0x13 },
0939         .result = { 0x95, 0xcb, 0xde, 0x94, 0x76, 0xe8, 0x90, 0x7d,
0940                 0x7a, 0xad, 0xe4, 0x5c, 0xb4, 0xb8, 0x73, 0xf8,
0941                 0x8b, 0x59, 0x5a, 0x68, 0x79, 0x9f, 0xa1, 0x52,
0942                 0xe6, 0xf8, 0xf7, 0x64, 0x7a, 0xac, 0x79, 0x57 },
0943         .valid = true
0944     },
0945     /* wycheproof - edge case for shared secret */
0946     {
0947         .private = { 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
0948                  0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
0949                  0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
0950                  0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
0951         .public = { 0x0a, 0xb4, 0xe7, 0x63, 0x80, 0xd8, 0x4d, 0xde,
0952                 0x4f, 0x68, 0x33, 0xc5, 0x8f, 0x2a, 0x9f, 0xb8,
0953                 0xf8, 0x3b, 0xb0, 0x16, 0x9b, 0x17, 0x2b, 0xe4,
0954                 0xb6, 0xe0, 0x59, 0x28, 0x87, 0x74, 0x1a, 0x36 },
0955         .result = { 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0956                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0957                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0958                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
0959         .valid = true
0960     },
0961     /* wycheproof - edge case for shared secret */
0962     {
0963         .private = { 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
0964                  0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
0965                  0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
0966                  0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
0967         .public = { 0x89, 0xe1, 0x0d, 0x57, 0x01, 0xb4, 0x33, 0x7d,
0968                 0x2d, 0x03, 0x21, 0x81, 0x53, 0x8b, 0x10, 0x64,
0969                 0xbd, 0x40, 0x84, 0x40, 0x1c, 0xec, 0xa1, 0xfd,
0970                 0x12, 0x66, 0x3a, 0x19, 0x59, 0x38, 0x80, 0x00 },
0971         .result = { 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0972                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0973                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0974                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
0975         .valid = true
0976     },
0977     /* wycheproof - edge case for shared secret */
0978     {
0979         .private = { 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
0980                  0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
0981                  0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
0982                  0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
0983         .public = { 0x2b, 0x55, 0xd3, 0xaa, 0x4a, 0x8f, 0x80, 0xc8,
0984                 0xc0, 0xb2, 0xae, 0x5f, 0x93, 0x3e, 0x85, 0xaf,
0985                 0x49, 0xbe, 0xac, 0x36, 0xc2, 0xfa, 0x73, 0x94,
0986                 0xba, 0xb7, 0x6c, 0x89, 0x33, 0xf8, 0xf8, 0x1d },
0987         .result = { 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0988                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0989                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0990                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
0991         .valid = true
0992     },
0993     /* wycheproof - edge case for shared secret */
0994     {
0995         .private = { 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
0996                  0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
0997                  0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
0998                  0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
0999         .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 
1283 bool __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 }