From 5fe736e5fc29353706c2c1a5ae8bd97f3d7a35e9 Mon Sep 17 00:00:00 2001 From: "Dr. Stephen Henson" Date: Mon, 23 Mar 2015 18:42:42 +0000 Subject: [PATCH] Move some ASN.1 internals to asn1_int.h Move ASN.1 internals used across multiple directories into new internal header file asn1_int.h remove crypto/Makefile hack which allowed other directories to include "asn1_locl.h" Reviewed-by: Matt Caswell --- crypto/Makefile | 2 +- crypto/asn1/a_sign.c | 2 +- crypto/asn1/a_verify.c | 2 +- crypto/asn1/ameth_lib.c | 2 +- crypto/asn1/asn1_locl.h | 45 ------------- crypto/asn1/d2i_pr.c | 2 +- crypto/asn1/i2d_pr.c | 2 +- crypto/asn1/t_x509.c | 2 +- crypto/asn1/x_pubkey.c | 2 +- crypto/cmac/cm_ameth.c | 2 +- crypto/cms/cms_env.c | 2 +- crypto/cms/cms_kari.c | 2 +- crypto/cms/cms_pwri.c | 2 +- crypto/cms/cms_sd.c | 2 +- crypto/cms/cms_smime.c | 2 +- crypto/dh/dh_ameth.c | 2 +- crypto/dsa/dsa_ameth.c | 2 +- crypto/ec/ec_ameth.c | 2 +- crypto/engine/tb_asnmth.c | 2 +- crypto/evp/evp_pkey.c | 2 +- crypto/evp/p_lib.c | 2 +- crypto/evp/pmeth_lib.c | 2 +- crypto/hmac/hm_ameth.c | 2 +- crypto/include/internal/asn1_int.h | 105 +++++++++++++++++++++++++++++ crypto/pem/pem_lib.c | 2 +- crypto/pem/pem_pkey.c | 2 +- crypto/pkcs7/pk7_lib.c | 2 +- crypto/rsa/rsa_ameth.c | 2 +- 28 files changed, 131 insertions(+), 71 deletions(-) create mode 100644 crypto/include/internal/asn1_int.h diff --git a/crypto/Makefile b/crypto/Makefile index 6e1c12945e..819b1cc8b3 100644 --- a/crypto/Makefile +++ b/crypto/Makefile @@ -7,7 +7,7 @@ TOP= .. CC= cc INCLUDE= -I. -I$(TOP) -I../include $(ZLIB_INCLUDE) # INCLUDES targets sudbirs! -INCLUDES= -I.. -I../.. -I../modes -I../asn1 -I../evp -I../include -I../../include $(ZLIB_INCLUDE) +INCLUDES= -I.. -I../.. -I../modes -I../evp -I../include -I../../include $(ZLIB_INCLUDE) CFLAG= -g MAKEDEPPROG= makedepend MAKEDEPEND= $(TOP)/util/domd $(TOP) -MD $(MAKEDEPPROG) diff --git a/crypto/asn1/a_sign.c b/crypto/asn1/a_sign.c index 51c6a0c34d..9fe6665fbc 100644 --- a/crypto/asn1/a_sign.c +++ b/crypto/asn1/a_sign.c @@ -123,7 +123,7 @@ #include #include #include -#include "asn1_locl.h" +#include "internal/asn1_int.h" #ifndef NO_ASN1_OLD diff --git a/crypto/asn1/a_verify.c b/crypto/asn1/a_verify.c index e242d834df..6023b148f0 100644 --- a/crypto/asn1/a_verify.c +++ b/crypto/asn1/a_verify.c @@ -70,7 +70,7 @@ #include #include #include -#include "asn1_locl.h" +#include "internal/asn1_int.h" #ifndef NO_ASN1_OLD diff --git a/crypto/asn1/ameth_lib.c b/crypto/asn1/ameth_lib.c index 67353e06db..5c7d6bb207 100644 --- a/crypto/asn1/ameth_lib.c +++ b/crypto/asn1/ameth_lib.c @@ -63,7 +63,7 @@ #ifndef OPENSSL_NO_ENGINE # include #endif -#include "asn1_locl.h" +#include "internal/asn1_int.h" extern const EVP_PKEY_ASN1_METHOD rsa_asn1_meths[]; extern const EVP_PKEY_ASN1_METHOD dsa_asn1_meths[]; diff --git a/crypto/asn1/asn1_locl.h b/crypto/asn1/asn1_locl.h index 211380269b..a7569e7387 100644 --- a/crypto/asn1/asn1_locl.h +++ b/crypto/asn1/asn1_locl.h @@ -97,51 +97,6 @@ struct asn1_sctx_st { void *app_data; } /* ASN1_SCTX */ ; -/* ASN1 public key method structure */ - -struct evp_pkey_asn1_method_st { - int pkey_id; - int pkey_base_id; - unsigned long pkey_flags; - char *pem_str; - char *info; - int (*pub_decode) (EVP_PKEY *pk, X509_PUBKEY *pub); - int (*pub_encode) (X509_PUBKEY *pub, const EVP_PKEY *pk); - int (*pub_cmp) (const EVP_PKEY *a, const EVP_PKEY *b); - int (*pub_print) (BIO *out, const EVP_PKEY *pkey, int indent, - ASN1_PCTX *pctx); - int (*priv_decode) (EVP_PKEY *pk, PKCS8_PRIV_KEY_INFO *p8inf); - int (*priv_encode) (PKCS8_PRIV_KEY_INFO *p8, const EVP_PKEY *pk); - int (*priv_print) (BIO *out, const EVP_PKEY *pkey, int indent, - ASN1_PCTX *pctx); - int (*pkey_size) (const EVP_PKEY *pk); - int (*pkey_bits) (const EVP_PKEY *pk); - int (*pkey_security_bits) (const EVP_PKEY *pk); - int (*param_decode) (EVP_PKEY *pkey, - const unsigned char **pder, int derlen); - int (*param_encode) (const EVP_PKEY *pkey, unsigned char **pder); - int (*param_missing) (const EVP_PKEY *pk); - int (*param_copy) (EVP_PKEY *to, const EVP_PKEY *from); - int (*param_cmp) (const EVP_PKEY *a, const EVP_PKEY *b); - int (*param_print) (BIO *out, const EVP_PKEY *pkey, int indent, - ASN1_PCTX *pctx); - int (*sig_print) (BIO *out, - const X509_ALGOR *sigalg, const ASN1_STRING *sig, - int indent, ASN1_PCTX *pctx); - void (*pkey_free) (EVP_PKEY *pkey); - int (*pkey_ctrl) (EVP_PKEY *pkey, int op, long arg1, void *arg2); - /* Legacy functions for old PEM */ - int (*old_priv_decode) (EVP_PKEY *pkey, - const unsigned char **pder, int derlen); - int (*old_priv_encode) (const EVP_PKEY *pkey, unsigned char **pder); - /* Custom ASN1 signature verification */ - int (*item_verify) (EVP_MD_CTX *ctx, const ASN1_ITEM *it, void *asn, - X509_ALGOR *a, ASN1_BIT_STRING *sig, EVP_PKEY *pkey); - int (*item_sign) (EVP_MD_CTX *ctx, const ASN1_ITEM *it, void *asn, - X509_ALGOR *alg1, X509_ALGOR *alg2, - ASN1_BIT_STRING *sig); -} /* EVP_PKEY_ASN1_METHOD */ ; - /* * Method to handle CRL access. In general a CRL could be very large (several * Mb) and can consume large amounts of resources if stored in memory by diff --git a/crypto/asn1/d2i_pr.c b/crypto/asn1/d2i_pr.c index c96da091d3..5f1a96d808 100644 --- a/crypto/asn1/d2i_pr.c +++ b/crypto/asn1/d2i_pr.c @@ -66,7 +66,7 @@ #endif #include #include -#include "asn1_locl.h" +#include "internal/asn1_int.h" EVP_PKEY *d2i_PrivateKey(int type, EVP_PKEY **a, const unsigned char **pp, long length) diff --git a/crypto/asn1/i2d_pr.c b/crypto/asn1/i2d_pr.c index 4d338ac55a..2a6aa19c07 100644 --- a/crypto/asn1/i2d_pr.c +++ b/crypto/asn1/i2d_pr.c @@ -60,7 +60,7 @@ #include "cryptlib.h" #include #include -#include "asn1_locl.h" +#include "internal/asn1_int.h" int i2d_PrivateKey(EVP_PKEY *a, unsigned char **pp) { diff --git a/crypto/asn1/t_x509.c b/crypto/asn1/t_x509.c index 667db2625a..e97222021f 100644 --- a/crypto/asn1/t_x509.c +++ b/crypto/asn1/t_x509.c @@ -72,7 +72,7 @@ #include #include #include -#include "asn1_locl.h" +#include "internal/asn1_int.h" #ifndef OPENSSL_NO_STDIO int X509_print_fp(FILE *fp, X509 *x) diff --git a/crypto/asn1/x_pubkey.c b/crypto/asn1/x_pubkey.c index 4b682018c2..cefaf3ac40 100644 --- a/crypto/asn1/x_pubkey.c +++ b/crypto/asn1/x_pubkey.c @@ -60,7 +60,7 @@ #include "cryptlib.h" #include #include -#include "asn1_locl.h" +#include "internal/asn1_int.h" #ifndef OPENSSL_NO_RSA # include #endif diff --git a/crypto/cmac/cm_ameth.c b/crypto/cmac/cm_ameth.c index 0b6850ed1b..98634c99e9 100644 --- a/crypto/cmac/cm_ameth.c +++ b/crypto/cmac/cm_ameth.c @@ -55,7 +55,7 @@ #include "cryptlib.h" #include #include -#include "asn1_locl.h" +#include "internal/asn1_int.h" /* * CMAC "ASN1" method. This is just here to indicate the maximum CMAC output diff --git a/crypto/cms/cms_env.c b/crypto/cms/cms_env.c index 624c3f268f..d1252f8d87 100644 --- a/crypto/cms/cms_env.c +++ b/crypto/cms/cms_env.c @@ -61,7 +61,7 @@ #include #include #include "cms_lcl.h" -#include "asn1_locl.h" +#include "internal/asn1_int.h" /* CMS EnvelopedData Utilities */ diff --git a/crypto/cms/cms_kari.c b/crypto/cms/cms_kari.c index f8a6cbadb0..196b5c60f1 100644 --- a/crypto/cms/cms_kari.c +++ b/crypto/cms/cms_kari.c @@ -61,7 +61,7 @@ #include #include #include "cms_lcl.h" -#include "asn1_locl.h" +#include "internal/asn1_int.h" DECLARE_ASN1_ITEM(CMS_KeyAgreeRecipientInfo) DECLARE_ASN1_ITEM(CMS_RecipientEncryptedKey) diff --git a/crypto/cms/cms_pwri.c b/crypto/cms/cms_pwri.c index 6729930920..dd5f636145 100644 --- a/crypto/cms/cms_pwri.c +++ b/crypto/cms/cms_pwri.c @@ -61,7 +61,7 @@ #include #include #include "cms_lcl.h" -#include "asn1_locl.h" +#include "internal/asn1_int.h" int CMS_RecipientInfo_set0_password(CMS_RecipientInfo *ri, unsigned char *pass, ossl_ssize_t passlen) diff --git a/crypto/cms/cms_sd.c b/crypto/cms/cms_sd.c index a936ded188..b8ed1a1bea 100644 --- a/crypto/cms/cms_sd.c +++ b/crypto/cms/cms_sd.c @@ -60,7 +60,7 @@ #include #include #include "cms_lcl.h" -#include "asn1_locl.h" +#include "internal/asn1_int.h" /* CMS SignedData Utilities */ diff --git a/crypto/cms/cms_smime.c b/crypto/cms/cms_smime.c index acf5c58011..6f6f20d63a 100644 --- a/crypto/cms/cms_smime.c +++ b/crypto/cms/cms_smime.c @@ -59,7 +59,7 @@ #include #include #include "cms_lcl.h" -#include "asn1_locl.h" +#include "internal/asn1_int.h" static BIO *cms_get_text_bio(BIO *out, unsigned int flags) { diff --git a/crypto/dh/dh_ameth.c b/crypto/dh/dh_ameth.c index e7d56f1a89..17027c544f 100644 --- a/crypto/dh/dh_ameth.c +++ b/crypto/dh/dh_ameth.c @@ -62,7 +62,7 @@ #include #include #include -#include "asn1_locl.h" +#include "internal/asn1_int.h" #ifndef OPENSSL_NO_CMS # include #endif diff --git a/crypto/dsa/dsa_ameth.c b/crypto/dsa/dsa_ameth.c index 425144ac1c..61a9d0fc5e 100644 --- a/crypto/dsa/dsa_ameth.c +++ b/crypto/dsa/dsa_ameth.c @@ -65,7 +65,7 @@ #ifndef OPENSSL_NO_CMS # include #endif -#include "asn1_locl.h" +#include "internal/asn1_int.h" static int dsa_pub_decode(EVP_PKEY *pkey, X509_PUBKEY *pubkey) { diff --git a/crypto/ec/ec_ameth.c b/crypto/ec/ec_ameth.c index bce0b16098..de56c89498 100644 --- a/crypto/ec/ec_ameth.c +++ b/crypto/ec/ec_ameth.c @@ -65,7 +65,7 @@ # include #endif #include -#include "asn1_locl.h" +#include "internal/asn1_int.h" static int ecdh_cms_decrypt(CMS_RecipientInfo *ri); static int ecdh_cms_encrypt(CMS_RecipientInfo *ri); diff --git a/crypto/engine/tb_asnmth.c b/crypto/engine/tb_asnmth.c index a1a9b88c43..4685fcf2ad 100644 --- a/crypto/engine/tb_asnmth.c +++ b/crypto/engine/tb_asnmth.c @@ -53,8 +53,8 @@ */ #include "eng_int.h" -#include "asn1_locl.h" #include +#include "internal/asn1_int.h" /* * If this symbol is defined then ENGINE_get_pkey_asn1_meth_engine(), the diff --git a/crypto/evp/evp_pkey.c b/crypto/evp/evp_pkey.c index 52c9a8690f..7e64e26230 100644 --- a/crypto/evp/evp_pkey.c +++ b/crypto/evp/evp_pkey.c @@ -62,7 +62,7 @@ #include "cryptlib.h" #include #include -#include "asn1_locl.h" +#include "internal/asn1_int.h" /* Extract a private key from a PKCS8 structure */ diff --git a/crypto/evp/p_lib.c b/crypto/evp/p_lib.c index 1f98d71677..604faf2c6b 100644 --- a/crypto/evp/p_lib.c +++ b/crypto/evp/p_lib.c @@ -78,7 +78,7 @@ # include #endif -#include "asn1_locl.h" +#include "internal/asn1_int.h" static void EVP_PKEY_free_it(EVP_PKEY *x); diff --git a/crypto/evp/pmeth_lib.c b/crypto/evp/pmeth_lib.c index 9f81d10021..8aaa822696 100644 --- a/crypto/evp/pmeth_lib.c +++ b/crypto/evp/pmeth_lib.c @@ -65,7 +65,7 @@ #ifndef OPENSSL_NO_ENGINE # include #endif -#include "asn1_locl.h" +#include "internal/asn1_int.h" #include "evp_locl.h" typedef int sk_cmp_fn_type(const char *const *a, const char *const *b); diff --git a/crypto/hmac/hm_ameth.c b/crypto/hmac/hm_ameth.c index f72d668f3d..1b0f3b97c5 100644 --- a/crypto/hmac/hm_ameth.c +++ b/crypto/hmac/hm_ameth.c @@ -59,7 +59,7 @@ #include #include "cryptlib.h" #include -#include "asn1_locl.h" +#include "internal/asn1_int.h" #define HMAC_TEST_PRIVATE_KEY_FORMAT diff --git a/crypto/include/internal/asn1_int.h b/crypto/include/internal/asn1_int.h new file mode 100644 index 0000000000..58759bee6c --- /dev/null +++ b/crypto/include/internal/asn1_int.h @@ -0,0 +1,105 @@ +/* asn1_int.h */ +/* + * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project + * 2015. + */ +/* ==================================================================== + * Copyright (c) 2015 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * licensing@OpenSSL.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ + +/* Internal ASN1 structures and functions: not for application use */ + +/* ASN1 public key method structure */ + +struct evp_pkey_asn1_method_st { + int pkey_id; + int pkey_base_id; + unsigned long pkey_flags; + char *pem_str; + char *info; + int (*pub_decode) (EVP_PKEY *pk, X509_PUBKEY *pub); + int (*pub_encode) (X509_PUBKEY *pub, const EVP_PKEY *pk); + int (*pub_cmp) (const EVP_PKEY *a, const EVP_PKEY *b); + int (*pub_print) (BIO *out, const EVP_PKEY *pkey, int indent, + ASN1_PCTX *pctx); + int (*priv_decode) (EVP_PKEY *pk, PKCS8_PRIV_KEY_INFO *p8inf); + int (*priv_encode) (PKCS8_PRIV_KEY_INFO *p8, const EVP_PKEY *pk); + int (*priv_print) (BIO *out, const EVP_PKEY *pkey, int indent, + ASN1_PCTX *pctx); + int (*pkey_size) (const EVP_PKEY *pk); + int (*pkey_bits) (const EVP_PKEY *pk); + int (*pkey_security_bits) (const EVP_PKEY *pk); + int (*param_decode) (EVP_PKEY *pkey, + const unsigned char **pder, int derlen); + int (*param_encode) (const EVP_PKEY *pkey, unsigned char **pder); + int (*param_missing) (const EVP_PKEY *pk); + int (*param_copy) (EVP_PKEY *to, const EVP_PKEY *from); + int (*param_cmp) (const EVP_PKEY *a, const EVP_PKEY *b); + int (*param_print) (BIO *out, const EVP_PKEY *pkey, int indent, + ASN1_PCTX *pctx); + int (*sig_print) (BIO *out, + const X509_ALGOR *sigalg, const ASN1_STRING *sig, + int indent, ASN1_PCTX *pctx); + void (*pkey_free) (EVP_PKEY *pkey); + int (*pkey_ctrl) (EVP_PKEY *pkey, int op, long arg1, void *arg2); + /* Legacy functions for old PEM */ + int (*old_priv_decode) (EVP_PKEY *pkey, + const unsigned char **pder, int derlen); + int (*old_priv_encode) (const EVP_PKEY *pkey, unsigned char **pder); + /* Custom ASN1 signature verification */ + int (*item_verify) (EVP_MD_CTX *ctx, const ASN1_ITEM *it, void *asn, + X509_ALGOR *a, ASN1_BIT_STRING *sig, EVP_PKEY *pkey); + int (*item_sign) (EVP_MD_CTX *ctx, const ASN1_ITEM *it, void *asn, + X509_ALGOR *alg1, X509_ALGOR *alg2, + ASN1_BIT_STRING *sig); +} /* EVP_PKEY_ASN1_METHOD */ ; diff --git a/crypto/pem/pem_lib.c b/crypto/pem/pem_lib.c index 4d4e886496..410c2b2b95 100644 --- a/crypto/pem/pem_lib.c +++ b/crypto/pem/pem_lib.c @@ -66,7 +66,7 @@ #include #include #include -#include "asn1_locl.h" +#include "internal/asn1_int.h" #ifndef OPENSSL_NO_DES # include #endif diff --git a/crypto/pem/pem_pkey.c b/crypto/pem/pem_pkey.c index 25b1095a47..fd7e8b0376 100644 --- a/crypto/pem/pem_pkey.c +++ b/crypto/pem/pem_pkey.c @@ -71,7 +71,7 @@ #ifndef OPENSSL_NO_DH # include #endif -#include "asn1_locl.h" +#include "internal/asn1_int.h" int pem_check_suffix(const char *pem_str, const char *suffix); diff --git a/crypto/pkcs7/pk7_lib.c b/crypto/pkcs7/pk7_lib.c index 511ae8cb17..6409d2867c 100644 --- a/crypto/pkcs7/pk7_lib.c +++ b/crypto/pkcs7/pk7_lib.c @@ -60,7 +60,7 @@ #include "cryptlib.h" #include #include -#include "asn1_locl.h" +#include "internal/asn1_int.h" long PKCS7_ctrl(PKCS7 *p7, int cmd, long larg, char *parg) { diff --git a/crypto/rsa/rsa_ameth.c b/crypto/rsa/rsa_ameth.c index 071dbb8d68..46b0fdc1c5 100644 --- a/crypto/rsa/rsa_ameth.c +++ b/crypto/rsa/rsa_ameth.c @@ -66,7 +66,7 @@ #ifndef OPENSSL_NO_CMS # include #endif -#include "asn1_locl.h" +#include "internal/asn1_int.h" static int rsa_cms_sign(CMS_SignerInfo *si); static int rsa_cms_verify(CMS_SignerInfo *si); -- 2.25.1