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