evp_extra_test2.c revision 1.1.1.1
1/* 2 * Copyright 2015-2022 The OpenSSL Project Authors. All Rights Reserved. 3 * 4 * Licensed under the Apache License 2.0 (the "License"). You may not use 5 * this file except in compliance with the License. You can obtain a copy 6 * in the file LICENSE in the source distribution or at 7 * https://www.openssl.org/source/license.html 8 */ 9 10/* We need to use some deprecated APIs */ 11#define OPENSSL_SUPPRESS_DEPRECATED 12 13/* 14 * Really these tests should be in evp_extra_test - but that doesn't 15 * yet support testing with a non-default libctx. Once it does we should move 16 * everything into one file. Consequently some things are duplicated between 17 * the two files. 18 */ 19 20#include <openssl/evp.h> 21#include <openssl/pem.h> 22#include <openssl/provider.h> 23#include <openssl/rsa.h> 24#include <openssl/dh.h> 25#include <openssl/core_names.h> 26 27#include "testutil.h" 28#include "internal/nelem.h" 29 30static OSSL_LIB_CTX *mainctx = NULL; 31static OSSL_PROVIDER *nullprov = NULL; 32 33/* 34 * kExampleRSAKeyDER is an RSA private key in ASN.1, DER format. Of course, you 35 * should never use this key anywhere but in an example. 36 */ 37static const unsigned char kExampleRSAKeyDER[] = { 38 0x30, 0x82, 0x02, 0x5c, 0x02, 0x01, 0x00, 0x02, 0x81, 0x81, 0x00, 0xf8, 39 0xb8, 0x6c, 0x83, 0xb4, 0xbc, 0xd9, 0xa8, 0x57, 0xc0, 0xa5, 0xb4, 0x59, 40 0x76, 0x8c, 0x54, 0x1d, 0x79, 0xeb, 0x22, 0x52, 0x04, 0x7e, 0xd3, 0x37, 41 0xeb, 0x41, 0xfd, 0x83, 0xf9, 0xf0, 0xa6, 0x85, 0x15, 0x34, 0x75, 0x71, 42 0x5a, 0x84, 0xa8, 0x3c, 0xd2, 0xef, 0x5a, 0x4e, 0xd3, 0xde, 0x97, 0x8a, 43 0xdd, 0xff, 0xbb, 0xcf, 0x0a, 0xaa, 0x86, 0x92, 0xbe, 0xb8, 0x50, 0xe4, 44 0xcd, 0x6f, 0x80, 0x33, 0x30, 0x76, 0x13, 0x8f, 0xca, 0x7b, 0xdc, 0xec, 45 0x5a, 0xca, 0x63, 0xc7, 0x03, 0x25, 0xef, 0xa8, 0x8a, 0x83, 0x58, 0x76, 46 0x20, 0xfa, 0x16, 0x77, 0xd7, 0x79, 0x92, 0x63, 0x01, 0x48, 0x1a, 0xd8, 47 0x7b, 0x67, 0xf1, 0x52, 0x55, 0x49, 0x4e, 0xd6, 0x6e, 0x4a, 0x5c, 0xd7, 48 0x7a, 0x37, 0x36, 0x0c, 0xde, 0xdd, 0x8f, 0x44, 0xe8, 0xc2, 0xa7, 0x2c, 49 0x2b, 0xb5, 0xaf, 0x64, 0x4b, 0x61, 0x07, 0x02, 0x03, 0x01, 0x00, 0x01, 50 0x02, 0x81, 0x80, 0x74, 0x88, 0x64, 0x3f, 0x69, 0x45, 0x3a, 0x6d, 0xc7, 51 0x7f, 0xb9, 0xa3, 0xc0, 0x6e, 0xec, 0xdc, 0xd4, 0x5a, 0xb5, 0x32, 0x85, 52 0x5f, 0x19, 0xd4, 0xf8, 0xd4, 0x3f, 0x3c, 0xfa, 0xc2, 0xf6, 0x5f, 0xee, 53 0xe6, 0xba, 0x87, 0x74, 0x2e, 0xc7, 0x0c, 0xd4, 0x42, 0xb8, 0x66, 0x85, 54 0x9c, 0x7b, 0x24, 0x61, 0xaa, 0x16, 0x11, 0xf6, 0xb5, 0xb6, 0xa4, 0x0a, 55 0xc9, 0x55, 0x2e, 0x81, 0xa5, 0x47, 0x61, 0xcb, 0x25, 0x8f, 0xc2, 0x15, 56 0x7b, 0x0e, 0x7c, 0x36, 0x9f, 0x3a, 0xda, 0x58, 0x86, 0x1c, 0x5b, 0x83, 57 0x79, 0xe6, 0x2b, 0xcc, 0xe6, 0xfa, 0x2c, 0x61, 0xf2, 0x78, 0x80, 0x1b, 58 0xe2, 0xf3, 0x9d, 0x39, 0x2b, 0x65, 0x57, 0x91, 0x3d, 0x71, 0x99, 0x73, 59 0xa5, 0xc2, 0x79, 0x20, 0x8c, 0x07, 0x4f, 0xe5, 0xb4, 0x60, 0x1f, 0x99, 60 0xa2, 0xb1, 0x4f, 0x0c, 0xef, 0xbc, 0x59, 0x53, 0x00, 0x7d, 0xb1, 0x02, 61 0x41, 0x00, 0xfc, 0x7e, 0x23, 0x65, 0x70, 0xf8, 0xce, 0xd3, 0x40, 0x41, 62 0x80, 0x6a, 0x1d, 0x01, 0xd6, 0x01, 0xff, 0xb6, 0x1b, 0x3d, 0x3d, 0x59, 63 0x09, 0x33, 0x79, 0xc0, 0x4f, 0xde, 0x96, 0x27, 0x4b, 0x18, 0xc6, 0xd9, 64 0x78, 0xf1, 0xf4, 0x35, 0x46, 0xe9, 0x7c, 0x42, 0x7a, 0x5d, 0x9f, 0xef, 65 0x54, 0xb8, 0xf7, 0x9f, 0xc4, 0x33, 0x6c, 0xf3, 0x8c, 0x32, 0x46, 0x87, 66 0x67, 0x30, 0x7b, 0xa7, 0xac, 0xe3, 0x02, 0x41, 0x00, 0xfc, 0x2c, 0xdf, 67 0x0c, 0x0d, 0x88, 0xf5, 0xb1, 0x92, 0xa8, 0x93, 0x47, 0x63, 0x55, 0xf5, 68 0xca, 0x58, 0x43, 0xba, 0x1c, 0xe5, 0x9e, 0xb6, 0x95, 0x05, 0xcd, 0xb5, 69 0x82, 0xdf, 0xeb, 0x04, 0x53, 0x9d, 0xbd, 0xc2, 0x38, 0x16, 0xb3, 0x62, 70 0xdd, 0xa1, 0x46, 0xdb, 0x6d, 0x97, 0x93, 0x9f, 0x8a, 0xc3, 0x9b, 0x64, 71 0x7e, 0x42, 0xe3, 0x32, 0x57, 0x19, 0x1b, 0xd5, 0x6e, 0x85, 0xfa, 0xb8, 72 0x8d, 0x02, 0x41, 0x00, 0xbc, 0x3d, 0xde, 0x6d, 0xd6, 0x97, 0xe8, 0xba, 73 0x9e, 0x81, 0x37, 0x17, 0xe5, 0xa0, 0x64, 0xc9, 0x00, 0xb7, 0xe7, 0xfe, 74 0xf4, 0x29, 0xd9, 0x2e, 0x43, 0x6b, 0x19, 0x20, 0xbd, 0x99, 0x75, 0xe7, 75 0x76, 0xf8, 0xd3, 0xae, 0xaf, 0x7e, 0xb8, 0xeb, 0x81, 0xf4, 0x9d, 0xfe, 76 0x07, 0x2b, 0x0b, 0x63, 0x0b, 0x5a, 0x55, 0x90, 0x71, 0x7d, 0xf1, 0xdb, 77 0xd9, 0xb1, 0x41, 0x41, 0x68, 0x2f, 0x4e, 0x39, 0x02, 0x40, 0x5a, 0x34, 78 0x66, 0xd8, 0xf5, 0xe2, 0x7f, 0x18, 0xb5, 0x00, 0x6e, 0x26, 0x84, 0x27, 79 0x14, 0x93, 0xfb, 0xfc, 0xc6, 0x0f, 0x5e, 0x27, 0xe6, 0xe1, 0xe9, 0xc0, 80 0x8a, 0xe4, 0x34, 0xda, 0xe9, 0xa2, 0x4b, 0x73, 0xbc, 0x8c, 0xb9, 0xba, 81 0x13, 0x6c, 0x7a, 0x2b, 0x51, 0x84, 0xa3, 0x4a, 0xe0, 0x30, 0x10, 0x06, 82 0x7e, 0xed, 0x17, 0x5a, 0x14, 0x00, 0xc9, 0xef, 0x85, 0xea, 0x52, 0x2c, 83 0xbc, 0x65, 0x02, 0x40, 0x51, 0xe3, 0xf2, 0x83, 0x19, 0x9b, 0xc4, 0x1e, 84 0x2f, 0x50, 0x3d, 0xdf, 0x5a, 0xa2, 0x18, 0xca, 0x5f, 0x2e, 0x49, 0xaf, 85 0x6f, 0xcc, 0xfa, 0x65, 0x77, 0x94, 0xb5, 0xa1, 0x0a, 0xa9, 0xd1, 0x8a, 86 0x39, 0x37, 0xf4, 0x0b, 0xa0, 0xd7, 0x82, 0x27, 0x5e, 0xae, 0x17, 0x17, 87 0xa1, 0x1e, 0x54, 0x34, 0xbf, 0x6e, 0xc4, 0x8e, 0x99, 0x5d, 0x08, 0xf1, 88 0x2d, 0x86, 0x9d, 0xa5, 0x20, 0x1b, 0xe5, 0xdf, 89}; 90 91/* 92 * kExampleRSAKeyPKCS8 is kExampleRSAKeyDER encoded in a PKCS #8 93 * PrivateKeyInfo. 94 */ 95static const unsigned char kExampleRSAKeyPKCS8[] = { 96 0x30, 0x82, 0x02, 0x76, 0x02, 0x01, 0x00, 0x30, 0x0d, 0x06, 0x09, 0x2a, 97 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x04, 0x82, 98 0x02, 0x60, 0x30, 0x82, 0x02, 0x5c, 0x02, 0x01, 0x00, 0x02, 0x81, 0x81, 99 0x00, 0xf8, 0xb8, 0x6c, 0x83, 0xb4, 0xbc, 0xd9, 0xa8, 0x57, 0xc0, 0xa5, 100 0xb4, 0x59, 0x76, 0x8c, 0x54, 0x1d, 0x79, 0xeb, 0x22, 0x52, 0x04, 0x7e, 101 0xd3, 0x37, 0xeb, 0x41, 0xfd, 0x83, 0xf9, 0xf0, 0xa6, 0x85, 0x15, 0x34, 102 0x75, 0x71, 0x5a, 0x84, 0xa8, 0x3c, 0xd2, 0xef, 0x5a, 0x4e, 0xd3, 0xde, 103 0x97, 0x8a, 0xdd, 0xff, 0xbb, 0xcf, 0x0a, 0xaa, 0x86, 0x92, 0xbe, 0xb8, 104 0x50, 0xe4, 0xcd, 0x6f, 0x80, 0x33, 0x30, 0x76, 0x13, 0x8f, 0xca, 0x7b, 105 0xdc, 0xec, 0x5a, 0xca, 0x63, 0xc7, 0x03, 0x25, 0xef, 0xa8, 0x8a, 0x83, 106 0x58, 0x76, 0x20, 0xfa, 0x16, 0x77, 0xd7, 0x79, 0x92, 0x63, 0x01, 0x48, 107 0x1a, 0xd8, 0x7b, 0x67, 0xf1, 0x52, 0x55, 0x49, 0x4e, 0xd6, 0x6e, 0x4a, 108 0x5c, 0xd7, 0x7a, 0x37, 0x36, 0x0c, 0xde, 0xdd, 0x8f, 0x44, 0xe8, 0xc2, 109 0xa7, 0x2c, 0x2b, 0xb5, 0xaf, 0x64, 0x4b, 0x61, 0x07, 0x02, 0x03, 0x01, 110 0x00, 0x01, 0x02, 0x81, 0x80, 0x74, 0x88, 0x64, 0x3f, 0x69, 0x45, 0x3a, 111 0x6d, 0xc7, 0x7f, 0xb9, 0xa3, 0xc0, 0x6e, 0xec, 0xdc, 0xd4, 0x5a, 0xb5, 112 0x32, 0x85, 0x5f, 0x19, 0xd4, 0xf8, 0xd4, 0x3f, 0x3c, 0xfa, 0xc2, 0xf6, 113 0x5f, 0xee, 0xe6, 0xba, 0x87, 0x74, 0x2e, 0xc7, 0x0c, 0xd4, 0x42, 0xb8, 114 0x66, 0x85, 0x9c, 0x7b, 0x24, 0x61, 0xaa, 0x16, 0x11, 0xf6, 0xb5, 0xb6, 115 0xa4, 0x0a, 0xc9, 0x55, 0x2e, 0x81, 0xa5, 0x47, 0x61, 0xcb, 0x25, 0x8f, 116 0xc2, 0x15, 0x7b, 0x0e, 0x7c, 0x36, 0x9f, 0x3a, 0xda, 0x58, 0x86, 0x1c, 117 0x5b, 0x83, 0x79, 0xe6, 0x2b, 0xcc, 0xe6, 0xfa, 0x2c, 0x61, 0xf2, 0x78, 118 0x80, 0x1b, 0xe2, 0xf3, 0x9d, 0x39, 0x2b, 0x65, 0x57, 0x91, 0x3d, 0x71, 119 0x99, 0x73, 0xa5, 0xc2, 0x79, 0x20, 0x8c, 0x07, 0x4f, 0xe5, 0xb4, 0x60, 120 0x1f, 0x99, 0xa2, 0xb1, 0x4f, 0x0c, 0xef, 0xbc, 0x59, 0x53, 0x00, 0x7d, 121 0xb1, 0x02, 0x41, 0x00, 0xfc, 0x7e, 0x23, 0x65, 0x70, 0xf8, 0xce, 0xd3, 122 0x40, 0x41, 0x80, 0x6a, 0x1d, 0x01, 0xd6, 0x01, 0xff, 0xb6, 0x1b, 0x3d, 123 0x3d, 0x59, 0x09, 0x33, 0x79, 0xc0, 0x4f, 0xde, 0x96, 0x27, 0x4b, 0x18, 124 0xc6, 0xd9, 0x78, 0xf1, 0xf4, 0x35, 0x46, 0xe9, 0x7c, 0x42, 0x7a, 0x5d, 125 0x9f, 0xef, 0x54, 0xb8, 0xf7, 0x9f, 0xc4, 0x33, 0x6c, 0xf3, 0x8c, 0x32, 126 0x46, 0x87, 0x67, 0x30, 0x7b, 0xa7, 0xac, 0xe3, 0x02, 0x41, 0x00, 0xfc, 127 0x2c, 0xdf, 0x0c, 0x0d, 0x88, 0xf5, 0xb1, 0x92, 0xa8, 0x93, 0x47, 0x63, 128 0x55, 0xf5, 0xca, 0x58, 0x43, 0xba, 0x1c, 0xe5, 0x9e, 0xb6, 0x95, 0x05, 129 0xcd, 0xb5, 0x82, 0xdf, 0xeb, 0x04, 0x53, 0x9d, 0xbd, 0xc2, 0x38, 0x16, 130 0xb3, 0x62, 0xdd, 0xa1, 0x46, 0xdb, 0x6d, 0x97, 0x93, 0x9f, 0x8a, 0xc3, 131 0x9b, 0x64, 0x7e, 0x42, 0xe3, 0x32, 0x57, 0x19, 0x1b, 0xd5, 0x6e, 0x85, 132 0xfa, 0xb8, 0x8d, 0x02, 0x41, 0x00, 0xbc, 0x3d, 0xde, 0x6d, 0xd6, 0x97, 133 0xe8, 0xba, 0x9e, 0x81, 0x37, 0x17, 0xe5, 0xa0, 0x64, 0xc9, 0x00, 0xb7, 134 0xe7, 0xfe, 0xf4, 0x29, 0xd9, 0x2e, 0x43, 0x6b, 0x19, 0x20, 0xbd, 0x99, 135 0x75, 0xe7, 0x76, 0xf8, 0xd3, 0xae, 0xaf, 0x7e, 0xb8, 0xeb, 0x81, 0xf4, 136 0x9d, 0xfe, 0x07, 0x2b, 0x0b, 0x63, 0x0b, 0x5a, 0x55, 0x90, 0x71, 0x7d, 137 0xf1, 0xdb, 0xd9, 0xb1, 0x41, 0x41, 0x68, 0x2f, 0x4e, 0x39, 0x02, 0x40, 138 0x5a, 0x34, 0x66, 0xd8, 0xf5, 0xe2, 0x7f, 0x18, 0xb5, 0x00, 0x6e, 0x26, 139 0x84, 0x27, 0x14, 0x93, 0xfb, 0xfc, 0xc6, 0x0f, 0x5e, 0x27, 0xe6, 0xe1, 140 0xe9, 0xc0, 0x8a, 0xe4, 0x34, 0xda, 0xe9, 0xa2, 0x4b, 0x73, 0xbc, 0x8c, 141 0xb9, 0xba, 0x13, 0x6c, 0x7a, 0x2b, 0x51, 0x84, 0xa3, 0x4a, 0xe0, 0x30, 142 0x10, 0x06, 0x7e, 0xed, 0x17, 0x5a, 0x14, 0x00, 0xc9, 0xef, 0x85, 0xea, 143 0x52, 0x2c, 0xbc, 0x65, 0x02, 0x40, 0x51, 0xe3, 0xf2, 0x83, 0x19, 0x9b, 144 0xc4, 0x1e, 0x2f, 0x50, 0x3d, 0xdf, 0x5a, 0xa2, 0x18, 0xca, 0x5f, 0x2e, 145 0x49, 0xaf, 0x6f, 0xcc, 0xfa, 0x65, 0x77, 0x94, 0xb5, 0xa1, 0x0a, 0xa9, 146 0xd1, 0x8a, 0x39, 0x37, 0xf4, 0x0b, 0xa0, 0xd7, 0x82, 0x27, 0x5e, 0xae, 147 0x17, 0x17, 0xa1, 0x1e, 0x54, 0x34, 0xbf, 0x6e, 0xc4, 0x8e, 0x99, 0x5d, 148 0x08, 0xf1, 0x2d, 0x86, 0x9d, 0xa5, 0x20, 0x1b, 0xe5, 0xdf, 149}; 150 151#ifndef OPENSSL_NO_DH 152static const unsigned char kExampleDHPrivateKeyDER[] = { 153 0x30, 0x82, 0x02, 0x26, 0x02, 0x01, 0x00, 0x30, 0x82, 0x01, 0x17, 0x06, 154 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x03, 0x01, 0x30, 0x82, 155 0x01, 0x08, 0x02, 0x82, 0x01, 0x01, 0x00, 0xD8, 0x4B, 0x0F, 0x0E, 0x6B, 156 0x79, 0xE9, 0x23, 0x4E, 0xE4, 0xBE, 0x9A, 0x8F, 0x7A, 0x5C, 0xA3, 0x20, 157 0xD0, 0x86, 0x6B, 0x95, 0x78, 0x39, 0x59, 0x7A, 0x11, 0x2A, 0x5B, 0x87, 158 0xA4, 0xFB, 0x2F, 0x99, 0xD0, 0x57, 0xF5, 0xE1, 0xA3, 0xAF, 0x41, 0xD1, 159 0xCD, 0xA3, 0x94, 0xBB, 0xE5, 0x5A, 0x68, 0xE2, 0xEE, 0x69, 0x56, 0x51, 160 0xB2, 0xEE, 0xF2, 0xFE, 0x10, 0xC9, 0x55, 0xE3, 0x82, 0x3C, 0x50, 0x0D, 161 0xF5, 0x82, 0x73, 0xE4, 0xD6, 0x3E, 0x45, 0xB4, 0x89, 0x80, 0xE4, 0xF0, 162 0x99, 0x85, 0x2B, 0x4B, 0xF9, 0xB8, 0xFD, 0x2C, 0x3C, 0x49, 0x2E, 0xB3, 163 0x56, 0x7E, 0x99, 0x07, 0xD3, 0xF7, 0xD9, 0xE4, 0x0C, 0x64, 0xC5, 0x7D, 164 0x03, 0x8E, 0x05, 0x3C, 0x0A, 0x40, 0x17, 0xAD, 0xA8, 0x0F, 0x9B, 0xF4, 165 0x8B, 0xA7, 0xDB, 0x16, 0x4F, 0x4A, 0x57, 0x0B, 0x89, 0x80, 0x0B, 0x9F, 166 0x26, 0x56, 0x3F, 0x1D, 0xFA, 0x52, 0x2D, 0x1A, 0x9E, 0xDC, 0x42, 0xA3, 167 0x2E, 0xA9, 0x87, 0xE3, 0x8B, 0x45, 0x5E, 0xEE, 0x99, 0xB8, 0x30, 0x15, 168 0x58, 0xA3, 0x5F, 0xB5, 0x69, 0xD8, 0x0C, 0xE8, 0x6B, 0x36, 0xD8, 0xAB, 169 0xD8, 0xE4, 0x77, 0x46, 0x13, 0xA2, 0x15, 0xB3, 0x9C, 0xAD, 0x99, 0x91, 170 0xE5, 0xA3, 0x30, 0x7D, 0x40, 0x70, 0xB3, 0x32, 0x5E, 0xAF, 0x96, 0x8D, 171 0xE6, 0x3F, 0x47, 0xA3, 0x18, 0xDA, 0xE1, 0x9A, 0x20, 0x11, 0xE1, 0x49, 172 0x51, 0x45, 0xE3, 0x8C, 0xA5, 0x56, 0x39, 0x67, 0xCB, 0x9D, 0xCF, 0xBA, 173 0xF4, 0x46, 0x4E, 0x0A, 0xB6, 0x0B, 0xA9, 0xB4, 0xF6, 0xF1, 0x6A, 0xC8, 174 0x63, 0xE2, 0xB4, 0xB2, 0x9F, 0x44, 0xAA, 0x0A, 0xDA, 0x53, 0xF7, 0x52, 175 0x14, 0x57, 0xEE, 0x2C, 0x5D, 0x31, 0x9C, 0x27, 0x03, 0x64, 0x9E, 0xC0, 176 0x1E, 0x4B, 0x1B, 0x4F, 0xEE, 0xA6, 0x3F, 0xC1, 0x3E, 0x61, 0x93, 0x02, 177 0x01, 0x02, 0x04, 0x82, 0x01, 0x04, 0x02, 0x82, 0x01, 0x00, 0x7E, 0xC2, 178 0x04, 0xF9, 0x95, 0xC7, 0xEF, 0x96, 0xBE, 0xA0, 0x9D, 0x2D, 0xC3, 0x0C, 179 0x3A, 0x67, 0x02, 0x7C, 0x7D, 0x3B, 0xC9, 0xB1, 0xDE, 0x13, 0x97, 0x64, 180 0xEF, 0x87, 0x80, 0x4F, 0xBF, 0xA2, 0xAC, 0x18, 0x6B, 0xD5, 0xB2, 0x42, 181 0x0F, 0xDA, 0x28, 0x40, 0x93, 0x40, 0xB2, 0x1E, 0x80, 0xB0, 0x6C, 0xDE, 182 0x9C, 0x54, 0xA4, 0xB4, 0x68, 0x29, 0xE0, 0x13, 0x57, 0x1D, 0xC9, 0x87, 183 0xC0, 0xDE, 0x2F, 0x1D, 0x72, 0xF0, 0xC0, 0xE4, 0x4E, 0x04, 0x48, 0xF5, 184 0x2D, 0x8D, 0x9A, 0x1B, 0xE5, 0xEB, 0x06, 0xAB, 0x7C, 0x74, 0x10, 0x3C, 185 0xA8, 0x2D, 0x39, 0xBC, 0xE3, 0x15, 0x3E, 0x63, 0x37, 0x8C, 0x1B, 0xF1, 186 0xB3, 0x99, 0xB6, 0xAE, 0x5A, 0xEB, 0xB3, 0x3D, 0x30, 0x39, 0x69, 0xDB, 187 0xF2, 0x4F, 0x94, 0xB7, 0x71, 0xAF, 0xBA, 0x5C, 0x1F, 0xF8, 0x6B, 0xE5, 188 0xD1, 0xB1, 0x00, 0x81, 0xE2, 0x6D, 0xEC, 0x65, 0xF7, 0x7E, 0xCE, 0x03, 189 0x84, 0x68, 0x42, 0x6A, 0x8B, 0x47, 0x8E, 0x4A, 0x88, 0xDE, 0x82, 0xDD, 190 0xAF, 0xA9, 0x6F, 0x18, 0xF7, 0xC6, 0xE2, 0xB9, 0x97, 0xCE, 0x47, 0x8F, 191 0x85, 0x19, 0x61, 0x42, 0x67, 0x21, 0x7D, 0x13, 0x6E, 0xB5, 0x5A, 0x62, 192 0xF3, 0x08, 0xE2, 0x70, 0x3B, 0x0E, 0x85, 0x3C, 0xA1, 0xD3, 0xED, 0x7A, 193 0x43, 0xD6, 0xDE, 0x30, 0x5C, 0x48, 0xB2, 0x99, 0xAB, 0x3E, 0x65, 0xA6, 194 0x66, 0x80, 0x22, 0xFF, 0x92, 0xC1, 0x42, 0x1C, 0x30, 0x87, 0x74, 0x1E, 195 0x53, 0x57, 0x7C, 0xF8, 0x77, 0x51, 0xF1, 0x74, 0x16, 0xF4, 0x45, 0x26, 196 0x77, 0x0A, 0x05, 0x96, 0x13, 0x12, 0x06, 0x86, 0x2B, 0xB8, 0x49, 0x82, 197 0x69, 0x43, 0x0A, 0x57, 0xA7, 0x30, 0x19, 0x4C, 0xB8, 0x47, 0x82, 0x6E, 198 0x64, 0x7A, 0x06, 0x13, 0x5A, 0x82, 0x98, 0xD6, 0x7A, 0x09, 0xEC, 0x03, 199 0x8D, 0x03 200}; 201#endif /* OPENSSL_NO_DH */ 202 203#ifndef OPENSSL_NO_EC 204/* 205 * kExampleECKeyDER is a sample EC private key encoded as an ECPrivateKey 206 * structure. 207 */ 208static const unsigned char kExampleECKeyDER[] = { 209 0x30, 0x77, 0x02, 0x01, 0x01, 0x04, 0x20, 0x07, 0x0f, 0x08, 0x72, 0x7a, 210 0xd4, 0xa0, 0x4a, 0x9c, 0xdd, 0x59, 0xc9, 0x4d, 0x89, 0x68, 0x77, 0x08, 211 0xb5, 0x6f, 0xc9, 0x5d, 0x30, 0x77, 0x0e, 0xe8, 0xd1, 0xc9, 0xce, 0x0a, 212 0x8b, 0xb4, 0x6a, 0xa0, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 213 0x03, 0x01, 0x07, 0xa1, 0x44, 0x03, 0x42, 0x00, 0x04, 0xe6, 0x2b, 0x69, 214 0xe2, 0xbf, 0x65, 0x9f, 0x97, 0xbe, 0x2f, 0x1e, 0x0d, 0x94, 0x8a, 0x4c, 215 0xd5, 0x97, 0x6b, 0xb7, 0xa9, 0x1e, 0x0d, 0x46, 0xfb, 0xdd, 0xa9, 0xa9, 216 0x1e, 0x9d, 0xdc, 0xba, 0x5a, 0x01, 0xe7, 0xd6, 0x97, 0xa8, 0x0a, 0x18, 217 0xf9, 0xc3, 0xc4, 0xa3, 0x1e, 0x56, 0xe2, 0x7c, 0x83, 0x48, 0xdb, 0x16, 218 0x1a, 0x1c, 0xf5, 0x1d, 0x7e, 0xf1, 0x94, 0x2d, 0x4b, 0xcf, 0x72, 0x22, 219 0xc1, 220}; 221 222/* P-384 sample EC private key in PKCS8 format (no public key) */ 223static const unsigned char kExampleECKey2DER[] = { 224 0x30, 0x4E, 0x02, 0x01, 0x00, 0x30, 0x10, 0x06, 0x07, 0x2A, 0x86, 0x48, 225 0xCE, 0x3D, 0x02, 0x01, 0x06, 0x05, 0x2B, 0x81, 0x04, 0x00, 0x22, 0x04, 226 0x37, 0x30, 0x35, 0x02, 0x01, 0x01, 0x04, 0x30, 0x73, 0xE3, 0x3A, 0x05, 227 0xF2, 0xB6, 0x99, 0x6D, 0x0C, 0x33, 0x7F, 0x15, 0x9E, 0x10, 0xA9, 0x17, 228 0x4C, 0x0A, 0x82, 0x57, 0x71, 0x13, 0x7A, 0xAC, 0x46, 0xA2, 0x5E, 0x1C, 229 0xE0, 0xC7, 0xB2, 0xF8, 0x20, 0x40, 0xC2, 0x27, 0xC8, 0xBE, 0x02, 0x7E, 230 0x96, 0x69, 0xE0, 0x04, 0xCB, 0x89, 0x0B, 0x42 231}; 232 233static const unsigned char kExampleECXKey2DER[] = { 234 0x30, 0x2E, 0x02, 0x01, 0x00, 0x30, 0x05, 0x06, 0x03, 0x2b, 0x65, 0x6e, 235 0x04, 0x22, 0x04, 0x20, 0xc8, 0xa9, 0xd5, 0xa9, 0x10, 0x91, 0xad, 0x85, 236 0x1c, 0x66, 0x8b, 0x07, 0x36, 0xc1, 0xc9, 0xa0, 0x29, 0x36, 0xc0, 0xd3, 237 0xad, 0x62, 0x67, 0x08, 0x58, 0x08, 0x80, 0x47, 0xba, 0x05, 0x74, 0x75 238}; 239#endif 240 241typedef struct APK_DATA_st { 242 const unsigned char *kder; 243 size_t size; 244 int evptype; 245} APK_DATA; 246 247static APK_DATA keydata[] = { 248 {kExampleRSAKeyDER, sizeof(kExampleRSAKeyDER), EVP_PKEY_RSA}, 249 {kExampleRSAKeyPKCS8, sizeof(kExampleRSAKeyPKCS8), EVP_PKEY_RSA}, 250#ifndef OPENSSL_NO_EC 251 {kExampleECXKey2DER, sizeof(kExampleECXKey2DER), EVP_PKEY_X25519}, 252 {kExampleECKeyDER, sizeof(kExampleECKeyDER), EVP_PKEY_EC}, 253 {kExampleECKey2DER, sizeof(kExampleECKey2DER), EVP_PKEY_EC}, 254#endif 255#ifndef OPENSSL_NO_DH 256 {kExampleDHPrivateKeyDER, sizeof(kExampleDHPrivateKeyDER), EVP_PKEY_DH}, 257#endif 258}; 259 260static int pkey_has_private(EVP_PKEY *key, const char *privtag, 261 int use_octstring) 262{ 263 int ret = 0; 264 265 if (use_octstring) { 266 unsigned char buf[64]; 267 268 ret = EVP_PKEY_get_octet_string_param(key, privtag, buf, sizeof(buf), 269 NULL); 270 } else { 271 BIGNUM *bn = NULL; 272 273 ret = EVP_PKEY_get_bn_param(key, privtag, &bn); 274 BN_free(bn); 275 } 276 return ret; 277} 278 279static int do_pkey_tofrom_data_select(EVP_PKEY *key, const char *keytype) 280{ 281 int ret = 0; 282 OSSL_PARAM *pub_params = NULL, *keypair_params = NULL; 283 EVP_PKEY *fromkey = NULL, *fromkeypair = NULL; 284 EVP_PKEY_CTX *fromctx = NULL; 285 const char *privtag = strcmp(keytype, "RSA") == 0 ? "d" : "priv"; 286 const int use_octstring = strcmp(keytype, "X25519") == 0; 287 288 /* 289 * Select only the public key component when using EVP_PKEY_todata() and 290 * check that the resulting param array does not contain a private key. 291 */ 292 if (!TEST_int_eq(EVP_PKEY_todata(key, EVP_PKEY_PUBLIC_KEY, &pub_params), 1) 293 || !TEST_ptr_null(OSSL_PARAM_locate(pub_params, privtag))) 294 goto end; 295 /* 296 * Select the keypair when using EVP_PKEY_todata() and check that 297 * the param array contains a private key. 298 */ 299 if (!TEST_int_eq(EVP_PKEY_todata(key, EVP_PKEY_KEYPAIR, &keypair_params), 1) 300 || !TEST_ptr(OSSL_PARAM_locate(keypair_params, privtag))) 301 goto end; 302 303 /* 304 * Select only the public key when using EVP_PKEY_fromdata() and check that 305 * the resulting key does not contain a private key. 306 */ 307 if (!TEST_ptr(fromctx = EVP_PKEY_CTX_new_from_name(mainctx, keytype, NULL)) 308 || !TEST_int_eq(EVP_PKEY_fromdata_init(fromctx), 1) 309 || !TEST_int_eq(EVP_PKEY_fromdata(fromctx, &fromkey, EVP_PKEY_PUBLIC_KEY, 310 keypair_params), 1) 311 || !TEST_false(pkey_has_private(fromkey, privtag, use_octstring))) 312 goto end; 313 /* 314 * Select the keypair when using EVP_PKEY_fromdata() and check that 315 * the resulting key contains a private key. 316 */ 317 if (!TEST_int_eq(EVP_PKEY_fromdata(fromctx, &fromkeypair, 318 EVP_PKEY_KEYPAIR, keypair_params), 1) 319 || !TEST_true(pkey_has_private(fromkeypair, privtag, use_octstring))) 320 goto end; 321 ret = 1; 322end: 323 EVP_PKEY_free(fromkeypair); 324 EVP_PKEY_free(fromkey); 325 EVP_PKEY_CTX_free(fromctx); 326 OSSL_PARAM_free(keypair_params); 327 OSSL_PARAM_free(pub_params); 328 return ret; 329} 330 331#ifndef OPENSSL_NO_DH 332static int test_dh_tofrom_data_select(void) 333{ 334 int ret; 335 OSSL_PARAM params[2]; 336 EVP_PKEY *key = NULL; 337 EVP_PKEY_CTX *gctx = NULL; 338# ifndef OPENSSL_NO_DEPRECATED_3_0 339 const DH *dhkey; 340 const BIGNUM *privkey; 341# endif 342 343 params[0] = OSSL_PARAM_construct_utf8_string("group", "ffdhe2048", 0); 344 params[1] = OSSL_PARAM_construct_end(); 345 ret = TEST_ptr(gctx = EVP_PKEY_CTX_new_from_name(mainctx, "DHX", NULL)) 346 && TEST_int_gt(EVP_PKEY_keygen_init(gctx), 0) 347 && TEST_true(EVP_PKEY_CTX_set_params(gctx, params)) 348 && TEST_int_gt(EVP_PKEY_generate(gctx, &key), 0) 349 && TEST_true(do_pkey_tofrom_data_select(key, "DHX")); 350# ifndef OPENSSL_NO_DEPRECATED_3_0 351 ret = ret && TEST_ptr(dhkey = EVP_PKEY_get0_DH(key)) 352 && TEST_ptr(privkey = DH_get0_priv_key(dhkey)) 353 && TEST_int_le(BN_num_bits(privkey), 225); 354# endif 355 EVP_PKEY_free(key); 356 EVP_PKEY_CTX_free(gctx); 357 return ret; 358} 359 360static int test_dh_paramgen(void) 361{ 362 int ret; 363 OSSL_PARAM params[3]; 364 EVP_PKEY *pkey = NULL; 365 EVP_PKEY_CTX *gctx = NULL; 366 unsigned int pbits = 512; /* minimum allowed for speed */ 367 368 params[0] = OSSL_PARAM_construct_uint(OSSL_PKEY_PARAM_FFC_PBITS, &pbits); 369 params[1] = OSSL_PARAM_construct_utf8_string(OSSL_PKEY_PARAM_FFC_TYPE, 370 "generator", 0); 371 params[2] = OSSL_PARAM_construct_end(); 372 373 ret = TEST_ptr(gctx = EVP_PKEY_CTX_new_from_name(mainctx, "DH", NULL)) 374 && TEST_int_gt(EVP_PKEY_paramgen_init(gctx), 0) 375 && TEST_true(EVP_PKEY_CTX_set_params(gctx, params)) 376 && TEST_true(EVP_PKEY_paramgen(gctx, &pkey)) 377 && TEST_ptr(pkey); 378 379 EVP_PKEY_CTX_free(gctx); 380 gctx = NULL; 381 382 ret = ret && TEST_ptr(gctx = EVP_PKEY_CTX_new_from_pkey(mainctx, pkey, NULL)) 383 && TEST_int_eq(EVP_PKEY_param_check(gctx), 1) 384 && TEST_int_eq(EVP_PKEY_param_check_quick(gctx), 1); 385 386 EVP_PKEY_CTX_free(gctx); 387 EVP_PKEY_free(pkey); 388 return ret; 389} 390#endif 391 392#ifndef OPENSSL_NO_EC 393static int test_ec_tofrom_data_select(void) 394{ 395 int ret; 396 EVP_PKEY *key = NULL; 397 398 ret = TEST_ptr(key = EVP_PKEY_Q_keygen(mainctx, NULL, "EC", "P-256")) 399 && TEST_true(do_pkey_tofrom_data_select(key, "EC")); 400 EVP_PKEY_free(key); 401 return ret; 402} 403 404static int test_ecx_tofrom_data_select(void) 405{ 406 int ret; 407 EVP_PKEY *key = NULL; 408 409 ret = TEST_ptr(key = EVP_PKEY_Q_keygen(mainctx, NULL, "X25519")) 410 && TEST_true(do_pkey_tofrom_data_select(key, "X25519")); 411 EVP_PKEY_free(key); 412 return ret; 413} 414#endif 415 416#ifndef OPENSSL_NO_SM2 417static int test_sm2_tofrom_data_select(void) 418{ 419 int ret; 420 EVP_PKEY *key = NULL; 421 422 ret = TEST_ptr(key = EVP_PKEY_Q_keygen(mainctx, NULL, "SM2")) 423 && TEST_true(do_pkey_tofrom_data_select(key, "SM2")); 424 EVP_PKEY_free(key); 425 return ret; 426} 427#endif 428 429static int test_rsa_tofrom_data_select(void) 430{ 431 int ret; 432 EVP_PKEY *key = NULL; 433 const unsigned char *pdata = kExampleRSAKeyDER; 434 int pdata_len = sizeof(kExampleRSAKeyDER); 435 436 ret = TEST_ptr(key = d2i_AutoPrivateKey_ex(NULL, &pdata, pdata_len, 437 mainctx, NULL)) 438 && TEST_true(do_pkey_tofrom_data_select(key, "RSA")); 439 EVP_PKEY_free(key); 440 return ret; 441} 442 443/* This is the equivalent of test_d2i_AutoPrivateKey in evp_extra_test */ 444static int test_d2i_AutoPrivateKey_ex(int i) 445{ 446 int ret = 0; 447 const unsigned char *p; 448 EVP_PKEY *pkey = NULL; 449 const APK_DATA *ak = &keydata[i]; 450 const unsigned char *input = ak->kder; 451 size_t input_len = ak->size; 452 int expected_id = ak->evptype; 453 BIGNUM *p_bn = NULL; 454 BIGNUM *g_bn = NULL; 455 BIGNUM *priv_bn = NULL; 456 457 p = input; 458 if (!TEST_ptr(pkey = d2i_AutoPrivateKey_ex(NULL, &p, input_len, mainctx, 459 NULL)) 460 || !TEST_ptr_eq(p, input + input_len) 461 || !TEST_int_eq(EVP_PKEY_get_id(pkey), expected_id)) 462 goto done; 463 464 if (ak->evptype == EVP_PKEY_RSA) { 465 if (!TEST_true(EVP_PKEY_get_bn_param(pkey, OSSL_PKEY_PARAM_RSA_D, 466 &priv_bn))) 467 goto done; 468 } else if (ak->evptype == EVP_PKEY_X25519) { 469 unsigned char buffer[32]; 470 size_t len; 471 472 if (!TEST_true(EVP_PKEY_get_octet_string_param(pkey, 473 OSSL_PKEY_PARAM_PRIV_KEY, 474 buffer, sizeof(buffer), 475 &len))) 476 goto done; 477 } else { 478 if (!TEST_true(EVP_PKEY_get_bn_param(pkey, OSSL_PKEY_PARAM_PRIV_KEY, 479 &priv_bn))) 480 goto done; 481 } 482 483 if (ak->evptype == EVP_PKEY_DH) { 484 if (!TEST_true(EVP_PKEY_get_bn_param(pkey, OSSL_PKEY_PARAM_FFC_P, &p_bn)) 485 || !TEST_true(EVP_PKEY_get_bn_param(pkey, OSSL_PKEY_PARAM_FFC_G, 486 &g_bn))) 487 goto done; 488 } 489 490 ret = 1; 491done: 492 BN_free(p_bn); 493 BN_free(g_bn); 494 BN_free(priv_bn); 495 EVP_PKEY_free(pkey); 496 return ret; 497} 498 499#ifndef OPENSSL_NO_DES 500static int test_pkcs8key_nid_bio(void) 501{ 502 int ret; 503 const int nid = NID_pbe_WithSHA1And3_Key_TripleDES_CBC; 504 static const char pwd[] = "PASSWORD"; 505 EVP_PKEY *pkey = NULL, *pkey_dec = NULL; 506 BIO *in = NULL, *enc_bio = NULL; 507 char *enc_data = NULL; 508 long enc_datalen = 0; 509 OSSL_PROVIDER *provider = NULL; 510 511 ret = TEST_ptr(provider = OSSL_PROVIDER_load(NULL, "default")) 512 && TEST_ptr(enc_bio = BIO_new(BIO_s_mem())) 513 && TEST_ptr(in = BIO_new_mem_buf(kExampleRSAKeyPKCS8, 514 sizeof(kExampleRSAKeyPKCS8))) 515 && TEST_ptr(pkey = d2i_PrivateKey_ex_bio(in, NULL, NULL, NULL)) 516 && TEST_int_eq(i2d_PKCS8PrivateKey_nid_bio(enc_bio, pkey, nid, 517 pwd, sizeof(pwd) - 1, 518 NULL, NULL), 1) 519 && TEST_int_gt(enc_datalen = BIO_get_mem_data(enc_bio, &enc_data), 0) 520 && TEST_ptr(pkey_dec = d2i_PKCS8PrivateKey_bio(enc_bio, NULL, NULL, 521 (void *)pwd)) 522 && TEST_true(EVP_PKEY_eq(pkey, pkey_dec)); 523 524 EVP_PKEY_free(pkey_dec); 525 EVP_PKEY_free(pkey); 526 BIO_free(in); 527 BIO_free(enc_bio); 528 OSSL_PROVIDER_unload(provider); 529 return ret; 530} 531#endif /* OPENSSL_NO_DES */ 532 533static int test_alternative_default(void) 534{ 535 OSSL_LIB_CTX *oldctx; 536 EVP_MD *sha256; 537 int ok = 0; 538 539 /* 540 * setup_tests() loaded the "null" provider in the current default, so 541 * we know this fetch should fail. 542 */ 543 if (!TEST_ptr_null(sha256 = EVP_MD_fetch(NULL, "SHA2-256", NULL))) 544 goto err; 545 546 /* 547 * Now we switch to our main library context, and try again. Since no 548 * providers are loaded in this one, it should fall back to the default. 549 */ 550 if (!TEST_ptr(oldctx = OSSL_LIB_CTX_set0_default(mainctx)) 551 || !TEST_ptr(sha256 = EVP_MD_fetch(NULL, "SHA2-256", NULL))) 552 goto err; 553 EVP_MD_free(sha256); 554 sha256 = NULL; 555 556 /* 557 * Switching back should give us our main library context back, and 558 * fetching SHA2-256 should fail again. 559 */ 560 if (!TEST_ptr_eq(OSSL_LIB_CTX_set0_default(oldctx), mainctx) 561 || !TEST_ptr_null(sha256 = EVP_MD_fetch(NULL, "SHA2-256", NULL))) 562 goto err; 563 564 ok = 1; 565 err: 566 EVP_MD_free(sha256); 567 return ok; 568} 569 570static int test_provider_unload_effective(int testid) 571{ 572 EVP_MD *sha256 = NULL; 573 OSSL_PROVIDER *provider = NULL; 574 int ok = 0; 575 576 if (!TEST_ptr(provider = OSSL_PROVIDER_load(NULL, "default")) 577 || !TEST_ptr(sha256 = EVP_MD_fetch(NULL, "SHA2-256", NULL))) 578 goto err; 579 580 if (testid > 0) { 581 OSSL_PROVIDER_unload(provider); 582 provider = NULL; 583 EVP_MD_free(sha256); 584 sha256 = NULL; 585 } else { 586 EVP_MD_free(sha256); 587 sha256 = NULL; 588 OSSL_PROVIDER_unload(provider); 589 provider = NULL; 590 } 591 592 /* 593 * setup_tests() loaded the "null" provider in the current default, and 594 * we unloaded it above after the load so we know this fetch should fail. 595 */ 596 if (!TEST_ptr_null(sha256 = EVP_MD_fetch(NULL, "SHA2-256", NULL))) 597 goto err; 598 599 ok = 1; 600 err: 601 EVP_MD_free(sha256); 602 OSSL_PROVIDER_unload(provider); 603 return ok; 604} 605 606static int test_d2i_PrivateKey_ex(int testid) 607{ 608 int ok = 0; 609 OSSL_PROVIDER *provider = NULL; 610 BIO *key_bio = NULL; 611 EVP_PKEY *pkey = NULL; 612 int id = (testid == 0) ? 0 : 2; 613 614 if (!TEST_ptr(provider = OSSL_PROVIDER_load(NULL, "default"))) 615 goto err; 616 if (!TEST_ptr(key_bio = BIO_new_mem_buf(keydata[id].kder, keydata[id].size))) 617 goto err; 618 if (!TEST_ptr_null(pkey = PEM_read_bio_PrivateKey(key_bio, NULL, NULL, NULL))) 619 goto err; 620 621 ERR_clear_error(); 622 if (!TEST_int_ge(BIO_seek(key_bio, 0), 0)) 623 goto err; 624 ok = TEST_ptr(pkey = d2i_PrivateKey_bio(key_bio, NULL)); 625 TEST_int_eq(ERR_peek_error(), 0); 626 test_openssl_errors(); 627 628 err: 629 EVP_PKEY_free(pkey); 630 BIO_free(key_bio); 631 OSSL_PROVIDER_unload(provider); 632 633 return ok; 634} 635 636static int test_PEM_read_bio_negative(int testid) 637{ 638 int ok = 0; 639 OSSL_PROVIDER *provider = NULL; 640 BIO *key_bio = NULL; 641 EVP_PKEY *pkey = NULL; 642 643 if (!TEST_ptr(key_bio = BIO_new_mem_buf(keydata[testid].kder, keydata[testid].size))) 644 goto err; 645 ERR_clear_error(); 646 if (!TEST_ptr_null(pkey = PEM_read_bio_PrivateKey(key_bio, NULL, NULL, NULL))) 647 goto err; 648 if (!TEST_int_ne(ERR_peek_error(), 0)) 649 goto err; 650 if (!TEST_ptr(provider = OSSL_PROVIDER_load(NULL, "default"))) 651 goto err; 652 if (!TEST_int_ge(BIO_seek(key_bio, 0), 0)) 653 goto err; 654 ERR_clear_error(); 655 if (!TEST_ptr_null(pkey = PEM_read_bio_PrivateKey(key_bio, NULL, NULL, NULL))) 656 goto err; 657 if (!TEST_int_ne(ERR_peek_error(), 0)) 658 goto err; 659 660 ok = 1; 661 662 err: 663 test_openssl_errors(); 664 EVP_PKEY_free(pkey); 665 BIO_free(key_bio); 666 OSSL_PROVIDER_unload(provider); 667 668 return ok; 669} 670 671static int do_fromdata_key_is_equal(const OSSL_PARAM params[], 672 const EVP_PKEY *expected, const char *type) 673{ 674 EVP_PKEY_CTX *ctx = NULL; 675 EVP_PKEY *pkey = NULL; 676 int ret; 677 678 ret = TEST_ptr(ctx = EVP_PKEY_CTX_new_from_name(mainctx, type, NULL)) 679 && TEST_int_eq(EVP_PKEY_fromdata_init(ctx), 1) 680 && TEST_int_eq(EVP_PKEY_fromdata(ctx, &pkey, 681 EVP_PKEY_KEYPAIR, 682 (OSSL_PARAM *)params), 1) 683 && TEST_true(EVP_PKEY_eq(pkey, expected)); 684 EVP_PKEY_CTX_free(ctx); 685 EVP_PKEY_free(pkey); 686 return ret; 687} 688 689#ifndef OPENSSL_NO_DSA 690/* 691 * This data was generated using: 692 * > openssl genpkey \ 693 * -genparam -algorithm DSA -pkeyopt type:fips186_4 -text \ 694 * -pkeyopt gindex:5 -out dsa_param.pem 695 * > openssl genpkey \ 696 * -paramfile dsa_param.pem -pkeyopt type:fips186_4 -out dsa_priv.pem 697 */ 698static const unsigned char dsa_key[] = { 699 0x30, 0x82, 0x03, 0x4e, 0x02, 0x01, 0x00, 0x02, 0x82, 0x01, 0x01, 0x00, 700 0xda, 0xb3, 0x46, 0x4d, 0x54, 0x57, 0xc7, 0xb4, 0x61, 0xa0, 0x6f, 0x66, 701 0x17, 0xda, 0xeb, 0x90, 0xf0, 0xa3, 0xd1, 0x29, 0xc9, 0x5f, 0xf2, 0x21, 702 0x3d, 0x85, 0xa3, 0x4a, 0xf0, 0xf8, 0x36, 0x39, 0x1b, 0xe3, 0xee, 0x37, 703 0x70, 0x06, 0x9b, 0xe8, 0xe3, 0x0a, 0xd2, 0xf1, 0xf6, 0xc4, 0x42, 0x23, 704 0x1f, 0x74, 0x78, 0xc2, 0x16, 0xf5, 0xce, 0xd6, 0xab, 0xa0, 0xc6, 0xe8, 705 0x99, 0x3d, 0xf8, 0x8b, 0xfb, 0x47, 0xf8, 0x5e, 0x05, 0x68, 0x6d, 0x8b, 706 0xa8, 0xad, 0xa1, 0xc2, 0x3a, 0x4e, 0xe0, 0xad, 0xec, 0x38, 0x75, 0x21, 707 0x55, 0x22, 0xce, 0xa2, 0xe9, 0xe5, 0x3b, 0xd7, 0x44, 0xeb, 0x5a, 0x03, 708 0x59, 0xa0, 0xc5, 0x7a, 0x92, 0x59, 0x7d, 0x7a, 0x07, 0x80, 0xfc, 0x4e, 709 0xf8, 0x56, 0x7e, 0xf1, 0x06, 0xe0, 0xba, 0xb2, 0xe7, 0x5b, 0x22, 0x55, 710 0xee, 0x4b, 0x42, 0x61, 0x67, 0x2c, 0x43, 0x9a, 0x38, 0x2b, 0x17, 0xc2, 711 0x62, 0x12, 0x8b, 0x0b, 0x22, 0x8c, 0x0c, 0x1c, 0x1c, 0x92, 0xb1, 0xec, 712 0x70, 0xce, 0x0f, 0x8c, 0xff, 0x8d, 0x21, 0xf9, 0x19, 0x68, 0x4d, 0x32, 713 0x59, 0x78, 0x42, 0x1d, 0x0c, 0xc5, 0x1a, 0xcb, 0x28, 0xe2, 0xc1, 0x1a, 714 0x35, 0xf1, 0x42, 0x0a, 0x19, 0x39, 0xfa, 0x83, 0xd1, 0xb4, 0xaa, 0x69, 715 0x0f, 0xc2, 0x8e, 0xf9, 0x59, 0x2c, 0xee, 0x11, 0xfc, 0x3e, 0x4b, 0x44, 716 0xfb, 0x9a, 0x32, 0xc8, 0x78, 0x23, 0x56, 0x85, 0x49, 0x21, 0x43, 0x12, 717 0x79, 0xbd, 0xa0, 0x70, 0x47, 0x2f, 0xae, 0xb6, 0xd7, 0x6c, 0xc6, 0x07, 718 0x76, 0xa9, 0x8a, 0xa2, 0x16, 0x02, 0x89, 0x1f, 0x1a, 0xd1, 0xa2, 0x96, 719 0x56, 0xd1, 0x1f, 0x10, 0xe1, 0xe5, 0x9f, 0x3f, 0xdd, 0x09, 0x0c, 0x40, 720 0x90, 0x71, 0xef, 0x14, 0x41, 0x02, 0x82, 0x3a, 0x6b, 0xe1, 0xf8, 0x2c, 721 0x5d, 0xbe, 0xfd, 0x1b, 0x02, 0x1d, 0x00, 0xe0, 0x20, 0xe0, 0x7c, 0x02, 722 0x16, 0xa7, 0x6c, 0x6a, 0x19, 0xba, 0xd5, 0x83, 0x73, 0xf3, 0x7d, 0x31, 723 0xef, 0xa7, 0xe1, 0x5d, 0x5b, 0x7f, 0xf3, 0xfc, 0xda, 0x84, 0x31, 0x02, 724 0x82, 0x01, 0x01, 0x00, 0x83, 0xdb, 0xa1, 0xbc, 0x3e, 0xc7, 0x29, 0xa5, 725 0x6a, 0x5c, 0x2c, 0xe8, 0x7a, 0x8c, 0x7e, 0xe8, 0xb8, 0x3e, 0x13, 0x47, 726 0xcd, 0x36, 0x7e, 0x79, 0x30, 0x7a, 0x28, 0x03, 0xd3, 0xd4, 0xd2, 0xe3, 727 0xee, 0x3b, 0x46, 0xda, 0xe0, 0x71, 0xe6, 0xcf, 0x46, 0x86, 0x0a, 0x37, 728 0x57, 0xb6, 0xe9, 0xcf, 0xa1, 0x78, 0x19, 0xb8, 0x72, 0x9f, 0x30, 0x8c, 729 0x2a, 0x04, 0x7c, 0x2f, 0x0c, 0x27, 0xa7, 0xb3, 0x23, 0xe0, 0x46, 0xf2, 730 0x75, 0x0c, 0x03, 0x4c, 0xad, 0xfb, 0xc1, 0xcb, 0x28, 0xcd, 0xa0, 0x63, 731 0xdb, 0x44, 0x88, 0xe0, 0xda, 0x6c, 0x5b, 0x89, 0xb2, 0x5b, 0x40, 0x6d, 732 0xeb, 0x78, 0x7a, 0xd5, 0xaf, 0x40, 0x52, 0x46, 0x63, 0x92, 0x13, 0x0d, 733 0xee, 0xee, 0xf9, 0x53, 0xca, 0x2d, 0x4e, 0x3b, 0x13, 0xd8, 0x0f, 0x50, 734 0xd0, 0x44, 0x57, 0x67, 0x0f, 0x45, 0x8f, 0x21, 0x30, 0x97, 0x9e, 0x80, 735 0xd9, 0xd0, 0x91, 0xb7, 0xc9, 0x5a, 0x69, 0xda, 0xeb, 0xd5, 0xea, 0x37, 736 0xf6, 0xb3, 0xbe, 0x1f, 0x24, 0xf1, 0x55, 0x14, 0x28, 0x05, 0xb5, 0xd8, 737 0x84, 0x0f, 0x62, 0x85, 0xaa, 0xec, 0x77, 0x64, 0xfd, 0x80, 0x7c, 0x41, 738 0x00, 0x88, 0xa3, 0x79, 0x7d, 0x4f, 0x6f, 0xe3, 0x76, 0xf4, 0xb5, 0x97, 739 0xb7, 0xeb, 0x67, 0x28, 0xba, 0x07, 0x1a, 0x59, 0x32, 0xc1, 0x53, 0xd9, 740 0x05, 0x6b, 0x63, 0x93, 0xce, 0xa1, 0xd9, 0x7a, 0xb2, 0xff, 0x1c, 0x12, 741 0x0a, 0x9a, 0xe5, 0x51, 0x1e, 0xba, 0xfc, 0x95, 0x2e, 0x28, 0xa9, 0xfc, 742 0x4c, 0xed, 0x7b, 0x05, 0xca, 0x67, 0xe0, 0x2d, 0xd7, 0x54, 0xb3, 0x05, 743 0x1c, 0x23, 0x2b, 0x35, 0x2e, 0x19, 0x48, 0x59, 0x0e, 0x58, 0xa8, 0x01, 744 0x56, 0xfb, 0x78, 0x90, 0xba, 0x08, 0x77, 0x94, 0x45, 0x05, 0x13, 0xc7, 745 0x6b, 0x96, 0xd2, 0xa3, 0xa6, 0x01, 0x9f, 0x34, 0x02, 0x82, 0x01, 0x00, 746 0x16, 0x1a, 0xb4, 0x6d, 0x9f, 0x16, 0x6c, 0xcc, 0x91, 0x66, 0xfe, 0x30, 747 0xeb, 0x8e, 0x44, 0xba, 0x2b, 0x7a, 0xc9, 0xa8, 0x95, 0xf2, 0xa6, 0x38, 748 0xd8, 0xaf, 0x3e, 0x91, 0x68, 0xe8, 0x52, 0xf3, 0x97, 0x37, 0x70, 0xf2, 749 0x47, 0xa3, 0xf4, 0x62, 0x26, 0xf5, 0x3b, 0x71, 0x52, 0x50, 0x15, 0x9c, 750 0x6d, 0xa6, 0x6d, 0x92, 0x4c, 0x48, 0x76, 0x31, 0x54, 0x48, 0xa5, 0x99, 751 0x7a, 0xd4, 0x61, 0xf7, 0x21, 0x44, 0xe7, 0xd8, 0x82, 0xc3, 0x50, 0xd3, 752 0xd9, 0xd4, 0x66, 0x20, 0xab, 0x70, 0x4c, 0x97, 0x9b, 0x8d, 0xac, 0x1f, 753 0x78, 0x27, 0x1e, 0x47, 0xf8, 0x3b, 0xd1, 0x55, 0x73, 0xf3, 0xb4, 0x8e, 754 0x6d, 0x45, 0x40, 0x54, 0xc6, 0xd8, 0x95, 0x15, 0x27, 0xb7, 0x5f, 0x65, 755 0xaa, 0xcb, 0x24, 0xc9, 0x49, 0x87, 0x32, 0xad, 0xcb, 0xf8, 0x35, 0x63, 756 0x56, 0x72, 0x7c, 0x4e, 0x6c, 0xad, 0x5f, 0x26, 0x8c, 0xd2, 0x80, 0x41, 757 0xaf, 0x88, 0x23, 0x20, 0x03, 0xa4, 0xd5, 0x3c, 0x53, 0x54, 0xb0, 0x3d, 758 0xed, 0x0e, 0x9e, 0x53, 0x0a, 0x63, 0x5f, 0xfd, 0x28, 0x57, 0x09, 0x07, 759 0x73, 0xf4, 0x0c, 0xd4, 0x71, 0x5d, 0x6b, 0xa0, 0xd7, 0x86, 0x99, 0x29, 760 0x9b, 0xca, 0xfb, 0xcc, 0xd6, 0x2f, 0xfe, 0xbe, 0x94, 0xef, 0x1a, 0x0e, 761 0x55, 0x84, 0xa7, 0xaf, 0x7b, 0xfa, 0xed, 0x77, 0x61, 0x28, 0x22, 0xee, 762 0x6b, 0x11, 0xdd, 0xb0, 0x17, 0x1e, 0x06, 0xe4, 0x29, 0x4c, 0xc2, 0x3f, 763 0xd6, 0x75, 0xb6, 0x08, 0x04, 0x55, 0x13, 0x48, 0x4f, 0x44, 0xea, 0x8d, 764 0xaf, 0xcb, 0xac, 0x22, 0xc4, 0x6a, 0xb3, 0x86, 0xe5, 0x47, 0xa9, 0xb5, 765 0x72, 0x17, 0x23, 0x11, 0x81, 0x7f, 0x00, 0x00, 0x67, 0x5c, 0xf4, 0x58, 766 0xcc, 0xe2, 0x46, 0xce, 0xf5, 0x6d, 0xd8, 0x18, 0x91, 0xc4, 0x20, 0xbf, 767 0x07, 0x48, 0x45, 0xfd, 0x02, 0x1c, 0x2f, 0x68, 0x44, 0xcb, 0xfb, 0x6b, 768 0xcb, 0x8d, 0x02, 0x49, 0x7c, 0xee, 0xd2, 0xa6, 0xd3, 0x43, 0xb8, 0xa4, 769 0x09, 0xb7, 0xc1, 0xd4, 0x4b, 0xc3, 0x66, 0xa7, 0xe0, 0x21, 770}; 771static const unsigned char dsa_p[] = { 772 0x00, 0xda, 0xb3, 0x46, 0x4d, 0x54, 0x57, 0xc7, 0xb4, 0x61, 0xa0, 0x6f, 0x66, 0x17, 0xda, 773 0xeb, 0x90, 0xf0, 0xa3, 0xd1, 0x29, 0xc9, 0x5f, 0xf2, 0x21, 0x3d, 0x85, 0xa3, 0x4a, 0xf0, 774 0xf8, 0x36, 0x39, 0x1b, 0xe3, 0xee, 0x37, 0x70, 0x06, 0x9b, 0xe8, 0xe3, 0x0a, 0xd2, 0xf1, 775 0xf6, 0xc4, 0x42, 0x23, 0x1f, 0x74, 0x78, 0xc2, 0x16, 0xf5, 0xce, 0xd6, 0xab, 0xa0, 0xc6, 776 0xe8, 0x99, 0x3d, 0xf8, 0x8b, 0xfb, 0x47, 0xf8, 0x5e, 0x05, 0x68, 0x6d, 0x8b, 0xa8, 0xad, 777 0xa1, 0xc2, 0x3a, 0x4e, 0xe0, 0xad, 0xec, 0x38, 0x75, 0x21, 0x55, 0x22, 0xce, 0xa2, 0xe9, 778 0xe5, 0x3b, 0xd7, 0x44, 0xeb, 0x5a, 0x03, 0x59, 0xa0, 0xc5, 0x7a, 0x92, 0x59, 0x7d, 0x7a, 779 0x07, 0x80, 0xfc, 0x4e, 0xf8, 0x56, 0x7e, 0xf1, 0x06, 0xe0, 0xba, 0xb2, 0xe7, 0x5b, 0x22, 780 0x55, 0xee, 0x4b, 0x42, 0x61, 0x67, 0x2c, 0x43, 0x9a, 0x38, 0x2b, 0x17, 0xc2, 0x62, 0x12, 781 0x8b, 0x0b, 0x22, 0x8c, 0x0c, 0x1c, 0x1c, 0x92, 0xb1, 0xec, 0x70, 0xce, 0x0f, 0x8c, 0xff, 782 0x8d, 0x21, 0xf9, 0x19, 0x68, 0x4d, 0x32, 0x59, 0x78, 0x42, 0x1d, 0x0c, 0xc5, 0x1a, 0xcb, 783 0x28, 0xe2, 0xc1, 0x1a, 0x35, 0xf1, 0x42, 0x0a, 0x19, 0x39, 0xfa, 0x83, 0xd1, 0xb4, 0xaa, 784 0x69, 0x0f, 0xc2, 0x8e, 0xf9, 0x59, 0x2c, 0xee, 0x11, 0xfc, 0x3e, 0x4b, 0x44, 0xfb, 0x9a, 785 0x32, 0xc8, 0x78, 0x23, 0x56, 0x85, 0x49, 0x21, 0x43, 0x12, 0x79, 0xbd, 0xa0, 0x70, 0x47, 786 0x2f, 0xae, 0xb6, 0xd7, 0x6c, 0xc6, 0x07, 0x76, 0xa9, 0x8a, 0xa2, 0x16, 0x02, 0x89, 0x1f, 787 0x1a, 0xd1, 0xa2, 0x96, 0x56, 0xd1, 0x1f, 0x10, 0xe1, 0xe5, 0x9f, 0x3f, 0xdd, 0x09, 0x0c, 788 0x40, 0x90, 0x71, 0xef, 0x14, 0x41, 0x02, 0x82, 0x3a, 0x6b, 0xe1, 0xf8, 0x2c, 0x5d, 0xbe, 789 0xfd, 0x1b 790}; 791static const unsigned char dsa_q[] = { 792 0x00, 0xe0, 0x20, 0xe0, 0x7c, 0x02, 0x16, 0xa7, 0x6c, 0x6a, 0x19, 0xba, 0xd5, 0x83, 0x73, 793 0xf3, 0x7d, 0x31, 0xef, 0xa7, 0xe1, 0x5d, 0x5b, 0x7f, 0xf3, 0xfc, 0xda, 0x84, 0x31 794}; 795static const unsigned char dsa_g[] = { 796 0x00, 0x83, 0xdb, 0xa1, 0xbc, 0x3e, 0xc7, 0x29, 0xa5, 0x6a, 0x5c, 0x2c, 0xe8, 0x7a, 0x8c, 797 0x7e, 0xe8, 0xb8, 0x3e, 0x13, 0x47, 0xcd, 0x36, 0x7e, 0x79, 0x30, 0x7a, 0x28, 0x03, 0xd3, 798 0xd4, 0xd2, 0xe3, 0xee, 0x3b, 0x46, 0xda, 0xe0, 0x71, 0xe6, 0xcf, 0x46, 0x86, 0x0a, 0x37, 799 0x57, 0xb6, 0xe9, 0xcf, 0xa1, 0x78, 0x19, 0xb8, 0x72, 0x9f, 0x30, 0x8c, 0x2a, 0x04, 0x7c, 800 0x2f, 0x0c, 0x27, 0xa7, 0xb3, 0x23, 0xe0, 0x46, 0xf2, 0x75, 0x0c, 0x03, 0x4c, 0xad, 0xfb, 801 0xc1, 0xcb, 0x28, 0xcd, 0xa0, 0x63, 0xdb, 0x44, 0x88, 0xe0, 0xda, 0x6c, 0x5b, 0x89, 0xb2, 802 0x5b, 0x40, 0x6d, 0xeb, 0x78, 0x7a, 0xd5, 0xaf, 0x40, 0x52, 0x46, 0x63, 0x92, 0x13, 0x0d, 803 0xee, 0xee, 0xf9, 0x53, 0xca, 0x2d, 0x4e, 0x3b, 0x13, 0xd8, 0x0f, 0x50, 0xd0, 0x44, 0x57, 804 0x67, 0x0f, 0x45, 0x8f, 0x21, 0x30, 0x97, 0x9e, 0x80, 0xd9, 0xd0, 0x91, 0xb7, 0xc9, 0x5a, 805 0x69, 0xda, 0xeb, 0xd5, 0xea, 0x37, 0xf6, 0xb3, 0xbe, 0x1f, 0x24, 0xf1, 0x55, 0x14, 0x28, 806 0x05, 0xb5, 0xd8, 0x84, 0x0f, 0x62, 0x85, 0xaa, 0xec, 0x77, 0x64, 0xfd, 0x80, 0x7c, 0x41, 807 0x00, 0x88, 0xa3, 0x79, 0x7d, 0x4f, 0x6f, 0xe3, 0x76, 0xf4, 0xb5, 0x97, 0xb7, 0xeb, 0x67, 808 0x28, 0xba, 0x07, 0x1a, 0x59, 0x32, 0xc1, 0x53, 0xd9, 0x05, 0x6b, 0x63, 0x93, 0xce, 0xa1, 809 0xd9, 0x7a, 0xb2, 0xff, 0x1c, 0x12, 0x0a, 0x9a, 0xe5, 0x51, 0x1e, 0xba, 0xfc, 0x95, 0x2e, 810 0x28, 0xa9, 0xfc, 0x4c, 0xed, 0x7b, 0x05, 0xca, 0x67, 0xe0, 0x2d, 0xd7, 0x54, 0xb3, 0x05, 811 0x1c, 0x23, 0x2b, 0x35, 0x2e, 0x19, 0x48, 0x59, 0x0e, 0x58, 0xa8, 0x01, 0x56, 0xfb, 0x78, 812 0x90, 0xba, 0x08, 0x77, 0x94, 0x45, 0x05, 0x13, 0xc7, 0x6b, 0x96, 0xd2, 0xa3, 0xa6, 0x01, 813 0x9f, 0x34 814}; 815static const unsigned char dsa_priv[] = { 816 0x2f, 0x68, 0x44, 0xcb, 0xfb, 0x6b, 0xcb, 0x8d, 0x02, 0x49, 0x7c, 0xee, 0xd2, 0xa6, 0xd3, 817 0x43, 0xb8, 0xa4, 0x09, 0xb7, 0xc1, 0xd4, 0x4b, 0xc3, 0x66, 0xa7, 0xe0, 0x21 818}; 819static const unsigned char dsa_pub[] = { 820 0x16, 0x1a, 0xb4, 0x6d, 0x9f, 0x16, 0x6c, 0xcc, 0x91, 0x66, 0xfe, 0x30, 0xeb, 0x8e, 0x44, 821 0xba, 0x2b, 0x7a, 0xc9, 0xa8, 0x95, 0xf2, 0xa6, 0x38, 0xd8, 0xaf, 0x3e, 0x91, 0x68, 0xe8, 822 0x52, 0xf3, 0x97, 0x37, 0x70, 0xf2, 0x47, 0xa3, 0xf4, 0x62, 0x26, 0xf5, 0x3b, 0x71, 0x52, 823 0x50, 0x15, 0x9c, 0x6d, 0xa6, 0x6d, 0x92, 0x4c, 0x48, 0x76, 0x31, 0x54, 0x48, 0xa5, 0x99, 824 0x7a, 0xd4, 0x61, 0xf7, 0x21, 0x44, 0xe7, 0xd8, 0x82, 0xc3, 0x50, 0xd3, 0xd9, 0xd4, 0x66, 825 0x20, 0xab, 0x70, 0x4c, 0x97, 0x9b, 0x8d, 0xac, 0x1f, 0x78, 0x27, 0x1e, 0x47, 0xf8, 0x3b, 826 0xd1, 0x55, 0x73, 0xf3, 0xb4, 0x8e, 0x6d, 0x45, 0x40, 0x54, 0xc6, 0xd8, 0x95, 0x15, 0x27, 827 0xb7, 0x5f, 0x65, 0xaa, 0xcb, 0x24, 0xc9, 0x49, 0x87, 0x32, 0xad, 0xcb, 0xf8, 0x35, 0x63, 828 0x56, 0x72, 0x7c, 0x4e, 0x6c, 0xad, 0x5f, 0x26, 0x8c, 0xd2, 0x80, 0x41, 0xaf, 0x88, 0x23, 829 0x20, 0x03, 0xa4, 0xd5, 0x3c, 0x53, 0x54, 0xb0, 0x3d, 0xed, 0x0e, 0x9e, 0x53, 0x0a, 0x63, 830 0x5f, 0xfd, 0x28, 0x57, 0x09, 0x07, 0x73, 0xf4, 0x0c, 0xd4, 0x71, 0x5d, 0x6b, 0xa0, 0xd7, 831 0x86, 0x99, 0x29, 0x9b, 0xca, 0xfb, 0xcc, 0xd6, 0x2f, 0xfe, 0xbe, 0x94, 0xef, 0x1a, 0x0e, 832 0x55, 0x84, 0xa7, 0xaf, 0x7b, 0xfa, 0xed, 0x77, 0x61, 0x28, 0x22, 0xee, 0x6b, 0x11, 0xdd, 833 0xb0, 0x17, 0x1e, 0x06, 0xe4, 0x29, 0x4c, 0xc2, 0x3f, 0xd6, 0x75, 0xb6, 0x08, 0x04, 0x55, 834 0x13, 0x48, 0x4f, 0x44, 0xea, 0x8d, 0xaf, 0xcb, 0xac, 0x22, 0xc4, 0x6a, 0xb3, 0x86, 0xe5, 835 0x47, 0xa9, 0xb5, 0x72, 0x17, 0x23, 0x11, 0x81, 0x7f, 0x00, 0x00, 0x67, 0x5c, 0xf4, 0x58, 836 0xcc, 0xe2, 0x46, 0xce, 0xf5, 0x6d, 0xd8, 0x18, 0x91, 0xc4, 0x20, 0xbf, 0x07, 0x48, 0x45, 837 0xfd 838}; 839 840static int do_check_params(OSSL_PARAM key_params[], int expected) 841{ 842 EVP_PKEY_CTX *gen_ctx = NULL, *check_ctx = NULL; 843 EVP_PKEY *pkey = NULL; 844 int ret; 845 846 ret = TEST_ptr(gen_ctx = EVP_PKEY_CTX_new_from_name(mainctx, "DSA", NULL)) 847 && TEST_int_eq(EVP_PKEY_fromdata_init(gen_ctx), 1) 848 && TEST_int_eq(EVP_PKEY_fromdata(gen_ctx, &pkey, 849 EVP_PKEY_KEYPAIR, key_params), 1) 850 && TEST_ptr(check_ctx = EVP_PKEY_CTX_new_from_pkey(mainctx, pkey, 851 NULL)) 852 && TEST_int_eq(EVP_PKEY_param_check(check_ctx), expected); 853 EVP_PKEY_CTX_free(check_ctx); 854 EVP_PKEY_CTX_free(gen_ctx); 855 EVP_PKEY_free(pkey); 856 return ret; 857} 858 859static int do_check_bn(OSSL_PARAM params[], const char *key, 860 const unsigned char *expected, size_t expected_len) 861{ 862 OSSL_PARAM *p; 863 BIGNUM *bn = NULL; 864 unsigned char buffer[256 + 1]; 865 int ret, len; 866 867 ret = TEST_ptr(p = OSSL_PARAM_locate(params, key)) 868 && TEST_true(OSSL_PARAM_get_BN(p, &bn)) 869 && TEST_int_gt(len = BN_bn2binpad(bn, buffer, expected_len), 0) 870 && TEST_mem_eq(expected, expected_len, buffer, len); 871 BN_free(bn); 872 return ret; 873} 874 875static int do_check_int(OSSL_PARAM params[], const char *key, int expected) 876{ 877 OSSL_PARAM *p; 878 int val = 0; 879 880 return TEST_ptr(p = OSSL_PARAM_locate(params, key)) 881 && TEST_true(OSSL_PARAM_get_int(p, &val)) 882 && TEST_int_eq(val, expected); 883} 884 885static int test_dsa_tofrom_data_select(void) 886{ 887 int ret; 888 EVP_PKEY *key = NULL; 889 const unsigned char *pkeydata = dsa_key; 890 891 ret = TEST_ptr(key = d2i_AutoPrivateKey_ex(NULL, &pkeydata, sizeof(dsa_key), 892 mainctx, NULL)) 893 && TEST_true(do_pkey_tofrom_data_select(key, "DSA")); 894 895 EVP_PKEY_free(key); 896 return ret; 897} 898 899static int test_dsa_todata(void) 900{ 901 EVP_PKEY *pkey = NULL; 902 OSSL_PARAM *to_params = NULL, *all_params = NULL; 903 OSSL_PARAM gen_params[4]; 904 int ret = 0; 905 const unsigned char *pkeydata = dsa_key; 906 907 unsigned char dsa_seed[] = { 908 0xbc, 0x8a, 0x81, 0x64, 0x9e, 0x9d, 0x63, 0xa7, 0xa3, 0x5d, 0x87, 0xdd, 909 0x32, 0xf3, 0xc1, 0x9f, 0x18, 0x22, 0xeb, 0x73, 0x63, 0xad, 0x5e, 0x7b, 910 0x90, 0xc1, 0xe3, 0xe0 911 }; 912 int dsa_pcounter = 319; 913 int dsa_gindex = 5; 914 915 gen_params[0] = OSSL_PARAM_construct_octet_string(OSSL_PKEY_PARAM_FFC_SEED, 916 (void*)dsa_seed, 917 sizeof(dsa_seed)); 918 gen_params[1] = OSSL_PARAM_construct_int(OSSL_PKEY_PARAM_FFC_GINDEX, 919 &dsa_gindex); 920 gen_params[2] = OSSL_PARAM_construct_int(OSSL_PKEY_PARAM_FFC_PCOUNTER, 921 &dsa_pcounter); 922 gen_params[3] = OSSL_PARAM_construct_end(); 923 924 if (!TEST_ptr(pkey = d2i_AutoPrivateKey_ex(NULL, &pkeydata, sizeof(dsa_key), 925 mainctx, NULL)) 926 || !TEST_int_eq(EVP_PKEY_todata(pkey, EVP_PKEY_KEYPAIR, &to_params), 1) 927 || !do_check_bn(to_params, OSSL_PKEY_PARAM_FFC_P, dsa_p, sizeof(dsa_p)) 928 || !do_check_bn(to_params, OSSL_PKEY_PARAM_FFC_Q, dsa_q, sizeof(dsa_q)) 929 || !do_check_bn(to_params, OSSL_PKEY_PARAM_FFC_G, dsa_g, sizeof(dsa_g)) 930 || !do_check_bn(to_params, OSSL_PKEY_PARAM_PUB_KEY, dsa_pub, 931 sizeof(dsa_pub)) 932 || !do_check_bn(to_params, OSSL_PKEY_PARAM_PRIV_KEY, dsa_priv, 933 sizeof(dsa_priv)) 934 || !do_check_int(to_params, OSSL_PKEY_PARAM_FFC_GINDEX, -1) 935 || !do_check_int(to_params, OSSL_PKEY_PARAM_FFC_PCOUNTER, -1) 936 || !do_check_int(to_params, OSSL_PKEY_PARAM_FFC_H, 0) 937 || !do_check_int(to_params, OSSL_PKEY_PARAM_FFC_VALIDATE_PQ, 1) 938 || !do_check_int(to_params, OSSL_PKEY_PARAM_FFC_VALIDATE_G, 1) 939 || !do_check_int(to_params, OSSL_PKEY_PARAM_FFC_VALIDATE_LEGACY, 0) 940 || !TEST_ptr_null(OSSL_PARAM_locate(to_params, OSSL_PKEY_PARAM_FFC_SEED))) 941 goto err; 942 943 if (!do_fromdata_key_is_equal(to_params, pkey, "DSA")) 944 goto err; 945 946 if (!TEST_ptr(all_params = OSSL_PARAM_merge(to_params, gen_params)) 947 || !do_check_params(all_params, 1)) 948 goto err; 949 gen_params[1] = OSSL_PARAM_construct_int(OSSL_PKEY_PARAM_FFC_GINDEX, 950 &dsa_gindex); 951 gen_params[2] = OSSL_PARAM_construct_int(OSSL_PKEY_PARAM_FFC_PCOUNTER, 952 &dsa_pcounter); 953 /* 954 * Check that modifying the shallow copy values used in OSSL_PARAM_merge() 955 * results in an invalid key. This also verifies that the fips186-4 956 * validation code is running. 957 */ 958 dsa_gindex++; 959 if (!do_check_params(all_params, 0)) 960 goto err; 961 dsa_gindex--; 962 dsa_pcounter++; 963 if (!do_check_params(all_params, 0)) 964 goto err; 965 dsa_pcounter--; 966 dsa_seed[0] = 0xb0; 967 if (!do_check_params(all_params, 0)) 968 goto err; 969 970 ret = 1; 971err: 972 EVP_PKEY_free(pkey); 973 OSSL_PARAM_free(all_params); 974 OSSL_PARAM_free(to_params); 975 return ret; 976} 977#endif /* OPENSSL_NO_DSA */ 978 979static int test_pkey_todata_null(void) 980{ 981 OSSL_PARAM *params = NULL; 982 EVP_PKEY *pkey = NULL; 983 int ret = 0; 984 const unsigned char *pdata = keydata[0].kder; 985 986 ret = TEST_ptr(pkey = d2i_AutoPrivateKey_ex(NULL, &pdata, keydata[0].size, 987 mainctx, NULL)) 988 && TEST_int_eq(EVP_PKEY_todata(NULL, EVP_PKEY_KEYPAIR, ¶ms), 0) 989 && TEST_int_eq(EVP_PKEY_todata(pkey, EVP_PKEY_KEYPAIR, NULL), 0); 990 EVP_PKEY_free(pkey); 991 return ret; 992} 993 994static OSSL_CALLBACK test_pkey_export_cb; 995 996static int test_pkey_export_cb(const OSSL_PARAM params[], void *arg) 997{ 998 if (arg == NULL) 999 return 0; 1000 return do_fromdata_key_is_equal(params, (EVP_PKEY *)arg, "RSA"); 1001} 1002 1003static int test_pkey_export_null(void) 1004{ 1005 EVP_PKEY *pkey = NULL; 1006 int ret = 0; 1007 const unsigned char *pdata = keydata[0].kder; 1008 1009 ret = TEST_ptr(pkey = d2i_AutoPrivateKey_ex(NULL, &pdata, keydata[0].size, 1010 mainctx, NULL)) 1011 && TEST_int_eq(EVP_PKEY_export(NULL, EVP_PKEY_KEYPAIR, 1012 test_pkey_export_cb, NULL), 0) 1013 && TEST_int_eq(EVP_PKEY_export(pkey, EVP_PKEY_KEYPAIR, NULL, NULL), 0); 1014 EVP_PKEY_free(pkey); 1015 return ret; 1016} 1017 1018static int test_pkey_export(void) 1019{ 1020 EVP_PKEY *pkey = NULL; 1021#ifndef OPENSSL_NO_DEPRECATED_3_0 1022 RSA *rsa = NULL; 1023#endif 1024 int ret = 1; 1025 const unsigned char *pdata = keydata[0].kder; 1026 int pdata_len = keydata[0].size; 1027 1028 if (!TEST_ptr(pkey = d2i_AutoPrivateKey_ex(NULL, &pdata, pdata_len, 1029 mainctx, NULL)) 1030 || !TEST_true(EVP_PKEY_export(pkey, EVP_PKEY_KEYPAIR, 1031 test_pkey_export_cb, pkey)) 1032 || !TEST_false(EVP_PKEY_export(pkey, EVP_PKEY_KEYPAIR, 1033 test_pkey_export_cb, NULL))) 1034 ret = 0; 1035 EVP_PKEY_free(pkey); 1036 1037#ifndef OPENSSL_NO_DEPRECATED_3_0 1038 /* Now, try with a legacy key */ 1039 pdata = keydata[0].kder; 1040 pdata_len = keydata[0].size; 1041 if (!TEST_ptr(rsa = d2i_RSAPrivateKey(NULL, &pdata, pdata_len)) 1042 || !TEST_ptr(pkey = EVP_PKEY_new()) 1043 || !TEST_true(EVP_PKEY_assign_RSA(pkey, rsa)) 1044 || !TEST_true(EVP_PKEY_export(pkey, EVP_PKEY_KEYPAIR, 1045 test_pkey_export_cb, pkey)) 1046 || !TEST_false(EVP_PKEY_export(pkey, EVP_PKEY_KEYPAIR, 1047 test_pkey_export_cb, NULL))) 1048 ret = 0; 1049 EVP_PKEY_free(pkey); 1050#endif 1051 return ret; 1052} 1053 1054static int test_rsa_pss_sign(void) 1055{ 1056 EVP_PKEY *pkey = NULL; 1057 EVP_PKEY_CTX *pctx = NULL; 1058 int ret = 0; 1059 const unsigned char *pdata = keydata[0].kder; 1060 const char *mdname = "SHA2-256"; 1061 OSSL_PARAM sig_params[3]; 1062 unsigned char mdbuf[256 / 8] = { 0 }; 1063 int padding = RSA_PKCS1_PSS_PADDING; 1064 unsigned char *sig = NULL; 1065 size_t sig_len = 0; 1066 1067 sig_params[0] = OSSL_PARAM_construct_int(OSSL_PKEY_PARAM_PAD_MODE, 1068 &padding); 1069 sig_params[1] = OSSL_PARAM_construct_utf8_string(OSSL_SIGNATURE_PARAM_DIGEST, 1070 (char *)mdname, 0); 1071 sig_params[2] = OSSL_PARAM_construct_end(); 1072 1073 ret = TEST_ptr(pkey = d2i_AutoPrivateKey_ex(NULL, &pdata, keydata[0].size, 1074 mainctx, NULL)) 1075 && TEST_ptr(pctx = EVP_PKEY_CTX_new_from_pkey(mainctx, pkey, NULL)) 1076 && TEST_int_gt(EVP_PKEY_sign_init_ex(pctx, sig_params), 0) 1077 && TEST_int_gt(EVP_PKEY_sign(pctx, NULL, &sig_len, mdbuf, 1078 sizeof(mdbuf)), 0) 1079 && TEST_int_gt(sig_len, 0) 1080 && TEST_ptr(sig = OPENSSL_malloc(sig_len)) 1081 && TEST_int_gt(EVP_PKEY_sign(pctx, sig, &sig_len, mdbuf, 1082 sizeof(mdbuf)), 0); 1083 1084 EVP_PKEY_CTX_free(pctx); 1085 OPENSSL_free(sig); 1086 EVP_PKEY_free(pkey); 1087 1088 return ret; 1089} 1090 1091static int test_evp_md_ctx_copy(void) 1092{ 1093 EVP_MD_CTX *mdctx = NULL; 1094 EVP_MD_CTX *copyctx = NULL; 1095 int ret; 1096 1097 /* test copying freshly initialized context */ 1098 ret = TEST_ptr(mdctx = EVP_MD_CTX_new()) 1099 && TEST_ptr(copyctx = EVP_MD_CTX_new()) 1100 && TEST_true(EVP_MD_CTX_copy_ex(copyctx, mdctx)); 1101 1102 EVP_MD_CTX_free(mdctx); 1103 EVP_MD_CTX_free(copyctx); 1104 return ret; 1105} 1106 1107#if !defined OPENSSL_NO_DES && !defined OPENSSL_NO_MD5 1108static int test_evp_pbe_alg_add(void) 1109{ 1110 int ret = 0; 1111 int cipher_nid = 0, md_nid = 0; 1112 EVP_PBE_KEYGEN_EX *keygen_ex = NULL; 1113 EVP_PBE_KEYGEN *keygen = NULL; 1114 1115 if (!TEST_true(EVP_PBE_alg_add(NID_pbeWithMD5AndDES_CBC, EVP_des_cbc(), EVP_md5(), 1116 PKCS5_PBE_keyivgen))) 1117 goto err; 1118 1119 if (!TEST_true(EVP_PBE_find_ex(EVP_PBE_TYPE_OUTER, NID_pbeWithMD5AndDES_CBC, 1120 &cipher_nid, &md_nid, &keygen, &keygen_ex))) 1121 goto err; 1122 1123 if (!TEST_true(keygen != NULL)) 1124 goto err; 1125 if (!TEST_true(keygen_ex == NULL)) 1126 goto err; 1127 1128 ret = 1; 1129 1130err: 1131 return ret; 1132} 1133#endif 1134 1135int setup_tests(void) 1136{ 1137 if (!test_get_libctx(&mainctx, &nullprov, NULL, NULL, NULL)) { 1138 OSSL_LIB_CTX_free(mainctx); 1139 mainctx = NULL; 1140 return 0; 1141 } 1142 1143 ADD_TEST(test_alternative_default); 1144 ADD_ALL_TESTS(test_d2i_AutoPrivateKey_ex, OSSL_NELEM(keydata)); 1145#ifndef OPENSSL_NO_EC 1146 ADD_ALL_TESTS(test_d2i_PrivateKey_ex, 2); 1147 ADD_TEST(test_ec_tofrom_data_select); 1148 ADD_TEST(test_ecx_tofrom_data_select); 1149#else 1150 ADD_ALL_TESTS(test_d2i_PrivateKey_ex, 1); 1151#endif 1152#ifndef OPENSSL_NO_SM2 1153 ADD_TEST(test_sm2_tofrom_data_select); 1154#endif 1155#ifndef OPENSSL_NO_DSA 1156 ADD_TEST(test_dsa_todata); 1157 ADD_TEST(test_dsa_tofrom_data_select); 1158#endif 1159#ifndef OPENSSL_NO_DH 1160 ADD_TEST(test_dh_tofrom_data_select); 1161 ADD_TEST(test_dh_paramgen); 1162#endif 1163 ADD_TEST(test_rsa_tofrom_data_select); 1164 1165 ADD_TEST(test_pkey_todata_null); 1166 ADD_TEST(test_pkey_export_null); 1167 ADD_TEST(test_pkey_export); 1168#ifndef OPENSSL_NO_DES 1169 ADD_TEST(test_pkcs8key_nid_bio); 1170#endif 1171 ADD_ALL_TESTS(test_PEM_read_bio_negative, OSSL_NELEM(keydata)); 1172 ADD_TEST(test_rsa_pss_sign); 1173 ADD_TEST(test_evp_md_ctx_copy); 1174 ADD_ALL_TESTS(test_provider_unload_effective, 2); 1175#if !defined OPENSSL_NO_DES && !defined OPENSSL_NO_MD5 1176 ADD_TEST(test_evp_pbe_alg_add); 1177#endif 1178 return 1; 1179} 1180 1181void cleanup_tests(void) 1182{ 1183 OSSL_LIB_CTX_free(mainctx); 1184 OSSL_PROVIDER_unload(nullprov); 1185} 1186