Home | History | Annotate | Line # | Download | only in test
      1      1.1  christos /*
      2      1.1  christos  * Copyright 2017-2023 The OpenSSL Project Authors. All Rights Reserved.
      3      1.1  christos  *
      4      1.1  christos  * Licensed under the Apache License 2.0 (the "License").  You may not use
      5      1.1  christos  * this file except in compliance with the License.  You can obtain a copy
      6      1.1  christos  * in the file LICENSE in the source distribution or at
      7      1.1  christos  * https://www.openssl.org/source/license.html
      8      1.1  christos  */
      9      1.1  christos #include <stdio.h>
     10      1.1  christos #include <string.h>
     11      1.1  christos #include <openssl/e_os2.h>
     12      1.1  christos #include <openssl/evp.h>
     13      1.1  christos #include "crypto/ecx.h"
     14      1.1  christos #include "curve448_local.h"
     15      1.1  christos #include "testutil.h"
     16      1.1  christos 
     17      1.1  christos static unsigned int max = 1000;
     18      1.1  christos static unsigned int verbose = 0;
     19      1.1  christos 
     20      1.1  christos /* Test vectors from RFC7748 for X448 */
     21      1.1  christos 
     22      1.1  christos static const uint8_t in_scalar1[56] = {
     23      1.1  christos     0x3d, 0x26, 0x2f, 0xdd, 0xf9, 0xec, 0x8e, 0x88, 0x49, 0x52, 0x66, 0xfe,
     24      1.1  christos     0xa1, 0x9a, 0x34, 0xd2, 0x88, 0x82, 0xac, 0xef, 0x04, 0x51, 0x04, 0xd0,
     25      1.1  christos     0xd1, 0xaa, 0xe1, 0x21, 0x70, 0x0a, 0x77, 0x9c, 0x98, 0x4c, 0x24, 0xf8,
     26      1.1  christos     0xcd, 0xd7, 0x8f, 0xbf, 0xf4, 0x49, 0x43, 0xeb, 0xa3, 0x68, 0xf5, 0x4b,
     27      1.1  christos     0x29, 0x25, 0x9a, 0x4f, 0x1c, 0x60, 0x0a, 0xd3
     28      1.1  christos };
     29      1.1  christos 
     30      1.1  christos static const uint8_t in_u1[56] = {
     31      1.1  christos     0x06, 0xfc, 0xe6, 0x40, 0xfa, 0x34, 0x87, 0xbf, 0xda, 0x5f, 0x6c, 0xf2,
     32      1.1  christos     0xd5, 0x26, 0x3f, 0x8a, 0xad, 0x88, 0x33, 0x4c, 0xbd, 0x07, 0x43, 0x7f,
     33      1.1  christos     0x02, 0x0f, 0x08, 0xf9, 0x81, 0x4d, 0xc0, 0x31, 0xdd, 0xbd, 0xc3, 0x8c,
     34      1.1  christos     0x19, 0xc6, 0xda, 0x25, 0x83, 0xfa, 0x54, 0x29, 0xdb, 0x94, 0xad, 0xa1,
     35      1.1  christos     0x8a, 0xa7, 0xa7, 0xfb, 0x4e, 0xf8, 0xa0, 0x86
     36      1.1  christos };
     37      1.1  christos 
     38      1.1  christos static const uint8_t out_u1[56] = {
     39      1.1  christos     0xce, 0x3e, 0x4f, 0xf9, 0x5a, 0x60, 0xdc, 0x66, 0x97, 0xda, 0x1d, 0xb1,
     40      1.1  christos     0xd8, 0x5e, 0x6a, 0xfb, 0xdf, 0x79, 0xb5, 0x0a, 0x24, 0x12, 0xd7, 0x54,
     41      1.1  christos     0x6d, 0x5f, 0x23, 0x9f, 0xe1, 0x4f, 0xba, 0xad, 0xeb, 0x44, 0x5f, 0xc6,
     42      1.1  christos     0x6a, 0x01, 0xb0, 0x77, 0x9d, 0x98, 0x22, 0x39, 0x61, 0x11, 0x1e, 0x21,
     43      1.1  christos     0x76, 0x62, 0x82, 0xf7, 0x3d, 0xd9, 0x6b, 0x6f
     44      1.1  christos };
     45      1.1  christos 
     46      1.1  christos static const uint8_t in_scalar2[56] = {
     47      1.1  christos     0x20, 0x3d, 0x49, 0x44, 0x28, 0xb8, 0x39, 0x93, 0x52, 0x66, 0x5d, 0xdc,
     48      1.1  christos     0xa4, 0x2f, 0x9d, 0xe8, 0xfe, 0xf6, 0x00, 0x90, 0x8e, 0x0d, 0x46, 0x1c,
     49      1.1  christos     0xb0, 0x21, 0xf8, 0xc5, 0x38, 0x34, 0x5d, 0xd7, 0x7c, 0x3e, 0x48, 0x06,
     50      1.1  christos     0xe2, 0x5f, 0x46, 0xd3, 0x31, 0x5c, 0x44, 0xe0, 0xa5, 0xb4, 0x37, 0x12,
     51      1.1  christos     0x82, 0xdd, 0x2c, 0x8d, 0x5b, 0xe3, 0x09, 0x5f
     52      1.1  christos };
     53      1.1  christos 
     54      1.1  christos static const uint8_t in_u2[56] = {
     55      1.1  christos     0x0f, 0xbc, 0xc2, 0xf9, 0x93, 0xcd, 0x56, 0xd3, 0x30, 0x5b, 0x0b, 0x7d,
     56      1.1  christos     0x9e, 0x55, 0xd4, 0xc1, 0xa8, 0xfb, 0x5d, 0xbb, 0x52, 0xf8, 0xe9, 0xa1,
     57      1.1  christos     0xe9, 0xb6, 0x20, 0x1b, 0x16, 0x5d, 0x01, 0x58, 0x94, 0xe5, 0x6c, 0x4d,
     58      1.1  christos     0x35, 0x70, 0xbe, 0xe5, 0x2f, 0xe2, 0x05, 0xe2, 0x8a, 0x78, 0xb9, 0x1c,
     59      1.1  christos     0xdf, 0xbd, 0xe7, 0x1c, 0xe8, 0xd1, 0x57, 0xdb
     60      1.1  christos };
     61      1.1  christos 
     62      1.1  christos static const uint8_t out_u2[56] = {
     63      1.1  christos     0x88, 0x4a, 0x02, 0x57, 0x62, 0x39, 0xff, 0x7a, 0x2f, 0x2f, 0x63, 0xb2,
     64      1.1  christos     0xdb, 0x6a, 0x9f, 0xf3, 0x70, 0x47, 0xac, 0x13, 0x56, 0x8e, 0x1e, 0x30,
     65      1.1  christos     0xfe, 0x63, 0xc4, 0xa7, 0xad, 0x1b, 0x3e, 0xe3, 0xa5, 0x70, 0x0d, 0xf3,
     66      1.1  christos     0x43, 0x21, 0xd6, 0x20, 0x77, 0xe6, 0x36, 0x33, 0xc5, 0x75, 0xc1, 0xc9,
     67      1.1  christos     0x54, 0x51, 0x4e, 0x99, 0xda, 0x7c, 0x17, 0x9d
     68      1.1  christos };
     69      1.1  christos 
     70      1.1  christos static const uint8_t in_u3[56] = {
     71      1.1  christos     0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     72      1.1  christos     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     73      1.1  christos     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     74      1.1  christos     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     75      1.1  christos     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
     76      1.1  christos };
     77      1.1  christos 
     78      1.1  christos static const uint8_t out_u3[3][56] = {
     79  1.1.1.2  christos     { 0x3f, 0x48, 0x2c, 0x8a, 0x9f, 0x19, 0xb0, 0x1e, 0x6c, 0x46, 0xee, 0x97,
     80      1.1  christos         0x11, 0xd9, 0xdc, 0x14, 0xfd, 0x4b, 0xf6, 0x7a, 0xf3, 0x07, 0x65, 0xc2,
     81      1.1  christos         0xae, 0x2b, 0x84, 0x6a, 0x4d, 0x23, 0xa8, 0xcd, 0x0d, 0xb8, 0x97, 0x08,
     82      1.1  christos         0x62, 0x39, 0x49, 0x2c, 0xaf, 0x35, 0x0b, 0x51, 0xf8, 0x33, 0x86, 0x8b,
     83  1.1.1.2  christos         0x9b, 0xc2, 0xb3, 0xbc, 0xa9, 0xcf, 0x41, 0x13 },
     84  1.1.1.2  christos     { 0xaa, 0x3b, 0x47, 0x49, 0xd5, 0x5b, 0x9d, 0xaf, 0x1e, 0x5b, 0x00, 0x28,
     85      1.1  christos         0x88, 0x26, 0xc4, 0x67, 0x27, 0x4c, 0xe3, 0xeb, 0xbd, 0xd5, 0xc1, 0x7b,
     86      1.1  christos         0x97, 0x5e, 0x09, 0xd4, 0xaf, 0x6c, 0x67, 0xcf, 0x10, 0xd0, 0x87, 0x20,
     87      1.1  christos         0x2d, 0xb8, 0x82, 0x86, 0xe2, 0xb7, 0x9f, 0xce, 0xea, 0x3e, 0xc3, 0x53,
     88  1.1.1.2  christos         0xef, 0x54, 0xfa, 0xa2, 0x6e, 0x21, 0x9f, 0x38 },
     89  1.1.1.2  christos     { 0x07, 0x7f, 0x45, 0x36, 0x81, 0xca, 0xca, 0x36, 0x93, 0x19, 0x84, 0x20,
     90      1.1  christos         0xbb, 0xe5, 0x15, 0xca, 0xe0, 0x00, 0x24, 0x72, 0x51, 0x9b, 0x3e, 0x67,
     91      1.1  christos         0x66, 0x1a, 0x7e, 0x89, 0xca, 0xb9, 0x46, 0x95, 0xc8, 0xf4, 0xbc, 0xd6,
     92      1.1  christos         0x6e, 0x61, 0xb9, 0xb9, 0xc9, 0x46, 0xda, 0x8d, 0x52, 0x4d, 0xe3, 0xd6,
     93  1.1.1.2  christos         0x9b, 0xd9, 0xd9, 0xd6, 0x6b, 0x99, 0x7e, 0x37 }
     94      1.1  christos };
     95      1.1  christos 
     96      1.1  christos /* Test vectors from RFC8032 for Ed448 */
     97      1.1  christos 
     98      1.1  christos /* Pure Ed448 */
     99      1.1  christos 
    100      1.1  christos static const uint8_t privkey1[57] = {
    101      1.1  christos     0x6c, 0x82, 0xa5, 0x62, 0xcb, 0x80, 0x8d, 0x10, 0xd6, 0x32, 0xbe, 0x89,
    102      1.1  christos     0xc8, 0x51, 0x3e, 0xbf, 0x6c, 0x92, 0x9f, 0x34, 0xdd, 0xfa, 0x8c, 0x9f,
    103      1.1  christos     0x63, 0xc9, 0x96, 0x0e, 0xf6, 0xe3, 0x48, 0xa3, 0x52, 0x8c, 0x8a, 0x3f,
    104      1.1  christos     0xcc, 0x2f, 0x04, 0x4e, 0x39, 0xa3, 0xfc, 0x5b, 0x94, 0x49, 0x2f, 0x8f,
    105      1.1  christos     0x03, 0x2e, 0x75, 0x49, 0xa2, 0x00, 0x98, 0xf9, 0x5b
    106      1.1  christos };
    107      1.1  christos 
    108      1.1  christos static const uint8_t pubkey1[57] = {
    109      1.1  christos     0x5f, 0xd7, 0x44, 0x9b, 0x59, 0xb4, 0x61, 0xfd, 0x2c, 0xe7, 0x87, 0xec,
    110      1.1  christos     0x61, 0x6a, 0xd4, 0x6a, 0x1d, 0xa1, 0x34, 0x24, 0x85, 0xa7, 0x0e, 0x1f,
    111      1.1  christos     0x8a, 0x0e, 0xa7, 0x5d, 0x80, 0xe9, 0x67, 0x78, 0xed, 0xf1, 0x24, 0x76,
    112      1.1  christos     0x9b, 0x46, 0xc7, 0x06, 0x1b, 0xd6, 0x78, 0x3d, 0xf1, 0xe5, 0x0f, 0x6c,
    113      1.1  christos     0xd1, 0xfa, 0x1a, 0xbe, 0xaf, 0xe8, 0x25, 0x61, 0x80
    114      1.1  christos };
    115      1.1  christos 
    116      1.1  christos static const uint8_t sig1[114] = {
    117      1.1  christos     0x53, 0x3a, 0x37, 0xf6, 0xbb, 0xe4, 0x57, 0x25, 0x1f, 0x02, 0x3c, 0x0d,
    118      1.1  christos     0x88, 0xf9, 0x76, 0xae, 0x2d, 0xfb, 0x50, 0x4a, 0x84, 0x3e, 0x34, 0xd2,
    119      1.1  christos     0x07, 0x4f, 0xd8, 0x23, 0xd4, 0x1a, 0x59, 0x1f, 0x2b, 0x23, 0x3f, 0x03,
    120      1.1  christos     0x4f, 0x62, 0x82, 0x81, 0xf2, 0xfd, 0x7a, 0x22, 0xdd, 0xd4, 0x7d, 0x78,
    121      1.1  christos     0x28, 0xc5, 0x9b, 0xd0, 0xa2, 0x1b, 0xfd, 0x39, 0x80, 0xff, 0x0d, 0x20,
    122      1.1  christos     0x28, 0xd4, 0xb1, 0x8a, 0x9d, 0xf6, 0x3e, 0x00, 0x6c, 0x5d, 0x1c, 0x2d,
    123      1.1  christos     0x34, 0x5b, 0x92, 0x5d, 0x8d, 0xc0, 0x0b, 0x41, 0x04, 0x85, 0x2d, 0xb9,
    124      1.1  christos     0x9a, 0xc5, 0xc7, 0xcd, 0xda, 0x85, 0x30, 0xa1, 0x13, 0xa0, 0xf4, 0xdb,
    125      1.1  christos     0xb6, 0x11, 0x49, 0xf0, 0x5a, 0x73, 0x63, 0x26, 0x8c, 0x71, 0xd9, 0x58,
    126      1.1  christos     0x08, 0xff, 0x2e, 0x65, 0x26, 0x00
    127      1.1  christos };
    128      1.1  christos 
    129      1.1  christos static const uint8_t privkey2[57] = {
    130      1.1  christos     0xc4, 0xea, 0xb0, 0x5d, 0x35, 0x70, 0x07, 0xc6, 0x32, 0xf3, 0xdb, 0xb4,
    131      1.1  christos     0x84, 0x89, 0x92, 0x4d, 0x55, 0x2b, 0x08, 0xfe, 0x0c, 0x35, 0x3a, 0x0d,
    132      1.1  christos     0x4a, 0x1f, 0x00, 0xac, 0xda, 0x2c, 0x46, 0x3a, 0xfb, 0xea, 0x67, 0xc5,
    133      1.1  christos     0xe8, 0xd2, 0x87, 0x7c, 0x5e, 0x3b, 0xc3, 0x97, 0xa6, 0x59, 0x94, 0x9e,
    134      1.1  christos     0xf8, 0x02, 0x1e, 0x95, 0x4e, 0x0a, 0x12, 0x27, 0x4e
    135      1.1  christos };
    136      1.1  christos 
    137      1.1  christos static const uint8_t pubkey2[57] = {
    138      1.1  christos     0x43, 0xba, 0x28, 0xf4, 0x30, 0xcd, 0xff, 0x45, 0x6a, 0xe5, 0x31, 0x54,
    139      1.1  christos     0x5f, 0x7e, 0xcd, 0x0a, 0xc8, 0x34, 0xa5, 0x5d, 0x93, 0x58, 0xc0, 0x37,
    140      1.1  christos     0x2b, 0xfa, 0x0c, 0x6c, 0x67, 0x98, 0xc0, 0x86, 0x6a, 0xea, 0x01, 0xeb,
    141      1.1  christos     0x00, 0x74, 0x28, 0x02, 0xb8, 0x43, 0x8e, 0xa4, 0xcb, 0x82, 0x16, 0x9c,
    142      1.1  christos     0x23, 0x51, 0x60, 0x62, 0x7b, 0x4c, 0x3a, 0x94, 0x80
    143      1.1  christos };
    144      1.1  christos 
    145      1.1  christos static const uint8_t msg2[1] = {
    146      1.1  christos     0x03
    147      1.1  christos };
    148      1.1  christos 
    149      1.1  christos static const uint8_t sig2[114] = {
    150      1.1  christos     0x26, 0xb8, 0xf9, 0x17, 0x27, 0xbd, 0x62, 0x89, 0x7a, 0xf1, 0x5e, 0x41,
    151      1.1  christos     0xeb, 0x43, 0xc3, 0x77, 0xef, 0xb9, 0xc6, 0x10, 0xd4, 0x8f, 0x23, 0x35,
    152      1.1  christos     0xcb, 0x0b, 0xd0, 0x08, 0x78, 0x10, 0xf4, 0x35, 0x25, 0x41, 0xb1, 0x43,
    153      1.1  christos     0xc4, 0xb9, 0x81, 0xb7, 0xe1, 0x8f, 0x62, 0xde, 0x8c, 0xcd, 0xf6, 0x33,
    154      1.1  christos     0xfc, 0x1b, 0xf0, 0x37, 0xab, 0x7c, 0xd7, 0x79, 0x80, 0x5e, 0x0d, 0xbc,
    155      1.1  christos     0xc0, 0xaa, 0xe1, 0xcb, 0xce, 0xe1, 0xaf, 0xb2, 0xe0, 0x27, 0xdf, 0x36,
    156      1.1  christos     0xbc, 0x04, 0xdc, 0xec, 0xbf, 0x15, 0x43, 0x36, 0xc1, 0x9f, 0x0a, 0xf7,
    157      1.1  christos     0xe0, 0xa6, 0x47, 0x29, 0x05, 0xe7, 0x99, 0xf1, 0x95, 0x3d, 0x2a, 0x0f,
    158      1.1  christos     0xf3, 0x34, 0x8a, 0xb2, 0x1a, 0xa4, 0xad, 0xaf, 0xd1, 0xd2, 0x34, 0x44,
    159      1.1  christos     0x1c, 0xf8, 0x07, 0xc0, 0x3a, 0x00
    160      1.1  christos };
    161      1.1  christos 
    162      1.1  christos static const uint8_t privkey3[57] = {
    163      1.1  christos     0xc4, 0xea, 0xb0, 0x5d, 0x35, 0x70, 0x07, 0xc6, 0x32, 0xf3, 0xdb, 0xb4,
    164      1.1  christos     0x84, 0x89, 0x92, 0x4d, 0x55, 0x2b, 0x08, 0xfe, 0x0c, 0x35, 0x3a, 0x0d,
    165      1.1  christos     0x4a, 0x1f, 0x00, 0xac, 0xda, 0x2c, 0x46, 0x3a, 0xfb, 0xea, 0x67, 0xc5,
    166      1.1  christos     0xe8, 0xd2, 0x87, 0x7c, 0x5e, 0x3b, 0xc3, 0x97, 0xa6, 0x59, 0x94, 0x9e,
    167      1.1  christos     0xf8, 0x02, 0x1e, 0x95, 0x4e, 0x0a, 0x12, 0x27, 0x4e
    168      1.1  christos };
    169      1.1  christos 
    170      1.1  christos static const uint8_t pubkey3[57] = {
    171      1.1  christos     0x43, 0xba, 0x28, 0xf4, 0x30, 0xcd, 0xff, 0x45, 0x6a, 0xe5, 0x31, 0x54,
    172      1.1  christos     0x5f, 0x7e, 0xcd, 0x0a, 0xc8, 0x34, 0xa5, 0x5d, 0x93, 0x58, 0xc0, 0x37,
    173      1.1  christos     0x2b, 0xfa, 0x0c, 0x6c, 0x67, 0x98, 0xc0, 0x86, 0x6a, 0xea, 0x01, 0xeb,
    174      1.1  christos     0x00, 0x74, 0x28, 0x02, 0xb8, 0x43, 0x8e, 0xa4, 0xcb, 0x82, 0x16, 0x9c,
    175      1.1  christos     0x23, 0x51, 0x60, 0x62, 0x7b, 0x4c, 0x3a, 0x94, 0x80
    176      1.1  christos };
    177      1.1  christos 
    178      1.1  christos static const uint8_t msg3[1] = {
    179      1.1  christos     0x03
    180      1.1  christos };
    181      1.1  christos 
    182      1.1  christos static const uint8_t context3[3] = {
    183      1.1  christos     0x66, 0x6f, 0x6f
    184      1.1  christos };
    185      1.1  christos 
    186      1.1  christos static const uint8_t sig3[114] = {
    187      1.1  christos     0xd4, 0xf8, 0xf6, 0x13, 0x17, 0x70, 0xdd, 0x46, 0xf4, 0x08, 0x67, 0xd6,
    188      1.1  christos     0xfd, 0x5d, 0x50, 0x55, 0xde, 0x43, 0x54, 0x1f, 0x8c, 0x5e, 0x35, 0xab,
    189      1.1  christos     0xbc, 0xd0, 0x01, 0xb3, 0x2a, 0x89, 0xf7, 0xd2, 0x15, 0x1f, 0x76, 0x47,
    190      1.1  christos     0xf1, 0x1d, 0x8c, 0xa2, 0xae, 0x27, 0x9f, 0xb8, 0x42, 0xd6, 0x07, 0x21,
    191      1.1  christos     0x7f, 0xce, 0x6e, 0x04, 0x2f, 0x68, 0x15, 0xea, 0x00, 0x0c, 0x85, 0x74,
    192      1.1  christos     0x1d, 0xe5, 0xc8, 0xda, 0x11, 0x44, 0xa6, 0xa1, 0xab, 0xa7, 0xf9, 0x6d,
    193      1.1  christos     0xe4, 0x25, 0x05, 0xd7, 0xa7, 0x29, 0x85, 0x24, 0xfd, 0xa5, 0x38, 0xfc,
    194      1.1  christos     0xcb, 0xbb, 0x75, 0x4f, 0x57, 0x8c, 0x1c, 0xad, 0x10, 0xd5, 0x4d, 0x0d,
    195      1.1  christos     0x54, 0x28, 0x40, 0x7e, 0x85, 0xdc, 0xbc, 0x98, 0xa4, 0x91, 0x55, 0xc1,
    196      1.1  christos     0x37, 0x64, 0xe6, 0x6c, 0x3c, 0x00
    197      1.1  christos };
    198      1.1  christos 
    199      1.1  christos static const uint8_t privkey4[57] = {
    200      1.1  christos     0xcd, 0x23, 0xd2, 0x4f, 0x71, 0x42, 0x74, 0xe7, 0x44, 0x34, 0x32, 0x37,
    201      1.1  christos     0xb9, 0x32, 0x90, 0xf5, 0x11, 0xf6, 0x42, 0x5f, 0x98, 0xe6, 0x44, 0x59,
    202      1.1  christos     0xff, 0x20, 0x3e, 0x89, 0x85, 0x08, 0x3f, 0xfd, 0xf6, 0x05, 0x00, 0x55,
    203      1.1  christos     0x3a, 0xbc, 0x0e, 0x05, 0xcd, 0x02, 0x18, 0x4b, 0xdb, 0x89, 0xc4, 0xcc,
    204      1.1  christos     0xd6, 0x7e, 0x18, 0x79, 0x51, 0x26, 0x7e, 0xb3, 0x28
    205      1.1  christos };
    206      1.1  christos 
    207      1.1  christos static const uint8_t pubkey4[57] = {
    208      1.1  christos     0xdc, 0xea, 0x9e, 0x78, 0xf3, 0x5a, 0x1b, 0xf3, 0x49, 0x9a, 0x83, 0x1b,
    209      1.1  christos     0x10, 0xb8, 0x6c, 0x90, 0xaa, 0xc0, 0x1c, 0xd8, 0x4b, 0x67, 0xa0, 0x10,
    210      1.1  christos     0x9b, 0x55, 0xa3, 0x6e, 0x93, 0x28, 0xb1, 0xe3, 0x65, 0xfc, 0xe1, 0x61,
    211      1.1  christos     0xd7, 0x1c, 0xe7, 0x13, 0x1a, 0x54, 0x3e, 0xa4, 0xcb, 0x5f, 0x7e, 0x9f,
    212      1.1  christos     0x1d, 0x8b, 0x00, 0x69, 0x64, 0x47, 0x00, 0x14, 0x00
    213      1.1  christos };
    214      1.1  christos 
    215      1.1  christos static const uint8_t msg4[11] = {
    216      1.1  christos     0x0c, 0x3e, 0x54, 0x40, 0x74, 0xec, 0x63, 0xb0, 0x26, 0x5e, 0x0c
    217      1.1  christos };
    218      1.1  christos 
    219      1.1  christos static const uint8_t sig4[114] = {
    220      1.1  christos     0x1f, 0x0a, 0x88, 0x88, 0xce, 0x25, 0xe8, 0xd4, 0x58, 0xa2, 0x11, 0x30,
    221      1.1  christos     0x87, 0x9b, 0x84, 0x0a, 0x90, 0x89, 0xd9, 0x99, 0xaa, 0xba, 0x03, 0x9e,
    222      1.1  christos     0xaf, 0x3e, 0x3a, 0xfa, 0x09, 0x0a, 0x09, 0xd3, 0x89, 0xdb, 0xa8, 0x2c,
    223      1.1  christos     0x4f, 0xf2, 0xae, 0x8a, 0xc5, 0xcd, 0xfb, 0x7c, 0x55, 0xe9, 0x4d, 0x5d,
    224      1.1  christos     0x96, 0x1a, 0x29, 0xfe, 0x01, 0x09, 0x94, 0x1e, 0x00, 0xb8, 0xdb, 0xde,
    225      1.1  christos     0xea, 0x6d, 0x3b, 0x05, 0x10, 0x68, 0xdf, 0x72, 0x54, 0xc0, 0xcd, 0xc1,
    226      1.1  christos     0x29, 0xcb, 0xe6, 0x2d, 0xb2, 0xdc, 0x95, 0x7d, 0xbb, 0x47, 0xb5, 0x1f,
    227      1.1  christos     0xd3, 0xf2, 0x13, 0xfb, 0x86, 0x98, 0xf0, 0x64, 0x77, 0x42, 0x50, 0xa5,
    228      1.1  christos     0x02, 0x89, 0x61, 0xc9, 0xbf, 0x8f, 0xfd, 0x97, 0x3f, 0xe5, 0xd5, 0xc2,
    229      1.1  christos     0x06, 0x49, 0x2b, 0x14, 0x0e, 0x00
    230      1.1  christos };
    231      1.1  christos 
    232      1.1  christos static const uint8_t privkey5[57] = {
    233      1.1  christos     0x25, 0x8c, 0xdd, 0x4a, 0xda, 0x32, 0xed, 0x9c, 0x9f, 0xf5, 0x4e, 0x63,
    234      1.1  christos     0x75, 0x6a, 0xe5, 0x82, 0xfb, 0x8f, 0xab, 0x2a, 0xc7, 0x21, 0xf2, 0xc8,
    235      1.1  christos     0xe6, 0x76, 0xa7, 0x27, 0x68, 0x51, 0x3d, 0x93, 0x9f, 0x63, 0xdd, 0xdb,
    236      1.1  christos     0x55, 0x60, 0x91, 0x33, 0xf2, 0x9a, 0xdf, 0x86, 0xec, 0x99, 0x29, 0xdc,
    237      1.1  christos     0xcb, 0x52, 0xc1, 0xc5, 0xfd, 0x2f, 0xf7, 0xe2, 0x1b
    238      1.1  christos };
    239      1.1  christos 
    240      1.1  christos static const uint8_t pubkey5[57] = {
    241      1.1  christos     0x3b, 0xa1, 0x6d, 0xa0, 0xc6, 0xf2, 0xcc, 0x1f, 0x30, 0x18, 0x77, 0x40,
    242      1.1  christos     0x75, 0x6f, 0x5e, 0x79, 0x8d, 0x6b, 0xc5, 0xfc, 0x01, 0x5d, 0x7c, 0x63,
    243      1.1  christos     0xcc, 0x95, 0x10, 0xee, 0x3f, 0xd4, 0x4a, 0xdc, 0x24, 0xd8, 0xe9, 0x68,
    244      1.1  christos     0xb6, 0xe4, 0x6e, 0x6f, 0x94, 0xd1, 0x9b, 0x94, 0x53, 0x61, 0x72, 0x6b,
    245      1.1  christos     0xd7, 0x5e, 0x14, 0x9e, 0xf0, 0x98, 0x17, 0xf5, 0x80
    246      1.1  christos };
    247      1.1  christos 
    248      1.1  christos static const uint8_t msg5[12] = {
    249      1.1  christos     0x64, 0xa6, 0x5f, 0x3c, 0xde, 0xdc, 0xdd, 0x66, 0x81, 0x1e, 0x29, 0x15
    250      1.1  christos };
    251      1.1  christos 
    252      1.1  christos static const uint8_t sig5[114] = {
    253      1.1  christos     0x7e, 0xee, 0xab, 0x7c, 0x4e, 0x50, 0xfb, 0x79, 0x9b, 0x41, 0x8e, 0xe5,
    254      1.1  christos     0xe3, 0x19, 0x7f, 0xf6, 0xbf, 0x15, 0xd4, 0x3a, 0x14, 0xc3, 0x43, 0x89,
    255      1.1  christos     0xb5, 0x9d, 0xd1, 0xa7, 0xb1, 0xb8, 0x5b, 0x4a, 0xe9, 0x04, 0x38, 0xac,
    256      1.1  christos     0xa6, 0x34, 0xbe, 0xa4, 0x5e, 0x3a, 0x26, 0x95, 0xf1, 0x27, 0x0f, 0x07,
    257      1.1  christos     0xfd, 0xcd, 0xf7, 0xc6, 0x2b, 0x8e, 0xfe, 0xaf, 0x00, 0xb4, 0x5c, 0x2c,
    258      1.1  christos     0x96, 0xba, 0x45, 0x7e, 0xb1, 0xa8, 0xbf, 0x07, 0x5a, 0x3d, 0xb2, 0x8e,
    259      1.1  christos     0x5c, 0x24, 0xf6, 0xb9, 0x23, 0xed, 0x4a, 0xd7, 0x47, 0xc3, 0xc9, 0xe0,
    260      1.1  christos     0x3c, 0x70, 0x79, 0xef, 0xb8, 0x7c, 0xb1, 0x10, 0xd3, 0xa9, 0x98, 0x61,
    261      1.1  christos     0xe7, 0x20, 0x03, 0xcb, 0xae, 0x6d, 0x6b, 0x8b, 0x82, 0x7e, 0x4e, 0x6c,
    262      1.1  christos     0x14, 0x30, 0x64, 0xff, 0x3c, 0x00
    263      1.1  christos };
    264      1.1  christos 
    265      1.1  christos static const uint8_t privkey6[57] = {
    266      1.1  christos     0x7e, 0xf4, 0xe8, 0x45, 0x44, 0x23, 0x67, 0x52, 0xfb, 0xb5, 0x6b, 0x8f,
    267      1.1  christos     0x31, 0xa2, 0x3a, 0x10, 0xe4, 0x28, 0x14, 0xf5, 0xf5, 0x5c, 0xa0, 0x37,
    268      1.1  christos     0xcd, 0xcc, 0x11, 0xc6, 0x4c, 0x9a, 0x3b, 0x29, 0x49, 0xc1, 0xbb, 0x60,
    269      1.1  christos     0x70, 0x03, 0x14, 0x61, 0x17, 0x32, 0xa6, 0xc2, 0xfe, 0xa9, 0x8e, 0xeb,
    270      1.1  christos     0xc0, 0x26, 0x6a, 0x11, 0xa9, 0x39, 0x70, 0x10, 0x0e
    271      1.1  christos };
    272      1.1  christos 
    273      1.1  christos static const uint8_t pubkey6[57] = {
    274      1.1  christos     0xb3, 0xda, 0x07, 0x9b, 0x0a, 0xa4, 0x93, 0xa5, 0x77, 0x20, 0x29, 0xf0,
    275      1.1  christos     0x46, 0x7b, 0xae, 0xbe, 0xe5, 0xa8, 0x11, 0x2d, 0x9d, 0x3a, 0x22, 0x53,
    276      1.1  christos     0x23, 0x61, 0xda, 0x29, 0x4f, 0x7b, 0xb3, 0x81, 0x5c, 0x5d, 0xc5, 0x9e,
    277      1.1  christos     0x17, 0x6b, 0x4d, 0x9f, 0x38, 0x1c, 0xa0, 0x93, 0x8e, 0x13, 0xc6, 0xc0,
    278      1.1  christos     0x7b, 0x17, 0x4b, 0xe6, 0x5d, 0xfa, 0x57, 0x8e, 0x80
    279      1.1  christos };
    280      1.1  christos 
    281      1.1  christos static const uint8_t msg6[13] = {
    282      1.1  christos     0x64, 0xa6, 0x5f, 0x3c, 0xde, 0xdc, 0xdd, 0x66, 0x81, 0x1e, 0x29, 0x15,
    283      1.1  christos     0xe7
    284      1.1  christos };
    285      1.1  christos 
    286      1.1  christos static const uint8_t sig6[114] = {
    287      1.1  christos     0x6a, 0x12, 0x06, 0x6f, 0x55, 0x33, 0x1b, 0x6c, 0x22, 0xac, 0xd5, 0xd5,
    288      1.1  christos     0xbf, 0xc5, 0xd7, 0x12, 0x28, 0xfb, 0xda, 0x80, 0xae, 0x8d, 0xec, 0x26,
    289      1.1  christos     0xbd, 0xd3, 0x06, 0x74, 0x3c, 0x50, 0x27, 0xcb, 0x48, 0x90, 0x81, 0x0c,
    290      1.1  christos     0x16, 0x2c, 0x02, 0x74, 0x68, 0x67, 0x5e, 0xcf, 0x64, 0x5a, 0x83, 0x17,
    291      1.1  christos     0x6c, 0x0d, 0x73, 0x23, 0xa2, 0xcc, 0xde, 0x2d, 0x80, 0xef, 0xe5, 0xa1,
    292      1.1  christos     0x26, 0x8e, 0x8a, 0xca, 0x1d, 0x6f, 0xbc, 0x19, 0x4d, 0x3f, 0x77, 0xc4,
    293      1.1  christos     0x49, 0x86, 0xeb, 0x4a, 0xb4, 0x17, 0x79, 0x19, 0xad, 0x8b, 0xec, 0x33,
    294      1.1  christos     0xeb, 0x47, 0xbb, 0xb5, 0xfc, 0x6e, 0x28, 0x19, 0x6f, 0xd1, 0xca, 0xf5,
    295      1.1  christos     0x6b, 0x4e, 0x7e, 0x0b, 0xa5, 0x51, 0x92, 0x34, 0xd0, 0x47, 0x15, 0x5a,
    296      1.1  christos     0xc7, 0x27, 0xa1, 0x05, 0x31, 0x00
    297      1.1  christos };
    298      1.1  christos 
    299      1.1  christos static const uint8_t privkey7[57] = {
    300      1.1  christos     0xd6, 0x5d, 0xf3, 0x41, 0xad, 0x13, 0xe0, 0x08, 0x56, 0x76, 0x88, 0xba,
    301      1.1  christos     0xed, 0xda, 0x8e, 0x9d, 0xcd, 0xc1, 0x7d, 0xc0, 0x24, 0x97, 0x4e, 0xa5,
    302      1.1  christos     0xb4, 0x22, 0x7b, 0x65, 0x30, 0xe3, 0x39, 0xbf, 0xf2, 0x1f, 0x99, 0xe6,
    303      1.1  christos     0x8c, 0xa6, 0x96, 0x8f, 0x3c, 0xca, 0x6d, 0xfe, 0x0f, 0xb9, 0xf4, 0xfa,
    304      1.1  christos     0xb4, 0xfa, 0x13, 0x5d, 0x55, 0x42, 0xea, 0x3f, 0x01
    305      1.1  christos };
    306      1.1  christos 
    307      1.1  christos static const uint8_t pubkey7[57] = {
    308      1.1  christos     0xdf, 0x97, 0x05, 0xf5, 0x8e, 0xdb, 0xab, 0x80, 0x2c, 0x7f, 0x83, 0x63,
    309      1.1  christos     0xcf, 0xe5, 0x56, 0x0a, 0xb1, 0xc6, 0x13, 0x2c, 0x20, 0xa9, 0xf1, 0xdd,
    310      1.1  christos     0x16, 0x34, 0x83, 0xa2, 0x6f, 0x8a, 0xc5, 0x3a, 0x39, 0xd6, 0x80, 0x8b,
    311      1.1  christos     0xf4, 0xa1, 0xdf, 0xbd, 0x26, 0x1b, 0x09, 0x9b, 0xb0, 0x3b, 0x3f, 0xb5,
    312      1.1  christos     0x09, 0x06, 0xcb, 0x28, 0xbd, 0x8a, 0x08, 0x1f, 0x00
    313      1.1  christos };
    314      1.1  christos 
    315      1.1  christos static const uint8_t msg7[64] = {
    316      1.1  christos     0xbd, 0x0f, 0x6a, 0x37, 0x47, 0xcd, 0x56, 0x1b, 0xdd, 0xdf, 0x46, 0x40,
    317      1.1  christos     0xa3, 0x32, 0x46, 0x1a, 0x4a, 0x30, 0xa1, 0x2a, 0x43, 0x4c, 0xd0, 0xbf,
    318      1.1  christos     0x40, 0xd7, 0x66, 0xd9, 0xc6, 0xd4, 0x58, 0xe5, 0x51, 0x22, 0x04, 0xa3,
    319      1.1  christos     0x0c, 0x17, 0xd1, 0xf5, 0x0b, 0x50, 0x79, 0x63, 0x1f, 0x64, 0xeb, 0x31,
    320      1.1  christos     0x12, 0x18, 0x2d, 0xa3, 0x00, 0x58, 0x35, 0x46, 0x11, 0x13, 0x71, 0x8d,
    321      1.1  christos     0x1a, 0x5e, 0xf9, 0x44
    322      1.1  christos };
    323      1.1  christos 
    324      1.1  christos static const uint8_t sig7[114] = {
    325      1.1  christos     0x55, 0x4b, 0xc2, 0x48, 0x08, 0x60, 0xb4, 0x9e, 0xab, 0x85, 0x32, 0xd2,
    326      1.1  christos     0xa5, 0x33, 0xb7, 0xd5, 0x78, 0xef, 0x47, 0x3e, 0xeb, 0x58, 0xc9, 0x8b,
    327      1.1  christos     0xb2, 0xd0, 0xe1, 0xce, 0x48, 0x8a, 0x98, 0xb1, 0x8d, 0xfd, 0xe9, 0xb9,
    328      1.1  christos     0xb9, 0x07, 0x75, 0xe6, 0x7f, 0x47, 0xd4, 0xa1, 0xc3, 0x48, 0x20, 0x58,
    329      1.1  christos     0xef, 0xc9, 0xf4, 0x0d, 0x2c, 0xa0, 0x33, 0xa0, 0x80, 0x1b, 0x63, 0xd4,
    330      1.1  christos     0x5b, 0x3b, 0x72, 0x2e, 0xf5, 0x52, 0xba, 0xd3, 0xb4, 0xcc, 0xb6, 0x67,
    331      1.1  christos     0xda, 0x35, 0x01, 0x92, 0xb6, 0x1c, 0x50, 0x8c, 0xf7, 0xb6, 0xb5, 0xad,
    332      1.1  christos     0xad, 0xc2, 0xc8, 0xd9, 0xa4, 0x46, 0xef, 0x00, 0x3f, 0xb0, 0x5c, 0xba,
    333      1.1  christos     0x5f, 0x30, 0xe8, 0x8e, 0x36, 0xec, 0x27, 0x03, 0xb3, 0x49, 0xca, 0x22,
    334      1.1  christos     0x9c, 0x26, 0x70, 0x83, 0x39, 0x00
    335      1.1  christos };
    336      1.1  christos 
    337      1.1  christos static const uint8_t privkey8[57] = {
    338      1.1  christos     0x2e, 0xc5, 0xfe, 0x3c, 0x17, 0x04, 0x5a, 0xbd, 0xb1, 0x36, 0xa5, 0xe6,
    339      1.1  christos     0xa9, 0x13, 0xe3, 0x2a, 0xb7, 0x5a, 0xe6, 0x8b, 0x53, 0xd2, 0xfc, 0x14,
    340      1.1  christos     0x9b, 0x77, 0xe5, 0x04, 0x13, 0x2d, 0x37, 0x56, 0x9b, 0x7e, 0x76, 0x6b,
    341      1.1  christos     0xa7, 0x4a, 0x19, 0xbd, 0x61, 0x62, 0x34, 0x3a, 0x21, 0xc8, 0x59, 0x0a,
    342      1.1  christos     0xa9, 0xce, 0xbc, 0xa9, 0x01, 0x4c, 0x63, 0x6d, 0xf5
    343      1.1  christos };
    344      1.1  christos 
    345      1.1  christos static const uint8_t pubkey8[57] = {
    346      1.1  christos     0x79, 0x75, 0x6f, 0x01, 0x4d, 0xcf, 0xe2, 0x07, 0x9f, 0x5d, 0xd9, 0xe7,
    347      1.1  christos     0x18, 0xbe, 0x41, 0x71, 0xe2, 0xef, 0x24, 0x86, 0xa0, 0x8f, 0x25, 0x18,
    348      1.1  christos     0x6f, 0x6b, 0xff, 0x43, 0xa9, 0x93, 0x6b, 0x9b, 0xfe, 0x12, 0x40, 0x2b,
    349      1.1  christos     0x08, 0xae, 0x65, 0x79, 0x8a, 0x3d, 0x81, 0xe2, 0x2e, 0x9e, 0xc8, 0x0e,
    350      1.1  christos     0x76, 0x90, 0x86, 0x2e, 0xf3, 0xd4, 0xed, 0x3a, 0x00
    351      1.1  christos };
    352      1.1  christos 
    353      1.1  christos static const uint8_t msg8[256] = {
    354      1.1  christos     0x15, 0x77, 0x75, 0x32, 0xb0, 0xbd, 0xd0, 0xd1, 0x38, 0x9f, 0x63, 0x6c,
    355      1.1  christos     0x5f, 0x6b, 0x9b, 0xa7, 0x34, 0xc9, 0x0a, 0xf5, 0x72, 0x87, 0x7e, 0x2d,
    356      1.1  christos     0x27, 0x2d, 0xd0, 0x78, 0xaa, 0x1e, 0x56, 0x7c, 0xfa, 0x80, 0xe1, 0x29,
    357      1.1  christos     0x28, 0xbb, 0x54, 0x23, 0x30, 0xe8, 0x40, 0x9f, 0x31, 0x74, 0x50, 0x41,
    358      1.1  christos     0x07, 0xec, 0xd5, 0xef, 0xac, 0x61, 0xae, 0x75, 0x04, 0xda, 0xbe, 0x2a,
    359      1.1  christos     0x60, 0x2e, 0xde, 0x89, 0xe5, 0xcc, 0xa6, 0x25, 0x7a, 0x7c, 0x77, 0xe2,
    360      1.1  christos     0x7a, 0x70, 0x2b, 0x3a, 0xe3, 0x9f, 0xc7, 0x69, 0xfc, 0x54, 0xf2, 0x39,
    361      1.1  christos     0x5a, 0xe6, 0xa1, 0x17, 0x8c, 0xab, 0x47, 0x38, 0xe5, 0x43, 0x07, 0x2f,
    362      1.1  christos     0xc1, 0xc1, 0x77, 0xfe, 0x71, 0xe9, 0x2e, 0x25, 0xbf, 0x03, 0xe4, 0xec,
    363      1.1  christos     0xb7, 0x2f, 0x47, 0xb6, 0x4d, 0x04, 0x65, 0xaa, 0xea, 0x4c, 0x7f, 0xad,
    364      1.1  christos     0x37, 0x25, 0x36, 0xc8, 0xba, 0x51, 0x6a, 0x60, 0x39, 0xc3, 0xc2, 0xa3,
    365      1.1  christos     0x9f, 0x0e, 0x4d, 0x83, 0x2b, 0xe4, 0x32, 0xdf, 0xa9, 0xa7, 0x06, 0xa6,
    366      1.1  christos     0xe5, 0xc7, 0xe1, 0x9f, 0x39, 0x79, 0x64, 0xca, 0x42, 0x58, 0x00, 0x2f,
    367      1.1  christos     0x7c, 0x05, 0x41, 0xb5, 0x90, 0x31, 0x6d, 0xbc, 0x56, 0x22, 0xb6, 0xb2,
    368      1.1  christos     0xa6, 0xfe, 0x7a, 0x4a, 0xbf, 0xfd, 0x96, 0x10, 0x5e, 0xca, 0x76, 0xea,
    369      1.1  christos     0x7b, 0x98, 0x81, 0x6a, 0xf0, 0x74, 0x8c, 0x10, 0xdf, 0x04, 0x8c, 0xe0,
    370      1.1  christos     0x12, 0xd9, 0x01, 0x01, 0x5a, 0x51, 0xf1, 0x89, 0xf3, 0x88, 0x81, 0x45,
    371      1.1  christos     0xc0, 0x36, 0x50, 0xaa, 0x23, 0xce, 0x89, 0x4c, 0x3b, 0xd8, 0x89, 0xe0,
    372      1.1  christos     0x30, 0xd5, 0x65, 0x07, 0x1c, 0x59, 0xf4, 0x09, 0xa9, 0x98, 0x1b, 0x51,
    373      1.1  christos     0x87, 0x8f, 0xd6, 0xfc, 0x11, 0x06, 0x24, 0xdc, 0xbc, 0xde, 0x0b, 0xf7,
    374      1.1  christos     0xa6, 0x9c, 0xcc, 0xe3, 0x8f, 0xab, 0xdf, 0x86, 0xf3, 0xbe, 0xf6, 0x04,
    375      1.1  christos     0x48, 0x19, 0xde, 0x11
    376      1.1  christos };
    377      1.1  christos 
    378      1.1  christos static const uint8_t sig8[114] = {
    379      1.1  christos     0xc6, 0x50, 0xdd, 0xbb, 0x06, 0x01, 0xc1, 0x9c, 0xa1, 0x14, 0x39, 0xe1,
    380      1.1  christos     0x64, 0x0d, 0xd9, 0x31, 0xf4, 0x3c, 0x51, 0x8e, 0xa5, 0xbe, 0xa7, 0x0d,
    381      1.1  christos     0x3d, 0xcd, 0xe5, 0xf4, 0x19, 0x1f, 0xe5, 0x3f, 0x00, 0xcf, 0x96, 0x65,
    382      1.1  christos     0x46, 0xb7, 0x2b, 0xcc, 0x7d, 0x58, 0xbe, 0x2b, 0x9b, 0xad, 0xef, 0x28,
    383      1.1  christos     0x74, 0x39, 0x54, 0xe3, 0xa4, 0x4a, 0x23, 0xf8, 0x80, 0xe8, 0xd4, 0xf1,
    384      1.1  christos     0xcf, 0xce, 0x2d, 0x7a, 0x61, 0x45, 0x2d, 0x26, 0xda, 0x05, 0x89, 0x6f,
    385      1.1  christos     0x0a, 0x50, 0xda, 0x66, 0xa2, 0x39, 0xa8, 0xa1, 0x88, 0xb6, 0xd8, 0x25,
    386      1.1  christos     0xb3, 0x30, 0x5a, 0xd7, 0x7b, 0x73, 0xfb, 0xac, 0x08, 0x36, 0xec, 0xc6,
    387      1.1  christos     0x09, 0x87, 0xfd, 0x08, 0x52, 0x7c, 0x1a, 0x8e, 0x80, 0xd5, 0x82, 0x3e,
    388      1.1  christos     0x65, 0xca, 0xfe, 0x2a, 0x3d, 0x00
    389      1.1  christos };
    390      1.1  christos 
    391      1.1  christos static const uint8_t privkey9[57] = {
    392      1.1  christos     0x87, 0x2d, 0x09, 0x37, 0x80, 0xf5, 0xd3, 0x73, 0x0d, 0xf7, 0xc2, 0x12,
    393      1.1  christos     0x66, 0x4b, 0x37, 0xb8, 0xa0, 0xf2, 0x4f, 0x56, 0x81, 0x0d, 0xaa, 0x83,
    394      1.1  christos     0x82, 0xcd, 0x4f, 0xa3, 0xf7, 0x76, 0x34, 0xec, 0x44, 0xdc, 0x54, 0xf1,
    395      1.1  christos     0xc2, 0xed, 0x9b, 0xea, 0x86, 0xfa, 0xfb, 0x76, 0x32, 0xd8, 0xbe, 0x19,
    396      1.1  christos     0x9e, 0xa1, 0x65, 0xf5, 0xad, 0x55, 0xdd, 0x9c, 0xe8
    397      1.1  christos };
    398      1.1  christos 
    399      1.1  christos static const uint8_t pubkey9[57] = {
    400      1.1  christos     0xa8, 0x1b, 0x2e, 0x8a, 0x70, 0xa5, 0xac, 0x94, 0xff, 0xdb, 0xcc, 0x9b,
    401      1.1  christos     0xad, 0xfc, 0x3f, 0xeb, 0x08, 0x01, 0xf2, 0x58, 0x57, 0x8b, 0xb1, 0x14,
    402      1.1  christos     0xad, 0x44, 0xec, 0xe1, 0xec, 0x0e, 0x79, 0x9d, 0xa0, 0x8e, 0xff, 0xb8,
    403      1.1  christos     0x1c, 0x5d, 0x68, 0x5c, 0x0c, 0x56, 0xf6, 0x4e, 0xec, 0xae, 0xf8, 0xcd,
    404      1.1  christos     0xf1, 0x1c, 0xc3, 0x87, 0x37, 0x83, 0x8c, 0xf4, 0x00
    405      1.1  christos };
    406      1.1  christos 
    407      1.1  christos static const uint8_t msg9[1023] = {
    408      1.1  christos     0x6d, 0xdf, 0x80, 0x2e, 0x1a, 0xae, 0x49, 0x86, 0x93, 0x5f, 0x7f, 0x98,
    409      1.1  christos     0x1b, 0xa3, 0xf0, 0x35, 0x1d, 0x62, 0x73, 0xc0, 0xa0, 0xc2, 0x2c, 0x9c,
    410      1.1  christos     0x0e, 0x83, 0x39, 0x16, 0x8e, 0x67, 0x54, 0x12, 0xa3, 0xde, 0xbf, 0xaf,
    411      1.1  christos     0x43, 0x5e, 0xd6, 0x51, 0x55, 0x80, 0x07, 0xdb, 0x43, 0x84, 0xb6, 0x50,
    412      1.1  christos     0xfc, 0xc0, 0x7e, 0x3b, 0x58, 0x6a, 0x27, 0xa4, 0xf7, 0xa0, 0x0a, 0xc8,
    413      1.1  christos     0xa6, 0xfe, 0xc2, 0xcd, 0x86, 0xae, 0x4b, 0xf1, 0x57, 0x0c, 0x41, 0xe6,
    414      1.1  christos     0xa4, 0x0c, 0x93, 0x1d, 0xb2, 0x7b, 0x2f, 0xaa, 0x15, 0xa8, 0xce, 0xdd,
    415      1.1  christos     0x52, 0xcf, 0xf7, 0x36, 0x2c, 0x4e, 0x6e, 0x23, 0xda, 0xec, 0x0f, 0xbc,
    416      1.1  christos     0x3a, 0x79, 0xb6, 0x80, 0x6e, 0x31, 0x6e, 0xfc, 0xc7, 0xb6, 0x81, 0x19,
    417      1.1  christos     0xbf, 0x46, 0xbc, 0x76, 0xa2, 0x60, 0x67, 0xa5, 0x3f, 0x29, 0x6d, 0xaf,
    418      1.1  christos     0xdb, 0xdc, 0x11, 0xc7, 0x7f, 0x77, 0x77, 0xe9, 0x72, 0x66, 0x0c, 0xf4,
    419      1.1  christos     0xb6, 0xa9, 0xb3, 0x69, 0xa6, 0x66, 0x5f, 0x02, 0xe0, 0xcc, 0x9b, 0x6e,
    420      1.1  christos     0xdf, 0xad, 0x13, 0x6b, 0x4f, 0xab, 0xe7, 0x23, 0xd2, 0x81, 0x3d, 0xb3,
    421      1.1  christos     0x13, 0x6c, 0xfd, 0xe9, 0xb6, 0xd0, 0x44, 0x32, 0x2f, 0xee, 0x29, 0x47,
    422      1.1  christos     0x95, 0x2e, 0x03, 0x1b, 0x73, 0xab, 0x5c, 0x60, 0x33, 0x49, 0xb3, 0x07,
    423      1.1  christos     0xbd, 0xc2, 0x7b, 0xc6, 0xcb, 0x8b, 0x8b, 0xbd, 0x7b, 0xd3, 0x23, 0x21,
    424      1.1  christos     0x9b, 0x80, 0x33, 0xa5, 0x81, 0xb5, 0x9e, 0xad, 0xeb, 0xb0, 0x9b, 0x3c,
    425      1.1  christos     0x4f, 0x3d, 0x22, 0x77, 0xd4, 0xf0, 0x34, 0x36, 0x24, 0xac, 0xc8, 0x17,
    426      1.1  christos     0x80, 0x47, 0x28, 0xb2, 0x5a, 0xb7, 0x97, 0x17, 0x2b, 0x4c, 0x5c, 0x21,
    427      1.1  christos     0xa2, 0x2f, 0x9c, 0x78, 0x39, 0xd6, 0x43, 0x00, 0x23, 0x2e, 0xb6, 0x6e,
    428      1.1  christos     0x53, 0xf3, 0x1c, 0x72, 0x3f, 0xa3, 0x7f, 0xe3, 0x87, 0xc7, 0xd3, 0xe5,
    429      1.1  christos     0x0b, 0xdf, 0x98, 0x13, 0xa3, 0x0e, 0x5b, 0xb1, 0x2c, 0xf4, 0xcd, 0x93,
    430      1.1  christos     0x0c, 0x40, 0xcf, 0xb4, 0xe1, 0xfc, 0x62, 0x25, 0x92, 0xa4, 0x95, 0x88,
    431      1.1  christos     0x79, 0x44, 0x94, 0xd5, 0x6d, 0x24, 0xea, 0x4b, 0x40, 0xc8, 0x9f, 0xc0,
    432      1.1  christos     0x59, 0x6c, 0xc9, 0xeb, 0xb9, 0x61, 0xc8, 0xcb, 0x10, 0xad, 0xde, 0x97,
    433      1.1  christos     0x6a, 0x5d, 0x60, 0x2b, 0x1c, 0x3f, 0x85, 0xb9, 0xb9, 0xa0, 0x01, 0xed,
    434      1.1  christos     0x3c, 0x6a, 0x4d, 0x3b, 0x14, 0x37, 0xf5, 0x20, 0x96, 0xcd, 0x19, 0x56,
    435      1.1  christos     0xd0, 0x42, 0xa5, 0x97, 0xd5, 0x61, 0xa5, 0x96, 0xec, 0xd3, 0xd1, 0x73,
    436      1.1  christos     0x5a, 0x8d, 0x57, 0x0e, 0xa0, 0xec, 0x27, 0x22, 0x5a, 0x2c, 0x4a, 0xaf,
    437      1.1  christos     0xf2, 0x63, 0x06, 0xd1, 0x52, 0x6c, 0x1a, 0xf3, 0xca, 0x6d, 0x9c, 0xf5,
    438      1.1  christos     0xa2, 0xc9, 0x8f, 0x47, 0xe1, 0xc4, 0x6d, 0xb9, 0xa3, 0x32, 0x34, 0xcf,
    439      1.1  christos     0xd4, 0xd8, 0x1f, 0x2c, 0x98, 0x53, 0x8a, 0x09, 0xeb, 0xe7, 0x69, 0x98,
    440      1.1  christos     0xd0, 0xd8, 0xfd, 0x25, 0x99, 0x7c, 0x7d, 0x25, 0x5c, 0x6d, 0x66, 0xec,
    441      1.1  christos     0xe6, 0xfa, 0x56, 0xf1, 0x11, 0x44, 0x95, 0x0f, 0x02, 0x77, 0x95, 0xe6,
    442      1.1  christos     0x53, 0x00, 0x8f, 0x4b, 0xd7, 0xca, 0x2d, 0xee, 0x85, 0xd8, 0xe9, 0x0f,
    443      1.1  christos     0x3d, 0xc3, 0x15, 0x13, 0x0c, 0xe2, 0xa0, 0x03, 0x75, 0xa3, 0x18, 0xc7,
    444      1.1  christos     0xc3, 0xd9, 0x7b, 0xe2, 0xc8, 0xce, 0x5b, 0x6d, 0xb4, 0x1a, 0x62, 0x54,
    445      1.1  christos     0xff, 0x26, 0x4f, 0xa6, 0x15, 0x5b, 0xae, 0xe3, 0xb0, 0x77, 0x3c, 0x0f,
    446      1.1  christos     0x49, 0x7c, 0x57, 0x3f, 0x19, 0xbb, 0x4f, 0x42, 0x40, 0x28, 0x1f, 0x0b,
    447      1.1  christos     0x1f, 0x4f, 0x7b, 0xe8, 0x57, 0xa4, 0xe5, 0x9d, 0x41, 0x6c, 0x06, 0xb4,
    448      1.1  christos     0xc5, 0x0f, 0xa0, 0x9e, 0x18, 0x10, 0xdd, 0xc6, 0xb1, 0x46, 0x7b, 0xae,
    449      1.1  christos     0xac, 0x5a, 0x36, 0x68, 0xd1, 0x1b, 0x6e, 0xca, 0xa9, 0x01, 0x44, 0x00,
    450      1.1  christos     0x16, 0xf3, 0x89, 0xf8, 0x0a, 0xcc, 0x4d, 0xb9, 0x77, 0x02, 0x5e, 0x7f,
    451      1.1  christos     0x59, 0x24, 0x38, 0x8c, 0x7e, 0x34, 0x0a, 0x73, 0x2e, 0x55, 0x44, 0x40,
    452      1.1  christos     0xe7, 0x65, 0x70, 0xf8, 0xdd, 0x71, 0xb7, 0xd6, 0x40, 0xb3, 0x45, 0x0d,
    453      1.1  christos     0x1f, 0xd5, 0xf0, 0x41, 0x0a, 0x18, 0xf9, 0xa3, 0x49, 0x4f, 0x70, 0x7c,
    454      1.1  christos     0x71, 0x7b, 0x79, 0xb4, 0xbf, 0x75, 0xc9, 0x84, 0x00, 0xb0, 0x96, 0xb2,
    455      1.1  christos     0x16, 0x53, 0xb5, 0xd2, 0x17, 0xcf, 0x35, 0x65, 0xc9, 0x59, 0x74, 0x56,
    456      1.1  christos     0xf7, 0x07, 0x03, 0x49, 0x7a, 0x07, 0x87, 0x63, 0x82, 0x9b, 0xc0, 0x1b,
    457      1.1  christos     0xb1, 0xcb, 0xc8, 0xfa, 0x04, 0xea, 0xdc, 0x9a, 0x6e, 0x3f, 0x66, 0x99,
    458      1.1  christos     0x58, 0x7a, 0x9e, 0x75, 0xc9, 0x4e, 0x5b, 0xab, 0x00, 0x36, 0xe0, 0xb2,
    459      1.1  christos     0xe7, 0x11, 0x39, 0x2c, 0xff, 0x00, 0x47, 0xd0, 0xd6, 0xb0, 0x5b, 0xd2,
    460      1.1  christos     0xa5, 0x88, 0xbc, 0x10, 0x97, 0x18, 0x95, 0x42, 0x59, 0xf1, 0xd8, 0x66,
    461      1.1  christos     0x78, 0xa5, 0x79, 0xa3, 0x12, 0x0f, 0x19, 0xcf, 0xb2, 0x96, 0x3f, 0x17,
    462      1.1  christos     0x7a, 0xeb, 0x70, 0xf2, 0xd4, 0x84, 0x48, 0x26, 0x26, 0x2e, 0x51, 0xb8,
    463      1.1  christos     0x02, 0x71, 0x27, 0x20, 0x68, 0xef, 0x5b, 0x38, 0x56, 0xfa, 0x85, 0x35,
    464      1.1  christos     0xaa, 0x2a, 0x88, 0xb2, 0xd4, 0x1f, 0x2a, 0x0e, 0x2f, 0xda, 0x76, 0x24,
    465      1.1  christos     0xc2, 0x85, 0x02, 0x72, 0xac, 0x4a, 0x2f, 0x56, 0x1f, 0x8f, 0x2f, 0x7a,
    466      1.1  christos     0x31, 0x8b, 0xfd, 0x5c, 0xaf, 0x96, 0x96, 0x14, 0x9e, 0x4a, 0xc8, 0x24,
    467      1.1  christos     0xad, 0x34, 0x60, 0x53, 0x8f, 0xdc, 0x25, 0x42, 0x1b, 0xee, 0xc2, 0xcc,
    468      1.1  christos     0x68, 0x18, 0x16, 0x2d, 0x06, 0xbb, 0xed, 0x0c, 0x40, 0xa3, 0x87, 0x19,
    469      1.1  christos     0x23, 0x49, 0xdb, 0x67, 0xa1, 0x18, 0xba, 0xda, 0x6c, 0xd5, 0xab, 0x01,
    470      1.1  christos     0x40, 0xee, 0x27, 0x32, 0x04, 0xf6, 0x28, 0xaa, 0xd1, 0xc1, 0x35, 0xf7,
    471      1.1  christos     0x70, 0x27, 0x9a, 0x65, 0x1e, 0x24, 0xd8, 0xc1, 0x4d, 0x75, 0xa6, 0x05,
    472      1.1  christos     0x9d, 0x76, 0xb9, 0x6a, 0x6f, 0xd8, 0x57, 0xde, 0xf5, 0xe0, 0xb3, 0x54,
    473      1.1  christos     0xb2, 0x7a, 0xb9, 0x37, 0xa5, 0x81, 0x5d, 0x16, 0xb5, 0xfa, 0xe4, 0x07,
    474      1.1  christos     0xff, 0x18, 0x22, 0x2c, 0x6d, 0x1e, 0xd2, 0x63, 0xbe, 0x68, 0xc9, 0x5f,
    475      1.1  christos     0x32, 0xd9, 0x08, 0xbd, 0x89, 0x5c, 0xd7, 0x62, 0x07, 0xae, 0x72, 0x64,
    476      1.1  christos     0x87, 0x56, 0x7f, 0x9a, 0x67, 0xda, 0xd7, 0x9a, 0xbe, 0xc3, 0x16, 0xf6,
    477      1.1  christos     0x83, 0xb1, 0x7f, 0x2d, 0x02, 0xbf, 0x07, 0xe0, 0xac, 0x8b, 0x5b, 0xc6,
    478      1.1  christos     0x16, 0x2c, 0xf9, 0x46, 0x97, 0xb3, 0xc2, 0x7c, 0xd1, 0xfe, 0xa4, 0x9b,
    479      1.1  christos     0x27, 0xf2, 0x3b, 0xa2, 0x90, 0x18, 0x71, 0x96, 0x25, 0x06, 0x52, 0x0c,
    480      1.1  christos     0x39, 0x2d, 0xa8, 0xb6, 0xad, 0x0d, 0x99, 0xf7, 0x01, 0x3f, 0xbc, 0x06,
    481      1.1  christos     0xc2, 0xc1, 0x7a, 0x56, 0x95, 0x00, 0xc8, 0xa7, 0x69, 0x64, 0x81, 0xc1,
    482      1.1  christos     0xcd, 0x33, 0xe9, 0xb1, 0x4e, 0x40, 0xb8, 0x2e, 0x79, 0xa5, 0xf5, 0xdb,
    483      1.1  christos     0x82, 0x57, 0x1b, 0xa9, 0x7b, 0xae, 0x3a, 0xd3, 0xe0, 0x47, 0x95, 0x15,
    484      1.1  christos     0xbb, 0x0e, 0x2b, 0x0f, 0x3b, 0xfc, 0xd1, 0xfd, 0x33, 0x03, 0x4e, 0xfc,
    485      1.1  christos     0x62, 0x45, 0xed, 0xdd, 0x7e, 0xe2, 0x08, 0x6d, 0xda, 0xe2, 0x60, 0x0d,
    486      1.1  christos     0x8c, 0xa7, 0x3e, 0x21, 0x4e, 0x8c, 0x2b, 0x0b, 0xdb, 0x2b, 0x04, 0x7c,
    487      1.1  christos     0x6a, 0x46, 0x4a, 0x56, 0x2e, 0xd7, 0x7b, 0x73, 0xd2, 0xd8, 0x41, 0xc4,
    488      1.1  christos     0xb3, 0x49, 0x73, 0x55, 0x12, 0x57, 0x71, 0x3b, 0x75, 0x36, 0x32, 0xef,
    489      1.1  christos     0xba, 0x34, 0x81, 0x69, 0xab, 0xc9, 0x0a, 0x68, 0xf4, 0x26, 0x11, 0xa4,
    490      1.1  christos     0x01, 0x26, 0xd7, 0xcb, 0x21, 0xb5, 0x86, 0x95, 0x56, 0x81, 0x86, 0xf7,
    491      1.1  christos     0xe5, 0x69, 0xd2, 0xff, 0x0f, 0x9e, 0x74, 0x5d, 0x04, 0x87, 0xdd, 0x2e,
    492      1.1  christos     0xb9, 0x97, 0xca, 0xfc, 0x5a, 0xbf, 0x9d, 0xd1, 0x02, 0xe6, 0x2f, 0xf6,
    493      1.1  christos     0x6c, 0xba, 0x87
    494      1.1  christos };
    495      1.1  christos 
    496      1.1  christos static const uint8_t sig9[114] = {
    497      1.1  christos     0xe3, 0x01, 0x34, 0x5a, 0x41, 0xa3, 0x9a, 0x4d, 0x72, 0xff, 0xf8, 0xdf,
    498      1.1  christos     0x69, 0xc9, 0x80, 0x75, 0xa0, 0xcc, 0x08, 0x2b, 0x80, 0x2f, 0xc9, 0xb2,
    499      1.1  christos     0xb6, 0xbc, 0x50, 0x3f, 0x92, 0x6b, 0x65, 0xbd, 0xdf, 0x7f, 0x4c, 0x8f,
    500      1.1  christos     0x1c, 0xb4, 0x9f, 0x63, 0x96, 0xaf, 0xc8, 0xa7, 0x0a, 0xbe, 0x6d, 0x8a,
    501      1.1  christos     0xef, 0x0d, 0xb4, 0x78, 0xd4, 0xc6, 0xb2, 0x97, 0x00, 0x76, 0xc6, 0xa0,
    502      1.1  christos     0x48, 0x4f, 0xe7, 0x6d, 0x76, 0xb3, 0xa9, 0x76, 0x25, 0xd7, 0x9f, 0x1c,
    503      1.1  christos     0xe2, 0x40, 0xe7, 0xc5, 0x76, 0x75, 0x0d, 0x29, 0x55, 0x28, 0x28, 0x6f,
    504      1.1  christos     0x71, 0x9b, 0x41, 0x3d, 0xe9, 0xad, 0xa3, 0xe8, 0xeb, 0x78, 0xed, 0x57,
    505      1.1  christos     0x36, 0x03, 0xce, 0x30, 0xd8, 0xbb, 0x76, 0x17, 0x85, 0xdc, 0x30, 0xdb,
    506      1.1  christos     0xc3, 0x20, 0x86, 0x9e, 0x1a, 0x00
    507      1.1  christos };
    508      1.1  christos 
    509      1.1  christos /* Prehash Ed448 */
    510      1.1  christos 
    511      1.1  christos static const uint8_t phprivkey1[57] = {
    512      1.1  christos     0x83, 0x3f, 0xe6, 0x24, 0x09, 0x23, 0x7b, 0x9d, 0x62, 0xec, 0x77, 0x58,
    513      1.1  christos     0x75, 0x20, 0x91, 0x1e, 0x9a, 0x75, 0x9c, 0xec, 0x1d, 0x19, 0x75, 0x5b,
    514      1.1  christos     0x7d, 0xa9, 0x01, 0xb9, 0x6d, 0xca, 0x3d, 0x42, 0xef, 0x78, 0x22, 0xe0,
    515      1.1  christos     0xd5, 0x10, 0x41, 0x27, 0xdc, 0x05, 0xd6, 0xdb, 0xef, 0xde, 0x69, 0xe3,
    516      1.1  christos     0xab, 0x2c, 0xec, 0x7c, 0x86, 0x7c, 0x6e, 0x2c, 0x49
    517      1.1  christos };
    518      1.1  christos 
    519      1.1  christos static const uint8_t phpubkey1[57] = {
    520      1.1  christos     0x25, 0x9b, 0x71, 0xc1, 0x9f, 0x83, 0xef, 0x77, 0xa7, 0xab, 0xd2, 0x65,
    521      1.1  christos     0x24, 0xcb, 0xdb, 0x31, 0x61, 0xb5, 0x90, 0xa4, 0x8f, 0x7d, 0x17, 0xde,
    522      1.1  christos     0x3e, 0xe0, 0xba, 0x9c, 0x52, 0xbe, 0xb7, 0x43, 0xc0, 0x94, 0x28, 0xa1,
    523      1.1  christos     0x31, 0xd6, 0xb1, 0xb5, 0x73, 0x03, 0xd9, 0x0d, 0x81, 0x32, 0xc2, 0x76,
    524      1.1  christos     0xd5, 0xed, 0x3d, 0x5d, 0x01, 0xc0, 0xf5, 0x38, 0x80
    525      1.1  christos };
    526      1.1  christos 
    527      1.1  christos static const uint8_t phmsg1[3] = {
    528      1.1  christos     0x61, 0x62, 0x63
    529      1.1  christos };
    530      1.1  christos 
    531      1.1  christos static const uint8_t phsig1[114] = {
    532      1.1  christos     0x82, 0x2f, 0x69, 0x01, 0xf7, 0x48, 0x0f, 0x3d, 0x5f, 0x56, 0x2c, 0x59,
    533      1.1  christos     0x29, 0x94, 0xd9, 0x69, 0x36, 0x02, 0x87, 0x56, 0x14, 0x48, 0x32, 0x56,
    534      1.1  christos     0x50, 0x56, 0x00, 0xbb, 0xc2, 0x81, 0xae, 0x38, 0x1f, 0x54, 0xd6, 0xbc,
    535      1.1  christos     0xe2, 0xea, 0x91, 0x15, 0x74, 0x93, 0x2f, 0x52, 0xa4, 0xe6, 0xca, 0xdd,
    536      1.1  christos     0x78, 0x76, 0x93, 0x75, 0xec, 0x3f, 0xfd, 0x1b, 0x80, 0x1a, 0x0d, 0x9b,
    537      1.1  christos     0x3f, 0x40, 0x30, 0xcd, 0x43, 0x39, 0x64, 0xb6, 0x45, 0x7e, 0xa3, 0x94,
    538      1.1  christos     0x76, 0x51, 0x12, 0x14, 0xf9, 0x74, 0x69, 0xb5, 0x7d, 0xd3, 0x2d, 0xbc,
    539      1.1  christos     0x56, 0x0a, 0x9a, 0x94, 0xd0, 0x0b, 0xff, 0x07, 0x62, 0x04, 0x64, 0xa3,
    540      1.1  christos     0xad, 0x20, 0x3d, 0xf7, 0xdc, 0x7c, 0xe3, 0x60, 0xc3, 0xcd, 0x36, 0x96,
    541      1.1  christos     0xd9, 0xd9, 0xfa, 0xb9, 0x0f, 0x00
    542      1.1  christos };
    543      1.1  christos 
    544      1.1  christos static const uint8_t phprivkey2[57] = {
    545      1.1  christos     0x83, 0x3f, 0xe6, 0x24, 0x09, 0x23, 0x7b, 0x9d, 0x62, 0xec, 0x77, 0x58,
    546      1.1  christos     0x75, 0x20, 0x91, 0x1e, 0x9a, 0x75, 0x9c, 0xec, 0x1d, 0x19, 0x75, 0x5b,
    547      1.1  christos     0x7d, 0xa9, 0x01, 0xb9, 0x6d, 0xca, 0x3d, 0x42, 0xef, 0x78, 0x22, 0xe0,
    548      1.1  christos     0xd5, 0x10, 0x41, 0x27, 0xdc, 0x05, 0xd6, 0xdb, 0xef, 0xde, 0x69, 0xe3,
    549      1.1  christos     0xab, 0x2c, 0xec, 0x7c, 0x86, 0x7c, 0x6e, 0x2c, 0x49
    550      1.1  christos };
    551      1.1  christos 
    552      1.1  christos static const uint8_t phpubkey2[57] = {
    553      1.1  christos     0x25, 0x9b, 0x71, 0xc1, 0x9f, 0x83, 0xef, 0x77, 0xa7, 0xab, 0xd2, 0x65,
    554      1.1  christos     0x24, 0xcb, 0xdb, 0x31, 0x61, 0xb5, 0x90, 0xa4, 0x8f, 0x7d, 0x17, 0xde,
    555      1.1  christos     0x3e, 0xe0, 0xba, 0x9c, 0x52, 0xbe, 0xb7, 0x43, 0xc0, 0x94, 0x28, 0xa1,
    556      1.1  christos     0x31, 0xd6, 0xb1, 0xb5, 0x73, 0x03, 0xd9, 0x0d, 0x81, 0x32, 0xc2, 0x76,
    557      1.1  christos     0xd5, 0xed, 0x3d, 0x5d, 0x01, 0xc0, 0xf5, 0x38, 0x80
    558      1.1  christos };
    559      1.1  christos 
    560      1.1  christos static const uint8_t phmsg2[3] = {
    561      1.1  christos     0x61, 0x62, 0x63
    562      1.1  christos };
    563      1.1  christos 
    564      1.1  christos static const uint8_t phcontext2[3] = {
    565      1.1  christos     0x66, 0x6f, 0x6f
    566      1.1  christos };
    567      1.1  christos 
    568      1.1  christos static const uint8_t phsig2[114] = {
    569      1.1  christos     0xc3, 0x22, 0x99, 0xd4, 0x6e, 0xc8, 0xff, 0x02, 0xb5, 0x45, 0x40, 0x98,
    570      1.1  christos     0x28, 0x14, 0xdc, 0xe9, 0xa0, 0x58, 0x12, 0xf8, 0x19, 0x62, 0xb6, 0x49,
    571      1.1  christos     0xd5, 0x28, 0x09, 0x59, 0x16, 0xa2, 0xaa, 0x48, 0x10, 0x65, 0xb1, 0x58,
    572      1.1  christos     0x04, 0x23, 0xef, 0x92, 0x7e, 0xcf, 0x0a, 0xf5, 0x88, 0x8f, 0x90, 0xda,
    573      1.1  christos     0x0f, 0x6a, 0x9a, 0x85, 0xad, 0x5d, 0xc3, 0xf2, 0x80, 0xd9, 0x12, 0x24,
    574      1.1  christos     0xba, 0x99, 0x11, 0xa3, 0x65, 0x3d, 0x00, 0xe4, 0x84, 0xe2, 0xce, 0x23,
    575      1.1  christos     0x25, 0x21, 0x48, 0x1c, 0x86, 0x58, 0xdf, 0x30, 0x4b, 0xb7, 0x74, 0x5a,
    576      1.1  christos     0x73, 0x51, 0x4c, 0xdb, 0x9b, 0xf3, 0xe1, 0x57, 0x84, 0xab, 0x71, 0x28,
    577      1.1  christos     0x4f, 0x8d, 0x07, 0x04, 0xa6, 0x08, 0xc5, 0x4a, 0x6b, 0x62, 0xd9, 0x7b,
    578      1.1  christos     0xeb, 0x51, 0x1d, 0x13, 0x21, 0x00
    579      1.1  christos };
    580      1.1  christos 
    581      1.1  christos static const uint8_t *dohash(EVP_MD_CTX *hashctx, const uint8_t *msg,
    582  1.1.1.2  christos     size_t msglen)
    583      1.1  christos {
    584      1.1  christos     static uint8_t hashout[64];
    585      1.1  christos 
    586      1.1  christos     if (!EVP_DigestInit_ex(hashctx, EVP_shake256(), NULL)
    587  1.1.1.2  christos         || !EVP_DigestUpdate(hashctx, msg, msglen)
    588  1.1.1.2  christos         || !EVP_DigestFinalXOF(hashctx, hashout, sizeof(hashout)))
    589      1.1  christos         return NULL;
    590      1.1  christos 
    591      1.1  christos     return hashout;
    592      1.1  christos }
    593      1.1  christos 
    594      1.1  christos static int test_ed448(void)
    595      1.1  christos {
    596      1.1  christos     uint8_t outsig[114];
    597      1.1  christos     EVP_MD_CTX *hashctx = EVP_MD_CTX_new();
    598      1.1  christos 
    599      1.1  christos     if (!TEST_ptr(hashctx)
    600  1.1.1.2  christos         || !TEST_true(ossl_ed448_sign(NULL, outsig, NULL, 0, pubkey1,
    601  1.1.1.2  christos             privkey1, NULL, 0, 0, NULL))
    602  1.1.1.2  christos         || !TEST_int_eq(memcmp(sig1, outsig, sizeof(sig1)), 0)
    603  1.1.1.2  christos         || !TEST_true(ossl_ed448_sign(NULL, outsig, msg2, sizeof(msg2),
    604  1.1.1.2  christos             pubkey2, privkey2, NULL, 0, 0, NULL))
    605  1.1.1.2  christos         || !TEST_int_eq(memcmp(sig2, outsig, sizeof(sig2)), 0)
    606  1.1.1.2  christos         || !TEST_true(ossl_ed448_sign(NULL, outsig, msg3, sizeof(msg3),
    607  1.1.1.2  christos             pubkey3, privkey3, context3,
    608  1.1.1.2  christos             sizeof(context3), 0, NULL))
    609  1.1.1.2  christos         || !TEST_int_eq(memcmp(sig3, outsig, sizeof(sig3)), 0)
    610  1.1.1.2  christos         || !TEST_true(ossl_ed448_sign(NULL, outsig, msg4, sizeof(msg4),
    611  1.1.1.2  christos             pubkey4, privkey4, NULL, 0, 0, NULL))
    612  1.1.1.2  christos         || !TEST_int_eq(memcmp(sig4, outsig, sizeof(sig4)), 0)
    613  1.1.1.2  christos         || !TEST_true(ossl_ed448_sign(NULL, outsig, msg5, sizeof(msg5),
    614  1.1.1.2  christos             pubkey5, privkey5, NULL, 0, 0, NULL))
    615  1.1.1.2  christos         || !TEST_int_eq(memcmp(sig5, outsig, sizeof(sig5)), 0)
    616  1.1.1.2  christos         || !TEST_true(ossl_ed448_sign(NULL, outsig, msg6, sizeof(msg6),
    617  1.1.1.2  christos             pubkey6, privkey6, NULL, 0, 0, NULL))
    618  1.1.1.2  christos         || !TEST_int_eq(memcmp(sig6, outsig, sizeof(sig6)), 0)
    619  1.1.1.2  christos         || !TEST_true(ossl_ed448_sign(NULL, outsig, msg7, sizeof(msg7),
    620  1.1.1.2  christos             pubkey7, privkey7, NULL, 0, 0, NULL))
    621  1.1.1.2  christos         || !TEST_int_eq(memcmp(sig7, outsig, sizeof(sig7)), 0)
    622  1.1.1.2  christos         || !TEST_true(ossl_ed448_sign(NULL, outsig, msg8, sizeof(msg8),
    623  1.1.1.2  christos             pubkey8, privkey8, NULL, 0, 0, NULL))
    624  1.1.1.2  christos         || !TEST_int_eq(memcmp(sig8, outsig, sizeof(sig8)), 0)
    625  1.1.1.2  christos         || !TEST_true(ossl_ed448_sign(NULL, outsig, msg9, sizeof(msg9),
    626  1.1.1.2  christos             pubkey9, privkey9, NULL, 0, 0, NULL))
    627  1.1.1.2  christos         || !TEST_int_eq(memcmp(sig9, outsig, sizeof(sig9)), 0)
    628  1.1.1.2  christos         || !TEST_true(ossl_ed448_sign(NULL, outsig,
    629  1.1.1.2  christos             dohash(hashctx, phmsg1,
    630  1.1.1.2  christos                 sizeof(phmsg1)),
    631  1.1.1.2  christos             64, phpubkey1,
    632  1.1.1.2  christos             phprivkey1, NULL, 0, 1, NULL))
    633  1.1.1.2  christos         || !TEST_int_eq(memcmp(phsig1, outsig, sizeof(phsig1)), 0)
    634  1.1.1.2  christos         || !TEST_true(ossl_ed448_sign(NULL, outsig,
    635  1.1.1.2  christos             dohash(hashctx, phmsg2,
    636  1.1.1.2  christos                 sizeof(phmsg2)),
    637  1.1.1.2  christos             64, phpubkey2,
    638  1.1.1.2  christos             phprivkey2, phcontext2,
    639  1.1.1.2  christos             sizeof(phcontext2), 1, NULL))
    640  1.1.1.2  christos         || !TEST_int_eq(memcmp(phsig2, outsig, sizeof(phsig2)), 0)) {
    641      1.1  christos         EVP_MD_CTX_free(hashctx);
    642      1.1  christos         return 0;
    643      1.1  christos     }
    644      1.1  christos 
    645      1.1  christos     EVP_MD_CTX_free(hashctx);
    646      1.1  christos     return 1;
    647      1.1  christos }
    648      1.1  christos 
    649      1.1  christos static int test_x448(void)
    650      1.1  christos {
    651      1.1  christos     uint8_t u[56], k[56], out[56];
    652      1.1  christos     unsigned int i;
    653      1.1  christos     int j = -1;
    654      1.1  christos 
    655      1.1  christos     /* Curve448 tests */
    656      1.1  christos 
    657      1.1  christos     if (!TEST_true(ossl_x448(out, in_scalar1, in_u1))
    658  1.1.1.2  christos         || !TEST_int_eq(memcmp(out, out_u1, sizeof(out)), 0)
    659  1.1.1.2  christos         || !TEST_true(ossl_x448(out, in_scalar2, in_u2))
    660  1.1.1.2  christos         || !TEST_int_eq(memcmp(out, out_u2, sizeof(out)), 0))
    661      1.1  christos         return 0;
    662      1.1  christos 
    663      1.1  christos     memcpy(u, in_u3, sizeof(u));
    664      1.1  christos     memcpy(k, in_u3, sizeof(k));
    665      1.1  christos     for (i = 1; i <= max; i++) {
    666      1.1  christos         if (verbose && i % 10000 == 0) {
    667      1.1  christos             printf(".");
    668      1.1  christos             fflush(stdout);
    669      1.1  christos         }
    670      1.1  christos 
    671      1.1  christos         if (!TEST_true(ossl_x448(out, k, u)))
    672      1.1  christos             return 0;
    673      1.1  christos 
    674      1.1  christos         if (i == 1 || i == 1000 || i == 1000000) {
    675      1.1  christos             j++;
    676      1.1  christos             if (!TEST_int_eq(memcmp(out, out_u3[j], sizeof(out)), 0)) {
    677      1.1  christos                 TEST_info("Failed at iteration %d", i);
    678      1.1  christos                 return 0;
    679      1.1  christos             }
    680      1.1  christos         }
    681      1.1  christos         memcpy(u, k, sizeof(u));
    682      1.1  christos         memcpy(k, out, sizeof(k));
    683      1.1  christos     }
    684      1.1  christos 
    685      1.1  christos     return 1;
    686      1.1  christos }
    687      1.1  christos 
    688      1.1  christos typedef enum OPTION_choice {
    689      1.1  christos     OPT_ERR = -1,
    690      1.1  christos     OPT_EOF = 0,
    691      1.1  christos     OPT_PROGRESS,
    692      1.1  christos     OPT_SLOW,
    693      1.1  christos     OPT_TEST_ENUM
    694      1.1  christos } OPTION_CHOICE;
    695      1.1  christos 
    696      1.1  christos const OPTIONS *test_get_options(void)
    697      1.1  christos {
    698      1.1  christos     static const OPTIONS test_options[] = {
    699      1.1  christos         OPT_TEST_OPTIONS_WITH_EXTRA_USAGE("conf_file\n"),
    700      1.1  christos         { "f", OPT_SLOW, '-', "Enables a slow test" },
    701      1.1  christos         { "v", OPT_PROGRESS, '-',
    702  1.1.1.2  christos             "Enables verbose mode (prints progress dots)" },
    703      1.1  christos         { NULL }
    704      1.1  christos     };
    705      1.1  christos     return test_options;
    706      1.1  christos }
    707      1.1  christos 
    708      1.1  christos int setup_tests(void)
    709      1.1  christos {
    710      1.1  christos     OPTION_CHOICE o;
    711      1.1  christos 
    712      1.1  christos     while ((o = opt_next()) != OPT_EOF) {
    713      1.1  christos         switch (o) {
    714      1.1  christos         case OPT_TEST_CASES:
    715      1.1  christos             break;
    716      1.1  christos         default:
    717      1.1  christos             return 0;
    718      1.1  christos         /*
    719      1.1  christos          * The test vectors contain one test which takes a very long time to run
    720      1.1  christos          * so we don't do that be default. Using the -f option will cause it to
    721      1.1  christos          * be run.
    722      1.1  christos          */
    723      1.1  christos         case OPT_SLOW:
    724      1.1  christos             max = 1000000;
    725      1.1  christos             break;
    726      1.1  christos         case OPT_PROGRESS:
    727      1.1  christos             verbose = 1; /* Print progress dots */
    728      1.1  christos             break;
    729      1.1  christos         }
    730      1.1  christos     }
    731      1.1  christos 
    732      1.1  christos     ADD_TEST(test_x448);
    733      1.1  christos     ADD_TEST(test_ed448);
    734      1.1  christos     return 1;
    735      1.1  christos }
    736