Home | History | Annotate | Line # | Download | only in test
      1  1.1  christos /*
      2  1.1  christos  * Copyright 2019-2022 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 
     10  1.1  christos #include <stdio.h>
     11  1.1  christos #include <stdlib.h>
     12  1.1  christos #include <string.h>
     13  1.1  christos 
     14  1.1  christos #include "internal/nelem.h"
     15  1.1  christos #include <openssl/crypto.h>
     16  1.1  christos #include <openssl/bio.h>
     17  1.1  christos #include <openssl/bn.h>
     18  1.1  christos #include <openssl/rand.h>
     19  1.1  christos #include <openssl/err.h>
     20  1.1  christos #include <openssl/evp.h>
     21  1.1  christos #include <openssl/ec.h>
     22  1.1  christos #include "testutil.h"
     23  1.1  christos 
     24  1.1  christos #if defined(OPENSSL_NO_DH) && defined(OPENSSL_NO_DSA) && defined(OPENSSL_NO_EC)
     25  1.1  christos # define OPENSSL_NO_KEYPARAMS
     26  1.1  christos #endif
     27  1.1  christos 
     28  1.1  christos #ifndef OPENSSL_NO_KEYPARAMS
     29  1.1  christos 
     30  1.1  christos struct pubkey {
     31  1.1  christos     int bad;
     32  1.1  christos     const unsigned char *key_bin;
     33  1.1  christos     size_t key_bin_len;
     34  1.1  christos };
     35  1.1  christos 
     36  1.1  christos # ifndef OPENSSL_NO_DH
     37  1.1  christos static const unsigned char dhparam_bin[] = {
     38  1.1  christos 0x30,0x82,0x01,0x08,0x02,0x82,0x01,0x01,0x00,0xc0,0xd1,0x2e,0x14,0x18,0xbd,0x03,
     39  1.1  christos 0xfd,0x39,0xe1,0x99,0xf4,0x93,0x06,0x2d,0x49,0xc6,0xb5,0xb9,0xf0,0x91,0xcb,0x2f,
     40  1.1  christos 0x48,0x54,0x79,0x7d,0xc4,0x65,0x11,0x55,0xf7,0x99,0xde,0x42,0x83,0x84,0xc0,0xf8,
     41  1.1  christos 0x88,0x89,0xa0,0xff,0xff,0x7d,0xe8,0xef,0x9e,0xbc,0xf7,0x1d,0x70,0x6d,0x3a,0x33,
     42  1.1  christos 0x49,0x28,0xa1,0xa3,0xe1,0x41,0xc4,0x8b,0x91,0xf9,0xf2,0xb6,0xe2,0x77,0x79,0x38,
     43  1.1  christos 0x7d,0x21,0xb3,0xdf,0x79,0x9c,0x5e,0x65,0x16,0x00,0x16,0x82,0xb2,0x36,0x46,0x21,
     44  1.1  christos 0xac,0xaf,0x86,0xc7,0xe3,0x10,0x44,0x48,0xfb,0xbd,0xad,0x4e,0x11,0x73,0x4c,0x25,
     45  1.1  christos 0xb0,0x8c,0x1c,0x1e,0x8e,0x58,0x50,0x5e,0x43,0x89,0xe4,0xd9,0x34,0xf8,0x3b,0xcc,
     46  1.1  christos 0x36,0x2c,0x1b,0xb3,0xb2,0x77,0x0c,0xa5,0x96,0xc1,0x8a,0x38,0xd4,0xe3,0x9c,0x2a,
     47  1.1  christos 0xde,0x49,0x46,0xc7,0xd4,0xa2,0x47,0xc9,0x0a,0xbd,0x84,0xd4,0x1c,0xbc,0xb6,0x19,
     48  1.1  christos 0x04,0x94,0x64,0xfa,0x8a,0x11,0x9c,0x5f,0x4a,0x4c,0x0f,0x58,0x81,0x02,0xbf,0xcf,
     49  1.1  christos 0x87,0x27,0x2b,0xae,0x8e,0xe2,0x61,0x7a,0xdb,0xba,0x23,0x39,0x25,0x44,0xdc,0x22,
     50  1.1  christos 0x75,0xc3,0x28,0xd9,0x12,0x33,0x84,0x32,0xd4,0x5d,0xd9,0x77,0xf8,0x04,0x90,0x38,
     51  1.1  christos 0x0a,0xec,0x84,0x93,0x43,0xce,0xe7,0x07,0x42,0x7d,0x2d,0xe0,0x21,0x3b,0x19,0x22,
     52  1.1  christos 0xa7,0x8f,0x50,0x31,0xda,0xd0,0x0d,0xd3,0x0b,0xdb,0xad,0xed,0x94,0x92,0xff,0x83,
     53  1.1  christos 0x06,0x7f,0x7f,0xd7,0x7b,0x42,0x5b,0xba,0x93,0x7a,0xeb,0x43,0x5f,0xce,0x59,0x26,
     54  1.1  christos 0xe8,0x76,0xdc,0xee,0xe2,0xbe,0x36,0x7a,0x83,0x02,0x01,0x02
     55  1.1  christos };
     56  1.1  christos static const unsigned char dhkey_1[] = {
     57  1.1  christos     0x7a, 0x49, 0xcb, 0xc3, 0x25, 0x67, 0x7a, 0x61,
     58  1.1  christos     0xd0, 0x60, 0x81, 0x0f, 0xf6, 0xbd, 0x38, 0x82,
     59  1.1  christos     0xe7, 0x38, 0x8c, 0xe9, 0xd1, 0x04, 0x33, 0xbf,
     60  1.1  christos     0x8a, 0x03, 0x63, 0xb3, 0x05, 0x04, 0xb5, 0x1f,
     61  1.1  christos     0xba, 0x9f, 0x1a, 0x5f, 0x31, 0x3e, 0x96, 0x79,
     62  1.1  christos     0x88, 0x7d, 0x3f, 0x59, 0x6d, 0x3b, 0xf3, 0x2f,
     63  1.1  christos     0xf2, 0xa6, 0x43, 0x48, 0x64, 0x5a, 0x6a, 0x32,
     64  1.1  christos     0x1f, 0x24, 0x37, 0x62, 0x54, 0x3a, 0x7d, 0xab,
     65  1.1  christos     0x26, 0x77, 0x7c, 0xec, 0x57, 0x3c, 0xa4, 0xbd,
     66  1.1  christos     0x96, 0x9d, 0xaa, 0x3b, 0x0e, 0x9a, 0x55, 0x7e,
     67  1.1  christos     0x1d, 0xb4, 0x47, 0x5b, 0xea, 0x20, 0x3c, 0x6d,
     68  1.1  christos     0xbe, 0xd6, 0x70, 0x7d, 0xa8, 0x9e, 0x84, 0xb4,
     69  1.1  christos     0x03, 0x52, 0xf2, 0x08, 0x4c, 0x98, 0xd3, 0x4f,
     70  1.1  christos     0x58, 0xb3, 0xdf, 0xb4, 0xe6, 0xdc, 0x2c, 0x43,
     71  1.1  christos     0x55, 0xd1, 0xce, 0x2a, 0xb3, 0xfc, 0xe0, 0x29,
     72  1.1  christos     0x97, 0xd8, 0xd8, 0x62, 0xc6, 0x87, 0x0a, 0x1b,
     73  1.1  christos     0xfd, 0x72, 0x74, 0xe0, 0xa9, 0xfb, 0xfa, 0x91,
     74  1.1  christos     0xf2, 0xc1, 0x09, 0x93, 0xea, 0x63, 0xf6, 0x9a,
     75  1.1  christos     0x4b, 0xdf, 0x4e, 0xdf, 0x6b, 0xf9, 0xeb, 0xf6,
     76  1.1  christos     0x66, 0x3c, 0xfd, 0x6f, 0x68, 0xcb, 0xdb, 0x6e,
     77  1.1  christos     0x40, 0x65, 0xf7, 0xf2, 0x46, 0xe5, 0x0d, 0x9a,
     78  1.1  christos     0xd9, 0x6f, 0xcf, 0x28, 0x22, 0x8f, 0xca, 0x0b,
     79  1.1  christos     0x30, 0xa0, 0x9e, 0xa5, 0x13, 0xba, 0x72, 0x7f,
     80  1.1  christos     0x85, 0x3d, 0x02, 0x9c, 0x97, 0x8e, 0x6f, 0xea,
     81  1.1  christos     0x6d, 0x35, 0x4e, 0xd1, 0x78, 0x7d, 0x73, 0x60,
     82  1.1  christos     0x92, 0xa9, 0x12, 0xf4, 0x2a, 0xac, 0x17, 0x97,
     83  1.1  christos     0xf3, 0x7b, 0x79, 0x08, 0x69, 0xd1, 0x9e, 0xb5,
     84  1.1  christos     0xf8, 0x2a, 0x0a, 0x2b, 0x00, 0x7b, 0x16, 0x8d,
     85  1.1  christos     0x41, 0x82, 0x3a, 0x72, 0x58, 0x57, 0x80, 0x65,
     86  1.1  christos     0xae, 0x17, 0xbc, 0x3a, 0x5b, 0x7e, 0x5c, 0x2d,
     87  1.1  christos     0xae, 0xb2, 0xc2, 0x26, 0x20, 0x9a, 0xaa, 0x57,
     88  1.1  christos     0x4b, 0x7d, 0x43, 0x41, 0x96, 0x3f, 0xf0, 0x0d
     89  1.1  christos };
     90  1.1  christos /* smaller but still valid key */
     91  1.1  christos static const unsigned char dhkey_2[] = {
     92  1.1  christos     0x73, 0xb2, 0x22, 0x91, 0x27, 0xb9, 0x45, 0xb0,
     93  1.1  christos     0xfd, 0x17, 0x66, 0x79, 0x9b, 0x32, 0x71, 0x92,
     94  1.1  christos     0x97, 0x1d, 0x70, 0x02, 0x37, 0x70, 0x79, 0x63,
     95  1.1  christos     0xed, 0x11, 0x22, 0xe9, 0xe6, 0xf8, 0xeb, 0xd7,
     96  1.1  christos     0x90, 0x00, 0xe6, 0x5c, 0x47, 0x02, 0xfb, 0x13,
     97  1.1  christos     0xca, 0x29, 0x14, 0x1e, 0xf4, 0x61, 0x58, 0xf6,
     98  1.1  christos     0xaa, 0xbb, 0xcf, 0xa7, 0x82, 0x9a, 0x9e, 0x7c,
     99  1.1  christos     0x4a, 0x05, 0x42, 0xed, 0x55, 0xd8, 0x08, 0x37,
    100  1.1  christos     0x06, 0x49, 0x9b, 0xda, 0xb3, 0xb9, 0xc9, 0xc0,
    101  1.1  christos     0x56, 0x26, 0xda, 0x60, 0x1d, 0xbc, 0x06, 0x0b,
    102  1.1  christos     0xb0, 0x94, 0x4b, 0x4e, 0x95, 0xf9, 0xb4, 0x2f,
    103  1.1  christos     0x4e, 0xad, 0xf8, 0xab, 0x2d, 0x19, 0xa2, 0xe6,
    104  1.1  christos     0x6d, 0x11, 0xfd, 0x9b, 0x5a, 0x2a, 0xb0, 0x81,
    105  1.1  christos     0x42, 0x4d, 0x86, 0x76, 0xd5, 0x9e, 0xaf, 0xf9,
    106  1.1  christos     0x6f, 0x79, 0xab, 0x1d, 0xfe, 0xd8, 0xc8, 0xba,
    107  1.1  christos     0xb6, 0xce, 0x03, 0x61, 0x48, 0x53, 0xd8, 0x0b,
    108  1.1  christos     0x83, 0xf0, 0xb0, 0x46, 0xa0, 0xea, 0x46, 0x60,
    109  1.1  christos     0x7a, 0x39, 0x4e, 0x46, 0x6a, 0xbb, 0x07, 0x6c,
    110  1.1  christos     0x8c, 0x7d, 0xb7, 0x7d, 0x5b, 0xe5, 0x24, 0xa5,
    111  1.1  christos     0xab, 0x41, 0x8a, 0xc4, 0x63, 0xf9, 0xce, 0x20,
    112  1.1  christos     0x6f, 0x58, 0x4f, 0x0e, 0x42, 0x82, 0x9e, 0x17,
    113  1.1  christos     0x53, 0xa6, 0xd6, 0x42, 0x3e, 0x80, 0x66, 0x6f,
    114  1.1  christos     0x2a, 0x1c, 0x30, 0x08, 0x01, 0x99, 0x5a, 0x4f,
    115  1.1  christos     0x72, 0x16, 0xed, 0xb0, 0xd6, 0x8c, 0xf0, 0x7a,
    116  1.1  christos     0x33, 0x15, 0xc4, 0x95, 0x65, 0xba, 0x11, 0x37,
    117  1.1  christos     0xa0, 0xcc, 0xe7, 0x45, 0x65, 0x4f, 0x17, 0x0a,
    118  1.1  christos     0x2c, 0x62, 0xc0, 0x65, 0x3b, 0x65, 0x2a, 0x56,
    119  1.1  christos     0xf7, 0x29, 0x8a, 0x9b, 0x1b, 0xbb, 0x0c, 0x40,
    120  1.1  christos     0xcd, 0x66, 0x4b, 0x4f, 0x2f, 0xba, 0xdb, 0x59,
    121  1.1  christos     0x93, 0x6d, 0x34, 0xf3, 0x8d, 0xde, 0x68, 0x99,
    122  1.1  christos     0x78, 0xfc, 0xac, 0x95, 0xd9, 0xa3, 0x74, 0xe6,
    123  1.1  christos     0x24, 0x96, 0x98, 0x6f, 0x64, 0x71, 0x76
    124  1.1  christos };
    125  1.1  christos /* 1 is not a valid key */
    126  1.1  christos static const unsigned char dhkey_3[] = {
    127  1.1  christos     0x01
    128  1.1  christos };
    129  1.1  christos # endif
    130  1.1  christos 
    131  1.1  christos # ifndef OPENSSL_NO_DSA
    132  1.1  christos static const unsigned char dsaparam_bin[] = {
    133  1.1  christos 0x30,0x82,0x02,0x28,0x02,0x82,0x01,0x01,0x00,0xf2,0x85,0x01,0xa5,0xb9,0x56,0x65,
    134  1.1  christos 0x19,0xff,0x9a,0x7d,0xf9,0x90,0xd6,0xaa,0x73,0xac,0xf7,0x94,0xfa,0x8a,0x64,0x6d,
    135  1.1  christos 0xa0,0x01,0x42,0xe5,0x45,0xfc,0x53,0x72,0xb0,0x7c,0xe6,0x3b,0xfb,0x09,0x33,0x41,
    136  1.1  christos 0x27,0xbd,0x00,0xb5,0x18,0x87,0x62,0xa8,0x2b,0xfc,0xd0,0x52,0x4a,0x14,0x2d,0xaa,
    137  1.1  christos 0x36,0xc6,0xf3,0xa9,0xe3,0x90,0x1b,0x74,0xdf,0x0a,0x6d,0x33,0xba,0xf4,0x32,0x6d,
    138  1.1  christos 0xba,0x36,0x68,0x1d,0x83,0x36,0x50,0xc6,0x62,0xc0,0x40,0x67,0x0e,0xf6,0x22,0x00,
    139  1.1  christos 0x62,0x1b,0x76,0x72,0x62,0x5f,0xa0,0xdf,0x38,0xb1,0x1d,0x26,0x70,0x9b,0x84,0x64,
    140  1.1  christos 0xbb,0x16,0x15,0xc2,0x66,0xb9,0x97,0xd0,0x07,0xf1,0x4b,0x70,0x02,0x03,0xf1,0xd2,
    141  1.1  christos 0x03,0xdb,0x78,0x8b,0xb4,0xda,0x6f,0x3c,0xe2,0x31,0xa8,0x1c,0x99,0xea,0x9c,0x75,
    142  1.1  christos 0x28,0x96,0x82,0x16,0x77,0xac,0x79,0x32,0x61,0x87,0xec,0xb7,0xb4,0xc3,0xea,0x12,
    143  1.1  christos 0x62,0x1f,0x08,0xb8,0x16,0xab,0xcc,0xef,0x28,0xdf,0x06,0x07,0xbe,0xb0,0xdc,0x78,
    144  1.1  christos 0x83,0x8a,0x70,0x80,0x34,0xe6,0x91,0xe3,0xd3,0x92,0xd9,0xf4,0x56,0x53,0x52,0xb7,
    145  1.1  christos 0x35,0xf6,0x2a,0xec,0x4b,0xcb,0xa2,0x3c,0xc3,0x0c,0x94,0xa7,0x4e,0x1c,0x42,0x9c,
    146  1.1  christos 0x72,0x99,0x60,0x8c,0xfe,0xfb,0x60,0x57,0x75,0xf5,0x23,0x11,0x12,0xba,0x97,0xcd,
    147  1.1  christos 0xad,0x5a,0x0b,0xa6,0x1f,0x6a,0x48,0x2e,0x8d,0xda,0x95,0xc6,0x0e,0x14,0xde,0xf7,
    148  1.1  christos 0x22,0x55,0xa8,0x6b,0x25,0xdf,0xa2,0xab,0x33,0x65,0x56,0xfc,0x78,0x4f,0x62,0xdf,
    149  1.1  christos 0x48,0xdd,0xce,0x8b,0xe1,0x76,0xf4,0xf6,0x7f,0x02,0x1d,0x00,0xac,0xb0,0xb8,0x92,
    150  1.1  christos 0x3b,0x6b,0x61,0xcf,0x36,0x6d,0xf2,0x1e,0x5d,0xe0,0x7b,0xf5,0x73,0x48,0xa3,0x8b,
    151  1.1  christos 0x86,0x9e,0x88,0xce,0x40,0xf8,0x27,0x6d,0x02,0x82,0x01,0x00,0x77,0x6b,0x89,0xd6,
    152  1.1  christos 0x8f,0x3d,0xce,0x52,0x30,0x74,0xb2,0xa1,0x13,0x96,0xd5,0x92,0xf2,0xf1,0x6b,0x10,
    153  1.1  christos 0x31,0x0b,0xf3,0x69,0xaa,0xbf,0x4b,0x6c,0xcb,0x3f,0x6d,0x58,0x76,0x44,0x09,0xf9,
    154  1.1  christos 0x28,0xef,0xa0,0xe4,0x55,0x77,0x57,0xe0,0xfb,0xcc,0x9a,0x6a,0x2c,0x90,0xec,0x72,
    155  1.1  christos 0x24,0x0b,0x43,0xc5,0xbc,0x31,0xed,0x1a,0x46,0x2c,0x76,0x42,0x9e,0xc0,0x82,0xfc,
    156  1.1  christos 0xff,0xf9,0x7e,0xe2,0x1f,0x39,0xf3,0x3b,0xdb,0x27,0x36,0xe7,0xf5,0x3b,0xc2,0x23,
    157  1.1  christos 0xb6,0xd0,0xcf,0x5b,0x85,0x2e,0x1b,0x00,0x5b,0x31,0xaa,0x72,0x8f,0x37,0xee,0x56,
    158  1.1  christos 0x71,0xc4,0xfd,0x3c,0x8d,0xfa,0x5b,0xab,0xb1,0xa9,0x52,0x76,0xa0,0xe4,0xe3,0x78,
    159  1.1  christos 0x83,0x64,0x5d,0xd7,0x6c,0xec,0x9b,0x40,0x65,0xe2,0x0a,0x11,0x19,0x60,0xdd,0xce,
    160  1.1  christos 0x29,0x9f,0xc6,0x1d,0x0a,0xab,0x8e,0x59,0x25,0xc5,0x0b,0x9c,0x02,0x45,0xba,0x99,
    161  1.1  christos 0x74,0x22,0x1d,0xc1,0x57,0xca,0x50,0x8c,0x5e,0xdf,0xd8,0x5d,0x43,0xae,0x06,0x28,
    162  1.1  christos 0x29,0x82,0xf6,0x5a,0xa9,0x51,0xa2,0x04,0x1d,0xbf,0x88,0x15,0x98,0xce,0x8a,0xb4,
    163  1.1  christos 0x3b,0xe5,0x30,0x29,0xce,0x0c,0x9b,0xf8,0xdb,0xbf,0x06,0x9f,0xd0,0x59,0x18,0xd4,
    164  1.1  christos 0x0b,0x94,0xbf,0xe9,0x67,0x6b,0x9e,0xf0,0x72,0xc6,0xbf,0x79,0x8f,0x1e,0xa3,0x95,
    165  1.1  christos 0x24,0xe3,0xcb,0x58,0xb5,0x67,0xd3,0xae,0x79,0xb0,0x28,0x9c,0x9a,0xd0,0xa4,0xe7,
    166  1.1  christos 0x22,0x15,0xc1,0x8b,0x04,0xb9,0x8a,0xa8,0xb7,0x1b,0x62,0x44,0xc6,0xef,0x4b,0x74,
    167  1.1  christos 0xd0,0xfd,0xa9,0xb4,0x4e,0xdd,0x7d,0x38,0x60,0xd1,0x40,0xcd
    168  1.1  christos };
    169  1.1  christos # endif
    170  1.1  christos 
    171  1.1  christos # ifndef OPENSSL_NO_EC
    172  1.1  christos static const unsigned char ecparam_bin[] = {
    173  1.1  christos 0x06,0x08,0x2a,0x86,0x48,0xce,0x3d,0x03,0x01,0x07
    174  1.1  christos };
    175  1.1  christos static const unsigned char eckey_1[] = {
    176  1.1  christos     0x04, 0xc8, 0x65, 0x45, 0x63, 0x73, 0xe5, 0x0a,
    177  1.1  christos     0x61, 0x1d, 0xcf, 0x60, 0x76, 0x2c, 0xe7, 0x36,
    178  1.1  christos     0x0b, 0x76, 0xc2, 0x92, 0xfc, 0xa4, 0x56, 0xee,
    179  1.1  christos     0xc2, 0x62, 0x05, 0x00, 0x80, 0xe4, 0x4f, 0x07,
    180  1.1  christos     0x3b, 0xf4, 0x59, 0xb8, 0xc3, 0xb3, 0x1f, 0x77,
    181  1.1  christos     0x36, 0x16, 0x4c, 0x72, 0x2a, 0xc0, 0x89, 0x89,
    182  1.1  christos     0xd6, 0x16, 0x14, 0xee, 0x2f, 0x5a, 0xde, 0x9e,
    183  1.1  christos     0x83, 0xc5, 0x78, 0xd0, 0x0b, 0x69, 0xb4, 0xb9,
    184  1.1  christos     0xf1
    185  1.1  christos };
    186  1.1  christos /* a modified key */
    187  1.1  christos static const unsigned char eckey_2[] = {
    188  1.1  christos     0x04, 0xc8, 0x65, 0x45, 0x63, 0x73, 0xe5, 0x0a,
    189  1.1  christos     0x61, 0x1d, 0xcf, 0x60, 0x76, 0x2c, 0xe7, 0x36,
    190  1.1  christos     0x0b, 0x77, 0xc2, 0x92, 0xfc, 0xa4, 0x56, 0xee,
    191  1.1  christos     0xc2, 0x62, 0x05, 0x00, 0x80, 0xe4, 0x4f, 0x07,
    192  1.1  christos     0x3b, 0xf4, 0x59, 0xb8, 0xc3, 0xb3, 0x1f, 0x77,
    193  1.1  christos     0x36, 0x16, 0x4c, 0x72, 0x2a, 0xc0, 0x89, 0x89,
    194  1.1  christos     0xd6, 0x16, 0x14, 0xee, 0x2f, 0x5a, 0xde, 0x9e,
    195  1.1  christos     0x83, 0xc5, 0x78, 0xd0, 0x0b, 0x69, 0xb4, 0xb9,
    196  1.1  christos     0xf1
    197  1.1  christos };
    198  1.1  christos /* an added byte */
    199  1.1  christos static const unsigned char eckey_3[] = {
    200  1.1  christos     0x04, 0xc8, 0x65, 0x45, 0x63, 0x73, 0xe5, 0x0a,
    201  1.1  christos     0x61, 0x1d, 0xcf, 0x60, 0x76, 0x2c, 0xe7, 0x36,
    202  1.1  christos     0x0b, 0x76, 0xc2, 0x92, 0xfc, 0xa4, 0x56, 0xee,
    203  1.1  christos     0xc2, 0x62, 0x05, 0x00, 0x80, 0xe4, 0x4f, 0x07,
    204  1.1  christos     0x3b, 0xf4, 0x59, 0xb8, 0xc3, 0xb3, 0x1f, 0x77,
    205  1.1  christos     0x36, 0x16, 0x4c, 0x72, 0x2a, 0xc0, 0x89, 0x89,
    206  1.1  christos     0xd6, 0x16, 0x14, 0xee, 0x2f, 0x5a, 0xde, 0x9e,
    207  1.1  christos     0x83, 0xc5, 0x78, 0xd0, 0x0b, 0x69, 0xb4, 0xb9,
    208  1.1  christos     0xf1, 0xaa
    209  1.1  christos };
    210  1.1  christos # endif
    211  1.1  christos 
    212  1.1  christos #define NUM_KEYS 10
    213  1.1  christos 
    214  1.1  christos static const struct {
    215  1.1  christos     int type;
    216  1.1  christos     const unsigned char *param_bin;
    217  1.1  christos     size_t param_bin_len;
    218  1.1  christos     struct pubkey keys[NUM_KEYS];
    219  1.1  christos } pkey_params [] = {
    220  1.1  christos # ifndef OPENSSL_NO_DH
    221  1.1  christos     { EVP_PKEY_DH, dhparam_bin, sizeof(dhparam_bin),
    222  1.1  christos         { { 0, dhkey_1, sizeof(dhkey_1) },
    223  1.1  christos           { 0, dhkey_2, sizeof(dhkey_2) },
    224  1.1  christos           { 1, dhkey_3, sizeof(dhkey_3) },
    225  1.1  christos           { 1, dhkey_1, 0 },
    226  1.1  christos           { 1, dhparam_bin, sizeof(dhparam_bin) }
    227  1.1  christos         }
    228  1.1  christos     },
    229  1.1  christos # endif
    230  1.1  christos # ifndef OPENSSL_NO_DSA
    231  1.1  christos     { EVP_PKEY_DSA, dsaparam_bin, sizeof(dsaparam_bin) },
    232  1.1  christos # endif
    233  1.1  christos # ifndef OPENSSL_NO_EC
    234  1.1  christos     { EVP_PKEY_EC, ecparam_bin, sizeof(ecparam_bin),
    235  1.1  christos         { { 0, eckey_1, sizeof(eckey_1) },
    236  1.1  christos           { 1, eckey_2, sizeof(eckey_2) },
    237  1.1  christos           { 1, eckey_3, sizeof(eckey_3) },
    238  1.1  christos           { 1, eckey_1, 0 },
    239  1.1  christos           { 1, eckey_1, sizeof(eckey_1) - 1 }
    240  1.1  christos         }
    241  1.1  christos     }
    242  1.1  christos # endif
    243  1.1  christos };
    244  1.1  christos 
    245  1.1  christos static int params_bio_test(int id)
    246  1.1  christos {
    247  1.1  christos     int ret, out_len;
    248  1.1  christos     BIO *in = NULL, *out = NULL;
    249  1.1  christos     EVP_PKEY *in_key = NULL, *out_key = NULL;
    250  1.1  christos     unsigned char *out_bin;
    251  1.1  christos     int type = pkey_params[id].type;
    252  1.1  christos 
    253  1.1  christos     ret = TEST_ptr(in = BIO_new_mem_buf(pkey_params[id].param_bin,
    254  1.1  christos                                         (int)pkey_params[id].param_bin_len))
    255  1.1  christos         /* Load in pkey params from binary */
    256  1.1  christos         && TEST_ptr(d2i_KeyParams_bio(type, &in_key, in))
    257  1.1  christos         && TEST_ptr(out = BIO_new(BIO_s_mem()))
    258  1.1  christos         /* Save pkey params to binary */
    259  1.1  christos         && TEST_int_gt(i2d_KeyParams_bio(out, in_key), 0)
    260  1.1  christos         /* test the output binary is the expected value */
    261  1.1  christos         && TEST_int_gt(out_len = BIO_get_mem_data(out, &out_bin), 0)
    262  1.1  christos         && TEST_mem_eq(pkey_params[id].param_bin,
    263  1.1  christos                        (int)pkey_params[id].param_bin_len,
    264  1.1  christos                        out_bin, out_len);
    265  1.1  christos 
    266  1.1  christos     BIO_free(in);
    267  1.1  christos     BIO_free(out);
    268  1.1  christos     EVP_PKEY_free(in_key);
    269  1.1  christos     EVP_PKEY_free(out_key);
    270  1.1  christos     return ret;
    271  1.1  christos }
    272  1.1  christos 
    273  1.1  christos static int set_enc_pubkey_test(int id)
    274  1.1  christos {
    275  1.1  christos     int ret, i;
    276  1.1  christos     BIO *in = NULL;
    277  1.1  christos     EVP_PKEY *in_key = NULL;
    278  1.1  christos     int type = pkey_params[id].type;
    279  1.1  christos     const struct pubkey *keys = pkey_params[id].keys;
    280  1.1  christos 
    281  1.1  christos     if (keys[0].key_bin == NULL)
    282  1.1  christos         return TEST_skip("Not applicable test");
    283  1.1  christos 
    284  1.1  christos     ret = TEST_ptr(in = BIO_new_mem_buf(pkey_params[id].param_bin,
    285  1.1  christos                                         (int)pkey_params[id].param_bin_len))
    286  1.1  christos         /* Load in pkey params from binary */
    287  1.1  christos         && TEST_ptr(d2i_KeyParams_bio(type, &in_key, in));
    288  1.1  christos 
    289  1.1  christos     for (i = 0; ret && i < NUM_KEYS && keys[i].key_bin != NULL; i++) {
    290  1.1  christos         if (keys[i].bad) {
    291  1.1  christos             ERR_set_mark();
    292  1.1  christos             ret = ret
    293  1.1  christos                 && TEST_int_le(EVP_PKEY_set1_encoded_public_key(in_key,
    294  1.1  christos                                                                 keys[i].key_bin,
    295  1.1  christos                                                                 keys[i].key_bin_len),
    296  1.1  christos                                0);
    297  1.1  christos             ERR_pop_to_mark();
    298  1.1  christos         } else {
    299  1.1  christos             ret = ret
    300  1.1  christos                 && TEST_int_gt(EVP_PKEY_set1_encoded_public_key(in_key,
    301  1.1  christos                                                                 keys[i].key_bin,
    302  1.1  christos                                                                 keys[i].key_bin_len),
    303  1.1  christos                                0);
    304  1.1  christos         }
    305  1.1  christos         if (!ret)
    306  1.1  christos             TEST_info("Test key index #%d", i);
    307  1.1  christos     }
    308  1.1  christos 
    309  1.1  christos     BIO_free(in);
    310  1.1  christos     EVP_PKEY_free(in_key);
    311  1.1  christos     return ret;
    312  1.1  christos }
    313  1.1  christos #endif
    314  1.1  christos 
    315  1.1  christos int setup_tests(void)
    316  1.1  christos {
    317  1.1  christos #ifdef OPENSSL_NO_KEYPARAMS
    318  1.1  christos     TEST_note("No DH/DSA/EC support");
    319  1.1  christos #else
    320  1.1  christos     ADD_ALL_TESTS(params_bio_test, OSSL_NELEM(pkey_params));
    321  1.1  christos     ADD_ALL_TESTS(set_enc_pubkey_test, OSSL_NELEM(pkey_params));
    322  1.1  christos #endif
    323  1.1  christos     return 1;
    324  1.1  christos }
    325