Annotation of embedaddon/strongswan/src/libstrongswan/tests/suites/test_ed25519.c, revision 1.1.1.1

1.1       misho       1: /*
                      2:  * Copyright (C) 2016 Andreas Steffen
                      3:  * HSR Hochschule fuer Technik Rapperswil
                      4:  *
                      5:  * This program is free software; you can redistribute it and/or modify it
                      6:  * under the terms of the GNU General Public License as published by the
                      7:  * Free Software Foundation; either version 2 of the License, or (at your
                      8:  * option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>.
                      9:  *
                     10:  * This program is distributed in the hope that it will be useful, but
                     11:  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
                     12:  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
                     13:  * for more details.
                     14:  */
                     15: 
                     16: #include "test_suite.h"
                     17: 
                     18: #include <time.h>
                     19: 
                     20: typedef struct sig_test_t sig_test_t;
                     21: 
                     22: struct sig_test_t {
                     23:        chunk_t key;
                     24:        chunk_t pubkey;
                     25:        chunk_t msg;
                     26:        chunk_t sig;
                     27:        chunk_t fp_pk;
                     28:        chunk_t fp_spki;
                     29: };
                     30: 
                     31: /**
                     32:  * Ed25519 Test Vectors from RFC 8032
                     33:  */
                     34: static sig_test_t sig_tests[] = {
                     35:        /* Test 1 */
                     36:        { chunk_from_chars(
                     37:                0x30, 0x2e, 0x02, 0x01, 0x00, 0x30, 0x05, 0x06, 0x03, 0x2b,
                     38:                0x65, 0x70, 0x04, 0x22, 0x04, 0x20, 0x9d, 0x61, 0xb1, 0x9d,
                     39:                0xef, 0xfd, 0x5a, 0x60, 0xba, 0x84, 0x4a, 0xf4, 0x92, 0xec,
                     40:                0x2c, 0xc4, 0x44, 0x49, 0xc5, 0x69, 0x7b, 0x32, 0x69, 0x19,
                     41:                0x70, 0x3b, 0xac, 0x03, 0x1c, 0xae, 0x7f, 0x60),
                     42:          chunk_from_chars(
                     43:                0x30, 0x2a, 0x30, 0x05, 0x06, 0x03, 0x2b, 0x65, 0x70, 0x03,
                     44:                0x21, 0x00, 0xd7, 0x5a, 0x98, 0x01, 0x82, 0xb1, 0x0a, 0xb7,
                     45:                0xd5, 0x4b, 0xfe, 0xd3, 0xc9, 0x64, 0x07, 0x3a, 0x0e, 0xe1,
                     46:                0x72, 0xf3, 0xda, 0xa6, 0x23, 0x25, 0xaf, 0x02, 0x1a, 0x68,
                     47:                0xf7, 0x07, 0x51, 0x1a),
                     48:          { NULL, 0 },
                     49:          chunk_from_chars(
                     50:                0xe5, 0x56, 0x43, 0x00, 0xc3, 0x60, 0xac, 0x72, 0x90, 0x86,
                     51:                0xe2, 0xcc, 0x80, 0x6e, 0x82, 0x8a, 0x84, 0x87, 0x7f, 0x1e,
                     52:                0xb8, 0xe5, 0xd9, 0x74, 0xd8, 0x73, 0xe0, 0x65, 0x22, 0x49,
                     53:                0x01, 0x55, 0x5f, 0xb8, 0x82, 0x15, 0x90, 0xa3, 0x3b, 0xac,
                     54:                0xc6, 0x1e, 0x39, 0x70, 0x1c, 0xf9, 0xb4, 0x6b, 0xd2, 0x5b,
                     55:                0xf5, 0xf0, 0x59, 0x5b, 0xbe, 0x24, 0x65, 0x51, 0x41, 0x43,
                     56:                0x8e, 0x7a, 0x10, 0x0b),
                     57:          chunk_from_chars(
                     58:                0x5b, 0x27, 0xaa, 0x55, 0x89, 0x17, 0x97, 0x70, 0xe4, 0x75,
                     59:                0x75, 0xb1, 0x62, 0xa1, 0xde, 0xd9, 0x7b, 0x8b, 0xfc, 0x6d),
                     60:          chunk_from_chars(
                     61:                0xa5, 0x66, 0xbe, 0x19, 0x84, 0x01, 0x73, 0x41, 0x3a, 0x61,
                     62:                0x04, 0x83, 0x50, 0xef, 0xf2, 0x3e, 0x8f, 0xe2, 0x22, 0x66),
                     63:        },
                     64:        /* Test 2 */
                     65:        { chunk_from_chars(
                     66:                0x30, 0x2e, 0x02, 0x01, 0x00, 0x30, 0x05, 0x06, 0x03, 0x2b,
                     67:                0x65, 0x70, 0x04, 0x22, 0x04, 0x20, 0x4c, 0xcd, 0x08, 0x9b,
                     68:                0x28, 0xff, 0x96, 0xda, 0x9d, 0xb6, 0xc3, 0x46, 0xec, 0x11,
                     69:                0x4e, 0x0f, 0x5b, 0x8a, 0x31, 0x9f, 0x35, 0xab, 0xa6, 0x24,
                     70:                0xda, 0x8c, 0xf6, 0xed, 0x4f, 0xb8, 0xa6, 0xfb),
                     71:          chunk_from_chars(
                     72:                0x30, 0x2a, 0x30, 0x05, 0x06, 0x03, 0x2b, 0x65, 0x70, 0x03,
                     73:                0x21, 0x00, 0x3d, 0x40, 0x17, 0xc3, 0xe8, 0x43, 0x89, 0x5a,
                     74:                0x92, 0xb7, 0x0a, 0xa7, 0x4d, 0x1b, 0x7e, 0xbc, 0x9c, 0x98,
                     75:                0x2c, 0xcf, 0x2e, 0xc4, 0x96, 0x8c, 0xc0, 0xcd, 0x55, 0xf1,
                     76:                0x2a, 0xf4, 0x66, 0x0c),
                     77:          chunk_from_chars(
                     78:                0x72),
                     79:          chunk_from_chars(
                     80:                0x92, 0xa0, 0x09, 0xa9, 0xf0, 0xd4, 0xca, 0xb8, 0x72, 0x0e,
                     81:                0x82, 0x0b, 0x5f, 0x64, 0x25, 0x40, 0xa2, 0xb2, 0x7b, 0x54,
                     82:                0x16, 0x50, 0x3f, 0x8f, 0xb3, 0x76, 0x22, 0x23, 0xeb, 0xdb,
                     83:                0x69, 0xda, 0x08, 0x5a, 0xc1, 0xe4, 0x3e, 0x15, 0x99, 0x6e,
                     84:                0x45, 0x8f, 0x36, 0x13, 0xd0, 0xf1, 0x1d, 0x8c, 0x38, 0x7b,
                     85:                0x2e, 0xae, 0xb4, 0x30, 0x2a, 0xee, 0xb0, 0x0d, 0x29, 0x16,
                     86:                0x12, 0xbb, 0x0c, 0x00),
                     87:          chunk_from_chars(
                     88:                0x13, 0xf7, 0x72, 0x66, 0x9e, 0x15, 0x2a, 0xe6, 0xa6, 0x2a,
                     89:                0x60, 0xa3, 0x48, 0x8a, 0x6f, 0x29, 0x7d, 0x06, 0x13, 0xdd),
                     90:          chunk_from_chars(
                     91:                0xbd, 0xae, 0x41, 0xeb, 0x5d, 0xbf, 0x88, 0xb9, 0xdf, 0x18,
                     92:                0xda, 0xbb, 0x2d, 0xee, 0xa9, 0x1a, 0x4e, 0x03, 0x38, 0xe4),
                     93:        },
                     94:        /* Test 3 */
                     95:        { chunk_from_chars(
                     96:                0x30, 0x2e, 0x02, 0x01, 0x00, 0x30, 0x05, 0x06, 0x03, 0x2b,
                     97:                0x65, 0x70, 0x04, 0x22, 0x04, 0x20, 0xc5, 0xaa, 0x8d, 0xf4,
                     98:                0x3f, 0x9f, 0x83, 0x7b, 0xed, 0xb7, 0x44, 0x2f, 0x31, 0xdc,
                     99:                0xb7, 0xb1, 0x66, 0xd3, 0x85, 0x35,0x07, 0x6f, 0x09, 0x4b,
                    100:                0x85, 0xce, 0x3a, 0x2e, 0x0b, 0x44, 0x58, 0xf7),
                    101:          chunk_from_chars(
                    102:                0x30, 0x2a, 0x30, 0x05, 0x06, 0x03, 0x2b, 0x65, 0x70, 0x03,
                    103:                0x21, 0x00, 0xfc, 0x51, 0xcd, 0x8e, 0x62, 0x18, 0xa1, 0xa3,
                    104:                0x8d, 0xa4, 0x7e, 0xd0, 0x02, 0x30, 0xf0, 0x58, 0x08, 0x16,
                    105:                0xed, 0x13, 0xba, 0x33, 0x03, 0xac, 0x5d, 0xeb, 0x91, 0x15,
                    106:                0x48, 0x90, 0x80, 0x25),
                    107:          chunk_from_chars(
                    108:                0xaf, 0x82),
                    109:          chunk_from_chars(
                    110:                0x62, 0x91, 0xd6, 0x57, 0xde, 0xec, 0x24, 0x02, 0x48, 0x27,
                    111:                0xe6, 0x9c, 0x3a, 0xbe, 0x01, 0xa3, 0x0c, 0xe5, 0x48, 0xa2,
                    112:                0x84, 0x74, 0x3a, 0x44, 0x5e, 0x36, 0x80, 0xd7, 0xdb, 0x5a,
                    113:                0xc3, 0xac, 0x18, 0xff, 0x9b, 0x53, 0x8d, 0x16, 0xf2, 0x90,
                    114:                0xae, 0x67, 0xf7, 0x60, 0x98, 0x4d, 0xc6, 0x59, 0x4a, 0x7c,
                    115:                0x15, 0xe9, 0x71, 0x6e, 0xd2, 0x8d, 0xc0, 0x27, 0xbe, 0xce,
                    116:                0xea, 0x1e, 0xc4, 0x0a),
                    117:          chunk_from_chars(
                    118:                0x88, 0xc7, 0x64, 0xc8, 0xbe, 0x44, 0x37, 0x4a, 0x7d, 0x2f,
                    119:                0x5d, 0x84, 0x72, 0x1f, 0x8e, 0x32, 0x5e, 0x5b, 0xd6, 0x4c),
                    120:          chunk_from_chars(
                    121:                0xad, 0x01, 0x30, 0xb1, 0x2b, 0x48, 0x62, 0x9b, 0xb9, 0xad,
                    122:                0xea, 0x92, 0x1f, 0xfe, 0xd2, 0x9a, 0x42, 0xf0, 0xad, 0xe6),
                    123:        },
                    124:        /* Test 1024 */
                    125:        { chunk_from_chars(
                    126:                0x30, 0x2e, 0x02, 0x01, 0x00, 0x30, 0x05, 0x06, 0x03, 0x2b,
                    127:                0x65, 0x70, 0x04, 0x22, 0x04, 0x20, 0xf5, 0xe5, 0x76, 0x7c,
                    128:                0xf1, 0x53, 0x31, 0x95, 0x17, 0x63, 0x0f, 0x22, 0x68, 0x76,
                    129:                0xb8, 0x6c, 0x81, 0x60, 0xcc, 0x58, 0x3b, 0xc0, 0x13, 0x74,
                    130:                0x4c, 0x6b, 0xf2, 0x55, 0xf5, 0xcc, 0x0e, 0xe5),
                    131:          chunk_from_chars(
                    132:                0x30, 0x2a, 0x30, 0x05, 0x06, 0x03, 0x2b, 0x65, 0x70, 0x03,
                    133:                0x21, 0x00, 0x27, 0x81, 0x17, 0xfc, 0x14, 0x4c, 0x72, 0x34,
                    134:                0x0f, 0x67, 0xd0, 0xf2, 0x31, 0x6e, 0x83, 0x86, 0xce, 0xff,
                    135:                0xbf, 0x2b, 0x24, 0x28, 0xc9, 0xc5, 0x1f, 0xef, 0x7c, 0x59,
                    136:                0x7f, 0x1d, 0x42, 0x6e),
                    137:          chunk_from_chars(
                    138:                0x08, 0xb8, 0xb2, 0xb7, 0x33, 0x42, 0x42, 0x43, 0x76, 0x0f,
                    139:                0xe4, 0x26, 0xa4, 0xb5, 0x49, 0x08, 0x63, 0x21, 0x10, 0xa6,
                    140:                0x6c, 0x2f, 0x65, 0x91, 0xea, 0xbd, 0x33, 0x45, 0xe3, 0xe4,
                    141:                0xeb, 0x98, 0xfa, 0x6e, 0x26, 0x4b, 0xf0, 0x9e, 0xfe, 0x12,
                    142:                0xee, 0x50, 0xf8, 0xf5, 0x4e, 0x9f, 0x77, 0xb1, 0xe3, 0x55,
                    143:                0xf6, 0xc5, 0x05, 0x44, 0xe2, 0x3f, 0xb1, 0x43, 0x3d, 0xdf,
                    144:                0x73, 0xbe, 0x84, 0xd8, 0x79, 0xde, 0x7c, 0x00, 0x46, 0xdc,
                    145:                0x49, 0x96, 0xd9, 0xe7, 0x73, 0xf4, 0xbc, 0x9e, 0xfe, 0x57,
                    146:                0x38, 0x82, 0x9a, 0xdb, 0x26, 0xc8, 0x1b, 0x37, 0xc9, 0x3a,
                    147:                0x1b, 0x27, 0x0b, 0x20, 0x32, 0x9d, 0x65, 0x86, 0x75, 0xfc,
                    148: 
                    149:                0x6e, 0xa5, 0x34, 0xe0, 0x81, 0x0a, 0x44, 0x32, 0x82, 0x6b,
                    150:                0xf5, 0x8c, 0x94, 0x1e, 0xfb, 0x65, 0xd5, 0x7a, 0x33, 0x8b,
                    151:                0xbd, 0x2e, 0x26, 0x64, 0x0f, 0x89, 0xff, 0xbc, 0x1a, 0x85,
                    152:                0x8e, 0xfc, 0xb8, 0x55, 0x0e, 0xe3, 0xa5, 0xe1, 0x99, 0x8b,
                    153:                0xd1, 0x77, 0xe9, 0x3a, 0x73, 0x63, 0xc3, 0x44, 0xfe, 0x6b,
                    154:                0x19, 0x9e, 0xe5, 0xd0, 0x2e, 0x82, 0xd5, 0x22, 0xc4, 0xfe,
                    155:                0xba, 0x15, 0x45, 0x2f, 0x80, 0x28, 0x8a, 0x82, 0x1a, 0x57,
                    156:                0x91, 0x16, 0xec, 0x6d, 0xad, 0x2b, 0x3b, 0x31, 0x0d, 0xa9,
                    157:                0x03, 0x40, 0x1a, 0xa6, 0x21, 0x00, 0xab, 0x5d, 0x1a, 0x36,
                    158:                0x55, 0x3e, 0x06, 0x20, 0x3b, 0x33, 0x89, 0x0c, 0xc9, 0xb8,
                    159: 
                    160:                0x32, 0xf7, 0x9e, 0xf8, 0x05, 0x60, 0xcc, 0xb9, 0xa3, 0x9c,
                    161:                0xe7, 0x67, 0x96, 0x7e, 0xd6, 0x28, 0xc6, 0xad, 0x57, 0x3c,
                    162:                0xb1, 0x16, 0xdb, 0xef, 0xef, 0xd7, 0x54, 0x99, 0xda, 0x96,
                    163:                0xbd, 0x68, 0xa8, 0xa9, 0x7b, 0x92, 0x8a, 0x8b, 0xbc, 0x10,
                    164:                0x3b, 0x66, 0x21, 0xfc, 0xde, 0x2b, 0xec, 0xa1, 0x23, 0x1d,
                    165:                0x20, 0x6b, 0xe6, 0xcd, 0x9e, 0xc7, 0xaf, 0xf6, 0xf6, 0xc9,
                    166:                0x4f, 0xcd, 0x72, 0x04, 0xed, 0x34, 0x55, 0xc6, 0x8c, 0x83,
                    167:                0xf4, 0xa4, 0x1d, 0xa4, 0xaf, 0x2b, 0x74, 0xef, 0x5c, 0x53,
                    168:                0xf1, 0xd8, 0xac, 0x70, 0xbd, 0xcb, 0x7e, 0xd1, 0x85, 0xce,
                    169:                0x81, 0xbd, 0x84, 0x35, 0x9d, 0x44, 0x25, 0x4d, 0x95, 0x62,
                    170: 
                    171:                0x9e, 0x98, 0x55, 0xa9, 0x4a, 0x7c, 0x19, 0x58, 0xd1, 0xf8,
                    172:                0xad, 0xa5, 0xd0, 0x53, 0x2e, 0xd8, 0xa5, 0xaa, 0x3f, 0xb2,
                    173:                0xd1, 0x7b, 0xa7, 0x0e, 0xb6, 0x24, 0x8e, 0x59, 0x4e, 0x1a,
                    174:                0x22, 0x97, 0xac, 0xbb, 0xb3, 0x9d, 0x50, 0x2f, 0x1a, 0x8c,
                    175:                0x6e, 0xb6, 0xf1, 0xce, 0x22, 0xb3, 0xde, 0x1a, 0x1f, 0x40,
                    176:                0xcc, 0x24, 0x55, 0x41, 0x19, 0xa8, 0x31, 0xa9, 0xaa, 0xd6,
                    177:                0x07, 0x9c, 0xad, 0x88, 0x42, 0x5d, 0xe6, 0xbd, 0xe1, 0xa9,
                    178:                0x18, 0x7e, 0xbb, 0x60, 0x92, 0xcf, 0x67, 0xbf, 0x2b, 0x13,
                    179:                0xfd, 0x65, 0xf2, 0x70, 0x88, 0xd7, 0x8b, 0x7e, 0x88, 0x3c,
                    180:                0x87, 0x59, 0xd2, 0xc4, 0xf5, 0xc6, 0x5a, 0xdb, 0x75, 0x53,
                    181: 
                    182:                0x87, 0x8a, 0xd5, 0x75, 0xf9, 0xfa, 0xd8, 0x78, 0xe8, 0x0a,
                    183:                0x0c, 0x9b, 0xa6, 0x3b, 0xcb, 0xcc, 0x27, 0x32, 0xe6, 0x94,
                    184:                0x85, 0xbb, 0xc9, 0xc9, 0x0b, 0xfb, 0xd6, 0x24, 0x81, 0xd9,
                    185:                0x08, 0x9b, 0xec, 0xcf, 0x80, 0xcf, 0xe2, 0xdf, 0x16, 0xa2,
                    186:                0xcf, 0x65, 0xbd, 0x92, 0xdd, 0x59, 0x7b, 0x07, 0x07, 0xe0,
                    187:                0x91, 0x7a, 0xf4, 0x8b, 0xbb, 0x75, 0xfe, 0xd4, 0x13, 0xd2,
                    188:                0x38, 0xf5, 0x55, 0x5a, 0x7a, 0x56, 0x9d, 0x80, 0xc3, 0x41,
                    189:                0x4a, 0x8d, 0x08, 0x59, 0xdc, 0x65, 0xa4, 0x61, 0x28, 0xba,
                    190:                0xb2, 0x7a, 0xf8, 0x7a, 0x71, 0x31, 0x4f, 0x31, 0x8c, 0x78,
                    191:                0x2b, 0x23, 0xeb, 0xfe, 0x80, 0x8b, 0x82, 0xb0, 0xce, 0x26,
                    192: 
                    193:                0x40, 0x1d, 0x2e, 0x22, 0xf0, 0x4d, 0x83, 0xd1, 0x25, 0x5d,
                    194:                0xc5, 0x1a, 0xdd, 0xd3, 0xb7, 0x5a, 0x2b, 0x1a, 0xe0, 0x78,
                    195:                0x45, 0x04, 0xdf, 0x54, 0x3a, 0xf8, 0x96, 0x9b, 0xe3, 0xea,
                    196:                0x70, 0x82, 0xff, 0x7f, 0xc9, 0x88, 0x8c, 0x14, 0x4d, 0xa2,
                    197:                0xaf, 0x58, 0x42, 0x9e, 0xc9, 0x60, 0x31, 0xdb, 0xca, 0xd3,
                    198:                0xda, 0xd9, 0xaf, 0x0d, 0xcb, 0xaa, 0xaf, 0x26, 0x8c, 0xb8,
                    199:                0xfc, 0xff, 0xea, 0xd9, 0x4f, 0x3c, 0x7c, 0xa4, 0x95, 0xe0,
                    200:                0x56, 0xa9, 0xb4, 0x7a, 0xcd, 0xb7, 0x51, 0xfb, 0x73, 0xe6,
                    201:                0x66, 0xc6, 0xc6, 0x55, 0xad, 0xe8, 0x29, 0x72, 0x97, 0xd0,
                    202:                0x7a, 0xd1, 0xba, 0x5e, 0x43, 0xf1, 0xbc, 0xa3, 0x23, 0x01,
                    203: 
                    204:                0x65, 0x13, 0x39, 0xe2, 0x29, 0x04, 0xcc, 0x8c, 0x42, 0xf5,
                    205:                0x8c, 0x30, 0xc0, 0x4a, 0xaf, 0xdb, 0x03, 0x8d, 0xda, 0x08,
                    206:                0x47, 0xdd, 0x98, 0x8d, 0xcd, 0xa6, 0xf3, 0xbf, 0xd1, 0x5c,
                    207:                0x4b, 0x4c, 0x45, 0x25, 0x00, 0x4a, 0xa0, 0x6e, 0xef, 0xf8,
                    208:                0xca, 0x61, 0x78, 0x3a, 0xac, 0xec, 0x57, 0xfb, 0x3d, 0x1f,
                    209:                0x92, 0xb0, 0xfe, 0x2f, 0xd1, 0xa8, 0x5f, 0x67, 0x24, 0x51,
                    210:                0x7b, 0x65, 0xe6, 0x14, 0xad, 0x68, 0x08, 0xd6, 0xf6, 0xee,
                    211:                0x34, 0xdf, 0xf7, 0x31, 0x0f, 0xdc, 0x82, 0xae, 0xbf, 0xd9,
                    212:                0x04, 0xb0, 0x1e, 0x1d, 0xc5, 0x4b, 0x29, 0x27, 0x09, 0x4b,
                    213:                0x2d, 0xb6, 0x8d, 0x6f, 0x90, 0x3b, 0x68, 0x40, 0x1a, 0xde,
                    214: 
                    215:                0xbf, 0x5a, 0x7e, 0x08, 0xd7, 0x8f, 0xf4, 0xef, 0x5d, 0x63,
                    216:                0x65, 0x3a, 0x65, 0x04, 0x0c, 0xf9, 0xbf, 0xd4, 0xac, 0xa7,
                    217:                0x98, 0x4a, 0x74, 0xd3, 0x71, 0x45, 0x98, 0x67, 0x80, 0xfc,
                    218:                0x0b, 0x16, 0xac, 0x45, 0x16, 0x49, 0xde, 0x61, 0x88, 0xa7,
                    219:                0xdb, 0xdf, 0x19, 0x1f, 0x64, 0xb5, 0xfc, 0x5e, 0x2a, 0xb4,
                    220:                0x7b, 0x57, 0xf7, 0xf7, 0x27, 0x6c, 0xd4, 0x19, 0xc1, 0x7a,
                    221:                0x3c, 0xa8, 0xe1, 0xb9, 0x39, 0xae, 0x49, 0xe4, 0x88, 0xac,
                    222:                0xba, 0x6b, 0x96, 0x56, 0x10, 0xb5, 0x48, 0x01, 0x09, 0xc8,
                    223:                0xb1, 0x7b, 0x80, 0xe1, 0xb7, 0xb7, 0x50, 0xdf, 0xc7, 0x59,
                    224:                0x8d, 0x5d, 0x50, 0x11, 0xfd, 0x2d, 0xcc, 0x56, 0x00, 0xa3,
                    225: 
                    226:                0x2e, 0xf5, 0xb5, 0x2a, 0x1e, 0xcc, 0x82, 0x0e, 0x30, 0x8a,
                    227:                0xa3, 0x42, 0x72, 0x1a, 0xac, 0x09, 0x43, 0xbf, 0x66, 0x86,
                    228:                0xb6, 0x4b, 0x25, 0x79, 0x37, 0x65, 0x04, 0xcc, 0xc4, 0x93,
                    229:                0xd9, 0x7e, 0x6a, 0xed, 0x3f, 0xb0, 0xf9, 0xcd, 0x71, 0xa4,
                    230:                0x3d, 0xd4, 0x97, 0xf0, 0x1f, 0x17, 0xc0, 0xe2, 0xcb, 0x37,
                    231:                0x97, 0xaa, 0x2a, 0x2f, 0x25, 0x66, 0x56, 0x16, 0x8e, 0x6c,
                    232:                0x49, 0x6a, 0xfc, 0x5f, 0xb9, 0x32, 0x46, 0xf6, 0xb1, 0x11,
                    233:                0x63, 0x98, 0xa3, 0x46, 0xf1, 0xa6, 0x41, 0xf3, 0xb0, 0x41,
                    234:                0xe9, 0x89, 0xf7, 0x91, 0x4f, 0x90, 0xcc, 0x2c, 0x7f, 0xff,
                    235:                0x35, 0x78, 0x76, 0xe5, 0x06, 0xb5, 0x0d, 0x33, 0x4b, 0xa7,
                    236: 
                    237:                0x7c, 0x22, 0x5b, 0xc3, 0x07, 0xba, 0x53, 0x71, 0x52, 0xf3,
                    238:                0xf1, 0x61, 0x0e, 0x4e, 0xaf, 0xe5, 0x95, 0xf6, 0xd9, 0xd9,
                    239:                0x0d, 0x11, 0xfa, 0xa9, 0x33, 0xa1, 0x5e, 0xf1, 0x36, 0x95,
                    240:                0x46, 0x86, 0x8a, 0x7f, 0x3a, 0x45, 0xa9, 0x67, 0x68, 0xd4,
                    241:                0x0f, 0xd9, 0xd0, 0x34, 0x12, 0xc0, 0x91, 0xc6, 0x31, 0x5c,
                    242:                0xf4, 0xfd, 0xe7, 0xcb, 0x68, 0x60, 0x69, 0x37, 0x38, 0x0d,
                    243:                0xb2, 0xea, 0xaa, 0x70, 0x7b, 0x4c, 0x41, 0x85, 0xc3, 0x2e,
                    244:                0xdd, 0xcd, 0xd3, 0x06, 0x70, 0x5e, 0x4d, 0xc1, 0xff, 0xc8,
                    245:                0x72, 0xee, 0xee, 0x47, 0x5a, 0x64, 0xdf, 0xac, 0x86, 0xab,
                    246:                0xa4, 0x1c, 0x06, 0x18, 0x98, 0x3f, 0x87, 0x41, 0xc5, 0xef,
                    247: 
                    248:                0x68, 0xd3, 0xa1, 0x01, 0xe8, 0xa3, 0xb8, 0xca, 0xc6, 0x0c,
                    249:                0x90, 0x5c, 0x15, 0xfc, 0x91, 0x08, 0x40, 0xb9, 0x4c, 0x00,
                    250:                0xa0, 0xb9, 0xd0),
                    251:          chunk_from_chars(
                    252:                0x0a, 0xab, 0x4c, 0x90, 0x05, 0x01, 0xb3, 0xe2, 0x4d, 0x7c,
                    253:                0xdf, 0x46, 0x63, 0x32, 0x6a, 0x3a, 0x87, 0xdf, 0x5e, 0x48,
                    254:                0x43, 0xb2, 0xcb, 0xdb, 0x67, 0xcb, 0xf6, 0xe4, 0x60, 0xfe,
                    255:                0xc3, 0x50, 0xaa, 0x53, 0x71, 0xb1, 0x50, 0x8f, 0x9f, 0x45,
                    256:                0x28, 0xec, 0xea, 0x23, 0xc4, 0x36, 0xd9, 0x4b, 0x5e, 0x8f,
                    257:                0xcd, 0x4f, 0x68, 0x1e, 0x30, 0xa6, 0xac, 0x00, 0xa9, 0x70,
                    258:                0x4a, 0x18, 0x8a, 0x03),
                    259:          chunk_from_chars(
                    260:                0x11, 0x2d, 0xb3, 0x08, 0x97, 0x6e, 0x38, 0x8f, 0x5f, 0x5e,
                    261:                0xb0, 0xae, 0x8f, 0x5f, 0x59, 0x1d, 0xff, 0x74, 0xf4, 0x44),
                    262:          chunk_from_chars(
                    263:                0xcb, 0x36, 0xcc, 0x6a, 0x82, 0x2c, 0x49, 0x40, 0xfb, 0x08,
                    264:                0x04, 0xf6, 0x3a, 0x4f, 0x20, 0x2b, 0xe5, 0x73, 0x43, 0x2f),
                    265:        },
                    266:        /* Test SHA(abc) */
                    267:        { chunk_from_chars(
                    268:                0x30, 0x2e, 0x02, 0x01, 0x00, 0x30, 0x05, 0x06, 0x03, 0x2b,
                    269:                0x65, 0x70, 0x04, 0x22, 0x04, 0x20, 0x83, 0x3f, 0xe6, 0x24,
                    270:                0x09, 0x23, 0x7b, 0x9d, 0x62, 0xec, 0x77, 0x58, 0x75, 0x20,
                    271:                0x91, 0x1e, 0x9a, 0x75, 0x9c, 0xec, 0x1d, 0x19, 0x75, 0x5b,
                    272:                0x7d, 0xa9, 0x01, 0xb9, 0x6d, 0xca, 0x3d, 0x42),
                    273:          chunk_from_chars(
                    274:                0x30, 0x2a, 0x30, 0x05, 0x06, 0x03, 0x2b, 0x65, 0x70, 0x03,
                    275:                0x21, 0x00, 0xec, 0x17, 0x2b, 0x93, 0xad, 0x5e, 0x56, 0x3b,
                    276:                0xf4, 0x93, 0x2c, 0x70, 0xe1, 0x24, 0x50, 0x34, 0xc3, 0x54,
                    277:                0x67, 0xef, 0x2e, 0xfd, 0x4d, 0x64, 0xeb, 0xf8, 0x19, 0x68,
                    278:                0x34, 0x67, 0xe2, 0xbf),
                    279:          chunk_from_chars(
                    280:                0xdd, 0xaf, 0x35, 0xa1, 0x93, 0x61, 0x7a, 0xba, 0xcc, 0x41,
                    281:                0x73, 0x49, 0xae, 0x20, 0x41, 0x31, 0x12, 0xe6, 0xfa, 0x4e,
                    282:                0x89, 0xa9, 0x7e, 0xa2, 0x0a, 0x9e, 0xee, 0xe6, 0x4b, 0x55,
                    283:                0xd3, 0x9a, 0x21, 0x92, 0x99, 0x2a, 0x27, 0x4f, 0xc1, 0xa8,
                    284:                0x36, 0xba, 0x3c, 0x23, 0xa3, 0xfe, 0xeb, 0xbd, 0x45, 0x4d,
                    285:                0x44, 0x23, 0x64, 0x3c, 0xe8, 0x0e, 0x2a, 0x9a, 0xc9, 0x4f,
                    286:                0xa5, 0x4c, 0xa4, 0x9f),
                    287:          chunk_from_chars(
                    288:                0xdc, 0x2a, 0x44, 0x59, 0xe7, 0x36, 0x96, 0x33, 0xa5, 0x2b,
                    289:                0x1b, 0xf2, 0x77, 0x83, 0x9a, 0x00, 0x20, 0x10, 0x09, 0xa3,
                    290:                0xef, 0xbf, 0x3e, 0xcb, 0x69, 0xbe, 0xa2, 0x18, 0x6c, 0x26,
                    291:                0xb5, 0x89, 0x09, 0x35, 0x1f, 0xc9, 0xac, 0x90, 0xb3, 0xec,
                    292:                0xfd, 0xfb, 0xc7, 0xc6, 0x64, 0x31, 0xe0, 0x30, 0x3d, 0xca,
                    293:                0x17, 0x9c, 0x13, 0x8a, 0xc1, 0x7a, 0xd9, 0xbe, 0xf1, 0x17,
                    294:                0x73, 0x31, 0xa7, 0x04),
                    295:          chunk_from_chars(
                    296:                0x26, 0x4c, 0xa5, 0x7f, 0x89, 0x6d, 0x64, 0x81, 0xd1, 0x87,
                    297:                0xe9, 0x89, 0x47, 0x29, 0x5a, 0xfe, 0xe3, 0x6d, 0x82, 0x44),
                    298:          chunk_from_chars(
                    299:                0x27, 0x88, 0xfc, 0x14, 0xb1, 0xcd, 0xd0, 0x24, 0xd5, 0x9d,
                    300:                0x31, 0x65, 0x59, 0x63, 0x69, 0xcf, 0xaf, 0x50, 0x10, 0xe7),
                    301:        }
                    302: };
                    303: 
                    304: START_TEST(test_ed25519_sign)
                    305: {
                    306:        private_key_t *key;
                    307:        public_key_t *pubkey, *public;
                    308:        chunk_t sig, encoding, fp;
                    309: 
                    310:        /* load private key */
                    311:        key = lib->creds->create(lib->creds, CRED_PRIVATE_KEY, KEY_ED25519,
                    312:                                        BUILD_BLOB_ASN1_DER, sig_tests[_i].key, BUILD_END);
                    313:        ck_assert(key != NULL);
                    314:        ck_assert(key->get_encoding(key, PRIVKEY_ASN1_DER, &encoding));
                    315:        ck_assert_chunk_eq(encoding, sig_tests[_i].key);
                    316:        chunk_free(&encoding);
                    317: 
                    318:        ck_assert(key->get_fingerprint(key, KEYID_PUBKEY_SHA1, &fp));
                    319:        ck_assert_chunk_eq(sig_tests[_i].fp_pk, fp);
                    320:        ck_assert(key->get_fingerprint(key, KEYID_PUBKEY_INFO_SHA1, &fp));
                    321:        ck_assert_chunk_eq(sig_tests[_i].fp_spki, fp);
                    322: 
                    323:        /* load public key */
                    324:        pubkey = lib->creds->create(lib->creds, CRED_PUBLIC_KEY, KEY_ED25519,
                    325:                                        BUILD_BLOB_ASN1_DER, sig_tests[_i].pubkey, BUILD_END);
                    326:        ck_assert(pubkey != NULL);
                    327:        ck_assert(pubkey->get_encoding(pubkey, PUBKEY_SPKI_ASN1_DER, &encoding));
                    328:        ck_assert_chunk_eq(encoding, sig_tests[_i].pubkey);
                    329:        chunk_free(&encoding);
                    330: 
                    331:        ck_assert(pubkey->get_fingerprint(pubkey, KEYID_PUBKEY_SHA1, &fp));
                    332:        ck_assert_chunk_eq(sig_tests[_i].fp_pk, fp);
                    333:        ck_assert(pubkey->get_fingerprint(pubkey, KEYID_PUBKEY_INFO_SHA1, &fp));
                    334:        ck_assert_chunk_eq(sig_tests[_i].fp_spki, fp);
                    335: 
                    336:        /* compare public keys */
                    337:        public = key->get_public_key(key);
                    338:        ck_assert(public != NULL);
                    339:        ck_assert(public->equals(public, pubkey));
                    340: 
                    341:        /* sign */
                    342:        ck_assert(key->sign(key, SIGN_ED25519, NULL, sig_tests[_i].msg, &sig));
                    343:        ck_assert(sig.len == 64);
                    344:        ck_assert_chunk_eq(sig, sig_tests[_i].sig);
                    345: 
                    346:        /* verify */
                    347:        ck_assert(pubkey->verify(pubkey, SIGN_ED25519, NULL, sig_tests[_i].msg,
                    348:                                                         sig_tests[_i].sig));
                    349: 
                    350:        /* cleanup */
                    351:        key->destroy(key);
                    352:        pubkey->destroy(pubkey);
                    353:        public->destroy(public);
                    354:        chunk_free(&sig);
                    355: }
                    356: END_TEST
                    357: 
                    358: START_TEST(test_ed25519_gen)
                    359: {
                    360:        private_key_t *key, *key2;
                    361:        public_key_t *pubkey, *pubkey2;
                    362:        chunk_t msg = chunk_from_str("Ed25519"), sig, encoding, fp_priv, fp_pub;
                    363: 
                    364:        /* generate private key */
                    365:        key = lib->creds->create(lib->creds, CRED_PRIVATE_KEY, KEY_ED25519,
                    366:                                                         BUILD_KEY_SIZE, 256, BUILD_END);
                    367:        ck_assert(key != NULL);
                    368:        ck_assert(key->get_type(key) == KEY_ED25519);
                    369:        ck_assert(key->get_keysize(key) == 256);
                    370:        ck_assert(!key->get_encoding(key, PRIVKEY_PGP, &encoding));
                    371:        ck_assert(key->get_encoding(key, PRIVKEY_PEM, &encoding));
                    372:        ck_assert(encoding.ptr != NULL);
                    373:        ck_assert(strstr(encoding.ptr, "PRIVATE KEY"));
                    374:        chunk_free(&encoding);
                    375: 
                    376:        /* clone private key */
                    377:        key2 = key->get_ref(key);
                    378:        ck_assert(key2);
                    379:        key2->destroy(key2);
                    380: 
                    381:        /* decryption not supported */
                    382:        ck_assert(!key->decrypt(key, ENCRYPT_UNKNOWN, msg, NULL));
                    383: 
                    384:        /* wrong signature scheme */
                    385:        ck_assert(!key->sign(key, SIGN_ED448, NULL, msg, &sig));
                    386: 
                    387:        /* correct signature scheme*/
                    388:        ck_assert(key->sign(key, SIGN_ED25519, NULL, msg, &sig));
                    389: 
                    390:        /* export public key */
                    391:        pubkey = key->get_public_key(key);
                    392:        ck_assert(pubkey != NULL);
                    393:        ck_assert(pubkey->get_type(pubkey) == KEY_ED25519);
                    394:        ck_assert(pubkey->get_keysize(pubkey) == 256);
                    395:        ck_assert(pubkey->get_encoding(pubkey, PUBKEY_PEM, &encoding));
                    396:        ck_assert(encoding.ptr != NULL);
                    397:        ck_assert(strstr(encoding.ptr, "PUBLIC KEY"));
                    398:        chunk_free(&encoding);
                    399: 
                    400:        /* generate and compare public and private key fingerprints */
                    401:        ck_assert(!key->get_fingerprint(key, KEYID_PGPV4, &fp_priv));
                    402:        ck_assert(key->get_fingerprint(key, KEYID_PUBKEY_SHA1, &fp_priv));
                    403:        ck_assert(key->get_fingerprint(key, KEYID_PUBKEY_SHA1, &fp_priv));
                    404:        ck_assert(fp_priv.ptr != NULL);
                    405:        ck_assert(!pubkey->get_fingerprint(pubkey, KEYID_PGPV4, &fp_pub));
                    406:        ck_assert(pubkey->get_fingerprint(pubkey, KEYID_PUBKEY_SHA1, &fp_pub));
                    407:        ck_assert(pubkey->get_fingerprint(pubkey, KEYID_PUBKEY_SHA1, &fp_pub));
                    408:        ck_assert(fp_pub.ptr != NULL);
                    409:        ck_assert_chunk_eq(fp_pub, fp_priv);
                    410: 
                    411:        /* clone public key */
                    412:        pubkey2 = pubkey->get_ref(pubkey);
                    413:        ck_assert(pubkey2 != NULL);
                    414:        pubkey2->destroy(pubkey2);
                    415: 
                    416:        /* encryption not supported */
                    417:        ck_assert(!pubkey->encrypt(pubkey, ENCRYPT_UNKNOWN, msg, NULL));
                    418: 
                    419:        /* verify with wrong signature scheme */
                    420:        ck_assert(!pubkey->verify(pubkey, SIGN_ED448, NULL, msg, sig));
                    421: 
                    422:        /* verify with correct signature scheme */
                    423:        ck_assert(pubkey->verify(pubkey, SIGN_ED25519, NULL, msg, sig));
                    424: 
                    425:        /* cleanup */
                    426:        key->destroy(key);
                    427:        pubkey->destroy(pubkey);
                    428:        chunk_free(&sig);
                    429: }
                    430: END_TEST
                    431: 
                    432: START_TEST(test_ed25519_speed)
                    433: {
                    434:        private_key_t *key;
                    435:        public_key_t *pubkey;
                    436:        chunk_t msg = chunk_from_str("Hello Ed25519"), sig;
                    437:        int i, count = 1000;
                    438: 
                    439: #ifdef HAVE_CLOCK_GETTIME
                    440:        struct timespec start, stop;
                    441:        clock_gettime(CLOCK_THREAD_CPUTIME_ID, &start);
                    442: #endif
                    443: 
                    444:        for (i = 0; i < count; i++)
                    445:        {
                    446:                key = lib->creds->create(lib->creds, CRED_PRIVATE_KEY, KEY_ED25519,
                    447:                                                                 BUILD_KEY_SIZE, 256, BUILD_END);
                    448:                ck_assert(key != NULL);
                    449:                ck_assert(key->sign(key, SIGN_ED25519, NULL, msg, &sig));
                    450:                pubkey = key->get_public_key(key);
                    451:                ck_assert(pubkey != NULL);
                    452:                ck_assert(pubkey->verify(pubkey, SIGN_ED25519, NULL, msg, sig));
                    453:                key->destroy(key);
                    454:                pubkey->destroy(pubkey);
                    455:                chunk_free(&sig);
                    456:        }
                    457: 
                    458: #ifdef HAVE_CLOCK_GETTIME
                    459:        clock_gettime(CLOCK_THREAD_CPUTIME_ID, &stop);
                    460:        DBG0(DBG_LIB, "%d Ed25519 keys and signatures in %d ms\n", count,
                    461:                                  (stop.tv_nsec - start.tv_nsec) / 1000000 +
                    462:                                  (stop.tv_sec - start.tv_sec) * 1000);
                    463: #endif
                    464: }
                    465: END_TEST
                    466: 
                    467: static chunk_t zero_pk = chunk_from_chars(
                    468:        0x30, 0x2a, 0x30, 0x05, 0x06, 0x03, 0x2b, 0x65, 0x70, 0x03,
                    469:        0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                    470:        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                    471:        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                    472:        0x00, 0x00, 0x00, 0x00);
                    473: 
                    474: /* sig_tests[0].sig with s+L */
                    475: static chunk_t malleable_sig = chunk_from_chars(
                    476:        0xe5, 0x56, 0x43, 0x00, 0xc3, 0x60, 0xac, 0x72, 0x90, 0x86,
                    477:        0xe2, 0xcc, 0x80, 0x6e, 0x82, 0x8a, 0x84, 0x87, 0x7f, 0x1e,
                    478:        0xb8, 0xe5, 0xd9, 0x74, 0xd8, 0x73, 0xe0, 0x65, 0x22, 0x49,
                    479:        0x01, 0x55, 0x4c, 0x8c, 0x78, 0x72, 0xaa, 0x06, 0x4e, 0x04,
                    480:        0x9d, 0xbb, 0x30, 0x13, 0xfb, 0xf2, 0x93, 0x80, 0xd2, 0x5b,
                    481:        0xf5, 0xf0, 0x59, 0x5b, 0xbe, 0x24, 0x65, 0x51, 0x41, 0x43,
                    482:        0x8e, 0x7a, 0x10, 0x1b);
                    483: 
                    484: START_TEST(test_ed25519_fail)
                    485: {
                    486:        private_key_t *key;
                    487:        public_key_t *pubkey;
                    488:        chunk_t blob, sig;
                    489:        uint8_t sig1[64];
                    490: 
                    491:        /* Invalid private key format */
                    492:        key = lib->creds->create(lib->creds, CRED_PRIVATE_KEY, KEY_ED25519,
                    493:                                        BUILD_BLOB_ASN1_DER, chunk_empty, BUILD_END);
                    494:        ck_assert(key == NULL);
                    495: 
                    496:        key = lib->creds->create(lib->creds, CRED_PRIVATE_KEY, KEY_ED25519,
                    497:                                        BUILD_EDDSA_PRIV_ASN1_DER, chunk_empty, BUILD_END);
                    498:        ck_assert(key == NULL);
                    499: 
                    500:        blob = chunk_from_chars(0x04, 0x01, 0x9d);
                    501:        key = lib->creds->create(lib->creds, CRED_PRIVATE_KEY, KEY_ED25519,
                    502:                                        BUILD_EDDSA_PRIV_ASN1_DER, blob, BUILD_END);
                    503:        ck_assert(key == NULL);
                    504: 
                    505:        /* Invalid public key format */
                    506:        pubkey = lib->creds->create(lib->creds, CRED_PUBLIC_KEY, KEY_ED25519,
                    507:                                        BUILD_BLOB_ASN1_DER, chunk_empty, BUILD_END);
                    508:        ck_assert(pubkey == NULL);
                    509: 
                    510:        blob = chunk_from_chars(0x30, 0x0b, 0x30, 0x05, 0x06, 0x03, 0x2b, 0x65,
                    511:                                                        0x70, 0x03, 0x02, 0x00, 0xd7);
                    512:        pubkey = lib->creds->create(lib->creds, CRED_PUBLIC_KEY, KEY_ED25519,
                    513:                                        BUILD_BLOB_ASN1_DER, blob, BUILD_END);
                    514:        ck_assert(pubkey == NULL);
                    515: 
                    516:        blob = chunk_from_chars(0x30, 0x0b, 0x30, 0x05, 0x06, 0x03, 0x2b, 0x00,
                    517:                                                        0x70, 0x03, 0x02, 0x00, 0xd7);
                    518:        pubkey = lib->creds->create(lib->creds, CRED_PUBLIC_KEY, KEY_ED25519,
                    519:                                        BUILD_BLOB_ASN1_DER, blob, BUILD_END);
                    520:        ck_assert(pubkey == NULL);
                    521: 
                    522:        pubkey = lib->creds->create(lib->creds, CRED_PUBLIC_KEY, KEY_ED25519,
                    523:                                        BUILD_KEY_SIZE, 256, BUILD_BLOB_ASN1_DER, blob, BUILD_END);
                    524:        ck_assert(pubkey == NULL);
                    525: 
                    526:        /* Invalid signature format */
                    527:        pubkey = lib->creds->create(lib->creds, CRED_PUBLIC_KEY, KEY_ED25519,
                    528:                                        BUILD_BLOB_ASN1_DER, sig_tests[0].pubkey, BUILD_END);
                    529:        ck_assert(pubkey != NULL);
                    530: 
                    531:        ck_assert(!pubkey->verify(pubkey, SIGN_ED25519, NULL, chunk_empty,
                    532:                                                          chunk_empty));
                    533: 
                    534:        /* RFC 8032, section 5.1.7 requires that 0 <= s < L to prevent signature
                    535:         * malleability.  Only a warning because Botan, OpenSSL and wolfSSL are
                    536:         * all vulnerable to this. */
                    537:        if (pubkey->verify(pubkey, SIGN_ED25519, NULL, sig_tests[0].msg,
                    538:                                           malleable_sig))
                    539:        {
                    540:                warn("Ed25519 signature verification is vulnerable to malleable "
                    541:                         "signatures");
                    542:        }
                    543: 
                    544:        /* malformed signature */
                    545:        sig = chunk_create(sig1, 64);
                    546:        memcpy(sig1, sig_tests[0].sig.ptr, 64);
                    547:        sig1[63] |= 0xe0;
                    548:        ck_assert(!pubkey->verify(pubkey, SIGN_ED25519, NULL, sig_tests[0].msg,
                    549:                                                          sig));
                    550: 
                    551:        /* wrong signature */
                    552:        memcpy(sig1, sig_tests[0].sig.ptr, 64);
                    553:        sig1[0] = 0xe4;
                    554:        ck_assert(!pubkey->verify(pubkey, SIGN_ED25519, NULL, sig_tests[0].msg,
                    555:                                                          sig));
                    556: 
                    557:        /* detect all-zeroes public key */
                    558:        pubkey->destroy(pubkey);
                    559:        pubkey = lib->creds->create(lib->creds, CRED_PUBLIC_KEY, KEY_ED25519,
                    560:                                        BUILD_BLOB_ASN1_DER, zero_pk, BUILD_END);
                    561:        ck_assert(pubkey != NULL);
                    562:        ck_assert(!pubkey->verify(pubkey, SIGN_ED25519, NULL, sig_tests[0].msg,
                    563:                                                          sig));
                    564:        pubkey->destroy(pubkey);
                    565: }
                    566: END_TEST
                    567: 
                    568: Suite *ed25519_suite_create()
                    569: {
                    570:        Suite *s;
                    571:        TCase *tc;
                    572: 
                    573:        s = suite_create("ed25519");
                    574: 
                    575:        tc = tcase_create("ed25519_sign");
                    576:        tcase_add_loop_test(tc, test_ed25519_sign, 0, countof(sig_tests));
                    577:        suite_add_tcase(s, tc);
                    578: 
                    579:        tc = tcase_create("ed25519_gen");
                    580:        tcase_add_test(tc, test_ed25519_gen);
                    581:        suite_add_tcase(s, tc);
                    582: 
                    583:        tc = tcase_create("ed25519_fail");
                    584:        tcase_add_test(tc, test_ed25519_fail);
                    585:        suite_add_tcase(s, tc);
                    586: 
                    587:        tc = tcase_create("ed25519_speed");
                    588:        test_case_set_timeout(tc, 10);
                    589:        tcase_add_test(tc, test_ed25519_speed);
                    590:        suite_add_tcase(s, tc);
                    591: 
                    592:        return s;
                    593: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>