1691 lines
27 KiB
C
1691 lines
27 KiB
C
/* $OpenBSD: evp_names.c,v 1.18 2024/08/31 10:38:49 tb Exp $ */
|
|
/*
|
|
* Copyright (c) 2023 Theo Buehler <tb@openbsd.org>
|
|
*
|
|
* Permission to use, copy, modify, and distribute this software for any
|
|
* purpose with or without fee is hereby granted, provided that the above
|
|
* copyright notice and this permission notice appear in all copies.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
*/
|
|
|
|
#include <openssl/err.h>
|
|
#include <openssl/evp.h>
|
|
#include <openssl/objects.h>
|
|
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
/*
|
|
* In the following two structs, .name is the lookup name that is used
|
|
* for EVP_get_cipherbyname() and EVP_get_digestbyname(), while .alias
|
|
* keeps track of the aliased name.
|
|
*/
|
|
|
|
struct cipher_name {
|
|
const char *name;
|
|
const EVP_CIPHER *(*cipher)(void);
|
|
const char *alias;
|
|
};
|
|
|
|
struct digest_name {
|
|
const char *name;
|
|
const EVP_MD *(*digest)(void);
|
|
const char *alias;
|
|
};
|
|
|
|
/*
|
|
* Keep this table alphabetically sorted by increasing .name.
|
|
* regress/lib/libcrypto/evp/evp_test.c checks that.
|
|
*/
|
|
|
|
static const struct cipher_name cipher_names[] = {
|
|
{
|
|
.name = SN_aes_128_cbc,
|
|
.cipher = EVP_aes_128_cbc,
|
|
},
|
|
{
|
|
.name = SN_aes_128_cfb128,
|
|
.cipher = EVP_aes_128_cfb128,
|
|
},
|
|
{
|
|
.name = SN_aes_128_cfb1,
|
|
.cipher = EVP_aes_128_cfb1,
|
|
},
|
|
{
|
|
.name = SN_aes_128_cfb8,
|
|
.cipher = EVP_aes_128_cfb8,
|
|
},
|
|
{
|
|
.name = SN_aes_128_ctr,
|
|
.cipher = EVP_aes_128_ctr,
|
|
},
|
|
{
|
|
.name = SN_aes_128_ecb,
|
|
.cipher = EVP_aes_128_ecb,
|
|
},
|
|
{
|
|
.name = SN_aes_128_ofb128,
|
|
.cipher = EVP_aes_128_ofb,
|
|
},
|
|
{
|
|
.name = SN_aes_128_xts,
|
|
.cipher = EVP_aes_128_xts,
|
|
},
|
|
|
|
{
|
|
.name = SN_aes_192_cbc,
|
|
.cipher = EVP_aes_192_cbc,
|
|
},
|
|
{
|
|
.name = SN_aes_192_cfb128,
|
|
.cipher = EVP_aes_192_cfb128,
|
|
},
|
|
{
|
|
.name = SN_aes_192_cfb1,
|
|
.cipher = EVP_aes_192_cfb1,
|
|
},
|
|
{
|
|
.name = SN_aes_192_cfb8,
|
|
.cipher = EVP_aes_192_cfb8,
|
|
},
|
|
{
|
|
.name = SN_aes_192_ctr,
|
|
.cipher = EVP_aes_192_ctr,
|
|
},
|
|
{
|
|
.name = SN_aes_192_ecb,
|
|
.cipher = EVP_aes_192_ecb,
|
|
},
|
|
{
|
|
.name = SN_aes_192_ofb128,
|
|
.cipher = EVP_aes_192_ofb,
|
|
},
|
|
|
|
{
|
|
.name = SN_aes_256_cbc,
|
|
.cipher = EVP_aes_256_cbc,
|
|
},
|
|
{
|
|
.name = SN_aes_256_cfb128,
|
|
.cipher = EVP_aes_256_cfb128,
|
|
},
|
|
{
|
|
.name = SN_aes_256_cfb1,
|
|
.cipher = EVP_aes_256_cfb1,
|
|
},
|
|
{
|
|
.name = SN_aes_256_cfb8,
|
|
.cipher = EVP_aes_256_cfb8,
|
|
},
|
|
{
|
|
.name = SN_aes_256_ctr,
|
|
.cipher = EVP_aes_256_ctr,
|
|
},
|
|
{
|
|
.name = SN_aes_256_ecb,
|
|
.cipher = EVP_aes_256_ecb,
|
|
},
|
|
{
|
|
.name = SN_aes_256_ofb128,
|
|
.cipher = EVP_aes_256_ofb,
|
|
},
|
|
{
|
|
.name = SN_aes_256_xts,
|
|
.cipher = EVP_aes_256_xts,
|
|
},
|
|
|
|
{
|
|
.name = "AES128",
|
|
.cipher = EVP_aes_128_cbc,
|
|
.alias = SN_aes_128_cbc,
|
|
},
|
|
{
|
|
.name = "AES192",
|
|
.cipher = EVP_aes_192_cbc,
|
|
.alias = SN_aes_192_cbc,
|
|
},
|
|
{
|
|
.name = "AES256",
|
|
.cipher = EVP_aes_256_cbc,
|
|
.alias = SN_aes_256_cbc,
|
|
},
|
|
|
|
{
|
|
.name = "BF",
|
|
.cipher = EVP_bf_cbc,
|
|
.alias = SN_bf_cbc,
|
|
},
|
|
|
|
{
|
|
.name = SN_bf_cbc,
|
|
.cipher = EVP_bf_cbc,
|
|
},
|
|
{
|
|
.name = SN_bf_cfb64,
|
|
.cipher = EVP_bf_cfb64,
|
|
},
|
|
{
|
|
.name = SN_bf_ecb,
|
|
.cipher = EVP_bf_ecb,
|
|
},
|
|
{
|
|
.name = SN_bf_ofb64,
|
|
.cipher = EVP_bf_ofb,
|
|
},
|
|
|
|
{
|
|
.name = SN_camellia_128_cbc,
|
|
.cipher = EVP_camellia_128_cbc,
|
|
},
|
|
{
|
|
.name = SN_camellia_128_cfb128,
|
|
.cipher = EVP_camellia_128_cfb128,
|
|
},
|
|
{
|
|
.name = SN_camellia_128_cfb1,
|
|
.cipher = EVP_camellia_128_cfb1,
|
|
},
|
|
{
|
|
.name = SN_camellia_128_cfb8,
|
|
.cipher = EVP_camellia_128_cfb8,
|
|
},
|
|
{
|
|
.name = SN_camellia_128_ecb,
|
|
.cipher = EVP_camellia_128_ecb,
|
|
},
|
|
{
|
|
.name = SN_camellia_128_ofb128,
|
|
.cipher = EVP_camellia_128_ofb,
|
|
},
|
|
|
|
{
|
|
.name = SN_camellia_192_cbc,
|
|
.cipher = EVP_camellia_192_cbc,
|
|
},
|
|
{
|
|
.name = SN_camellia_192_cfb128,
|
|
.cipher = EVP_camellia_192_cfb128,
|
|
},
|
|
{
|
|
.name = SN_camellia_192_cfb1,
|
|
.cipher = EVP_camellia_192_cfb1,
|
|
},
|
|
{
|
|
.name = SN_camellia_192_cfb8,
|
|
.cipher = EVP_camellia_192_cfb8,
|
|
},
|
|
{
|
|
.name = SN_camellia_192_ecb,
|
|
.cipher = EVP_camellia_192_ecb,
|
|
},
|
|
{
|
|
.name = SN_camellia_192_ofb128,
|
|
.cipher = EVP_camellia_192_ofb,
|
|
},
|
|
|
|
{
|
|
.name = SN_camellia_256_cbc,
|
|
.cipher = EVP_camellia_256_cbc,
|
|
},
|
|
{
|
|
.name = SN_camellia_256_cfb128,
|
|
.cipher = EVP_camellia_256_cfb128,
|
|
},
|
|
{
|
|
.name = SN_camellia_256_cfb1,
|
|
.cipher = EVP_camellia_256_cfb1,
|
|
},
|
|
{
|
|
.name = SN_camellia_256_cfb8,
|
|
.cipher = EVP_camellia_256_cfb8,
|
|
},
|
|
{
|
|
.name = SN_camellia_256_ecb,
|
|
.cipher = EVP_camellia_256_ecb,
|
|
},
|
|
{
|
|
.name = SN_camellia_256_ofb128,
|
|
.cipher = EVP_camellia_256_ofb,
|
|
},
|
|
|
|
{
|
|
.name = "CAMELLIA128",
|
|
.cipher = EVP_camellia_128_cbc,
|
|
.alias = SN_camellia_128_cbc,
|
|
},
|
|
{
|
|
.name = "CAMELLIA192",
|
|
.cipher = EVP_camellia_192_cbc,
|
|
.alias = SN_camellia_192_cbc,
|
|
},
|
|
{
|
|
.name = "CAMELLIA256",
|
|
.cipher = EVP_camellia_256_cbc,
|
|
.alias = SN_camellia_256_cbc,
|
|
},
|
|
|
|
{
|
|
.name = "CAST",
|
|
.cipher = EVP_cast5_cbc,
|
|
.alias = SN_cast5_cbc,
|
|
},
|
|
{
|
|
.name = "CAST-cbc",
|
|
.cipher = EVP_cast5_cbc,
|
|
.alias = SN_cast5_cbc,
|
|
},
|
|
|
|
{
|
|
.name = SN_cast5_cbc,
|
|
.cipher = EVP_cast5_cbc,
|
|
},
|
|
{
|
|
.name = SN_cast5_cfb64,
|
|
.cipher = EVP_cast5_cfb,
|
|
},
|
|
{
|
|
.name = SN_cast5_ecb,
|
|
.cipher = EVP_cast5_ecb,
|
|
},
|
|
{
|
|
.name = SN_cast5_ofb64,
|
|
.cipher = EVP_cast5_ofb,
|
|
},
|
|
|
|
{
|
|
.name = SN_chacha20,
|
|
.cipher = EVP_chacha20,
|
|
},
|
|
{
|
|
.name = "ChaCha20",
|
|
.cipher = EVP_chacha20,
|
|
.alias = SN_chacha20,
|
|
},
|
|
|
|
{
|
|
.name = SN_chacha20_poly1305,
|
|
.cipher = EVP_chacha20_poly1305,
|
|
},
|
|
|
|
{
|
|
.name = "DES",
|
|
.cipher = EVP_des_cbc,
|
|
.alias = SN_des_cbc,
|
|
},
|
|
|
|
{
|
|
.name = SN_des_cbc,
|
|
.cipher = EVP_des_cbc,
|
|
},
|
|
{
|
|
.name = SN_des_cfb64,
|
|
.cipher = EVP_des_cfb64,
|
|
},
|
|
{
|
|
.name = SN_des_cfb1,
|
|
.cipher = EVP_des_cfb1,
|
|
},
|
|
{
|
|
.name = SN_des_cfb8,
|
|
.cipher = EVP_des_cfb8,
|
|
},
|
|
{
|
|
.name = SN_des_ecb,
|
|
.cipher = EVP_des_ecb,
|
|
},
|
|
{
|
|
.name = SN_des_ede_ecb,
|
|
.cipher = EVP_des_ede,
|
|
},
|
|
{
|
|
.name = SN_des_ede_cbc,
|
|
.cipher = EVP_des_ede_cbc,
|
|
},
|
|
{
|
|
.name = SN_des_ede_cfb64,
|
|
.cipher = EVP_des_ede_cfb64,
|
|
},
|
|
{
|
|
.name = SN_des_ede_ofb64,
|
|
.cipher = EVP_des_ede_ofb,
|
|
},
|
|
{
|
|
.name = SN_des_ede3_ecb,
|
|
.cipher = EVP_des_ede3_ecb,
|
|
},
|
|
{
|
|
.name = SN_des_ede3_cbc,
|
|
.cipher = EVP_des_ede3_cbc,
|
|
},
|
|
{
|
|
.name = SN_des_ede3_cfb64,
|
|
.cipher = EVP_des_ede3_cfb,
|
|
},
|
|
{
|
|
.name = SN_des_ede3_cfb1,
|
|
.cipher = EVP_des_ede3_cfb1,
|
|
},
|
|
{
|
|
.name = SN_des_ede3_cfb8,
|
|
.cipher = EVP_des_ede3_cfb8,
|
|
},
|
|
{
|
|
.name = SN_des_ede3_ofb64,
|
|
.cipher = EVP_des_ede3_ofb,
|
|
},
|
|
{
|
|
.name = SN_des_ofb64,
|
|
.cipher = EVP_des_ofb,
|
|
},
|
|
|
|
{
|
|
.name = "DES3",
|
|
.cipher = EVP_des_ede3_cbc,
|
|
.alias = SN_des_ede3_cbc,
|
|
},
|
|
|
|
{
|
|
.name = "DESX",
|
|
.cipher = EVP_desx_cbc,
|
|
.alias = SN_desx_cbc,
|
|
},
|
|
{
|
|
.name = SN_desx_cbc,
|
|
.cipher = EVP_desx_cbc,
|
|
},
|
|
|
|
{
|
|
.name = "IDEA",
|
|
.cipher = EVP_idea_cbc,
|
|
.alias = SN_idea_cbc,
|
|
},
|
|
|
|
{
|
|
.name = SN_idea_cbc,
|
|
.cipher = EVP_idea_cbc,
|
|
},
|
|
{
|
|
.name = SN_idea_cfb64,
|
|
.cipher = EVP_idea_cfb64,
|
|
},
|
|
{
|
|
.name = SN_idea_ecb,
|
|
.cipher = EVP_idea_ecb,
|
|
},
|
|
{
|
|
.name = SN_idea_ofb64,
|
|
.cipher = EVP_idea_ofb,
|
|
},
|
|
|
|
{
|
|
.name = "RC2",
|
|
.cipher = EVP_rc2_cbc,
|
|
.alias = SN_rc2_cbc,
|
|
},
|
|
|
|
{
|
|
.name = SN_rc2_40_cbc,
|
|
.cipher = EVP_rc2_40_cbc,
|
|
},
|
|
{
|
|
.name = SN_rc2_64_cbc,
|
|
.cipher = EVP_rc2_64_cbc,
|
|
},
|
|
{
|
|
.name = SN_rc2_cbc,
|
|
.cipher = EVP_rc2_cbc,
|
|
},
|
|
{
|
|
.name = SN_rc2_cfb64,
|
|
.cipher = EVP_rc2_cfb64,
|
|
},
|
|
{
|
|
.name = SN_rc2_ecb,
|
|
.cipher = EVP_rc2_ecb,
|
|
},
|
|
{
|
|
.name = SN_rc2_ofb64,
|
|
.cipher = EVP_rc2_ofb,
|
|
},
|
|
|
|
{
|
|
.name = SN_rc4,
|
|
.cipher = EVP_rc4,
|
|
},
|
|
{
|
|
.name = SN_rc4_40,
|
|
.cipher = EVP_rc4_40,
|
|
},
|
|
|
|
{
|
|
.name = "SM4",
|
|
.cipher = EVP_sm4_cbc,
|
|
.alias = SN_sm4_cbc,
|
|
},
|
|
|
|
{
|
|
.name = SN_sm4_cbc,
|
|
.cipher = EVP_sm4_cbc,
|
|
},
|
|
{
|
|
.name = SN_sm4_cfb128,
|
|
.cipher = EVP_sm4_cfb128,
|
|
},
|
|
{
|
|
.name = SN_sm4_ctr,
|
|
.cipher = EVP_sm4_ctr,
|
|
},
|
|
{
|
|
.name = SN_sm4_ecb,
|
|
.cipher = EVP_sm4_ecb,
|
|
},
|
|
{
|
|
.name = SN_sm4_ofb128,
|
|
.cipher = EVP_sm4_ofb,
|
|
},
|
|
|
|
{
|
|
.name = LN_aes_128_cbc,
|
|
.cipher = EVP_aes_128_cbc,
|
|
},
|
|
{
|
|
.name = LN_aes_128_ccm,
|
|
.cipher = EVP_aes_128_ccm,
|
|
},
|
|
{
|
|
.name = LN_aes_128_cfb128,
|
|
.cipher = EVP_aes_128_cfb128,
|
|
},
|
|
{
|
|
.name = LN_aes_128_cfb1,
|
|
.cipher = EVP_aes_128_cfb1,
|
|
},
|
|
{
|
|
.name = LN_aes_128_cfb8,
|
|
.cipher = EVP_aes_128_cfb8,
|
|
},
|
|
{
|
|
.name = LN_aes_128_ctr,
|
|
.cipher = EVP_aes_128_ctr,
|
|
},
|
|
{
|
|
.name = LN_aes_128_ecb,
|
|
.cipher = EVP_aes_128_ecb,
|
|
},
|
|
{
|
|
.name = LN_aes_128_gcm,
|
|
.cipher = EVP_aes_128_gcm,
|
|
},
|
|
{
|
|
.name = LN_aes_128_ofb128,
|
|
.cipher = EVP_aes_128_ofb,
|
|
},
|
|
{
|
|
.name = LN_aes_128_xts,
|
|
.cipher = EVP_aes_128_xts,
|
|
},
|
|
|
|
{
|
|
.name = LN_aes_192_cbc,
|
|
.cipher = EVP_aes_192_cbc,
|
|
},
|
|
{
|
|
.name = LN_aes_192_ccm,
|
|
.cipher = EVP_aes_192_ccm,
|
|
},
|
|
{
|
|
.name = LN_aes_192_cfb128,
|
|
.cipher = EVP_aes_192_cfb128,
|
|
},
|
|
{
|
|
.name = LN_aes_192_cfb1,
|
|
.cipher = EVP_aes_192_cfb1,
|
|
},
|
|
{
|
|
.name = LN_aes_192_cfb8,
|
|
.cipher = EVP_aes_192_cfb8,
|
|
},
|
|
{
|
|
.name = LN_aes_192_ctr,
|
|
.cipher = EVP_aes_192_ctr,
|
|
},
|
|
{
|
|
.name = LN_aes_192_ecb,
|
|
.cipher = EVP_aes_192_ecb,
|
|
},
|
|
{
|
|
.name = LN_aes_192_gcm,
|
|
.cipher = EVP_aes_192_gcm,
|
|
},
|
|
{
|
|
.name = LN_aes_192_ofb128,
|
|
.cipher = EVP_aes_192_ofb,
|
|
},
|
|
|
|
{
|
|
.name = LN_aes_256_cbc,
|
|
.cipher = EVP_aes_256_cbc,
|
|
},
|
|
{
|
|
.name = LN_aes_256_ccm,
|
|
.cipher = EVP_aes_256_ccm,
|
|
},
|
|
{
|
|
.name = LN_aes_256_cfb128,
|
|
.cipher = EVP_aes_256_cfb128,
|
|
},
|
|
{
|
|
.name = LN_aes_256_cfb1,
|
|
.cipher = EVP_aes_256_cfb1,
|
|
},
|
|
{
|
|
.name = LN_aes_256_cfb8,
|
|
.cipher = EVP_aes_256_cfb8,
|
|
},
|
|
{
|
|
.name = LN_aes_256_ctr,
|
|
.cipher = EVP_aes_256_ctr,
|
|
},
|
|
{
|
|
.name = LN_aes_256_ecb,
|
|
.cipher = EVP_aes_256_ecb,
|
|
},
|
|
{
|
|
.name = LN_aes_256_gcm,
|
|
.cipher = EVP_aes_256_gcm,
|
|
},
|
|
{
|
|
.name = LN_aes_256_ofb128,
|
|
.cipher = EVP_aes_256_ofb,
|
|
},
|
|
{
|
|
.name = LN_aes_256_xts,
|
|
.cipher = EVP_aes_256_xts,
|
|
},
|
|
|
|
{
|
|
.name = "aes128",
|
|
.cipher = EVP_aes_128_cbc,
|
|
.alias = SN_aes_128_cbc,
|
|
},
|
|
{
|
|
.name = "aes192",
|
|
.cipher = EVP_aes_192_cbc,
|
|
.alias = SN_aes_192_cbc,
|
|
},
|
|
{
|
|
.name = "aes256",
|
|
.cipher = EVP_aes_256_cbc,
|
|
.alias = SN_aes_256_cbc,
|
|
},
|
|
|
|
{
|
|
.name = "bf",
|
|
.cipher = EVP_bf_cbc,
|
|
.alias = SN_bf_cbc,
|
|
},
|
|
|
|
{
|
|
.name = LN_bf_cbc,
|
|
.cipher = EVP_bf_cbc,
|
|
},
|
|
{
|
|
.name = LN_bf_cfb64,
|
|
.cipher = EVP_bf_cfb64,
|
|
},
|
|
{
|
|
.name = LN_bf_ecb,
|
|
.cipher = EVP_bf_ecb,
|
|
},
|
|
{
|
|
.name = LN_bf_ofb64,
|
|
.cipher = EVP_bf_ofb,
|
|
},
|
|
|
|
{
|
|
.name = "blowfish",
|
|
.cipher = EVP_bf_cbc,
|
|
.alias = SN_bf_cbc,
|
|
},
|
|
|
|
{
|
|
.name = LN_camellia_128_cbc,
|
|
.cipher = EVP_camellia_128_cbc,
|
|
},
|
|
{
|
|
.name = LN_camellia_128_cfb128,
|
|
.cipher = EVP_camellia_128_cfb128,
|
|
},
|
|
{
|
|
.name = LN_camellia_128_cfb1,
|
|
.cipher = EVP_camellia_128_cfb1,
|
|
},
|
|
{
|
|
.name = LN_camellia_128_cfb8,
|
|
.cipher = EVP_camellia_128_cfb8,
|
|
},
|
|
{
|
|
.name = LN_camellia_128_ecb,
|
|
.cipher = EVP_camellia_128_ecb,
|
|
},
|
|
{
|
|
.name = LN_camellia_128_ofb128,
|
|
.cipher = EVP_camellia_128_ofb,
|
|
},
|
|
|
|
{
|
|
.name = LN_camellia_192_cbc,
|
|
.cipher = EVP_camellia_192_cbc,
|
|
},
|
|
{
|
|
.name = LN_camellia_192_cfb128,
|
|
.cipher = EVP_camellia_192_cfb128,
|
|
},
|
|
{
|
|
.name = LN_camellia_192_cfb1,
|
|
.cipher = EVP_camellia_192_cfb1,
|
|
},
|
|
{
|
|
.name = LN_camellia_192_cfb8,
|
|
.cipher = EVP_camellia_192_cfb8,
|
|
},
|
|
{
|
|
.name = LN_camellia_192_ecb,
|
|
.cipher = EVP_camellia_192_ecb,
|
|
},
|
|
{
|
|
.name = LN_camellia_192_ofb128,
|
|
.cipher = EVP_camellia_192_ofb,
|
|
},
|
|
|
|
{
|
|
.name = LN_camellia_256_cbc,
|
|
.cipher = EVP_camellia_256_cbc,
|
|
},
|
|
{
|
|
.name = LN_camellia_256_cfb128,
|
|
.cipher = EVP_camellia_256_cfb128,
|
|
},
|
|
{
|
|
.name = LN_camellia_256_cfb1,
|
|
.cipher = EVP_camellia_256_cfb1,
|
|
},
|
|
{
|
|
.name = LN_camellia_256_cfb8,
|
|
.cipher = EVP_camellia_256_cfb8,
|
|
},
|
|
{
|
|
.name = LN_camellia_256_ecb,
|
|
.cipher = EVP_camellia_256_ecb,
|
|
},
|
|
{
|
|
.name = LN_camellia_256_ofb128,
|
|
.cipher = EVP_camellia_256_ofb,
|
|
},
|
|
|
|
{
|
|
.name = "camellia128",
|
|
.cipher = EVP_camellia_128_cbc,
|
|
.alias = SN_camellia_128_cbc,
|
|
},
|
|
{
|
|
.name = "camellia192",
|
|
.cipher = EVP_camellia_192_cbc,
|
|
.alias = SN_camellia_192_cbc,
|
|
},
|
|
{
|
|
.name = "camellia256",
|
|
.cipher = EVP_camellia_256_cbc,
|
|
.alias = SN_camellia_256_cbc,
|
|
},
|
|
|
|
{
|
|
.name = "cast",
|
|
.cipher = EVP_cast5_cbc,
|
|
.alias = SN_cast5_cbc,
|
|
},
|
|
{
|
|
.name = "cast-cbc",
|
|
.cipher = EVP_cast5_cbc,
|
|
.alias = SN_cast5_cbc,
|
|
},
|
|
|
|
{
|
|
.name = LN_cast5_cbc,
|
|
.cipher = EVP_cast5_cbc,
|
|
},
|
|
{
|
|
.name = LN_cast5_cfb64,
|
|
.cipher = EVP_cast5_cfb,
|
|
},
|
|
{
|
|
.name = LN_cast5_ecb,
|
|
.cipher = EVP_cast5_ecb,
|
|
},
|
|
{
|
|
.name = LN_cast5_ofb64,
|
|
.cipher = EVP_cast5_ofb,
|
|
},
|
|
|
|
{
|
|
.name = LN_chacha20,
|
|
.cipher = EVP_chacha20,
|
|
},
|
|
{
|
|
.name = "chacha20",
|
|
.cipher = EVP_chacha20,
|
|
.alias = LN_chacha20,
|
|
},
|
|
|
|
{
|
|
.name = LN_chacha20_poly1305,
|
|
.cipher = EVP_chacha20_poly1305,
|
|
},
|
|
|
|
{
|
|
.name = "des",
|
|
.cipher = EVP_des_cbc,
|
|
.alias = SN_des_cbc,
|
|
},
|
|
|
|
{
|
|
.name = LN_des_cbc,
|
|
.cipher = EVP_des_cbc,
|
|
},
|
|
{
|
|
.name = LN_des_cfb64,
|
|
.cipher = EVP_des_cfb64,
|
|
},
|
|
{
|
|
.name = LN_des_cfb1,
|
|
.cipher = EVP_des_cfb1,
|
|
},
|
|
{
|
|
.name = LN_des_cfb8,
|
|
.cipher = EVP_des_cfb8,
|
|
},
|
|
{
|
|
.name = LN_des_ecb,
|
|
.cipher = EVP_des_ecb,
|
|
},
|
|
{
|
|
.name = LN_des_ede_ecb,
|
|
.cipher = EVP_des_ede,
|
|
},
|
|
{
|
|
.name = LN_des_ede_cbc,
|
|
.cipher = EVP_des_ede_cbc,
|
|
},
|
|
{
|
|
.name = LN_des_ede_cfb64,
|
|
.cipher = EVP_des_ede_cfb64,
|
|
},
|
|
{
|
|
.name = LN_des_ede_ofb64,
|
|
.cipher = EVP_des_ede_ofb,
|
|
},
|
|
{
|
|
.name = LN_des_ede3_ecb,
|
|
.cipher = EVP_des_ede3_ecb,
|
|
},
|
|
{
|
|
.name = LN_des_ede3_cbc,
|
|
.cipher = EVP_des_ede3_cbc,
|
|
},
|
|
{
|
|
.name = LN_des_ede3_cfb64,
|
|
.cipher = EVP_des_ede3_cfb,
|
|
},
|
|
{
|
|
.name = LN_des_ede3_cfb1,
|
|
.cipher = EVP_des_ede3_cfb1,
|
|
},
|
|
{
|
|
.name = LN_des_ede3_cfb8,
|
|
.cipher = EVP_des_ede3_cfb8,
|
|
},
|
|
{
|
|
.name = LN_des_ede3_ofb64,
|
|
.cipher = EVP_des_ede3_ofb,
|
|
},
|
|
{
|
|
.name = LN_des_ofb64,
|
|
.cipher = EVP_des_ofb,
|
|
},
|
|
|
|
{
|
|
.name = "des3",
|
|
.cipher = EVP_des_ede3_cbc,
|
|
.alias = SN_des_ede3_cbc,
|
|
},
|
|
|
|
{
|
|
.name = "desx",
|
|
.cipher = EVP_desx_cbc,
|
|
.alias = SN_desx_cbc,
|
|
},
|
|
{
|
|
.name = LN_desx_cbc,
|
|
.cipher = EVP_desx_cbc,
|
|
},
|
|
|
|
{
|
|
.name = SN_aes_128_ccm,
|
|
.cipher = EVP_aes_128_ccm,
|
|
},
|
|
{
|
|
.name = SN_aes_128_gcm,
|
|
.cipher = EVP_aes_128_gcm,
|
|
},
|
|
{
|
|
.name = SN_id_aes128_wrap,
|
|
.cipher = EVP_aes_128_wrap,
|
|
},
|
|
|
|
{
|
|
.name = SN_aes_192_ccm,
|
|
.cipher = EVP_aes_192_ccm,
|
|
},
|
|
{
|
|
.name = SN_aes_192_gcm,
|
|
.cipher = EVP_aes_192_gcm,
|
|
},
|
|
{
|
|
.name = SN_id_aes192_wrap,
|
|
.cipher = EVP_aes_192_wrap,
|
|
},
|
|
|
|
{
|
|
.name = SN_aes_256_ccm,
|
|
.cipher = EVP_aes_256_ccm,
|
|
},
|
|
{
|
|
.name = SN_aes_256_gcm,
|
|
.cipher = EVP_aes_256_gcm,
|
|
},
|
|
{
|
|
.name = SN_id_aes256_wrap,
|
|
.cipher = EVP_aes_256_wrap,
|
|
},
|
|
|
|
{
|
|
.name = "idea",
|
|
.cipher = EVP_idea_cbc,
|
|
.alias = SN_idea_cbc,
|
|
},
|
|
|
|
{
|
|
.name = LN_idea_cbc,
|
|
.cipher = EVP_idea_cbc,
|
|
},
|
|
{
|
|
.name = LN_idea_cfb64,
|
|
.cipher = EVP_idea_cfb64,
|
|
},
|
|
{
|
|
.name = LN_idea_ecb,
|
|
.cipher = EVP_idea_ecb,
|
|
},
|
|
{
|
|
.name = LN_idea_ofb64,
|
|
.cipher = EVP_idea_ofb,
|
|
},
|
|
|
|
{
|
|
.name = "rc2",
|
|
.cipher = EVP_rc2_cbc,
|
|
.alias = SN_rc2_cbc,
|
|
},
|
|
|
|
{
|
|
.name = LN_rc2_40_cbc,
|
|
.cipher = EVP_rc2_40_cbc,
|
|
},
|
|
{
|
|
.name = LN_rc2_64_cbc,
|
|
.cipher = EVP_rc2_64_cbc,
|
|
},
|
|
{
|
|
.name = LN_rc2_cbc,
|
|
.cipher = EVP_rc2_cbc,
|
|
},
|
|
{
|
|
.name = LN_rc2_cfb64,
|
|
.cipher = EVP_rc2_cfb64,
|
|
},
|
|
{
|
|
.name = LN_rc2_ecb,
|
|
.cipher = EVP_rc2_ecb,
|
|
},
|
|
{
|
|
.name = LN_rc2_ofb64,
|
|
.cipher = EVP_rc2_ofb,
|
|
},
|
|
|
|
{
|
|
.name = LN_rc4,
|
|
.cipher = EVP_rc4,
|
|
},
|
|
{
|
|
.name = LN_rc4_40,
|
|
.cipher = EVP_rc4_40,
|
|
},
|
|
|
|
{
|
|
.name = "sm4",
|
|
.cipher = EVP_sm4_cbc,
|
|
.alias = SN_sm4_cbc,
|
|
},
|
|
|
|
{
|
|
.name = LN_sm4_cbc,
|
|
.cipher = EVP_sm4_cbc,
|
|
},
|
|
{
|
|
.name = LN_sm4_cfb128,
|
|
.cipher = EVP_sm4_cfb128,
|
|
},
|
|
{
|
|
.name = LN_sm4_ctr,
|
|
.cipher = EVP_sm4_ctr,
|
|
},
|
|
{
|
|
.name = LN_sm4_ecb,
|
|
.cipher = EVP_sm4_ecb,
|
|
},
|
|
{
|
|
.name = LN_sm4_ofb128,
|
|
.cipher = EVP_sm4_ofb,
|
|
},
|
|
};
|
|
|
|
#define N_CIPHER_NAMES (sizeof(cipher_names) / sizeof(cipher_names[0]))
|
|
|
|
/*
|
|
* Keep this table alphabetically sorted by increasing .name.
|
|
* regress/lib/libcrypto/evp/evp_test.c checks that.
|
|
*/
|
|
|
|
static const struct digest_name digest_names[] = {
|
|
{
|
|
.name = SN_dsaWithSHA1,
|
|
.digest = EVP_sha1,
|
|
.alias = SN_sha1,
|
|
},
|
|
|
|
{
|
|
.name = SN_md4,
|
|
.digest = EVP_md4,
|
|
},
|
|
|
|
{
|
|
.name = SN_md5,
|
|
.digest = EVP_md5,
|
|
},
|
|
|
|
{
|
|
.name = SN_md5_sha1,
|
|
.digest = EVP_md5_sha1,
|
|
},
|
|
|
|
{
|
|
.name = SN_ripemd160,
|
|
.digest = EVP_ripemd160,
|
|
},
|
|
|
|
{
|
|
.name = SN_md4WithRSAEncryption,
|
|
.digest = EVP_md4,
|
|
.alias = SN_md4,
|
|
},
|
|
{
|
|
.name = SN_md5WithRSAEncryption,
|
|
.digest = EVP_md5,
|
|
.alias = SN_md5,
|
|
},
|
|
{
|
|
.name = SN_ripemd160WithRSA,
|
|
.digest = EVP_ripemd160,
|
|
.alias = SN_ripemd160,
|
|
},
|
|
{
|
|
.name = SN_sha1WithRSAEncryption,
|
|
.digest = EVP_sha1,
|
|
.alias = SN_sha1,
|
|
},
|
|
{
|
|
.name = SN_sha1WithRSA,
|
|
.digest = EVP_sha1,
|
|
.alias = SN_sha1, /* XXX - alias to SN_sha1WithRSAEncryption? */
|
|
},
|
|
{
|
|
.name = SN_sha224WithRSAEncryption,
|
|
.digest = EVP_sha224,
|
|
.alias = SN_sha224,
|
|
},
|
|
{
|
|
.name = SN_sha256WithRSAEncryption,
|
|
.digest = EVP_sha256,
|
|
.alias = SN_sha256,
|
|
},
|
|
{
|
|
.name = LN_RSA_SHA3_224,
|
|
.digest = EVP_sha3_224,
|
|
.alias = SN_sha3_224,
|
|
},
|
|
{
|
|
.name = LN_RSA_SHA3_256,
|
|
.digest = EVP_sha3_256,
|
|
.alias = SN_sha3_256,
|
|
},
|
|
{
|
|
.name = LN_RSA_SHA3_384,
|
|
.digest = EVP_sha3_384,
|
|
.alias = SN_sha3_384,
|
|
},
|
|
{
|
|
.name = LN_RSA_SHA3_512,
|
|
.digest = EVP_sha3_512,
|
|
.alias = SN_sha3_512,
|
|
},
|
|
{
|
|
.name = SN_sha384WithRSAEncryption,
|
|
.digest = EVP_sha384,
|
|
.alias = SN_sha384,
|
|
},
|
|
{
|
|
.name = SN_sha512WithRSAEncryption,
|
|
.digest = EVP_sha512,
|
|
.alias = SN_sha512,
|
|
},
|
|
{
|
|
.name = SN_sha512_224WithRSAEncryption,
|
|
.digest = EVP_sha512_224,
|
|
.alias = SN_sha512_224,
|
|
},
|
|
{
|
|
.name = SN_sha512_256WithRSAEncryption,
|
|
.digest = EVP_sha512_256,
|
|
.alias = SN_sha512_256,
|
|
},
|
|
{
|
|
.name = SN_sm3WithRSAEncryption,
|
|
.digest = EVP_sm3,
|
|
.alias = SN_sm3,
|
|
},
|
|
|
|
{
|
|
.name = SN_sha1,
|
|
.digest = EVP_sha1,
|
|
},
|
|
{
|
|
.name = SN_sha224,
|
|
.digest = EVP_sha224,
|
|
},
|
|
{
|
|
.name = SN_sha256,
|
|
.digest = EVP_sha256,
|
|
},
|
|
{
|
|
.name = SN_sha3_224,
|
|
.digest = EVP_sha3_224,
|
|
},
|
|
{
|
|
.name = SN_sha3_256,
|
|
.digest = EVP_sha3_256,
|
|
},
|
|
{
|
|
.name = SN_sha3_384,
|
|
.digest = EVP_sha3_384,
|
|
},
|
|
{
|
|
.name = SN_sha3_512,
|
|
.digest = EVP_sha3_512,
|
|
},
|
|
|
|
{
|
|
.name = SN_sha384,
|
|
.digest = EVP_sha384,
|
|
},
|
|
{
|
|
.name = SN_sha512,
|
|
.digest = EVP_sha512,
|
|
},
|
|
{
|
|
.name = SN_sha512_224,
|
|
.digest = EVP_sha512_224,
|
|
},
|
|
{
|
|
.name = SN_sha512_256,
|
|
.digest = EVP_sha512_256,
|
|
},
|
|
|
|
{
|
|
.name = SN_sm3,
|
|
.digest = EVP_sm3,
|
|
},
|
|
|
|
{
|
|
.name = LN_dsaWithSHA1,
|
|
.digest = EVP_sha1,
|
|
.alias = SN_sha1,
|
|
},
|
|
|
|
{
|
|
.name = LN_dsa_with_SHA224,
|
|
.digest = EVP_sha224,
|
|
.alias = SN_sha224,
|
|
},
|
|
{
|
|
.name = LN_dsa_with_SHA256,
|
|
.digest = EVP_sha256,
|
|
.alias = SN_sha256,
|
|
},
|
|
{
|
|
.name = LN_dsa_with_SHA384,
|
|
.digest = EVP_sha384,
|
|
.alias = SN_sha384,
|
|
},
|
|
{
|
|
.name = LN_dsa_with_SHA512,
|
|
.digest = EVP_sha512,
|
|
.alias = SN_sha512,
|
|
},
|
|
|
|
{
|
|
.name = SN_ecdsa_with_SHA1,
|
|
.digest = EVP_sha1,
|
|
.alias = SN_sha1,
|
|
},
|
|
|
|
{
|
|
.name = SN_ecdsa_with_SHA224,
|
|
.digest = EVP_sha224,
|
|
.alias = SN_sha224,
|
|
},
|
|
{
|
|
.name = SN_ecdsa_with_SHA256,
|
|
.digest = EVP_sha256,
|
|
.alias = SN_sha256,
|
|
},
|
|
{
|
|
.name = SN_ecdsa_with_SHA384,
|
|
.digest = EVP_sha384,
|
|
.alias = SN_sha384,
|
|
},
|
|
{
|
|
.name = SN_ecdsa_with_SHA512,
|
|
.digest = EVP_sha512,
|
|
.alias = SN_sha512,
|
|
},
|
|
|
|
{
|
|
.name = SN_dsa_with_SHA224,
|
|
.digest = EVP_sha224,
|
|
.alias = SN_sha224,
|
|
},
|
|
{
|
|
.name = SN_dsa_with_SHA256,
|
|
.digest = EVP_sha256,
|
|
.alias = SN_sha256,
|
|
},
|
|
|
|
{
|
|
.name = SN_dsa_with_SHA3_224,
|
|
.digest = EVP_sha3_224,
|
|
.alias = SN_sha3_224,
|
|
},
|
|
{
|
|
.name = SN_dsa_with_SHA3_256,
|
|
.digest = EVP_sha3_256,
|
|
.alias = SN_sha3_256,
|
|
},
|
|
{
|
|
.name = SN_dsa_with_SHA3_384,
|
|
.digest = EVP_sha3_384,
|
|
.alias = SN_sha3_384,
|
|
},
|
|
{
|
|
.name = SN_dsa_with_SHA3_512,
|
|
.digest = EVP_sha3_512,
|
|
.alias = SN_sha3_512,
|
|
},
|
|
|
|
{
|
|
.name = SN_dsa_with_SHA384,
|
|
.digest = EVP_sha384,
|
|
.alias = SN_sha384,
|
|
},
|
|
{
|
|
.name = SN_dsa_with_SHA512,
|
|
.digest = EVP_sha512,
|
|
.alias = SN_sha512,
|
|
},
|
|
|
|
{
|
|
.name = SN_ecdsa_with_SHA3_224,
|
|
.digest = EVP_sha3_224,
|
|
.alias = SN_sha3_224,
|
|
},
|
|
{
|
|
.name = SN_ecdsa_with_SHA3_256,
|
|
.digest = EVP_sha3_256,
|
|
.alias = SN_sha3_256,
|
|
},
|
|
{
|
|
.name = SN_ecdsa_with_SHA3_384,
|
|
.digest = EVP_sha3_384,
|
|
.alias = SN_sha3_384,
|
|
},
|
|
{
|
|
.name = SN_ecdsa_with_SHA3_512,
|
|
.digest = EVP_sha3_512,
|
|
.alias = SN_sha3_512,
|
|
},
|
|
|
|
{
|
|
.name = SN_RSA_SHA3_224,
|
|
.digest = EVP_sha3_224,
|
|
.alias = SN_sha3_224,
|
|
},
|
|
{
|
|
.name = SN_RSA_SHA3_256,
|
|
.digest = EVP_sha3_256,
|
|
.alias = SN_sha3_256,
|
|
},
|
|
{
|
|
.name = SN_RSA_SHA3_384,
|
|
.digest = EVP_sha3_384,
|
|
.alias = SN_sha3_384,
|
|
},
|
|
{
|
|
.name = SN_RSA_SHA3_512,
|
|
.digest = EVP_sha3_512,
|
|
.alias = SN_sha3_512,
|
|
},
|
|
|
|
{
|
|
.name = LN_md4,
|
|
.digest = EVP_md4,
|
|
},
|
|
{
|
|
.name = LN_md4WithRSAEncryption,
|
|
.digest = EVP_md4,
|
|
.alias = SN_md4,
|
|
},
|
|
|
|
{
|
|
.name = LN_md5,
|
|
.digest = EVP_md5,
|
|
},
|
|
{
|
|
.name = LN_md5_sha1,
|
|
.digest = EVP_md5_sha1,
|
|
},
|
|
{
|
|
.name = LN_md5WithRSAEncryption,
|
|
.digest = EVP_md5,
|
|
.alias = SN_md5,
|
|
},
|
|
|
|
{
|
|
.name = "ripemd",
|
|
.digest = EVP_ripemd160,
|
|
.alias = SN_ripemd160,
|
|
},
|
|
{
|
|
.name = LN_ripemd160,
|
|
.digest = EVP_ripemd160,
|
|
},
|
|
{
|
|
.name = LN_ripemd160WithRSA,
|
|
.digest = EVP_ripemd160,
|
|
.alias = SN_ripemd160,
|
|
},
|
|
{
|
|
.name = "rmd160",
|
|
.digest = EVP_ripemd160,
|
|
.alias = SN_ripemd160,
|
|
},
|
|
|
|
{
|
|
.name = LN_sha1,
|
|
.digest = EVP_sha1,
|
|
},
|
|
{
|
|
.name = LN_sha1WithRSAEncryption,
|
|
.digest = EVP_sha1,
|
|
.alias = SN_sha1,
|
|
},
|
|
|
|
{
|
|
.name = LN_sha224,
|
|
.digest = EVP_sha224,
|
|
},
|
|
{
|
|
.name = LN_sha224WithRSAEncryption,
|
|
.digest = EVP_sha224,
|
|
.alias = SN_sha224,
|
|
},
|
|
{
|
|
.name = LN_sha256,
|
|
.digest = EVP_sha256,
|
|
},
|
|
{
|
|
.name = LN_sha256WithRSAEncryption,
|
|
.digest = EVP_sha256,
|
|
.alias = SN_sha256,
|
|
},
|
|
|
|
{
|
|
.name = LN_sha3_224,
|
|
.digest = EVP_sha3_224,
|
|
},
|
|
{
|
|
.name = LN_sha3_256,
|
|
.digest = EVP_sha3_256,
|
|
},
|
|
{
|
|
.name = LN_sha3_384,
|
|
.digest = EVP_sha3_384,
|
|
},
|
|
{
|
|
.name = LN_sha3_512,
|
|
.digest = EVP_sha3_512,
|
|
},
|
|
|
|
{
|
|
.name = LN_sha384,
|
|
.digest = EVP_sha384,
|
|
},
|
|
{
|
|
.name = LN_sha384WithRSAEncryption,
|
|
.digest = EVP_sha384,
|
|
.alias = SN_sha384,
|
|
},
|
|
{
|
|
.name = LN_sha512,
|
|
.digest = EVP_sha512,
|
|
},
|
|
{
|
|
.name = LN_sha512_224,
|
|
.digest = EVP_sha512_224,
|
|
},
|
|
{
|
|
.name = LN_sha512_224WithRSAEncryption,
|
|
.digest = EVP_sha512_224,
|
|
.alias = SN_sha512_224,
|
|
},
|
|
{
|
|
.name = LN_sha512_256,
|
|
.digest = EVP_sha512_256,
|
|
},
|
|
{
|
|
.name = LN_sha512_256WithRSAEncryption,
|
|
.digest = EVP_sha512_256,
|
|
.alias = SN_sha512_256,
|
|
},
|
|
{
|
|
.name = LN_sha512WithRSAEncryption,
|
|
.digest = EVP_sha512,
|
|
.alias = SN_sha512,
|
|
},
|
|
|
|
{
|
|
.name = LN_sm3,
|
|
.digest = EVP_sm3,
|
|
},
|
|
{
|
|
.name = LN_sm3WithRSAEncryption,
|
|
.digest = EVP_sm3,
|
|
.alias = SN_sm3,
|
|
},
|
|
|
|
{
|
|
.name = "ssl2-md5",
|
|
.digest = EVP_md5,
|
|
.alias = SN_md5,
|
|
},
|
|
{
|
|
.name = "ssl3-md5",
|
|
.digest = EVP_md5,
|
|
.alias = SN_md5,
|
|
},
|
|
|
|
{
|
|
.name = "ssl3-sha1",
|
|
.digest = EVP_sha1,
|
|
.alias = SN_sha1,
|
|
},
|
|
};
|
|
|
|
#define N_DIGEST_NAMES (sizeof(digest_names) / sizeof(digest_names[0]))
|
|
|
|
void
|
|
EVP_CIPHER_do_all_sorted(void (*fn)(const EVP_CIPHER *, const char *,
|
|
const char *, void *), void *arg)
|
|
{
|
|
size_t i;
|
|
|
|
/* Prayer and clean living lets you ignore errors, OpenSSL style. */
|
|
(void)OPENSSL_init_crypto(0, NULL);
|
|
|
|
for (i = 0; i < N_CIPHER_NAMES; i++) {
|
|
const struct cipher_name *cipher = &cipher_names[i];
|
|
const EVP_CIPHER *evp_cipher;
|
|
|
|
if ((evp_cipher = cipher->cipher()) == NULL)
|
|
continue;
|
|
|
|
if (cipher->alias != NULL)
|
|
fn(NULL, cipher->name, cipher->alias, arg);
|
|
else
|
|
fn(evp_cipher, cipher->name, NULL, arg);
|
|
}
|
|
}
|
|
LCRYPTO_ALIAS(EVP_CIPHER_do_all_sorted);
|
|
|
|
void
|
|
EVP_CIPHER_do_all(void (*fn)(const EVP_CIPHER *, const char *, const char *,
|
|
void *), void *arg)
|
|
{
|
|
EVP_CIPHER_do_all_sorted(fn, arg);
|
|
}
|
|
LCRYPTO_ALIAS(EVP_CIPHER_do_all);
|
|
|
|
void
|
|
EVP_MD_do_all_sorted(void (*fn)(const EVP_MD *, const char *, const char *,
|
|
void *), void *arg)
|
|
{
|
|
size_t i;
|
|
|
|
/* Prayer and clean living lets you ignore errors, OpenSSL style. */
|
|
(void)OPENSSL_init_crypto(0, NULL);
|
|
|
|
for (i = 0; i < N_DIGEST_NAMES; i++) {
|
|
const struct digest_name *digest = &digest_names[i];
|
|
const EVP_MD *evp_md;
|
|
|
|
if ((evp_md = digest->digest()) == NULL)
|
|
continue;
|
|
|
|
if (digest->alias != NULL)
|
|
fn(NULL, digest->name, digest->alias, arg);
|
|
else
|
|
fn(evp_md, digest->name, NULL, arg);
|
|
}
|
|
}
|
|
LCRYPTO_ALIAS(EVP_MD_do_all_sorted);
|
|
|
|
void
|
|
EVP_MD_do_all(void (*fn)(const EVP_MD *, const char *, const char *, void *),
|
|
void *arg)
|
|
{
|
|
EVP_MD_do_all_sorted(fn, arg);
|
|
}
|
|
LCRYPTO_ALIAS(EVP_MD_do_all);
|
|
|
|
/*
|
|
* The OBJ_NAME API is completely misnamed. It has little to do with objects
|
|
* and a lot to do with EVP. Therefore we implement a saner replacement for
|
|
* the part of the old madness that we need to keep in the evp directory.
|
|
*/
|
|
|
|
static int
|
|
OBJ_NAME_from_cipher_name(OBJ_NAME *obj_name, const struct cipher_name *cipher)
|
|
{
|
|
const EVP_CIPHER *evp_cipher;
|
|
|
|
if ((evp_cipher = cipher->cipher()) == NULL)
|
|
return 0;
|
|
|
|
obj_name->type = OBJ_NAME_TYPE_CIPHER_METH;
|
|
obj_name->name = cipher->name;
|
|
if (cipher->alias != NULL) {
|
|
obj_name->alias = OBJ_NAME_ALIAS;
|
|
obj_name->data = cipher->alias;
|
|
} else {
|
|
obj_name->alias = 0;
|
|
obj_name->data = evp_cipher;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
static void
|
|
OBJ_NAME_do_all_ciphers(void (*fn)(const OBJ_NAME *, void *), void *arg)
|
|
{
|
|
size_t i;
|
|
|
|
for (i = 0; i < N_CIPHER_NAMES; i++) {
|
|
const struct cipher_name *cipher = &cipher_names[i];
|
|
OBJ_NAME name;
|
|
|
|
if (OBJ_NAME_from_cipher_name(&name, cipher))
|
|
fn(&name, arg);
|
|
}
|
|
}
|
|
|
|
static int
|
|
OBJ_NAME_from_digest_name(OBJ_NAME *obj_name, const struct digest_name *digest)
|
|
{
|
|
const EVP_MD *evp_md;
|
|
|
|
if ((evp_md = digest->digest()) == NULL)
|
|
return 0;
|
|
|
|
obj_name->type = OBJ_NAME_TYPE_MD_METH;
|
|
obj_name->name = digest->name;
|
|
if (digest->alias != NULL) {
|
|
obj_name->alias = OBJ_NAME_ALIAS;
|
|
obj_name->data = digest->alias;
|
|
} else {
|
|
obj_name->alias = 0;
|
|
obj_name->data = evp_md;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
static void
|
|
OBJ_NAME_do_all_digests(void (*fn)(const OBJ_NAME *, void *), void *arg)
|
|
{
|
|
size_t i;
|
|
|
|
for (i = 0; i < N_DIGEST_NAMES; i++) {
|
|
const struct digest_name *digest = &digest_names[i];
|
|
OBJ_NAME name;
|
|
|
|
if (OBJ_NAME_from_digest_name(&name, digest))
|
|
fn(&name, arg);
|
|
}
|
|
}
|
|
|
|
void
|
|
OBJ_NAME_do_all_sorted(int type, void (*fn)(const OBJ_NAME *, void *), void *arg)
|
|
{
|
|
/* Prayer and clean living lets you ignore errors, OpenSSL style. */
|
|
(void)OPENSSL_init_crypto(0, NULL);
|
|
|
|
if (type == OBJ_NAME_TYPE_CIPHER_METH)
|
|
OBJ_NAME_do_all_ciphers(fn, arg);
|
|
if (type == OBJ_NAME_TYPE_MD_METH)
|
|
OBJ_NAME_do_all_digests(fn, arg);
|
|
}
|
|
LCRYPTO_ALIAS(OBJ_NAME_do_all_sorted);
|
|
|
|
void
|
|
OBJ_NAME_do_all(int type, void (*fn)(const OBJ_NAME *, void *), void *arg)
|
|
{
|
|
OBJ_NAME_do_all_sorted(type, fn, arg);
|
|
}
|
|
LCRYPTO_ALIAS(OBJ_NAME_do_all);
|
|
|
|
static int
|
|
cipher_cmp(const void *a, const void *b)
|
|
{
|
|
return strcmp(a, ((const struct cipher_name *)b)->name);
|
|
}
|
|
|
|
const EVP_CIPHER *
|
|
EVP_get_cipherbyname(const char *name)
|
|
{
|
|
const struct cipher_name *cipher;
|
|
|
|
if (!OPENSSL_init_crypto(0, NULL))
|
|
return NULL;
|
|
|
|
if (name == NULL)
|
|
return NULL;
|
|
|
|
if ((cipher = bsearch(name, cipher_names, N_CIPHER_NAMES,
|
|
sizeof(*cipher), cipher_cmp)) == NULL)
|
|
return NULL;
|
|
|
|
return cipher->cipher();
|
|
}
|
|
LCRYPTO_ALIAS(EVP_get_cipherbyname);
|
|
|
|
static int
|
|
digest_cmp(const void *a, const void *b)
|
|
{
|
|
return strcmp(a, ((const struct digest_name *)b)->name);
|
|
}
|
|
|
|
const EVP_MD *
|
|
EVP_get_digestbyname(const char *name)
|
|
{
|
|
const struct digest_name *digest;
|
|
|
|
if (!OPENSSL_init_crypto(0, NULL))
|
|
return NULL;
|
|
|
|
if (name == NULL)
|
|
return NULL;
|
|
|
|
if ((digest = bsearch(name, digest_names, N_DIGEST_NAMES,
|
|
sizeof(*digest), digest_cmp)) == NULL)
|
|
return NULL;
|
|
|
|
return digest->digest();
|
|
}
|
|
LCRYPTO_ALIAS(EVP_get_digestbyname);
|
|
|
|
/*
|
|
* XXX - this is here because most of its job was to clean up the dynamic
|
|
* tables of ciphers and digests. If we get an evp_lib.c again, it should
|
|
* probably move there.
|
|
*/
|
|
|
|
void
|
|
EVP_cleanup(void)
|
|
{
|
|
}
|
|
LCRYPTO_ALIAS(EVP_cleanup);
|