From: Richard Levitte Date: Fri, 2 Mar 2001 10:38:19 +0000 (+0000) Subject: Introduce the possibility to access global variables through X-Git-Tag: OpenSSL_0_9_6a-beta2~17^2~102 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=62dc5aad063f50fa75fdae66c4247c925d4b3c5d;p=oweals%2Fopenssl.git Introduce the possibility to access global variables through functions on platform were that's the best way to handle exporting global variables in shared libraries. To enable this functionality, one must configure with "EXPORT_VAR_AS_FN" or defined the C macro "OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter is normally done by Configure or something similar). To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL in the source file (foo.c) like this: OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1; OPENSSL_IMPLEMENT_GLOBAL(double,bar); To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL and OPENSSL_GLOBAL_REF in the header file (foo.h) like this: OPENSSL_DECLARE_GLOBAL(int,foo); #define foo OPENSSL_GLOBAL_REF(foo) OPENSSL_DECLARE_GLOBAL(double,bar); #define bar OPENSSL_GLOBAL_REF(bar) The #defines are very important, and therefore so is including the header file everywere where the defined globals are used. The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition of ASN.1 items, but that structure is a bt different. The largest change is in util/mkdef.pl which has been enhanced with better and easier to understand logic to choose which symbols should go into the Windows .def files as well as a number of fixes and code cleanup (among others, algorithm keywords are now sorted lexicographically to avoid constant rewrites). --- diff --git a/CHANGES b/CHANGES index 3c45bc7f2b..18c984c5c2 100644 --- a/CHANGES +++ b/CHANGES @@ -3,6 +3,40 @@ Changes between 0.9.6 and 0.9.7 [xx XXX 2000] + *) Introduce the possibility to access global variables through + functions on platform were that's the best way to handle exporting + global variables in shared libraries. To enable this functionality, + one must configure with "EXPORT_VAR_AS_FN" or defined the C macro + "OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter + is normally done by Configure or something similar). + + To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL + in the source file (foo.c) like this: + + OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1; + OPENSSL_IMPLEMENT_GLOBAL(double,bar); + + To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL + and OPENSSL_GLOBAL_REF in the header file (foo.h) like this: + + OPENSSL_DECLARE_GLOBAL(int,foo); + #define foo OPENSSL_GLOBAL_REF(foo) + OPENSSL_DECLARE_GLOBAL(double,bar); + #define bar OPENSSL_GLOBAL_REF(bar) + + The #defines are very important, and therefore so is including the + header file everywere where the defined globals are used. + + The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition + of ASN.1 items, but that structure is a bt different. + + The largest change is in util/mkdef.pl which has been enhanced with + better and easier to understand logic to choose which symbols should + go into the Windows .def files as well as a number of fixes and code + cleanup (among others, algorithm keywords are now sorted + lexicographically to avoid constant rewrites). + [Richard Levitte] + *) In copy_email() check for >= 0 as a return value for X509_NAME_get_index_by_NID() since 0 is a valid index. [Steve Henson reported by Massimiliano Pala ] diff --git a/Configure b/Configure index 5c69e89f0a..cd6afd8bab 100755 --- a/Configure +++ b/Configure @@ -968,6 +968,7 @@ my $rc4_chunk=0; my $bf_ptr=0; my @type=("char","short","int","long"); my ($b64l,$b64,$b32,$b16,$b8)=(0,0,1,0,0); +my $export_var_as_fn=0; my $des_int; @@ -997,6 +998,7 @@ foreach (sort split(/\s+/,$bn_ops)) ($b64l,$b64,$b32,$b16,$b8)=(0,0,1,0,0) if /THIRTY_TWO_BIT/; ($b64l,$b64,$b32,$b16,$b8)=(0,0,0,1,0) if /SIXTEEN_BIT/; ($b64l,$b64,$b32,$b16,$b8)=(0,0,0,0,1) if /EIGHT_BIT/; + $export_var_as_fn=1 if /EXPORT_VAR_AS_FN/; } open(IN,') { if (/^#define\s+OPENSSLDIR/) { print OUT "#define OPENSSLDIR \"$openssldir\"\n"; } + elsif (/^#((define)|(undef))\s+OPENSSL_EXPORT_VAR_AS_FUNCTION/) + { printf OUT "#undef OPENSSL_EXPORT_VAR_AS_FUNCTION\n" + if $export_var_as_fn; + printf OUT "#%s OPENSSL_EXPORT_VAR_AS_FUNCTION\n", + ($export_var_as_fn)?"define":"undef"; } elsif (/^#define\s+OPENSSL_UNISTD/) { $unistd = "" if $unistd eq ""; diff --git a/crypto/asn1/asn1.h b/crypto/asn1/asn1.h index a3b992ff93..ae92ad9954 100644 --- a/crypto/asn1/asn1.h +++ b/crypto/asn1/asn1.h @@ -357,7 +357,7 @@ typedef struct ASN1_VALUE_st ASN1_VALUE; * */ -#ifndef ASN1_ITEM_FUNCTIONS +#ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION /* ASN1_ITEM pointer exported type */ typedef const ASN1_ITEM ASN1_ITEM_EXP; diff --git a/crypto/asn1/asn1t.h b/crypto/asn1/asn1t.h index 7d01df0674..6e1bf87e5c 100644 --- a/crypto/asn1/asn1t.h +++ b/crypto/asn1/asn1t.h @@ -74,7 +74,7 @@ extern "C" { #endif -#ifndef ASN1_ITEM_FUNCTIONS +#ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION /* Macro to obtain ASN1_ADB pointer from a type (only used internally) */ #define ASN1_ADB_ptr(iptr) ((const ASN1_ADB *)(iptr)) @@ -287,7 +287,7 @@ extern "C" { /* Any defined by macros: the field used is in the table itself */ -#ifndef ASN1_ITEM_FUNCTIONS +#ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION #define ASN1_ADB_OBJECT(tblname) { ASN1_TFLG_ADB_OID, -1, 0, #tblname, (const ASN1_ITEM *)&(tblname##_adb) } #define ASN1_ADB_INTEGER(tblname) { ASN1_TFLG_ADB_INT, -1, 0, #tblname, (const ASN1_ITEM *)&(tblname##_adb) } #else @@ -358,7 +358,7 @@ extern "C" { #define ASN1_ADB(name) \ const static ASN1_ADB_TABLE name##_adbtbl[] -#ifndef ASN1_ITEM_FUNCTIONS +#ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION #define ASN1_ADB_END(name, flags, field, app_table, def, none) \ ;\ diff --git a/crypto/des/des.h b/crypto/des/des.h index 5fa6aef27b..dc627189b4 100644 --- a/crypto/des/des.h +++ b/crypto/des/des.h @@ -116,8 +116,10 @@ typedef struct des_ks_struct #define des_ede2_ofb64_encrypt(i,o,l,k1,k2,iv,n) \ des_ede3_ofb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n)) -OPENSSL_EXTERN int des_check_key; /* defaults to false */ -OPENSSL_EXTERN int des_rw_mode; /* defaults to DES_PCBC_MODE */ +OPENSSL_DECLARE_GLOBAL(int,des_check_key); /* defaults to false */ +#define des_check_key OPENSSL_GLOBAL_REF(des_check_key) +OPENSSL_DECLARE_GLOBAL(int,des_rw_mode); /* defaults to DES_PCBC_MODE */ +#define des_rw_mode OPENSSL_GLOBAL_REF(des_rw_mode) const char *des_options(void); void des_ecb3_encrypt(const_des_cblock *input, des_cblock *output, diff --git a/crypto/des/enc_read.c b/crypto/des/enc_read.c index af2d9177d2..e8a5763abf 100644 --- a/crypto/des/enc_read.c +++ b/crypto/des/enc_read.c @@ -63,7 +63,7 @@ /* This has some uglies in it but it works - even over sockets. */ /*extern int errno;*/ -OPENSSL_GLOBAL int des_rw_mode=DES_PCBC_MODE; +OPENSSL_IMPLEMENT_GLOBAL(int,des_rw_mode)=DES_PCBC_MODE; /* diff --git a/crypto/des/set_key.c b/crypto/des/set_key.c index 6df3ba9a64..0dc79c9461 100644 --- a/crypto/des/set_key.c +++ b/crypto/des/set_key.c @@ -65,7 +65,7 @@ */ #include "des_locl.h" -OPENSSL_GLOBAL int des_check_key=0; +OPENSSL_IMPLEMENT_GLOBAL(int,des_check_key); /* defaults to false */ static const unsigned char odd_parity[256]={ 1, 1, 2, 2, 4, 4, 7, 7, 8, 8, 11, 11, 13, 13, 14, 14, diff --git a/crypto/opensslconf.h.in b/crypto/opensslconf.h.in index 5da5911228..a06861b96e 100644 --- a/crypto/opensslconf.h.in +++ b/crypto/opensslconf.h.in @@ -12,6 +12,8 @@ #undef OPENSSL_UNISTD #define OPENSSL_UNISTD +#undef OPENSSL_EXPORT_VAR_AS_FUNCTIONS + #if defined(HEADER_IDEA_H) && !defined(IDEA_INT) #define IDEA_INT unsigned int #endif diff --git a/e_os2.h b/e_os2.h index be20eac623..f279fa1d93 100644 --- a/e_os2.h +++ b/e_os2.h @@ -200,6 +200,28 @@ extern "C" { #endif #define OPENSSL_EXTERN OPENSSL_IMPORT +/* Macros to allow global variables to be reached through function calls when + required (if a shared library version requvres it, for example. + The way it's done allows definitions like this: + + // in foobar.c + OPENSSL_IMPLEMENT_GLOBAL(int,foobar) = 0; + // in foobar.h + OPENSSL_DECLARE_GLOBAL(int,foobar); + #define foobar OPENSSL_GLOBAL_REF(foobar) +*/ +#ifdef OPENSSL_EXPORT_VAR_AS_FUNCTION +# define OPENSSL_IMPLEMENT_GLOBAL(type,name) extern static type _hide_##name; \ + type *_shadow_##name(void) { static type local_var; return &local_var; } \ + static type _hide_##name +# define OPENSSL_DECLARE_GLOBAL(type,name) type *_shadow_##name(void) +# define OPENSSL_GLOBAL_REF(name) (*(_shadow_##name())) +#else +# define OPENSSL_IMPLEMENT_GLOBAL(type,name) OPENSSL_GLOBAL type _shadow_##name +# define OPENSSL_DECLARE_GLOBAL(type,name) OPENSSL_EXPORT type _shadow_##name +# define OPENSSL_GLOBAL_REF(name) _shadow_##name +#endif + #ifdef __cplusplus } #endif diff --git a/makevms.com b/makevms.com index 194e485732..579fcae5a3 100755 --- a/makevms.com +++ b/makevms.com @@ -285,6 +285,8 @@ $ WRITE H_FILE "#undef THIRTY_TWO_BIT" $ WRITE H_FILE "#undef SIXTEEN_BIT" $ WRITE H_FILE "#undef EIGHT_BIT" $ WRITE H_FILE "#endif" +$ +$ WRITE H_FILE "#undef OPENSSL_EXPORT_VAR_AS_FUNCTION" $! $! Else... $! @@ -317,6 +319,9 @@ $ WRITE H_FILE "#define THIRTY_TWO_BIT" $ WRITE H_FILE "#undef SIXTEEN_BIT" $ WRITE H_FILE "#undef EIGHT_BIT" $ WRITE H_FILE "#endif" +$ +$ WRITE H_FILE "#undef OPENSSL_EXPORT_VAR_AS_FUNCTION" +$ WRITE H_FILE "#define OPENSSL_EXPORT_VAR_AS_FUNCTION" $! $! End $! diff --git a/util/libeay.num b/util/libeay.num index 6c76287f5f..92de2a8f5f 100755 --- a/util/libeay.num +++ b/util/libeay.num @@ -203,13 +203,13 @@ DSA_generate_key 210 EXIST::FUNCTION:DSA DSA_generate_parameters 211 EXIST::FUNCTION:DSA DSA_is_prime 212 NOEXIST::FUNCTION: DSA_new 213 EXIST::FUNCTION:DSA -DSA_print 214 EXIST::FUNCTION:DSA,BIO +DSA_print 214 EXIST::FUNCTION:BIO,DSA DSA_print_fp 215 EXIST::FUNCTION:DSA,FP_API DSA_sign 216 EXIST::FUNCTION:DSA DSA_sign_setup 217 EXIST::FUNCTION:DSA DSA_size 218 EXIST::FUNCTION:DSA DSA_verify 219 EXIST::FUNCTION:DSA -DSAparams_print 220 EXIST::FUNCTION:DSA,BIO +DSAparams_print 220 EXIST::FUNCTION:BIO,DSA DSAparams_print_fp 221 EXIST::FUNCTION:DSA,FP_API ERR_clear_error 222 EXIST::FUNCTION: ERR_error_string 223 EXIST::FUNCTION: @@ -478,7 +478,7 @@ RSA_generate_key 485 EXIST::FUNCTION:RSA RSA_new 486 EXIST::FUNCTION:RSA RSA_new_method 487 EXIST::FUNCTION:RSA RSA_print 488 EXIST::FUNCTION:BIO,RSA -RSA_print_fp 489 EXIST::FUNCTION:RSA,FP_API +RSA_print_fp 489 EXIST::FUNCTION:FP_API,RSA RSA_private_decrypt 490 EXIST::FUNCTION:RSA RSA_private_encrypt 491 EXIST::FUNCTION:RSA RSA_public_decrypt 492 EXIST::FUNCTION:RSA @@ -489,14 +489,14 @@ RSA_sign_ASN1_OCTET_STRING 496 EXIST::FUNCTION:RSA RSA_size 497 EXIST::FUNCTION:RSA RSA_verify 498 EXIST::FUNCTION:RSA RSA_verify_ASN1_OCTET_STRING 499 EXIST::FUNCTION:RSA -SHA 500 EXIST::FUNCTION:SHA0,SHA +SHA 500 EXIST::FUNCTION:SHA,SHA0 SHA1 501 EXIST::FUNCTION:SHA,SHA1 SHA1_Final 502 EXIST::FUNCTION:SHA,SHA1 SHA1_Init 503 EXIST::FUNCTION:SHA,SHA1 SHA1_Update 504 EXIST::FUNCTION:SHA,SHA1 -SHA_Final 505 EXIST::FUNCTION:SHA0,SHA -SHA_Init 506 EXIST::FUNCTION:SHA0,SHA -SHA_Update 507 EXIST::FUNCTION:SHA0,SHA +SHA_Final 505 EXIST::FUNCTION:SHA,SHA0 +SHA_Init 506 EXIST::FUNCTION:SHA,SHA0 +SHA_Update 507 EXIST::FUNCTION:SHA,SHA0 OpenSSL_add_all_algorithms 508 EXIST::FUNCTION: OpenSSL_add_all_ciphers 509 EXIST::FUNCTION: OpenSSL_add_all_digests 510 EXIST::FUNCTION: @@ -719,7 +719,7 @@ d2i_ASN1_bytes 725 EXIST::FUNCTION: d2i_ASN1_type_bytes 726 EXIST::FUNCTION: d2i_DHparams 727 EXIST::FUNCTION:DH d2i_DSAPrivateKey 728 EXIST::FUNCTION:DSA -d2i_DSAPrivateKey_bio 729 EXIST::FUNCTION:DSA,BIO +d2i_DSAPrivateKey_bio 729 EXIST::FUNCTION:BIO,DSA d2i_DSAPrivateKey_fp 730 EXIST::FUNCTION:DSA,FP_API d2i_DSAPublicKey 731 EXIST::FUNCTION:DSA d2i_DSAparams 732 EXIST::FUNCTION:DSA @@ -742,7 +742,7 @@ d2i_PrivateKey 748 EXIST::FUNCTION: d2i_PublicKey 749 EXIST::FUNCTION: d2i_RSAPrivateKey 750 EXIST::FUNCTION:RSA d2i_RSAPrivateKey_bio 751 EXIST::FUNCTION:BIO,RSA -d2i_RSAPrivateKey_fp 752 EXIST::FUNCTION:RSA,FP_API +d2i_RSAPrivateKey_fp 752 EXIST::FUNCTION:FP_API,RSA d2i_RSAPublicKey 753 EXIST::FUNCTION:RSA d2i_X509 754 EXIST::FUNCTION: d2i_X509_ALGOR 755 EXIST::FUNCTION: @@ -821,7 +821,7 @@ i2d_ASN1_UTCTIME 828 EXIST::FUNCTION: i2d_ASN1_bytes 829 EXIST::FUNCTION: i2d_DHparams 830 EXIST::FUNCTION:DH i2d_DSAPrivateKey 831 EXIST::FUNCTION:DSA -i2d_DSAPrivateKey_bio 832 EXIST::FUNCTION:DSA,BIO +i2d_DSAPrivateKey_bio 832 EXIST::FUNCTION:BIO,DSA i2d_DSAPrivateKey_fp 833 EXIST::FUNCTION:DSA,FP_API i2d_DSAPublicKey 834 EXIST::FUNCTION:DSA i2d_DSAparams 835 EXIST::FUNCTION:DSA @@ -844,7 +844,7 @@ i2d_PrivateKey 851 EXIST::FUNCTION: i2d_PublicKey 852 EXIST::FUNCTION: i2d_RSAPrivateKey 853 EXIST::FUNCTION:RSA i2d_RSAPrivateKey_bio 854 EXIST::FUNCTION:BIO,RSA -i2d_RSAPrivateKey_fp 855 EXIST::FUNCTION:RSA,FP_API +i2d_RSAPrivateKey_fp 855 EXIST::FUNCTION:FP_API,RSA i2d_RSAPublicKey 856 EXIST::FUNCTION:RSA i2d_X509 857 EXIST::FUNCTION: i2d_X509_ALGOR 858 EXIST::FUNCTION: @@ -933,8 +933,8 @@ d2i_RSAPublicKey_bio 945 EXIST::FUNCTION:BIO,RSA i2d_RSAPublicKey_bio 946 EXIST::FUNCTION:BIO,RSA PEM_read_RSAPublicKey 947 EXIST:!WIN16:FUNCTION:RSA PEM_write_RSAPublicKey 949 EXIST:!WIN16:FUNCTION:RSA -d2i_RSAPublicKey_fp 952 EXIST::FUNCTION:RSA,FP_API -i2d_RSAPublicKey_fp 954 EXIST::FUNCTION:RSA,FP_API +d2i_RSAPublicKey_fp 952 EXIST::FUNCTION:FP_API,RSA +i2d_RSAPublicKey_fp 954 EXIST::FUNCTION:FP_API,RSA BIO_copy_next_retry 955 EXIST::FUNCTION: RSA_flags 956 EXIST::FUNCTION:RSA X509_STORE_add_crl 957 EXIST::FUNCTION: @@ -989,7 +989,7 @@ ERR_load_CRYPTOlib_strings 1009 EXIST:WIN16,VMS:FUNCTION: EVP_PKEY_bits 1010 EXIST::FUNCTION: MD5_Transform 1011 EXIST::FUNCTION:MD5 SHA1_Transform 1012 EXIST::FUNCTION:SHA,SHA1 -SHA_Transform 1013 EXIST::FUNCTION:SHA0,SHA +SHA_Transform 1013 EXIST::FUNCTION:SHA,SHA0 X509_STORE_CTX_get_chain 1014 EXIST::FUNCTION: X509_STORE_CTX_get_current_cert 1015 EXIST::FUNCTION: X509_STORE_CTX_get_error 1016 EXIST::FUNCTION: @@ -1216,7 +1216,7 @@ name_cmp 1239 EXIST::FUNCTION: str_dup 1240 NOEXIST::FUNCTION: i2s_ASN1_ENUMERATED 1241 EXIST::FUNCTION: i2s_ASN1_ENUMERATED_TABLE 1242 EXIST::FUNCTION: -BIO_s_log 1243 EXIST:!WIN32,!WIN16,!macintosh:FUNCTION: +BIO_s_log 1243 EXIST:!WIN16,!WIN32,!macintosh:FUNCTION: BIO_f_reliable 1244 EXIST::FUNCTION:BIO PKCS7_dataFinal 1245 EXIST::FUNCTION: PKCS7_dataDecode 1246 EXIST::FUNCTION: @@ -1468,7 +1468,7 @@ RSA_get_method 1847 EXIST::FUNCTION:RSA RSA_get_default_method 1848 NOEXIST::FUNCTION: RSA_check_key 1869 EXIST::FUNCTION:RSA OBJ_obj2txt 1870 EXIST::FUNCTION: -DSA_dup_DH 1871 EXIST::FUNCTION:DSA,DH +DSA_dup_DH 1871 EXIST::FUNCTION:DH,DSA X509_REQ_get_extensions 1872 EXIST::FUNCTION: X509_REQ_set_extension_nids 1873 EXIST::FUNCTION: BIO_nwrite 1874 EXIST::FUNCTION: @@ -1543,7 +1543,7 @@ ASN1_STRING_set_default_mask_asc 1960 EXIST:!VMS:FUNCTION: ASN1_STRING_set_def_mask_asc 1960 EXIST:VMS:FUNCTION: PEM_write_bio_RSA_PUBKEY 1961 EXIST::FUNCTION:RSA ASN1_INTEGER_cmp 1963 EXIST::FUNCTION: -d2i_RSA_PUBKEY_fp 1964 EXIST::FUNCTION:RSA,FP_API +d2i_RSA_PUBKEY_fp 1964 EXIST::FUNCTION:FP_API,RSA X509_trust_set_bit_asc 1967 NOEXIST::FUNCTION: PEM_write_bio_DSA_PUBKEY 1968 EXIST::FUNCTION:DSA X509_STORE_CTX_free 1969 EXIST::FUNCTION: @@ -1576,7 +1576,7 @@ X509_NAME_add_entry_by_OBJ 2008 EXIST::FUNCTION: X509_CRL_get_ext_d2i 2009 EXIST::FUNCTION: X509_PURPOSE_get0_name 2011 EXIST::FUNCTION: PEM_read_PUBKEY 2012 EXIST:!WIN16:FUNCTION: -i2d_DSA_PUBKEY_bio 2014 EXIST::FUNCTION:DSA,BIO +i2d_DSA_PUBKEY_bio 2014 EXIST::FUNCTION:BIO,DSA i2d_OTHERNAME 2015 EXIST::FUNCTION: ASN1_OCTET_STRING_free 2016 EXIST::FUNCTION: ASN1_BIT_STRING_set_asc 2017 EXIST::FUNCTION: @@ -1634,7 +1634,7 @@ PEM_read_bio_DSA_PUBKEY 2088 EXIST::FUNCTION:DSA X509_PURPOSE_add 2090 EXIST::FUNCTION: ASN1_STRING_TABLE_get 2091 EXIST::FUNCTION: ASN1_UTF8STRING_free 2092 EXIST::FUNCTION: -d2i_DSA_PUBKEY_bio 2093 EXIST::FUNCTION:DSA,BIO +d2i_DSA_PUBKEY_bio 2093 EXIST::FUNCTION:BIO,DSA PEM_write_RSA_PUBKEY 2095 EXIST:!WIN16:FUNCTION:RSA d2i_OTHERNAME 2096 EXIST::FUNCTION: X509_reject_set_bit 2098 NOEXIST::FUNCTION: @@ -1646,7 +1646,7 @@ ASN1_BIT_STRING_set 2109 EXIST::FUNCTION: X509_TRUST_get_count 2110 EXIST::FUNCTION: ASN1_INTEGER_free 2111 EXIST::FUNCTION: OTHERNAME_free 2112 EXIST::FUNCTION: -i2d_RSA_PUBKEY_fp 2113 EXIST::FUNCTION:RSA,FP_API +i2d_RSA_PUBKEY_fp 2113 EXIST::FUNCTION:FP_API,RSA ASN1_INTEGER_dup 2114 EXIST::FUNCTION: d2i_X509_CERT_AUX 2115 EXIST::FUNCTION: PEM_write_bio_PUBKEY 2117 EXIST::FUNCTION: @@ -1871,8 +1871,10 @@ X509_time_adj 2453 EXIST::FUNCTION: X509_check_issued 2454 EXIST::FUNCTION: ASN1_UTCTIME_cmp_time_t 2455 EXIST::FUNCTION: des_set_weak_key_flag 2456 NOEXIST::FUNCTION: -des_check_key 2457 EXIST::VARIABLE:DES -des_rw_mode 2458 EXIST::VARIABLE:DES +_shadow_des_check_key 2457 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE:DES +_shadow_des_check_key 2457 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION:DES +_shadow_des_rw_mode 2458 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE:DES +_shadow_des_rw_mode 2458 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION:DES RSA_PKCS1_RSAref 2459 NOEXIST::FUNCTION: X509_keyid_set1 2460 EXIST::FUNCTION: BIO_next 2461 EXIST::FUNCTION: @@ -2077,95 +2079,141 @@ BN_mod_lshift1_quick 2656 EXIST::FUNCTION: BN_mod_lshift_quick 2657 EXIST::FUNCTION: BN_mod_add_quick 2658 EXIST::FUNCTION: BN_mod_sub 2659 EXIST::FUNCTION: -ASN1_UTF8STRING_it 2660 EXIST::VARIABLE: +ASN1_UTF8STRING_it 2660 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +ASN1_UTF8STRING_it 2660 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: ASN1_item_ex_i2d 2661 EXIST::FUNCTION: X509V3_add1_i2d 2662 EXIST::FUNCTION: -PKCS7_ENVELOPE_it 2663 EXIST::VARIABLE: +PKCS7_ENVELOPE_it 2663 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +PKCS7_ENVELOPE_it 2663 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: OCSP_ONEREQ_get1_ext_d2i 2664 EXIST::FUNCTION: -PBKDF2PARAM_it 2665 EXIST::VARIABLE: +PBKDF2PARAM_it 2665 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +PBKDF2PARAM_it 2665 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: EXTENDED_KEY_USAGE_new 2666 EXIST::FUNCTION: OCSP_BASICRESP_delete_ext 2667 EXIST::FUNCTION: -X509_CRL_it 2668 EXIST::VARIABLE: +X509_CRL_it 2668 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +X509_CRL_it 2668 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: OCSP_BASICRESP_add_ext 2669 EXIST::FUNCTION: OCSP_REQUEST_get_ext_by_OBJ 2670 EXIST::FUNCTION: -ASN1_T61STRING_it 2671 EXIST::VARIABLE: +ASN1_T61STRING_it 2671 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +ASN1_T61STRING_it 2671 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: OCSP_BASICRESP_get_ext_by_OBJ 2672 EXIST::FUNCTION: OCSP_SINGLERESP_get_ext_count 2673 EXIST::FUNCTION: asn1_do_adb 2674 EXIST::FUNCTION: ASN1_template_i2d 2675 EXIST::FUNCTION: -GENERAL_NAME_it 2676 EXIST::VARIABLE: -ASN1_GENERALIZEDTIME_it 2677 EXIST::VARIABLE: -SXNET_it 2678 EXIST::VARIABLE: -POLICYQUALINFO_it 2679 EXIST::VARIABLE: +GENERAL_NAME_it 2676 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +GENERAL_NAME_it 2676 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: +ASN1_GENERALIZEDTIME_it 2677 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +ASN1_GENERALIZEDTIME_it 2677 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: +SXNET_it 2678 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +SXNET_it 2678 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: +POLICYQUALINFO_it 2679 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +POLICYQUALINFO_it 2679 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: ASN1_item_free 2680 EXIST::FUNCTION: -AUTHORITY_KEYID_it 2681 EXIST::VARIABLE: +AUTHORITY_KEYID_it 2681 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +AUTHORITY_KEYID_it 2681 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: EXTENDED_KEY_USAGE_free 2682 EXIST::FUNCTION: OCSP_REQUEST_get_ext 2683 EXIST::FUNCTION: ENGINE_load_ubsec 2684 EXIST::FUNCTION: -PKEY_USAGE_PERIOD_it 2685 EXIST::VARIABLE: -NETSCAPE_SPKAC_it 2686 EXIST::VARIABLE: -X509_REVOKED_it 2687 EXIST::VARIABLE: +PKEY_USAGE_PERIOD_it 2685 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +PKEY_USAGE_PERIOD_it 2685 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: +NETSCAPE_SPKAC_it 2686 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +NETSCAPE_SPKAC_it 2686 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: +X509_REVOKED_it 2687 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +X509_REVOKED_it 2687 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: OCSP_BASICRESP_get_ext_by_critical 2688 EXIST:!VMS:FUNCTION: OCSP_BASICRESP_get_ext_by_crit 2688 EXIST:VMS:FUNCTION: -PKCS12_it 2689 EXIST::VARIABLE: +PKCS12_it 2689 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +PKCS12_it 2689 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: OCSP_SINGLERESP_get_ext_by_critical 2690 EXIST:!VMS:FUNCTION: OCSP_SINGLERESP_get_ext_by_crit 2690 EXIST:VMS:FUNCTION: ASN1_item_i2d 2691 EXIST::FUNCTION: asn1_ex_i2c 2692 EXIST::FUNCTION: -X509_EXTENSION_it 2693 EXIST::VARIABLE: -SXNETID_it 2694 EXIST::VARIABLE: +X509_EXTENSION_it 2693 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +X509_EXTENSION_it 2693 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: +SXNETID_it 2694 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +SXNETID_it 2694 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: EDIPARTYNAME_new 2695 EXIST::FUNCTION: d2i_EXTENDED_KEY_USAGE 2696 EXIST::FUNCTION: -X509_PUBKEY_it 2697 EXIST::VARIABLE: -PKCS7_ENCRYPT_it 2698 EXIST::VARIABLE: +X509_PUBKEY_it 2697 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +X509_PUBKEY_it 2697 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: +PKCS7_ENCRYPT_it 2698 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +PKCS7_ENCRYPT_it 2698 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: X509_add1_ext_i2d 2699 EXIST::FUNCTION: -PKCS7_SIGNER_INFO_it 2700 EXIST::VARIABLE: -PKCS12_SAFEBAG_it 2701 EXIST::VARIABLE: +PKCS7_SIGNER_INFO_it 2700 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +PKCS7_SIGNER_INFO_it 2700 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: +PKCS12_SAFEBAG_it 2701 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +PKCS12_SAFEBAG_it 2701 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: X509_signature_print 2702 EXIST::FUNCTION:EVP OCSP_REQUEST_add_ext 2703 EXIST::FUNCTION: -X509_ALGOR_it 2704 EXIST::VARIABLE: -ASN1_TIME_it 2705 EXIST::VARIABLE: +X509_ALGOR_it 2704 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +X509_ALGOR_it 2704 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: +ASN1_TIME_it 2705 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +ASN1_TIME_it 2705 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: OCSP_ONEREQ_get_ext_count 2706 EXIST::FUNCTION: -ASN1_IA5STRING_it 2707 EXIST::VARIABLE: -X509_CERT_AUX_it 2708 EXIST::VARIABLE: -CERTIFICATEPOLICIES_it 2709 EXIST::VARIABLE: +ASN1_IA5STRING_it 2707 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +ASN1_IA5STRING_it 2707 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: +X509_CERT_AUX_it 2708 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +X509_CERT_AUX_it 2708 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: +CERTIFICATEPOLICIES_it 2709 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +CERTIFICATEPOLICIES_it 2709 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: BN_bntest_rand 2710 EXIST::FUNCTION: -X509_ATTRIBUTE_it 2711 EXIST::VARIABLE: +X509_ATTRIBUTE_it 2711 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +X509_ATTRIBUTE_it 2711 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: OCSP_ONEREQ_get_ext_by_NID 2712 EXIST::FUNCTION: -OCSP_SERVICELOC_it 2713 EXIST::VARIABLE: -ACCESS_DESCRIPTION_it 2714 EXIST::VARIABLE: -PKCS7_ISSUER_AND_SERIAL_it 2715 EXIST::VARIABLE: -PBE2PARAM_it 2716 EXIST::VARIABLE: -PKCS7_SIGNED_it 2717 EXIST::VARIABLE: -X509_it 2718 EXIST::VARIABLE: -ASN1_BMPSTRING_it 2719 EXIST::VARIABLE: +OCSP_SERVICELOC_it 2713 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +OCSP_SERVICELOC_it 2713 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: +ACCESS_DESCRIPTION_it 2714 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +ACCESS_DESCRIPTION_it 2714 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: +PKCS7_ISSUER_AND_SERIAL_it 2715 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +PKCS7_ISSUER_AND_SERIAL_it 2715 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: +PBE2PARAM_it 2716 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +PBE2PARAM_it 2716 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: +PKCS7_SIGNED_it 2717 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +PKCS7_SIGNED_it 2717 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: +X509_it 2718 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +X509_it 2718 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: +ASN1_BMPSTRING_it 2719 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +ASN1_BMPSTRING_it 2719 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: ASN1_tag2bit 2720 EXIST::FUNCTION: OCSP_REQUEST_delete_ext 2721 EXIST::FUNCTION: -ASN1_PRINTABLESTRING_it 2722 EXIST::VARIABLE: +ASN1_PRINTABLESTRING_it 2722 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +ASN1_PRINTABLESTRING_it 2722 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: BN_mod_sqr 2723 EXIST::FUNCTION: -NETSCAPE_CERT_SEQUENCE_it 2724 EXIST::VARIABLE: -GENERAL_NAMES_it 2725 EXIST::VARIABLE: -AUTHORITY_INFO_ACCESS_it 2726 EXIST::VARIABLE: -X509_CINF_it 2727 EXIST::VARIABLE: +NETSCAPE_CERT_SEQUENCE_it 2724 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +NETSCAPE_CERT_SEQUENCE_it 2724 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: +GENERAL_NAMES_it 2725 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +GENERAL_NAMES_it 2725 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: +AUTHORITY_INFO_ACCESS_it 2726 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +AUTHORITY_INFO_ACCESS_it 2726 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: +X509_CINF_it 2727 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +X509_CINF_it 2727 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: d2i_EDIPARTYNAME 2728 EXIST::FUNCTION: -OTHERNAME_it 2729 EXIST::VARIABLE: +OTHERNAME_it 2729 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +OTHERNAME_it 2729 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: OCSP_SINGLERESP_get_ext_by_NID 2730 EXIST::FUNCTION: OCSP_REQUEST_add1_ext_i2d 2731 EXIST::FUNCTION: -X509_VAL_it 2732 EXIST::VARIABLE: +X509_VAL_it 2732 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +X509_VAL_it 2732 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: X509_CRL_add1_ext_i2d 2733 EXIST::FUNCTION: OCSP_BASICRESP_add1_ext_i2d 2734 EXIST::FUNCTION: -X509_SIG_it 2735 EXIST::VARIABLE: +X509_SIG_it 2735 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +X509_SIG_it 2735 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: OCSP_ONEREQ_get_ext 2736 EXIST::FUNCTION: OCSP_ONEREQ_get_ext_by_OBJ 2737 EXIST::FUNCTION: ASN1_primitive_new 2738 EXIST::FUNCTION: -ASN1_VISIBLESTRING_it 2739 EXIST::VARIABLE: +ASN1_VISIBLESTRING_it 2739 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +ASN1_VISIBLESTRING_it 2739 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: OCSP_SINGLERESP_add1_ext_i2d 2740 EXIST::FUNCTION: -CRL_DIST_POINTS_it 2741 EXIST::VARIABLE: +CRL_DIST_POINTS_it 2741 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +CRL_DIST_POINTS_it 2741 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: GENERAL_NAME_print 2742 EXIST::FUNCTION: OCSP_SINGLERESP_delete_ext 2743 EXIST::FUNCTION: -ASN1_BIT_STRING_it 2744 EXIST::VARIABLE: -X509_REQ_it 2745 EXIST::VARIABLE: -PKCS7_SIGN_ENVELOPE_it 2746 EXIST::VARIABLE: +ASN1_BIT_STRING_it 2744 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +ASN1_BIT_STRING_it 2744 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: +X509_REQ_it 2745 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +X509_REQ_it 2745 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: +PKCS7_SIGN_ENVELOPE_it 2746 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +PKCS7_SIGN_ENVELOPE_it 2746 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: EDIPARTYNAME_free 2747 EXIST::FUNCTION: OCSP_REQUEST_get1_ext_d2i 2748 EXIST::FUNCTION: asn1_ex_c2i 2749 EXIST::FUNCTION: @@ -2173,68 +2221,98 @@ asn1_enc_restore 2750 EXIST::FUNCTION: OCSP_SINGLERESP_get_ext 2751 EXIST::FUNCTION: OCSP_BASICRESP_get1_ext_d2i 2752 EXIST::FUNCTION: i2d_EDIPARTYNAME 2753 EXIST::FUNCTION: -ASN1_INTEGER_it 2754 EXIST::VARIABLE: +ASN1_INTEGER_it 2754 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +ASN1_INTEGER_it 2754 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: OCSP_ONEREQ_get_ext_by_critical 2755 EXIST::FUNCTION: -BASIC_CONSTRAINTS_it 2756 EXIST::VARIABLE: +BASIC_CONSTRAINTS_it 2756 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +BASIC_CONSTRAINTS_it 2756 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: OCSP_SINGLERESP_get1_ext_d2i 2757 EXIST::FUNCTION: -X509_NAME_ENTRY_it 2758 EXIST::VARIABLE: +X509_NAME_ENTRY_it 2758 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +X509_NAME_ENTRY_it 2758 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: OCSP_ONEREQ_add_ext 2759 EXIST::FUNCTION: -DIST_POINT_it 2760 EXIST::VARIABLE: -OCSP_SINGLERESP_it 2761 EXIST::VARIABLE: +DIST_POINT_it 2760 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +DIST_POINT_it 2760 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: +OCSP_SINGLERESP_it 2761 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +OCSP_SINGLERESP_it 2761 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: ASN1_item_ex_d2i 2762 EXIST::FUNCTION: BN_mod_sqrt 2763 EXIST::FUNCTION: OCSP_SINGLERESP_get_ext_by_OBJ 2764 EXIST::FUNCTION: -PKCS12_BAGS_it 2765 EXIST::VARIABLE: +PKCS12_BAGS_it 2765 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +PKCS12_BAGS_it 2765 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: ASN1_template_free 2766 EXIST::FUNCTION: OCSP_SINGLERESP_add_ext 2767 EXIST::FUNCTION: ASN1_template_d2i 2768 EXIST::FUNCTION: -POLICYINFO_it 2769 EXIST::VARIABLE: +POLICYINFO_it 2769 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +POLICYINFO_it 2769 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: asn1_enc_free 2770 EXIST::FUNCTION: -PKCS8_PRIV_KEY_INFO_it 2771 EXIST::VARIABLE: -OCSP_REQINFO_it 2772 EXIST::VARIABLE: -PBEPARAM_it 2773 EXIST::VARIABLE: +PKCS8_PRIV_KEY_INFO_it 2771 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +PKCS8_PRIV_KEY_INFO_it 2771 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: +OCSP_REQINFO_it 2772 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +OCSP_REQINFO_it 2772 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: +PBEPARAM_it 2773 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +PBEPARAM_it 2773 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: X509_CRL_add0_revoked 2774 EXIST::FUNCTION: -EDIPARTYNAME_it 2775 EXIST::VARIABLE: -NETSCAPE_SPKI_it 2776 EXIST::VARIABLE: +EDIPARTYNAME_it 2775 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +EDIPARTYNAME_it 2775 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: +NETSCAPE_SPKI_it 2776 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +NETSCAPE_SPKI_it 2776 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: BN_kronecker 2777 EXIST::FUNCTION: -ASN1_ENUMERATED_it 2778 EXIST::VARIABLE: +ASN1_ENUMERATED_it 2778 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +ASN1_ENUMERATED_it 2778 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: OCSP_BASICRESP_get_ext_count 2779 EXIST::FUNCTION: -ASN1_UTCTIME_it 2780 EXIST::VARIABLE: -NOTICEREF_it 2781 EXIST::VARIABLE: -ASN1_ANY_it 2782 EXIST::VARIABLE: +ASN1_UTCTIME_it 2780 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +ASN1_UTCTIME_it 2780 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: +NOTICEREF_it 2781 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +NOTICEREF_it 2781 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: +ASN1_ANY_it 2782 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +ASN1_ANY_it 2782 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: asn1_enc_init 2783 EXIST::FUNCTION: ASN1_item_d2i 2784 EXIST::FUNCTION: ASN1_primitive_free 2785 EXIST::FUNCTION: i2d_EXTENDED_KEY_USAGE 2786 EXIST::FUNCTION: asn1_enc_save 2787 EXIST::FUNCTION: -PKCS12_MAC_DATA_it 2788 EXIST::VARIABLE: +PKCS12_MAC_DATA_it 2788 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +PKCS12_MAC_DATA_it 2788 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: asn1_do_lock 2789 EXIST::FUNCTION: ASN1_item_ex_new 2790 EXIST::FUNCTION: asn1_get_choice_selector 2791 EXIST::FUNCTION: OCSP_REQUEST_get_ext_by_NID 2792 EXIST::FUNCTION: OCSP_BASICRESP_get_ext_by_NID 2793 EXIST::FUNCTION: -DIST_POINT_NAME_it 2794 EXIST::VARIABLE: +DIST_POINT_NAME_it 2794 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +DIST_POINT_NAME_it 2794 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: X509V3_extensions_print 2795 EXIST::FUNCTION: X509_REVOKED_add1_ext_i2d 2796 EXIST::FUNCTION: -ASN1_OCTET_STRING_it 2797 EXIST::VARIABLE: +ASN1_OCTET_STRING_it 2797 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +ASN1_OCTET_STRING_it 2797 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: ASN1_template_new 2798 EXIST::FUNCTION: -PKCS7_RECIP_INFO_it 2799 EXIST::VARIABLE: -EXTENDED_KEY_USAGE_it 2800 EXIST::VARIABLE: -X509_CRL_INFO_it 2801 EXIST::VARIABLE: -PKCS7_DIGEST_it 2802 EXIST::VARIABLE: -PKCS7_ENC_CONTENT_it 2803 EXIST::VARIABLE: +PKCS7_RECIP_INFO_it 2799 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +PKCS7_RECIP_INFO_it 2799 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: +EXTENDED_KEY_USAGE_it 2800 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +EXTENDED_KEY_USAGE_it 2800 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: +X509_CRL_INFO_it 2801 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +X509_CRL_INFO_it 2801 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: +PKCS7_DIGEST_it 2802 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +PKCS7_DIGEST_it 2802 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: +PKCS7_ENC_CONTENT_it 2803 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +PKCS7_ENC_CONTENT_it 2803 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: asn1_set_choice_selector 2804 EXIST::FUNCTION: asn1_get_field_ptr 2805 EXIST::FUNCTION: -OCSP_CRLID_it 2806 EXIST::VARIABLE: +OCSP_CRLID_it 2806 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +OCSP_CRLID_it 2806 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: OCSP_REQUEST_get_ext_count 2807 EXIST::FUNCTION: -X509_NAME_it 2808 EXIST::VARIABLE: -USERNOTICE_it 2809 EXIST::VARIABLE: +X509_NAME_it 2808 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +X509_NAME_it 2808 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: +USERNOTICE_it 2809 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +USERNOTICE_it 2809 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: OCSP_BASICRESP_get_ext 2810 EXIST::FUNCTION: -X509_REQ_INFO_it 2811 EXIST::VARIABLE: +X509_REQ_INFO_it 2811 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +X509_REQ_INFO_it 2811 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: ASN1_item_ex_free 2812 EXIST::FUNCTION: OCSP_ONEREQ_add1_ext_i2d 2813 EXIST::FUNCTION: -ASN1_NULL_it 2814 EXIST::VARIABLE: -PKCS7_it 2815 EXIST::VARIABLE: +ASN1_NULL_it 2814 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +ASN1_NULL_it 2814 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: +PKCS7_it 2815 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +PKCS7_it 2815 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: OCSP_REQUEST_get_ext_by_critical 2816 EXIST:!VMS:FUNCTION: OCSP_REQUEST_get_ext_by_crit 2816 EXIST:VMS:FUNCTION: OCSP_ONEREQ_delete_ext 2817 EXIST::FUNCTION: @@ -2245,26 +2323,39 @@ ASN1_item_sign 2821 EXIST::FUNCTION:EVP ASN1_unpack_item 2822 NOEXIST::FUNCTION: ASN1_item_verify 2823 EXIST::FUNCTION:EVP ASN1_pack_item 2824 NOEXIST::FUNCTION: -OCSP_CERTID_it 2825 EXIST::VARIABLE: -OCSP_SIGNATURE_it 2826 EXIST::VARIABLE: +OCSP_CERTID_it 2825 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +OCSP_CERTID_it 2825 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: +OCSP_SIGNATURE_it 2826 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +OCSP_SIGNATURE_it 2826 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: ASN1_item_dup 2827 EXIST::FUNCTION: -OCSP_REQUEST_it 2828 EXIST::VARIABLE: -OCSP_BASICRESP_it 2829 EXIST::VARIABLE: -OCSP_RESPBYTES_it 2830 EXIST::VARIABLE: -OCSP_ONEREQ_it 2831 EXIST::VARIABLE: -OCSP_RESPDATA_it 2832 EXIST::VARIABLE: -OCSP_RESPID_it 2833 EXIST::VARIABLE: -OCSP_REVOKEDINFO_it 2834 EXIST::VARIABLE: -OCSP_RESPONSE_it 2835 EXIST::VARIABLE: -OCSP_CERTSTATUS_it 2836 EXIST::VARIABLE: +OCSP_REQUEST_it 2828 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +OCSP_REQUEST_it 2828 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: +OCSP_BASICRESP_it 2829 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +OCSP_BASICRESP_it 2829 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: +OCSP_RESPBYTES_it 2830 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +OCSP_RESPBYTES_it 2830 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: +OCSP_ONEREQ_it 2831 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +OCSP_ONEREQ_it 2831 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: +OCSP_RESPDATA_it 2832 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +OCSP_RESPDATA_it 2832 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: +OCSP_RESPID_it 2833 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +OCSP_RESPID_it 2833 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: +OCSP_REVOKEDINFO_it 2834 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +OCSP_REVOKEDINFO_it 2834 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: +OCSP_RESPONSE_it 2835 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +OCSP_RESPONSE_it 2835 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: +OCSP_CERTSTATUS_it 2836 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +OCSP_CERTSTATUS_it 2836 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: OCSP_basic_sign 2837 EXIST::FUNCTION: OCSP_request_onereq_get0 2838 EXIST::FUNCTION: -ASN1_SEQUENCE_it 2839 NOEXIST::FUNCTION: +ASN1_SEQUENCE_it 2839 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +ASN1_SEQUENCE_it 2839 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: OCSP_crl_reason_str 2840 EXIST::FUNCTION: OCSP_request_set1_name 2841 EXIST::FUNCTION: OCSP_cert_to_id 2842 EXIST::FUNCTION: OCSP_request_add0_id 2843 EXIST::FUNCTION: -RSAPrivateKey_it 2844 EXIST::VARIABLE:RSA +RSAPrivateKey_it 2844 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE:RSA +RSAPrivateKey_it 2844 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION:RSA PKCS12_unpack_p7data 2845 EXIST::FUNCTION: PKCS12_item_decrypt_d2i 2846 EXIST::FUNCTION: OCSP_resp_count 2847 EXIST::FUNCTION: @@ -2273,16 +2364,19 @@ CRYPTO_get_mem_ex_functions 2849 EXIST::FUNCTION: OPENSSL_issetugid 2850 EXIST::FUNCTION: PKCS12_item_i2d_encrypt 2851 EXIST::FUNCTION: OCSP_basic_verify 2852 EXIST::FUNCTION: -ZLONG_it 2853 NOEXIST::FUNCTION: +ZLONG_it 2853 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +ZLONG_it 2853 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: EVP_aes_128_ecb 2854 EXIST::FUNCTION:AES CRYPTO_set_locked_mem_ex_functions 2855 EXIST:!VMS:FUNCTION: CRYPTO_set_locked_mem_ex_funcs 2855 EXIST:VMS:FUNCTION: PKCS12_certbag2x509crl 2856 EXIST::FUNCTION: -DIRECTORYSTRING_it 2857 EXIST::VARIABLE: +DIRECTORYSTRING_it 2857 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +DIRECTORYSTRING_it 2857 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: PKCS12_decrypt_skey 2858 EXIST::FUNCTION: EVP_aes_192_cbc 2859 EXIST::FUNCTION:AES OCSP_id_get0_info 2860 EXIST::FUNCTION: -ASN1_FBOOLEAN_it 2861 NOEXIST::FUNCTION: +ASN1_FBOOLEAN_it 2861 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +ASN1_FBOOLEAN_it 2861 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: OCSP_id_issuer_cmp 2862 EXIST::FUNCTION: RAND_query_egd_bytes 2863 EXIST::FUNCTION: ASN1_TIME_check 2864 EXIST::FUNCTION: @@ -2296,7 +2390,8 @@ EVP_Digest 2871 EXIST::FUNCTION: OCSP_response_status 2872 EXIST::FUNCTION: OCSP_request_add1_nonce 2873 EXIST::FUNCTION: EVP_CIPHER_CTX_set_padding 2874 EXIST::FUNCTION: -ASN1_PRINTABLE_it 2875 EXIST::VARIABLE: +ASN1_PRINTABLE_it 2875 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +ASN1_PRINTABLE_it 2875 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: PKCS12_pack_authsafes 2876 EXIST::FUNCTION: PKCS12_unpack_p7encdata 2877 EXIST::FUNCTION: X509_pubkey_digest 2878 EXIST::FUNCTION:EVP @@ -2311,18 +2406,21 @@ ASN1_PRINTABLE_new 2886 EXIST::FUNCTION: ASN1_item_unpack 2887 EXIST::FUNCTION: ASN1_item_d2i_fp 2888 EXIST::FUNCTION:FP_API OCSP_basic_add1_status 2889 EXIST::FUNCTION: -DISPLAYTEXT_it 2890 EXIST::VARIABLE: +DISPLAYTEXT_it 2890 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +DISPLAYTEXT_it 2890 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: OCSP_response_status_str 2891 EXIST::FUNCTION: EVP_aes_128_cbc 2892 EXIST::FUNCTION:AES X509_get0_pubkey_bitstr 2893 EXIST::FUNCTION: OCSP_cert_status_str 2894 EXIST::FUNCTION: OCSP_sendreq_bio 2895 EXIST::FUNCTION: ASN1_item_i2d_bio 2896 EXIST::FUNCTION:BIO -CBIGNUM_it 2897 NOEXIST::FUNCTION: +CBIGNUM_it 2897 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +CBIGNUM_it 2897 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: PKCS8_decrypt 2898 EXIST::FUNCTION: rijndaelKeySetupEnc 2899 EXIST::FUNCTION: OCSP_basic_add1_cert 2900 EXIST::FUNCTION: -LONG_it 2901 NOEXIST::FUNCTION: +LONG_it 2901 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +LONG_it 2901 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: PKCS12_certbag2x509 2902 EXIST::FUNCTION: OCSP_response_create 2903 EXIST::FUNCTION: OCSP_resp_get0 2904 EXIST::FUNCTION: @@ -2332,17 +2430,32 @@ EVP_aes_192_ecb 2906 EXIST::FUNCTION:AES OCSP_response_get1_basic 2907 EXIST::FUNCTION: PKCS12_item_pack_safebag 2908 EXIST::FUNCTION: OCSP_copy_nonce 2909 EXIST::FUNCTION: -ASN1_TBOOLEAN_it 2910 NOEXIST::FUNCTION: +ASN1_TBOOLEAN_it 2910 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +ASN1_TBOOLEAN_it 2910 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: OCSP_single_get0_status 2911 EXIST::FUNCTION: OCSP_check_nonce 2912 EXIST::FUNCTION: -ASN1_BOOLEAN_it 2913 NOEXIST::FUNCTION: -RSAPublicKey_it 2914 EXIST::VARIABLE:RSA +ASN1_BOOLEAN_it 2913 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +ASN1_BOOLEAN_it 2913 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: +RSAPublicKey_it 2914 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE:RSA +RSAPublicKey_it 2914 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION:RSA ASN1_PRINTABLE_free 2915 EXIST::FUNCTION: CRYPTO_set_mem_ex_functions 2916 EXIST::FUNCTION: ASN1_TIME_to_generalizedtime 2917 EXIST::FUNCTION: -BIGNUM_it 2918 NOEXIST::FUNCTION: +BIGNUM_it 2918 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +BIGNUM_it 2918 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: OCSP_onereq_get0_id 2919 EXIST::FUNCTION: EVP_aes_256_cbc 2920 EXIST::FUNCTION:AES OCSP_resp_find 2921 EXIST::FUNCTION: BN_rand_range 2922 EXIST::FUNCTION: OCSP_check_validity 2923 EXIST::FUNCTION: +OCSP_request_is_signed 2924 EXIST::FUNCTION: +PKCS7_ATTR_SIGN_it 2925 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +PKCS7_ATTR_SIGN_it 2925 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: +PKCS12_AUTHSAFES_it 2926 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +PKCS12_AUTHSAFES_it 2926 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: +PKCS12_SAFEBAGS_it 2927 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +PKCS12_SAFEBAGS_it 2927 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: +PKCS7_ATTR_VERIFY_it 2928 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +PKCS7_ATTR_VERIFY_it 2928 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: +ASN1_OBJECT_it 2929 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE: +ASN1_OBJECT_it 2929 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION: diff --git a/util/mkdef.pl b/util/mkdef.pl index 17ac5173bb..b6117499ae 100755 --- a/util/mkdef.pl +++ b/util/mkdef.pl @@ -37,17 +37,17 @@ # - "platforms" is empty if it exists on all platforms, otherwise it contains # comma-separated list of the platform, just as they are if the symbol exists # for those platforms, or prepended with a "!" if not. This helps resolve -# symbol name replacements for platforms where the names are too long for the +# symbol name variants for platforms where the names are too long for the # compiler or linker, or if the systems is case insensitive and there is a -# clash. This script assumes those redefinitions are place in the file -# crypto/symhacks.h. -# The semantics for the platforms list is a bit complicated. The rule of -# thumb is that the list is exclusive, but it seems to mean different things. -# So, if the list is all negatives (like "!VMS,!WIN16"), the symbol exists -# on all platforms except those listed. If the list is all positives (like -# "VMS,WIN16"), the symbol exists only on those platforms and nowhere else. -# The combination of positives and negatives will act as if the positives -# weren't there. +# clash, or the symbol is implemented differently (see +# EXPORT_VAR_AS_FUNCTION). This script assumes renaming of symbols is found +# in the file crypto/symhacks.h. +# The semantics for the platforms is that every item is checked against the +# enviroment. For the negative items ("!FOO"), if any of them is false +# (i.e. "FOO" is true) in the enviroment, the corresponding symbol can't be +# used. For the positive itms, if all of them are false in the environment, +# the corresponding symbol can't be used. Any combination of positive and +# negative items are possible, and of course leave room for some redundancy. # - "kind" is "FUNCTION" or "VARIABLE". The meaning of that is obvious. # - "algorithms" is a comma-separated list of algorithm names. This helps # exclude symbols that are part of an algorithm that some user wants to @@ -67,6 +67,8 @@ my $do_ctest = 0; my $do_ctestall = 0; my $do_checkexist = 0; +my $VMSVAX=0; +my $VMSAlpha=0; my $VMS=0; my $W32=0; my $W16=0; @@ -74,7 +76,8 @@ my $NT=0; # Set this to make typesafe STACK definitions appear in DEF my $safe_stack_def = 0; -my @known_platforms = ( "__FreeBSD__", "PERL5", "NeXT" ); +my @known_platforms = ( "__FreeBSD__", "PERL5", "NeXT", + "EXPORT_VAR_AS_FUNCTION" ); my @known_ossl_platforms = ( "VMS", "WIN16", "WIN32", "WINNT" ); my @known_algorithms = ( "RC2", "RC4", "RC5", "IDEA", "DES", "BF", "CAST", "MD2", "MD4", "MD5", "SHA", "SHA0", "SHA1", @@ -106,12 +109,21 @@ my $no_fp_api; foreach (@ARGV, split(/ /, $options)) { + $debug=1 if $_ eq "debug"; $W32=1 if $_ eq "32"; $W16=1 if $_ eq "16"; if($_ eq "NT") { $W32 = 1; $NT = 1; } + if ($_ eq "VMS-VAX") { + $VMS=1; + $VMSVAX=1; + } + if ($_ eq "VMS-Alpha") { + $VMS=1; + $VMSAlpha=1; + } $VMS=1 if $_ eq "VMS"; $do_ssl=1 if $_ eq "ssleay"; @@ -308,7 +320,9 @@ sub do_defs my %platform; # For anything undefined, we assume "" my %kind; # For anything undefined, we assume "FUNCTION" my %algorithm; # For anything undefined, we assume "" - my %rename; + my %variant; + my %variant_cnt; # To be able to allocate "name{n}" if "name" + # is the same name as the original. my $cpp; my %unknown_algorithms = (); @@ -330,6 +344,53 @@ sub do_defs my @current_platforms = (); my @current_algorithms = (); + # params: symbol, alias, platforms, kind + # The reason to put this subroutine in a variable is that + # it will otherwise create it's own, unshared, version of + # %tag and %variant... + my $make_variant = sub + { + my ($s, $a, $p, $k) = @_; + my ($a1, $a2); + + print STDERR "DEBUG: make_variant: Entered with ",$s,", ",$a,", ",(defined($p)?$p:""),", ",(defined($k)?$k:""),"\n" if $debug; + if (defined($p)) + { + $a1 = join(",",$p, + grep(!/^$/, + map { $tag{$_} == 1 ? $_ : "" } + @known_platforms)); + } + else + { + $a1 = join(",", + grep(!/^$/, + map { $tag{$_} == 1 ? $_ : "" } + @known_platforms)); + } + $a2 = join(",", + grep(!/^$/, + map { $tag{"OPENSSL_SYS_".$_} == 1 ? $_ : "" } + @known_ossl_platforms)); + print STDERR "DEBUG: make_variant: a1 = $a1; a2 = $a2\n" if $debug; + if ($a1 eq "") { $a1 = $a2; } + elsif ($a1 ne "" && $a2 ne "") { $a1 .= ",".$a2; } + if ($a eq $s) + { + if (!defined($variant_cnt{$s})) + { + $variant_cnt{$s} = 0; + } + $variant_cnt{$s}++; + $a .= "{$variant_cnt{$s}}"; + } + if (defined($variant{$s})) { $variant{$s} .= ";"; } + $variant{$s} = $a.":".$a1; + if (defined($k)) { $variant{$s} .= ":$k"; } + print STDERR "DEBUG: make_variant: Exit with variant of ",$s," = ",$variant{$s},"\n" if $debug; + }; + + print STDERR "DEBUG: parsing ----------\n" if $debug; while() { last if (/BEGIN ERROR CODES/); if ($line ne '') { @@ -453,22 +514,10 @@ sub do_defs print STDERR "DEBUG: $file: found 0\n" if $debug; } elsif (/^\#\s*define\s+(\w+)\s+(\w+)/ && $symhacking && $tag{'TRUE'} != -1) { - my $s = $1; - my $a = $2; - my $a1 = join(",", - grep(!/^$/, - map { $tag{$_} == 1 ? - $_ : "" } - @known_platforms)); - my $a2 = join(",", - grep(!/^$/, - map { $tag{"OPENSSL_SYS_".$_} == 1 ? - $_ : "" } - @known_ossl_platforms)); - if ($a1 eq "") { $a1 = $a2; } - elsif ($a1 ne "" && $a2 ne "") { $a1 .= ",".$a2; } - $rename{$s} = $a.":".$a1; - print STDERR "DEBUG: $file: defined $s = $a\n" if $debug; + # This is for aliasing. When we find an alias, + # we have to invert + &$make_variant($1,$2); + print STDERR "DEBUG: $file: defined $1 = $2\n" if $debug; } if (/^\#/) { @current_platforms = @@ -497,41 +546,145 @@ sub do_defs } elsif (/^\s*DECLARE_ASN1_ENCODE_FUNCTIONS\s*\(\s*(\w*)\s*,\s*(\w*)\s*,\s*(\w*)\s*\)/) { $def .= "int d2i_$3(void);"; $def .= "int i2d_$3(void);"; + # Variant for platforms that do not + # have to access globale variables + # in shared libraries through functions + $def .= + "#INFO:" + .join(',',"!EXPORT_VAR_AS_FUNCTION",@current_platforms).":" + .join(',',@current_algorithms).";"; $def .= "OPENSSL_EXTERN int $2_it;"; + $def .= + "#INFO:" + .join(',',@current_platforms).":" + .join(',',@current_algorithms).";"; + # Variant for platforms that have to + # access globale variables in shared + # libraries through functions + &$make_variant("$2_it","$2_it", + "EXPORT_VAR_AS_FUNCTION", + "FUNCTION"); next; } elsif (/^\s*DECLARE_ASN1_FUNCTIONS_fname\s*\(\s*(\w*)\s*,\s*(\w*)\s*,\s*(\w*)\s*\)/) { $def .= "int d2i_$3(void);"; $def .= "int i2d_$3(void);"; $def .= "int $3_free(void);"; $def .= "int $3_new(void);"; + # Variant for platforms that do not + # have to access globale variables + # in shared libraries through functions + $def .= + "#INFO:" + .join(',',"!EXPORT_VAR_AS_FUNCTION",@current_platforms).":" + .join(',',@current_algorithms).";"; $def .= "OPENSSL_EXTERN int $2_it;"; + $def .= + "#INFO:" + .join(',',@current_platforms).":" + .join(',',@current_algorithms).";"; + # Variant for platforms that have to + # access globale variables in shared + # libraries through functions + &$make_variant("$2_it","$2_it", + "EXPORT_VAR_AS_FUNCTION", + "FUNCTION"); + next; } elsif (/^\s*DECLARE_ASN1_FUNCTIONS\s*\(\s*(\w*)\s*\)/ || /^\s*DECLARE_ASN1_FUNCTIONS_const\s*\(\s*(\w*)\s*\)/) { $def .= "int d2i_$1(void);"; $def .= "int i2d_$1(void);"; $def .= "int $1_free(void);"; $def .= "int $1_new(void);"; + # Variant for platforms that do not + # have to access globale variables + # in shared libraries through functions + $def .= + "#INFO:" + .join(',',"!EXPORT_VAR_AS_FUNCTION",@current_platforms).":" + .join(',',@current_algorithms).";"; $def .= "OPENSSL_EXTERN int $1_it;"; + $def .= + "#INFO:" + .join(',',@current_platforms).":" + .join(',',@current_algorithms).";"; + # Variant for platforms that have to + # access globale variables in shared + # libraries through functions + &$make_variant("$1_it","$1_it", + "EXPORT_VAR_AS_FUNCTION", + "FUNCTION"); next; } elsif (/^\s*DECLARE_ASN1_ENCODE_FUNCTIONS_const\s*\(\s*(\w*)\s*,\s*(\w*)\s*\)/) { $def .= "int d2i_$2(void);"; $def .= "int i2d_$2(void);"; + # Variant for platforms that do not + # have to access globale variables + # in shared libraries through functions + $def .= + "#INFO:" + .join(',',"!EXPORT_VAR_AS_FUNCTION",@current_platforms).":" + .join(',',@current_algorithms).";"; $def .= "OPENSSL_EXTERN int $2_it;"; + $def .= + "#INFO:" + .join(',',@current_platforms).":" + .join(',',@current_algorithms).";"; + # Variant for platforms that have to + # access globale variables in shared + # libraries through functions + &$make_variant("$2_it","$2_it", + "EXPORT_VAR_AS_FUNCTION", + "FUNCTION"); next; } elsif (/^\s*DECLARE_ASN1_FUNCTIONS_name\s*\(\s*(\w*)\s*,\s*(\w*)\s*\)/) { $def .= "int d2i_$2(void);"; $def .= "int i2d_$2(void);"; $def .= "int $2_free(void);"; $def .= "int $2_new(void);"; + # Variant for platforms that do not + # have to access globale variables + # in shared libraries through functions + $def .= + "#INFO:" + .join(',',"!EXPORT_VAR_AS_FUNCTION",@current_platforms).":" + .join(',',@current_algorithms).";"; $def .= "OPENSSL_EXTERN int $2_it;"; + $def .= + "#INFO:" + .join(',',@current_platforms).":" + .join(',',@current_algorithms).";"; + # Variant for platforms that have to + # access globale variables in shared + # libraries through functions + &$make_variant("$2_it","$2_it", + "EXPORT_VAR_AS_FUNCTION", + "FUNCTION"); next; - } elsif (/^\s*DECLARE_ASN1_ITEM\s*\(\s*(\w*)\s*,(\w*)\s*\)/) { + } elsif (/^\s*DECLARE_ASN1_ITEM\s*\(\s*(\w*)\s*\)/) { + # Variant for platforms that do not + # have to access globale variables + # in shared libraries through functions + $def .= + "#INFO:" + .join(',',"!EXPORT_VAR_AS_FUNCTION",@current_platforms).":" + .join(',',@current_algorithms).";"; $def .= "OPENSSL_EXTERN int $1_it;"; - next; - } elsif (/^\s*DECLARE_PKCS12_STACK_OF\s*\(\s*(\w*)\s*\)/) { + $def .= + "#INFO:" + .join(',',@current_platforms).":" + .join(',',@current_algorithms).";"; + # Variant for platforms that have to + # access globale variables in shared + # libraries through functions + &$make_variant("$1_it","$1_it", + "EXPORT_VAR_AS_FUNCTION", + "FUNCTION"); + print STDERR "DEBUG: after make_variant: variant of $1_it = ",$variant{"$1_it"},"\n" if $debug; next; } elsif (/^\s*DECLARE_ASN1_SET_OF\s*\(\s*(\w*)\s*\)/) { next; + } elsif (/^\s*DECLARE_PKCS12_STACK_OF\s*\(\s*(\w*)\s*\)/) { + next; } elsif (/^DECLARE_PEM_rw\s*\(\s*(\w*)\s*,/ || /^DECLARE_PEM_rw_cb\s*\(\s*(\w*)\s*,/ ) { # Things not in Win16 @@ -579,6 +732,26 @@ sub do_defs # Things that are everywhere $def .= "int PEM_read_bio_$1(void);"; next; + } elsif (/^OPENSSL_DECLARE_GLOBAL\s*\(\s*(\w*)\s*,\s*(\w*)\s*\)/) { + # Variant for platforms that do not + # have to access globale variables + # in shared libraries through functions + $def .= + "#INFO:" + .join(',',"!EXPORT_VAR_AS_FUNCTION",@current_platforms).":" + .join(',',@current_algorithms).";"; + $def .= "OPENSSL_EXTERN int _shadow_$2;"; + $def .= + "#INFO:" + .join(',',@current_platforms).":" + .join(',',@current_algorithms).";"; + # Variant for platforms that have to + # access globale variables in shared + # libraries through functions + &$make_variant("_shadow_$2","_shadow_$2", + "EXPORT_VAR_AS_FUNCTION", + "FUNCTION"); + print STDERR "DEBUG: after make_variant: variant of $1_it = ",$variant{"$1_it"},"\n" if $debug; } elsif ($tag{'CONST_STRICT'} != 1) { if (/\{|\/\*|\([^\)]*$/) { $line = $_; @@ -593,6 +766,7 @@ sub do_defs my $algs; my $plays; + print STDERR "DEBUG: postprocessing ----------\n" if $debug; foreach (split /;/, $def) { my $s; my $k = "FUNCTION"; my $p; my $a; s/^[\n\s]*//g; @@ -601,25 +775,26 @@ sub do_defs next if(/typedef\W/); next if(/\#define/); + print STDERR "DEBUG: \$_ = \"$_\"\n" if $debug; if (/^\#INFO:([^:]*):(.*)$/) { $plats = $1; $algs = $2; next; - } elsif (/^\s*OPENSSL_EXTERN\s.*?(\w+)(\[[0-9]*\])*\s*$/) { + } elsif (/^\s*OPENSSL_EXTERN\s.*?(\w+(\{[0-9]+\})?)(\[[0-9]*\])*\s*$/) { $s = $1; $k = "VARIABLE"; - } elsif (/\(\*(\w*)\([^\)]+/) { + } elsif (/\(\*(\w*(\{[0-9]+\})?)\([^\)]+/) { $s = $1; } elsif (/\w+\W+(\w+)\W*\(\s*\)$/s) { # K&R C next; - } elsif (/\w+\W+\w+\W*\(.*\)$/s) { + } elsif (/\w+\W+\w+(\{[0-9]+\})?\W*\(.*\)$/s) { while (not /\(\)$/s) { s/[^\(\)]*\)$/\)/s; s/\([^\(\)]*\)\)$/\)/s; } s/\(void\)//; - /(\w+)\W*\(\)/s; + /(\w+(\{[0-9]+\})?)\W*\(\)/s; $s = $1; } elsif (/\(/ and not (/=/)) { print STDERR "File $file: cannot parse: $_;\n"; @@ -651,18 +826,22 @@ sub do_defs $a .= ",RSA" if($s =~ /RSAPrivateKey/); $a .= ",RSA" if($s =~ /SSLv23?_((client|server)_)?method/); - $platform{$s} .= ','.$p; + $platform{$s} = + &reduce_platforms((defined($platform{$s})?$platform{$s}.',':"").$p); $algorithm{$s} .= ','.$a; - if (defined($rename{$s})) { - (my $r, my $p) = split(/:/,$rename{$s}); - my @ip = map { /^!(.*)$/ ? $1 : "!".$_ } split /,/, $p; + if (defined($variant{$s})) { + (my $r, my $p, my $k) = split(/:/,$variant{$s}); + my $ip = join ',',map({ /^!(.*)$/ ? $1 : "!".$_ } split /,/, $p); $syms{$r} = 1; - $kind{$r} = $kind{$s}."(".$s.")"; + if (!defined($k)) { $k = $kind{$s}; } + $kind{$r} = $k."(".$s.")"; $algorithm{$r} = $algorithm{$s}; - $platform{$r} = $platform{$s}.",".$p; - $platform{$s} .= ','.join(',', @ip).','.join(',', @ip); + $platform{$r} = &reduce_platforms($platform{$s}.",".$p.",".$p); + $platform{$s} = &reduce_platforms($platform{$s}.','.$ip.','.$ip); + print STDERR "DEBUG: \$variant{\"$s\"} = ",$variant{$s},"; \$r = $r; \$p = ",$platform{$r},"; \$a = ",$algorithm{$r},"; \$kind = ",$kind{$r},"\n" if $debug; } + print STDERR "DEBUG: \$s = $s; \$p = ",$platform{$s},"; \$a = ",$algorithm{$s},"; \$kind = ",$kind{$s},"\n" if $debug; } } @@ -690,16 +869,16 @@ sub do_defs return(@ret); } -sub info_string { - (my $symbol, my $exist, my $platforms, my $kind, my $algorithms) = @_; - - my %a = defined($algorithms) ? - map { $_ => 1 } split /,/, $algorithms : (); +# Param: string of comma-separated platform-specs. +sub reduce_platforms +{ + my ($platforms) = @_; my $pl = defined($platforms) ? $platforms : ""; my %p = map { $_ => 0 } split /,/, $pl; - my $k = defined($kind) ? $kind : "FUNCTION"; my $ret; + print STDERR "DEBUG: Entered reduce_platforms with \"$platforms\"\n" + if $debug; # We do this, because if there's code like the following, it really # means the function exists in all cases and should therefore be # everywhere. By increasing and decreasing, we may attain 0: @@ -721,12 +900,28 @@ sub info_string { } delete $p{""}; + + $ret = join(',',map { $p{$_} < 0 ? "!".$_ : $_ } keys %p); + print STDERR "DEBUG: Exiting reduce_platforms with \"$ret\"\n" + if $debug; + return $ret; +} + +sub info_string { + (my $symbol, my $exist, my $platforms, my $kind, my $algorithms) = @_; + + my %a = defined($algorithms) ? + map { $_ => 1 } split /,/, $algorithms : (); + my $k = defined($kind) ? $kind : "FUNCTION"; + my $ret; + my $p = &reduce_platforms($platforms); + delete $a{""}; $ret = $exist; - $ret .= ":".join(',',map { $p{$_} < 0 ? "!".$_ : $_ } keys %p); + $ret .= ":".$p; $ret .= ":".$k; - $ret .= ":".join(',',keys %a); + $ret .= ":".join(',',sort keys %a); return $ret; } @@ -739,8 +934,8 @@ sub maybe_add_info { print STDERR "Updating $name info\n"; foreach $sym (@symbols) { (my $s, my $i) = split /\\/, $sym; - $i =~ s/^(.*?:.*?:\w+)(\(\w+\))?/$1/; if (defined($nums{$s})) { + $i =~ s/^(.*?:.*?:\w+)(\(\w+\))?/$1/; (my $n, my $dummy) = split /\\/, $nums{$s}; if (!defined($dummy) || $i ne $dummy) { $nums{$s} = $n."\\".$i; @@ -748,15 +943,15 @@ sub maybe_add_info { print STDERR "DEBUG: maybe_add_info for $s: \"$dummy\" => \"$i\"\n" if $debug; } } - $syms{sym} = 1; + $syms{$s} = 1; } my @s=sort { &parse_number($nums{$a},"n") <=> &parse_number($nums{$b},"n") } keys %nums; foreach $sym (@s) { (my $n, my $i) = split /\\/, $nums{$sym}; - if (!defined($syms{sym})) { + if (!defined($syms{$sym}) && $i !~ /^NOEXIST:/) { $new_info++; - print STDERR "DEBUG: maybe_add_info for $sym: -> undefined\n if $debug"; + print STDERR "DEBUG: maybe_add_info for $sym: -> undefined\n" if $debug; } } if ($new_info) { @@ -769,35 +964,112 @@ sub maybe_add_info { } } +# Param: string of comma-separated keywords, each possibly prefixed with a "!" +sub is_valid +{ + my ($keywords_txt,$platforms) = @_; + my (@keywords) = split /,/,$keywords_txt; + my ($falsesum, $truesum) = (0, !grep(/^[^!]/,@keywords)); + + # Param: one keyword + sub recognise + { + my ($keyword,$platforms) = @_; + + if ($platforms) { + # platforms + if ($keyword eq "VMS" && $VMS) { return 1; } + if ($keyword eq "WIN32" && $W32) { return 1; } + if ($keyword eq "WIN16" && $W16) { return 1; } + if ($keyword eq "WINNT" && $NT) { return 1; } + # Special platforms: + # EXPORT_VAR_AS_FUNCTION means that global variables + # will be represented as functions. This currently + # only happens on VMS-VAX. + if ($keyword eq "EXPORT_VAR_AS_FUNCTION" && $VMSVAX) { + return 1; + } + return 0; + } else { + # algorithms + if ($keyword eq "RC2" && $no_rc2) { return 0; } + if ($keyword eq "RC4" && $no_rc4) { return 0; } + if ($keyword eq "RC5" && $no_rc5) { return 0; } + if ($keyword eq "IDEA" && $no_idea) { return 0; } + if ($keyword eq "DES" && $no_des) { return 0; } + if ($keyword eq "BF" && $no_bf) { return 0; } + if ($keyword eq "CAST" && $no_cast) { return 0; } + if ($keyword eq "MD2" && $no_md2) { return 0; } + if ($keyword eq "MD4" && $no_md4) { return 0; } + if ($keyword eq "MD5" && $no_md5) { return 0; } + if ($keyword eq "SHA" && $no_sha) { return 0; } + if ($keyword eq "RIPEMD" && $no_ripemd) { return 0; } + if ($keyword eq "MDC2" && $no_mdc2) { return 0; } + if ($keyword eq "RSA" && $no_rsa) { return 0; } + if ($keyword eq "DSA" && $no_dsa) { return 0; } + if ($keyword eq "DH" && $no_dh) { return 0; } + if ($keyword eq "HMAC" && $no_hmac) { return 0; } + if ($keyword eq "AES" && $no_aes) { return 0; } + if ($keyword eq "KRB5" && $no_krb5) { return 0; } + if ($keyword eq "FP_API" && $no_fp_api) { return 0; } + + # Nothing recognise as true + return 1; + } + } + + foreach $k (@keywords) { + if ($k =~ /^!(.*)$/) { + $falsesum += &recognise($1,$platforms); + } else { + $truesum += &recognise($k,$platforms); + } + } + print STDERR "DEBUG: [",$#keywords,",",$#keywords < 0,"] is_valid($keywords_txt) => (\!$falsesum) && $truesum = ",(!$falsesum) && $truesum,"\n" if $debug; + return (!$falsesum) && $truesum; +} + sub print_test_file { - (*OUT,my $name,*nums,my @symbols)=@_; + (*OUT,my $name,*nums,my $testall,my @symbols)=@_; my $n = 1; my @e; my @r; my $sym; my $prev = ""; my $prefSSLeay; - (@e)=grep(/^SSLeay\\.*?:.*?:FUNCTION/,@symbols); - (@r)=grep(/^\w+\\.*?:.*?:FUNCTION/ && !/^SSLeay\\.*?:.*?:FUNCTION/,@symbols); + (@e)=grep(/^SSLeay(\{[0-9]+\})?\\.*?:.*?:.*/,@symbols); + (@r)=grep(/^\w+(\{[0-9]+\})?\\.*?:.*?:.*/ && !/^SSLeay(\{[0-9]+\})?\\.*?:.*?:.*/,@symbols); @symbols=((sort @e),(sort @r)); foreach $sym (@symbols) { (my $s, my $i) = $sym =~ /^(.*?)\\(.*)$/; - if ($s ne $prev) { - if (!defined($nums{$s})) { - print STDERR "Warning: $s does not have a number assigned\n" - if(!$do_update); + my $v = 0; + $v = 1 if $i=~ /^.*?:.*?:VARIABLE/; + my $p = ($i =~ /^[^:]*:([^:]*):/,$1); + my $a = ($i =~ /^[^:]*:[^:]*:[^:]*:([^:]*)/,$1); + if (!defined($nums{$s})) { + print STDERR "Warning: $s does not have a number assigned\n" + if(!$do_update); + } elsif (is_valid($p,1) && is_valid($a,0)) { + my $s2 = ($s =~ /^(.*?)(\{[0-9]+\})?$/, $1); + if ($prev eq $s2) { + print OUT "\t/* The following has already appeared previously */\n"; + print STDERR "Warning: Symbol '",$s2,"' redefined. old=",($nums{$prev} =~ /^(.*?)\\/,$1),", new=",($nums{$s2} =~ /^(.*?)\\/,$1),"\n"; + } + $prev = $s2; # To warn about duplicates... + + ($nn,$ni)=($nums{$s2} =~ /^(.*?)\\(.*)$/); + if ($v) { + print OUT "\textern int $s2; /* type unknown */ /* $nn $ni */\n"; } else { - $n=$nums{$s}; - print OUT "\t$s();\n"; + print OUT "\textern int $s2(); /* type unknown */ /* $nn $ni */\n"; } } - $prev = $s; # To avoid duplicates... } } sub print_def_file { (*OUT,my $name,*nums,my @symbols)=@_; - my $n = 1; my @e; my @r; my @v; + my $n = 1; my @e; my @r; my @v; my $prev=""; if ($W32) { $name.="32"; } @@ -830,79 +1102,36 @@ EOF print "EXPORTS\n"; - (@e)=grep(/^SSLeay\\.*?:.*?:FUNCTION/,@symbols); - (@r)=grep(/^\w+\\.*?:.*?:FUNCTION/ && !/^SSLeay\\.*?:.*?:FUNCTION/,@symbols); - (@v)=grep(/^\w+\\.*?:.*?:VARIABLE/,@symbols); + (@e)=grep(/^SSLeay(\{[0-9]+\})?\\.*?:.*?:FUNCTION/,@symbols); + (@r)=grep(/^\w+(\{[0-9]+\})?\\.*?:.*?:FUNCTION/ && !/^SSLeay(\{[0-9]+\})?\\.*?:.*?:FUNCTION/,@symbols); + (@v)=grep(/^\w+(\{[0-9]+\})?\\.*?:.*?:VARIABLE/,@symbols); @symbols=((sort @e),(sort @r), (sort @v)); foreach $sym (@symbols) { (my $s, my $i) = $sym =~ /^(.*?)\\(.*)$/; my $v = 0; - $v = 1 if $sym=~ /^\w+\\.*?:.*?:VARIABLE/; + $v = 1 if $i =~ /^.*?:.*?:VARIABLE/; if (!defined($nums{$s})) { printf STDERR "Warning: $s does not have a number assigned\n" - if(!$do_update); + if(!$do_update); } else { - (my $n, my $i) = split /\\/, $nums{$s}; + (my $n, my $dummy) = split /\\/, $nums{$s}; my %pf = (); - my @p = split(/,/, ($i =~ /^[^:]*:([^:]*):/,$1)); - my @a = split(/,/, ($i =~ /^[^:]*:[^:]*:[^:]*:([^:]*)/,$1)); - # @p_purged must contain hardware platforms only - my @p_purged = (); - foreach $ptmp (@p) { - push @p_purged, $ptmp; - } - my $negatives = !!grep(/^!/,@p); - # It is very important to check NT before W32 - if ((($NT && (!@p_purged - || (!$negatives && grep(/^WINNT$/,@p)) - || ($negatives && !grep(/^!WINNT$/,@p)))) - || ($W32 && (!@p_purged - || (!$negatives && grep(/^WIN32$/,@p)) - || ($negatives && !grep(/^!WIN32$/,@p)))) - || ($W16 && (!@p_purged - || (!$negatives && grep(/^WIN16$/,@p)) - || ($negatives && !grep(/^!WIN16$/,@p))))) - && (!@a || (!$no_rc2 || !grep(/^RC2$/,@a))) - && (!@a || (!$no_rc4 || !grep(/^RC4$/,@a))) - && (!@a || (!$no_rc5 || !grep(/^RC5$/,@a))) - && (!@a || (!$no_idea || !grep(/^IDEA$/,@a))) - && (!@a || (!$no_des || !grep(/^DES$/,@a))) - && (!@a || (!$no_bf || !grep(/^BF$/,@a))) - && (!@a || (!$no_cast || !grep(/^CAST$/,@a))) - && (!@a || (!$no_md2 || !grep(/^MD2$/,@a))) - && (!@a || (!$no_md4 || !grep(/^MD4$/,@a))) - && (!@a || (!$no_md5 || !grep(/^MD5$/,@a))) - && (!@a || (!$no_sha || !grep(/^SHA$/,@a))) - && (!@a || (!$no_ripemd || !grep(/^RIPEMD$/,@a))) - && (!@a || (!$no_mdc2 || !grep(/^MDC2$/,@a))) - && (!@a || (!$no_rsa || !grep(/^RSA$/,@a))) - && (!@a || (!$no_dsa || !grep(/^DSA$/,@a))) - && (!@a || (!$no_dh || !grep(/^DH$/,@a))) - && (!@a || (!$no_hmac || !grep(/^HMAC$/,@a))) - && (!@a || (!$no_aes || !grep(/^AES$/,@a))) - && (!@a || (!$no_krb5 || !grep(/^KRB5$/,@a))) - && (!@a || (!$no_fp_api || !grep(/^FP_API$/,@a))) - ) { + my $p = ($i =~ /^[^:]*:([^:]*):/,$1); + my $a = ($i =~ /^[^:]*:[^:]*:[^:]*:([^:]*)/,$1); + if (is_valid($p,1) && is_valid($a,0)) { + my $s2 = ($s =~ /^(.*?)(\{[0-9]+\})?$/, $1); + if ($prev eq $s2) { + print STDERR "Warning: Symbol '",$s2,"' redefined. old=",($nums{$prev} =~ /^(.*?)\\/,$1),", new=",($nums{$s2} =~ /^(.*?)\\/,$1),"\n"; + } + $prev = $s2; # To warn about duplicates... if($v) { - printf OUT " %s%-40s@%-8d DATA\n",($W32)?"":"_",$s,$n; + printf OUT " %s%-40s@%-8d DATA\n",($W32)?"":"_",$s2,$n; } else { - printf OUT " %s%-40s@%d\n",($W32)?"":"_",$s,$n; + printf OUT " %s%-40s@%d\n",($W32)?"":"_",$s2,$n; } } -# print STDERR "DEBUG: \"$sym\" (@p):", -# " negatives:", $negatives, -# " 16:", !!($W16 && (!@p_purged -# || (!$negatives && grep(/^WIN16$/,@p)) -# || ($negatives && !grep(/^!WIN16$/,@p)))), -# " 32:", !!($W32 && (!@p_purged -# || (!$negatives && grep(/^WIN32$/,@p)) -# || ($negatives && !grep(/^!WIN32$/,@p)))), -# " NT:", !!($NT && (!@p_purged -# || (!$negatives && grep(/^WINNT$/,@p)) -# || ($negatives && !grep(/^!WINNT$/,@p)))), -# "\n"; } } printf OUT "\n"; @@ -916,6 +1145,7 @@ sub load_numbers $max_num = 0; $num_noinfo = 0; $prev = ""; + $prev_cnt = 0; open(IN,"<$name") || die "unable to open $name:$!\n"; while () { @@ -924,14 +1154,22 @@ sub load_numbers next if /^\s*$/; @a=split; if (defined $ret{$a[0]}) { - print STDERR "Warning: Symbol '",$a[0],"' redefined. old=",$ret{$a[0]},", new=",$a[1],"\n"; + # This is actually perfectly OK + #print STDERR "Warning: Symbol '",$a[0],"' redefined. old=",$ret{$a[0]},", new=",$a[1],"\n"; } if ($max_num > $a[1]) { print STDERR "Warning: Number decreased from ",$max_num," to ",$a[1],"\n"; } - if ($max_num == $a[1]) { + elsif ($max_num == $a[1]) { # This is actually perfectly OK #print STDERR "Warning: Symbol ",$a[0]," has same number as previous ",$prev,": ",$a[1],"\n"; + if ($a[0] eq $prev) { + $prev_cnt++; + $a[0] .= "{$prev_cnt}"; + } + } + else { + $prev_cnt = 0; } if ($#a < 2) { # Existence will be proven later, in do_defs @@ -973,7 +1211,7 @@ sub rewrite_numbers print STDERR "Rewriting $name\n"; - my @r = grep(/^\w+\\.*?:.*?:\w+\(\w+\)/,@symbols); + my @r = grep(/^\w+(\{[0-9]+\})?\\.*?:.*?:\w+\(\w+\)/,@symbols); my $r; my %r; my %rsyms; foreach $r (@r) { (my $s, my $i) = split /\\/, $r; @@ -992,15 +1230,19 @@ sub rewrite_numbers my @s=sort { &parse_number($nums{$a},"n") <=> &parse_number($nums{$b},"n") } keys %nums; foreach $sym (@s) { (my $n, my $i) = split /\\/, $nums{$sym}; - print STDERR "DEBUG: rewrite_numbers for sym = ",$sym,": i = ",$i,", n = ",$n,", rsym{sym} = ",$rsyms{$sym},"syms{sym} = ",$syms{$sym},"\n" if $debug; next if defined($i) && $i =~ /^.*?:.*?:\w+\(\w+\)/; next if defined($rsyms{$sym}); + print STDERR "DEBUG: rewrite_numbers for sym = ",$sym,": i = ",$i,", n = ",$n,", rsym{sym} = ",$rsyms{$sym},"syms{sym} = ",$syms{$sym},"\n" if $debug; $i="NOEXIST::FUNCTION:" if !defined($i) || $i eq "" || !defined($syms{$sym}); - printf OUT "%s%-40s%d\t%s\n","",$sym,$n,$i; + my $s2 = $sym; + $s2 =~ s/\{[0-9]+\}$//; + printf OUT "%s%-40s%d\t%s\n","",$s2,$n,$i; if (exists $r{$sym}) { (my $s, $i) = split /\\/,$r{$sym}; - printf OUT "%s%-40s%d\t%s\n","",$s,$n,$i; + my $s2 = $s; + $s2 =~ s/\{[0-9]+\}$//; + printf OUT "%s%-40s%d\t%s\n","",$s2,$n,$i; } } } @@ -1012,7 +1254,7 @@ sub update_numbers print STDERR "Updating $name numbers\n"; - my @r = grep(/^\w+\\.*?:.*?:\w+\(\w+\)/,@symbols); + my @r = grep(/^\w+(\{[0-9]+\})?\\.*?:.*?:\w+\(\w+\)/,@symbols); my $r; my %r; my %rsyms; foreach $r (@r) { (my $s, my $i) = split /\\/, $r; @@ -1030,9 +1272,12 @@ sub update_numbers if $i eq ""; if (!exists $nums{$s}) { $new_syms++; - printf OUT "%s%-40s%d\t%s\n","",$s, ++$start_num,$i; + my $s2 = $s; + $s2 =~ s/\{[0-9]+\}$//; + printf OUT "%s%-40s%d\t%s\n","",$s2, ++$start_num,$i; if (exists $r{$s}) { ($s, $i) = split /\\/,$r{$s}; + $s =~ s/\{[0-9]+\}$//; printf OUT "%s%-40s%d\t%s\n","",$s, $start_num,$i; } } diff --git a/util/ssleay.num b/util/ssleay.num index c335f90124..bc2c1fc9c2 100755 --- a/util/ssleay.num +++ b/util/ssleay.num @@ -21,7 +21,7 @@ SSL_CTX_use_PrivateKey_ASN1 23 EXIST::FUNCTION: SSL_CTX_use_PrivateKey_file 24 EXIST::FUNCTION:STDIO SSL_CTX_use_RSAPrivateKey 25 EXIST::FUNCTION:RSA SSL_CTX_use_RSAPrivateKey_ASN1 26 EXIST::FUNCTION:RSA -SSL_CTX_use_RSAPrivateKey_file 27 EXIST::FUNCTION:STDIO,RSA +SSL_CTX_use_RSAPrivateKey_file 27 EXIST::FUNCTION:RSA,STDIO SSL_CTX_use_certificate 28 EXIST::FUNCTION: SSL_CTX_use_certificate_ASN1 29 EXIST::FUNCTION: SSL_CTX_use_certificate_file 30 EXIST::FUNCTION:STDIO @@ -89,7 +89,7 @@ SSL_use_PrivateKey_ASN1 100 EXIST::FUNCTION: SSL_use_PrivateKey_file 101 EXIST::FUNCTION:STDIO SSL_use_RSAPrivateKey 102 EXIST::FUNCTION:RSA SSL_use_RSAPrivateKey_ASN1 103 EXIST::FUNCTION:RSA -SSL_use_RSAPrivateKey_file 104 EXIST::FUNCTION:STDIO,RSA +SSL_use_RSAPrivateKey_file 104 EXIST::FUNCTION:RSA,STDIO SSL_use_certificate 105 EXIST::FUNCTION: SSL_use_certificate_ASN1 106 EXIST::FUNCTION: SSL_use_certificate_file 107 EXIST::FUNCTION:STDIO @@ -208,7 +208,7 @@ kssl_ctx_free 257 EXIST::FUNCTION:KRB5 kssl_krb5_free_data_contents 258 EXIST::FUNCTION:KRB5 print_krb5_data 259 EXIST::FUNCTION:KRB5 kssl_ctx_setstring 260 EXIST::FUNCTION:KRB5 -SSL_CTX_has_matching_session_id 261 EXIST::FUNCTION: +SSL_CTX_has_matching_session_id 261 NOEXIST::FUNCTION: SSL_set_generate_session_id 262 EXIST::FUNCTION: SSL_CTX_set_generate_session_id 263 EXIST::FUNCTION: SSL_has_matching_session_id 264 EXIST::FUNCTION: