cvs: /opensa/openssl changes config configure e_os.h install install.com install.vms install.w32 license makefile.org makefile.ssl makevms.com minfo news readme /opensa/openssl/apps apps.c apps.h asn1pars.c ca.c ca.com ca.pl ca.sh ciphers.c crl.c crl2p7.c der_chop dgst.c dh.c dsa.c dsaparam.c enc.c errstr.c gendh.c gendsa.c genrsa.c makeapps.com makefile.ssl nseq.c openssl-vms.cnf openssl.c openssl.cnf pkcs12.c pkcs7.c pkcs8.c progs.h progs.pl req.c rsa.c s_client.c s_server.c s_time.c sess_id.c speed.c verify.c version.c x509.c /opensa/openssl/bugs sslv3 /opensa/openssl/certs ca-cert.pem pca-cert.pem /opensa/openssl/crypto buildinf.h cryptlib.c crypto-lib.com crypto.h ebcdic.h ex_data.c install.com makefile.ssl md32_common.h mem.c opensslconf.h opensslconf.h.in opensslv.h /opensa/openssl/crypto/asn1 a_bitstr.c a_bmp.c a_bytes.c a_digest.c a_dup.c a_enum.c a_gentm.c a_hdr.c a_i2d_fp.c a_int.c a_object.c a_octet.c a_print.c a_sign.c a_time.c a_type.c a_utctm.c a_utf8.c a_verify.c a_vis.c asn1.h asn1_err.c asn1_lib.c asn1_mac.h asn1_par.c d2i_dhp.c d2i_dsap.c d2i_pr.c d2i_r_pr.c d2i_r_pu.c d2i_s_pr.c d2i_s_pu.c evp_asn1.c f_enum.c f_int.c f_string.c i2d_dhp.c i2d_dsap.c i2d_r_pr.c i2d_r_pu.c i2d_s_pr.c i2d_s_pu.c makefile.ssl n_pkey.c p5_pbe.c p5_pbev2.c p7_dgst.c p7_enc.c p7_enc_c.c p7_evp.c p7_i_s.c p7_lib.c p7_recip.c p7_s_e.c p7_signd.c p7_signi.c p8_pkey.c t_crl.c t_pkey.c t_req.c t_x509.c x_algor.c x_attrib.c x_cinf.c x_crl.c x_exten.c x_info.c x_name.c x_pkey.c x_pubkey.c x_req.c x_sig.c x_spki.c x_val.c x_x509.c /opensa/openssl/crypto/bf bf_cbc.c bf_cfb64.c bf_ecb.c bf_enc.c bf_locl.h bf_ofb64.c bf_opts.c bf_pi.h bf_skey.c bfspeed.c bftest.c blowfish.h /opensa/openssl/crypto/bio b_dump.c b_print.c b_sock.c bf_buff.c bf_nbio.c bf_null.c bio.h bio_err.c bio_lib.c bss_acpt.c bss_bio.c bss_conn.c bss_file.c bss_log.c bss_mem.c bss_null.c bss_rtcp.c bss_sock.c makefile.ssl /opensa/openssl/crypto/bn bn.h bn_add.c bn_asm.c bn_div.c bn_err.c bn_exp.c bn_exp2.c bn_gcd.c bn_lcl.h bn_lib.c bn_mont.c bn_mul.c

Thu, 2 Mar 2000 12:10:31 -0800

dsr             Thu Mar  2 21:12:15 2000 EDT

  Modified files:
    /opensa/openssl     changes config configure e_os.h install install.com 
                        install.vms install.w32 license makefile.org 
                        makefile.ssl makevms.com minfo news readme 
    /opensa/openssl/apps        apps.c apps.h asn1pars.c ca.c ca.com ca.pl 
                                ca.sh ciphers.c crl.c crl2p7.c der_chop dgst.c 
                                dh.c dsa.c dsaparam.c enc.c errstr.c gendh.c 
                                gendsa.c genrsa.c makeapps.com makefile.ssl 
                                nseq.c openssl-vms.cnf openssl.c openssl.cnf 
                                pkcs12.c pkcs7.c pkcs8.c progs.h progs.pl 
                                req.c rsa.c s_client.c s_server.c s_time.c 
                                sess_id.c speed.c verify.c version.c x509.c 
    /opensa/openssl/bugs        sslv3 
    /opensa/openssl/certs       ca-cert.pem pca-cert.pem 
    /opensa/openssl/crypto      buildinf.h cryptlib.c crypto-lib.com 
                                crypto.h ebcdic.h ex_data.c install.com 
                                makefile.ssl md32_common.h mem.c 
                                opensslconf.h opensslconf.h.in opensslv.h 
    /opensa/openssl/crypto/asn1 a_bitstr.c a_bmp.c a_bytes.c a_digest.c 
                                a_dup.c a_enum.c a_gentm.c a_hdr.c 
                                a_i2d_fp.c a_int.c a_object.c a_octet.c 
                                a_print.c a_sign.c a_time.c a_type.c 
                                a_utctm.c a_utf8.c a_verify.c a_vis.c 
                                asn1.h asn1_err.c asn1_lib.c asn1_mac.h 
                                asn1_par.c d2i_dhp.c d2i_dsap.c 
                                d2i_pr.c d2i_r_pr.c d2i_r_pu.c 
                                d2i_s_pr.c d2i_s_pu.c evp_asn1.c 
                                f_enum.c f_int.c f_string.c i2d_dhp.c 
                                i2d_dsap.c i2d_r_pr.c i2d_r_pu.c 
                                i2d_s_pr.c i2d_s_pu.c makefile.ssl 
                                n_pkey.c p5_pbe.c p5_pbev2.c p7_dgst.c 
                                p7_enc.c p7_enc_c.c p7_evp.c p7_i_s.c 
                                p7_lib.c p7_recip.c p7_s_e.c p7_signd.c 
                                p7_signi.c p8_pkey.c t_crl.c t_pkey.c 
                                t_req.c t_x509.c x_algor.c x_attrib.c 
                                x_cinf.c x_crl.c x_exten.c x_info.c 
                                x_name.c x_pkey.c x_pubkey.c x_req.c 
                                x_sig.c x_spki.c x_val.c x_x509.c 
    /opensa/openssl/crypto/bf   bf_cbc.c bf_cfb64.c bf_ecb.c bf_enc.c 
                                bf_locl.h bf_ofb64.c bf_opts.c bf_pi.h 
                                bf_skey.c bfspeed.c bftest.c blowfish.h 
    /opensa/openssl/crypto/bio  b_dump.c b_print.c b_sock.c bf_buff.c 
                                bf_nbio.c bf_null.c bio.h bio_err.c 
                                bio_lib.c bss_acpt.c bss_bio.c 
                                bss_conn.c bss_file.c bss_log.c 
                                bss_mem.c bss_null.c bss_rtcp.c 
                                bss_sock.c makefile.ssl 
    /opensa/openssl/crypto/bn   bn.h bn_add.c bn_asm.c bn_div.c bn_err.c 
                                bn_exp.c bn_exp2.c bn_gcd.c bn_lcl.h 
                                bn_lib.c bn_mont.c bn_mul.c bn_prime.c 
                                bn_prime.h bn_prime.pl bn_print.c 
                                bn_rand.c bn_recp.c bn_sqr.c bn_word.c 
                                bnspeed.c bntest.c exp.c expspeed.c 
                                exptest.c makefile.ssl 
    /opensa/openssl/crypto/bn/asm       alpha.s mips3.s readme 
    /opensa/openssl/crypto/buffer       makefile.ssl 
    /opensa/openssl/crypto/cast c_ecb.c cast_lcl.h cast_s.h cast_spd.c 
                                castopts.c casttest.c 
    /opensa/openssl/crypto/comp comp.h 
    /opensa/openssl/crypto/conf conf.c conf.h 
    /opensa/openssl/crypto/des  cbc3_enc.c des.c des.h des_locl.h 
                                des_opts.c destest.c enc_read.c 
                                enc_writ.c fcrypt.c fcrypt_b.c 
                                makefile.ssl rand_key.c read_pwd.c 
                                rpc_enc.c set_key.c speed.c str2key.c 
                                supp.c 
    /opensa/openssl/crypto/dh   dh.h dh_check.c dh_gen.c dh_key.c 
                                dh_lib.c dhtest.c makefile.ssl 
    /opensa/openssl/crypto/dsa  dsa.h dsa_asn1.c dsa_err.c dsa_gen.c 
                                dsa_lib.c dsa_sign.c dsa_vrf.c dsatest.c 
                                makefile.ssl 
    /opensa/openssl/crypto/err  err.c err.h err_all.c makefile.ssl 
                                openssl.ec 
    /opensa/openssl/crypto/evp  bio_b64.c bio_enc.c bio_md.c bio_ok.c 
                                c_all.c e_cbc_3d.c e_cbc_d.c e_cfb_3d.c 
                                e_cfb_d.c e_ecb_3d.c e_ecb_d.c 
                                e_ofb_3d.c e_ofb_d.c e_xcbc_d.c encode.c 
                                evp.h evp_err.c evp_key.c evp_lib.c 
                                evp_pkey.c makefile.ssl p_lib.c p_open.c 
                                p_seal.c 
    /opensa/openssl/crypto/hmac hmac.c hmac.h hmactest.c 
    /opensa/openssl/crypto/idea idea_lcl.h idea_spd.c 
    /opensa/openssl/crypto/lhash        lhash.c lhash.h makefile.ssl 
    /opensa/openssl/crypto/md2  makefile.ssl md2.h md2_dgst.c md2_one.c 
                                md2test.c 
    /opensa/openssl/crypto/md5  makefile.ssl md5.h md5_dgst.c md5_locl.h 
                                md5_one.c md5test.c 
    /opensa/openssl/crypto/mdc2 makefile.ssl mdc2.h mdc2_one.c 
                                mdc2dgst.c mdc2test.c 
    /opensa/openssl/crypto/objects      makefile.ssl o_names.c obj_dat.c 
                                        obj_dat.h obj_dat.pl objects.h 
    /opensa/openssl/crypto/pem  pem.h pem_all.c pem_err.c pem_info.c 
                                pem_lib.c pem_seal.c 
    /opensa/openssl/crypto/perlasm      x86ms.pl x86unix.pl 
    /opensa/openssl/crypto/pkcs12       makefile.ssl p12_add.c p12_attr.c 
                                        p12_bags.c p12_crpt.c p12_decr.c 
                                        p12_init.c p12_key.c p12_kiss.c 
                                        p12_lib.c p12_mac.c p12_mutl.c 
                                        pk12err.c pkcs12.h 
    /opensa/openssl/crypto/pkcs7        bio_ber.c dec.c enc.c example.c 
                                        makefile.ssl pk7_doit.c pk7_lib.c 
                                        pkcs7.h pkcs7err.c sign.c verify.c 
    /opensa/openssl/crypto/rand makefile.ssl md_rand.c rand.h 
                                rand_lib.c randfile.c randtest.c 
    /opensa/openssl/crypto/rc2  rc2speed.c rc2test.c 
    /opensa/openssl/crypto/rc4  rc4.h rc4_enc.c rc4_skey.c rc4speed.c 
                                rc4test.c 
    /opensa/openssl/crypto/rc5  rc5speed.c rc5test.c 
    /opensa/openssl/crypto/ripemd       makefile.ssl ripemd.h rmd_dgst.c 
                                        rmd_locl.h rmd_one.c rmdtest.c 
    /opensa/openssl/crypto/ripemd/asm   rips.cpp rm-win32.asm rmd-586.pl 
    /opensa/openssl/crypto/rsa  makefile.ssl rsa.h rsa_eay.c rsa_err.c 
                                rsa_gen.c rsa_lib.c rsa_oaep.c rsa_pk1.c 
                                rsa_saos.c rsa_sign.c rsa_ssl.c 
    /opensa/openssl/crypto/sha  makefile.ssl sha.h sha1dgst.c sha1s.cpp 
                                sha1test.c sha_dgst.c sha_locl.h 
                                shatest.c 
    /opensa/openssl/crypto/sha/asm      s1-win32.asm sha1-586.pl 
    /opensa/openssl/crypto/stack        makefile.ssl stack.c stack.h 
    /opensa/openssl/crypto/threads      mttest.c th-lock.c 
    /opensa/openssl/crypto/txt_db       makefile.ssl txt_db.c 
    /opensa/openssl/crypto/x509 by_dir.c by_file.c makefile.ssl x509.h 
                                x509_cmp.c x509_d2.c x509_def.c 
                                x509_err.c x509_ext.c x509_lu.c 
                                x509_r2x.c x509_req.c x509_set.c 
                                x509_txt.c x509_v3.c x509_vfy.c 
                                x509_vfy.h x509name.c x_all.c 
    /opensa/openssl/crypto/x509v3       makefile.ssl v3_akey.c v3_alt.c 
                                        v3_bcons.c v3_bitst.c v3_conf.c 
                                        v3_cpols.c v3_crld.c v3_enum.c 
                                        v3_genn.c v3_ia5.c v3_int.c v3_lib.c 
                                        v3_pku.c v3_prn.c v3_skey.c 
                                        v3_sxnet.c v3_utl.c v3err.c x509v3.h 
    /opensa/openssl/demos       selfsign.c 
    /opensa/openssl/demos/bio   saccept.c sconnect.c 
    /opensa/openssl/demos/ssl   cli.cpp 
    /opensa/openssl/doc c-indentation.el openssl.txt readme ssleay.txt 
    /opensa/openssl/ms  bcb4.bat do_masm.bat do_ms.bat do_nasm.bat 
                        do_nt.bat libeay16.def libeay32.def mw.bat 
                        nt.mak ntdll.mak ssleay16.def ssleay32.def 
                        tenc.bat test.bat testenc.bat testpem.bat 
                        testss.bat tpem.bat w31dll.mak x86asm.bat 
    /opensa/openssl/rsaref      makefile.ssl rsaref.c 
    /opensa/openssl/ssl bio_ssl.c install.com makefile.ssl s23_clnt.c 
                        s23_lib.c s23_pkt.c s23_srvr.c s2_clnt.c 
                        s2_enc.c s2_lib.c s2_meth.c s2_pkt.c s2_srvr.c 
                        s3_both.c s3_clnt.c s3_enc.c s3_lib.c s3_pkt.c 
                        s3_srvr.c ssl-lib.com ssl.h ssl2.h ssl3.h 
                        ssl_asn1.c ssl_cert.c ssl_ciph.c ssl_err.c 
                        ssl_lib.c ssl_locl.h ssl_sess.c ssl_stat.c 
                        ssl_task.c ssl_txt.c ssltest.c t1_enc.c 
                        t1_lib.c tls1.h 
    /opensa/openssl/test        makefile.ssl maketests.com tcrl.com testca.com 
                                testenc.com testgen testgen.com tests.com 
                                testssl testssl.com tpkcs7.com tpkcs7d.com 
                                treq.com trsa.com tsid.com tx509.com 
    /opensa/openssl/util        domd libeay.num mkdef.pl mkerr.pl ssleay.num 
    /opensa/openssl/util/pl     bc-32.pl mingw32.pl vc-32.pl 
    /opensa/openssl/vms install.com vms_idhacks.h 
  Log:
  Switching to OpenSSL 0.9.5 (Part 1)
  
Index: opensa/openssl/changes
diff -u opensa/openssl/changes:1.1 opensa/openssl/changes:1.2
--- opensa/openssl/changes:1.1  Tue Jan 25 22:57:50 2000
+++ opensa/openssl/changes      Thu Mar  2 21:11:48 2000
@@ -2,6 +2,1104 @@
  OpenSSL CHANGES
  _______________
 
+ Changes between 0.9.4 and 0.9.5  [28 Feb 2000]
+
+  *) PKCS7_encrypt() was adding text MIME headers twice because they
+     were added manually and by SMIME_crlf_copy().
+     [Steve Henson]
+
+  *) In bntest.c don't call BN_rand with zero bits argument.
+     [Steve Henson, pointed out by Andrew W. Gray <[EMAIL PROTECTED]>]
+
+  *) BN_mul bugfix: In bn_mul_part_recursion() only the a>a[n] && b>b[n]
+     case was implemented. This caused BN_div_recp() to fail occasionally.
+     [Ulf Möller]
+
+  *) Add an optional second argument to the set_label() in the perl
+     assembly language builder. If this argument exists and is set
+     to 1 it signals that the assembler should use a symbol whose 
+     scope is the entire file, not just the current function. This
+     is needed with MASM which uses the format label:: for this scope.
+     [Steve Henson, pointed out by Peter Runestig <[EMAIL PROTECTED]>]
+
+  *) Change the ASN1 types so they are typedefs by default. Before
+     almost all types were #define'd to ASN1_STRING which was causing
+     STACK_OF() problems: you couldn't declare STACK_OF(ASN1_UTF8STRING)
+     for example.
+     [Steve Henson]
+
+  *) Change names of new functions to the new get1/get0 naming
+     convention: After 'get1', the caller owns a reference count
+     and has to call ..._free; 'get0' returns a pointer to some
+     data structure without incrementing reference counters.
+     (Some of the existing 'get' functions increment a reference
+     counter, some don't.)
+     Similarly, 'set1' and 'add1' functions increase reference
+     counters or duplicate objects.
+     [Steve Henson]
+
+  *) Allow for the possibility of temp RSA key generation failure:
+     the code used to assume it always worked and crashed on failure.
+     [Steve Henson]
+
+  *) Fix potential buffer overrun problem in BIO_printf().
+     [Ulf Möller, using public domain code by Patrick Powell; problem
+      pointed out by David Sacerdote <[EMAIL PROTECTED]>]
+
+  *) Support EGD <http://www.lothar.com/tech/crypto/>.  New functions
+     RAND_egd() and RAND_status().  In the command line application,
+     the EGD socket can be specified like a seed file using RANDFILE
+     or -rand.
+     [Ulf Möller]
+
+  *) Allow the string CERTIFICATE to be tolerated in PKCS#7 structures.
+     Some CAs (e.g. Verisign) distribute certificates in this form.
+     [Steve Henson]
+
+  *) Remove the SSL_ALLOW_ADH compile option and set the default cipher
+     list to exclude them. This means that no special compilation option
+     is needed to use anonymous DH: it just needs to be included in the
+     cipher list.
+     [Steve Henson]
+
+  *) Change the EVP_MD_CTX_type macro so its meaning consistent with
+     EVP_MD_type. The old functionality is available in a new macro called
+     EVP_MD_md(). Change code that uses it and update docs.
+     [Steve Henson]
+
+  *) ..._ctrl functions now have corresponding ..._callback_ctrl functions
+     where the 'void *' argument is replaced by a function pointer argument.
+     Previously 'void *' was abused to point to functions, which works on
+     many platforms, but is not correct.  As these functions are usually
+     called by macros defined in OpenSSL header files, most source code
+     should work without changes.
+     [Richard Levitte]
+
+  *) <openssl/opensslconf.h> (which is created by Configure) now contains
+     sections with information on -D... compiler switches used for
+     compiling the library so that applications can see them.  To enable
+     one of these sections, a pre-processor symbol OPENSSL_..._DEFINES
+     must be defined.  E.g.,
+        #define OPENSSL_ALGORITHM_DEFINES
+        #include <openssl/opensslconf.h>
+     defines all pertinent NO_<algo> symbols, such as NO_IDEA, NO_RSA, etc.
+     [Richard Levitte, Ulf and Bodo Möller]
+
+  *) Bugfix: Tolerate fragmentation and interleaving in the SSL 3/TLS
+     record layer.
+     [Bodo Moeller]
+
+  *) Change the 'other' type in certificate aux info to a STACK_OF
+     X509_ALGOR. Although not an AlgorithmIdentifier as such it has
+     the required ASN1 format: arbitrary types determined by an OID.
+     [Steve Henson]
+
+  *) Add some PEM_write_X509_REQ_NEW() functions and a command line
+     argument to 'req'. This is not because the function is newer or
+     better than others it just uses the work 'NEW' in the certificate
+     request header lines. Some software needs this.
+     [Steve Henson]
+
+  *) Reorganise password command line arguments: now passwords can be
+     obtained from various sources. Delete the PEM_cb function and make
+     it the default behaviour: i.e. if the callback is NULL and the
+     usrdata argument is not NULL interpret it as a null terminated pass
+     phrase. If usrdata and the callback are NULL then the pass phrase
+     is prompted for as usual.
+     [Steve Henson]
+
+  *) Add support for the Compaq Atalla crypto accelerator. If it is installed,
+     the support is automatically enabled. The resulting binaries will
+     autodetect the card and use it if present.
+     [Ben Laurie and Compaq Inc.]
+
+  *) Work around for Netscape hang bug. This sends certificate request
+     and server done in one record. Since this is perfectly legal in the
+     SSL/TLS protocol it isn't a "bug" option and is on by default. See
+     the bugs/SSLv3 entry for more info.
+     [Steve Henson]
+
+  *) HP-UX tune-up: new unified configs, HP C compiler bug workaround.
+     [Andy Polyakov]
+
+  *) Add -rand argument to smime and pkcs12 applications and read/write
+     of seed file.
+     [Steve Henson]
+
+  *) New 'passwd' tool for crypt(3) and apr1 password hashes.
+     [Bodo Moeller]
+
+  *) Add command line password options to the remaining applications.
+     [Steve Henson]
+
+  *) Bug fix for BN_div_recp() for numerators with an even number of
+     bits.
+     [Ulf Möller]
+
+  *) More tests in bntest.c, and changed test_bn output.
+     [Ulf Möller]
+
+  *) ./config recognizes MacOS X now.
+     [Andy Polyakov]
+
+  *) Bug fix for BN_div() when the first words of num and divsor are
+     equal (it gave wrong results if (rem=(n1-q*d0)&BN_MASK2) < d0).
+     [Ulf Möller]
+
+  *) Add support for various broken PKCS#8 formats, and command line
+     options to produce them.
+     [Steve Henson]
+
+  *) New functions BN_CTX_start(), BN_CTX_get() and BT_CTX_end() to
+     get temporary BIGNUMs from a BN_CTX.
+     [Ulf Möller]
+
+  *) Correct return values in BN_mod_exp_mont() and BN_mod_exp2_mont()
+     for p == 0.
+     [Ulf Möller]
+
+  *) Change the SSLeay_add_all_*() functions to OpenSSL_add_all_*() and
+     include a #define from the old name to the new. The original intent
+     was that statically linked binaries could for example just call
+     SSLeay_add_all_ciphers() to just add ciphers to the table and not
+     link with digests. This never worked becayse SSLeay_add_all_digests()
+     and SSLeay_add_all_ciphers() were in the same source file so calling
+     one would link with the other. They are now in separate source files.
+     [Steve Henson]
+
+  *) Add a new -notext option to 'ca' and a -pubkey option to 'spkac'.
+     [Steve Henson]
+
+  *) Use a less unusual form of the Miller-Rabin primality test (it used
+     a binary algorithm for exponentiation integrated into the Miller-Rabin
+     loop, our standard modexp algorithms are faster).
+     [Bodo Moeller]
+
+  *) Support for the EBCDIC character set completed.
+     [Martin Kraemer <[EMAIL PROTECTED]>]
+
+  *) Source code cleanups: use const where appropriate, eliminate casts,
+     use void * instead of char * in lhash.
+     [Ulf Möller] 
+
+  *) Bugfix: ssl3_send_server_key_exchange was not restartable
+     (the state was not changed to SSL3_ST_SW_KEY_EXCH_B, and because of
+     this the server could overwrite ephemeral keys that the client
+     has already seen).
+     [Bodo Moeller]
+
+  *) Turn DSA_is_prime into a macro that calls BN_is_prime,
+     using 50 iterations of the Rabin-Miller test.
+
+     DSA_generate_parameters now uses BN_is_prime_fasttest (with 50
+     iterations of the Rabin-Miller test as required by the appendix
+     to FIPS PUB 186[-1]) instead of DSA_is_prime.
+     As BN_is_prime_fasttest includes trial division, DSA parameter
+     generation becomes much faster.
+
+     This implies a change for the callback functions in DSA_is_prime
+     and DSA_generate_parameters: The callback function is called once
+     for each positive witness in the Rabin-Miller test, not just
+     occasionally in the inner loop; and the parameters to the
+     callback function now provide an iteration count for the outer
+     loop rather than for the current invocation of the inner loop.
+     DSA_generate_parameters additionally can call the callback
+     function with an 'iteration count' of -1, meaning that a
+     candidate has passed the trial division test (when q is generated 
+     from an application-provided seed, trial division is skipped).
+     [Bodo Moeller]
+
+  *) New function BN_is_prime_fasttest that optionally does trial
+     division before starting the Rabin-Miller test and has
+     an additional BN_CTX * argument (whereas BN_is_prime always
+     has to allocate at least one BN_CTX).
+     'callback(1, -1, cb_arg)' is called when a number has passed the
+     trial division stage.
+     [Bodo Moeller]
+
+  *) Fix for bug in CRL encoding. The validity dates weren't being handled
+     as ASN1_TIME.
+     [Steve Henson]
+
+  *) New -pkcs12 option to CA.pl script to write out a PKCS#12 file.
+     [Steve Henson]
+
+  *) New function BN_pseudo_rand().
+     [Ulf Möller]
+
+  *) Clean up BN_mod_mul_montgomery(): replace the broken (and unreadable)
+     bignum version of BN_from_montgomery() with the working code from
+     SSLeay 0.9.0 (the word based version is faster anyway), and clean up
+     the comments.
+     [Ulf Möller]
+
+  *) Avoid a race condition in s2_clnt.c (function get_server_hello) that
+     made it impossible to use the same SSL_SESSION data structure in
+     SSL2 clients in multiple threads.
+     [Bodo Moeller]
+
+  *) The return value of RAND_load_file() no longer counts bytes obtained
+     by stat().  RAND_load_file(..., -1) is new and uses the complete file
+     to seed the PRNG (previously an explicit byte count was required).
+     [Ulf Möller, Bodo Möller]
+
+  *) Clean up CRYPTO_EX_DATA functions, some of these didn't have prototypes
+     used (char *) instead of (void *) and had casts all over the place.
+     [Steve Henson]
+
+  *) Make BN_generate_prime() return NULL on error if ret!=NULL.
+     [Ulf Möller]
+
+  *) Retain source code compatibility for BN_prime_checks macro:
+     BN_is_prime(..., BN_prime_checks, ...) now uses
+     BN_prime_checks_for_size to determine the appropriate number of
+     Rabin-Miller iterations.
+     [Ulf Möller]
+
+  *) Diffie-Hellman uses "safe" primes: DH_check() return code renamed to
+     DH_CHECK_P_NOT_SAFE_PRIME.
+     (Check if this is true? OpenPGP calls them "strong".)
+     [Ulf Möller]
+
+  *) Merge the functionality of "dh" and "gendh" programs into a new program
+     "dhparam". The old programs are retained for now but will handle DH keys
+     (instead of parameters) in future.
+     [Steve Henson]
+
+  *) Make the ciphers, s_server and s_client programs check the return values
+     when a new cipher list is set.
+     [Steve Henson]
+
+  *) Enhance the SSL/TLS cipher mechanism to correctly handle the TLS 56bit
+     ciphers. Before when the 56bit ciphers were enabled the sorting was
+     wrong.
+
+     The syntax for the cipher sorting has been extended to support sorting by
+     cipher-strength (using the strength_bits hard coded in the tables).
+     The new command is "@STRENGTH" (see also doc/apps/ciphers.pod).
+
+     Fix a bug in the cipher-command parser: when supplying a cipher command
+     string with an "undefined" symbol (neither command nor alphanumeric
+     [A-Za-z0-9], ssl_set_cipher_list used to hang in an endless loop. Now
+     an error is flagged.
+
+     Due to the strength-sorting extension, the code of the
+     ssl_create_cipher_list() function was completely rearranged. I hope that
+     the readability was also increased :-)
+     [Lutz Jaenicke <[EMAIL PROTECTED]>]
+
+  *) Minor change to 'x509' utility. The -CAcreateserial option now uses 1
+     for the first serial number and places 2 in the serial number file. This
+     avoids problems when the root CA is created with serial number zero and
+     the first user certificate has the same issuer name and serial number
+     as the root CA.
+     [Steve Henson]
+
+  *) Fixes to X509_ATTRIBUTE utilities, change the 'req' program so it uses
+     the new code. Add documentation for this stuff.
+     [Steve Henson]
+
+  *) Changes to X509_ATTRIBUTE utilities. These have been renamed from
+     X509_*() to X509at_*() on the grounds that they don't handle X509
+     structures and behave in an analagous way to the X509v3 functions:
+     they shouldn't be called directly but wrapper functions should be used
+     instead.
+
+     So we also now have some wrapper functions that call the X509at functions
+     when passed certificate requests. (TO DO: similar things can be done with
+     PKCS#7 signed and unsigned attributes, PKCS#12 attributes and a few other
+     things. Some of these need some d2i or i2d and print functionality
+     because they handle more complex structures.)
+     [Steve Henson]
+
+  *) Add missing #ifndefs that caused missing symbols when building libssl
+     as a shared library without RSA.  Use #ifndef NO_SSL2 instead of
+     NO_RSA in ssl/s2*.c. 
+     [Kris Kennaway <[EMAIL PROTECTED]>, modified by Ulf Möller]
+
+  *) Precautions against using the PRNG uninitialized: RAND_bytes() now
+     has a return value which indicates the quality of the random data
+     (1 = ok, 0 = not seeded).  Also an error is recorded on the thread's
+     error queue. New function RAND_pseudo_bytes() generates output that is
+     guaranteed to be unique but not unpredictable. RAND_add is like
+     RAND_seed, but takes an extra argument for an entropy estimate
+     (RAND_seed always assumes full entropy).
+     [Ulf Möller]
+
+  *) Do more iterations of Rabin-Miller probable prime test (specifically,
+     3 for 1024-bit primes, 6 for 512-bit primes, 12 for 256-bit primes
+     instead of only 2 for all lengths; see BN_prime_checks_for_size definition
+     in crypto/bn/bn_prime.c for the complete table).  This guarantees a
+     false-positive rate of at most 2^-80 for random input.
+     [Bodo Moeller]
+
+  *) Rewrite ssl3_read_n (ssl/s3_pkt.c) avoiding a couple of bugs.
+     [Bodo Moeller]
+
+  *) New function X509_CTX_rget_chain() (renamed to X509_CTX_get1_chain
+     in the 0.9.5 release), this returns the chain
+     from an X509_CTX structure with a dup of the stack and all
+     the X509 reference counts upped: so the stack will exist
+     after X509_CTX_cleanup() has been called. Modify pkcs12.c
+     to use this.
+
+     Also make SSL_SESSION_print() print out the verify return
+     code.
+     [Steve Henson]
+
+  *) Add manpage for the pkcs12 command. Also change the default
+     behaviour so MAC iteration counts are used unless the new
+     -nomaciter option is used. This improves file security and
+     only older versions of MSIE (4.0 for example) need it.
+     [Steve Henson]
+
+  *) Honor the no-xxx Configure options when creating .DEF files.
+     [Ulf Möller]
+
+  *) Add PKCS#10 attributes to field table: challengePassword, 
+     unstructuredName and unstructuredAddress. These are taken from
+     draft PKCS#9 v2.0 but are compatible with v1.2 provided no 
+     international characters are used.
+
+     More changes to X509_ATTRIBUTE code: allow the setting of types
+     based on strings. Remove the 'loc' parameter when adding
+     attributes because these will be a SET OF encoding which is sorted
+     in ASN1 order.
+     [Steve Henson]
+
+  *) Initial changes to the 'req' utility to allow request generation
+     automation. This will allow an application to just generate a template
+     file containing all the field values and have req construct the
+     request.
+
+     Initial support for X509_ATTRIBUTE handling. Stacks of these are
+     used all over the place including certificate requests and PKCS#7
+     structures. They are currently handled manually where necessary with
+     some primitive wrappers for PKCS#7. The new functions behave in a
+     manner analogous to the X509 extension functions: they allow
+     attributes to be looked up by NID and added.
+
+     Later something similar to the X509V3 code would be desirable to
+     automatically handle the encoding, decoding and printing of the
+     more complex types. The string types like challengePassword can
+     be handled by the string table functions.
+
+     Also modified the multi byte string table handling. Now there is
+     a 'global mask' which masks out certain types. The table itself
+     can use the flag STABLE_NO_MASK to ignore the mask setting: this
+     is useful when for example there is only one permissible type
+     (as in countryName) and using the mask might result in no valid
+     types at all.
+     [Steve Henson]
+
+  *) Clean up 'Finished' handling, and add functions SSL_get_finished and
+     SSL_get_peer_finished to allow applications to obtain the latest
+     Finished messages sent to the peer or expected from the peer,
+     respectively.  (SSL_get_peer_finished is usually the Finished message
+     actually received from the peer, otherwise the protocol will be aborted.)
+
+     As the Finished message are message digests of the complete handshake
+     (with a total of 192 bits for TLS 1.0 and more for SSL 3.0), they can
+     be used for external authentication procedures when the authentication
+     provided by SSL/TLS is not desired or is not enough.
+     [Bodo Moeller]
+
+  *) Enhanced support for Alpha Linux is added. Now ./config checks if
+     the host supports BWX extension and if Compaq C is present on the
+     $PATH. Just exploiting of the BWX extension results in 20-30%
+     performance kick for some algorithms, e.g. DES and RC4 to mention
+     a couple. Compaq C in turn generates ~20% faster code for MD5 and
+     SHA1.
+     [Andy Polyakov]
+
+  *) Add support for MS "fast SGC". This is arguably a violation of the
+     SSL3/TLS protocol. Netscape SGC does two handshakes: the first with
+     weak crypto and after checking the certificate is SGC a second one
+     with strong crypto. MS SGC stops the first handshake after receiving
+     the server certificate message and sends a second client hello. Since
+     a server will typically do all the time consuming operations before
+     expecting any further messages from the client (server key exchange
+     is the most expensive) there is little difference between the two.
+
+     To get OpenSSL to support MS SGC we have to permit a second client
+     hello message after we have sent server done. In addition we have to
+     reset the MAC if we do get this second client hello.
+     [Steve Henson]
+
+  *) Add a function 'd2i_AutoPrivateKey()' this will automatically decide
+     if a DER encoded private key is RSA or DSA traditional format. Changed
+     d2i_PrivateKey_bio() to use it. This is only needed for the "traditional"
+     format DER encoded private key. Newer code should use PKCS#8 format which
+     has the key type encoded in the ASN1 structure. Added DER private key
+     support to pkcs8 application.
+     [Steve Henson]
+
+  *) SSL 3/TLS 1 servers now don't request certificates when an anonymous
+     ciphersuites has been selected (as required by the SSL 3/TLS 1
+     specifications).  Exception: When SSL_VERIFY_FAIL_IF_NO_PEER_CERT
+     is set, we interpret this as a request to violate the specification
+     (the worst that can happen is a handshake failure, and 'correct'
+     behaviour would result in a handshake failure anyway).
+     [Bodo Moeller]
+
+  *) In SSL_CTX_add_session, take into account that there might be multiple
+     SSL_SESSION structures with the same session ID (e.g. when two threads
+     concurrently obtain them from an external cache).
+     The internal cache can handle only one SSL_SESSION with a given ID,
+     so if there's a conflict, we now throw out the old one to achieve
+     consistency.
+     [Bodo Moeller]
+
+  *) Add OIDs for idea and blowfish in CBC mode. This will allow both
+     to be used in PKCS#5 v2.0 and S/MIME.  Also add checking to
+     some routines that use cipher OIDs: some ciphers do not have OIDs
+     defined and so they cannot be used for S/MIME and PKCS#5 v2.0 for
+     example.
+     [Steve Henson]
+
+  *) Simplify the trust setting structure and code. Now we just have
+     two sequences of OIDs for trusted and rejected settings. These will
+     typically have values the same as the extended key usage extension
+     and any application specific purposes.
+
+     The trust checking code now has a default behaviour: it will just
+     check for an object with the same NID as the passed id. Functions can
+     be provided to override either the default behaviour or the behaviour
+     for a given id. SSL client, server and email already have functions
+     in place for compatibility: they check the NID and also return "trusted"
+     if the certificate is self signed.
+     [Steve Henson]
+
+  *) Add d2i,i2d bio/fp functions for PrivateKey: these convert the
+     traditional format into an EVP_PKEY structure.
+     [Steve Henson]
+
+  *) Add a password callback function PEM_cb() which either prompts for
+     a password if usr_data is NULL or otherwise assumes it is a null
+     terminated password. Allow passwords to be passed on command line
+     environment or config files in a few more utilities.
+     [Steve Henson]
+
+  *) Add a bunch of DER and PEM functions to handle PKCS#8 format private
+     keys. Add some short names for PKCS#8 PBE algorithms and allow them
+     to be specified on the command line for the pkcs8 and pkcs12 utilities.
+     Update documentation.
+     [Steve Henson]
+
+  *) Support for ASN1 "NULL" type. This could be handled before by using
+     ASN1_TYPE but there wasn't any function that would try to read a NULL
+     and produce an error if it couldn't. For compatibility we also have
+     ASN1_NULL_new() and ASN1_NULL_free() functions but these are faked and
+     don't allocate anything because they don't need to.
+     [Steve Henson]
+
+  *) Initial support for MacOS is now provided. Examine INSTALL.MacOS
+     for details.
+     [Andy Polyakov, Roy Woods <[EMAIL PROTECTED]>]
+
+  *) Rebuild of the memory allocation routines used by OpenSSL code and
+     possibly others as well.  The purpose is to make an interface that
+     provide hooks so anyone can build a separate set of allocation and
+     deallocation routines to be used by OpenSSL, for example memory
+     pool implementations, or something else, which was previously hard
+     since Malloc(), Realloc() and Free() were defined as macros having
+     the values malloc, realloc and free, respectively (except for Win32
+     compilations).  The same is provided for memory debugging code.
+     OpenSSL already comes with functionality to find memory leaks, but
+     this gives people a chance to debug other memory problems.
+
+     With these changes, a new set of functions and macros have appeared:
+
+       CRYPTO_set_mem_debug_functions()                [F]
+       CRYPTO_get_mem_debug_functions()                [F]
+       CRYPTO_dbg_set_options()                        [F]
+       CRYPTO_dbg_get_options()                        [F]
+       CRYPTO_malloc_debug_init()              [M]
+
+     The memory debug functions are NULL by default, unless the library
+     is compiled with CRYPTO_MDEBUG or friends is defined.  If someone
+     wants to debug memory anyway, CRYPTO_malloc_debug_init() (which
+     gives the standard debugging functions that come with OpenSSL) or
+     CRYPTO_set_mem_debug_functions() (tells OpenSSL to use functions
+     provided by the library user) must be used.  When the standard
+     debugging functions are used, CRYPTO_dbg_set_options can be used to
+     request additional information:
+     CRYPTO_dbg_set_options(V_CYRPTO_MDEBUG_xxx) corresponds to setting
+     the CRYPTO_MDEBUG_xxx macro when compiling the library.   
+
+     Also, things like CRYPTO_set_mem_functions will always give the
+     expected result (the new set of functions is used for allocation
+     and deallocation) at all times, regardless of platform and compiler
+     options.
+
+     To finish it up, some functions that were never use in any other
+     way than through macros have a new API and new semantic:
+
+       CRYPTO_dbg_malloc()
+       CRYPTO_dbg_realloc()
+       CRYPTO_dbg_free()
+
+     All macros of value have retained their old syntax.
+     [Richard Levitte and Bodo Moeller]
+
+  *) Some S/MIME fixes. The OID for SMIMECapabilities was wrong, the
+     ordering of SMIMECapabilities wasn't in "strength order" and there
+     was a missing NULL in the AlgorithmIdentifier for the SHA1 signature
+     algorithm.
+     [Steve Henson]
+
+  *) Some ASN1 types with illegal zero length encoding (INTEGER,
+     ENUMERATED and OBJECT IDENTIFIER) choked the ASN1 routines.
+     [Frans Heymans <[EMAIL PROTECTED]>, modified by Steve Henson]
+
+  *) Merge in my S/MIME library for OpenSSL. This provides a simple
+     S/MIME API on top of the PKCS#7 code, a MIME parser (with enough
+     functionality to handle multipart/signed properly) and a utility
+     called 'smime' to call all this stuff. This is based on code I
+     originally wrote for Celo who have kindly allowed it to be
+     included in OpenSSL.
+     [Steve Henson]
+
+  *) Add variants des_set_key_checked and des_set_key_unchecked of
+     des_set_key (aka des_key_sched).  Global variable des_check_key
+     decides which of these is called by des_set_key; this way
+     des_check_key behaves as it always did, but applications and
+     the library itself, which was buggy for des_check_key == 1,
+     have a cleaner way to pick the version they need.
+     [Bodo Moeller]
+
+  *) New function PKCS12_newpass() which changes the password of a
+     PKCS12 structure.
+     [Steve Henson]
+
+  *) Modify X509_TRUST and X509_PURPOSE so it also uses a static and
+     dynamic mix. In both cases the ids can be used as an index into the
+     table. Also modified the X509_TRUST_add() and X509_PURPOSE_add()
+     functions so they accept a list of the field values and the
+     application doesn't need to directly manipulate the X509_TRUST
+     structure.
+     [Steve Henson]
+
+  *) Modify the ASN1_STRING_TABLE stuff so it also uses bsearch and doesn't
+     need initialising.
+     [Steve Henson]
+
+  *) Modify the way the V3 extension code looks up extensions. This now
+     works in a similar way to the object code: we have some "standard"
+     extensions in a static table which is searched with OBJ_bsearch()
+     and the application can add dynamic ones if needed. The file
+     crypto/x509v3/ext_dat.h now has the info: this file needs to be
+     updated whenever a new extension is added to the core code and kept
+     in ext_nid order. There is a simple program 'tabtest.c' which checks
+     this. New extensions are not added too often so this file can readily
+     be maintained manually.
+
+     There are two big advantages in doing things this way. The extensions
+     can be looked up immediately and no longer need to be "added" using
+     X509V3_add_standard_extensions(): this function now does nothing.
+     [Side note: I get *lots* of email saying the extension code doesn't
+      work because people forget to call this function]
+     Also no dynamic allocation is done unless new extensions are added:
+     so if we don't add custom extensions there is no need to call
+     X509V3_EXT_cleanup().
+     [Steve Henson]
+
+  *) Modify enc utility's salting as follows: make salting the default. Add a
+     magic header, so unsalted files fail gracefully instead of just decrypting
+     to garbage. This is because not salting is a big security hole, so people
+     should be discouraged from doing it.
+     [Ben Laurie]
+
+  *) Fixes and enhancements to the 'x509' utility. It allowed a message
+     digest to be passed on the command line but it only used this
+     parameter when signing a certificate. Modified so all relevant
+     operations are affected by the digest parameter including the
+     -fingerprint and -x509toreq options. Also -x509toreq choked if a
+     DSA key was used because it didn't fix the digest.
+     [Steve Henson]
+
+  *) Initial certificate chain verify code. Currently tests the untrusted
+     certificates for consistency with the verify purpose (which is set
+     when the X509_STORE_CTX structure is set up) and checks the pathlength.
+
+     There is a NO_CHAIN_VERIFY compilation option to keep the old behaviour:
+     this is because it will reject chains with invalid extensions whereas
+     every previous version of OpenSSL and SSLeay made no checks at all.
+
+     Trust code: checks the root CA for the relevant trust settings. Trust
+     settings have an initial value consistent with the verify purpose: e.g.
+     if the verify purpose is for SSL client use it expects the CA to be
+     trusted for SSL client use. However the default value can be changed to
+     permit custom trust settings: one example of this would be to only trust
+     certificates from a specific "secure" set of CAs.
+
+     Also added X509_STORE_CTX_new() and X509_STORE_CTX_free() functions
+     which should be used for version portability: especially since the
+     verify structure is likely to change more often now.
+
+     SSL integration. Add purpose and trust to SSL_CTX and SSL and functions
+     to set them. If not set then assume SSL clients will verify SSL servers
+     and vice versa.
+
+     Two new options to the verify program: -untrusted allows a set of
+     untrusted certificates to be passed in and -purpose which sets the
+     intended purpose of the certificate. If a purpose is set then the
+     new chain verify code is used to check extension consistency.
+     [Steve Henson]
+
+  *) Support for the authority information access extension.
+     [Steve Henson]
+
+  *) Modify RSA and DSA PEM read routines to transparently handle
+     PKCS#8 format private keys. New *_PUBKEY_* functions that handle
+     public keys in a format compatible with certificate
+     SubjectPublicKeyInfo structures. Unfortunately there were already
+     functions called *_PublicKey_* which used various odd formats so
+     these are retained for compatibility: however the DSA variants were
+     never in a public release so they have been deleted. Changed dsa/rsa
+     utilities to handle the new format: note no releases ever handled public
+     keys so we should be OK.
+
+     The primary motivation for this change is to avoid the same fiasco
+     that dogs private keys: there are several incompatible private key
+     formats some of which are standard and some OpenSSL specific and
+     require various evil hacks to allow partial transparent handling and
+     even then it doesn't work with DER formats. Given the option anything
+     other than PKCS#8 should be dumped: but the other formats have to
+     stay in the name of compatibility.
+
+     With public keys and the benefit of hindsight one standard format 
+     is used which works with EVP_PKEY, RSA or DSA structures: though
+     it clearly returns an error if you try to read the wrong kind of key.
+
+     Added a -pubkey option to the 'x509' utility to output the public key.
+     Also rename the EVP_PKEY_get_*() to EVP_PKEY_rget_*()
+     (renamed to EVP_PKEY_get1_*() in the OpenSSL 0.9.5 release) and add
+     EVP_PKEY_rset_*() functions (renamed to EVP_PKEY_set1_*())
+     that do the same as the EVP_PKEY_assign_*() except they up the
+     reference count of the added key (they don't "swallow" the
+     supplied key).
+     [Steve Henson]
+
+  *) Fixes to crypto/x509/by_file.c the code to read in certificates and
+     CRLs would fail if the file contained no certificates or no CRLs:
+     added a new function to read in both types and return the number
+     read: this means that if none are read it will be an error. The
+     DER versions of the certificate and CRL reader would always fail
+     because it isn't possible to mix certificates and CRLs in DER format
+     without choking one or the other routine. Changed this to just read
+     a certificate: this is the best we can do. Also modified the code
+     in apps/verify.c to take notice of return codes: it was previously
+     attempting to read in certificates from NULL pointers and ignoring
+     any errors: this is one reason why the cert and CRL reader seemed
+     to work. It doesn't check return codes from the default certificate
+     routines: these may well fail if the certificates aren't installed.
+     [Steve Henson]
+
+  *) Code to support otherName option in GeneralName.
+     [Steve Henson]
+
+  *) First update to verify code. Change the verify utility
+     so it warns if it is passed a self signed certificate:
+     for consistency with the normal behaviour. X509_verify
+     has been modified to it will now verify a self signed
+     certificate if *exactly* the same certificate appears
+     in the store: it was previously impossible to trust a
+     single self signed certificate. This means that:
+     openssl verify ss.pem
+     now gives a warning about a self signed certificate but
+     openssl verify -CAfile ss.pem ss.pem
+     is OK.
+     [Steve Henson]
+
+  *) For servers, store verify_result in SSL_SESSION data structure
+     (and add it to external session representation).
+     This is needed when client certificate verifications fails,
+     but an application-provided verification callback (set by
+     SSL_CTX_set_cert_verify_callback) allows accepting the session
+     anyway (i.e. leaves x509_store_ctx->error != X509_V_OK
+     but returns 1): When the session is reused, we have to set
+     ssl->verify_result to the appropriate error code to avoid
+     security holes.
+     [Bodo Moeller, problem pointed out by Lutz Jaenicke]
+
+  *) Fix a bug in the new PKCS#7 code: it didn't consider the
+     case in PKCS7_dataInit() where the signed PKCS7 structure
+     didn't contain any existing data because it was being created.
+     [Po-Cheng Chen <[EMAIL PROTECTED]>, slightly modified by Steve Henson]
+
+  *) Add a salt to the key derivation routines in enc.c. This
+     forms the first 8 bytes of the encrypted file. Also add a
+     -S option to allow a salt to be input on the command line.
+     [Steve Henson]
+
+  *) New function X509_cmp(). Oddly enough there wasn't a function
+     to compare two certificates. We do this by working out the SHA1
+     hash and comparing that. X509_cmp() will be needed by the trust
+     code.
+     [Steve Henson]
+
+  *) SSL_get1_session() is like SSL_get_session(), but increments
+     the reference count in the SSL_SESSION returned.
+     [Geoff Thorpe <[EMAIL PROTECTED]>]
+
+  *) Fix for 'req': it was adding a null to request attributes.
+     Also change the X509_LOOKUP and X509_INFO code to handle
+     certificate auxiliary information.
+     [Steve Henson]
+
+  *) Add support for 40 and 64 bit RC2 and RC4 algorithms: document
+     the 'enc' command.
+     [Steve Henson]
+
+  *) Add the possibility to add extra information to the memory leak
+     detecting output, to form tracebacks, showing from where each
+     allocation was originated: CRYPTO_push_info("constant string") adds
+     the string plus current file name and line number to a per-thread
+     stack, CRYPTO_pop_info() does the obvious, CRYPTO_remove_all_info()
+     is like calling CYRPTO_pop_info() until the stack is empty.
+     Also updated memory leak detection code to be multi-thread-safe.
+     [Richard Levitte]
+
+  *) Add options -text and -noout to pkcs7 utility and delete the
+     encryption options which never did anything. Update docs.
+     [Steve Henson]
+
+  *) Add options to some of the utilities to allow the pass phrase
+     to be included on either the command line (not recommended on
+     OSes like Unix) or read from the environment. Update the
+     manpages and fix a few bugs.
+     [Steve Henson]
+
+  *) Add a few manpages for some of the openssl commands.
+     [Steve Henson]
+
+  *) Fix the -revoke option in ca. It was freeing up memory twice,
+     leaking and not finding already revoked certificates.
+     [Steve Henson]
+
+  *) Extensive changes to support certificate auxiliary information.
+     This involves the use of X509_CERT_AUX structure and X509_AUX
+     functions. An X509_AUX function such as PEM_read_X509_AUX()
+     can still read in a certificate file in the usual way but it
+     will also read in any additional "auxiliary information". By
+     doing things this way a fair degree of compatibility can be
+     retained: existing certificates can have this information added
+     using the new 'x509' options. 
+
+     Current auxiliary information includes an "alias" and some trust
+     settings. The trust settings will ultimately be used in enhanced
+     certificate chain verification routines: currently a certificate
+     can only be trusted if it is self signed and then it is trusted
+     for all purposes.
+     [Steve Henson]
+
+  *) Fix assembler for Alpha (tested only on DEC OSF not Linux or *BSD).
+     The problem was that one of the replacement routines had not been working
+     since SSLeay releases.  For now the offending routine has been replaced
+     with non-optimised assembler.  Even so, this now gives around 95%
+     performance improvement for 1024 bit RSA signs.
+     [Mark Cox]
+
+  *) Hack to fix PKCS#7 decryption when used with some unorthodox RC2 
+     handling. Most clients have the effective key size in bits equal to
+     the key length in bits: so a 40 bit RC2 key uses a 40 bit (5 byte) key.
+     A few however don't do this and instead use the size of the decrypted key
+     to determine the RC2 key length and the AlgorithmIdentifier to determine
+     the effective key length. In this case the effective key length can still
+     be 40 bits but the key length can be 168 bits for example. This is fixed
+     by manually forcing an RC2 key into the EVP_PKEY structure because the
+     EVP code can't currently handle unusual RC2 key sizes: it always assumes
+     the key length and effective key length are equal.
+     [Steve Henson]
+
+  *) Add a bunch of functions that should simplify the creation of 
+     X509_NAME structures. Now you should be able to do:
+     X509_NAME_add_entry_by_txt(nm, "CN", MBSTRING_ASC, "Steve", -1, -1, 0);
+     and have it automatically work out the correct field type and fill in
+     the structures. The more adventurous can try:
+     X509_NAME_add_entry_by_txt(nm, field, MBSTRING_UTF8, str, -1, -1, 0);
+     and it will (hopefully) work out the correct multibyte encoding.
+     [Steve Henson]
+
+  *) Change the 'req' utility to use the new field handling and multibyte
+     copy routines. Before the DN field creation was handled in an ad hoc
+     way in req, ca, and x509 which was rather broken and didn't support
+     BMPStrings or UTF8Strings. Since some software doesn't implement
+     BMPStrings or UTF8Strings yet, they can be enabled using the config file
+     using the dirstring_type option. See the new comment in the default
+     openssl.cnf for more info.
+     [Steve Henson]
+
+  *) Make crypto/rand/md_rand.c more robust:
+     - Assure unique random numbers after fork().
+     - Make sure that concurrent threads access the global counter and
+       md serializably so that we never lose entropy in them
+       or use exactly the same state in multiple threads.
+       Access to the large state is not always serializable because
+       the additional locking could be a performance killer, and
+       md should be large enough anyway.
+     [Bodo Moeller]
+
+  *) New file apps/app_rand.c with commonly needed functionality
+     for handling the random seed file.
+
+     Use the random seed file in some applications that previously did not:
+          ca,
+          dsaparam -genkey (which also ignored its '-rand' option), 
+          s_client,
+          s_server,
+          x509 (when signing).
+     Except on systems with /dev/urandom, it is crucial to have a random
+     seed file at least for key creation, DSA signing, and for DH exchanges;
+     for RSA signatures we could do without one.
+
+     gendh and gendsa (unlike genrsa) used to read only the first byte
+     of each file listed in the '-rand' option.  The function as previously
+     found in genrsa is now in app_rand.c and is used by all programs
+     that support '-rand'.
+     [Bodo Moeller]
+
+  *) In RAND_write_file, use mode 0600 for creating files;
+     don't just chmod when it may be too late.
+     [Bodo Moeller]
+
+  *) Report an error from X509_STORE_load_locations
+     when X509_LOOKUP_load_file or X509_LOOKUP_add_dir failed.
+     [Bill Perry]
+
+  *) New function ASN1_mbstring_copy() this copies a string in either
+     ASCII, Unicode, Universal (4 bytes per character) or UTF8 format
+     into an ASN1_STRING type. A mask of permissible types is passed
+     and it chooses the "minimal" type to use or an error if not type
+     is suitable.
+     [Steve Henson]
+
+  *) Add function equivalents to the various macros in asn1.h. The old
+     macros are retained with an M_ prefix. Code inside the library can
+     use the M_ macros. External code (including the openssl utility)
+     should *NOT* in order to be "shared library friendly".
+     [Steve Henson]
+
+  *) Add various functions that can check a certificate's extensions
+     to see if it usable for various purposes such as SSL client,
+     server or S/MIME and CAs of these types. This is currently 
+     VERY EXPERIMENTAL but will ultimately be used for certificate chain
+     verification. Also added a -purpose flag to x509 utility to
+     print out all the purposes.
+     [Steve Henson]
+
+  *) Add a CRYPTO_EX_DATA to X509 certificate structure and associated
+     functions.
+     [Steve Henson]
+
+  *) New X509V3_{X509,CRL,REVOKED}_get_d2i() functions. These will search
+     for, obtain and decode and extension and obtain its critical flag.
+     This allows all the necessary extension code to be handled in a
+     single function call.
+     [Steve Henson]
+
+  *) RC4 tune-up featuring 30-40% performance improvement on most RISC
+     platforms. See crypto/rc4/rc4_enc.c for further details.
+     [Andy Polyakov]
+
+  *) New -noout option to asn1parse. This causes no output to be produced
+     its main use is when combined with -strparse and -out to extract data
+     from a file (which may not be in ASN.1 format).
+     [Steve Henson]
+
+  *) Fix for pkcs12 program. It was hashing an invalid certificate pointer
+     when producing the local key id.
+     [Richard Levitte <[EMAIL PROTECTED]>]
+
+  *) New option -dhparam in s_server. This allows a DH parameter file to be
+     stated explicitly. If it is not stated then it tries the first server
+     certificate file. The previous behaviour hard coded the filename
+     "server.pem".
+     [Steve Henson]
+
+  *) Add -pubin and -pubout options to the rsa and dsa commands. These allow
+     a public key to be input or output. For example:
+     openssl rsa -in key.pem -pubout -out pubkey.pem
+     Also added necessary DSA public key functions to handle this.
+     [Steve Henson]
+
+  *) Fix so PKCS7_dataVerify() doesn't crash if no certificates are contained
+     in the message. This was handled by allowing
+     X509_find_by_issuer_and_serial() to tolerate a NULL passed to it.
+     [Steve Henson, reported by Sampo Kellomaki <[EMAIL PROTECTED]>]
+
+  *) Fix for bug in d2i_ASN1_bytes(): other ASN1 functions add an extra null
+     to the end of the strings whereas this didn't. This would cause problems
+     if strings read with d2i_ASN1_bytes() were later modified.
+     [Steve Henson, reported by Arne Ansper <[EMAIL PROTECTED]>]
+
+  *) Fix for base64 decode bug. When a base64 bio reads only one line of
+     data and it contains EOF it will end up returning an error. This is
+     caused by input 46 bytes long. The cause is due to the way base64
+     BIOs find the start of base64 encoded data. They do this by trying a
+     trial decode on each line until they find one that works. When they
+     do a flag is set and it starts again knowing it can pass all the
+     data directly through the decoder. Unfortunately it doesn't reset
+     the context it uses. This means that if EOF is reached an attempt
+     is made to pass two EOFs through the context and this causes the
+     resulting error. This can also cause other problems as well. As is
+     usual with these problems it takes *ages* to find and the fix is
+     trivial: move one line.
+     [Steve Henson, reported by [EMAIL PROTECTED] (Ivan Nejgebauer) ]
+
+  *) Ugly workaround to get s_client and s_server working under Windows. The
+     old code wouldn't work because it needed to select() on sockets and the
+     tty (for keypresses and to see if data could be written). Win32 only
+     supports select() on sockets so we select() with a 1s timeout on the
+     sockets and then see if any characters are waiting to be read, if none
+     are present then we retry, we also assume we can always write data to
+     the tty. This isn't nice because the code then blocks until we've
+     received a complete line of data and it is effectively polling the
+     keyboard at 1s intervals: however it's quite a bit better than not
+     working at all :-) A dedicated Windows application might handle this
+     with an event loop for example.
+     [Steve Henson]
+
+  *) Enhance RSA_METHOD structure. Now there are two extra methods, rsa_sign
+     and rsa_verify. When the RSA_FLAGS_SIGN_VER option is set these functions
+     will be called when RSA_sign() and RSA_verify() are used. This is useful
+     if rsa_pub_dec() and rsa_priv_enc() equivalents are not available.
+     For this to work properly RSA_public_decrypt() and RSA_private_encrypt()
+     should *not* be used: RSA_sign() and RSA_verify() must be used instead.
+     This necessitated the support of an extra signature type NID_md5_sha1
+     for SSL signatures and modifications to the SSL library to use it instead
+     of calling RSA_public_decrypt() and RSA_private_encrypt().
+     [Steve Henson]
+
+  *) Add new -verify -CAfile and -CApath options to the crl program, these
+     will lookup a CRL issuers certificate and verify the signature in a
+     similar way to the verify program. Tidy up the crl program so it
+     no longer accesses structures directly. Make the ASN1 CRL parsing a bit
+     less strict. It will now permit CRL extensions even if it is not
+     a V2 CRL: this will allow it to tolerate some broken CRLs.
+     [Steve Henson]
+
+  *) Initialize all non-automatic variables each time one of the openssl
+     sub-programs is started (this is necessary as they may be started
+     multiple times from the "OpenSSL>" prompt).
+     [Lennart Bang, Bodo Moeller]
+
+  *) Preliminary compilation option RSA_NULL which disables RSA crypto without
+     removing all other RSA functionality (this is what NO_RSA does). This
+     is so (for example) those in the US can disable those operations covered
+     by the RSA patent while allowing storage and parsing of RSA keys and RSA
+     key generation.
+     [Steve Henson]
+
+  *) Non-copying interface to BIO pairs.
+     (still largely untested)
+     [Bodo Moeller]
+
+  *) New function ANS1_tag2str() to convert an ASN1 tag to a descriptive
+     ASCII string. This was handled independently in various places before.
+     [Steve Henson]
+
+  *) New functions UTF8_getc() and UTF8_putc() that parse and generate
+     UTF8 strings a character at a time.
+     [Steve Henson]
+
+  *) Use client_version from client hello to select the protocol
+     (s23_srvr.c) and for RSA client key exchange verification
+     (s3_srvr.c), as required by the SSL 3.0/TLS 1.0 specifications.
+     [Bodo Moeller]
+
+  *) Add various utility functions to handle SPKACs, these were previously
+     handled by poking round in the structure internals. Added new function
+     NETSCAPE_SPKI_print() to print out SPKAC and a new utility 'spkac' to
+     print, verify and generate SPKACs. Based on an original idea from
+     Massimiliano Pala <[EMAIL PROTECTED]> but extensively modified.
+     [Steve Henson]
+
+  *) RIPEMD160 is operational on all platforms and is back in 'make test'.
+     [Andy Polyakov]
+
+  *) Allow the config file extension section to be overwritten on the
+     command line. Based on an original idea from Massimiliano Pala
+     <[EMAIL PROTECTED]>. The new option is called -extensions
+     and can be applied to ca, req and x509. Also -reqexts to override
+     the request extensions in req and -crlexts to override the crl extensions
+     in ca.
+     [Steve Henson]
+
+  *) Add new feature to the SPKAC handling in ca.  Now you can include
+     the same field multiple times by preceding it by "XXXX." for example:
+     1.OU="Unit name 1"
+     2.OU="Unit name 2"
+     this is the same syntax as used in the req config file.
+     [Steve Henson]
+
+  *) Allow certificate extensions to be added to certificate requests. These
+     are specified in a 'req_extensions' option of the req section of the
+     config file. They can be printed out with the -text option to req but
+     are otherwise ignored at present.
+     [Steve Henson]
+
+  *) Fix a horrible bug in enc_read() in crypto/evp/bio_enc.c: if the first
+     data read consists of only the final block it would not decrypted because
+     EVP_CipherUpdate() would correctly report zero bytes had been decrypted.
+     A misplaced 'break' also meant the decrypted final block might not be
+     copied until the next read.
+     [Steve Henson]
+
+  *) Initial support for DH_METHOD. Again based on RSA_METHOD. Also added
+     a few extra parameters to the DH structure: these will be useful if
+     for example we want the value of 'q' or implement X9.42 DH.
+     [Steve Henson]
+
+  *) Initial support for DSA_METHOD. This is based on the RSA_METHOD and
+     provides hooks that allow the default DSA functions or functions on a
+     "per key" basis to be replaced. This allows hardware acceleration and
+     hardware key storage to be handled without major modification to the
+     library. Also added low level modexp hooks and CRYPTO_EX structure and 
+     associated functions.
+     [Steve Henson]
+
+  *) Add a new flag to memory BIOs, BIO_FLAG_MEM_RDONLY. This marks the BIO
+     as "read only": it can't be written to and the buffer it points to will
+     not be freed. Reading from a read only BIO is much more efficient than
+     a normal memory BIO. This was added because there are several times when
+     an area of memory needs to be read from a BIO. The previous method was
+     to create a memory BIO and write the data to it, this results in two
+     copies of the data and an O(n^2) reading algorithm. There is a new
+     function BIO_new_mem_buf() which creates a read only memory BIO from
+     an area of memory. Also modified the PKCS#7 routines to use read only
+     memory BIOs.
+     [Steve Henson]
+
+  *) Bugfix: ssl23_get_client_hello did not work properly when called in
+     state SSL23_ST_SR_CLNT_HELLO_B, i.e. when the first 7 bytes of
+     a SSLv2-compatible client hello for SSLv3 or TLSv1 could be read,
+     but a retry condition occured while trying to read the rest.
+     [Bodo Moeller]
+
+  *) The PKCS7_ENC_CONTENT_new() function was setting the content type as
+     NID_pkcs7_encrypted by default: this was wrong since this should almost
+     always be NID_pkcs7_data. Also modified the PKCS7_set_type() to handle
+     the encrypted data type: this is a more sensible place to put it and it
+     allows the PKCS#12 code to be tidied up that duplicated this
+     functionality.
+     [Steve Henson]
+
+  *) Changed obj_dat.pl script so it takes its input and output files on
+     the command line. This should avoid shell escape redirection problems
+     under Win32.
+     [Steve Henson]
+
+  *) Initial support for certificate extension requests, these are included
+     in things like Xenroll certificate requests. Included functions to allow
+     extensions to be obtained and added.
+     [Steve Henson]
+
+  *) -crlf option to s_client and s_server for sending newlines as
+     CRLF (as required by many protocols).
+     [Bodo Moeller]
+
  Changes between 0.9.3a and 0.9.4  [09 Aug 1999]
   
   *) Install libRSAglue.a when OpenSSL is built with RSAref.
@@ -49,9 +1147,9 @@
      method only got called if p,q,dmp1,dmq1,iqmp components were present,
      otherwise bn_mod_exp was called. In the case of hardware keys for example
      no private key components need be present and it might store extra data
-     in the RSA structure, which cannot be accessed from bn_mod_exp. By setting
-     RSA_FLAG_EXT_PKEY rsa_mod_exp will always be called for private key
-     operations.
+     in the RSA structure, which cannot be accessed from bn_mod_exp.
+     By setting RSA_FLAG_EXT_PKEY rsa_mod_exp will always be called for
+     private key operations.
      [Steve Henson]
 
   *) Added support for SPARC Linux.
@@ -65,7 +1163,7 @@
      The PEM[_ASN1]_{read,write}... functions and macros now take an
      additional void * argument, which is just handed through whenever
      the password callback is called.
-     [Damien Miller <[EMAIL PROTECTED]>, with tiny changes by Bodo Moeller]
+     [Damien Miller <[EMAIL PROTECTED]>; tiny changes by Bodo Moeller]
 
      New function SSL_CTX_set_default_passwd_cb_userdata.
 
Index: opensa/openssl/config
diff -u opensa/openssl/config:1.1 opensa/openssl/config:1.2
--- opensa/openssl/config:1.1   Tue Jan 25 22:57:51 2000
+++ opensa/openssl/config       Thu Mar  2 21:11:48 2000
@@ -27,6 +27,7 @@
 SYSTEM=`(uname -s) 2>/dev/null`  || SYSTEM="unknown"
 VERSION=`(uname -v) 2>/dev/null` || VERSION="unknown"
 
+
 # Now test for ISC and SCO, since it is has a braindamaged uname.
 #
 # We need to work around FreeBSD 1.1.5.1 
@@ -50,6 +51,8 @@
            4.2MP)
                if [ "x$VERSION" = "x2.1.1" ]; then
                    echo "${MACHINE}-whatever-unixware211"; exit 0
+               elif [ "x$VERSION" = "x2.1.2" ]; then
+                   echo "${MACHINE}-whatever-unixware212"; exit 0
                else
                    echo "${MACHINE}-whatever-unixware2"; exit 0
                fi
@@ -57,6 +60,11 @@
            4.2)
                echo "whatever-whatever-unixware1"; exit 0
                ;;
+           5)
+               if [ "`echo x$VERSION | sed -e 's/\..*//'`" = "x7" ]; then
+                   echo "${MACHINE}-sco-unixware7"; exit 0
+               fi
+               ;;
        esac
     fi
 fi
@@ -187,6 +195,10 @@
        echo "i860-intel-osf1"; exit 0
        ;;
 
+    Rhapsody:*)
+       echo "ppc-apple-rhapsody"; exit 0
+       ;;
+
     SunOS:5.*)
        echo "${MACHINE}-sun-solaris2"; exit 0
        ;;
@@ -311,7 +323,7 @@
 fi
 
 if [ "$SYSTEM" = "SunOS" ]; then
-  # assume output is "blah-blah C x.x"
+  # check for WorkShop C, expected output is "cc: blah-blah C x.x"
   CCVER=`(cc -V 2>&1) 2>/dev/null | \
        egrep -e '^cc: .* C [0-9]\.[0-9]' | \
        sed 's/.* C \([0-9]\)\.\([0-9]\).*/\1\2/'`
@@ -328,6 +340,19 @@
   fi
 fi
 
+if [ "${SYSTEM}-${MACHINE}" = "Linux-alpha" ]; then
+  # check for Compaq C, expected output is "blah-blah C Vx.x"
+  CCCVER=`(ccc -V 2>&1) 2>/dev/null | \
+       egrep -e '.* C V[0-9]\.[0-9]' | \
+       sed 's/.* C V\([0-9]\)\.\([0-9]\).*/\1\2/'`
+  CCCVER=${CCCVER:-0}
+  if [ $CCCVER -gt 60 ]; then
+    CC=ccc     # overrides gcc!!! well, ccc outperforms inoticeably
+               # only on hash routines and des, otherwise gcc (2.95)
+               # keeps along rather tight...
+  fi
+fi
+
 GCCVER=${GCCVER:-0}
 CCVER=${CCVER:-0}
 
@@ -340,9 +365,6 @@
 # script above so we end up with values in vars but that would take
 # more time that I want to waste at the moment
 case "$GUESSOS" in
-  alpha-*-linux2) OUT="alpha-gcc" ;;
-  ppc-*-linux2) OUT="linux-ppc" ;;
-  mips-*-linux?) OUT="linux-mips" ;;
   mips2-sgi-irix)
        CPU=`(hinv -t cpu) 2>/dev/null | sed 's/^CPU:[^R]*R\([0-9]*\).*/\1/'`
        CPU=${CPU:-0}
@@ -369,6 +391,23 @@
        options="$options -mips4"
        OUT="irix-mips3-$CC"
        ;;
+  alpha-*-linux2)
+        ISA=`awk '/cpu model/{print$4}' /proc/cpuinfo`
+       case ${ISA:-generic} in
+       *[67])  OUT="linux-alpha+bwx-$CC" ;;
+       *)      OUT="linux-alpha-$CC" ;;
+       esac
+       if [ "$CC" = "gcc" ]; then
+           case ${ISA:-generic} in
+           EV5|EV45)           options="$options -mcpu=ev5";;
+           EV56|PCA56)         options="$options -mcpu=ev56";;
+           EV6|EV67|PCA57)     options="$options -mcpu=ev6";;
+           esac
+       fi
+       ;;
+  mips-*-linux?) OUT="linux-mips" ;;
+  ppc-*-linux2) OUT="linux-ppc" ;;
+  ppc-apple-rhapsody) OUT="rhapsody-ppc-cc" ;;
   sparc64-*-linux2)
        #Before we can uncomment following lines we have to wait at least
        #till 64-bit glibc for SPARC is operational:-(
@@ -413,17 +452,30 @@
   *-*-openbsd) OUT="OpenBSD" ;;
   *86*-*-bsdi4) OUT="bsdi-elf-gcc" ;;
   *-*-osf) OUT="alpha-cc" ;;
-  *-*-unixware*) OUT="unixware-2.0" ;;
+  *-*-unixware7) OUT="unixware-7" ;;
+  *-*-UnixWare7) OUT="unixware-7" ;;
+  *-*-Unixware7) OUT="unixware-7" ;;
+  *-*-unixware[1-2]*) OUT="unixware-2.0" ;;
+  *-*-UnixWare[1-2]*) OUT="unixware-2.0" ;;
+  *-*-Unixware[1-2]*) OUT="unixware-2.0" ;;
   BS2000-siemens-sysv4) OUT="BS2000-OSD" ;;
   RM*-siemens-sysv4) OUT="ReliantUNIX" ;;
   *-siemens-sysv4) OUT="SINIX" ;;
+  *-hpux1*)    OUT="hpux-parisc-$CC"
+               options="$options -D_REENTRANT" ;;
+  *-hpux)      OUT="hpux-parisc-$CC" ;;
   # these are all covered by the catchall below
-  # *-hpux*) OUT="hpux-$CC" ;;
   # *-aix) OUT="aix-$CC" ;;
   # *-dgux) OUT="dgux" ;;
   *) OUT=`echo $GUESSOS | awk -F- '{print $3}'`;;
 esac
 
+# See whether we can compile Atalla support
+if [ -f /usr/include/atasi.h ]
+then
+  options="$options -DATALLA"
+fi
+
 # gcc < 2.8 does not support -mcpu=ultrasparc
 if [ "$OUT" = solaris-sparcv9-gcc -a $GCCVER -lt 28 ]
 then
@@ -438,6 +490,17 @@
   sleep 5
   OUT=linux-sparcv8
 fi
+# To start with $OUT is never i86pc-sun-solaris2. Secondly why
+# ban *all* assembler implementation if it can't stand only one,
+# SHA-0 implementation.
+#if [ "$OUT" = "i86pc-sun-solaris2" ]
+#then
+#  ASM=`as -V /dev/null 2>&1`
+#  case "$ASM" in
+#    GNU*) ;;
+#    *) options="$options no-asm" ; echo "WARNING: You need the GNU assembler to use 
+OpenSSL assembler code." ; echo "Sun as is not supported on Solaris x86." ;;
+#  esac
+#fi
 
 case "$GUESSOS" in
   i386-*) options="$options 386" ;;
@@ -484,14 +547,14 @@
 # compiler for the platform ... in which case we add it on
 # the end ... otherwise we leave it off
 
-$PERL ./Configure 2>&1 | grep "$OUT-$CC" > /dev/null
+$PERL ./Configure LIST | grep "$OUT-$CC" > /dev/null
 if [ $? = "0" ]; then
   OUT="$OUT-$CC"
 fi
 
 OUT="$PREFIX$OUT"
 
-$PERL ./Configure 2>&1 | grep "$OUT" > /dev/null
+$PERL ./Configure LIST | grep "$OUT" > /dev/null
 if [ $? = "0" ]; then
   echo Configuring for $OUT
 
Index: opensa/openssl/configure
diff -u opensa/openssl/configure:1.1 opensa/openssl/configure:1.2
--- opensa/openssl/configure:1.1        Tue Jan 25 22:57:51 2000
+++ opensa/openssl/configure    Thu Mar  2 21:11:48 2000
@@ -51,6 +51,10 @@
 # RC4_LONG     use 'long' instead of 'int' for RC4_INT in crypto/rc4/rc4.h
 # RC4_INDEX    define RC4_INDEX in crypto/rc4/rc4_locl.h.  This turns on
 #              array lookups instead of pointer use.
+# RC4_CHUNK    enables code that handles data aligned at long (natural CPU
+#              word) boundary.
+# RC4_CHUNK_LL enables code that handles data aligned at long long boundary
+#              (intended for 64-bit CPUs running 32-bit OS).
 # BF_PTR       use 'pointer arithmatic' for Blowfish (unsafe on Alpha).
 # BF_PTR2      intel specific version (generic version is more efficient).
 # MD5_ASM      use some extra md5 assember,
@@ -82,8 +86,8 @@
 # -DB_ENDIAN slows things down on a sparc for md5, but helps sha1.
 # So the md5_locl.h file has an undef B_ENDIAN if sun is defined
 
-#config-string CC : CFLAGS : LDFLAGS : special header file mods:bn_asm \
-# des_asm:bf_asm
+#config-string $cc : $cflags : $unistd : $thread_cflag : $lflags : $bn_ops : $bn_obj 
+: $des_obj : $bf_obj : $md5_obj : $sha1_obj : $cast_obj : $rc4_obj : $rmd160_obj : 
+$rc5_obj
+
 my %table=(
 #"b",          "$tcc:$tflags::$tlib:$bits1:$tbn_mul::",
 #"bl-4c-2c",   "$tcc:$tflags::$tlib:${bits1}BN_LLONG RC4_CHAR MD2_CHAR:$tbn_mul::",
@@ -92,80 +96,123 @@
 
 # Our development configs
 "purify",      "purify gcc:-g -DPURIFY -Wall::(unknown):-lsocket -lnsl::::",
-"debug",       "gcc:-DBN_DEBUG -DREF_CHECK -DCRYPTO_MDEBUG -ggdb -g2 -Wformat 
-Wshadow -Wmissing-prototypes -Wmissing-declarations -Werror::(unknown):-lefence::::",
-"debug-ben",   "gcc:-DBN_DEBUG -DREF_CHECK -DCRYPTO_MDEBUG -DPEDANTIC -O2 -pedantic 
-Wall -Wshadow -Werror -pipe::(unknown):::::",
-"debug-ben-debug",     "gcc:-DBN_DEBUG -DREF_CHECK -DCRYPTO_MDEBUG -g3 -O2 -pedantic 
-Wall -Wshadow -Werror -pipe::(unknown):::::",
-"debug-ben-strict",    "gcc:-DBN_DEBUG -DREF_CHECK -DCRYPTO_MDEBUG -DCONST_STRICT -O2 
-Wall -Wshadow -Werror -Wpointer-arith -Wcast-qual -Wwrite-strings 
-pipe::(unknown):::::",
+"debug",       "gcc:-DBN_DEBUG -DREF_CHECK -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -ggdb -g2 
+-Wformat -Wshadow -Wmissing-prototypes -Wmissing-declarations 
+-Werror::(unknown):-lefence::::",
+"debug-ben",   "gcc:-DBN_DEBUG -DREF_CHECK -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DPEDANTIC 
+-O2 -pedantic -Wall -Wshadow -Werror -pipe::(unknown):::::",
+"debug-ben-debug",     "gcc:-DBN_DEBUG -DREF_CHECK -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -g3 
+-O2 -pedantic -Wall -Wshadow -Werror -pipe::(unknown):::::",
+"debug-ben-strict",    "gcc:-DBN_DEBUG -DREF_CHECK -DBN_CTX_DEBUG -DCRYPTO_MDEBUG 
+-DCONST_STRICT -O2 -Wall -Wshadow -Werror -Wpointer-arith -Wcast-qual -Wwrite-strings 
+-pipe::(unknown):::::",
 "debug-rse","cc:-DTERMIOS -DL_ENDIAN -pipe -O -g -ggdb3 -Wall::(unknown)::BN_LLONG 
$x86_gcc_des $x86_gcc_opts:$x86_elf_asm",
-"debug-bodo",  "gcc:-DBIO_PAIR_DEBUG -DL_ENDIAN -DREF_CHECK -DCRYPTO_MDEBUG_ALL -g 
-m486 -Wall::-D_REENTRANT::BN_LLONG $x86_gcc_des $x86_gcc_opts:$x86_elf_asm",
+"debug-bodo",  "gcc:-DBIO_PAIR_DEBUG -DL_ENDIAN -DREF_CHECK -DBN_CTX_DEBUG 
+-DCRYPTO_MDEBUG_ALL -g -m486 -pedantic -Wshadow -Wall::-D_REENTRANT::BN_LLONG 
+$x86_gcc_des $x86_gcc_opts:$x86_elf_asm",
+"debug-ulf",   "gcc:-DL_ENDIAN -DREF_CHECK -DBN_DEBUG -DBN_CTX_DEBUG 
+-DCRYPTO_MDEBUG_ALL -g -O2 -m486 -Wall -Werror -Wshadow 
+-pipe::-D_REENTRANT::$x86_gcc_des $x86_gcc_opts:$x86_elf_asm",
+"debug-steve", "gcc:-DL_ENDIAN -DREF_CHECK -DBN_CTX_DEBUG -DCRYPTO_MDEBUG_ALL 
+-DPEDANTIC -g -O2 -m486 -pedantic -Wall -Werror -Wshadow 
+-pipe::-D_REENTRANT::$x86_gcc_des $x86_gcc_opts:$x86_elf_asm",
+"debug-levitte-linux-elf","gcc:-DRL_DEBUG -DREF_CHECK -DBN_CTX_DEBUG -DCRYPTO_MDEBUG 
+-DNO_ASM -DL_ENDIAN -DTERMIO -D_POSIX_SOURCE -ggdb -g3 -m486 -pedantic -ansi -Wall 
+-Wshadow -Wid-clash-31 -pipe::-D_REENTRANT:::",
 "dist",                "cc:-O::(unknown):::::",
 
-# Basic configs that should work on any box
+# Basic configs that should work on any (32 and less bit) box
 "gcc",         "gcc:-O3::(unknown)::BN_LLONG:::",
 "cc",          "cc:-O::(unknown):::::",
 
 #### Solaris x86 setups
-"solaris-x86-gcc","gcc:-O3 -fomit-frame-pointer -m486 -Wall 
-DL_ENDIAN::-D_REENTRANT:-lsocket -lnsl:BN_LLONG $x86_gcc_des 
$x86_gcc_opts:$x86_sol_asm",
+# -DNO_INLINE_ASM switches off inline assembler. We have to do it
+# here because whenever GNU C instantiates an assembler template it
+# surrounds it with #APP #NO_APP comment pair which (at least Solaris
+# 7_x86) /usr/ccs/bin/as fails to assemble with "Illegal mnemonic"
+# error message.
+"solaris-x86-gcc","gcc:-O3 -fomit-frame-pointer -m486 -Wall -DL_ENDIAN 
+-DNO_INLINE_ASM::-D_REENTRANT:-lsocket -lnsl:BN_LLONG $x86_gcc_des 
+$x86_gcc_opts:$x86_sol_asm",
 
 #### SPARC Solaris with GNU C setups
-"solaris-sparcv7-gcc","gcc:-O3 -fomit-frame-pointer -Wall -DB_ENDIAN 
-DBN_DIV2W::-D_REENTRANT:-lsocket -lnsl:BN_LLONG RC4_CHAR DES_UNROLL BF_PTR:::",
-"solaris-sparcv8-gcc","gcc:-mv8 -O3 -fomit-frame-pointer -Wall -DB_ENDIAN 
-DBN_DIV2W::-D_REENTRANT:-lsocket -lnsl:BN_LLONG RC4_CHAR DES_UNROLL 
BF_PTR:asm/sparcv8.o::",
-"solaris-sparcv9-gcc","gcc:-mcpu=ultrasparc -O3 -fomit-frame-pointer -Wall -DB_ENDIAN 
-DBN_DIV2W -DULTRASPARC::-D_REENTRANT:-lsocket -lnsl:BN_LLONG RC4_CHAR DES_UNROLL 
BF_PTR:asm/sparcv8plus.o:::asm/md5-sparcv8plus.o:",
+"solaris-sparcv7-gcc","gcc:-O3 -fomit-frame-pointer -Wall -DB_ENDIAN 
+-DBN_DIV2W::-D_REENTRANT:-lsocket -lnsl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL 
+BF_PTR:::",
+"solaris-sparcv8-gcc","gcc:-mv8 -O3 -fomit-frame-pointer -Wall -DB_ENDIAN 
+-DBN_DIV2W::-D_REENTRANT:-lsocket -lnsl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL 
+BF_PTR:asm/sparcv8.o::",
+"solaris-sparcv9-gcc","gcc:-mcpu=ultrasparc -O3 -fomit-frame-pointer -Wall -DB_ENDIAN 
+-DBN_DIV2W -DULTRASPARC::-D_REENTRANT:-lsocket -lnsl:BN_LLONG RC4_CHAR RC4_CHUNK 
+DES_UNROLL BF_PTR:asm/sparcv8plus.o:::asm/md5-sparcv8plus.o:",
 # gcc pre-2.8 doesn't understand -mcpu=ultrasparc, so fall down to -mv8
 # but keep the assembler modules.
-"solaris-sparcv9-gcc27","gcc:-mv8 -O3 -fomit-frame-pointer -Wall -DB_ENDIAN 
-DBN_DIV2W -DULTRASPARC::-D_REENTRANT:-lsocket -lnsl:BN_LLONG RC4_CHAR DES_UNROLL 
BF_PTR:asm/sparcv8plus-gcc27.o:::asm/md5-sparcv8plus-gcc27.o:",
+"solaris-sparcv9-gcc27","gcc:-mv8 -O3 -fomit-frame-pointer -Wall -DB_ENDIAN 
+-DBN_DIV2W -DULTRASPARC::-D_REENTRANT:-lsocket -lnsl:BN_LLONG RC4_CHAR RC4_CHUNK 
+DES_UNROLL BF_PTR:asm/sparcv8plus-gcc27.o:::asm/md5-sparcv8plus-gcc27.o:",
 ####
-"debug-solaris-sparcv8-gcc","gcc:-DREF_CHECK -DCRYPTO_MDEBUG_ALL -O -g -mv8 -Wall 
-DB_ENDIAN::-D_REENTRANT:-lsocket -lnsl:BN_LLONG RC4_CHAR DES_UNROLL BF_PTR:::",
-"debug-solaris-sparcv9-gcc","gcc:-DREF_CHECK -DCRYPTO_MDEBUG_ALL -O -g 
-mcpu=ultrasparc -Wall -DB_ENDIAN::-D_REENTRANT:-lsocket -lnsl:BN_LLONG RC4_CHAR 
DES_UNROLL BF_PTR:asm/sparcv8plus.o::",
+"debug-solaris-sparcv8-gcc","gcc:-DREF_CHECK -DBN_CTX_DEBUG -DCRYPTO_MDEBUG_ALL -O -g 
+-mv8 -Wall -DB_ENDIAN::-D_REENTRANT:-lsocket -lnsl:BN_LLONG RC4_CHAR RC4_CHUNK 
+DES_UNROLL BF_PTR:asm/sparcv8.o::",
+"debug-solaris-sparcv9-gcc","gcc:-DREF_CHECK -DBN_CTX_DEBUG -DCRYPTO_MDEBUG_ALL -O -g 
+-mcpu=ultrasparc -Wall -DB_ENDIAN::-D_REENTRANT:-lsocket -lnsl:BN_LLONG RC4_CHAR 
+RC4_CHUNK DES_UNROLL BF_PTR:asm/sparcv8plus.o::",
 
 #### SPARC Solaris with Sun C setups
 # DO NOT use /xO[34] on sparc with SC3.0.  It is broken, and will not pass the tests
-"solaris-sparc-sc3","cc:-fast -O -Xa -DB_ENDIAN::-D_REENTRANT:-lsocket -lnsl:BN_LLONG 
RC4_CHAR DES_PTR DES_UNROLL BF_PTR:::",
+"solaris-sparc-sc3","cc:-fast -O -Xa -DB_ENDIAN::-D_REENTRANT:-lsocket -lnsl:BN_LLONG 
+RC4_CHAR RC4_CHUNK DES_PTR DES_UNROLL BF_PTR:::",
 # SC4.0 doesn't pass 'make test', upgrade to SC5.0 or SC4.2.
 # SC4.2 is ok, better than gcc even on bn as long as you tell it -xarch=v8
 # SC5.0 note: Compiler common patch 107357-01 or later is required!
-"solaris-sparcv7-cc","cc:-xO5 -xstrconst -xdepend -Xa -DB_ENDIAN 
-DBN_DIV2W::-D_REENTRANT:-lsocket -lnsl:BN_LLONG RC4_CHAR DES_PTR DES_RISC1 DES_UNROLL 
BF_PTR:::",
-"solaris-sparcv8-cc","cc:-xarch=v8 -xO5 -xstrconst -xdepend -Xa -DB_ENDIAN 
-DBN_DIV2W::-D_REENTRANT:-lsocket -lnsl:BN_LLONG RC4_CHAR DES_PTR DES_RISC1 DES_UNROLL 
BF_PTR:asm/sparcv8.o::",
-"solaris-sparcv9-cc","cc:-xtarget=ultra -xarch=v8plus -xO5 -xstrconst -xdepend -Xa 
-DB_ENDIAN -DBN_DIV2W -DULTRASPARC::-D_REENTRANT:-lsocket -lnsl:BN_LLONG RC4_CHAR 
DES_PTR DES_RISC1 DES_UNROLL BF_PTR:asm/sparcv8plus.o:::asm/md5-sparcv8plus.o:",
-"solaris64-sparcv9-cc","cc:-xtarget=ultra -xarch=v9 -xO5 -xstrconst -xdepend -Xa 
-DB_ENDIAN -DULTRASPARC::-D_REENTRANT:-lsocket -lnsl:SIXTY_FOUR_BIT_LONG RC4_CHAR 
DES_INT DES_PTR DES_RISC1 DES_UNROLL BF_PTR::::asm/md5-sparcv9.o:",
+"solaris-sparcv7-cc","cc:-xO5 -xstrconst -xdepend -Xa -DB_ENDIAN 
+-DBN_DIV2W::-D_REENTRANT:-lsocket -lnsl:BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_RISC1 
+DES_UNROLL BF_PTR:::",
+"solaris-sparcv8-cc","cc:-xarch=v8 -xO5 -xstrconst -xdepend -Xa -DB_ENDIAN 
+-DBN_DIV2W::-D_REENTRANT:-lsocket -lnsl:BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_RISC1 
+DES_UNROLL BF_PTR:asm/sparcv8.o::",
+"solaris-sparcv9-cc","cc:-xtarget=ultra -xarch=v8plus -xO5 -xstrconst -xdepend -Xa 
+-DB_ENDIAN -DBN_DIV2W -DULTRASPARC::-D_REENTRANT:-lsocket -lnsl:BN_LLONG RC4_CHAR 
+RC4_CHUNK_LL DES_PTR DES_RISC1 DES_UNROLL 
+BF_PTR:asm/sparcv8plus.o:::asm/md5-sparcv8plus.o:",
+"solaris64-sparcv9-cc","cc:-xtarget=ultra -xarch=v9 -xO5 -xstrconst -xdepend -Xa 
+-DB_ENDIAN -DULTRASPARC::-D_REENTRANT:-lsocket -lnsl:SIXTY_FOUR_BIT_LONG RC4_CHAR 
+RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL BF_PTR::::asm/md5-sparcv9.o:",
+####
+"debug-solaris-sparcv8-cc","cc:-DREF_CHECK -DBN_CTX_DEBUG -DCRYPTO_MDEBUG_ALL 
+-xarch=v8 -g -O -xstrconst -Xa -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT:-lsocket 
+-lnsl:BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_RISC1 DES_UNROLL 
+BF_PTR:asm/sparcv8.o::",
+"debug-solaris-sparcv9-cc","cc:-DREF_CHECK -DBN_CTX_DEBUG -DCRYPTO_MDEBUG_ALL 
+-xtarget=ultra -xarch=v8plus -g -O -xstrconst -Xa -DB_ENDIAN -DBN_DIV2W 
+-DULTRASPARC::-D_REENTRANT:-lsocket -lnsl:BN_LLONG RC4_CHAR RC4_CHUNK_LL DES_PTR 
+DES_RISC1 DES_UNROLL BF_PTR:asm/sparcv8plus.o:::asm/md5-sparcv8plus.o:",
 
 #### SPARC Linux setups
-"linux-sparcv7","gcc:-DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer 
-Wall::-D_REENTRANT::BN_LLONG RC4_CHAR DES_UNROLL BF_PTR::",
+"linux-sparcv7","gcc:-DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer 
+-Wall::-D_REENTRANT::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR::",
 # Ray Miller <[EMAIL PROTECTED]> has patiently
 # assisted with debugging of following two configs.
-"linux-sparcv8","gcc:-mv8 -DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall 
-DBN_DIV2W::-D_REENTRANT::BN_LLONG RC4_CHAR DES_UNROLL BF_PTR:asm/sparcv8.o::::",
+"linux-sparcv8","gcc:-mv8 -DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall 
+-DBN_DIV2W::-D_REENTRANT::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL 
+BF_PTR:asm/sparcv8.o::::",
 # it's a real mess with -mcpu=ultrasparc option under Linux, but
 # -Wa,-Av8plus should do the trick no matter what.
-"linux-sparcv9","gcc:-mcpu=ultrasparc -DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer 
-Wall -Wa,-Av8plus -DULTRASPARC -DBN_DIV2W::-D_REENTRANT::BN_LLONG RC4_CHAR DES_UNROLL 
BF_PTR:asm/sparcv8plus.o:::asm/md5-sparcv8plus.o:",
+"linux-sparcv9","gcc:-mcpu=ultrasparc -DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer 
+-Wall -Wa,-Av8plus -DULTRASPARC -DBN_DIV2W::-D_REENTRANT::BN_LLONG RC4_CHAR RC4_CHUNK 
+DES_UNROLL BF_PTR:asm/sparcv8plus.o:::asm/md5-sparcv8plus.o:",
 # !!!Folowing can't be even tested yet!!!
 #    We have to wait till 64-bit glibc for SPARC is operational!!!
-#"linux64-sparcv9","sparc64-linux-gcc:-m64 -mcpu=v9 -DB_ENDIAN -DTERMIO -O3 
-fomit-frame-pointer -Wall -DULTRASPARC -DBN_DIV2W::-D_REENTRANT::BN_LLONG RC4_CHAR 
DES_UNROLL BF_PTR::::asm/md5-sparcv9.o:",
+#"linux64-sparcv9","sparc64-linux-gcc:-m64 -mcpu=v9 -DB_ENDIAN -DTERMIO -O3 
+-fomit-frame-pointer -Wall -DULTRASPARC -DBN_DIV2W::-D_REENTRANT::BN_LLONG RC4_CHAR 
+RC4_CHUNK DES_UNROLL BF_PTR::::asm/md5-sparcv9.o:",
 
 # Sunos configs, assuming sparc for the gcc one.
 ##"sunos-cc", "cc:-O4 -DNOPROTO -DNOCONST::(unknown)::DES_UNROLL:::",
-"sunos-gcc","gcc:-O3 -mv8::(unknown)::BN_LLONG RC4_CHAR DES_UNROLL DES_PTR 
DES_RISC1:::",
+"sunos-gcc","gcc:-O3 -mv8::(unknown)::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL DES_PTR 
+DES_RISC1:::",
 
 #### IRIX 5.x configs
 # -mips2 flag is added by ./config when appropriate.
-"irix-gcc","gcc:-O3 -DTERMIOS -DB_ENDIAN::(unknown)::BN_LLONG MD2_CHAR RC4_INDEX 
RC4_CHAR DES_UNROLL DES_RISC2 DES_PTR BF_PTR:::",
-"irix-cc", "cc:-O2 -use_readonly_const -DTERMIOS -DB_ENDIAN::(unknown)::BN_LLONG 
DES_PTR DES_RISC2 DES_UNROLL BF_PTR:::",
+"irix-gcc","gcc:-O3 -DTERMIOS -DB_ENDIAN::(unknown)::BN_LLONG MD2_CHAR RC4_INDEX 
+RC4_CHAR RC4_CHUNK DES_UNROLL DES_RISC2 DES_PTR BF_PTR:::",
+"irix-cc", "cc:-O2 -use_readonly_const -DTERMIOS -DB_ENDIAN::(unknown)::BN_LLONG 
+RC4_CHAR RC4_CHUNK DES_PTR DES_RISC2 DES_UNROLL BF_PTR:::",
 #### IRIX 6.x configs
 # Only N32 and N64 ABIs are supported. If you need O32 ABI build, invoke
 # './Configure irix-[g]cc' manually.
 # -mips4 flag is added by ./config when appropriate.
-"irix-mips3-gcc","gcc:-mabi=n32 -mmips-as -O3 -DTERMIOS 
-DB_ENDIAN::(unknown)::MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC2 DES_PTR BF_PTR 
SIXTY_FOUR_BIT:asm/mips3.o::",
-"irix-mips3-cc", "cc:-n32 -O2 -use_readonly_const -DTERMIOS 
-DB_ENDIAN::(unknown)::DES_PTR DES_RISC2 DES_UNROLL BF_PTR 
SIXTY_FOUR_BIT:asm/mips3.o::",
+"irix-mips3-gcc","gcc:-mabi=n32 -mmips-as -O3 -DTERMIOS -DB_ENDIAN 
+-DBN_DIV3W::(unknown)::MD2_CHAR RC4_INDEX RC4_CHAR RC4_CHUNK_LL DES_UNROLL DES_RISC2 
+DES_PTR BF_PTR SIXTY_FOUR_BIT:asm/mips3.o::",
+"irix-mips3-cc", "cc:-n32 -O2 -use_readonly_const -DTERMIOS -DB_ENDIAN 
+-DBN_DIV3W::(unknown)::DES_PTR RC4_CHAR RC4_CHUNK_LL DES_RISC2 DES_UNROLL BF_PTR 
+SIXTY_FOUR_BIT:asm/mips3.o::",
 # N64 ABI builds.
-"irix64-mips4-gcc","gcc:-mabi=64 -mips4 -mmips-as -O3 -DTERMIOS 
-DB_ENDIAN::(unknown)::DES_RISC2 DES_UNROLL SIXTY_FOUR_BIT_LONG:asm/mips3.o::",
-"irix64-mips4-cc", "cc:-64 -mips4 -O2 -use_readonly_const -DTERMIOS 
-DB_ENDIAN::(unknown)::DES_RISC2 DES_UNROLL SIXTY_FOUR_BIT_LONG:asm/mips3.o::",
+"irix64-mips4-gcc","gcc:-mabi=64 -mips4 -mmips-as -O3 -DTERMIOS -DB_ENDIAN 
+-DBN_DIV3W::(unknown)::RC4_CHAR RC4_CHUNK DES_RISC2 DES_UNROLL 
+SIXTY_FOUR_BIT_LONG:asm/mips3.o::",
+"irix64-mips4-cc", "cc:-64 -mips4 -O2 -use_readonly_const -DTERMIOS -DB_ENDIAN 
+-DBN_DIV3W::(unknown)::RC4_CHAR RC4_CHUNK DES_RISC2 DES_UNROLL 
+SIXTY_FOUR_BIT_LONG:asm/mips3.o::",
+
+#### Unified HP-UX ANSI C configs.
+# Special notes:
+# - Originally we were optimizing at +O4 level. It should be noted
+#   that the only difference between +O3 and +O4 is global inter-
+#   procedural analysis. As it has to be performed during the link
+#   stage the compiler leaves behind certain pseudo-code in lib*.a
+#   which might be release or even patch level specific. Generating
+#   the machine code for and analyzing the *whole* program appears
+#   to be *extremely* memory demanding while the performance gain is
+#   actually questionable. The situation is intensified by the default
+#   HP-UX data set size limit (infamous 'maxdsiz' tunable) of 64MB
+#   which is way too low for +O4. In other words, doesn't +O3 make
+#   more sense?
+# - Keep in mind that the HP compiler by default generates code
+#   suitable for execution on the host you're currently compiling at.
+#   If the toolkit is ment to be used on various PA-RISC processors
+#   consider './config +Dportable'.
+# - +DD64 is chosen in favour of +DA2.0W because it's ment to be
+#   compatible with *future* releases.
+# - If you run ./Configure hpux-parisc-[g]cc manually don't forget to
+#   pass -D_REENTRANT on HP-UX 10 and later.
+# - -DMD32_XARRAY triggers workaround for compiler bug we ran into in
+#   32-bit message digests. (For the moment of this writing) HP C
+#   doesn't seem to "digest" too many local variables (they make "him"
+#   chew forever:-). For more details look-up MD32_XARRAY comment in
+#   crypto/sha/sha_lcl.h.
+#                                      <[EMAIL PROTECTED]>
+#
+"hpux-parisc-cc","cc:-Ae +O3 +ESlit -z -DB_ENDIAN -DBN_DIV2W 
+-DMD32_XARRAY::::BN_LLONG DES_PTR DES_UNROLL DES_RISC1:::",
+"hpux-parisc-gcc","gcc:-O3 -DB_ENDIAN -DBN_DIV2W::::BN_LLONG DES_PTR DES_UNROLL 
+DES_RISC1:::",
+"hpux64-parisc-cc","cc:-Ae +DD64 +O3 +ESlit -z -DB_ENDIAN 
+-DMD32_XARRAY::-D_REENTRANT::SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX RC4_CHAR 
+DES_UNROLL DES_RISC1 DES_INT:::",
 
 # HPUX 9.X config.
 # Don't use the bundled cc.  It is broken.  Use HP ANSI C if possible, or
 # egcs.  gcc 2.8.1 is also broken.
 
-"hpux-cc",     "cc:-DB_ENDIAN -DBN_DIV2W -Ae +ESlit +O4 -z::(unknown)::BN_LLONG 
DES_PTR DES_UNROLL DES_RISC1:::",
+"hpux-cc",     "cc:-DB_ENDIAN -DBN_DIV2W -DMD32_XARRAY -Ae +ESlit +O3 
+-z::(unknown)::BN_LLONG DES_PTR DES_UNROLL DES_RISC1:::",
 # If hpux-cc fails (e.g. during "make test"), try the next one; otherwise,
-# please report your OS and compiler version to the [EMAIL PROTECTED]
+# please report your OS and compiler version to the [EMAIL PROTECTED]
 # mailing list.
 "hpux-brokencc",       "cc:-DB_ENDIAN -DBN_DIV2W -Ae +ESlit +O2 
-z::(unknown)::DES_PTR DES_UNROLL DES_RISC1:::",
 
@@ -174,7 +221,7 @@
 "hpux-brokengcc",      "gcc:-DB_ENDIAN -DBN_DIV2W -O3::(unknown)::DES_PTR DES_UNROLL 
DES_RISC1:::",
 
 # HPUX 10.X config.  Supports threads.
-"hpux10-cc",   "cc:-DB_ENDIAN -DBN_DIV2W -Ae +ESlit +O4 -z::-D_REENTRANT::BN_LLONG 
DES_PTR DES_UNROLL DES_RISC1:::",
+"hpux10-cc",   "cc:-DB_ENDIAN -DBN_DIV2W -DMD32_XARRAY -Ae +ESlit +O3 
+-z::-D_REENTRANT::BN_LLONG DES_PTR DES_UNROLL DES_RISC1:::",
 # If hpux10-cc fails, try this one (if still fails, try deleting BN_LLONG):
 "hpux10-brokencc",     "cc:-DB_ENDIAN -DBN_DIV2W -Ae +ESlit +O2 
-z::-D_REENTRANT::BN_LLONG DES_PTR DES_UNROLL DES_RISC1:::",
 
@@ -184,30 +231,46 @@
 
 # HPUX 11.X from www.globus.org.
 # Only works on PA-RISC 2.0 cpus, and not optimized.  Why?
-"hpux11-32bit-cc","cc:+DA2.0 -DB_ENDIAN -D_HPUX_SOURCE -Aa -Ae 
+ESlit::-D_REENTRANT::DES_PTR DES_UNROLL DES_RISC1:::",
-"hpux11-64bit-cc","cc:+DA2.0W -g -D_HPUX_SOURCE -Aa -Ae 
+ESlit::-D_REENTRANT::SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL 
DES_RISC1 DES_INT :::",
+#"hpux11-32bit-cc","cc:+DA2.0 -DB_ENDIAN -D_HPUX_SOURCE -Aa -Ae 
++ESlit::-D_REENTRANT::DES_PTR DES_UNROLL DES_RISC1:::",
+#"hpux11-64bit-cc","cc:+DA2.0W -g -D_HPUX_SOURCE -Aa -Ae 
++ESlit::-D_REENTRANT::SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL 
+DES_RISC1 DES_INT :::",
+# Use unified settings above instead.
 
 # Dec Alpha, OSF/1 - the alpha164-cc is the flags for a 21164A with
 # the new compiler
 # For gcc, the following gave a %50 speedup on a 164 over the 'DES_INT' version
-"alpha-gcc","gcc:-O3::(unknown)::SIXTY_FOUR_BIT_LONG DES_UNROLL DES_RISC1:::",
-"alpha-cc", "cc:-std1 -tune host -O4 
-readonly_strings::(unknown)::SIXTY_FOUR_BIT_LONG:::",
-"alpha164-cc", "cc:-std1 -tune host -fast 
-readonly_strings::(unknown)::SIXTY_FOUR_BIT_LONG:::",
-"FreeBSD-alpha","gcc:-DTERMIOS -O3 
-fomit-frame-pointer::(unknown)::SIXTY_FOUR_BIT_LONG DES_INT DES_PTR DES_RISC2:::",
+"alpha-gcc","gcc:-O3::(unknown)::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_UNROLL 
+DES_RISC1:asm/alpha.o::",
+"alpha-cc", "cc:-std1 -tune host -O4 
+-readonly_strings::(unknown)::SIXTY_FOUR_BIT_LONG RC4_CHUNK:asm/alpha.o::",
+"alpha164-cc", "cc:-std1 -tune host -fast 
+-readonly_strings::(unknown)::SIXTY_FOUR_BIT_LONG RC4_CHUNK:asm/alpha.o::",
+"FreeBSD-alpha","gcc:-DTERMIOS -O3 
+-fomit-frame-pointer::(unknown)::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_PTR 
+DES_RISC2:::",
+
+#### Alpha Linux with GNU C and Compaq C setups
+# Special notes:
+# - linux-alpha+bwx-gcc is ment to be used from ./config only. If you
+#   ought to run './Configure linux-alpha+bwx-gcc' manually, do
+#   complement the command line with -mcpu=ev56, -mcpu=ev6 or whatever
+#   which is appropriate.
+# - If you use ccc keep in mind that -fast implies -arch host and the
+#   compiler is free to issue instructions which gonna make elder CPU
+#   choke. If you wish to build "blended" toolkit, add -arch generic
+#   *after* -fast and invoke './Configure linux-alpha-ccc' manually.
+#
+#                                      <[EMAIL PROTECTED]>
+#
+"linux-alpha-gcc","gcc:-O3 -DL_ENDIAN -DTERMIO::(unknown)::SIXTY_FOUR_BIT_LONG 
+RC4_CHUNK DES_RISC1 DES_UNROLL:asm/alpha.o::",
+"linux-alpha+bwx-gcc","gcc:-O3 -DL_ENDIAN -DTERMIO::(unknown)::SIXTY_FOUR_BIT_LONG 
+RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL:asm/alpha.o::",
+"linux-alpha-ccc","ccc:-fast -readonly_strings -DL_ENDIAN 
+-DTERMIO::(unknown)::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_PTR DES_RISC1 
+DES_UNROLL:asm/alpha.o::",
+"linux-alpha+bwx-ccc","ccc:-fast -readonly_strings -DL_ENDIAN 
+-DTERMIO::(unknown)::SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_PTR DES_RISC1 
+DES_UNROLL:asm/alpha.o::",
 
 # assembler versions -- currently defunct:
-##"alpha-gcc","gcc:-O3::(unknown)::SIXTY_FOUR_BIT_LONG DES_UNROLL 
DES_RISC1:asm/alpha.o::",
-##"alpha-cc", "cc:-tune host -O4 
-readonly_strings::(unknown)::SIXTY_FOUR_BIT_LONG:asm/alpha.o::",
-##"alpha164-cc", "cc:-tune host -fast 
-readonly_strings::(unknown)::SIXTY_FOUR_BIT_LONG:asm/alpha.o::",
 ##"OpenBSD-alpha","gcc:-DTERMIOS -O3 
-fomit-frame-pointer::(unknown):SIXTY_FOUR_BIT_LONG DES_INT DES_PTR 
DES_RISC2:asm/alpha.o::",
 
 # The intel boxes :-), It would be worth seeing if bsdi-gcc can use the
 # bn86-elf.o file file since it is hand tweaked assembler.
 "linux-elf",   "gcc:-DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -m486 
-Wall::-D_REENTRANT::BN_LLONG $x86_gcc_des $x86_gcc_opts:$x86_elf_asm",
-"debug-linux-elf","gcc:-DREF_CHECK -DCRYPTO_MDEBUG -DL_ENDIAN -DTERMIO -g -m486 
-Wall::-D_REENTRANT:-lefence:BN_LLONG $x86_gcc_des $x86_gcc_opts:$x86_elf_asm",
+"debug-linux-elf","gcc:-DREF_CHECK -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -DTERMIO 
+-g -m486 -Wall::-D_REENTRANT:-lefence:BN_LLONG $x86_gcc_des 
+$x86_gcc_opts:$x86_elf_asm",
 "linux-aout",  "gcc:-DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -m486 
-Wall::(unknown)::BN_LLONG $x86_gcc_des $x86_gcc_opts:$x86_out_asm",
 "linux-mips",   "gcc:-DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer 
-Wall::(unknown)::BN_LLONG:::",
-"linux-ppc",    "gcc:-DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer 
-Wall::(unknown)::::",
+"linux-ppc",    "gcc:-DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer 
+-Wall::-D_REENTRANT::BN_LLONG::",
 "NetBSD-sparc",        "gcc:-DTERMIOS -O3 -fomit-frame-pointer -mv8 -Wall 
-DB_ENDIAN::(unknown)::BN_LLONG MD2_CHAR RC4_INDEX DES_UNROLL:::",
 "NetBSD-m68",  "gcc:-DTERMIOS -O3 -fomit-frame-pointer -Wall 
-DB_ENDIAN::(unknown)::BN_LLONG MD2_CHAR RC4_INDEX DES_UNROLL:::",
 "NetBSD-x86",  "gcc:-DTERMIOS -O3 -fomit-frame-pointer -m486 
-Wall::(unknown)::BN_LLONG $x86_gcc_des $x86_gcc_opts:",
@@ -224,6 +287,9 @@
 "unixware-2.0","cc:-O -DFILIO_H::(unknown):-lsocket -lnsl:$x86_gcc_des 
${x86_gcc_opts}:::",
 "unixware-2.0-pentium","cc:-O -DFILIO_H -Kpentium -Kthread::(unknown):-lsocket 
-lnsl:MD2_CHAR RC4_INDEX ${x86_gcc_des}::",
 
+# UnixWare 7
+"unixware-7","cc:-O -DFILIO_H -Kalloca::-Kthread:-lsocket -lnsl:MD2_CHAR RC4_INDEX 
+${x86_gcc_des}::",
+
 # IBM's AIX.
 "aix-cc",   "cc:-O -DAIX -DB_ENDIAN::(unknown)::BN_LLONG RC4_CHAR:::",
 "aix-gcc",  "gcc:-O3 -DAIX -DB_ENDIAN::(unknown)::BN_LLONG RC4_CHAR:::",
@@ -249,7 +315,7 @@
 # for some st_addr stuff, and then sizeof and address-of fails
 # I could not use the ams/alpha.o option because the Cray assembler, 'cam'
 # did not like it.
-"cray-t3e", "cc: -DBIT_FIELD_LIMITS -DTERMIOS::(unknown)::SIXTY_FOUR_BIT_LONG 
DES_INT:::",
+"cray-t3e", "cc: -DBIT_FIELD_LIMITS -DTERMIOS::(unknown)::SIXTY_FOUR_BIT_LONG 
+RC4_CHUNK DES_INT:::",
 
 # DGUX, 88100.
 "dgux-R3-gcc", "gcc:-O3 -fomit-frame-pointer::(unknown)::RC4_INDEX DES_UNROLL:::",
@@ -268,7 +334,7 @@
 "SINIX-N","/usr/ucb/cc:-O2 -misaligned::(unknown):-lucb:RC4_INDEX RC4_CHAR:::",
 
 # SIEMENS BS2000/OSD: an EBCDIC-based mainframe
-"BS2000-OSD","c89:-XLLML -XLLMK -XL -DB_ENDIAN -DTERMIOS 
-DCHARSET_EBCDIC::(unknown):-lsocket -lnsl:THIRTY_TWO_BIT DES_PTR DES_UNROLL MD2_CHAR 
RC4_INDEX RC4_CHAR BF_PTR:::",
+"BS2000-OSD","c89:-O -XLLML -XLLMK -XL -DB_ENDIAN -DTERMIOS 
+-DCHARSET_EBCDIC::(unknown):-lsocket -lnsl:THIRTY_TWO_BIT DES_PTR DES_UNROLL MD2_CHAR 
+RC4_INDEX RC4_CHAR BF_PTR:::",
 
 # Windows NT, Microsoft Visual C++ 4.0
 
@@ -301,6 +367,9 @@
 "OpenBSD",      "gcc:-DTERMIOS -O3 -fomit-frame-pointer::(unknown)::BN_LLONG RC2_CHAR 
RC4_INDEX DES_UNROLL:::",
 "OpenBSD-mips","gcc:-O2 -DL_ENDIAN::(unknown):BN_LLONG MD2_CHAR RC4_INDEX RC4_CHAR 
DES_UNROLL DES_RISC2 DES_PTR BF_PTR::::",
 
+##### MacOS X (a.k.a. Rhapsody) setup
+"rhapsody-ppc-cc","cc:-O3 -DB_ENDIAN::(unknown)::BN_LLONG RC4_CHAR RC4_CHUNK 
+DES_UNROLL BF_PTR:::",
+
 );
 
 my @WinTargets=qw(VC-NT VC-WIN32 VC-WIN16 VC-W31-16 VC-W31-32 VC-MSDOS BC-32
@@ -337,12 +406,16 @@
 my $perl;
 
 $ranlib=&which("ranlib") or $ranlib="true";
-$perl=&which("perl5") or $perl=&which("perl") or $perl="perl";
+$perl=$ENV{'PERL'} or $perl=&which("perl5") or $perl=&which("perl")
+  or $perl="perl";
 
 &usage if ($#ARGV < 0);
 
 my $flags="";
 my $depflags="";
+my $openssl_algorithm_defines="";
+my $openssl_thread_defines="";
+my $openssl_other_defines="";
 my $libs="";
 my $target="";
 my $options="";
@@ -352,6 +425,7 @@
                {
                $no_asm=1;
                $flags .= "-DNO_ASM ";
+               $openssl_other_defines .= "#define NO_ASM\n";
                }
        elsif (/^no-threads$/)
                { $no_threads=1; }
@@ -364,11 +438,14 @@
                $algo =~ tr/[a-z]/[A-Z]/;
                $flags .= "-DNO_$algo ";
                $depflags .= "-DNO_$algo ";
+               $openssl_algorithm_defines .= "#define NO_$algo\n";
                if ($algo eq "DES")
                        {
+                       push @skip, "mdc2";
                        $options .= " no-mdc2";
                        $flags .= "-DNO_MDC2 ";
                        $depflags .= "-DNO_MDC2 ";
+                       $openssl_algorithm_defines .= "#define NO_MDC2\n";
                        }
                }
        elsif (/^386$/)
@@ -377,6 +454,7 @@
                {
                $libs.= "-lRSAglue -lrsaref ";
                $flags.= "-DRSAref ";
+               $openssl_other_defines .= "#define RSAref\n";
                }
        elsif (/^[-+]/)
                {
@@ -432,6 +510,14 @@
        exit 0;
 }
 
+if ($target eq "LIST") {
+       foreach (sort keys %table) {
+               print;
+               print "\n";
+       }
+       exit 0;
+}
+
 &usage if (!defined($table{$target}));
 
 my $IsWindows=scalar grep /^$target$/,@WinTargets;
@@ -454,6 +540,7 @@
 $cflags="$flags$cflags" if ($flags ne "");
 
 my $thread_cflags;
+my $thread_defines;
 if ($thread_cflag ne "(unknown)" && !$no_threads)
        {
        # If we know how to do it, support threads by default.
@@ -463,11 +550,21 @@
        {
        # If the user asked for "threads", hopefully they also provided
        # any system-dependent compiler options that are necessary.
-       $thread_cflags="-DTHREADS $cflags" 
+       $thread_cflags="-DTHREADS $cflags" ;
+       $thread_defines .= "#define THREADS\n";
        }
 else
        {
-       $thread_cflags="-DTHREADS $thread_cflag $cflags" 
+       $thread_cflags="-DTHREADS $thread_cflag $cflags";
+       $thread_defines .= "#define THREADS\n";
+#      my $def;
+#      foreach $def (split ' ',$thread_cflag)
+#              {
+#              if ($def =~ s/^-D// && $def !~ /^_/)
+#                      {
+#                      $thread_defines .= "#define $def\n";
+#                      }
+#              }
        }       
 
 $lflags="$libs$lflags"if ($libs ne "");
@@ -481,6 +578,7 @@
 if ($threads)
        {
                $cflags=$thread_cflags;
+               $openssl_thread_defines .= $thread_defines;
        }
 
 #my ($bn1)=split(/\s+/,$bn_obj);
@@ -530,6 +628,7 @@
 
 open(IN,'<Makefile.org') || die "unable to read Makefile.org:$!\n";
 open(OUT,">$Makefile") || die "unable to create $Makefile:$!\n";
+print OUT "### Generated automatically from Makefile.org by Configure.\n\n";
 my $sdirs=0;
 while (<IN>)
        {
@@ -598,6 +697,7 @@
 my $idea_int=$def_int;
 my $rc2_int=$def_int;
 my $rc4_idx=0;
+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);
@@ -615,6 +715,8 @@
        $rc4_int=0 if /RC4_CHAR/;
        $rc4_int=3 if /RC4_LONG/;
        $rc4_idx=1 if /RC4_INDEX/;
+       $rc4_chunk=1 if /RC4_CHUNK/;
+       $rc4_chunk=2 if /RC4_CHUNK_LL/;
        $md2_int=0 if /MD2_CHAR/;
        $md2_int=3 if /MD2_LONG/;
        $idea_int=1 if /IDEA_SHORT/;
@@ -632,6 +734,18 @@
 
 open(IN,'<crypto/opensslconf.h.in') || die "unable to read 
crypto/opensslconf.h.in:$!\n";
 open(OUT,'>crypto/opensslconf.h') || die "unable to create crypto/opensslconf.h:$!\n";
+print OUT "/* opensslconf.h */\n";
+print OUT "/* WARNING: Generated automatically from opensslconf.h.in by Configure. 
+*/\n\n";
+
+print OUT "/* OpenSSL was configured with the following options: */\n";
+$openssl_algorithm_defines =~ s/^\s*#\s*define\s+(.*)/# ifndef $1\n#  define $1\n# 
+endif/mg;
+$openssl_algorithm_defines = "   /* no ciphers excluded */\n" if 
+$openssl_algorithm_defines eq "";
+$openssl_thread_defines =~ s/^\s*#\s*define\s+(.*)/# ifndef $1\n#  define $1\n# 
+endif/mg;
+$openssl_other_defines =~ s/^\s*#\s*define\s+(.*)/# ifndef $1\n#  define $1\n# 
+endif/mg;
+print OUT "#ifdef OPENSSL_ALGORITHM_DEFINES\n$openssl_algorithm_defines#endif\n";
+print OUT "#ifdef OPENSSL_THREAD_DEFINES\n$openssl_thread_defines#endif\n";
+print OUT "#ifdef OPENSSL_OTHER_DEFINES\n$openssl_other_defines#endif\n\n";
+
 while (<IN>)
        {
        if      (/^#define\s+OPENSSLDIR/)
@@ -666,6 +780,12 @@
                { printf OUT "#%s DES_UNROLL\n",($des_unroll)?'define':'undef'; }
        elsif   (/^#define\s+RC4_INT\s/)
                { printf OUT "#define RC4_INT unsigned %s\n",$type[$rc4_int]; }
+       elsif   (/^#undef\s+RC4_CHUNK/)
+               {
+               printf OUT "#undef RC4_CHUNK\n" if $rc4_chunk==0;
+               printf OUT "#define RC4_CHUNK unsigned long\n" if $rc4_chunk==1;
+               printf OUT "#define RC4_CHUNK unsigned long long\n" if $rc4_chunk==2;
+               }
        elsif   (/^#((define)|(undef))\s+RC4_INDEX/)
                { printf OUT "#%s RC4_INDEX\n",($rc4_idx)?"define":"undef"; }
        elsif (/^#(define|undef)\s+I386_ONLY/)
@@ -705,6 +825,9 @@
 print "BN_LLONG mode\n" if $bn_ll;
 print "RC4 uses u$type[$rc4_int]\n" if $rc4_int != $def_int;
 print "RC4_INDEX mode\n" if $rc4_idx;
+print "RC4_CHUNK is undefined\n" if $rc4_chunk==0;
+print "RC4_CHUNK is unsigned long\n" if $rc4_chunk==1;
+print "RC4_CHUNK is unsigned long long\n" if $rc4_chunk==2;
 print "MD2 uses u$type[$md2_int]\n" if $md2_int != $def_int;
 print "IDEA uses u$type[$idea_int]\n" if $idea_int != $def_int;
 print "RC2 uses u$type[$rc2_int]\n" if $rc2_int != $def_int;
@@ -723,8 +846,6 @@
 #endif
 EOF
        close(OUT);
-
-       system "perl crypto/objects/obj_dat.pl <crypto\\objects\\objects.h 
>crypto\\objects\\obj_dat.h";
 } else {
        (system "make -f Makefile.ssl PERL=\'$perl\' links") == 0 or exit $?;
        ### (system 'make depend') == 0 or exit $? if $depflags ne "";
@@ -733,43 +854,20 @@
        &dofile("tools/c_rehash",$openssldir,'^DIR=',   'DIR=%s',);
        if ( $perl =~ m@^/@) {
            &dofile("apps/der_chop",$perl,'^#!/', '#!%s');
+           &dofile("apps/CA.pl",$perl,'^#!/', '#!%s');
        } else {
            # No path for Perl known ...
            &dofile("apps/der_chop",'/usr/local/bin/perl','^#!/', '#!%s');
+           &dofile("apps/CA.pl",'/usr/local/bin/perl','^#!/', '#!%s');
        }           
 }
 
-my $pwd;
-
-if($IsWindows) {
-       $pwd="(current directory)";
-} else {
-       $pwd =`pwd`;
-       chop($pwd);
-}
 print <<EOF;
 
-NOTE: The OpenSSL header files have been moved from include/*.h
-to include/openssl/*.h.  To include OpenSSL header files, now
-directives of the form
-     #include <openssl/foo.h>
-should be used instead of #include <foo.h>.
-These new file locations allow installing the OpenSSL header
-files in /usr/local/include/openssl/ and should help avoid
-conflicts with other libraries.
-
-To compile programs that use the old form <foo.h>,
-usually an additional compiler option will suffice: E.g., add
-     -I$prefix/include/openssl
-or
-     -I$pwd/include/openssl
-to the CFLAGS in the Makefile of the program that you want to compile
-(and leave all the original -I...'s in place!).
-
-Please make sure that no old OpenSSL header files are around:
-The include directory should now be empty except for the openssl
-subdirectory.
+Configured for $target.
 
+NOTE: OpenSSL header files were moved from <*.h> to <openssl/*.h>;
+see file INSTALL for hints on coping with compatibility problems.
 EOF
 
 print <<\EOF if (!$no_threads && !$threads);
@@ -777,7 +875,6 @@
 The library could not be configured for supporting multi-threaded
 applications as the compiler options required on this system are not known.
 See file INSTALL for details if you need multi-threading.
-
 EOF
 
 exit(0);
@@ -785,22 +882,33 @@
 sub usage
        {
        print STDERR $usage;
-       print STDERR "pick os/compiler from:";
+       print STDERR "\npick os/compiler from:\n";
        my $j=0;
        my $i;
+        my $k=0;
        foreach $i (sort keys %table)
                {
                next if $i =~ /^debug/;
-               print STDERR "\n" if ($j++ % 4) == 0;
-               printf(STDERR "%-18s ",$i);
+               $k += length($i) + 1;
+               if ($k > 78)
+                       {
+                       print STDERR "\n";
+                       $k=length($i);
+                       }
+               print STDERR $i . " ";
                }
        foreach $i (sort keys %table)
                {
                next if $i !~ /^debug/;
-               print STDERR "\n" if ($j++ % 4) == 0;
-               printf(STDERR "%-18s ",$i);
+               $k += length($i) + 1;
+               if ($k > 78)
+                       {
+                       print STDERR "\n";
+                       $k=length($i);
+                       }
+               print STDERR $i . " ";
                }
-       print STDERR "\n";
+       print STDERR "\n\nNOTE: If in doubt, on Unix-ish systems use './config'.\n";
        exit(1);
        }
 
Index: opensa/openssl/e_os.h
diff -u opensa/openssl/e_os.h:1.1 opensa/openssl/e_os.h:1.2
--- opensa/openssl/e_os.h:1.1   Tue Jan 25 22:57:51 2000
+++ opensa/openssl/e_os.h       Thu Mar  2 21:11:48 2000
@@ -82,6 +82,20 @@
 #define DEVRANDOM "/dev/urandom"
 #endif
 
+#if defined(__MWERKS__) && defined(macintosh)
+# if macintosh==1
+#  ifndef MAC_OS_GUSI_SOURCE
+#    define MAC_OS_pre_X
+#    define NO_SYS_TYPES_H
+#  endif
+#  define NO_SYS_PARAM_H
+#  define NO_CHMOD
+#  define NO_SYSLOG
+#  undef  DEVRANDOM
+#  define GETPID_IS_MEANINGLESS
+# endif
+#endif
+
 /********************************************************************
  The Microsoft section
  ********************************************************************/
@@ -93,6 +107,10 @@
 #  define MS_STATIC
 #endif
 
+#if defined(_WIN32) && !defined(WIN32)
+#  define WIN32
+#endif
+
 #if defined(WIN32) || defined(WIN16)
 #  ifndef WINDOWS
 #    define WINDOWS
@@ -102,6 +120,10 @@
 #  endif
 #endif
 
+#if defined(MSDOS) && !defined(GETPID_IS_MEANINGLESS)
+#  define GETPID_IS_MEANINGLESS
+#endif
+
 #ifdef WIN32
 #define get_last_sys_error()   GetLastError()
 #define clear_sys_error()      SetLastError(0)
@@ -119,6 +141,12 @@
 #define readsocket(s,b,n)      recv((s),(b),(n),0)
 #define writesocket(s,b,n)     send((s),(b),(n),0)
 #define EADDRINUSE             WSAEADDRINUSE
+#elif defined(MAC_OS_pre_X)
+#define get_last_socket_error()        errno
+#define clear_socket_error()   errno=0
+#define closesocket(s)         MacSocket_close(s)
+#define readsocket(s,b,n)      MacSocket_recv((s),(b),(n),true)
+#define writesocket(s,b,n)     MacSocket_send((s),(b),(n))
 #else
 #define get_last_socket_error()        errno
 #define clear_socket_error()   errno=0
@@ -172,6 +200,7 @@
 #define _O_TEXT O_TEXT
 #define _O_BINARY O_BINARY
 #define _int64 __int64
+#define _kbhit kbhit
 #endif
 
 #if defined(WIN16) && !defined(MONOLITH) && defined(SSLEAY) && 
defined(_WINEXITNOPERSIST)
@@ -227,9 +256,17 @@
                                      __VMS_EXIT |= 0x10000000; \
                                     return(n); } while(0)
 #    endif
+#    define NO_SYS_PARAM_H
 #  else
      /* !defined VMS */
-#    include OPENSSL_UNISTD
+#    ifdef OPENSSL_UNISTD
+#      include OPENSSL_UNISTD
+#    else
+#      include <unistd.h>
+#    endif
+#    ifndef NO_SYS_TYPES_H
+#      include <sys/types.h>
+#    endif
 
 #    define OPENSSL_CONF       "openssl.cnf"
 #    define SSLEAY_CONF                OPENSSL_CONF
@@ -268,11 +305,17 @@
 #      define SHUTDOWN2(fd)            { shutdown((fd),2); closesocket(fd); }
 #    endif
 
+#  elif defined(MAC_OS_pre_X)
+
+#    include "MacSocket.h"
+#    define SSLeay_Write(a,b,c)                MacSocket_send((a),(b),(c))
+#    define SSLeay_Read(a,b,c)         MacSocket_recv((a),(b),(c),true)
+#    define SHUTDOWN(fd)               MacSocket_close(fd)
+#    define SHUTDOWN2(fd)              MacSocket_close(fd)
 
 #  else
 
-#    include <sys/types.h>
-#    ifndef VMS
+#    ifndef NO_SYS_PARAM_H
 #      include <sys/param.h>
 #    endif
 #    include <sys/time.h> /* Needed under linux for FD_XXX */
@@ -320,8 +363,8 @@
 
 #    define SSLeay_Read(a,b,c)     read((a),(b),(c))
 #    define SSLeay_Write(a,b,c)    write((a),(b),(c))
-#    define SHUTDOWN(fd)    { shutdown((fd),0); close((fd)); }
-#    define SHUTDOWN2(fd)   { shutdown((fd),2); close((fd)); }
+#    define SHUTDOWN(fd)    { shutdown((fd),0); closesocket((fd)); }
+#    define SHUTDOWN2(fd)   { shutdown((fd),2); closesocket((fd)); }
 #    define INVALID_SOCKET     (-1)
 #  endif
 #endif
Index: opensa/openssl/install
diff -u opensa/openssl/install:1.1 opensa/openssl/install:1.2
--- opensa/openssl/install:1.1  Tue Jan 25 22:57:51 2000
+++ opensa/openssl/install      Thu Mar  2 21:11:48 2000
@@ -77,8 +77,9 @@
 
      This guesses at your operating system (and compiler, if necessary) and
      configures OpenSSL based on this guess. Run ./config -t to see
-     if it guessed correctly. If it did not get it correct or you want to
-     use a different compiler then go to step 1b. Otherwise go to step 2.
+     if it guessed correctly. If you want to use a different compiler, you
+     are cross-compiling for another platform, or the ./config guess was
+     wrong for other reasons, go to step 1b. Otherwise go to step 2.
 
      On some systems, you can include debugging information as follows:
 
@@ -101,7 +102,8 @@
 
      If your system is not available, you will have to edit the Configure
      program and add the correct configuration for your system. The
-     generic configurations "cc" or "gcc" should usually work.
+     generic configurations "cc" or "gcc" should usually work on 32 bit
+     systems.
 
      Configure creates the file Makefile.ssl from Makefile.org and
      defines various macros in crypto/opensslconf.h (generated from
@@ -115,14 +117,12 @@
      OpenSSL binary ("openssl"). The libraries will be built in the top-level
      directory, and the binary will be in the "apps" directory.
 
-     If "make" fails, please report the problem to <[EMAIL PROTECTED]>.
-     Include the output of "./config -t" and the OpenSSL version
-     number in your message.
+     If "make" fails, please report the problem to <[EMAIL PROTECTED]>
+     (note that your message will be forwarded to a public mailing list).
+     Include the output of "make report" in your message.
 
      [If you encounter assembler error messages, try the "no-asm"
-     configuration option as an immediate fix.  Note that on Solaris x86
-     (not on Sparcs!) you may have to install the GNU assembler to use
-     OpenSSL assembler code -- /usr/ccs/bin/as won't do.]
+     configuration option as an immediate fix.]
 
      Compiling parts of OpenSSL with gcc and others with the system
      compiler will result in unresolved symbols on some systems.
@@ -134,7 +134,7 @@
     If a test fails, try removing any compiler optimization flags from
     the CFLAGS line in Makefile.ssl and run "make clean; make". Please
     send a bug report to <[EMAIL PROTECTED]>, including the
-    output of "openssl version -a" and of the failed test.
+    output of "make report".
 
   4. If everything tests ok, install OpenSSL with
 
@@ -145,11 +145,13 @@
 
        certs           Initially empty, this is the default location
                        for certificate files.
+       man/man1        Manual pages for the 'openssl' command line tool
+       man/man3        Manual pages for the libraries (very incomplete)
        misc            Various scripts.
        private         Initially empty, this is the default location
                        for private key files.
 
-     If you didn't chose a different installation prefix, the
+     If you didn't choose a different installation prefix, the
      following additional subdirectories will be created:
 
        bin             Contains the openssl binary and a few other 
@@ -250,138 +252,3 @@
  you can still use "no-threads" to suppress an annoying warning message
  from the Configure script.)
 
-
---------------------------------------------------------------------------------
-The orignal Unix build instructions from SSLeay follow. 
-Note: some of this may be out of date and no longer applicable
---------------------------------------------------------------------------------
-
-# When bringing the SSLeay distribution back from the evil intel world
-# of Windows NT, do the following to make it nice again under unix :-)
-# You don't normally need to run this.
-sh util/fixNT.sh       # This only works for NT now - eay - 21-Jun-1996
-
-# If you have perl, and it is not in /usr/local/bin, you can run
-perl util/perlpath.pl /new/path
-# and this will fix the paths in all the scripts.  DO NOT put
-# /new/path/perl, just /new/path. The build
-# environment always run scripts as 'perl perlscript.pl' but some of the
-# 'applications' are easier to usr with the path fixed.
-
-# Edit crypto/cryptlib.h, tools/c_rehash, and Makefile.ssl
-# to set the install locations if you don't like
-# the default location of /usr/local/ssl
-# Do this by running
-perl util/ssldir.pl /new/ssl/home
-# if you have perl, or by hand if not.
-
-# If things have been stuffed up with the sym links, run
-make -f Makefile.ssl links
-# This will re-populate lib/include with symlinks and for each
-# directory, link Makefile to Makefile.ssl
-
-# Setup the machine dependent stuff for the top level makefile
-# and some select .h files
-# If you don't have perl, this will bomb, in which case just edit the
-# top level Makefile.ssl
-./Configure 'system type'
-
-# The 'Configure' command contains default configuration parameters
-# for lots of machines.  Configure edits 5 lines in the top level Makefile
-# It modifies the following values in the following files
-Makefile.ssl           CC CFLAG EX_LIBS BN_MULW
-crypto/des/des.h       DES_LONG
-crypto/des/des_locl.h  DES_PTR
-crypto/md2/md2.h       MD2_INT
-crypto/rc4/rc4.h       RC4_INT
-crypto/rc4/rc4_enc.c   RC4_INDEX
-crypto/rc2/rc2.h       RC2_INT
-crypto/bf/bf_locl.h    BF_INT
-crypto/idea/idea.h     IDEA_INT
-crypto/bn/bn.h         BN_LLONG (and defines one of SIXTY_FOUR_BIT,
-                                 SIXTY_FOUR_BIT_LONG, THIRTY_TWO_BIT,
-                                 SIXTEEN_BIT or EIGHT_BIT)
-Please remember that all these files are actually copies of the file with
-a .org extention.  So if you change crypto/des/des.h, the next time
-you run Configure, it will be runover by a 'configured' version of
-crypto/des/des.org.  So to make the changer the default, change the .org
-files.  The reason these files have to be edited is because most of
-these modifications change the size of fundamental data types.
-While in theory this stuff is optional, it often makes a big
-difference in performance and when using assember, it is importaint
-for the 'Bignum bits' match those required by the assember code.
-A warning for people using gcc with sparc cpu's.  Gcc needs the -mv8
-flag to use the hardware multiply instruction which was not present in
-earlier versions of the sparc CPU.  I define it by default.  If you
-have an old sparc, and it crashes, try rebuilding with this flag
-removed.  I am leaving this flag on by default because it makes
-things run 4 times faster :-)
-
-# clean out all the old stuff
-make clean
-
-# Do a make depend only if you have the makedepend command installed
-# This is not needed but it does make things nice when developing.
-make depend
-
-# make should build everything
-make
-
-# fix up the demo certificate hash directory if it has been stuffed up.
-make rehash
-
-# test everything
-make test
-
-# install the lot
-make install
-
-# It is worth noting that all the applications are built into the one
-# program, ssleay, which is then has links from the other programs
-# names to it.
-# The applicatons can be built by themselves, just don't define the
-# 'MONOLITH' flag.  So to build the 'enc' program stand alone,
-gcc -O2 -Iinclude apps/enc.c apps/apps.c libcrypto.a
-
-# Other useful make options are
-make makefile.one
-# which generate a 'makefile.one' file which will build the complete
-# SSLeay distribution with temp. files in './tmp' and 'installable' files
-# in './out'
-
-# Have a look at running
-perl util/mk1mf.pl help
-# this can be used to generate a single makefile and is about the only
-# way to generate makefiles for windows.
-
-# There is actually a final way of building SSLeay.
-gcc -O2 -c -Icrypto -Iinclude crypto/crypto.c
-gcc -O2 -c -Issl -Iinclude ssl/ssl.c
-# and you now have the 2 libraries as single object files :-).
-# If you want to use the assember code for your particular platform
-# (DEC alpha/x86 are the main ones, the other assember is just the
-# output from gcc) you will need to link the assember with the above generated
-# object file and also do the above compile as
-gcc -O2 -DBN_ASM -c -Icrypto -Iinclude crypto/crypto.c
-
-This last option is probably the best way to go when porting to another
-platform or building shared libraries.  It is not good for development so
-I don't normally use it.
-
-To build shared libararies under unix, have a look in shlib, basically 
-you are on your own, but it is quite easy and all you have to do
-is compile 2 (or 3) files.
-
-For mult-threading, have a read of doc/threads.doc.  Again it is quite
-easy and normally only requires some extra callbacks to be defined
-by the application.
-The examples for solaris and windows NT/95 are in the mt directory.
-
-have fun
-
-eric 25-Jun-1997
-
-IRIX 5.x will build as a 32 bit system with mips1 assember.
-IRIX 6.x will build as a 64 bit system with mips3 assember.  It conforms
-to n32 standards. In theory you can compile the 64 bit assember under
-IRIX 5.x but you will have to have the correct system software installed.
Index: opensa/openssl/install.com
diff -u opensa/openssl/install.com:1.1 opensa/openssl/install.com:1.2
--- opensa/openssl/install.com:1.1      Tue Jan 25 22:57:51 2000
+++ opensa/openssl/install.com  Thu Mar  2 21:11:48 2000
@@ -56,6 +56,7 @@
 $      EXHEADER := e_os.h,e_os2.h
 $
 $      COPY 'EXHEADER' WRK_SSLINCLUDE: /LOG
+$      SET FILE/PROT=WORLD:RE WRK_SSLINCLUDE:'EXHEADER'
 $
 $      I = 0
 $ LOOP_SDIRS: 
Index: opensa/openssl/install.vms
diff -u opensa/openssl/install.vms:1.1 opensa/openssl/install.vms:1.2
--- opensa/openssl/install.vms:1.1      Tue Jan 25 22:57:51 2000
+++ opensa/openssl/install.vms  Thu Mar  2 21:11:48 2000
@@ -8,14 +8,45 @@
 
 This file is divided in the following parts:
 
+  Checking the distribution    - Mandatory reading.
   Compilation                  - Mandatory reading.
+  Logical names                        - Mandatory reading.
   Test                         - Mandatory reading.
   Installation                 - Mandatory reading.
   Backward portability         - Read if it's an issue.
   Possible bugs or quirks      - A few warnings on things that
                                  may go wrong or may surprise you.
-  Report                       - How to get in touch with me.
+  TODO                         - Things that are to come.
 
+
+Checking the distribution:
+==========================
+
+There have been reports of places where the distribution didn't quite get
+through, for example if you've copied the tree from a NFS-mounted unix
+mount point.
+
+The easiest way to check if everything got through as it should is to check
+for oen of the following files:
+
+       [.CRYPTO]OPENSSLCONF.H_IN
+       [.CRYPTO]OPENSSLCONF_H.IN
+
+They should never exist both at once, but one of them should (preferably
+the first variant).  If you can't find any of those two, something went
+wrong.
+
+The best way to get a correct distribution is to download the gzipped tar
+file from ftp://ftp.openssl.org/source/, use GUNZIP to uncompress it and
+use VMSTAR to unpack the resulting tar file.
+
+GUNZIP is available in many places on the net.  One of the distribution
+points is the WKU software archive, ftp://ftp.wku.edu/vms/fileserv/ .
+
+VMSTAR is also available in many places on the net.  The recommended place
+to find information about it is http://www.free.lp.se/vmstar/ .
+
+
 Compilation:
 ============
 
@@ -35,26 +66,28 @@
 <option> must be one of the following:
 
       ALL       Just build "everything".
-      DATE      Just build the "[.INCLUDE]DATE.H" file.
+      CONFIG    Just build the "[.CRYPTO]OPENSSLCONF.H" file.
+      BUILDINF  Just build the "[.INCLUDE]BUILDINF.H" file.
       SOFTLINKS Just copies some files, to simulate Unix soft links.
+      BUILDALL  Same as ALL, except CONFIG, BUILDINF and SOFTILNKS aren't done.
       RSAREF    Just build the "[.xxx.EXE.RSAREF]LIBRSAGLUE.OLB" library.
       CRYPTO    Just build the "[.xxx.EXE.CRYPTO]LIBCRYPTO.OLB" library.
       SSL       Just build the "[.xxx.EXE.SSL]LIBSSL.OLB" library.
       SSL_TASK  Just build the "[.xxx.EXE.SSL]SSL_TASK.EXE" program.
-      TEST      Just build the "test" programs for OpenSSL.
-      APPS      Just build the "application" programs for OpenSSL.
+      TEST      Just build the "[.xxx.EXE.TEST]" test programs for OpenSSL.
+      APPS      Just build the "[.xxx.EXE.APPS]" application programs for OpenSSL.
 
 <rsaref-p> must be one of the following:
 
       RSAREF    compile using the RSAREF Library
       NORSAREF  compile without using RSAREF
 
-Note: The RSAREF libraries are NOT INCLUDED and you have to
-      download it from "ftp://ftp.rsa.com/rsaref".  You have to
-      get the ".tar-Z" file as the ".zip" file dosen't have the
-      directory structure stored.  You have to extract the file
-      into the [.RSAREF] directory as that is where the scripts
-      will look for the files.
+Note 1: The RSAREF libraries are NOT INCLUDED and you have to
+        download it from "ftp://ftp.rsa.com/rsaref".  You have to
+        get the ".tar-Z" file as the ".zip" file doesn't have the
+        directory structure stored.  You have to extract the file
+        into the [.RSAREF] directory as that is where the scripts
+        will look for the files.
 
 Note 2: I have never done this, so I've no idea if it works or not.
 
@@ -65,7 +98,6 @@
 
 <compiler> must be one of the following:
 
-      VAXC      For VAX C.
       DECC      For DEC C.
       GNUC      For GNU C.
 
@@ -77,16 +109,34 @@
 just to test them.  For production use, make sure you install first, see
 Installation below.
 
-Note: Some programs in this package require a TCP/IP library.
+Note 1: Some programs in this package require a TCP/IP library.
 
 Note 2: if you want to compile the crypto library only, please make sure
-        you have at least done a @MAKEVMS DATE and a @MAKEVMS SOFTLINKS.
-        A lot of things will break if you don't.
+        you have at least done a @MAKEVMS CONFIG, a @MAKEVMS BUILDINF and
+        a @MAKEVMS SOFTLINKS.  A lot of things will break if you don't.
+
 
-Note 3: Alpha users will get a number of informational messages when
-        compiling the [.asm]vms.mar file in the BN (bignum) part of
-        the crypto library.  These can be safely ignored.
+Logical names:
+==============
 
+There are a few things that can't currently be given through the command
+line.  Instead, logical names are used.
+
+Currently, the logical names supported are:
+
+      OPENSSL_NO_ASM    with value YES, the assembler parts of OpenSSL will
+                        not be used.  Instead, plain C implementations are
+                        used.  This is good to try if something doesn't work.
+      OPENSSL_NO_'alg'  with value YES, the corresponding crypto algorithm
+                        will not be implemented.  Supported algorithms to
+                        do this with are: RSA, DSA, DH, MD2, MD5, RIPEMD,
+                        SHA, DES, MDC2, CR2, RC4, RC5, IDEA, BF, CAST, HMAC,
+                        SSL2.  So, for example, having the logical name
+                        OPENSSL_NO_RSA with the value YES means that the
+                        LIBCRYPTO.OLB library will not contain an RSA
+                        implementation.
+
+
 Test:
 =====
 
@@ -99,6 +149,7 @@
 <[EMAIL PROTECTED]>, including the output of "openssl version -a"
 and of the failed test.
 
+
 Installation:
 =============
 
@@ -158,6 +209,7 @@
                (the NOTE in section 4 of "Installation in Detail").
                You don't need to "deleting old header files"!!!
 
+
 Backward portability:
 =====================
 
@@ -175,7 +227,7 @@
 can use those macros to simulate older OpenVMS or C library versions,
 by defining the macros _VMS_V6_SOURCE, __VMS_VER and __CTRL_VER with
 correct values.  In the compilation scripts, I've provided the possibility
-for the user to influense the creation of such macros, through a bunch of
+for the user to influence the creation of such macros, through a bunch of
 symbols, all having names starting with USER_.  Here's the list of them:
 
   USER_CCFLAGS          - Used to give additional qualifiers to the
@@ -212,19 +264,6 @@
 extra arguments.  Please experiment.
 
 
-Report:
-=======
-
-I maintain a few mailinglists for bug reports and such on software that
-I develop/port/enhance/destroy.  Please look at http://www.free.lp.se/
-for further info.
-
-
--- 
-Richard Levitte <[EMAIL PROTECTED]>
-1999-03-09
-
-
 TODO:
 =====
 
@@ -242,4 +281,4 @@
 
 --
 Richard Levitte <[EMAIL PROTECTED]>
-1999-05-24
+2000-02-27
Index: opensa/openssl/install.w32
diff -u opensa/openssl/install.w32:1.1 opensa/openssl/install.w32:1.2
--- opensa/openssl/install.w32:1.1      Tue Jan 25 22:57:51 2000
+++ opensa/openssl/install.w32  Thu Mar  2 21:11:48 2000
@@ -4,7 +4,7 @@
 
  Heres a few comments about building OpenSSL in Windows environments. Most of
  this is tested on Win32 but it may also work in Win 3.1 with some
- modification.  See the end of this file for Eric's original comments.
+ modification.
 
  You need Perl for Win32 (available from http://www.activestate.com/ActivePerl)
  and one of the following C compilers:
@@ -21,10 +21,12 @@
   * Microsoft MASM (aka "ml")
   * Free Netwide Assembler NASM.
 
- MASM was I believe distributed in the past with VC++ and it is also part of
- the MSDN SDKs. It is no longer distributed as part of VC++ and can be hard
- to get hold of. It can be purchased: see Microsoft's site for details at:
- http://www.microsoft.com/
+ MASM was at one point distributed with VC++. It is now distributed with some
+ Microsoft DDKs, for example the Windows NT 4.0 DDK and the Windows 98 DDK. If
+ you do not have either of these DDKs then you can just download the binaries
+ for the Windows 98 DDK and extract and rename the two files XXXXXml.exe and
+ XXXXXml.err, to ml.exe and ml.err and install somewhere on your PATH. Both
+ DDKs can be downloaded from the Microsoft developers site www.msdn.com.
 
  NASM is freely available. Version 0.98 was used during testing: other versions
  may also work. It is available from many places, see for example:
@@ -59,7 +61,7 @@
    > ms\do_ms
 
  If you get errors about things not having numbers assigned then check the
- troubleshooting section: you probably wont be able to compile it as it
+ troubleshooting section: you probably won't be able to compile it as it
  stands.
 
  Then from the VC++ environment at a prompt do:
@@ -145,13 +147,17 @@
  assigned in the CVS tree: so anything linked against this version of the
  library may need to be recompiled.
 
- If you get errors about unresolved externals then this means that either you
- didn't read the note above about functions not having numbers assigned or
- someone forgot to add a function to the header file.
+ If you get errors about unresolved symbols there are several possible
+ causes.
 
- In this latter case check out the header file to see if the function is
- defined in the header file.
+ If this happens when the DLL is being linked and you have disabled some
+ ciphers then it is possible the DEF file generator hasn't removed all
+ the disabled symbols: the easiest solution is to edit the DEF files manually
+ to delete them. The DEF files are ms\libeay32.def ms\ssleay32.def.
 
+ Another cause is if you missed or ignored the errors about missing numbers
+ mentioned above.
+
  If you get warnings in the code then the compilation will halt.
 
  The default Makefile for Win32 halts whenever any warnings occur. Since VC++
@@ -165,159 +171,13 @@
 
  One final comment about compiling applications linked to the OpenSSL library.
  If you don't use the multithreaded DLL runtime library (/MD option) your
- program will almost certainly crash: see the original SSLeay description
- below for more details.
-
---------------------------------------------------------------------------------
-The orignal Windows build instructions from SSLeay follow. 
-Note: some of this may be out of date and no longer applicable. In particular
-the Crypto_malloc_init() comment appears to be wrong: you always need to use
-the same runtime library as the DLL itself.
---------------------------------------------------------------------------------
-
-The Microsoft World.
-
-The good news, to build SSLeay for the Microsft World
-
-Windows 3.1 DLL's
-perl Configure VC-WIN16
-nmake -f ms\w31dll.mak
-
-Windows NT/95 DLL's
-perl Configure VC-WIN32
-nmake -f ms\ntdll.mak
-
-Now the bad news
-All builds were done using Microsofts Visual C++ 1.52c and [45].x.
-If you are a borland person, you are probably going to have to help me
-finish the stuff in util/pl/BC*pl
-
-All builds were made under Windows NT - this means long filenames, so
-you may have problems under Windows 3.1 but probably not under 95.
-
-Because file pointers don't work in DLL's under Windows 3.1 (well at
-least stdin/stdout don't and I don't like having to differentiate
-between these and other file pointers), I now use the BIO file-pointer
-module, which needs to be linked into your application.  You can either
-use the memory buffer BIO for IO, or compile bss_file.c into your
-application, it is in the apps directory and is just a copy of
-crypto/buffer/bss_file.c with #define APPS_WIN16 added.
-I have not yet automated the makefile to automatically copy it into 'out'
-for a win 3.1 build....
-
-All callbacks passed into SSLeay for Windows 3.1 need to be of type
-_far _loadds.
-
-I don't support building with the pascal calling convention.
-
-The DLL and static builds are large memory model.
-
-To build static libraries for NT/95 or win 3.1
-
-perl util/mk1mf.pl VC-WIN32 > mf-stat.nt
-perl util/mk1mf.pl VC-WIN16 > mf-stat.w31
-for DLL's
-perl util/mk1mf.pl dll VC-WIN32        > mf-dll.nt
-perl util/mk1mf.pl dll VC-WIN16 > mf-dll.w31
-
-Again you will notice that if you dont have perl, you cannot do this.
-
-Now the next importaint issue.  Running Configure!
-I have small assember code files for critical big number library operation
-in crypto/bn/asm.  There is, asm code, object files and uuencode
-object files.  They are
-x86nt32.asm    - 32bit flat memory model assember - suitable Win32
-x86w16.asm     - 16bit assember - used in the msdos build.
-x86w32.asm     - 32bit assember, win 3.1 segments, used for win16 build.
-
-If you feel compelled to build the 16bit maths routines in the windows 3.1
-build,
-perl Configure VC-W31-16
-perl util/mk1mf.pl dll VC-W31-16 > mf-dll.w31
-
-If you hate assember and don't want anything to do with it,
-perl util/mk1mf.pl no-asm VC-WIN16 > mf-dll.w31
-will work for any of the makefile generations.
-
-There are more options to mk1mf.pl but these all leave the temporary
-files in 'tmp' and the output files in 'out' by default.
-
-The NT build is done for console mode.
-
-The Windows 3.1 version of SSLeay uses quickwin, the interface is ugly
-but it is better than nothing.  If you want ugly, try doing anything
-that involves getting a password.  I decided to be ugly instead of
-echoing characters.  For Windows 3.1 I would just sugest using the
-msdos version of the ssleay application for command line work.
-The QuickWin build is primarily for testing.
-
-For both NT and Windows 3.1, I have not written the code so that
-s_client, s_server can take input from the keyboard.  You can happily
-start applications up in separate windows, watch them handshake, and then sit
-there for-ever.  I have not had the time to get this working, and I've
-been able to test things from a unix box to the NT box :-).
-Try running ssleay s_server on the windows box
-(with either -cert ../apps/server.pem -www)
-and run ssleay s_time from another window.
-This often stuffs up on Windows 3.1, but I'm not worried since this is
-probably a problem with my demo applications, not the libraries.
-
-After a build of one of the version of microsoft SSLeay,
-'cd ms' and then run 'test'.  This should check everything out and
-even does a trial run of generating certificates.
-'test.bat' requires that perl be install, you be in the ms directory
-(not the test directory, thats for unix so stay out :-) and that the
-build output directory be ../out 
-
-On a last note, you will probably get division by zero errors and
-stuff after a build.  This is due to your own inability to follow
-instructions :-).
-
-The reasons for the problem is probably one of the following.
-
-1)     You did not run Configure.  This is critical for windows 3.1 when
-       using assember.  The values in crypto/bn/bn.h must match the
-       ones requred for the assember code.  (remember that if you
-       edit crypto/bn/bn.h by hand, it will be clobered the next time
-       you run Configure by the contents of crypto/bn/bn.org).
-       SSLeay version -o will list the compile options.
-       For VC-WIN32 you need bn(64,32) or bn(32,32)
-       For VC-W31-32/VC-WIN16 you need bn(32,32)
-       For VC-W31-16 you need bn(32,16) or bn(16,16)
-       For VC-MSDOS you need bn(32,16) or bn(16,16).
-
-       The first number will be 2 times bigger than the second if
-       BN_LLONG is defined in bn.h and the size of the second number
-       depends on the 'bits' defined at the start of bn.h.  Have a
-       look, it's all reasonably clear.
-       If you want to start messing with 8 bit builds and things like
-       that, build without the assember by re-generating a makefile
-       via 'perl util/mk1mf.pl no-asm'.
-2)     You tried to build under MS-DOS or Windows 3.1 using the /G3
-       option.  Don't.  It is buggy (thats why you just got that
-       error) and unless you want to work out which optimising flag
-       to turn off, I'm not going to help you :-).  I also noticed
-       that code often ran slower when compiled with /G3.
-3)     Under NT/95, malloc goes stupid.  You are probably linking with
-       the wrong library, there are problems if you mix the threaded
-       and non-threaded libraries (due to the DLL being staticly
-       linked with one and the applicaion using another.
-
-Well hopefully thats most of the MS issues handled, see you in ssl-users :-).
-
-eric 30-Aug-1996
-
-SSLeay 0.6.5
-For Windows 95/NT, add CRYPTO_malloc_init() to your program before any
-calls to the SSLeay libraries.  This function will insert callbacks so that
-the SSLeay libraries will use the same malloc(), free() and realloc() as
-your application so 'problem 3)' mentioned above will go away.
-
-There is now DES assember for Windows NT/95.  The file is
-crypto/des/asm/win32.asm and replaces crypto/des/des_enc.c in the build.
-
-There is also Blowfish assember for Windows NT/95.  The file is
-crypto/bf/asm/win32.asm and replaces crypto/bf/bf_enc.c in the build.
-
-eric 25-Jun-1997
-
+ program will almost certainly crash because malloc gets confused -- the
+ OpenSSL DLLs are statically linked to one version, the application must
+ not use a different one.  You might be able to work around such problems
+ by adding CRYPTO_malloc_init() to your program before any calls to the
+ OpenSSL libraries: This tells the OpenSSL libraries to use the same
+ malloc(), free() and realloc() as the application.  However there are many
+ standard library functions used by OpenSSL that call malloc() internally
+ (e.g. fopen()), and OpenSSL cannot change these; so in general you cannot
+ rely on CYRPTO_malloc_init() solving your problem, and you should
+ consistently use the multithreaded library.
Index: opensa/openssl/license
diff -u opensa/openssl/license:1.1 opensa/openssl/license:1.2
--- opensa/openssl/license:1.1  Tue Jan 25 22:57:51 2000
+++ opensa/openssl/license      Thu Mar  2 21:11:48 2000
@@ -12,7 +12,7 @@
   ---------------
 
 /* ====================================================================
- * Copyright (c) 1998-1999 The OpenSSL Project.  All rights reserved.
+ * Copyright (c) 1998-2000 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
Index: opensa/openssl/makefile.org
diff -u opensa/openssl/makefile.org:1.1 opensa/openssl/makefile.org:1.2
--- opensa/openssl/makefile.org:1.1     Tue Jan 25 22:57:51 2000
+++ opensa/openssl/makefile.org Thu Mar  2 21:11:48 2000
@@ -56,6 +56,8 @@
 AR=ar r
 RANLIB= ranlib
 PERL= perl
+TAR= tar
+TARFLAGS= --norecurse
 
 # Set BN_ASM to bn_asm.o if you want to use the C version
 BN_ASM= bn_asm.o
@@ -156,6 +158,7 @@
 MAKEFILE= Makefile.ssl
 MAKE=     make -f Makefile.ssl
 
+MANDIR=$(OPENSSLDIR)/man
 MAN1=1
 MAN3=3
 SHELL=/bin/sh
@@ -180,6 +183,7 @@
        (cd $$i && echo "making all in $$i..." && \
        $(MAKE) CC='${CC}' PLATFORM='${PLATFORM}' CFLAG='${CFLAG}' 
INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' 
BN_ASM='${BN_ASM}' DES_ENC='${DES_ENC}' BF_ENC='${BF_ENC}' CAST_ENC='${CAST_ENC}' 
RC4_ENC='${RC4_ENC}' RC5_ENC='${RC5_ENC}' SHA1_ASM_OBJ='${SHA1_ASM_OBJ}' 
MD5_ASM_OBJ='${MD5_ASM_OBJ}' RMD160_ASM_OBJ='${RMD160_ASM_OBJ}' SDIRS='${SDIRS}' 
AR='${AR}' PROCESSOR='${PROCESSOR}' PERL='${PERL}' RANLIB='${RANLIB}' all ) || exit 1; 
\
        done
+       -@# cd crypto; $(MAKE) CC='${CC}' PLATFORM='${PLATFORM}' CFLAG='${CFLAG}' 
+INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' 
+BN_ASM='${BN_ASM}' DES_ENC='${DES_ENC}' BF_ENC='${BF_ENC}' CAST_ENC='${CAST_ENC}' 
+RC4_ENC='${RC4_ENC}' RC5_ENC='${RC5_ENC}' SHA1_ASM_OBJ='${SHA1_ASM_OBJ}' 
+MD5_ASM_OBJ='${MD5_ASM_OBJ}' RMD160_ASM_OBJ='${RMD160_ASM_OBJ}' SDIRS='${SDIRS}' 
+AR='${AR}' PROCESSOR='${PROCESSOR}' PERL='${PERL}' RANLIB='${RANLIB}' testapps
        -@# cd perl; $(PERL) Makefile.PL; make
 
 sub_all:
@@ -215,7 +219,7 @@
        rm -f *.a */lib */*/lib
 
 clean:
-       rm -f shlib/*.o *.o core a.out fluff *.map
+       rm -f shlib/*.o *.o core a.out fluff *.map rehash.time testlog make.log cctest 
+cctest.c
        @for i in $(DIRS) ;\
        do \
        (cd $$i && echo "making clean in $$i..." && \
@@ -258,8 +262,10 @@
        $(MAKE) SDIRS='${SDIRS}' PERL='${PERL}' dclean ) || exit 1; \
        done;
 
-rehash:
+rehash: rehash.time
+rehash.time: certs
        @(OPENSSL="`pwd`/apps/openssl"; export OPENSSL; sh tools/c_rehash certs)
+       touch rehash.time
 
 test:   tests
 
@@ -268,6 +274,9 @@
        $(MAKE) CC='${CC}' CFLAG='${CFLAG}' INSTALLTOP='${INSTALLTOP}' 
PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' BN_ASM='${BN_ASM}' DES_ENC='${DES_ENC}' 
BF_ENC='${BF_ENC}' CAST_ENC='${CAST_ENC}' RC4_ENC='${RC4_ENC}' RC5_ENC='${RC5_ENC}' 
SDIRS='${SDIRS}' SHA1_ASM_OBJ='${SHA1_ASM_OBJ}' MD5_ASM_OBJ='${MD5_ASM_OBJ}' 
RMD160_ASM_OBJ='${RMD160_ASM_OBJ}' AR='${AR}' tests );
        @apps/openssl version -a
 
+report:
+       @$(PERL) util/selftest.pl
+
 depend:
        @for i in $(DIRS) ;\
        do \
@@ -298,14 +307,17 @@
 util/ssleay.num::
        perl util/mkdef.pl ssl update
 
+crypto/objects/obj_dat.h: crypto/objects/objects.h crypto/objects/obj_dat.pl
+       perl crypto/objects/obj_dat.pl crypto/objects/objects.h 
+crypto/objects/obj_dat.h
+
 TABLE: Configure
        (echo 'Output of `Configure TABLE'"':"; \
        perl Configure TABLE) > TABLE
 
-update: depend errors util/libeay.num util/ssleay.num TABLE
+update: depend errors util/libeay.num util/ssleay.num crypto/objects/obj_dat.h TABLE
 
 tar:
-       @tar --norecurse -cvf - \
+       @$(TAR) $(TARFLAGS) -cvf - \
                `find * \! -path CVS/\* \! -path \*/CVS/\* \! -name CVS \! -name 
.cvsignore \! -name STATUS \! -name TABLE | sort` |\
        tardy --user_number=0  --user_name=openssl \
              --group_number=0 --group_name=openssl \
@@ -322,7 +334,7 @@
 dist_pem_h:
        (cd crypto/pem; $(MAKE) CC='${CC}' SDIRS='${SDIRS}' CFLAG='${CFLAG}' pem.h; 
$(MAKE) clean)
 
-install: all
+install: all install_docs
        @$(PERL) $(TOP)/util/mkdir-p.pl $(INSTALL_PREFIX)$(INSTALLTOP)/bin \
                $(INSTALL_PREFIX)$(INSTALLTOP)/lib \
                $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl \
@@ -338,7 +350,7 @@
        @for i in $(DIRS) ;\
        do \
        (cd $$i; echo "installing $$i..."; \
-       $(MAKE) CC='${CC}' CFLAG='${CFLAG}' INSTALL_PREFIX='${INSTALL_PREFIX}' 
INSTALLTOP='${INSTALLTOP}' OPENSSLDIR='${OPENSSLDIR}' EX_LIBS='${EX_LIBS}' 
SDIRS='${SDIRS}' install ); \
+       $(MAKE) CC='${CC}' CFLAG='${CFLAG}' INSTALL_PREFIX='${INSTALL_PREFIX}' 
+INSTALLTOP='${INSTALLTOP}' OPENSSLDIR='${OPENSSLDIR}' EX_LIBS='${EX_LIBS}' 
+SDIRS='${SDIRS}' RANLIB='${RANLIB}' install ); \
        done
        @for i in $(LIBS) ;\
        do \
@@ -346,6 +358,31 @@
                cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/lib; \
                $(RANLIB) $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i; \
                chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i ); \
+       done
+
+install_docs:
+       @$(PERL) $(TOP)/util/mkdir-p.pl \
+               $(INSTALL_PREFIX)$(MANDIR)/man1 \
+               $(INSTALL_PREFIX)$(MANDIR)/man3 \
+               $(INSTALL_PREFIX)$(MANDIR)/man5 \
+               $(INSTALL_PREFIX)$(MANDIR)/man7
+       @echo installing man 1 and man 5
+       @for i in doc/apps/*.pod; do \
+               (cd `dirname $$i`; \
+               fn=`basename $$i .pod`; \
+               sec=`[ "$$fn" = "config" ] && echo 5 || echo 1`; \
+               $(PERL) ../../util/pod2man.pl --section=$$sec --center=OpenSSL \
+                        --release=$(VERSION) `basename $$i` \
+                       >  $(INSTALL_PREFIX)$(MANDIR)/man$$sec/`basename $$i 
+.pod`.$$sec); \
+       done
+       @echo installing man 3 and man 7
+       @for i in doc/crypto/*.pod doc/ssl/*.pod; do \
+               (cd `dirname $$i`; \
+               fn=`basename $$i .pod`; \
+               sec=`[ "$$fn" = "des_modes" ] && echo 7 || echo 3`; \
+               $(PERL) ../../util/pod2man.pl --section=$$sec --center=OpenSSL \
+                       --release=$(VERSION) `basename $$i` \
+                       >  $(INSTALL_PREFIX)$(MANDIR)/man$$sec/`basename $$i 
+.pod`.$$sec); \
        done
 
 # DO NOT DELETE THIS LINE -- make depend depends on it.
Index: opensa/openssl/makefile.ssl
diff -u opensa/openssl/makefile.ssl:1.1 opensa/openssl/makefile.ssl:1.2
--- opensa/openssl/makefile.ssl:1.1     Tue Jan 25 22:57:51 2000
+++ opensa/openssl/makefile.ssl Thu Mar  2 21:11:48 2000
@@ -1,351 +1,390 @@
-##
-## Makefile for OpenSSL
-##
-
-VERSION=0.9.4
-MAJOR=0
-MINOR=9.4
-PLATFORM=VC-WIN32
-OPTIONS=
-# INSTALL_PREFIX is for package builders so that they can configure
-# for, say, /usr/ and yet have everything installed to /tmp/somedir/usr/.
-# Normally it is left empty.
-INSTALL_PREFIX=
-INSTALLTOP=/usr/local/ssl
-
-# Do not edit this manually. Use Configure --openssldir=DIR do change this!
-OPENSSLDIR=/usr/local/ssl
-
-# RSAref  - Define if we are to link with RSAref.
-# NO_IDEA - Define to build without the IDEA algorithm
-# NO_RC4  - Define to build without the RC4 algorithm
-# NO_RC2  - Define to build without the RC2 algorithm
-# THREADS - Define when building with threads, you will probably also need any
-#           system defines as well, i.e. _REENTERANT for Solaris 2.[34]
-# TERMIO  - Define the termio terminal subsystem, needed if sgtty is missing.
-# TERMIOS - Define the termios terminal subsystem, Silicon Graphics.
-# LONGCRYPT - Define to use HPUX 10.x's long password modification to crypt(3).
-# DEVRANDOM - Give this the value of the 'random device' if your OS supports
-#           one.  32 bytes will be read from this when the random
-#           number generator is initalised.
-# SSL_ALLOW_ADH - define if you want the server to be able to use the
-#           SSLv3 anon-DH ciphers.
-# SSL_FORBID_ENULL - define if you want the server to be not able to use the
-#           NULL encryption ciphers.
-#
-# LOCK_DEBUG - turns on lots of lock debug output :-)
-# REF_CHECK - turn on some xyz_free() assertions.
-# REF_PRINT - prints some stuff on structure free.
-# CRYPTO_MDEBUG - turns on my 'memory leak' detecting stuff
-# MFUNC - Make all Malloc/Free/Realloc calls call
-#       CRYPTO_malloc/CRYPTO_free/CRYPTO_realloc which can be setup to
-#       call application defined callbacks via CRYPTO_set_mem_functions()
-# MD5_ASM needs to be defined to use the x86 assembler for MD5
-# SHA1_ASM needs to be defined to use the x86 assembler for SHA1
-# RMD160_ASM needs to be defined to use the x86 assembler for RIPEMD160
-# Do not define B_ENDIAN or L_ENDIAN if 'unsigned long' == 8.  It must
-# equal 4.
-# PKCS1_CHECK - pkcs1 tests.
-
-CC= cl
-#CFLAG= -DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -m486 -Wall -Wuninitialized 
-DSHA1_ASM -DMD5_ASM -DRMD160_ASM
-CFLAG= -DTHREADS  
-DEPFLAG= 
-PEX_LIBS= -L. -L.. -L../.. -L../../..
-EX_LIBS= 
-AR=ar r
-RANLIB= true
-PERL= perl
-
-# Set BN_ASM to bn_asm.o if you want to use the C version
-BN_ASM= bn_asm.o
-#BN_ASM= bn_asm.o
-#BN_ASM= asm/bn86-elf.o        # elf, linux-elf
-#BN_ASM= asm/bn86-sol.o # solaris
-#BN_ASM= asm/bn86-out.o # a.out, FreeBSD
-#BN_ASM= asm/bn86bsdi.o # bsdi
-#BN_ASM= asm/alpha.o    # DEC Alpha
-#BN_ASM= asm/pa-risc2.o # HP-UX PA-RISC
-#BN_ASM= asm/r3000.o    # SGI MIPS cpu
-#BN_ASM= asm/sparc.o    # Sun solaris/SunOS
-#BN_ASM= asm/bn-win32.o # Windows 95/NT
-#BN_ASM= asm/x86w16.o   # 16 bit code for Windows 3.1/DOS
-#BN_ASM= asm/x86w32.o   # 32 bit code for Windows 3.1
-
-# For x86 assembler: Set PROCESSOR to 386 if you want to support
-# the 80386.
-PROCESSOR= 
-
-# Set DES_ENC to des_enc.o if you want to use the C version
-#There are 4 x86 assember options.
-DES_ENC= des_enc.o fcrypt_b.o
-#DES_ENC= des_enc.o fcrypt_b.o          # C
-#DES_ENC= asm/dx86-elf.o asm/yx86-elf.o # elf
-#DES_ENC= asm/dx86-sol.o asm/yx86-sol.o # solaris
-#DES_ENC= asm/dx86-out.o asm/yx86-out.o # a.out, FreeBSD
-#DES_ENC= asm/dx86bsdi.o asm/yx86bsdi.o # bsdi
-
-# Set BF_ENC to bf_enc.o if you want to use the C version
-#There are 4 x86 assember options.
-BF_ENC= bf_enc.o
-#BF_ENC= bf_enc.o
-#BF_ENC= asm/bx86-elf.o # elf
-#BF_ENC= asm/bx86-sol.o # solaris
-#BF_ENC= asm/bx86-out.o # a.out, FreeBSD
-#BF_ENC= asm/bx86bsdi.o # bsdi
-
-# Set CAST_ENC to c_enc.o if you want to use the C version
-#There are 4 x86 assember options.
-CAST_ENC= c_enc.o
-#CAST_ENC= c_enc.o
-#CAST_ENC= asm/cx86-elf.o # elf
-#CAST_ENC= asm/cx86-sol.o # solaris
-#CAST_ENC= asm/cx86-out.o # a.out, FreeBSD
-#CAST_ENC= asm/cx86bsdi.o # bsdi
-
-# Set RC4_ENC to rc4_enc.o if you want to use the C version
-#There are 4 x86 assember options.
-RC4_ENC= rc4_enc.o
-#RC4_ENC= rc4_enc.o
-#RC4_ENC= asm/rx86-elf.o # elf
-#RC4_ENC= asm/rx86-sol.o # solaris
-#RC4_ENC= asm/rx86-out.o # a.out, FreeBSD
-#RC4_ENC= asm/rx86bsdi.o # bsdi
-
-# Set RC5_ENC to rc5_enc.o if you want to use the C version
-#There are 4 x86 assember options.
-RC5_ENC= rc5_enc.o
-#RC5_ENC= rc5_enc.o
-#RC5_ENC= asm/r586-elf.o # elf
-#RC5_ENC= asm/r586-sol.o # solaris
-#RC5_ENC= asm/r586-out.o # a.out, FreeBSD
-#RC5_ENC= asm/r586bsdi.o # bsdi
-
-# Also need MD5_ASM defined
-MD5_ASM_OBJ= 
-#MD5_ASM_OBJ= asm/mx86-elf.o        # elf
-#MD5_ASM_OBJ= asm/mx86-sol.o        # solaris
-#MD5_ASM_OBJ= asm/mx86-out.o        # a.out, FreeBSD
-#MD5_ASM_OBJ= asm/mx86bsdi.o        # bsdi
-
-# Also need SHA1_ASM defined
-SHA1_ASM_OBJ= 
-#SHA1_ASM_OBJ= asm/sx86-elf.o       # elf
-#SHA1_ASM_OBJ= asm/sx86-sol.o       # solaris
-#SHA1_ASM_OBJ= asm/sx86-out.o       # a.out, FreeBSD
-#SHA1_ASM_OBJ= asm/sx86bsdi.o       # bsdi
-
-# Also need RMD160_ASM defined
-RMD160_ASM_OBJ= 
-#RMD160_ASM_OBJ= asm/rm86-elf.o       # elf
-#RMD160_ASM_OBJ= asm/rm86-sol.o       # solaris
-#RMD160_ASM_OBJ= asm/rm86-out.o       # a.out, FreeBSD
-#RMD160_ASM_OBJ= asm/rm86bsdi.o       # bsdi
-
-DIRS=   crypto ssl rsaref apps test tools
-SHLIBDIRS= crypto ssl
-
-# dirs in crypto to build
-SDIRS=  \
-       md2 md5 sha mdc2 hmac ripemd \
-       des rc2 rc4 rc5 idea bf cast \
-       bn rsa dsa dh \
-       buffer bio stack lhash rand err objects \
-       evp asn1 pem x509 x509v3 conf txt_db pkcs7 pkcs12 comp
-
-MAKEFILE= Makefile.ssl
-MAKE=     make -f Makefile.ssl
-
-MAN1=1
-MAN3=3
-SHELL=/bin/sh
-
-TOP=    .
-ONEDIRS=out tmp
-EDIRS=  times doc bugs util include certs ms shlib mt demos perl sf dep VMS
-WDIRS=  windows
-LIBS=   libcrypto.a libssl.a 
-
-GENERAL=        Makefile
-BASENAME=       openssl
-NAME=           $(BASENAME)-$(VERSION)
-TARFILE=        $(NAME).tar
-WTARFILE=       $(NAME)-win.tar
-EXHEADER=       e_os.h e_os2.h
-HEADER=         e_os.h
-
-all: Makefile.ssl
-       @for i in $(DIRS) ;\
-       do \
-       (cd $$i && echo "making all in $$i..." && \
-       $(MAKE) CC='${CC}' PLATFORM='${PLATFORM}' CFLAG='${CFLAG}' 
INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' 
BN_ASM='${BN_ASM}' DES_ENC='${DES_ENC}' BF_ENC='${BF_ENC}' CAST_ENC='${CAST_ENC}' 
RC4_ENC='${RC4_ENC}' RC5_ENC='${RC5_ENC}' SHA1_ASM_OBJ='${SHA1_ASM_OBJ}' 
MD5_ASM_OBJ='${MD5_ASM_OBJ}' RMD160_ASM_OBJ='${RMD160_ASM_OBJ}' SDIRS='${SDIRS}' 
AR='${AR}' PROCESSOR='${PROCESSOR}' PERL='${PERL}' RANLIB='${RANLIB}' all ) || exit 1; 
\
-       done
-       -@# cd perl; $(PERL) Makefile.PL; make
-
-sub_all:
-       @for i in $(DIRS) ;\
-       do \
-       (cd $$i && echo "making all in $$i..." && \
-       $(MAKE) CC='${CC}' PLATFORM='${PLATFORM}' CFLAG='${CFLAG}' SDIRS='$(SDIRS)' 
INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' 
BN_ASM='${BN_ASM}' DES_ENC='${DES_ENC}' BF_ENC='${BF_ENC}' CAST_ENC='${CAST_ENC}' 
RC4_ENC='${RC4_ENC}' RC5_ENC='${RC5_ENC}' SHA1_ASM_OBJ='${SHA1_ASM_OBJ}' 
MD5_ASM_OBJ='${MD5_ASM_OBJ}' RMD160_ASM_OBJ='${RMD160_ASM_OBJ}' AR='${AR}' 
PROCESSOR='${PROCESSOR}' PERL='${PERL}' RANLIB='${RANLIB}' all ) || exit 1; \
-       done;
-
-linux-shared:
-       for i in ${SHLIBDIRS}; do \
-       rm -f lib$$i.a lib$$i.so \
-               lib$$i.so.${MAJOR} lib$$i.so.${MAJOR}.${MINOR}; \
-       ${MAKE} CC='${CC}' PLATFORM='${PLATFORM}' CFLAG='-fPIC ${CFLAG}' 
SDIRS='${SDIRS}' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' 
EX_LIBS='${EX_LIBS}' BN_ASM='${BN_ASM}' DES_ENC='${DES_ENC}' BF_ENC='${BF_ENC}' 
CAST_ENC='${CAST_ENC}' RC4_ENC='${RC4_ENC}' RC5_ENC='${RC5_ENC}' 
SHA1_ASM_OBJ='${SHA1_ASM_OBJ}' MD5_ASM_OBJ='${MD5_ASM_OBJ}' 
RMD160_ASM_OBJ='${RMD160_ASM_OBJ}' AR='${AR}' DIRS=$$i clean all || exit 1; \
-       ( set -x; ${CC}  -shared -o lib$$i.so.${MAJOR}.${MINOR} \
-               -Wl,-S,-soname=lib$$i.so.${MAJOR} \
-               -Wl,--whole-archive lib$$i.a \
-               -Wl,--no-whole-archive -lc ) || exit 1; \
-       rm -f lib$$i.a; make -C $$i clean || exit 1 ;\
-       done;
-       @set -x; \
-       for i in ${SHLIBDIRS}; do \
-       ln -s lib$$i.so.${MAJOR}.${MINOR} lib$$i.so.${MAJOR}; \
-       ln -s lib$$i.so.${MAJOR} lib$$i.so; \
-       done;
-
-Makefile.ssl: Makefile.org
-       @echo "Makefile.ssl is older than Makefile.org."
-       @echo "Reconfigure the source tree (via './config' or 'perl Configure'), 
please."
-       @false
-
-libclean:
-       rm -f *.a */lib */*/lib
-
-clean:
-       rm -f shlib/*.o *.o core a.out fluff *.map
-       @for i in $(DIRS) ;\
-       do \
-       (cd $$i && echo "making clean in $$i..." && \
-       $(MAKE) SDIRS='${SDIRS}' clean ) || exit 1; \
-       rm -f $(LIBS); \
-       done;
-       rm -f *.a *.o speed.* *.map *.so .pure core
-       rm -f $(TARFILE)
-       @for i in $(ONEDIRS) ;\
-       do \
-       rm -fr $$i/*; \
-       done
-
-makefile.one: files
-       $(PERL) util/mk1mf.pl >makefile.one; \
-       sh util/do_ms.sh
-
-files:
-       $(PERL) $(TOP)/util/files.pl Makefile.ssl > $(TOP)/MINFO
-       @for i in $(DIRS) ;\
-       do \
-       (cd $$i && echo "making 'files' in $$i..." && \
-       $(MAKE) SDIRS='${SDIRS}' PERL='${PERL}' files ) || exit 1; \
-       done;
-
-links:
-       @$(TOP)/util/point.sh Makefile.ssl Makefile
-       @$(PERL) $(TOP)/util/mkdir-p.pl include/openssl
-       @$(PERL) $(TOP)/util/mklink.pl include/openssl $(EXHEADER)
-       @for i in $(DIRS); do \
-       (cd $$i && echo "making links in $$i..." && \
-       $(MAKE) CC='${CC}' PLATFORM='${PLATFORM}' CFLAG='${CFLAG}' SDIRS='$(SDIRS)' 
INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' 
BN_ASM='${BN_ASM}' DES_ENC='${DES_ENC}' BF_ENC='${BF_ENC}' CAST_ENC='${CAST_ENC}' 
RC4_ENC='${RC4_ENC}' RC5_ENC='${RC5_ENC}' SHA1_ASM_OBJ='${SHA1_ASM_OBJ}' 
MD5_ASM_OBJ='${MD5_ASM_OBJ}' RMD160_ASM_OBJ='${RMD160_ASM_OBJ}' AR='${AR}' 
PERL='${PERL}' links ) || exit 1; \
-       done;
-
-dclean:
-       rm -f *.bak
-       @for i in $(DIRS) ;\
-       do \
-       (cd $$i && echo "making dclean in $$i..." && \
-       $(MAKE) SDIRS='${SDIRS}' PERL='${PERL}' dclean ) || exit 1; \
-       done;
-
-rehash:
-       @(OPENSSL="`pwd`/apps/openssl"; export OPENSSL; sh tools/c_rehash certs)
-
-test:   tests
-
-tests: rehash
-       @(cd test && echo "testing..." && \
-       $(MAKE) CC='${CC}' CFLAG='${CFLAG}' INSTALLTOP='${INSTALLTOP}' 
PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' BN_ASM='${BN_ASM}' DES_ENC='${DES_ENC}' 
BF_ENC='${BF_ENC}' CAST_ENC='${CAST_ENC}' RC4_ENC='${RC4_ENC}' RC5_ENC='${RC5_ENC}' 
SDIRS='${SDIRS}' SHA1_ASM_OBJ='${SHA1_ASM_OBJ}' MD5_ASM_OBJ='${MD5_ASM_OBJ}' 
RMD160_ASM_OBJ='${RMD160_ASM_OBJ}' AR='${AR}' tests );
-       @apps/openssl version -a
-
-depend:
-       @for i in $(DIRS) ;\
-       do \
-       (cd $$i && echo "making dependencies $$i..." && \
-       $(MAKE) SDIRS='${SDIRS}' DEPFLAG='${DEPFLAG}' depend ) || exit 1; \
-       done;
-
-lint:
-       @for i in $(DIRS) ;\
-       do \
-       (cd $$i && echo "making lint $$i..." && \
-       $(MAKE) SDIRS='${SDIRS}' lint ) || exit 1; \
-       done;
-
-tags:
-       @for i in $(DIRS) ;\
-       do \
-       (cd $$i && echo "making tags $$i..." && \
-       $(MAKE) SDIRS='${SDIRS}' tags ) || exit 1; \
-       done;
-
-errors:
-       perl util/mkerr.pl -recurse -write
-
-util/libeay.num::
-       perl util/mkdef.pl crypto update
-
-util/ssleay.num::
-       perl util/mkdef.pl ssl update
-
-TABLE: Configure
-       (echo 'Output of `Configure TABLE'"':"; \
-       perl Configure TABLE) > TABLE
-
-update: depend errors util/libeay.num util/ssleay.num TABLE
-
-tar:
-       @tar --norecurse -cvf - \
-               `find * \! -path CVS/\* \! -path \*/CVS/\* \! -name CVS \! -name 
.cvsignore \! -name STATUS \! -name TABLE | sort` |\
-       tardy --user_number=0  --user_name=openssl \
-             --group_number=0 --group_name=openssl \
-             --prefix=openssl-$(VERSION) - |\
-       gzip --best >../$(TARFILE).gz; \
-       ls -l ../$(TARFILE).gz
-
-dist:   
-       $(PERL) Configure dist
-       @$(MAKE) dist_pem_h
-       @$(MAKE) SDIRS='${SDIRS}' clean
-       @$(MAKE) tar
-
-dist_pem_h:
-       (cd crypto/pem; $(MAKE) CC='${CC}' SDIRS='${SDIRS}' CFLAG='${CFLAG}' pem.h; 
$(MAKE) clean)
-
-install: all
-       @$(PERL) $(TOP)/util/mkdir-p.pl $(INSTALL_PREFIX)$(INSTALLTOP)/bin \
-               $(INSTALL_PREFIX)$(INSTALLTOP)/lib \
-               $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl \
-               $(INSTALL_PREFIX)$(OPENSSLDIR)/misc \
-               $(INSTALL_PREFIX)$(OPENSSLDIR)/certs \
-               $(INSTALL_PREFIX)$(OPENSSLDIR)/private \
-               $(INSTALL_PREFIX)$(OPENSSLDIR)/lib
-       @for i in $(EXHEADER) ;\
-       do \
-       (cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i; \
-       chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i ); \
-       done;
-       @for i in $(DIRS) ;\
-       do \
-       (cd $$i; echo "installing $$i..."; \
-       $(MAKE) CC='${CC}' CFLAG='${CFLAG}' INSTALL_PREFIX='${INSTALL_PREFIX}' 
INSTALLTOP='${INSTALLTOP}' OPENSSLDIR='${OPENSSLDIR}' EX_LIBS='${EX_LIBS}' 
SDIRS='${SDIRS}' install ); \
-       done
-       @for i in $(LIBS) ;\
-       do \
-       (       echo installing $$i; \
-               cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/lib; \
-               $(RANLIB) $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i; \
-               chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i ); \
-       done
-
-# DO NOT DELETE THIS LINE -- make depend depends on it.
+### Generated automatically from Makefile.org by Configure.
+
+##
+## Makefile for OpenSSL
+##
+
+VERSION=0.9.5
+MAJOR=0
+MINOR=9.5
+PLATFORM=VC-WIN32
+OPTIONS=
+# INSTALL_PREFIX is for package builders so that they can configure
+# for, say, /usr/ and yet have everything installed to /tmp/somedir/usr/.
+# Normally it is left empty.
+INSTALL_PREFIX=
+INSTALLTOP=/usr/local/ssl
+
+# Do not edit this manually. Use Configure --openssldir=DIR do change this!
+OPENSSLDIR=/usr/local/ssl
+
+# RSAref  - Define if we are to link with RSAref.
+# NO_IDEA - Define to build without the IDEA algorithm
+# NO_RC4  - Define to build without the RC4 algorithm
+# NO_RC2  - Define to build without the RC2 algorithm
+# THREADS - Define when building with threads, you will probably also need any
+#           system defines as well, i.e. _REENTERANT for Solaris 2.[34]
+# TERMIO  - Define the termio terminal subsystem, needed if sgtty is missing.
+# TERMIOS - Define the termios terminal subsystem, Silicon Graphics.
+# LONGCRYPT - Define to use HPUX 10.x's long password modification to crypt(3).
+# DEVRANDOM - Give this the value of the 'random device' if your OS supports
+#           one.  32 bytes will be read from this when the random
+#           number generator is initalised.
+# SSL_ALLOW_ADH - define if you want the server to be able to use the
+#           SSLv3 anon-DH ciphers.
+# SSL_FORBID_ENULL - define if you want the server to be not able to use the
+#           NULL encryption ciphers.
+#
+# LOCK_DEBUG - turns on lots of lock debug output :-)
+# REF_CHECK - turn on some xyz_free() assertions.
+# REF_PRINT - prints some stuff on structure free.
+# CRYPTO_MDEBUG - turns on my 'memory leak' detecting stuff
+# MFUNC - Make all Malloc/Free/Realloc calls call
+#       CRYPTO_malloc/CRYPTO_free/CRYPTO_realloc which can be setup to
+#       call application defined callbacks via CRYPTO_set_mem_functions()
+# MD5_ASM needs to be defined to use the x86 assembler for MD5
+# SHA1_ASM needs to be defined to use the x86 assembler for SHA1
+# RMD160_ASM needs to be defined to use the x86 assembler for RIPEMD160
+# Do not define B_ENDIAN or L_ENDIAN if 'unsigned long' == 8.  It must
+# equal 4.
+# PKCS1_CHECK - pkcs1 tests.
+
+CC= cl
+#CFLAG= -DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -m486 -Wall -Wuninitialized 
+-DSHA1_ASM -DMD5_ASM -DRMD160_ASM
+CFLAG= -DTHREADS  
+DEPFLAG= 
+PEX_LIBS= -L. -L.. -L../.. -L../../..
+EX_LIBS= 
+AR=ar r
+RANLIB= true
+PERL= perl
+TAR= tar
+TARFLAGS= --norecurse
+
+# Set BN_ASM to bn_asm.o if you want to use the C version
+BN_ASM= bn_asm.o
+#BN_ASM= bn_asm.o
+#BN_ASM= asm/bn86-elf.o        # elf, linux-elf
+#BN_ASM= asm/bn86-sol.o # solaris
+#BN_ASM= asm/bn86-out.o # a.out, FreeBSD
+#BN_ASM= asm/bn86bsdi.o # bsdi
+#BN_ASM= asm/alpha.o    # DEC Alpha
+#BN_ASM= asm/pa-risc2.o # HP-UX PA-RISC
+#BN_ASM= asm/r3000.o    # SGI MIPS cpu
+#BN_ASM= asm/sparc.o    # Sun solaris/SunOS
+#BN_ASM= asm/bn-win32.o # Windows 95/NT
+#BN_ASM= asm/x86w16.o   # 16 bit code for Windows 3.1/DOS
+#BN_ASM= asm/x86w32.o   # 32 bit code for Windows 3.1
+
+# For x86 assembler: Set PROCESSOR to 386 if you want to support
+# the 80386.
+PROCESSOR= 
+
+# Set DES_ENC to des_enc.o if you want to use the C version
+#There are 4 x86 assember options.
+DES_ENC= des_enc.o fcrypt_b.o
+#DES_ENC= des_enc.o fcrypt_b.o          # C
+#DES_ENC= asm/dx86-elf.o asm/yx86-elf.o # elf
+#DES_ENC= asm/dx86-sol.o asm/yx86-sol.o # solaris
+#DES_ENC= asm/dx86-out.o asm/yx86-out.o # a.out, FreeBSD
+#DES_ENC= asm/dx86bsdi.o asm/yx86bsdi.o # bsdi
+
+# Set BF_ENC to bf_enc.o if you want to use the C version
+#There are 4 x86 assember options.
+BF_ENC= bf_enc.o
+#BF_ENC= bf_enc.o
+#BF_ENC= asm/bx86-elf.o # elf
+#BF_ENC= asm/bx86-sol.o # solaris
+#BF_ENC= asm/bx86-out.o # a.out, FreeBSD
+#BF_ENC= asm/bx86bsdi.o # bsdi
+
+# Set CAST_ENC to c_enc.o if you want to use the C version
+#There are 4 x86 assember options.
+CAST_ENC= c_enc.o
+#CAST_ENC= c_enc.o
+#CAST_ENC= asm/cx86-elf.o # elf
+#CAST_ENC= asm/cx86-sol.o # solaris
+#CAST_ENC= asm/cx86-out.o # a.out, FreeBSD
+#CAST_ENC= asm/cx86bsdi.o # bsdi
+
+# Set RC4_ENC to rc4_enc.o if you want to use the C version
+#There are 4 x86 assember options.
+RC4_ENC= rc4_enc.o
+#RC4_ENC= rc4_enc.o
+#RC4_ENC= asm/rx86-elf.o # elf
+#RC4_ENC= asm/rx86-sol.o # solaris
+#RC4_ENC= asm/rx86-out.o # a.out, FreeBSD
+#RC4_ENC= asm/rx86bsdi.o # bsdi
+
+# Set RC5_ENC to rc5_enc.o if you want to use the C version
+#There are 4 x86 assember options.
+RC5_ENC= rc5_enc.o
+#RC5_ENC= rc5_enc.o
+#RC5_ENC= asm/r586-elf.o # elf
+#RC5_ENC= asm/r586-sol.o # solaris
+#RC5_ENC= asm/r586-out.o # a.out, FreeBSD
+#RC5_ENC= asm/r586bsdi.o # bsdi
+
+# Also need MD5_ASM defined
+MD5_ASM_OBJ= 
+#MD5_ASM_OBJ= asm/mx86-elf.o        # elf
+#MD5_ASM_OBJ= asm/mx86-sol.o        # solaris
+#MD5_ASM_OBJ= asm/mx86-out.o        # a.out, FreeBSD
+#MD5_ASM_OBJ= asm/mx86bsdi.o        # bsdi
+
+# Also need SHA1_ASM defined
+SHA1_ASM_OBJ= 
+#SHA1_ASM_OBJ= asm/sx86-elf.o       # elf
+#SHA1_ASM_OBJ= asm/sx86-sol.o       # solaris
+#SHA1_ASM_OBJ= asm/sx86-out.o       # a.out, FreeBSD
+#SHA1_ASM_OBJ= asm/sx86bsdi.o       # bsdi
+
+# Also need RMD160_ASM defined
+RMD160_ASM_OBJ= 
+#RMD160_ASM_OBJ= asm/rm86-elf.o       # elf
+#RMD160_ASM_OBJ= asm/rm86-sol.o       # solaris
+#RMD160_ASM_OBJ= asm/rm86-out.o       # a.out, FreeBSD
+#RMD160_ASM_OBJ= asm/rm86bsdi.o       # bsdi
+
+DIRS=   crypto ssl rsaref apps test tools
+SHLIBDIRS= crypto ssl
+
+# dirs in crypto to build
+SDIRS=  \
+       md2 md5 sha mdc2 hmac ripemd \
+       des rc2 rc4 rc5 idea bf cast \
+       bn rsa dsa dh \
+       buffer bio stack lhash rand err objects \
+       evp asn1 pem x509 x509v3 conf txt_db pkcs7 pkcs12 comp
+
+MAKEFILE= Makefile.ssl
+MAKE=     make -f Makefile.ssl
+
+MANDIR=$(OPENSSLDIR)/man
+MAN1=1
+MAN3=3
+SHELL=/bin/sh
+
+TOP=    .
+ONEDIRS=out tmp
+EDIRS=  times doc bugs util include certs ms shlib mt demos perl sf dep VMS
+WDIRS=  windows
+LIBS=   libcrypto.a libssl.a 
+
+GENERAL=        Makefile
+BASENAME=       openssl
+NAME=           $(BASENAME)-$(VERSION)
+TARFILE=        $(NAME).tar
+WTARFILE=       $(NAME)-win.tar
+EXHEADER=       e_os.h e_os2.h
+HEADER=         e_os.h
+
+all: Makefile.ssl
+       @for i in $(DIRS) ;\
+       do \
+       (cd $$i && echo "making all in $$i..." && \
+       $(MAKE) CC='${CC}' PLATFORM='${PLATFORM}' CFLAG='${CFLAG}' 
+INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' 
+BN_ASM='${BN_ASM}' DES_ENC='${DES_ENC}' BF_ENC='${BF_ENC}' CAST_ENC='${CAST_ENC}' 
+RC4_ENC='${RC4_ENC}' RC5_ENC='${RC5_ENC}' SHA1_ASM_OBJ='${SHA1_ASM_OBJ}' 
+MD5_ASM_OBJ='${MD5_ASM_OBJ}' RMD160_ASM_OBJ='${RMD160_ASM_OBJ}' SDIRS='${SDIRS}' 
+AR='${AR}' PROCESSOR='${PROCESSOR}' PERL='${PERL}' RANLIB='${RANLIB}' all ) || exit 
+1; \
+       done
+       -@# cd crypto; $(MAKE) CC='${CC}' PLATFORM='${PLATFORM}' CFLAG='${CFLAG}' 
+INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' 
+BN_ASM='${BN_ASM}' DES_ENC='${DES_ENC}' BF_ENC='${BF_ENC}' CAST_ENC='${CAST_ENC}' 
+RC4_ENC='${RC4_ENC}' RC5_ENC='${RC5_ENC}' SHA1_ASM_OBJ='${SHA1_ASM_OBJ}' 
+MD5_ASM_OBJ='${MD5_ASM_OBJ}' RMD160_ASM_OBJ='${RMD160_ASM_OBJ}' SDIRS='${SDIRS}' 
+AR='${AR}' PROCESSOR='${PROCESSOR}' PERL='${PERL}' RANLIB='${RANLIB}' testapps
+       -@# cd perl; $(PERL) Makefile.PL; make
+
+sub_all:
+       @for i in $(DIRS) ;\
+       do \
+       (cd $$i && echo "making all in $$i..." && \
+       $(MAKE) CC='${CC}' PLATFORM='${PLATFORM}' CFLAG='${CFLAG}' SDIRS='$(SDIRS)' 
+INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' 
+BN_ASM='${BN_ASM}' DES_ENC='${DES_ENC}' BF_ENC='${BF_ENC}' CAST_ENC='${CAST_ENC}' 
+RC4_ENC='${RC4_ENC}' RC5_ENC='${RC5_ENC}' SHA1_ASM_OBJ='${SHA1_ASM_OBJ}' 
+MD5_ASM_OBJ='${MD5_ASM_OBJ}' RMD160_ASM_OBJ='${RMD160_ASM_OBJ}' AR='${AR}' 
+PROCESSOR='${PROCESSOR}' PERL='${PERL}' RANLIB='${RANLIB}' all ) || exit 1; \
+       done;
+
+linux-shared:
+       for i in ${SHLIBDIRS}; do \
+       rm -f lib$$i.a lib$$i.so \
+               lib$$i.so.${MAJOR} lib$$i.so.${MAJOR}.${MINOR}; \
+       ${MAKE} CC='${CC}' PLATFORM='${PLATFORM}' CFLAG='-fPIC ${CFLAG}' 
+SDIRS='${SDIRS}' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' 
+EX_LIBS='${EX_LIBS}' BN_ASM='${BN_ASM}' DES_ENC='${DES_ENC}' BF_ENC='${BF_ENC}' 
+CAST_ENC='${CAST_ENC}' RC4_ENC='${RC4_ENC}' RC5_ENC='${RC5_ENC}' 
+SHA1_ASM_OBJ='${SHA1_ASM_OBJ}' MD5_ASM_OBJ='${MD5_ASM_OBJ}' 
+RMD160_ASM_OBJ='${RMD160_ASM_OBJ}' AR='${AR}' DIRS=$$i clean all || exit 1; \
+       ( set -x; ${CC}  -shared -o lib$$i.so.${MAJOR}.${MINOR} \
+               -Wl,-S,-soname=lib$$i.so.${MAJOR} \
+               -Wl,--whole-archive lib$$i.a \
+               -Wl,--no-whole-archive -lc ) || exit 1; \
+       rm -f lib$$i.a; make -C $$i clean || exit 1 ;\
+       done;
+       @set -x; \
+       for i in ${SHLIBDIRS}; do \
+       ln -s lib$$i.so.${MAJOR}.${MINOR} lib$$i.so.${MAJOR}; \
+       ln -s lib$$i.so.${MAJOR} lib$$i.so; \
+       done;
+
+Makefile.ssl: Makefile.org
+       @echo "Makefile.ssl is older than Makefile.org."
+       @echo "Reconfigure the source tree (via './config' or 'perl Configure'), 
+please."
+       @false
+
+libclean:
+       rm -f *.a */lib */*/lib
+
+clean:
+       rm -f shlib/*.o *.o core a.out fluff *.map rehash.time testlog make.log cctest 
+cctest.c
+       @for i in $(DIRS) ;\
+       do \
+       (cd $$i && echo "making clean in $$i..." && \
+       $(MAKE) SDIRS='${SDIRS}' clean ) || exit 1; \
+       rm -f $(LIBS); \
+       done;
+       rm -f *.a *.o speed.* *.map *.so .pure core
+       rm -f $(TARFILE)
+       @for i in $(ONEDIRS) ;\
+       do \
+       rm -fr $$i/*; \
+       done
+
+makefile.one: files
+       $(PERL) util/mk1mf.pl >makefile.one; \
+       sh util/do_ms.sh
+
+files:
+       $(PERL) $(TOP)/util/files.pl Makefile.ssl > $(TOP)/MINFO
+       @for i in $(DIRS) ;\
+       do \
+       (cd $$i && echo "making 'files' in $$i..." && \
+       $(MAKE) SDIRS='${SDIRS}' PERL='${PERL}' files ) || exit 1; \
+       done;
+
+links:
+       @$(TOP)/util/point.sh Makefile.ssl Makefile
+       @$(PERL) $(TOP)/util/mkdir-p.pl include/openssl
+       @$(PERL) $(TOP)/util/mklink.pl include/openssl $(EXHEADER)
+       @for i in $(DIRS); do \
+       (cd $$i && echo "making links in $$i..." && \
+       $(MAKE) CC='${CC}' PLATFORM='${PLATFORM}' CFLAG='${CFLAG}' SDIRS='$(SDIRS)' 
+INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' 
+BN_ASM='${BN_ASM}' DES_ENC='${DES_ENC}' BF_ENC='${BF_ENC}' CAST_ENC='${CAST_ENC}' 
+RC4_ENC='${RC4_ENC}' RC5_ENC='${RC5_ENC}' SHA1_ASM_OBJ='${SHA1_ASM_OBJ}' 
+MD5_ASM_OBJ='${MD5_ASM_OBJ}' RMD160_ASM_OBJ='${RMD160_ASM_OBJ}' AR='${AR}' 
+PERL='${PERL}' links ) || exit 1; \
+       done;
+
+dclean:
+       rm -f *.bak
+       @for i in $(DIRS) ;\
+       do \
+       (cd $$i && echo "making dclean in $$i..." && \
+       $(MAKE) SDIRS='${SDIRS}' PERL='${PERL}' dclean ) || exit 1; \
+       done;
+
+rehash: rehash.time
+rehash.time: certs
+       @(OPENSSL="`pwd`/apps/openssl"; export OPENSSL; sh tools/c_rehash certs)
+       touch rehash.time
+
+test:   tests
+
+tests: rehash
+       @(cd test && echo "testing..." && \
+       $(MAKE) CC='${CC}' CFLAG='${CFLAG}' INSTALLTOP='${INSTALLTOP}' 
+PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' BN_ASM='${BN_ASM}' DES_ENC='${DES_ENC}' 
+BF_ENC='${BF_ENC}' CAST_ENC='${CAST_ENC}' RC4_ENC='${RC4_ENC}' RC5_ENC='${RC5_ENC}' 
+SDIRS='${SDIRS}' SHA1_ASM_OBJ='${SHA1_ASM_OBJ}' MD5_ASM_OBJ='${MD5_ASM_OBJ}' 
+RMD160_ASM_OBJ='${RMD160_ASM_OBJ}' AR='${AR}' tests );
+       @apps/openssl version -a
+
+report:
+       @$(PERL) util/selftest.pl
+
+depend:
+       @for i in $(DIRS) ;\
+       do \
+       (cd $$i && echo "making dependencies $$i..." && \
+       $(MAKE) SDIRS='${SDIRS}' DEPFLAG='${DEPFLAG}' depend ) || exit 1; \
+       done;
+
+lint:
+       @for i in $(DIRS) ;\
+       do \
+       (cd $$i && echo "making lint $$i..." && \
+       $(MAKE) SDIRS='${SDIRS}' lint ) || exit 1; \
+       done;
+
+tags:
+       @for i in $(DIRS) ;\
+       do \
+       (cd $$i && echo "making tags $$i..." && \
+       $(MAKE) SDIRS='${SDIRS}' tags ) || exit 1; \
+       done;
+
+errors:
+       perl util/mkerr.pl -recurse -write
+
+util/libeay.num::
+       perl util/mkdef.pl crypto update
+
+util/ssleay.num::
+       perl util/mkdef.pl ssl update
+
+crypto/objects/obj_dat.h: crypto/objects/objects.h crypto/objects/obj_dat.pl
+       perl crypto/objects/obj_dat.pl crypto/objects/objects.h 
+crypto/objects/obj_dat.h
+
+TABLE: Configure
+       (echo 'Output of `Configure TABLE'"':"; \
+       perl Configure TABLE) > TABLE
+
+update: depend errors util/libeay.num util/ssleay.num crypto/objects/obj_dat.h TABLE
+
+tar:
+       @$(TAR) $(TARFLAGS) -cvf - \
+               `find * \! -path CVS/\* \! -path \*/CVS/\* \! -name CVS \! -name 
+.cvsignore \! -name STATUS \! -name TABLE | sort` |\
+       tardy --user_number=0  --user_name=openssl \
+             --group_number=0 --group_name=openssl \
+             --prefix=openssl-$(VERSION) - |\
+       gzip --best >../$(TARFILE).gz; \
+       ls -l ../$(TARFILE).gz
+
+dist:   
+       $(PERL) Configure dist
+       @$(MAKE) dist_pem_h
+       @$(MAKE) SDIRS='${SDIRS}' clean
+       @$(MAKE) tar
+
+dist_pem_h:
+       (cd crypto/pem; $(MAKE) CC='${CC}' SDIRS='${SDIRS}' CFLAG='${CFLAG}' pem.h; 
+$(MAKE) clean)
+
+install: all install_docs
+       @$(PERL) $(TOP)/util/mkdir-p.pl $(INSTALL_PREFIX)$(INSTALLTOP)/bin \
+               $(INSTALL_PREFIX)$(INSTALLTOP)/lib \
+               $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl \
+               $(INSTALL_PREFIX)$(OPENSSLDIR)/misc \
+               $(INSTALL_PREFIX)$(OPENSSLDIR)/certs \
+               $(INSTALL_PREFIX)$(OPENSSLDIR)/private \
+               $(INSTALL_PREFIX)$(OPENSSLDIR)/lib
+       @for i in $(EXHEADER) ;\
+       do \
+       (cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i; \
+       chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i ); \
+       done;
+       @for i in $(DIRS) ;\
+       do \
+       (cd $$i; echo "installing $$i..."; \
+       $(MAKE) CC='${CC}' CFLAG='${CFLAG}' INSTALL_PREFIX='${INSTALL_PREFIX}' 
+INSTALLTOP='${INSTALLTOP}' OPENSSLDIR='${OPENSSLDIR}' EX_LIBS='${EX_LIBS}' 
+SDIRS='${SDIRS}' RANLIB='${RANLIB}' install ); \
+       done
+       @for i in $(LIBS) ;\
+       do \
+       (       echo installing $$i; \
+               cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/lib; \
+               $(RANLIB) $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i; \
+               chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i ); \
+       done
+
+install_docs:
+       @$(PERL) $(TOP)/util/mkdir-p.pl \
+               $(INSTALL_PREFIX)$(MANDIR)/man1 \
+               $(INSTALL_PREFIX)$(MANDIR)/man3 \
+               $(INSTALL_PREFIX)$(MANDIR)/man5 \
+               $(INSTALL_PREFIX)$(MANDIR)/man7
+       @echo installing man 1 and man 5
+       @for i in doc/apps/*.pod; do \
+               (cd `dirname $$i`; \
+               fn=`basename $$i .pod`; \
+               sec=`[ "$$fn" = "config" ] && echo 5 || echo 1`; \
+               $(PERL) ../../util/pod2man.pl --section=$$sec --center=OpenSSL \
+                        --release=$(VERSION) `basename $$i` \
+                       >  $(INSTALL_PREFIX)$(MANDIR)/man$$sec/`basename $$i 
+.pod`.$$sec); \
+       done
+       @echo installing man 3 and man 7
+       @for i in doc/crypto/*.pod doc/ssl/*.pod; do \
+               (cd `dirname $$i`; \
+               fn=`basename $$i .pod`; \
+               sec=`[ "$$fn" = "des_modes" ] && echo 7 || echo 3`; \
+               $(PERL) ../../util/pod2man.pl --section=$$sec --center=OpenSSL \
+                       --release=$(VERSION) `basename $$i` \
+                       >  $(INSTALL_PREFIX)$(MANDIR)/man$$sec/`basename $$i 
+.pod`.$$sec); \
+       done
+
+# DO NOT DELETE THIS LINE -- make depend depends on it.
Index: opensa/openssl/makevms.com
diff -u opensa/openssl/makevms.com:1.1 opensa/openssl/makevms.com:1.2
--- opensa/openssl/makevms.com:1.1      Tue Jan 25 22:57:51 2000
+++ opensa/openssl/makevms.com  Thu Mar  2 21:11:48 2000
@@ -17,8 +17,10 @@
 $! Specify one of the following build options for P1.
 $!
 $!      ALL       Just build "everything".
+$!      CONFIG    Just build the "[.CRYPTO]OPENSSLCONF.H" file.
 $!      BUILDINF  Just build the "[.CRYPTO]BUILDINF.H" file.
 $!      SOFTLINKS Just fix the Unix soft links.
+$!      BUILDALL  Same as ALL, except CONFIG, BUILDINF and SOFTILNKS aren't done.
 $!      RSAREF    Just build the "[.xxx.EXE.RSAREF]LIBRSAGLUE.OLB" library.
 $!      CRYPTO    Just build the "[.xxx.EXE.CRYPTO]LIBCRYPTO.OLB" library.
 $!      SSL       Just build the "[.xxx.EXE.SSL]LIBSSL.OLB" library.
@@ -61,6 +63,16 @@
 $! P6, if defined, sets a compiler thread NOT needed on OpenVMS 7.1 (and up)
 $!
 $!
+$! Check if we're in a batch job, and make sure we get to 
+$! the directory this script is in
+$!
+$ IF F$MODE() .EQS. "BATCH"
+$ THEN
+$   COMNAME=F$ENVIRONMENT("PROCEDURE")
+$   COMPATH=F$PARSE("A.;",COMNAME) - "A.;"
+$   SET DEF 'COMPATH'
+$ ENDIF
+$!
 $! Check Which Architecture We Are Using.
 $!
 $ IF (F$GETSYI("CPU").GE.128)
@@ -88,18 +100,26 @@
 $!
 $! Check To See What We Are To Do.
 $!
-$ IF (BUILDALL.EQS."TRUE")
+$ IF (BUILDCOMMAND.EQS."ALL")
 $ THEN
 $!
-$!  Since Nothing Special Was Specified, Do Everything.
-$!  First, Fix The Unix Softlinks.
+$!  Start with building the OpenSSL configuration file.
 $!
-$   GOSUB SOFTLINKS
+$   GOSUB CONFIG
 $!
 $!  Create The "BUILDINF.H" Include File.
 $!
 $   GOSUB BUILDINF
 $!
+$!  Fix The Unix Softlinks.
+$!
+$   GOSUB SOFTLINKS
+$!
+$ ENDIF
+$!
+$ IF (BUILDCOMMAND.EQS."ALL".OR.BUILDCOMMAND.EQS."BUILDALL")
+$ THEN
+$!
 $!  Check To See If We Are Going To Be Building The 
 $!  [.xxx.EXE.RSAREF]LIBRSAGLUE.OLB Library.
 $!
@@ -139,14 +159,123 @@
 $ ELSE
 $!
 $!    Build Just What The User Wants Us To Build.
+$!
+$     GOSUB 'BUILDCOMMAND'
 $!
-$     GOSUB 'BUILDALL'
 $ ENDIF
 $!
 $! Time To EXIT.
+$!
+$ EXIT
+$!
+$! Rebuild The "[.CRYPTO]OPENSSLCONF.H" file.
+$!
+$ CONFIG:
+$!
+$! Tell The User We Are Creating The [.CRYPTO]OPENSSLCONF.H File.
+$!
+$ WRITE SYS$OUTPUT "Creating [.CRYPTO]OPENSSLCONF.H Include File."
+$!
+$! Create The [.CRYPTO]OPENSSLCONF.H File.
+$!
+$ OPEN/WRITE H_FILE SYS$DISK:[.CRYPTO]OPENSSLCONF.H
+$!
+$! Write The [.CRYPTO]OPENSSLCONF.H File.
+$!
+$ WRITE H_FILE "/* This file was automatically built using makevms.com */"
+$ WRITE H_FILE "/* and [.CRYPTO]OPENSSLCONF.H_IN */"
+$
+$! Different tar version may have named the file differently
+$ IF F$SEARCH("[.CRYPTO]OPENSSLCONF.H_IN") .NES. ""
+$ THEN
+$   TYPE [.CRYPTO]OPENSSLCONF.H_IN /OUTPUT=H_FILE:
+$ ELSE
+$   IF F$SEARCH("[.CRYPTO]OPENSSLCONF_H.IN") .NES. ""
+$   THEN
+$     TYPE [.CRYPTO]OPENSSLCONF_H.IN /OUTPUT=H_FILE:
+$   ELSE
+$     WRITE SYS$ERROR "Couldn't find a [.CRYPTO]OPENSSLCONF.H_IN.  Exiting!"
+$     EXIT 0
+$   ENDIF
+$ ENDIF
+$!
+$ IF ARCH .EQS. "AXP"
+$ THEN
+$!
+$!  Write the Alpha specific data
+$!
+$   WRITE H_FILE "#if defined(HEADER_RC4_H)"
+$   WRITE H_FILE "#undef RC4_INT"
+$   WRITE H_FILE "#define RC4_INT unsigned int"
+$   WRITE H_FILE "#undef RC4_CHUNK"
+$   WRITE H_FILE "#define RC4_CHUNK unsigned long long"
+$   WRITE H_FILE "#endif"
+$!
+$   WRITE H_FILE "#if defined(HEADER_DES_LOCL_H)"
+$   WRITE H_FILE "#undef DES_LONG"
+$   WRITE H_FILE "#define DES_LONG unsigned int"
+$   WRITE H_FILE "#undef DES_PTR"
+$   WRITE H_FILE "#define DES_PTR"
+$   WRITE H_FILE "#undef DES_RISC1"
+$   WRITE H_FILE "#undef DES_RISC2"
+$   WRITE H_FILE "#define DES_RISC1"
+$   WRITE H_FILE "#undef DES_UNROLL"
+$   WRITE H_FILE "#define DES_UNROLL"
+$   WRITE H_FILE "#endif"
+$!
+$   WRITE H_FILE "#if defined(HEADER_BN_H)"
+$   WRITE H_FILE "#undef SIXTY_FOUR_BIT_LONG"
+$   WRITE H_FILE "#undef SIXTY_FOUR_BIT"
+$   WRITE H_FILE "#define SIXTY_FOUR_BIT"
+$   WRITE H_FILE "#undef THIRTY_TWO_BIT"
+$   WRITE H_FILE "#undef SIXTEEN_BIT"
+$   WRITE H_FILE "#undef EIGHT_BIT"
+$   WRITE H_FILE "#endif"
+$!
+$!  Else...
+$!
+$ ELSE
+$!
+$!  Write the VAX specific data
 $!
-$ EXIT   
+$   WRITE H_FILE "#if defined(HEADER_RC4_H)"
+$   WRITE H_FILE "#undef RC4_INT"
+$   WRITE H_FILE "#define RC4_INT unsigned char"
+$   WRITE H_FILE "#undef RC4_CHUNK"
+$   WRITE H_FILE "#define RC4_CHUNK unsigned long"
+$   WRITE H_FILE "#endif"
+$!
+$   WRITE H_FILE "#if defined(HEADER_DES_LOCL_H)"
+$   WRITE H_FILE "#undef DES_LONG"
+$   WRITE H_FILE "#define DES_LONG unsigned long"
+$   WRITE H_FILE "#undef DES_PTR"
+$   WRITE H_FILE "#define DES_PTR"
+$   WRITE H_FILE "#undef DES_RISC1"
+$   WRITE H_FILE "#undef DES_RISC2"
+$   WRITE H_FILE "#undef DES_UNROLL"
+$   WRITE H_FILE "#endif"
+$!
+$   WRITE H_FILE "#if defined(HEADER_BN_H)"
+$   WRITE H_FILE "#undef SIXTY_FOUR_BIT_LONG"
+$   WRITE H_FILE "#undef SIXTY_FOUR_BIT"
+$   WRITE H_FILE "#undef THIRTY_TWO_BIT"
+$   WRITE H_FILE "#define THIRTY_TWO_BIT"
+$   WRITE H_FILE "#undef SIXTEEN_BIT"
+$   WRITE H_FILE "#undef EIGHT_BIT"
+$   WRITE H_FILE "#endif"
 $!
+$!  End
+$!
+$ ENDIF
+$!
+$! Close the [.CRYPTO]OPENSSLCONF.H file
+$!
+$ CLOSE H_FILE
+$!
+$! That's All, Time To RETURN.
+$!
+$ RETURN
+$!
 $! Rebuild The "[.CRYPTO]BUILDINF.H" file.
 $!
 $ BUILDINF:
@@ -278,9 +407,9 @@
 $ tmp = EXHEADER_'D'
 $ IF D .EQS. ""
 $ THEN
-$   COPY [.CRYPTO]'tmp' SYS$DISK:[.INCLUDE.OPENSSL] /LOG
+$   COPY [.CRYPTO]'tmp' SYS$DISK:[.INCLUDE.OPENSSL] !/LOG
 $ ELSE
-$   COPY [.CRYPTO.'D']'tmp' SYS$DISK:[.INCLUDE.OPENSSL] /LOG
+$   COPY [.CRYPTO.'D']'tmp' SYS$DISK:[.INCLUDE.OPENSSL] !/LOG
 $ ENDIF
 $ GOTO LOOP_SDIRS
 $ LOOP_SDIRS_END:
@@ -322,8 +451,12 @@
 $ SET DEFAULT SYS$DISK:[.CRYPTO]
 $!
 $! Build The [.xxx.EXE.CRYPTO]LIBCRYPTO.OLB Library.
+$!  
+$ @CRYPTO-LIB LIBRARY 'RSAREF' 'DEBUGGER' "''COMPILER'" "''TCPIP_TYPE'" 'ISSEVEN'
+$!
+$! Build The [.xxx.EXE.CRYPTO]*.EXE Test Applications.
 $!  
-$ @CRYPTO-LIB 'RSAREF' 'DEBUGGER' "''COMPILER'" "''TCPIP_TYPE'" 'ISSEVEN'
+$ @CRYPTO-LIB APPS 'RSAREF' 'DEBUGGER' "''COMPILER'" "''TCPIP_TYPE'" 'ISSEVEN'
 $!
 $! Go Back To The Main Directory.
 $!
@@ -469,7 +602,7 @@
 $!
 $!   P1 Is ALL, So Build Everything.
 $!
-$    BUILDALL = "TRUE"
+$    BUILDCOMMAND = "ALL"
 $!
 $! Else...
 $!
@@ -484,7 +617,7 @@
 $!
 $!    A Valid Arguement.
 $!
-$     BUILDALL = P1
+$     BUILDCOMMAND = P1
 $!
 $!  Else...
 $!
@@ -496,8 +629,10 @@
 $     WRITE SYS$OUTPUT "The Option ",P1," Is Invalid.  The Valid Options Are:"
 $     WRITE SYS$OUTPUT ""
 $     WRITE SYS$OUTPUT "    ALL      :  Just Build Everything."
+$     WRITE SYS$OUTPUT "    CONFIG   :  Just build the [.CRYPTO]OPENSSLCONF.H file."
 $     WRITE SYS$OUTPUT "    BUILDINF :  Just build the [.CRYPTO]BUILDINF.H file."
 $     WRITE SYS$OUTPUT "    SOFTLINKS:  Just Fix The Unix soft links."
+$     WRITE SYS$OUTPUT "    BUILDALL :  Same as ALL, except CONFIG, BUILDINF and 
+SOFTILNKS aren't done."
 $     WRITE SYS$OUTPUT "    RSAREF   :  To Build Just The 
[.xxx.EXE.RSAREF]LIBRSAGLUE.OLB Library."
 $     WRITE SYS$OUTPUT "    CRYPTO   :  To Build Just The 
[.xxx.EXE.CRYPTO]LIBCRYPTO.OLB Library."
 $     WRITE SYS$OUTPUT "    SSL      :  To Build Just The [.xxx.EXE.SSL]LIBSSL.OLB 
Library."
Index: opensa/openssl/minfo
diff -u opensa/openssl/minfo:1.1 opensa/openssl/minfo:1.2
--- opensa/openssl/minfo:1.1    Tue Jan 25 22:57:51 2000
+++ opensa/openssl/minfo        Thu Mar  2 21:11:48 2000
@@ -1,1098 +1,1110 @@
-RELATIVE_DIRECTORY=.
-AR=ar r
-BASENAME=openssl
-BF_ENC=bf_enc.o
-BN_ASM=bn_asm.o
-CAST_ENC=c_enc.o
-CC=cl
-CFLAG=-DTHREADS
-DEPFLAG=
-DES_ENC=des_enc.o fcrypt_b.o
-DIRS=crypto ssl rsaref apps test tools
-EDIRS=times doc bugs util include certs ms shlib mt demos perl sf dep VMS
-EXHEADER=e_os.h e_os2.h
-EX_LIBS=
-GENERAL=Makefile
-HEADER=e_os.h
-INSTALLTOP=/usr/local/ssl
-INSTALL_PREFIX=
-LIBS=libcrypto.a libssl.a
-MAJOR=0
-MAKE=make -f Makefile.ssl
-MAKEFILE=Makefile.ssl
-MAN1=1
-MAN3=3
-MD5_ASM_OBJ=
-MINOR=9.4
-NAME=openssl-0.9.4
-ONEDIRS=out tmp
-OPENSSLDIR=/usr/local/ssl
-OPTIONS=
-PERL=perl
-PEX_LIBS=-L. -L.. -L../.. -L../../..
-PLATFORM=VC-WIN32
-PROCESSOR=
-RANLIB=true
-RC4_ENC=rc4_enc.o
-RC5_ENC=rc5_enc.o
-RMD160_ASM_OBJ=
-SDIRS=md2 md5 sha mdc2 hmac ripemd des rc2 rc4 rc5 idea bf cast bn rsa dsa dh buffer 
bio stack lhash rand err objects evp asn1 pem x509 x509v3 conf txt_db pkcs7 pkcs12 comp
-SHA1_ASM_OBJ=
-SHELL=/bin/sh
-SHLIBDIRS=crypto ssl
-TARFILE=openssl-0.9.4.tar
-TOP=.
-VERSION=0.9.4
-WDIRS=windows
-WTARFILE=openssl-0.9.4-win.tar
-RELATIVE_DIRECTORY=
-RELATIVE_DIRECTORY=crypto
-ALL=Makefile README crypto-lib.com install.com cryptlib.c mem.c cversion.c ex_data.c 
tmdiff.c cpt_err.c cryptlib.h buildinf.h crypto.h tmdiff.h opensslv.h opensslconf.h 
ebcdic.h
-AR=ar r
-CC=cc
-CFLAG=-g
-CFLAGS=-I. -I../include -g
-DIR=crypto
-EXHEADER=crypto.h tmdiff.h opensslv.h opensslconf.h ebcdic.h
-EX_LIBS=
-GENERAL=Makefile README crypto-lib.com install.com
-HEADER=cryptlib.h buildinf.h crypto.h tmdiff.h opensslv.h opensslconf.h ebcdic.h
-INCLUDE=-I. -I../include
-INCLUDES=-I.. -I../../include
-INSTALLTOP=/usr/local/ssl
-INSTALL_PREFIX=
-LIB=../libcrypto.a
-LIBOBJ=cryptlib.o mem.o cversion.o ex_data.o tmdiff.o cpt_err.o
-LIBS=
-LIBSRC=cryptlib.c mem.c cversion.c ex_data.c tmdiff.c cpt_err.c
-MAKE=make -f Makefile.ssl
-MAKEDEPEND=../util/domd ..
-MAKEFILE=Makefile.ssl
-OPENSSLDIR=/usr/local/ssl
-PEX_LIBS=
-RM=rm -f
-SDIRS=md2 md5 sha mdc2 hmac ripemd des rc2 rc4 rc5 idea bf cast bn rsa dsa dh buffer 
bio stack lhash rand err objects evp asn1 pem x509 x509v3 conf txt_db pkcs7 pkcs12 comp
-SRC=cryptlib.c mem.c cversion.c ex_data.c tmdiff.c cpt_err.c
-TOP=..
-RELATIVE_DIRECTORY=
-RELATIVE_DIRECTORY=crypto/md2
-ALL=Makefile md2_dgst.c md2_one.c md2.h
-APPS=
-AR=ar r
-CC=cc
-CFLAG=-g
-CFLAGS= -g
-DIR=md
-EXHEADER=md2.h
-GENERAL=Makefile
-HEADER=md2.h
-INCLUDES=
-INSTALLTOP=/usr/local/ssl
-INSTALL_PREFIX=
-LIB=../../libcrypto.a
-LIBOBJ=md2_dgst.o md2_one.o
-LIBSRC=md2_dgst.c md2_one.c
-MAKE=make -f Makefile.ssl
-MAKEDEPEND=../../util/domd ../..
-MAKEFILE=Makefile.ssl
-OPENSSLDIR=/usr/local/ssl
-SRC=md2_dgst.c md2_one.c
-TEST=md2test.c
-TOP=../..
-RELATIVE_DIRECTORY=
-RELATIVE_DIRECTORY=crypto/md5
-ALL=Makefile md5_dgst.c md5_one.c md5_locl.h md5.h
-APPS=md5.c
-AR=ar r
-ASFLAGS= -g
-CC=cc
-CFLAG=-g
-CFLAGS= -g
-CPP=cc -E
-DIR=md5
-EXHEADER=md5.h
-GENERAL=Makefile
-HEADER=md5_locl.h md5.h
-INCLUDES=
-INSTALLTOP=/usr/local/ssl
-INSTALL_PREFIX=
-LIB=../../libcrypto.a
-LIBOBJ=md5_dgst.o md5_one.o 
-LIBSRC=md5_dgst.c md5_one.c
-MAKE=make -f Makefile.ssl
-MAKEDEPEND=../../util/domd ../..
-MAKEFILE=Makefile.ssl
-MD5_ASM_OBJ=
-OPENSSLDIR=/usr/local/ssl
-SRC=md5_dgst.c md5_one.c
-TEST=md5test.c
-TOP=../..
-RELATIVE_DIRECTORY=
-RELATIVE_DIRECTORY=crypto/sha
-ALL=Makefile sha_dgst.c sha1dgst.c sha_one.c sha1_one.c sha_locl.h sha.h
-APPS=
-AR=ar r
-CC=cc
-CFLAG=-g
-CFLAGS= -g
-DIR=sha
-EXHEADER=sha.h
-GENERAL=Makefile
-HEADER=sha_locl.h sha.h
-INCLUDES=
-INSTALLTOP=/usr/local/ssl
-INSTALL_PREFIX=
-LIB=../../libcrypto.a
-LIBOBJ=sha_dgst.o sha1dgst.o sha_one.o sha1_one.o 
-LIBSRC=sha_dgst.c sha1dgst.c sha_one.c sha1_one.c
-MAKE=make -f Makefile.ssl
-MAKEDEPEND=../../util/domd ../..
-MAKEFILE=Makefile.ssl
-OPENSSLDIR=/usr/local/ssl
-SHA1_ASM_OBJ=
-SRC=sha_dgst.c sha1dgst.c sha_one.c sha1_one.c
-TEST=shatest.c sha1test.c
-TOP=../..
-RELATIVE_DIRECTORY=
-RELATIVE_DIRECTORY=crypto/mdc2
-ALL=Makefile mdc2dgst.c mdc2_one.c mdc2.h
-APPS=
-AR=ar r
-CC=cc
-CFLAG=-g
-CFLAGS= -g
-DIR=mdc2
-EXHEADER=mdc2.h
-GENERAL=Makefile
-HEADER=mdc2.h
-INCLUDES=
-INSTALLTOP=/usr/local/ssl
-INSTALL_PREFIX=
-LIB=../../libcrypto.a
-LIBOBJ=mdc2dgst.o mdc2_one.o
-LIBSRC=mdc2dgst.c mdc2_one.c
-MAKE=make -f Makefile.ssl
-MAKEDEPEND=../../util/domd ../..
-MAKEFILE=Makefile.ssl
-OPENSSLDIR=/usr/local/ssl
-SRC=mdc2dgst.c mdc2_one.c
-TEST=mdc2test.c
-TOP=../..
-RELATIVE_DIRECTORY=
-RELATIVE_DIRECTORY=crypto/hmac
-ALL=Makefile hmac.c hmac.h
-APPS=
-AR=ar r
-CC=cc
-CFLAG=-g
-CFLAGS= -g
-DIR=hmac
-EXHEADER=hmac.h
-GENERAL=Makefile
-HEADER=hmac.h
-INCLUDES=
-INSTALLTOP=/usr/local/ssl
-INSTALL_PREFIX=
-LIB=../../libcrypto.a
-LIBOBJ=hmac.o
-LIBSRC=hmac.c
-MAKE=make -f Makefile.ssl
-MAKEDEPEND=../../util/domd ../..
-MAKEFILE=Makefile.ssl
-OPENSSLDIR=/usr/local/ssl
-SRC=hmac.c
-TEST=hmactest.c
-TOP=../..
-RELATIVE_DIRECTORY=
-RELATIVE_DIRECTORY=crypto/ripemd
-ALL=Makefile rmd_dgst.c rmd_one.c rmd_locl.h rmdconst.h ripemd.h
-APPS=rmd160.c
-AR=ar r
-CC=cc
-CFLAG=-g
-CFLAGS= -g
-CPP=cc -E
-DIR=ripemd
-EXHEADER=ripemd.h
-GENERAL=Makefile
-HEADER=rmd_locl.h rmdconst.h ripemd.h
-INCLUDES=
-INSTALLTOP=/usr/local/ssl
-INSTALL_PREFIX=
-LIB=../../libcrypto.a
-LIBOBJ=rmd_dgst.o rmd_one.o 
-LIBSRC=rmd_dgst.c rmd_one.c
-MAKE=make -f Makefile.ssl
-MAKEDEPEND=../../util/domd ../..
-MAKEFILE=Makefile.ssl
-OPENSSLDIR=/usr/local/ssl
-RIP_ASM_OBJ=
-SRC=rmd_dgst.c rmd_one.c
-TEST=rmdtest.c
-TOP=../..
-RELATIVE_DIRECTORY=
-RELATIVE_DIRECTORY=crypto/des
-ALL=Makefile cbc_cksm.c cbc_enc.c cfb64enc.c cfb_enc.c ecb3_enc.c ecb_enc.c 
enc_read.c enc_writ.c fcrypt.c ofb64enc.c ofb_enc.c pcbc_enc.c qud_cksm.c rand_key.c 
read_pwd.c rpc_enc.c set_key.c des_enc.c fcrypt_b.c read2pwd.c fcrypt.c xcbc_enc.c 
str2key.c cfb64ede.c ofb64ede.c supp.c ede_cbcm_enc.c des_locl.h rpc_des.h podd.h sk.h 
spr.h des_ver.h des.h
-APPS=
-AR=ar r
-CC=cc
-CFLAG=-g
-CFLAGS=-I../../include -g
-CPP=cc -E
-DES_ENC=des_enc.o fcrypt_b.o
-DIR=des
-EXHEADER=des.h
-GENERAL=Makefile
-HEADER=des_locl.h rpc_des.h podd.h sk.h spr.h des_ver.h des.h
-INCLUDES=-I../../include
-INSTALLTOP=/usr/local/ssl
-INSTALL_PREFIX=
-LIB=../../libcrypto.a
-LIBOBJ=set_key.o ecb_enc.o cbc_enc.o ecb3_enc.o cfb64enc.o cfb64ede.o cfb_enc.o 
ofb64ede.o enc_read.o enc_writ.o ofb64enc.o ofb_enc.o str2key.o pcbc_enc.o qud_cksm.o 
rand_key.o des_enc.o fcrypt_b.o read2pwd.o fcrypt.o xcbc_enc.o read_pwd.o rpc_enc.o 
cbc_cksm.o supp.o ede_cbcm_enc.o
-LIBSRC=cbc_cksm.c cbc_enc.c cfb64enc.c cfb_enc.c ecb3_enc.c ecb_enc.c enc_read.c 
enc_writ.c fcrypt.c ofb64enc.c ofb_enc.c pcbc_enc.c qud_cksm.c rand_key.c read_pwd.c 
rpc_enc.c set_key.c des_enc.c fcrypt_b.c read2pwd.c fcrypt.c xcbc_enc.c str2key.c 
cfb64ede.c ofb64ede.c supp.c ede_cbcm_enc.c
-MAKE=make -f Makefile.ssl
-MAKEDEPEND=../../util/domd ../..
-MAKEFILE=Makefile.ssl
-OPENSSLDIR=/usr/local/ssl
-SRC=cbc_cksm.c cbc_enc.c cfb64enc.c cfb_enc.c ecb3_enc.c ecb_enc.c enc_read.c 
enc_writ.c fcrypt.c ofb64enc.c ofb_enc.c pcbc_enc.c qud_cksm.c rand_key.c read_pwd.c 
rpc_enc.c set_key.c des_enc.c fcrypt_b.c read2pwd.c fcrypt.c xcbc_enc.c str2key.c 
cfb64ede.c ofb64ede.c supp.c ede_cbcm_enc.c
-TEST=destest.c
-TOP=../..
-RELATIVE_DIRECTORY=
-RELATIVE_DIRECTORY=crypto/rc2
-ALL=Makefile rc2_ecb.c rc2_skey.c rc2_cbc.c rc2cfb64.c rc2ofb64.c rc2_locl.h rc2.h
-APPS=
-AR=ar r
-CC=cc
-CFLAG=-g
-CFLAGS= -g
-DIR=rc2
-EXHEADER=rc2.h
-GENERAL=Makefile
-HEADER=rc2_locl.h rc2.h
-INCLUDES=
-INSTALLTOP=/usr/local/ssl
-INSTALL_PREFIX=
-LIB=../../libcrypto.a
-LIBOBJ=rc2_ecb.o rc2_skey.o rc2_cbc.o rc2cfb64.o rc2ofb64.o
-LIBSRC=rc2_ecb.c rc2_skey.c rc2_cbc.c rc2cfb64.c rc2ofb64.c
-MAKE=make -f Makefile.ssl
-MAKEDEPEND=../../util/domd ../..
-MAKEFILE=Makefile.ssl
-OPENSSLDIR=/usr/local/ssl
-SRC=rc2_ecb.c rc2_skey.c rc2_cbc.c rc2cfb64.c rc2ofb64.c
-TEST=rc2test.c
-TOP=../..
-RELATIVE_DIRECTORY=
-RELATIVE_DIRECTORY=crypto/rc4
-ALL=Makefile rc4_skey.c rc4_enc.c rc4.h rc4_locl.h
-APPS=
-AR=ar r
-CC=cc
-CFLAG=-g
-CFLAGS= -g
-DIR=rc4
-EXHEADER=rc4.h
-GENERAL=Makefile
-HEADER=rc4.h rc4_locl.h
-INCLUDES=
-INSTALLTOP=/usr/local/ssl
-INSTALL_PREFIX=
-LIB=../../libcrypto.a
-LIBOBJ=rc4_skey.o rc4_enc.o
-LIBSRC=rc4_skey.c rc4_enc.c
-MAKE=make -f Makefile.ssl
-MAKEDEPEND=../../util/domd ../..
-MAKEFILE=Makefile.ssl
-OPENSSLDIR=/usr/local/ssl
-RC4_ENC=rc4_enc.o
-SRC=rc4_skey.c rc4_enc.c
-TEST=rc4test.c
-TOP=../..
-RELATIVE_DIRECTORY=
-RELATIVE_DIRECTORY=crypto/rc5
-ALL=Makefile rc5_skey.c rc5_ecb.c rc5_enc.c rc5cfb64.c rc5ofb64.c rc5_locl.h rc5.h
-APPS=
-AR=ar r
-CC=cc
-CFLAG=-g
-CFLAGS= -g
-CPP=cc -E
-DIR=rc5
-EXHEADER=rc5.h
-GENERAL=Makefile
-HEADER=rc5_locl.h rc5.h
-INCLUDES=
-INSTALLTOP=/usr/local/ssl
-INSTALL_PREFIX=
-LIB=../../libcrypto.a
-LIBOBJ=rc5_skey.o rc5_ecb.o rc5_enc.o rc5cfb64.o rc5ofb64.o
-LIBSRC=rc5_skey.c rc5_ecb.c rc5_enc.c rc5cfb64.c rc5ofb64.c
-MAKE=make -f Makefile.ssl
-MAKEDEPEND=../../util/domd ../..
-MAKEFILE=Makefile.ssl
-OPENSSLDIR=/usr/local/ssl
-RC5_ENC=rc5_enc.o
-SRC=rc5_skey.c rc5_ecb.c rc5_enc.c rc5cfb64.c rc5ofb64.c
-TEST=rc5test.c
-TOP=../..
-RELATIVE_DIRECTORY=
-RELATIVE_DIRECTORY=crypto/idea
-ALL=Makefile i_cbc.c i_cfb64.c i_ofb64.c i_ecb.c i_skey.c idea_lcl.h idea.h
-APPS=
-AR=ar r
-CC=cc
-CFLAG=-g
-CFLAGS= -g
-DIR=idea
-EXHEADER=idea.h
-GENERAL=Makefile
-HEADER=idea_lcl.h idea.h
-INCLUDES=
-INSTALLTOP=/usr/local/ssl
-INSTALL_PREFIX=
-LIB=../../libcrypto.a
-LIBOBJ=i_cbc.o i_cfb64.o i_ofb64.o i_ecb.o i_skey.o
-LIBSRC=i_cbc.c i_cfb64.c i_ofb64.c i_ecb.c i_skey.c
-MAKE=make -f Makefile.ssl
-MAKEDEPEND=../../util/domd ../..
-MAKEFILE=Makefile.ssl
-OPENSSLDIR=/usr/local/ssl
-SRC=i_cbc.c i_cfb64.c i_ofb64.c i_ecb.c i_skey.c
-TEST=ideatest.c
-TOP=../..
-RELATIVE_DIRECTORY=
-RELATIVE_DIRECTORY=crypto/bf
-ALL=Makefile bf_skey.c bf_ecb.c bf_enc.c bf_cfb64.c bf_ofb64.c bf_pi.h bf_locl.h 
blowfish.h
-APPS=
-AR=ar r
-BF_ENC=bf_enc.o
-CC=cc
-CFLAG=-g
-CFLAGS= -g
-CPP=cc -E
-DIR=bf
-EXHEADER=blowfish.h
-GENERAL=Makefile
-HEADER=bf_pi.h bf_locl.h blowfish.h
-INCLUDES=
-INSTALLTOP=/usr/local/ssl
-INSTALL_PREFIX=
-LIB=../../libcrypto.a
-LIBOBJ=bf_skey.o bf_ecb.o bf_enc.o bf_cfb64.o bf_ofb64.o
-LIBSRC=bf_skey.c bf_ecb.c bf_enc.c bf_cfb64.c bf_ofb64.c
-MAKE=make -f Makefile.ssl
-MAKEDEPEND=../../util/domd ../..
-MAKEFILE=Makefile.ssl
-OPENSSLDIR=/usr/local/ssl
-SRC=bf_skey.c bf_ecb.c bf_enc.c bf_cfb64.c bf_ofb64.c
-TEST=bftest.c
-TOP=../..
-RELATIVE_DIRECTORY=
-RELATIVE_DIRECTORY=crypto/cast
-ALL=Makefile c_skey.c c_ecb.c c_enc.c c_cfb64.c c_ofb64.c cast_s.h cast_lcl.h cast.h
-APPS=
-AR=ar r
-CAST_ENC=c_enc.o
-CC=cc
-CFLAG=-g
-CFLAGS= -g
-CPP=cc -E
-DIR=cast
-EXHEADER=cast.h
-GENERAL=Makefile
-HEADER=cast_s.h cast_lcl.h cast.h
-INCLUDES=
-INSTALLTOP=/usr/local/ssl
-INSTALL_PREFIX=
-LIB=../../libcrypto.a
-LIBOBJ=c_skey.o c_ecb.o c_enc.o c_cfb64.o c_ofb64.o
-LIBSRC=c_skey.c c_ecb.c c_enc.c c_cfb64.c c_ofb64.c
-MAKE=make -f Makefile.ssl
-MAKEDEPEND=../../util/domd ../..
-MAKEFILE=Makefile.ssl
-OPENSSLDIR=/usr/local/ssl
-SRC=c_skey.c c_ecb.c c_enc.c c_cfb64.c c_ofb64.c
-TEST=casttest.c
-TOP=../..
-RELATIVE_DIRECTORY=
-RELATIVE_DIRECTORY=crypto/bn
-ALL=Makefile bn_add.c bn_div.c bn_exp.c bn_lib.c bn_mul.c bn_print.c bn_rand.c 
bn_shift.c bn_word.c bn_blind.c bn_gcd.c bn_prime.c bn_err.c bn_sqr.c bn_asm.c 
bn_recp.c bn_mont.c bn_mpi.c bn_exp2.c bn_lcl.h bn_prime.h bn.h
-APPS=
-AR=ar r
-ASFLAGS=-I.. -I../../include -g
-BN_ASM=bn_asm.o
-CC=cc
-CFLAG=-g
-CFLAGS=-I.. -I../../include -g
-DIR=bn
-EXHEADER=bn.h
-GENERAL=Makefile
-HEADER=bn_lcl.h bn_prime.h bn.h
-INCLUDES=-I.. -I../../include
-INSTALLTOP=/usr/local/ssl
-INSTALL_PREFIX=
-LIB=../../libcrypto.a
-LIBOBJ=bn_add.o bn_div.o bn_exp.o bn_lib.o bn_mul.o bn_print.o bn_rand.o bn_shift.o 
bn_word.o bn_blind.o bn_gcd.o bn_prime.o bn_err.o bn_sqr.o bn_asm.o bn_recp.o 
bn_mont.o bn_mpi.o bn_exp2.o
-LIBSRC=bn_add.c bn_div.c bn_exp.c bn_lib.c bn_mul.c bn_print.c bn_rand.c bn_shift.c 
bn_word.c bn_blind.c bn_gcd.c bn_prime.c bn_err.c bn_sqr.c bn_asm.c bn_recp.c 
bn_mont.c bn_mpi.c bn_exp2.c
-MAKE=make -f Makefile.ssl
-MAKEDEPEND=../../util/domd ../..
-MAKEFILE=Makefile.ssl
-OPENSSLDIR=/usr/local/ssl
-SRC=bn_add.c bn_div.c bn_exp.c bn_lib.c bn_mul.c bn_print.c bn_rand.c bn_shift.c 
bn_word.c bn_blind.c bn_gcd.c bn_prime.c bn_err.c bn_sqr.c bn_asm.c bn_recp.c 
bn_mont.c bn_mpi.c bn_exp2.c
-TEST=bntest.c exptest.c
-TOP=../..
-RELATIVE_DIRECTORY=
-RELATIVE_DIRECTORY=crypto/rsa
-ALL=Makefile rsa_eay.c rsa_gen.c rsa_lib.c rsa_sign.c rsa_saos.c rsa_err.c rsa_pk1.c 
rsa_ssl.c rsa_none.c rsa_oaep.c rsa_chk.c rsa.h
-APPS=
-AR=ar r
-CC=cc
-CFLAG=-g
-CFLAGS=-I.. -I../../include -g
-DIR=rsa
-EXHEADER=rsa.h
-GENERAL=Makefile
-HEADER=rsa.h
-INCLUDES=-I.. -I../../include
-INSTALLTOP=/usr/local/ssl
-INSTALL_PREFIX=
-LIB=../../libcrypto.a
-LIBOBJ=rsa_eay.o rsa_gen.o rsa_lib.o rsa_sign.o rsa_saos.o rsa_err.o rsa_pk1.o 
rsa_ssl.o rsa_none.o rsa_oaep.o rsa_chk.o
-LIBSRC=rsa_eay.c rsa_gen.c rsa_lib.c rsa_sign.c rsa_saos.c rsa_err.c rsa_pk1.c 
rsa_ssl.c rsa_none.c rsa_oaep.c rsa_chk.c
-MAKE=make -f Makefile.ssl
-MAKEDEPEND=../../util/domd ../..
-MAKEFILE=Makefile.ssl
-OPENSSLDIR=/usr/local/ssl
-SRC=rsa_eay.c rsa_gen.c rsa_lib.c rsa_sign.c rsa_saos.c rsa_err.c rsa_pk1.c rsa_ssl.c 
rsa_none.c rsa_oaep.c rsa_chk.c
-TEST=rsa_oaep_test.c
-TOP=../..
-RELATIVE_DIRECTORY=
-RELATIVE_DIRECTORY=crypto/dsa
-ALL=Makefile dsa_gen.c dsa_key.c dsa_lib.c dsa_asn1.c dsa_vrf.c dsa_sign.c dsa_err.c 
dsa.h
-APPS=
-AR=ar r
-CC=cc
-CFLAG=-g
-CFLAGS=-I.. -I../../include -g
-DIR=dsa
-EXHEADER=dsa.h
-GENERAL=Makefile
-HEADER=dsa.h
-INCLUDES=-I.. -I../../include
-INSTALLTOP=/usr/local/ssl
-INSTALL_PREFIX=
-LIB=../../libcrypto.a
-LIBOBJ=dsa_gen.o dsa_key.o dsa_lib.o dsa_asn1.o dsa_vrf.o dsa_sign.o dsa_err.o
-LIBSRC=dsa_gen.c dsa_key.c dsa_lib.c dsa_asn1.c dsa_vrf.c dsa_sign.c dsa_err.c
-MAKE=make -f Makefile.ssl
-MAKEDEPEND=../../util/domd ../..
-MAKEFILE=Makefile.ssl
-OPENSSLDIR=/usr/local/ssl
-SRC=dsa_gen.c dsa_key.c dsa_lib.c dsa_asn1.c dsa_vrf.c dsa_sign.c dsa_err.c
-TEST=dsatest.c
-TOP=../..
-RELATIVE_DIRECTORY=
-RELATIVE_DIRECTORY=crypto/dh
-ALL=Makefile dh_gen.c dh_key.c dh_lib.c dh_check.c dh_err.c dh.h
-APPS=
-AR=ar r
-CC=cc
-CFLAG=-g
-CFLAGS=-I.. -I../../include -g
-DIR=dh
-EXHEADER=dh.h
-GENERAL=Makefile
-HEADER=dh.h
-INCLUDES=-I.. -I../../include
-INSTALLTOP=/usr/local/ssl
-INSTALL_PREFIX=
-LIB=../../libcrypto.a
-LIBOBJ=dh_gen.o dh_key.o dh_lib.o dh_check.o dh_err.o
-LIBSRC=dh_gen.c dh_key.c dh_lib.c dh_check.c dh_err.c
-MAKE=make -f Makefile.ssl
-MAKEDEPEND=../../util/domd ../..
-MAKEFILE=Makefile.ssl
-OPENSSLDIR=/usr/local/ssl
-SRC=dh_gen.c dh_key.c dh_lib.c dh_check.c dh_err.c
-TEST=dhtest.c
-TOP=../..
-RELATIVE_DIRECTORY=
-RELATIVE_DIRECTORY=crypto/buffer
-ALL=Makefile buffer.c buf_err.c buffer.h
-APPS=
-AR=ar r
-CC=cc
-CFLAG=-g
-CFLAGS=-I.. -I../../include -g
-DIR=buffer
-EXHEADER=buffer.h
-GENERAL=Makefile
-HEADER=buffer.h
-INCLUDES=-I.. -I../../include
-INSTALLTOP=/usr/local/ssl
-INSTALL_PREFIX=
-LIB=../../libcrypto.a
-LIBOBJ=buffer.o buf_err.o
-LIBSRC=buffer.c buf_err.c
-MAKE=make -f Makefile.ssl
-MAKEDEPEND=../../util/domd ../..
-MAKEFILE=Makefile.ssl
-OPENSSLDIR=/usr/local/ssl
-SRC=buffer.c buf_err.c
-TEST=
-TOP=../..
-RELATIVE_DIRECTORY=
-RELATIVE_DIRECTORY=crypto/bio
-ALL=Makefile bio_lib.c bio_cb.c bio_err.c bss_mem.c bss_null.c bss_fd.c bss_file.c 
bss_sock.c bss_conn.c bf_null.c bf_buff.c b_print.c b_dump.c b_sock.c bss_acpt.c 
bf_nbio.c bss_log.c bss_bio.c bss_file.c bio.h
-APPS=
-AR=ar r
-CC=cc
-CFLAG=-g
-CFLAGS=-I.. -I../../include -g
-DIR=bio
-EXHEADER=bio.h
-GENERAL=Makefile
-HEADER=bss_file.c bio.h
-INCLUDES=-I.. -I../../include
-INSTALLTOP=/usr/local/ssl
-INSTALL_PREFIX=
-LIB=../../libcrypto.a
-LIBOBJ=bio_lib.o bio_cb.o bio_err.o bss_mem.o bss_null.o bss_fd.o bss_file.o 
bss_sock.o bss_conn.o bf_null.o bf_buff.o b_print.o b_dump.o b_sock.o bss_acpt.o 
bf_nbio.o bss_log.o bss_bio.o
-LIBSRC=bio_lib.c bio_cb.c bio_err.c bss_mem.c bss_null.c bss_fd.c bss_file.c 
bss_sock.c bss_conn.c bf_null.c bf_buff.c b_print.c b_dump.c b_sock.c bss_acpt.c 
bf_nbio.c bss_log.c bss_bio.c
-MAKE=make -f Makefile.ssl
-MAKEDEPEND=../../util/domd ../..
-MAKEFILE=Makefile.ssl
-OPENSSLDIR=/usr/local/ssl
-SRC=bio_lib.c bio_cb.c bio_err.c bss_mem.c bss_null.c bss_fd.c bss_file.c bss_sock.c 
bss_conn.c bf_null.c bf_buff.c b_print.c b_dump.c b_sock.c bss_acpt.c bf_nbio.c 
bss_log.c bss_bio.c
-TEST=
-TOP=../..
-RELATIVE_DIRECTORY=
-RELATIVE_DIRECTORY=crypto/stack
-ALL=Makefile stack.c stack.h safestack.h
-APPS=
-AR=ar r
-CC=cc
-CFLAG=-g
-CFLAGS= -g
-DIR=stack
-EXHEADER=stack.h safestack.h
-GENERAL=Makefile
-HEADER=stack.h safestack.h
-INCLUDES=
-INSTALLTOP=/usr/local/ssl
-INSTALL_PREFIX=
-LIB=../../libcrypto.a
-LIBOBJ=stack.o
-LIBSRC=stack.c
-MAKE=make -f Makefile.ssl
-MAKEDEPEND=../../util/domd ../..
-MAKEFILE=Makefile.ssl
-OPENSSLDIR=/usr/local/ssl
-SRC=stack.c
-TEST=
-TOP=../..
-RELATIVE_DIRECTORY=
-RELATIVE_DIRECTORY=crypto/lhash
-ALL=Makefile lhash.c lh_stats.c lhash.h
-APPS=
-AR=ar r
-CC=cc
-CFLAG=-g
-CFLAGS= -g
-DIR=lhash
-EXHEADER=lhash.h
-GENERAL=Makefile
-HEADER=lhash.h
-INCLUDES=
-INSTALLTOP=/usr/local/ssl
-INSTALL_PREFIX=
-LIB=../../libcrypto.a
-LIBOBJ=lhash.o lh_stats.o
-LIBSRC=lhash.c lh_stats.c
-MAKE=make -f Makefile.ssl
-MAKEDEPEND=../../util/domd ../..
-MAKEFILE=Makefile.ssl
-OPENSSLDIR=/usr/local/ssl
-SRC=lhash.c lh_stats.c
-TEST=
-TOP=../..
-RELATIVE_DIRECTORY=
-RELATIVE_DIRECTORY=crypto/rand
-ALL=Makefile md_rand.c randfile.c rand_lib.c rand.h
-APPS=
-AR=ar r
-CC=cc
-CFLAG=-g
-CFLAGS= -g
-DIR=rand
-EXHEADER=rand.h
-GENERAL=Makefile
-HEADER=rand.h
-INCLUDES=
-INSTALLTOP=/usr/local/ssl
-INSTALL_PREFIX=
-LIB=../../libcrypto.a
-LIBOBJ=md_rand.o randfile.o rand_lib.o
-LIBSRC=md_rand.c randfile.c rand_lib.c
-MAKE=make -f Makefile.ssl
-MAKEDEPEND=../../util/domd ../..
-MAKEFILE=Makefile.ssl
-OPENSSLDIR=/usr/local/ssl
-SRC=md_rand.c randfile.c rand_lib.c
-TEST=randtest.c
-TOP=../..
-RELATIVE_DIRECTORY=
-RELATIVE_DIRECTORY=crypto/err
-ALL=Makefile err.c err_all.c err_prn.c err.h
-APPS=
-AR=ar r
-CC=cc
-CFLAG=-g
-CFLAGS=-I.. -I../../include -g
-DIR=err
-EXHEADER=err.h
-GENERAL=Makefile
-HEADER=err.h
-INCLUDES=-I.. -I../../include
-INSTALLTOP=/usr/local/ssl
-INSTALL_PREFIX=
-LIB=../../libcrypto.a
-LIBOBJ=err.o err_all.o err_prn.o
-LIBSRC=err.c err_all.c err_prn.c
-MAKE=make -f Makefile.ssl
-MAKEDEPEND=../../util/domd ../..
-MAKEFILE=Makefile.ssl
-OPENSSLDIR=/usr/local/ssl
-SRC=err.c err_all.c err_prn.c
-TEST=
-TOP=../..
-RELATIVE_DIRECTORY=
-RELATIVE_DIRECTORY=crypto/objects
-ALL=Makefile README o_names.c obj_dat.c obj_lib.c obj_err.c objects.h obj_dat.h
-APPS=
-AR=ar r
-CC=cc
-CFLAG=-g
-CFLAGS=-I.. -I../../include -g
-DIR=objects
-EXHEADER=objects.h
-GENERAL=Makefile README
-HEADER=objects.h obj_dat.h
-INCLUDES=-I.. -I../../include
-INSTALLTOP=/usr/local/ssl
-INSTALL_PREFIX=
-LIB=../../libcrypto.a
-LIBOBJ=o_names.o obj_dat.o obj_lib.o obj_err.o
-LIBSRC=o_names.c obj_dat.c obj_lib.c obj_err.c
-MAKE=make -f Makefile.ssl
-MAKEDEPEND=../../util/domd ../..
-MAKEFILE=Makefile.ssl
-OPENSSLDIR=/usr/local/ssl
-SRC=o_names.c obj_dat.c obj_lib.c obj_err.c
-TEST=
-TOP=../..
-RELATIVE_DIRECTORY=
-RELATIVE_DIRECTORY=crypto/evp
-ALL=Makefile encode.c digest.c evp_enc.c evp_key.c e_ecb_d.c e_cbc_d.c e_cfb_d.c 
e_ofb_d.c e_ecb_i.c e_cbc_i.c e_cfb_i.c e_ofb_i.c e_ecb_3d.c e_cbc_3d.c e_rc4.c 
names.c e_cfb_3d.c e_ofb_3d.c e_xcbc_d.c e_ecb_r2.c e_cbc_r2.c e_cfb_r2.c e_ofb_r2.c 
e_ecb_bf.c e_cbc_bf.c e_cfb_bf.c e_ofb_bf.c e_ecb_c.c e_cbc_c.c e_cfb_c.c e_ofb_c.c 
e_ecb_r5.c e_cbc_r5.c e_cfb_r5.c e_ofb_r5.c m_null.c m_md2.c m_md5.c m_sha.c m_sha1.c 
m_dss.c m_dss1.c m_mdc2.c m_ripemd.c p_open.c p_seal.c p_sign.c p_verify.c p_lib.c 
p_enc.c p_dec.c bio_md.c bio_b64.c bio_enc.c evp_err.c e_null.c c_all.c evp_lib.c 
bio_ok.c evp_pkey.c evp_pbe.c p5_crpt.c p5_crpt2.c evp.h
-APPS=
-AR=ar r
-CC=cc
-CFLAG=-g
-CFLAGS=-I.. -I../../include -g
-DIR=evp
-EXHEADER=evp.h
-GENERAL=Makefile
-HEADER=evp.h
-INCLUDES=-I.. -I../../include
-INSTALLTOP=/usr/local/ssl
-INSTALL_PREFIX=
-LIB=../../libcrypto.a
-LIBOBJ=encode.o digest.o evp_enc.o evp_key.o e_ecb_d.o e_cbc_d.o e_cfb_d.o e_ofb_d.o 
e_ecb_i.o e_cbc_i.o e_cfb_i.o e_ofb_i.o e_ecb_3d.o e_cbc_3d.o e_rc4.o names.o 
e_cfb_3d.o e_ofb_3d.o e_xcbc_d.o e_ecb_r2.o e_cbc_r2.o e_cfb_r2.o e_ofb_r2.o 
e_ecb_bf.o e_cbc_bf.o e_cfb_bf.o e_ofb_bf.o e_ecb_c.o e_cbc_c.o e_cfb_c.o e_ofb_c.o 
e_ecb_r5.o e_cbc_r5.o e_cfb_r5.o e_ofb_r5.o m_null.o m_md2.o m_md5.o m_sha.o m_sha1.o 
m_dss.o m_dss1.o m_mdc2.o m_ripemd.o p_open.o p_seal.o p_sign.o p_verify.o p_lib.o 
p_enc.o p_dec.o bio_md.o bio_b64.o bio_enc.o evp_err.o e_null.o c_all.o evp_lib.o 
bio_ok.o evp_pkey.o evp_pbe.o p5_crpt.o p5_crpt2.o
-LIBSRC=encode.c digest.c evp_enc.c evp_key.c e_ecb_d.c e_cbc_d.c e_cfb_d.c e_ofb_d.c 
e_ecb_i.c e_cbc_i.c e_cfb_i.c e_ofb_i.c e_ecb_3d.c e_cbc_3d.c e_rc4.c names.c 
e_cfb_3d.c e_ofb_3d.c e_xcbc_d.c e_ecb_r2.c e_cbc_r2.c e_cfb_r2.c e_ofb_r2.c 
e_ecb_bf.c e_cbc_bf.c e_cfb_bf.c e_ofb_bf.c e_ecb_c.c e_cbc_c.c e_cfb_c.c e_ofb_c.c 
e_ecb_r5.c e_cbc_r5.c e_cfb_r5.c e_ofb_r5.c m_null.c m_md2.c m_md5.c m_sha.c m_sha1.c 
m_dss.c m_dss1.c m_mdc2.c m_ripemd.c p_open.c p_seal.c p_sign.c p_verify.c p_lib.c 
p_enc.c p_dec.c bio_md.c bio_b64.c bio_enc.c evp_err.c e_null.c c_all.c evp_lib.c 
bio_ok.c evp_pkey.c evp_pbe.c p5_crpt.c p5_crpt2.c
-MAKE=make -f Makefile.ssl
-MAKEDEPEND=../../util/domd ../..
-MAKEFILE=Makefile.ssl
-OPENSSLDIR=/usr/local/ssl
-SRC=encode.c digest.c evp_enc.c evp_key.c e_ecb_d.c e_cbc_d.c e_cfb_d.c e_ofb_d.c 
e_ecb_i.c e_cbc_i.c e_cfb_i.c e_ofb_i.c e_ecb_3d.c e_cbc_3d.c e_rc4.c names.c 
e_cfb_3d.c e_ofb_3d.c e_xcbc_d.c e_ecb_r2.c e_cbc_r2.c e_cfb_r2.c e_ofb_r2.c 
e_ecb_bf.c e_cbc_bf.c e_cfb_bf.c e_ofb_bf.c e_ecb_c.c e_cbc_c.c e_cfb_c.c e_ofb_c.c 
e_ecb_r5.c e_cbc_r5.c e_cfb_r5.c e_ofb_r5.c m_null.c m_md2.c m_md5.c m_sha.c m_sha1.c 
m_dss.c m_dss1.c m_mdc2.c m_ripemd.c p_open.c p_seal.c p_sign.c p_verify.c p_lib.c 
p_enc.c p_dec.c bio_md.c bio_b64.c bio_enc.c evp_err.c e_null.c c_all.c evp_lib.c 
bio_ok.c evp_pkey.c evp_pbe.c p5_crpt.c p5_crpt2.c
-TEST=
-TOP=../..
-RELATIVE_DIRECTORY=
-RELATIVE_DIRECTORY=crypto/asn1
-ALL=Makefile README a_object.c a_bitstr.c a_utctm.c a_gentm.c a_time.c a_int.c 
a_octet.c a_print.c a_type.c a_set.c a_dup.c a_d2i_fp.c a_i2d_fp.c a_bmp.c a_enum.c 
a_vis.c a_utf8.c a_sign.c a_digest.c a_verify.c x_algor.c x_val.c x_pubkey.c x_sig.c 
x_req.c x_attrib.c x_name.c x_cinf.c x_x509.c x_crl.c x_info.c x_spki.c nsseq.c 
d2i_r_pr.c i2d_r_pr.c d2i_r_pu.c i2d_r_pu.c d2i_s_pr.c i2d_s_pr.c d2i_s_pu.c 
i2d_s_pu.c d2i_pu.c d2i_pr.c i2d_pu.c i2d_pr.c t_req.c t_x509.c t_crl.c t_pkey.c 
p7_i_s.c p7_signi.c p7_signd.c p7_recip.c p7_enc_c.c p7_evp.c p7_dgst.c p7_s_e.c 
p7_enc.c p7_lib.c f_int.c f_string.c i2d_dhp.c i2d_dsap.c d2i_dhp.c d2i_dsap.c 
n_pkey.c f_enum.c a_hdr.c x_pkey.c a_bool.c x_exten.c asn1_par.c asn1_lib.c asn1_err.c 
a_meth.c a_bytes.c evp_asn1.c asn_pack.c p5_pbe.c p5_pbev2.c p8_pkey.c asn1.h 
asn1_mac.h
-APPS=
-AR=ar r
-CC=cc
-CFLAG=-g
-CFLAGS=-I.. -I../../include -g
-DIR=asn1
-EXHEADER=asn1.h asn1_mac.h
-GENERAL=Makefile README
-HEADER=asn1.h asn1_mac.h
-INCLUDES=-I.. -I../../include
-INSTALLTOP=/usr/local/ssl
-INSTALL_PREFIX=
-LIB=../../libcrypto.a
-LIBOBJ=a_object.o a_bitstr.o a_utctm.o a_gentm.o a_time.o a_int.o a_octet.o a_print.o 
a_type.o a_set.o a_dup.o a_d2i_fp.o a_i2d_fp.o a_bmp.o a_enum.o a_vis.o a_utf8.o 
a_sign.o a_digest.o a_verify.o x_algor.o x_val.o x_pubkey.o x_sig.o x_req.o x_attrib.o 
x_name.o x_cinf.o x_x509.o x_crl.o x_info.o x_spki.o nsseq.o d2i_r_pr.o i2d_r_pr.o 
d2i_r_pu.o i2d_r_pu.o d2i_s_pr.o i2d_s_pr.o d2i_s_pu.o i2d_s_pu.o d2i_pu.o d2i_pr.o 
i2d_pu.o i2d_pr.o t_req.o t_x509.o t_crl.o t_pkey.o p7_i_s.o p7_signi.o p7_signd.o 
p7_recip.o p7_enc_c.o p7_evp.o p7_dgst.o p7_s_e.o p7_enc.o p7_lib.o f_int.o f_string.o 
i2d_dhp.o i2d_dsap.o d2i_dhp.o d2i_dsap.o n_pkey.o f_enum.o a_hdr.o x_pkey.o a_bool.o 
x_exten.o asn1_par.o asn1_lib.o asn1_err.o a_meth.o a_bytes.o evp_asn1.o asn_pack.o 
p5_pbe.o p5_pbev2.o p8_pkey.o
-LIBSRC=a_object.c a_bitstr.c a_utctm.c a_gentm.c a_time.c a_int.c a_octet.c a_print.c 
a_type.c a_set.c a_dup.c a_d2i_fp.c a_i2d_fp.c a_bmp.c a_enum.c a_vis.c a_utf8.c 
a_sign.c a_digest.c a_verify.c x_algor.c x_val.c x_pubkey.c x_sig.c x_req.c x_attrib.c 
x_name.c x_cinf.c x_x509.c x_crl.c x_info.c x_spki.c nsseq.c d2i_r_pr.c i2d_r_pr.c 
d2i_r_pu.c i2d_r_pu.c d2i_s_pr.c i2d_s_pr.c d2i_s_pu.c i2d_s_pu.c d2i_pu.c d2i_pr.c 
i2d_pu.c i2d_pr.c t_req.c t_x509.c t_crl.c t_pkey.c p7_i_s.c p7_signi.c p7_signd.c 
p7_recip.c p7_enc_c.c p7_evp.c p7_dgst.c p7_s_e.c p7_enc.c p7_lib.c f_int.c f_string.c 
i2d_dhp.c i2d_dsap.c d2i_dhp.c d2i_dsap.c n_pkey.c f_enum.c a_hdr.c x_pkey.c a_bool.c 
x_exten.c asn1_par.c asn1_lib.c asn1_err.c a_meth.c a_bytes.c evp_asn1.c asn_pack.c 
p5_pbe.c p5_pbev2.c p8_pkey.c
-MAKE=make -f Makefile.ssl
-MAKEDEPEND=../../util/domd ../..
-MAKEFILE=Makefile.ssl
-OPENSSLDIR=/usr/local/ssl
-SRC=a_object.c a_bitstr.c a_utctm.c a_gentm.c a_time.c a_int.c a_octet.c a_print.c 
a_type.c a_set.c a_dup.c a_d2i_fp.c a_i2d_fp.c a_bmp.c a_enum.c a_vis.c a_utf8.c 
a_sign.c a_digest.c a_verify.c x_algor.c x_val.c x_pubkey.c x_sig.c x_req.c x_attrib.c 
x_name.c x_cinf.c x_x509.c x_crl.c x_info.c x_spki.c nsseq.c d2i_r_pr.c i2d_r_pr.c 
d2i_r_pu.c i2d_r_pu.c d2i_s_pr.c i2d_s_pr.c d2i_s_pu.c i2d_s_pu.c d2i_pu.c d2i_pr.c 
i2d_pu.c i2d_pr.c t_req.c t_x509.c t_crl.c t_pkey.c p7_i_s.c p7_signi.c p7_signd.c 
p7_recip.c p7_enc_c.c p7_evp.c p7_dgst.c p7_s_e.c p7_enc.c p7_lib.c f_int.c f_string.c 
i2d_dhp.c i2d_dsap.c d2i_dhp.c d2i_dsap.c n_pkey.c f_enum.c a_hdr.c x_pkey.c a_bool.c 
x_exten.c asn1_par.c asn1_lib.c asn1_err.c a_meth.c a_bytes.c evp_asn1.c asn_pack.c 
p5_pbe.c p5_pbev2.c p8_pkey.c
-TEST=
-TOP=../..
-RELATIVE_DIRECTORY=
-RELATIVE_DIRECTORY=crypto/pem
-ALL=Makefile pem_sign.c pem_seal.c pem_info.c pem_lib.c pem_all.c pem_err.c pem.h 
pem2.h
-APPS=
-AR=ar r
-CC=cc
-CFLAG=-g
-CFLAGS=-I.. -I../../include -g
-DIR=pem
-EXHEADER=pem.h pem2.h
-GENERAL=Makefile
-HEADER=pem.h pem2.h
-INCLUDES=-I.. -I../../include
-INSTALLTOP=/usr/local/ssl
-INSTALL_PREFIX=
-LIB=../../libcrypto.a
-LIBOBJ=pem_sign.o pem_seal.o pem_info.o pem_lib.o pem_all.o pem_err.o
-LIBSRC=pem_sign.c pem_seal.c pem_info.c pem_lib.c pem_all.c pem_err.c
-MAKE=make -f Makefile.ssl
-MAKEDEPEND=../../util/domd ../..
-MAKEFILE=Makefile.ssl
-OPENSSLDIR=/usr/local/ssl
-SRC=pem_sign.c pem_seal.c pem_info.c pem_lib.c pem_all.c pem_err.c
-TEST=
-TOP=../..
-RELATIVE_DIRECTORY=
-RELATIVE_DIRECTORY=crypto/x509
-ALL=Makefile README x509_def.c x509_d2.c x509_r2x.c x509_cmp.c x509_obj.c x509_req.c 
x509_vfy.c x509_set.c x509rset.c x509_err.c x509name.c x509_v3.c x509_ext.c x509type.c 
x509_lu.c x_all.c x509_txt.c by_file.c by_dir.c x509.h x509_vfy.h
-APPS=
-AR=ar r
-CC=cc
-CFLAG=-g
-CFLAGS=-I.. -I../../include -g
-DIR=x509
-EXHEADER=x509.h x509_vfy.h
-GENERAL=Makefile README
-HEADER=x509.h x509_vfy.h
-INCLUDES=-I.. -I../../include
-INSTALLTOP=/usr/local/ssl
-INSTALL_PREFIX=
-LIB=../../libcrypto.a
-LIBOBJ=x509_def.o x509_d2.o x509_r2x.o x509_cmp.o x509_obj.o x509_req.o x509_vfy.o 
x509_set.o x509rset.o x509_err.o x509name.o x509_v3.o x509_ext.o x509type.o x509_lu.o 
x_all.o x509_txt.o by_file.o by_dir.o
-LIBSRC=x509_def.c x509_d2.c x509_r2x.c x509_cmp.c x509_obj.c x509_req.c x509_vfy.c 
x509_set.c x509rset.c x509_err.c x509name.c x509_v3.c x509_ext.c x509type.c x509_lu.c 
x_all.c x509_txt.c by_file.c by_dir.c
-MAKE=make -f Makefile.ssl
-MAKEDEPEND=../../util/domd ../..
-MAKEFILE=Makefile.ssl
-OPENSSLDIR=/usr/local/ssl
-SRC=x509_def.c x509_d2.c x509_r2x.c x509_cmp.c x509_obj.c x509_req.c x509_vfy.c 
x509_set.c x509rset.c x509_err.c x509name.c x509_v3.c x509_ext.c x509type.c x509_lu.c 
x_all.c x509_txt.c by_file.c by_dir.c
-TEST=
-TOP=../..
-RELATIVE_DIRECTORY=
-RELATIVE_DIRECTORY=crypto/x509v3
-ALL=Makefile README v3_bcons.c v3_bitst.c v3_conf.c v3_extku.c v3_ia5.c v3_lib.c 
v3_prn.c v3_utl.c v3err.c v3_genn.c v3_alt.c v3_skey.c v3_akey.c v3_pku.c v3_int.c 
v3_enum.c v3_sxnet.c v3_cpols.c v3_crld.c x509v3.h
-APPS=
-AR=ar r
-CC=cc
-CFLAG=-g
-CFLAGS=-I.. -I../../include -g
-DIR=x509v3
-EXHEADER=x509v3.h
-GENERAL=Makefile README
-HEADER=x509v3.h
-INCLUDES=-I.. -I../../include
-INSTALLTOP=/usr/local/ssl
-INSTALL_PREFIX=
-LIB=../../libcrypto.a
-LIBOBJ=v3_bcons.o v3_bitst.o v3_conf.o v3_extku.o v3_ia5.o v3_lib.o v3_prn.o v3_utl.o 
v3err.o v3_genn.o v3_alt.o v3_skey.o v3_akey.o v3_pku.o v3_int.o v3_enum.o v3_sxnet.o 
v3_cpols.o v3_crld.o
-LIBSRC=v3_bcons.c v3_bitst.c v3_conf.c v3_extku.c v3_ia5.c v3_lib.c v3_prn.c v3_utl.c 
v3err.c v3_genn.c v3_alt.c v3_skey.c v3_akey.c v3_pku.c v3_int.c v3_enum.c v3_sxnet.c 
v3_cpols.c v3_crld.c
-MAKE=make -f Makefile.ssl
-MAKEDEPEND=../../util/domd ../..
-MAKEFILE=Makefile.ssl
-OPENSSLDIR=/usr/local/ssl
-SRC=v3_bcons.c v3_bitst.c v3_conf.c v3_extku.c v3_ia5.c v3_lib.c v3_prn.c v3_utl.c 
v3err.c v3_genn.c v3_alt.c v3_skey.c v3_akey.c v3_pku.c v3_int.c v3_enum.c v3_sxnet.c 
v3_cpols.c v3_crld.c
-TEST=
-TOP=../..
-RELATIVE_DIRECTORY=
-RELATIVE_DIRECTORY=crypto/conf
-ALL=Makefile conf.c conf_err.c conf_lcl.h conf.h
-APPS=
-AR=ar r
-CC=cc
-CFLAG=-g
-CFLAGS=-I.. -I../../include -g
-DIR=conf
-EXHEADER=conf.h
-GENERAL=Makefile
-HEADER=conf_lcl.h conf.h
-INCLUDES=-I.. -I../../include
-INSTALLTOP=/usr/local/ssl
-INSTALL_PREFIX=
-LIB=../../libcrypto.a
-LIBOBJ=conf.o conf_err.o
-LIBSRC=conf.c conf_err.c
-MAKE=make -f Makefile.ssl
-MAKEDEPEND=../../util/domd ../..
-MAKEFILE=Makefile.ssl
-OPENSSLDIR=/usr/local/ssl
-SRC=conf.c conf_err.c
-TEST=
-TOP=../..
-RELATIVE_DIRECTORY=
-RELATIVE_DIRECTORY=crypto/txt_db
-ALL=Makefile txt_db.c txt_db.h
-APPS=
-AR=ar r
-CC=cc
-CFLAG=-g
-CFLAGS= -g
-DIR=txt_db
-EXHEADER=txt_db.h
-GENERAL=Makefile
-HEADER=txt_db.h
-INCLUDES=
-INSTALLTOP=/usr/local/ssl
-INSTALL_PREFIX=
-LIB=../../libcrypto.a
-LIBOBJ=txt_db.o
-LIBSRC=txt_db.c
-MAKE=make -f Makefile.ssl
-MAKEDEPEND=../../util/domd ../..
-MAKEFILE=Makefile.ssl
-OPENSSLDIR=/usr/local/ssl
-SRC=txt_db.c
-TEST=
-TOP=../..
-RELATIVE_DIRECTORY=
-RELATIVE_DIRECTORY=crypto/pkcs7
-ALL=Makefile README pk7_lib.c pkcs7err.c pk7_doit.c pkcs7.h
-APPS=
-AR=ar r
-CC=cc
-CFLAG=-g
-CFLAGS=-I.. -I../../include -g
-DIR=pkcs7
-EXHEADER=pkcs7.h
-GENERAL=Makefile README
-HEADER=pkcs7.h
-INCLUDES=-I.. -I../../include
-INSTALLTOP=/usr/local/ssl
-INSTALL_PREFIX=
-LIB=../../libcrypto.a
-LIBOBJ=pk7_lib.o pkcs7err.o pk7_doit.o
-LIBSRC=pk7_lib.c pkcs7err.c pk7_doit.c
-MAKE=make -f Makefile.ssl
-MAKEDEPEND=../../util/domd ../..
-MAKEFILE=Makefile.ssl
-OPENSSLDIR=/usr/local/ssl
-SRC=pk7_lib.c pkcs7err.c pk7_doit.c
-TEST=
-TOP=../..
-RELATIVE_DIRECTORY=
-RELATIVE_DIRECTORY=crypto/pkcs12
-ALL=Makefile p12_add.c p12_attr.c p12_bags.c p12_crpt.c p12_crt.c p12_decr.c 
p12_init.c p12_key.c p12_kiss.c p12_lib.c p12_mac.c p12_mutl.c p12_sbag.c p12_utl.c 
pk12err.c pkcs12.h
-APPS=
-AR=ar r
-CC=cc
-CFLAG=-g
-CFLAGS=-I.. -I../../include -g
-DIR=pkcs12
-EXHEADER=pkcs12.h
-GENERAL=Makefile
-HEADER=pkcs12.h
-INCLUDES=-I.. -I../../include
-INSTALLTOP=/usr/local/ssl
-INSTALL_PREFIX=
-LIB=../../libcrypto.a
-LIBOBJ=p12_add.o p12_attr.o p12_bags.o p12_crpt.o p12_crt.o p12_decr.o p12_init.o 
p12_key.o p12_kiss.o p12_lib.o p12_mac.o p12_mutl.o p12_sbag.o p12_utl.o pk12err.o
-LIBSRC=p12_add.c p12_attr.c p12_bags.c p12_crpt.c p12_crt.c p12_decr.c p12_init.c 
p12_key.c p12_kiss.c p12_lib.c p12_mac.c p12_mutl.c p12_sbag.c p12_utl.c pk12err.c
-MAKE=make -f Makefile.ssl
-MAKEDEPEND=../../util/domd ../..
-MAKEFILE=Makefile.ssl
-OPENSSLDIR=/usr/local/ssl
-SRC=p12_add.c p12_attr.c p12_bags.c p12_crpt.c p12_crt.c p12_decr.c p12_init.c 
p12_key.c p12_kiss.c p12_lib.c p12_mac.c p12_mutl.c p12_sbag.c p12_utl.c pk12err.c
-TEST=
-TOP=../..
-RELATIVE_DIRECTORY=
-RELATIVE_DIRECTORY=crypto/comp
-ALL=Makefile comp_lib.c c_rle.c c_zlib.c comp.h
-APPS=
-AR=ar r
-CC=cc
-CFLAG=-g
-CFLAGS=-I.. -I../../include -g
-DIR=comp
-EXHEADER=comp.h
-GENERAL=Makefile
-HEADER=comp.h
-INCLUDES=-I.. -I../../include
-INSTALLTOP=/usr/local/ssl
-INSTALL_PREFIX=
-LIB=../../libcrypto.a
-LIBOBJ=comp_lib.o c_rle.o c_zlib.o
-LIBSRC=comp_lib.c c_rle.c c_zlib.c
-MAKE=make -f Makefile.ssl
-MAKEDEPEND=../../util/domd ../..
-MAKEFILE=Makefile.ssl
-OPENSSLDIR=/usr/local/ssl
-SRC=comp_lib.c c_rle.c c_zlib.c
-TEST=
-TOP=../..
-RELATIVE_DIRECTORY=
-RELATIVE_DIRECTORY=ssl
-ALL=Makefile README ssl-lib.com install.com s2_meth.c s2_srvr.c s2_clnt.c s2_lib.c 
s2_enc.c s2_pkt.c s3_meth.c s3_srvr.c s3_clnt.c s3_lib.c s3_enc.c s3_pkt.c s3_both.c 
s23_meth.c s23_srvr.c s23_clnt.c s23_lib.c s23_pkt.c t1_meth.c t1_srvr.c t1_clnt.c 
t1_lib.c t1_enc.c ssl_lib.c ssl_err2.c ssl_cert.c ssl_sess.c ssl_ciph.c ssl_stat.c 
ssl_rsa.c ssl_asn1.c ssl_txt.c ssl_algs.c bio_ssl.c ssl_err.c ssl.h ssl2.h ssl3.h 
ssl23.h tls1.h ssl_locl.h
-APPS=
-AR=ar r
-CC=cc
-CFLAG=-g
-CFLAGS=-I../crypto -I../include -g
-DIR=ssl
-EXHEADER=ssl.h ssl2.h ssl3.h ssl23.h tls1.h
-GENERAL=Makefile README ssl-lib.com install.com
-HEADER=ssl.h ssl2.h ssl3.h ssl23.h tls1.h ssl_locl.h
-INCLUDES=-I../crypto -I../include
-INSTALLTOP=/usr/local/ssl
-INSTALL_PREFIX=
-LIB=../libssl.a
-LIBOBJ=s2_meth.o s2_srvr.o s2_clnt.o s2_lib.o s2_enc.o s2_pkt.o s3_meth.o s3_srvr.o 
s3_clnt.o s3_lib.o s3_enc.o s3_pkt.o s3_both.o s23_meth.o s23_srvr.o s23_clnt.o 
s23_lib.o s23_pkt.o t1_meth.o t1_srvr.o t1_clnt.o t1_lib.o t1_enc.o ssl_lib.o 
ssl_err2.o ssl_cert.o ssl_sess.o ssl_ciph.o ssl_stat.o ssl_rsa.o ssl_asn1.o ssl_txt.o 
ssl_algs.o bio_ssl.o ssl_err.o
-LIBSRC=s2_meth.c s2_srvr.c s2_clnt.c s2_lib.c s2_enc.c s2_pkt.c s3_meth.c s3_srvr.c 
s3_clnt.c s3_lib.c s3_enc.c s3_pkt.c s3_both.c s23_meth.c s23_srvr.c s23_clnt.c 
s23_lib.c s23_pkt.c t1_meth.c t1_srvr.c t1_clnt.c t1_lib.c t1_enc.c ssl_lib.c 
ssl_err2.c ssl_cert.c ssl_sess.c ssl_ciph.c ssl_stat.c ssl_rsa.c ssl_asn1.c ssl_txt.c 
ssl_algs.c bio_ssl.c ssl_err.c
-MAKE=make -f Makefile.ssl
-MAKEDEPEND=../util/domd ..
-MAKEFILE=Makefile.ssl
-OPENSSLDIR=/usr/local/ssl
-SRC=s2_meth.c s2_srvr.c s2_clnt.c s2_lib.c s2_enc.c s2_pkt.c s3_meth.c s3_srvr.c 
s3_clnt.c s3_lib.c s3_enc.c s3_pkt.c s3_both.c s23_meth.c s23_srvr.c s23_clnt.c 
s23_lib.c s23_pkt.c t1_meth.c t1_srvr.c t1_clnt.c t1_lib.c t1_enc.c ssl_lib.c 
ssl_err2.c ssl_cert.c ssl_sess.c ssl_ciph.c ssl_stat.c ssl_rsa.c ssl_asn1.c ssl_txt.c 
ssl_algs.c bio_ssl.c ssl_err.c
-TEST=ssltest.c
-TOP=..
-RELATIVE_DIRECTORY=
-RELATIVE_DIRECTORY=rsaref
-ALL=Makefile rsaref-lib.com install.com rsaref.c rsar_err.c rsaref.h
-APPS=
-AR=ar r
-CC=cc
-CFLAG=-g
-CFLAGS=-I../crypto -I../include -g
-DIR=rsaref
-EXHEADER=rsaref.h
-GENERAL=Makefile rsaref-lib.com install.com
-HEADER=rsaref.h
-INCLUDES=-I../crypto -I../include
-INSTALLTOP=/usr/local/ssl
-INSTALL_PREFIX=
-LIB=../libRSAglue.a
-LIBOBJ=rsaref.o rsar_err.o
-LIBSRC=rsaref.c rsar_err.c
-MAKE=make -f Makefile.ssl
-MAKEDEPEND=../util/domd ..
-MAKEFILE=Makefile.ssl
-OPENSSLDIR=/usr/local/ssl
-SRC=rsaref.c rsar_err.c
-TEST=
-TOP=..
-RELATIVE_DIRECTORY=
-RELATIVE_DIRECTORY=apps
-ALL=Makefile makeapps.com install.com verify.c asn1pars.c req.c dgst.c dh.c enc.c 
gendh.c errstr.c ca.c pkcs7.c crl2p7.c crl.c rsa.c dsa.c dsaparam.c x509.c genrsa.c 
gendsa.c s_server.c s_client.c speed.c s_time.c apps.c s_cb.c s_socket.c version.c 
sess_id.c ciphers.c nseq.c pkcs12.c pkcs8.c apps.h progs.h s_apps.h testdsa.h 
testrsa.h 
-A_OBJ=apps.o
-A_SRC=apps.c
-CC=cc
-CFLAG=-g -static
-CFLAGS=-DMONOLITH -I../include -g -static
-DIR=apps
-DLIBCRYPTO=../libcrypto.a
-DLIBSSL=../libssl.a
-EXE=openssl
-EXHEADER=
-EX_LIBS=
-E_EXE=verify asn1pars req dgst dh enc gendh errstr ca crl rsa dsa dsaparam x509 
genrsa gendsa s_server s_client speed s_time version pkcs7 crl2pkcs7 sess_id ciphers 
nseq pkcs12 pkcs8
-E_OBJ=verify.o asn1pars.o req.o dgst.o dh.o enc.o gendh.o errstr.o ca.o pkcs7.o 
crl2p7.o crl.o rsa.o dsa.o dsaparam.o x509.o genrsa.o gendsa.o s_server.o s_client.o 
speed.o s_time.o apps.o s_cb.o s_socket.o version.o sess_id.o ciphers.o nseq.o 
pkcs12.o pkcs8.o
-E_SRC=verify.c asn1pars.c req.c dgst.c dh.c enc.c gendh.c errstr.c ca.c pkcs7.c 
crl2p7.c crl.c rsa.c dsa.c dsaparam.c x509.c genrsa.c gendsa.c s_server.c s_client.c 
speed.c s_time.c apps.c s_cb.c s_socket.c version.c sess_id.c ciphers.c nseq.c 
pkcs12.c pkcs8.c
-GENERAL=Makefile makeapps.com install.com
-HEADER=apps.h progs.h s_apps.h testdsa.h testrsa.h 
-INCLUDES=-I../include
-INSTALLTOP=/usr/local/ssl
-INSTALL_PREFIX=
-LIBCRYPTO=-L.. -lcrypto
-LIBSSL=-L.. -lssl
-MAKE=make -f Makefile.ssl
-MAKEDEPEND=../util/domd ..
-MAKEFILE=Makefile.ssl
-OPENSSLDIR=/usr/local/ssl
-PEX_LIBS=
-PROGRAM=openssl
-PROGS=openssl.c
-RM=rm -f
-SCRIPTS=CA.sh CA.pl der_chop
-SRC=verify.c asn1pars.c req.c dgst.c dh.c enc.c gendh.c errstr.c ca.c pkcs7.c 
crl2p7.c crl.c rsa.c dsa.c dsaparam.c x509.c genrsa.c gendsa.c s_server.c s_client.c 
speed.c s_time.c apps.c s_cb.c s_socket.c version.c sess_id.c ciphers.c nseq.c 
pkcs12.c pkcs8.c
-S_OBJ=s_cb.o s_socket.o
-S_SRC=s_cb.c s_socket.c
-TOP=..
-RELATIVE_DIRECTORY=
-RELATIVE_DIRECTORY=test
-ALL=Makefile.ssl maketests.com tests.com testenc.com tx509.com trsa.com tcrl.com 
tsid.com treq.com tpkcs7.com tpkcs7d.com tverify.com testgen.com testss.com 
testssl.com testca.com VMSca-response.1 VMSca-response.2 bntest.c ideatest.c md2test.c 
md5test.c hmactest.c rc2test.c rc4test.c rc5test.c destest.c shatest.c sha1test.c 
mdc2test.c rmdtest.c randtest.c dhtest.c casttest.c bftest.c ssltest.c dsatest.c 
exptest.c rsa_oaep_test.c 
-BFTEST=bftest
-BNTEST=bntest
-CASTTEST=casttest
-CC=cc
-CFLAG=-g
-CFLAGS=-I../include -g
-DESTEST=destest
-DHTEST=dhtest
-DIR=test
-DLIBCRYPTO=../libcrypto.a
-DLIBSSL=../libssl.a
-DSATEST=dsatest
-EXE=bntest ideatest md2test md5test hmactest rc2test rc4test rc5test destest shatest 
sha1test mdc2test rmdtest randtest dhtest bftest casttest ssltest exptest dsatest 
rsa_oaep_test
-EXHEADER=
-EXPTEST=exptest
-EX_LIBS=
-GENERAL=Makefile.ssl maketests.com tests.com testenc.com tx509.com trsa.com tcrl.com 
tsid.com treq.com tpkcs7.com tpkcs7d.com tverify.com testgen.com testss.com 
testssl.com testca.com VMSca-response.1 VMSca-response.2
-HEADER=
-HMACTEST=hmactest
-IDEATEST=ideatest
-INCLUDES=-I../include
-INSTALLTOP=/usr/local/ssl
-INSTALL_PREFIX=
-LIBCRYPTO=-L.. -lcrypto
-LIBSSL=-L.. -lssl
-MAKE=make -f Makefile.ssl
-MAKEDEPEND=../util/domd ..
-MAKEFILE=Makefile.ssl
-MD2TEST=md2test
-MD5TEST=md5test
-MDC2TEST=mdc2test
-METHTEST=methtest
-OBJ=bntest.o ideatest.o md2test.o md5test.o hmactest.o rc2test.o rc4test.o rc5test.o 
destest.o shatest.o sha1test.o mdc2test.o rmdtest.o randtest.o dhtest.o casttest.o 
bftest.o ssltest.o dsatest.o exptest.o rsa_oaep_test.o
-OPENSSLDIR=/usr/local/ssl
-PEX_LIBS=
-RANDTEST=randtest
-RC2TEST=rc2test
-RC4TEST=rc4test
-RC5TEST=rc5test
-RMDTEST=rmdtest
-RSATEST=rsa_oaep_test
-SHA1TEST=sha1test
-SHATEST=shatest
-SRC=bntest.c ideatest.c md2test.c md5test.c hmactest.c rc2test.c rc4test.c rc5test.c 
destest.c shatest.c sha1test.c mdc2test.c rmdtest.c randtest.c dhtest.c casttest.c 
bftest.c ssltest.c dsatest.c exptest.c rsa_oaep_test.c
-SSLTEST=ssltest
-TOP=..
-RELATIVE_DIRECTORY=
-RELATIVE_DIRECTORY=tools
-APPS=c_rehash
-CC=cc
-CFLAG=-g
-CFLAGS=-I.. -I../../include -g
-DIR=tools
-GENERAL=Makefile.ssl
-INCLUDES=-I.. -I../../include
-INSTALLTOP=/usr/local/ssl
-INSTALL_PREFIX=
-MAKE=make -f Makefile.ssl
-MAKEDEPEND=../util/domd ..
-MAKEFILE=Makefile.ssl
-MISC_APPS=c_hash c_info c_issuer c_name
-OPENSSLDIR=/usr/local/ssl
-TEST=
-TOP=..
-RELATIVE_DIRECTORY=
+RELATIVE_DIRECTORY=.
+AR=ar r
+BASENAME=openssl
+BF_ENC=bf_enc.o
+BN_ASM=bn_asm.o
+CAST_ENC=c_enc.o
+CC=cl
+CFLAG=-DTHREADS
+DEPFLAG=
+DES_ENC=des_enc.o fcrypt_b.o
+DIRS=crypto ssl rsaref apps test tools
+EDIRS=times doc bugs util include certs ms shlib mt demos perl sf dep VMS
+EXHEADER=e_os.h e_os2.h
+EX_LIBS=
+GENERAL=Makefile
+HEADER=e_os.h
+INSTALLTOP=/usr/local/ssl
+INSTALL_PREFIX=
+LIBS=libcrypto.a libssl.a
+MAJOR=0
+MAKE=make -f Makefile.ssl
+MAKEFILE=Makefile.ssl
+MAN1=1
+MAN3=3
+MANDIR=/usr/local/ssl/man
+MD5_ASM_OBJ=
+MINOR=9.5
+NAME=openssl-0.9.5
+ONEDIRS=out tmp
+OPENSSLDIR=/usr/local/ssl
+OPTIONS=
+PERL=perl
+PEX_LIBS=-L. -L.. -L../.. -L../../..
+PLATFORM=VC-WIN32
+PROCESSOR=
+RANLIB=true
+RC4_ENC=rc4_enc.o
+RC5_ENC=rc5_enc.o
+RMD160_ASM_OBJ=
+SDIRS=md2 md5 sha mdc2 hmac ripemd des rc2 rc4 rc5 idea bf cast bn rsa dsa dh buffer 
+bio stack lhash rand err objects evp asn1 pem x509 x509v3 conf txt_db pkcs7 pkcs12 
+comp
+SHA1_ASM_OBJ=
+SHELL=/bin/sh
+SHLIBDIRS=crypto ssl
+TAR=tar
+TARFILE=openssl-0.9.5.tar
+TARFLAGS=--norecurse
+TOP=.
+VERSION=0.9.5
+WDIRS=windows
+WTARFILE=openssl-0.9.5-win.tar
+RELATIVE_DIRECTORY=
+RELATIVE_DIRECTORY=crypto
+ALL=Makefile README crypto-lib.com install.com cryptlib.c mem.c mem_dbg.c cversion.c 
+ex_data.c tmdiff.c cpt_err.c ebcdic.c cryptlib.h buildinf.h crypto.h tmdiff.h 
+opensslv.h opensslconf.h ebcdic.h
+AR=ar r
+CC=cc
+CFLAG=-g
+CFLAGS=-I. -I../include -g
+DIR=crypto
+EXHEADER=crypto.h tmdiff.h opensslv.h opensslconf.h ebcdic.h
+EX_LIBS=
+GENERAL=Makefile README crypto-lib.com install.com
+HEADER=cryptlib.h buildinf.h crypto.h tmdiff.h opensslv.h opensslconf.h ebcdic.h
+INCLUDE=-I. -I../include
+INCLUDES=-I.. -I../../include
+INSTALLTOP=/usr/local/ssl
+INSTALL_PREFIX=
+LIB=../libcrypto.a
+LIBOBJ=cryptlib.o mem.o mem_dbg.o cversion.o ex_data.o tmdiff.o cpt_err.o ebcdic.o
+LIBS=
+LIBSRC=cryptlib.c mem.c mem_dbg.c cversion.c ex_data.c tmdiff.c cpt_err.c ebcdic.c
+MAKE=make -f Makefile.ssl
+MAKEDEPEND=../util/domd ..
+MAKEFILE=Makefile.ssl
+OPENSSLDIR=/usr/local/ssl
+PEX_LIBS=
+RM=rm -f
+SDIRS=md2 md5 sha mdc2 hmac ripemd des rc2 rc4 rc5 idea bf cast bn rsa dsa dh buffer 
+bio stack lhash rand err objects evp asn1 pem x509 x509v3 conf txt_db pkcs7 pkcs12 
+comp
+SRC=cryptlib.c mem.c mem_dbg.c cversion.c ex_data.c tmdiff.c cpt_err.c ebcdic.c
+TOP=..
+RELATIVE_DIRECTORY=
+RELATIVE_DIRECTORY=crypto/md2
+ALL=Makefile md2_dgst.c md2_one.c md2.h
+APPS=
+AR=ar r
+CC=cc
+CFLAG=-g
+CFLAGS= -g
+DIR=md
+EXHEADER=md2.h
+GENERAL=Makefile
+HEADER=md2.h
+INCLUDES=
+INSTALLTOP=/usr/local/ssl
+INSTALL_PREFIX=
+LIB=../../libcrypto.a
+LIBOBJ=md2_dgst.o md2_one.o
+LIBSRC=md2_dgst.c md2_one.c
+MAKE=make -f Makefile.ssl
+MAKEDEPEND=../../util/domd ../..
+MAKEFILE=Makefile.ssl
+OPENSSLDIR=/usr/local/ssl
+SRC=md2_dgst.c md2_one.c
+TEST=md2test.c
+TOP=../..
+RELATIVE_DIRECTORY=
+RELATIVE_DIRECTORY=crypto/md5
+ALL=Makefile md5_dgst.c md5_one.c md5_locl.h md5.h
+APPS=md5.c
+AR=ar r
+AS=cc -c
+ASFLAGS= -g
+CC=cc
+CFLAG=-g
+CFLAGS= -g
+CPP=cc -E
+DIR=md5
+EXHEADER=md5.h
+GENERAL=Makefile
+HEADER=md5_locl.h md5.h
+INCLUDES=
+INSTALLTOP=/usr/local/ssl
+INSTALL_PREFIX=
+LIB=../../libcrypto.a
+LIBOBJ=md5_dgst.o md5_one.o 
+LIBSRC=md5_dgst.c md5_one.c
+MAKE=make -f Makefile.ssl
+MAKEDEPEND=../../util/domd ../..
+MAKEFILE=Makefile.ssl
+MD5_ASM_OBJ=
+OPENSSLDIR=/usr/local/ssl
+SRC=md5_dgst.c md5_one.c
+TEST=md5test.c
+TOP=../..
+RELATIVE_DIRECTORY=
+RELATIVE_DIRECTORY=crypto/sha
+ALL=Makefile sha_dgst.c sha1dgst.c sha_one.c sha1_one.c sha_locl.h sha.h
+APPS=
+AR=ar r
+CC=cc
+CFLAG=-g
+CFLAGS= -g
+DIR=sha
+EXHEADER=sha.h
+GENERAL=Makefile
+HEADER=sha_locl.h sha.h
+INCLUDES=
+INSTALLTOP=/usr/local/ssl
+INSTALL_PREFIX=
+LIB=../../libcrypto.a
+LIBOBJ=sha_dgst.o sha1dgst.o sha_one.o sha1_one.o 
+LIBSRC=sha_dgst.c sha1dgst.c sha_one.c sha1_one.c
+MAKE=make -f Makefile.ssl
+MAKEDEPEND=../../util/domd ../..
+MAKEFILE=Makefile.ssl
+OPENSSLDIR=/usr/local/ssl
+SHA1_ASM_OBJ=
+SRC=sha_dgst.c sha1dgst.c sha_one.c sha1_one.c
+TEST=shatest.c sha1test.c
+TOP=../..
+RELATIVE_DIRECTORY=
+RELATIVE_DIRECTORY=crypto/mdc2
+ALL=Makefile mdc2dgst.c mdc2_one.c mdc2.h
+APPS=
+AR=ar r
+CC=cc
+CFLAG=-g
+CFLAGS= -g
+DIR=mdc2
+EXHEADER=mdc2.h
+GENERAL=Makefile
+HEADER=mdc2.h
+INCLUDES=
+INSTALLTOP=/usr/local/ssl
+INSTALL_PREFIX=
+LIB=../../libcrypto.a
+LIBOBJ=mdc2dgst.o mdc2_one.o
+LIBSRC=mdc2dgst.c mdc2_one.c
+MAKE=make -f Makefile.ssl
+MAKEDEPEND=../../util/domd ../..
+MAKEFILE=Makefile.ssl
+OPENSSLDIR=/usr/local/ssl
+SRC=mdc2dgst.c mdc2_one.c
+TEST=mdc2test.c
+TOP=../..
+RELATIVE_DIRECTORY=
+RELATIVE_DIRECTORY=crypto/hmac
+ALL=Makefile hmac.c hmac.h
+APPS=
+AR=ar r
+CC=cc
+CFLAG=-g
+CFLAGS= -g
+DIR=hmac
+EXHEADER=hmac.h
+GENERAL=Makefile
+HEADER=hmac.h
+INCLUDES=
+INSTALLTOP=/usr/local/ssl
+INSTALL_PREFIX=
+LIB=../../libcrypto.a
+LIBOBJ=hmac.o
+LIBSRC=hmac.c
+MAKE=make -f Makefile.ssl
+MAKEDEPEND=../../util/domd ../..
+MAKEFILE=Makefile.ssl
+OPENSSLDIR=/usr/local/ssl
+SRC=hmac.c
+TEST=hmactest.c
+TOP=../..
+RELATIVE_DIRECTORY=
+RELATIVE_DIRECTORY=crypto/ripemd
+ALL=Makefile rmd_dgst.c rmd_one.c rmd_locl.h rmdconst.h ripemd.h
+APPS=rmd160.c
+AR=ar r
+CC=cc
+CFLAG=-g
+CFLAGS= -g
+CPP=cc -E
+DIR=ripemd
+EXHEADER=ripemd.h
+GENERAL=Makefile
+HEADER=rmd_locl.h rmdconst.h ripemd.h
+INCLUDES=
+INSTALLTOP=/usr/local/ssl
+INSTALL_PREFIX=
+LIB=../../libcrypto.a
+LIBOBJ=rmd_dgst.o rmd_one.o 
+LIBSRC=rmd_dgst.c rmd_one.c
+MAKE=make -f Makefile.ssl
+MAKEDEPEND=../../util/domd ../..
+MAKEFILE=Makefile.ssl
+OPENSSLDIR=/usr/local/ssl
+RIP_ASM_OBJ=
+SRC=rmd_dgst.c rmd_one.c
+TEST=rmdtest.c
+TOP=../..
+RELATIVE_DIRECTORY=
+RELATIVE_DIRECTORY=crypto/des
+ALL=Makefile cbc_cksm.c cbc_enc.c cfb64enc.c cfb_enc.c ecb3_enc.c ecb_enc.c 
+enc_read.c enc_writ.c fcrypt.c ofb64enc.c ofb_enc.c pcbc_enc.c qud_cksm.c rand_key.c 
+read_pwd.c rpc_enc.c set_key.c des_enc.c fcrypt_b.c read2pwd.c fcrypt.c xcbc_enc.c 
+str2key.c cfb64ede.c ofb64ede.c supp.c ede_cbcm_enc.c des_locl.h rpc_des.h podd.h 
+sk.h spr.h des_ver.h des.h
+APPS=
+AR=ar r
+CC=cc
+CFLAG=-g
+CFLAGS=-I../../include -g
+CPP=cc -E
+DES_ENC=des_enc.o fcrypt_b.o
+DIR=des
+EXHEADER=des.h
+GENERAL=Makefile
+HEADER=des_locl.h rpc_des.h podd.h sk.h spr.h des_ver.h des.h
+INCLUDES=-I../../include
+INSTALLTOP=/usr/local/ssl
+INSTALL_PREFIX=
+LIB=../../libcrypto.a
+LIBOBJ=set_key.o ecb_enc.o cbc_enc.o ecb3_enc.o cfb64enc.o cfb64ede.o cfb_enc.o 
+ofb64ede.o enc_read.o enc_writ.o ofb64enc.o ofb_enc.o str2key.o pcbc_enc.o qud_cksm.o 
+rand_key.o des_enc.o fcrypt_b.o read2pwd.o fcrypt.o xcbc_enc.o read_pwd.o rpc_enc.o 
+cbc_cksm.o supp.o ede_cbcm_enc.o
+LIBSRC=cbc_cksm.c cbc_enc.c cfb64enc.c cfb_enc.c ecb3_enc.c ecb_enc.c enc_read.c 
+enc_writ.c fcrypt.c ofb64enc.c ofb_enc.c pcbc_enc.c qud_cksm.c rand_key.c read_pwd.c 
+rpc_enc.c set_key.c des_enc.c fcrypt_b.c read2pwd.c fcrypt.c xcbc_enc.c str2key.c 
+cfb64ede.c ofb64ede.c supp.c ede_cbcm_enc.c
+MAKE=make -f Makefile.ssl
+MAKEDEPEND=../../util/domd ../..
+MAKEFILE=Makefile.ssl
+OPENSSLDIR=/usr/local/ssl
+RANLIB=ranlib
+SRC=cbc_cksm.c cbc_enc.c cfb64enc.c cfb_enc.c ecb3_enc.c ecb_enc.c enc_read.c 
+enc_writ.c fcrypt.c ofb64enc.c ofb_enc.c pcbc_enc.c qud_cksm.c rand_key.c read_pwd.c 
+rpc_enc.c set_key.c des_enc.c fcrypt_b.c read2pwd.c fcrypt.c xcbc_enc.c str2key.c 
+cfb64ede.c ofb64ede.c supp.c ede_cbcm_enc.c
+TEST=destest.c
+TOP=../..
+RELATIVE_DIRECTORY=
+RELATIVE_DIRECTORY=crypto/rc2
+ALL=Makefile rc2_ecb.c rc2_skey.c rc2_cbc.c rc2cfb64.c rc2ofb64.c rc2_locl.h rc2.h
+APPS=
+AR=ar r
+CC=cc
+CFLAG=-g
+CFLAGS= -g
+DIR=rc2
+EXHEADER=rc2.h
+GENERAL=Makefile
+HEADER=rc2_locl.h rc2.h
+INCLUDES=
+INSTALLTOP=/usr/local/ssl
+INSTALL_PREFIX=
+LIB=../../libcrypto.a
+LIBOBJ=rc2_ecb.o rc2_skey.o rc2_cbc.o rc2cfb64.o rc2ofb64.o
+LIBSRC=rc2_ecb.c rc2_skey.c rc2_cbc.c rc2cfb64.c rc2ofb64.c
+MAKE=make -f Makefile.ssl
+MAKEDEPEND=../../util/domd ../..
+MAKEFILE=Makefile.ssl
+OPENSSLDIR=/usr/local/ssl
+SRC=rc2_ecb.c rc2_skey.c rc2_cbc.c rc2cfb64.c rc2ofb64.c
+TEST=rc2test.c
+TOP=../..
+RELATIVE_DIRECTORY=
+RELATIVE_DIRECTORY=crypto/rc4
+ALL=Makefile rc4_skey.c rc4_enc.c rc4.h rc4_locl.h
+APPS=
+AR=ar r
+CC=cc
+CFLAG=-g
+CFLAGS= -g
+DIR=rc4
+EXHEADER=rc4.h
+GENERAL=Makefile
+HEADER=rc4.h rc4_locl.h
+INCLUDES=
+INSTALLTOP=/usr/local/ssl
+INSTALL_PREFIX=
+LIB=../../libcrypto.a
+LIBOBJ=rc4_skey.o rc4_enc.o
+LIBSRC=rc4_skey.c rc4_enc.c
+MAKE=make -f Makefile.ssl
+MAKEDEPEND=../../util/domd ../..
+MAKEFILE=Makefile.ssl
+OPENSSLDIR=/usr/local/ssl
+RC4_ENC=rc4_enc.o
+SRC=rc4_skey.c rc4_enc.c
+TEST=rc4test.c
+TOP=../..
+RELATIVE_DIRECTORY=
+RELATIVE_DIRECTORY=crypto/rc5
+ALL=Makefile rc5_skey.c rc5_ecb.c rc5_enc.c rc5cfb64.c rc5ofb64.c rc5_locl.h rc5.h
+APPS=
+AR=ar r
+CC=cc
+CFLAG=-g
+CFLAGS= -g
+CPP=cc -E
+DIR=rc5
+EXHEADER=rc5.h
+GENERAL=Makefile
+HEADER=rc5_locl.h rc5.h
+INCLUDES=
+INSTALLTOP=/usr/local/ssl
+INSTALL_PREFIX=
+LIB=../../libcrypto.a
+LIBOBJ=rc5_skey.o rc5_ecb.o rc5_enc.o rc5cfb64.o rc5ofb64.o
+LIBSRC=rc5_skey.c rc5_ecb.c rc5_enc.c rc5cfb64.c rc5ofb64.c
+MAKE=make -f Makefile.ssl
+MAKEDEPEND=../../util/domd ../..
+MAKEFILE=Makefile.ssl
+OPENSSLDIR=/usr/local/ssl
+RC5_ENC=rc5_enc.o
+SRC=rc5_skey.c rc5_ecb.c rc5_enc.c rc5cfb64.c rc5ofb64.c
+TEST=rc5test.c
+TOP=../..
+RELATIVE_DIRECTORY=
+RELATIVE_DIRECTORY=crypto/idea
+ALL=Makefile i_cbc.c i_cfb64.c i_ofb64.c i_ecb.c i_skey.c idea_lcl.h idea.h
+APPS=
+AR=ar r
+CC=cc
+CFLAG=-g
+CFLAGS= -g
+DIR=idea
+EXHEADER=idea.h
+GENERAL=Makefile
+HEADER=idea_lcl.h idea.h
+INCLUDES=
+INSTALLTOP=/usr/local/ssl
+INSTALL_PREFIX=
+LIB=../../libcrypto.a
+LIBOBJ=i_cbc.o i_cfb64.o i_ofb64.o i_ecb.o i_skey.o
+LIBSRC=i_cbc.c i_cfb64.c i_ofb64.c i_ecb.c i_skey.c
+MAKE=make -f Makefile.ssl
+MAKEDEPEND=../../util/domd ../..
+MAKEFILE=Makefile.ssl
+OPENSSLDIR=/usr/local/ssl
+SRC=i_cbc.c i_cfb64.c i_ofb64.c i_ecb.c i_skey.c
+TEST=ideatest.c
+TOP=../..
+RELATIVE_DIRECTORY=
+RELATIVE_DIRECTORY=crypto/bf
+ALL=Makefile bf_skey.c bf_ecb.c bf_enc.c bf_cfb64.c bf_ofb64.c bf_pi.h bf_locl.h 
+blowfish.h
+APPS=
+AR=ar r
+BF_ENC=bf_enc.o
+CC=cc
+CFLAG=-g
+CFLAGS= -g
+CPP=cc -E
+DIR=bf
+EXHEADER=blowfish.h
+GENERAL=Makefile
+HEADER=bf_pi.h bf_locl.h blowfish.h
+INCLUDES=
+INSTALLTOP=/usr/local/ssl
+INSTALL_PREFIX=
+LIB=../../libcrypto.a
+LIBOBJ=bf_skey.o bf_ecb.o bf_enc.o bf_cfb64.o bf_ofb64.o
+LIBSRC=bf_skey.c bf_ecb.c bf_enc.c bf_cfb64.c bf_ofb64.c
+MAKE=make -f Makefile.ssl
+MAKEDEPEND=../../util/domd ../..
+MAKEFILE=Makefile.ssl
+OPENSSLDIR=/usr/local/ssl
+SRC=bf_skey.c bf_ecb.c bf_enc.c bf_cfb64.c bf_ofb64.c
+TEST=bftest.c
+TOP=../..
+RELATIVE_DIRECTORY=
+RELATIVE_DIRECTORY=crypto/cast
+ALL=Makefile c_skey.c c_ecb.c c_enc.c c_cfb64.c c_ofb64.c cast_s.h cast_lcl.h cast.h
+APPS=
+AR=ar r
+CAST_ENC=c_enc.o
+CC=cc
+CFLAG=-g
+CFLAGS= -g
+CPP=cc -E
+DIR=cast
+EXHEADER=cast.h
+GENERAL=Makefile
+HEADER=cast_s.h cast_lcl.h cast.h
+INCLUDES=
+INSTALLTOP=/usr/local/ssl
+INSTALL_PREFIX=
+LIB=../../libcrypto.a
+LIBOBJ=c_skey.o c_ecb.o c_enc.o c_cfb64.o c_ofb64.o
+LIBSRC=c_skey.c c_ecb.c c_enc.c c_cfb64.c c_ofb64.c
+MAKE=make -f Makefile.ssl
+MAKEDEPEND=../../util/domd ../..
+MAKEFILE=Makefile.ssl
+OPENSSLDIR=/usr/local/ssl
+SRC=c_skey.c c_ecb.c c_enc.c c_cfb64.c c_ofb64.c
+TEST=casttest.c
+TOP=../..
+RELATIVE_DIRECTORY=
+RELATIVE_DIRECTORY=crypto/bn
+ALL=Makefile bn_add.c bn_div.c bn_exp.c bn_lib.c bn_ctx.c bn_mul.c bn_print.c 
+bn_rand.c bn_shift.c bn_word.c bn_blind.c bn_gcd.c bn_prime.c bn_err.c bn_sqr.c 
+bn_asm.c bn_recp.c bn_mont.c bn_mpi.c bn_exp2.c bn_lcl.h bn_prime.h bn.h
+APPS=
+AR=ar r
+AS=cc -c
+ASFLAGS=-I.. -I../../include -g
+BN_ASM=bn_asm.o
+CC=cc
+CFLAG=-g
+CFLAGS=-I.. -I../../include -g
+DIR=bn
+EXHEADER=bn.h
+GENERAL=Makefile
+HEADER=bn_lcl.h bn_prime.h bn.h
+INCLUDES=-I.. -I../../include
+INSTALLTOP=/usr/local/ssl
+INSTALL_PREFIX=
+LIB=../../libcrypto.a
+LIBOBJ=bn_add.o bn_div.o bn_exp.o bn_lib.o bn_ctx.o bn_mul.o bn_print.o bn_rand.o 
+bn_shift.o bn_word.o bn_blind.o bn_gcd.o bn_prime.o bn_err.o bn_sqr.o bn_asm.o 
+bn_recp.o bn_mont.o bn_mpi.o bn_exp2.o
+LIBSRC=bn_add.c bn_div.c bn_exp.c bn_lib.c bn_ctx.c bn_mul.c bn_print.c bn_rand.c 
+bn_shift.c bn_word.c bn_blind.c bn_gcd.c bn_prime.c bn_err.c bn_sqr.c bn_asm.c 
+bn_recp.c bn_mont.c bn_mpi.c bn_exp2.c
+MAKE=make -f Makefile.ssl
+MAKEDEPEND=../../util/domd ../..
+MAKEFILE=Makefile.ssl
+OPENSSLDIR=/usr/local/ssl
+SRC=bn_add.c bn_div.c bn_exp.c bn_lib.c bn_ctx.c bn_mul.c bn_print.c bn_rand.c 
+bn_shift.c bn_word.c bn_blind.c bn_gcd.c bn_prime.c bn_err.c bn_sqr.c bn_asm.c 
+bn_recp.c bn_mont.c bn_mpi.c bn_exp2.c
+TEST=bntest.c exptest.c
+TOP=../..
+RELATIVE_DIRECTORY=
+RELATIVE_DIRECTORY=crypto/rsa
+ALL=Makefile rsa_eay.c rsa_gen.c rsa_lib.c rsa_sign.c rsa_saos.c rsa_err.c rsa_pk1.c 
+rsa_ssl.c rsa_none.c rsa_oaep.c rsa_chk.c rsa_null.c rsa.h
+APPS=
+AR=ar r
+CC=cc
+CFLAG=-g
+CFLAGS=-I.. -I../../include -g
+DIR=rsa
+EXHEADER=rsa.h
+GENERAL=Makefile
+HEADER=rsa.h
+INCLUDES=-I.. -I../../include
+INSTALLTOP=/usr/local/ssl
+INSTALL_PREFIX=
+LIB=../../libcrypto.a
+LIBOBJ=rsa_eay.o rsa_gen.o rsa_lib.o rsa_sign.o rsa_saos.o rsa_err.o rsa_pk1.o 
+rsa_ssl.o rsa_none.o rsa_oaep.o rsa_chk.o rsa_null.o
+LIBSRC=rsa_eay.c rsa_gen.c rsa_lib.c rsa_sign.c rsa_saos.c rsa_err.c rsa_pk1.c 
+rsa_ssl.c rsa_none.c rsa_oaep.c rsa_chk.c rsa_null.c
+MAKE=make -f Makefile.ssl
+MAKEDEPEND=../../util/domd ../..
+MAKEFILE=Makefile.ssl
+OPENSSLDIR=/usr/local/ssl
+SRC=rsa_eay.c rsa_gen.c rsa_lib.c rsa_sign.c rsa_saos.c rsa_err.c rsa_pk1.c rsa_ssl.c 
+rsa_none.c rsa_oaep.c rsa_chk.c rsa_null.c
+TEST=rsa_test.c
+TOP=../..
+RELATIVE_DIRECTORY=
+RELATIVE_DIRECTORY=crypto/dsa
+ALL=Makefile dsa_gen.c dsa_key.c dsa_lib.c dsa_asn1.c dsa_vrf.c dsa_sign.c dsa_err.c 
+dsa_ossl.c dsa.h
+APPS=
+AR=ar r
+CC=cc
+CFLAG=-g
+CFLAGS=-I.. -I../../include -g
+DIR=dsa
+EXHEADER=dsa.h
+GENERAL=Makefile
+HEADER=dsa.h
+INCLUDES=-I.. -I../../include
+INSTALLTOP=/usr/local/ssl
+INSTALL_PREFIX=
+LIB=../../libcrypto.a
+LIBOBJ=dsa_gen.o dsa_key.o dsa_lib.o dsa_asn1.o dsa_vrf.o dsa_sign.o dsa_err.o 
+dsa_ossl.o
+LIBSRC=dsa_gen.c dsa_key.c dsa_lib.c dsa_asn1.c dsa_vrf.c dsa_sign.c dsa_err.c 
+dsa_ossl.c
+MAKE=make -f Makefile.ssl
+MAKEDEPEND=../../util/domd ../..
+MAKEFILE=Makefile.ssl
+OPENSSLDIR=/usr/local/ssl
+SRC=dsa_gen.c dsa_key.c dsa_lib.c dsa_asn1.c dsa_vrf.c dsa_sign.c dsa_err.c dsa_ossl.c
+TEST=dsatest.c
+TOP=../..
+RELATIVE_DIRECTORY=
+RELATIVE_DIRECTORY=crypto/dh
+ALL=Makefile dh_gen.c dh_key.c dh_lib.c dh_check.c dh_err.c dh.h
+APPS=
+AR=ar r
+CC=cc
+CFLAG=-g
+CFLAGS=-I.. -I../../include -g
+DIR=dh
+EXHEADER=dh.h
+GENERAL=Makefile
+HEADER=dh.h
+INCLUDES=-I.. -I../../include
+INSTALLTOP=/usr/local/ssl
+INSTALL_PREFIX=
+LIB=../../libcrypto.a
+LIBOBJ=dh_gen.o dh_key.o dh_lib.o dh_check.o dh_err.o
+LIBSRC=dh_gen.c dh_key.c dh_lib.c dh_check.c dh_err.c
+MAKE=make -f Makefile.ssl
+MAKEDEPEND=../../util/domd ../..
+MAKEFILE=Makefile.ssl
+OPENSSLDIR=/usr/local/ssl
+SRC=dh_gen.c dh_key.c dh_lib.c dh_check.c dh_err.c
+TEST=dhtest.c
+TOP=../..
+RELATIVE_DIRECTORY=
+RELATIVE_DIRECTORY=crypto/buffer
+ALL=Makefile buffer.c buf_err.c buffer.h
+APPS=
+AR=ar r
+CC=cc
+CFLAG=-g
+CFLAGS=-I.. -I../../include -g
+DIR=buffer
+EXHEADER=buffer.h
+GENERAL=Makefile
+HEADER=buffer.h
+INCLUDES=-I.. -I../../include
+INSTALLTOP=/usr/local/ssl
+INSTALL_PREFIX=
+LIB=../../libcrypto.a
+LIBOBJ=buffer.o buf_err.o
+LIBSRC=buffer.c buf_err.c
+MAKE=make -f Makefile.ssl
+MAKEDEPEND=../../util/domd ../..
+MAKEFILE=Makefile.ssl
+OPENSSLDIR=/usr/local/ssl
+SRC=buffer.c buf_err.c
+TEST=
+TOP=../..
+RELATIVE_DIRECTORY=
+RELATIVE_DIRECTORY=crypto/bio
+ALL=Makefile bio_lib.c bio_cb.c bio_err.c bss_mem.c bss_null.c bss_fd.c bss_file.c 
+bss_sock.c bss_conn.c bf_null.c bf_buff.c b_print.c b_dump.c b_sock.c bss_acpt.c 
+bf_nbio.c bss_log.c bss_bio.c bss_file.c bio.h
+APPS=
+AR=ar r
+CC=cc
+CFLAG=-g
+CFLAGS=-I.. -I../../include -g
+DIR=bio
+EXHEADER=bio.h
+GENERAL=Makefile
+HEADER=bss_file.c bio.h
+INCLUDES=-I.. -I../../include
+INSTALLTOP=/usr/local/ssl
+INSTALL_PREFIX=
+LIB=../../libcrypto.a
+LIBOBJ=bio_lib.o bio_cb.o bio_err.o bss_mem.o bss_null.o bss_fd.o bss_file.o 
+bss_sock.o bss_conn.o bf_null.o bf_buff.o b_print.o b_dump.o b_sock.o bss_acpt.o 
+bf_nbio.o bss_log.o bss_bio.o
+LIBSRC=bio_lib.c bio_cb.c bio_err.c bss_mem.c bss_null.c bss_fd.c bss_file.c 
+bss_sock.c bss_conn.c bf_null.c bf_buff.c b_print.c b_dump.c b_sock.c bss_acpt.c 
+bf_nbio.c bss_log.c bss_bio.c
+MAKE=make -f Makefile.ssl
+MAKEDEPEND=../../util/domd ../..
+MAKEFILE=Makefile.ssl
+OPENSSLDIR=/usr/local/ssl
+SRC=bio_lib.c bio_cb.c bio_err.c bss_mem.c bss_null.c bss_fd.c bss_file.c bss_sock.c 
+bss_conn.c bf_null.c bf_buff.c b_print.c b_dump.c b_sock.c bss_acpt.c bf_nbio.c 
+bss_log.c bss_bio.c
+TEST=
+TOP=../..
+RELATIVE_DIRECTORY=
+RELATIVE_DIRECTORY=crypto/stack
+ALL=Makefile stack.c stack.h safestack.h
+APPS=
+AR=ar r
+CC=cc
+CFLAG=-g
+CFLAGS= -g
+DIR=stack
+EXHEADER=stack.h safestack.h
+GENERAL=Makefile
+HEADER=stack.h safestack.h
+INCLUDES=
+INSTALLTOP=/usr/local/ssl
+INSTALL_PREFIX=
+LIB=../../libcrypto.a
+LIBOBJ=stack.o
+LIBSRC=stack.c
+MAKE=make -f Makefile.ssl
+MAKEDEPEND=../../util/domd ../..
+MAKEFILE=Makefile.ssl
+OPENSSLDIR=/usr/local/ssl
+SRC=stack.c
+TEST=
+TOP=../..
+RELATIVE_DIRECTORY=
+RELATIVE_DIRECTORY=crypto/lhash
+ALL=Makefile lhash.c lh_stats.c lhash.h
+APPS=
+AR=ar r
+CC=cc
+CFLAG=-g
+CFLAGS= -g
+DIR=lhash
+EXHEADER=lhash.h
+GENERAL=Makefile
+HEADER=lhash.h
+INCLUDES=
+INSTALLTOP=/usr/local/ssl
+INSTALL_PREFIX=
+LIB=../../libcrypto.a
+LIBOBJ=lhash.o lh_stats.o
+LIBSRC=lhash.c lh_stats.c
+MAKE=make -f Makefile.ssl
+MAKEDEPEND=../../util/domd ../..
+MAKEFILE=Makefile.ssl
+OPENSSLDIR=/usr/local/ssl
+SRC=lhash.c lh_stats.c
+TEST=
+TOP=../..
+RELATIVE_DIRECTORY=
+RELATIVE_DIRECTORY=crypto/rand
+ALL=Makefile md_rand.c randfile.c rand_lib.c rand_err.c rand_egd.c rand.h
+APPS=
+AR=ar r
+CC=cc
+CFLAG=-g
+CFLAGS= -g
+DIR=rand
+EXHEADER=rand.h
+GENERAL=Makefile
+HEADER=rand.h
+INCLUDES=
+INSTALLTOP=/usr/local/ssl
+INSTALL_PREFIX=
+LIB=../../libcrypto.a
+LIBOBJ=md_rand.o randfile.o rand_lib.o rand_err.o rand_egd.o
+LIBSRC=md_rand.c randfile.c rand_lib.c rand_err.c rand_egd.c
+MAKE=make -f Makefile.ssl
+MAKEDEPEND=../../util/domd ../..
+MAKEFILE=Makefile.ssl
+OPENSSLDIR=/usr/local/ssl
+SRC=md_rand.c randfile.c rand_lib.c rand_err.c rand_egd.c
+TEST=randtest.c
+TOP=../..
+RELATIVE_DIRECTORY=
+RELATIVE_DIRECTORY=crypto/err
+ALL=Makefile err.c err_all.c err_prn.c err.h
+APPS=
+AR=ar r
+CC=cc
+CFLAG=-g
+CFLAGS=-I.. -I../../include -g
+DIR=err
+EXHEADER=err.h
+GENERAL=Makefile
+HEADER=err.h
+INCLUDES=-I.. -I../../include
+INSTALLTOP=/usr/local/ssl
+INSTALL_PREFIX=
+LIB=../../libcrypto.a
+LIBOBJ=err.o err_all.o err_prn.o
+LIBSRC=err.c err_all.c err_prn.c
+MAKE=make -f Makefile.ssl
+MAKEDEPEND=../../util/domd ../..
+MAKEFILE=Makefile.ssl
+OPENSSLDIR=/usr/local/ssl
+SRC=err.c err_all.c err_prn.c
+TEST=
+TOP=../..
+RELATIVE_DIRECTORY=
+RELATIVE_DIRECTORY=crypto/objects
+ALL=Makefile README o_names.c obj_dat.c obj_lib.c obj_err.c objects.h obj_dat.h
+APPS=
+AR=ar r
+CC=cc
+CFLAG=-g
+CFLAGS=-I.. -I../../include -g
+DIR=objects
+EXHEADER=objects.h
+GENERAL=Makefile README
+HEADER=objects.h obj_dat.h
+INCLUDES=-I.. -I../../include
+INSTALLTOP=/usr/local/ssl
+INSTALL_PREFIX=
+LIB=../../libcrypto.a
+LIBOBJ=o_names.o obj_dat.o obj_lib.o obj_err.o
+LIBSRC=o_names.c obj_dat.c obj_lib.c obj_err.c
+MAKE=make -f Makefile.ssl
+MAKEDEPEND=../../util/domd ../..
+MAKEFILE=Makefile.ssl
+OPENSSLDIR=/usr/local/ssl
+SRC=o_names.c obj_dat.c obj_lib.c obj_err.c
+TEST=
+TOP=../..
+RELATIVE_DIRECTORY=
+RELATIVE_DIRECTORY=crypto/evp
+ALL=Makefile encode.c digest.c evp_enc.c evp_key.c e_ecb_d.c e_cbc_d.c e_cfb_d.c 
+e_ofb_d.c e_ecb_i.c e_cbc_i.c e_cfb_i.c e_ofb_i.c e_ecb_3d.c e_cbc_3d.c e_rc4.c 
+names.c e_cfb_3d.c e_ofb_3d.c e_xcbc_d.c e_ecb_r2.c e_cbc_r2.c e_cfb_r2.c e_ofb_r2.c 
+e_ecb_bf.c e_cbc_bf.c e_cfb_bf.c e_ofb_bf.c e_ecb_c.c e_cbc_c.c e_cfb_c.c e_ofb_c.c 
+e_ecb_r5.c e_cbc_r5.c e_cfb_r5.c e_ofb_r5.c m_null.c m_md2.c m_md5.c m_sha.c m_sha1.c 
+m_dss.c m_dss1.c m_mdc2.c m_ripemd.c p_open.c p_seal.c p_sign.c p_verify.c p_lib.c 
+p_enc.c p_dec.c bio_md.c bio_b64.c bio_enc.c evp_err.c e_null.c c_all.c c_allc.c 
+c_alld.c evp_lib.c bio_ok.c evp_pkey.c evp_pbe.c p5_crpt.c p5_crpt2.c evp.h
+APPS=
+AR=ar r
+CC=cc
+CFLAG=-g
+CFLAGS=-I.. -I../../include -g
+DIR=evp
+EXHEADER=evp.h
+GENERAL=Makefile
+HEADER=evp.h
+INCLUDES=-I.. -I../../include
+INSTALLTOP=/usr/local/ssl
+INSTALL_PREFIX=
+LIB=../../libcrypto.a
+LIBOBJ=encode.o digest.o evp_enc.o evp_key.o e_ecb_d.o e_cbc_d.o e_cfb_d.o e_ofb_d.o 
+e_ecb_i.o e_cbc_i.o e_cfb_i.o e_ofb_i.o e_ecb_3d.o e_cbc_3d.o e_rc4.o names.o 
+e_cfb_3d.o e_ofb_3d.o e_xcbc_d.o e_ecb_r2.o e_cbc_r2.o e_cfb_r2.o e_ofb_r2.o 
+e_ecb_bf.o e_cbc_bf.o e_cfb_bf.o e_ofb_bf.o e_ecb_c.o e_cbc_c.o e_cfb_c.o e_ofb_c.o 
+e_ecb_r5.o e_cbc_r5.o e_cfb_r5.o e_ofb_r5.o m_null.o m_md2.o m_md5.o m_sha.o m_sha1.o 
+m_dss.o m_dss1.o m_mdc2.o m_ripemd.o p_open.o p_seal.o p_sign.o p_verify.o p_lib.o 
+p_enc.o p_dec.o bio_md.o bio_b64.o bio_enc.o evp_err.o e_null.o c_all.o c_allc.o 
+c_alld.o evp_lib.o bio_ok.o evp_pkey.o evp_pbe.o p5_crpt.o p5_crpt2.o
+LIBSRC=encode.c digest.c evp_enc.c evp_key.c e_ecb_d.c e_cbc_d.c e_cfb_d.c e_ofb_d.c 
+e_ecb_i.c e_cbc_i.c e_cfb_i.c e_ofb_i.c e_ecb_3d.c e_cbc_3d.c e_rc4.c names.c 
+e_cfb_3d.c e_ofb_3d.c e_xcbc_d.c e_ecb_r2.c e_cbc_r2.c e_cfb_r2.c e_ofb_r2.c 
+e_ecb_bf.c e_cbc_bf.c e_cfb_bf.c e_ofb_bf.c e_ecb_c.c e_cbc_c.c e_cfb_c.c e_ofb_c.c 
+e_ecb_r5.c e_cbc_r5.c e_cfb_r5.c e_ofb_r5.c m_null.c m_md2.c m_md5.c m_sha.c m_sha1.c 
+m_dss.c m_dss1.c m_mdc2.c m_ripemd.c p_open.c p_seal.c p_sign.c p_verify.c p_lib.c 
+p_enc.c p_dec.c bio_md.c bio_b64.c bio_enc.c evp_err.c e_null.c c_all.c c_allc.c 
+c_alld.c evp_lib.c bio_ok.c evp_pkey.c evp_pbe.c p5_crpt.c p5_crpt2.c
+MAKE=make -f Makefile.ssl
+MAKEDEPEND=../../util/domd ../..
+MAKEFILE=Makefile.ssl
+OPENSSLDIR=/usr/local/ssl
+SRC=encode.c digest.c evp_enc.c evp_key.c e_ecb_d.c e_cbc_d.c e_cfb_d.c e_ofb_d.c 
+e_ecb_i.c e_cbc_i.c e_cfb_i.c e_ofb_i.c e_ecb_3d.c e_cbc_3d.c e_rc4.c names.c 
+e_cfb_3d.c e_ofb_3d.c e_xcbc_d.c e_ecb_r2.c e_cbc_r2.c e_cfb_r2.c e_ofb_r2.c 
+e_ecb_bf.c e_cbc_bf.c e_cfb_bf.c e_ofb_bf.c e_ecb_c.c e_cbc_c.c e_cfb_c.c e_ofb_c.c 
+e_ecb_r5.c e_cbc_r5.c e_cfb_r5.c e_ofb_r5.c m_null.c m_md2.c m_md5.c m_sha.c m_sha1.c 
+m_dss.c m_dss1.c m_mdc2.c m_ripemd.c p_open.c p_seal.c p_sign.c p_verify.c p_lib.c 
+p_enc.c p_dec.c bio_md.c bio_b64.c bio_enc.c evp_err.c e_null.c c_all.c c_allc.c 
+c_alld.c evp_lib.c bio_ok.c evp_pkey.c evp_pbe.c p5_crpt.c p5_crpt2.c
+TEST=
+TOP=../..
+RELATIVE_DIRECTORY=
+RELATIVE_DIRECTORY=crypto/asn1
+ALL=Makefile README a_object.c a_bitstr.c a_utctm.c a_gentm.c a_time.c a_int.c 
+a_octet.c a_null.c a_print.c a_type.c a_set.c a_dup.c a_d2i_fp.c a_i2d_fp.c a_bmp.c 
+a_enum.c a_vis.c a_utf8.c a_sign.c a_digest.c a_verify.c a_mbstr.c x_algor.c x_val.c 
+x_pubkey.c x_sig.c x_req.c x_attrib.c x_name.c x_cinf.c x_x509.c x_x509a.c x_crl.c 
+x_info.c x_spki.c nsseq.c d2i_r_pr.c i2d_r_pr.c d2i_r_pu.c i2d_r_pu.c d2i_s_pr.c 
+i2d_s_pr.c d2i_s_pu.c i2d_s_pu.c d2i_pu.c d2i_pr.c i2d_pu.c i2d_pr.c t_req.c t_x509.c 
+t_x509a.c t_crl.c t_pkey.c t_spki.c t_bitst.c p7_i_s.c p7_signi.c p7_signd.c 
+p7_recip.c p7_enc_c.c p7_evp.c p7_dgst.c p7_s_e.c p7_enc.c p7_lib.c f_int.c 
+f_string.c i2d_dhp.c i2d_dsap.c d2i_dhp.c d2i_dsap.c n_pkey.c f_enum.c a_hdr.c 
+x_pkey.c a_bool.c x_exten.c asn1_par.c asn1_lib.c asn1_err.c a_meth.c a_bytes.c 
+a_strnid.c evp_asn1.c asn_pack.c p5_pbe.c p5_pbev2.c p8_pkey.c asn1.h asn1_mac.h
+APPS=
+AR=ar r
+CC=cc
+CFLAG=-g
+CFLAGS=-I.. -I../../include -g
+DIR=asn1
+EXHEADER=asn1.h asn1_mac.h
+GENERAL=Makefile README
+HEADER=asn1.h asn1_mac.h
+INCLUDES=-I.. -I../../include
+INSTALLTOP=/usr/local/ssl
+INSTALL_PREFIX=
+LIB=../../libcrypto.a
+LIBOBJ=a_object.o a_bitstr.o a_utctm.o a_gentm.o a_time.o a_int.o a_octet.o a_null.o 
+a_print.o a_type.o a_set.o a_dup.o a_d2i_fp.o a_i2d_fp.o a_bmp.o a_enum.o a_vis.o 
+a_utf8.o a_sign.o a_digest.o a_verify.o a_mbstr.o x_algor.o x_val.o x_pubkey.o 
+x_sig.o x_req.o x_attrib.o x_name.o x_cinf.o x_x509.o x_x509a.o x_crl.o x_info.o 
+x_spki.o nsseq.o d2i_r_pr.o i2d_r_pr.o d2i_r_pu.o i2d_r_pu.o d2i_s_pr.o i2d_s_pr.o 
+d2i_s_pu.o i2d_s_pu.o d2i_pu.o d2i_pr.o i2d_pu.o i2d_pr.o t_req.o t_x509.o t_x509a.o 
+t_crl.o t_pkey.o t_spki.o t_bitst.o p7_i_s.o p7_signi.o p7_signd.o p7_recip.o 
+p7_enc_c.o p7_evp.o p7_dgst.o p7_s_e.o p7_enc.o p7_lib.o f_int.o f_string.o i2d_dhp.o 
+i2d_dsap.o d2i_dhp.o d2i_dsap.o n_pkey.o f_enum.o a_hdr.o x_pkey.o a_bool.o x_exten.o 
+asn1_par.o asn1_lib.o asn1_err.o a_meth.o a_bytes.o a_strnid.o evp_asn1.o asn_pack.o 
+p5_pbe.o p5_pbev2.o p8_pkey.o
+LIBSRC=a_object.c a_bitstr.c a_utctm.c a_gentm.c a_time.c a_int.c a_octet.c a_null.c 
+a_print.c a_type.c a_set.c a_dup.c a_d2i_fp.c a_i2d_fp.c a_bmp.c a_enum.c a_vis.c 
+a_utf8.c a_sign.c a_digest.c a_verify.c a_mbstr.c x_algor.c x_val.c x_pubkey.c 
+x_sig.c x_req.c x_attrib.c x_name.c x_cinf.c x_x509.c x_x509a.c x_crl.c x_info.c 
+x_spki.c nsseq.c d2i_r_pr.c i2d_r_pr.c d2i_r_pu.c i2d_r_pu.c d2i_s_pr.c i2d_s_pr.c 
+d2i_s_pu.c i2d_s_pu.c d2i_pu.c d2i_pr.c i2d_pu.c i2d_pr.c t_req.c t_x509.c t_x509a.c 
+t_crl.c t_pkey.c t_spki.c t_bitst.c p7_i_s.c p7_signi.c p7_signd.c p7_recip.c 
+p7_enc_c.c p7_evp.c p7_dgst.c p7_s_e.c p7_enc.c p7_lib.c f_int.c f_string.c i2d_dhp.c 
+i2d_dsap.c d2i_dhp.c d2i_dsap.c n_pkey.c f_enum.c a_hdr.c x_pkey.c a_bool.c x_exten.c 
+asn1_par.c asn1_lib.c asn1_err.c a_meth.c a_bytes.c a_strnid.c evp_asn1.c asn_pack.c 
+p5_pbe.c p5_pbev2.c p8_pkey.c
+MAKE=make -f Makefile.ssl
+MAKEDEPEND=../../util/domd ../..
+MAKEFILE=Makefile.ssl
+OPENSSLDIR=/usr/local/ssl
+SRC=a_object.c a_bitstr.c a_utctm.c a_gentm.c a_time.c a_int.c a_octet.c a_null.c 
+a_print.c a_type.c a_set.c a_dup.c a_d2i_fp.c a_i2d_fp.c a_bmp.c a_enum.c a_vis.c 
+a_utf8.c a_sign.c a_digest.c a_verify.c a_mbstr.c x_algor.c x_val.c x_pubkey.c 
+x_sig.c x_req.c x_attrib.c x_name.c x_cinf.c x_x509.c x_x509a.c x_crl.c x_info.c 
+x_spki.c nsseq.c d2i_r_pr.c i2d_r_pr.c d2i_r_pu.c i2d_r_pu.c d2i_s_pr.c i2d_s_pr.c 
+d2i_s_pu.c i2d_s_pu.c d2i_pu.c d2i_pr.c i2d_pu.c i2d_pr.c t_req.c t_x509.c t_x509a.c 
+t_crl.c t_pkey.c t_spki.c t_bitst.c p7_i_s.c p7_signi.c p7_signd.c p7_recip.c 
+p7_enc_c.c p7_evp.c p7_dgst.c p7_s_e.c p7_enc.c p7_lib.c f_int.c f_string.c i2d_dhp.c 
+i2d_dsap.c d2i_dhp.c d2i_dsap.c n_pkey.c f_enum.c a_hdr.c x_pkey.c a_bool.c x_exten.c 
+asn1_par.c asn1_lib.c asn1_err.c a_meth.c a_bytes.c a_strnid.c evp_asn1.c asn_pack.c 
+p5_pbe.c p5_pbev2.c p8_pkey.c
+TEST=
+TOP=../..
+RELATIVE_DIRECTORY=
+RELATIVE_DIRECTORY=crypto/pem
+ALL=Makefile pem_sign.c pem_seal.c pem_info.c pem_lib.c pem_all.c pem_err.c pem.h 
+pem2.h
+APPS=
+AR=ar r
+CC=cc
+CFLAG=-g
+CFLAGS=-I.. -I../../include -g
+DIR=pem
+EXHEADER=pem.h pem2.h
+GENERAL=Makefile
+HEADER=pem.h pem2.h
+INCLUDES=-I.. -I../../include
+INSTALLTOP=/usr/local/ssl
+INSTALL_PREFIX=
+LIB=../../libcrypto.a
+LIBOBJ=pem_sign.o pem_seal.o pem_info.o pem_lib.o pem_all.o pem_err.o
+LIBSRC=pem_sign.c pem_seal.c pem_info.c pem_lib.c pem_all.c pem_err.c
+MAKE=make -f Makefile.ssl
+MAKEDEPEND=../../util/domd ../..
+MAKEFILE=Makefile.ssl
+OPENSSLDIR=/usr/local/ssl
+SRC=pem_sign.c pem_seal.c pem_info.c pem_lib.c pem_all.c pem_err.c
+TEST=
+TOP=../..
+RELATIVE_DIRECTORY=
+RELATIVE_DIRECTORY=crypto/x509
+ALL=Makefile README x509_def.c x509_d2.c x509_r2x.c x509_cmp.c x509_obj.c x509_req.c 
+x509spki.c x509_vfy.c x509_set.c x509rset.c x509_err.c x509name.c x509_v3.c 
+x509_ext.c x509_att.c x509type.c x509_lu.c x_all.c x509_txt.c x509_trs.c by_file.c 
+by_dir.c x509.h x509_vfy.h
+APPS=
+AR=ar r
+CC=cc
+CFLAG=-g
+CFLAGS=-I.. -I../../include -g
+DIR=x509
+EXHEADER=x509.h x509_vfy.h
+GENERAL=Makefile README
+HEADER=x509.h x509_vfy.h
+INCLUDES=-I.. -I../../include
+INSTALLTOP=/usr/local/ssl
+INSTALL_PREFIX=
+LIB=../../libcrypto.a
+LIBOBJ=x509_def.o x509_d2.o x509_r2x.o x509_cmp.o x509_obj.o x509_req.o x509spki.o 
+x509_vfy.o x509_set.o x509rset.o x509_err.o x509name.o x509_v3.o x509_ext.o 
+x509_att.o x509type.o x509_lu.o x_all.o x509_txt.o x509_trs.o by_file.o by_dir.o
+LIBSRC=x509_def.c x509_d2.c x509_r2x.c x509_cmp.c x509_obj.c x509_req.c x509spki.c 
+x509_vfy.c x509_set.c x509rset.c x509_err.c x509name.c x509_v3.c x509_ext.c 
+x509_att.c x509type.c x509_lu.c x_all.c x509_txt.c x509_trs.c by_file.c by_dir.c
+MAKE=make -f Makefile.ssl
+MAKEDEPEND=../../util/domd ../..
+MAKEFILE=Makefile.ssl
+OPENSSLDIR=/usr/local/ssl
+SRC=x509_def.c x509_d2.c x509_r2x.c x509_cmp.c x509_obj.c x509_req.c x509spki.c 
+x509_vfy.c x509_set.c x509rset.c x509_err.c x509name.c x509_v3.c x509_ext.c 
+x509_att.c x509type.c x509_lu.c x_all.c x509_txt.c x509_trs.c by_file.c by_dir.c
+TEST=
+TOP=../..
+RELATIVE_DIRECTORY=
+RELATIVE_DIRECTORY=crypto/x509v3
+ALL=Makefile README v3_bcons.c v3_bitst.c v3_conf.c v3_extku.c v3_ia5.c v3_lib.c 
+v3_prn.c v3_utl.c v3err.c v3_genn.c v3_alt.c v3_skey.c v3_akey.c v3_pku.c v3_int.c 
+v3_enum.c v3_sxnet.c v3_cpols.c v3_crld.c v3_purp.c v3_info.c x509v3.h
+APPS=
+AR=ar r
+CC=cc
+CFLAG=-g
+CFLAGS=-I.. -I../../include -g
+DIR=x509v3
+EXHEADER=x509v3.h
+GENERAL=Makefile README
+HEADER=x509v3.h
+INCLUDES=-I.. -I../../include
+INSTALLTOP=/usr/local/ssl
+INSTALL_PREFIX=
+LIB=../../libcrypto.a
+LIBOBJ=v3_bcons.o v3_bitst.o v3_conf.o v3_extku.o v3_ia5.o v3_lib.o v3_prn.o v3_utl.o 
+v3err.o v3_genn.o v3_alt.o v3_skey.o v3_akey.o v3_pku.o v3_int.o v3_enum.o v3_sxnet.o 
+v3_cpols.o v3_crld.o v3_purp.o v3_info.o
+LIBSRC=v3_bcons.c v3_bitst.c v3_conf.c v3_extku.c v3_ia5.c v3_lib.c v3_prn.c v3_utl.c 
+v3err.c v3_genn.c v3_alt.c v3_skey.c v3_akey.c v3_pku.c v3_int.c v3_enum.c v3_sxnet.c 
+v3_cpols.c v3_crld.c v3_purp.c v3_info.c
+MAKE=make -f Makefile.ssl
+MAKEDEPEND=../../util/domd ../..
+MAKEFILE=Makefile.ssl
+OPENSSLDIR=/usr/local/ssl
+SRC=v3_bcons.c v3_bitst.c v3_conf.c v3_extku.c v3_ia5.c v3_lib.c v3_prn.c v3_utl.c 
+v3err.c v3_genn.c v3_alt.c v3_skey.c v3_akey.c v3_pku.c v3_int.c v3_enum.c v3_sxnet.c 
+v3_cpols.c v3_crld.c v3_purp.c v3_info.c
+TEST=
+TOP=../..
+RELATIVE_DIRECTORY=
+RELATIVE_DIRECTORY=crypto/conf
+ALL=Makefile conf.c conf_err.c conf_lcl.h conf.h
+APPS=
+AR=ar r
+CC=cc
+CFLAG=-g
+CFLAGS=-I.. -I../../include -g
+DIR=conf
+EXHEADER=conf.h
+GENERAL=Makefile
+HEADER=conf_lcl.h conf.h
+INCLUDES=-I.. -I../../include
+INSTALLTOP=/usr/local/ssl
+INSTALL_PREFIX=
+LIB=../../libcrypto.a
+LIBOBJ=conf.o conf_err.o
+LIBSRC=conf.c conf_err.c
+MAKE=make -f Makefile.ssl
+MAKEDEPEND=../../util/domd ../..
+MAKEFILE=Makefile.ssl
+OPENSSLDIR=/usr/local/ssl
+SRC=conf.c conf_err.c
+TEST=
+TOP=../..
+RELATIVE_DIRECTORY=
+RELATIVE_DIRECTORY=crypto/txt_db
+ALL=Makefile txt_db.c txt_db.h
+APPS=
+AR=ar r
+CC=cc
+CFLAG=-g
+CFLAGS= -g
+DIR=txt_db
+EXHEADER=txt_db.h
+GENERAL=Makefile
+HEADER=txt_db.h
+INCLUDES=
+INSTALLTOP=/usr/local/ssl
+INSTALL_PREFIX=
+LIB=../../libcrypto.a
+LIBOBJ=txt_db.o
+LIBSRC=txt_db.c
+MAKE=make -f Makefile.ssl
+MAKEDEPEND=../../util/domd ../..
+MAKEFILE=Makefile.ssl
+OPENSSLDIR=/usr/local/ssl
+SRC=txt_db.c
+TEST=
+TOP=../..
+RELATIVE_DIRECTORY=
+RELATIVE_DIRECTORY=crypto/pkcs7
+ALL=Makefile README pk7_lib.c pkcs7err.c pk7_doit.c pk7_smime.c pk7_attr.c pk7_mime.c 
+pkcs7.h
+APPS=
+AR=ar r
+CC=cc
+CFLAG=-g
+CFLAGS=-I.. -I../../include -g
+DIR=pkcs7
+EXHEADER=pkcs7.h
+EX_LIBS=
+GENERAL=Makefile README
+HEADER=pkcs7.h
+INCLUDES=-I.. -I../../include
+INSTALLTOP=/usr/local/ssl
+INSTALL_PREFIX=
+LIB=../../libcrypto.a
+LIBOBJ=pk7_lib.o pkcs7err.o pk7_doit.o pk7_smime.o pk7_attr.o pk7_mime.o
+LIBSRC=pk7_lib.c pkcs7err.c pk7_doit.c pk7_smime.c pk7_attr.c pk7_mime.c
+MAKE=make -f Makefile.ssl
+MAKEDEPEND=../../util/domd ../..
+MAKEFILE=Makefile.ssl
+OPENSSLDIR=/usr/local/ssl
+PEX_LIBS=
+SRC=pk7_lib.c pkcs7err.c pk7_doit.c pk7_smime.c pk7_attr.c pk7_mime.c
+TEST=
+TOP=../..
+RELATIVE_DIRECTORY=
+RELATIVE_DIRECTORY=crypto/pkcs12
+ALL=Makefile p12_add.c p12_attr.c p12_bags.c p12_crpt.c p12_crt.c p12_decr.c 
+p12_init.c p12_key.c p12_kiss.c p12_lib.c p12_mac.c p12_mutl.c p12_sbag.c p12_utl.c 
+p12_npas.c pk12err.c pkcs12.h
+APPS=
+AR=ar r
+CC=cc
+CFLAG=-g
+CFLAGS=-I.. -I../../include -g
+DIR=pkcs12
+EXHEADER=pkcs12.h
+GENERAL=Makefile
+HEADER=pkcs12.h
+INCLUDES=-I.. -I../../include
+INSTALLTOP=/usr/local/ssl
+INSTALL_PREFIX=
+LIB=../../libcrypto.a
+LIBOBJ=p12_add.o p12_attr.o p12_bags.o p12_crpt.o p12_crt.o p12_decr.o p12_init.o 
+p12_key.o p12_kiss.o p12_lib.o p12_mac.o p12_mutl.o p12_sbag.o p12_utl.o p12_npas.o 
+pk12err.o
+LIBSRC=p12_add.c p12_attr.c p12_bags.c p12_crpt.c p12_crt.c p12_decr.c p12_init.c 
+p12_key.c p12_kiss.c p12_lib.c p12_mac.c p12_mutl.c p12_sbag.c p12_utl.c p12_npas.c 
+pk12err.c
+MAKE=make -f Makefile.ssl
+MAKEDEPEND=../../util/domd ../..
+MAKEFILE=Makefile.ssl
+OPENSSLDIR=/usr/local/ssl
+SRC=p12_add.c p12_attr.c p12_bags.c p12_crpt.c p12_crt.c p12_decr.c p12_init.c 
+p12_key.c p12_kiss.c p12_lib.c p12_mac.c p12_mutl.c p12_sbag.c p12_utl.c p12_npas.c 
+pk12err.c
+TEST=
+TOP=../..
+RELATIVE_DIRECTORY=
+RELATIVE_DIRECTORY=crypto/comp
+ALL=Makefile comp_lib.c c_rle.c c_zlib.c comp.h
+APPS=
+AR=ar r
+CC=cc
+CFLAG=-g
+CFLAGS=-I.. -I../../include -g
+DIR=comp
+EXHEADER=comp.h
+GENERAL=Makefile
+HEADER=comp.h
+INCLUDES=-I.. -I../../include
+INSTALLTOP=/usr/local/ssl
+INSTALL_PREFIX=
+LIB=../../libcrypto.a
+LIBOBJ=comp_lib.o c_rle.o c_zlib.o
+LIBSRC=comp_lib.c c_rle.c c_zlib.c
+MAKE=make -f Makefile.ssl
+MAKEDEPEND=../../util/domd ../..
+MAKEFILE=Makefile.ssl
+OPENSSLDIR=/usr/local/ssl
+SRC=comp_lib.c c_rle.c c_zlib.c
+TEST=
+TOP=../..
+RELATIVE_DIRECTORY=
+RELATIVE_DIRECTORY=ssl
+ALL=Makefile README ssl-lib.com install.com s2_meth.c s2_srvr.c s2_clnt.c s2_lib.c 
+s2_enc.c s2_pkt.c s3_meth.c s3_srvr.c s3_clnt.c s3_lib.c s3_enc.c s3_pkt.c s3_both.c 
+s23_meth.c s23_srvr.c s23_clnt.c s23_lib.c s23_pkt.c t1_meth.c t1_srvr.c t1_clnt.c 
+t1_lib.c t1_enc.c ssl_lib.c ssl_err2.c ssl_cert.c ssl_sess.c ssl_ciph.c ssl_stat.c 
+ssl_rsa.c ssl_asn1.c ssl_txt.c ssl_algs.c bio_ssl.c ssl_err.c ssl.h ssl2.h ssl3.h 
+ssl23.h tls1.h ssl_locl.h
+APPS=
+AR=ar r
+CC=cc
+CFLAG=-g
+CFLAGS=-I../crypto -I../include -g
+DIR=ssl
+EXHEADER=ssl.h ssl2.h ssl3.h ssl23.h tls1.h
+GENERAL=Makefile README ssl-lib.com install.com
+HEADER=ssl.h ssl2.h ssl3.h ssl23.h tls1.h ssl_locl.h
+INCLUDES=-I../crypto -I../include
+INSTALLTOP=/usr/local/ssl
+INSTALL_PREFIX=
+LIB=../libssl.a
+LIBOBJ=s2_meth.o s2_srvr.o s2_clnt.o s2_lib.o s2_enc.o s2_pkt.o s3_meth.o s3_srvr.o 
+s3_clnt.o s3_lib.o s3_enc.o s3_pkt.o s3_both.o s23_meth.o s23_srvr.o s23_clnt.o 
+s23_lib.o s23_pkt.o t1_meth.o t1_srvr.o t1_clnt.o t1_lib.o t1_enc.o ssl_lib.o 
+ssl_err2.o ssl_cert.o ssl_sess.o ssl_ciph.o ssl_stat.o ssl_rsa.o ssl_asn1.o ssl_txt.o 
+ssl_algs.o bio_ssl.o ssl_err.o
+LIBSRC=s2_meth.c s2_srvr.c s2_clnt.c s2_lib.c s2_enc.c s2_pkt.c s3_meth.c s3_srvr.c 
+s3_clnt.c s3_lib.c s3_enc.c s3_pkt.c s3_both.c s23_meth.c s23_srvr.c s23_clnt.c 
+s23_lib.c s23_pkt.c t1_meth.c t1_srvr.c t1_clnt.c t1_lib.c t1_enc.c ssl_lib.c 
+ssl_err2.c ssl_cert.c ssl_sess.c ssl_ciph.c ssl_stat.c ssl_rsa.c ssl_asn1.c ssl_txt.c 
+ssl_algs.c bio_ssl.c ssl_err.c
+MAKE=make -f Makefile.ssl
+MAKEDEPEND=../util/domd ..
+MAKEFILE=Makefile.ssl
+OPENSSLDIR=/usr/local/ssl
+SRC=s2_meth.c s2_srvr.c s2_clnt.c s2_lib.c s2_enc.c s2_pkt.c s3_meth.c s3_srvr.c 
+s3_clnt.c s3_lib.c s3_enc.c s3_pkt.c s3_both.c s23_meth.c s23_srvr.c s23_clnt.c 
+s23_lib.c s23_pkt.c t1_meth.c t1_srvr.c t1_clnt.c t1_lib.c t1_enc.c ssl_lib.c 
+ssl_err2.c ssl_cert.c ssl_sess.c ssl_ciph.c ssl_stat.c ssl_rsa.c ssl_asn1.c ssl_txt.c 
+ssl_algs.c bio_ssl.c ssl_err.c
+TEST=ssltest.c
+TOP=..
+RELATIVE_DIRECTORY=
+RELATIVE_DIRECTORY=rsaref
+ALL=Makefile rsaref-lib.com install.com rsaref.c rsar_err.c rsaref.h
+APPS=
+AR=ar r
+CC=cc
+CFLAG=-g
+CFLAGS=-I../crypto -I../include -g
+DIR=rsaref
+EXHEADER=rsaref.h
+GENERAL=Makefile rsaref-lib.com install.com
+HEADER=rsaref.h
+INCLUDES=-I../crypto -I../include
+INSTALLTOP=/usr/local/ssl
+INSTALL_PREFIX=
+LIB=../libRSAglue.a
+LIBOBJ=rsaref.o rsar_err.o
+LIBSRC=rsaref.c rsar_err.c
+MAKE=make -f Makefile.ssl
+MAKEDEPEND=../util/domd ..
+MAKEFILE=Makefile.ssl
+OPENSSLDIR=/usr/local/ssl
+SRC=rsaref.c rsar_err.c
+TEST=
+TOP=..
+RELATIVE_DIRECTORY=
+RELATIVE_DIRECTORY=apps
+ALL=Makefile makeapps.com install.com verify.c asn1pars.c req.c dgst.c dh.c enc.c 
+passwd.c gendh.c errstr.c ca.c pkcs7.c crl2p7.c crl.c rsa.c dsa.c dsaparam.c x509.c 
+genrsa.c gendsa.c s_server.c s_client.c speed.c s_time.c apps.c s_cb.c s_socket.c 
+app_rand.c version.c sess_id.c ciphers.c nseq.c pkcs12.c pkcs8.c spkac.c smime.c 
+apps.h progs.h s_apps.h testdsa.h testrsa.h 
+A_OBJ=apps.o
+A_SRC=apps.c
+CC=cc
+CFLAG=-g -static
+CFLAGS=-DMONOLITH -I../include -g -static
+DIR=apps
+DLIBCRYPTO=../libcrypto.a
+DLIBSSL=../libssl.a
+EXE=openssl
+EXHEADER=
+EX_LIBS=
+E_EXE=verify asn1pars req dgst dh dhparam enc passwd gendh errstr ca crl rsa dsa 
+dsaparam x509 genrsa gendsa s_server s_client speed s_time version pkcs7 crl2pkcs7 
+sess_id ciphers nseq pkcs12 pkcs8 spkac smime
+E_OBJ=verify.o asn1pars.o req.o dgst.o dh.o dhparam.o enc.o passwd.o gendh.o errstr.o 
+ca.o pkcs7.o crl2p7.o crl.o rsa.o dsa.o dsaparam.o x509.o genrsa.o gendsa.o 
+s_server.o s_client.o speed.o s_time.o apps.o s_cb.o s_socket.o app_rand.o version.o 
+sess_id.o ciphers.o nseq.o pkcs12.o pkcs8.o spkac.o smime.o
+E_SRC=verify.c asn1pars.c req.c dgst.c dh.c enc.c passwd.c gendh.c errstr.c ca.c 
+pkcs7.c crl2p7.c crl.c rsa.c dsa.c dsaparam.c x509.c genrsa.c gendsa.c s_server.c 
+s_client.c speed.c s_time.c apps.c s_cb.c s_socket.c app_rand.c version.c sess_id.c 
+ciphers.c nseq.c pkcs12.c pkcs8.c spkac.c smime.c
+GENERAL=Makefile makeapps.com install.com
+HEADER=apps.h progs.h s_apps.h testdsa.h testrsa.h 
+INCLUDES=-I../include
+INSTALLTOP=/usr/local/ssl
+INSTALL_PREFIX=
+LIBCRYPTO=-L.. -lcrypto
+LIBSSL=-L.. -lssl
+MAKE=make -f Makefile.ssl
+MAKEDEPEND=../util/domd ..
+MAKEFILE=Makefile.ssl
+OPENSSLDIR=/usr/local/ssl
+PERL=/usr/local/bin/perl
+PEX_LIBS=
+PROGRAM=openssl
+PROGS=openssl.c
+RAND_OBJ=app_rand.o
+RAND_SRC=app_rand.c
+RM=rm -f
+SCRIPTS=CA.sh CA.pl der_chop
+SRC=verify.c asn1pars.c req.c dgst.c dh.c enc.c passwd.c gendh.c errstr.c ca.c 
+pkcs7.c crl2p7.c crl.c rsa.c dsa.c dsaparam.c x509.c genrsa.c gendsa.c s_server.c 
+s_client.c speed.c s_time.c apps.c s_cb.c s_socket.c app_rand.c version.c sess_id.c 
+ciphers.c nseq.c pkcs12.c pkcs8.c spkac.c smime.c
+S_OBJ=s_cb.o s_socket.o
+S_SRC=s_cb.c s_socket.c
+TOP=..
+RELATIVE_DIRECTORY=
+RELATIVE_DIRECTORY=test
+ALL=Makefile.ssl maketests.com tests.com testenc.com tx509.com trsa.com tcrl.com 
+tsid.com treq.com tpkcs7.com tpkcs7d.com tverify.com testgen.com testss.com 
+testssl.com testca.com VMSca-response.1 VMSca-response.2 bntest.c ideatest.c 
+md2test.c md5test.c hmactest.c rc2test.c rc4test.c rc5test.c destest.c shatest.c 
+sha1test.c mdc2test.c rmdtest.c randtest.c dhtest.c casttest.c bftest.c ssltest.c 
+dsatest.c exptest.c rsa_test.c 
+BFTEST=bftest
+BNTEST=bntest
+CASTTEST=casttest
+CC=cc
+CFLAG=-g
+CFLAGS=-I../include -g
+DESTEST=destest
+DHTEST=dhtest
+DIR=test
+DLIBCRYPTO=../libcrypto.a
+DLIBSSL=../libssl.a
+DSATEST=dsatest
+EXE=bntest ideatest md2test md5test hmactest rc2test rc4test rc5test destest shatest 
+sha1test mdc2test rmdtest randtest dhtest bftest casttest ssltest exptest dsatest 
+rsa_test
+EXHEADER=
+EXPTEST=exptest
+EX_LIBS=
+GENERAL=Makefile.ssl maketests.com tests.com testenc.com tx509.com trsa.com tcrl.com 
+tsid.com treq.com tpkcs7.com tpkcs7d.com tverify.com testgen.com testss.com 
+testssl.com testca.com VMSca-response.1 VMSca-response.2
+HEADER=
+HMACTEST=hmactest
+IDEATEST=ideatest
+INCLUDES=-I../include
+INSTALLTOP=/usr/local/ssl
+INSTALL_PREFIX=
+LIBCRYPTO=-L.. -lcrypto
+LIBSSL=-L.. -lssl
+MAKE=make -f Makefile.ssl
+MAKEDEPEND=../util/domd ..
+MAKEFILE=Makefile.ssl
+MD2TEST=md2test
+MD5TEST=md5test
+MDC2TEST=mdc2test
+METHTEST=methtest
+OBJ=bntest.o ideatest.o md2test.o md5test.o hmactest.o rc2test.o rc4test.o rc5test.o 
+destest.o shatest.o sha1test.o mdc2test.o rmdtest.o randtest.o dhtest.o casttest.o 
+bftest.o ssltest.o dsatest.o exptest.o rsa_test.o
+OPENSSLDIR=/usr/local/ssl
+PERL=perl
+PEX_LIBS=
+RANDTEST=randtest
+RC2TEST=rc2test
+RC4TEST=rc4test
+RC5TEST=rc5test
+RMDTEST=rmdtest
+RSATEST=rsa_test
+SHA1TEST=sha1test
+SHATEST=shatest
+SRC=bntest.c ideatest.c md2test.c md5test.c hmactest.c rc2test.c rc4test.c rc5test.c 
+destest.c shatest.c sha1test.c mdc2test.c rmdtest.c randtest.c dhtest.c casttest.c 
+bftest.c ssltest.c dsatest.c exptest.c rsa_test.c
+SSLTEST=ssltest
+TOP=..
+RELATIVE_DIRECTORY=
+RELATIVE_DIRECTORY=tools
+APPS=c_rehash
+CC=cc
+CFLAG=-g
+CFLAGS=-I.. -I../../include -g
+DIR=tools
+GENERAL=Makefile.ssl
+INCLUDES=-I.. -I../../include
+INSTALLTOP=/usr/local/ssl
+INSTALL_PREFIX=
+MAKE=make -f Makefile.ssl
+MAKEDEPEND=../util/domd ..
+MAKEFILE=Makefile.ssl
+MISC_APPS=c_hash c_info c_issuer c_name
+OPENSSLDIR=/usr/local/ssl
+TEST=
+TOP=..
+RELATIVE_DIRECTORY=
Index: opensa/openssl/news
diff -u opensa/openssl/news:1.1 opensa/openssl/news:1.2
--- opensa/openssl/news:1.1     Tue Jan 25 22:57:51 2000
+++ opensa/openssl/news Thu Mar  2 21:11:48 2000
@@ -5,6 +5,42 @@
   This file gives a brief overview of the major changes between each OpenSSL
   release. For more details please read the CHANGES file.
 
+  Major changes between OpenSSL 0.9.4 and OpenSSL 0.9.5:
+
+      o S/MIME support in new 'smime' command
+      o Documentation for the OpenSSL command line application
+      o Automation of 'req' application
+      o Fixes to make s_client, s_server work under Windows
+      o Support for multiple fieldnames in SPKACs
+      o New SPKAC command line utilty and associated library functions
+      o Options to allow passwords to be obtained from various sources
+      o New public key PEM format and options to handle it
+      o Many other fixes and enhancements to command line utilities
+      o Usable certificate chain verification
+      o Certificate purpose checking
+      o Certificate trust settings
+      o Support of authority information access extension
+      o Extensions in certificate requests
+      o Simplified X509 name and attribute routines
+      o Initial (incomplete) support for international character sets
+      o New DH_METHOD, DSA_METHOD and enhanced RSA_METHOD
+      o Read only memory BIOs and simplified creation function
+      o TLS/SSL protocol bugfixes: Accept TLS 'client hello' in SSL 3.0
+        record; allow fragmentation and interleaving of handshake and other
+        data
+      o TLS/SSL code now "tolerates" MS SGC
+      o Work around for Netscape client certificate hang bug
+      o RSA_NULL option that removes RSA patent code but keeps other
+        RSA functionality
+      o Memory leak detection now allows applications to add extra information
+        via a per-thread stack
+      o PRNG robustness improved
+      o EGD support
+      o BIGNUM library bug fixes
+      o Faster DSA parameter generation
+      o Enhanced support for Alpha Linux
+      o Experimental MacOS support
+
   Major changes between OpenSSL 0.9.3 and OpenSSL 0.9.4:
 
       o Transparent support for PKCS#8 format private keys: these are used
Index: opensa/openssl/readme
diff -u opensa/openssl/readme:1.1 opensa/openssl/readme:1.2
--- opensa/openssl/readme:1.1   Tue Jan 25 22:57:51 2000
+++ opensa/openssl/readme       Thu Mar  2 21:11:48 2000
@@ -1,7 +1,7 @@
 
- OpenSSL 0.9.4  09 Aug 1999
+ OpenSSL 0.9.5  28 Feb 2000
 
- Copyright (c) 1998-1999 The OpenSSL Project
+ Copyright (c) 1998-2000 The OpenSSL Project
  Copyright (c) 1995-1998 Eric A. Young, Tim J. Hudson
  All rights reserved.
 
@@ -80,40 +80,14 @@
         A Configuration loader that uses a format similar to MS .ini files.
 
  openssl: 
-     A command line tool which provides the following functions:
+     A command line tool that can be used for:
+        Creation of RSA, DH and DSA key parameters
+        Creation of X.509 certificates, CSRs and CRLs 
+        Calculation of Message Digests
+        Encryption and Decryption with Ciphers
+        SSL/TLS Client and Server Tests
+        Handling of S/MIME signed or encrypted mail
 
-     enc     - a general encryption program that can encrypt/decrypt using
-               one of 17 different cipher/mode combinations.  The
-               input/output can also be converted to/from base64
-               ascii encoding.
-     dgst    - a generate message digesting program that will generate
-               message digests for any of md2, md5, sha (sha-0 or sha-1)
-               or mdc2.
-     asn1parse - parse and display the structure of an asn1 encoded
-               binary file.
-     rsa     - Manipulate RSA private keys.
-     dsa     - Manipulate DSA private keys.
-     dh      - Manipulate Diffie-Hellman parameter files.
-     dsaparam- Manipulate and generate DSA parameter files.
-     crl     - Manipulate certificate revocation lists.
-     crt2pkcs7- Generate a pkcs7 object containing a crl and a certificate.
-     x509    - Manipulate x509 certificates, self-sign certificates.
-     req     - Manipulate PKCS#10 certificate requests and also
-               generate certificate requests.
-     genrsa  - Generates an arbitrary sized RSA private key.
-     gendsa  - Generates DSA parameters.
-     gendh   - Generates a set of Diffie-Hellman parameters, the prime
-               will be a strong prime.
-     ca      - Create certificates from PKCS#10 certificate requests.
-               This program also maintains a database of certificates
-               issued.
-     verify  - Check x509 certificate signatures.
-     speed   - Benchmark OpenSSL's ciphers.
-     s_server- A test SSL server.
-     s_client- A test SSL client.
-     s_time  - Benchmark SSL performance of SSL server programs.
-     errstr  - Convert from OpenSSL hex error codes to a readable form.
-     nseq    - Netscape certificate sequence utility
         
  PATENTS
  -------
@@ -157,43 +131,40 @@
  If you have any problems with OpenSSL then please take the following steps
  first:
 
+    - Download the current snapshot from ftp://ftp.openssl.org/snapshot/
+      to see if the problem has already been addressed
     - Remove ASM versions of libraries
     - Remove compiler optimisation flags 
-    - Add compiler debug flags (if using gcc then remove -fomit-frame-pointer
-      before you try to debug things)
 
  If you wish to report a bug then please include the following information in
  any bug report:
 
-    OpenSSL Details
-    - Version, most of these details can be got from the
-      'openssl version -a' command.
-    Operating System Details
-    - On Unix systems: Output of './config -t'
-    - OS Name, Version
-    - Hardware platform
-    Compiler Details
-    - Name
-    - Version
-    Application Details 
-    - Name 
-    - Version 
-    Problem Description
-    - include steps that will reproduce the problem (if known)
-    Stack Traceback (if the application dumps core)
+    - On Unix systems:
+        Self-test report generated by 'make report'
+    - On other systems:
+        OpenSSL version: output of 'openssl version -a'
+        OS Name, Version, Hardware platform
+        Compiler Details (name, version)
+    - Application Details (name, version)
+    - Problem Description (steps that will reproduce the problem, if known)
+    - Stack Traceback (if the application dumps core)
 
  Report the bug to the OpenSSL project at:
 
     [EMAIL PROTECTED]
 
+ Note that mail to [EMAIL PROTECTED] is forwarded to a public
+ mailing list. Confidential mail may be sent to [EMAIL PROTECTED]
+ (PGP key available from the key servers).
+
  HOW TO CONTRIBUTE TO OpenSSL
  ----------------------------
 
  Development is coordinated on the openssl-dev mailing list (see
  http://www.openssl.org for information on subscribing). If you
- would like to submit a patch, send it to [EMAIL PROTECTED]
- Please be sure to include a textual explanation of what your patch
- does.
+ would like to submit a patch, send it to [EMAIL PROTECTED] with
+ the string "[PATCH]" in the subject. Please be sure to include a
+ textual explanation of what your patch does.
 
  The preferred format for changes is "diff -u" output. You might
  generate it like this:
Index: opensa/openssl/apps/apps.c
diff -u opensa/openssl/apps/apps.c:1.1 opensa/openssl/apps/apps.c:1.2
--- opensa/openssl/apps/apps.c:1.1      Tue Jan 25 23:38:06 2000
+++ opensa/openssl/apps/apps.c  Thu Mar  2 21:11:48 2000
@@ -324,3 +324,93 @@
        return(1);
        }
 #endif
+
+
+int dump_cert_text (BIO *out, X509 *x)
+{
+       char buf[256];
+       X509_NAME_oneline(X509_get_subject_name(x),buf,256);
+       BIO_puts(out,"subject=");
+       BIO_puts(out,buf);
+
+       X509_NAME_oneline(X509_get_issuer_name(x),buf,256);
+       BIO_puts(out,"\nissuer= ");
+       BIO_puts(out,buf);
+       BIO_puts(out,"\n");
+        return 0;
+}
+
+static char *app_get_pass(BIO *err, char *arg, int keepbio);
+
+int app_passwd(BIO *err, char *arg1, char *arg2, char **pass1, char **pass2)
+{
+       int same;
+       if(!arg2 || !arg1 || strcmp(arg1, arg2)) same = 0;
+       else same = 1;
+       if(arg1) {
+               *pass1 = app_get_pass(err, arg1, same);
+               if(!*pass1) return 0;
+       } else if(pass1) *pass1 = NULL;
+       if(arg2) {
+               *pass2 = app_get_pass(err, arg2, same ? 2 : 0);
+               if(!*pass2) return 0;
+       } else if(pass2) *pass2 = NULL;
+       return 1;
+}
+
+static char *app_get_pass(BIO *err, char *arg, int keepbio)
+{
+       char *tmp, tpass[APP_PASS_LEN];
+       static BIO *pwdbio = NULL;
+       int i;
+       if(!strncmp(arg, "pass:", 5)) return BUF_strdup(arg + 5);
+       if(!strncmp(arg, "env:", 4)) {
+               tmp = getenv(arg + 4);
+               if(!tmp) {
+                       BIO_printf(err, "Can't read environment variable %s\n", arg + 
+4);
+                       return NULL;
+               }
+               return BUF_strdup(tmp);
+       }
+       if(!keepbio || !pwdbio) {
+               if(!strncmp(arg, "file:", 5)) {
+                       pwdbio = BIO_new_file(arg + 5, "r");
+                       if(!pwdbio) {
+                               BIO_printf(err, "Can't open file %s\n", arg + 5);
+                               return NULL;
+                       }
+               } else if(!strncmp(arg, "fd:", 3)) {
+                       BIO *btmp;
+                       i = atoi(arg + 3);
+                       if(i >= 0) pwdbio = BIO_new_fd(i, BIO_NOCLOSE);
+                       if((i < 0) || !pwdbio) {
+                               BIO_printf(err, "Can't access file descriptor %s\n", 
+arg + 3);
+                               return NULL;
+                       }
+                       /* Can't do BIO_gets on an fd BIO so add a buffering BIO */
+                       btmp = BIO_new(BIO_f_buffer());
+                       pwdbio = BIO_push(btmp, pwdbio);
+               } else if(!strcmp(arg, "stdin")) {
+                       pwdbio = BIO_new_fp(stdin, BIO_NOCLOSE);
+                       if(!pwdbio) {
+                               BIO_printf(err, "Can't open BIO for stdin\n");
+                               return NULL;
+                       }
+               } else {
+                       BIO_printf(err, "Invalid password argument \"%s\"\n", arg);
+                       return NULL;
+               }
+       }
+       i = BIO_gets(pwdbio, tpass, APP_PASS_LEN);
+       if(keepbio != 1) {
+               BIO_free_all(pwdbio);
+               pwdbio = NULL;
+       }
+       if(i <= 0) {
+               BIO_printf(err, "Error reading password from BIO\n");
+               return NULL;
+       }
+       tmp = strchr(tpass, '\n');
+       if(tmp) *tmp = 0;
+       return BUF_strdup(tpass);
+}
Index: opensa/openssl/apps/apps.h
diff -u opensa/openssl/apps/apps.h:1.1 opensa/openssl/apps/apps.h:1.2
--- opensa/openssl/apps/apps.h:1.1      Tue Jan 25 23:38:06 2000
+++ opensa/openssl/apps/apps.h  Thu Mar  2 21:11:48 2000
@@ -64,8 +64,18 @@
 #include <openssl/buffer.h>
 #include <openssl/bio.h>
 #include <openssl/crypto.h>
-#include "progs.h"
+#include <openssl/x509.h>
 
+int app_RAND_load_file(const char *file, BIO *bio_e, int dont_warn);
+int app_RAND_write_file(const char *file, BIO *bio_e);
+/* When `file' is NULL, use defaults.
+ * `bio_e' is for error messages. */
+void app_RAND_allow_write_file(void);
+long app_RAND_load_files(char *file); /* `file' is a list of files to read,
+                                       * separated by LIST_SEPARATOR_CHAR
+                                       * (see e_os.h).  The string is
+                                       * destroyed! */
+
 #ifdef NO_STDIO
 BIO_METHOD *BIO_s_file();
 #endif
@@ -103,7 +113,7 @@
 #define do_pipe_sig()
 #endif
 
-#if defined(MONOLITH) && !defined(SSLEAY)
+#if defined(MONOLITH) && !defined(OPENSSL_C)
 #  define apps_startup()       do_pipe_sig()
 #else
 #  if defined(MSDOS) || defined(WIN16) || defined(WIN32)
@@ -132,10 +142,16 @@
 int str2fmt(char *s);
 void program_name(char *in,char *out,int size);
 int chopup_args(ARGS *arg,char *buf, int *argc, char **argv[]);
+#ifdef HEADER_X509_H
+int dump_cert_text(BIO *out, X509 *x);
+#endif
+int app_passwd(BIO *err, char *arg1, char *arg2, char **pass1, char **pass2);
 #define FORMAT_UNDEF    0
 #define FORMAT_ASN1     1
 #define FORMAT_TEXT     2
 #define FORMAT_PEM      3
 #define FORMAT_NETSCAPE 4
+
+#define APP_PASS_LEN   1024
 
 #endif
Index: opensa/openssl/apps/asn1pars.c
diff -u opensa/openssl/apps/asn1pars.c:1.1 opensa/openssl/apps/asn1pars.c:1.2
--- opensa/openssl/apps/asn1pars.c:1.1  Tue Jan 25 23:38:06 2000
+++ opensa/openssl/apps/asn1pars.c      Thu Mar  2 21:11:48 2000
@@ -74,19 +74,21 @@
  * -i          - indent the details by depth
  * -offset     - where in the file to start
  * -length     - how many bytes to use
- * -oid file   - extra oid decription file
+ * -oid file   - extra oid description file
  */
 
 #undef PROG
 #define PROG   asn1parse_main
 
+int MAIN(int, char **);
+
 int MAIN(int argc, char **argv)
        {
        int i,badops=0,offset=0,ret=1,j;
        unsigned int length=0;
        long num,tmplen;
        BIO *in=NULL,*out=NULL,*b64=NULL, *derout = NULL;
-       int informat,indent=0;
+       int informat,indent=0, noout = 0;
        char *infile=NULL,*str=NULL,*prog,*oidfile=NULL, *derfile=NULL;
        unsigned char *tmpbuf;
        BUF_MEM *buf=NULL;
@@ -130,6 +132,7 @@
                        {
                        indent=1;
                        }
+               else if (strcmp(*argv,"-noout") == 0) noout = 1;
                else if (strcmp(*argv,"-oid") == 0)
                        {
                        if (--argc < 1) goto bad;
@@ -168,8 +171,10 @@
                BIO_printf(bio_err,"where options are\n");
                BIO_printf(bio_err," -inform arg   input format - one of DER TXT 
PEM\n");
                BIO_printf(bio_err," -in arg       input file\n");
+               BIO_printf(bio_err," -out arg      output file\n");
+               BIO_printf(bio_err," -noout arg    don't produce any output\n");
                BIO_printf(bio_err," -offset arg   offset into file\n");
-               BIO_printf(bio_err," -length arg   lenth of section in file\n");
+               BIO_printf(bio_err," -length arg   length of section in file\n");
                BIO_printf(bio_err," -i            indent entries\n");
                BIO_printf(bio_err," -oid file     file of extra oid definitions\n");
                BIO_printf(bio_err," -strparse offset\n");
@@ -287,7 +292,8 @@
                        goto end;
                }
        }
-       if (!ASN1_parse(out,(unsigned char *)&(str[offset]),length,indent))
+       if (!noout &&
+           !ASN1_parse(out,(unsigned char *)&(str[offset]),length,indent))
                {
                ERR_print_errors(bio_err);
                goto end;
Index: opensa/openssl/apps/ca.c
diff -u opensa/openssl/apps/ca.c:1.1 opensa/openssl/apps/ca.c:1.2
--- opensa/openssl/apps/ca.c:1.1        Tue Jan 25 23:38:06 2000
+++ opensa/openssl/apps/ca.c    Thu Mar  2 21:11:48 2000
@@ -147,6 +147,8 @@
 " -gencrl         - Generate a new CRL\n",
 " -crldays days   - Days is when the next CRL is due\n",
 " -crlhours hours - Hours is when the next CRL is due\n",
+" -startdate YYMMDDHHMMSSZ  - certificate validity notBefore\n",
+" -enddate YYMMDDHHMMSSZ    - certificate validity notAfter (overrides -days)\n",
 " -days arg       - number of days to certify the certificate for\n",
 " -md arg         - md to use, one of md2, md5, sha or sha1\n",
 " -policy arg     - The CA 'policy' to support\n",
@@ -163,6 +165,8 @@
 " -batch          - Don't ask questions\n",
 " -msie_hack      - msie modifications to handle all those universal strings\n",
 " -revoke file    - Revoke a certificate (given in file)\n",
+" -extensions ..  - Extension section (override value in config file)\n",
+" -crlexts ..     - CRL extension section (override value in config file)\n",
 NULL
 };
 
@@ -174,7 +178,6 @@
 
 static int add_oid_section(LHASH *conf);
 static void lookup_fail(char *name,char *tag);
-static int MS_CALLBACK key_callback(char *buf,int len,int verify,void *u);
 static unsigned long index_serial_hash(char **a);
 static int index_serial_cmp(char **a, char **b);
 static unsigned long index_name_hash(char **a);
@@ -197,22 +200,24 @@
                         char *enddate, int days, char *ext_sect,LHASH *conf,
                                int verbose);
 static int fix_data(int nid, int *type);
-static void write_new_certificate(BIO *bp, X509 *x, int output_der);
+static void write_new_certificate(BIO *bp, X509 *x, int output_der, int notext);
 static int do_body(X509 **xret, EVP_PKEY *pkey, X509 *x509, const EVP_MD *dgst,
        STACK_OF(CONF_VALUE) *policy, TXT_DB *db, BIGNUM *serial,
        char *startdate, char *enddate, int days, int batch, int verbose,
        X509_REQ *req, char *ext_sect, LHASH *conf);
 static int do_revoke(X509 *x509, TXT_DB *db);
 static int check_time_format(char *str);
-static LHASH *conf;
-static char *key=NULL;
+static LHASH *conf=NULL;
 static char *section=NULL;
 
 static int preserve=0;
 static int msie_hack=0;
 
+int MAIN(int, char **);
+
 int MAIN(int argc, char **argv)
        {
+       char *key=NULL;
        int total=0;
        int total_done=0;
        int badops=0;
@@ -244,6 +249,7 @@
        char *enddate=NULL;
        int days=0;
        int batch=0;
+       int notext=0;
        X509 *x509=NULL;
        X509 *x=NULL;
        BIO *in=NULL,*out=NULL,*Sout=NULL,*Cout=NULL;
@@ -262,6 +268,7 @@
 #undef BSIZE
 #define BSIZE 256
        MS_STATIC char buf[3][BSIZE];
+       char *randfile=NULL;
 
 #ifdef EFENCE
 EF_PROTECT_FREE=1;
@@ -271,9 +278,12 @@
 
        apps_startup();
 
-       X509V3_add_standard_extensions();
+       conf = NULL;
+       key = NULL;
+       section = NULL;
 
        preserve=0;
+       msie_hack=0;
        if (bio_err == NULL)
                if ((bio_err=BIO_new(BIO_s_file())) != NULL)
                        BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
@@ -350,6 +360,8 @@
                        if (--argc < 1) goto bad;
                        outdir= *(++argv);
                        }
+               else if (strcmp(*argv,"-notext") == 0)
+                       notext=1;
                else if (strcmp(*argv,"-batch") == 0)
                        batch=1;
                else if (strcmp(*argv,"-preserveDN") == 0)
@@ -393,6 +405,16 @@
                        infile= *(++argv);
                        dorevoke=1;
                        }
+               else if (strcmp(*argv,"-extensions") == 0)
+                       {
+                       if (--argc < 1) goto bad;
+                       extensions= *(++argv);
+                       }
+               else if (strcmp(*argv,"-crlexts") == 0)
+                       {
+                       if (--argc < 1) goto bad;
+                       crl_ext= *(++argv);
+                       }
                else
                        {
 bad:
@@ -476,12 +498,16 @@
                                BIO_free(oid_bio);
                                }
                        }
-               }
-               if(!add_oid_section(conf)) {
+               if(!add_oid_section(conf)) 
+                       {
                        ERR_print_errors(bio_err);
                        goto err;
+                       }
                }
 
+       randfile = CONF_get_string(conf, BASE_SECTION, "RANDFILE");
+       app_RAND_load_file(randfile, bio_err, 0);
+       
        in=BIO_new(BIO_s_file());
        out=BIO_new(BIO_s_file());
        Sout=BIO_new(BIO_s_file());
@@ -493,7 +519,7 @@
                }
 
        /*****************************************************************/
-       /* we definitly need an public key, so lets get it */
+       /* we definitely need an public key, so lets get it */
 
        if ((keyfile == NULL) && ((keyfile=CONF_get_string(conf,
                section,ENV_PRIVATE_KEY)) == NULL))
@@ -507,13 +533,8 @@
                BIO_printf(bio_err,"trying to load CA private key\n");
                goto err;
                }
-       if (key == NULL)
-               pkey=PEM_read_bio_PrivateKey(in,NULL,NULL,NULL);
-       else
-               {
-               pkey=PEM_read_bio_PrivateKey(in,NULL,key_callback,NULL);
-               memset(key,0,strlen(key));
-               }
+               pkey=PEM_read_bio_PrivateKey(in,NULL,NULL,key);
+               if(key) memset(key,0,strlen(key));
        if (pkey == NULL)
                {
                BIO_printf(bio_err,"unable to load CA private key\n");
@@ -566,14 +587,19 @@
                        BIO_printf(bio_err,"there needs to be defined a directory for 
new certificate to be placed in\n");
                        goto err;
                        }
-#ifdef VMS
-               /* For technical reasons, VMS misbehaves with X_OK */
-               if (access(outdir,R_OK|W_OK) != 0)
-#else
+#ifndef VMS /* outdir is a directory spec, but access() for VMS demands a
+              filename.  In any case, stat(), below, will catch the problem
+              if outdir is not a directory spec, and the fopen() or open()
+              will catch an error if there is no write access.
+
+              Presumably, this problem could also be solved by using the DEC
+              C routines to convert the directory syntax to Unixly, and give
+              that to access().  However, time's too short to do that just
+              now.
+            */
                if (access(outdir,R_OK|W_OK|X_OK) != 0)
-#endif
                        {
-                       BIO_printf(bio_err,"I am unable to acces the %s 
directory\n",outdir);
+                       BIO_printf(bio_err,"I am unable to access the %s 
+directory\n",outdir);
                        perror(outdir);
                        goto err;
                        }
@@ -584,12 +610,15 @@
                        perror(outdir);
                        goto err;
                        }
+#ifdef S_IFDIR
                if (!(sb.st_mode & S_IFDIR))
                        {
                        BIO_printf(bio_err,"%s need to be a directory\n",outdir);
                        perror(outdir);
                        goto err;
                        }
+#endif
+#endif
                }
 
        /*****************************************************************/
@@ -655,7 +684,7 @@
                TXT_DB_write(out,db);
                BIO_printf(bio_err,"%d entries loaded from the database\n",
                        db->data->num);
-               BIO_printf(bio_err,"generating indexs\n");
+               BIO_printf(bio_err,"generating index\n");
                }
        
        if (!TXT_DB_create_index(db,DB_serial,NULL,index_serial_hash,
@@ -720,8 +749,8 @@
                        lookup_fail(section,ENV_SERIAL);
                        goto err;
                        }
-
-               extensions=CONF_get_string(conf,section,ENV_EXTENSIONS);
+               if(!extensions)
+                       extensions=CONF_get_string(conf,section,ENV_EXTENSIONS);
                if(extensions) {
                        /* Check syntax of file */
                        X509V3_CTX ctx;
@@ -966,8 +995,8 @@
                                perror(buf[2]);
                                goto err;
                                }
-                       write_new_certificate(Cout,x, 0);
-                       write_new_certificate(Sout,x, output_der);
+                       write_new_certificate(Cout,x, 0, notext);
+                       write_new_certificate(Sout,x, output_der, notext);
                        }
 
                if (sk_num(cert_sk))
@@ -987,14 +1016,14 @@
                        out=NULL;
                        if (rename(serialfile,buf[2]) < 0)
                                {
-                               BIO_printf(bio_err,"unabel to rename %s to %s\n",
+                               BIO_printf(bio_err,"unable to rename %s to %s\n",
                                        serialfile,buf[2]);
                                perror("reason");
                                goto err;
                                }
                        if (rename(buf[0],serialfile) < 0)
                                {
-                               BIO_printf(bio_err,"unabel to rename %s to %s\n",
+                               BIO_printf(bio_err,"unable to rename %s to %s\n",
                                        buf[0],serialfile);
                                perror("reason");
                                rename(buf[2],serialfile);
@@ -1011,14 +1040,14 @@
 
                        if (rename(dbfile,buf[2]) < 0)
                                {
-                               BIO_printf(bio_err,"unabel to rename %s to %s\n",
+                               BIO_printf(bio_err,"unable to rename %s to %s\n",
                                        dbfile,buf[2]);
                                perror("reason");
                                goto err;
                                }
                        if (rename(buf[1],dbfile) < 0)
                                {
-                               BIO_printf(bio_err,"unabel to rename %s to %s\n",
+                               BIO_printf(bio_err,"unable to rename %s to %s\n",
                                        buf[1],dbfile);
                                perror("reason");
                                rename(buf[2],dbfile);
@@ -1031,7 +1060,7 @@
        /*****************************************************************/
        if (gencrl)
                {
-               crl_ext=CONF_get_string(conf,section,ENV_CRLEXT);
+               if(!crl_ext) crl_ext=CONF_get_string(conf,section,ENV_CRLEXT);
                if(crl_ext) {
                        /* Check syntax of file */
                        X509V3_CTX ctx;
@@ -1143,13 +1172,6 @@
        /*****************************************************************/
        if (dorevoke)
                {
-               in=BIO_new(BIO_s_file());
-               out=BIO_new(BIO_s_file());
-               if ((in == NULL) || (out == NULL))
-                       {
-                       ERR_print_errors(bio_err);
-                       goto err;
-                       }
                if (infile == NULL) 
                        {
                        BIO_printf(bio_err,"no input files\n");
@@ -1157,19 +1179,22 @@
                        }
                else
                        {
+                       X509 *revcert;
                        if (BIO_read_filename(in,infile) <= 0)
                                {
                                perror(infile);
                                BIO_printf(bio_err,"error trying to load '%s' 
certificate\n",infile);
                                goto err;
                                }
-                       x509=PEM_read_bio_X509(in,NULL,NULL,NULL);
-                       if (x509 == NULL)
+                       revcert=PEM_read_bio_X509(in,NULL,NULL,NULL);
+                       if (revcert == NULL)
                                {
                                BIO_printf(bio_err,"unable to load '%s' 
certificate\n",infile);
                                goto err;
                                }
-                       j=do_revoke(x509,db);
+                       j=do_revoke(revcert,db);
+                       if (j <= 0) goto err;
+                       X509_free(revcert);
 
                        strncpy(buf[0],dbfile,BSIZE-4);
                        strcat(buf[0],".new");
@@ -1181,10 +1206,6 @@
                                }
                        j=TXT_DB_write(out,db);
                        if (j <= 0) goto err;
-                       BIO_free(in);
-                       BIO_free(out);
-                       in=NULL;
-                       out=NULL;
                        strncpy(buf[1],dbfile,BSIZE-4);
                        strcat(buf[1],".old");
                        if (rename(dbfile,buf[1]) < 0)
@@ -1215,13 +1236,13 @@
        sk_pop_free(cert_sk,X509_free);
 
        if (ret) ERR_print_errors(bio_err);
+       app_RAND_write_file(randfile, bio_err);
        BN_free(serial);
        TXT_DB_free(db);
        EVP_PKEY_free(pkey);
        X509_free(x509);
        X509_CRL_free(crl);
        CONF_free(conf);
-       X509V3_EXT_cleanup();
        OBJ_cleanup();
        EXIT(ret);
        }
@@ -1231,17 +1252,6 @@
        BIO_printf(bio_err,"variable lookup failed for %s::%s\n",name,tag);
        }
 
-static int MS_CALLBACK key_callback(char *buf, int len, int verify, void *u)
-       {
-       int i;
-
-       if (key == NULL) return(0);
-       i=strlen(key);
-       i=(i > len)?len:i;
-       memcpy(buf,key,i);
-       return(i);
-       }
-
 static unsigned long index_serial_hash(char **a)
        {
        char *n;
@@ -1664,8 +1674,7 @@
 
                        if (push != NULL)
                                {
-                               if (!X509_NAME_add_entry(subject,push,
-                                       X509_NAME_entry_count(subject),0))
+                               if (!X509_NAME_add_entry(subject,push, -1, 0))
                                        {
                                        if (push != NULL)
                                                X509_NAME_ENTRY_free(push);
@@ -1685,7 +1694,7 @@
                }
 
        if (verbose)
-               BIO_printf(bio_err,"The subject name apears to be ok, checking data 
base for clashes\n");
+               BIO_printf(bio_err,"The subject name appears to be ok, checking data 
+base for clashes\n");
 
        row[DB_name]=X509_NAME_oneline(subject,NULL,0);
        row[DB_serial]=BN_bn2hex(serial);
@@ -1742,7 +1751,7 @@
                goto err;
                }
 
-       /* We are now totaly happy, lets make and sign the certificate */
+       /* We are now totally happy, lets make and sign the certificate */
        if (verbose)
                BIO_printf(bio_err,"Everything appears to be ok, creating and signing 
the certificate\n");
 
@@ -1789,7 +1798,7 @@
                ASN1_INTEGER_set(ci->version,2); /* version 3 certificate */
 
                /* Free the current entries if any, there should not
-                * be any I belive */
+                * be any I believe */
                if (ci->extensions != NULL)
                        sk_X509_EXTENSION_pop_free(ci->extensions,
                                                   X509_EXTENSION_free);
@@ -1883,6 +1892,8 @@
                X509_NAME_free(CAname);
        if (subject != NULL)
                X509_NAME_free(subject);
+       if (tmptm != NULL)
+               ASN1_UTCTIME_free(tmptm);
        if (ok <= 0)
                {
                if (ret != NULL) X509_free(ret);
@@ -1893,17 +1904,16 @@
        return(ok);
        }
 
-static void write_new_certificate(BIO *bp, X509 *x, int output_der)
+static void write_new_certificate(BIO *bp, X509 *x, int output_der, int notext)
        {
-       char *f;
-       char buf[256];
 
        if (output_der)
                {
                (void)i2d_X509_bio(bp,x);
                return;
                }
-
+#if 0
+       /* ??? Not needed since X509_print prints all this stuff anyway */
        f=X509_NAME_oneline(X509_get_issuer_name(x),buf,256);
        BIO_printf(bp,"issuer :%s\n",f);
 
@@ -1913,10 +1923,9 @@
        BIO_puts(bp,"serial :");
        i2a_ASN1_INTEGER(bp,x->cert_info->serialNumber);
        BIO_puts(bp,"\n\n");
-       X509_print(bp,x);
-       BIO_puts(bp,"\n");
+#endif
+       if(!notext)X509_print(bp,x);
        PEM_write_bio_X509(bp,x);
-       BIO_puts(bp,"\n");
        }
 
 static int certify_spkac(X509 **xret, char *infile, EVP_PKEY *pkey, X509 *x509,
@@ -1929,7 +1938,6 @@
        X509_REQ *req=NULL;
        CONF_VALUE *cv=NULL;
        NETSCAPE_SPKI *spki = NULL;
-       unsigned char *spki_der = NULL,*p;
        X509_REQ_INFO *ri;
        char *type,*buf;
        EVP_PKEY *pktmp=NULL;
@@ -1986,31 +1994,22 @@
 
                cv=sk_CONF_VALUE_value(sk,i);
                type=cv->name;
-               buf=cv->value;
+               /* Skip past any leading X. X: X, etc to allow for
+                * multiple instances
+                */
+               for(buf = cv->name; *buf ; buf++)
+                       if ((*buf == ':') || (*buf == ',') || (*buf == '.')) {
+                                       buf++;
+                                       if(*buf) type = buf;
+                                       break;
+               }
 
+               buf=cv->value;
                if ((nid=OBJ_txt2nid(type)) == NID_undef)
                        {
                        if (strcmp(type, "SPKAC") == 0)
                                {
-                               spki_der=(unsigned char *)Malloc(
-                                       strlen(cv->value)+1);
-                               if (spki_der == NULL)
-                                       {
-                                       BIO_printf(bio_err,"Malloc failure\n");
-                                       goto err;
-                                       }
-                               j = EVP_DecodeBlock(spki_der, (unsigned char 
*)cv->value,
-                                       strlen(cv->value));
-                               if (j <= 0)
-                                       {
-                                       BIO_printf(bio_err, "Can't b64 decode SPKAC 
structure\n");
-                                       goto err;
-                                       }
-
-                               p=spki_der;
-                               spki = d2i_NETSCAPE_SPKI(&spki, &p, j);
-                               Free(spki_der);
-                               spki_der = NULL;
+                               spki = NETSCAPE_SPKI_b64_decode(cv->value, -1);
                                if (spki == NULL)
                                        {
                                        BIO_printf(bio_err,"unable to load Netscape 
SPKAC structure\n");
@@ -2034,8 +2033,7 @@
                        strlen(buf))) == NULL)
                        goto err;
 
-               if (!X509_NAME_add_entry(n,ne,X509_NAME_entry_count(n),0))
-                       goto err;
+               if (!X509_NAME_add_entry(n,ne,-1, 0)) goto err;
                }
        if (spki == NULL)
                {
@@ -2050,7 +2048,7 @@
 
        BIO_printf(bio_err,"Check that the SPKAC request matches the signature\n");
 
-       if ((pktmp=X509_PUBKEY_get(spki->spkac->pubkey)) == NULL)
+       if ((pktmp=NETSCAPE_SPKI_get_pubkey(spki)) == NULL)
                {
                BIO_printf(bio_err,"error unpacking SPKAC public key\n");
                goto err;
@@ -2071,7 +2069,6 @@
 err:
        if (req != NULL) X509_REQ_free(req);
        if (parms != NULL) CONF_free(parms);
-       if (spki_der != NULL) Free(spki_der);
        if (spki != NULL) NETSCAPE_SPKI_free(spki);
        if (ne != NULL) X509_NAME_ENTRY_free(ne);
 
@@ -2127,20 +2124,26 @@
 
 static int do_revoke(X509 *x509, TXT_DB *db)
 {
-       ASN1_UTCTIME *tm=NULL;
+       ASN1_UTCTIME *tm=NULL, *revtm=NULL;
        char *row[DB_NUMBER],**rrow,**irow;
+       BIGNUM *bn = NULL;
        int ok=-1,i;
 
        for (i=0; i<DB_NUMBER; i++)
                row[i]=NULL;
-       row[DB_name]=X509_NAME_oneline(x509->cert_info->subject,NULL,0);
-       
row[DB_serial]=BN_bn2hex(ASN1_INTEGER_to_BN(x509->cert_info->serialNumber,NULL));
+       row[DB_name]=X509_NAME_oneline(X509_get_subject_name(x509),NULL,0);
+       bn = ASN1_INTEGER_to_BN(X509_get_serialNumber(x509),NULL);
+       row[DB_serial]=BN_bn2hex(bn);
+       BN_free(bn);
        if ((row[DB_name] == NULL) || (row[DB_serial] == NULL))
                {
                BIO_printf(bio_err,"Malloc failure\n");
                goto err;
                }
-       rrow=TXT_DB_get_by_index(db,DB_name,row);
+       /* We have to lookup by serial number because name lookup
+        * skips revoked certs
+        */
+       rrow=TXT_DB_get_by_index(db,DB_serial,row);
        if (rrow == NULL)
                {
                BIO_printf(bio_err,"Adding Entry to DB for %s\n", row[DB_name]);
@@ -2191,16 +2194,15 @@
                        }
 
                /* Revoke Certificate */
-               do_revoke(x509,db);
+               ok = do_revoke(x509,db);
 
-               ok=1;
                goto err;
 
                }
-       else if (index_serial_cmp(row,rrow))
+       else if (index_name_cmp(row,rrow))
                {
-               BIO_printf(bio_err,"ERROR:no same serial number %s\n",
-                          row[DB_serial]);
+               BIO_printf(bio_err,"ERROR:name does not match %s\n",
+                          row[DB_name]);
                goto err;
                }
        else if (rrow[DB_type][0]=='R')
@@ -2212,12 +2214,14 @@
        else
                {
                BIO_printf(bio_err,"Revoking Certificate %s.\n", rrow[DB_serial]);
-               tm=X509_gmtime_adj(tm,0);
+               revtm = ASN1_UTCTIME_new();
+               revtm=X509_gmtime_adj(revtm,0);
                rrow[DB_type][0]='R';
                rrow[DB_type][1]='\0';
-               rrow[DB_rev_date]=(char *)Malloc(tm->length+1);
-               memcpy(rrow[DB_rev_date],tm->data,tm->length);
-               rrow[DB_rev_date][tm->length]='\0';
+               rrow[DB_rev_date]=(char *)Malloc(revtm->length+1);
+               memcpy(rrow[DB_rev_date],revtm->data,revtm->length);
+               rrow[DB_rev_date][revtm->length]='\0';
+               ASN1_UTCTIME_free(revtm);
                }
        ok=1;
 err:
@@ -2226,7 +2230,6 @@
                if (row[i] != NULL) 
                        Free(row[i]);
                }
-       ASN1_UTCTIME_free(tm);
        return(ok);
 }
 
Index: opensa/openssl/apps/ca.com
diff -u opensa/openssl/apps/ca.com:1.1 opensa/openssl/apps/ca.com:1.2
--- opensa/openssl/apps/ca.com:1.1      Tue Jan 25 23:38:06 2000
+++ opensa/openssl/apps/ca.com  Thu Mar  2 21:11:48 2000
@@ -35,6 +35,7 @@
 $ CA     = openssl + " ca " + SSLEAY_CONFIG
 $ VERIFY = openssl + " verify"
 $ X509   = openssl + " x509"
+$ PKCS12 = openssl + " pkcs12"
 $ echo   = "write sys$Output"
 $!
 $ s = F$PARSE(F$ENVIRONMENT("DEFAULT"),"[]") - "].;"
@@ -96,10 +97,18 @@
 $     CREATE /DIR /PROTECTION=OWNER:RWED 'CATOP'.crl]
 $     CREATE /DIR /PROTECTION=OWNER:RWED 'CATOP'.newcerts]
 $     CREATE /DIR /PROTECTION=OWNER:RWED 'CATOP'.private]
+$
 $     OPEN   /WRITE ser_file 'CATOP']serial. 
 $     WRITE ser_file "01"
 $     CLOSE ser_file
 $     APPEND/NEW NL: 'CATOP']index.txt
+$
+$     ! The following is to make sure access() doesn't get confused.  It
+$     ! really needs one file in the directory to give correct answers...
+$     COPY NLA0: 'CATOP'.certs].;
+$     COPY NLA0: 'CATOP'.crl].;
+$     COPY NLA0: 'CATOP'.newcerts].;
+$     COPY NLA0: 'CATOP'.private].;
 $   ENDIF
 $!
 $   IF F$SEARCH(CATOP+".private"+CAKEY) .EQS. ""
@@ -119,6 +128,17 @@
 $     ENDIF
 $   ENDIF
 $   GOTO opt_loop_continue
+$ ENDIF
+$!
+$ IF (prog_opt .EQS. "-pkcs12")
+$ THEN
+$   i = i + 1
+$   cname = P'i'
+$   IF cname .EQS. "" THEN cname = "My certificate"
+$   PKCS12 -in newcert.pem -inkey newreq.pem -certfile 'CATOP''CACERT -
+          -out newcert.p12 -export -name "''cname'"
+$   RET=$STATUS
+$   exit RET
 $ ENDIF
 $!
 $ IF (prog_opt .EQS. "-xsign")
Index: opensa/openssl/apps/ca.pl
diff -u opensa/openssl/apps/ca.pl:1.1 opensa/openssl/apps/ca.pl:1.2
--- opensa/openssl/apps/ca.pl:1.1       Tue Jan 25 23:38:06 2000
+++ opensa/openssl/apps/ca.pl   Thu Mar  2 21:11:48 2000
@@ -1,4 +1,4 @@
-#!/usr/local/bin/perl
+#!/sw/bin/perl
 #
 # CA - wrapper around ca to make it easier to use ... basically ca requires
 #      some setup stuff to be done before you can use it and this makes
@@ -41,6 +41,7 @@
 $CA="openssl ca $SSLEAY_CONFIG";
 $VERIFY="openssl verify";
 $X509="openssl x509";
+$PKCS12="openssl pkcs12";
 
 $CATOP="./demoCA";
 $CAKEY="cakey.pem";
@@ -65,7 +66,7 @@
            $RET=$?;
            print "Request (and private key) is in newreq.pem\n";
        } elsif (/^-newca$/) {
-               # if explictly asked for or it doesn't exist then setup the
+               # if explicitly asked for or it doesn't exist then setup the
                # directory structure that Eric likes to manage things 
            $NEW="1";
            if ( "$NEW" || ! -f "${CATOP}/serial" ) {
@@ -99,6 +100,14 @@
                    $RET=$?;
                }
            }
+       } elsif (/^-pkcs12$/) {
+           my $cname = $ARGV[1];
+           $cname = "My Certificate" unless defined $cname;
+           system ("$PKCS12 -in newcert.pem -inkey newreq.pem " .
+                       "-certfile ${CATOP}/$CACERT -out newcert.p12 " .
+                       "-export -name \"$cname\"");
+           $RET=$?;
+           exit $RET;
        } elsif (/^-xsign$/) {
            system ("$CA -policy policy_anything -infiles newreq.pem");
            $RET=$?;
Index: opensa/openssl/apps/ca.sh
diff -u opensa/openssl/apps/ca.sh:1.1 opensa/openssl/apps/ca.sh:1.2
--- opensa/openssl/apps/ca.sh:1.1       Tue Jan 25 23:38:06 2000
+++ opensa/openssl/apps/ca.sh   Thu Mar  2 21:11:48 2000
@@ -60,7 +60,7 @@
     echo "Request (and private key) is in newreq.pem"
     ;;
 -newca)     
-    # if explictly asked for or it doesn't exist then setup the directory
+    # if explicitly asked for or it doesn't exist then setup the directory
     # structure that Eric likes to manage things 
     NEW="1"
     if [ "$NEW" -o ! -f ${CATOP}/serial ]; then
Index: opensa/openssl/apps/ciphers.c
diff -u opensa/openssl/apps/ciphers.c:1.1 opensa/openssl/apps/ciphers.c:1.2
--- opensa/openssl/apps/ciphers.c:1.1   Tue Jan 25 23:38:06 2000
+++ opensa/openssl/apps/ciphers.c       Thu Mar  2 21:11:48 2000
@@ -66,10 +66,6 @@
 #include <openssl/err.h>
 #include <openssl/ssl.h>
 
-#if defined(NO_RSA) && !defined(NO_SSL2)
-#define NO_SSL2
-#endif
-
 #undef PROG
 #define PROG   ciphers_main
 
@@ -81,6 +77,8 @@
 NULL
 };
 
+int MAIN(int, char **);
+
 int MAIN(int argc, char **argv)
        {
        int ret=1,i;
@@ -145,12 +143,16 @@
                goto end;
                }
 
-       SSLeay_add_ssl_algorithms();
+       OpenSSL_add_ssl_algorithms();
 
        ctx=SSL_CTX_new(meth);
        if (ctx == NULL) goto err;
-       if (ciphers != NULL)
-               SSL_CTX_set_cipher_list(ctx,ciphers);
+       if (ciphers != NULL) {
+               if(!SSL_CTX_set_cipher_list(ctx,ciphers)) {
+                       BIO_printf(bio_err, "Error in cipher list\n");
+                       goto err;
+               }
+       }
        ssl=SSL_new(ctx);
        if (ssl == NULL) goto err;
 
Index: opensa/openssl/apps/crl.c
diff -u opensa/openssl/apps/crl.c:1.1 opensa/openssl/apps/crl.c:1.2
--- opensa/openssl/apps/crl.c:1.1       Tue Jan 25 23:38:06 2000
+++ opensa/openssl/apps/crl.c   Thu Mar  2 21:11:48 2000
@@ -75,7 +75,7 @@
 static char *crl_usage[]={
 "usage: crl args\n",
 "\n",
-" -inform arg     - input format - default PEM (one of DER, TXT or PEM)\n",
+" -inform arg     - input format - default PEM (DER or PEM)\n",
 " -outform arg    - output format - default PEM\n",
 " -text           - print out a text format version\n",
 " -in arg         - input file - default stdin\n",
@@ -85,21 +85,32 @@
 " -lastupdate     - lastUpdate field\n",
 " -nextupdate     - nextUpdate field\n",
 " -noout          - no CRL output\n",
+" -CAfile  name   - verify CRL using certificates in file \"name\"\n",
+" -CApath  dir    - verify CRL using certificates in \"dir\"\n",
 NULL
 };
 
 static X509_CRL *load_crl(char *file, int format);
 static BIO *bio_out=NULL;
 
+int MAIN(int, char **);
+
 int MAIN(int argc, char **argv)
        {
        X509_CRL *x=NULL;
+       char *CAfile = NULL, *CApath = NULL;
        int ret=1,i,num,badops=0;
        BIO *out=NULL;
        int informat,outformat;
        char *infile=NULL,*outfile=NULL;
        int hash=0,issuer=0,lastupdate=0,nextupdate=0,noout=0,text=0;
        char **pp,buf[256];
+       X509_STORE *store = NULL;
+       X509_STORE_CTX ctx;
+       X509_LOOKUP *lookup = NULL;
+       X509_OBJECT xobj;
+       EVP_PKEY *pkey;
+       int do_ver = 0;
 
        apps_startup();
 
@@ -146,6 +157,20 @@
                        if (--argc < 1) goto bad;
                        outfile= *(++argv);
                        }
+               else if (strcmp(*argv,"-CApath") == 0)
+                       {
+                       if (--argc < 1) goto bad;
+                       CApath = *(++argv);
+                       do_ver = 1;
+                       }
+               else if (strcmp(*argv,"-CAfile") == 0)
+                       {
+                       if (--argc < 1) goto bad;
+                       CAfile = *(++argv);
+                       do_ver = 1;
+                       }
+               else if (strcmp(*argv,"-verify") == 0)
+                       do_ver = 1;
                else if (strcmp(*argv,"-text") == 0)
                        text = 1;
                else if (strcmp(*argv,"-hash") == 0)
@@ -177,36 +202,74 @@
                }
 
        ERR_load_crypto_strings();
-       X509V3_add_standard_extensions();
        x=load_crl(infile,informat);
        if (x == NULL) { goto end; }
 
+       if(do_ver) {
+               store = X509_STORE_new();
+               lookup=X509_STORE_add_lookup(store,X509_LOOKUP_file());
+               if (lookup == NULL) goto end;
+               if (!X509_LOOKUP_load_file(lookup,CAfile,X509_FILETYPE_PEM))
+                       X509_LOOKUP_load_file(lookup,NULL,X509_FILETYPE_DEFAULT);
+                       
+               lookup=X509_STORE_add_lookup(store,X509_LOOKUP_hash_dir());
+               if (lookup == NULL) goto end;
+               if (!X509_LOOKUP_add_dir(lookup,CApath,X509_FILETYPE_PEM))
+                       X509_LOOKUP_add_dir(lookup,NULL,X509_FILETYPE_DEFAULT);
+               ERR_clear_error();
+
+               X509_STORE_CTX_init(&ctx, store, NULL, NULL);
+
+               i = X509_STORE_get_by_subject(&ctx, X509_LU_X509, 
+                                       X509_CRL_get_issuer(x), &xobj);
+               if(i <= 0) {
+                       BIO_printf(bio_err,
+                               "Error getting CRL issuer certificate\n");
+                       goto end;
+               }
+               pkey = X509_get_pubkey(xobj.data.x509);
+               X509_OBJECT_free_contents(&xobj);
+               if(!pkey) {
+                       BIO_printf(bio_err,
+                               "Error getting CRL issuer public key\n");
+                       goto end;
+               }
+               i = X509_CRL_verify(x, pkey);
+               EVP_PKEY_free(pkey);
+               if(i < 0) goto end;
+               if(i == 0) BIO_printf(bio_err, "verify failure\n");
+               else BIO_printf(bio_err, "verify OK\n");
+       }
+
        if (num)
                {
                for (i=1; i<=num; i++)
                        {
                        if (issuer == i)
                                {
-                               X509_NAME_oneline(x->crl->issuer,buf,256);
+                               X509_NAME_oneline(X509_CRL_get_issuer(x),
+                                                               buf,256);
                                BIO_printf(bio_out,"issuer= %s\n",buf);
                                }
 
                        if (hash == i)
                                {
                                BIO_printf(bio_out,"%08lx\n",
-                                       X509_NAME_hash(x->crl->issuer));
+                                       X509_NAME_hash(X509_CRL_get_issuer(x)));
                                }
                        if (lastupdate == i)
                                {
                                BIO_printf(bio_out,"lastUpdate=");
-                               ASN1_TIME_print(bio_out,x->crl->lastUpdate);
+                               ASN1_TIME_print(bio_out,
+                                               X509_CRL_get_lastUpdate(x));
                                BIO_printf(bio_out,"\n");
                                }
                        if (nextupdate == i)
                                {
                                BIO_printf(bio_out,"nextUpdate=");
-                               if (x->crl->nextUpdate != NULL)
-                                       ASN1_TIME_print(bio_out,x->crl->nextUpdate);
+                               if (X509_CRL_get_nextUpdate(x)) 
+                                       ASN1_TIME_print(bio_out,
+                                               X509_CRL_get_nextUpdate(x));
                                else
                                        BIO_printf(bio_out,"NONE");
                                BIO_printf(bio_out,"\n");
@@ -250,8 +313,12 @@
 end:
        BIO_free(out);
        BIO_free(bio_out);
+       bio_out=NULL;
        X509_CRL_free(x);
-       X509V3_EXT_cleanup();
+       if(store) {
+               X509_STORE_CTX_cleanup(&ctx);
+               X509_STORE_free(store);
+       }
        EXIT(ret);
        }
 
Index: opensa/openssl/apps/crl2p7.c
diff -u opensa/openssl/apps/crl2p7.c:1.1 opensa/openssl/apps/crl2p7.c:1.2
--- opensa/openssl/apps/crl2p7.c:1.1    Tue Jan 25 23:38:06 2000
+++ opensa/openssl/apps/crl2p7.c        Thu Mar  2 21:11:48 2000
@@ -76,12 +76,14 @@
 #undef PROG
 #define PROG   crl2pkcs7_main
 
-/* -inform arg - input format - default PEM (one of DER, TXT or PEM)
+/* -inform arg - input format - default PEM (DER or PEM)
  * -outform arg - output format - default PEM
  * -in arg     - input file - default stdin
  * -out arg    - output file - default stdout
  */
 
+int MAIN(int, char **);
+
 int MAIN(int argc, char **argv)
        {
        int i,badops=0;
@@ -157,8 +159,8 @@
 bad:
                BIO_printf(bio_err,"%s [options] <infile >outfile\n",prog);
                BIO_printf(bio_err,"where options are\n");
-               BIO_printf(bio_err," -inform arg    input format - one of DER TXT 
PEM\n");
-               BIO_printf(bio_err," -outform arg   output format - one of DER TXT 
PEM\n");
+               BIO_printf(bio_err," -inform arg    input format - DER or PEM\n");
+               BIO_printf(bio_err," -outform arg   output format - DER or PEM\n");
                BIO_printf(bio_err," -in arg        input file\n");
                BIO_printf(bio_err," -out arg       output file\n");
                BIO_printf(bio_err," -certfile arg  certificates file of chain to a 
trusted CA\n");
Index: opensa/openssl/apps/der_chop
diff -u opensa/openssl/apps/der_chop:1.1 opensa/openssl/apps/der_chop:1.2
--- opensa/openssl/apps/der_chop:1.1    Tue Jan 25 23:38:06 2000
+++ opensa/openssl/apps/der_chop        Thu Mar  2 21:11:48 2000
@@ -1,4 +1,4 @@
-#!/usr/local/bin/perl5
+#!/sw/bin/perl
 #
 # der_chop ... this is one total hack that Eric is really not proud of
 #              so don't look at it and don't ask for support
Index: opensa/openssl/apps/dgst.c
diff -u opensa/openssl/apps/dgst.c:1.1 opensa/openssl/apps/dgst.c:1.2
--- opensa/openssl/apps/dgst.c:1.1      Tue Jan 25 23:38:06 2000
+++ opensa/openssl/apps/dgst.c  Thu Mar  2 21:11:48 2000
@@ -74,6 +74,9 @@
 #define PROG   dgst_main
 
 void do_fp(unsigned char *buf,BIO *f,int sep);
+
+int MAIN(int, char **);
+
 int MAIN(int argc, char **argv)
        {
        unsigned char *buf=NULL;
Index: opensa/openssl/apps/dh.c
diff -u opensa/openssl/apps/dh.c:1.1 opensa/openssl/apps/dh.c:1.2
--- opensa/openssl/apps/dh.c:1.1        Tue Jan 25 23:38:06 2000
+++ opensa/openssl/apps/dh.c    Thu Mar  2 21:11:48 2000
@@ -72,7 +72,7 @@
 #undef PROG
 #define PROG   dh_main
 
-/* -inform arg - input format - default PEM (one of DER, TXT or PEM)
+/* -inform arg - input format - default PEM (DER or PEM)
  * -outform arg - output format - default PEM
  * -in arg     - input file - default stdin
  * -out arg    - output file - default stdout
@@ -82,6 +82,8 @@
  * -C
  */
 
+int MAIN(int, char **);
+
 int MAIN(int argc, char **argv)
        {
        DH *dh=NULL;
@@ -149,8 +151,8 @@
 bad:
                BIO_printf(bio_err,"%s [options] <infile >outfile\n",prog);
                BIO_printf(bio_err,"where options are\n");
-               BIO_printf(bio_err," -inform arg   input format - one of DER TXT 
PEM\n");
-               BIO_printf(bio_err," -outform arg  output format - one of DER TXT 
PEM\n");
+               BIO_printf(bio_err," -inform arg   input format - one of DER PEM\n");
+               BIO_printf(bio_err," -outform arg  output format - one of DER PEM\n");
                BIO_printf(bio_err," -in arg       input file\n");
                BIO_printf(bio_err," -out arg      output file\n");
                BIO_printf(bio_err," -check        check the DH parameters\n");
@@ -219,7 +221,7 @@
                BN_print(stdout,dh->g);
                printf("\n");
                if (dh->length != 0)
-                       printf("recomented private length=%ld\n",dh->length);
+                       printf("recommended private length=%ld\n",dh->length);
 #endif
                }
        
@@ -282,6 +284,7 @@
                printf("\tif ((dh->p == NULL) || (dh->g == NULL))\n");
                printf("\t\treturn(NULL);\n");
                printf("\treturn(dh);\n\t}\n");
+               Free(data);
                }
 
 
@@ -297,7 +300,7 @@
                        }
                if (!i)
                        {
-                       BIO_printf(bio_err,"unable to write DH paramaters\n");
+                       BIO_printf(bio_err,"unable to write DH parameters\n");
                        ERR_print_errors(bio_err);
                        goto end;
                        }
Index: opensa/openssl/apps/dsa.c
diff -u opensa/openssl/apps/dsa.c:1.1 opensa/openssl/apps/dsa.c:1.2
--- opensa/openssl/apps/dsa.c:1.1       Tue Jan 25 23:38:06 2000
+++ opensa/openssl/apps/dsa.c   Thu Mar  2 21:11:48 2000
@@ -83,6 +83,8 @@
  * -modulus    - print the DSA public key
  */
 
+int MAIN(int, char **);
+
 int MAIN(int argc, char **argv)
        {
        int ret=1;
@@ -91,7 +93,10 @@
        const EVP_CIPHER *enc=NULL;
        BIO *in=NULL,*out=NULL;
        int informat,outformat,text=0,noout=0;
+       int pubin = 0, pubout = 0;
        char *infile,*outfile,*prog;
+       char *passargin = NULL, *passargout = NULL;
+       char *passin = NULL, *passout = NULL;
        int modulus=0;
 
        apps_startup();
@@ -130,12 +135,26 @@
                        if (--argc < 1) goto bad;
                        outfile= *(++argv);
                        }
+               else if (strcmp(*argv,"-passin") == 0)
+                       {
+                       if (--argc < 1) goto bad;
+                       passargin= *(++argv);
+                       }
+               else if (strcmp(*argv,"-passout") == 0)
+                       {
+                       if (--argc < 1) goto bad;
+                       passargout= *(++argv);
+                       }
                else if (strcmp(*argv,"-noout") == 0)
                        noout=1;
                else if (strcmp(*argv,"-text") == 0)
                        text=1;
                else if (strcmp(*argv,"-modulus") == 0)
                        modulus=1;
+               else if (strcmp(*argv,"-pubin") == 0)
+                       pubin=1;
+               else if (strcmp(*argv,"-pubout") == 0)
+                       pubout=1;
                else if ((enc=EVP_get_cipherbyname(&(argv[0][1]))) == NULL)
                        {
                        BIO_printf(bio_err,"unknown option %s\n",*argv);
@@ -151,23 +170,30 @@
 bad:
                BIO_printf(bio_err,"%s [options] <infile >outfile\n",prog);
                BIO_printf(bio_err,"where options are\n");
-               BIO_printf(bio_err," -inform arg   input format - one of DER NET 
PEM\n");
-               BIO_printf(bio_err," -outform arg  output format - one of DER NET 
PEM\n");
-               BIO_printf(bio_err," -in arg       input file\n");
-               BIO_printf(bio_err," -out arg      output file\n");
-               BIO_printf(bio_err," -des          encrypt PEM output with cbc des\n");
-               BIO_printf(bio_err," -des3         encrypt PEM output with ede cbc des 
using 168 bit key\n");
+               BIO_printf(bio_err," -inform arg     input format - DER or PEM\n");
+               BIO_printf(bio_err," -outform arg    output format - DER or PEM\n");
+               BIO_printf(bio_err," -in arg         input file\n");
+               BIO_printf(bio_err," -passin arg     input file pass phrase source\n");
+               BIO_printf(bio_err," -out arg        output file\n");
+               BIO_printf(bio_err," -passout arg    output file pass phrase 
+source\n");
+               BIO_printf(bio_err," -des            encrypt PEM output with cbc 
+des\n");
+               BIO_printf(bio_err," -des3           encrypt PEM output with ede cbc 
+des using 168 bit key\n");
 #ifndef NO_IDEA
-               BIO_printf(bio_err," -idea         encrypt PEM output with cbc 
idea\n");
+               BIO_printf(bio_err," -idea           encrypt PEM output with cbc 
+idea\n");
 #endif
-               BIO_printf(bio_err," -text         print the key in text\n");
-               BIO_printf(bio_err," -noout        don't print key out\n");
-               BIO_printf(bio_err," -modulus      print the DSA public value\n");
+               BIO_printf(bio_err," -text           print the key in text\n");
+               BIO_printf(bio_err," -noout          don't print key out\n");
+               BIO_printf(bio_err," -modulus        print the DSA public value\n");
                goto end;
                }
 
        ERR_load_crypto_strings();
 
+       if(!app_passwd(bio_err, passargin, passargout, &passin, &passout)) {
+               BIO_printf(bio_err, "Error getting passwords\n");
+               goto end;
+       }
+
        in=BIO_new(BIO_s_file());
        out=BIO_new(BIO_s_file());
        if ((in == NULL) || (out == NULL))
@@ -187,19 +213,21 @@
                        }
                }
 
-       BIO_printf(bio_err,"read DSA private key\n");
-       if      (informat == FORMAT_ASN1)
-               dsa=d2i_DSAPrivateKey_bio(in,NULL);
-       else if (informat == FORMAT_PEM)
-               dsa=PEM_read_bio_DSAPrivateKey(in,NULL,NULL,NULL);
-       else
+       BIO_printf(bio_err,"read DSA key\n");
+       if      (informat == FORMAT_ASN1) {
+               if(pubin) dsa=d2i_DSA_PUBKEY_bio(in,NULL);
+               else dsa=d2i_DSAPrivateKey_bio(in,NULL);
+       } else if (informat == FORMAT_PEM) {
+               if(pubin) dsa=PEM_read_bio_DSA_PUBKEY(in,NULL, NULL, NULL);
+               else dsa=PEM_read_bio_DSAPrivateKey(in,NULL,NULL,passin);
+       } else
                {
                BIO_printf(bio_err,"bad input format specified for key\n");
                goto end;
                }
        if (dsa == NULL)
                {
-               BIO_printf(bio_err,"unable to load Private Key\n");
+               BIO_printf(bio_err,"unable to load Key\n");
                ERR_print_errors(bio_err);
                goto end;
                }
@@ -231,12 +259,16 @@
                }
 
        if (noout) goto end;
-       BIO_printf(bio_err,"writing DSA private key\n");
-       if      (outformat == FORMAT_ASN1)
-               i=i2d_DSAPrivateKey_bio(out,dsa);
-       else if (outformat == FORMAT_PEM)
-               i=PEM_write_bio_DSAPrivateKey(out,dsa,enc,NULL,0,NULL,NULL);
-       else    {
+       BIO_printf(bio_err,"writing DSA key\n");
+       if      (outformat == FORMAT_ASN1) {
+               if(pubin || pubout) i=i2d_DSA_PUBKEY_bio(out,dsa);
+               else i=i2d_DSAPrivateKey_bio(out,dsa);
+       } else if (outformat == FORMAT_PEM) {
+               if(pubin || pubout)
+                       i=PEM_write_bio_DSA_PUBKEY(out,dsa);
+               else i=PEM_write_bio_DSAPrivateKey(out,dsa,enc,
+                                                       NULL,0,NULL, passout);
+       } else {
                BIO_printf(bio_err,"bad output format specified for outfile\n");
                goto end;
                }
@@ -248,9 +280,11 @@
        else
                ret=0;
 end:
-       if (in != NULL) BIO_free(in);
-       if (out != NULL) BIO_free(out);
-       if (dsa != NULL) DSA_free(dsa);
+       if(in != NULL) BIO_free(in);
+       if(out != NULL) BIO_free(out);
+       if(dsa != NULL) DSA_free(dsa);
+       if(passin) Free(passin);
+       if(passout) Free(passout);
        EXIT(ret);
        }
 #endif
Index: opensa/openssl/apps/dsaparam.c
diff -u opensa/openssl/apps/dsaparam.c:1.1 opensa/openssl/apps/dsaparam.c:1.2
--- opensa/openssl/apps/dsaparam.c:1.1  Tue Jan 25 23:38:06 2000
+++ opensa/openssl/apps/dsaparam.c      Thu Mar  2 21:11:48 2000
@@ -57,6 +57,7 @@
  */
 
 #ifndef NO_DSA
+#include <assert.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <time.h>
@@ -65,7 +66,6 @@
 #include <openssl/bio.h>
 #include <openssl/err.h>
 #include <openssl/bn.h>
-#include <openssl/rand.h>
 #include <openssl/dsa.h>
 #include <openssl/x509.h>
 #include <openssl/pem.h>
@@ -73,7 +73,7 @@
 #undef PROG
 #define PROG   dsaparam_main
 
-/* -inform arg - input format - default PEM (one of DER, TXT or PEM)
+/* -inform arg - input format - default PEM (DER or PEM)
  * -outform arg - output format - default PEM
  * -in arg     - input file - default stdin
  * -out arg    - output file - default stdout
@@ -84,7 +84,10 @@
  * -genkey
  */
 
-static void MS_CALLBACK dsa_cb(int p, int n, char *arg);
+static void MS_CALLBACK dsa_cb(int p, int n, void *arg);
+
+int MAIN(int, char **);
+
 int MAIN(int argc, char **argv)
        {
        DSA *dsa=NULL;
@@ -93,7 +96,7 @@
        int informat,outformat,noout=0,C=0,ret=1;
        char *infile,*outfile,*prog,*inrand=NULL;
        int numbits= -1,num,genkey=0;
-       char buffer[200],*randfile=NULL;
+       int need_rand=0;
 
        apps_startup();
 
@@ -136,11 +139,15 @@
                else if (strcmp(*argv,"-C") == 0)
                        C=1;
                else if (strcmp(*argv,"-genkey") == 0)
+                       {
                        genkey=1;
+                       need_rand=1;
+                       }
                else if (strcmp(*argv,"-rand") == 0)
                        {
                        if (--argc < 1) goto bad;
                        inrand= *(++argv);
+                       need_rand=1;
                        }
                else if (strcmp(*argv,"-noout") == 0)
                        noout=1;
@@ -148,6 +155,7 @@
                        {
                        /* generate a key */
                        numbits=num;
+                       need_rand=1;
                        }
                else
                        {
@@ -164,11 +172,11 @@
 bad:
                BIO_printf(bio_err,"%s [options] [bits] <infile >outfile\n",prog);
                BIO_printf(bio_err,"where options are\n");
-               BIO_printf(bio_err," -inform arg   input format - one of DER TXT 
PEM\n");
-               BIO_printf(bio_err," -outform arg  output format - one of DER TXT 
PEM\n");
+               BIO_printf(bio_err," -inform arg   input format - DER or PEM\n");
+               BIO_printf(bio_err," -outform arg  output format - DER or PEM\n");
                BIO_printf(bio_err," -in arg       input file\n");
                BIO_printf(bio_err," -out arg      output file\n");
-               BIO_printf(bio_err," -text         check the DSA parameters\n");
+               BIO_printf(bio_err," -text         print the key in text\n");
                BIO_printf(bio_err," -C            Output C code\n");
                BIO_printf(bio_err," -noout        no output\n");
                BIO_printf(bio_err," -rand         files to use for random number 
input\n");
@@ -207,15 +215,20 @@
                        }
                }
 
-       if (numbits > 0)
+       if (need_rand)
                {
-               randfile=RAND_file_name(buffer,200);
-               RAND_load_file(randfile,1024L*1024L);
+               app_RAND_load_file(NULL, bio_err, (inrand != NULL));
+               if (inrand != NULL)
+                       BIO_printf(bio_err,"%ld semi-random bytes loaded\n",
+                               app_RAND_load_files(inrand));
+               }
 
+       if (numbits > 0)
+               {
+               assert(need_rand);
                BIO_printf(bio_err,"Generating DSA parameters, %d bit long 
prime\n",num);
                BIO_printf(bio_err,"This could take some time\n");
-               dsa=DSA_generate_parameters(num,NULL,0,NULL,NULL,
-                       dsa_cb,(char *)bio_err);
+               dsa=DSA_generate_parameters(num,NULL,0,NULL,NULL, dsa_cb,bio_err);
                }
        else if (informat == FORMAT_ASN1)
                dsa=d2i_DSAparams_bio(in,NULL);
@@ -307,7 +320,7 @@
                        }
                if (!i)
                        {
-                       BIO_printf(bio_err,"unable to write DSA paramaters\n");
+                       BIO_printf(bio_err,"unable to write DSA parameters\n");
                        ERR_print_errors(bio_err);
                        goto end;
                        }
@@ -316,6 +329,7 @@
                {
                DSA *dsakey;
 
+               assert(need_rand);
                if ((dsakey=DSAparams_dup(dsa)) == NULL) goto end;
                if (!DSA_generate_key(dsakey)) goto end;
                if      (outformat == FORMAT_ASN1)
@@ -328,6 +342,8 @@
                        }
                DSA_free(dsakey);
                }
+       if (need_rand)
+               app_RAND_write_file(NULL, bio_err);
        ret=0;
 end:
        if (in != NULL) BIO_free(in);
@@ -336,7 +352,7 @@
        EXIT(ret);
        }
 
-static void MS_CALLBACK dsa_cb(int p, int n, char *arg)
+static void MS_CALLBACK dsa_cb(int p, int n, void *arg)
        {
        char c='*';
 
@@ -344,8 +360,8 @@
        if (p == 1) c='+';
        if (p == 2) c='*';
        if (p == 3) c='\n';
-       BIO_write((BIO *)arg,&c,1);
-       (void)BIO_flush((BIO *)arg);
+       BIO_write(arg,&c,1);
+       (void)BIO_flush(arg);
 #ifdef LINT
        p=n;
 #endif
Index: opensa/openssl/apps/enc.c
diff -u opensa/openssl/apps/enc.c:1.1 opensa/openssl/apps/enc.c:1.2
--- opensa/openssl/apps/enc.c:1.1       Tue Jan 25 23:38:06 2000
+++ opensa/openssl/apps/enc.c   Thu Mar  2 21:11:48 2000
@@ -65,6 +65,7 @@
 #include <openssl/evp.h>
 #include <openssl/objects.h>
 #include <openssl/x509.h>
+#include <openssl/rand.h>
 #ifndef NO_MD5
 #include <openssl/md5.h>
 #endif
@@ -79,17 +80,22 @@
 #define BSIZE  (8*1024)
 #define        PROG    enc_main
 
+int MAIN(int, char **);
+
 int MAIN(int argc, char **argv)
        {
+       static const char magic[]="Salted__";
+       char mbuf[8];   /* should be 1 smaller than magic */
        char *strbuf=NULL;
        unsigned char *buff=NULL,*bufsize=NULL;
        int bsize=BSIZE,verbose=0;
        int ret=1,inl;
        unsigned char key[24],iv[MD5_DIGEST_LENGTH];
-       char *str=NULL;
-       char *hkey=NULL,*hiv=NULL;
+       unsigned char salt[PKCS5_SALT_LEN];
+       char *str=NULL, *passarg = NULL, *pass = NULL;
+       char *hkey=NULL,*hiv=NULL,*hsalt = NULL;
        int enc=1,printkey=0,i,base64=0;
-       int debug=0,olb64=0;
+       int debug=0,olb64=0,nosalt=0;
        const EVP_CIPHER *cipher=NULL,*c;
        char *inf=NULL,*outf=NULL;
        BIO *in=NULL,*out=NULL,*b64=NULL,*benc=NULL,*rbio=NULL,*wbio=NULL;
@@ -130,14 +136,22 @@
                        if (--argc < 1) goto bad;
                        outf= *(++argv);
                        }
+               else if (strcmp(*argv,"-pass") == 0)
+                       {
+                       if (--argc < 1) goto bad;
+                       passarg= *(++argv);
+                       }
                else if (strcmp(*argv,"-d") == 0)
                        enc=0;
                else if (strcmp(*argv,"-p") == 0)
                        printkey=1;
                else if (strcmp(*argv,"-v") == 0)
                        verbose=1;
-               else if ((strcmp(*argv,"-debug") == 0) ||
-                        (strcmp(*argv,"-d") == 0))
+               else if (strcmp(*argv,"-salt") == 0)
+                       nosalt=0;
+               else if (strcmp(*argv,"-nosalt") == 0)
+                       nosalt=1;
+               else if (strcmp(*argv,"-debug") == 0)
                        debug=1;
                else if (strcmp(*argv,"-P") == 0)
                        printkey=2;
@@ -194,6 +208,11 @@
                        if (--argc < 1) goto bad;
                        hkey= *(++argv);
                        }
+               else if (strcmp(*argv,"-S") == 0)
+                       {
+                       if (--argc < 1) goto bad;
+                       hsalt= *(++argv);
+                       }
                else if (strcmp(*argv,"-iv") == 0)
                        {
                        if (--argc < 1) goto bad;
@@ -212,7 +231,8 @@
 bad:
                        BIO_printf(bio_err,"options are\n");
                        BIO_printf(bio_err,"%-14s input file\n","-in <file>");
-                       BIO_printf(bio_err,"%-14s output fileencrypt\n","-out <file>");
+                       BIO_printf(bio_err,"%-14s output file\n","-out <file>");
+                       BIO_printf(bio_err,"%-14s pass phrase source\n","-pass <arg>");
                        BIO_printf(bio_err,"%-14s encrypt\n","-e");
                        BIO_printf(bio_err,"%-14s decrypt\n","-d");
                        BIO_printf(bio_err,"%-14s base64 encode/decode, depending on 
encryption flag\n","-a/-base64");
@@ -233,7 +253,7 @@
                        BIO_printf(bio_err,"rc2     :128 bit key RC2 encryption\n");
 #endif
 #ifndef NO_BF
-                       BIO_printf(bio_err,"bf      :128 bit key BlowFish 
encryption\n");
+                       BIO_printf(bio_err,"bf      :128 bit key Blowfish 
+encryption\n");
 #endif
 #ifndef NO_RC4
                        BIO_printf(bio_err," -%-5s :128 bit key RC4 encryption\n",
@@ -357,6 +377,14 @@
                        }
                }
 
+       if(!str && passarg) {
+               if(!app_passwd(bio_err, passarg, NULL, &pass, NULL)) {
+                       BIO_printf(bio_err, "Error getting password\n");
+                       goto end;
+               }
+               str = pass;
+       }
+
        if ((str == NULL) && (cipher != NULL) && (hkey == NULL))
                {
                for (;;)
@@ -386,11 +414,83 @@
                        }
                }
 
+
+       if (outf == NULL)
+               BIO_set_fp(out,stdout,BIO_NOCLOSE);
+       else
+               {
+               if (BIO_write_filename(out,outf) <= 0)
+                       {
+                       perror(outf);
+                       goto end;
+                       }
+               }
+
+       rbio=in;
+       wbio=out;
+
+       if (base64)
+               {
+               if ((b64=BIO_new(BIO_f_base64())) == NULL)
+                       goto end;
+               if (debug)
+                       {
+                       BIO_set_callback(b64,BIO_debug_callback);
+                       BIO_set_callback_arg(b64,bio_err);
+                       }
+               if (olb64)
+                       BIO_set_flags(b64,BIO_FLAGS_BASE64_NO_NL);
+               if (enc)
+                       wbio=BIO_push(b64,wbio);
+               else
+                       rbio=BIO_push(b64,rbio);
+               }
+
        if (cipher != NULL)
                {
                if (str != NULL)
                        {
-                       EVP_BytesToKey(cipher,EVP_md5(),NULL,
+                       /* Salt handling: if encrypting generate a salt and
+                        * write to output BIO. If decrypting read salt from
+                        * input BIO.
+                        */
+                       unsigned char *sptr;
+                       if(nosalt) sptr = NULL;
+                       else {
+                               if(enc) {
+                                       if(hsalt) {
+                                               
+if(!set_hex(hsalt,salt,PKCS5_SALT_LEN)) {
+                                                       BIO_printf(bio_err,
+                                                               "invalid hex salt 
+value\n");
+                                                       goto end;
+                                               }
+                                       } else if (RAND_pseudo_bytes(salt, 
+PKCS5_SALT_LEN) < 0)
+                                               goto end;
+                                       /* If -P option then don't bother writing */
+                                       if((printkey != 2)
+                                          && (BIO_write(wbio,magic,
+                                                        sizeof magic-1) != sizeof 
+magic-1
+                                              || BIO_write(wbio,
+                                                           (char *)salt,
+                                                           PKCS5_SALT_LEN) != 
+PKCS5_SALT_LEN)) {
+                                               BIO_printf(bio_err,"error writing 
+output file\n");
+                                               goto end;
+                                       }
+                               } else if(BIO_read(rbio,mbuf,sizeof mbuf) != sizeof 
+mbuf
+                                         || BIO_read(rbio,
+                                                     (unsigned char *)salt,
+                                   PKCS5_SALT_LEN) != PKCS5_SALT_LEN) {
+                                       BIO_printf(bio_err,"error reading input 
+file\n");
+                                       goto end;
+                               } else if(memcmp(mbuf,magic,sizeof magic-1)) {
+                                   BIO_printf(bio_err,"bad magic number\n");
+                                   goto end;
+                               }
+
+                               sptr = salt;
+                       }
+
+                       EVP_BytesToKey(cipher,EVP_md5(),sptr,
                                (unsigned char *)str,
                                strlen(str),1,key,iv);
                        /* zero the complete buffer or the string
@@ -424,6 +524,13 @@
 
                if (printkey)
                        {
+                       if (!nosalt)
+                               {
+                               printf("salt=");
+                               for (i=0; i<PKCS5_SALT_LEN; i++)
+                                       printf("%02X",salt[i]);
+                               printf("\n");
+                               }
                        if (cipher->key_len > 0)
                                {
                                printf("key=");
@@ -446,38 +553,6 @@
                        }
                }
 
-
-       if (outf == NULL)
-               BIO_set_fp(out,stdout,BIO_NOCLOSE);
-       else
-               {
-               if (BIO_write_filename(out,outf) <= 0)
-                       {
-                       perror(outf);
-                       goto end;
-                       }
-               }
-
-       rbio=in;
-       wbio=out;
-
-       if (base64)
-               {
-               if ((b64=BIO_new(BIO_f_base64())) == NULL)
-                       goto end;
-               if (debug)
-                       {
-                       BIO_set_callback(b64,BIO_debug_callback);
-                       BIO_set_callback_arg(b64,bio_err);
-                       }
-               if (olb64)
-                       BIO_set_flags(b64,BIO_FLAGS_BASE64_NO_NL);
-               if (enc)
-                       wbio=BIO_push(b64,wbio);
-               else
-                       rbio=BIO_push(b64,rbio);
-               }
-
        /* Only encrypt/decrypt as we write the file */
        if (benc != NULL)
                wbio=BIO_push(benc,wbio);
@@ -505,12 +580,14 @@
                BIO_printf(bio_err,"bytes written:%8ld\n",BIO_number_written(out));
                }
 end:
+       ERR_print_errors(bio_err);
        if (strbuf != NULL) Free(strbuf);
        if (buff != NULL) Free(buff);
        if (in != NULL) BIO_free(in);
        if (out != NULL) BIO_free(out);
        if (benc != NULL) BIO_free(benc);
        if (b64 != NULL) BIO_free(b64);
+       if(pass) Free(pass);
        EXIT(ret);
        }
 
Index: opensa/openssl/apps/errstr.c
diff -u opensa/openssl/apps/errstr.c:1.1 opensa/openssl/apps/errstr.c:1.2
--- opensa/openssl/apps/errstr.c:1.1    Tue Jan 25 23:38:06 2000
+++ opensa/openssl/apps/errstr.c        Thu Mar  2 21:11:48 2000
@@ -68,6 +68,8 @@
 #undef PROG
 #define PROG   errstr_main
 
+int MAIN(int, char **);
+
 int MAIN(int argc, char **argv)
        {
        int i,ret=0;
Index: opensa/openssl/apps/gendh.c
diff -u opensa/openssl/apps/gendh.c:1.1 opensa/openssl/apps/gendh.c:1.2
--- opensa/openssl/apps/gendh.c:1.1     Tue Jan 25 23:38:06 2000
+++ opensa/openssl/apps/gendh.c Thu Mar  2 21:11:48 2000
@@ -75,15 +75,16 @@
 #define PROG gendh_main
 
 static void MS_CALLBACK dh_cb(int p, int n, void *arg);
-static long dh_load_rand(char *names);
+
+int MAIN(int, char **);
+
 int MAIN(int argc, char **argv)
        {
-       char buffer[200];
        DH *dh=NULL;
        int ret=1,num=DEFBITS;
        int g=2;
        char *outfile=NULL;
-       char *inrand=NULL,*randfile;
+       char *inrand=NULL;
        BIO *out=NULL;
 
        apps_startup();
@@ -149,18 +150,14 @@
                        goto end;
                        }
                }
-
-       randfile=RAND_file_name(buffer,200);
-       if ((randfile == NULL)|| !RAND_load_file(randfile,1024L*1024L))
-               BIO_printf(bio_err,"unable to load 'random state'\n");
 
-       if (inrand == NULL)
-               BIO_printf(bio_err,"warning, not much extra random data, consider 
using the -rand option\n");
-       else
+       if (!app_RAND_load_file(NULL, bio_err, 1) && inrand == NULL)
                {
-               BIO_printf(bio_err,"%ld semi-random bytes loaded\n",
-                       dh_load_rand(inrand));
+               BIO_printf(bio_err,"warning, not much extra random data, consider 
+using the -rand option\n");
                }
+       if (inrand != NULL)
+               BIO_printf(bio_err,"%ld semi-random bytes loaded\n",
+                       app_RAND_load_files(inrand));
 
        BIO_printf(bio_err,"Generating DH parameters, %d bit long strong prime, 
generator of %d\n",num,g);
        BIO_printf(bio_err,"This is going to take a long time\n");
@@ -168,10 +165,7 @@
                
        if (dh == NULL) goto end;
 
-       if (randfile == NULL)
-               BIO_printf(bio_err,"unable to write 'random state'\n");
-       else
-               RAND_write_file(randfile);
+       app_RAND_write_file(NULL, bio_err);
 
        if (!PEM_write_bio_DHparams(out,dh))
                goto end;
@@ -197,27 +191,5 @@
 #ifdef LINT
        p=n;
 #endif
-       }
-
-static long dh_load_rand(char *name)
-       {
-       char *p,*n;
-       int last;
-       long tot=0;
-
-       for (;;)
-               {
-               last=0;
-               for (p=name; ((*p != '\0') && (*p != LIST_SEPARATOR_CHAR)); p++);
-               if (*p == '\0') last=1;
-               *p='\0';
-               n=name;
-               name=p+1;
-               if (*n == '\0') break;
-
-               tot+=RAND_load_file(n,1);
-               if (last) break;
-               }
-       return(tot);
        }
 #endif
Index: opensa/openssl/apps/gendsa.c
diff -u opensa/openssl/apps/gendsa.c:1.1 opensa/openssl/apps/gendsa.c:1.2
--- opensa/openssl/apps/gendsa.c:1.1    Tue Jan 25 23:38:06 2000
+++ opensa/openssl/apps/gendsa.c        Thu Mar  2 21:11:48 2000
@@ -63,7 +63,6 @@
 #include <sys/stat.h>
 #include "apps.h"
 #include <openssl/bio.h>
-#include <openssl/rand.h>
 #include <openssl/err.h>
 #include <openssl/bn.h>
 #include <openssl/dsa.h>
@@ -74,14 +73,15 @@
 #undef PROG
 #define PROG gendsa_main
 
-static long dsa_load_rand(char *names);
+int MAIN(int, char **);
+
 int MAIN(int argc, char **argv)
        {
-       char buffer[200];
        DSA *dsa=NULL;
        int ret=1;
        char *outfile=NULL;
-       char *inrand=NULL,*randfile,*dsaparams=NULL;
+       char *inrand=NULL,*dsaparams=NULL;
+       char *passargout = NULL, *passout = NULL;
        BIO *out=NULL,*in=NULL;
        EVP_CIPHER *enc=NULL;
 
@@ -101,6 +101,11 @@
                        if (--argc < 1) goto bad;
                        outfile= *(++argv);
                        }
+               else if (strcmp(*argv,"-passout") == 0)
+                       {
+                       if (--argc < 1) goto bad;
+                       passargout= *(++argv);
+                       }
                else if (strcmp(*argv,"-rand") == 0)
                        {
                        if (--argc < 1) goto bad;
@@ -148,6 +153,12 @@
                goto end;
                }
 
+       if(!app_passwd(bio_err, NULL, passargout, NULL, &passout)) {
+               BIO_printf(bio_err, "Error getting password\n");
+               goto end;
+       }
+
+
        in=BIO_new(BIO_s_file());
        if (!(BIO_read_filename(in,dsaparams)))
                {
@@ -161,6 +172,7 @@
                goto end;
                }
        BIO_free(in);
+       in = NULL;
                
        out=BIO_new(BIO_s_file());
        if (out == NULL) goto end;
@@ -175,58 +187,31 @@
                        goto end;
                        }
                }
-
-       randfile=RAND_file_name(buffer,200);
-       if ((randfile == NULL)|| !RAND_load_file(randfile,1024L*1024L))
-               BIO_printf(bio_err,"unable to load 'random state'\n");
 
-       if (inrand == NULL)
-               BIO_printf(bio_err,"warning, not much extra random data, consider 
using the -rand option\n");
-       else
+       if (!app_RAND_load_file(NULL, bio_err, 1) && inrand == NULL)
                {
-               BIO_printf(bio_err,"%ld semi-random bytes loaded\n",
-                       dsa_load_rand(inrand));
+               BIO_printf(bio_err,"warning, not much extra random data, consider 
+using the -rand option\n");
                }
+       if (inrand != NULL)
+               BIO_printf(bio_err,"%ld semi-random bytes loaded\n",
+                       app_RAND_load_files(inrand));
 
        BIO_printf(bio_err,"Generating DSA key, %d bits\n",
                                                        BN_num_bits(dsa->p));
        if (!DSA_generate_key(dsa)) goto end;
 
-       if (randfile == NULL)
-               BIO_printf(bio_err,"unable to write 'random state'\n");
-       else
-               RAND_write_file(randfile);
+       app_RAND_write_file(NULL, bio_err);
 
-       if (!PEM_write_bio_DSAPrivateKey(out,dsa,enc,NULL,0,NULL,NULL))
+       if (!PEM_write_bio_DSAPrivateKey(out,dsa,enc,NULL,0,NULL, passout))
                goto end;
        ret=0;
 end:
        if (ret != 0)
                ERR_print_errors(bio_err);
+       if (in != NULL) BIO_free(in);
        if (out != NULL) BIO_free(out);
        if (dsa != NULL) DSA_free(dsa);
+       if(passout) Free(passout);
        EXIT(ret);
-       }
-
-static long dsa_load_rand(char *name)
-       {
-       char *p,*n;
-       int last;
-       long tot=0;
-
-       for (;;)
-               {
-               last=0;
-               for (p=name; ((*p != '\0') && (*p != LIST_SEPARATOR_CHAR)); p++);
-               if (*p == '\0') last=1;
-               *p='\0';
-               n=name;
-               name=p+1;
-               if (*n == '\0') break;
-
-               tot+=RAND_load_file(n,1);
-               if (last) break;
-               }
-       return(tot);
        }
 #endif
Index: opensa/openssl/apps/genrsa.c
diff -u opensa/openssl/apps/genrsa.c:1.1 opensa/openssl/apps/genrsa.c:1.2
--- opensa/openssl/apps/genrsa.c:1.1    Tue Jan 25 23:38:06 2000
+++ opensa/openssl/apps/genrsa.c        Thu Mar  2 21:11:48 2000
@@ -63,7 +63,6 @@
 #include <sys/stat.h>
 #include "apps.h"
 #include <openssl/bio.h>
-#include <openssl/rand.h>
 #include <openssl/err.h>
 #include <openssl/bn.h>
 #include <openssl/rsa.h>
@@ -76,18 +75,20 @@
 #define PROG genrsa_main
 
 static void MS_CALLBACK genrsa_cb(int p, int n, void *arg);
-static long gr_load_rand(char *names);
+
+int MAIN(int, char **);
+
 int MAIN(int argc, char **argv)
        {
        int ret=1;
-       char buffer[200];
        RSA *rsa=NULL;
        int i,num=DEFBITS;
-       long rnum=0,l;
+       long l;
        EVP_CIPHER *enc=NULL;
        unsigned long f4=RSA_F4;
        char *outfile=NULL;
-       char *inrand=NULL,*randfile;
+       char *passargout = NULL, *passout = NULL;
+       char *inrand=NULL;
        BIO *out=NULL;
 
        apps_startup();
@@ -97,7 +98,7 @@
                        BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
        if ((out=BIO_new(BIO_s_file())) == NULL)
                {
-               BIO_printf(bio_err,"unable to creat BIO for output\n");
+               BIO_printf(bio_err,"unable to create BIO for output\n");
                goto err;
                }
 
@@ -130,6 +131,11 @@
                else if (strcmp(*argv,"-idea") == 0)
                        enc=EVP_idea_cbc();
 #endif
+               else if (strcmp(*argv,"-passout") == 0)
+                       {
+                       if (--argc < 1) goto bad;
+                       passargout= *(++argv);
+                       }
                else
                        break;
                argv++;
@@ -139,21 +145,28 @@
                {
 bad:
                BIO_printf(bio_err,"usage: genrsa [args] [numbits]\n");
-               BIO_printf(bio_err," -des      - encrypt the generated key with DES in 
cbc mode\n");
-               BIO_printf(bio_err," -des3     - encrypt the generated key with DES in 
ede cbc mode (168 bit key)\n");
+               BIO_printf(bio_err," -des            encrypt the generated key with 
+DES in cbc mode\n");
+               BIO_printf(bio_err," -des3           encrypt the generated key with 
+DES in ede cbc mode (168 bit key)\n");
 #ifndef NO_IDEA
-               BIO_printf(bio_err," -idea     - encrypt the generated key with IDEA 
in cbc mode\n");
+               BIO_printf(bio_err," -idea           encrypt the generated key with 
+IDEA in cbc mode\n");
 #endif
-               BIO_printf(bio_err," -out file - output the key to 'file\n");
-               BIO_printf(bio_err," -f4       - use F4 (0x10001) for the E value\n");
-               BIO_printf(bio_err," -3        - use 3 for the E value\n");
+               BIO_printf(bio_err," -out file       output the key to 'file\n");
+               BIO_printf(bio_err," -passout arg    output file pass phrase 
+source\n");
+               BIO_printf(bio_err," -f4             use F4 (0x10001) for the E 
+value\n");
+               BIO_printf(bio_err," -3              use 3 for the E value\n");
                BIO_printf(bio_err," -rand file:file:...\n");
-               BIO_printf(bio_err,"           - load the file (or the files in the 
directory) into\n");
-               BIO_printf(bio_err,"             the random number generator\n");
+               BIO_printf(bio_err,"                 load the file (or the files in 
+the directory) into\n");
+               BIO_printf(bio_err,"                 the random number generator\n");
                goto err;
                }
                
        ERR_load_crypto_strings();
+
+       if(!app_passwd(bio_err, NULL, passargout, NULL, &passout)) {
+               BIO_printf(bio_err, "Error getting password\n");
+               goto err;
+       }
+
        if (outfile == NULL)
                BIO_set_fp(out,stdout,BIO_NOCLOSE);
        else
@@ -165,45 +178,23 @@
                        }
                }
 
-#ifdef WINDOWS
-       BIO_printf(bio_err,"Loading 'screen' into random state -");
-       BIO_flush(bio_err);
-       RAND_screen();
-       BIO_printf(bio_err," done\n");
-#endif
-       randfile=RAND_file_name(buffer,200);
-       if ((randfile == NULL) ||
-                !(rnum=(long)RAND_load_file(randfile,1024L*1024L)))
+       if (!app_RAND_load_file(NULL, bio_err, 1) && inrand == NULL)
                {
-               BIO_printf(bio_err,"unable to load 'random state'\n");
+               BIO_printf(bio_err,"warning, not much extra random data, consider 
+using the -rand option\n");
                }
+       if (inrand != NULL)
+               BIO_printf(bio_err,"%ld semi-random bytes loaded\n",
+                       app_RAND_load_files(inrand));
 
-       if (inrand == NULL)
-               {
-               if (rnum == 0)
-                       {
-                       BIO_printf(bio_err,"warning, not much extra random data, 
consider using the -rand option\n");
-                       }
-               }
-       else
-               {
-               rnum+=gr_load_rand(inrand);
-               }
-       if (rnum != 0)
-               BIO_printf(bio_err,"%ld semi-random bytes loaded\n",rnum);
-
        BIO_printf(bio_err,"Generating RSA private key, %d bit long modulus\n",
                num);
        rsa=RSA_generate_key(num,f4,genrsa_cb,bio_err);
                
-       if (randfile == NULL)
-               BIO_printf(bio_err,"unable to write 'random state'\n");
-       else
-               RAND_write_file(randfile);
+       app_RAND_write_file(NULL, bio_err);
 
        if (rsa == NULL) goto err;
        
-       /* We need to do the folloing for when the base number size is <
+       /* We need to do the following for when the base number size is <
         * long, esp windows 3.1 :-(. */
        l=0L;
        for (i=0; i<rsa->e->top; i++)
@@ -215,13 +206,14 @@
                l+=rsa->e->d[i];
                }
        BIO_printf(bio_err,"e is %ld (0x%lX)\n",l,l);
-       if (!PEM_write_bio_RSAPrivateKey(out,rsa,enc,NULL,0,NULL,NULL))
+       if (!PEM_write_bio_RSAPrivateKey(out,rsa,enc,NULL,0,NULL, passout))
                goto err;
 
        ret=0;
 err:
        if (rsa != NULL) RSA_free(rsa);
        if (out != NULL) BIO_free(out);
+       if(passout) Free(passout);
        if (ret != 0)
                ERR_print_errors(bio_err);
        EXIT(ret);
@@ -241,26 +233,10 @@
        p=n;
 #endif
        }
+#else /* !NO_RSA */
 
-static long gr_load_rand(char *name)
-       {
-       char *p,*n;
-       int last;
-       long tot=0;
-
-       for (;;)
-               {
-               last=0;
-               for (p=name; ((*p != '\0') && (*p != LIST_SEPARATOR_CHAR)); p++);
-               if (*p == '\0') last=1;
-               *p='\0';
-               n=name;
-               name=p+1;
-               if (*n == '\0') break;
+# if PEDANTIC
+static void *dummy=&dummy;
+# endif
 
-               tot+=RAND_load_file(n,1024L*1024L);
-               if (last) break;
-               }
-       return(tot);
-       }
 #endif
Index: opensa/openssl/apps/makeapps.com
diff -u opensa/openssl/apps/makeapps.com:1.1 opensa/openssl/apps/makeapps.com:1.2
--- opensa/openssl/apps/makeapps.com:1.1        Tue Jan 25 23:38:06 2000
+++ opensa/openssl/apps/makeapps.com    Thu Mar  2 21:11:48 2000
@@ -79,7 +79,7 @@
 $! Define what programs should be compiled
 $!
 $ PROGRAMS := OPENSSL
-$!$ PROGRAMS := VERIFY,ASN1PARS,REQ,DGST,DH,ENC,GENDH,ERRSTR,CA,CRL,-
+$!$ PROGRAMS := VERIFY,ASN1PARS,REQ,DGST,DH,ENC,PASSWD,GENDH,ERRSTR,CA,CRL,-
 $!           RSA,DSA,DSAPARAM,-
 $!           X509,GENRSA,GENDSA,S_SERVER,S_CLIENT,SPEED,-
 $!           S_TIME,VERSION,PKCS7,CRL2P7,SESS_ID,CIPHERS,NSEQ,
@@ -152,20 +152,18 @@
 $!
 $! Define The Application Files.
 $!
-$ LIB_FILES = "VERIFY;ASN1PARS;REQ;DGST;DH;ENC;GENDH;"+-
-             "ERRSTR;CA;"+-
-             "PKCS7;CRL2P7;CRL;"+-
+$ LIB_FILES = "VERIFY;ASN1PARS;REQ;DGST;DH;DHPARAM;ENC;PASSWD;GENDH;ERRSTR;"+-
+             "CA;PKCS7;CRL2P7;CRL;"+-
              "RSA;DSA;DSAPARAM;"+-
              "X509;GENRSA;GENDSA;S_SERVER;S_CLIENT;SPEED;"+-
-             "S_TIME;APPS;S_CB;S_SOCKET;VERSION;SESS_ID;"+-
-             "CIPHERS;NSEQ;PKCS12;PKCS8"
-$ APP_FILES := 
OPENSSL,'OBJ_DIR'VERIFY.OBJ,ASN1PARS.OBJ,REQ.OBJ,DGST.OBJ,DH.OBJ,ENC.OBJ,GENDH.OBJ,-
-              ERRSTR.OBJ,CA.OBJ,-
-              PKCS7.OBJ,CRL2P7.OBJ,CRL.OBJ,-
+             "S_TIME;APPS;S_CB;S_SOCKET;APP_RAND;VERSION;SESS_ID;"+-
+             "CIPHERS;NSEQ;PKCS12;PKCS8;SPKAC;SMIME"
+$ APP_FILES := 
+OPENSSL,'OBJ_DIR'VERIFY.OBJ,ASN1PARS.OBJ,REQ.OBJ,DGST.OBJ,DH.OBJ,DHPARAM.OBJ,ENC.OBJ,PASSWD.OBJ,GENDH.OBJ,ERRSTR.OBJ,-
+              CA.OBJ,PKCS7.OBJ,CRL2P7.OBJ,CRL.OBJ,-
               RSA.OBJ,DSA.OBJ,DSAPARAM.OBJ,-
               X509.OBJ,GENRSA.OBJ,GENDSA.OBJ,S_SERVER.OBJ,S_CLIENT.OBJ,SPEED.OBJ,-
-              S_TIME.OBJ,APPS.OBJ,S_CB.OBJ,S_SOCKET.OBJ,VERSION.OBJ,SESS_ID.OBJ,-
-              CIPHERS.OBJ,NSEQ.OBJ,PKCS12.OBJ,PKCS8.OBJ
+              
+S_TIME.OBJ,APPS.OBJ,S_CB.OBJ,S_SOCKET.OBJ,APP_RAND.OBJ,VERSION.OBJ,SESS_ID.OBJ,-
+              CIPHERS.OBJ,NSEQ.OBJ,PKCS12.OBJ,PKCS8.OBJ,SPKAC.OBJ,SMIME.OBJ
 $ TCPIP_PROGRAMS = ",,"
 $ IF COMPILER .EQS. "VAXC" THEN -
      TCPIP_PROGRAMS = ",OPENSSL,"
@@ -808,12 +806,36 @@
 $! Set Up Initial CC Definitions, Possibly With User Ones
 $!
 $ CCDEFS = "VMS=1,MONOLITH"
+$ IF F$TRNLNM("OPENSSL_NO_ASM") THEN CCDEFS = CCDEFS + ",NO_ASM"
+$ IF F$TRNLNM("OPENSSL_NO_RSA") THEN CCDEFS = CCDEFS + ",NO_RSA"
+$ IF F$TRNLNM("OPENSSL_NO_DSA") THEN CCDEFS = CCDEFS + ",NO_DSA"
+$ IF F$TRNLNM("OPENSSL_NO_DH") THEN CCDEFS = CCDEFS + ",NO_DH"
+$ IF F$TRNLNM("OPENSSL_NO_MD2") THEN CCDEFS = CCDEFS + ",NO_MD2"
+$ IF F$TRNLNM("OPENSSL_NO_MD5") THEN CCDEFS = CCDEFS + ",NO_MD5"
+$ IF F$TRNLNM("OPENSSL_NO_RIPEMD") THEN CCDEFS = CCDEFS + ",NO_RIPEMD"
+$ IF F$TRNLNM("OPENSSL_NO_SHA") THEN CCDEFS = CCDEFS + ",NO_SHA"
+$ IF F$TRNLNM("OPENSSL_NO_SHA0") THEN CCDEFS = CCDEFS + ",NO_SHA0"
+$ IF F$TRNLNM("OPENSSL_NO_SHA1") THEN CCDEFS = CCDEFS + ",NO_SHA1"
+$ IF F$TRNLNM("OPENSSL_NO_DES")
+$ THEN
+$   CCDEFS = CCDEFS + ",NO_DES,NO_MDC2"
+$ ELSE
+$   IF F$TRNLNM("OPENSSL_NO_MDC2") THEN CCDEFS = CCDEFS + ",NO_MDC2"
+$ ENDIF
+$ IF F$TRNLNM("OPENSSL_NO_RC2") THEN CCDEFS = CCDEFS + ",NO_RC2"
+$ IF F$TRNLNM("OPENSSL_NO_RC4") THEN CCDEFS = CCDEFS + ",NO_RC4"
+$ IF F$TRNLNM("OPENSSL_NO_RC5") THEN CCDEFS = CCDEFS + ",NO_RC5"
+$ IF F$TRNLNM("OPENSSL_NO_IDEA") THEN CCDEFS = CCDEFS + ",NO_IDEA"
+$ IF F$TRNLNM("OPENSSL_NO_BF") THEN CCDEFS = CCDEFS + ",NO_BF"
+$ IF F$TRNLNM("OPENSSL_NO_CAST") THEN CCDEFS = CCDEFS + ",NO_CAST"
+$ IF F$TRNLNM("OPENSSL_NO_HMAC") THEN CCDEFS = CCDEFS + ",NO_HMAC"
+$ IF F$TRNLNM("OPENSSL_NO_SSL2") THEN CCDEFS = CCDEFS + ",NO_SSL2"
 $ IF F$TYPE(USER_CCDEFS) .NES. "" THEN CCDEFS = CCDEFS + "," + USER_CCDEFS
 $ CCEXTRAFLAGS = ""
 $ IF F$TYPE(USER_CCFLAGS) .NES. "" THEN CCEXTRAFLAGS = USER_CCFLAGS
-$ CCDISABLEWARNINGS = ""
+$ CCDISABLEWARNINGS = "LONGLONGTYPE,LONGLONGSUFX"
 $ IF F$TYPE(USER_CCDISABLEWARNINGS) .NES. "" THEN -
-       CCDISABLEWARNINGS = USER_CCDISABLEWARNINGS
+       CCDISABLEWARNINGS = CCDISABLEWARNINGS + "," + USER_CCDISABLEWARNINGS
 $!
 $!  Check To See If The User Entered A Valid Paramter.
 $!
Index: opensa/openssl/apps/makefile.ssl
diff -u opensa/openssl/apps/makefile.ssl:1.1 opensa/openssl/apps/makefile.ssl:1.2
--- opensa/openssl/apps/makefile.ssl:1.1        Tue Jan 25 23:38:06 2000
+++ opensa/openssl/apps/makefile.ssl    Thu Mar  2 21:11:48 2000
@@ -13,6 +13,7 @@
 MAKE=          make -f Makefile.ssl
 MAKEDEPEND=    $(TOP)/util/domd $(TOP)
 MAKEFILE=      Makefile.ssl
+PERL=/usr/local/bin/perl
 RM=            rm -f
 
 PEX_LIBS=
@@ -33,11 +34,11 @@
 
 EXE= $(PROGRAM)
 
-E_EXE= verify asn1pars req dgst dh enc gendh errstr ca crl \
-       rsa dsa dsaparam \
+E_EXE= verify asn1pars req dgst dh dhparam enc passwd gendh errstr \
+       ca crl rsa dsa dsaparam \
        x509 genrsa gendsa s_server s_client speed \
        s_time version pkcs7 crl2pkcs7 sess_id ciphers nseq pkcs12 \
-       pkcs8
+       pkcs8 spkac smime
 
 PROGS= $(PROGRAM).c
 
@@ -45,22 +46,24 @@
 A_SRC=apps.c
 S_OBJ= s_cb.o s_socket.o
 S_SRC= s_cb.c s_socket.c
+RAND_OBJ=app_rand.o
+RAND_SRC=app_rand.c
 
-E_OBJ= verify.o asn1pars.o req.o dgst.o dh.o enc.o gendh.o errstr.o ca.o \
-       pkcs7.o crl2p7.o crl.o \
+E_OBJ= verify.o asn1pars.o req.o dgst.o dh.o dhparam.o enc.o passwd.o gendh.o 
+errstr.o \
+       ca.o pkcs7.o crl2p7.o crl.o \
        rsa.o dsa.o dsaparam.o \
        x509.o genrsa.o gendsa.o s_server.o s_client.o speed.o \
-       s_time.o $(A_OBJ) $(S_OBJ) version.o sess_id.o \
-       ciphers.o nseq.o pkcs12.o pkcs8.o
+       s_time.o $(A_OBJ) $(S_OBJ) $(RAND_OBJ) version.o sess_id.o \
+       ciphers.o nseq.o pkcs12.o pkcs8.o spkac.o smime.o
 
 #      pem_mail.o
 
-E_SRC= verify.c asn1pars.c req.c dgst.c dh.c enc.c gendh.c errstr.c ca.c \
+E_SRC= verify.c asn1pars.c req.c dgst.c dh.c enc.c passwd.c gendh.c errstr.c ca.c \
        pkcs7.c crl2p7.c crl.c \
        rsa.c dsa.c dsaparam.c \
        x509.c genrsa.c gendsa.c s_server.c s_client.c speed.c \
-       s_time.c $(A_SRC) $(S_SRC) version.c sess_id.c \
-       ciphers.c nseq.c pkcs12.c pkcs8.c
+       s_time.c $(A_SRC) $(S_SRC) $(RAND_SRC) version.c sess_id.c \
+       ciphers.c nseq.c pkcs12.c pkcs8.c spkac.c smime.c
 
 #      pem_mail.c
 
@@ -81,7 +84,7 @@
 exe:   $(EXE)
 
 req: sreq.o $(A_OBJ) $(DLIBCRYPTO)
-       $(CC) -o req $(CFLAG) sreq.o $(A_OBJ) $(PEX_LIBS) $(LIBCRYPTO) $(EX_LIBS)
+       $(CC) -o req $(CFLAG) sreq.o $(A_OBJ) $(RAND_OBJ) $(PEX_LIBS) $(LIBCRYPTO) 
+$(EX_LIBS)
 
 sreq.o: req.c 
        $(CC) -c $(INCLUDES) $(CFLAG) -o sreq.o req.c
@@ -138,16 +141,44 @@
        $(CC) -o $(PROGRAM) $(CFLAGS) $(PROGRAM).o $(E_OBJ) $(PEX_LIBS) $(LIBSSL) 
$(LIBCRYPTO) $(EX_LIBS)
        @(cd ..; OPENSSL="`pwd`/apps/openssl"; export OPENSSL; sh tools/c_rehash certs)
 
-progs.h:
-       $(PERL) ./progs.pl $(E_EXE) >progs.h
+progs.h: progs.pl
+       $(PERL) progs.pl $(E_EXE) >progs.h
        $(RM) $(PROGRAM).o
 
 # DO NOT DELETE THIS LINE -- make depend depends on it.
 
-apps.o: ../include/openssl/bio.h ../include/openssl/buffer.h
-apps.o: ../include/openssl/crypto.h ../include/openssl/e_os.h
-apps.o: ../include/openssl/e_os2.h ../include/openssl/opensslconf.h
-apps.o: ../include/openssl/opensslv.h ../include/openssl/stack.h apps.h progs.h
+app_rand.o: ../include/openssl/asn1.h ../include/openssl/bio.h
+app_rand.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
+app_rand.o: ../include/openssl/buffer.h ../include/openssl/cast.h
+app_rand.o: ../include/openssl/crypto.h ../include/openssl/des.h
+app_rand.o: ../include/openssl/dh.h ../include/openssl/dsa.h
+app_rand.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
+app_rand.o: ../include/openssl/evp.h ../include/openssl/idea.h
+app_rand.o: ../include/openssl/md2.h ../include/openssl/md5.h
+app_rand.o: ../include/openssl/mdc2.h ../include/openssl/objects.h
+app_rand.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
+app_rand.o: ../include/openssl/pkcs7.h ../include/openssl/rand.h
+app_rand.o: ../include/openssl/rc2.h ../include/openssl/rc4.h
+app_rand.o: ../include/openssl/rc5.h ../include/openssl/ripemd.h
+app_rand.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
+app_rand.o: ../include/openssl/sha.h ../include/openssl/stack.h
+app_rand.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h
+apps.o: ../include/openssl/asn1.h ../include/openssl/bio.h
+apps.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
+apps.o: ../include/openssl/buffer.h ../include/openssl/cast.h
+apps.o: ../include/openssl/crypto.h ../include/openssl/des.h
+apps.o: ../include/openssl/dh.h ../include/openssl/dsa.h
+apps.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
+apps.o: ../include/openssl/evp.h ../include/openssl/idea.h
+apps.o: ../include/openssl/md2.h ../include/openssl/md5.h
+apps.o: ../include/openssl/mdc2.h ../include/openssl/objects.h
+apps.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
+apps.o: ../include/openssl/pkcs7.h ../include/openssl/rc2.h
+apps.o: ../include/openssl/rc4.h ../include/openssl/rc5.h
+apps.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
+apps.o: ../include/openssl/safestack.h ../include/openssl/sha.h
+apps.o: ../include/openssl/stack.h ../include/openssl/x509.h
+apps.o: ../include/openssl/x509_vfy.h apps.h
 asn1pars.o: ../include/openssl/asn1.h ../include/openssl/bio.h
 asn1pars.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
 asn1pars.o: ../include/openssl/buffer.h ../include/openssl/cast.h
@@ -165,7 +196,6 @@
 asn1pars.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
 asn1pars.o: ../include/openssl/sha.h ../include/openssl/stack.h
 asn1pars.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h
-asn1pars.o: progs.h
 ca.o: ../include/openssl/asn1.h ../include/openssl/bio.h
 ca.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
 ca.o: ../include/openssl/buffer.h ../include/openssl/cast.h
@@ -184,7 +214,7 @@
 ca.o: ../include/openssl/safestack.h ../include/openssl/sha.h
 ca.o: ../include/openssl/stack.h ../include/openssl/txt_db.h
 ca.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h
-ca.o: ../include/openssl/x509v3.h apps.h progs.h
+ca.o: ../include/openssl/x509v3.h apps.h
 ciphers.o: ../include/openssl/asn1.h ../include/openssl/bio.h
 ciphers.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
 ciphers.o: ../include/openssl/buffer.h ../include/openssl/cast.h
@@ -205,7 +235,6 @@
 ciphers.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
 ciphers.o: ../include/openssl/stack.h ../include/openssl/tls1.h
 ciphers.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h
-ciphers.o: progs.h
 crl.o: ../include/openssl/asn1.h ../include/openssl/bio.h
 crl.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
 crl.o: ../include/openssl/buffer.h ../include/openssl/cast.h
@@ -224,7 +253,7 @@
 crl.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
 crl.o: ../include/openssl/sha.h ../include/openssl/stack.h
 crl.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h
-crl.o: ../include/openssl/x509v3.h apps.h progs.h
+crl.o: ../include/openssl/x509v3.h apps.h
 crl2p7.o: ../include/openssl/asn1.h ../include/openssl/bio.h
 crl2p7.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
 crl2p7.o: ../include/openssl/buffer.h ../include/openssl/cast.h
@@ -242,7 +271,6 @@
 crl2p7.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
 crl2p7.o: ../include/openssl/sha.h ../include/openssl/stack.h
 crl2p7.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h
-crl2p7.o: progs.h
 dgst.o: ../include/openssl/asn1.h ../include/openssl/bio.h
 dgst.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
 dgst.o: ../include/openssl/buffer.h ../include/openssl/cast.h
@@ -259,7 +287,7 @@
 dgst.o: ../include/openssl/rc5.h ../include/openssl/ripemd.h
 dgst.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
 dgst.o: ../include/openssl/sha.h ../include/openssl/stack.h
-dgst.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h progs.h
+dgst.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h
 dh.o: ../include/openssl/asn1.h ../include/openssl/bio.h
 dh.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
 dh.o: ../include/openssl/buffer.h ../include/openssl/cast.h
@@ -276,7 +304,7 @@
 dh.o: ../include/openssl/rc5.h ../include/openssl/ripemd.h
 dh.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
 dh.o: ../include/openssl/sha.h ../include/openssl/stack.h
-dh.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h progs.h
+dh.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h
 dsa.o: ../include/openssl/asn1.h ../include/openssl/bio.h
 dsa.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
 dsa.o: ../include/openssl/buffer.h ../include/openssl/cast.h
@@ -293,7 +321,7 @@
 dsa.o: ../include/openssl/rc5.h ../include/openssl/ripemd.h
 dsa.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
 dsa.o: ../include/openssl/sha.h ../include/openssl/stack.h
-dsa.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h progs.h
+dsa.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h
 dsaparam.o: ../include/openssl/asn1.h ../include/openssl/bio.h
 dsaparam.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
 dsaparam.o: ../include/openssl/buffer.h ../include/openssl/cast.h
@@ -306,12 +334,11 @@
 dsaparam.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
 dsaparam.o: ../include/openssl/opensslv.h ../include/openssl/pem.h
 dsaparam.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
-dsaparam.o: ../include/openssl/rand.h ../include/openssl/rc2.h
-dsaparam.o: ../include/openssl/rc4.h ../include/openssl/rc5.h
-dsaparam.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
-dsaparam.o: ../include/openssl/safestack.h ../include/openssl/sha.h
-dsaparam.o: ../include/openssl/stack.h ../include/openssl/x509.h
-dsaparam.o: ../include/openssl/x509_vfy.h apps.h progs.h
+dsaparam.o: ../include/openssl/rc2.h ../include/openssl/rc4.h
+dsaparam.o: ../include/openssl/rc5.h ../include/openssl/ripemd.h
+dsaparam.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
+dsaparam.o: ../include/openssl/sha.h ../include/openssl/stack.h
+dsaparam.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h
 enc.o: ../include/openssl/asn1.h ../include/openssl/bio.h
 enc.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
 enc.o: ../include/openssl/buffer.h ../include/openssl/cast.h
@@ -324,11 +351,12 @@
 enc.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
 enc.o: ../include/openssl/opensslv.h ../include/openssl/pem.h
 enc.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
-enc.o: ../include/openssl/rc2.h ../include/openssl/rc4.h
-enc.o: ../include/openssl/rc5.h ../include/openssl/ripemd.h
-enc.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
-enc.o: ../include/openssl/sha.h ../include/openssl/stack.h
-enc.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h progs.h
+enc.o: ../include/openssl/rand.h ../include/openssl/rc2.h
+enc.o: ../include/openssl/rc4.h ../include/openssl/rc5.h
+enc.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
+enc.o: ../include/openssl/safestack.h ../include/openssl/sha.h
+enc.o: ../include/openssl/stack.h ../include/openssl/x509.h
+enc.o: ../include/openssl/x509_vfy.h apps.h
 errstr.o: ../include/openssl/asn1.h ../include/openssl/bio.h
 errstr.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
 errstr.o: ../include/openssl/buffer.h ../include/openssl/cast.h
@@ -349,7 +377,6 @@
 errstr.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
 errstr.o: ../include/openssl/stack.h ../include/openssl/tls1.h
 errstr.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h
-errstr.o: progs.h
 gendh.o: ../include/openssl/asn1.h ../include/openssl/bio.h
 gendh.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
 gendh.o: ../include/openssl/buffer.h ../include/openssl/cast.h
@@ -367,7 +394,7 @@
 gendh.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
 gendh.o: ../include/openssl/safestack.h ../include/openssl/sha.h
 gendh.o: ../include/openssl/stack.h ../include/openssl/x509.h
-gendh.o: ../include/openssl/x509_vfy.h apps.h progs.h
+gendh.o: ../include/openssl/x509_vfy.h apps.h
 gendsa.o: ../include/openssl/asn1.h ../include/openssl/bio.h
 gendsa.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
 gendsa.o: ../include/openssl/buffer.h ../include/openssl/cast.h
@@ -380,12 +407,11 @@
 gendsa.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
 gendsa.o: ../include/openssl/opensslv.h ../include/openssl/pem.h
 gendsa.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
-gendsa.o: ../include/openssl/rand.h ../include/openssl/rc2.h
-gendsa.o: ../include/openssl/rc4.h ../include/openssl/rc5.h
-gendsa.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
-gendsa.o: ../include/openssl/safestack.h ../include/openssl/sha.h
-gendsa.o: ../include/openssl/stack.h ../include/openssl/x509.h
-gendsa.o: ../include/openssl/x509_vfy.h apps.h progs.h
+gendsa.o: ../include/openssl/rc2.h ../include/openssl/rc4.h
+gendsa.o: ../include/openssl/rc5.h ../include/openssl/ripemd.h
+gendsa.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
+gendsa.o: ../include/openssl/sha.h ../include/openssl/stack.h
+gendsa.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h
 genrsa.o: ../include/openssl/asn1.h ../include/openssl/bio.h
 genrsa.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
 genrsa.o: ../include/openssl/buffer.h ../include/openssl/cast.h
@@ -398,12 +424,11 @@
 genrsa.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
 genrsa.o: ../include/openssl/opensslv.h ../include/openssl/pem.h
 genrsa.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
-genrsa.o: ../include/openssl/rand.h ../include/openssl/rc2.h
-genrsa.o: ../include/openssl/rc4.h ../include/openssl/rc5.h
-genrsa.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
-genrsa.o: ../include/openssl/safestack.h ../include/openssl/sha.h
-genrsa.o: ../include/openssl/stack.h ../include/openssl/x509.h
-genrsa.o: ../include/openssl/x509_vfy.h apps.h progs.h
+genrsa.o: ../include/openssl/rc2.h ../include/openssl/rc4.h
+genrsa.o: ../include/openssl/rc5.h ../include/openssl/ripemd.h
+genrsa.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
+genrsa.o: ../include/openssl/sha.h ../include/openssl/stack.h
+genrsa.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h
 nseq.o: ../include/openssl/asn1.h ../include/openssl/bio.h
 nseq.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
 nseq.o: ../include/openssl/buffer.h ../include/openssl/cast.h
@@ -420,7 +445,7 @@
 nseq.o: ../include/openssl/rc5.h ../include/openssl/ripemd.h
 nseq.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
 nseq.o: ../include/openssl/sha.h ../include/openssl/stack.h
-nseq.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h progs.h
+nseq.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h
 openssl.o: ../include/openssl/asn1.h ../include/openssl/bio.h
 openssl.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
 openssl.o: ../include/openssl/buffer.h ../include/openssl/cast.h
@@ -442,6 +467,23 @@
 openssl.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
 openssl.o: ../include/openssl/tls1.h ../include/openssl/x509.h
 openssl.o: ../include/openssl/x509_vfy.h apps.h progs.h s_apps.h
+passwd.o: ../include/openssl/asn1.h ../include/openssl/bio.h
+passwd.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
+passwd.o: ../include/openssl/buffer.h ../include/openssl/cast.h
+passwd.o: ../include/openssl/crypto.h ../include/openssl/des.h
+passwd.o: ../include/openssl/dh.h ../include/openssl/dsa.h
+passwd.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
+passwd.o: ../include/openssl/err.h ../include/openssl/evp.h
+passwd.o: ../include/openssl/idea.h ../include/openssl/md2.h
+passwd.o: ../include/openssl/md5.h ../include/openssl/mdc2.h
+passwd.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
+passwd.o: ../include/openssl/opensslv.h ../include/openssl/pkcs7.h
+passwd.o: ../include/openssl/rand.h ../include/openssl/rc2.h
+passwd.o: ../include/openssl/rc4.h ../include/openssl/rc5.h
+passwd.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
+passwd.o: ../include/openssl/safestack.h ../include/openssl/sha.h
+passwd.o: ../include/openssl/stack.h ../include/openssl/x509.h
+passwd.o: ../include/openssl/x509_vfy.h apps.h
 pkcs12.o: ../include/openssl/asn1.h ../include/openssl/bio.h
 pkcs12.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
 pkcs12.o: ../include/openssl/buffer.h ../include/openssl/cast.h
@@ -459,7 +501,7 @@
 pkcs12.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
 pkcs12.o: ../include/openssl/safestack.h ../include/openssl/sha.h
 pkcs12.o: ../include/openssl/stack.h ../include/openssl/x509.h
-pkcs12.o: ../include/openssl/x509_vfy.h apps.h progs.h
+pkcs12.o: ../include/openssl/x509_vfy.h apps.h
 pkcs7.o: ../include/openssl/asn1.h ../include/openssl/bio.h
 pkcs7.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
 pkcs7.o: ../include/openssl/buffer.h ../include/openssl/cast.h
@@ -476,7 +518,7 @@
 pkcs7.o: ../include/openssl/rc5.h ../include/openssl/ripemd.h
 pkcs7.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
 pkcs7.o: ../include/openssl/sha.h ../include/openssl/stack.h
-pkcs7.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h progs.h
+pkcs7.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h
 pkcs8.o: ../include/openssl/asn1.h ../include/openssl/bio.h
 pkcs8.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
 pkcs8.o: ../include/openssl/buffer.h ../include/openssl/cast.h
@@ -494,7 +536,7 @@
 pkcs8.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
 pkcs8.o: ../include/openssl/safestack.h ../include/openssl/sha.h
 pkcs8.o: ../include/openssl/stack.h ../include/openssl/x509.h
-pkcs8.o: ../include/openssl/x509_vfy.h apps.h progs.h
+pkcs8.o: ../include/openssl/x509_vfy.h apps.h
 req.o: ../include/openssl/asn1.h ../include/openssl/bio.h
 req.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
 req.o: ../include/openssl/buffer.h ../include/openssl/cast.h
@@ -508,12 +550,12 @@
 req.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
 req.o: ../include/openssl/opensslv.h ../include/openssl/pem.h
 req.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
-req.o: ../include/openssl/rand.h ../include/openssl/rc2.h
-req.o: ../include/openssl/rc4.h ../include/openssl/rc5.h
-req.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
-req.o: ../include/openssl/safestack.h ../include/openssl/sha.h
-req.o: ../include/openssl/stack.h ../include/openssl/x509.h
-req.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h progs.h
+req.o: ../include/openssl/rc2.h ../include/openssl/rc4.h
+req.o: ../include/openssl/rc5.h ../include/openssl/ripemd.h
+req.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
+req.o: ../include/openssl/sha.h ../include/openssl/stack.h
+req.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h
+req.o: ../include/openssl/x509v3.h apps.h
 rsa.o: ../include/openssl/asn1.h ../include/openssl/bio.h
 rsa.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
 rsa.o: ../include/openssl/buffer.h ../include/openssl/cast.h
@@ -530,7 +572,7 @@
 rsa.o: ../include/openssl/rc5.h ../include/openssl/ripemd.h
 rsa.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
 rsa.o: ../include/openssl/sha.h ../include/openssl/stack.h
-rsa.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h progs.h
+rsa.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h
 s_cb.o: ../include/openssl/asn1.h ../include/openssl/bio.h
 s_cb.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
 s_cb.o: ../include/openssl/buffer.h ../include/openssl/cast.h
@@ -550,8 +592,7 @@
 s_cb.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h
 s_cb.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
 s_cb.o: ../include/openssl/stack.h ../include/openssl/tls1.h
-s_cb.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h progs.h
-s_cb.o: s_apps.h
+s_cb.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h s_apps.h
 s_client.o: ../include/openssl/asn1.h ../include/openssl/bio.h
 s_client.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
 s_client.o: ../include/openssl/buffer.h ../include/openssl/cast.h
@@ -572,7 +613,7 @@
 s_client.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
 s_client.o: ../include/openssl/stack.h ../include/openssl/tls1.h
 s_client.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h
-s_client.o: progs.h s_apps.h
+s_client.o: s_apps.h
 s_server.o: ../include/openssl/asn1.h ../include/openssl/bio.h
 s_server.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
 s_server.o: ../include/openssl/buffer.h ../include/openssl/cast.h
@@ -593,7 +634,7 @@
 s_server.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
 s_server.o: ../include/openssl/stack.h ../include/openssl/tls1.h
 s_server.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h
-s_server.o: progs.h s_apps.h
+s_server.o: s_apps.h
 s_socket.o: ../include/openssl/asn1.h ../include/openssl/bio.h
 s_socket.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
 s_socket.o: ../include/openssl/buffer.h ../include/openssl/cast.h
@@ -613,7 +654,7 @@
 s_socket.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
 s_socket.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
 s_socket.o: ../include/openssl/tls1.h ../include/openssl/x509.h
-s_socket.o: ../include/openssl/x509_vfy.h apps.h progs.h s_apps.h
+s_socket.o: ../include/openssl/x509_vfy.h apps.h s_apps.h
 s_time.o: ../include/openssl/asn1.h ../include/openssl/bio.h
 s_time.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
 s_time.o: ../include/openssl/buffer.h ../include/openssl/cast.h
@@ -634,7 +675,7 @@
 s_time.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
 s_time.o: ../include/openssl/stack.h ../include/openssl/tls1.h
 s_time.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h
-s_time.o: progs.h s_apps.h
+s_time.o: s_apps.h
 sess_id.o: ../include/openssl/asn1.h ../include/openssl/bio.h
 sess_id.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
 sess_id.o: ../include/openssl/buffer.h ../include/openssl/cast.h
@@ -655,7 +696,23 @@
 sess_id.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
 sess_id.o: ../include/openssl/stack.h ../include/openssl/tls1.h
 sess_id.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h
-sess_id.o: progs.h
+smime.o: ../include/openssl/asn1.h ../include/openssl/bio.h
+smime.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
+smime.o: ../include/openssl/buffer.h ../include/openssl/cast.h
+smime.o: ../include/openssl/crypto.h ../include/openssl/des.h
+smime.o: ../include/openssl/dh.h ../include/openssl/dsa.h
+smime.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
+smime.o: ../include/openssl/err.h ../include/openssl/evp.h
+smime.o: ../include/openssl/idea.h ../include/openssl/md2.h
+smime.o: ../include/openssl/md5.h ../include/openssl/mdc2.h
+smime.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
+smime.o: ../include/openssl/opensslv.h ../include/openssl/pem.h
+smime.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
+smime.o: ../include/openssl/rc2.h ../include/openssl/rc4.h
+smime.o: ../include/openssl/rc5.h ../include/openssl/ripemd.h
+smime.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
+smime.o: ../include/openssl/sha.h ../include/openssl/stack.h
+smime.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h
 speed.o: ../include/openssl/asn1.h ../include/openssl/bio.h
 speed.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
 speed.o: ../include/openssl/buffer.h ../include/openssl/cast.h
@@ -673,15 +730,33 @@
 speed.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
 speed.o: ../include/openssl/sha.h ../include/openssl/stack.h
 speed.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h ./testdsa.h
-speed.o: ./testrsa.h apps.h progs.h
+speed.o: ./testrsa.h apps.h
+spkac.o: ../include/openssl/asn1.h ../include/openssl/bio.h
+spkac.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
+spkac.o: ../include/openssl/buffer.h ../include/openssl/cast.h
+spkac.o: ../include/openssl/crypto.h ../include/openssl/des.h
+spkac.o: ../include/openssl/dh.h ../include/openssl/dsa.h
+spkac.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
+spkac.o: ../include/openssl/err.h ../include/openssl/evp.h
+spkac.o: ../include/openssl/idea.h ../include/openssl/md2.h
+spkac.o: ../include/openssl/md5.h ../include/openssl/mdc2.h
+spkac.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
+spkac.o: ../include/openssl/opensslv.h ../include/openssl/pem.h
+spkac.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
+spkac.o: ../include/openssl/rc2.h ../include/openssl/rc4.h
+spkac.o: ../include/openssl/rc5.h ../include/openssl/ripemd.h
+spkac.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
+spkac.o: ../include/openssl/sha.h ../include/openssl/stack.h
+spkac.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h
 verify.o: ../include/openssl/asn1.h ../include/openssl/bio.h
 verify.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
 verify.o: ../include/openssl/buffer.h ../include/openssl/cast.h
-verify.o: ../include/openssl/crypto.h ../include/openssl/des.h
-verify.o: ../include/openssl/dh.h ../include/openssl/dsa.h
-verify.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
-verify.o: ../include/openssl/err.h ../include/openssl/evp.h
-verify.o: ../include/openssl/idea.h ../include/openssl/md2.h
+verify.o: ../include/openssl/conf.h ../include/openssl/crypto.h
+verify.o: ../include/openssl/des.h ../include/openssl/dh.h
+verify.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
+verify.o: ../include/openssl/e_os2.h ../include/openssl/err.h
+verify.o: ../include/openssl/evp.h ../include/openssl/idea.h
+verify.o: ../include/openssl/lhash.h ../include/openssl/md2.h
 verify.o: ../include/openssl/md5.h ../include/openssl/mdc2.h
 verify.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
 verify.o: ../include/openssl/opensslv.h ../include/openssl/pem.h
@@ -690,8 +765,8 @@
 verify.o: ../include/openssl/rc5.h ../include/openssl/ripemd.h
 verify.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
 verify.o: ../include/openssl/sha.h ../include/openssl/stack.h
-verify.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h apps.h
-verify.o: progs.h
+verify.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h
+verify.o: ../include/openssl/x509v3.h apps.h
 version.o: ../include/openssl/asn1.h ../include/openssl/bio.h
 version.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
 version.o: ../include/openssl/buffer.h ../include/openssl/cast.h
@@ -702,10 +777,12 @@
 version.o: ../include/openssl/md2.h ../include/openssl/md5.h
 version.o: ../include/openssl/mdc2.h ../include/openssl/objects.h
 version.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
-version.o: ../include/openssl/rc2.h ../include/openssl/rc4.h
-version.o: ../include/openssl/rc5.h ../include/openssl/ripemd.h
-version.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
-version.o: ../include/openssl/sha.h ../include/openssl/stack.h apps.h progs.h
+version.o: ../include/openssl/pkcs7.h ../include/openssl/rc2.h
+version.o: ../include/openssl/rc4.h ../include/openssl/rc5.h
+version.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
+version.o: ../include/openssl/safestack.h ../include/openssl/sha.h
+version.o: ../include/openssl/stack.h ../include/openssl/x509.h
+version.o: ../include/openssl/x509_vfy.h apps.h
 x509.o: ../include/openssl/asn1.h ../include/openssl/bio.h
 x509.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
 x509.o: ../include/openssl/buffer.h ../include/openssl/cast.h
@@ -724,4 +801,4 @@
 x509.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
 x509.o: ../include/openssl/sha.h ../include/openssl/stack.h
 x509.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h
-x509.o: ../include/openssl/x509v3.h apps.h progs.h
+x509.o: ../include/openssl/x509v3.h apps.h
Index: opensa/openssl/apps/nseq.c
diff -u opensa/openssl/apps/nseq.c:1.1 opensa/openssl/apps/nseq.c:1.2
--- opensa/openssl/apps/nseq.c:1.1      Tue Jan 25 23:38:06 2000
+++ opensa/openssl/apps/nseq.c  Thu Mar  2 21:11:48 2000
@@ -65,7 +65,7 @@
 #undef PROG
 #define PROG nseq_main
 
-static int dump_cert_text(BIO *out, X509 *x);
+int MAIN(int, char **);
 
 int MAIN(int argc, char **argv)
 {
@@ -156,19 +156,5 @@
        NETSCAPE_CERT_SEQUENCE_free(seq);
 
        EXIT(ret);
-}
-
-static int dump_cert_text(BIO *out, X509 *x)
-{
-       char buf[256];
-       X509_NAME_oneline(X509_get_subject_name(x),buf,256);
-       BIO_puts(out,"subject=");
-       BIO_puts(out,buf);
-
-       X509_NAME_oneline(X509_get_issuer_name(x),buf,256);
-       BIO_puts(out,"\nissuer= ");
-       BIO_puts(out,buf);
-       BIO_puts(out,"\n");
-       return 0;
 }
 
Index: opensa/openssl/apps/openssl-vms.cnf
diff -u opensa/openssl/apps/openssl-vms.cnf:1.1 opensa/openssl/apps/openssl-vms.cnf:1.2
--- opensa/openssl/apps/openssl-vms.cnf:1.1     Tue Jan 25 23:38:06 2000
+++ opensa/openssl/apps/openssl-vms.cnf Thu Mar  2 21:11:48 2000
@@ -86,6 +86,19 @@
 attributes             = req_attributes
 x509_extensions        = v3_ca # The extentions to add to the self signed cert
 
+# This sets the permitted types in a DirectoryString. There are several
+# options. 
+# default: PrintableString, T61String, BMPString.
+# pkix  : PrintableString, BMPString.
+# utf8only: only UTF8Strings.
+# nobmp : PrintableString, T61String (no BMPStrings).
+# MASK:XXXX a literal mask value.
+# WARNING: current versions of Netscape crash on BMPStrings or UTF8Strings
+# so use this option with caution!
+dirstring_type = nobmp
+
+# req_extensions = v3_req # The extensions to add to a certificate request
+
 [ req_distinguished_name ]
 countryName                    = Country Name (2 letter code)
 countryName_default            = AU
@@ -169,8 +182,16 @@
 #nsRenewalUrl
 #nsCaPolicyUrl
 #nsSslServerName
+
+[ v3_req ]
+
+# Extensions to add to a certificate request
+
+basicConstraints = CA:FALSE
+keyUsage = nonRepudiation, digitalSignature, keyEncipherment
+
+[ v3_ca ]
 
-[ v3_ca]
 
 # Extensions for a typical CA
 
@@ -200,10 +221,11 @@
 # Copy issuer details
 # issuerAltName=issuer:copy
 
-# RAW DER hex encoding of an extension: beware experts only!
-# 1.2.3.5=RAW:02:03
+# DER hex encoding of an extension: beware experts only!
+# obj=DER:02:03
+# Where 'obj' is a standard or added object
 # You can even override a supported extension:
-# basicConstraints= critical, RAW:30:03:01:01:FF
+# basicConstraints= critical, DER:30:03:01:01:FF
 
 [ crl_ext ]
 
Index: opensa/openssl/apps/openssl.c
diff -u opensa/openssl/apps/openssl.c:1.1 opensa/openssl/apps/openssl.c:1.2
--- opensa/openssl/apps/openssl.c:1.1   Tue Jan 25 23:38:06 2000
+++ opensa/openssl/apps/openssl.c       Thu Mar  2 21:11:48 2000
@@ -70,10 +70,10 @@
 #include <openssl/x509.h>
 #include <openssl/pem.h>
 #include <openssl/ssl.h>
-#define SSLEAY /* turn off a few special case MONOLITH macros */
 #define USE_SOCKETS /* needed for the _O_BINARY defs in the MS world */
-#define SSLEAY_SRC
+#define OPENSSL_C /* tells apps.h to use complete apps_startup() */
 #include "apps.h"
+#include "progs.h"
 #include "s_apps.h"
 #include <openssl/err.h>
 
@@ -120,9 +120,6 @@
        arg.data=NULL;
        arg.count=0;
 
-       /* SSLeay_add_ssl_algorithms(); is called in apps_startup() */
-       apps_startup();
-
 #if defined(DEBUG) && !defined(WINDOWS) && !defined(MSDOS)
 #ifdef SIGBUS
        signal(SIGBUS,sig_stop);
@@ -132,12 +129,14 @@
 #endif
 #endif
 
+       CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON);
+
+       apps_startup();
+
        if (bio_err == NULL)
                if ((bio_err=BIO_new(BIO_s_file())) != NULL)
                        BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 
-       CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON);
-
        ERR_load_crypto_strings();
 
        /* Lets load up our environment a little */
@@ -165,7 +164,7 @@
        program_name(Argv[0],pname,PROG_NAME_SIZE);
 
        f.name=pname;
-       fp=(FUNCTION *)lh_retrieve(prog,(char *)&f);
+       fp=(FUNCTION *)lh_retrieve(prog,&f);
        if (fp != NULL)
                {
                Argv[0]=pname;
@@ -236,6 +235,12 @@
        EVP_cleanup();
        ERR_free_strings();
 
+#ifdef LEVITTE_DEBUG
+       CRYPTO_push_info("Just to make sure I get a memory leak I can see :-)");
+       (void)Malloc(1024);
+       CRYPTO_pop_info();
+#endif
+
        CRYPTO_mem_leaks(bio_err);
        if (bio_err != NULL)
                {
@@ -257,7 +262,7 @@
        if ((argc <= 0) || (argv[0] == NULL))
                { ret=0; goto end; }
        f.name=argv[0];
-       fp=(FUNCTION *)lh_retrieve(prog,(char *)&f);
+       fp=(FUNCTION *)lh_retrieve(prog,&f);
        if (fp != NULL)
                {
                ret=fp->func(argc,argv);
@@ -356,7 +361,7 @@
        if ((ret=lh_new(hash,cmp)) == NULL) return(NULL);
 
        for (f=functions; f->name != NULL; f++)
-               lh_insert(ret,(char *)f);
+               lh_insert(ret,f);
        return(ret);
        }
 
@@ -369,5 +374,3 @@
        {
        return(lh_strhash(a->name));
        }
-
-#undef SSLEAY
Index: opensa/openssl/apps/openssl.cnf
diff -u opensa/openssl/apps/openssl.cnf:1.1 opensa/openssl/apps/openssl.cnf:1.2
--- opensa/openssl/apps/openssl.cnf:1.1 Tue Jan 25 23:38:06 2000
+++ opensa/openssl/apps/openssl.cnf     Thu Mar  2 21:11:48 2000
@@ -1,214 +1,244 @@
-#
-# OpenSSL example configuration file.
-# This is mostly being used for generation of certificate requests.
-#
-
-RANDFILE                = .rnd
-oid_file                = .oid
-oid_section             = new_oids
-
-# To use this configuration file with the "-extfile" option of the
-# "openssl x509" utility, name here the section containing the
-# X.509v3 extensions to use:
-# extensions            = 
-# (Alternatively, use a configuration file that has only
-# X.509v3 extensions in its main [= default] section.)
-
-[ new_oids ]
-
-# We can add new OIDs in here for use by 'ca' and 'req'.
-# Add a simple OID like this:
-# testoid1=1.2.3.4
-# Or use config file substitution like this:
-# testoid2=${testoid1}.5.6
-
-####################################################################
-[ ca ]
-default_ca      = CA_default            # The default ca section
-
-####################################################################
-[ CA_default ]
-
-dir             = demoCA               # Where everything is kept
-certs           = $dir\certs            # Where the issued certs are kept
-crl_dir         = $dir\crl              # Where the issued crl are kept
-database        = $dir\index.txt        # database index file.
-new_certs_dir   = $dir\newcerts         # default place for new certs.
-
-certificate     = $dir\cacert.pem       # The CA certificate
-serial          = $dir\serial           # The current serial number
-crl             = $dir\crl.pem          # The current CRL
-private_key     = $dir\private\cakey.pem# The private key
-RANDFILE        = $dir\private\.rand    # private random number file
-
-x509_extensions = usr_cert              # The extentions to add to the cert
-
-# Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs
-# so this is commented out by default to leave a V1 CRL.
-# crl_extensions        = crl_ext
-
-default_days    = 365                   # how long to certify for
-default_crl_days= 30                    # how long before next CRL
-default_md      = md5                   # which md to use.
-preserve        = no                    # keep passed DN ordering
-
-# A few difference way of specifying how similar the request should look
-# For type CA, the listed attributes must be the same, and the optional
-# and supplied fields are just that :-)
-policy          = policy_match
-
-# For the CA policy
-[ policy_match ]
-countryName             = match
-stateOrProvinceName     = match
-organizationName        = match
-organizationalUnitName  = optional
-commonName              = supplied
-emailAddress            = optional
-
-# For the 'anything' policy
-# At this point in time, you must list all acceptable 'object'
-# types.
-[ policy_anything ]
-countryName             = optional
-stateOrProvinceName     = optional
-localityName            = optional
-organizationName        = optional
-organizationalUnitName  = optional
-commonName              = supplied
-emailAddress            = optional
-
-####################################################################
-[ req ]
-default_bits            = 1024
-default_keyfile         = privkey.pem
-distinguished_name      = req_distinguished_name
-attributes              = req_attributes
-x509_extensions = v3_ca # The extentions to add to the self signed cert
-
-[ req_distinguished_name ]
-countryName                     = Country Name (2 letter code)
-countryName_default             = AU
-countryName_min                 = 2
-countryName_max                 = 2
-
-stateOrProvinceName             = State or Province Name (full name)
-stateOrProvinceName_default     = Some-State
-
-localityName                    = Locality Name (eg, city)
-
-0.organizationName              = Organization Name (eg, company)
-0.organizationName_default      = Internet Widgits Pty Ltd
-
-# we can do this but it is not needed normally :-)
-#1.organizationName             = Second Organization Name (eg, company)
-#1.organizationName_default     = World Wide Web Pty Ltd
-
-organizationalUnitName          = Organizational Unit Name (eg, section)
-#organizationalUnitName_default =
-
-commonName                      = Common Name (eg, YOUR name)
-commonName_max                  = 64
-
-emailAddress                    = Email Address
-emailAddress_max                = 40
-
-# SET-ex3                       = SET extension number 3
-
-[ req_attributes ]
-challengePassword               = A challenge password
-challengePassword_min           = 4
-challengePassword_max           = 20
-
-unstructuredName                = An optional company name
-
-[ usr_cert ]
-
-# These extensions are added when 'ca' signs a request.
-
-# This goes against PKIX guidelines but some CAs do it and some software
-# requires this to avoid interpreting an end user certificate as a CA.
-
-basicConstraints=CA:FALSE
-
-# Here are some examples of the usage of nsCertType. If it is omitted
-# the certificate can be used for anything *except* object signing.
-
-# This is OK for an SSL server.
-# nsCertType                    = server
-
-# For an object signing certificate this would be used.
-# nsCertType = objsign
-
-# For normal client use this is typical
-# nsCertType = client, email
-
-# and for everything including object signing:
-# nsCertType = client, email, objsign
-
-# This is typical in keyUsage for a client certificate.
-# keyUsage = nonRepudiation, digitalSignature, keyEncipherment
-
-# This will be displayed in Netscape's comment listbox.
-nsComment                       = "OpenSSL Generated Certificate"
-
-# PKIX recommendations harmless if included in all certificates.
-subjectKeyIdentifier=hash
-authorityKeyIdentifier=keyid,issuer:always
-
-# This stuff is for subjectAltName and issuerAltname.
-# Import the email address.
-# subjectAltName=email:copy
-
-# Copy subject details
-# issuerAltName=issuer:copy
-
-#nsCaRevocationUrl              = http://www.domain.dom/ca-crl.pem
-#nsBaseUrl
-#nsRevocationUrl
-#nsRenewalUrl
-#nsCaPolicyUrl
-#nsSslServerName
-
-[ v3_ca ]
-
-# Extensions for a typical CA
-
-
-# PKIX recommendation.
-
-subjectKeyIdentifier=hash
-
-authorityKeyIdentifier=keyid:always,issuer:always
-
-# This is what PKIX recommends but some broken software chokes on critical
-# extensions.
-#basicConstraints = critical,CA:true
-# So we do this instead.
-basicConstraints = CA:true
-
-# Key usage: this is typical for a CA certificate. However since it will
-# prevent it being used as an test self-signed certificate it is best
-# left out by default.
-# keyUsage = cRLSign, keyCertSign
-
-# Some might want this also
-# nsCertType = sslCA, emailCA
-
-# Include email address in subject alt name: another PKIX recommendation
-# subjectAltName=email:copy
-# Copy issuer details
-# issuerAltName=issuer:copy
-
-# RAW DER hex encoding of an extension: beware experts only!
-# 1.2.3.5=RAW:02:03
-# You can even override a supported extension:
-# basicConstraints= critical, RAW:30:03:01:01:FF
-
-[ crl_ext ]
-
-# CRL extensions.
-# Only issuerAltName and authorityKeyIdentifier make any sense in a CRL.
-
-# issuerAltName=issuer:copy
-authorityKeyIdentifier=keyid:always,issuer:always
+#
+# OpenSSL example configuration file.
+# This is mostly being used for generation of certificate requests.
+#
+
+# This definition stops the following lines choking if HOME isn't
+# defined.
+HOME                   = .
+RANDFILE               = $ENV::HOME/.rnd
+
+# Extra OBJECT IDENTIFIER info:
+#oid_file              = $ENV::HOME/.oid
+oid_section            = new_oids
+
+# To use this configuration file with the "-extfile" option of the
+# "openssl x509" utility, name here the section containing the
+# X.509v3 extensions to use:
+# extensions           = 
+# (Alternatively, use a configuration file that has only
+# X.509v3 extensions in its main [= default] section.)
+
+[ new_oids ]
+
+# We can add new OIDs in here for use by 'ca' and 'req'.
+# Add a simple OID like this:
+# testoid1=1.2.3.4
+# Or use config file substitution like this:
+# testoid2=${testoid1}.5.6
+
+####################################################################
+[ ca ]
+default_ca     = CA_default            # The default ca section
+
+####################################################################
+[ CA_default ]
+
+dir            = ./demoCA              # Where everything is kept
+certs          = $dir/certs            # Where the issued certs are kept
+crl_dir                = $dir/crl              # Where the issued crl are kept
+database       = $dir/index.txt        # database index file.
+new_certs_dir  = $dir/newcerts         # default place for new certs.
+
+certificate    = $dir/cacert.pem       # The CA certificate
+serial         = $dir/serial           # The current serial number
+crl            = $dir/crl.pem          # The current CRL
+private_key    = $dir/private/cakey.pem# The private key
+RANDFILE       = $dir/private/.rand    # private random number file
+
+x509_extensions        = usr_cert              # The extentions to add to the cert
+
+# Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs
+# so this is commented out by default to leave a V1 CRL.
+# crl_extensions       = crl_ext
+
+default_days   = 365                   # how long to certify for
+default_crl_days= 30                   # how long before next CRL
+default_md     = md5                   # which md to use.
+preserve       = no                    # keep passed DN ordering
+
+# A few difference way of specifying how similar the request should look
+# For type CA, the listed attributes must be the same, and the optional
+# and supplied fields are just that :-)
+policy         = policy_match
+
+# For the CA policy
+[ policy_match ]
+countryName            = match
+stateOrProvinceName    = match
+organizationName       = match
+organizationalUnitName = optional
+commonName             = supplied
+emailAddress           = optional
+
+# For the 'anything' policy
+# At this point in time, you must list all acceptable 'object'
+# types.
+[ policy_anything ]
+countryName            = optional
+stateOrProvinceName    = optional
+localityName           = optional
+organizationName       = optional
+organizationalUnitName = optional
+commonName             = supplied
+emailAddress           = optional
+
+####################################################################
+[ req ]
+default_bits           = 1024
+default_keyfile        = privkey.pem
+distinguished_name     = req_distinguished_name
+attributes             = req_attributes
+x509_extensions        = v3_ca # The extentions to add to the self signed cert
+
+# Passwords for private keys if not present they will be prompted for
+# input_password = secret
+# output_password = secret
+
+# This sets a mask for permitted string types. There are several options. 
+# default: PrintableString, T61String, BMPString.
+# pkix  : PrintableString, BMPString.
+# utf8only: only UTF8Strings.
+# nombstr : PrintableString, T61String (no BMPStrings or UTF8Strings).
+# MASK:XXXX a literal mask value.
+# WARNING: current versions of Netscape crash on BMPStrings or UTF8Strings
+# so use this option with caution!
+string_mask = nombstr
+
+# req_extensions = v3_req # The extensions to add to a certificate request
+
+[ req_distinguished_name ]
+countryName                    = Country Name (2 letter code)
+countryName_default            = AU
+countryName_min                        = 2
+countryName_max                        = 2
+
+stateOrProvinceName            = State or Province Name (full name)
+stateOrProvinceName_default    = Some-State
+
+localityName                   = Locality Name (eg, city)
+
+0.organizationName             = Organization Name (eg, company)
+0.organizationName_default     = Internet Widgits Pty Ltd
+
+# we can do this but it is not needed normally :-)
+#1.organizationName            = Second Organization Name (eg, company)
+#1.organizationName_default    = World Wide Web Pty Ltd
+
+organizationalUnitName         = Organizational Unit Name (eg, section)
+#organizationalUnitName_default        =
+
+commonName                     = Common Name (eg, YOUR name)
+commonName_max                 = 64
+
+emailAddress                   = Email Address
+emailAddress_max               = 40
+
+# SET-ex3                      = SET extension number 3
+
+[ req_attributes ]
+challengePassword              = A challenge password
+challengePassword_min          = 4
+challengePassword_max          = 20
+
+unstructuredName               = An optional company name
+
+[ usr_cert ]
+
+# These extensions are added when 'ca' signs a request.
+
+# This goes against PKIX guidelines but some CAs do it and some software
+# requires this to avoid interpreting an end user certificate as a CA.
+
+basicConstraints=CA:FALSE
+
+# Here are some examples of the usage of nsCertType. If it is omitted
+# the certificate can be used for anything *except* object signing.
+
+# This is OK for an SSL server.
+# nsCertType                   = server
+
+# For an object signing certificate this would be used.
+# nsCertType = objsign
+
+# For normal client use this is typical
+# nsCertType = client, email
+
+# and for everything including object signing:
+# nsCertType = client, email, objsign
+
+# This is typical in keyUsage for a client certificate.
+# keyUsage = nonRepudiation, digitalSignature, keyEncipherment
+
+# This will be displayed in Netscape's comment listbox.
+nsComment                      = "OpenSSL Generated Certificate"
+
+# PKIX recommendations harmless if included in all certificates.
+subjectKeyIdentifier=hash
+authorityKeyIdentifier=keyid,issuer:always
+
+# This stuff is for subjectAltName and issuerAltname.
+# Import the email address.
+# subjectAltName=email:copy
+
+# Copy subject details
+# issuerAltName=issuer:copy
+
+#nsCaRevocationUrl             = http://www.domain.dom/ca-crl.pem
+#nsBaseUrl
+#nsRevocationUrl
+#nsRenewalUrl
+#nsCaPolicyUrl
+#nsSslServerName
+
+[ v3_req ]
+
+# Extensions to add to a certificate request
+
+basicConstraints = CA:FALSE
+keyUsage = nonRepudiation, digitalSignature, keyEncipherment
+
+[ v3_ca ]
+
+
+# Extensions for a typical CA
+
+
+# PKIX recommendation.
+
+subjectKeyIdentifier=hash
+
+authorityKeyIdentifier=keyid:always,issuer:always
+
+# This is what PKIX recommends but some broken software chokes on critical
+# extensions.
+#basicConstraints = critical,CA:true
+# So we do this instead.
+basicConstraints = CA:true
+
+# Key usage: this is typical for a CA certificate. However since it will
+# prevent it being used as an test self-signed certificate it is best
+# left out by default.
+# keyUsage = cRLSign, keyCertSign
+
+# Some might want this also
+# nsCertType = sslCA, emailCA
+
+# Include email address in subject alt name: another PKIX recommendation
+# subjectAltName=email:copy
+# Copy issuer details
+# issuerAltName=issuer:copy
+
+# DER hex encoding of an extension: beware experts only!
+# obj=DER:02:03
+# Where 'obj' is a standard or added object
+# You can even override a supported extension:
+# basicConstraints= critical, DER:30:03:01:01:FF
+
+[ crl_ext ]
+
+# CRL extensions.
+# Only issuerAltName and authorityKeyIdentifier make any sense in a CRL.
+
+# issuerAltName=issuer:copy
+authorityKeyIdentifier=keyid:always,issuer:always
Index: opensa/openssl/apps/pkcs12.c
diff -u opensa/openssl/apps/pkcs12.c:1.1 opensa/openssl/apps/pkcs12.c:1.2
--- opensa/openssl/apps/pkcs12.c:1.1    Tue Jan 25 23:38:06 2000
+++ opensa/openssl/apps/pkcs12.c        Thu Mar  2 21:11:48 2000
@@ -61,12 +61,12 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-#include <openssl/des.h>
-#include <openssl/pem.h>
+#include "apps.h"
+#include <openssl/crypto.h>
 #include <openssl/err.h>
+#include <openssl/pem.h>
 #include <openssl/pkcs12.h>
 
-#include "apps.h"
 #define PROG pkcs12_main
 
 EVP_CIPHER *enc;
@@ -79,14 +79,16 @@
 #define CACERTS                0x10
 
 int get_cert_chain(X509 *cert, STACK_OF(X509) **chain);
-int dump_cert_text (BIO *out, X509 *x);
-int dump_certs_keys_p12(BIO *out, PKCS12 *p12, char *pass, int passlen, int options);
-int dump_certs_pkeys_bags(BIO *out, STACK *bags, char *pass, int passlen, int 
options);
-int dump_certs_pkeys_bag(BIO *out, PKCS12_SAFEBAG *bags, char *pass, int passlen, int 
options);
+int dump_certs_keys_p12(BIO *out, PKCS12 *p12, char *pass, int passlen, int options, 
+char *pempass);
+int dump_certs_pkeys_bags(BIO *out, STACK *bags, char *pass, int passlen, int 
+options, char *pempass);
+int dump_certs_pkeys_bag(BIO *out, PKCS12_SAFEBAG *bags, char *pass, int passlen, int 
+options, char *pempass);
 int print_attribs(BIO *out, STACK_OF(X509_ATTRIBUTE) *attrlst, char *name);
 void hex_prin(BIO *out, unsigned char *buf, int len);
 int alg_print(BIO *x, X509_ALGOR *alg);
 int cert_load(BIO *in, STACK_OF(X509) *sk);
+
+int MAIN(int, char **);
+
 int MAIN(int argc, char **argv)
 {
     char *infile=NULL, *outfile=NULL, *keyname = NULL; 
@@ -101,15 +103,19 @@
     int chain = 0;
     int badarg = 0;
     int iter = PKCS12_DEFAULT_ITER;
-    int maciter = 1;
+    int maciter = PKCS12_DEFAULT_ITER;
     int twopass = 0;
     int keytype = 0;
     int cert_pbe = NID_pbe_WithSHA1And40BitRC2_CBC;
+    int key_pbe = NID_pbe_WithSHA1And3_Key_TripleDES_CBC;
     int ret = 1;
     int macver = 1;
     int noprompt = 0;
     STACK *canames = NULL;
     char *cpass = NULL, *mpass = NULL;
+    char *passargin = NULL, *passargout = NULL, *passarg = NULL;
+    char *passin = NULL, *passout = NULL;
+    char *inrand = NULL;
 
     apps_startup();
 
@@ -143,10 +149,37 @@
                else if (!strcmp (*args, "-noiter")) iter = 1;
                else if (!strcmp (*args, "-maciter"))
                                         maciter = PKCS12_DEFAULT_ITER;
+               else if (!strcmp (*args, "-nomaciter"))
+                                        maciter = 1;
                else if (!strcmp (*args, "-nodes")) enc=NULL;
-               else if (!strcmp (*args, "-inkey")) {
+               else if (!strcmp (*args, "-certpbe")) {
+                       if (args[1]) {
+                               args++;
+                               cert_pbe=OBJ_txt2nid(*args);
+                               if(cert_pbe == NID_undef) {
+                                       BIO_printf(bio_err,
+                                                "Unknown PBE algorithm %s\n", *args);
+                                       badarg = 1;
+                               }
+                       } else badarg = 1;
+               } else if (!strcmp (*args, "-keypbe")) {
+                       if (args[1]) {
+                               args++;
+                               key_pbe=OBJ_txt2nid(*args);
+                               if(key_pbe == NID_undef) {
+                                       BIO_printf(bio_err,
+                                                "Unknown PBE algorithm %s\n", *args);
+                                       badarg = 1;
+                               }
+                       } else badarg = 1;
+               } else if (!strcmp (*args, "-rand")) {
                    if (args[1]) {
                        args++; 
+                       inrand = *args;
+                   } else badarg = 1;
+               } else if (!strcmp (*args, "-inkey")) {
+                   if (args[1]) {
+                       args++; 
                        keyname = *args;
                    } else badarg = 1;
                } else if (!strcmp (*args, "-certfile")) {
@@ -175,20 +208,20 @@
                        args++; 
                        outfile = *args;
                    } else badarg = 1;
-               } else if (!strcmp (*args, "-envpass")) {
+               } else if (!strcmp(*args,"-passin")) {
                    if (args[1]) {
                        args++; 
-                       if(!(cpass = getenv(*args))) {
-                               BIO_printf(bio_err,
-                                "Can't read environment variable %s\n", *args);
-                               goto end;
-                       }
-                       noprompt = 1;
+                       passargin = *args;
+                   } else badarg = 1;
+               } else if (!strcmp(*args,"-passout")) {
+                   if (args[1]) {
+                       args++; 
+                       passargout = *args;
                    } else badarg = 1;
                } else if (!strcmp (*args, "-password")) {
                    if (args[1]) {
                        args++; 
-                       cpass = *args;
+                       passarg = *args;
                        noprompt = 1;
                    } else badarg = 1;
                } else badarg = 1;
@@ -225,21 +258,54 @@
        BIO_printf (bio_err, "-maciter      use MAC iteration\n");
        BIO_printf (bio_err, "-twopass      separate MAC, encryption passwords\n");
        BIO_printf (bio_err, "-descert      encrypt PKCS#12 certificates with triple 
DES (default RC2-40)\n");
+       BIO_printf (bio_err, "-certpbe alg  specify certificate PBE algorithm (default 
+RC2-40)\n");
+       BIO_printf (bio_err, "-keypbe alg   specify private key PBE algorithm (default 
+3DES)\n");
        BIO_printf (bio_err, "-keyex        set MS key exchange type\n");
        BIO_printf (bio_err, "-keysig       set MS key signature type\n");
-       BIO_printf (bio_err, "-password p   set import/export password (NOT 
RECOMMENDED)\n");
-       BIO_printf (bio_err, "-envpass p    set import/export password from 
environment\n");
+       BIO_printf (bio_err, "-password p   set import/export password source\n");
+       BIO_printf (bio_err, "-passin p     input file pass phrase source\n");
+       BIO_printf (bio_err, "-passout p    output file pass phrase source\n");
+       BIO_printf(bio_err,  "-rand file:file:...\n");
+       BIO_printf(bio_err,  "              load the file (or the files in the 
+directory) into\n");
+       BIO_printf(bio_err,  "              the random number generator\n");
        goto end;
     }
+
+    if(passarg) {
+       if(export_cert) passargout = passarg;
+       else passargin = passarg;
+    }
 
-    if(cpass) mpass = cpass;
-    else {
+    if(!app_passwd(bio_err, passargin, passargout, &passin, &passout)) {
+       BIO_printf(bio_err, "Error getting passwords\n");
+       goto end;
+    }
+
+    if(!cpass) {
+       if(export_cert) cpass = passout;
+       else cpass = passin;
+    }
+
+    if(cpass) {
+       mpass = cpass;
+       noprompt = 1;
+    } else {
        cpass = pass;
        mpass = macpass;
     }
 
+    if(export_cert || inrand) {
+       app_RAND_load_file(NULL, bio_err, (inrand != NULL));
+        if (inrand != NULL)
+               BIO_printf(bio_err,"%ld semi-random bytes loaded\n",
+                       app_RAND_load_files(inrand));
+    }
     ERR_load_crypto_strings();
 
+#ifdef CRYPTO_MDEBUG
+    CRYPTO_push_info("read files");
+#endif
+
     if (!infile) in = BIO_new_fp(stdin, BIO_NOCLOSE);
     else in = BIO_new_file(infile, "rb");
     if (!in) {
@@ -265,6 +331,11 @@
        }
      }
 
+#ifdef CRYPTO_MDEBUG
+    CRYPTO_pop_info();
+    CRYPTO_push_info("write files");
+#endif
+
     if (!outfile) out = BIO_new_fp(stdout, BIO_NOCLOSE);
     else out = BIO_new_file(outfile, "wb");
     if (!out) {
@@ -274,27 +345,38 @@
        goto end;
     }
     if (twopass) {
+#ifdef CRYPTO_MDEBUG
+    CRYPTO_push_info("read MAC password");
+#endif
        if(EVP_read_pw_string (macpass, 50, "Enter MAC Password:", export_cert))
        {
            BIO_printf (bio_err, "Can't read Password\n");
            goto end;
                }
+#ifdef CRYPTO_MDEBUG
+    CRYPTO_pop_info();
+#endif
     }
 
-if (export_cert) {
+    if (export_cert) {
        EVP_PKEY *key;
        STACK *bags, *safes;
        PKCS12_SAFEBAG *bag;
        PKCS8_PRIV_KEY_INFO *p8;
        PKCS7 *authsafe;
-       X509 *cert = NULL, *ucert = NULL;
-       STACK_OF(X509) *certs;
+       X509 *ucert = NULL;
+       STACK_OF(X509) *certs=NULL;
        char *catmp;
        int i;
        unsigned char keyid[EVP_MAX_MD_SIZE];
        unsigned int keyidlen = 0;
-       key = PEM_read_bio_PrivateKey(inkey ? inkey : in, NULL, NULL, NULL);
+
+#ifdef CRYPTO_MDEBUG
+       CRYPTO_push_info("process -export_cert");
+#endif
+       key = PEM_read_bio_PrivateKey(inkey ? inkey : in, NULL, NULL, passin);
        if (!inkey) (void) BIO_reset(in);
+       else BIO_free(inkey);
        if (!key) {
                BIO_printf (bio_err, "Error loading private key\n");
                ERR_print_errors(bio_err);
@@ -313,7 +395,7 @@
        for(i = 0; i < sk_X509_num(certs); i++) {
                ucert = sk_X509_value(certs, i);
                if(X509_check_private_key(ucert, key)) {
-                       X509_digest(cert, EVP_sha1(), keyid, &keyidlen);
+                       X509_digest(ucert, EVP_sha1(), keyid, &keyidlen);
                        break;
                }
        }
@@ -354,6 +436,7 @@
 
        /* We now have loads of certificates: include them all */
        for(i = 0; i < sk_X509_num(certs); i++) {
+               X509 *cert = NULL;
                cert = sk_X509_value(certs, i);
                bag = M_PKCS12_x5092certbag(cert);
                /* If it matches private key set id */
@@ -364,7 +447,7 @@
                                PKCS12_add_friendlyname(bag, catmp, -1);
                sk_push(bags, (char *)bag);
        }
-
+       sk_X509_pop_free(certs, X509_free);
        if (canames) sk_free(canames);
 
        if(!noprompt &&
@@ -390,8 +473,7 @@
        p8 = EVP_PKEY2PKCS8 (key);
        EVP_PKEY_free(key);
        if(keytype) PKCS8_add_keyusage(p8, keytype);
-       bag = PKCS12_MAKE_SHKEYBAG(NID_pbe_WithSHA1And3_Key_TripleDES_CBC,
-                       cpass, -1, NULL, 0, iter, p8);
+       bag = PKCS12_MAKE_SHKEYBAG(key_pbe, cpass, -1, NULL, 0, iter, p8);
        PKCS8_PRIV_KEY_INFO_free(p8);
         if (name) PKCS12_add_friendlyname (bag, name, -1);
        PKCS12_add_localkeyid (bag, keyid, keyidlen);
@@ -415,6 +497,10 @@
        PKCS12_free(p12);
 
        ret = 0;
+
+#ifdef CRYPTO_MDEBUG
+       CRYPTO_pop_info();
+#endif
        goto end;
        
     }
@@ -424,50 +510,61 @@
        goto end;
     }
 
+#ifdef CRYPTO_MDEBUG
+    CRYPTO_push_info("read import password");
+#endif
     if(!noprompt && EVP_read_pw_string(pass, 50, "Enter Import Password:", 0)) {
        BIO_printf (bio_err, "Can't read Password\n");
        goto end;
     }
+#ifdef CRYPTO_MDEBUG
+    CRYPTO_pop_info();
+#endif
 
     if (!twopass) strcpy(macpass, pass);
 
     if (options & INFO) BIO_printf (bio_err, "MAC Iteration %ld\n", p12->mac->iter ? 
ASN1_INTEGER_get (p12->mac->iter) : 1);
     if(macver) {
+#ifdef CRYPTO_MDEBUG
+    CRYPTO_push_info("verify MAC");
+#endif
        if (!PKCS12_verify_mac (p12, mpass, -1)) {
-           BIO_printf (bio_err, "Mac verify errror: invalid password?\n");
+           BIO_printf (bio_err, "Mac verify error: invalid password?\n");
            ERR_print_errors (bio_err);
            goto end;
        } else BIO_printf (bio_err, "MAC verified OK\n");
+#ifdef CRYPTO_MDEBUG
+    CRYPTO_pop_info();
+#endif
     }
 
-    if (!dump_certs_keys_p12 (out, p12, cpass, -1, options)) {
+#ifdef CRYPTO_MDEBUG
+    CRYPTO_push_info("output keys and certificates");
+#endif
+    if (!dump_certs_keys_p12 (out, p12, cpass, -1, options, passout)) {
        BIO_printf(bio_err, "Error outputting keys and certificates\n");
        ERR_print_errors (bio_err);
        goto end;
     }
+#ifdef CRYPTO_MDEBUG
+    CRYPTO_pop_info();
+#endif
     PKCS12_free(p12);
     ret = 0;
     end:
+    if(export_cert || inrand) app_RAND_write_file(NULL, bio_err);
+#ifdef CRYPTO_MDEBUG
+    CRYPTO_remove_all_info();
+#endif
+    BIO_free(in);
     BIO_free(out);
+    if(passin) Free(passin);
+    if(passout) Free(passout);
     EXIT(ret);
 }
 
-int dump_cert_text (BIO *out, X509 *x)
-{
-       char buf[256];
-       X509_NAME_oneline(X509_get_subject_name(x),buf,256);
-       BIO_puts(out,"subject=");
-       BIO_puts(out,buf);
-
-       X509_NAME_oneline(X509_get_issuer_name(x),buf,256);
-       BIO_puts(out,"\nissuer= ");
-       BIO_puts(out,buf);
-       BIO_puts(out,"\n");
-        return 0;
-}
-
 int dump_certs_keys_p12 (BIO *out, PKCS12 *p12, char *pass,
-            int passlen, int options)
+            int passlen, int options, char *pempass)
 {
        STACK *asafes, *bags;
        int i, bagnid;
@@ -489,7 +586,7 @@
                } else continue;
                if (!bags) return 0;
                if (!dump_certs_pkeys_bags (out, bags, pass, passlen, 
-                                                        options)) {
+                                                options, pempass)) {
                        sk_pop_free (bags, PKCS12_SAFEBAG_free);
                        return 0;
                }
@@ -500,19 +597,19 @@
 }
 
 int dump_certs_pkeys_bags (BIO *out, STACK *bags, char *pass,
-            int passlen, int options)
+            int passlen, int options, char *pempass)
 {
        int i;
        for (i = 0; i < sk_num (bags); i++) {
                if (!dump_certs_pkeys_bag (out,
                         (PKCS12_SAFEBAG *)sk_value (bags, i), pass, passlen,
-                                                       options)) return 0;
+                                               options, pempass)) return 0;
        }
        return 1;
 }
 
 int dump_certs_pkeys_bag (BIO *out, PKCS12_SAFEBAG *bag, char *pass,
-            int passlen, int options)
+            int passlen, int options, char *pempass)
 {
        EVP_PKEY *pkey;
        PKCS8_PRIV_KEY_INFO *p8;
@@ -527,7 +624,7 @@
                p8 = bag->value.keybag;
                if (!(pkey = EVP_PKCS82PKEY (p8))) return 0;
                print_attribs (out, p8->attributes, "Key Attributes");
-               PEM_write_bio_PrivateKey (out, pkey, enc, NULL, 0, NULL, NULL);
+               PEM_write_bio_PrivateKey (out, pkey, enc, NULL, 0, NULL, pempass);
                EVP_PKEY_free(pkey);
        break;
 
@@ -543,7 +640,7 @@
                if (!(pkey = EVP_PKCS82PKEY (p8))) return 0;
                print_attribs (out, p8->attributes, "Key Attributes");
                PKCS8_PRIV_KEY_INFO_free(p8);
-               PEM_write_bio_PrivateKey (out, pkey, enc, NULL, 0, NULL, NULL);
+               PEM_write_bio_PrivateKey (out, pkey, enc, NULL, 0, NULL, pempass);
                EVP_PKEY_free(pkey);
        break;
 
@@ -566,7 +663,7 @@
                if (options & INFO) BIO_printf (bio_err, "Safe Contents bag\n");
                print_attribs (out, bag->attrib, "Bag Attributes");
                return dump_certs_pkeys_bags (out, bag->value.safes, pass,
-                                                           passlen, options);
+                                                           passlen, options, pempass);
                                        
        default:
                BIO_printf (bio_err, "Warning unsupported bag type: ");
@@ -588,19 +685,15 @@
        X509_STORE_CTX store_ctx;
        STACK_OF(X509) *chn;
        int i;
-       X509 *x;
+
        store = X509_STORE_new ();
        X509_STORE_set_default_paths (store);
        X509_STORE_CTX_init(&store_ctx, store, cert, NULL);
        if (X509_verify_cert(&store_ctx) <= 0) {
                i = X509_STORE_CTX_get_error (&store_ctx);
                goto err;
-       }
-       chn =  sk_X509_dup(X509_STORE_CTX_get_chain (&store_ctx));
-       for (i = 0; i < sk_X509_num(chn); i++) {
-               x = sk_X509_value(chn, i);
-               CRYPTO_add(&x->references,1,CRYPTO_LOCK_X509);
        }
+       chn =  X509_STORE_CTX_get1_chain(&store_ctx);
        i = 0;
        *chain = chn;
 err:
Index: opensa/openssl/apps/pkcs7.c
diff -u opensa/openssl/apps/pkcs7.c:1.1 opensa/openssl/apps/pkcs7.c:1.2
--- opensa/openssl/apps/pkcs7.c:1.1     Tue Jan 25 23:38:06 2000
+++ opensa/openssl/apps/pkcs7.c Thu Mar  2 21:11:48 2000
@@ -71,27 +71,23 @@
 #undef PROG
 #define PROG   pkcs7_main
 
-/* -inform arg - input format - default PEM (one of DER, TXT or PEM)
+/* -inform arg - input format - default PEM (DER or PEM)
  * -outform arg - output format - default PEM
  * -in arg     - input file - default stdin
  * -out arg    - output file - default stdout
- * -des                - encrypt output if PEM format with DES in cbc mode
- * -des3       - encrypt output if PEM format
- * -idea       - encrypt output if PEM format
  * -print_certs
  */
 
+int MAIN(int, char **);
+
 int MAIN(int argc, char **argv)
        {
        PKCS7 *p7=NULL;
        int i,badops=0;
-#if !defined(NO_DES) || !defined(NO_IDEA)
-       EVP_CIPHER *enc=NULL;
-#endif
        BIO *in=NULL,*out=NULL;
        int informat,outformat;
-       char *infile,*outfile,*prog,buf[256];
-       int print_certs=0;
+       char *infile,*outfile,*prog;
+       int print_certs=0,text=0,noout=0;
        int ret=0;
 
        apps_startup();
@@ -130,18 +126,12 @@
                        if (--argc < 1) goto bad;
                        outfile= *(++argv);
                        }
+               else if (strcmp(*argv,"-noout") == 0)
+                       noout=1;
+               else if (strcmp(*argv,"-text") == 0)
+                       text=1;
                else if (strcmp(*argv,"-print_certs") == 0)
                        print_certs=1;
-#ifndef NO_DES
-               else if (strcmp(*argv,"-des") == 0)
-                       enc=EVP_des_cbc();
-               else if (strcmp(*argv,"-des3") == 0)
-                       enc=EVP_des_ede3_cbc();
-#endif
-#ifndef NO_IDEA
-               else if (strcmp(*argv,"-idea") == 0)
-                       enc=EVP_idea_cbc();
-#endif
                else
                        {
                        BIO_printf(bio_err,"unknown option %s\n",*argv);
@@ -157,16 +147,13 @@
 bad:
                BIO_printf(bio_err,"%s [options] <infile >outfile\n",prog);
                BIO_printf(bio_err,"where options are\n");
-               BIO_printf(bio_err," -inform arg   input format - one of DER TXT 
PEM\n");
-               BIO_printf(bio_err," -outform arg  output format - one of DER TXT 
PEM\n");
+               BIO_printf(bio_err," -inform arg   input format - DER or PEM\n");
+               BIO_printf(bio_err," -outform arg  output format - DER or PEM\n");
                BIO_printf(bio_err," -in arg       input file\n");
                BIO_printf(bio_err," -out arg      output file\n");
                BIO_printf(bio_err," -print_certs  print any certs or crl in the 
input\n");
-               BIO_printf(bio_err," -des          encrypt PEM output with cbc des\n");
-               BIO_printf(bio_err," -des3         encrypt PEM output with ede cbc des 
using 168 bit key\n");
-#ifndef NO_IDEA
-               BIO_printf(bio_err," -idea         encrypt PEM output with cbc 
idea\n");
-#endif
+               BIO_printf(bio_err," -text         print full details of 
+certificates\n");
+               BIO_printf(bio_err," -noout        don't output encoded data\n");
                EXIT(1);
                }
 
@@ -246,19 +233,10 @@
                        for (i=0; i<sk_X509_num(certs); i++)
                                {
                                x=sk_X509_value(certs,i);
-
-                               X509_NAME_oneline(X509_get_subject_name(x),
-                                       buf,256);
-                               BIO_puts(out,"subject=");
-                               BIO_puts(out,buf);
-
-                               X509_NAME_oneline(X509_get_issuer_name(x),
-                                       buf,256);
-                               BIO_puts(out,"\nissuer= ");
-                               BIO_puts(out,buf);
-                               BIO_puts(out,"\n");
+                               if(text) X509_print(out, x);
+                               else dump_cert_text(out, x);
 
-                               PEM_write_bio_X509(out,x);
+                               if(!noout) PEM_write_bio_X509(out,x);
                                BIO_puts(out,"\n");
                                }
                        }
@@ -270,17 +248,9 @@
                                {
                                crl=sk_X509_CRL_value(crls,i);
 
-                               X509_NAME_oneline(crl->crl->issuer,buf,256);
-                               BIO_puts(out,"issuer= ");
-                               BIO_puts(out,buf);
-
-                               BIO_puts(out,"\nlast update=");
-                               ASN1_TIME_print(out,crl->crl->lastUpdate);
-                               BIO_puts(out,"\nnext update=");
-                               ASN1_TIME_print(out,crl->crl->nextUpdate);
-                               BIO_puts(out,"\n");
+                               X509_CRL_print(out, crl);
 
-                               PEM_write_bio_X509_CRL(out,crl);
+                               if(!noout)PEM_write_bio_X509_CRL(out,crl);
                                BIO_puts(out,"\n");
                                }
                        }
@@ -289,21 +259,23 @@
                goto end;
                }
 
-       if      (outformat == FORMAT_ASN1)
-               i=i2d_PKCS7_bio(out,p7);
-       else if (outformat == FORMAT_PEM)
-               i=PEM_write_bio_PKCS7(out,p7);
-       else    {
-               BIO_printf(bio_err,"bad output format specified for outfile\n");
-               goto end;
-               }
+       if(!noout) {
+               if      (outformat == FORMAT_ASN1)
+                       i=i2d_PKCS7_bio(out,p7);
+               else if (outformat == FORMAT_PEM)
+                       i=PEM_write_bio_PKCS7(out,p7);
+               else    {
+                       BIO_printf(bio_err,"bad output format specified for 
+outfile\n");
+                       goto end;
+                       }
 
-       if (!i)
-               {
-               BIO_printf(bio_err,"unable to write pkcs7 object\n");
-               ERR_print_errors(bio_err);
-               goto end;
-               }
+               if (!i)
+                       {
+                       BIO_printf(bio_err,"unable to write pkcs7 object\n");
+                       ERR_print_errors(bio_err);
+                       goto end;
+                       }
+       }
        ret=0;
 end:
        if (p7 != NULL) PKCS7_free(p7);
Index: opensa/openssl/apps/pkcs8.c
diff -u opensa/openssl/apps/pkcs8.c:1.1 opensa/openssl/apps/pkcs8.c:1.2
--- opensa/openssl/apps/pkcs8.c:1.1     Tue Jan 25 23:38:06 2000
+++ opensa/openssl/apps/pkcs8.c Thu Mar  2 21:11:48 2000
@@ -57,6 +57,7 @@
  */
 #include <stdio.h>
 #include <string.h>
+#include "apps.h"
 #include <openssl/pem.h>
 #include <openssl/err.h>
 #include <openssl/evp.h>
@@ -65,10 +66,12 @@
 #include "apps.h"
 #define PROG pkcs8_main
 
+int MAIN(int, char **);
 
 int MAIN(int argc, char **argv)
 {
        char **args, *infile = NULL, *outfile = NULL;
+       char *passargin = NULL, *passargout = NULL;
        BIO *in = NULL, *out = NULL;
        int topk8 = 0;
        int pbe_nid = -1;
@@ -80,13 +83,13 @@
        X509_SIG *p8;
        PKCS8_PRIV_KEY_INFO *p8inf;
        EVP_PKEY *pkey;
-       char pass[50];
+       char pass[50], *passin = NULL, *passout = NULL, *p8pass = NULL;
        int badarg = 0;
        if (bio_err == NULL) bio_err = BIO_new_fp (stderr, BIO_NOCLOSE);
        informat=FORMAT_PEM;
        outformat=FORMAT_PEM;
        ERR_load_crypto_strings();
-       SSLeay_add_all_algorithms();
+       OpenSSL_add_all_algorithms();
        args = argv + 1;
        while (!badarg && *args && *args[0] == '-') {
                if (!strcmp(*args,"-v2")) {
@@ -99,6 +102,16 @@
                                        badarg = 1;
                                }
                        } else badarg = 1;
+               } else if (!strcmp(*args,"-v1")) {
+                       if (args[1]) {
+                               args++;
+                               pbe_nid=OBJ_txt2nid(*args);
+                               if(pbe_nid == NID_undef) {
+                                       BIO_printf(bio_err,
+                                                "Unknown PBE algorithm %s\n", *args);
+                                       badarg = 1;
+                               }
+                       } else badarg = 1;
                } else if (!strcmp(*args,"-inform")) {
                        if (args[1]) {
                                args++;
@@ -113,6 +126,18 @@
                else if (!strcmp (*args, "-noiter")) iter = 1;
                else if (!strcmp (*args, "-nocrypt")) nocrypt = 1;
                else if (!strcmp (*args, "-nooct")) p8_broken = PKCS8_NO_OCTET;
+               else if (!strcmp (*args, "-nsdb")) p8_broken = PKCS8_NS_DB;
+               else if (!strcmp (*args, "-embed")) p8_broken = PKCS8_EMBEDDED_PARAM;
+               else if (!strcmp(*args,"-passin"))
+                       {
+                       if (!args[1]) goto bad;
+                       passargin= *(++args);
+                       }
+               else if (!strcmp(*args,"-passout"))
+                       {
+                       if (!args[1]) goto bad;
+                       passargout= *(++args);
+                       }
                else if (!strcmp (*args, "-in")) {
                        if (args[1]) {
                                args++;
@@ -128,25 +153,36 @@
        }
 
        if (badarg) {
-               BIO_printf (bio_err, "Usage pkcs8 [options]\n");
-               BIO_printf (bio_err, "where options are\n");
-               BIO_printf (bio_err, "-in file   input file\n");
-               BIO_printf (bio_err, "-inform X  input format (DER or PEM)\n");
-               BIO_printf (bio_err, "-outform X output format (DER or PEM)\n");
-               BIO_printf (bio_err, "-out file  output file\n");
-               BIO_printf (bio_err, "-topk8     output PKCS8 file\n");
-               BIO_printf (bio_err, "-nooct     use (broken) no octet form\n");
-               BIO_printf (bio_err, "-noiter    use 1 as iteration count\n");
-               BIO_printf (bio_err, "-nocrypt   use or expect unencrypted private 
key\n");
-               BIO_printf (bio_err, "-v2 alg    use PKCS#5 v2.0 and cipher 
\"alg\"\n");
+               bad:
+               BIO_printf(bio_err, "Usage pkcs8 [options]\n");
+               BIO_printf(bio_err, "where options are\n");
+               BIO_printf(bio_err, "-in file        input file\n");
+               BIO_printf(bio_err, "-inform X       input format (DER or PEM)\n");
+               BIO_printf(bio_err, "-passin arg     input file pass phrase source\n");
+               BIO_printf(bio_err, "-outform X      output format (DER or PEM)\n");
+               BIO_printf(bio_err, "-out file       output file\n");
+               BIO_printf(bio_err, "-passout arg    output file pass phrase 
+source\n");
+               BIO_printf(bio_err, "-topk8          output PKCS8 file\n");
+               BIO_printf(bio_err, "-nooct          use (nonstandard) no octet 
+format\n");
+               BIO_printf(bio_err, "-embed          use (nonstandard) embedded DSA 
+parameters format\n");
+               BIO_printf(bio_err, "-nsdb           use (nonstandard) DSA Netscape DB 
+format\n");
+               BIO_printf(bio_err, "-noiter         use 1 as iteration count\n");
+               BIO_printf(bio_err, "-nocrypt        use or expect unencrypted private 
+key\n");
+               BIO_printf(bio_err, "-v2 alg         use PKCS#5 v2.0 and cipher 
+\"alg\"\n");
+               BIO_printf(bio_err, "-v1 obj         use PKCS#5 v1.5 and cipher 
+\"alg\"\n");
+               return (1);
+       }
+
+       if(!app_passwd(bio_err, passargin, passargout, &passin, &passout)) {
+               BIO_printf(bio_err, "Error getting passwords\n");
                return (1);
        }
 
        if ((pbe_nid == -1) && !cipher) pbe_nid = NID_pbeWithMD5AndDES_CBC;
 
        if (infile) {
-               if (!(in = BIO_new_file (infile, "rb"))) {
-                       BIO_printf (bio_err,
+               if (!(in = BIO_new_file(infile, "rb"))) {
+                       BIO_printf(bio_err,
                                 "Can't open input file %s\n", infile);
                        return (1);
                }
@@ -154,25 +190,32 @@
 
        if (outfile) {
                if (!(out = BIO_new_file (outfile, "wb"))) {
-                       BIO_printf (bio_err,
+                       BIO_printf(bio_err,
                                 "Can't open output file %s\n", outfile);
                        return (1);
                }
        } else out = BIO_new_fp (stdout, BIO_NOCLOSE);
 
        if (topk8) {
-               if (!(pkey = PEM_read_bio_PrivateKey(in, NULL, NULL, NULL))) {
-                       BIO_printf (bio_err, "Error reading key\n", outfile);
+               if(informat == FORMAT_PEM)
+                       pkey = PEM_read_bio_PrivateKey(in, NULL, NULL, passin);
+               else if(informat == FORMAT_ASN1)
+                       pkey = d2i_PrivateKey_bio(in, NULL);
+               else {
+                       BIO_printf(bio_err, "Bad format specified for key\n");
+                       return (1);
+               }
+               if (!pkey) {
+                       BIO_printf(bio_err, "Error reading key\n", outfile);
                        ERR_print_errors(bio_err);
                        return (1);
                }
                BIO_free(in);
-               if (!(p8inf = EVP_PKEY2PKCS8(pkey))) {
-                       BIO_printf (bio_err, "Error converting key\n", outfile);
+               if (!(p8inf = EVP_PKEY2PKCS8_broken(pkey, p8_broken))) {
+                       BIO_printf(bio_err, "Error converting key\n", outfile);
                        ERR_print_errors(bio_err);
                        return (1);
                }
-               PKCS8_set_broken(p8inf, p8_broken);
                if(nocrypt) {
                        if(outformat == FORMAT_PEM) 
                                PEM_write_bio_PKCS8_PRIV_KEY_INFO(out, p8inf);
@@ -183,17 +226,23 @@
                                return (1);
                        }
                } else {
-                       EVP_read_pw_string(pass, 50, "Enter Encryption Password:", 1);
+                       if(passout) p8pass = passout;
+                       else {
+                               p8pass = pass;
+                               EVP_read_pw_string(pass, 50, "Enter Encryption 
+Password:", 1);
+                       }
+                       app_RAND_load_file(NULL, bio_err, 0);
                        if (!(p8 = PKCS8_encrypt(pbe_nid, cipher,
-                                       pass, strlen(pass),
+                                       p8pass, strlen(p8pass),
                                        NULL, 0, iter, p8inf))) {
-                               BIO_printf (bio_err, "Error encrypting key\n",
+                               BIO_printf(bio_err, "Error encrypting key\n",
                                                                 outfile);
                                ERR_print_errors(bio_err);
                                return (1);
                        }
+                       app_RAND_write_file(NULL, bio_err);
                        if(outformat == FORMAT_PEM) 
-                               PEM_write_bio_PKCS8 (out, p8);
+                               PEM_write_bio_PKCS8(out, p8);
                        else if(outformat == FORMAT_ASN1)
                                i2d_PKCS8_bio(out, p8);
                        else {
@@ -205,6 +254,8 @@
                PKCS8_PRIV_KEY_INFO_free (p8inf);
                EVP_PKEY_free(pkey);
                BIO_free(out);
+               if(passin) Free(passin);
+               if(passout) Free(passout);
                return (0);
        }
 
@@ -231,9 +282,13 @@
                        BIO_printf (bio_err, "Error reading key\n", outfile);
                        ERR_print_errors(bio_err);
                        return (1);
+               }
+               if(passin) p8pass = passin;
+               else {
+                       p8pass = pass;
+                       EVP_read_pw_string(pass, 50, "Enter Password:", 0);
                }
-               EVP_read_pw_string(pass, 50, "Enter Password:", 0);
-               p8inf = M_PKCS8_decrypt(p8, pass, strlen(pass));
+               p8inf = M_PKCS8_decrypt(p8, p8pass, strlen(p8pass));
                X509_SIG_free(p8);
        }
 
@@ -253,9 +308,17 @@
                BIO_printf(bio_err, "Warning: broken key encoding: ");
                switch (p8inf->broken) {
                        case PKCS8_NO_OCTET:
-                       BIO_printf(bio_err, "No Octet String\n");
+                       BIO_printf(bio_err, "No Octet String in PrivateKey\n");
                        break;
 
+                       case PKCS8_EMBEDDED_PARAM:
+                       BIO_printf(bio_err, "DSA parameters included in PrivateKey\n");
+                       break;
+
+                       case PKCS8_NS_DB:
+                       BIO_printf(bio_err, "DSA public key include in PrivateKey\n");
+                       break;
+
                        default:
                        BIO_printf(bio_err, "Unknown broken type\n");
                        break;
@@ -263,12 +326,20 @@
        }
        
        PKCS8_PRIV_KEY_INFO_free(p8inf);
-
-       PEM_write_bio_PrivateKey(out, pkey, NULL, NULL, 0, NULL, NULL);
+       if(outformat == FORMAT_PEM) 
+               PEM_write_bio_PrivateKey(out, pkey, NULL, NULL, 0, NULL, passout);
+       else if(outformat == FORMAT_ASN1)
+               i2d_PrivateKey_bio(out, pkey);
+       else {
+               BIO_printf(bio_err, "Bad format specified for key\n");
+                       return (1);
+       }
 
        EVP_PKEY_free(pkey);
        BIO_free(out);
        BIO_free(in);
+       if(passin) Free(passin);
+       if(passout) Free(passout);
 
        return (0);
 }
Index: opensa/openssl/apps/progs.h
diff -u opensa/openssl/apps/progs.h:1.1 opensa/openssl/apps/progs.h:1.2
--- opensa/openssl/apps/progs.h:1.1     Tue Jan 25 23:38:06 2000
+++ opensa/openssl/apps/progs.h Thu Mar  2 21:11:48 2000
@@ -1,11 +1,14 @@
-/* This file was generated by progs.pl. */
+/* apps/progs.h */
+/* automatically generated by progs.pl for openssl.c */
 
 extern int verify_main(int argc,char *argv[]);
 extern int asn1parse_main(int argc,char *argv[]);
 extern int req_main(int argc,char *argv[]);
 extern int dgst_main(int argc,char *argv[]);
 extern int dh_main(int argc,char *argv[]);
+extern int dhparam_main(int argc,char *argv[]);
 extern int enc_main(int argc,char *argv[]);
+extern int passwd_main(int argc,char *argv[]);
 extern int gendh_main(int argc,char *argv[]);
 extern int errstr_main(int argc,char *argv[]);
 extern int ca_main(int argc,char *argv[]);
@@ -28,9 +31,9 @@
 extern int nseq_main(int argc,char *argv[]);
 extern int pkcs12_main(int argc,char *argv[]);
 extern int pkcs8_main(int argc,char *argv[]);
+extern int spkac_main(int argc,char *argv[]);
+extern int smime_main(int argc,char *argv[]);
 
-#ifdef SSLEAY_SRC  /* Defined only in openssl.c. */
-
 #define FUNC_TYPE_GENERAL      1
 #define FUNC_TYPE_MD           2
 #define FUNC_TYPE_CIPHER       3
@@ -49,7 +52,11 @@
 #ifndef NO_DH
        {FUNC_TYPE_GENERAL,"dh",dh_main},
 #endif
+#ifndef NO_DH
+       {FUNC_TYPE_GENERAL,"dhparam",dhparam_main},
+#endif
        {FUNC_TYPE_GENERAL,"enc",enc_main},
+       {FUNC_TYPE_GENERAL,"passwd",passwd_main},
 #ifndef NO_DH
        {FUNC_TYPE_GENERAL,"gendh",gendh_main},
 #endif
@@ -72,14 +79,14 @@
 #ifndef NO_DSA
        {FUNC_TYPE_GENERAL,"gendsa",gendsa_main},
 #endif
-#if !defined(NO_SOCK) && !(defined(NO_SSL2) && defined(O_SSL3))
+#if !defined(NO_SOCK) && !(defined(NO_SSL2) && defined(NO_SSL3))
        {FUNC_TYPE_GENERAL,"s_server",s_server_main},
 #endif
-#if !defined(NO_SOCK) && !(defined(NO_SSL2) && defined(O_SSL3))
+#if !defined(NO_SOCK) && !(defined(NO_SSL2) && defined(NO_SSL3))
        {FUNC_TYPE_GENERAL,"s_client",s_client_main},
 #endif
        {FUNC_TYPE_GENERAL,"speed",speed_main},
-#if !defined(NO_SOCK) && !(defined(NO_SSL2) && defined(O_SSL3))
+#if !defined(NO_SOCK) && !(defined(NO_SSL2) && defined(NO_SSL3))
        {FUNC_TYPE_GENERAL,"s_time",s_time_main},
 #endif
        {FUNC_TYPE_GENERAL,"version",version_main},
@@ -94,6 +101,8 @@
        {FUNC_TYPE_GENERAL,"pkcs12",pkcs12_main},
 #endif
        {FUNC_TYPE_GENERAL,"pkcs8",pkcs8_main},
+       {FUNC_TYPE_GENERAL,"spkac",spkac_main},
+       {FUNC_TYPE_GENERAL,"smime",smime_main},
        {FUNC_TYPE_MD,"md2",dgst_main},
        {FUNC_TYPE_MD,"md5",dgst_main},
        {FUNC_TYPE_MD,"sha",dgst_main},
@@ -116,6 +125,9 @@
 #ifndef NO_RC4
        {FUNC_TYPE_CIPHER,"rc4",enc_main},
 #endif
+#ifndef NO_RC4
+       {FUNC_TYPE_CIPHER,"rc4-40",enc_main},
+#endif
 #ifndef NO_RC2
        {FUNC_TYPE_CIPHER,"rc2",enc_main},
 #endif
@@ -188,6 +200,12 @@
 #ifndef NO_RC2
        {FUNC_TYPE_CIPHER,"rc2-ofb",enc_main},
 #endif
+#ifndef NO_RC2
+       {FUNC_TYPE_CIPHER,"rc2-64-cbc",enc_main},
+#endif
+#ifndef NO_RC2
+       {FUNC_TYPE_CIPHER,"rc2-40-cbc",enc_main},
+#endif
 #ifndef NO_BF
        {FUNC_TYPE_CIPHER,"bf-cbc",enc_main},
 #endif
@@ -229,5 +247,3 @@
 #endif
        {0,NULL,NULL}
        };
-#endif
-
Index: opensa/openssl/apps/progs.pl
diff -u opensa/openssl/apps/progs.pl:1.1 opensa/openssl/apps/progs.pl:1.2
--- opensa/openssl/apps/progs.pl:1.1    Tue Jan 25 23:38:06 2000
+++ opensa/openssl/apps/progs.pl        Thu Mar  2 21:11:48 2000
@@ -1,6 +1,7 @@
 #!/usr/local/bin/perl
 
-print "/* This file was generated by progs.pl. */\n\n";
+print "/* apps/progs.h */\n";
+print "/* automatically generated by progs.pl for openssl.c */\n\n";
 
 grep(s/^asn1pars$/asn1parse/,@ARGV);
 
@@ -9,8 +10,6 @@
 
 print <<'EOF';
 
-#ifdef SSLEAY_SRC  /* Defined only in openssl.c. */
-
 #define FUNC_TYPE_GENERAL      1
 #define FUNC_TYPE_MD           2
 #define FUNC_TYPE_CIPHER       3
@@ -29,13 +28,15 @@
        push(@files,$_);
        $str="\t{FUNC_TYPE_GENERAL,\"$_\",${_}_main},\n";
        if (($_ =~ /^s_/) || ($_ =~ /^ciphers$/))
-               { print "#if !defined(NO_SOCK) && !(defined(NO_SSL2) && 
defined(O_SSL3))\n${str}#endif\n"; } 
+               { print "#if !defined(NO_SOCK) && !(defined(NO_SSL2) && 
+defined(NO_SSL3))\n${str}#endif\n"; } 
        elsif ( ($_ =~ /^rsa$/) || ($_ =~ /^genrsa$/) ) 
                { print "#ifndef NO_RSA\n${str}#endif\n";  }
        elsif ( ($_ =~ /^dsa$/) || ($_ =~ /^gendsa$/) || ($_ =~ /^dsaparam$/))
                { print "#ifndef NO_DSA\n${str}#endif\n"; }
-       elsif ( ($_ =~ /^dh$/) || ($_ =~ /^gendh$/))
+       elsif ( ($_ =~ /^dh$/) || ($_ =~ /^gendh$/) || ($_ =~ /^dhparam$/))
                { print "#ifndef NO_DH\n${str}#endif\n"; }
+       elsif ( ($_ =~ /^pkcs12$/))
+               { print "#if !defined(NO_DES) && !defined(NO_SHA1)\n${str}#endif\n"; }
        else
                { print $str; }
        }
@@ -48,13 +49,14 @@
 
 foreach (
        "base64",
-       "des", "des3", "desx", "idea", "rc4", "rc2","bf","cast","rc5",
+       "des", "des3", "desx", "idea", "rc4", "rc4-40",
+       "rc2", "bf", "cast", "rc5",
        "des-ecb", "des-ede",    "des-ede3",
        "des-cbc", "des-ede-cbc","des-ede3-cbc",
        "des-cfb", "des-ede-cfb","des-ede3-cfb",
        "des-ofb", "des-ede-ofb","des-ede3-ofb",
        "idea-cbc","idea-ecb",   "idea-cfb", "idea-ofb",
-       "rc2-cbc", "rc2-ecb",    "rc2-cfb",  "rc2-ofb",
+       "rc2-cbc", "rc2-ecb", "rc2-cfb","rc2-ofb", "rc2-64-cbc", "rc2-40-cbc",
        "bf-cbc",  "bf-ecb",     "bf-cfb",   "bf-ofb",
        "cast5-cbc","cast5-ecb", "cast5-cfb","cast5-ofb",
        "cast-cbc", "rc5-cbc",   "rc5-ecb",  "rc5-cfb",  "rc5-ofb")
@@ -73,5 +75,3 @@
        }
 
 print "\t{0,NULL,NULL}\n\t};\n";
-print "#endif\n\n";
-
Index: opensa/openssl/apps/req.c
diff -u opensa/openssl/apps/req.c:1.1 opensa/openssl/apps/req.c:1.2
--- opensa/openssl/apps/req.c:1.1       Tue Jan 25 23:38:06 2000
+++ opensa/openssl/apps/req.c   Thu Mar  2 21:11:49 2000
@@ -66,7 +66,6 @@
 #include "apps.h"
 #include <openssl/bio.h>
 #include <openssl/evp.h>
-#include <openssl/rand.h>
 #include <openssl/conf.h>
 #include <openssl/err.h>
 #include <openssl/asn1.h>
@@ -79,9 +78,12 @@
 
 #define BITS           "default_bits"
 #define KEYFILE                "default_keyfile"
+#define PROMPT         "prompt"
 #define DISTINGUISHED_NAME     "distinguished_name"
 #define ATTRIBUTES     "attributes"
 #define V3_EXTENSIONS  "x509_extensions"
+#define REQ_EXTENSIONS "req_extensions"
+#define STRING_MASK    "string_mask"
 
 #define DEFAULT_KEY_LENGTH     512
 #define MIN_KEY_LENGTH         384
@@ -89,7 +91,7 @@
 #undef PROG
 #define PROG   req_main
 
-/* -inform arg - input format - default PEM (one of DER, TXT or PEM)
+/* -inform arg - input format - default PEM (DER or PEM)
  * -outform arg - output format - default PEM
  * -in arg     - input file - default stdin
  * -out arg    - output file - default stdout
@@ -108,13 +110,20 @@
  */
 
 static int make_REQ(X509_REQ *req,EVP_PKEY *pkey,int attribs);
-static int add_attribute_object(STACK_OF(X509_ATTRIBUTE) *n, char *text,
+static int prompt_info(X509_REQ *req,
+               STACK_OF(CONF_VALUE) *dn_sk, char *dn_sect,
+               STACK_OF(CONF_VALUE) *attr_sk, char *attr_sect, int attribs);
+static int auto_info(X509_REQ *req, STACK_OF(CONF_VALUE) *sk,
+                               STACK_OF(CONF_VALUE) *attr, int attribs);
+static int add_attribute_object(X509_REQ *req, char *text,
                                char *def, char *value, int nid, int min,
                                int max);
 static int add_DN_object(X509_NAME *n, char *text, char *def, char *value,
        int nid,int min,int max);
+#ifndef NO_RSA
 static void MS_CALLBACK req_cb(int p,int n,void *arg);
-static int req_fix_data(int nid,int *type,int len,int min,int max);
+#endif
+static int req_check_len(int len,int min,int max);
 static int check_end(char *str, char *end);
 static int add_oid_section(LHASH *conf);
 #ifndef MONOLITH
@@ -127,6 +136,8 @@
 #define TYPE_DSA       2
 #define TYPE_DH                3
 
+int MAIN(int, char **);
+
 int MAIN(int argc, char **argv)
        {
 #ifndef NO_DSA
@@ -139,17 +150,21 @@
        int i,badops=0,newreq=0,newkey= -1,pkey_type=0;
        BIO *in=NULL,*out=NULL;
        int informat,outformat,verify=0,noout=0,text=0,keyform=FORMAT_PEM;
-       int nodes=0,kludge=0;
+       int nodes=0,kludge=0,newhdr=0;
        char *infile,*outfile,*prog,*keyfile=NULL,*template=NULL,*keyout=NULL;
        char *extensions = NULL;
+       char *req_exts = NULL;
        EVP_CIPHER *cipher=NULL;
        int modulus=0;
+       char *passargin = NULL, *passargout = NULL;
+       char *passin = NULL, *passout = NULL;
        char *p;
        const EVP_MD *md_alg=NULL,*digest=EVP_md5();
 #ifndef MONOLITH
        MS_STATIC char config_name[256];
 #endif
 
+       req_conf = NULL;
 #ifndef NO_DES
        cipher=EVP_des_ede3_cbc();
 #endif
@@ -214,6 +229,16 @@
                        if (--argc < 1) goto bad;
                        keyout= *(++argv);
                        }
+               else if (strcmp(*argv,"-passin") == 0)
+                       {
+                       if (--argc < 1) goto bad;
+                       passargin= *(++argv);
+                       }
+               else if (strcmp(*argv,"-passout") == 0)
+                       {
+                       if (--argc < 1) goto bad;
+                       passargout= *(++argv);
+                       }
                else if (strcmp(*argv,"-newkey") == 0)
                        {
                        int is_numeric;
@@ -281,6 +306,8 @@
 
                        newreq=1;
                        }
+               else if (strcmp(*argv,"-newhdr") == 0)
+                       newhdr=1;
                else if (strcmp(*argv,"-modulus") == 0)
                        modulus=1;
                else if (strcmp(*argv,"-verify") == 0)
@@ -308,8 +335,17 @@
                        /* ok */
                        digest=md_alg;
                        }
+               else if (strcmp(*argv,"-extensions") == 0)
+                       {
+                       if (--argc < 1) goto bad;
+                       extensions = *(++argv);
+                       }
+               else if (strcmp(*argv,"-reqexts") == 0)
+                       {
+                       if (--argc < 1) goto bad;
+                       req_exts = *(++argv);
+                       }
                else
-
                        {
                        BIO_printf(bio_err,"unknown option %s\n",*argv);
                        badops=1;
@@ -324,8 +360,8 @@
 bad:
                BIO_printf(bio_err,"%s [options] <infile >outfile\n",prog);
                BIO_printf(bio_err,"where options  are\n");
-               BIO_printf(bio_err," -inform arg    input format - one of DER TXT 
PEM\n");
-               BIO_printf(bio_err," -outform arg   output format - one of DER TXT 
PEM\n");
+               BIO_printf(bio_err," -inform arg    input format - DER or PEM\n");
+               BIO_printf(bio_err," -outform arg   output format - DER or PEM\n");
                BIO_printf(bio_err," -in arg        input file\n");
                BIO_printf(bio_err," -out arg       output file\n");
                BIO_printf(bio_err," -text          text form of request\n");
@@ -344,16 +380,21 @@
                BIO_printf(bio_err," -new           new request.\n");
                BIO_printf(bio_err," -x509          output a x509 structure instead of 
a cert. req.\n");
                BIO_printf(bio_err," -days          number of days a x509 generated by 
-x509 is valid for.\n");
+               BIO_printf(bio_err," -newhdr        output \"NEW\" in the header 
+lines\n");
                BIO_printf(bio_err," -asn1-kludge   Output the 'request' in a format 
that is wrong but some CA's\n");
                BIO_printf(bio_err,"                have been reported as 
requiring\n");
-               BIO_printf(bio_err,"                [ It is now always turned on but 
can be turned off with -no-asn1-kludge ]\n");
+               BIO_printf(bio_err," -extensions .. specify certificate extension 
+section (override value in config file)\n");
+               BIO_printf(bio_err," -reqexts ..    specify request extension section 
+(override value in config file)\n");
                goto end;
                }
 
        ERR_load_crypto_strings();
-       X509V3_add_standard_extensions();
+       if(!app_passwd(bio_err, passargin, passargout, &passin, &passout)) {
+               BIO_printf(bio_err, "Error getting passwords\n");
+               goto end;
+       }
 
-#ifndef MONOLITH
+#ifndef MONOLITH /* else this has happened in openssl.c (global `config') */
        /* Lets load up our environment a little */
        p=getenv("OPENSSL_CONF");
        if (p == NULL)
@@ -367,7 +408,7 @@
                strcat(config_name,OPENSSL_CONF);
                p=config_name;
                }
-        default_config_file=p;
+       default_config_file=p;
        config=CONF_load(config,p,NULL);
 #endif
 
@@ -425,7 +466,8 @@
                        digest=md_alg;
                }
 
-       extensions = CONF_get_string(req_conf, SECTION, V3_EXTENSIONS);
+       if(!extensions)
+               extensions = CONF_get_string(req_conf, SECTION, V3_EXTENSIONS);
        if(extensions) {
                /* Check syntax of file */
                X509V3_CTX ctx;
@@ -438,6 +480,34 @@
                }
        }
 
+       if(!passin)
+               passin = CONF_get_string(req_conf, SECTION, "input_password");
+
+       if(!passout)
+               passout = CONF_get_string(req_conf, SECTION, "output_password");
+
+       p = CONF_get_string(req_conf, SECTION, STRING_MASK);
+
+       if(p && !ASN1_STRING_set_default_mask_asc(p)) {
+               BIO_printf(bio_err, "Invalid global string mask setting %s\n", p);
+               goto end;
+       }
+
+       if(!req_exts)
+               req_exts = CONF_get_string(req_conf, SECTION, REQ_EXTENSIONS);
+       if(req_exts) {
+               /* Check syntax of file */
+               X509V3_CTX ctx;
+               X509V3_set_ctx_test(&ctx);
+               X509V3_set_conf_lhash(&ctx, req_conf);
+               if(!X509V3_EXT_add_conf(req_conf, &ctx, req_exts, NULL)) {
+                       BIO_printf(bio_err,
+                        "Error Loading request extension section %s\n",
+                                                               req_exts);
+                       goto end;
+               }
+       }
+
        in=BIO_new(BIO_s_file());
        out=BIO_new(BIO_s_file());
        if ((in == NULL) || (out == NULL))
@@ -451,11 +521,12 @@
                        goto end;
                        }
 
-/*             if (keyform == FORMAT_ASN1)
-                       rsa=d2i_RSAPrivateKey_bio(in,NULL);
-               else */
-               if (keyform == FORMAT_PEM)
-                       pkey=PEM_read_bio_PrivateKey(in,NULL,NULL,NULL);
+               if (keyform == FORMAT_ASN1)
+                       pkey=d2i_PrivateKey_bio(in,NULL);
+               else if (keyform == FORMAT_PEM)
+                       {
+                       pkey=PEM_read_bio_PrivateKey(in,NULL,NULL,passin);
+                       }
                else
                        {
                        BIO_printf(bio_err,"bad input format specified for X509 
request\n");
@@ -471,25 +542,9 @@
 
        if (newreq && (pkey == NULL))
                {
-               char *randfile;
-               char buffer[200];
-
-               if ((randfile=CONF_get_string(req_conf,SECTION,"RANDFILE")) == NULL)
-                       randfile=RAND_file_name(buffer,200);
-#ifdef WINDOWS
-               BIO_printf(bio_err,"Loading 'screen' into random state -");
-               BIO_flush(bio_err);
-               RAND_screen();
-               BIO_printf(bio_err," done\n");
-#endif
-               if ((randfile == NULL) || !RAND_load_file(randfile,1024L*1024L))
-                       {
-                       BIO_printf(bio_err,"unable to load 'random state'\n");
-                       BIO_printf(bio_err,"What this means is that the random number 
generator has not been seeded\n");
-                       BIO_printf(bio_err,"with much random data.\n");
-                       BIO_printf(bio_err,"Consider setting the RANDFILE environment 
variable to point at a file that\n");
-                       BIO_printf(bio_err,"'random' data can be kept in.\n");
-                       }
+               char *randfile = CONF_get_string(req_conf,SECTION,"RANDFILE");
+               app_RAND_load_file(randfile, bio_err, 0);
+       
                if (newkey <= 0)
                        {
                        newkey=(int)CONF_get_number(req_conf,SECTION,BITS);
@@ -527,8 +582,7 @@
                        }
 #endif
 
-               if ((randfile == NULL) || (RAND_write_file(randfile) == 0))
-                       BIO_printf(bio_err,"unable to write 'random state'\n");
+               app_RAND_write_file(randfile, bio_err);
 
                if (pkey == NULL) goto end;
 
@@ -560,7 +614,7 @@
                i=0;
 loop:
                if (!PEM_write_bio_PrivateKey(out,pkey,cipher,
-                       NULL,0,NULL,NULL))
+                       NULL,0,NULL,passout))
                        {
                        if ((ERR_GET_REASON(ERR_peek_error()) ==
                                PEM_R_PROBLEMS_GETTING_PASSWORD) && (i < 3))
@@ -677,6 +731,22 @@
                        }
                else
                        {
+                       X509V3_CTX ext_ctx;
+
+                       /* Set up V3 context struct */
+
+                       X509V3_set_ctx(&ext_ctx, NULL, NULL, req, NULL, 0);
+                       X509V3_set_conf_lhash(&ext_ctx, req_conf);
+
+                       /* Add extensions */
+                       if(req_exts && !X509V3_EXT_REQ_add_conf(req_conf, 
+                                       &ext_ctx, req_exts, req))
+                           {
+                           BIO_printf(bio_err,
+                                      "Error Loading extension section %s\n",
+                                      req_exts);
+                           goto end;
+                           }
                        if (!(i=X509_REQ_sign(req,pkey,digest)))
                                goto end;
                        }
@@ -767,9 +837,10 @@
                {
                if      (outformat == FORMAT_ASN1)
                        i=i2d_X509_REQ_bio(out,req);
-               else if (outformat == FORMAT_PEM)
-                       i=PEM_write_bio_X509_REQ(out,req);
-               else    {
+               else if (outformat == FORMAT_PEM) {
+                       if(newhdr) i=PEM_write_bio_X509_REQ_NEW(out,req);
+                       else i=PEM_write_bio_X509_REQ(out,req);
+               } else {
                        BIO_printf(bio_err,"bad output format specified for 
outfile\n");
                        goto end;
                        }
@@ -807,7 +878,8 @@
        EVP_PKEY_free(pkey);
        X509_REQ_free(req);
        X509_free(x509ss);
-       X509V3_EXT_cleanup();
+       if(passin) Free(passin);
+       if(passout) Free(passout);
        OBJ_cleanup();
 #ifndef NO_DSA
        if (dsa_params != NULL) DSA_free(dsa_params);
@@ -818,43 +890,67 @@
 static int make_REQ(X509_REQ *req, EVP_PKEY *pkey, int attribs)
        {
        int ret=0,i;
-       char *p,*q;
-       X509_REQ_INFO *ri;
-       char buf[100];
-       int nid,min,max;
-       char *type,*def,*tmp,*value,*tmp_attr;
-       STACK_OF(CONF_VALUE) *sk, *attr=NULL;
-       CONF_VALUE *v;
-       
-       tmp=CONF_get_string(req_conf,SECTION,DISTINGUISHED_NAME);
-       if (tmp == NULL)
+       char no_prompt = 0;
+       STACK_OF(CONF_VALUE) *dn_sk, *attr_sk = NULL;
+       char *tmp, *dn_sect,*attr_sect;
+
+       tmp=CONF_get_string(req_conf,SECTION,PROMPT);
+       if((tmp != NULL) && !strcmp(tmp, "no")) no_prompt = 1;
+
+       dn_sect=CONF_get_string(req_conf,SECTION,DISTINGUISHED_NAME);
+       if (dn_sect == NULL)
                {
                BIO_printf(bio_err,"unable to find '%s' in config\n",
                        DISTINGUISHED_NAME);
                goto err;
                }
-       sk=CONF_get_section(req_conf,tmp);
-       if (sk == NULL)
+       dn_sk=CONF_get_section(req_conf,dn_sect);
+       if (dn_sk == NULL)
                {
-               BIO_printf(bio_err,"unable to get '%s' section\n",tmp);
+               BIO_printf(bio_err,"unable to get '%s' section\n",dn_sect);
                goto err;
                }
 
-       tmp_attr=CONF_get_string(req_conf,SECTION,ATTRIBUTES);
-       if (tmp_attr == NULL)
-               attr=NULL;
+       attr_sect=CONF_get_string(req_conf,SECTION,ATTRIBUTES);
+       if (attr_sect == NULL)
+               attr_sk=NULL;
        else
                {
-               attr=CONF_get_section(req_conf,tmp_attr);
-               if (attr == NULL)
+               attr_sk=CONF_get_section(req_conf,attr_sect);
+               if (attr_sk == NULL)
                        {
-                       BIO_printf(bio_err,"unable to get '%s' section\n",tmp_attr);
+                       BIO_printf(bio_err,"unable to get '%s' section\n",attr_sect);
                        goto err;
                        }
                }
+
+       /* setup version number */
+       if (!X509_REQ_set_version(req,0L)) goto err; /* version 1 */
 
-       ri=req->req_info;
+       if(no_prompt) i = auto_info(req, dn_sk, attr_sk, attribs);
+       else i = prompt_info(req, dn_sk, dn_sect, attr_sk, attr_sect, attribs);
+       if(!i) goto err;
 
+       X509_REQ_set_pubkey(req,pkey);
+
+       ret=1;
+err:
+       return(ret);
+       }
+
+
+static int prompt_info(X509_REQ *req,
+               STACK_OF(CONF_VALUE) *dn_sk, char *dn_sect,
+               STACK_OF(CONF_VALUE) *attr_sk, char *attr_sect, int attribs)
+       {
+       int i;
+       char *p,*q;
+       char buf[100];
+       int nid,min,max;
+       char *type,*def,*value;
+       CONF_VALUE *v;
+       X509_NAME *subj;
+       subj = X509_REQ_get_subject_name(req);
        BIO_printf(bio_err,"You are about to be asked to enter information that will 
be incorporated\n");
        BIO_printf(bio_err,"into your certificate request.\n");
        BIO_printf(bio_err,"What you are about to enter is what is called a 
Distinguished Name or a DN.\n");
@@ -863,18 +959,16 @@
        BIO_printf(bio_err,"If you enter '.', the field will be left blank.\n");
        BIO_printf(bio_err,"-----\n");
 
-       /* setup version number */
-       if (!ASN1_INTEGER_set(ri->version,0L)) goto err; /* version 1 */
 
-       if (sk_CONF_VALUE_num(sk))
+       if (sk_CONF_VALUE_num(dn_sk))
                {
                i= -1;
 start:         for (;;)
                        {
                        i++;
-                       if (sk_CONF_VALUE_num(sk) <= i) break;
+                       if (sk_CONF_VALUE_num(dn_sk) <= i) break;
 
-                       v=sk_CONF_VALUE_value(sk,i);
+                       v=sk_CONF_VALUE_value(dn_sk,i);
                        p=q=NULL;
                        type=v->name;
                        if(!check_end(type,"_min") || !check_end(type,"_max") ||
@@ -893,32 +987,32 @@
                        /* If OBJ not recognised ignore it */
                        if ((nid=OBJ_txt2nid(type)) == NID_undef) goto start;
                        sprintf(buf,"%s_default",v->name);
-                       if ((def=CONF_get_string(req_conf,tmp,buf)) == NULL)
+                       if ((def=CONF_get_string(req_conf,dn_sect,buf)) == NULL)
                                def="";
                                
                        sprintf(buf,"%s_value",v->name);
-                       if ((value=CONF_get_string(req_conf,tmp,buf)) == NULL)
+                       if ((value=CONF_get_string(req_conf,dn_sect,buf)) == NULL)
                                value=NULL;
 
                        sprintf(buf,"%s_min",v->name);
-                       min=(int)CONF_get_number(req_conf,tmp,buf);
+                       min=(int)CONF_get_number(req_conf,dn_sect,buf);
 
                        sprintf(buf,"%s_max",v->name);
-                       max=(int)CONF_get_number(req_conf,tmp,buf);
+                       max=(int)CONF_get_number(req_conf,dn_sect,buf);
 
-                       if (!add_DN_object(ri->subject,v->value,def,value,nid,
+                       if (!add_DN_object(subj,v->value,def,value,nid,
                                min,max))
-                               goto err;
+                               return 0;
                        }
-               if (sk_X509_NAME_ENTRY_num(ri->subject->entries) == 0)
+               if (X509_NAME_entry_count(subj) == 0)
                        {
                        BIO_printf(bio_err,"error, no objects specified in config 
file\n");
-                       goto err;
+                       return 0;
                        }
 
                if (attribs)
                        {
-                       if ((attr != NULL) && (sk_CONF_VALUE_num(attr) > 0))
+                       if ((attr_sk != NULL) && (sk_CONF_VALUE_num(attr_sk) > 0))
                                {
                                BIO_printf(bio_err,"\nPlease enter the following 
'extra' attributes\n");
                                BIO_printf(bio_err,"to be sent with your certificate 
request\n");
@@ -928,57 +1022,101 @@
 start2:                        for (;;)
                                {
                                i++;
-                               if ((attr == NULL) ||
-                                           (sk_CONF_VALUE_num(attr) <= i))
+                               if ((attr_sk == NULL) ||
+                                           (sk_CONF_VALUE_num(attr_sk) <= i))
                                        break;
 
-                               v=sk_CONF_VALUE_value(attr,i);
+                               v=sk_CONF_VALUE_value(attr_sk,i);
                                type=v->name;
                                if ((nid=OBJ_txt2nid(type)) == NID_undef)
                                        goto start2;
 
                                sprintf(buf,"%s_default",type);
-                               if ((def=CONF_get_string(req_conf,tmp_attr,buf))
+                               if ((def=CONF_get_string(req_conf,attr_sect,buf))
                                        == NULL)
                                        def="";
                                
                                sprintf(buf,"%s_value",type);
-                               if ((value=CONF_get_string(req_conf,tmp_attr,buf))
+                               if ((value=CONF_get_string(req_conf,attr_sect,buf))
                                        == NULL)
                                        value=NULL;
 
                                sprintf(buf,"%s_min",type);
-                               min=(int)CONF_get_number(req_conf,tmp_attr,buf);
+                               min=(int)CONF_get_number(req_conf,attr_sect,buf);
 
                                sprintf(buf,"%s_max",type);
-                               max=(int)CONF_get_number(req_conf,tmp_attr,buf);
+                               max=(int)CONF_get_number(req_conf,attr_sect,buf);
 
-                               if (!add_attribute_object(ri->attributes,
+                               if (!add_attribute_object(req,
                                        v->value,def,value,nid,min,max))
-                                       goto err;
+                                       return 0;
                                }
                        }
                }
        else
                {
                BIO_printf(bio_err,"No template, please set one up.\n");
-               goto err;
+               return 0;
                }
 
-       X509_REQ_set_pubkey(req,pkey);
+       return 1;
 
-       ret=1;
-err:
-       return(ret);
        }
 
+static int auto_info(X509_REQ *req, STACK_OF(CONF_VALUE) *dn_sk,
+                       STACK_OF(CONF_VALUE) *attr_sk, int attribs)
+       {
+       int i;
+       char *p,*q;
+       char *type;
+       CONF_VALUE *v;
+       X509_NAME *subj;
+
+       subj = X509_REQ_get_subject_name(req);
+
+       for (i = 0; i < sk_CONF_VALUE_num(dn_sk); i++)
+               {
+               v=sk_CONF_VALUE_value(dn_sk,i);
+               p=q=NULL;
+               type=v->name;
+               /* Skip past any leading X. X: X, etc to allow for
+                * multiple instances 
+                */
+               for(p = v->name; *p ; p++) 
+                       if ((*p == ':') || (*p == ',') || (*p == '.')) {
+                               p++;
+                               if(*p) type = p;
+                               break;
+                       }
+               if (!X509_NAME_add_entry_by_txt(subj,type, MBSTRING_ASC,
+                               (unsigned char *) v->value,-1,-1,0)) return 0;
+
+               }
+
+               if (!X509_NAME_entry_count(subj))
+                       {
+                       BIO_printf(bio_err,"error, no objects specified in config 
+file\n");
+                       return 0;
+                       }
+               if (attribs)
+                       {
+                       for (i = 0; i < sk_CONF_VALUE_num(attr_sk); i++)
+                               {
+                               v=sk_CONF_VALUE_value(attr_sk,i);
+                               if(!X509_REQ_add1_attr_by_txt(req, v->name, 
+MBSTRING_ASC,
+                                       (unsigned char *)v->value, -1)) return 0;
+                               }
+                       }
+       return 1;
+       }
+
+
 static int add_DN_object(X509_NAME *n, char *text, char *def, char *value,
             int nid, int min, int max)
        {
-       int i,j,ret=0;
-       X509_NAME_ENTRY *ne=NULL;
+       int i,ret=0;
        MS_STATIC char buf[1024];
-
+start:
        BIO_printf(bio_err,"%s [%s]:",text,def);
        (void)BIO_flush(bio_err);
        if (value != NULL)
@@ -1011,33 +1149,23 @@
                }
        buf[--i]='\0';
 
-       j=ASN1_PRINTABLE_type((unsigned char *)buf,-1);
-       if (req_fix_data(nid,&j,i,min,max) == 0)
-               goto err;
 #ifdef CHARSET_EBCDIC
        ebcdic2ascii(buf, buf, i);
 #endif
-       if ((ne=X509_NAME_ENTRY_create_by_NID(NULL,nid,j,(unsigned char *)buf,
-               strlen(buf)))
-               == NULL) goto err;
-       if (!X509_NAME_add_entry(n,ne,X509_NAME_entry_count(n),0))
-               goto err;
-
+       if(!req_check_len(i, min, max)) goto start;
+       if (!X509_NAME_add_entry_by_NID(n,nid, MBSTRING_ASC,
+                               (unsigned char *) buf, -1,-1,0)) goto err;
        ret=1;
 err:
-       if (ne != NULL) X509_NAME_ENTRY_free(ne);
        return(ret);
        }
 
-static int add_attribute_object(STACK_OF(X509_ATTRIBUTE) *n, char *text,
+static int add_attribute_object(X509_REQ *req, char *text,
                                char *def, char *value, int nid, int min,
                                int max)
        {
-       int i,z;
-       X509_ATTRIBUTE *xa=NULL;
+       int i;
        static char buf[1024];
-       ASN1_BIT_STRING *bs=NULL;
-       ASN1_TYPE *at=NULL;
 
 start:
        BIO_printf(bio_err,"%s [%s]:",text,def);
@@ -1071,50 +1199,21 @@
                return(0);
                }
        buf[--i]='\0';
+       if(!req_check_len(i, min, max)) goto start;
 
-       /* add object plus value */
-       if ((xa=X509_ATTRIBUTE_new()) == NULL)
-               goto err;
-       if ((xa->value.set=sk_ASN1_TYPE_new_null()) == NULL)
+       if(!X509_REQ_add1_attr_by_NID(req, nid, MBSTRING_ASC,
+                                       (unsigned char *)buf, -1)) {
+               BIO_printf(bio_err, "Error adding attribute\n");
+               ERR_print_errors(bio_err);
                goto err;
-       xa->set=1;
-
-       if (xa->object != NULL) ASN1_OBJECT_free(xa->object);
-       xa->object=OBJ_nid2obj(nid);
-
-       if ((bs=ASN1_BIT_STRING_new()) == NULL) goto err;
-
-       bs->type=ASN1_PRINTABLE_type((unsigned char *)buf,-1);
-
-       z=req_fix_data(nid,&bs->type,i,min,max);
-       if (z == 0)
-               {
-               if (value == NULL)
-                       goto start;
-               else    goto err;
-               }
-
-       if (!ASN1_STRING_set(bs,(unsigned char *)buf,i+1))
-               { BIO_printf(bio_err,"Malloc failure\n"); goto err; }
-
-       if ((at=ASN1_TYPE_new()) == NULL)
-               { BIO_printf(bio_err,"Malloc failure\n"); goto err; }
-
-       ASN1_TYPE_set(at,bs->type,(char *)bs);
-       sk_ASN1_TYPE_push(xa->value.set,at);
-       bs=NULL;
-       at=NULL;
-       /* only one item per attribute */
+       }
 
-       if (!sk_X509_ATTRIBUTE_push(n,xa)) goto err;
        return(1);
 err:
-       if (xa != NULL) X509_ATTRIBUTE_free(xa);
-       if (at != NULL) ASN1_TYPE_free(at);
-       if (bs != NULL) ASN1_BIT_STRING_free(bs);
        return(0);
        }
 
+#ifndef NO_RSA
 static void MS_CALLBACK req_cb(int p, int n, void *arg)
        {
        char c='*';
@@ -1129,26 +1228,10 @@
        p=n;
 #endif
        }
+#endif
 
-static int req_fix_data(int nid, int *type, int len, int min, int max)
+static int req_check_len(int len, int min, int max)
        {
-       if (nid == NID_pkcs9_emailAddress)
-               *type=V_ASN1_IA5STRING;
-       if ((nid == NID_commonName) && (*type == V_ASN1_IA5STRING))
-               *type=V_ASN1_T61STRING;
-       if ((nid == NID_pkcs9_challengePassword) &&
-               (*type == V_ASN1_IA5STRING))
-               *type=V_ASN1_T61STRING;
-
-       if ((nid == NID_pkcs9_unstructuredName) &&
-               (*type == V_ASN1_T61STRING))
-               {
-               BIO_printf(bio_err,"invalid characters in string, please re-enter the 
string\n");
-               return(0);
-               }
-       if (nid == NID_pkcs9_unstructuredName)
-               *type=V_ASN1_IA5STRING;
-
        if (len < min)
                {
                BIO_printf(bio_err,"string is too short, it needs to be at least %d 
bytes long\n",min);
Index: opensa/openssl/apps/rsa.c
diff -u opensa/openssl/apps/rsa.c:1.1 opensa/openssl/apps/rsa.c:1.2
--- opensa/openssl/apps/rsa.c:1.1       Tue Jan 25 23:38:06 2000
+++ opensa/openssl/apps/rsa.c   Thu Mar  2 21:11:49 2000
@@ -82,8 +82,12 @@
  * -text       - print a text version
  * -modulus    - print the RSA key modulus
  * -check      - verify key consistency
+ * -pubin      - Expect a public key in input file.
+ * -pubout     - Output a public key.
  */
 
+int MAIN(int, char **);
+
 int MAIN(int argc, char **argv)
        {
        int ret=1;
@@ -92,7 +96,10 @@
        const EVP_CIPHER *enc=NULL;
        BIO *in=NULL,*out=NULL;
        int informat,outformat,text=0,check=0,noout=0;
+       int pubin = 0, pubout = 0;
        char *infile,*outfile,*prog;
+       char *passargin = NULL, *passargout = NULL;
+       char *passin = NULL, *passout = NULL;
        int modulus=0;
 
        apps_startup();
@@ -131,6 +138,20 @@
                        if (--argc < 1) goto bad;
                        outfile= *(++argv);
                        }
+               else if (strcmp(*argv,"-passin") == 0)
+                       {
+                       if (--argc < 1) goto bad;
+                       passargin= *(++argv);
+                       }
+               else if (strcmp(*argv,"-passout") == 0)
+                       {
+                       if (--argc < 1) goto bad;
+                       passargout= *(++argv);
+                       }
+               else if (strcmp(*argv,"-pubin") == 0)
+                       pubin=1;
+               else if (strcmp(*argv,"-pubout") == 0)
+                       pubout=1;
                else if (strcmp(*argv,"-noout") == 0)
                        noout=1;
                else if (strcmp(*argv,"-text") == 0)
@@ -154,24 +175,39 @@
 bad:
                BIO_printf(bio_err,"%s [options] <infile >outfile\n",prog);
                BIO_printf(bio_err,"where options are\n");
-               BIO_printf(bio_err," -inform arg   input format - one of DER NET 
PEM\n");
-               BIO_printf(bio_err," -outform arg  output format - one of DER NET 
PEM\n");
-               BIO_printf(bio_err," -in arg       input file\n");
-               BIO_printf(bio_err," -out arg      output file\n");
-               BIO_printf(bio_err," -des          encrypt PEM output with cbc des\n");
-               BIO_printf(bio_err," -des3         encrypt PEM output with ede cbc des 
using 168 bit key\n");
+               BIO_printf(bio_err," -inform arg     input format - one of DER NET 
+PEM\n");
+               BIO_printf(bio_err," -outform arg    output format - one of DER NET 
+PEM\n");
+               BIO_printf(bio_err," -in arg         input file\n");
+               BIO_printf(bio_err," -passin arg     input file pass phrase source\n");
+               BIO_printf(bio_err," -in arg         input file\n");
+               BIO_printf(bio_err," -out arg        output file\n");
+               BIO_printf(bio_err," -passout arg    output file pass phrase 
+source\n");
+               BIO_printf(bio_err," -des            encrypt PEM output with cbc 
+des\n");
+               BIO_printf(bio_err," -des3           encrypt PEM output with ede cbc 
+des using 168 bit key\n");
 #ifndef NO_IDEA
-               BIO_printf(bio_err," -idea         encrypt PEM output with cbc 
idea\n");
+               BIO_printf(bio_err," -idea           encrypt PEM output with cbc 
+idea\n");
 #endif
-               BIO_printf(bio_err," -text         print the key in text\n");
-               BIO_printf(bio_err," -noout        don't print key out\n");
-               BIO_printf(bio_err," -modulus      print the RSA key modulus\n");
-               BIO_printf(bio_err," -check        verify key consistency\n");
+               BIO_printf(bio_err," -text           print the key in text\n");
+               BIO_printf(bio_err," -noout          don't print key out\n");
+               BIO_printf(bio_err," -modulus        print the RSA key modulus\n");
+               BIO_printf(bio_err," -check          verify key consistency\n");
+               BIO_printf(bio_err," -pubin          expect a public key in input 
+file\n");
+               BIO_printf(bio_err," -pubout         output a public key\n");
                goto end;
                }
 
        ERR_load_crypto_strings();
 
+       if(!app_passwd(bio_err, passargin, passargout, &passin, &passout)) {
+               BIO_printf(bio_err, "Error getting passwords\n");
+               goto end;
+       }
+
+       if(check && pubin) {
+               BIO_printf(bio_err, "Only private keys can be checked\n");
+               goto end;
+       }
+
        in=BIO_new(BIO_s_file());
        out=BIO_new(BIO_s_file());
        if ((in == NULL) || (out == NULL))
@@ -191,9 +227,11 @@
                        }
                }
 
-       BIO_printf(bio_err,"read RSA private key\n");
-       if      (informat == FORMAT_ASN1)
-               rsa=d2i_RSAPrivateKey_bio(in,NULL);
+       BIO_printf(bio_err,"read RSA key\n");
+       if      (informat == FORMAT_ASN1) {
+               if (pubin) rsa=d2i_RSA_PUBKEY_bio(in,NULL);
+               else rsa=d2i_RSAPrivateKey_bio(in,NULL);
+       }
 #ifndef NO_RC4
        else if (informat == FORMAT_NETSCAPE)
                {
@@ -217,12 +255,14 @@
                                }
                        }
                p=(unsigned char *)buf->data;
-               rsa=(RSA *)d2i_Netscape_RSA(NULL,&p,(long)size,NULL);
+               rsa=d2i_Netscape_RSA(NULL,&p,(long)size,NULL);
                BUF_MEM_free(buf);
                }
 #endif
-       else if (informat == FORMAT_PEM)
-               rsa=PEM_read_bio_RSAPrivateKey(in,NULL,NULL,NULL);
+       else if (informat == FORMAT_PEM) {
+               if(pubin) rsa=PEM_read_bio_RSA_PUBKEY(in,NULL,NULL,NULL);
+               else rsa=PEM_read_bio_RSAPrivateKey(in,NULL, NULL,passin);
+       }
        else
                {
                BIO_printf(bio_err,"bad input format specified for key\n");
@@ -230,7 +270,7 @@
                }
        if (rsa == NULL)
                {
-               BIO_printf(bio_err,"unable to load Private Key\n");
+               BIO_printf(bio_err,"unable to load key\n");
                ERR_print_errors(bio_err);
                goto end;
                }
@@ -256,9 +296,9 @@
 
        if (modulus)
                {
-               fprintf(stdout,"Modulus=");
+               BIO_printf(out,"Modulus=");
                BN_print(out,rsa->n);
-               fprintf(stdout,"\n");
+               BIO_printf(out,"\n");
                }
 
        if (check)
@@ -288,10 +328,16 @@
                        }
                }
                
-       if (noout) goto end;
-       BIO_printf(bio_err,"writing RSA private key\n");
-       if      (outformat == FORMAT_ASN1)
-               i=i2d_RSAPrivateKey_bio(out,rsa);
+       if (noout)
+               {
+               ret = 0;
+               goto end;
+               }
+       BIO_printf(bio_err,"writing RSA key\n");
+       if      (outformat == FORMAT_ASN1) {
+               if(pubout || pubin) i=i2d_RSA_PUBKEY_bio(out,rsa);
+               else i=i2d_RSAPrivateKey_bio(out,rsa);
+       }
 #ifndef NO_RC4
        else if (outformat == FORMAT_NETSCAPE)
                {
@@ -311,23 +357,34 @@
                Free(pp);
                }
 #endif
-       else if (outformat == FORMAT_PEM)
-               i=PEM_write_bio_RSAPrivateKey(out,rsa,enc,NULL,0,NULL,NULL);
-       else    {
+       else if (outformat == FORMAT_PEM) {
+               if(pubout || pubin)
+                   i=PEM_write_bio_RSA_PUBKEY(out,rsa);
+               else i=PEM_write_bio_RSAPrivateKey(out,rsa,
+                                               enc,NULL,0,NULL,passout);
+       } else  {
                BIO_printf(bio_err,"bad output format specified for outfile\n");
                goto end;
                }
        if (!i)
                {
-               BIO_printf(bio_err,"unable to write private key\n");
+               BIO_printf(bio_err,"unable to write key\n");
                ERR_print_errors(bio_err);
                }
        else
                ret=0;
 end:
-       if (in != NULL) BIO_free(in);
-       if (out != NULL) BIO_free(out);
-       if (rsa != NULL) RSA_free(rsa);
+       if(in != NULL) BIO_free(in);
+       if(out != NULL) BIO_free(out);
+       if(rsa != NULL) RSA_free(rsa);
+       if(passin) Free(passin);
+       if(passout) Free(passout);
        EXIT(ret);
        }
+#else /* !NO_RSA */
+
+# if PEDANTIC
+static void *dummy=&dummy;
+# endif
+
 #endif
Index: opensa/openssl/apps/s_client.c
diff -u opensa/openssl/apps/s_client.c:1.1 opensa/openssl/apps/s_client.c:1.2
--- opensa/openssl/apps/s_client.c:1.1  Tue Jan 25 23:38:06 2000
+++ opensa/openssl/apps/s_client.c      Thu Mar  2 21:11:49 2000
@@ -56,9 +56,7 @@
  * [including the GNU Public Licence.]
  */
 
-#ifdef APPS_CRLF
-# include <assert.h>
-#endif
+#include <assert.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -83,15 +81,16 @@
 #include <openssl/pem.h>
 #include "s_apps.h"
 
+#ifdef WINDOWS
+#include <conio.h>
+#endif
+
+
 #if (defined(VMS) && __VMS_VER < 70000000)
 /* FIONBIO used as a switch to enable ioctl, and that isn't in VMS < 7.0 */
 #undef FIONBIO
 #endif
 
-#if defined(NO_RSA) && !defined(NO_SSL2)
-#define NO_SSL2
-#endif
-
 #undef PROG
 #define PROG   s_client_main
 
@@ -142,20 +141,20 @@
 #ifdef FIONBIO
        BIO_printf(bio_err," -nbio         - Run with non-blocking IO\n");
 #endif
-#ifdef APPS_CRLF /* won't be #ifdef'd in next release */
        BIO_printf(bio_err," -crlf         - convert LF from terminal into CRLF\n");
-#endif
        BIO_printf(bio_err," -quiet        - no s_client output\n");
        BIO_printf(bio_err," -ssl2         - just use SSLv2\n");
        BIO_printf(bio_err," -ssl3         - just use SSLv3\n");
        BIO_printf(bio_err," -tls1         - just use TLSv1\n");
        BIO_printf(bio_err," -no_tls1/-no_ssl3/-no_ssl2 - turn off that protocol\n");
        BIO_printf(bio_err," -bugs         - Switch on all SSL implementation bug 
workarounds\n");
-       BIO_printf(bio_err," -cipher       - prefered cipher to use, use the 'openssl 
ciphers'\n");
+       BIO_printf(bio_err," -cipher       - preferred cipher to use, use the 'openssl 
+ciphers'\n");
        BIO_printf(bio_err,"                 command to see what is available\n");
 
        }
 
+int MAIN(int, char **);
+
 int MAIN(int argc, char **argv)
        {
        int off=0;
@@ -171,15 +170,16 @@
        char *cert_file=NULL,*key_file=NULL;
        char *CApath=NULL,*CAfile=NULL,*cipher=NULL;
        int reconnect=0,badop=0,verify=SSL_VERIFY_NONE,bugs=0;
-#ifdef APPS_CRLF
        int crlf=0;
-#endif
        int write_tty,read_tty,write_ssl,read_ssl,tty_on,ssl_pending;
        SSL_CTX *ctx=NULL;
        int ret=1,in_init=1,i,nbio_test=0;
+       int prexit = 0;
        SSL_METHOD *meth=NULL;
        BIO *sbio;
-       /*static struct timeval timeout={10,0};*/
+#ifdef WINDOWS
+       struct timeval tv;
+#endif
 
 #if !defined(NO_SSL2) && !defined(NO_SSL3)
        meth=SSLv23_client_method();
@@ -244,10 +244,10 @@
                        if (--argc < 1) goto bad;
                        cert_file= *(++argv);
                        }
-#ifdef APPS_CRLF
+               else if (strcmp(*argv,"-prexit") == 0)
+                       prexit=1;
                else if (strcmp(*argv,"-crlf") == 0)
                        crlf=1;
-#endif
                else if (strcmp(*argv,"-quiet") == 0)
                        c_quiet=1;
                else if (strcmp(*argv,"-pause") == 0)
@@ -324,6 +324,8 @@
                goto end;
                }
 
+       app_RAND_load_file(NULL, bio_err, 0);
+
        if (bio_c_out == NULL)
                {
                if (c_quiet)
@@ -337,7 +339,8 @@
                        }
                }
 
-       SSLeay_add_ssl_algorithms();
+       OpenSSL_add_ssl_algorithms();
+       SSL_load_error_strings();
        ctx=SSL_CTX_new(meth);
        if (ctx == NULL)
                {
@@ -352,7 +355,11 @@
 
        if (state) SSL_CTX_set_info_callback(ctx,apps_ssl_info_callback);
        if (cipher != NULL)
-               SSL_CTX_set_cipher_list(ctx,cipher);
+               if(!SSL_CTX_set_cipher_list(ctx,cipher)) {
+               BIO_printf(bio_err,"error setting cipher list\n");
+               ERR_print_errors(bio_err);
+               goto end;
+       }
 #if 0
        else
                SSL_CTX_set_cipher_list(ctx,getenv("SSL_CIPHER"));
@@ -365,14 +372,13 @@
        if ((!SSL_CTX_load_verify_locations(ctx,CAfile,CApath)) ||
                (!SSL_CTX_set_default_verify_paths(ctx)))
                {
-               /* BIO_printf(bio_err,"error seting default verify locations\n"); */
+               /* BIO_printf(bio_err,"error setting default verify locations\n"); */
                ERR_print_errors(bio_err);
                /* goto end; */
                }
 
-       SSL_load_error_strings();
 
-       con=(SSL *)SSL_new(ctx);
+       con=SSL_new(ctx);
 /*     SSL_set_cipher_list(con,"RC4-MD5"); */
 
 re_start:
@@ -473,12 +479,18 @@
                                if (read_tty)  FD_SET(fileno(stdin),&readfds);
                                if (write_tty) FD_SET(fileno(stdout),&writefds);
                                }
-#endif
                        if (read_ssl)
                                FD_SET(SSL_get_fd(con),&readfds);
                        if (write_ssl)
                                FD_SET(SSL_get_fd(con),&writefds);
-
+#else
+                       if(!tty_on || !write_tty) {
+                               if (read_ssl)
+                                       FD_SET(SSL_get_fd(con),&readfds);
+                               if (write_ssl)
+                                       FD_SET(SSL_get_fd(con),&writefds);
+                       }
+#endif
 /*                     printf("mode tty(%d %d%d) ssl(%d%d)\n",
                                tty_on,read_tty,write_tty,read_ssl,write_ssl);*/
 
@@ -488,8 +500,29 @@
                         * will choke the compiler: if you do have a cast then
                         * you can either go for (int *) or (void *).
                         */
+#ifdef WINDOWS
+                       /* Under Windows we make the assumption that we can
+                        * always write to the tty: therefore if we need to
+                        * write to the tty we just fall through. Otherwise
+                        * we timeout the select every second and see if there
+                        * are any keypresses. Note: this is a hack, in a proper
+                        * Windows application we wouldn't do this.
+                        */
+                       i=0;
+                       if(!write_tty) {
+                               if(read_tty) {
+                                       tv.tv_sec = 1;
+                                       tv.tv_usec = 0;
+                                       i=select(width,(void *)&readfds,(void 
+*)&writefds,
+                                                NULL,&tv);
+                                       if(!i && (!_kbhit() || !read_tty) ) continue;
+                               } else  i=select(width,(void *)&readfds,(void 
+*)&writefds,
+                                        NULL,NULL);
+                       }
+#else
                        i=select(width,(void *)&readfds,(void *)&writefds,
                                 NULL,NULL);
+#endif
                        if ( i < 0)
                                {
                                BIO_printf(bio_err,"bad select %d\n",
@@ -566,8 +599,12 @@
                                goto shut;
                                }
                        }
-#ifndef WINDOWS
+#ifdef WINDOWS
+               /* Assume Windows can always write */
+               else if (!ssl_pending && write_tty)
+#else
                else if (!ssl_pending && FD_ISSET(fileno(stdout),&writefds))
+#endif
                        {
 #ifdef CHARSET_EBCDIC
                        ascii2ebcdic(&(sbuf[sbuf_off]),&(sbuf[sbuf_off]),sbuf_len);
@@ -589,7 +626,6 @@
                                write_tty=0;
                                }
                        }
-#endif
                else if (ssl_pending || FD_ISSET(SSL_get_fd(con),&readfds))
                        {
 #ifdef RENEG
@@ -644,10 +680,12 @@
                                }
                        }
 
-#ifndef WINDOWS
+#ifdef WINDOWS
+               else if (_kbhit())
+#else
                else if (FD_ISSET(fileno(stdin),&readfds))
+#endif
                        {
-#ifdef APPS_CRLF
                        if (crlf)
                                {
                                int j, lf_num;
@@ -671,7 +709,6 @@
                                assert(lf_num == 0);
                                }
                        else
-#endif
                                i=read(fileno(stdin),cbuf,BUFSIZZ);
 
                        if ((!c_quiet) && ((i <= 0) || (cbuf[0] == 'Q')))
@@ -698,13 +735,13 @@
                        write_ssl=1;
                        read_tty=0;
                        }
-#endif
                }
 shut:
        SSL_shutdown(con);
        SHUTDOWN(SSL_get_fd(con));
        ret=0;
 end:
+       if(prexit) print_stuff(bio_c_out,con,1);
        if (con != NULL) SSL_free(con);
        if (con2 != NULL) SSL_free(con2);
        if (ctx != NULL) SSL_CTX_free(ctx);
Index: opensa/openssl/apps/s_server.c
diff -u opensa/openssl/apps/s_server.c:1.1 opensa/openssl/apps/s_server.c:1.2
--- opensa/openssl/apps/s_server.c:1.1  Tue Jan 25 23:38:06 2000
+++ opensa/openssl/apps/s_server.c      Thu Mar  2 21:11:49 2000
@@ -56,9 +56,7 @@
  * [including the GNU Public Licence.]
  */
 
-#ifdef APPS_CRLF
-# include <assert.h>
-#endif
+#include <assert.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -87,15 +85,15 @@
 #include <openssl/ssl.h>
 #include "s_apps.h"
 
+#ifdef WINDOWS
+#include <conio.h>
+#endif
+
 #if (defined(VMS) && __VMS_VER < 70000000)
 /* FIONBIO used as a switch to enable ioctl, and that isn't in VMS < 7.0 */
 #undef FIONBIO
 #endif
 
-#if defined(NO_RSA) && !defined(NO_SSL2)
-#define NO_SSL2
-#endif
-
 #ifndef NO_RSA
 static RSA MS_CALLBACK *tmp_rsa_cb(SSL *s, int is_export, int keylength);
 #endif
@@ -106,10 +104,12 @@
 static int init_ssl_connection(SSL *s);
 static void print_stats(BIO *bp,SSL_CTX *ctx);
 #ifndef NO_DH
-static DH *load_dh_param(void );
+static DH *load_dh_param(char *dhfile);
 static DH *get_dh512(void);
 #endif
-/* static void s_server_init(void);*/
+#ifdef MONOLITH
+static void s_server_init(void);
+#endif
 
 #ifndef S_ISDIR
 # if defined(_S_IFMT) && defined(_S_IFDIR)
@@ -149,15 +149,13 @@
 
 #undef BUFSIZZ
 #define BUFSIZZ        16*1024
-static int bufsize=32;
+static int bufsize=BUFSIZZ;
 static int accept_socket= -1;
 
 #define TEST_CERT      "server.pem"
 #undef PROG
 #define PROG           s_server_main
 
-#define DH_PARAM       "server.pem"
-
 extern int verify_depth;
 
 static char *cipher=NULL;
@@ -169,9 +167,7 @@
 static int s_nbio=0;
 #endif
 static int s_nbio_test=0;
-#ifdef APPS_CRLF /* won't be #ifdef'd in next release */
 int s_crlf=0;
-#endif
 static SSL_CTX *ctx=NULL;
 static int www=0;
 
@@ -179,9 +175,12 @@
 static int s_debug=0;
 static int s_quiet=0;
 
-#if 0
+static int hack=0;
+
+#ifdef MONOLITH
 static void s_server_init(void)
        {
+       accept_socket=-1;
        cipher=NULL;
        s_server_verify=SSL_VERIFY_NONE;
        s_dcert_file=NULL;
@@ -198,6 +197,7 @@
        bio_s_out=NULL;
        s_debug=0;
        s_quiet=0;
+       hack=0;
        }
 #endif
 
@@ -211,17 +211,17 @@
        BIO_printf(bio_err," -Verify arg   - turn on peer certificate verification, 
must have a cert.\n");
        BIO_printf(bio_err," -cert arg     - certificate file to use, PEM format 
assumed\n");
        BIO_printf(bio_err,"                 (default is %s)\n",TEST_CERT);
-       BIO_printf(bio_err," -key arg      - RSA file to use, PEM format assumed, in 
cert file if\n");
+       BIO_printf(bio_err," -key arg      - Private Key file to use, PEM format 
+assumed, in cert file if\n");
        BIO_printf(bio_err,"                 not specified (default is 
%s)\n",TEST_CERT);
        BIO_printf(bio_err," -dcert arg    - second certificate file to use (usually 
for DSA)\n");
        BIO_printf(bio_err," -dkey arg     - second private key file to use (usually 
for DSA)\n");
+       BIO_printf(bio_err," -dhparam arg  - DH parameter file to use, in cert file if 
+not specified\n");
+       BIO_printf(bio_err,"                 or a default set of parameters is 
+used\n");
 #ifdef FIONBIO
        BIO_printf(bio_err," -nbio         - Run with non-blocking IO\n");
 #endif
        BIO_printf(bio_err," -nbio_test    - test with the non-blocking test bio\n");
-#ifdef APPS_CRLF
        BIO_printf(bio_err," -crlf         - convert LF from terminal into CRLF\n");
-#endif
        BIO_printf(bio_err," -debug        - Print more output\n");
        BIO_printf(bio_err," -state        - Print the SSL states\n");
        BIO_printf(bio_err," -CApath arg   - PEM format directory of CA's\n");
@@ -239,14 +239,13 @@
 #ifndef NO_DH
        BIO_printf(bio_err," -no_dhe       - Disable ephemeral DH\n");
 #endif
-       BIO_printf(bio_err," -bugs         - Turn on SSL bug compatability\n");
+       BIO_printf(bio_err," -bugs         - Turn on SSL bug compatibility\n");
        BIO_printf(bio_err," -www          - Respond to a 'GET /' with a status 
page\n");
        BIO_printf(bio_err," -WWW          - Respond to a 'GET /<path> HTTP/1.0' with 
file ./<path>\n");
        }
 
 static int local_argc=0;
 static char **local_argv;
-static int hack=0;
 
 #ifdef CHARSET_EBCDIC
 static int ebcdic_new(BIO *bi);
@@ -337,7 +336,7 @@
                num = num + num;  /* double the size */
                if (num < inl)
                        num = inl;
-               Free((char*)wbuf);
+               Free(wbuf);
                wbuf=(EBCDIC_OUTBUFF *)Malloc(sizeof(EBCDIC_OUTBUFF) + num);
 
                wbuf->alloced = num;
@@ -398,11 +397,14 @@
 }
 #endif
 
+int MAIN(int, char **);
+
 int MAIN(int argc, char *argv[])
        {
        short port=PORT;
        char *CApath=NULL,*CAfile=NULL;
        char *context = NULL;
+       char *dhfile = NULL;
        int badop=0,bugs=0;
        int ret=1;
        int off=0;
@@ -425,8 +427,9 @@
        local_argv=argv;
 
        apps_startup();
-       s_quiet=0;
-       s_debug=0;
+#ifdef MONOLITH
+       s_server_init();
+#endif
 
        if (bio_err == NULL)
                bio_err=BIO_new_fp(stderr,BIO_NOCLOSE);
@@ -479,6 +482,11 @@
                        if (--argc < 1) goto bad;
                        s_key_file= *(++argv);
                        }
+               else if (strcmp(*argv,"-dhparam") == 0)
+                       {
+                       if (--argc < 1) goto bad;
+                       dhfile = *(++argv);
+                       }
                else if (strcmp(*argv,"-dcert") == 0)
                        {
                        if (--argc < 1) goto bad;
@@ -525,10 +533,8 @@
                        { hack=1; }
                else if (strcmp(*argv,"-state") == 0)
                        { state=1; }
-#ifdef APPS_CRLF
                else if (strcmp(*argv,"-crlf") == 0)
                        { s_crlf=1; }
-#endif
                else if (strcmp(*argv,"-quiet") == 0)
                        { s_quiet=1; }
                else if (strcmp(*argv,"-bugs") == 0)
@@ -575,6 +581,8 @@
                goto end;
                }
 
+       app_RAND_load_file(NULL, bio_err, 0);
+
        if (bio_s_out == NULL)
                {
                if (s_quiet && !s_debug)
@@ -599,7 +607,7 @@
                }
 
        SSL_load_error_strings();
-       SSLeay_add_ssl_algorithms();
+       OpenSSL_add_ssl_algorithms();
 
        ctx=SSL_CTX_new(meth);
        if (ctx == NULL)
@@ -641,8 +649,7 @@
 #ifndef NO_DH
        if (!no_dhe)
                {
-               /* EAY EAY EAY evil hack */
-               dh=load_dh_param();
+               dh=load_dh_param(dhfile ? dhfile : s_cert_file);
                if (dh != NULL)
                        {
                        BIO_printf(bio_s_out,"Setting temp DH parameters\n");
@@ -692,12 +699,17 @@
 #endif
 
        if (cipher != NULL)
-               SSL_CTX_set_cipher_list(ctx,cipher);
+               if(!SSL_CTX_set_cipher_list(ctx,cipher)) {
+               BIO_printf(bio_err,"error setting cipher list\n");
+               ERR_print_errors(bio_err);
+               goto end;
+       }
        SSL_CTX_set_verify(ctx,s_server_verify,verify_callback);
        SSL_CTX_set_session_id_context(ctx,(void*)&s_server_session_id_context,
                sizeof s_server_session_id_context);
 
-       SSL_CTX_set_client_CA_list(ctx,SSL_load_client_CA_file(CAfile));
+       if (CAfile != NULL)
+           SSL_CTX_set_client_CA_list(ctx,SSL_load_client_CA_file(CAfile));
 
        BIO_printf(bio_s_out,"ACCEPT\n");
        if (www)
@@ -750,6 +762,9 @@
        unsigned long l;
        SSL *con=NULL;
        BIO *sbio;
+#ifdef WINDOWS
+       struct timeval tv;
+#endif
 
        if ((buf=Malloc(bufsize)) == NULL)
                {
@@ -769,7 +784,7 @@
 #endif
 
        if (con == NULL) {
-               con=(SSL *)SSL_new(ctx);
+               con=SSL_new(ctx);
                if(context)
                      SSL_set_session_id_context(con, context,
                                                 strlen((char *)context));
@@ -798,22 +813,48 @@
        width=s+1;
        for (;;)
                {
-               FD_ZERO(&readfds);
+               int read_from_terminal;
+               int read_from_sslcon;
+
+               read_from_terminal = 0;
+               read_from_sslcon = SSL_pending(con);
+
+               if (!read_from_sslcon)
+                       {
+                       FD_ZERO(&readfds);
 #ifndef WINDOWS
-               FD_SET(fileno(stdin),&readfds);
+                       FD_SET(fileno(stdin),&readfds);
 #endif
-               FD_SET(s,&readfds);
-               /* Note: under VMS with SOCKETSHR the second parameter is
-                * currently of type (int *) whereas under other systems
-                * it is (void *) if you don't have a cast it will choke
-                * the compiler: if you do have a cast then you can either
-                * go for (int *) or (void *).
-                */
-               i=select(width,(void *)&readfds,NULL,NULL,NULL);
-               if (i <= 0) continue;
-               if (FD_ISSET(fileno(stdin),&readfds))
+                       FD_SET(s,&readfds);
+                       /* Note: under VMS with SOCKETSHR the second parameter is
+                        * currently of type (int *) whereas under other systems
+                        * it is (void *) if you don't have a cast it will choke
+                        * the compiler: if you do have a cast then you can either
+                        * go for (int *) or (void *).
+                        */
+#ifdef WINDOWS
+                       /* Under Windows we can't select on stdin: only
+                        * on sockets. As a workaround we timeout the select every
+                        * second and check for any keypress. In a proper Windows
+                        * application we wouldn't do this because it is inefficient.
+                        */
+                       tv.tv_sec = 1;
+                       tv.tv_usec = 0;
+                       i=select(width,(void *)&readfds,NULL,NULL,&tv);
+                       if((i < 0) || (!i && !_kbhit() ) )continue;
+                       if(_kbhit())
+                               read_from_terminal = 1;
+#else
+                       i=select(width,(void *)&readfds,NULL,NULL,NULL);
+                       if (i <= 0) continue;
+                       if (FD_ISSET(fileno(stdin),&readfds))
+                               read_from_terminal = 1;
+#endif
+                       if (FD_ISSET(s,&readfds))
+                               read_from_sslcon = 1;
+                       }
+               if (read_from_terminal)
                        {
-#ifdef APPS_CRLF
                        if (s_crlf)
                                {
                                int j, lf_num;
@@ -837,7 +878,6 @@
                                assert(lf_num == 0);
                                }
                        else
-#endif
                                i=read(fileno(stdin),buf,bufsize);
                        if (!s_quiet)
                                {
@@ -926,7 +966,7 @@
                                if (i <= 0) break;
                                }
                        }
-               if (FD_ISSET(s,&readfds))
+               if (read_from_sslcon)
                        {
                        if (!SSL_is_init_finished(con))
                                {
@@ -1059,12 +1099,12 @@
        }
 
 #ifndef NO_DH
-static DH *load_dh_param(void)
+static DH *load_dh_param(char *dhfile)
        {
        DH *ret=NULL;
        BIO *bio;
 
-       if ((bio=BIO_new_file(DH_PARAM,"r")) == NULL)
+       if ((bio=BIO_new_file(dhfile,"r")) == NULL)
                goto err;
        ret=PEM_read_bio_DHparams(bio,NULL,NULL,NULL);
 err:
@@ -1126,7 +1166,7 @@
        /* lets make the output buffer a reasonable size */
        if (!BIO_set_write_buffer_size(io,bufsize)) goto err;
 
-       if ((con=(SSL *)SSL_new(ctx)) == NULL) goto err;
+       if ((con=SSL_new(ctx)) == NULL) goto err;
        if(context) SSL_set_session_id_context(con, context,
                                               strlen((char *)context));
 
@@ -1424,7 +1464,7 @@
        /* make sure we re-use sessions */
        SSL_set_shutdown(con,SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN);
 #else
-       /* This kills performace */
+       /* This kills performance */
 /*     SSL_shutdown(con); A shutdown gets sent in the
  *     BIO_free_all(io) procession */
 #endif
Index: opensa/openssl/apps/s_time.c
diff -u opensa/openssl/apps/s_time.c:1.1 opensa/openssl/apps/s_time.c:1.2
--- opensa/openssl/apps/s_time.c:1.1    Tue Jan 25 23:38:06 2000
+++ opensa/openssl/apps/s_time.c        Thu Mar  2 21:11:49 2000
@@ -67,10 +67,6 @@
 #include <stdlib.h>
 #include <string.h>
 
-#if defined(NO_RSA) && !defined(NO_SSL2)
-#define NO_SSL2
-#endif
-
 #ifdef NO_STDIO
 #define APPS_WIN16
 #endif
@@ -220,7 +216,7 @@
                 file if not specified by this option\n\
 -CApath arg   - PEM format directory of CA's\n\
 -CAfile arg   - PEM format file of CA's\n\
--cipher       - prefered cipher to use, play with 'openssl ciphers'\n\n";
+-cipher       - preferred cipher to use, play with 'openssl ciphers'\n\n";
 
        printf( "usage: s_time <args>\n\n" );
 
@@ -229,7 +225,7 @@
        printf("-nbio         - Run with non-blocking IO\n");
        printf("-ssl2         - Just use SSLv2\n");
        printf("-ssl3         - Just use SSLv3\n");
-       printf("-bugs         - Turn on SSL bug compatability\n");
+       printf("-bugs         - Turn on SSL bug compatibility\n");
        printf("-new          - Just time new connections\n");
        printf("-reuse        - Just time connection reuse\n");
        printf("-www page     - Retrieve 'page' from the site\n");
@@ -248,16 +244,7 @@
 
     verify_depth=0;
     verify_error=X509_V_OK;
-#ifdef FIONBIO
-    t_nbio=0;
-#endif
 
-       apps_startup();
-       s_time_init();
-
-       if (bio_err == NULL)
-               bio_err=BIO_new_fp(stderr,BIO_NOCLOSE);
-
     argc--;
     argv++;
 
@@ -401,6 +388,8 @@
  * MAIN - main processing area for client
  *                     real name depends on MONOLITH
  */
+int MAIN(int, char **);
+
 int MAIN(int argc, char **argv)
        {
        double totalTime = 0.0;
@@ -411,6 +400,12 @@
        MS_STATIC char buf[1024*8];
        int ver;
 
+       apps_startup();
+       s_time_init();
+
+       if (bio_err == NULL)
+               bio_err=BIO_new_fp(stderr,BIO_NOCLOSE);
+
 #if !defined(NO_SSL2) && !defined(NO_SSL3)
        s_time_meth=SSLv23_client_method();
 #elif !defined(NO_SSL3)
@@ -423,7 +418,7 @@
        if( parseArgs( argc, argv ) < 0 )
                goto end;
 
-       SSLeay_add_ssl_algorithms();
+       OpenSSL_add_ssl_algorithms();
        if ((tm_ctx=SSL_CTX_new(s_time_meth)) == NULL) return(1);
 
        SSL_CTX_set_quiet_shutdown(tm_ctx,1);
@@ -438,7 +433,7 @@
        if ((!SSL_CTX_load_verify_locations(tm_ctx,CAfile,CApath)) ||
                (!SSL_CTX_set_default_verify_paths(tm_ctx)))
                {
-               /* BIO_printf(bio_err,"error seting default verify locations\n"); */
+               /* BIO_printf(bio_err,"error setting default verify locations\n"); */
                ERR_print_errors(bio_err);
                /* goto end; */
                }
@@ -639,7 +634,7 @@
        BIO_set_conn_hostname(conn,host);
 
        if (scon == NULL)
-               serverCon=(SSL *)SSL_new(tm_ctx);
+               serverCon=SSL_new(tm_ctx);
        else
                {
                serverCon=scon;
Index: opensa/openssl/apps/sess_id.c
diff -u opensa/openssl/apps/sess_id.c:1.1 opensa/openssl/apps/sess_id.c:1.2
--- opensa/openssl/apps/sess_id.c:1.1   Tue Jan 25 23:38:06 2000
+++ opensa/openssl/apps/sess_id.c       Thu Mar  2 21:11:49 2000
@@ -72,7 +72,7 @@
 static char *sess_id_usage[]={
 "usage: sess_id args\n",
 "\n",
-" -inform arg     - input format - default PEM (one of DER, TXT or PEM)\n",
+" -inform arg     - input format - default PEM (DER or PEM)\n",
 " -outform arg    - output format - default PEM\n",
 " -in arg         - input file - default stdin\n",
 " -out arg        - output file - default stdout\n",
@@ -84,6 +84,9 @@
 };
 
 static SSL_SESSION *load_sess_id(char *file, int format);
+
+int MAIN(int, char **);
+
 int MAIN(int argc, char **argv)
        {
        SSL_SESSION *x=NULL;
Index: opensa/openssl/apps/speed.c
diff -u opensa/openssl/apps/speed.c:1.1 opensa/openssl/apps/speed.c:1.2
--- opensa/openssl/apps/speed.c:1.1     Tue Jan 25 23:38:06 2000
+++ opensa/openssl/apps/speed.c Thu Mar  2 21:11:49 2000
@@ -238,16 +238,19 @@
 #endif
        }
 
+int MAIN(int, char **);
+
 int MAIN(int argc, char **argv)
        {
        unsigned char *buf=NULL,*buf2=NULL;
-       int ret=1;
+       int mret=1;
 #define ALGOR_NUM      14
 #define SIZE_NUM       5
 #define RSA_NUM                4
 #define DSA_NUM                3
        long count,rsa_count;
-       int i,j,k,rsa_num,rsa_num2;
+       int i,j,k;
+       unsigned rsa_num,rsa_num2;
 #ifndef NO_MD2
        unsigned char md2[MD2_DIGEST_LENGTH];
 #endif
@@ -344,6 +347,7 @@
        int pr_header=0;
 
        apps_startup();
+       memset(results, 0, sizeof(results));
 #ifndef NO_DSA
        memset(dsa_key,0,sizeof(dsa_key));
 #endif
@@ -421,7 +425,7 @@
                        if (strcmp(*argv,"rc4") == 0) doit[D_RC4]=1;
                else 
 #endif
-#ifndef NO_DEF
+#ifndef NO_DES
                        if (strcmp(*argv,"des-cbc") == 0) doit[D_CBC_DES]=1;
                else    if (strcmp(*argv,"des-ede3") == 0) doit[D_EDE3_DES]=1;
                else
@@ -435,12 +439,14 @@
                        }
                else
 #endif
+#ifndef RSA_NULL
                        if (strcmp(*argv,"openssl") == 0) 
                        {
                        RSA_set_default_method(RSA_PKCS1_SSLeay());
                        j--;
                        }
                else
+#endif
 #endif /* !NO_RSA */
                     if (strcmp(*argv,"dsa512") == 0) dsa_doit[R_DSA_512]=2;
                else if (strcmp(*argv,"dsa1024") == 0) dsa_doit[R_DSA_1024]=2;
@@ -586,9 +592,9 @@
 #endif
 
 #ifndef NO_DES
-       des_set_key(&key,sch);
-       des_set_key(&key2,sch2);
-       des_set_key(&key3,sch3);
+       des_set_key_unchecked(&key,sch);
+       des_set_key_unchecked(&key2,sch2);
+       des_set_key_unchecked(&key3,sch3);
 #endif
 #ifndef NO_IDEA
        idea_set_encrypt_key(key16,&idea_ks);
@@ -612,6 +618,7 @@
        memset(rsa_c,0,sizeof(rsa_c));
 #endif
 #ifndef SIGALRM
+#ifndef NO_DES
        BIO_printf(bio_err,"First we calculate the approximate speed ...\n");
        count=10;
        do      {
@@ -703,10 +710,14 @@
 #define COND(d)        (count < (d))
 #define COUNT(d) (d)
 #else
+/* not worth fixing */
+# error "You cannot disable DES on systems without SIGALRM."
+#endif /* NO_DES */
+#else
 #define COND(c)        (run)
 #define COUNT(d) (count)
        signal(SIGALRM,sig_done);
-#endif
+#endif /* SIGALRM */
 
 #ifndef NO_MD2
        if (doit[D_MD2])
@@ -956,22 +967,22 @@
                }
 #endif
 
-       RAND_bytes(buf,30);
+       RAND_pseudo_bytes(buf,36);
 #ifndef NO_RSA
        for (j=0; j<RSA_NUM; j++)
                {
+               int ret;
                if (!rsa_doit[j]) continue;
-               rsa_num=RSA_private_encrypt(30,buf,buf2,rsa_key[j],
-                       RSA_PKCS1_PADDING);
+               ret=RSA_sign(NID_md5_sha1, buf,36, buf2, &rsa_num, rsa_key[j]);
                pkey_print_message("private","rsa",rsa_c[j][0],rsa_bits[j],
                        RSA_SECONDS);
 /*             RSA_blinding_on(rsa_key[j],NULL); */
                Time_F(START);
                for (count=0,run=1; COND(rsa_c[j][0]); count++)
                        {
-                       rsa_num=RSA_private_encrypt(30,buf,buf2,rsa_key[j],
-                               RSA_PKCS1_PADDING);
-                       if (rsa_num <= 0)
+                       ret=RSA_sign(NID_md5_sha1, buf,36, buf2, &rsa_num,
+                                                                rsa_key[j]);
+                       if (ret <= 0)
                                {
                                BIO_printf(bio_err,"RSA private encrypt failure\n");
                                ERR_print_errors(bio_err);
@@ -986,18 +997,17 @@
                rsa_count=count;
 
 #if 1
-               rsa_num2=RSA_public_decrypt(rsa_num,buf2,buf,rsa_key[j],
-                       RSA_PKCS1_PADDING);
+               ret=RSA_verify(NID_md5_sha1, buf,36, buf2, rsa_num, rsa_key[j]);
                pkey_print_message("public","rsa",rsa_c[j][1],rsa_bits[j],
                        RSA_SECONDS);
                Time_F(START);
                for (count=0,run=1; COND(rsa_c[j][1]); count++)
                        {
-                       rsa_num2=RSA_public_decrypt(rsa_num,buf2,buf,rsa_key[j],
-                               RSA_PKCS1_PADDING);
-                       if (rsa_num2 <= 0)
+                       ret=RSA_verify(NID_md5_sha1, buf,36, buf2, rsa_num,
+                                                               rsa_key[j]);
+                       if (ret <= 0)
                                {
-                               BIO_printf(bio_err,"RSA public encrypt failure\n");
+                               BIO_printf(bio_err,"RSA verify failure\n");
                                ERR_print_errors(bio_err);
                                count=1;
                                break;
@@ -1018,7 +1028,7 @@
                }
 #endif
 
-       RAND_bytes(buf,20);
+       RAND_pseudo_bytes(buf,20);
 #ifndef NO_DSA
        for (j=0; j<DSA_NUM; j++)
                {
@@ -1036,7 +1046,7 @@
                        {
                        rsa_num=DSA_sign(EVP_PKEY_DSA,buf,20,buf2,
                                &kk,dsa_key[j]);
-                       if (rsa_num <= 0)
+                       if (rsa_num == 0)
                                {
                                BIO_printf(bio_err,"DSA sign failure\n");
                                ERR_print_errors(bio_err);
@@ -1059,7 +1069,7 @@
                        {
                        rsa_num2=DSA_verify(EVP_PKEY_DSA,buf,20,buf2,
                                kk,dsa_key[j]);
-                       if (rsa_num2 <= 0)
+                       if (rsa_num2 == 0)
                                {
                                BIO_printf(bio_err,"DSA verify failure\n");
                                ERR_print_errors(bio_err);
@@ -1155,7 +1165,7 @@
                fprintf(stdout,"\n");
                }
 #endif
-       ret=0;
+       mret=0;
 end:
        if (buf != NULL) Free(buf);
        if (buf2 != NULL) Free(buf2);
@@ -1169,7 +1179,7 @@
                if (dsa_key[i] != NULL)
                        DSA_free(dsa_key[i]);
 #endif
-       EXIT(ret);
+       EXIT(mret);
        }
 
 static void print_message(char *s, long num, int length)
Index: opensa/openssl/apps/verify.c
diff -u opensa/openssl/apps/verify.c:1.1 opensa/openssl/apps/verify.c:1.2
--- opensa/openssl/apps/verify.c:1.1    Tue Jan 25 23:38:06 2000
+++ opensa/openssl/apps/verify.c        Thu Mar  2 21:11:49 2000
@@ -63,19 +63,26 @@
 #include <openssl/bio.h>
 #include <openssl/err.h>
 #include <openssl/x509.h>
+#include <openssl/x509v3.h>
 #include <openssl/pem.h>
 
 #undef PROG
 #define PROG   verify_main
 
 static int MS_CALLBACK cb(int ok, X509_STORE_CTX *ctx);
-static int check(X509_STORE *ctx,char *file);
+static int check(X509_STORE *ctx,char *file, STACK_OF(X509)*other, int purpose);
+static STACK_OF(X509) *load_untrusted(char *file);
 static int v_verbose=0;
 
+int MAIN(int, char **);
+
 int MAIN(int argc, char **argv)
        {
        int i,ret=1;
+       int purpose = -1;
        char *CApath=NULL,*CAfile=NULL;
+       char *untfile = NULL;
+       STACK_OF(X509) *untrusted = NULL;
        X509_STORE *cert_ctx=NULL;
        X509_LOOKUP *lookup=NULL;
 
@@ -107,6 +114,24 @@
                                if (argc-- < 1) goto end;
                                CAfile= *(++argv);
                                }
+                       else if (strcmp(*argv,"-purpose") == 0)
+                               {
+                               X509_PURPOSE *xptmp;
+                               if (argc-- < 1) goto end;
+                               i = X509_PURPOSE_get_by_sname(*(++argv));
+                               if(i < 0)
+                                       {
+                                       BIO_printf(bio_err, "unrecognized purpose\n");
+                                       goto end;
+                                       }
+                               xptmp = X509_PURPOSE_get0(i);
+                               purpose = X509_PURPOSE_get_id(xptmp);
+                               }
+                       else if (strcmp(*argv,"-untrusted") == 0)
+                               {
+                               if (argc-- < 1) goto end;
+                               untfile= *(++argv);
+                               }
                        else if (strcmp(*argv,"-help") == 0)
                                goto end;
                        else if (strcmp(*argv,"-verbose") == 0)
@@ -124,34 +149,63 @@
 
        lookup=X509_STORE_add_lookup(cert_ctx,X509_LOOKUP_file());
        if (lookup == NULL) abort();
-       if (!X509_LOOKUP_load_file(lookup,CAfile,X509_FILETYPE_PEM))
-               X509_LOOKUP_load_file(lookup,NULL,X509_FILETYPE_DEFAULT);
+       if (CAfile) {
+               i=X509_LOOKUP_load_file(lookup,CAfile,X509_FILETYPE_PEM);
+               if(!i) {
+                       BIO_printf(bio_err, "Error loading file %s\n", CAfile);
+                       ERR_print_errors(bio_err);
+                       goto end;
+               }
+       } else X509_LOOKUP_load_file(lookup,NULL,X509_FILETYPE_DEFAULT);
                
        lookup=X509_STORE_add_lookup(cert_ctx,X509_LOOKUP_hash_dir());
        if (lookup == NULL) abort();
-       if (!X509_LOOKUP_add_dir(lookup,CApath,X509_FILETYPE_PEM))
-               X509_LOOKUP_add_dir(lookup,NULL,X509_FILETYPE_DEFAULT);
-
+       if (CApath) {
+               i=X509_LOOKUP_add_dir(lookup,CApath,X509_FILETYPE_PEM);
+               if(!i) {
+                       BIO_printf(bio_err, "Error loading directory %s\n", CApath);
+                       ERR_print_errors(bio_err);
+                       goto end;
+               }
+       } else X509_LOOKUP_add_dir(lookup,NULL,X509_FILETYPE_DEFAULT);
 
        ERR_clear_error();
-       if (argc < 1) check(cert_ctx,NULL);
+
+       if(untfile) {
+               if(!(untrusted = load_untrusted(untfile))) {
+                       BIO_printf(bio_err, "Error loading untrusted file %s\n", 
+untfile);
+                       ERR_print_errors(bio_err);
+                       goto end;
+               }
+       }
+
+       if (argc < 1) check(cert_ctx, NULL, untrusted, purpose);
        else
                for (i=0; i<argc; i++)
-                       check(cert_ctx,argv[i]);
+                       check(cert_ctx,argv[i], untrusted, purpose);
        ret=0;
 end:
-       if (ret == 1)
+       if (ret == 1) {
                BIO_printf(bio_err,"usage: verify [-verbose] [-CApath path] [-CAfile 
file] cert1 cert2 ...\n");
+               BIO_printf(bio_err,"recognized usages:\n");
+               for(i = 0; i < X509_PURPOSE_get_count(); i++) {
+                       X509_PURPOSE *ptmp;
+                       ptmp = X509_PURPOSE_get0(i);
+                       BIO_printf(bio_err, "\t%-10s\t%s\n", 
+X509_PURPOSE_get0_sname(ptmp),
+                                                               
+X509_PURPOSE_get0_name(ptmp));
+               }
+       }
        if (cert_ctx != NULL) X509_STORE_free(cert_ctx);
+       sk_X509_pop_free(untrusted, X509_free);
        EXIT(ret);
        }
 
-static int check(X509_STORE *ctx, char *file)
+static int check(X509_STORE *ctx, char *file, STACK_OF(X509) *uchain, int purpose)
        {
        X509 *x=NULL;
        BIO *in=NULL;
        int i=0,ret=0;
-       X509_STORE_CTX csc;
+       X509_STORE_CTX *csc;
 
        in=BIO_new(BIO_s_file());
        if (in == NULL)
@@ -181,9 +235,16 @@
                }
        fprintf(stdout,"%s: ",(file == NULL)?"stdin":file);
 
-       X509_STORE_CTX_init(&csc,ctx,x,NULL);
-       i=X509_verify_cert(&csc);
-       X509_STORE_CTX_cleanup(&csc);
+       csc = X509_STORE_CTX_new();
+       if (csc == NULL)
+               {
+               ERR_print_errors(bio_err);
+               goto end;
+               }
+       X509_STORE_CTX_init(csc,ctx,x,uchain);
+       if(purpose >= 0) X509_STORE_CTX_set_purpose(csc, purpose);
+       i=X509_verify_cert(csc);
+       X509_STORE_CTX_free(csc);
 
        ret=0;
 end:
@@ -200,27 +261,75 @@
        return(ret);
        }
 
+static STACK_OF(X509) *load_untrusted(char *certfile)
+{
+       STACK_OF(X509_INFO) *sk=NULL;
+       STACK_OF(X509) *stack=NULL, *ret=NULL;
+       BIO *in=NULL;
+       X509_INFO *xi;
+
+       if(!(stack = sk_X509_new_null())) {
+               BIO_printf(bio_err,"memory allocation failure\n");
+               goto end;
+       }
+
+       if(!(in=BIO_new_file(certfile, "r"))) {
+               BIO_printf(bio_err,"error opening the file, %s\n",certfile);
+               goto end;
+       }
+
+       /* This loads from a file, a stack of x509/crl/pkey sets */
+       if(!(sk=PEM_X509_INFO_read_bio(in,NULL,NULL,NULL))) {
+               BIO_printf(bio_err,"error reading the file, %s\n",certfile);
+               goto end;
+       }
+
+       /* scan over it and pull out the certs */
+       while (sk_X509_INFO_num(sk))
+               {
+               xi=sk_X509_INFO_shift(sk);
+               if (xi->x509 != NULL)
+                       {
+                       sk_X509_push(stack,xi->x509);
+                       xi->x509=NULL;
+                       }
+               X509_INFO_free(xi);
+               }
+       if(!sk_X509_num(stack)) {
+               BIO_printf(bio_err,"no certificates in file, %s\n",certfile);
+               sk_X509_free(stack);
+               goto end;
+       }
+       ret=stack;
+end:
+       BIO_free(in);
+       sk_X509_INFO_free(sk);
+       return(ret);
+       }
+
 static int MS_CALLBACK cb(int ok, X509_STORE_CTX *ctx)
        {
        char buf[256];
 
        if (!ok)
                {
-               /* since we are just checking the certificates, it is
-                * ok if they are self signed. */
-               if (ctx->error == X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT)
-                       ok=1;
-               else
-                       {
-                       X509_NAME_oneline(
+               X509_NAME_oneline(
                                X509_get_subject_name(ctx->current_cert),buf,256);
-                       printf("%s\n",buf);
-                       printf("error %d at %d depth lookup:%s\n",ctx->error,
-                               ctx->error_depth,
-                               X509_verify_cert_error_string(ctx->error));
-                       if (ctx->error == X509_V_ERR_CERT_HAS_EXPIRED)
-                               ok=1;
-                       }
+               printf("%s\n",buf);
+               printf("error %d at %d depth lookup:%s\n",ctx->error,
+                       ctx->error_depth,
+                       X509_verify_cert_error_string(ctx->error));
+               if (ctx->error == X509_V_ERR_CERT_HAS_EXPIRED) ok=1;
+               /* since we are just checking the certificates, it is
+                * ok if they are self signed. But we should still warn
+                * the user.
+                */
+               if (ctx->error == X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT) ok=1;
+               /* Continue after extension errors too */
+               if (ctx->error == X509_V_ERR_INVALID_CA) ok=1;
+               if (ctx->error == X509_V_ERR_PATH_LENGTH_EXCEEDED) ok=1;
+               if (ctx->error == X509_V_ERR_INVALID_PURPOSE) ok=1;
+               if (ctx->error == X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT) ok=1;
                }
        if (!v_verbose)
                ERR_clear_error();
Index: opensa/openssl/apps/version.c
diff -u opensa/openssl/apps/version.c:1.1 opensa/openssl/apps/version.c:1.2
--- opensa/openssl/apps/version.c:1.1   Tue Jan 25 23:38:06 2000
+++ opensa/openssl/apps/version.c       Thu Mar  2 21:11:49 2000
@@ -66,6 +66,8 @@
 #undef PROG
 #define PROG   version_main
 
+int MAIN(int, char **);
+
 int MAIN(int argc, char **argv)
        {
        int i,ret=0;
Index: opensa/openssl/apps/x509.c
diff -u opensa/openssl/apps/x509.c:1.1 opensa/openssl/apps/x509.c:1.2
--- opensa/openssl/apps/x509.c:1.1      Tue Jan 25 23:38:06 2000
+++ opensa/openssl/apps/x509.c  Thu Mar  2 21:11:49 2000
@@ -56,6 +56,7 @@
  * [including the GNU Public Licence.]
  */
 
+#include <assert.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -91,59 +92,78 @@
 " -CAkeyform arg  - CA key format - default PEM\n",
 " -in arg         - input file - default stdin\n",
 " -out arg        - output file - default stdout\n",
+" -passin arg     - private key password source\n",
 " -serial         - print serial number value\n",
 " -hash           - print hash value\n",
 " -subject        - print subject DN\n",
 " -issuer         - print issuer DN\n",
 " -startdate      - notBefore field\n",
 " -enddate        - notAfter field\n",
+" -purpose        - print out certificate purposes\n",
 " -dates          - both Before and After dates\n",
 " -modulus        - print the RSA key modulus\n",
+" -pubkey         - output the public key\n",
 " -fingerprint    - print the certificate fingerprint\n",
+" -alias          - output certificate alias\n",
 " -noout          - no certificate output\n",
-
+" -trustout       - output a \"trusted\" certificate\n",
+" -clrtrust       - clear all trusted purposes\n",
+" -clrreject      - clear all rejected purposes\n",
+" -addtrust arg   - trust certificate for a given purpose\n",
+" -addreject arg  - reject certificate for a given purpose\n",
+" -setalias arg   - set certificate alias\n",
 " -days arg       - How long till expiry of a signed certificate - def 30 days\n",
 " -signkey arg    - self sign cert with arg\n",
 " -x509toreq      - output a certification request object\n",
 " -req            - input is a certificate request, sign and output.\n",
 " -CA arg         - set the CA certificate, must be PEM format.\n",
 " -CAkey arg      - set the CA key, must be PEM format\n",
-"                   missing, it is asssumed to be in the CA file.\n",
+"                   missing, it is assumed to be in the CA file.\n",
 " -CAcreateserial - create serial number file if it does not exist\n",
 " -CAserial       - serial file\n",
 " -text           - print the certificate in text form\n",
 " -C              - print out C code forms\n",
-" -md2/-md5/-sha1/-mdc2 - digest to do an RSA sign with\n",
+" -md2/-md5/-sha1/-mdc2 - digest to use\n",
 " -extfile        - configuration file with X509V3 extensions to add\n",
+" -extensions     - section from config file with X509V3 extensions to add\n",
+" -crlext         - delete extensions before signing and input certificate\n",
 NULL
 };
 
 static int MS_CALLBACK callb(int ok, X509_STORE_CTX *ctx);
-static EVP_PKEY *load_key(char *file, int format);
+static EVP_PKEY *load_key(char *file, int format, char *passin);
 static X509 *load_cert(char *file, int format);
-static int sign (X509 *x, EVP_PKEY *pkey,int days,const EVP_MD *digest,
+static int sign (X509 *x, EVP_PKEY *pkey,int days,int clrext, const EVP_MD *digest,
                                                LHASH *conf, char *section);
 static int x509_certify (X509_STORE *ctx,char *CAfile,const EVP_MD *digest,
                         X509 *x,X509 *xca,EVP_PKEY *pkey,char *serial,
-                        int create,int days, LHASH *conf, char *section);
+                        int create,int days, int clrext, LHASH *conf, char *section);
+static int purpose_print(BIO *bio, X509 *cert, X509_PURPOSE *pt);
 static int reqfile=0;
 
+int MAIN(int, char **);
+
 int MAIN(int argc, char **argv)
        {
        int ret=1;
        X509_REQ *req=NULL;
        X509 *x=NULL,*xca=NULL;
+       ASN1_OBJECT *objtmp;
        EVP_PKEY *Upkey=NULL,*CApkey=NULL;
        int i,num,badops=0;
        BIO *out=NULL;
        BIO *STDout=NULL;
+       STACK_OF(ASN1_OBJECT) *trust = NULL, *reject = NULL;
        int informat,outformat,keyformat,CAformat,CAkeyformat;
        char *infile=NULL,*outfile=NULL,*keyfile=NULL,*CAfile=NULL;
        char *CAkeyfile=NULL,*CAserial=NULL;
+       char *alias=NULL;
        int text=0,serial=0,hash=0,subject=0,issuer=0,startdate=0,enddate=0;
        int noout=0,sign_flag=0,CA_flag=0,CA_createserial=0;
+       int trustout=0,clrtrust=0,clrreject=0,aliasout=0,clrext=0;
        int C=0;
-       int x509req=0,days=DEF_DAYS,modulus=0;
+       int x509req=0,days=DEF_DAYS,modulus=0,pubkey=0;
+       int pprint = 0;
        char **pp;
        X509_STORE *ctx=NULL;
        X509_REQ *rq=NULL;
@@ -151,7 +171,8 @@
        char buf[256];
        const EVP_MD *md_alg,*digest=EVP_md5();
        LHASH *extconf = NULL;
-       char *extsect = NULL, *extfile = NULL;
+       char *extsect = NULL, *extfile = NULL, *passin = NULL, *passargin = NULL;
+       int need_rand = 0;
 
        reqfile=0;
 
@@ -192,7 +213,10 @@
                        keyformat=str2fmt(*(++argv));
                        }
                else if (strcmp(*argv,"-req") == 0)
+                       {
                        reqfile=1;
+                       need_rand = 1;
+                       }
                else if (strcmp(*argv,"-CAform") == 0)
                        {
                        if (--argc < 1) goto bad;
@@ -213,11 +237,21 @@
                                goto bad;
                                }
                        }
+               else if (strcmp(*argv,"-passin") == 0)
+                       {
+                       if (--argc < 1) goto bad;
+                       passargin= *(++argv);
+                       }
                else if (strcmp(*argv,"-extfile") == 0)
                        {
                        if (--argc < 1) goto bad;
                        extfile= *(++argv);
                        }
+               else if (strcmp(*argv,"-extensions") == 0)
+                       {
+                       if (--argc < 1) goto bad;
+                       extsect= *(++argv);
+                       }
                else if (strcmp(*argv,"-in") == 0)
                        {
                        if (--argc < 1) goto bad;
@@ -233,12 +267,14 @@
                        if (--argc < 1) goto bad;
                        keyfile= *(++argv);
                        sign_flag= ++num;
+                       need_rand = 1;
                        }
                else if (strcmp(*argv,"-CA") == 0)
                        {
                        if (--argc < 1) goto bad;
                        CAfile= *(++argv);
                        CA_flag= ++num;
+                       need_rand = 1;
                        }
                else if (strcmp(*argv,"-CAkey") == 0)
                        {
@@ -250,12 +286,50 @@
                        if (--argc < 1) goto bad;
                        CAserial= *(++argv);
                        }
+               else if (strcmp(*argv,"-addtrust") == 0)
+                       {
+                       if (--argc < 1) goto bad;
+                       if(!(objtmp = OBJ_txt2obj(*(++argv), 0))) {
+                               BIO_printf(bio_err,
+                                       "Invalid trust object value %s\n", *argv);
+                               goto bad;
+                       }
+                       if(!trust) trust = sk_ASN1_OBJECT_new_null();
+                       sk_ASN1_OBJECT_push(trust, objtmp);
+                       trustout = 1;
+                       }
+               else if (strcmp(*argv,"-addreject") == 0)
+                       {
+                       if (--argc < 1) goto bad;
+                       if(!(objtmp = OBJ_txt2obj(*(++argv), 0))) {
+                               BIO_printf(bio_err,
+                                       "Invalid reject object value %s\n", *argv);
+                               goto bad;
+                       }
+                       if(!reject) reject = sk_ASN1_OBJECT_new_null();
+                       sk_ASN1_OBJECT_push(reject, objtmp);
+                       trustout = 1;
+                       }
+               else if (strcmp(*argv,"-setalias") == 0)
+                       {
+                       if (--argc < 1) goto bad;
+                       alias= *(++argv);
+                       trustout = 1;
+                       }
+               else if (strcmp(*argv,"-setalias") == 0)
+                       {
+                       if (--argc < 1) goto bad;
+                       alias= *(++argv);
+                       trustout = 1;
+                       }
                else if (strcmp(*argv,"-C") == 0)
                        C= ++num;
                else if (strcmp(*argv,"-serial") == 0)
                        serial= ++num;
                else if (strcmp(*argv,"-modulus") == 0)
                        modulus= ++num;
+               else if (strcmp(*argv,"-pubkey") == 0)
+                       pubkey= ++num;
                else if (strcmp(*argv,"-x509toreq") == 0)
                        x509req= ++num;
                else if (strcmp(*argv,"-text") == 0)
@@ -273,15 +347,27 @@
                        startdate= ++num;
                        enddate= ++num;
                        }
+               else if (strcmp(*argv,"-purpose") == 0)
+                       pprint= ++num;
                else if (strcmp(*argv,"-startdate") == 0)
                        startdate= ++num;
                else if (strcmp(*argv,"-enddate") == 0)
                        enddate= ++num;
                else if (strcmp(*argv,"-noout") == 0)
                        noout= ++num;
+               else if (strcmp(*argv,"-trustout") == 0)
+                       trustout= 1;
+               else if (strcmp(*argv,"-clrtrust") == 0)
+                       clrtrust= ++num;
+               else if (strcmp(*argv,"-clrreject") == 0)
+                       clrreject= ++num;
+               else if (strcmp(*argv,"-alias") == 0)
+                       aliasout= ++num;
                else if (strcmp(*argv,"-CAcreateserial") == 0)
                        CA_createserial= ++num;
-               else if ((md_alg=EVP_get_digestbyname(&((*argv)[1]))) != NULL)
+               else if (strcmp(*argv,"-crlext") == 0)
+                       clrext = 1;
+               else if ((md_alg=EVP_get_digestbyname(*argv + 1)))
                        {
                        /* ok */
                        digest=md_alg;
@@ -304,9 +390,16 @@
                goto end;
                }
 
+       if (need_rand)
+               app_RAND_load_file(NULL, bio_err, 0);
+
        ERR_load_crypto_strings();
-       X509V3_add_standard_extensions();
 
+       if(!app_passwd(bio_err, passargin, NULL, &passin, NULL)) {
+               BIO_printf(bio_err, "Error getting password\n");
+               goto end;
+       }
+
        if (!X509_STORE_set_default_paths(ctx))
                {
                ERR_print_errors(bio_err);
@@ -335,7 +428,7 @@
                                                        ,errorline,extfile);
                        goto end;
                }
-               if(!(extsect = CONF_get_string(extconf, "default",
+               if(!extsect && !(extsect = CONF_get_string(extconf, "default",
                                         "extensions"))) extsect = "default";
                X509V3_set_ctx_test(&ctx2);
                X509V3_set_conf_lhash(&ctx2, extconf);
@@ -425,15 +518,9 @@
                X509_gmtime_adj(X509_get_notBefore(x),0);
                X509_gmtime_adj(X509_get_notAfter(x),(long)60*60*24*days);
 
-#if 0
-               X509_PUBKEY_free(ci->key);
-               ci->key=req->req_info->pubkey;
-               req->req_info->pubkey=NULL;
-#else
                pkey = X509_REQ_get_pubkey(req);
                X509_set_pubkey(x,pkey);
                EVP_PKEY_free(pkey);
-#endif
                }
        else
                x=load_cert(infile,informat);
@@ -468,6 +555,25 @@
                        }
                }
 
+       if(alias) X509_alias_set1(x, (unsigned char *)alias, -1);
+
+       if(clrtrust) X509_trust_clear(x);
+       if(clrreject) X509_reject_clear(x);
+
+       if(trust) {
+               for(i = 0; i < sk_ASN1_OBJECT_num(trust); i++) {
+                       objtmp = sk_ASN1_OBJECT_value(trust, i);
+                       X509_add1_trust_object(x, objtmp);
+               }
+       }
+
+       if(reject) {
+               for(i = 0; i < sk_ASN1_OBJECT_num(reject); i++) {
+                       objtmp = sk_ASN1_OBJECT_value(reject, i);
+                       X509_add1_reject_object(x, objtmp);
+               }
+       }
+
        if (num)
                {
                for (i=1; i<=num; i++)
@@ -490,10 +596,28 @@
                                i2a_ASN1_INTEGER(STDout,x->cert_info->serialNumber);
                                BIO_printf(STDout,"\n");
                                }
+                       else if (aliasout == i)
+                               {
+                               unsigned char *alstr;
+                               alstr = X509_alias_get0(x, NULL);
+                               if(alstr) BIO_printf(STDout,"%s\n", alstr);
+                               else BIO_puts(STDout,"<No Alias>\n");
+                               }
                        else if (hash == i)
                                {
                                BIO_printf(STDout,"%08lx\n",X509_subject_name_hash(x));
                                }
+                       else if (pprint == i)
+                               {
+                               X509_PURPOSE *ptmp;
+                               int j;
+                               BIO_printf(STDout, "Certificate purposes:\n");
+                               for(j = 0; j < X509_PURPOSE_get_count(); j++)
+                                       {
+                                       ptmp = X509_PURPOSE_get0(j);
+                                       purpose_print(STDout, x, ptmp);
+                                       }
+                               }
                        else
                                if (modulus == i)
                                {
@@ -522,6 +646,21 @@
                                EVP_PKEY_free(pkey);
                                }
                        else
+                               if (pubkey == i)
+                               {
+                               EVP_PKEY *pkey;
+
+                               pkey=X509_get_pubkey(x);
+                               if (pkey == NULL)
+                                       {
+                                       BIO_printf(bio_err,"Error getting public 
+key\n");
+                                       ERR_print_errors(bio_err);
+                                       goto end;
+                                       }
+                               PEM_write_bio_PUBKEY(STDout, pkey);
+                               EVP_PKEY_free(pkey);
+                               }
+                       else
                                if (C == i)
                                {
                                unsigned char *d;
@@ -598,12 +737,13 @@
                                unsigned int n;
                                unsigned char md[EVP_MAX_MD_SIZE];
 
-                               if (!X509_digest(x,EVP_md5(),md,&n))
+                               if (!X509_digest(x,digest,md,&n))
                                        {
                                        BIO_printf(bio_err,"out of memory\n");
                                        goto end;
                                        }
-                               BIO_printf(STDout,"MD5 Fingerprint=");
+                               BIO_printf(STDout,"%s Fingerprint=",
+                                               OBJ_nid2sn(EVP_MD_type(digest)));
                                for (j=0; j<(int)n; j++)
                                        {
                                        BIO_printf(STDout,"%02X%c",md[j],
@@ -618,7 +758,7 @@
                                BIO_printf(bio_err,"Getting Private key\n");
                                if (Upkey == NULL)
                                        {
-                                       Upkey=load_key(keyfile,keyformat);
+                                       Upkey=load_key(keyfile,keyformat, passin);
                                        if (Upkey == NULL) goto end;
                                        }
 #ifndef NO_DSA
@@ -626,7 +766,8 @@
                                        digest=EVP_dss1();
 #endif
 
-                               if (!sign(x,Upkey,days,digest,
+                               assert(need_rand);
+                               if (!sign(x,Upkey,days,clrext,digest,
                                                 extconf, extsect)) goto end;
                                }
                        else if (CA_flag == i)
@@ -634,7 +775,7 @@
                                BIO_printf(bio_err,"Getting CA Private Key\n");
                                if (CAkeyfile != NULL)
                                        {
-                                       CApkey=load_key(CAkeyfile,CAkeyformat);
+                                       CApkey=load_key(CAkeyfile,CAkeyformat, passin);
                                        if (CApkey == NULL) goto end;
                                        }
 #ifndef NO_DSA
@@ -642,8 +783,9 @@
                                        digest=EVP_dss1();
 #endif
                                
+                               assert(need_rand);
                                if (!x509_certify(ctx,CAfile,digest,x,xca,
-                                       CApkey, CAserial,CA_createserial,days,
+                                       CApkey, CAserial,CA_createserial,days, clrext,
                                        extconf, extsect))
                                        goto end;
                                }
@@ -659,13 +801,16 @@
                                        }
                                else
                                        {
-                                       pk=load_key(keyfile,FORMAT_PEM);
+                                       pk=load_key(keyfile,FORMAT_PEM, passin);
                                        if (pk == NULL) goto end;
                                        }
 
                                BIO_printf(bio_err,"Generating certificate request\n");
+
+                               if (pk->type == EVP_PKEY_DSA)
+                                       digest=EVP_dss1();
 
-                               rq=X509_to_X509_REQ(x,pk,EVP_md5());
+                               rq=X509_to_X509_REQ(x,pk,digest);
                                EVP_PKEY_free(pk);
                                if (rq == NULL)
                                        {
@@ -690,9 +835,10 @@
 
        if      (outformat == FORMAT_ASN1)
                i=i2d_X509_bio(out,x);
-       else if (outformat == FORMAT_PEM)
-               i=PEM_write_bio_X509(out,x);
-       else if (outformat == FORMAT_NETSCAPE)
+       else if (outformat == FORMAT_PEM) {
+               if(trustout) i=PEM_write_bio_X509_AUX(out,x);
+               else i=PEM_write_bio_X509(out,x);
+       } else if (outformat == FORMAT_NETSCAPE)
                {
                ASN1_HEADER ah;
                ASN1_OCTET_STRING os;
@@ -717,6 +863,8 @@
                }
        ret=0;
 end:
+       if (need_rand)
+               app_RAND_write_file(NULL, bio_err);
        OBJ_cleanup();
        CONF_free(extconf);
        BIO_free(out);
@@ -728,13 +876,15 @@
        EVP_PKEY_free(Upkey);
        EVP_PKEY_free(CApkey);
        X509_REQ_free(rq);
-       X509V3_EXT_cleanup();
+       sk_ASN1_OBJECT_pop_free(trust, ASN1_OBJECT_free);
+       sk_ASN1_OBJECT_pop_free(reject, ASN1_OBJECT_free);
+       if(passin) Free(passin);
        EXIT(ret);
        }
 
 static int x509_certify(X509_STORE *ctx, char *CAfile, const EVP_MD *digest,
             X509 *x, X509 *xca, EVP_PKEY *pkey, char *serialfile, int create,
-            int days, LHASH *conf, char *section)
+            int days, int clrext, LHASH *conf, char *section)
        {
        int ret=0;
        BIO *io=NULL;
@@ -750,7 +900,7 @@
        EVP_PKEY_free(upkey);
 
        X509_STORE_CTX_init(&xsc,ctx,x,NULL);
-       buf=(char *)Malloc(EVP_PKEY_size(pkey)*2+
+       buf=Malloc(EVP_PKEY_size(pkey)*2+
                ((serialfile == NULL)
                        ?(strlen(CAfile)+strlen(POSTFIX)+1)
                        :(strlen(serialfile)))+1);
@@ -792,8 +942,8 @@
                        }
                else
                        {
-                       ASN1_INTEGER_set(bs,0);
-                       BN_zero(serial);
+                       ASN1_INTEGER_set(bs,1);
+                       BN_one(serial);
                        }
                }
        else 
@@ -855,6 +1005,10 @@
        if (X509_gmtime_adj(X509_get_notAfter(x),(long)60*60*24*days) == NULL)
                goto end;
 
+       if(clrext) {
+               while(X509_get_ext_count(x) > 0) X509_delete_ext(x, 0);
+       }
+
        if(conf) {
                X509V3_CTX ctx2;
                X509_set_version(x,2); /* version 3 certificate */
@@ -909,7 +1063,7 @@
                }
        }
 
-static EVP_PKEY *load_key(char *file, int format)
+static EVP_PKEY *load_key(char *file, int format, char *passin)
        {
        BIO *key=NULL;
        EVP_PKEY *pkey=NULL;
@@ -930,25 +1084,13 @@
                perror(file);
                goto end;
                }
-#ifndef NO_RSA
-       if      (format == FORMAT_ASN1)
+       if (format == FORMAT_ASN1)
                {
-               RSA *rsa;
-
-               rsa=d2i_RSAPrivateKey_bio(key,NULL);
-               if (rsa != NULL)
-                       {
-                       if ((pkey=EVP_PKEY_new()) != NULL)
-                               EVP_PKEY_assign_RSA(pkey,rsa);
-                       else
-                               RSA_free(rsa);
-                       }
+               pkey=d2i_PrivateKey_bio(key, NULL);
                }
-       else
-#endif
-               if (format == FORMAT_PEM)
+       else if (format == FORMAT_PEM)
                {
-               pkey=PEM_read_bio_PrivateKey(key,NULL,NULL,NULL);
+               pkey=PEM_read_bio_PrivateKey(key,NULL,NULL,passin);
                }
        else
                {
@@ -1031,7 +1173,7 @@
                ah->data=NULL;
                }
        else if (format == FORMAT_PEM)
-               x=PEM_read_bio_X509(cert,NULL,NULL,NULL);
+               x=PEM_read_bio_X509_AUX(cert,NULL,NULL,NULL);
        else    {
                BIO_printf(bio_err,"bad input format specified for input cert\n");
                goto end;
@@ -1049,7 +1191,7 @@
        }
 
 /* self sign */
-static int sign(X509 *x, EVP_PKEY *pkey, int days, const EVP_MD *digest, 
+static int sign(X509 *x, EVP_PKEY *pkey, int days, int clrext, const EVP_MD *digest, 
                                                LHASH *conf, char *section)
        {
 
@@ -1071,6 +1213,9 @@
                goto err;
 
        if (!X509_set_pubkey(x,pkey)) goto err;
+       if(clrext) {
+               while(X509_get_ext_count(x) > 0) X509_delete_ext(x, 0);
+       }
        if(conf) {
                X509V3_CTX ctx;
                X509_set_version(x,2); /* version 3 certificate */
@@ -1084,3 +1229,22 @@
        ERR_print_errors(bio_err);
        return(0);
        }
+
+static int purpose_print(BIO *bio, X509 *cert, X509_PURPOSE *pt)
+{
+       int id, i, idret;
+       char *pname;
+       id = X509_PURPOSE_get_id(pt);
+       pname = X509_PURPOSE_get0_name(pt);
+       for(i = 0; i < 2; i++) {
+               idret = X509_check_purpose(cert, id, i);
+               BIO_printf(bio, "%s%s : ", pname, i ? " CA" : ""); 
+               if(idret == 1) BIO_printf(bio, "Yes\n");
+               else if (idret == 0) BIO_printf(bio, "No\n");
+               else BIO_printf(bio, "Yes (WARNING code=%d)\n", idret);
+       }
+       return 1;
+}
+
+
+
Index: opensa/openssl/bugs/sslv3
diff -u opensa/openssl/bugs/sslv3:1.1 opensa/openssl/bugs/sslv3:1.2
--- opensa/openssl/bugs/sslv3:1.1       Tue Jan 25 23:37:14 2000
+++ opensa/openssl/bugs/sslv3   Thu Mar  2 21:11:49 2000
@@ -39,3 +39,11 @@
 
 Netscape, when using export ciphers, will accept a 1024 bit temporary
 RSA key.  It is supposed to only accept 512.
+
+If Netscape connects to a server which requests a client certificate
+it will frequently hang after the user has selected one and never
+complete the connection. Hitting "Stop" and reload fixes this and
+all subsequent connections work fine. This appears to be because 
+Netscape wont read any new records in when it is awaiting a server
+done message at this point. The fix is to send the certificate request
+and server done messages in one record.
Index: opensa/openssl/certs/ca-cert.pem
diff -u opensa/openssl/certs/ca-cert.pem:1.1 opensa/openssl/certs/ca-cert.pem:1.2
--- opensa/openssl/certs/ca-cert.pem:1.1        Tue Jan 25 23:36:37 2000
+++ opensa/openssl/certs/ca-cert.pem    Thu Mar  2 21:11:49 2000
@@ -1,18 +1,20 @@
-issuer= /C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test PCA (1024 bit)
-subject=/C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test CA (1024 bit)
 -----BEGIN CERTIFICATE-----
-MIICJjCCAY8CAQAwDQYJKoZIhvcNAQEEBQAwXDELMAkGA1UEBhMCQVUxEzARBgNV
-BAgTClF1ZWVuc2xhbmQxGjAYBgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMRwwGgYD
-VQQDExNUZXN0IFBDQSAoMTAyNCBiaXQpMB4XDTk3MDYwOTEzNTc0M1oXDTAxMDYw
-OTEzNTc0M1owWzELMAkGA1UEBhMCQVUxEzARBgNVBAgTClF1ZWVuc2xhbmQxGjAY
-BgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMRswGQYDVQQDExJUZXN0IENBICgxMDI0
-IGJpdCkwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKO7o8t116VP6cgybTsZ
-DCZhr95nYlZuya3aCi1IKoztqwWnjbmDFIriOqGFPrZQ+moMETC9D59iRW/dFXSv
-1F65ka/XY2hLh9exCCo7XuUcDs53Qp3bI3AmMqHjgzE8oO3ajyJAzJkTTOUecQU2
-mw/gI4tMM0LqWMQS7luTy4+xAgMBAAEwDQYJKoZIhvcNAQEEBQADgYEAM7achv3v
-hLQJcv/65eGEpBXM40ZDVoFQFFJWaY5p883HTqLB1x4FdzsXHH0QKBTcKpWwqyu4
-YDm3fb8oDugw72bCzfyZK/zVZPR/hVlqI/fvU109Qoc+7oPvIXWky71HfcK6ZBCA
-q30KIqGM/uoM60INq97qjDmCJapagcNBGQs=
+MIIC5TCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQQFADBcMQswCQYDVQQGEwJBVTET
+MBEGA1UECBMKUXVlZW5zbGFuZDEaMBgGA1UEChMRQ3J5cHRTb2Z0IFB0eSBMdGQx
+HDAaBgNVBAMTE1Rlc3QgUENBICgxMDI0IGJpdCkwHhcNOTkxMjAyMjEzODUxWhcN
+MDUwNzEwMjEzODUxWjBbMQswCQYDVQQGEwJBVTETMBEGA1UECBMKUXVlZW5zbGFu
+ZDEaMBgGA1UEChMRQ3J5cHRTb2Z0IFB0eSBMdGQxGzAZBgNVBAMTElRlc3QgQ0Eg
+KDEwMjQgYml0KTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAo7ujy3XXpU/p
+yDJtOxkMJmGv3mdiVm7JrdoKLUgqjO2rBaeNuYMUiuI6oYU+tlD6agwRML0Pn2JF
+b90VdK/UXrmRr9djaEuH17EIKjte5RwOzndCndsjcCYyoeODMTyg7dqPIkDMmRNM
+5R5xBTabD+Aji0wzQupYxBLuW5PLj7ECAwEAAaOBtzCBtDAdBgNVHQ4EFgQU1WWA
+U42mkhi3ecgey1dsJjU61+UwgYQGA1UdIwR9MHuAFE0RaEcrj18q1dw+G6nJbsTW
+R213oWCkXjBcMQswCQYDVQQGEwJBVTETMBEGA1UECBMKUXVlZW5zbGFuZDEaMBgG
+A1UEChMRQ3J5cHRTb2Z0IFB0eSBMdGQxHDAaBgNVBAMTE1Rlc3QgUENBICgxMDI0
+IGJpdCmCAQAwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQBb39BRphHL
+6aRAQyymsvBvPSCiG9+kR0R1L23aTpNbhXp2BebyFjbEQYZc2kWGiKKcHkNECA35
+3d4LoqUlVey8DFyafOIJd9hxdZfg+rxlHMxnL7uCJRmx9+xB411Jtsol9/wg1uCK
+sleGpgB4j8cG2SVCz7V2MNZNK+d5QCnR7A==
 -----END CERTIFICATE-----
 -----BEGIN RSA PRIVATE KEY-----
 MIICXQIBAAKBgQCju6PLddelT+nIMm07GQwmYa/eZ2JWbsmt2gotSCqM7asFp425
Index: opensa/openssl/certs/pca-cert.pem
diff -u opensa/openssl/certs/pca-cert.pem:1.1 opensa/openssl/certs/pca-cert.pem:1.2
--- opensa/openssl/certs/pca-cert.pem:1.1       Tue Jan 25 23:36:37 2000
+++ opensa/openssl/certs/pca-cert.pem   Thu Mar  2 21:11:49 2000
@@ -1,18 +1,20 @@
-issuer= /C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test PCA (1024 bit)
-subject=/C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test PCA (1024 bit)
 -----BEGIN CERTIFICATE-----
-MIICJzCCAZACAQAwDQYJKoZIhvcNAQEEBQAwXDELMAkGA1UEBhMCQVUxEzARBgNV
-BAgTClF1ZWVuc2xhbmQxGjAYBgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMRwwGgYD
-VQQDExNUZXN0IFBDQSAoMTAyNCBiaXQpMB4XDTk3MDYwOTEzNTczN1oXDTAxMDYw
-OTEzNTczN1owXDELMAkGA1UEBhMCQVUxEzARBgNVBAgTClF1ZWVuc2xhbmQxGjAY
+MIIC5jCCAk+gAwIBAgIBADANBgkqhkiG9w0BAQQFADBcMQswCQYDVQQGEwJBVTET
+MBEGA1UECBMKUXVlZW5zbGFuZDEaMBgGA1UEChMRQ3J5cHRTb2Z0IFB0eSBMdGQx
+HDAaBgNVBAMTE1Rlc3QgUENBICgxMDI0IGJpdCkwHhcNOTkxMjAyMjEzNTQ4WhcN
+MDUwNzExMjEzNTQ4WjBcMQswCQYDVQQGEwJBVTETMBEGA1UECBMKUXVlZW5zbGFu
+ZDEaMBgGA1UEChMRQ3J5cHRTb2Z0IFB0eSBMdGQxHDAaBgNVBAMTE1Rlc3QgUENB
+ICgxMDI0IGJpdCkwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAJ2haT/f5Zwy
+V+MiuSDjSR62adBoSiBB7Usty44lXqsp9RICw+DCCxpsn/CfxPEDXLLd4olsWXc6
+JRcxGynbYmnzk+Z6aIPPJQhK3CTvaqGnWKZsA1m+WaUIUqJCuNTK4N+7hMAGaf6S
+S3e9HVgEQ4a34gXJ7VQFVIBNV1EnZRWHAgMBAAGjgbcwgbQwHQYDVR0OBBYEFE0R
+aEcrj18q1dw+G6nJbsTWR213MIGEBgNVHSMEfTB7gBRNEWhHK49fKtXcPhupyW7E
+1kdtd6FgpF4wXDELMAkGA1UEBhMCQVUxEzARBgNVBAgTClF1ZWVuc2xhbmQxGjAY
 BgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMRwwGgYDVQQDExNUZXN0IFBDQSAoMTAy
-NCBiaXQpMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCdoWk/3+WcMlfjIrkg
-40ketmnQaEogQe1LLcuOJV6rKfUSAsPgwgsabJ/wn8TxA1yy3eKJbFl3OiUXMRsp
-22Jp85PmemiDzyUIStwk72qhp1imbANZvlmlCFKiQrjUyuDfu4TABmn+kkt3vR1Y
-BEOGt+IFye1UBVSATVdRJ2UVhwIDAQABMA0GCSqGSIb3DQEBBAUAA4GBABNA1u/S
-Cg/LJZWb7GliiKJsvuhxlE4E5JxQF2zMub/CSNbF97//tYSyj96sxeFQxZXbcjm9
-xt6mr/xNLA4szNQMJ4P+L7b5e/jC5DSqlwS+CUYJgaFs/SP+qJoCSu1bR3IM9XWO
-cRBpDmcBbYLkSyB92WURvsZ1LtjEcn+cdQVI
+NCBiaXQpggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAUa8B3pho
++Mvxeq9HsEzJxHIFQla05S5J/e/V+DQTYoKiRFchKPrDAdrzYSEvP3h4QJEtsNqQ
+JfOxg5M42uLFq7aPGWkF6ZZqZsYS+zA9IVT14g7gNA6Ne+5QtJqQtH9HA24st0T0
+Tga/lZ9M2ovImovaxSL/kRHbpCWcqWVxpOw=
 -----END CERTIFICATE-----
 -----BEGIN RSA PRIVATE KEY-----
 MIICXAIBAAKBgQCdoWk/3+WcMlfjIrkg40ketmnQaEogQe1LLcuOJV6rKfUSAsPg
Index: opensa/openssl/crypto/buildinf.h
diff -u opensa/openssl/crypto/buildinf.h:1.1 opensa/openssl/crypto/buildinf.h:1.2
--- opensa/openssl/crypto/buildinf.h:1.1        Tue Jan 25 23:20:27 2000
+++ opensa/openssl/crypto/buildinf.h    Thu Mar  2 21:11:49 2000
@@ -1,19 +1,19 @@
-#ifndef MK1MF_BUILD
-  /* auto-generated by Configure for crypto/cversion.c:
-   * for Unix builds, crypto/Makefile.ssl generates functional definitions;
-   * Windows builds (and other mk1mf builds) compile cversion.c with
-   * -DMK1MF_BUILD and use definitions added to this file by util/mk1mf.pl. */
-  #error "Windows builds (PLATFORM=VC-WIN32) use mk1mf.pl-created Makefiles"
-#endif
-#ifdef MK1MF_PLATFORM_VC_W31_32
-  /* auto-generated/updated by util/mk1mf.pl for crypto/cversion.c */
-  #define CFLAGS "cl /ALw /Gx- /Gt256 /Gf /G2 /f- /Ocgnotb2 /W3 /WX -DL_ENDIAN 
/nologo -DWINDOWS -DWIN16"
-  #define PLATFORM "VC-W31-32"
-  #define DATE "Sat Oct 16 20:40:23 1999"
-#endif
-#ifdef MK1MF_PLATFORM_VC_WIN32
-  /* auto-generated/updated by util/mk1mf.pl for crypto/cversion.c */
-  #define CFLAGS "cl  /MD /W3 /WX /G5 /Ox /O2 /Ob2 /Gs0 /GF /Gy /nologo -DWIN32 
-DWIN32_LEAN_AND_MEAN -DL_ENDIAN /Fdout32dll"
-  #define PLATFORM "VC-WIN32"
-  #define DATE "Sat Oct 16 20:40:24 1999"
-#endif
+#ifndef MK1MF_BUILD
+  /* auto-generated by Configure for crypto/cversion.c:
+   * for Unix builds, crypto/Makefile.ssl generates functional definitions;
+   * Windows builds (and other mk1mf builds) compile cversion.c with
+   * -DMK1MF_BUILD and use definitions added to this file by util/mk1mf.pl. */
+  #error "Windows builds (PLATFORM=VC-WIN32) use mk1mf.pl-created Makefiles"
+#endif
+#ifdef MK1MF_PLATFORM_VC_W31_32
+  /* auto-generated/updated by util/mk1mf.pl for crypto/cversion.c */
+  #define CFLAGS "cl /ALw /Gx- /Gt256 /Gf /G2 /f- /Ocgnotb2 /W3 /WX -DL_ENDIAN 
+/nologo -DWINDOWS -DWIN16"
+  #define PLATFORM "VC-W31-32"
+  #define DATE "Thu Mar  2 20:13:09 2000"
+#endif
+#ifdef MK1MF_PLATFORM_VC_WIN32
+  /* auto-generated/updated by util/mk1mf.pl for crypto/cversion.c */
+  #define CFLAGS "cl  /MD /W3 /WX /G5 /Ox /O2 /Ob2 /Gs0 /GF /Gy /nologo -DWIN32 
+-DWIN32_LEAN_AND_MEAN -DL_ENDIAN /Fdout32dll"
+  #define PLATFORM "VC-WIN32"
+  #define DATE "Thu Mar  2 20:13:10 2000"
+#endif
Index: opensa/openssl/crypto/cryptlib.c
diff -u opensa/openssl/crypto/cryptlib.c:1.1 opensa/openssl/crypto/cryptlib.c:1.2
--- opensa/openssl/crypto/cryptlib.c:1.1        Tue Jan 25 23:20:27 2000
+++ opensa/openssl/crypto/cryptlib.c    Thu Mar  2 21:11:49 2000
@@ -92,7 +92,9 @@
        "getservbyname",
        "readdir",
        "RSA_blinding",
-#if CRYPTO_NUM_LOCKS != 24
+       "dh",
+       "debug_malloc2",
+#if CRYPTO_NUM_LOCKS != 26
 # error "Inconsistency between crypto.h and cryptlib.c"
 #endif
        };
@@ -181,7 +183,7 @@
                ret=(unsigned long)GetCurrentTask();
 #elif defined(WIN32)
                ret=(unsigned long)GetCurrentThreadId();
-#elif defined(MSDOS)
+#elif defined(GETPID_IS_MEANINGLESS)
                ret=1L;
 #else
                ret=(unsigned long)getpid();
Index: opensa/openssl/crypto/crypto-lib.com
diff -u opensa/openssl/crypto/crypto-lib.com:1.1 
opensa/openssl/crypto/crypto-lib.com:1.2
--- opensa/openssl/crypto/crypto-lib.com:1.1    Tue Jan 25 23:20:27 2000
+++ opensa/openssl/crypto/crypto-lib.com        Thu Mar  2 21:11:49 2000
@@ -14,7 +14,14 @@
 $!  It was re-written so it would try to determine what "C" compiler to use 
 $!  or you can specify which "C" compiler to use.
 $!
-$!  Specify RSAREF as P1 to compile with the RSAREF library instead of
+$!  Specify the following as P1 to build just that part or ALL to just
+$!  build everything.
+$!
+$!             LIBRARY    To just compile the [.xxx.EXE.CRYPTO]LIBCRYPTO.OLB Library.
+$!             APPS       To just compile the [.xxx.EXE.CRYPTO]*.EXE
+$!             ALL        To do both LIBRARY and APPS
+$!
+$!  Specify RSAREF as P2 to compile with the RSAREF library instead of
 $!  the regular one.  If you specify NORSAREF it will compile with the
 $!  regular RSAREF routines.  (Note: If you are in the United States
 $!  you MUST compile with RSAREF unless you have a license from RSA).
@@ -26,10 +33,10 @@
 $!        into the [.RSAREF] directory under the root directory as that
 $!        is where the scripts will look for the files.
 $!
-$!  Specify DEBUG or NODEBUG as P2 to compile with or without debugger
+$!  Specify DEBUG or NODEBUG as P3 to compile with or without debugger
 $!  information.
 $!
-$!  Specify which compiler at P3 to try to compile under.
+$!  Specify which compiler at P4 to try to compile under.
 $!
 $!        VAXC  For VAX C.
 $!        DECC  For DEC C.
@@ -38,15 +45,15 @@
 $!  If you don't speficy a compiler, it will try to determine which
 $!  "C" compiler to use.
 $!
-$!  P4, if defined, sets a TCP/IP library to use, through one of the following
+$!  P5, if defined, sets a TCP/IP library to use, through one of the following
 $!  keywords:
 $!
 $!     UCX             for UCX
 $!     SOCKETSHR       for SOCKETSHR+NETLIB
 $!
-$!  P5, if defined, sets a compiler thread NOT needed on OpenVMS 7.1 (and up)
+$!  P6, if defined, sets a compiler thread NOT needed on OpenVMS 7.1 (and up)
 $!
-$!  P6, if defined, sets a choice of crypto methods to compile.
+$!  P7, if defined, sets a choice of crypto methods to compile.
 $!  WARNING: this should only be done to recompile some part of an already
 $!  fully compiled library.
 $!
@@ -79,12 +86,13 @@
 $!
 $! Define The Different Encryption Types.
 $!
-$ ENCRYPT_TYPES = ",MD2,MD5,SHA,MDC2,HMAC,RIPEMD,"+ -
+$ ENCRYPT_TYPES = "Basic,MD2,MD5,SHA,MDC2,HMAC,RIPEMD,"+ -
                  "DES,RC2,RC4,RC5,IDEA,BF,CAST,"+ -
                  "BN,RSA,DSA,DH,"+ -
                  "BUFFER,BIO,STACK,LHASH,RAND,ERR,OBJECTS,"+ -
                  "EVP,EVP_2,ASN1,ASN1_2,PEM,X509,X509V3,"+ -
                  "CONF,TXT_DB,PKCS7,PKCS12,COMP"
+$ ENCRYPT_PROGRAMS = "DES,PKCS7"
 $!
 $! Check To Make Sure We Have Valid Command Line Parameters.
 $!
@@ -136,6 +144,14 @@
 $!
 $ LIB_NAME := 'EXE_DIR'LIBCRYPTO.OLB
 $!
+$! Define The CRYPTO-LIB We Are To Use.
+$!
+$ CRYPTO_LIB := 'EXE_DIR'LIBCRYPTO.OLB
+$!
+$! Define The RSAREF-LIB We Are To Use.
+$!
+$ RSAREF_LIB := SYS$DISK:[-.'ARCH'.EXE.RSAREF]LIBRSAGLUE.OLB
+$!
 $! Check To See If We Already Have A "[.xxx.EXE.CRYPTO]LIBCRYPTO.OLB" Library...
 $!
 $ IF (F$SEARCH(LIB_NAME).EQS."")
@@ -149,9 +165,16 @@
 $!
 $ ENDIF
 $!
+$! Build our options file for the application
+$!
+$ GOSUB CHECK_OPT_FILE
+$!
 $! Define The Different Encryption "library" Strings.
 $!
-$ LIB_ = "cryptlib,mem,cversion,ex_data,tmdiff,cpt_err"
+$ APPS_DES = "DES/DES,CBC3_ENC"
+$ APPS_PKCS7 = "ENC/ENC;DEC/DEC;SIGN/SIGN;VERIFY/VERIFY,EXAMPLE"
+$
+$ LIB_ = "cryptlib,mem,mem_dbg,cversion,ex_data,tmdiff,cpt_err"
 $ LIB_MD2 = "md2_dgst,md2_one"
 $ LIB_MD5 = "md5_dgst,md5_one"
 $ LIB_SHA = "sha_dgst,sha1dgst,sha_one,sha1_one"
@@ -171,14 +194,14 @@
 $ LIB_BF = "bf_skey,bf_ecb,bf_enc,bf_cfb64,bf_ofb64"
 $ LIB_CAST = "c_skey,c_ecb,c_enc,c_cfb64,c_ofb64"
 $ LIB_BN_ASM = "[.asm]vms.mar,vms-helper"
-$ IF F$TRNLNM("OPENSSL_NO_ASM") .NES. "" THEN LIB_BN_ASM = "bn_asm"
-$ LIB_BN = "bn_add,bn_div,bn_exp,bn_lib,bn_mul,"+ -
+$ IF F$TRNLNM("OPENSSL_NO_ASM").OR.ARCH.EQS."AXP" THEN LIB_BN_ASM = "bn_asm"
+$ LIB_BN = "bn_add,bn_div,bn_exp,bn_lib,bn_ctx,bn_mul,"+ -
        "bn_print,bn_rand,bn_shift,bn_word,bn_blind,"+ -
        "bn_gcd,bn_prime,bn_err,bn_sqr,"+LIB_BN_ASM+",bn_recp,bn_mont,"+ -
        "bn_mpi,bn_exp2"
 $ LIB_RSA = "rsa_eay,rsa_gen,rsa_lib,rsa_sign,rsa_saos,rsa_err,"+ -
-       "rsa_pk1,rsa_ssl,rsa_none,rsa_oaep,rsa_chk"
-$ LIB_DSA = "dsa_gen,dsa_key,dsa_lib,dsa_asn1,dsa_vrf,dsa_sign,dsa_err"
+       "rsa_pk1,rsa_ssl,rsa_none,rsa_oaep,rsa_chk,rsa_null"
+$ LIB_DSA = "dsa_gen,dsa_key,dsa_lib,dsa_asn1,dsa_vrf,dsa_sign,dsa_err,dsa_ossl"
 $ LIB_DH = "dh_gen,dh_key,dh_lib,dh_check,dh_err"
 $ LIB_BUFFER = "buffer,buf_err"
 $ LIB_BIO = "bio_lib,bio_cb,bio_err,"+ -
@@ -188,7 +211,7 @@
        "b_sock,bss_acpt,bf_nbio,bss_rtcp,bss_bio" ! + ",bss_log" for syslog
 $ LIB_STACK = "stack"
 $ LIB_LHASH = "lhash,lh_stats"
-$ LIB_RAND = "md_rand,randfile,rand_lib"
+$ LIB_RAND = "md_rand,randfile,rand_lib,rand_err,rand_egd"
 $ LIB_ERR = "err,err_all,err_prn"
 $ LIB_OBJECTS = "o_names,obj_dat,obj_lib,obj_err"
 $ LIB_EVP = "encode,digest,evp_enc,evp_key,"+ -
@@ -204,38 +227,39 @@
        "m_ripemd,"+ -
        "p_open,p_seal,p_sign,p_verify,p_lib,p_enc,p_dec,"+ -
        "bio_md,bio_b64,bio_enc,evp_err,e_null,"+ -
-       "c_all,evp_lib,bio_ok,evp_pkey,evp_pbe,p5_crpt,p5_crpt2"
+       "c_all,c_allc,c_alld,evp_lib,bio_ok,"+-
+       "evp_pkey,evp_pbe,p5_crpt,p5_crpt2"
 $ LIB_ASN1 = "a_object,a_bitstr,a_utctm,a_gentm,a_time,a_int,a_octet,"+ -
-       "a_print,a_type,a_set,a_dup,a_d2i_fp,a_i2d_fp,a_bmp,"+ -
-       "a_enum,a_vis,a_utf8,a_sign,a_digest,a_verify,"+ -
+       "a_null,a_print,a_type,a_set,a_dup,a_d2i_fp,a_i2d_fp,a_bmp,"+ -
+       "a_enum,a_vis,a_utf8,a_sign,a_digest,a_verify,a_mbstr,"+ -
        "x_algor,x_val,x_pubkey,x_sig,x_req,x_attrib,"+ -
-       "x_name,x_cinf,x_x509,x_crl,x_info,x_spki,nsseq,"+ -
+       "x_name,x_cinf,x_x509,x_x509a,x_crl,x_info,x_spki,nsseq,"+ -
        "d2i_r_pr,i2d_r_pr,d2i_r_pu,i2d_r_pu,"+ -
        "d2i_s_pr,i2d_s_pr,d2i_s_pu,i2d_s_pu,"+ -
        "d2i_pu,d2i_pr,i2d_pu,i2d_pr"
-$ LIB_ASN1_2 = "t_req,t_x509,t_crl,t_pkey,"+ -
+$ LIB_ASN1_2 = "t_req,t_x509,t_x509a,t_crl,t_pkey,t_spki,t_bitst,"+ -
        "p7_i_s,p7_signi,p7_signd,p7_recip,p7_enc_c,p7_evp,"+ -
        "p7_dgst,p7_s_e,p7_enc,p7_lib,"+ -
        "f_int,f_string,i2d_dhp,i2d_dsap,d2i_dhp,d2i_dsap,n_pkey,"+ -
        "f_enum,a_hdr,x_pkey,a_bool,x_exten,"+ -
-       "asn1_par,asn1_lib,asn1_err,a_meth,a_bytes,"+ -
+       "asn1_par,asn1_lib,asn1_err,a_meth,a_bytes,a_strnid,"+ -
        "evp_asn1,asn_pack,p5_pbe,p5_pbev2,p8_pkey"
 $ LIB_PEM = "pem_sign,pem_seal,pem_info,pem_lib,pem_all,pem_err"
 $ LIB_X509 = "x509_def,x509_d2,x509_r2x,x509_cmp,"+ -
-       "x509_obj,x509_req,x509_vfy,"+ -
+       "x509_obj,x509_req,x509spki,x509_vfy,"+ -
        "x509_set,x509rset,x509_err,"+ -
-       "x509name,x509_v3,x509_ext,"+ -
+       "x509name,x509_v3,x509_ext,x509_att,"+ -
        "x509type,x509_lu,x_all,x509_txt,"+ -
-       "by_file,by_dir"
+       "x509_trs,by_file,by_dir"
 $ LIB_X509V3 = "v3_bcons,v3_bitst,v3_conf,v3_extku,v3_ia5,v3_lib,"+ -
        "v3_prn,v3_utl,v3err,v3_genn,v3_alt,v3_skey,v3_akey,v3_pku,"+ -
-       "v3_int,v3_enum,v3_sxnet,v3_cpols,v3_crld"
+       "v3_int,v3_enum,v3_sxnet,v3_cpols,v3_crld,v3_purp,v3_info"
 $ LIB_CONF = "conf,conf_err"
 $ LIB_TXT_DB = "txt_db"
-$ LIB_PKCS7 = "pk7_lib,pkcs7err,pk7_doit"
+$ LIB_PKCS7 = "pk7_lib,pkcs7err,pk7_doit,pk7_smime,pk7_attr,pk7_mime"
 $ LIB_PKCS12 = "p12_add,p12_attr,p12_bags,p12_crpt,p12_crt,p12_decr,"+ -
        "p12_init,p12_key,p12_kiss,p12_lib,p12_mac,p12_mutl,"+ -
-       "p12_sbag,p12_utl,pk12err"
+       "p12_sbag,p12_utl,p12_npas,pk12err"
 $ LIB_COMP = "comp_lib,"+ -
        "c_rle,c_zlib"
 $!
@@ -248,7 +272,8 @@
 $!
 $! Check To See If We Are Going To Use RSAREF.
 $!
-$ IF (RSAREF.EQS."TRUE" .AND. ENCRYPT_TYPES - "RSA".NES.ENCRYPT_TYPES)
+$ IF (RSAREF.EQS."TRUE" .AND. ENCRYPT_TYPES - "RSA".NES.ENCRYPT_TYPES -
+      .AND. (BUILDALL .EQS. "TRUE" .OR. BUILDALL .EQS. "LIBRARY"))
 $ THEN
 $!
 $!  Check To See If The File [-.RSAREF]RSAREF.C Is Actually There.
@@ -340,6 +365,8 @@
 $! Extract The Module Name From The Encryption List.
 $!
 $ MODULE_NAME = F$ELEMENT(MODULE_COUNTER,",",ENCRYPT_TYPES)
+$ IF MODULE_NAME.EQS."Basic" THEN MODULE_NAME = ""
+$ MODULE_NAME1 = MODULE_NAME
 $!
 $! Check To See If We Are At The End Of The Module List.
 $!
@@ -358,20 +385,10 @@
 $!
 $ MODULE_COUNTER = MODULE_COUNTER + 1
 $!
-$! Tell The User What Module We Are Building.
+$! Create The Library and Apps Module Names.
 $!
-$ IF (MODULE_NAME.NES."") 
-$ THEN
-$   WRITE SYS$OUTPUT "Compiling The ",MODULE_NAME," Files."
-$ ENDIF
-$!
-$!  Define A File Counter And Set It To "0".
-$!
-$ FILE_COUNTER = 0
-$!
-$! Create The Library Module Name.
-$!
 $ LIB_MODULE = "LIB_" + MODULE_NAME
+$ APPS_MODULE = "APPS_" + MODULE_NAME
 $ IF (MODULE_NAME.EQS."ASN1_2")
 $ THEN
 $   MODULE_NAME = "ASN1"
@@ -381,6 +398,11 @@
 $   MODULE_NAME = "EVP"
 $ ENDIF
 $!
+$! Set state (can be LIB and APPS)
+$!
+$ STATE = "LIB"
+$ IF BUILDALL .EQS. "APPS" THEN STATE = "APPS"
+$!
 $! Check if the library module name actually is defined
 $!
 $ IF F$TYPE('LIB_MODULE') .EQS. ""
@@ -391,22 +413,92 @@
 $   GOTO MODULE_NEXT
 $ ENDIF
 $!
+$! Top Of The Module Loop.
+$!
+$ MODULE_AGAIN:
+$!
+$! Tell The User What Module We Are Building.
+$!
+$ IF (MODULE_NAME1.NES."") 
+$ THEN
+$   IF STATE .EQS. "LIB"
+$   THEN
+$     WRITE SYS$OUTPUT "Compiling The ",MODULE_NAME1," Library Files. 
+(",BUILDALL,",",STATE,")"
+$   ELSE IF F$TYPE('APPS_MODULE') .NES. ""
+$     THEN
+$       WRITE SYS$OUTPUT "Compiling The ",MODULE_NAME1," Applications. 
+(",BUILDALL,",",STATE,")"
+$     ENDIF
+$   ENDIF
+$ ENDIF
+$!
+$!  Define A File Counter And Set It To "0".
+$!
+$ FILE_COUNTER = 0
+$ APPLICATION = ""
+$ APPLICATION_COUNTER = 0
+$!
 $! Top Of The File Loop.
 $!
 $ NEXT_FILE:
+$!
+$! Look in the LIB_MODULE is we're in state LIB
+$!
+$ IF STATE .EQS. "LIB"
+$ THEN
+$!
+$!   O.K, Extract The File Name From The File List.
+$!
+$   FILE_NAME = F$ELEMENT(FILE_COUNTER,",",'LIB_MODULE')
+$!
+$!   else
+$!
+$ ELSE
+$   FILE_NAME = ","
+$!
+$   IF F$TYPE('APPS_MODULE') .NES. ""
+$   THEN
 $!
-$! O.K, Extract The File Name From The File List.
+$!     Extract The File Name From The File List.
+$!     This part is a bit more complicated.
 $!
-$ FILE_NAME = F$ELEMENT(FILE_COUNTER,",",'LIB_MODULE')
+$     IF APPLICATION .EQS. ""
+$     THEN
+$       APPLICATION = F$ELEMENT(APPLICATION_COUNTER,";",'APPS_MODULE')
+$       APPLICATION_COUNTER = APPLICATION_COUNTER + 1
+$       APPLICATION_OBJECTS = F$ELEMENT(1,"/",APPLICATION)
+$       APPLICATION = F$ELEMENT(0,"/",APPLICATION)
+$       FILE_COUNTER = 0
+$     ENDIF
+$
+$!     WRITE SYS$OUTPUT "DEBUG: SHOW SYMBOL APPLICATION*"
+$!     SHOW SYMBOL APPLICATION*
 $!
+$     IF APPLICATION .NES. ";"
+$     THEN
+$       FILE_NAME = F$ELEMENT(FILE_COUNTER,",",APPLICATION_OBJECTS)
+$       IF FILE_NAME .EQS. ","
+$       THEN
+$         APPLICATION = ""
+$         GOTO NEXT_FILE
+$       ENDIF
+$     ENDIF
+$   ENDIF
+$ ENDIF
+$!
 $! Check To See If We Are At The End Of The File List.
 $!
 $ IF (FILE_NAME.EQS.",") 
 $ THEN 
 $!
-$!  We Are At The End Of The File List, Goto FILE_DONE.
+$!  We Are At The End Of The File List, Change State Or Goto FILE_DONE.
 $!
-$   GOTO FILE_DONE
+$   IF STATE .EQS. "LIB" .AND. BUILDALL .NES. "LIBRARY"
+$   THEN
+$     STATE = "APPS"
+$     GOTO MODULE_AGAIN
+$   ELSE
+$     GOTO FILE_DONE
+$   ENDIF
 $!
 $! End The File List Check.
 $!
@@ -458,7 +550,7 @@
 $!
 $ IF (MODULE_NAME.EQS."")
 $ THEN
-     WRITE SYS$OUTPUT "Compiling The ",FILE_NAME," File."
+$   WRITE SYS$OUTPUT "Compiling The ",FILE_NAME," File.  (",BUILDALL,",",STATE,")"
 $ ENDIF
 $ IF (MODULE_NAME.NES."")
 $ THEN 
@@ -490,14 +582,17 @@
 $     ENDIF
 $   ENDIF
 $ ENDIF
+$ IF STATE .EQS. "LIB"
+$ THEN 
 $!
-$! Add It To The Library.
+$!   Add It To The Library.
 $!
-$ LIBRARY/REPLACE 'LIB_NAME' 'OBJECT_FILE'
+$   LIBRARY/REPLACE 'LIB_NAME' 'OBJECT_FILE'
 $!
-$! Time To Clean Up The Object File.
+$!   Time To Clean Up The Object File.
 $!
-$ DELETE 'OBJECT_FILE';*
+$   DELETE 'OBJECT_FILE';*
+$ ENDIF
 $!
 $! Go Back And Do It Again.
 $!
@@ -507,6 +602,99 @@
 $!
 $ FILE_DONE:
 $!
+$! Time To Build Some Applications
+$!
+$ IF F$TYPE('APPS_MODULE') .NES. "" .AND. BUILDALL .NES. "LIBRARY"
+$ THEN
+$   APPLICATION_COUNTER = 0
+$ NEXT_APPLICATION:
+$   APPLICATION = F$ELEMENT(APPLICATION_COUNTER,";",'APPS_MODULE')
+$   IF APPLICATION .EQS. ";" THEN GOTO APPLICATION_DONE
+$
+$   APPLICATION_COUNTER = APPLICATION_COUNTER + 1
+$   APPLICATION_OBJECTS = F$ELEMENT(1,"/",APPLICATION)
+$   APPLICATION = F$ELEMENT(0,"/",APPLICATION)
+$
+$!   WRITE SYS$OUTPUT "DEBUG: SHOW SYMBOL APPLICATION*"
+$!   SHOW SYMBOL APPLICATION*
+$!
+$! Tell the user what happens
+$!
+$   WRITE SYS$OUTPUT " ",APPLICATION,".exe"
+$!
+$! Link The Program, Check To See If We Need To Link With RSAREF Or Not.
+$!
+$   IF (RSAREF.EQS."TRUE")
+$   THEN
+$!
+$!  Check To See If We Are To Link With A Specific TCP/IP Library.
+$!
+$     IF (TCPIP_LIB.NES."")
+$     THEN
+$!
+$!    Link With The RSAREF Library And A Specific TCP/IP Library.
+$!
+$       LINK/'DEBUGGER'/'TRACEBACK'/EXE='EXE_DIR''APPLICATION'.EXE -
+            'OBJ_DIR''APPLICATION_OBJECTS', -
+           'CRYPTO_LIB'/LIBRARY,'RSAREF_LIB'/LIBRARY, -
+           'TCPIP_LIB','OPT_FILE'/OPTION
+$!
+$!    Else...
+$!
+$     ELSE
+$!
+$!      Link With The RSAREF Library And NO TCP/IP Library.
+$!
+$       LINK/'DEBUGGER'/'TRACEBACK'/EXE='EXE_DIR''APPLICATION'.EXE -
+            'OBJ_DIR''APPLICATION_OBJECTS', -
+           'CRYPTO_LIB'/LIBRARY,'RSAREF_LIB'/LIBRARY, -
+           'OPT_FILE'/OPTION
+$!
+$!    End The TCP/IP Library Check.
+$!
+$     ENDIF
+$!
+$!   Else...
+$!
+$   ELSE
+$!
+$!    Don't Link With The RSAREF Routines.
+$!
+$!
+$!    Check To See If We Are To Link With A Specific TCP/IP Library.
+$!
+$     IF (TCPIP_LIB.NES."")
+$     THEN
+$!
+$!      Don't Link With The RSAREF Routines And TCP/IP Library.
+$!
+$       LINK/'DEBUGGER'/'TRACEBACK'/EXE='EXE_DIR''APPLICATION'.EXE -
+            'OBJ_DIR''APPLICATION_OBJECTS', -
+           'CRYPTO_LIB'/LIBRARY, -
+            'TCPIP_LIB','OPT_FILE'/OPTION
+$!
+$!    Else...
+$!
+$     ELSE
+$!
+$!      Don't Link With The RSAREF Routines And Link With A TCP/IP Library.
+$!
+$       LINK/'DEBUGGER'/'TRACEBACK'/EXE='EXE_DIR''APPLICATION'.EXE -
+            'OBJ_DIR''APPLICATION_OBJECTS',-
+           'CRYPTO_LIB'/LIBRARY, -
+            'OPT_FILE'/OPTION
+$!
+$!    End The TCP/IP Library Check.
+$!
+$     ENDIF
+$!
+$!   End The RSAREF Link Check.
+$!
+$   ENDIF
+$   GOTO NEXT_APPLICATION
+$  APPLICATION_DONE:
+$ ENDIF
+$!
 $! Go Back And Get The Next Module.
 $!
 $ GOTO MODULE_NEXT
@@ -653,17 +841,70 @@
 $!
 $! Check To See If P1 Is Blank.
 $!
-$ IF (P1.EQS."NORSAREF")
+$ IF (P1.EQS."ALL")
 $ THEN
+$!
+$!   P1 Is Blank, So Build Everything.
+$!
+$    BUILDALL = "TRUE"
+$!
+$! Else...
+$!
+$ ELSE
+$!
+$!  Else, Check To See If P1 Has A Valid Arguement.
+$!
+$   IF (P1.EQS."LIBRARY").OR.(P1.EQS."APPS")
+$   THEN
 $!
-$!   P1 Is NORSAREF, So Compile With The Regular RSA Libraries.
+$!    A Valid Arguement.
 $!
+$     BUILDALL = P1
+$!
+$!  Else...
+$!
+$   ELSE
+$!
+$!    Tell The User We Don't Know What They Want.
+$!
+$     WRITE SYS$OUTPUT ""
+$     WRITE SYS$OUTPUT "The Option ",P1," Is Invalid.  The Valid Options Are:"
+$     WRITE SYS$OUTPUT ""
+$     WRITE SYS$OUTPUT "    ALL      :  Just Build Everything."
+$     WRITE SYS$OUTPUT "    LIBRARY  :  To Compile Just The 
+[.xxx.EXE.SSL]LIBCRYPTO.OLB Library."
+$     WRITE SYS$OUTPUT "    APPS     :  To Compile Just The [.xxx.EXE.SSL]*.EXE 
+Programs."
+$     WRITE SYS$OUTPUT ""
+$     WRITE SYS$OUTPUT " Where 'xxx' Stands For:"
+$     WRITE SYS$OUTPUT ""
+$     WRITE SYS$OUTPUT "        AXP  :  Alpha Architecture."
+$     WRITE SYS$OUTPUT "        VAX  :  VAX Architecture."
+$     WRITE SYS$OUTPUT ""
+$!
+$!    Time To EXIT.
+$!
+$     EXIT
+$!
+$!  End The Valid Arguement Check.
+$!
+$   ENDIF
+$!
+$! End The P1 Check.
+$!
+$ ENDIF
+$!
+$! Check To See If P2 Is Blank.
+$!
+$ IF (P2.EQS."NORSAREF")
+$ THEN
+$!
+$!   P2 Is NORSAREF, So Compile With The Regular RSA Libraries.
+$!
 $    RSAREF = "FALSE"
 $ ELSE
 $!
 $!  Check To See If We Are To Use The RSAREF Library.
 $!
-$   IF (P1.EQS."RSAREF")
+$   IF (P2.EQS."RSAREF")
 $   THEN
 $!
 $!    Check To Make Sure We Have The RSAREF Source Code Directory.
@@ -697,7 +938,7 @@
 $!    They Entered An Invalid Option..
 $!
 $     WRITE SYS$OUTPUT ""
-$     WRITE SYS$OUTPUT "The Option ",P1," Is Invalid.  The Valid Options Are:"
+$     WRITE SYS$OUTPUT "The Option ",P2," Is Invalid.  The Valid Options Are:"
 $     WRITE SYS$OUTPUT ""
 $     WRITE SYS$OUTPUT "     RSAREF   :  Compile With The RSAREF Library."
 $     WRITE SYS$OUTPUT "     NORSAREF :  Compile With The Regular RSA Library."
@@ -711,16 +952,16 @@
 $!
 $   ENDIF
 $!
-$! End The P1 Check.
+$! End The P2 Check.
 $!
 $ ENDIF
 $!
-$! Check To See If P2 Is Blank.
+$! Check To See If P3 Is Blank.
 $!
-$ IF (P2.EQS."NODEBUG")
+$ IF (P3.EQS."NODEBUG")
 $ THEN
 $!
-$!   P2 Is NODEBUG, So Compile Without The Debugger Information.
+$!   P3 Is NODEBUG, So Compile Without The Debugger Information.
 $!
 $    DEBUGGER = "NODEBUG"
 $    TRACEBACK = "NOTRACEBACK" 
@@ -733,7 +974,7 @@
 $!
 $!  Check To See If We Are To Compile With Debugger Information.
 $!
-$   IF (P2.EQS."DEBUG")
+$   IF (P3.EQS."DEBUG")
 $   THEN
 $!
 $!    Compile With Debugger Information.
@@ -750,7 +991,7 @@
 $!    They Entered An Invalid Option..
 $!
 $     WRITE SYS$OUTPUT ""
-$     WRITE SYS$OUTPUT "The Option ",P2," Is Invalid.  The Valid Options Are:"
+$     WRITE SYS$OUTPUT "The Option ",P3," Is Invalid.  The Valid Options Are:"
 $     WRITE SYS$OUTPUT ""
 $     WRITE SYS$OUTPUT "     DEBUG   :  Compile With The Debugger Information."
 $     WRITE SYS$OUTPUT "     NODEBUG :  Compile Without The Debugger Information."
@@ -764,7 +1005,7 @@
 $!
 $   ENDIF
 $!
-$! End The P2 Check.
+$! End The P3 Check.
 $!
 $ ENDIF
 $!
@@ -774,9 +1015,9 @@
 $!              [EMAIL PROTECTED]
 $!
 $!
-$! Check To See If We Have A Option For P5.
+$! Check To See If We Have A Option For P6.
 $!
-$ IF (P5.EQS."")
+$ IF (P6.EQS."")
 $ THEN
 $!
 $!  Get The Version Of VMS We Are Using.
@@ -798,13 +1039,13 @@
 $!
 $   ENDIF
 $!
-$! End The P5 Check.
+$! End The P6 Check.
 $!
 $ ENDIF
 $!
-$! Check To See If P3 Is Blank.
+$! Check To See If P4 Is Blank.
 $!
-$ IF (P3.EQS."")
+$ IF (P4.EQS."")
 $ THEN
 $!
 $!  O.K., The User Didn't Specify A Compiler, Let's Try To
@@ -817,7 +1058,7 @@
 $!
 $!    Looks Like GNUC, Set To Use GNUC.
 $!
-$     P3 = "GNUC"
+$     P4 = "GNUC"
 $!
 $!  Else...
 $!
@@ -830,7 +1071,7 @@
 $!
 $!      Looks Like DECC, Set To Use DECC.
 $!
-$       P3 = "DECC"
+$       P4 = "DECC"
 $!
 $!    Else...
 $!
@@ -838,7 +1079,7 @@
 $!
 $!      Looks Like VAXC, Set To Use VAXC.
 $!
-$       P3 = "VAXC"
+$       P4 = "VAXC"
 $!
 $!    End The VAXC Compiler Check.
 $!
@@ -852,9 +1093,9 @@
 $!
 $ ENDIF
 $!
-$! Check To See If We Have A Option For P4.
+$! Check To See If We Have A Option For P5.
 $!
-$ IF (P4.EQS."")
+$ IF (P5.EQS."")
 $ THEN
 $!
 $!  Find out what socket library we have available
@@ -864,7 +1105,7 @@
 $!
 $!    We have SOCKETSHR, and it is my opinion that it's the best to use.
 $!
-$     P4 = "SOCKETSHR"
+$     P5 = "SOCKETSHR"
 $!
 $!    Tell the user
 $!
@@ -884,7 +1125,7 @@
 $!
 $!     Last resort: a UCX or UCX-compatible library
 $!
-$      P4 = "UCX"
+$      P5 = "UCX"
 $!
 $!      Tell the user
 $!
@@ -898,22 +1139,46 @@
 $!
 $! Set Up Initial CC Definitions, Possibly With User Ones
 $!
-$ CCDEFS = "VMS=1,TCPIP_TYPE_''P4'"
+$ CCDEFS = "VMS=1,TCPIP_TYPE_''P5'"
+$ IF F$TRNLNM("OPENSSL_NO_ASM") THEN CCDEFS = CCDEFS + ",NO_ASM"
+$ IF F$TRNLNM("OPENSSL_NO_RSA") THEN CCDEFS = CCDEFS + ",NO_RSA"
+$ IF F$TRNLNM("OPENSSL_NO_DSA") THEN CCDEFS = CCDEFS + ",NO_DSA"
+$ IF F$TRNLNM("OPENSSL_NO_DH") THEN CCDEFS = CCDEFS + ",NO_DH"
+$ IF F$TRNLNM("OPENSSL_NO_MD2") THEN CCDEFS = CCDEFS + ",NO_MD2"
+$ IF F$TRNLNM("OPENSSL_NO_MD5") THEN CCDEFS = CCDEFS + ",NO_MD5"
+$ IF F$TRNLNM("OPENSSL_NO_RIPEMD") THEN CCDEFS = CCDEFS + ",NO_RIPEMD"
+$ IF F$TRNLNM("OPENSSL_NO_SHA") THEN CCDEFS = CCDEFS + ",NO_SHA"
+$ IF F$TRNLNM("OPENSSL_NO_SHA0") THEN CCDEFS = CCDEFS + ",NO_SHA0"
+$ IF F$TRNLNM("OPENSSL_NO_SHA1") THEN CCDEFS = CCDEFS + ",NO_SHA1"
+$ IF F$TRNLNM("OPENSSL_NO_DES")
+$ THEN
+$   CCDEFS = CCDEFS + ",NO_DES,NO_MDC2"
+$ ELSE
+$   IF F$TRNLNM("OPENSSL_NO_MDC2") THEN CCDEFS = CCDEFS + ",NO_MDC2"
+$ ENDIF
+$ IF F$TRNLNM("OPENSSL_NO_RC2") THEN CCDEFS = CCDEFS + ",NO_RC2"
+$ IF F$TRNLNM("OPENSSL_NO_RC4") THEN CCDEFS = CCDEFS + ",NO_RC4"
+$ IF F$TRNLNM("OPENSSL_NO_RC5") THEN CCDEFS = CCDEFS + ",NO_RC5"
+$ IF F$TRNLNM("OPENSSL_NO_IDEA") THEN CCDEFS = CCDEFS + ",NO_IDEA"
+$ IF F$TRNLNM("OPENSSL_NO_BF") THEN CCDEFS = CCDEFS + ",NO_BF"
+$ IF F$TRNLNM("OPENSSL_NO_CAST") THEN CCDEFS = CCDEFS + ",NO_CAST"
+$ IF F$TRNLNM("OPENSSL_NO_HMAC") THEN CCDEFS = CCDEFS + ",NO_HMAC"
+$ IF F$TRNLNM("OPENSSL_NO_SSL2") THEN CCDEFS = CCDEFS + ",NO_SSL2"
 $ IF F$TYPE(USER_CCDEFS) .NES. "" THEN CCDEFS = CCDEFS + "," + USER_CCDEFS
 $ CCEXTRAFLAGS = ""
 $ IF F$TYPE(USER_CCFLAGS) .NES. "" THEN CCEXTRAFLAGS = USER_CCFLAGS
-$ CCDISABLEWARNINGS = ""
+$ CCDISABLEWARNINGS = "LONGLONGTYPE,LONGLONGSUFX"
 $ IF F$TYPE(USER_CCDISABLEWARNINGS) .NES. "" THEN -
-       CCDISABLEWARNINGS = USER_CCDISABLEWARNINGS
+       CCDISABLEWARNINGS = CCDISABLEWARNINGS + "," + USER_CCDISABLEWARNINGS
 $!
 $!  Check To See If The User Entered A Valid Paramter.
 $!
-$ IF (P3.EQS."VAXC").OR.(P3.EQS."DECC").OR.(P3.EQS."GNUC")
+$ IF (P4.EQS."VAXC").OR.(P4.EQS."DECC").OR.(P4.EQS."GNUC")
 $ THEN
 $!
 $!    Check To See If The User Wanted DECC.
 $!
-$   IF (P3.EQS."DECC")
+$   IF (P4.EQS."DECC")
 $   THEN
 $!
 $!    Looks Like DECC, Set To Use DECC.
@@ -942,7 +1207,7 @@
 $!
 $!  Check To See If We Are To Use VAXC.
 $!
-$   IF (P3.EQS."VAXC")
+$   IF (P4.EQS."VAXC")
 $   THEN
 $!
 $!    Looks Like VAXC, Set To Use VAXC.
@@ -980,7 +1245,7 @@
 $!
 $!  Check To See If We Are To Use GNU C.
 $!
-$   IF (P3.EQS."GNUC")
+$   IF (P4.EQS."GNUC")
 $   THEN
 $!
 $!    Looks Like GNUC, Set To Use GNUC.
@@ -1051,7 +1316,7 @@
 $   ENDIF
 $   CC3 = CC + "/DEFINE=(" + CCDEFS + ISSEVEN + ")" + CCDISABLEWARNINGS
 $   CC = CC + "/DEFINE=(" + CCDEFS + ")" + CCDISABLEWARNINGS
-$   IF ARCH .EQS. "VAX" .AND. COMPILER .EQS. "DECC" .AND. P2 .NES. "DEBUG"
+$   IF ARCH .EQS. "VAX" .AND. COMPILER .EQS. "DECC" .AND. P3 .NES. "DEBUG"
 $   THEN
 $     CC5 = CC + "/OPTIMIZE=NODISJOINT"
 $   ELSE
@@ -1070,7 +1335,7 @@
 $!  Tell The User We Don't Know What They Want.
 $!
 $   WRITE SYS$OUTPUT ""
-$   WRITE SYS$OUTPUT "The Option ",P3," Is Invalid.  The Valid Options Are:"
+$   WRITE SYS$OUTPUT "The Option ",P4," Is Invalid.  The Valid Options Are:"
 $   WRITE SYS$OUTPUT ""
 $   WRITE SYS$OUTPUT "    VAXC  :  To Compile With VAX C."
 $   WRITE SYS$OUTPUT "    DECC  :  To Compile With DEC C."
@@ -1096,12 +1361,12 @@
 $!
 $! Time to check the contents, and to make sure we get the correct library.
 $!
-$ IF P4.EQS."SOCKETSHR" .OR. P4.EQS."MULTINET" .OR. P4.EQS."UCX"
+$ IF P5.EQS."SOCKETSHR" .OR. P5.EQS."MULTINET" .OR. P5.EQS."UCX"
 $ THEN
 $!
 $!  Check to see if SOCKETSHR was chosen
 $!
-$   IF P4.EQS."SOCKETSHR"
+$   IF P5.EQS."SOCKETSHR"
 $   THEN
 $!
 $!    Set the library to use SOCKETSHR
@@ -1114,12 +1379,12 @@
 $!
 $!  Check to see if MULTINET was chosen
 $!
-$   IF P4.EQS."MULTINET"
+$   IF P5.EQS."MULTINET"
 $   THEN
 $!
 $!    Set the library to use UCX emulation.
 $!
-$     P4 = "UCX"
+$     P5 = "UCX"
 $!
 $!    Done with MULTINET
 $!
@@ -1127,7 +1392,7 @@
 $!
 $!  Check to see if UCX was chosen
 $!
-$   IF P4.EQS."UCX"
+$   IF P5.EQS."UCX"
 $   THEN
 $!
 $!    Set the library to use UCX.
@@ -1156,7 +1421,7 @@
 $!  Tell The User We Don't Know What They Want.
 $!
 $   WRITE SYS$OUTPUT ""
-$   WRITE SYS$OUTPUT "The Option ",P4," Is Invalid.  The Valid Options Are:"
+$   WRITE SYS$OUTPUT "The Option ",P5," Is Invalid.  The Valid Options Are:"
 $   WRITE SYS$OUTPUT ""
 $   WRITE SYS$OUTPUT "    SOCKETSHR  :  To link with SOCKETSHR TCP/IP library."
 $   WRITE SYS$OUTPUT "    UCX        :  To link with UCX TCP/IP library."
@@ -1173,9 +1438,9 @@
 $! Check if the user wanted to compile just a subset of all the encryption
 $! methods.
 $!
-$ IF P6 .NES. ""
+$ IF P7 .NES. ""
 $ THEN
-$   ENCRYPT_TYPES = P6
+$   ENCRYPT_TYPES = P7
 $ ENDIF
 $!
 $!  Time To RETURN...
Index: opensa/openssl/crypto/crypto.h
diff -u opensa/openssl/crypto/crypto.h:1.1 opensa/openssl/crypto/crypto.h:1.2
--- opensa/openssl/crypto/crypto.h:1.1  Tue Jan 25 23:20:27 2000
+++ opensa/openssl/crypto/crypto.h      Thu Mar  2 21:11:49 2000
@@ -63,17 +63,25 @@
 extern "C" {
 #endif
 
+#include <stdlib.h>
+
 #ifndef NO_FP_API
 #include <stdio.h>
 #endif
 
 #include <openssl/stack.h>
+#include <openssl/safestack.h>
 #include <openssl/opensslv.h>
 
 #ifdef CHARSET_EBCDIC
 #include <openssl/ebcdic.h>
 #endif
 
+#if defined(VMS) || defined(__VMS)
+#include "vms_idhacks.h"
+#endif
+
+
 /* Backward compatibility to SSLeay */
 /* This is more to be used to check the correct DLL is being used
  * in the MS world. */
@@ -111,7 +119,9 @@
 #define        CRYPTO_LOCK_GETSERVBYNAME       21
 #define        CRYPTO_LOCK_READDIR             22
 #define        CRYPTO_LOCK_RSA_BLINDING        23
-#define        CRYPTO_NUM_LOCKS                24
+#define        CRYPTO_LOCK_DH                  24
+#define        CRYPTO_LOCK_MALLOC2             25
+#define        CRYPTO_NUM_LOCKS                26
 
 #define CRYPTO_LOCK            1
 #define CRYPTO_UNLOCK          2
@@ -147,14 +157,16 @@
 #define CRYPTO_MEM_CHECK_ENABLE        0x2     /* a bit */
 #define CRYPTO_MEM_CHECK_DISABLE 0x3   /* an enume */
 
-/*
-typedef struct crypto_mem_st
-       {
-       char *(*malloc_func)();
-       char *(*realloc_func)();
-       void (*free_func)();
-       } CRYPTO_MEM_FUNC;
-*/
+/* The following are bit values to turn on or off options connected to the
+ * malloc checking functionality */
+
+/* Adds time to the memory checking information */
+#define V_CRYPTO_MDEBUG_TIME   0x1 /* a bit */
+/* Adds thread number to the memory checking information */
+#define V_CRYPTO_MDEBUG_THREAD 0x2 /* a bit */
+
+#define V_CRYPTO_MDEBUG_ALL (V_CRYPTO_MDEBUG_TIME | V_CRYPTO_MDEBUG_THREAD)
+
 
 /* predec of the BIO type */
 typedef struct bio_st BIO_dummy;
@@ -165,24 +177,30 @@
        int dummy; /* gcc is screwing up this data structure :-( */
        } CRYPTO_EX_DATA;
 
+/* Called when a new object is created */
+typedef int CRYPTO_EX_new(void *parent, void *ptr, CRYPTO_EX_DATA *ad,
+                                       int idx, long argl, void *argp);
+/* Called when an object is free()ed */
+typedef void CRYPTO_EX_free(void *parent, void *ptr, CRYPTO_EX_DATA *ad,
+                                       int idx, long argl, void *argp);
+/* Called when we need to dup an object */
+typedef int CRYPTO_EX_dup(CRYPTO_EX_DATA *to, CRYPTO_EX_DATA *from, void *from_d, 
+                                       int idx, long argl, void *argp);
+
 /* This stuff is basically class callback functions
- * The current classes are SSL_CTX, SSL, SSL_SESION, and a few more */
+ * The current classes are SSL_CTX, SSL, SSL_SESSION, and a few more */
+
 typedef struct crypto_ex_data_func_st
        {
        long argl;      /* Arbitary long */
-       char *argp;     /* Arbitary char * */
-       /* Called when a new object is created */
-       int (*new_func)(/*char *obj,
-                       char *item,int index,long argl,char *argp*/);
-       /* Called when this object is free()ed */
-       void (*free_func)(/*char *obj,
-                       char *item,int index,long argl,char *argp*/);
-
-       /* Called when we need to dup this one */
-       int (*dup_func)(/*char *obj_to,char *obj_from,
-                       char **new,int index,long argl,char *argp*/);
+       void *argp;     /* Arbitary void * */
+       CRYPTO_EX_new *new_func;
+       CRYPTO_EX_free *free_func;
+       CRYPTO_EX_dup *dup_func;
        } CRYPTO_EX_DATA_FUNCS;
 
+DECLARE_STACK_OF(CRYPTO_EX_DATA_FUNCS)
+
 /* Per class, we have a STACK of CRYPTO_EX_DATA_FUNCS for each CRYPTO_EX_DATA
  * entry.
  */
@@ -193,64 +211,55 @@
 #define CRYPTO_EX_INDEX_SSL_SESSION    3
 #define CRYPTO_EX_INDEX_X509_STORE     4
 #define CRYPTO_EX_INDEX_X509_STORE_CTX 5
+
 
-/* Use this for win32 DLL's */
+/* This is the default callbacks, but we can have others as well:
+ * this is needed in Win32 where the application malloc and the
+ * library malloc may not be the same.
+ */
 #define CRYPTO_malloc_init()   CRYPTO_set_mem_functions(\
-       (char *(*)())malloc,\
-       (char *(*)())realloc,\
-       (void (*)())free)
-
-#ifdef CRYPTO_MDEBUG_ALL
-# ifndef CRYPTO_MDEBUG_TIME
-#  define CRYPTO_MDEBUG_TIME
-# endif
-# ifndef CRYPTO_MDEBUG_THREAD
-#  define CRYPTO_MDEBUG_THREAD
-# endif
-#endif
+       malloc, realloc, free)
 
-#if defined CRYPTO_MDEBUG_TIME || defined CRYPTO_MDEBUG_THREAD
+#if defined CRYPTO_MDEBUG_ALL || defined CRYPTO_MDEBUG_TIME || defined 
+CRYPTO_MDEBUG_THREAD
 # ifndef CRYPTO_MDEBUG /* avoid duplicate #define */
 #  define CRYPTO_MDEBUG
 # endif
 #endif
 
-#ifdef CRYPTO_MDEBUG
+/* Set standard debugging functions (not done by default
+ * unless CRYPTO_MDEBUG is defined) */
+#define CRYPTO_malloc_debug_init()     do {\
+       CRYPTO_set_mem_debug_functions(\
+               (void (*)())CRYPTO_dbg_malloc,\
+               (void (*)())CRYPTO_dbg_realloc,\
+               (void (*)())CRYPTO_dbg_free,\
+               (void (*)())CRYPTO_dbg_set_options,\
+               (long (*)())CRYPTO_dbg_get_options);\
+       } while(0)
+
+int CRYPTO_mem_ctrl(int mode);
+int CRYPTO_is_mem_check_on(void);
+
+/* for applications */
 #define MemCheck_start() CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON)
 #define MemCheck_stop()        CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_OFF)
+
+/* for library-internal use */
 #define MemCheck_on()  CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ENABLE)
 #define MemCheck_off() CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_DISABLE)
-#define Malloc(num)    CRYPTO_dbg_malloc((int)num,__FILE__,__LINE__)
+#define is_MemCheck_on() CRYPTO_is_mem_check_on()
+
+#define Malloc(num)    CRYPTO_malloc((int)num,__FILE__,__LINE__)
 #define Realloc(addr,num) \
-       CRYPTO_dbg_realloc((char *)addr,(int)num,__FILE__,__LINE__)
+       CRYPTO_realloc((char *)addr,(int)num,__FILE__,__LINE__)
 #define Remalloc(addr,num) \
-       CRYPTO_dbg_remalloc((char **)addr,(int)num,__FILE__,__LINE__)
-#define FreeFunc       CRYPTO_dbg_free
-#define Free(addr)     CRYPTO_dbg_free(addr)
-#define Malloc_locked(num) CRYPTO_malloc_locked((int)num)
-#define Free_locked(addr) CRYPTO_free_locked(addr)
-#else
-#define MemCheck_start()
-#define MemCheck_stop()
-#define MemCheck_on()
-#define MemCheck_off()
-#define Remalloc       CRYPTO_remalloc
-#if defined(WIN32) || defined(MFUNC)
-#define Malloc         CRYPTO_malloc
-#define Realloc(a,n)   CRYPTO_realloc(a,(n))
+       CRYPTO_remalloc((char **)addr,(int)num,__FILE__,__LINE__)
 #define FreeFunc       CRYPTO_free
 #define Free(addr)     CRYPTO_free(addr)
-#define Malloc_locked  CRYPTO_malloc_locked
+
+#define Malloc_locked(num) CRYPTO_malloc_locked((int)num,__FILE__,__LINE__)
 #define Free_locked(addr) CRYPTO_free_locked(addr)
-#else
-#define Malloc         malloc
-#define Realloc                realloc
-#define FreeFunc       free
-#define Free(addr)     free(addr)
-#define Malloc_locked  malloc
-#define Free_locked(addr) free(addr)
-#endif /* WIN32 || MFUNC */
-#endif /* MDEBUG */
+
 
 /* Case insensiteve linking causes problems.... */
 #if defined(WIN16) || defined(VMS)
@@ -261,15 +270,15 @@
 const char *SSLeay_version(int type);
 unsigned long SSLeay(void);
 
-int CRYPTO_get_ex_new_index(int idx,STACK **sk,long argl,char *argp,
-       int (*new_func)(),int (*dup_func)(),void (*free_func)());
-int CRYPTO_set_ex_data(CRYPTO_EX_DATA *ad,int idx,char *val);
-char *CRYPTO_get_ex_data(CRYPTO_EX_DATA *ad,int idx);
-int CRYPTO_dup_ex_data(STACK *meth,CRYPTO_EX_DATA *from,CRYPTO_EX_DATA *to);
-void CRYPTO_free_ex_data(STACK *meth,char *obj,CRYPTO_EX_DATA *ad);
-void CRYPTO_new_ex_data(STACK *meth, char *obj, CRYPTO_EX_DATA *ad);
+int CRYPTO_get_ex_new_index(int idx, STACK_OF(CRYPTO_EX_DATA_FUNCS) **skp, long argl, 
+void *argp,
+            CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, CRYPTO_EX_free 
+*free_func);
+int CRYPTO_set_ex_data(CRYPTO_EX_DATA *ad, int idx, void *val);
+void *CRYPTO_get_ex_data(CRYPTO_EX_DATA *ad,int idx);
+int CRYPTO_dup_ex_data(STACK_OF(CRYPTO_EX_DATA_FUNCS) *meth, CRYPTO_EX_DATA *to,
+            CRYPTO_EX_DATA *from);
+void CRYPTO_free_ex_data(STACK_OF(CRYPTO_EX_DATA_FUNCS) *meth, void *obj, 
+CRYPTO_EX_DATA *ad);
+void CRYPTO_new_ex_data(STACK_OF(CRYPTO_EX_DATA_FUNCS) *meth, void *obj, 
+CRYPTO_EX_DATA *ad);
 
-int CRYPTO_mem_ctrl(int mode);
 int CRYPTO_get_new_lockid(char *name);
 
 int CRYPTO_num_locks(void); /* return CRYPTO_NUM_LOCKS (shared libs!) */
@@ -289,22 +298,51 @@
 int CRYPTO_add_lock(int *pointer,int amount,int type, const char *file,
                    int line);
 
-void CRYPTO_set_mem_functions(char *(*m)(),char *(*r)(), void (*free_func)());
-void CRYPTO_get_mem_functions(char *(**m)(),char *(**r)(), void (**f)());
-void CRYPTO_set_locked_mem_functions(char *(*m)(), void (*free_func)());
-void CRYPTO_get_locked_mem_functions(char *(**m)(), void (**f)());
+/* CRYPTO_set_mem_functions includes CRYPTO_set_locked_mem_functions --
+ * call the latter last if you need different functions */
+int CRYPTO_set_mem_functions(void *(*m)(size_t),void *(*r)(void *,size_t), void 
+(*f)(void *));
+int CRYPTO_set_locked_mem_functions(void *(*m)(size_t), void (*free_func)(void *));
+int CRYPTO_set_mem_debug_functions(void (*m)(),void (*r)(),void (*f)(),void 
+(*so)(),long (*go)());
+void CRYPTO_get_mem_functions(void *(**m)(size_t),void *(**r)(void *, size_t), void 
+(**f)(void *));
+void CRYPTO_get_locked_mem_functions(void *(**m)(size_t), void (**f)(void *));
+void CRYPTO_get_mem_debug_functions(void (**m)(),void (**r)(),void (**f)(),void 
+(**so)(),long (**go)());
 
-void *CRYPTO_malloc_locked(int num);
+void *CRYPTO_malloc_locked(int num, const char *file, int line);
 void CRYPTO_free_locked(void *);
-void *CRYPTO_malloc(int num);
+void *CRYPTO_malloc(int num, const char *file, int line);
 void CRYPTO_free(void *);
-void *CRYPTO_realloc(void *addr,int num);
-void *CRYPTO_remalloc(void *addr,int num);
+void *CRYPTO_realloc(void *addr,int num, const char *file, int line);
+void *CRYPTO_remalloc(void *addr,int num, const char *file, int line);
+
+void CRYPTO_set_mem_debug_options(long bits);
+long CRYPTO_get_mem_debug_options(void);
+
+#define CRYPTO_push_info(info) \
+        CRYPTO_push_info_(info, __FILE__, __LINE__);
+int CRYPTO_push_info_(const char *info, const char *file, int line);
+int CRYPTO_pop_info(void);
+int CRYPTO_remove_all_info(void);
+
+/* The last argument has the following significance:
+ *
+ * 0:  called before the actual memory allocation has taken place
+ * 1:  called after the actual memory allocation has taken place
+ */
+void CRYPTO_dbg_malloc(void *addr,int num,const char *file,int line,int before_p);
+void CRYPTO_dbg_realloc(void *addr1,void *addr2,int num,const char *file,int line,int 
+before_p);
+void CRYPTO_dbg_free(void *addr,int before_p);
+
+/* Tell the debugging code about options.  By default, the following values
+ * apply:
+ *
+ * 0:  Clear all options.
+ * 1:  Set the "Show Time" option.
+ * 2:  Set the "Show Thread Number" option.
+ * 3:  1 + 2
+ */
+void CRYPTO_dbg_set_options(long bits);
+long CRYPTO_dbg_get_options(void);
 
-void *CRYPTO_dbg_malloc(int num,const char *file,int line);
-void *CRYPTO_dbg_realloc(void *addr,int num,const char *file,int line);
-void CRYPTO_dbg_free(void *);
-void *CRYPTO_dbg_remalloc(void *addr,int num,const char *file,int line);
 #ifndef NO_FP_API
 void CRYPTO_mem_leaks_fp(FILE *);
 #endif
@@ -312,7 +350,7 @@
 /* unsigned long order, char *file, int line, int num_bytes, char *addr */
 void CRYPTO_mem_leaks_cb(void (*cb)());
 
-void ERR_load_CRYPTO_strings(void );
+void ERR_load_CRYPTO_strings(void);
 
 /* BEGIN ERROR CODES */
 /* The following lines are auto generated by the script mkerr.pl. Any changes
Index: opensa/openssl/crypto/ebcdic.h
diff -u opensa/openssl/crypto/ebcdic.h:1.1 opensa/openssl/crypto/ebcdic.h:1.2
--- opensa/openssl/crypto/ebcdic.h:1.1  Tue Jan 25 23:20:27 2000
+++ opensa/openssl/crypto/ebcdic.h      Thu Mar  2 21:11:49 2000
@@ -1,17 +1,19 @@
+/* crypto/ebcdic.h */
+
 #ifndef HEADER_EBCDIC_H
 #define HEADER_EBCDIC_H
 
 #include <sys/types.h>
 
 /* Avoid name clashes with other applications */
-#define os_toascii   _eay2000_os_toascii
-#define os_toebcdic  _eay2000_os_toebcdic
-#define ebcdic2ascii _eay2000_ebcdic2ascii
-#define ascii2ebcdic _eay2000_ascii2ebcdic
+#define os_toascii   _openssl_os_toascii
+#define os_toebcdic  _openssl_os_toebcdic
+#define ebcdic2ascii _openssl_ebcdic2ascii
+#define ascii2ebcdic _openssl_ascii2ebcdic
 
 extern const unsigned char os_toascii[256];
 extern const unsigned char os_toebcdic[256];
-void ebcdic2ascii(unsigned char *dest, const unsigned char *srce, size_t count);
-void ascii2ebcdic(unsigned char *dest, const unsigned char *srce, size_t count);
+void *ebcdic2ascii(void *dest, const void *srce, size_t count);
+void *ascii2ebcdic(void *dest, const void *srce, size_t count);
 
 #endif
Index: opensa/openssl/crypto/ex_data.c
diff -u opensa/openssl/crypto/ex_data.c:1.1 opensa/openssl/crypto/ex_data.c:1.2
--- opensa/openssl/crypto/ex_data.c:1.1 Tue Jan 25 23:20:27 2000
+++ opensa/openssl/crypto/ex_data.c     Thu Mar  2 21:11:49 2000
@@ -63,15 +63,15 @@
 #include <openssl/lhash.h>
 #include "cryptlib.h"
 
-int CRYPTO_get_ex_new_index(int idx, STACK **skp, long argl, char *argp,
-            int (*new_func)(), int (*dup_func)(), void (*free_func)())
+int CRYPTO_get_ex_new_index(int idx, STACK_OF(CRYPTO_EX_DATA_FUNCS) **skp, long argl, 
+void *argp,
+            CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, CRYPTO_EX_free 
+*free_func)
        {
        int ret= -1;
        CRYPTO_EX_DATA_FUNCS *a;
 
        MemCheck_off();
        if (*skp == NULL)
-               *skp=sk_new_null();
+               *skp=sk_CRYPTO_EX_DATA_FUNCS_new_null();
        if (*skp == NULL)
                {
                CRYPTOerr(CRYPTO_F_CRYPTO_GET_EX_NEW_INDEX,ERR_R_MALLOC_FAILURE);
@@ -88,23 +88,23 @@
        a->new_func=new_func;
        a->dup_func=dup_func;
        a->free_func=free_func;
-       while (sk_num(*skp) <= idx)
+       while (sk_CRYPTO_EX_DATA_FUNCS_num(*skp) <= idx)
                {
-               if (!sk_push(*skp,NULL))
+               if (!sk_CRYPTO_EX_DATA_FUNCS_push(*skp,NULL))
                        {
                        
CRYPTOerr(CRYPTO_F_CRYPTO_GET_EX_NEW_INDEX,ERR_R_MALLOC_FAILURE);
                        Free(a);
                        goto err;
                        }
                }
-       sk_set(*skp,idx, (char *)a);
+       sk_CRYPTO_EX_DATA_FUNCS_set(*skp,idx, a);
        ret=idx;
 err:
        MemCheck_on();
        return(idx);
        }
 
-int CRYPTO_set_ex_data(CRYPTO_EX_DATA *ad, int idx, char *val)
+int CRYPTO_set_ex_data(CRYPTO_EX_DATA *ad, int idx, void *val)
        {
        int i;
 
@@ -131,7 +131,7 @@
        return(1);
        }
 
-char *CRYPTO_get_ex_data(CRYPTO_EX_DATA *ad, int idx)
+void *CRYPTO_get_ex_data(CRYPTO_EX_DATA *ad, int idx)
        {
        if (ad->sk == NULL)
                return(0);
@@ -145,7 +145,7 @@
  * being duplicated, a pointer to the
  * 'new' object to be inserted, the index, and the argi/argp
  */
-int CRYPTO_dup_ex_data(STACK *meth, CRYPTO_EX_DATA *to,
+int CRYPTO_dup_ex_data(STACK_OF(CRYPTO_EX_DATA_FUNCS) *meth, CRYPTO_EX_DATA *to,
             CRYPTO_EX_DATA *from)
        {
        int i,j,m,r;
@@ -154,14 +154,14 @@
 
        if (meth == NULL) return(1);
        if (from->sk == NULL) return(1);
-       m=sk_num(meth);
+       m=sk_CRYPTO_EX_DATA_FUNCS_num(meth);
        j=sk_num(from->sk);
        for (i=0; i<j; i++)
                {
                from_d=CRYPTO_get_ex_data(from,i);
                if (i < m)
                        {
-                       mm=(CRYPTO_EX_DATA_FUNCS *)sk_value(meth,i);
+                       mm=sk_CRYPTO_EX_DATA_FUNCS_value(meth,i);
                        if (mm->dup_func != NULL)
                                r=mm->dup_func(to,from,(char **)&from_d,i,
                                        mm->argl,mm->argp);
@@ -172,18 +172,18 @@
        }
 
 /* Call each free callback */
-void CRYPTO_free_ex_data(STACK *meth, char *obj, CRYPTO_EX_DATA *ad)
+void CRYPTO_free_ex_data(STACK_OF(CRYPTO_EX_DATA_FUNCS) *meth, void *obj, 
+CRYPTO_EX_DATA *ad)
        {
        CRYPTO_EX_DATA_FUNCS *m;
-       char *ptr;
+       void *ptr;
        int i,max;
 
        if (meth != NULL)
                {
-               max=sk_num(meth);
+               max=sk_CRYPTO_EX_DATA_FUNCS_num(meth);
                for (i=0; i<max; i++)
                        {
-                       m=(CRYPTO_EX_DATA_FUNCS *)sk_value(meth,i);
+                       m=sk_CRYPTO_EX_DATA_FUNCS_value(meth,i);
                        if ((m != NULL) && (m->free_func != NULL))
                                {
                                ptr=CRYPTO_get_ex_data(ad,i);
@@ -198,19 +198,19 @@
                }
        }
 
-void CRYPTO_new_ex_data(STACK *meth, char *obj, CRYPTO_EX_DATA *ad)
+void CRYPTO_new_ex_data(STACK_OF(CRYPTO_EX_DATA_FUNCS) *meth, void *obj, 
+CRYPTO_EX_DATA *ad)
        {
        CRYPTO_EX_DATA_FUNCS *m;
-       char *ptr;
+       void *ptr;
        int i,max;
 
        ad->sk=NULL;
        if (meth != NULL)
                {
-               max=sk_num(meth);
+               max=sk_CRYPTO_EX_DATA_FUNCS_num(meth);
                for (i=0; i<max; i++)
                        {
-                       m=(CRYPTO_EX_DATA_FUNCS *)sk_value(meth,i);
+                       m=sk_CRYPTO_EX_DATA_FUNCS_value(meth,i);
                        if ((m != NULL) && (m->new_func != NULL))
                                {
                                ptr=CRYPTO_get_ex_data(ad,i);
@@ -220,4 +220,4 @@
                }
        }
 
-
+IMPLEMENT_STACK_OF(CRYPTO_EX_DATA_FUNCS)
Index: opensa/openssl/crypto/install.com
diff -u opensa/openssl/crypto/install.com:1.1 opensa/openssl/crypto/install.com:1.2
--- opensa/openssl/crypto/install.com:1.1       Tue Jan 25 23:20:27 2000
+++ opensa/openssl/crypto/install.com   Thu Mar  2 21:11:49 2000
@@ -90,6 +90,7 @@
 $      ELSE
 $        COPY [.'D']'tmp' WRK_SSLINCLUDE: /LOG
 $      ENDIF
+$      SET FILE/PROT=WORLD:RE WRK_SSLINCLUDE:'tmp'
 $      GOTO LOOP_SDIRS
 $ LOOP_SDIRS_END:
 $
Index: opensa/openssl/crypto/makefile.ssl
diff -u opensa/openssl/crypto/makefile.ssl:1.1 opensa/openssl/crypto/makefile.ssl:1.2
--- opensa/openssl/crypto/makefile.ssl:1.1      Tue Jan 25 23:20:27 2000
+++ opensa/openssl/crypto/makefile.ssl  Thu Mar  2 21:11:49 2000
@@ -34,8 +34,8 @@
 GENERAL=Makefile README crypto-lib.com install.com
 
 LIB= $(TOP)/libcrypto.a
-LIBSRC=        cryptlib.c mem.c cversion.c ex_data.c tmdiff.c cpt_err.c
-LIBOBJ= cryptlib.o mem.o cversion.o ex_data.o tmdiff.o cpt_err.o
+LIBSRC=        cryptlib.c mem.c mem_dbg.c cversion.c ex_data.c tmdiff.c cpt_err.c 
+ebcdic.c
+LIBOBJ= cryptlib.o mem.o mem_dbg.o cversion.o ex_data.o tmdiff.o cpt_err.o ebcdic.o
 
 SRC= $(LIBSRC)
 
@@ -57,6 +57,11 @@
        echo "  #define DATE \"`date`\""; \
        echo "#endif" ) >buildinf.h
 
+testapps:
+       if echo ${SDIRS} | fgrep ' des '; \
+       then cd des && $(MAKE) CC='$(CC)' INCLUDES='${INCLUDES}' CFLAG='${CFLAG}' 
+INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' 
+BN_ASM='${BN_ASM}' DES_ENC='${DES_ENC}' SHA1_ASM_OBJ='${SHA1_ASM_OBJ}' 
+MD5_ASM_OBJ='${MD5_ASM_OBJ}' RMD160_ASM_OBJ='${RMD160_ASM_OBJ}' BF_ENC='${BF_ENC}' 
+CAST_ENC='${CAST_ENC}' RC4_ENC='${RC4_ENC}' RC5_ENC='${RC5_ENC}' AR='${AR}' 
+PROCESSOR='${PROCESSOR}' PERL='${PERL}' RANLIB='${RANLIB}' des; fi
+       cd pkcs7 && $(MAKE) CC='$(CC)' INCLUDES='${INCLUDES}' CFLAG='${CFLAG}' 
+INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' 
+BN_ASM='${BN_ASM}' DES_ENC='${DES_ENC}' SHA1_ASM_OBJ='${SHA1_ASM_OBJ}' 
+MD5_ASM_OBJ='${MD5_ASM_OBJ}' RMD160_ASM_OBJ='${RMD160_ASM_OBJ}' BF_ENC='${BF_ENC}' 
+CAST_ENC='${CAST_ENC}' RC4_ENC='${RC4_ENC}' RC5_ENC='${RC5_ENC}' AR='${AR}' 
+PROCESSOR='${PROCESSOR}' PERL='${PERL}' RANLIB='${RANLIB}' testapps
+
 subdirs:
        @for i in $(SDIRS) ;\
        do \
@@ -122,7 +127,7 @@
        done;
 
 depend:
-       if [ ! -e buildinf.h ]; then touch buildinf.h; fi # fake buildinf.h if it does 
not exist
+       if [ ! -f buildinf.h ]; then touch buildinf.h; fi # fake buildinf.h if it does 
+not exist
        $(MAKEDEPEND) $(INCLUDE) $(DEPFLAG) $(PROGS) $(LIBSRC)
        if [ ! -s buildinf.h ]; then rm buildinf.h; fi
        @for i in $(SDIRS) ;\
@@ -151,29 +156,40 @@
 # DO NOT DELETE THIS LINE -- make depend depends on it.
 
 cpt_err.o: ../include/openssl/crypto.h ../include/openssl/err.h
-cpt_err.o: ../include/openssl/opensslv.h ../include/openssl/stack.h
+cpt_err.o: ../include/openssl/opensslv.h ../include/openssl/safestack.h
+cpt_err.o: ../include/openssl/stack.h
 cryptlib.o: ../include/openssl/bio.h ../include/openssl/buffer.h
 cryptlib.o: ../include/openssl/crypto.h ../include/openssl/e_os.h
 cryptlib.o: ../include/openssl/e_os2.h ../include/openssl/err.h
 cryptlib.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
-cryptlib.o: ../include/openssl/stack.h cryptlib.h
+cryptlib.o: ../include/openssl/safestack.h ../include/openssl/stack.h
+cryptlib.o: cryptlib.h
 cversion.o: ../include/openssl/bio.h ../include/openssl/buffer.h
 cversion.o: ../include/openssl/crypto.h ../include/openssl/e_os.h
 cversion.o: ../include/openssl/e_os2.h ../include/openssl/err.h
 cversion.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
-cversion.o: ../include/openssl/stack.h buildinf.h cryptlib.h
+cversion.o: ../include/openssl/safestack.h ../include/openssl/stack.h
+cversion.o: buildinf.h cryptlib.h
 ex_data.o: ../include/openssl/bio.h ../include/openssl/buffer.h
 ex_data.o: ../include/openssl/crypto.h ../include/openssl/e_os.h
 ex_data.o: ../include/openssl/e_os2.h ../include/openssl/err.h
 ex_data.o: ../include/openssl/lhash.h ../include/openssl/opensslconf.h
-ex_data.o: ../include/openssl/opensslv.h ../include/openssl/stack.h cryptlib.h
+ex_data.o: ../include/openssl/opensslv.h ../include/openssl/safestack.h
+ex_data.o: ../include/openssl/stack.h cryptlib.h
 mem.o: ../include/openssl/bio.h ../include/openssl/buffer.h
 mem.o: ../include/openssl/crypto.h ../include/openssl/e_os.h
 mem.o: ../include/openssl/e_os2.h ../include/openssl/err.h
-mem.o: ../include/openssl/lhash.h ../include/openssl/opensslconf.h
-mem.o: ../include/openssl/opensslv.h ../include/openssl/stack.h cryptlib.h
+mem.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
+mem.o: ../include/openssl/safestack.h ../include/openssl/stack.h cryptlib.h
+mem_dbg.o: ../include/openssl/bio.h ../include/openssl/buffer.h
+mem_dbg.o: ../include/openssl/crypto.h ../include/openssl/e_os.h
+mem_dbg.o: ../include/openssl/e_os2.h ../include/openssl/err.h
+mem_dbg.o: ../include/openssl/lhash.h ../include/openssl/opensslconf.h
+mem_dbg.o: ../include/openssl/opensslv.h ../include/openssl/safestack.h
+mem_dbg.o: ../include/openssl/stack.h cryptlib.h
 tmdiff.o: ../include/openssl/bio.h ../include/openssl/buffer.h
 tmdiff.o: ../include/openssl/crypto.h ../include/openssl/e_os.h
 tmdiff.o: ../include/openssl/e_os2.h ../include/openssl/err.h
 tmdiff.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
-tmdiff.o: ../include/openssl/stack.h ../include/openssl/tmdiff.h cryptlib.h
+tmdiff.o: ../include/openssl/safestack.h ../include/openssl/stack.h
+tmdiff.o: ../include/openssl/tmdiff.h cryptlib.h
Index: opensa/openssl/crypto/md32_common.h
diff -u opensa/openssl/crypto/md32_common.h:1.1 opensa/openssl/crypto/md32_common.h:1.2
--- opensa/openssl/crypto/md32_common.h:1.1     Tue Jan 25 23:20:27 2000
+++ opensa/openssl/crypto/md32_common.h Thu Mar  2 21:11:49 2000
@@ -94,6 +94,8 @@
  *     in original (data) byte order, implemented externally (it
  *     actually is optional if data and host are of the same
  *     "endianess").
+ * HASH_MAKE_STRING
+ *     macro convering context variables to an ASCII hash string.
  *
  * Optional macros:
  *
@@ -178,8 +180,17 @@
 #undef ROTATE
 #ifndef PEDANTIC
 # if defined(_MSC_VER)
-#  define ROTATE(a,n)     _lrotl(a,n)
-# elif defined(__GNUC__) && __GNUC__>=2 && !defined(NO_ASM)
+#  define ROTATE(a,n)  _lrotl(a,n)
+# elif defined(__MWERKS__)
+#  if defined(__POWERPC__)
+#   define ROTATE(a,n) __rlwinm(a,n,0,31)
+#  elif defined(__MC68K__)
+    /* Motorola specific tweak. <[EMAIL PROTECTED]> */
+#   define ROTATE(a,n) ( n<24 ? __rol(a,n) : __ror(a,32-n) )
+#  else
+#   define ROTATE(a,n) __rol(a,n)
+#  endif
+# elif defined(__GNUC__) && __GNUC__>=2 && !defined(NO_ASM) && !defined(NO_INLINE_ASM)
   /*
    * Some GNU C inline assembler templates. Note that these are
    * rotates by *constant* number of bits! But that's exactly
@@ -189,16 +200,16 @@
    */
 #  if defined(__i386)
 #   define ROTATE(a,n) ({ register unsigned int ret;   \
-                               asm volatile (          \
+                               asm (                   \
                                "roll %1,%0"            \
                                : "=r"(ret)             \
                                : "I"(n), "0"(a)        \
                                : "cc");                \
                           ret;                         \
                        })
-#  elif defined(__powerpc)
+#  elif defined(__powerpc) || defined(__ppc)
 #   define ROTATE(a,n) ({ register unsigned int ret;   \
-                               asm volatile (          \
+                               asm (                   \
                                "rlwinm %0,%1,%2,0,31"  \
                                : "=r"(ret)             \
                                : "r"(a), "I"(n));      \
@@ -211,18 +222,18 @@
  * Engage compiler specific "fetch in reverse byte order"
  * intrinsic function if available.
  */
-# if defined(__GNUC__) && __GNUC__>=2 && !defined(NO_ASM)
+# if defined(__GNUC__) && __GNUC__>=2 && !defined(NO_ASM) && !defined(NO_INLINE_ASM)
   /* some GNU C inline assembler templates by <[EMAIL PROTECTED]> */
 #  if defined(__i386) && !defined(I386_ONLY)
 #   define BE_FETCH32(a)       ({ register unsigned int l=(a);\
-                               asm volatile (          \
+                               asm (                   \
                                "bswapl %0"             \
                                : "=r"(l) : "0"(l));    \
                          l;                            \
                        })
 #  elif defined(__powerpc)
 #   define LE_FETCH32(a)       ({ register unsigned int l;     \
-                               asm volatile (          \
+                               asm (                   \
                                "lwbrx %0,0,%1"         \
                                : "=r"(l)               \
                                : "r"(a));              \
@@ -231,7 +242,7 @@
 
 #  elif defined(__sparc) && defined(ULTRASPARC)
 #  define LE_FETCH32(a)        ({ register unsigned int l;             \
-                               asm volatile (                  \
+                               asm (                           \
                                "lda [%1]#ASI_PRIMARY_LITTLE,%0"\
                                : "=r"(l)                       \
                                : "r"(a));                      \
@@ -399,8 +410,9 @@
  * Time for some action:-)
  */
 
-void HASH_UPDATE (HASH_CTX *c, const unsigned char *data, unsigned long len)
+void HASH_UPDATE (HASH_CTX *c, const void *data_, unsigned long len)
        {
+       const unsigned char *data=data_;
        register HASH_LONG * p;
        register unsigned long l;
        int sw,sc,ew,ec;
@@ -581,10 +593,11 @@
 #endif
        HASH_BLOCK_HOST_ORDER (c,p,1);
 
-       l=c->A; HOST_l2c(l,md);
-       l=c->B; HOST_l2c(l,md);
-       l=c->C; HOST_l2c(l,md);
-       l=c->D; HOST_l2c(l,md);
+#ifndef HASH_MAKE_STRING
+#error "HASH_MAKE_STRING must be defined!"
+#else
+       HASH_MAKE_STRING(c,md);
+#endif
 
        c->num=0;
        /* clear stuff, HASH_BLOCK may be leaving some stuff on the stack
Index: opensa/openssl/crypto/mem.c
diff -u opensa/openssl/crypto/mem.c:1.1 opensa/openssl/crypto/mem.c:1.2
--- opensa/openssl/crypto/mem.c:1.1     Tue Jan 25 23:20:27 2000
+++ opensa/openssl/crypto/mem.c Thu Mar  2 21:11:49 2000
@@ -59,371 +59,203 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <openssl/crypto.h>
-#ifdef CRYPTO_MDEBUG_TIME
-# include <time.h>     
-#endif
-#include <openssl/buffer.h>
-#include <openssl/bio.h>
-#include <openssl/lhash.h>
 #include "cryptlib.h"
 
-/* #ifdef CRYPTO_MDEBUG */
-/* static int mh_mode=CRYPTO_MEM_CHECK_ON; */
-/* #else */
-static int mh_mode=CRYPTO_MEM_CHECK_OFF;
-/* #endif */
-/* State CRYPTO_MEM_CHECK_ON exists only temporarily when the library
- * thinks that certain allocations should not be checked (e.g. the data
- * structures used for memory checking).  It is not suitable as an initial
- * state: the library will unexpectedly enable memory checking when it
- * executes one of those sections that want to disable checking
- * temporarily.
- *
- * State CRYPTO_MEM_CHECK_ENABLE without ..._ON makes no sense whatsoever.
- */
-
-static unsigned long order=0;
-
-static LHASH *mh=NULL;
-
-typedef struct mem_st
-       {
-       char *addr;
-       int num;
-       const char *file;
-       int line;
-#ifdef CRYPTO_MDEBUG_THREAD
-       unsigned long thread;
-#endif
-       unsigned long order;
-#ifdef CRYPTO_MDEBUG_TIME
-       time_t time;
-#endif
-       } MEM;
-
-int CRYPTO_mem_ctrl(int mode)
-       {
-       int ret=mh_mode;
-
-       CRYPTO_w_lock(CRYPTO_LOCK_MALLOC);
-       switch (mode)
-               {
-       /* for applications: */
-       case CRYPTO_MEM_CHECK_ON: /* aka MemCheck_start() */
-               mh_mode = CRYPTO_MEM_CHECK_ON|CRYPTO_MEM_CHECK_ENABLE;
-               break;
-       case CRYPTO_MEM_CHECK_OFF: /* aka MemCheck_stop() */
-               mh_mode = 0;
-               break;
-
-       /* switch off temporarily (for library-internal use): */
-       case CRYPTO_MEM_CHECK_DISABLE: /* aka MemCheck_off() */
-               mh_mode&= ~CRYPTO_MEM_CHECK_ENABLE;
-               break;
-       case CRYPTO_MEM_CHECK_ENABLE: /* aka MemCheck_on() */
-               if (mh_mode&CRYPTO_MEM_CHECK_ON)
-                       mh_mode|=CRYPTO_MEM_CHECK_ENABLE;
-               break;
-
-       default:
-               break;
-               }
-       CRYPTO_w_unlock(CRYPTO_LOCK_MALLOC);
-       return(ret);
-       }
-
-static int mem_cmp(MEM *a, MEM *b)
-       {
-       return(a->addr - b->addr);
-       }
-
-static unsigned long mem_hash(MEM *a)
-       {
-       unsigned long ret;
-
-       ret=(unsigned long)a->addr;
 
-       ret=ret*17851+(ret>>14)*7+(ret>>4)*251;
-       return(ret);
-       }
+static int allow_customize = 1;      /* we provide flexible functions for */
+static int allow_customize_debug = 1;/* exchanging memory-related functions at
+                                      * run-time, but this must be done
+                                      * before any blocks are actually
+                                      * allocated; or we'll run into huge
+                                      * problems when malloc/free pairs
+                                      * don't match etc. */
+
+/* may be changed as long as `allow_customize' is set */
+static void *(*malloc_locked_func)(size_t)  = malloc;
+static void (*free_locked_func)(void *)     = free;
+static void *(*malloc_func)(size_t)         = malloc;
+static void *(*realloc_func)(void *, size_t)= realloc;
+static void (*free_func)(void *)            = free;
+
+/* may be changed as long as `allow_customize_debug' is set */
+/* XXX use correct function pointer types */
+#ifdef CRYPTO_MDEBUG
+  /* use default functions from mem_dbg.c */
+  static void (*malloc_debug_func)()= (void (*)())CRYPTO_dbg_malloc;
+  static void (*realloc_debug_func)()= (void (*)())CRYPTO_dbg_realloc;
+  static void (*free_debug_func)()= (void (*)())CRYPTO_dbg_free;
+  static void (*set_debug_options_func)()= (void (*)())CRYPTO_dbg_set_options;
+  static long (*get_debug_options_func)()= (long (*)())CRYPTO_dbg_get_options;
+#else
+  /* applications can use CRYPTO_malloc_debug_init() to select above case
+   * at run-time */
+  static void (*malloc_debug_func)()= NULL;
+  static void (*realloc_debug_func)()= NULL;
+  static void (*free_debug_func)()= NULL;
+  static void (*set_debug_options_func)()= NULL;
+  static long (*get_debug_options_func)()= NULL;
+#endif
 
-static char *(*malloc_locked_func)()=(char *(*)())malloc;
-static void (*free_locked_func)()=(void (*)())free;
-static char *(*malloc_func)()= (char *(*)())malloc;
-static char *(*realloc_func)()=        (char *(*)())realloc;
-static void (*free_func)()=    (void (*)())free;
 
-void CRYPTO_set_mem_functions(char *(*m)(), char *(*r)(), void (*f)())
-       {
-       if ((m == NULL) || (r == NULL) || (f == NULL)) return;
+int CRYPTO_set_mem_functions(void *(*m)(size_t), void *(*r)(void *, size_t),
+       void (*f)(void *))
+       {
+       if (!allow_customize)
+               return 0;
+       if ((m == NULL) || (r == NULL) || (f == NULL))
+               return 0;
        malloc_func=m;
        realloc_func=r;
        free_func=f;
        malloc_locked_func=m;
        free_locked_func=f;
+       return 1;
        }
 
-void CRYPTO_set_locked_mem_functions(char *(*m)(), void (*f)())
+int CRYPTO_set_locked_mem_functions(void *(*m)(size_t), void (*f)(void *))
        {
-       if ((m == NULL) || (f == NULL)) return;
+       if (!allow_customize)
+               return 0;
+       if ((m == NULL) || (f == NULL))
+               return 0;
        malloc_locked_func=m;
        free_locked_func=f;
+       return 1;
        }
 
-void CRYPTO_get_mem_functions(char *(**m)(), char *(**r)(), void (**f)())
+int CRYPTO_set_mem_debug_functions(void (*m)(), void (*r)(), void (*f)(),void 
+(*so)(),long (*go)())
        {
+       if (!allow_customize_debug)
+               return 0;
+       malloc_debug_func=m;
+       realloc_debug_func=r;
+       free_debug_func=f;
+       set_debug_options_func=so;
+       get_debug_options_func=go;
+       return 1;
+       }
+
+void CRYPTO_get_mem_functions(void *(**m)(size_t), void *(**r)(void *, size_t),
+       void (**f)(void *))
+       {
        if (m != NULL) *m=malloc_func;
        if (r != NULL) *r=realloc_func;
        if (f != NULL) *f=free_func;
        }
 
-void CRYPTO_get_locked_mem_functions(char *(**m)(), void (**f)())
+void CRYPTO_get_locked_mem_functions(void *(**m)(size_t), void (**f)(void *))
        {
        if (m != NULL) *m=malloc_locked_func;
        if (f != NULL) *f=free_locked_func;
        }
 
-void *CRYPTO_malloc_locked(int num)
+void CRYPTO_get_mem_debug_functions(void (**m)(), void (**r)(), void (**f)(),void 
+(**so)(),long (**go)())
        {
-       return(malloc_locked_func(num));
+       if (m != NULL) *m=malloc_debug_func;
+       if (r != NULL) *r=realloc_debug_func;
+       if (f != NULL) *f=free_debug_func;
+       if (so != NULL) *so=set_debug_options_func;
+       if (go != NULL) *go=get_debug_options_func;
        }
 
-void CRYPTO_free_locked(void *str)
-       {
-       free_locked_func(str);
-       }
 
-void *CRYPTO_malloc(int num)
+void *CRYPTO_malloc_locked(int num, const char *file, int line)
        {
-       return(malloc_func(num));
-       }
+       char *ret = NULL;
 
-void *CRYPTO_realloc(void *str, int num)
-       {
-       return(realloc_func(str,num));
-       }
+       allow_customize = 0;
+       if (malloc_debug_func != NULL)
+               {
+               allow_customize_debug = 0;
+               malloc_debug_func(NULL, num, file, line, 0);
+               }
+       ret = malloc_locked_func(num);
+#ifdef LEVITTE_DEBUG
+       fprintf(stderr, "LEVITTE_DEBUG:         > 0x%p (%d)\n", ret, num);
+#endif
+       if (malloc_debug_func != NULL)
+               malloc_debug_func(ret, num, file, line, 1);
 
-void CRYPTO_free(void *str)
-       {
-       free_func(str);
+       return ret;
        }
 
-static unsigned long break_order_num=0;
-void *CRYPTO_dbg_malloc(int num, const char *file, int line)
+void CRYPTO_free_locked(void *str)
        {
-       char *ret;
-       MEM *m,*mm;
-
-       if ((ret=malloc_func(num)) == NULL)
-               return(NULL);
-
-       if (mh_mode & CRYPTO_MEM_CHECK_ENABLE)
-               {
-               MemCheck_off();
-               if ((m=(MEM *)Malloc(sizeof(MEM))) == NULL)
-                       {
-                       Free(ret);
-                       MemCheck_on();
-                       return(NULL);
-                       }
-               CRYPTO_w_lock(CRYPTO_LOCK_MALLOC);
-               if (mh == NULL)
-                       {
-                       if ((mh=lh_new(mem_hash,mem_cmp)) == NULL)
-                               {
-                               Free(ret);
-                               Free(m);
-                               ret=NULL;
-                               goto err;
-                               }
-                       }
-
-               m->addr=ret;
-               m->file=file;
-               m->line=line;
-               m->num=num;
-#ifdef CRYPTO_MDEBUG_THREAD
-               m->thread=CRYPTO_thread_id();
+       if (free_debug_func != NULL)
+               free_debug_func(str, 0);
+#ifdef LEVITTE_DEBUG
+       fprintf(stderr, "LEVITTE_DEBUG:         < 0x%p\n", str);
 #endif
-               if (order == break_order_num)
-                       {
-                       /* BREAK HERE */
-                       m->order=order;
-                       }
-               m->order=order++;
-#ifdef CRYPTO_MDEBUG_TIME
-               m->time=time(NULL);
-#endif
-               if ((mm=(MEM *)lh_insert(mh,(char *)m)) != NULL)
-                       {
-                       /* Not good, but don't sweat it */
-                       Free(mm);
-                       }
-err:
-               CRYPTO_w_unlock(CRYPTO_LOCK_MALLOC);
-               MemCheck_on();
-               }
-       return(ret);
+       free_locked_func(str);
+       if (free_debug_func != NULL)
+               free_debug_func(NULL, 1);
        }
 
-void CRYPTO_dbg_free(void *addr)
+void *CRYPTO_malloc(int num, const char *file, int line)
        {
-       MEM m,*mp;
+       char *ret = NULL;
 
-       if ((mh_mode & CRYPTO_MEM_CHECK_ENABLE) && (mh != NULL))
+       allow_customize = 0;
+       if (malloc_debug_func != NULL)
                {
-               MemCheck_off();
-               CRYPTO_w_lock(CRYPTO_LOCK_MALLOC);
-               m.addr=addr;
-               mp=(MEM *)lh_delete(mh,(char *)&m);
-               if (mp != NULL)
-                       Free(mp);
-               CRYPTO_w_unlock(CRYPTO_LOCK_MALLOC);
-               MemCheck_on();
+               allow_customize_debug = 0;
+               malloc_debug_func(NULL, num, file, line, 0);
                }
-       free_func(addr);
+       ret = malloc_func(num);
+#ifdef LEVITTE_DEBUG
+       fprintf(stderr, "LEVITTE_DEBUG:         > 0x%p (%d)\n", ret, num);
+#endif
+       if (malloc_debug_func != NULL)
+               malloc_debug_func(ret, num, file, line, 1);
+
+       return ret;
        }
 
-void *CRYPTO_dbg_realloc(void *addr, int num, const char *file, int line)
+void *CRYPTO_realloc(void *str, int num, const char *file, int line)
        {
-       char *ret;
-       MEM m,*mp;
+       char *ret = NULL;
 
-       ret=realloc_func(addr,num);
-       if (ret == addr) return(ret);
+       if (realloc_debug_func != NULL)
+               realloc_debug_func(str, NULL, num, file, line, 0);
+       ret = realloc_func(str,num);
+#ifdef LEVITTE_DEBUG
+       fprintf(stderr, "LEVITTE_DEBUG:         | 0x%p -> 0x%p (%d)\n", str, ret, num);
+#endif
+       if (realloc_debug_func != NULL)
+               realloc_debug_func(str, ret, num, file, line, 1);
 
-       if (mh_mode & CRYPTO_MEM_CHECK_ENABLE)
-               {
-               MemCheck_off();
-               if (ret == NULL) return(NULL);
-               m.addr=addr;
-               CRYPTO_w_lock(CRYPTO_LOCK_MALLOC);
-               mp=(MEM *)lh_delete(mh,(char *)&m);
-               if (mp != NULL)
-                       {
-                       mp->addr=ret;
-                       lh_insert(mh,(char *)mp);
-                       }
-               CRYPTO_w_unlock(CRYPTO_LOCK_MALLOC);
-               MemCheck_on();
-               }
-       return(ret);
+       return ret;
        }
 
-void *CRYPTO_remalloc(void *a, int n)
+void CRYPTO_free(void *str)
        {
-       if (a != NULL) Free(a);
-       a=(char *)Malloc(n);
-       return(a);
+       if (free_debug_func != NULL)
+               free_debug_func(str, 0);
+#ifdef LEVITTE_DEBUG
+       fprintf(stderr, "LEVITTE_DEBUG:         < 0x%p\n", str);
+#endif
+       free_func(str);
+       if (free_debug_func != NULL)
+               free_debug_func(NULL, 1);
        }
 
-void *CRYPTO_dbg_remalloc(void *a, int n, const char *file, int line)
+void *CRYPTO_remalloc(void *a, int num, const char *file, int line)
        {
-       if (a != NULL) CRYPTO_dbg_free(a);
-       a=(char *)CRYPTO_dbg_malloc(n,file,line);
+       if (a != NULL) Free(a);
+       a=(char *)Malloc(num);
        return(a);
        }
 
-
-typedef struct mem_leak_st
-       {
-       BIO *bio;
-       int chunks;
-       long bytes;
-       } MEM_LEAK;
-
-static void print_leak(MEM *m, MEM_LEAK *l)
-       {
-       char buf[128];
-#ifdef CRYPTO_MDEBUG_TIME
-       struct tm *lcl;
-#endif
-
-       if(m->addr == (char *)l->bio)
-           return;
-
-#ifdef CRYPTO_MDEBUG_TIME
-       lcl = localtime(&m->time);
-#endif
-
-       sprintf(buf,
-#ifdef CRYPTO_MDEBUG_TIME
-               "[%02d:%02d:%02d] "
-#endif
-               "%5lu file=%s, line=%d, "
-#ifdef CRYPTO_MDEBUG_THREAD
-               "thread=%lu, "
-#endif
-               "number=%d, address=%08lX\n",
-#ifdef CRYPTO_MDEBUG_TIME
-               lcl->tm_hour,lcl->tm_min,lcl->tm_sec,
-#endif
-               m->order,m->file,m->line,
-#ifdef CRYPTO_MDEBUG_THREAD
-               m->thread,
-#endif
-               m->num,(unsigned long)m->addr);
-
-       BIO_puts(l->bio,buf);
-       l->chunks++;
-       l->bytes+=m->num;
-       }
-
-void CRYPTO_mem_leaks(BIO *b)
-       {
-       MEM_LEAK ml;
-       char buf[80];
-
-       if (mh == NULL) return;
-       ml.bio=b;
-       ml.bytes=0;
-       ml.chunks=0;
-       CRYPTO_w_lock(CRYPTO_LOCK_MALLOC);
-       lh_doall_arg(mh,(void (*)())print_leak,(char *)&ml);
-       CRYPTO_w_unlock(CRYPTO_LOCK_MALLOC);
-       if (ml.chunks != 0)
-               {
-               sprintf(buf,"%ld bytes leaked in %d chunks\n",
-                       ml.bytes,ml.chunks);
-               BIO_puts(b,buf);
-               }
-
-#if 0
-       lh_stats_bio(mh,b);
-       lh_node_stats_bio(mh,b);
-       lh_node_usage_stats_bio(mh,b);
-#endif
-       }
-
-static void (*mem_cb)()=NULL;
 
-static void cb_leak(MEM *m, char *cb)
+void CRYPTO_set_mem_debug_options(long bits)
        {
-       void (*mem_callback)()=(void (*)())cb;
-       mem_callback(m->order,m->file,m->line,m->num,m->addr);
+       if (set_debug_options_func != NULL)
+               set_debug_options_func(bits);
        }
 
-void CRYPTO_mem_leaks_cb(void (*cb)())
+long CRYPTO_get_mem_debug_options(void)
        {
-       if (mh == NULL) return;
-       CRYPTO_w_lock(CRYPTO_LOCK_MALLOC);
-       mem_cb=cb;
-       lh_doall_arg(mh,(void (*)())cb_leak,(char *)mem_cb);
-       mem_cb=NULL;
-       CRYPTO_w_unlock(CRYPTO_LOCK_MALLOC);
+       if (get_debug_options_func != NULL)
+               return get_debug_options_func();
+       return 0;
        }
-
-#ifndef NO_FP_API
-void CRYPTO_mem_leaks_fp(FILE *fp)
-       {
-       BIO *b;
-
-       if (mh == NULL) return;
-       if ((b=BIO_new(BIO_s_file())) == NULL)
-               return;
-       BIO_set_fp(b,fp,BIO_NOCLOSE);
-       CRYPTO_mem_leaks(b);
-       BIO_free(b);
-       }
-#endif
-
Index: opensa/openssl/crypto/opensslconf.h
diff -u opensa/openssl/crypto/opensslconf.h:1.1 opensa/openssl/crypto/opensslconf.h:1.2
--- opensa/openssl/crypto/opensslconf.h:1.1     Tue Jan 25 23:20:27 2000
+++ opensa/openssl/crypto/opensslconf.h Thu Mar  2 21:11:49 2000
@@ -1,142 +1,170 @@
-/* crypto/opensslconf.h */
-/* WARNING: This file is autogenerated by Configure */
-
-/* Generate 80386 code? */
-#undef I386_ONLY
-
-#if !(defined(VMS) || defined(__VMS)) /* VMS uses logical names instead */
-#if defined(HEADER_CRYPTLIB_H) && !defined(OPENSSLDIR)
-#define OPENSSLDIR "/usr/local/ssl"
-#endif
-#endif
-
-#define OPENSSL_UNISTD <unistd.h>
-
-#if defined(HEADER_IDEA_H) && !defined(IDEA_INT)
-#define IDEA_INT unsigned int
-#endif
-
-#if defined(HEADER_MD2_H) && !defined(MD2_INT)
-#define MD2_INT unsigned int
-#endif
-
-#if defined(HEADER_RC2_H) && !defined(RC2_INT)
-/* I need to put in a mod for the alpha - eay */
-#define RC2_INT unsigned int
-#endif
-
-#if defined(HEADER_RC4_H) && !defined(RC4_INT)
-/* using int types make the structure larger but make the code faster
- * on most boxes I have tested - up to %20 faster. */
-#define RC4_INT unsigned int
-#endif
-
-#if defined(HEADER_DES_H) && !defined(DES_LONG)
-/* If this is set to 'unsigned int' on a DEC Alpha, this gives about a
- * %20 speed up (longs are 8 bytes, int's are 4). */
-#ifndef DES_LONG
-#define DES_LONG unsigned long
-#endif
-#endif
-
-#if defined(HEADER_BN_H) && !defined(CONFIG_HEADER_BN_H)
-#define CONFIG_HEADER_BN_H
-#define BN_LLONG
-
-/* Should we define BN_DIV2W here? */
-
-/* Only one for the following should be defined */
-/* The prime number generation stuff may not work when
- * EIGHT_BIT but I don't care since I've only used this mode
- * for debuging the bignum libraries */
-#undef SIXTY_FOUR_BIT_LONG
-#undef SIXTY_FOUR_BIT
-#define THIRTY_TWO_BIT
-#undef SIXTEEN_BIT
-#undef EIGHT_BIT
-#endif
-
-#if defined(HEADER_RC4_LOCL_H) && !defined(CONFIG_HEADER_RC4_LOCL_H)
-#define CONFIG_HEADER_RC4_LOCL_H
-/* if this is defined data[i] is used instead of *data, this is a %20
- * speedup on x86 */
-#define RC4_INDEX
-#endif
-
-#if defined(HEADER_BF_LOCL_H) && !defined(CONFIG_HEADER_BF_LOCL_H)
-#define CONFIG_HEADER_BF_LOCL_H
-#undef BF_PTR
-#endif /* HEADER_BF_LOCL_H */
-
-#if defined(HEADER_DES_LOCL_H) && !defined(CONFIG_HEADER_DES_LOCL_H)
-#define CONFIG_HEADER_DES_LOCL_H
-#ifndef DES_DEFAULT_OPTIONS
-/* the following is tweaked from a config script, that is why it is a
- * protected undef/define */
-#ifndef DES_PTR
-#undef DES_PTR
-#endif
-
-/* This helps C compiler generate the correct code for multiple functional
- * units.  It reduces register dependancies at the expense of 2 more
- * registers */
-#ifndef DES_RISC1
-#undef DES_RISC1
-#endif
-
-#ifndef DES_RISC2
-#undef DES_RISC2
-#endif
-
-#if defined(DES_RISC1) && defined(DES_RISC2)
-YOU SHOULD NOT HAVE BOTH DES_RISC1 AND DES_RISC2 DEFINED!!!!!
-#endif
-
-/* Unroll the inner loop, this sometimes helps, sometimes hinders.
- * Very mucy CPU dependant */
-#ifndef DES_UNROLL
-#undef DES_UNROLL
-#endif
-
-/* These default values were supplied by
- * Peter Gutman <[EMAIL PROTECTED]>
- * They are only used if nothing else has been defined */
-#if !defined(DES_PTR) && !defined(DES_RISC1) && !defined(DES_RISC2) && 
!defined(DES_UNROLL)
-/* Special defines which change the way the code is built depending on the
-   CPU and OS.  For SGI machines you can use _MIPS_SZLONG (32 or 64) to find
-   even newer MIPS CPU's, but at the moment one size fits all for
-   optimization options.  Older Sparc's work better with only UNROLL, but
-   there's no way to tell at compile time what it is you're running on */
- 
-#if defined( sun )             /* Newer Sparc's */
-#  define DES_PTR
-#  define DES_RISC1
-#  define DES_UNROLL
-#elif defined( __ultrix )      /* Older MIPS */
-#  define DES_PTR
-#  define DES_RISC2
-#  define DES_UNROLL
-#elif defined( __osf1__ )      /* Alpha */
-#  define DES_PTR
-#  define DES_RISC2
-#elif defined ( _AIX )         /* RS6000 */
-  /* Unknown */
-#elif defined( __hpux )                /* HP-PA */
-  /* Unknown */
-#elif defined( __aux )         /* 68K */
-  /* Unknown */
-#elif defined( __dgux )                /* 88K (but P6 in latest boxes) */
-#  define DES_UNROLL
-#elif defined( __sgi )         /* Newer MIPS */
-#  define DES_PTR
-#  define DES_RISC2
-#  define DES_UNROLL
-#elif defined( i386 )          /* x86 boxes, should be gcc */
-#  define DES_PTR
-#  define DES_RISC1
-#  define DES_UNROLL
-#endif /* Systems-specific speed defines */
-#endif
-
-#endif /* DES_DEFAULT_OPTIONS */
-#endif /* HEADER_DES_LOCL_H */
+/* opensslconf.h */
+/* WARNING: Generated automatically from opensslconf.h.in by Configure. */
+
+/* OpenSSL was configured with the following options: */
+#ifdef OPENSSL_ALGORITHM_DEFINES
+   /* no ciphers excluded */
+#endif
+#ifdef OPENSSL_THREAD_DEFINES
+# ifndef THREADS
+#  define THREADS
+# endif
+#endif
+#ifdef OPENSSL_OTHER_DEFINES
+#endif
+
+/* crypto/opensslconf.h.in */
+
+/* Generate 80386 code? */
+#undef I386_ONLY
+
+#if !(defined(VMS) || defined(__VMS)) /* VMS uses logical names instead */
+#if defined(HEADER_CRYPTLIB_H) && !defined(OPENSSLDIR)
+#define OPENSSLDIR "/usr/local/ssl"
+#endif
+#endif
+
+#define OPENSSL_UNISTD <unistd.h>
+
+#if defined(HEADER_IDEA_H) && !defined(IDEA_INT)
+#define IDEA_INT unsigned int
+#endif
+
+#if defined(HEADER_MD2_H) && !defined(MD2_INT)
+#define MD2_INT unsigned int
+#endif
+
+#if defined(HEADER_RC2_H) && !defined(RC2_INT)
+/* I need to put in a mod for the alpha - eay */
+#define RC2_INT unsigned int
+#endif
+
+#if defined(HEADER_RC4_H)
+#if !defined(RC4_INT)
+/* using int types make the structure larger but make the code faster
+ * on most boxes I have tested - up to %20 faster. */
+/*
+ * I don't know what does "most" mean, but declaring "int" is a must on:
+ * - Intel P6 because partial register stalls are very expensive;
+ * - elder Alpha because it lacks byte load/store instructions;
+ */
+#define RC4_INT unsigned int
+#endif
+#if !defined(RC4_CHUNK)
+/*
+ * This enables code handling data aligned at natural CPU word
+ * boundary. See crypto/rc4/rc4_enc.c for further details.
+ */
+#undef RC4_CHUNK
+#endif
+#endif
+
+#if defined(HEADER_DES_H) && !defined(DES_LONG)
+/* If this is set to 'unsigned int' on a DEC Alpha, this gives about a
+ * %20 speed up (longs are 8 bytes, int's are 4). */
+#ifndef DES_LONG
+#define DES_LONG unsigned long
+#endif
+#endif
+
+#if defined(HEADER_BN_H) && !defined(CONFIG_HEADER_BN_H)
+#define CONFIG_HEADER_BN_H
+#define BN_LLONG
+
+/* Should we define BN_DIV2W here? */
+
+/* Only one for the following should be defined */
+/* The prime number generation stuff may not work when
+ * EIGHT_BIT but I don't care since I've only used this mode
+ * for debuging the bignum libraries */
+#undef SIXTY_FOUR_BIT_LONG
+#undef SIXTY_FOUR_BIT
+#define THIRTY_TWO_BIT
+#undef SIXTEEN_BIT
+#undef EIGHT_BIT
+#endif
+
+#if defined(HEADER_RC4_LOCL_H) && !defined(CONFIG_HEADER_RC4_LOCL_H)
+#define CONFIG_HEADER_RC4_LOCL_H
+/* if this is defined data[i] is used instead of *data, this is a %20
+ * speedup on x86 */
+#define RC4_INDEX
+#endif
+
+#if defined(HEADER_BF_LOCL_H) && !defined(CONFIG_HEADER_BF_LOCL_H)
+#define CONFIG_HEADER_BF_LOCL_H
+#undef BF_PTR
+#endif /* HEADER_BF_LOCL_H */
+
+#if defined(HEADER_DES_LOCL_H) && !defined(CONFIG_HEADER_DES_LOCL_H)
+#define CONFIG_HEADER_DES_LOCL_H
+#ifndef DES_DEFAULT_OPTIONS
+/* the following is tweaked from a config script, that is why it is a
+ * protected undef/define */
+#ifndef DES_PTR
+#undef DES_PTR
+#endif
+
+/* This helps C compiler generate the correct code for multiple functional
+ * units.  It reduces register dependancies at the expense of 2 more
+ * registers */
+#ifndef DES_RISC1
+#undef DES_RISC1
+#endif
+
+#ifndef DES_RISC2
+#undef DES_RISC2
+#endif
+
+#if defined(DES_RISC1) && defined(DES_RISC2)
+YOU SHOULD NOT HAVE BOTH DES_RISC1 AND DES_RISC2 DEFINED!!!!!
+#endif
+
+/* Unroll the inner loop, this sometimes helps, sometimes hinders.
+ * Very mucy CPU dependant */
+#ifndef DES_UNROLL
+#undef DES_UNROLL
+#endif
+
+/* These default values were supplied by
+ * Peter Gutman <[EMAIL PROTECTED]>
+ * They are only used if nothing else has been defined */
+#if !defined(DES_PTR) && !defined(DES_RISC1) && !defined(DES_RISC2) && 
+!defined(DES_UNROLL)
+/* Special defines which change the way the code is built depending on the
+   CPU and OS.  For SGI machines you can use _MIPS_SZLONG (32 or 64) to find
+   even newer MIPS CPU's, but at the moment one size fits all for
+   optimization options.  Older Sparc's work better with only UNROLL, but
+   there's no way to tell at compile time what it is you're running on */
+ 
+#if defined( sun )             /* Newer Sparc's */
+#  define DES_PTR
+#  define DES_RISC1
+#  define DES_UNROLL
+#elif defined( __ultrix )      /* Older MIPS */
+#  define DES_PTR
+#  define DES_RISC2
+#  define DES_UNROLL
+#elif defined( __osf1__ )      /* Alpha */
+#  define DES_PTR
+#  define DES_RISC2
+#elif defined ( _AIX )         /* RS6000 */
+  /* Unknown */
+#elif defined( __hpux )                /* HP-PA */
+  /* Unknown */
+#elif defined( __aux )         /* 68K */
+  /* Unknown */
+#elif defined( __dgux )                /* 88K (but P6 in latest boxes) */
+#  define DES_UNROLL
+#elif defined( __sgi )         /* Newer MIPS */
+#  define DES_PTR
+#  define DES_RISC2
+#  define DES_UNROLL
+#elif defined( i386 )          /* x86 boxes, should be gcc */
+#  define DES_PTR
+#  define DES_RISC1
+#  define DES_UNROLL
+#endif /* Systems-specific speed defines */
+#endif
+
+#endif /* DES_DEFAULT_OPTIONS */
+#endif /* HEADER_DES_LOCL_H */
Index: opensa/openssl/crypto/opensslconf.h.in
diff -u opensa/openssl/crypto/opensslconf.h.in:1.1 
opensa/openssl/crypto/opensslconf.h.in:1.2
--- opensa/openssl/crypto/opensslconf.h.in:1.1  Tue Jan 25 23:20:27 2000
+++ opensa/openssl/crypto/opensslconf.h.in      Thu Mar  2 21:11:49 2000
@@ -1,5 +1,4 @@
-/* crypto/opensslconf.h */
-/* WARNING: This file is autogenerated by Configure */
+/* crypto/opensslconf.h.in */
 
 /* Generate 80386 code? */
 #undef I386_ONLY
@@ -25,10 +24,24 @@
 #define RC2_INT unsigned int
 #endif
 
-#if defined(HEADER_RC4_H) && !defined(RC4_INT)
+#if defined(HEADER_RC4_H)
+#if !defined(RC4_INT)
 /* using int types make the structure larger but make the code faster
  * on most boxes I have tested - up to %20 faster. */
+/*
+ * I don't know what does "most" mean, but declaring "int" is a must on:
+ * - Intel P6 because partial register stalls are very expensive;
+ * - elder Alpha because it lacks byte load/store instructions;
+ */
 #define RC4_INT unsigned int
+#endif
+#if !defined(RC4_CHUNK)
+/*
+ * This enables code handling data aligned at natural CPU word
+ * boundary. See crypto/rc4/rc4_enc.c for further details.
+ */
+#undef RC4_CHUNK
+#endif
 #endif
 
 #if defined(HEADER_DES_H) && !defined(DES_LONG)
Index: opensa/openssl/crypto/opensslv.h
diff -u opensa/openssl/crypto/opensslv.h:1.1 opensa/openssl/crypto/opensslv.h:1.2
--- opensa/openssl/crypto/opensslv.h:1.1        Tue Jan 25 23:20:27 2000
+++ opensa/openssl/crypto/opensslv.h    Thu Mar  2 21:11:49 2000
@@ -7,15 +7,15 @@
  * 0.9.3-dev     0x00903000
  * 0.9.3beta1    0x00903001
  * 0.9.3beta2-dev 0x00903002
- * 0.9.3beta2     0x00903002
+ * 0.9.3beta2     0x00903002 (same as ...beta2-dev)
  * 0.9.3         0x00903100
  * 0.9.3a        0x00903101
  * 0.9.4         0x00904100
  * 1.2.3z        0x1020311a
  * (Prior to 0.9.3-dev a different scheme was used: 0.9.2b is 0x0922.)
  */
-#define OPENSSL_VERSION_NUMBER 0x00904100L
-#define OPENSSL_VERSION_TEXT   "OpenSSL 0.9.4 09 Aug 1999"
+#define OPENSSL_VERSION_NUMBER 0x00905100L
+#define OPENSSL_VERSION_TEXT   "OpenSSL 0.9.5 28 Feb 2000"
 #define OPENSSL_VERSION_PTEXT  " part of " OPENSSL_VERSION_TEXT
 
 #endif /* HEADER_OPENSSLV_H */
Index: opensa/openssl/crypto/asn1/a_bitstr.c
diff -u opensa/openssl/crypto/asn1/a_bitstr.c:1.1 
opensa/openssl/crypto/asn1/a_bitstr.c:1.2
--- opensa/openssl/crypto/asn1/a_bitstr.c:1.1   Tue Jan 25 23:36:06 2000
+++ opensa/openssl/crypto/asn1/a_bitstr.c       Thu Mar  2 21:11:50 2000
@@ -60,6 +60,15 @@
 #include "cryptlib.h"
 #include <openssl/asn1.h>
 
+ASN1_BIT_STRING *ASN1_BIT_STRING_new(void)
+{ return M_ASN1_BIT_STRING_new(); }
+
+void ASN1_BIT_STRING_free(ASN1_BIT_STRING *x)
+{ M_ASN1_BIT_STRING_free(x); }
+
+int ASN1_BIT_STRING_set(ASN1_BIT_STRING *x, unsigned char *d, int len)
+{ return M_ASN1_BIT_STRING_set(x, d, len); }
+
 int i2d_ASN1_BIT_STRING(ASN1_BIT_STRING *a, unsigned char **pp)
        {
        int ret,j,r,bits,len;
@@ -121,7 +130,7 @@
 
        if ((a == NULL) || ((*a) == NULL))
                {
-               if ((ret=ASN1_BIT_STRING_new()) == NULL) return(NULL);
+               if ((ret=M_ASN1_BIT_STRING_new()) == NULL) return(NULL);
                }
        else
                ret=(*a);
@@ -164,7 +173,7 @@
                s=NULL;
 
        ret->length=(int)len;
-       if (ret->data != NULL) Free((char *)ret->data);
+       if (ret->data != NULL) Free(ret->data);
        ret->data=s;
        ret->type=V_ASN1_BIT_STRING;
        if (a != NULL) (*a)=ret;
@@ -173,7 +182,7 @@
 err:
        ASN1err(ASN1_F_D2I_ASN1_BIT_STRING,i);
        if ((ret != NULL) && ((a == NULL) || (*a != ret)))
-               ASN1_BIT_STRING_free(ret);
+               M_ASN1_BIT_STRING_free(ret);
        return(NULL);
        }
 
Index: opensa/openssl/crypto/asn1/a_bmp.c
diff -u opensa/openssl/crypto/asn1/a_bmp.c:1.1 opensa/openssl/crypto/asn1/a_bmp.c:1.2
--- opensa/openssl/crypto/asn1/a_bmp.c:1.1      Tue Jan 25 23:36:06 2000
+++ opensa/openssl/crypto/asn1/a_bmp.c  Thu Mar  2 21:11:50 2000
@@ -60,6 +60,12 @@
 #include "cryptlib.h"
 #include <openssl/asn1.h>
 
+ASN1_BMPSTRING *ASN1_BMPSTRING_new(void)
+{ return M_ASN1_BMPSTRING_new(); }
+
+void ASN1_BMPSTRING_free(ASN1_BMPSTRING *x)
+{ M_ASN1_BMPSTRING_free(x); }
+
 int i2d_ASN1_BMPSTRING(ASN1_BMPSTRING *a, unsigned char **pp)
        {
        return(i2d_ASN1_bytes((ASN1_STRING *)a,pp,
Index: opensa/openssl/crypto/asn1/a_bytes.c
diff -u opensa/openssl/crypto/asn1/a_bytes.c:1.1 
opensa/openssl/crypto/asn1/a_bytes.c:1.2
--- opensa/openssl/crypto/asn1/a_bytes.c:1.1    Tue Jan 25 23:36:06 2000
+++ opensa/openssl/crypto/asn1/a_bytes.c        Thu Mar  2 21:11:50 2000
@@ -71,7 +71,7 @@
 B_ASN1_UNIVERSALSTRING,B_ASN1_UNKNOWN,B_ASN1_BMPSTRING,B_ASN1_UNKNOWN,
        };
 
-static int asn1_collate_primative(ASN1_STRING *a, ASN1_CTX *c);
+static int asn1_collate_primitive(ASN1_STRING *a, ASN1_CTX *c);
 /* type is a 'bitmap' of acceptable string types.
  */
 ASN1_STRING *d2i_ASN1_type_bytes(ASN1_STRING **a, unsigned char **pp,
@@ -124,7 +124,7 @@
        else
                s=NULL;
 
-       if (ret->data != NULL) Free((char *)ret->data);
+       if (ret->data != NULL) Free(ret->data);
        ret->length=(int)len;
        ret->data=s;
        ret->type=tag;
@@ -205,7 +205,7 @@
                c.tag=Ptag;
                c.xclass=Pclass;
                c.max=(length == 0)?0:(p+length);
-               if (!asn1_collate_primative(ret,&c)) 
+               if (!asn1_collate_primitive(ret,&c)) 
                        goto err; 
                else
                        {
@@ -218,8 +218,8 @@
                        {
                        if ((ret->length < len) || (ret->data == NULL))
                                {
-                               if (ret->data != NULL) Free((char *)ret->data);
-                               s=(unsigned char *)Malloc((int)len);
+                               if (ret->data != NULL) Free(ret->data);
+                               s=(unsigned char *)Malloc((int)len + 1);
                                if (s == NULL)
                                        {
                                        i=ERR_R_MALLOC_FAILURE;
@@ -229,12 +229,13 @@
                        else
                                s=ret->data;
                        memcpy(s,p,(int)len);
+                       s[len] = '\0';
                        p+=len;
                        }
                else
                        {
                        s=NULL;
-                       if (ret->data != NULL) Free((char *)ret->data);
+                       if (ret->data != NULL) Free(ret->data);
                        }
 
                ret->length=(int)len;
@@ -253,11 +254,11 @@
        }
 
 
-/* We are about to parse 0..n d2i_ASN1_bytes objects, we are to collapes
- * them into the one struture that is then returned */
+/* We are about to parse 0..n d2i_ASN1_bytes objects, we are to collapse
+ * them into the one structure that is then returned */
 /* There have been a few bug fixes for this function from
  * Paul Keogh <[EMAIL PROTECTED]>, many thanks to him */
-static int asn1_collate_primative(ASN1_STRING *a, ASN1_CTX *c)
+static int asn1_collate_primitive(ASN1_STRING *a, ASN1_CTX *c)
        {
        ASN1_STRING *os=NULL;
        BUF_MEM b;
Index: opensa/openssl/crypto/asn1/a_digest.c
diff -u opensa/openssl/crypto/asn1/a_digest.c:1.1 
opensa/openssl/crypto/asn1/a_digest.c:1.2
--- opensa/openssl/crypto/asn1/a_digest.c:1.1   Tue Jan 25 23:36:06 2000
+++ opensa/openssl/crypto/asn1/a_digest.c       Thu Mar  2 21:11:50 2000
@@ -58,16 +58,19 @@
 
 #include <stdio.h>
 #include <time.h>
-#include <sys/types.h>
-#include <sys/stat.h>
 
 #include "cryptlib.h"
+
+#ifndef NO_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+
 #include <openssl/evp.h>
 #include <openssl/buffer.h>
 #include <openssl/x509.h>
 
-int ASN1_digest(int (*i2d)(), EVP_MD *type, char *data, unsigned char *md,
-            unsigned int *len)
+int ASN1_digest(int (*i2d)(), const EVP_MD *type, char *data,
+               unsigned char *md, unsigned int *len)
        {
        EVP_MD_CTX ctx;
        int i;
Index: opensa/openssl/crypto/asn1/a_dup.c
diff -u opensa/openssl/crypto/asn1/a_dup.c:1.1 opensa/openssl/crypto/asn1/a_dup.c:1.2
--- opensa/openssl/crypto/asn1/a_dup.c:1.1      Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/a_dup.c  Thu Mar  2 21:11:50 2000
@@ -78,6 +78,6 @@
        i=i2d(x,&p);
        p= b;
        ret=d2i(NULL,&p,i);
-       Free((char *)b);
+       Free(b);
        return(ret);
        }
Index: opensa/openssl/crypto/asn1/a_enum.c
diff -u opensa/openssl/crypto/asn1/a_enum.c:1.1 opensa/openssl/crypto/asn1/a_enum.c:1.2
--- opensa/openssl/crypto/asn1/a_enum.c:1.1     Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/a_enum.c Thu Mar  2 21:11:50 2000
@@ -65,6 +65,12 @@
  * for comments on encoding see a_int.c
  */
 
+ASN1_ENUMERATED *ASN1_ENUMERATED_new(void)
+{ return M_ASN1_ENUMERATED_new(); }
+
+void ASN1_ENUMERATED_free(ASN1_ENUMERATED *x)
+{ M_ASN1_ENUMERATED_free(x); }
+
 int i2d_ASN1_ENUMERATED(ASN1_ENUMERATED *a, unsigned char **pp)
        {
        int pad=0,ret,r,i,t;
@@ -142,7 +148,7 @@
 
        if ((a == NULL) || ((*a) == NULL))
                {
-               if ((ret=ASN1_ENUMERATED_new()) == NULL) return(NULL);
+               if ((ret=M_ASN1_ENUMERATED_new()) == NULL) return(NULL);
                ret->type=V_ASN1_ENUMERATED;
                }
        else
@@ -171,7 +177,12 @@
                goto err;
                }
        to=s;
-       if (*p & 0x80) /* a negative number */
+       if(!len) {
+               /* Strictly speaking this is an illegal ENUMERATED but we
+                * tolerate it.
+                */
+               ret->type=V_ASN1_ENUMERATED;
+       } else if (*p & 0x80) /* a negative number */
                {
                ret->type=V_ASN1_NEG_ENUMERATED;
                if ((*p == 0xff) && (len != 1)) {
@@ -208,7 +219,7 @@
                p+=len;
        }
 
-       if (ret->data != NULL) Free((char *)ret->data);
+       if (ret->data != NULL) Free(ret->data);
        ret->data=s;
        ret->length=(int)len;
        if (a != NULL) (*a)=ret;
@@ -217,7 +228,7 @@
 err:
        ASN1err(ASN1_F_D2I_ASN1_ENUMERATED,i);
        if ((ret != NULL) && ((a == NULL) || (*a != ret)))
-               ASN1_ENUMERATED_free(ret);
+               M_ASN1_ENUMERATED_free(ret);
        return(NULL);
        }
 
@@ -231,7 +242,7 @@
        if (a->length < (sizeof(long)+1))
                {
                if (a->data != NULL)
-                       Free((char *)a->data);
+                       Free(a->data);
                if ((a->data=(unsigned char *)Malloc(sizeof(long)+1)) != NULL)
                        memset((char *)a->data,0,sizeof(long)+1);
                }
@@ -295,7 +306,7 @@
        int len,j;
 
        if (ai == NULL)
-               ret=ASN1_ENUMERATED_new();
+               ret=M_ASN1_ENUMERATED_new();
        else
                ret=ai;
        if (ret == NULL)
@@ -311,7 +322,7 @@
        ret->length=BN_bn2bin(bn,ret->data);
        return(ret);
 err:
-       if (ret != ai) ASN1_ENUMERATED_free(ret);
+       if (ret != ai) M_ASN1_ENUMERATED_free(ret);
        return(NULL);
        }
 
Index: opensa/openssl/crypto/asn1/a_gentm.c
diff -u opensa/openssl/crypto/asn1/a_gentm.c:1.1 
opensa/openssl/crypto/asn1/a_gentm.c:1.2
--- opensa/openssl/crypto/asn1/a_gentm.c:1.1    Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/a_gentm.c        Thu Mar  2 21:11:50 2000
@@ -63,6 +63,12 @@
 #include "cryptlib.h"
 #include <openssl/asn1.h>
 
+ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_new(void)
+{ return M_ASN1_GENERALIZEDTIME_new(); }
+
+void ASN1_GENERALIZEDTIME_free(ASN1_GENERALIZEDTIME *x)
+{ M_ASN1_GENERALIZEDTIME_free(x); }
+
 int i2d_ASN1_GENERALIZEDTIME(ASN1_GENERALIZEDTIME *a, unsigned char **pp)
        {
 #ifdef CHARSET_EBCDIC
@@ -106,7 +112,7 @@
        return(ret);
 err:
        if ((ret != NULL) && ((a == NULL) || (*a != ret)))
-               ASN1_GENERALIZEDTIME_free(ret);
+               M_ASN1_GENERALIZEDTIME_free(ret);
        return(NULL);
        }
 
@@ -193,7 +199,7 @@
 #endif
 
        if (s == NULL)
-               s=ASN1_GENERALIZEDTIME_new();
+               s=M_ASN1_GENERALIZEDTIME_new();
        if (s == NULL)
                return(NULL);
 
Index: opensa/openssl/crypto/asn1/a_hdr.c
diff -u opensa/openssl/crypto/asn1/a_hdr.c:1.1 opensa/openssl/crypto/asn1/a_hdr.c:1.2
--- opensa/openssl/crypto/asn1/a_hdr.c:1.1      Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/a_hdr.c  Thu Mar  2 21:11:50 2000
@@ -102,7 +102,7 @@
        ASN1_CTX c;
 
        M_ASN1_New_Malloc(ret,ASN1_HEADER);
-       M_ASN1_New(ret->header,ASN1_OCTET_STRING_new);
+       M_ASN1_New(ret->header,M_ASN1_OCTET_STRING_new);
        ret->meth=NULL;
        ret->data=NULL;
        return(ret);
@@ -112,8 +112,8 @@
 void ASN1_HEADER_free(ASN1_HEADER *a)
        {
        if (a == NULL) return;
-       ASN1_OCTET_STRING_free(a->header);
+       M_ASN1_OCTET_STRING_free(a->header);
        if (a->meth != NULL)
                a->meth->destroy(a->data);
-       Free((char *)a);
+       Free(a);
        }
Index: opensa/openssl/crypto/asn1/a_i2d_fp.c
diff -u opensa/openssl/crypto/asn1/a_i2d_fp.c:1.1 
opensa/openssl/crypto/asn1/a_i2d_fp.c:1.2
--- opensa/openssl/crypto/asn1/a_i2d_fp.c:1.1   Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/a_i2d_fp.c       Thu Mar  2 21:11:50 2000
@@ -108,6 +108,6 @@
                j+=i;
                n-=i;
                }
-       Free((char *)b);
+       Free(b);
        return(ret);
        }
Index: opensa/openssl/crypto/asn1/a_int.c
diff -u opensa/openssl/crypto/asn1/a_int.c:1.1 opensa/openssl/crypto/asn1/a_int.c:1.2
--- opensa/openssl/crypto/asn1/a_int.c:1.1      Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/a_int.c  Thu Mar  2 21:11:50 2000
@@ -60,6 +60,18 @@
 #include "cryptlib.h"
 #include <openssl/asn1.h>
 
+ASN1_INTEGER *ASN1_INTEGER_new(void)
+{ return M_ASN1_INTEGER_new();}
+
+void ASN1_INTEGER_free(ASN1_INTEGER *x)
+{ M_ASN1_INTEGER_free(x);}
+
+ASN1_INTEGER *ASN1_INTEGER_dup(ASN1_INTEGER *x)
+{ return M_ASN1_INTEGER_dup(x);}
+
+int ASN1_INTEGER_cmp(ASN1_INTEGER *x, ASN1_INTEGER *y)
+{ return M_ASN1_INTEGER_cmp(x,y);}
+
 /* 
  * This converts an ASN1 INTEGER into its DER encoding.
  * The internal representation is an ASN1_STRING whose data is a big endian
@@ -160,7 +172,7 @@
 
        if ((a == NULL) || ((*a) == NULL))
                {
-               if ((ret=ASN1_INTEGER_new()) == NULL) return(NULL);
+               if ((ret=M_ASN1_INTEGER_new()) == NULL) return(NULL);
                ret->type=V_ASN1_INTEGER;
                }
        else
@@ -190,7 +202,12 @@
                goto err;
                }
        to=s;
-       if (*p & 0x80) /* a negative number */
+       if(!len) {
+               /* Strictly speaking this is an illegal INTEGER but we
+                * tolerate it.
+                */
+               ret->type=V_ASN1_INTEGER;
+       } else if (*p & 0x80) /* a negative number */
                {
                ret->type=V_ASN1_NEG_INTEGER;
                if ((*p == 0xff) && (len != 1)) {
@@ -231,7 +248,7 @@
                memcpy(s,p,(int)len);
        }
 
-       if (ret->data != NULL) Free((char *)ret->data);
+       if (ret->data != NULL) Free(ret->data);
        ret->data=s;
        ret->length=(int)len;
        if (a != NULL) (*a)=ret;
@@ -240,7 +257,7 @@
 err:
        ASN1err(ASN1_F_D2I_ASN1_INTEGER,i);
        if ((ret != NULL) && ((a == NULL) || (*a != ret)))
-               ASN1_INTEGER_free(ret);
+               M_ASN1_INTEGER_free(ret);
        return(NULL);
        }
 
@@ -260,7 +277,7 @@
 
        if ((a == NULL) || ((*a) == NULL))
                {
-               if ((ret=ASN1_INTEGER_new()) == NULL) return(NULL);
+               if ((ret=M_ASN1_INTEGER_new()) == NULL) return(NULL);
                ret->type=V_ASN1_INTEGER;
                }
        else
@@ -289,7 +306,8 @@
                goto err;
                }
        to=s;
-               ret->type=V_ASN1_INTEGER;
+       ret->type=V_ASN1_INTEGER;
+       if(len) {
                if ((*p == 0) && (len != 1))
                        {
                        p++;
@@ -297,8 +315,9 @@
                        }
                memcpy(s,p,(int)len);
                p+=len;
+       }
 
-       if (ret->data != NULL) Free((char *)ret->data);
+       if (ret->data != NULL) Free(ret->data);
        ret->data=s;
        ret->length=(int)len;
        if (a != NULL) (*a)=ret;
@@ -307,7 +326,7 @@
 err:
        ASN1err(ASN1_F_D2I_ASN1_UINTEGER,i);
        if ((ret != NULL) && ((a == NULL) || (*a != ret)))
-               ASN1_INTEGER_free(ret);
+               M_ASN1_INTEGER_free(ret);
        return(NULL);
        }
 
@@ -321,7 +340,7 @@
        if (a->length < (sizeof(long)+1))
                {
                if (a->data != NULL)
-                       Free((char *)a->data);
+                       Free(a->data);
                if ((a->data=(unsigned char *)Malloc(sizeof(long)+1)) != NULL)
                        memset((char *)a->data,0,sizeof(long)+1);
                }
@@ -385,7 +404,7 @@
        int len,j;
 
        if (ai == NULL)
-               ret=ASN1_INTEGER_new();
+               ret=M_ASN1_INTEGER_new();
        else
                ret=ai;
        if (ret == NULL)
@@ -401,7 +420,7 @@
        ret->length=BN_bn2bin(bn,ret->data);
        return(ret);
 err:
-       if (ret != ai) ASN1_INTEGER_free(ret);
+       if (ret != ai) M_ASN1_INTEGER_free(ret);
        return(NULL);
        }
 
Index: opensa/openssl/crypto/asn1/a_object.c
diff -u opensa/openssl/crypto/asn1/a_object.c:1.1 
opensa/openssl/crypto/asn1/a_object.c:1.2
--- opensa/openssl/crypto/asn1/a_object.c:1.1   Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/a_object.c       Thu Mar  2 21:11:50 2000
@@ -222,8 +222,8 @@
                }
        if ((ret->data == NULL) || (ret->length < len))
                {
-               if (ret->data != NULL) Free((char *)ret->data);
-               ret->data=(unsigned char *)Malloc((int)len);
+               if (ret->data != NULL) Free(ret->data);
+               ret->data=(unsigned char *)Malloc(len ? (int)len : 1);
                ret->flags|=ASN1_OBJECT_FLAG_DYNAMIC_DATA;
                if (ret->data == NULL)
                        { i=ERR_R_MALLOC_FAILURE; goto err; }
@@ -269,7 +269,7 @@
        if (a == NULL) return;
        if (a->flags & ASN1_OBJECT_FLAG_DYNAMIC_STRINGS)
                {
-#ifndef CONST_STRICT /* disable purely for compile-time strict const checking. Doing 
this on a "real" compile will cause mempory leaks */
+#ifndef CONST_STRICT /* disable purely for compile-time strict const checking. Doing 
+this on a "real" compile will cause memory leaks */
                if (a->sn != NULL) Free((void *)a->sn);
                if (a->ln != NULL) Free((void *)a->ln);
 #endif
Index: opensa/openssl/crypto/asn1/a_octet.c
diff -u opensa/openssl/crypto/asn1/a_octet.c:1.1 
opensa/openssl/crypto/asn1/a_octet.c:1.2
--- opensa/openssl/crypto/asn1/a_octet.c:1.1    Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/a_octet.c        Thu Mar  2 21:11:50 2000
@@ -60,11 +60,23 @@
 #include "cryptlib.h"
 #include <openssl/asn1.h>
 
+ASN1_OCTET_STRING *ASN1_OCTET_STRING_new(void)
+{ return M_ASN1_OCTET_STRING_new(); }
+
+void ASN1_OCTET_STRING_free(ASN1_OCTET_STRING *x)
+{ M_ASN1_OCTET_STRING_free(x); }
+
+ASN1_OCTET_STRING *ASN1_OCTET_STRING_dup(ASN1_OCTET_STRING *x)
+{ return M_ASN1_OCTET_STRING_dup(x); }
+
+int ASN1_OCTET_STRING_cmp(ASN1_OCTET_STRING *a, ASN1_OCTET_STRING *b)
+{ return M_ASN1_OCTET_STRING_cmp(a, b); }
+
+int ASN1_OCTET_STRING_set(ASN1_OCTET_STRING *x, unsigned char *d, int len)
+{ return M_ASN1_OCTET_STRING_set(x, d, len); }
+
 int i2d_ASN1_OCTET_STRING(ASN1_OCTET_STRING *a, unsigned char **pp)
-       {
-       return(i2d_ASN1_bytes((ASN1_STRING *)a,pp,
-               V_ASN1_OCTET_STRING,V_ASN1_UNIVERSAL));
-       }
+{ return M_i2d_ASN1_OCTET_STRING(a, pp); }
 
 ASN1_OCTET_STRING *d2i_ASN1_OCTET_STRING(ASN1_OCTET_STRING **a,
             unsigned char **pp, long length)
Index: opensa/openssl/crypto/asn1/a_print.c
diff -u opensa/openssl/crypto/asn1/a_print.c:1.1 
opensa/openssl/crypto/asn1/a_print.c:1.2
--- opensa/openssl/crypto/asn1/a_print.c:1.1    Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/a_print.c        Thu Mar  2 21:11:50 2000
@@ -60,6 +60,12 @@
 #include "cryptlib.h"
 #include <openssl/asn1.h>
 
+ASN1_IA5STRING *ASN1_IA5STRING_new(void)
+{ return M_ASN1_IA5STRING_new();}
+
+void ASN1_IA5STRING_free(ASN1_IA5STRING *x)
+{ M_ASN1_IA5STRING_free(x);}
+
 int i2d_ASN1_IA5STRING(ASN1_IA5STRING *a, unsigned char **pp)
        { return(M_i2d_ASN1_IA5STRING(a,pp)); }
 
@@ -67,15 +73,30 @@
             long l)
        { return(M_d2i_ASN1_IA5STRING(a,pp,l)); }
 
+ASN1_T61STRING *ASN1_T61STRING_new(void)
+{ return M_ASN1_T61STRING_new();}
+
+void ASN1_T61STRING_free(ASN1_T61STRING *x)
+{ M_ASN1_T61STRING_free(x);}
+
 ASN1_T61STRING *d2i_ASN1_T61STRING(ASN1_T61STRING **a, unsigned char **pp,
             long l)
        { return(M_d2i_ASN1_T61STRING(a,pp,l)); }
 
+ASN1_PRINTABLESTRING *ASN1_PRINTABLESTRING_new(void)
+{ return M_ASN1_PRINTABLESTRING_new();}
+
+void ASN1_PRINTABLESTRING_free(ASN1_PRINTABLESTRING *x)
+{ M_ASN1_PRINTABLESTRING_free(x);}
+
 ASN1_PRINTABLESTRING *d2i_ASN1_PRINTABLESTRING(ASN1_PRINTABLESTRING **a,
             unsigned char **pp, long l)
        { return(M_d2i_ASN1_PRINTABLESTRING(a,pp,
             l)); }
 
+int i2d_ASN1_PRINTABLESTRING(ASN1_PRINTABLESTRING *a, unsigned char **pp)
+       { return(M_i2d_ASN1_PRINTABLESTRING(a,pp)); }
+
 int i2d_ASN1_PRINTABLE(ASN1_STRING *a, unsigned char **pp)
        { return(M_i2d_ASN1_PRINTABLE(a,pp)); }
 
@@ -149,6 +170,11 @@
        return(1);
        }
 
+ASN1_STRING *DIRECTORYSTRING_new(void)
+{ return M_DIRECTORYSTRING_new();}
+
+void DIRECTORYSTRING_free(ASN1_STRING *x)
+{ M_DIRECTORYSTRING_free(x);}
 
 int i2d_DIRECTORYSTRING(ASN1_STRING *a, unsigned char **pp)
        { return(M_i2d_DIRECTORYSTRING(a,pp)); }
@@ -156,6 +182,12 @@
 ASN1_STRING *d2i_DIRECTORYSTRING(ASN1_STRING **a, unsigned char **pp,
             long l)
        { return(M_d2i_DIRECTORYSTRING(a,pp,l)); }
+
+ASN1_STRING *DISPLAYTEXT_new(void)
+{ return M_DISPLAYTEXT_new();}
+
+void DISPLAYTEXT_free(ASN1_STRING *x)
+{ M_DISPLAYTEXT_free(x);}
 
 int i2d_DISPLAYTEXT(ASN1_STRING *a, unsigned char **pp)
        { return(M_i2d_DISPLAYTEXT(a,pp)); }
Index: opensa/openssl/crypto/asn1/a_sign.c
diff -u opensa/openssl/crypto/asn1/a_sign.c:1.1 opensa/openssl/crypto/asn1/a_sign.c:1.2
--- opensa/openssl/crypto/asn1/a_sign.c:1.1     Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/a_sign.c Thu Mar  2 21:11:50 2000
@@ -58,10 +58,13 @@
 
 #include <stdio.h>
 #include <time.h>
-#include <sys/types.h>
-#include <sys/stat.h>
 
 #include "cryptlib.h"
+
+#ifndef NO_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+
 #include <openssl/bn.h>
 #include <openssl/evp.h>
 #include <openssl/x509.h>
@@ -126,11 +129,11 @@
                ASN1err(ASN1_F_ASN1_SIGN,ERR_R_EVP_LIB);
                goto err;
                }
-       if (signature->data != NULL) Free((char *)signature->data);
+       if (signature->data != NULL) Free(signature->data);
        signature->data=buf_out;
        buf_out=NULL;
        signature->length=outl;
-       /* In the interests of compatability, I'll make sure that
+       /* In the interests of compatibility, I'll make sure that
         * the bit string has a 'not-used bits' value of 0
         */
        signature->flags&= ~(ASN1_STRING_FLAG_BITS_LEFT|0x07);
@@ -138,8 +141,8 @@
 err:
        memset(&ctx,0,sizeof(ctx));
        if (buf_in != NULL)
-               { memset((char *)buf_in,0,(unsigned int)inl); Free((char *)buf_in); }
+               { memset((char *)buf_in,0,(unsigned int)inl); Free(buf_in); }
        if (buf_out != NULL)
-               { memset((char *)buf_out,0,outll); Free((char *)buf_out); }
+               { memset((char *)buf_out,0,outll); Free(buf_out); }
        return(outl);
        }
Index: opensa/openssl/crypto/asn1/a_time.c
diff -u opensa/openssl/crypto/asn1/a_time.c:1.1 opensa/openssl/crypto/asn1/a_time.c:1.2
--- opensa/openssl/crypto/asn1/a_time.c:1.1     Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/a_time.c Thu Mar  2 21:11:50 2000
@@ -66,6 +66,12 @@
 #include "cryptlib.h"
 #include <openssl/asn1.h>
 
+ASN1_TIME *ASN1_TIME_new(void)
+{ return M_ASN1_TIME_new(); }
+
+void ASN1_TIME_free(ASN1_TIME *x)
+{ M_ASN1_TIME_free(x); }
+
 int i2d_ASN1_TIME(ASN1_TIME *a, unsigned char **pp)
        {
 #ifdef CHARSET_EBCDIC
Index: opensa/openssl/crypto/asn1/a_type.c
diff -u opensa/openssl/crypto/asn1/a_type.c:1.1 opensa/openssl/crypto/asn1/a_type.c:1.2
--- opensa/openssl/crypto/asn1/a_type.c:1.1     Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/a_type.c Thu Mar  2 21:11:50 2000
@@ -282,7 +282,7 @@
        {
        if (a == NULL) return;
        ASN1_TYPE_component_free(a);
-       Free((char *)(char *)a);
+       Free(a);
        }
 
 int ASN1_TYPE_get(ASN1_TYPE *a)
Index: opensa/openssl/crypto/asn1/a_utctm.c
diff -u opensa/openssl/crypto/asn1/a_utctm.c:1.1 
opensa/openssl/crypto/asn1/a_utctm.c:1.2
--- opensa/openssl/crypto/asn1/a_utctm.c:1.1    Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/a_utctm.c        Thu Mar  2 21:11:50 2000
@@ -66,6 +66,12 @@
 #include "cryptlib.h"
 #include <openssl/asn1.h>
 
+ASN1_UTCTIME *ASN1_UTCTIME_new(void)
+{ return M_ASN1_UTCTIME_new(); }
+
+void ASN1_UTCTIME_free(ASN1_UTCTIME *x)
+{ M_ASN1_UTCTIME_free(x); }
+
 int i2d_ASN1_UTCTIME(ASN1_UTCTIME *a, unsigned char **pp)
        {
 #ifndef CHARSET_EBCDIC
@@ -109,7 +115,7 @@
        return(ret);
 err:
        if ((ret != NULL) && ((a == NULL) || (*a != ret)))
-               ASN1_UTCTIME_free(ret);
+               M_ASN1_UTCTIME_free(ret);
        return(NULL);
        }
 
@@ -192,7 +198,7 @@
 #endif
 
        if (s == NULL)
-               s=ASN1_UTCTIME_new();
+               s=M_ASN1_UTCTIME_new();
        if (s == NULL)
                return(NULL);
 
Index: opensa/openssl/crypto/asn1/a_utf8.c
diff -u opensa/openssl/crypto/asn1/a_utf8.c:1.1 opensa/openssl/crypto/asn1/a_utf8.c:1.2
--- opensa/openssl/crypto/asn1/a_utf8.c:1.1     Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/a_utf8.c Thu Mar  2 21:11:50 2000
@@ -60,6 +60,12 @@
 #include "cryptlib.h"
 #include <openssl/asn1.h>
 
+ASN1_UTF8STRING *ASN1_UTF8STRING_new(void)
+{ return M_ASN1_UTF8STRING_new();}
+
+void ASN1_UTF8STRING_free(ASN1_UTF8STRING *x)
+{ M_ASN1_UTF8STRING_free(x);}
+
 int i2d_ASN1_UTF8STRING(ASN1_UTF8STRING *a, unsigned char **pp)
        {
        return(i2d_ASN1_bytes((ASN1_STRING *)a,pp,
@@ -81,3 +87,152 @@
        return(ret);
        }
 
+
+/* UTF8 utilities */
+
+/* This parses a UTF8 string one character at a time. It is passed a pointer
+ * to the string and the length of the string. It sets 'value' to the value of
+ * the current character. It returns the number of characters read or a
+ * negative error code:
+ * -1 = string too short
+ * -2 = illegal character
+ * -3 = subsequent characters not of the form 10xxxxxx
+ * -4 = character encoded incorrectly (not minimal length).
+ */
+
+int UTF8_getc(const unsigned char *str, int len, unsigned long *val)
+{
+       const unsigned char *p;
+       unsigned long value;
+       int ret;
+       if(len <= 0) return 0;
+       p = str;
+
+       /* Check syntax and work out the encoded value (if correct) */
+       if((*p & 0x80) == 0) {
+               value = *p++ & 0x7f;
+               ret = 1;
+       } else if((*p & 0xe0) == 0xc0) {
+               if(len < 2) return -1;
+               if((p[1] & 0xc0) != 0x80) return -3;
+               value = (*p++ & 0x1f) << 6;
+               value |= *p++ & 0x3f;
+               if(value < 0x80) return -4;
+               ret = 2;
+       } else if((*p & 0xf0) == 0xe0) {
+               if(len < 3) return -1;
+               if( ((p[1] & 0xc0) != 0x80)
+                  || ((p[2] & 0xc0) != 0x80) ) return -3;
+               value = (*p++ & 0xf) << 12;
+               value |= (*p++ & 0x3f) << 6;
+               value |= *p++ & 0x3f;
+               if(value < 0x800) return -4;
+               ret = 3;
+       } else if((*p & 0xf8) == 0xf0) {
+               if(len < 4) return -1;
+               if( ((p[1] & 0xc0) != 0x80)
+                  || ((p[2] & 0xc0) != 0x80) 
+                  || ((p[3] & 0xc0) != 0x80) ) return -3;
+               value = (*p++ & 0x7) << 18;
+               value |= (*p++ & 0x3f) << 12;
+               value |= (*p++ & 0x3f) << 6;
+               value |= *p++ & 0x3f;
+               if(value < 0x10000) return -4;
+               ret = 4;
+       } else if((*p & 0xfc) == 0xf8) {
+               if(len < 5) return -1;
+               if( ((p[1] & 0xc0) != 0x80)
+                  || ((p[2] & 0xc0) != 0x80) 
+                  || ((p[3] & 0xc0) != 0x80) 
+                  || ((p[4] & 0xc0) != 0x80) ) return -3;
+               value = (*p++ & 0x3) << 24;
+               value |= (*p++ & 0x3f) << 18;
+               value |= (*p++ & 0x3f) << 12;
+               value |= (*p++ & 0x3f) << 6;
+               value |= *p++ & 0x3f;
+               if(value < 0x200000) return -4;
+               ret = 5;
+       } else if((*p & 0xfe) == 0xfc) {
+               if(len < 6) return -1;
+               if( ((p[1] & 0xc0) != 0x80)
+                  || ((p[2] & 0xc0) != 0x80) 
+                  || ((p[3] & 0xc0) != 0x80) 
+                  || ((p[4] & 0xc0) != 0x80) 
+                  || ((p[5] & 0xc0) != 0x80) ) return -3;
+               value = (*p++ & 0x1) << 30;
+               value |= (*p++ & 0x3f) << 24;
+               value |= (*p++ & 0x3f) << 18;
+               value |= (*p++ & 0x3f) << 12;
+               value |= (*p++ & 0x3f) << 6;
+               value |= *p++ & 0x3f;
+               if(value < 0x4000000) return -4;
+               ret = 6;
+       } else return -2;
+       *val = value;
+       return ret;
+}
+
+/* This takes a character 'value' and writes the UTF8 encoded value in
+ * 'str' where 'str' is a buffer containing 'len' characters. Returns
+ * the number of characters written or -1 if 'len' is too small. 'str' can
+ * be set to NULL in which case it just returns the number of characters.
+ * It will need at most 6 characters.
+ */
+
+int UTF8_putc(unsigned char *str, int len, unsigned long value)
+{
+       if(!str) len = 6;       /* Maximum we will need */
+       else if(len <= 0) return -1;
+       if(value < 0x80) {
+               if(str) *str = (unsigned char)value;
+               return 1;
+       }
+       if(value < 0x800) {
+               if(len < 2) return -1;
+               if(str) {
+                       *str++ = (unsigned char)(((value >> 6) & 0x1f) | 0xc0);
+                       *str = (unsigned char)((value & 0x3f) | 0x80);
+               }
+               return 2;
+       }
+       if(value < 0x10000) {
+               if(len < 3) return -1;
+               if(str) {
+                       *str++ = (unsigned char)(((value >> 12) & 0xf) | 0xe0);
+                       *str++ = (unsigned char)(((value >> 6) & 0x3f) | 0x80);
+                       *str = (unsigned char)((value & 0x3f) | 0x80);
+               }
+               return 3;
+       }
+       if(value < 0x200000) {
+               if(len < 4) return -1;
+               if(str) {
+                       *str++ = (unsigned char)(((value >> 18) & 0x7) | 0xf0);
+                       *str++ = (unsigned char)(((value >> 12) & 0x3f) | 0x80);
+                       *str++ = (unsigned char)(((value >> 6) & 0x3f) | 0x80);
+                       *str = (unsigned char)((value & 0x3f) | 0x80);
+               }
+               return 4;
+       }
+       if(value < 0x4000000) {
+               if(len < 5) return -1;
+               if(str) {
+                       *str++ = (unsigned char)(((value >> 24) & 0x3) | 0xf8);
+                       *str++ = (unsigned char)(((value >> 18) & 0x3f) | 0x80);
+                       *str++ = (unsigned char)(((value >> 12) & 0x3f) | 0x80);
+                       *str++ = (unsigned char)(((value >> 6) & 0x3f) | 0x80);
+                       *str = (unsigned char)((value & 0x3f) | 0x80);
+               }
+               return 5;
+       }
+       if(len < 6) return -1;
+       if(str) {
+               *str++ = (unsigned char)(((value >> 30) & 0x1) | 0xfc);
+               *str++ = (unsigned char)(((value >> 24) & 0x3f) | 0x80);
+               *str++ = (unsigned char)(((value >> 18) & 0x3f) | 0x80);
+               *str++ = (unsigned char)(((value >> 12) & 0x3f) | 0x80);
+               *str++ = (unsigned char)(((value >> 6) & 0x3f) | 0x80);
+               *str = (unsigned char)((value & 0x3f) | 0x80);
+       }
+       return 6;
+}
Index: opensa/openssl/crypto/asn1/a_verify.c
diff -u opensa/openssl/crypto/asn1/a_verify.c:1.1 
opensa/openssl/crypto/asn1/a_verify.c:1.2
--- opensa/openssl/crypto/asn1/a_verify.c:1.1   Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/a_verify.c       Thu Mar  2 21:11:50 2000
@@ -58,10 +58,13 @@
 
 #include <stdio.h>
 #include <time.h>
-#include <sys/types.h>
-#include <sys/stat.h>
 
 #include "cryptlib.h"
+
+#ifndef NO_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+
 #include <openssl/bn.h>
 #include <openssl/x509.h>
 #include <openssl/objects.h>
@@ -98,7 +101,7 @@
        EVP_VerifyUpdate(&ctx,(unsigned char *)buf_in,inl);
 
        memset(buf_in,0,(unsigned int)inl);
-       Free((char *)buf_in);
+       Free(buf_in);
 
        if (EVP_VerifyFinal(&ctx,(unsigned char *)signature->data,
                        (unsigned int)signature->length,pkey) <= 0)
Index: opensa/openssl/crypto/asn1/a_vis.c
diff -u opensa/openssl/crypto/asn1/a_vis.c:1.1 opensa/openssl/crypto/asn1/a_vis.c:1.2
--- opensa/openssl/crypto/asn1/a_vis.c:1.1      Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/a_vis.c  Thu Mar  2 21:11:50 2000
@@ -60,6 +60,12 @@
 #include "cryptlib.h"
 #include <openssl/asn1.h>
 
+ASN1_VISIBLESTRING *ASN1_VISIBLESTRING_new(void)
+{ return M_ASN1_VISIBLESTRING_new(); }
+
+void ASN1_VISIBLESTRING_free(ASN1_VISIBLESTRING *x)
+{ M_ASN1_VISIBLESTRING_free(x); }
+
 int i2d_ASN1_VISIBLESTRING(ASN1_VISIBLESTRING *a, unsigned char **pp)
        {
        return(i2d_ASN1_bytes((ASN1_STRING *)a,pp,
Index: opensa/openssl/crypto/asn1/asn1.h
diff -u opensa/openssl/crypto/asn1/asn1.h:1.1 opensa/openssl/crypto/asn1/asn1.h:1.2
--- opensa/openssl/crypto/asn1/asn1.h:1.1       Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/asn1.h   Thu Mar  2 21:11:50 2000
@@ -68,6 +68,10 @@
 #include <openssl/stack.h>
 #include <openssl/safestack.h>
 
+#ifdef VMS
+#include <openssl/vms_idhacks.h>
+#endif
+
 #define V_ASN1_UNIVERSAL               0x00
 #define        V_ASN1_APPLICATION              0x40
 #define V_ASN1_CONTEXT_SPECIFIC                0x80
@@ -77,7 +81,7 @@
 #define V_ASN1_PRIMITIVE_TAG           0x1f
 #define V_ASN1_PRIMATIVE_TAG           0x1f
 
-#define V_ASN1_APP_CHOOSE              -2      /* let the recipent choose */
+#define V_ASN1_APP_CHOOSE              -2      /* let the recipient choose */
 
 #define V_ASN1_UNDEF                   -1
 #define V_ASN1_EOC                     0
@@ -129,6 +133,13 @@
 #define B_ASN1_UNKNOWN         0x1000
 #define B_ASN1_UTF8STRING      0x2000
 
+/* For use with ASN1_mbstring_copy() */
+#define MBSTRING_FLAG          0x1000
+#define MBSTRING_ASC           (MBSTRING_FLAG|1)
+#define MBSTRING_BMP           (MBSTRING_FLAG|2)
+#define MBSTRING_UNIV          (MBSTRING_FLAG|3)
+#define MBSTRING_UTF8          (MBSTRING_FLAG|4)
+
 #define DECLARE_ASN1_SET_OF(type) \
 int i2d_ASN1_SET_OF_##type(STACK_OF(type) *a,unsigned char **pp, \
                           int (*func)(type *,unsigned char **), int ex_tag, \
@@ -165,7 +176,7 @@
        int tag;        /* tag from last 'get object' */
        int xclass;     /* class from last 'get object' */
        long slen;      /* length of last 'get object' */
-       unsigned char *max; /* largest value of p alowed */
+       unsigned char *max; /* largest value of p allowed */
        unsigned char *q;/* temporary variable */
        unsigned char **pp;/* variable */
        int line;       /* used in error processing */
@@ -199,8 +210,35 @@
         * handled correctly */
        long flags;
        } ASN1_STRING;
+
+#define STABLE_FLAGS_MALLOC    0x01
+#define STABLE_NO_MASK         0x02
+#define DIRSTRING_TYPE \
+ (B_ASN1_PRINTABLESTRING|B_ASN1_T61STRING|B_ASN1_BMPSTRING|B_ASN1_UTF8STRING)
+#define PKCS9STRING_TYPE (DIRSTRING_TYPE|B_ASN1_IA5STRING)
+
+typedef struct asn1_string_table_st {
+       int nid;
+       long minsize;
+       long maxsize;
+       unsigned long mask;
+       unsigned long flags;
+} ASN1_STRING_TABLE;
+
+DECLARE_STACK_OF(ASN1_STRING_TABLE)
+
+/* size limits: this stuff is taken straight from RFC2459 */
+
+#define ub_name                                32768
+#define ub_common_name                 64
+#define ub_locality_name               128
+#define ub_state_name                  128
+#define ub_organization_name           64
+#define ub_organization_unit_name      64
+#define ub_title                       64
+#define ub_email_address               128
 
-#ifndef DEBUG
+#ifdef NO_ASN1_TYPEDEFS
 #define ASN1_INTEGER           ASN1_STRING
 #define ASN1_ENUMERATED                ASN1_STRING
 #define ASN1_BIT_STRING                ASN1_STRING
@@ -234,6 +272,8 @@
 typedef struct asn1_string_st ASN1_UTF8STRING;
 #endif
 
+typedef int ASN1_NULL;
+
 typedef struct asn1_type_st
        {
        int type;
@@ -280,61 +320,59 @@
        char *data;
        ASN1_METHOD *meth;
        } ASN1_HEADER;
+
+/* This is used to contain a list of bit names */
+typedef struct BIT_STRING_BITNAME_st {
+       int bitnum;
+       const char *lname;
+       const char *sname;
+} BIT_STRING_BITNAME;
 
-#define ASN1_STRING_length(x)  ((x)->length)
-#define ASN1_STRING_type(x)    ((x)->type)
-#define ASN1_STRING_data(x)    ((x)->data)
 
+#define M_ASN1_STRING_length(x)        ((x)->length)
+#define M_ASN1_STRING_length_set(x, n) ((x)->length = (n))
+#define M_ASN1_STRING_type(x)  ((x)->type)
+#define M_ASN1_STRING_data(x)  ((x)->data)
+
 /* Macros for string operations */
-#define ASN1_BIT_STRING_new()  (ASN1_BIT_STRING *)\
+#define M_ASN1_BIT_STRING_new()        (ASN1_BIT_STRING *)\
                ASN1_STRING_type_new(V_ASN1_BIT_STRING)
-#define ASN1_BIT_STRING_free(a)        ASN1_STRING_free((ASN1_STRING *)a)
-#define ASN1_BIT_STRING_dup(a) (ASN1_BIT_STRING *)\
+#define M_ASN1_BIT_STRING_free(a)      ASN1_STRING_free((ASN1_STRING *)a)
+#define M_ASN1_BIT_STRING_dup(a) (ASN1_BIT_STRING *)\
                ASN1_STRING_dup((ASN1_STRING *)a)
-#define ASN1_BIT_STRING_cmp(a,b) ASN1_STRING_cmp(\
+#define M_ASN1_BIT_STRING_cmp(a,b) ASN1_STRING_cmp(\
                (ASN1_STRING *)a,(ASN1_STRING *)b)
-#define ASN1_BIT_STRING_set(a,b,c) ASN1_STRING_set((ASN1_STRING *)a,b,c)
-/* i2d_ASN1_BIT_STRING() is a function */
-/* d2i_ASN1_BIT_STRING() is a function */
+#define M_ASN1_BIT_STRING_set(a,b,c) ASN1_STRING_set((ASN1_STRING *)a,b,c)
 
-#define ASN1_INTEGER_new()     (ASN1_INTEGER *)\
+#define M_ASN1_INTEGER_new()   (ASN1_INTEGER *)\
                ASN1_STRING_type_new(V_ASN1_INTEGER)
-#define ASN1_INTEGER_free(a)           ASN1_STRING_free((ASN1_STRING *)a)
-#define ASN1_INTEGER_dup(a) (ASN1_INTEGER *)ASN1_STRING_dup((ASN1_STRING *)a)
-#define ASN1_INTEGER_cmp(a,b)  ASN1_STRING_cmp(\
+#define M_ASN1_INTEGER_free(a)         ASN1_STRING_free((ASN1_STRING *)a)
+#define M_ASN1_INTEGER_dup(a) (ASN1_INTEGER *)ASN1_STRING_dup((ASN1_STRING *)a)
+#define M_ASN1_INTEGER_cmp(a,b)        ASN1_STRING_cmp(\
                (ASN1_STRING *)a,(ASN1_STRING *)b)
-/* ASN1_INTEGER_set() is a function, also see BN_to_ASN1_INTEGER() */
-/* ASN1_INTEGER_get() is a function, also see ASN1_INTEGER_to_BN() */
-/* i2d_ASN1_INTEGER() is a function */
-/* d2i_ASN1_INTEGER() is a function */
 
-#define ASN1_ENUMERATED_new()  (ASN1_ENUMERATED *)\
+#define M_ASN1_ENUMERATED_new()        (ASN1_ENUMERATED *)\
                ASN1_STRING_type_new(V_ASN1_ENUMERATED)
-#define ASN1_ENUMERATED_free(a)                ASN1_STRING_free((ASN1_STRING *)a)
-#define ASN1_ENUMERATED_dup(a) (ASN1_ENUMERATED *)ASN1_STRING_dup((ASN1_STRING *)a)
-#define ASN1_ENUMERATED_cmp(a,b)       ASN1_STRING_cmp(\
+#define M_ASN1_ENUMERATED_free(a)      ASN1_STRING_free((ASN1_STRING *)a)
+#define M_ASN1_ENUMERATED_dup(a) (ASN1_ENUMERATED *)ASN1_STRING_dup((ASN1_STRING *)a)
+#define M_ASN1_ENUMERATED_cmp(a,b)     ASN1_STRING_cmp(\
                (ASN1_STRING *)a,(ASN1_STRING *)b)
-/* ASN1_ENUMERATED_set() is a function, also see BN_to_ASN1_ENUMERATED() */
-/* ASN1_ENUMERATED_get() is a function, also see ASN1_ENUMERATED_to_BN() */
-/* i2d_ASN1_ENUMERATED() is a function */
-/* d2i_ASN1_ENUMERATED() is a function */
 
-#define ASN1_OCTET_STRING_new()        (ASN1_OCTET_STRING *)\
+#define M_ASN1_OCTET_STRING_new()      (ASN1_OCTET_STRING *)\
                ASN1_STRING_type_new(V_ASN1_OCTET_STRING)
-#define ASN1_OCTET_STRING_free(a)      ASN1_STRING_free((ASN1_STRING *)a)
-#define ASN1_OCTET_STRING_dup(a) (ASN1_OCTET_STRING *)\
+#define M_ASN1_OCTET_STRING_free(a)    ASN1_STRING_free((ASN1_STRING *)a)
+#define M_ASN1_OCTET_STRING_dup(a) (ASN1_OCTET_STRING *)\
                ASN1_STRING_dup((ASN1_STRING *)a)
-#define ASN1_OCTET_STRING_cmp(a,b) ASN1_STRING_cmp(\
+#define M_ASN1_OCTET_STRING_cmp(a,b) ASN1_STRING_cmp(\
                (ASN1_STRING *)a,(ASN1_STRING *)b)
-#define ASN1_OCTET_STRING_set(a,b,c)   ASN1_STRING_set((ASN1_STRING *)a,b,c)
-#define ASN1_OCTET_STRING_print(a,b)   ASN1_STRING_print(a,(ASN1_STRING *)b)
+#define M_ASN1_OCTET_STRING_set(a,b,c) ASN1_STRING_set((ASN1_STRING *)a,b,c)
+#define M_ASN1_OCTET_STRING_print(a,b) ASN1_STRING_print(a,(ASN1_STRING *)b)
 #define M_i2d_ASN1_OCTET_STRING(a,pp) \
                i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_OCTET_STRING,\
-               V_ASN1_OCTET_STRING)
-/* d2i_ASN1_OCTET_STRING() is a function */
+               V_ASN1_UNIVERSAL)
 
-#define ASN1_PRINTABLE_new()   ASN1_STRING_type_new(V_ASN1_T61STRING)
-#define ASN1_PRINTABLE_free(a) ASN1_STRING_free((ASN1_STRING *)a)
+#define M_ASN1_PRINTABLE_new() ASN1_STRING_type_new(V_ASN1_T61STRING)
+#define M_ASN1_PRINTABLE_free(a)       ASN1_STRING_free((ASN1_STRING *)a)
 #define M_i2d_ASN1_PRINTABLE(a,pp) i2d_ASN1_bytes((ASN1_STRING *)a,\
                pp,a->type,V_ASN1_UNIVERSAL)
 #define M_d2i_ASN1_PRINTABLE(a,pp,l) \
@@ -345,10 +383,11 @@
                        B_ASN1_BIT_STRING| \
                        B_ASN1_UNIVERSALSTRING|\
                        B_ASN1_BMPSTRING|\
+                       B_ASN1_UTF8STRING|\
                        B_ASN1_UNKNOWN)
 
-#define DIRECTORYSTRING_new() ASN1_STRING_type_new(V_ASN1_PRINTABLESTRING)
-#define DIRECTORYSTRING_free(a)        ASN1_STRING_free((ASN1_STRING *)a)
+#define M_DIRECTORYSTRING_new() ASN1_STRING_type_new(V_ASN1_PRINTABLESTRING)
+#define M_DIRECTORYSTRING_free(a)      ASN1_STRING_free((ASN1_STRING *)a)
 #define M_i2d_DIRECTORYSTRING(a,pp) i2d_ASN1_bytes((ASN1_STRING *)a,\
                                                pp,a->type,V_ASN1_UNIVERSAL)
 #define M_d2i_DIRECTORYSTRING(a,pp,l) \
@@ -359,8 +398,8 @@
                        B_ASN1_UNIVERSALSTRING|\
                        B_ASN1_UTF8STRING)
 
-#define DISPLAYTEXT_new() ASN1_STRING_type_new(V_ASN1_VISIBLESTRING)
-#define DISPLAYTEXT_free(a) ASN1_STRING_free((ASN1_STRING *)a)
+#define M_DISPLAYTEXT_new() ASN1_STRING_type_new(V_ASN1_VISIBLESTRING)
+#define M_DISPLAYTEXT_free(a) ASN1_STRING_free((ASN1_STRING *)a)
 #define M_i2d_DISPLAYTEXT(a,pp) i2d_ASN1_bytes((ASN1_STRING *)a,\
                                                pp,a->type,V_ASN1_UNIVERSAL)
 #define M_d2i_DISPLAYTEXT(a,pp,l) \
@@ -369,9 +408,9 @@
                        B_ASN1_BMPSTRING|\
                        B_ASN1_UTF8STRING)
 
-#define ASN1_PRINTABLESTRING_new() (ASN1_PRINTABLESTRING *)\
+#define M_ASN1_PRINTABLESTRING_new() (ASN1_PRINTABLESTRING *)\
                ASN1_STRING_type_new(V_ASN1_PRINTABLESTRING)
-#define ASN1_PRINTABLESTRING_free(a)   ASN1_STRING_free((ASN1_STRING *)a)
+#define M_ASN1_PRINTABLESTRING_free(a) ASN1_STRING_free((ASN1_STRING *)a)
 #define M_i2d_ASN1_PRINTABLESTRING(a,pp) \
                i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_PRINTABLESTRING,\
                V_ASN1_UNIVERSAL)
@@ -379,9 +418,9 @@
                (ASN1_PRINTABLESTRING *)d2i_ASN1_type_bytes\
                ((ASN1_STRING **)a,pp,l,B_ASN1_PRINTABLESTRING)
 
-#define ASN1_T61STRING_new()   (ASN1_T61STRING_STRING *)\
+#define M_ASN1_T61STRING_new() (ASN1_T61STRING *)\
                ASN1_STRING_type_new(V_ASN1_T61STRING)
-#define ASN1_T61STRING_free(a) ASN1_STRING_free((ASN1_STRING *)a)
+#define M_ASN1_T61STRING_free(a)       ASN1_STRING_free((ASN1_STRING *)a)
 #define M_i2d_ASN1_T61STRING(a,pp) \
                i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_T61STRING,\
                V_ASN1_UNIVERSAL)
@@ -389,10 +428,10 @@
                (ASN1_T61STRING *)d2i_ASN1_type_bytes\
                ((ASN1_STRING **)a,pp,l,B_ASN1_T61STRING)
 
-#define ASN1_IA5STRING_new()   (ASN1_IA5STRING *)\
+#define M_ASN1_IA5STRING_new() (ASN1_IA5STRING *)\
                ASN1_STRING_type_new(V_ASN1_IA5STRING)
-#define ASN1_IA5STRING_free(a) ASN1_STRING_free((ASN1_STRING *)a)
-#define ASN1_IA5STRING_dup(a)  \
+#define M_ASN1_IA5STRING_free(a)       ASN1_STRING_free((ASN1_STRING *)a)
+#define M_ASN1_IA5STRING_dup(a)        \
                        (ASN1_IA5STRING *)ASN1_STRING_dup((ASN1_STRING *)a)
 #define M_i2d_ASN1_IA5STRING(a,pp) \
                i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_IA5STRING,\
@@ -401,38 +440,25 @@
                (ASN1_IA5STRING *)d2i_ASN1_type_bytes((ASN1_STRING **)a,pp,l,\
                        B_ASN1_IA5STRING)
 
-#define ASN1_UTCTIME_new()     (ASN1_UTCTIME *)\
+#define M_ASN1_UTCTIME_new()   (ASN1_UTCTIME *)\
                ASN1_STRING_type_new(V_ASN1_UTCTIME)
-#define ASN1_UTCTIME_free(a)   ASN1_STRING_free((ASN1_STRING *)a)
-#define ASN1_UTCTIME_dup(a) (ASN1_UTCTIME *)ASN1_STRING_dup((ASN1_STRING *)a)
-/* i2d_ASN1_UTCTIME() is a function */
-/* d2i_ASN1_UTCTIME() is a function */
-/* ASN1_UTCTIME_set() is a function */
-/* ASN1_UTCTIME_check() is a function */
+#define M_ASN1_UTCTIME_free(a) ASN1_STRING_free((ASN1_STRING *)a)
+#define M_ASN1_UTCTIME_dup(a) (ASN1_UTCTIME *)ASN1_STRING_dup((ASN1_STRING *)a)
 
-#define ASN1_GENERALIZEDTIME_new()     (ASN1_GENERALIZEDTIME *)\
+#define M_ASN1_GENERALIZEDTIME_new()   (ASN1_GENERALIZEDTIME *)\
                ASN1_STRING_type_new(V_ASN1_GENERALIZEDTIME)
-#define ASN1_GENERALIZEDTIME_free(a)   ASN1_STRING_free((ASN1_STRING *)a)
-#define ASN1_GENERALIZEDTIME_dup(a) (ASN1_GENERALIZEDTIME *)ASN1_STRING_dup(\
+#define M_ASN1_GENERALIZEDTIME_free(a) ASN1_STRING_free((ASN1_STRING *)a)
+#define M_ASN1_GENERALIZEDTIME_dup(a) (ASN1_GENERALIZEDTIME *)ASN1_STRING_dup(\
        (ASN1_STRING *)a)
-/* i2d_ASN1_GENERALIZEDTIME() is a function */
-/* d2i_ASN1_GENERALIZEDTIME() is a function */
-/* ASN1_GENERALIZEDTIME_set() is a function */
-/* ASN1_GENERALIZEDTIME_check() is a function */
 
-#define ASN1_TIME_new()        (ASN1_TIME *)\
+#define M_ASN1_TIME_new()      (ASN1_TIME *)\
                ASN1_STRING_type_new(V_ASN1_UTCTIME)
-#define ASN1_TIME_free(a)      ASN1_STRING_free((ASN1_STRING *)a)
-#define ASN1_TIME_dup(a) (ASN1_TIME *)ASN1_STRING_dup((ASN1_STRING *)a)
+#define M_ASN1_TIME_free(a)    ASN1_STRING_free((ASN1_STRING *)a)
+#define M_ASN1_TIME_dup(a) (ASN1_TIME *)ASN1_STRING_dup((ASN1_STRING *)a)
 
-/* i2d_ASN1_TIME() is a function */
-/* d2i_ASN1_TIME() is a function */
-/* ASN1_TIME_set() is a function */
-/* ASN1_TIME_check() is a function */
-
-#define ASN1_GENERALSTRING_new()       (ASN1_GENERALSTRING *)\
+#define M_ASN1_GENERALSTRING_new()     (ASN1_GENERALSTRING *)\
                ASN1_STRING_type_new(V_ASN1_GENERALSTRING)
-#define ASN1_GENERALSTRING_free(a)     ASN1_STRING_free((ASN1_STRING *)a)
+#define M_ASN1_GENERALSTRING_free(a)   ASN1_STRING_free((ASN1_STRING *)a)
 #define M_i2d_ASN1_GENERALSTRING(a,pp) \
                i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_GENERALSTRING,\
                        V_ASN1_UNIVERSAL)
@@ -440,9 +466,9 @@
                (ASN1_GENERALSTRING *)d2i_ASN1_type_bytes\
                ((ASN1_STRING **)a,pp,l,B_ASN1_GENERALSTRING)
 
-#define ASN1_UNIVERSALSTRING_new()     (ASN1_UNIVERSALSTRING *)\
+#define M_ASN1_UNIVERSALSTRING_new()   (ASN1_UNIVERSALSTRING *)\
                ASN1_STRING_type_new(V_ASN1_UNIVERSALSTRING)
-#define ASN1_UNIVERSALSTRING_free(a)   ASN1_STRING_free((ASN1_STRING *)a)
+#define M_ASN1_UNIVERSALSTRING_free(a) ASN1_STRING_free((ASN1_STRING *)a)
 #define M_i2d_ASN1_UNIVERSALSTRING(a,pp) \
                i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_UNIVERSALSTRING,\
                        V_ASN1_UNIVERSAL)
@@ -450,9 +476,9 @@
                (ASN1_UNIVERSALSTRING *)d2i_ASN1_type_bytes\
                ((ASN1_STRING **)a,pp,l,B_ASN1_UNIVERSALSTRING)
 
-#define ASN1_BMPSTRING_new()   (ASN1_BMPSTRING *)\
+#define M_ASN1_BMPSTRING_new() (ASN1_BMPSTRING *)\
                ASN1_STRING_type_new(V_ASN1_BMPSTRING)
-#define ASN1_BMPSTRING_free(a) ASN1_STRING_free((ASN1_STRING *)a)
+#define M_ASN1_BMPSTRING_free(a)       ASN1_STRING_free((ASN1_STRING *)a)
 #define M_i2d_ASN1_BMPSTRING(a,pp) \
                i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_BMPSTRING,\
                        V_ASN1_UNIVERSAL)
@@ -460,9 +486,9 @@
                (ASN1_BMPSTRING *)d2i_ASN1_type_bytes\
                ((ASN1_STRING **)a,pp,l,B_ASN1_BMPSTRING)
 
-#define ASN1_VISIBLESTRING_new()       (ASN1_VISIBLESTRING *)\
+#define M_ASN1_VISIBLESTRING_new()     (ASN1_VISIBLESTRING *)\
                ASN1_STRING_type_new(V_ASN1_VISIBLESTRING)
-#define ASN1_VISIBLESTRING_free(a)     ASN1_STRING_free((ASN1_STRING *)a)
+#define M_ASN1_VISIBLESTRING_free(a)   ASN1_STRING_free((ASN1_STRING *)a)
 #define M_i2d_ASN1_VISIBLESTRING(a,pp) \
                i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_VISIBLESTRING,\
                        V_ASN1_UNIVERSAL)
@@ -470,9 +496,9 @@
                (ASN1_VISIBLESTRING *)d2i_ASN1_type_bytes\
                ((ASN1_STRING **)a,pp,l,B_ASN1_VISIBLESTRING)
 
-#define ASN1_UTF8STRING_new()  (ASN1_UTF8STRING *)\
+#define M_ASN1_UTF8STRING_new()        (ASN1_UTF8STRING *)\
                ASN1_STRING_type_new(V_ASN1_UTF8STRING)
-#define ASN1_UTF8STRING_free(a)        ASN1_STRING_free((ASN1_STRING *)a)
+#define M_ASN1_UTF8STRING_free(a)      ASN1_STRING_free((ASN1_STRING *)a)
 #define M_i2d_ASN1_UTF8STRING(a,pp) \
                i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_UTF8STRING,\
                        V_ASN1_UNIVERSAL)
@@ -500,7 +526,7 @@
 DECLARE_STACK_OF(ASN1_OBJECT)
 DECLARE_ASN1_SET_OF(ASN1_OBJECT)
 
-ASN1_STRING *  ASN1_STRING_new(void );
+ASN1_STRING *  ASN1_STRING_new(void);
 void           ASN1_STRING_free(ASN1_STRING *a);
 ASN1_STRING *  ASN1_STRING_dup(ASN1_STRING *a);
 ASN1_STRING *  ASN1_STRING_type_new(int type );
@@ -508,23 +534,44 @@
   /* Since this is used to store all sorts of things, via macros, for now, make
      its data void * */
 int            ASN1_STRING_set(ASN1_STRING *str, const void *data, int len);
+int ASN1_STRING_length(ASN1_STRING *x);
+void ASN1_STRING_length_set(ASN1_STRING *x, int n);
+int ASN1_STRING_type(ASN1_STRING *x);
+unsigned char * ASN1_STRING_data(ASN1_STRING *x);
 
+ASN1_BIT_STRING *      ASN1_BIT_STRING_new(void);
+void           ASN1_BIT_STRING_free(ASN1_BIT_STRING *a);
 int            i2d_ASN1_BIT_STRING(ASN1_BIT_STRING *a,unsigned char **pp);
 ASN1_BIT_STRING *d2i_ASN1_BIT_STRING(ASN1_BIT_STRING **a,unsigned char **pp,
                        long length);
+int            ASN1_BIT_STRING_set(ASN1_BIT_STRING *a, unsigned char *d,
+                       int length );
 int            ASN1_BIT_STRING_set_bit(ASN1_BIT_STRING *a, int n, int value);
 int            ASN1_BIT_STRING_get_bit(ASN1_BIT_STRING *a, int n);
 
+#ifdef HEADER_BIO_H
+int ASN1_BIT_STRING_name_print(BIO *out, ASN1_BIT_STRING *bs,
+                               BIT_STRING_BITNAME *tbl, int indent);
+#endif
+int ASN1_BIT_STRING_num_asc(char *name, BIT_STRING_BITNAME *tbl);
+int ASN1_BIT_STRING_set_asc(ASN1_BIT_STRING *bs, char *name, int value,
+                               BIT_STRING_BITNAME *tbl);
 
 int            i2d_ASN1_BOOLEAN(int a,unsigned char **pp);
 int            d2i_ASN1_BOOLEAN(int *a,unsigned char **pp,long length);
 
+ASN1_INTEGER * ASN1_INTEGER_new(void);
+void           ASN1_INTEGER_free(ASN1_INTEGER *a);
 int            i2d_ASN1_INTEGER(ASN1_INTEGER *a,unsigned char **pp);
 ASN1_INTEGER *d2i_ASN1_INTEGER(ASN1_INTEGER **a,unsigned char **pp,
                        long length);
 ASN1_INTEGER *d2i_ASN1_UINTEGER(ASN1_INTEGER **a,unsigned char **pp,
                        long length);
+ASN1_INTEGER * ASN1_INTEGER_dup(ASN1_INTEGER *x);
+int ASN1_INTEGER_cmp(ASN1_INTEGER *x, ASN1_INTEGER *y);
 
+ASN1_ENUMERATED *      ASN1_ENUMERATED_new(void);
+void           ASN1_ENUMERATED_free(ASN1_ENUMERATED *a);
 int            i2d_ASN1_ENUMERATED(ASN1_ENUMERATED *a,unsigned char **pp);
 ASN1_ENUMERATED *d2i_ASN1_ENUMERATED(ASN1_ENUMERATED **a,unsigned char **pp,
                        long length);
@@ -537,49 +584,88 @@
 ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_set(ASN1_GENERALIZEDTIME *s,time_t t);
 int ASN1_GENERALIZEDTIME_set_string(ASN1_GENERALIZEDTIME *s, char *str); 
 
+ASN1_OCTET_STRING *    ASN1_OCTET_STRING_new(void);
+void           ASN1_OCTET_STRING_free(ASN1_OCTET_STRING *a);
 int            i2d_ASN1_OCTET_STRING(ASN1_OCTET_STRING *a,unsigned char **pp);
 ASN1_OCTET_STRING *d2i_ASN1_OCTET_STRING(ASN1_OCTET_STRING **a,
                        unsigned char **pp,long length);
+ASN1_OCTET_STRING *    ASN1_OCTET_STRING_dup(ASN1_OCTET_STRING *a);
+int    ASN1_OCTET_STRING_cmp(ASN1_OCTET_STRING *a, ASN1_OCTET_STRING *b);
+int    ASN1_OCTET_STRING_set(ASN1_OCTET_STRING *str, unsigned char *data, int len);
 
+ASN1_VISIBLESTRING *   ASN1_VISIBLESTRING_new(void);
+void           ASN1_VISIBLESTRING_free(ASN1_VISIBLESTRING *a);
 int    i2d_ASN1_VISIBLESTRING(ASN1_VISIBLESTRING *a,unsigned char **pp);
 ASN1_VISIBLESTRING *d2i_ASN1_VISIBLESTRING(ASN1_VISIBLESTRING **a,
                        unsigned char **pp,long length);
 
+ASN1_UTF8STRING *      ASN1_UTF8STRING_new(void);
+void           ASN1_UTF8STRING_free(ASN1_UTF8STRING *a);
 int            i2d_ASN1_UTF8STRING(ASN1_UTF8STRING *a,unsigned char **pp);
 ASN1_UTF8STRING *d2i_ASN1_UTF8STRING(ASN1_UTF8STRING **a,
                        unsigned char **pp,long length);
 
+ASN1_NULL *    ASN1_NULL_new(void);
+void           ASN1_NULL_free(ASN1_NULL *a);
+int            i2d_ASN1_NULL(ASN1_NULL *a,unsigned char **pp);
+ASN1_NULL *d2i_ASN1_NULL(ASN1_NULL **a, unsigned char **pp,long length);
+
+ASN1_BMPSTRING *       ASN1_BMPSTRING_new(void);
+void           ASN1_BMPSTRING_free(ASN1_BMPSTRING *a);
 int i2d_ASN1_BMPSTRING(ASN1_BMPSTRING *a, unsigned char **pp);
 ASN1_BMPSTRING *d2i_ASN1_BMPSTRING(ASN1_BMPSTRING **a, unsigned char **pp,
        long length);
 
+
+int UTF8_getc(const unsigned char *str, int len, unsigned long *val);
+int UTF8_putc(unsigned char *str, int len, unsigned long value);
+
 int i2d_ASN1_PRINTABLE(ASN1_STRING *a,unsigned char **pp);
 ASN1_STRING *d2i_ASN1_PRINTABLE(ASN1_STRING **a,
        unsigned char **pp, long l);
+
+ASN1_PRINTABLESTRING * ASN1_PRINTABLESTRING_new(void);
+void           ASN1_PRINTABLESTRING_free(ASN1_PRINTABLESTRING *a);
 ASN1_PRINTABLESTRING *d2i_ASN1_PRINTABLESTRING(ASN1_PRINTABLESTRING **a,
        unsigned char **pp, long l);
+int i2d_ASN1_PRINTABLESTRING(ASN1_PRINTABLESTRING *a, unsigned char **pp);
 
+ASN1_STRING *  DIRECTORYSTRING_new(void);
+void           DIRECTORYSTRING_free(ASN1_STRING *a);
 int    i2d_DIRECTORYSTRING(ASN1_STRING *a,unsigned char **pp);
 ASN1_STRING *d2i_DIRECTORYSTRING(ASN1_STRING **a, unsigned char **pp,
                                                                 long length);
 
+ASN1_STRING *  DISPLAYTEXT_new(void);
+void           DISPLAYTEXT_free(ASN1_STRING *a);
 int    i2d_DISPLAYTEXT(ASN1_STRING *a,unsigned char **pp);
 ASN1_STRING *d2i_DISPLAYTEXT(ASN1_STRING **a, unsigned char **pp, long length);
 
+ASN1_T61STRING *       ASN1_T61STRING_new(void);
+void           ASN1_T61STRING_free(ASN1_IA5STRING *a);
 ASN1_T61STRING *d2i_ASN1_T61STRING(ASN1_T61STRING **a,
        unsigned char **pp, long l);
+
+ASN1_IA5STRING *       ASN1_IA5STRING_new(void);
+void           ASN1_IA5STRING_free(ASN1_IA5STRING *a);
 int i2d_ASN1_IA5STRING(ASN1_IA5STRING *a,unsigned char **pp);
 ASN1_IA5STRING *d2i_ASN1_IA5STRING(ASN1_IA5STRING **a,
        unsigned char **pp, long l);
 
+ASN1_UTCTIME * ASN1_UTCTIME_new(void);
+void           ASN1_UTCTIME_free(ASN1_UTCTIME *a);
 int            i2d_ASN1_UTCTIME(ASN1_UTCTIME *a,unsigned char **pp);
 ASN1_UTCTIME * d2i_ASN1_UTCTIME(ASN1_UTCTIME **a,unsigned char **pp,
                        long length);
 
+ASN1_GENERALIZEDTIME * ASN1_GENERALIZEDTIME_new(void);
+void           ASN1_GENERALIZEDTIME_free(ASN1_GENERALIZEDTIME *a);
 int            i2d_ASN1_GENERALIZEDTIME(ASN1_GENERALIZEDTIME *a,unsigned char **pp);
 ASN1_GENERALIZEDTIME * d2i_ASN1_GENERALIZEDTIME(ASN1_GENERALIZEDTIME **a,unsigned 
char **pp,
                        long length);
 
+ASN1_TIME *    ASN1_TIME_new(void);
+void           ASN1_TIME_free(ASN1_TIME *a);
 int            i2d_ASN1_TIME(ASN1_TIME *a,unsigned char **pp);
 ASN1_TIME *    d2i_ASN1_TIME(ASN1_TIME **a,unsigned char **pp, long length);
 ASN1_TIME *ASN1_TIME_set(ASN1_TIME *s,time_t t);
@@ -654,6 +740,7 @@
 int ASN1_STRING_print(BIO *bp,ASN1_STRING *v);
 int ASN1_parse(BIO *bp,unsigned char *pp,long len,int indent);
 #endif
+const char *ASN1_tag2str(int tag);
 
 /* Used to load and write netscape format cert/key */
 int i2d_ASN1_HEADER(ASN1_HEADER *a,unsigned char **pp);
@@ -687,6 +774,21 @@
 void *ASN1_unpack_string(ASN1_STRING *oct, char *(*d2i)());
 ASN1_STRING *ASN1_pack_string(void *obj, int (*i2d)(), ASN1_OCTET_STRING **oct);
 
+void ASN1_STRING_set_default_mask(unsigned long mask);
+int ASN1_STRING_set_default_mask_asc(char *p);
+unsigned long ASN1_STRING_get_default_mask(void);
+int ASN1_mbstring_copy(ASN1_STRING **out, const unsigned char *in, int len,
+                                       int inform, unsigned long mask);
+int ASN1_mbstring_ncopy(ASN1_STRING **out, const unsigned char *in, int len,
+                                       int inform, unsigned long mask, 
+                                       long minsize, long maxsize);
+
+ASN1_STRING *ASN1_STRING_set_by_NID(ASN1_STRING **out, 
+               const unsigned char *in, int inlen, int inform, int nid);
+ASN1_STRING_TABLE *ASN1_STRING_TABLE_get(int nid);
+int ASN1_STRING_TABLE_add(int, long, long, unsigned long, unsigned long);
+void ASN1_STRING_TABLE_cleanup(void);
+
 /* BEGIN ERROR CODES */
 /* The following lines are auto generated by the script mkerr.pl. Any changes
  * made after this point may be overwritten when the script is next run.
@@ -699,6 +801,7 @@
 #define ASN1_F_A2I_ASN1_ENUMERATED                      236
 #define ASN1_F_A2I_ASN1_INTEGER                                 101
 #define ASN1_F_A2I_ASN1_STRING                          102
+#define ASN1_F_ACCESS_DESCRIPTION_NEW                   291
 #define ASN1_F_ASN1_COLLATE_PRIMITIVE                   103
 #define ASN1_F_ASN1_D2I_BIO                             104
 #define ASN1_F_ASN1_D2I_FP                              105
@@ -712,6 +815,7 @@
 #define ASN1_F_ASN1_I2D_FP                              110
 #define ASN1_F_ASN1_INTEGER_SET                                 111
 #define ASN1_F_ASN1_INTEGER_TO_BN                       112
+#define ASN1_F_ASN1_MBSTRING_COPY                       282
 #define ASN1_F_ASN1_OBJECT_NEW                          113
 #define ASN1_F_ASN1_PACK_STRING                                 245
 #define ASN1_F_ASN1_PBE_SET                             253
@@ -719,6 +823,7 @@
 #define ASN1_F_ASN1_SEQ_UNPACK                          247
 #define ASN1_F_ASN1_SIGN                                114
 #define ASN1_F_ASN1_STRING_NEW                          115
+#define ASN1_F_ASN1_STRING_TABLE_ADD                    283
 #define ASN1_F_ASN1_STRING_TYPE_NEW                     116
 #define ASN1_F_ASN1_TYPE_GET_INT_OCTETSTRING            117
 #define ASN1_F_ASN1_TYPE_GET_OCTETSTRING                118
@@ -730,6 +835,7 @@
 #define ASN1_F_BASIC_CONSTRAINTS_NEW                    226
 #define ASN1_F_BN_TO_ASN1_ENUMERATED                    234
 #define ASN1_F_BN_TO_ASN1_INTEGER                       122
+#define ASN1_F_D2I_ACCESS_DESCRIPTION                   284
 #define ASN1_F_D2I_ASN1_BIT_STRING                      123
 #define ASN1_F_D2I_ASN1_BMPSTRING                       124
 #define ASN1_F_D2I_ASN1_BOOLEAN                                 125
@@ -738,6 +844,7 @@
 #define ASN1_F_D2I_ASN1_GENERALIZEDTIME                         223
 #define ASN1_F_D2I_ASN1_HEADER                          127
 #define ASN1_F_D2I_ASN1_INTEGER                                 128
+#define ASN1_F_D2I_ASN1_NULL                            292
 #define ASN1_F_D2I_ASN1_OBJECT                          129
 #define ASN1_F_D2I_ASN1_OCTET_STRING                    130
 #define ASN1_F_D2I_ASN1_PRINT_TYPE                      131
@@ -765,6 +872,7 @@
 #define ASN1_F_D2I_NETSCAPE_SPKAC                       143
 #define ASN1_F_D2I_NETSCAPE_SPKI                        144
 #define ASN1_F_D2I_NOTICEREF                            268
+#define ASN1_F_D2I_OTHERNAME                            287
 #define ASN1_F_D2I_PBE2PARAM                            262
 #define ASN1_F_D2I_PBEPARAM                             249
 #define ASN1_F_D2I_PBKDF2PARAM                          263
@@ -796,6 +904,7 @@
 #define ASN1_F_D2I_X509                                         159
 #define ASN1_F_D2I_X509_ALGOR                           160
 #define ASN1_F_D2I_X509_ATTRIBUTE                       161
+#define ASN1_F_D2I_X509_CERT_AUX                        285
 #define ASN1_F_D2I_X509_CINF                            162
 #define ASN1_F_D2I_X509_CRL                             163
 #define ASN1_F_D2I_X509_CRL_INFO                        164
@@ -819,12 +928,14 @@
 #define ASN1_F_I2D_DSAPARAMS                            178
 #define ASN1_F_I2D_DSAPRIVATEKEY                        179
 #define ASN1_F_I2D_DSAPUBLICKEY                                 180
+#define ASN1_F_I2D_DSA_PUBKEY                           290
 #define ASN1_F_I2D_NETSCAPE_RSA                                 181
 #define ASN1_F_I2D_PKCS7                                182
 #define ASN1_F_I2D_PRIVATEKEY                           183
 #define ASN1_F_I2D_PUBLICKEY                            184
 #define ASN1_F_I2D_RSAPRIVATEKEY                        185
 #define ASN1_F_I2D_RSAPUBLICKEY                                 186
+#define ASN1_F_I2D_RSA_PUBKEY                           289
 #define ASN1_F_I2D_X509_ATTRIBUTE                       187
 #define ASN1_F_I2T_ASN1_OBJECT                          188
 #define ASN1_F_NETSCAPE_CERT_SEQUENCE_NEW               229
@@ -832,6 +943,7 @@
 #define ASN1_F_NETSCAPE_SPKAC_NEW                       190
 #define ASN1_F_NETSCAPE_SPKI_NEW                        191
 #define ASN1_F_NOTICEREF_NEW                            272
+#define ASN1_F_OTHERNAME_NEW                            288
 #define ASN1_F_PBE2PARAM_NEW                            264
 #define ASN1_F_PBEPARAM_NEW                             251
 #define ASN1_F_PBKDF2PARAM_NEW                          265
@@ -859,6 +971,7 @@
 #define ASN1_F_USERNOTICE_NEW                           275
 #define ASN1_F_X509_ALGOR_NEW                           202
 #define ASN1_F_X509_ATTRIBUTE_NEW                       203
+#define ASN1_F_X509_CERT_AUX_NEW                        286
 #define ASN1_F_X509_CINF_NEW                            204
 #define ASN1_F_X509_CRL_INFO_NEW                        205
 #define ASN1_F_X509_CRL_NEW                             206
@@ -889,6 +1002,7 @@
 #define ASN1_R_BN_LIB                                   107
 #define ASN1_R_BOOLEAN_IS_WRONG_LENGTH                  108
 #define ASN1_R_BUFFER_TOO_SMALL                                 109
+#define ASN1_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER          166
 #define ASN1_R_DATA_IS_WRONG                            110
 #define ASN1_R_DECODE_ERROR                             155
 #define ASN1_R_DECODING_ERROR                           111
@@ -902,24 +1016,31 @@
 #define ASN1_R_EXPECTING_A_BIT_STRING                   116
 #define ASN1_R_EXPECTING_A_BOOLEAN                      117
 #define ASN1_R_EXPECTING_A_GENERALIZEDTIME              151
+#define ASN1_R_EXPECTING_A_NULL                                 164
 #define ASN1_R_EXPECTING_A_TIME                                 152
 #define ASN1_R_EXPECTING_A_UTCTIME                      118
 #define ASN1_R_FIRST_NUM_TOO_LARGE                      119
 #define ASN1_R_GENERALIZEDTIME_TOO_LONG                         153
 #define ASN1_R_HEADER_TOO_LONG                          120
+#define ASN1_R_ILLEGAL_CHARACTERS                       158
+#define ASN1_R_INVALID_BMPSTRING_LENGTH                         159
 #define ASN1_R_INVALID_DIGIT                            121
 #define ASN1_R_INVALID_SEPARATOR                        122
 #define ASN1_R_INVALID_TIME_FORMAT                      123
+#define ASN1_R_INVALID_UNIVERSALSTRING_LENGTH           160
+#define ASN1_R_INVALID_UTF8STRING                       161
 #define ASN1_R_IV_TOO_LARGE                             124
 #define ASN1_R_LENGTH_ERROR                             125
 #define ASN1_R_MISSING_SECOND_NUMBER                    126
 #define ASN1_R_NON_HEX_CHARACTERS                       127
 #define ASN1_R_NOT_ENOUGH_DATA                          128
+#define ASN1_R_NULL_IS_WRONG_LENGTH                     165
 #define ASN1_R_ODD_NUMBER_OF_CHARS                      129
 #define ASN1_R_PARSING                                  130
 #define ASN1_R_PRIVATE_KEY_HEADER_MISSING               131
 #define ASN1_R_SECOND_NUMBER_TOO_LARGE                  132
 #define ASN1_R_SHORT_LINE                               133
+#define ASN1_R_STRING_TOO_LONG                          163
 #define ASN1_R_STRING_TOO_SHORT                                 134
 #define ASN1_R_TAG_VALUE_TOO_HIGH                       135
 #define ASN1_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD 136
@@ -927,6 +1048,7 @@
 #define ASN1_R_UNABLE_TO_DECODE_RSA_KEY                         138
 #define ASN1_R_UNABLE_TO_DECODE_RSA_PRIVATE_KEY                 139
 #define ASN1_R_UNKNOWN_ATTRIBUTE_TYPE                   140
+#define ASN1_R_UNKNOWN_FORMAT                           162
 #define ASN1_R_UNKNOWN_MESSAGE_DIGEST_ALGORITHM                 141
 #define ASN1_R_UNKNOWN_OBJECT_TYPE                      142
 #define ASN1_R_UNKNOWN_PUBLIC_KEY_TYPE                  143
Index: opensa/openssl/crypto/asn1/asn1_err.c
diff -u opensa/openssl/crypto/asn1/asn1_err.c:1.1 
opensa/openssl/crypto/asn1/asn1_err.c:1.2
--- opensa/openssl/crypto/asn1/asn1_err.c:1.1   Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/asn1_err.c       Thu Mar  2 21:11:50 2000
@@ -69,19 +69,21 @@
 {ERR_PACK(0,ASN1_F_A2I_ASN1_ENUMERATED,0),     "a2i_ASN1_ENUMERATED"},
 {ERR_PACK(0,ASN1_F_A2I_ASN1_INTEGER,0),        "a2i_ASN1_INTEGER"},
 {ERR_PACK(0,ASN1_F_A2I_ASN1_STRING,0), "a2i_ASN1_STRING"},
+{ERR_PACK(0,ASN1_F_ACCESS_DESCRIPTION_NEW,0),  "ACCESS_DESCRIPTION_new"},
 {ERR_PACK(0,ASN1_F_ASN1_COLLATE_PRIMITIVE,0),  "ASN1_COLLATE_PRIMITIVE"},
 {ERR_PACK(0,ASN1_F_ASN1_D2I_BIO,0),    "ASN1_d2i_bio"},
 {ERR_PACK(0,ASN1_F_ASN1_D2I_FP,0),     "ASN1_d2i_fp"},
 {ERR_PACK(0,ASN1_F_ASN1_DUP,0),        "ASN1_dup"},
 {ERR_PACK(0,ASN1_F_ASN1_ENUMERATED_SET,0),     "ASN1_ENUMERATED_set"},
 {ERR_PACK(0,ASN1_F_ASN1_ENUMERATED_TO_BN,0),   "ASN1_ENUMERATED_to_BN"},
-{ERR_PACK(0,ASN1_F_ASN1_GENERALIZEDTIME_NEW,0),        "ASN1_GENERALIZEDTIME_NEW"},
+{ERR_PACK(0,ASN1_F_ASN1_GENERALIZEDTIME_NEW,0),        "ASN1_GENERALIZEDTIME_new"},
 {ERR_PACK(0,ASN1_F_ASN1_GET_OBJECT,0), "ASN1_get_object"},
 {ERR_PACK(0,ASN1_F_ASN1_HEADER_NEW,0), "ASN1_HEADER_new"},
 {ERR_PACK(0,ASN1_F_ASN1_I2D_BIO,0),    "ASN1_i2d_bio"},
 {ERR_PACK(0,ASN1_F_ASN1_I2D_FP,0),     "ASN1_i2d_fp"},
 {ERR_PACK(0,ASN1_F_ASN1_INTEGER_SET,0),        "ASN1_INTEGER_set"},
 {ERR_PACK(0,ASN1_F_ASN1_INTEGER_TO_BN,0),      "ASN1_INTEGER_to_BN"},
+{ERR_PACK(0,ASN1_F_ASN1_MBSTRING_COPY,0),      "ASN1_mbstring_copy"},
 {ERR_PACK(0,ASN1_F_ASN1_OBJECT_NEW,0), "ASN1_OBJECT_new"},
 {ERR_PACK(0,ASN1_F_ASN1_PACK_STRING,0),        "ASN1_pack_string"},
 {ERR_PACK(0,ASN1_F_ASN1_PBE_SET,0),    "ASN1_PBE_SET"},
@@ -89,17 +91,19 @@
 {ERR_PACK(0,ASN1_F_ASN1_SEQ_UNPACK,0), "ASN1_seq_unpack"},
 {ERR_PACK(0,ASN1_F_ASN1_SIGN,0),       "ASN1_sign"},
 {ERR_PACK(0,ASN1_F_ASN1_STRING_NEW,0), "ASN1_STRING_new"},
+{ERR_PACK(0,ASN1_F_ASN1_STRING_TABLE_ADD,0),   "ASN1_STRING_TABLE_add"},
 {ERR_PACK(0,ASN1_F_ASN1_STRING_TYPE_NEW,0),    "ASN1_STRING_type_new"},
 {ERR_PACK(0,ASN1_F_ASN1_TYPE_GET_INT_OCTETSTRING,0),   
"ASN1_TYPE_get_int_octetstring"},
 {ERR_PACK(0,ASN1_F_ASN1_TYPE_GET_OCTETSTRING,0),       "ASN1_TYPE_get_octetstring"},
 {ERR_PACK(0,ASN1_F_ASN1_TYPE_NEW,0),   "ASN1_TYPE_new"},
 {ERR_PACK(0,ASN1_F_ASN1_UNPACK_STRING,0),      "ASN1_unpack_string"},
-{ERR_PACK(0,ASN1_F_ASN1_UTCTIME_NEW,0),        "ASN1_UTCTIME_NEW"},
+{ERR_PACK(0,ASN1_F_ASN1_UTCTIME_NEW,0),        "ASN1_UTCTIME_new"},
 {ERR_PACK(0,ASN1_F_ASN1_VERIFY,0),     "ASN1_verify"},
 {ERR_PACK(0,ASN1_F_AUTHORITY_KEYID_NEW,0),     "AUTHORITY_KEYID_new"},
 {ERR_PACK(0,ASN1_F_BASIC_CONSTRAINTS_NEW,0),   "BASIC_CONSTRAINTS_new"},
 {ERR_PACK(0,ASN1_F_BN_TO_ASN1_ENUMERATED,0),   "BN_to_ASN1_ENUMERATED"},
 {ERR_PACK(0,ASN1_F_BN_TO_ASN1_INTEGER,0),      "BN_to_ASN1_INTEGER"},
+{ERR_PACK(0,ASN1_F_D2I_ACCESS_DESCRIPTION,0),  "d2i_ACCESS_DESCRIPTION"},
 {ERR_PACK(0,ASN1_F_D2I_ASN1_BIT_STRING,0),     "d2i_ASN1_BIT_STRING"},
 {ERR_PACK(0,ASN1_F_D2I_ASN1_BMPSTRING,0),      "d2i_ASN1_BMPSTRING"},
 {ERR_PACK(0,ASN1_F_D2I_ASN1_BOOLEAN,0),        "d2i_ASN1_BOOLEAN"},
@@ -108,6 +112,7 @@
 {ERR_PACK(0,ASN1_F_D2I_ASN1_GENERALIZEDTIME,0),        "d2i_ASN1_GENERALIZEDTIME"},
 {ERR_PACK(0,ASN1_F_D2I_ASN1_HEADER,0), "d2i_ASN1_HEADER"},
 {ERR_PACK(0,ASN1_F_D2I_ASN1_INTEGER,0),        "d2i_ASN1_INTEGER"},
+{ERR_PACK(0,ASN1_F_D2I_ASN1_NULL,0),   "d2i_ASN1_NULL"},
 {ERR_PACK(0,ASN1_F_D2I_ASN1_OBJECT,0), "d2i_ASN1_OBJECT"},
 {ERR_PACK(0,ASN1_F_D2I_ASN1_OCTET_STRING,0),   "d2i_ASN1_OCTET_STRING"},
 {ERR_PACK(0,ASN1_F_D2I_ASN1_PRINT_TYPE,0),     "D2I_ASN1_PRINT_TYPE"},
@@ -135,6 +140,7 @@
 {ERR_PACK(0,ASN1_F_D2I_NETSCAPE_SPKAC,0),      "d2i_NETSCAPE_SPKAC"},
 {ERR_PACK(0,ASN1_F_D2I_NETSCAPE_SPKI,0),       "d2i_NETSCAPE_SPKI"},
 {ERR_PACK(0,ASN1_F_D2I_NOTICEREF,0),   "d2i_NOTICEREF"},
+{ERR_PACK(0,ASN1_F_D2I_OTHERNAME,0),   "d2i_OTHERNAME"},
 {ERR_PACK(0,ASN1_F_D2I_PBE2PARAM,0),   "d2i_PBE2PARAM"},
 {ERR_PACK(0,ASN1_F_D2I_PBEPARAM,0),    "d2i_PBEPARAM"},
 {ERR_PACK(0,ASN1_F_D2I_PBKDF2PARAM,0), "d2i_PBKDF2PARAM"},
@@ -166,6 +172,7 @@
 {ERR_PACK(0,ASN1_F_D2I_X509,0),        "d2i_X509"},
 {ERR_PACK(0,ASN1_F_D2I_X509_ALGOR,0),  "d2i_X509_ALGOR"},
 {ERR_PACK(0,ASN1_F_D2I_X509_ATTRIBUTE,0),      "d2i_X509_ATTRIBUTE"},
+{ERR_PACK(0,ASN1_F_D2I_X509_CERT_AUX,0),       "d2i_X509_CERT_AUX"},
 {ERR_PACK(0,ASN1_F_D2I_X509_CINF,0),   "d2i_X509_CINF"},
 {ERR_PACK(0,ASN1_F_D2I_X509_CRL,0),    "d2i_X509_CRL"},
 {ERR_PACK(0,ASN1_F_D2I_X509_CRL_INFO,0),       "d2i_X509_CRL_INFO"},
@@ -189,12 +196,14 @@
 {ERR_PACK(0,ASN1_F_I2D_DSAPARAMS,0),   "i2d_DSAparams"},
 {ERR_PACK(0,ASN1_F_I2D_DSAPRIVATEKEY,0),       "i2d_DSAPrivateKey"},
 {ERR_PACK(0,ASN1_F_I2D_DSAPUBLICKEY,0),        "i2d_DSAPublicKey"},
+{ERR_PACK(0,ASN1_F_I2D_DSA_PUBKEY,0),  "i2d_DSA_PUBKEY"},
 {ERR_PACK(0,ASN1_F_I2D_NETSCAPE_RSA,0),        "i2d_Netscape_RSA"},
 {ERR_PACK(0,ASN1_F_I2D_PKCS7,0),       "i2d_PKCS7"},
 {ERR_PACK(0,ASN1_F_I2D_PRIVATEKEY,0),  "i2d_PrivateKey"},
 {ERR_PACK(0,ASN1_F_I2D_PUBLICKEY,0),   "i2d_PublicKey"},
 {ERR_PACK(0,ASN1_F_I2D_RSAPRIVATEKEY,0),       "i2d_RSAPrivateKey"},
 {ERR_PACK(0,ASN1_F_I2D_RSAPUBLICKEY,0),        "i2d_RSAPublicKey"},
+{ERR_PACK(0,ASN1_F_I2D_RSA_PUBKEY,0),  "i2d_RSA_PUBKEY"},
 {ERR_PACK(0,ASN1_F_I2D_X509_ATTRIBUTE,0),      "i2d_X509_ATTRIBUTE"},
 {ERR_PACK(0,ASN1_F_I2T_ASN1_OBJECT,0), "i2t_ASN1_OBJECT"},
 {ERR_PACK(0,ASN1_F_NETSCAPE_CERT_SEQUENCE_NEW,0),      "NETSCAPE_CERT_SEQUENCE_new"},
@@ -202,6 +211,7 @@
 {ERR_PACK(0,ASN1_F_NETSCAPE_SPKAC_NEW,0),      "NETSCAPE_SPKAC_new"},
 {ERR_PACK(0,ASN1_F_NETSCAPE_SPKI_NEW,0),       "NETSCAPE_SPKI_new"},
 {ERR_PACK(0,ASN1_F_NOTICEREF_NEW,0),   "NOTICEREF_new"},
+{ERR_PACK(0,ASN1_F_OTHERNAME_NEW,0),   "OTHERNAME_new"},
 {ERR_PACK(0,ASN1_F_PBE2PARAM_NEW,0),   "PBE2PARAM_new"},
 {ERR_PACK(0,ASN1_F_PBEPARAM_NEW,0),    "PBEPARAM_new"},
 {ERR_PACK(0,ASN1_F_PBKDF2PARAM_NEW,0), "PBKDF2PARAM_new"},
@@ -229,6 +239,7 @@
 {ERR_PACK(0,ASN1_F_USERNOTICE_NEW,0),  "USERNOTICE_new"},
 {ERR_PACK(0,ASN1_F_X509_ALGOR_NEW,0),  "X509_ALGOR_new"},
 {ERR_PACK(0,ASN1_F_X509_ATTRIBUTE_NEW,0),      "X509_ATTRIBUTE_new"},
+{ERR_PACK(0,ASN1_F_X509_CERT_AUX_NEW,0),       "X509_CERT_AUX_new"},
 {ERR_PACK(0,ASN1_F_X509_CINF_NEW,0),   "X509_CINF_new"},
 {ERR_PACK(0,ASN1_F_X509_CRL_INFO_NEW,0),       "X509_CRL_INFO_new"},
 {ERR_PACK(0,ASN1_F_X509_CRL_NEW,0),    "X509_CRL_new"},
@@ -262,6 +273,7 @@
 {ASN1_R_BN_LIB                           ,"bn lib"},
 {ASN1_R_BOOLEAN_IS_WRONG_LENGTH          ,"boolean is wrong length"},
 {ASN1_R_BUFFER_TOO_SMALL                 ,"buffer too small"},
+{ASN1_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER  ,"cipher has no object identifier"},
 {ASN1_R_DATA_IS_WRONG                    ,"data is wrong"},
 {ASN1_R_DECODE_ERROR                     ,"decode error"},
 {ASN1_R_DECODING_ERROR                   ,"decoding error"},
@@ -275,24 +287,31 @@
 {ASN1_R_EXPECTING_A_BIT_STRING           ,"expecting a bit string"},
 {ASN1_R_EXPECTING_A_BOOLEAN              ,"expecting a boolean"},
 {ASN1_R_EXPECTING_A_GENERALIZEDTIME      ,"expecting a generalizedtime"},
+{ASN1_R_EXPECTING_A_NULL                 ,"expecting a null"},
 {ASN1_R_EXPECTING_A_TIME                 ,"expecting a time"},
 {ASN1_R_EXPECTING_A_UTCTIME              ,"expecting a utctime"},
 {ASN1_R_FIRST_NUM_TOO_LARGE              ,"first num too large"},
 {ASN1_R_GENERALIZEDTIME_TOO_LONG         ,"generalizedtime too long"},
 {ASN1_R_HEADER_TOO_LONG                  ,"header too long"},
+{ASN1_R_ILLEGAL_CHARACTERS               ,"illegal characters"},
+{ASN1_R_INVALID_BMPSTRING_LENGTH         ,"invalid bmpstring length"},
 {ASN1_R_INVALID_DIGIT                    ,"invalid digit"},
 {ASN1_R_INVALID_SEPARATOR                ,"invalid separator"},
 {ASN1_R_INVALID_TIME_FORMAT              ,"invalid time format"},
+{ASN1_R_INVALID_UNIVERSALSTRING_LENGTH   ,"invalid universalstring length"},
+{ASN1_R_INVALID_UTF8STRING               ,"invalid utf8string"},
 {ASN1_R_IV_TOO_LARGE                     ,"iv too large"},
 {ASN1_R_LENGTH_ERROR                     ,"length error"},
 {ASN1_R_MISSING_SECOND_NUMBER            ,"missing second number"},
 {ASN1_R_NON_HEX_CHARACTERS               ,"non hex characters"},
 {ASN1_R_NOT_ENOUGH_DATA                  ,"not enough data"},
+{ASN1_R_NULL_IS_WRONG_LENGTH             ,"null is wrong length"},
 {ASN1_R_ODD_NUMBER_OF_CHARS              ,"odd number of chars"},
 {ASN1_R_PARSING                          ,"parsing"},
 {ASN1_R_PRIVATE_KEY_HEADER_MISSING       ,"private key header missing"},
 {ASN1_R_SECOND_NUMBER_TOO_LARGE          ,"second number too large"},
 {ASN1_R_SHORT_LINE                       ,"short line"},
+{ASN1_R_STRING_TOO_LONG                  ,"string too long"},
 {ASN1_R_STRING_TOO_SHORT                 ,"string too short"},
 {ASN1_R_TAG_VALUE_TOO_HIGH               ,"tag value too high"},
 {ASN1_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD,"the asn1 object 
identifier is not known for this md"},
@@ -300,6 +319,7 @@
 {ASN1_R_UNABLE_TO_DECODE_RSA_KEY         ,"unable to decode rsa key"},
 {ASN1_R_UNABLE_TO_DECODE_RSA_PRIVATE_KEY ,"unable to decode rsa private key"},
 {ASN1_R_UNKNOWN_ATTRIBUTE_TYPE           ,"unknown attribute type"},
+{ASN1_R_UNKNOWN_FORMAT                   ,"unknown format"},
 {ASN1_R_UNKNOWN_MESSAGE_DIGEST_ALGORITHM ,"unknown message digest algorithm"},
 {ASN1_R_UNKNOWN_OBJECT_TYPE              ,"unknown object type"},
 {ASN1_R_UNKNOWN_PUBLIC_KEY_TYPE          ,"unknown public key type"},
Index: opensa/openssl/crypto/asn1/asn1_lib.c
diff -u opensa/openssl/crypto/asn1/asn1_lib.c:1.1 
opensa/openssl/crypto/asn1/asn1_lib.c:1.2
--- opensa/openssl/crypto/asn1/asn1_lib.c:1.1   Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/asn1_lib.c       Thu Mar  2 21:11:50 2000
@@ -176,7 +176,7 @@
        }
 
 /* class 0 is constructed
- * constructed == 2 for indefinitle length constructed */
+ * constructed == 2 for indefinite length constructed */
 void ASN1_put_object(unsigned char **pp, int constructed, int length, int tag,
             int xclass)
        {
@@ -349,7 +349,7 @@
        if (data != NULL)
                {
                memcpy(str->data,data,len);
-               /* an alowance for strings :-) */
+               /* an allowance for strings :-) */
                str->data[len]='\0';
                }
        return(1);
@@ -381,8 +381,8 @@
 void ASN1_STRING_free(ASN1_STRING *a)
        {
        if (a == NULL) return;
-       if (a->data != NULL) Free((char *)a->data);
-       Free((char *)a);
+       if (a->data != NULL) Free(a->data);
+       Free(a);
        }
 
 int ASN1_STRING_cmp(ASN1_STRING *a, ASN1_STRING *b)
@@ -411,3 +411,14 @@
        ERR_add_error_data(4,"address=",buf1," offset=",buf2);
        }
 
+int ASN1_STRING_length(ASN1_STRING *x)
+{ return M_ASN1_STRING_length(x); }
+
+void ASN1_STRING_length_set(ASN1_STRING *x, int len)
+{ M_ASN1_STRING_length_set(x, len); return; }
+
+int ASN1_STRING_type(ASN1_STRING *x)
+{ return M_ASN1_STRING_type(x); }
+
+unsigned char * ASN1_STRING_data(ASN1_STRING *x)
+{ return M_ASN1_STRING_data(x); }
Index: opensa/openssl/crypto/asn1/asn1_mac.h
diff -u opensa/openssl/crypto/asn1/asn1_mac.h:1.1 
opensa/openssl/crypto/asn1/asn1_mac.h:1.2
--- opensa/openssl/crypto/asn1/asn1_mac.h:1.1   Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/asn1_mac.h       Thu Mar  2 21:11:50 2000
@@ -106,6 +106,20 @@
 #define M_ASN1_D2I_start_sequence() \
        if (!asn1_GetSequence(&c,&length)) \
                { c.line=__LINE__; goto err; }
+/* Begin reading ASN1 without a surrounding sequence */
+#define M_ASN1_D2I_begin() \
+       c.slen = length;
+
+/* End reading ASN1 with no check on length */
+#define M_ASN1_D2I_Finish_nolen(a, func, e) \
+       *pp=c.p; \
+       if (a != NULL) (*a)=ret; \
+       return(ret); \
+err:\
+       ASN1_MAC_H_err((e),c.error,c.line); \
+       asn1_add_error(*pp,(int)(c.q- *pp)); \
+       if ((ret != NULL) && ((a == NULL) || (*a != ret))) func(ret); \
+       return(NULL)
 
 #define M_ASN1_D2I_end_sequence() \
        (((c.inf&1) == 0)?(c.slen <= 0): \
Index: opensa/openssl/crypto/asn1/asn1_par.c
diff -u opensa/openssl/crypto/asn1/asn1_par.c:1.1 
opensa/openssl/crypto/asn1/asn1_par.c:1.2
--- opensa/openssl/crypto/asn1/asn1_par.c:1.1   Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/asn1_par.c       Thu Mar  2 21:11:50 2000
@@ -93,55 +93,8 @@
                sprintf(str,"cont [ %d ]",tag);
        else if ((xclass & V_ASN1_APPLICATION) == V_ASN1_APPLICATION)
                sprintf(str,"appl [ %d ]",tag);
-       else if ((tag == V_ASN1_EOC) /* && (xclass == V_ASN1_UNIVERSAL) */)
-               p="EOC";
-       else if (tag == V_ASN1_BOOLEAN)
-               p="BOOLEAN";
-       else if (tag == V_ASN1_INTEGER)
-               p="INTEGER";
-       else if (tag == V_ASN1_ENUMERATED)
-               p="ENUMERATED";
-       else if (tag == V_ASN1_BIT_STRING)
-               p="BIT STRING";
-       else if (tag == V_ASN1_OCTET_STRING)
-               p="OCTET STRING";
-       else if (tag == V_ASN1_NULL)
-               p="NULL";
-       else if (tag == V_ASN1_OBJECT)
-               p="OBJECT";
-       else if (tag == V_ASN1_SEQUENCE)
-               p="SEQUENCE";
-       else if (tag == V_ASN1_SET)
-               p="SET";
-       else if (tag == V_ASN1_PRINTABLESTRING)
-               p="PRINTABLESTRING";
-       else if (tag == V_ASN1_T61STRING)
-               p="T61STRING";
-       else if (tag == V_ASN1_IA5STRING)
-               p="IA5STRING";
-       else if (tag == V_ASN1_UTCTIME)
-               p="UTCTIME";
-
-       /* extras */
-       else if (tag == V_ASN1_NUMERICSTRING)
-               p="NUMERICSTRING";
-       else if (tag == V_ASN1_VIDEOTEXSTRING)
-               p="VIDEOTEXSTRING";
-       else if (tag == V_ASN1_GENERALIZEDTIME)
-               p="GENERALIZEDTIME";
-       else if (tag == V_ASN1_GRAPHICSTRING)
-               p="GRAPHICSTRING";
-       else if (tag == V_ASN1_VISIBLESTRING)
-               p="VISIBLESTRING";
-       else if (tag == V_ASN1_GENERALSTRING)
-               p="GENERALSTRING";
-       else if (tag == V_ASN1_UNIVERSALSTRING)
-               p="UNIVERSALSTRING";
-       else if (tag == V_ASN1_BMPSTRING)
-               p="BMPSTRING";
-       else
-               p2="(unknown)";
-               
+       else p = ASN1_tag2str(tag);
+
        if (p2 != NULL)
                {
                if (BIO_printf(bp,fmt2,tag,p2) <= 0) goto err;
@@ -320,7 +273,7 @@
                                                        os->length) <= 0)
                                                        goto end;
                                                }
-                                       ASN1_OCTET_STRING_free(os);
+                                       M_ASN1_OCTET_STRING_free(os);
                                        os=NULL;
                                        }
                                }
@@ -354,7 +307,7 @@
                                        if (BIO_write(bp,"BAD INTEGER",11) <= 0)
                                                goto end;
                                        }
-                               ASN1_INTEGER_free(bs);
+                               M_ASN1_INTEGER_free(bs);
                                }
                        else if (tag == V_ASN1_ENUMERATED)
                                {
@@ -386,7 +339,7 @@
                                        if (BIO_write(bp,"BAD ENUMERATED",11) <= 0)
                                                goto end;
                                        }
-                               ASN1_ENUMERATED_free(bs);
+                               M_ASN1_ENUMERATED_free(bs);
                                }
 
                        if (!nl) 
@@ -405,7 +358,28 @@
        ret=1;
 end:
        if (o != NULL) ASN1_OBJECT_free(o);
-       if (os != NULL) ASN1_OCTET_STRING_free(os);
+       if (os != NULL) M_ASN1_OCTET_STRING_free(os);
        *pp=p;
        return(ret);
        }
+
+const char *ASN1_tag2str(int tag)
+{
+       const static char *tag2str[] = {
+        "EOC", "BOOLEAN", "INTEGER", "BIT STRING", "OCTET STRING", /* 0-4 */
+        "NULL", "OBJECT", "OBJECT DESCRIPTOR", "EXTERNAL", "REAL", /* 5-9 */
+        "ENUMERATED", "<ASN1 11>", "UTF8STRING", "<ASN1 13>",      /* 10-13 */
+       "<ASN1 14>", "<ASN1 15>", "SEQUENCE", "SET",                /* 15-17 */
+       "NUMERICSTRING", "PRINTABLESTRING", "T61STRING",            /* 18-20 */
+       "VIDEOTEXSTRING", "IA5STRING", "UTCTIME","GENERALIZEDTIME", /* 21-24 */
+       "GRAPHICSTRING", "VISIBLESTRING", "GENERALSTRING",          /* 25-27 */
+       "UNIVERSALSTRING", "<ASN1 29>", "BMPSTRING"                 /* 28-30 */
+       };
+
+       if((tag == V_ASN1_NEG_INTEGER) || (tag == V_ASN1_NEG_ENUMERATED))
+                                                       tag &= ~0x100;
+
+       if(tag < 0 || tag > 30) return "(unknown)";
+       return tag2str[tag];
+}
+
Index: opensa/openssl/crypto/asn1/d2i_dhp.c
diff -u opensa/openssl/crypto/asn1/d2i_dhp.c:1.1 
opensa/openssl/crypto/asn1/d2i_dhp.c:1.2
--- opensa/openssl/crypto/asn1/d2i_dhp.c:1.1    Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/d2i_dhp.c        Thu Mar  2 21:11:50 2000
@@ -86,7 +86,7 @@
                ret->length=(int)v;
                }
 
-       ASN1_BIT_STRING_free(bs);
+       M_ASN1_BIT_STRING_free(bs);
 
        M_ASN1_D2I_Finish_2(a);
 
@@ -95,7 +95,7 @@
 err:
        ASN1err(ASN1_F_D2I_DHPARAMS,i);
        if ((ret != NULL) && ((a == NULL) || (*a != ret))) DH_free(ret);
-       if (bs != NULL) ASN1_BIT_STRING_free(bs);
+       if (bs != NULL) M_ASN1_BIT_STRING_free(bs);
        return(NULL);
        }
 #endif
Index: opensa/openssl/crypto/asn1/d2i_dsap.c
diff -u opensa/openssl/crypto/asn1/d2i_dsap.c:1.1 
opensa/openssl/crypto/asn1/d2i_dsap.c:1.2
--- opensa/openssl/crypto/asn1/d2i_dsap.c:1.1   Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/d2i_dsap.c       Thu Mar  2 21:11:50 2000
@@ -83,7 +83,7 @@
        M_ASN1_D2I_get(bs,d2i_ASN1_INTEGER);
        if ((ret->g=BN_bin2bn(bs->data,bs->length,ret->g)) == NULL) goto err_bn;
 
-       ASN1_BIT_STRING_free(bs);
+       M_ASN1_BIT_STRING_free(bs);
 
        M_ASN1_D2I_Finish_2(a);
 
@@ -92,7 +92,7 @@
 err:
        ASN1err(ASN1_F_D2I_DSAPARAMS,i);
        if ((ret != NULL) && ((a == NULL) || (*a != ret))) DSA_free(ret);
-       if (bs != NULL) ASN1_BIT_STRING_free(bs);
+       if (bs != NULL) M_ASN1_BIT_STRING_free(bs);
        return(NULL);
        }
 #endif
Index: opensa/openssl/crypto/asn1/d2i_pr.c
diff -u opensa/openssl/crypto/asn1/d2i_pr.c:1.1 opensa/openssl/crypto/asn1/d2i_pr.c:1.2
--- opensa/openssl/crypto/asn1/d2i_pr.c:1.1     Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/d2i_pr.c Thu Mar  2 21:11:50 2000
@@ -112,3 +112,26 @@
        return(NULL);
        }
 
+/* This works like d2i_PrivateKey() except it automatically works out the type */
+
+EVP_PKEY *d2i_AutoPrivateKey(EVP_PKEY **a, unsigned char **pp,
+            long length)
+{
+       STACK_OF(ASN1_TYPE) *inkey;
+       unsigned char *p;
+       int keytype;
+       p = *pp;
+       /* Dirty trick: read in the ASN1 data into a STACK_OF(ASN1_TYPE):
+        * by analyzing it we can determine the passed structure: this
+        * assumes the input is surrounded by an ASN1 SEQUENCE.
+        */
+       inkey = d2i_ASN1_SET_OF_ASN1_TYPE(NULL, &p, length, d2i_ASN1_TYPE, 
+                       ASN1_TYPE_free, V_ASN1_SEQUENCE, V_ASN1_UNIVERSAL);
+       /* Since we only need to discern "traditional format" RSA and DSA
+        * keys we can just count the elements.
+         */
+       if(sk_ASN1_TYPE_num(inkey) == 6) keytype = EVP_PKEY_DSA;
+       else keytype = EVP_PKEY_RSA;
+       sk_ASN1_TYPE_pop_free(inkey, ASN1_TYPE_free);
+       return d2i_PrivateKey(keytype, a, pp, length);
+}
Index: opensa/openssl/crypto/asn1/d2i_r_pr.c
diff -u opensa/openssl/crypto/asn1/d2i_r_pr.c:1.1 
opensa/openssl/crypto/asn1/d2i_r_pr.c:1.2
--- opensa/openssl/crypto/asn1/d2i_r_pr.c:1.1   Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/d2i_r_pr.c       Thu Mar  2 21:11:50 2000
@@ -107,7 +107,7 @@
        if ((ret->iqmp=BN_bin2bn(bs->data,bs->length,ret->iqmp)) == NULL)
                goto err_bn;
 
-       ASN1_INTEGER_free(bs);
+       M_ASN1_INTEGER_free(bs);
 
        M_ASN1_D2I_Finish_2(a);
 err_bn:
@@ -115,7 +115,14 @@
 err:
        ASN1err(ASN1_F_D2I_RSAPRIVATEKEY,i);
        if ((ret != NULL) && ((a == NULL) || (*a != ret))) RSA_free(ret);
-       if (bs != NULL) ASN1_INTEGER_free(bs);
+       if (bs != NULL) M_ASN1_INTEGER_free(bs);
+
        return(NULL);
        }
+#else /* !NO_RSA */
+
+# if PEDANTIC
+static void *dummy=&dummy;
+# endif
+
 #endif
Index: opensa/openssl/crypto/asn1/d2i_r_pu.c
diff -u opensa/openssl/crypto/asn1/d2i_r_pu.c:1.1 
opensa/openssl/crypto/asn1/d2i_r_pu.c:1.2
--- opensa/openssl/crypto/asn1/d2i_r_pu.c:1.1   Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/d2i_r_pu.c       Thu Mar  2 21:11:50 2000
@@ -81,7 +81,7 @@
        M_ASN1_D2I_get(bs,d2i_ASN1_INTEGER);
        if ((ret->e=BN_bin2bn(bs->data,bs->length,ret->e)) == NULL) goto err_bn;
 
-       ASN1_INTEGER_free(bs);
+       M_ASN1_INTEGER_free(bs);
        bs=NULL;
 
        M_ASN1_D2I_Finish_2(a);
@@ -91,7 +91,13 @@
 err:
        ASN1err(ASN1_F_D2I_RSAPUBLICKEY,i);
        if ((ret != NULL) && ((a == NULL) || (*a != ret))) RSA_free(ret);
-       if (bs != NULL) ASN1_INTEGER_free(bs);
+       if (bs != NULL) M_ASN1_INTEGER_free(bs);
        return(NULL);
        }
+#else /* !NO_RSA */
+
+# if PEDANTIC
+static void *dummy=&dummy;
+# endif
+
 #endif
Index: opensa/openssl/crypto/asn1/d2i_s_pr.c
diff -u opensa/openssl/crypto/asn1/d2i_s_pr.c:1.1 
opensa/openssl/crypto/asn1/d2i_s_pr.c:1.2
--- opensa/openssl/crypto/asn1/d2i_s_pr.c:1.1   Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/d2i_s_pr.c       Thu Mar  2 21:11:50 2000
@@ -91,7 +91,7 @@
        if ((ret->priv_key=BN_bin2bn(bs->data,bs->length,ret->priv_key))
                == NULL) goto err_bn;
 
-       ASN1_INTEGER_free(bs);
+       M_ASN1_INTEGER_free(bs);
 
        M_ASN1_D2I_Finish_2(a);
 err_bn:
@@ -99,7 +99,7 @@
 err:
        ASN1err(ASN1_F_D2I_DSAPRIVATEKEY,i);
        if ((ret != NULL) && ((a == NULL) || (*a != ret))) DSA_free(ret);
-       if (bs != NULL) ASN1_INTEGER_free(bs);
+       if (bs != NULL) M_ASN1_INTEGER_free(bs);
        return(NULL);
        }
 #endif
Index: opensa/openssl/crypto/asn1/d2i_s_pu.c
diff -u opensa/openssl/crypto/asn1/d2i_s_pu.c:1.1 
opensa/openssl/crypto/asn1/d2i_s_pu.c:1.2
--- opensa/openssl/crypto/asn1/d2i_s_pu.c:1.1   Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/d2i_s_pu.c       Thu Mar  2 21:11:50 2000
@@ -107,7 +107,7 @@
                ret->write_params=1;
                }
 
-       ASN1_INTEGER_free(bs);
+       M_ASN1_INTEGER_free(bs);
        bs=NULL;
        M_ASN1_D2I_Finish_2(a);
 err_bn:
@@ -115,7 +115,7 @@
 err:
        ASN1err(ASN1_F_D2I_DSAPUBLICKEY,i);
        if ((ret != NULL) && ((a == NULL) || (*a != ret))) DSA_free(ret);
-       if (bs != NULL) ASN1_INTEGER_free(bs);
+       if (bs != NULL) M_ASN1_INTEGER_free(bs);
        return(NULL);
        }
 #endif
Index: opensa/openssl/crypto/asn1/evp_asn1.c
diff -u opensa/openssl/crypto/asn1/evp_asn1.c:1.1 
opensa/openssl/crypto/asn1/evp_asn1.c:1.2
--- opensa/openssl/crypto/asn1/evp_asn1.c:1.1   Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/evp_asn1.c       Thu Mar  2 21:11:50 2000
@@ -65,8 +65,8 @@
        {
        ASN1_STRING *os;
 
-       if ((os=ASN1_OCTET_STRING_new()) == NULL) return(0);
-       if (!ASN1_OCTET_STRING_set(os,data,len)) return(0);
+       if ((os=M_ASN1_OCTET_STRING_new()) == NULL) return(0);
+       if (!M_ASN1_OCTET_STRING_set(os,data,len)) return(0);
        ASN1_TYPE_set(a,V_ASN1_OCTET_STRING,os);
        return(1);
        }
@@ -83,8 +83,8 @@
                ASN1err(ASN1_F_ASN1_TYPE_GET_OCTETSTRING,ASN1_R_DATA_IS_WRONG);
                return(-1);
                }
-       p=ASN1_STRING_data(a->value.octet_string);
-       ret=ASN1_STRING_length(a->value.octet_string);
+       p=M_ASN1_STRING_data(a->value.octet_string);
+       ret=M_ASN1_STRING_length(a->value.octet_string);
        if (ret < max_len)
                num=ret;
        else
@@ -117,8 +117,8 @@
        /* Grow the 'string' */
        ASN1_STRING_set(osp,NULL,size);
 
-       ASN1_STRING_length(osp)=size;
-       p=ASN1_STRING_data(osp);
+       M_ASN1_STRING_length_set(osp, size);
+       p=M_ASN1_STRING_data(osp);
 
        ASN1_put_object(&p,1,n,V_ASN1_SEQUENCE,V_ASN1_UNIVERSAL);
          i2d_ASN1_INTEGER(&in,&p);
@@ -145,8 +145,8 @@
                {
                goto err;
                }
-       p=ASN1_STRING_data(a->value.sequence);
-       length=ASN1_STRING_length(a->value.sequence);
+       p=M_ASN1_STRING_data(a->value.sequence);
+       length=M_ASN1_STRING_length(a->value.sequence);
 
        c.pp= &p;
        c.p=p;
@@ -165,21 +165,21 @@
        if (num != NULL)
                *num=ASN1_INTEGER_get(ai);
 
-       ret=ASN1_STRING_length(os);
+       ret=M_ASN1_STRING_length(os);
        if (max_len > ret)
                n=ret;
        else
                n=max_len;
 
        if (data != NULL)
-               memcpy(data,ASN1_STRING_data(os),n);
+               memcpy(data,M_ASN1_STRING_data(os),n);
        if (0)
                {
 err:
                ASN1err(ASN1_F_ASN1_TYPE_GET_INT_OCTETSTRING,ASN1_R_DATA_IS_WRONG);
                }
-       if (os != NULL) ASN1_OCTET_STRING_free(os);
-       if (ai != NULL) ASN1_INTEGER_free(ai);
+       if (os != NULL) M_ASN1_OCTET_STRING_free(os);
+       if (ai != NULL) M_ASN1_INTEGER_free(ai);
        return(ret);
        }
 
Index: opensa/openssl/crypto/asn1/f_enum.c
diff -u opensa/openssl/crypto/asn1/f_enum.c:1.1 opensa/openssl/crypto/asn1/f_enum.c:1.2
--- opensa/openssl/crypto/asn1/f_enum.c:1.1     Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/f_enum.c Thu Mar  2 21:11:50 2000
@@ -161,7 +161,7 @@
                        if (sp == NULL)
                                {
                                
ASN1err(ASN1_F_A2I_ASN1_ENUMERATED,ERR_R_MALLOC_FAILURE);
-                               if (s != NULL) Free((char *)s);
+                               if (s != NULL) Free(s);
                                goto err;
                                }
                        s=sp;
Index: opensa/openssl/crypto/asn1/f_int.c
diff -u opensa/openssl/crypto/asn1/f_int.c:1.1 opensa/openssl/crypto/asn1/f_int.c:1.2
--- opensa/openssl/crypto/asn1/f_int.c:1.1      Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/f_int.c  Thu Mar  2 21:11:50 2000
@@ -168,7 +168,7 @@
                        if (sp == NULL)
                                {
                                ASN1err(ASN1_F_A2I_ASN1_INTEGER,ERR_R_MALLOC_FAILURE);
-                               if (s != NULL) Free((char *)s);
+                               if (s != NULL) Free(s);
                                goto err;
                                }
                        s=sp;
Index: opensa/openssl/crypto/asn1/f_string.c
diff -u opensa/openssl/crypto/asn1/f_string.c:1.1 
opensa/openssl/crypto/asn1/f_string.c:1.2
--- opensa/openssl/crypto/asn1/f_string.c:1.1   Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/f_string.c       Thu Mar  2 21:11:50 2000
@@ -166,7 +166,7 @@
                        if (sp == NULL)
                                {
                                ASN1err(ASN1_F_A2I_ASN1_STRING,ERR_R_MALLOC_FAILURE);
-                               if (s != NULL) Free((char *)s);
+                               if (s != NULL) Free(s);
                                goto err;
                                }
                        s=sp;
Index: opensa/openssl/crypto/asn1/i2d_dhp.c
diff -u opensa/openssl/crypto/asn1/i2d_dhp.c:1.1 
opensa/openssl/crypto/asn1/i2d_dhp.c:1.2
--- opensa/openssl/crypto/asn1/i2d_dhp.c:1.1    Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/i2d_dhp.c        Thu Mar  2 21:11:50 2000
@@ -118,7 +118,7 @@
                bs.length=BN_bn2bin(num[i],bs.data);
                i2d_ASN1_INTEGER(&bs,&p);
                }
-       Free((char *)bs.data);
+       Free(bs.data);
        ret=t;
 err:
        if (num[2] != NULL) BN_free(num[2]);
Index: opensa/openssl/crypto/asn1/i2d_dsap.c
diff -u opensa/openssl/crypto/asn1/i2d_dsap.c:1.1 
opensa/openssl/crypto/asn1/i2d_dsap.c:1.2
--- opensa/openssl/crypto/asn1/i2d_dsap.c:1.1   Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/i2d_dsap.c       Thu Mar  2 21:11:50 2000
@@ -107,7 +107,7 @@
                bs.length=BN_bn2bin(num[i],bs.data);
                i2d_ASN1_INTEGER(&bs,&p);
                }
-       Free((char *)bs.data);
+       Free(bs.data);
        ret=t;
 err:
        *pp=p;
Index: opensa/openssl/crypto/asn1/i2d_r_pr.c
diff -u opensa/openssl/crypto/asn1/i2d_r_pr.c:1.1 
opensa/openssl/crypto/asn1/i2d_r_pr.c:1.2
--- opensa/openssl/crypto/asn1/i2d_r_pr.c:1.1   Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/i2d_r_pr.c       Thu Mar  2 21:11:50 2000
@@ -119,9 +119,15 @@
                bs.length=BN_bn2bin(num[i],bs.data);
                i2d_ASN1_INTEGER(&bs,&p);
                }
-       Free((char *)bs.data);
+       Free(bs.data);
        *pp=p;
        return(t);
        }
+#else /* !NO_RSA */
+
+# if PEDANTIC
+static void *dummy=&dummy;
+# endif
+
 #endif
 
Index: opensa/openssl/crypto/asn1/i2d_r_pu.c
diff -u opensa/openssl/crypto/asn1/i2d_r_pu.c:1.1 
opensa/openssl/crypto/asn1/i2d_r_pu.c:1.2
--- opensa/openssl/crypto/asn1/i2d_r_pu.c:1.1   Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/i2d_r_pu.c       Thu Mar  2 21:11:50 2000
@@ -105,8 +105,14 @@
                bs.length=BN_bn2bin(num[i],bs.data);
                i2d_ASN1_INTEGER(&bs,&p);
                }
-       Free((char *)bs.data);
+       Free(bs.data);
        *pp=p;
        return(t);
        }
+#else /* !NO_RSA */
+
+# if PEDANTIC
+static void *dummy=&dummy;
+# endif
+
 #endif
Index: opensa/openssl/crypto/asn1/i2d_s_pr.c
diff -u opensa/openssl/crypto/asn1/i2d_s_pr.c:1.1 
opensa/openssl/crypto/asn1/i2d_s_pr.c:1.2
--- opensa/openssl/crypto/asn1/i2d_s_pr.c:1.1   Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/i2d_s_pr.c       Thu Mar  2 21:11:50 2000
@@ -116,7 +116,7 @@
                bs.length=BN_bn2bin(num[i],bs.data);
                i2d_ASN1_INTEGER(&bs,&p);
                }
-       Free((char *)bs.data);
+       Free(bs.data);
        *pp=p;
        return(t);
        }
Index: opensa/openssl/crypto/asn1/i2d_s_pu.c
diff -u opensa/openssl/crypto/asn1/i2d_s_pu.c:1.1 
opensa/openssl/crypto/asn1/i2d_s_pu.c:1.2
--- opensa/openssl/crypto/asn1/i2d_s_pu.c:1.1   Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/i2d_s_pu.c       Thu Mar  2 21:11:50 2000
@@ -121,7 +121,7 @@
                bs.length=BN_bn2bin(num[i],bs.data);
                i2d_ASN1_INTEGER(&bs,&p);
                }
-       Free((char *)bs.data);
+       Free(bs.data);
        *pp=p;
        if(all) return(t);
        else return(tot);
Index: opensa/openssl/crypto/asn1/makefile.ssl
diff -u opensa/openssl/crypto/asn1/makefile.ssl:1.1 
opensa/openssl/crypto/asn1/makefile.ssl:1.2
--- opensa/openssl/crypto/asn1/makefile.ssl:1.1 Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/makefile.ssl     Thu Mar  2 21:11:50 2000
@@ -23,34 +23,34 @@
 
 LIB=$(TOP)/libcrypto.a
 LIBSRC=        a_object.c a_bitstr.c a_utctm.c a_gentm.c a_time.c a_int.c a_octet.c \
-       a_print.c a_type.c a_set.c a_dup.c a_d2i_fp.c a_i2d_fp.c a_bmp.c \
-       a_enum.c a_vis.c a_utf8.c a_sign.c a_digest.c a_verify.c \
+       a_null.c a_print.c a_type.c a_set.c a_dup.c a_d2i_fp.c a_i2d_fp.c a_bmp.c \
+       a_enum.c a_vis.c a_utf8.c a_sign.c a_digest.c a_verify.c a_mbstr.c \
        x_algor.c x_val.c x_pubkey.c x_sig.c x_req.c x_attrib.c \
-       x_name.c x_cinf.c x_x509.c x_crl.c x_info.c x_spki.c nsseq.c \
+       x_name.c x_cinf.c x_x509.c x_x509a.c x_crl.c x_info.c x_spki.c nsseq.c \
        d2i_r_pr.c i2d_r_pr.c d2i_r_pu.c i2d_r_pu.c \
        d2i_s_pr.c i2d_s_pr.c d2i_s_pu.c i2d_s_pu.c \
        d2i_pu.c d2i_pr.c i2d_pu.c i2d_pr.c\
-       t_req.c t_x509.c t_crl.c t_pkey.c \
+       t_req.c t_x509.c t_x509a.c t_crl.c t_pkey.c t_spki.c t_bitst.c \
        p7_i_s.c p7_signi.c p7_signd.c p7_recip.c p7_enc_c.c p7_evp.c \
        p7_dgst.c p7_s_e.c p7_enc.c p7_lib.c \
        f_int.c f_string.c i2d_dhp.c i2d_dsap.c d2i_dhp.c d2i_dsap.c n_pkey.c \
        f_enum.c a_hdr.c x_pkey.c a_bool.c x_exten.c \
-       asn1_par.c asn1_lib.c asn1_err.c a_meth.c a_bytes.c \
+       asn1_par.c asn1_lib.c asn1_err.c a_meth.c a_bytes.c a_strnid.c \
        evp_asn1.c asn_pack.c p5_pbe.c p5_pbev2.c p8_pkey.c
 LIBOBJ= a_object.o a_bitstr.o a_utctm.o a_gentm.o a_time.o a_int.o a_octet.o \
-       a_print.o a_type.o a_set.o a_dup.o a_d2i_fp.o a_i2d_fp.o a_bmp.o \
-       a_enum.o a_vis.o a_utf8.o a_sign.o a_digest.o a_verify.o \
+       a_null.o a_print.o a_type.o a_set.o a_dup.o a_d2i_fp.o a_i2d_fp.o a_bmp.o \
+       a_enum.o a_vis.o a_utf8.o a_sign.o a_digest.o a_verify.o a_mbstr.o \
        x_algor.o x_val.o x_pubkey.o x_sig.o x_req.o x_attrib.o \
-       x_name.o x_cinf.o x_x509.o x_crl.o x_info.o x_spki.o nsseq.o \
+       x_name.o x_cinf.o x_x509.o x_x509a.o x_crl.o x_info.o x_spki.o nsseq.o \
        d2i_r_pr.o i2d_r_pr.o d2i_r_pu.o i2d_r_pu.o \
        d2i_s_pr.o i2d_s_pr.o d2i_s_pu.o i2d_s_pu.o \
        d2i_pu.o d2i_pr.o i2d_pu.o i2d_pr.o \
-       t_req.o t_x509.o t_crl.o t_pkey.o \
+       t_req.o t_x509.o t_x509a.o t_crl.o t_pkey.o t_spki.o t_bitst.o \
        p7_i_s.o p7_signi.o p7_signd.o p7_recip.o p7_enc_c.o p7_evp.o \
        p7_dgst.o p7_s_e.o p7_enc.o p7_lib.o \
        f_int.o f_string.o i2d_dhp.o i2d_dsap.o d2i_dhp.o d2i_dsap.o n_pkey.o \
        f_enum.o a_hdr.o x_pkey.o a_bool.o x_exten.o \
-       asn1_par.o asn1_lib.o asn1_err.o a_meth.o a_bytes.o \
+       asn1_par.o asn1_lib.o asn1_err.o a_meth.o a_bytes.o a_strnid.o \
        evp_asn1.o asn_pack.o p5_pbe.o p5_pbev2.o p8_pkey.o
 
 SRC= $(LIBSRC)
@@ -160,11 +160,13 @@
 a_digest.o: ../../include/openssl/idea.h ../../include/openssl/md2.h
 a_digest.o: ../../include/openssl/md5.h ../../include/openssl/mdc2.h
 a_digest.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
-a_digest.o: ../../include/openssl/opensslv.h ../../include/openssl/rc2.h
-a_digest.o: ../../include/openssl/rc4.h ../../include/openssl/rc5.h
-a_digest.o: ../../include/openssl/ripemd.h ../../include/openssl/rsa.h
-a_digest.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
-a_digest.o: ../../include/openssl/stack.h ../cryptlib.h
+a_digest.o: ../../include/openssl/opensslv.h ../../include/openssl/pkcs7.h
+a_digest.o: ../../include/openssl/rc2.h ../../include/openssl/rc4.h
+a_digest.o: ../../include/openssl/rc5.h ../../include/openssl/ripemd.h
+a_digest.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
+a_digest.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
+a_digest.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
+a_digest.o: ../cryptlib.h
 a_dup.o: ../../include/openssl/asn1.h ../../include/openssl/asn1_mac.h
 a_dup.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
 a_dup.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
@@ -207,6 +209,13 @@
 a_int.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
 a_int.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
 a_int.o: ../cryptlib.h
+a_mbstr.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
+a_mbstr.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
+a_mbstr.o: ../../include/openssl/crypto.h ../../include/openssl/e_os.h
+a_mbstr.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
+a_mbstr.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
+a_mbstr.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
+a_mbstr.o: ../cryptlib.h
 a_meth.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
 a_meth.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
 a_meth.o: ../../include/openssl/crypto.h ../../include/openssl/e_os.h
@@ -214,6 +223,13 @@
 a_meth.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
 a_meth.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
 a_meth.o: ../cryptlib.h
+a_null.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
+a_null.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
+a_null.o: ../../include/openssl/crypto.h ../../include/openssl/e_os.h
+a_null.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
+a_null.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
+a_null.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
+a_null.o: ../cryptlib.h
 a_object.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
 a_object.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
 a_object.o: ../../include/openssl/crypto.h ../../include/openssl/e_os.h
@@ -259,6 +275,13 @@
 a_sign.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 a_sign.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
 a_sign.o: ../cryptlib.h
+a_strnid.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
+a_strnid.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
+a_strnid.o: ../../include/openssl/crypto.h ../../include/openssl/e_os.h
+a_strnid.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
+a_strnid.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
+a_strnid.o: ../../include/openssl/opensslv.h ../../include/openssl/safestack.h
+a_strnid.o: ../../include/openssl/stack.h ../cryptlib.h
 a_time.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
 a_time.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
 a_time.o: ../../include/openssl/crypto.h ../../include/openssl/e_os.h
@@ -788,6 +811,24 @@
 p8_pkey.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
 p8_pkey.o: ../../include/openssl/stack.h ../../include/openssl/x509.h
 p8_pkey.o: ../../include/openssl/x509_vfy.h ../cryptlib.h
+t_bitst.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
+t_bitst.o: ../../include/openssl/blowfish.h ../../include/openssl/bn.h
+t_bitst.o: ../../include/openssl/buffer.h ../../include/openssl/cast.h
+t_bitst.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
+t_bitst.o: ../../include/openssl/des.h ../../include/openssl/dh.h
+t_bitst.o: ../../include/openssl/dsa.h ../../include/openssl/e_os.h
+t_bitst.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
+t_bitst.o: ../../include/openssl/evp.h ../../include/openssl/idea.h
+t_bitst.o: ../../include/openssl/lhash.h ../../include/openssl/md2.h
+t_bitst.o: ../../include/openssl/md5.h ../../include/openssl/mdc2.h
+t_bitst.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
+t_bitst.o: ../../include/openssl/opensslv.h ../../include/openssl/pkcs7.h
+t_bitst.o: ../../include/openssl/rc2.h ../../include/openssl/rc4.h
+t_bitst.o: ../../include/openssl/rc5.h ../../include/openssl/ripemd.h
+t_bitst.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
+t_bitst.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
+t_bitst.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
+t_bitst.o: ../../include/openssl/x509v3.h ../cryptlib.h
 t_crl.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
 t_crl.o: ../../include/openssl/blowfish.h ../../include/openssl/bn.h
 t_crl.o: ../../include/openssl/buffer.h ../../include/openssl/cast.h
@@ -812,15 +853,17 @@
 t_pkey.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h
 t_pkey.o: ../../include/openssl/err.h ../../include/openssl/opensslconf.h
 t_pkey.o: ../../include/openssl/opensslv.h ../../include/openssl/rsa.h
-t_pkey.o: ../../include/openssl/stack.h ../cryptlib.h
+t_pkey.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
+t_pkey.o: ../cryptlib.h
 t_req.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
 t_req.o: ../../include/openssl/blowfish.h ../../include/openssl/bn.h
 t_req.o: ../../include/openssl/buffer.h ../../include/openssl/cast.h
-t_req.o: ../../include/openssl/crypto.h ../../include/openssl/des.h
-t_req.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h
-t_req.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h
-t_req.o: ../../include/openssl/err.h ../../include/openssl/evp.h
-t_req.o: ../../include/openssl/idea.h ../../include/openssl/md2.h
+t_req.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
+t_req.o: ../../include/openssl/des.h ../../include/openssl/dh.h
+t_req.o: ../../include/openssl/dsa.h ../../include/openssl/e_os.h
+t_req.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
+t_req.o: ../../include/openssl/evp.h ../../include/openssl/idea.h
+t_req.o: ../../include/openssl/lhash.h ../../include/openssl/md2.h
 t_req.o: ../../include/openssl/md5.h ../../include/openssl/mdc2.h
 t_req.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 t_req.o: ../../include/openssl/opensslv.h ../../include/openssl/pkcs7.h
@@ -829,7 +872,24 @@
 t_req.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
 t_req.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 t_req.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
-t_req.o: ../cryptlib.h
+t_req.o: ../../include/openssl/x509v3.h ../cryptlib.h
+t_spki.o: ../../include/openssl/asn1.h ../../include/openssl/asn1_mac.h
+t_spki.o: ../../include/openssl/bio.h ../../include/openssl/blowfish.h
+t_spki.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
+t_spki.o: ../../include/openssl/cast.h ../../include/openssl/crypto.h
+t_spki.o: ../../include/openssl/des.h ../../include/openssl/dh.h
+t_spki.o: ../../include/openssl/dsa.h ../../include/openssl/e_os.h
+t_spki.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
+t_spki.o: ../../include/openssl/evp.h ../../include/openssl/idea.h
+t_spki.o: ../../include/openssl/md2.h ../../include/openssl/md5.h
+t_spki.o: ../../include/openssl/mdc2.h ../../include/openssl/objects.h
+t_spki.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
+t_spki.o: ../../include/openssl/pkcs7.h ../../include/openssl/rc2.h
+t_spki.o: ../../include/openssl/rc4.h ../../include/openssl/rc5.h
+t_spki.o: ../../include/openssl/ripemd.h ../../include/openssl/rsa.h
+t_spki.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
+t_spki.o: ../../include/openssl/stack.h ../../include/openssl/x509.h
+t_spki.o: ../../include/openssl/x509_vfy.h ../cryptlib.h
 t_x509.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
 t_x509.o: ../../include/openssl/blowfish.h ../../include/openssl/bn.h
 t_x509.o: ../../include/openssl/buffer.h ../../include/openssl/cast.h
@@ -848,6 +908,23 @@
 t_x509.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 t_x509.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
 t_x509.o: ../../include/openssl/x509v3.h ../cryptlib.h
+t_x509a.o: ../../include/openssl/asn1.h ../../include/openssl/asn1_mac.h
+t_x509a.o: ../../include/openssl/bio.h ../../include/openssl/blowfish.h
+t_x509a.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
+t_x509a.o: ../../include/openssl/cast.h ../../include/openssl/crypto.h
+t_x509a.o: ../../include/openssl/des.h ../../include/openssl/dh.h
+t_x509a.o: ../../include/openssl/dsa.h ../../include/openssl/e_os.h
+t_x509a.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
+t_x509a.o: ../../include/openssl/evp.h ../../include/openssl/idea.h
+t_x509a.o: ../../include/openssl/md2.h ../../include/openssl/md5.h
+t_x509a.o: ../../include/openssl/mdc2.h ../../include/openssl/objects.h
+t_x509a.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
+t_x509a.o: ../../include/openssl/pkcs7.h ../../include/openssl/rc2.h
+t_x509a.o: ../../include/openssl/rc4.h ../../include/openssl/rc5.h
+t_x509a.o: ../../include/openssl/ripemd.h ../../include/openssl/rsa.h
+t_x509a.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
+t_x509a.o: ../../include/openssl/stack.h ../../include/openssl/x509.h
+t_x509a.o: ../../include/openssl/x509_vfy.h ../cryptlib.h
 x_algor.o: ../../include/openssl/asn1.h ../../include/openssl/asn1_mac.h
 x_algor.o: ../../include/openssl/bio.h ../../include/openssl/blowfish.h
 x_algor.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
@@ -1088,3 +1165,20 @@
 x_x509.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
 x_x509.o: ../../include/openssl/stack.h ../../include/openssl/x509.h
 x_x509.o: ../../include/openssl/x509_vfy.h ../cryptlib.h
+x_x509a.o: ../../include/openssl/asn1.h ../../include/openssl/asn1_mac.h
+x_x509a.o: ../../include/openssl/bio.h ../../include/openssl/blowfish.h
+x_x509a.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
+x_x509a.o: ../../include/openssl/cast.h ../../include/openssl/crypto.h
+x_x509a.o: ../../include/openssl/des.h ../../include/openssl/dh.h
+x_x509a.o: ../../include/openssl/dsa.h ../../include/openssl/e_os.h
+x_x509a.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
+x_x509a.o: ../../include/openssl/evp.h ../../include/openssl/idea.h
+x_x509a.o: ../../include/openssl/md2.h ../../include/openssl/md5.h
+x_x509a.o: ../../include/openssl/mdc2.h ../../include/openssl/objects.h
+x_x509a.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
+x_x509a.o: ../../include/openssl/pkcs7.h ../../include/openssl/rc2.h
+x_x509a.o: ../../include/openssl/rc4.h ../../include/openssl/rc5.h
+x_x509a.o: ../../include/openssl/ripemd.h ../../include/openssl/rsa.h
+x_x509a.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
+x_x509a.o: ../../include/openssl/stack.h ../../include/openssl/x509.h
+x_x509a.o: ../../include/openssl/x509_vfy.h ../cryptlib.h
Index: opensa/openssl/crypto/asn1/n_pkey.c
diff -u opensa/openssl/crypto/asn1/n_pkey.c:1.1 opensa/openssl/crypto/asn1/n_pkey.c:1.2
--- opensa/openssl/crypto/asn1/n_pkey.c:1.1     Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/n_pkey.c Thu Mar  2 21:11:50 2000
@@ -139,7 +139,7 @@
                }
 
        if (pkey->private_key->data != NULL)
-               Free((char *)pkey->private_key->data);
+               Free(pkey->private_key->data);
        if ((pkey->private_key->data=(unsigned char *)Malloc(l[0])) == NULL)
                {
                ASN1err(ASN1_F_I2D_NETSCAPE_RSA,ERR_R_MALLOC_FAILURE);
@@ -205,10 +205,10 @@
                (char *)os->data,os->length) != 0))
                {
                ASN1err(ASN1_F_D2I_NETSCAPE_RSA,ASN1_R_PRIVATE_KEY_HEADER_MISSING);
-               ASN1_BIT_STRING_free(os);
+               M_ASN1_BIT_STRING_free(os);
                goto err;
                }
-       ASN1_BIT_STRING_free(os);
+       M_ASN1_BIT_STRING_free(os);
        c.q=c.p;
        if ((ret=d2i_Netscape_RSA_2(a,&c.p,c.slen,cb)) == NULL) goto err;
        c.slen-=(c.p-c.q);
@@ -279,7 +279,7 @@
        *pp=c.p;
 err:
        if (pkey != NULL) NETSCAPE_PKEY_free(pkey);
-       if (os != NULL) ASN1_BIT_STRING_free(os);
+       if (os != NULL) M_ASN1_BIT_STRING_free(os);
        if (alg != NULL) X509_ALGOR_free(alg);
        return(ret);
        }
@@ -321,9 +321,9 @@
        ASN1_CTX c;
 
        M_ASN1_New_Malloc(ret,NETSCAPE_PKEY);
-       M_ASN1_New(ret->version,ASN1_INTEGER_new);
+       M_ASN1_New(ret->version,M_ASN1_INTEGER_new);
        M_ASN1_New(ret->algor,X509_ALGOR_new);
-       M_ASN1_New(ret->private_key,ASN1_OCTET_STRING_new);
+       M_ASN1_New(ret->private_key,M_ASN1_OCTET_STRING_new);
        return(ret);
        M_ASN1_New_Error(ASN1_F_NETSCAPE_PKEY_NEW);
        }
@@ -331,11 +331,18 @@
 static void NETSCAPE_PKEY_free(NETSCAPE_PKEY *a)
        {
        if (a == NULL) return;
-       ASN1_INTEGER_free(a->version);
+       M_ASN1_INTEGER_free(a->version);
        X509_ALGOR_free(a->algor);
-       ASN1_OCTET_STRING_free(a->private_key);
-       Free((char *)a);
+       M_ASN1_OCTET_STRING_free(a->private_key);
+       Free(a);
        }
 
 #endif /* NO_RC4 */
+
+#else /* !NO_RSA */
+
+# if PEDANTIC
+static void *dummy=&dummy;
+# endif
+
 #endif
Index: opensa/openssl/crypto/asn1/p5_pbe.c
diff -u opensa/openssl/crypto/asn1/p5_pbe.c:1.1 opensa/openssl/crypto/asn1/p5_pbe.c:1.2
--- opensa/openssl/crypto/asn1/p5_pbe.c:1.1     Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/p5_pbe.c Thu Mar  2 21:11:50 2000
@@ -82,8 +82,8 @@
        PBEPARAM *ret=NULL;
        ASN1_CTX c;
        M_ASN1_New_Malloc(ret, PBEPARAM);
-       M_ASN1_New(ret->iter,ASN1_INTEGER_new);
-       M_ASN1_New(ret->salt,ASN1_OCTET_STRING_new);
+       M_ASN1_New(ret->iter,M_ASN1_INTEGER_new);
+       M_ASN1_New(ret->salt,M_ASN1_OCTET_STRING_new);
        return (ret);
        M_ASN1_New_Error(ASN1_F_PBEPARAM_NEW);
 }
@@ -101,9 +101,9 @@
 void PBEPARAM_free (PBEPARAM *a)
 {
        if(a==NULL) return;
-       ASN1_OCTET_STRING_free(a->salt);
-       ASN1_INTEGER_free (a->iter);
-       Free ((char *)a);
+       M_ASN1_OCTET_STRING_free(a->salt);
+       M_ASN1_INTEGER_free (a->iter);
+       Free (a);
 }
 
 /* Return an algorithm identifier for a PKCS#5 PBE algorithm */
@@ -129,7 +129,8 @@
        }
        pbe->salt->length = saltlen;
        if (salt) memcpy (pbe->salt->data, salt, saltlen);
-       else RAND_bytes (pbe->salt->data, saltlen);
+       else if (RAND_bytes (pbe->salt->data, saltlen) <= 0)
+               return NULL;
 
        if (!(astype = ASN1_TYPE_new())) {
                ASN1err(ASN1_F_ASN1_PBE_SET,ERR_R_MALLOC_FAILURE);
Index: opensa/openssl/crypto/asn1/p5_pbev2.c
diff -u opensa/openssl/crypto/asn1/p5_pbev2.c:1.1 
opensa/openssl/crypto/asn1/p5_pbev2.c:1.2
--- opensa/openssl/crypto/asn1/p5_pbev2.c:1.1   Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/p5_pbev2.c       Thu Mar  2 21:11:50 2000
@@ -104,7 +104,7 @@
        if(a==NULL) return;
        X509_ALGOR_free(a->keyfunc);
        X509_ALGOR_free(a->encryption);
-       Free ((char *)a);
+       Free (a);
 }
 
 int i2d_PBKDF2PARAM(PBKDF2PARAM *a, unsigned char **pp)
@@ -131,7 +131,7 @@
        ASN1_CTX c;
        M_ASN1_New_Malloc(ret, PBKDF2PARAM);
        M_ASN1_New(ret->salt, ASN1_TYPE_new);
-       M_ASN1_New(ret->iter, ASN1_INTEGER_new);
+       M_ASN1_New(ret->iter, M_ASN1_INTEGER_new);
        ret->keylength = NULL;
        ret->prf = NULL;
        return (ret);
@@ -155,10 +155,10 @@
 {
        if(a==NULL) return;
        ASN1_TYPE_free(a->salt);
-       ASN1_INTEGER_free(a->iter);
-       ASN1_INTEGER_free(a->keylength);
+       M_ASN1_INTEGER_free(a->iter);
+       M_ASN1_INTEGER_free(a->keylength);
        X509_ALGOR_free(a->prf);
-       Free ((char *)a);
+       Free (a);
 }
 
 /* Return an algorithm identifier for a PKCS#5 v2.0 PBE algorithm:
@@ -175,19 +175,26 @@
        PBKDF2PARAM *kdf = NULL;
        PBE2PARAM *pbe2 = NULL;
        ASN1_OCTET_STRING *osalt = NULL;
+       ASN1_OBJECT *obj;
 
+       alg_nid = EVP_CIPHER_type(cipher);
+       if(alg_nid == NID_undef) {
+               ASN1err(ASN1_F_PKCS5_PBE2_SET,
+                               ASN1_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER);
+               goto err;
+       }
+       obj = OBJ_nid2obj(alg_nid);
+
        if(!(pbe2 = PBE2PARAM_new())) goto merr;
 
        /* Setup the AlgorithmIdentifier for the encryption scheme */
        scheme = pbe2->encryption;
-
-       alg_nid = EVP_CIPHER_type(cipher);
 
-       scheme->algorithm = OBJ_nid2obj(alg_nid);
+       scheme->algorithm = obj;
        if(!(scheme->parameter = ASN1_TYPE_new())) goto merr;
 
        /* Create random IV */
-       RAND_bytes(iv, EVP_CIPHER_iv_length(cipher));
+       RAND_pseudo_bytes(iv, EVP_CIPHER_iv_length(cipher));
 
        /* Dummy cipherinit to just setup the IV */
        EVP_CipherInit(&ctx, cipher, NULL, iv, 0);
@@ -199,13 +206,13 @@
        EVP_CIPHER_CTX_cleanup(&ctx);
 
        if(!(kdf = PBKDF2PARAM_new())) goto merr;
-       if(!(osalt = ASN1_OCTET_STRING_new())) goto merr;
+       if(!(osalt = M_ASN1_OCTET_STRING_new())) goto merr;
 
        if (!saltlen) saltlen = PKCS5_SALT_LEN;
        if (!(osalt->data = Malloc (saltlen))) goto merr;
        osalt->length = saltlen;
        if (salt) memcpy (osalt->data, salt, saltlen);
-       else RAND_bytes (osalt->data, saltlen);
+       else if (RAND_bytes (osalt->data, saltlen) <= 0) goto merr;
 
        if(iter <= 0) iter = PKCS5_DEFAULT_ITER;
        if(!ASN1_INTEGER_set(kdf->iter, iter)) goto merr;
@@ -218,7 +225,7 @@
        /* If its RC2 then we'd better setup the key length */
 
        if(alg_nid == NID_rc2_cbc) {
-               if(!(kdf->keylength = ASN1_INTEGER_new())) goto merr;
+               if(!(kdf->keylength = M_ASN1_INTEGER_new())) goto merr;
                if(!ASN1_INTEGER_set (kdf->keylength,
                                 EVP_CIPHER_key_length(cipher))) goto merr;
        }
@@ -264,7 +271,7 @@
        err:
        PBE2PARAM_free(pbe2);
        /* Note 'scheme' is freed as part of pbe2 */
-       ASN1_OCTET_STRING_free(osalt);
+       M_ASN1_OCTET_STRING_free(osalt);
        PBKDF2PARAM_free(kdf);
        X509_ALGOR_free(kalg);
        X509_ALGOR_free(ret);
Index: opensa/openssl/crypto/asn1/p7_dgst.c
diff -u opensa/openssl/crypto/asn1/p7_dgst.c:1.1 
opensa/openssl/crypto/asn1/p7_dgst.c:1.2
--- opensa/openssl/crypto/asn1/p7_dgst.c:1.1    Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/p7_dgst.c        Thu Mar  2 21:11:50 2000
@@ -101,10 +101,10 @@
        ASN1_CTX c;
 
        M_ASN1_New_Malloc(ret,PKCS7_DIGEST);
-       M_ASN1_New(ret->version,ASN1_INTEGER_new);
+       M_ASN1_New(ret->version,M_ASN1_INTEGER_new);
        M_ASN1_New(ret->md,X509_ALGOR_new);
        M_ASN1_New(ret->contents,PKCS7_new);
-       M_ASN1_New(ret->digest,ASN1_OCTET_STRING_new);
+       M_ASN1_New(ret->digest,M_ASN1_OCTET_STRING_new);
        return(ret);
        M_ASN1_New_Error(ASN1_F_PKCS7_DIGEST_NEW);
        }
@@ -112,10 +112,10 @@
 void PKCS7_DIGEST_free(PKCS7_DIGEST *a)
        {
        if (a == NULL) return;
-       ASN1_INTEGER_free(a->version);
+       M_ASN1_INTEGER_free(a->version);
        X509_ALGOR_free(a->md);
        PKCS7_free(a->contents);
-       ASN1_OCTET_STRING_free(a->digest);
-       Free((char *)a);
+       M_ASN1_OCTET_STRING_free(a->digest);
+       Free(a);
        }
 
Index: opensa/openssl/crypto/asn1/p7_enc.c
diff -u opensa/openssl/crypto/asn1/p7_enc.c:1.1 opensa/openssl/crypto/asn1/p7_enc.c:1.2
--- opensa/openssl/crypto/asn1/p7_enc.c:1.1     Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/p7_enc.c Thu Mar  2 21:11:50 2000
@@ -95,7 +95,7 @@
        ASN1_CTX c;
 
        M_ASN1_New_Malloc(ret,PKCS7_ENCRYPT);
-       M_ASN1_New(ret->version,ASN1_INTEGER_new);
+       M_ASN1_New(ret->version,M_ASN1_INTEGER_new);
        M_ASN1_New(ret->enc_data,PKCS7_ENC_CONTENT_new);
        return(ret);
        M_ASN1_New_Error(ASN1_F_PKCS7_ENCRYPT_NEW);
@@ -104,8 +104,8 @@
 void PKCS7_ENCRYPT_free(PKCS7_ENCRYPT *a)
        {
        if (a == NULL) return;
-       ASN1_INTEGER_free(a->version);
+       M_ASN1_INTEGER_free(a->version);
        PKCS7_ENC_CONTENT_free(a->enc_data);
-       Free((char *)a);
+       Free(a);
        }
 
Index: opensa/openssl/crypto/asn1/p7_enc_c.c
diff -u opensa/openssl/crypto/asn1/p7_enc_c.c:1.1 
opensa/openssl/crypto/asn1/p7_enc_c.c:1.2
--- opensa/openssl/crypto/asn1/p7_enc_c.c:1.1   Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/p7_enc_c.c       Thu Mar  2 21:11:50 2000
@@ -101,7 +101,8 @@
 
        M_ASN1_New_Malloc(ret,PKCS7_ENC_CONTENT);
        /* M_ASN1_New(ret->content_type,ASN1_OBJECT_new); */
-       ret->content_type=OBJ_nid2obj(NID_pkcs7_encrypted);
+       /* We will almost always want this: so make it the default */
+       ret->content_type=OBJ_nid2obj(NID_pkcs7_data);
        M_ASN1_New(ret->algorithm,X509_ALGOR_new);
        ret->enc_data=NULL;
        return(ret);
@@ -113,7 +114,7 @@
        if (a == NULL) return;
        ASN1_OBJECT_free(a->content_type);
        X509_ALGOR_free(a->algorithm);
-       ASN1_OCTET_STRING_free(a->enc_data);
-       Free((char *)a);
+       M_ASN1_OCTET_STRING_free(a->enc_data);
+       Free(a);
        }
 
Index: opensa/openssl/crypto/asn1/p7_evp.c
diff -u opensa/openssl/crypto/asn1/p7_evp.c:1.1 opensa/openssl/crypto/asn1/p7_evp.c:1.2
--- opensa/openssl/crypto/asn1/p7_evp.c:1.1     Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/p7_evp.c Thu Mar  2 21:11:50 2000
@@ -101,7 +101,7 @@
        ASN1_CTX c;
 
        M_ASN1_New_Malloc(ret,PKCS7_ENVELOPE);
-       M_ASN1_New(ret->version,ASN1_INTEGER_new);
+       M_ASN1_New(ret->version,M_ASN1_INTEGER_new);
        M_ASN1_New(ret->recipientinfo,sk_PKCS7_RECIP_INFO_new_null);
        M_ASN1_New(ret->enc_data,PKCS7_ENC_CONTENT_new);
        return(ret);
@@ -111,9 +111,9 @@
 void PKCS7_ENVELOPE_free(PKCS7_ENVELOPE *a)
        {
        if (a == NULL) return;
-       ASN1_INTEGER_free(a->version);
+       M_ASN1_INTEGER_free(a->version);
        sk_PKCS7_RECIP_INFO_pop_free(a->recipientinfo,PKCS7_RECIP_INFO_free);
        PKCS7_ENC_CONTENT_free(a->enc_data);
-       Free((char *)a);
+       Free(a);
        }
 
Index: opensa/openssl/crypto/asn1/p7_i_s.c
diff -u opensa/openssl/crypto/asn1/p7_i_s.c:1.1 opensa/openssl/crypto/asn1/p7_i_s.c:1.2
--- opensa/openssl/crypto/asn1/p7_i_s.c:1.1     Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/p7_i_s.c Thu Mar  2 21:11:50 2000
@@ -96,7 +96,7 @@
 
        M_ASN1_New_Malloc(ret,PKCS7_ISSUER_AND_SERIAL);
        M_ASN1_New(ret->issuer,X509_NAME_new);
-       M_ASN1_New(ret->serial,ASN1_INTEGER_new);
+       M_ASN1_New(ret->serial,M_ASN1_INTEGER_new);
        return(ret);
        M_ASN1_New_Error(ASN1_F_PKCS7_ISSUER_AND_SERIAL_NEW);
        }
@@ -105,7 +105,7 @@
        {
        if (a == NULL) return;
        X509_NAME_free(a->issuer);
-       ASN1_INTEGER_free(a->serial);
-       Free((char *)a);
+       M_ASN1_INTEGER_free(a->serial);
+       Free(a);
        }
 
Index: opensa/openssl/crypto/asn1/p7_lib.c
diff -u opensa/openssl/crypto/asn1/p7_lib.c:1.1 opensa/openssl/crypto/asn1/p7_lib.c:1.2
--- opensa/openssl/crypto/asn1/p7_lib.c:1.1     Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/p7_lib.c Thu Mar  2 21:11:50 2000
@@ -152,7 +152,7 @@
                {
                if ((*a)->asn1 != NULL)
                        {
-                       Free((char *)(*a)->asn1);
+                       Free((*a)->asn1);
                        (*a)->asn1=NULL;
                        }
                (*a)->length=0;
@@ -251,7 +251,7 @@
                {
                ASN1_OBJECT_free(a->type);
                }
-       Free((char *)(char *)a);
+       Free(a);
        }
 
 void PKCS7_content_free(PKCS7 *a)
@@ -259,7 +259,7 @@
        if(a == NULL)
            return;
 
-       if (a->asn1 != NULL) Free((char *)a->asn1);
+       if (a->asn1 != NULL) Free(a->asn1);
 
        if (a->d.ptr != NULL)
                {
@@ -268,7 +268,7 @@
                switch (OBJ_obj2nid(a->type))
                        {
                case NID_pkcs7_data:
-                       ASN1_OCTET_STRING_free(a->d.data);
+                       M_ASN1_OCTET_STRING_free(a->d.data);
                        break;
                case NID_pkcs7_signed:
                        PKCS7_SIGNED_free(a->d.sign);
Index: opensa/openssl/crypto/asn1/p7_recip.c
diff -u opensa/openssl/crypto/asn1/p7_recip.c:1.1 
opensa/openssl/crypto/asn1/p7_recip.c:1.2
--- opensa/openssl/crypto/asn1/p7_recip.c:1.1   Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/p7_recip.c       Thu Mar  2 21:11:50 2000
@@ -101,10 +101,10 @@
        ASN1_CTX c;
 
        M_ASN1_New_Malloc(ret,PKCS7_RECIP_INFO);
-       M_ASN1_New(ret->version,ASN1_INTEGER_new);
+       M_ASN1_New(ret->version,M_ASN1_INTEGER_new);
        M_ASN1_New(ret->issuer_and_serial,PKCS7_ISSUER_AND_SERIAL_new);
        M_ASN1_New(ret->key_enc_algor,X509_ALGOR_new);
-       M_ASN1_New(ret->enc_key,ASN1_OCTET_STRING_new);
+       M_ASN1_New(ret->enc_key,M_ASN1_OCTET_STRING_new);
        ret->cert=NULL;
        return(ret);
        M_ASN1_New_Error(ASN1_F_PKCS7_RECIP_INFO_NEW);
@@ -113,10 +113,10 @@
 void PKCS7_RECIP_INFO_free(PKCS7_RECIP_INFO *a)
        {
        if (a == NULL) return;
-       ASN1_INTEGER_free(a->version);
+       M_ASN1_INTEGER_free(a->version);
        PKCS7_ISSUER_AND_SERIAL_free(a->issuer_and_serial);
        X509_ALGOR_free(a->key_enc_algor);
-       ASN1_OCTET_STRING_free(a->enc_key);
+       M_ASN1_OCTET_STRING_free(a->enc_key);
        if (a->cert != NULL) X509_free(a->cert);
        Free(a);
        }
Index: opensa/openssl/crypto/asn1/p7_s_e.c
diff -u opensa/openssl/crypto/asn1/p7_s_e.c:1.1 opensa/openssl/crypto/asn1/p7_s_e.c:1.2
--- opensa/openssl/crypto/asn1/p7_s_e.c:1.1     Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/p7_s_e.c Thu Mar  2 21:11:50 2000
@@ -119,7 +119,7 @@
        ASN1_CTX c;
 
        M_ASN1_New_Malloc(ret,PKCS7_SIGN_ENVELOPE);
-       M_ASN1_New(ret->version,ASN1_INTEGER_new);
+       M_ASN1_New(ret->version,M_ASN1_INTEGER_new);
        M_ASN1_New(ret->recipientinfo,sk_PKCS7_RECIP_INFO_new_null);
        M_ASN1_New(ret->md_algs,sk_X509_ALGOR_new_null);
        M_ASN1_New(ret->enc_data,PKCS7_ENC_CONTENT_new);
@@ -133,7 +133,7 @@
 void PKCS7_SIGN_ENVELOPE_free(PKCS7_SIGN_ENVELOPE *a)
        {
        if (a == NULL) return;
-       ASN1_INTEGER_free(a->version);
+       M_ASN1_INTEGER_free(a->version);
        sk_PKCS7_RECIP_INFO_pop_free(a->recipientinfo,PKCS7_RECIP_INFO_free);
        sk_X509_ALGOR_pop_free(a->md_algs,X509_ALGOR_free);
        PKCS7_ENC_CONTENT_free(a->enc_data);
Index: opensa/openssl/crypto/asn1/p7_signd.c
diff -u opensa/openssl/crypto/asn1/p7_signd.c:1.1 
opensa/openssl/crypto/asn1/p7_signd.c:1.2
--- opensa/openssl/crypto/asn1/p7_signd.c:1.1   Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/p7_signd.c       Thu Mar  2 21:11:50 2000
@@ -112,7 +112,7 @@
        ASN1_CTX c;
 
        M_ASN1_New_Malloc(ret,PKCS7_SIGNED);
-       M_ASN1_New(ret->version,ASN1_INTEGER_new);
+       M_ASN1_New(ret->version,M_ASN1_INTEGER_new);
        M_ASN1_New(ret->md_algs,sk_X509_ALGOR_new_null);
        M_ASN1_New(ret->contents,PKCS7_new);
        ret->cert=NULL;
@@ -125,7 +125,7 @@
 void PKCS7_SIGNED_free(PKCS7_SIGNED *a)
        {
        if (a == NULL) return;
-       ASN1_INTEGER_free(a->version);
+       M_ASN1_INTEGER_free(a->version);
        sk_X509_ALGOR_pop_free(a->md_algs,X509_ALGOR_free);
        PKCS7_free(a->contents);
        sk_X509_pop_free(a->cert,X509_free);
Index: opensa/openssl/crypto/asn1/p7_signi.c
diff -u opensa/openssl/crypto/asn1/p7_signi.c:1.1 
opensa/openssl/crypto/asn1/p7_signi.c:1.2
--- opensa/openssl/crypto/asn1/p7_signi.c:1.1   Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/p7_signi.c       Thu Mar  2 21:11:50 2000
@@ -119,12 +119,12 @@
        ASN1_CTX c;
 
        M_ASN1_New_Malloc(ret,PKCS7_SIGNER_INFO);
-       M_ASN1_New(ret->version,ASN1_INTEGER_new);
+       M_ASN1_New(ret->version,M_ASN1_INTEGER_new);
        M_ASN1_New(ret->issuer_and_serial,PKCS7_ISSUER_AND_SERIAL_new);
        M_ASN1_New(ret->digest_alg,X509_ALGOR_new);
        ret->auth_attr=NULL;
        M_ASN1_New(ret->digest_enc_alg,X509_ALGOR_new);
-       M_ASN1_New(ret->enc_digest,ASN1_OCTET_STRING_new);
+       M_ASN1_New(ret->enc_digest,M_ASN1_OCTET_STRING_new);
        ret->unauth_attr=NULL;
        ret->pkey=NULL;
        return(ret);
@@ -134,16 +134,16 @@
 void PKCS7_SIGNER_INFO_free(PKCS7_SIGNER_INFO *a)
        {
        if (a == NULL) return;
-       ASN1_INTEGER_free(a->version);
+       M_ASN1_INTEGER_free(a->version);
        PKCS7_ISSUER_AND_SERIAL_free(a->issuer_and_serial);
        X509_ALGOR_free(a->digest_alg);
        sk_X509_ATTRIBUTE_pop_free(a->auth_attr,X509_ATTRIBUTE_free);
        X509_ALGOR_free(a->digest_enc_alg);
-       ASN1_OCTET_STRING_free(a->enc_digest);
+       M_ASN1_OCTET_STRING_free(a->enc_digest);
        sk_X509_ATTRIBUTE_pop_free(a->unauth_attr,X509_ATTRIBUTE_free);
        if (a->pkey != NULL)
                EVP_PKEY_free(a->pkey);
-       Free((char *)a);
+       Free(a);
        }
 
 IMPLEMENT_STACK_OF(PKCS7_SIGNER_INFO)
Index: opensa/openssl/crypto/asn1/p8_pkey.c
diff -u opensa/openssl/crypto/asn1/p8_pkey.c:1.1 
opensa/openssl/crypto/asn1/p8_pkey.c:1.2
--- opensa/openssl/crypto/asn1/p8_pkey.c:1.1    Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/p8_pkey.c        Thu Mar  2 21:11:50 2000
@@ -88,7 +88,7 @@
        PKCS8_PRIV_KEY_INFO *ret=NULL;
        ASN1_CTX c;
        M_ASN1_New_Malloc(ret, PKCS8_PRIV_KEY_INFO);
-       M_ASN1_New (ret->version, ASN1_INTEGER_new);
+       M_ASN1_New (ret->version, M_ASN1_INTEGER_new);
        M_ASN1_New (ret->pkeyalg, X509_ALGOR_new);
        M_ASN1_New (ret->pkey, ASN1_TYPE_new);
        ret->attributes = NULL;
@@ -109,15 +109,13 @@
        M_ASN1_D2I_get_IMP_set_opt_type(X509_ATTRIBUTE, ret->attributes,
                                        d2i_X509_ATTRIBUTE,
                                        X509_ATTRIBUTE_free, 0);
-       if (ASN1_TYPE_get(ret->pkey) == V_ASN1_SEQUENCE) 
-                                               ret->broken = PKCS8_NO_OCTET;
        M_ASN1_D2I_Finish(a, PKCS8_PRIV_KEY_INFO_free, ASN1_F_D2I_PKCS8_PRIV_KEY_INFO);
 }
 
 void PKCS8_PRIV_KEY_INFO_free (PKCS8_PRIV_KEY_INFO *a)
 {
        if (a == NULL) return;
-       ASN1_INTEGER_free (a->version);
+       M_ASN1_INTEGER_free (a->version);
        X509_ALGOR_free(a->pkeyalg);
        /* Clear sensitive data */
        if (a->pkey->value.octet_string)
Index: opensa/openssl/crypto/asn1/t_crl.c
diff -u opensa/openssl/crypto/asn1/t_crl.c:1.1 opensa/openssl/crypto/asn1/t_crl.c:1.2
--- opensa/openssl/crypto/asn1/t_crl.c:1.1      Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/t_crl.c  Thu Mar  2 21:11:50 2000
@@ -160,7 +160,7 @@
        BIO_printf(out, ": %s\n", j ? "critical":"","");
        if(!X509V3_EXT_print(out, ex, 0, 16)) {
                BIO_printf(out, "%16s", "");
-               ASN1_OCTET_STRING_print(out,ex->value);
+               M_ASN1_OCTET_STRING_print(out,ex->value);
        }
        BIO_write(out,"\n",1);
 }
Index: opensa/openssl/crypto/asn1/t_pkey.c
diff -u opensa/openssl/crypto/asn1/t_pkey.c:1.1 opensa/openssl/crypto/asn1/t_pkey.c:1.2
--- opensa/openssl/crypto/asn1/t_pkey.c:1.1     Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/t_pkey.c Thu Mar  2 21:11:50 2000
@@ -133,7 +133,7 @@
        if (!print(bp,"coefficient:",x->iqmp,m,off)) goto err;
        ret=1;
 err:
-       if (m != NULL) Free((char *)m);
+       if (m != NULL) Free(m);
        return(ret);
        }
 #endif /* NO_RSA */
@@ -204,7 +204,7 @@
        if ((x->g != NULL) && !print(bp,"G:   ",x->g,m,off)) goto err;
        ret=1;
 err:
-       if (m != NULL) Free((char *)m);
+       if (m != NULL) Free(m);
        return(ret);
        }
 #endif /* !NO_DSA */
@@ -298,7 +298,7 @@
        if (!print(bp,"generator:",x->g,m,4)) goto err;
        if (x->length != 0)
                {
-               if (BIO_printf(bp,"    recomented-private-length: %d bits\n",
+               if (BIO_printf(bp,"    recommended-private-length: %d bits\n",
                        (int)x->length) <= 0) goto err;
                }
        ret=1;
@@ -307,7 +307,7 @@
 err:
                DHerr(DH_F_DHPARAMS_PRINT,reason);
                }
-       if (m != NULL) Free((char *)m);
+       if (m != NULL) Free(m);
        return(ret);
        }
 #endif
@@ -352,7 +352,7 @@
        if (!print(bp,"g:",x->g,m,4)) goto err;
        ret=1;
 err:
-       if (m != NULL) Free((char *)m);
+       if (m != NULL) Free(m);
        DSAerr(DSA_F_DSAPARAMS_PRINT,reason);
        return(ret);
        }
Index: opensa/openssl/crypto/asn1/t_req.c
diff -u opensa/openssl/crypto/asn1/t_req.c:1.1 opensa/openssl/crypto/asn1/t_req.c:1.2
--- opensa/openssl/crypto/asn1/t_req.c:1.1      Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/t_req.c  Thu Mar  2 21:11:50 2000
@@ -62,6 +62,7 @@
 #include <openssl/bn.h>
 #include <openssl/objects.h>
 #include <openssl/x509.h>
+#include <openssl/x509v3.h>
 
 #ifndef NO_FP_API
 int X509_REQ_print_fp(FILE *fp, X509_REQ *x)
@@ -90,6 +91,7 @@
        X509_REQ_INFO *ri;
        EVP_PKEY *pkey;
        STACK_OF(X509_ATTRIBUTE) *sk;
+       STACK_OF(X509_EXTENSION) *exts;
        char str[128];
 
        ri=x->req_info;
@@ -161,6 +163,8 @@
                        int j,type=0,count=1,ii=0;
 
                        a=sk_X509_ATTRIBUTE_value(sk,i);
+                       if(X509_REQ_extension_nid(OBJ_obj2nid(a->object)))
+                                                               continue;
                        sprintf(str,"%12s","");
                        if (BIO_puts(bp,str) <= 0) goto err;
                        if ((j=i2a_ASN1_OBJECT(bp,a->object)) > 0)
@@ -200,6 +204,29 @@
                        if (++ii < count) goto get_next;
                        }
                }
+
+       exts = X509_REQ_get_extensions(x);
+       if(exts) {
+               BIO_printf(bp,"%8sRequested Extensions:\n","");
+               for (i=0; i<sk_X509_EXTENSION_num(exts); i++) {
+                       ASN1_OBJECT *obj;
+                       X509_EXTENSION *ex;
+                       int j;
+                       ex=sk_X509_EXTENSION_value(exts, i);
+                       if (BIO_printf(bp,"%12s","") <= 0) goto err;
+                       obj=X509_EXTENSION_get_object(ex);
+                       i2a_ASN1_OBJECT(bp,obj);
+                       j=X509_EXTENSION_get_critical(ex);
+                       if (BIO_printf(bp,": %s\n",j?"critical":"","") <= 0)
+                               goto err;
+                       if(!X509V3_EXT_print(bp, ex, 0, 16)) {
+                               BIO_printf(bp, "%16s", "");
+                               M_ASN1_OCTET_STRING_print(bp,ex->value);
+                       }
+                       if (BIO_write(bp,"\n",1) <= 0) goto err;
+               }
+               sk_X509_EXTENSION_pop_free(exts, X509_EXTENSION_free);
+       }
 
        i=OBJ_obj2nid(x->sig_alg->algorithm);
        sprintf(str,"%4sSignature Algorithm: %s","",
Index: opensa/openssl/crypto/asn1/t_x509.c
diff -u opensa/openssl/crypto/asn1/t_x509.c:1.1 opensa/openssl/crypto/asn1/t_x509.c:1.2
--- opensa/openssl/crypto/asn1/t_x509.c:1.1     Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/t_x509.c Thu Mar  2 21:11:50 2000
@@ -188,11 +188,7 @@
                BIO_printf(bp,"%8sX509v3 extensions:\n","");
                for (i=0; i<n; i++)
                        {
-#if 0
-                       int data_type,pack_type;
-#endif
                        ASN1_OBJECT *obj;
-
                        ex=X509_get_ext(x,i);
                        if (BIO_printf(bp,"%12s","") <= 0) goto err;
                        obj=X509_EXTENSION_get_object(ex);
@@ -203,7 +199,7 @@
                        if(!X509V3_EXT_print(bp, ex, 0, 16))
                                {
                                BIO_printf(bp, "%16s", "");
-                               ASN1_OCTET_STRING_print(bp,ex->value);
+                               M_ASN1_OCTET_STRING_print(bp,ex->value);
                                }
                        if (BIO_write(bp,"\n",1) <= 0) goto err;
                        }
@@ -223,10 +219,11 @@
                        ((i+1) == n)?"":":") <= 0) goto err;
                }
        if (BIO_write(bp,"\n",1) != 1) goto err;
+       if (!X509_CERT_AUX_print(bp, x->aux, 0)) goto err;
        ret=1;
 err:
        if (str != NULL) ASN1_STRING_free(str);
-       if (m != NULL) Free((char *)m);
+       if (m != NULL) Free(m);
        return(ret);
        }
 
Index: opensa/openssl/crypto/asn1/x_algor.c
diff -u opensa/openssl/crypto/asn1/x_algor.c:1.1 
opensa/openssl/crypto/asn1/x_algor.c:1.2
--- opensa/openssl/crypto/asn1/x_algor.c:1.1    Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/x_algor.c        Thu Mar  2 21:11:50 2000
@@ -111,7 +111,7 @@
        if (a == NULL) return;
        ASN1_OBJECT_free(a->algorithm);
        ASN1_TYPE_free(a->parameter);
-       Free((char *)a);
+       Free(a);
        }
 
 IMPLEMENT_STACK_OF(X509_ALGOR)
Index: opensa/openssl/crypto/asn1/x_attrib.c
diff -u opensa/openssl/crypto/asn1/x_attrib.c:1.1 
opensa/openssl/crypto/asn1/x_attrib.c:1.2
--- opensa/openssl/crypto/asn1/x_attrib.c:1.1   Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/x_attrib.c       Thu Mar  2 21:11:50 2000
@@ -160,6 +160,6 @@
                sk_ASN1_TYPE_pop_free(a->value.set,ASN1_TYPE_free);
        else
                ASN1_TYPE_free(a->value.single);
-       Free((char *)a);
+       Free(a);
        }
 
Index: opensa/openssl/crypto/asn1/x_cinf.c
diff -u opensa/openssl/crypto/asn1/x_cinf.c:1.1 opensa/openssl/crypto/asn1/x_cinf.c:1.2
--- opensa/openssl/crypto/asn1/x_cinf.c:1.1     Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/x_cinf.c Thu Mar  2 21:11:50 2000
@@ -115,7 +115,7 @@
                {
                if (ret->version != NULL)
                        {
-                       ASN1_INTEGER_free(ret->version);
+                       M_ASN1_INTEGER_free(ret->version);
                        ret->version=NULL;
                        }
                }
@@ -129,12 +129,12 @@
                {
                if (ret->issuerUID != NULL)
                        {
-                       ASN1_BIT_STRING_free(ret->issuerUID);
+                       M_ASN1_BIT_STRING_free(ret->issuerUID);
                        ret->issuerUID=NULL;
                        }
                if (ret->subjectUID != NULL)
                        {
-                       ASN1_BIT_STRING_free(ret->subjectUID);
+                       M_ASN1_BIT_STRING_free(ret->subjectUID);
                        ret->subjectUID=NULL;
                        }
                M_ASN1_D2I_get_IMP_opt(ret->issuerUID,d2i_ASN1_BIT_STRING,  1,
@@ -170,7 +170,7 @@
 
        M_ASN1_New_Malloc(ret,X509_CINF);
        ret->version=NULL;
-       M_ASN1_New(ret->serialNumber,ASN1_INTEGER_new);
+       M_ASN1_New(ret->serialNumber,M_ASN1_INTEGER_new);
        M_ASN1_New(ret->signature,X509_ALGOR_new);
        M_ASN1_New(ret->issuer,X509_NAME_new);
        M_ASN1_New(ret->validity,X509_VAL_new);
@@ -186,15 +186,15 @@
 void X509_CINF_free(X509_CINF *a)
        {
        if (a == NULL) return;
-       ASN1_INTEGER_free(a->version);
-       ASN1_INTEGER_free(a->serialNumber);
+       M_ASN1_INTEGER_free(a->version);
+       M_ASN1_INTEGER_free(a->serialNumber);
        X509_ALGOR_free(a->signature);
        X509_NAME_free(a->issuer);
        X509_VAL_free(a->validity);
        X509_NAME_free(a->subject);
        X509_PUBKEY_free(a->key);
-       ASN1_BIT_STRING_free(a->issuerUID);
-       ASN1_BIT_STRING_free(a->subjectUID);
+       M_ASN1_BIT_STRING_free(a->issuerUID);
+       M_ASN1_BIT_STRING_free(a->subjectUID);
        sk_X509_EXTENSION_pop_free(a->extensions,X509_EXTENSION_free);
        Free(a);
        }
Index: opensa/openssl/crypto/asn1/x_crl.c
diff -u opensa/openssl/crypto/asn1/x_crl.c:1.1 opensa/openssl/crypto/asn1/x_crl.c:1.2
--- opensa/openssl/crypto/asn1/x_crl.c:1.1      Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/x_crl.c  Thu Mar  2 21:11:50 2000
@@ -130,9 +130,9 @@
                }
        M_ASN1_I2D_put(a->sig_alg,i2d_X509_ALGOR);
        M_ASN1_I2D_put(a->issuer,i2d_X509_NAME);
-       M_ASN1_I2D_put(a->lastUpdate,i2d_ASN1_UTCTIME);
+       M_ASN1_I2D_put(a->lastUpdate,i2d_ASN1_TIME);
        if (a->nextUpdate != NULL)
-               { M_ASN1_I2D_put(a->nextUpdate,i2d_ASN1_UTCTIME); }
+               { M_ASN1_I2D_put(a->nextUpdate,i2d_ASN1_TIME); }
        M_ASN1_I2D_put_SEQUENCE_opt_type(X509_REVOKED,a->revoked,
                                         i2d_X509_REVOKED);
        M_ASN1_I2D_put_EXP_SEQUENCE_opt_type(X509_EXTENSION,a->extensions,
@@ -157,20 +157,16 @@
        
        if ((ver == 0) && (ret->version != NULL))
                {
-               ASN1_INTEGER_free(ret->version);
+               M_ASN1_INTEGER_free(ret->version);
                ret->version=NULL;
                }
        M_ASN1_D2I_get(ret->sig_alg,d2i_X509_ALGOR);
        M_ASN1_D2I_get(ret->issuer,d2i_X509_NAME);
        M_ASN1_D2I_get(ret->lastUpdate,d2i_ASN1_TIME);
        /* Manually handle the OPTIONAL ASN1_TIME stuff */
-       if(c.slen != 0
-          && ( (M_ASN1_next & ~V_ASN1_CONSTRUCTED) ==
-                   (V_ASN1_UNIVERSAL|V_ASN1_UTCTIME)
-               || (M_ASN1_next & ~V_ASN1_CONSTRUCTED) ==
-                   (V_ASN1_UNIVERSAL|V_ASN1_GENERALIZEDTIME) ) ) {
-               M_ASN1_D2I_get(ret->nextUpdate,d2i_ASN1_TIME);
-       }
+       /* First try UTCTime */
+       M_ASN1_D2I_get_opt(ret->nextUpdate,d2i_ASN1_UTCTIME, V_ASN1_UTCTIME);
+       /* If that doesn't work try GeneralizedTime */
        if(!ret->nextUpdate) 
                M_ASN1_D2I_get_opt(ret->nextUpdate,d2i_ASN1_GENERALIZEDTIME,
                                                        V_ASN1_GENERALIZEDTIME);
@@ -190,20 +186,17 @@
                        }
                }
 
-       if (ver >= 1)
+       if (ret->extensions != NULL)
                {
-               if (ret->extensions != NULL)
-                       {
-                       while (sk_X509_EXTENSION_num(ret->extensions))
-                               X509_EXTENSION_free(
-                               sk_X509_EXTENSION_pop(ret->extensions));
-                       }
-                       
-               M_ASN1_D2I_get_EXP_set_opt_type(X509_EXTENSION,ret->extensions,
-                                               d2i_X509_EXTENSION,
-                                               X509_EXTENSION_free,0,
-                                               V_ASN1_SEQUENCE);
+               while (sk_X509_EXTENSION_num(ret->extensions))
+                       X509_EXTENSION_free(
+                       sk_X509_EXTENSION_pop(ret->extensions));
                }
+               
+       M_ASN1_D2I_get_EXP_set_opt_type(X509_EXTENSION,ret->extensions,
+                                       d2i_X509_EXTENSION,
+                                       X509_EXTENSION_free,0,
+                                       V_ASN1_SEQUENCE);
 
        M_ASN1_D2I_Finish(a,X509_CRL_INFO_free,ASN1_F_D2I_X509_CRL_INFO);
        }
@@ -245,8 +238,8 @@
        ASN1_CTX c;
 
        M_ASN1_New_Malloc(ret,X509_REVOKED);
-       M_ASN1_New(ret->serialNumber,ASN1_INTEGER_new);
-       M_ASN1_New(ret->revocationDate,ASN1_UTCTIME_new);
+       M_ASN1_New(ret->serialNumber,M_ASN1_INTEGER_new);
+       M_ASN1_New(ret->revocationDate,M_ASN1_UTCTIME_new);
        ret->extensions=NULL;
        return(ret);
        M_ASN1_New_Error(ASN1_F_X509_REVOKED_NEW);
@@ -261,7 +254,7 @@
        ret->version=NULL;
        M_ASN1_New(ret->sig_alg,X509_ALGOR_new);
        M_ASN1_New(ret->issuer,X509_NAME_new);
-       M_ASN1_New(ret->lastUpdate,ASN1_UTCTIME_new);
+       M_ASN1_New(ret->lastUpdate,M_ASN1_UTCTIME_new);
        ret->nextUpdate=NULL;
        M_ASN1_New(ret->revoked,sk_X509_REVOKED_new_null);
        M_ASN1_New(ret->extensions,sk_X509_EXTENSION_new_null);
@@ -279,7 +272,7 @@
        ret->references=1;
        M_ASN1_New(ret->crl,X509_CRL_INFO_new);
        M_ASN1_New(ret->sig_alg,X509_ALGOR_new);
-       M_ASN1_New(ret->signature,ASN1_BIT_STRING_new);
+       M_ASN1_New(ret->signature,M_ASN1_BIT_STRING_new);
        return(ret);
        M_ASN1_New_Error(ASN1_F_X509_CRL_NEW);
        }
@@ -287,8 +280,8 @@
 void X509_REVOKED_free(X509_REVOKED *a)
        {
        if (a == NULL) return;
-       ASN1_INTEGER_free(a->serialNumber);
-       ASN1_UTCTIME_free(a->revocationDate);
+       M_ASN1_INTEGER_free(a->serialNumber);
+       M_ASN1_UTCTIME_free(a->revocationDate);
        sk_X509_EXTENSION_pop_free(a->extensions,X509_EXTENSION_free);
        Free(a);
        }
@@ -296,12 +289,12 @@
 void X509_CRL_INFO_free(X509_CRL_INFO *a)
        {
        if (a == NULL) return;
-       ASN1_INTEGER_free(a->version);
+       M_ASN1_INTEGER_free(a->version);
        X509_ALGOR_free(a->sig_alg);
        X509_NAME_free(a->issuer);
-       ASN1_UTCTIME_free(a->lastUpdate);
+       M_ASN1_UTCTIME_free(a->lastUpdate);
        if (a->nextUpdate)
-               ASN1_UTCTIME_free(a->nextUpdate);
+               M_ASN1_UTCTIME_free(a->nextUpdate);
        sk_X509_REVOKED_pop_free(a->revoked,X509_REVOKED_free);
        sk_X509_EXTENSION_pop_free(a->extensions,X509_EXTENSION_free);
        Free(a);
@@ -328,7 +321,7 @@
 
        X509_CRL_INFO_free(a->crl);
        X509_ALGOR_free(a->sig_alg);
-       ASN1_BIT_STRING_free(a->signature);
+       M_ASN1_BIT_STRING_free(a->signature);
        Free(a);
        }
 
Index: opensa/openssl/crypto/asn1/x_exten.c
diff -u opensa/openssl/crypto/asn1/x_exten.c:1.1 
opensa/openssl/crypto/asn1/x_exten.c:1.2
--- opensa/openssl/crypto/asn1/x_exten.c:1.1    Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/x_exten.c        Thu Mar  2 21:11:50 2000
@@ -100,10 +100,6 @@
        M_ASN1_D2I_start_sequence();
        M_ASN1_D2I_get(ret->object,d2i_ASN1_OBJECT);
 
-       if ((ret->argp != NULL) && (ret->ex_free != NULL))
-               ret->ex_free(ret);
-       ret->argl=0;
-       ret->argp=NULL;
        ret->netscape_hack=0;
        if ((c.slen != 0) &&
                (M_ASN1_next == (V_ASN1_UNIVERSAL|V_ASN1_BOOLEAN)))
@@ -126,12 +122,9 @@
 
        M_ASN1_New_Malloc(ret,X509_EXTENSION);
        ret->object=OBJ_nid2obj(NID_undef);
-       M_ASN1_New(ret->value,ASN1_OCTET_STRING_new);
+       M_ASN1_New(ret->value,M_ASN1_OCTET_STRING_new);
        ret->critical=0;
        ret->netscape_hack=0;
-       ret->argl=0L;
-       ret->argp=NULL;
-       ret->ex_free=NULL;
        return(ret);
        M_ASN1_New_Error(ASN1_F_X509_EXTENSION_NEW);
        }
@@ -139,10 +132,8 @@
 void X509_EXTENSION_free(X509_EXTENSION *a)
        {
        if (a == NULL) return;
-       if ((a->argp != NULL) && (a->ex_free != NULL))
-               a->ex_free(a);
        ASN1_OBJECT_free(a->object);
-       ASN1_OCTET_STRING_free(a->value);
-       Free((char *)a);
+       M_ASN1_OCTET_STRING_free(a->value);
+       Free(a);
        }
 
Index: opensa/openssl/crypto/asn1/x_info.c
diff -u opensa/openssl/crypto/asn1/x_info.c:1.1 opensa/openssl/crypto/asn1/x_info.c:1.2
--- opensa/openssl/crypto/asn1/x_info.c:1.1     Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/x_info.c Thu Mar  2 21:11:50 2000
@@ -106,7 +106,8 @@
        if (x->x509 != NULL) X509_free(x->x509);
        if (x->crl != NULL) X509_CRL_free(x->crl);
        if (x->x_pkey != NULL) X509_PKEY_free(x->x_pkey);
-       Free((char *)x);
+       if (x->enc_data != NULL) Free(x->enc_data);
+       Free(x);
        }
 
 IMPLEMENT_STACK_OF(X509_INFO)
Index: opensa/openssl/crypto/asn1/x_name.c
diff -u opensa/openssl/crypto/asn1/x_name.c:1.1 opensa/openssl/crypto/asn1/x_name.c:1.2
--- opensa/openssl/crypto/asn1/x_name.c:1.1     Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/x_name.c Thu Mar  2 21:11:50 2000
@@ -253,7 +253,7 @@
        {
        if (a == NULL) return;
        ASN1_OBJECT_free(a->object);
-       ASN1_BIT_STRING_free(a->value);
+       M_ASN1_BIT_STRING_free(a->value);
        Free(a);
        }
 
Index: opensa/openssl/crypto/asn1/x_pkey.c
diff -u opensa/openssl/crypto/asn1/x_pkey.c:1.1 opensa/openssl/crypto/asn1/x_pkey.c:1.2
--- opensa/openssl/crypto/asn1/x_pkey.c:1.1     Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/x_pkey.c Thu Mar  2 21:11:50 2000
@@ -112,7 +112,7 @@
        M_ASN1_New_Malloc(ret,X509_PKEY);
        ret->version=0;
        M_ASN1_New(ret->enc_algor,X509_ALGOR_new);
-       M_ASN1_New(ret->enc_pkey,ASN1_OCTET_STRING_new);
+       M_ASN1_New(ret->enc_pkey,M_ASN1_OCTET_STRING_new);
        ret->dec_pkey=NULL;
        ret->key_length=0;
        ret->key_data=NULL;
@@ -144,8 +144,8 @@
 #endif
 
        if (x->enc_algor != NULL) X509_ALGOR_free(x->enc_algor);
-       if (x->enc_pkey != NULL) ASN1_OCTET_STRING_free(x->enc_pkey);
+       if (x->enc_pkey != NULL) M_ASN1_OCTET_STRING_free(x->enc_pkey);
        if (x->dec_pkey != NULL)EVP_PKEY_free(x->dec_pkey);
-       if ((x->key_data != NULL) && (x->key_free)) Free((char *)x->key_data);
-       Free((char *)(char *)x);
+       if ((x->key_data != NULL) && (x->key_free)) Free(x->key_data);
+       Free(x);
        }
Index: opensa/openssl/crypto/asn1/x_pubkey.c
diff -u opensa/openssl/crypto/asn1/x_pubkey.c:1.1 
opensa/openssl/crypto/asn1/x_pubkey.c:1.2
--- opensa/openssl/crypto/asn1/x_pubkey.c:1.1   Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/x_pubkey.c       Thu Mar  2 21:11:50 2000
@@ -100,7 +100,7 @@
 
        M_ASN1_New_Malloc(ret,X509_PUBKEY);
        M_ASN1_New(ret->algor,X509_ALGOR_new);
-       M_ASN1_New(ret->public_key,ASN1_BIT_STRING_new);
+       M_ASN1_New(ret->public_key,M_ASN1_BIT_STRING_new);
        ret->pkey=NULL;
        return(ret);
        M_ASN1_New_Error(ASN1_F_X509_PUBKEY_NEW);
@@ -110,9 +110,9 @@
        {
        if (a == NULL) return;
        X509_ALGOR_free(a->algor);
-       ASN1_BIT_STRING_free(a->public_key);
+       M_ASN1_BIT_STRING_free(a->public_key);
        if (a->pkey != NULL) EVP_PKEY_free(a->pkey);
-       Free((char *)a);
+       Free(a);
        }
 
 int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey)
@@ -176,7 +176,7 @@
        if ((s=(unsigned char *)Malloc(i+1)) == NULL) goto err;
        p=s;
        i2d_PublicKey(pkey,&p);
-       if (!ASN1_BIT_STRING_set(pk->public_key,s,i)) goto err;
+       if (!M_ASN1_BIT_STRING_set(pk->public_key,s,i)) goto err;
        /* Set number of unused bits to zero */
        pk->public_key->flags&= ~(ASN1_STRING_FLAG_BITS_LEFT|0x07);
        pk->public_key->flags|=ASN1_STRING_FLAG_BITS_LEFT;
@@ -252,3 +252,113 @@
        return(NULL);
        }
 
+/* Now two pseudo ASN1 routines that take an EVP_PKEY structure
+ * and encode or decode as X509_PUBKEY
+ */
+
+EVP_PKEY *d2i_PUBKEY(EVP_PKEY **a, unsigned char **pp,
+            long length)
+{
+       X509_PUBKEY *xpk;
+       EVP_PKEY *pktmp;
+       xpk = d2i_X509_PUBKEY(NULL, pp, length);
+       if(!xpk) return NULL;
+       pktmp = X509_PUBKEY_get(xpk);
+       X509_PUBKEY_free(xpk);
+       if(!pktmp) return NULL;
+       if(a) {
+               EVP_PKEY_free(*a);
+               *a = pktmp;
+       }
+       return pktmp;
+}
+
+int i2d_PUBKEY(EVP_PKEY *a, unsigned char **pp)
+{
+       X509_PUBKEY *xpk=NULL;
+       int ret;
+       if(!a) return 0;
+       if(!X509_PUBKEY_set(&xpk, a)) return 0;
+       ret = i2d_X509_PUBKEY(xpk, pp);
+       X509_PUBKEY_free(xpk);
+       return ret;
+}
+
+/* The following are equivalents but which return RSA and DSA
+ * keys
+ */
+#ifndef NO_RSA
+RSA *d2i_RSA_PUBKEY(RSA **a, unsigned char **pp,
+            long length)
+{
+       EVP_PKEY *pkey;
+       RSA *key;
+       unsigned char *q;
+       q = *pp;
+       pkey = d2i_PUBKEY(NULL, &q, length);
+       if(!pkey) return NULL;
+       key = EVP_PKEY_get1_RSA(pkey);
+       EVP_PKEY_free(pkey);
+       if(!key) return NULL;
+       *pp = q;
+       if(a) {
+               RSA_free(*a);
+               *a = key;
+       }
+       return key;
+}
+
+int i2d_RSA_PUBKEY(RSA *a, unsigned char **pp)
+{
+       EVP_PKEY *pktmp;
+       int ret;
+       if(!a) return 0;
+       pktmp = EVP_PKEY_new();
+       if(!pktmp) {
+               ASN1err(ASN1_F_I2D_RSA_PUBKEY, ERR_R_MALLOC_FAILURE);
+               return 0;
+       }
+       EVP_PKEY_set1_RSA(pktmp, a);
+       ret = i2d_PUBKEY(pktmp, pp);
+       EVP_PKEY_free(pktmp);
+       return ret;
+}
+#endif
+
+#ifndef NO_DSA
+DSA *d2i_DSA_PUBKEY(DSA **a, unsigned char **pp,
+            long length)
+{
+       EVP_PKEY *pkey;
+       DSA *key;
+       unsigned char *q;
+       q = *pp;
+       pkey = d2i_PUBKEY(NULL, &q, length);
+       if(!pkey) return NULL;
+       key = EVP_PKEY_get1_DSA(pkey);
+       EVP_PKEY_free(pkey);
+       if(!key) return NULL;
+       *pp = q;
+       if(a) {
+               DSA_free(*a);
+               *a = key;
+       }
+       return key;
+}
+
+int i2d_DSA_PUBKEY(DSA *a, unsigned char **pp)
+{
+       EVP_PKEY *pktmp;
+       int ret;
+       if(!a) return 0;
+       pktmp = EVP_PKEY_new();
+       if(!pktmp) {
+               ASN1err(ASN1_F_I2D_DSA_PUBKEY, ERR_R_MALLOC_FAILURE);
+               return 0;
+       }
+       EVP_PKEY_set1_DSA(pktmp, a);
+       ret = i2d_PUBKEY(pktmp, pp);
+       EVP_PKEY_free(pktmp);
+       return ret;
+}
+#endif
Index: opensa/openssl/crypto/asn1/x_req.c
diff -u opensa/openssl/crypto/asn1/x_req.c:1.1 opensa/openssl/crypto/asn1/x_req.c:1.2
--- opensa/openssl/crypto/asn1/x_req.c:1.1      Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/x_req.c  Thu Mar  2 21:11:50 2000
@@ -73,7 +73,7 @@
         * allow some CA Software to accept the cert request.
         * It is not following the PKCS standards ...
         * PKCS#10 pg 5
-        * attributes [0] IMPLICIT Attibutes
+        * attributes [0] IMPLICIT Attributes
         * NOTE: no OPTIONAL ... so it *must* be there
         */
        if (a->req_kludge) 
@@ -94,7 +94,7 @@
        /* this is a *nasty* hack reported to be required by some CA's.
         * It is not following the PKCS standards ...
         * PKCS#10 pg 5
-        * attributes [0] IMPLICIT Attibutes
+        * attributes [0] IMPLICIT Attributes
         * NOTE: no OPTIONAL ... so it *must* be there
         */
        if (a->req_kludge)
@@ -126,7 +126,7 @@
         * have been reported as requiring it.
         * It is not following the PKCS standards ...
         * PKCS#10 pg 5
-        * attributes [0] IMPLICIT Attibutes
+        * attributes [0] IMPLICIT Attributes
         * NOTE: no OPTIONAL ... so it *must* be there
         */
        if (asn1_Finish(&c))
@@ -147,7 +147,7 @@
        ASN1_CTX c;
 
        M_ASN1_New_Malloc(ret,X509_REQ_INFO);
-       M_ASN1_New(ret->version,ASN1_INTEGER_new);
+       M_ASN1_New(ret->version,M_ASN1_INTEGER_new);
        M_ASN1_New(ret->subject,X509_NAME_new);
        M_ASN1_New(ret->pubkey,X509_PUBKEY_new);
        M_ASN1_New(ret->attributes,sk_X509_ATTRIBUTE_new_null);
@@ -159,11 +159,11 @@
 void X509_REQ_INFO_free(X509_REQ_INFO *a)
        {
        if (a == NULL) return;
-       ASN1_INTEGER_free(a->version);
+       M_ASN1_INTEGER_free(a->version);
        X509_NAME_free(a->subject);
        X509_PUBKEY_free(a->pubkey);
        sk_X509_ATTRIBUTE_pop_free(a->attributes,X509_ATTRIBUTE_free);
-       Free((char *)a);
+       Free(a);
        }
 
 int i2d_X509_REQ(X509_REQ *a, unsigned char **pp)
@@ -203,7 +203,7 @@
        ret->references=1;
        M_ASN1_New(ret->req_info,X509_REQ_INFO_new);
        M_ASN1_New(ret->sig_alg,X509_ALGOR_new);
-       M_ASN1_New(ret->signature,ASN1_BIT_STRING_new);
+       M_ASN1_New(ret->signature,M_ASN1_BIT_STRING_new);
        return(ret);
        M_ASN1_New_Error(ASN1_F_X509_REQ_NEW);
        }
@@ -229,8 +229,8 @@
 
        X509_REQ_INFO_free(a->req_info);
        X509_ALGOR_free(a->sig_alg);
-       ASN1_BIT_STRING_free(a->signature);
-       Free((char *)a);
+       M_ASN1_BIT_STRING_free(a->signature);
+       Free(a);
        }
 
 
Index: opensa/openssl/crypto/asn1/x_sig.c
diff -u opensa/openssl/crypto/asn1/x_sig.c:1.1 opensa/openssl/crypto/asn1/x_sig.c:1.2
--- opensa/openssl/crypto/asn1/x_sig.c:1.1      Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/x_sig.c  Thu Mar  2 21:11:50 2000
@@ -94,7 +94,7 @@
 
        M_ASN1_New_Malloc(ret,X509_SIG);
        M_ASN1_New(ret->algor,X509_ALGOR_new);
-       M_ASN1_New(ret->digest,ASN1_OCTET_STRING_new);
+       M_ASN1_New(ret->digest,M_ASN1_OCTET_STRING_new);
        return(ret);
        M_ASN1_New_Error(ASN1_F_X509_SIG_NEW);
        }
@@ -103,8 +103,8 @@
        {
        if (a == NULL) return;
        X509_ALGOR_free(a->algor);
-       ASN1_OCTET_STRING_free(a->digest);
-       Free((char *)a);
+       M_ASN1_OCTET_STRING_free(a->digest);
+       Free(a);
        }
 
 
Index: opensa/openssl/crypto/asn1/x_spki.c
diff -u opensa/openssl/crypto/asn1/x_spki.c:1.1 opensa/openssl/crypto/asn1/x_spki.c:1.2
--- opensa/openssl/crypto/asn1/x_spki.c:1.1     Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/x_spki.c Thu Mar  2 21:11:50 2000
@@ -57,7 +57,7 @@
  */
 
  /* This module was send to me my Pat Richards <[EMAIL PROTECTED]> who
-  * wrote it.  It is under my Copyright with his permision
+  * wrote it.  It is under my Copyright with his permission
   */
 
 #include <stdio.h>
@@ -99,7 +99,7 @@
 
        M_ASN1_New_Malloc(ret,NETSCAPE_SPKAC);
        M_ASN1_New(ret->pubkey,X509_PUBKEY_new);
-       M_ASN1_New(ret->challenge,ASN1_IA5STRING_new);
+       M_ASN1_New(ret->challenge,M_ASN1_IA5STRING_new);
        return(ret);
        M_ASN1_New_Error(ASN1_F_NETSCAPE_SPKAC_NEW);
        }
@@ -108,8 +108,8 @@
        {
        if (a == NULL) return;
        X509_PUBKEY_free(a->pubkey);
-       ASN1_IA5STRING_free(a->challenge);
-       Free((char *)a);
+       M_ASN1_IA5STRING_free(a->challenge);
+       Free(a);
        }
 
 int i2d_NETSCAPE_SPKI(NETSCAPE_SPKI *a, unsigned char **pp)
@@ -150,7 +150,7 @@
        M_ASN1_New_Malloc(ret,NETSCAPE_SPKI);
        M_ASN1_New(ret->spkac,NETSCAPE_SPKAC_new);
        M_ASN1_New(ret->sig_algor,X509_ALGOR_new);
-       M_ASN1_New(ret->signature,ASN1_BIT_STRING_new);
+       M_ASN1_New(ret->signature,M_ASN1_BIT_STRING_new);
        return(ret);
        M_ASN1_New_Error(ASN1_F_NETSCAPE_SPKI_NEW);
        }
@@ -160,7 +160,7 @@
        if (a == NULL) return;
        NETSCAPE_SPKAC_free(a->spkac);
        X509_ALGOR_free(a->sig_algor);
-       ASN1_BIT_STRING_free(a->signature);
-       Free((char *)a);
+       M_ASN1_BIT_STRING_free(a->signature);
+       Free(a);
        }
 
Index: opensa/openssl/crypto/asn1/x_val.c
diff -u opensa/openssl/crypto/asn1/x_val.c:1.1 opensa/openssl/crypto/asn1/x_val.c:1.2
--- opensa/openssl/crypto/asn1/x_val.c:1.1      Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/x_val.c  Thu Mar  2 21:11:50 2000
@@ -93,8 +93,8 @@
        ASN1_CTX c;
 
        M_ASN1_New_Malloc(ret,X509_VAL);
-       M_ASN1_New(ret->notBefore,ASN1_TIME_new);
-       M_ASN1_New(ret->notAfter,ASN1_TIME_new);
+       M_ASN1_New(ret->notBefore,M_ASN1_TIME_new);
+       M_ASN1_New(ret->notAfter,M_ASN1_TIME_new);
        return(ret);
        M_ASN1_New_Error(ASN1_F_X509_VAL_NEW);
        }
@@ -102,8 +102,8 @@
 void X509_VAL_free(X509_VAL *a)
        {
        if (a == NULL) return;
-       ASN1_TIME_free(a->notBefore);
-       ASN1_TIME_free(a->notAfter);
-       Free((char *)a);
+       M_ASN1_TIME_free(a->notBefore);
+       M_ASN1_TIME_free(a->notAfter);
+       Free(a);
        }
 
Index: opensa/openssl/crypto/asn1/x_x509.c
diff -u opensa/openssl/crypto/asn1/x_x509.c:1.1 opensa/openssl/crypto/asn1/x_x509.c:1.2
--- opensa/openssl/crypto/asn1/x_x509.c:1.1     Tue Jan 25 23:36:07 2000
+++ opensa/openssl/crypto/asn1/x_x509.c Thu Mar  2 21:11:50 2000
@@ -62,6 +62,9 @@
 #include <openssl/asn1_mac.h>
 #include <openssl/x509.h>
 
+static int x509_meth_num = 0;
+static STACK_OF(CRYPTO_EX_DATA_FUNCS) *x509_meth = NULL;
+
 static ASN1_METHOD meth={
        (int (*)())  i2d_X509,
        (char *(*)())d2i_X509,
@@ -113,10 +116,13 @@
        M_ASN1_New_Malloc(ret,X509);
        ret->references=1;
        ret->valid=0;
+       ret->ex_flags = 0;
        ret->name=NULL;
+       ret->aux=NULL;
        M_ASN1_New(ret->cert_info,X509_CINF_new);
        M_ASN1_New(ret->sig_alg,X509_ALGOR_new);
-       M_ASN1_New(ret->signature,ASN1_BIT_STRING_new);
+       M_ASN1_New(ret->signature,M_ASN1_BIT_STRING_new);
+       CRYPTO_new_ex_data(x509_meth, ret, &ret->ex_data);
        return(ret);
        M_ASN1_New_Error(ASN1_F_X509_NEW);
        }
@@ -140,12 +146,65 @@
                }
 #endif
 
-       /* CRYPTO_free_ex_data(bio_meth,(char *)a,&a->ex_data); */
+       CRYPTO_free_ex_data(x509_meth,a,&a->ex_data);
        X509_CINF_free(a->cert_info);
        X509_ALGOR_free(a->sig_alg);
-       ASN1_BIT_STRING_free(a->signature);
+       M_ASN1_BIT_STRING_free(a->signature);
+       X509_CERT_AUX_free(a->aux);
 
        if (a->name != NULL) Free(a->name);
-       Free((char *)a);
+       Free(a);
+       }
+
+int X509_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
+            CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func)
+        {
+       x509_meth_num++;
+       return(CRYPTO_get_ex_new_index(x509_meth_num-1,
+               &x509_meth,argl,argp,new_func,dup_func,free_func));
+        }
+
+int X509_set_ex_data(X509 *r, int idx, void *arg)
+       {
+       return(CRYPTO_set_ex_data(&r->ex_data,idx,arg));
+       }
+
+void *X509_get_ex_data(X509 *r, int idx)
+       {
+       return(CRYPTO_get_ex_data(&r->ex_data,idx));
        }
 
+/* X509_AUX ASN1 routines. X509_AUX is the name given to
+ * a certificate with extra info tagged on the end. Since these
+ * functions set how a certificate is trusted they should only
+ * be used when the certificate comes from a reliable source
+ * such as local storage.
+ *
+ */
+
+X509 *d2i_X509_AUX(X509 **a, unsigned char **pp, long length)
+{
+       unsigned char *q;
+       X509 *ret;
+       /* Save start position */
+       q = *pp;
+       ret = d2i_X509(a, pp, length);
+       /* If certificate unreadable then forget it */
+       if(!ret) return NULL;
+       /* update length */
+       length -= *pp - q;
+       if(!length) return ret;
+       if(!d2i_X509_CERT_AUX(&ret->aux, pp, length)) goto err;
+       return ret;
+       err:
+       X509_free(ret);
+       return NULL;
+}
+
+int i2d_X509_AUX(X509 *a, unsigned char **pp)
+{
+       int length;
+       length = i2d_X509(a, pp);
+       if(a) length += i2d_X509_CERT_AUX(a->aux, pp);
+       return length;
+}
Index: opensa/openssl/crypto/bf/bf_cbc.c
diff -u opensa/openssl/crypto/bf/bf_cbc.c:1.1 opensa/openssl/crypto/bf/bf_cbc.c:1.2
--- opensa/openssl/crypto/bf/bf_cbc.c:1.1       Tue Jan 25 23:35:20 2000
+++ opensa/openssl/crypto/bf/bf_cbc.c   Thu Mar  2 21:11:50 2000
@@ -59,8 +59,8 @@
 #include <openssl/blowfish.h>
 #include "bf_locl.h"
 
-void BF_cbc_encrypt(unsigned char *in, unsigned char *out, long length,
-            BF_KEY *ks, unsigned char *iv, int encrypt)
+void BF_cbc_encrypt(const unsigned char *in, unsigned char *out, long length,
+            const BF_KEY *schedule, unsigned char *ivec, int encrypt)
        {
        register BF_LONG tin0,tin1;
        register BF_LONG tout0,tout1,xor0,xor1;
@@ -69,9 +69,9 @@
 
        if (encrypt)
                {
-               n2l(iv,tout0);
-               n2l(iv,tout1);
-               iv-=8;
+               n2l(ivec,tout0);
+               n2l(ivec,tout1);
+               ivec-=8;
                for (l-=8; l>=0; l-=8)
                        {
                        n2l(in,tin0);
@@ -80,7 +80,7 @@
                        tin1^=tout1;
                        tin[0]=tin0;
                        tin[1]=tin1;
-                       BF_encrypt(tin,ks);
+                       BF_encrypt(tin,schedule);
                        tout0=tin[0];
                        tout1=tin[1];
                        l2n(tout0,out);
@@ -93,27 +93,27 @@
                        tin1^=tout1;
                        tin[0]=tin0;
                        tin[1]=tin1;
-                       BF_encrypt(tin,ks);
+                       BF_encrypt(tin,schedule);
                        tout0=tin[0];
                        tout1=tin[1];
                        l2n(tout0,out);
                        l2n(tout1,out);
                        }
-               l2n(tout0,iv);
-               l2n(tout1,iv);
+               l2n(tout0,ivec);
+               l2n(tout1,ivec);
                }
        else
                {
-               n2l(iv,xor0);
-               n2l(iv,xor1);
-               iv-=8;
+               n2l(ivec,xor0);
+               n2l(ivec,xor1);
+               ivec-=8;
                for (l-=8; l>=0; l-=8)
                        {
                        n2l(in,tin0);
                        n2l(in,tin1);
                        tin[0]=tin0;
                        tin[1]=tin1;
-                       BF_decrypt(tin,ks);
+                       BF_decrypt(tin,schedule);
                        tout0=tin[0]^xor0;
                        tout1=tin[1]^xor1;
                        l2n(tout0,out);
@@ -127,15 +127,15 @@
                        n2l(in,tin1);
                        tin[0]=tin0;
                        tin[1]=tin1;
-                       BF_decrypt(tin,ks);
+                       BF_decrypt(tin,schedule);
                        tout0=tin[0]^xor0;
                        tout1=tin[1]^xor1;
                        l2nn(tout0,tout1,out,l+8);
                        xor0=tin0;
                        xor1=tin1;
                        }
-               l2n(xor0,iv);
-               l2n(xor1,iv);
+               l2n(xor0,ivec);
+               l2n(xor1,ivec);
                }
        tin0=tin1=tout0=tout1=xor0=xor1=0;
        tin[0]=tin[1]=0;
Index: opensa/openssl/crypto/bf/bf_cfb64.c
diff -u opensa/openssl/crypto/bf/bf_cfb64.c:1.1 opensa/openssl/crypto/bf/bf_cfb64.c:1.2
--- opensa/openssl/crypto/bf/bf_cfb64.c:1.1     Tue Jan 25 23:35:20 2000
+++ opensa/openssl/crypto/bf/bf_cfb64.c Thu Mar  2 21:11:50 2000
@@ -64,8 +64,8 @@
  * 64bit block we have used is contained in *num;
  */
 
-void BF_cfb64_encrypt(unsigned char *in, unsigned char *out, long length,
-            BF_KEY *schedule, unsigned char *ivec, int *num, int encrypt)
+void BF_cfb64_encrypt(const unsigned char *in, unsigned char *out, long length,
+            const BF_KEY *schedule, unsigned char *ivec, int *num, int encrypt)
        {
        register BF_LONG v0,v1,t;
        register int n= *num;
Index: opensa/openssl/crypto/bf/bf_ecb.c
diff -u opensa/openssl/crypto/bf/bf_ecb.c:1.1 opensa/openssl/crypto/bf/bf_ecb.c:1.2
--- opensa/openssl/crypto/bf/bf_ecb.c:1.1       Tue Jan 25 23:35:20 2000
+++ opensa/openssl/crypto/bf/bf_ecb.c   Thu Mar  2 21:11:50 2000
@@ -61,11 +61,11 @@
 #include <openssl/opensslv.h>
 
 /* Blowfish as implemented from 'Blowfish: Springer-Verlag paper'
- * (From LECTURE NOTES IN COIMPUTER SCIENCE 809, FAST SOFTWARE ENCRYPTION,
+ * (From LECTURE NOTES IN COMPUTER SCIENCE 809, FAST SOFTWARE ENCRYPTION,
  * CAMBRIDGE SECURITY WORKSHOP, CAMBRIDGE, U.K., DECEMBER 9-11, 1993)
  */
 
-const char *BF_version="BlowFish" OPENSSL_VERSION_PTEXT;
+const char *BF_version="Blowfish" OPENSSL_VERSION_PTEXT;
 
 const char *BF_options(void)
        {
@@ -78,17 +78,17 @@
 #endif
        }
 
-void BF_ecb_encrypt(unsigned char *in, unsigned char *out, BF_KEY *ks,
-            int encrypt)
+void BF_ecb_encrypt(const unsigned char *in, unsigned char *out,
+            const BF_KEY *key, int encrypt)
        {
        BF_LONG l,d[2];
 
        n2l(in,l); d[0]=l;
        n2l(in,l); d[1]=l;
        if (encrypt)
-               BF_encrypt(d,ks);
+               BF_encrypt(d,key);
        else
-               BF_decrypt(d,ks);
+               BF_decrypt(d,key);
        l=d[0]; l2n(l,out);
        l=d[1]; l2n(l,out);
        l=d[0]=d[1]=0;
Index: opensa/openssl/crypto/bf/bf_enc.c
diff -u opensa/openssl/crypto/bf/bf_enc.c:1.1 opensa/openssl/crypto/bf/bf_enc.c:1.2
--- opensa/openssl/crypto/bf/bf_enc.c:1.1       Tue Jan 25 23:35:20 2000
+++ opensa/openssl/crypto/bf/bf_enc.c   Thu Mar  2 21:11:50 2000
@@ -60,7 +60,7 @@
 #include "bf_locl.h"
 
 /* Blowfish as implemented from 'Blowfish: Springer-Verlag paper'
- * (From LECTURE NOTES IN COIMPUTER SCIENCE 809, FAST SOFTWARE ENCRYPTION,
+ * (From LECTURE NOTES IN COMPUTER SCIENCE 809, FAST SOFTWARE ENCRYPTION,
  * CAMBRIDGE SECURITY WORKSHOP, CAMBRIDGE, U.K., DECEMBER 9-11, 1993)
  */
 
@@ -69,10 +69,11 @@
 to modify the code.
 #endif
 
-void BF_encrypt(BF_LONG *data, BF_KEY *key)
+void BF_encrypt(BF_LONG *data, const BF_KEY *key)
        {
 #ifndef BF_PTR2
-       register BF_LONG l,r,*p,*s;
+       register BF_LONG l,r;
+    const register BF_LONG *p,*s;
 
        p=key->P;
        s= &(key->S[0]);
@@ -145,10 +146,11 @@
 
 #ifndef BF_DEFAULT_OPTIONS
 
-void BF_decrypt(BF_LONG *data, BF_KEY *key)
+void BF_decrypt(BF_LONG *data, const BF_KEY *key)
        {
 #ifndef BF_PTR2
-       register BF_LONG l,r,*p,*s;
+       register BF_LONG l,r;
+    const register BF_LONG *p,*s;
 
        p=key->P;
        s= &(key->S[0]);
@@ -219,8 +221,8 @@
 #endif
        }
 
-void BF_cbc_encrypt(unsigned char *in, unsigned char *out, long length,
-            BF_KEY *ks, unsigned char *iv, int encrypt)
+void BF_cbc_encrypt(const unsigned char *in, unsigned char *out, long length,
+            const BF_KEY *schedule, unsigned char *ivec, int encrypt)
        {
        register BF_LONG tin0,tin1;
        register BF_LONG tout0,tout1,xor0,xor1;
@@ -229,9 +231,9 @@
 
        if (encrypt)
                {
-               n2l(iv,tout0);
-               n2l(iv,tout1);
-               iv-=8;
+               n2l(ivec,tout0);
+               n2l(ivec,tout1);
+               ivec-=8;
                for (l-=8; l>=0; l-=8)
                        {
                        n2l(in,tin0);
@@ -240,7 +242,7 @@
                        tin1^=tout1;
                        tin[0]=tin0;
                        tin[1]=tin1;
-                       BF_encrypt(tin,ks);
+                       BF_encrypt(tin,schedule);
                        tout0=tin[0];
                        tout1=tin[1];
                        l2n(tout0,out);
@@ -253,27 +255,27 @@
                        tin1^=tout1;
                        tin[0]=tin0;
                        tin[1]=tin1;
-                       BF_encrypt(tin,ks);
+                       BF_encrypt(tin,schedule);
                        tout0=tin[0];
                        tout1=tin[1];
                        l2n(tout0,out);
                        l2n(tout1,out);
                        }
-               l2n(tout0,iv);
-               l2n(tout1,iv);
+               l2n(tout0,ivec);
+               l2n(tout1,ivec);
                }
        else
                {
-               n2l(iv,xor0);
-               n2l(iv,xor1);
-               iv-=8;
+               n2l(ivec,xor0);
+               n2l(ivec,xor1);
+               ivec-=8;
                for (l-=8; l>=0; l-=8)
                        {
                        n2l(in,tin0);
                        n2l(in,tin1);
                        tin[0]=tin0;
                        tin[1]=tin1;
-                       BF_decrypt(tin,ks);
+                       BF_decrypt(tin,schedule);
                        tout0=tin[0]^xor0;
                        tout1=tin[1]^xor1;
                        l2n(tout0,out);
@@ -287,15 +289,15 @@
                        n2l(in,tin1);
                        tin[0]=tin0;
                        tin[1]=tin1;
-                       BF_decrypt(tin,ks);
+                       BF_decrypt(tin,schedule);
                        tout0=tin[0]^xor0;
                        tout1=tin[1]^xor1;
                        l2nn(tout0,tout1,out,l+8);
                        xor0=tin0;
                        xor1=tin1;
                        }
-               l2n(xor0,iv);
-               l2n(xor1,iv);
+               l2n(xor0,ivec);
+               l2n(xor1,ivec);
                }
        tin0=tin1=tout0=tout1=xor0=xor1=0;
        tin[0]=tin[1]=0;
Index: opensa/openssl/crypto/bf/bf_locl.h
diff -u opensa/openssl/crypto/bf/bf_locl.h:1.1 opensa/openssl/crypto/bf/bf_locl.h:1.2
--- opensa/openssl/crypto/bf/bf_locl.h:1.1      Tue Jan 25 23:35:20 2000
+++ opensa/openssl/crypto/bf/bf_locl.h  Thu Mar  2 21:11:50 2000
@@ -148,7 +148,7 @@
                          *((c)++)=(unsigned char)(((l)>> 8L)&0xff), \
                          *((c)++)=(unsigned char)(((l)     )&0xff))
 
-/* This is actually a big endian algorithm, the most significate byte
+/* This is actually a big endian algorithm, the most significant byte
  * is used to lookup array 0 */
 
 #if defined(BF_PTR2)
@@ -183,8 +183,8 @@
 
 /*
  * This is normally very good on RISC platforms where normally you
- * have to explicitely "multiplicate" array index by sizeof(BF_LONG)
- * in order to caclulate the effective address. This implementation
+ * have to explicitly "multiply" array index by sizeof(BF_LONG)
+ * in order to calculate the effective address. This implementation
  * excuses CPU from this extra work. Power[PC] uses should have most
  * fun as (R>>BF_i)&BF_M gets folded into a single instruction, namely
  * rlwinm. So let'em double-check if their compiler does it.
Index: opensa/openssl/crypto/bf/bf_ofb64.c
diff -u opensa/openssl/crypto/bf/bf_ofb64.c:1.1 opensa/openssl/crypto/bf/bf_ofb64.c:1.2
--- opensa/openssl/crypto/bf/bf_ofb64.c:1.1     Tue Jan 25 23:35:20 2000
+++ opensa/openssl/crypto/bf/bf_ofb64.c Thu Mar  2 21:11:50 2000
@@ -63,8 +63,8 @@
  * used.  The extra state information to record how much of the
  * 64bit block we have used is contained in *num;
  */
-void BF_ofb64_encrypt(unsigned char *in, unsigned char *out, long length,
-            BF_KEY *schedule, unsigned char *ivec, int *num)
+void BF_ofb64_encrypt(const unsigned char *in, unsigned char *out, long length,
+            const BF_KEY *schedule, unsigned char *ivec, int *num)
        {
        register BF_LONG v0,v1,t;
        register int n= *num;
Index: opensa/openssl/crypto/bf/bf_opts.c
diff -u opensa/openssl/crypto/bf/bf_opts.c:1.1 opensa/openssl/crypto/bf/bf_opts.c:1.2
--- opensa/openssl/crypto/bf/bf_opts.c:1.1      Tue Jan 25 23:35:20 2000
+++ opensa/openssl/crypto/bf/bf_opts.c  Thu Mar  2 21:11:50 2000
@@ -242,7 +242,7 @@
                }
 
 #ifndef TIMES
-       fprintf(stderr,"To get the most acurate results, try to run this\n");
+       fprintf(stderr,"To get the most accurate results, try to run this\n");
        fprintf(stderr,"program when this computer is idle.\n");
 #endif
 
Index: opensa/openssl/crypto/bf/bf_pi.h
diff -u opensa/openssl/crypto/bf/bf_pi.h:1.1 opensa/openssl/crypto/bf/bf_pi.h:1.2
--- opensa/openssl/crypto/bf/bf_pi.h:1.1        Tue Jan 25 23:35:20 2000
+++ opensa/openssl/crypto/bf/bf_pi.h    Thu Mar  2 21:11:50 2000
@@ -56,7 +56,7 @@
  * [including the GNU Public Licence.]
  */
 
-static BF_KEY bf_init= {
+static const BF_KEY bf_init= {
        {
        0x243f6a88L, 0x85a308d3L, 0x13198a2eL, 0x03707344L,
        0xa4093822L, 0x299f31d0L, 0x082efa98L, 0xec4e6c89L,
Index: opensa/openssl/crypto/bf/bf_skey.c
diff -u opensa/openssl/crypto/bf/bf_skey.c:1.1 opensa/openssl/crypto/bf/bf_skey.c:1.2
--- opensa/openssl/crypto/bf/bf_skey.c:1.1      Tue Jan 25 23:35:20 2000
+++ opensa/openssl/crypto/bf/bf_skey.c  Thu Mar  2 21:11:50 2000
@@ -62,11 +62,11 @@
 #include "bf_locl.h"
 #include "bf_pi.h"
 
-void BF_set_key(BF_KEY *key, int len, unsigned char *data)
+void BF_set_key(BF_KEY *key, int len, const unsigned char *data)
        {
        int i;
        BF_LONG *p,ri,in[2];
-       unsigned char *d,*end;
+       const unsigned char *d,*end;
 
 
        memcpy((char *)key,(char *)&bf_init,sizeof(BF_KEY));
Index: opensa/openssl/crypto/bf/bfspeed.c
diff -u opensa/openssl/crypto/bf/bfspeed.c:1.1 opensa/openssl/crypto/bf/bfspeed.c:1.2
--- opensa/openssl/crypto/bf/bfspeed.c:1.1      Tue Jan 25 23:35:20 2000
+++ opensa/openssl/crypto/bf/bfspeed.c  Thu Mar  2 21:11:50 2000
@@ -183,7 +183,7 @@
 #endif
 
 #ifndef TIMES
-       printf("To get the most acurate results, try to run this\n");
+       printf("To get the most accurate results, try to run this\n");
        printf("program when this computer is idle.\n");
 #endif
 
Index: opensa/openssl/crypto/bf/bftest.c
diff -u opensa/openssl/crypto/bf/bftest.c:1.1 opensa/openssl/crypto/bf/bftest.c:1.2
--- opensa/openssl/crypto/bf/bftest.c:1.1       Tue Jan 25 23:35:20 2000
+++ opensa/openssl/crypto/bf/bftest.c   Thu Mar  2 21:11:50 2000
@@ -76,18 +76,18 @@
 #include <openssl/ebcdic.h>
 #endif
 
-char *bf_key[2]={
+static char *bf_key[2]={
        "abcdefghijklmnopqrstuvwxyz",
        "Who is John Galt?"
        };
 
 /* big endian */
-BF_LONG bf_plain[2][2]={
+static BF_LONG bf_plain[2][2]={
        {0x424c4f57L,0x46495348L},
        {0xfedcba98L,0x76543210L}
        };
 
-BF_LONG bf_cipher[2][2]={
+static BF_LONG bf_cipher[2][2]={
        {0x324ed0feL,0xf413a203L},
        {0xcc91732bL,0x8022f684L}
        };
@@ -228,16 +228,16 @@
        0x63,0xC2,0xCF,0x80,0xDA};
 
 #define KEY_TEST_NUM   25
-unsigned char key_test[KEY_TEST_NUM]={
+static unsigned char key_test[KEY_TEST_NUM]={
        0xf0,0xe1,0xd2,0xc3,0xb4,0xa5,0x96,0x87,
        0x78,0x69,0x5a,0x4b,0x3c,0x2d,0x1e,0x0f,
        0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,
        0x88};
 
-unsigned char key_data[8]=
+static unsigned char key_data[8]=
        {0xFE,0xDC,0xBA,0x98,0x76,0x54,0x32,0x10};
 
-unsigned char key_out[KEY_TEST_NUM][8]={
+static unsigned char key_out[KEY_TEST_NUM][8]={
        {0xF9,0xAD,0x59,0x7C,0x49,0xDB,0x00,0x5E},
        {0xE9,0x1D,0x21,0xC1,0xD9,0x61,0xA6,0xD6},
        {0xE9,0xC2,0xB7,0x0A,0x1B,0xC6,0x5C,0xF3},
Index: opensa/openssl/crypto/bf/blowfish.h
diff -u opensa/openssl/crypto/bf/blowfish.h:1.1 opensa/openssl/crypto/bf/blowfish.h:1.2
--- opensa/openssl/crypto/bf/blowfish.h:1.1     Tue Jan 25 23:35:20 2000
+++ opensa/openssl/crypto/bf/blowfish.h Thu Mar  2 21:11:50 2000
@@ -103,17 +103,19 @@
        } BF_KEY;
 
  
-void BF_set_key(BF_KEY *key, int len, unsigned char *data);
-void BF_ecb_encrypt(unsigned char *in,unsigned char *out,BF_KEY *key,
-       int enc);
-void BF_encrypt(BF_LONG *data,BF_KEY *key);
-void BF_decrypt(BF_LONG *data,BF_KEY *key);
-void BF_cbc_encrypt(unsigned char *in, unsigned char *out, long length,
-       BF_KEY *ks, unsigned char *iv, int enc);
-void BF_cfb64_encrypt(unsigned char *in, unsigned char *out, long length,
-       BF_KEY *schedule, unsigned char *ivec, int *num, int enc);
-void BF_ofb64_encrypt(unsigned char *in, unsigned char *out, long length,
-       BF_KEY *schedule, unsigned char *ivec, int *num);
+void BF_set_key(BF_KEY *key, int len, const unsigned char *data);
+
+void BF_encrypt(BF_LONG *data,const BF_KEY *key);
+void BF_decrypt(BF_LONG *data,const BF_KEY *key);
+
+void BF_ecb_encrypt(const unsigned char *in, unsigned char *out,
+       const BF_KEY *key, int enc);
+void BF_cbc_encrypt(const unsigned char *in, unsigned char *out, long length,
+       const BF_KEY *schedule, unsigned char *ivec, int enc);
+void BF_cfb64_encrypt(const unsigned char *in, unsigned char *out, long length,
+       const BF_KEY *schedule, unsigned char *ivec, int *num, int enc);
+void BF_ofb64_encrypt(const unsigned char *in, unsigned char *out, long length,
+       const BF_KEY *schedule, unsigned char *ivec, int *num);
 const char *BF_options(void);
 
 #ifdef  __cplusplus
Index: opensa/openssl/crypto/bio/b_dump.c
diff -u opensa/openssl/crypto/bio/b_dump.c:1.1 opensa/openssl/crypto/bio/b_dump.c:1.2
--- opensa/openssl/crypto/bio/b_dump.c:1.1      Tue Jan 25 23:35:03 2000
+++ opensa/openssl/crypto/bio/b_dump.c  Thu Mar  2 21:11:51 2000
@@ -92,7 +92,7 @@
       if (((i*DUMP_WIDTH)+j)>=len) {
        strcat(buf,"   ");
       } else {
-        ch=((unsigned char)*((char *)(s)+i*DUMP_WIDTH+j)) & 0xff;
+        ch=((unsigned char)*(s+i*DUMP_WIDTH+j)) & 0xff;
        sprintf(tmp,"%02x%c",ch,j==7?'-':' ');
         strcat(buf,tmp);
       }
@@ -101,7 +101,7 @@
     for(j=0;j<DUMP_WIDTH;j++) {
       if (((i*DUMP_WIDTH)+j)>=len)
        break;
-      ch=((unsigned char)*((char *)(s)+i*DUMP_WIDTH+j)) & 0xff;
+      ch=((unsigned char)*(s+i*DUMP_WIDTH+j)) & 0xff;
 #ifndef CHARSET_EBCDIC
       sprintf(tmp,"%c",((ch>=' ')&&(ch<='~'))?ch:'.');
 #else
Index: opensa/openssl/crypto/bio/b_print.c
diff -u opensa/openssl/crypto/bio/b_print.c:1.1 opensa/openssl/crypto/bio/b_print.c:1.2
--- opensa/openssl/crypto/bio/b_print.c:1.1     Tue Jan 25 23:35:03 2000
+++ opensa/openssl/crypto/bio/b_print.c Thu Mar  2 21:11:51 2000
@@ -62,26 +62,649 @@
 
 #include <stdio.h>
 #include <stdarg.h>
+#include <string.h>
+#include <ctype.h>
 #include "cryptlib.h"
+#ifndef NO_SYS_TYPES_H
+#include <sys/types.h>
+#endif
 #include <openssl/bio.h>
 
+#ifdef BN_LLONG
+# ifndef HAVE_LONG_LONG
+#  define HAVE_LONG_LONG
+# endif
+#endif
+
+static void dopr (char *buffer, size_t maxlen, size_t *retlen,
+       const char *format, va_list args);
+
 int BIO_printf (BIO *bio, ...)
        {
        va_list args;
        char *format;
        int ret;
+       size_t retlen;
        MS_STATIC char hugebuf[1024*2]; /* 10k in one chunk is the limit */
 
        va_start(args, bio);
        format=va_arg(args, char *);
 
        hugebuf[0]='\0';
+       dopr(hugebuf, sizeof(hugebuf), &retlen, format, args);
+       ret=BIO_write(bio, hugebuf, (int)retlen);
 
-       vsprintf(hugebuf,format,args);
-
-       ret=BIO_write(bio,hugebuf,strlen(hugebuf));
-
        va_end(args);
        return(ret);
        }
 
+/*
+ * Copyright Patrick Powell 1995
+ * This code is based on code written by Patrick Powell <[EMAIL PROTECTED]>
+ * It may be used for any purpose as long as this notice remains intact
+ * on all source code distributions.
+ */
+
+/*
+ * This code contains numerious changes and enhancements which were
+ * made by lots of contributors over the last years to Patrick Powell's
+ * original code:
+ *
+ * o Patrick Powell <[EMAIL PROTECTED]>      (1995)
+ * o Brandon Long <[EMAIL PROTECTED]>          (1996, for Mutt)
+ * o Thomas Roessler <[EMAIL PROTECTED]>        (1998, for Mutt)
+ * o Michael Elkins <[EMAIL PROTECTED]>            (1998, for Mutt)
+ * o Andrew Tridgell <[EMAIL PROTECTED]>        (1998, for Samba)
+ * o Luke Mewburn <[EMAIL PROTECTED]>           (1999, for LukemFTP)
+ * o Ralf S. Engelschall <[EMAIL PROTECTED]> (1999, for Pth)
+ */
+
+#if HAVE_LONG_DOUBLE
+#define LDOUBLE long double
+#else
+#define LDOUBLE double
+#endif
+
+#if HAVE_LONG_LONG
+#define LLONG long long
+#else
+#define LLONG long
+#endif
+
+static void fmtstr     (char *, size_t *, size_t, char *, int, int, int);
+static void fmtint     (char *, size_t *, size_t, LLONG, int, int, int, int);
+static void fmtfp      (char *, size_t *, size_t, LDOUBLE, int, int, int);
+static void dopr_outch (char *, size_t *, size_t, int);
+
+/* format read states */
+#define DP_S_DEFAULT    0
+#define DP_S_FLAGS      1
+#define DP_S_MIN        2
+#define DP_S_DOT        3
+#define DP_S_MAX        4
+#define DP_S_MOD        5
+#define DP_S_CONV       6
+#define DP_S_DONE       7
+
+/* format flags - Bits */
+#define DP_F_MINUS      (1 << 0)
+#define DP_F_PLUS       (1 << 1)
+#define DP_F_SPACE      (1 << 2)
+#define DP_F_NUM        (1 << 3)
+#define DP_F_ZERO       (1 << 4)
+#define DP_F_UP         (1 << 5)
+#define DP_F_UNSIGNED   (1 << 6)
+
+/* conversion flags */
+#define DP_C_SHORT      1
+#define DP_C_LONG       2
+#define DP_C_LDOUBLE    3
+#define DP_C_LLONG      4
+
+/* some handy macros */
+#define char_to_int(p) (p - '0')
+#define MAX(p,q) ((p >= q) ? p : q)
+
+static void
+dopr(
+    char *buffer,
+    size_t maxlen,
+    size_t *retlen,
+    const char *format,
+    va_list args)
+{
+    char ch;
+    LLONG value;
+    LDOUBLE fvalue;
+    char *strvalue;
+    int min;
+    int max;
+    int state;
+    int flags;
+    int cflags;
+    size_t currlen;
+
+    state = DP_S_DEFAULT;
+    flags = currlen = cflags = min = 0;
+    max = -1;
+    ch = *format++;
+
+    while (state != DP_S_DONE) {
+        if ((ch == '\0') || (currlen >= maxlen))
+            state = DP_S_DONE;
+
+        switch (state) {
+        case DP_S_DEFAULT:
+            if (ch == '%')
+                state = DP_S_FLAGS;
+            else
+                dopr_outch(buffer, &currlen, maxlen, ch);
+            ch = *format++;
+            break;
+        case DP_S_FLAGS:
+            switch (ch) {
+            case '-':
+                flags |= DP_F_MINUS;
+                ch = *format++;
+                break;
+            case '+':
+                flags |= DP_F_PLUS;
+                ch = *format++;
+                break;
+            case ' ':
+                flags |= DP_F_SPACE;
+                ch = *format++;
+                break;
+            case '#':
+                flags |= DP_F_NUM;
+                ch = *format++;
+                break;
+            case '0':
+                flags |= DP_F_ZERO;
+                ch = *format++;
+                break;
+            default:
+                state = DP_S_MIN;
+                break;
+            }
+            break;
+        case DP_S_MIN:
+            if (isdigit((unsigned char)ch)) {
+                min = 10 * min + char_to_int(ch);
+                ch = *format++;
+            } else if (ch == '*') {
+                min = va_arg(args, int);
+                ch = *format++;
+                state = DP_S_DOT;
+            } else
+                state = DP_S_DOT;
+            break;
+        case DP_S_DOT:
+            if (ch == '.') {
+                state = DP_S_MAX;
+                ch = *format++;
+            } else
+                state = DP_S_MOD;
+            break;
+        case DP_S_MAX:
+            if (isdigit((unsigned char)ch)) {
+                if (max < 0)
+                    max = 0;
+                max = 10 * max + char_to_int(ch);
+                ch = *format++;
+            } else if (ch == '*') {
+                max = va_arg(args, int);
+                ch = *format++;
+                state = DP_S_MOD;
+            } else
+                state = DP_S_MOD;
+            break;
+        case DP_S_MOD:
+            switch (ch) {
+            case 'h':
+                cflags = DP_C_SHORT;
+                ch = *format++;
+                break;
+            case 'l':
+                if (*format == 'l') {
+                    cflags = DP_C_LLONG;
+                    format++;
+                } else
+                    cflags = DP_C_LONG;
+                ch = *format++;
+                break;
+            case 'q':
+                cflags = DP_C_LLONG;
+                ch = *format++;
+                break;
+            case 'L':
+                cflags = DP_C_LDOUBLE;
+                ch = *format++;
+                break;
+            default:
+                break;
+            }
+            state = DP_S_CONV;
+            break;
+        case DP_S_CONV:
+            switch (ch) {
+            case 'd':
+            case 'i':
+                switch (cflags) {
+                case DP_C_SHORT:
+                    value = (short int)va_arg(args, int);
+                    break;
+                case DP_C_LONG:
+                    value = va_arg(args, long int);
+                    break;
+                case DP_C_LLONG:
+                    value = va_arg(args, LLONG);
+                    break;
+                default:
+                    value = va_arg(args, int);
+                    break;
+                }
+                fmtint(buffer, &currlen, maxlen, value, 10, min, max, flags);
+                break;
+            case 'X':
+                flags |= DP_F_UP;
+                /* FALLTHROUGH */
+            case 'x':
+            case 'o':
+            case 'u':
+                flags |= DP_F_UNSIGNED;
+                switch (cflags) {
+                case DP_C_SHORT:
+                    value = (unsigned short int)va_arg(args, unsigned int);
+                    break;
+                case DP_C_LONG:
+                    value = (LLONG) va_arg(args,
+                        unsigned long int);
+                    break;
+                case DP_C_LLONG:
+                    value = va_arg(args, unsigned LLONG);
+                    break;
+                default:
+                    value = (LLONG) va_arg(args,
+                        unsigned int);
+                    break;
+                }
+                fmtint(buffer, &currlen, maxlen, value,
+                       ch == 'o' ? 8 : (ch == 'u' ? 10 : 16),
+                       min, max, flags);
+                break;
+            case 'f':
+                if (cflags == DP_C_LDOUBLE)
+                    fvalue = va_arg(args, LDOUBLE);
+                else
+                    fvalue = va_arg(args, double);
+                fmtfp(buffer, &currlen, maxlen, fvalue, min, max, flags);
+                break;
+            case 'E':
+                flags |= DP_F_UP;
+            case 'e':
+                if (cflags == DP_C_LDOUBLE)
+                    fvalue = va_arg(args, LDOUBLE);
+                else
+                    fvalue = va_arg(args, double);
+                break;
+            case 'G':
+                flags |= DP_F_UP;
+            case 'g':
+                if (cflags == DP_C_LDOUBLE)
+                    fvalue = va_arg(args, LDOUBLE);
+                else
+                    fvalue = va_arg(args, double);
+                break;
+            case 'c':
+                dopr_outch(buffer, &currlen, maxlen,
+                    va_arg(args, int));
+                break;
+            case 's':
+                strvalue = va_arg(args, char *);
+                if (max < 0)
+                    max = maxlen;
+                fmtstr(buffer, &currlen, maxlen, strvalue,
+                    flags, min, max);
+                break;
+            case 'p':
+                value = (long)va_arg(args, void *);
+                fmtint(buffer, &currlen, maxlen,
+                    value, 16, min, max, flags);
+                break;
+            case 'n': /* XXX */
+                if (cflags == DP_C_SHORT) {
+                    short int *num;
+                    num = va_arg(args, short int *);
+                    *num = currlen;
+                } else if (cflags == DP_C_LONG) { /* XXX */
+                    long int *num;
+                    num = va_arg(args, long int *);
+                    *num = (long int) currlen;
+                } else if (cflags == DP_C_LLONG) { /* XXX */
+                    LLONG *num;
+                    num = va_arg(args, LLONG *);
+                    *num = (LLONG) currlen;
+                } else {
+                    int    *num;
+                    num = va_arg(args, int *);
+                    *num = currlen;
+                }
+                break;
+            case '%':
+                dopr_outch(buffer, &currlen, maxlen, ch);
+                break;
+            case 'w':
+                /* not supported yet, treat as next char */
+                ch = *format++;
+                break;
+            default:
+                /* unknown, skip */
+                break;
+            }
+            ch = *format++;
+            state = DP_S_DEFAULT;
+            flags = cflags = min = 0;
+            max = -1;
+            break;
+        case DP_S_DONE:
+            break;
+        default:
+            break;
+        }
+    }
+    if (currlen >= maxlen - 1)
+        currlen = maxlen - 1;
+    buffer[currlen] = '\0';
+    *retlen = currlen;
+    return;
+}
+
+static void
+fmtstr(
+    char *buffer,
+    size_t *currlen,
+    size_t maxlen,
+    char *value,
+    int flags,
+    int min,
+    int max)
+{
+    int padlen, strln;
+    int cnt = 0;
+
+    if (value == 0)
+        value = "<NULL>";
+    for (strln = 0; value[strln]; ++strln)
+        ;
+    padlen = min - strln;
+    if (padlen < 0)
+        padlen = 0;
+    if (flags & DP_F_MINUS)
+        padlen = -padlen;
+
+    while ((padlen > 0) && (cnt < max)) {
+        dopr_outch(buffer, currlen, maxlen, ' ');
+        --padlen;
+        ++cnt;
+    }
+    while (*value && (cnt < max)) {
+        dopr_outch(buffer, currlen, maxlen, *value++);
+        ++cnt;
+    }
+    while ((padlen < 0) && (cnt < max)) {
+        dopr_outch(buffer, currlen, maxlen, ' ');
+        ++padlen;
+        ++cnt;
+    }
+}
+
+static void
+fmtint(
+    char *buffer,
+    size_t *currlen,
+    size_t maxlen,
+    LLONG value,
+    int base,
+    int min,
+    int max,
+    int flags)
+{
+    int signvalue = 0;
+    unsigned LLONG uvalue;
+    char convert[20];
+    int place = 0;
+    int spadlen = 0;
+    int zpadlen = 0;
+    int caps = 0;
+
+    if (max < 0)
+        max = 0;
+    uvalue = value;
+    if (!(flags & DP_F_UNSIGNED)) {
+        if (value < 0) {
+            signvalue = '-';
+            uvalue = -value;
+        } else if (flags & DP_F_PLUS)
+            signvalue = '+';
+        else if (flags & DP_F_SPACE)
+            signvalue = ' ';
+    }
+    if (flags & DP_F_UP)
+        caps = 1;
+    do {
+        convert[place++] =
+            (caps ? "0123456789ABCDEF" : "0123456789abcdef")
+            [uvalue % (unsigned) base];
+        uvalue = (uvalue / (unsigned) base);
+    } while (uvalue && (place < 20));
+    if (place == 20)
+        place--;
+    convert[place] = 0;
+
+    zpadlen = max - place;
+    spadlen = min - MAX(max, place) - (signvalue ? 1 : 0);
+    if (zpadlen < 0)
+        zpadlen = 0;
+    if (spadlen < 0)
+        spadlen = 0;
+    if (flags & DP_F_ZERO) {
+        zpadlen = MAX(zpadlen, spadlen);
+        spadlen = 0;
+    }
+    if (flags & DP_F_MINUS)
+        spadlen = -spadlen;
+
+    /* spaces */
+    while (spadlen > 0) {
+        dopr_outch(buffer, currlen, maxlen, ' ');
+        --spadlen;
+    }
+
+    /* sign */
+    if (signvalue)
+        dopr_outch(buffer, currlen, maxlen, signvalue);
+
+    /* zeros */
+    if (zpadlen > 0) {
+        while (zpadlen > 0) {
+            dopr_outch(buffer, currlen, maxlen, '0');
+            --zpadlen;
+        }
+    }
+    /* digits */
+    while (place > 0)
+        dopr_outch(buffer, currlen, maxlen, convert[--place]);
+
+    /* left justified spaces */
+    while (spadlen < 0) {
+        dopr_outch(buffer, currlen, maxlen, ' ');
+        ++spadlen;
+    }
+    return;
+}
+
+static LDOUBLE
+abs_val(LDOUBLE value)
+{
+    LDOUBLE result = value;
+    if (value < 0)
+        result = -value;
+    return result;
+}
+
+static LDOUBLE
+pow10(int exp)
+{
+    LDOUBLE result = 1;
+    while (exp) {
+        result *= 10;
+        exp--;
+    }
+    return result;
+}
+
+static long
+round(LDOUBLE value)
+{
+    long intpart;
+    intpart = (long) value;
+    value = value - intpart;
+    if (value >= 0.5)
+        intpart++;
+    return intpart;
+}
+
+static void
+fmtfp(
+    char *buffer,
+    size_t *currlen,
+    size_t maxlen,
+    LDOUBLE fvalue,
+    int min,
+    int max,
+    int flags)
+{
+    int signvalue = 0;
+    LDOUBLE ufvalue;
+    char iconvert[20];
+    char fconvert[20];
+    int iplace = 0;
+    int fplace = 0;
+    int padlen = 0;
+    int zpadlen = 0;
+    int caps = 0;
+    long intpart;
+    long fracpart;
+
+    if (max < 0)
+        max = 6;
+    ufvalue = abs_val(fvalue);
+    if (fvalue < 0)
+        signvalue = '-';
+    else if (flags & DP_F_PLUS)
+        signvalue = '+';
+    else if (flags & DP_F_SPACE)
+        signvalue = ' ';
+
+    intpart = (long)ufvalue;
+
+    /* sorry, we only support 9 digits past the decimal because of our
+       conversion method */
+    if (max > 9)
+        max = 9;
+
+    /* we "cheat" by converting the fractional part to integer by
+       multiplying by a factor of 10 */
+    fracpart = round((pow10(max)) * (ufvalue - intpart));
+
+    if (fracpart >= pow10(max)) {
+        intpart++;
+        fracpart -= (long)pow10(max);
+    }
+
+    /* convert integer part */
+    do {
+        iconvert[iplace++] =
+            (caps ? "0123456789ABCDEF"
+              : "0123456789abcdef")[intpart % 10];
+        intpart = (intpart / 10);
+    } while (intpart && (iplace < 20));
+    if (iplace == 20)
+        iplace--;
+    iconvert[iplace] = 0;
+
+    /* convert fractional part */
+    do {
+        fconvert[fplace++] =
+            (caps ? "0123456789ABCDEF"
+              : "0123456789abcdef")[fracpart % 10];
+        fracpart = (fracpart / 10);
+    } while (fracpart && (fplace < 20));
+    if (fplace == 20)
+        fplace--;
+    fconvert[fplace] = 0;
+
+    /* -1 for decimal point, another -1 if we are printing a sign */
+    padlen = min - iplace - max - 1 - ((signvalue) ? 1 : 0);
+    zpadlen = max - fplace;
+    if (zpadlen < 0)
+        zpadlen = 0;
+    if (padlen < 0)
+        padlen = 0;
+    if (flags & DP_F_MINUS)
+        padlen = -padlen;
+
+    if ((flags & DP_F_ZERO) && (padlen > 0)) {
+        if (signvalue) {
+            dopr_outch(buffer, currlen, maxlen, signvalue);
+            --padlen;
+            signvalue = 0;
+        }
+        while (padlen > 0) {
+            dopr_outch(buffer, currlen, maxlen, '0');
+            --padlen;
+        }
+    }
+    while (padlen > 0) {
+        dopr_outch(buffer, currlen, maxlen, ' ');
+        --padlen;
+    }
+    if (signvalue)
+        dopr_outch(buffer, currlen, maxlen, signvalue);
+
+    while (iplace > 0)
+        dopr_outch(buffer, currlen, maxlen, iconvert[--iplace]);
+
+    /*
+     * Decimal point. This should probably use locale to find the correct
+     * char to print out.
+     */
+    if (max > 0) {
+        dopr_outch(buffer, currlen, maxlen, '.');
+
+        while (fplace > 0)
+            dopr_outch(buffer, currlen, maxlen, fconvert[--fplace]);
+    }
+    while (zpadlen > 0) {
+        dopr_outch(buffer, currlen, maxlen, '0');
+        --zpadlen;
+    }
+
+    while (padlen < 0) {
+        dopr_outch(buffer, currlen, maxlen, ' ');
+        ++padlen;
+    }
+}
+
+static void
+dopr_outch(
+    char *buffer,
+    size_t *currlen,
+    size_t maxlen,
+    int c)
+{
+    if (*currlen < maxlen)
+        buffer[(*currlen)++] = (char)c;
+    return;
+}
Index: opensa/openssl/crypto/bio/b_sock.c
diff -u opensa/openssl/crypto/bio/b_sock.c:1.1 opensa/openssl/crypto/bio/b_sock.c:1.2
--- opensa/openssl/crypto/bio/b_sock.c:1.1      Tue Jan 25 23:35:03 2000
+++ opensa/openssl/crypto/bio/b_sock.c  Thu Mar  2 21:11:51 2000
@@ -163,7 +163,14 @@
        else
                {
                CRYPTO_w_lock(CRYPTO_LOCK_GETSERVBYNAME);
-               s=getservbyname(str,"tcp");
+               /* Note: under VMS with SOCKETSHR, it seems like the first
+                * parameter is 'char *', instead of 'const char *'
+                */
+               s=getservbyname(
+#ifndef CONST_STRICT
+                   (char *)
+#endif
+                   str,"tcp");
                if(s != NULL)
                        *port_ptr=ntohs((unsigned short)s->s_port);
                CRYPTO_w_unlock(CRYPTO_LOCK_GETSERVBYNAME);
@@ -282,12 +289,12 @@
 
        j=strlen(a->h_name)+1;
        if ((ret->h_name=Malloc(j)) == NULL) goto err;
-       memcpy((char *)ret->h_name,a->h_name,j+1);
+       memcpy((char *)ret->h_name,a->h_name,j);
        for (i=0; a->h_aliases[i] != NULL; i++)
                {
                j=strlen(a->h_aliases[i])+1;
                if ((ret->h_aliases[i]=Malloc(j)) == NULL) goto err;
-               memcpy(ret->h_aliases[i],a->h_aliases[i],j+1);
+               memcpy(ret->h_aliases[i],a->h_aliases[i],j);
                }
        ret->h_length=a->h_length;
        ret->h_addrtype=a->h_addrtype;
@@ -327,7 +334,7 @@
                        Free(a->h_addr_list[i]);
                Free(a->h_addr_list);
                }
-       if (a->h_name != NULL) Free((char *)a->h_name);
+       if (a->h_name != NULL) Free(a->h_name);
        Free(a);
        }
 
@@ -368,7 +375,14 @@
        if (i == GHBN_NUM) /* no hit*/
                {
                BIO_ghbn_miss++;
-               ret=gethostbyname(name);
+               /* Note: under VMS with SOCKETSHR, it seems like the first
+                * parameter is 'char *', instead of 'const char *'
+                */
+               ret=gethostbyname(
+#ifndef CONST_STRICT
+                   (char *)
+#endif
+                   name);
 
                if (ret == NULL)
                        goto end;
Index: opensa/openssl/crypto/bio/bf_buff.c
diff -u opensa/openssl/crypto/bio/bf_buff.c:1.1 opensa/openssl/crypto/bio/bf_buff.c:1.2
--- opensa/openssl/crypto/bio/bf_buff.c:1.1     Tue Jan 25 23:35:03 2000
+++ opensa/openssl/crypto/bio/bf_buff.c Thu Mar  2 21:11:51 2000
@@ -69,6 +69,7 @@
 static long buffer_ctrl(BIO *h,int cmd,long arg1,char *arg2);
 static int buffer_new(BIO *h);
 static int buffer_free(BIO *data);
+static long buffer_callback_ctrl(BIO *h,int cmd, void (*fp)());
 #define DEFAULT_BUFFER_SIZE    1024
 
 static BIO_METHOD methods_buffer=
@@ -82,6 +83,7 @@
        buffer_ctrl,
        buffer_new,
        buffer_free,
+       buffer_callback_ctrl,
        };
 
 BIO_METHOD *BIO_f_buffer(void)
@@ -284,6 +286,7 @@
                ctx->ibuf_len=0;
                ctx->obuf_off=0;
                ctx->obuf_len=0;
+               if (b->next_bio == NULL) return(0);
                ret=BIO_ctrl(b->next_bio,cmd,num,ptr);
                break;
        case BIO_CTRL_INFO:
@@ -300,12 +303,18 @@
        case BIO_CTRL_WPENDING:
                ret=(long)ctx->obuf_len;
                if (ret == 0)
+                       {
+                       if (b->next_bio == NULL) return(0);
                        ret=BIO_ctrl(b->next_bio,cmd,num,ptr);
+                       }
                break;
        case BIO_CTRL_PENDING:
                ret=(long)ctx->ibuf_len;
                if (ret == 0)
+                       {
+                       if (b->next_bio == NULL) return(0);
                        ret=BIO_ctrl(b->next_bio,cmd,num,ptr);
+                       }
                break;
        case BIO_C_SET_BUFF_READ_DATA:
                if (num > ctx->ibuf_size)
@@ -374,12 +383,14 @@
                        }
                break;
        case BIO_C_DO_STATE_MACHINE:
+               if (b->next_bio == NULL) return(0);
                BIO_clear_retry_flags(b);
                ret=BIO_ctrl(b->next_bio,cmd,num,ptr);
                BIO_copy_next_retry(b);
                break;
 
        case BIO_CTRL_FLUSH:
+               if (b->next_bio == NULL) return(0);
                if (ctx->obuf_len <= 0)
                        {
                        ret=BIO_ctrl(b->next_bio,cmd,num,ptr);
@@ -418,6 +429,7 @@
                        ret=0;
                break;
        default:
+               if (b->next_bio == NULL) return(0);
                ret=BIO_ctrl(b->next_bio,cmd,num,ptr);
                break;
                }
@@ -425,6 +437,20 @@
 malloc_error:
        BIOerr(BIO_F_BUFFER_CTRL,ERR_R_MALLOC_FAILURE);
        return(0);
+       }
+
+static long buffer_callback_ctrl(BIO *b, int cmd, void (*fp)())
+       {
+       long ret=1;
+
+       if (b->next_bio == NULL) return(0);
+       switch (cmd)
+               {
+       default:
+               ret=BIO_callback_ctrl(b->next_bio,cmd,fp);
+               break;
+               }
+       return(ret);
        }
 
 static int buffer_gets(BIO *b, char *buf, int size)
Index: opensa/openssl/crypto/bio/bf_nbio.c
diff -u opensa/openssl/crypto/bio/bf_nbio.c:1.1 opensa/openssl/crypto/bio/bf_nbio.c:1.2
--- opensa/openssl/crypto/bio/bf_nbio.c:1.1     Tue Jan 25 23:35:03 2000
+++ opensa/openssl/crypto/bio/bf_nbio.c Thu Mar  2 21:11:51 2000
@@ -73,6 +73,7 @@
 static long nbiof_ctrl(BIO *h,int cmd,long arg1,char *arg2);
 static int nbiof_new(BIO *h);
 static int nbiof_free(BIO *data);
+static long nbiof_callback_ctrl(BIO *h,int cmd,void (*fp)());
 typedef struct nbio_test_st
        {
        /* only set if we sent a 'should retry' error */
@@ -91,6 +92,7 @@
        nbiof_ctrl,
        nbiof_new,
        nbiof_free,
+       nbiof_callback_ctrl,
        };
 
 BIO_METHOD *BIO_f_nbio_test(void)
@@ -137,7 +139,7 @@
 
        BIO_clear_retry_flags(b);
 #if 0
-       RAND_bytes(&n,1);
+       RAND_pseudo_bytes(&n,1);
        num=(n&0x07);
 
        if (outl > num) outl=num;
@@ -178,7 +180,7 @@
                }
        else
                {
-               RAND_bytes(&n,1);
+               RAND_pseudo_bytes(&n,1);
                num=(n&7);
                }
 
@@ -219,6 +221,20 @@
                break;
        default:
                ret=BIO_ctrl(b->next_bio,cmd,num,ptr);
+               break;
+               }
+       return(ret);
+       }
+
+static long nbiof_callback_ctrl(BIO *b, int cmd, void (*fp)())
+       {
+       long ret=1;
+
+       if (b->next_bio == NULL) return(0);
+       switch (cmd)
+               {
+       default:
+               ret=BIO_callback_ctrl(b->next_bio,cmd,fp);
                break;
                }
        return(ret);
Index: opensa/openssl/crypto/bio/bf_null.c
diff -u opensa/openssl/crypto/bio/bf_null.c:1.1 opensa/openssl/crypto/bio/bf_null.c:1.2
--- opensa/openssl/crypto/bio/bf_null.c:1.1     Tue Jan 25 23:35:03 2000
+++ opensa/openssl/crypto/bio/bf_null.c Thu Mar  2 21:11:51 2000
@@ -72,6 +72,7 @@
 static long nullf_ctrl(BIO *h,int cmd,long arg1,char *arg2);
 static int nullf_new(BIO *h);
 static int nullf_free(BIO *data);
+static long nullf_callback_ctrl(BIO *h,int cmd,void (*fp)());
 static BIO_METHOD methods_nullf=
        {
        BIO_TYPE_NULL_FILTER,
@@ -83,6 +84,7 @@
        nullf_ctrl,
        nullf_new,
        nullf_free,
+       nullf_callback_ctrl,
        };
 
 BIO_METHOD *BIO_f_null(void)
@@ -148,6 +150,20 @@
                break;
        default:
                ret=BIO_ctrl(b->next_bio,cmd,num,ptr);
+               }
+       return(ret);
+       }
+
+static long nullf_callback_ctrl(BIO *b, int cmd, void (*fp)())
+       {
+       long ret=1;
+
+       if (b->next_bio == NULL) return(0);
+       switch (cmd)
+               {
+       default:
+               ret=BIO_callback_ctrl(b->next_bio,cmd,fp);
+               break;
                }
        return(ret);
        }
Index: opensa/openssl/crypto/bio/bio.h
diff -u opensa/openssl/crypto/bio/bio.h:1.1 opensa/openssl/crypto/bio/bio.h:1.2
--- opensa/openssl/crypto/bio/bio.h:1.1 Tue Jan 25 23:35:03 2000
+++ opensa/openssl/crypto/bio/bio.h     Thu Mar  2 21:11:51 2000
@@ -76,7 +76,7 @@
 #define BIO_TYPE_SOCKET                (5|0x0400|0x0100)
 #define BIO_TYPE_NULL          (6|0x0400)
 #define BIO_TYPE_SSL           (7|0x0200)
-#define BIO_TYPE_MD            (8|0x0200)              /* pasive filter */
+#define BIO_TYPE_MD            (8|0x0200)              /* passive filter */
 #define BIO_TYPE_BUFFER                (9|0x0200)              /* filter */
 #define BIO_TYPE_CIPHER                (10|0x0200)             /* filter */
 #define BIO_TYPE_BASE64                (11|0x0200)             /* filter */
@@ -147,6 +147,11 @@
 
 #define BIO_FLAGS_BASE64_NO_NL 0x100
 
+/* This is used with memory BIOs: it means we shouldn't free up or change the
+ * data in any way.
+ */
+#define BIO_FLAGS_MEM_RDONLY   0x200
+
 #define BIO_set_flags(b,f) ((b)->flags|=(f))
 #define BIO_get_flags(b) ((b)->flags)
 #define BIO_set_retry_special(b) \
@@ -163,7 +168,7 @@
 #define BIO_get_retry_flags(b) \
                ((b)->flags&(BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY))
 
-/* These shouldbe used by the application to tell why we should retry */
+/* These should be used by the application to tell why we should retry */
 #define BIO_should_read(a)             ((a)->flags & BIO_FLAGS_READ)
 #define BIO_should_write(a)            ((a)->flags & BIO_FLAGS_WRITE)
 #define BIO_should_io_special(a)       ((a)->flags & BIO_FLAGS_IO_SPECIAL)
@@ -214,6 +219,7 @@
        long (*ctrl)();
        int (*create)();
        int (*destroy)();
+       long (*callback_ctrl)();
        } BIO_METHOD;
 #else
 typedef struct bio_method_st
@@ -227,6 +233,7 @@
        long (_far *ctrl)();
        int (_far *create)();
        int (_far *destroy)();
+       long (_fat *callback_ctrl)();
        } BIO_METHOD;
 #endif
 
@@ -278,9 +285,6 @@
 #define BIO_CONN_S_NBIO                        8
 /*#define BIO_CONN_get_param_hostname  BIO_ctrl */
 
-#define BIO_number_read(b)     ((b)->num_read)
-#define BIO_number_written(b)  ((b)->num_write)
-
 #define BIO_C_SET_CONNECT                      100
 #define BIO_C_DO_STATE_MACHINE                 101
 #define BIO_C_SET_NBIO                         102
@@ -325,9 +329,14 @@
 #define BIO_C_GET_WRITE_GUARANTEE              140
 #define BIO_C_GET_READ_REQUEST                 141
 #define BIO_C_SHUTDOWN_WR                      142
+#define BIO_C_NREAD0                           143
+#define BIO_C_NREAD                            144
+#define BIO_C_NWRITE0                          145
+#define BIO_C_NWRITE                           146
+#define BIO_C_RESET_READ_REQUEST               147
 
 
-#define BIO_set_app_data(s,arg)                BIO_set_ex_data(s,0,(char *)arg)
+#define BIO_set_app_data(s,arg)                BIO_set_ex_data(s,0,arg)
 #define BIO_get_app_data(s)            BIO_get_ex_data(s,0)
 
 /* BIO_s_connect() and BIO_s_socks4a_connect() */
@@ -366,7 +375,7 @@
 /* BIO_set_nbio(b,n) */
 #define BIO_set_filter_bio(b,s) BIO_ctrl(b,BIO_C_SET_PROXY_PARAM,2,(char *)(s))
 /* BIO *BIO_get_filter_bio(BIO *bio); */
-#define BIO_set_proxy_cb(b,cb) BIO_ctrl(b,BIO_C_SET_PROXY_PARAM,3,(char *)(cb))
+#define BIO_set_proxy_cb(b,cb) BIO_callback_ctrl(b,BIO_C_SET_PROXY_PARAM,3,(void 
+*(*cb)()))
 #define BIO_set_proxy_header(b,sk) BIO_ctrl(b,BIO_C_SET_PROXY_PARAM,4,(char *)sk)
 #define BIO_set_no_connect_return(b,bool) BIO_int_ctrl(b,BIO_C_SET_PROXY_PARAM,5,bool)
 
@@ -445,8 +454,8 @@
 size_t BIO_ctrl_pending(BIO *b);
 size_t BIO_ctrl_wpending(BIO *b);
 #define BIO_flush(b)           (int)BIO_ctrl(b,BIO_CTRL_FLUSH,0,NULL)
-#define BIO_get_info_callback(b,cbp) (int)BIO_ctrl(b,BIO_CTRL_GET_CALLBACK,0,(char 
*)cbp)
-#define BIO_set_info_callback(b,cb) (int)BIO_ctrl(b,BIO_CTRL_SET_CALLBACK,0,(char 
*)cb)
+#define BIO_get_info_callback(b,cbp) (int)BIO_ctrl(b,BIO_CTRL_GET_CALLBACK,0,(void 
+(**)())(cbp))
+#define BIO_set_info_callback(b,cb) 
+(int)BIO_callback_ctrl(b,BIO_CTRL_SET_CALLBACK,(void (*)())(cb))
 
 /* For the BIO_f_buffer() type */
 #define BIO_buffer_get_num_lines(b) BIO_ctrl(b,BIO_CTRL_GET,0,NULL)
@@ -461,9 +470,8 @@
 #define BIO_get_read_request(b)    (int)BIO_ctrl(b,BIO_C_GET_READ_REQUEST,0,NULL)
 size_t BIO_ctrl_get_write_guarantee(BIO *b);
 size_t BIO_ctrl_get_read_request(BIO *b);
+int BIO_ctrl_reset_read_request(BIO *b);
 
-
-
 #ifdef NO_STDIO
 #define NO_FP_API
 #endif
@@ -472,10 +480,12 @@
 /* These two aren't currently implemented */
 /* int BIO_get_ex_num(BIO *bio); */
 /* void BIO_set_ex_free_func(BIO *bio,int idx,void (*cb)()); */
-int BIO_set_ex_data(BIO *bio,int idx,char *data);
-char *BIO_get_ex_data(BIO *bio,int idx);
-int BIO_get_ex_new_index(long argl, char *argp, int (*new_func)(),
-       int (*dup_func)(), void (*free_func)());
+int BIO_set_ex_data(BIO *bio,int idx,void *data);
+void *BIO_get_ex_data(BIO *bio,int idx);
+int BIO_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
+       CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func);
+unsigned long BIO_number_read(BIO *bio);
+unsigned long BIO_number_written(BIO *bio);
 
 #  if defined(WIN16) && defined(_WINDLL)
 BIO_METHOD *BIO_s_file_internal(void);
@@ -500,6 +510,7 @@
 int    BIO_write(BIO *b, const char *data, int len);
 int    BIO_puts(BIO *bp,const char *buf);
 long   BIO_ctrl(BIO *bp,int cmd,long larg,void *parg);
+long   BIO_callback_ctrl(BIO *bp,int cmd,void (*fp)());
 char * BIO_ptr_ctrl(BIO *bp,int cmd,long larg);
 long   BIO_int_ctrl(BIO *bp,int cmd,long larg,int iarg);
 BIO *  BIO_push(BIO *b,BIO *append);
@@ -510,6 +521,11 @@
 int    BIO_get_retry_reason(BIO *bio);
 BIO *  BIO_dup_chain(BIO *in);
 
+int BIO_nread0(BIO *bio, char **buf);
+int BIO_nread(BIO *bio, char **buf, int num);
+int BIO_nwrite0(BIO *bio, char **buf);
+int BIO_nwrite(BIO *bio, char **buf, int num);
+
 #ifndef WIN16
 long BIO_debug_callback(BIO *bio,int cmd,const char *argp,int argi,
        long argl,long ret);
@@ -519,6 +535,7 @@
 #endif
 
 BIO_METHOD *BIO_s_mem(void);
+BIO *BIO_new_mem_buf(void *buf, int len);
 BIO_METHOD *BIO_s_socket(void);
 BIO_METHOD *BIO_s_connect(void);
 BIO_METHOD *BIO_s_accept(void);
@@ -597,11 +614,17 @@
 #define BIO_F_BIO_MAKE_PAIR                             121
 #define BIO_F_BIO_NEW                                   108
 #define BIO_F_BIO_NEW_FILE                              109
+#define BIO_F_BIO_NEW_MEM_BUF                           126
+#define BIO_F_BIO_NREAD                                         123
+#define BIO_F_BIO_NREAD0                                124
+#define BIO_F_BIO_NWRITE                                125
+#define BIO_F_BIO_NWRITE0                               122
 #define BIO_F_BIO_PUTS                                  110
 #define BIO_F_BIO_READ                                  111
 #define BIO_F_BIO_SOCK_INIT                             112
 #define BIO_F_BIO_WRITE                                         113
 #define BIO_F_BUFFER_CTRL                               114
+#define BIO_F_CONN_CTRL                                         127
 #define BIO_F_CONN_STATE                                115
 #define BIO_F_FILE_CTRL                                         116
 #define BIO_F_MEM_WRITE                                         117
@@ -634,6 +657,7 @@
 #define BIO_R_UNABLE_TO_LISTEN_SOCKET                   119
 #define BIO_R_UNINITIALIZED                             120
 #define BIO_R_UNSUPPORTED_METHOD                        121
+#define BIO_R_WRITE_TO_READ_ONLY_BIO                    126
 #define BIO_R_WSASTARTUP                                122
 
 #ifdef  __cplusplus
Index: opensa/openssl/crypto/bio/bio_err.c
diff -u opensa/openssl/crypto/bio/bio_err.c:1.1 opensa/openssl/crypto/bio/bio_err.c:1.2
--- opensa/openssl/crypto/bio/bio_err.c:1.1     Tue Jan 25 23:35:03 2000
+++ opensa/openssl/crypto/bio/bio_err.c Thu Mar  2 21:11:51 2000
@@ -77,11 +77,17 @@
 {ERR_PACK(0,BIO_F_BIO_MAKE_PAIR,0),    "BIO_MAKE_PAIR"},
 {ERR_PACK(0,BIO_F_BIO_NEW,0),  "BIO_new"},
 {ERR_PACK(0,BIO_F_BIO_NEW_FILE,0),     "BIO_new_file"},
+{ERR_PACK(0,BIO_F_BIO_NEW_MEM_BUF,0),  "BIO_new_mem_buf"},
+{ERR_PACK(0,BIO_F_BIO_NREAD,0),        "BIO_nread"},
+{ERR_PACK(0,BIO_F_BIO_NREAD0,0),       "BIO_nread0"},
+{ERR_PACK(0,BIO_F_BIO_NWRITE,0),       "BIO_nwrite"},
+{ERR_PACK(0,BIO_F_BIO_NWRITE0,0),      "BIO_nwrite0"},
 {ERR_PACK(0,BIO_F_BIO_PUTS,0), "BIO_puts"},
 {ERR_PACK(0,BIO_F_BIO_READ,0), "BIO_read"},
 {ERR_PACK(0,BIO_F_BIO_SOCK_INIT,0),    "BIO_sock_init"},
 {ERR_PACK(0,BIO_F_BIO_WRITE,0),        "BIO_write"},
 {ERR_PACK(0,BIO_F_BUFFER_CTRL,0),      "BUFFER_CTRL"},
+{ERR_PACK(0,BIO_F_CONN_CTRL,0),        "CONN_CTRL"},
 {ERR_PACK(0,BIO_F_CONN_STATE,0),       "CONN_STATE"},
 {ERR_PACK(0,BIO_F_FILE_CTRL,0),        "FILE_CTRL"},
 {ERR_PACK(0,BIO_F_MEM_WRITE,0),        "MEM_WRITE"},
@@ -117,6 +123,7 @@
 {BIO_R_UNABLE_TO_LISTEN_SOCKET           ,"unable to listen socket"},
 {BIO_R_UNINITIALIZED                     ,"uninitialized"},
 {BIO_R_UNSUPPORTED_METHOD                ,"unsupported method"},
+{BIO_R_WRITE_TO_READ_ONLY_BIO            ,"write to read only bio"},
 {BIO_R_WSASTARTUP                        ,"wsastartup"},
 {0,NULL}
        };
Index: opensa/openssl/crypto/bio/bio_lib.c
diff -u opensa/openssl/crypto/bio/bio_lib.c:1.1 opensa/openssl/crypto/bio/bio_lib.c:1.2
--- opensa/openssl/crypto/bio/bio_lib.c:1.1     Tue Jan 25 23:35:03 2000
+++ opensa/openssl/crypto/bio/bio_lib.c Thu Mar  2 21:11:51 2000
@@ -63,7 +63,7 @@
 #include <openssl/bio.h>
 #include <openssl/stack.h>
 
-static STACK *bio_meth=NULL;
+static STACK_OF(CRYPTO_EX_DATA_FUNCS) *bio_meth=NULL;
 static int bio_meth_num=0;
 
 BIO *BIO_new(BIO_METHOD *method)
@@ -100,7 +100,7 @@
        bio->references=1;
        bio->num_read=0L;
        bio->num_write=0L;
-       CRYPTO_new_ex_data(bio_meth,(char *)bio,&bio->ex_data);
+       CRYPTO_new_ex_data(bio_meth,bio,&bio->ex_data);
        if (method->create != NULL)
                if (!method->create(bio))
                        return(0);
@@ -129,7 +129,7 @@
                ((i=(int)a->callback(a,BIO_CB_FREE,NULL,0,0L,1L)) <= 0))
                        return(i);
 
-       CRYPTO_free_ex_data(bio_meth,(char *)a,&a->ex_data);
+       CRYPTO_free_ex_data(bio_meth,a,&a->ex_data);
 
        if ((a->method == NULL) || (a->method->destroy == NULL)) return(1);
        ret=a->method->destroy(a);
@@ -317,16 +317,43 @@
        return(ret);
        }
 
+long BIO_callback_ctrl(BIO *b, int cmd, void (*fp)())
+       {
+       long ret;
+       long (*cb)();
+
+       if (b == NULL) return(0);
+
+       if ((b->method == NULL) || (b->method->callback_ctrl == NULL))
+               {
+               BIOerr(BIO_F_BIO_CTRL,BIO_R_UNSUPPORTED_METHOD);
+               return(-2);
+               }
+
+       cb=b->callback;
+
+       if ((cb != NULL) &&
+               ((ret=cb(b,BIO_CB_CTRL,(void *)&fp,cmd,0,1L)) <= 0))
+               return(ret);
+
+       ret=b->method->callback_ctrl(b,cmd,fp);
+
+       if (cb != NULL)
+               ret=cb(b,BIO_CB_CTRL|BIO_CB_RETURN,(void *)&fp,cmd,
+                       0,ret);
+       return(ret);
+       }
+
 /* It is unfortunate to duplicate in functions what the BIO_(w)pending macros
  * do; but those macros have inappropriate return type, and for interfacing
  * from other programming languages, C macros aren't much of a help anyway. */
 size_t BIO_ctrl_pending(BIO *bio)
-    {
+       {
        return BIO_ctrl(bio, BIO_CTRL_PENDING, 0, NULL);
        }
 
 size_t BIO_ctrl_wpending(BIO *bio)
-    {
+       {
        return BIO_ctrl(bio, BIO_CTRL_WPENDING, 0, NULL);
        }
 
@@ -476,21 +503,32 @@
        b->retry_reason=b->next_bio->retry_reason;
        }
 
-int BIO_get_ex_new_index(long argl, char *argp, int (*new_func)(),
-            int (*dup_func)(), void (*free_func)())
+int BIO_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
+            CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func)
        {
        bio_meth_num++;
        return(CRYPTO_get_ex_new_index(bio_meth_num-1,&bio_meth,
                argl,argp,new_func,dup_func,free_func));
        }
 
-int BIO_set_ex_data(BIO *bio, int idx, char *data)
+int BIO_set_ex_data(BIO *bio, int idx, void *data)
        {
        return(CRYPTO_set_ex_data(&(bio->ex_data),idx,data));
        }
 
-char *BIO_get_ex_data(BIO *bio, int idx)
+void *BIO_get_ex_data(BIO *bio, int idx)
        {
        return(CRYPTO_get_ex_data(&(bio->ex_data),idx));
        }
 
+unsigned long BIO_number_read(BIO *bio)
+{
+       if(bio) return bio->num_read;
+       return 0;
+}
+
+unsigned long BIO_number_written(BIO *bio)
+{
+       if(bio) return bio->num_write;
+       return 0;
+}
Index: opensa/openssl/crypto/bio/bss_acpt.c
diff -u opensa/openssl/crypto/bio/bss_acpt.c:1.1 
opensa/openssl/crypto/bio/bss_acpt.c:1.2
--- opensa/openssl/crypto/bio/bss_acpt.c:1.1    Tue Jan 25 23:35:03 2000
+++ opensa/openssl/crypto/bio/bss_acpt.c        Thu Mar  2 21:11:51 2000
@@ -118,6 +118,7 @@
        acpt_ctrl,
        acpt_new,
        acpt_free,
+       NULL,
        };
 
 BIO_METHOD *BIO_s_accept(void)
Index: opensa/openssl/crypto/bio/bss_bio.c
diff -u opensa/openssl/crypto/bio/bss_bio.c:1.1 opensa/openssl/crypto/bio/bss_bio.c:1.2
--- opensa/openssl/crypto/bio/bss_bio.c:1.1     Tue Jan 25 23:35:03 2000
+++ opensa/openssl/crypto/bio/bss_bio.c Thu Mar  2 21:11:51 2000
@@ -13,6 +13,7 @@
 #endif
 
 #include <assert.h>
+#include <limits.h>
 #include <stdlib.h>
 #include <string.h>
 
@@ -40,7 +41,8 @@
        NULL /* no bio_gets */,
        bio_ctrl,
        bio_new,
-       bio_free
+       bio_free,
+       NULL /* no bio_callback_ctrl */
 };
 
 BIO_METHOD *BIO_s_bio(void)
@@ -64,7 +66,7 @@
 
        size_t request; /* valid iff peer != NULL; 0 if len != 0,
                         * otherwise set by peer to number of bytes
-                        * it (unsuccesfully) tried to read,
+                        * it (unsuccessfully) tried to read,
                         * never more than buffer space (size-len) warrants. */
 };
 
@@ -195,6 +197,81 @@
        return size;
        }
 
+/* non-copying interface: provide pointer to available data in buffer
+ *    bio_nread0:  return number of available bytes
+ *    bio_nread:   also advance index
+ * (example usage:  bio_nread0(), read from buffer, bio_nread()
+ *  or just         bio_nread(), read from buffer)
+ */
+/* WARNING: The non-copying interface is largely untested as of yet
+ * and may contain bugs. */
+static size_t bio_nread0(BIO *bio, char **buf)
+       {
+       struct bio_bio_st *b, *peer_b;
+       size_t num;
+       
+       BIO_clear_retry_flags(bio);
+
+       if (!bio->init)
+               return 0;
+       
+       b = bio->ptr;
+       assert(b != NULL);
+       assert(b->peer != NULL);
+       peer_b = b->peer->ptr;
+       assert(peer_b != NULL);
+       assert(peer_b->buf != NULL);
+       
+       peer_b->request = 0;
+       
+       if (peer_b->len == 0)
+               {
+               char dummy;
+               
+               /* avoid code duplication -- nothing available for reading */
+               return bio_read(bio, &dummy, 1); /* returns 0 or -1 */
+               }
+
+       num = peer_b->len;
+       if (peer_b->size < peer_b->offset + num)
+               /* no ring buffer wrap-around for non-copying interface */
+               num = peer_b->size - peer_b->offset;
+       assert(num > 0);
+
+       if (buf != NULL)
+               *buf = peer_b->buf + peer_b->offset;
+       return num;
+       }
+
+static size_t bio_nread(BIO *bio, char **buf, size_t num)
+       {
+       struct bio_bio_st *b, *peer_b;
+       size_t available;
+
+       available = bio_nread0(bio, buf);
+       if (num > available)
+               num = available;
+       if (num == 0)
+               return num;
+
+       b = bio->ptr;
+       peer_b = b->peer->ptr;
+
+       peer_b->len -= num;
+       if (peer_b->len) 
+               {
+               peer_b->offset += num;
+               assert(peer_b->offset <= peer_b->size);
+               if (peer_b->offset == peer_b->size)
+                       peer_b->offset = 0;
+               }
+       else
+               peer_b->offset = 0;
+
+       return num;
+       }
+
+
 static int bio_write(BIO *bio, char *buf, int num_)
        {
        size_t num = num_;
@@ -268,7 +345,79 @@
        return num;
        }
 
+/* non-copying interface: provide pointer to region to write to
+ *   bio_nwrite0:  check how much space is available
+ *   bio_nwrite:   also increase length
+ * (example usage:  bio_nwrite0(), write to buffer, bio_nwrite()
+ *  or just         bio_nwrite(), write to buffer)
+ */
+static size_t bio_nwrite0(BIO *bio, char **buf)
+       {
+       struct bio_bio_st *b;
+       size_t num;
+       size_t write_offset;
+
+       BIO_clear_retry_flags(bio);
+
+       if (!bio->init)
+               return 0;
+
+       b = bio->ptr;           
+       assert(b != NULL);
+       assert(b->peer != NULL);
+       assert(b->buf != NULL);
+
+       b->request = 0;
+       if (b->closed)
+               {
+               BIOerr(BIO_F_BIO_NWRITE0, BIO_R_BROKEN_PIPE);
+               return -1;
+               }
+
+       assert(b->len <= b->size);
+
+       if (b->len == b->size)
+               {
+               BIO_set_retry_write(bio);
+               return -1;
+               }
 
+       num = b->size - b->len;
+       write_offset = b->offset + b->len;
+       if (write_offset >= b->size)
+               write_offset -= b->size;
+       if (write_offset + num > b->size)
+               /* no ring buffer wrap-around for non-copying interface
+                * (to fulfil the promise by BIO_ctrl_get_write_guarantee,
+                * BIO_nwrite may have to be called twice) */
+               num = b->size - write_offset;
+
+       if (buf != NULL)
+               *buf = b->buf + write_offset;
+       assert(write_offset + num <= b->size);
+
+       return num;
+       }
+
+static size_t bio_nwrite(BIO *bio, char **buf, size_t num)
+       {
+       struct bio_bio_st *b;
+       size_t space;
+
+       space = bio_nwrite0(bio, buf);
+       if (num > space)
+               num = space;
+       if (num == 0)
+               return num;
+       b = bio->ptr;
+       assert(b != NULL);
+       b->len += num;
+       assert(b->len <= b->size);
+
+       return num;
+       }
+
+
 static long bio_ctrl(BIO *bio, int cmd, long num, void *ptr)
        {
        long ret;
@@ -331,7 +480,7 @@
 
        case BIO_C_GET_WRITE_GUARANTEE:
                /* How many bytes can the caller feed to the next write
-                * withouth having to keep any? */
+                * without having to keep any? */
                if (b->peer == NULL || b->closed)
                        ret = 0;
                else
@@ -339,18 +488,42 @@
                break;
 
        case BIO_C_GET_READ_REQUEST:
-               /* If the peer unsuccesfully tried to read, how many bytes
+               /* If the peer unsuccessfully tried to read, how many bytes
                 * were requested?  (As with BIO_CTRL_PENDING, that number
                 * can usually be treated as boolean.) */
                ret = (long) b->request;
                break;
 
+       case BIO_C_RESET_READ_REQUEST:
+               /* Reset request.  (Can be useful after read attempts
+                * at the other side that are meant to be non-blocking,
+                * e.g. when probing SSL_read to see if any data is
+                * available.) */
+               b->request = 0;
+               ret = 1;
+               break;
+
        case BIO_C_SHUTDOWN_WR:
                /* similar to shutdown(..., SHUT_WR) */
                b->closed = 1;
                ret = 1;
                break;
 
+       case BIO_C_NREAD:
+               /* non-copying read */
+               ret = (long) bio_nread(bio, ptr, (size_t) num);
+               break;
+               
+       case BIO_C_NWRITE0:
+               /* prepare for non-copying write */
+               ret = (long) bio_nwrite0(bio, ptr);
+               break;
+
+       case BIO_C_NWRITE:
+               /* non-copying write */
+               ret = (long) bio_nwrite(bio, ptr, (size_t) num);
+               break;
+               
 
        /* standard CTRL codes follow */
 
@@ -585,4 +758,79 @@
 size_t BIO_ctrl_get_read_request(BIO *bio)
        {
        return BIO_ctrl(bio, BIO_C_GET_READ_REQUEST, 0, NULL);
+       }
+
+int BIO_ctrl_reset_read_request(BIO *bio)
+       {
+       return (BIO_ctrl(bio, BIO_C_RESET_READ_REQUEST, 0, NULL) != 0);
+       }
+
+
+/* BIO_nread0/nread/nwrite0/nwrite are available only for BIO pairs for now
+ * (conceivably some other BIOs could allow non-copying reads and writes too.)
+ */
+int BIO_nread0(BIO *bio, char **buf)
+       {
+       long ret;
+
+       if (!bio->init)
+               {
+               BIOerr(BIO_F_BIO_NREAD0, BIO_R_UNINITIALIZED);
+               return -2;
+               }
+
+       ret = BIO_ctrl(bio, BIO_C_NREAD0, 0, buf);
+       if (ret > INT_MAX)
+               return INT_MAX;
+       else
+               return (int) ret;
+       }
+
+int BIO_nread(BIO *bio, char **buf, int num)
+       {
+       int ret;
+
+       if (!bio->init)
+               {
+               BIOerr(BIO_F_BIO_NREAD, BIO_R_UNINITIALIZED);
+               return -2;
+               }
+
+       ret = (int) BIO_ctrl(bio, BIO_C_NREAD, num, buf);
+       if (ret > 0)
+               bio->num_read += ret;
+       return ret;
+       }
+
+int BIO_nwrite0(BIO *bio, char **buf)
+       {
+       long ret;
+
+       if (!bio->init)
+               {
+               BIOerr(BIO_F_BIO_NWRITE0, BIO_R_UNINITIALIZED);
+               return -2;
+               }
+
+       ret = BIO_ctrl(bio, BIO_C_NWRITE0, 0, buf);
+       if (ret > INT_MAX)
+               return INT_MAX;
+       else
+               return (int) ret;
+       }
+
+int BIO_nwrite(BIO *bio, char **buf, int num)
+       {
+       int ret;
+
+       if (!bio->init)
+               {
+               BIOerr(BIO_F_BIO_NWRITE, BIO_R_UNINITIALIZED);
+               return -2;
+               }
+
+       ret = BIO_ctrl(bio, BIO_C_NWRITE, num, buf);
+       if (ret > 0)
+               bio->num_read += ret;
+       return ret;
        }
Index: opensa/openssl/crypto/bio/bss_conn.c
diff -u opensa/openssl/crypto/bio/bss_conn.c:1.1 
opensa/openssl/crypto/bio/bss_conn.c:1.2
--- opensa/openssl/crypto/bio/bss_conn.c:1.1    Tue Jan 25 23:35:03 2000
+++ opensa/openssl/crypto/bio/bss_conn.c        Thu Mar  2 21:11:51 2000
@@ -90,11 +90,11 @@
        struct sockaddr_in them;
 
        /* int socket; this will be kept in bio->num so that it is
-        * compatable with the bss_sock bio */ 
+        * compatible with the bss_sock bio */ 
 
        /* called when the connection is initially made
         *  callback(BIO,state,ret);  The callback should return
-        * 'ret'.  state is for compatablity with the ssl info_callback */
+        * 'ret'.  state is for compatibility with the ssl info_callback */
        int (*info_callback)();
        } BIO_CONNECT;
 
@@ -104,6 +104,7 @@
 static long conn_ctrl(BIO *h,int cmd,long arg1,char *arg2);
 static int conn_new(BIO *h);
 static int conn_free(BIO *data);
+static long conn_callback_ctrl(BIO *h,int cmd,void *(*fp)());
 
 static int conn_state(BIO *b, BIO_CONNECT *c);
 static void conn_close_socket(BIO *data);
@@ -121,6 +122,7 @@
        conn_ctrl,
        conn_new,
        conn_free,
+       conn_callback_ctrl,
        };
 
 static int conn_state(BIO *b, BIO_CONNECT *c)
@@ -494,7 +496,7 @@
                                *((int *)ptr)=data->port;
                                }
                        if ((!b->init) || (ptr == NULL))
-                               *pptr="not initalised";
+                               *pptr="not initialized";
                        ret=1;
                        }
                break;
@@ -564,16 +566,25 @@
        case BIO_CTRL_FLUSH:
                break;
        case BIO_CTRL_DUP:
+               {
                dbio=(BIO *)ptr;
                if (data->param_port)
                        BIO_set_conn_port(dbio,data->param_port);
                if (data->param_hostname)
                        BIO_set_conn_hostname(dbio,data->param_hostname);
                BIO_set_nbio(dbio,data->nbio);
-               (void)BIO_set_info_callback(dbio,data->info_callback);
+               (void)BIO_set_info_callback(dbio,(void *(*)())(data->info_callback));
+               }
                break;
        case BIO_CTRL_SET_CALLBACK:
-               data->info_callback=(int (*)())ptr;
+               {
+#if 0 /* FIXME: Should this be used?  -- Richard Levitte */
+               BIOerr(BIO_F_CONN_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
+               ret = -1;
+#else
+               ret=0;
+#endif
+               }
                break;
        case BIO_CTRL_GET_CALLBACK:
                {
@@ -581,6 +592,27 @@
 
                fptr=(int (**)())ptr;
                *fptr=data->info_callback;
+               }
+               break;
+       default:
+               ret=0;
+               break;
+               }
+       return(ret);
+       }
+
+static long conn_callback_ctrl(BIO *b, int cmd, void *(*fp)())
+       {
+       long ret=1;
+       BIO_CONNECT *data;
+
+       data=(BIO_CONNECT *)b->ptr;
+
+       switch (cmd)
+               {
+       case BIO_CTRL_SET_CALLBACK:
+               {
+               data->info_callback=(int (*)())fp;
                }
                break;
        default:
Index: opensa/openssl/crypto/bio/bss_file.c
diff -u opensa/openssl/crypto/bio/bss_file.c:1.1 
opensa/openssl/crypto/bio/bss_file.c:1.2
--- opensa/openssl/crypto/bio/bss_file.c:1.1    Tue Jan 25 23:35:03 2000
+++ opensa/openssl/crypto/bio/bss_file.c        Thu Mar  2 21:11:51 2000
@@ -91,6 +91,7 @@
        file_ctrl,
        file_new,
        file_free,
+       NULL,
        };
 
 BIO *BIO_new_file(const char *filename, const char *mode)
@@ -171,7 +172,7 @@
                if (fwrite(in,(int)inl,1,(FILE *)b->ptr))
                        ret=inl;
                /* ret=fwrite(in,1,(int)inl,(FILE *)b->ptr); */
-               /* acording to Tim Hudson <[EMAIL PROTECTED]>, the commented
+               /* according to Tim Hudson <[EMAIL PROTECTED]>, the commented
                 * out version above can cause 'inl' write calls under
                 * some stupid stdio implementations (VMS) */
                }
Index: opensa/openssl/crypto/bio/bss_log.c
diff -u opensa/openssl/crypto/bio/bss_log.c:1.1 opensa/openssl/crypto/bio/bss_log.c:1.2
--- opensa/openssl/crypto/bio/bss_log.c:1.1     Tue Jan 25 23:35:03 2000
+++ opensa/openssl/crypto/bio/bss_log.c Thu Mar  2 21:11:51 2000
@@ -72,6 +72,8 @@
 #else
 #include <syslog.h>
 #endif
+#else
+#include <process.h>
 #endif
 
 #include "cryptlib.h"
@@ -98,6 +100,7 @@
        slg_ctrl,
        slg_new,
        slg_free,
+       NULL,
        };
 
 BIO_METHOD *BIO_s_log(void)
@@ -131,8 +134,10 @@
        char* buf= in;
        char* pp;
 #if defined(WIN32)
-       LPTSTR lpszStrings[1];
+       LPCSTR lpszStrings[2];
        WORD evtype= EVENTLOG_ERROR_TYPE;
+       int pid = _getpid();
+       char pidbuf[20];
 #else
        int priority;
 #endif
@@ -156,10 +161,13 @@
                evtype= EVENTLOG_ERROR_TYPE;
                pp= buf;
        }
-       lpszStrings[0]= pp;
+
+       sprintf(pidbuf, "[%d] ", pid);
+       lpszStrings[0] = pidbuf;
+       lpszStrings[1] = pp;
 
        if(b->ptr)
-               ReportEvent(b->ptr, evtype, 0, 1024, NULL, 1, 0,
+               ReportEvent(b->ptr, evtype, 0, 1024, NULL, 2, 0,
                                lpszStrings, NULL);
 #else
        if(strncmp(buf, "ERR ", 4) == 0){
Index: opensa/openssl/crypto/bio/bss_mem.c
diff -u opensa/openssl/crypto/bio/bss_mem.c:1.1 opensa/openssl/crypto/bio/bss_mem.c:1.2
--- opensa/openssl/crypto/bio/bss_mem.c:1.1     Tue Jan 25 23:35:03 2000
+++ opensa/openssl/crypto/bio/bss_mem.c Thu Mar  2 21:11:51 2000
@@ -79,6 +79,7 @@
        mem_ctrl,
        mem_new,
        mem_free,
+       NULL,
        };
 
 /* bio->num is used to hold the value to return on 'empty', if it is
@@ -89,6 +90,26 @@
        return(&mem_method);
        }
 
+BIO *BIO_new_mem_buf(void *buf, int len)
+{
+       BIO *ret;
+       BUF_MEM *b;
+       if (!buf) {
+               BIOerr(BIO_F_BIO_NEW_MEM_BUF,BIO_R_NULL_PARAMETER);
+               return NULL;
+       }
+       if(len == -1) len = strlen(buf);
+       if(!(ret = BIO_new(BIO_s_mem())) ) return NULL;
+       b = (BUF_MEM *)ret->ptr;
+       b->data = buf;
+       b->length = len;
+       b->max = len;
+       ret->flags |= BIO_FLAGS_MEM_RDONLY;
+       /* Since this is static data retrying wont help */
+       ret->num = 0;
+       return ret;
+}
+
 static int mem_new(BIO *bi)
        {
        BUF_MEM *b;
@@ -109,7 +130,10 @@
                {
                if ((a->init) && (a->ptr != NULL))
                        {
-                       BUF_MEM_free((BUF_MEM *)a->ptr);
+                       BUF_MEM *b;
+                       b = (BUF_MEM *)a->ptr;
+                       if(a->flags & BIO_FLAGS_MEM_RDONLY) b->data = NULL;
+                       BUF_MEM_free(b);
                        a->ptr=NULL;
                        }
                }
@@ -126,17 +150,18 @@
        bm=(BUF_MEM *)b->ptr;
        BIO_clear_retry_flags(b);
        ret=(outl > bm->length)?bm->length:outl;
-       if ((out != NULL) && (ret > 0))
-               {
+       if ((out != NULL) && (ret > 0)) {
                memcpy(out,bm->data,ret);
                bm->length-=ret;
                /* memmove(&(bm->data[0]),&(bm->data[ret]), bm->length); */
-               from=(char *)&(bm->data[ret]);
-               to=(char *)&(bm->data[0]);
-               for (i=0; i<bm->length; i++)
-                       to[i]=from[i];
+               if(b->flags & BIO_FLAGS_MEM_RDONLY) bm->data += ret;
+               else {
+                       from=(char *)&(bm->data[ret]);
+                       to=(char *)&(bm->data[0]);
+                       for (i=0; i<bm->length; i++)
+                               to[i]=from[i];
                }
-       else if (bm->length == 0)
+       } else if (bm->length == 0)
                {
                if (b->num != 0)
                        BIO_set_retry_read(b);
@@ -158,6 +183,11 @@
                goto end;
                }
 
+       if(b->flags & BIO_FLAGS_MEM_RDONLY) {
+               BIOerr(BIO_F_MEM_WRITE,BIO_R_WRITE_TO_READ_ONLY_BIO);
+               goto end;
+       }
+
        BIO_clear_retry_flags(b);
        blen=bm->length;
        if (BUF_MEM_grow(bm,blen+inl) != (blen+inl))
@@ -178,9 +208,15 @@
        switch (cmd)
                {
        case BIO_CTRL_RESET:
-               if (bm->data != NULL)
-                       memset(bm->data,0,bm->max);
-               bm->length=0;
+               if (bm->data != NULL) {
+                       /* For read only case reset to the start again */
+                       if(b->flags & BIO_FLAGS_MEM_RDONLY) 
+                                       bm->data -= bm->max - bm->length;
+                       else {
+                               memset(bm->data,0,bm->max);
+                               bm->length=0;
+                       }
+               }
                break;
        case BIO_CTRL_EOF:
                ret=(long)(bm->length == 0);
Index: opensa/openssl/crypto/bio/bss_null.c
diff -u opensa/openssl/crypto/bio/bss_null.c:1.1 
opensa/openssl/crypto/bio/bss_null.c:1.2
--- opensa/openssl/crypto/bio/bss_null.c:1.1    Tue Jan 25 23:35:03 2000
+++ opensa/openssl/crypto/bio/bss_null.c        Thu Mar  2 21:11:51 2000
@@ -79,6 +79,7 @@
        null_ctrl,
        null_new,
        null_free,
+       NULL,
        };
 
 BIO_METHOD *BIO_s_null(void)
Index: opensa/openssl/crypto/bio/bss_rtcp.c
diff -u opensa/openssl/crypto/bio/bss_rtcp.c:1.1 
opensa/openssl/crypto/bio/bss_rtcp.c:1.2
--- opensa/openssl/crypto/bio/bss_rtcp.c:1.1    Tue Jan 25 23:35:03 2000
+++ opensa/openssl/crypto/bio/bss_rtcp.c        Thu Mar  2 21:11:51 2000
@@ -107,6 +107,7 @@
        rtcp_ctrl,
        rtcp_new,
        rtcp_free,
+       NULL,
        };
 
 BIO_METHOD *BIO_s_rtcp(void)
Index: opensa/openssl/crypto/bio/bss_sock.c
diff -u opensa/openssl/crypto/bio/bss_sock.c:1.1 
opensa/openssl/crypto/bio/bss_sock.c:1.2
--- opensa/openssl/crypto/bio/bss_sock.c:1.1    Tue Jan 25 23:35:03 2000
+++ opensa/openssl/crypto/bio/bss_sock.c        Thu Mar  2 21:11:51 2000
@@ -95,6 +95,7 @@
        sock_ctrl,
        sock_new,
        sock_free,
+       NULL,
        };
 
 BIO_METHOD *BIO_s_socket(void)
@@ -112,6 +113,7 @@
        fd_ctrl,
        fd_new,
        fd_free,
+       NULL,
        };
 
 BIO_METHOD *BIO_s_fd(void)
@@ -163,8 +165,7 @@
                if (a->init)
                        {
 #ifndef BIO_FD
-                       shutdown(a->num,2);
-                       closesocket(a->num);
+                       SHUTDOWN2(a->num);
 #else                  /* BIO_FD */
                        close(a->num);
 #endif
Index: opensa/openssl/crypto/bio/makefile.ssl
diff -u opensa/openssl/crypto/bio/makefile.ssl:1.1 
opensa/openssl/crypto/bio/makefile.ssl:1.2
--- opensa/openssl/crypto/bio/makefile.ssl:1.1  Tue Jan 25 23:35:03 2000
+++ opensa/openssl/crypto/bio/makefile.ssl      Thu Mar  2 21:11:51 2000
@@ -90,17 +90,20 @@
 b_dump.o: ../../include/openssl/crypto.h ../../include/openssl/e_os.h
 b_dump.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
 b_dump.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
-b_dump.o: ../../include/openssl/stack.h ../cryptlib.h
+b_dump.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
+b_dump.o: ../cryptlib.h
 b_print.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
 b_print.o: ../../include/openssl/crypto.h ../../include/openssl/e_os.h
 b_print.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
 b_print.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
-b_print.o: ../../include/openssl/stack.h ../cryptlib.h
+b_print.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
+b_print.o: ../cryptlib.h
 b_sock.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
 b_sock.o: ../../include/openssl/crypto.h ../../include/openssl/e_os.h
 b_sock.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
 b_sock.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
-b_sock.o: ../../include/openssl/stack.h ../cryptlib.h
+b_sock.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
+b_sock.o: ../cryptlib.h
 bf_buff.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
 bf_buff.o: ../../include/openssl/blowfish.h ../../include/openssl/bn.h
 bf_buff.o: ../../include/openssl/buffer.h ../../include/openssl/cast.h
@@ -151,60 +154,65 @@
 bio_cb.o: ../../include/openssl/crypto.h ../../include/openssl/e_os.h
 bio_cb.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
 bio_cb.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
-bio_cb.o: ../../include/openssl/stack.h ../cryptlib.h
+bio_cb.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
+bio_cb.o: ../cryptlib.h
 bio_err.o: ../../include/openssl/bio.h ../../include/openssl/crypto.h
 bio_err.o: ../../include/openssl/err.h ../../include/openssl/opensslv.h
-bio_err.o: ../../include/openssl/stack.h
+bio_err.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
 bio_lib.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
 bio_lib.o: ../../include/openssl/crypto.h ../../include/openssl/e_os.h
 bio_lib.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
 bio_lib.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
-bio_lib.o: ../../include/openssl/stack.h ../cryptlib.h
+bio_lib.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
+bio_lib.o: ../cryptlib.h
 bss_acpt.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
 bss_acpt.o: ../../include/openssl/crypto.h ../../include/openssl/e_os.h
 bss_acpt.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
 bss_acpt.o: ../../include/openssl/opensslconf.h
-bss_acpt.o: ../../include/openssl/opensslv.h ../../include/openssl/stack.h
-bss_acpt.o: ../cryptlib.h
+bss_acpt.o: ../../include/openssl/opensslv.h ../../include/openssl/safestack.h
+bss_acpt.o: ../../include/openssl/stack.h ../cryptlib.h
 bss_bio.o: ../../include/openssl/bio.h ../../include/openssl/crypto.h
 bss_bio.o: ../../include/openssl/err.h ../../include/openssl/opensslv.h
-bss_bio.o: ../../include/openssl/stack.h
+bss_bio.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
 bss_conn.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
 bss_conn.o: ../../include/openssl/crypto.h ../../include/openssl/e_os.h
 bss_conn.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
 bss_conn.o: ../../include/openssl/opensslconf.h
-bss_conn.o: ../../include/openssl/opensslv.h ../../include/openssl/stack.h
-bss_conn.o: ../cryptlib.h
+bss_conn.o: ../../include/openssl/opensslv.h ../../include/openssl/safestack.h
+bss_conn.o: ../../include/openssl/stack.h ../cryptlib.h
 bss_fd.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
 bss_fd.o: ../../include/openssl/crypto.h ../../include/openssl/e_os.h
 bss_fd.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
 bss_fd.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
-bss_fd.o: ../../include/openssl/stack.h ../cryptlib.h bss_sock.c
+bss_fd.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
+bss_fd.o: ../cryptlib.h bss_sock.c
 bss_file.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
 bss_file.o: ../../include/openssl/crypto.h ../../include/openssl/e_os.h
 bss_file.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
 bss_file.o: ../../include/openssl/opensslconf.h
-bss_file.o: ../../include/openssl/opensslv.h ../../include/openssl/stack.h
-bss_file.o: ../cryptlib.h
+bss_file.o: ../../include/openssl/opensslv.h ../../include/openssl/safestack.h
+bss_file.o: ../../include/openssl/stack.h ../cryptlib.h
 bss_log.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
 bss_log.o: ../../include/openssl/crypto.h ../../include/openssl/e_os.h
 bss_log.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
 bss_log.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
-bss_log.o: ../../include/openssl/stack.h ../cryptlib.h
+bss_log.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
+bss_log.o: ../cryptlib.h
 bss_mem.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
 bss_mem.o: ../../include/openssl/crypto.h ../../include/openssl/e_os.h
 bss_mem.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
 bss_mem.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
-bss_mem.o: ../../include/openssl/stack.h ../cryptlib.h
+bss_mem.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
+bss_mem.o: ../cryptlib.h
 bss_null.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
 bss_null.o: ../../include/openssl/crypto.h ../../include/openssl/e_os.h
 bss_null.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
 bss_null.o: ../../include/openssl/opensslconf.h
-bss_null.o: ../../include/openssl/opensslv.h ../../include/openssl/stack.h
-bss_null.o: ../cryptlib.h
+bss_null.o: ../../include/openssl/opensslv.h ../../include/openssl/safestack.h
+bss_null.o: ../../include/openssl/stack.h ../cryptlib.h
 bss_sock.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
 bss_sock.o: ../../include/openssl/crypto.h ../../include/openssl/e_os.h
 bss_sock.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
 bss_sock.o: ../../include/openssl/opensslconf.h
-bss_sock.o: ../../include/openssl/opensslv.h ../../include/openssl/stack.h
-bss_sock.o: ../cryptlib.h
+bss_sock.o: ../../include/openssl/opensslv.h ../../include/openssl/safestack.h
+bss_sock.o: ../../include/openssl/stack.h ../cryptlib.h
Index: opensa/openssl/crypto/bn/bn.h
diff -u opensa/openssl/crypto/bn/bn.h:1.1 opensa/openssl/crypto/bn/bn.h:1.2
--- opensa/openssl/crypto/bn/bn.h:1.1   Tue Jan 25 23:33:10 2000
+++ opensa/openssl/crypto/bn/bn.h       Thu Mar  2 21:11:51 2000
@@ -83,12 +83,12 @@
  * The reason for this flag is that when the particular C compiler
  * library routine is used, and the library is linked with a different
  * compiler, the library is missing.  This mostly happens when the
- * library is built with gcc and then linked using nornal cc.  This would
- * be a common occurance because gcc normally produces code that is
+ * library is built with gcc and then linked using normal cc.  This would
+ * be a common occurrence because gcc normally produces code that is
  * 2 times faster than system compilers for the big number stuff.
  * For machines with only one compiler (or shared libraries), this should
  * be on.  Again this in only really a problem on machines
- * using "long long's", are 32bit, and are not using my assember code. */
+ * using "long long's", are 32bit, and are not using my assembler code. */
 #if defined(MSDOS) || defined(WINDOWS) || defined(linux)
 #define BN_DIV2W
 #endif
@@ -118,8 +118,8 @@
 
 /* This is where the long long data type is 64 bits, but long is 32.
  * For machines where there are 64bit registers, this is the mode to use.
- * IRIX, on R4000 and above should use this mode, along with the relevent
- * assember code :-).  Do NOT define BN_LLONG.
+ * IRIX, on R4000 and above should use this mode, along with the relevant
+ * assembler code :-).  Do NOT define BN_LLONG.
  */
 #ifdef SIXTY_FOUR_BIT
 #undef BN_LLONG
@@ -240,11 +240,15 @@
 
 /* Used for temp variables */
 #define BN_CTX_NUM     12
+#define BN_CTX_NUM_POS 12
 typedef struct bignum_ctx
        {
        int tos;
-       BIGNUM bn[BN_CTX_NUM+1];
+       BIGNUM bn[BN_CTX_NUM];
        int flags;
+       int depth;
+       int pos[BN_CTX_NUM_POS];
+       int too_many;
        } BN_CTX;
 
 typedef struct bn_blinding_st
@@ -257,16 +261,15 @@
 
 /* Used for montgomery multiplication */
 typedef struct bn_mont_ctx_st
-        {
-       int use_word;   /* 0 for word form, 1 for long form */
-        int ri;         /* number of bits in R */
-        BIGNUM RR;     /* used to convert to montgomery form */
-        BIGNUM N;      /* The modulus */
-        BIGNUM Ni;     /* The inverse of N */
-       BN_ULONG n0;    /* word form of inverse, normally only one of
-                        * Ni or n0 is defined */
+       {
+       int ri;        /* number of bits in R */
+       BIGNUM RR;     /* used to convert to montgomery form */
+       BIGNUM N;      /* The modulus */
+       BIGNUM Ni;     /* R*(1/R mod N) - N*Ni = 1
+                       * (Ni is only stored for bignum algorithm) */
+       BN_ULONG n0;   /* least significant word of Ni */
        int flags;
-        } BN_MONT_CTX;
+       } BN_MONT_CTX;
 
 /* Used for reciprocal division/mod functions
  * It cannot be shared between threads
@@ -282,8 +285,27 @@
 
 #define BN_to_montgomery(r,a,mont,ctx) BN_mod_mul_montgomery(\
        r,a,&((mont)->RR),(mont),ctx)
+
+#define BN_prime_checks 0 /* default: select number of iterations
+                            based on the size of the number */
 
-#define BN_prime_checks                (5)
+/* number of Miller-Rabin iterations for an error rate  of less than 2^-80
+ * for random 'b'-bit input, b >= 100 (taken from table 4.4 in the Handbook
+ * of Applied Cryptography [Menezes, van Oorschot, Vanstone; CRC Press 1996];
+ * original paper: Damgaard, Landrock, Pomerance: Average case error estimates
+ * for the strong probable prime test. -- Math. Comp. 61 (1993) 177-194) */
+#define BN_prime_checks_for_size(b) ((b) >= 1300 ?  2 : \
+                                (b) >=  850 ?  3 : \
+                                (b) >=  650 ?  4 : \
+                                (b) >=  550 ?  5 : \
+                                (b) >=  450 ?  6 : \
+                                (b) >=  400 ?  7 : \
+                                (b) >=  350 ?  8 : \
+                                (b) >=  300 ?  9 : \
+                                (b) >=  250 ? 12 : \
+                                (b) >=  200 ? 15 : \
+                                (b) >=  150 ? 18 : \
+                                /* b >= 100 */ 27)
 
 #define BN_num_bytes(a)        ((BN_num_bits(a)+7)/8)
 #define BN_is_word(a,w)        (((a)->top == 1) && ((a)->d[0] == (BN_ULONG)(w)))
@@ -296,26 +318,16 @@
 /*#define BN_ascii2bn(a)       BN_hex2bn(a) */
 /*#define BN_bn2ascii(a)       BN_bn2hex(a) */
 
-#define bn_expand(n,b) ((((((b+BN_BITS2-1))/BN_BITS2)) <= (n)->max)?\
-       (n):bn_expand2((n),(b)/BN_BITS2+1))
-#define bn_wexpand(n,b) (((b) <= (n)->max)?(n):bn_expand2((n),(b)))
-
-#define bn_fix_top(a) \
-        { \
-        BN_ULONG *ftl; \
-       if ((a)->top > 0) \
-               { \
-               for (ftl= &((a)->d[(a)->top-1]); (a)->top > 0; (a)->top--) \
-               if (*(ftl--)) break; \
-               } \
-       }
-
 BIGNUM *BN_value_one(void);
 char * BN_options(void);
 BN_CTX *BN_CTX_new(void);
 void   BN_CTX_init(BN_CTX *c);
 void   BN_CTX_free(BN_CTX *c);
+void   BN_CTX_start(BN_CTX *ctx);
+BIGNUM *BN_CTX_get(BN_CTX *ctx);
+void   BN_CTX_end(BN_CTX *ctx);
 int     BN_rand(BIGNUM *rnd, int bits, int top,int bottom);
+int     BN_pseudo_rand(BIGNUM *rnd, int bits, int top,int bottom);
 int    BN_num_bits(const BIGNUM *a);
 int    BN_num_bits_word(BN_ULONG);
 BIGNUM *BN_new(void);
@@ -329,13 +341,13 @@
 int    BN_sub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b);
 int    BN_usub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b);
 int    BN_uadd(BIGNUM *r, const BIGNUM *a, const BIGNUM *b);
-int    BN_add(BIGNUM *r, BIGNUM *a, BIGNUM *b);
+int    BN_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b);
 int    BN_mod(BIGNUM *rem, const BIGNUM *m, const BIGNUM *d, BN_CTX *ctx);
 int    BN_div(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m, const BIGNUM *d,
               BN_CTX *ctx);
-int    BN_mul(BIGNUM *r, BIGNUM *a, BIGNUM *b,BN_CTX *ctx);
+int    BN_mul(BIGNUM *r, BIGNUM *a, BIGNUM *b, BN_CTX *ctx);
 int    BN_sqr(BIGNUM *r, BIGNUM *a,BN_CTX *ctx);
-BN_ULONG BN_mod_word(BIGNUM *a, BN_ULONG w);
+BN_ULONG BN_mod_word(const BIGNUM *a, BN_ULONG w);
 BN_ULONG BN_div_word(BIGNUM *a, BN_ULONG w);
 int    BN_mul_word(BIGNUM *a, BN_ULONG w);
 int    BN_add_word(BIGNUM *a, BN_ULONG w);
@@ -358,19 +370,18 @@
        BIGNUM *m,BN_CTX *ctx);
 int    BN_mask_bits(BIGNUM *a,int n);
 int    BN_mod_mul(BIGNUM *ret, BIGNUM *a, BIGNUM *b, const BIGNUM *m, BN_CTX *ctx);
-#ifndef WIN16
-int    BN_print_fp(FILE *fp, BIGNUM *a);
+#ifndef NO_FP_API
+int    BN_print_fp(FILE *fp, const BIGNUM *a);
 #endif
 #ifdef HEADER_BIO_H
 int    BN_print(BIO *fp, const BIGNUM *a);
 #else
-int    BN_print(char *fp, const BIGNUM *a);
+int    BN_print(void *fp, const BIGNUM *a);
 #endif
 int    BN_reciprocal(BIGNUM *r, BIGNUM *m, int len, BN_CTX *ctx);
 int    BN_rshift(BIGNUM *r, BIGNUM *a, int n);
 int    BN_rshift1(BIGNUM *r, BIGNUM *a);
 void   BN_clear(BIGNUM *a);
-BIGNUM *bn_expand2(BIGNUM *b, int bits);
 BIGNUM *BN_dup(const BIGNUM *a);
 int    BN_ucmp(const BIGNUM *a, const BIGNUM *b);
 int    BN_set_bit(BIGNUM *a, int n);
@@ -381,19 +392,16 @@
 int    BN_dec2bn(BIGNUM **a, const char *str);
 int    BN_gcd(BIGNUM *r,BIGNUM *in_a,BIGNUM *in_b,BN_CTX *ctx);
 BIGNUM *BN_mod_inverse(BIGNUM *ret,BIGNUM *a, const BIGNUM *n,BN_CTX *ctx);
-BIGNUM *BN_generate_prime(BIGNUM *ret,int bits,int strong,BIGNUM *add,
+BIGNUM *BN_generate_prime(BIGNUM *ret,int bits,int safe,BIGNUM *add,
                BIGNUM *rem,void (*callback)(int,int,void *),void *cb_arg);
-int    BN_is_prime(BIGNUM *p,int nchecks,void (*callback)(int,int,void *),
+int    BN_is_prime(const BIGNUM *p,int nchecks,
+               void (*callback)(int,int,void *),
                BN_CTX *ctx,void *cb_arg);
+int    BN_is_prime_fasttest(const BIGNUM *p,int nchecks,
+               void (*callback)(int,int,void *),BN_CTX *ctx,void *cb_arg,
+               int do_trial_division);
 void   ERR_load_BN_strings(void );
 
-BN_ULONG bn_mul_add_words(BN_ULONG *rp, BN_ULONG *ap, int num, BN_ULONG w);
-BN_ULONG bn_mul_words(BN_ULONG *rp, BN_ULONG *ap, int num, BN_ULONG w);
-void     bn_sqr_words(BN_ULONG *rp, BN_ULONG *ap, int num);
-BN_ULONG bn_div_words(BN_ULONG h, BN_ULONG l, BN_ULONG d);
-BN_ULONG bn_add_words(BN_ULONG *rp, BN_ULONG *ap, BN_ULONG *bp,int num);
-BN_ULONG bn_sub_words(BN_ULONG *rp, BN_ULONG *ap, BN_ULONG *bp,int num);
-
 BN_MONT_CTX *BN_MONT_CTX_new(void );
 void BN_MONT_CTX_init(BN_MONT_CTX *ctx);
 int BN_mod_mul_montgomery(BIGNUM *r,BIGNUM *a,BIGNUM *b,BN_MONT_CTX *mont,
@@ -423,6 +431,39 @@
 int    BN_div_recp(BIGNUM *dv, BIGNUM *rem, BIGNUM *m,
                BN_RECP_CTX *recp, BN_CTX *ctx);
 
+/* library internal functions */
+
+#define bn_expand(a,bits) ((((((bits+BN_BITS2-1))/BN_BITS2)) <= (a)->max)?\
+       (a):bn_expand2((a),(bits)/BN_BITS2+1))
+#define bn_wexpand(a,words) (((words) <= (a)->max)?(a):bn_expand2((a),(words)))
+BIGNUM *bn_expand2(BIGNUM *a, int words);
+
+#define bn_fix_top(a) \
+        { \
+        BN_ULONG *ftl; \
+       if ((a)->top > 0) \
+               { \
+               for (ftl= &((a)->d[(a)->top-1]); (a)->top > 0; (a)->top--) \
+               if (*(ftl--)) break; \
+               } \
+       }
+
+BN_ULONG bn_mul_add_words(BN_ULONG *rp, BN_ULONG *ap, int num, BN_ULONG w);
+BN_ULONG bn_mul_words(BN_ULONG *rp, BN_ULONG *ap, int num, BN_ULONG w);
+void     bn_sqr_words(BN_ULONG *rp, BN_ULONG *ap, int num);
+BN_ULONG bn_div_words(BN_ULONG h, BN_ULONG l, BN_ULONG d);
+BN_ULONG bn_add_words(BN_ULONG *rp, BN_ULONG *ap, BN_ULONG *bp,int num);
+BN_ULONG bn_sub_words(BN_ULONG *rp, BN_ULONG *ap, BN_ULONG *bp,int num);
+
+#ifdef BN_DEBUG
+  void bn_dump1(FILE *o, const char *a, BN_ULONG *b,int n);
+# define bn_print(a) {fprintf(stderr, #a "="); BN_print_fp(stderr,a); \
+   fprintf(stderr,"\n");}
+# define bn_dump(a,n) bn_dump1(stderr,#a,a,n);
+#else
+# define bn_print(a)
+# define bn_dump(a,b)
+#endif
 
 /* BEGIN ERROR CODES */
 /* The following lines are auto generated by the script mkerr.pl. Any changes
@@ -438,6 +479,7 @@
 #define BN_F_BN_BLINDING_UPDATE                                 103
 #define BN_F_BN_BN2DEC                                  104
 #define BN_F_BN_BN2HEX                                  105
+#define BN_F_BN_CTX_GET                                         116
 #define BN_F_BN_CTX_NEW                                         106
 #define BN_F_BN_DIV                                     107
 #define BN_F_BN_EXPAND2                                         108
@@ -459,6 +501,7 @@
 #define BN_R_INVALID_LENGTH                             106
 #define BN_R_NOT_INITIALIZED                            107
 #define BN_R_NO_INVERSE                                         108
+#define BN_R_TOO_MANY_TEMPORARY_VARIABLES               109
 
 #ifdef  __cplusplus
 }
Index: opensa/openssl/crypto/bn/bn_add.c
diff -u opensa/openssl/crypto/bn/bn_add.c:1.1 opensa/openssl/crypto/bn/bn_add.c:1.2
--- opensa/openssl/crypto/bn/bn_add.c:1.1       Tue Jan 25 23:33:10 2000
+++ opensa/openssl/crypto/bn/bn_add.c   Thu Mar  2 21:11:51 2000
@@ -61,9 +61,9 @@
 #include "bn_lcl.h"
 
 /* r can == a or b */
-int BN_add(BIGNUM *r, BIGNUM *a, BIGNUM *b)
+int BN_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b)
        {
-       BIGNUM *tmp;
+       const BIGNUM *tmp;
 
        bn_check_top(a);
        bn_check_top(b);
Index: opensa/openssl/crypto/bn/bn_asm.c
diff -u opensa/openssl/crypto/bn/bn_asm.c:1.1 opensa/openssl/crypto/bn/bn_asm.c:1.2
--- opensa/openssl/crypto/bn/bn_asm.c:1.1       Tue Jan 25 23:33:10 2000
+++ opensa/openssl/crypto/bn/bn_asm.c   Thu Mar  2 21:11:51 2000
@@ -56,31 +56,38 @@
  * [including the GNU Public Licence.]
  */
 
+#ifndef BN_DEBUG
+# undef NDEBUG /* avoid conflicting definitions */
+# define NDEBUG
+#endif
+
 #include <stdio.h>
+#include <assert.h>
 #include "cryptlib.h"
 #include "bn_lcl.h"
 
-#ifdef BN_LLONG 
+#if defined(BN_LLONG) || defined(BN_UMULT_HIGH)
 
 BN_ULONG bn_mul_add_words(BN_ULONG *rp, BN_ULONG *ap, int num, BN_ULONG w)
        {
        BN_ULONG c1=0;
 
-       bn_check_num(num);
+       assert(num >= 0);
        if (num <= 0) return(c1);
 
-       for (;;)
+       while (num&~3)
                {
                mul_add(rp[0],ap[0],w,c1);
-               if (--num == 0) break;
                mul_add(rp[1],ap[1],w,c1);
-               if (--num == 0) break;
                mul_add(rp[2],ap[2],w,c1);
-               if (--num == 0) break;
                mul_add(rp[3],ap[3],w,c1);
-               if (--num == 0) break;
-               ap+=4;
-               rp+=4;
+               ap+=4; rp+=4; num-=4;
+               }
+       if (num)
+               {
+               mul_add(rp[0],ap[0],w,c1); if (--num==0) return c1;
+               mul_add(rp[1],ap[1],w,c1); if (--num==0) return c1;
+               mul_add(rp[2],ap[2],w,c1); return c1;
                }
        
        return(c1);
@@ -90,63 +97,54 @@
        {
        BN_ULONG c1=0;
 
-       bn_check_num(num);
+       assert(num >= 0);
        if (num <= 0) return(c1);
 
-       /* for (;;) */
-       while (1) /* circumvent egcs-1.1.2 bug */
+       while (num&~3)
                {
                mul(rp[0],ap[0],w,c1);
-               if (--num == 0) break;
                mul(rp[1],ap[1],w,c1);
-               if (--num == 0) break;
                mul(rp[2],ap[2],w,c1);
-               if (--num == 0) break;
                mul(rp[3],ap[3],w,c1);
-               if (--num == 0) break;
-               ap+=4;
-               rp+=4;
+               ap+=4; rp+=4; num-=4;
+               }
+       if (num)
+               {
+               mul(rp[0],ap[0],w,c1); if (--num == 0) return c1;
+               mul(rp[1],ap[1],w,c1); if (--num == 0) return c1;
+               mul(rp[2],ap[2],w,c1);
                }
        return(c1);
        } 
 
 void bn_sqr_words(BN_ULONG *r, BN_ULONG *a, int n)
         {
-       bn_check_num(n);
+       assert(n >= 0);
        if (n <= 0) return;
-       for (;;)
+       while (n&~3)
                {
-               BN_ULLONG t;
-
-               t=(BN_ULLONG)(a[0])*(a[0]);
-               r[0]=Lw(t); r[1]=Hw(t);
-               if (--n == 0) break;
-
-               t=(BN_ULLONG)(a[1])*(a[1]);
-               r[2]=Lw(t); r[3]=Hw(t);
-               if (--n == 0) break;
-
-               t=(BN_ULLONG)(a[2])*(a[2]);
-               r[4]=Lw(t); r[5]=Hw(t);
-               if (--n == 0) break;
-
-               t=(BN_ULLONG)(a[3])*(a[3]);
-               r[6]=Lw(t); r[7]=Hw(t);
-               if (--n == 0) break;
-
-               a+=4;
-               r+=8;
+               sqr(r[0],r[1],a[0]);
+               sqr(r[2],r[3],a[1]);
+               sqr(r[4],r[5],a[2]);
+               sqr(r[6],r[7],a[3]);
+               a+=4; r+=8; n-=4;
+               }
+       if (n)
+               {
+               sqr(r[0],r[1],a[0]); if (--n == 0) return;
+               sqr(r[2],r[3],a[1]); if (--n == 0) return;
+               sqr(r[4],r[5],a[2]);
                }
        }
 
-#else
+#else /* !(defined(BN_LLONG) || defined(BN_UMULT_HIGH)) */
 
 BN_ULONG bn_mul_add_words(BN_ULONG *rp, BN_ULONG *ap, int num, BN_ULONG w)
        {
        BN_ULONG c=0;
        BN_ULONG bl,bh;
 
-       bn_check_num(num);
+       assert(num >= 0);
        if (num <= 0) return((BN_ULONG)0);
 
        bl=LBITS(w);
@@ -173,7 +171,7 @@
        BN_ULONG carry=0;
        BN_ULONG bl,bh;
 
-       bn_check_num(num);
+       assert(num >= 0);
        if (num <= 0) return((BN_ULONG)0);
 
        bl=LBITS(w);
@@ -197,7 +195,7 @@
 
 void bn_sqr_words(BN_ULONG *r, BN_ULONG *a, int n)
         {
-       bn_check_num(n);
+       assert(n >= 0);
        if (n <= 0) return;
        for (;;)
                {
@@ -218,7 +216,7 @@
                }
        }
 
-#endif
+#endif /* !(defined(BN_LLONG) || defined(BN_UMULT_HIGH)) */
 
 #if defined(BN_LLONG) && defined(BN_DIV2W)
 
@@ -300,14 +298,14 @@
        ret|=q;
        return(ret);
        }
-#endif
+#endif /* !defined(BN_LLONG) && defined(BN_DIV2W) */
 
 #ifdef BN_LLONG
 BN_ULONG bn_add_words(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b, int n)
         {
        BN_ULLONG ll=0;
 
-       bn_check_num(n);
+       assert(n >= 0);
        if (n <= 0) return((BN_ULONG)0);
 
        for (;;)
@@ -338,12 +336,12 @@
                }
        return((BN_ULONG)ll);
        }
-#else
+#else /* !BN_LLONG */
 BN_ULONG bn_add_words(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b, int n)
         {
        BN_ULONG c,l,t;
 
-       bn_check_num(n);
+       assert(n >= 0);
        if (n <= 0) return((BN_ULONG)0);
 
        c=0;
@@ -387,14 +385,14 @@
                }
        return((BN_ULONG)c);
        }
-#endif
+#endif /* !BN_LLONG */
 
 BN_ULONG bn_sub_words(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b, int n)
         {
        BN_ULONG t1,t2;
        int c=0;
 
-       bn_check_num(n);
+       assert(n >= 0);
        if (n <= 0) return((BN_ULONG)0);
 
        for (;;)
@@ -433,6 +431,11 @@
 #undef bn_sqr_comba8
 #undef bn_sqr_comba4
 
+/* mul_add_c(a,b,c0,c1,c2)  -- c+=a*b for three word number c=(c2,c1,c0) */
+/* mul_add_c2(a,b,c0,c1,c2) -- c+=2*a*b for three word number c=(c2,c1,c0) */
+/* sqr_add_c(a,i,c0,c1,c2)  -- c+=a[i]^2 for three word number c=(c2,c1,c0) */
+/* sqr_add_c2(a,i,c0,c1,c2) -- c+=2*a[i]*a[j] for three word number c=(c2,c1,c0) */
+
 #ifdef BN_LLONG
 #define mul_add_c(a,b,c0,c1,c2) \
        t=(BN_ULLONG)a*b; \
@@ -460,7 +463,39 @@
 
 #define sqr_add_c2(a,i,j,c0,c1,c2) \
        mul_add_c2((a)[i],(a)[j],c0,c1,c2)
-#else
+
+#elif defined(BN_UMULT_HIGH)
+
+#define mul_add_c(a,b,c0,c1,c2)        {       \
+       BN_ULONG ta=(a),tb=(b);         \
+       t1 = ta * tb;                   \
+       t2 = BN_UMULT_HIGH(ta,tb);      \
+       c0 += t1; t2 += (c0<t1)?1:0;    \
+       c1 += t2; c2 += (c1<t2)?1:0;    \
+       }
+
+#define mul_add_c2(a,b,c0,c1,c2) {     \
+       BN_ULONG ta=(a),tb=(b),t0;      \
+       t1 = BN_UMULT_HIGH(ta,tb);      \
+       t0 = ta * tb;                   \
+       t2 = t1+t1; c2 += (t2<t1)?1:0;  \
+       t1 = t0+t0; t2 += (t1<t0)?1:0;  \
+       c0 += t1; t2 += (c0<t1)?1:0;    \
+       c1 += t2; c2 += (c1<t2)?1:0;    \
+       }
+
+#define sqr_add_c(a,i,c0,c1,c2)        {       \
+       BN_ULONG ta=(a)[i];             \
+       t1 = ta * ta;                   \
+       t2 = BN_UMULT_HIGH(ta,ta);      \
+       c0 += t1; t2 += (c0<t1)?1:0;    \
+       c1 += t2; c2 += (c1<t2)?1:0;    \
+       }
+
+#define sqr_add_c2(a,i,j,c0,c1,c2)     \
+       mul_add_c2((a)[i],(a)[j],c0,c1,c2)
+
+#else /* !BN_LLONG */
 #define mul_add_c(a,b,c0,c1,c2) \
        t1=LBITS(a); t2=HBITS(a); \
        bl=LBITS(b); bh=HBITS(b); \
@@ -487,7 +522,7 @@
 
 #define sqr_add_c2(a,i,j,c0,c1,c2) \
        mul_add_c2((a)[i],(a)[j],c0,c1,c2)
-#endif
+#endif /* !BN_LLONG */
 
 void bn_mul_comba8(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b)
        {
@@ -762,7 +797,7 @@
        r[6]=c1;
        r[7]=c2;
        }
-#else
+#else /* !BN_MUL_COMBA */
 
 /* hmm... is it faster just to do a multiply? */
 #undef bn_sqr_comba4
@@ -799,4 +834,4 @@
        r[15]=bn_mul_add_words(&(r[7]),a,8,b[7]);
        }
 
-#endif /* BN_COMBA */
+#endif /* !BN_MUL_COMBA */
Index: opensa/openssl/crypto/bn/bn_div.c
diff -u opensa/openssl/crypto/bn/bn_div.c:1.1 opensa/openssl/crypto/bn/bn_div.c:1.2
--- opensa/openssl/crypto/bn/bn_div.c:1.1       Tue Jan 25 23:33:10 2000
+++ opensa/openssl/crypto/bn/bn_div.c   Thu Mar  2 21:11:51 2000
@@ -63,9 +63,11 @@
 
 /* The old slow way */
 #if 0
-int BN_div(BIGNUM *dv, BIGNUM *rem, BIGNUM *m, BIGNUM *d, BN_CTX *ctx)
+int BN_div(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m, const BIGNUM *d,
+          BN_CTX *ctx)
        {
        int i,nm,nd;
+       int ret = 0;
        BIGNUM *D;
 
        bn_check_top(m);
@@ -84,14 +86,17 @@
                return(1);
                }
 
-       D= &(ctx->bn[ctx->tos]);
-       if (dv == NULL) dv= &(ctx->bn[ctx->tos+1]);
-       if (rem == NULL) rem= &(ctx->bn[ctx->tos+2]);
+       BN_CTX_start(ctx);
+       D = BN_CTX_get(ctx);
+       if (dv == NULL) dv = BN_CTX_get(ctx);
+       if (rem == NULL) rem = BN_CTX_get(ctx);
+       if (D == NULL || dv == NULL || rem == NULL)
+               goto end;
 
        nd=BN_num_bits(d);
        nm=BN_num_bits(m);
-       if (BN_copy(D,d) == NULL) return(0);
-       if (BN_copy(rem,m) == NULL) return(0);
+       if (BN_copy(D,d) == NULL) goto end;
+       if (BN_copy(rem,m) == NULL) goto end;
 
        /* The next 2 are needed so we can do a dv->d[0]|=1 later
         * since BN_lshift1 will only work once there is a value :-) */
@@ -99,25 +104,54 @@
        bn_wexpand(dv,1);
        dv->top=1;
 
-       if (!BN_lshift(D,D,nm-nd)) return(0);
+       if (!BN_lshift(D,D,nm-nd)) goto end;
        for (i=nm-nd; i>=0; i--)
                {
-               if (!BN_lshift1(dv,dv)) return(0);
+               if (!BN_lshift1(dv,dv)) goto end;
                if (BN_ucmp(rem,D) >= 0)
                        {
                        dv->d[0]|=1;
-                       if (!BN_usub(rem,rem,D)) return(0);
+                       if (!BN_usub(rem,rem,D)) goto end;
                        }
 /* CAN IMPROVE (and have now :=) */
-               if (!BN_rshift1(D,D)) return(0);
+               if (!BN_rshift1(D,D)) goto end;
                }
        rem->neg=BN_is_zero(rem)?0:m->neg;
        dv->neg=m->neg^d->neg;
-       return(1);
+       ret = 1;
+ end:
+       BN_CTX_end(ctx);
+       return(ret);
        }
 
 #else
 
+#if !defined(NO_ASM) && !defined(NO_INLINE_ASM) && !defined(PEDANTIC) && 
+!defined(BN_DIV3W)
+# if defined(__GNUC__) && __GNUC__>=2
+#  if defined(__i386)
+   /*
+    * There were two reasons for implementing this template:
+    * - GNU C generates a call to a function (__udivdi3 to be exact)
+    *   in reply to ((((BN_ULLONG)n0)<<BN_BITS2)|n1)/d0 (I fail to
+    *   understand why...);
+    * - divl doesn't only calculate quotient, but also leaves
+    *   remainder in %edx which we can definitely use here:-)
+    *
+    *                                  <[EMAIL PROTECTED]>
+    */
+#  define bn_div_words(n0,n1,d0)               \
+       ({  asm volatile (                      \
+               "divl   %4"                     \
+               : "=a"(q), "=d"(rem)            \
+               : "a"(n1), "d"(n0), "g"(d0)     \
+               : "cc");                        \
+           q;                                  \
+       })
+#  define REMAINDER_IS_ALREADY_CALCULATED
+#  endif /* __<cpu> */
+# endif /* __GNUC__ */
+#endif /* NO_ASM */
+
 int BN_div(BIGNUM *dv, BIGNUM *rm, const BIGNUM *num, const BIGNUM *divisor,
           BN_CTX *ctx)
        {
@@ -144,13 +178,15 @@
                return(1);
                }
 
-       tmp= &(ctx->bn[ctx->tos]);
+       BN_CTX_start(ctx);
+       tmp=BN_CTX_get(ctx);
        tmp->neg=0;
-       snum= &(ctx->bn[ctx->tos+1]);
-       sdiv= &(ctx->bn[ctx->tos+2]);
+       snum=BN_CTX_get(ctx);
+       sdiv=BN_CTX_get(ctx);
        if (dv == NULL)
-               res= &(ctx->bn[ctx->tos+3]);
+               res=BN_CTX_get(ctx);
        else    res=dv;
+       if (res == NULL) goto err;
 
        /* First we normalise the numbers */
        norm_shift=BN_BITS2-((BN_num_bits(divisor))%BN_BITS2);
@@ -202,97 +238,76 @@
                {
                BN_ULONG q,l0;
 #ifdef BN_DIV3W
-               q=bn_div_3_words(wnump,d0,d1);
+               q=bn_div_3_words(wnump,d1,d0);
 #else
-
-#if !defined(NO_ASM) && !defined(PEDANTIC)
-# if defined(__GNUC__) && __GNUC__>=2
-#  if defined(__i386)
-   /*
-    * There were two reasons for implementing this template:
-    * - GNU C generates a call to a function (__udivdi3 to be exact)
-    *   in reply to ((((BN_ULLONG)n0)<<BN_BITS2)|n1)/d0 (I fail to
-    *   understand why...);
-    * - divl doesn't only calculate quotient, but also leaves
-    *   remainder in %edx which we can definitely use here:-)
-    *
-    *                                  <[EMAIL PROTECTED]>
-    */
-#  define bn_div_words(n0,n1,d0)               \
-       ({  asm volatile (                      \
-               "divl   %4"                     \
-               : "=a"(q), "=d"(rem)            \
-               : "a"(n1), "d"(n0), "g"(d0)     \
-               : "cc");                        \
-           q;                                  \
-       })
-#  define REMINDER_IS_ALREADY_CALCULATED
-#  endif /* __<cpu> */
-# endif /* __GNUC__ */
-#endif /* NO_ASM */
                BN_ULONG n0,n1,rem=0;
 
                n0=wnump[0];
                n1=wnump[-1];
                if (n0 == d0)
                        q=BN_MASK2;
-               else
+               else                    /* n0 < d0 */
+                       {
+#ifdef BN_LLONG
+                       BN_ULLONG t2;
+
 #if defined(BN_LLONG) && defined(BN_DIV2W) && !defined(bn_div_words)
-                       q=((((BN_ULLONG)n0)<<BN_BITS2)|n1)/d0;
+                       q=(BN_ULONG)(((((BN_ULLONG)n0)<<BN_BITS2)|n1)/d0);
 #else
                        q=bn_div_words(n0,n1,d0);
 #endif
-               {
-#ifdef BN_LLONG
-               BN_ULLONG t2;
 
-#ifndef REMINDER_IS_ALREADY_CALCULATED
-               /*
-                * rem doesn't have to be BN_ULLONG. The least we
-                * know it's less that d0, isn't it?
-                */
-               rem=(n1-q*d0)&BN_MASK2;
+#ifndef REMAINDER_IS_ALREADY_CALCULATED
+                       /*
+                        * rem doesn't have to be BN_ULLONG. The least we
+                        * know it's less that d0, isn't it?
+                        */
+                       rem=(n1-q*d0)&BN_MASK2;
 #endif
-               t2=(BN_ULLONG)d1*q;
+                       t2=(BN_ULLONG)d1*q;
 
-               for (;;)
-                       {
-                        if (t2 <= ((((BN_ULLONG)rem)<<BN_BITS2)|wnump[-2]))
-                               break;
-                       q--;
-                       rem += d0;
-                       if (rem < d0) break; /* don't let rem overflow */
-                       t2 -= d1;
-                       }
-#else
-               BN_ULONG t2l,t2h,ql,qh;
+                       for (;;)
+                               {
+                               if (t2 <= ((((BN_ULLONG)rem)<<BN_BITS2)|wnump[-2]))
+                                       break;
+                               q--;
+                               rem += d0;
+                               if (rem < d0) break; /* don't let rem overflow */
+                               t2 -= d1;
+                               }
+#else /* !BN_LLONG */
+                       BN_ULONG t2l,t2h,ql,qh;
 
-#ifndef REMINDER_IS_ALREADY_CALCULATED
-               /*
-                * It's more than enough with the only multiplication.
-                * See the comment above in BN_LLONG section...
-                */
-               rem=(n1-q*d0)&BN_MASK2;
+                       q=bn_div_words(n0,n1,d0);
+#ifndef REMAINDER_IS_ALREADY_CALCULATED
+                       rem=(n1-q*d0)&BN_MASK2;
 #endif
-               t2l=LBITS(d1); t2h=HBITS(d1);
-               ql =LBITS(q);  qh =HBITS(q);
-               mul64(t2l,t2h,ql,qh); /* t2=(BN_ULLONG)d1*q; */
 
-               for (;;)
-                       {
-                       if ((t2h < rem) ||
-                               ((t2h == rem) && (t2l <= wnump[-2])))
-                               break;
-                       q--;
-                       rem += d0;
-                       if (rem < d0) break; /* don't let rem overflow */
-                       if (t2l < d1) t2h--; t2l -= d1;
-                       }
+#ifdef BN_UMULT_HIGH
+                       t2l = d1 * q;
+                       t2h = BN_UMULT_HIGH(d1,q);
+#else
+                       t2l=LBITS(d1); t2h=HBITS(d1);
+                       ql =LBITS(q);  qh =HBITS(q);
+                       mul64(t2l,t2h,ql,qh); /* t2=(BN_ULLONG)d1*q; */
 #endif
-               }
+
+                       for (;;)
+                               {
+                               if ((t2h < rem) ||
+                                       ((t2h == rem) && (t2l <= wnump[-2])))
+                                       break;
+                               q--;
+                               rem += d0;
+                               if (rem < d0) break; /* don't let rem overflow */
+                               if (t2l < d1) t2h--; t2l -= d1;
+                               }
+#endif /* !BN_LLONG */
+                       }
 #endif /* !BN_DIV3W */
-               wnum.d--; wnum.top++;
+
                l0=bn_mul_words(tmp->d,sdiv->d,div_n,q);
+               wnum.d--; wnum.top++;
                tmp->d[div_n]=l0;
                for (j=div_n+1; j>0; j--)
                        if (tmp->d[j-1]) break;
@@ -318,8 +333,10 @@
                BN_rshift(rm,snum,norm_shift);
                rm->neg=num->neg;
                }
+       BN_CTX_end(ctx);
        return(1);
 err:
+       BN_CTX_end(ctx);
        return(0);
        }
 
@@ -335,22 +352,27 @@
        if (BN_ucmp(m,d) < 0)
                return((BN_copy(rem,m) == NULL)?0:1);
 
-       dv= &(ctx->bn[ctx->tos]);
+       BN_CTX_start(ctx);
+       dv=BN_CTX_get(ctx);
 
-       if (!BN_copy(rem,m)) return(0);
+       if (!BN_copy(rem,m)) goto err;
 
        nm=BN_num_bits(rem);
        nd=BN_num_bits(d);
-       if (!BN_lshift(dv,d,nm-nd)) return(0);
+       if (!BN_lshift(dv,d,nm-nd)) goto err;
        for (i=nm-nd; i>=0; i--)
                {
                if (BN_cmp(rem,dv) >= 0)
                        {
-                       if (!BN_sub(rem,rem,dv)) return(0);
+                       if (!BN_sub(rem,rem,dv)) goto err;
                        }
-               if (!BN_rshift1(dv,dv)) return(0);
+               if (!BN_rshift1(dv,dv)) goto err;
                }
+       BN_CTX_end(ctx);
        return(1);
+ err:
+       BN_CTX_end(ctx);
+       return(0);
 #else
        return(BN_div(NULL,rem,m,d,ctx));
 #endif
Index: opensa/openssl/crypto/bn/bn_err.c
diff -u opensa/openssl/crypto/bn/bn_err.c:1.1 opensa/openssl/crypto/bn/bn_err.c:1.2
--- opensa/openssl/crypto/bn/bn_err.c:1.1       Tue Jan 25 23:33:10 2000
+++ opensa/openssl/crypto/bn/bn_err.c   Thu Mar  2 21:11:51 2000
@@ -71,6 +71,7 @@
 {ERR_PACK(0,BN_F_BN_BLINDING_UPDATE,0),        "BN_BLINDING_update"},
 {ERR_PACK(0,BN_F_BN_BN2DEC,0), "BN_bn2dec"},
 {ERR_PACK(0,BN_F_BN_BN2HEX,0), "BN_bn2hex"},
+{ERR_PACK(0,BN_F_BN_CTX_GET,0),        "BN_CTX_get"},
 {ERR_PACK(0,BN_F_BN_CTX_NEW,0),        "BN_CTX_new"},
 {ERR_PACK(0,BN_F_BN_DIV,0),    "BN_div"},
 {ERR_PACK(0,BN_F_BN_EXPAND2,0),        "bn_expand2"},
@@ -95,6 +96,7 @@
 {BN_R_INVALID_LENGTH                     ,"invalid length"},
 {BN_R_NOT_INITIALIZED                    ,"not initialized"},
 {BN_R_NO_INVERSE                         ,"no inverse"},
+{BN_R_TOO_MANY_TEMPORARY_VARIABLES       ,"too many temporary variables"},
 {0,NULL}
        };
 
Index: opensa/openssl/crypto/bn/bn_exp.c
diff -u opensa/openssl/crypto/bn/bn_exp.c:1.1 opensa/openssl/crypto/bn/bn_exp.c:1.2
--- opensa/openssl/crypto/bn/bn_exp.c:1.1       Tue Jan 25 23:33:10 2000
+++ opensa/openssl/crypto/bn/bn_exp.c   Thu Mar  2 21:11:51 2000
@@ -59,6 +59,12 @@
 #include <stdio.h>
 #include "cryptlib.h"
 #include "bn_lcl.h"
+#ifdef ATALLA
+# include <alloca.h>
+# include <atasi.h>
+# include <assert.h>
+# include <dlfcn.h>
+#endif
 
 #define TABLE_SIZE     16
 
@@ -72,7 +78,8 @@
        bn_check_top(b);
        bn_check_top(m);
 
-       t= &(ctx->bn[ctx->tos++]);
+       BN_CTX_start(ctx);
+       if ((t = BN_CTX_get(ctx)) == NULL) goto err;
        if (a == b)
                { if (!BN_sqr(t,a,ctx)) goto err; }
        else
@@ -80,7 +87,7 @@
        if (!BN_mod(ret,t,m,ctx)) goto err;
        r=1;
 err:
-       ctx->tos--;
+       BN_CTX_end(ctx);
        return(r);
        }
 
@@ -91,8 +98,10 @@
        int i,bits,ret=0;
        BIGNUM *v,*tmp;
 
-       v= &(ctx->bn[ctx->tos++]);
-       tmp= &(ctx->bn[ctx->tos++]);
+       BN_CTX_start(ctx);
+       v = BN_CTX_get(ctx);
+       tmp = BN_CTX_get(ctx);
+       if (v == NULL || tmp == NULL) goto err;
 
        if (BN_copy(v,a) == NULL) goto err;
        bits=BN_num_bits(p);
@@ -113,7 +122,7 @@
                }
        ret=1;
 err:
-       ctx->tos-=2;
+       BN_CTX_end(ctx);
        return(ret);
        }
 
@@ -122,15 +131,15 @@
 /* this one works - simple but works */
 int BN_exp(BIGNUM *r, BIGNUM *a, BIGNUM *p, BN_CTX *ctx)
        {
-       int i,bits,ret=0,tos;
+       int i,bits,ret=0;
        BIGNUM *v,*rr;
 
-       tos=ctx->tos;
-       v= &(ctx->bn[ctx->tos++]);
+       BN_CTX_start(ctx);
        if ((r == a) || (r == p))
-               rr= &(ctx->bn[ctx->tos++]);
+               rr = BN_CTX_get(ctx);
        else
-               rr=r;
+               rr = r;
+       if ((v = BN_CTX_get(ctx)) == NULL) goto err;
 
        if (BN_copy(v,a) == NULL) goto err;
        bits=BN_num_bits(p);
@@ -149,11 +158,178 @@
                }
        ret=1;
 err:
-       ctx->tos=tos;
        if (r != rr) BN_copy(r,rr);
+       BN_CTX_end(ctx);
        return(ret);
        }
 
+#ifdef ATALLA
+
+/*
+ * This routine will dynamically check for the existance of an Atalla AXL-200
+ * SSL accelerator module.  If one is found, the variable
+ * asi_accelerator_present is set to 1 and the function pointers
+ * ptr_ASI_xxxxxx above will be initialized to corresponding ASI API calls.
+ */
+typedef int tfnASI_GetPerformanceStatistics(int reset_flag,
+                                           unsigned int *ret_buf);
+typedef int tfnASI_GetHardwareConfig(long card_num, unsigned int *ret_buf);
+typedef int tfnASI_RSAPrivateKeyOpFn(RSAPrivateKey * rsaKey,
+                                    unsigned char *output,
+                                    unsigned char *input,
+                                    unsigned int modulus_len);
+
+static tfnASI_GetHardwareConfig *ptr_ASI_GetHardwareConfig;
+static tfnASI_RSAPrivateKeyOpFn *ptr_ASI_RSAPrivateKeyOpFn;
+static tfnASI_GetPerformanceStatistics *ptr_ASI_GetPerformanceStatistics;
+static int asi_accelerator_present;
+static int tried_atalla;
+
+void atalla_initialize_accelerator_handle(void)
+       {
+       void *dl_handle;
+       int status;
+       unsigned int config_buf[1024]; 
+       static int tested;
+
+       if(tested)
+               return;
+
+       tested=1;
+
+       bzero((void *)config_buf, 1024);
+
+       /*
+        * Check to see if the library is present on the system
+        */
+       dl_handle = dlopen("atasi.so", RTLD_NOW);
+       if (dl_handle == (void *) NULL)
+               {
+/*             printf("atasi.so library is not present on the system\n");
+               printf("No HW acceleration available\n");*/
+               return;
+               }
+
+       /*
+        * The library is present.  Now we'll check to insure that the
+        * LDM is up and running. First we'll get the address of the
+        * function in the atasi library that we need to see if the
+        * LDM is operating.
+        */
+
+       ptr_ASI_GetHardwareConfig =
+         (tfnASI_GetHardwareConfig *)dlsym(dl_handle,"ASI_GetHardwareConfig");
+
+       if (ptr_ASI_GetHardwareConfig)
+               {
+               /*
+                * We found the call, now we'll get our config
+                * status.  If we get a non 0 result, the LDM is not
+                * running and we cannot use the Atalla ASI *
+                * library.
+                */
+               status = (*ptr_ASI_GetHardwareConfig)(0L, config_buf);
+               if (status != 0)
+                       {
+                       printf("atasi.so library is present but not initialized\n");
+                       printf("No HW acceleration available\n");
+                       return;
+                       }    
+               }
+       else
+               {
+/*             printf("We found the library, but not the function. Very 
+Strange!\n");*/
+               return ;
+               }
+
+       /* 
+        * It looks like we have acceleration capabilities.  Load up the
+        * pointers to our ASI API calls.
+        */
+       ptr_ASI_RSAPrivateKeyOpFn=
+         (tfnASI_RSAPrivateKeyOpFn *)dlsym(dl_handle, "ASI_RSAPrivateKeyOpFn");
+       if (ptr_ASI_RSAPrivateKeyOpFn == NULL)
+               {
+/*             printf("We found the library, but no RSA function. Very Strange!\n");*/
+               return;
+               }
+
+       ptr_ASI_GetPerformanceStatistics =
+         (tfnASI_GetPerformanceStatistics *)dlsym(dl_handle, 
+"ASI_GetPerformanceStatistics");
+       if (ptr_ASI_GetPerformanceStatistics == NULL)
+               {
+/*             printf("We found the library, but no stat function. Very 
+Strange!\n");*/
+               return;
+             }
+
+       /*
+        * Indicate that acceleration is available
+        */
+       asi_accelerator_present = 1;
+
+/*     printf("This system has acceleration!\n");*/
+
+       return;
+       }
+
+/* make sure this only gets called once when bn_mod_exp calls bn_mod_exp_mont */
+int BN_mod_exp_atalla(BIGNUM *r, BIGNUM *a, const BIGNUM *p, const BIGNUM *m)
+       {
+       unsigned char *abin;
+       unsigned char *pbin;
+       unsigned char *mbin;
+       unsigned char *rbin;
+       int an,pn,mn,ret;
+       RSAPrivateKey keydata;
+
+       atalla_initialize_accelerator_handle();
+       if(!asi_accelerator_present)
+               return 0;
+
+
+/* We should be able to run without size testing */
+# define ASIZE 128
+       an=BN_num_bytes(a);
+       pn=BN_num_bytes(p);
+       mn=BN_num_bytes(m);
+
+       if(an <= ASIZE && pn <= ASIZE && mn <= ASIZE)
+           {
+           int size=mn;
+
+           assert(an <= mn);
+           abin=alloca(size);
+           memset(abin,'\0',mn);
+           BN_bn2bin(a,abin+size-an);
+
+           pbin=alloca(pn);
+           BN_bn2bin(p,pbin);
+
+           mbin=alloca(size);
+           memset(mbin,'\0',mn);
+           BN_bn2bin(m,mbin+size-mn);
+
+           rbin=alloca(size);
+
+           memset(&keydata,'\0',sizeof keydata);
+           keydata.privateExponent.data=pbin;
+           keydata.privateExponent.len=pn;
+           keydata.modulus.data=mbin;
+           keydata.modulus.len=size;
+
+           ret=(*ptr_ASI_RSAPrivateKeyOpFn)(&keydata,rbin,abin,keydata.modulus.len);
+/*fprintf(stderr,"!%s\n",BN_bn2hex(a));*/
+           if(!ret)
+               {
+               BN_bin2bn(rbin,keydata.modulus.len,r);
+/*fprintf(stderr,"?%s\n",BN_bn2hex(r));*/
+               return 1;
+               }
+           }
+       return 0;
+        }
+#endif /* def ATALLA */
+
 int BN_mod_exp(BIGNUM *r, BIGNUM *a, const BIGNUM *p, const BIGNUM *m,
               BN_CTX *ctx)
        {
@@ -163,6 +339,13 @@
        bn_check_top(p);
        bn_check_top(m);
 
+#ifdef ATALLA
+       if(BN_mod_exp_atalla(r,a,p,m))
+           return 1;
+/* If it fails, try the other methods (but don't try atalla again) */
+       tried_atalla=1;
+#endif
+
 #ifdef MONT_MUL_MOD
        /* I have finally been able to take out this pre-condition of
         * the top bit being set.  It was caused by an error in BN_div
@@ -180,6 +363,10 @@
                { ret=BN_mod_exp_simple(r,a,p,m,ctx); }
 #endif
 
+#ifdef ATALLA
+       tried_atalla=0;
+#endif
+
        return(ret);
        }
 
@@ -193,7 +380,6 @@
        BIGNUM val[TABLE_SIZE];
        BN_RECP_CTX recp;
 
-       aa= &(ctx->bn[ctx->tos++]);
        bits=BN_num_bits(p);
 
        if (bits == 0)
@@ -201,6 +387,10 @@
                BN_one(r);
                return(1);
                }
+
+       BN_CTX_start(ctx);
+       if ((aa = BN_CTX_get(ctx)) == NULL) goto err;
+
        BN_RECP_CTX_init(&recp);
        if (BN_RECP_CTX_set(&recp,m,ctx) <= 0) goto err;
 
@@ -289,7 +479,7 @@
                }
        ret=1;
 err:
-       ctx->tos--;
+       BN_CTX_end(ctx);
        for (i=0; i<ts; i++)
                BN_clear_free(&(val[i]));
        BN_RECP_CTX_free(&recp);
@@ -312,19 +502,27 @@
        bn_check_top(p);
        bn_check_top(m);
 
+#ifdef ATALLA
+       if(!tried_atalla && BN_mod_exp_atalla(rr,a,p,m))
+           return 1;
+/* If it fails, try the other methods */
+#endif
+
        if (!(m->d[0] & 1))
                {
                BNerr(BN_F_BN_MOD_EXP_MONT,BN_R_CALLED_WITH_EVEN_MODULUS);
                return(0);
                }
-       d= &(ctx->bn[ctx->tos++]);
-       r= &(ctx->bn[ctx->tos++]);
        bits=BN_num_bits(p);
        if (bits == 0)
                {
-               BN_one(r);
+               BN_one(rr);
                return(1);
                }
+       BN_CTX_start(ctx);
+       d = BN_CTX_get(ctx);
+       r = BN_CTX_get(ctx);
+       if (d == NULL || r == NULL) goto err;
 
        /* If this is not done, things will break in the montgomery
         * part */
@@ -432,7 +630,7 @@
        ret=1;
 err:
        if ((in_mont == NULL) && (mont != NULL)) BN_MONT_CTX_free(mont);
-       ctx->tos-=2;
+       BN_CTX_end(ctx);
        for (i=0; i<ts; i++)
                BN_clear_free(&(val[i]));
        return(ret);
@@ -448,7 +646,6 @@
        BIGNUM *d;
        BIGNUM val[TABLE_SIZE];
 
-       d= &(ctx->bn[ctx->tos++]);
        bits=BN_num_bits(p);
 
        if (bits == 0)
@@ -457,6 +654,9 @@
                return(1);
                }
 
+       BN_CTX_start(ctx);
+       if ((d = BN_CTX_get(ctx)) == NULL) goto err;
+
        BN_init(&(val[0]));
        ts=1;
        if (!BN_mod(&(val[0]),a,m,ctx)) goto err;               /* 1 */
@@ -541,7 +741,7 @@
                }
        ret=1;
 err:
-       ctx->tos--;
+       BN_CTX_end(ctx);
        for (i=0; i<ts; i++)
                BN_clear_free(&(val[i]));
        return(ret);
Index: opensa/openssl/crypto/bn/bn_exp2.c
diff -u opensa/openssl/crypto/bn/bn_exp2.c:1.1 opensa/openssl/crypto/bn/bn_exp2.c:1.2
--- opensa/openssl/crypto/bn/bn_exp2.c:1.1      Tue Jan 25 23:33:10 2000
+++ opensa/openssl/crypto/bn/bn_exp2.c  Thu Mar  2 21:11:51 2000
@@ -9,7 +9,7 @@
  * bits=1  75.4%  79.4%
  * bits=2  61.2%  62.4%
  * bits=3  61.3%  59.3%
- * The lack of speed improvment is also a function of the pre-calculation
+ * The lack of speed improvement is also a function of the pre-calculation
  * which could be removed.
  */
 #define EXP2_TABLE_BITS        2 /* 1  2  3  4  5  */
@@ -35,15 +35,19 @@
                BNerr(BN_F_BN_MOD_EXP_MONT,BN_R_CALLED_WITH_EVEN_MODULUS);
                return(0);
                }
-       d= &(ctx->bn[ctx->tos++]);
-       r= &(ctx->bn[ctx->tos++]);
        bits1=BN_num_bits(p1);
        bits2=BN_num_bits(p2);
        if ((bits1 == 0) && (bits2 == 0))
                {
-               BN_one(r);
+               BN_one(rr);
                return(1);
                }
+
+       BN_CTX_start(ctx);
+       d = BN_CTX_get(ctx);
+       r = BN_CTX_get(ctx);
+       if (d == NULL || r == NULL) goto err;
+
        bits=(bits1 > bits2)?bits1:bits2;
 
        /* If this is not done, things will break in the montgomery
@@ -183,7 +187,7 @@
        ret=1;
 err:
        if ((in_mont == NULL) && (mont != NULL)) BN_MONT_CTX_free(mont);
-       ctx->tos-=2;
+       BN_CTX_end(ctx);
        for (i=0; i<ts; i++)
                {
                for (j=0; j<ts; j++)
Index: opensa/openssl/crypto/bn/bn_gcd.c
diff -u opensa/openssl/crypto/bn/bn_gcd.c:1.1 opensa/openssl/crypto/bn/bn_gcd.c:1.2
--- opensa/openssl/crypto/bn/bn_gcd.c:1.1       Tue Jan 25 23:33:10 2000
+++ opensa/openssl/crypto/bn/bn_gcd.c   Thu Mar  2 21:11:51 2000
@@ -61,6 +61,7 @@
 #include "bn_lcl.h"
 
 static BIGNUM *euclid(BIGNUM *a, BIGNUM *b);
+
 int BN_gcd(BIGNUM *r, BIGNUM *in_a, BIGNUM *in_b, BN_CTX *ctx)
        {
        BIGNUM *a,*b,*t;
@@ -69,8 +70,10 @@
        bn_check_top(in_a);
        bn_check_top(in_b);
 
-       a= &(ctx->bn[ctx->tos]);
-       b= &(ctx->bn[ctx->tos+1]);
+       BN_CTX_start(ctx);
+       a = BN_CTX_get(ctx);
+       b = BN_CTX_get(ctx);
+       if (a == NULL || b == NULL) goto err;
 
        if (BN_copy(a,in_a) == NULL) goto err;
        if (BN_copy(b,in_b) == NULL) goto err;
@@ -82,6 +85,7 @@
        if (BN_copy(r,t) == NULL) goto err;
        ret=1;
 err:
+       BN_CTX_end(ctx);
        return(ret);
        }
 
@@ -142,20 +146,22 @@
 /* solves ax == 1 (mod n) */
 BIGNUM *BN_mod_inverse(BIGNUM *in, BIGNUM *a, const BIGNUM *n, BN_CTX *ctx)
        {
-       BIGNUM *A,*B,*X,*Y,*M,*D,*R;
+       BIGNUM *A,*B,*X,*Y,*M,*D,*R=NULL;
        BIGNUM *T,*ret=NULL;
        int sign;
 
        bn_check_top(a);
        bn_check_top(n);
+
+       BN_CTX_start(ctx);
+       A = BN_CTX_get(ctx);
+       B = BN_CTX_get(ctx);
+       X = BN_CTX_get(ctx);
+       D = BN_CTX_get(ctx);
+       M = BN_CTX_get(ctx);
+       Y = BN_CTX_get(ctx);
+       if (Y == NULL) goto err;
 
-       A= &(ctx->bn[ctx->tos]);
-       B= &(ctx->bn[ctx->tos+1]);
-       X= &(ctx->bn[ctx->tos+2]);
-       D= &(ctx->bn[ctx->tos+3]);
-       M= &(ctx->bn[ctx->tos+4]);
-       Y= &(ctx->bn[ctx->tos+5]);
-       ctx->tos+=6;
        if (in == NULL)
                R=BN_new();
        else
@@ -198,7 +204,7 @@
        ret=R;
 err:
        if ((ret == NULL) && (in == NULL)) BN_free(R);
-       ctx->tos-=6;
+       BN_CTX_end(ctx);
        return(ret);
        }
 
Index: opensa/openssl/crypto/bn/bn_lcl.h
diff -u opensa/openssl/crypto/bn/bn_lcl.h:1.1 opensa/openssl/crypto/bn/bn_lcl.h:1.2
--- opensa/openssl/crypto/bn/bn_lcl.h:1.1       Tue Jan 25 23:33:10 2000
+++ opensa/openssl/crypto/bn/bn_lcl.h   Thu Mar  2 21:11:51 2000
@@ -73,18 +73,53 @@
 #define BN_MUL_LOW_RECURSIVE_SIZE_NORMAL       (32) /* 32 */
 #define BN_MONT_CTX_SET_SIZE_WORD              (64) /* 32 */
 
-#if 0
-#ifndef BN_MUL_COMBA
-/* #define bn_mul_comba8(r,a,b)        bn_mul_normal(r,a,8,b,8) */
-/* #define bn_mul_comba4(r,a,b)        bn_mul_normal(r,a,4,b,4) */
-#endif
-
-#ifndef BN_SQR_COMBA
-/* This is probably faster than using the C code - I need to check */
-#define bn_sqr_comba8(r,a)     bn_mul_normal(r,a,8,a,8)
-#define bn_sqr_comba4(r,a)     bn_mul_normal(r,a,4,a,4)
-#endif
-#endif
+#if !defined(NO_ASM) && !defined(NO_INLINE_ASM) && !defined(PEDANTIC)
+/*
+ * BN_UMULT_HIGH section.
+ *
+ * No, I'm not trying to overwhelm you when stating that the
+ * product of N-bit numbers is 2*N bits wide:-) No, I don't expect
+ * you to be impressed when I say that if the compiler doesn't
+ * support 2*N integer type, then you have to replace every N*N
+ * multiplication with 4 (N/2)*(N/2) accompanied by some shifts
+ * and additions which unavoidably results in severe performance
+ * penalties. Of course provided that the hardware is capable of
+ * producing 2*N result... That's when you normally start
+ * considering assembler implementation. However! It should be
+ * pointed out that some CPUs (most notably Alpha, PowerPC and
+ * upcoming IA-64 family:-) provide *separate* instruction
+ * calculating the upper half of the product placing the result
+ * into a general purpose register. Now *if* the compiler supports
+ * inline assembler, then it's not impossible to implement the
+ * "bignum" routines (and have the compiler optimize 'em)
+ * exhibiting "native" performance in C. That's what BN_UMULT_HIGH
+ * macro is about:-)
+ *
+ *                                     <[EMAIL PROTECTED]>
+ */
+# if defined(__alpha) && (defined(SIXTY_FOUR_BIT_LONG) || defined(SIXTY_FOUR_BIT))
+#  if defined(__DECC)
+#   include <c_asm.h>
+#   define BN_UMULT_HIGH(a,b)  (BN_ULONG)asm("umulh %a0,%a1,%v0",(a),(b))
+#  elif defined(__GNUC__)
+#   define BN_UMULT_HIGH(a,b)  ({      \
+       register BN_ULONG ret;          \
+       asm ("umulh     %1,%2,%0"       \
+            : "=r"(ret)                \
+            : "r"(a), "r"(b));         \
+       ret;                    })
+#  endif       /* compiler */
+# elif defined(_ARCH_PPC) && defined(__64BIT__) && defined(SIXTY_FOUR_BIT_LONG)
+#  if defined(__GNUC__)
+#   define BN_UMULT_HIGH(a,b)  ({      \
+       register BN_ULONG ret;          \
+       asm ("mulhdu    %0,%1,%2"       \
+            : "=r"(ret)                \
+            : "r"(a), "r"(b));         \
+       ret;                    })
+#  endif       /* compiler */
+# endif                /* cpu */
+#endif         /* NO_ASM */
 
 /*************************************************************
  * Using the long long type
@@ -92,15 +127,12 @@
 #define Lw(t)    (((BN_ULONG)(t))&BN_MASK2)
 #define Hw(t)    (((BN_ULONG)((t)>>BN_BITS2))&BN_MASK2)
 
-/* These are used for internal error checking and are not normally used */
+/* This is used for internal error checking and is not normally used */
 #ifdef BN_DEBUG
-#define bn_check_top(a) \
-       { if (((a)->top < 0) || ((a)->top > (a)->max)) \
-               { char *nullp=NULL; *nullp='z'; } }
-#define bn_check_num(a) if ((a) < 0) { char *nullp=NULL; *nullp='z'; }
+# include <assert.h>
+# define bn_check_top(a) assert ((a)->top >= 0 && (a)->top <= (a)->max);
 #else
-#define bn_check_top(a)
-#define bn_check_num(a)
+# define bn_check_top(a)
 #endif
 
 /* This macro is to add extra stuff for development checking */
@@ -134,8 +166,6 @@
        bn_set_max(r); \
        }
 
-/* #define bn_expand(n,b) ((((b)/BN_BITS2) <= (n)->max)?(n):bn_expand2((n),(b))) */
-
 #ifdef BN_LLONG
 #define mul_add(r,a,w,c) { \
        BN_ULLONG t; \
@@ -151,6 +181,43 @@
        (c)= Hw(t); \
        }
 
+#define sqr(r0,r1,a) { \
+       BN_ULLONG t; \
+       t=(BN_ULLONG)(a)*(a); \
+       (r0)=Lw(t); \
+       (r1)=Hw(t); \
+       }
+
+#elif defined(BN_UMULT_HIGH)
+#define mul_add(r,a,w,c) {             \
+       BN_ULONG high,low,ret,tmp=(a);  \
+       ret =  (r);                     \
+       high=  BN_UMULT_HIGH(w,tmp);    \
+       ret += (c);                     \
+       low =  (w) * tmp;               \
+       (c) =  (ret<(c))?1:0;           \
+       (c) += high;                    \
+       ret += low;                     \
+       (c) += (ret<low)?1:0;           \
+       (r) =  ret;                     \
+       }
+
+#define mul(r,a,w,c)   {               \
+       BN_ULONG high,low,ret,ta=(a);   \
+       low =  (w) * ta;                \
+       high=  BN_UMULT_HIGH(w,ta);     \
+       ret =  low + (c);               \
+       (c) =  high;                    \
+       (c) += (ret<low)?1:0;           \
+       (r) =  ret;                     \
+       }
+
+#define sqr(r0,r1,a)   {               \
+       BN_ULONG tmp=(a);               \
+       (r0) = tmp * tmp;               \
+       (r1) = BN_UMULT_HIGH(tmp,tmp);  \
+       }
+
 #else
 /*************************************************************
  * No long long type
@@ -228,21 +295,7 @@
        (c)=h&BN_MASK2; \
        (r)=l&BN_MASK2; \
        }
-
-#endif
-
-OPENSSL_EXTERN int bn_limit_bits;
-OPENSSL_EXTERN int bn_limit_num;        /* (1<<bn_limit_bits) */
-/* Recursive 'low' limit */
-OPENSSL_EXTERN int bn_limit_bits_low;
-OPENSSL_EXTERN int bn_limit_num_low;    /* (1<<bn_limit_bits_low) */
-/* Do modified 'high' part calculation' */
-OPENSSL_EXTERN int bn_limit_bits_high;
-OPENSSL_EXTERN int bn_limit_num_high;   /* (1<<bn_limit_bits_high) */
-OPENSSL_EXTERN int bn_limit_bits_mont;
-OPENSSL_EXTERN int bn_limit_num_mont;   /* (1<<bn_limit_bits_mont) */
-
-BIGNUM *bn_expand2(BIGNUM *b, int bits);
+#endif /* !BN_LLONG */
 
 void bn_mul_normal(BN_ULONG *r,BN_ULONG *a,int na,BN_ULONG *b,int nb);
 void bn_mul_comba8(BN_ULONG *r,BN_ULONG *a,BN_ULONG *b);
Index: opensa/openssl/crypto/bn/bn_lib.c
diff -u opensa/openssl/crypto/bn/bn_lib.c:1.1 opensa/openssl/crypto/bn/bn_lib.c:1.2
--- opensa/openssl/crypto/bn/bn_lib.c:1.1       Tue Jan 25 23:33:10 2000
+++ opensa/openssl/crypto/bn/bn_lib.c   Thu Mar  2 21:11:51 2000
@@ -71,14 +71,14 @@
  * 7 - 128 == 4096
  * 8 - 256 == 8192
  */
-OPENSSL_GLOBAL int bn_limit_bits=0;
-OPENSSL_GLOBAL int bn_limit_num=8;        /* (1<<bn_limit_bits) */
-OPENSSL_GLOBAL int bn_limit_bits_low=0;
-OPENSSL_GLOBAL int bn_limit_num_low=8;    /* (1<<bn_limit_bits_low) */
-OPENSSL_GLOBAL int bn_limit_bits_high=0;
-OPENSSL_GLOBAL int bn_limit_num_high=8;   /* (1<<bn_limit_bits_high) */
-OPENSSL_GLOBAL int bn_limit_bits_mont=0;
-OPENSSL_GLOBAL int bn_limit_num_mont=8;   /* (1<<bn_limit_bits_mont) */
+static int bn_limit_bits=0;
+static int bn_limit_num=8;        /* (1<<bn_limit_bits) */
+static int bn_limit_bits_low=0;
+static int bn_limit_num_low=8;    /* (1<<bn_limit_bits_low) */
+static int bn_limit_bits_high=0;
+static int bn_limit_num_high=8;   /* (1<<bn_limit_bits_high) */
+static int bn_limit_bits_mont=0;
+static int bn_limit_num_mont=8;   /* (1<<bn_limit_bits_mont) */
 
 void BN_set_params(int mult, int high, int low, int mont)
        {
@@ -304,43 +304,11 @@
        return(ret);
        }
 
+/* This is an internal function that should not be used in applications.
+ * It ensures that 'b' has enough room for a 'words' word number number.
+ * It is mostly used by the various BIGNUM routines. If there is an error,
+ * NULL is returned. If not, 'b' is returned. */
 
-BN_CTX *BN_CTX_new(void)
-       {
-       BN_CTX *ret;
-
-       ret=(BN_CTX *)Malloc(sizeof(BN_CTX));
-       if (ret == NULL)
-               {
-               BNerr(BN_F_BN_CTX_NEW,ERR_R_MALLOC_FAILURE);
-               return(NULL);
-               }
-
-       BN_CTX_init(ret);
-       ret->flags=BN_FLG_MALLOCED;
-       return(ret);
-       }
-
-void BN_CTX_init(BN_CTX *ctx)
-       {
-       memset(ctx,0,sizeof(BN_CTX));
-       ctx->tos=0;
-       ctx->flags=0;
-       }
-
-void BN_CTX_free(BN_CTX *c)
-       {
-       int i;
-
-       if(c == NULL)
-           return;
-
-       for (i=0; i<BN_CTX_NUM; i++)
-               BN_clear_free(&(c->bn[i]));
-       if (c->flags & BN_FLG_MALLOCED)
-               Free(c);
-       }
-
 BIGNUM *bn_expand2(BIGNUM *b, int words)
        {
        BN_ULONG *A,*a;
@@ -389,7 +357,7 @@
  * if A and B happen to share same cache line such code is going to
  * cause severe cache trashing. Both factors have severe impact on
  * performance of modern CPUs and this is the reason why this
- * particulare piece of code is #ifdefed away and replaced by more
+ * particular piece of code is #ifdefed away and replaced by more
  * "friendly" version found in #else section below. This comment
  * also applies to BN_copy function.
  *
@@ -420,7 +388,7 @@
                                A[0]=B[0];
                        case 0:
                                /* I need the 'case 0' entry for utrix cc.
-                                * If the optimiser is turned on, it does the
+                                * If the optimizer is turned on, it does the
                                 * switch table by doing
                                 * a=top&7
                                 * a--;
Index: opensa/openssl/crypto/bn/bn_mont.c
diff -u opensa/openssl/crypto/bn/bn_mont.c:1.1 opensa/openssl/crypto/bn/bn_mont.c:1.2
--- opensa/openssl/crypto/bn/bn_mont.c:1.1      Tue Jan 25 23:33:10 2000
+++ opensa/openssl/crypto/bn/bn_mont.c  Thu Mar  2 21:11:51 2000
@@ -57,25 +57,27 @@
  */
 
 /*
- * Details about Montgomery multiplication algorithms can be found at:
- * http://www.ece.orst.edu/ISL/Publications.html
- * http://www.ece.orst.edu/ISL/Koc/papers/j37acmon.pdf
+ * Details about Montgomery multiplication algorithms can be found at
+ * http://security.ece.orst.edu/publications.html, e.g.
+ * http://security.ece.orst.edu/koc/papers/j37acmon.pdf and
+ * sections 3.8 and 4.2 in http://security.ece.orst.edu/koc/papers/r01rsasw.pdf
  */
 
 #include <stdio.h>
 #include "cryptlib.h"
 #include "bn_lcl.h"
 
-#define MONT_WORD
+#define MONT_WORD /* use the faster word-based algorithm */
 
 int BN_mod_mul_montgomery(BIGNUM *r, BIGNUM *a, BIGNUM *b,
                          BN_MONT_CTX *mont, BN_CTX *ctx)
        {
        BIGNUM *tmp,*tmp2;
 
-        tmp= &(ctx->bn[ctx->tos]);
-        tmp2= &(ctx->bn[ctx->tos]);
-       ctx->tos+=2;
+       BN_CTX_start(ctx);
+       tmp = BN_CTX_get(ctx);
+       tmp2 = BN_CTX_get(ctx);
+       if (tmp == NULL || tmp2 == NULL) goto err;
 
        bn_check_top(tmp);
        bn_check_top(tmp2);
@@ -99,7 +101,7 @@
                }
        /* reduce from aRR to aR */
        if (!BN_from_montgomery(r,tmp,mont,ctx)) goto err;
-       ctx->tos-=2;
+       BN_CTX_end(ctx);
        return(1);
 err:
        return(0);
@@ -108,160 +110,123 @@
 int BN_from_montgomery(BIGNUM *ret, BIGNUM *a, BN_MONT_CTX *mont,
             BN_CTX *ctx)
        {
-#ifdef BN_RECURSION_MONT
-       if (mont->use_word)
-#endif
-               {
-               BIGNUM *n,*r;
-               BN_ULONG *ap,*np,*rp,n0,v,*nrp;
-               int al,nl,max,i,x,ri;
-               int retn=0;
-
-               r= &(ctx->bn[ctx->tos]);
-
-               if (!BN_copy(r,a)) goto err1;
-               n= &(mont->N);
+       int retn=0;
 
-               ap=a->d;
-               /* mont->ri is the size of mont->N in bits/words */
-               al=ri=mont->ri/BN_BITS2;
+#ifdef MONT_WORD
+       BIGNUM *n,*r;
+       BN_ULONG *ap,*np,*rp,n0,v,*nrp;
+       int al,nl,max,i,x,ri;
+
+       BN_CTX_start(ctx);
+       if ((r = BN_CTX_get(ctx)) == NULL) goto err;
+
+       if (!BN_copy(r,a)) goto err;
+       n= &(mont->N);
+
+       ap=a->d;
+       /* mont->ri is the size of mont->N in bits (rounded up
+          to the word size) */
+       al=ri=mont->ri/BN_BITS2;
+       
+       nl=n->top;
+       if ((al == 0) || (nl == 0)) { r->top=0; return(1); }
+
+       max=(nl+al+1); /* allow for overflow (no?) XXX */
+       if (bn_wexpand(r,max) == NULL) goto err;
+       if (bn_wexpand(ret,max) == NULL) goto err;
+
+       r->neg=a->neg^n->neg;
+       np=n->d;
+       rp=r->d;
+       nrp= &(r->d[nl]);
 
-               nl=n->top;
-               if ((al == 0) || (nl == 0)) { r->top=0; return(1); }
-
-               max=(nl+al+1); /* allow for overflow (no?) XXX */
-               if (bn_wexpand(r,max) == NULL) goto err1;
-               if (bn_wexpand(ret,max) == NULL) goto err1;
-
-               r->neg=a->neg^n->neg;
-               np=n->d;
-               rp=r->d;
-               nrp= &(r->d[nl]);
-
-               /* clear the top words of T */
+       /* clear the top words of T */
 #if 1
-               for (i=r->top; i<max; i++) /* memset? XXX */
-                       r->d[i]=0;
+       for (i=r->top; i<max; i++) /* memset? XXX */
+               r->d[i]=0;
 #else
-               memset(&(r->d[r->top]),0,(max-r->top)*sizeof(BN_ULONG)); 
+       memset(&(r->d[r->top]),0,(max-r->top)*sizeof(BN_ULONG)); 
 #endif
 
-               r->top=max;
-               n0=mont->n0;
+       r->top=max;
+       n0=mont->n0;
 
 #ifdef BN_COUNT
-printf("word BN_from_montgomery %d * %d\n",nl,nl);
+       printf("word BN_from_montgomery %d * %d\n",nl,nl);
 #endif
-               for (i=0; i<nl; i++)
-                       {
-                       v=bn_mul_add_words(rp,np,nl,(rp[0]*n0)&BN_MASK2);
-                       nrp++;
-                       rp++;
-                       if (((nrp[-1]+=v)&BN_MASK2) >= v)
-                               continue;
-                       else
-                               {
-                               if (((++nrp[0])&BN_MASK2) != 0) continue;
-                               if (((++nrp[1])&BN_MASK2) != 0) continue;
-                               for (x=2; (((++nrp[x])&BN_MASK2) == 0); x++) ;
-                               }
-                       }
-               bn_fix_top(r);
-
-               /* mont->ri will be a multiple of the word size */
-#if 0
-               BN_rshift(ret,r,mont->ri);
-#else
-               x=ri;
-               rp=ret->d;
-               ap= &(r->d[x]);
-               if (r->top < x)
-                       al=0;
+       for (i=0; i<nl; i++)
+               {
+               v=bn_mul_add_words(rp,np,nl,(rp[0]*n0)&BN_MASK2);
+               nrp++;
+               rp++;
+               if (((nrp[-1]+=v)&BN_MASK2) >= v)
+                       continue;
                else
-                       al=r->top-x;
-               ret->top=al;
-               al-=4;
-               for (i=0; i<al; i+=4)
                        {
-                       BN_ULONG t1,t2,t3,t4;
-
-                       t1=ap[i+0];
-                       t2=ap[i+1];
-                       t3=ap[i+2];
-                       t4=ap[i+3];
-                       rp[i+0]=t1;
-                       rp[i+1]=t2;
-                       rp[i+2]=t3;
-                       rp[i+3]=t4;
+                       if (((++nrp[0])&BN_MASK2) != 0) continue;
+                       if (((++nrp[1])&BN_MASK2) != 0) continue;
+                       for (x=2; (((++nrp[x])&BN_MASK2) == 0); x++) ;
                        }
-               al+=4;
-               for (; i<al; i++)
-                       rp[i]=ap[i];
-#endif
-
-               if (BN_ucmp(ret, &(mont->N)) >= 0)
-                       {
-                       BN_usub(ret,ret,&(mont->N)); /* XXX */
-                       }
-               retn=1;
-err1:
-               return(retn);
                }
-#ifdef BN_RECURSION_MONT
-       else /* bignum version */ 
+       bn_fix_top(r);
+       
+       /* mont->ri will be a multiple of the word size */
+#if 0
+       BN_rshift(ret,r,mont->ri);
+#else
+       x=ri;
+       rp=ret->d;
+       ap= &(r->d[x]);
+       if (r->top < x)
+               al=0;
+       else
+               al=r->top-x;
+       ret->top=al;
+       al-=4;
+       for (i=0; i<al; i+=4)
                {
-               BIGNUM *t1,*t2,*t3;
-               int j,i;
-
-#ifdef BN_COUNT
-printf("number BN_from_montgomery\n");
-#endif
-
-               t1= &(ctx->bn[ctx->tos]);
-               t2= &(ctx->bn[ctx->tos+1]);
-               t3= &(ctx->bn[ctx->tos+2]);
-
-               i=mont->Ni.top;
-               bn_wexpand(ret,i); /* perhaps only i*2 */
-               bn_wexpand(t1,i*4); /* perhaps only i*2 */
-               bn_wexpand(t2,i*2); /* perhaps only i   */
-
-               bn_mul_low_recursive(t2->d,a->d,mont->Ni.d,i,t1->d);
-
-               BN_zero(t3);
-               BN_set_bit(t3,mont->N.top*BN_BITS2);
-               bn_sub_words(t3->d,t3->d,a->d,i);
-               bn_mul_high(ret->d,t2->d,mont->N.d,t3->d,i,t1->d);
-
-               /* hmm... if a is between i and 2*i, things are bad */
-               if (a->top > i)
-                       {
-                       j=(int)(bn_add_words(ret->d,ret->d,&(a->d[i]),i));
-                       if (j) /* overflow */
-                               bn_sub_words(ret->d,ret->d,mont->N.d,i);
-                       }
-               ret->top=i;
-               bn_fix_top(ret);
-               if (a->d[0])
-                       BN_add_word(ret,1); /* Always? */
-               else    /* Very very rare */
-                       {
-                       for (i=1; i<mont->N.top-1; i++)
-                               {
-                               if (a->d[i])
-                                       {
-                                       BN_add_word(ret,1); /* Always? */
-                                       break;
-                                       }
-                               }
-                       }
-
-               if (BN_ucmp(ret,&(mont->N)) >= 0)
-                       BN_usub(ret,ret,&(mont->N));
+               BN_ULONG t1,t2,t3,t4;
+               
+               t1=ap[i+0];
+               t2=ap[i+1];
+               t3=ap[i+2];
+               t4=ap[i+3];
+               rp[i+0]=t1;
+               rp[i+1]=t2;
+               rp[i+2]=t3;
+               rp[i+3]=t4;
+               }
+       al+=4;
+       for (; i<al; i++)
+               rp[i]=ap[i];
+#endif
+#else /* !MONT_WORD */ 
+       BIGNUM *t1,*t2;
+
+       BN_CTX_start(ctx);
+       t1 = BN_CTX_get(ctx);
+       t2 = BN_CTX_get(ctx);
+       if (t1 == NULL || t2 == NULL) goto err;
+       
+       if (!BN_copy(t1,a)) goto err;
+       BN_mask_bits(t1,mont->ri);
+
+       if (!BN_mul(t2,t1,&mont->Ni,ctx)) goto err;
+       BN_mask_bits(t2,mont->ri);
+
+       if (!BN_mul(t1,t2,&mont->N,ctx)) goto err;
+       if (!BN_add(t2,a,t1)) goto err;
+       BN_rshift(ret,t2,mont->ri);
+#endif /* MONT_WORD */
 
-               return(1);
+       if (BN_ucmp(ret, &(mont->N)) >= 0)
+               {
+               BN_usub(ret,ret,&(mont->N));
                }
-#endif
+       retn=1;
+ err:
+       BN_CTX_end(ctx);
+       return(retn);
        }
 
 BN_MONT_CTX *BN_MONT_CTX_new(void)
@@ -278,7 +243,6 @@
 
 void BN_MONT_CTX_init(BN_MONT_CTX *ctx)
        {
-       ctx->use_word=0;
        ctx->ri=0;
        BN_init(&(ctx->RR));
        BN_init(&(ctx->N));
@@ -306,85 +270,53 @@
        R= &(mont->RR);                                 /* grab RR as a temp */
        BN_copy(&(mont->N),mod);                        /* Set N */
 
-#ifdef BN_RECURSION_MONT
-       if (mont->N.top < BN_MONT_CTX_SET_SIZE_WORD)
-#endif
+#ifdef MONT_WORD
                {
                BIGNUM tmod;
                BN_ULONG buf[2];
 
-               mont->use_word=1;
-
                mont->ri=(BN_num_bits(mod)+(BN_BITS2-1))/BN_BITS2*BN_BITS2;
                BN_zero(R);
-               BN_set_bit(R,BN_BITS2);
-               /* I was bad, this modification of a passed variable was
-                * breaking the multithreaded stuff :-(
-                * z=mod->top;
-                * mod->top=1; */
+               BN_set_bit(R,BN_BITS2);                 /* R */
 
-               buf[0]=mod->d[0];
+               buf[0]=mod->d[0]; /* tmod = N mod word size */
                buf[1]=0;
                tmod.d=buf;
                tmod.top=1;
-               tmod.max=mod->max;
+               tmod.max=2;
                tmod.neg=mod->neg;
-
+                                                       /* Ri = R^-1 mod N*/
                if ((BN_mod_inverse(&Ri,R,&tmod,ctx)) == NULL)
                        goto err;
-               BN_lshift(&Ri,&Ri,BN_BITS2);                    /* R*Ri */
+               BN_lshift(&Ri,&Ri,BN_BITS2);            /* R*Ri */
                if (!BN_is_zero(&Ri))
-                       {
-#if 1
                        BN_sub_word(&Ri,1);
-#else
-                       BN_usub(&Ri,&Ri,BN_value_one());        /* R*Ri - 1 */
-#endif
-                       }
-               else
-                       {
-                       /* This is not common..., 1 in BN_MASK2,
-                        * It happens when buf[0] was == 1.  So for 8 bit,
-                        * this is 1/256, 16bit, 1 in 2^16 etc.
-                        */
-                       BN_set_word(&Ri,BN_MASK2);
-                       }
-               BN_div(&Ri,NULL,&Ri,&tmod,ctx);
+               else /* if N mod word size == 1 */
+                       BN_set_word(&Ri,BN_MASK2);  /* Ri-- (mod word size) */
+               BN_div(&Ri,NULL,&Ri,&tmod,ctx); /* Ni = (R*Ri-1)/N,
+                                                * keep only least significant word: */
                mont->n0=Ri.d[0];
                BN_free(&Ri);
-               /* mod->top=z; */
                }
-#ifdef BN_RECURSION_MONT
-       else
-               {
-               mont->use_word=0;
-               mont->ri=(BN_num_bits(mod)+(BN_BITS2-1))/BN_BITS2*BN_BITS2;
-#if 1
+#else /* !MONT_WORD */
+               { /* bignum version */
+               mont->ri=BN_num_bits(mod);
                BN_zero(R);
-               BN_set_bit(R,mont->ri);
-#else
-               BN_lshift(R,BN_value_one(),mont->ri);   /* R */
-#endif
+               BN_set_bit(R,mont->ri);                 /* R = 2^ri */
+                                                       /* Ri = R^-1 mod N*/
                if ((BN_mod_inverse(&Ri,R,mod,ctx)) == NULL)
                        goto err;
                BN_lshift(&Ri,&Ri,mont->ri);            /* R*Ri */
-#if 1
                BN_sub_word(&Ri,1);
-#else
-               BN_usub(&Ri,&Ri,BN_value_one());        /* R*Ri - 1 */
-#endif
+                                                       /* Ni = (R*Ri-1) / N */
                BN_div(&(mont->Ni),NULL,&Ri,mod,ctx);
                BN_free(&Ri);
                }
 #endif
 
        /* setup RR for conversions */
-#if 1
        BN_zero(&(mont->RR));
        BN_set_bit(&(mont->RR),mont->ri*2);
-#else
-       BN_lshift(mont->RR,BN_value_one(),mont->ri*2);
-#endif
        BN_mod(&(mont->RR),&(mont->RR),&(mont->N),ctx);
 
        return(1);
@@ -399,7 +331,6 @@
        BN_copy(&(to->RR),&(from->RR));
        BN_copy(&(to->N),&(from->N));
        BN_copy(&(to->Ni),&(from->Ni));
-       to->use_word=from->use_word;
        to->ri=from->ri;
        to->n0=from->n0;
        return(to);
Index: opensa/openssl/crypto/bn/bn_mul.c
diff -u opensa/openssl/crypto/bn/bn_mul.c:1.1 opensa/openssl/crypto/bn/bn_mul.c:1.2
--- opensa/openssl/crypto/bn/bn_mul.c:1.1       Tue Jan 25 23:33:10 2000
+++ opensa/openssl/crypto/bn/bn_mul.c   Thu Mar  2 21:11:51 2000
@@ -66,7 +66,7 @@
  * n2 must be a power of 2.
  * We multiply and return the result.
  * t must be 2*n2 words in size
- * We calulate
+ * We calculate
  * a[0]*b[0]
  * a[0]*b[0]+a[1]*b[1]+(a[0]-a[1])*(b[1]-b[0])
  * a[1]*b[1]
@@ -78,21 +78,23 @@
        unsigned int neg,zero;
        BN_ULONG ln,lo,*p;
 
-#ifdef BN_COUNT
-printf(" bn_mul_recursive %d * %d\n",n2,n2);
-#endif
-#ifdef BN_MUL_COMBA
-/*     if (n2 == 4)
+# ifdef BN_COUNT
+       printf(" bn_mul_recursive %d * %d\n",n2,n2);
+# endif
+# ifdef BN_MUL_COMBA
+#  if 0
+       if (n2 == 4)
                {
                bn_mul_comba4(r,a,b);
                return;
                }
-       else */ if (n2 == 8)
+#  endif
+       if (n2 == 8)
                {
                bn_mul_comba8(r,a,b);
                return; 
                }
-#endif
+# endif /* BN_MUL_COMBA */
        if (n2 < BN_MUL_RECURSIVE_SIZE_NORMAL)
                {
                /* This should not happen */
@@ -136,7 +138,7 @@
                break;
                }
 
-#ifdef BN_MUL_COMBA
+# ifdef BN_MUL_COMBA
        if (n == 4)
                {
                if (!zero)
@@ -158,7 +160,7 @@
                bn_mul_comba8(&(r[n2]),&(a[n]),&(b[n]));
                }
        else
-#endif
+# endif /* BN_MUL_COMBA */
                {
                p= &(t[n2*2]);
                if (!zero)
@@ -219,12 +221,12 @@
             int n, BN_ULONG *t)
        {
        int i,j,n2=n*2;
-       unsigned int c1;
+       unsigned int c1,c2,neg,zero;
        BN_ULONG ln,lo,*p;
 
-#ifdef BN_COUNT
-printf(" bn_mul_part_recursive %d * %d\n",tn+n,tn+n);
-#endif
+# ifdef BN_COUNT
+       printf(" bn_mul_part_recursive %d * %d\n",tn+n,tn+n);
+# endif
        if (n < 8)
                {
                i=tn+n;
@@ -233,17 +235,54 @@
                }
 
        /* r=(a[0]-a[1])*(b[1]-b[0]) */
-       bn_sub_words(t,      a,      &(a[n]),n); /* + */
-       bn_sub_words(&(t[n]),b,      &(b[n]),n); /* - */
-
-/*     if (n == 4)
+       c1=bn_cmp_words(a,&(a[n]),n);
+       c2=bn_cmp_words(&(b[n]),b,n);
+       zero=neg=0;
+       switch (c1*3+c2)
                {
+       case -4:
+               bn_sub_words(t,      &(a[n]),a,      n); /* - */
+               bn_sub_words(&(t[n]),b,      &(b[n]),n); /* - */
+               break;
+       case -3:
+               zero=1;
+               /* break; */
+       case -2:
+               bn_sub_words(t,      &(a[n]),a,      n); /* - */
+               bn_sub_words(&(t[n]),&(b[n]),b,      n); /* + */
+               neg=1;
+               break;
+       case -1:
+       case 0:
+       case 1:
+               zero=1;
+               /* break; */
+       case 2:
+               bn_sub_words(t,      a,      &(a[n]),n); /* + */
+               bn_sub_words(&(t[n]),b,      &(b[n]),n); /* - */
+               neg=1;
+               break;
+       case 3:
+               zero=1;
+               /* break; */
+       case 4:
+               bn_sub_words(t,      a,      &(a[n]),n);
+               bn_sub_words(&(t[n]),&(b[n]),b,      n);
+               break;
+               }
+               /* The zero case isn't yet implemented here. The speedup
+                  would probably be negligible. */
+# if 0
+       if (n == 4)
+               {
                bn_mul_comba4(&(t[n2]),t,&(t[n]));
                bn_mul_comba4(r,a,b);
                bn_mul_normal(&(r[n2]),&(a[n]),tn,&(b[n]),tn);
                memset(&(r[n2+tn*2]),0,sizeof(BN_ULONG)*(n2-tn*2));
                }
-       else */ if (n == 8)
+       else
+# endif
+       if (n == 8)
                {
                bn_mul_comba8(&(t[n2]),t,&(t[n]));
                bn_mul_comba8(r,a,b);
@@ -308,8 +347,17 @@
         */
 
        c1=(int)(bn_add_words(t,r,&(r[n2]),n2));
-       c1-=(int)(bn_sub_words(&(t[n2]),t,&(t[n2]),n2));
 
+       if (neg) /* if t[32] is negative */
+               {
+               c1-=(int)(bn_sub_words(&(t[n2]),t,&(t[n2]),n2));
+               }
+       else
+               {
+               /* Might have a carry */
+               c1+=(int)(bn_add_words(&(t[n2]),&(t[n2]),t,n2));
+               }
+
        /* t[32] holds (a[0]-a[1])*(b[1]-b[0])+(a[0]*b[0])+(a[1]*b[1])
         * r[10] holds (a[0]*b[0])
         * r[32] holds (b[1]*b[1])
@@ -345,9 +393,9 @@
        {
        int n=n2/2;
 
-#ifdef BN_COUNT
-printf(" bn_mul_low_recursive %d * %d\n",n2,n2);
-#endif
+# ifdef BN_COUNT
+       printf(" bn_mul_low_recursive %d * %d\n",n2,n2);
+# endif
 
        bn_mul_recursive(r,a,b,n,&(t[0]));
        if (n >= BN_MUL_LOW_RECURSIVE_SIZE_NORMAL)
@@ -379,9 +427,9 @@
        int neg,oneg,zero;
        BN_ULONG ll,lc,*lp,*mp;
 
-#ifdef BN_COUNT
-printf(" bn_mul_high %d * %d\n",n2,n2);
-#endif
+# ifdef BN_COUNT
+       printf(" bn_mul_high %d * %d\n",n2,n2);
+# endif
        n=n2/2;
 
        /* Calculate (al-ah)*(bh-bl) */
@@ -424,14 +472,14 @@
        oneg=neg;
        /* t[10] = (a[0]-a[1])*(b[1]-b[0]) */
        /* r[10] = (a[1]*b[1]) */
-#ifdef BN_MUL_COMBA
+# ifdef BN_MUL_COMBA
        if (n == 8)
                {
                bn_mul_comba8(&(t[0]),&(r[0]),&(r[n]));
                bn_mul_comba8(r,&(a[n]),&(b[n]));
                }
        else
-#endif
+# endif
                {
                bn_mul_recursive(&(t[0]),&(r[0]),&(r[n]),n,&(t[n2]));
                bn_mul_recursive(r,&(a[n]),&(b[n]),n,&(t[n2]));
@@ -555,19 +603,23 @@
                        }
                }
        }
-#endif
+#endif /* BN_RECURSION */
 
 int BN_mul(BIGNUM *r, BIGNUM *a, BIGNUM *b, BN_CTX *ctx)
        {
        int top,al,bl;
        BIGNUM *rr;
+       int ret = 0;
+#if defined(BN_MUL_COMBA) || defined(BN_RECURSION)
+       int i;
+#endif
 #ifdef BN_RECURSION
        BIGNUM *t;
-       int i,j,k;
+       int j,k;
 #endif
 
 #ifdef BN_COUNT
-printf("BN_mul %d * %d\n",a->top,b->top);
+       printf("BN_mul %d * %d\n",a->top,b->top);
 #endif
 
        bn_check_top(a);
@@ -585,115 +637,99 @@
                }
        top=al+bl;
 
+       BN_CTX_start(ctx);
        if ((r == a) || (r == b))
-               rr= &(ctx->bn[ctx->tos+1]);
+               {
+               if ((rr = BN_CTX_get(ctx)) == NULL) goto err;
+               }
        else
-               rr=r;
+               rr = r;
 
 #if defined(BN_MUL_COMBA) || defined(BN_RECURSION)
-       if (al == bl)
+       i = al-bl;
+#endif
+#ifdef BN_MUL_COMBA
+       if (i == 0)
                {
-#  ifdef BN_MUL_COMBA
-/*             if (al == 4)
+# if 0
+               if (al == 4)
                        {
-                       if (bn_wexpand(rr,8) == NULL) return(0);
+                       if (bn_wexpand(rr,8) == NULL) goto err;
                        rr->top=8;
                        bn_mul_comba4(rr->d,a->d,b->d);
                        goto end;
                        }
-               else */ if (al == 8)
+# endif
+               if (al == 8)
                        {
-                       if (bn_wexpand(rr,16) == NULL) return(0);
+                       if (bn_wexpand(rr,16) == NULL) goto err;
                        rr->top=16;
                        bn_mul_comba8(rr->d,a->d,b->d);
                        goto end;
                        }
-               else
-#  endif
-#ifdef BN_RECURSION
-               if (al < BN_MULL_SIZE_NORMAL)
-#endif
-                       {
-                       if (bn_wexpand(rr,top) == NULL) return(0);
-                       rr->top=top;
-                       bn_mul_normal(rr->d,a->d,al,b->d,bl);
-                       goto end;
-                       }
-#  ifdef BN_RECURSION
-               goto symetric;
-#  endif
                }
-#endif
+#endif /* BN_MUL_COMBA */
 #ifdef BN_RECURSION
-       else if ((al < BN_MULL_SIZE_NORMAL) || (bl < BN_MULL_SIZE_NORMAL))
+       if ((al >= BN_MULL_SIZE_NORMAL) && (bl >= BN_MULL_SIZE_NORMAL))
                {
-               if (bn_wexpand(rr,top) == NULL) return(0);
-               rr->top=top;
-               bn_mul_normal(rr->d,a->d,al,b->d,bl);
-               goto end;
-               }
-       else
-               {
-               i=(al-bl);
-               if ((i ==  1) && !BN_get_flags(b,BN_FLG_STATIC_DATA))
+               if (i == 1 && !BN_get_flags(b,BN_FLG_STATIC_DATA))
                        {
                        bn_wexpand(b,al);
                        b->d[bl]=0;
                        bl++;
-                       goto symetric;
+                       i--;
                        }
-               else if ((i ==  -1) && !BN_get_flags(a,BN_FLG_STATIC_DATA))
+               else if (i == -1 && !BN_get_flags(a,BN_FLG_STATIC_DATA))
                        {
                        bn_wexpand(a,bl);
                        a->d[al]=0;
                        al++;
-                       goto symetric;
+                       i++;
                        }
+               if (i == 0)
+                       {
+                       /* symmetric and > 4 */
+                       /* 16 or larger */
+                       j=BN_num_bits_word((BN_ULONG)al);
+                       j=1<<(j-1);
+                       k=j+j;
+                       t = BN_CTX_get(ctx);
+                       if (al == j) /* exact multiple */
+                               {
+                               bn_wexpand(t,k*2);
+                               bn_wexpand(rr,k*2);
+                               bn_mul_recursive(rr->d,a->d,b->d,al,t->d);
+                               }
+                       else
+                               {
+                               bn_wexpand(a,k);
+                               bn_wexpand(b,k);
+                               bn_wexpand(t,k*4);
+                               bn_wexpand(rr,k*4);
+                               for (i=a->top; i<k; i++)
+                                       a->d[i]=0;
+                               for (i=b->top; i<k; i++)
+                                       b->d[i]=0;
+                               bn_mul_part_recursive(rr->d,a->d,b->d,al-j,j,t->d);
+                               }
+                       rr->top=top;
+                       goto end;
+                       }
                }
-#endif
-
-       /* asymetric and >= 4 */ 
-       if (bn_wexpand(rr,top) == NULL) return(0);
+#endif /* BN_RECURSION */
+       if (bn_wexpand(rr,top) == NULL) goto err;
        rr->top=top;
        bn_mul_normal(rr->d,a->d,al,b->d,bl);
 
-#ifdef BN_RECURSION
-       if (0)
-               {
-symetric:
-               /* symetric and > 4 */
-               /* 16 or larger */
-               j=BN_num_bits_word((BN_ULONG)al);
-               j=1<<(j-1);
-               k=j+j;
-               t= &(ctx->bn[ctx->tos]);
-               if (al == j) /* exact multiple */
-                       {
-                       bn_wexpand(t,k*2);
-                       bn_wexpand(rr,k*2);
-                       bn_mul_recursive(rr->d,a->d,b->d,al,t->d);
-                       }
-               else
-                       {
-                       bn_wexpand(a,k);
-                       bn_wexpand(b,k);
-                       bn_wexpand(t,k*4);
-                       bn_wexpand(rr,k*4);
-                       for (i=a->top; i<k; i++)
-                               a->d[i]=0;
-                       for (i=b->top; i<k; i++)
-                               b->d[i]=0;
-                       bn_mul_part_recursive(rr->d,a->d,b->d,al-j,j,t->d);
-                       }
-               rr->top=top;
-               }
-#endif
 #if defined(BN_MUL_COMBA) || defined(BN_RECURSION)
 end:
 #endif
        bn_fix_top(rr);
        if (r != rr) BN_copy(r,rr);
-       return(1);
+       ret=1;
+err:
+       BN_CTX_end(ctx);
+       return(ret);
        }
 
 void bn_mul_normal(BN_ULONG *r, BN_ULONG *a, int na, BN_ULONG *b, int nb)
@@ -701,7 +737,7 @@
        BN_ULONG *rr;
 
 #ifdef BN_COUNT
-printf(" bn_mul_normal %d * %d\n",na,nb);
+       printf(" bn_mul_normal %d * %d\n",na,nb);
 #endif
 
        if (na < nb)
@@ -735,7 +771,7 @@
 void bn_mul_low_normal(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b, int n)
        {
 #ifdef BN_COUNT
-printf(" bn_mul_low_normal %d * %d\n",n,n);
+       printf(" bn_mul_low_normal %d * %d\n",n,n);
 #endif
        bn_mul_words(r,a,n,b[0]);
 
@@ -753,4 +789,3 @@
                b+=4;
                }
        }
-
Index: opensa/openssl/crypto/bn/bn_prime.c
diff -u opensa/openssl/crypto/bn/bn_prime.c:1.1 opensa/openssl/crypto/bn/bn_prime.c:1.2
--- opensa/openssl/crypto/bn/bn_prime.c:1.1     Tue Jan 25 23:33:10 2000
+++ opensa/openssl/crypto/bn/bn_prime.c Thu Mar  2 21:11:51 2000
@@ -55,6 +55,59 @@
  * copied and put under another distribution licence
  * [including the GNU Public Licence.]
  */
+/* ====================================================================
+ * Copyright (c) 1998-2000 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
+ *    [EMAIL PROTECTED]
+ *
+ * 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
+ * ([EMAIL PROTECTED]).  This product includes software written by Tim
+ * Hudson ([EMAIL PROTECTED]).
+ *
+ */
 
 #include <stdio.h>
 #include <time.h>
@@ -62,26 +115,29 @@
 #include "bn_lcl.h"
 #include <openssl/rand.h>
 
-/* The quick seive algorithm approach to weeding out primes is
+/* The quick sieve algorithm approach to weeding out primes is
  * Philip Zimmermann's, as implemented in PGP.  I have had a read of
  * his comments and implemented my own version.
  */
 #include "bn_prime.h"
 
-static int witness(BIGNUM *a, BIGNUM *n, BN_CTX *ctx,BN_CTX *ctx2,
-       BN_MONT_CTX *mont);
+static int witness(BIGNUM *w, const BIGNUM *a, const BIGNUM *a1,
+       const BIGNUM *a1_odd, int k, BN_CTX *ctx, BN_MONT_CTX *mont);
 static int probable_prime(BIGNUM *rnd, int bits);
 static int probable_prime_dh(BIGNUM *rnd, int bits,
        BIGNUM *add, BIGNUM *rem, BN_CTX *ctx);
-static int probable_prime_dh_strong(BIGNUM *rnd, int bits,
+static int probable_prime_dh_safe(BIGNUM *rnd, int bits,
        BIGNUM *add, BIGNUM *rem, BN_CTX *ctx);
-BIGNUM *BN_generate_prime(BIGNUM *ret, int bits, int strong, BIGNUM *add,
+
+BIGNUM *BN_generate_prime(BIGNUM *ret, int bits, int safe, BIGNUM *add,
             BIGNUM *rem, void (*callback)(int,int,void *), void *cb_arg)
        {
        BIGNUM *rnd=NULL;
        BIGNUM t;
+       int found=0;
        int i,j,c1=0;
        BN_CTX *ctx;
+       int checks = BN_prime_checks_for_size(bits);
 
        ctx=BN_CTX_new();
        if (ctx == NULL) goto err;
@@ -100,9 +156,9 @@
                }
        else
                {
-               if (strong)
+               if (safe)
                        {
-                       if (!probable_prime_dh_strong(rnd,bits,add,rem,ctx))
+                       if (!probable_prime_dh_safe(rnd,bits,add,rem,ctx))
                                 goto err;
                        }
                else
@@ -114,160 +170,185 @@
        /* if (BN_mod_word(rnd,(BN_ULONG)3) == 1) goto loop; */
        if (callback != NULL) callback(0,c1++,cb_arg);
 
-       if (!strong)
+       if (!safe)
                {
-               i=BN_is_prime(rnd,BN_prime_checks,callback,ctx,cb_arg);
+               i=BN_is_prime_fasttest(rnd,checks,callback,ctx,cb_arg,0);
                if (i == -1) goto err;
                if (i == 0) goto loop;
                }
        else
                {
-               /* for a strong prime generation,
+               /* for "safe prime" generation,
                 * check that (p-1)/2 is prime.
                 * Since a prime is odd, We just
                 * need to divide by 2 */
                if (!BN_rshift1(&t,rnd)) goto err;
 
-               for (i=0; i<BN_prime_checks; i++)
+               for (i=0; i<checks; i++)
                        {
-                       j=BN_is_prime(rnd,1,callback,ctx,cb_arg);
+                       j=BN_is_prime_fasttest(rnd,1,callback,ctx,cb_arg,0);
                        if (j == -1) goto err;
                        if (j == 0) goto loop;
 
-                       j=BN_is_prime(&t,1,callback,ctx,cb_arg);
+                       j=BN_is_prime_fasttest(&t,1,callback,ctx,cb_arg,0);
                        if (j == -1) goto err;
                        if (j == 0) goto loop;
 
                        if (callback != NULL) callback(2,c1-1,cb_arg);
-                       /* We have a strong prime test pass */
+                       /* We have a safe prime test pass */
                        }
                }
        /* we have a prime :-) */
-       ret=rnd;
+       found = 1;
 err:
-       if ((ret == NULL) && (rnd != NULL)) BN_free(rnd);
+       if (!found && (ret == NULL) && (rnd != NULL)) BN_free(rnd);
        BN_free(&t);
        if (ctx != NULL) BN_CTX_free(ctx);
-       return(ret);
+       return(found ? rnd : NULL);
        }
 
-int BN_is_prime(BIGNUM *a, int checks, void (*callback)(int,int,void *),
-            BN_CTX *ctx_passed, void *cb_arg)
+int BN_is_prime(const BIGNUM *a, int checks, void (*callback)(int,int,void *),
+       BN_CTX *ctx_passed, void *cb_arg)
        {
-       int i,j,c2=0,ret= -1;
-       BIGNUM *check;
-       BN_CTX *ctx=NULL,*ctx2=NULL;
-       BN_MONT_CTX *mont=NULL;
+       return BN_is_prime_fasttest(a, checks, callback, ctx_passed, cb_arg, 0);
+       }
+
+int BN_is_prime_fasttest(const BIGNUM *a, int checks,
+               void (*callback)(int,int,void *),
+               BN_CTX *ctx_passed, void *cb_arg,
+               int do_trial_division)
+       {
+       int i, j, ret = -1;
+       int k;
+       BN_CTX *ctx = NULL;
+       BIGNUM *A1, *A1_odd, *check; /* taken from ctx */
+       BN_MONT_CTX *mont = NULL;
+       const BIGNUM *A = NULL;
+
+       if (checks == BN_prime_checks)
+               checks = BN_prime_checks_for_size(BN_num_bits(a));
 
+       /* first look for small factors */
        if (!BN_is_odd(a))
                return(0);
+       if (do_trial_division)
+               {
+               for (i = 1; i < NUMPRIMES; i++)
+                       if (BN_mod_word(a, primes[i]) == 0) 
+                               return 0;
+               if (callback != NULL) callback(1, -1, cb_arg);
+               }
+
        if (ctx_passed != NULL)
-               ctx=ctx_passed;
+               ctx = ctx_passed;
        else
-               if ((ctx=BN_CTX_new()) == NULL) goto err;
-
-       if ((ctx2=BN_CTX_new()) == NULL) goto err;
-       if ((mont=BN_MONT_CTX_new()) == NULL) goto err;
-
-       check= &(ctx->bn[ctx->tos++]);
-
-       /* Setup the montgomery structure */
-       if (!BN_MONT_CTX_set(mont,a,ctx2)) goto err;
+               if ((ctx=BN_CTX_new()) == NULL)
+                       goto err;
+       BN_CTX_start(ctx);
 
-       for (i=0; i<checks; i++)
+       /* A := abs(a) */
+       if (a->neg)
                {
-               if (!BN_rand(check,BN_num_bits(a)-1,0,0)) goto err;
-               j=witness(check,a,ctx,ctx2,mont);
+               BIGNUM *t;
+               if ((t = BN_CTX_get(ctx)) == NULL) goto err;
+               BN_copy(t, a);
+               t->neg = 0;
+               A = t;
+               }
+       else
+               A = a;
+       A1 = BN_CTX_get(ctx);
+       A1_odd = BN_CTX_get(ctx);
+       check = BN_CTX_get(ctx);
+       if (check == NULL) goto err;
+
+       /* compute A1 := A - 1 */
+       if (!BN_copy(A1, A))
+               goto err;
+       if (!BN_sub_word(A1, 1))
+               goto err;
+       if (BN_is_zero(A1))
+               {
+               ret = 0;
+               goto err;
+               }
+
+       /* write  A1  as  A1_odd * 2^k */
+       k = 1;
+       while (!BN_is_bit_set(A1, k))
+               k++;
+       if (!BN_rshift(A1_odd, A1, k))
+               goto err;
+
+       /* Montgomery setup for computations mod A */
+       mont = BN_MONT_CTX_new();
+       if (mont == NULL)
+               goto err;
+       if (!BN_MONT_CTX_set(mont, A, ctx))
+               goto err;
+       
+       for (i = 0; i < checks; i++)
+               {
+               if (!BN_pseudo_rand(check, BN_num_bits(A1), 0, 0))
+                       goto err;
+               if (BN_cmp(check, A1) >= 0)
+                       if (!BN_sub(check, check, A1))
+                               goto err;
+               if (!BN_add_word(check, 1))
+                       goto err;
+               /* now 1 <= check < A */
+
+               j = witness(check, A, A1, A1_odd, k, ctx, mont);
                if (j == -1) goto err;
                if (j)
                        {
                        ret=0;
                        goto err;
                        }
-               if (callback != NULL) callback(1,c2++,cb_arg);
+               if (callback != NULL) callback(1,i,cb_arg);
                }
        ret=1;
 err:
-       ctx->tos--;
-       if ((ctx_passed == NULL) && (ctx != NULL))
-               BN_CTX_free(ctx);
-       if (ctx2 != NULL)
-               BN_CTX_free(ctx2);
-       if (mont != NULL) BN_MONT_CTX_free(mont);
-               
+       if (ctx != NULL)
+               {
+               BN_CTX_end(ctx);
+               if (ctx_passed == NULL)
+                       BN_CTX_free(ctx);
+               }
+       if (mont != NULL)
+               BN_MONT_CTX_free(mont);
+
        return(ret);
        }
-
-#define RECP_MUL_MOD
 
-static int witness(BIGNUM *a, BIGNUM *n, BN_CTX *ctx, BN_CTX *ctx2,
-            BN_MONT_CTX *mont)
+static int witness(BIGNUM *w, const BIGNUM *a, const BIGNUM *a1,
+       const BIGNUM *a1_odd, int k, BN_CTX *ctx, BN_MONT_CTX *mont)
        {
-       int k,i,ret= -1,good;
-       BIGNUM *d,*dd,*tmp,*d1,*d2,*n1;
-       BIGNUM *mont_one,*mont_n1,*mont_a;
-
-       d1= &(ctx->bn[ctx->tos]);
-       d2= &(ctx->bn[ctx->tos+1]);
-       n1= &(ctx->bn[ctx->tos+2]);
-       ctx->tos+=3;
-
-       mont_one= &(ctx2->bn[ctx2->tos]);
-       mont_n1= &(ctx2->bn[ctx2->tos+1]);
-       mont_a= &(ctx2->bn[ctx2->tos+2]);
-       ctx2->tos+=3;
-
-       d=d1;
-       dd=d2;
-       if (!BN_one(d)) goto err;
-       if (!BN_sub(n1,n,d)) goto err; /* n1=n-1; */
-       k=BN_num_bits(n1);
-
-       if (!BN_to_montgomery(mont_one,BN_value_one(),mont,ctx2)) goto err;
-       if (!BN_to_montgomery(mont_n1,n1,mont,ctx2)) goto err;
-       if (!BN_to_montgomery(mont_a,a,mont,ctx2)) goto err;
-
-       BN_copy(d,mont_one);
-       for (i=k-1; i>=0; i--)
-               {
-               if (    (BN_cmp(d,mont_one) != 0) &&
-                       (BN_cmp(d,mont_n1) != 0))
-                       good=1;
-               else
-                       good=0;
-
-               BN_mod_mul_montgomery(dd,d,d,mont,ctx2);
-
-               if (good && (BN_cmp(dd,mont_one) == 0))
-                       {
-                       ret=1;
-                       goto err;
-                       }
-               if (BN_is_bit_set(n1,i))
-                       {
-                       BN_mod_mul_montgomery(d,dd,mont_a,mont,ctx2);
-                       }
-               else
-                       {
-                       tmp=d;
-                       d=dd;
-                       dd=tmp;
-                       }
-               }
-       if (BN_cmp(d,mont_one) == 0)
-               i=0;
-       else    i=1;
-       ret=i;
-err:
-       ctx->tos-=3;
-       ctx2->tos-=3;
-       return(ret);
+       if (!BN_mod_exp_mont(w, w, a1_odd, a, ctx, mont)) /* w := w^a1_odd mod a */
+               return -1;
+       if (BN_is_one(w))
+               return 0; /* probably prime */
+       if (BN_cmp(w, a1) == 0)
+               return 0; /* w == -1 (mod a),  'a' is probably prime */
+       while (--k)
+               {
+               if (!BN_mod_mul(w, w, w, a, ctx)) /* w := w^2 mod a */
+                       return -1;
+               if (BN_is_one(w))
+                       return 1; /* 'a' is composite, otherwise a previous 'w' would
+                                  * have been == -1 (mod 'a') */
+               if (BN_cmp(w, a1) == 0)
+                       return 0; /* w == -1 (mod a), 'a' is probably prime */
+               }
+       /* If we get here, 'w' is the (a-1)/2-th power of the original 'w',
+        * and it is neither -1 nor +1 -- so 'a' cannot be prime */
+       return 1;
        }
 
 static int probable_prime(BIGNUM *rnd, int bits)
        {
        int i;
-       MS_STATIC BN_ULONG mods[NUMPRIMES];
+       BN_ULONG mods[NUMPRIMES];
        BN_ULONG delta,d;
 
 again:
@@ -285,7 +366,7 @@
                        d=delta;
                        delta+=2;
                        /* perhaps need to check for overflow of
-                        * delta (but delta can be upto 2^32)
+                        * delta (but delta can be up to 2^32)
                         * 21-May-98 eay - added overflow check */
                        if (delta < d) goto again;
                        goto loop;
@@ -301,7 +382,8 @@
        int i,ret=0;
        BIGNUM *t1;
 
-       t1= &(ctx->bn[ctx->tos++]);
+       BN_CTX_start(ctx);
+       if ((t1 = BN_CTX_get(ctx)) == NULL) goto err;
 
        if (!BN_rand(rnd,bits,0,1)) goto err;
 
@@ -327,20 +409,22 @@
                }
        ret=1;
 err:
-       ctx->tos--;
+       BN_CTX_end(ctx);
        return(ret);
        }
 
-static int probable_prime_dh_strong(BIGNUM *p, int bits, BIGNUM *padd,
+static int probable_prime_dh_safe(BIGNUM *p, int bits, BIGNUM *padd,
             BIGNUM *rem, BN_CTX *ctx)
        {
        int i,ret=0;
-       BIGNUM *t1,*qadd=NULL,*q=NULL;
+       BIGNUM *t1,*qadd,*q;
 
        bits--;
-       t1= &(ctx->bn[ctx->tos++]);
-       q= &(ctx->bn[ctx->tos++]);
-       qadd= &(ctx->bn[ctx->tos++]);
+       BN_CTX_start(ctx);
+       t1 = BN_CTX_get(ctx);
+       q = BN_CTX_get(ctx);
+       qadd = BN_CTX_get(ctx);
+       if (qadd == NULL) goto err;
 
        if (!BN_rshift1(qadd,padd)) goto err;
                
@@ -375,73 +459,7 @@
                        }
                }
        ret=1;
-err:
-       ctx->tos-=3;
-       return(ret);
-       }
-
-#if 0
-static int witness(BIGNUM *a, BIGNUM *n, BN_CTX *ctx)
-       {
-       int k,i,nb,ret= -1;
-       BIGNUM *d,*dd,*tmp;
-       BIGNUM *d1,*d2,*x,*n1,*inv;
-
-       d1= &(ctx->bn[ctx->tos]);
-       d2= &(ctx->bn[ctx->tos+1]);
-       x=  &(ctx->bn[ctx->tos+2]);
-       n1= &(ctx->bn[ctx->tos+3]);
-       inv=&(ctx->bn[ctx->tos+4]);
-       ctx->tos+=5;
-
-       d=d1;
-       dd=d2;
-       if (!BN_one(d)) goto err;
-       if (!BN_sub(n1,n,d)) goto err; /* n1=n-1; */
-       k=BN_num_bits(n1);
-
-       /* i=BN_num_bits(n); */
-#ifdef RECP_MUL_MOD
-       nb=BN_reciprocal(inv,n,ctx); /**/
-       if (nb == -1) goto err;
-#endif
-
-       for (i=k-1; i>=0; i--)
-               {
-               if (BN_copy(x,d) == NULL) goto err;
-#ifndef RECP_MUL_MOD
-               if (!BN_mod_mul(dd,d,d,n,ctx)) goto err;
-#else
-               if (!BN_mod_mul_reciprocal(dd,d,d,n,inv,nb,ctx)) goto err;
-#endif
-               if (    BN_is_one(dd) &&
-                       !BN_is_one(x) &&
-                       (BN_cmp(x,n1) != 0))
-                       {
-                       ret=1;
-                       goto err;
-                       }
-               if (BN_is_bit_set(n1,i))
-                       {
-#ifndef RECP_MUL_MOD
-                       if (!BN_mod_mul(d,dd,a,n,ctx)) goto err;
-#else
-                       if (!BN_mod_mul_reciprocal(d,dd,a,n,inv,nb,ctx)) goto err; 
-#endif
-                       }
-               else
-                       {
-                       tmp=d;
-                       d=dd;
-                       dd=tmp;
-                       }
-               }
-       if (BN_is_one(d))
-               i=0;
-       else    i=1;
-       ret=i;
 err:
-       ctx->tos-=5;
+       BN_CTX_end(ctx);
        return(ret);
        }
-#endif
Index: opensa/openssl/crypto/bn/bn_prime.h
diff -u opensa/openssl/crypto/bn/bn_prime.h:1.1 opensa/openssl/crypto/bn/bn_prime.h:1.2
--- opensa/openssl/crypto/bn/bn_prime.h:1.1     Tue Jan 25 23:33:10 2000
+++ opensa/openssl/crypto/bn/bn_prime.h Thu Mar  2 21:11:51 2000
@@ -1,4 +1,4 @@
-/* crypto/bn/bn_prime.h */
+/* Auto generated by bn_prime.pl */
 /* Copyright (C) 1995-1998 Eric Young ([EMAIL PROTECTED])
  * All rights reserved.
  *
@@ -61,7 +61,7 @@
 #else
 #define NUMPRIMES 54
 #endif
-static unsigned int primes[NUMPRIMES]=
+static const unsigned int primes[NUMPRIMES]=
        {
           2,   3,   5,   7,  11,  13,  17,  19,
          23,  29,  31,  37,  41,  43,  47,  53,
Index: opensa/openssl/crypto/bn/bn_prime.pl
diff -u opensa/openssl/crypto/bn/bn_prime.pl:1.1 
opensa/openssl/crypto/bn/bn_prime.pl:1.2
--- opensa/openssl/crypto/bn/bn_prime.pl:1.1    Tue Jan 25 23:33:10 2000
+++ opensa/openssl/crypto/bn/bn_prime.pl        Thu Mar  2 21:11:51 2000
@@ -18,13 +18,74 @@
        push(@primes,$p);
        }
 
-print <<"EOF";
+# print <<"EOF";
+# /* Auto generated by bn_prime.pl */
+# /* Copyright (C) 1995-1997 Eric Young (eay\@mincom.oz.au).
+#  * All rights reserved.
+#  * Copyright remains Eric Young's, and as such any Copyright notices in
+#  * the code are not to be removed.
+#  * See the COPYRIGHT file in the SSLeay distribution for more details.
+#  */
+# 
+# EOF
+
+print <<\EOF;
 /* Auto generated by bn_prime.pl */
-/* Copyright (C) 1995-1997 Eric Young (eay\@mincom.oz.au).
+/* Copyright (C) 1995-1998 Eric Young ([EMAIL PROTECTED])
  * All rights reserved.
+ *
+ * This package is an SSL implementation written
+ * by Eric Young ([EMAIL PROTECTED]).
+ * The implementation was written so as to conform with Netscapes SSL.
+ * 
+ * This library is free for commercial and non-commercial use as long as
+ * the following conditions are aheared to.  The following conditions
+ * apply to all code found in this distribution, be it the RC4, RSA,
+ * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
+ * included with this distribution is covered by the same copyright terms
+ * except that the holder is Tim Hudson ([EMAIL PROTECTED]).
+ * 
  * Copyright remains Eric Young's, and as such any Copyright notices in
  * the code are not to be removed.
- * See the COPYRIGHT file in the SSLeay distribution for more details.
+ * If this package is used in a product, Eric Young should be given attribution
+ * as the author of the parts of the library used.
+ * This can be in the form of a textual message at program startup or
+ * in documentation (online or textual) provided with the package.
+ * 
+ * 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 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 acknowledgement:
+ *    "This product includes cryptographic software written by
+ *     Eric Young ([EMAIL PROTECTED])"
+ *    The word 'cryptographic' can be left out if the rouines from the library
+ *    being used are not cryptographic related :-).
+ * 4. If you include any Windows specific code (or a derivative thereof) from 
+ *    the apps directory (application code) you must include an acknowledgement:
+ *    "This product includes software written by Tim Hudson ([EMAIL PROTECTED])"
+ * 
+ * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
+ * ANY EXPRESS 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 AUTHOR OR 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.
+ * 
+ * The licence and distribution terms for any publically available version or
+ * derivative of this code cannot be changed.  i.e. this code cannot simply be
+ * copied and put under another distribution licence
+ * [including the GNU Public Licence.]
  */
 
 EOF
@@ -43,7 +104,7 @@
 printf "#else\n";
 printf "#define NUMPRIMES %d\n",$eight;
 printf "#endif\n";
-print "static unsigned int primes[NUMPRIMES]=\n\t{\n\t";
+print "static const unsigned int primes[NUMPRIMES]=\n\t{\n\t";
 $init=0;
 for ($i=0; $i <= $#primes; $i++)
        {
Index: opensa/openssl/crypto/bn/bn_print.c
diff -u opensa/openssl/crypto/bn/bn_print.c:1.1 opensa/openssl/crypto/bn/bn_print.c:1.2
--- opensa/openssl/crypto/bn/bn_print.c:1.1     Tue Jan 25 23:33:10 2000
+++ opensa/openssl/crypto/bn/bn_print.c Thu Mar  2 21:11:51 2000
@@ -137,7 +137,7 @@
                        }
                lp--;
                /* We now have a series of blocks, BN_DEC_NUM chars
-                * in length, where the last one needs trucation.
+                * in length, where the last one needs truncation.
                 * The blocks need to be reversed in order. */
                sprintf(p,BN_DEC_FMT1,*lp);
                while (*p) p++;
@@ -171,7 +171,7 @@
        num=i+neg;
        if (bn == NULL) return(num);
 
-       /* a is the start of the hex digets, and it is 'i' long */
+       /* a is the start of the hex digits, and it is 'i' long */
        if (*bn == NULL)
                {
                if ((ret=BN_new()) == NULL) return(0);
@@ -185,7 +185,7 @@
        /* i is the number of hex digests; */
        if (bn_expand(ret,i*4) == NULL) goto err;
 
-       j=i; /* least significate 'hex' */
+       j=i; /* least significant 'hex' */
        m=0;
        h=0;
        while (j > 0)
@@ -236,8 +236,8 @@
        num=i+neg;
        if (bn == NULL) return(num);
 
-       /* a is the start of the digets, and it is 'i' long.
-        * We chop it into BN_DEC_NUM digets at a time */
+       /* a is the start of the digits, and it is 'i' long.
+        * We chop it into BN_DEC_NUM digits at a time */
        if (*bn == NULL)
                {
                if ((ret=BN_new()) == NULL) return(0);
@@ -278,9 +278,8 @@
        }
 
 #ifndef NO_BIO
-
 #ifndef NO_FP_API
-int BN_print_fp(FILE *fp, BIGNUM *a)
+int BN_print_fp(FILE *fp, const BIGNUM *a)
        {
        BIO *b;
        int ret;
@@ -319,5 +318,15 @@
 end:
        return(ret);
        }
+#endif
 
+#ifdef BN_DEBUG
+void bn_dump1(FILE *o, const char *a, BN_ULONG *b,int n)
+       {
+       int i;
+       fprintf(o, "%s=", a);
+       for (i=n-1;i>=0;i--)
+               fprintf(o, "%08lX", b[i]); /* assumes 32-bit BN_ULONG */
+       fprintf(o, "\n");
+       }
 #endif
Index: opensa/openssl/crypto/bn/bn_rand.c
diff -u opensa/openssl/crypto/bn/bn_rand.c:1.1 opensa/openssl/crypto/bn/bn_rand.c:1.2
--- opensa/openssl/crypto/bn/bn_rand.c:1.1      Tue Jan 25 23:33:10 2000
+++ opensa/openssl/crypto/bn/bn_rand.c  Thu Mar  2 21:11:51 2000
@@ -62,7 +62,7 @@
 #include "bn_lcl.h"
 #include <openssl/rand.h>
 
-int BN_rand(BIGNUM *rnd, int bits, int top, int bottom)
+static int bnrand(int pseudorand, BIGNUM *rnd, int bits, int top, int bottom)
        {
        unsigned char *buf=NULL;
        int ret=0,bit,bytes,mask;
@@ -81,9 +81,19 @@
 
        /* make a random number and set the top and bottom bits */
        time(&tim);
-       RAND_seed(&tim,sizeof(tim));
+       RAND_add(&tim,sizeof(tim),0);
 
-       RAND_bytes(buf,(int)bytes);
+       if (pseudorand)
+               {
+               if (RAND_pseudo_bytes(buf, bytes) == -1)
+                       goto err;
+               }
+       else
+               {
+               if (RAND_bytes(buf, bytes) <= 0)
+                       goto err;
+               }
+
        if (top)
                {
                if (bit == 0)
@@ -115,3 +125,12 @@
        return(ret);
        }
 
+int     BN_rand(BIGNUM *rnd, int bits, int top, int bottom)
+       {
+       return bnrand(0, rnd, bits, top, bottom);
+       }
+
+int     BN_pseudo_rand(BIGNUM *rnd, int bits, int top, int bottom)
+       {
+       return bnrand(1, rnd, bits, top, bottom);
+       }
Index: opensa/openssl/crypto/bn/bn_recp.c
diff -u opensa/openssl/crypto/bn/bn_recp.c:1.1 opensa/openssl/crypto/bn/bn_recp.c:1.2
--- opensa/openssl/crypto/bn/bn_recp.c:1.1      Tue Jan 25 23:33:10 2000
+++ opensa/openssl/crypto/bn/bn_recp.c  Thu Mar  2 21:11:51 2000
@@ -106,7 +106,8 @@
        int ret=0;
        BIGNUM *a;
 
-       a= &(ctx->bn[ctx->tos++]);
+       BN_CTX_start(ctx);
+       if ((a = BN_CTX_get(ctx)) == NULL) goto err;
        if (y != NULL)
                {
                if (x == y)
@@ -120,33 +121,34 @@
        BN_div_recp(NULL,r,a,recp,ctx);
        ret=1;
 err:
-       ctx->tos--;
+       BN_CTX_end(ctx);
        return(ret);
        }
 
 int BN_div_recp(BIGNUM *dv, BIGNUM *rem, BIGNUM *m, BN_RECP_CTX *recp,
             BN_CTX *ctx)
        {
-       int i,j,tos,ret=0,ex;
+       int i,j,ret=0;
        BIGNUM *a,*b,*d,*r;
 
-       tos=ctx->tos;
-       a= &(ctx->bn[ctx->tos++]);
-       b= &(ctx->bn[ctx->tos++]);
+       BN_CTX_start(ctx);
+       a=BN_CTX_get(ctx);
+       b=BN_CTX_get(ctx);
        if (dv != NULL)
                d=dv;
        else
-               d= &(ctx->bn[ctx->tos++]);
+               d=BN_CTX_get(ctx);
        if (rem != NULL)
                r=rem;
        else
-               r= &(ctx->bn[ctx->tos++]);
+               r=BN_CTX_get(ctx);
+       if (a == NULL || b == NULL || d == NULL || r == NULL) goto err;
 
        if (BN_ucmp(m,&(recp->N)) < 0)
                {
                BN_zero(d);
                BN_copy(r,m);
-               ctx->tos=tos;
+               BN_CTX_end(ctx);
                return(1);
                }
 
@@ -157,33 +159,24 @@
         */
        i=BN_num_bits(m);
 
-       j=recp->num_bits*2;
-       if (j > i)
-               {
-               i=j;
-               ex=0;
-               }
-       else
-               {
-               ex=(i-j)/2;
-               }
-
-       j=i/2;
+       j=recp->num_bits<<1;
+       if (j>i) i=j;
+       j>>=1;
 
        if (i != recp->shift)
                recp->shift=BN_reciprocal(&(recp->Nr),&(recp->N),
                        i,ctx);
 
-       if (!BN_rshift(a,m,j-ex)) goto err;
+       if (!BN_rshift(a,m,j)) goto err;
        if (!BN_mul(b,a,&(recp->Nr),ctx)) goto err;
-       if (!BN_rshift(d,b,j+ex)) goto err;
+       if (!BN_rshift(d,b,i-j)) goto err;
        d->neg=0;
        if (!BN_mul(b,&(recp->N),d,ctx)) goto err;
        if (!BN_usub(r,m,b)) goto err;
        r->neg=0;
 
-       j=0;
 #if 1
+       j=0;
        while (BN_ucmp(r,&(recp->N)) >= 0)
                {
                if (j++ > 2)
@@ -200,7 +193,7 @@
        d->neg=m->neg^recp->N.neg;
        ret=1;
 err:
-       ctx->tos=tos;
+       BN_CTX_end(ctx);
        return(ret);
        } 
 
Index: opensa/openssl/crypto/bn/bn_sqr.c
diff -u opensa/openssl/crypto/bn/bn_sqr.c:1.1 opensa/openssl/crypto/bn/bn_sqr.c:1.2
--- opensa/openssl/crypto/bn/bn_sqr.c:1.1       Tue Jan 25 23:33:10 2000
+++ opensa/openssl/crypto/bn/bn_sqr.c   Thu Mar  2 21:11:51 2000
@@ -65,14 +65,13 @@
 int BN_sqr(BIGNUM *r, BIGNUM *a, BN_CTX *ctx)
        {
        int max,al;
+       int ret = 0;
        BIGNUM *tmp,*rr;
 
 #ifdef BN_COUNT
 printf("BN_sqr %d * %d\n",a->top,a->top);
 #endif
        bn_check_top(a);
-       tmp= &(ctx->bn[ctx->tos]);
-       rr=(a != r)?r: (&ctx->bn[ctx->tos+1]);
 
        al=a->top;
        if (al <= 0)
@@ -81,8 +80,13 @@
                return(1);
                }
 
+       BN_CTX_start(ctx);
+       rr=(a != r) ? r : BN_CTX_get(ctx);
+       tmp=BN_CTX_get(ctx);
+       if (tmp == NULL) goto err;
+
        max=(al+al);
-       if (bn_wexpand(rr,max+1) == NULL) return(0);
+       if (bn_wexpand(rr,max+1) == NULL) goto err;
 
        r->neg=0;
        if (al == 4)
@@ -120,18 +124,18 @@
                        k=j+j;
                        if (al == j)
                                {
-                               if (bn_wexpand(a,k*2) == NULL) return(0);
-                               if (bn_wexpand(tmp,k*2) == NULL) return(0);
+                               if (bn_wexpand(a,k*2) == NULL) goto err;
+                               if (bn_wexpand(tmp,k*2) == NULL) goto err;
                                bn_sqr_recursive(rr->d,a->d,al,tmp->d);
                                }
                        else
                                {
-                               if (bn_wexpand(tmp,max) == NULL) return(0);
+                               if (bn_wexpand(tmp,max) == NULL) goto err;
                                bn_sqr_normal(rr->d,a->d,al,tmp->d);
                                }
                        }
 #else
-               if (bn_wexpand(tmp,max) == NULL) return(0);
+               if (bn_wexpand(tmp,max) == NULL) goto err;
                bn_sqr_normal(rr->d,a->d,al,tmp->d);
 #endif
                }
@@ -139,7 +143,10 @@
        rr->top=max;
        if ((max > 0) && (rr->d[max-1] == 0)) rr->top--;
        if (rr != r) BN_copy(r,rr);
-       return(1);
+       ret = 1;
+ err:
+       BN_CTX_end(ctx);
+       return(ret);
        }
 
 /* tmp must have 2*n words */
@@ -185,7 +192,7 @@
  * n must be a power of 2.
  * We multiply and return the result.
  * t must be 2*n words in size
- * We calulate
+ * We calculate
  * a[0]*b[0]
  * a[0]*b[0]+a[1]*b[1]+(a[0]-a[1])*(b[1]-b[0])
  * a[1]*b[1]
Index: opensa/openssl/crypto/bn/bn_word.c
diff -u opensa/openssl/crypto/bn/bn_word.c:1.1 opensa/openssl/crypto/bn/bn_word.c:1.2
--- opensa/openssl/crypto/bn/bn_word.c:1.1      Tue Jan 25 23:33:10 2000
+++ opensa/openssl/crypto/bn/bn_word.c  Thu Mar  2 21:11:51 2000
@@ -60,7 +60,7 @@
 #include "cryptlib.h"
 #include "bn_lcl.h"
 
-BN_ULONG BN_mod_word(BIGNUM *a, BN_ULONG w)
+BN_ULONG BN_mod_word(const BIGNUM *a, BN_ULONG w)
        {
 #ifndef BN_LLONG
        BN_ULONG ret=0;
Index: opensa/openssl/crypto/bn/bnspeed.c
diff -u opensa/openssl/crypto/bn/bnspeed.c:1.1 opensa/openssl/crypto/bn/bnspeed.c:1.2
--- opensa/openssl/crypto/bn/bnspeed.c:1.1      Tue Jan 25 23:33:10 2000
+++ opensa/openssl/crypto/bn/bnspeed.c  Thu Mar  2 21:11:51 2000
@@ -1,3 +1,5 @@
+/* unused */
+
 /* crypto/bn/bnspeed.c */
 /* Copyright (C) 1995-1998 Eric Young ([EMAIL PROTECTED])
  * All rights reserved.
Index: opensa/openssl/crypto/bn/bntest.c
diff -u opensa/openssl/crypto/bn/bntest.c:1.1 opensa/openssl/crypto/bn/bntest.c:1.2
--- opensa/openssl/crypto/bn/bntest.c:1.1       Tue Jan 25 23:33:10 2000
+++ opensa/openssl/crypto/bn/bntest.c   Thu Mar  2 21:11:51 2000
@@ -72,6 +72,10 @@
 #include "../bio/bss_file.c"
 #endif
 
+const int num0 = 100; /* number of tests */
+const int num1 = 50;  /* additional tests for some functions */
+const int num2 = 5;   /* number of tests for slow functions */
+
 int test_add(BIO *bp);
 int test_sub(BIO *bp);
 int test_lshift1(BIO *bp);
@@ -95,15 +99,33 @@
 #include "bss_file.c"
 #endif
 
-static unsigned char lst1[]="\xC6\x4F\x43\x04\x2A\xEA\xCA\x6E\x58\x36\x80\x5B\xE8\xC9"
+static unsigned char lst[]="\xC6\x4F\x43\x04\x2A\xEA\xCA\x6E\x58\x36\x80\x5B\xE8\xC9"
 "\x9B\x04\x5D\x48\x36\xC2\xFD\x16\xC9\x64\xF0";
 
+static const char rnd_seed[] = "string to make the random number generator think it 
+has entropy";
+
+static void message(BIO *out, char *m)
+       {
+       fprintf(stderr, "test %s\n", m);
+#if defined(linux) || defined(__FreeBSD__) /* can we use GNU bc features? */
+       BIO_puts(out, "print \"test ");
+       BIO_puts(out, m);
+       BIO_puts(out, "\\n\"\n");
+#endif
+       }
+
 int main(int argc, char *argv[])
        {
        BN_CTX *ctx;
        BIO *out;
        char *outfile=NULL;
 
+       results = 0;
+
+       RAND_seed(rnd_seed, sizeof rnd_seed); /* or BN_rand may fail, and we don't
+                                              * even check its return value
+                                              * (which we should) */
+
        argc--;
        argv++;
        while (argc >= 1)
@@ -141,78 +163,81 @@
        if (!results)
                BIO_puts(out,"obase=16\nibase=16\n");
 
-       fprintf(stderr,"test BN_add\n");
+       message(out,"BN_add");
        if (!test_add(out)) goto err;
-       fflush(stdout);
+       BIO_flush(out);
 
-       fprintf(stderr,"test BN_sub\n");
+       message(out,"BN_sub");
        if (!test_sub(out)) goto err;
-       fflush(stdout);
+       BIO_flush(out);
 
-       fprintf(stderr,"test BN_lshift1\n");
+       message(out,"BN_lshift1");
        if (!test_lshift1(out)) goto err;
-       fflush(stdout);
+       BIO_flush(out);
 
-       fprintf(stderr,"test BN_lshift (fixed)\n");
-       if (!test_lshift(out,ctx,BN_bin2bn(lst1,sizeof(lst1)-1,NULL)))
+       message(out,"BN_lshift (fixed)");
+       if (!test_lshift(out,ctx,BN_bin2bn(lst,sizeof(lst)-1,NULL)))
            goto err;
-       fflush(stdout);
+       BIO_flush(out);
 
-       fprintf(stderr,"test BN_lshift\n");
+       message(out,"BN_lshift");
        if (!test_lshift(out,ctx,NULL)) goto err;
-       fflush(stdout);
+       BIO_flush(out);
 
-       fprintf(stderr,"test BN_rshift1\n");
+       message(out,"BN_rshift1");
        if (!test_rshift1(out)) goto err;
-       fflush(stdout);
+       BIO_flush(out);
 
-       fprintf(stderr,"test BN_rshift\n");
+       message(out,"BN_rshift");
        if (!test_rshift(out,ctx)) goto err;
-       fflush(stdout);
+       BIO_flush(out);
 
-       fprintf(stderr,"test BN_sqr\n");
+       message(out,"BN_sqr");
        if (!test_sqr(out,ctx)) goto err;
-       fflush(stdout);
+       BIO_flush(out);
 
-       fprintf(stderr,"test BN_mul\n");
+       message(out,"BN_mul");
        if (!test_mul(out)) goto err;
-       fflush(stdout);
+       BIO_flush(out);
 
-       fprintf(stderr,"test BN_div\n");
+       message(out,"BN_div");
        if (!test_div(out,ctx)) goto err;
-       fflush(stdout);
+       BIO_flush(out);
 
-       fprintf(stderr,"test BN_div_recp\n");
+       message(out,"BN_div_recp");
        if (!test_div_recp(out,ctx)) goto err;
-       fflush(stdout);
+       BIO_flush(out);
 
-       fprintf(stderr,"test BN_mod\n");
+       message(out,"BN_mod");
        if (!test_mod(out,ctx)) goto err;
-       fflush(stdout);
+       BIO_flush(out);
 
-       fprintf(stderr,"test BN_mod_mul\n");
+       message(out,"BN_mod_mul");
        if (!test_mod_mul(out,ctx)) goto err;
-       fflush(stdout);
+       BIO_flush(out);
 
-/*
-       fprintf(stderr,"test BN_mont\n");
+       message(out,"BN_mont");
        if (!test_mont(out,ctx)) goto err;
-       fflush(stdout);
-*/
-       fprintf(stderr,"test BN_mod_exp\n");
+       BIO_flush(out);
+
+       message(out,"BN_mod_exp");
        if (!test_mod_exp(out,ctx)) goto err;
-       fflush(stdout);
+       BIO_flush(out);
 
-       fprintf(stderr,"test BN_exp\n");
+       message(out,"BN_exp");
        if (!test_exp(out,ctx)) goto err;
-       fflush(stdout);
+       BIO_flush(out);
 
+       BN_CTX_free(ctx);
+       BIO_free(out);
+
 /**/
        exit(0);
 err:
        BIO_puts(out,"1\n"); /* make sure bc fails if we are piping to it */
+       BIO_flush(out);
        ERR_load_crypto_strings();
-       ERR_print_errors(out);
+       ERR_print_errors_fp(stderr);
        exit(1);
        return(1);
        }
@@ -228,7 +253,7 @@
        BN_init(&c);
 
        BN_rand(&a,512,0,0);
-       for (i=0; i<100; i++)
+       for (i=0; i<num0; i++)
                {
                BN_rand(&b,450+i,0,0);
                a.neg=rand_neg();
@@ -255,7 +280,7 @@
                BN_add(&c,&c,&a);
                if(!BN_is_zero(&c))
                    {
-                   BIO_puts(bp,"Add test failed!\n");
+                   fprintf(stderr,"Add test failed!\n");
                    return 0;
                    }
                }
@@ -275,12 +300,21 @@
        BN_init(&b);
        BN_init(&c);
 
-       BN_rand(&a,512,0,0);
-       for (i=0; i<100; i++)
+       for (i=0; i<num0+num1; i++)
                {
-               BN_rand(&b,400+i,0,0);
-               a.neg=rand_neg();
-               b.neg=rand_neg();
+               if (i < num1)
+                       {
+                       BN_rand(&a,512,0,0);
+                       BN_copy(&b,&a);
+                       if (BN_set_bit(&a,i)==0) return(0);
+                       BN_add_word(&b,i);
+                       }
+               else
+                       {
+                       BN_rand(&b,400+i-num1,0,0);
+                       a.neg=rand_neg();
+                       b.neg=rand_neg();
+                       }
                if (bp == NULL)
                        for (j=0; j<10000; j++)
                                BN_sub(&c,&a,&b);
@@ -301,7 +335,7 @@
                BN_sub(&c,&c,&a);
                if(!BN_is_zero(&c))
                    {
-                   BIO_puts(bp,"Subtract test failed!\n");
+                   fprintf(stderr,"Subtract test failed!\n");
                    return 0;
                    }
                }
@@ -323,10 +357,17 @@
        BN_init(&d);
        BN_init(&e);
 
-       BN_rand(&a,400,0,0);
-       for (i=0; i<100; i++)
+       for (i=0; i<num0+num1; i++)
                {
-               BN_rand(&b,50+i,0,0);
+               if (i < num1)
+                       {
+                       BN_rand(&a,400,0,0);
+                       BN_copy(&b,&a);
+                       BN_lshift(&a,&a,i);
+                       BN_add_word(&a,i);
+                       }
+               else
+                       BN_rand(&b,50+3*(i-num1),0,0);
                a.neg=rand_neg();
                b.neg=rand_neg();
                if (bp == NULL)
@@ -360,7 +401,7 @@
                BN_sub(&d,&d,&a);
                if(!BN_is_zero(&d))
                    {
-                   BIO_puts(bp,"Division test failed!\n");
+                   fprintf(stderr,"Division test failed!\n");
                    return 0;
                    }
                }
@@ -386,10 +427,17 @@
        BN_init(&d);
        BN_init(&e);
 
-       BN_rand(&a,400,0,0);
-       for (i=0; i<100; i++)
+       for (i=0; i<num0+num1; i++)
                {
-               BN_rand(&b,50+i,0,0);
+               if (i < num1)
+                       {
+                       BN_rand(&a,400,0,0);
+                       BN_copy(&b,&a);
+                       BN_lshift(&a,&a,i);
+                       BN_add_word(&a,i);
+                       }
+               else
+                       BN_rand(&b,50+3*(i-num1),0,0);
                a.neg=rand_neg();
                b.neg=rand_neg();
                BN_RECP_CTX_set(&recp,&b,ctx);
@@ -424,7 +472,12 @@
                BN_sub(&d,&d,&a);
                if(!BN_is_zero(&d))
                    {
-                   BIO_puts(bp,"Reciprocal division test failed!\n");
+                   fprintf(stderr,"Reciprocal division test failed!\n");
+                   fprintf(stderr,"a=");
+                   BN_print_fp(stderr,&a);
+                   fprintf(stderr,"\nb=");
+                   BN_print_fp(stderr,&b);
+                   fprintf(stderr,"\n");
                    return 0;
                    }
                }
@@ -451,11 +504,15 @@
        BN_init(&d);
        BN_init(&e);
 
-       BN_rand(&a,200,0,0);
-       for (i=0; i<100; i++)
+       for (i=0; i<num0+num1; i++)
                {
-               BN_rand(&b,250+i,0,0);
-               BN_rand(&b,200,0,0);
+               if (i <= num1)
+                       {
+                       BN_rand(&a,100,0,0);
+                       BN_rand(&b,100,0,0);
+                       }
+               else
+                       BN_rand(&b,i-num1,0,0);
                a.neg=rand_neg();
                b.neg=rand_neg();
                if (bp == NULL)
@@ -478,7 +535,7 @@
                BN_sub(&d,&d,&b);
                if(!BN_is_zero(&d) || !BN_is_zero(&e))
                    {
-                   BIO_puts(bp,"Multiplication test failed!\n");
+                   fprintf(stderr,"Multiplication test failed!\n");
                    return 0;
                    }
                }
@@ -502,7 +559,7 @@
        BN_init(&d);
        BN_init(&e);
 
-       for (i=0; i<40; i++)
+       for (i=0; i<num0; i++)
                {
                BN_rand(&a,40+i*10,0,0);
                a.neg=rand_neg();
@@ -526,7 +583,7 @@
                BN_sub(&d,&d,&a);
                if(!BN_is_zero(&d) || !BN_is_zero(&e))
                    {
-                   BIO_puts(bp,"Square test failed!\n");
+                   fprintf(stderr,"Square test failed!\n");
                    return 0;
                    }
                }
@@ -557,9 +614,13 @@
 
        BN_rand(&a,100,0,0); /**/
        BN_rand(&b,100,0,0); /**/
-       for (i=0; i<10; i++)
+       for (i=0; i<num2; i++)
                {
-               BN_rand(&n,(100%BN_BITS2+1)*BN_BITS2*i*BN_BITS2,0,1); /**/
+               int bits = (200*(i+1))/num2;
+
+               if (bits == 0)
+                       continue;
+               BN_rand(&n,bits,0,1);
                BN_MONT_CTX_set(mont,&n,ctx);
 
                BN_to_montgomery(&A,&a,mont,ctx);
@@ -594,7 +655,7 @@
                BN_sub(&d,&d,&A);
                if(!BN_is_zero(&d))
                    {
-                   BIO_puts(bp,"Montgomery multiplication test failed!\n");
+                   fprintf(stderr,"Montgomery multiplication test failed!\n");
                    return 0;
                    }
                }
@@ -622,7 +683,7 @@
        e=BN_new();
 
        BN_rand(a,1024,0,0); /**/
-       for (i=0; i<20; i++)
+       for (i=0; i<num0; i++)
                {
                BN_rand(b,450+i*10,0,0); /**/
                a->neg=rand_neg();
@@ -647,7 +708,7 @@
                BN_sub(e,e,c);
                if(!BN_is_zero(e))
                    {
-                   BIO_puts(bp,"Modulo test failed!\n");
+                   fprintf(stderr,"Modulo test failed!\n");
                    return 0;
                    }
                }
@@ -671,10 +732,10 @@
        e=BN_new();
 
        BN_rand(c,1024,0,0); /**/
-       for (i=0; i<10; i++)
+       for (i=0; i<num0; i++)
                {
                BN_rand(a,475+i*10,0,0); /**/
-               BN_rand(b,425+i*10,0,0); /**/
+               BN_rand(b,425+i*11,0,0); /**/
                a->neg=rand_neg();
                b->neg=rand_neg();
        /*      if (bp == NULL)
@@ -709,7 +770,7 @@
                BN_div(a,b,d,c,ctx);
                if(!BN_is_zero(b))
                    {
-                   BIO_puts(bp,"Modulo multiply test failed!\n");
+                   fprintf(stderr,"Modulo multiply test failed!\n");
                    return 0;
                    }
                }
@@ -733,7 +794,7 @@
        e=BN_new();
 
        BN_rand(c,30,0,1); /* must be odd for montgomery */
-       for (i=0; i<6; i++)
+       for (i=0; i<num2; i++)
                {
                BN_rand(a,20+i*5,0,0); /**/
                BN_rand(b,2+i,0,0); /**/
@@ -760,7 +821,7 @@
                BN_div(a,b,e,c,ctx);
                if(!BN_is_zero(b))
                    {
-                   BIO_puts(bp,"Modulo exponentiation test failed!\n");
+                   fprintf(stderr,"Modulo exponentiation test failed!\n");
                    return 0;
                    }
                }
@@ -784,7 +845,7 @@
        one=BN_new();
        BN_one(one);
 
-       for (i=0; i<6; i++)
+       for (i=0; i<num2; i++)
                {
                BN_rand(a,20+i*5,0,0); /**/
                BN_rand(b,2+i,0,0); /**/
@@ -810,7 +871,7 @@
                BN_sub(e,e,d);
                if(!BN_is_zero(e))
                    {
-                   BIO_puts(bp,"Exponentiation test failed!\n");
+                   fprintf(stderr,"Exponentiation test failed!\n");
                    return 0;
                    }
                }
@@ -840,7 +901,7 @@
            BN_rand(a,200,0,0); /**/
            a->neg=rand_neg();
            }
-       for (i=0; i<70; i++)
+       for (i=0; i<num0; i++)
                {
                BN_lshift(b,a,i+1);
                BN_add(c,c,c);
@@ -860,16 +921,16 @@
                BN_sub(d,d,b);
                if(!BN_is_zero(d))
                    {
-                   BIO_puts(bp,"Left shift test failed!\n");
-                   BIO_puts(bp,"a=");
-                   BN_print(bp,a);
-                   BIO_puts(bp,"\nb=");
-                   BN_print(bp,b);
-                   BIO_puts(bp,"\nc=");
-                   BN_print(bp,c);
-                   BIO_puts(bp,"\nd=");
-                   BN_print(bp,d);
-                   BIO_puts(bp,"\n");
+                   fprintf(stderr,"Left shift test failed!\n");
+                   fprintf(stderr,"a=");
+                   BN_print_fp(stderr,a);
+                   fprintf(stderr,"\nb=");
+                   BN_print_fp(stderr,b);
+                   fprintf(stderr,"\nc=");
+                   BN_print_fp(stderr,c);
+                   fprintf(stderr,"\nd=");
+                   BN_print_fp(stderr,d);
+                   fprintf(stderr,"\n");
                    return 0;
                    }
                }
@@ -891,7 +952,7 @@
 
        BN_rand(a,200,0,0); /**/
        a->neg=rand_neg();
-       for (i=0; i<70; i++)
+       for (i=0; i<num0; i++)
                {
                BN_lshift1(b,a);
                if (bp != NULL)
@@ -909,7 +970,7 @@
                BN_sub(a,b,c);
                if(!BN_is_zero(a))
                    {
-                   BIO_puts(bp,"Left shift one test failed!\n");
+                   fprintf(stderr,"Left shift one test failed!\n");
                    return 0;
                    }
                
@@ -935,7 +996,7 @@
 
        BN_rand(a,200,0,0); /**/
        a->neg=rand_neg();
-       for (i=0; i<70; i++)
+       for (i=0; i<num0; i++)
                {
                BN_rshift(b,a,i+1);
                BN_add(c,c,c);
@@ -955,7 +1016,7 @@
                BN_sub(d,d,b);
                if(!BN_is_zero(d))
                    {
-                   BIO_puts(bp,"Right shift test failed!\n");
+                   fprintf(stderr,"Right shift test failed!\n");
                    return 0;
                    }
                }
@@ -978,7 +1039,7 @@
 
        BN_rand(a,200,0,0); /**/
        a->neg=rand_neg();
-       for (i=0; i<70; i++)
+       for (i=0; i<num0; i++)
                {
                BN_rshift1(b,a);
                if (bp != NULL)
@@ -996,7 +1057,7 @@
                BN_sub(c,c,b);
                if(!BN_is_zero(c) && !BN_is_one(c))
                    {
-                   BIO_puts(bp,"Right shift one test failed!\n");
+                   fprintf(stderr,"Right shift one test failed!\n");
                    return 0;
                    }
                BN_copy(a,b);
Index: opensa/openssl/crypto/bn/exp.c
diff -u opensa/openssl/crypto/bn/exp.c:1.1 opensa/openssl/crypto/bn/exp.c:1.2
--- opensa/openssl/crypto/bn/exp.c:1.1  Tue Jan 25 23:33:10 2000
+++ opensa/openssl/crypto/bn/exp.c      Thu Mar  2 21:11:52 2000
@@ -1,3 +1,5 @@
+/* unused */
+
 #include <stdio.h>
 #include <openssl/tmdiff.h>
 #include "bn_lcl.h"
Index: opensa/openssl/crypto/bn/expspeed.c
diff -u opensa/openssl/crypto/bn/expspeed.c:1.1 opensa/openssl/crypto/bn/expspeed.c:1.2
--- opensa/openssl/crypto/bn/expspeed.c:1.1     Tue Jan 25 23:33:10 2000
+++ opensa/openssl/crypto/bn/expspeed.c Thu Mar  2 21:11:52 2000
@@ -1,3 +1,5 @@
+/* unused */
+
 /* crypto/bn/expspeed.c */
 /* Copyright (C) 1995-1998 Eric Young ([EMAIL PROTECTED])
  * All rights reserved.
Index: opensa/openssl/crypto/bn/exptest.c
diff -u opensa/openssl/crypto/bn/exptest.c:1.1 opensa/openssl/crypto/bn/exptest.c:1.2
--- opensa/openssl/crypto/bn/exptest.c:1.1      Tue Jan 25 23:33:10 2000
+++ opensa/openssl/crypto/bn/exptest.c  Thu Mar  2 21:11:52 2000
@@ -69,6 +69,8 @@
 
 #define NUM_BITS       (BN_BITS*2)
 
+static const char rnd_seed[] = "string to make the random number generator think it 
+has entropy";
+
 int main(int argc, char *argv[])
        {
        BN_CTX *ctx;
@@ -77,6 +79,10 @@
        unsigned char c;
        BIGNUM *r_mont,*r_recp,*r_simple,*a,*b,*m;
 
+       RAND_seed(rnd_seed, sizeof rnd_seed); /* or BN_rand may fail, and we don't
+                                              * even check its return value
+                                              * (which we should) */
+
        ERR_load_BN_strings();
 
        ctx=BN_CTX_new();
@@ -160,7 +166,16 @@
                        exit(1);
                        }
                }
+       BN_free(r_mont);
+       BN_free(r_recp);
+       BN_free(r_simple);
+       BN_free(a);
+       BN_free(b);
+       BN_free(m);
+       BN_CTX_free(ctx);
+       ERR_remove_state(0);
        CRYPTO_mem_leaks(out);
+       BIO_free(out);
        printf(" done\n");
        exit(0);
 err:
Index: opensa/openssl/crypto/bn/makefile.ssl
diff -u opensa/openssl/crypto/bn/makefile.ssl:1.1 
opensa/openssl/crypto/bn/makefile.ssl:1.2
--- opensa/openssl/crypto/bn/makefile.ssl:1.1   Tue Jan 25 23:33:10 2000
+++ opensa/openssl/crypto/bn/makefile.ssl       Thu Mar  2 21:11:52 2000
@@ -20,6 +20,13 @@
 #BN_ASM=       bn86-elf.o
 
 CFLAGS= $(INCLUDES) $(CFLAG)
+
+# We let the C compiler driver to take care of .s files. This is done in
+# order to be excused from maintaining a separate set of architecture
+# dependent assembler flags. E.g. if you throw -mcpu=ultrasparc at SPARC
+# gcc, then the driver will automatically translate it to -xarch=v8plus
+# and pass it down to assembler.
+AS=$(CC) -c
 ASFLAGS=$(CFLAGS)
 
 GENERAL=Makefile
@@ -27,12 +34,12 @@
 APPS=
 
 LIB=$(TOP)/libcrypto.a
-LIBSRC=        bn_add.c bn_div.c bn_exp.c bn_lib.c bn_mul.c \
+LIBSRC=        bn_add.c bn_div.c bn_exp.c bn_lib.c bn_ctx.c bn_mul.c \
        bn_print.c bn_rand.c bn_shift.c bn_word.c bn_blind.c \
        bn_gcd.c bn_prime.c bn_err.c bn_sqr.c bn_asm.c bn_recp.c bn_mont.c \
        bn_mpi.c bn_exp2.c
 
-LIBOBJ=        bn_add.o bn_div.o bn_exp.o bn_lib.o bn_mul.o \
+LIBOBJ=        bn_add.o bn_div.o bn_exp.o bn_lib.o bn_ctx.o bn_mul.o \
        bn_print.o bn_rand.o bn_shift.o bn_word.o bn_blind.o \
        bn_gcd.o bn_prime.o bn_err.o bn_sqr.o $(BN_ASM) bn_recp.o bn_mont.o \
        bn_mpi.o bn_exp2.o
@@ -49,12 +56,14 @@
 
 all:   lib
 
-knuth: bn_knuth.c
-       cc -pg -I.. -I../../include bn_knuth.c -o knuth $(LIB) #../../../libefence.a
+bn_prime.h: bn_prime.pl
+       $(PERL) bn_prime.pl >bn_prime.h
 
-knuth.fast: bn_knuth.c
-       cc -pg -fast -I.. -I../../include bn_knuth.c -o knuth $(LIB) 
#../../../libefence.a
+divtest: divtest.c ../../libcrypto.a
+       cc -I../../include divtest.c -o divtest ../../libcrypto.a
 
+bnbug: bnbug.c ../../libcrypto.a top
+       cc -g -I../../include bnbug.c -o bnbug ../../libcrypto.a
 
 lib:   $(LIBOBJ)
        $(AR) $(LIB) $(LIBOBJ)
@@ -113,13 +122,6 @@
        $(CC) $(ASFLAGS) -E asm/sparcv8plus.S | \
                /usr/ccs/bin/as -xarch=v8plus - -o asm/sparcv8plus-gcc27.o
 
-# MIPS 64 bit assember 
-asm/mips3.o: asm/mips3.s
-
-# MIPS 32 bit assember
-asm/mips1.o: asm/mips1.s
-       /usr/bin/as -O2 -o asm/mips1.o asm/mips1.s
-
 files:
        $(PERL) $(TOP)/util/files.pl Makefile.ssl >> $(TOP)/MINFO
 
@@ -168,109 +170,117 @@
 bn_add.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 bn_add.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h
 bn_add.o: ../../include/openssl/err.h ../../include/openssl/opensslconf.h
-bn_add.o: ../../include/openssl/opensslv.h ../../include/openssl/stack.h
-bn_add.o: ../cryptlib.h bn_lcl.h
+bn_add.o: ../../include/openssl/opensslv.h ../../include/openssl/safestack.h
+bn_add.o: ../../include/openssl/stack.h ../cryptlib.h bn_lcl.h
 bn_asm.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
 bn_asm.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 bn_asm.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h
 bn_asm.o: ../../include/openssl/err.h ../../include/openssl/opensslconf.h
-bn_asm.o: ../../include/openssl/opensslv.h ../../include/openssl/stack.h
-bn_asm.o: ../cryptlib.h bn_lcl.h
+bn_asm.o: ../../include/openssl/opensslv.h ../../include/openssl/safestack.h
+bn_asm.o: ../../include/openssl/stack.h ../cryptlib.h bn_lcl.h
 bn_blind.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
 bn_blind.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 bn_blind.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h
 bn_blind.o: ../../include/openssl/err.h ../../include/openssl/opensslconf.h
-bn_blind.o: ../../include/openssl/opensslv.h ../../include/openssl/stack.h
-bn_blind.o: ../cryptlib.h bn_lcl.h
+bn_blind.o: ../../include/openssl/opensslv.h ../../include/openssl/safestack.h
+bn_blind.o: ../../include/openssl/stack.h ../cryptlib.h bn_lcl.h
+bn_ctx.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
+bn_ctx.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
+bn_ctx.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h
+bn_ctx.o: ../../include/openssl/err.h ../../include/openssl/opensslconf.h
+bn_ctx.o: ../../include/openssl/opensslv.h ../../include/openssl/safestack.h
+bn_ctx.o: ../../include/openssl/stack.h ../cryptlib.h
 bn_div.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
 bn_div.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 bn_div.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h
 bn_div.o: ../../include/openssl/err.h ../../include/openssl/opensslconf.h
-bn_div.o: ../../include/openssl/opensslv.h ../../include/openssl/stack.h
-bn_div.o: ../cryptlib.h bn_lcl.h
+bn_div.o: ../../include/openssl/opensslv.h ../../include/openssl/safestack.h
+bn_div.o: ../../include/openssl/stack.h ../cryptlib.h bn_lcl.h
 bn_err.o: ../../include/openssl/bn.h ../../include/openssl/err.h
 bn_err.o: ../../include/openssl/opensslconf.h
 bn_exp.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
 bn_exp.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 bn_exp.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h
 bn_exp.o: ../../include/openssl/err.h ../../include/openssl/opensslconf.h
-bn_exp.o: ../../include/openssl/opensslv.h ../../include/openssl/stack.h
-bn_exp.o: ../cryptlib.h bn_lcl.h
+bn_exp.o: ../../include/openssl/opensslv.h ../../include/openssl/safestack.h
+bn_exp.o: ../../include/openssl/stack.h ../cryptlib.h bn_lcl.h
 bn_exp2.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
 bn_exp2.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 bn_exp2.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h
 bn_exp2.o: ../../include/openssl/err.h ../../include/openssl/opensslconf.h
-bn_exp2.o: ../../include/openssl/opensslv.h ../../include/openssl/stack.h
-bn_exp2.o: ../cryptlib.h bn_lcl.h
+bn_exp2.o: ../../include/openssl/opensslv.h ../../include/openssl/safestack.h
+bn_exp2.o: ../../include/openssl/stack.h ../cryptlib.h bn_lcl.h
 bn_gcd.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
 bn_gcd.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 bn_gcd.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h
 bn_gcd.o: ../../include/openssl/err.h ../../include/openssl/opensslconf.h
-bn_gcd.o: ../../include/openssl/opensslv.h ../../include/openssl/stack.h
-bn_gcd.o: ../cryptlib.h bn_lcl.h
+bn_gcd.o: ../../include/openssl/opensslv.h ../../include/openssl/safestack.h
+bn_gcd.o: ../../include/openssl/stack.h ../cryptlib.h bn_lcl.h
 bn_lib.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
 bn_lib.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 bn_lib.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h
 bn_lib.o: ../../include/openssl/err.h ../../include/openssl/opensslconf.h
-bn_lib.o: ../../include/openssl/opensslv.h ../../include/openssl/stack.h
-bn_lib.o: ../cryptlib.h bn_lcl.h
+bn_lib.o: ../../include/openssl/opensslv.h ../../include/openssl/safestack.h
+bn_lib.o: ../../include/openssl/stack.h ../cryptlib.h bn_lcl.h
 bn_mont.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
 bn_mont.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 bn_mont.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h
 bn_mont.o: ../../include/openssl/err.h ../../include/openssl/opensslconf.h
-bn_mont.o: ../../include/openssl/opensslv.h ../../include/openssl/stack.h
-bn_mont.o: ../cryptlib.h bn_lcl.h
+bn_mont.o: ../../include/openssl/opensslv.h ../../include/openssl/safestack.h
+bn_mont.o: ../../include/openssl/stack.h ../cryptlib.h bn_lcl.h
 bn_mpi.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
 bn_mpi.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 bn_mpi.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h
 bn_mpi.o: ../../include/openssl/err.h ../../include/openssl/opensslconf.h
-bn_mpi.o: ../../include/openssl/opensslv.h ../../include/openssl/stack.h
-bn_mpi.o: ../cryptlib.h bn_lcl.h
+bn_mpi.o: ../../include/openssl/opensslv.h ../../include/openssl/safestack.h
+bn_mpi.o: ../../include/openssl/stack.h ../cryptlib.h bn_lcl.h
 bn_mul.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
 bn_mul.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 bn_mul.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h
 bn_mul.o: ../../include/openssl/err.h ../../include/openssl/opensslconf.h
-bn_mul.o: ../../include/openssl/opensslv.h ../../include/openssl/stack.h
-bn_mul.o: ../cryptlib.h bn_lcl.h
+bn_mul.o: ../../include/openssl/opensslv.h ../../include/openssl/safestack.h
+bn_mul.o: ../../include/openssl/stack.h ../cryptlib.h bn_lcl.h
 bn_prime.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
 bn_prime.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 bn_prime.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h
 bn_prime.o: ../../include/openssl/err.h ../../include/openssl/opensslconf.h
 bn_prime.o: ../../include/openssl/opensslv.h ../../include/openssl/rand.h
-bn_prime.o: ../../include/openssl/stack.h ../cryptlib.h bn_lcl.h bn_prime.h
+bn_prime.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
+bn_prime.o: ../cryptlib.h bn_lcl.h bn_prime.h
 bn_print.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
 bn_print.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 bn_print.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h
 bn_print.o: ../../include/openssl/err.h ../../include/openssl/opensslconf.h
-bn_print.o: ../../include/openssl/opensslv.h ../../include/openssl/stack.h
-bn_print.o: ../cryptlib.h bn_lcl.h
+bn_print.o: ../../include/openssl/opensslv.h ../../include/openssl/safestack.h
+bn_print.o: ../../include/openssl/stack.h ../cryptlib.h bn_lcl.h
 bn_rand.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
 bn_rand.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 bn_rand.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h
 bn_rand.o: ../../include/openssl/err.h ../../include/openssl/opensslconf.h
 bn_rand.o: ../../include/openssl/opensslv.h ../../include/openssl/rand.h
-bn_rand.o: ../../include/openssl/stack.h ../cryptlib.h bn_lcl.h
+bn_rand.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
+bn_rand.o: ../cryptlib.h bn_lcl.h
 bn_recp.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
 bn_recp.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 bn_recp.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h
 bn_recp.o: ../../include/openssl/err.h ../../include/openssl/opensslconf.h
-bn_recp.o: ../../include/openssl/opensslv.h ../../include/openssl/stack.h
-bn_recp.o: ../cryptlib.h bn_lcl.h
+bn_recp.o: ../../include/openssl/opensslv.h ../../include/openssl/safestack.h
+bn_recp.o: ../../include/openssl/stack.h ../cryptlib.h bn_lcl.h
 bn_shift.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
 bn_shift.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 bn_shift.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h
 bn_shift.o: ../../include/openssl/err.h ../../include/openssl/opensslconf.h
-bn_shift.o: ../../include/openssl/opensslv.h ../../include/openssl/stack.h
-bn_shift.o: ../cryptlib.h bn_lcl.h
+bn_shift.o: ../../include/openssl/opensslv.h ../../include/openssl/safestack.h
+bn_shift.o: ../../include/openssl/stack.h ../cryptlib.h bn_lcl.h
 bn_sqr.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
 bn_sqr.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 bn_sqr.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h
 bn_sqr.o: ../../include/openssl/err.h ../../include/openssl/opensslconf.h
-bn_sqr.o: ../../include/openssl/opensslv.h ../../include/openssl/stack.h
-bn_sqr.o: ../cryptlib.h bn_lcl.h
+bn_sqr.o: ../../include/openssl/opensslv.h ../../include/openssl/safestack.h
+bn_sqr.o: ../../include/openssl/stack.h ../cryptlib.h bn_lcl.h
 bn_word.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
 bn_word.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 bn_word.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h
 bn_word.o: ../../include/openssl/err.h ../../include/openssl/opensslconf.h
-bn_word.o: ../../include/openssl/opensslv.h ../../include/openssl/stack.h
-bn_word.o: ../cryptlib.h bn_lcl.h
+bn_word.o: ../../include/openssl/opensslv.h ../../include/openssl/safestack.h
+bn_word.o: ../../include/openssl/stack.h ../cryptlib.h bn_lcl.h
Index: opensa/openssl/crypto/bn/asm/alpha.s
diff -u opensa/openssl/crypto/bn/asm/alpha.s:1.1 
opensa/openssl/crypto/bn/asm/alpha.s:1.2
--- opensa/openssl/crypto/bn/asm/alpha.s:1.1    Tue Jan 25 23:33:32 2000
+++ opensa/openssl/crypto/bn/asm/alpha.s        Thu Mar  2 21:11:52 2000
@@ -694,567 +694,1868 @@
 bn_mul_comba8..ng:
        .frame $30,0,$26,0
        .prologue 0
-
-       subq    $30,    16,     $30
-       ldq     $0,     0($17)
+       ldq     $1,     0($17)
+       ldq     $2,     0($18)
+       zapnot  $1,     15,     $7
+       srl     $2,     32,     $8
+       mulq    $8,     $7,     $22
+       srl     $1,     32,     $6
+       zapnot  $2,     15,     $5
+       mulq    $5,     $6,     $4
+       mulq    $7,     $5,     $24
+       addq    $22,    $4,     $22
+       cmpult  $22,    $4,     $1
+       mulq    $6,     $8,     $3
+       beq     $1,     $173
+       bis     $31,    1,      $1
+       sll     $1,     32,     $1
+       addq    $3,     $1,     $3
+$173:
+       sll     $22,    32,     $4
+       addq    $24,    $4,     $24
+       stq     $24,    0($16)
+       ldq     $2,     0($17)
+       ldq     $1,     8($18)
+       zapnot  $2,     15,     $7
+       srl     $1,     32,     $8
+       mulq    $8,     $7,     $25
+       zapnot  $1,     15,     $5
+       mulq    $7,     $5,     $0
+       srl     $2,     32,     $6
+       mulq    $5,     $6,     $23
+       mulq    $6,     $8,     $6
+       srl     $22,    32,     $1
+       cmpult  $24,    $4,     $2
+       addq    $3,     $1,     $3
+       addq    $2,     $3,     $22
+       addq    $25,    $23,    $25
+       cmpult  $25,    $23,    $1
+       bis     $31,    1,      $2
+       beq     $1,     $177
+       sll     $2,     32,     $1
+       addq    $6,     $1,     $6
+$177:
+       sll     $25,    32,     $23
        ldq     $1,     0($18)
-       stq     $9,     0($30)
-       stq     $10,    8($30)
-       ldq     $2,     8($17)
-       ldq     $3,     8($18)
-       ldq     $4,     16($17)
-       ldq     $5,     16($18)
-       ldq     $6,     24($17)
-       ldq     $7,     24($18)
-       ldq     $8,     8($17)
-       ldq     $22,    8($18)
-       ldq     $23,    8($17)
-       ldq     $24,    8($18)
-       ldq     $25,    8($17)
-       ldq     $27,    8($18)
-       ldq     $28,    8($17)
-       ldq     $21,    8($18)
-       bis     $31,    $31,    $9
-       mulq    $0,     $1,     $20
-       umulh   $0,     $1,     $19
-       stq     $20,    0($16)
-       bis     $31,    $31,    $20
-       mulq    $0,     $3,     $10
-       umulh   $0,     $3,     $17
-       addq    $19,    $10,    $19
-       cmpult  $19,    $10,    $18
-       addq    $18,    $17,    $17
-       addq    $9,     $17,    $9
-       cmpult  $9,     $17,    $10
-       addq    $20,    $10,    $20
-       mulq    $2,     $1,     $18
-       umulh   $2,     $1,     $17
-       addq    $19,    $18,    $19
-       cmpult  $19,    $18,    $10
-       addq    $10,    $17,    $17
-       addq    $9,     $17,    $9
-       cmpult  $9,     $17,    $18
-       addq    $20,    $18,    $20
-       stq     $19,    8($16)
-       bis     $31,    $31,    $19
-       mulq    $0,     $5,     $10
-       umulh   $0,     $5,     $17
-       addq    $9,     $10,    $9
-       cmpult  $9,     $10,    $18
-       addq    $18,    $17,    $17
-       addq    $20,    $17,    $20
-       cmpult  $20,    $17,    $10
-       addq    $19,    $10,    $19
-       mulq    $2,     $3,     $18
-       umulh   $2,     $3,     $17
-       addq    $9,     $18,    $9
-       cmpult  $9,     $18,    $10
-       addq    $10,    $17,    $17
-       addq    $20,    $17,    $20
-       cmpult  $20,    $17,    $18
-       addq    $19,    $18,    $19
-       mulq    $4,     $1,     $10
-       umulh   $4,     $1,     $17
-       addq    $9,     $10,    $9
-       cmpult  $9,     $10,    $18
-       addq    $18,    $17,    $17
-       addq    $20,    $17,    $20
-       cmpult  $20,    $17,    $10
-       addq    $19,    $10,    $19
-       stq     $9,     16($16)
-       bis     $31,    $31,    $9
-       mulq    $0,     $7,     $18
-       umulh   $0,     $7,     $17
-       addq    $20,    $18,    $20
-       cmpult  $20,    $18,    $10
-       addq    $10,    $17,    $17
-       addq    $19,    $17,    $19
-       cmpult  $19,    $17,    $18
-       addq    $9,     $18,    $9
-       mulq    $2,     $5,     $10
-       umulh   $2,     $5,     $17
-       addq    $20,    $10,    $20
-       cmpult  $20,    $10,    $18
-       addq    $18,    $17,    $17
-       addq    $19,    $17,    $19
-       cmpult  $19,    $17,    $10
-       addq    $9,     $10,    $9
-       mulq    $4,     $3,     $18
-       umulh   $4,     $3,     $17
-       addq    $20,    $18,    $20
-       cmpult  $20,    $18,    $10
-       addq    $10,    $17,    $17
-       addq    $19,    $17,    $19
-       cmpult  $19,    $17,    $18
-       addq    $9,     $18,    $9
-       mulq    $6,     $1,     $10
-       umulh   $6,     $1,     $17
-       addq    $20,    $10,    $20
-       cmpult  $20,    $10,    $18
-       addq    $18,    $17,    $17
-       addq    $19,    $17,    $19
-       cmpult  $19,    $17,    $10
-       addq    $9,     $10,    $9
-       stq     $20,    24($16)
-       bis     $31,    $31,    $20
-       mulq    $0,     $22,    $18
-       umulh   $0,     $22,    $17
-       addq    $19,    $18,    $19
-       cmpult  $19,    $18,    $10
-       addq    $10,    $17,    $17
-       addq    $9,     $17,    $9
-       cmpult  $9,     $17,    $18
-       addq    $20,    $18,    $20
-       mulq    $2,     $7,     $10
-       umulh   $2,     $7,     $17
-       addq    $19,    $10,    $19
-       cmpult  $19,    $10,    $18
-       addq    $18,    $17,    $17
-       addq    $9,     $17,    $9
-       cmpult  $9,     $17,    $10
-       addq    $20,    $10,    $20
-       mulq    $4,     $5,     $18
-       umulh   $4,     $5,     $17
-       addq    $19,    $18,    $19
-       cmpult  $19,    $18,    $10
-       addq    $10,    $17,    $17
-       addq    $9,     $17,    $9
-       cmpult  $9,     $17,    $18
-       addq    $20,    $18,    $20
-       mulq    $6,     $3,     $10
-       umulh   $6,     $3,     $17
-       addq    $19,    $10,    $19
-       cmpult  $19,    $10,    $18
-       addq    $18,    $17,    $17
-       addq    $9,     $17,    $9
-       cmpult  $9,     $17,    $10
-       addq    $20,    $10,    $20
-       mulq    $8,     $1,     $18
-       umulh   $8,     $1,     $17
-       addq    $19,    $18,    $19
-       cmpult  $19,    $18,    $10
-       addq    $10,    $17,    $17
-       addq    $9,     $17,    $9
-       cmpult  $9,     $17,    $18
-       addq    $20,    $18,    $20
-       stq     $19,    32($16)
-       bis     $31,    $31,    $19
-       mulq    $0,     $24,    $10
-       umulh   $0,     $24,    $17
-       addq    $9,     $10,    $9
-       cmpult  $9,     $10,    $18
-       addq    $18,    $17,    $17
-       addq    $20,    $17,    $20
-       cmpult  $20,    $17,    $10
-       addq    $19,    $10,    $19
-       mulq    $2,     $22,    $18
-       umulh   $2,     $22,    $17
-       addq    $9,     $18,    $9
-       cmpult  $9,     $18,    $10
-       addq    $10,    $17,    $17
-       addq    $20,    $17,    $20
-       cmpult  $20,    $17,    $18
-       addq    $19,    $18,    $19
-       mulq    $4,     $7,     $10
-       umulh   $4,     $7,     $17
-       addq    $9,     $10,    $9
-       cmpult  $9,     $10,    $18
-       addq    $18,    $17,    $17
-       addq    $20,    $17,    $20
-       cmpult  $20,    $17,    $10
-       addq    $19,    $10,    $19
-       mulq    $6,     $5,     $18
-       umulh   $6,     $5,     $17
-       addq    $9,     $18,    $9
-       cmpult  $9,     $18,    $10
-       addq    $10,    $17,    $17
-       addq    $20,    $17,    $20
-       cmpult  $20,    $17,    $18
-       addq    $19,    $18,    $19
-       mulq    $8,     $3,     $10
-       umulh   $8,     $3,     $17
-       addq    $9,     $10,    $9
-       cmpult  $9,     $10,    $18
-       addq    $18,    $17,    $17
-       addq    $20,    $17,    $20
-       cmpult  $20,    $17,    $10
-       addq    $19,    $10,    $19
-       mulq    $23,    $1,     $18
-       umulh   $23,    $1,     $17
-       addq    $9,     $18,    $9
-       cmpult  $9,     $18,    $10
-       addq    $10,    $17,    $17
-       addq    $20,    $17,    $20
-       cmpult  $20,    $17,    $18
-       addq    $19,    $18,    $19
-       stq     $9,     40($16)
-       bis     $31,    $31,    $9
-       mulq    $0,     $27,    $10
-       umulh   $0,     $27,    $17
-       addq    $20,    $10,    $20
-       cmpult  $20,    $10,    $18
-       addq    $18,    $17,    $17
-       addq    $19,    $17,    $19
-       cmpult  $19,    $17,    $10
-       addq    $9,     $10,    $9
-       mulq    $2,     $24,    $18
-       umulh   $2,     $24,    $17
-       addq    $20,    $18,    $20
-       cmpult  $20,    $18,    $10
-       addq    $10,    $17,    $17
-       addq    $19,    $17,    $19
-       cmpult  $19,    $17,    $18
-       addq    $9,     $18,    $9
-       mulq    $4,     $22,    $10
-       umulh   $4,     $22,    $17
-       addq    $20,    $10,    $20
-       cmpult  $20,    $10,    $18
-       addq    $18,    $17,    $17
-       addq    $19,    $17,    $19
-       cmpult  $19,    $17,    $10
-       addq    $9,     $10,    $9
-       mulq    $6,     $7,     $18
-       umulh   $6,     $7,     $17
-       addq    $20,    $18,    $20
-       cmpult  $20,    $18,    $10
-       addq    $10,    $17,    $17
-       addq    $19,    $17,    $19
-       cmpult  $19,    $17,    $18
-       addq    $9,     $18,    $9
-       mulq    $8,     $5,     $10
-       umulh   $8,     $5,     $17
-       addq    $20,    $10,    $20
-       cmpult  $20,    $10,    $18
-       addq    $18,    $17,    $17
-       addq    $19,    $17,    $19
-       cmpult  $19,    $17,    $10
-       addq    $9,     $10,    $9
-       mulq    $23,    $3,     $18
-       umulh   $23,    $3,     $17
-       addq    $20,    $18,    $20
-       cmpult  $20,    $18,    $10
-       addq    $10,    $17,    $17
-       addq    $19,    $17,    $19
-       cmpult  $19,    $17,    $18
-       addq    $9,     $18,    $9
-       mulq    $25,    $1,     $10
-       umulh   $25,    $1,     $17
-       addq    $20,    $10,    $20
-       cmpult  $20,    $10,    $18
-       addq    $18,    $17,    $17
-       addq    $19,    $17,    $19
-       cmpult  $19,    $17,    $10
-       addq    $9,     $10,    $9
-       stq     $20,    48($16)
-       bis     $31,    $31,    $20
-       mulq    $0,     $21,    $18
-       umulh   $0,     $21,    $17
-       addq    $19,    $18,    $19
-       cmpult  $19,    $18,    $10
-       addq    $10,    $17,    $17
-       addq    $9,     $17,    $9
-       cmpult  $9,     $17,    $18
-       addq    $20,    $18,    $20
-       mulq    $2,     $27,    $10
-       umulh   $2,     $27,    $17
-       addq    $19,    $10,    $19
-       cmpult  $19,    $10,    $18
-       addq    $18,    $17,    $17
-       addq    $9,     $17,    $9
-       cmpult  $9,     $17,    $0
-       addq    $20,    $0,     $20
-       mulq    $4,     $24,    $10
-       umulh   $4,     $24,    $18
-       addq    $19,    $10,    $19
-       cmpult  $19,    $10,    $17
-       addq    $17,    $18,    $18
-       addq    $9,     $18,    $9
-       cmpult  $9,     $18,    $0
-       addq    $20,    $0,     $20
-       mulq    $6,     $22,    $10
-       umulh   $6,     $22,    $17
-       addq    $19,    $10,    $19
-       cmpult  $19,    $10,    $18
-       addq    $18,    $17,    $17
-       addq    $9,     $17,    $9
-       cmpult  $9,     $17,    $0
-       addq    $20,    $0,     $20
-       mulq    $8,     $7,     $10
-       umulh   $8,     $7,     $18
-       addq    $19,    $10,    $19
-       cmpult  $19,    $10,    $17
-       addq    $17,    $18,    $18
-       addq    $9,     $18,    $9
-       cmpult  $9,     $18,    $0
-       addq    $20,    $0,     $20
-       mulq    $23,    $5,     $10
-       umulh   $23,    $5,     $17
-       addq    $19,    $10,    $19
-       cmpult  $19,    $10,    $18
-       addq    $18,    $17,    $17
-       addq    $9,     $17,    $9
-       cmpult  $9,     $17,    $0
-       addq    $20,    $0,     $20
-       mulq    $25,    $3,     $10
-       umulh   $25,    $3,     $18
-       addq    $19,    $10,    $19
-       cmpult  $19,    $10,    $17
-       addq    $17,    $18,    $18
-       addq    $9,     $18,    $9
-       cmpult  $9,     $18,    $0
-       addq    $20,    $0,     $20
-       mulq    $28,    $1,     $10
-       umulh   $28,    $1,     $17
-       addq    $19,    $10,    $19
-       cmpult  $19,    $10,    $18
-       addq    $18,    $17,    $17
-       addq    $9,     $17,    $9
-       cmpult  $9,     $17,    $0
-       addq    $20,    $0,     $20
-       stq     $19,    56($16)
-       bis     $31,    $31,    $19
-       mulq    $2,     $21,    $10
-       umulh   $2,     $21,    $18
-       addq    $9,     $10,    $9
-       cmpult  $9,     $10,    $17
-       addq    $17,    $18,    $18
-       addq    $20,    $18,    $20
-       cmpult  $20,    $18,    $0
-       addq    $19,    $0,     $19
-       mulq    $4,     $27,    $1
-       umulh   $4,     $27,    $10
-       addq    $9,     $1,     $9
-       cmpult  $9,     $1,     $17
-       addq    $17,    $10,    $10
-       addq    $20,    $10,    $20
-       cmpult  $20,    $10,    $18
-       addq    $19,    $18,    $19
-       mulq    $6,     $24,    $0
-       umulh   $6,     $24,    $2
-       addq    $9,     $0,     $9
-       cmpult  $9,     $0,     $1
-       addq    $1,     $2,     $2
-       addq    $20,    $2,     $20
-       cmpult  $20,    $2,     $17
-       addq    $19,    $17,    $19
-       mulq    $8,     $22,    $10
-       umulh   $8,     $22,    $18
-       addq    $9,     $10,    $9
-       cmpult  $9,     $10,    $0
-       addq    $0,     $18,    $18
-       addq    $20,    $18,    $20
-       cmpult  $20,    $18,    $1
-       addq    $19,    $1,     $19
-       mulq    $23,    $7,     $2
-       umulh   $23,    $7,     $17
-       addq    $9,     $2,     $9
-       cmpult  $9,     $2,     $10
-       addq    $10,    $17,    $17
-       addq    $20,    $17,    $20
-       cmpult  $20,    $17,    $0
-       addq    $19,    $0,     $19
-       mulq    $25,    $5,     $18
-       umulh   $25,    $5,     $1
-       addq    $9,     $18,    $9
-       cmpult  $9,     $18,    $2
-       addq    $2,     $1,     $1
-       addq    $20,    $1,     $20
-       cmpult  $20,    $1,     $10
-       addq    $19,    $10,    $19
-       mulq    $28,    $3,     $17
-       umulh   $28,    $3,     $0
-       addq    $9,     $17,    $9
-       cmpult  $9,     $17,    $18
-       addq    $18,    $0,     $0
-       addq    $20,    $0,     $20
-       cmpult  $20,    $0,     $2
-       addq    $19,    $2,     $19
-       stq     $9,     64($16)
-       bis     $31,    $31,    $9
-       mulq    $4,     $21,    $1
-       umulh   $4,     $21,    $10
-       addq    $20,    $1,     $20
-       cmpult  $20,    $1,     $17
-       addq    $17,    $10,    $10
-       addq    $19,    $10,    $19
-       cmpult  $19,    $10,    $18
-       addq    $9,     $18,    $9
-       mulq    $6,     $27,    $0
-       umulh   $6,     $27,    $2
-       addq    $20,    $0,     $20
-       cmpult  $20,    $0,     $3
-       addq    $3,     $2,     $2
-       addq    $19,    $2,     $19
-       cmpult  $19,    $2,     $1
-       addq    $9,     $1,     $9
-       mulq    $8,     $24,    $17
-       umulh   $8,     $24,    $10
-       addq    $20,    $17,    $20
-       cmpult  $20,    $17,    $18
-       addq    $18,    $10,    $10
-       addq    $19,    $10,    $19
-       cmpult  $19,    $10,    $4
-       addq    $9,     $4,     $9
-       mulq    $23,    $22,    $0
-       umulh   $23,    $22,    $3
-       addq    $20,    $0,     $20
-       cmpult  $20,    $0,     $2
-       addq    $2,     $3,     $3
-       addq    $19,    $3,     $19
-       cmpult  $19,    $3,     $1
-       addq    $9,     $1,     $9
-       mulq    $25,    $7,     $17
-       umulh   $25,    $7,     $18
-       addq    $20,    $17,    $20
-       cmpult  $20,    $17,    $10
-       addq    $10,    $18,    $18
-       addq    $19,    $18,    $19
-       cmpult  $19,    $18,    $4
-       addq    $9,     $4,     $9
-       mulq    $28,    $5,     $0
-       umulh   $28,    $5,     $2
-       addq    $20,    $0,     $20
-       cmpult  $20,    $0,     $3
-       addq    $3,     $2,     $2
-       addq    $19,    $2,     $19
-       cmpult  $19,    $2,     $1
-       addq    $9,     $1,     $9
-       stq     $20,    72($16)
-       bis     $31,    $31,    $20
-       mulq    $6,     $21,    $17
-       umulh   $6,     $21,    $10
-       addq    $19,    $17,    $19
-       cmpult  $19,    $17,    $18
-       addq    $18,    $10,    $10
-       addq    $9,     $10,    $9
-       cmpult  $9,     $10,    $4
-       addq    $20,    $4,     $20
-       mulq    $8,     $27,    $0
-       umulh   $8,     $27,    $3
-       addq    $19,    $0,     $19
-       cmpult  $19,    $0,     $2
-       addq    $2,     $3,     $3
-       addq    $9,     $3,     $9
-       cmpult  $9,     $3,     $1
-       addq    $20,    $1,     $20
-       mulq    $23,    $24,    $5
-       umulh   $23,    $24,    $17
-       addq    $19,    $5,     $19
-       cmpult  $19,    $5,     $18
-       addq    $18,    $17,    $17
-       addq    $9,     $17,    $9
-       cmpult  $9,     $17,    $10
-       addq    $20,    $10,    $20
-       mulq    $25,    $22,    $4
-       umulh   $25,    $22,    $6
-       addq    $19,    $4,     $19
-       cmpult  $19,    $4,     $0
-       addq    $0,     $6,     $6
-       addq    $9,     $6,     $9
-       cmpult  $9,     $6,     $2
-       addq    $20,    $2,     $20
-       mulq    $28,    $7,     $3
-       umulh   $28,    $7,     $1
-       addq    $19,    $3,     $19
-       cmpult  $19,    $3,     $5
-       addq    $5,     $1,     $1
-       addq    $9,     $1,     $9
-       cmpult  $9,     $1,     $18
-       addq    $20,    $18,    $20
-       stq     $19,    80($16)
-       bis     $31,    $31,    $19
-       mulq    $8,     $21,    $17
-       umulh   $8,     $21,    $10
-       addq    $9,     $17,    $9
-       cmpult  $9,     $17,    $4
-       addq    $4,     $10,    $10
-       addq    $20,    $10,    $20
-       cmpult  $20,    $10,    $0
-       addq    $19,    $0,     $19
-       mulq    $23,    $27,    $6
-       umulh   $23,    $27,    $2
-       addq    $9,     $6,     $9
-       cmpult  $9,     $6,     $3
-       addq    $3,     $2,     $2
+       addq    $0,     $23,    $0
+       bis     $0,     $0,     $7
+       ldq     $3,     8($17)
+       addq    $22,    $7,     $22
+       srl     $1,     32,     $8
+       cmpult  $22,    $7,     $4
+       zapnot  $3,     15,     $7
+       mulq    $8,     $7,     $28
+       zapnot  $1,     15,     $5
+       mulq    $7,     $5,     $21
+       srl     $25,    32,     $1
+       cmpult  $0,     $23,    $2
+       addq    $6,     $1,     $6
+       addq    $2,     $6,     $6
+       addq    $4,     $6,     $24
+       srl     $3,     32,     $6
+       mulq    $5,     $6,     $2
+       mulq    $6,     $8,     $6
+       addq    $28,    $2,     $28
+       cmpult  $28,    $2,     $1
+       bis     $31,    1,      $2
+       beq     $1,     $181
+       sll     $2,     32,     $1
+       addq    $6,     $1,     $6
+$181:
+       sll     $28,    32,     $2
+       addq    $21,    $2,     $21
+       bis     $21,    $21,    $7
+       addq    $22,    $7,     $22
+       stq     $22,    8($16)
+       ldq     $3,     16($17)
+       ldq     $1,     0($18)
+       cmpult  $22,    $7,     $4
+       zapnot  $3,     15,     $7
+       srl     $1,     32,     $8
+       mulq    $8,     $7,     $22
+       zapnot  $1,     15,     $5
+       mulq    $7,     $5,     $20
+       srl     $28,    32,     $1
+       cmpult  $21,    $2,     $2
+       addq    $6,     $1,     $6
+       addq    $2,     $6,     $6
+       addq    $4,     $6,     $6
+       addq    $24,    $6,     $24
+       cmpult  $24,    $6,     $23
+       srl     $3,     32,     $6
+       mulq    $5,     $6,     $2
+       mulq    $6,     $8,     $6
+       addq    $22,    $2,     $22
+       cmpult  $22,    $2,     $1
+       bis     $31,    1,      $2
+       beq     $1,     $185
+       sll     $2,     32,     $1
+       addq    $6,     $1,     $6
+$185:
+       sll     $22,    32,     $2
+       ldq     $1,     8($18)
        addq    $20,    $2,     $20
-       cmpult  $20,    $2,     $5
-       addq    $19,    $5,     $19
-       mulq    $25,    $24,    $1
-       umulh   $25,    $24,    $18
-       addq    $9,     $1,     $9
-       cmpult  $9,     $1,     $7
-       addq    $7,     $18,    $18
-       addq    $20,    $18,    $20
-       cmpult  $20,    $18,    $17
-       addq    $19,    $17,    $19
-       mulq    $28,    $22,    $4
-       umulh   $28,    $22,    $10
-       addq    $9,     $4,     $9
-       cmpult  $9,     $4,     $0
-       addq    $0,     $10,    $10
-       addq    $20,    $10,    $20
-       cmpult  $20,    $10,    $8
-       addq    $19,    $8,     $19
-       stq     $9,     88($16)
-       bis     $31,    $31,    $9
-       mulq    $23,    $21,    $6
-       umulh   $23,    $21,    $3
-       addq    $20,    $6,     $20
-       cmpult  $20,    $6,     $2
-       addq    $2,     $3,     $3
-       addq    $19,    $3,     $19
-       cmpult  $19,    $3,     $5
-       addq    $9,     $5,     $9
-       mulq    $25,    $27,    $1
-       umulh   $25,    $27,    $7
-       addq    $20,    $1,     $20
-       cmpult  $20,    $1,     $18
-       addq    $18,    $7,     $7
-       addq    $19,    $7,     $19
-       cmpult  $19,    $7,     $17
-       addq    $9,     $17,    $9
-       mulq    $28,    $24,    $4
-       umulh   $28,    $24,    $0
-       addq    $20,    $4,     $20
-       cmpult  $20,    $4,     $10
-       addq    $10,    $0,     $0
-       addq    $19,    $0,     $19
-       cmpult  $19,    $0,     $8
-       addq    $9,     $8,     $9
-       stq     $20,    96($16)
-       bis     $31,    $31,    $20
-       mulq    $25,    $21,    $22
-       umulh   $25,    $21,    $6
-       addq    $19,    $22,    $19
-       cmpult  $19,    $22,    $2
-       addq    $2,     $6,     $6
-       addq    $9,     $6,     $9
-       cmpult  $9,     $6,     $3
-       addq    $20,    $3,     $20
-       mulq    $28,    $27,    $5
-       umulh   $28,    $27,    $23
-       addq    $19,    $5,     $19
-       cmpult  $19,    $5,     $1
-       addq    $1,     $23,    $23
-       addq    $9,     $23,    $9
-       cmpult  $9,     $23,    $18
-       addq    $20,    $18,    $20
-       stq     $19,    104($16)
-       bis     $31,    $31,    $19
-       mulq    $28,    $21,    $7
-       umulh   $28,    $21,    $17
-       addq    $9,     $7,     $9
-       cmpult  $9,     $7,     $4
-       addq    $4,     $17,    $17
-       addq    $20,    $17,    $20
-       cmpult  $20,    $17,    $10
-       addq    $19,    $10,    $19
-       stq     $9,     112($16)
-       stq     $20,    120($16)
-       ldq     $9,     0($30)
-       ldq     $10,    8($30)
-       addq    $30,    16,     $30
-       ret     $31,($26),1
+       bis     $20,    $20,    $7
+       ldq     $4,     8($17)
+       addq    $24,    $7,     $24
+       srl     $1,     32,     $8
+       cmpult  $24,    $7,     $3
+       zapnot  $4,     15,     $7
+       mulq    $8,     $7,     $25
+       zapnot  $1,     15,     $5
+       mulq    $7,     $5,     $0
+       srl     $22,    32,     $1
+       cmpult  $20,    $2,     $2
+       addq    $6,     $1,     $6
+       addq    $2,     $6,     $6
+       addq    $3,     $6,     $6
+       addq    $23,    $6,     $23
+       cmpult  $23,    $6,     $22
+       srl     $4,     32,     $6
+       mulq    $5,     $6,     $5
+       bis     $31,    1,      $21
+       addq    $25,    $5,     $25
+       cmpult  $25,    $5,     $1
+       mulq    $6,     $8,     $6
+       beq     $1,     $189
+       sll     $21,    32,     $1
+       addq    $6,     $1,     $6
+$189:
+       sll     $25,    32,     $5
+       ldq     $2,     16($18)
+       addq    $0,     $5,     $0
+       bis     $0,     $0,     $7
+       ldq     $4,     0($17)
+       addq    $24,    $7,     $24
+       srl     $2,     32,     $8
+       cmpult  $24,    $7,     $3
+       zapnot  $4,     15,     $7
+       mulq    $8,     $7,     $28
+       srl     $25,    32,     $1
+       addq    $6,     $1,     $6
+       cmpult  $0,     $5,     $1
+       zapnot  $2,     15,     $5
+       addq    $1,     $6,     $6
+       addq    $3,     $6,     $6
+       addq    $23,    $6,     $23
+       cmpult  $23,    $6,     $1
+       srl     $4,     32,     $6
+       mulq    $5,     $6,     $25
+       mulq    $7,     $5,     $2
+       addq    $1,     $22,    $22
+       addq    $28,    $25,    $28
+       cmpult  $28,    $25,    $1
+       mulq    $6,     $8,     $6
+       beq     $1,     $193
+       sll     $21,    32,     $1
+       addq    $6,     $1,     $6
+$193:
+       sll     $28,    32,     $25
+       addq    $2,     $25,    $2
+       bis     $2,     $2,     $7
+       addq    $24,    $7,     $24
+       stq     $24,    16($16)
+       ldq     $4,     0($17)
+       ldq     $5,     24($18)
+       cmpult  $24,    $7,     $3
+       zapnot  $4,     15,     $7
+       srl     $5,     32,     $8
+       mulq    $8,     $7,     $0
+       srl     $28,    32,     $1
+       cmpult  $2,     $25,    $2
+       addq    $6,     $1,     $6
+       addq    $2,     $6,     $6
+       addq    $3,     $6,     $6
+       addq    $23,    $6,     $23
+       cmpult  $23,    $6,     $1
+       srl     $4,     32,     $6
+       zapnot  $5,     15,     $5
+       mulq    $5,     $6,     $24
+       mulq    $7,     $5,     $2
+       addq    $1,     $22,    $22
+       addq    $0,     $24,    $0
+       cmpult  $0,     $24,    $1
+       mulq    $6,     $8,     $6
+       beq     $1,     $197
+       sll     $21,    32,     $1
+       addq    $6,     $1,     $6
+$197:
+       sll     $0,     32,     $24
+       ldq     $1,     16($18)
+       addq    $2,     $24,    $2
+       bis     $2,     $2,     $7
+       ldq     $4,     8($17)
+       addq    $23,    $7,     $23
+       srl     $1,     32,     $8
+       cmpult  $23,    $7,     $3
+       zapnot  $4,     15,     $7
+       mulq    $8,     $7,     $25
+       zapnot  $1,     15,     $5
+       mulq    $7,     $5,     $21
+       srl     $0,     32,     $1
+       cmpult  $2,     $24,    $2
+       addq    $6,     $1,     $6
+       addq    $2,     $6,     $6
+       addq    $3,     $6,     $6
+       addq    $22,    $6,     $22
+       cmpult  $22,    $6,     $24
+       srl     $4,     32,     $6
+       mulq    $5,     $6,     $5
+       bis     $31,    1,      $20
+       addq    $25,    $5,     $25
+       cmpult  $25,    $5,     $1
+       mulq    $6,     $8,     $6
+       beq     $1,     $201
+       sll     $20,    32,     $1
+       addq    $6,     $1,     $6
+$201:
+       sll     $25,    32,     $5
+       ldq     $2,     8($18)
+       addq    $21,    $5,     $21
+       bis     $21,    $21,    $7
+       ldq     $4,     16($17)
+       addq    $23,    $7,     $23
+       srl     $2,     32,     $8
+       cmpult  $23,    $7,     $3
+       zapnot  $4,     15,     $7
+       mulq    $8,     $7,     $28
+       srl     $25,    32,     $1
+       addq    $6,     $1,     $6
+       cmpult  $21,    $5,     $1
+       zapnot  $2,     15,     $5
+       addq    $1,     $6,     $6
+       addq    $3,     $6,     $6
+       addq    $22,    $6,     $22
+       cmpult  $22,    $6,     $1
+       srl     $4,     32,     $6
+       mulq    $5,     $6,     $25
+       mulq    $7,     $5,     $5
+       addq    $1,     $24,    $24
+       addq    $28,    $25,    $28
+       cmpult  $28,    $25,    $1
+       mulq    $6,     $8,     $6
+       beq     $1,     $205
+       sll     $20,    32,     $1
+       addq    $6,     $1,     $6
+$205:
+       sll     $28,    32,     $25
+       ldq     $2,     0($18)
+       addq    $5,     $25,    $5
+       bis     $5,     $5,     $7
+       ldq     $4,     24($17)
+       addq    $23,    $7,     $23
+       srl     $2,     32,     $8
+       cmpult  $23,    $7,     $3
+       zapnot  $4,     15,     $7
+       mulq    $8,     $7,     $0
+       srl     $28,    32,     $1
+       addq    $6,     $1,     $6
+       cmpult  $5,     $25,    $1
+       zapnot  $2,     15,     $5
+       addq    $1,     $6,     $6
+       addq    $3,     $6,     $6
+       addq    $22,    $6,     $22
+       cmpult  $22,    $6,     $1
+       srl     $4,     32,     $6
+       mulq    $5,     $6,     $25
+       mulq    $7,     $5,     $2
+       addq    $1,     $24,    $24
+       addq    $0,     $25,    $0
+       cmpult  $0,     $25,    $1
+       mulq    $6,     $8,     $6
+       beq     $1,     $209
+       sll     $20,    32,     $1
+       addq    $6,     $1,     $6
+$209:
+       sll     $0,     32,     $25
+       addq    $2,     $25,    $2
+       bis     $2,     $2,     $7
+       addq    $23,    $7,     $23
+       stq     $23,    24($16)
+       ldq     $4,     32($17)
+       ldq     $5,     0($18)
+       cmpult  $23,    $7,     $3
+       zapnot  $4,     15,     $7
+       srl     $5,     32,     $8
+       mulq    $8,     $7,     $28
+       srl     $0,     32,     $1
+       cmpult  $2,     $25,    $2
+       addq    $6,     $1,     $6
+       addq    $2,     $6,     $6
+       addq    $3,     $6,     $6
+       addq    $22,    $6,     $22
+       cmpult  $22,    $6,     $1
+       srl     $4,     32,     $6
+       zapnot  $5,     15,     $5
+       mulq    $5,     $6,     $23
+       mulq    $7,     $5,     $2
+       addq    $1,     $24,    $24
+       addq    $28,    $23,    $28
+       cmpult  $28,    $23,    $1
+       mulq    $6,     $8,     $6
+       beq     $1,     $213
+       sll     $20,    32,     $1
+       addq    $6,     $1,     $6
+$213:
+       sll     $28,    32,     $23
+       ldq     $1,     8($18)
+       addq    $2,     $23,    $2
+       bis     $2,     $2,     $7
+       ldq     $4,     24($17)
+       addq    $22,    $7,     $22
+       srl     $1,     32,     $8
+       cmpult  $22,    $7,     $3
+       zapnot  $4,     15,     $7
+       mulq    $8,     $7,     $25
+       zapnot  $1,     15,     $5
+       mulq    $7,     $5,     $0
+       srl     $28,    32,     $1
+       cmpult  $2,     $23,    $2
+       addq    $6,     $1,     $6
+       addq    $2,     $6,     $6
+       addq    $3,     $6,     $6
+       addq    $24,    $6,     $24
+       cmpult  $24,    $6,     $23
+       srl     $4,     32,     $6
+       mulq    $5,     $6,     $5
+       bis     $31,    1,      $21
+       addq    $25,    $5,     $25
+       cmpult  $25,    $5,     $1
+       mulq    $6,     $8,     $6
+       beq     $1,     $217
+       sll     $21,    32,     $1
+       addq    $6,     $1,     $6
+$217:
+       sll     $25,    32,     $5
+       ldq     $2,     16($18)
+       addq    $0,     $5,     $0
+       bis     $0,     $0,     $7
+       ldq     $4,     16($17)
+       addq    $22,    $7,     $22
+       srl     $2,     32,     $8
+       cmpult  $22,    $7,     $3
+       zapnot  $4,     15,     $7
+       mulq    $8,     $7,     $28
+       srl     $25,    32,     $1
+       addq    $6,     $1,     $6
+       cmpult  $0,     $5,     $1
+       zapnot  $2,     15,     $5
+       addq    $1,     $6,     $6
+       addq    $3,     $6,     $6
+       addq    $24,    $6,     $24
+       cmpult  $24,    $6,     $1
+       srl     $4,     32,     $6
+       mulq    $5,     $6,     $25
+       mulq    $7,     $5,     $5
+       addq    $1,     $23,    $23
+       addq    $28,    $25,    $28
+       cmpult  $28,    $25,    $1
+       mulq    $6,     $8,     $6
+       beq     $1,     $221
+       sll     $21,    32,     $1
+       addq    $6,     $1,     $6
+$221:
+       sll     $28,    32,     $25
+       ldq     $2,     24($18)
+       addq    $5,     $25,    $5
+       bis     $5,     $5,     $7
+       ldq     $4,     8($17)
+       addq    $22,    $7,     $22
+       srl     $2,     32,     $8
+       cmpult  $22,    $7,     $3
+       zapnot  $4,     15,     $7
+       mulq    $8,     $7,     $0
+       srl     $28,    32,     $1
+       addq    $6,     $1,     $6
+       cmpult  $5,     $25,    $1
+       zapnot  $2,     15,     $5
+       addq    $1,     $6,     $6
+       addq    $3,     $6,     $6
+       addq    $24,    $6,     $24
+       cmpult  $24,    $6,     $1
+       srl     $4,     32,     $6
+       mulq    $5,     $6,     $25
+       mulq    $7,     $5,     $5
+       addq    $1,     $23,    $23
+       addq    $0,     $25,    $0
+       cmpult  $0,     $25,    $1
+       mulq    $6,     $8,     $6
+       beq     $1,     $225
+       sll     $21,    32,     $1
+       addq    $6,     $1,     $6
+$225:
+       sll     $0,     32,     $25
+       ldq     $2,     32($18)
+       addq    $5,     $25,    $5
+       bis     $5,     $5,     $7
+       ldq     $4,     0($17)
+       addq    $22,    $7,     $22
+       srl     $2,     32,     $8
+       cmpult  $22,    $7,     $3
+       zapnot  $4,     15,     $7
+       mulq    $8,     $7,     $28
+       srl     $0,     32,     $1
+       addq    $6,     $1,     $6
+       cmpult  $5,     $25,    $1
+       zapnot  $2,     15,     $5
+       addq    $1,     $6,     $6
+       addq    $3,     $6,     $6
+       addq    $24,    $6,     $24
+       cmpult  $24,    $6,     $1
+       srl     $4,     32,     $6
+       mulq    $5,     $6,     $25
+       mulq    $7,     $5,     $2
+       addq    $1,     $23,    $23
+       addq    $28,    $25,    $28
+       cmpult  $28,    $25,    $1
+       mulq    $6,     $8,     $6
+       beq     $1,     $229
+       sll     $21,    32,     $1
+       addq    $6,     $1,     $6
+$229:
+       sll     $28,    32,     $25
+       addq    $2,     $25,    $2
+       bis     $2,     $2,     $7
+       addq    $22,    $7,     $22
+       stq     $22,    32($16)
+       ldq     $4,     0($17)
+       ldq     $5,     40($18)
+       cmpult  $22,    $7,     $3
+       zapnot  $4,     15,     $7
+       srl     $5,     32,     $8
+       mulq    $8,     $7,     $0
+       srl     $28,    32,     $1
+       cmpult  $2,     $25,    $2
+       addq    $6,     $1,     $6
+       addq    $2,     $6,     $6
+       addq    $3,     $6,     $6
+       addq    $24,    $6,     $24
+       cmpult  $24,    $6,     $1
+       srl     $4,     32,     $6
+       zapnot  $5,     15,     $5
+       mulq    $5,     $6,     $22
+       mulq    $7,     $5,     $2
+       addq    $1,     $23,    $23
+       addq    $0,     $22,    $0
+       cmpult  $0,     $22,    $1
+       mulq    $6,     $8,     $6
+       beq     $1,     $233
+       sll     $21,    32,     $1
+       addq    $6,     $1,     $6
+$233:
+       sll     $0,     32,     $22
+       ldq     $1,     32($18)
+       addq    $2,     $22,    $2
+       bis     $2,     $2,     $7
+       ldq     $4,     8($17)
+       addq    $24,    $7,     $24
+       srl     $1,     32,     $8
+       cmpult  $24,    $7,     $3
+       zapnot  $4,     15,     $7
+       mulq    $8,     $7,     $25
+       zapnot  $1,     15,     $5
+       mulq    $7,     $5,     $21
+       srl     $0,     32,     $1
+       cmpult  $2,     $22,    $2
+       addq    $6,     $1,     $6
+       addq    $2,     $6,     $6
+       addq    $3,     $6,     $6
+       addq    $23,    $6,     $23
+       cmpult  $23,    $6,     $22
+       srl     $4,     32,     $6
+       mulq    $5,     $6,     $5
+       bis     $31,    1,      $20
+       addq    $25,    $5,     $25
+       cmpult  $25,    $5,     $1
+       mulq    $6,     $8,     $6
+       beq     $1,     $237
+       sll     $20,    32,     $1
+       addq    $6,     $1,     $6
+$237:
+       sll     $25,    32,     $5
+       ldq     $2,     24($18)
+       addq    $21,    $5,     $21
+       bis     $21,    $21,    $7
+       ldq     $4,     16($17)
+       addq    $24,    $7,     $24
+       srl     $2,     32,     $8
+       cmpult  $24,    $7,     $3
+       zapnot  $4,     15,     $7
+       mulq    $8,     $7,     $28
+       srl     $25,    32,     $1
+       addq    $6,     $1,     $6
+       cmpult  $21,    $5,     $1
+       zapnot  $2,     15,     $5
+       addq    $1,     $6,     $6
+       addq    $3,     $6,     $6
+       addq    $23,    $6,     $23
+       cmpult  $23,    $6,     $1
+       srl     $4,     32,     $6
+       mulq    $5,     $6,     $25
+       mulq    $7,     $5,     $5
+       addq    $1,     $22,    $22
+       addq    $28,    $25,    $28
+       cmpult  $28,    $25,    $1
+       mulq    $6,     $8,     $6
+       beq     $1,     $241
+       sll     $20,    32,     $1
+       addq    $6,     $1,     $6
+$241:
+       sll     $28,    32,     $25
+       ldq     $2,     16($18)
+       addq    $5,     $25,    $5
+       bis     $5,     $5,     $7
+       ldq     $4,     24($17)
+       addq    $24,    $7,     $24
+       srl     $2,     32,     $8
+       cmpult  $24,    $7,     $3
+       zapnot  $4,     15,     $7
+       mulq    $8,     $7,     $0
+       srl     $28,    32,     $1
+       addq    $6,     $1,     $6
+       cmpult  $5,     $25,    $1
+       zapnot  $2,     15,     $5
+       addq    $1,     $6,     $6
+       addq    $3,     $6,     $6
+       addq    $23,    $6,     $23
+       cmpult  $23,    $6,     $1
+       srl     $4,     32,     $6
+       mulq    $5,     $6,     $25
+       mulq    $7,     $5,     $5
+       addq    $1,     $22,    $22
+       addq    $0,     $25,    $0
+       cmpult  $0,     $25,    $1
+       mulq    $6,     $8,     $6
+       beq     $1,     $245
+       sll     $20,    32,     $1
+       addq    $6,     $1,     $6
+$245:
+       sll     $0,     32,     $25
+       ldq     $2,     8($18)
+       addq    $5,     $25,    $5
+       bis     $5,     $5,     $7
+       ldq     $4,     32($17)
+       addq    $24,    $7,     $24
+       srl     $2,     32,     $8
+       cmpult  $24,    $7,     $3
+       zapnot  $4,     15,     $7
+       mulq    $8,     $7,     $28
+       srl     $0,     32,     $1
+       addq    $6,     $1,     $6
+       cmpult  $5,     $25,    $1
+       zapnot  $2,     15,     $5
+       addq    $1,     $6,     $6
+       addq    $3,     $6,     $6
+       addq    $23,    $6,     $23
+       cmpult  $23,    $6,     $1
+       srl     $4,     32,     $6
+       mulq    $5,     $6,     $25
+       mulq    $7,     $5,     $5
+       addq    $1,     $22,    $22
+       addq    $28,    $25,    $28
+       cmpult  $28,    $25,    $1
+       mulq    $6,     $8,     $6
+       beq     $1,     $249
+       sll     $20,    32,     $1
+       addq    $6,     $1,     $6
+$249:
+       sll     $28,    32,     $25
+       ldq     $2,     0($18)
+       addq    $5,     $25,    $5
+       bis     $5,     $5,     $7
+       ldq     $4,     40($17)
+       addq    $24,    $7,     $24
+       srl     $2,     32,     $8
+       cmpult  $24,    $7,     $3
+       zapnot  $4,     15,     $7
+       mulq    $8,     $7,     $0
+       srl     $28,    32,     $1
+       addq    $6,     $1,     $6
+       cmpult  $5,     $25,    $1
+       zapnot  $2,     15,     $5
+       addq    $1,     $6,     $6
+       addq    $3,     $6,     $6
+       addq    $23,    $6,     $23
+       cmpult  $23,    $6,     $1
+       srl     $4,     32,     $6
+       mulq    $5,     $6,     $25
+       mulq    $7,     $5,     $2
+       addq    $1,     $22,    $22
+       addq    $0,     $25,    $0
+       cmpult  $0,     $25,    $1
+       mulq    $6,     $8,     $6
+       beq     $1,     $253
+       sll     $20,    32,     $1
+       addq    $6,     $1,     $6
+$253:
+       sll     $0,     32,     $25
+       addq    $2,     $25,    $2
+       bis     $2,     $2,     $7
+       addq    $24,    $7,     $24
+       stq     $24,    40($16)
+       ldq     $4,     48($17)
+       ldq     $5,     0($18)
+       cmpult  $24,    $7,     $3
+       zapnot  $4,     15,     $7
+       srl     $5,     32,     $8
+       mulq    $8,     $7,     $28
+       srl     $0,     32,     $1
+       cmpult  $2,     $25,    $2
+       addq    $6,     $1,     $6
+       addq    $2,     $6,     $6
+       addq    $3,     $6,     $6
+       addq    $23,    $6,     $23
+       cmpult  $23,    $6,     $1
+       srl     $4,     32,     $6
+       zapnot  $5,     15,     $5
+       mulq    $5,     $6,     $24
+       mulq    $7,     $5,     $2
+       addq    $1,     $22,    $22
+       addq    $28,    $24,    $28
+       cmpult  $28,    $24,    $1
+       mulq    $6,     $8,     $6
+       beq     $1,     $257
+       sll     $20,    32,     $1
+       addq    $6,     $1,     $6
+$257:
+       sll     $28,    32,     $24
+       ldq     $1,     8($18)
+       addq    $2,     $24,    $2
+       bis     $2,     $2,     $7
+       ldq     $4,     40($17)
+       addq    $23,    $7,     $23
+       srl     $1,     32,     $8
+       cmpult  $23,    $7,     $3
+       zapnot  $4,     15,     $7
+       mulq    $8,     $7,     $25
+       zapnot  $1,     15,     $5
+       mulq    $7,     $5,     $0
+       srl     $28,    32,     $1
+       cmpult  $2,     $24,    $2
+       addq    $6,     $1,     $6
+       addq    $2,     $6,     $6
+       addq    $3,     $6,     $6
+       addq    $22,    $6,     $22
+       cmpult  $22,    $6,     $24
+       srl     $4,     32,     $6
+       mulq    $5,     $6,     $5
+       bis     $31,    1,      $21
+       addq    $25,    $5,     $25
+       cmpult  $25,    $5,     $1
+       mulq    $6,     $8,     $6
+       beq     $1,     $261
+       sll     $21,    32,     $1
+       addq    $6,     $1,     $6
+$261:
+       sll     $25,    32,     $5
+       ldq     $2,     16($18)
+       addq    $0,     $5,     $0
+       bis     $0,     $0,     $7
+       ldq     $4,     32($17)
+       addq    $23,    $7,     $23
+       srl     $2,     32,     $8
+       cmpult  $23,    $7,     $3
+       zapnot  $4,     15,     $7
+       mulq    $8,     $7,     $28
+       srl     $25,    32,     $1
+       addq    $6,     $1,     $6
+       cmpult  $0,     $5,     $1
+       zapnot  $2,     15,     $5
+       addq    $1,     $6,     $6
+       addq    $3,     $6,     $6
+       addq    $22,    $6,     $22
+       cmpult  $22,    $6,     $1
+       srl     $4,     32,     $6
+       mulq    $5,     $6,     $25
+       mulq    $7,     $5,     $5
+       addq    $1,     $24,    $24
+       addq    $28,    $25,    $28
+       cmpult  $28,    $25,    $1
+       mulq    $6,     $8,     $6
+       beq     $1,     $265
+       sll     $21,    32,     $1
+       addq    $6,     $1,     $6
+$265:
+       sll     $28,    32,     $25
+       ldq     $2,     24($18)
+       addq    $5,     $25,    $5
+       bis     $5,     $5,     $7
+       ldq     $4,     24($17)
+       addq    $23,    $7,     $23
+       srl     $2,     32,     $8
+       cmpult  $23,    $7,     $3
+       zapnot  $4,     15,     $7
+       mulq    $8,     $7,     $0
+       srl     $28,    32,     $1
+       addq    $6,     $1,     $6
+       cmpult  $5,     $25,    $1
+       zapnot  $2,     15,     $5
+       addq    $1,     $6,     $6
+       addq    $3,     $6,     $6
+       addq    $22,    $6,     $22
+       cmpult  $22,    $6,     $1
+       srl     $4,     32,     $6
+       mulq    $5,     $6,     $25
+       mulq    $7,     $5,     $5
+       addq    $1,     $24,    $24
+       addq    $0,     $25,    $0
+       cmpult  $0,     $25,    $1
+       mulq    $6,     $8,     $6
+       beq     $1,     $269
+       sll     $21,    32,     $1
+       addq    $6,     $1,     $6
+$269:
+       sll     $0,     32,     $25
+       ldq     $2,     32($18)
+       addq    $5,     $25,    $5
+       bis     $5,     $5,     $7
+       ldq     $4,     16($17)
+       addq    $23,    $7,     $23
+       srl     $2,     32,     $8
+       cmpult  $23,    $7,     $3
+       zapnot  $4,     15,     $7
+       mulq    $8,     $7,     $28
+       srl     $0,     32,     $1
+       addq    $6,     $1,     $6
+       cmpult  $5,     $25,    $1
+       zapnot  $2,     15,     $5
+       addq    $1,     $6,     $6
+       addq    $3,     $6,     $6
+       addq    $22,    $6,     $22
+       cmpult  $22,    $6,     $1
+       srl     $4,     32,     $6
+       mulq    $5,     $6,     $25
+       mulq    $7,     $5,     $5
+       addq    $1,     $24,    $24
+       addq    $28,    $25,    $28
+       cmpult  $28,    $25,    $1
+       mulq    $6,     $8,     $6
+       beq     $1,     $273
+       sll     $21,    32,     $1
+       addq    $6,     $1,     $6
+$273:
+       sll     $28,    32,     $25
+       ldq     $2,     40($18)
+       addq    $5,     $25,    $5
+       bis     $5,     $5,     $7
+       ldq     $4,     8($17)
+       addq    $23,    $7,     $23
+       srl     $2,     32,     $8
+       cmpult  $23,    $7,     $3
+       zapnot  $4,     15,     $7
+       mulq    $8,     $7,     $0
+       srl     $28,    32,     $1
+       addq    $6,     $1,     $6
+       cmpult  $5,     $25,    $1
+       zapnot  $2,     15,     $5
+       addq    $1,     $6,     $6
+       addq    $3,     $6,     $6
+       addq    $22,    $6,     $22
+       cmpult  $22,    $6,     $1
+       srl     $4,     32,     $6
+       mulq    $5,     $6,     $25
+       mulq    $7,     $5,     $5
+       addq    $1,     $24,    $24
+       addq    $0,     $25,    $0
+       cmpult  $0,     $25,    $1
+       mulq    $6,     $8,     $6
+       beq     $1,     $277
+       sll     $21,    32,     $1
+       addq    $6,     $1,     $6
+$277:
+       sll     $0,     32,     $25
+       ldq     $2,     48($18)
+       addq    $5,     $25,    $5
+       bis     $5,     $5,     $7
+       ldq     $4,     0($17)
+       addq    $23,    $7,     $23
+       srl     $2,     32,     $8
+       cmpult  $23,    $7,     $3
+       zapnot  $4,     15,     $7
+       mulq    $8,     $7,     $28
+       srl     $0,     32,     $1
+       addq    $6,     $1,     $6
+       cmpult  $5,     $25,    $1
+       zapnot  $2,     15,     $5
+       addq    $1,     $6,     $6
+       addq    $3,     $6,     $6
+       addq    $22,    $6,     $22
+       cmpult  $22,    $6,     $1
+       srl     $4,     32,     $6
+       mulq    $5,     $6,     $25
+       mulq    $7,     $5,     $2
+       addq    $1,     $24,    $24
+       addq    $28,    $25,    $28
+       cmpult  $28,    $25,    $1
+       mulq    $6,     $8,     $6
+       beq     $1,     $281
+       sll     $21,    32,     $1
+       addq    $6,     $1,     $6
+$281:
+       sll     $28,    32,     $25
+       addq    $2,     $25,    $2
+       bis     $2,     $2,     $7
+       addq    $23,    $7,     $23
+       stq     $23,    48($16)
+       ldq     $4,     0($17)
+       ldq     $5,     56($18)
+       cmpult  $23,    $7,     $3
+       zapnot  $4,     15,     $7
+       srl     $5,     32,     $8
+       mulq    $8,     $7,     $0
+       srl     $28,    32,     $1
+       cmpult  $2,     $25,    $2
+       addq    $6,     $1,     $6
+       addq    $2,     $6,     $6
+       addq    $3,     $6,     $6
+       addq    $22,    $6,     $22
+       cmpult  $22,    $6,     $1
+       srl     $4,     32,     $6
+       zapnot  $5,     15,     $5
+       mulq    $5,     $6,     $23
+       mulq    $7,     $5,     $2
+       addq    $1,     $24,    $24
+       addq    $0,     $23,    $0
+       cmpult  $0,     $23,    $1
+       mulq    $6,     $8,     $6
+       beq     $1,     $285
+       sll     $21,    32,     $1
+       addq    $6,     $1,     $6
+$285:
+       sll     $0,     32,     $23
+       ldq     $1,     48($18)
+       addq    $2,     $23,    $2
+       bis     $2,     $2,     $7
+       ldq     $4,     8($17)
+       addq    $22,    $7,     $22
+       srl     $1,     32,     $8
+       cmpult  $22,    $7,     $3
+       zapnot  $4,     15,     $7
+       mulq    $8,     $7,     $25
+       zapnot  $1,     15,     $5
+       mulq    $7,     $5,     $21
+       srl     $0,     32,     $1
+       cmpult  $2,     $23,    $2
+       addq    $6,     $1,     $6
+       addq    $2,     $6,     $6
+       addq    $3,     $6,     $6
+       addq    $24,    $6,     $24
+       cmpult  $24,    $6,     $23
+       srl     $4,     32,     $6
+       mulq    $5,     $6,     $5
+       bis     $31,    1,      $20
+       addq    $25,    $5,     $25
+       cmpult  $25,    $5,     $1
+       mulq    $6,     $8,     $6
+       beq     $1,     $289
+       sll     $20,    32,     $1
+       addq    $6,     $1,     $6
+$289:
+       sll     $25,    32,     $5
+       ldq     $2,     40($18)
+       addq    $21,    $5,     $21
+       bis     $21,    $21,    $7
+       ldq     $4,     16($17)
+       addq    $22,    $7,     $22
+       srl     $2,     32,     $8
+       cmpult  $22,    $7,     $3
+       zapnot  $4,     15,     $7
+       mulq    $8,     $7,     $28
+       srl     $25,    32,     $1
+       addq    $6,     $1,     $6
+       cmpult  $21,    $5,     $1
+       zapnot  $2,     15,     $5
+       addq    $1,     $6,     $6
+       addq    $3,     $6,     $6
+       addq    $24,    $6,     $24
+       cmpult  $24,    $6,     $1
+       srl     $4,     32,     $6
+       mulq    $5,     $6,     $25
+       mulq    $7,     $5,     $5
+       addq    $1,     $23,    $23
+       addq    $28,    $25,    $28
+       cmpult  $28,    $25,    $1
+       mulq    $6,     $8,     $6
+       beq     $1,     $293
+       sll     $20,    32,     $1
+       addq    $6,     $1,     $6
+$293:
+       sll     $28,    32,     $25
+       ldq     $2,     32($18)
+       addq    $5,     $25,    $5
+       bis     $5,     $5,     $7
+       ldq     $4,     24($17)
+       addq    $22,    $7,     $22
+       srl     $2,     32,     $8
+       cmpult  $22,    $7,     $3
+       zapnot  $4,     15,     $7
+       mulq    $8,     $7,     $0
+       srl     $28,    32,     $1
+       addq    $6,     $1,     $6
+       cmpult  $5,     $25,    $1
+       zapnot  $2,     15,     $5
+       addq    $1,     $6,     $6
+       addq    $3,     $6,     $6
+       addq    $24,    $6,     $24
+       cmpult  $24,    $6,     $1
+       srl     $4,     32,     $6
+       mulq    $5,     $6,     $25
+       mulq    $7,     $5,     $5
+       addq    $1,     $23,    $23
+       addq    $0,     $25,    $0
+       cmpult  $0,     $25,    $1
+       mulq    $6,     $8,     $6
+       beq     $1,     $297
+       sll     $20,    32,     $1
+       addq    $6,     $1,     $6
+$297:
+       sll     $0,     32,     $25
+       ldq     $2,     24($18)
+       addq    $5,     $25,    $5
+       bis     $5,     $5,     $7
+       ldq     $4,     32($17)
+       addq    $22,    $7,     $22
+       srl     $2,     32,     $8
+       cmpult  $22,    $7,     $3
+       zapnot  $4,     15,     $7
+       mulq    $8,     $7,     $28
+       srl     $0,     32,     $1
+       addq    $6,     $1,     $6
+       cmpult  $5,     $25,    $1
+       zapnot  $2,     15,     $5
+       addq    $1,     $6,     $6
+       addq    $3,     $6,     $6
+       addq    $24,    $6,     $24
+       cmpult  $24,    $6,     $1
+       srl     $4,     32,     $6
+       mulq    $5,     $6,     $25
+       mulq    $7,     $5,     $5
+       addq    $1,     $23,    $23
+       addq    $28,    $25,    $28
+       cmpult  $28,    $25,    $1
+       mulq    $6,     $8,     $6
+       beq     $1,     $301
+       sll     $20,    32,     $1
+       addq    $6,     $1,     $6
+$301:
+       sll     $28,    32,     $25
+       ldq     $2,     16($18)
+       addq    $5,     $25,    $5
+       bis     $5,     $5,     $7
+       ldq     $4,     40($17)
+       addq    $22,    $7,     $22
+       srl     $2,     32,     $8
+       cmpult  $22,    $7,     $3
+       zapnot  $4,     15,     $7
+       mulq    $8,     $7,     $0
+       srl     $28,    32,     $1
+       addq    $6,     $1,     $6
+       cmpult  $5,     $25,    $1
+       zapnot  $2,     15,     $5
+       addq    $1,     $6,     $6
+       addq    $3,     $6,     $6
+       addq    $24,    $6,     $24
+       cmpult  $24,    $6,     $1
+       srl     $4,     32,     $6
+       mulq    $5,     $6,     $25
+       mulq    $7,     $5,     $5
+       addq    $1,     $23,    $23
+       addq    $0,     $25,    $0
+       cmpult  $0,     $25,    $1
+       mulq    $6,     $8,     $6
+       beq     $1,     $305
+       sll     $20,    32,     $1
+       addq    $6,     $1,     $6
+$305:
+       sll     $0,     32,     $25
+       ldq     $2,     8($18)
+       addq    $5,     $25,    $5
+       bis     $5,     $5,     $7
+       ldq     $4,     48($17)
+       addq    $22,    $7,     $22
+       srl     $2,     32,     $8
+       cmpult  $22,    $7,     $3
+       zapnot  $4,     15,     $7
+       mulq    $8,     $7,     $28
+       srl     $0,     32,     $1
+       addq    $6,     $1,     $6
+       cmpult  $5,     $25,    $1
+       zapnot  $2,     15,     $5
+       addq    $1,     $6,     $6
+       addq    $3,     $6,     $6
+       addq    $24,    $6,     $24
+       cmpult  $24,    $6,     $1
+       srl     $4,     32,     $6
+       mulq    $5,     $6,     $25
+       mulq    $7,     $5,     $5
+       addq    $1,     $23,    $23
+       addq    $28,    $25,    $28
+       cmpult  $28,    $25,    $1
+       mulq    $6,     $8,     $6
+       beq     $1,     $309
+       sll     $20,    32,     $1
+       addq    $6,     $1,     $6
+$309:
+       sll     $28,    32,     $25
+       ldq     $2,     0($18)
+       addq    $5,     $25,    $5
+       bis     $5,     $5,     $7
+       ldq     $4,     56($17)
+       addq    $22,    $7,     $22
+       srl     $2,     32,     $8
+       cmpult  $22,    $7,     $3
+       zapnot  $4,     15,     $7
+       mulq    $8,     $7,     $0
+       srl     $28,    32,     $1
+       addq    $6,     $1,     $6
+       cmpult  $5,     $25,    $1
+       zapnot  $2,     15,     $5
+       addq    $1,     $6,     $6
+       addq    $3,     $6,     $6
+       addq    $24,    $6,     $24
+       cmpult  $24,    $6,     $1
+       srl     $4,     32,     $6
+       mulq    $5,     $6,     $25
+       mulq    $7,     $5,     $2
+       addq    $1,     $23,    $23
+       addq    $0,     $25,    $0
+       cmpult  $0,     $25,    $1
+       mulq    $6,     $8,     $6
+       beq     $1,     $313
+       sll     $20,    32,     $1
+       addq    $6,     $1,     $6
+$313:
+       sll     $0,     32,     $25
+       addq    $2,     $25,    $2
+       bis     $2,     $2,     $7
+       addq    $22,    $7,     $22
+       stq     $22,    56($16)
+       ldq     $4,     56($17)
+       ldq     $5,     8($18)
+       cmpult  $22,    $7,     $3
+       zapnot  $4,     15,     $7
+       srl     $5,     32,     $8
+       mulq    $8,     $7,     $28
+       srl     $0,     32,     $1
+       cmpult  $2,     $25,    $2
+       addq    $6,     $1,     $6
+       addq    $2,     $6,     $6
+       addq    $3,     $6,     $6
+       addq    $24,    $6,     $24
+       cmpult  $24,    $6,     $1
+       srl     $4,     32,     $6
+       zapnot  $5,     15,     $5
+       mulq    $5,     $6,     $22
+       mulq    $7,     $5,     $2
+       addq    $1,     $23,    $23
+       addq    $28,    $22,    $28
+       cmpult  $28,    $22,    $1
+       mulq    $6,     $8,     $6
+       beq     $1,     $317
+       sll     $20,    32,     $1
+       addq    $6,     $1,     $6
+$317:
+       sll     $28,    32,     $22
+       ldq     $1,     16($18)
+       addq    $2,     $22,    $2
+       bis     $2,     $2,     $7
+       ldq     $4,     48($17)
+       addq    $24,    $7,     $24
+       srl     $1,     32,     $8
+       cmpult  $24,    $7,     $3
+       zapnot  $4,     15,     $7
+       mulq    $8,     $7,     $25
+       zapnot  $1,     15,     $5
+       mulq    $7,     $5,     $0
+       srl     $28,    32,     $1
+       cmpult  $2,     $22,    $2
+       addq    $6,     $1,     $6
+       addq    $2,     $6,     $6
+       addq    $3,     $6,     $6
+       addq    $23,    $6,     $23
+       cmpult  $23,    $6,     $22
+       srl     $4,     32,     $6
+       mulq    $5,     $6,     $5
+       bis     $31,    1,      $21
+       addq    $25,    $5,     $25
+       cmpult  $25,    $5,     $1
+       mulq    $6,     $8,     $6
+       beq     $1,     $321
+       sll     $21,    32,     $1
+       addq    $6,     $1,     $6
+$321:
+       sll     $25,    32,     $5
+       ldq     $2,     24($18)
+       addq    $0,     $5,     $0
+       bis     $0,     $0,     $7
+       ldq     $4,     40($17)
+       addq    $24,    $7,     $24
+       srl     $2,     32,     $8
+       cmpult  $24,    $7,     $3
+       zapnot  $4,     15,     $7
+       mulq    $8,     $7,     $28
+       srl     $25,    32,     $1
+       addq    $6,     $1,     $6
+       cmpult  $0,     $5,     $1
+       zapnot  $2,     15,     $5
+       addq    $1,     $6,     $6
+       addq    $3,     $6,     $6
+       addq    $23,    $6,     $23
+       cmpult  $23,    $6,     $1
+       srl     $4,     32,     $6
+       mulq    $5,     $6,     $25
+       mulq    $7,     $5,     $5
+       addq    $1,     $22,    $22
+       addq    $28,    $25,    $28
+       cmpult  $28,    $25,    $1
+       mulq    $6,     $8,     $6
+       beq     $1,     $325
+       sll     $21,    32,     $1
+       addq    $6,     $1,     $6
+$325:
+       sll     $28,    32,     $25
+       ldq     $2,     32($18)
+       addq    $5,     $25,    $5
+       bis     $5,     $5,     $7
+       ldq     $4,     32($17)
+       addq    $24,    $7,     $24
+       srl     $2,     32,     $8
+       cmpult  $24,    $7,     $3
+       zapnot  $4,     15,     $7
+       mulq    $8,     $7,     $0
+       srl     $28,    32,     $1
+       addq    $6,     $1,     $6
+       cmpult  $5,     $25,    $1
+       zapnot  $2,     15,     $5
+       addq    $1,     $6,     $6
+       addq    $3,     $6,     $6
+       addq    $23,    $6,     $23
+       cmpult  $23,    $6,     $1
+       srl     $4,     32,     $6
+       mulq    $5,     $6,     $25
+       mulq    $7,     $5,     $5
+       addq    $1,     $22,    $22
+       addq    $0,     $25,    $0
+       cmpult  $0,     $25,    $1
+       mulq    $6,     $8,     $6
+       beq     $1,     $329
+       sll     $21,    32,     $1
+       addq    $6,     $1,     $6
+$329:
+       sll     $0,     32,     $25
+       ldq     $2,     40($18)
+       addq    $5,     $25,    $5
+       bis     $5,     $5,     $7
+       ldq     $4,     24($17)
+       addq    $24,    $7,     $24
+       srl     $2,     32,     $8
+       cmpult  $24,    $7,     $3
+       zapnot  $4,     15,     $7
+       mulq    $8,     $7,     $28
+       srl     $0,     32,     $1
+       addq    $6,     $1,     $6
+       cmpult  $5,     $25,    $1
+       zapnot  $2,     15,     $5
+       addq    $1,     $6,     $6
+       addq    $3,     $6,     $6
+       addq    $23,    $6,     $23
+       cmpult  $23,    $6,     $1
+       srl     $4,     32,     $6
+       mulq    $5,     $6,     $25
+       mulq    $7,     $5,     $5
+       addq    $1,     $22,    $22
+       addq    $28,    $25,    $28
+       cmpult  $28,    $25,    $1
+       mulq    $6,     $8,     $6
+       beq     $1,     $333
+       sll     $21,    32,     $1
+       addq    $6,     $1,     $6
+$333:
+       sll     $28,    32,     $25
+       ldq     $2,     48($18)
+       addq    $5,     $25,    $5
+       bis     $5,     $5,     $7
+       ldq     $4,     16($17)
+       addq    $24,    $7,     $24
+       srl     $2,     32,     $8
+       cmpult  $24,    $7,     $3
+       zapnot  $4,     15,     $7
+       mulq    $8,     $7,     $0
+       srl     $28,    32,     $1
+       addq    $6,     $1,     $6
+       cmpult  $5,     $25,    $1
+       zapnot  $2,     15,     $5
+       addq    $1,     $6,     $6
+       addq    $3,     $6,     $6
+       addq    $23,    $6,     $23
+       cmpult  $23,    $6,     $1
+       srl     $4,     32,     $6
+       mulq    $5,     $6,     $25
+       mulq    $7,     $5,     $5
+       addq    $1,     $22,    $22
+       addq    $0,     $25,    $0
+       cmpult  $0,     $25,    $1
+       mulq    $6,     $8,     $6
+       beq     $1,     $337
+       sll     $21,    32,     $1
+       addq    $6,     $1,     $6
+$337:
+       sll     $0,     32,     $25
+       ldq     $2,     56($18)
+       addq    $5,     $25,    $5
+       bis     $5,     $5,     $7
+       ldq     $4,     8($17)
+       addq    $24,    $7,     $24
+       srl     $2,     32,     $8
+       cmpult  $24,    $7,     $3
+       zapnot  $4,     15,     $7
+       mulq    $8,     $7,     $28
+       srl     $0,     32,     $1
+       addq    $6,     $1,     $6
+       cmpult  $5,     $25,    $1
+       zapnot  $2,     15,     $5
+       addq    $1,     $6,     $6
+       addq    $3,     $6,     $6
+       addq    $23,    $6,     $23
+       cmpult  $23,    $6,     $1
+       srl     $4,     32,     $6
+       mulq    $5,     $6,     $25
+       mulq    $7,     $5,     $2
+       addq    $1,     $22,    $22
+       addq    $28,    $25,    $28
+       cmpult  $28,    $25,    $1
+       mulq    $6,     $8,     $6
+       beq     $1,     $341
+       sll     $21,    32,     $1
+       addq    $6,     $1,     $6
+$341:
+       sll     $28,    32,     $25
+       addq    $2,     $25,    $2
+       bis     $2,     $2,     $7
+       addq    $24,    $7,     $24
+       stq     $24,    64($16)
+       ldq     $4,     16($17)
+       ldq     $5,     56($18)
+       cmpult  $24,    $7,     $3
+       zapnot  $4,     15,     $7
+       srl     $5,     32,     $8
+       mulq    $8,     $7,     $0
+       srl     $28,    32,     $1
+       cmpult  $2,     $25,    $2
+       addq    $6,     $1,     $6
+       addq    $2,     $6,     $6
+       addq    $3,     $6,     $6
+       addq    $23,    $6,     $23
+       cmpult  $23,    $6,     $1
+       srl     $4,     32,     $6
+       zapnot  $5,     15,     $5
+       mulq    $5,     $6,     $24
+       mulq    $7,     $5,     $2
+       addq    $1,     $22,    $22
+       addq    $0,     $24,    $0
+       cmpult  $0,     $24,    $1
+       mulq    $6,     $8,     $6
+       beq     $1,     $345
+       sll     $21,    32,     $1
+       addq    $6,     $1,     $6
+$345:
+       sll     $0,     32,     $24
+       ldq     $1,     48($18)
+       addq    $2,     $24,    $2
+       bis     $2,     $2,     $7
+       ldq     $4,     24($17)
+       addq    $23,    $7,     $23
+       srl     $1,     32,     $8
+       cmpult  $23,    $7,     $3
+       zapnot  $4,     15,     $7
+       mulq    $8,     $7,     $25
+       zapnot  $1,     15,     $5
+       mulq    $7,     $5,     $21
+       srl     $0,     32,     $1
+       cmpult  $2,     $24,    $2
+       addq    $6,     $1,     $6
+       addq    $2,     $6,     $6
+       addq    $3,     $6,     $6
+       addq    $22,    $6,     $22
+       cmpult  $22,    $6,     $24
+       srl     $4,     32,     $6
+       mulq    $5,     $6,     $5
+       bis     $31,    1,      $20
+       addq    $25,    $5,     $25
+       cmpult  $25,    $5,     $1
+       mulq    $6,     $8,     $6
+       beq     $1,     $349
+       sll     $20,    32,     $1
+       addq    $6,     $1,     $6
+$349:
+       sll     $25,    32,     $5
+       ldq     $2,     40($18)
+       addq    $21,    $5,     $21
+       bis     $21,    $21,    $7
+       ldq     $4,     32($17)
+       addq    $23,    $7,     $23
+       srl     $2,     32,     $8
+       cmpult  $23,    $7,     $3
+       zapnot  $4,     15,     $7
+       mulq    $8,     $7,     $28
+       srl     $25,    32,     $1
+       addq    $6,     $1,     $6
+       cmpult  $21,    $5,     $1
+       zapnot  $2,     15,     $5
+       addq    $1,     $6,     $6
+       addq    $3,     $6,     $6
+       addq    $22,    $6,     $22
+       cmpult  $22,    $6,     $1
+       srl     $4,     32,     $6
+       mulq    $5,     $6,     $25
+       mulq    $7,     $5,     $5
+       addq    $1,     $24,    $24
+       addq    $28,    $25,    $28
+       cmpult  $28,    $25,    $1
+       mulq    $6,     $8,     $6
+       beq     $1,     $353
+       sll     $20,    32,     $1
+       addq    $6,     $1,     $6
+$353:
+       sll     $28,    32,     $25
+       ldq     $2,     32($18)
+       addq    $5,     $25,    $5
+       bis     $5,     $5,     $7
+       ldq     $4,     40($17)
+       addq    $23,    $7,     $23
+       srl     $2,     32,     $8
+       cmpult  $23,    $7,     $3
+       zapnot  $4,     15,     $7
+       mulq    $8,     $7,     $0
+       srl     $28,    32,     $1
+       addq    $6,     $1,     $6
+       cmpult  $5,     $25,    $1
+       zapnot  $2,     15,     $5
+       addq    $1,     $6,     $6
+       addq    $3,     $6,     $6
+       addq    $22,    $6,     $22
+       cmpult  $22,    $6,     $1
+       srl     $4,     32,     $6
+       mulq    $5,     $6,     $25
+       mulq    $7,     $5,     $5
+       addq    $1,     $24,    $24
+       addq    $0,     $25,    $0
+       cmpult  $0,     $25,    $1
+       mulq    $6,     $8,     $6
+       beq     $1,     $357
+       sll     $20,    32,     $1
+       addq    $6,     $1,     $6
+$357:
+       sll     $0,     32,     $25
+       ldq     $2,     24($18)
+       addq    $5,     $25,    $5
+       bis     $5,     $5,     $7
+       ldq     $4,     48($17)
+       addq    $23,    $7,     $23
+       srl     $2,     32,     $8
+       cmpult  $23,    $7,     $3
+       zapnot  $4,     15,     $7
+       mulq    $8,     $7,     $28
+       srl     $0,     32,     $1
+       addq    $6,     $1,     $6
+       cmpult  $5,     $25,    $1
+       zapnot  $2,     15,     $5
+       addq    $1,     $6,     $6
+       addq    $3,     $6,     $6
+       addq    $22,    $6,     $22
+       cmpult  $22,    $6,     $1
+       srl     $4,     32,     $6
+       mulq    $5,     $6,     $25
+       mulq    $7,     $5,     $5
+       addq    $1,     $24,    $24
+       addq    $28,    $25,    $28
+       cmpult  $28,    $25,    $1
+       mulq    $6,     $8,     $6
+       beq     $1,     $361
+       sll     $20,    32,     $1
+       addq    $6,     $1,     $6
+$361:
+       sll     $28,    32,     $25
+       ldq     $2,     16($18)
+       addq    $5,     $25,    $5
+       bis     $5,     $5,     $7
+       ldq     $4,     56($17)
+       addq    $23,    $7,     $23
+       srl     $2,     32,     $8
+       cmpult  $23,    $7,     $3
+       zapnot  $4,     15,     $7
+       mulq    $8,     $7,     $0
+       srl     $28,    32,     $1
+       addq    $6,     $1,     $6
+       cmpult  $5,     $25,    $1
+       zapnot  $2,     15,     $5
+       addq    $1,     $6,     $6
+       addq    $3,     $6,     $6
+       addq    $22,    $6,     $22
+       cmpult  $22,    $6,     $1
+       srl     $4,     32,     $6
+       mulq    $5,     $6,     $25
+       mulq    $7,     $5,     $2
+       addq    $1,     $24,    $24
+       addq    $0,     $25,    $0
+       cmpult  $0,     $25,    $1
+       mulq    $6,     $8,     $6
+       beq     $1,     $365
+       sll     $20,    32,     $1
+       addq    $6,     $1,     $6
+$365:
+       sll     $0,     32,     $25
+       addq    $2,     $25,    $2
+       bis     $2,     $2,     $7
+       addq    $23,    $7,     $23
+       stq     $23,    72($16)
+       ldq     $4,     56($17)
+       ldq     $5,     24($18)
+       cmpult  $23,    $7,     $3
+       zapnot  $4,     15,     $7
+       srl     $5,     32,     $8
+       mulq    $8,     $7,     $28
+       srl     $0,     32,     $1
+       cmpult  $2,     $25,    $2
+       addq    $6,     $1,     $6
+       addq    $2,     $6,     $6
+       addq    $3,     $6,     $6
+       addq    $22,    $6,     $22
+       cmpult  $22,    $6,     $1
+       srl     $4,     32,     $6
+       zapnot  $5,     15,     $5
+       mulq    $5,     $6,     $23
+       mulq    $7,     $5,     $2
+       addq    $1,     $24,    $24
+       addq    $28,    $23,    $28
+       cmpult  $28,    $23,    $1
+       mulq    $6,     $8,     $6
+       beq     $1,     $369
+       sll     $20,    32,     $1
+       addq    $6,     $1,     $6
+$369:
+       sll     $28,    32,     $23
+       ldq     $1,     32($18)
+       addq    $2,     $23,    $2
+       bis     $2,     $2,     $7
+       ldq     $4,     48($17)
+       addq    $22,    $7,     $22
+       srl     $1,     32,     $8
+       cmpult  $22,    $7,     $3
+       zapnot  $4,     15,     $7
+       mulq    $8,     $7,     $25
+       zapnot  $1,     15,     $5
+       mulq    $7,     $5,     $0
+       srl     $28,    32,     $1
+       cmpult  $2,     $23,    $2
+       addq    $6,     $1,     $6
+       addq    $2,     $6,     $6
+       addq    $3,     $6,     $6
+       addq    $24,    $6,     $24
+       cmpult  $24,    $6,     $23
+       srl     $4,     32,     $6
+       mulq    $5,     $6,     $5
+       bis     $31,    1,      $21
+       addq    $25,    $5,     $25
+       cmpult  $25,    $5,     $1
+       mulq    $6,     $8,     $6
+       beq     $1,     $373
+       sll     $21,    32,     $1
+       addq    $6,     $1,     $6
+$373:
+       sll     $25,    32,     $5
+       ldq     $2,     40($18)
+       addq    $0,     $5,     $0
+       bis     $0,     $0,     $7
+       ldq     $4,     40($17)
+       addq    $22,    $7,     $22
+       srl     $2,     32,     $8
+       cmpult  $22,    $7,     $3
+       zapnot  $4,     15,     $7
+       mulq    $8,     $7,     $28
+       srl     $25,    32,     $1
+       addq    $6,     $1,     $6
+       cmpult  $0,     $5,     $1
+       zapnot  $2,     15,     $5
+       addq    $1,     $6,     $6
+       addq    $3,     $6,     $6
+       addq    $24,    $6,     $24
+       cmpult  $24,    $6,     $1
+       srl     $4,     32,     $6
+       mulq    $5,     $6,     $25
+       mulq    $7,     $5,     $5
+       addq    $1,     $23,    $23
+       addq    $28,    $25,    $28
+       cmpult  $28,    $25,    $1
+       mulq    $6,     $8,     $6
+       beq     $1,     $377
+       sll     $21,    32,     $1
+       addq    $6,     $1,     $6
+$377:
+       sll     $28,    32,     $25
+       ldq     $2,     48($18)
+       addq    $5,     $25,    $5
+       bis     $5,     $5,     $7
+       ldq     $4,     32($17)
+       addq    $22,    $7,     $22
+       srl     $2,     32,     $8
+       cmpult  $22,    $7,     $3
+       zapnot  $4,     15,     $7
+       mulq    $8,     $7,     $0
+       srl     $28,    32,     $1
+       addq    $6,     $1,     $6
+       cmpult  $5,     $25,    $1
+       zapnot  $2,     15,     $5
+       addq    $1,     $6,     $6
+       addq    $3,     $6,     $6
+       addq    $24,    $6,     $24
+       cmpult  $24,    $6,     $1
+       srl     $4,     32,     $6
+       mulq    $5,     $6,     $25
+       mulq    $7,     $5,     $5
+       addq    $1,     $23,    $23
+       addq    $0,     $25,    $0
+       cmpult  $0,     $25,    $1
+       mulq    $6,     $8,     $6
+       beq     $1,     $381
+       sll     $21,    32,     $1
+       addq    $6,     $1,     $6
+$381:
+       sll     $0,     32,     $25
+       ldq     $2,     56($18)
+       addq    $5,     $25,    $5
+       bis     $5,     $5,     $7
+       ldq     $4,     24($17)
+       addq    $22,    $7,     $22
+       srl     $2,     32,     $8
+       cmpult  $22,    $7,     $3
+       zapnot  $4,     15,     $7
+       mulq    $8,     $7,     $28
+       srl     $0,     32,     $1
+       addq    $6,     $1,     $6
+       cmpult  $5,     $25,    $1
+       zapnot  $2,     15,     $5
+       addq    $1,     $6,     $6
+       addq    $3,     $6,     $6
+       addq    $24,    $6,     $24
+       cmpult  $24,    $6,     $1
+       srl     $4,     32,     $6
+       mulq    $5,     $6,     $25
+       mulq    $7,     $5,     $2
+       addq    $1,     $23,    $23
+       addq    $28,    $25,    $28
+       cmpult  $28,    $25,    $1
+       mulq    $6,     $8,     $6
+       beq     $1,     $385
+       sll     $21,    32,     $1
+       addq    $6,     $1,     $6
+$385:
+       sll     $28,    32,     $25
+       addq    $2,     $25,    $2
+       bis     $2,     $2,     $7
+       addq    $22,    $7,     $22
+       stq     $22,    80($16)
+       ldq     $4,     32($17)
+       ldq     $5,     56($18)
+       cmpult  $22,    $7,     $3
+       zapnot  $4,     15,     $7
+       srl     $5,     32,     $8
+       mulq    $8,     $7,     $0
+       srl     $28,    32,     $1
+       cmpult  $2,     $25,    $2
+       addq    $6,     $1,     $6
+       addq    $2,     $6,     $6
+       addq    $3,     $6,     $6
+       addq    $24,    $6,     $24
+       cmpult  $24,    $6,     $1
+       srl     $4,     32,     $6
+       zapnot  $5,     15,     $5
+       mulq    $5,     $6,     $22
+       mulq    $7,     $5,     $2
+       addq    $1,     $23,    $23
+       addq    $0,     $22,    $0
+       cmpult  $0,     $22,    $1
+       mulq    $6,     $8,     $6
+       beq     $1,     $389
+       sll     $21,    32,     $1
+       addq    $6,     $1,     $6
+$389:
+       sll     $0,     32,     $22
+       ldq     $1,     48($18)
+       addq    $2,     $22,    $2
+       bis     $2,     $2,     $7
+       ldq     $4,     40($17)
+       addq    $24,    $7,     $24
+       srl     $1,     32,     $8
+       cmpult  $24,    $7,     $3
+       zapnot  $4,     15,     $7
+       mulq    $8,     $7,     $25
+       zapnot  $1,     15,     $5
+       mulq    $7,     $5,     $21
+       srl     $0,     32,     $1
+       cmpult  $2,     $22,    $2
+       addq    $6,     $1,     $6
+       addq    $2,     $6,     $6
+       addq    $3,     $6,     $6
+       addq    $23,    $6,     $23
+       cmpult  $23,    $6,     $22
+       srl     $4,     32,     $6
+       mulq    $5,     $6,     $5
+       bis     $31,    1,      $20
+       addq    $25,    $5,     $25
+       cmpult  $25,    $5,     $1
+       mulq    $6,     $8,     $6
+       beq     $1,     $393
+       sll     $20,    32,     $1
+       addq    $6,     $1,     $6
+$393:
+       sll     $25,    32,     $5
+       ldq     $2,     40($18)
+       addq    $21,    $5,     $21
+       bis     $21,    $21,    $7
+       ldq     $4,     48($17)
+       addq    $24,    $7,     $24
+       srl     $2,     32,     $8
+       cmpult  $24,    $7,     $3
+       zapnot  $4,     15,     $7
+       mulq    $8,     $7,     $28
+       srl     $25,    32,     $1
+       addq    $6,     $1,     $6
+       cmpult  $21,    $5,     $1
+       zapnot  $2,     15,     $5
+       addq    $1,     $6,     $6
+       addq    $3,     $6,     $6
+       addq    $23,    $6,     $23
+       cmpult  $23,    $6,     $1
+       srl     $4,     32,     $6
+       mulq    $5,     $6,     $25
+       mulq    $7,     $5,     $5
+       addq    $1,     $22,    $22
+       addq    $28,    $25,    $28
+       cmpult  $28,    $25,    $1
+       mulq    $6,     $8,     $6
+       beq     $1,     $397
+       sll     $20,    32,     $1
+       addq    $6,     $1,     $6
+$397:
+       sll     $28,    32,     $25
+       ldq     $2,     32($18)
+       addq    $5,     $25,    $5
+       bis     $5,     $5,     $7
+       ldq     $4,     56($17)
+       addq    $24,    $7,     $24
+       srl     $2,     32,     $8
+       cmpult  $24,    $7,     $3
+       zapnot  $4,     15,     $7
+       mulq    $8,     $7,     $21
+       srl     $28,    32,     $1
+       addq    $6,     $1,     $6
+       cmpult  $5,     $25,    $1
+       zapnot  $2,     15,     $5
+       addq    $1,     $6,     $6
+       addq    $3,     $6,     $6
+       addq    $23,    $6,     $23
+       cmpult  $23,    $6,     $1
+       srl     $4,     32,     $6
+       mulq    $5,     $6,     $25
+       mulq    $7,     $5,     $2
+       addq    $1,     $22,    $22
+       addq    $21,    $25,    $21
+       cmpult  $21,    $25,    $1
+       mulq    $6,     $8,     $6
+       beq     $1,     $401
+       sll     $20,    32,     $1
+       addq    $6,     $1,     $6
+$401:
+       sll     $21,    32,     $25
+       addq    $2,     $25,    $2
+       bis     $2,     $2,     $7
+       addq    $24,    $7,     $24
+       stq     $24,    88($16)
+       ldq     $4,     56($17)
+       ldq     $5,     40($18)
+       cmpult  $24,    $7,     $3
+       zapnot  $4,     15,     $7
+       srl     $5,     32,     $8
+       mulq    $8,     $7,     $0
+       srl     $21,    32,     $1
+       cmpult  $2,     $25,    $2
+       addq    $6,     $1,     $6
+       addq    $2,     $6,     $6
+       addq    $3,     $6,     $6
+       addq    $23,    $6,     $23
+       cmpult  $23,    $6,     $1
+       srl     $4,     32,     $6
+       zapnot  $5,     15,     $5
+       mulq    $5,     $6,     $24
+       mulq    $7,     $5,     $5
+       addq    $1,     $22,    $22
+       addq    $0,     $24,    $0
+       cmpult  $0,     $24,    $1
+       mulq    $6,     $8,     $6
+       beq     $1,     $405
+       sll     $20,    32,     $1
+       addq    $6,     $1,     $6
+$405:
+       sll     $0,     32,     $24
+       ldq     $2,     48($18)
+       addq    $5,     $24,    $5
+       bis     $5,     $5,     $7
+       ldq     $4,     48($17)
+       addq    $23,    $7,     $23
+       srl     $2,     32,     $8
+       cmpult  $23,    $7,     $3
+       zapnot  $4,     15,     $7
+       mulq    $8,     $7,     $28
+       srl     $0,     32,     $1
+       addq    $6,     $1,     $6
+       cmpult  $5,     $24,    $1
+       zapnot  $2,     15,     $5
+       addq    $1,     $6,     $6
+       addq    $3,     $6,     $6
+       addq    $22,    $6,     $22
+       cmpult  $22,    $6,     $24
+       srl     $4,     32,     $6
+       mulq    $5,     $6,     $25
+       mulq    $7,     $5,     $5
+       addq    $28,    $25,    $28
+       cmpult  $28,    $25,    $1
+       mulq    $6,     $8,     $6
+       beq     $1,     $409
+       sll     $20,    32,     $1
+       addq    $6,     $1,     $6
+$409:
+       sll     $28,    32,     $25
+       ldq     $2,     56($18)
+       addq    $5,     $25,    $5
+       bis     $5,     $5,     $7
+       ldq     $4,     40($17)
+       addq    $23,    $7,     $23
+       srl     $2,     32,     $8
+       cmpult  $23,    $7,     $3
+       zapnot  $4,     15,     $7
+       mulq    $8,     $7,     $0
+       srl     $28,    32,     $1
+       addq    $6,     $1,     $6
+       cmpult  $5,     $25,    $1
+       zapnot  $2,     15,     $5
+       addq    $1,     $6,     $6
+       addq    $3,     $6,     $6
+       addq    $22,    $6,     $22
+       cmpult  $22,    $6,     $1
+       srl     $4,     32,     $6
+       mulq    $5,     $6,     $25
+       mulq    $7,     $5,     $2
+       addq    $1,     $24,    $24
+       addq    $0,     $25,    $0
+       cmpult  $0,     $25,    $1
+       mulq    $6,     $8,     $6
+       beq     $1,     $413
+       sll     $20,    32,     $1
+       addq    $6,     $1,     $6
+$413:
+       sll     $0,     32,     $25
+       addq    $2,     $25,    $2
+       bis     $2,     $2,     $7
+       addq    $23,    $7,     $23
+       stq     $23,    96($16)
+       ldq     $4,     48($17)
+       ldq     $5,     56($18)
+       cmpult  $23,    $7,     $3
+       zapnot  $4,     15,     $7
+       srl     $5,     32,     $8
+       mulq    $8,     $7,     $28
+       srl     $0,     32,     $1
+       cmpult  $2,     $25,    $2
+       addq    $6,     $1,     $6
+       addq    $2,     $6,     $6
+       addq    $3,     $6,     $6
+       addq    $22,    $6,     $22
+       cmpult  $22,    $6,     $1
+       srl     $4,     32,     $6
+       zapnot  $5,     15,     $5
+       mulq    $5,     $6,     $23
+       mulq    $7,     $5,     $5
+       addq    $1,     $24,    $24
+       addq    $28,    $23,    $28
+       cmpult  $28,    $23,    $1
+       mulq    $6,     $8,     $6
+       beq     $1,     $417
+       sll     $20,    32,     $1
+       addq    $6,     $1,     $6
+$417:
+       sll     $28,    32,     $23
+       ldq     $2,     48($18)
+       addq    $5,     $23,    $5
+       bis     $5,     $5,     $7
+       ldq     $4,     56($17)
+       addq    $22,    $7,     $22
+       srl     $2,     32,     $8
+       cmpult  $22,    $7,     $3
+       zapnot  $4,     15,     $7
+       mulq    $8,     $7,     $0
+       srl     $28,    32,     $1
+       addq    $6,     $1,     $6
+       cmpult  $5,     $23,    $1
+       zapnot  $2,     15,     $5
+       addq    $1,     $6,     $6
+       addq    $3,     $6,     $6
+       addq    $24,    $6,     $24
+       cmpult  $24,    $6,     $23
+       srl     $4,     32,     $6
+       mulq    $5,     $6,     $25
+       mulq    $7,     $5,     $2
+       addq    $0,     $25,    $0
+       cmpult  $0,     $25,    $1
+       mulq    $6,     $8,     $6
+       beq     $1,     $421
+       sll     $20,    32,     $1
+       addq    $6,     $1,     $6
+$421:
+       sll     $0,     32,     $25
+       addq    $2,     $25,    $2
+       bis     $2,     $2,     $7
+       addq    $22,    $7,     $22
+       stq     $22,    104($16)
+       ldq     $4,     56($17)
+       ldq     $5,     56($18)
+       cmpult  $22,    $7,     $3
+       zapnot  $4,     15,     $7
+       srl     $5,     32,     $8
+       mulq    $8,     $7,     $28
+       srl     $0,     32,     $1
+       cmpult  $2,     $25,    $2
+       addq    $6,     $1,     $6
+       addq    $2,     $6,     $6
+       addq    $3,     $6,     $6
+       addq    $24,    $6,     $24
+       cmpult  $24,    $6,     $1
+       srl     $4,     32,     $6
+       zapnot  $5,     15,     $5
+       mulq    $5,     $6,     $22
+       mulq    $7,     $5,     $2
+       addq    $1,     $23,    $23
+       addq    $28,    $22,    $28
+       cmpult  $28,    $22,    $1
+       mulq    $6,     $8,     $3
+       beq     $1,     $425
+       sll     $20,    32,     $1
+       addq    $3,     $1,     $3
+$425:
+       sll     $28,    32,     $22
+       srl     $28,    32,     $1
+       addq    $2,     $22,    $2
+       addq    $3,     $1,     $3
+       bis     $2,     $2,     $7
+       addq    $24,    $7,     $24
+       cmpult  $7,     $22,    $1
+       cmpult  $24,    $7,     $2
+       addq    $1,     $3,     $6
+       addq    $2,     $6,     $6
+       stq     $24,    112($16)
+       addq    $23,    $6,     $23
+       stq     $23,    120($16)
+       ret     $31,    ($26),  1
        .end bn_mul_comba8
        .text
        .align 3
Index: opensa/openssl/crypto/bn/asm/mips3.s
diff -u opensa/openssl/crypto/bn/asm/mips3.s:1.1 
opensa/openssl/crypto/bn/asm/mips3.s:1.2
--- opensa/openssl/crypto/bn/asm/mips3.s:1.1    Tue Jan 25 23:33:32 2000
+++ opensa/openssl/crypto/bn/asm/mips3.s        Thu Mar  2 21:11:52 2000
@@ -395,32 +395,32 @@
 
 .L_bn_add_words_loop:
        ld      ta0,0(a2)
+       subu    a3,4
        ld      t1,8(a1)
-       ld      ta1,8(a2)
+       and     AT,a3,MINUS4
        ld      t2,16(a1)
-       ld      ta2,16(a2)
+       PTR_ADD a2,32
        ld      t3,24(a1)
-       ld      ta3,24(a2)
+       PTR_ADD a0,32
+       ld      ta1,-24(a2)
+       PTR_ADD a1,32
+       ld      ta2,-16(a2)
+       ld      ta3,-8(a2)
        daddu   ta0,t0
-       subu    a3,4
        sltu    t8,ta0,t0
        daddu   t0,ta0,v0
-       PTR_ADD a0,32
        sltu    v0,t0,ta0
        sd      t0,-32(a0)
        daddu   v0,t8
 
        daddu   ta1,t1
-       PTR_ADD a1,32
        sltu    t9,ta1,t1
        daddu   t1,ta1,v0
-       PTR_ADD a2,32
        sltu    v0,t1,ta1
        sd      t1,-24(a0)
        daddu   v0,t9
 
        daddu   ta2,t2
-       and     AT,a3,MINUS4
        sltu    t8,ta2,t2
        daddu   t2,ta2,v0
        sltu    v0,t2,ta2
@@ -495,25 +495,26 @@
 
 .L_bn_sub_words_loop:
        ld      ta0,0(a2)
+       subu    a3,4
        ld      t1,8(a1)
-       ld      ta1,8(a2)
+       and     AT,a3,MINUS4
        ld      t2,16(a1)
-       ld      ta2,16(a2)
+       PTR_ADD a2,32
        ld      t3,24(a1)
-       ld      ta3,24(a2)
+       PTR_ADD a0,32
+       ld      ta1,-24(a2)
+       PTR_ADD a1,32
+       ld      ta2,-16(a2)
+       ld      ta3,-8(a2)
        sltu    t8,t0,ta0
        dsubu   t0,ta0
-       subu    a3,4
        dsubu   ta0,t0,v0
-       and     AT,a3,MINUS4
-       sd      ta0,0(a0)
+       sd      ta0,-32(a0)
        MOVNZ   (t0,v0,t8)
 
        sltu    t9,t1,ta1
        dsubu   t1,ta1
-       PTR_ADD a0,32
        dsubu   ta1,t1,v0
-       PTR_ADD a1,32
        sd      ta1,-24(a0)
        MOVNZ   (t1,v0,t9)
 
@@ -521,7 +522,6 @@
        sltu    t8,t2,ta2
        dsubu   t2,ta2
        dsubu   ta2,t2,v0
-       PTR_ADD a2,32
        sd      ta2,-16(a0)
        MOVNZ   (t2,v0,t8)
 
@@ -574,6 +574,51 @@
 
 #undef MINUS4
 
+.align 5
+LEAF(bn_div_3_words)
+       .set    reorder
+       move    a3,a0           /* we know that bn_div_words doesn't
+                                * touch a3, ta2, ta3 and preserves a2
+                                * so that we can save two arguments
+                                * and return address in registers
+                                * instead of stack:-)
+                                */
+       ld      a0,(a3)
+       move    ta2,a1
+       ld      a1,-8(a3)
+       move    ta3,ra
+       move    v1,zero
+       li      v0,-1
+       beq     a0,a2,.L_bn_div_3_words_skip_div
+       bal     bn_div_words
+       move    ra,ta3
+.L_bn_div_3_words_skip_div:
+       dmultu  ta2,v0
+       ld      t2,-16(a3)
+       move    ta0,zero
+       mfhi    t1
+       mflo    t0
+       sltu    t8,t1,v1
+.L_bn_div_3_words_inner_loop:
+       bnez    t8,.L_bn_div_3_words_inner_loop_done
+       sgeu    AT,t2,t0
+       seq     t9,t1,v1
+       and     AT,t9
+       sltu    t3,t0,ta2
+       daddu   v1,a2
+       dsubu   t1,t3
+       dsubu   t0,ta2
+       sltu    t8,t1,v1
+       sltu    ta0,v1,a2
+       or      t8,ta0
+       .set    noreorder
+       beqzl   AT,.L_bn_div_3_words_inner_loop
+       dsubu   v0,1
+       .set    reorder
+.L_bn_div_3_words_inner_loop_done:
+       jr      ra
+END(bn_div_3_words)
+
 .align 5
 LEAF(bn_div_words)
        .set    noreorder
@@ -633,16 +678,16 @@
        seq     t8,HH,t1
        sltu    AT,HH,t1
        and     t2,t8
+       sltu    v0,t0,a2
        or      AT,t2
        .set    noreorder
        beqz    AT,.L_bn_div_words_inner_loop1_done
-       sltu    t2,t0,a2
-       .set    reorder
-       dsubu   QT,1
+       dsubu   t1,v0
        dsubu   t0,a2
-       dsubu   t1,t2
        b       .L_bn_div_words_inner_loop1
-.L_bn_div_words_inner_loop1_done:      
+       dsubu   QT,1
+       .set    reorder
+.L_bn_div_words_inner_loop1_done:
 
        dsll    a1,32
        dsubu   a0,t3,t0
@@ -655,6 +700,7 @@
        ddivu   zero,a0,DH
        mflo    QT
 .L_bn_div_words_skip_div2:
+#undef DH
        dmultu  a2,QT
        dsll    t3,a0,32
        dsrl    AT,a1,32
@@ -666,68 +712,25 @@
        seq     t8,HH,t1
        sltu    AT,HH,t1
        and     t2,t8
+       sltu    v1,t0,a2
        or      AT,t2
        .set    noreorder
        beqz    AT,.L_bn_div_words_inner_loop2_done
-       sltu    t2,t0,a2
-       .set    reorder
-       dsubu   QT,1
+       dsubu   t1,v1
        dsubu   t0,a2
-       dsubu   t1,t2
        b       .L_bn_div_words_inner_loop2
+       dsubu   QT,1
+       .set    reorder
 .L_bn_div_words_inner_loop2_done:      
+#undef HH
 
        dsubu   a0,t3,t0
        or      v0,QT
        dsrl    v1,a0,t9        /* v1 contains remainder if anybody wants it */
        dsrl    a2,t9           /* restore a2 */
        jr      ra
-#undef HH
-#undef DH
 #undef QT
 END(bn_div_words)
-
-.align 5
-LEAF(bn_div_3_words)
-       .set    reorder
-       move    a3,a0           /* we know that bn_div_words doesn't
-                                * touch a3, ta2, ta3 and preserves a2
-                                * so that we can save two arguments
-                                * and return address in registers
-                                * instead of stack:-)
-                                */
-       ld      a0,(a3)
-       move    ta2,a2
-       move    a2,a1
-       ld      a1,-8(a3)
-       move    ta3,ra
-       move    v1,zero
-       li      v0,-1
-       beq     a0,a2,.L_bn_div_3_words_skip_div
-       jal     bn_div_words
-       move    ra,ta3
-.L_bn_div_3_words_skip_div:
-       dmultu  ta2,v0
-       ld      t2,-16(a3)
-       mflo    t0
-       mfhi    t1
-.L_bn_div_3_words_inner_loop:
-       sgeu    AT,t2,t0
-       seq     t9,t1,v1
-       sltu    t8,t1,v1
-       and     AT,t9
-       or      AT,t8
-       bnez    AT,.L_bn_div_3_words_inner_loop_done
-       daddu   v1,a2
-       sltu    t3,t0,ta2
-       sltu    AT,v1,a2
-       dsubu   v0,1
-       dsubu   t0,ta2
-       dsubu   t1,t3
-       beqz    AT,.L_bn_div_3_words_inner_loop
-.L_bn_div_3_words_inner_loop_done:
-       jr      ra
-END(bn_div_3_words)
 
 #define        a_0     t0
 #define        a_1     t1
Index: opensa/openssl/crypto/bn/asm/readme
diff -u opensa/openssl/crypto/bn/asm/readme:1.1 opensa/openssl/crypto/bn/asm/readme:1.2
--- opensa/openssl/crypto/bn/asm/readme:1.1     Tue Jan 25 23:33:32 2000
+++ opensa/openssl/crypto/bn/asm/readme Thu Mar  2 21:11:52 2000
@@ -1,5 +1,5 @@
 All assember in this directory are just version of the file
-crypto/bn/bn_mulw.c.
+crypto/bn/bn_asm.c.
 
 Quite a few of these files are just the assember output from gcc since on 
 quite a few machines they are 2 times faster than the system compiler.
@@ -14,13 +14,6 @@
 64b x 64b -> 128b calculations (both long and the long long data types
 were 64 bits).  So the hand assember gives access to the 128 bit result and
 a 2 times speedup :-).
-
-The x86xxxx.obj files are the assembled version of x86xxxx.asm files.
-I had such a hard time finding a macro assember for Microsoft, I decided to
-include the object file to save others the hassle :-).
-
-I have also included uu encoded versions of the .obj incase they get
-trashed.
 
 There are 2 versions of assember for the HP PA-RISC.
 pa-risc.s is the origional one which works fine.
Index: opensa/openssl/crypto/buffer/makefile.ssl
diff -u opensa/openssl/crypto/buffer/makefile.ssl:1.1 
opensa/openssl/crypto/buffer/makefile.ssl:1.2
--- opensa/openssl/crypto/buffer/makefile.ssl:1.1       Tue Jan 25 23:32:48 2000
+++ opensa/openssl/crypto/buffer/makefile.ssl   Thu Mar  2 21:11:52 2000
@@ -83,4 +83,5 @@
 buffer.o: ../../include/openssl/crypto.h ../../include/openssl/e_os.h
 buffer.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
 buffer.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
-buffer.o: ../../include/openssl/stack.h ../cryptlib.h
+buffer.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
+buffer.o: ../cryptlib.h
Index: opensa/openssl/crypto/cast/c_ecb.c
diff -u opensa/openssl/crypto/cast/c_ecb.c:1.1 opensa/openssl/crypto/cast/c_ecb.c:1.2
--- opensa/openssl/crypto/cast/c_ecb.c:1.1      Tue Jan 25 23:32:19 2000
+++ opensa/openssl/crypto/cast/c_ecb.c  Thu Mar  2 21:11:52 2000
@@ -60,7 +60,7 @@
 #include "cast_lcl.h"
 #include <openssl/opensslv.h>
 
-char *CAST_version="CAST" OPENSSL_VERSION_PTEXT;
+const char *CAST_version="CAST" OPENSSL_VERSION_PTEXT;
 
 void CAST_ecb_encrypt(const unsigned char *in, unsigned char *out,
                      CAST_KEY *ks, int enc)
Index: opensa/openssl/crypto/cast/cast_lcl.h
diff -u opensa/openssl/crypto/cast/cast_lcl.h:1.1 
opensa/openssl/crypto/cast/cast_lcl.h:1.2
--- opensa/openssl/crypto/cast/cast_lcl.h:1.1   Tue Jan 25 23:32:19 2000
+++ opensa/openssl/crypto/cast/cast_lcl.h       Thu Mar  2 21:11:52 2000
@@ -216,11 +216,11 @@
        }
 #endif
 
-OPENSSL_EXTERN CAST_LONG CAST_S_table0[256];
-OPENSSL_EXTERN CAST_LONG CAST_S_table1[256];
-OPENSSL_EXTERN CAST_LONG CAST_S_table2[256];
-OPENSSL_EXTERN CAST_LONG CAST_S_table3[256];
-OPENSSL_EXTERN CAST_LONG CAST_S_table4[256];
-OPENSSL_EXTERN CAST_LONG CAST_S_table5[256];
-OPENSSL_EXTERN CAST_LONG CAST_S_table6[256];
-OPENSSL_EXTERN CAST_LONG CAST_S_table7[256];
+OPENSSL_EXTERN const CAST_LONG CAST_S_table0[256];
+OPENSSL_EXTERN const CAST_LONG CAST_S_table1[256];
+OPENSSL_EXTERN const CAST_LONG CAST_S_table2[256];
+OPENSSL_EXTERN const CAST_LONG CAST_S_table3[256];
+OPENSSL_EXTERN const CAST_LONG CAST_S_table4[256];
+OPENSSL_EXTERN const CAST_LONG CAST_S_table5[256];
+OPENSSL_EXTERN const CAST_LONG CAST_S_table6[256];
+OPENSSL_EXTERN const CAST_LONG CAST_S_table7[256];
Index: opensa/openssl/crypto/cast/cast_s.h
diff -u opensa/openssl/crypto/cast/cast_s.h:1.1 opensa/openssl/crypto/cast/cast_s.h:1.2
--- opensa/openssl/crypto/cast/cast_s.h:1.1     Tue Jan 25 23:32:19 2000
+++ opensa/openssl/crypto/cast/cast_s.h Thu Mar  2 21:11:52 2000
@@ -55,7 +55,7 @@
  * copied and put under another distribution licence
  * [including the GNU Public Licence.]
  */
-OPENSSL_GLOBAL CAST_LONG CAST_S_table0[256]={
+OPENSSL_GLOBAL const CAST_LONG CAST_S_table0[256]={
        0x30fb40d4,0x9fa0ff0b,0x6beccd2f,0x3f258c7a,
        0x1e213f2f,0x9c004dd3,0x6003e540,0xcf9fc949,
        0xbfd4af27,0x88bbbdb5,0xe2034090,0x98d09675,
@@ -121,7 +121,7 @@
        0x1a69e783,0x02cc4843,0xa2f7c579,0x429ef47d,
        0x427b169c,0x5ac9f049,0xdd8f0f00,0x5c8165bf,
        };
-OPENSSL_GLOBAL CAST_LONG CAST_S_table1[256]={
+OPENSSL_GLOBAL const CAST_LONG CAST_S_table1[256]={
        0x1f201094,0xef0ba75b,0x69e3cf7e,0x393f4380,
        0xfe61cf7a,0xeec5207a,0x55889c94,0x72fc0651,
        0xada7ef79,0x4e1d7235,0xd55a63ce,0xde0436ba,
@@ -187,7 +187,7 @@
        0x43d79572,0x7e6dd07c,0x06dfdf1e,0x6c6cc4ef,
        0x7160a539,0x73bfbe70,0x83877605,0x4523ecf1,
        };
-OPENSSL_GLOBAL CAST_LONG CAST_S_table2[256]={
+OPENSSL_GLOBAL const CAST_LONG CAST_S_table2[256]={
        0x8defc240,0x25fa5d9f,0xeb903dbf,0xe810c907,
        0x47607fff,0x369fe44b,0x8c1fc644,0xaececa90,
        0xbeb1f9bf,0xeefbcaea,0xe8cf1950,0x51df07ae,
@@ -253,7 +253,7 @@
        0xf7baefd5,0x4142ed9c,0xa4315c11,0x83323ec5,
        0xdfef4636,0xa133c501,0xe9d3531c,0xee353783,
        };
-OPENSSL_GLOBAL CAST_LONG CAST_S_table3[256]={
+OPENSSL_GLOBAL const CAST_LONG CAST_S_table3[256]={
        0x9db30420,0x1fb6e9de,0xa7be7bef,0xd273a298,
        0x4a4f7bdb,0x64ad8c57,0x85510443,0xfa020ed1,
        0x7e287aff,0xe60fb663,0x095f35a1,0x79ebf120,
@@ -319,7 +319,7 @@
        0x7ae5290c,0x3cb9536b,0x851e20fe,0x9833557e,
        0x13ecf0b0,0xd3ffb372,0x3f85c5c1,0x0aef7ed2,
        };
-OPENSSL_GLOBAL CAST_LONG CAST_S_table4[256]={
+OPENSSL_GLOBAL const CAST_LONG CAST_S_table4[256]={
        0x7ec90c04,0x2c6e74b9,0x9b0e66df,0xa6337911,
        0xb86a7fff,0x1dd358f5,0x44dd9d44,0x1731167f,
        0x08fbf1fa,0xe7f511cc,0xd2051b00,0x735aba00,
@@ -385,7 +385,7 @@
        0xe822fe15,0x88570983,0x750e6249,0xda627e55,
        0x5e76ffa8,0xb1534546,0x6d47de08,0xefe9e7d4,
        };
-OPENSSL_GLOBAL CAST_LONG CAST_S_table5[256]={
+OPENSSL_GLOBAL const CAST_LONG CAST_S_table5[256]={
        0xf6fa8f9d,0x2cac6ce1,0x4ca34867,0xe2337f7c,
        0x95db08e7,0x016843b4,0xeced5cbc,0x325553ac,
        0xbf9f0960,0xdfa1e2ed,0x83f0579d,0x63ed86b9,
@@ -451,7 +451,7 @@
        0xa2d762cf,0x49c92f54,0x38b5f331,0x7128a454,
        0x48392905,0xa65b1db8,0x851c97bd,0xd675cf2f,
        };
-OPENSSL_GLOBAL CAST_LONG CAST_S_table6[256]={
+OPENSSL_GLOBAL const CAST_LONG CAST_S_table6[256]={
        0x85e04019,0x332bf567,0x662dbfff,0xcfc65693,
        0x2a8d7f6f,0xab9bc912,0xde6008a1,0x2028da1f,
        0x0227bce7,0x4d642916,0x18fac300,0x50f18b82,
@@ -517,7 +517,7 @@
        0x518f36b2,0x84b1d370,0x0fedce83,0x878ddada,
        0xf2a279c7,0x94e01be8,0x90716f4b,0x954b8aa3,
        };
-OPENSSL_GLOBAL CAST_LONG CAST_S_table7[256]={
+OPENSSL_GLOBAL const CAST_LONG CAST_S_table7[256]={
        0xe216300d,0xbbddfffc,0xa7ebdabd,0x35648095,
        0x7789f8b7,0xe6c1121b,0x0e241600,0x052ce8b5,
        0x11a9cfb0,0xe5952f11,0xece7990a,0x9386d174,
Index: opensa/openssl/crypto/cast/cast_spd.c
diff -u opensa/openssl/crypto/cast/cast_spd.c:1.1 
opensa/openssl/crypto/cast/cast_spd.c:1.2
--- opensa/openssl/crypto/cast/cast_spd.c:1.1   Tue Jan 25 23:32:19 2000
+++ opensa/openssl/crypto/cast/cast_spd.c       Thu Mar  2 21:11:52 2000
@@ -183,7 +183,7 @@
 #endif
 
 #ifndef TIMES
-       printf("To get the most acurate results, try to run this\n");
+       printf("To get the most accurate results, try to run this\n");
        printf("program when this computer is idle.\n");
 #endif
 
Index: opensa/openssl/crypto/cast/castopts.c
diff -u opensa/openssl/crypto/cast/castopts.c:1.1 
opensa/openssl/crypto/cast/castopts.c:1.2
--- opensa/openssl/crypto/cast/castopts.c:1.1   Tue Jan 25 23:32:19 2000
+++ opensa/openssl/crypto/cast/castopts.c       Thu Mar  2 21:11:52 2000
@@ -252,7 +252,7 @@
                }
 
 #ifndef TIMES
-       fprintf(stderr,"To get the most acurate results, try to run this\n");
+       fprintf(stderr,"To get the most accurate results, try to run this\n");
        fprintf(stderr,"program when this computer is idle.\n");
 #endif
 
Index: opensa/openssl/crypto/cast/casttest.c
diff -u opensa/openssl/crypto/cast/casttest.c:1.1 
opensa/openssl/crypto/cast/casttest.c:1.2
--- opensa/openssl/crypto/cast/casttest.c:1.1   Tue Jan 25 23:32:19 2000
+++ opensa/openssl/crypto/cast/casttest.c       Thu Mar  2 21:11:52 2000
@@ -71,32 +71,32 @@
 
 #define FULL_TEST
 
-unsigned char k[16]={
+static unsigned char k[16]={
        0x01,0x23,0x45,0x67,0x12,0x34,0x56,0x78,
        0x23,0x45,0x67,0x89,0x34,0x56,0x78,0x9A
        };
 
-unsigned char in[8]={ 0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF};
+static unsigned char in[8]={ 0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF};
 
-int k_len[3]={16,10,5};
-unsigned char c[3][8]={
+static int k_len[3]={16,10,5};
+static unsigned char c[3][8]={
        {0x23,0x8B,0x4F,0xE5,0x84,0x7E,0x44,0xB2},
        {0xEB,0x6A,0x71,0x1A,0x2C,0x02,0x27,0x1B},
        {0x7A,0xC8,0x16,0xD1,0x6E,0x9B,0x30,0x2E},
        };
-unsigned char out[80];
+static unsigned char out[80];
 
-unsigned char in_a[16]={
+static unsigned char in_a[16]={
        0x01,0x23,0x45,0x67,0x12,0x34,0x56,0x78,
        0x23,0x45,0x67,0x89,0x34,0x56,0x78,0x9A};
-unsigned char in_b[16]={
+static unsigned char in_b[16]={
        0x01,0x23,0x45,0x67,0x12,0x34,0x56,0x78,
        0x23,0x45,0x67,0x89,0x34,0x56,0x78,0x9A};
 
-unsigned char c_a[16]={
+static unsigned char c_a[16]={
        0xEE,0xA9,0xD0,0xA2,0x49,0xFD,0x3B,0xA6,
        0xB3,0x43,0x6F,0xB8,0x9D,0x6D,0xCA,0x92};
-unsigned char c_b[16]={
+static unsigned char c_b[16]={
        0xB2,0xC9,0x5E,0xB0,0x0C,0x31,0xAD,0x71,
        0x80,0xAC,0x05,0xB8,0xE8,0x3D,0x69,0x6E};
 
Index: opensa/openssl/crypto/comp/comp.h
diff -u opensa/openssl/crypto/comp/comp.h:1.1 opensa/openssl/crypto/comp/comp.h:1.2
--- opensa/openssl/crypto/comp/comp.h:1.1       Tue Jan 25 23:32:04 2000
+++ opensa/openssl/crypto/comp/comp.h   Thu Mar  2 21:11:52 2000
@@ -17,6 +17,7 @@
        int (*compress)();
        int (*expand)();
        long (*ctrl)();
+       long (*callback_ctrl)();
        } COMP_METHOD;
 
 typedef struct comp_ctx_st
Index: opensa/openssl/crypto/conf/conf.c
diff -u opensa/openssl/crypto/conf/conf.c:1.1 opensa/openssl/crypto/conf/conf.c:1.2
--- opensa/openssl/crypto/conf/conf.c:1.1       Tue Jan 25 23:31:47 2000
+++ opensa/openssl/crypto/conf/conf.c   Thu Mar  2 21:11:53 2000
@@ -86,28 +86,25 @@
 LHASH *CONF_load(LHASH *h, const char *file, long *line)
        {
        LHASH *ltmp;
-       FILE *in=NULL;
+       BIO *in=NULL;
 
 #ifdef VMS
-       in=fopen(file,"r");
+       in=BIO_new_file(file, "r");
 #else
-       in=fopen(file,"rb");
+       in=BIO_new_file(file, "rb");
 #endif
        if (in == NULL)
                {
-               SYSerr(SYS_F_FOPEN,get_last_sys_error());
-               ERR_set_error_data(BUF_strdup(file),
-                       ERR_TXT_MALLOCED|ERR_TXT_STRING);
                CONFerr(CONF_F_CONF_LOAD,ERR_R_SYS_LIB);
                return NULL;
                }
 
-       ltmp = CONF_load_fp(h, in, line);
-       fclose(in);
+       ltmp = CONF_load_bio(h, in, line);
+       BIO_free(in);
 
        return ltmp;
 }
-
+#ifndef NO_FP_API
 LHASH *CONF_load_fp(LHASH *h, FILE *in, long *line)
 {
        BIO *btmp;
@@ -120,6 +117,7 @@
        BIO_free(btmp);
        return ltmp;
 }
+#endif
 
 LHASH *CONF_load_bio(LHASH *h, BIO *in, long *line)
        {
@@ -338,7 +336,7 @@
                                                        ERR_R_MALLOC_FAILURE);
                                goto err;
                                }
-                       vv=(CONF_VALUE *)lh_insert(ret,(char *)v);
+                       vv=(CONF_VALUE *)lh_insert(ret,v);
                        if (vv != NULL)
                                {
                                sk_CONF_VALUE_delete_ptr(ts,vv);
@@ -380,7 +378,7 @@
                        {
                        vv.name=name;
                        vv.section=section;
-                       v=(CONF_VALUE *)lh_retrieve(conf,(char *)&vv);
+                       v=(CONF_VALUE *)lh_retrieve(conf,&vv);
                        if (v != NULL) return(v->value);
                        if (strcmp(section,"ENV") == 0)
                                {
@@ -390,7 +388,7 @@
                        }
                vv.section="default";
                vv.name=name;
-               v=(CONF_VALUE *)lh_retrieve(conf,(char *)&vv);
+               v=(CONF_VALUE *)lh_retrieve(conf,&vv);
                if (v != NULL)
                        return(v->value);
                else
@@ -407,7 +405,7 @@
        if ((conf == NULL) || (section == NULL)) return(NULL);
        vv.name=NULL;
        vv.section=section;
-       v=(CONF_VALUE *)lh_retrieve(conf,(char *)&vv);
+       v=(CONF_VALUE *)lh_retrieve(conf,&vv);
        return(v);
        }
 
@@ -445,12 +443,12 @@
 
        conf->down_load=0;      /* evil thing to make sure the 'Free()'
                                 * works as expected */
-       lh_doall_arg(conf,(void (*)())value_free_hash,(char *)conf);
+       lh_doall_arg(conf,(void (*)())value_free_hash,conf);
 
        /* We now have only 'section' entries in the hash table.
         * Due to problems with */
 
-       lh_doall_arg(conf,(void (*)())value_free_stack,(char *)conf);
+       lh_doall_arg(conf,(void (*)())value_free_stack,conf);
        lh_free(conf);
        }
 
@@ -458,7 +456,7 @@
        {
        if (a->name != NULL)
                {
-               a=(CONF_VALUE *)lh_delete(conf,(char *)a);
+               a=(CONF_VALUE *)lh_delete(conf,a);
                }
        }
 
@@ -710,7 +708,7 @@
        v->name=NULL;
        v->value=(char *)sk;
        
-       vv=(CONF_VALUE *)lh_insert(conf,(char *)v);
+       vv=(CONF_VALUE *)lh_insert(conf,v);
        if (vv != NULL)
                {
 #if !defined(NO_STDIO) && !defined(WIN16)
Index: opensa/openssl/crypto/conf/conf.h
diff -u opensa/openssl/crypto/conf/conf.h:1.1 opensa/openssl/crypto/conf/conf.h:1.2
--- opensa/openssl/crypto/conf/conf.h:1.1       Tue Jan 25 23:31:47 2000
+++ opensa/openssl/crypto/conf/conf.h   Thu Mar  2 21:11:53 2000
@@ -78,7 +78,9 @@
 DECLARE_STACK_OF(CONF_VALUE)
 
 LHASH *CONF_load(LHASH *conf,const char *file,long *eline);
+#ifndef NO_FP_API
 LHASH *CONF_load_fp(LHASH *conf, FILE *fp,long *eline);
+#endif
 LHASH *CONF_load_bio(LHASH *conf, BIO *bp,long *eline);
 STACK_OF(CONF_VALUE) *CONF_get_section(LHASH *conf,char *section);
 char *CONF_get_string(LHASH *conf,char *group,char *name);
Index: opensa/openssl/crypto/des/cbc3_enc.c
diff -u opensa/openssl/crypto/des/cbc3_enc.c:1.1 
opensa/openssl/crypto/des/cbc3_enc.c:1.2
--- opensa/openssl/crypto/des/cbc3_enc.c:1.1    Tue Jan 25 23:30:46 2000
+++ opensa/openssl/crypto/des/cbc3_enc.c        Thu Mar  2 21:11:53 2000
@@ -58,7 +58,7 @@
 
 #include "des_locl.h"
 
-/* HAS BUGS? DON'T USE - this is only present for use in des.c */
+/* HAS BUGS! DON'T USE - this is only present for use in des.c */
 void des_3cbc_encrypt(des_cblock *input, des_cblock *output, long length,
             des_key_schedule ks1, des_key_schedule ks2, des_cblock *iv1,
             des_cblock *iv2, int enc)
@@ -69,11 +69,14 @@
 
        if (enc == DES_ENCRYPT)
                {
-               des_cbc_encrypt(input,output,length,ks1,iv1,enc);
+               des_cbc_encrypt((unsigned char*)input,
+                               (unsigned char*)output,length,ks1,iv1,enc);
                if (length >= sizeof(des_cblock))
                        memcpy(niv1,output[off],sizeof(des_cblock));
-               des_cbc_encrypt(output,output,l8,ks2,iv1,!enc);
-               des_cbc_encrypt(output,output,l8,ks1,iv2, enc);
+               des_cbc_encrypt((unsigned char*)output,
+                               (unsigned char*)output,l8,ks2,iv1,!enc);
+               des_cbc_encrypt((unsigned char*)output,
+                               (unsigned char*)output,l8,ks1,iv2,enc);
                if (length >= sizeof(des_cblock))
                        memcpy(niv2,output[off],sizeof(des_cblock));
                }
@@ -81,11 +84,14 @@
                {
                if (length >= sizeof(des_cblock))
                        memcpy(niv2,input[off],sizeof(des_cblock));
-               des_cbc_encrypt(input,output,l8,ks1,iv2,enc);
-               des_cbc_encrypt(output,output,l8,ks2,iv1,!enc);
+               des_cbc_encrypt((unsigned char*)input,
+                               (unsigned char*)output,l8,ks1,iv2,enc);
+               des_cbc_encrypt((unsigned char*)output,
+                               (unsigned char*)output,l8,ks2,iv1,!enc);
                if (length >= sizeof(des_cblock))
                        memcpy(niv1,output[off],sizeof(des_cblock));
-               des_cbc_encrypt(output,output,length,ks1,iv1, enc);
+               des_cbc_encrypt((unsigned char*)output,
+                               (unsigned char*)output,length,ks1,iv1,enc);
                }
        memcpy(*iv1,niv1,sizeof(des_cblock));
        memcpy(*iv2,niv2,sizeof(des_cblock));
Index: opensa/openssl/crypto/des/des.c
diff -u opensa/openssl/crypto/des/des.c:1.1 opensa/openssl/crypto/des/des.c:1.2
--- opensa/openssl/crypto/des/des.c:1.1 Tue Jan 25 23:30:46 2000
+++ opensa/openssl/crypto/des/des.c     Thu Mar  2 21:11:53 2000
@@ -325,25 +325,25 @@
 "des <options> [input-file [output-file]]",
 "options:",
 "-v         : des(1) version number",
-"-e         : encrypt using sunOS compatible user key to DES key conversion.",
+"-e         : encrypt using SunOS compatible user key to DES key conversion.",
 "-E         : encrypt ",
-"-d         : decrypt using sunOS compatible user key to DES key conversion.",
+"-d         : decrypt using SunOS compatible user key to DES key conversion.",
 "-D         : decrypt ",
-"-c[ckname] : generate a cbc_cksum using sunOS compatible user key to",
+"-c[ckname] : generate a cbc_cksum using SunOS compatible user key to",
 "             DES key conversion and output to ckname (stdout default,",
 "             stderr if data being output on stdout).  The checksum is",
 "             generated before encryption and after decryption if used",
 "             in conjunction with -[eEdD].",
 "-C[ckname] : generate a cbc_cksum as for -c but compatible with -[ED].",
 "-k key     : use key 'key'",
-"-h         : the key that is entered will be a hexidecimal number",
+"-h         : the key that is entered will be a hexadecimal number",
 "             that is used directly as the des key",
 "-u[uuname] : input file is uudecoded if -[dD] or output uuencoded data if -[eE]",
 "             (uuname is the filename to put in the uuencode header).",
-"-b         : encrypt using DES in ecb encryption mode, the defaut is cbc mode.",
-"-3         : encrypt using tripple DES encryption.  This uses 2 keys",
+"-b         : encrypt using DES in ecb encryption mode, the default is cbc mode.",
+"-3         : encrypt using triple DES encryption.  This uses 2 keys",
 "             generated from the input key.  If the input key is less",
-"             than 8 characters long, this is equivelent to normal",
+"             than 8 characters long, this is equivalent to normal",
 "             encryption.  Default is triple cbc, -b makes it triple ecb.",
 NULL
 };
@@ -425,7 +425,7 @@
                        else
                                k2[i-8]=k;
                        }
-               des_set_key(&k2,ks2);
+               des_set_key_unchecked(&k2,ks2);
                memset(k2,0,sizeof(k2));
                }
        else if (longk || flag3)
@@ -433,7 +433,7 @@
                if (flag3)
                        {
                        des_string_to_2keys(key,&kk,&k2);
-                       des_set_key(&k2,ks2);
+                       des_set_key_unchecked(&k2,ks2);
                        memset(k2,0,sizeof(k2));
                        }
                else
@@ -455,7 +455,7 @@
                                kk[i]=key[i]|0x80;
                        }
 
-       des_set_key(&kk,ks);
+       des_set_key_unchecked(&kk,ks);
        memset(key,0,sizeof(key));
        memset(kk,0,sizeof(kk));
        /* woops - A bug that does not showup under unix :-( */
@@ -484,7 +484,7 @@
                        if (feof(DES_IN))
                                {
                                for (i=7-rem; i>0; i--)
-                                       RAND_bytes(buf + l++, 1);
+                                       RAND_pseudo_bytes(buf + l++, 1);
                                buf[l++]=rem;
                                ex=1;
                                len+=rem;
Index: opensa/openssl/crypto/des/des.h
diff -u opensa/openssl/crypto/des/des.h:1.1 opensa/openssl/crypto/des/des.h:1.2
--- opensa/openssl/crypto/des/des.h:1.1 Tue Jan 25 23:30:46 2000
+++ opensa/openssl/crypto/des/des.h     Thu Mar  2 21:11:53 2000
@@ -186,15 +186,20 @@
 DES_LONG des_quad_cksum(const unsigned char *input,des_cblock output[],
                        long length,int out_count,des_cblock *seed);
 void des_random_seed(des_cblock *key);
-void des_random_key(des_cblock *ret);
+int des_random_key(des_cblock *ret);
 int des_read_password(des_cblock *key,const char *prompt,int verify);
 int des_read_2passwords(des_cblock *key1,des_cblock *key2,
                        const char *prompt,int verify);
 int des_read_pw_string(char *buf,int length,const char *prompt,int verify);
 void des_set_odd_parity(des_cblock *key);
 int des_is_weak_key(const_des_cblock *key);
+/* des_set_key (= set_key = des_key_sched = key_sched) calls
+ * des_set_key_checked if global variable des_check_key is set,
+ * des_set_key_unchecked otherwise. */
 int des_set_key(const_des_cblock *key,des_key_schedule schedule);
 int des_key_sched(const_des_cblock *key,des_key_schedule schedule);
+int des_set_key_checked(const_des_cblock *key,des_key_schedule schedule);
+void des_set_key_unchecked(const_des_cblock *key,des_key_schedule schedule);
 void des_string_to_key(const char *str,des_cblock *key);
 void des_string_to_2keys(const char *str,des_cblock *key1,des_cblock *key2);
 void des_cfb64_encrypt(const unsigned char *in,unsigned char *out,long length,
Index: opensa/openssl/crypto/des/des_locl.h
diff -u opensa/openssl/crypto/des/des_locl.h:1.1 
opensa/openssl/crypto/des/des_locl.h:1.2
--- opensa/openssl/crypto/des/des_locl.h:1.1    Tue Jan 25 23:30:46 2000
+++ opensa/openssl/crypto/des/des_locl.h        Thu Mar  2 21:11:53 2000
@@ -72,7 +72,11 @@
 
 #ifndef MSDOS
 #if !defined(VMS) || defined(__DECC)
-#include OPENSSL_UNISTD
+#ifdef OPENSSL_UNISTD
+# include OPENSSL_UNISTD
+#else
+# include <unistd.h>
+#endif
 #include <math.h>
 #endif
 #endif
@@ -178,14 +182,14 @@
 #endif
 
 /* The changes to this macro may help or hinder, depending on the
- * compiler and the achitecture.  gcc2 always seems to do well :-).
+ * compiler and the architecture.  gcc2 always seems to do well :-).
  * Inspired by Dana How <[EMAIL PROTECTED]>
  * DO NOT use the alternative version on machines with 8 byte longs.
  * It does not seem to work on the Alpha, even when DES_LONG is 4
  * bytes, probably an issue of accessing non-word aligned objects :-( */
 #ifdef DES_PTR
 
-/* It recently occured to me that 0^0^0^0^0^0^0 == 0, so there
+/* It recently occurred to me that 0^0^0^0^0^0^0 == 0, so there
  * is no reason to not xor all the sub items together.  This potentially
  * saves a register since things can be xored directly into L */
 
Index: opensa/openssl/crypto/des/des_opts.c
diff -u opensa/openssl/crypto/des/des_opts.c:1.1 
opensa/openssl/crypto/des/des_opts.c:1.2
--- opensa/openssl/crypto/des/des_opts.c:1.1    Tue Jan 25 23:30:46 2000
+++ opensa/openssl/crypto/des/des_opts.c        Thu Mar  2 21:11:53 2000
@@ -434,17 +434,17 @@
                }
 
 #ifndef TIMES
-       fprintf(stderr,"To get the most acurate results, try to run this\n");
+       fprintf(stderr,"To get the most accurate results, try to run this\n");
        fprintf(stderr,"program when this computer is idle.\n");
 #endif
 
-       des_set_key(&key,sch);
-       des_set_key(&key2,sch2);
-       des_set_key(&key3,sch3);
+       des_set_key_unchecked(&key,sch);
+       des_set_key_unchecked(&key2,sch2);
+       des_set_key_unchecked(&key3,sch3);
 
 #ifndef SIGALRM
        fprintf(stderr,"First we calculate the approximate speed ...\n");
-       des_set_key(&key,sch);
+       des_set_key_unchecked(&key,sch);
        count=10;
        do      {
                long i;
Index: opensa/openssl/crypto/des/destest.c
diff -u opensa/openssl/crypto/des/destest.c:1.1 opensa/openssl/crypto/des/destest.c:1.2
--- opensa/openssl/crypto/des/destest.c:1.1     Tue Jan 25 23:30:46 2000
+++ opensa/openssl/crypto/des/destest.c Thu Mar  2 21:11:53 2000
@@ -234,7 +234,7 @@
        {0x08,0xD7,0xB4,0xFB,0x62,0x9D,0x08,0x85}};
 
 static unsigned char cbc_key [8]={0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef};
-static unsigned char cbc2_key[8]={0xf0,0xe1,0xd2,0xc3,0xb4,0xa5,0x96,0x87};
+static unsigned char cbc2_key[8]={0xf1,0xe0,0xd3,0xc2,0xb5,0xa4,0x97,0x86};
 static unsigned char cbc3_key[8]={0xfe,0xdc,0xba,0x98,0x76,0x54,0x32,0x10};
 static unsigned char cbc_iv  [8]={0xfe,0xdc,0xba,0x98,0x76,0x54,0x32,0x10};
 /* Changed the following text constant to binary so it will work on ebcdic
@@ -254,12 +254,24 @@
        0x46,0x8e,0x91,0x15,0x78,0x88,0xba,0x68,
        0x1d,0x26,0x93,0x97,0xf7,0xfe,0x62,0xb4};
 
+#ifdef SCREW_THE_PARITY
+#error "SCREW_THE_PARITY is not ment to be defined."
+#error "Original vectors are preserved for reference only."
+static unsigned char cbc2_key[8]={0xf0,0xe1,0xd2,0xc3,0xb4,0xa5,0x96,0x87};
 static unsigned char xcbc_ok[32]={
        0x86,0x74,0x81,0x0D,0x61,0xA4,0xA5,0x48,
        0xB9,0x93,0x03,0xE1,0xB8,0xBB,0xBD,0xBD,
        0x64,0x30,0x0B,0xB9,0x06,0x65,0x81,0x76,
        0x04,0x1D,0x77,0x62,0x17,0xCA,0x2B,0xD2,
        };
+#else
+static unsigned char xcbc_ok[32]={
+       0x84,0x6B,0x29,0x14,0x85,0x1E,0x9A,0x29,
+       0x54,0x73,0x2F,0x8A,0xA0,0xA6,0x11,0xC1,
+       0x15,0xCD,0xC2,0xD7,0x95,0x1B,0x10,0x53,
+       0xA6,0x3C,0x5E,0x03,0xB2,0x1A,0xA3,0xC4,
+       };
+#endif
 
 static unsigned char cbc3_ok[32]={
        0x3F,0xE3,0x01,0xC9,0x62,0xAC,0x01,0xD0,
@@ -309,8 +321,8 @@
        0x3d,0x6d,0x5b,0xe3,0x25,0x5a,0xf8,0xc3
        };
 
-DES_LONG cbc_cksum_ret=0xB462FEF7L;
-unsigned char cbc_cksum_data[8]={0x1D,0x26,0x93,0x97,0xf7,0xfe,0x62,0xb4};
+static DES_LONG cbc_cksum_ret=0xB462FEF7L;
+static unsigned char cbc_cksum_data[8]={0x1D,0x26,0x93,0x97,0xf7,0xfe,0x62,0xb4};
 
 static char *pt(unsigned char *p);
 static int cfb_test(int bits, unsigned char *cfb_cipher);
@@ -331,17 +343,17 @@
 
 #ifndef NO_DESCBCM
        printf("Doing cbcm\n");
-       if ((j=des_key_sched(&cbc_key,ks)) != 0)
+       if ((j=des_set_key_checked(&cbc_key,ks)) != 0)
                {
                printf("Key error %d\n",j);
                err=1;
                }
-       if ((j=des_key_sched(&cbc2_key,ks2)) != 0)
+       if ((j=des_set_key_checked(&cbc2_key,ks2)) != 0)
                {
                printf("Key error %d\n",j);
                err=1;
                }
-       if ((j=des_key_sched(&cbc3_key,ks3)) != 0)
+       if ((j=des_set_key_checked(&cbc3_key,ks3)) != 0)
                {
                printf("Key error %d\n",j);
                err=1;
@@ -385,11 +397,7 @@
        printf("Doing ecb\n");
        for (i=0; i<NUM_TESTS; i++)
                {
-               if ((j=des_key_sched(&key_data[i],ks)) != 0)
-                       {
-                       printf("Key error %2d:%d\n",i+1,j);
-                       err=1;
-                       }
+               des_set_key_unchecked(&key_data[i],ks);
                memcpy(in,plain_data[i],8);
                memset(out,0,8);
                memset(outin,0,8);
@@ -415,21 +423,9 @@
        printf("Doing ede ecb\n");
        for (i=0; i<(NUM_TESTS-1); i++)
                {
-               if ((j=des_key_sched(&key_data[i],ks)) != 0)
-                       {
-                       err=1;
-                       printf("Key error %2d:%d\n",i+1,j);
-                       }
-               if ((j=des_key_sched(&key_data[i+1],ks2)) != 0)
-                       {
-                       printf("Key error %2d:%d\n",i+2,j);
-                       err=1;
-                       }
-               if ((j=des_key_sched(&key_data[i+2],ks3)) != 0)
-                       {
-                       printf("Key error %2d:%d\n",i+3,j);
-                       err=1;
-                       }
+               des_set_key_unchecked(&key_data[i],ks);
+               des_set_key_unchecked(&key_data[i+1],ks2);
+               des_set_key_unchecked(&key_data[i+2],ks3);
                memcpy(in,plain_data[i],8);
                memset(out,0,8);
                memset(outin,0,8);
@@ -453,7 +449,7 @@
 #endif
 
        printf("Doing cbc\n");
-       if ((j=des_key_sched(&cbc_key,ks)) != 0)
+       if ((j=des_set_key_checked(&cbc_key,ks)) != 0)
                {
                printf("Key error %d\n",j);
                err=1;
@@ -464,7 +460,10 @@
        des_ncbc_encrypt(cbc_data,cbc_out,strlen((char *)cbc_data)+1,ks,
                         &iv3,DES_ENCRYPT);
        if (memcmp(cbc_out,cbc_ok,32) != 0)
+               {
                printf("cbc_encrypt encrypt error\n");
+               err=1;
+               }
 
        memcpy(iv3,cbc_iv,sizeof(cbc_iv));
        des_ncbc_encrypt(cbc_out,cbc_in,strlen((char *)cbc_data)+1,ks,
@@ -477,7 +476,7 @@
 
 #ifndef LIBDES_LIT
        printf("Doing desx cbc\n");
-       if ((j=des_key_sched(&cbc_key,ks)) != 0)
+       if ((j=des_set_key_checked(&cbc_key,ks)) != 0)
                {
                printf("Key error %d\n",j);
                err=1;
@@ -490,6 +489,7 @@
        if (memcmp(cbc_out,xcbc_ok,32) != 0)
                {
                printf("des_xcbc_encrypt encrypt error\n");
+               err=1;
                }
        memcpy(iv3,cbc_iv,sizeof(cbc_iv));
        des_xcbc_encrypt(cbc_out,cbc_in,strlen((char *)cbc_data)+1,ks,
@@ -502,17 +502,17 @@
 #endif
 
        printf("Doing ede cbc\n");
-       if ((j=des_key_sched(&cbc_key,ks)) != 0)
+       if ((j=des_set_key_checked(&cbc_key,ks)) != 0)
                {
                printf("Key error %d\n",j);
                err=1;
                }
-       if ((j=des_key_sched(&cbc2_key,ks2)) != 0)
+       if ((j=des_set_key_checked(&cbc2_key,ks2)) != 0)
                {
                printf("Key error %d\n",j);
                err=1;
                }
-       if ((j=des_key_sched(&cbc3_key,ks3)) != 0)
+       if ((j=des_set_key_checked(&cbc3_key,ks3)) != 0)
                {
                printf("Key error %d\n",j);
                err=1;
@@ -543,7 +543,7 @@
 
 #ifndef LIBDES_LIT
        printf("Doing pcbc\n");
-       if ((j=des_key_sched(&cbc_key,ks)) != 0)
+       if ((j=des_set_key_checked(&cbc_key,ks)) != 0)
                {
                printf("Key error %d\n",j);
                err=1;
@@ -606,7 +606,7 @@
        printf("done\n");
 
        printf("Doing ofb\n");
-       des_key_sched(&ofb_key,ks);
+       des_set_key_checked(&ofb_key,ks);
        memcpy(ofb_tmp,ofb_iv,sizeof(ofb_iv));
        des_ofb_encrypt(plain,ofb_buf1,64,sizeof(plain)/8,ks,&ofb_tmp);
        if (memcmp(ofb_cipher,ofb_buf1,sizeof(ofb_buf1)) != 0)
@@ -635,7 +635,7 @@
                }
 
        printf("Doing ofb64\n");
-       des_key_sched(&ofb_key,ks);
+       des_set_key_checked(&ofb_key,ks);
        memcpy(ofb_tmp,ofb_iv,sizeof(ofb_iv));
        memset(ofb_buf1,0,sizeof(ofb_buf1));
        memset(ofb_buf2,0,sizeof(ofb_buf1));
@@ -660,7 +660,7 @@
                }
 
        printf("Doing ede_ofb64\n");
-       des_key_sched(&ofb_key,ks);
+       des_set_key_checked(&ofb_key,ks);
        memcpy(ofb_tmp,ofb_iv,sizeof(ofb_iv));
        memset(ofb_buf1,0,sizeof(ofb_buf1));
        memset(ofb_buf2,0,sizeof(ofb_buf1));
@@ -686,7 +686,7 @@
                }
 
        printf("Doing cbc_cksum\n");
-       des_key_sched(&cbc_key,ks);
+       des_set_key_checked(&cbc_key,ks);
        cs=des_cbc_cksum(cbc_data,&cret,strlen((char *)cbc_data),ks,&cbc_iv);
        if (cs != cbc_cksum_ret)
                {
@@ -795,8 +795,7 @@
                err=1;
                }
        printf("\n");
-       exit(err);
-       return(0);
+       return(err);
        }
 
 static char *pt(unsigned char *p)
@@ -825,7 +824,7 @@
        des_key_schedule ks;
        int i,err=0;
 
-       des_key_sched(&cfb_key,ks);
+       des_set_key_checked(&cfb_key,ks);
        memcpy(cfb_tmp,cfb_iv,sizeof(cfb_iv));
        des_cfb_encrypt(plain,cfb_buf1,bits,sizeof(plain),ks,&cfb_tmp,
                        DES_ENCRYPT);
@@ -854,7 +853,7 @@
        des_key_schedule ks;
        int err=0,i,n;
 
-       des_key_sched(&cfb_key,ks);
+       des_set_key_checked(&cfb_key,ks);
        memcpy(cfb_tmp,cfb_iv,sizeof(cfb_iv));
        n=0;
        des_cfb64_encrypt(plain,cfb_buf1,12,ks,&cfb_tmp,&n,DES_ENCRYPT);
@@ -887,7 +886,7 @@
        des_key_schedule ks;
        int err=0,i,n;
 
-       des_key_sched(&cfb_key,ks);
+       des_set_key_checked(&cfb_key,ks);
        memcpy(cfb_tmp,cfb_iv,sizeof(cfb_iv));
        n=0;
        des_ede3_cfb64_encrypt(plain,cfb_buf1,12,ks,ks,ks,&cfb_tmp,&n,
Index: opensa/openssl/crypto/des/enc_read.c
diff -u opensa/openssl/crypto/des/enc_read.c:1.1 
opensa/openssl/crypto/des/enc_read.c:1.2
--- opensa/openssl/crypto/des/enc_read.c:1.1    Tue Jan 25 23:30:46 2000
+++ opensa/openssl/crypto/des/enc_read.c        Thu Mar  2 21:11:53 2000
@@ -147,7 +147,7 @@
        /* first - get the length */
        while (net_num < HDRSIZE) 
                {
-               i=read(fd,&(net[net_num]),HDRSIZE-net_num);
+               i=read(fd,(void *)&(net[net_num]),HDRSIZE-net_num);
 #ifdef EINTR
                if ((i == -1) && (errno == EINTR)) continue;
 #endif
@@ -169,7 +169,7 @@
        net_num=0;
        while (net_num < rnum)
                {
-               i=read(fd,&(net[net_num]),rnum-net_num);
+               i=read(fd,(void *)&(net[net_num]),rnum-net_num);
 #ifdef EINTR
                if ((i == -1) && (errno == EINTR)) continue;
 #endif
Index: opensa/openssl/crypto/des/enc_writ.c
diff -u opensa/openssl/crypto/des/enc_writ.c:1.1 
opensa/openssl/crypto/des/enc_writ.c:1.2
--- opensa/openssl/crypto/des/enc_writ.c:1.1    Tue Jan 25 23:30:46 2000
+++ opensa/openssl/crypto/des/enc_writ.c        Thu Mar  2 21:11:53 2000
@@ -130,12 +130,12 @@
                {
                cp=shortbuf;
                memcpy(shortbuf,buf,len);
-               RAND_bytes(shortbuf+len, 8-len);
+               RAND_pseudo_bytes(shortbuf+len, 8-len);
                rnum=8;
                }
        else
                {
-               cp=(unsigned char*)buf;
+               cp=buf;
                rnum=((len+7)/8*8); /* round up to nearest eight */
                }
 
@@ -152,13 +152,16 @@
        for (j=0; j<outnum; j+=i)
                {
                /* eay 26/08/92 I was not doing writing from where we
-                * got upto. */
-               i=write(fd,&(outbuf[j]),outnum-j);
+                * got up to. */
+               i=write(fd,(void *)&(outbuf[j]),outnum-j);
                if (i == -1)
                        {
+#ifdef EINTR
                        if (errno == EINTR)
                                i=0;
-                       else    /* This is really a bad error - very bad
+                       else
+#endif
+                               /* This is really a bad error - very bad
                                 * It will stuff-up both ends. */
                                return(-1);
                        }
Index: opensa/openssl/crypto/des/fcrypt.c
diff -u opensa/openssl/crypto/des/fcrypt.c:1.1 opensa/openssl/crypto/des/fcrypt.c:1.2
--- opensa/openssl/crypto/des/fcrypt.c:1.1      Tue Jan 25 23:30:46 2000
+++ opensa/openssl/crypto/des/fcrypt.c  Thu Mar  2 21:11:53 2000
@@ -9,7 +9,7 @@
 #include <openssl/ebcdic.h>
 #endif
 
-/* This version of crypt has been developed from my MIT compatable
+/* This version of crypt has been developed from my MIT compatible
  * DES library.
  * The library is available at pub/Crypto/DES at ftp.psy.uq.oz.au
  * Eric Young ([EMAIL PROTECTED])
@@ -19,7 +19,7 @@
  * I have included directive PARA for shared memory computers.
  * I have included a directive LONGCRYPT to using this routine to cipher
  * passwords with more then 8 bytes like HP-UX 10.x it used. The MAXPLEN
- * definition is the maximum of lenght of password and can changed. I have
+ * definition is the maximum of length of password and can changed. I have
  * defined 24.
  */
 
@@ -124,8 +124,8 @@
         * returns *\0XXXXXXXXX
         * The \0 makes the string look like * so the pwd "*" would
         * crypt to "*".  This was found when replacing the crypt in
-        * our shared libraries.  People found that the disbled
-        * accounts effectivly had no passwd :-(. */
+        * our shared libraries.  People found that the disabled
+        * accounts effectively had no passwd :-(. */
 #ifndef CHARSET_EBCDIC
        x=ret[0]=((salt[0] == '\0')?'A':salt[0]);
        Eswap0=con_salt[x]<<2;
@@ -151,7 +151,7 @@
        for (; i<8; i++)
                key[i]=0;
 
-       des_set_key(&key,ks);
+       des_set_key_unchecked(&key,ks);
        fcrypt_body(&(out[0]),ks,Eswap0,Eswap1);
 
        ll=out[0]; l2c(ll,b);
Index: opensa/openssl/crypto/des/fcrypt_b.c
diff -u opensa/openssl/crypto/des/fcrypt_b.c:1.1 
opensa/openssl/crypto/des/fcrypt_b.c:1.2
--- opensa/openssl/crypto/des/fcrypt_b.c:1.1    Tue Jan 25 23:30:46 2000
+++ opensa/openssl/crypto/des/fcrypt_b.c        Thu Mar  2 21:11:53 2000
@@ -58,7 +58,7 @@
 
 #include <stdio.h>
 
-/* This version of crypt has been developed from my MIT compatable
+/* This version of crypt has been developed from my MIT compatible
  * DES library.
  * The library is available at pub/Crypto/DES at ftp.psy.uq.oz.au
  * Eric Young ([EMAIL PROTECTED])
Index: opensa/openssl/crypto/des/makefile.ssl
diff -u opensa/openssl/crypto/des/makefile.ssl:1.1 
opensa/openssl/crypto/des/makefile.ssl:1.2
--- opensa/openssl/crypto/des/makefile.ssl:1.1  Tue Jan 25 23:30:46 2000
+++ opensa/openssl/crypto/des/makefile.ssl      Thu Mar  2 21:11:53 2000
@@ -15,6 +15,7 @@
 MAKEDEPEND=    $(TOP)/util/domd $(TOP)
 MAKEFILE=      Makefile.ssl
 AR=            ar r
+RANLIB=                ranlib
 DES_ENC=       des_enc.o fcrypt_b.o
 # or use
 #DES_ENC=      dx86-elf.o yx86-elf.o
@@ -162,14 +163,15 @@
 enc_read.o: ../../include/openssl/crypto.h ../../include/openssl/des.h
 enc_read.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h
 enc_read.o: ../../include/openssl/err.h ../../include/openssl/opensslconf.h
-enc_read.o: ../../include/openssl/opensslv.h ../../include/openssl/stack.h
-enc_read.o: ../cryptlib.h des_locl.h
+enc_read.o: ../../include/openssl/opensslv.h ../../include/openssl/safestack.h
+enc_read.o: ../../include/openssl/stack.h ../cryptlib.h des_locl.h
 enc_writ.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
 enc_writ.o: ../../include/openssl/crypto.h ../../include/openssl/des.h
 enc_writ.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h
 enc_writ.o: ../../include/openssl/err.h ../../include/openssl/opensslconf.h
 enc_writ.o: ../../include/openssl/opensslv.h ../../include/openssl/rand.h
-enc_writ.o: ../../include/openssl/stack.h ../cryptlib.h des_locl.h
+enc_writ.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
+enc_writ.o: ../cryptlib.h des_locl.h
 fcrypt.o: ../../include/openssl/des.h ../../include/openssl/des.h
 fcrypt.o: ../../include/openssl/e_os2.h ../../include/openssl/e_os2.h
 fcrypt.o: ../../include/openssl/opensslconf.h
@@ -187,15 +189,15 @@
 qud_cksm.o: ../../include/openssl/des.h ../../include/openssl/e_os2.h
 qud_cksm.o: ../../include/openssl/opensslconf.h des_locl.h
 rand_key.o: ../../include/openssl/des.h ../../include/openssl/e_os2.h
-rand_key.o: ../../include/openssl/opensslconf.h des_locl.h
+rand_key.o: ../../include/openssl/opensslconf.h ../../include/openssl/rand.h
 read2pwd.o: ../../include/openssl/des.h ../../include/openssl/e_os2.h
 read2pwd.o: ../../include/openssl/opensslconf.h des_locl.h
 read_pwd.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
 read_pwd.o: ../../include/openssl/crypto.h ../../include/openssl/des.h
 read_pwd.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h
 read_pwd.o: ../../include/openssl/err.h ../../include/openssl/opensslconf.h
-read_pwd.o: ../../include/openssl/opensslv.h ../../include/openssl/stack.h
-read_pwd.o: ../cryptlib.h des_locl.h
+read_pwd.o: ../../include/openssl/opensslv.h ../../include/openssl/safestack.h
+read_pwd.o: ../../include/openssl/stack.h ../cryptlib.h des_locl.h
 rpc_enc.o: ../../include/openssl/des.h ../../include/openssl/e_os2.h
 rpc_enc.o: ../../include/openssl/opensslconf.h des_locl.h des_ver.h rpc_des.h
 set_key.o: ../../include/openssl/des.h ../../include/openssl/e_os2.h
Index: opensa/openssl/crypto/des/rand_key.c
diff -u opensa/openssl/crypto/des/rand_key.c:1.1 
opensa/openssl/crypto/des/rand_key.c:1.2
--- opensa/openssl/crypto/des/rand_key.c:1.1    Tue Jan 25 23:30:46 2000
+++ opensa/openssl/crypto/des/rand_key.c        Thu Mar  2 21:11:53 2000
@@ -1,114 +1,69 @@
 /* crypto/des/rand_key.c */
-/* Copyright (C) 1995-1998 Eric Young ([EMAIL PROTECTED])
- * All rights reserved.
+/* ====================================================================
+ * Copyright (c) 1998-2000 The OpenSSL Project.  All rights reserved.
  *
- * This package is an SSL implementation written
- * by Eric Young ([EMAIL PROTECTED]).
- * The implementation was written so as to conform with Netscapes SSL.
- * 
- * This library is free for commercial and non-commercial use as long as
- * the following conditions are aheared to.  The following conditions
- * apply to all code found in this distribution, be it the RC4, RSA,
- * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
- * included with this distribution is covered by the same copyright terms
- * except that the holder is Tim Hudson ([EMAIL PROTECTED]).
- * 
- * Copyright remains Eric Young's, and as such any Copyright notices in
- * the code are not to be removed.
- * If this package is used in a product, Eric Young should be given attribution
- * as the author of the parts of the library used.
- * This can be in the form of a textual message at program startup or
- * in documentation (online or textual) provided with the package.
- * 
  * 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 copyright
- *    notice, this list of conditions and the following disclaimer.
+ *
+ * 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 acknowledgement:
- *    "This product includes cryptographic software written by
- *     Eric Young ([EMAIL PROTECTED])"
- *    The word 'cryptographic' can be left out if the rouines from the library
- *    being used are not cryptographic related :-).
- * 4. If you include any Windows specific code (or a derivative thereof) from 
- *    the apps directory (application code) you must include an acknowledgement:
- *    "This product includes software written by Tim Hudson ([EMAIL PROTECTED])"
- * 
- * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
- * ANY EXPRESS 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 AUTHOR OR 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.
- * 
- * The licence and distribution terms for any publically available version or
- * derivative of this code cannot be changed.  i.e. this code cannot simply be
- * copied and put under another distribution licence
- * [including the GNU Public Licence.]
+ *    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
+ *    [EMAIL PROTECTED]
+ *
+ * 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
+ * ([EMAIL PROTECTED]).  This product includes software written by Tim
+ * Hudson ([EMAIL PROTECTED]).
+ *
  */
 
-#include "des_locl.h"
-#include <time.h>
+#include <openssl/des.h>
+#include <openssl/rand.h>
 
-static int seed=0;
-static des_cblock init;
-
 void des_random_seed(des_cblock *key)
        {
-       memcpy(&init,key,sizeof(des_cblock));
-       seed=1;
+       RAND_seed(key, sizeof(des_cblock));
        }
 
-void des_random_key(des_cblock *ret)
+int des_random_key(des_cblock *ret)
        {
-       des_key_schedule ks;
-       static DES_LONG c=0;
-       static unsigned short pid=0;
-       static des_cblock data={0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef};
-       des_cblock key;
-       unsigned char *p;
-       DES_LONG t;
-       int i;
-
-#ifdef MSDOS
-       pid=1;
-#else
-       if (!pid) pid=getpid();
-#endif
-       p=key;
-       if (seed)
-               {
-               for (i=0; i<8; i++)
-                       {
-                       data[i] ^= init[i];
-                       init[i]=0;
-                       }
-               seed=0;
-               }
-       t=(DES_LONG)time(NULL);
-       l2c(t,p);
-       t=(DES_LONG)((pid)|((c++)<<16));
-       l2c(t,p);
-
-       des_set_odd_parity(&data);
-       des_set_key(&data,ks);
-       des_cbc_cksum(key,&key,sizeof(key),ks,&data);
-
-       des_set_odd_parity(&key);
-       des_set_key(&key,ks);
-       des_cbc_cksum(key,&data,sizeof(key),ks,&key);
-
-       memcpy(ret,data,sizeof(key));
-       memset(key,0,sizeof(key));
-       memset(ks,0,sizeof(ks));
-       t=0;
+       int r = RAND_bytes((unsigned char *)ret, sizeof(des_cblock));
+       des_set_odd_parity(ret);
+       return r;
        }
Index: opensa/openssl/crypto/des/read_pwd.c
diff -u opensa/openssl/crypto/des/read_pwd.c:1.1 
opensa/openssl/crypto/des/read_pwd.c:1.2
--- opensa/openssl/crypto/des/read_pwd.c:1.1    Tue Jan 25 23:30:46 2000
+++ opensa/openssl/crypto/des/read_pwd.c        Thu Mar  2 21:11:53 2000
@@ -58,7 +58,11 @@
 
 #if !defined(MSDOS) && !defined(VMS) && !defined(WIN32)
 #include <openssl/opensslconf.h>
-#include OPENSSL_UNISTD
+#ifdef OPENSSL_UNISTD
+# include OPENSSL_UNISTD
+#else
+# include <unistd.h>
+#endif
 /* If unistd.h defines _POSIX_VERSION, we conclude that we
  * are on a POSIX system and have sigaction and termios. */
 #if defined(_POSIX_VERSION)
@@ -123,7 +127,7 @@
 #undef  SGTTY
 #endif
 
-#if !defined(TERMIO) && !defined(TERMIOS) && !defined(VMS) && !defined(MSDOS)
+#if !defined(TERMIO) && !defined(TERMIOS) && !defined(VMS) && !defined(MSDOS) && 
+!defined(MAC_OS_pre_X) && !defined(MAC_OS_GUSI_SOURCE)
 #undef  TERMIOS
 #undef  TERMIO
 #define SGTTY
@@ -153,7 +157,7 @@
 #define TTY_set(tty,data)      ioctl(tty,TIOCSETP,data)
 #endif
 
-#if !defined(_LIBC) && !defined(MSDOS) && !defined(VMS)
+#if !defined(_LIBC) && !defined(MSDOS) && !defined(VMS) && !defined(MAC_OS_pre_X)
 #include <sys/ioctl.h>
 #endif
 
@@ -172,6 +176,15 @@
        short iosb$w_count;
        long  iosb$l_info;
        };
+#endif
+
+#if defined(MAC_OS_pre_X) || defined(MAC_OS_GUSI_SOURCE)
+/*
+ * This one needs work. As a matter of fact the code is unoperational
+ * and this is only a trick to get it compiled.
+ *                                     <[EMAIL PROTECTED]>
+ */
+#define TTY_STRUCT int
 #endif
 
 #ifndef NX509_SIG
Index: opensa/openssl/crypto/des/rpc_enc.c
diff -u opensa/openssl/crypto/des/rpc_enc.c:1.1 opensa/openssl/crypto/des/rpc_enc.c:1.2
--- opensa/openssl/crypto/des/rpc_enc.c:1.1     Tue Jan 25 23:30:46 2000
+++ opensa/openssl/crypto/des/rpc_enc.c Thu Mar  2 21:11:53 2000
@@ -66,7 +66,7 @@
        des_key_schedule ks;
        int enc;
 
-       des_set_key(&desp->des_key,ks);
+       des_set_key_unchecked(&desp->des_key,ks);
        enc=(desp->des_dir == ENCRYPT)?DES_ENCRYPT:DES_DECRYPT;
 
        if (desp->des_mode == CBC)
Index: opensa/openssl/crypto/des/set_key.c
diff -u opensa/openssl/crypto/des/set_key.c:1.1 opensa/openssl/crypto/des/set_key.c:1.2
--- opensa/openssl/crypto/des/set_key.c:1.1     Tue Jan 25 23:30:46 2000
+++ opensa/openssl/crypto/des/set_key.c Thu Mar  2 21:11:53 2000
@@ -125,7 +125,7 @@
        int i;
 
        for (i=0; i<NUM_WEAK_KEY; i++)
-               /* Added == 0 to comparision, I obviously don't run
+               /* Added == 0 to comparison, I obviously don't run
                 * this section very often :-(, thanks to
                 * [EMAIL PROTECTED] for the fix
                 * eay 93/06/29
@@ -145,27 +145,41 @@
 #define HPERM_OP(a,t,n,m) ((t)=((((a)<<(16-(n)))^(a))&(m)),\
        (a)=(a)^(t)^(t>>(16-(n))))
 
+int des_set_key(const_des_cblock *key, des_key_schedule schedule)
+       {
+       if (des_check_key)
+               {
+               return des_set_key_checked(key, schedule);
+               }
+       else
+               {
+               des_set_key_unchecked(key, schedule);
+               return 0;
+               }
+       }
+
 /* return 0 if key parity is odd (correct),
  * return -1 if key parity error,
  * return -2 if illegal weak key.
  */
-int des_set_key(const_des_cblock *key, des_key_schedule schedule)
+int des_set_key_checked(const_des_cblock *key, des_key_schedule schedule)
        {
+       if (!check_parity(key))
+               return(-1);
+       if (des_is_weak_key(key))
+               return(-2);
+       des_set_key_unchecked(key, schedule);
+       return 0;
+       }
+
+void des_set_key_unchecked(const_des_cblock *key, des_key_schedule schedule)
+       {
        static int shifts2[16]={0,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0};
        register DES_LONG c,d,t,s,t2;
        register const unsigned char *in;
        register DES_LONG *k;
        register int i;
 
-       if (des_check_key)
-               {
-               if (!check_parity(key))
-                       return(-1);
-
-               if (des_is_weak_key(key))
-                       return(-2);
-               }
-
        k = &schedule->ks.deslong[0];
        in = &(*key)[0];
 
@@ -225,7 +239,6 @@
                t2=((s>>16L)|(t&0xffff0000L));
                *(k++)=ROTATE(t2,26)&0xffffffffL;
                }
-       return(0);
        }
 
 int des_key_sched(const_des_cblock *key, des_key_schedule schedule)
Index: opensa/openssl/crypto/des/speed.c
diff -u opensa/openssl/crypto/des/speed.c:1.1 opensa/openssl/crypto/des/speed.c:1.2
--- opensa/openssl/crypto/des/speed.c:1.1       Tue Jan 25 23:30:46 2000
+++ opensa/openssl/crypto/des/speed.c   Thu Mar  2 21:11:53 2000
@@ -186,16 +186,16 @@
 #endif
 
 #ifndef TIMES
-       printf("To get the most acurate results, try to run this\n");
+       printf("To get the most accurate results, try to run this\n");
        printf("program when this computer is idle.\n");
 #endif
 
-       des_set_key(&key2,sch2);
-       des_set_key(&key3,sch3);
+       des_set_key_unchecked(&key2,sch2);
+       des_set_key_unchecked(&key3,sch3);
 
 #ifndef SIGALRM
        printf("First we calculate the approximate speed ...\n");
-       des_set_key(&key,sch);
+       des_set_key_unchecked(&key,sch);
        count=10;
        do      {
                long i;
@@ -225,7 +225,7 @@
 
        Time_F(START);
        for (count=0,run=1; COND(ca); count++)
-               des_set_key(&key,sch);
+               des_set_key_unchecked(&key,sch);
        d=Time_F(STOP);
        printf("%ld set_key's in %.2f seconds\n",count,d);
        a=((double)COUNT(ca))/d;
Index: opensa/openssl/crypto/des/str2key.c
diff -u opensa/openssl/crypto/des/str2key.c:1.1 opensa/openssl/crypto/des/str2key.c:1.2
--- opensa/openssl/crypto/des/str2key.c:1.1     Tue Jan 25 23:30:46 2000
+++ opensa/openssl/crypto/des/str2key.c Thu Mar  2 21:11:53 2000
@@ -58,8 +58,6 @@
 
 #include "des_locl.h"
 
-OPENSSL_EXTERN int des_check_key;
-
 void des_string_to_key(const char *str, des_cblock *key)
        {
        des_key_schedule ks;
@@ -88,11 +86,8 @@
                }
 #endif
        des_set_odd_parity(key);
-       i=des_check_key;
-       des_check_key=0;
-       des_set_key(key,ks);
-       des_check_key=i;
-       des_cbc_cksum((unsigned char*)str,key,length,ks,key);
+       des_set_key_unchecked(key,ks);
+       des_cbc_cksum((const unsigned char*)str,key,length,ks,key);
        memset(ks,0,sizeof(ks));
        des_set_odd_parity(key);
        }
@@ -150,13 +145,10 @@
 #endif
        des_set_odd_parity(key1);
        des_set_odd_parity(key2);
-       i=des_check_key;
-       des_check_key=0;
-       des_set_key(key1,ks);
-       des_cbc_cksum((unsigned char*)str,key1,length,ks,key1);
-       des_set_key(key2,ks);
-       des_cbc_cksum((unsigned char*)str,key2,length,ks,key2);
-       des_check_key=i;
+       des_set_key_unchecked(key1,ks);
+       des_cbc_cksum((const unsigned char*)str,key1,length,ks,key1);
+       des_set_key_unchecked(key2,ks);
+       des_cbc_cksum((const unsigned char*)str,key2,length,ks,key2);
        memset(ks,0,sizeof(ks));
        des_set_odd_parity(key1);
        des_set_odd_parity(key2);
Index: opensa/openssl/crypto/des/supp.c
diff -u opensa/openssl/crypto/des/supp.c:1.1 opensa/openssl/crypto/des/supp.c:1.2
--- opensa/openssl/crypto/des/supp.c:1.1        Tue Jan 25 23:30:46 2000
+++ opensa/openssl/crypto/des/supp.c    Thu Mar  2 21:11:53 2000
@@ -1,107 +1,107 @@
-/* crypto/des/supp.c */
-/* Copyright (C) 1995-1998 Eric Young ([EMAIL PROTECTED])
- * All rights reserved.
- *
- * This package is an SSL implementation written
- * by Eric Young ([EMAIL PROTECTED]).
- * The implementation was written so as to conform with Netscapes SSL.
- * 
- * This library is free for commercial and non-commercial use as long as
- * the following conditions are aheared to.  The following conditions
- * apply to all code found in this distribution, be it the RC4, RSA,
- * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
- * included with this distribution is covered by the same copyright terms
- * except that the holder is Tim Hudson ([EMAIL PROTECTED]).
- * 
- * Copyright remains Eric Young's, and as such any Copyright notices in
- * the code are not to be removed.
- * If this package is used in a product, Eric Young should be given attribution
- * as the author of the parts of the library used.
- * This can be in the form of a textual message at program startup or
- * in documentation (online or textual) provided with the package.
- * 
- * 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 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 acknowledgement:
- *    "This product includes cryptographic software written by
- *     Eric Young ([EMAIL PROTECTED])"
- *    The word 'cryptographic' can be left out if the rouines from the library
- *    being used are not cryptographic related :-).
- * 4. If you include any Windows specific code (or a derivative thereof) from 
- *    the apps directory (application code) you must include an acknowledgement:
- *    "This product includes software written by Tim Hudson ([EMAIL PROTECTED])"
- * 
- * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
- * ANY EXPRESS 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 AUTHOR OR 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.
- * 
- * The licence and distribution terms for any publically available version or
- * derivative of this code cannot be changed.  i.e. this code cannot simply be
- * copied and put under another distribution licence
- * [including the GNU Public Licence.]
- */
-
-/*
- * Copyright (c) 1995
- *     Mark Murray.  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 acknowledgement:
- *     This product includes software developed by Mark Murray
- * 4. Neither the name of the author nor the names of any co-contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY MARK MURRAY AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS 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 REGENTS OR 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.
- *
- * $Id: supp.c,v 1.1 2000/01/25 22:30:46 dsr Exp $
- */
-
-#include <stdio.h>
-#include "des_locl.h"
-
-void des_cblock_print_file(const_des_cblock *cb, FILE *fp)
-{
-       int i;
-       const unsigned int *p = (const unsigned int *)cb;
-
-       fprintf(fp, " 0x { ");
-       for (i = 0; i < 8; i++) {
-               fprintf(fp, "%x", p[i]);
-               if (i != 7) fprintf(fp, ", ");
-       }
-       fprintf(fp, " }");
-}
+/* crypto/des/supp.c */
+/* Copyright (C) 1995-1998 Eric Young ([EMAIL PROTECTED])
+ * All rights reserved.
+ *
+ * This package is an SSL implementation written
+ * by Eric Young ([EMAIL PROTECTED]).
+ * The implementation was written so as to conform with Netscapes SSL.
+ * 
+ * This library is free for commercial and non-commercial use as long as
+ * the following conditions are aheared to.  The following conditions
+ * apply to all code found in this distribution, be it the RC4, RSA,
+ * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
+ * included with this distribution is covered by the same copyright terms
+ * except that the holder is Tim Hudson ([EMAIL PROTECTED]).
+ * 
+ * Copyright remains Eric Young's, and as such any Copyright notices in
+ * the code are not to be removed.
+ * If this package is used in a product, Eric Young should be given attribution
+ * as the author of the parts of the library used.
+ * This can be in the form of a textual message at program startup or
+ * in documentation (online or textual) provided with the package.
+ * 
+ * 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 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 acknowledgement:
+ *    "This product includes cryptographic software written by
+ *     Eric Young ([EMAIL PROTECTED])"
+ *    The word 'cryptographic' can be left out if the rouines from the library
+ *    being used are not cryptographic related :-).
+ * 4. If you include any Windows specific code (or a derivative thereof) from 
+ *    the apps directory (application code) you must include an acknowledgement:
+ *    "This product includes software written by Tim Hudson ([EMAIL PROTECTED])"
+ * 
+ * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
+ * ANY EXPRESS 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 AUTHOR OR 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.
+ * 
+ * The licence and distribution terms for any publically available version or
+ * derivative of this code cannot be changed.  i.e. this code cannot simply be
+ * copied and put under another distribution licence
+ * [including the GNU Public Licence.]
+ */
+
+/*
+ * Copyright (c) 1995
+ *     Mark Murray.  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 acknowledgement:
+ *     This product includes software developed by Mark Murray
+ * 4. Neither the name of the author nor the names of any co-contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY MARK MURRAY AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS 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 REGENTS OR 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.
+ *
+ * $Id: supp.c,v 1.2 2000/03/02 20:11:53 dsr Exp $
+ */
+
+#include <stdio.h>
+#include "des_locl.h"
+
+void des_cblock_print_file(const_des_cblock *cb, FILE *fp)
+{
+       int i;
+       const unsigned int *p = (const unsigned int *)cb;
+
+       fprintf(fp, " 0x { ");
+       for (i = 0; i < 8; i++) {
+               fprintf(fp, "%x", p[i]);
+               if (i != 7) fprintf(fp, ", ");
+       }
+       fprintf(fp, " }");
+}
Index: opensa/openssl/crypto/dh/dh.h
diff -u opensa/openssl/crypto/dh/dh.h:1.1 opensa/openssl/crypto/dh/dh.h:1.2
--- opensa/openssl/crypto/dh/dh.h:1.1   Tue Jan 25 23:30:19 2000
+++ opensa/openssl/crypto/dh/dh.h       Thu Mar  2 21:11:53 2000
@@ -68,10 +68,28 @@
 #endif
 
 #include <openssl/bn.h>
+#include <openssl/crypto.h>
        
 #define DH_FLAG_CACHE_MONT_P   0x01
 
-typedef struct dh_st
+typedef struct dh_st DH;
+
+typedef struct dh_method {
+       const char *name;
+       /* Methods here */
+       int (*generate_key)(DH *dh);
+       int (*compute_key)(unsigned char *key,BIGNUM *pub_key,DH *dh);
+       int (*bn_mod_exp)(DH *dh, BIGNUM *r, BIGNUM *a, const BIGNUM *p,
+                               const BIGNUM *m, BN_CTX *ctx,
+                               BN_MONT_CTX *m_ctx); /* Can be null */
+
+       int (*init)(DH *dh);
+       int (*finish)(DH *dh);
+       int flags;
+       char *app_data;
+} DH_METHOD;
+
+struct dh_st
        {
        /* This first argument is used to pick up errors when
         * a DH is passed instead of a EVP_PKEY */
@@ -80,12 +98,22 @@
        BIGNUM *p;
        BIGNUM *g;
        int length; /* optional */
-       BIGNUM *pub_key;        /* y */
+       BIGNUM *pub_key;        /* g^x */
        BIGNUM *priv_key;       /* x */
 
        int flags;
        char *method_mont_p;
-       } DH;
+       /* Place holders if we want to do X9.42 DH */
+       BIGNUM *q;
+       BIGNUM *j;
+       unsigned char *seed;
+       int seedlen;
+       BIGNUM *counter;
+
+       int references;
+       CRYPTO_EX_DATA ex_data;
+       DH_METHOD *meth;
+       };
 
 #define DH_GENERATOR_2         2
 /* #define DH_GENERATOR_3      3 */
@@ -93,10 +121,14 @@
 
 /* DH_check error codes */
 #define DH_CHECK_P_NOT_PRIME           0x01
-#define DH_CHECK_P_NOT_STRONG_PRIME    0x02
+#define DH_CHECK_P_NOT_SAFE_PRIME      0x02
 #define DH_UNABLE_TO_CHECK_GENERATOR   0x04
 #define DH_NOT_SUITABLE_GENERATOR      0x08
 
+/* primes p where (p-1)/2 is prime too are called "safe"; we define
+   this for backward compatibility: */
+#define DH_CHECK_P_NOT_STRONG_PRIME    DH_CHECK_P_NOT_SAFE_PRIME
+
 #define DHparams_dup(x) (DH *)ASN1_dup((int (*)())i2d_DHparams, \
                (char *(*)())d2i_DHparams,(char *)(x))
 #define d2i_DHparams_fp(fp,x) (DH *)ASN1_d2i_fp((char *(*)())DH_new, \
@@ -113,9 +145,20 @@
                (unsigned char *)(x))
 #endif
 
+DH_METHOD *DH_OpenSSL(void);
+
+void DH_set_default_method(DH_METHOD *meth);
+DH_METHOD *DH_get_default_method(void);
+DH_METHOD *DH_set_method(DH *dh, DH_METHOD *meth);
+DH *DH_new_method(DH_METHOD *meth);
+
 DH *   DH_new(void);
 void   DH_free(DH *dh);
 int    DH_size(DH *dh);
+int DH_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
+            CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func);
+int DH_set_ex_data(DH *d, int idx, void *arg);
+void *DH_get_ex_data(DH *d, int idx);
 DH *   DH_generate_parameters(int prime_len,int generator,
                void (*callback)(int,int,void *),void *cb_arg);
 int    DH_check(DH *dh,int *codes);
Index: opensa/openssl/crypto/dh/dh_check.c
diff -u opensa/openssl/crypto/dh/dh_check.c:1.1 opensa/openssl/crypto/dh/dh_check.c:1.2
--- opensa/openssl/crypto/dh/dh_check.c:1.1     Tue Jan 25 23:30:19 2000
+++ opensa/openssl/crypto/dh/dh_check.c Thu Mar  2 21:11:53 2000
@@ -61,7 +61,7 @@
 #include <openssl/bn.h>
 #include <openssl/dh.h>
 
-/* Check that p is a strong prime and
+/* Check that p is a safe prime and
  * if g is 2, 3 or 5, check that is is a suitable generator
  * where
  * for 2, p mod 24 == 11
@@ -88,11 +88,13 @@
                l=BN_mod_word(dh->p,24);
                if (l != 11) *ret|=DH_NOT_SUITABLE_GENERATOR;
                }
-/*     else if (BN_is_word(dh->g,DH_GENERATOR_3))
+#if 0
+       else if (BN_is_word(dh->g,DH_GENERATOR_3))
                {
                l=BN_mod_word(dh->p,12);
                if (l != 5) *ret|=DH_NOT_SUITABLE_GENERATOR;
-               }*/
+               }
+#endif
        else if (BN_is_word(dh->g,DH_GENERATOR_5))
                {
                l=BN_mod_word(dh->p,10);
@@ -108,7 +110,7 @@
                {
                if (!BN_rshift1(q,dh->p)) goto err;
                if (!BN_is_prime(q,BN_prime_checks,NULL,ctx,NULL))
-                       *ret|=DH_CHECK_P_NOT_STRONG_PRIME;
+                       *ret|=DH_CHECK_P_NOT_SAFE_PRIME;
                }
        ok=1;
 err:
Index: opensa/openssl/crypto/dh/dh_gen.c
diff -u opensa/openssl/crypto/dh/dh_gen.c:1.1 opensa/openssl/crypto/dh/dh_gen.c:1.2
--- opensa/openssl/crypto/dh/dh_gen.c:1.1       Tue Jan 25 23:30:19 2000
+++ opensa/openssl/crypto/dh/dh_gen.c   Thu Mar  2 21:11:53 2000
@@ -72,14 +72,14 @@
  * Having said all that,
  * there is another special case method for the generators 2, 3 and 5.
  * for 2, p mod 24 == 11
- * for 3, p mod 12 == 5  <<<<< does not work for strong primes.
+ * for 3, p mod 12 == 5  <<<<< does not work for safe primes.
  * for 5, p mod 10 == 3 or 7
  *
  * Thanks to Phil Karn <[EMAIL PROTECTED]> for the pointers about the
  * special generators and for answering some of my questions.
  *
  * I've implemented the second simple method :-).
- * Since DH should be using a strong prime (both p and q are prime),
+ * Since DH should be using a safe prime (both p and q are prime),
  * this generator function can take a very very long time to run.
  */
 
@@ -95,9 +95,10 @@
        if (ret == NULL) goto err;
        ctx=BN_CTX_new();
        if (ctx == NULL) goto err;
-       t1= &(ctx->bn[0]);
-       t2= &(ctx->bn[1]);
-       ctx->tos=2;
+       BN_CTX_start(ctx);
+       t1 = BN_CTX_get(ctx);
+       t2 = BN_CTX_get(ctx);
+       if (t1 == NULL || t2 == NULL) goto err;
        
        if (generator == DH_GENERATOR_2)
                {
@@ -105,7 +106,7 @@
                BN_set_word(t2,11);
                g=2;
                }
-#ifdef undef  /* does not work for strong primes */
+#ifdef undef  /* does not work for safe primes */
        else if (generator == DH_GENERATOR_3)
                {
                BN_set_word(t1,12);
@@ -138,7 +139,11 @@
                ok=0;
                }
 
-       if (ctx != NULL) BN_CTX_free(ctx);
+       if (ctx != NULL)
+               {
+               BN_CTX_end(ctx);
+               BN_CTX_free(ctx);
+               }
        if (!ok && (ret != NULL))
                {
                DH_free(ret);
Index: opensa/openssl/crypto/dh/dh_key.c
diff -u opensa/openssl/crypto/dh/dh_key.c:1.1 opensa/openssl/crypto/dh/dh_key.c:1.2
--- opensa/openssl/crypto/dh/dh_key.c:1.1       Tue Jan 25 23:30:19 2000
+++ opensa/openssl/crypto/dh/dh_key.c   Thu Mar  2 21:11:53 2000
@@ -62,8 +62,42 @@
 #include <openssl/rand.h>
 #include <openssl/dh.h>
 
+static int generate_key(DH *dh);
+static int compute_key(unsigned char *key, BIGNUM *pub_key, DH *dh);
+static int dh_bn_mod_exp(DH *dh, BIGNUM *r, BIGNUM *a, const BIGNUM *p,
+                       const BIGNUM *m, BN_CTX *ctx,
+                       BN_MONT_CTX *m_ctx);
+static int dh_init(DH *dh);
+static int dh_finish(DH *dh);
+
 int DH_generate_key(DH *dh)
        {
+       return dh->meth->generate_key(dh);
+       }
+
+int DH_compute_key(unsigned char *key, BIGNUM *pub_key, DH *dh)
+       {
+       return dh->meth->compute_key(key, pub_key, dh);
+       }
+
+static DH_METHOD dh_ossl = {
+"OpenSSL DH Method",
+generate_key,
+compute_key,
+dh_bn_mod_exp,
+dh_init,
+dh_finish,
+0,
+NULL
+};
+
+DH_METHOD *DH_OpenSSL(void)
+{
+       return &dh_ossl;
+}
+
+static int generate_key(DH *dh)
+       {
        int ok=0;
        unsigned int i;
        BN_CTX ctx;
@@ -103,7 +137,8 @@
                }
        mont=(BN_MONT_CTX *)dh->method_mont_p;
 
-       if (!BN_mod_exp_mont(pub_key,dh->g,priv_key,dh->p,&ctx,mont)) goto err;
+       if (!dh->meth->bn_mod_exp(dh, pub_key,dh->g,priv_key,dh->p,&ctx,mont))
+                                                               goto err;
                
        dh->pub_key=pub_key;
        dh->priv_key=priv_key;
@@ -118,7 +153,7 @@
        return(ok);
        }
 
-int DH_compute_key(unsigned char *key, BIGNUM *pub_key, DH *dh)
+static int compute_key(unsigned char *key, BIGNUM *pub_key, DH *dh)
        {
        BN_CTX ctx;
        BN_MONT_CTX *mont;
@@ -126,7 +161,8 @@
        int ret= -1;
 
        BN_CTX_init(&ctx);
-       tmp= &(ctx.bn[ctx.tos++]);
+       BN_CTX_start(&ctx);
+       tmp = BN_CTX_get(&ctx);
        
        if (dh->priv_key == NULL)
                {
@@ -141,7 +177,7 @@
                }
 
        mont=(BN_MONT_CTX *)dh->method_mont_p;
-       if (!BN_mod_exp_mont(tmp,pub_key,dh->priv_key,dh->p,&ctx,mont))
+       if (!dh->meth->bn_mod_exp(dh, tmp,pub_key,dh->priv_key,dh->p,&ctx,mont))
                {
                DHerr(DH_F_DH_COMPUTE_KEY,ERR_R_BN_LIB);
                goto err;
@@ -149,6 +185,27 @@
 
        ret=BN_bn2bin(tmp,key);
 err:
+       BN_CTX_end(&ctx);
        BN_CTX_free(&ctx);
        return(ret);
        }
+
+static int dh_bn_mod_exp(DH *dh, BIGNUM *r, BIGNUM *a, const BIGNUM *p,
+                       const BIGNUM *m, BN_CTX *ctx,
+                       BN_MONT_CTX *m_ctx)
+{
+       return BN_mod_exp_mont(r, a, p, m, ctx, m_ctx);
+}
+
+static int dh_init(DH *dh)
+{
+       dh->flags |= DH_FLAG_CACHE_MONT_P;
+       return(1);
+}
+
+static int dh_finish(DH *dh)
+{
+       if(dh->method_mont_p)
+               BN_MONT_CTX_free((BN_MONT_CTX *)dh->method_mont_p);
+       return(1);
+}
Index: opensa/openssl/crypto/dh/dh_lib.c
diff -u opensa/openssl/crypto/dh/dh_lib.c:1.1 opensa/openssl/crypto/dh/dh_lib.c:1.2
--- opensa/openssl/crypto/dh/dh_lib.c:1.1       Tue Jan 25 23:30:19 2000
+++ opensa/openssl/crypto/dh/dh_lib.c   Thu Mar  2 21:11:53 2000
@@ -63,16 +63,49 @@
 
 const char *DH_version="Diffie-Hellman" OPENSSL_VERSION_PTEXT;
 
+static DH_METHOD *default_DH_method;
+static int dh_meth_num = 0;
+static STACK_OF(CRYPTO_EX_DATA_FUNCS) *dh_meth = NULL;
+
+void DH_set_default_method(DH_METHOD *meth)
+{
+       default_DH_method = meth;
+}
+
+DH_METHOD *DH_get_default_method(void)
+{
+       if(!default_DH_method) default_DH_method = DH_OpenSSL();
+       return default_DH_method;
+}
+
+DH_METHOD *DH_set_method(DH *dh, DH_METHOD *meth)
+{
+        DH_METHOD *mtmp;
+        mtmp = dh->meth;
+        if (mtmp->finish) mtmp->finish(dh);
+        dh->meth = meth;
+        if (meth->init) meth->init(dh);
+        return mtmp;
+}
+
 DH *DH_new(void)
+{
+       return DH_new_method(NULL);
+}
+
+DH *DH_new_method(DH_METHOD *meth)
        {
        DH *ret;
-
        ret=(DH *)Malloc(sizeof(DH));
+
        if (ret == NULL)
                {
                DHerr(DH_F_DH_NEW,ERR_R_MALLOC_FAILURE);
                return(NULL);
                }
+       if(!default_DH_method) default_DH_method = DH_OpenSSL();
+       if(meth) ret->meth = meth;
+       else ret->meth = default_DH_method;
        ret->pad=0;
        ret->version=0;
        ret->p=NULL;
@@ -80,21 +113,72 @@
        ret->length=0;
        ret->pub_key=NULL;
        ret->priv_key=NULL;
-       ret->flags=DH_FLAG_CACHE_MONT_P;
+       ret->q=NULL;
+       ret->j=NULL;
+       ret->seed = NULL;
+       ret->seedlen = 0;
+       ret->counter = NULL;
        ret->method_mont_p=NULL;
+       ret->references = 1;
+       ret->flags=ret->meth->flags;
+       if ((ret->meth->init != NULL) && !ret->meth->init(ret))
+               {
+               Free(ret);
+               ret=NULL;
+               }
+       else
+               CRYPTO_new_ex_data(dh_meth,ret,&ret->ex_data);
        return(ret);
        }
 
 void DH_free(DH *r)
        {
+       int i;
        if(r == NULL) return;
+       i = CRYPTO_add(&r->references, -1, CRYPTO_LOCK_DH);
+#ifdef REF_PRINT
+       REF_PRINT("DH",r);
+#endif
+       if (i > 0) return;
+#ifdef REF_CHECK
+       if (i < 0)
+               {
+               fprintf(stderr,"DH_free, bad reference count\n");
+               abort();
+       }
+#endif
+
+       CRYPTO_free_ex_data(dh_meth, r, &r->ex_data);
+
+       if(r->meth->finish) r->meth->finish(r);
+
        if (r->p != NULL) BN_clear_free(r->p);
        if (r->g != NULL) BN_clear_free(r->g);
+       if (r->q != NULL) BN_clear_free(r->q);
+       if (r->j != NULL) BN_clear_free(r->j);
+       if (r->seed) Free(r->seed);
+       if (r->counter != NULL) BN_clear_free(r->counter);
        if (r->pub_key != NULL) BN_clear_free(r->pub_key);
        if (r->priv_key != NULL) BN_clear_free(r->priv_key);
-       if (r->method_mont_p != NULL)
-               BN_MONT_CTX_free((BN_MONT_CTX *)r->method_mont_p);
        Free(r);
+       }
+
+int DH_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
+            CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func)
+        {
+       dh_meth_num++;
+       return(CRYPTO_get_ex_new_index(dh_meth_num-1,
+               &dh_meth,argl,argp,new_func,dup_func,free_func));
+        }
+
+int DH_set_ex_data(DH *d, int idx, void *arg)
+       {
+       return(CRYPTO_set_ex_data(&d->ex_data,idx,arg));
+       }
+
+void *DH_get_ex_data(DH *d, int idx)
+       {
+       return(CRYPTO_get_ex_data(&d->ex_data,idx));
        }
 
 int DH_size(DH *dh)
Index: opensa/openssl/crypto/dh/dhtest.c
diff -u opensa/openssl/crypto/dh/dhtest.c:1.1 opensa/openssl/crypto/dh/dhtest.c:1.2
--- opensa/openssl/crypto/dh/dhtest.c:1.1       Tue Jan 25 23:30:19 2000
+++ opensa/openssl/crypto/dh/dhtest.c   Thu Mar  2 21:11:53 2000
@@ -65,6 +65,7 @@
 #include <openssl/crypto.h>
 #include <openssl/bio.h>
 #include <openssl/bn.h>
+#include <openssl/rand.h>
 
 #ifdef NO_DH
 int main(int argc, char *argv[])
@@ -87,19 +88,23 @@
 #include "bss_file.c"
 #endif
 
-BIO *out=NULL;
+static const char rnd_seed[] = "string to make the random number generator think it 
+has entropy";
 
 int main(int argc, char *argv[])
        {
-       DH *a,*b;
+       DH *a;
+       DH *b=NULL;
        char buf[12];
        unsigned char *abuf=NULL,*bbuf=NULL;
        int i,alen,blen,aout,bout,ret=1;
+       BIO *out;
 
 #ifdef WIN32
        CRYPTO_malloc_init();
 #endif
 
+       RAND_seed(rnd_seed, sizeof rnd_seed);
+
        out=BIO_new(BIO_s_file());
        if (out == NULL) exit(1);
        BIO_set_fp(out,stdout,BIO_NOCLOSE);
@@ -167,6 +172,9 @@
 err:
        if (abuf != NULL) Free(abuf);
        if (bbuf != NULL) Free(bbuf);
+       if(b != NULL) DH_free(b);
+       if(a != NULL) DH_free(a);
+       BIO_free(out);
        exit(ret);
        return(ret);
        }
Index: opensa/openssl/crypto/dh/makefile.ssl
diff -u opensa/openssl/crypto/dh/makefile.ssl:1.1 
opensa/openssl/crypto/dh/makefile.ssl:1.2
--- opensa/openssl/crypto/dh/makefile.ssl:1.1   Tue Jan 25 23:30:19 2000
+++ opensa/openssl/crypto/dh/makefile.ssl       Thu Mar  2 21:11:53 2000
@@ -83,26 +83,30 @@
 dh_check.o: ../../include/openssl/dh.h ../../include/openssl/e_os.h
 dh_check.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
 dh_check.o: ../../include/openssl/opensslconf.h
-dh_check.o: ../../include/openssl/opensslv.h ../../include/openssl/stack.h
-dh_check.o: ../cryptlib.h
-dh_err.o: ../../include/openssl/bn.h ../../include/openssl/dh.h
-dh_err.o: ../../include/openssl/err.h ../../include/openssl/opensslconf.h
+dh_check.o: ../../include/openssl/opensslv.h ../../include/openssl/safestack.h
+dh_check.o: ../../include/openssl/stack.h ../cryptlib.h
+dh_err.o: ../../include/openssl/bn.h ../../include/openssl/crypto.h
+dh_err.o: ../../include/openssl/dh.h ../../include/openssl/err.h
+dh_err.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
+dh_err.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
 dh_gen.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
 dh_gen.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 dh_gen.o: ../../include/openssl/dh.h ../../include/openssl/e_os.h
 dh_gen.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
 dh_gen.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
-dh_gen.o: ../../include/openssl/stack.h ../cryptlib.h
+dh_gen.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
+dh_gen.o: ../cryptlib.h
 dh_key.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
 dh_key.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 dh_key.o: ../../include/openssl/dh.h ../../include/openssl/e_os.h
 dh_key.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
 dh_key.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
-dh_key.o: ../../include/openssl/rand.h ../../include/openssl/stack.h
-dh_key.o: ../cryptlib.h
+dh_key.o: ../../include/openssl/rand.h ../../include/openssl/safestack.h
+dh_key.o: ../../include/openssl/stack.h ../cryptlib.h
 dh_lib.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
 dh_lib.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 dh_lib.o: ../../include/openssl/dh.h ../../include/openssl/e_os.h
 dh_lib.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
 dh_lib.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
-dh_lib.o: ../../include/openssl/stack.h ../cryptlib.h
+dh_lib.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
+dh_lib.o: ../cryptlib.h
Index: opensa/openssl/crypto/dsa/dsa.h
diff -u opensa/openssl/crypto/dsa/dsa.h:1.1 opensa/openssl/crypto/dsa/dsa.h:1.2
--- opensa/openssl/crypto/dsa/dsa.h:1.1 Tue Jan 25 23:30:03 2000
+++ opensa/openssl/crypto/dsa/dsa.h     Thu Mar  2 21:11:53 2000
@@ -74,13 +74,41 @@
 #endif
 
 #include <openssl/bn.h>
+#include <openssl/crypto.h>
 #ifndef NO_DH
 # include <openssl/dh.h>
 #endif
 
 #define DSA_FLAG_CACHE_MONT_P  0x01
 
-typedef struct dsa_st
+typedef struct dsa_st DSA;
+
+typedef struct DSA_SIG_st
+       {
+       BIGNUM *r;
+       BIGNUM *s;
+       } DSA_SIG;
+
+typedef struct dsa_method {
+       const char *name;
+       DSA_SIG * (*dsa_do_sign)(const unsigned char *dgst, int dlen, DSA *dsa);
+       int (*dsa_sign_setup)(DSA *dsa, BN_CTX *ctx_in, BIGNUM **kinvp,
+                                                               BIGNUM **rp);
+       int (*dsa_do_verify)(const unsigned char *dgst, int dgst_len,
+                                                       DSA_SIG *sig, DSA *dsa);
+       int (*dsa_mod_exp)(DSA *dsa, BIGNUM *rr, BIGNUM *a1, BIGNUM *p1,
+                       BIGNUM *a2, BIGNUM *p2, BIGNUM *m, BN_CTX *ctx,
+                       BN_MONT_CTX *in_mont);
+       int (*bn_mod_exp)(DSA *dsa, BIGNUM *r, BIGNUM *a, const BIGNUM *p,
+                               const BIGNUM *m, BN_CTX *ctx,
+                               BN_MONT_CTX *m_ctx); /* Can be null */
+       int (*init)(DSA *dsa);
+       int (*finish)(DSA *dsa);
+       int flags;
+       char *app_data;
+} DSA_METHOD;
+
+struct dsa_st
        {
        /* This first variable is used to pick up errors where
         * a DSA is passed instead of of a EVP_PKEY */
@@ -100,16 +128,11 @@
        int flags;
        /* Normally used to cache montgomery values */
        char *method_mont_p;
-
        int references;
-       } DSA;
+       CRYPTO_EX_DATA ex_data;
+       DSA_METHOD *meth;
+       };
 
-typedef struct DSA_SIG_st
-       {
-       BIGNUM *r;
-       BIGNUM *s;
-       } DSA_SIG;
-
 #define DSAparams_dup(x) (DSA *)ASN1_dup((int (*)())i2d_DSAparams, \
                (char *(*)())d2i_DSAparams,(char *)(x))
 #define d2i_DSAparams_fp(fp,x) (DSA *)ASN1_d2i_fp((char *(*)())DSA_new, \
@@ -131,7 +154,14 @@
 int    DSA_do_verify(const unsigned char *dgst,int dgst_len,
                      DSA_SIG *sig,DSA *dsa);
 
+DSA_METHOD *DSA_OpenSSL(void);
+
+void        DSA_set_default_method(DSA_METHOD *);
+DSA_METHOD *DSA_get_default_method(void);
+DSA_METHOD *DSA_set_method(DSA *dsa, DSA_METHOD *);
+
 DSA *  DSA_new(void);
+DSA *  DSA_new_method(DSA_METHOD *meth);
 int    DSA_size(DSA *);
        /* next 4 return -1 on error */
 int    DSA_sign_setup( DSA *dsa,BN_CTX *ctx_in,BIGNUM **kinvp,BIGNUM **rp);
@@ -140,6 +170,10 @@
 int    DSA_verify(int type,const unsigned char *dgst,int dgst_len,
                unsigned char *sigbuf, int siglen, DSA *dsa);
 void   DSA_free (DSA *r);
+int DSA_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
+            CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func);
+int DSA_set_ex_data(DSA *d, int idx, void *arg);
+void *DSA_get_ex_data(DSA *d, int idx);
 
 void   ERR_load_DSA_strings(void );
 
@@ -148,7 +182,7 @@
 DSA *  d2i_DSAparams(DSA **a, unsigned char **pp, long length);
 DSA *  DSA_generate_parameters(int bits, unsigned char *seed,int seed_len,
                int *counter_ret, unsigned long *h_ret,void
-               (*callback)(),char *cb_arg);
+               (*callback)(int, int, void *),void *cb_arg);
 int    DSA_generate_key(DSA *a);
 int    i2d_DSAPublicKey(DSA *a, unsigned char **pp);
 int    i2d_DSAPrivateKey(DSA *a, unsigned char **pp);
@@ -163,7 +197,11 @@
 int    DSA_print_fp(FILE *bp, DSA *x, int off);
 #endif
 
-int DSA_is_prime(BIGNUM *q,void (*callback)(),char *cb_arg);
+#define DSS_prime_checks 50
+/* Primality test according to FIPS PUB 186[-1], Appendix 2.1:
+ * 50 rounds of Rabin-Miller */
+#define DSA_is_prime(n, callback, cb_arg) \
+       BN_is_prime(n, DSS_prime_checks, callback, NULL, cb_arg)
 
 #ifndef NO_DH
 /* Convert DSA structure (key or just parameters) into DH structure
@@ -184,7 +222,6 @@
 #define DSA_F_DSAPARAMS_PRINT_FP                        101
 #define DSA_F_DSA_DO_SIGN                               112
 #define DSA_F_DSA_DO_VERIFY                             113
-#define DSA_F_DSA_IS_PRIME                              102
 #define DSA_F_DSA_NEW                                   103
 #define DSA_F_DSA_PRINT                                         104
 #define DSA_F_DSA_PRINT_FP                              105
Index: opensa/openssl/crypto/dsa/dsa_asn1.c
diff -u opensa/openssl/crypto/dsa/dsa_asn1.c:1.1 
opensa/openssl/crypto/dsa/dsa_asn1.c:1.2
--- opensa/openssl/crypto/dsa/dsa_asn1.c:1.1    Tue Jan 25 23:30:03 2000
+++ opensa/openssl/crypto/dsa/dsa_asn1.c        Thu Mar  2 21:11:53 2000
@@ -83,7 +83,7 @@
        M_ASN1_D2I_get(bs,d2i_ASN1_INTEGER);
        if ((ret->s=BN_bin2bn(bs->data,bs->length,ret->s)) == NULL)
                goto err_bn;
-       ASN1_BIT_STRING_free(bs);
+       M_ASN1_BIT_STRING_free(bs);
        M_ASN1_D2I_Finish_2(a);
 
 err_bn:
@@ -91,6 +91,6 @@
 err:
        DSAerr(DSA_F_D2I_DSA_SIG,i);
        if ((ret != NULL) && ((a == NULL) || (*a != ret))) DSA_SIG_free(ret);
-       if (bs != NULL) ASN1_BIT_STRING_free(bs);
+       if (bs != NULL) M_ASN1_BIT_STRING_free(bs);
        return(NULL);
 }
Index: opensa/openssl/crypto/dsa/dsa_err.c
diff -u opensa/openssl/crypto/dsa/dsa_err.c:1.1 opensa/openssl/crypto/dsa/dsa_err.c:1.2
--- opensa/openssl/crypto/dsa/dsa_err.c:1.1     Tue Jan 25 23:30:03 2000
+++ opensa/openssl/crypto/dsa/dsa_err.c Thu Mar  2 21:11:53 2000
@@ -70,7 +70,6 @@
 {ERR_PACK(0,DSA_F_DSAPARAMS_PRINT_FP,0),       "DSAparams_print_fp"},
 {ERR_PACK(0,DSA_F_DSA_DO_SIGN,0),      "DSA_do_sign"},
 {ERR_PACK(0,DSA_F_DSA_DO_VERIFY,0),    "DSA_do_verify"},
-{ERR_PACK(0,DSA_F_DSA_IS_PRIME,0),     "DSA_is_prime"},
 {ERR_PACK(0,DSA_F_DSA_NEW,0),  "DSA_new"},
 {ERR_PACK(0,DSA_F_DSA_PRINT,0),        "DSA_print"},
 {ERR_PACK(0,DSA_F_DSA_PRINT_FP,0),     "DSA_print_fp"},
Index: opensa/openssl/crypto/dsa/dsa_gen.c
diff -u opensa/openssl/crypto/dsa/dsa_gen.c:1.1 opensa/openssl/crypto/dsa/dsa_gen.c:1.2
--- opensa/openssl/crypto/dsa/dsa_gen.c:1.1     Tue Jan 25 23:30:03 2000
+++ opensa/openssl/crypto/dsa/dsa_gen.c Thu Mar  2 21:11:53 2000
@@ -59,12 +59,18 @@
 #undef GENUINE_DSA
 
 #ifdef GENUINE_DSA
+/* Parameter generation follows the original release of FIPS PUB 186,
+ * Appendix 2.2 (i.e. use SHA as defined in FIPS PUB 180) */
 #define HASH    SHA
 #else
+/* Parameter generation follows the updated Appendix 2.2 for FIPS PUB 186,
+ * also Appendix 2.2 of FIPS PUB 186-1 (i.e. use SHA as defined in
+ * FIPS PUB 180-1) */
 #define HASH    SHA1
 #endif 
 
 #ifndef NO_SHA
+
 #include <stdio.h>
 #include <time.h>
 #include "cryptlib.h"
@@ -74,8 +80,9 @@
 #include <openssl/rand.h>
 
 DSA *DSA_generate_parameters(int bits, unsigned char *seed_in, int seed_len,
-            int *counter_ret, unsigned long *h_ret, void (*callback)(),
-            char *cb_arg)
+               int *counter_ret, unsigned long *h_ret,
+               void (*callback)(int, int, void *),
+               void *cb_arg)
        {
        int ok=0;
        unsigned char seed[SHA_DIGEST_LENGTH];
@@ -86,47 +93,63 @@
        BN_MONT_CTX *mont=NULL;
        int k,n=0,i,b,m=0;
        int counter=0;
-       BN_CTX *ctx=NULL,*ctx2=NULL;
+       int r=0;
+       BN_CTX *ctx=NULL,*ctx2=NULL,*ctx3=NULL;
        unsigned int h=2;
        DSA *ret=NULL;
 
        if (bits < 512) bits=512;
        bits=(bits+63)/64*64;
 
+       if (seed_len < 20)
+               seed_in = NULL; /* seed buffer too small -- ignore */
+       if (seed_len > 20) 
+               seed_len = 20; /* App. 2.2 of FIPS PUB 186 allows larger SEED,
+                               * but our internal buffers are restricted to 160 bits*/
        if ((seed_in != NULL) && (seed_len == 20))
                memcpy(seed,seed_in,seed_len);
 
        if ((ctx=BN_CTX_new()) == NULL) goto err;
        if ((ctx2=BN_CTX_new()) == NULL) goto err;
+       if ((ctx3=BN_CTX_new()) == NULL) goto err;
        if ((ret=DSA_new()) == NULL) goto err;
 
        if ((mont=BN_MONT_CTX_new()) == NULL) goto err;
 
-       r0= &(ctx2->bn[0]);
-       g= &(ctx2->bn[1]);
-       W= &(ctx2->bn[2]);
-       q= &(ctx2->bn[3]);
-       X= &(ctx2->bn[4]);
-       c= &(ctx2->bn[5]);
-       p= &(ctx2->bn[6]);
-       test= &(ctx2->bn[7]);
+       BN_CTX_start(ctx2);
+       r0 = BN_CTX_get(ctx2);
+       g = BN_CTX_get(ctx2);
+       W = BN_CTX_get(ctx2);
+       q = BN_CTX_get(ctx2);
+       X = BN_CTX_get(ctx2);
+       c = BN_CTX_get(ctx2);
+       p = BN_CTX_get(ctx2);
+       test = BN_CTX_get(ctx2);
 
        BN_lshift(test,BN_value_one(),bits-1);
 
        for (;;)
                {
-               for (;;)
+               for (;;) /* find q */
                        {
+                       int seed_is_random;
+
                        /* step 1 */
                        if (callback != NULL) callback(0,m++,cb_arg);
 
                        if (!seed_len)
-                               RAND_bytes(seed,SHA_DIGEST_LENGTH);
+                               {
+                               RAND_pseudo_bytes(seed,SHA_DIGEST_LENGTH);
+                               seed_is_random = 1;
+                               }
                        else
-                               seed_len=0;
-
+                               {
+                               seed_is_random = 0;
+                               seed_len=0; /* use random seed if 'seed_in' turns out 
+to be bad*/
+                               }
                        memcpy(buf,seed,SHA_DIGEST_LENGTH);
                        memcpy(buf2,seed,SHA_DIGEST_LENGTH);
+                       /* precompute "SEED + 1" for step 7: */
                        for (i=SHA_DIGEST_LENGTH-1; i >= 0; i--)
                                {
                                buf[i]++;
@@ -142,10 +165,15 @@
                        /* step 3 */
                        md[0]|=0x80;
                        md[SHA_DIGEST_LENGTH-1]|=0x01;
-                       if (!BN_bin2bn(md,SHA_DIGEST_LENGTH,q)) abort();
+                       if (!BN_bin2bn(md,SHA_DIGEST_LENGTH,q)) goto err;
 
                        /* step 4 */
-                       if (DSA_is_prime(q,callback,cb_arg) > 0) break;
+                       r = BN_is_prime_fasttest(q, DSS_prime_checks, callback, ctx3, 
+cb_arg, seed_is_random);
+                       if (r > 0)
+                               break;
+                       if (r != 0)
+                               goto err;
+
                        /* do a callback call */
                        /* step 5 */
                        }
@@ -155,16 +183,22 @@
 
                /* step 6 */
                counter=0;
+               /* "offset = 2" */
 
                n=(bits-1)/160;
                b=(bits-1)-n*160;
 
                for (;;)
                        {
+                       if (callback != NULL && counter != 0)
+                               callback(0,counter,cb_arg);
+
                        /* step 7 */
                        BN_zero(W);
+                       /* now 'buf' contains "SEED + offset - 1" */
                        for (k=0; k<=n; k++)
                                {
+                               /* obtain "SEED + offset + k" by incrementing: */
                                for (i=SHA_DIGEST_LENGTH-1; i >= 0; i--)
                                        {
                                        buf[i]++;
@@ -174,7 +208,8 @@
                                HASH(buf,SHA_DIGEST_LENGTH,md);
 
                                /* step 8 */
-                               if (!BN_bin2bn(md,SHA_DIGEST_LENGTH,r0)) abort();
+                               if (!BN_bin2bn(md,SHA_DIGEST_LENGTH,r0))
+                                       goto err;
                                BN_lshift(r0,r0,160*k);
                                BN_add(W,W,r0);
                                }
@@ -194,23 +229,25 @@
                        if (BN_cmp(p,test) >= 0)
                                {
                                /* step 11 */
-                               if (DSA_is_prime(p,callback,cb_arg) > 0)
-                                       goto end;
+                               r = BN_is_prime_fasttest(p, DSS_prime_checks, 
+callback, ctx3, cb_arg, 1);
+                               if (r > 0)
+                                               goto end; /* found it */
+                               if (r != 0)
+                                       goto err;
                                }
 
                        /* step 13 */
                        counter++;
+                       /* "offset = offset + n + 1" */
 
                        /* step 14 */
                        if (counter >= 4096) break;
-
-                       if (callback != NULL) callback(0,counter,cb_arg);
                        }
                }
 end:
        if (callback != NULL) callback(2,1,cb_arg);
 
-       /* We now need to gernerate g */
+       /* We now need to generate g */
        /* Set r0=(p-1)/q */
        BN_sub(test,p,BN_value_one());
        BN_div(r0,NULL,test,q,ctx);
@@ -245,89 +282,13 @@
                if (h_ret != NULL) *h_ret=h;
                }
        if (ctx != NULL) BN_CTX_free(ctx);
-       if (ctx != NULL) BN_CTX_free(ctx2);
-       if (mont != NULL) BN_MONT_CTX_free(mont);
-       return(ok?ret:NULL);
-       }
-
-int DSA_is_prime(BIGNUM *w, void (*callback)(), char *cb_arg)
-       {
-       int ok= -1,j,i,n;
-       BN_CTX *ctx=NULL,*ctx2=NULL;
-       BIGNUM *w_1,*b,*m,*z,*tmp,*mont_1;
-       int a;
-       BN_MONT_CTX *mont=NULL;
-
-       if (!BN_is_bit_set(w,0)) return(0);
-
-       if ((ctx=BN_CTX_new()) == NULL) goto err;
-       if ((ctx2=BN_CTX_new()) == NULL) goto err;
-       if ((mont=BN_MONT_CTX_new()) == NULL) goto err;
-
-       m=   &(ctx2->bn[2]);
-       b=   &(ctx2->bn[3]);
-       z=   &(ctx2->bn[4]);
-       w_1= &(ctx2->bn[5]);
-       tmp= &(ctx2->bn[6]);
-       mont_1= &(ctx2->bn[7]);
-
-       /* step 1 */
-       n=50;
-
-       /* step 2 */
-       if (!BN_sub(w_1,w,BN_value_one())) goto err;
-       for (a=1; !BN_is_bit_set(w_1,a); a++)
-               ;
-       if (!BN_rshift(m,w_1,a)) goto err;
-
-       BN_MONT_CTX_set(mont,w,ctx);
-       BN_to_montgomery(mont_1,BN_value_one(),mont,ctx);
-       BN_to_montgomery(w_1,w_1,mont,ctx);
-       for (i=1; i < n; i++)
+       if (ctx2 != NULL)
                {
-               /* step 3 */
-               BN_rand(b,BN_num_bits(w)-2/*-1*/,0,0);
-               /* BN_set_word(b,0x10001L); */
-
-               /* step 4 */
-               j=0;
-               if (!BN_mod_exp_mont(z,b,m,w,ctx,mont)) goto err;
-
-               if (!BN_to_montgomery(z,z,mont,ctx)) goto err;
-
-               /* step 5 */
-               for (;;)
-                       {
-                       if (((j == 0) && (BN_cmp(z,mont_1) == 0)) ||
-                               (BN_cmp(z,w_1) == 0))
-                               break;
-
-                       /* step 6 */
-                       if ((j > 0) && (BN_cmp(z,mont_1) == 0))
-                               {
-                               ok=0;
-                               goto err;
-                               }
-
-                       j++;
-                       if (j >= a)
-                               {
-                               ok=0;
-                               goto err;
-                               }
-
-                       if (!BN_mod_mul_montgomery(z,z,z,mont,ctx)) goto err;
-                       if (callback != NULL) callback(1,j,cb_arg);
-                       }
+               BN_CTX_end(ctx2);
+               BN_CTX_free(ctx2);
                }
-
-       ok=1;
-err:
-       if (ok == -1) DSAerr(DSA_F_DSA_IS_PRIME,ERR_R_BN_LIB);
-       BN_CTX_free(ctx);
-       BN_CTX_free(ctx2);
-       BN_MONT_CTX_free(mont);
-       
-       return(ok);
+       if (ctx3 != NULL) BN_CTX_free(ctx3);
+       if (mont != NULL) BN_MONT_CTX_free(mont);
+       return(ok?ret:NULL);
        }
 #endif
Index: opensa/openssl/crypto/dsa/dsa_lib.c
diff -u opensa/openssl/crypto/dsa/dsa_lib.c:1.1 opensa/openssl/crypto/dsa/dsa_lib.c:1.2
--- opensa/openssl/crypto/dsa/dsa_lib.c:1.1     Tue Jan 25 23:30:03 2000
+++ opensa/openssl/crypto/dsa/dsa_lib.c Thu Mar  2 21:11:53 2000
@@ -66,7 +66,38 @@
 
 const char *DSA_version="DSA" OPENSSL_VERSION_PTEXT;
 
+static DSA_METHOD *default_DSA_method;
+static int dsa_meth_num = 0;
+static STACK_OF(CRYPTO_EX_DATA_FUNCS) *dsa_meth = NULL;
+
+void DSA_set_default_method(DSA_METHOD *meth)
+{
+       default_DSA_method = meth;
+}
+
+DSA_METHOD *DSA_get_default_method(void)
+{
+       if(!default_DSA_method) default_DSA_method = DSA_OpenSSL();
+       return default_DSA_method;
+}
+
 DSA *DSA_new(void)
+{
+       return DSA_new_method(NULL);
+}
+
+DSA_METHOD *DSA_set_method(DSA *dsa, DSA_METHOD *meth)
+{
+        DSA_METHOD *mtmp;
+        mtmp = dsa->meth;
+        if (mtmp->finish) mtmp->finish(dsa);
+        dsa->meth = meth;
+        if (meth->init) meth->init(dsa);
+        return mtmp;
+}
+
+
+DSA *DSA_new_method(DSA_METHOD *meth)
        {
        DSA *ret;
 
@@ -76,13 +107,15 @@
                DSAerr(DSA_F_DSA_NEW,ERR_R_MALLOC_FAILURE);
                return(NULL);
                }
+       if(!default_DSA_method) default_DSA_method = DSA_OpenSSL();
+       if(meth) ret->meth = meth;
+       else ret->meth = default_DSA_method;
        ret->pad=0;
        ret->version=0;
        ret->write_params=1;
        ret->p=NULL;
        ret->q=NULL;
        ret->g=NULL;
-       ret->flags=DSA_FLAG_CACHE_MONT_P;
 
        ret->pub_key=NULL;
        ret->priv_key=NULL;
@@ -92,6 +125,15 @@
        ret->method_mont_p=NULL;
 
        ret->references=1;
+       ret->flags=ret->meth->flags;
+       if ((ret->meth->init != NULL) && !ret->meth->init(ret))
+               {
+               Free(ret);
+               ret=NULL;
+               }
+       else
+               CRYPTO_new_ex_data(dsa_meth,ret,&ret->ex_data);
+       
        return(ret);
        }
 
@@ -114,6 +156,10 @@
                }
 #endif
 
+       CRYPTO_free_ex_data(dsa_meth, r, &r->ex_data);
+
+       if(r->meth->finish) r->meth->finish(r);
+
        if (r->p != NULL) BN_clear_free(r->p);
        if (r->q != NULL) BN_clear_free(r->q);
        if (r->g != NULL) BN_clear_free(r->g);
@@ -121,8 +167,6 @@
        if (r->priv_key != NULL) BN_clear_free(r->priv_key);
        if (r->kinv != NULL) BN_clear_free(r->kinv);
        if (r->r != NULL) BN_clear_free(r->r);
-       if (r->method_mont_p != NULL)
-               BN_MONT_CTX_free((BN_MONT_CTX *)r->method_mont_p);
        Free(r);
        }
 
@@ -143,6 +187,24 @@
        i+=i; /* r and s */
        ret=ASN1_object_size(1,i,V_ASN1_SEQUENCE);
        return(ret);
+       }
+
+int DSA_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
+            CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func)
+        {
+       dsa_meth_num++;
+       return(CRYPTO_get_ex_new_index(dsa_meth_num-1,
+               &dsa_meth,argl,argp,new_func,dup_func,free_func));
+        }
+
+int DSA_set_ex_data(DSA *d, int idx, void *arg)
+       {
+       return(CRYPTO_set_ex_data(&d->ex_data,idx,arg));
+       }
+
+void *DSA_get_ex_data(DSA *d, int idx)
+       {
+       return(CRYPTO_get_ex_data(&d->ex_data,idx));
        }
 
 #ifndef NO_DH
Index: opensa/openssl/crypto/dsa/dsa_sign.c
diff -u opensa/openssl/crypto/dsa/dsa_sign.c:1.1 
opensa/openssl/crypto/dsa/dsa_sign.c:1.2
--- opensa/openssl/crypto/dsa/dsa_sign.c:1.1    Tue Jan 25 23:30:04 2000
+++ opensa/openssl/crypto/dsa/dsa_sign.c        Thu Mar  2 21:11:53 2000
@@ -67,73 +67,9 @@
 
 DSA_SIG * DSA_do_sign(const unsigned char *dgst, int dlen, DSA *dsa)
        {
-       BIGNUM *kinv=NULL,*r=NULL,*s=NULL;
-       BIGNUM m;
-       BIGNUM xr;
-       BN_CTX *ctx=NULL;
-       int i,reason=ERR_R_BN_LIB;
-       DSA_SIG *ret=NULL;
-
-       BN_init(&m);
-       BN_init(&xr);
-       s=BN_new();
-       if (s == NULL) goto err;
-
-       i=BN_num_bytes(dsa->q); /* should be 20 */
-       if ((dlen > i) || (dlen > 50))
-               {
-               reason=DSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE;
-               goto err;
-               }
-
-       ctx=BN_CTX_new();
-       if (ctx == NULL) goto err;
-
-       if ((dsa->kinv == NULL) || (dsa->r == NULL))
-               {
-               if (!DSA_sign_setup(dsa,ctx,&kinv,&r)) goto err;
-               }
-       else
-               {
-               kinv=dsa->kinv;
-               dsa->kinv=NULL;
-               r=dsa->r;
-               dsa->r=NULL;
-               }
-
-       if (BN_bin2bn(dgst,dlen,&m) == NULL) goto err;
-
-       /* Compute  s = inv(k) (m + xr) mod q */
-       if (!BN_mod_mul(&xr,dsa->priv_key,r,dsa->q,ctx)) goto err;/* s = xr */
-       if (!BN_add(s, &xr, &m)) goto err;              /* s = m + xr */
-       if (BN_cmp(s,dsa->q) > 0)
-               BN_sub(s,s,dsa->q);
-       if (!BN_mod_mul(s,s,kinv,dsa->q,ctx)) goto err;
-
-       ret=DSA_SIG_new();
-       if (ret == NULL) goto err;
-       ret->r = r;
-       ret->s = s;
-       
-err:
-       if (!ret)
-               {
-               DSAerr(DSA_F_DSA_DO_SIGN,reason);
-               BN_free(r);
-               BN_free(s);
-               }
-       if (ctx != NULL) BN_CTX_free(ctx);
-       BN_clear_free(&m);
-       BN_clear_free(&xr);
-       if (kinv != NULL) /* dsa->kinv is NULL now if we used it */
-           BN_clear_free(kinv);
-       return(ret);
+       return dsa->meth->dsa_do_sign(dgst, dlen, dsa);
        }
 
-/* data has already been hashed (probably with SHA or SHA-1). */
-
-/* unsigned char *sig:  out    */
-/* unsigned int *siglen:  out    */
 int DSA_sign(int type, const unsigned char *dgst, int dlen, unsigned char *sig,
             unsigned int *siglen, DSA *dsa)
        {
@@ -151,61 +87,6 @@
 
 int DSA_sign_setup(DSA *dsa, BN_CTX *ctx_in, BIGNUM **kinvp, BIGNUM **rp)
        {
-       BN_CTX *ctx;
-       BIGNUM k,*kinv=NULL,*r=NULL;
-       int ret=0;
-
-       if (ctx_in == NULL)
-               {
-               if ((ctx=BN_CTX_new()) == NULL) goto err;
-               }
-       else
-               ctx=ctx_in;
-
-       BN_init(&k);
-       if ((r=BN_new()) == NULL) goto err;
-       kinv=NULL;
-
-       /* Get random k */
-       for (;;)
-               {
-               if (!BN_rand(&k, BN_num_bits(dsa->q), 1, 0)) goto err;
-               if (BN_cmp(&k,dsa->q) >= 0)
-                       BN_sub(&k,&k,dsa->q);
-               if (!BN_is_zero(&k)) break;
-               }
-
-       if ((dsa->method_mont_p == NULL) && (dsa->flags & DSA_FLAG_CACHE_MONT_P))
-               {
-               if ((dsa->method_mont_p=(char *)BN_MONT_CTX_new()) != NULL)
-                       if (!BN_MONT_CTX_set((BN_MONT_CTX *)dsa->method_mont_p,
-                               dsa->p,ctx)) goto err;
-               }
-
-       /* Compute r = (g^k mod p) mod q */
-       if (!BN_mod_exp_mont(r,dsa->g,&k,dsa->p,ctx,
-               (BN_MONT_CTX *)dsa->method_mont_p)) goto err;
-       if (!BN_mod(r,r,dsa->q,ctx)) goto err;
-
-       /* Compute  part of 's = inv(k) (m + xr) mod q' */
-       if ((kinv=BN_mod_inverse(NULL,&k,dsa->q,ctx)) == NULL) goto err;
-
-       if (*kinvp != NULL) BN_clear_free(*kinvp);
-       *kinvp=kinv;
-       kinv=NULL;
-       if (*rp != NULL) BN_clear_free(*rp);
-       *rp=r;
-       ret=1;
-err:
-       if (!ret)
-               {
-               DSAerr(DSA_F_DSA_SIGN_SETUP,ERR_R_BN_LIB);
-               if (kinv != NULL) BN_clear_free(kinv);
-               if (r != NULL) BN_clear_free(r);
-               }
-       if (ctx_in == NULL) BN_CTX_free(ctx);
-       if (kinv != NULL) BN_clear_free(kinv);
-       BN_clear_free(&k);
-       return(ret);
+       return dsa->meth->dsa_sign_setup(dsa, ctx_in, kinvp, rp);
        }
 
Index: opensa/openssl/crypto/dsa/dsa_vrf.c
diff -u opensa/openssl/crypto/dsa/dsa_vrf.c:1.1 opensa/openssl/crypto/dsa/dsa_vrf.c:1.2
--- opensa/openssl/crypto/dsa/dsa_vrf.c:1.1     Tue Jan 25 23:30:04 2000
+++ opensa/openssl/crypto/dsa/dsa_vrf.c Thu Mar  2 21:11:54 2000
@@ -69,73 +69,7 @@
 int DSA_do_verify(const unsigned char *dgst, int dgst_len, DSA_SIG *sig,
                  DSA *dsa)
        {
-       BN_CTX *ctx;
-       BIGNUM u1,u2,t1;
-       BN_MONT_CTX *mont=NULL;
-       int ret = -1;
-
-       if ((ctx=BN_CTX_new()) == NULL) goto err;
-       BN_init(&u1);
-       BN_init(&u2);
-       BN_init(&t1);
-
-       /* Calculate W = inv(S) mod Q
-        * save W in u2 */
-       if ((BN_mod_inverse(&u2,sig->s,dsa->q,ctx)) == NULL) goto err;
-
-       /* save M in u1 */
-       if (BN_bin2bn(dgst,dgst_len,&u1) == NULL) goto err;
-
-       /* u1 = M * w mod q */
-       if (!BN_mod_mul(&u1,&u1,&u2,dsa->q,ctx)) goto err;
-
-       /* u2 = r * w mod q */
-       if (!BN_mod_mul(&u2,sig->r,&u2,dsa->q,ctx)) goto err;
-
-       if ((dsa->method_mont_p == NULL) && (dsa->flags & DSA_FLAG_CACHE_MONT_P))
-               {
-               if ((dsa->method_mont_p=(char *)BN_MONT_CTX_new()) != NULL)
-                       if (!BN_MONT_CTX_set((BN_MONT_CTX *)dsa->method_mont_p,
-                               dsa->p,ctx)) goto err;
-               }
-       mont=(BN_MONT_CTX *)dsa->method_mont_p;
-
-#if 0
-       {
-       BIGNUM t2;
-
-       BN_init(&t2);
-       /* v = ( g^u1 * y^u2 mod p ) mod q */
-       /* let t1 = g ^ u1 mod p */
-       if (!BN_mod_exp_mont(&t1,dsa->g,&u1,dsa->p,ctx,mont)) goto err;
-       /* let t2 = y ^ u2 mod p */
-       if (!BN_mod_exp_mont(&t2,dsa->pub_key,&u2,dsa->p,ctx,mont)) goto err;
-       /* let u1 = t1 * t2 mod p */
-       if (!BN_mod_mul(&u1,&t1,&t2,dsa->p,ctx)) goto err_bn;
-       BN_free(&t2);
-       }
-       /* let u1 = u1 mod q */
-       if (!BN_mod(&u1,&u1,dsa->q,ctx)) goto err;
-#else
-       {
-       if (!BN_mod_exp2_mont(&t1,dsa->g,&u1,dsa->pub_key,&u2,dsa->p,ctx,mont))
-               goto err;
-       /* BN_copy(&u1,&t1); */
-       /* let u1 = u1 mod q */
-       if (!BN_mod(&u1,&t1,dsa->q,ctx)) goto err;
-       }
-#endif
-       /* V is now in u1.  If the signature is correct, it will be
-        * equal to R. */
-       ret=(BN_ucmp(&u1, sig->r) == 0);
-
-       err:
-       if (ret != 1) DSAerr(DSA_F_DSA_DO_VERIFY,ERR_R_BN_LIB);
-       if (ctx != NULL) BN_CTX_free(ctx);
-       BN_free(&u1);
-       BN_free(&u2);
-       BN_free(&t1);
-       return(ret);
+       return dsa->meth->dsa_do_verify(dgst, dgst_len, sig, dsa);
        }
 
 /* data has already been hashed (probably with SHA or SHA-1). */
Index: opensa/openssl/crypto/dsa/dsatest.c
diff -u opensa/openssl/crypto/dsa/dsatest.c:1.1 opensa/openssl/crypto/dsa/dsatest.c:1.2
--- opensa/openssl/crypto/dsa/dsatest.c:1.1     Tue Jan 25 23:30:04 2000
+++ opensa/openssl/crypto/dsa/dsatest.c Thu Mar  2 21:11:54 2000
@@ -84,7 +84,10 @@
 #define MS_CALLBACK
 #endif
 
-static void MS_CALLBACK dsa_cb(int p, int n, char *arg);
+static void MS_CALLBACK dsa_cb(int p, int n, void *arg);
+
+/* seed, out_p, out_q, out_g are taken from the updated Appendix 5 to
+ * FIPS PUB 186 and also appear in Appendix 5 to FIPS PIB 186-1 */
 static unsigned char seed[20]={
        0xd5,0x01,0x4e,0x4b,0x60,0xef,0x2b,0xa8,0xb6,0x21,0x1b,0x40,
        0x62,0xba,0x32,0x24,0xe0,0x42,0x7d,0xd3,
@@ -120,6 +123,8 @@
 
 static const unsigned char str1[]="12345678901234567890";
 
+static const char rnd_seed[] = "string to make the random number generator think it 
+has entropy";
+
 static BIO *bio_err=NULL;
 
 int main(int argc, char **argv)
@@ -131,16 +136,18 @@
        unsigned char sig[256];
        unsigned int siglen;
 
+       ERR_load_crypto_strings();
+       RAND_seed(rnd_seed, sizeof rnd_seed);
+
        if (bio_err == NULL)
                bio_err=BIO_new_fp(stderr,BIO_NOCLOSE);
 
        CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON);
 
        BIO_printf(bio_err,"test generation of DSA parameters\n");
-       BIO_printf(bio_err,"expect '.*' followed by 5 lines of '.'s and '+'s\n");
-       dsa=DSA_generate_parameters(512,seed,20,&counter,&h,dsa_cb,
-               (char *)bio_err);
 
+       dsa=DSA_generate_parameters(512,seed,20,&counter,&h,dsa_cb,bio_err);
+
        BIO_printf(bio_err,"seed\n");
        for (i=0; i<20; i+=4)
                {
@@ -193,13 +200,18 @@
        if (!ret)
                ERR_print_errors(bio_err);
        if (dsa != NULL) DSA_free(dsa);
+       ERR_remove_state(0);
        CRYPTO_mem_leaks(bio_err);
-       if (bio_err != NULL) BIO_free(bio_err);
+       if (bio_err != NULL)
+               {
+               BIO_free(bio_err);
+               bio_err = NULL;
+               }
        exit(!ret);
        return(0);
        }
 
-static void MS_CALLBACK dsa_cb(int p, int n, char *arg)
+static void MS_CALLBACK dsa_cb(int p, int n, void *arg)
        {
        char c='*';
        static int ok=0,num=0;
@@ -208,8 +220,8 @@
        if (p == 1) c='+';
        if (p == 2) { c='*'; ok++; }
        if (p == 3) c='\n';
-       BIO_write((BIO *)arg,&c,1);
-       (void)BIO_flush((BIO *)arg);
+       BIO_write(arg,&c,1);
+       (void)BIO_flush(arg);
 
        if (!ok && (p == 0) && (num > 1))
                {
Index: opensa/openssl/crypto/dsa/makefile.ssl
diff -u opensa/openssl/crypto/dsa/makefile.ssl:1.1 
opensa/openssl/crypto/dsa/makefile.ssl:1.2
--- opensa/openssl/crypto/dsa/makefile.ssl:1.1  Tue Jan 25 23:30:04 2000
+++ opensa/openssl/crypto/dsa/makefile.ssl      Thu Mar  2 21:11:54 2000
@@ -22,8 +22,10 @@
 APPS=
 
 LIB=$(TOP)/libcrypto.a
-LIBSRC= dsa_gen.c dsa_key.c dsa_lib.c dsa_asn1.c dsa_vrf.c dsa_sign.c dsa_err.c
-LIBOBJ= dsa_gen.o dsa_key.o dsa_lib.o dsa_asn1.o dsa_vrf.o dsa_sign.o dsa_err.o
+LIBSRC= dsa_gen.c dsa_key.c dsa_lib.c dsa_asn1.c dsa_vrf.c dsa_sign.c \
+       dsa_err.c dsa_ossl.c
+LIBOBJ= dsa_gen.o dsa_key.o dsa_lib.o dsa_asn1.o dsa_vrf.o dsa_sign.o \
+       dsa_err.o dsa_ossl.o
 
 SRC= $(LIBSRC)
 
@@ -86,25 +88,27 @@
 dsa_asn1.o: ../../include/openssl/err.h ../../include/openssl/opensslconf.h
 dsa_asn1.o: ../../include/openssl/opensslv.h ../../include/openssl/safestack.h
 dsa_asn1.o: ../../include/openssl/stack.h ../cryptlib.h
-dsa_err.o: ../../include/openssl/bn.h ../../include/openssl/dh.h
-dsa_err.o: ../../include/openssl/dsa.h ../../include/openssl/err.h
-dsa_err.o: ../../include/openssl/opensslconf.h
+dsa_err.o: ../../include/openssl/bn.h ../../include/openssl/crypto.h
+dsa_err.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h
+dsa_err.o: ../../include/openssl/err.h ../../include/openssl/opensslconf.h
+dsa_err.o: ../../include/openssl/opensslv.h ../../include/openssl/safestack.h
+dsa_err.o: ../../include/openssl/stack.h
 dsa_gen.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
 dsa_gen.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 dsa_gen.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h
 dsa_gen.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h
 dsa_gen.o: ../../include/openssl/err.h ../../include/openssl/opensslconf.h
 dsa_gen.o: ../../include/openssl/opensslv.h ../../include/openssl/rand.h
-dsa_gen.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
-dsa_gen.o: ../cryptlib.h
+dsa_gen.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
+dsa_gen.o: ../../include/openssl/stack.h ../cryptlib.h
 dsa_key.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
 dsa_key.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 dsa_key.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h
 dsa_key.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h
 dsa_key.o: ../../include/openssl/err.h ../../include/openssl/opensslconf.h
 dsa_key.o: ../../include/openssl/opensslv.h ../../include/openssl/rand.h
-dsa_key.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
-dsa_key.o: ../cryptlib.h
+dsa_key.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
+dsa_key.o: ../../include/openssl/stack.h ../cryptlib.h
 dsa_lib.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
 dsa_lib.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
 dsa_lib.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h
@@ -113,6 +117,15 @@
 dsa_lib.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
 dsa_lib.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
 dsa_lib.o: ../cryptlib.h
+dsa_ossl.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
+dsa_ossl.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
+dsa_ossl.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h
+dsa_ossl.o: ../../include/openssl/dsa.h ../../include/openssl/e_os.h
+dsa_ossl.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
+dsa_ossl.o: ../../include/openssl/opensslconf.h
+dsa_ossl.o: ../../include/openssl/opensslv.h ../../include/openssl/rand.h
+dsa_ossl.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
+dsa_ossl.o: ../cryptlib.h
 dsa_sign.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
 dsa_sign.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
 dsa_sign.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h
Index: opensa/openssl/crypto/err/err.c
diff -u opensa/openssl/crypto/err/err.c:1.1 opensa/openssl/crypto/err/err.c:1.2
--- opensa/openssl/crypto/err/err.c:1.1 Tue Jan 25 23:29:47 2000
+++ opensa/openssl/crypto/err/err.c     Thu Mar  2 21:11:54 2000
@@ -91,7 +91,7 @@
 {ERR_PACK(ERR_LIB_PEM,0,0)             ,"PEM routines"},
 {ERR_PACK(ERR_LIB_ASN1,0,0)            ,"asn1 encoding routines"},
 {ERR_PACK(ERR_LIB_X509,0,0)            ,"x509 certificate routines"},
-{ERR_PACK(ERR_LIB_CONF,0,0)            ,"configuation file routines"},
+{ERR_PACK(ERR_LIB_CONF,0,0)            ,"configuration file routines"},
 {ERR_PACK(ERR_LIB_METH,0,0)            ,"X509 lookup 'method' routines"},
 {ERR_PACK(ERR_LIB_SSL,0,0)             ,"SSL routines"},
 {ERR_PACK(ERR_LIB_RSAREF,0,0)          ,"RSAref routines"},
@@ -100,6 +100,7 @@
 {ERR_PACK(ERR_LIB_PKCS7,0,0)           ,"PKCS7 routines"},
 {ERR_PACK(ERR_LIB_X509V3,0,0)          ,"X509 V3 routines"},
 {ERR_PACK(ERR_LIB_PKCS12,0,0)          ,"PKCS12 routines"},
+{ERR_PACK(ERR_LIB_RAND,0,0)            ,"random number generator"},
 {0,NULL},
        };
 
@@ -221,7 +222,7 @@
        while (str->error)
                {
                str->error|=ERR_PACK(lib,0,0);
-               lh_insert(error_hash,(char *)str);
+               lh_insert(error_hash,str);
                str++;
                }
        CRYPTO_w_unlock(CRYPTO_LOCK_ERR_HASH);
@@ -427,7 +428,7 @@
        if (error_hash != NULL)
                {
                d.error=ERR_PACK(l,0,0);
-               p=(ERR_STRING_DATA *)lh_retrieve(error_hash,(char *)&d);
+               p=(ERR_STRING_DATA *)lh_retrieve(error_hash,&d);
                }
 
        CRYPTO_r_unlock(CRYPTO_LOCK_ERR_HASH);
@@ -448,7 +449,7 @@
        if (error_hash != NULL)
                {
                d.error=ERR_PACK(l,f,0);
-               p=(ERR_STRING_DATA *)lh_retrieve(error_hash,(char *)&d);
+               p=(ERR_STRING_DATA *)lh_retrieve(error_hash,&d);
                }
 
        CRYPTO_r_unlock(CRYPTO_LOCK_ERR_HASH);
@@ -469,12 +470,11 @@
        if (error_hash != NULL)
                {
                d.error=ERR_PACK(l,0,r);
-               p=(ERR_STRING_DATA *)lh_retrieve(error_hash,(char *)&d);
+               p=(ERR_STRING_DATA *)lh_retrieve(error_hash,&d);
                if (p == NULL)
                        {
                        d.error=ERR_PACK(0,0,r);
-                       p=(ERR_STRING_DATA *)lh_retrieve(error_hash,
-                               (char *)&d);
+                       p=(ERR_STRING_DATA *)lh_retrieve(error_hash,&d);
                        }
                }
 
@@ -517,7 +517,7 @@
                pid=(unsigned long)CRYPTO_thread_id();
        tmp.pid=pid;
        CRYPTO_w_lock(CRYPTO_LOCK_ERR);
-       p=(ERR_STATE *)lh_delete(thread_hash,(char *)&tmp);
+       p=(ERR_STATE *)lh_delete(thread_hash,&tmp);
        CRYPTO_w_unlock(CRYPTO_LOCK_ERR);
 
        if (p != NULL) ERR_STATE_free(p);
@@ -551,7 +551,7 @@
        else
                {
                tmp.pid=pid;
-               ret=(ERR_STATE *)lh_retrieve(thread_hash,(char *)&tmp);
+               ret=(ERR_STATE *)lh_retrieve(thread_hash,&tmp);
                CRYPTO_r_unlock(CRYPTO_LOCK_ERR);
                }
 
@@ -569,7 +569,7 @@
                        ret->err_data_flags[i]=0;
                        }
                CRYPTO_w_lock(CRYPTO_LOCK_ERR);
-               tmpp=(ERR_STATE *)lh_insert(thread_hash,(char *)ret);
+               tmpp=(ERR_STATE *)lh_insert(thread_hash,ret);
                CRYPTO_w_unlock(CRYPTO_LOCK_ERR);
                if (tmpp != NULL) /* old entry - should not happen */
                        {
Index: opensa/openssl/crypto/err/err.h
diff -u opensa/openssl/crypto/err/err.h:1.1 opensa/openssl/crypto/err/err.h:1.2
--- opensa/openssl/crypto/err/err.h:1.1 Tue Jan 25 23:29:47 2000
+++ opensa/openssl/crypto/err/err.h     Thu Mar  2 21:11:54 2000
@@ -122,6 +122,7 @@
 #define ERR_LIB_PKCS7          33
 #define ERR_LIB_X509V3         34
 #define ERR_LIB_PKCS12         35
+#define ERR_LIB_RAND           36
 
 #define ERR_LIB_USER           128
 
@@ -149,6 +150,7 @@
 #define PKCS7err(f,r) ERR_PUT_error(ERR_LIB_PKCS7,(f),(r),ERR_file_name,__LINE__)
 #define X509V3err(f,r) ERR_PUT_error(ERR_LIB_X509V3,(f),(r),ERR_file_name,__LINE__)
 #define PKCS12err(f,r) ERR_PUT_error(ERR_LIB_PKCS12,(f),(r),ERR_file_name,__LINE__)
+#define RANDerr(f,r) ERR_PUT_error(ERR_LIB_RAND,(f),(r),ERR_file_name,__LINE__)
 
 /* Borland C seems too stupid to be able to shift and do longs in
  * the pre-processor :-( */
@@ -160,7 +162,7 @@
 #define ERR_GET_REASON(l)      (int)((l)&0xfffL)
 #define ERR_FATAL_ERROR(l)     (int)((l)&ERR_R_FATAL)
 
-/* OS fuctions */
+/* OS functions */
 #define SYS_F_FOPEN            1
 #define SYS_F_CONNECT          2
 #define SYS_F_GETSERVBYNAME    3
@@ -239,9 +241,9 @@
 void ERR_add_error_data(int num, ...);
 #endif
 void ERR_load_strings(int lib,ERR_STRING_DATA str[]);
-void ERR_load_ERR_strings(void );
-void ERR_load_crypto_strings(void );
-void ERR_free_strings(void );
+void ERR_load_ERR_strings(void);
+void ERR_load_crypto_strings(void);
+void ERR_free_strings(void);
 
 void ERR_remove_state(unsigned long pid); /* if zero we look it up */
 ERR_STATE *ERR_get_state(void);
Index: opensa/openssl/crypto/err/err_all.c
diff -u opensa/openssl/crypto/err/err_all.c:1.1 opensa/openssl/crypto/err/err_all.c:1.2
--- opensa/openssl/crypto/err/err_all.c:1.1     Tue Jan 25 23:29:47 2000
+++ opensa/openssl/crypto/err/err_all.c Thu Mar  2 21:11:54 2000
@@ -80,6 +80,7 @@
 #include <openssl/x509v3.h>
 #include <openssl/conf.h>
 #include <openssl/pkcs12.h>
+#include <openssl/rand.h>
 #include <openssl/err.h>
 
 void ERR_load_crypto_strings(void)
@@ -116,5 +117,6 @@
        ERR_load_CRYPTO_strings();
        ERR_load_PKCS7_strings();
        ERR_load_PKCS12_strings();
+       ERR_load_RAND_strings();
 #endif
        }
Index: opensa/openssl/crypto/err/makefile.ssl
diff -u opensa/openssl/crypto/err/makefile.ssl:1.1 
opensa/openssl/crypto/err/makefile.ssl:1.2
--- opensa/openssl/crypto/err/makefile.ssl:1.1  Tue Jan 25 23:29:47 2000
+++ opensa/openssl/crypto/err/makefile.ssl      Thu Mar  2 21:11:54 2000
@@ -82,8 +82,8 @@
 err.o: ../../include/openssl/crypto.h ../../include/openssl/e_os.h
 err.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
 err.o: ../../include/openssl/lhash.h ../../include/openssl/opensslconf.h
-err.o: ../../include/openssl/opensslv.h ../../include/openssl/stack.h
-err.o: ../cryptlib.h
+err.o: ../../include/openssl/opensslv.h ../../include/openssl/safestack.h
+err.o: ../../include/openssl/stack.h ../cryptlib.h
 err_all.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
 err_all.o: ../../include/openssl/blowfish.h ../../include/openssl/bn.h
 err_all.o: ../../include/openssl/buffer.h ../../include/openssl/cast.h
@@ -96,15 +96,16 @@
 err_all.o: ../../include/openssl/mdc2.h ../../include/openssl/objects.h
 err_all.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
 err_all.o: ../../include/openssl/pem2.h ../../include/openssl/pkcs12.h
-err_all.o: ../../include/openssl/pkcs7.h ../../include/openssl/rc2.h
-err_all.o: ../../include/openssl/rc4.h ../../include/openssl/rc5.h
-err_all.o: ../../include/openssl/ripemd.h ../../include/openssl/rsa.h
-err_all.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
-err_all.o: ../../include/openssl/stack.h ../../include/openssl/x509.h
-err_all.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h
+err_all.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h
+err_all.o: ../../include/openssl/rc2.h ../../include/openssl/rc4.h
+err_all.o: ../../include/openssl/rc5.h ../../include/openssl/ripemd.h
+err_all.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
+err_all.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
+err_all.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
+err_all.o: ../../include/openssl/x509v3.h
 err_prn.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
 err_prn.o: ../../include/openssl/crypto.h ../../include/openssl/e_os.h
 err_prn.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
 err_prn.o: ../../include/openssl/lhash.h ../../include/openssl/opensslconf.h
-err_prn.o: ../../include/openssl/opensslv.h ../../include/openssl/stack.h
-err_prn.o: ../cryptlib.h
+err_prn.o: ../../include/openssl/opensslv.h ../../include/openssl/safestack.h
+err_prn.o: ../../include/openssl/stack.h ../cryptlib.h
Index: opensa/openssl/crypto/err/openssl.ec
diff -u opensa/openssl/crypto/err/openssl.ec:1.1 
opensa/openssl/crypto/err/openssl.ec:1.2
--- opensa/openssl/crypto/err/openssl.ec:1.1    Tue Jan 25 23:29:47 2000
+++ opensa/openssl/crypto/err/openssl.ec        Thu Mar  2 21:11:54 2000
@@ -21,6 +21,7 @@
 L RSAREF       rsaref/rsaref.h                 rsaref/rsar_err.c
 L SSL          ssl/ssl.h                       ssl/ssl_err.c
 L COMP         crypto/comp/comp.h              crypto/comp/comp_err.c
+L RAND         crypto/rand/rand.h              crypto/rand/rand_err.c
 
 
 F RSAREF_F_RSA_BN2BIN
@@ -47,11 +48,11 @@
 R SSL_R_TLSV1_ALERT_ACCESS_DENIED              1049
 R SSL_R_TLSV1_ALERT_DECODE_ERROR               1050
 R SSL_R_TLSV1_ALERT_DECRYPT_ERROR              1051
-R SSL_R_TLSV1_ALERT_EXPORT_RESTRICION          1060
+R SSL_R_TLSV1_ALERT_EXPORT_RESTRICTION         1060
 R SSL_R_TLSV1_ALERT_PROTOCOL_VERSION           1070
 R SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY      1071
 R SSL_R_TLSV1_ALERT_INTERNAL_ERROR             1080
-R SSL_R_TLSV1_ALERT_USER_CANCLED               1090
+R SSL_R_TLSV1_ALERT_USER_CANCELLED             1090
 R SSL_R_TLSV1_ALERT_NO_RENEGOTIATION           1100
 
 R RSAREF_R_CONTENT_ENCODING                    0x0400
Index: opensa/openssl/crypto/evp/bio_b64.c
diff -u opensa/openssl/crypto/evp/bio_b64.c:1.1 opensa/openssl/crypto/evp/bio_b64.c:1.2
--- opensa/openssl/crypto/evp/bio_b64.c:1.1     Tue Jan 25 23:29:27 2000
+++ opensa/openssl/crypto/evp/bio_b64.c Thu Mar  2 21:11:54 2000
@@ -69,6 +69,7 @@
 static long b64_ctrl(BIO *h,int cmd,long arg1,char *arg2);
 static int b64_new(BIO *h);
 static int b64_free(BIO *data);
+static long b64_callback_ctrl(BIO *h,int cmd,void (*fp)());
 #define B64_BLOCK_SIZE 1024
 #define B64_BLOCK_SIZE2        768
 #define B64_NONE       0
@@ -100,6 +101,7 @@
        b64_ctrl,
        b64_new,
        b64_free,
+       b64_callback_ctrl,
        };
 
 BIO_METHOD *BIO_f_base64(void)
@@ -237,8 +239,8 @@
                                                        &(ctx->tmp[0]));
                                                for (x=0; x < i; x++)
                                                        ctx->tmp[x]=p[x];
-                                               EVP_DecodeInit(&ctx->base64);
                                                }
+                                       EVP_DecodeInit(&ctx->base64);
                                        ctx->start=0;
                                        break;
                                        }
@@ -517,6 +519,20 @@
        case BIO_CTRL_SET:
        default:
                ret=BIO_ctrl(b->next_bio,cmd,num,ptr);
+               break;
+               }
+       return(ret);
+       }
+
+static long b64_callback_ctrl(BIO *b, int cmd, void (*fp)())
+       {
+       long ret=1;
+
+       if (b->next_bio == NULL) return(0);
+       switch (cmd)
+               {
+       default:
+               ret=BIO_callback_ctrl(b->next_bio,cmd,fp);
                break;
                }
        return(ret);
Index: opensa/openssl/crypto/evp/bio_enc.c
diff -u opensa/openssl/crypto/evp/bio_enc.c:1.1 opensa/openssl/crypto/evp/bio_enc.c:1.2
--- opensa/openssl/crypto/evp/bio_enc.c:1.1     Tue Jan 25 23:29:27 2000
+++ opensa/openssl/crypto/evp/bio_enc.c Thu Mar  2 21:11:54 2000
@@ -69,6 +69,7 @@
 static long enc_ctrl(BIO *h,int cmd,long arg1,char *arg2);
 static int enc_new(BIO *h);
 static int enc_free(BIO *data);
+static long enc_callback_ctrl(BIO *h,int cmd,void (*fp)());
 #define ENC_BLOCK_SIZE (1024*4)
 
 typedef struct enc_struct
@@ -92,6 +93,7 @@
        enc_ctrl,
        enc_new,
        enc_free,
+       enc_callback_ctrl,
        };
 
 BIO_METHOD *BIO_f_cipher(void)
@@ -184,9 +186,11 @@
                                ctx->ok=i;
                                ctx->buf_off=0;
                                }
-                       else
+                       else 
+                               {
                                ret=(ret == 0)?i:ret;
-                       break;
+                               break;
+                               }
                        }
                else
                        {
@@ -194,13 +198,19 @@
                                (unsigned char *)ctx->buf,&ctx->buf_len,
                                (unsigned char *)&(ctx->buf[8]),i);
                        ctx->cont=1;
+                       /* Note: it is possible for EVP_CipherUpdate to
+                        * decrypt zero bytes because this is or looks like
+                        * the final block: if this happens we should retry
+                        * and either read more data or decrypt the final
+                        * block
+                        */
+                       if(ctx->buf_len == 0) continue;
                        }
 
                if (ctx->buf_len <= outl)
                        i=ctx->buf_len;
                else
                        i=outl;
-
                if (i <= 0) break;
                memcpy(out,ctx->buf,i);
                ret+=i;
@@ -355,6 +365,20 @@
                break;
        default:
                ret=BIO_ctrl(b->next_bio,cmd,num,ptr);
+               break;
+               }
+       return(ret);
+       }
+
+static long enc_callback_ctrl(BIO *b, int cmd, void (*fp)())
+       {
+       long ret=1;
+
+       if (b->next_bio == NULL) return(0);
+       switch (cmd)
+               {
+       default:
+               ret=BIO_callback_ctrl(b->next_bio,cmd,fp);
                break;
                }
        return(ret);
Index: opensa/openssl/crypto/evp/bio_md.c
diff -u opensa/openssl/crypto/evp/bio_md.c:1.1 opensa/openssl/crypto/evp/bio_md.c:1.2
--- opensa/openssl/crypto/evp/bio_md.c:1.1      Tue Jan 25 23:29:27 2000
+++ opensa/openssl/crypto/evp/bio_md.c  Thu Mar  2 21:11:54 2000
@@ -72,6 +72,8 @@
 static long md_ctrl(BIO *h,int cmd,long arg1,char *arg2);
 static int md_new(BIO *h);
 static int md_free(BIO *data);
+static long md_callback_ctrl(BIO *h,int cmd,void (*fp)());
+
 static BIO_METHOD methods_md=
        {
        BIO_TYPE_MD,"message digest",
@@ -82,6 +84,7 @@
        md_ctrl,
        md_new,
        md_free,
+       md_callback_ctrl,
        };
 
 BIO_METHOD *BIO_f_md(void)
@@ -215,6 +218,20 @@
                break;
        default:
                ret=BIO_ctrl(b->next_bio,cmd,num,ptr);
+               break;
+               }
+       return(ret);
+       }
+
+static long md_callback_ctrl(BIO *b, int cmd, void (*fp)())
+       {
+       long ret=1;
+
+       if (b->next_bio == NULL) return(0);
+       switch (cmd)
+               {
+       default:
+               ret=BIO_callback_ctrl(b->next_bio,cmd,fp);
                break;
                }
        return(ret);
Index: opensa/openssl/crypto/evp/bio_ok.c
diff -u opensa/openssl/crypto/evp/bio_ok.c:1.1 opensa/openssl/crypto/evp/bio_ok.c:1.2
--- opensa/openssl/crypto/evp/bio_ok.c:1.1      Tue Jan 25 23:29:27 2000
+++ opensa/openssl/crypto/evp/bio_ok.c  Thu Mar  2 21:11:54 2000
@@ -67,7 +67,7 @@
        and everything was OK. BUT if user types wrong password 
        BIO_f_cipher outputs only garbage and my function crashes. Yes
        I can and I should fix my function, but BIO_f_cipher is 
-       easy way to add encryption support to many exisiting applications
+       easy way to add encryption support to many existing applications
        and it's hard to debug and fix them all. 
 
        So I wanted another BIO which would catch the incorrect passwords and
@@ -80,10 +80,10 @@
        1) you must somehow separate checksum from actual data. 
        2) you need lot's of memory when reading the file, because you 
        must read to the end of the file and verify the checksum before
-       leting the application to read the data. 
+       letting the application to read the data. 
        
        BIO_f_reliable tries to solve both problems, so that you can 
-       read and write arbitraly long streams using only fixed amount
+       read and write arbitrary long streams using only fixed amount
        of memory.
 
        BIO_f_reliable splits data stream into blocks. Each block is prefixed
@@ -91,7 +91,7 @@
        several Kbytes of memory to buffer single block before verifying 
        it's digest. 
 
-       BIO_f_reliable goes futher and adds several important capabilities:
+       BIO_f_reliable goes further and adds several important capabilities:
 
        1) the digest of the block is computed over the whole stream 
        -- so nobody can rearrange the blocks or remove or replace them.
@@ -110,7 +110,7 @@
        and then compare the digest output.
 
        Bad things: BIO_f_reliable knows what's going on in EVP_Digest. I 
-       initialy wrote and tested this code on x86 machine and wrote the
+       initially wrote and tested this code on x86 machine and wrote the
        digests out in machine-dependent order :( There are people using
        this code and I cannot change this easily without making existing
        data files unreadable.
@@ -130,6 +130,8 @@
 static long ok_ctrl(BIO *h,int cmd,long arg1,char *arg2);
 static int ok_new(BIO *h);
 static int ok_free(BIO *data);
+static long ok_callback_ctrl(BIO *h,int cmd,void (*fp)());
+
 static void sig_out(BIO* b);
 static void sig_in(BIO* b);
 static void block_out(BIO* b);
@@ -173,6 +175,7 @@
        ok_ctrl,
        ok_new,
        ok_free,
+       ok_callback_ctrl,
        };
 
 BIO_METHOD *BIO_f_reliable(void)
@@ -428,6 +431,20 @@
        return(ret);
        }
 
+static long ok_callback_ctrl(BIO *b, int cmd, void (*fp)())
+       {
+       long ret=1;
+
+       if (b->next_bio == NULL) return(0);
+       switch (cmd)
+               {
+       default:
+               ret=BIO_callback_ctrl(b->next_bio,cmd,fp);
+               break;
+               }
+       return(ret);
+       }
+
 static void longswap(void *_ptr, int len)
 {
 #ifndef L_ENDIAN
@@ -451,12 +468,12 @@
        if(ctx->buf_len+ 2* md->digest->md_size > OK_BLOCK_SIZE) return;
 
        EVP_DigestInit(md, md->digest);
-       RAND_bytes(&(md->md.base[0]), md->digest->md_size);
+       RAND_pseudo_bytes(&(md->md.base[0]), md->digest->md_size);
        memcpy(&(ctx->buf[ctx->buf_len]), &(md->md.base[0]), md->digest->md_size);
        longswap(&(ctx->buf[ctx->buf_len]), md->digest->md_size);
        ctx->buf_len+= md->digest->md_size;
 
-       EVP_DigestUpdate(md, (unsigned char*)WELLKNOWN, strlen(WELLKNOWN));
+       EVP_DigestUpdate(md, WELLKNOWN, strlen(WELLKNOWN));
        md->digest->final(&(ctx->buf[ctx->buf_len]), &(md->md.base[0]));
        ctx->buf_len+= md->digest->md_size;
        ctx->blockout= 1;
@@ -480,7 +497,7 @@
        longswap(&(md->md.base[0]), md->digest->md_size);
        ctx->buf_off+= md->digest->md_size;
 
-       EVP_DigestUpdate(md, (unsigned char*)WELLKNOWN, strlen(WELLKNOWN));
+       EVP_DigestUpdate(md, WELLKNOWN, strlen(WELLKNOWN));
        md->digest->final(tmp, &(md->md.base[0]));
        ret= memcmp(&(ctx->buf[ctx->buf_off]), tmp, md->digest->md_size) == 0;
        ctx->buf_off+= md->digest->md_size;
Index: opensa/openssl/crypto/evp/c_all.c
diff -u opensa/openssl/crypto/evp/c_all.c:1.1 opensa/openssl/crypto/evp/c_all.c:1.2
--- opensa/openssl/crypto/evp/c_all.c:1.1       Tue Jan 25 23:29:27 2000
+++ opensa/openssl/crypto/evp/c_all.c   Thu Mar  2 21:11:54 2000
@@ -59,135 +59,9 @@
 #include <stdio.h>
 #include "cryptlib.h"
 #include <openssl/evp.h>
-#include <openssl/pkcs12.h>
-#include <openssl/objects.h>
 
-void SSLeay_add_all_algorithms(void)
-       {
-       SSLeay_add_all_ciphers();
-       SSLeay_add_all_digests();
-       }
-
-void SSLeay_add_all_ciphers(void)
-       {
-#ifndef NO_DES
-       EVP_add_cipher(EVP_des_cfb());
-       EVP_add_cipher(EVP_des_ede_cfb());
-       EVP_add_cipher(EVP_des_ede3_cfb());
-
-       EVP_add_cipher(EVP_des_ofb());
-       EVP_add_cipher(EVP_des_ede_ofb());
-       EVP_add_cipher(EVP_des_ede3_ofb());
-
-       EVP_add_cipher(EVP_desx_cbc());
-       EVP_add_cipher_alias(SN_desx_cbc,"DESX");
-       EVP_add_cipher_alias(SN_desx_cbc,"desx");
-
-       EVP_add_cipher(EVP_des_cbc());
-       EVP_add_cipher_alias(SN_des_cbc,"DES");
-       EVP_add_cipher_alias(SN_des_cbc,"des");
-       EVP_add_cipher(EVP_des_ede_cbc());
-       EVP_add_cipher(EVP_des_ede3_cbc());
-       EVP_add_cipher_alias(SN_des_ede3_cbc,"DES3");
-       EVP_add_cipher_alias(SN_des_ede3_cbc,"des3");
-
-       EVP_add_cipher(EVP_des_ecb());
-       EVP_add_cipher(EVP_des_ede());
-       EVP_add_cipher(EVP_des_ede3());
-#endif
-
-#ifndef NO_RC4
-       EVP_add_cipher(EVP_rc4());
-       EVP_add_cipher(EVP_rc4_40());
-#endif
-
-#ifndef NO_IDEA
-       EVP_add_cipher(EVP_idea_ecb());
-       EVP_add_cipher(EVP_idea_cfb());
-       EVP_add_cipher(EVP_idea_ofb());
-       EVP_add_cipher(EVP_idea_cbc());
-       EVP_add_cipher_alias(SN_idea_cbc,"IDEA");
-       EVP_add_cipher_alias(SN_idea_cbc,"idea");
-#endif
-
-#ifndef NO_RC2
-       EVP_add_cipher(EVP_rc2_ecb());
-       EVP_add_cipher(EVP_rc2_cfb());
-       EVP_add_cipher(EVP_rc2_ofb());
-       EVP_add_cipher(EVP_rc2_cbc());
-       EVP_add_cipher(EVP_rc2_40_cbc());
-       EVP_add_cipher(EVP_rc2_64_cbc());
-       EVP_add_cipher_alias(SN_rc2_cbc,"RC2");
-       EVP_add_cipher_alias(SN_rc2_cbc,"rc2");
-#endif
-
-#ifndef NO_BF
-       EVP_add_cipher(EVP_bf_ecb());
-       EVP_add_cipher(EVP_bf_cfb());
-       EVP_add_cipher(EVP_bf_ofb());
-       EVP_add_cipher(EVP_bf_cbc());
-       EVP_add_cipher_alias(SN_bf_cbc,"BF");
-       EVP_add_cipher_alias(SN_bf_cbc,"bf");
-       EVP_add_cipher_alias(SN_bf_cbc,"blowfish");
-#endif
-
-#ifndef NO_CAST
-       EVP_add_cipher(EVP_cast5_ecb());
-       EVP_add_cipher(EVP_cast5_cfb());
-       EVP_add_cipher(EVP_cast5_ofb());
-       EVP_add_cipher(EVP_cast5_cbc());
-       EVP_add_cipher_alias(SN_cast5_cbc,"CAST");
-       EVP_add_cipher_alias(SN_cast5_cbc,"cast");
-       EVP_add_cipher_alias(SN_cast5_cbc,"CAST-cbc");
-       EVP_add_cipher_alias(SN_cast5_cbc,"cast-cbc");
-#endif
-
-#ifndef NO_RC5
-       EVP_add_cipher(EVP_rc5_32_12_16_ecb());
-       EVP_add_cipher(EVP_rc5_32_12_16_cfb());
-       EVP_add_cipher(EVP_rc5_32_12_16_ofb());
-       EVP_add_cipher(EVP_rc5_32_12_16_cbc());
-       EVP_add_cipher_alias(SN_rc5_cbc,"rc5");
-       EVP_add_cipher_alias(SN_rc5_cbc,"RC5");
-#endif
-       }
-
-
-void SSLeay_add_all_digests(void)
-       {
-#ifndef NO_MD2
-       EVP_add_digest(EVP_md2());
-#endif
-#ifndef NO_MD5
-       EVP_add_digest(EVP_md5());
-       EVP_add_digest_alias(SN_md5,"ssl2-md5");
-       EVP_add_digest_alias(SN_md5,"ssl3-md5");
-#endif
-#ifndef NO_SHA
-       EVP_add_digest(EVP_sha());
-#ifndef NO_DSA
-       EVP_add_digest(EVP_dss());
-#endif
-#endif
-#ifndef NO_SHA
-       EVP_add_digest(EVP_sha1());
-       EVP_add_digest_alias(SN_sha1,"ssl3-sha1");
-       EVP_add_digest_alias(SN_sha1WithRSAEncryption,SN_sha1WithRSA);
-#ifndef NO_DSA
-       EVP_add_digest(EVP_dss1());
-       EVP_add_digest_alias(SN_dsaWithSHA1,SN_dsaWithSHA1_2);
-       EVP_add_digest_alias(SN_dsaWithSHA1,"DSS1");
-       EVP_add_digest_alias(SN_dsaWithSHA1,"dss1");
-#endif
-#endif
-#if !defined(NO_MDC2) && !defined(NO_DES)
-       EVP_add_digest(EVP_mdc2());
-#endif
-#ifndef NO_RIPEMD
-       EVP_add_digest(EVP_ripemd160());
-       EVP_add_digest_alias(SN_ripemd160,"ripemd");
-       EVP_add_digest_alias(SN_ripemd160,"rmd160");
-#endif
-       PKCS12_PBE_add();
-       PKCS5_PBE_add();
-       }
+void OpenSSL_add_all_algorithms(void)
+{
+       OpenSSL_add_all_ciphers();
+       OpenSSL_add_all_digests();
+}
Index: opensa/openssl/crypto/evp/e_cbc_3d.c
diff -u opensa/openssl/crypto/evp/e_cbc_3d.c:1.1 
opensa/openssl/crypto/evp/e_cbc_3d.c:1.2
--- opensa/openssl/crypto/evp/e_cbc_3d.c:1.1    Tue Jan 25 23:29:28 2000
+++ opensa/openssl/crypto/evp/e_cbc_3d.c        Thu Mar  2 21:11:54 2000
@@ -115,8 +115,8 @@
 
        if (deskey != NULL)
                {
-               des_set_key(&deskey[0],ctx->c.des_ede.ks1);
-               des_set_key(&deskey[1],ctx->c.des_ede.ks2);
+               des_set_key_unchecked(&deskey[0],ctx->c.des_ede.ks1);
+               des_set_key_unchecked(&deskey[1],ctx->c.des_ede.ks2);
                memcpy( (char *)ctx->c.des_ede.ks3,
                        (char *)ctx->c.des_ede.ks1,
                        sizeof(ctx->c.des_ede.ks1));
@@ -134,9 +134,9 @@
 
        if (deskey != NULL)
                {
-               des_set_key(&deskey[0],ctx->c.des_ede.ks1);
-               des_set_key(&deskey[1],ctx->c.des_ede.ks2);
-               des_set_key(&deskey[2],ctx->c.des_ede.ks3);
+               des_set_key_unchecked(&deskey[0],ctx->c.des_ede.ks1);
+               des_set_key_unchecked(&deskey[1],ctx->c.des_ede.ks2);
+               des_set_key_unchecked(&deskey[2],ctx->c.des_ede.ks3);
                }
        }
 
Index: opensa/openssl/crypto/evp/e_cbc_d.c
diff -u opensa/openssl/crypto/evp/e_cbc_d.c:1.1 opensa/openssl/crypto/evp/e_cbc_d.c:1.2
--- opensa/openssl/crypto/evp/e_cbc_d.c:1.1     Tue Jan 25 23:29:28 2000
+++ opensa/openssl/crypto/evp/e_cbc_d.c Thu Mar  2 21:11:54 2000
@@ -93,7 +93,7 @@
                memcpy(&(ctx->oiv[0]),iv,8);
        memcpy(&(ctx->iv[0]),&(ctx->oiv[0]),8);
        if (deskey != NULL)
-               des_set_key(deskey,ctx->c.des_ks);
+               des_set_key_unchecked(deskey,ctx->c.des_ks);
        }
 
 static void des_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
Index: opensa/openssl/crypto/evp/e_cfb_3d.c
diff -u opensa/openssl/crypto/evp/e_cfb_3d.c:1.1 
opensa/openssl/crypto/evp/e_cfb_3d.c:1.2
--- opensa/openssl/crypto/evp/e_cfb_3d.c:1.1    Tue Jan 25 23:29:28 2000
+++ opensa/openssl/crypto/evp/e_cfb_3d.c        Thu Mar  2 21:11:54 2000
@@ -116,8 +116,8 @@
        memcpy(&(ctx->iv[0]),&(ctx->oiv[0]),8);
        if (deskey != NULL)
                {
-               des_set_key(&deskey[0],ctx->c.des_ede.ks1);
-               des_set_key(&deskey[1],ctx->c.des_ede.ks2);
+               des_set_key_unchecked(&deskey[0],ctx->c.des_ede.ks1);
+               des_set_key_unchecked(&deskey[1],ctx->c.des_ede.ks2);
                memcpy( (char *)ctx->c.des_ede.ks3,
                        (char *)ctx->c.des_ede.ks1,
                        sizeof(ctx->c.des_ede.ks1));
@@ -136,9 +136,9 @@
        memcpy(&(ctx->iv[0]),&(ctx->oiv[0]),8);
        if (deskey != NULL)
                {
-               des_set_key(&deskey[0],ctx->c.des_ede.ks1);
-               des_set_key(&deskey[1],ctx->c.des_ede.ks2);
-               des_set_key(&deskey[2],ctx->c.des_ede.ks3);
+               des_set_key_unchecked(&deskey[0],ctx->c.des_ede.ks1);
+               des_set_key_unchecked(&deskey[1],ctx->c.des_ede.ks2);
+               des_set_key_unchecked(&deskey[2],ctx->c.des_ede.ks3);
                }
        }
 
Index: opensa/openssl/crypto/evp/e_cfb_d.c
diff -u opensa/openssl/crypto/evp/e_cfb_d.c:1.1 opensa/openssl/crypto/evp/e_cfb_d.c:1.2
--- opensa/openssl/crypto/evp/e_cfb_d.c:1.1     Tue Jan 25 23:29:28 2000
+++ opensa/openssl/crypto/evp/e_cfb_d.c Thu Mar  2 21:11:54 2000
@@ -95,7 +95,7 @@
                memcpy(&(ctx->oiv[0]),iv,8);
        memcpy(&(ctx->iv[0]),&(ctx->oiv[0]),8);
        if (deskey != NULL)
-               des_set_key(deskey,ctx->c.des_ks);
+               des_set_key_unchecked(deskey,ctx->c.des_ks);
        }
 
 static void des_cfb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
Index: opensa/openssl/crypto/evp/e_ecb_3d.c
diff -u opensa/openssl/crypto/evp/e_ecb_3d.c:1.1 
opensa/openssl/crypto/evp/e_ecb_3d.c:1.2
--- opensa/openssl/crypto/evp/e_ecb_3d.c:1.1    Tue Jan 25 23:29:28 2000
+++ opensa/openssl/crypto/evp/e_ecb_3d.c        Thu Mar  2 21:11:54 2000
@@ -110,8 +110,8 @@
 
        if (deskey != NULL)
                {
-               des_set_key(&deskey[0],ctx->c.des_ede.ks1);
-               des_set_key(&deskey[1],ctx->c.des_ede.ks2);
+               des_set_key_unchecked(&deskey[0],ctx->c.des_ede.ks1);
+               des_set_key_unchecked(&deskey[1],ctx->c.des_ede.ks2);
                memcpy( (char *)ctx->c.des_ede.ks3,
                        (char *)ctx->c.des_ede.ks1,
                        sizeof(ctx->c.des_ede.ks1));
@@ -125,9 +125,9 @@
 
        if (deskey != NULL)
                {
-               des_set_key(&deskey[0],ctx->c.des_ede.ks1);
-               des_set_key(&deskey[1],ctx->c.des_ede.ks2);
-               des_set_key(&deskey[2],ctx->c.des_ede.ks3);
+               des_set_key_unchecked(&deskey[0],ctx->c.des_ede.ks1);
+               des_set_key_unchecked(&deskey[1],ctx->c.des_ede.ks2);
+               des_set_key_unchecked(&deskey[2],ctx->c.des_ede.ks3);
                }
        }
 
Index: opensa/openssl/crypto/evp/e_ecb_d.c
diff -u opensa/openssl/crypto/evp/e_ecb_d.c:1.1 opensa/openssl/crypto/evp/e_ecb_d.c:1.2
--- opensa/openssl/crypto/evp/e_ecb_d.c:1.1     Tue Jan 25 23:29:28 2000
+++ opensa/openssl/crypto/evp/e_ecb_d.c Thu Mar  2 21:11:54 2000
@@ -90,7 +90,7 @@
        des_cblock *deskey = (des_cblock *)key;
 
        if (deskey != NULL)
-               des_set_key(deskey,ctx->c.des_ks);
+               des_set_key_unchecked(deskey,ctx->c.des_ks);
        }
 
 static void des_ecb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
Index: opensa/openssl/crypto/evp/e_ofb_3d.c
diff -u opensa/openssl/crypto/evp/e_ofb_3d.c:1.1 
opensa/openssl/crypto/evp/e_ofb_3d.c:1.2
--- opensa/openssl/crypto/evp/e_ofb_3d.c:1.1    Tue Jan 25 23:29:28 2000
+++ opensa/openssl/crypto/evp/e_ofb_3d.c        Thu Mar  2 21:11:54 2000
@@ -116,8 +116,8 @@
        memcpy(&(ctx->iv[0]),&(ctx->oiv[0]),8);
        if (deskey != NULL)
                {
-               des_set_key(&deskey[0],ctx->c.des_ede.ks1);
-               des_set_key(&deskey[1],ctx->c.des_ede.ks2);
+               des_set_key_unchecked(&deskey[0],ctx->c.des_ede.ks1);
+               des_set_key_unchecked(&deskey[1],ctx->c.des_ede.ks2);
                memcpy( (char *)ctx->c.des_ede.ks3,
                        (char *)ctx->c.des_ede.ks1,
                        sizeof(ctx->c.des_ede.ks1));
@@ -136,9 +136,9 @@
        memcpy(&(ctx->iv[0]),&(ctx->oiv[0]),8);
        if (deskey != NULL)
                {
-               des_set_key(&deskey[0],ctx->c.des_ede.ks1);
-               des_set_key(&deskey[1],ctx->c.des_ede.ks2);
-               des_set_key(&deskey[2],ctx->c.des_ede.ks3);
+               des_set_key_unchecked(&deskey[0],ctx->c.des_ede.ks1);
+               des_set_key_unchecked(&deskey[1],ctx->c.des_ede.ks2);
+               des_set_key_unchecked(&deskey[2],ctx->c.des_ede.ks3);
                }
        }
 
Index: opensa/openssl/crypto/evp/e_ofb_d.c
diff -u opensa/openssl/crypto/evp/e_ofb_d.c:1.1 opensa/openssl/crypto/evp/e_ofb_d.c:1.2
--- opensa/openssl/crypto/evp/e_ofb_d.c:1.1     Tue Jan 25 23:29:28 2000
+++ opensa/openssl/crypto/evp/e_ofb_d.c Thu Mar  2 21:11:54 2000
@@ -95,7 +95,7 @@
                memcpy(&(ctx->oiv[0]),iv,8);
        memcpy(&(ctx->iv[0]),&(ctx->oiv[0]),8);
        if (deskey != NULL)
-               des_set_key(deskey,ctx->c.des_ks);
+               des_set_key_unchecked(deskey,ctx->c.des_ks);
        }
 
 static void des_ofb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
Index: opensa/openssl/crypto/evp/e_xcbc_d.c
diff -u opensa/openssl/crypto/evp/e_xcbc_d.c:1.1 
opensa/openssl/crypto/evp/e_xcbc_d.c:1.2
--- opensa/openssl/crypto/evp/e_xcbc_d.c:1.1    Tue Jan 25 23:29:28 2000
+++ opensa/openssl/crypto/evp/e_xcbc_d.c        Thu Mar  2 21:11:54 2000
@@ -94,7 +94,7 @@
        memcpy(&(ctx->iv[0]),&(ctx->oiv[0]),8);
        if (deskey != NULL)
                {
-               des_set_key(deskey,ctx->c.desx_cbc.ks);
+               des_set_key_unchecked(deskey,ctx->c.desx_cbc.ks);
                memcpy(&(ctx->c.desx_cbc.inw[0]),&(key[8]),8);
                memcpy(&(ctx->c.desx_cbc.outw[0]),&(key[16]),8);
                }
Index: opensa/openssl/crypto/evp/encode.c
diff -u opensa/openssl/crypto/evp/encode.c:1.1 opensa/openssl/crypto/evp/encode.c:1.2
--- opensa/openssl/crypto/evp/encode.c:1.1      Tue Jan 25 23:29:28 2000
+++ opensa/openssl/crypto/evp/encode.c  Thu Mar  2 21:11:54 2000
@@ -185,7 +185,7 @@
        *outl=ret;
        }
 
-int EVP_EncodeBlock(unsigned char *t, unsigned char *f, int dlen)
+int EVP_EncodeBlock(unsigned char *t, const unsigned char *f, int dlen)
        {
        int i,ret=0;
        unsigned long l;
@@ -337,7 +337,7 @@
        return(rv);
        }
 
-int EVP_DecodeBlock(unsigned char *t, unsigned char *f, int n)
+int EVP_DecodeBlock(unsigned char *t, const unsigned char *f, int n)
        {
        int i,ret=0,a,b,c,d;
        unsigned long l;
Index: opensa/openssl/crypto/evp/evp.h
diff -u opensa/openssl/crypto/evp/evp.h:1.1 opensa/openssl/crypto/evp/evp.h:1.2
--- opensa/openssl/crypto/evp/evp.h:1.1 Tue Jan 25 23:29:28 2000
+++ opensa/openssl/crypto/evp/evp.h     Thu Mar  2 21:11:54 2000
@@ -149,7 +149,7 @@
 
 /* Type needs to be a bit field
  * Sub-type needs to be for variations on the method, as in, can it do
- * arbitary encryption.... */
+ * arbitrary encryption.... */
 typedef struct evp_pkey_st
        {
        int type;
@@ -343,7 +343,7 @@
        unsigned char buf[EVP_MAX_IV_LENGTH];   /* saved partial block */
        int num;                                /* used by cfb/ofb mode */
 
-       char *app_data;         /* aplication stuff */
+       char *app_data;         /* application stuff */
        union   {
 #ifndef NO_RC4
                struct
@@ -421,9 +421,10 @@
 #define EVP_MD_size(e)                 ((e)->md_size)
 #define EVP_MD_block_size(e)           ((e)->block_size)
 
+#define EVP_MD_CTX_md(e)               ((e)->digest)
 #define EVP_MD_CTX_size(e)             EVP_MD_size((e)->digest)
 #define EVP_MD_CTX_block_size(e)       EVP_MD_block_size((e)->digest)
-#define EVP_MD_CTX_type(e)             ((e)->digest)
+#define EVP_MD_CTX_type(e)             EVP_MD_type((e)->digest)
 
 #define EVP_CIPHER_nid(e)              ((e)->nid)
 #define EVP_CIPHER_block_size(e)       ((e)->block_size)
@@ -521,15 +522,14 @@
 void   EVP_EncodeUpdate(EVP_ENCODE_CTX *ctx,unsigned char *out,
                int *outl,unsigned char *in,int inl);
 void   EVP_EncodeFinal(EVP_ENCODE_CTX *ctx,unsigned char *out,int *outl);
-int    EVP_EncodeBlock(unsigned char *t, unsigned char *f, int n);
+int    EVP_EncodeBlock(unsigned char *t, const unsigned char *f, int n);
 
 void   EVP_DecodeInit(EVP_ENCODE_CTX *ctx);
 int    EVP_DecodeUpdate(EVP_ENCODE_CTX *ctx,unsigned char *out,int *outl,
                unsigned char *in, int inl);
 int    EVP_DecodeFinal(EVP_ENCODE_CTX *ctx, unsigned
                char *out, int *outl);
-int    EVP_DecodeBlock(unsigned char *t, unsigned
-               char *f, int n);
+int    EVP_DecodeBlock(unsigned char *t, const unsigned char *f, int n);
 
 void   ERR_load_EVP_strings(void );
 
@@ -594,9 +594,12 @@
 EVP_CIPHER *EVP_rc5_32_12_16_cfb(void);
 EVP_CIPHER *EVP_rc5_32_12_16_ofb(void);
 
-void SSLeay_add_all_algorithms(void);
-void SSLeay_add_all_ciphers(void);
-void SSLeay_add_all_digests(void);
+void OpenSSL_add_all_algorithms(void);
+void OpenSSL_add_all_ciphers(void);
+void OpenSSL_add_all_digests(void);
+#define SSLeay_add_all_algorithms() OpenSSL_add_all_algorithms()
+#define SSLeay_add_all_ciphers() OpenSSL_add_all_ciphers()
+#define SSLeay_add_all_digests() OpenSSL_add_all_digests()
 
 int EVP_add_cipher(EVP_CIPHER *cipher);
 int EVP_add_digest(EVP_MD *digest);
@@ -613,6 +616,18 @@
 int            EVP_PKEY_bits(EVP_PKEY *pkey);
 int            EVP_PKEY_size(EVP_PKEY *pkey);
 int            EVP_PKEY_assign(EVP_PKEY *pkey,int type,char *key);
+#ifndef NO_RSA
+int            EVP_PKEY_set1_RSA(EVP_PKEY *pkey,RSA *key);
+RSA *          EVP_PKEY_get1_RSA(EVP_PKEY *pkey);
+#endif
+#ifndef NO_DSA
+int            EVP_PKEY_set1_DSA(EVP_PKEY *pkey,DSA *key);
+DSA *          EVP_PKEY_get1_DSA(EVP_PKEY *pkey);
+#endif
+#ifndef NO_DH
+int            EVP_PKEY_set1_DH(EVP_PKEY *pkey,DH *key);
+DH *           EVP_PKEY_get1_DH(EVP_PKEY *pkey);
+#endif
 EVP_PKEY *     EVP_PKEY_new(void);
 void           EVP_PKEY_free(EVP_PKEY *pkey);
 EVP_PKEY *     d2i_PublicKey(int type,EVP_PKEY **a, unsigned char **pp,
@@ -621,6 +636,8 @@
 
 EVP_PKEY *     d2i_PrivateKey(int type,EVP_PKEY **a, unsigned char **pp,
                        long length);
+EVP_PKEY *     d2i_AutoPrivateKey(EVP_PKEY **a, unsigned char **pp,
+                       long length);
 int            i2d_PrivateKey(EVP_PKEY *a, unsigned char **pp);
 
 int EVP_PKEY_copy_parameters(EVP_PKEY *to,EVP_PKEY *from);
@@ -677,6 +694,9 @@
 #define EVP_F_EVP_PKEY_COPY_PARAMETERS                  103
 #define EVP_F_EVP_PKEY_DECRYPT                          104
 #define EVP_F_EVP_PKEY_ENCRYPT                          105
+#define EVP_F_EVP_PKEY_GET1_DH                          119
+#define EVP_F_EVP_PKEY_GET1_DSA                                 120
+#define EVP_F_EVP_PKEY_GET1_RSA                                 121
 #define EVP_F_EVP_PKEY_NEW                              106
 #define EVP_F_EVP_SIGNFINAL                             107
 #define EVP_F_EVP_VERIFYFINAL                           108
@@ -693,10 +713,13 @@
 #define EVP_R_DIFFERENT_KEY_TYPES                       101
 #define EVP_R_ENCODE_ERROR                              115
 #define EVP_R_EVP_PBE_CIPHERINIT_ERROR                  119
+#define EVP_R_EXPECTING_AN_RSA_KEY                      127
+#define EVP_R_EXPECTING_A_DH_KEY                        128
+#define EVP_R_EXPECTING_A_DSA_KEY                       129
 #define EVP_R_INPUT_NOT_INITIALIZED                     111
 #define EVP_R_IV_TOO_LARGE                              102
 #define EVP_R_KEYGEN_FAILURE                            120
-#define EVP_R_MISSING_PARMATERS                                 103
+#define EVP_R_MISSING_PARAMETERS                        103
 #define EVP_R_NO_DSA_PARAMETERS                                 116
 #define EVP_R_NO_SIGN_FUNCTION_CONFIGURED               104
 #define EVP_R_NO_VERIFY_FUNCTION_CONFIGURED             105
Index: opensa/openssl/crypto/evp/evp_err.c
diff -u opensa/openssl/crypto/evp/evp_err.c:1.1 opensa/openssl/crypto/evp/evp_err.c:1.2
--- opensa/openssl/crypto/evp/evp_err.c:1.1     Tue Jan 25 23:29:28 2000
+++ opensa/openssl/crypto/evp/evp_err.c Thu Mar  2 21:11:54 2000
@@ -77,6 +77,9 @@
 {ERR_PACK(0,EVP_F_EVP_PKEY_COPY_PARAMETERS,0), "EVP_PKEY_copy_parameters"},
 {ERR_PACK(0,EVP_F_EVP_PKEY_DECRYPT,0), "EVP_PKEY_decrypt"},
 {ERR_PACK(0,EVP_F_EVP_PKEY_ENCRYPT,0), "EVP_PKEY_encrypt"},
+{ERR_PACK(0,EVP_F_EVP_PKEY_GET1_DH,0), "EVP_PKEY_get1_DH"},
+{ERR_PACK(0,EVP_F_EVP_PKEY_GET1_DSA,0),        "EVP_PKEY_get1_DSA"},
+{ERR_PACK(0,EVP_F_EVP_PKEY_GET1_RSA,0),        "EVP_PKEY_get1_RSA"},
 {ERR_PACK(0,EVP_F_EVP_PKEY_NEW,0),     "EVP_PKEY_new"},
 {ERR_PACK(0,EVP_F_EVP_SIGNFINAL,0),    "EVP_SignFinal"},
 {ERR_PACK(0,EVP_F_EVP_VERIFYFINAL,0),  "EVP_VerifyFinal"},
@@ -96,10 +99,13 @@
 {EVP_R_DIFFERENT_KEY_TYPES               ,"different key types"},
 {EVP_R_ENCODE_ERROR                      ,"encode error"},
 {EVP_R_EVP_PBE_CIPHERINIT_ERROR          ,"evp pbe cipherinit error"},
+{EVP_R_EXPECTING_AN_RSA_KEY              ,"expecting an rsa key"},
+{EVP_R_EXPECTING_A_DH_KEY                ,"expecting a dh key"},
+{EVP_R_EXPECTING_A_DSA_KEY               ,"expecting a dsa key"},
 {EVP_R_INPUT_NOT_INITIALIZED             ,"input not initialized"},
 {EVP_R_IV_TOO_LARGE                      ,"iv too large"},
 {EVP_R_KEYGEN_FAILURE                    ,"keygen failure"},
-{EVP_R_MISSING_PARMATERS                 ,"missing parmaters"},
+{EVP_R_MISSING_PARAMETERS                ,"missing parameters"},
 {EVP_R_NO_DSA_PARAMETERS                 ,"no dsa parameters"},
 {EVP_R_NO_SIGN_FUNCTION_CONFIGURED       ,"no sign function configured"},
 {EVP_R_NO_VERIFY_FUNCTION_CONFIGURED     ,"no verify function configured"},
Index: opensa/openssl/crypto/evp/evp_key.c
diff -u opensa/openssl/crypto/evp/evp_key.c:1.1 opensa/openssl/crypto/evp/evp_key.c:1.2
--- opensa/openssl/crypto/evp/evp_key.c:1.1     Tue Jan 25 23:29:28 2000
+++ opensa/openssl/crypto/evp/evp_key.c Thu Mar  2 21:11:54 2000
@@ -81,15 +81,18 @@
                return(prompt_string);
        }
 
-#ifdef NO_DES
-int des_read_pw_string(char *buf,int len,const char *prompt,int verify);
-#endif
-
+/* For historical reasons, the standard function for reading passwords is
+ * in the DES library -- if someone ever wants to disable DES,
+ * this function will fail */
 int EVP_read_pw_string(char *buf, int len, const char *prompt, int verify)
        {
+#ifndef NO_DES
        if ((prompt == NULL) && (prompt_string[0] != '\0'))
                prompt=prompt_string;
        return(des_read_pw_string(buf,len,prompt,verify));
+#else
+       return -1;
+#endif
        }
 
 int EVP_BytesToKey(const EVP_CIPHER *type, EVP_MD *md, unsigned char *salt,
Index: opensa/openssl/crypto/evp/evp_lib.c
diff -u opensa/openssl/crypto/evp/evp_lib.c:1.1 opensa/openssl/crypto/evp/evp_lib.c:1.2
--- opensa/openssl/crypto/evp/evp_lib.c:1.1     Tue Jan 25 23:29:28 2000
+++ opensa/openssl/crypto/evp/evp_lib.c Thu Mar  2 21:11:54 2000
@@ -115,6 +115,7 @@
 int EVP_CIPHER_type(const EVP_CIPHER *ctx)
 {
        int nid;
+       ASN1_OBJECT *otmp;
        nid = EVP_CIPHER_nid(ctx);
 
        switch(nid) {
@@ -131,7 +132,10 @@
                return NID_rc4;
 
                default:
-
+               /* Check it has an OID and it is valid */
+               otmp = OBJ_nid2obj(nid);
+               if(!otmp || !otmp->data) nid = NID_undef;
+               ASN1_OBJECT_free(otmp);
                return nid;
        }
 }
Index: opensa/openssl/crypto/evp/evp_pkey.c
diff -u opensa/openssl/crypto/evp/evp_pkey.c:1.1 
opensa/openssl/crypto/evp/evp_pkey.c:1.2
--- opensa/openssl/crypto/evp/evp_pkey.c:1.1    Tue Jan 25 23:29:28 2000
+++ opensa/openssl/crypto/evp/evp_pkey.c        Thu Mar  2 21:11:54 2000
@@ -62,19 +62,22 @@
 #include <openssl/x509.h>
 #include <openssl/rand.h>
 
+static int dsa_pkey2pkcs8(PKCS8_PRIV_KEY_INFO *p8inf, EVP_PKEY *pkey);
+
 /* Extract a private key from a PKCS8 structure */
 
 EVP_PKEY *EVP_PKCS82PKEY (PKCS8_PRIV_KEY_INFO *p8)
 {
-       EVP_PKEY *pkey;
+       EVP_PKEY *pkey = NULL;
 #ifndef NO_RSA
-       RSA *rsa;
+       RSA *rsa = NULL;
 #endif
 #ifndef NO_DSA
-       DSA *dsa;
-       ASN1_INTEGER *dsapriv;
-       STACK *ndsa;
-       BN_CTX *ctx;
+       DSA *dsa = NULL;
+       ASN1_INTEGER *privkey;
+       ASN1_TYPE *t1, *t2, *param = NULL;
+       STACK *ndsa = NULL;
+       BN_CTX *ctx = NULL;
        int plen;
 #endif
        X509_ALGOR *a;
@@ -82,21 +85,14 @@
        int pkeylen;
        char obj_tmp[80];
 
-       switch (p8->broken) {
-               case PKCS8_OK:
+       if(p8->pkey->type == V_ASN1_OCTET_STRING) {
+               p8->broken = PKCS8_OK;
                p = p8->pkey->value.octet_string->data;
                pkeylen = p8->pkey->value.octet_string->length;
-               break;
-
-               case PKCS8_NO_OCTET:
+       } else {
+               p8->broken = PKCS8_NO_OCTET;
                p = p8->pkey->value.sequence->data;
                pkeylen = p8->pkey->value.sequence->length;
-               break;
-
-               default:
-               EVPerr(EVP_F_EVP_PKCS82PKEY,EVP_R_PKCS8_UNKNOWN_BROKEN_TYPE);
-               return NULL;
-               break;
        }
        if (!(pkey = EVP_PKEY_new())) {
                EVPerr(EVP_F_EVP_PKCS82PKEY,ERR_R_MALLOC_FAILURE);
@@ -121,65 +117,83 @@
                 * be recalculated.
                 */
        
-               /* Check for broken Netscape Database DSA PKCS#8, UGH! */
+               /* Check for broken DSA PKCS#8, UGH! */
                if(*p == (V_ASN1_SEQUENCE|V_ASN1_CONSTRUCTED)) {
                    if(!(ndsa = ASN1_seq_unpack(p, pkeylen, 
-                                       (char *(*)())d2i_ASN1_INTEGER,
-                                                        ASN1_STRING_free))) {
+                                       (char *(*)())d2i_ASN1_TYPE,
+                                                        ASN1_TYPE_free))) {
                        EVPerr(EVP_F_EVP_PKCS82PKEY, EVP_R_DECODE_ERROR);
-                       return NULL;
+                       goto dsaerr;
                    }
                    if(sk_num(ndsa) != 2 ) {
                        EVPerr(EVP_F_EVP_PKCS82PKEY, EVP_R_DECODE_ERROR);
-                       sk_pop_free(ndsa, ASN1_STRING_free);
-                       return NULL;
+                       goto dsaerr;
                    }
-                   dsapriv = (ASN1_INTEGER *) sk_pop(ndsa);
-                   sk_pop_free(ndsa, ASN1_STRING_free);
-               } else if (!(dsapriv=d2i_ASN1_INTEGER (NULL, &p, pkeylen))) {
+                   /* Handle Two broken types:
+                    * SEQUENCE {parameters, priv_key}
+                    * SEQUENCE {pub_key, priv_key}
+                    */
+                     
+                   t1 = (ASN1_TYPE *)sk_value(ndsa, 0);
+                   t2 = (ASN1_TYPE *)sk_value(ndsa, 1);
+                   if(t1->type == V_ASN1_SEQUENCE) {
+                       p8->broken = PKCS8_EMBEDDED_PARAM;
+                       param = t1;
+                   } else if(a->parameter->type == V_ASN1_SEQUENCE) {
+                       p8->broken = PKCS8_NS_DB;
+                       param = a->parameter;
+                   } else {
                        EVPerr(EVP_F_EVP_PKCS82PKEY, EVP_R_DECODE_ERROR);
-                       return NULL;
-               }
-               /* Retrieve parameters */
-               if (a->parameter->type != V_ASN1_SEQUENCE) {
-                       EVPerr(EVP_F_EVP_PKCS82PKEY, EVP_R_NO_DSA_PARAMETERS);
-                       return NULL;
+                       goto dsaerr;
+                   }
+
+                   if(t2->type != V_ASN1_INTEGER) {
+                       EVPerr(EVP_F_EVP_PKCS82PKEY, EVP_R_DECODE_ERROR);
+                       goto dsaerr;
+                   }
+                   privkey = t2->value.integer;
+               } else if (!(privkey=d2i_ASN1_INTEGER (NULL, &p, pkeylen))) {
+                       EVPerr(EVP_F_EVP_PKCS82PKEY, EVP_R_DECODE_ERROR);
+                       goto dsaerr;
                }
-               p = a->parameter->value.sequence->data;
-               plen = a->parameter->value.sequence->length;
+               p = param->value.sequence->data;
+               plen = param->value.sequence->length;
                if (!(dsa = d2i_DSAparams (NULL, &p, plen))) {
                        EVPerr(EVP_F_EVP_PKCS82PKEY, EVP_R_DECODE_ERROR);
-                       return NULL;
+                       goto dsaerr;
                }
                /* We have parameters now set private key */
-               if (!(dsa->priv_key = ASN1_INTEGER_to_BN(dsapriv, NULL))) {
+               if (!(dsa->priv_key = ASN1_INTEGER_to_BN(privkey, NULL))) {
                        EVPerr(EVP_F_EVP_PKCS82PKEY,EVP_R_BN_DECODE_ERROR);
-                       DSA_free (dsa);
-                       return NULL;
+                       goto dsaerr;
                }
                /* Calculate public key (ouch!) */
                if (!(dsa->pub_key = BN_new())) {
                        EVPerr(EVP_F_EVP_PKCS82PKEY,ERR_R_MALLOC_FAILURE);
-                       DSA_free (dsa);
-                       return NULL;
+                       goto dsaerr;
                }
                if (!(ctx = BN_CTX_new())) {
                        EVPerr(EVP_F_EVP_PKCS82PKEY,ERR_R_MALLOC_FAILURE);
-                       DSA_free (dsa);
-                       return NULL;
+                       goto dsaerr;
                }
                        
                if (!BN_mod_exp(dsa->pub_key, dsa->g,
                                                 dsa->priv_key, dsa->p, ctx)) {
                        
                        EVPerr(EVP_F_EVP_PKCS82PKEY,EVP_R_BN_PUBKEY_ERROR);
-                       BN_CTX_free (ctx);
-                       DSA_free (dsa);
-                       return NULL;
+                       goto dsaerr;
                }
 
-               EVP_PKEY_assign_DSA (pkey, dsa);
+               EVP_PKEY_assign_DSA(pkey, dsa);
                BN_CTX_free (ctx);
+               sk_pop_free(ndsa, ASN1_TYPE_free);
+               break;
+               dsaerr:
+               BN_CTX_free (ctx);
+               sk_pop_free(ndsa, ASN1_TYPE_free);
+               DSA_free(dsa);
+               EVP_PKEY_free(pkey);
+               return NULL;
                break;
 #endif
                default:
@@ -193,30 +207,35 @@
        return pkey;
 }
 
+PKCS8_PRIV_KEY_INFO *EVP_PKEY2PKCS8(EVP_PKEY *pkey)
+{
+       return EVP_PKEY2PKCS8_broken(pkey, PKCS8_OK);
+}
+
 /* Turn a private key into a PKCS8 structure */
 
-PKCS8_PRIV_KEY_INFO *EVP_PKEY2PKCS8(EVP_PKEY *pkey)
+PKCS8_PRIV_KEY_INFO *EVP_PKEY2PKCS8_broken(EVP_PKEY *pkey, int broken)
 {
        PKCS8_PRIV_KEY_INFO *p8;
-#ifndef NO_DSA
-       ASN1_INTEGER *dpkey;
-       unsigned char *p, *q;
-       int len;
-#endif
+
        if (!(p8 = PKCS8_PRIV_KEY_INFO_new())) {        
                EVPerr(EVP_F_EVP_PKEY2PKCS8,ERR_R_MALLOC_FAILURE);
                return NULL;
        }
+       p8->broken = broken;
        ASN1_INTEGER_set (p8->version, 0);
        if (!(p8->pkeyalg->parameter = ASN1_TYPE_new ())) {
                EVPerr(EVP_F_EVP_PKEY2PKCS8,ERR_R_MALLOC_FAILURE);
                PKCS8_PRIV_KEY_INFO_free (p8);
                return NULL;
        }
+       p8->pkey->type = V_ASN1_OCTET_STRING;
        switch (EVP_PKEY_type(pkey->type)) {
 #ifndef NO_RSA
                case EVP_PKEY_RSA:
 
+               if(p8->broken == PKCS8_NO_OCTET) p8->pkey->type = V_ASN1_SEQUENCE;
+
                p8->pkeyalg->algorithm = OBJ_nid2obj(NID_rsaEncryption);
                p8->pkeyalg->parameter->type = V_ASN1_NULL;
                if (!ASN1_pack_string ((char *)pkey, i2d_PrivateKey,
@@ -229,36 +248,11 @@
 #endif
 #ifndef NO_DSA
                case EVP_PKEY_DSA:
-               p8->pkeyalg->algorithm = OBJ_nid2obj(NID_dsa);
-
-               /* get paramaters and place in AlgorithmIdentifier */
-               len = i2d_DSAparams (pkey->pkey.dsa, NULL);
-               if (!(p = Malloc(len))) {
-                       EVPerr(EVP_F_EVP_PKEY2PKCS8,ERR_R_MALLOC_FAILURE);
-                       PKCS8_PRIV_KEY_INFO_free (p8);
-                       return NULL;
-               }
-               q = p;
-               i2d_DSAparams (pkey->pkey.dsa, &q);
-               p8->pkeyalg->parameter->type = V_ASN1_SEQUENCE;
-               p8->pkeyalg->parameter->value.sequence = ASN1_STRING_new();
-               ASN1_STRING_set(p8->pkeyalg->parameter->value.sequence, p, len);
-               Free(p);
-               /* Get private key into an integer and pack */
-               if (!(dpkey = BN_to_ASN1_INTEGER (pkey->pkey.dsa->priv_key, NULL))) {
-                       EVPerr(EVP_F_EVP_PKEY2PKCS8,EVP_R_ENCODE_ERROR);
-                       PKCS8_PRIV_KEY_INFO_free (p8);
-                       return NULL;
-               }
-               
-               if (!ASN1_pack_string((char *)dpkey, i2d_ASN1_INTEGER,
-                                        &p8->pkey->value.octet_string)) {
-                       EVPerr(EVP_F_EVP_PKEY2PKCS8,ERR_R_MALLOC_FAILURE);
-                       ASN1_INTEGER_free (dpkey);
+               if(!dsa_pkey2pkcs8(p8, pkey)) {
                        PKCS8_PRIV_KEY_INFO_free (p8);
                        return NULL;
                }
-               ASN1_INTEGER_free (dpkey);
+
                break;
 #endif
                default:
@@ -266,9 +260,8 @@
                PKCS8_PRIV_KEY_INFO_free (p8);
                return NULL;
        }
-       p8->pkey->type = V_ASN1_OCTET_STRING;
-       RAND_seed (p8->pkey->value.octet_string->data,
-                                        p8->pkey->value.octet_string->length);
+       RAND_add(p8->pkey->value.octet_string->data,
+                p8->pkey->value.octet_string->length, 0);
        return p8;
 }
 
@@ -295,4 +288,112 @@
        }
 }
 
+#ifndef NO_DSA
+static int dsa_pkey2pkcs8(PKCS8_PRIV_KEY_INFO *p8, EVP_PKEY *pkey)
+{
+       ASN1_STRING *params;
+       ASN1_INTEGER *prkey;
+       ASN1_TYPE *ttmp;
+       STACK *ndsa;
+       unsigned char *p, *q;
+       int len;
+       p8->pkeyalg->algorithm = OBJ_nid2obj(NID_dsa);
+       len = i2d_DSAparams (pkey->pkey.dsa, NULL);
+       if (!(p = Malloc(len))) {
+               EVPerr(EVP_F_EVP_PKEY2PKCS8,ERR_R_MALLOC_FAILURE);
+               PKCS8_PRIV_KEY_INFO_free (p8);
+               return 0;
+       }
+       q = p;
+       i2d_DSAparams (pkey->pkey.dsa, &q);
+       params = ASN1_STRING_new();
+       ASN1_STRING_set(params, p, len);
+       Free(p);
+       /* Get private key into integer */
+       if (!(prkey = BN_to_ASN1_INTEGER (pkey->pkey.dsa->priv_key, NULL))) {
+               EVPerr(EVP_F_EVP_PKEY2PKCS8,EVP_R_ENCODE_ERROR);
+               return 0;
+       }
+
+       switch(p8->broken) {
 
+               case PKCS8_OK:
+               case PKCS8_NO_OCTET:
+
+               if (!ASN1_pack_string((char *)prkey, i2d_ASN1_INTEGER,
+                                        &p8->pkey->value.octet_string)) {
+                       EVPerr(EVP_F_EVP_PKEY2PKCS8,ERR_R_MALLOC_FAILURE);
+                       M_ASN1_INTEGER_free (prkey);
+                       return 0;
+               }
+
+               M_ASN1_INTEGER_free (prkey);
+               p8->pkeyalg->parameter->value.sequence = params;
+               p8->pkeyalg->parameter->type = V_ASN1_SEQUENCE;
+
+               break;
+
+               case PKCS8_NS_DB:
+
+               p8->pkeyalg->parameter->value.sequence = params;
+               p8->pkeyalg->parameter->type = V_ASN1_SEQUENCE;
+               ndsa = sk_new_null();
+               ttmp = ASN1_TYPE_new();
+               if (!(ttmp->value.integer = BN_to_ASN1_INTEGER 
+(pkey->pkey.dsa->pub_key, NULL))) {
+                       EVPerr(EVP_F_EVP_PKEY2PKCS8,EVP_R_ENCODE_ERROR);
+                       PKCS8_PRIV_KEY_INFO_free(p8);
+                       return 0;
+               }
+               ttmp->type = V_ASN1_INTEGER;
+               sk_push(ndsa, (char *)ttmp);
+
+               ttmp = ASN1_TYPE_new();
+               ttmp->value.integer = prkey;
+               ttmp->type = V_ASN1_INTEGER;
+               sk_push(ndsa, (char *)ttmp);
+
+               p8->pkey->value.octet_string = ASN1_OCTET_STRING_new();
+
+               if (!ASN1_seq_pack(ndsa, i2d_ASN1_TYPE,
+                                        &p8->pkey->value.octet_string->data,
+                                        &p8->pkey->value.octet_string->length)) {
+
+                       EVPerr(EVP_F_EVP_PKEY2PKCS8,ERR_R_MALLOC_FAILURE);
+                       sk_pop_free(ndsa, ASN1_TYPE_free);
+                       M_ASN1_INTEGER_free(prkey);
+                       return 0;
+               }
+               sk_pop_free(ndsa, ASN1_TYPE_free);
+               break;
+
+               case PKCS8_EMBEDDED_PARAM:
+
+               p8->pkeyalg->parameter->type = V_ASN1_NULL;
+               ndsa = sk_new_null();
+               ttmp = ASN1_TYPE_new();
+               ttmp->value.sequence = params;
+               ttmp->type = V_ASN1_SEQUENCE;
+               sk_push(ndsa, (char *)ttmp);
+
+               ttmp = ASN1_TYPE_new();
+               ttmp->value.integer = prkey;
+               ttmp->type = V_ASN1_INTEGER;
+               sk_push(ndsa, (char *)ttmp);
+
+               p8->pkey->value.octet_string = ASN1_OCTET_STRING_new();
+
+               if (!ASN1_seq_pack(ndsa, i2d_ASN1_TYPE,
+                                        &p8->pkey->value.octet_string->data,
+                                        &p8->pkey->value.octet_string->length)) {
+
+                       EVPerr(EVP_F_EVP_PKEY2PKCS8,ERR_R_MALLOC_FAILURE);
+                       sk_pop_free(ndsa, ASN1_TYPE_free);
+                       M_ASN1_INTEGER_free (prkey);
+                       return 0;
+               }
+               sk_pop_free(ndsa, ASN1_TYPE_free);
+               break;
+       }
+       return 1;
+}
+#endif
Index: opensa/openssl/crypto/evp/makefile.ssl
diff -u opensa/openssl/crypto/evp/makefile.ssl:1.1 
opensa/openssl/crypto/evp/makefile.ssl:1.2
--- opensa/openssl/crypto/evp/makefile.ssl:1.1  Tue Jan 25 23:29:28 2000
+++ opensa/openssl/crypto/evp/makefile.ssl      Thu Mar  2 21:11:54 2000
@@ -35,7 +35,8 @@
        m_ripemd.c \
        p_open.c p_seal.c p_sign.c p_verify.c p_lib.c p_enc.c p_dec.c \
        bio_md.c bio_b64.c bio_enc.c evp_err.c e_null.c \
-       c_all.c evp_lib.c bio_ok.c evp_pkey.c evp_pbe.c p5_crpt.c p5_crpt2.c
+       c_all.c c_allc.c c_alld.c evp_lib.c bio_ok.c \
+       evp_pkey.c evp_pbe.c p5_crpt.c p5_crpt2.c
 
 LIBOBJ=        encode.o digest.o evp_enc.o evp_key.o \
        e_ecb_d.o e_cbc_d.o e_cfb_d.o e_ofb_d.o \
@@ -50,7 +51,8 @@
        m_ripemd.o \
        p_open.o p_seal.o p_sign.o p_verify.o p_lib.o p_enc.o p_dec.o \
        bio_md.o bio_b64.o bio_enc.o evp_err.o e_null.o \
-       c_all.o evp_lib.o bio_ok.o evp_pkey.o evp_pbe.o p5_crpt.o p5_crpt2.o
+       c_all.o c_allc.o c_alld.o evp_lib.o bio_ok.o \
+       evp_pkey.o evp_pbe.o p5_crpt.o p5_crpt2.o
 
 SRC= $(LIBSRC)
 
@@ -176,13 +178,45 @@
 c_all.o: ../../include/openssl/idea.h ../../include/openssl/md2.h
 c_all.o: ../../include/openssl/md5.h ../../include/openssl/mdc2.h
 c_all.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
-c_all.o: ../../include/openssl/opensslv.h ../../include/openssl/pkcs12.h
-c_all.o: ../../include/openssl/pkcs7.h ../../include/openssl/rc2.h
+c_all.o: ../../include/openssl/opensslv.h ../../include/openssl/rc2.h
 c_all.o: ../../include/openssl/rc4.h ../../include/openssl/rc5.h
 c_all.o: ../../include/openssl/ripemd.h ../../include/openssl/rsa.h
 c_all.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
-c_all.o: ../../include/openssl/stack.h ../../include/openssl/x509.h
-c_all.o: ../../include/openssl/x509_vfy.h ../cryptlib.h
+c_all.o: ../../include/openssl/stack.h ../cryptlib.h
+c_allc.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
+c_allc.o: ../../include/openssl/blowfish.h ../../include/openssl/bn.h
+c_allc.o: ../../include/openssl/buffer.h ../../include/openssl/cast.h
+c_allc.o: ../../include/openssl/crypto.h ../../include/openssl/des.h
+c_allc.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h
+c_allc.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h
+c_allc.o: ../../include/openssl/err.h ../../include/openssl/evp.h
+c_allc.o: ../../include/openssl/idea.h ../../include/openssl/md2.h
+c_allc.o: ../../include/openssl/md5.h ../../include/openssl/mdc2.h
+c_allc.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
+c_allc.o: ../../include/openssl/opensslv.h ../../include/openssl/pkcs12.h
+c_allc.o: ../../include/openssl/pkcs7.h ../../include/openssl/rc2.h
+c_allc.o: ../../include/openssl/rc4.h ../../include/openssl/rc5.h
+c_allc.o: ../../include/openssl/ripemd.h ../../include/openssl/rsa.h
+c_allc.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
+c_allc.o: ../../include/openssl/stack.h ../../include/openssl/x509.h
+c_allc.o: ../../include/openssl/x509_vfy.h ../cryptlib.h
+c_alld.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
+c_alld.o: ../../include/openssl/blowfish.h ../../include/openssl/bn.h
+c_alld.o: ../../include/openssl/buffer.h ../../include/openssl/cast.h
+c_alld.o: ../../include/openssl/crypto.h ../../include/openssl/des.h
+c_alld.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h
+c_alld.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h
+c_alld.o: ../../include/openssl/err.h ../../include/openssl/evp.h
+c_alld.o: ../../include/openssl/idea.h ../../include/openssl/md2.h
+c_alld.o: ../../include/openssl/md5.h ../../include/openssl/mdc2.h
+c_alld.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
+c_alld.o: ../../include/openssl/opensslv.h ../../include/openssl/pkcs12.h
+c_alld.o: ../../include/openssl/pkcs7.h ../../include/openssl/rc2.h
+c_alld.o: ../../include/openssl/rc4.h ../../include/openssl/rc5.h
+c_alld.o: ../../include/openssl/ripemd.h ../../include/openssl/rsa.h
+c_alld.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
+c_alld.o: ../../include/openssl/stack.h ../../include/openssl/x509.h
+c_alld.o: ../../include/openssl/x509_vfy.h ../cryptlib.h
 digest.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
 digest.o: ../../include/openssl/blowfish.h ../../include/openssl/bn.h
 digest.o: ../../include/openssl/buffer.h ../../include/openssl/cast.h
Index: opensa/openssl/crypto/evp/p_lib.c
diff -u opensa/openssl/crypto/evp/p_lib.c:1.1 opensa/openssl/crypto/evp/p_lib.c:1.2
--- opensa/openssl/crypto/evp/p_lib.c:1.1       Tue Jan 25 23:29:28 2000
+++ opensa/openssl/crypto/evp/p_lib.c   Thu Mar  2 21:11:54 2000
@@ -119,7 +119,7 @@
 
        if (EVP_PKEY_missing_parameters(from))
                {
-               EVPerr(EVP_F_EVP_PKEY_COPY_PARAMETERS,EVP_R_MISSING_PARMATERS);
+               EVPerr(EVP_F_EVP_PKEY_COPY_PARAMETERS,EVP_R_MISSING_PARAMETERS);
                goto err;
                }
 #ifndef NO_DSA
@@ -202,9 +202,67 @@
        pkey->type=EVP_PKEY_type(type);
        pkey->save_type=type;
        pkey->pkey.ptr=key;
-       return(1);
+       return(key != NULL);
        }
 
+#ifndef NO_RSA
+int EVP_PKEY_set1_RSA(EVP_PKEY *pkey, RSA *key)
+{
+       int ret = EVP_PKEY_assign_RSA(pkey, key);
+       if(ret) CRYPTO_add(&key->references, 1, CRYPTO_LOCK_RSA);
+       return ret;
+}
+
+RSA *EVP_PKEY_get1_RSA(EVP_PKEY *pkey)
+       {
+       if(pkey->type != EVP_PKEY_RSA) {
+               EVPerr(EVP_F_EVP_PKEY_GET1_RSA, EVP_R_EXPECTING_AN_RSA_KEY);
+               return NULL;
+       }
+       CRYPTO_add(&pkey->pkey.rsa->references, 1, CRYPTO_LOCK_RSA);
+       return pkey->pkey.rsa;
+}
+#endif
+
+#ifndef NO_DSA
+int EVP_PKEY_set1_DSA(EVP_PKEY *pkey, DSA *key)
+{
+       int ret = EVP_PKEY_assign_DSA(pkey, key);
+       if(ret) CRYPTO_add(&key->references, 1, CRYPTO_LOCK_DSA);
+       return ret;
+}
+
+DSA *EVP_PKEY_get1_DSA(EVP_PKEY *pkey)
+       {
+       if(pkey->type != EVP_PKEY_DSA) {
+               EVPerr(EVP_F_EVP_PKEY_GET1_DSA, EVP_R_EXPECTING_A_DSA_KEY);
+               return NULL;
+       }
+       CRYPTO_add(&pkey->pkey.dsa->references, 1, CRYPTO_LOCK_DSA);
+       return pkey->pkey.dsa;
+}
+#endif
+
+#ifndef NO_DH
+
+int EVP_PKEY_set1_DH(EVP_PKEY *pkey, DH *key)
+{
+       int ret = EVP_PKEY_assign_DH(pkey, key);
+       if(ret) CRYPTO_add(&key->references, 1, CRYPTO_LOCK_DH);
+       return ret;
+}
+
+DH *EVP_PKEY_get1_DH(EVP_PKEY *pkey)
+       {
+       if(pkey->type != EVP_PKEY_DH) {
+               EVPerr(EVP_F_EVP_PKEY_GET1_DH, EVP_R_EXPECTING_A_DH_KEY);
+               return NULL;
+       }
+       CRYPTO_add(&pkey->pkey.dh->references, 1, CRYPTO_LOCK_DH);
+       return pkey->pkey.dh;
+}
+#endif
+
 int EVP_PKEY_type(int type)
        {
        switch (type)
@@ -244,7 +302,7 @@
                }
 #endif
        EVP_PKEY_free_it(x);
-       Free((char *)x);
+       Free(x);
        }
 
 static void EVP_PKEY_free_it(EVP_PKEY *x)
Index: opensa/openssl/crypto/evp/p_open.c
diff -u opensa/openssl/crypto/evp/p_open.c:1.1 opensa/openssl/crypto/evp/p_open.c:1.2
--- opensa/openssl/crypto/evp/p_open.c:1.1      Tue Jan 25 23:29:28 2000
+++ opensa/openssl/crypto/evp/p_open.c  Thu Mar  2 21:11:54 2000
@@ -110,4 +110,10 @@
        EVP_DecryptInit(ctx,NULL,NULL,NULL);
        return(i);
        }
+#else /* !NO_RSA */
+
+# ifdef PEDANTIC
+static void *dummy=&dummy;
+# endif
+
 #endif
Index: opensa/openssl/crypto/evp/p_seal.c
diff -u opensa/openssl/crypto/evp/p_seal.c:1.1 opensa/openssl/crypto/evp/p_seal.c:1.2
--- opensa/openssl/crypto/evp/p_seal.c:1.1      Tue Jan 25 23:29:28 2000
+++ opensa/openssl/crypto/evp/p_seal.c  Thu Mar  2 21:11:54 2000
@@ -73,9 +73,10 @@
        int i;
        
        if (npubk <= 0) return(0);
-       RAND_bytes(key,EVP_MAX_KEY_LENGTH);
+       if (RAND_bytes(key,EVP_MAX_KEY_LENGTH) <= 0)
+               return(0);
        if (type->iv_len > 0)
-               RAND_bytes(iv,type->iv_len);
+               RAND_pseudo_bytes(iv,type->iv_len);
 
        EVP_CIPHER_CTX_init(ctx);
        EVP_EncryptInit(ctx,type,key,iv);
Index: opensa/openssl/crypto/hmac/hmac.c
diff -u opensa/openssl/crypto/hmac/hmac.c:1.1 opensa/openssl/crypto/hmac/hmac.c:1.2
--- opensa/openssl/crypto/hmac/hmac.c:1.1       Tue Jan 25 23:29:07 2000
+++ opensa/openssl/crypto/hmac/hmac.c   Thu Mar  2 21:11:54 2000
@@ -109,7 +109,7 @@
        memcpy(&ctx->md_ctx,&ctx->i_ctx,sizeof(ctx->i_ctx));
        }
 
-void HMAC_Update(HMAC_CTX *ctx, unsigned char *data, int len)
+void HMAC_Update(HMAC_CTX *ctx, const unsigned char *data, int len)
        {
        EVP_DigestUpdate(&(ctx->md_ctx),data,len);
        }
@@ -134,7 +134,7 @@
        }
 
 unsigned char *HMAC(const EVP_MD *evp_md, const void *key, int key_len,
-                   unsigned char *d, int n, unsigned char *md,
+                   const unsigned char *d, int n, unsigned char *md,
                    unsigned int *md_len)
        {
        HMAC_CTX c;
Index: opensa/openssl/crypto/hmac/hmac.h
diff -u opensa/openssl/crypto/hmac/hmac.h:1.1 opensa/openssl/crypto/hmac/hmac.h:1.2
--- opensa/openssl/crypto/hmac/hmac.h:1.1       Tue Jan 25 23:29:07 2000
+++ opensa/openssl/crypto/hmac/hmac.h   Thu Mar  2 21:11:54 2000
@@ -85,11 +85,11 @@
 
 void HMAC_Init(HMAC_CTX *ctx, const void *key, int len,
               const EVP_MD *md);
-void HMAC_Update(HMAC_CTX *ctx,unsigned char *key, int len);
+void HMAC_Update(HMAC_CTX *ctx, const unsigned char *data, int len);
 void HMAC_Final(HMAC_CTX *ctx, unsigned char *md, unsigned int *len);
 void HMAC_cleanup(HMAC_CTX *ctx);
 unsigned char *HMAC(const EVP_MD *evp_md, const void *key, int key_len,
-                   unsigned char *d, int n, unsigned char *md,
+                   const unsigned char *d, int n, unsigned char *md,
                    unsigned int *md_len);
 
 
Index: opensa/openssl/crypto/hmac/hmactest.c
diff -u opensa/openssl/crypto/hmac/hmactest.c:1.1 
opensa/openssl/crypto/hmac/hmactest.c:1.2
--- opensa/openssl/crypto/hmac/hmactest.c:1.1   Tue Jan 25 23:29:07 2000
+++ opensa/openssl/crypto/hmac/hmactest.c       Thu Mar  2 21:11:54 2000
@@ -73,7 +73,7 @@
 #include <openssl/ebcdic.h>
 #endif
 
-struct test_st
+static struct test_st
        {
        unsigned char key[16];
        int key_len;
Index: opensa/openssl/crypto/idea/idea_lcl.h
diff -u opensa/openssl/crypto/idea/idea_lcl.h:1.1 
opensa/openssl/crypto/idea/idea_lcl.h:1.2
--- opensa/openssl/crypto/idea/idea_lcl.h:1.1   Tue Jan 25 23:28:51 2000
+++ opensa/openssl/crypto/idea/idea_lcl.h       Thu Mar  2 21:11:55 2000
@@ -56,7 +56,7 @@
  * [including the GNU Public Licence.]
  */
 
-/* The new form of this macro (check if the a*b == 0) was sugested by 
+/* The new form of this macro (check if the a*b == 0) was suggested by 
  * Colin Plumb <[EMAIL PROTECTED]> */
 /* Removal of the inner if from from Wei Dai 24/4/96 */
 #define idea_mul(r,a,b,ul) \
Index: opensa/openssl/crypto/idea/idea_spd.c
diff -u opensa/openssl/crypto/idea/idea_spd.c:1.1 
opensa/openssl/crypto/idea/idea_spd.c:1.2
--- opensa/openssl/crypto/idea/idea_spd.c:1.1   Tue Jan 25 23:28:51 2000
+++ opensa/openssl/crypto/idea/idea_spd.c       Thu Mar  2 21:11:55 2000
@@ -183,7 +183,7 @@
 #endif
 
 #ifndef TIMES
-       printf("To get the most acurate results, try to run this\n");
+       printf("To get the most accurate results, try to run this\n");
        printf("program when this computer is idle.\n");
 #endif
 
Index: opensa/openssl/crypto/lhash/lhash.c
diff -u opensa/openssl/crypto/lhash/lhash.c:1.1 opensa/openssl/crypto/lhash/lhash.c:1.2
--- opensa/openssl/crypto/lhash/lhash.c:1.1     Tue Jan 25 23:28:37 2000
+++ opensa/openssl/crypto/lhash/lhash.c Thu Mar  2 21:11:55 2000
@@ -64,11 +64,11 @@
  *
  * 2.1 eay - Added an 'error in last operation' flag. eay 6-May-98
  *
- * 2.0 eay - Fixed a bug that occured when using lh_delete
+ * 2.0 eay - Fixed a bug that occurred when using lh_delete
  *          from inside lh_doall().  As entries were deleted,
  *          the 'table' was 'contract()ed', making some entries
  *          jump from the end of the table to the start, there by
- *          skiping the lh_doall() processing. eay - 4/12/95
+ *          skipping the lh_doall() processing. eay - 4/12/95
  *
  * 1.9 eay - Fixed a memory leak in lh_free, the LHASH_NODEs
  *          were not being free()ed. 21/11/95
@@ -107,12 +107,9 @@
 #define UP_LOAD                (2*LH_LOAD_MULT) /* load times 256  (default 2) */
 #define DOWN_LOAD      (LH_LOAD_MULT)   /* load times 256  (default 1) */
 
-
-#define P_CP   char *
-#define P_CPP  char *,char *
 static void expand(LHASH *lh);
 static void contract(LHASH *lh);
-static LHASH_NODE **getrn(LHASH *lh, char *data, unsigned long *rhash);
+static LHASH_NODE **getrn(LHASH *lh, void *data, unsigned long *rhash);
 
 LHASH *lh_new(unsigned long (*h)(), int (*c)())
        {
@@ -152,7 +149,7 @@
        ret->error=0;
        return(ret);
 err1:
-       Free((char *)ret);
+       Free(ret);
 err0:
        return(NULL);
        }
@@ -175,15 +172,15 @@
                        n=nn;
                        }
                }
-       Free((char *)lh->b);
-       Free((char *)lh);
+       Free(lh->b);
+       Free(lh);
        }
 
-char *lh_insert(LHASH *lh, char *data)
+void *lh_insert(LHASH *lh, void *data)
        {
        unsigned long hash;
        LHASH_NODE *nn,**rn;
-       char *ret;
+       void *ret;
 
        lh->error=0;
        if (lh->up_load <= (lh->num_items*LH_LOAD_MULT/lh->num_nodes))
@@ -217,11 +214,11 @@
        return(ret);
        }
 
-char *lh_delete(LHASH *lh, char *data)
+void *lh_delete(LHASH *lh, void *data)
        {
        unsigned long hash;
        LHASH_NODE *nn,**rn;
-       char *ret;
+       void *ret;
 
        lh->error=0;
        rn=getrn(lh,data,&hash);
@@ -236,7 +233,7 @@
                nn= *rn;
                *rn=nn->next;
                ret=nn->data;
-               Free((char *)nn);
+               Free(nn);
                lh->num_delete++;
                }
 
@@ -248,11 +245,11 @@
        return(ret);
        }
 
-char *lh_retrieve(LHASH *lh, char *data)
+void *lh_retrieve(LHASH *lh, void *data)
        {
        unsigned long hash;
        LHASH_NODE **rn;
-       char *ret;
+       void *ret;
 
        lh->error=0;
        rn=getrn(lh,data,&hash);
@@ -275,7 +272,7 @@
        lh_doall_arg(lh,func,NULL);
        }
 
-void lh_doall_arg(LHASH *lh, void (*func)(), char *arg)
+void lh_doall_arg(LHASH *lh, void (*func)(), void *arg)
        {
        int i;
        LHASH_NODE *a,*n;
@@ -332,7 +329,7 @@
        if ((lh->p) >= lh->pmax)
                {
                j=(int)lh->num_alloc_nodes*2;
-               n=(LHASH_NODE **)Realloc((char *)lh->b,
+               n=(LHASH_NODE **)Realloc(lh->b,
                        (unsigned int)sizeof(LHASH_NODE *)*j);
                if (n == NULL)
                        {
@@ -360,7 +357,7 @@
        lh->b[lh->p+lh->pmax-1]=NULL; /* 24/07-92 - eay - weird but :-( */
        if (lh->p == 0)
                {
-               n=(LHASH_NODE **)Realloc((char *)lh->b,
+               n=(LHASH_NODE **)Realloc(lh->b,
                        (unsigned int)(sizeof(LHASH_NODE *)*lh->pmax));
                if (n == NULL)
                        {
@@ -391,7 +388,7 @@
                }
        }
 
-static LHASH_NODE **getrn(LHASH *lh, char *data, unsigned long *rhash)
+static LHASH_NODE **getrn(LHASH *lh, void *data, unsigned long *rhash)
        {
        LHASH_NODE **ret,*n1;
        unsigned long hash,nn;
@@ -426,8 +423,7 @@
        }
 
 /*
-static unsigned long lh_strhash(str)
-char *str;
+unsigned long lh_strhash(char *str)
        {
        int i,l;
        unsigned long ret=0;
Index: opensa/openssl/crypto/lhash/lhash.h
diff -u opensa/openssl/crypto/lhash/lhash.h:1.1 opensa/openssl/crypto/lhash/lhash.h:1.2
--- opensa/openssl/crypto/lhash/lhash.h:1.1     Tue Jan 25 23:28:37 2000
+++ opensa/openssl/crypto/lhash/lhash.h Thu Mar  2 21:11:55 2000
@@ -73,7 +73,7 @@
 
 typedef struct lhash_node_st
        {
-       char *data;
+       void *data;
        struct lhash_node_st *next;
 #ifndef NO_HASH_COMP
        unsigned long hash;
@@ -116,13 +116,13 @@
  * in lh_insert(). */
 #define lh_error(lh)   ((lh)->error)
 
-LHASH *lh_new(unsigned long (*h)(), int (*c)());
+LHASH *lh_new(unsigned long (*h)(/* void *a */), int (*c)(/* void *a,void *b */));
 void lh_free(LHASH *lh);
-char *lh_insert(LHASH *lh, char *data);
-char *lh_delete(LHASH *lh, char *data);
-char *lh_retrieve(LHASH *lh, char *data);
-void lh_doall(LHASH *lh, void (*func)(/* char *b */));
-void lh_doall_arg(LHASH *lh, void (*func)(/*char *a,char *b*/),char *arg);
+void *lh_insert(LHASH *lh, void *data);
+void *lh_delete(LHASH *lh, void *data);
+void *lh_retrieve(LHASH *lh, void *data);
+    void lh_doall(LHASH *lh, void (*func)(/*void *b*/));
+void lh_doall_arg(LHASH *lh, void (*func)(/*void *a,void *b*/),void *arg);
 unsigned long lh_strhash(const char *c);
 
 #ifndef NO_FP_API
Index: opensa/openssl/crypto/lhash/makefile.ssl
diff -u opensa/openssl/crypto/lhash/makefile.ssl:1.1 
opensa/openssl/crypto/lhash/makefile.ssl:1.2
--- opensa/openssl/crypto/lhash/makefile.ssl:1.1        Tue Jan 25 23:28:37 2000
+++ opensa/openssl/crypto/lhash/makefile.ssl    Thu Mar  2 21:11:55 2000
@@ -82,7 +82,8 @@
 lh_stats.o: ../../include/openssl/crypto.h ../../include/openssl/e_os.h
 lh_stats.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
 lh_stats.o: ../../include/openssl/lhash.h ../../include/openssl/opensslconf.h
-lh_stats.o: ../../include/openssl/opensslv.h ../../include/openssl/stack.h
-lh_stats.o: ../cryptlib.h
+lh_stats.o: ../../include/openssl/opensslv.h ../../include/openssl/safestack.h
+lh_stats.o: ../../include/openssl/stack.h ../cryptlib.h
 lhash.o: ../../include/openssl/crypto.h ../../include/openssl/lhash.h
-lhash.o: ../../include/openssl/opensslv.h ../../include/openssl/stack.h
+lhash.o: ../../include/openssl/opensslv.h ../../include/openssl/safestack.h
+lhash.o: ../../include/openssl/stack.h
Index: opensa/openssl/crypto/md2/makefile.ssl
diff -u opensa/openssl/crypto/md2/makefile.ssl:1.1 
opensa/openssl/crypto/md2/makefile.ssl:1.2
--- opensa/openssl/crypto/md2/makefile.ssl:1.1  Tue Jan 25 23:28:18 2000
+++ opensa/openssl/crypto/md2/makefile.ssl      Thu Mar  2 21:11:55 2000
@@ -84,5 +84,5 @@
 md2_one.o: ../../include/openssl/crypto.h ../../include/openssl/e_os.h
 md2_one.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
 md2_one.o: ../../include/openssl/md2.h ../../include/openssl/opensslconf.h
-md2_one.o: ../../include/openssl/opensslv.h ../../include/openssl/stack.h
-md2_one.o: ../cryptlib.h
+md2_one.o: ../../include/openssl/opensslv.h ../../include/openssl/safestack.h
+md2_one.o: ../../include/openssl/stack.h ../cryptlib.h
Index: opensa/openssl/crypto/md2/md2.h
diff -u opensa/openssl/crypto/md2/md2.h:1.1 opensa/openssl/crypto/md2/md2.h:1.2
--- opensa/openssl/crypto/md2/md2.h:1.1 Tue Jan 25 23:28:18 2000
+++ opensa/openssl/crypto/md2/md2.h     Thu Mar  2 21:11:55 2000
@@ -81,9 +81,9 @@
 
 const char *MD2_options(void);
 void MD2_Init(MD2_CTX *c);
-void MD2_Update(MD2_CTX *c, register unsigned char *data, unsigned long len);
+void MD2_Update(MD2_CTX *c, const unsigned char *data, unsigned long len);
 void MD2_Final(unsigned char *md, MD2_CTX *c);
-unsigned char *MD2(unsigned char *d, unsigned long n,unsigned char *md);
+unsigned char *MD2(const unsigned char *d, unsigned long n,unsigned char *md);
 #ifdef  __cplusplus
 }
 #endif
Index: opensa/openssl/crypto/md2/md2_dgst.c
diff -u opensa/openssl/crypto/md2/md2_dgst.c:1.1 
opensa/openssl/crypto/md2/md2_dgst.c:1.2
--- opensa/openssl/crypto/md2/md2_dgst.c:1.1    Tue Jan 25 23:28:18 2000
+++ opensa/openssl/crypto/md2/md2_dgst.c        Thu Mar  2 21:11:55 2000
@@ -69,9 +69,9 @@
 
 #define UCHAR  unsigned char
 
-static void md2_block(MD2_CTX *c, unsigned char *d);
+static void md2_block(MD2_CTX *c, const unsigned char *d);
 /* The magic S table - I have converted it to hex since it is
- * basicaly just a random byte string. */
+ * basically just a random byte string. */
 static MD2_INT S[256]={
        0x29, 0x2E, 0x43, 0xC9, 0xA2, 0xD8, 0x7C, 0x01,
        0x3D, 0x36, 0x54, 0xA1, 0xEC, 0xF0, 0x06, 0x13,
@@ -123,7 +123,7 @@
        memset(c->data,0,MD2_BLOCK);
        }
 
-void MD2_Update(MD2_CTX *c, register unsigned char *data, unsigned long len)
+void MD2_Update(MD2_CTX *c, const unsigned char *data, unsigned long len)
        {
        register UCHAR *p;
 
@@ -161,7 +161,7 @@
        c->num=(int)len;
        }
 
-static void md2_block(MD2_CTX *c, unsigned char *d)
+static void md2_block(MD2_CTX *c, const unsigned char *d)
        {
        register MD2_INT t,*sp1,*sp2;
        register int i,j;
Index: opensa/openssl/crypto/md2/md2_one.c
diff -u opensa/openssl/crypto/md2/md2_one.c:1.1 opensa/openssl/crypto/md2/md2_one.c:1.2
--- opensa/openssl/crypto/md2/md2_one.c:1.1     Tue Jan 25 23:28:18 2000
+++ opensa/openssl/crypto/md2/md2_one.c Thu Mar  2 21:11:55 2000
@@ -63,7 +63,7 @@
 /* This is a separate file so that #defines in cryptlib.h can
  * map my MD functions to different names */
 
-unsigned char *MD2(unsigned char *d, unsigned long n, unsigned char *md)
+unsigned char *MD2(const unsigned char *d, unsigned long n, unsigned char *md)
        {
        MD2_CTX c;
        static unsigned char m[MD2_DIGEST_LENGTH];
Index: opensa/openssl/crypto/md2/md2test.c
diff -u opensa/openssl/crypto/md2/md2test.c:1.1 opensa/openssl/crypto/md2/md2test.c:1.2
--- opensa/openssl/crypto/md2/md2test.c:1.1     Tue Jan 25 23:28:18 2000
+++ opensa/openssl/crypto/md2/md2test.c Thu Mar  2 21:11:55 2000
@@ -73,7 +73,7 @@
 #include <openssl/ebcdic.h>
 #endif
 
-char *test[]={
+static char *test[]={
        "",
        "a",
        "abc",
@@ -84,7 +84,7 @@
        NULL,
        };
 
-char *ret[]={
+static char *ret[]={
        "8350e5a3e24c153df2275c9f80692773",
        "32ec01ec4a6dac72c0ab96fb34c0b5d1",
        "da853b0d3f88d99b30283a69e6ded6bb",
Index: opensa/openssl/crypto/md5/makefile.ssl
diff -u opensa/openssl/crypto/md5/makefile.ssl:1.1 
opensa/openssl/crypto/md5/makefile.ssl:1.2
--- opensa/openssl/crypto/md5/makefile.ssl:1.1  Tue Jan 25 23:27:52 2000
+++ opensa/openssl/crypto/md5/makefile.ssl      Thu Mar  2 21:11:55 2000
@@ -19,6 +19,13 @@
 MD5_ASM_OBJ=
 
 CFLAGS= $(INCLUDES) $(CFLAG)
+
+# We let the C compiler driver to take care of .s files. This is done in
+# order to be excused from maintaining a separate set of architecture
+# dependent assembler flags. E.g. if you throw -mcpu=ultrasparc at SPARC
+# gcc, then the driver will automatically translate it to -xarch=v8plus
+# and pass it down to assembler.
+AS=$(CC) -c
 ASFLAGS=$(CFLAGS)
 
 GENERAL=Makefile
@@ -77,7 +84,7 @@
 # if they didn't bother to upgrade GNU assembler. Such users should
 # not choose this option, but be adviced to *remove* GNU assembler
 # or upgrade it.
-sm/md5-sparcv8plus-gcc27.o: asm/md5-sparcv9.S
+asm/md5-sparcv8plus-gcc27.o: asm/md5-sparcv9.S
        $(CC) $(ASFLAGS) -DMD5_BLOCK_DATA_ORDER -E asm/md5-sparcv9.S | \
                /usr/ccs/bin/as -xarch=v8plus - -o asm/md5-sparcv8plus-gcc27.o
 
Index: opensa/openssl/crypto/md5/md5.h
diff -u opensa/openssl/crypto/md5/md5.h:1.1 opensa/openssl/crypto/md5/md5.h:1.2
--- opensa/openssl/crypto/md5/md5.h:1.1 Tue Jan 25 23:27:52 2000
+++ opensa/openssl/crypto/md5/md5.h     Thu Mar  2 21:11:55 2000
@@ -103,9 +103,9 @@
        } MD5_CTX;
 
 void MD5_Init(MD5_CTX *c);
-void MD5_Update(MD5_CTX *c, const unsigned char *data, unsigned long len);
+void MD5_Update(MD5_CTX *c, const void *data, unsigned long len);
 void MD5_Final(unsigned char *md, MD5_CTX *c);
-unsigned char *MD5(unsigned char *d, unsigned long n, unsigned char *md);
+unsigned char *MD5(const unsigned char *d, unsigned long n, unsigned char *md);
 void MD5_Transform(MD5_CTX *c, const unsigned char *b);
 #ifdef  __cplusplus
 }
Index: opensa/openssl/crypto/md5/md5_dgst.c
diff -u opensa/openssl/crypto/md5/md5_dgst.c:1.1 
opensa/openssl/crypto/md5/md5_dgst.c:1.2
--- opensa/openssl/crypto/md5/md5_dgst.c:1.1    Tue Jan 25 23:27:52 2000
+++ opensa/openssl/crypto/md5/md5_dgst.c        Thu Mar  2 21:11:55 2000
@@ -60,7 +60,7 @@
 #include "md5_locl.h"
 #include <openssl/opensslv.h>
 
-char *MD5_version="MD5" OPENSSL_VERSION_PTEXT;
+const char *MD5_version="MD5" OPENSSL_VERSION_PTEXT;
 
 /* Implemented from RFC1321 The MD5 Message-Digest Algorithm
  */
@@ -186,6 +186,9 @@
 #endif
 
 #ifndef md5_block_data_order
+#ifdef X
+#undef X
+#endif
 void md5_block_data_order (MD5_CTX *c, const void *data_, int num)
        {
        const unsigned char *data=data_;
@@ -204,16 +207,15 @@
         *
         *                              <[EMAIL PROTECTED]>
         */
-       MD5_LONG X[MD5_LBLOCK];
-       /*
-        * In case you wonder why don't I use c->data for this.
-        * RISCs usually have a handful of registers and if X is
-        * declared as automatic array good optimizing compiler
-        * shall accomodate at least part of it in register bank
-        * instead of memory.
-        *
-        *                              <[EMAIL PROTECTED]>
-        */
+#ifndef MD32_XARRAY
+       /* See comment in crypto/sha/sha_locl.h for details. */
+       unsigned long   XX0, XX1, XX2, XX3, XX4, XX5, XX6, XX7,
+                       XX8, XX9,XX10,XX11,XX12,XX13,XX14,XX15;
+# define X(i)  XX##i
+#else
+       MD5_LONG XX[MD5_LBLOCK];
+# define X(i)  XX[i]
+#endif
 
        A=c->A;
        B=c->B;
@@ -222,75 +224,75 @@
 
        for (;num--;)
                {
-       HOST_c2l(data,l); X[ 0]=l;              HOST_c2l(data,l); X[ 1]=l;
+       HOST_c2l(data,l); X( 0)=l;              HOST_c2l(data,l); X( 1)=l;
        /* Round 0 */
-       R0(A,B,C,D,X[ 0], 7,0xd76aa478L);       HOST_c2l(data,l); X[ 2]=l;
-       R0(D,A,B,C,X[ 1],12,0xe8c7b756L);       HOST_c2l(data,l); X[ 3]=l;
-       R0(C,D,A,B,X[ 2],17,0x242070dbL);       HOST_c2l(data,l); X[ 4]=l;
-       R0(B,C,D,A,X[ 3],22,0xc1bdceeeL);       HOST_c2l(data,l); X[ 5]=l;
-       R0(A,B,C,D,X[ 4], 7,0xf57c0fafL);       HOST_c2l(data,l); X[ 6]=l;
-       R0(D,A,B,C,X[ 5],12,0x4787c62aL);       HOST_c2l(data,l); X[ 7]=l;
-       R0(C,D,A,B,X[ 6],17,0xa8304613L);       HOST_c2l(data,l); X[ 8]=l;
-       R0(B,C,D,A,X[ 7],22,0xfd469501L);       HOST_c2l(data,l); X[ 9]=l;
-       R0(A,B,C,D,X[ 8], 7,0x698098d8L);       HOST_c2l(data,l); X[10]=l;
-       R0(D,A,B,C,X[ 9],12,0x8b44f7afL);       HOST_c2l(data,l); X[11]=l;
-       R0(C,D,A,B,X[10],17,0xffff5bb1L);       HOST_c2l(data,l); X[12]=l;
-       R0(B,C,D,A,X[11],22,0x895cd7beL);       HOST_c2l(data,l); X[13]=l;
-       R0(A,B,C,D,X[12], 7,0x6b901122L);       HOST_c2l(data,l); X[14]=l;
-       R0(D,A,B,C,X[13],12,0xfd987193L);       HOST_c2l(data,l); X[15]=l;
-       R0(C,D,A,B,X[14],17,0xa679438eL);
-       R0(B,C,D,A,X[15],22,0x49b40821L);
+       R0(A,B,C,D,X( 0), 7,0xd76aa478L);       HOST_c2l(data,l); X( 2)=l;
+       R0(D,A,B,C,X( 1),12,0xe8c7b756L);       HOST_c2l(data,l); X( 3)=l;
+       R0(C,D,A,B,X( 2),17,0x242070dbL);       HOST_c2l(data,l); X( 4)=l;
+       R0(B,C,D,A,X( 3),22,0xc1bdceeeL);       HOST_c2l(data,l); X( 5)=l;
+       R0(A,B,C,D,X( 4), 7,0xf57c0fafL);       HOST_c2l(data,l); X( 6)=l;
+       R0(D,A,B,C,X( 5),12,0x4787c62aL);       HOST_c2l(data,l); X( 7)=l;
+       R0(C,D,A,B,X( 6),17,0xa8304613L);       HOST_c2l(data,l); X( 8)=l;
+       R0(B,C,D,A,X( 7),22,0xfd469501L);       HOST_c2l(data,l); X( 9)=l;
+       R0(A,B,C,D,X( 8), 7,0x698098d8L);       HOST_c2l(data,l); X(10)=l;
+       R0(D,A,B,C,X( 9),12,0x8b44f7afL);       HOST_c2l(data,l); X(11)=l;
+       R0(C,D,A,B,X(10),17,0xffff5bb1L);       HOST_c2l(data,l); X(12)=l;
+       R0(B,C,D,A,X(11),22,0x895cd7beL);       HOST_c2l(data,l); X(13)=l;
+       R0(A,B,C,D,X(12), 7,0x6b901122L);       HOST_c2l(data,l); X(14)=l;
+       R0(D,A,B,C,X(13),12,0xfd987193L);       HOST_c2l(data,l); X(15)=l;
+       R0(C,D,A,B,X(14),17,0xa679438eL);
+       R0(B,C,D,A,X(15),22,0x49b40821L);
        /* Round 1 */
-       R1(A,B,C,D,X[ 1], 5,0xf61e2562L);
-       R1(D,A,B,C,X[ 6], 9,0xc040b340L);
-       R1(C,D,A,B,X[11],14,0x265e5a51L);
-       R1(B,C,D,A,X[ 0],20,0xe9b6c7aaL);
-       R1(A,B,C,D,X[ 5], 5,0xd62f105dL);
-       R1(D,A,B,C,X[10], 9,0x02441453L);
-       R1(C,D,A,B,X[15],14,0xd8a1e681L);
-       R1(B,C,D,A,X[ 4],20,0xe7d3fbc8L);
-       R1(A,B,C,D,X[ 9], 5,0x21e1cde6L);
-       R1(D,A,B,C,X[14], 9,0xc33707d6L);
-       R1(C,D,A,B,X[ 3],14,0xf4d50d87L);
-       R1(B,C,D,A,X[ 8],20,0x455a14edL);
-       R1(A,B,C,D,X[13], 5,0xa9e3e905L);
-       R1(D,A,B,C,X[ 2], 9,0xfcefa3f8L);
-       R1(C,D,A,B,X[ 7],14,0x676f02d9L);
-       R1(B,C,D,A,X[12],20,0x8d2a4c8aL);
+       R1(A,B,C,D,X( 1), 5,0xf61e2562L);
+       R1(D,A,B,C,X( 6), 9,0xc040b340L);
+       R1(C,D,A,B,X(11),14,0x265e5a51L);
+       R1(B,C,D,A,X( 0),20,0xe9b6c7aaL);
+       R1(A,B,C,D,X( 5), 5,0xd62f105dL);
+       R1(D,A,B,C,X(10), 9,0x02441453L);
+       R1(C,D,A,B,X(15),14,0xd8a1e681L);
+       R1(B,C,D,A,X( 4),20,0xe7d3fbc8L);
+       R1(A,B,C,D,X( 9), 5,0x21e1cde6L);
+       R1(D,A,B,C,X(14), 9,0xc33707d6L);
+       R1(C,D,A,B,X( 3),14,0xf4d50d87L);
+       R1(B,C,D,A,X( 8),20,0x455a14edL);
+       R1(A,B,C,D,X(13), 5,0xa9e3e905L);
+       R1(D,A,B,C,X( 2), 9,0xfcefa3f8L);
+       R1(C,D,A,B,X( 7),14,0x676f02d9L);
+       R1(B,C,D,A,X(12),20,0x8d2a4c8aL);
        /* Round 2 */
-       R2(A,B,C,D,X[ 5], 4,0xfffa3942L);
-       R2(D,A,B,C,X[ 8],11,0x8771f681L);
-       R2(C,D,A,B,X[11],16,0x6d9d6122L);
-       R2(B,C,D,A,X[14],23,0xfde5380cL);
-       R2(A,B,C,D,X[ 1], 4,0xa4beea44L);
-       R2(D,A,B,C,X[ 4],11,0x4bdecfa9L);
-       R2(C,D,A,B,X[ 7],16,0xf6bb4b60L);
-       R2(B,C,D,A,X[10],23,0xbebfbc70L);
-       R2(A,B,C,D,X[13], 4,0x289b7ec6L);
-       R2(D,A,B,C,X[ 0],11,0xeaa127faL);
-       R2(C,D,A,B,X[ 3],16,0xd4ef3085L);
-       R2(B,C,D,A,X[ 6],23,0x04881d05L);
-       R2(A,B,C,D,X[ 9], 4,0xd9d4d039L);
-       R2(D,A,B,C,X[12],11,0xe6db99e5L);
-       R2(C,D,A,B,X[15],16,0x1fa27cf8L);
-       R2(B,C,D,A,X[ 2],23,0xc4ac5665L);
+       R2(A,B,C,D,X( 5), 4,0xfffa3942L);
+       R2(D,A,B,C,X( 8),11,0x8771f681L);
+       R2(C,D,A,B,X(11),16,0x6d9d6122L);
+       R2(B,C,D,A,X(14),23,0xfde5380cL);
+       R2(A,B,C,D,X( 1), 4,0xa4beea44L);
+       R2(D,A,B,C,X( 4),11,0x4bdecfa9L);
+       R2(C,D,A,B,X( 7),16,0xf6bb4b60L);
+       R2(B,C,D,A,X(10),23,0xbebfbc70L);
+       R2(A,B,C,D,X(13), 4,0x289b7ec6L);
+       R2(D,A,B,C,X( 0),11,0xeaa127faL);
+       R2(C,D,A,B,X( 3),16,0xd4ef3085L);
+       R2(B,C,D,A,X( 6),23,0x04881d05L);
+       R2(A,B,C,D,X( 9), 4,0xd9d4d039L);
+       R2(D,A,B,C,X(12),11,0xe6db99e5L);
+       R2(C,D,A,B,X(15),16,0x1fa27cf8L);
+       R2(B,C,D,A,X( 2),23,0xc4ac5665L);
        /* Round 3 */
-       R3(A,B,C,D,X[ 0], 6,0xf4292244L);
-       R3(D,A,B,C,X[ 7],10,0x432aff97L);
-       R3(C,D,A,B,X[14],15,0xab9423a7L);
-       R3(B,C,D,A,X[ 5],21,0xfc93a039L);
-       R3(A,B,C,D,X[12], 6,0x655b59c3L);
-       R3(D,A,B,C,X[ 3],10,0x8f0ccc92L);
-       R3(C,D,A,B,X[10],15,0xffeff47dL);
-       R3(B,C,D,A,X[ 1],21,0x85845dd1L);
-       R3(A,B,C,D,X[ 8], 6,0x6fa87e4fL);
-       R3(D,A,B,C,X[15],10,0xfe2ce6e0L);
-       R3(C,D,A,B,X[ 6],15,0xa3014314L);
-       R3(B,C,D,A,X[13],21,0x4e0811a1L);
-       R3(A,B,C,D,X[ 4], 6,0xf7537e82L);
-       R3(D,A,B,C,X[11],10,0xbd3af235L);
-       R3(C,D,A,B,X[ 2],15,0x2ad7d2bbL);
-       R3(B,C,D,A,X[ 9],21,0xeb86d391L);
+       R3(A,B,C,D,X( 0), 6,0xf4292244L);
+       R3(D,A,B,C,X( 7),10,0x432aff97L);
+       R3(C,D,A,B,X(14),15,0xab9423a7L);
+       R3(B,C,D,A,X( 5),21,0xfc93a039L);
+       R3(A,B,C,D,X(12), 6,0x655b59c3L);
+       R3(D,A,B,C,X( 3),10,0x8f0ccc92L);
+       R3(C,D,A,B,X(10),15,0xffeff47dL);
+       R3(B,C,D,A,X( 1),21,0x85845dd1L);
+       R3(A,B,C,D,X( 8), 6,0x6fa87e4fL);
+       R3(D,A,B,C,X(15),10,0xfe2ce6e0L);
+       R3(C,D,A,B,X( 6),15,0xa3014314L);
+       R3(B,C,D,A,X(13),21,0x4e0811a1L);
+       R3(A,B,C,D,X( 4), 6,0xf7537e82L);
+       R3(D,A,B,C,X(11),10,0xbd3af235L);
+       R3(C,D,A,B,X( 2),15,0x2ad7d2bbL);
+       R3(B,C,D,A,X( 9),21,0xeb86d391L);
 
        A = c->A += A;
        B = c->B += B;
Index: opensa/openssl/crypto/md5/md5_locl.h
diff -u opensa/openssl/crypto/md5/md5_locl.h:1.1 
opensa/openssl/crypto/md5/md5_locl.h:1.2
--- opensa/openssl/crypto/md5/md5_locl.h:1.1    Tue Jan 25 23:27:52 2000
+++ opensa/openssl/crypto/md5/md5_locl.h        Thu Mar  2 21:11:55 2000
@@ -66,7 +66,7 @@
 #endif
 
 #ifdef MD5_ASM
-# if defined(__i386) || defined(_M_IX86)
+# if defined(__i386) || defined(_M_IX86) || defined(__INTEL__)
 #  define md5_block_host_order md5_block_asm_host_order
 # elif defined(__sparc) && defined(ULTRASPARC)
    void md5_block_asm_data_order_aligned (MD5_CTX *c, const MD5_LONG *p,int num);
@@ -77,11 +77,11 @@
 void md5_block_host_order (MD5_CTX *c, const void *p,int num);
 void md5_block_data_order (MD5_CTX *c, const void *p,int num);
 
-#if defined(__i386) || defined(_M_IX86)
+#if defined(__i386) || defined(_M_IX86) || defined(__INTEL__)
 /*
  * *_block_host_order is expected to handle aligned data while
  * *_block_data_order - unaligned. As algorithm and host (x86)
- * are in this case of the same "endianess" these two are
+ * are in this case of the same "endianness" these two are
  * otherwise indistinguishable. But normally you don't want to
  * call the same function because unaligned access in places
  * where alignment is expected is usually a "Bad Thing". Indeed,
@@ -112,6 +112,13 @@
 #define HASH_UPDATE            MD5_Update
 #define HASH_TRANSFORM         MD5_Transform
 #define HASH_FINAL             MD5_Final
+#define        HASH_MAKE_STRING(c,s)   do {    \
+       unsigned long ll;               \
+       ll=(c)->A; HOST_l2c(ll,(s));    \
+       ll=(c)->B; HOST_l2c(ll,(s));    \
+       ll=(c)->C; HOST_l2c(ll,(s));    \
+       ll=(c)->D; HOST_l2c(ll,(s));    \
+       } while (0)
 #define HASH_BLOCK_HOST_ORDER  md5_block_host_order
 #if !defined(L_ENDIAN) || defined(md5_block_data_order)
 #define        HASH_BLOCK_DATA_ORDER   md5_block_data_order
@@ -119,7 +126,7 @@
  * Little-endians (Intel and Alpha) feel better without this.
  * It looks like memcpy does better job than generic
  * md5_block_data_order on copying-n-aligning input data.
- * But franlky speaking I didn't expect such result on Alpha.
+ * But frankly speaking I didn't expect such result on Alpha.
  * On the other hand I've got this with egcs-1.0.2 and if
  * program is compiled with another (better?) compiler it
  * might turn out other way around.
@@ -140,7 +147,7 @@
 */
 
 /* As pointed out by Wei Dai <[EMAIL PROTECTED]>, the above can be
- * simplified to the code below.  Wei attributes these optimisations
+ * simplified to the code below.  Wei attributes these optimizations
  * to Peter Gutmann's SHS code, and he attributes it to Rich Schroeppel.
  */
 #define        F(b,c,d)        ((((c) ^ (d)) & (b)) ^ (d))
Index: opensa/openssl/crypto/md5/md5_one.c
diff -u opensa/openssl/crypto/md5/md5_one.c:1.1 opensa/openssl/crypto/md5/md5_one.c:1.2
--- opensa/openssl/crypto/md5/md5_one.c:1.1     Tue Jan 25 23:27:52 2000
+++ opensa/openssl/crypto/md5/md5_one.c Thu Mar  2 21:11:55 2000
@@ -64,7 +64,7 @@
 #include <openssl/ebcdic.h>
 #endif
 
-unsigned char *MD5(unsigned char *d, unsigned long n, unsigned char *md)
+unsigned char *MD5(const unsigned char *d, unsigned long n, unsigned char *md)
        {
        MD5_CTX c;
        static unsigned char m[MD5_DIGEST_LENGTH];
Index: opensa/openssl/crypto/md5/md5test.c
diff -u opensa/openssl/crypto/md5/md5test.c:1.1 opensa/openssl/crypto/md5/md5test.c:1.2
--- opensa/openssl/crypto/md5/md5test.c:1.1     Tue Jan 25 23:27:53 2000
+++ opensa/openssl/crypto/md5/md5test.c Thu Mar  2 21:11:55 2000
@@ -69,7 +69,7 @@
 #else
 #include <openssl/md5.h>
 
-char *test[]={
+static char *test[]={
        "",
        "a",
        "abc",
@@ -80,7 +80,7 @@
        NULL,
        };
 
-char *ret[]={
+static char *ret[]={
        "d41d8cd98f00b204e9800998ecf8427e",
        "0cc175b9c0f1b6a831c399e269772661",
        "900150983cd24fb0d6963f7d28e17f72",
Index: opensa/openssl/crypto/mdc2/makefile.ssl
diff -u opensa/openssl/crypto/mdc2/makefile.ssl:1.1 
opensa/openssl/crypto/mdc2/makefile.ssl:1.2
--- opensa/openssl/crypto/mdc2/makefile.ssl:1.1 Tue Jan 25 23:27:37 2000
+++ opensa/openssl/crypto/mdc2/makefile.ssl     Thu Mar  2 21:11:55 2000
@@ -83,7 +83,7 @@
 mdc2_one.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h
 mdc2_one.o: ../../include/openssl/err.h ../../include/openssl/mdc2.h
 mdc2_one.o: ../../include/openssl/opensslconf.h
-mdc2_one.o: ../../include/openssl/opensslv.h ../../include/openssl/stack.h
-mdc2_one.o: ../cryptlib.h
+mdc2_one.o: ../../include/openssl/opensslv.h ../../include/openssl/safestack.h
+mdc2_one.o: ../../include/openssl/stack.h ../cryptlib.h
 mdc2dgst.o: ../../include/openssl/des.h ../../include/openssl/e_os2.h
 mdc2dgst.o: ../../include/openssl/mdc2.h ../../include/openssl/opensslconf.h
Index: opensa/openssl/crypto/mdc2/mdc2.h
diff -u opensa/openssl/crypto/mdc2/mdc2.h:1.1 opensa/openssl/crypto/mdc2/mdc2.h:1.2
--- opensa/openssl/crypto/mdc2/mdc2.h:1.1       Tue Jan 25 23:27:37 2000
+++ opensa/openssl/crypto/mdc2/mdc2.h   Thu Mar  2 21:11:55 2000
@@ -82,9 +82,10 @@
 
 
 void MDC2_Init(MDC2_CTX *c);
-void MDC2_Update(MDC2_CTX *c, unsigned char *data, unsigned long len);
+void MDC2_Update(MDC2_CTX *c, const unsigned char *data, unsigned long len);
 void MDC2_Final(unsigned char *md, MDC2_CTX *c);
-unsigned char *MDC2(unsigned char *d, unsigned long n, unsigned char *md);
+unsigned char *MDC2(const unsigned char *d, unsigned long n,
+       unsigned char *md);
 
 #ifdef  __cplusplus
 }
Index: opensa/openssl/crypto/mdc2/mdc2_one.c
diff -u opensa/openssl/crypto/mdc2/mdc2_one.c:1.1 
opensa/openssl/crypto/mdc2/mdc2_one.c:1.2
--- opensa/openssl/crypto/mdc2/mdc2_one.c:1.1   Tue Jan 25 23:27:37 2000
+++ opensa/openssl/crypto/mdc2/mdc2_one.c       Thu Mar  2 21:11:55 2000
@@ -60,7 +60,7 @@
 #include "cryptlib.h"
 #include <openssl/mdc2.h>
 
-unsigned char *MDC2(unsigned char *d, unsigned long n, unsigned char *md)
+unsigned char *MDC2(const unsigned char *d, unsigned long n, unsigned char *md)
        {
        MDC2_CTX c;
        static unsigned char m[MDC2_DIGEST_LENGTH];
Index: opensa/openssl/crypto/mdc2/mdc2dgst.c
diff -u opensa/openssl/crypto/mdc2/mdc2dgst.c:1.1 
opensa/openssl/crypto/mdc2/mdc2dgst.c:1.2
--- opensa/openssl/crypto/mdc2/mdc2dgst.c:1.1   Tue Jan 25 23:27:37 2000
+++ opensa/openssl/crypto/mdc2/mdc2dgst.c       Thu Mar  2 21:11:55 2000
@@ -74,7 +74,7 @@
                        *((c)++)=(unsigned char)(((l)>>16L)&0xff), \
                        *((c)++)=(unsigned char)(((l)>>24L)&0xff))
 
-static void mdc2_body(MDC2_CTX *c, unsigned char *in, unsigned int len);
+static void mdc2_body(MDC2_CTX *c, const unsigned char *in, unsigned int len);
 void MDC2_Init(MDC2_CTX *c)
        {
        c->num=0;
@@ -83,7 +83,7 @@
        memset(&(c->hh[0]),0x25,MDC2_BLOCK);
        }
 
-void MDC2_Update(MDC2_CTX *c, register unsigned char *in, unsigned long len)
+void MDC2_Update(MDC2_CTX *c, const unsigned char *in, unsigned long len)
        {
        int i,j;
 
@@ -118,7 +118,7 @@
                }
        }
 
-static void mdc2_body(MDC2_CTX *c, unsigned char *in, unsigned int len)
+static void mdc2_body(MDC2_CTX *c, const unsigned char *in, unsigned int len)
        {
        register DES_LONG tin0,tin1;
        register DES_LONG ttin0,ttin1;
@@ -135,11 +135,11 @@
                c->hh[0]=(c->hh[0]&0x9f)|0x20;
 
                des_set_odd_parity(&c->h);
-               des_set_key(&c->h,k);
+               des_set_key_unchecked(&c->h,k);
                des_encrypt(d,k,1);
 
                des_set_odd_parity(&c->hh);
-               des_set_key(&c->hh,k);
+               des_set_key_unchecked(&c->hh,k);
                des_encrypt(dd,k,1);
 
                ttin0=tin0^dd[0];
Index: opensa/openssl/crypto/mdc2/mdc2test.c
diff -u opensa/openssl/crypto/mdc2/mdc2test.c:1.1 
opensa/openssl/crypto/mdc2/mdc2test.c:1.2
--- opensa/openssl/crypto/mdc2/mdc2test.c:1.1   Tue Jan 25 23:27:37 2000
+++ opensa/openssl/crypto/mdc2/mdc2test.c       Thu Mar  2 21:11:55 2000
@@ -60,7 +60,7 @@
 #include <stdlib.h>
 #include <string.h>
 
-#ifdef NO_DES
+#if defined(NO_DES) && !defined(NO_MDC2)
 #define NO_MDC2
 #endif
 
Index: opensa/openssl/crypto/objects/makefile.ssl
diff -u opensa/openssl/crypto/objects/makefile.ssl:1.1 
opensa/openssl/crypto/objects/makefile.ssl:1.2
--- opensa/openssl/crypto/objects/makefile.ssl:1.1      Tue Jan 25 23:27:13 2000
+++ opensa/openssl/crypto/objects/makefile.ssl  Thu Mar  2 21:11:56 2000
@@ -37,9 +37,6 @@
 
 all:   obj_dat.h lib
 
-obj_dat.h: objects.h obj_dat.pl
-       $(PERL) ./obj_dat.pl < objects.h > obj_dat.h
-
 lib:   $(LIBOBJ)
        $(AR) $(LIB) $(LIBOBJ)
        $(RANLIB) $(LIB)
Index: opensa/openssl/crypto/objects/o_names.c
diff -u opensa/openssl/crypto/objects/o_names.c:1.1 
opensa/openssl/crypto/objects/o_names.c:1.2
--- opensa/openssl/crypto/objects/o_names.c:1.1 Tue Jan 25 23:27:13 2000
+++ opensa/openssl/crypto/objects/o_names.c     Thu Mar  2 21:11:56 2000
@@ -4,16 +4,26 @@
 
 #include <openssl/lhash.h>
 #include <openssl/objects.h>
+#include <openssl/safestack.h>
 
 /* I use the ex_data stuff to manage the identifiers for the obj_name_types
  * that applications may define.  I only really use the free function field.
  */
 static LHASH *names_lh=NULL;
 static int names_type_num=OBJ_NAME_TYPE_NUM;
-static STACK *names_cmp=NULL;
-static STACK *names_hash=NULL;
-static STACK *names_free=NULL;
 
+typedef struct name_funcs_st
+       {
+       unsigned long (*hash_func)();
+       int (*cmp_func)();
+       void (*free_func)();
+       } NAME_FUNCS;
+
+DECLARE_STACK_OF(NAME_FUNCS)
+IMPLEMENT_STACK_OF(NAME_FUNCS)
+
+STACK_OF(NAME_FUNCS) *name_funcs_stack;
+
 static unsigned long obj_name_hash(OBJ_NAME *a);
 static int obj_name_cmp(OBJ_NAME *a,OBJ_NAME *b);
 
@@ -31,51 +41,57 @@
        {
        int ret;
        int i;
+       NAME_FUNCS *name_funcs;
 
-       if (names_free == NULL)
+       if (name_funcs_stack == NULL)
                {
                MemCheck_off();
-               names_hash=sk_new_null();
-               names_cmp=sk_new_null();
-               names_free=sk_new_null();
+               name_funcs_stack=sk_NAME_FUNCS_new_null();
                MemCheck_on();
                }
-       if ((names_free == NULL) || (names_hash == NULL) || (names_cmp == NULL))
+       if ((name_funcs_stack == NULL))
                {
                /* ERROR */
                return(0);
                }
        ret=names_type_num;
        names_type_num++;
-       for (i=sk_num(names_free); i<names_type_num; i++)
+       for (i=sk_NAME_FUNCS_num(name_funcs_stack); i<names_type_num; i++)
                {
                MemCheck_off();
-               sk_push(names_hash,(char *)strcmp);
-               sk_push(names_cmp,(char *)lh_strhash);
-               sk_push(names_free,NULL);
+               name_funcs = Malloc(sizeof(NAME_FUNCS));
+               name_funcs->hash_func = lh_strhash;
+               name_funcs->cmp_func = (int (*)())strcmp;
+               name_funcs->free_func = 0; /* NULL is often declared to
+                                           * ((void *)0), which according
+                                           * to Compaq C is not really
+                                           * compatible with a function
+                                           * pointer.  -- Richard Levitte*/
+               sk_NAME_FUNCS_push(name_funcs_stack,name_funcs);
                MemCheck_on();
                }
+       name_funcs = sk_NAME_FUNCS_value(name_funcs_stack, ret);
        if (hash_func != NULL)
-               sk_set(names_hash,ret,(char *)hash_func);
+               name_funcs->hash_func = hash_func;
        if (cmp_func != NULL)
-               sk_set(names_cmp,ret,(char *)cmp_func);
+               name_funcs->cmp_func = cmp_func;
        if (free_func != NULL)
-               sk_set(names_free,ret,(char *)free_func);
+               name_funcs->free_func = free_func;
        return(ret);
        }
 
 static int obj_name_cmp(OBJ_NAME *a, OBJ_NAME *b)
        {
        int ret;
-       int (*cmp)();
 
        ret=a->type-b->type;
        if (ret == 0)
                {
-               if ((names_cmp != NULL) && (sk_num(names_cmp) > a->type))
+               if ((name_funcs_stack != NULL)
+                       && (sk_NAME_FUNCS_num(name_funcs_stack) > a->type))
                        {
-                       cmp=(int (*)())sk_value(names_cmp,a->type);
-                       ret=cmp(a->name,b->name);
+                       ret=sk_NAME_FUNCS_value(name_funcs_stack,a->type)
+                               ->cmp_func(a->name,b->name);
                        }
                else
                        ret=strcmp(a->name,b->name);
@@ -86,12 +102,11 @@
 static unsigned long obj_name_hash(OBJ_NAME *a)
        {
        unsigned long ret;
-       unsigned long (*hash)();
 
-       if ((names_hash != NULL) && (sk_num(names_hash) > a->type))
+       if ((name_funcs_stack != NULL) && (sk_NAME_FUNCS_num(name_funcs_stack) > 
+a->type))
                {
-               hash=(unsigned long (*)())sk_value(names_hash,a->type);
-               ret=hash(a->name);
+               ret=sk_NAME_FUNCS_value(name_funcs_stack,a->type)
+                       ->hash_func(a->name);
                }
        else
                {
@@ -117,7 +132,7 @@
 
        for (;;)
                {
-               ret=(OBJ_NAME *)lh_retrieve(names_lh,(char *)&on);
+               ret=(OBJ_NAME *)lh_retrieve(names_lh,&on);
                if (ret == NULL) return(NULL);
                if ((ret->alias) && !alias)
                        {
@@ -133,7 +148,6 @@
 
 int OBJ_NAME_add(const char *name, int type, const char *data)
        {
-       void (*f)();
        OBJ_NAME *onp,*ret;
        int alias;
 
@@ -154,16 +168,20 @@
        onp->type=type;
        onp->data=data;
 
-       ret=(OBJ_NAME *)lh_insert(names_lh,(char *)onp);
+       ret=(OBJ_NAME *)lh_insert(names_lh,onp);
        if (ret != NULL)
                {
                /* free things */
-               if ((names_free != NULL) && (sk_num(names_free) > ret->type))
+               if ((name_funcs_stack != NULL) && (sk_NAME_FUNCS_num(name_funcs_stack) 
+> ret->type))
                        {
-                       f=(void (*)())sk_value(names_free,ret->type);
-                       f(ret->name,ret->type,ret->data);
+                       /* XXX: I'm not sure I understand why the free
+                        * function should get three arguments...
+                        * -- Richard Levitte
+                        */
+                       sk_NAME_FUNCS_value(name_funcs_stack,ret->type)
+                               ->free_func(ret->name,ret->type,ret->data);
                        }
-               Free((char *)ret);
+               Free(ret);
                }
        else
                {
@@ -179,23 +197,26 @@
 int OBJ_NAME_remove(const char *name, int type)
        {
        OBJ_NAME on,*ret;
-       void (*f)();
 
        if (names_lh == NULL) return(0);
 
        type&= ~OBJ_NAME_ALIAS;
        on.name=name;
        on.type=type;
-       ret=(OBJ_NAME *)lh_delete(names_lh,(char *)&on);
+       ret=(OBJ_NAME *)lh_delete(names_lh,&on);
        if (ret != NULL)
                {
                /* free things */
-               if ((names_free != NULL) && (sk_num(names_free) > type))
+               if ((name_funcs_stack != NULL) && (sk_NAME_FUNCS_num(name_funcs_stack) 
+> ret->type))
                        {
-                       f=(void (*)())sk_value(names_free,type);
-                       f(ret->name,ret->type,ret->data);
+                       /* XXX: I'm not sure I understand why the free
+                        * function should get three arguments...
+                        * -- Richard Levitte
+                        */
+                       sk_NAME_FUNCS_value(name_funcs_stack,ret->type)
+                               ->free_func(ret->name,ret->type,ret->data);
                        }
-               Free((char *)ret);
+               Free(ret);
                return(1);
                }
        else
@@ -215,6 +236,11 @@
                }
        }
 
+static void name_funcs_free(NAME_FUNCS *ptr)
+       {
+       Free(ptr);
+       }
+
 void OBJ_NAME_cleanup(int type)
        {
        unsigned long down_load;
@@ -229,13 +255,9 @@
        if (type < 0)
                {
                lh_free(names_lh);
-               sk_free(names_hash);
-               sk_free(names_cmp);
-               sk_free(names_free);
+               sk_NAME_FUNCS_pop_free(name_funcs_stack,name_funcs_free);
                names_lh=NULL;
-               names_hash=NULL;
-               names_cmp=NULL;
-               names_free=NULL;
+               name_funcs_stack = NULL;
                }
        else
                names_lh->down_load=down_load;
Index: opensa/openssl/crypto/objects/obj_dat.c
diff -u opensa/openssl/crypto/objects/obj_dat.c:1.1 
opensa/openssl/crypto/objects/obj_dat.c:1.2
--- opensa/openssl/crypto/objects/obj_dat.c:1.1 Tue Jan 25 23:27:13 2000
+++ opensa/openssl/crypto/objects/obj_dat.c     Thu Mar  2 21:11:56 2000
@@ -214,16 +214,12 @@
 int OBJ_add_object(ASN1_OBJECT *obj)
        {
        ASN1_OBJECT *o;
-       ADDED_OBJ *ao[4],*aop;
+       ADDED_OBJ *ao[4]={NULL,NULL,NULL,NULL},*aop;
        int i;
 
        if (added == NULL)
                if (!init_added()) return(0);
        if ((o=OBJ_dup(obj)) == NULL) goto err;
-       ao[ADDED_DATA]=NULL;
-       ao[ADDED_SNAME]=NULL;
-       ao[ADDED_LNAME]=NULL;
-       ao[ADDED_NID]=NULL;
        ao[ADDED_NID]=(ADDED_OBJ *)Malloc(sizeof(ADDED_OBJ));
        if ((o->length != 0) && (obj->data != NULL))
                ao[ADDED_DATA]=(ADDED_OBJ *)Malloc(sizeof(ADDED_OBJ));
@@ -238,7 +234,7 @@
                        {
                        ao[i]->type=i;
                        ao[i]->obj=o;
-                       aop=(ADDED_OBJ *)lh_insert(added,(char *)ao[i]);
+                       aop=(ADDED_OBJ *)lh_insert(added,ao[i]);
                        /* memory leak, buit should not normally matter */
                        if (aop != NULL)
                                Free(aop);
@@ -276,7 +272,7 @@
                ad.type=ADDED_NID;
                ad.obj= &ob;
                ob.nid=n;
-               adp=(ADDED_OBJ *)lh_retrieve(added,(char *)&ad);
+               adp=(ADDED_OBJ *)lh_retrieve(added,&ad);
                if (adp != NULL)
                        return(adp->obj);
                else
@@ -308,7 +304,7 @@
                ad.type=ADDED_NID;
                ad.obj= &ob;
                ob.nid=n;
-               adp=(ADDED_OBJ *)lh_retrieve(added,(char *)&ad);
+               adp=(ADDED_OBJ *)lh_retrieve(added,&ad);
                if (adp != NULL)
                        return(adp->obj->sn);
                else
@@ -340,7 +336,7 @@
                ad.type=ADDED_NID;
                ad.obj= &ob;
                ob.nid=n;
-               adp=(ADDED_OBJ *)lh_retrieve(added,(char *)&ad);
+               adp=(ADDED_OBJ *)lh_retrieve(added,&ad);
                if (adp != NULL)
                        return(adp->obj->ln);
                else
@@ -365,7 +361,7 @@
                {
                ad.type=ADDED_DATA;
                ad.obj=a;
-               adp=(ADDED_OBJ *)lh_retrieve(added,(char *)&ad);
+               adp=(ADDED_OBJ *)lh_retrieve(added,&ad);
                if (adp != NULL) return (adp->obj->nid);
                }
        op=(ASN1_OBJECT **)OBJ_bsearch((char *)&a,(char *)obj_objs,NUM_OBJ,
@@ -504,7 +500,7 @@
                {
                ad.type=ADDED_LNAME;
                ad.obj= &o;
-               adp=(ADDED_OBJ *)lh_retrieve(added,(char *)&ad);
+               adp=(ADDED_OBJ *)lh_retrieve(added,&ad);
                if (adp != NULL) return (adp->obj->nid);
                }
        op=(ASN1_OBJECT **)OBJ_bsearch((char *)&oo,(char *)ln_objs,NUM_LN,
@@ -523,7 +519,7 @@
                {
                ad.type=ADDED_SNAME;
                ad.obj= &o;
-               adp=(ADDED_OBJ *)lh_retrieve(added,(char *)&ad);
+               adp=(ADDED_OBJ *)lh_retrieve(added,&ad);
                if (adp != NULL) return (adp->obj->nid);
                }
        op=(ASN1_OBJECT **)OBJ_bsearch((char *)&oo,(char *)sn_objs,NUM_SN,
@@ -647,7 +643,7 @@
        ok=OBJ_add_object(op);
 err:
        ASN1_OBJECT_free(op);
-       Free((char *)buf);
+       Free(buf);
        return(ok);
        }
 
Index: opensa/openssl/crypto/objects/obj_dat.h
diff -u opensa/openssl/crypto/objects/obj_dat.h:1.1 
opensa/openssl/crypto/objects/obj_dat.h:1.2
--- opensa/openssl/crypto/objects/obj_dat.h:1.1 Tue Jan 25 23:27:13 2000
+++ opensa/openssl/crypto/objects/obj_dat.h     Thu Mar  2 21:11:56 2000
@@ -1,892 +1,955 @@
-/* lib/obj/obj_dat.h */
-/* Copyright (C) 1995-1997 Eric Young ([EMAIL PROTECTED])
- * All rights reserved.
- *
- * This package is an SSL implementation written
- * by Eric Young ([EMAIL PROTECTED]).
- * The implementation was written so as to conform with Netscapes SSL.
- * 
- * This library is free for commercial and non-commercial use as long as
- * the following conditions are aheared to.  The following conditions
- * apply to all code found in this distribution, be it the RC4, RSA,
- * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
- * included with this distribution is covered by the same copyright terms
- * except that the holder is Tim Hudson ([EMAIL PROTECTED]).
- * 
- * Copyright remains Eric Young's, and as such any Copyright notices in
- * the code are not to be removed.
- * If this package is used in a product, Eric Young should be given attribution
- * as the author of the parts of the library used.
- * This can be in the form of a textual message at program startup or
- * in documentation (online or textual) provided with the package.
- * 
- * 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 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 acknowledgement:
- *    "This product includes cryptographic software written by
- *     Eric Young ([EMAIL PROTECTED])"
- *    The word 'cryptographic' can be left out if the rouines from the library
- *    being used are not cryptographic related :-).
- * 4. If you include any Windows specific code (or a derivative thereof) from 
- *    the apps directory (application code) you must include an acknowledgement:
- *    "This product includes software written by Tim Hudson ([EMAIL PROTECTED])"
- * 
- * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
- * ANY EXPRESS 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 AUTHOR OR 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.
- * 
- * The licence and distribution terms for any publically available version or
- * derivative of this code cannot be changed.  i.e. this code cannot simply be
- * copied and put under another distribution licence
- * [including the GNU Public Licence.]
- */
-
-/* THIS FILE IS GENERATED FROM Objects.h by obj_dat.pl via the
- * following command:
- * perl obj_dat.pl < objects.h > obj_dat.h
- */
-
-#define NUM_NID 171
-#define NUM_SN 119
-#define NUM_LN 167
-#define NUM_OBJ 142
-
-static unsigned char lvalues[984]={
-0x00,                                        /* [  0] OBJ_undef */
-0x2A,0x86,0x48,0x86,0xF7,0x0D,               /* [  1] OBJ_rsadsi */
-0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,          /* [  7] OBJ_pkcs */
-0x2A,0x86,0x48,0x86,0xF7,0x0D,0x02,0x02,     /* [ 14] OBJ_md2 */
-0x2A,0x86,0x48,0x86,0xF7,0x0D,0x02,0x05,     /* [ 22] OBJ_md5 */
-0x2A,0x86,0x48,0x86,0xF7,0x0D,0x03,0x04,     /* [ 30] OBJ_rc4 */
-0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x01,0x01,/* [ 38] OBJ_rsaEncryption */
-0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x01,0x02,/* [ 47] OBJ_md2WithRSAEncryption */
-0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x01,0x04,/* [ 56] OBJ_md5WithRSAEncryption */
-0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x05,0x01,/* [ 65] OBJ_pbeWithMD2AndDES_CBC */
-0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x05,0x03,/* [ 74] OBJ_pbeWithMD5AndDES_CBC */
-0x55,                                        /* [ 83] OBJ_X500 */
-0x55,0x04,                                   /* [ 84] OBJ_X509 */
-0x55,0x04,0x03,                              /* [ 86] OBJ_commonName */
-0x55,0x04,0x06,                              /* [ 89] OBJ_countryName */
-0x55,0x04,0x07,                              /* [ 92] OBJ_localityName */
-0x55,0x04,0x08,                              /* [ 95] OBJ_stateOrProvinceName */
-0x55,0x04,0x0A,                              /* [ 98] OBJ_organizationName */
-0x55,0x04,0x0B,                              /* [101] OBJ_organizationalUnitName */
-0x55,0x08,0x01,0x01,                         /* [104] OBJ_rsa */
-0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x07,     /* [108] OBJ_pkcs7 */
-0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x07,0x01,/* [116] OBJ_pkcs7_data */
-0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x07,0x02,/* [125] OBJ_pkcs7_signed */
-0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x07,0x03,/* [134] OBJ_pkcs7_enveloped */
-0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x07,0x04,/* [143] OBJ_pkcs7_signedAndEnveloped */
-0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x07,0x05,/* [152] OBJ_pkcs7_digest */
-0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x07,0x06,/* [161] OBJ_pkcs7_encrypted */
-0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x03,     /* [170] OBJ_pkcs3 */
-0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x03,0x01,/* [178] OBJ_dhKeyAgreement */
-0x2B,0x0E,0x03,0x02,0x06,                    /* [187] OBJ_des_ecb */
-0x2B,0x0E,0x03,0x02,0x09,                    /* [192] OBJ_des_cfb64 */
-0x2B,0x0E,0x03,0x02,0x07,                    /* [197] OBJ_des_cbc */
-0x2B,0x0E,0x03,0x02,0x11,                    /* [202] OBJ_des_ede */
-0x2A,0x86,0x48,0x86,0xF7,0x0D,0x03,0x02,     /* [207] OBJ_rc2_cbc */
-0x2B,0x0E,0x03,0x02,0x12,                    /* [215] OBJ_sha */
-0x2B,0x0E,0x03,0x02,0x0F,                    /* [220] OBJ_shaWithRSAEncryption */
-0x2A,0x86,0x48,0x86,0xF7,0x0D,0x03,0x07,     /* [225] OBJ_des_ede3_cbc */
-0x2B,0x0E,0x03,0x02,0x08,                    /* [233] OBJ_des_ofb64 */
-0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x09,     /* [238] OBJ_pkcs9 */
-0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x09,0x01,/* [246] OBJ_pkcs9_emailAddress */
-0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x09,0x02,/* [255] OBJ_pkcs9_unstructuredName */
-0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x09,0x03,/* [264] OBJ_pkcs9_contentType */
-0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x09,0x04,/* [273] OBJ_pkcs9_messageDigest */
-0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x09,0x05,/* [282] OBJ_pkcs9_signingTime */
-0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x09,0x06,/* [291] OBJ_pkcs9_countersignature */
-0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x09,0x07,/* [300] OBJ_pkcs9_challengePassword */
-0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x09,0x08,/* [309] OBJ_pkcs9_unstructuredAddress */
-0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x09,0x09,/* [318] OBJ_pkcs9_extCertAttributes */
-0x60,0x86,0x48,0x01,0x86,0xF8,0x42,          /* [327] OBJ_netscape */
-0x60,0x86,0x48,0x01,0x86,0xF8,0x42,0x01,     /* [334] OBJ_netscape_cert_extension */
-0x60,0x86,0x48,0x01,0x86,0xF8,0x42,0x02,     /* [342] OBJ_netscape_data_type */
-0x2B,0x0E,0x03,0x02,0x1A,                    /* [350] OBJ_sha1 */
-0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x01,0x05,/* [355] OBJ_sha1WithRSAEncryption */
-0x2B,0x0E,0x03,0x02,0x0D,                    /* [364] OBJ_dsaWithSHA */
-0x2B,0x0E,0x03,0x02,0x0C,                    /* [369] OBJ_dsa_2 */
-0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x05,0x0B,/* [374] OBJ_pbeWithSHA1AndRC2_CBC */
-0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x05,0x0C,/* [383] OBJ_id_pbkdf2 */
-0x2B,0x0E,0x03,0x02,0x1B,                    /* [392] OBJ_dsaWithSHA1_2 */
-0x60,0x86,0x48,0x01,0x86,0xF8,0x42,0x01,0x01,/* [397] OBJ_netscape_cert_type */
-0x60,0x86,0x48,0x01,0x86,0xF8,0x42,0x01,0x02,/* [406] OBJ_netscape_base_url */
-0x60,0x86,0x48,0x01,0x86,0xF8,0x42,0x01,0x03,/* [415] OBJ_netscape_revocation_url */
-0x60,0x86,0x48,0x01,0x86,0xF8,0x42,0x01,0x04,/* [424] OBJ_netscape_ca_revocation_url 
*/
-0x60,0x86,0x48,0x01,0x86,0xF8,0x42,0x01,0x07,/* [433] OBJ_netscape_renewal_url */
-0x60,0x86,0x48,0x01,0x86,0xF8,0x42,0x01,0x08,/* [442] OBJ_netscape_ca_policy_url */
-0x60,0x86,0x48,0x01,0x86,0xF8,0x42,0x01,0x0C,/* [451] OBJ_netscape_ssl_server_name */
-0x60,0x86,0x48,0x01,0x86,0xF8,0x42,0x01,0x0D,/* [460] OBJ_netscape_comment */
-0x60,0x86,0x48,0x01,0x86,0xF8,0x42,0x02,0x05,/* [469] OBJ_netscape_cert_sequence */
-0x55,0x1D,                                   /* [478] OBJ_ld_ce */
-0x55,0x1D,0x0E,                              /* [480] OBJ_subject_key_identifier */
-0x55,0x1D,0x0F,                              /* [483] OBJ_key_usage */
-0x55,0x1D,0x10,                              /* [486] OBJ_private_key_usage_period */
-0x55,0x1D,0x11,                              /* [489] OBJ_subject_alt_name */
-0x55,0x1D,0x12,                              /* [492] OBJ_issuer_alt_name */
-0x55,0x1D,0x13,                              /* [495] OBJ_basic_constraints */
-0x55,0x1D,0x14,                              /* [498] OBJ_crl_number */
-0x55,0x1D,0x20,                              /* [501] OBJ_certificate_policies */
-0x55,0x1D,0x23,                              /* [504] OBJ_authority_key_identifier */
-0x55,0x08,0x03,0x65,                         /* [507] OBJ_mdc2 */
-0x55,0x08,0x03,0x64,                         /* [511] OBJ_mdc2WithRSA */
-0x55,0x04,0x2A,                              /* [515] OBJ_givenName */
-0x55,0x04,0x04,                              /* [518] OBJ_surname */
-0x55,0x04,0x2B,                              /* [521] OBJ_initials */
-0x55,0x04,0x2D,                              /* [524] OBJ_uniqueIdentifier */
-0x55,0x1D,0x1F,                              /* [527] OBJ_crl_distribution_points */
-0x2B,0x0E,0x03,0x02,0x03,                    /* [530] OBJ_md5WithRSA */
-0x55,0x04,0x05,                              /* [535] OBJ_serialNumber */
-0x55,0x04,0x0C,                              /* [538] OBJ_title */
-0x55,0x04,0x0D,                              /* [541] OBJ_description */
-0x2A,0x86,0x48,0x86,0xF6,0x7D,0x07,0x42,0x0A,/* [544] OBJ_cast5_cbc */
-0x2A,0x86,0x48,0x86,0xF6,0x7D,0x07,0x42,0x0C,/* [553] OBJ_pbeWithMD5AndCast5_CBC */
-0x2A,0x86,0x48,0xCE,0x38,0x04,0x03,          /* [562] OBJ_dsaWithSHA1 */
-0x2B,0x0E,0x03,0x02,0x1D,                    /* [569] OBJ_sha1WithRSA */
-0x2A,0x86,0x48,0xCE,0x38,0x04,0x01,          /* [574] OBJ_dsa */
-0x2B,0x24,0x03,0x02,0x01,                    /* [581] OBJ_ripemd160 */
-0x2B,0x24,0x03,0x03,0x01,0x02,               /* [586] OBJ_ripemd160WithRSA */
-0x2A,0x86,0x48,0x86,0xF7,0x0D,0x03,0x08,     /* [592] OBJ_rc5_cbc */
-0x29,0x01,0x01,0x85,0x1A,                    /* [600] OBJ_rle_compression */
-0x29,0x01,0x01,0x85,0x1A,                    /* [605] OBJ_zlib_compression */
-0x55,0x1D,0x25,                              /* [610] OBJ_ext_key_usage */
-0x2B,0x06,0x01,0x05,0x05,0x07,               /* [613] OBJ_id_pkix */
-0x2B,0x06,0x01,0x05,0x05,0x07,0x03,          /* [619] OBJ_id_kp */
-0x2B,0x06,0x01,0x05,0x05,0x07,0x03,0x01,     /* [626] OBJ_server_auth */
-0x2B,0x06,0x01,0x05,0x05,0x07,0x03,0x02,     /* [634] OBJ_client_auth */
-0x2B,0x06,0x01,0x05,0x05,0x07,0x03,0x03,     /* [642] OBJ_code_sign */
-0x2B,0x06,0x01,0x05,0x05,0x07,0x03,0x04,     /* [650] OBJ_email_protect */
-0x2B,0x06,0x01,0x05,0x05,0x07,0x03,0x08,     /* [658] OBJ_time_stamp */
-0x2B,0x06,0x01,0x04,0x01,0x82,0x37,0x02,0x01,0x15,/* [666] OBJ_ms_code_ind */
-0x2B,0x06,0x01,0x04,0x01,0x82,0x37,0x02,0x01,0x16,/* [676] OBJ_ms_code_com */
-0x2B,0x06,0x01,0x04,0x01,0x82,0x37,0x0A,0x03,0x01,/* [686] OBJ_ms_ctl_sign */
-0x2B,0x06,0x01,0x04,0x01,0x82,0x37,0x0A,0x03,0x03,/* [696] OBJ_ms_sgc */
-0x2B,0x06,0x01,0x04,0x01,0x82,0x37,0x0A,0x03,0x04,/* [706] OBJ_ms_efs */
-0x60,0x86,0x48,0x01,0x86,0xF8,0x42,0x04,0x01,/* [716] OBJ_ns_sgc */
-0x55,0x1D,0x1B,                              /* [725] OBJ_delta_crl */
-0x55,0x1D,0x15,                              /* [728] OBJ_crl_reason */
-0x55,0x1D,0x18,                              /* [731] OBJ_invalidity_date */
-0x2B,0x65,0x01,0x04,0x01,                    /* [734] OBJ_sxnet */
-0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x0C,0x01,0x01,/* [739] 
OBJ_pbe_WithSHA1And128BitRC4 */
-0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x0C,0x01,0x02,/* [749] 
OBJ_pbe_WithSHA1And40BitRC4 */
-0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x0C,0x01,0x03,/* [759] 
OBJ_pbe_WithSHA1And3_Key_TripleDES_CBC */
-0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x0C,0x01,0x04,/* [769] 
OBJ_pbe_WithSHA1And2_Key_TripleDES_CBC */
-0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x0C,0x01,0x05,/* [779] 
OBJ_pbe_WithSHA1And128BitRC2_CBC */
-0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x0C,0x01,0x06,/* [789] 
OBJ_pbe_WithSHA1And40BitRC2_CBC */
-0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x0C,0x0A,0x01,0x01,/* [799] OBJ_keyBag */
-0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x0C,0x0A,0x01,0x02,/* [810] 
OBJ_pkcs8ShroudedKeyBag */
-0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x0C,0x0A,0x01,0x03,/* [821] OBJ_certBag */
-0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x0C,0x0A,0x01,0x04,/* [832] OBJ_crlBag */
-0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x0C,0x0A,0x01,0x05,/* [843] OBJ_secretBag */
-0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x0C,0x0A,0x01,0x06,/* [854] OBJ_safeContentsBag */
-0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x09,0x14,/* [865] OBJ_friendlyName */
-0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x09,0x15,/* [874] OBJ_localKeyID */
-0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x09,0x16,0x01,/* [883] OBJ_x509Certificate */
-0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x09,0x16,0x02,/* [893] OBJ_sdsiCertificate */
-0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x09,0x17,0x01,/* [903] OBJ_x509Crl */
-0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x05,0x0D,/* [913] OBJ_pbes2 */
-0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x05,0x0E,/* [922] OBJ_pbmac1 */
-0x2A,0x86,0x48,0x86,0xF7,0x0D,0x02,0x07,     /* [931] OBJ_hmacWithSHA1 */
-0x2B,0x06,0x01,0x05,0x05,0x07,0x02,0x01,     /* [939] OBJ_id_qt_cps */
-0x2B,0x06,0x01,0x05,0x05,0x07,0x02,0x02,     /* [947] OBJ_id_qt_unotice */
-0x0F,                                        /* [955] OBJ_SMIMECapabilities */
-0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x05,0x04,/* [956] OBJ_pbeWithMD2AndRC2_CBC */
-0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x05,0x06,/* [965] OBJ_pbeWithMD5AndRC2_CBC */
-0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x05,0x0A,/* [974] OBJ_pbeWithSHA1AndDES_CBC */
-};
-
-static ASN1_OBJECT nid_objs[NUM_NID]={
-{"UNDEF","undefined",NID_undef,1,&(lvalues[0]),0},
-{"rsadsi","rsadsi",NID_rsadsi,6,&(lvalues[1]),0},
-{"pkcs","pkcs",NID_pkcs,7,&(lvalues[7]),0},
-{"MD2","md2",NID_md2,8,&(lvalues[14]),0},
-{"MD5","md5",NID_md5,8,&(lvalues[22]),0},
-{"RC4","rc4",NID_rc4,8,&(lvalues[30]),0},
-{"rsaEncryption","rsaEncryption",NID_rsaEncryption,9,&(lvalues[38]),0},
-{"RSA-MD2","md2WithRSAEncryption",NID_md2WithRSAEncryption,9,
-       &(lvalues[47]),0},
-{"RSA-MD5","md5WithRSAEncryption",NID_md5WithRSAEncryption,9,
-       &(lvalues[56]),0},
-{"pbeWithMD2AndDES-CBC","pbeWithMD2AndDES-CBC",
-       NID_pbeWithMD2AndDES_CBC,9,&(lvalues[65]),0},
-{"pbeWithMD5AndDES-CBC","pbeWithMD5AndDES-CBC",
-       NID_pbeWithMD5AndDES_CBC,9,&(lvalues[74]),0},
-{"X500","X500",NID_X500,1,&(lvalues[83]),0},
-{"X509","X509",NID_X509,2,&(lvalues[84]),0},
-{"CN","commonName",NID_commonName,3,&(lvalues[86]),0},
-{"C","countryName",NID_countryName,3,&(lvalues[89]),0},
-{"L","localityName",NID_localityName,3,&(lvalues[92]),0},
-{"ST","stateOrProvinceName",NID_stateOrProvinceName,3,&(lvalues[95]),0},
-{"O","organizationName",NID_organizationName,3,&(lvalues[98]),0},
-{"OU","organizationalUnitName",NID_organizationalUnitName,3,
-       &(lvalues[101]),0},
-{"RSA","rsa",NID_rsa,4,&(lvalues[104]),0},
-{"pkcs7","pkcs7",NID_pkcs7,8,&(lvalues[108]),0},
-{"pkcs7-data","pkcs7-data",NID_pkcs7_data,9,&(lvalues[116]),0},
-{"pkcs7-signedData","pkcs7-signedData",NID_pkcs7_signed,9,
-       &(lvalues[125]),0},
-{"pkcs7-envelopedData","pkcs7-envelopedData",NID_pkcs7_enveloped,9,
-       &(lvalues[134]),0},
-{"pkcs7-signedAndEnvelopedData","pkcs7-signedAndEnvelopedData",
-       NID_pkcs7_signedAndEnveloped,9,&(lvalues[143]),0},
-{"pkcs7-digestData","pkcs7-digestData",NID_pkcs7_digest,9,
-       &(lvalues[152]),0},
-{"pkcs7-encryptedData","pkcs7-encryptedData",NID_pkcs7_encrypted,9,
-       &(lvalues[161]),0},
-{"pkcs3","pkcs3",NID_pkcs3,8,&(lvalues[170]),0},
-{"dhKeyAgreement","dhKeyAgreement",NID_dhKeyAgreement,9,
-       &(lvalues[178]),0},
-{"DES-ECB","des-ecb",NID_des_ecb,5,&(lvalues[187]),0},
-{"DES-CFB","des-cfb",NID_des_cfb64,5,&(lvalues[192]),0},
-{"DES-CBC","des-cbc",NID_des_cbc,5,&(lvalues[197]),0},
-{"DES-EDE","des-ede",NID_des_ede,5,&(lvalues[202]),0},
-{"DES-EDE3","des-ede3",NID_des_ede3,0,NULL},
-{"IDEA-CBC","idea-cbc",NID_idea_cbc,0,NULL},
-{"IDEA-CFB","idea-cfb",NID_idea_cfb64,0,NULL},
-{"IDEA-ECB","idea-ecb",NID_idea_ecb,0,NULL},
-{"RC2-CBC","rc2-cbc",NID_rc2_cbc,8,&(lvalues[207]),0},
-{"RC2-ECB","rc2-ecb",NID_rc2_ecb,0,NULL},
-{"RC2-CFB","rc2-cfb",NID_rc2_cfb64,0,NULL},
-{"RC2-OFB","rc2-ofb",NID_rc2_ofb64,0,NULL},
-{"SHA","sha",NID_sha,5,&(lvalues[215]),0},
-{"RSA-SHA","shaWithRSAEncryption",NID_shaWithRSAEncryption,5,
-       &(lvalues[220]),0},
-{"DES-EDE-CBC","des-ede-cbc",NID_des_ede_cbc,0,NULL},
-{"DES-EDE3-CBC","des-ede3-cbc",NID_des_ede3_cbc,8,&(lvalues[225]),0},
-{"DES-OFB","des-ofb",NID_des_ofb64,5,&(lvalues[233]),0},
-{"IDEA-OFB","idea-ofb",NID_idea_ofb64,0,NULL},
-{"pkcs9","pkcs9",NID_pkcs9,8,&(lvalues[238]),0},
-{"Email","emailAddress",NID_pkcs9_emailAddress,9,&(lvalues[246]),0},
-{"unstructuredName","unstructuredName",NID_pkcs9_unstructuredName,9,
-       &(lvalues[255]),0},
-{"contentType","contentType",NID_pkcs9_contentType,9,&(lvalues[264]),0},
-{"messageDigest","messageDigest",NID_pkcs9_messageDigest,9,
-       &(lvalues[273]),0},
-{"signingTime","signingTime",NID_pkcs9_signingTime,9,&(lvalues[282]),0},
-{"countersignature","countersignature",NID_pkcs9_countersignature,9,
-       &(lvalues[291]),0},
-{"challengePassword","challengePassword",NID_pkcs9_challengePassword,
-       9,&(lvalues[300]),0},
-{"unstructuredAddress","unstructuredAddress",
-       NID_pkcs9_unstructuredAddress,9,&(lvalues[309]),0},
-{"extendedCertificateAttributes","extendedCertificateAttributes",
-       NID_pkcs9_extCertAttributes,9,&(lvalues[318]),0},
-{"Netscape","Netscape Communications Corp.",NID_netscape,7,
-       &(lvalues[327]),0},
-{"nsCertExt","Netscape Certificate Extension",
-       NID_netscape_cert_extension,8,&(lvalues[334]),0},
-{"nsDataType","Netscape Data Type",NID_netscape_data_type,8,
-       &(lvalues[342]),0},
-{"DES-EDE-CFB","des-ede-cfb",NID_des_ede_cfb64,0,NULL},
-{"DES-EDE3-CFB","des-ede3-cfb",NID_des_ede3_cfb64,0,NULL},
-{"DES-EDE-OFB","des-ede-ofb",NID_des_ede_ofb64,0,NULL},
-{"DES-EDE3-OFB","des-ede3-ofb",NID_des_ede3_ofb64,0,NULL},
-{"SHA1","sha1",NID_sha1,5,&(lvalues[350]),0},
-{"RSA-SHA1","sha1WithRSAEncryption",NID_sha1WithRSAEncryption,9,
-       &(lvalues[355]),0},
-{"DSA-SHA","dsaWithSHA",NID_dsaWithSHA,5,&(lvalues[364]),0},
-{"DSA-old","dsaEncryption-old",NID_dsa_2,5,&(lvalues[369]),0},
-{"pbeWithSHA1AndRC2-CBC","pbeWithSHA1AndRC2-CBC",
-       NID_pbeWithSHA1AndRC2_CBC,9,&(lvalues[374]),0},
-{"PBKDF2","PBKDF2",NID_id_pbkdf2,9,&(lvalues[383]),0},
-{"DSA-SHA1-old","dsaWithSHA1-old",NID_dsaWithSHA1_2,5,&(lvalues[392]),0},
-{"nsCertType","Netscape Cert Type",NID_netscape_cert_type,9,
-       &(lvalues[397]),0},
-{"nsBaseUrl","Netscape Base Url",NID_netscape_base_url,9,
-       &(lvalues[406]),0},
-{"nsRevocationUrl","Netscape Revocation Url",
-       NID_netscape_revocation_url,9,&(lvalues[415]),0},
-{"nsCaRevocationUrl","Netscape CA Revocation Url",
-       NID_netscape_ca_revocation_url,9,&(lvalues[424]),0},
-{"nsRenewalUrl","Netscape Renewal Url",NID_netscape_renewal_url,9,
-       &(lvalues[433]),0},
-{"nsCaPolicyUrl","Netscape CA Policy Url",NID_netscape_ca_policy_url,
-       9,&(lvalues[442]),0},
-{"nsSslServerName","Netscape SSL Server Name",
-       NID_netscape_ssl_server_name,9,&(lvalues[451]),0},
-{"nsComment","Netscape Comment",NID_netscape_comment,9,&(lvalues[460]),0},
-{"nsCertSequence","Netscape Certificate Sequence",
-       NID_netscape_cert_sequence,9,&(lvalues[469]),0},
-{"DESX-CBC","desx-cbc",NID_desx_cbc,0,NULL},
-{"ld-ce","ld-ce",NID_ld_ce,2,&(lvalues[478]),0},
-{"subjectKeyIdentifier","X509v3 Subject Key Identifier",
-       NID_subject_key_identifier,3,&(lvalues[480]),0},
-{"keyUsage","X509v3 Key Usage",NID_key_usage,3,&(lvalues[483]),0},
-{"privateKeyUsagePeriod","X509v3 Private Key Usage Period",
-       NID_private_key_usage_period,3,&(lvalues[486]),0},
-{"subjectAltName","X509v3 Subject Alternative Name",
-       NID_subject_alt_name,3,&(lvalues[489]),0},
-{"issuerAltName","X509v3 Issuer Alternative Name",NID_issuer_alt_name,
-       3,&(lvalues[492]),0},
-{"basicConstraints","X509v3 Basic Constraints",NID_basic_constraints,
-       3,&(lvalues[495]),0},
-{"crlNumber","X509v3 CRL Number",NID_crl_number,3,&(lvalues[498]),0},
-{"certificatePolicies","X509v3 Certificate Policies",
-       NID_certificate_policies,3,&(lvalues[501]),0},
-{"authorityKeyIdentifier","X509v3 Authority Key Identifier",
-       NID_authority_key_identifier,3,&(lvalues[504]),0},
-{"BF-CBC","bf-cbc",NID_bf_cbc,0,NULL},
-{"BF-ECB","bf-ecb",NID_bf_ecb,0,NULL},
-{"BF-CFB","bf-cfb",NID_bf_cfb64,0,NULL},
-{"BF-OFB","bf-ofb",NID_bf_ofb64,0,NULL},
-{"MDC2","mdc2",NID_mdc2,4,&(lvalues[507]),0},
-{"RSA-MDC2","mdc2withRSA",NID_mdc2WithRSA,4,&(lvalues[511]),0},
-{"RC4-40","rc4-40",NID_rc4_40,0,NULL},
-{"RC2-40-CBC","rc2-40-cbc",NID_rc2_40_cbc,0,NULL},
-{"G","givenName",NID_givenName,3,&(lvalues[515]),0},
-{"S","surname",NID_surname,3,&(lvalues[518]),0},
-{"I","initials",NID_initials,3,&(lvalues[521]),0},
-{"UID","uniqueIdentifier",NID_uniqueIdentifier,3,&(lvalues[524]),0},
-{"crlDistributionPoints","X509v3 CRL Distribution Points",
-       NID_crl_distribution_points,3,&(lvalues[527]),0},
-{"RSA-NP-MD5","md5WithRSA",NID_md5WithRSA,5,&(lvalues[530]),0},
-{"SN","serialNumber",NID_serialNumber,3,&(lvalues[535]),0},
-{"T","title",NID_title,3,&(lvalues[538]),0},
-{"D","description",NID_description,3,&(lvalues[541]),0},
-{"CAST5-CBC","cast5-cbc",NID_cast5_cbc,9,&(lvalues[544]),0},
-{"CAST5-ECB","cast5-ecb",NID_cast5_ecb,0,NULL},
-{"CAST5-CFB","cast5-cfb",NID_cast5_cfb64,0,NULL},
-{"CAST5-OFB","cast5-ofb",NID_cast5_ofb64,0,NULL},
-{"pbeWithMD5AndCast5CBC","pbeWithMD5AndCast5CBC",
-       NID_pbeWithMD5AndCast5_CBC,9,&(lvalues[553]),0},
-{"DSA-SHA1","dsaWithSHA1",NID_dsaWithSHA1,7,&(lvalues[562]),0},
-{"MD5-SHA1","md5-sha1",NID_md5_sha1,0,NULL},
-{"RSA-SHA1-2","sha1WithRSA",NID_sha1WithRSA,5,&(lvalues[569]),0},
-{"DSA","dsaEncryption",NID_dsa,7,&(lvalues[574]),0},
-{"RIPEMD160","ripemd160",NID_ripemd160,5,&(lvalues[581]),0},
-{NULL,NULL,NID_undef,0,NULL},
-{"RSA-RIPEMD160","ripemd160WithRSA",NID_ripemd160WithRSA,6,
-       &(lvalues[586]),0},
-{"RC5-CBC","rc5-cbc",NID_rc5_cbc,8,&(lvalues[592]),0},
-{"RC5-ECB","rc5-ecb",NID_rc5_ecb,0,NULL},
-{"RC5-CFB","rc5-cfb",NID_rc5_cfb64,0,NULL},
-{"RC5-OFB","rc5-ofb",NID_rc5_ofb64,0,NULL},
-{"RLE","run length compression",NID_rle_compression,5,&(lvalues[600]),0},
-{"ZLIB","zlib compression",NID_zlib_compression,5,&(lvalues[605]),0},
-{"extendedKeyUsage","X509v3 Extended Key Usage",NID_ext_key_usage,3,
-       &(lvalues[610]),0},
-{"PKIX","PKIX",NID_id_pkix,6,&(lvalues[613]),0},
-{"id-kp","id-kp",NID_id_kp,7,&(lvalues[619]),0},
-{"serverAuth","TLS Web Server Authentication",NID_server_auth,8,
-       &(lvalues[626]),0},
-{"clientAuth","TLS Web Client Authentication",NID_client_auth,8,
-       &(lvalues[634]),0},
-{"codeSigning","Code Signing",NID_code_sign,8,&(lvalues[642]),0},
-{"emailProtection","E-mail Protection",NID_email_protect,8,
-       &(lvalues[650]),0},
-{"timeStamping","Time Stamping",NID_time_stamp,8,&(lvalues[658]),0},
-{"msCodeInd","Microsoft Individual Code Signing",NID_ms_code_ind,10,
-       &(lvalues[666]),0},
-{"msCodeCom","Microsoft Commercial Code Signing",NID_ms_code_com,10,
-       &(lvalues[676]),0},
-{"msCTLSign","Microsoft Trust List Signing",NID_ms_ctl_sign,10,
-       &(lvalues[686]),0},
-{"msSGC","Microsoft Server Gated Crypto",NID_ms_sgc,10,&(lvalues[696]),0},
-{"msEFS","Microsoft Encrypted File System",NID_ms_efs,10,
-       &(lvalues[706]),0},
-{"nsSGC","Netscape Server Gated Crypto",NID_ns_sgc,9,&(lvalues[716]),0},
-{"deltaCRL","X509v3 Delta CRL Indicator",NID_delta_crl,3,
-       &(lvalues[725]),0},
-{"CRLReason","CRL Reason Code",NID_crl_reason,3,&(lvalues[728]),0},
-{"invalidityDate","Invalidity Date",NID_invalidity_date,3,
-       &(lvalues[731]),0},
-{"SXNetID","Strong Extranet ID",NID_sxnet,5,&(lvalues[734]),0},
-{"pbeWithSHA1And128BitRC4","pbeWithSHA1And128BitRC4",
-       NID_pbe_WithSHA1And128BitRC4,10,&(lvalues[739]),0},
-{"pbeWithSHA1And40BitRC4","pbeWithSHA1And40BitRC4",
-       NID_pbe_WithSHA1And40BitRC4,10,&(lvalues[749]),0},
-{"pbeWithSHA1And3-KeyTripleDES-CBC",
-       "pbeWithSHA1And3-KeyTripleDES-CBC",
-       NID_pbe_WithSHA1And3_Key_TripleDES_CBC,10,&(lvalues[759]),0},
-{"pbeWithSHA1And2-KeyTripleDES-CBC",
-       "pbeWithSHA1And2-KeyTripleDES-CBC",
-       NID_pbe_WithSHA1And2_Key_TripleDES_CBC,10,&(lvalues[769]),0},
-{"pbeWithSHA1And128BitRC2-CBC","pbeWithSHA1And128BitRC2-CBC",
-       NID_pbe_WithSHA1And128BitRC2_CBC,10,&(lvalues[779]),0},
-{"pbeWithSHA1And40BitRC2-CBC","pbeWithSHA1And40BitRC2-CBC",
-       NID_pbe_WithSHA1And40BitRC2_CBC,10,&(lvalues[789]),0},
-{"keyBag","keyBag",NID_keyBag,11,&(lvalues[799]),0},
-{"pkcs8ShroudedKeyBag","pkcs8ShroudedKeyBag",NID_pkcs8ShroudedKeyBag,
-       11,&(lvalues[810]),0},
-{"certBag","certBag",NID_certBag,11,&(lvalues[821]),0},
-{"crlBag","crlBag",NID_crlBag,11,&(lvalues[832]),0},
-{"secretBag","secretBag",NID_secretBag,11,&(lvalues[843]),0},
-{"safeContentsBag","safeContentsBag",NID_safeContentsBag,11,
-       &(lvalues[854]),0},
-{"friendlyName","friendlyName",NID_friendlyName,9,&(lvalues[865]),0},
-{"localKeyID","localKeyID",NID_localKeyID,9,&(lvalues[874]),0},
-{"x509Certificate","x509Certificate",NID_x509Certificate,10,
-       &(lvalues[883]),0},
-{"sdsiCertificate","sdsiCertificate",NID_sdsiCertificate,10,
-       &(lvalues[893]),0},
-{"x509Crl","x509Crl",NID_x509Crl,10,&(lvalues[903]),0},
-{"PBES2","PBES2",NID_pbes2,9,&(lvalues[913]),0},
-{"PBMAC1","PBMAC1",NID_pbmac1,9,&(lvalues[922]),0},
-{"hmacWithSHA1","hmacWithSHA1",NID_hmacWithSHA1,8,&(lvalues[931]),0},
-{"id-qt-cps","Policy Qualifier CPS",NID_id_qt_cps,8,&(lvalues[939]),0},
-{"id-qt-unotice","Policy Qualifier User Notice",NID_id_qt_unotice,8,
-       &(lvalues[947]),0},
-{"RC2-64-CBC","rc2-64-cbc",NID_rc2_64_cbc,0,NULL},
-{"SMIME-CAPS","S/MIME Capabilities",NID_SMIMECapabilities,1,
-       &(lvalues[955]),0},
-{"pbeWithMD2AndRC2-CBC","pbeWithMD2AndRC2-CBC",
-       NID_pbeWithMD2AndRC2_CBC,9,&(lvalues[956]),0},
-{"pbeWithMD5AndRC2-CBC","pbeWithMD5AndRC2-CBC",
-       NID_pbeWithMD5AndRC2_CBC,9,&(lvalues[965]),0},
-{"pbeWithSHA1AndDES-CBC","pbeWithSHA1AndDES-CBC",
-       NID_pbeWithSHA1AndDES_CBC,9,&(lvalues[974]),0},
-};
-
-static ASN1_OBJECT *sn_objs[NUM_SN]={
-&(nid_objs[91]),/* "BF-CBC" */
-&(nid_objs[93]),/* "BF-CFB" */
-&(nid_objs[92]),/* "BF-ECB" */
-&(nid_objs[94]),/* "BF-OFB" */
-&(nid_objs[14]),/* "C" */
-&(nid_objs[108]),/* "CAST5-CBC" */
-&(nid_objs[110]),/* "CAST5-CFB" */
-&(nid_objs[109]),/* "CAST5-ECB" */
-&(nid_objs[111]),/* "CAST5-OFB" */
-&(nid_objs[13]),/* "CN" */
-&(nid_objs[141]),/* "CRLReason" */
-&(nid_objs[107]),/* "D" */
-&(nid_objs[31]),/* "DES-CBC" */
-&(nid_objs[30]),/* "DES-CFB" */
-&(nid_objs[29]),/* "DES-ECB" */
-&(nid_objs[32]),/* "DES-EDE" */
-&(nid_objs[43]),/* "DES-EDE-CBC" */
-&(nid_objs[60]),/* "DES-EDE-CFB" */
-&(nid_objs[62]),/* "DES-EDE-OFB" */
-&(nid_objs[33]),/* "DES-EDE3" */
-&(nid_objs[44]),/* "DES-EDE3-CBC" */
-&(nid_objs[61]),/* "DES-EDE3-CFB" */
-&(nid_objs[63]),/* "DES-EDE3-OFB" */
-&(nid_objs[45]),/* "DES-OFB" */
-&(nid_objs[80]),/* "DESX-CBC" */
-&(nid_objs[116]),/* "DSA" */
-&(nid_objs[66]),/* "DSA-SHA" */
-&(nid_objs[113]),/* "DSA-SHA1" */
-&(nid_objs[70]),/* "DSA-SHA1-old" */
-&(nid_objs[67]),/* "DSA-old" */
-&(nid_objs[48]),/* "Email" */
-&(nid_objs[99]),/* "G" */
-&(nid_objs[101]),/* "I" */
-&(nid_objs[34]),/* "IDEA-CBC" */
-&(nid_objs[35]),/* "IDEA-CFB" */
-&(nid_objs[36]),/* "IDEA-ECB" */
-&(nid_objs[46]),/* "IDEA-OFB" */
-&(nid_objs[15]),/* "L" */
-&(nid_objs[ 3]),/* "MD2" */
-&(nid_objs[ 4]),/* "MD5" */
-&(nid_objs[114]),/* "MD5-SHA1" */
-&(nid_objs[95]),/* "MDC2" */
-&(nid_objs[57]),/* "Netscape" */
-&(nid_objs[17]),/* "O" */
-&(nid_objs[18]),/* "OU" */
-&(nid_objs[127]),/* "PKIX" */
-&(nid_objs[98]),/* "RC2-40-CBC" */
-&(nid_objs[166]),/* "RC2-64-CBC" */
-&(nid_objs[37]),/* "RC2-CBC" */
-&(nid_objs[39]),/* "RC2-CFB" */
-&(nid_objs[38]),/* "RC2-ECB" */
-&(nid_objs[40]),/* "RC2-OFB" */
-&(nid_objs[ 5]),/* "RC4" */
-&(nid_objs[97]),/* "RC4-40" */
-&(nid_objs[120]),/* "RC5-CBC" */
-&(nid_objs[122]),/* "RC5-CFB" */
-&(nid_objs[121]),/* "RC5-ECB" */
-&(nid_objs[123]),/* "RC5-OFB" */
-&(nid_objs[117]),/* "RIPEMD160" */
-&(nid_objs[124]),/* "RLE" */
-&(nid_objs[19]),/* "RSA" */
-&(nid_objs[ 7]),/* "RSA-MD2" */
-&(nid_objs[ 8]),/* "RSA-MD5" */
-&(nid_objs[96]),/* "RSA-MDC2" */
-&(nid_objs[104]),/* "RSA-NP-MD5" */
-&(nid_objs[119]),/* "RSA-RIPEMD160" */
-&(nid_objs[42]),/* "RSA-SHA" */
-&(nid_objs[65]),/* "RSA-SHA1" */
-&(nid_objs[115]),/* "RSA-SHA1-2" */
-&(nid_objs[100]),/* "S" */
-&(nid_objs[41]),/* "SHA" */
-&(nid_objs[64]),/* "SHA1" */
-&(nid_objs[167]),/* "SMIME-CAPS" */
-&(nid_objs[105]),/* "SN" */
-&(nid_objs[16]),/* "ST" */
-&(nid_objs[143]),/* "SXNetID" */
-&(nid_objs[106]),/* "T" */
-&(nid_objs[102]),/* "UID" */
-&(nid_objs[ 0]),/* "UNDEF" */
-&(nid_objs[125]),/* "ZLIB" */
-&(nid_objs[90]),/* "authorityKeyIdentifier" */
-&(nid_objs[87]),/* "basicConstraints" */
-&(nid_objs[89]),/* "certificatePolicies" */
-&(nid_objs[130]),/* "clientAuth" */
-&(nid_objs[131]),/* "codeSigning" */
-&(nid_objs[103]),/* "crlDistributionPoints" */
-&(nid_objs[88]),/* "crlNumber" */
-&(nid_objs[140]),/* "deltaCRL" */
-&(nid_objs[132]),/* "emailProtection" */
-&(nid_objs[126]),/* "extendedKeyUsage" */
-&(nid_objs[128]),/* "id-kp" */
-&(nid_objs[164]),/* "id-qt-cps" */
-&(nid_objs[165]),/* "id-qt-unotice" */
-&(nid_objs[142]),/* "invalidityDate" */
-&(nid_objs[86]),/* "issuerAltName" */
-&(nid_objs[83]),/* "keyUsage" */
-&(nid_objs[81]),/* "ld-ce" */
-&(nid_objs[136]),/* "msCTLSign" */
-&(nid_objs[135]),/* "msCodeCom" */
-&(nid_objs[134]),/* "msCodeInd" */
-&(nid_objs[138]),/* "msEFS" */
-&(nid_objs[137]),/* "msSGC" */
-&(nid_objs[72]),/* "nsBaseUrl" */
-&(nid_objs[76]),/* "nsCaPolicyUrl" */
-&(nid_objs[74]),/* "nsCaRevocationUrl" */
-&(nid_objs[58]),/* "nsCertExt" */
-&(nid_objs[79]),/* "nsCertSequence" */
-&(nid_objs[71]),/* "nsCertType" */
-&(nid_objs[78]),/* "nsComment" */
-&(nid_objs[59]),/* "nsDataType" */
-&(nid_objs[75]),/* "nsRenewalUrl" */
-&(nid_objs[73]),/* "nsRevocationUrl" */
-&(nid_objs[139]),/* "nsSGC" */
-&(nid_objs[77]),/* "nsSslServerName" */
-&(nid_objs[84]),/* "privateKeyUsagePeriod" */
-&(nid_objs[129]),/* "serverAuth" */
-&(nid_objs[85]),/* "subjectAltName" */
-&(nid_objs[82]),/* "subjectKeyIdentifier" */
-&(nid_objs[133]),/* "timeStamping" */
-};
-
-static ASN1_OBJECT *ln_objs[NUM_LN]={
-&(nid_objs[141]),/* "CRL Reason Code" */
-&(nid_objs[131]),/* "Code Signing" */
-&(nid_objs[132]),/* "E-mail Protection" */
-&(nid_objs[142]),/* "Invalidity Date" */
-&(nid_objs[135]),/* "Microsoft Commercial Code Signing" */
-&(nid_objs[138]),/* "Microsoft Encrypted File System" */
-&(nid_objs[134]),/* "Microsoft Individual Code Signing" */
-&(nid_objs[137]),/* "Microsoft Server Gated Crypto" */
-&(nid_objs[136]),/* "Microsoft Trust List Signing" */
-&(nid_objs[72]),/* "Netscape Base Url" */
-&(nid_objs[76]),/* "Netscape CA Policy Url" */
-&(nid_objs[74]),/* "Netscape CA Revocation Url" */
-&(nid_objs[71]),/* "Netscape Cert Type" */
-&(nid_objs[58]),/* "Netscape Certificate Extension" */
-&(nid_objs[79]),/* "Netscape Certificate Sequence" */
-&(nid_objs[78]),/* "Netscape Comment" */
-&(nid_objs[57]),/* "Netscape Communications Corp." */
-&(nid_objs[59]),/* "Netscape Data Type" */
-&(nid_objs[75]),/* "Netscape Renewal Url" */
-&(nid_objs[73]),/* "Netscape Revocation Url" */
-&(nid_objs[77]),/* "Netscape SSL Server Name" */
-&(nid_objs[139]),/* "Netscape Server Gated Crypto" */
-&(nid_objs[161]),/* "PBES2" */
-&(nid_objs[69]),/* "PBKDF2" */
-&(nid_objs[162]),/* "PBMAC1" */
-&(nid_objs[164]),/* "Policy Qualifier CPS" */
-&(nid_objs[165]),/* "Policy Qualifier User Notice" */
-&(nid_objs[167]),/* "S/MIME Capabilities" */
-&(nid_objs[143]),/* "Strong Extranet ID" */
-&(nid_objs[130]),/* "TLS Web Client Authentication" */
-&(nid_objs[129]),/* "TLS Web Server Authentication" */
-&(nid_objs[133]),/* "Time Stamping" */
-&(nid_objs[11]),/* "X500" */
-&(nid_objs[12]),/* "X509" */
-&(nid_objs[90]),/* "X509v3 Authority Key Identifier" */
-&(nid_objs[87]),/* "X509v3 Basic Constraints" */
-&(nid_objs[103]),/* "X509v3 CRL Distribution Points" */
-&(nid_objs[88]),/* "X509v3 CRL Number" */
-&(nid_objs[89]),/* "X509v3 Certificate Policies" */
-&(nid_objs[140]),/* "X509v3 Delta CRL Indicator" */
-&(nid_objs[126]),/* "X509v3 Extended Key Usage" */
-&(nid_objs[86]),/* "X509v3 Issuer Alternative Name" */
-&(nid_objs[83]),/* "X509v3 Key Usage" */
-&(nid_objs[84]),/* "X509v3 Private Key Usage Period" */
-&(nid_objs[85]),/* "X509v3 Subject Alternative Name" */
-&(nid_objs[82]),/* "X509v3 Subject Key Identifier" */
-&(nid_objs[91]),/* "bf-cbc" */
-&(nid_objs[93]),/* "bf-cfb" */
-&(nid_objs[92]),/* "bf-ecb" */
-&(nid_objs[94]),/* "bf-ofb" */
-&(nid_objs[108]),/* "cast5-cbc" */
-&(nid_objs[110]),/* "cast5-cfb" */
-&(nid_objs[109]),/* "cast5-ecb" */
-&(nid_objs[111]),/* "cast5-ofb" */
-&(nid_objs[152]),/* "certBag" */
-&(nid_objs[54]),/* "challengePassword" */
-&(nid_objs[13]),/* "commonName" */
-&(nid_objs[50]),/* "contentType" */
-&(nid_objs[53]),/* "countersignature" */
-&(nid_objs[14]),/* "countryName" */
-&(nid_objs[153]),/* "crlBag" */
-&(nid_objs[31]),/* "des-cbc" */
-&(nid_objs[30]),/* "des-cfb" */
-&(nid_objs[29]),/* "des-ecb" */
-&(nid_objs[32]),/* "des-ede" */
-&(nid_objs[43]),/* "des-ede-cbc" */
-&(nid_objs[60]),/* "des-ede-cfb" */
-&(nid_objs[62]),/* "des-ede-ofb" */
-&(nid_objs[33]),/* "des-ede3" */
-&(nid_objs[44]),/* "des-ede3-cbc" */
-&(nid_objs[61]),/* "des-ede3-cfb" */
-&(nid_objs[63]),/* "des-ede3-ofb" */
-&(nid_objs[45]),/* "des-ofb" */
-&(nid_objs[107]),/* "description" */
-&(nid_objs[80]),/* "desx-cbc" */
-&(nid_objs[28]),/* "dhKeyAgreement" */
-&(nid_objs[116]),/* "dsaEncryption" */
-&(nid_objs[67]),/* "dsaEncryption-old" */
-&(nid_objs[66]),/* "dsaWithSHA" */
-&(nid_objs[113]),/* "dsaWithSHA1" */
-&(nid_objs[70]),/* "dsaWithSHA1-old" */
-&(nid_objs[48]),/* "emailAddress" */
-&(nid_objs[56]),/* "extendedCertificateAttributes" */
-&(nid_objs[156]),/* "friendlyName" */
-&(nid_objs[99]),/* "givenName" */
-&(nid_objs[163]),/* "hmacWithSHA1" */
-&(nid_objs[34]),/* "idea-cbc" */
-&(nid_objs[35]),/* "idea-cfb" */
-&(nid_objs[36]),/* "idea-ecb" */
-&(nid_objs[46]),/* "idea-ofb" */
-&(nid_objs[101]),/* "initials" */
-&(nid_objs[150]),/* "keyBag" */
-&(nid_objs[157]),/* "localKeyID" */
-&(nid_objs[15]),/* "localityName" */
-&(nid_objs[ 3]),/* "md2" */
-&(nid_objs[ 7]),/* "md2WithRSAEncryption" */
-&(nid_objs[ 4]),/* "md5" */
-&(nid_objs[114]),/* "md5-sha1" */
-&(nid_objs[104]),/* "md5WithRSA" */
-&(nid_objs[ 8]),/* "md5WithRSAEncryption" */
-&(nid_objs[95]),/* "mdc2" */
-&(nid_objs[96]),/* "mdc2withRSA" */
-&(nid_objs[51]),/* "messageDigest" */
-&(nid_objs[17]),/* "organizationName" */
-&(nid_objs[18]),/* "organizationalUnitName" */
-&(nid_objs[ 9]),/* "pbeWithMD2AndDES-CBC" */
-&(nid_objs[168]),/* "pbeWithMD2AndRC2-CBC" */
-&(nid_objs[112]),/* "pbeWithMD5AndCast5CBC" */
-&(nid_objs[10]),/* "pbeWithMD5AndDES-CBC" */
-&(nid_objs[169]),/* "pbeWithMD5AndRC2-CBC" */
-&(nid_objs[148]),/* "pbeWithSHA1And128BitRC2-CBC" */
-&(nid_objs[144]),/* "pbeWithSHA1And128BitRC4" */
-&(nid_objs[147]),/* "pbeWithSHA1And2-KeyTripleDES-CBC" */
-&(nid_objs[146]),/* "pbeWithSHA1And3-KeyTripleDES-CBC" */
-&(nid_objs[149]),/* "pbeWithSHA1And40BitRC2-CBC" */
-&(nid_objs[145]),/* "pbeWithSHA1And40BitRC4" */
-&(nid_objs[170]),/* "pbeWithSHA1AndDES-CBC" */
-&(nid_objs[68]),/* "pbeWithSHA1AndRC2-CBC" */
-&(nid_objs[ 2]),/* "pkcs" */
-&(nid_objs[27]),/* "pkcs3" */
-&(nid_objs[20]),/* "pkcs7" */
-&(nid_objs[21]),/* "pkcs7-data" */
-&(nid_objs[25]),/* "pkcs7-digestData" */
-&(nid_objs[26]),/* "pkcs7-encryptedData" */
-&(nid_objs[23]),/* "pkcs7-envelopedData" */
-&(nid_objs[24]),/* "pkcs7-signedAndEnvelopedData" */
-&(nid_objs[22]),/* "pkcs7-signedData" */
-&(nid_objs[151]),/* "pkcs8ShroudedKeyBag" */
-&(nid_objs[47]),/* "pkcs9" */
-&(nid_objs[98]),/* "rc2-40-cbc" */
-&(nid_objs[166]),/* "rc2-64-cbc" */
-&(nid_objs[37]),/* "rc2-cbc" */
-&(nid_objs[39]),/* "rc2-cfb" */
-&(nid_objs[38]),/* "rc2-ecb" */
-&(nid_objs[40]),/* "rc2-ofb" */
-&(nid_objs[ 5]),/* "rc4" */
-&(nid_objs[97]),/* "rc4-40" */
-&(nid_objs[120]),/* "rc5-cbc" */
-&(nid_objs[122]),/* "rc5-cfb" */
-&(nid_objs[121]),/* "rc5-ecb" */
-&(nid_objs[123]),/* "rc5-ofb" */
-&(nid_objs[117]),/* "ripemd160" */
-&(nid_objs[119]),/* "ripemd160WithRSA" */
-&(nid_objs[19]),/* "rsa" */
-&(nid_objs[ 6]),/* "rsaEncryption" */
-&(nid_objs[ 1]),/* "rsadsi" */
-&(nid_objs[124]),/* "run length compression" */
-&(nid_objs[155]),/* "safeContentsBag" */
-&(nid_objs[159]),/* "sdsiCertificate" */
-&(nid_objs[154]),/* "secretBag" */
-&(nid_objs[105]),/* "serialNumber" */
-&(nid_objs[41]),/* "sha" */
-&(nid_objs[64]),/* "sha1" */
-&(nid_objs[115]),/* "sha1WithRSA" */
-&(nid_objs[65]),/* "sha1WithRSAEncryption" */
-&(nid_objs[42]),/* "shaWithRSAEncryption" */
-&(nid_objs[52]),/* "signingTime" */
-&(nid_objs[16]),/* "stateOrProvinceName" */
-&(nid_objs[100]),/* "surname" */
-&(nid_objs[106]),/* "title" */
-&(nid_objs[ 0]),/* "undefined" */
-&(nid_objs[102]),/* "uniqueIdentifier" */
-&(nid_objs[55]),/* "unstructuredAddress" */
-&(nid_objs[49]),/* "unstructuredName" */
-&(nid_objs[158]),/* "x509Certificate" */
-&(nid_objs[160]),/* "x509Crl" */
-&(nid_objs[125]),/* "zlib compression" */
-};
-
-static ASN1_OBJECT *obj_objs[NUM_OBJ]={
-&(nid_objs[ 0]),/* OBJ_undef                        0 */
-&(nid_objs[167]),/* OBJ_SMIMECapabilities             15 */
-&(nid_objs[11]),/* OBJ_X500                         2 5 */
-&(nid_objs[12]),/* OBJ_X509                         2 5 4 */
-&(nid_objs[81]),/* OBJ_ld_ce                        2 5 29 */
-&(nid_objs[13]),/* OBJ_commonName                   2 5 4 3 */
-&(nid_objs[100]),/* OBJ_surname                      2 5 4 4 */
-&(nid_objs[105]),/* OBJ_serialNumber                 2 5 4 5 */
-&(nid_objs[14]),/* OBJ_countryName                  2 5 4 6 */
-&(nid_objs[15]),/* OBJ_localityName                 2 5 4 7 */
-&(nid_objs[16]),/* OBJ_stateOrProvinceName          2 5 4 8 */
-&(nid_objs[17]),/* OBJ_organizationName             2 5 4 10 */
-&(nid_objs[18]),/* OBJ_organizationalUnitName       2 5 4 11 */
-&(nid_objs[106]),/* OBJ_title                        2 5 4 12 */
-&(nid_objs[107]),/* OBJ_description                  2 5 4 13 */
-&(nid_objs[99]),/* OBJ_givenName                    2 5 4 42 */
-&(nid_objs[101]),/* OBJ_initials                     2 5 4 43 */
-&(nid_objs[102]),/* OBJ_uniqueIdentifier             2 5 4 45 */
-&(nid_objs[82]),/* OBJ_subject_key_identifier       2 5 29 14 */
-&(nid_objs[83]),/* OBJ_key_usage                    2 5 29 15 */
-&(nid_objs[84]),/* OBJ_private_key_usage_period     2 5 29 16 */
-&(nid_objs[85]),/* OBJ_subject_alt_name             2 5 29 17 */
-&(nid_objs[86]),/* OBJ_issuer_alt_name              2 5 29 18 */
-&(nid_objs[87]),/* OBJ_basic_constraints            2 5 29 19 */
-&(nid_objs[88]),/* OBJ_crl_number                   2 5 29 20 */
-&(nid_objs[141]),/* OBJ_crl_reason                   2 5 29 21 */
-&(nid_objs[142]),/* OBJ_invalidity_date              2 5 29 24 */
-&(nid_objs[140]),/* OBJ_delta_crl                    2 5 29 27 */
-&(nid_objs[103]),/* OBJ_crl_distribution_points      2 5 29 31 */
-&(nid_objs[89]),/* OBJ_certificate_policies         2 5 29 32 */
-&(nid_objs[90]),/* OBJ_authority_key_identifier     2 5 29 35 */
-&(nid_objs[126]),/* OBJ_ext_key_usage                2 5 29 37 */
-&(nid_objs[19]),/* OBJ_rsa                          2 5 8 1 1 */
-&(nid_objs[96]),/* OBJ_mdc2WithRSA                  2 5 8 3 100 */
-&(nid_objs[95]),/* OBJ_mdc2                         2 5 8 3 101 */
-&(nid_objs[124]),/* OBJ_rle_compression              1 1 1 1 666.1 */
-&(nid_objs[125]),/* OBJ_zlib_compression             1 1 1 1 666.2 */
-&(nid_objs[104]),/* OBJ_md5WithRSA                   1 3 14 3 2 3 */
-&(nid_objs[29]),/* OBJ_des_ecb                      1 3 14 3 2 6 */
-&(nid_objs[31]),/* OBJ_des_cbc                      1 3 14 3 2 7 */
-&(nid_objs[45]),/* OBJ_des_ofb64                    1 3 14 3 2 8 */
-&(nid_objs[30]),/* OBJ_des_cfb64                    1 3 14 3 2 9 */
-&(nid_objs[67]),/* OBJ_dsa_2                        1 3 14 3 2 12 */
-&(nid_objs[66]),/* OBJ_dsaWithSHA                   1 3 14 3 2 13 */
-&(nid_objs[42]),/* OBJ_shaWithRSAEncryption         1 3 14 3 2 15 */
-&(nid_objs[32]),/* OBJ_des_ede                      1 3 14 3 2 17 */
-&(nid_objs[41]),/* OBJ_sha                          1 3 14 3 2 18 */
-&(nid_objs[64]),/* OBJ_sha1                         1 3 14 3 2 26 */
-&(nid_objs[70]),/* OBJ_dsaWithSHA1_2                1 3 14 3 2 27 */
-&(nid_objs[115]),/* OBJ_sha1WithRSA                  1 3 14 3 2 29 */
-&(nid_objs[117]),/* OBJ_ripemd160                    1 3 36 3 2 1 */
-&(nid_objs[143]),/* OBJ_sxnet                        1 3 101 1 4 1 */
-&(nid_objs[ 1]),/* OBJ_rsadsi                       1 2 840 113549 */
-&(nid_objs[127]),/* OBJ_id_pkix                      1 3 6 1 5 5 7 */
-&(nid_objs[119]),/* OBJ_ripemd160WithRSA             1 3 36 3 3 1 2 */
-&(nid_objs[ 2]),/* OBJ_pkcs                         1 2 840 113549 1 */
-&(nid_objs[116]),/* OBJ_dsa                          1 2 840 10040 4 1 */
-&(nid_objs[113]),/* OBJ_dsaWithSHA1                  1 2 840 10040 4 3 */
-&(nid_objs[128]),/* OBJ_id_kp                        1 3 6 1 5 5 7 3 */
-&(nid_objs[57]),/* OBJ_netscape                     2 16 840 1 113730 */
-&(nid_objs[27]),/* OBJ_pkcs3                        1 2 840 113549 1 3 */
-&(nid_objs[20]),/* OBJ_pkcs7                        1 2 840 113549 1 7 */
-&(nid_objs[47]),/* OBJ_pkcs9                        1 2 840 113549 1 9 */
-&(nid_objs[ 3]),/* OBJ_md2                          1 2 840 113549 2 2 */
-&(nid_objs[ 4]),/* OBJ_md5                          1 2 840 113549 2 5 */
-&(nid_objs[163]),/* OBJ_hmacWithSHA1                 1 2 840 113549 2 7 */
-&(nid_objs[37]),/* OBJ_rc2_cbc                      1 2 840 113549 3 2 */
-&(nid_objs[ 5]),/* OBJ_rc4                          1 2 840 113549 3 4 */
-&(nid_objs[44]),/* OBJ_des_ede3_cbc                 1 2 840 113549 3 7 */
-&(nid_objs[120]),/* OBJ_rc5_cbc                      1 2 840 113549 3 8 */
-&(nid_objs[164]),/* OBJ_id_qt_cps                    1 3 6 1 5 5 7 2 1 */
-&(nid_objs[165]),/* OBJ_id_qt_unotice                1 3 6 1 5 5 7 2 2 */
-&(nid_objs[129]),/* OBJ_server_auth                  1 3 6 1 5 5 7 3 1 */
-&(nid_objs[130]),/* OBJ_client_auth                  1 3 6 1 5 5 7 3 2 */
-&(nid_objs[131]),/* OBJ_code_sign                    1 3 6 1 5 5 7 3 3 */
-&(nid_objs[132]),/* OBJ_email_protect                1 3 6 1 5 5 7 3 4 */
-&(nid_objs[133]),/* OBJ_time_stamp                   1 3 6 1 5 5 7 3 8 */
-&(nid_objs[58]),/* OBJ_netscape_cert_extension      2 16 840 1 113730 1 */
-&(nid_objs[59]),/* OBJ_netscape_data_type           2 16 840 1 113730 2 */
-&(nid_objs[108]),/* OBJ_cast5_cbc                    1 2 840 113533 7 66 10 */
-&(nid_objs[112]),/* OBJ_pbeWithMD5AndCast5_CBC       1 2 840 113533 7 66 12 */
-&(nid_objs[ 6]),/* OBJ_rsaEncryption                1 2 840 113549 1 1 1 */
-&(nid_objs[ 7]),/* OBJ_md2WithRSAEncryption         1 2 840 113549 1 1 2 */
-&(nid_objs[ 8]),/* OBJ_md5WithRSAEncryption         1 2 840 113549 1 1 4 */
-&(nid_objs[65]),/* OBJ_sha1WithRSAEncryption        1 2 840 113549 1 1 5 */
-&(nid_objs[28]),/* OBJ_dhKeyAgreement               1 2 840 113549 1 3 1 */
-&(nid_objs[ 9]),/* OBJ_pbeWithMD2AndDES_CBC         1 2 840 113549 1 5 1 */
-&(nid_objs[10]),/* OBJ_pbeWithMD5AndDES_CBC         1 2 840 113549 1 5 3 */
-&(nid_objs[168]),/* OBJ_pbeWithMD2AndRC2_CBC         1 2 840 113549 1 5 4 */
-&(nid_objs[169]),/* OBJ_pbeWithMD5AndRC2_CBC         1 2 840 113549 1 5 6 */
-&(nid_objs[170]),/* OBJ_pbeWithSHA1AndDES_CBC        1 2 840 113549 1 5 10 */
-&(nid_objs[68]),/* OBJ_pbeWithSHA1AndRC2_CBC        1 2 840 113549 1 5 11  */
-&(nid_objs[69]),/* OBJ_id_pbkdf2                    1 2 840 113549 1 5 12  */
-&(nid_objs[161]),/* OBJ_pbes2                        1 2 840 113549 1 5 13 */
-&(nid_objs[162]),/* OBJ_pbmac1                       1 2 840 113549 1 5 14 */
-&(nid_objs[21]),/* OBJ_pkcs7_data                   1 2 840 113549 1 7 1 */
-&(nid_objs[22]),/* OBJ_pkcs7_signed                 1 2 840 113549 1 7 2 */
-&(nid_objs[23]),/* OBJ_pkcs7_enveloped              1 2 840 113549 1 7 3 */
-&(nid_objs[24]),/* OBJ_pkcs7_signedAndEnveloped     1 2 840 113549 1 7 4 */
-&(nid_objs[25]),/* OBJ_pkcs7_digest                 1 2 840 113549 1 7 5 */
-&(nid_objs[26]),/* OBJ_pkcs7_encrypted              1 2 840 113549 1 7 6 */
-&(nid_objs[48]),/* OBJ_pkcs9_emailAddress           1 2 840 113549 1 9 1 */
-&(nid_objs[49]),/* OBJ_pkcs9_unstructuredName       1 2 840 113549 1 9 2 */
-&(nid_objs[50]),/* OBJ_pkcs9_contentType            1 2 840 113549 1 9 3 */
-&(nid_objs[51]),/* OBJ_pkcs9_messageDigest          1 2 840 113549 1 9 4 */
-&(nid_objs[52]),/* OBJ_pkcs9_signingTime            1 2 840 113549 1 9 5 */
-&(nid_objs[53]),/* OBJ_pkcs9_countersignature       1 2 840 113549 1 9 6 */
-&(nid_objs[54]),/* OBJ_pkcs9_challengePassword      1 2 840 113549 1 9 7 */
-&(nid_objs[55]),/* OBJ_pkcs9_unstructuredAddress    1 2 840 113549 1 9 8 */
-&(nid_objs[56]),/* OBJ_pkcs9_extCertAttributes      1 2 840 113549 1 9 9 */
-&(nid_objs[156]),/* OBJ_friendlyName                 1 2 840 113549 1 9  20 */
-&(nid_objs[157]),/* OBJ_localKeyID                   1 2 840 113549 1 9  21 */
-&(nid_objs[71]),/* OBJ_netscape_cert_type           2 16 840 1 113730 1 1 */
-&(nid_objs[72]),/* OBJ_netscape_base_url            2 16 840 1 113730 1 2 */
-&(nid_objs[73]),/* OBJ_netscape_revocation_url      2 16 840 1 113730 1 3 */
-&(nid_objs[74]),/* OBJ_netscape_ca_revocation_url   2 16 840 1 113730 1 4 */
-&(nid_objs[75]),/* OBJ_netscape_renewal_url         2 16 840 1 113730 1 7 */
-&(nid_objs[76]),/* OBJ_netscape_ca_policy_url       2 16 840 1 113730 1 8 */
-&(nid_objs[77]),/* OBJ_netscape_ssl_server_name     2 16 840 1 113730 1 12 */
-&(nid_objs[78]),/* OBJ_netscape_comment             2 16 840 1 113730 1 13 */
-&(nid_objs[79]),/* OBJ_netscape_cert_sequence       2 16 840 1 113730 2 5 */
-&(nid_objs[139]),/* OBJ_ns_sgc                       2 16 840 1 113730 4 1 */
-&(nid_objs[158]),/* OBJ_x509Certificate              1 2 840 113549 1 9  22  1 */
-&(nid_objs[159]),/* OBJ_sdsiCertificate              1 2 840 113549 1 9  22  2 */
-&(nid_objs[160]),/* OBJ_x509Crl                      1 2 840 113549 1 9  23  1 */
-&(nid_objs[144]),/* OBJ_pbe_WithSHA1And128BitRC4     1 2 840 113549 1 12  1  1 */
-&(nid_objs[145]),/* OBJ_pbe_WithSHA1And40BitRC4      1 2 840 113549 1 12  1  2 */
-&(nid_objs[146]),/* OBJ_pbe_WithSHA1And3_Key_TripleDES_CBC 1 2 840 113549 1 12  1  3 
*/
-&(nid_objs[147]),/* OBJ_pbe_WithSHA1And2_Key_TripleDES_CBC 1 2 840 113549 1 12  1  4 
*/
-&(nid_objs[148]),/* OBJ_pbe_WithSHA1And128BitRC2_CBC 1 2 840 113549 1 12  1  5 */
-&(nid_objs[149]),/* OBJ_pbe_WithSHA1And40BitRC2_CBC  1 2 840 113549 1 12  1  6 */
-&(nid_objs[134]),/* OBJ_ms_code_ind                  1 3 6 1 4 1 311 2 1 21 */
-&(nid_objs[135]),/* OBJ_ms_code_com                  1 3 6 1 4 1 311 2 1 22 */
-&(nid_objs[136]),/* OBJ_ms_ctl_sign                  1 3 6 1 4 1 311 10 3 1 */
-&(nid_objs[137]),/* OBJ_ms_sgc                       1 3 6 1 4 1 311 10 3 3 */
-&(nid_objs[138]),/* OBJ_ms_efs                       1 3 6 1 4 1 311 10 3 4 */
-&(nid_objs[150]),/* OBJ_keyBag                       1 2 840 113549 1 12  10  1  1 */
-&(nid_objs[151]),/* OBJ_pkcs8ShroudedKeyBag          1 2 840 113549 1 12  10  1  2 */
-&(nid_objs[152]),/* OBJ_certBag                      1 2 840 113549 1 12  10  1  3 */
-&(nid_objs[153]),/* OBJ_crlBag                       1 2 840 113549 1 12  10  1  4 */
-&(nid_objs[154]),/* OBJ_secretBag                    1 2 840 113549 1 12  10  1  5 */
-&(nid_objs[155]),/* OBJ_safeContentsBag              1 2 840 113549 1 12  10  1  6 */
-};
-
+/* lib/obj/obj_dat.h */
+/* Copyright (C) 1995-1997 Eric Young ([EMAIL PROTECTED])
+ * All rights reserved.
+ *
+ * This package is an SSL implementation written
+ * by Eric Young ([EMAIL PROTECTED]).
+ * The implementation was written so as to conform with Netscapes SSL.
+ * 
+ * This library is free for commercial and non-commercial use as long as
+ * the following conditions are aheared to.  The following conditions
+ * apply to all code found in this distribution, be it the RC4, RSA,
+ * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
+ * included with this distribution is covered by the same copyright terms
+ * except that the holder is Tim Hudson ([EMAIL PROTECTED]).
+ * 
+ * Copyright remains Eric Young's, and as such any Copyright notices in
+ * the code are not to be removed.
+ * If this package is used in a product, Eric Young should be given attribution
+ * as the author of the parts of the library used.
+ * This can be in the form of a textual message at program startup or
+ * in documentation (online or textual) provided with the package.
+ * 
+ * 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 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 acknowledgement:
+ *    "This product includes cryptographic software written by
+ *     Eric Young ([EMAIL PROTECTED])"
+ *    The word 'cryptographic' can be left out if the rouines from the library
+ *    being used are not cryptographic related :-).
+ * 4. If you include any Windows specific code (or a derivative thereof) from 
+ *    the apps directory (application code) you must include an acknowledgement:
+ *    "This product includes software written by Tim Hudson ([EMAIL PROTECTED])"
+ * 
+ * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
+ * ANY EXPRESS 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 AUTHOR OR 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.
+ * 
+ * The licence and distribution terms for any publically available version or
+ * derivative of this code cannot be changed.  i.e. this code cannot simply be
+ * copied and put under another distribution licence
+ * [including the GNU Public Licence.]
+ */
+
+/* THIS FILE IS GENERATED FROM Objects.h by obj_dat.pl via the
+ * following command:
+ * perl obj_dat.pl objects.h obj_dat.h
+ */
+
+#define NUM_NID 181
+#define NUM_SN 140
+#define NUM_LN 175
+#define NUM_OBJ 154
+
+static unsigned char lvalues[1085]={
+0x00,                                        /* [  0] OBJ_undef */
+0x2A,0x86,0x48,0x86,0xF7,0x0D,               /* [  1] OBJ_rsadsi */
+0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,          /* [  7] OBJ_pkcs */
+0x2A,0x86,0x48,0x86,0xF7,0x0D,0x02,0x02,     /* [ 14] OBJ_md2 */
+0x2A,0x86,0x48,0x86,0xF7,0x0D,0x02,0x05,     /* [ 22] OBJ_md5 */
+0x2A,0x86,0x48,0x86,0xF7,0x0D,0x03,0x04,     /* [ 30] OBJ_rc4 */
+0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x01,0x01,/* [ 38] OBJ_rsaEncryption */
+0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x01,0x02,/* [ 47] OBJ_md2WithRSAEncryption */
+0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x01,0x04,/* [ 56] OBJ_md5WithRSAEncryption */
+0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x05,0x01,/* [ 65] OBJ_pbeWithMD2AndDES_CBC */
+0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x05,0x03,/* [ 74] OBJ_pbeWithMD5AndDES_CBC */
+0x55,                                        /* [ 83] OBJ_X500 */
+0x55,0x04,                                   /* [ 84] OBJ_X509 */
+0x55,0x04,0x03,                              /* [ 86] OBJ_commonName */
+0x55,0x04,0x06,                              /* [ 89] OBJ_countryName */
+0x55,0x04,0x07,                              /* [ 92] OBJ_localityName */
+0x55,0x04,0x08,                              /* [ 95] OBJ_stateOrProvinceName */
+0x55,0x04,0x0A,                              /* [ 98] OBJ_organizationName */
+0x55,0x04,0x0B,                              /* [101] OBJ_organizationalUnitName */
+0x55,0x08,0x01,0x01,                         /* [104] OBJ_rsa */
+0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x07,     /* [108] OBJ_pkcs7 */
+0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x07,0x01,/* [116] OBJ_pkcs7_data */
+0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x07,0x02,/* [125] OBJ_pkcs7_signed */
+0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x07,0x03,/* [134] OBJ_pkcs7_enveloped */
+0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x07,0x04,/* [143] OBJ_pkcs7_signedAndEnveloped */
+0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x07,0x05,/* [152] OBJ_pkcs7_digest */
+0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x07,0x06,/* [161] OBJ_pkcs7_encrypted */
+0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x03,     /* [170] OBJ_pkcs3 */
+0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x03,0x01,/* [178] OBJ_dhKeyAgreement */
+0x2B,0x0E,0x03,0x02,0x06,                    /* [187] OBJ_des_ecb */
+0x2B,0x0E,0x03,0x02,0x09,                    /* [192] OBJ_des_cfb64 */
+0x2B,0x0E,0x03,0x02,0x07,                    /* [197] OBJ_des_cbc */
+0x2B,0x0E,0x03,0x02,0x11,                    /* [202] OBJ_des_ede */
+0x2B,0x06,0x01,0x04,0x01,0x81,0x3C,0x07,0x01,0x01,0x02,/* [207] OBJ_idea_cbc */
+0x2A,0x86,0x48,0x86,0xF7,0x0D,0x03,0x02,     /* [218] OBJ_rc2_cbc */
+0x2B,0x0E,0x03,0x02,0x12,                    /* [226] OBJ_sha */
+0x2B,0x0E,0x03,0x02,0x0F,                    /* [231] OBJ_shaWithRSAEncryption */
+0x2A,0x86,0x48,0x86,0xF7,0x0D,0x03,0x07,     /* [236] OBJ_des_ede3_cbc */
+0x2B,0x0E,0x03,0x02,0x08,                    /* [244] OBJ_des_ofb64 */
+0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x09,     /* [249] OBJ_pkcs9 */
+0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x09,0x01,/* [257] OBJ_pkcs9_emailAddress */
+0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x09,0x02,/* [266] OBJ_pkcs9_unstructuredName */
+0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x09,0x03,/* [275] OBJ_pkcs9_contentType */
+0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x09,0x04,/* [284] OBJ_pkcs9_messageDigest */
+0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x09,0x05,/* [293] OBJ_pkcs9_signingTime */
+0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x09,0x06,/* [302] OBJ_pkcs9_countersignature */
+0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x09,0x07,/* [311] OBJ_pkcs9_challengePassword */
+0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x09,0x08,/* [320] OBJ_pkcs9_unstructuredAddress */
+0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x09,0x09,/* [329] OBJ_pkcs9_extCertAttributes */
+0x60,0x86,0x48,0x01,0x86,0xF8,0x42,          /* [338] OBJ_netscape */
+0x60,0x86,0x48,0x01,0x86,0xF8,0x42,0x01,     /* [345] OBJ_netscape_cert_extension */
+0x60,0x86,0x48,0x01,0x86,0xF8,0x42,0x02,     /* [353] OBJ_netscape_data_type */
+0x2B,0x0E,0x03,0x02,0x1A,                    /* [361] OBJ_sha1 */
+0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x01,0x05,/* [366] OBJ_sha1WithRSAEncryption */
+0x2B,0x0E,0x03,0x02,0x0D,                    /* [375] OBJ_dsaWithSHA */
+0x2B,0x0E,0x03,0x02,0x0C,                    /* [380] OBJ_dsa_2 */
+0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x05,0x0B,/* [385] OBJ_pbeWithSHA1AndRC2_CBC */
+0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x05,0x0C,/* [394] OBJ_id_pbkdf2 */
+0x2B,0x0E,0x03,0x02,0x1B,                    /* [403] OBJ_dsaWithSHA1_2 */
+0x60,0x86,0x48,0x01,0x86,0xF8,0x42,0x01,0x01,/* [408] OBJ_netscape_cert_type */
+0x60,0x86,0x48,0x01,0x86,0xF8,0x42,0x01,0x02,/* [417] OBJ_netscape_base_url */
+0x60,0x86,0x48,0x01,0x86,0xF8,0x42,0x01,0x03,/* [426] OBJ_netscape_revocation_url */
+0x60,0x86,0x48,0x01,0x86,0xF8,0x42,0x01,0x04,/* [435] OBJ_netscape_ca_revocation_url 
+*/
+0x60,0x86,0x48,0x01,0x86,0xF8,0x42,0x01,0x07,/* [444] OBJ_netscape_renewal_url */
+0x60,0x86,0x48,0x01,0x86,0xF8,0x42,0x01,0x08,/* [453] OBJ_netscape_ca_policy_url */
+0x60,0x86,0x48,0x01,0x86,0xF8,0x42,0x01,0x0C,/* [462] OBJ_netscape_ssl_server_name */
+0x60,0x86,0x48,0x01,0x86,0xF8,0x42,0x01,0x0D,/* [471] OBJ_netscape_comment */
+0x60,0x86,0x48,0x01,0x86,0xF8,0x42,0x02,0x05,/* [480] OBJ_netscape_cert_sequence */
+0x55,0x1D,                                   /* [489] OBJ_ld_ce */
+0x55,0x1D,0x0E,                              /* [491] OBJ_subject_key_identifier */
+0x55,0x1D,0x0F,                              /* [494] OBJ_key_usage */
+0x55,0x1D,0x10,                              /* [497] OBJ_private_key_usage_period */
+0x55,0x1D,0x11,                              /* [500] OBJ_subject_alt_name */
+0x55,0x1D,0x12,                              /* [503] OBJ_issuer_alt_name */
+0x55,0x1D,0x13,                              /* [506] OBJ_basic_constraints */
+0x55,0x1D,0x14,                              /* [509] OBJ_crl_number */
+0x55,0x1D,0x20,                              /* [512] OBJ_certificate_policies */
+0x55,0x1D,0x23,                              /* [515] OBJ_authority_key_identifier */
+0x2B,0x06,0x01,0x04,0x01,0x97,0x55,0x01,0x02,/* [518] OBJ_bf_cbc */
+0x55,0x08,0x03,0x65,                         /* [527] OBJ_mdc2 */
+0x55,0x08,0x03,0x64,                         /* [531] OBJ_mdc2WithRSA */
+0x55,0x04,0x2A,                              /* [535] OBJ_givenName */
+0x55,0x04,0x04,                              /* [538] OBJ_surname */
+0x55,0x04,0x2B,                              /* [541] OBJ_initials */
+0x55,0x04,0x2D,                              /* [544] OBJ_uniqueIdentifier */
+0x55,0x1D,0x1F,                              /* [547] OBJ_crl_distribution_points */
+0x2B,0x0E,0x03,0x02,0x03,                    /* [550] OBJ_md5WithRSA */
+0x55,0x04,0x05,                              /* [555] OBJ_serialNumber */
+0x55,0x04,0x0C,                              /* [558] OBJ_title */
+0x55,0x04,0x0D,                              /* [561] OBJ_description */
+0x2A,0x86,0x48,0x86,0xF6,0x7D,0x07,0x42,0x0A,/* [564] OBJ_cast5_cbc */
+0x2A,0x86,0x48,0x86,0xF6,0x7D,0x07,0x42,0x0C,/* [573] OBJ_pbeWithMD5AndCast5_CBC */
+0x2A,0x86,0x48,0xCE,0x38,0x04,0x03,          /* [582] OBJ_dsaWithSHA1 */
+0x2B,0x0E,0x03,0x02,0x1D,                    /* [589] OBJ_sha1WithRSA */
+0x2A,0x86,0x48,0xCE,0x38,0x04,0x01,          /* [594] OBJ_dsa */
+0x2B,0x24,0x03,0x02,0x01,                    /* [601] OBJ_ripemd160 */
+0x2B,0x24,0x03,0x03,0x01,0x02,               /* [606] OBJ_ripemd160WithRSA */
+0x2A,0x86,0x48,0x86,0xF7,0x0D,0x03,0x08,     /* [612] OBJ_rc5_cbc */
+0x29,0x01,0x01,0x85,0x1A,0x01,               /* [620] OBJ_rle_compression */
+0x29,0x01,0x01,0x85,0x1A,0x02,               /* [626] OBJ_zlib_compression */
+0x55,0x1D,0x25,                              /* [632] OBJ_ext_key_usage */
+0x2B,0x06,0x01,0x05,0x05,0x07,               /* [635] OBJ_id_pkix */
+0x2B,0x06,0x01,0x05,0x05,0x07,0x03,          /* [641] OBJ_id_kp */
+0x2B,0x06,0x01,0x05,0x05,0x07,0x03,0x01,     /* [648] OBJ_server_auth */
+0x2B,0x06,0x01,0x05,0x05,0x07,0x03,0x02,     /* [656] OBJ_client_auth */
+0x2B,0x06,0x01,0x05,0x05,0x07,0x03,0x03,     /* [664] OBJ_code_sign */
+0x2B,0x06,0x01,0x05,0x05,0x07,0x03,0x04,     /* [672] OBJ_email_protect */
+0x2B,0x06,0x01,0x05,0x05,0x07,0x03,0x08,     /* [680] OBJ_time_stamp */
+0x2B,0x06,0x01,0x04,0x01,0x82,0x37,0x02,0x01,0x15,/* [688] OBJ_ms_code_ind */
+0x2B,0x06,0x01,0x04,0x01,0x82,0x37,0x02,0x01,0x16,/* [698] OBJ_ms_code_com */
+0x2B,0x06,0x01,0x04,0x01,0x82,0x37,0x0A,0x03,0x01,/* [708] OBJ_ms_ctl_sign */
+0x2B,0x06,0x01,0x04,0x01,0x82,0x37,0x0A,0x03,0x03,/* [718] OBJ_ms_sgc */
+0x2B,0x06,0x01,0x04,0x01,0x82,0x37,0x0A,0x03,0x04,/* [728] OBJ_ms_efs */
+0x60,0x86,0x48,0x01,0x86,0xF8,0x42,0x04,0x01,/* [738] OBJ_ns_sgc */
+0x55,0x1D,0x1B,                              /* [747] OBJ_delta_crl */
+0x55,0x1D,0x15,                              /* [750] OBJ_crl_reason */
+0x55,0x1D,0x18,                              /* [753] OBJ_invalidity_date */
+0x2B,0x65,0x01,0x04,0x01,                    /* [756] OBJ_sxnet */
+0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x0C,0x01,0x01,/* [761] 
+OBJ_pbe_WithSHA1And128BitRC4 */
+0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x0C,0x01,0x02,/* [771] 
+OBJ_pbe_WithSHA1And40BitRC4 */
+0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x0C,0x01,0x03,/* [781] 
+OBJ_pbe_WithSHA1And3_Key_TripleDES_CBC */
+0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x0C,0x01,0x04,/* [791] 
+OBJ_pbe_WithSHA1And2_Key_TripleDES_CBC */
+0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x0C,0x01,0x05,/* [801] 
+OBJ_pbe_WithSHA1And128BitRC2_CBC */
+0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x0C,0x01,0x06,/* [811] 
+OBJ_pbe_WithSHA1And40BitRC2_CBC */
+0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x0C,0x0A,0x01,0x01,/* [821] OBJ_keyBag */
+0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x0C,0x0A,0x01,0x02,/* [832] 
+OBJ_pkcs8ShroudedKeyBag */
+0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x0C,0x0A,0x01,0x03,/* [843] OBJ_certBag */
+0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x0C,0x0A,0x01,0x04,/* [854] OBJ_crlBag */
+0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x0C,0x0A,0x01,0x05,/* [865] OBJ_secretBag */
+0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x0C,0x0A,0x01,0x06,/* [876] OBJ_safeContentsBag */
+0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x09,0x14,/* [887] OBJ_friendlyName */
+0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x09,0x15,/* [896] OBJ_localKeyID */
+0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x09,0x16,0x01,/* [905] OBJ_x509Certificate */
+0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x09,0x16,0x02,/* [915] OBJ_sdsiCertificate */
+0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x09,0x17,0x01,/* [925] OBJ_x509Crl */
+0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x05,0x0D,/* [935] OBJ_pbes2 */
+0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x05,0x0E,/* [944] OBJ_pbmac1 */
+0x2A,0x86,0x48,0x86,0xF7,0x0D,0x02,0x07,     /* [953] OBJ_hmacWithSHA1 */
+0x2B,0x06,0x01,0x05,0x05,0x07,0x02,0x01,     /* [961] OBJ_id_qt_cps */
+0x2B,0x06,0x01,0x05,0x05,0x07,0x02,0x02,     /* [969] OBJ_id_qt_unotice */
+0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x09,0x0F,/* [977] OBJ_SMIMECapabilities */
+0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x05,0x04,/* [986] OBJ_pbeWithMD2AndRC2_CBC */
+0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x05,0x06,/* [995] OBJ_pbeWithMD5AndRC2_CBC */
+0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x05,0x0A,/* [1004] OBJ_pbeWithSHA1AndDES_CBC */
+0x2B,0x06,0x01,0x04,0x01,0x82,0x37,0x02,0x01,0x0E,/* [1013] OBJ_ms_ext_req */
+0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x09,0x0E,/* [1023] OBJ_ext_req */
+0x55,0x04,0x29,                              /* [1032] OBJ_name */
+0x55,0x04,0x2E,                              /* [1035] OBJ_dnQualifier */
+0x2B,0x06,0x01,0x05,0x05,0x07,0x01,          /* [1038] OBJ_id_pe */
+0x2B,0x06,0x01,0x05,0x05,0x07,0x30,          /* [1045] OBJ_id_ad */
+0x2B,0x06,0x01,0x05,0x05,0x07,0x01,0x01,     /* [1052] OBJ_info_access */
+0x2B,0x06,0x01,0x05,0x05,0x07,0x30,0x01,     /* [1060] OBJ_ad_OCSP */
+0x2B,0x06,0x01,0x05,0x05,0x07,0x30,0x02,     /* [1068] OBJ_ad_ca_issuers */
+0x2B,0x06,0x01,0x05,0x05,0x07,0x03,0x09,     /* [1076] OBJ_OCSP_sign */
+};
+
+static ASN1_OBJECT nid_objs[NUM_NID]={
+{"UNDEF","undefined",NID_undef,1,&(lvalues[0]),0},
+{"rsadsi","rsadsi",NID_rsadsi,6,&(lvalues[1]),0},
+{"pkcs","pkcs",NID_pkcs,7,&(lvalues[7]),0},
+{"MD2","md2",NID_md2,8,&(lvalues[14]),0},
+{"MD5","md5",NID_md5,8,&(lvalues[22]),0},
+{"RC4","rc4",NID_rc4,8,&(lvalues[30]),0},
+{"rsaEncryption","rsaEncryption",NID_rsaEncryption,9,&(lvalues[38]),0},
+{"RSA-MD2","md2WithRSAEncryption",NID_md2WithRSAEncryption,9,
+       &(lvalues[47]),0},
+{"RSA-MD5","md5WithRSAEncryption",NID_md5WithRSAEncryption,9,
+       &(lvalues[56]),0},
+{"PBE-MD2-DES","pbeWithMD2AndDES-CBC",NID_pbeWithMD2AndDES_CBC,9,
+       &(lvalues[65]),0},
+{"PBE-MD5-DES","pbeWithMD5AndDES-CBC",NID_pbeWithMD5AndDES_CBC,9,
+       &(lvalues[74]),0},
+{"X500","X500",NID_X500,1,&(lvalues[83]),0},
+{"X509","X509",NID_X509,2,&(lvalues[84]),0},
+{"CN","commonName",NID_commonName,3,&(lvalues[86]),0},
+{"C","countryName",NID_countryName,3,&(lvalues[89]),0},
+{"L","localityName",NID_localityName,3,&(lvalues[92]),0},
+{"ST","stateOrProvinceName",NID_stateOrProvinceName,3,&(lvalues[95]),0},
+{"O","organizationName",NID_organizationName,3,&(lvalues[98]),0},
+{"OU","organizationalUnitName",NID_organizationalUnitName,3,
+       &(lvalues[101]),0},
+{"RSA","rsa",NID_rsa,4,&(lvalues[104]),0},
+{"pkcs7","pkcs7",NID_pkcs7,8,&(lvalues[108]),0},
+{"pkcs7-data","pkcs7-data",NID_pkcs7_data,9,&(lvalues[116]),0},
+{"pkcs7-signedData","pkcs7-signedData",NID_pkcs7_signed,9,
+       &(lvalues[125]),0},
+{"pkcs7-envelopedData","pkcs7-envelopedData",NID_pkcs7_enveloped,9,
+       &(lvalues[134]),0},
+{"pkcs7-signedAndEnvelopedData","pkcs7-signedAndEnvelopedData",
+       NID_pkcs7_signedAndEnveloped,9,&(lvalues[143]),0},
+{"pkcs7-digestData","pkcs7-digestData",NID_pkcs7_digest,9,
+       &(lvalues[152]),0},
+{"pkcs7-encryptedData","pkcs7-encryptedData",NID_pkcs7_encrypted,9,
+       &(lvalues[161]),0},
+{"pkcs3","pkcs3",NID_pkcs3,8,&(lvalues[170]),0},
+{"dhKeyAgreement","dhKeyAgreement",NID_dhKeyAgreement,9,
+       &(lvalues[178]),0},
+{"DES-ECB","des-ecb",NID_des_ecb,5,&(lvalues[187]),0},
+{"DES-CFB","des-cfb",NID_des_cfb64,5,&(lvalues[192]),0},
+{"DES-CBC","des-cbc",NID_des_cbc,5,&(lvalues[197]),0},
+{"DES-EDE","des-ede",NID_des_ede,5,&(lvalues[202]),0},
+{"DES-EDE3","des-ede3",NID_des_ede3,0,NULL},
+{"IDEA-CBC","idea-cbc",NID_idea_cbc,11,&(lvalues[207]),0},
+{"IDEA-CFB","idea-cfb",NID_idea_cfb64,0,NULL},
+{"IDEA-ECB","idea-ecb",NID_idea_ecb,0,NULL},
+{"RC2-CBC","rc2-cbc",NID_rc2_cbc,8,&(lvalues[218]),0},
+{"RC2-ECB","rc2-ecb",NID_rc2_ecb,0,NULL},
+{"RC2-CFB","rc2-cfb",NID_rc2_cfb64,0,NULL},
+{"RC2-OFB","rc2-ofb",NID_rc2_ofb64,0,NULL},
+{"SHA","sha",NID_sha,5,&(lvalues[226]),0},
+{"RSA-SHA","shaWithRSAEncryption",NID_shaWithRSAEncryption,5,
+       &(lvalues[231]),0},
+{"DES-EDE-CBC","des-ede-cbc",NID_des_ede_cbc,0,NULL},
+{"DES-EDE3-CBC","des-ede3-cbc",NID_des_ede3_cbc,8,&(lvalues[236]),0},
+{"DES-OFB","des-ofb",NID_des_ofb64,5,&(lvalues[244]),0},
+{"IDEA-OFB","idea-ofb",NID_idea_ofb64,0,NULL},
+{"pkcs9","pkcs9",NID_pkcs9,8,&(lvalues[249]),0},
+{"Email","emailAddress",NID_pkcs9_emailAddress,9,&(lvalues[257]),0},
+{"unstructuredName","unstructuredName",NID_pkcs9_unstructuredName,9,
+       &(lvalues[266]),0},
+{"contentType","contentType",NID_pkcs9_contentType,9,&(lvalues[275]),0},
+{"messageDigest","messageDigest",NID_pkcs9_messageDigest,9,
+       &(lvalues[284]),0},
+{"signingTime","signingTime",NID_pkcs9_signingTime,9,&(lvalues[293]),0},
+{"countersignature","countersignature",NID_pkcs9_countersignature,9,
+       &(lvalues[302]),0},
+{"challengePassword","challengePassword",NID_pkcs9_challengePassword,
+       9,&(lvalues[311]),0},
+{"unstructuredAddress","unstructuredAddress",
+       NID_pkcs9_unstructuredAddress,9,&(lvalues[320]),0},
+{"extendedCertificateAttributes","extendedCertificateAttributes",
+       NID_pkcs9_extCertAttributes,9,&(lvalues[329]),0},
+{"Netscape","Netscape Communications Corp.",NID_netscape,7,
+       &(lvalues[338]),0},
+{"nsCertExt","Netscape Certificate Extension",
+       NID_netscape_cert_extension,8,&(lvalues[345]),0},
+{"nsDataType","Netscape Data Type",NID_netscape_data_type,8,
+       &(lvalues[353]),0},
+{"DES-EDE-CFB","des-ede-cfb",NID_des_ede_cfb64,0,NULL},
+{"DES-EDE3-CFB","des-ede3-cfb",NID_des_ede3_cfb64,0,NULL},
+{"DES-EDE-OFB","des-ede-ofb",NID_des_ede_ofb64,0,NULL},
+{"DES-EDE3-OFB","des-ede3-ofb",NID_des_ede3_ofb64,0,NULL},
+{"SHA1","sha1",NID_sha1,5,&(lvalues[361]),0},
+{"RSA-SHA1","sha1WithRSAEncryption",NID_sha1WithRSAEncryption,9,
+       &(lvalues[366]),0},
+{"DSA-SHA","dsaWithSHA",NID_dsaWithSHA,5,&(lvalues[375]),0},
+{"DSA-old","dsaEncryption-old",NID_dsa_2,5,&(lvalues[380]),0},
+{"PBE-SHA1-RC2-64","pbeWithSHA1AndRC2-CBC",NID_pbeWithSHA1AndRC2_CBC,
+       9,&(lvalues[385]),0},
+{"PBKDF2","PBKDF2",NID_id_pbkdf2,9,&(lvalues[394]),0},
+{"DSA-SHA1-old","dsaWithSHA1-old",NID_dsaWithSHA1_2,5,&(lvalues[403]),0},
+{"nsCertType","Netscape Cert Type",NID_netscape_cert_type,9,
+       &(lvalues[408]),0},
+{"nsBaseUrl","Netscape Base Url",NID_netscape_base_url,9,
+       &(lvalues[417]),0},
+{"nsRevocationUrl","Netscape Revocation Url",
+       NID_netscape_revocation_url,9,&(lvalues[426]),0},
+{"nsCaRevocationUrl","Netscape CA Revocation Url",
+       NID_netscape_ca_revocation_url,9,&(lvalues[435]),0},
+{"nsRenewalUrl","Netscape Renewal Url",NID_netscape_renewal_url,9,
+       &(lvalues[444]),0},
+{"nsCaPolicyUrl","Netscape CA Policy Url",NID_netscape_ca_policy_url,
+       9,&(lvalues[453]),0},
+{"nsSslServerName","Netscape SSL Server Name",
+       NID_netscape_ssl_server_name,9,&(lvalues[462]),0},
+{"nsComment","Netscape Comment",NID_netscape_comment,9,&(lvalues[471]),0},
+{"nsCertSequence","Netscape Certificate Sequence",
+       NID_netscape_cert_sequence,9,&(lvalues[480]),0},
+{"DESX-CBC","desx-cbc",NID_desx_cbc,0,NULL},
+{"ld-ce","ld-ce",NID_ld_ce,2,&(lvalues[489]),0},
+{"subjectKeyIdentifier","X509v3 Subject Key Identifier",
+       NID_subject_key_identifier,3,&(lvalues[491]),0},
+{"keyUsage","X509v3 Key Usage",NID_key_usage,3,&(lvalues[494]),0},
+{"privateKeyUsagePeriod","X509v3 Private Key Usage Period",
+       NID_private_key_usage_period,3,&(lvalues[497]),0},
+{"subjectAltName","X509v3 Subject Alternative Name",
+       NID_subject_alt_name,3,&(lvalues[500]),0},
+{"issuerAltName","X509v3 Issuer Alternative Name",NID_issuer_alt_name,
+       3,&(lvalues[503]),0},
+{"basicConstraints","X509v3 Basic Constraints",NID_basic_constraints,
+       3,&(lvalues[506]),0},
+{"crlNumber","X509v3 CRL Number",NID_crl_number,3,&(lvalues[509]),0},
+{"certificatePolicies","X509v3 Certificate Policies",
+       NID_certificate_policies,3,&(lvalues[512]),0},
+{"authorityKeyIdentifier","X509v3 Authority Key Identifier",
+       NID_authority_key_identifier,3,&(lvalues[515]),0},
+{"BF-CBC","bf-cbc",NID_bf_cbc,9,&(lvalues[518]),0},
+{"BF-ECB","bf-ecb",NID_bf_ecb,0,NULL},
+{"BF-CFB","bf-cfb",NID_bf_cfb64,0,NULL},
+{"BF-OFB","bf-ofb",NID_bf_ofb64,0,NULL},
+{"MDC2","mdc2",NID_mdc2,4,&(lvalues[527]),0},
+{"RSA-MDC2","mdc2withRSA",NID_mdc2WithRSA,4,&(lvalues[531]),0},
+{"RC4-40","rc4-40",NID_rc4_40,0,NULL},
+{"RC2-40-CBC","rc2-40-cbc",NID_rc2_40_cbc,0,NULL},
+{"G","givenName",NID_givenName,3,&(lvalues[535]),0},
+{"S","surname",NID_surname,3,&(lvalues[538]),0},
+{"I","initials",NID_initials,3,&(lvalues[541]),0},
+{"UID","uniqueIdentifier",NID_uniqueIdentifier,3,&(lvalues[544]),0},
+{"crlDistributionPoints","X509v3 CRL Distribution Points",
+       NID_crl_distribution_points,3,&(lvalues[547]),0},
+{"RSA-NP-MD5","md5WithRSA",NID_md5WithRSA,5,&(lvalues[550]),0},
+{"SN","serialNumber",NID_serialNumber,3,&(lvalues[555]),0},
+{"T","title",NID_title,3,&(lvalues[558]),0},
+{"D","description",NID_description,3,&(lvalues[561]),0},
+{"CAST5-CBC","cast5-cbc",NID_cast5_cbc,9,&(lvalues[564]),0},
+{"CAST5-ECB","cast5-ecb",NID_cast5_ecb,0,NULL},
+{"CAST5-CFB","cast5-cfb",NID_cast5_cfb64,0,NULL},
+{"CAST5-OFB","cast5-ofb",NID_cast5_ofb64,0,NULL},
+{"pbeWithMD5AndCast5CBC","pbeWithMD5AndCast5CBC",
+       NID_pbeWithMD5AndCast5_CBC,9,&(lvalues[573]),0},
+{"DSA-SHA1","dsaWithSHA1",NID_dsaWithSHA1,7,&(lvalues[582]),0},
+{"MD5-SHA1","md5-sha1",NID_md5_sha1,0,NULL},
+{"RSA-SHA1-2","sha1WithRSA",NID_sha1WithRSA,5,&(lvalues[589]),0},
+{"DSA","dsaEncryption",NID_dsa,7,&(lvalues[594]),0},
+{"RIPEMD160","ripemd160",NID_ripemd160,5,&(lvalues[601]),0},
+{NULL,NULL,NID_undef,0,NULL},
+{"RSA-RIPEMD160","ripemd160WithRSA",NID_ripemd160WithRSA,6,
+       &(lvalues[606]),0},
+{"RC5-CBC","rc5-cbc",NID_rc5_cbc,8,&(lvalues[612]),0},
+{"RC5-ECB","rc5-ecb",NID_rc5_ecb,0,NULL},
+{"RC5-CFB","rc5-cfb",NID_rc5_cfb64,0,NULL},
+{"RC5-OFB","rc5-ofb",NID_rc5_ofb64,0,NULL},
+{"RLE","run length compression",NID_rle_compression,6,&(lvalues[620]),0},
+{"ZLIB","zlib compression",NID_zlib_compression,6,&(lvalues[626]),0},
+{"extendedKeyUsage","X509v3 Extended Key Usage",NID_ext_key_usage,3,
+       &(lvalues[632]),0},
+{"PKIX","PKIX",NID_id_pkix,6,&(lvalues[635]),0},
+{"id-kp","id-kp",NID_id_kp,7,&(lvalues[641]),0},
+{"serverAuth","TLS Web Server Authentication",NID_server_auth,8,
+       &(lvalues[648]),0},
+{"clientAuth","TLS Web Client Authentication",NID_client_auth,8,
+       &(lvalues[656]),0},
+{"codeSigning","Code Signing",NID_code_sign,8,&(lvalues[664]),0},
+{"emailProtection","E-mail Protection",NID_email_protect,8,
+       &(lvalues[672]),0},
+{"timeStamping","Time Stamping",NID_time_stamp,8,&(lvalues[680]),0},
+{"msCodeInd","Microsoft Individual Code Signing",NID_ms_code_ind,10,
+       &(lvalues[688]),0},
+{"msCodeCom","Microsoft Commercial Code Signing",NID_ms_code_com,10,
+       &(lvalues[698]),0},
+{"msCTLSign","Microsoft Trust List Signing",NID_ms_ctl_sign,10,
+       &(lvalues[708]),0},
+{"msSGC","Microsoft Server Gated Crypto",NID_ms_sgc,10,&(lvalues[718]),0},
+{"msEFS","Microsoft Encrypted File System",NID_ms_efs,10,
+       &(lvalues[728]),0},
+{"nsSGC","Netscape Server Gated Crypto",NID_ns_sgc,9,&(lvalues[738]),0},
+{"deltaCRL","X509v3 Delta CRL Indicator",NID_delta_crl,3,
+       &(lvalues[747]),0},
+{"CRLReason","CRL Reason Code",NID_crl_reason,3,&(lvalues[750]),0},
+{"invalidityDate","Invalidity Date",NID_invalidity_date,3,
+       &(lvalues[753]),0},
+{"SXNetID","Strong Extranet ID",NID_sxnet,5,&(lvalues[756]),0},
+{"PBE-SHA1-RC4-128","pbeWithSHA1And128BitRC4",
+       NID_pbe_WithSHA1And128BitRC4,10,&(lvalues[761]),0},
+{"PBE-SHA1-RC4-40","pbeWithSHA1And40BitRC4",
+       NID_pbe_WithSHA1And40BitRC4,10,&(lvalues[771]),0},
+{"PBE-SHA1-3DES","pbeWithSHA1And3-KeyTripleDES-CBC",
+       NID_pbe_WithSHA1And3_Key_TripleDES_CBC,10,&(lvalues[781]),0},
+{"PBE-SHA1-2DES","pbeWithSHA1And2-KeyTripleDES-CBC",
+       NID_pbe_WithSHA1And2_Key_TripleDES_CBC,10,&(lvalues[791]),0},
+{"PBE-SHA1-RC2-128","pbeWithSHA1And128BitRC2-CBC",
+       NID_pbe_WithSHA1And128BitRC2_CBC,10,&(lvalues[801]),0},
+{"PBE-SHA1-RC2-40","pbeWithSHA1And40BitRC2-CBC",
+       NID_pbe_WithSHA1And40BitRC2_CBC,10,&(lvalues[811]),0},
+{"keyBag","keyBag",NID_keyBag,11,&(lvalues[821]),0},
+{"pkcs8ShroudedKeyBag","pkcs8ShroudedKeyBag",NID_pkcs8ShroudedKeyBag,
+       11,&(lvalues[832]),0},
+{"certBag","certBag",NID_certBag,11,&(lvalues[843]),0},
+{"crlBag","crlBag",NID_crlBag,11,&(lvalues[854]),0},
+{"secretBag","secretBag",NID_secretBag,11,&(lvalues[865]),0},
+{"safeContentsBag","safeContentsBag",NID_safeContentsBag,11,
+       &(lvalues[876]),0},
+{"friendlyName","friendlyName",NID_friendlyName,9,&(lvalues[887]),0},
+{"localKeyID","localKeyID",NID_localKeyID,9,&(lvalues[896]),0},
+{"x509Certificate","x509Certificate",NID_x509Certificate,10,
+       &(lvalues[905]),0},
+{"sdsiCertificate","sdsiCertificate",NID_sdsiCertificate,10,
+       &(lvalues[915]),0},
+{"x509Crl","x509Crl",NID_x509Crl,10,&(lvalues[925]),0},
+{"PBES2","PBES2",NID_pbes2,9,&(lvalues[935]),0},
+{"PBMAC1","PBMAC1",NID_pbmac1,9,&(lvalues[944]),0},
+{"hmacWithSHA1","hmacWithSHA1",NID_hmacWithSHA1,8,&(lvalues[953]),0},
+{"id-qt-cps","Policy Qualifier CPS",NID_id_qt_cps,8,&(lvalues[961]),0},
+{"id-qt-unotice","Policy Qualifier User Notice",NID_id_qt_unotice,8,
+       &(lvalues[969]),0},
+{"RC2-64-CBC","rc2-64-cbc",NID_rc2_64_cbc,0,NULL},
+{"SMIME-CAPS","S/MIME Capabilities",NID_SMIMECapabilities,9,
+       &(lvalues[977]),0},
+{"PBE-MD2-RC2-64","pbeWithMD2AndRC2-CBC",NID_pbeWithMD2AndRC2_CBC,9,
+       &(lvalues[986]),0},
+{"PBE-MD5-RC2-64","pbeWithMD5AndRC2-CBC",NID_pbeWithMD5AndRC2_CBC,9,
+       &(lvalues[995]),0},
+{"PBE-SHA1-DES","pbeWithSHA1AndDES-CBC",NID_pbeWithSHA1AndDES_CBC,9,
+       &(lvalues[1004]),0},
+{"msExtReq","Microsoft Extension Request",NID_ms_ext_req,10,
+       &(lvalues[1013]),0},
+{"extReq","Extension Request",NID_ext_req,9,&(lvalues[1023]),0},
+{"name","name",NID_name,3,&(lvalues[1032]),0},
+{"dnQualifier","dnQualifier",NID_dnQualifier,3,&(lvalues[1035]),0},
+{"id-pe","id-pe",NID_id_pe,7,&(lvalues[1038]),0},
+{"id-ad","id-ad",NID_id_ad,7,&(lvalues[1045]),0},
+{"authorityInfoAccess","Authority Information Access",NID_info_access,
+       8,&(lvalues[1052]),0},
+{"OCSP","OCSP",NID_ad_OCSP,8,&(lvalues[1060]),0},
+{"caIssuers","CA Issuers",NID_ad_ca_issuers,8,&(lvalues[1068]),0},
+{"OCSP Signing","OCSP Signing",NID_OCSP_sign,8,&(lvalues[1076]),0},
+};
+
+static ASN1_OBJECT *sn_objs[NUM_SN]={
+&(nid_objs[91]),/* "BF-CBC" */
+&(nid_objs[93]),/* "BF-CFB" */
+&(nid_objs[92]),/* "BF-ECB" */
+&(nid_objs[94]),/* "BF-OFB" */
+&(nid_objs[14]),/* "C" */
+&(nid_objs[108]),/* "CAST5-CBC" */
+&(nid_objs[110]),/* "CAST5-CFB" */
+&(nid_objs[109]),/* "CAST5-ECB" */
+&(nid_objs[111]),/* "CAST5-OFB" */
+&(nid_objs[13]),/* "CN" */
+&(nid_objs[141]),/* "CRLReason" */
+&(nid_objs[107]),/* "D" */
+&(nid_objs[31]),/* "DES-CBC" */
+&(nid_objs[30]),/* "DES-CFB" */
+&(nid_objs[29]),/* "DES-ECB" */
+&(nid_objs[32]),/* "DES-EDE" */
+&(nid_objs[43]),/* "DES-EDE-CBC" */
+&(nid_objs[60]),/* "DES-EDE-CFB" */
+&(nid_objs[62]),/* "DES-EDE-OFB" */
+&(nid_objs[33]),/* "DES-EDE3" */
+&(nid_objs[44]),/* "DES-EDE3-CBC" */
+&(nid_objs[61]),/* "DES-EDE3-CFB" */
+&(nid_objs[63]),/* "DES-EDE3-OFB" */
+&(nid_objs[45]),/* "DES-OFB" */
+&(nid_objs[80]),/* "DESX-CBC" */
+&(nid_objs[116]),/* "DSA" */
+&(nid_objs[66]),/* "DSA-SHA" */
+&(nid_objs[113]),/* "DSA-SHA1" */
+&(nid_objs[70]),/* "DSA-SHA1-old" */
+&(nid_objs[67]),/* "DSA-old" */
+&(nid_objs[48]),/* "Email" */
+&(nid_objs[99]),/* "G" */
+&(nid_objs[101]),/* "I" */
+&(nid_objs[34]),/* "IDEA-CBC" */
+&(nid_objs[35]),/* "IDEA-CFB" */
+&(nid_objs[36]),/* "IDEA-ECB" */
+&(nid_objs[46]),/* "IDEA-OFB" */
+&(nid_objs[15]),/* "L" */
+&(nid_objs[ 3]),/* "MD2" */
+&(nid_objs[ 4]),/* "MD5" */
+&(nid_objs[114]),/* "MD5-SHA1" */
+&(nid_objs[95]),/* "MDC2" */
+&(nid_objs[57]),/* "Netscape" */
+&(nid_objs[17]),/* "O" */
+&(nid_objs[178]),/* "OCSP" */
+&(nid_objs[18]),/* "OU" */
+&(nid_objs[ 9]),/* "PBE-MD2-DES" */
+&(nid_objs[168]),/* "PBE-MD2-RC2-64" */
+&(nid_objs[10]),/* "PBE-MD5-DES" */
+&(nid_objs[169]),/* "PBE-MD5-RC2-64" */
+&(nid_objs[147]),/* "PBE-SHA1-2DES" */
+&(nid_objs[146]),/* "PBE-SHA1-3DES" */
+&(nid_objs[170]),/* "PBE-SHA1-DES" */
+&(nid_objs[148]),/* "PBE-SHA1-RC2-128" */
+&(nid_objs[149]),/* "PBE-SHA1-RC2-40" */
+&(nid_objs[68]),/* "PBE-SHA1-RC2-64" */
+&(nid_objs[144]),/* "PBE-SHA1-RC4-128" */
+&(nid_objs[145]),/* "PBE-SHA1-RC4-40" */
+&(nid_objs[127]),/* "PKIX" */
+&(nid_objs[98]),/* "RC2-40-CBC" */
+&(nid_objs[166]),/* "RC2-64-CBC" */
+&(nid_objs[37]),/* "RC2-CBC" */
+&(nid_objs[39]),/* "RC2-CFB" */
+&(nid_objs[38]),/* "RC2-ECB" */
+&(nid_objs[40]),/* "RC2-OFB" */
+&(nid_objs[ 5]),/* "RC4" */
+&(nid_objs[97]),/* "RC4-40" */
+&(nid_objs[120]),/* "RC5-CBC" */
+&(nid_objs[122]),/* "RC5-CFB" */
+&(nid_objs[121]),/* "RC5-ECB" */
+&(nid_objs[123]),/* "RC5-OFB" */
+&(nid_objs[117]),/* "RIPEMD160" */
+&(nid_objs[124]),/* "RLE" */
+&(nid_objs[19]),/* "RSA" */
+&(nid_objs[ 7]),/* "RSA-MD2" */
+&(nid_objs[ 8]),/* "RSA-MD5" */
+&(nid_objs[96]),/* "RSA-MDC2" */
+&(nid_objs[104]),/* "RSA-NP-MD5" */
+&(nid_objs[119]),/* "RSA-RIPEMD160" */
+&(nid_objs[42]),/* "RSA-SHA" */
+&(nid_objs[65]),/* "RSA-SHA1" */
+&(nid_objs[115]),/* "RSA-SHA1-2" */
+&(nid_objs[100]),/* "S" */
+&(nid_objs[41]),/* "SHA" */
+&(nid_objs[64]),/* "SHA1" */
+&(nid_objs[167]),/* "SMIME-CAPS" */
+&(nid_objs[105]),/* "SN" */
+&(nid_objs[16]),/* "ST" */
+&(nid_objs[143]),/* "SXNetID" */
+&(nid_objs[106]),/* "T" */
+&(nid_objs[102]),/* "UID" */
+&(nid_objs[ 0]),/* "UNDEF" */
+&(nid_objs[125]),/* "ZLIB" */
+&(nid_objs[177]),/* "authorityInfoAccess" */
+&(nid_objs[90]),/* "authorityKeyIdentifier" */
+&(nid_objs[87]),/* "basicConstraints" */
+&(nid_objs[179]),/* "caIssuers" */
+&(nid_objs[89]),/* "certificatePolicies" */
+&(nid_objs[130]),/* "clientAuth" */
+&(nid_objs[131]),/* "codeSigning" */
+&(nid_objs[103]),/* "crlDistributionPoints" */
+&(nid_objs[88]),/* "crlNumber" */
+&(nid_objs[140]),/* "deltaCRL" */
+&(nid_objs[174]),/* "dnQualifier" */
+&(nid_objs[132]),/* "emailProtection" */
+&(nid_objs[172]),/* "extReq" */
+&(nid_objs[126]),/* "extendedKeyUsage" */
+&(nid_objs[176]),/* "id-ad" */
+&(nid_objs[128]),/* "id-kp" */
+&(nid_objs[175]),/* "id-pe" */
+&(nid_objs[164]),/* "id-qt-cps" */
+&(nid_objs[165]),/* "id-qt-unotice" */
+&(nid_objs[142]),/* "invalidityDate" */
+&(nid_objs[86]),/* "issuerAltName" */
+&(nid_objs[83]),/* "keyUsage" */
+&(nid_objs[81]),/* "ld-ce" */
+&(nid_objs[136]),/* "msCTLSign" */
+&(nid_objs[135]),/* "msCodeCom" */
+&(nid_objs[134]),/* "msCodeInd" */
+&(nid_objs[138]),/* "msEFS" */
+&(nid_objs[171]),/* "msExtReq" */
+&(nid_objs[137]),/* "msSGC" */
+&(nid_objs[173]),/* "name" */
+&(nid_objs[72]),/* "nsBaseUrl" */
+&(nid_objs[76]),/* "nsCaPolicyUrl" */
+&(nid_objs[74]),/* "nsCaRevocationUrl" */
+&(nid_objs[58]),/* "nsCertExt" */
+&(nid_objs[79]),/* "nsCertSequence" */
+&(nid_objs[71]),/* "nsCertType" */
+&(nid_objs[78]),/* "nsComment" */
+&(nid_objs[59]),/* "nsDataType" */
+&(nid_objs[75]),/* "nsRenewalUrl" */
+&(nid_objs[73]),/* "nsRevocationUrl" */
+&(nid_objs[139]),/* "nsSGC" */
+&(nid_objs[77]),/* "nsSslServerName" */
+&(nid_objs[84]),/* "privateKeyUsagePeriod" */
+&(nid_objs[129]),/* "serverAuth" */
+&(nid_objs[85]),/* "subjectAltName" */
+&(nid_objs[82]),/* "subjectKeyIdentifier" */
+&(nid_objs[133]),/* "timeStamping" */
+};
+
+static ASN1_OBJECT *ln_objs[NUM_LN]={
+&(nid_objs[177]),/* "Authority Information Access" */
+&(nid_objs[179]),/* "CA Issuers" */
+&(nid_objs[141]),/* "CRL Reason Code" */
+&(nid_objs[131]),/* "Code Signing" */
+&(nid_objs[132]),/* "E-mail Protection" */
+&(nid_objs[172]),/* "Extension Request" */
+&(nid_objs[142]),/* "Invalidity Date" */
+&(nid_objs[135]),/* "Microsoft Commercial Code Signing" */
+&(nid_objs[138]),/* "Microsoft Encrypted File System" */
+&(nid_objs[171]),/* "Microsoft Extension Request" */
+&(nid_objs[134]),/* "Microsoft Individual Code Signing" */
+&(nid_objs[137]),/* "Microsoft Server Gated Crypto" */
+&(nid_objs[136]),/* "Microsoft Trust List Signing" */
+&(nid_objs[72]),/* "Netscape Base Url" */
+&(nid_objs[76]),/* "Netscape CA Policy Url" */
+&(nid_objs[74]),/* "Netscape CA Revocation Url" */
+&(nid_objs[71]),/* "Netscape Cert Type" */
+&(nid_objs[58]),/* "Netscape Certificate Extension" */
+&(nid_objs[79]),/* "Netscape Certificate Sequence" */
+&(nid_objs[78]),/* "Netscape Comment" */
+&(nid_objs[57]),/* "Netscape Communications Corp." */
+&(nid_objs[59]),/* "Netscape Data Type" */
+&(nid_objs[75]),/* "Netscape Renewal Url" */
+&(nid_objs[73]),/* "Netscape Revocation Url" */
+&(nid_objs[77]),/* "Netscape SSL Server Name" */
+&(nid_objs[139]),/* "Netscape Server Gated Crypto" */
+&(nid_objs[180]),/* "OCSP Signing" */
+&(nid_objs[178]),/* "OCSP" */
+&(nid_objs[161]),/* "PBES2" */
+&(nid_objs[69]),/* "PBKDF2" */
+&(nid_objs[162]),/* "PBMAC1" */
+&(nid_objs[164]),/* "Policy Qualifier CPS" */
+&(nid_objs[165]),/* "Policy Qualifier User Notice" */
+&(nid_objs[167]),/* "S/MIME Capabilities" */
+&(nid_objs[143]),/* "Strong Extranet ID" */
+&(nid_objs[130]),/* "TLS Web Client Authentication" */
+&(nid_objs[129]),/* "TLS Web Server Authentication" */
+&(nid_objs[133]),/* "Time Stamping" */
+&(nid_objs[11]),/* "X500" */
+&(nid_objs[12]),/* "X509" */
+&(nid_objs[90]),/* "X509v3 Authority Key Identifier" */
+&(nid_objs[87]),/* "X509v3 Basic Constraints" */
+&(nid_objs[103]),/* "X509v3 CRL Distribution Points" */
+&(nid_objs[88]),/* "X509v3 CRL Number" */
+&(nid_objs[89]),/* "X509v3 Certificate Policies" */
+&(nid_objs[140]),/* "X509v3 Delta CRL Indicator" */
+&(nid_objs[126]),/* "X509v3 Extended Key Usage" */
+&(nid_objs[86]),/* "X509v3 Issuer Alternative Name" */
+&(nid_objs[83]),/* "X509v3 Key Usage" */
+&(nid_objs[84]),/* "X509v3 Private Key Usage Period" */
+&(nid_objs[85]),/* "X509v3 Subject Alternative Name" */
+&(nid_objs[82]),/* "X509v3 Subject Key Identifier" */
+&(nid_objs[91]),/* "bf-cbc" */
+&(nid_objs[93]),/* "bf-cfb" */
+&(nid_objs[92]),/* "bf-ecb" */
+&(nid_objs[94]),/* "bf-ofb" */
+&(nid_objs[108]),/* "cast5-cbc" */
+&(nid_objs[110]),/* "cast5-cfb" */
+&(nid_objs[109]),/* "cast5-ecb" */
+&(nid_objs[111]),/* "cast5-ofb" */
+&(nid_objs[152]),/* "certBag" */
+&(nid_objs[54]),/* "challengePassword" */
+&(nid_objs[13]),/* "commonName" */
+&(nid_objs[50]),/* "contentType" */
+&(nid_objs[53]),/* "countersignature" */
+&(nid_objs[14]),/* "countryName" */
+&(nid_objs[153]),/* "crlBag" */
+&(nid_objs[31]),/* "des-cbc" */
+&(nid_objs[30]),/* "des-cfb" */
+&(nid_objs[29]),/* "des-ecb" */
+&(nid_objs[32]),/* "des-ede" */
+&(nid_objs[43]),/* "des-ede-cbc" */
+&(nid_objs[60]),/* "des-ede-cfb" */
+&(nid_objs[62]),/* "des-ede-ofb" */
+&(nid_objs[33]),/* "des-ede3" */
+&(nid_objs[44]),/* "des-ede3-cbc" */
+&(nid_objs[61]),/* "des-ede3-cfb" */
+&(nid_objs[63]),/* "des-ede3-ofb" */
+&(nid_objs[45]),/* "des-ofb" */
+&(nid_objs[107]),/* "description" */
+&(nid_objs[80]),/* "desx-cbc" */
+&(nid_objs[28]),/* "dhKeyAgreement" */
+&(nid_objs[174]),/* "dnQualifier" */
+&(nid_objs[116]),/* "dsaEncryption" */
+&(nid_objs[67]),/* "dsaEncryption-old" */
+&(nid_objs[66]),/* "dsaWithSHA" */
+&(nid_objs[113]),/* "dsaWithSHA1" */
+&(nid_objs[70]),/* "dsaWithSHA1-old" */
+&(nid_objs[48]),/* "emailAddress" */
+&(nid_objs[56]),/* "extendedCertificateAttributes" */
+&(nid_objs[156]),/* "friendlyName" */
+&(nid_objs[99]),/* "givenName" */
+&(nid_objs[163]),/* "hmacWithSHA1" */
+&(nid_objs[34]),/* "idea-cbc" */
+&(nid_objs[35]),/* "idea-cfb" */
+&(nid_objs[36]),/* "idea-ecb" */
+&(nid_objs[46]),/* "idea-ofb" */
+&(nid_objs[101]),/* "initials" */
+&(nid_objs[150]),/* "keyBag" */
+&(nid_objs[157]),/* "localKeyID" */
+&(nid_objs[15]),/* "localityName" */
+&(nid_objs[ 3]),/* "md2" */
+&(nid_objs[ 7]),/* "md2WithRSAEncryption" */
+&(nid_objs[ 4]),/* "md5" */
+&(nid_objs[114]),/* "md5-sha1" */
+&(nid_objs[104]),/* "md5WithRSA" */
+&(nid_objs[ 8]),/* "md5WithRSAEncryption" */
+&(nid_objs[95]),/* "mdc2" */
+&(nid_objs[96]),/* "mdc2withRSA" */
+&(nid_objs[51]),/* "messageDigest" */
+&(nid_objs[173]),/* "name" */
+&(nid_objs[17]),/* "organizationName" */
+&(nid_objs[18]),/* "organizationalUnitName" */
+&(nid_objs[ 9]),/* "pbeWithMD2AndDES-CBC" */
+&(nid_objs[168]),/* "pbeWithMD2AndRC2-CBC" */
+&(nid_objs[112]),/* "pbeWithMD5AndCast5CBC" */
+&(nid_objs[10]),/* "pbeWithMD5AndDES-CBC" */
+&(nid_objs[169]),/* "pbeWithMD5AndRC2-CBC" */
+&(nid_objs[148]),/* "pbeWithSHA1And128BitRC2-CBC" */
+&(nid_objs[144]),/* "pbeWithSHA1And128BitRC4" */
+&(nid_objs[147]),/* "pbeWithSHA1And2-KeyTripleDES-CBC" */
+&(nid_objs[146]),/* "pbeWithSHA1And3-KeyTripleDES-CBC" */
+&(nid_objs[149]),/* "pbeWithSHA1And40BitRC2-CBC" */
+&(nid_objs[145]),/* "pbeWithSHA1And40BitRC4" */
+&(nid_objs[170]),/* "pbeWithSHA1AndDES-CBC" */
+&(nid_objs[68]),/* "pbeWithSHA1AndRC2-CBC" */
+&(nid_objs[ 2]),/* "pkcs" */
+&(nid_objs[27]),/* "pkcs3" */
+&(nid_objs[20]),/* "pkcs7" */
+&(nid_objs[21]),/* "pkcs7-data" */
+&(nid_objs[25]),/* "pkcs7-digestData" */
+&(nid_objs[26]),/* "pkcs7-encryptedData" */
+&(nid_objs[23]),/* "pkcs7-envelopedData" */
+&(nid_objs[24]),/* "pkcs7-signedAndEnvelopedData" */
+&(nid_objs[22]),/* "pkcs7-signedData" */
+&(nid_objs[151]),/* "pkcs8ShroudedKeyBag" */
+&(nid_objs[47]),/* "pkcs9" */
+&(nid_objs[98]),/* "rc2-40-cbc" */
+&(nid_objs[166]),/* "rc2-64-cbc" */
+&(nid_objs[37]),/* "rc2-cbc" */
+&(nid_objs[39]),/* "rc2-cfb" */
+&(nid_objs[38]),/* "rc2-ecb" */
+&(nid_objs[40]),/* "rc2-ofb" */
+&(nid_objs[ 5]),/* "rc4" */
+&(nid_objs[97]),/* "rc4-40" */
+&(nid_objs[120]),/* "rc5-cbc" */
+&(nid_objs[122]),/* "rc5-cfb" */
+&(nid_objs[121]),/* "rc5-ecb" */
+&(nid_objs[123]),/* "rc5-ofb" */
+&(nid_objs[117]),/* "ripemd160" */
+&(nid_objs[119]),/* "ripemd160WithRSA" */
+&(nid_objs[19]),/* "rsa" */
+&(nid_objs[ 6]),/* "rsaEncryption" */
+&(nid_objs[ 1]),/* "rsadsi" */
+&(nid_objs[124]),/* "run length compression" */
+&(nid_objs[155]),/* "safeContentsBag" */
+&(nid_objs[159]),/* "sdsiCertificate" */
+&(nid_objs[154]),/* "secretBag" */
+&(nid_objs[105]),/* "serialNumber" */
+&(nid_objs[41]),/* "sha" */
+&(nid_objs[64]),/* "sha1" */
+&(nid_objs[115]),/* "sha1WithRSA" */
+&(nid_objs[65]),/* "sha1WithRSAEncryption" */
+&(nid_objs[42]),/* "shaWithRSAEncryption" */
+&(nid_objs[52]),/* "signingTime" */
+&(nid_objs[16]),/* "stateOrProvinceName" */
+&(nid_objs[100]),/* "surname" */
+&(nid_objs[106]),/* "title" */
+&(nid_objs[ 0]),/* "undefined" */
+&(nid_objs[102]),/* "uniqueIdentifier" */
+&(nid_objs[55]),/* "unstructuredAddress" */
+&(nid_objs[49]),/* "unstructuredName" */
+&(nid_objs[158]),/* "x509Certificate" */
+&(nid_objs[160]),/* "x509Crl" */
+&(nid_objs[125]),/* "zlib compression" */
+};
+
+static ASN1_OBJECT *obj_objs[NUM_OBJ]={
+&(nid_objs[ 0]),/* OBJ_undef                        0 */
+&(nid_objs[11]),/* OBJ_X500                         2 5 */
+&(nid_objs[12]),/* OBJ_X509                         2 5 4 */
+&(nid_objs[81]),/* OBJ_ld_ce                        2 5 29 */
+&(nid_objs[13]),/* OBJ_commonName                   2 5 4 3 */
+&(nid_objs[100]),/* OBJ_surname                      2 5 4 4 */
+&(nid_objs[105]),/* OBJ_serialNumber                 2 5 4 5 */
+&(nid_objs[14]),/* OBJ_countryName                  2 5 4 6 */
+&(nid_objs[15]),/* OBJ_localityName                 2 5 4 7 */
+&(nid_objs[16]),/* OBJ_stateOrProvinceName          2 5 4 8 */
+&(nid_objs[17]),/* OBJ_organizationName             2 5 4 10 */
+&(nid_objs[18]),/* OBJ_organizationalUnitName       2 5 4 11 */
+&(nid_objs[106]),/* OBJ_title                        2 5 4 12 */
+&(nid_objs[107]),/* OBJ_description                  2 5 4 13 */
+&(nid_objs[173]),/* OBJ_name                         2 5 4 41 */
+&(nid_objs[99]),/* OBJ_givenName                    2 5 4 42 */
+&(nid_objs[101]),/* OBJ_initials                     2 5 4 43 */
+&(nid_objs[102]),/* OBJ_uniqueIdentifier             2 5 4 45 */
+&(nid_objs[174]),/* OBJ_dnQualifier                  2 5 4 46 */
+&(nid_objs[82]),/* OBJ_subject_key_identifier       2 5 29 14 */
+&(nid_objs[83]),/* OBJ_key_usage                    2 5 29 15 */
+&(nid_objs[84]),/* OBJ_private_key_usage_period     2 5 29 16 */
+&(nid_objs[85]),/* OBJ_subject_alt_name             2 5 29 17 */
+&(nid_objs[86]),/* OBJ_issuer_alt_name              2 5 29 18 */
+&(nid_objs[87]),/* OBJ_basic_constraints            2 5 29 19 */
+&(nid_objs[88]),/* OBJ_crl_number                   2 5 29 20 */
+&(nid_objs[141]),/* OBJ_crl_reason                   2 5 29 21 */
+&(nid_objs[142]),/* OBJ_invalidity_date              2 5 29 24 */
+&(nid_objs[140]),/* OBJ_delta_crl                    2 5 29 27 */
+&(nid_objs[103]),/* OBJ_crl_distribution_points      2 5 29 31 */
+&(nid_objs[89]),/* OBJ_certificate_policies         2 5 29 32 */
+&(nid_objs[90]),/* OBJ_authority_key_identifier     2 5 29 35 */
+&(nid_objs[126]),/* OBJ_ext_key_usage                2 5 29 37 */
+&(nid_objs[19]),/* OBJ_rsa                          2 5 8 1 1 */
+&(nid_objs[96]),/* OBJ_mdc2WithRSA                  2 5 8 3 100 */
+&(nid_objs[95]),/* OBJ_mdc2                         2 5 8 3 101 */
+&(nid_objs[104]),/* OBJ_md5WithRSA                   1 3 14 3 2 3 */
+&(nid_objs[29]),/* OBJ_des_ecb                      1 3 14 3 2 6 */
+&(nid_objs[31]),/* OBJ_des_cbc                      1 3 14 3 2 7 */
+&(nid_objs[45]),/* OBJ_des_ofb64                    1 3 14 3 2 8 */
+&(nid_objs[30]),/* OBJ_des_cfb64                    1 3 14 3 2 9 */
+&(nid_objs[67]),/* OBJ_dsa_2                        1 3 14 3 2 12 */
+&(nid_objs[66]),/* OBJ_dsaWithSHA                   1 3 14 3 2 13 */
+&(nid_objs[42]),/* OBJ_shaWithRSAEncryption         1 3 14 3 2 15 */
+&(nid_objs[32]),/* OBJ_des_ede                      1 3 14 3 2 17 */
+&(nid_objs[41]),/* OBJ_sha                          1 3 14 3 2 18 */
+&(nid_objs[64]),/* OBJ_sha1                         1 3 14 3 2 26 */
+&(nid_objs[70]),/* OBJ_dsaWithSHA1_2                1 3 14 3 2 27 */
+&(nid_objs[115]),/* OBJ_sha1WithRSA                  1 3 14 3 2 29 */
+&(nid_objs[117]),/* OBJ_ripemd160                    1 3 36 3 2 1 */
+&(nid_objs[143]),/* OBJ_sxnet                        1 3 101 1 4 1 */
+&(nid_objs[124]),/* OBJ_rle_compression              1 1 1 1 666 1 */
+&(nid_objs[125]),/* OBJ_zlib_compression             1 1 1 1 666 2 */
+&(nid_objs[ 1]),/* OBJ_rsadsi                       1 2 840 113549 */
+&(nid_objs[127]),/* OBJ_id_pkix                      1 3 6 1 5 5 7 */
+&(nid_objs[119]),/* OBJ_ripemd160WithRSA             1 3 36 3 3 1 2 */
+&(nid_objs[ 2]),/* OBJ_pkcs                         1 2 840 113549 1 */
+&(nid_objs[116]),/* OBJ_dsa                          1 2 840 10040 4 1 */
+&(nid_objs[113]),/* OBJ_dsaWithSHA1                  1 2 840 10040 4 3 */
+&(nid_objs[175]),/* OBJ_id_pe                        1 3 6 1 5 5 7 1 */
+&(nid_objs[128]),/* OBJ_id_kp                        1 3 6 1 5 5 7 3 */
+&(nid_objs[176]),/* OBJ_id_ad                        1 3 6 1 5 5 7 48 */
+&(nid_objs[57]),/* OBJ_netscape                     2 16 840 1 113730 */
+&(nid_objs[27]),/* OBJ_pkcs3                        1 2 840 113549 1 3 */
+&(nid_objs[20]),/* OBJ_pkcs7                        1 2 840 113549 1 7 */
+&(nid_objs[47]),/* OBJ_pkcs9                        1 2 840 113549 1 9 */
+&(nid_objs[ 3]),/* OBJ_md2                          1 2 840 113549 2 2 */
+&(nid_objs[ 4]),/* OBJ_md5                          1 2 840 113549 2 5 */
+&(nid_objs[163]),/* OBJ_hmacWithSHA1                 1 2 840 113549 2 7 */
+&(nid_objs[37]),/* OBJ_rc2_cbc                      1 2 840 113549 3 2 */
+&(nid_objs[ 5]),/* OBJ_rc4                          1 2 840 113549 3 4 */
+&(nid_objs[44]),/* OBJ_des_ede3_cbc                 1 2 840 113549 3 7 */
+&(nid_objs[120]),/* OBJ_rc5_cbc                      1 2 840 113549 3 8 */
+&(nid_objs[177]),/* OBJ_info_access                  1 3 6 1 5 5 7 1 1 */
+&(nid_objs[164]),/* OBJ_id_qt_cps                    1 3 6 1 5 5 7 2 1 */
+&(nid_objs[165]),/* OBJ_id_qt_unotice                1 3 6 1 5 5 7 2 2 */
+&(nid_objs[129]),/* OBJ_server_auth                  1 3 6 1 5 5 7 3 1 */
+&(nid_objs[130]),/* OBJ_client_auth                  1 3 6 1 5 5 7 3 2 */
+&(nid_objs[131]),/* OBJ_code_sign                    1 3 6 1 5 5 7 3 3 */
+&(nid_objs[132]),/* OBJ_email_protect                1 3 6 1 5 5 7 3 4 */
+&(nid_objs[133]),/* OBJ_time_stamp                   1 3 6 1 5 5 7 3 8 */
+&(nid_objs[180]),/* OBJ_OCSP_sign                    1 3 6 1 5 5 7 3 9 */
+&(nid_objs[178]),/* OBJ_ad_OCSP                      1 3 6 1 5 5 7 48 1 */
+&(nid_objs[179]),/* OBJ_ad_ca_issuers                1 3 6 1 5 5 7 48 2 */
+&(nid_objs[58]),/* OBJ_netscape_cert_extension      2 16 840 1 113730 1 */
+&(nid_objs[59]),/* OBJ_netscape_data_type           2 16 840 1 113730 2 */
+&(nid_objs[108]),/* OBJ_cast5_cbc                    1 2 840 113533 7 66 10 */
+&(nid_objs[112]),/* OBJ_pbeWithMD5AndCast5_CBC       1 2 840 113533 7 66 12 */
+&(nid_objs[ 6]),/* OBJ_rsaEncryption                1 2 840 113549 1 1 1 */
+&(nid_objs[ 7]),/* OBJ_md2WithRSAEncryption         1 2 840 113549 1 1 2 */
+&(nid_objs[ 8]),/* OBJ_md5WithRSAEncryption         1 2 840 113549 1 1 4 */
+&(nid_objs[65]),/* OBJ_sha1WithRSAEncryption        1 2 840 113549 1 1 5 */
+&(nid_objs[28]),/* OBJ_dhKeyAgreement               1 2 840 113549 1 3 1 */
+&(nid_objs[ 9]),/* OBJ_pbeWithMD2AndDES_CBC         1 2 840 113549 1 5 1 */
+&(nid_objs[10]),/* OBJ_pbeWithMD5AndDES_CBC         1 2 840 113549 1 5 3 */
+&(nid_objs[168]),/* OBJ_pbeWithMD2AndRC2_CBC         1 2 840 113549 1 5 4 */
+&(nid_objs[169]),/* OBJ_pbeWithMD5AndRC2_CBC         1 2 840 113549 1 5 6 */
+&(nid_objs[170]),/* OBJ_pbeWithSHA1AndDES_CBC        1 2 840 113549 1 5 10 */
+&(nid_objs[68]),/* OBJ_pbeWithSHA1AndRC2_CBC        1 2 840 113549 1 5 11  */
+&(nid_objs[69]),/* OBJ_id_pbkdf2                    1 2 840 113549 1 5 12  */
+&(nid_objs[161]),/* OBJ_pbes2                        1 2 840 113549 1 5 13 */
+&(nid_objs[162]),/* OBJ_pbmac1                       1 2 840 113549 1 5 14 */
+&(nid_objs[21]),/* OBJ_pkcs7_data                   1 2 840 113549 1 7 1 */
+&(nid_objs[22]),/* OBJ_pkcs7_signed                 1 2 840 113549 1 7 2 */
+&(nid_objs[23]),/* OBJ_pkcs7_enveloped              1 2 840 113549 1 7 3 */
+&(nid_objs[24]),/* OBJ_pkcs7_signedAndEnveloped     1 2 840 113549 1 7 4 */
+&(nid_objs[25]),/* OBJ_pkcs7_digest                 1 2 840 113549 1 7 5 */
+&(nid_objs[26]),/* OBJ_pkcs7_encrypted              1 2 840 113549 1 7 6 */
+&(nid_objs[48]),/* OBJ_pkcs9_emailAddress           1 2 840 113549 1 9 1 */
+&(nid_objs[49]),/* OBJ_pkcs9_unstructuredName       1 2 840 113549 1 9 2 */
+&(nid_objs[50]),/* OBJ_pkcs9_contentType            1 2 840 113549 1 9 3 */
+&(nid_objs[51]),/* OBJ_pkcs9_messageDigest          1 2 840 113549 1 9 4 */
+&(nid_objs[52]),/* OBJ_pkcs9_signingTime            1 2 840 113549 1 9 5 */
+&(nid_objs[53]),/* OBJ_pkcs9_countersignature       1 2 840 113549 1 9 6 */
+&(nid_objs[54]),/* OBJ_pkcs9_challengePassword      1 2 840 113549 1 9 7 */
+&(nid_objs[55]),/* OBJ_pkcs9_unstructuredAddress    1 2 840 113549 1 9 8 */
+&(nid_objs[56]),/* OBJ_pkcs9_extCertAttributes      1 2 840 113549 1 9 9 */
+&(nid_objs[172]),/* OBJ_ext_req                      1 2 840 113549 1 9 14 */
+&(nid_objs[167]),/* OBJ_SMIMECapabilities            1 2 840 113549 1 9 15 */
+&(nid_objs[156]),/* OBJ_friendlyName                 1 2 840 113549 1 9  20 */
+&(nid_objs[157]),/* OBJ_localKeyID                   1 2 840 113549 1 9  21 */
+&(nid_objs[91]),/* OBJ_bf_cbc                       1 3 6 1 4 1 3029 1 2 */
+&(nid_objs[71]),/* OBJ_netscape_cert_type           2 16 840 1 113730 1 1 */
+&(nid_objs[72]),/* OBJ_netscape_base_url            2 16 840 1 113730 1 2 */
+&(nid_objs[73]),/* OBJ_netscape_revocation_url      2 16 840 1 113730 1 3 */
+&(nid_objs[74]),/* OBJ_netscape_ca_revocation_url   2 16 840 1 113730 1 4 */
+&(nid_objs[75]),/* OBJ_netscape_renewal_url         2 16 840 1 113730 1 7 */
+&(nid_objs[76]),/* OBJ_netscape_ca_policy_url       2 16 840 1 113730 1 8 */
+&(nid_objs[77]),/* OBJ_netscape_ssl_server_name     2 16 840 1 113730 1 12 */
+&(nid_objs[78]),/* OBJ_netscape_comment             2 16 840 1 113730 1 13 */
+&(nid_objs[79]),/* OBJ_netscape_cert_sequence       2 16 840 1 113730 2 5 */
+&(nid_objs[139]),/* OBJ_ns_sgc                       2 16 840 1 113730 4 1 */
+&(nid_objs[158]),/* OBJ_x509Certificate              1 2 840 113549 1 9  22  1 */
+&(nid_objs[159]),/* OBJ_sdsiCertificate              1 2 840 113549 1 9  22  2 */
+&(nid_objs[160]),/* OBJ_x509Crl                      1 2 840 113549 1 9  23  1 */
+&(nid_objs[144]),/* OBJ_pbe_WithSHA1And128BitRC4     1 2 840 113549 1 12  1  1 */
+&(nid_objs[145]),/* OBJ_pbe_WithSHA1And40BitRC4      1 2 840 113549 1 12  1  2 */
+&(nid_objs[146]),/* OBJ_pbe_WithSHA1And3_Key_TripleDES_CBC 1 2 840 113549 1 12  1  3 
+*/
+&(nid_objs[147]),/* OBJ_pbe_WithSHA1And2_Key_TripleDES_CBC 1 2 840 113549 1 12  1  4 
+*/
+&(nid_objs[148]),/* OBJ_pbe_WithSHA1And128BitRC2_CBC 1 2 840 113549 1 12  1  5 */
+&(nid_objs[149]),/* OBJ_pbe_WithSHA1And40BitRC2_CBC  1 2 840 113549 1 12  1  6 */
+&(nid_objs[171]),/* OBJ_ms_ext_req                   1 3 6 1 4 1 311 2 1 14 */
+&(nid_objs[134]),/* OBJ_ms_code_ind                  1 3 6 1 4 1 311 2 1 21 */
+&(nid_objs[135]),/* OBJ_ms_code_com                  1 3 6 1 4 1 311 2 1 22 */
+&(nid_objs[136]),/* OBJ_ms_ctl_sign                  1 3 6 1 4 1 311 10 3 1 */
+&(nid_objs[137]),/* OBJ_ms_sgc                       1 3 6 1 4 1 311 10 3 3 */
+&(nid_objs[138]),/* OBJ_ms_efs                       1 3 6 1 4 1 311 10 3 4 */
+&(nid_objs[150]),/* OBJ_keyBag                       1 2 840 113549 1 12  10  1  1 */
+&(nid_objs[151]),/* OBJ_pkcs8ShroudedKeyBag          1 2 840 113549 1 12  10  1  2 */
+&(nid_objs[152]),/* OBJ_certBag                      1 2 840 113549 1 12  10  1  3 */
+&(nid_objs[153]),/* OBJ_crlBag                       1 2 840 113549 1 12  10  1  4 */
+&(nid_objs[154]),/* OBJ_secretBag                    1 2 840 113549 1 12  10  1  5 */
+&(nid_objs[155]),/* OBJ_safeContentsBag              1 2 840 113549 1 12  10  1  6 */
+&(nid_objs[34]),/* OBJ_idea_cbc                     1 3 6 1 4 1 188 7 1 1 2 */
+};
+
Index: opensa/openssl/crypto/objects/obj_dat.pl
diff -u opensa/openssl/crypto/objects/obj_dat.pl:1.1 
opensa/openssl/crypto/objects/obj_dat.pl:1.2
--- opensa/openssl/crypto/objects/obj_dat.pl:1.1        Tue Jan 25 23:27:13 2000
+++ opensa/openssl/crypto/objects/obj_dat.pl    Thu Mar  2 21:11:56 2000
@@ -38,7 +38,10 @@
        return(%objn);
        }
 
-while (<>)
+open (IN,"$ARGV[0]") || die "Can't open input file $ARGV[0]";
+open (OUT,">$ARGV[1]") || die "Can't open output file $ARGV[1]";
+
+while (<IN>)
        {
        next unless /^\#define\s+(\S+)\s+(.*)$/;
        $v=$1;
@@ -55,6 +58,7 @@
                $objd{$v}=$d;
                }
        }
+close IN;
 
 %ob=&expand_obj(*objd);
 
@@ -132,7 +136,7 @@
        push(@ob,sprintf("&(nid_objs[%2d]),/* %-32s %s */\n",$_,$m,$v));
        }
 
-print <<'EOF';
+print OUT <<'EOF';
 /* lib/obj/obj_dat.h */
 /* Copyright (C) 1995-1997 Eric Young ([EMAIL PROTECTED])
  * All rights reserved.
@@ -193,21 +197,21 @@
 
 /* THIS FILE IS GENERATED FROM Objects.h by obj_dat.pl via the
  * following command:
- * perl obj_dat.pl < objects.h > obj_dat.h
+ * perl obj_dat.pl objects.h obj_dat.h
  */
 
 EOF
 
-printf "#define NUM_NID %d\n",$n;
-printf "#define NUM_SN %d\n",$#sn+1;
-printf "#define NUM_LN %d\n",$#ln+1;
-printf "#define NUM_OBJ %d\n\n",$#ob+1;
-
-printf "static unsigned char lvalues[%d]={\n",$lvalues+1;
-print @lvalues;
-print "};\n\n";
+printf OUT "#define NUM_NID %d\n",$n;
+printf OUT "#define NUM_SN %d\n",$#sn+1;
+printf OUT "#define NUM_LN %d\n",$#ln+1;
+printf OUT "#define NUM_OBJ %d\n\n",$#ob+1;
+
+printf OUT "static unsigned char lvalues[%d]={\n",$lvalues+1;
+print OUT @lvalues;
+print OUT "};\n\n";
 
-printf "static ASN1_OBJECT nid_objs[NUM_NID]={\n";
+printf OUT "static ASN1_OBJECT nid_objs[NUM_NID]={\n";
 foreach (@out)
        {
        if (length($_) > 75)
@@ -218,30 +222,32 @@
                        $t=$out.$_.",";
                        if (length($t) > 70)
                                {
-                               print "$out\n";
+                               print OUT "$out\n";
                                $t="\t$_,";
                                }
                        $out=$t;
                        }
                chop $out;
-               print "$out";
+               print OUT "$out";
                }
        else
-               { print $_; }
+               { print OUT $_; }
        }
-print  "};\n\n";
+print  OUT "};\n\n";
+
+printf OUT "static ASN1_OBJECT *sn_objs[NUM_SN]={\n";
+print  OUT @sn;
+print  OUT "};\n\n";
 
-printf "static ASN1_OBJECT *sn_objs[NUM_SN]={\n";
-print  @sn;
-print  "};\n\n";
+printf OUT "static ASN1_OBJECT *ln_objs[NUM_LN]={\n";
+print  OUT @ln;
+print  OUT "};\n\n";
 
-printf "static ASN1_OBJECT *ln_objs[NUM_LN]={\n";
-print  @ln;
-print  "};\n\n";
+printf OUT "static ASN1_OBJECT *obj_objs[NUM_OBJ]={\n";
+print  OUT @ob;
+print  OUT "};\n\n";
 
-printf "static ASN1_OBJECT *obj_objs[NUM_OBJ]={\n";
-print  @ob;
-print  "};\n\n";
+close OUT;
 
 sub der_it
        {
Index: opensa/openssl/crypto/objects/objects.h
diff -u opensa/openssl/crypto/objects/objects.h:1.1 
opensa/openssl/crypto/objects/objects.h:1.2
--- opensa/openssl/crypto/objects/objects.h:1.1 Tue Jan 25 23:27:13 2000
+++ opensa/openssl/crypto/objects/objects.h     Thu Mar  2 21:11:56 2000
@@ -110,10 +110,12 @@
 #define NID_md5WithRSAEncryption       8
 #define OBJ_md5WithRSAEncryption       OBJ_pkcs,1L,4L
 
+#define SN_pbeWithMD2AndDES_CBC                "PBE-MD2-DES"
 #define LN_pbeWithMD2AndDES_CBC                "pbeWithMD2AndDES-CBC"
 #define NID_pbeWithMD2AndDES_CBC       9
 #define OBJ_pbeWithMD2AndDES_CBC       OBJ_pkcs,5L,1L
 
+#define SN_pbeWithMD5AndDES_CBC                "PBE-MD5-DES"
 #define LN_pbeWithMD5AndDES_CBC                "pbeWithMD5AndDES-CBC"
 #define NID_pbeWithMD5AndDES_CBC       10
 #define OBJ_pbeWithMD5AndDES_CBC       OBJ_pkcs,5L,3L
@@ -230,6 +232,7 @@
 #define SN_idea_cbc                    "IDEA-CBC"
 #define LN_idea_cbc                    "idea-cbc"
 #define NID_idea_cbc                   34
+#define OBJ_idea_cbc                   1L,3L,6L,1L,4L,1L,188L,7L,1L,1L,2L
 
 #define SN_idea_cfb64                  "IDEA-CFB"
 #define LN_idea_cfb64                  "idea-cfb"
@@ -380,6 +383,7 @@
 #define OBJ_dsa_2                      OBJ_algorithm,12L
 
 /* proposed by microsoft to RSA */
+#define SN_pbeWithSHA1AndRC2_CBC       "PBE-SHA1-RC2-64"
 #define LN_pbeWithSHA1AndRC2_CBC       "pbeWithSHA1AndRC2-CBC"
 #define NID_pbeWithSHA1AndRC2_CBC      68
 #define OBJ_pbeWithSHA1AndRC2_CBC      OBJ_pkcs,5L,11L 
@@ -499,6 +503,7 @@
 #define SN_bf_cbc                      "BF-CBC"
 #define LN_bf_cbc                      "bf-cbc"
 #define NID_bf_cbc                     91
+#define OBJ_bf_cbc                     1L,3L,6L,1L,4L,1L,3029L,1L,2L
 
 #define SN_bf_ecb                      "BF-ECB"
 #define LN_bf_ecb                      "bf-ecb"
@@ -627,7 +632,7 @@
 #define OBJ_ripemd160                  1L,3L,36L,3L,2L,1L
 
 /* The name should actually be rsaSignatureWithripemd160, but I'm going
- * to contiune using the convention I'm using with the other ciphers */
+ * to continue using the convention I'm using with the other ciphers */
 #define SN_ripemd160WithRSA            "RSA-RIPEMD160"
 #define LN_ripemd160WithRSA            "ripemd160WithRSA"
 #define NID_ripemd160WithRSA           119
@@ -661,12 +666,12 @@
 #define SN_rle_compression             "RLE"
 #define LN_rle_compression             "run length compression"
 #define NID_rle_compression            124
-#define OBJ_rle_compression            1L,1L,1L,1L,666L.1L
+#define OBJ_rle_compression            1L,1L,1L,1L,666L,1L
 
 #define SN_zlib_compression            "ZLIB"
 #define LN_zlib_compression            "zlib compression"
 #define NID_zlib_compression           125
-#define OBJ_zlib_compression           1L,1L,1L,1L,666L.2L
+#define OBJ_zlib_compression           1L,1L,1L,1L,666L,2L
 
 #define SN_ext_key_usage               "extendedKeyUsage"
 #define LN_ext_key_usage               "X509v3 Extended Key Usage"
@@ -735,7 +740,7 @@
 #define NID_ms_efs                     138
 #define OBJ_ms_efs                     1L,3L,6L,1L,4L,1L,311L,10L,3L,4L
 
-/* Addidional usage: Netscape */
+/* Additional usage: Netscape */
 
 #define SN_ns_sgc                      "nsSGC"
 #define LN_ns_sgc                      "Netscape Server Gated Crypto"
@@ -767,26 +772,32 @@
 #define OBJ_pkcs12                     OBJ_pkcs,12L
 #define OBJ_pkcs12_pbeids              OBJ_pkcs12, 1
 
+#define SN_pbe_WithSHA1And128BitRC4    "PBE-SHA1-RC4-128"
 #define LN_pbe_WithSHA1And128BitRC4    "pbeWithSHA1And128BitRC4"
 #define NID_pbe_WithSHA1And128BitRC4   144
 #define OBJ_pbe_WithSHA1And128BitRC4   OBJ_pkcs12_pbeids, 1L
 
+#define SN_pbe_WithSHA1And40BitRC4     "PBE-SHA1-RC4-40"
 #define LN_pbe_WithSHA1And40BitRC4     "pbeWithSHA1And40BitRC4"
 #define NID_pbe_WithSHA1And40BitRC4    145
 #define OBJ_pbe_WithSHA1And40BitRC4    OBJ_pkcs12_pbeids, 2L
 
+#define SN_pbe_WithSHA1And3_Key_TripleDES_CBC  "PBE-SHA1-3DES"
 #define LN_pbe_WithSHA1And3_Key_TripleDES_CBC  "pbeWithSHA1And3-KeyTripleDES-CBC"
 #define NID_pbe_WithSHA1And3_Key_TripleDES_CBC 146
 #define OBJ_pbe_WithSHA1And3_Key_TripleDES_CBC OBJ_pkcs12_pbeids, 3L
 
+#define SN_pbe_WithSHA1And2_Key_TripleDES_CBC  "PBE-SHA1-2DES"
 #define LN_pbe_WithSHA1And2_Key_TripleDES_CBC  "pbeWithSHA1And2-KeyTripleDES-CBC"
 #define NID_pbe_WithSHA1And2_Key_TripleDES_CBC 147
 #define OBJ_pbe_WithSHA1And2_Key_TripleDES_CBC OBJ_pkcs12_pbeids, 4L
 
+#define SN_pbe_WithSHA1And128BitRC2_CBC                "PBE-SHA1-RC2-128"
 #define LN_pbe_WithSHA1And128BitRC2_CBC                "pbeWithSHA1And128BitRC2-CBC"
 #define NID_pbe_WithSHA1And128BitRC2_CBC       148
 #define OBJ_pbe_WithSHA1And128BitRC2_CBC       OBJ_pkcs12_pbeids, 5L
 
+#define SN_pbe_WithSHA1And40BitRC2_CBC "PBE-SHA1-RC2-40"
 #define LN_pbe_WithSHA1And40BitRC2_CBC "pbeWithSHA1And40BitRC2-CBC"
 #define NID_pbe_WithSHA1And40BitRC2_CBC        149
 #define OBJ_pbe_WithSHA1And40BitRC2_CBC        OBJ_pkcs12_pbeids, 6L
@@ -876,19 +887,72 @@
 #define SN_SMIMECapabilities           "SMIME-CAPS"
 #define LN_SMIMECapabilities           "S/MIME Capabilities"
 #define NID_SMIMECapabilities          167
-#define OBJ_SMIMECapabilities          OBJ_id_pkcs9,15L
+#define OBJ_SMIMECapabilities          OBJ_pkcs9,15L
 
+#define SN_pbeWithMD2AndRC2_CBC                "PBE-MD2-RC2-64"
 #define LN_pbeWithMD2AndRC2_CBC                "pbeWithMD2AndRC2-CBC"
 #define NID_pbeWithMD2AndRC2_CBC       168
 #define OBJ_pbeWithMD2AndRC2_CBC       OBJ_pkcs,5L,4L
 
+#define SN_pbeWithMD5AndRC2_CBC                "PBE-MD5-RC2-64"
 #define LN_pbeWithMD5AndRC2_CBC                "pbeWithMD5AndRC2-CBC"
 #define NID_pbeWithMD5AndRC2_CBC       169
 #define OBJ_pbeWithMD5AndRC2_CBC       OBJ_pkcs,5L,6L
 
+#define SN_pbeWithSHA1AndDES_CBC       "PBE-SHA1-DES"
 #define LN_pbeWithSHA1AndDES_CBC       "pbeWithSHA1AndDES-CBC"
 #define NID_pbeWithSHA1AndDES_CBC      170
 #define OBJ_pbeWithSHA1AndDES_CBC      OBJ_pkcs,5L,10L
+
+/* Extension request OIDs */
+
+#define LN_ms_ext_req                  "Microsoft Extension Request"
+#define SN_ms_ext_req                  "msExtReq"
+#define NID_ms_ext_req                 171
+#define OBJ_ms_ext_req                 1L,3L,6L,1L,4L,1L,311L,2L,1L,14L
+
+#define LN_ext_req                     "Extension Request"
+#define SN_ext_req                     "extReq"
+#define NID_ext_req                    172
+#define OBJ_ext_req                    OBJ_pkcs9,14L
+
+#define SN_name                                "name"
+#define LN_name                                "name"
+#define NID_name                       173
+#define OBJ_name                       OBJ_X509,41L
+
+#define SN_dnQualifier                 "dnQualifier"
+#define LN_dnQualifier                 "dnQualifier"
+#define NID_dnQualifier                        174
+#define OBJ_dnQualifier                        OBJ_X509,46L
+
+#define SN_id_pe                       "id-pe"
+#define NID_id_pe                      175
+#define OBJ_id_pe                      OBJ_id_pkix,1L
+
+#define SN_id_ad                       "id-ad"
+#define NID_id_ad                      176
+#define OBJ_id_ad                      OBJ_id_pkix,48L
+
+#define SN_info_access                 "authorityInfoAccess"
+#define LN_info_access                 "Authority Information Access"
+#define NID_info_access                        177
+#define OBJ_info_access                        OBJ_id_pe,1L
+
+#define SN_ad_OCSP                     "OCSP"
+#define LN_ad_OCSP                     "OCSP"
+#define NID_ad_OCSP                    178
+#define OBJ_ad_OCSP                    OBJ_id_ad,1L
+
+#define SN_ad_ca_issuers               "caIssuers"
+#define LN_ad_ca_issuers               "CA Issuers"
+#define NID_ad_ca_issuers              179
+#define OBJ_ad_ca_issuers              OBJ_id_ad,2L
+
+#define SN_OSCP_sign                   "OCSPSigning"
+#define LN_OCSP_sign                   "OCSP Signing"
+#define NID_OCSP_sign                  180
+#define OBJ_OCSP_sign                  OBJ_id_kp,9L
 
 #include <openssl/bio.h>
 #include <openssl/asn1.h>
Index: opensa/openssl/crypto/pem/pem.h
diff -u opensa/openssl/crypto/pem/pem.h:1.1 opensa/openssl/crypto/pem/pem.h:1.2
--- opensa/openssl/crypto/pem/pem.h:1.1 Tue Jan 25 23:26:41 2000
+++ opensa/openssl/crypto/pem/pem.h     Thu Mar  2 21:11:57 2000
@@ -103,13 +103,16 @@
 
 #define PEM_STRING_X509_OLD    "X509 CERTIFICATE"
 #define PEM_STRING_X509                "CERTIFICATE"
+#define PEM_STRING_X509_TRUSTED        "TRUSTED CERTIFICATE"
 #define PEM_STRING_X509_REQ_OLD        "NEW CERTIFICATE REQUEST"
 #define PEM_STRING_X509_REQ    "CERTIFICATE REQUEST"
 #define PEM_STRING_X509_CRL    "X509 CRL"
 #define PEM_STRING_EVP_PKEY    "ANY PRIVATE KEY"
+#define PEM_STRING_PUBLIC      "PUBLIC KEY"
 #define PEM_STRING_RSA         "RSA PRIVATE KEY"
 #define PEM_STRING_RSA_PUBLIC  "RSA PUBLIC KEY"
 #define PEM_STRING_DSA         "DSA PRIVATE KEY"
+#define PEM_STRING_DSA_PUBLIC  "DSA PUBLIC KEY"
 #define PEM_STRING_PKCS7       "PKCS7"
 #define PEM_STRING_PKCS8       "ENCRYPTED PRIVATE KEY"
 #define PEM_STRING_PKCS8INF    "PRIVATE KEY"
@@ -528,7 +531,10 @@
 
 DECLARE_PEM_rw(X509, X509)
 
+DECLARE_PEM_rw(X509_AUX, X509)
+
 DECLARE_PEM_rw(X509_REQ, X509_REQ)
+DECLARE_PEM_write(X509_REQ_NEW, X509_REQ)
 
 DECLARE_PEM_rw(X509_CRL, X509_CRL)
 
@@ -545,6 +551,7 @@
 DECLARE_PEM_rw_cb(RSAPrivateKey, RSA)
 
 DECLARE_PEM_rw(RSAPublicKey, RSA)
+DECLARE_PEM_rw(RSA_PUBKEY, RSA)
 
 #endif
 
@@ -552,6 +559,8 @@
 
 DECLARE_PEM_rw_cb(DSAPrivateKey, DSA)
 
+DECLARE_PEM_rw(DSA_PUBKEY, DSA)
+
 DECLARE_PEM_rw(DSAparams, DSA)
 
 #endif
@@ -564,10 +573,36 @@
 
 DECLARE_PEM_rw_cb(PrivateKey, EVP_PKEY)
 
+DECLARE_PEM_rw(PUBKEY, EVP_PKEY)
+
+int PEM_write_bio_PKCS8PrivateKey_nid(BIO *bp, EVP_PKEY *x, int nid,
+                                 char *kstr, int klen,
+                                 pem_password_cb *cb, void *u);
 int PEM_write_bio_PKCS8PrivateKey(BIO *, EVP_PKEY *, const EVP_CIPHER *,
                                   char *, int, pem_password_cb *, void *);
+int i2d_PKCS8PrivateKey_bio(BIO *bp, EVP_PKEY *x, const EVP_CIPHER *enc,
+                                 char *kstr, int klen,
+                                 pem_password_cb *cb, void *u);
+int i2d_PKCS8PrivateKey_nid_bio(BIO *bp, EVP_PKEY *x, int nid,
+                                 char *kstr, int klen,
+                                 pem_password_cb *cb, void *u);
+EVP_PKEY *d2i_PKCS8PrivateKey_bio(BIO *bp, EVP_PKEY **x, pem_password_cb *cb, void 
+*u);
+
+int i2d_PKCS8PrivateKey_fp(FILE *fp, EVP_PKEY *x, const EVP_CIPHER *enc,
+                                 char *kstr, int klen,
+                                 pem_password_cb *cb, void *u);
+int i2d_PKCS8PrivateKey_nid_fp(FILE *fp, EVP_PKEY *x, int nid,
+                                 char *kstr, int klen,
+                                 pem_password_cb *cb, void *u);
+int PEM_write_PKCS8PrivateKey_nid(FILE *fp, EVP_PKEY *x, int nid,
+                                 char *kstr, int klen,
+                                 pem_password_cb *cb, void *u);
+
+EVP_PKEY *d2i_PKCS8PrivateKey_fp(FILE *fp, EVP_PKEY **x, pem_password_cb *cb, void 
+*u);
+
 int PEM_write_PKCS8PrivateKey(FILE *fp,EVP_PKEY *x,const EVP_CIPHER *enc,
                              char *kstr,int klen, pem_password_cb *cd, void *u);
+
 #endif /* SSLEAY_MACROS */
 
 
@@ -579,6 +614,8 @@
 /* Error codes for the PEM functions. */
 
 /* Function codes. */
+#define PEM_F_D2I_PKCS8PRIVATEKEY_BIO                   120
+#define PEM_F_D2I_PKCS8PRIVATEKEY_FP                    121
 #define PEM_F_DEF_CALLBACK                              100
 #define PEM_F_LOAD_IV                                   101
 #define PEM_F_PEM_ASN1_READ                             102
@@ -586,6 +623,7 @@
 #define PEM_F_PEM_ASN1_WRITE                            104
 #define PEM_F_PEM_ASN1_WRITE_BIO                        105
 #define PEM_F_PEM_DO_HEADER                             106
+#define PEM_F_PEM_F_DO_PK8KEY_FP                        122
 #define PEM_F_PEM_F_PEM_WRITE_PKCS8PRIVATEKEY           118
 #define PEM_F_PEM_GET_EVP_CIPHER_INFO                   107
 #define PEM_F_PEM_READ                                  108
Index: opensa/openssl/crypto/pem/pem_all.c
diff -u opensa/openssl/crypto/pem/pem_all.c:1.1 opensa/openssl/crypto/pem/pem_all.c:1.2
--- opensa/openssl/crypto/pem/pem_all.c:1.1     Tue Jan 25 23:26:41 2000
+++ opensa/openssl/crypto/pem/pem_all.c Thu Mar  2 21:11:57 2000
@@ -65,10 +65,21 @@
 #include <openssl/pkcs7.h>
 #include <openssl/pem.h>
 
+#ifndef NO_RSA
+static RSA *pkey_get_rsa(EVP_PKEY *key, RSA **rsa);
+#endif
+#ifndef NO_DSA
+static DSA *pkey_get_dsa(EVP_PKEY *key, DSA **dsa);
+#endif
+
 IMPLEMENT_PEM_rw(X509, X509, PEM_STRING_X509, X509)
 
+IMPLEMENT_PEM_rw(X509_AUX, X509, PEM_STRING_X509_TRUSTED, X509_AUX)
+
 IMPLEMENT_PEM_rw(X509_REQ, X509_REQ, PEM_STRING_X509_REQ, X509_REQ)
 
+IMPLEMENT_PEM_write(X509_REQ_NEW, X509_REQ, PEM_STRING_X509_REQ_OLD, X509_REQ)
+
 IMPLEMENT_PEM_rw(X509_CRL, X509_CRL, PEM_STRING_X509_CRL, X509_CRL)
 
 IMPLEMENT_PEM_rw(PKCS7, PKCS7, PEM_STRING_PKCS7, PKCS7)
@@ -82,16 +93,93 @@
 
 #ifndef NO_RSA
 
-IMPLEMENT_PEM_rw_cb(RSAPrivateKey, RSA, PEM_STRING_RSA, RSAPrivateKey)
+/* We treat RSA or DSA private keys as a special case.
+ *
+ * For private keys we read in an EVP_PKEY structure with
+ * PEM_read_bio_PrivateKey() and extract the relevant private
+ * key: this means can handle "traditional" and PKCS#8 formats
+ * transparently.
+ */
+
+static RSA *pkey_get_rsa(EVP_PKEY *key, RSA **rsa)
+{
+       RSA *rtmp;
+       if(!key) return NULL;
+       rtmp = EVP_PKEY_get1_RSA(key);
+       EVP_PKEY_free(key);
+       if(!rtmp) return NULL;
+       if(rsa) {
+               RSA_free(*rsa);
+               *rsa = rtmp;
+       }
+       return rtmp;
+}
+
+RSA *PEM_read_bio_RSAPrivateKey(BIO *bp, RSA **rsa, pem_password_cb *cb,
+                                                               void *u)
+{
+       EVP_PKEY *pktmp;
+       pktmp = PEM_read_bio_PrivateKey(bp, NULL, cb, u);
+       return pkey_get_rsa(pktmp, rsa);
+}
+
+#ifndef NO_FP_API
+
+RSA *PEM_read_RSAPrivateKey(FILE *fp, RSA **rsa, pem_password_cb *cb,
+                                                               void *u)
+{
+       EVP_PKEY *pktmp;
+       pktmp = PEM_read_PrivateKey(fp, NULL, cb, u);
+       return pkey_get_rsa(pktmp, rsa);
+}
+
+#endif
 
+IMPLEMENT_PEM_write_cb(RSAPrivateKey, RSA, PEM_STRING_RSA, RSAPrivateKey)
 IMPLEMENT_PEM_rw(RSAPublicKey, RSA, PEM_STRING_RSA_PUBLIC, RSAPublicKey)
+IMPLEMENT_PEM_rw(RSA_PUBKEY, RSA, PEM_STRING_PUBLIC, RSA_PUBKEY)
 
 #endif
 
 #ifndef NO_DSA
 
-IMPLEMENT_PEM_rw_cb(DSAPrivateKey, DSA, PEM_STRING_DSA, DSAPrivateKey)
+static DSA *pkey_get_dsa(EVP_PKEY *key, DSA **dsa)
+{
+       DSA *dtmp;
+       if(!key) return NULL;
+       dtmp = EVP_PKEY_get1_DSA(key);
+       EVP_PKEY_free(key);
+       if(!dtmp) return NULL;
+       if(dsa) {
+               DSA_free(*dsa);
+               *dsa = dtmp;
+       }
+       return dtmp;
+}
+
+DSA *PEM_read_bio_DSAPrivateKey(BIO *bp, DSA **dsa, pem_password_cb *cb,
+                                                               void *u)
+{
+       EVP_PKEY *pktmp;
+       pktmp = PEM_read_bio_PrivateKey(bp, NULL, cb, u);
+       return pkey_get_dsa(pktmp, dsa);
+}
+
+IMPLEMENT_PEM_write_cb(DSAPrivateKey, DSA, PEM_STRING_DSA, DSAPrivateKey)
+IMPLEMENT_PEM_rw(DSA_PUBKEY, DSA, PEM_STRING_PUBLIC, DSA_PUBKEY)
+
+#ifndef NO_FP_API
+
+DSA *PEM_read_DSAPrivateKey(FILE *fp, DSA **dsa, pem_password_cb *cb,
+                                                               void *u)
+{
+       EVP_PKEY *pktmp;
+       pktmp = PEM_read_PrivateKey(fp, NULL, cb, u);
+       return pkey_get_dsa(pktmp, dsa);
+}
 
+#endif
+
 IMPLEMENT_PEM_rw(DSAparams, DSA, PEM_STRING_DSAPARAMS, DSAparams)
 
 #endif
@@ -111,3 +199,5 @@
  */
 IMPLEMENT_PEM_read(PrivateKey, EVP_PKEY, PEM_STRING_EVP_PKEY, PrivateKey)
 IMPLEMENT_PEM_write_cb(PrivateKey, EVP_PKEY, ((x->type == 
EVP_PKEY_DSA)?PEM_STRING_DSA:PEM_STRING_RSA), PrivateKey)
+
+IMPLEMENT_PEM_rw(PUBKEY, EVP_PKEY, PEM_STRING_PUBLIC, PUBKEY)
Index: opensa/openssl/crypto/pem/pem_err.c
diff -u opensa/openssl/crypto/pem/pem_err.c:1.1 opensa/openssl/crypto/pem/pem_err.c:1.2
--- opensa/openssl/crypto/pem/pem_err.c:1.1     Tue Jan 25 23:26:41 2000
+++ opensa/openssl/crypto/pem/pem_err.c Thu Mar  2 21:11:57 2000
@@ -65,6 +65,8 @@
 #ifndef NO_ERR
 static ERR_STRING_DATA PEM_str_functs[]=
        {
+{ERR_PACK(0,PEM_F_D2I_PKCS8PRIVATEKEY_BIO,0),  "d2i_PKCS8PrivateKey_bio"},
+{ERR_PACK(0,PEM_F_D2I_PKCS8PRIVATEKEY_FP,0),   "d2i_PKCS8PrivateKey_fp"},
 {ERR_PACK(0,PEM_F_DEF_CALLBACK,0),     "DEF_CALLBACK"},
 {ERR_PACK(0,PEM_F_LOAD_IV,0),  "LOAD_IV"},
 {ERR_PACK(0,PEM_F_PEM_ASN1_READ,0),    "PEM_ASN1_read"},
@@ -72,6 +74,7 @@
 {ERR_PACK(0,PEM_F_PEM_ASN1_WRITE,0),   "PEM_ASN1_write"},
 {ERR_PACK(0,PEM_F_PEM_ASN1_WRITE_BIO,0),       "PEM_ASN1_write_bio"},
 {ERR_PACK(0,PEM_F_PEM_DO_HEADER,0),    "PEM_do_header"},
+{ERR_PACK(0,PEM_F_PEM_F_DO_PK8KEY_FP,0),       "PEM_F_DO_PK8KEY_FP"},
 {ERR_PACK(0,PEM_F_PEM_F_PEM_WRITE_PKCS8PRIVATEKEY,0),  
"PEM_F_PEM_WRITE_PKCS8PRIVATEKEY"},
 {ERR_PACK(0,PEM_F_PEM_GET_EVP_CIPHER_INFO,0),  "PEM_get_EVP_CIPHER_INFO"},
 {ERR_PACK(0,PEM_F_PEM_READ,0), "PEM_read"},
Index: opensa/openssl/crypto/pem/pem_info.c
diff -u opensa/openssl/crypto/pem/pem_info.c:1.1 
opensa/openssl/crypto/pem/pem_info.c:1.2
--- opensa/openssl/crypto/pem/pem_info.c:1.1    Tue Jan 25 23:26:41 2000
+++ opensa/openssl/crypto/pem/pem_info.c        Thu Mar  2 21:11:57 2000
@@ -132,6 +132,17 @@
                                }
                        pp=(char **)&(xi->x509);
                        }
+               else if ((strcmp(name,PEM_STRING_X509_TRUSTED) == 0))
+                       {
+                       d2i=(char *(*)())d2i_X509_AUX;
+                       if (xi->x509 != NULL)
+                               {
+                               if (!sk_X509_INFO_push(ret,xi)) goto err;
+                               if ((xi=X509_INFO_new()) == NULL) goto err;
+                               goto start;
+                               }
+                       pp=(char **)&(xi->x509);
+                       }
                else if (strcmp(name,PEM_STRING_X509_CRL) == 0)
                        {
                        d2i=(char *(*)())d2i_X509_CRL;
Index: opensa/openssl/crypto/pem/pem_lib.c
diff -u opensa/openssl/crypto/pem/pem_lib.c:1.1 opensa/openssl/crypto/pem/pem_lib.c:1.2
--- opensa/openssl/crypto/pem/pem_lib.c:1.1     Tue Jan 25 23:26:41 2000
+++ opensa/openssl/crypto/pem/pem_lib.c Thu Mar  2 21:11:57 2000
@@ -75,8 +75,17 @@
 
 static int def_callback(char *buf, int num, int w, void *userdata);
 static int load_iv(unsigned char **fromp,unsigned char *to, int num);
+static int check_pem(const char *nm, const char *name);
+static int do_pk8pkey(BIO *bp, EVP_PKEY *x, int isder,
+                               int nid, const EVP_CIPHER *enc,
+                               char *kstr, int klen,
+                               pem_password_cb *cb, void *u);
+static int do_pk8pkey_fp(FILE *bp, EVP_PKEY *x, int isder,
+                               int nid, const EVP_CIPHER *enc,
+                               char *kstr, int klen,
+                               pem_password_cb *cb, void *u);
 
-static int def_callback(char *buf, int num, int w, void *userdata)
+static int def_callback(char *buf, int num, int w, void *key)
        {
 #ifdef NO_FP_API
        /* We should not ever call the default callback routine from
@@ -86,6 +95,12 @@
 #else
        int i,j;
        const char *prompt;
+       if(key) {
+               i=strlen(key);
+               i=(i > num)?num:i;
+               memcpy(buf,key,i);
+               return(i);
+       }
 
        prompt=EVP_get_pw_prompt();
        if (prompt == NULL)
@@ -168,6 +183,47 @@
        }
 #endif
 
+static int check_pem(const char *nm, const char *name)
+{
+       /* Normal matching nm and name */
+       if (!strcmp(nm,name)) return 1;
+
+       /* Make PEM_STRING_EVP_PKEY match any private key */
+
+       if(!strcmp(nm,PEM_STRING_PKCS8) &&
+               !strcmp(name,PEM_STRING_EVP_PKEY)) return 1;
+
+       if(!strcmp(nm,PEM_STRING_PKCS8INF) &&
+                !strcmp(name,PEM_STRING_EVP_PKEY)) return 1;
+
+       if(!strcmp(nm,PEM_STRING_RSA) &&
+               !strcmp(name,PEM_STRING_EVP_PKEY)) return 1;
+
+       if(!strcmp(nm,PEM_STRING_DSA) &&
+                !strcmp(name,PEM_STRING_EVP_PKEY)) return 1;
+
+       /* Permit older strings */
+
+       if(!strcmp(nm,PEM_STRING_X509_OLD) &&
+               !strcmp(name,PEM_STRING_X509)) return 1;
+
+       if(!strcmp(nm,PEM_STRING_X509_REQ_OLD) &&
+               !strcmp(name,PEM_STRING_X509_REQ)) return 1;
+
+       /* Allow normal certs to be read as trusted certs */
+       if(!strcmp(nm,PEM_STRING_X509) &&
+               !strcmp(name,PEM_STRING_X509_TRUSTED)) return 1;
+
+       if(!strcmp(nm,PEM_STRING_X509_OLD) &&
+               !strcmp(name,PEM_STRING_X509_TRUSTED)) return 1;
+
+       /* Some CAs use PKCS#7 with CERTIFICATE headers */
+       if(!strcmp(nm, PEM_STRING_X509) &&
+               !strcmp(name, PEM_STRING_PKCS7)) return 1;
+
+       return 0;
+}
+
 char *PEM_ASN1_read_bio(char *(*d2i)(), const char *name, BIO *bp, char **x,
             pem_password_cb *cb, void *u)
        {
@@ -179,22 +235,13 @@
 
        for (;;)
                {
-               if (!PEM_read_bio(bp,&nm,&header,&data,&len)) return(NULL);
-               if (    (strcmp(nm,name) == 0) ||
-                       ((strcmp(nm,PEM_STRING_RSA) == 0) &&
-                        (strcmp(name,PEM_STRING_EVP_PKEY) == 0)) ||
-                       ((strcmp(nm,PEM_STRING_DSA) == 0) &&
-                        (strcmp(name,PEM_STRING_EVP_PKEY) == 0)) ||
-                       ((strcmp(nm,PEM_STRING_PKCS8) == 0) &&
-                        (strcmp(name,PEM_STRING_EVP_PKEY) == 0)) ||
-                       ((strcmp(nm,PEM_STRING_PKCS8INF) == 0) &&
-                        (strcmp(name,PEM_STRING_EVP_PKEY) == 0)) ||
-                       ((strcmp(nm,PEM_STRING_X509_OLD) == 0) &&
-                        (strcmp(name,PEM_STRING_X509) == 0)) ||
-                       ((strcmp(nm,PEM_STRING_X509_REQ_OLD) == 0) &&
-                        (strcmp(name,PEM_STRING_X509_REQ) == 0)) 
-                       )
-                       break;
+               if (!PEM_read_bio(bp,&nm,&header,&data,&len)) {
+                       if(ERR_GET_REASON(ERR_peek_error()) ==
+                               PEM_R_NO_START_LINE)
+                               ERR_add_error_data(2, "Expecting: ", name);
+                       return(NULL);
+               }
+               if(check_pem(nm, name)) break;
                Free(nm);
                Free(header);
                Free(data);
@@ -218,7 +265,7 @@
                        X509_SIG *p8;
                        int klen;
                        char psbuf[PEM_BUFSIZE];
-                       p8 = d2i_X509_SIG((X509_SIG **)x, &p, len);
+                       p8 = d2i_X509_SIG(NULL, &p, len);
                        if(!p8) goto p8err;
                        if (cb) klen=cb(psbuf,PEM_BUFSIZE,0,u);
                        else klen=def_callback(psbuf,PEM_BUFSIZE,0,u);
@@ -231,6 +278,10 @@
                        X509_SIG_free(p8);
                        if(!p8inf) goto p8err;
                        ret = (char *)EVP_PKCS82PKEY(p8inf);
+                       if(x) {
+                               if(*x) EVP_PKEY_free((EVP_PKEY *)*x);
+                               *x = ret;
+                       }
                        PKCS8_PRIV_KEY_INFO_free(p8inf);
                }
        } else  ret=d2i(x,&p,len);
@@ -321,8 +372,9 @@
 #endif
                        kstr=(unsigned char *)buf;
                        }
-               RAND_seed(data,i);/* put in the RSA key. */
-               RAND_bytes(iv,8);       /* Generate a salt */
+               RAND_add(data,i,0);/* put in the RSA key. */
+               if (RAND_bytes(iv,8) <= 0)      /* Generate a salt */
+                       goto err;
                /* The 'iv' is used as the iv and as a salt.  It is
                 * NOT taken from the BytesToKey function */
                EVP_BytesToKey(enc,EVP_md5(),iv,kstr,klen,1,key,NULL);
@@ -743,16 +795,44 @@
        return(0);
        }
 
-/* This function writes a private key in PKCS#8 format: it is a "drop in"
- * replacement for PEM_write_bio_PrivateKey(). As usual if 'enc' is NULL then
- * it uses the unencrypted private key form. It uses PKCS#5 v2.0 password based
- * encryption algorithms.
+/* These functions write a private key in PKCS#8 format: it is a "drop in"
+ * replacement for PEM_write_bio_PrivateKey() and friends. As usual if 'enc'
+ * is NULL then it uses the unencrypted private key form. The 'nid' versions
+ * uses PKCS#5 v1.5 PBE algorithms whereas the others use PKCS#5 v2.0.
  */
 
+int PEM_write_bio_PKCS8PrivateKey_nid(BIO *bp, EVP_PKEY *x, int nid,
+                                 char *kstr, int klen,
+                                 pem_password_cb *cb, void *u)
+{
+       return do_pk8pkey(bp, x, 0, nid, NULL, kstr, klen, cb, u);
+}
+
 int PEM_write_bio_PKCS8PrivateKey(BIO *bp, EVP_PKEY *x, const EVP_CIPHER *enc,
                                  char *kstr, int klen,
                                  pem_password_cb *cb, void *u)
 {
+       return do_pk8pkey(bp, x, 0, -1, enc, kstr, klen, cb, u);
+}
+
+int i2d_PKCS8PrivateKey_bio(BIO *bp, EVP_PKEY *x, const EVP_CIPHER *enc,
+                                 char *kstr, int klen,
+                                 pem_password_cb *cb, void *u)
+{
+       return do_pk8pkey(bp, x, 1, -1, enc, kstr, klen, cb, u);
+}
+
+int i2d_PKCS8PrivateKey_nid_bio(BIO *bp, EVP_PKEY *x, int nid,
+                                 char *kstr, int klen,
+                                 pem_password_cb *cb, void *u)
+{
+       return do_pk8pkey(bp, x, 1, nid, NULL, kstr, klen, cb, u);
+}
+
+static int do_pk8pkey(BIO *bp, EVP_PKEY *x, int isder, int nid, const EVP_CIPHER *enc,
+                                 char *kstr, int klen,
+                                 pem_password_cb *cb, void *u)
+{
        X509_SIG *p8;
        PKCS8_PRIV_KEY_INFO *p8inf;
        char buf[PEM_BUFSIZE];
@@ -762,7 +842,7 @@
                                        PEM_R_ERROR_CONVERTING_PRIVATE_KEY);
                return 0;
        }
-       if(enc) {
+       if(enc || (nid != -1)) {
                if(!kstr) {
                        if(!cb) klen = def_callback(buf, PEM_BUFSIZE, 1, u);
                        else klen = cb(buf, PEM_BUFSIZE, 1, u);
@@ -775,29 +855,109 @@
                                
                        kstr = buf;
                }
-               p8 = PKCS8_encrypt(-1, enc, kstr, klen, NULL, 0, 0, p8inf);
+               p8 = PKCS8_encrypt(nid, enc, kstr, klen, NULL, 0, 0, p8inf);
                if(kstr == buf) memset(buf, 0, klen);
                PKCS8_PRIV_KEY_INFO_free(p8inf);
-               ret = PEM_write_bio_PKCS8(bp, p8);
+               if(isder) ret = i2d_PKCS8_bio(bp, p8);
+               else ret = PEM_write_bio_PKCS8(bp, p8);
                X509_SIG_free(p8);
                return ret;
        } else {
-               ret = PEM_write_bio_PKCS8_PRIV_KEY_INFO(bp, p8inf);
+               if(isder) ret = i2d_PKCS8_PRIV_KEY_INFO_bio(bp, p8inf);
+               else ret = PEM_write_bio_PKCS8_PRIV_KEY_INFO(bp, p8inf);
                PKCS8_PRIV_KEY_INFO_free(p8inf);
                return ret;
        }
 }
 
+/* Finally the DER version to read PKCS#8 encrypted private keys. It has to be
+ * here to access the default callback.
+ */
+
+EVP_PKEY *d2i_PKCS8PrivateKey_bio(BIO *bp, EVP_PKEY **x, pem_password_cb *cb, void *u)
+{
+       PKCS8_PRIV_KEY_INFO *p8inf = NULL;
+       X509_SIG *p8 = NULL;
+       int klen;
+       EVP_PKEY *ret;
+       char psbuf[PEM_BUFSIZE];
+       p8 = d2i_PKCS8_bio(bp, NULL);
+       if(!p8) return NULL;
+       if (cb) klen=cb(psbuf,PEM_BUFSIZE,0,u);
+       else klen=def_callback(psbuf,PEM_BUFSIZE,0,u);
+       if (klen <= 0) {
+               PEMerr(PEM_F_D2I_PKCS8PRIVATEKEY_BIO, PEM_R_BAD_PASSWORD_READ);
+               X509_SIG_free(p8);
+               return NULL;    
+       }
+       p8inf = M_PKCS8_decrypt(p8, psbuf, klen);
+       X509_SIG_free(p8);
+       if(!p8inf) return NULL;
+       ret = EVP_PKCS82PKEY(p8inf);
+       PKCS8_PRIV_KEY_INFO_free(p8inf);
+       if(!ret) return NULL;
+       if(x) {
+               if(*x) EVP_PKEY_free(*x);
+               *x = ret;
+       }
+       return ret;
+}
+
+#ifndef NO_FP_API
+
+int i2d_PKCS8PrivateKey_fp(FILE *fp, EVP_PKEY *x, const EVP_CIPHER *enc,
+                                 char *kstr, int klen,
+                                 pem_password_cb *cb, void *u)
+{
+       return do_pk8pkey_fp(fp, x, 1, -1, enc, kstr, klen, cb, u);
+}
+
+int i2d_PKCS8PrivateKey_nid_fp(FILE *fp, EVP_PKEY *x, int nid,
+                                 char *kstr, int klen,
+                                 pem_password_cb *cb, void *u)
+{
+       return do_pk8pkey_fp(fp, x, 1, nid, NULL, kstr, klen, cb, u);
+}
+
+int PEM_write_PKCS8PrivateKey_nid(FILE *fp, EVP_PKEY *x, int nid,
+                                 char *kstr, int klen,
+                                 pem_password_cb *cb, void *u)
+{
+       return do_pk8pkey_fp(fp, x, 0, nid, NULL, kstr, klen, cb, u);
+}
+
 int PEM_write_PKCS8PrivateKey(FILE *fp, EVP_PKEY *x, const EVP_CIPHER *enc,
                              char *kstr, int klen, pem_password_cb *cb, void *u)
 {
+       return do_pk8pkey_fp(fp, x, 0, -1, enc, kstr, klen, cb, u);
+}
+
+static int do_pk8pkey_fp(FILE *fp, EVP_PKEY *x, int isder, int nid, const EVP_CIPHER 
+*enc,
+                                 char *kstr, int klen,
+                                 pem_password_cb *cb, void *u)
+{
        BIO *bp;
        int ret;
        if(!(bp = BIO_new_fp(fp, BIO_NOCLOSE))) {
-               PEMerr(PEM_F_PEM_F_PEM_WRITE_PKCS8PRIVATEKEY,ERR_R_BUF_LIB);
+               PEMerr(PEM_F_PEM_F_DO_PK8KEY_FP,ERR_R_BUF_LIB);
                 return(0);
        }
-       ret = PEM_write_bio_PKCS8PrivateKey(bp, x, enc, kstr, klen, cb, u);
+       ret = do_pk8pkey(bp, x, isder, nid, enc, kstr, klen, cb, u);
        BIO_free(bp);
        return ret;
 }
+
+EVP_PKEY *d2i_PKCS8PrivateKey_fp(FILE *fp, EVP_PKEY **x, pem_password_cb *cb, void *u)
+{
+       BIO *bp;
+       EVP_PKEY *ret;
+       if(!(bp = BIO_new_fp(fp, BIO_NOCLOSE))) {
+               PEMerr(PEM_F_D2I_PKCS8PRIVATEKEY_FP,ERR_R_BUF_LIB);
+                return NULL;
+       }
+       ret = d2i_PKCS8PrivateKey_bio(bp, x, cb, u);
+       BIO_free(bp);
+       return ret;
+}
+
+#endif
Index: opensa/openssl/crypto/pem/pem_seal.c
diff -u opensa/openssl/crypto/pem/pem_seal.c:1.1 
opensa/openssl/crypto/pem/pem_seal.c:1.2
--- opensa/openssl/crypto/pem/pem_seal.c:1.1    Tue Jan 25 23:26:41 2000
+++ opensa/openssl/crypto/pem/pem_seal.c        Thu Mar  2 21:11:57 2000
@@ -175,4 +175,10 @@
        if (s != NULL) Free(s);
        return(ret);
        }
+#else /* !NO_RSA */
+
+# if PEDANTIC
+static void *dummy=&dummy;
+# endif
+
 #endif
Index: opensa/openssl/crypto/perlasm/x86ms.pl
diff -u opensa/openssl/crypto/perlasm/x86ms.pl:1.1 
opensa/openssl/crypto/perlasm/x86ms.pl:1.2
--- opensa/openssl/crypto/perlasm/x86ms.pl:1.1  Tue Jan 25 23:26:27 2000
+++ opensa/openssl/crypto/perlasm/x86ms.pl      Thu Mar  2 21:11:58 2000
@@ -341,7 +341,14 @@
                $label{$_[0]}="${label}${_[0]}";
                $label++;
                }
-       push(@out,"$label{$_[0]}:\n");
+       if((defined $_[1]) && ($_[1] == 1))
+               {
+               push(@out,"$label{$_[0]}::\n");
+               }
+       else
+               {
+               push(@out,"$label{$_[0]}:\n");
+               }
        }
 
 sub main'data_word
Index: opensa/openssl/crypto/perlasm/x86unix.pl
diff -u opensa/openssl/crypto/perlasm/x86unix.pl:1.1 
opensa/openssl/crypto/perlasm/x86unix.pl:1.2
--- opensa/openssl/crypto/perlasm/x86unix.pl:1.1        Tue Jan 25 23:26:27 2000
+++ opensa/openssl/crypto/perlasm/x86unix.pl    Thu Mar  2 21:11:58 2000
@@ -368,10 +368,10 @@
 
        $func=$under.$func;
 
-       push(@out,".${func}_end:\n");
+       push(@out,".L_${func}_end:\n");
        if ($main'cpp)
-               { push(@out,"\tSIZE($func,.${func}_end-$func)\n"); }
-       else    { push(@out,"\t.size\t$func,.${func}_end-$func\n"); }
+               { push(@out,"\tSIZE($func,.L_${func}_end-$func)\n"); }
+       else    { push(@out,"\t.size\t$func,.L_${func}_end-$func\n"); }
        push(@out,".ident       \"desasm.pl\"\n");
        $stack=0;
        %label=();
Index: opensa/openssl/crypto/pkcs12/makefile.ssl
diff -u opensa/openssl/crypto/pkcs12/makefile.ssl:1.1 
opensa/openssl/crypto/pkcs12/makefile.ssl:1.2
--- opensa/openssl/crypto/pkcs12/makefile.ssl:1.1       Tue Jan 25 23:26:09 2000
+++ opensa/openssl/crypto/pkcs12/makefile.ssl   Thu Mar  2 21:11:58 2000
@@ -1,5 +1,5 @@
 #
-# SSLeay/crypto/asn1/Makefile
+# SSLeay/crypto/pkcs12/Makefile
 #
 
 DIR=   pkcs12
@@ -24,10 +24,10 @@
 LIB=$(TOP)/libcrypto.a
 LIBSRC= p12_add.c p12_attr.c p12_bags.c p12_crpt.c p12_crt.c p12_decr.c \
        p12_init.c p12_key.c p12_kiss.c p12_lib.c p12_mac.c p12_mutl.c\
-       p12_sbag.c p12_utl.c pk12err.c
+       p12_sbag.c p12_utl.c p12_npas.c pk12err.c
 LIBOBJ= p12_add.o p12_attr.o p12_bags.o p12_crpt.o p12_crt.o p12_decr.o \
        p12_init.o p12_key.o p12_kiss.o p12_lib.o p12_mac.o p12_mutl.o\
-       p12_sbag.o p12_utl.o pk12err.o
+       p12_sbag.o p12_utl.o p12_npas.o pk12err.o
 
 SRC= $(LIBSRC)
 
@@ -293,6 +293,23 @@
 p12_mutl.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 p12_mutl.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
 p12_mutl.o: ../cryptlib.h
+p12_npas.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
+p12_npas.o: ../../include/openssl/blowfish.h ../../include/openssl/bn.h
+p12_npas.o: ../../include/openssl/cast.h ../../include/openssl/crypto.h
+p12_npas.o: ../../include/openssl/des.h ../../include/openssl/dh.h
+p12_npas.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
+p12_npas.o: ../../include/openssl/err.h ../../include/openssl/evp.h
+p12_npas.o: ../../include/openssl/idea.h ../../include/openssl/md2.h
+p12_npas.o: ../../include/openssl/md5.h ../../include/openssl/mdc2.h
+p12_npas.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
+p12_npas.o: ../../include/openssl/opensslv.h ../../include/openssl/pem.h
+p12_npas.o: ../../include/openssl/pem2.h ../../include/openssl/pkcs12.h
+p12_npas.o: ../../include/openssl/pkcs7.h ../../include/openssl/rc2.h
+p12_npas.o: ../../include/openssl/rc4.h ../../include/openssl/rc5.h
+p12_npas.o: ../../include/openssl/ripemd.h ../../include/openssl/rsa.h
+p12_npas.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
+p12_npas.o: ../../include/openssl/stack.h ../../include/openssl/x509.h
+p12_npas.o: ../../include/openssl/x509_vfy.h
 p12_sbag.o: ../../include/openssl/asn1.h ../../include/openssl/asn1_mac.h
 p12_sbag.o: ../../include/openssl/bio.h ../../include/openssl/blowfish.h
 p12_sbag.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
Index: opensa/openssl/crypto/pkcs12/p12_add.c
diff -u opensa/openssl/crypto/pkcs12/p12_add.c:1.1 
opensa/openssl/crypto/pkcs12/p12_add.c:1.2
--- opensa/openssl/crypto/pkcs12/p12_add.c:1.1  Tue Jan 25 23:26:09 2000
+++ opensa/openssl/crypto/pkcs12/p12_add.c      Thu Mar  2 21:11:58 2000
@@ -133,7 +133,7 @@
                return NULL;
        }
        p7->type = OBJ_nid2obj(NID_pkcs7_data);
-       if (!(p7->d.data = ASN1_OCTET_STRING_new())) {
+       if (!(p7->d.data = M_ASN1_OCTET_STRING_new())) {
                PKCS12err(PKCS12_F_PKCS12_PACK_P7DATA, ERR_R_MALLOC_FAILURE);
                return NULL;
        }
@@ -157,20 +157,18 @@
                PKCS12err(PKCS12_F_PKCS12_PACK_P7ENCDATA, ERR_R_MALLOC_FAILURE);
                return NULL;
        }
-       p7->type = OBJ_nid2obj(NID_pkcs7_encrypted);
-       if (!(p7->d.encrypted = PKCS7_ENCRYPT_new ())) {
-               PKCS12err(PKCS12_F_PKCS12_PACK_P7ENCDATA, ERR_R_MALLOC_FAILURE);
+       if(!PKCS7_set_type(p7, NID_pkcs7_encrypted)) {
+               PKCS12err(PKCS12_F_PKCS12_PACK_P7ENCDATA,
+                               PKCS12_R_ERROR_SETTING_ENCRYPTED_DATA_TYPE);
                return NULL;
        }
-       ASN1_INTEGER_set (p7->d.encrypted->version, 0);
-       p7->d.encrypted->enc_data->content_type = OBJ_nid2obj(NID_pkcs7_data);
        if (!(pbe = PKCS5_pbe_set (pbe_nid, iter, salt, saltlen))) {
                PKCS12err(PKCS12_F_PKCS12_PACK_P7ENCDATA, ERR_R_MALLOC_FAILURE);
                return NULL;
        }
        X509_ALGOR_free(p7->d.encrypted->enc_data->algorithm);
        p7->d.encrypted->enc_data->algorithm = pbe;
-       ASN1_OCTET_STRING_free(p7->d.encrypted->enc_data->enc_data);
+       M_ASN1_OCTET_STRING_free(p7->d.encrypted->enc_data->enc_data);
        if (!(p7->d.encrypted->enc_data->enc_data =
        PKCS12_i2d_encrypt (pbe, i2d_PKCS12_SAFEBAG, pass, passlen,
                                 (char *)bags, 1))) {
@@ -191,24 +189,28 @@
 
        if (!(p8 = X509_SIG_new())) {
                PKCS12err(PKCS12_F_PKCS8_ENCRYPT, ERR_R_MALLOC_FAILURE);
-               return NULL;
+               goto err;
        }
 
        if(pbe_nid == -1) pbe = PKCS5_pbe2_set(cipher, iter, salt, saltlen);
        else pbe = PKCS5_pbe_set(pbe_nid, iter, salt, saltlen);
        if(!pbe) {
-               PKCS12err(PKCS12_F_PKCS8_ENCRYPT, ERR_R_MALLOC_FAILURE);
-               return NULL;
+               PKCS12err(PKCS12_F_PKCS8_ENCRYPT, ERR_R_ASN1_LIB);
+               goto err;
        }
        X509_ALGOR_free(p8->algor);
        p8->algor = pbe;
-       ASN1_OCTET_STRING_free(p8->digest);
+       M_ASN1_OCTET_STRING_free(p8->digest);
        if (!(p8->digest = 
        PKCS12_i2d_encrypt (pbe, i2d_PKCS8_PRIV_KEY_INFO, pass, passlen,
                                                 (char *)p8inf, 0))) {
                PKCS12err(PKCS12_F_PKCS8_ENCRYPT, PKCS12_R_ENCRYPT_ERROR);
-               return NULL;
+               goto err;
        }
 
        return p8;
+
+       err:
+       X509_SIG_free(p8);
+       return NULL;
 }
Index: opensa/openssl/crypto/pkcs12/p12_attr.c
diff -u opensa/openssl/crypto/pkcs12/p12_attr.c:1.1 
opensa/openssl/crypto/pkcs12/p12_attr.c:1.2
--- opensa/openssl/crypto/pkcs12/p12_attr.c:1.1 Tue Jan 25 23:26:09 2000
+++ opensa/openssl/crypto/pkcs12/p12_attr.c     Thu Mar  2 21:11:58 2000
@@ -73,11 +73,11 @@
                return 0;
        }
        keyid->type = V_ASN1_OCTET_STRING;
-       if (!(oct = ASN1_OCTET_STRING_new())) {
+       if (!(oct = M_ASN1_OCTET_STRING_new())) {
                PKCS12err(PKCS12_F_PKCS12_ADD_LOCALKEYID, ERR_R_MALLOC_FAILURE);
                return 0;
        }
-       if (!ASN1_OCTET_STRING_set(oct, name, namelen)) {
+       if (!M_ASN1_OCTET_STRING_set(oct, name, namelen)) {
                PKCS12err(PKCS12_F_PKCS12_ADD_LOCALKEYID, ERR_R_MALLOC_FAILURE);
                return 0;
        }
@@ -115,11 +115,11 @@
                return 0;
        }
        keyid->type = V_ASN1_BIT_STRING;
-       if (!(bstr = ASN1_BIT_STRING_new())) {
+       if (!(bstr = M_ASN1_BIT_STRING_new())) {
                PKCS12err(PKCS12_F_PKCS8_ADD_KEYUSAGE, ERR_R_MALLOC_FAILURE);
                return 0;
        }
-       if (!ASN1_BIT_STRING_set(bstr, &us_val, 1)) {
+       if (!M_ASN1_BIT_STRING_set(bstr, &us_val, 1)) {
                PKCS12err(PKCS12_F_PKCS8_ADD_KEYUSAGE, ERR_R_MALLOC_FAILURE);
                return 0;
        }
@@ -176,7 +176,7 @@
                return 0;
        }
        fname->type = V_ASN1_BMPSTRING;
-       if (!(bmp = ASN1_BMPSTRING_new())) {
+       if (!(bmp = M_ASN1_BMPSTRING_new())) {
                PKCS12err(PKCS12_F_PKCS12_ADD_FRIENDLYNAME_UNI,
                                                        ERR_R_MALLOC_FAILURE);
                return 0;
Index: opensa/openssl/crypto/pkcs12/p12_bags.c
diff -u opensa/openssl/crypto/pkcs12/p12_bags.c:1.1 
opensa/openssl/crypto/pkcs12/p12_bags.c:1.2
--- opensa/openssl/crypto/pkcs12/p12_bags.c:1.1 Tue Jan 25 23:26:09 2000
+++ opensa/openssl/crypto/pkcs12/p12_bags.c     Thu Mar  2 21:11:58 2000
@@ -171,15 +171,15 @@
        switch (OBJ_obj2nid(a->type)) {
 
                case NID_x509Certificate:
-                       ASN1_OCTET_STRING_free (a->value.x509cert);
+                       M_ASN1_OCTET_STRING_free (a->value.x509cert);
                break;
 
                case NID_x509Crl:
-                       ASN1_OCTET_STRING_free (a->value.x509crl);
+                       M_ASN1_OCTET_STRING_free (a->value.x509crl);
                break;
 
                case NID_sdsiCertificate:
-                       ASN1_IA5STRING_free (a->value.sdsicert);
+                       M_ASN1_IA5STRING_free (a->value.sdsicert);
                break;
 
                default:
@@ -188,5 +188,5 @@
        }
 
        ASN1_OBJECT_free (a->type);
-       Free ((char *)a);
+       Free (a);
 }
Index: opensa/openssl/crypto/pkcs12/p12_crpt.c
diff -u opensa/openssl/crypto/pkcs12/p12_crpt.c:1.1 
opensa/openssl/crypto/pkcs12/p12_crpt.c:1.2
--- opensa/openssl/crypto/pkcs12/p12_crpt.c:1.1 Tue Jan 25 23:26:09 2000
+++ opensa/openssl/crypto/pkcs12/p12_crpt.c     Thu Mar  2 21:11:58 2000
@@ -70,10 +70,12 @@
 EVP_PBE_alg_add(NID_pbe_WithSHA1And40BitRC4, EVP_rc4_40(), EVP_sha1(),
                                                         PKCS12_PBE_keyivgen);
 #endif
+#ifndef NO_DES
 EVP_PBE_alg_add(NID_pbe_WithSHA1And3_Key_TripleDES_CBC,
                        EVP_des_ede3_cbc(), EVP_sha1(), PKCS12_PBE_keyivgen);
 EVP_PBE_alg_add(NID_pbe_WithSHA1And2_Key_TripleDES_CBC, 
                        EVP_des_ede_cbc(), EVP_sha1(), PKCS12_PBE_keyivgen);
+#endif
 #ifndef NO_RC2
 EVP_PBE_alg_add(NID_pbe_WithSHA1And128BitRC2_CBC, EVP_rc2_cbc(),
                                        EVP_sha1(), PKCS12_PBE_keyivgen);
Index: opensa/openssl/crypto/pkcs12/p12_decr.c
diff -u opensa/openssl/crypto/pkcs12/p12_decr.c:1.1 
opensa/openssl/crypto/pkcs12/p12_decr.c:1.2
--- opensa/openssl/crypto/pkcs12/p12_decr.c:1.1 Tue Jan 25 23:26:09 2000
+++ opensa/openssl/crypto/pkcs12/p12_decr.c     Thu Mar  2 21:11:58 2000
@@ -155,7 +155,7 @@
        ASN1_OCTET_STRING *oct;
        unsigned char *in, *p;
        int inlen;
-       if (!(oct = ASN1_OCTET_STRING_new ())) {
+       if (!(oct = M_ASN1_OCTET_STRING_new ())) {
                PKCS12err(PKCS12_F_PKCS12_I2D_ENCRYPT,ERR_R_MALLOC_FAILURE);
                return NULL;
        }
Index: opensa/openssl/crypto/pkcs12/p12_init.c
diff -u opensa/openssl/crypto/pkcs12/p12_init.c:1.1 
opensa/openssl/crypto/pkcs12/p12_init.c:1.2
--- opensa/openssl/crypto/pkcs12/p12_init.c:1.1 Tue Jan 25 23:26:09 2000
+++ opensa/openssl/crypto/pkcs12/p12_init.c     Thu Mar  2 21:11:58 2000
@@ -69,11 +69,11 @@
                PKCS12err(PKCS12_F_PKCS12_INIT,ERR_R_MALLOC_FAILURE);
                return NULL;
        }
-       if (!(pkcs12->version = ASN1_INTEGER_new ())) {
+       if (!(pkcs12->version = M_ASN1_INTEGER_new ())) {
                PKCS12err(PKCS12_F_PKCS12_INIT,ERR_R_MALLOC_FAILURE);
                return NULL;
        }
-       ASN1_INTEGER_set (pkcs12->version, 3);
+       ASN1_INTEGER_set(pkcs12->version, 3);
        if (!(pkcs12->authsafes = PKCS7_new())) {
                PKCS12err(PKCS12_F_PKCS12_INIT,ERR_R_MALLOC_FAILURE);
                return NULL;
@@ -82,7 +82,7 @@
        switch (mode) {
                case NID_pkcs7_data:
                        if (!(pkcs12->authsafes->d.data =
-                                ASN1_OCTET_STRING_new())) {
+                                M_ASN1_OCTET_STRING_new())) {
                        PKCS12err(PKCS12_F_PKCS12_INIT,ERR_R_MALLOC_FAILURE);
                        return NULL;
                }
Index: opensa/openssl/crypto/pkcs12/p12_key.c
diff -u opensa/openssl/crypto/pkcs12/p12_key.c:1.1 
opensa/openssl/crypto/pkcs12/p12_key.c:1.2
--- opensa/openssl/crypto/pkcs12/p12_key.c:1.1  Tue Jan 25 23:26:09 2000
+++ opensa/openssl/crypto/pkcs12/p12_key.c      Thu Mar  2 21:11:58 2000
@@ -64,7 +64,7 @@
 /* Uncomment out this line to get debugging info about key generation */
 /*#define DEBUG_KEYGEN*/
 #ifdef DEBUG_KEYGEN
-#include <bio.h>
+#include <openssl/bio.h>
 extern BIO *bio_err;
 void h__dump (unsigned char *p, int len);
 #endif
@@ -104,13 +104,12 @@
 #ifdef  DEBUG_KEYGEN
        unsigned char *tmpout = out;
        int tmpn = n;
-       BIO_printf (bio_err, "KEYGEN DEBUG\n");
-       BIO_printf (bio_err, "ID %d, ITER %d\n", id, iter);
-       BIO_printf (bio_err, "Password (length %d):\n", passlen);
-       h__dump (pass, passlen);
-       BIO_printf (bio_err, "Salt (length %d):\n", saltlen);
-       h__dump (salt, saltlen);
-       BIO_printf (bio_err, "ID %d, ITER %d\n\n", id, iter);
+       fprintf(stderr, "KEYGEN DEBUG\n");
+       fprintf(stderr, "ID %d, ITER %d\n", id, iter);
+       fprintf(stderr, "Password (length %d):\n", passlen);
+       h__dump(pass, passlen);
+       fprintf(stderr, "Salt (length %d):\n", saltlen);
+       h__dump(salt, saltlen);
 #endif
        v = EVP_MD_block_size (md_type);
        u = EVP_MD_size (md_type);
@@ -150,8 +149,8 @@
                        BN_free (Ij);
                        BN_free (Bpl1);
 #ifdef DEBUG_KEYGEN
-                       BIO_printf (bio_err, "Output KEY (length %d)\n", tmpn);
-                       h__dump (tmpout, tmpn);
+                       fprintf(stderr, "Output KEY (length %d)\n", tmpn);
+                       h__dump(tmpout, tmpn);
 #endif
                        return 1;       
                }
@@ -176,7 +175,7 @@
 #ifdef DEBUG_KEYGEN
 void h__dump (unsigned char *p, int len)
 {
-       for (; len --; p++) BIO_printf (bio_err, "%02X", *p);
-       BIO_printf (bio_err, "\n");     
+       for (; len --; p++) fprintf(stderr, "%02X", *p);
+       fprintf(stderr, "\n");  
 }
 #endif
Index: opensa/openssl/crypto/pkcs12/p12_kiss.c
diff -u opensa/openssl/crypto/pkcs12/p12_kiss.c:1.1 
opensa/openssl/crypto/pkcs12/p12_kiss.c:1.2
--- opensa/openssl/crypto/pkcs12/p12_kiss.c:1.1 Tue Jan 25 23:26:09 2000
+++ opensa/openssl/crypto/pkcs12/p12_kiss.c     Thu Mar  2 21:11:58 2000
@@ -139,16 +139,16 @@
                        sk_pop_free (asafes, PKCS7_free);
                        return 0;
                }
-               if (!parse_bags (bags, pass, passlen, pkey, cert, ca,
+               if (!parse_bags(bags, pass, passlen, pkey, cert, ca,
                                                         &keyid, &keymatch)) {
-                       sk_pop_free (bags, PKCS12_SAFEBAG_free);
-                       sk_pop_free (asafes, PKCS7_free);
+                       sk_pop_free(bags, PKCS12_SAFEBAG_free);
+                       sk_pop_free(asafes, PKCS7_free);
                        return 0;
                }
-               sk_pop_free (bags, PKCS12_SAFEBAG_free);
+               sk_pop_free(bags, PKCS12_SAFEBAG_free);
        }
-       sk_pop_free (asafes, PKCS7_free);
-       if (keyid) ASN1_OCTET_STRING_free (keyid);
+       sk_pop_free(asafes, PKCS7_free);
+       if (keyid) M_ASN1_OCTET_STRING_free(keyid);
        return 1;
 }
 
@@ -158,8 +158,8 @@
                       ASN1_OCTET_STRING **keyid, char *keymatch)
 {
        int i;
-       for (i = 0; i < sk_num (bags); i++) {
-               if (!parse_bag ((PKCS12_SAFEBAG *)sk_value (bags, i),
+       for (i = 0; i < sk_num(bags); i++) {
+               if (!parse_bag((PKCS12_SAFEBAG *)sk_value (bags, i),
                         pass, passlen, pkey, cert, ca, keyid,
                                                         keymatch)) return 0;
        }
@@ -170,7 +170,7 @@
 #define MATCH_CERT 0x2
 #define MATCH_ALL  0x3
 
-static int parse_bag (PKCS12_SAFEBAG *bag, const char *pass, int passlen,
+static int parse_bag(PKCS12_SAFEBAG *bag, const char *pass, int passlen,
                      EVP_PKEY **pkey, X509 **cert, STACK **ca,
                      ASN1_OCTET_STRING **keyid,
             char *keymatch)
@@ -187,9 +187,9 @@
        /* Check for any local key id matching (if needed) */
        if (lkey && ((*keymatch & MATCH_ALL) != MATCH_ALL)) {
                if (*keyid) {
-                       if (ASN1_OCTET_STRING_cmp (*keyid, lkey)) lkey = NULL;
+                       if (M_ASN1_OCTET_STRING_cmp(*keyid, lkey)) lkey = NULL;
                } else {
-                       if (!(*keyid = ASN1_OCTET_STRING_dup (lkey))) {
+                       if (!(*keyid = M_ASN1_OCTET_STRING_dup(lkey))) {
                                PKCS12err(PKCS12_F_PARSE_BAGS,ERR_R_MALLOC_FAILURE);
                                return 0;
                    }
@@ -200,16 +200,16 @@
        {
        case NID_keyBag:
                if (!lkey || !pkey) return 1;   
-               if (!(*pkey = EVP_PKCS82PKEY (bag->value.keybag))) return 0;
+               if (!(*pkey = EVP_PKCS82PKEY(bag->value.keybag))) return 0;
                *keymatch |= MATCH_KEY;
        break;
 
        case NID_pkcs8ShroudedKeyBag:
                if (!lkey || !pkey) return 1;   
-               if (!(p8 = M_PKCS12_decrypt_skey (bag, pass, passlen)))
+               if (!(p8 = M_PKCS12_decrypt_skey(bag, pass, passlen)))
                                return 0;
-               *pkey = EVP_PKCS82PKEY (p8);
-               PKCS8_PRIV_KEY_INFO_free (p8);
+               *pkey = EVP_PKCS82PKEY(p8);
+               PKCS8_PRIV_KEY_INFO_free(p8);
                if (!(*pkey)) return 0;
                *keymatch |= MATCH_KEY;
        break;
Index: opensa/openssl/crypto/pkcs12/p12_lib.c
diff -u opensa/openssl/crypto/pkcs12/p12_lib.c:1.1 
opensa/openssl/crypto/pkcs12/p12_lib.c:1.2
--- opensa/openssl/crypto/pkcs12/p12_lib.c:1.1  Tue Jan 25 23:26:09 2000
+++ opensa/openssl/crypto/pkcs12/p12_lib.c      Thu Mar  2 21:11:58 2000
@@ -104,8 +104,8 @@
 void PKCS12_free (PKCS12 *a)
 {
        if (a == NULL) return;
-       ASN1_INTEGER_free (a->version);
+       M_ASN1_INTEGER_free(a->version);
        PKCS12_MAC_DATA_free (a->mac);
        PKCS7_free (a->authsafes);
-       Free ((char *)a);
+       Free (a);
 }
Index: opensa/openssl/crypto/pkcs12/p12_mac.c
diff -u opensa/openssl/crypto/pkcs12/p12_mac.c:1.1 
opensa/openssl/crypto/pkcs12/p12_mac.c:1.2
--- opensa/openssl/crypto/pkcs12/p12_mac.c:1.1  Tue Jan 25 23:26:09 2000
+++ opensa/openssl/crypto/pkcs12/p12_mac.c      Thu Mar  2 21:11:58 2000
@@ -82,9 +82,9 @@
        ASN1_CTX c;
        M_ASN1_New_Malloc(ret, PKCS12_MAC_DATA);
        ret->dinfo = X509_SIG_new();
-       ret->salt = ASN1_OCTET_STRING_new();
+       ret->salt = M_ASN1_OCTET_STRING_new();
        ret->iter = NULL;
-       return (ret);
+       return(ret);
        M_ASN1_New_Error(ASN1_F_PKCS12_MAC_DATA_NEW);
 }
 
@@ -94,9 +94,9 @@
        M_ASN1_D2I_vars(a,PKCS12_MAC_DATA *,PKCS12_MAC_DATA_new);
        M_ASN1_D2I_Init();
        M_ASN1_D2I_start_sequence();
-       M_ASN1_D2I_get (ret->dinfo, d2i_X509_SIG);
-       M_ASN1_D2I_get (ret->salt, d2i_ASN1_OCTET_STRING);
-       M_ASN1_D2I_get_opt (ret->iter, d2i_ASN1_INTEGER, V_ASN1_INTEGER);
+       M_ASN1_D2I_get(ret->dinfo, d2i_X509_SIG);
+       M_ASN1_D2I_get(ret->salt, d2i_ASN1_OCTET_STRING);
+       M_ASN1_D2I_get_opt(ret->iter, d2i_ASN1_INTEGER, V_ASN1_INTEGER);
        M_ASN1_D2I_Finish(a, PKCS12_MAC_DATA_free, ASN1_F_D2I_PKCS12_MAC_DATA);
 }
 
@@ -104,7 +104,7 @@
 {
        if (a == NULL) return;
        X509_SIG_free (a->dinfo);
-       ASN1_OCTET_STRING_free (a->salt);
-       ASN1_INTEGER_free (a->iter);
-       Free ((char *)a);
+       M_ASN1_OCTET_STRING_free(a->salt);
+       M_ASN1_INTEGER_free(a->iter);
+       Free (a);
 }
Index: opensa/openssl/crypto/pkcs12/p12_mutl.c
diff -u opensa/openssl/crypto/pkcs12/p12_mutl.c:1.1 
opensa/openssl/crypto/pkcs12/p12_mutl.c:1.2
--- opensa/openssl/crypto/pkcs12/p12_mutl.c:1.1 Tue Jan 25 23:26:09 2000
+++ opensa/openssl/crypto/pkcs12/p12_mutl.c     Thu Mar  2 21:11:58 2000
@@ -131,7 +131,7 @@
                PKCS12err(PKCS12_F_PKCS12_SET_MAC,PKCS12_R_MAC_GENERATION_ERROR);
                return 0;
        }
-       if (!(ASN1_OCTET_STRING_set (p12->mac->dinfo->digest, mac, maclen))) {
+       if (!(M_ASN1_OCTET_STRING_set (p12->mac->dinfo->digest, mac, maclen))) {
                PKCS12err(PKCS12_F_PKCS12_SET_MAC,PKCS12_R_MAC_STRING_SET_ERROR);
                                                return 0;
        }
@@ -142,13 +142,13 @@
 int PKCS12_setup_mac (PKCS12 *p12, int iter, unsigned char *salt, int saltlen,
             EVP_MD *md_type)
 {
-       if (!(p12->mac = PKCS12_MAC_DATA_new ())) return PKCS12_ERROR;
+       if (!(p12->mac = PKCS12_MAC_DATA_new())) return PKCS12_ERROR;
        if (iter > 1) {
-               if(!(p12->mac->iter = ASN1_INTEGER_new())) {
+               if(!(p12->mac->iter = M_ASN1_INTEGER_new())) {
                        PKCS12err(PKCS12_F_PKCS12_SETUP_MAC, ERR_R_MALLOC_FAILURE);
                        return 0;
                }
-               ASN1_INTEGER_set (p12->mac->iter, iter);
+               ASN1_INTEGER_set(p12->mac->iter, iter);
        }
        if (!saltlen) saltlen = PKCS12_SALT_LEN;
        p12->mac->salt->length = saltlen;
@@ -156,7 +156,10 @@
                PKCS12err(PKCS12_F_PKCS12_SETUP_MAC, ERR_R_MALLOC_FAILURE);
                return 0;
        }
-       if (!salt) RAND_bytes (p12->mac->salt->data, saltlen);
+       if (!salt) {
+               if (RAND_bytes (p12->mac->salt->data, saltlen) <= 0)
+                       return 0;
+       }
        else memcpy (p12->mac->salt->data, salt, saltlen);
        p12->mac->dinfo->algor->algorithm = OBJ_nid2obj(EVP_MD_type(md_type));
        if (!(p12->mac->dinfo->algor->parameter = ASN1_TYPE_new())) {
Index: opensa/openssl/crypto/pkcs12/pk12err.c
diff -u opensa/openssl/crypto/pkcs12/pk12err.c:1.1 
opensa/openssl/crypto/pkcs12/pk12err.c:1.2
--- opensa/openssl/crypto/pkcs12/pk12err.c:1.1  Tue Jan 25 23:26:09 2000
+++ opensa/openssl/crypto/pkcs12/pk12err.c      Thu Mar  2 21:11:58 2000
@@ -79,6 +79,7 @@
 {ERR_PACK(0,PKCS12_F_PKCS12_KEY_GEN_UNI,0),    "PKCS12_key_gen_uni"},
 {ERR_PACK(0,PKCS12_F_PKCS12_MAKE_KEYBAG,0),    "PKCS12_MAKE_KEYBAG"},
 {ERR_PACK(0,PKCS12_F_PKCS12_MAKE_SHKEYBAG,0),  "PKCS12_MAKE_SHKEYBAG"},
+{ERR_PACK(0,PKCS12_F_PKCS12_NEWPASS,0),        "PKCS12_newpass"},
 {ERR_PACK(0,PKCS12_F_PKCS12_PACK_P7DATA,0),    "PKCS12_pack_p7data"},
 {ERR_PACK(0,PKCS12_F_PKCS12_PACK_P7ENCDATA,0), "PKCS12_pack_p7encdata"},
 {ERR_PACK(0,PKCS12_F_PKCS12_PACK_SAFEBAG,0),   "PKCS12_pack_safebag"},
@@ -99,6 +100,7 @@
 {PKCS12_R_DECODE_ERROR                   ,"decode error"},
 {PKCS12_R_ENCODE_ERROR                   ,"encode error"},
 {PKCS12_R_ENCRYPT_ERROR                  ,"encrypt error"},
+{PKCS12_R_ERROR_SETTING_ENCRYPTED_DATA_TYPE,"error setting encrypted data type"},
 {PKCS12_R_INVALID_NULL_ARGUMENT          ,"invalid null argument"},
 {PKCS12_R_INVALID_NULL_PKCS12_POINTER    ,"invalid null pkcs12 pointer"},
 {PKCS12_R_IV_GEN_ERROR                   ,"iv gen error"},
Index: opensa/openssl/crypto/pkcs12/pkcs12.h
diff -u opensa/openssl/crypto/pkcs12/pkcs12.h:1.1 
opensa/openssl/crypto/pkcs12/pkcs12.h:1.2
--- opensa/openssl/crypto/pkcs12/pkcs12.h:1.1   Tue Jan 25 23:26:09 2000
+++ opensa/openssl/crypto/pkcs12/pkcs12.h       Thu Mar  2 21:11:58 2000
@@ -273,6 +273,7 @@
 int i2d_PKCS12_fp(FILE *fp, PKCS12 *p12);
 PKCS12 *d2i_PKCS12_bio(BIO *bp, PKCS12 **p12);
 PKCS12 *d2i_PKCS12_fp(FILE *fp, PKCS12 **p12);
+int PKCS12_newpass(PKCS12 *p12, char *oldpass, char *newpass);
 
 /* BEGIN ERROR CODES */
 /* The following lines are auto generated by the script mkerr.pl. Any changes
@@ -296,6 +297,7 @@
 #define PKCS12_F_PKCS12_KEY_GEN_UNI                     111
 #define PKCS12_F_PKCS12_MAKE_KEYBAG                     112
 #define PKCS12_F_PKCS12_MAKE_SHKEYBAG                   113
+#define PKCS12_F_PKCS12_NEWPASS                                 128
 #define PKCS12_F_PKCS12_PACK_P7DATA                     114
 #define PKCS12_F_PKCS12_PACK_P7ENCDATA                  115
 #define PKCS12_F_PKCS12_PACK_SAFEBAG                    117
@@ -313,6 +315,7 @@
 #define PKCS12_R_DECODE_ERROR                           101
 #define PKCS12_R_ENCODE_ERROR                           102
 #define PKCS12_R_ENCRYPT_ERROR                          103
+#define PKCS12_R_ERROR_SETTING_ENCRYPTED_DATA_TYPE      120
 #define PKCS12_R_INVALID_NULL_ARGUMENT                  104
 #define PKCS12_R_INVALID_NULL_PKCS12_POINTER            105
 #define PKCS12_R_IV_GEN_ERROR                           106
Index: opensa/openssl/crypto/pkcs7/bio_ber.c
diff -u opensa/openssl/crypto/pkcs7/bio_ber.c:1.1 
opensa/openssl/crypto/pkcs7/bio_ber.c:1.2
--- opensa/openssl/crypto/pkcs7/bio_ber.c:1.1   Tue Jan 25 23:25:21 2000
+++ opensa/openssl/crypto/pkcs7/bio_ber.c       Thu Mar  2 21:11:58 2000
@@ -69,6 +69,7 @@
 static long ber_ctrl(BIO *h,int cmd,long arg1,char *arg2);
 static int ber_new(BIO *h);
 static int ber_free(BIO *data);
+static long ber_callback_ctrl(BIO *h,int cmd,void *(*fp)());
 #define BER_BUF_SIZE   (32)
 
 /* This is used to hold the state of the BER objects being read. */
@@ -92,7 +93,7 @@
        /* most of the following are used when doing non-blocking IO */
        /* reading */
        long num_left;  /* number of bytes still to read/write in block */
-       int depth;      /* used with idefinite encoding. */
+       int depth;      /* used with indefinite encoding. */
        int finished;   /* No more read data */
 
        /* writting */ 
@@ -115,6 +116,7 @@
        ber_ctrl,
        ber_new,
        ber_free,
+       ber_callback_ctrl,
        };
 
 BIO_METHOD *BIO_f_ber(void)
@@ -404,6 +406,20 @@
                break;
        default:
                ret=BIO_ctrl(b->next_bio,cmd,num,ptr);
+               break;
+               }
+       return(ret);
+       }
+
+static long ber_callback_ctrl(BIO *b, int cmd, void *(*fp)())
+       {
+       long ret=1;
+
+       if (b->next_bio == NULL) return(0);
+       switch (cmd)
+               {
+       default:
+               ret=BIO_callback_ctrl(b->next_bio,cmd,fp);
                break;
                }
        return(ret);
Index: opensa/openssl/crypto/pkcs7/dec.c
diff -u opensa/openssl/crypto/pkcs7/dec.c:1.1 opensa/openssl/crypto/pkcs7/dec.c:1.2
--- opensa/openssl/crypto/pkcs7/dec.c:1.1       Tue Jan 25 23:25:21 2000
+++ opensa/openssl/crypto/pkcs7/dec.c   Thu Mar  2 21:11:58 2000
@@ -57,6 +57,7 @@
  */
 #include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 #include <openssl/bio.h>
 #include <openssl/x509.h>
 #include <openssl/pem.h>
@@ -85,7 +86,7 @@
        int i,printit=0;
        STACK_OF(PKCS7_SIGNER_INFO) *sk;
 
-       SSLeay_add_all_algorithms();
+       OpenSSL_add_all_algorithms();
        bio_err=BIO_new_fp(stderr,BIO_NOCLOSE);
 
        data=BIO_new(BIO_s_file());
@@ -121,9 +122,10 @@
        }
 
         if ((in=BIO_new_file(keyfile,"r")) == NULL) goto err;
-        if ((x509=PEM_read_bio_X509(in,NULL,NULL)) == NULL) goto err;
+        if ((x509=PEM_read_bio_X509(in,NULL,NULL,NULL)) == NULL) goto err;
         BIO_reset(in);
-        if ((pkey=PEM_read_bio_PrivateKey(in,NULL,NULL)) == NULL) goto err;
+        if ((pkey=PEM_read_bio_PrivateKey(in,NULL,NULL,NULL)) == NULL)
+               goto err;
         BIO_free(in);
 
        if (pp == NULL)
@@ -131,7 +133,7 @@
 
 
        /* Load the PKCS7 object from a file */
-       if ((p7=PEM_read_bio_PKCS7(data,NULL,NULL)) == NULL) goto err;
+       if ((p7=PEM_read_bio_PKCS7(data,NULL,NULL,NULL)) == NULL) goto err;
 
 
 
@@ -148,7 +150,7 @@
        /* We need to process the data */
        /* We cannot support detached encryption */
        p7bio=PKCS7_dataDecode(p7,pkey,detached,x509);
-       
+
        if (p7bio == NULL)
                {
                printf("problems decoding\n");
Index: opensa/openssl/crypto/pkcs7/enc.c
diff -u opensa/openssl/crypto/pkcs7/enc.c:1.1 opensa/openssl/crypto/pkcs7/enc.c:1.2
--- opensa/openssl/crypto/pkcs7/enc.c:1.1       Tue Jan 25 23:25:21 2000
+++ opensa/openssl/crypto/pkcs7/enc.c   Thu Mar  2 21:11:58 2000
@@ -56,6 +56,7 @@
  * [including the GNU Public Licence.]
  */
 #include <stdio.h>
+#include <string.h>
 #include <openssl/bio.h>
 #include <openssl/x509.h>
 #include <openssl/pem.h>
@@ -76,7 +77,7 @@
        const EVP_CIPHER *cipher=NULL;
        STACK_OF(X509) *recips=NULL;
 
-       SSLeay_add_all_algorithms();
+       OpenSSL_add_all_algorithms();
 
        data=BIO_new(BIO_s_file());
        while(argc > 1)
@@ -98,7 +99,8 @@
                        argc-=2;
                        argv+=2;
                        if (!(in=BIO_new_file(keyfile,"r"))) goto err;
-                       if (!(x509=PEM_read_bio_X509(in,NULL,NULL))) goto err;
+                       if (!(x509=PEM_read_bio_X509(in,NULL,NULL,NULL)))
+                               goto err;
                        if(!recips) recips = sk_X509_new_null();
                        sk_X509_push(recips, x509);
                        BIO_free(in);
@@ -125,7 +127,14 @@
 #else
        PKCS7_set_type(p7,NID_pkcs7_enveloped);
 #endif
-       if(!cipher) cipher = EVP_des_ede3_cbc();
+       if(!cipher)     {
+#ifndef NO_DES
+               cipher = EVP_des_ede3_cbc();
+#else
+               fprintf(stderr, "No cipher selected\n");
+               goto err;
+#endif
+       }
 
        if (!PKCS7_set_cipher(p7,cipher)) goto err;
        for(i = 0; i < sk_X509_num(recips); i++) {
Index: opensa/openssl/crypto/pkcs7/example.c
diff -u opensa/openssl/crypto/pkcs7/example.c:1.1 
opensa/openssl/crypto/pkcs7/example.c:1.2
--- opensa/openssl/crypto/pkcs7/example.c:1.1   Tue Jan 25 23:25:21 2000
+++ opensa/openssl/crypto/pkcs7/example.c       Thu Mar  2 21:11:58 2000
@@ -1,5 +1,6 @@
 #include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 #include <openssl/pkcs7.h>
 #include <openssl/asn1_mac.h>
 
@@ -36,7 +37,7 @@
                signed_string_nid=
                        OBJ_create("1.2.3.4.5","OID_example","Our example OID");
        os=ASN1_OCTET_STRING_new();
-       ASN1_OCTET_STRING_set(os,str,strlen(str));
+       ASN1_OCTET_STRING_set(os,(unsigned char*)str,strlen(str));
        /* When we add, we do not free */
        PKCS7_add_signed_attribute(si,signed_string_nid,
                V_ASN1_OCTET_STRING,(char *)os);
@@ -68,7 +69,7 @@
        return(0);
        }
 
-static signed_seq2string_nid= -1;
+static int signed_seq2string_nid= -1;
 /* ########################################### */
 int add_signed_seq2string(PKCS7_SIGNER_INFO *si, char *str1, char *str2)
        {
@@ -86,8 +87,8 @@
 
        os1=ASN1_OCTET_STRING_new();
        os2=ASN1_OCTET_STRING_new();
-       ASN1_OCTET_STRING_set(os1,str1,strlen(str1));
-       ASN1_OCTET_STRING_set(os2,str1,strlen(str1));
+       ASN1_OCTET_STRING_set(os1,(unsigned char*)str1,strlen(str1));
+       ASN1_OCTET_STRING_set(os2,(unsigned char*)str1,strlen(str1));
        i =i2d_ASN1_OCTET_STRING(os1,NULL);
        i+=i2d_ASN1_OCTET_STRING(os2,NULL);
        total=ASN1_object_size(1,i,V_ASN1_SEQUENCE);
@@ -197,7 +198,7 @@
                signed_string_nid=
                        OBJ_create("1.2.3.4.5","OID_example","Our example OID");
        os=ASN1_OCTET_STRING_new();
-       ASN1_OCTET_STRING_set(os,str,strlen(str));
+       ASN1_OCTET_STRING_set(os,(unsigned char*)str,strlen(str));
        /* When we add, we do not free */
        ret=X509_ATTRIBUTE_create(signed_string_nid,
                V_ASN1_OCTET_STRING,(char *)os);
@@ -250,8 +251,8 @@
 
        os1=ASN1_OCTET_STRING_new();
        os2=ASN1_OCTET_STRING_new();
-       ASN1_OCTET_STRING_set(os1,str1,strlen(str1));
-       ASN1_OCTET_STRING_set(os2,str1,strlen(str1));
+       ASN1_OCTET_STRING_set(os1,(unsigned char*)str1,strlen(str1));
+       ASN1_OCTET_STRING_set(os2,(unsigned char*)str1,strlen(str1));
        i =i2d_ASN1_OCTET_STRING(os1,NULL);
        i+=i2d_ASN1_OCTET_STRING(os2,NULL);
        total=ASN1_object_size(1,i,V_ASN1_SEQUENCE);
Index: opensa/openssl/crypto/pkcs7/makefile.ssl
diff -u opensa/openssl/crypto/pkcs7/makefile.ssl:1.1 
opensa/openssl/crypto/pkcs7/makefile.ssl:1.2
--- opensa/openssl/crypto/pkcs7/makefile.ssl:1.1        Tue Jan 25 23:25:21 2000
+++ opensa/openssl/crypto/pkcs7/makefile.ssl    Thu Mar  2 21:11:58 2000
@@ -1,5 +1,5 @@
 #
-# SSLeay/crypto/asn1/Makefile
+# SSLeay/crypto/pkcs7/Makefile
 #
 
 DIR=   pkcs7
@@ -15,6 +15,9 @@
 MAKEFILE=      Makefile.ssl
 AR=            ar r
 
+PEX_LIBS=
+EX_LIBS=
+ 
 CFLAGS= $(INCLUDES) $(CFLAG)
 
 GENERAL=Makefile README
@@ -22,8 +25,8 @@
 APPS=
 
 LIB=$(TOP)/libcrypto.a
-LIBSRC=        pk7_lib.c pkcs7err.c pk7_doit.c
-LIBOBJ= pk7_lib.o pkcs7err.o pk7_doit.o
+LIBSRC=        pk7_lib.c pkcs7err.c pk7_doit.c pk7_smime.c pk7_attr.c pk7_mime.c
+LIBOBJ= pk7_lib.o pkcs7err.o pk7_doit.o pk7_smime.o pk7_attr.o pk7_mime.o
 
 SRC= $(LIBSRC)
 
@@ -42,16 +45,16 @@
 testapps: enc dec sign verify
 
 enc: enc.o lib
-       $(CC) $(CFLAGS) -o enc enc.o $(LIB)
+       $(CC) $(CFLAGS) -o enc enc.o $(PEX_LIBS) $(LIB) $(EX_LIBS)
 
 dec: dec.o lib
-       $(CC) $(CFLAGS) -o dec dec.o $(LIB)
+       $(CC) $(CFLAGS) -o dec dec.o $(PEX_LIBS) $(LIB) $(EX_LIBS)
 
 sign: sign.o lib
-       $(CC) $(CFLAGS) -o sign sign.o $(LIB)
+       $(CC) $(CFLAGS) -o sign sign.o $(PEX_LIBS) $(LIB) $(EX_LIBS)
 
 verify: verify.o example.o lib
-       $(CC) $(CFLAGS) -o verify verify.o example.o $(LIB)
+       $(CC) $(CFLAGS) -o verify verify.o $(PEX_LIBS) example.o $(LIB) $(EX_LIBS)
 
 lib:   $(LIBOBJ)
        $(AR) $(LIB) $(LIBOBJ)
@@ -90,18 +93,35 @@
        mv -f Makefile.new $(MAKEFILE)
 
 clean:
-       rm -f *.o *.obj lib tags core .pure .nfs* *.old *.bak fluff
+       rm -f *.o *.obj lib tags core .pure .nfs* *.old *.bak fluff enc dec sign verify
 
 # DO NOT DELETE THIS LINE -- make depend depends on it.
 
+pk7_attr.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
+pk7_attr.o: ../../include/openssl/blowfish.h ../../include/openssl/bn.h
+pk7_attr.o: ../../include/openssl/cast.h ../../include/openssl/crypto.h
+pk7_attr.o: ../../include/openssl/des.h ../../include/openssl/dh.h
+pk7_attr.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
+pk7_attr.o: ../../include/openssl/err.h ../../include/openssl/evp.h
+pk7_attr.o: ../../include/openssl/idea.h ../../include/openssl/md2.h
+pk7_attr.o: ../../include/openssl/md5.h ../../include/openssl/mdc2.h
+pk7_attr.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
+pk7_attr.o: ../../include/openssl/opensslv.h ../../include/openssl/pem.h
+pk7_attr.o: ../../include/openssl/pem2.h ../../include/openssl/pkcs7.h
+pk7_attr.o: ../../include/openssl/rc2.h ../../include/openssl/rc4.h
+pk7_attr.o: ../../include/openssl/rc5.h ../../include/openssl/ripemd.h
+pk7_attr.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
+pk7_attr.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
+pk7_attr.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
 pk7_doit.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
 pk7_doit.o: ../../include/openssl/blowfish.h ../../include/openssl/bn.h
 pk7_doit.o: ../../include/openssl/buffer.h ../../include/openssl/cast.h
-pk7_doit.o: ../../include/openssl/crypto.h ../../include/openssl/des.h
-pk7_doit.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h
-pk7_doit.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h
-pk7_doit.o: ../../include/openssl/err.h ../../include/openssl/evp.h
-pk7_doit.o: ../../include/openssl/idea.h ../../include/openssl/md2.h
+pk7_doit.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
+pk7_doit.o: ../../include/openssl/des.h ../../include/openssl/dh.h
+pk7_doit.o: ../../include/openssl/dsa.h ../../include/openssl/e_os.h
+pk7_doit.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
+pk7_doit.o: ../../include/openssl/evp.h ../../include/openssl/idea.h
+pk7_doit.o: ../../include/openssl/lhash.h ../../include/openssl/md2.h
 pk7_doit.o: ../../include/openssl/md5.h ../../include/openssl/mdc2.h
 pk7_doit.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 pk7_doit.o: ../../include/openssl/opensslv.h ../../include/openssl/pkcs7.h
@@ -110,7 +130,8 @@
 pk7_doit.o: ../../include/openssl/ripemd.h ../../include/openssl/rsa.h
 pk7_doit.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
 pk7_doit.o: ../../include/openssl/stack.h ../../include/openssl/x509.h
-pk7_doit.o: ../../include/openssl/x509_vfy.h ../cryptlib.h
+pk7_doit.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h
+pk7_doit.o: ../cryptlib.h
 pk7_lib.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
 pk7_lib.o: ../../include/openssl/blowfish.h ../../include/openssl/bn.h
 pk7_lib.o: ../../include/openssl/buffer.h ../../include/openssl/cast.h
@@ -128,6 +149,42 @@
 pk7_lib.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 pk7_lib.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
 pk7_lib.o: ../cryptlib.h
+pk7_mime.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
+pk7_mime.o: ../../include/openssl/blowfish.h ../../include/openssl/bn.h
+pk7_mime.o: ../../include/openssl/buffer.h ../../include/openssl/cast.h
+pk7_mime.o: ../../include/openssl/crypto.h ../../include/openssl/des.h
+pk7_mime.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h
+pk7_mime.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h
+pk7_mime.o: ../../include/openssl/err.h ../../include/openssl/evp.h
+pk7_mime.o: ../../include/openssl/idea.h ../../include/openssl/md2.h
+pk7_mime.o: ../../include/openssl/md5.h ../../include/openssl/mdc2.h
+pk7_mime.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
+pk7_mime.o: ../../include/openssl/opensslv.h ../../include/openssl/pkcs7.h
+pk7_mime.o: ../../include/openssl/rand.h ../../include/openssl/rc2.h
+pk7_mime.o: ../../include/openssl/rc4.h ../../include/openssl/rc5.h
+pk7_mime.o: ../../include/openssl/ripemd.h ../../include/openssl/rsa.h
+pk7_mime.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
+pk7_mime.o: ../../include/openssl/stack.h ../../include/openssl/x509.h
+pk7_mime.o: ../../include/openssl/x509_vfy.h ../cryptlib.h
+pk7_smime.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
+pk7_smime.o: ../../include/openssl/blowfish.h ../../include/openssl/bn.h
+pk7_smime.o: ../../include/openssl/buffer.h ../../include/openssl/cast.h
+pk7_smime.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
+pk7_smime.o: ../../include/openssl/des.h ../../include/openssl/dh.h
+pk7_smime.o: ../../include/openssl/dsa.h ../../include/openssl/e_os.h
+pk7_smime.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
+pk7_smime.o: ../../include/openssl/evp.h ../../include/openssl/idea.h
+pk7_smime.o: ../../include/openssl/lhash.h ../../include/openssl/md2.h
+pk7_smime.o: ../../include/openssl/md5.h ../../include/openssl/mdc2.h
+pk7_smime.o: ../../include/openssl/objects.h
+pk7_smime.o: ../../include/openssl/opensslconf.h
+pk7_smime.o: ../../include/openssl/opensslv.h ../../include/openssl/pkcs7.h
+pk7_smime.o: ../../include/openssl/rc2.h ../../include/openssl/rc4.h
+pk7_smime.o: ../../include/openssl/rc5.h ../../include/openssl/ripemd.h
+pk7_smime.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
+pk7_smime.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
+pk7_smime.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
+pk7_smime.o: ../../include/openssl/x509v3.h ../cryptlib.h
 pkcs7err.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
 pkcs7err.o: ../../include/openssl/blowfish.h ../../include/openssl/bn.h
 pkcs7err.o: ../../include/openssl/cast.h ../../include/openssl/crypto.h
Index: opensa/openssl/crypto/pkcs7/pk7_doit.c
diff -u opensa/openssl/crypto/pkcs7/pk7_doit.c:1.1 
opensa/openssl/crypto/pkcs7/pk7_doit.c:1.2
--- opensa/openssl/crypto/pkcs7/pk7_doit.c:1.1  Tue Jan 25 23:25:21 2000
+++ opensa/openssl/crypto/pkcs7/pk7_doit.c      Thu Mar  2 21:11:58 2000
@@ -61,6 +61,7 @@
 #include <openssl/rand.h>
 #include <openssl/objects.h>
 #include <openssl/x509.h>
+#include <openssl/x509v3.h>
 
 static int add_attribute(STACK_OF(X509_ATTRIBUTE) **sk, int nid, int atrtype,
                         void *value);
@@ -160,9 +161,10 @@
                BIO_get_cipher_ctx(btmp, &ctx);
                keylen=EVP_CIPHER_key_length(evp_cipher);
                ivlen=EVP_CIPHER_iv_length(evp_cipher);
-               RAND_bytes(key,keylen);
+               if (RAND_bytes(key,keylen) <= 0)
+                       goto err;
                xalg->algorithm = OBJ_nid2obj(EVP_CIPHER_type(evp_cipher));
-               if (ivlen > 0) RAND_bytes(iv,ivlen);
+               if (ivlen > 0) RAND_pseudo_bytes(iv,ivlen);
                EVP_CipherInit(ctx, evp_cipher, key, iv, 1);
 
                if (ivlen > 0) {
@@ -204,7 +206,7 @@
                                Free(tmp);
                                goto err;
                                }
-                       ASN1_OCTET_STRING_set(ri->enc_key,tmp,jj);
+                       M_ASN1_OCTET_STRING_set(ri->enc_key,tmp,jj);
                        }
                Free(tmp);
                memset(key, 0, keylen);
@@ -216,30 +218,23 @@
                btmp=NULL;
                }
 
-       if (bio == NULL) /* ??????????? */
-               {
+       if (bio == NULL) {
                if (p7->detached)
                        bio=BIO_new(BIO_s_null());
-               else
-                       {
-                       bio=BIO_new(BIO_s_mem());
-                       /* We need to set this so that when we have read all
-                        * the data, the encrypt BIO, if present, will read
-                        * EOF and encode the last few bytes */
-                       BIO_set_mem_eof_return(bio,0);
-
+               else {
                        if (PKCS7_type_is_signed(p7) &&
-                               PKCS7_type_is_data(p7->d.sign->contents))
-                               {
+                               PKCS7_type_is_data(p7->d.sign->contents)) {
                                ASN1_OCTET_STRING *os;
-
                                os=p7->d.sign->contents->d.data;
-                               if (os->length > 0)
-                                       BIO_write(bio,(char *)os->data,
-                                               os->length);
-                               }
+                               if (os->length > 0) bio = 
+                                       BIO_new_mem_buf(os->data, os->length);
+                       } 
+                       if(bio == NULL) {
+                               bio=BIO_new(BIO_s_mem());
+                               BIO_set_mem_eof_return(bio,0);
                        }
                }
+       }
        BIO_push(out,bio);
        bio=NULL;
        if (0)
@@ -259,7 +254,7 @@
        {
        int i,j;
        BIO *out=NULL,*btmp=NULL,*etmp=NULL,*bio=NULL;
-       char *tmp=NULL;
+       unsigned char *tmp=NULL;
        X509_ALGOR *xa;
        ASN1_OCTET_STRING *data_body=NULL;
        const EVP_MD *evp_md;
@@ -270,6 +265,9 @@
        STACK_OF(PKCS7_RECIP_INFO) *rsk=NULL;
        X509_ALGOR *xalg=NULL;
        PKCS7_RECIP_INFO *ri=NULL;
+#ifndef NO_RC2
+       char is_rc2 = 0;
+#endif
 /*     EVP_PKEY *pkey; */
 #if 0
        X509_STORE_CTX s_ctx;
@@ -314,6 +312,16 @@
                goto err;
                }
 
+       if(EVP_CIPHER_nid(evp_cipher) == NID_rc2_cbc)
+               {
+#ifndef NO_RC2         
+               is_rc2 = 1; 
+#else
+               PKCS7err(PKCS7_F_PKCS7_DATADECODE,PKCS7_R_UNSUPPORTED_CIPHER_TYPE);
+               goto err;
+#endif
+               }
+
        /* We will be checking the signature */
        if (md_sk != NULL)
                {
@@ -372,7 +380,7 @@
                        ri=sk_PKCS7_RECIP_INFO_value(rsk,i);
                        if(!X509_NAME_cmp(ri->issuer_and_serial->issuer,
                                        pcert->cert_info->issuer) &&
-                            !ASN1_INTEGER_cmp(pcert->cert_info->serialNumber,
+                            !M_ASN1_INTEGER_cmp(pcert->cert_info->serialNumber,
                                        ri->issuer_and_serial->serial)) break;
                        ri=NULL;
                }
@@ -383,17 +391,15 @@
                }
 
                jj=EVP_PKEY_size(pkey);
-               tmp=Malloc(jj+10);
+               tmp=(unsigned char *)Malloc(jj+10);
                if (tmp == NULL)
                        {
                        PKCS7err(PKCS7_F_PKCS7_DATADECODE,ERR_R_MALLOC_FAILURE);
                        goto err;
                        }
 
-               jj=EVP_PKEY_decrypt((unsigned char *)tmp,
-                       ASN1_STRING_data(ri->enc_key),
-                       ASN1_STRING_length(ri->enc_key),
-                       pkey);
+               jj=EVP_PKEY_decrypt(tmp, M_ASN1_STRING_data(ri->enc_key),
+                       M_ASN1_STRING_length(ri->enc_key), pkey);
                if (jj <= 0)
                        {
                        PKCS7err(PKCS7_F_PKCS7_DATADECODE,ERR_R_EVP_LIB);
@@ -406,13 +412,25 @@
                if (EVP_CIPHER_asn1_to_param(evp_ctx,enc_alg->parameter) < 0)
                        return(NULL);
 
-               if (jj != EVP_CIPHER_CTX_key_length(evp_ctx))
-                       {
-                       PKCS7err(PKCS7_F_PKCS7_DATADECODE,
+               if (jj != EVP_CIPHER_CTX_key_length(evp_ctx)) {
+                       /* HACK: some S/MIME clients don't use the same key
+                        * and effective key length. The key length is
+                        * determined by the size of the decrypted RSA key.
+                        * So we hack things to manually set the RC2 key
+                        * because we currently can't do this with the EVP
+                        * interface.
+                        */
+#ifndef NO_RC2         
+                       if(is_rc2) RC2_set_key(&(evp_ctx->c.rc2_ks),jj, tmp,
+                                       EVP_CIPHER_CTX_key_length(evp_ctx)*8);
+                       else
+#endif
+                               {
+                               PKCS7err(PKCS7_F_PKCS7_DATADECODE,
                                        PKCS7_R_DECRYPTED_KEY_IS_WRONG_LENGTH);
-                       goto err;
-                       }
-               EVP_CipherInit(evp_ctx,NULL,(unsigned char *)tmp,NULL,0);
+                               goto err;
+                               }
+               } else EVP_CipherInit(evp_ctx,NULL,tmp,NULL,0);
 
                memset(tmp,0,jj);
 
@@ -430,6 +448,7 @@
                }
        else 
                {
+#if 0
                bio=BIO_new(BIO_s_mem());
                /* We need to set this so that when we have read all
                 * the data, the encrypt BIO, if present, will read
@@ -438,6 +457,14 @@
 
                if (data_body->length > 0)
                        BIO_write(bio,(char *)data_body->data,data_body->length);
+#else
+               if (data_body->length > 0)
+                     bio = BIO_new_mem_buf(data_body->data,data_body->length);
+               else {
+                       bio=BIO_new(BIO_s_mem());
+                       BIO_set_mem_eof_return(bio,0);
+               }
+#endif
                }
        BIO_push(out,bio);
        bio=NULL;
@@ -479,12 +506,12 @@
        case NID_pkcs7_signedAndEnveloped:
                /* XXXXXXXXXXXXXXXX */
                si_sk=p7->d.signed_and_enveloped->signer_info;
-               os=ASN1_OCTET_STRING_new();
+               os=M_ASN1_OCTET_STRING_new();
                p7->d.signed_and_enveloped->enc_data->enc_data=os;
                break;
        case NID_pkcs7_enveloped:
                /* XXXXXXXXXXXXXXXX */
-               os=ASN1_OCTET_STRING_new();
+               os=M_ASN1_OCTET_STRING_new();
                p7->d.enveloped->enc_data->enc_data=os;
                break;
        case NID_pkcs7_signed:
@@ -492,7 +519,7 @@
                os=p7->d.sign->contents->d.data;
                /* If detached data then the content is excluded */
                if(p7->detached) {
-                       ASN1_OCTET_STRING_free(os);
+                       M_ASN1_OCTET_STRING_free(os);
                        p7->d.sign->contents->d.data = NULL;
                }
                break;
@@ -527,7 +554,7 @@
                                        
PKCS7err(PKCS7_F_PKCS7_DATASIGN,PKCS7_R_INTERNAL_ERROR);
                                        goto err;
                                        }
-                               if (EVP_MD_type(EVP_MD_CTX_type(mdc)) == j)
+                               if (EVP_MD_CTX_type(mdc) == j)
                                        break;
                                else
                                        btmp=btmp->next_bio;
@@ -561,10 +588,10 @@
                                        V_ASN1_UTCTIME,sign_time);
 
                                /* Add digest */
-                               md_tmp=EVP_MD_CTX_type(&ctx_tmp);
+                               md_tmp=EVP_MD_CTX_md(&ctx_tmp);
                                EVP_DigestFinal(&ctx_tmp,md_data,&md_len);
-                               digest=ASN1_OCTET_STRING_new();
-                               ASN1_OCTET_STRING_set(digest,md_data,md_len);
+                               digest=M_ASN1_OCTET_STRING_new();
+                               M_ASN1_OCTET_STRING_set(digest,md_data,md_len);
                                PKCS7_add_signed_attribute(si,
                                        NID_pkcs9_messageDigest,
                                        V_ASN1_OCTET_STRING,digest);
@@ -611,8 +638,17 @@
                        goto err;
                        }
                BIO_get_mem_ptr(btmp,&buf_mem);
-               ASN1_OCTET_STRING_set(os,
+               /* Mark the BIO read only then we can use its copy of the data
+                * instead of making an extra copy.
+                */
+               BIO_set_flags(btmp, BIO_FLAGS_MEM_RDONLY);
+               BIO_set_mem_eof_return(btmp, 0);
+               os->data = (unsigned char *)buf_mem->data;
+               os->length = buf_mem->length;
+#if 0
+               M_ASN1_OCTET_STRING_set(os,
                        (unsigned char *)buf_mem->data,buf_mem->length);
+#endif
                }
        if (pp != NULL) Free(pp);
        pp=NULL;
@@ -658,6 +694,7 @@
 
        /* Lets verify */
        X509_STORE_CTX_init(ctx,cert_store,x509,cert);
+       X509_STORE_CTX_set_purpose(ctx, X509_PURPOSE_SMIME_SIGN);
        i=X509_verify_cert(ctx);
        if (i <= 0) 
                {
@@ -709,7 +746,7 @@
                                                        PKCS7_R_INTERNAL_ERROR);
                        goto err;
                        }
-               if (EVP_MD_type(EVP_MD_CTX_type(mdc)) == md_type)
+               if (EVP_MD_CTX_type(mdc) == md_type)
                        break;
                btmp=btmp->next_bio;    
                }
Index: opensa/openssl/crypto/pkcs7/pk7_lib.c
diff -u opensa/openssl/crypto/pkcs7/pk7_lib.c:1.1 
opensa/openssl/crypto/pkcs7/pk7_lib.c:1.2
--- opensa/openssl/crypto/pkcs7/pk7_lib.c:1.1   Tue Jan 25 23:25:21 2000
+++ opensa/openssl/crypto/pkcs7/pk7_lib.c       Thu Mar  2 21:11:58 2000
@@ -123,7 +123,7 @@
                {
        case NID_pkcs7_signed:
                if (p7->d.sign->contents != NULL)
-                       PKCS7_content_free(p7->d.sign->contents);
+                       PKCS7_free(p7->d.sign->contents);
                p7->d.sign->contents=p7_data;
                break;
        case NID_pkcs7_digest:
@@ -157,7 +157,7 @@
                break;
        case NID_pkcs7_data:
                p7->type=obj;
-               if ((p7->d.data=ASN1_OCTET_STRING_new()) == NULL)
+               if ((p7->d.data=M_ASN1_OCTET_STRING_new()) == NULL)
                        goto err;
                break;
        case NID_pkcs7_signedAndEnveloped:
@@ -165,9 +165,6 @@
                if ((p7->d.signed_and_enveloped=PKCS7_SIGN_ENVELOPE_new())
                        == NULL) goto err;
                ASN1_INTEGER_set(p7->d.signed_and_enveloped->version,1);
-/*             p7->d.signed_and_enveloped->enc_data->content_type=
-                       OBJ_nid2obj(NID_pkcs7_encrypted);*/
-                       
                break;
        case NID_pkcs7_enveloped:
                p7->type=obj;
@@ -175,8 +172,14 @@
                        == NULL) goto err;
                ASN1_INTEGER_set(p7->d.enveloped->version,0);
                break;
-       case NID_pkcs7_digest:
        case NID_pkcs7_encrypted:
+               p7->type=obj;
+               if ((p7->d.encrypted=PKCS7_ENCRYPT_new())
+                       == NULL) goto err;
+               ASN1_INTEGER_set(p7->d.encrypted->version,0);
+               break;
+
+       case NID_pkcs7_digest:
        default:
                PKCS7err(PKCS7_F_PKCS7_SET_TYPE,PKCS7_R_UNSUPPORTED_CONTENT_TYPE);
                goto err;
@@ -224,8 +227,13 @@
                }
        if (!j) /* we need to add another algorithm */
                {
-               alg=X509_ALGOR_new();
+               if(!(alg=X509_ALGOR_new())
+                       || !(alg->parameter = ASN1_TYPE_new())) {
+                       PKCS7err(PKCS7_F_PKCS7_ADD_SIGNER,ERR_R_MALLOC_FAILURE);
+                       return(0);
+               }
                alg->algorithm=OBJ_nid2obj(nid);
+               alg->parameter->type = V_ASN1_NULL;
                sk_X509_ALGOR_push(md_sk,alg);
                }
 
@@ -289,6 +297,9 @@
 int PKCS7_SIGNER_INFO_set(PKCS7_SIGNER_INFO *p7i, X509 *x509, EVP_PKEY *pkey,
             EVP_MD *dgst)
        {
+       char is_dsa;
+       if (pkey->type == EVP_PKEY_DSA) is_dsa = 1;
+       else is_dsa = 0;
        /* We now need to add another PKCS7_SIGNER_INFO entry */
        ASN1_INTEGER_set(p7i->version,1);
        X509_NAME_set(&p7i->issuer_and_serial->issuer,
@@ -296,17 +307,16 @@
 
        /* because ASN1_INTEGER_set is used to set a 'long' we will do
         * things the ugly way. */
-       ASN1_INTEGER_free(p7i->issuer_and_serial->serial);
+       M_ASN1_INTEGER_free(p7i->issuer_and_serial->serial);
        p7i->issuer_and_serial->serial=
-               ASN1_INTEGER_dup(X509_get_serialNumber(x509));
+               M_ASN1_INTEGER_dup(X509_get_serialNumber(x509));
 
        /* lets keep the pkey around for a while */
        CRYPTO_add(&pkey->references,1,CRYPTO_LOCK_EVP_PKEY);
        p7i->pkey=pkey;
 
        /* Set the algorithms */
-       if (pkey->type == EVP_PKEY_DSA)
-               p7i->digest_alg->algorithm=OBJ_nid2obj(NID_sha1);
+       if (is_dsa) p7i->digest_alg->algorithm=OBJ_nid2obj(NID_sha1);
        else    
                p7i->digest_alg->algorithm=OBJ_nid2obj(EVP_MD_type(dgst));
 
@@ -320,9 +330,12 @@
 
        if (p7i->digest_enc_alg->parameter != NULL)
                ASN1_TYPE_free(p7i->digest_enc_alg->parameter);
-       if ((p7i->digest_enc_alg->parameter=ASN1_TYPE_new()) == NULL)
-               goto err;
-       p7i->digest_enc_alg->parameter->type=V_ASN1_NULL;
+       if(is_dsa) p7i->digest_enc_alg->parameter = NULL;
+       else {
+               if (!(p7i->digest_enc_alg->parameter=ASN1_TYPE_new()))
+                       goto err;
+               p7i->digest_enc_alg->parameter->type=V_ASN1_NULL;
+       }
 
        return(1);
 err:
@@ -397,9 +410,9 @@
        X509_NAME_set(&p7i->issuer_and_serial->issuer,
                X509_get_issuer_name(x509));
 
-       ASN1_INTEGER_free(p7i->issuer_and_serial->serial);
+       M_ASN1_INTEGER_free(p7i->issuer_and_serial->serial);
        p7i->issuer_and_serial->serial=
-               ASN1_INTEGER_dup(X509_get_serialNumber(x509));
+               M_ASN1_INTEGER_dup(X509_get_serialNumber(x509));
 
        X509_ALGOR_free(p7i->key_enc_algor);
        p7i->key_enc_algor=(X509_ALGOR *)ASN1_dup(i2d_X509_ALGOR,
@@ -425,6 +438,7 @@
 int PKCS7_set_cipher(PKCS7 *p7, const EVP_CIPHER *cipher)
        {
        int i;
+       ASN1_OBJECT *objtmp;
        PKCS7_ENC_CONTENT *ec;
 
        i=OBJ_obj2nid(p7->type);
@@ -441,7 +455,13 @@
                return(0);
                }
 
-       /* Setup cipher OID */
+       /* Check cipher OID exists and has data in it*/
+       i = EVP_CIPHER_type(cipher);
+       if(i == NID_undef) {
+               
+PKCS7err(PKCS7_F_PKCS7_SET_CIPHER,PKCS7_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER);
+               return(0);
+       }
+       objtmp = OBJ_nid2obj(i);
 
        ec->cipher = cipher;
        return 1;
Index: opensa/openssl/crypto/pkcs7/pkcs7.h
diff -u opensa/openssl/crypto/pkcs7/pkcs7.h:1.1 opensa/openssl/crypto/pkcs7/pkcs7.h:1.2
--- opensa/openssl/crypto/pkcs7/pkcs7.h:1.1     Tue Jan 25 23:25:21 2000
+++ opensa/openssl/crypto/pkcs7/pkcs7.h Thu Mar  2 21:11:58 2000
@@ -71,8 +71,9 @@
 #endif
 
 #ifdef WIN32
-/* Under Win32 this is defined in wincrypt.h */
+/* Under Win32 thes are defined in wincrypt.h */
 #undef PKCS7_ISSUER_AND_SERIAL
+#undef PKCS7_SIGNER_INFO
 #endif
 
 /*
@@ -219,6 +220,7 @@
 #define PKCS7_get_attributes(si)       ((si)->unauth_attr)
 
 #define PKCS7_type_is_signed(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_signed)
+#define PKCS7_type_is_enveloped(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_enveloped)
 #define PKCS7_type_is_signedAndEnveloped(a) \
                (OBJ_obj2nid((a)->type) == NID_pkcs7_signedAndEnveloped)
 #define PKCS7_type_is_data(a)   (OBJ_obj2nid((a)->type) == NID_pkcs7_data)
@@ -236,7 +238,30 @@
 #endif
 #endif
 
+/* S/MIME related flags */
 
+#define PKCS7_TEXT     0x1
+#define PKCS7_NOCERTS  0x2
+#define PKCS7_NOSIGS   0x4
+#define PKCS7_NOCHAIN  0x8
+#define PKCS7_NOINTERN 0x10
+#define PKCS7_NOVERIFY 0x20
+#define PKCS7_DETACHED 0x40
+#define PKCS7_BINARY   0x80
+#define PKCS7_NOATTR   0x100
+
+/* Flags: for compatibility with older code */
+
+#define SMIME_TEXT     PKCS7_TEXT
+#define SMIME_NOCERTS  PKCS7_NOCERTS
+#define SMIME_NOSIGS   PKCS7_NOSIGS
+#define SMIME_NOCHAIN  PKCS7_NOCHAIN
+#define SMIME_NOINTERN PKCS7_NOINTERN
+#define SMIME_NOVERIFY PKCS7_NOVERIFY
+#define SMIME_DETACHED PKCS7_DETACHED
+#define SMIME_BINARY   PKCS7_BINARY
+#define SMIME_NOATTR   PKCS7_NOATTR
+
 PKCS7_ISSUER_AND_SERIAL *PKCS7_ISSUER_AND_SERIAL_new(void );
 void                   PKCS7_ISSUER_AND_SERIAL_free(
                                PKCS7_ISSUER_AND_SERIAL *a);
@@ -247,7 +272,7 @@
                                unsigned char **pp, long length);
 
 #ifndef SSLEAY_MACROS
-int PKCS7_ISSUER_AND_SERIAL_digest(PKCS7_ISSUER_AND_SERIAL *data,EVP_MD *type,
+int PKCS7_ISSUER_AND_SERIAL_digest(PKCS7_ISSUER_AND_SERIAL *data,const EVP_MD *type,
        unsigned char *md,unsigned int *len);
 #ifndef NO_FP_API
 PKCS7 *d2i_PKCS7_fp(FILE *fp,PKCS7 **p7);
@@ -368,6 +393,23 @@
 int PKCS7_set_attributes(PKCS7_SIGNER_INFO *p7si,STACK_OF(X509_ATTRIBUTE) *sk);
 
 
+PKCS7 *PKCS7_sign(X509 *signcert, EVP_PKEY *pkey, STACK_OF(X509) *certs,
+                                                       BIO *data, int flags);
+int PKCS7_verify(PKCS7 *p7, STACK_OF(X509) *certs, X509_STORE *store,
+                                       BIO *indata, BIO *out, int flags);
+STACK_OF(X509) *PKCS7_get0_signers(PKCS7 *p7, STACK_OF(X509) *certs, int flags);
+PKCS7 *PKCS7_encrypt(STACK_OF(X509) *certs, BIO *in, EVP_CIPHER *cipher,
+                                                               int flags);
+int PKCS7_decrypt(PKCS7 *p7, EVP_PKEY *pkey, X509 *cert, BIO *data, int flags);
+
+int PKCS7_add_attrib_smimecap(PKCS7_SIGNER_INFO *si, STACK *cap);
+STACK *PKCS7_get_smimecap(PKCS7_SIGNER_INFO *si);
+int PKCS7_simple_smimecap(STACK *sk, int nid, int arg);
+
+int SMIME_write_PKCS7(BIO *bio, PKCS7 *p7, BIO *data, int flags);
+PKCS7 *SMIME_read_PKCS7(BIO *bio, BIO **bcont);
+int SMIME_crlf_copy(BIO *in, BIO *out, int flags);
+int SMIME_text(BIO *in, BIO *out);
 
 /* BEGIN ERROR CODES */
 /* The following lines are auto generated by the script mkerr.pl. Any changes
@@ -377,6 +419,9 @@
 /* Error codes for the PKCS7 functions. */
 
 /* Function codes. */
+#define PKCS7_F_B64_READ_PKCS7                          120
+#define PKCS7_F_B64_WRITE_PKCS7                                 121
+#define PKCS7_F_PKCS7_ADD_ATTRIB_SMIMECAP               118
 #define PKCS7_F_PKCS7_ADD_CERTIFICATE                   100
 #define PKCS7_F_PKCS7_ADD_CRL                           101
 #define PKCS7_F_PKCS7_ADD_RECIPIENT_INFO                102
@@ -386,20 +431,56 @@
 #define PKCS7_F_PKCS7_DATAINIT                          105
 #define PKCS7_F_PKCS7_DATASIGN                          106
 #define PKCS7_F_PKCS7_DATAVERIFY                        107
+#define PKCS7_F_PKCS7_DECRYPT                           114
+#define PKCS7_F_PKCS7_ENCRYPT                           115
+#define PKCS7_F_PKCS7_GET0_SIGNERS                      124
 #define PKCS7_F_PKCS7_SET_CIPHER                        108
 #define PKCS7_F_PKCS7_SET_CONTENT                       109
 #define PKCS7_F_PKCS7_SET_TYPE                          110
+#define PKCS7_F_PKCS7_SIGN                              116
 #define PKCS7_F_PKCS7_SIGNATUREVERIFY                   113
+#define PKCS7_F_PKCS7_SIMPLE_SMIMECAP                   119
+#define PKCS7_F_PKCS7_VERIFY                            117
+#define PKCS7_F_SMIME_READ_PKCS7                        122
+#define PKCS7_F_SMIME_TEXT                              123
 
 /* Reason codes. */
+#define PKCS7_R_CERTIFICATE_VERIFY_ERROR                117
+#define PKCS7_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER                 144
 #define PKCS7_R_CIPHER_NOT_INITIALIZED                  116
+#define PKCS7_R_CONTENT_AND_DATA_PRESENT                118
+#define PKCS7_R_DECODE_ERROR                            130
 #define PKCS7_R_DECRYPTED_KEY_IS_WRONG_LENGTH           100
+#define PKCS7_R_DECRYPT_ERROR                           119
 #define PKCS7_R_DIGEST_FAILURE                          101
+#define PKCS7_R_ERROR_ADDING_RECIPIENT                  120
+#define PKCS7_R_ERROR_SETTING_CIPHER                    121
 #define PKCS7_R_INTERNAL_ERROR                          102
+#define PKCS7_R_INVALID_MIME_TYPE                       131
+#define PKCS7_R_INVALID_NULL_POINTER                    143
+#define PKCS7_R_MIME_NO_CONTENT_TYPE                    132
+#define PKCS7_R_MIME_PARSE_ERROR                        133
+#define PKCS7_R_MIME_SIG_PARSE_ERROR                    134
 #define PKCS7_R_MISSING_CERIPEND_INFO                   103
+#define PKCS7_R_NO_CONTENT                              122
+#define PKCS7_R_NO_CONTENT_TYPE                                 135
+#define PKCS7_R_NO_MULTIPART_BODY_FAILURE               136
+#define PKCS7_R_NO_MULTIPART_BOUNDARY                   137
 #define PKCS7_R_NO_RECIPIENT_MATCHES_CERTIFICATE        115
+#define PKCS7_R_NO_SIGNATURES_ON_DATA                   123
+#define PKCS7_R_NO_SIGNERS                              142
+#define PKCS7_R_NO_SIG_CONTENT_TYPE                     138
 #define PKCS7_R_OPERATION_NOT_SUPPORTED_ON_THIS_TYPE    104
+#define PKCS7_R_PKCS7_ADD_SIGNATURE_ERROR               124
+#define PKCS7_R_PKCS7_DATAFINAL_ERROR                   125
+#define PKCS7_R_PKCS7_DATASIGN                          126
+#define PKCS7_R_PKCS7_PARSE_ERROR                       139
+#define PKCS7_R_PKCS7_SIG_PARSE_ERROR                   140
+#define PKCS7_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE  127
 #define PKCS7_R_SIGNATURE_FAILURE                       105
+#define PKCS7_R_SIGNER_CERTIFICATE_NOT_FOUND            128
+#define PKCS7_R_SIG_INVALID_MIME_TYPE                   141
+#define PKCS7_R_SMIME_TEXT_ERROR                        129
 #define PKCS7_R_UNABLE_TO_FIND_CERTIFICATE              106
 #define PKCS7_R_UNABLE_TO_FIND_MEM_BIO                  107
 #define PKCS7_R_UNABLE_TO_FIND_MESSAGE_DIGEST           108
Index: opensa/openssl/crypto/pkcs7/pkcs7err.c
diff -u opensa/openssl/crypto/pkcs7/pkcs7err.c:1.1 
opensa/openssl/crypto/pkcs7/pkcs7err.c:1.2
--- opensa/openssl/crypto/pkcs7/pkcs7err.c:1.1  Tue Jan 25 23:25:21 2000
+++ opensa/openssl/crypto/pkcs7/pkcs7err.c      Thu Mar  2 21:11:58 2000
@@ -65,6 +65,9 @@
 #ifndef NO_ERR
 static ERR_STRING_DATA PKCS7_str_functs[]=
        {
+{ERR_PACK(0,PKCS7_F_B64_READ_PKCS7,0), "B64_READ_PKCS7"},
+{ERR_PACK(0,PKCS7_F_B64_WRITE_PKCS7,0),        "B64_WRITE_PKCS7"},
+{ERR_PACK(0,PKCS7_F_PKCS7_ADD_ATTRIB_SMIMECAP,0),      "PKCS7_add_attrib_smimecap"},
 {ERR_PACK(0,PKCS7_F_PKCS7_ADD_CERTIFICATE,0),  "PKCS7_add_certificate"},
 {ERR_PACK(0,PKCS7_F_PKCS7_ADD_CRL,0),  "PKCS7_add_crl"},
 {ERR_PACK(0,PKCS7_F_PKCS7_ADD_RECIPIENT_INFO,0),       "PKCS7_add_recipient_info"},
@@ -74,23 +77,59 @@
 {ERR_PACK(0,PKCS7_F_PKCS7_DATAINIT,0), "PKCS7_dataInit"},
 {ERR_PACK(0,PKCS7_F_PKCS7_DATASIGN,0), "PKCS7_DATASIGN"},
 {ERR_PACK(0,PKCS7_F_PKCS7_DATAVERIFY,0),       "PKCS7_dataVerify"},
+{ERR_PACK(0,PKCS7_F_PKCS7_DECRYPT,0),  "PKCS7_decrypt"},
+{ERR_PACK(0,PKCS7_F_PKCS7_ENCRYPT,0),  "PKCS7_encrypt"},
+{ERR_PACK(0,PKCS7_F_PKCS7_GET0_SIGNERS,0),     "PKCS7_get0_signers"},
 {ERR_PACK(0,PKCS7_F_PKCS7_SET_CIPHER,0),       "PKCS7_set_cipher"},
 {ERR_PACK(0,PKCS7_F_PKCS7_SET_CONTENT,0),      "PKCS7_set_content"},
 {ERR_PACK(0,PKCS7_F_PKCS7_SET_TYPE,0), "PKCS7_set_type"},
+{ERR_PACK(0,PKCS7_F_PKCS7_SIGN,0),     "PKCS7_sign"},
 {ERR_PACK(0,PKCS7_F_PKCS7_SIGNATUREVERIFY,0),  "PKCS7_signatureVerify"},
+{ERR_PACK(0,PKCS7_F_PKCS7_SIMPLE_SMIMECAP,0),  "PKCS7_simple_smimecap"},
+{ERR_PACK(0,PKCS7_F_PKCS7_VERIFY,0),   "PKCS7_verify"},
+{ERR_PACK(0,PKCS7_F_SMIME_READ_PKCS7,0),       "SMIME_read_PKCS7"},
+{ERR_PACK(0,PKCS7_F_SMIME_TEXT,0),     "SMIME_text"},
 {0,NULL}
        };
 
 static ERR_STRING_DATA PKCS7_str_reasons[]=
        {
+{PKCS7_R_CERTIFICATE_VERIFY_ERROR        ,"certificate verify error"},
+{PKCS7_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER ,"cipher has no object identifier"},
 {PKCS7_R_CIPHER_NOT_INITIALIZED          ,"cipher not initialized"},
+{PKCS7_R_CONTENT_AND_DATA_PRESENT        ,"content and data present"},
+{PKCS7_R_DECODE_ERROR                    ,"decode error"},
 {PKCS7_R_DECRYPTED_KEY_IS_WRONG_LENGTH   ,"decrypted key is wrong length"},
+{PKCS7_R_DECRYPT_ERROR                   ,"decrypt error"},
 {PKCS7_R_DIGEST_FAILURE                  ,"digest failure"},
+{PKCS7_R_ERROR_ADDING_RECIPIENT          ,"error adding recipient"},
+{PKCS7_R_ERROR_SETTING_CIPHER            ,"error setting cipher"},
 {PKCS7_R_INTERNAL_ERROR                  ,"internal error"},
+{PKCS7_R_INVALID_MIME_TYPE               ,"invalid mime type"},
+{PKCS7_R_INVALID_NULL_POINTER            ,"invalid null pointer"},
+{PKCS7_R_MIME_NO_CONTENT_TYPE            ,"mime no content type"},
+{PKCS7_R_MIME_PARSE_ERROR                ,"mime parse error"},
+{PKCS7_R_MIME_SIG_PARSE_ERROR            ,"mime sig parse error"},
 {PKCS7_R_MISSING_CERIPEND_INFO           ,"missing ceripend info"},
+{PKCS7_R_NO_CONTENT                      ,"no content"},
+{PKCS7_R_NO_CONTENT_TYPE                 ,"no content type"},
+{PKCS7_R_NO_MULTIPART_BODY_FAILURE       ,"no multipart body failure"},
+{PKCS7_R_NO_MULTIPART_BOUNDARY           ,"no multipart boundary"},
 {PKCS7_R_NO_RECIPIENT_MATCHES_CERTIFICATE,"no recipient matches certificate"},
+{PKCS7_R_NO_SIGNATURES_ON_DATA           ,"no signatures on data"},
+{PKCS7_R_NO_SIGNERS                      ,"no signers"},
+{PKCS7_R_NO_SIG_CONTENT_TYPE             ,"no sig content type"},
 {PKCS7_R_OPERATION_NOT_SUPPORTED_ON_THIS_TYPE,"operation not supported on this type"},
+{PKCS7_R_PKCS7_ADD_SIGNATURE_ERROR       ,"pkcs7 add signature error"},
+{PKCS7_R_PKCS7_DATAFINAL_ERROR           ,"pkcs7 datafinal error"},
+{PKCS7_R_PKCS7_DATASIGN                  ,"pkcs7 datasign"},
+{PKCS7_R_PKCS7_PARSE_ERROR               ,"pkcs7 parse error"},
+{PKCS7_R_PKCS7_SIG_PARSE_ERROR           ,"pkcs7 sig parse error"},
+{PKCS7_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE,"private key does not match 
+certificate"},
 {PKCS7_R_SIGNATURE_FAILURE               ,"signature failure"},
+{PKCS7_R_SIGNER_CERTIFICATE_NOT_FOUND    ,"signer certificate not found"},
+{PKCS7_R_SIG_INVALID_MIME_TYPE           ,"sig invalid mime type"},
+{PKCS7_R_SMIME_TEXT_ERROR                ,"smime text error"},
 {PKCS7_R_UNABLE_TO_FIND_CERTIFICATE      ,"unable to find certificate"},
 {PKCS7_R_UNABLE_TO_FIND_MEM_BIO          ,"unable to find mem bio"},
 {PKCS7_R_UNABLE_TO_FIND_MESSAGE_DIGEST   ,"unable to find message digest"},
Index: opensa/openssl/crypto/pkcs7/sign.c
diff -u opensa/openssl/crypto/pkcs7/sign.c:1.1 opensa/openssl/crypto/pkcs7/sign.c:1.2
--- opensa/openssl/crypto/pkcs7/sign.c:1.1      Tue Jan 25 23:25:21 2000
+++ opensa/openssl/crypto/pkcs7/sign.c  Thu Mar  2 21:11:58 2000
@@ -56,6 +56,7 @@
  * [including the GNU Public Licence.]
  */
 #include <stdio.h>
+#include <string.h>
 #include <openssl/bio.h>
 #include <openssl/x509.h>
 #include <openssl/pem.h>
@@ -75,10 +76,18 @@
        int i;
        int nodetach=0;
 
+#ifndef NO_MD2
        EVP_add_digest(EVP_md2());
+#endif
+#ifndef NO_MD5
        EVP_add_digest(EVP_md5());
+#endif
+#ifndef NO_SHA1
        EVP_add_digest(EVP_sha1());
+#endif
+#ifndef NO_MDC2
        EVP_add_digest(EVP_mdc2());
+#endif
 
        data=BIO_new(BIO_s_file());
 again:
@@ -97,9 +106,9 @@
                BIO_set_fp(data,stdin,BIO_NOCLOSE);
 
        if ((in=BIO_new_file("server.pem","r")) == NULL) goto err;
-       if ((x509=PEM_read_bio_X509(in,NULL,NULL)) == NULL) goto err;
+       if ((x509=PEM_read_bio_X509(in,NULL,NULL,NULL)) == NULL) goto err;
        BIO_reset(in);
-       if ((pkey=PEM_read_bio_PrivateKey(in,NULL,NULL)) == NULL) goto err;
+       if ((pkey=PEM_read_bio_PrivateKey(in,NULL,NULL,NULL)) == NULL) goto err;
        BIO_free(in);
 
        p7=PKCS7_new();
Index: opensa/openssl/crypto/pkcs7/verify.c
diff -u opensa/openssl/crypto/pkcs7/verify.c:1.1 
opensa/openssl/crypto/pkcs7/verify.c:1.2
--- opensa/openssl/crypto/pkcs7/verify.c:1.1    Tue Jan 25 23:25:21 2000
+++ opensa/openssl/crypto/pkcs7/verify.c        Thu Mar  2 21:11:58 2000
@@ -56,6 +56,7 @@
  * [including the GNU Public Licence.]
  */
 #include <stdio.h>
+#include <string.h>
 #include <openssl/bio.h>
 #include <openssl/asn1.h>
 #include <openssl/x509.h>
@@ -84,10 +85,18 @@
 
        bio_err=BIO_new_fp(stderr,BIO_NOCLOSE);
        bio_out=BIO_new_fp(stdout,BIO_NOCLOSE);
+#ifndef NO_MD2
        EVP_add_digest(EVP_md2());
+#endif
+#ifndef NO_MD5
        EVP_add_digest(EVP_md5());
+#endif
+#ifndef NO_SHA1
        EVP_add_digest(EVP_sha1());
+#endif
+#ifndef NO_MDC2
        EVP_add_digest(EVP_mdc2());
+#endif
 
        data=BIO_new(BIO_s_file());
 
@@ -121,7 +130,7 @@
 
 
        /* Load the PKCS7 object from a file */
-       if ((p7=PEM_read_bio_PKCS7(data,NULL,NULL)) == NULL) goto err;
+       if ((p7=PEM_read_bio_PKCS7(data,NULL,NULL,NULL)) == NULL) goto err;
 
        /* This stuff is being setup for certificate verification.
         * When using SSL, it could be replaced with a 
Index: opensa/openssl/crypto/rand/makefile.ssl
diff -u opensa/openssl/crypto/rand/makefile.ssl:1.1 
opensa/openssl/crypto/rand/makefile.ssl:1.2
--- opensa/openssl/crypto/rand/makefile.ssl:1.1 Tue Jan 25 23:25:01 2000
+++ opensa/openssl/crypto/rand/makefile.ssl     Thu Mar  2 21:11:58 2000
@@ -22,8 +22,8 @@
 APPS=
 
 LIB=$(TOP)/libcrypto.a
-LIBSRC=md_rand.c randfile.c rand_lib.c
-LIBOBJ=md_rand.o randfile.o rand_lib.o
+LIBSRC=md_rand.c randfile.c rand_lib.c rand_err.c rand_egd.c
+LIBOBJ=md_rand.o randfile.o rand_lib.o rand_err.o rand_egd.o
 
 SRC= $(LIBSRC)
 
@@ -79,9 +79,14 @@
 # DO NOT DELETE THIS LINE -- make depend depends on it.
 
 md_rand.o: ../../include/openssl/crypto.h ../../include/openssl/e_os.h
-md_rand.o: ../../include/openssl/e_os2.h ../../include/openssl/opensslconf.h
-md_rand.o: ../../include/openssl/opensslv.h ../../include/openssl/rand.h
+md_rand.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
+md_rand.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
+md_rand.o: ../../include/openssl/rand.h ../../include/openssl/safestack.h
 md_rand.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
+rand_egd.o: ../../include/openssl/opensslconf.h ../../include/openssl/rand.h
+rand_err.o: ../../include/openssl/err.h ../../include/openssl/rand.h
 rand_lib.o: ../../include/openssl/rand.h
-randfile.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h
-randfile.o: ../../include/openssl/opensslconf.h ../../include/openssl/rand.h
+randfile.o: ../../include/openssl/crypto.h ../../include/openssl/e_os.h
+randfile.o: ../../include/openssl/e_os2.h ../../include/openssl/opensslconf.h
+randfile.o: ../../include/openssl/opensslv.h ../../include/openssl/rand.h
+randfile.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
Index: opensa/openssl/crypto/rand/md_rand.c
diff -u opensa/openssl/crypto/rand/md_rand.c:1.1 
opensa/openssl/crypto/rand/md_rand.c:1.2
--- opensa/openssl/crypto/rand/md_rand.c:1.1    Tue Jan 25 23:25:01 2000
+++ opensa/openssl/crypto/rand/md_rand.c        Thu Mar  2 21:11:58 2000
@@ -56,14 +56,23 @@
  * [including the GNU Public Licence.]
  */
 
+#define ENTROPY_NEEDED 16  /* require 128 bits = 16 bytes of randomness */
+
+#ifndef MD_RAND_DEBUG
+# ifndef NDEBUG
+#   define NDEBUG
+# endif
+#endif
+
+#include <assert.h>
 #include <stdio.h>
-#include <sys/types.h>
 #include <time.h>
 #include <string.h>
 
 #include "openssl/e_os.h"
 
 #include <openssl/crypto.h>
+#include <openssl/err.h>
 
 #if !defined(USE_MD5_RAND) && !defined(USE_SHA1_RAND) && !defined(USE_MDC2_RAND) && 
!defined(USE_MD2_RAND)
 #if !defined(NO_SHA) && !defined(NO_SHA1)
@@ -129,17 +138,23 @@
 static unsigned char state[STATE_SIZE+MD_DIGEST_LENGTH];
 static unsigned char md[MD_DIGEST_LENGTH];
 static long md_count[2]={0,0};
+static double entropy=0;
+static int initialized=0;
 
 const char *RAND_version="RAND" OPENSSL_VERSION_PTEXT;
 
 static void ssleay_rand_cleanup(void);
 static void ssleay_rand_seed(const void *buf, int num);
-static void ssleay_rand_bytes(unsigned char *buf, int num);
+static void ssleay_rand_add(const void *buf, int num, double add_entropy);
+static int ssleay_rand_bytes(unsigned char *buf, int num);
+static int ssleay_rand_pseudo_bytes(unsigned char *buf, int num);
 
 RAND_METHOD rand_ssleay_meth={
        ssleay_rand_seed,
        ssleay_rand_bytes,
        ssleay_rand_cleanup,
+       ssleay_rand_add,
+       ssleay_rand_pseudo_bytes,
        }; 
 
 RAND_METHOD *RAND_SSLeay(void)
@@ -155,22 +170,49 @@
        memset(md,0,MD_DIGEST_LENGTH);
        md_count[0]=0;
        md_count[1]=0;
+       entropy=0;
        }
 
-static void ssleay_rand_seed(const void *buf, int num)
+static void ssleay_rand_add(const void *buf, int num, double add)
        {
-       int i,j,k,st_idx,st_num;
+       int i,j,k,st_idx;
+       long md_c[2];
+       unsigned char local_md[MD_DIGEST_LENGTH];
        MD_CTX m;
 
 #ifdef NORAND
        return;
 #endif
 
+       /*
+        * (Based on the rand(3) manpage)
+        *
+        * The input is chopped up into units of 20 bytes (or less for
+        * the last block).  Each of these blocks is run through the hash
+        * function as follows:  The data passed to the hash function
+        * is the current 'md', the same number of bytes from the 'state'
+        * (the location determined by in incremented looping index) as
+        * the current 'block', the new key data 'block', and 'count'
+        * (which is incremented after each use).
+        * The result of this is kept in 'md' and also xored into the
+        * 'state' at the same locations that were used as input into the
+         * hash function.
+        */
+
        CRYPTO_w_lock(CRYPTO_LOCK_RAND);
        st_idx=state_index;
-       st_num=state_num;
+
+       /* use our own copies of the counters so that even
+        * if a concurrent thread seeds with exactly the
+        * same data and uses the same subarray there's _some_
+        * difference */
+       md_c[0] = md_count[0];
+       md_c[1] = md_count[1];
 
-       state_index=(state_index+num);
+       memcpy(local_md, md, sizeof md);
+
+       /* state_index <= state_num <= STATE_SIZE */
+       state_index += num;
        if (state_index >= STATE_SIZE)
                {
                state_index%=STATE_SIZE;
@@ -181,6 +223,14 @@
                if (state_index > state_num)
                        state_num=state_index;
                }
+       /* state_index <= state_num <= STATE_SIZE */
+
+       /* state[st_idx], ..., state[(st_idx + num - 1) % STATE_SIZE]
+        * are what we will use now, but other threads may use them
+        * as well */
+
+       md_count[1] += (num / MD_DIGEST_LENGTH) + (num % MD_DIGEST_LENGTH > 0);
+
        CRYPTO_w_unlock(CRYPTO_LOCK_RAND);
 
        for (i=0; i<num; i+=MD_DIGEST_LENGTH)
@@ -189,7 +239,7 @@
                j=(j > MD_DIGEST_LENGTH)?MD_DIGEST_LENGTH:j;
 
                MD_Init(&m);
-               MD_Update(&m,md,MD_DIGEST_LENGTH);
+               MD_Update(&m,local_md,MD_DIGEST_LENGTH);
                k=(st_idx+j)-STATE_SIZE;
                if (k > 0)
                        {
@@ -200,97 +250,172 @@
                        MD_Update(&m,&(state[st_idx]),j);
                        
                MD_Update(&m,buf,j);
-               MD_Update(&m,(unsigned char *)&(md_count[0]),sizeof(md_count));
-               MD_Final(md,&m);
-               md_count[1]++;
+               MD_Update(&m,(unsigned char *)&(md_c[0]),sizeof(md_c));
+               MD_Final(local_md,&m);
+               md_c[1]++;
 
                buf=(const char *)buf + j;
 
                for (k=0; k<j; k++)
                        {
-                       state[st_idx++]^=md[k];
+                       /* Parallel threads may interfere with this,
+                        * but always each byte of the new state is
+                        * the XOR of some previous value of its
+                        * and local_md (itermediate values may be lost).
+                        * Alway using locking could hurt performance more
+                        * than necessary given that conflicts occur only
+                        * when the total seeding is longer than the random
+                        * state. */
+                       state[st_idx++]^=local_md[k];
                        if (st_idx >= STATE_SIZE)
-                               {
                                st_idx=0;
-                               st_num=STATE_SIZE;
-                               }
                        }
                }
        memset((char *)&m,0,sizeof(m));
+
+       CRYPTO_w_lock(CRYPTO_LOCK_RAND);
+       /* Don't just copy back local_md into md -- this could mean that
+        * other thread's seeding remains without effect (except for
+        * the incremented counter).  By XORing it we keep at least as
+        * much entropy as fits into md. */
+       for (k = 0; k < sizeof md; k++)
+               {
+               md[k] ^= local_md[k];
+               }
+       if (entropy < ENTROPY_NEEDED) /* stop counting when we have enough */
+           entropy += add;
+       CRYPTO_w_unlock(CRYPTO_LOCK_RAND);
+       
+#ifndef THREADS        
+       assert(md_c[1] == md_count[1]);
+#endif
        }
 
-static void ssleay_rand_bytes(unsigned char *buf, int num)
+static void ssleay_rand_seed(const void *buf, int num)
        {
-       int i,j,k,st_num,st_idx;
-       MD_CTX m;
-       static int init=1;
+       ssleay_rand_add(buf, num, num);
+       }
+
+static void ssleay_rand_initialize(void)
+       {
        unsigned long l;
+#ifndef GETPID_IS_MEANINGLESS
+       pid_t curr_pid = getpid();
+#endif
 #ifdef DEVRANDOM
        FILE *fh;
 #endif
 
+       CRYPTO_w_unlock(CRYPTO_LOCK_RAND);
+       /* put in some default random data, we need more than just this */
+#ifndef GETPID_IS_MEANINGLESS
+       l=curr_pid;
+       RAND_add(&l,sizeof(l),0);
+       l=getuid();
+       RAND_add(&l,sizeof(l),0);
+#endif
+       l=time(NULL);
+       RAND_add(&l,sizeof(l),0);
+
+#ifdef DEVRANDOM
+       /* Use a random entropy pool device. Linux, FreeBSD and OpenBSD
+        * have this. Use /dev/urandom if you can as /dev/random may block
+        * if it runs out of random entries.  */
+
+       if ((fh = fopen(DEVRANDOM, "r")) != NULL)
+               {
+               unsigned char tmpbuf[ENTROPY_NEEDED];
+               int n;
+               
+               setvbuf(fh, NULL, _IONBF, 0);
+               n=fread((unsigned char *)tmpbuf,1,ENTROPY_NEEDED,fh);
+               fclose(fh);
+               RAND_add(tmpbuf,sizeof tmpbuf,n);
+               memset(tmpbuf,0,n);
+               }
+#endif
+#ifdef PURIFY
+       memset(state,0,STATE_SIZE);
+       memset(md,0,MD_DIGEST_LENGTH);
+#endif
+       CRYPTO_w_lock(CRYPTO_LOCK_RAND);
+       initialized=1;
+       }
+
+static int ssleay_rand_bytes(unsigned char *buf, int num)
+       {
+       int i,j,k,st_num,st_idx;
+       int ok;
+       long md_c[2];
+       unsigned char local_md[MD_DIGEST_LENGTH];
+       MD_CTX m;
+#ifndef GETPID_IS_MEANINGLESS
+       pid_t curr_pid = getpid();
+#endif
+
 #ifdef PREDICT
        {
        static unsigned char val=0;
 
        for (i=0; i<num; i++)
                buf[i]=val++;
-       return;
+       return(1);
        }
 #endif
 
+       /*
+        * (Based on the rand(3) manpage:)
+        *
+        * For each group of 10 bytes (or less), we do the following:
+        *
+        * Input into the hash function the top 10 bytes from the
+        * local 'md' (which is initialized from the global 'md'
+        * before any bytes are generated), the bytes that are
+        * to be overwritten by the random bytes, and bytes from the
+        * 'state' (incrementing looping index).  From this digest output
+        * (which is kept in 'md'), the top (up to) 10 bytes are
+        * returned to the caller and the bottom (up to) 10 bytes are xored
+        * into the 'state'.
+        * Finally, after we have finished 'num' random bytes for the
+        * caller, 'count' (which is incremented) and the local and global 'md'
+        * are fed into the hash function and the results are kept in the
+        * global 'md'.
+        */
+
        CRYPTO_w_lock(CRYPTO_LOCK_RAND);
+
+       if (!initialized)
+               ssleay_rand_initialize();
 
-       if (init)
+       ok = (entropy >= ENTROPY_NEEDED);
+       if (!ok)
                {
-               CRYPTO_w_unlock(CRYPTO_LOCK_RAND);
-               /* put in some default random data, we need more than
-                * just this */
-               RAND_seed(&m,sizeof(m));
-#ifndef MSDOS
-               l=getpid();
-               RAND_seed(&l,sizeof(l));
-               l=getuid();
-               RAND_seed(&l,sizeof(l));
-#endif
-               l=time(NULL);
-               RAND_seed(&l,sizeof(l));
-
-/* #ifdef DEVRANDOM */
-               /* 
-                * Use a random entropy pool device.
-                * Linux 1.3.x and FreeBSD-Current has 
-                * this. Use /dev/urandom if you can
-                * as /dev/random will block if it runs out
-                * of random entries.
+               /* If the PRNG state is not yet unpredictable, then seeing
+                * the PRNG output may help attackers to determine the new
+                * state; thus we have to decrease the entropy estimate.
+                * Once we've had enough initial seeding we don't bother to
+                * adjust the entropy count, though, because we're not ambitious
+                * to provide *information-theoretic* randomness.
                 */
-               if ((fh = fopen(DEVRANDOM, "r")) != NULL)
-                       {
-                       unsigned char tmpbuf[32];
-
-                       fread((unsigned char *)tmpbuf,1,32,fh);
-                       /* we don't care how many bytes we read,
-                        * we will just copy the 'stack' if there is
-                        * nothing else :-) */
-                       fclose(fh);
-                       RAND_seed(tmpbuf,32);
-                       memset(tmpbuf,0,32);
-                       }
-/* #endif */
-#ifdef PURIFY
-               memset(state,0,STATE_SIZE);
-               memset(md,0,MD_DIGEST_LENGTH);
-#endif
-               CRYPTO_w_lock(CRYPTO_LOCK_RAND);
-               init=0;
+               entropy -= num;
+               if (entropy < 0)
+                       entropy = 0;
                }
 
        st_idx=state_index;
        st_num=state_num;
+       md_c[0] = md_count[0];
+       md_c[1] = md_count[1];
+       memcpy(local_md, md, sizeof md);
+
        state_index+=num;
        if (state_index > state_num)
-               state_index=(state_index%state_num);
+               state_index %= state_num;
+
+       /* state[st_idx], ..., state[(st_idx + num - 1) % st_num]
+        * are now ours (but other threads may use them too) */
 
+       md_count[0] += 1;
        CRYPTO_w_unlock(CRYPTO_LOCK_RAND);
 
        while (num > 0)
@@ -298,8 +423,15 @@
                j=(num >= MD_DIGEST_LENGTH/2)?MD_DIGEST_LENGTH/2:num;
                num-=j;
                MD_Init(&m);
-               MD_Update(&m,&(md[MD_DIGEST_LENGTH/2]),MD_DIGEST_LENGTH/2);
-               MD_Update(&m,(unsigned char *)&(md_count[0]),sizeof(md_count));
+#ifndef GETPID_IS_MEANINGLESS
+               if (curr_pid) /* just in the first iteration to save time */
+                       {
+                       MD_Update(&m,(unsigned char*)&curr_pid,sizeof curr_pid);
+                       curr_pid = 0;
+                       }
+#endif
+               MD_Update(&m,&(local_md[MD_DIGEST_LENGTH/2]),MD_DIGEST_LENGTH/2);
+               MD_Update(&m,(unsigned char *)&(md_c[0]),sizeof(md_c));
 #ifndef PURIFY
                MD_Update(&m,buf,j); /* purify complains */
 #endif
@@ -311,23 +443,57 @@
                        }
                else
                        MD_Update(&m,&(state[st_idx]),j);
-               MD_Final(md,&m);
+               MD_Final(local_md,&m);
 
                for (i=0; i<j; i++)
                        {
+                       state[st_idx++]^=local_md[i]; /* may compete with other 
+threads */
+                       *(buf++)=local_md[i+MD_DIGEST_LENGTH/2];
                        if (st_idx >= st_num)
                                st_idx=0;
-                       state[st_idx++]^=md[i];
-                       *(buf++)=md[i+MD_DIGEST_LENGTH/2];
                        }
                }
 
        MD_Init(&m);
-       MD_Update(&m,(unsigned char *)&(md_count[0]),sizeof(md_count));
-       md_count[0]++;
+       MD_Update(&m,(unsigned char *)&(md_c[0]),sizeof(md_c));
+       MD_Update(&m,local_md,MD_DIGEST_LENGTH);
+       CRYPTO_w_lock(CRYPTO_LOCK_RAND);
        MD_Update(&m,md,MD_DIGEST_LENGTH);
        MD_Final(md,&m);
+       CRYPTO_w_unlock(CRYPTO_LOCK_RAND);
+
        memset(&m,0,sizeof(m));
+       if (ok)
+               return(1);
+       else
+               {
+               RANDerr(RAND_F_SSLEAY_RAND_BYTES,RAND_R_PRNG_NOT_SEEDED);
+               return(0);
+               }
+       }
+
+/* pseudo-random bytes that are guaranteed to be unique but not
+   unpredictable */
+static int ssleay_rand_pseudo_bytes(unsigned char *buf, int num) 
+       {
+       int ret, err;
+
+       ret = RAND_bytes(buf, num);
+       if (ret == 0)
+               {
+               err = ERR_peek_error();
+               if (ERR_GET_LIB(err) == ERR_LIB_RAND &&
+                   ERR_GET_REASON(err) == RAND_R_PRNG_NOT_SEEDED)
+                       (void)ERR_get_error();
+               }
+       return (ret);
+       }
+
+int RAND_status(void)
+       {
+       if (!initialized)
+               ssleay_rand_initialize();
+       return (entropy >= ENTROPY_NEEDED);
        }
 
 #ifdef WINDOWS
@@ -354,12 +520,12 @@
  */
 /*
  * I have modified the loading of bytes via RAND_seed() mechanism since
- * the origional would have been very very CPU intensive since RAND_seed()
+ * the original would have been very very CPU intensive since RAND_seed()
  * does an MD5 per 16 bytes of input.  The cost to digest 16 bytes is the same
  * as that to digest 56 bytes.  So under the old system, a screen of
- * 1024*768*256 would have been CPU cost of approximatly 49,000 56 byte MD5
+ * 1024*768*256 would have been CPU cost of approximately 49,000 56 byte MD5
  * digests or digesting 2.7 mbytes.  What I have put in place would
- * be 48 16k MD5 digests, or efectivly 48*16+48 MD5 bytes or 816 kbytes
+ * be 48 16k MD5 digests, or effectively 48*16+48 MD5 bytes or 816 kbytes
  * or about 3.5 times as much.
  * - eric 
  */
Index: opensa/openssl/crypto/rand/rand.h
diff -u opensa/openssl/crypto/rand/rand.h:1.1 opensa/openssl/crypto/rand/rand.h:1.2
--- opensa/openssl/crypto/rand/rand.h:1.1       Tue Jan 25 23:25:01 2000
+++ opensa/openssl/crypto/rand/rand.h   Thu Mar  2 21:11:58 2000
@@ -66,24 +66,45 @@
 typedef struct rand_meth_st
        {
        void (*seed)(const void *buf, int num);
-       void (*bytes)(unsigned char *buf, int num);
+       int (*bytes)(unsigned char *buf, int num);
        void (*cleanup)(void);
+       void (*add)(const void *buf, int num, double entropy);
+       int (*pseudorand)(unsigned char *buf, int num);
        } RAND_METHOD;
 
 void RAND_set_rand_method(RAND_METHOD *meth);
 RAND_METHOD *RAND_get_rand_method(void );
 RAND_METHOD *RAND_SSLeay(void);
 void RAND_cleanup(void );
-void RAND_bytes(unsigned char *buf,int num);
+int  RAND_bytes(unsigned char *buf,int num);
+int  RAND_pseudo_bytes(unsigned char *buf,int num);
 void RAND_seed(const void *buf,int num);
+void RAND_add(const void *buf,int num,double entropy);
 int  RAND_load_file(const char *file,long max_bytes);
 int  RAND_write_file(const char *file);
-char *RAND_file_name(char *file,int num);
+const char *RAND_file_name(char *file,int num);
+int RAND_status(void);
+int RAND_egd(const char *path);
 #ifdef WINDOWS
 void RAND_screen(void);
 #endif
+void   ERR_load_RAND_strings(void);
+
+/* BEGIN ERROR CODES */
+/* The following lines are auto generated by the script mkerr.pl. Any changes
+ * made after this point may be overwritten when the script is next run.
+ */
+
+/* Error codes for the RAND functions. */
+
+/* Function codes. */
+#define RAND_F_SSLEAY_RAND_BYTES                        100
+
+/* Reason codes. */
+#define RAND_R_PRNG_NOT_SEEDED                          100
+
 #ifdef  __cplusplus
 }
 #endif
-
 #endif
+
Index: opensa/openssl/crypto/rand/rand_lib.c
diff -u opensa/openssl/crypto/rand/rand_lib.c:1.1 
opensa/openssl/crypto/rand/rand_lib.c:1.2
--- opensa/openssl/crypto/rand/rand_lib.c:1.1   Tue Jan 25 23:25:01 2000
+++ opensa/openssl/crypto/rand/rand_lib.c       Thu Mar  2 21:11:58 2000
@@ -57,7 +57,6 @@
  */
 
 #include <stdio.h>
-#include <sys/types.h>
 #include <time.h>
 #include <openssl/rand.h>
 
@@ -90,9 +89,22 @@
                rand_meth->seed(buf,num);
        }
 
-void RAND_bytes(unsigned char *buf, int num)
+void RAND_add(const void *buf, int num, double entropy)
        {
        if (rand_meth != NULL)
-               rand_meth->bytes(buf,num);
+               rand_meth->add(buf,num,entropy);
        }
 
+int RAND_bytes(unsigned char *buf, int num)
+       {
+       if (rand_meth != NULL)
+               return rand_meth->bytes(buf,num);
+       return(-1);
+       }
+
+int RAND_pseudo_bytes(unsigned char *buf, int num)
+       {
+       if (rand_meth != NULL)
+               return rand_meth->pseudorand(buf,num);
+       return(-1);
+       }
Index: opensa/openssl/crypto/rand/randfile.c
diff -u opensa/openssl/crypto/rand/randfile.c:1.1 
opensa/openssl/crypto/rand/randfile.c:1.2
--- opensa/openssl/crypto/rand/randfile.c:1.1   Tue Jan 25 23:25:01 2000
+++ opensa/openssl/crypto/rand/randfile.c       Thu Mar  2 21:11:58 2000
@@ -60,22 +60,35 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/types.h>
 
 #include "openssl/e_os.h"
 
+#ifdef VMS
+#include <unixio.h>
+#endif
+#ifndef NO_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef MAC_OS_pre_X
+# include <stat.h>
+#else
+# include <sys/stat.h>
+#endif
+
+#include <openssl/crypto.h>
 #include <openssl/rand.h>
 
 #undef BUFSIZE
 #define BUFSIZE        1024
 #define RAND_DATA 1024
 
-/* #define RFILE ".rand" - defined in ../../e_os.h */
+/* #define RFILE ".rnd" - defined in ../../e_os.h */
 
 int RAND_load_file(const char *file, long bytes)
        {
+       /* If bytes >= 0, read up to 'bytes' bytes.
+        * if bytes == -1, read complete file. */
+
        MS_STATIC unsigned char buf[BUFSIZE];
        struct stat sb;
        int i,ret=0,n;
@@ -85,23 +98,28 @@
 
        i=stat(file,&sb);
        /* If the state fails, put some crap in anyway */
-       RAND_seed(&sb,sizeof(sb));
-       ret+=sizeof(sb);
+       RAND_add(&sb,sizeof(sb),0);
        if (i < 0) return(0);
-       if (bytes <= 0) return(ret);
+       if (bytes == 0) return(ret);
 
        in=fopen(file,"rb");
        if (in == NULL) goto err;
        for (;;)
                {
-               n=(bytes < BUFSIZE)?(int)bytes:BUFSIZE;
+               if (bytes > 0)
+                       n = (bytes < BUFSIZE)?(int)bytes:BUFSIZE;
+               else
+                       n = BUFSIZE;
                i=fread(buf,1,n,in);
                if (i <= 0) break;
                /* even if n != i, use the full array */
-               RAND_seed(buf,n);
+               RAND_add(buf,n,i);
                ret+=i;
-               bytes-=n;
-               if (bytes <= 0) break;
+               if (bytes > 0)
+                       {
+                       bytes-=n;
+                       if (bytes == 0) break;
+                       }
                }
        fclose(in);
        memset(buf,0,BUFSIZE);
@@ -112,29 +130,48 @@
 int RAND_write_file(const char *file)
        {
        unsigned char buf[BUFSIZE];
-       int i,ret=0;
-       FILE *out;
+       int i,ret=0,err=0;
+       FILE *out = NULL;
        int n;
 
-       /* Under VMS, fopen(file, "wb") will craete a new version of the
+#ifdef VMS
+       /* Under VMS, fopen(file, "wb") will create a new version of the
           same file.  This is not good, so let's try updating an existing
-          one, and create file only if it doesn't already exist.  This
-          should be completely harmless on system that have no file
-          versions.                                    -- Richard Levitte */
+          one, and create file only if it doesn't already exist. */
+       /* At the same time, if we just update a file, we also need to
+          truncate it, and unfortunately, ftruncate() and truncate() do
+          not exist everywhere.  All that remains is to delete old versions
+          of the random data file (done at the end). */
+#if 0
        out=fopen(file,"rb+");
-       if (out == NULL && errno == ENOENT)
+       if (out == NULL && errno != ENOENT)
+               goto err;
+#endif
+#endif
+
+       if (out == NULL)
                {
-               errno = 0;
+#if defined O_CREAT && defined O_EXCL
+               /* chmod(..., 0600) is too late to protect the file,
+                * permissions should be restrictive from the start */
+               int fd = open(file, O_CREAT | O_EXCL, 0600);
+               if (fd != -1)
+                       out = fdopen(fd, "wb");
+#else          
                out=fopen(file,"wb");
+#endif
                }
        if (out == NULL) goto err;
+#ifndef NO_CHMOD
        chmod(file,0600);
+#endif
        n=RAND_DATA;
        for (;;)
                {
                i=(n > BUFSIZE)?BUFSIZE:n;
                n-=BUFSIZE;
-               RAND_bytes(buf,i);
+               if (RAND_bytes(buf,i) <= 0)
+                       err=1;
                i=fwrite(buf,1,i,out);
                if (i <= 0)
                        {
@@ -144,13 +181,40 @@
                ret+=i;
                if (n <= 0) break;
                }
+#ifdef VMS
+       /* We may have updated an existing file using mode "rb+",
+        * now remove any old extra bytes */
+#if 0
+       if (ret > 0)
+               ftruncate(fileno(out), ret);
+#else
+       /* Try to delete older versions of the file, until there aren't
+          any */
+       {
+       char *tmpf;
+
+       tmpf = Malloc(strlen(file) + 4);  /* to add ";-1" and a nul */
+       if (tmpf)
+               {
+               strcpy(tmpf, file);
+               strcat(tmpf, ";-1");
+               while(delete(tmpf) == 0)
+                       ;
+               rename(file,";1"); /* Make sure it's version 1, or we
+                                     will reach the limit (32767) at
+                                     some point... */
+               }
+       }
+#endif
+#endif
+
        fclose(out);
        memset(buf,0,BUFSIZE);
 err:
-       return(ret);
+       return(err ? -1 : ret);
        }
 
-char *RAND_file_name(char *buf, int size)
+const char *RAND_file_name(char *buf, int size)
        {
        char *s;
        char *ret=NULL;
Index: opensa/openssl/crypto/rand/randtest.c
diff -u opensa/openssl/crypto/rand/randtest.c:1.1 
opensa/openssl/crypto/rand/randtest.c:1.2
--- opensa/openssl/crypto/rand/randtest.c:1.1   Tue Jan 25 23:25:01 2000
+++ opensa/openssl/crypto/rand/randtest.c       Thu Mar  2 21:11:58 2000
@@ -73,7 +73,7 @@
        /*double d; */
        long d;
 
-       RAND_bytes(buf,2500);
+       RAND_pseudo_bytes(buf,2500);
 
        n1=0;
        for (i=0; i<16; i++) n2[i]=0;
Index: opensa/openssl/crypto/rc2/rc2speed.c
diff -u opensa/openssl/crypto/rc2/rc2speed.c:1.1 
opensa/openssl/crypto/rc2/rc2speed.c:1.2
--- opensa/openssl/crypto/rc2/rc2speed.c:1.1    Tue Jan 25 23:24:43 2000
+++ opensa/openssl/crypto/rc2/rc2speed.c        Thu Mar  2 21:11:59 2000
@@ -183,7 +183,7 @@
 #endif
 
 #ifndef TIMES
-       printf("To get the most acurate results, try to run this\n");
+       printf("To get the most accurate results, try to run this\n");
        printf("program when this computer is idle.\n");
 #endif
 
Index: opensa/openssl/crypto/rc2/rc2test.c
diff -u opensa/openssl/crypto/rc2/rc2test.c:1.1 opensa/openssl/crypto/rc2/rc2test.c:1.2
--- opensa/openssl/crypto/rc2/rc2test.c:1.1     Tue Jan 25 23:24:43 2000
+++ opensa/openssl/crypto/rc2/rc2test.c Thu Mar  2 21:11:59 2000
@@ -72,7 +72,7 @@
 #else
 #include <openssl/rc2.h>
 
-unsigned char RC2key[4][16]={
+static unsigned char RC2key[4][16]={
        {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
         0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
        {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
@@ -83,14 +83,14 @@
         0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F},
        };
 
-unsigned char RC2plain[4][8]={
+static unsigned char RC2plain[4][8]={
        {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
        {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
        {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},
        {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
        };
 
-unsigned char RC2cipher[4][8]={
+static unsigned char RC2cipher[4][8]={
        {0x1C,0x19,0x8A,0x83,0x8D,0xF0,0x28,0xB7},
        {0x21,0x82,0x9C,0x78,0xA9,0xF9,0xC0,0x74},
        {0x13,0xDB,0x35,0x17,0xD3,0x21,0x86,0x9E},
Index: opensa/openssl/crypto/rc4/rc4.h
diff -u opensa/openssl/crypto/rc4/rc4.h:1.1 opensa/openssl/crypto/rc4/rc4.h:1.2
--- opensa/openssl/crypto/rc4/rc4.h:1.1 Tue Jan 25 23:24:15 2000
+++ opensa/openssl/crypto/rc4/rc4.h     Thu Mar  2 21:11:59 2000
@@ -77,8 +77,8 @@
 
  
 const char *RC4_options(void);
-void RC4_set_key(RC4_KEY *key, int len, unsigned char *data);
-void RC4(RC4_KEY *key, unsigned long len, unsigned char *indata,
+void RC4_set_key(RC4_KEY *key, int len, const unsigned char *data);
+void RC4(RC4_KEY *key, unsigned long len, const unsigned char *indata,
                unsigned char *outdata);
 
 #ifdef  __cplusplus
Index: opensa/openssl/crypto/rc4/rc4_enc.c
diff -u opensa/openssl/crypto/rc4/rc4_enc.c:1.1 opensa/openssl/crypto/rc4/rc4_enc.c:1.2
--- opensa/openssl/crypto/rc4/rc4_enc.c:1.1     Tue Jan 25 23:24:15 2000
+++ opensa/openssl/crypto/rc4/rc4_enc.c Thu Mar  2 21:11:59 2000
@@ -67,7 +67,7 @@
  * Date: Wed, 14 Sep 1994 06:35:31 GMT
  */
 
-void RC4(RC4_KEY *key, unsigned long len, unsigned char *indata,
+void RC4(RC4_KEY *key, unsigned long len, const unsigned char *indata,
             unsigned char *outdata)
        {
         register RC4_INT *d;
@@ -78,6 +78,190 @@
         y=key->y;     
         d=key->data; 
 
+#if defined(RC4_CHUNK)
+       /*
+        * The original reason for implementing this(*) was the fact that
+        * pre-21164a Alpha CPUs don't have byte load/store instructions
+        * and e.g. a byte store has to be done with 64-bit load, shift,
+        * and, or and finally 64-bit store. Peaking data and operating
+        * at natural word size made it possible to reduce amount of
+        * instructions as well as to perform early read-ahead without
+        * suffering from RAW (read-after-write) hazard. This resulted
+        * in ~40%(**) performance improvement on 21064 box with gcc.
+        * But it's not only Alpha users who win here:-) Thanks to the
+        * early-n-wide read-ahead this implementation also exhibits
+        * >40% speed-up on SPARC and 20-30% on 64-bit MIPS (depending
+        * on sizeof(RC4_INT)).
+        *
+        * (*)  "this" means code which recognizes the case when input
+        *      and output pointers appear to be aligned at natural CPU
+        *      word boundary
+        * (**) i.e. according to 'apps/openssl speed rc4' benchmark,
+        *      crypto/rc4/rc4speed.c exhibits almost 70% speed-up...
+        *
+        * Cavets.
+        *
+        * - RC4_CHUNK="unsigned long long" should be a #1 choice for
+        *   UltraSPARC. Unfortunately gcc generates very slow code
+        *   (2.5-3 times slower than one generated by Sun's WorkShop
+        *   C) and therefore gcc (at least 2.95 and earlier) should
+        *   always be told that RC4_CHUNK="unsigned long".
+        *
+        *                                      <[EMAIL PROTECTED]>
+        */
+
+# define RC4_STEP      ( \
+                       x=(x+1) &0xff,  \
+                       tx=d[x],        \
+                       y=(tx+y)&0xff,  \
+                       ty=d[y],        \
+                       d[y]=tx,        \
+                       d[x]=ty,        \
+                       (RC4_CHUNK)d[(tx+ty)&0xff]\
+                       )
+
+       if ( ( ((unsigned long)indata  & (sizeof(RC4_CHUNK)-1)) | 
+              ((unsigned long)outdata & (sizeof(RC4_CHUNK)-1)) ) == 0 )
+               {
+               RC4_CHUNK ichunk,otp;
+               const union { long one; char little; } is_endian = {1};
+
+               /*
+                * I reckon we can afford to implement both endian
+                * cases and to decide which way to take at run-time
+                * because the machine code appears to be very compact
+                * and redundant 1-2KB is perfectly tolerable (i.e.
+                * in case the compiler fails to eliminate it:-). By
+                * suggestion from Terrel Larson <[EMAIL PROTECTED]>
+                * who also stands for the is_endian union:-)
+                *
+                * Special notes.
+                *
+                * - is_endian is declared automatic as doing otherwise
+                *   (declaring static) prevents gcc from eliminating
+                *   the redundant code;
+                * - compilers (those I've tried) don't seem to have
+                *   problems eliminating either the operators guarded
+                *   by "if (sizeof(RC4_CHUNK)==8)" or the condition
+                *   expressions themselves so I've got 'em to replace
+                *   corresponding #ifdefs from the previous version;
+                * - I chose to let the redundant switch cases when
+                *   sizeof(RC4_CHUNK)!=8 be (were also #ifdefed
+                *   before);
+                * - in case you wonder "&(sizeof(RC4_CHUNK)*8-1)" in
+                *   [LB]ESHFT guards against "shift is out of range"
+                *   warnings when sizeof(RC4_CHUNK)!=8 
+                *
+                *                      <[EMAIL PROTECTED]>
+                */
+               if (!is_endian.little)
+                       {       /* BIG-ENDIAN CASE */
+# define BESHFT(c)     (((sizeof(RC4_CHUNK)-(c)-1)*8)&(sizeof(RC4_CHUNK)*8-1))
+                       for (;len&-sizeof(RC4_CHUNK);len-=sizeof(RC4_CHUNK))
+                               {
+                               ichunk  = *(RC4_CHUNK *)indata;
+                               otp  = RC4_STEP<<BESHFT(0);
+                               otp |= RC4_STEP<<BESHFT(1);
+                               otp |= RC4_STEP<<BESHFT(2);
+                               otp |= RC4_STEP<<BESHFT(3);
+                               if (sizeof(RC4_CHUNK)==8)
+                                       {
+                                       otp |= RC4_STEP<<BESHFT(4);
+                                       otp |= RC4_STEP<<BESHFT(5);
+                                       otp |= RC4_STEP<<BESHFT(6);
+                                       otp |= RC4_STEP<<BESHFT(7);
+                                       }
+                               *(RC4_CHUNK *)outdata = otp^ichunk;
+                               indata  += sizeof(RC4_CHUNK);
+                               outdata += sizeof(RC4_CHUNK);
+                               }
+                       if (len)
+                               {
+                               RC4_CHUNK mask=(RC4_CHUNK)-1, ochunk;
+
+                               ichunk = *(RC4_CHUNK *)indata;
+                               ochunk = *(RC4_CHUNK *)outdata;
+                               otp = 0;
+                               i = BESHFT(0);
+                               mask <<= (sizeof(RC4_CHUNK)-len)<<3;
+                               switch (len&(sizeof(RC4_CHUNK)-1))
+                                       {
+                                       case 7: otp  = RC4_STEP<<i, i-=8;
+                                       case 6: otp |= RC4_STEP<<i, i-=8;
+                                       case 5: otp |= RC4_STEP<<i, i-=8;
+                                       case 4: otp |= RC4_STEP<<i, i-=8;
+                                       case 3: otp |= RC4_STEP<<i, i-=8;
+                                       case 2: otp |= RC4_STEP<<i, i-=8;
+                                       case 1: otp |= RC4_STEP<<i, i-=8;
+                                       case 0: ; /*
+                                                  * it's never the case,
+                                                  * but it has to be here
+                                                  * for ultrix?
+                                                  */
+                                       }
+                               ochunk &= ~mask;
+                               ochunk |= (otp^ichunk) & mask;
+                               *(RC4_CHUNK *)outdata = ochunk;
+                               }
+                       key->x=x;     
+                       key->y=y;
+                       return;
+                       }
+               else
+                       {       /* LITTLE-ENDIAN CASE */
+# define LESHFT(c)     (((c)*8)&(sizeof(RC4_CHUNK)*8-1))
+                       for (;len&-sizeof(RC4_CHUNK);len-=sizeof(RC4_CHUNK))
+                               {
+                               ichunk  = *(RC4_CHUNK *)indata;
+                               otp  = RC4_STEP;
+                               otp |= RC4_STEP<<8;
+                               otp |= RC4_STEP<<16;
+                               otp |= RC4_STEP<<24;
+                               if (sizeof(RC4_CHUNK)==8)
+                                       {
+                                       otp |= RC4_STEP<<LESHFT(4);
+                                       otp |= RC4_STEP<<LESHFT(5);
+                                       otp |= RC4_STEP<<LESHFT(6);
+                                       otp |= RC4_STEP<<LESHFT(7);
+                                       }
+                               *(RC4_CHUNK *)outdata = otp^ichunk;
+                               indata  += sizeof(RC4_CHUNK);
+                               outdata += sizeof(RC4_CHUNK);
+                               }
+                       if (len)
+                               {
+                               RC4_CHUNK mask=(RC4_CHUNK)-1, ochunk;
+
+                               ichunk = *(RC4_CHUNK *)indata;
+                               ochunk = *(RC4_CHUNK *)outdata;
+                               otp = 0;
+                               i   = 0;
+                               mask >>= (sizeof(RC4_CHUNK)-len)<<3;
+                               switch (len&(sizeof(RC4_CHUNK)-1))
+                                       {
+                                       case 7: otp  = RC4_STEP,    i+=8;
+                                       case 6: otp |= RC4_STEP<<i, i+=8;
+                                       case 5: otp |= RC4_STEP<<i, i+=8;
+                                       case 4: otp |= RC4_STEP<<i, i+=8;
+                                       case 3: otp |= RC4_STEP<<i, i+=8;
+                                       case 2: otp |= RC4_STEP<<i, i+=8;
+                                       case 1: otp |= RC4_STEP<<i, i+=8;
+                                       case 0: ; /*
+                                                  * it's never the case,
+                                                  * but it has to be here
+                                                  * for ultrix?
+                                                  */
+                                       }
+                               ochunk &= ~mask;
+                               ochunk |= (otp^ichunk) & mask;
+                               *(RC4_CHUNK *)outdata = ochunk;
+                               }
+                       key->x=x;     
+                       key->y=y;
+                       return;
+                       }
+               }
+#endif
 #define LOOP(in,out) \
                x=((x+1)&0xff); \
                tx=d[x]; \
Index: opensa/openssl/crypto/rc4/rc4_skey.c
diff -u opensa/openssl/crypto/rc4/rc4_skey.c:1.1 
opensa/openssl/crypto/rc4/rc4_skey.c:1.2
--- opensa/openssl/crypto/rc4/rc4_skey.c:1.1    Tue Jan 25 23:24:15 2000
+++ opensa/openssl/crypto/rc4/rc4_skey.c        Thu Mar  2 21:11:59 2000
@@ -85,7 +85,7 @@
  * Date: Wed, 14 Sep 1994 06:35:31 GMT
  */
 
-void RC4_set_key(RC4_KEY *key, int len, register unsigned char *data)
+void RC4_set_key(RC4_KEY *key, int len, const unsigned char *data)
        {
         register RC4_INT tmp;
         register int id1,id2;
Index: opensa/openssl/crypto/rc4/rc4speed.c
diff -u opensa/openssl/crypto/rc4/rc4speed.c:1.1 
opensa/openssl/crypto/rc4/rc4speed.c:1.2
--- opensa/openssl/crypto/rc4/rc4speed.c:1.1    Tue Jan 25 23:24:15 2000
+++ opensa/openssl/crypto/rc4/rc4speed.c        Thu Mar  2 21:11:59 2000
@@ -183,7 +183,7 @@
 #endif
 
 #ifndef TIMES
-       printf("To get the most acurate results, try to run this\n");
+       printf("To get the most accurate results, try to run this\n");
        printf("program when this computer is idle.\n");
 #endif
 
Index: opensa/openssl/crypto/rc4/rc4test.c
diff -u opensa/openssl/crypto/rc4/rc4test.c:1.1 opensa/openssl/crypto/rc4/rc4test.c:1.2
--- opensa/openssl/crypto/rc4/rc4test.c:1.1     Tue Jan 25 23:24:15 2000
+++ opensa/openssl/crypto/rc4/rc4test.c Thu Mar  2 21:11:59 2000
@@ -69,7 +69,7 @@
 #else
 #include <openssl/rc4.h>
 
-unsigned char keys[7][30]={
+static unsigned char keys[7][30]={
        {8,0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef},
        {8,0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef},
        {8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
@@ -78,8 +78,8 @@
        {4,0xef,0x01,0x23,0x45},
        };
 
-unsigned char data_len[7]={8,8,8,20,28,10};
-unsigned char data[7][30]={
+static unsigned char data_len[7]={8,8,8,20,28,10};
+static unsigned char data[7][30]={
        {0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef,0xff},
        {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff},
        {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff},
@@ -94,7 +94,7 @@
        {0},
        };
 
-unsigned char output[7][30]={
+static unsigned char output[7][30]={
        {0x75,0xb7,0x87,0x80,0x99,0xe0,0xc5,0x96,0x00},
        {0x74,0x94,0xc2,0xe7,0x10,0x4b,0x08,0x79,0x00},
        {0xde,0x18,0x89,0x41,0xa3,0x37,0x5d,0x3a,0x00},
Index: opensa/openssl/crypto/rc5/rc5speed.c
diff -u opensa/openssl/crypto/rc5/rc5speed.c:1.1 
opensa/openssl/crypto/rc5/rc5speed.c:1.2
--- opensa/openssl/crypto/rc5/rc5speed.c:1.1    Tue Jan 25 23:23:54 2000
+++ opensa/openssl/crypto/rc5/rc5speed.c        Thu Mar  2 21:11:59 2000
@@ -183,7 +183,7 @@
 #endif
 
 #ifndef TIMES
-       printf("To get the most acurate results, try to run this\n");
+       printf("To get the most accurate results, try to run this\n");
        printf("program when this computer is idle.\n");
 #endif
 
Index: opensa/openssl/crypto/rc5/rc5test.c
diff -u opensa/openssl/crypto/rc5/rc5test.c:1.1 opensa/openssl/crypto/rc5/rc5test.c:1.2
--- opensa/openssl/crypto/rc5/rc5test.c:1.1     Tue Jan 25 23:23:54 2000
+++ opensa/openssl/crypto/rc5/rc5test.c Thu Mar  2 21:11:59 2000
@@ -72,7 +72,7 @@
 #else
 #include <openssl/rc5.h>
 
-unsigned char RC5key[5][16]={
+static unsigned char RC5key[5][16]={
        {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
         0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
        {0x91,0x5f,0x46,0x19,0xbe,0x41,0xb2,0x51,
@@ -85,7 +85,7 @@
         0x24,0x97,0x57,0x4d,0x7f,0x15,0x31,0x25},
        };
 
-unsigned char RC5plain[5][8]={
+static unsigned char RC5plain[5][8]={
        {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
        {0x21,0xA5,0xDB,0xEE,0x15,0x4B,0x8F,0x6D},
        {0xF7,0xC0,0x13,0xAC,0x5B,0x2B,0x89,0x52},
@@ -93,7 +93,7 @@
        {0x65,0xC1,0x78,0xB2,0x84,0xD1,0x97,0xCC},
        };
 
-unsigned char RC5cipher[5][8]={
+static unsigned char RC5cipher[5][8]={
        {0x21,0xA5,0xDB,0xEE,0x15,0x4B,0x8F,0x6D},
        {0xF7,0xC0,0x13,0xAC,0x5B,0x2B,0x89,0x52},
        {0x2F,0x42,0xB3,0xB7,0x03,0x69,0xFC,0x92},
@@ -102,7 +102,7 @@
        };
 
 #define RC5_CBC_NUM 27
-unsigned char rc5_cbc_cipher[RC5_CBC_NUM][8]={
+static unsigned char rc5_cbc_cipher[RC5_CBC_NUM][8]={
        {0x7a,0x7b,0xba,0x4d,0x79,0x11,0x1d,0x1e},
        {0x79,0x7b,0xba,0x4d,0x78,0x11,0x1d,0x1e},
        {0x7a,0x7b,0xba,0x4d,0x79,0x11,0x1d,0x1f},
@@ -132,7 +132,7 @@
        {0x7f,0xd1,0xa0,0x23,0xa5,0xbb,0xa2,0x17},
        };
 
-unsigned char rc5_cbc_key[RC5_CBC_NUM][17]={
+static unsigned char rc5_cbc_key[RC5_CBC_NUM][17]={
        { 1,0x00},
        { 1,0x00},
        { 1,0x00},
@@ -165,7 +165,7 @@
        { 5,0x01,0x02,0x03,0x04,0x05},
        };
 
-unsigned char rc5_cbc_plain[RC5_CBC_NUM][8]={
+static unsigned char rc5_cbc_plain[RC5_CBC_NUM][8]={
        {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
        {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff},
        {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
@@ -195,14 +195,14 @@
        {0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x01},
        };
 
-int rc5_cbc_rounds[RC5_CBC_NUM]={
+static int rc5_cbc_rounds[RC5_CBC_NUM]={
         0, 0, 0, 0, 0, 1, 2, 2,
         8, 8,12,16, 8,12,16,12,
         8,12,16, 8,12,16,12, 8,
         8, 8, 8,
        };
 
-unsigned char rc5_cbc_iv[RC5_CBC_NUM][8]={
+static unsigned char rc5_cbc_iv[RC5_CBC_NUM][8]={
        {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
        {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
        {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01},
Index: opensa/openssl/crypto/ripemd/makefile.ssl
diff -u opensa/openssl/crypto/ripemd/makefile.ssl:1.1 
opensa/openssl/crypto/ripemd/makefile.ssl:1.2
--- opensa/openssl/crypto/ripemd/makefile.ssl:1.1       Tue Jan 25 23:23:11 2000
+++ opensa/openssl/crypto/ripemd/makefile.ssl   Thu Mar  2 21:11:59 2000
@@ -102,6 +102,7 @@
 
 # DO NOT DELETE THIS LINE -- make depend depends on it.
 
+rmd_dgst.o: ../../include/openssl/opensslconf.h
 rmd_dgst.o: ../../include/openssl/opensslv.h ../../include/openssl/ripemd.h
-rmd_dgst.o: rmd_locl.h rmdconst.h
-rmd_one.o: ../../include/openssl/ripemd.h rmd_locl.h rmdconst.h
+rmd_dgst.o: ../md32_common.h rmd_locl.h rmdconst.h
+rmd_one.o: ../../include/openssl/ripemd.h
Index: opensa/openssl/crypto/ripemd/ripemd.h
diff -u opensa/openssl/crypto/ripemd/ripemd.h:1.1 
opensa/openssl/crypto/ripemd/ripemd.h:1.2
--- opensa/openssl/crypto/ripemd/ripemd.h:1.1   Tue Jan 25 23:23:11 2000
+++ opensa/openssl/crypto/ripemd/ripemd.h       Thu Mar  2 21:11:59 2000
@@ -67,26 +67,33 @@
 #error RIPEMD is disabled.
 #endif
 
+#if defined(WIN16) || defined(__LP32__)
+#define RIPEMD160_LONG unsigned long
+#elif defined(_CRAY) || defined(__ILP64__)
+#define RIPEMD160_LONG unsigned long
+#define RIPEMD160_LONG_LOG2 3
+#else
+#define RIPEMD160_LONG unsigned int
+#endif
+
 #define RIPEMD160_CBLOCK       64
-#define RIPEMD160_LBLOCK       16
-#define RIPEMD160_BLOCK                16
-#define RIPEMD160_LAST_BLOCK   56
-#define RIPEMD160_LENGTH_BLOCK 8
+#define RIPEMD160_LBLOCK       (RIPEMD160_CBLOCK/4)
 #define RIPEMD160_DIGEST_LENGTH        20
 
 typedef struct RIPEMD160state_st
        {
-       unsigned long A,B,C,D,E;
-       unsigned long Nl,Nh;
-       unsigned long data[RIPEMD160_LBLOCK];
+       RIPEMD160_LONG A,B,C,D,E;
+       RIPEMD160_LONG Nl,Nh;
+       RIPEMD160_LONG data[RIPEMD160_LBLOCK];
        int num;
        } RIPEMD160_CTX;
 
 void RIPEMD160_Init(RIPEMD160_CTX *c);
-void RIPEMD160_Update(RIPEMD160_CTX *c, unsigned char *data, unsigned long len);
+void RIPEMD160_Update(RIPEMD160_CTX *c, const void *data, unsigned long len);
 void RIPEMD160_Final(unsigned char *md, RIPEMD160_CTX *c);
-unsigned char *RIPEMD160(unsigned char *d, unsigned long n, unsigned char *md);
-void RIPEMD160_Transform(RIPEMD160_CTX *c, unsigned char *b);
+unsigned char *RIPEMD160(const unsigned char *d, unsigned long n,
+       unsigned char *md);
+void RIPEMD160_Transform(RIPEMD160_CTX *c, const unsigned char *b);
 #ifdef  __cplusplus
 }
 #endif
Index: opensa/openssl/crypto/ripemd/rmd_dgst.c
diff -u opensa/openssl/crypto/ripemd/rmd_dgst.c:1.1 
opensa/openssl/crypto/ripemd/rmd_dgst.c:1.2
--- opensa/openssl/crypto/ripemd/rmd_dgst.c:1.1 Tue Jan 25 23:23:11 2000
+++ opensa/openssl/crypto/ripemd/rmd_dgst.c     Thu Mar  2 21:11:59 2000
@@ -60,7 +60,7 @@
 #include "rmd_locl.h"
 #include <openssl/opensslv.h>
 
-char *RMD160_version="RIPE-MD160" OPENSSL_VERSION_PTEXT;
+const char *RMD160_version="RIPE-MD160" OPENSSL_VERSION_PTEXT;
 
 #  ifdef RMD160_ASM
      void ripemd160_block_x86(RIPEMD160_CTX *c, unsigned long *p,int num);
@@ -68,6 +68,7 @@
 #  else
      void ripemd160_block(RIPEMD160_CTX *c, unsigned long *p,int num);
 #  endif
+
 void RIPEMD160_Init(RIPEMD160_CTX *c)
        {
        c->A=RIPEMD160_A;
@@ -79,181 +80,22 @@
        c->Nh=0;
        c->num=0;
        }
-
-void RIPEMD160_Update(RIPEMD160_CTX *c, register unsigned char *data,
-            unsigned long len)
-       {
-       register ULONG *p;
-       int sw,sc;
-       ULONG l;
-
-       if (len == 0) return;
-
-       l=(c->Nl+(len<<3))&0xffffffffL;
-       if (l < c->Nl) /* overflow */
-               c->Nh++;
-       c->Nh+=(len>>29);
-       c->Nl=l;
 
-       if (c->num != 0)
-               {
-               p=c->data;
-               sw=c->num>>2;
-               sc=c->num&0x03;
-
-               if ((c->num+len) >= RIPEMD160_CBLOCK)
-                       {
-                       l= p[sw];
-                       p_c2l(data,l,sc);
-                       p[sw++]=l;
-                       for (; sw<RIPEMD160_LBLOCK; sw++)
-                               {
-                               c2l(data,l);
-                               p[sw]=l;
-                               }
-                       len-=(RIPEMD160_CBLOCK-c->num);
-
-                       ripemd160_block(c,p,64);
-                       c->num=0;
-                       /* drop through and do the rest */
-                       }
-               else
-                       {
-                       int ew,ec;
-
-                       c->num+=(int)len;
-                       if ((sc+len) < 4) /* ugly, add char's to a word */
-                               {
-                               l= p[sw];
-                               p_c2l_p(data,l,sc,len);
-                               p[sw]=l;
-                               }
-                       else
-                               {
-                               ew=(c->num>>2);
-                               ec=(c->num&0x03);
-                               l= p[sw];
-                               p_c2l(data,l,sc);
-                               p[sw++]=l;
-                               for (; sw < ew; sw++)
-                                       { c2l(data,l); p[sw]=l; }
-                               if (ec)
-                                       {
-                                       c2l_p(data,l,ec);
-                                       p[sw]=l;
-                                       }
-                               }
-                       return;
-                       }
-               }
-       /* we now can process the input data in blocks of RIPEMD160_CBLOCK
-        * chars and save the leftovers to c->data. */
-#ifdef L_ENDIAN
-       if ((((unsigned long)data)%sizeof(ULONG)) == 0)
-               {
-               sw=(int)len/RIPEMD160_CBLOCK;
-               if (sw > 0)
-                       {
-                       sw*=RIPEMD160_CBLOCK;
-                       ripemd160_block(c,(ULONG *)data,sw);
-                       data+=sw;
-                       len-=sw;
-                       }
-               }
-#endif
-       p=c->data;
-       while (len >= RIPEMD160_CBLOCK)
-               {
-#if defined(L_ENDIAN) || defined(B_ENDIAN)
-               if (p != (unsigned long *)data)
-                       memcpy(p,data,RIPEMD160_CBLOCK);
-               data+=RIPEMD160_CBLOCK;
-#ifdef B_ENDIAN
-               for (sw=(RIPEMD160_LBLOCK/4); sw; sw--)
-                       {
-                       Endian_Reverse32(p[0]);
-                       Endian_Reverse32(p[1]);
-                       Endian_Reverse32(p[2]);
-                       Endian_Reverse32(p[3]);
-                       p+=4;
-                       }
-#endif
-#else
-               for (sw=(RIPEMD160_LBLOCK/4); sw; sw--)
-                       {
-                       c2l(data,l); *(p++)=l;
-                       c2l(data,l); *(p++)=l;
-                       c2l(data,l); *(p++)=l;
-                       c2l(data,l); *(p++)=l; 
-                       } 
-#endif
-               p=c->data;
-               ripemd160_block(c,p,64);
-               len-=RIPEMD160_CBLOCK;
-               }
-       sc=(int)len;
-       c->num=sc;
-       if (sc)
-               {
-               sw=sc>>2;       /* words to copy */
-#ifdef L_ENDIAN
-               p[sw]=0;
-               memcpy(p,data,sc);
-#else
-               sc&=0x03;
-               for ( ; sw; sw--)
-                       { c2l(data,l); *(p++)=l; }
-               c2l_p(data,l,sc);
-               *p=l;
+#ifndef ripemd160_block_host_order
+#ifdef X
+#undef X
 #endif
-               }
-       }
-
-void RIPEMD160_Transform(RIPEMD160_CTX *c, unsigned char *b)
+#define X(i)   XX[i]
+void ripemd160_block_host_order (RIPEMD160_CTX *ctx, const void *p, int num)
        {
-       ULONG p[16];
-#if !defined(L_ENDIAN)
-       ULONG *q;
-       int i;
-#endif
+       const RIPEMD160_LONG *XX=p;
+       register unsigned long A,B,C,D,E;
+       register unsigned long a,b,c,d,e;
 
-#if defined(B_ENDIAN) || defined(L_ENDIAN)
-       memcpy(p,b,64);
-#ifdef B_ENDIAN
-       q=p;
-       for (i=(RIPEMD160_LBLOCK/4); i; i--)
+       for (;num--;XX+=HASH_LBLOCK)
                {
-               Endian_Reverse32(q[0]);
-               Endian_Reverse32(q[1]);
-               Endian_Reverse32(q[2]);
-               Endian_Reverse32(q[3]);
-               q+=4;
-               }
-#endif
-#else
-       q=p;
-       for (i=(RIPEMD160_LBLOCK/4); i; i--)
-               {
-               ULONG l;
-               c2l(b,l); *(q++)=l;
-               c2l(b,l); *(q++)=l;
-               c2l(b,l); *(q++)=l;
-               c2l(b,l); *(q++)=l; 
-               } 
-#endif
-       ripemd160_block(c,p,64);
-       }
-
-#ifndef RMD160_ASM
 
-void ripemd160_block(RIPEMD160_CTX *ctx, register ULONG *X, int num)
-       {
-       register ULONG A,B,C,D,E;
-       ULONG a,b,c,d,e;
-
-       for (;;)
-               {
-               A=ctx->A; B=ctx->B; C=ctx->C; D=ctx->D; E=ctx->E;
+       A=ctx->A; B=ctx->B; C=ctx->C; D=ctx->D; E=ctx->E;
 
        RIP1(A,B,C,D,E,WL00,SL00);
        RIP1(E,A,B,C,D,WL01,SL01);
@@ -436,80 +278,216 @@
        ctx->E=ctx->A+b+C;
        ctx->A=D;
 
-       X+=16;
-       num-=64;
-       if (num <= 0) break;
                }
        }
 #endif
 
-void RIPEMD160_Final(unsigned char *md, RIPEMD160_CTX *c)
+#ifndef ripemd160_block_data_order
+#ifdef X
+#undef X
+#endif
+void ripemd160_block_data_order (RIPEMD160_CTX *ctx, const void *p, int num)
        {
-       register int i,j;
-       register ULONG l;
-       register ULONG *p;
-       static unsigned char end[4]={0x80,0x00,0x00,0x00};
-       unsigned char *cp=end;
-
-       /* c->num should definitly have room for at least one more byte. */
-       p=c->data;
-       j=c->num;
-       i=j>>2;
-
-       /* purify often complains about the following line as an
-        * Uninitialized Memory Read.  While this can be true, the
-        * following p_c2l macro will reset l when that case is true.
-        * This is because j&0x03 contains the number of 'valid' bytes
-        * already in p[i].  If and only if j&0x03 == 0, the UMR will
-        * occur but this is also the only time p_c2l will do
-        * l= *(cp++) instead of l|= *(cp++)
-        * Many thanks to Alex Tang <[EMAIL PROTECTED]> for pickup this
-        * 'potential bug' */
-#ifdef PURIFY
-       if ((j&0x03) == 0) p[i]=0;
+       const unsigned char *data=p;
+       register unsigned long A,B,C,D,E;
+       unsigned long a,b,c,d,e,l;
+#ifndef MD32_XARRAY
+       /* See comment in crypto/sha/sha_locl.h for details. */
+       unsigned long   XX0, XX1, XX2, XX3, XX4, XX5, XX6, XX7,
+                       XX8, XX9,XX10,XX11,XX12,XX13,XX14,XX15;
+# define X(i)  XX##i
+#else
+       RIPEMD160_LONG  XX[16];
+# define X(i)  XX[i]
 #endif
-       l=p[i];
-       p_c2l(cp,l,j&0x03);
-       p[i]=l;
-       i++;
-       /* i is the next 'undefined word' */
-       if (c->num >= RIPEMD160_LAST_BLOCK)
+
+       for (;num--;)
                {
-               for (; i<RIPEMD160_LBLOCK; i++)
-                       p[i]=0;
-               ripemd160_block(c,p,64);
-               i=0;
-               }
-       for (; i<(RIPEMD160_LBLOCK-2); i++)
-               p[i]=0;
-       p[RIPEMD160_LBLOCK-2]=c->Nl;
-       p[RIPEMD160_LBLOCK-1]=c->Nh;
-       ripemd160_block(c,p,64);
-       cp=md;
-       l=c->A; l2c(l,cp);
-       l=c->B; l2c(l,cp);
-       l=c->C; l2c(l,cp);
-       l=c->D; l2c(l,cp);
-       l=c->E; l2c(l,cp);
 
-       /* clear stuff, ripemd160_block may be leaving some stuff on the stack
-        * but I'm not worried :-) */
-       c->num=0;
-/*     memset((char *)&c,0,sizeof(c));*/
-       }
+       A=ctx->A; B=ctx->B; C=ctx->C; D=ctx->D; E=ctx->E;
 
-#ifdef undef
-int printit(unsigned long *l)
-       {
-       int i,ii;
+       HOST_c2l(data,l); X( 0)=l;      HOST_c2l(data,l); X( 1)=l;
+       RIP1(A,B,C,D,E,WL00,SL00);      HOST_c2l(data,l); X( 2)=l;
+       RIP1(E,A,B,C,D,WL01,SL01);      HOST_c2l(data,l); X( 3)=l;
+       RIP1(D,E,A,B,C,WL02,SL02);      HOST_c2l(data,l); X( 4)=l;
+       RIP1(C,D,E,A,B,WL03,SL03);      HOST_c2l(data,l); X( 5)=l;
+       RIP1(B,C,D,E,A,WL04,SL04);      HOST_c2l(data,l); X( 6)=l;
+       RIP1(A,B,C,D,E,WL05,SL05);      HOST_c2l(data,l); X( 7)=l;
+       RIP1(E,A,B,C,D,WL06,SL06);      HOST_c2l(data,l); X( 8)=l;
+       RIP1(D,E,A,B,C,WL07,SL07);      HOST_c2l(data,l); X( 9)=l;
+       RIP1(C,D,E,A,B,WL08,SL08);      HOST_c2l(data,l); X(10)=l;
+       RIP1(B,C,D,E,A,WL09,SL09);      HOST_c2l(data,l); X(11)=l;
+       RIP1(A,B,C,D,E,WL10,SL10);      HOST_c2l(data,l); X(12)=l;
+       RIP1(E,A,B,C,D,WL11,SL11);      HOST_c2l(data,l); X(13)=l;
+       RIP1(D,E,A,B,C,WL12,SL12);      HOST_c2l(data,l); X(14)=l;
+       RIP1(C,D,E,A,B,WL13,SL13);      HOST_c2l(data,l); X(15)=l;
+       RIP1(B,C,D,E,A,WL14,SL14);
+       RIP1(A,B,C,D,E,WL15,SL15);
 
-       for (i=0; i<2; i++)
-               {
-               for (ii=0; ii<8; ii++)
-                       {
-                       fprintf(stderr,"%08lx ",l[i*8+ii]);
-                       }
-               fprintf(stderr,"\n");
+       RIP2(E,A,B,C,D,WL16,SL16,KL1);
+       RIP2(D,E,A,B,C,WL17,SL17,KL1);
+       RIP2(C,D,E,A,B,WL18,SL18,KL1);
+       RIP2(B,C,D,E,A,WL19,SL19,KL1);
+       RIP2(A,B,C,D,E,WL20,SL20,KL1);
+       RIP2(E,A,B,C,D,WL21,SL21,KL1);
+       RIP2(D,E,A,B,C,WL22,SL22,KL1);
+       RIP2(C,D,E,A,B,WL23,SL23,KL1);
+       RIP2(B,C,D,E,A,WL24,SL24,KL1);
+       RIP2(A,B,C,D,E,WL25,SL25,KL1);
+       RIP2(E,A,B,C,D,WL26,SL26,KL1);
+       RIP2(D,E,A,B,C,WL27,SL27,KL1);
+       RIP2(C,D,E,A,B,WL28,SL28,KL1);
+       RIP2(B,C,D,E,A,WL29,SL29,KL1);
+       RIP2(A,B,C,D,E,WL30,SL30,KL1);
+       RIP2(E,A,B,C,D,WL31,SL31,KL1);
+
+       RIP3(D,E,A,B,C,WL32,SL32,KL2);
+       RIP3(C,D,E,A,B,WL33,SL33,KL2);
+       RIP3(B,C,D,E,A,WL34,SL34,KL2);
+       RIP3(A,B,C,D,E,WL35,SL35,KL2);
+       RIP3(E,A,B,C,D,WL36,SL36,KL2);
+       RIP3(D,E,A,B,C,WL37,SL37,KL2);
+       RIP3(C,D,E,A,B,WL38,SL38,KL2);
+       RIP3(B,C,D,E,A,WL39,SL39,KL2);
+       RIP3(A,B,C,D,E,WL40,SL40,KL2);
+       RIP3(E,A,B,C,D,WL41,SL41,KL2);
+       RIP3(D,E,A,B,C,WL42,SL42,KL2);
+       RIP3(C,D,E,A,B,WL43,SL43,KL2);
+       RIP3(B,C,D,E,A,WL44,SL44,KL2);
+       RIP3(A,B,C,D,E,WL45,SL45,KL2);
+       RIP3(E,A,B,C,D,WL46,SL46,KL2);
+       RIP3(D,E,A,B,C,WL47,SL47,KL2);
+
+       RIP4(C,D,E,A,B,WL48,SL48,KL3);
+       RIP4(B,C,D,E,A,WL49,SL49,KL3);
+       RIP4(A,B,C,D,E,WL50,SL50,KL3);
+       RIP4(E,A,B,C,D,WL51,SL51,KL3);
+       RIP4(D,E,A,B,C,WL52,SL52,KL3);
+       RIP4(C,D,E,A,B,WL53,SL53,KL3);
+       RIP4(B,C,D,E,A,WL54,SL54,KL3);
+       RIP4(A,B,C,D,E,WL55,SL55,KL3);
+       RIP4(E,A,B,C,D,WL56,SL56,KL3);
+       RIP4(D,E,A,B,C,WL57,SL57,KL3);
+       RIP4(C,D,E,A,B,WL58,SL58,KL3);
+       RIP4(B,C,D,E,A,WL59,SL59,KL3);
+       RIP4(A,B,C,D,E,WL60,SL60,KL3);
+       RIP4(E,A,B,C,D,WL61,SL61,KL3);
+       RIP4(D,E,A,B,C,WL62,SL62,KL3);
+       RIP4(C,D,E,A,B,WL63,SL63,KL3);
+
+       RIP5(B,C,D,E,A,WL64,SL64,KL4);
+       RIP5(A,B,C,D,E,WL65,SL65,KL4);
+       RIP5(E,A,B,C,D,WL66,SL66,KL4);
+       RIP5(D,E,A,B,C,WL67,SL67,KL4);
+       RIP5(C,D,E,A,B,WL68,SL68,KL4);
+       RIP5(B,C,D,E,A,WL69,SL69,KL4);
+       RIP5(A,B,C,D,E,WL70,SL70,KL4);
+       RIP5(E,A,B,C,D,WL71,SL71,KL4);
+       RIP5(D,E,A,B,C,WL72,SL72,KL4);
+       RIP5(C,D,E,A,B,WL73,SL73,KL4);
+       RIP5(B,C,D,E,A,WL74,SL74,KL4);
+       RIP5(A,B,C,D,E,WL75,SL75,KL4);
+       RIP5(E,A,B,C,D,WL76,SL76,KL4);
+       RIP5(D,E,A,B,C,WL77,SL77,KL4);
+       RIP5(C,D,E,A,B,WL78,SL78,KL4);
+       RIP5(B,C,D,E,A,WL79,SL79,KL4);
+
+       a=A; b=B; c=C; d=D; e=E;
+       /* Do other half */
+       A=ctx->A; B=ctx->B; C=ctx->C; D=ctx->D; E=ctx->E;
+
+       RIP5(A,B,C,D,E,WR00,SR00,KR0);
+       RIP5(E,A,B,C,D,WR01,SR01,KR0);
+       RIP5(D,E,A,B,C,WR02,SR02,KR0);
+       RIP5(C,D,E,A,B,WR03,SR03,KR0);
+       RIP5(B,C,D,E,A,WR04,SR04,KR0);
+       RIP5(A,B,C,D,E,WR05,SR05,KR0);
+       RIP5(E,A,B,C,D,WR06,SR06,KR0);
+       RIP5(D,E,A,B,C,WR07,SR07,KR0);
+       RIP5(C,D,E,A,B,WR08,SR08,KR0);
+       RIP5(B,C,D,E,A,WR09,SR09,KR0);
+       RIP5(A,B,C,D,E,WR10,SR10,KR0);
+       RIP5(E,A,B,C,D,WR11,SR11,KR0);
+       RIP5(D,E,A,B,C,WR12,SR12,KR0);
+       RIP5(C,D,E,A,B,WR13,SR13,KR0);
+       RIP5(B,C,D,E,A,WR14,SR14,KR0);
+       RIP5(A,B,C,D,E,WR15,SR15,KR0);
+
+       RIP4(E,A,B,C,D,WR16,SR16,KR1);
+       RIP4(D,E,A,B,C,WR17,SR17,KR1);
+       RIP4(C,D,E,A,B,WR18,SR18,KR1);
+       RIP4(B,C,D,E,A,WR19,SR19,KR1);
+       RIP4(A,B,C,D,E,WR20,SR20,KR1);
+       RIP4(E,A,B,C,D,WR21,SR21,KR1);
+       RIP4(D,E,A,B,C,WR22,SR22,KR1);
+       RIP4(C,D,E,A,B,WR23,SR23,KR1);
+       RIP4(B,C,D,E,A,WR24,SR24,KR1);
+       RIP4(A,B,C,D,E,WR25,SR25,KR1);
+       RIP4(E,A,B,C,D,WR26,SR26,KR1);
+       RIP4(D,E,A,B,C,WR27,SR27,KR1);
+       RIP4(C,D,E,A,B,WR28,SR28,KR1);
+       RIP4(B,C,D,E,A,WR29,SR29,KR1);
+       RIP4(A,B,C,D,E,WR30,SR30,KR1);
+       RIP4(E,A,B,C,D,WR31,SR31,KR1);
+
+       RIP3(D,E,A,B,C,WR32,SR32,KR2);
+       RIP3(C,D,E,A,B,WR33,SR33,KR2);
+       RIP3(B,C,D,E,A,WR34,SR34,KR2);
+       RIP3(A,B,C,D,E,WR35,SR35,KR2);
+       RIP3(E,A,B,C,D,WR36,SR36,KR2);
+       RIP3(D,E,A,B,C,WR37,SR37,KR2);
+       RIP3(C,D,E,A,B,WR38,SR38,KR2);
+       RIP3(B,C,D,E,A,WR39,SR39,KR2);
+       RIP3(A,B,C,D,E,WR40,SR40,KR2);
+       RIP3(E,A,B,C,D,WR41,SR41,KR2);
+       RIP3(D,E,A,B,C,WR42,SR42,KR2);
+       RIP3(C,D,E,A,B,WR43,SR43,KR2);
+       RIP3(B,C,D,E,A,WR44,SR44,KR2);
+       RIP3(A,B,C,D,E,WR45,SR45,KR2);
+       RIP3(E,A,B,C,D,WR46,SR46,KR2);
+       RIP3(D,E,A,B,C,WR47,SR47,KR2);
+
+       RIP2(C,D,E,A,B,WR48,SR48,KR3);
+       RIP2(B,C,D,E,A,WR49,SR49,KR3);
+       RIP2(A,B,C,D,E,WR50,SR50,KR3);
+       RIP2(E,A,B,C,D,WR51,SR51,KR3);
+       RIP2(D,E,A,B,C,WR52,SR52,KR3);
+       RIP2(C,D,E,A,B,WR53,SR53,KR3);
+       RIP2(B,C,D,E,A,WR54,SR54,KR3);
+       RIP2(A,B,C,D,E,WR55,SR55,KR3);
+       RIP2(E,A,B,C,D,WR56,SR56,KR3);
+       RIP2(D,E,A,B,C,WR57,SR57,KR3);
+       RIP2(C,D,E,A,B,WR58,SR58,KR3);
+       RIP2(B,C,D,E,A,WR59,SR59,KR3);
+       RIP2(A,B,C,D,E,WR60,SR60,KR3);
+       RIP2(E,A,B,C,D,WR61,SR61,KR3);
+       RIP2(D,E,A,B,C,WR62,SR62,KR3);
+       RIP2(C,D,E,A,B,WR63,SR63,KR3);
+
+       RIP1(B,C,D,E,A,WR64,SR64);
+       RIP1(A,B,C,D,E,WR65,SR65);
+       RIP1(E,A,B,C,D,WR66,SR66);
+       RIP1(D,E,A,B,C,WR67,SR67);
+       RIP1(C,D,E,A,B,WR68,SR68);
+       RIP1(B,C,D,E,A,WR69,SR69);
+       RIP1(A,B,C,D,E,WR70,SR70);
+       RIP1(E,A,B,C,D,WR71,SR71);
+       RIP1(D,E,A,B,C,WR72,SR72);
+       RIP1(C,D,E,A,B,WR73,SR73);
+       RIP1(B,C,D,E,A,WR74,SR74);
+       RIP1(A,B,C,D,E,WR75,SR75);
+       RIP1(E,A,B,C,D,WR76,SR76);
+       RIP1(D,E,A,B,C,WR77,SR77);
+       RIP1(C,D,E,A,B,WR78,SR78);
+       RIP1(B,C,D,E,A,WR79,SR79);
+
+       D     =ctx->B+c+D;
+       ctx->B=ctx->C+d+E;
+       ctx->C=ctx->D+e+A;
+       ctx->D=ctx->E+a+B;
+       ctx->E=ctx->A+b+C;
+       ctx->A=D;
+
                }
        }
 #endif
Index: opensa/openssl/crypto/ripemd/rmd_locl.h
diff -u opensa/openssl/crypto/ripemd/rmd_locl.h:1.1 
opensa/openssl/crypto/ripemd/rmd_locl.h:1.2
--- opensa/openssl/crypto/ripemd/rmd_locl.h:1.1 Tue Jan 25 23:23:11 2000
+++ opensa/openssl/crypto/ripemd/rmd_locl.h     Thu Mar  2 21:11:59 2000
@@ -58,134 +58,76 @@
 
 #include <stdlib.h>
 #include <string.h>
+#include <openssl/opensslconf.h>
 #include <openssl/ripemd.h>
 
-#define ULONG  unsigned long
-#define UCHAR  unsigned char
-#define UINT   unsigned int
-
-#undef c2nl
-#define c2nl(c,l)      (l =(((unsigned long)(*((c)++)))<<24), \
-                        l|=(((unsigned long)(*((c)++)))<<16), \
-                        l|=(((unsigned long)(*((c)++)))<< 8), \
-                        l|=(((unsigned long)(*((c)++)))    ))
-
-#undef p_c2nl
-#define p_c2nl(c,l,n)  { \
-                       switch (n) { \
-                       case 0: l =((unsigned long)(*((c)++)))<<24; \
-                       case 1: l|=((unsigned long)(*((c)++)))<<16; \
-                       case 2: l|=((unsigned long)(*((c)++)))<< 8; \
-                       case 3: l|=((unsigned long)(*((c)++))); \
-                               } \
-                       }
-
-#undef c2nl_p
-/* NOTE the pointer is not incremented at the end of this */
-#define c2nl_p(c,l,n)  { \
-                       l=0; \
-                       (c)+=n; \
-                       switch (n) { \
-                       case 3: l =((unsigned long)(*(--(c))))<< 8; \
-                       case 2: l|=((unsigned long)(*(--(c))))<<16; \
-                       case 1: l|=((unsigned long)(*(--(c))))<<24; \
-                               } \
-                       }
-
-#undef p_c2nl_p
-#define p_c2nl_p(c,l,sc,len) { \
-                       switch (sc) \
-                               { \
-                       case 0: l =((unsigned long)(*((c)++)))<<24; \
-                               if (--len == 0) break; \
-                       case 1: l|=((unsigned long)(*((c)++)))<<16; \
-                               if (--len == 0) break; \
-                       case 2: l|=((unsigned long)(*((c)++)))<< 8; \
-                               } \
-                       }
-
-#undef nl2c
-#define nl2c(l,c)      (*((c)++)=(unsigned char)(((l)>>24)&0xff), \
-                        *((c)++)=(unsigned char)(((l)>>16)&0xff), \
-                        *((c)++)=(unsigned char)(((l)>> 8)&0xff), \
-                        *((c)++)=(unsigned char)(((l)    )&0xff))
-
-#undef c2l
-#define c2l(c,l)       (l =(((unsigned long)(*((c)++)))    ), \
-                        l|=(((unsigned long)(*((c)++)))<< 8), \
-                        l|=(((unsigned long)(*((c)++)))<<16), \
-                        l|=(((unsigned long)(*((c)++)))<<24))
-
-#undef p_c2l
-#define p_c2l(c,l,n)   { \
-                       switch (n) { \
-                       case 0: l =((unsigned long)(*((c)++))); \
-                       case 1: l|=((unsigned long)(*((c)++)))<< 8; \
-                       case 2: l|=((unsigned long)(*((c)++)))<<16; \
-                       case 3: l|=((unsigned long)(*((c)++)))<<24; \
-                               } \
-                       }
-
-#undef c2l_p
-/* NOTE the pointer is not incremented at the end of this */
-#define c2l_p(c,l,n)   { \
-                       l=0; \
-                       (c)+=n; \
-                       switch (n) { \
-                       case 3: l =((unsigned long)(*(--(c))))<<16; \
-                       case 2: l|=((unsigned long)(*(--(c))))<< 8; \
-                       case 1: l|=((unsigned long)(*(--(c)))); \
-                               } \
-                       }
-
-#undef p_c2l_p
-#define p_c2l_p(c,l,sc,len) { \
-                       switch (sc) \
-                               { \
-                       case 0: l =((unsigned long)(*((c)++))); \
-                               if (--len == 0) break; \
-                       case 1: l|=((unsigned long)(*((c)++)))<< 8; \
-                               if (--len == 0) break; \
-                       case 2: l|=((unsigned long)(*((c)++)))<<16; \
-                               } \
-                       }
-
-#undef l2c
-#define l2c(l,c)       (*((c)++)=(unsigned char)(((l)    )&0xff), \
-                        *((c)++)=(unsigned char)(((l)>> 8)&0xff), \
-                        *((c)++)=(unsigned char)(((l)>>16)&0xff), \
-                        *((c)++)=(unsigned char)(((l)>>24)&0xff))
-
-#undef ROTATE
-#if defined(WIN32)
-#define ROTATE(a,n)     _lrotl(a,n)
-#else
-#define ROTATE(a,n)     (((a)<<(n))|(((a)&0xffffffff)>>(32-(n))))
+#ifndef RIPEMD160_LONG_LOG2
+#define RIPEMD160_LONG_LOG2 2 /* default to 32 bits */
+#endif
+
+/*
+ * DO EXAMINE COMMENTS IN crypto/md5/md5_locl.h & crypto/md5/md5_dgst.c
+ * FOR EXPLANATIONS ON FOLLOWING "CODE."
+ *                                     <[EMAIL PROTECTED]>
+ */
+#ifdef RMD160_ASM
+# if defined(__i386) || defined(_M_IX86) || defined(__INTEL__)
+#  define ripemd160_block_host_order ripemd160_block_asm_host_order
+# endif
+#endif
+
+void ripemd160_block_host_order (RIPEMD160_CTX *c, const void *p,int num);
+void ripemd160_block_data_order (RIPEMD160_CTX *c, const void *p,int num);
+
+#if defined(__i386) || defined(_M_IX86) || defined(__INTEL__)
+#define ripemd160_block_data_order ripemd160_block_host_order
 #endif
 
-/* A nice byte order reversal from Wei Dai <[EMAIL PROTECTED]> */
-#if defined(WIN32)
-/* 5 instructions with rotate instruction, else 9 */
-#define Endian_Reverse32(a) \
-       { \
-       unsigned long l=(a); \
-       (a)=((ROTATE(l,8)&0x00FF00FF)|(ROTATE(l,24)&0xFF00FF00)); \
-       }
+#define DATA_ORDER_IS_LITTLE_ENDIAN
+
+#define HASH_LONG               RIPEMD160_LONG
+#define HASH_LONG_LOG2          RIPEMD160_LONG_LOG2
+#define HASH_CTX                RIPEMD160_CTX
+#define HASH_CBLOCK             RIPEMD160_CBLOCK
+#define HASH_LBLOCK             RIPEMD160_LBLOCK
+#define HASH_UPDATE             RIPEMD160_Update
+#define HASH_TRANSFORM          RIPEMD160_Transform
+#define HASH_FINAL              RIPEMD160_Final
+#define HASH_BLOCK_HOST_ORDER   ripemd160_block_host_order
+#define        HASH_MAKE_STRING(c,s)   do {    \
+       unsigned long ll;               \
+       ll=(c)->A; HOST_l2c(ll,(s));    \
+       ll=(c)->B; HOST_l2c(ll,(s));    \
+       ll=(c)->C; HOST_l2c(ll,(s));    \
+       ll=(c)->D; HOST_l2c(ll,(s));    \
+       ll=(c)->E; HOST_l2c(ll,(s));    \
+       } while (0)
+#if !defined(L_ENDIAN) || defined(ripemd160_block_data_order)
+#define HASH_BLOCK_DATA_ORDER   ripemd160_block_data_order
+#endif
+
+#ifndef FLAT_INC
+#include "../md32_common.h"
 #else
-/* 6 instructions with rotate instruction, else 8 */
-#define Endian_Reverse32(a) \
-       { \
-       unsigned long l=(a); \
-       l=(((l&0xFF00FF00)>>8L)|((l&0x00FF00FF)<<8L)); \
-       (a)=ROTATE(l,16L); \
-       }
+#include "md32_common.h"
 #endif
 
+#if 0
 #define F1(x,y,z)       ((x)^(y)^(z))
 #define F2(x,y,z)      (((x)&(y))|((~x)&z))
 #define F3(x,y,z)      (((x)|(~y))^(z))
 #define F4(x,y,z)      (((x)&(z))|((y)&(~(z))))
 #define F5(x,y,z)       ((x)^((y)|(~(z))))
+#else
+/*
+ * Transformed F2 and F4 are courtesy of Wei Dai <[EMAIL PROTECTED]>
+ */
+#define F1(x,y,z)      ((x) ^ (y) ^ (z))
+#define F2(x,y,z)      ((((y) ^ (z)) & (x)) ^ (z))
+#define F3(x,y,z)      (((~(y)) | (x)) ^ (z))
+#define F4(x,y,z)      ((((x) ^ (y)) & (z)) ^ (y))
+#define F5(x,y,z)      (((~(z)) | (y)) ^ (x))
+#endif
 
 #define RIPEMD160_A    0x67452301L
 #define RIPEMD160_B    0xEFCDAB89L
@@ -196,27 +138,27 @@
 #include "rmdconst.h"
 
 #define RIP1(a,b,c,d,e,w,s) { \
-       a+=F1(b,c,d)+X[w]; \
+       a+=F1(b,c,d)+X(w); \
         a=ROTATE(a,s)+e; \
         c=ROTATE(c,10); }
 
 #define RIP2(a,b,c,d,e,w,s,K) { \
-       a+=F2(b,c,d)+X[w]+K; \
+       a+=F2(b,c,d)+X(w)+K; \
         a=ROTATE(a,s)+e; \
         c=ROTATE(c,10); }
 
 #define RIP3(a,b,c,d,e,w,s,K) { \
-       a+=F3(b,c,d)+X[w]+K; \
+       a+=F3(b,c,d)+X(w)+K; \
         a=ROTATE(a,s)+e; \
         c=ROTATE(c,10); }
 
 #define RIP4(a,b,c,d,e,w,s,K) { \
-       a+=F4(b,c,d)+X[w]+K; \
+       a+=F4(b,c,d)+X(w)+K; \
         a=ROTATE(a,s)+e; \
         c=ROTATE(c,10); }
 
 #define RIP5(a,b,c,d,e,w,s,K) { \
-       a+=F5(b,c,d)+X[w]+K; \
+       a+=F5(b,c,d)+X(w)+K; \
         a=ROTATE(a,s)+e; \
         c=ROTATE(c,10); }
 
Index: opensa/openssl/crypto/ripemd/rmd_one.c
diff -u opensa/openssl/crypto/ripemd/rmd_one.c:1.1 
opensa/openssl/crypto/ripemd/rmd_one.c:1.2
--- opensa/openssl/crypto/ripemd/rmd_one.c:1.1  Tue Jan 25 23:23:11 2000
+++ opensa/openssl/crypto/ripemd/rmd_one.c      Thu Mar  2 21:11:59 2000
@@ -57,9 +57,10 @@
  */
 
 #include <stdio.h>
-#include "rmd_locl.h"
+#include <string.h>
+#include <openssl/ripemd.h>
 
-unsigned char *RIPEMD160(unsigned char *d, unsigned long n,
+unsigned char *RIPEMD160(const unsigned char *d, unsigned long n,
             unsigned char *md)
        {
        RIPEMD160_CTX c;
Index: opensa/openssl/crypto/ripemd/rmdtest.c
diff -u opensa/openssl/crypto/ripemd/rmdtest.c:1.1 
opensa/openssl/crypto/ripemd/rmdtest.c:1.2
--- opensa/openssl/crypto/ripemd/rmdtest.c:1.1  Tue Jan 25 23:23:11 2000
+++ opensa/openssl/crypto/ripemd/rmdtest.c      Thu Mar  2 21:11:59 2000
@@ -73,7 +73,7 @@
 #include <openssl/ebcdic.h>
 #endif
 
-char *test[]={
+static char *test[]={
        "",
        "a",
        "abc",
@@ -85,7 +85,7 @@
        NULL,
        };
 
-char *ret[]={
+static char *ret[]={
        "9c1185a5c5e9fc54612808977ee8f548b2258d31",
        "0bdc9d2d256b3ee9daae347be6f4dc835a467ffe",
        "8eb208f7e05d987a9b044a8e98c6b087f15a0bfc",
Index: opensa/openssl/crypto/ripemd/asm/rips.cpp
diff -u opensa/openssl/crypto/ripemd/asm/rips.cpp:1.1 
opensa/openssl/crypto/ripemd/asm/rips.cpp:1.2
--- opensa/openssl/crypto/ripemd/asm/rips.cpp:1.1       Tue Jan 25 23:23:22 2000
+++ opensa/openssl/crypto/ripemd/asm/rips.cpp   Thu Mar  2 21:12:00 2000
@@ -34,6 +34,8 @@
 #include <stdlib.h>
 #include <openssl/ripemd.h>
 
+#define ripemd160_block_x86 ripemd160_block_asm_host_order
+
 extern "C" {
 void ripemd160_block_x86(RIPEMD160_CTX *ctx, unsigned char *buffer,int num);
 }
@@ -55,8 +57,10 @@
        if (num == 0) num=16;
        if (num > 250) num=16;
        numm=num+2;
+#if 0
        num*=64;
        numm*=64;
+#endif
 
        for (j=0; j<6; j++)
                {
@@ -71,7 +75,7 @@
                        GetTSC(e2);
                        ripemd160_block_x86(&ctx,buffer,num);
                        }
-               printf("ripemd160 (%d bytes) %d %d (%.2f)\n",num,
+               printf("ripemd160 (%d bytes) %d %d (%.2f)\n",num*64,
                        e1-s1,e2-s2,(double)((e1-s1)-(e2-s2))/2);
                }
        }
Index: opensa/openssl/crypto/ripemd/asm/rm-win32.asm
diff -u opensa/openssl/crypto/ripemd/asm/rm-win32.asm:1.1 
opensa/openssl/crypto/ripemd/asm/rm-win32.asm:1.2
--- opensa/openssl/crypto/ripemd/asm/rm-win32.asm:1.1   Tue Jan 25 23:23:22 2000
+++ opensa/openssl/crypto/ripemd/asm/rm-win32.asm       Thu Mar  2 21:12:00 2000
@@ -8,1965 +8,1966 @@
         .386
 .model FLAT
 _TEXT  SEGMENT
-PUBLIC _ripemd160_block_x86
+PUBLIC _ripemd160_block_asm_host_order
 
-_ripemd160_block_x86 PROC NEAR
+_ripemd160_block_asm_host_order PROC NEAR
+       mov     edx,            DWORD PTR 4[esp]
+       mov     eax,            DWORD PTR 8[esp]
        push    esi
-       mov     ecx,            DWORD PTR 16[esp]
+       mov     ecx,            DWORD PTR [edx]
        push    edi
-       mov     esi,            DWORD PTR 16[esp]
+       mov     esi,            DWORD PTR 4[edx]
        push    ebp
-       add     ecx,            esi
+       mov     edi,            DWORD PTR 8[edx]
        push    ebx
-       sub     ecx,            64
-       sub     esp,            88
-       mov     DWORD PTR [esp],ecx
-       mov     edi,            DWORD PTR 108[esp]
+       sub     esp,            108
 L000start:
        ; 
-       mov     eax,            DWORD PTR [esi]
-       mov     ebx,            DWORD PTR 4[esi]
-       mov     DWORD PTR 4[esp],eax
+       mov     ebx,            DWORD PTR [eax]
+       mov     ebp,            DWORD PTR 4[eax]
+       mov     DWORD PTR [esp],ebx
+       mov     DWORD PTR 4[esp],ebp
+       mov     ebx,            DWORD PTR 8[eax]
+       mov     ebp,            DWORD PTR 12[eax]
        mov     DWORD PTR 8[esp],ebx
-       mov     eax,            DWORD PTR 8[esi]
-       mov     ebx,            DWORD PTR 12[esi]
-       mov     DWORD PTR 12[esp],eax
+       mov     DWORD PTR 12[esp],ebp
+       mov     ebx,            DWORD PTR 16[eax]
+       mov     ebp,            DWORD PTR 20[eax]
        mov     DWORD PTR 16[esp],ebx
-       mov     eax,            DWORD PTR 16[esi]
-       mov     ebx,            DWORD PTR 20[esi]
-       mov     DWORD PTR 20[esp],eax
+       mov     DWORD PTR 20[esp],ebp
+       mov     ebx,            DWORD PTR 24[eax]
+       mov     ebp,            DWORD PTR 28[eax]
        mov     DWORD PTR 24[esp],ebx
-       mov     eax,            DWORD PTR 24[esi]
-       mov     ebx,            DWORD PTR 28[esi]
-       mov     DWORD PTR 28[esp],eax
+       mov     DWORD PTR 28[esp],ebp
+       mov     ebx,            DWORD PTR 32[eax]
+       mov     ebp,            DWORD PTR 36[eax]
        mov     DWORD PTR 32[esp],ebx
-       mov     eax,            DWORD PTR 32[esi]
-       mov     ebx,            DWORD PTR 36[esi]
-       mov     DWORD PTR 36[esp],eax
+       mov     DWORD PTR 36[esp],ebp
+       mov     ebx,            DWORD PTR 40[eax]
+       mov     ebp,            DWORD PTR 44[eax]
        mov     DWORD PTR 40[esp],ebx
-       mov     eax,            DWORD PTR 40[esi]
-       mov     ebx,            DWORD PTR 44[esi]
-       mov     DWORD PTR 44[esp],eax
+       mov     DWORD PTR 44[esp],ebp
+       mov     ebx,            DWORD PTR 48[eax]
+       mov     ebp,            DWORD PTR 52[eax]
        mov     DWORD PTR 48[esp],ebx
-       mov     eax,            DWORD PTR 48[esi]
-       mov     ebx,            DWORD PTR 52[esi]
-       mov     DWORD PTR 52[esp],eax
+       mov     DWORD PTR 52[esp],ebp
+       mov     ebx,            DWORD PTR 56[eax]
+       mov     ebp,            DWORD PTR 60[eax]
        mov     DWORD PTR 56[esp],ebx
-       mov     eax,            DWORD PTR 56[esi]
-       mov     ebx,            DWORD PTR 60[esi]
-       mov     DWORD PTR 60[esp],eax
-       mov     DWORD PTR 64[esp],ebx
-       add     esi,            64
-       mov     eax,            DWORD PTR [edi]
-       mov     DWORD PTR 112[esp],esi
-       mov     ebx,            DWORD PTR 4[edi]
-       mov     ecx,            DWORD PTR 8[edi]
-       mov     edx,            DWORD PTR 12[edi]
-       mov     ebp,            DWORD PTR 16[edi]
+       mov     DWORD PTR 60[esp],ebp
+       mov     eax,            edi
+       mov     ebx,            DWORD PTR 12[edx]
+       mov     ebp,            DWORD PTR 16[edx]
        ; 0
-       mov     esi,            ecx
-       xor     esi,            edx
-       mov     edi,            DWORD PTR 4[esp]
-       xor     esi,            ebx
-       add     eax,            edi
-       rol     ecx,            10
-       add     eax,            esi
-       mov     esi,            ebx
-       rol     eax,            11
-       add     eax,            ebp
+       xor     eax,            ebx
+       mov     edx,            DWORD PTR [esp]
+       xor     eax,            esi
+       add     ecx,            edx
+       rol     edi,            10
+       add     ecx,            eax
+       mov     eax,            esi
+       rol     ecx,            11
+       add     ecx,            ebp
        ; 1
-       xor     esi,            ecx
-       mov     edi,            DWORD PTR 8[esp]
-       xor     esi,            eax
-       add     ebp,            esi
-       mov     esi,            eax
-       rol     ebx,            10
-       add     ebp,            edi
-       xor     esi,            ebx
-       rol     ebp,            14
+       xor     eax,            edi
+       mov     edx,            DWORD PTR 4[esp]
+       xor     eax,            ecx
+       add     ebp,            eax
+       mov     eax,            ecx
+       rol     esi,            10
        add     ebp,            edx
+       xor     eax,            esi
+       rol     ebp,            14
+       add     ebp,            ebx
        ; 2
-       mov     edi,            DWORD PTR 12[esp]
-       xor     esi,            ebp
-       add     edx,            edi
-       rol     eax,            10
-       add     edx,            esi
-       mov     esi,            ebp
-       rol     edx,            15
-       add     edx,            ecx
+       mov     edx,            DWORD PTR 8[esp]
+       xor     eax,            ebp
+       add     ebx,            edx
+       rol     ecx,            10
+       add     ebx,            eax
+       mov     eax,            ebp
+       rol     ebx,            15
+       add     ebx,            edi
        ; 3
-       xor     esi,            eax
-       mov     edi,            DWORD PTR 16[esp]
-       xor     esi,            edx
-       add     ecx,            esi
-       mov     esi,            edx
-       rol     ebp,            10
-       add     ecx,            edi
-       xor     esi,            ebp
-       rol     ecx,            12
-       add     ecx,            ebx
+       xor     eax,            ecx
+       mov     edx,            DWORD PTR 12[esp]
+       xor     eax,            ebx
+       add     edi,            eax
+       mov     eax,            ebx
+       rol     ebp,            10
+       add     edi,            edx
+       xor     eax,            ebp
+       rol     edi,            12
+       add     edi,            esi
        ; 4
-       mov     edi,            DWORD PTR 20[esp]
-       xor     esi,            ecx
-       add     ebx,            edi
-       rol     edx,            10
-       add     ebx,            esi
-       mov     esi,            ecx
-       rol     ebx,            5
-       add     ebx,            eax
+       mov     edx,            DWORD PTR 16[esp]
+       xor     eax,            edi
+       add     esi,            edx
+       rol     ebx,            10
+       add     esi,            eax
+       mov     eax,            edi
+       rol     esi,            5
+       add     esi,            ecx
        ; 5
-       xor     esi,            edx
-       mov     edi,            DWORD PTR 24[esp]
-       xor     esi,            ebx
-       add     eax,            esi
-       mov     esi,            ebx
-       rol     ecx,            10
-       add     eax,            edi
-       xor     esi,            ecx
-       rol     eax,            8
-       add     eax,            ebp
+       xor     eax,            ebx
+       mov     edx,            DWORD PTR 20[esp]
+       xor     eax,            esi
+       add     ecx,            eax
+       mov     eax,            esi
+       rol     edi,            10
+       add     ecx,            edx
+       xor     eax,            edi
+       rol     ecx,            8
+       add     ecx,            ebp
        ; 6
-       mov     edi,            DWORD PTR 28[esp]
-       xor     esi,            eax
-       add     ebp,            edi
-       rol     ebx,            10
-       add     ebp,            esi
-       mov     esi,            eax
-       rol     ebp,            7
+       mov     edx,            DWORD PTR 24[esp]
+       xor     eax,            ecx
        add     ebp,            edx
+       rol     esi,            10
+       add     ebp,            eax
+       mov     eax,            ecx
+       rol     ebp,            7
+       add     ebp,            ebx
        ; 7
-       xor     esi,            ebx
-       mov     edi,            DWORD PTR 32[esp]
-       xor     esi,            ebp
-       add     edx,            esi
-       mov     esi,            ebp
-       rol     eax,            10
-       add     edx,            edi
-       xor     esi,            eax
-       rol     edx,            9
-       add     edx,            ecx
+       xor     eax,            esi
+       mov     edx,            DWORD PTR 28[esp]
+       xor     eax,            ebp
+       add     ebx,            eax
+       mov     eax,            ebp
+       rol     ecx,            10
+       add     ebx,            edx
+       xor     eax,            ecx
+       rol     ebx,            9
+       add     ebx,            edi
        ; 8
-       mov     edi,            DWORD PTR 36[esp]
-       xor     esi,            edx
-       add     ecx,            edi
-       rol     ebp,            10
-       add     ecx,            esi
-       mov     esi,            edx
-       rol     ecx,            11
-       add     ecx,            ebx
+       mov     edx,            DWORD PTR 32[esp]
+       xor     eax,            ebx
+       add     edi,            edx
+       rol     ebp,            10
+       add     edi,            eax
+       mov     eax,            ebx
+       rol     edi,            11
+       add     edi,            esi
        ; 9
-       xor     esi,            ebp
-       mov     edi,            DWORD PTR 40[esp]
-       xor     esi,            ecx
-       add     ebx,            esi
-       mov     esi,            ecx
-       rol     edx,            10
-       add     ebx,            edi
-       xor     esi,            edx
-       rol     ebx,            13
-       add     ebx,            eax
+       xor     eax,            ebp
+       mov     edx,            DWORD PTR 36[esp]
+       xor     eax,            edi
+       add     esi,            eax
+       mov     eax,            edi
+       rol     ebx,            10
+       add     esi,            edx
+       xor     eax,            ebx
+       rol     esi,            13
+       add     esi,            ecx
        ; 10
-       mov     edi,            DWORD PTR 44[esp]
-       xor     esi,            ebx
-       add     eax,            edi
-       rol     ecx,            10
-       add     eax,            esi
-       mov     esi,            ebx
-       rol     eax,            14
-       add     eax,            ebp
+       mov     edx,            DWORD PTR 40[esp]
+       xor     eax,            esi
+       add     ecx,            edx
+       rol     edi,            10
+       add     ecx,            eax
+       mov     eax,            esi
+       rol     ecx,            14
+       add     ecx,            ebp
        ; 11
-       xor     esi,            ecx
-       mov     edi,            DWORD PTR 48[esp]
-       xor     esi,            eax
-       add     ebp,            esi
-       mov     esi,            eax
-       rol     ebx,            10
-       add     ebp,            edi
-       xor     esi,            ebx
-       rol     ebp,            15
+       xor     eax,            edi
+       mov     edx,            DWORD PTR 44[esp]
+       xor     eax,            ecx
+       add     ebp,            eax
+       mov     eax,            ecx
+       rol     esi,            10
        add     ebp,            edx
+       xor     eax,            esi
+       rol     ebp,            15
+       add     ebp,            ebx
        ; 12
-       mov     edi,            DWORD PTR 52[esp]
-       xor     esi,            ebp
-       add     edx,            edi
-       rol     eax,            10
-       add     edx,            esi
-       mov     esi,            ebp
-       rol     edx,            6
-       add     edx,            ecx
+       mov     edx,            DWORD PTR 48[esp]
+       xor     eax,            ebp
+       add     ebx,            edx
+       rol     ecx,            10
+       add     ebx,            eax
+       mov     eax,            ebp
+       rol     ebx,            6
+       add     ebx,            edi
        ; 13
-       xor     esi,            eax
-       mov     edi,            DWORD PTR 56[esp]
-       xor     esi,            edx
-       add     ecx,            esi
-       mov     esi,            edx
-       rol     ebp,            10
-       add     ecx,            edi
-       xor     esi,            ebp
-       rol     ecx,            7
-       add     ecx,            ebx
+       xor     eax,            ecx
+       mov     edx,            DWORD PTR 52[esp]
+       xor     eax,            ebx
+       add     edi,            eax
+       mov     eax,            ebx
+       rol     ebp,            10
+       add     edi,            edx
+       xor     eax,            ebp
+       rol     edi,            7
+       add     edi,            esi
        ; 14
-       mov     edi,            DWORD PTR 60[esp]
-       xor     esi,            ecx
-       add     ebx,            edi
-       rol     edx,            10
-       add     ebx,            esi
-       mov     esi,            ecx
-       rol     ebx,            9
-       add     ebx,            eax
+       mov     edx,            DWORD PTR 56[esp]
+       xor     eax,            edi
+       add     esi,            edx
+       rol     ebx,            10
+       add     esi,            eax
+       mov     eax,            edi
+       rol     esi,            9
+       add     esi,            ecx
        ; 15
-       xor     esi,            edx
-       mov     edi,            DWORD PTR 64[esp]
-       xor     esi,            ebx
-       add     eax,            esi
-       mov     esi,            -1
-       rol     ecx,            10
-       add     eax,            edi
-       mov     edi,            DWORD PTR 32[esp]
-       rol     eax,            8
-       add     eax,            ebp
+       xor     eax,            ebx
+       mov     edx,            DWORD PTR 60[esp]
+       xor     eax,            esi
+       add     ecx,            eax
+       mov     eax,            -1
+       rol     edi,            10
+       add     ecx,            edx
+       mov     edx,            DWORD PTR 28[esp]
+       rol     ecx,            8
+       add     ecx,            ebp
        ; 16
-       add     ebp,            edi
-       mov     edi,            ebx
-       sub     esi,            eax
-       and     edi,            eax
-       and     esi,            ecx
-       or      edi,            esi
-       mov     esi,            DWORD PTR 20[esp]
-       rol     ebx,            10
-       lea     ebp,            DWORD PTR 1518500249[edi*1+ebp]
-       mov     edi,            -1
-       rol     ebp,            7
        add     ebp,            edx
+       mov     edx,            esi
+       sub     eax,            ecx
+       and     edx,            ecx
+       and     eax,            edi
+       or      edx,            eax
+       mov     eax,            DWORD PTR 16[esp]
+       rol     esi,            10
+       lea     ebp,            DWORD PTR 1518500249[edx*1+ebp]
+       mov     edx,            -1
+       rol     ebp,            7
+       add     ebp,            ebx
        ; 17
-       add     edx,            esi
-       mov     esi,            eax
-       sub     edi,            ebp
-       and     esi,            ebp
-       and     edi,            ebx
-       or      esi,            edi
-       mov     edi,            DWORD PTR 56[esp]
-       rol     eax,            10
-       lea     edx,            DWORD PTR 1518500249[esi*1+edx]
-       mov     esi,            -1
-       rol     edx,            6
-       add     edx,            ecx
+       add     ebx,            eax
+       mov     eax,            ecx
+       sub     edx,            ebp
+       and     eax,            ebp
+       and     edx,            esi
+       or      eax,            edx
+       mov     edx,            DWORD PTR 52[esp]
+       rol     ecx,            10
+       lea     ebx,            DWORD PTR 1518500249[eax*1+ebx]
+       mov     eax,            -1
+       rol     ebx,            6
+       add     ebx,            edi
        ; 18
-       add     ecx,            edi
-       mov     edi,            ebp
-       sub     esi,            edx
-       and     edi,            edx
-       and     esi,            eax
-       or      edi,            esi
-       mov     esi,            DWORD PTR 8[esp]
-       rol     ebp,            10
-       lea     ecx,            DWORD PTR 1518500249[edi*1+ecx]
-       mov     edi,            -1
-       rol     ecx,            8
-       add     ecx,            ebx
+       add     edi,            edx
+       mov     edx,            ebp
+       sub     eax,            ebx
+       and     edx,            ebx
+       and     eax,            ecx
+       or      edx,            eax
+       mov     eax,            DWORD PTR 4[esp]
+       rol     ebp,            10
+       lea     edi,            DWORD PTR 1518500249[edx*1+edi]
+       mov     edx,            -1
+       rol     edi,            8
+       add     edi,            esi
        ; 19
-       add     ebx,            esi
-       mov     esi,            edx
-       sub     edi,            ecx
-       and     esi,            ecx
-       and     edi,            ebp
-       or      esi,            edi
-       mov     edi,            DWORD PTR 44[esp]
-       rol     edx,            10
-       lea     ebx,            DWORD PTR 1518500249[esi*1+ebx]
-       mov     esi,            -1
-       rol     ebx,            13
-       add     ebx,            eax
+       add     esi,            eax
+       mov     eax,            ebx
+       sub     edx,            edi
+       and     eax,            edi
+       and     edx,            ebp
+       or      eax,            edx
+       mov     edx,            DWORD PTR 40[esp]
+       rol     ebx,            10
+       lea     esi,            DWORD PTR 1518500249[eax*1+esi]
+       mov     eax,            -1
+       rol     esi,            13
+       add     esi,            ecx
        ; 20
-       add     eax,            edi
-       mov     edi,            ecx
-       sub     esi,            ebx
-       and     edi,            ebx
-       and     esi,            edx
-       or      edi,            esi
-       mov     esi,            DWORD PTR 28[esp]
-       rol     ecx,            10
-       lea     eax,            DWORD PTR 1518500249[edi*1+eax]
-       mov     edi,            -1
-       rol     eax,            11
-       add     eax,            ebp
+       add     ecx,            edx
+       mov     edx,            edi
+       sub     eax,            esi
+       and     edx,            esi
+       and     eax,            ebx
+       or      edx,            eax
+       mov     eax,            DWORD PTR 24[esp]
+       rol     edi,            10
+       lea     ecx,            DWORD PTR 1518500249[edx*1+ecx]
+       mov     edx,            -1
+       rol     ecx,            11
+       add     ecx,            ebp
        ; 21
-       add     ebp,            esi
-       mov     esi,            ebx
-       sub     edi,            eax
-       and     esi,            eax
-       and     edi,            ecx
-       or      esi,            edi
-       mov     edi,            DWORD PTR 64[esp]
-       rol     ebx,            10
-       lea     ebp,            DWORD PTR 1518500249[esi*1+ebp]
-       mov     esi,            -1
+       add     ebp,            eax
+       mov     eax,            esi
+       sub     edx,            ecx
+       and     eax,            ecx
+       and     edx,            edi
+       or      eax,            edx
+       mov     edx,            DWORD PTR 60[esp]
+       rol     esi,            10
+       lea     ebp,            DWORD PTR 1518500249[eax*1+ebp]
+       mov     eax,            -1
        rol     ebp,            9
-       add     ebp,            edx
+       add     ebp,            ebx
        ; 22
-       add     edx,            edi
-       mov     edi,            eax
-       sub     esi,            ebp
-       and     edi,            ebp
-       and     esi,            ebx
-       or      edi,            esi
-       mov     esi,            DWORD PTR 16[esp]
-       rol     eax,            10
-       lea     edx,            DWORD PTR 1518500249[edi*1+edx]
-       mov     edi,            -1
-       rol     edx,            7
-       add     edx,            ecx
+       add     ebx,            edx
+       mov     edx,            ecx
+       sub     eax,            ebp
+       and     edx,            ebp
+       and     eax,            esi
+       or      edx,            eax
+       mov     eax,            DWORD PTR 12[esp]
+       rol     ecx,            10
+       lea     ebx,            DWORD PTR 1518500249[edx*1+ebx]
+       mov     edx,            -1
+       rol     ebx,            7
+       add     ebx,            edi
        ; 23
-       add     ecx,            esi
-       mov     esi,            ebp
-       sub     edi,            edx
-       and     esi,            edx
-       and     edi,            eax
-       or      esi,            edi
-       mov     edi,            DWORD PTR 52[esp]
-       rol     ebp,            10
-       lea     ecx,            DWORD PTR 1518500249[esi*1+ecx]
-       mov     esi,            -1
-       rol     ecx,            15
-       add     ecx,            ebx
+       add     edi,            eax
+       mov     eax,            ebp
+       sub     edx,            ebx
+       and     eax,            ebx
+       and     edx,            ecx
+       or      eax,            edx
+       mov     edx,            DWORD PTR 48[esp]
+       rol     ebp,            10
+       lea     edi,            DWORD PTR 1518500249[eax*1+edi]
+       mov     eax,            -1
+       rol     edi,            15
+       add     edi,            esi
        ; 24
-       add     ebx,            edi
-       mov     edi,            edx
-       sub     esi,            ecx
-       and     edi,            ecx
-       and     esi,            ebp
-       or      edi,            esi
-       mov     esi,            DWORD PTR 4[esp]
-       rol     edx,            10
-       lea     ebx,            DWORD PTR 1518500249[edi*1+ebx]
-       mov     edi,            -1
-       rol     ebx,            7
-       add     ebx,            eax
+       add     esi,            edx
+       mov     edx,            ebx
+       sub     eax,            edi
+       and     edx,            edi
+       and     eax,            ebp
+       or      edx,            eax
+       mov     eax,            DWORD PTR [esp]
+       rol     ebx,            10
+       lea     esi,            DWORD PTR 1518500249[edx*1+esi]
+       mov     edx,            -1
+       rol     esi,            7
+       add     esi,            ecx
        ; 25
-       add     eax,            esi
-       mov     esi,            ecx
-       sub     edi,            ebx
-       and     esi,            ebx
-       and     edi,            edx
-       or      esi,            edi
-       mov     edi,            DWORD PTR 40[esp]
-       rol     ecx,            10
-       lea     eax,            DWORD PTR 1518500249[esi*1+eax]
-       mov     esi,            -1
-       rol     eax,            12
-       add     eax,            ebp
+       add     ecx,            eax
+       mov     eax,            edi
+       sub     edx,            esi
+       and     eax,            esi
+       and     edx,            ebx
+       or      eax,            edx
+       mov     edx,            DWORD PTR 36[esp]
+       rol     edi,            10
+       lea     ecx,            DWORD PTR 1518500249[eax*1+ecx]
+       mov     eax,            -1
+       rol     ecx,            12
+       add     ecx,            ebp
        ; 26
-       add     ebp,            edi
-       mov     edi,            ebx
-       sub     esi,            eax
-       and     edi,            eax
-       and     esi,            ecx
-       or      edi,            esi
-       mov     esi,            DWORD PTR 24[esp]
-       rol     ebx,            10
-       lea     ebp,            DWORD PTR 1518500249[edi*1+ebp]
-       mov     edi,            -1
-       rol     ebp,            15
        add     ebp,            edx
+       mov     edx,            esi
+       sub     eax,            ecx
+       and     edx,            ecx
+       and     eax,            edi
+       or      edx,            eax
+       mov     eax,            DWORD PTR 20[esp]
+       rol     esi,            10
+       lea     ebp,            DWORD PTR 1518500249[edx*1+ebp]
+       mov     edx,            -1
+       rol     ebp,            15
+       add     ebp,            ebx
        ; 27
-       add     edx,            esi
-       mov     esi,            eax
-       sub     edi,            ebp
-       and     esi,            ebp
-       and     edi,            ebx
-       or      esi,            edi
-       mov     edi,            DWORD PTR 12[esp]
-       rol     eax,            10
-       lea     edx,            DWORD PTR 1518500249[esi*1+edx]
-       mov     esi,            -1
-       rol     edx,            9
-       add     edx,            ecx
+       add     ebx,            eax
+       mov     eax,            ecx
+       sub     edx,            ebp
+       and     eax,            ebp
+       and     edx,            esi
+       or      eax,            edx
+       mov     edx,            DWORD PTR 8[esp]
+       rol     ecx,            10
+       lea     ebx,            DWORD PTR 1518500249[eax*1+ebx]
+       mov     eax,            -1
+       rol     ebx,            9
+       add     ebx,            edi
        ; 28
-       add     ecx,            edi
-       mov     edi,            ebp
-       sub     esi,            edx
-       and     edi,            edx
-       and     esi,            eax
-       or      edi,            esi
-       mov     esi,            DWORD PTR 60[esp]
-       rol     ebp,            10
-       lea     ecx,            DWORD PTR 1518500249[edi*1+ecx]
-       mov     edi,            -1
-       rol     ecx,            11
-       add     ecx,            ebx
+       add     edi,            edx
+       mov     edx,            ebp
+       sub     eax,            ebx
+       and     edx,            ebx
+       and     eax,            ecx
+       or      edx,            eax
+       mov     eax,            DWORD PTR 56[esp]
+       rol     ebp,            10
+       lea     edi,            DWORD PTR 1518500249[edx*1+edi]
+       mov     edx,            -1
+       rol     edi,            11
+       add     edi,            esi
        ; 29
-       add     ebx,            esi
-       mov     esi,            edx
-       sub     edi,            ecx
-       and     esi,            ecx
-       and     edi,            ebp
-       or      esi,            edi
-       mov     edi,            DWORD PTR 48[esp]
-       rol     edx,            10
-       lea     ebx,            DWORD PTR 1518500249[esi*1+ebx]
-       mov     esi,            -1
-       rol     ebx,            7
-       add     ebx,            eax
+       add     esi,            eax
+       mov     eax,            ebx
+       sub     edx,            edi
+       and     eax,            edi
+       and     edx,            ebp
+       or      eax,            edx
+       mov     edx,            DWORD PTR 44[esp]
+       rol     ebx,            10
+       lea     esi,            DWORD PTR 1518500249[eax*1+esi]
+       mov     eax,            -1
+       rol     esi,            7
+       add     esi,            ecx
        ; 30
-       add     eax,            edi
-       mov     edi,            ecx
-       sub     esi,            ebx
-       and     edi,            ebx
-       and     esi,            edx
-       or      edi,            esi
-       mov     esi,            DWORD PTR 36[esp]
-       rol     ecx,            10
-       lea     eax,            DWORD PTR 1518500249[edi*1+eax]
-       mov     edi,            -1
-       rol     eax,            13
-       add     eax,            ebp
+       add     ecx,            edx
+       mov     edx,            edi
+       sub     eax,            esi
+       and     edx,            esi
+       and     eax,            ebx
+       or      edx,            eax
+       mov     eax,            DWORD PTR 32[esp]
+       rol     edi,            10
+       lea     ecx,            DWORD PTR 1518500249[edx*1+ecx]
+       mov     edx,            -1
+       rol     ecx,            13
+       add     ecx,            ebp
        ; 31
-       add     ebp,            esi
-       mov     esi,            ebx
-       sub     edi,            eax
-       and     esi,            eax
-       and     edi,            ecx
-       or      esi,            edi
-       mov     edi,            -1
-       rol     ebx,            10
-       lea     ebp,            DWORD PTR 1518500249[esi*1+ebp]
-       sub     edi,            eax
+       add     ebp,            eax
+       mov     eax,            esi
+       sub     edx,            ecx
+       and     eax,            ecx
+       and     edx,            edi
+       or      eax,            edx
+       mov     edx,            -1
+       rol     esi,            10
+       lea     ebp,            DWORD PTR 1518500249[eax*1+ebp]
+       sub     edx,            ecx
        rol     ebp,            12
-       add     ebp,            edx
+       add     ebp,            ebx
        ; 32
-       mov     esi,            DWORD PTR 16[esp]
-       or      edi,            ebp
-       add     edx,            esi
-       xor     edi,            ebx
-       mov     esi,            -1
-       rol     eax,            10
-       lea     edx,            DWORD PTR 1859775393[edi*1+edx]
-       sub     esi,            ebp
-       rol     edx,            11
-       add     edx,            ecx
+       mov     eax,            DWORD PTR 12[esp]
+       or      edx,            ebp
+       add     ebx,            eax
+       xor     edx,            esi
+       mov     eax,            -1
+       rol     ecx,            10
+       lea     ebx,            DWORD PTR 1859775393[edx*1+ebx]
+       sub     eax,            ebp
+       rol     ebx,            11
+       add     ebx,            edi
        ; 33
-       mov     edi,            DWORD PTR 44[esp]
-       or      esi,            edx
-       add     ecx,            edi
-       xor     esi,            eax
-       mov     edi,            -1
-       rol     ebp,            10
-       lea     ecx,            DWORD PTR 1859775393[esi*1+ecx]
-       sub     edi,            edx
-       rol     ecx,            13
-       add     ecx,            ebx
+       mov     edx,            DWORD PTR 40[esp]
+       or      eax,            ebx
+       add     edi,            edx
+       xor     eax,            ecx
+       mov     edx,            -1
+       rol     ebp,            10
+       lea     edi,            DWORD PTR 1859775393[eax*1+edi]
+       sub     edx,            ebx
+       rol     edi,            13
+       add     edi,            esi
        ; 34
-       mov     esi,            DWORD PTR 60[esp]
-       or      edi,            ecx
-       add     ebx,            esi
-       xor     edi,            ebp
-       mov     esi,            -1
-       rol     edx,            10
-       lea     ebx,            DWORD PTR 1859775393[edi*1+ebx]
-       sub     esi,            ecx
-       rol     ebx,            6
-       add     ebx,            eax
+       mov     eax,            DWORD PTR 56[esp]
+       or      edx,            edi
+       add     esi,            eax
+       xor     edx,            ebp
+       mov     eax,            -1
+       rol     ebx,            10
+       lea     esi,            DWORD PTR 1859775393[edx*1+esi]
+       sub     eax,            edi
+       rol     esi,            6
+       add     esi,            ecx
        ; 35
-       mov     edi,            DWORD PTR 20[esp]
-       or      esi,            ebx
-       add     eax,            edi
-       xor     esi,            edx
-       mov     edi,            -1
-       rol     ecx,            10
-       lea     eax,            DWORD PTR 1859775393[esi*1+eax]
-       sub     edi,            ebx
-       rol     eax,            7
-       add     eax,            ebp
+       mov     edx,            DWORD PTR 16[esp]
+       or      eax,            esi
+       add     ecx,            edx
+       xor     eax,            ebx
+       mov     edx,            -1
+       rol     edi,            10
+       lea     ecx,            DWORD PTR 1859775393[eax*1+ecx]
+       sub     edx,            esi
+       rol     ecx,            7
+       add     ecx,            ebp
        ; 36
-       mov     esi,            DWORD PTR 40[esp]
-       or      edi,            eax
-       add     ebp,            esi
-       xor     edi,            ecx
-       mov     esi,            -1
-       rol     ebx,            10
-       lea     ebp,            DWORD PTR 1859775393[edi*1+ebp]
-       sub     esi,            eax
+       mov     eax,            DWORD PTR 36[esp]
+       or      edx,            ecx
+       add     ebp,            eax
+       xor     edx,            edi
+       mov     eax,            -1
+       rol     esi,            10
+       lea     ebp,            DWORD PTR 1859775393[edx*1+ebp]
+       sub     eax,            ecx
        rol     ebp,            14
-       add     ebp,            edx
+       add     ebp,            ebx
        ; 37
-       mov     edi,            DWORD PTR 64[esp]
-       or      esi,            ebp
-       add     edx,            edi
-       xor     esi,            ebx
-       mov     edi,            -1
-       rol     eax,            10
-       lea     edx,            DWORD PTR 1859775393[esi*1+edx]
-       sub     edi,            ebp
-       rol     edx,            9
-       add     edx,            ecx
+       mov     edx,            DWORD PTR 60[esp]
+       or      eax,            ebp
+       add     ebx,            edx
+       xor     eax,            esi
+       mov     edx,            -1
+       rol     ecx,            10
+       lea     ebx,            DWORD PTR 1859775393[eax*1+ebx]
+       sub     edx,            ebp
+       rol     ebx,            9
+       add     ebx,            edi
        ; 38
-       mov     esi,            DWORD PTR 36[esp]
-       or      edi,            edx
-       add     ecx,            esi
-       xor     edi,            eax
-       mov     esi,            -1
-       rol     ebp,            10
-       lea     ecx,            DWORD PTR 1859775393[edi*1+ecx]
-       sub     esi,            edx
-       rol     ecx,            13
-       add     ecx,            ebx
+       mov     eax,            DWORD PTR 32[esp]
+       or      edx,            ebx
+       add     edi,            eax
+       xor     edx,            ecx
+       mov     eax,            -1
+       rol     ebp,            10
+       lea     edi,            DWORD PTR 1859775393[edx*1+edi]
+       sub     eax,            ebx
+       rol     edi,            13
+       add     edi,            esi
        ; 39
-       mov     edi,            DWORD PTR 8[esp]
-       or      esi,            ecx
-       add     ebx,            edi
-       xor     esi,            ebp
-       mov     edi,            -1
-       rol     edx,            10
-       lea     ebx,            DWORD PTR 1859775393[esi*1+ebx]
-       sub     edi,            ecx
-       rol     ebx,            15
-       add     ebx,            eax
+       mov     edx,            DWORD PTR 4[esp]
+       or      eax,            edi
+       add     esi,            edx
+       xor     eax,            ebp
+       mov     edx,            -1
+       rol     ebx,            10
+       lea     esi,            DWORD PTR 1859775393[eax*1+esi]
+       sub     edx,            edi
+       rol     esi,            15
+       add     esi,            ecx
        ; 40
-       mov     esi,            DWORD PTR 12[esp]
-       or      edi,            ebx
-       add     eax,            esi
-       xor     edi,            edx
-       mov     esi,            -1
-       rol     ecx,            10
-       lea     eax,            DWORD PTR 1859775393[edi*1+eax]
-       sub     esi,            ebx
-       rol     eax,            14
-       add     eax,            ebp
+       mov     eax,            DWORD PTR 8[esp]
+       or      edx,            esi
+       add     ecx,            eax
+       xor     edx,            ebx
+       mov     eax,            -1
+       rol     edi,            10
+       lea     ecx,            DWORD PTR 1859775393[edx*1+ecx]
+       sub     eax,            esi
+       rol     ecx,            14
+       add     ecx,            ebp
        ; 41
-       mov     edi,            DWORD PTR 32[esp]
-       or      esi,            eax
-       add     ebp,            edi
-       xor     esi,            ecx
-       mov     edi,            -1
-       rol     ebx,            10
-       lea     ebp,            DWORD PTR 1859775393[esi*1+ebp]
-       sub     edi,            eax
-       rol     ebp,            8
+       mov     edx,            DWORD PTR 28[esp]
+       or      eax,            ecx
        add     ebp,            edx
+       xor     eax,            edi
+       mov     edx,            -1
+       rol     esi,            10
+       lea     ebp,            DWORD PTR 1859775393[eax*1+ebp]
+       sub     edx,            ecx
+       rol     ebp,            8
+       add     ebp,            ebx
        ; 42
-       mov     esi,            DWORD PTR 4[esp]
-       or      edi,            ebp
-       add     edx,            esi
-       xor     edi,            ebx
-       mov     esi,            -1
-       rol     eax,            10
-       lea     edx,            DWORD PTR 1859775393[edi*1+edx]
-       sub     esi,            ebp
-       rol     edx,            13
-       add     edx,            ecx
+       mov     eax,            DWORD PTR [esp]
+       or      edx,            ebp
+       add     ebx,            eax
+       xor     edx,            esi
+       mov     eax,            -1
+       rol     ecx,            10
+       lea     ebx,            DWORD PTR 1859775393[edx*1+ebx]
+       sub     eax,            ebp
+       rol     ebx,            13
+       add     ebx,            edi
        ; 43
-       mov     edi,            DWORD PTR 28[esp]
-       or      esi,            edx
-       add     ecx,            edi
-       xor     esi,            eax
-       mov     edi,            -1
-       rol     ebp,            10
-       lea     ecx,            DWORD PTR 1859775393[esi*1+ecx]
-       sub     edi,            edx
-       rol     ecx,            6
-       add     ecx,            ebx
+       mov     edx,            DWORD PTR 24[esp]
+       or      eax,            ebx
+       add     edi,            edx
+       xor     eax,            ecx
+       mov     edx,            -1
+       rol     ebp,            10
+       lea     edi,            DWORD PTR 1859775393[eax*1+edi]
+       sub     edx,            ebx
+       rol     edi,            6
+       add     edi,            esi
        ; 44
-       mov     esi,            DWORD PTR 56[esp]
-       or      edi,            ecx
-       add     ebx,            esi
-       xor     edi,            ebp
-       mov     esi,            -1
-       rol     edx,            10
-       lea     ebx,            DWORD PTR 1859775393[edi*1+ebx]
-       sub     esi,            ecx
-       rol     ebx,            5
-       add     ebx,            eax
+       mov     eax,            DWORD PTR 52[esp]
+       or      edx,            edi
+       add     esi,            eax
+       xor     edx,            ebp
+       mov     eax,            -1
+       rol     ebx,            10
+       lea     esi,            DWORD PTR 1859775393[edx*1+esi]
+       sub     eax,            edi
+       rol     esi,            5
+       add     esi,            ecx
        ; 45
-       mov     edi,            DWORD PTR 48[esp]
-       or      esi,            ebx
-       add     eax,            edi
-       xor     esi,            edx
-       mov     edi,            -1
-       rol     ecx,            10
-       lea     eax,            DWORD PTR 1859775393[esi*1+eax]
-       sub     edi,            ebx
-       rol     eax,            12
-       add     eax,            ebp
+       mov     edx,            DWORD PTR 44[esp]
+       or      eax,            esi
+       add     ecx,            edx
+       xor     eax,            ebx
+       mov     edx,            -1
+       rol     edi,            10
+       lea     ecx,            DWORD PTR 1859775393[eax*1+ecx]
+       sub     edx,            esi
+       rol     ecx,            12
+       add     ecx,            ebp
        ; 46
-       mov     esi,            DWORD PTR 24[esp]
-       or      edi,            eax
-       add     ebp,            esi
-       xor     edi,            ecx
-       mov     esi,            -1
-       rol     ebx,            10
-       lea     ebp,            DWORD PTR 1859775393[edi*1+ebp]
-       sub     esi,            eax
+       mov     eax,            DWORD PTR 20[esp]
+       or      edx,            ecx
+       add     ebp,            eax
+       xor     edx,            edi
+       mov     eax,            -1
+       rol     esi,            10
+       lea     ebp,            DWORD PTR 1859775393[edx*1+ebp]
+       sub     eax,            ecx
        rol     ebp,            7
-       add     ebp,            edx
+       add     ebp,            ebx
        ; 47
-       mov     edi,            DWORD PTR 52[esp]
-       or      esi,            ebp
-       add     edx,            edi
-       xor     esi,            ebx
-       mov     edi,            -1
-       rol     eax,            10
-       lea     edx,            DWORD PTR 1859775393[esi*1+edx]
-       mov     esi,            eax
-       rol     edx,            5
-       add     edx,            ecx
+       mov     edx,            DWORD PTR 48[esp]
+       or      eax,            ebp
+       add     ebx,            edx
+       xor     eax,            esi
+       mov     edx,            -1
+       rol     ecx,            10
+       lea     ebx,            DWORD PTR 1859775393[eax*1+ebx]
+       mov     eax,            ecx
+       rol     ebx,            5
+       add     ebx,            edi
        ; 48
-       sub     edi,            eax
-       and     esi,            edx
-       and     edi,            ebp
-       or      edi,            esi
-       mov     esi,            DWORD PTR 8[esp]
-       rol     ebp,            10
-       lea     ecx,            DWORD PTR 2400959708[edi+ecx]
-       mov     edi,            -1
-       add     ecx,            esi
-       mov     esi,            ebp
-       rol     ecx,            11
-       add     ecx,            ebx
+       sub     edx,            ecx
+       and     eax,            ebx
+       and     edx,            ebp
+       or      edx,            eax
+       mov     eax,            DWORD PTR 4[esp]
+       rol     ebp,            10
+       lea     edi,            DWORD PTR 2400959708[edx+edi]
+       mov     edx,            -1
+       add     edi,            eax
+       mov     eax,            ebp
+       rol     edi,            11
+       add     edi,            esi
        ; 49
-       sub     edi,            ebp
-       and     esi,            ecx
-       and     edi,            edx
-       or      edi,            esi
-       mov     esi,            DWORD PTR 40[esp]
-       rol     edx,            10
-       lea     ebx,            DWORD PTR 2400959708[edi+ebx]
-       mov     edi,            -1
-       add     ebx,            esi
-       mov     esi,            edx
-       rol     ebx,            12
-       add     ebx,            eax
+       sub     edx,            ebp
+       and     eax,            edi
+       and     edx,            ebx
+       or      edx,            eax
+       mov     eax,            DWORD PTR 36[esp]
+       rol     ebx,            10
+       lea     esi,            DWORD PTR 2400959708[edx+esi]
+       mov     edx,            -1
+       add     esi,            eax
+       mov     eax,            ebx
+       rol     esi,            12
+       add     esi,            ecx
        ; 50
-       sub     edi,            edx
-       and     esi,            ebx
-       and     edi,            ecx
-       or      edi,            esi
-       mov     esi,            DWORD PTR 48[esp]
-       rol     ecx,            10
-       lea     eax,            DWORD PTR 2400959708[edi+eax]
-       mov     edi,            -1
-       add     eax,            esi
-       mov     esi,            ecx
-       rol     eax,            14
-       add     eax,            ebp
+       sub     edx,            ebx
+       and     eax,            esi
+       and     edx,            edi
+       or      edx,            eax
+       mov     eax,            DWORD PTR 44[esp]
+       rol     edi,            10
+       lea     ecx,            DWORD PTR 2400959708[edx+ecx]
+       mov     edx,            -1
+       add     ecx,            eax
+       mov     eax,            edi
+       rol     ecx,            14
+       add     ecx,            ebp
        ; 51
-       sub     edi,            ecx
-       and     esi,            eax
-       and     edi,            ebx
-       or      edi,            esi
-       mov     esi,            DWORD PTR 44[esp]
-       rol     ebx,            10
-       lea     ebp,            DWORD PTR 2400959708[edi+ebp]
-       mov     edi,            -1
-       add     ebp,            esi
-       mov     esi,            ebx
+       sub     edx,            edi
+       and     eax,            ecx
+       and     edx,            esi
+       or      edx,            eax
+       mov     eax,            DWORD PTR 40[esp]
+       rol     esi,            10
+       lea     ebp,            DWORD PTR 2400959708[edx+ebp]
+       mov     edx,            -1
+       add     ebp,            eax
+       mov     eax,            esi
        rol     ebp,            15
-       add     ebp,            edx
+       add     ebp,            ebx
        ; 52
-       sub     edi,            ebx
-       and     esi,            ebp
-       and     edi,            eax
-       or      edi,            esi
-       mov     esi,            DWORD PTR 4[esp]
-       rol     eax,            10
-       lea     edx,            DWORD PTR 2400959708[edi+edx]
-       mov     edi,            -1
-       add     edx,            esi
-       mov     esi,            eax
-       rol     edx,            14
-       add     edx,            ecx
+       sub     edx,            esi
+       and     eax,            ebp
+       and     edx,            ecx
+       or      edx,            eax
+       mov     eax,            DWORD PTR [esp]
+       rol     ecx,            10
+       lea     ebx,            DWORD PTR 2400959708[edx+ebx]
+       mov     edx,            -1
+       add     ebx,            eax
+       mov     eax,            ecx
+       rol     ebx,            14
+       add     ebx,            edi
        ; 53
-       sub     edi,            eax
-       and     esi,            edx
-       and     edi,            ebp
-       or      edi,            esi
-       mov     esi,            DWORD PTR 36[esp]
-       rol     ebp,            10
-       lea     ecx,            DWORD PTR 2400959708[edi+ecx]
-       mov     edi,            -1
-       add     ecx,            esi
-       mov     esi,            ebp
-       rol     ecx,            15
-       add     ecx,            ebx
+       sub     edx,            ecx
+       and     eax,            ebx
+       and     edx,            ebp
+       or      edx,            eax
+       mov     eax,            DWORD PTR 32[esp]
+       rol     ebp,            10
+       lea     edi,            DWORD PTR 2400959708[edx+edi]
+       mov     edx,            -1
+       add     edi,            eax
+       mov     eax,            ebp
+       rol     edi,            15
+       add     edi,            esi
        ; 54
-       sub     edi,            ebp
-       and     esi,            ecx
-       and     edi,            edx
-       or      edi,            esi
-       mov     esi,            DWORD PTR 52[esp]
-       rol     edx,            10
-       lea     ebx,            DWORD PTR 2400959708[edi+ebx]
-       mov     edi,            -1
-       add     ebx,            esi
-       mov     esi,            edx
-       rol     ebx,            9
-       add     ebx,            eax
+       sub     edx,            ebp
+       and     eax,            edi
+       and     edx,            ebx
+       or      edx,            eax
+       mov     eax,            DWORD PTR 48[esp]
+       rol     ebx,            10
+       lea     esi,            DWORD PTR 2400959708[edx+esi]
+       mov     edx,            -1
+       add     esi,            eax
+       mov     eax,            ebx
+       rol     esi,            9
+       add     esi,            ecx
        ; 55
-       sub     edi,            edx
-       and     esi,            ebx
-       and     edi,            ecx
-       or      edi,            esi
-       mov     esi,            DWORD PTR 20[esp]
-       rol     ecx,            10
-       lea     eax,            DWORD PTR 2400959708[edi+eax]
-       mov     edi,            -1
-       add     eax,            esi
-       mov     esi,            ecx
-       rol     eax,            8
-       add     eax,            ebp
+       sub     edx,            ebx
+       and     eax,            esi
+       and     edx,            edi
+       or      edx,            eax
+       mov     eax,            DWORD PTR 16[esp]
+       rol     edi,            10
+       lea     ecx,            DWORD PTR 2400959708[edx+ecx]
+       mov     edx,            -1
+       add     ecx,            eax
+       mov     eax,            edi
+       rol     ecx,            8
+       add     ecx,            ebp
        ; 56
-       sub     edi,            ecx
-       and     esi,            eax
-       and     edi,            ebx
-       or      edi,            esi
-       mov     esi,            DWORD PTR 56[esp]
-       rol     ebx,            10
-       lea     ebp,            DWORD PTR 2400959708[edi+ebp]
-       mov     edi,            -1
-       add     ebp,            esi
-       mov     esi,            ebx
+       sub     edx,            edi
+       and     eax,            ecx
+       and     edx,            esi
+       or      edx,            eax
+       mov     eax,            DWORD PTR 52[esp]
+       rol     esi,            10
+       lea     ebp,            DWORD PTR 2400959708[edx+ebp]
+       mov     edx,            -1
+       add     ebp,            eax
+       mov     eax,            esi
        rol     ebp,            9
-       add     ebp,            edx
+       add     ebp,            ebx
        ; 57
-       sub     edi,            ebx
-       and     esi,            ebp
-       and     edi,            eax
-       or      edi,            esi
-       mov     esi,            DWORD PTR 16[esp]
-       rol     eax,            10
-       lea     edx,            DWORD PTR 2400959708[edi+edx]
-       mov     edi,            -1
-       add     edx,            esi
-       mov     esi,            eax
-       rol     edx,            14
-       add     edx,            ecx
+       sub     edx,            esi
+       and     eax,            ebp
+       and     edx,            ecx
+       or      edx,            eax
+       mov     eax,            DWORD PTR 12[esp]
+       rol     ecx,            10
+       lea     ebx,            DWORD PTR 2400959708[edx+ebx]
+       mov     edx,            -1
+       add     ebx,            eax
+       mov     eax,            ecx
+       rol     ebx,            14
+       add     ebx,            edi
        ; 58
-       sub     edi,            eax
-       and     esi,            edx
-       and     edi,            ebp
-       or      edi,            esi
-       mov     esi,            DWORD PTR 32[esp]
-       rol     ebp,            10
-       lea     ecx,            DWORD PTR 2400959708[edi+ecx]
-       mov     edi,            -1
-       add     ecx,            esi
-       mov     esi,            ebp
-       rol     ecx,            5
-       add     ecx,            ebx
+       sub     edx,            ecx
+       and     eax,            ebx
+       and     edx,            ebp
+       or      edx,            eax
+       mov     eax,            DWORD PTR 28[esp]
+       rol     ebp,            10
+       lea     edi,            DWORD PTR 2400959708[edx+edi]
+       mov     edx,            -1
+       add     edi,            eax
+       mov     eax,            ebp
+       rol     edi,            5
+       add     edi,            esi
        ; 59
-       sub     edi,            ebp
-       and     esi,            ecx
-       and     edi,            edx
-       or      edi,            esi
-       mov     esi,            DWORD PTR 64[esp]
-       rol     edx,            10
-       lea     ebx,            DWORD PTR 2400959708[edi+ebx]
-       mov     edi,            -1
-       add     ebx,            esi
-       mov     esi,            edx
-       rol     ebx,            6
-       add     ebx,            eax
+       sub     edx,            ebp
+       and     eax,            edi
+       and     edx,            ebx
+       or      edx,            eax
+       mov     eax,            DWORD PTR 60[esp]
+       rol     ebx,            10
+       lea     esi,            DWORD PTR 2400959708[edx+esi]
+       mov     edx,            -1
+       add     esi,            eax
+       mov     eax,            ebx
+       rol     esi,            6
+       add     esi,            ecx
        ; 60
-       sub     edi,            edx
-       and     esi,            ebx
-       and     edi,            ecx
-       or      edi,            esi
-       mov     esi,            DWORD PTR 60[esp]
-       rol     ecx,            10
-       lea     eax,            DWORD PTR 2400959708[edi+eax]
-       mov     edi,            -1
-       add     eax,            esi
-       mov     esi,            ecx
-       rol     eax,            8
-       add     eax,            ebp
+       sub     edx,            ebx
+       and     eax,            esi
+       and     edx,            edi
+       or      edx,            eax
+       mov     eax,            DWORD PTR 56[esp]
+       rol     edi,            10
+       lea     ecx,            DWORD PTR 2400959708[edx+ecx]
+       mov     edx,            -1
+       add     ecx,            eax
+       mov     eax,            edi
+       rol     ecx,            8
+       add     ecx,            ebp
        ; 61
-       sub     edi,            ecx
-       and     esi,            eax
-       and     edi,            ebx
-       or      edi,            esi
-       mov     esi,            DWORD PTR 24[esp]
-       rol     ebx,            10
-       lea     ebp,            DWORD PTR 2400959708[edi+ebp]
-       mov     edi,            -1
-       add     ebp,            esi
-       mov     esi,            ebx
+       sub     edx,            edi
+       and     eax,            ecx
+       and     edx,            esi
+       or      edx,            eax
+       mov     eax,            DWORD PTR 20[esp]
+       rol     esi,            10
+       lea     ebp,            DWORD PTR 2400959708[edx+ebp]
+       mov     edx,            -1
+       add     ebp,            eax
+       mov     eax,            esi
        rol     ebp,            6
-       add     ebp,            edx
+       add     ebp,            ebx
        ; 62
-       sub     edi,            ebx
-       and     esi,            ebp
-       and     edi,            eax
-       or      edi,            esi
-       mov     esi,            DWORD PTR 28[esp]
-       rol     eax,            10
-       lea     edx,            DWORD PTR 2400959708[edi+edx]
-       mov     edi,            -1
-       add     edx,            esi
-       mov     esi,            eax
-       rol     edx,            5
-       add     edx,            ecx
+       sub     edx,            esi
+       and     eax,            ebp
+       and     edx,            ecx
+       or      edx,            eax
+       mov     eax,            DWORD PTR 24[esp]
+       rol     ecx,            10
+       lea     ebx,            DWORD PTR 2400959708[edx+ebx]
+       mov     edx,            -1
+       add     ebx,            eax
+       mov     eax,            ecx
+       rol     ebx,            5
+       add     ebx,            edi
        ; 63
-       sub     edi,            eax
-       and     esi,            edx
-       and     edi,            ebp
-       or      edi,            esi
-       mov     esi,            DWORD PTR 12[esp]
-       rol     ebp,            10
-       lea     ecx,            DWORD PTR 2400959708[edi+ecx]
-       mov     edi,            -1
-       add     ecx,            esi
-       sub     edi,            ebp
-       rol     ecx,            12
-       add     ecx,            ebx
+       sub     edx,            ecx
+       and     eax,            ebx
+       and     edx,            ebp
+       or      edx,            eax
+       mov     eax,            DWORD PTR 8[esp]
+       rol     ebp,            10
+       lea     edi,            DWORD PTR 2400959708[edx+edi]
+       mov     edx,            -1
+       add     edi,            eax
+       sub     edx,            ebp
+       rol     edi,            12
+       add     edi,            esi
        ; 64
-       mov     esi,            DWORD PTR 20[esp]
-       or      edi,            edx
-       add     ebx,            esi
-       xor     edi,            ecx
-       mov     esi,            -1
-       rol     edx,            10
-       lea     ebx,            DWORD PTR 2840853838[edi*1+ebx]
-       sub     esi,            edx
-       rol     ebx,            9
-       add     ebx,            eax
+       mov     eax,            DWORD PTR 16[esp]
+       or      edx,            ebx
+       add     esi,            eax
+       xor     edx,            edi
+       mov     eax,            -1
+       rol     ebx,            10
+       lea     esi,            DWORD PTR 2840853838[edx*1+esi]
+       sub     eax,            ebx
+       rol     esi,            9
+       add     esi,            ecx
        ; 65
-       mov     edi,            DWORD PTR 4[esp]
-       or      esi,            ecx
-       add     eax,            edi
-       xor     esi,            ebx
-       mov     edi,            -1
-       rol     ecx,            10
-       lea     eax,            DWORD PTR 2840853838[esi*1+eax]
-       sub     edi,            ecx
-       rol     eax,            15
-       add     eax,            ebp
+       mov     edx,            DWORD PTR [esp]
+       or      eax,            edi
+       add     ecx,            edx
+       xor     eax,            esi
+       mov     edx,            -1
+       rol     edi,            10
+       lea     ecx,            DWORD PTR 2840853838[eax*1+ecx]
+       sub     edx,            edi
+       rol     ecx,            15
+       add     ecx,            ebp
        ; 66
-       mov     esi,            DWORD PTR 24[esp]
-       or      edi,            ebx
-       add     ebp,            esi
-       xor     edi,            eax
-       mov     esi,            -1
-       rol     ebx,            10
-       lea     ebp,            DWORD PTR 2840853838[edi*1+ebp]
-       sub     esi,            ebx
+       mov     eax,            DWORD PTR 20[esp]
+       or      edx,            esi
+       add     ebp,            eax
+       xor     edx,            ecx
+       mov     eax,            -1
+       rol     esi,            10
+       lea     ebp,            DWORD PTR 2840853838[edx*1+ebp]
+       sub     eax,            esi
        rol     ebp,            5
-       add     ebp,            edx
+       add     ebp,            ebx
        ; 67
-       mov     edi,            DWORD PTR 40[esp]
-       or      esi,            eax
-       add     edx,            edi
-       xor     esi,            ebp
-       mov     edi,            -1
-       rol     eax,            10
-       lea     edx,            DWORD PTR 2840853838[esi*1+edx]
-       sub     edi,            eax
-       rol     edx,            11
-       add     edx,            ecx
+       mov     edx,            DWORD PTR 36[esp]
+       or      eax,            ecx
+       add     ebx,            edx
+       xor     eax,            ebp
+       mov     edx,            -1
+       rol     ecx,            10
+       lea     ebx,            DWORD PTR 2840853838[eax*1+ebx]
+       sub     edx,            ecx
+       rol     ebx,            11
+       add     ebx,            edi
        ; 68
-       mov     esi,            DWORD PTR 32[esp]
-       or      edi,            ebp
-       add     ecx,            esi
-       xor     edi,            edx
-       mov     esi,            -1
-       rol     ebp,            10
-       lea     ecx,            DWORD PTR 2840853838[edi*1+ecx]
-       sub     esi,            ebp
-       rol     ecx,            6
-       add     ecx,            ebx
+       mov     eax,            DWORD PTR 28[esp]
+       or      edx,            ebp
+       add     edi,            eax
+       xor     edx,            ebx
+       mov     eax,            -1
+       rol     ebp,            10
+       lea     edi,            DWORD PTR 2840853838[edx*1+edi]
+       sub     eax,            ebp
+       rol     edi,            6
+       add     edi,            esi
        ; 69
-       mov     edi,            DWORD PTR 52[esp]
-       or      esi,            edx
-       add     ebx,            edi
-       xor     esi,            ecx
-       mov     edi,            -1
-       rol     edx,            10
-       lea     ebx,            DWORD PTR 2840853838[esi*1+ebx]
-       sub     edi,            edx
-       rol     ebx,            8
-       add     ebx,            eax
+       mov     edx,            DWORD PTR 48[esp]
+       or      eax,            ebx
+       add     esi,            edx
+       xor     eax,            edi
+       mov     edx,            -1
+       rol     ebx,            10
+       lea     esi,            DWORD PTR 2840853838[eax*1+esi]
+       sub     edx,            ebx
+       rol     esi,            8
+       add     esi,            ecx
        ; 70
-       mov     esi,            DWORD PTR 12[esp]
-       or      edi,            ecx
-       add     eax,            esi
-       xor     edi,            ebx
-       mov     esi,            -1
-       rol     ecx,            10
-       lea     eax,            DWORD PTR 2840853838[edi*1+eax]
-       sub     esi,            ecx
-       rol     eax,            13
-       add     eax,            ebp
+       mov     eax,            DWORD PTR 8[esp]
+       or      edx,            edi
+       add     ecx,            eax
+       xor     edx,            esi
+       mov     eax,            -1
+       rol     edi,            10
+       lea     ecx,            DWORD PTR 2840853838[edx*1+ecx]
+       sub     eax,            edi
+       rol     ecx,            13
+       add     ecx,            ebp
        ; 71
-       mov     edi,            DWORD PTR 44[esp]
-       or      esi,            ebx
-       add     ebp,            edi
-       xor     esi,            eax
-       mov     edi,            -1
-       rol     ebx,            10
-       lea     ebp,            DWORD PTR 2840853838[esi*1+ebp]
-       sub     edi,            ebx
-       rol     ebp,            12
+       mov     edx,            DWORD PTR 40[esp]
+       or      eax,            esi
        add     ebp,            edx
+       xor     eax,            ecx
+       mov     edx,            -1
+       rol     esi,            10
+       lea     ebp,            DWORD PTR 2840853838[eax*1+ebp]
+       sub     edx,            esi
+       rol     ebp,            12
+       add     ebp,            ebx
        ; 72
-       mov     esi,            DWORD PTR 60[esp]
-       or      edi,            eax
-       add     edx,            esi
-       xor     edi,            ebp
-       mov     esi,            -1
-       rol     eax,            10
-       lea     edx,            DWORD PTR 2840853838[edi*1+edx]
-       sub     esi,            eax
-       rol     edx,            5
-       add     edx,            ecx
+       mov     eax,            DWORD PTR 56[esp]
+       or      edx,            ecx
+       add     ebx,            eax
+       xor     edx,            ebp
+       mov     eax,            -1
+       rol     ecx,            10
+       lea     ebx,            DWORD PTR 2840853838[edx*1+ebx]
+       sub     eax,            ecx
+       rol     ebx,            5
+       add     ebx,            edi
        ; 73
-       mov     edi,            DWORD PTR 8[esp]
-       or      esi,            ebp
-       add     ecx,            edi
-       xor     esi,            edx
-       mov     edi,            -1
-       rol     ebp,            10
-       lea     ecx,            DWORD PTR 2840853838[esi*1+ecx]
-       sub     edi,            ebp
-       rol     ecx,            12
-       add     ecx,            ebx
+       mov     edx,            DWORD PTR 4[esp]
+       or      eax,            ebp
+       add     edi,            edx
+       xor     eax,            ebx
+       mov     edx,            -1
+       rol     ebp,            10
+       lea     edi,            DWORD PTR 2840853838[eax*1+edi]
+       sub     edx,            ebp
+       rol     edi,            12
+       add     edi,            esi
        ; 74
-       mov     esi,            DWORD PTR 16[esp]
-       or      edi,            edx
-       add     ebx,            esi
-       xor     edi,            ecx
-       mov     esi,            -1
-       rol     edx,            10
-       lea     ebx,            DWORD PTR 2840853838[edi*1+ebx]
-       sub     esi,            edx
-       rol     ebx,            13
-       add     ebx,            eax
+       mov     eax,            DWORD PTR 12[esp]
+       or      edx,            ebx
+       add     esi,            eax
+       xor     edx,            edi
+       mov     eax,            -1
+       rol     ebx,            10
+       lea     esi,            DWORD PTR 2840853838[edx*1+esi]
+       sub     eax,            ebx
+       rol     esi,            13
+       add     esi,            ecx
        ; 75
-       mov     edi,            DWORD PTR 36[esp]
-       or      esi,            ecx
-       add     eax,            edi
-       xor     esi,            ebx
-       mov     edi,            -1
-       rol     ecx,            10
-       lea     eax,            DWORD PTR 2840853838[esi*1+eax]
-       sub     edi,            ecx
-       rol     eax,            14
-       add     eax,            ebp
+       mov     edx,            DWORD PTR 32[esp]
+       or      eax,            edi
+       add     ecx,            edx
+       xor     eax,            esi
+       mov     edx,            -1
+       rol     edi,            10
+       lea     ecx,            DWORD PTR 2840853838[eax*1+ecx]
+       sub     edx,            edi
+       rol     ecx,            14
+       add     ecx,            ebp
        ; 76
-       mov     esi,            DWORD PTR 48[esp]
-       or      edi,            ebx
-       add     ebp,            esi
-       xor     edi,            eax
-       mov     esi,            -1
-       rol     ebx,            10
-       lea     ebp,            DWORD PTR 2840853838[edi*1+ebp]
-       sub     esi,            ebx
+       mov     eax,            DWORD PTR 44[esp]
+       or      edx,            esi
+       add     ebp,            eax
+       xor     edx,            ecx
+       mov     eax,            -1
+       rol     esi,            10
+       lea     ebp,            DWORD PTR 2840853838[edx*1+ebp]
+       sub     eax,            esi
        rol     ebp,            11
-       add     ebp,            edx
+       add     ebp,            ebx
        ; 77
-       mov     edi,            DWORD PTR 28[esp]
-       or      esi,            eax
-       add     edx,            edi
-       xor     esi,            ebp
-       mov     edi,            -1
-       rol     eax,            10
-       lea     edx,            DWORD PTR 2840853838[esi*1+edx]
-       sub     edi,            eax
-       rol     edx,            8
-       add     edx,            ecx
+       mov     edx,            DWORD PTR 24[esp]
+       or      eax,            ecx
+       add     ebx,            edx
+       xor     eax,            ebp
+       mov     edx,            -1
+       rol     ecx,            10
+       lea     ebx,            DWORD PTR 2840853838[eax*1+ebx]
+       sub     edx,            ecx
+       rol     ebx,            8
+       add     ebx,            edi
        ; 78
-       mov     esi,            DWORD PTR 64[esp]
-       or      edi,            ebp
-       add     ecx,            esi
-       xor     edi,            edx
-       mov     esi,            -1
-       rol     ebp,            10
-       lea     ecx,            DWORD PTR 2840853838[edi*1+ecx]
-       sub     esi,            ebp
-       rol     ecx,            5
-       add     ecx,            ebx
+       mov     eax,            DWORD PTR 60[esp]
+       or      edx,            ebp
+       add     edi,            eax
+       xor     edx,            ebx
+       mov     eax,            -1
+       rol     ebp,            10
+       lea     edi,            DWORD PTR 2840853838[edx*1+edi]
+       sub     eax,            ebp
+       rol     edi,            5
+       add     edi,            esi
        ; 79
-       mov     edi,            DWORD PTR 56[esp]
-       or      esi,            edx
-       add     ebx,            edi
-       xor     esi,            ecx
-       mov     edi,            DWORD PTR 108[esp]
-       rol     edx,            10
-       lea     ebx,            DWORD PTR 2840853838[esi*1+ebx]
-       mov     DWORD PTR 68[esp],eax
-       rol     ebx,            6
-       add     ebx,            eax
-       mov     eax,            DWORD PTR [edi]
-       mov     DWORD PTR 72[esp],ebx
-       mov     DWORD PTR 76[esp],ecx
-       mov     ebx,            DWORD PTR 4[edi]
-       mov     DWORD PTR 80[esp],edx
-       mov     ecx,            DWORD PTR 8[edi]
-       mov     DWORD PTR 84[esp],ebp
-       mov     edx,            DWORD PTR 12[edi]
-       mov     ebp,            DWORD PTR 16[edi]
+       mov     edx,            DWORD PTR 52[esp]
+       or      eax,            ebx
+       add     esi,            edx
+       xor     eax,            edi
+       mov     edx,            DWORD PTR 128[esp]
+       rol     ebx,            10
+       lea     esi,            DWORD PTR 2840853838[eax*1+esi]
+       mov     DWORD PTR 64[esp],ecx
+       rol     esi,            6
+       add     esi,            ecx
+       mov     ecx,            DWORD PTR [edx]
+       mov     DWORD PTR 68[esp],esi
+       mov     DWORD PTR 72[esp],edi
+       mov     esi,            DWORD PTR 4[edx]
+       mov     DWORD PTR 76[esp],ebx
+       mov     edi,            DWORD PTR 8[edx]
+       mov     DWORD PTR 80[esp],ebp
+       mov     ebx,            DWORD PTR 12[edx]
+       mov     ebp,            DWORD PTR 16[edx]
        ; 80
-       mov     edi,            -1
-       sub     edi,            edx
-       mov     esi,            DWORD PTR 24[esp]
-       or      edi,            ecx
-       add     eax,            esi
-       xor     edi,            ebx
-       mov     esi,            -1
-       rol     ecx,            10
-       lea     eax,            DWORD PTR 1352829926[edi*1+eax]
-       sub     esi,            ecx
-       rol     eax,            8
-       add     eax,            ebp
+       mov     edx,            -1
+       sub     edx,            ebx
+       mov     eax,            DWORD PTR 20[esp]
+       or      edx,            edi
+       add     ecx,            eax
+       xor     edx,            esi
+       mov     eax,            -1
+       rol     edi,            10
+       lea     ecx,            DWORD PTR 1352829926[edx*1+ecx]
+       sub     eax,            edi
+       rol     ecx,            8
+       add     ecx,            ebp
        ; 81
-       mov     edi,            DWORD PTR 60[esp]
-       or      esi,            ebx
-       add     ebp,            edi
-       xor     esi,            eax
-       mov     edi,            -1
-       rol     ebx,            10
-       lea     ebp,            DWORD PTR 1352829926[esi*1+ebp]
-       sub     edi,            ebx
-       rol     ebp,            9
+       mov     edx,            DWORD PTR 56[esp]
+       or      eax,            esi
        add     ebp,            edx
+       xor     eax,            ecx
+       mov     edx,            -1
+       rol     esi,            10
+       lea     ebp,            DWORD PTR 1352829926[eax*1+ebp]
+       sub     edx,            esi
+       rol     ebp,            9
+       add     ebp,            ebx
        ; 82
-       mov     esi,            DWORD PTR 32[esp]
-       or      edi,            eax
-       add     edx,            esi
-       xor     edi,            ebp
-       mov     esi,            -1
-       rol     eax,            10
-       lea     edx,            DWORD PTR 1352829926[edi*1+edx]
-       sub     esi,            eax
-       rol     edx,            9
-       add     edx,            ecx
+       mov     eax,            DWORD PTR 28[esp]
+       or      edx,            ecx
+       add     ebx,            eax
+       xor     edx,            ebp
+       mov     eax,            -1
+       rol     ecx,            10
+       lea     ebx,            DWORD PTR 1352829926[edx*1+ebx]
+       sub     eax,            ecx
+       rol     ebx,            9
+       add     ebx,            edi
        ; 83
-       mov     edi,            DWORD PTR 4[esp]
-       or      esi,            ebp
-       add     ecx,            edi
-       xor     esi,            edx
-       mov     edi,            -1
-       rol     ebp,            10
-       lea     ecx,            DWORD PTR 1352829926[esi*1+ecx]
-       sub     edi,            ebp
-       rol     ecx,            11
-       add     ecx,            ebx
+       mov     edx,            DWORD PTR [esp]
+       or      eax,            ebp
+       add     edi,            edx
+       xor     eax,            ebx
+       mov     edx,            -1
+       rol     ebp,            10
+       lea     edi,            DWORD PTR 1352829926[eax*1+edi]
+       sub     edx,            ebp
+       rol     edi,            11
+       add     edi,            esi
        ; 84
-       mov     esi,            DWORD PTR 40[esp]
-       or      edi,            edx
-       add     ebx,            esi
-       xor     edi,            ecx
-       mov     esi,            -1
-       rol     edx,            10
-       lea     ebx,            DWORD PTR 1352829926[edi*1+ebx]
-       sub     esi,            edx
-       rol     ebx,            13
-       add     ebx,            eax
+       mov     eax,            DWORD PTR 36[esp]
+       or      edx,            ebx
+       add     esi,            eax
+       xor     edx,            edi
+       mov     eax,            -1
+       rol     ebx,            10
+       lea     esi,            DWORD PTR 1352829926[edx*1+esi]
+       sub     eax,            ebx
+       rol     esi,            13
+       add     esi,            ecx
        ; 85
-       mov     edi,            DWORD PTR 12[esp]
-       or      esi,            ecx
-       add     eax,            edi
-       xor     esi,            ebx
-       mov     edi,            -1
-       rol     ecx,            10
-       lea     eax,            DWORD PTR 1352829926[esi*1+eax]
-       sub     edi,            ecx
-       rol     eax,            15
-       add     eax,            ebp
+       mov     edx,            DWORD PTR 8[esp]
+       or      eax,            edi
+       add     ecx,            edx
+       xor     eax,            esi
+       mov     edx,            -1
+       rol     edi,            10
+       lea     ecx,            DWORD PTR 1352829926[eax*1+ecx]
+       sub     edx,            edi
+       rol     ecx,            15
+       add     ecx,            ebp
        ; 86
-       mov     esi,            DWORD PTR 48[esp]
-       or      edi,            ebx
-       add     ebp,            esi
-       xor     edi,            eax
-       mov     esi,            -1
-       rol     ebx,            10
-       lea     ebp,            DWORD PTR 1352829926[edi*1+ebp]
-       sub     esi,            ebx
+       mov     eax,            DWORD PTR 44[esp]
+       or      edx,            esi
+       add     ebp,            eax
+       xor     edx,            ecx
+       mov     eax,            -1
+       rol     esi,            10
+       lea     ebp,            DWORD PTR 1352829926[edx*1+ebp]
+       sub     eax,            esi
        rol     ebp,            15
-       add     ebp,            edx
+       add     ebp,            ebx
        ; 87
-       mov     edi,            DWORD PTR 20[esp]
-       or      esi,            eax
-       add     edx,            edi
-       xor     esi,            ebp
-       mov     edi,            -1
-       rol     eax,            10
-       lea     edx,            DWORD PTR 1352829926[esi*1+edx]
-       sub     edi,            eax
-       rol     edx,            5
-       add     edx,            ecx
+       mov     edx,            DWORD PTR 16[esp]
+       or      eax,            ecx
+       add     ebx,            edx
+       xor     eax,            ebp
+       mov     edx,            -1
+       rol     ecx,            10
+       lea     ebx,            DWORD PTR 1352829926[eax*1+ebx]
+       sub     edx,            ecx
+       rol     ebx,            5
+       add     ebx,            edi
        ; 88
-       mov     esi,            DWORD PTR 56[esp]
-       or      edi,            ebp
-       add     ecx,            esi
-       xor     edi,            edx
-       mov     esi,            -1
-       rol     ebp,            10
-       lea     ecx,            DWORD PTR 1352829926[edi*1+ecx]
-       sub     esi,            ebp
-       rol     ecx,            7
-       add     ecx,            ebx
+       mov     eax,            DWORD PTR 52[esp]
+       or      edx,            ebp
+       add     edi,            eax
+       xor     edx,            ebx
+       mov     eax,            -1
+       rol     ebp,            10
+       lea     edi,            DWORD PTR 1352829926[edx*1+edi]
+       sub     eax,            ebp
+       rol     edi,            7
+       add     edi,            esi
        ; 89
-       mov     edi,            DWORD PTR 28[esp]
-       or      esi,            edx
-       add     ebx,            edi
-       xor     esi,            ecx
-       mov     edi,            -1
-       rol     edx,            10
-       lea     ebx,            DWORD PTR 1352829926[esi*1+ebx]
-       sub     edi,            edx
-       rol     ebx,            7
-       add     ebx,            eax
+       mov     edx,            DWORD PTR 24[esp]
+       or      eax,            ebx
+       add     esi,            edx
+       xor     eax,            edi
+       mov     edx,            -1
+       rol     ebx,            10
+       lea     esi,            DWORD PTR 1352829926[eax*1+esi]
+       sub     edx,            ebx
+       rol     esi,            7
+       add     esi,            ecx
        ; 90
-       mov     esi,            DWORD PTR 64[esp]
-       or      edi,            ecx
-       add     eax,            esi
-       xor     edi,            ebx
-       mov     esi,            -1
-       rol     ecx,            10
-       lea     eax,            DWORD PTR 1352829926[edi*1+eax]
-       sub     esi,            ecx
-       rol     eax,            8
-       add     eax,            ebp
+       mov     eax,            DWORD PTR 60[esp]
+       or      edx,            edi
+       add     ecx,            eax
+       xor     edx,            esi
+       mov     eax,            -1
+       rol     edi,            10
+       lea     ecx,            DWORD PTR 1352829926[edx*1+ecx]
+       sub     eax,            edi
+       rol     ecx,            8
+       add     ecx,            ebp
        ; 91
-       mov     edi,            DWORD PTR 36[esp]
-       or      esi,            ebx
-       add     ebp,            edi
-       xor     esi,            eax
-       mov     edi,            -1
-       rol     ebx,            10
-       lea     ebp,            DWORD PTR 1352829926[esi*1+ebp]
-       sub     edi,            ebx
-       rol     ebp,            11
+       mov     edx,            DWORD PTR 32[esp]
+       or      eax,            esi
        add     ebp,            edx
+       xor     eax,            ecx
+       mov     edx,            -1
+       rol     esi,            10
+       lea     ebp,            DWORD PTR 1352829926[eax*1+ebp]
+       sub     edx,            esi
+       rol     ebp,            11
+       add     ebp,            ebx
        ; 92
-       mov     esi,            DWORD PTR 8[esp]
-       or      edi,            eax
-       add     edx,            esi
-       xor     edi,            ebp
-       mov     esi,            -1
-       rol     eax,            10
-       lea     edx,            DWORD PTR 1352829926[edi*1+edx]
-       sub     esi,            eax
-       rol     edx,            14
-       add     edx,            ecx
+       mov     eax,            DWORD PTR 4[esp]
+       or      edx,            ecx
+       add     ebx,            eax
+       xor     edx,            ebp
+       mov     eax,            -1
+       rol     ecx,            10
+       lea     ebx,            DWORD PTR 1352829926[edx*1+ebx]
+       sub     eax,            ecx
+       rol     ebx,            14
+       add     ebx,            edi
        ; 93
-       mov     edi,            DWORD PTR 44[esp]
-       or      esi,            ebp
-       add     ecx,            edi
-       xor     esi,            edx
-       mov     edi,            -1
-       rol     ebp,            10
-       lea     ecx,            DWORD PTR 1352829926[esi*1+ecx]
-       sub     edi,            ebp
-       rol     ecx,            14
-       add     ecx,            ebx
+       mov     edx,            DWORD PTR 40[esp]
+       or      eax,            ebp
+       add     edi,            edx
+       xor     eax,            ebx
+       mov     edx,            -1
+       rol     ebp,            10
+       lea     edi,            DWORD PTR 1352829926[eax*1+edi]
+       sub     edx,            ebp
+       rol     edi,            14
+       add     edi,            esi
        ; 94
-       mov     esi,            DWORD PTR 16[esp]
-       or      edi,            edx
-       add     ebx,            esi
-       xor     edi,            ecx
-       mov     esi,            -1
-       rol     edx,            10
-       lea     ebx,            DWORD PTR 1352829926[edi*1+ebx]
-       sub     esi,            edx
-       rol     ebx,            12
-       add     ebx,            eax
+       mov     eax,            DWORD PTR 12[esp]
+       or      edx,            ebx
+       add     esi,            eax
+       xor     edx,            edi
+       mov     eax,            -1
+       rol     ebx,            10
+       lea     esi,            DWORD PTR 1352829926[edx*1+esi]
+       sub     eax,            ebx
+       rol     esi,            12
+       add     esi,            ecx
        ; 95
-       mov     edi,            DWORD PTR 52[esp]
-       or      esi,            ecx
-       add     eax,            edi
-       xor     esi,            ebx
-       mov     edi,            -1
-       rol     ecx,            10
-       lea     eax,            DWORD PTR 1352829926[esi*1+eax]
-       mov     esi,            ecx
-       rol     eax,            6
-       add     eax,            ebp
+       mov     edx,            DWORD PTR 48[esp]
+       or      eax,            edi
+       add     ecx,            edx
+       xor     eax,            esi
+       mov     edx,            -1
+       rol     edi,            10
+       lea     ecx,            DWORD PTR 1352829926[eax*1+ecx]
+       mov     eax,            edi
+       rol     ecx,            6
+       add     ecx,            ebp
        ; 96
-       sub     edi,            ecx
-       and     esi,            eax
-       and     edi,            ebx
-       or      edi,            esi
-       mov     esi,            DWORD PTR 28[esp]
-       rol     ebx,            10
-       lea     ebp,            DWORD PTR 1548603684[edi+ebp]
-       mov     edi,            -1
-       add     ebp,            esi
-       mov     esi,            ebx
+       sub     edx,            edi
+       and     eax,            ecx
+       and     edx,            esi
+       or      edx,            eax
+       mov     eax,            DWORD PTR 24[esp]
+       rol     esi,            10
+       lea     ebp,            DWORD PTR 1548603684[edx+ebp]
+       mov     edx,            -1
+       add     ebp,            eax
+       mov     eax,            esi
        rol     ebp,            9
-       add     ebp,            edx
+       add     ebp,            ebx
        ; 97
-       sub     edi,            ebx
-       and     esi,            ebp
-       and     edi,            eax
-       or      edi,            esi
-       mov     esi,            DWORD PTR 48[esp]
-       rol     eax,            10
-       lea     edx,            DWORD PTR 1548603684[edi+edx]
-       mov     edi,            -1
-       add     edx,            esi
-       mov     esi,            eax
-       rol     edx,            13
-       add     edx,            ecx
+       sub     edx,            esi
+       and     eax,            ebp
+       and     edx,            ecx
+       or      edx,            eax
+       mov     eax,            DWORD PTR 44[esp]
+       rol     ecx,            10
+       lea     ebx,            DWORD PTR 1548603684[edx+ebx]
+       mov     edx,            -1
+       add     ebx,            eax
+       mov     eax,            ecx
+       rol     ebx,            13
+       add     ebx,            edi
        ; 98
-       sub     edi,            eax
-       and     esi,            edx
-       and     edi,            ebp
-       or      edi,            esi
-       mov     esi,            DWORD PTR 16[esp]
-       rol     ebp,            10
-       lea     ecx,            DWORD PTR 1548603684[edi+ecx]
-       mov     edi,            -1
-       add     ecx,            esi
-       mov     esi,            ebp
-       rol     ecx,            15
-       add     ecx,            ebx
+       sub     edx,            ecx
+       and     eax,            ebx
+       and     edx,            ebp
+       or      edx,            eax
+       mov     eax,            DWORD PTR 12[esp]
+       rol     ebp,            10
+       lea     edi,            DWORD PTR 1548603684[edx+edi]
+       mov     edx,            -1
+       add     edi,            eax
+       mov     eax,            ebp
+       rol     edi,            15
+       add     edi,            esi
        ; 99
-       sub     edi,            ebp
-       and     esi,            ecx
-       and     edi,            edx
-       or      edi,            esi
-       mov     esi,            DWORD PTR 32[esp]
-       rol     edx,            10
-       lea     ebx,            DWORD PTR 1548603684[edi+ebx]
-       mov     edi,            -1
-       add     ebx,            esi
-       mov     esi,            edx
-       rol     ebx,            7
-       add     ebx,            eax
+       sub     edx,            ebp
+       and     eax,            edi
+       and     edx,            ebx
+       or      edx,            eax
+       mov     eax,            DWORD PTR 28[esp]
+       rol     ebx,            10
+       lea     esi,            DWORD PTR 1548603684[edx+esi]
+       mov     edx,            -1
+       add     esi,            eax
+       mov     eax,            ebx
+       rol     esi,            7
+       add     esi,            ecx
        ; 100
-       sub     edi,            edx
-       and     esi,            ebx
-       and     edi,            ecx
-       or      edi,            esi
-       mov     esi,            DWORD PTR 4[esp]
-       rol     ecx,            10
-       lea     eax,            DWORD PTR 1548603684[edi+eax]
-       mov     edi,            -1
-       add     eax,            esi
-       mov     esi,            ecx
-       rol     eax,            12
-       add     eax,            ebp
+       sub     edx,            ebx
+       and     eax,            esi
+       and     edx,            edi
+       or      edx,            eax
+       mov     eax,            DWORD PTR [esp]
+       rol     edi,            10
+       lea     ecx,            DWORD PTR 1548603684[edx+ecx]
+       mov     edx,            -1
+       add     ecx,            eax
+       mov     eax,            edi
+       rol     ecx,            12
+       add     ecx,            ebp
        ; 101
-       sub     edi,            ecx
-       and     esi,            eax
-       and     edi,            ebx
-       or      edi,            esi
-       mov     esi,            DWORD PTR 56[esp]
-       rol     ebx,            10
-       lea     ebp,            DWORD PTR 1548603684[edi+ebp]
-       mov     edi,            -1
-       add     ebp,            esi
-       mov     esi,            ebx
+       sub     edx,            edi
+       and     eax,            ecx
+       and     edx,            esi
+       or      edx,            eax
+       mov     eax,            DWORD PTR 52[esp]
+       rol     esi,            10
+       lea     ebp,            DWORD PTR 1548603684[edx+ebp]
+       mov     edx,            -1
+       add     ebp,            eax
+       mov     eax,            esi
        rol     ebp,            8
-       add     ebp,            edx
+       add     ebp,            ebx
        ; 102
-       sub     edi,            ebx
-       and     esi,            ebp
-       and     edi,            eax
-       or      edi,            esi
-       mov     esi,            DWORD PTR 24[esp]
-       rol     eax,            10
-       lea     edx,            DWORD PTR 1548603684[edi+edx]
-       mov     edi,            -1
-       add     edx,            esi
-       mov     esi,            eax
-       rol     edx,            9
-       add     edx,            ecx
+       sub     edx,            esi
+       and     eax,            ebp
+       and     edx,            ecx
+       or      edx,            eax
+       mov     eax,            DWORD PTR 20[esp]
+       rol     ecx,            10
+       lea     ebx,            DWORD PTR 1548603684[edx+ebx]
+       mov     edx,            -1
+       add     ebx,            eax
+       mov     eax,            ecx
+       rol     ebx,            9
+       add     ebx,            edi
        ; 103
-       sub     edi,            eax
-       and     esi,            edx
-       and     edi,            ebp
-       or      edi,            esi
-       mov     esi,            DWORD PTR 44[esp]
-       rol     ebp,            10
-       lea     ecx,            DWORD PTR 1548603684[edi+ecx]
-       mov     edi,            -1
-       add     ecx,            esi
-       mov     esi,            ebp
-       rol     ecx,            11
-       add     ecx,            ebx
+       sub     edx,            ecx
+       and     eax,            ebx
+       and     edx,            ebp
+       or      edx,            eax
+       mov     eax,            DWORD PTR 40[esp]
+       rol     ebp,            10
+       lea     edi,            DWORD PTR 1548603684[edx+edi]
+       mov     edx,            -1
+       add     edi,            eax
+       mov     eax,            ebp
+       rol     edi,            11
+       add     edi,            esi
        ; 104
-       sub     edi,            ebp
-       and     esi,            ecx
-       and     edi,            edx
-       or      edi,            esi
-       mov     esi,            DWORD PTR 60[esp]
-       rol     edx,            10
-       lea     ebx,            DWORD PTR 1548603684[edi+ebx]
-       mov     edi,            -1
-       add     ebx,            esi
-       mov     esi,            edx
-       rol     ebx,            7
-       add     ebx,            eax
+       sub     edx,            ebp
+       and     eax,            edi
+       and     edx,            ebx
+       or      edx,            eax
+       mov     eax,            DWORD PTR 56[esp]
+       rol     ebx,            10
+       lea     esi,            DWORD PTR 1548603684[edx+esi]
+       mov     edx,            -1
+       add     esi,            eax
+       mov     eax,            ebx
+       rol     esi,            7
+       add     esi,            ecx
        ; 105
-       sub     edi,            edx
-       and     esi,            ebx
-       and     edi,            ecx
-       or      edi,            esi
-       mov     esi,            DWORD PTR 64[esp]
-       rol     ecx,            10
-       lea     eax,            DWORD PTR 1548603684[edi+eax]
-       mov     edi,            -1
-       add     eax,            esi
-       mov     esi,            ecx
-       rol     eax,            7
-       add     eax,            ebp
+       sub     edx,            ebx
+       and     eax,            esi
+       and     edx,            edi
+       or      edx,            eax
+       mov     eax,            DWORD PTR 60[esp]
+       rol     edi,            10
+       lea     ecx,            DWORD PTR 1548603684[edx+ecx]
+       mov     edx,            -1
+       add     ecx,            eax
+       mov     eax,            edi
+       rol     ecx,            7
+       add     ecx,            ebp
        ; 106
-       sub     edi,            ecx
-       and     esi,            eax
-       and     edi,            ebx
-       or      edi,            esi
-       mov     esi,            DWORD PTR 36[esp]
-       rol     ebx,            10
-       lea     ebp,            DWORD PTR 1548603684[edi+ebp]
-       mov     edi,            -1
-       add     ebp,            esi
-       mov     esi,            ebx
+       sub     edx,            edi
+       and     eax,            ecx
+       and     edx,            esi
+       or      edx,            eax
+       mov     eax,            DWORD PTR 32[esp]
+       rol     esi,            10
+       lea     ebp,            DWORD PTR 1548603684[edx+ebp]
+       mov     edx,            -1
+       add     ebp,            eax
+       mov     eax,            esi
        rol     ebp,            12
-       add     ebp,            edx
+       add     ebp,            ebx
        ; 107
-       sub     edi,            ebx
-       and     esi,            ebp
-       and     edi,            eax
-       or      edi,            esi
-       mov     esi,            DWORD PTR 52[esp]
-       rol     eax,            10
-       lea     edx,            DWORD PTR 1548603684[edi+edx]
-       mov     edi,            -1
-       add     edx,            esi
-       mov     esi,            eax
-       rol     edx,            7
-       add     edx,            ecx
+       sub     edx,            esi
+       and     eax,            ebp
+       and     edx,            ecx
+       or      edx,            eax
+       mov     eax,            DWORD PTR 48[esp]
+       rol     ecx,            10
+       lea     ebx,            DWORD PTR 1548603684[edx+ebx]
+       mov     edx,            -1
+       add     ebx,            eax
+       mov     eax,            ecx
+       rol     ebx,            7
+       add     ebx,            edi
        ; 108
-       sub     edi,            eax
-       and     esi,            edx
-       and     edi,            ebp
-       or      edi,            esi
-       mov     esi,            DWORD PTR 20[esp]
-       rol     ebp,            10
-       lea     ecx,            DWORD PTR 1548603684[edi+ecx]
-       mov     edi,            -1
-       add     ecx,            esi
-       mov     esi,            ebp
-       rol     ecx,            6
-       add     ecx,            ebx
+       sub     edx,            ecx
+       and     eax,            ebx
+       and     edx,            ebp
+       or      edx,            eax
+       mov     eax,            DWORD PTR 16[esp]
+       rol     ebp,            10
+       lea     edi,            DWORD PTR 1548603684[edx+edi]
+       mov     edx,            -1
+       add     edi,            eax
+       mov     eax,            ebp
+       rol     edi,            6
+       add     edi,            esi
        ; 109
-       sub     edi,            ebp
-       and     esi,            ecx
-       and     edi,            edx
-       or      edi,            esi
-       mov     esi,            DWORD PTR 40[esp]
-       rol     edx,            10
-       lea     ebx,            DWORD PTR 1548603684[edi+ebx]
-       mov     edi,            -1
-       add     ebx,            esi
-       mov     esi,            edx
-       rol     ebx,            15
-       add     ebx,            eax
+       sub     edx,            ebp
+       and     eax,            edi
+       and     edx,            ebx
+       or      edx,            eax
+       mov     eax,            DWORD PTR 36[esp]
+       rol     ebx,            10
+       lea     esi,            DWORD PTR 1548603684[edx+esi]
+       mov     edx,            -1
+       add     esi,            eax
+       mov     eax,            ebx
+       rol     esi,            15
+       add     esi,            ecx
        ; 110
-       sub     edi,            edx
-       and     esi,            ebx
-       and     edi,            ecx
-       or      edi,            esi
-       mov     esi,            DWORD PTR 8[esp]
-       rol     ecx,            10
-       lea     eax,            DWORD PTR 1548603684[edi+eax]
-       mov     edi,            -1
-       add     eax,            esi
-       mov     esi,            ecx
-       rol     eax,            13
-       add     eax,            ebp
+       sub     edx,            ebx
+       and     eax,            esi
+       and     edx,            edi
+       or      edx,            eax
+       mov     eax,            DWORD PTR 4[esp]
+       rol     edi,            10
+       lea     ecx,            DWORD PTR 1548603684[edx+ecx]
+       mov     edx,            -1
+       add     ecx,            eax
+       mov     eax,            edi
+       rol     ecx,            13
+       add     ecx,            ebp
        ; 111
-       sub     edi,            ecx
-       and     esi,            eax
-       and     edi,            ebx
-       or      edi,            esi
-       mov     esi,            DWORD PTR 12[esp]
-       rol     ebx,            10
-       lea     ebp,            DWORD PTR 1548603684[edi+ebp]
-       mov     edi,            -1
-       add     ebp,            esi
-       sub     edi,            eax
+       sub     edx,            edi
+       and     eax,            ecx
+       and     edx,            esi
+       or      edx,            eax
+       mov     eax,            DWORD PTR 8[esp]
+       rol     esi,            10
+       lea     ebp,            DWORD PTR 1548603684[edx+ebp]
+       mov     edx,            -1
+       add     ebp,            eax
+       sub     edx,            ecx
        rol     ebp,            11
-       add     ebp,            edx
+       add     ebp,            ebx
        ; 112
-       mov     esi,            DWORD PTR 64[esp]
-       or      edi,            ebp
-       add     edx,            esi
-       xor     edi,            ebx
-       mov     esi,            -1
-       rol     eax,            10
-       lea     edx,            DWORD PTR 1836072691[edi*1+edx]
-       sub     esi,            ebp
-       rol     edx,            9
-       add     edx,            ecx
+       mov     eax,            DWORD PTR 60[esp]
+       or      edx,            ebp
+       add     ebx,            eax
+       xor     edx,            esi
+       mov     eax,            -1
+       rol     ecx,            10
+       lea     ebx,            DWORD PTR 1836072691[edx*1+ebx]
+       sub     eax,            ebp
+       rol     ebx,            9
+       add     ebx,            edi
        ; 113
-       mov     edi,            DWORD PTR 24[esp]
-       or      esi,            edx
-       add     ecx,            edi
-       xor     esi,            eax
-       mov     edi,            -1
-       rol     ebp,            10
-       lea     ecx,            DWORD PTR 1836072691[esi*1+ecx]
-       sub     edi,            edx
-       rol     ecx,            7
-       add     ecx,            ebx
+       mov     edx,            DWORD PTR 20[esp]
+       or      eax,            ebx
+       add     edi,            edx
+       xor     eax,            ecx
+       mov     edx,            -1
+       rol     ebp,            10
+       lea     edi,            DWORD PTR 1836072691[eax*1+edi]
+       sub     edx,            ebx
+       rol     edi,            7
+       add     edi,            esi
        ; 114
-       mov     esi,            DWORD PTR 8[esp]
-       or      edi,            ecx
-       add     ebx,            esi
-       xor     edi,            ebp
-       mov     esi,            -1
-       rol     edx,            10
-       lea     ebx,            DWORD PTR 1836072691[edi*1+ebx]
-       sub     esi,            ecx
-       rol     ebx,            15
-       add     ebx,            eax
+       mov     eax,            DWORD PTR 4[esp]
+       or      edx,            edi
+       add     esi,            eax
+       xor     edx,            ebp
+       mov     eax,            -1
+       rol     ebx,            10
+       lea     esi,            DWORD PTR 1836072691[edx*1+esi]
+       sub     eax,            edi
+       rol     esi,            15
+       add     esi,            ecx
        ; 115
-       mov     edi,            DWORD PTR 16[esp]
-       or      esi,            ebx
-       add     eax,            edi
-       xor     esi,            edx
-       mov     edi,            -1
-       rol     ecx,            10
-       lea     eax,            DWORD PTR 1836072691[esi*1+eax]
-       sub     edi,            ebx
-       rol     eax,            11
-       add     eax,            ebp
+       mov     edx,            DWORD PTR 12[esp]
+       or      eax,            esi
+       add     ecx,            edx
+       xor     eax,            ebx
+       mov     edx,            -1
+       rol     edi,            10
+       lea     ecx,            DWORD PTR 1836072691[eax*1+ecx]
+       sub     edx,            esi
+       rol     ecx,            11
+       add     ecx,            ebp
        ; 116
-       mov     esi,            DWORD PTR 32[esp]
-       or      edi,            eax
-       add     ebp,            esi
-       xor     edi,            ecx
-       mov     esi,            -1
-       rol     ebx,            10
-       lea     ebp,            DWORD PTR 1836072691[edi*1+ebp]
-       sub     esi,            eax
+       mov     eax,            DWORD PTR 28[esp]
+       or      edx,            ecx
+       add     ebp,            eax
+       xor     edx,            edi
+       mov     eax,            -1
+       rol     esi,            10
+       lea     ebp,            DWORD PTR 1836072691[edx*1+ebp]
+       sub     eax,            ecx
        rol     ebp,            8
-       add     ebp,            edx
+       add     ebp,            ebx
        ; 117
-       mov     edi,            DWORD PTR 60[esp]
-       or      esi,            ebp
-       add     edx,            edi
-       xor     esi,            ebx
-       mov     edi,            -1
-       rol     eax,            10
-       lea     edx,            DWORD PTR 1836072691[esi*1+edx]
-       sub     edi,            ebp
-       rol     edx,            6
-       add     edx,            ecx
+       mov     edx,            DWORD PTR 56[esp]
+       or      eax,            ebp
+       add     ebx,            edx
+       xor     eax,            esi
+       mov     edx,            -1
+       rol     ecx,            10
+       lea     ebx,            DWORD PTR 1836072691[eax*1+ebx]
+       sub     edx,            ebp
+       rol     ebx,            6
+       add     ebx,            edi
        ; 118
-       mov     esi,            DWORD PTR 28[esp]
-       or      edi,            edx
-       add     ecx,            esi
-       xor     edi,            eax
-       mov     esi,            -1
-       rol     ebp,            10
-       lea     ecx,            DWORD PTR 1836072691[edi*1+ecx]
-       sub     esi,            edx
-       rol     ecx,            6
-       add     ecx,            ebx
+       mov     eax,            DWORD PTR 24[esp]
+       or      edx,            ebx
+       add     edi,            eax
+       xor     edx,            ecx
+       mov     eax,            -1
+       rol     ebp,            10
+       lea     edi,            DWORD PTR 1836072691[edx*1+edi]
+       sub     eax,            ebx
+       rol     edi,            6
+       add     edi,            esi
        ; 119
-       mov     edi,            DWORD PTR 40[esp]
-       or      esi,            ecx
-       add     ebx,            edi
-       xor     esi,            ebp
-       mov     edi,            -1
-       rol     edx,            10
-       lea     ebx,            DWORD PTR 1836072691[esi*1+ebx]
-       sub     edi,            ecx
-       rol     ebx,            14
-       add     ebx,            eax
+       mov     edx,            DWORD PTR 36[esp]
+       or      eax,            edi
+       add     esi,            edx
+       xor     eax,            ebp
+       mov     edx,            -1
+       rol     ebx,            10
+       lea     esi,            DWORD PTR 1836072691[eax*1+esi]
+       sub     edx,            edi
+       rol     esi,            14
+       add     esi,            ecx
        ; 120
-       mov     esi,            DWORD PTR 48[esp]
-       or      edi,            ebx
-       add     eax,            esi
-       xor     edi,            edx
-       mov     esi,            -1
-       rol     ecx,            10
-       lea     eax,            DWORD PTR 1836072691[edi*1+eax]
-       sub     esi,            ebx
-       rol     eax,            12
-       add     eax,            ebp
+       mov     eax,            DWORD PTR 44[esp]
+       or      edx,            esi
+       add     ecx,            eax
+       xor     edx,            ebx
+       mov     eax,            -1
+       rol     edi,            10
+       lea     ecx,            DWORD PTR 1836072691[edx*1+ecx]
+       sub     eax,            esi
+       rol     ecx,            12
+       add     ecx,            ebp
        ; 121
-       mov     edi,            DWORD PTR 36[esp]
-       or      esi,            eax
-       add     ebp,            edi
-       xor     esi,            ecx
-       mov     edi,            -1
-       rol     ebx,            10
-       lea     ebp,            DWORD PTR 1836072691[esi*1+ebp]
-       sub     edi,            eax
-       rol     ebp,            13
+       mov     edx,            DWORD PTR 32[esp]
+       or      eax,            ecx
        add     ebp,            edx
+       xor     eax,            edi
+       mov     edx,            -1
+       rol     esi,            10
+       lea     ebp,            DWORD PTR 1836072691[eax*1+ebp]
+       sub     edx,            ecx
+       rol     ebp,            13
+       add     ebp,            ebx
        ; 122
-       mov     esi,            DWORD PTR 52[esp]
-       or      edi,            ebp
-       add     edx,            esi
-       xor     edi,            ebx
-       mov     esi,            -1
-       rol     eax,            10
-       lea     edx,            DWORD PTR 1836072691[edi*1+edx]
-       sub     esi,            ebp
-       rol     edx,            5
-       add     edx,            ecx
+       mov     eax,            DWORD PTR 48[esp]
+       or      edx,            ebp
+       add     ebx,            eax
+       xor     edx,            esi
+       mov     eax,            -1
+       rol     ecx,            10
+       lea     ebx,            DWORD PTR 1836072691[edx*1+ebx]
+       sub     eax,            ebp
+       rol     ebx,            5
+       add     ebx,            edi
        ; 123
-       mov     edi,            DWORD PTR 12[esp]
-       or      esi,            edx
-       add     ecx,            edi
-       xor     esi,            eax
-       mov     edi,            -1
-       rol     ebp,            10
-       lea     ecx,            DWORD PTR 1836072691[esi*1+ecx]
-       sub     edi,            edx
-       rol     ecx,            14
-       add     ecx,            ebx
+       mov     edx,            DWORD PTR 8[esp]
+       or      eax,            ebx
+       add     edi,            edx
+       xor     eax,            ecx
+       mov     edx,            -1
+       rol     ebp,            10
+       lea     edi,            DWORD PTR 1836072691[eax*1+edi]
+       sub     edx,            ebx
+       rol     edi,            14
+       add     edi,            esi
        ; 124
-       mov     esi,            DWORD PTR 44[esp]
-       or      edi,            ecx
-       add     ebx,            esi
-       xor     edi,            ebp
-       mov     esi,            -1
-       rol     edx,            10
-       lea     ebx,            DWORD PTR 1836072691[edi*1+ebx]
-       sub     esi,            ecx
-       rol     ebx,            13
-       add     ebx,            eax
+       mov     eax,            DWORD PTR 40[esp]
+       or      edx,            edi
+       add     esi,            eax
+       xor     edx,            ebp
+       mov     eax,            -1
+       rol     ebx,            10
+       lea     esi,            DWORD PTR 1836072691[edx*1+esi]
+       sub     eax,            edi
+       rol     esi,            13
+       add     esi,            ecx
        ; 125
-       mov     edi,            DWORD PTR 4[esp]
-       or      esi,            ebx
-       add     eax,            edi
-       xor     esi,            edx
-       mov     edi,            -1
-       rol     ecx,            10
-       lea     eax,            DWORD PTR 1836072691[esi*1+eax]
-       sub     edi,            ebx
-       rol     eax,            13
-       add     eax,            ebp
+       mov     edx,            DWORD PTR [esp]
+       or      eax,            esi
+       add     ecx,            edx
+       xor     eax,            ebx
+       mov     edx,            -1
+       rol     edi,            10
+       lea     ecx,            DWORD PTR 1836072691[eax*1+ecx]
+       sub     edx,            esi
+       rol     ecx,            13
+       add     ecx,            ebp
        ; 126
-       mov     esi,            DWORD PTR 20[esp]
-       or      edi,            eax
-       add     ebp,            esi
-       xor     edi,            ecx
-       mov     esi,            -1
-       rol     ebx,            10
-       lea     ebp,            DWORD PTR 1836072691[edi*1+ebp]
-       sub     esi,            eax
+       mov     eax,            DWORD PTR 16[esp]
+       or      edx,            ecx
+       add     ebp,            eax
+       xor     edx,            edi
+       mov     eax,            -1
+       rol     esi,            10
+       lea     ebp,            DWORD PTR 1836072691[edx*1+ebp]
+       sub     eax,            ecx
        rol     ebp,            7
-       add     ebp,            edx
+       add     ebp,            ebx
        ; 127
-       mov     edi,            DWORD PTR 56[esp]
-       or      esi,            ebp
-       add     edx,            edi
-       xor     esi,            ebx
-       mov     edi,            DWORD PTR 36[esp]
-       rol     eax,            10
-       lea     edx,            DWORD PTR 1836072691[esi*1+edx]
-       mov     esi,            -1
-       rol     edx,            5
-       add     edx,            ecx
+       mov     edx,            DWORD PTR 52[esp]
+       or      eax,            ebp
+       add     ebx,            edx
+       xor     eax,            esi
+       mov     edx,            DWORD PTR 32[esp]
+       rol     ecx,            10
+       lea     ebx,            DWORD PTR 1836072691[eax*1+ebx]
+       mov     eax,            -1
+       rol     ebx,            5
+       add     ebx,            edi
        ; 128
-       add     ecx,            edi
-       mov     edi,            ebp
-       sub     esi,            edx
-       and     edi,            edx
-       and     esi,            eax
-       or      edi,            esi
-       mov     esi,            DWORD PTR 28[esp]
-       rol     ebp,            10
-       lea     ecx,            DWORD PTR 2053994217[edi*1+ecx]
-       mov     edi,            -1
-       rol     ecx,            15
-       add     ecx,            ebx
+       add     edi,            edx
+       mov     edx,            ebp
+       sub     eax,            ebx
+       and     edx,            ebx
+       and     eax,            ecx
+       or      edx,            eax
+       mov     eax,            DWORD PTR 24[esp]
+       rol     ebp,            10
+       lea     edi,            DWORD PTR 2053994217[edx*1+edi]
+       mov     edx,            -1
+       rol     edi,            15
+       add     edi,            esi
        ; 129
-       add     ebx,            esi
-       mov     esi,            edx
-       sub     edi,            ecx
-       and     esi,            ecx
-       and     edi,            ebp
-       or      esi,            edi
-       mov     edi,            DWORD PTR 20[esp]
-       rol     edx,            10
-       lea     ebx,            DWORD PTR 2053994217[esi*1+ebx]
-       mov     esi,            -1
-       rol     ebx,            5
-       add     ebx,            eax
+       add     esi,            eax
+       mov     eax,            ebx
+       sub     edx,            edi
+       and     eax,            edi
+       and     edx,            ebp
+       or      eax,            edx
+       mov     edx,            DWORD PTR 16[esp]
+       rol     ebx,            10
+       lea     esi,            DWORD PTR 2053994217[eax*1+esi]
+       mov     eax,            -1
+       rol     esi,            5
+       add     esi,            ecx
        ; 130
-       add     eax,            edi
-       mov     edi,            ecx
-       sub     esi,            ebx
-       and     edi,            ebx
-       and     esi,            edx
-       or      edi,            esi
-       mov     esi,            DWORD PTR 8[esp]
-       rol     ecx,            10
-       lea     eax,            DWORD PTR 2053994217[edi*1+eax]
-       mov     edi,            -1
-       rol     eax,            8
-       add     eax,            ebp
+       add     ecx,            edx
+       mov     edx,            edi
+       sub     eax,            esi
+       and     edx,            esi
+       and     eax,            ebx
+       or      edx,            eax
+       mov     eax,            DWORD PTR 4[esp]
+       rol     edi,            10
+       lea     ecx,            DWORD PTR 2053994217[edx*1+ecx]
+       mov     edx,            -1
+       rol     ecx,            8
+       add     ecx,            ebp
        ; 131
-       add     ebp,            esi
-       mov     esi,            ebx
-       sub     edi,            eax
-       and     esi,            eax
-       and     edi,            ecx
-       or      esi,            edi
-       mov     edi,            DWORD PTR 16[esp]
-       rol     ebx,            10
-       lea     ebp,            DWORD PTR 2053994217[esi*1+ebp]
-       mov     esi,            -1
+       add     ebp,            eax
+       mov     eax,            esi
+       sub     edx,            ecx
+       and     eax,            ecx
+       and     edx,            edi
+       or      eax,            edx
+       mov     edx,            DWORD PTR 12[esp]
+       rol     esi,            10
+       lea     ebp,            DWORD PTR 2053994217[eax*1+ebp]
+       mov     eax,            -1
        rol     ebp,            11
-       add     ebp,            edx
+       add     ebp,            ebx
        ; 132
-       add     edx,            edi
-       mov     edi,            eax
-       sub     esi,            ebp
-       and     edi,            ebp
-       and     esi,            ebx
-       or      edi,            esi
-       mov     esi,            DWORD PTR 48[esp]
-       rol     eax,            10
-       lea     edx,            DWORD PTR 2053994217[edi*1+edx]
-       mov     edi,            -1
-       rol     edx,            14
-       add     edx,            ecx
+       add     ebx,            edx
+       mov     edx,            ecx
+       sub     eax,            ebp
+       and     edx,            ebp
+       and     eax,            esi
+       or      edx,            eax
+       mov     eax,            DWORD PTR 44[esp]
+       rol     ecx,            10
+       lea     ebx,            DWORD PTR 2053994217[edx*1+ebx]
+       mov     edx,            -1
+       rol     ebx,            14
+       add     ebx,            edi
        ; 133
-       add     ecx,            esi
-       mov     esi,            ebp
-       sub     edi,            edx
-       and     esi,            edx
-       and     edi,            eax
-       or      esi,            edi
-       mov     edi,            DWORD PTR 64[esp]
-       rol     ebp,            10
-       lea     ecx,            DWORD PTR 2053994217[esi*1+ecx]
-       mov     esi,            -1
-       rol     ecx,            14
-       add     ecx,            ebx
+       add     edi,            eax
+       mov     eax,            ebp
+       sub     edx,            ebx
+       and     eax,            ebx
+       and     edx,            ecx
+       or      eax,            edx
+       mov     edx,            DWORD PTR 60[esp]
+       rol     ebp,            10
+       lea     edi,            DWORD PTR 2053994217[eax*1+edi]
+       mov     eax,            -1
+       rol     edi,            14
+       add     edi,            esi
        ; 134
-       add     ebx,            edi
-       mov     edi,            edx
-       sub     esi,            ecx
-       and     edi,            ecx
-       and     esi,            ebp
-       or      edi,            esi
-       mov     esi,            DWORD PTR 4[esp]
-       rol     edx,            10
-       lea     ebx,            DWORD PTR 2053994217[edi*1+ebx]
-       mov     edi,            -1
-       rol     ebx,            6
-       add     ebx,            eax
+       add     esi,            edx
+       mov     edx,            ebx
+       sub     eax,            edi
+       and     edx,            edi
+       and     eax,            ebp
+       or      edx,            eax
+       mov     eax,            DWORD PTR [esp]
+       rol     ebx,            10
+       lea     esi,            DWORD PTR 2053994217[edx*1+esi]
+       mov     edx,            -1
+       rol     esi,            6
+       add     esi,            ecx
        ; 135
-       add     eax,            esi
-       mov     esi,            ecx
-       sub     edi,            ebx
-       and     esi,            ebx
-       and     edi,            edx
-       or      esi,            edi
-       mov     edi,            DWORD PTR 24[esp]
-       rol     ecx,            10
-       lea     eax,            DWORD PTR 2053994217[esi*1+eax]
-       mov     esi,            -1
-       rol     eax,            14
-       add     eax,            ebp
+       add     ecx,            eax
+       mov     eax,            edi
+       sub     edx,            esi
+       and     eax,            esi
+       and     edx,            ebx
+       or      eax,            edx
+       mov     edx,            DWORD PTR 20[esp]
+       rol     edi,            10
+       lea     ecx,            DWORD PTR 2053994217[eax*1+ecx]
+       mov     eax,            -1
+       rol     ecx,            14
+       add     ecx,            ebp
        ; 136
-       add     ebp,            edi
-       mov     edi,            ebx
-       sub     esi,            eax
-       and     edi,            eax
-       and     esi,            ecx
-       or      edi,            esi
-       mov     esi,            DWORD PTR 52[esp]
-       rol     ebx,            10
-       lea     ebp,            DWORD PTR 2053994217[edi*1+ebp]
-       mov     edi,            -1
-       rol     ebp,            6
        add     ebp,            edx
+       mov     edx,            esi
+       sub     eax,            ecx
+       and     edx,            ecx
+       and     eax,            edi
+       or      edx,            eax
+       mov     eax,            DWORD PTR 48[esp]
+       rol     esi,            10
+       lea     ebp,            DWORD PTR 2053994217[edx*1+ebp]
+       mov     edx,            -1
+       rol     ebp,            6
+       add     ebp,            ebx
        ; 137
-       add     edx,            esi
-       mov     esi,            eax
-       sub     edi,            ebp
-       and     esi,            ebp
-       and     edi,            ebx
-       or      esi,            edi
-       mov     edi,            DWORD PTR 12[esp]
-       rol     eax,            10
-       lea     edx,            DWORD PTR 2053994217[esi*1+edx]
-       mov     esi,            -1
-       rol     edx,            9
-       add     edx,            ecx
+       add     ebx,            eax
+       mov     eax,            ecx
+       sub     edx,            ebp
+       and     eax,            ebp
+       and     edx,            esi
+       or      eax,            edx
+       mov     edx,            DWORD PTR 8[esp]
+       rol     ecx,            10
+       lea     ebx,            DWORD PTR 2053994217[eax*1+ebx]
+       mov     eax,            -1
+       rol     ebx,            9
+       add     ebx,            edi
        ; 138
-       add     ecx,            edi
-       mov     edi,            ebp
-       sub     esi,            edx
-       and     edi,            edx
-       and     esi,            eax
-       or      edi,            esi
-       mov     esi,            DWORD PTR 56[esp]
-       rol     ebp,            10
-       lea     ecx,            DWORD PTR 2053994217[edi*1+ecx]
-       mov     edi,            -1
-       rol     ecx,            12
-       add     ecx,            ebx
+       add     edi,            edx
+       mov     edx,            ebp
+       sub     eax,            ebx
+       and     edx,            ebx
+       and     eax,            ecx
+       or      edx,            eax
+       mov     eax,            DWORD PTR 52[esp]
+       rol     ebp,            10
+       lea     edi,            DWORD PTR 2053994217[edx*1+edi]
+       mov     edx,            -1
+       rol     edi,            12
+       add     edi,            esi
        ; 139
-       add     ebx,            esi
-       mov     esi,            edx
-       sub     edi,            ecx
-       and     esi,            ecx
-       and     edi,            ebp
-       or      esi,            edi
-       mov     edi,            DWORD PTR 40[esp]
-       rol     edx,            10
-       lea     ebx,            DWORD PTR 2053994217[esi*1+ebx]
-       mov     esi,            -1
-       rol     ebx,            9
-       add     ebx,            eax
+       add     esi,            eax
+       mov     eax,            ebx
+       sub     edx,            edi
+       and     eax,            edi
+       and     edx,            ebp
+       or      eax,            edx
+       mov     edx,            DWORD PTR 36[esp]
+       rol     ebx,            10
+       lea     esi,            DWORD PTR 2053994217[eax*1+esi]
+       mov     eax,            -1
+       rol     esi,            9
+       add     esi,            ecx
        ; 140
-       add     eax,            edi
-       mov     edi,            ecx
-       sub     esi,            ebx
-       and     edi,            ebx
-       and     esi,            edx
-       or      edi,            esi
-       mov     esi,            DWORD PTR 32[esp]
-       rol     ecx,            10
-       lea     eax,            DWORD PTR 2053994217[edi*1+eax]
-       mov     edi,            -1
-       rol     eax,            12
-       add     eax,            ebp
+       add     ecx,            edx
+       mov     edx,            edi
+       sub     eax,            esi
+       and     edx,            esi
+       and     eax,            ebx
+       or      edx,            eax
+       mov     eax,            DWORD PTR 28[esp]
+       rol     edi,            10
+       lea     ecx,            DWORD PTR 2053994217[edx*1+ecx]
+       mov     edx,            -1
+       rol     ecx,            12
+       add     ecx,            ebp
        ; 141
-       add     ebp,            esi
-       mov     esi,            ebx
-       sub     edi,            eax
-       and     esi,            eax
-       and     edi,            ecx
-       or      esi,            edi
-       mov     edi,            DWORD PTR 44[esp]
-       rol     ebx,            10
-       lea     ebp,            DWORD PTR 2053994217[esi*1+ebp]
-       mov     esi,            -1
+       add     ebp,            eax
+       mov     eax,            esi
+       sub     edx,            ecx
+       and     eax,            ecx
+       and     edx,            edi
+       or      eax,            edx
+       mov     edx,            DWORD PTR 40[esp]
+       rol     esi,            10
+       lea     ebp,            DWORD PTR 2053994217[eax*1+ebp]
+       mov     eax,            -1
        rol     ebp,            5
-       add     ebp,            edx
+       add     ebp,            ebx
        ; 142
-       add     edx,            edi
-       mov     edi,            eax
-       sub     esi,            ebp
-       and     edi,            ebp
-       and     esi,            ebx
-       or      edi,            esi
-       mov     esi,            DWORD PTR 60[esp]
-       rol     eax,            10
-       lea     edx,            DWORD PTR 2053994217[edi*1+edx]
-       mov     edi,            -1
-       rol     edx,            15
-       add     edx,            ecx
+       add     ebx,            edx
+       mov     edx,            ecx
+       sub     eax,            ebp
+       and     edx,            ebp
+       and     eax,            esi
+       or      edx,            eax
+       mov     eax,            DWORD PTR 56[esp]
+       rol     ecx,            10
+       lea     ebx,            DWORD PTR 2053994217[edx*1+ebx]
+       mov     edx,            -1
+       rol     ebx,            15
+       add     ebx,            edi
        ; 143
-       add     ecx,            esi
-       mov     esi,            ebp
-       sub     edi,            edx
-       and     esi,            edx
-       and     edi,            eax
-       or      edi,            esi
-       mov     esi,            edx
-       rol     ebp,            10
-       lea     ecx,            DWORD PTR 2053994217[edi*1+ecx]
-       xor     esi,            ebp
-       rol     ecx,            8
-       add     ecx,            ebx
+       add     edi,            eax
+       mov     eax,            ebp
+       sub     edx,            ebx
+       and     eax,            ebx
+       and     edx,            ecx
+       or      edx,            eax
+       mov     eax,            ebx
+       rol     ebp,            10
+       lea     edi,            DWORD PTR 2053994217[edx*1+edi]
+       xor     eax,            ebp
+       rol     edi,            8
+       add     edi,            esi
        ; 144
-       mov     edi,            DWORD PTR 52[esp]
-       xor     esi,            ecx
-       add     ebx,            edi
-       rol     edx,            10
-       add     ebx,            esi
-       mov     esi,            ecx
-       rol     ebx,            8
-       add     ebx,            eax
+       mov     edx,            DWORD PTR 48[esp]
+       xor     eax,            edi
+       add     esi,            edx
+       rol     ebx,            10
+       add     esi,            eax
+       mov     eax,            edi
+       rol     esi,            8
+       add     esi,            ecx
        ; 145
-       xor     esi,            edx
-       mov     edi,            DWORD PTR 64[esp]
-       xor     esi,            ebx
-       add     eax,            esi
-       mov     esi,            ebx
-       rol     ecx,            10
-       add     eax,            edi
-       xor     esi,            ecx
-       rol     eax,            5
-       add     eax,            ebp
+       xor     eax,            ebx
+       mov     edx,            DWORD PTR 60[esp]
+       xor     eax,            esi
+       add     ecx,            eax
+       mov     eax,            esi
+       rol     edi,            10
+       add     ecx,            edx
+       xor     eax,            edi
+       rol     ecx,            5
+       add     ecx,            ebp
        ; 146
-       mov     edi,            DWORD PTR 44[esp]
-       xor     esi,            eax
-       add     ebp,            edi
-       rol     ebx,            10
-       add     ebp,            esi
-       mov     esi,            eax
-       rol     ebp,            12
+       mov     edx,            DWORD PTR 40[esp]
+       xor     eax,            ecx
        add     ebp,            edx
+       rol     esi,            10
+       add     ebp,            eax
+       mov     eax,            ecx
+       rol     ebp,            12
+       add     ebp,            ebx
        ; 147
-       xor     esi,            ebx
-       mov     edi,            DWORD PTR 20[esp]
-       xor     esi,            ebp
-       add     edx,            esi
-       mov     esi,            ebp
-       rol     eax,            10
-       add     edx,            edi
-       xor     esi,            eax
-       rol     edx,            9
-       add     edx,            ecx
+       xor     eax,            esi
+       mov     edx,            DWORD PTR 16[esp]
+       xor     eax,            ebp
+       add     ebx,            eax
+       mov     eax,            ebp
+       rol     ecx,            10
+       add     ebx,            edx
+       xor     eax,            ecx
+       rol     ebx,            9
+       add     ebx,            edi
        ; 148
-       mov     edi,            DWORD PTR 8[esp]
-       xor     esi,            edx
-       add     ecx,            edi
-       rol     ebp,            10
-       add     ecx,            esi
-       mov     esi,            edx
-       rol     ecx,            12
-       add     ecx,            ebx
+       mov     edx,            DWORD PTR 4[esp]
+       xor     eax,            ebx
+       add     edi,            edx
+       rol     ebp,            10
+       add     edi,            eax
+       mov     eax,            ebx
+       rol     edi,            12
+       add     edi,            esi
        ; 149
-       xor     esi,            ebp
-       mov     edi,            DWORD PTR 24[esp]
-       xor     esi,            ecx
-       add     ebx,            esi
-       mov     esi,            ecx
-       rol     edx,            10
-       add     ebx,            edi
-       xor     esi,            edx
-       rol     ebx,            5
-       add     ebx,            eax
+       xor     eax,            ebp
+       mov     edx,            DWORD PTR 20[esp]
+       xor     eax,            edi
+       add     esi,            eax
+       mov     eax,            edi
+       rol     ebx,            10
+       add     esi,            edx
+       xor     eax,            ebx
+       rol     esi,            5
+       add     esi,            ecx
        ; 150
-       mov     edi,            DWORD PTR 36[esp]
-       xor     esi,            ebx
-       add     eax,            edi
-       rol     ecx,            10
-       add     eax,            esi
-       mov     esi,            ebx
-       rol     eax,            14
-       add     eax,            ebp
+       mov     edx,            DWORD PTR 32[esp]
+       xor     eax,            esi
+       add     ecx,            edx
+       rol     edi,            10
+       add     ecx,            eax
+       mov     eax,            esi
+       rol     ecx,            14
+       add     ecx,            ebp
        ; 151
-       xor     esi,            ecx
-       mov     edi,            DWORD PTR 32[esp]
-       xor     esi,            eax
-       add     ebp,            esi
-       mov     esi,            eax
-       rol     ebx,            10
-       add     ebp,            edi
-       xor     esi,            ebx
-       rol     ebp,            6
+       xor     eax,            edi
+       mov     edx,            DWORD PTR 28[esp]
+       xor     eax,            ecx
+       add     ebp,            eax
+       mov     eax,            ecx
+       rol     esi,            10
        add     ebp,            edx
+       xor     eax,            esi
+       rol     ebp,            6
+       add     ebp,            ebx
        ; 152
-       mov     edi,            DWORD PTR 28[esp]
-       xor     esi,            ebp
-       add     edx,            edi
-       rol     eax,            10
-       add     edx,            esi
-       mov     esi,            ebp
-       rol     edx,            8
-       add     edx,            ecx
+       mov     edx,            DWORD PTR 24[esp]
+       xor     eax,            ebp
+       add     ebx,            edx
+       rol     ecx,            10
+       add     ebx,            eax
+       mov     eax,            ebp
+       rol     ebx,            8
+       add     ebx,            edi
        ; 153
-       xor     esi,            eax
-       mov     edi,            DWORD PTR 12[esp]
-       xor     esi,            edx
-       add     ecx,            esi
-       mov     esi,            edx
-       rol     ebp,            10
-       add     ecx,            edi
-       xor     esi,            ebp
-       rol     ecx,            13
-       add     ecx,            ebx
+       xor     eax,            ecx
+       mov     edx,            DWORD PTR 8[esp]
+       xor     eax,            ebx
+       add     edi,            eax
+       mov     eax,            ebx
+       rol     ebp,            10
+       add     edi,            edx
+       xor     eax,            ebp
+       rol     edi,            13
+       add     edi,            esi
        ; 154
-       mov     edi,            DWORD PTR 56[esp]
-       xor     esi,            ecx
-       add     ebx,            edi
-       rol     edx,            10
-       add     ebx,            esi
-       mov     esi,            ecx
-       rol     ebx,            6
-       add     ebx,            eax
+       mov     edx,            DWORD PTR 52[esp]
+       xor     eax,            edi
+       add     esi,            edx
+       rol     ebx,            10
+       add     esi,            eax
+       mov     eax,            edi
+       rol     esi,            6
+       add     esi,            ecx
        ; 155
-       xor     esi,            edx
-       mov     edi,            DWORD PTR 60[esp]
-       xor     esi,            ebx
-       add     eax,            esi
-       mov     esi,            ebx
-       rol     ecx,            10
-       add     eax,            edi
-       xor     esi,            ecx
-       rol     eax,            5
-       add     eax,            ebp
+       xor     eax,            ebx
+       mov     edx,            DWORD PTR 56[esp]
+       xor     eax,            esi
+       add     ecx,            eax
+       mov     eax,            esi
+       rol     edi,            10
+       add     ecx,            edx
+       xor     eax,            edi
+       rol     ecx,            5
+       add     ecx,            ebp
        ; 156
-       mov     edi,            DWORD PTR 4[esp]
-       xor     esi,            eax
-       add     ebp,            edi
-       rol     ebx,            10
-       add     ebp,            esi
-       mov     esi,            eax
-       rol     ebp,            15
+       mov     edx,            DWORD PTR [esp]
+       xor     eax,            ecx
        add     ebp,            edx
+       rol     esi,            10
+       add     ebp,            eax
+       mov     eax,            ecx
+       rol     ebp,            15
+       add     ebp,            ebx
        ; 157
-       xor     esi,            ebx
-       mov     edi,            DWORD PTR 16[esp]
-       xor     esi,            ebp
-       add     edx,            esi
-       mov     esi,            ebp
-       rol     eax,            10
-       add     edx,            edi
-       xor     esi,            eax
-       rol     edx,            13
-       add     edx,            ecx
+       xor     eax,            esi
+       mov     edx,            DWORD PTR 12[esp]
+       xor     eax,            ebp
+       add     ebx,            eax
+       mov     eax,            ebp
+       rol     ecx,            10
+       add     ebx,            edx
+       xor     eax,            ecx
+       rol     ebx,            13
+       add     ebx,            edi
        ; 158
-       mov     edi,            DWORD PTR 40[esp]
-       xor     esi,            edx
-       add     ecx,            edi
-       rol     ebp,            10
-       add     ecx,            esi
-       mov     esi,            edx
-       rol     ecx,            11
-       add     ecx,            ebx
+       mov     edx,            DWORD PTR 36[esp]
+       xor     eax,            ebx
+       add     edi,            edx
+       rol     ebp,            10
+       add     edi,            eax
+       mov     eax,            ebx
+       rol     edi,            11
+       add     edi,            esi
        ; 159
-       xor     esi,            ebp
-       mov     edi,            DWORD PTR 48[esp]
-       xor     esi,            ecx
-       add     ebx,            esi
-       rol     edx,            10
-       add     ebx,            edi
-       mov     edi,            DWORD PTR 108[esp]
-       rol     ebx,            11
-       add     ebx,            eax
-       mov     esi,            DWORD PTR 4[edi]
-       add     edx,            esi
-       mov     esi,            DWORD PTR 76[esp]
-       add     edx,            esi
-       mov     esi,            DWORD PTR 8[edi]
-       add     ebp,            esi
-       mov     esi,            DWORD PTR 80[esp]
-       add     ebp,            esi
-       mov     esi,            DWORD PTR 12[edi]
-       add     eax,            esi
-       mov     esi,            DWORD PTR 84[esp]
-       add     eax,            esi
-       mov     esi,            DWORD PTR 16[edi]
-       add     ebx,            esi
-       mov     esi,            DWORD PTR 68[esp]
-       add     ebx,            esi
-       mov     esi,            DWORD PTR [edi]
-       add     ecx,            esi
-       mov     esi,            DWORD PTR 72[esp]
-       add     ecx,            esi
-       mov     DWORD PTR [edi],edx
-       mov     DWORD PTR 4[edi],ebp
-       mov     DWORD PTR 8[edi],eax
-       mov     DWORD PTR 12[edi],ebx
-       mov     DWORD PTR 16[edi],ecx
-       mov     edi,            DWORD PTR [esp]
-       mov     esi,            DWORD PTR 112[esp]
-       cmp     edi,            esi
-       mov     edi,            DWORD PTR 108[esp]
-       jge     L000start
-       add     esp,            88
+       xor     eax,            ebp
+       mov     edx,            DWORD PTR 44[esp]
+       xor     eax,            edi
+       add     esi,            eax
+       rol     ebx,            10
+       add     esi,            edx
+       mov     edx,            DWORD PTR 128[esp]
+       rol     esi,            11
+       add     esi,            ecx
+       mov     eax,            DWORD PTR 4[edx]
+       add     ebx,            eax
+       mov     eax,            DWORD PTR 72[esp]
+       add     ebx,            eax
+       mov     eax,            DWORD PTR 8[edx]
+       add     ebp,            eax
+       mov     eax,            DWORD PTR 76[esp]
+       add     ebp,            eax
+       mov     eax,            DWORD PTR 12[edx]
+       add     ecx,            eax
+       mov     eax,            DWORD PTR 80[esp]
+       add     ecx,            eax
+       mov     eax,            DWORD PTR 16[edx]
+       add     esi,            eax
+       mov     eax,            DWORD PTR 64[esp]
+       add     esi,            eax
+       mov     eax,            DWORD PTR [edx]
+       add     edi,            eax
+       mov     eax,            DWORD PTR 68[esp]
+       add     edi,            eax
+       mov     eax,            DWORD PTR 136[esp]
+       mov     DWORD PTR [edx],ebx
+       mov     DWORD PTR 4[edx],ebp
+       mov     DWORD PTR 8[edx],ecx
+       sub     eax,            1
+       mov     DWORD PTR 12[edx],esi
+       mov     DWORD PTR 16[edx],edi
+       jle     $L001get_out
+       mov     DWORD PTR 136[esp],eax
+       mov     edi,            ecx
+       mov     eax,            DWORD PTR 132[esp]
+       mov     ecx,            ebx
+       add     eax,            64
+       mov     esi,            ebp
+       mov     DWORD PTR 132[esp],eax
+       jmp     L000start
+$L001get_out:
+       add     esp,            108
        pop     ebx
        pop     ebp
        pop     edi
        pop     esi
        ret
-_ripemd160_block_x86 ENDP
+_ripemd160_block_asm_host_order ENDP
 _TEXT  ENDS
 END
Index: opensa/openssl/crypto/ripemd/asm/rmd-586.pl
diff -u opensa/openssl/crypto/ripemd/asm/rmd-586.pl:1.1 
opensa/openssl/crypto/ripemd/asm/rmd-586.pl:1.2
--- opensa/openssl/crypto/ripemd/asm/rmd-586.pl:1.1     Tue Jan 25 23:23:22 2000
+++ opensa/openssl/crypto/ripemd/asm/rmd-586.pl Thu Mar  2 21:12:00 2000
@@ -1,9 +1,7 @@
 #!/usr/local/bin/perl
 
 # Normal is the
-# ripemd160_block_x86(MD5_CTX *c, ULONG *X);
-# version, non-normal is the
-# ripemd160_block_x86(MD5_CTX *c, ULONG *X,int blocks);
+# ripemd160_block_asm_host_order(RIPEMD160_CTX *c, ULONG *X,int blocks);
 
 $normal=0;
 
@@ -12,13 +10,13 @@
 
 &asm_init($ARGV[0],$0);
 
-$A="eax";
-$B="ebx";
-$C="ecx";
-$D="edx";
+$A="ecx";
+$B="esi";
+$C="edi";
+$D="ebx";
 $E="ebp";
-$tmp1="esi";
-$tmp2="edi";
+$tmp1="eax";
+$tmp2="edx";
 
 $KL1=0x5A827999;
 $KL2=0x6ED9EBA1;
@@ -58,13 +56,13 @@
         8, 5,12, 9,12, 5,14, 6, 8,13, 6, 5,15,13,11,11,
        );
 
-&ripemd160_block("ripemd160_block_x86");
+&ripemd160_block("ripemd160_block_asm_host_order");
 &asm_finish();
 
 sub Xv
        {
        local($n)=@_;
-       return(&swtmp($n+1));
+       return(&swtmp($n));
        # tmp on stack
        }
 
@@ -82,7 +80,7 @@
        &comment($p++);
        if ($p & 1)
                {
-        &mov($tmp1,    $c) if $o == -1;
+        #&mov($tmp1,   $c) if $o == -1;
        &xor($tmp1,     $d) if $o == -1;
         &mov($tmp2,    &Xv($pos));
        &xor($tmp1,     $b);
@@ -290,7 +288,7 @@
        &rotl($c,       10);
        &lea($a,        &DWP($K,$a,$tmp1,1));
         &sub($tmp2,    &Np($d)) if $o <= 0;
-        &mov(&swtmp(1+16),     $A) if $o == 1;
+        &mov(&swtmp(16),       $A) if $o == 1;
         &mov($tmp1,    &Np($d)) if $o == 2;
        &rotl($a,       $s);
        &add($a,        $e);
@@ -310,19 +308,25 @@
        # D     12
        # E     16
 
+       &mov($tmp2,     &wparam(0));
+        &mov($tmp1,    &wparam(1));
        &push("esi");
-        &mov($C,       &wparam(2));
+        &mov($A,       &DWP( 0,$tmp2,"",0));
        &push("edi");
-        &mov($tmp1,    &wparam(1)); # edi
+        &mov($B,       &DWP( 4,$tmp2,"",0));
        &push("ebp");
-        &add($C,       $tmp1); # offset we end at
+        &mov($C,       &DWP( 8,$tmp2,"",0));
        &push("ebx");
-        &sub($C,       64);
-       &stack_push(16+5+1);
-        # XXX
-
-       &mov(&swtmp(0), $C);
-        &mov($tmp2,    &wparam(0)); # Done at end of loop
+        &stack_push(16+5+6);
+                         # Special comment about the figure of 6.
+                         # Idea is to pad the current frame so
+                         # that the top of the stack gets fairly
+                         # aligned. Well, as you realize it would
+                         # always depend on how the frame below is
+                         # aligned. The good news are that gcc-2.95
+                         # and later does keep first argument at
+                         # least double-wise aligned.
+                         #                     <[EMAIL PROTECTED]>
 
        &set_label("start") unless $normal;
        &comment("");
@@ -332,16 +336,12 @@
 
        for ($z=0; $z<16; $z+=2)
                {
-               &mov($A,                &DWP( $z*4,$tmp1,"",0));
-                &mov($B,               &DWP( ($z+1)*4,$tmp1,"",0));
-               &mov(&swtmp(1+$z),      $A);
-                &mov(&swtmp(1+$z+1),   $B);
+               &mov($D,                &DWP( $z*4,$tmp1,"",0));
+                &mov($E,               &DWP( ($z+1)*4,$tmp1,"",0));
+               &mov(&swtmp($z),        $D);
+                &mov(&swtmp($z+1),     $E);
                }
-       &add($tmp1,     64);
-        &mov($A,       &DWP( 0,$tmp2,"",0));
-       &mov(&wparam(1),$tmp1);
-        &mov($B,       &DWP( 4,$tmp2,"",0));
-       &mov($C,        &DWP( 8,$tmp2,"",0));
+       &mov($tmp1,     $C);
         &mov($D,       &DWP(12,$tmp2,"",0));
        &mov($E,        &DWP(16,$tmp2,"",0));
 
@@ -431,14 +431,14 @@
        &RIP5($B,$C,$D,$E,$A,$wl[79],$sl[79],$KL4,1);
 
        # &mov($tmp2,   &wparam(0)); # moved into last RIP5
-       # &mov(&swtmp(1+16),    $A);
+       # &mov(&swtmp(16),      $A);
         &mov($A,       &DWP( 0,$tmp2,"",0));
-       &mov(&swtmp(1+17),      $B);
-        &mov(&swtmp(1+18),     $C);
+       &mov(&swtmp(16+1),      $B);
+        &mov(&swtmp(16+2),     $C);
        &mov($B,        &DWP( 4,$tmp2,"",0));
-        &mov(&swtmp(1+19),     $D);
+        &mov(&swtmp(16+3),     $D);
        &mov($C,        &DWP( 8,$tmp2,"",0));
-        &mov(&swtmp(1+20),     $E);
+        &mov(&swtmp(16+4),     $E);
        &mov($D,        &DWP(12,$tmp2,"",0));
         &mov($E,       &DWP(16,$tmp2,"",0));
 
@@ -531,46 +531,54 @@
 
         &mov($tmp1,    &DWP( 4,$tmp2,"",0));   # ctx->B
        &add($D,        $tmp1); 
-        &mov($tmp1,    &swtmp(1+18));          # $c
+        &mov($tmp1,    &swtmp(16+2));          # $c
        &add($D,        $tmp1);
 
         &mov($tmp1,    &DWP( 8,$tmp2,"",0));   # ctx->C
        &add($E,        $tmp1); 
-        &mov($tmp1,    &swtmp(1+19));          # $d
+        &mov($tmp1,    &swtmp(16+3));          # $d
        &add($E,        $tmp1);
 
         &mov($tmp1,    &DWP(12,$tmp2,"",0));   # ctx->D
        &add($A,        $tmp1); 
-        &mov($tmp1,    &swtmp(1+20));          # $e
+        &mov($tmp1,    &swtmp(16+4));          # $e
        &add($A,        $tmp1);
 
 
         &mov($tmp1,    &DWP(16,$tmp2,"",0));   # ctx->E
        &add($B,        $tmp1); 
-        &mov($tmp1,    &swtmp(1+16));          # $a
+        &mov($tmp1,    &swtmp(16+0));          # $a
        &add($B,        $tmp1);
 
         &mov($tmp1,    &DWP( 0,$tmp2,"",0));   # ctx->A
        &add($C,        $tmp1); 
-        &mov($tmp1,    &swtmp(1+17));          # $b
+        &mov($tmp1,    &swtmp(16+1));          # $b
        &add($C,        $tmp1);
 
+        &mov($tmp1,    &wparam(2));
+
        &mov(&DWP( 0,$tmp2,"",0),       $D);
         &mov(&DWP( 4,$tmp2,"",0),      $E);
        &mov(&DWP( 8,$tmp2,"",0),       $A);
-        &mov(&DWP(12,$tmp2,"",0),      $B);
-       &mov(&DWP(16,$tmp2,"",0),       $C);
-
-       &mov($tmp2,             &swtmp(0));
-        &mov($tmp1,            &wparam(1));
+        &sub($tmp1,1);
+       &mov(&DWP(12,$tmp2,"",0),       $B);
+        &mov(&DWP(16,$tmp2,"",0),      $C);
+
+       &jle(&label("get_out"));
+
+       &mov(&wparam(2),$tmp1);
+        &mov($C,       $A);
+       &mov($tmp1,     &wparam(1));
+        &mov($A,       $D);
+       &add($tmp1,     64);
+        &mov($B,       $E);
+       &mov(&wparam(1),$tmp1);
 
-       &cmp($tmp2,$tmp1);
-        &mov($tmp2,    &wparam(0));
+       &jmp(&label("start"));
 
-       # XXX
-        &jge(&label("start"));
+       &set_label("get_out");
 
-       &stack_pop(16+5+1);
+       &stack_pop(16+5+6);
 
        &pop("ebx");
        &pop("ebp");
Index: opensa/openssl/crypto/rsa/makefile.ssl
diff -u opensa/openssl/crypto/rsa/makefile.ssl:1.1 
opensa/openssl/crypto/rsa/makefile.ssl:1.2
--- opensa/openssl/crypto/rsa/makefile.ssl:1.1  Tue Jan 25 23:22:53 2000
+++ opensa/openssl/crypto/rsa/makefile.ssl      Thu Mar  2 21:12:00 2000
@@ -18,14 +18,14 @@
 CFLAGS= $(INCLUDES) $(CFLAG)
 
 GENERAL=Makefile
-TEST=rsa_oaep_test.c
+TEST=rsa_test.c
 APPS=
 
 LIB=$(TOP)/libcrypto.a
 LIBSRC= rsa_eay.c rsa_gen.c rsa_lib.c rsa_sign.c rsa_saos.c rsa_err.c \
-       rsa_pk1.c rsa_ssl.c rsa_none.c rsa_oaep.c rsa_chk.c
+       rsa_pk1.c rsa_ssl.c rsa_none.c rsa_oaep.c rsa_chk.c rsa_null.c
 LIBOBJ= rsa_eay.o rsa_gen.o rsa_lib.o rsa_sign.o rsa_saos.o rsa_err.o \
-       rsa_pk1.o rsa_ssl.o rsa_none.o rsa_oaep.o rsa_chk.o
+       rsa_pk1.o rsa_ssl.o rsa_none.o rsa_oaep.o rsa_chk.o rsa_null.o
 
 SRC= $(LIBSRC)
 
@@ -83,52 +83,61 @@
 rsa_chk.o: ../../include/openssl/bn.h ../../include/openssl/crypto.h
 rsa_chk.o: ../../include/openssl/err.h ../../include/openssl/opensslconf.h
 rsa_chk.o: ../../include/openssl/opensslv.h ../../include/openssl/rsa.h
-rsa_chk.o: ../../include/openssl/stack.h
+rsa_chk.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
 rsa_eay.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
 rsa_eay.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 rsa_eay.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h
 rsa_eay.o: ../../include/openssl/err.h ../../include/openssl/opensslconf.h
 rsa_eay.o: ../../include/openssl/opensslv.h ../../include/openssl/rand.h
-rsa_eay.o: ../../include/openssl/rsa.h ../../include/openssl/stack.h
-rsa_eay.o: ../cryptlib.h
+rsa_eay.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
+rsa_eay.o: ../../include/openssl/stack.h ../cryptlib.h
 rsa_err.o: ../../include/openssl/bn.h ../../include/openssl/crypto.h
 rsa_err.o: ../../include/openssl/err.h ../../include/openssl/opensslconf.h
 rsa_err.o: ../../include/openssl/opensslv.h ../../include/openssl/rsa.h
-rsa_err.o: ../../include/openssl/stack.h
+rsa_err.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
 rsa_gen.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
 rsa_gen.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 rsa_gen.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h
 rsa_gen.o: ../../include/openssl/err.h ../../include/openssl/opensslconf.h
 rsa_gen.o: ../../include/openssl/opensslv.h ../../include/openssl/rsa.h
-rsa_gen.o: ../../include/openssl/stack.h ../cryptlib.h
+rsa_gen.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
+rsa_gen.o: ../cryptlib.h
 rsa_lib.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
 rsa_lib.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 rsa_lib.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h
 rsa_lib.o: ../../include/openssl/err.h ../../include/openssl/lhash.h
 rsa_lib.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
-rsa_lib.o: ../../include/openssl/rsa.h ../../include/openssl/stack.h
-rsa_lib.o: ../cryptlib.h
+rsa_lib.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
+rsa_lib.o: ../../include/openssl/stack.h ../cryptlib.h
 rsa_none.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
 rsa_none.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 rsa_none.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h
 rsa_none.o: ../../include/openssl/err.h ../../include/openssl/opensslconf.h
 rsa_none.o: ../../include/openssl/opensslv.h ../../include/openssl/rand.h
-rsa_none.o: ../../include/openssl/rsa.h ../../include/openssl/stack.h
-rsa_none.o: ../cryptlib.h
+rsa_none.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
+rsa_none.o: ../../include/openssl/stack.h ../cryptlib.h
+rsa_null.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
+rsa_null.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
+rsa_null.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h
+rsa_null.o: ../../include/openssl/err.h ../../include/openssl/opensslconf.h
+rsa_null.o: ../../include/openssl/opensslv.h ../../include/openssl/rand.h
+rsa_null.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
+rsa_null.o: ../../include/openssl/stack.h ../cryptlib.h
 rsa_oaep.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
 rsa_oaep.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 rsa_oaep.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h
 rsa_oaep.o: ../../include/openssl/err.h ../../include/openssl/opensslconf.h
 rsa_oaep.o: ../../include/openssl/opensslv.h ../../include/openssl/rand.h
-rsa_oaep.o: ../../include/openssl/rsa.h ../../include/openssl/sha.h
-rsa_oaep.o: ../../include/openssl/stack.h ../cryptlib.h
+rsa_oaep.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
+rsa_oaep.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
+rsa_oaep.o: ../cryptlib.h
 rsa_pk1.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
 rsa_pk1.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 rsa_pk1.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h
 rsa_pk1.o: ../../include/openssl/err.h ../../include/openssl/opensslconf.h
 rsa_pk1.o: ../../include/openssl/opensslv.h ../../include/openssl/rand.h
-rsa_pk1.o: ../../include/openssl/rsa.h ../../include/openssl/stack.h
-rsa_pk1.o: ../cryptlib.h
+rsa_pk1.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
+rsa_pk1.o: ../../include/openssl/stack.h ../cryptlib.h
 rsa_saos.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
 rsa_saos.o: ../../include/openssl/blowfish.h ../../include/openssl/bn.h
 rsa_saos.o: ../../include/openssl/buffer.h ../../include/openssl/cast.h
@@ -168,5 +177,5 @@
 rsa_ssl.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h
 rsa_ssl.o: ../../include/openssl/err.h ../../include/openssl/opensslconf.h
 rsa_ssl.o: ../../include/openssl/opensslv.h ../../include/openssl/rand.h
-rsa_ssl.o: ../../include/openssl/rsa.h ../../include/openssl/stack.h
-rsa_ssl.o: ../cryptlib.h
+rsa_ssl.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
+rsa_ssl.o: ../../include/openssl/stack.h ../cryptlib.h
Index: opensa/openssl/crypto/rsa/rsa.h
diff -u opensa/openssl/crypto/rsa/rsa.h:1.1 opensa/openssl/crypto/rsa/rsa.h:1.2
--- opensa/openssl/crypto/rsa/rsa.h:1.1 Tue Jan 25 23:22:53 2000
+++ opensa/openssl/crypto/rsa/rsa.h     Thu Mar  2 21:12:00 2000
@@ -91,6 +91,18 @@
        int (*finish)(RSA *rsa);        /* called at free */
        int flags;                      /* RSA_METHOD_FLAG_* things */
        char *app_data;                 /* may be needed! */
+/* New sign and verify functions: some libraries don't allow arbitrary data
+ * to be signed/verified: this allows them to be used. Note: for this to work
+ * the RSA_public_decrypt() and RSA_private_encrypt() should *NOT* be used
+ * RSA_sign(), RSA_verify() should be used instead. Note: for backwards
+ * compatibility this functionality is only enabled if the RSA_FLAG_SIGN_VER
+ * option is set in 'flags'.
+ */
+       int (*rsa_sign)(int type, unsigned char *m, unsigned int m_len,
+             unsigned char *sigret, unsigned int *siglen, RSA *rsa);
+       int (*rsa_verify)(int dtype, unsigned char *m, unsigned int m_len,
+             unsigned char *sigbuf, unsigned int siglen, RSA *rsa);
+
        } RSA_METHOD;
 
 struct rsa_st
@@ -140,12 +152,16 @@
  */
 #define RSA_FLAG_EXT_PKEY              0x20
 
+/* This flag in the RSA_METHOD enables the new rsa_sign, rsa_verify functions.
+ */
+#define RSA_FLAG_SIGN_VER              0x40
+
 #define RSA_PKCS1_PADDING      1
 #define RSA_SSLV23_PADDING     2
 #define RSA_NO_PADDING         3
 #define RSA_PKCS1_OAEP_PADDING 4
 
-#define RSA_set_app_data(s,arg)         RSA_set_ex_data(s,0,(char *)arg)
+#define RSA_set_app_data(s,arg)         RSA_set_ex_data(s,0,arg)
 #define RSA_get_app_data(s)             RSA_get_ex_data(s,0)
 
 RSA *  RSA_new(void);
@@ -181,6 +197,8 @@
 /* these are the actual SSLeay RSA functions */
 RSA_METHOD *RSA_PKCS1_SSLeay(void);
 
+RSA_METHOD *RSA_null_method(void);
+
 void   ERR_load_RSA_strings(void );
 
 RSA *  d2i_RSAPublicKey(RSA **a, unsigned char **pp, long length);
@@ -241,10 +259,10 @@
 int RSA_padding_check_none(unsigned char *to,int tlen,
        unsigned char *f,int fl,int rsa_len);
 
-int RSA_get_ex_new_index(long argl, char *argp, int (*new_func)(),
-       int (*dup_func)(), void (*free_func)());
-int RSA_set_ex_data(RSA *r,int idx,char *arg);
-char *RSA_get_ex_data(RSA *r, int idx);
+int RSA_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
+       CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func);
+int RSA_set_ex_data(RSA *r,int idx,void *arg);
+void *RSA_get_ex_data(RSA *r, int idx);
 
 /* BEGIN ERROR CODES */
 /* The following lines are auto generated by the script mkerr.pl. Any changes
@@ -262,6 +280,7 @@
 #define RSA_F_RSA_EAY_PUBLIC_ENCRYPT                    104
 #define RSA_F_RSA_GENERATE_KEY                          105
 #define RSA_F_RSA_NEW_METHOD                            106
+#define RSA_F_RSA_NULL                                  124
 #define RSA_F_RSA_PADDING_ADD_NONE                      107
 #define RSA_F_RSA_PADDING_ADD_PKCS1_OAEP                121
 #define RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_1              108
@@ -292,10 +311,11 @@
 #define RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE               110
 #define RSA_R_DATA_TOO_SMALL                            111
 #define RSA_R_DATA_TOO_SMALL_FOR_KEY_SIZE               122
-#define RSA_R_D_E_NOT_CONGRUENT_TO_1                    123
 #define RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY                112
 #define RSA_R_DMP1_NOT_CONGRUENT_TO_D                   124
 #define RSA_R_DMQ1_NOT_CONGRUENT_TO_D                   125
+#define RSA_R_D_E_NOT_CONGRUENT_TO_1                    123
+#define RSA_R_INVALID_MESSAGE_LENGTH                    131
 #define RSA_R_IQMP_NOT_INVERSE_OF_Q                     126
 #define RSA_R_KEY_SIZE_TOO_SMALL                        120
 #define RSA_R_NULL_BEFORE_BLOCK_MISSING                         113
@@ -304,6 +324,7 @@
 #define RSA_R_PADDING_CHECK_FAILED                      114
 #define RSA_R_P_NOT_PRIME                               128
 #define RSA_R_Q_NOT_PRIME                               129
+#define RSA_R_RSA_OPERATIONS_NOT_SUPPORTED              130
 #define RSA_R_SSLV3_ROLLBACK_ATTACK                     115
 #define RSA_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD 116
 #define RSA_R_UNKNOWN_ALGORITHM_TYPE                    117
Index: opensa/openssl/crypto/rsa/rsa_eay.c
diff -u opensa/openssl/crypto/rsa/rsa_eay.c:1.1 opensa/openssl/crypto/rsa/rsa_eay.c:1.2
--- opensa/openssl/crypto/rsa/rsa_eay.c:1.1     Tue Jan 25 23:22:53 2000
+++ opensa/openssl/crypto/rsa/rsa_eay.c Thu Mar  2 21:12:00 2000
@@ -62,6 +62,8 @@
 #include <openssl/rsa.h>
 #include <openssl/rand.h>
 
+#ifndef RSA_NULL
+
 static int RSA_eay_public_encrypt(int flen, unsigned char *from,
                unsigned char *to, RSA *rsa,int padding);
 static int RSA_eay_private_encrypt(int flen, unsigned char *from,
@@ -262,7 +264,7 @@
                goto err;
                }
 
-       /* This check was for equallity but PGP does evil things
+       /* This check was for equality but PGP does evil things
         * and chops off the top '0' bytes */
        if (flen > num)
                {
@@ -355,7 +357,7 @@
                goto err;
                }
 
-       /* This check was for equallity but PGP does evil things
+       /* This check was for equality but PGP does evil things
         * and chops off the top '0' bytes */
        if (flen > num)
                {
@@ -485,5 +487,5 @@
                BN_MONT_CTX_free(rsa->_method_mod_q);
        return(1);
        }
-
 
+#endif
Index: opensa/openssl/crypto/rsa/rsa_err.c
diff -u opensa/openssl/crypto/rsa/rsa_err.c:1.1 opensa/openssl/crypto/rsa/rsa_err.c:1.2
--- opensa/openssl/crypto/rsa/rsa_err.c:1.1     Tue Jan 25 23:22:53 2000
+++ opensa/openssl/crypto/rsa/rsa_err.c Thu Mar  2 21:12:00 2000
@@ -73,6 +73,7 @@
 {ERR_PACK(0,RSA_F_RSA_EAY_PUBLIC_ENCRYPT,0),   "RSA_EAY_PUBLIC_ENCRYPT"},
 {ERR_PACK(0,RSA_F_RSA_GENERATE_KEY,0), "RSA_generate_key"},
 {ERR_PACK(0,RSA_F_RSA_NEW_METHOD,0),   "RSA_new_method"},
+{ERR_PACK(0,RSA_F_RSA_NULL,0), "RSA_NULL"},
 {ERR_PACK(0,RSA_F_RSA_PADDING_ADD_NONE,0),     "RSA_padding_add_none"},
 {ERR_PACK(0,RSA_F_RSA_PADDING_ADD_PKCS1_OAEP,0),       "RSA_padding_add_PKCS1_OAEP"},
 {ERR_PACK(0,RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_1,0),     
"RSA_padding_add_PKCS1_type_1"},
@@ -106,10 +107,11 @@
 {RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE       ,"data too large for key size"},
 {RSA_R_DATA_TOO_SMALL                    ,"data too small"},
 {RSA_R_DATA_TOO_SMALL_FOR_KEY_SIZE       ,"data too small for key size"},
-{RSA_R_D_E_NOT_CONGRUENT_TO_1            ,"d e not congruent to 1"},
 {RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY        ,"digest too big for rsa key"},
 {RSA_R_DMP1_NOT_CONGRUENT_TO_D           ,"dmp1 not congruent to d"},
 {RSA_R_DMQ1_NOT_CONGRUENT_TO_D           ,"dmq1 not congruent to d"},
+{RSA_R_D_E_NOT_CONGRUENT_TO_1            ,"d e not congruent to 1"},
+{RSA_R_INVALID_MESSAGE_LENGTH            ,"invalid message length"},
 {RSA_R_IQMP_NOT_INVERSE_OF_Q             ,"iqmp not inverse of q"},
 {RSA_R_KEY_SIZE_TOO_SMALL                ,"key size too small"},
 {RSA_R_NULL_BEFORE_BLOCK_MISSING         ,"null before block missing"},
@@ -118,6 +120,7 @@
 {RSA_R_PADDING_CHECK_FAILED              ,"padding check failed"},
 {RSA_R_P_NOT_PRIME                       ,"p not prime"},
 {RSA_R_Q_NOT_PRIME                       ,"q not prime"},
+{RSA_R_RSA_OPERATIONS_NOT_SUPPORTED      ,"rsa operations not supported"},
 {RSA_R_SSLV3_ROLLBACK_ATTACK             ,"sslv3 rollback attack"},
 {RSA_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD,"the asn1 object 
identifier is not known for this md"},
 {RSA_R_UNKNOWN_ALGORITHM_TYPE            ,"unknown algorithm type"},
Index: opensa/openssl/crypto/rsa/rsa_gen.c
diff -u opensa/openssl/crypto/rsa/rsa_gen.c:1.1 opensa/openssl/crypto/rsa/rsa_gen.c:1.2
--- opensa/openssl/crypto/rsa/rsa_gen.c:1.1     Tue Jan 25 23:22:53 2000
+++ opensa/openssl/crypto/rsa/rsa_gen.c Thu Mar  2 21:12:00 2000
@@ -74,11 +74,12 @@
        if (ctx == NULL) goto err;
        ctx2=BN_CTX_new();
        if (ctx2 == NULL) goto err;
-       r0= &(ctx->bn[0]);
-       r1= &(ctx->bn[1]);
-       r2= &(ctx->bn[2]);
-       r3= &(ctx->bn[3]);
-       ctx->tos+=4;
+       BN_CTX_start(ctx);
+       r0 = BN_CTX_get(ctx);
+       r1 = BN_CTX_get(ctx);
+       r2 = BN_CTX_get(ctx);
+       r3 = BN_CTX_get(ctx);
+       if (r3 == NULL) goto err;
 
        bitsp=(bits+1)/2;
        bitsq=bits-bitsp;
@@ -181,6 +182,7 @@
                RSAerr(RSA_F_RSA_GENERATE_KEY,ERR_LIB_BN);
                ok=0;
                }
+       BN_CTX_end(ctx);
        BN_CTX_free(ctx);
        BN_CTX_free(ctx2);
        
Index: opensa/openssl/crypto/rsa/rsa_lib.c
diff -u opensa/openssl/crypto/rsa/rsa_lib.c:1.1 opensa/openssl/crypto/rsa/rsa_lib.c:1.2
--- opensa/openssl/crypto/rsa/rsa_lib.c:1.1     Tue Jan 25 23:22:53 2000
+++ opensa/openssl/crypto/rsa/rsa_lib.c Thu Mar  2 21:12:00 2000
@@ -67,7 +67,7 @@
 
 static RSA_METHOD *default_RSA_meth=NULL;
 static int rsa_meth_num=0;
-static STACK *rsa_meth=NULL;
+static STACK_OF(CRYPTO_EX_DATA_FUNCS) *rsa_meth=NULL;
 
 RSA *RSA_new(void)
        {
@@ -105,11 +105,15 @@
 
        if (default_RSA_meth == NULL)
                {
+#ifdef RSA_NULL
+               default_RSA_meth=RSA_null_method();
+#else
 #ifdef RSAref
                default_RSA_meth=RSA_PKCS1_RSAref();
 #else
                default_RSA_meth=RSA_PKCS1_SSLeay();
 #endif
+#endif
                }
        ret=(RSA *)Malloc(sizeof(RSA));
        if (ret == NULL)
@@ -146,7 +150,7 @@
                ret=NULL;
                }
        else
-               CRYPTO_new_ex_data(rsa_meth,(char *)ret,&ret->ex_data);
+               CRYPTO_new_ex_data(rsa_meth,ret,&ret->ex_data);
        return(ret);
        }
 
@@ -169,7 +173,7 @@
                }
 #endif
 
-       CRYPTO_free_ex_data(rsa_meth,(char *)r,&r->ex_data);
+       CRYPTO_free_ex_data(rsa_meth,r,&r->ex_data);
 
        if (r->meth->finish != NULL)
                r->meth->finish(r);
@@ -187,20 +191,20 @@
        Free(r);
        }
 
-int RSA_get_ex_new_index(long argl, char *argp, int (*new_func)(),
-            int (*dup_func)(), void (*free_func)())
+int RSA_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
+            CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func)
         {
        rsa_meth_num++;
        return(CRYPTO_get_ex_new_index(rsa_meth_num-1,
                &rsa_meth,argl,argp,new_func,dup_func,free_func));
         }
 
-int RSA_set_ex_data(RSA *r, int idx, char *arg)
+int RSA_set_ex_data(RSA *r, int idx, void *arg)
        {
        return(CRYPTO_set_ex_data(&r->ex_data,idx,arg));
        }
 
-char *RSA_get_ex_data(RSA *r, int idx)
+void *RSA_get_ex_data(RSA *r, int idx)
        {
        return(CRYPTO_get_ex_data(&r->ex_data,idx));
        }
@@ -265,19 +269,19 @@
        if (rsa->blinding != NULL)
                BN_BLINDING_free(rsa->blinding);
 
-       A= &(ctx->bn[0]);
-       ctx->tos++;
+       BN_CTX_start(ctx);
+       A = BN_CTX_get(ctx);
        if (!BN_rand(A,BN_num_bits(rsa->n)-1,1,0)) goto err;
        if ((Ai=BN_mod_inverse(NULL,A,rsa->n,ctx)) == NULL) goto err;
 
        if (!rsa->meth->bn_mod_exp(A,A,rsa->e,rsa->n,ctx,rsa->_method_mod_n))
            goto err;
        rsa->blinding=BN_BLINDING_new(A,Ai,rsa->n);
-       ctx->tos--;
        rsa->flags|=RSA_FLAG_BLINDING;
        BN_free(Ai);
        ret=1;
 err:
+       BN_CTX_end(ctx);
        if (ctx != p_ctx) BN_CTX_free(ctx);
        return(ret);
        }
Index: opensa/openssl/crypto/rsa/rsa_oaep.c
diff -u opensa/openssl/crypto/rsa/rsa_oaep.c:1.1 
opensa/openssl/crypto/rsa/rsa_oaep.c:1.2
--- opensa/openssl/crypto/rsa/rsa_oaep.c:1.1    Tue Jan 25 23:22:53 2000
+++ opensa/openssl/crypto/rsa/rsa_oaep.c        Thu Mar  2 21:12:00 2000
@@ -50,7 +50,8 @@
           emlen - flen - 2 * SHA_DIGEST_LENGTH - 1);
     db[emlen - flen - SHA_DIGEST_LENGTH - 1] = 0x01;
     memcpy(db + emlen - flen - SHA_DIGEST_LENGTH, from, (unsigned int) flen);
-    RAND_bytes(seed, SHA_DIGEST_LENGTH);
+    if (RAND_bytes(seed, SHA_DIGEST_LENGTH) <= 0)
+       return (0);
 #ifdef PKCS_TESTVECT
     memcpy(seed,
           
"\xaa\xfd\x12\xf6\x59\xca\xe6\x34\x89\xb4\x79\xe5\x07\x6d\xde\xc2\xf0\x6c\xb5\x8f",
Index: opensa/openssl/crypto/rsa/rsa_pk1.c
diff -u opensa/openssl/crypto/rsa/rsa_pk1.c:1.1 opensa/openssl/crypto/rsa/rsa_pk1.c:1.2
--- opensa/openssl/crypto/rsa/rsa_pk1.c:1.1     Tue Jan 25 23:22:53 2000
+++ opensa/openssl/crypto/rsa/rsa_pk1.c Thu Mar  2 21:12:00 2000
@@ -79,7 +79,7 @@
        *(p++)=0;
        *(p++)=1; /* Private Key BT (Block Type) */
 
-       /* padd out with 0xff data */
+       /* pad out with 0xff data */
        j=tlen-3-flen;
        memset(p,0xff,j);
        p+=j;
@@ -130,6 +130,11 @@
                }
        i++; /* Skip over the '\0' */
        j-=i;
+       if (j > tlen)
+               {
+               RSAerr(RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_1,RSA_R_DATA_TOO_LARGE);
+               return(-1);
+               }
        memcpy(to,p,(unsigned int)j);
 
        return(j);
@@ -155,12 +160,14 @@
        /* pad out with non-zero random data */
        j=tlen-3-flen;
 
-       RAND_bytes(p,j);
+       if (RAND_bytes(p,j) <= 0)
+               return(0);
        for (i=0; i<j; i++)
                {
                if (*p == '\0')
                        do      {
-                               RAND_bytes(p,1);
+                               if (RAND_bytes(p,1) <= 0)
+                                       return(0);
                                } while (*p == '\0');
                p++;
                }
@@ -205,6 +212,11 @@
                }
        i++; /* Skip over the '\0' */
        j-=i;
+       if (j > tlen)
+               {
+               RSAerr(RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_2,RSA_R_DATA_TOO_LARGE);
+               return(-1);
+               }
        memcpy(to,p,(unsigned int)j);
 
        return(j);
Index: opensa/openssl/crypto/rsa/rsa_saos.c
diff -u opensa/openssl/crypto/rsa/rsa_saos.c:1.1 
opensa/openssl/crypto/rsa/rsa_saos.c:1.2
--- opensa/openssl/crypto/rsa/rsa_saos.c:1.1    Tue Jan 25 23:22:53 2000
+++ opensa/openssl/crypto/rsa/rsa_saos.c        Thu Mar  2 21:12:00 2000
@@ -136,7 +136,7 @@
        else
                ret=1;
 err:
-       if (sig != NULL) ASN1_OCTET_STRING_free(sig);
+       if (sig != NULL) M_ASN1_OCTET_STRING_free(sig);
        memset(s,0,(unsigned int)siglen);
        Free(s);
        return(ret);
Index: opensa/openssl/crypto/rsa/rsa_sign.c
diff -u opensa/openssl/crypto/rsa/rsa_sign.c:1.1 
opensa/openssl/crypto/rsa/rsa_sign.c:1.2
--- opensa/openssl/crypto/rsa/rsa_sign.c:1.1    Tue Jan 25 23:22:53 2000
+++ opensa/openssl/crypto/rsa/rsa_sign.c        Thu Mar  2 21:12:00 2000
@@ -63,59 +63,77 @@
 #include <openssl/objects.h>
 #include <openssl/x509.h>
 
+/* Size of an SSL signature: MD5+SHA1 */
+#define SSL_SIG_LENGTH 36
+
 int RSA_sign(int type, unsigned char *m, unsigned int m_len,
             unsigned char *sigret, unsigned int *siglen, RSA *rsa)
        {
        X509_SIG sig;
        ASN1_TYPE parameter;
        int i,j,ret=1;
-       unsigned char *p,*s;
+       unsigned char *p,*s = NULL;
        X509_ALGOR algor;
        ASN1_OCTET_STRING digest;
-
-       sig.algor= &algor;
-       sig.algor->algorithm=OBJ_nid2obj(type);
-       if (sig.algor->algorithm == NULL)
-               {
-               RSAerr(RSA_F_RSA_SIGN,RSA_R_UNKNOWN_ALGORITHM_TYPE);
-               return(0);
-               }
-       if (sig.algor->algorithm->length == 0)
-               {
-               
RSAerr(RSA_F_RSA_SIGN,RSA_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD);
-               return(0);
-               }
-       parameter.type=V_ASN1_NULL;
-       parameter.value.ptr=NULL;
-       sig.algor->parameter= &parameter;
-
-       sig.digest= &digest;
-       sig.digest->data=m;
-       sig.digest->length=m_len;
+       if(rsa->flags & RSA_FLAG_SIGN_VER)
+             return rsa->meth->rsa_sign(type, m, m_len, sigret, siglen, rsa);
+       /* Special case: SSL signature, just check the length */
+       if(type == NID_md5_sha1) {
+               if(m_len != SSL_SIG_LENGTH) {
+                       RSAerr(RSA_F_RSA_SIGN,RSA_R_INVALID_MESSAGE_LENGTH);
+                       return(0);
+               }
+               i = SSL_SIG_LENGTH;
+               s = m;
+       } else {
+               sig.algor= &algor;
+               sig.algor->algorithm=OBJ_nid2obj(type);
+               if (sig.algor->algorithm == NULL)
+                       {
+                       RSAerr(RSA_F_RSA_SIGN,RSA_R_UNKNOWN_ALGORITHM_TYPE);
+                       return(0);
+                       }
+               if (sig.algor->algorithm->length == 0)
+                       {
+                       
+RSAerr(RSA_F_RSA_SIGN,RSA_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD);
+                       return(0);
+                       }
+               parameter.type=V_ASN1_NULL;
+               parameter.value.ptr=NULL;
+               sig.algor->parameter= &parameter;
+
+               sig.digest= &digest;
+               sig.digest->data=m;
+               sig.digest->length=m_len;
 
-       i=i2d_X509_SIG(&sig,NULL);
+               i=i2d_X509_SIG(&sig,NULL);
+       }
        j=RSA_size(rsa);
        if ((i-RSA_PKCS1_PADDING) > j)
                {
                RSAerr(RSA_F_RSA_SIGN,RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY);
                return(0);
-               }
-       s=(unsigned char *)Malloc((unsigned int)j+1);
-       if (s == NULL)
-               {
-               RSAerr(RSA_F_RSA_SIGN,ERR_R_MALLOC_FAILURE);
-               return(0);
                }
-       p=s;
-       i2d_X509_SIG(&sig,&p);
+       if(type != NID_md5_sha1) {
+               s=(unsigned char *)Malloc((unsigned int)j+1);
+               if (s == NULL)
+                       {
+                       RSAerr(RSA_F_RSA_SIGN,ERR_R_MALLOC_FAILURE);
+                       return(0);
+                       }
+               p=s;
+               i2d_X509_SIG(&sig,&p);
+       }
        i=RSA_private_encrypt(i,s,sigret,rsa,RSA_PKCS1_PADDING);
        if (i <= 0)
                ret=0;
        else
                *siglen=i;
 
-       memset(s,0,(unsigned int)j+1);
-       Free(s);
+       if(type != NID_md5_sha1) {
+               memset(s,0,(unsigned int)j+1);
+               Free(s);
+       }
        return(ret);
        }
 
@@ -132,53 +150,68 @@
                return(0);
                }
 
+       if(rsa->flags & RSA_FLAG_SIGN_VER)
+           return rsa->meth->rsa_verify(dtype, m, m_len, sigbuf, siglen, rsa);
+
        s=(unsigned char *)Malloc((unsigned int)siglen);
        if (s == NULL)
                {
                RSAerr(RSA_F_RSA_VERIFY,ERR_R_MALLOC_FAILURE);
                goto err;
                }
+       if((dtype == NID_md5_sha1) && (m_len != SSL_SIG_LENGTH) ) {
+                       RSAerr(RSA_F_RSA_VERIFY,RSA_R_INVALID_MESSAGE_LENGTH);
+                       return(0);
+       }
        i=RSA_public_decrypt((int)siglen,sigbuf,s,rsa,RSA_PKCS1_PADDING);
 
        if (i <= 0) goto err;
-
-       p=s;
-       sig=d2i_X509_SIG(NULL,&p,(long)i);
-
-       if (sig == NULL) goto err;
-       sigtype=OBJ_obj2nid(sig->algor->algorithm);
-
 
-#ifdef RSA_DEBUG
-       /* put a backward compatability flag in EAY */
-       fprintf(stderr,"in(%s) expect(%s)\n",OBJ_nid2ln(sigtype),
-               OBJ_nid2ln(dtype));
-#endif
-       if (sigtype != dtype)
-               {
-               if (((dtype == NID_md5) &&
-                       (sigtype == NID_md5WithRSAEncryption)) ||
-                       ((dtype == NID_md2) &&
-                       (sigtype == NID_md2WithRSAEncryption)))
+       /* Special case: SSL signature */
+       if(dtype == NID_md5_sha1) {
+               if((i != SSL_SIG_LENGTH) || memcmp(s, m, SSL_SIG_LENGTH))
+                               RSAerr(RSA_F_RSA_VERIFY,RSA_R_BAD_SIGNATURE);
+               else ret = 1;
+       } else {
+               p=s;
+               sig=d2i_X509_SIG(NULL,&p,(long)i);
+
+               if (sig == NULL) goto err;
+               sigtype=OBJ_obj2nid(sig->algor->algorithm);
+
+
+       #ifdef RSA_DEBUG
+               /* put a backward compatibility flag in EAY */
+               fprintf(stderr,"in(%s) expect(%s)\n",OBJ_nid2ln(sigtype),
+                       OBJ_nid2ln(dtype));
+       #endif
+               if (sigtype != dtype)
                        {
-                       /* ok, we will let it through */
-#if !defined(NO_STDIO) && !defined(WIN16)
-                       fprintf(stderr,"signature has problems, re-make with post 
SSLeay045\n");
-#endif
+                       if (((dtype == NID_md5) &&
+                               (sigtype == NID_md5WithRSAEncryption)) ||
+                               ((dtype == NID_md2) &&
+                               (sigtype == NID_md2WithRSAEncryption)))
+                               {
+                               /* ok, we will let it through */
+       #if !defined(NO_STDIO) && !defined(WIN16)
+                               fprintf(stderr,"signature has problems, re-make with 
+post SSLeay045\n");
+       #endif
+                               }
+                       else
+                               {
+                               RSAerr(RSA_F_RSA_VERIFY,
+                                               RSA_R_ALGORITHM_MISMATCH);
+                               goto err;
+                               }
                        }
-               else
+               if (    ((unsigned int)sig->digest->length != m_len) ||
+                       (memcmp(m,sig->digest->data,m_len) != 0))
                        {
-                       RSAerr(RSA_F_RSA_VERIFY,RSA_R_ALGORITHM_MISMATCH);
-                       goto err;
+                       RSAerr(RSA_F_RSA_VERIFY,RSA_R_BAD_SIGNATURE);
                        }
-               }
-       if (    ((unsigned int)sig->digest->length != m_len) ||
-               (memcmp(m,sig->digest->data,m_len) != 0))
-               {
-               RSAerr(RSA_F_RSA_VERIFY,RSA_R_BAD_SIGNATURE);
-               }
-       else
-               ret=1;
+               else
+                       ret=1;
+       }
 err:
        if (sig != NULL) X509_SIG_free(sig);
        memset(s,0,(unsigned int)siglen);
Index: opensa/openssl/crypto/rsa/rsa_ssl.c
diff -u opensa/openssl/crypto/rsa/rsa_ssl.c:1.1 opensa/openssl/crypto/rsa/rsa_ssl.c:1.2
--- opensa/openssl/crypto/rsa/rsa_ssl.c:1.1     Tue Jan 25 23:22:53 2000
+++ opensa/openssl/crypto/rsa/rsa_ssl.c Thu Mar  2 21:12:00 2000
@@ -82,12 +82,14 @@
        /* pad out with non-zero random data */
        j=tlen-3-8-flen;
 
-       RAND_bytes(p,j);
+       if (RAND_bytes(p,j) <= 0)
+               return(0);
        for (i=0; i<j; i++)
                {
                if (*p == '\0')
                        do      {
-                               RAND_bytes(p,1);
+                               if (RAND_bytes(p,1) <= 0)
+                                       return(0);
                                } while (*p == '\0');
                p++;
                }
@@ -140,6 +142,11 @@
 
        i++; /* Skip over the '\0' */
        j-=i;
+       if (j > tlen)
+               {
+               RSAerr(RSA_F_RSA_PADDING_CHECK_SSLV23,RSA_R_DATA_TOO_LARGE);
+               return(-1);
+               }
        memcpy(to,p,(unsigned int)j);
 
        return(j);
Index: opensa/openssl/crypto/sha/makefile.ssl
diff -u opensa/openssl/crypto/sha/makefile.ssl:1.1 
opensa/openssl/crypto/sha/makefile.ssl:1.2
--- opensa/openssl/crypto/sha/makefile.ssl:1.1  Tue Jan 25 23:22:23 2000
+++ opensa/openssl/crypto/sha/makefile.ssl      Thu Mar  2 21:12:00 2000
@@ -104,8 +104,8 @@
 sha1_one.o: ../../include/openssl/sha.h
 sha1dgst.o: ../../include/openssl/opensslconf.h
 sha1dgst.o: ../../include/openssl/opensslv.h ../../include/openssl/sha.h
-sha1dgst.o: sha_locl.h
+sha1dgst.o: ../md32_common.h sha_locl.h
 sha_dgst.o: ../../include/openssl/opensslconf.h
 sha_dgst.o: ../../include/openssl/opensslv.h ../../include/openssl/sha.h
-sha_dgst.o: sha_locl.h
+sha_dgst.o: ../md32_common.h sha_locl.h
 sha_one.o: ../../include/openssl/sha.h
Index: opensa/openssl/crypto/sha/sha.h
diff -u opensa/openssl/crypto/sha/sha.h:1.1 opensa/openssl/crypto/sha/sha.h:1.2
--- opensa/openssl/crypto/sha/sha.h:1.1 Tue Jan 25 23:22:23 2000
+++ opensa/openssl/crypto/sha/sha.h     Thu Mar  2 21:12:00 2000
@@ -63,7 +63,7 @@
 extern "C" {
 #endif
 
-#ifdef NO_SHA
+#if defined(NO_SHA) || (defined(NO_SHA0) && defined(NO_SHA1))
 #error SHA is disabled.
 #endif
 
@@ -100,17 +100,17 @@
 
 #ifndef NO_SHA0
 void SHA_Init(SHA_CTX *c);
-void SHA_Update(SHA_CTX *c, const unsigned char *data, unsigned long len);
+void SHA_Update(SHA_CTX *c, const void *data, unsigned long len);
 void SHA_Final(unsigned char *md, SHA_CTX *c);
 unsigned char *SHA(const unsigned char *d, unsigned long n,unsigned char *md);
-void SHA_Transform(SHA_CTX *c, unsigned char *data);
+void SHA_Transform(SHA_CTX *c, const unsigned char *data);
 #endif
 #ifndef NO_SHA1
 void SHA1_Init(SHA_CTX *c);
-void SHA1_Update(SHA_CTX *c, const unsigned char *data, unsigned long len);
+void SHA1_Update(SHA_CTX *c, const void *data, unsigned long len);
 void SHA1_Final(unsigned char *md, SHA_CTX *c);
 unsigned char *SHA1(const unsigned char *d, unsigned long n,unsigned char *md);
-void SHA1_Transform(SHA_CTX *c, unsigned char *data);
+void SHA1_Transform(SHA_CTX *c, const unsigned char *data);
 #endif
 #ifdef  __cplusplus
 }
Index: opensa/openssl/crypto/sha/sha1dgst.c
diff -u opensa/openssl/crypto/sha/sha1dgst.c:1.1 
opensa/openssl/crypto/sha/sha1dgst.c:1.2
--- opensa/openssl/crypto/sha/sha1dgst.c:1.1    Tue Jan 25 23:22:23 2000
+++ opensa/openssl/crypto/sha/sha1dgst.c        Thu Mar  2 21:12:00 2000
@@ -56,443 +56,18 @@
  * [including the GNU Public Licence.]
  */
 
-#include <stdio.h>
-#include <string.h>
+#if !defined(NO_SHA1) && !defined(NO_SHA)
+
 #undef  SHA_0
 #define SHA_1
-#include <openssl/sha.h>
-#include "sha_locl.h"
-#include <openssl/opensslv.h>
-
-#ifndef NO_SHA1
-char *SHA1_version="SHA1" OPENSSL_VERSION_PTEXT;
-
-/* Implemented from SHA-1 document - The Secure Hash Algorithm
- */
-
-#define INIT_DATA_h0 0x67452301UL
-#define INIT_DATA_h1 0xefcdab89UL
-#define INIT_DATA_h2 0x98badcfeUL
-#define INIT_DATA_h3 0x10325476UL
-#define INIT_DATA_h4 0xc3d2e1f0UL
-
-#define K_00_19        0x5a827999UL
-#define K_20_39 0x6ed9eba1UL
-#define K_40_59 0x8f1bbcdcUL
-#define K_60_79 0xca62c1d6UL
-
-#ifdef SHA1_ASM
-   void sha1_block_x86(SHA_CTX *c, register SHA_LONG *p, int num);
-#  define sha1_block(c,p,n) sha1_block_x86((c),(p),(n)*SHA_CBLOCK)
-#else
-   static void sha1_block(SHA_CTX *c, register SHA_LONG *p, int num);
-#endif
-
-#if !defined(B_ENDIAN) && defined(SHA1_ASM)
-#  define      M_c2nl          c2l
-#  define      M_p_c2nl        p_c2l
-#  define      M_c2nl_p        c2l_p
-#  define      M_p_c2nl_p      p_c2l_p
-#  define      M_nl2c          l2c
-#else
-#  define      M_c2nl          c2nl
-#  define      M_p_c2nl        p_c2nl
-#  define      M_c2nl_p        c2nl_p
-#  define      M_p_c2nl_p      p_c2nl_p
-#  define      M_nl2c          nl2c
-#endif
-
-void SHA1_Init(SHA_CTX *c)
-       {
-       c->h0=INIT_DATA_h0;
-       c->h1=INIT_DATA_h1;
-       c->h2=INIT_DATA_h2;
-       c->h3=INIT_DATA_h3;
-       c->h4=INIT_DATA_h4;
-       c->Nl=0;
-       c->Nh=0;
-       c->num=0;
-       }
-
-void SHA1_Update(SHA_CTX *c, register const unsigned char *data,
-            unsigned long len)
-       {
-       register SHA_LONG *p;
-       int ew,ec,sw,sc;
-       SHA_LONG l;
-
-       if (len == 0) return;
-
-       l=(c->Nl+(len<<3))&0xffffffffL;
-       if (l < c->Nl) /* overflow */
-               c->Nh++;
-       c->Nh+=(len>>29);
-       c->Nl=l;
-
-       if (c->num != 0)
-               {
-               p=c->data;
-               sw=c->num>>2;
-               sc=c->num&0x03;
-
-               if ((c->num+len) >= SHA_CBLOCK)
-                       {
-                       l= p[sw];
-                       M_p_c2nl(data,l,sc);
-                       p[sw++]=l;
-                       for (; sw<SHA_LBLOCK; sw++)
-                               {
-                               M_c2nl(data,l);
-                               p[sw]=l;
-                               }
-                       len-=(SHA_CBLOCK-c->num);
 
-                       sha1_block(c,p,1);
-                       c->num=0;
-                       /* drop through and do the rest */
-                       }
-               else
-                       {
-                       c->num+=(int)len;
-                       if ((sc+len) < 4) /* ugly, add char's to a word */
-                               {
-                               l= p[sw];
-                               M_p_c2nl_p(data,l,sc,len);
-                               p[sw]=l;
-                               }
-                       else
-                               {
-                               ew=(c->num>>2);
-                               ec=(c->num&0x03);
-                               l= p[sw];
-                               M_p_c2nl(data,l,sc);
-                               p[sw++]=l;
-                               for (; sw < ew; sw++)
-                                       { M_c2nl(data,l); p[sw]=l; }
-                               if (ec)
-                                       {
-                                       M_c2nl_p(data,l,ec);
-                                       p[sw]=l;
-                                       }
-                               }
-                       return;
-                       }
-               }
-       /* We can only do the following code for assember, the reason
-        * being that the sha1_block 'C' version changes the values
-        * in the 'data' array.  The assember code avoids this and
-        * copies it to a local array.  I should be able to do this for
-        * the C version as well....
-        */
-#if SHA_LONG_LOG2==2
-#if defined(B_ENDIAN) || defined(SHA1_ASM)
-       if ((((unsigned long)data)%sizeof(SHA_LONG)) == 0)
-               {
-               sw=len/SHA_CBLOCK;
-               if (sw)
-                       {
-                       sha1_block(c,(SHA_LONG *)data,sw);
-                       sw*=SHA_CBLOCK;
-                       data+=sw;
-                       len-=sw;
-                       }
-               }
-#endif
-#endif
-       /* we now can process the input data in blocks of SHA_CBLOCK
-        * chars and save the leftovers to c->data. */
-       p=c->data;
-       while (len >= SHA_CBLOCK)
-               {
-#if SHA_LONG_LOG2==2
-#if defined(B_ENDIAN) || defined(SHA1_ASM)
-#define SHA_NO_TAIL_CODE
-               /*
-                * Basically we get here only when data happens
-                * to be unaligned.
-                */
-               if (p != (SHA_LONG *)data)
-                       memcpy(p,data,SHA_CBLOCK);
-               data+=SHA_CBLOCK;
-               sha1_block(c,p=c->data,1);
-               len-=SHA_CBLOCK;
-#elif defined(L_ENDIAN)
-#define BE_COPY(dst,src,i)     {                               \
-                               l = ((SHA_LONG *)src)[i];       \
-                               Endian_Reverse32(l);            \
-                               dst[i] = l;                     \
-                               }
-               if ((((unsigned long)data)%sizeof(SHA_LONG)) == 0)
-                       {
-                       for (sw=(SHA_LBLOCK/4); sw; sw--)
-                               {
-                               BE_COPY(p,data,0);
-                               BE_COPY(p,data,1);
-                               BE_COPY(p,data,2);
-                               BE_COPY(p,data,3);
-                               p+=4;
-                               data += 4*sizeof(SHA_LONG);
-                               }
-                       sha1_block(c,p=c->data,1);
-                       len-=SHA_CBLOCK;
-                       continue;
-                       }
-#endif
-#endif
-#ifndef SHA_NO_TAIL_CODE
-               /*
-                * In addition to "sizeof(SHA_LONG)!= 4" case the
-                * following code covers unaligned access cases on
-                * little-endian machines.
-                *                      <[EMAIL PROTECTED]>
-                */
-               p=c->data;
-               for (sw=(SHA_LBLOCK/4); sw; sw--)
-                       {
-                       M_c2nl(data,l); p[0]=l;
-                       M_c2nl(data,l); p[1]=l;
-                       M_c2nl(data,l); p[2]=l;
-                       M_c2nl(data,l); p[3]=l;
-                       p+=4;
-                       }
-               p=c->data;
-               sha1_block(c,p,1);
-               len-=SHA_CBLOCK;
-#endif
-               }
-       ec=(int)len;
-       c->num=ec;
-       ew=(ec>>2);
-       ec&=0x03;
-
-       for (sw=0; sw < ew; sw++)
-               { M_c2nl(data,l); p[sw]=l; }
-       M_c2nl_p(data,l,ec);
-       p[sw]=l;
-       }
-
-void SHA1_Transform(SHA_CTX *c, unsigned char *b)
-       {
-       SHA_LONG p[SHA_LBLOCK];
-
-#if SHA_LONG_LOG2==2
-#if defined(B_ENDIAN) || defined(SHA1_ASM)
-       memcpy(p,b,SHA_CBLOCK);
-       sha1_block(c,p,1);
-       return;
-#elif defined(L_ENDIAN)
-       if (((unsigned long)b%sizeof(SHA_LONG)) == 0)
-               {
-               SHA_LONG *q;
-               int i;
-
-               q=p;
-               for (i=(SHA_LBLOCK/4); i; i--)
-                       {
-                       unsigned long l;
-                       BE_COPY(q,b,0); /* BE_COPY was defined above */
-                       BE_COPY(q,b,1);
-                       BE_COPY(q,b,2);
-                       BE_COPY(q,b,3);
-                       q+=4;
-                       b+=4*sizeof(SHA_LONG);
-                       }
-               sha1_block(c,p,1);
-               return;
-               }
-#endif
-#endif
-#ifndef SHA_NO_TAIL_CODE /* defined above, see comment */
-               {
-               SHA_LONG *q;
-               int i;
-       
-               q=p;
-               for (i=(SHA_LBLOCK/4); i; i--)
-                       {
-                       SHA_LONG l;
-                       c2nl(b,l); *(q++)=l;
-                       c2nl(b,l); *(q++)=l;
-                       c2nl(b,l); *(q++)=l;
-                       c2nl(b,l); *(q++)=l; 
-                       } 
-               sha1_block(c,p,1);
-               }
-#endif
-       }
-
-#ifndef SHA1_ASM
-static void sha1_block(SHA_CTX *c, register SHA_LONG *W, int num)
-       {
-       register SHA_LONG A,B,C,D,E,T;
-       SHA_LONG X[SHA_LBLOCK];
-
-       A=c->h0;
-       B=c->h1;
-       C=c->h2;
-       D=c->h3;
-       E=c->h4;
-
-       for (;;)
-               {
-       BODY_00_15( 0,A,B,C,D,E,T,W);
-       BODY_00_15( 1,T,A,B,C,D,E,W);
-       BODY_00_15( 2,E,T,A,B,C,D,W);
-       BODY_00_15( 3,D,E,T,A,B,C,W);
-       BODY_00_15( 4,C,D,E,T,A,B,W);
-       BODY_00_15( 5,B,C,D,E,T,A,W);
-       BODY_00_15( 6,A,B,C,D,E,T,W);
-       BODY_00_15( 7,T,A,B,C,D,E,W);
-       BODY_00_15( 8,E,T,A,B,C,D,W);
-       BODY_00_15( 9,D,E,T,A,B,C,W);
-       BODY_00_15(10,C,D,E,T,A,B,W);
-       BODY_00_15(11,B,C,D,E,T,A,W);
-       BODY_00_15(12,A,B,C,D,E,T,W);
-       BODY_00_15(13,T,A,B,C,D,E,W);
-       BODY_00_15(14,E,T,A,B,C,D,W);
-       BODY_00_15(15,D,E,T,A,B,C,W);
-       BODY_16_19(16,C,D,E,T,A,B,W,W,W,W);
-       BODY_16_19(17,B,C,D,E,T,A,W,W,W,W);
-       BODY_16_19(18,A,B,C,D,E,T,W,W,W,W);
-       BODY_16_19(19,T,A,B,C,D,E,W,W,W,X);
-
-       BODY_20_31(20,E,T,A,B,C,D,W,W,W,X);
-       BODY_20_31(21,D,E,T,A,B,C,W,W,W,X);
-       BODY_20_31(22,C,D,E,T,A,B,W,W,W,X);
-       BODY_20_31(23,B,C,D,E,T,A,W,W,W,X);
-       BODY_20_31(24,A,B,C,D,E,T,W,W,X,X);
-       BODY_20_31(25,T,A,B,C,D,E,W,W,X,X);
-       BODY_20_31(26,E,T,A,B,C,D,W,W,X,X);
-       BODY_20_31(27,D,E,T,A,B,C,W,W,X,X);
-       BODY_20_31(28,C,D,E,T,A,B,W,W,X,X);
-       BODY_20_31(29,B,C,D,E,T,A,W,W,X,X);
-       BODY_20_31(30,A,B,C,D,E,T,W,X,X,X);
-       BODY_20_31(31,T,A,B,C,D,E,W,X,X,X);
-       BODY_32_39(32,E,T,A,B,C,D,X);
-       BODY_32_39(33,D,E,T,A,B,C,X);
-       BODY_32_39(34,C,D,E,T,A,B,X);
-       BODY_32_39(35,B,C,D,E,T,A,X);
-       BODY_32_39(36,A,B,C,D,E,T,X);
-       BODY_32_39(37,T,A,B,C,D,E,X);
-       BODY_32_39(38,E,T,A,B,C,D,X);
-       BODY_32_39(39,D,E,T,A,B,C,X);
-
-       BODY_40_59(40,C,D,E,T,A,B,X);
-       BODY_40_59(41,B,C,D,E,T,A,X);
-       BODY_40_59(42,A,B,C,D,E,T,X);
-       BODY_40_59(43,T,A,B,C,D,E,X);
-       BODY_40_59(44,E,T,A,B,C,D,X);
-       BODY_40_59(45,D,E,T,A,B,C,X);
-       BODY_40_59(46,C,D,E,T,A,B,X);
-       BODY_40_59(47,B,C,D,E,T,A,X);
-       BODY_40_59(48,A,B,C,D,E,T,X);
-       BODY_40_59(49,T,A,B,C,D,E,X);
-       BODY_40_59(50,E,T,A,B,C,D,X);
-       BODY_40_59(51,D,E,T,A,B,C,X);
-       BODY_40_59(52,C,D,E,T,A,B,X);
-       BODY_40_59(53,B,C,D,E,T,A,X);
-       BODY_40_59(54,A,B,C,D,E,T,X);
-       BODY_40_59(55,T,A,B,C,D,E,X);
-       BODY_40_59(56,E,T,A,B,C,D,X);
-       BODY_40_59(57,D,E,T,A,B,C,X);
-       BODY_40_59(58,C,D,E,T,A,B,X);
-       BODY_40_59(59,B,C,D,E,T,A,X);
-
-       BODY_60_79(60,A,B,C,D,E,T,X);
-       BODY_60_79(61,T,A,B,C,D,E,X);
-       BODY_60_79(62,E,T,A,B,C,D,X);
-       BODY_60_79(63,D,E,T,A,B,C,X);
-       BODY_60_79(64,C,D,E,T,A,B,X);
-       BODY_60_79(65,B,C,D,E,T,A,X);
-       BODY_60_79(66,A,B,C,D,E,T,X);
-       BODY_60_79(67,T,A,B,C,D,E,X);
-       BODY_60_79(68,E,T,A,B,C,D,X);
-       BODY_60_79(69,D,E,T,A,B,C,X);
-       BODY_60_79(70,C,D,E,T,A,B,X);
-       BODY_60_79(71,B,C,D,E,T,A,X);
-       BODY_60_79(72,A,B,C,D,E,T,X);
-       BODY_60_79(73,T,A,B,C,D,E,X);
-       BODY_60_79(74,E,T,A,B,C,D,X);
-       BODY_60_79(75,D,E,T,A,B,C,X);
-       BODY_60_79(76,C,D,E,T,A,B,X);
-       BODY_60_79(77,B,C,D,E,T,A,X);
-       BODY_60_79(78,A,B,C,D,E,T,X);
-       BODY_60_79(79,T,A,B,C,D,E,X);
-       
-       c->h0=(c->h0+E)&0xffffffffL; 
-       c->h1=(c->h1+T)&0xffffffffL;
-       c->h2=(c->h2+A)&0xffffffffL;
-       c->h3=(c->h3+B)&0xffffffffL;
-       c->h4=(c->h4+C)&0xffffffffL;
-
-       if (--num <= 0) break;
-
-       A=c->h0;
-       B=c->h1;
-       C=c->h2;
-       D=c->h3;
-       E=c->h4;
+#include <openssl/opensslv.h>
 
-       W+=SHA_LBLOCK;  /* Note! This can happen only when sizeof(SHA_LONG)
-                        * is 4. Whenever it's not the actual case this
-                        * function is never called with num larger than 1
-                        * and we never advance down here.
-                        *                      <[EMAIL PROTECTED]>
-                        */
-               }
-       }
-#endif
+const char *SHA1_version="SHA1" OPENSSL_VERSION_PTEXT;
 
-void SHA1_Final(unsigned char *md, SHA_CTX *c)
-       {
-       register int i,j;
-       register SHA_LONG l;
-       register SHA_LONG *p;
-       static unsigned char end[4]={0x80,0x00,0x00,0x00};
-       unsigned char *cp=end;
+/* The implementation is in ../md32_common.h */
 
-       /* c->num should definitly have room for at least one more byte. */
-       p=c->data;
-       j=c->num;
-       i=j>>2;
-#ifdef PURIFY
-       if ((j&0x03) == 0) p[i]=0;
-#endif
-       l=p[i];
-       M_p_c2nl(cp,l,j&0x03);
-       p[i]=l;
-       i++;
-       /* i is the next 'undefined word' */
-       if (c->num >= SHA_LAST_BLOCK)
-               {
-               for (; i<SHA_LBLOCK; i++)
-                       p[i]=0;
-               sha1_block(c,p,1);
-               i=0;
-               }
-       for (; i<(SHA_LBLOCK-2); i++)
-               p[i]=0;
-       p[SHA_LBLOCK-2]=c->Nh;
-       p[SHA_LBLOCK-1]=c->Nl;
-#if SHA_LONG_LOG2==2
-#if !defined(B_ENDIAN) && defined(SHA1_ASM)
-       Endian_Reverse32(p[SHA_LBLOCK-2]);
-       Endian_Reverse32(p[SHA_LBLOCK-1]);
-#endif
-#endif
-       sha1_block(c,p,1);
-       cp=md;
-       l=c->h0; nl2c(l,cp);
-       l=c->h1; nl2c(l,cp);
-       l=c->h2; nl2c(l,cp);
-       l=c->h3; nl2c(l,cp);
-       l=c->h4; nl2c(l,cp);
+#include "sha_locl.h"
 
-       c->num=0;
-       /* sha_block may be leaving some stuff on the stack
-        * but I'm not worried :-)
-       memset((void *)c,0,sizeof(SHA_CTX));
-        */
-       }
 #endif
 
Index: opensa/openssl/crypto/sha/sha1s.cpp
diff -u opensa/openssl/crypto/sha/sha1s.cpp:1.1 opensa/openssl/crypto/sha/sha1s.cpp:1.2
--- opensa/openssl/crypto/sha/sha1s.cpp:1.1     Tue Jan 25 23:22:23 2000
+++ opensa/openssl/crypto/sha/sha1s.cpp Thu Mar  2 21:12:00 2000
@@ -34,6 +34,7 @@
 #include <stdlib.h>
 #include <openssl/sha.h>
 
+#define sha1_block_x86 sha1_block_asm_data_order
 extern "C" {
 void sha1_block_x86(SHA_CTX *ctx, unsigned char *buffer,int num);
 }
@@ -55,8 +56,10 @@
        if (num == 0) num=16;
        if (num > 250) num=16;
        numm=num+2;
+#if 0
        num*=64;
        numm*=64;
+#endif
 
        for (j=0; j<6; j++)
                {
@@ -72,7 +75,7 @@
                        sha1_block_x86(&ctx,buffer,num);
                        }
 
-               printf("sha1 (%d bytes) %d %d (%.2f)\n",num,
+               printf("sha1 (%d bytes) %d %d (%.2f)\n",num*64,
                        e1-s1,e2-s2,(double)((e1-s1)-(e2-s2))/2);
                }
        }
Index: opensa/openssl/crypto/sha/sha1test.c
diff -u opensa/openssl/crypto/sha/sha1test.c:1.1 
opensa/openssl/crypto/sha/sha1test.c:1.2
--- opensa/openssl/crypto/sha/sha1test.c:1.1    Tue Jan 25 23:22:23 2000
+++ opensa/openssl/crypto/sha/sha1test.c        Thu Mar  2 21:12:00 2000
@@ -76,26 +76,26 @@
 #undef SHA_0 /* FIPS 180 */
 #define  SHA_1 /* FIPS 180-1 */
 
-char *test[]={
+static char *test[]={
        "abc",
        "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
        NULL,
        };
 
 #ifdef SHA_0
-char *ret[]={
+static char *ret[]={
        "0164b8a914cd2a5e74c4f7ff082c4d97f1edf880",
        "d2516ee1acfa5baf33dfc1c471e438449ef134c8",
        };
-char *bigret=
+static char *bigret=
        "3232affa48628a26653b5aaa44541fd90d690603";
 #endif
 #ifdef SHA_1
-char *ret[]={
+static char *ret[]={
        "a9993e364706816aba3e25717850c26c9cd0d89d",
        "84983e441c3bd26ebaae4aa1f95129e5e54670f1",
        };
-char *bigret=
+static char *bigret=
        "34aa973cd4c4daa4f61eeb2bdbad27316534016f";
 #endif
 
Index: opensa/openssl/crypto/sha/sha_dgst.c
diff -u opensa/openssl/crypto/sha/sha_dgst.c:1.1 
opensa/openssl/crypto/sha/sha_dgst.c:1.2
--- opensa/openssl/crypto/sha/sha_dgst.c:1.1    Tue Jan 25 23:22:23 2000
+++ opensa/openssl/crypto/sha/sha_dgst.c        Thu Mar  2 21:12:00 2000
@@ -1,4 +1,4 @@
-/* crypto/sha/sha_dgst.c */
+/* crypto/sha/sha1dgst.c */
 /* Copyright (C) 1995-1998 Eric Young ([EMAIL PROTECTED])
  * All rights reserved.
  *
@@ -56,437 +56,18 @@
  * [including the GNU Public Licence.]
  */
 
-#include <stdio.h>
-#include <string.h>
-#define  SHA_0
-#undef SHA_1
-#include <openssl/sha.h>
-#include "sha_locl.h"
-#include <openssl/opensslv.h>
-
-#ifndef NO_SHA0
-char *SHA_version="SHA" OPENSSL_VERSION_PTEXT;
-
-/* Implemented from SHA-0 document - The Secure Hash Algorithm
- */
-
-#define INIT_DATA_h0 0x67452301UL
-#define INIT_DATA_h1 0xefcdab89UL
-#define INIT_DATA_h2 0x98badcfeUL
-#define INIT_DATA_h3 0x10325476UL
-#define INIT_DATA_h4 0xc3d2e1f0UL
-
-#define K_00_19        0x5a827999UL
-#define K_20_39 0x6ed9eba1UL
-#define K_40_59 0x8f1bbcdcUL
-#define K_60_79 0xca62c1d6UL
-
-static void sha_block(SHA_CTX *c, register SHA_LONG *p, int num);
-
-#if !defined(B_ENDIAN) && defined(SHA_ASM)
-#  define      M_c2nl          c2l
-#  define      M_p_c2nl        p_c2l
-#  define      M_c2nl_p        c2l_p
-#  define      M_p_c2nl_p      p_c2l_p
-#  define      M_nl2c          l2c
-#else
-#  define      M_c2nl          c2nl
-#  define      M_p_c2nl        p_c2nl
-#  define      M_c2nl_p        c2nl_p
-#  define      M_p_c2nl_p      p_c2nl_p
-#  define      M_nl2c          nl2c
-#endif
-
-void SHA_Init(SHA_CTX *c)
-       {
-       c->h0=INIT_DATA_h0;
-       c->h1=INIT_DATA_h1;
-       c->h2=INIT_DATA_h2;
-       c->h3=INIT_DATA_h3;
-       c->h4=INIT_DATA_h4;
-       c->Nl=0;
-       c->Nh=0;
-       c->num=0;
-       }
+#if !defined(NO_SHA0) && !defined(NO_SHA)
 
-void SHA_Update(SHA_CTX *c, register const unsigned char *data,
-               unsigned long len)
-       {
-       register SHA_LONG *p;
-       int ew,ec,sw,sc;
-       SHA_LONG l;
-
-       if (len == 0) return;
-
-       l=(c->Nl+(len<<3))&0xffffffffL;
-       if (l < c->Nl) /* overflow */
-               c->Nh++;
-       c->Nh+=(len>>29);
-       c->Nl=l;
-
-       if (c->num != 0)
-               {
-               p=c->data;
-               sw=c->num>>2;
-               sc=c->num&0x03;
-
-               if ((c->num+len) >= SHA_CBLOCK)
-                       {
-                       l= p[sw];
-                       M_p_c2nl(data,l,sc);
-                       p[sw++]=l;
-                       for (; sw<SHA_LBLOCK; sw++)
-                               {
-                               M_c2nl(data,l);
-                               p[sw]=l;
-                               }
-                       len-=(SHA_CBLOCK-c->num);
-
-                       sha_block(c,p,1);
-                       c->num=0;
-                       /* drop through and do the rest */
-                       }
-               else
-                       {
-                       c->num+=(int)len;
-                       if ((sc+len) < 4) /* ugly, add char's to a word */
-                               {
-                               l= p[sw];
-                               M_p_c2nl_p(data,l,sc,len);
-                               p[sw]=l;
-                               }
-                       else
-                               {
-                               ew=(c->num>>2);
-                               ec=(c->num&0x03);
-                               l= p[sw];
-                               M_p_c2nl(data,l,sc);
-                               p[sw++]=l;
-                               for (; sw < ew; sw++)
-                                       { M_c2nl(data,l); p[sw]=l; }
-                               if (ec)
-                                       {
-                                       M_c2nl_p(data,l,ec);
-                                       p[sw]=l;
-                                       }
-                               }
-                       return;
-                       }
-               }
-       /* We can only do the following code for assember, the reason
-        * being that the sha_block 'C' version changes the values
-        * in the 'data' array.  The assember code avoids this and
-        * copies it to a local array.  I should be able to do this for
-        * the C version as well....
-        */
-#if SHA_LONG_LOG2==2
-#if defined(B_ENDIAN) || defined(SHA_ASM)
-       if ((((unsigned long)data)%sizeof(SHA_LONG)) == 0)
-               {
-               sw=len/SHA_CBLOCK;
-               if (sw)
-                       {
-                       sha_block(c,(SHA_LONG *)data,sw);
-                       sw*=SHA_CBLOCK;
-                       data+=sw;
-                       len-=sw;
-                       }
-               }
-#endif
-#endif
-       /* we now can process the input data in blocks of SHA_CBLOCK
-        * chars and save the leftovers to c->data. */
-       p=c->data;
-       while (len >= SHA_CBLOCK)
-               {
-#if SHA_LONG_LOG2==2
-#if defined(B_ENDIAN) || defined(SHA_ASM)
-#define SHA_NO_TAIL_CODE
-               /*
-                * Basically we get here only when data happens
-                * to be unaligned.
-                */
-               if (p != (SHA_LONG *)data)
-                       memcpy(p,data,SHA_CBLOCK);
-               data+=SHA_CBLOCK;
-               sha_block(c,p=c->data,1);
-               len-=SHA_CBLOCK;
-#elif defined(L_ENDIAN)
-#define BE_COPY(dst,src,i)     {                               \
-                               l = ((SHA_LONG *)src)[i];       \
-                               Endian_Reverse32(l);            \
-                               dst[i] = l;                     \
-                               }
-               if ((((unsigned long)data)%sizeof(SHA_LONG)) == 0)
-                       {
-                       for (sw=(SHA_LBLOCK/4); sw; sw--)
-                               {
-                               BE_COPY(p,data,0);
-                               BE_COPY(p,data,1);
-                               BE_COPY(p,data,2);
-                               BE_COPY(p,data,3);
-                               p+=4;
-                               data += 4*sizeof(SHA_LONG);
-                               }
-                       sha_block(c,p=c->data,1);
-                       len-=SHA_CBLOCK;
-                       continue;
-                       }
-#endif
-#endif
-#ifndef SHA_NO_TAIL_CODE
-               /*
-                * In addition to "sizeof(SHA_LONG)!= 4" case the
-                * following code covers unaligned access cases on
-                * little-endian machines.
-                *                      <[EMAIL PROTECTED]>
-                */
-               p=c->data;
-               for (sw=(SHA_LBLOCK/4); sw; sw--)
-                       {
-                       M_c2nl(data,l); p[0]=l;
-                       M_c2nl(data,l); p[1]=l;
-                       M_c2nl(data,l); p[2]=l;
-                       M_c2nl(data,l); p[3]=l;
-                       p+=4;
-                       }
-               p=c->data;
-               sha_block(c,p,1);
-               len-=SHA_CBLOCK;
-#endif
-               }
-       ec=(int)len;
-       c->num=ec;
-       ew=(ec>>2);
-       ec&=0x03;
+#undef  SHA_1
+#define SHA_0
 
-       for (sw=0; sw < ew; sw++)
-               { M_c2nl(data,l); p[sw]=l; }
-       M_c2nl_p(data,l,ec);
-       p[sw]=l;
-       }
-
-void SHA_Transform(SHA_CTX *c, unsigned char *b)
-       {
-       SHA_LONG p[SHA_LBLOCK];
-
-#if SHA_LONG_LOG2==2
-#if defined(B_ENDIAN) || defined(SHA_ASM)
-       memcpy(p,b,SHA_CBLOCK);
-       sha_block(c,p,1);
-       return;
-#elif defined(L_ENDIAN)
-       if (((unsigned long)b%sizeof(SHA_LONG)) == 0)
-               {
-               SHA_LONG *q;
-               int i;
-
-               q=p;
-               for (i=(SHA_LBLOCK/4); i; i--)
-                       {
-                       unsigned long l;
-                       BE_COPY(q,b,0); /* BE_COPY was defined above */
-                       BE_COPY(q,b,1);
-                       BE_COPY(q,b,2);
-                       BE_COPY(q,b,3);
-                       q+=4;
-                       b+=4*sizeof(SHA_LONG);
-                       }
-               sha_block(c,p,1);
-               return;
-               }
-#endif
-#endif
-#ifndef SHA_NO_TAIL_CODE /* defined above, see comment */
-               {
-               SHA_LONG *q;
-               int i;
-
-               q=p;
-               for (i=(SHA_LBLOCK/4); i; i--)
-                       {
-                       SHA_LONG l;
-                       c2nl(b,l); *(q++)=l;
-                       c2nl(b,l); *(q++)=l;
-                       c2nl(b,l); *(q++)=l;
-                       c2nl(b,l); *(q++)=l; 
-                       } 
-               sha_block(c,p,1);
-               }
-#endif
-       }
-
-#ifndef SHA_ASM
-static void sha_block(SHA_CTX *c, register SHA_LONG *W, int num)
-       {
-       register SHA_LONG A,B,C,D,E,T;
-       SHA_LONG X[SHA_LBLOCK];
-
-       A=c->h0;
-       B=c->h1;
-       C=c->h2;
-       D=c->h3;
-       E=c->h4;
-
-       for (;;)
-               {
-       BODY_00_15( 0,A,B,C,D,E,T,W);
-       BODY_00_15( 1,T,A,B,C,D,E,W);
-       BODY_00_15( 2,E,T,A,B,C,D,W);
-       BODY_00_15( 3,D,E,T,A,B,C,W);
-       BODY_00_15( 4,C,D,E,T,A,B,W);
-       BODY_00_15( 5,B,C,D,E,T,A,W);
-       BODY_00_15( 6,A,B,C,D,E,T,W);
-       BODY_00_15( 7,T,A,B,C,D,E,W);
-       BODY_00_15( 8,E,T,A,B,C,D,W);
-       BODY_00_15( 9,D,E,T,A,B,C,W);
-       BODY_00_15(10,C,D,E,T,A,B,W);
-       BODY_00_15(11,B,C,D,E,T,A,W);
-       BODY_00_15(12,A,B,C,D,E,T,W);
-       BODY_00_15(13,T,A,B,C,D,E,W);
-       BODY_00_15(14,E,T,A,B,C,D,W);
-       BODY_00_15(15,D,E,T,A,B,C,W);
-       BODY_16_19(16,C,D,E,T,A,B,W,W,W,W);
-       BODY_16_19(17,B,C,D,E,T,A,W,W,W,W);
-       BODY_16_19(18,A,B,C,D,E,T,W,W,W,W);
-       BODY_16_19(19,T,A,B,C,D,E,W,W,W,X);
-
-       BODY_20_31(20,E,T,A,B,C,D,W,W,W,X);
-       BODY_20_31(21,D,E,T,A,B,C,W,W,W,X);
-       BODY_20_31(22,C,D,E,T,A,B,W,W,W,X);
-       BODY_20_31(23,B,C,D,E,T,A,W,W,W,X);
-       BODY_20_31(24,A,B,C,D,E,T,W,W,X,X);
-       BODY_20_31(25,T,A,B,C,D,E,W,W,X,X);
-       BODY_20_31(26,E,T,A,B,C,D,W,W,X,X);
-       BODY_20_31(27,D,E,T,A,B,C,W,W,X,X);
-       BODY_20_31(28,C,D,E,T,A,B,W,W,X,X);
-       BODY_20_31(29,B,C,D,E,T,A,W,W,X,X);
-       BODY_20_31(30,A,B,C,D,E,T,W,X,X,X);
-       BODY_20_31(31,T,A,B,C,D,E,W,X,X,X);
-       BODY_32_39(32,E,T,A,B,C,D,X);
-       BODY_32_39(33,D,E,T,A,B,C,X);
-       BODY_32_39(34,C,D,E,T,A,B,X);
-       BODY_32_39(35,B,C,D,E,T,A,X);
-       BODY_32_39(36,A,B,C,D,E,T,X);
-       BODY_32_39(37,T,A,B,C,D,E,X);
-       BODY_32_39(38,E,T,A,B,C,D,X);
-       BODY_32_39(39,D,E,T,A,B,C,X);
-
-       BODY_40_59(40,C,D,E,T,A,B,X);
-       BODY_40_59(41,B,C,D,E,T,A,X);
-       BODY_40_59(42,A,B,C,D,E,T,X);
-       BODY_40_59(43,T,A,B,C,D,E,X);
-       BODY_40_59(44,E,T,A,B,C,D,X);
-       BODY_40_59(45,D,E,T,A,B,C,X);
-       BODY_40_59(46,C,D,E,T,A,B,X);
-       BODY_40_59(47,B,C,D,E,T,A,X);
-       BODY_40_59(48,A,B,C,D,E,T,X);
-       BODY_40_59(49,T,A,B,C,D,E,X);
-       BODY_40_59(50,E,T,A,B,C,D,X);
-       BODY_40_59(51,D,E,T,A,B,C,X);
-       BODY_40_59(52,C,D,E,T,A,B,X);
-       BODY_40_59(53,B,C,D,E,T,A,X);
-       BODY_40_59(54,A,B,C,D,E,T,X);
-       BODY_40_59(55,T,A,B,C,D,E,X);
-       BODY_40_59(56,E,T,A,B,C,D,X);
-       BODY_40_59(57,D,E,T,A,B,C,X);
-       BODY_40_59(58,C,D,E,T,A,B,X);
-       BODY_40_59(59,B,C,D,E,T,A,X);
-
-       BODY_60_79(60,A,B,C,D,E,T,X);
-       BODY_60_79(61,T,A,B,C,D,E,X);
-       BODY_60_79(62,E,T,A,B,C,D,X);
-       BODY_60_79(63,D,E,T,A,B,C,X);
-       BODY_60_79(64,C,D,E,T,A,B,X);
-       BODY_60_79(65,B,C,D,E,T,A,X);
-       BODY_60_79(66,A,B,C,D,E,T,X);
-       BODY_60_79(67,T,A,B,C,D,E,X);
-       BODY_60_79(68,E,T,A,B,C,D,X);
-       BODY_60_79(69,D,E,T,A,B,C,X);
-       BODY_60_79(70,C,D,E,T,A,B,X);
-       BODY_60_79(71,B,C,D,E,T,A,X);
-       BODY_60_79(72,A,B,C,D,E,T,X);
-       BODY_60_79(73,T,A,B,C,D,E,X);
-       BODY_60_79(74,E,T,A,B,C,D,X);
-       BODY_60_79(75,D,E,T,A,B,C,X);
-       BODY_60_79(76,C,D,E,T,A,B,X);
-       BODY_60_79(77,B,C,D,E,T,A,X);
-       BODY_60_79(78,A,B,C,D,E,T,X);
-       BODY_60_79(79,T,A,B,C,D,E,X);
-       
-       c->h0=(c->h0+E)&0xffffffffL; 
-       c->h1=(c->h1+T)&0xffffffffL;
-       c->h2=(c->h2+A)&0xffffffffL;
-       c->h3=(c->h3+B)&0xffffffffL;
-       c->h4=(c->h4+C)&0xffffffffL;
-
-       if (--num <= 0) break;
+#include <openssl/opensslv.h>
 
-       A=c->h0;
-       B=c->h1;
-       C=c->h2;
-       D=c->h3;
-       E=c->h4;
+const char *SHA_version="SHA" OPENSSL_VERSION_PTEXT;
 
-       W+=SHA_LBLOCK;  /* Note! This can happen only when sizeof(SHA_LONG)
-                        * is 4. Whenever it's not the actual case this
-                        * function is never called with num larger than 1
-                        * and we never advance down here.
-                        *                      <[EMAIL PROTECTED]>
-                        */
-               }
-       }
-#endif
+/* The implementation is in ../md32_common.h */
 
-void SHA_Final(unsigned char *md, SHA_CTX *c)
-       {
-       register int i,j;
-       register SHA_LONG l;
-       register SHA_LONG *p;
-       static unsigned char end[4]={0x80,0x00,0x00,0x00};
-       unsigned char *cp=end;
+#include "sha_locl.h"
 
-       /* c->num should definitly have room for at least one more byte. */
-       p=c->data;
-       j=c->num;
-       i=j>>2;
-#ifdef PURIFY
-       if ((j&0x03) == 0) p[i]=0;
-#endif
-       l=p[i];
-       M_p_c2nl(cp,l,j&0x03);
-       p[i]=l;
-       i++;
-       /* i is the next 'undefined word' */
-       if (c->num >= SHA_LAST_BLOCK)
-               {
-               for (; i<SHA_LBLOCK; i++)
-                       p[i]=0;
-               sha_block(c,p,1);
-               i=0;
-               }
-       for (; i<(SHA_LBLOCK-2); i++)
-               p[i]=0;
-       p[SHA_LBLOCK-2]=c->Nh;
-       p[SHA_LBLOCK-1]=c->Nl;
-#if SHA_LONG_LOG2==2
-#if !defined(B_ENDIAN) && defined(SHA_ASM)
-       Endian_Reverse32(p[SHA_LBLOCK-2]);
-       Endian_Reverse32(p[SHA_LBLOCK-1]);
 #endif
-#endif
-       sha_block(c,p,1);
-       cp=md;
-       l=c->h0; nl2c(l,cp);
-       l=c->h1; nl2c(l,cp);
-       l=c->h2; nl2c(l,cp);
-       l=c->h3; nl2c(l,cp);
-       l=c->h4; nl2c(l,cp);
 
-       c->num=0;
-       /* sha_block may be leaving some stuff on the stack
-        * but I'm not worried :-)
-       memset((void *)c,0,sizeof(SHA_CTX));
-        */
-       }
-#endif
Index: opensa/openssl/crypto/sha/sha_locl.h
diff -u opensa/openssl/crypto/sha/sha_locl.h:1.1 
opensa/openssl/crypto/sha/sha_locl.h:1.2
--- opensa/openssl/crypto/sha/sha_locl.h:1.1    Tue Jan 25 23:22:23 2000
+++ opensa/openssl/crypto/sha/sha_locl.h        Thu Mar  2 21:12:00 2000
@@ -60,180 +60,105 @@
 #include <string.h>
 
 #include <openssl/opensslconf.h>
+#include <openssl/sha.h>
 
-#ifdef undef
-/* one or the other needs to be defined */
-#ifndef SHA_1 /* FIPE 180-1 */
-#define SHA_0 /* FIPS 180   */
-#endif
-#endif
-
-#undef c2nl
-#define c2nl(c,l)      (l =(((unsigned long)(*((c)++)))<<24), \
-                        l|=(((unsigned long)(*((c)++)))<<16), \
-                        l|=(((unsigned long)(*((c)++)))<< 8), \
-                        l|=(((unsigned long)(*((c)++)))    ))
-
-#undef p_c2nl
-#define p_c2nl(c,l,n)  { \
-                       switch (n) { \
-                       case 0: l =((unsigned long)(*((c)++)))<<24; \
-                       case 1: l|=((unsigned long)(*((c)++)))<<16; \
-                       case 2: l|=((unsigned long)(*((c)++)))<< 8; \
-                       case 3: l|=((unsigned long)(*((c)++))); \
-                               } \
-                       }
-
-#undef c2nl_p
-/* NOTE the pointer is not incremented at the end of this */
-#define c2nl_p(c,l,n)  { \
-                       l=0; \
-                       (c)+=n; \
-                       switch (n) { \
-                       case 3: l =((unsigned long)(*(--(c))))<< 8; \
-                       case 2: l|=((unsigned long)(*(--(c))))<<16; \
-                       case 1: l|=((unsigned long)(*(--(c))))<<24; \
-                               } \
-                       }
-
-#undef p_c2nl_p
-#define p_c2nl_p(c,l,sc,len) { \
-                       switch (sc) \
-                               { \
-                       case 0: l =((unsigned long)(*((c)++)))<<24; \
-                               if (--len == 0) break; \
-                       case 1: l|=((unsigned long)(*((c)++)))<<16; \
-                               if (--len == 0) break; \
-                       case 2: l|=((unsigned long)(*((c)++)))<< 8; \
-                               } \
-                       }
-
-#undef nl2c
-#define nl2c(l,c)      (*((c)++)=(unsigned char)(((l)>>24)&0xff), \
-                        *((c)++)=(unsigned char)(((l)>>16)&0xff), \
-                        *((c)++)=(unsigned char)(((l)>> 8)&0xff), \
-                        *((c)++)=(unsigned char)(((l)    )&0xff))
-
-#undef c2l
-#define c2l(c,l)       (l =(((unsigned long)(*((c)++)))    ), \
-                        l|=(((unsigned long)(*((c)++)))<< 8), \
-                        l|=(((unsigned long)(*((c)++)))<<16), \
-                        l|=(((unsigned long)(*((c)++)))<<24))
-
-#undef p_c2l
-#define p_c2l(c,l,n)   { \
-                       switch (n) { \
-                       case 0: l =((unsigned long)(*((c)++))); \
-                       case 1: l|=((unsigned long)(*((c)++)))<< 8; \
-                       case 2: l|=((unsigned long)(*((c)++)))<<16; \
-                       case 3: l|=((unsigned long)(*((c)++)))<<24; \
-                               } \
-                       }
-
-#undef c2l_p
-/* NOTE the pointer is not incremented at the end of this */
-#define c2l_p(c,l,n)   { \
-                       l=0; \
-                       (c)+=n; \
-                       switch (n) { \
-                       case 3: l =((unsigned long)(*(--(c))))<<16; \
-                       case 2: l|=((unsigned long)(*(--(c))))<< 8; \
-                       case 1: l|=((unsigned long)(*(--(c)))); \
-                               } \
-                       }
-
-#undef p_c2l_p
-#define p_c2l_p(c,l,sc,len) { \
-                       switch (sc) \
-                               { \
-                       case 0: l =((unsigned long)(*((c)++))); \
-                               if (--len == 0) break; \
-                       case 1: l|=((unsigned long)(*((c)++)))<< 8; \
-                               if (--len == 0) break; \
-                       case 2: l|=((unsigned long)(*((c)++)))<<16; \
-                               } \
-                       }
-
-#undef l2c
-#define l2c(l,c)       (*((c)++)=(unsigned char)(((l)    )&0xff), \
-                        *((c)++)=(unsigned char)(((l)>> 8)&0xff), \
-                        *((c)++)=(unsigned char)(((l)>>16)&0xff), \
-                        *((c)++)=(unsigned char)(((l)>>24)&0xff))
-
 #ifndef SHA_LONG_LOG2
 #define SHA_LONG_LOG2  2       /* default to 32 bits */
 #endif
 
-#undef ROTATE
-#undef Endian_Reverse32
-#if defined(WIN32)
-#define ROTATE(a,n)     _lrotl(a,n)
-#elif defined(__GNUC__) && !defined(PEDANTIC)
-/* some inline assembler templates by <[EMAIL PROTECTED]> */
-#if defined(__i386) && !defined(NO_ASM)
-#define ROTATE(a,n)    ({ register unsigned int ret;   \
-                               asm ("roll %1,%0"       \
-                               : "=r"(ret)             \
-                               : "I"(n), "0"(a)        \
-                               : "cc");                \
-                          ret;                         \
-                       })
-#ifndef I386_ONLY
-#define Endian_Reverse32(a) \
-                       { register unsigned int ltmp=(a);       \
-                               asm ("bswapl %0"        \
-                               : "=r"(ltmp) : "0"(ltmp));      \
-                         (a)=ltmp;                     \
-                       }
-#endif
-#elif defined(__powerpc)
-#define ROTATE(a,n)    ({ register unsigned int ret;           \
-                               asm ("rlwinm %0,%1,%2,0,31"     \
-                               : "=r"(ret)                     \
-                               : "r"(a), "I"(n));              \
-                          ret;                                 \
-                       })
-/* Endian_Reverse32 is not needed for PowerPC */
-#endif
-#endif
+#define DATA_ORDER_IS_BIG_ENDIAN
 
-/* A nice byte order reversal from Wei Dai <[EMAIL PROTECTED]> */
-#ifdef ROTATE
-#ifndef Endian_Reverse32
-/* 5 instructions with rotate instruction, else 9 */
-#define Endian_Reverse32(a) \
-       { \
-       unsigned long t=(a); \
-       (a)=((ROTATE(t,8)&0x00FF00FF)|(ROTATE((t&0x00FF00FF),24))); \
-       }
-#endif
+#define HASH_LONG               SHA_LONG
+#define HASH_LONG_LOG2          SHA_LONG_LOG2
+#define HASH_CTX                SHA_CTX
+#define HASH_CBLOCK             SHA_CBLOCK
+#define HASH_LBLOCK             SHA_LBLOCK
+#define HASH_MAKE_STRING(c,s)   do {   \
+       unsigned long ll;               \
+       ll=(c)->h0; HOST_l2c(ll,(s));   \
+       ll=(c)->h1; HOST_l2c(ll,(s));   \
+       ll=(c)->h2; HOST_l2c(ll,(s));   \
+       ll=(c)->h3; HOST_l2c(ll,(s));   \
+       ll=(c)->h4; HOST_l2c(ll,(s));   \
+       } while (0)
+
+#if defined(SHA_0)
+
+# define HASH_UPDATE                   SHA_Update
+# define HASH_TRANSFORM                SHA_Transform
+# define HASH_FINAL                    SHA_Final
+# define HASH_INIT                     SHA_Init
+# define HASH_BLOCK_HOST_ORDER         sha_block_host_order
+# define HASH_BLOCK_DATA_ORDER         sha_block_data_order
+# define Xupdate(a,ix,ia,ib,ic,id)     (ix=(a)=(ia^ib^ic^id))
+
+  void sha_block_host_order (SHA_CTX *c, const void *p,int num);
+  void sha_block_data_order (SHA_CTX *c, const void *p,int num);
+
+#elif defined(SHA_1)
+
+# define HASH_UPDATE                   SHA1_Update
+# define HASH_TRANSFORM                SHA1_Transform
+# define HASH_FINAL                    SHA1_Final
+# define HASH_INIT                     SHA1_Init
+# define HASH_BLOCK_HOST_ORDER         sha1_block_host_order
+# define HASH_BLOCK_DATA_ORDER         sha1_block_data_order
+# if defined(__MWERKS__) && defined(__MC68K__)
+   /* Metrowerks for Motorola fails otherwise:-( <[EMAIL PROTECTED]> */
+#  define Xupdate(a,ix,ia,ib,ic,id)    do { (a)=(ia^ib^ic^id);         \
+                                            ix=(a)=ROTATE((a),1);      \
+                                       } while (0)
+# else
+#  define Xupdate(a,ix,ia,ib,ic,id)    ( (a)=(ia^ib^ic^id),    \
+                                         ix=(a)=ROTATE((a),1)  \
+                                       )
+# endif
+
+# ifdef SHA1_ASM
+#  if defined(__i386) || defined(_M_IX86) || defined(__INTEL__)
+#   define sha1_block_host_order               sha1_block_asm_host_order
+#   define DONT_IMPLEMENT_BLOCK_HOST_ORDER
+#   define sha1_block_data_order               sha1_block_asm_data_order
+#   define DONT_IMPLEMENT_BLOCK_DATA_ORDER
+#   define HASH_BLOCK_DATA_ORDER_ALIGNED       sha1_block_asm_data_order
+#  endif
+# endif
+  void sha1_block_host_order (SHA_CTX *c, const void *p,int num);
+  void sha1_block_data_order (SHA_CTX *c, const void *p,int num);
+
 #else
-#define ROTATE(a,n)     (((a)<<(n))|(((a)&0xffffffff)>>(32-(n))))
-#ifndef Endian_Reverse32
-/* 6 instructions with rotate instruction, else 8 */
-#define Endian_Reverse32(a) \
-       { \
-       unsigned long t=(a); \
-       t=(((t>>8)&0x00FF00FF)|((t&0x00FF00FF)<<8)); \
-       (a)=ROTATE(t,16); \
-       }
+# error "Either SHA_0 or SHA_1 must be defined."
 #endif
-/*
- * Originally the middle line started with l=(((l&0xFF00FF00)>>8)|...
- * It's rewritten as above for two reasons:
- *     - RISCs aren't good at long constants and have to explicitely
- *       compose 'em with several (well, usually 2) instructions in a
- *       register before performing the actual operation and (as you
- *       already realized:-) having same constant should inspire the
- *       compiler to permanently allocate the only register for it;
- *     - most modern CPUs have two ALUs, but usually only one has
- *       circuitry for shifts:-( this minor tweak inspires compiler
- *       to schedule shift instructions in a better way...
- *
- *                             <[EMAIL PROTECTED]>
- */
+
+#ifndef FLAT_INC
+#include "../md32_common.h"
+#else
+#include "md32_common.h"
 #endif
 
+#define INIT_DATA_h0 0x67452301UL
+#define INIT_DATA_h1 0xefcdab89UL
+#define INIT_DATA_h2 0x98badcfeUL
+#define INIT_DATA_h3 0x10325476UL
+#define INIT_DATA_h4 0xc3d2e1f0UL
+
+void HASH_INIT (SHA_CTX *c)
+       {
+       c->h0=INIT_DATA_h0;
+       c->h1=INIT_DATA_h1;
+       c->h2=INIT_DATA_h2;
+       c->h3=INIT_DATA_h3;
+       c->h4=INIT_DATA_h4;
+       c->Nl=0;
+       c->Nh=0;
+       c->num=0;
+       }
+
+#define K_00_19        0x5a827999UL
+#define K_20_39 0x6ed9eba1UL
+#define K_40_59 0x8f1bbcdcUL
+#define K_60_79 0xca62c1d6UL
+
 /* As  pointed out by Wei Dai <[EMAIL PROTECTED]>, F() below can be
  * simplified to the code in F_00_19.  Wei attributes these optimisations
  * to Peter Gutmann's SHS code, and he attributes it to Rich Schroeppel.
@@ -245,44 +170,306 @@
 #define        F_20_39(b,c,d)  ((b) ^ (c) ^ (d))
 #define F_40_59(b,c,d) (((b) & (c)) | (((b)|(c)) & (d))) 
 #define        F_60_79(b,c,d)  F_20_39(b,c,d)
-
-#undef Xupdate
-#ifdef SHA_0
-#define Xupdate(a,i,ia,ib,ic,id) X[(i)&0x0f]=(a)=\
-       (ia[(i)&0x0f]^ib[((i)+2)&0x0f]^ic[((i)+8)&0x0f]^id[((i)+13)&0x0f]);
-#endif
-#ifdef SHA_1
-#define Xupdate(a,i,ia,ib,ic,id) (a)=\
-       (ia[(i)&0x0f]^ib[((i)+2)&0x0f]^ic[((i)+8)&0x0f]^id[((i)+13)&0x0f]);\
-       X[(i)&0x0f]=(a)=ROTATE((a),1);
-#endif
 
-#define BODY_00_15(i,a,b,c,d,e,f,xa) \
-       (f)=xa[i]+(e)+K_00_19+ROTATE((a),5)+F_00_19((b),(c),(d)); \
+#define BODY_00_15(i,a,b,c,d,e,f,xi) \
+       (f)=xi+(e)+K_00_19+ROTATE((a),5)+F_00_19((b),(c),(d)); \
        (b)=ROTATE((b),30);
 
-#define BODY_16_19(i,a,b,c,d,e,f,xa,xb,xc,xd) \
-       Xupdate(f,i,xa,xb,xc,xd); \
+#define BODY_16_19(i,a,b,c,d,e,f,xi,xa,xb,xc,xd) \
+       Xupdate(f,xi,xa,xb,xc,xd); \
        (f)+=(e)+K_00_19+ROTATE((a),5)+F_00_19((b),(c),(d)); \
        (b)=ROTATE((b),30);
 
-#define BODY_20_31(i,a,b,c,d,e,f,xa,xb,xc,xd) \
-       Xupdate(f,i,xa,xb,xc,xd); \
+#define BODY_20_31(i,a,b,c,d,e,f,xi,xa,xb,xc,xd) \
+       Xupdate(f,xi,xa,xb,xc,xd); \
        (f)+=(e)+K_20_39+ROTATE((a),5)+F_20_39((b),(c),(d)); \
        (b)=ROTATE((b),30);
 
-#define BODY_32_39(i,a,b,c,d,e,f,xa) \
-       Xupdate(f,i,xa,xa,xa,xa); \
+#define BODY_32_39(i,a,b,c,d,e,f,xa,xb,xc,xd) \
+       Xupdate(f,xa,xa,xb,xc,xd); \
        (f)+=(e)+K_20_39+ROTATE((a),5)+F_20_39((b),(c),(d)); \
        (b)=ROTATE((b),30);
 
-#define BODY_40_59(i,a,b,c,d,e,f,xa) \
-       Xupdate(f,i,xa,xa,xa,xa); \
+#define BODY_40_59(i,a,b,c,d,e,f,xa,xb,xc,xd) \
+       Xupdate(f,xa,xa,xb,xc,xd); \
        (f)+=(e)+K_40_59+ROTATE((a),5)+F_40_59((b),(c),(d)); \
        (b)=ROTATE((b),30);
 
-#define BODY_60_79(i,a,b,c,d,e,f,xa) \
-       Xupdate(f,i,xa,xa,xa,xa); \
-       (f)=X[(i)&0x0f]+(e)+K_60_79+ROTATE((a),5)+F_60_79((b),(c),(d)); \
+#define BODY_60_79(i,a,b,c,d,e,f,xa,xb,xc,xd) \
+       Xupdate(f,xa,xa,xb,xc,xd); \
+       (f)=xa+(e)+K_60_79+ROTATE((a),5)+F_60_79((b),(c),(d)); \
        (b)=ROTATE((b),30);
 
+#ifdef X
+#undef X
+#endif
+#ifndef MD32_XARRAY
+  /*
+   * Originally X was an array. As it's automatic it's natural
+   * to expect RISC compiler to accomodate at least part of it in
+   * the register bank, isn't it? Unfortunately not all compilers
+   * "find" this expectation reasonable:-( On order to make such
+   * compilers generate better code I replace X[] with a bunch of
+   * X0, X1, etc. See the function body below...
+   *                                   <[EMAIL PROTECTED]>
+   */
+# define X(i)  XX##i
+#else
+  /*
+   * However! Some compilers (most notably HP C) get overwhelmed by
+   * that many local variables so that we have to have the way to
+   * fall down to the original behavior.
+   */
+# define X(i)  XX[i]
+#endif
+
+#ifndef DONT_IMPLEMENT_BLOCK_HOST_ORDER
+void HASH_BLOCK_HOST_ORDER (SHA_CTX *c, const void *d, int num)
+       {
+       const SHA_LONG *W=d;
+       register unsigned long A,B,C,D,E,T;
+#ifndef MD32_XARRAY
+       unsigned long   XX0, XX1, XX2, XX3, XX4, XX5, XX6, XX7,
+                       XX8, XX9,XX10,XX11,XX12,XX13,XX14,XX15;
+#else
+       SHA_LONG        XX[16];
+#endif
+
+       A=c->h0;
+       B=c->h1;
+       C=c->h2;
+       D=c->h3;
+       E=c->h4;
+
+       for (;;)
+               {
+       BODY_00_15( 0,A,B,C,D,E,T,W[ 0]);
+       BODY_00_15( 1,T,A,B,C,D,E,W[ 1]);
+       BODY_00_15( 2,E,T,A,B,C,D,W[ 2]);
+       BODY_00_15( 3,D,E,T,A,B,C,W[ 3]);
+       BODY_00_15( 4,C,D,E,T,A,B,W[ 4]);
+       BODY_00_15( 5,B,C,D,E,T,A,W[ 5]);
+       BODY_00_15( 6,A,B,C,D,E,T,W[ 6]);
+       BODY_00_15( 7,T,A,B,C,D,E,W[ 7]);
+       BODY_00_15( 8,E,T,A,B,C,D,W[ 8]);
+       BODY_00_15( 9,D,E,T,A,B,C,W[ 9]);
+       BODY_00_15(10,C,D,E,T,A,B,W[10]);
+       BODY_00_15(11,B,C,D,E,T,A,W[11]);
+       BODY_00_15(12,A,B,C,D,E,T,W[12]);
+       BODY_00_15(13,T,A,B,C,D,E,W[13]);
+       BODY_00_15(14,E,T,A,B,C,D,W[14]);
+       BODY_00_15(15,D,E,T,A,B,C,W[15]);
+
+       BODY_16_19(16,C,D,E,T,A,B,X( 0),W[ 0],W[ 2],W[ 8],W[13]);
+       BODY_16_19(17,B,C,D,E,T,A,X( 1),W[ 1],W[ 3],W[ 9],W[14]);
+       BODY_16_19(18,A,B,C,D,E,T,X( 2),W[ 2],W[ 4],W[10],W[15]);
+       BODY_16_19(19,T,A,B,C,D,E,X( 3),W[ 3],W[ 5],W[11],X( 0));
+
+       BODY_20_31(20,E,T,A,B,C,D,X( 4),W[ 4],W[ 6],W[12],X( 1));
+       BODY_20_31(21,D,E,T,A,B,C,X( 5),W[ 5],W[ 7],W[13],X( 2));
+       BODY_20_31(22,C,D,E,T,A,B,X( 6),W[ 6],W[ 8],W[14],X( 3));
+       BODY_20_31(23,B,C,D,E,T,A,X( 7),W[ 7],W[ 9],W[15],X( 4));
+       BODY_20_31(24,A,B,C,D,E,T,X( 8),W[ 8],W[10],X( 0),X( 5));
+       BODY_20_31(25,T,A,B,C,D,E,X( 9),W[ 9],W[11],X( 1),X( 6));
+       BODY_20_31(26,E,T,A,B,C,D,X(10),W[10],W[12],X( 2),X( 7));
+       BODY_20_31(27,D,E,T,A,B,C,X(11),W[11],W[13],X( 3),X( 8));
+       BODY_20_31(28,C,D,E,T,A,B,X(12),W[12],W[14],X( 4),X( 9));
+       BODY_20_31(29,B,C,D,E,T,A,X(13),W[13],W[15],X( 5),X(10));
+       BODY_20_31(30,A,B,C,D,E,T,X(14),W[14],X( 0),X( 6),X(11));
+       BODY_20_31(31,T,A,B,C,D,E,X(15),W[15],X( 1),X( 7),X(12));
+
+       BODY_32_39(32,E,T,A,B,C,D,X( 0),X( 2),X( 8),X(13));
+       BODY_32_39(33,D,E,T,A,B,C,X( 1),X( 3),X( 9),X(14));
+       BODY_32_39(34,C,D,E,T,A,B,X( 2),X( 4),X(10),X(15));
+       BODY_32_39(35,B,C,D,E,T,A,X( 3),X( 5),X(11),X( 0));
+       BODY_32_39(36,A,B,C,D,E,T,X( 4),X( 6),X(12),X( 1));
+       BODY_32_39(37,T,A,B,C,D,E,X( 5),X( 7),X(13),X( 2));
+       BODY_32_39(38,E,T,A,B,C,D,X( 6),X( 8),X(14),X( 3));
+       BODY_32_39(39,D,E,T,A,B,C,X( 7),X( 9),X(15),X( 4));
+
+       BODY_40_59(40,C,D,E,T,A,B,X( 8),X(10),X( 0),X( 5));
+       BODY_40_59(41,B,C,D,E,T,A,X( 9),X(11),X( 1),X( 6));
+       BODY_40_59(42,A,B,C,D,E,T,X(10),X(12),X( 2),X( 7));
+       BODY_40_59(43,T,A,B,C,D,E,X(11),X(13),X( 3),X( 8));
+       BODY_40_59(44,E,T,A,B,C,D,X(12),X(14),X( 4),X( 9));
+       BODY_40_59(45,D,E,T,A,B,C,X(13),X(15),X( 5),X(10));
+       BODY_40_59(46,C,D,E,T,A,B,X(14),X( 0),X( 6),X(11));
+       BODY_40_59(47,B,C,D,E,T,A,X(15),X( 1),X( 7),X(12));
+       BODY_40_59(48,A,B,C,D,E,T,X( 0),X( 2),X( 8),X(13));
+       BODY_40_59(49,T,A,B,C,D,E,X( 1),X( 3),X( 9),X(14));
+       BODY_40_59(50,E,T,A,B,C,D,X( 2),X( 4),X(10),X(15));
+       BODY_40_59(51,D,E,T,A,B,C,X( 3),X( 5),X(11),X( 0));
+       BODY_40_59(52,C,D,E,T,A,B,X( 4),X( 6),X(12),X( 1));
+       BODY_40_59(53,B,C,D,E,T,A,X( 5),X( 7),X(13),X( 2));
+       BODY_40_59(54,A,B,C,D,E,T,X( 6),X( 8),X(14),X( 3));
+       BODY_40_59(55,T,A,B,C,D,E,X( 7),X( 9),X(15),X( 4));
+       BODY_40_59(56,E,T,A,B,C,D,X( 8),X(10),X( 0),X( 5));
+       BODY_40_59(57,D,E,T,A,B,C,X( 9),X(11),X( 1),X( 6));
+       BODY_40_59(58,C,D,E,T,A,B,X(10),X(12),X( 2),X( 7));
+       BODY_40_59(59,B,C,D,E,T,A,X(11),X(13),X( 3),X( 8));
+
+       BODY_60_79(60,A,B,C,D,E,T,X(12),X(14),X( 4),X( 9));
+       BODY_60_79(61,T,A,B,C,D,E,X(13),X(15),X( 5),X(10));
+       BODY_60_79(62,E,T,A,B,C,D,X(14),X( 0),X( 6),X(11));
+       BODY_60_79(63,D,E,T,A,B,C,X(15),X( 1),X( 7),X(12));
+       BODY_60_79(64,C,D,E,T,A,B,X( 0),X( 2),X( 8),X(13));
+       BODY_60_79(65,B,C,D,E,T,A,X( 1),X( 3),X( 9),X(14));
+       BODY_60_79(66,A,B,C,D,E,T,X( 2),X( 4),X(10),X(15));
+       BODY_60_79(67,T,A,B,C,D,E,X( 3),X( 5),X(11),X( 0));
+       BODY_60_79(68,E,T,A,B,C,D,X( 4),X( 6),X(12),X( 1));
+       BODY_60_79(69,D,E,T,A,B,C,X( 5),X( 7),X(13),X( 2));
+       BODY_60_79(70,C,D,E,T,A,B,X( 6),X( 8),X(14),X( 3));
+       BODY_60_79(71,B,C,D,E,T,A,X( 7),X( 9),X(15),X( 4));
+       BODY_60_79(72,A,B,C,D,E,T,X( 8),X(10),X( 0),X( 5));
+       BODY_60_79(73,T,A,B,C,D,E,X( 9),X(11),X( 1),X( 6));
+       BODY_60_79(74,E,T,A,B,C,D,X(10),X(12),X( 2),X( 7));
+       BODY_60_79(75,D,E,T,A,B,C,X(11),X(13),X( 3),X( 8));
+       BODY_60_79(76,C,D,E,T,A,B,X(12),X(14),X( 4),X( 9));
+       BODY_60_79(77,B,C,D,E,T,A,X(13),X(15),X( 5),X(10));
+       BODY_60_79(78,A,B,C,D,E,T,X(14),X( 0),X( 6),X(11));
+       BODY_60_79(79,T,A,B,C,D,E,X(15),X( 1),X( 7),X(12));
+       
+       c->h0=(c->h0+E)&0xffffffffL; 
+       c->h1=(c->h1+T)&0xffffffffL;
+       c->h2=(c->h2+A)&0xffffffffL;
+       c->h3=(c->h3+B)&0xffffffffL;
+       c->h4=(c->h4+C)&0xffffffffL;
+
+       if (--num <= 0) break;
+
+       A=c->h0;
+       B=c->h1;
+       C=c->h2;
+       D=c->h3;
+       E=c->h4;
+
+       W+=SHA_LBLOCK;
+               }
+       }
+#endif
+
+#ifndef DONT_IMPLEMENT_BLOCK_DATA_ORDER
+void HASH_BLOCK_DATA_ORDER (SHA_CTX *c, const void *p, int num)
+       {
+       const unsigned char *data=p;
+       register unsigned long A,B,C,D,E,T,l;
+#ifndef MD32_XARRAY
+       unsigned long   XX0, XX1, XX2, XX3, XX4, XX5, XX6, XX7,
+                       XX8, XX9,XX10,XX11,XX12,XX13,XX14,XX15;
+#else
+       SHA_LONG        XX[16];
+#endif
+
+       A=c->h0;
+       B=c->h1;
+       C=c->h2;
+       D=c->h3;
+       E=c->h4;
+
+       for (;;)
+               {
+
+       HOST_c2l(data,l); X( 0)=l;              HOST_c2l(data,l); X( 1)=l;
+       BODY_00_15( 0,A,B,C,D,E,T,X( 0));       HOST_c2l(data,l); X( 2)=l;
+       BODY_00_15( 1,T,A,B,C,D,E,X( 1));       HOST_c2l(data,l); X( 3)=l;
+       BODY_00_15( 2,E,T,A,B,C,D,X( 2));       HOST_c2l(data,l); X( 4)=l;
+       BODY_00_15( 3,D,E,T,A,B,C,X( 3));       HOST_c2l(data,l); X( 5)=l;
+       BODY_00_15( 4,C,D,E,T,A,B,X( 4));       HOST_c2l(data,l); X( 6)=l;
+       BODY_00_15( 5,B,C,D,E,T,A,X( 5));       HOST_c2l(data,l); X( 7)=l;
+       BODY_00_15( 6,A,B,C,D,E,T,X( 6));       HOST_c2l(data,l); X( 8)=l;
+       BODY_00_15( 7,T,A,B,C,D,E,X( 7));       HOST_c2l(data,l); X( 9)=l;
+       BODY_00_15( 8,E,T,A,B,C,D,X( 8));       HOST_c2l(data,l); X(10)=l;
+       BODY_00_15( 9,D,E,T,A,B,C,X( 9));       HOST_c2l(data,l); X(11)=l;
+       BODY_00_15(10,C,D,E,T,A,B,X(10));       HOST_c2l(data,l); X(12)=l;
+       BODY_00_15(11,B,C,D,E,T,A,X(11));       HOST_c2l(data,l); X(13)=l;
+       BODY_00_15(12,A,B,C,D,E,T,X(12));       HOST_c2l(data,l); X(14)=l;
+       BODY_00_15(13,T,A,B,C,D,E,X(13));       HOST_c2l(data,l); X(15)=l;
+       BODY_00_15(14,E,T,A,B,C,D,X(14));
+       BODY_00_15(15,D,E,T,A,B,C,X(15));
+
+       BODY_16_19(16,C,D,E,T,A,B,X( 0),X( 0),X( 2),X( 8),X(13));
+       BODY_16_19(17,B,C,D,E,T,A,X( 1),X( 1),X( 3),X( 9),X(14));
+       BODY_16_19(18,A,B,C,D,E,T,X( 2),X( 2),X( 4),X(10),X(15));
+       BODY_16_19(19,T,A,B,C,D,E,X( 3),X( 3),X( 5),X(11),X( 0));
+
+       BODY_20_31(20,E,T,A,B,C,D,X( 4),X( 4),X( 6),X(12),X( 1));
+       BODY_20_31(21,D,E,T,A,B,C,X( 5),X( 5),X( 7),X(13),X( 2));
+       BODY_20_31(22,C,D,E,T,A,B,X( 6),X( 6),X( 8),X(14),X( 3));
+       BODY_20_31(23,B,C,D,E,T,A,X( 7),X( 7),X( 9),X(15),X( 4));
+       BODY_20_31(24,A,B,C,D,E,T,X( 8),X( 8),X(10),X( 0),X( 5));
+       BODY_20_31(25,T,A,B,C,D,E,X( 9),X( 9),X(11),X( 1),X( 6));
+       BODY_20_31(26,E,T,A,B,C,D,X(10),X(10),X(12),X( 2),X( 7));
+       BODY_20_31(27,D,E,T,A,B,C,X(11),X(11),X(13),X( 3),X( 8));
+       BODY_20_31(28,C,D,E,T,A,B,X(12),X(12),X(14),X( 4),X( 9));
+       BODY_20_31(29,B,C,D,E,T,A,X(13),X(13),X(15),X( 5),X(10));
+       BODY_20_31(30,A,B,C,D,E,T,X(14),X(14),X( 0),X( 6),X(11));
+       BODY_20_31(31,T,A,B,C,D,E,X(15),X(15),X( 1),X( 7),X(12));
+
+       BODY_32_39(32,E,T,A,B,C,D,X( 0),X( 2),X( 8),X(13));
+       BODY_32_39(33,D,E,T,A,B,C,X( 1),X( 3),X( 9),X(14));
+       BODY_32_39(34,C,D,E,T,A,B,X( 2),X( 4),X(10),X(15));
+       BODY_32_39(35,B,C,D,E,T,A,X( 3),X( 5),X(11),X( 0));
+       BODY_32_39(36,A,B,C,D,E,T,X( 4),X( 6),X(12),X( 1));
+       BODY_32_39(37,T,A,B,C,D,E,X( 5),X( 7),X(13),X( 2));
+       BODY_32_39(38,E,T,A,B,C,D,X( 6),X( 8),X(14),X( 3));
+       BODY_32_39(39,D,E,T,A,B,C,X( 7),X( 9),X(15),X( 4));
+
+       BODY_40_59(40,C,D,E,T,A,B,X( 8),X(10),X( 0),X( 5));
+       BODY_40_59(41,B,C,D,E,T,A,X( 9),X(11),X( 1),X( 6));
+       BODY_40_59(42,A,B,C,D,E,T,X(10),X(12),X( 2),X( 7));
+       BODY_40_59(43,T,A,B,C,D,E,X(11),X(13),X( 3),X( 8));
+       BODY_40_59(44,E,T,A,B,C,D,X(12),X(14),X( 4),X( 9));
+       BODY_40_59(45,D,E,T,A,B,C,X(13),X(15),X( 5),X(10));
+       BODY_40_59(46,C,D,E,T,A,B,X(14),X( 0),X( 6),X(11));
+       BODY_40_59(47,B,C,D,E,T,A,X(15),X( 1),X( 7),X(12));
+       BODY_40_59(48,A,B,C,D,E,T,X( 0),X( 2),X( 8),X(13));
+       BODY_40_59(49,T,A,B,C,D,E,X( 1),X( 3),X( 9),X(14));
+       BODY_40_59(50,E,T,A,B,C,D,X( 2),X( 4),X(10),X(15));
+       BODY_40_59(51,D,E,T,A,B,C,X( 3),X( 5),X(11),X( 0));
+       BODY_40_59(52,C,D,E,T,A,B,X( 4),X( 6),X(12),X( 1));
+       BODY_40_59(53,B,C,D,E,T,A,X( 5),X( 7),X(13),X( 2));
+       BODY_40_59(54,A,B,C,D,E,T,X( 6),X( 8),X(14),X( 3));
+       BODY_40_59(55,T,A,B,C,D,E,X( 7),X( 9),X(15),X( 4));
+       BODY_40_59(56,E,T,A,B,C,D,X( 8),X(10),X( 0),X( 5));
+       BODY_40_59(57,D,E,T,A,B,C,X( 9),X(11),X( 1),X( 6));
+       BODY_40_59(58,C,D,E,T,A,B,X(10),X(12),X( 2),X( 7));
+       BODY_40_59(59,B,C,D,E,T,A,X(11),X(13),X( 3),X( 8));
+
+       BODY_60_79(60,A,B,C,D,E,T,X(12),X(14),X( 4),X( 9));
+       BODY_60_79(61,T,A,B,C,D,E,X(13),X(15),X( 5),X(10));
+       BODY_60_79(62,E,T,A,B,C,D,X(14),X( 0),X( 6),X(11));
+       BODY_60_79(63,D,E,T,A,B,C,X(15),X( 1),X( 7),X(12));
+       BODY_60_79(64,C,D,E,T,A,B,X( 0),X( 2),X( 8),X(13));
+       BODY_60_79(65,B,C,D,E,T,A,X( 1),X( 3),X( 9),X(14));
+       BODY_60_79(66,A,B,C,D,E,T,X( 2),X( 4),X(10),X(15));
+       BODY_60_79(67,T,A,B,C,D,E,X( 3),X( 5),X(11),X( 0));
+       BODY_60_79(68,E,T,A,B,C,D,X( 4),X( 6),X(12),X( 1));
+       BODY_60_79(69,D,E,T,A,B,C,X( 5),X( 7),X(13),X( 2));
+       BODY_60_79(70,C,D,E,T,A,B,X( 6),X( 8),X(14),X( 3));
+       BODY_60_79(71,B,C,D,E,T,A,X( 7),X( 9),X(15),X( 4));
+       BODY_60_79(72,A,B,C,D,E,T,X( 8),X(10),X( 0),X( 5));
+       BODY_60_79(73,T,A,B,C,D,E,X( 9),X(11),X( 1),X( 6));
+       BODY_60_79(74,E,T,A,B,C,D,X(10),X(12),X( 2),X( 7));
+       BODY_60_79(75,D,E,T,A,B,C,X(11),X(13),X( 3),X( 8));
+       BODY_60_79(76,C,D,E,T,A,B,X(12),X(14),X( 4),X( 9));
+       BODY_60_79(77,B,C,D,E,T,A,X(13),X(15),X( 5),X(10));
+       BODY_60_79(78,A,B,C,D,E,T,X(14),X( 0),X( 6),X(11));
+       BODY_60_79(79,T,A,B,C,D,E,X(15),X( 1),X( 7),X(12));
+       
+       c->h0=(c->h0+E)&0xffffffffL; 
+       c->h1=(c->h1+T)&0xffffffffL;
+       c->h2=(c->h2+A)&0xffffffffL;
+       c->h3=(c->h3+B)&0xffffffffL;
+       c->h4=(c->h4+C)&0xffffffffL;
+
+       if (--num <= 0) break;
+
+       A=c->h0;
+       B=c->h1;
+       C=c->h2;
+       D=c->h3;
+       E=c->h4;
+
+               }
+       }
+#endif
Index: opensa/openssl/crypto/sha/shatest.c
diff -u opensa/openssl/crypto/sha/shatest.c:1.1 opensa/openssl/crypto/sha/shatest.c:1.2
--- opensa/openssl/crypto/sha/shatest.c:1.1     Tue Jan 25 23:22:23 2000
+++ opensa/openssl/crypto/sha/shatest.c Thu Mar  2 21:12:00 2000
@@ -76,26 +76,26 @@
 #define SHA_0 /* FIPS 180 */
 #undef  SHA_1 /* FIPS 180-1 */
 
-char *test[]={
+static char *test[]={
        "abc",
        "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
        NULL,
        };
 
 #ifdef SHA_0
-char *ret[]={
+static char *ret[]={
        "0164b8a914cd2a5e74c4f7ff082c4d97f1edf880",
        "d2516ee1acfa5baf33dfc1c471e438449ef134c8",
        };
-char *bigret=
+static char *bigret=
        "3232affa48628a26653b5aaa44541fd90d690603";
 #endif
 #ifdef SHA_1
-char *ret[]={
+static char *ret[]={
        "a9993e364706816aba3e25717850c26c9cd0d89d",
        "84983e441c3bd26ebaae4aa1f95129e5e54670f1",
        };
-char *bigret=
+static char *bigret=
        "34aa973cd4c4daa4f61eeb2bdbad27316534016f";
 #endif
 
Index: opensa/openssl/crypto/sha/asm/s1-win32.asm
diff -u opensa/openssl/crypto/sha/asm/s1-win32.asm:1.1 
opensa/openssl/crypto/sha/asm/s1-win32.asm:1.2
--- opensa/openssl/crypto/sha/asm/s1-win32.asm:1.1      Tue Jan 25 23:22:34 2000
+++ opensa/openssl/crypto/sha/asm/s1-win32.asm  Thu Mar  2 21:12:01 2000
@@ -8,302 +8,303 @@
         .486
 .model FLAT
 _TEXT  SEGMENT
-PUBLIC _sha1_block_x86
+PUBLIC _sha1_block_asm_data_order
 
-_sha1_block_x86 PROC NEAR
+_sha1_block_asm_data_order PROC NEAR
+       mov     ecx,            DWORD PTR 12[esp]
        push    esi
+       shl     ecx,            6
+       mov     esi,            DWORD PTR 12[esp]
        push    ebp
-       mov     eax,            DWORD PTR 20[esp]
-       mov     esi,            DWORD PTR 16[esp]
-       add     eax,            esi
-       mov     ebp,            DWORD PTR 12[esp]
+       add     ecx,            esi
        push    ebx
-       sub     eax,            64
+       mov     ebp,            DWORD PTR 16[esp]
        push    edi
-       mov     ebx,            DWORD PTR 4[ebp]
-       sub     esp,            72
        mov     edx,            DWORD PTR 12[ebp]
+       sub     esp,            108
        mov     edi,            DWORD PTR 16[ebp]
-       mov     ecx,            DWORD PTR 8[ebp]
-       mov     DWORD PTR 68[esp],eax
+       mov     ebx,            DWORD PTR 8[ebp]
+       mov     DWORD PTR 68[esp],ecx
        ; First we need to setup the X array
-       mov     eax,            DWORD PTR [esi]
 L000start:
        ; First, load the words onto the stack in network byte order
+       mov     eax,            DWORD PTR [esi]
+       mov     ecx,            DWORD PTR 4[esi]
        bswap   eax
+       bswap   ecx
        mov     DWORD PTR [esp],eax
-       mov     eax,            DWORD PTR 4[esi]
-       bswap   eax
-       mov     DWORD PTR 4[esp],eax
+       mov     DWORD PTR 4[esp],ecx
        mov     eax,            DWORD PTR 8[esi]
+       mov     ecx,            DWORD PTR 12[esi]
        bswap   eax
+       bswap   ecx
        mov     DWORD PTR 8[esp],eax
-       mov     eax,            DWORD PTR 12[esi]
-       bswap   eax
-       mov     DWORD PTR 12[esp],eax
+       mov     DWORD PTR 12[esp],ecx
        mov     eax,            DWORD PTR 16[esi]
+       mov     ecx,            DWORD PTR 20[esi]
        bswap   eax
+       bswap   ecx
        mov     DWORD PTR 16[esp],eax
-       mov     eax,            DWORD PTR 20[esi]
-       bswap   eax
-       mov     DWORD PTR 20[esp],eax
+       mov     DWORD PTR 20[esp],ecx
        mov     eax,            DWORD PTR 24[esi]
+       mov     ecx,            DWORD PTR 28[esi]
        bswap   eax
+       bswap   ecx
        mov     DWORD PTR 24[esp],eax
-       mov     eax,            DWORD PTR 28[esi]
-       bswap   eax
-       mov     DWORD PTR 28[esp],eax
+       mov     DWORD PTR 28[esp],ecx
        mov     eax,            DWORD PTR 32[esi]
+       mov     ecx,            DWORD PTR 36[esi]
        bswap   eax
+       bswap   ecx
        mov     DWORD PTR 32[esp],eax
-       mov     eax,            DWORD PTR 36[esi]
-       bswap   eax
-       mov     DWORD PTR 36[esp],eax
+       mov     DWORD PTR 36[esp],ecx
        mov     eax,            DWORD PTR 40[esi]
+       mov     ecx,            DWORD PTR 44[esi]
        bswap   eax
+       bswap   ecx
        mov     DWORD PTR 40[esp],eax
-       mov     eax,            DWORD PTR 44[esi]
-       bswap   eax
-       mov     DWORD PTR 44[esp],eax
+       mov     DWORD PTR 44[esp],ecx
        mov     eax,            DWORD PTR 48[esi]
+       mov     ecx,            DWORD PTR 52[esi]
        bswap   eax
+       bswap   ecx
        mov     DWORD PTR 48[esp],eax
-       mov     eax,            DWORD PTR 52[esi]
-       bswap   eax
-       mov     DWORD PTR 52[esp],eax
+       mov     DWORD PTR 52[esp],ecx
        mov     eax,            DWORD PTR 56[esi]
+       mov     ecx,            DWORD PTR 60[esi]
        bswap   eax
+       bswap   ecx
        mov     DWORD PTR 56[esp],eax
-       mov     eax,            DWORD PTR 60[esi]
-       bswap   eax
-       mov     DWORD PTR 60[esp],eax
+       mov     DWORD PTR 60[esp],ecx
        ; We now have the X array on the stack
        ; starting at sp-4
-       mov     DWORD PTR 64[esp],esi
+       mov     DWORD PTR 132[esp],esi
+L001shortcut:
        ; 
        ; Start processing
        mov     eax,            DWORD PTR [ebp]
+       mov     ecx,            DWORD PTR 4[ebp]
        ; 00_15 0
-       mov     esi,            ecx
+       mov     esi,            ebx
        mov     ebp,            eax
        xor     esi,            edx
        rol     ebp,            5
-       and     esi,            ebx
+       and     esi,            ecx
        add     ebp,            edi
-       ror     ebx,            1
+       ror     ecx,            1
        mov     edi,            DWORD PTR [esp]
-       ror     ebx,            1
+       ror     ecx,            1
        xor     esi,            edx
        lea     ebp,            DWORD PTR 1518500249[edi*1+ebp]
-       mov     edi,            ebx
+       mov     edi,            ecx
        add     esi,            ebp
-       xor     edi,            ecx
+       xor     edi,            ebx
        mov     ebp,            esi
        and     edi,            eax
        rol     ebp,            5
        add     ebp,            edx
        mov     edx,            DWORD PTR 4[esp]
        ror     eax,            1
-       xor     edi,            ecx
+       xor     edi,            ebx
        ror     eax,            1
        lea     ebp,            DWORD PTR 1518500249[edx*1+ebp]
        add     edi,            ebp
        ; 00_15 2
        mov     edx,            eax
        mov     ebp,            edi
-       xor     edx,            ebx
+       xor     edx,            ecx
        rol     ebp,            5
        and     edx,            esi
-       add     ebp,            ecx
+       add     ebp,            ebx
        ror     esi,            1
-       mov     ecx,            DWORD PTR 8[esp]
+       mov     ebx,            DWORD PTR 8[esp]
        ror     esi,            1
-       xor     edx,            ebx
-       lea     ebp,            DWORD PTR 1518500249[ecx*1+ebp]
-       mov     ecx,            esi
+       xor     edx,            ecx
+       lea     ebp,            DWORD PTR 1518500249[ebx*1+ebp]
+       mov     ebx,            esi
        add     edx,            ebp
-       xor     ecx,            eax
+       xor     ebx,            eax
        mov     ebp,            edx
-       and     ecx,            edi
+       and     ebx,            edi
        rol     ebp,            5
-       add     ebp,            ebx
-       mov     ebx,            DWORD PTR 12[esp]
+       add     ebp,            ecx
+       mov     ecx,            DWORD PTR 12[esp]
        ror     edi,            1
-       xor     ecx,            eax
+       xor     ebx,            eax
        ror     edi,            1
-       lea     ebp,            DWORD PTR 1518500249[ebx*1+ebp]
-       add     ecx,            ebp
+       lea     ebp,            DWORD PTR 1518500249[ecx*1+ebp]
+       add     ebx,            ebp
        ; 00_15 4
-       mov     ebx,            edi
-       mov     ebp,            ecx
-       xor     ebx,            esi
+       mov     ecx,            edi
+       mov     ebp,            ebx
+       xor     ecx,            esi
        rol     ebp,            5
-       and     ebx,            edx
+       and     ecx,            edx
        add     ebp,            eax
        ror     edx,            1
        mov     eax,            DWORD PTR 16[esp]
        ror     edx,            1
-       xor     ebx,            esi
+       xor     ecx,            esi
        lea     ebp,            DWORD PTR 1518500249[eax*1+ebp]
        mov     eax,            edx
-       add     ebx,            ebp
+       add     ecx,            ebp
        xor     eax,            edi
-       mov     ebp,            ebx
-       and     eax,            ecx
+       mov     ebp,            ecx
+       and     eax,            ebx
        rol     ebp,            5
        add     ebp,            esi
        mov     esi,            DWORD PTR 20[esp]
-       ror     ecx,            1
+       ror     ebx,            1
        xor     eax,            edi
-       ror     ecx,            1
+       ror     ebx,            1
        lea     ebp,            DWORD PTR 1518500249[esi*1+ebp]
        add     eax,            ebp
        ; 00_15 6
-       mov     esi,            ecx
+       mov     esi,            ebx
        mov     ebp,            eax
        xor     esi,            edx
        rol     ebp,            5
-       and     esi,            ebx
+       and     esi,            ecx
        add     ebp,            edi
-       ror     ebx,            1
+       ror     ecx,            1
        mov     edi,            DWORD PTR 24[esp]
-       ror     ebx,            1
+       ror     ecx,            1
        xor     esi,            edx
        lea     ebp,            DWORD PTR 1518500249[edi*1+ebp]
-       mov     edi,            ebx
+       mov     edi,            ecx
        add     esi,            ebp
-       xor     edi,            ecx
+       xor     edi,            ebx
        mov     ebp,            esi
        and     edi,            eax
        rol     ebp,            5
        add     ebp,            edx
        mov     edx,            DWORD PTR 28[esp]
        ror     eax,            1
-       xor     edi,            ecx
+       xor     edi,            ebx
        ror     eax,            1
        lea     ebp,            DWORD PTR 1518500249[edx*1+ebp]
        add     edi,            ebp
        ; 00_15 8
        mov     edx,            eax
        mov     ebp,            edi
-       xor     edx,            ebx
+       xor     edx,            ecx
        rol     ebp,            5
        and     edx,            esi
-       add     ebp,            ecx
+       add     ebp,            ebx
        ror     esi,            1
-       mov     ecx,            DWORD PTR 32[esp]
+       mov     ebx,            DWORD PTR 32[esp]
        ror     esi,            1
-       xor     edx,            ebx
-       lea     ebp,            DWORD PTR 1518500249[ecx*1+ebp]
-       mov     ecx,            esi
+       xor     edx,            ecx
+       lea     ebp,            DWORD PTR 1518500249[ebx*1+ebp]
+       mov     ebx,            esi
        add     edx,            ebp
-       xor     ecx,            eax
+       xor     ebx,            eax
        mov     ebp,            edx
-       and     ecx,            edi
+       and     ebx,            edi
        rol     ebp,            5
-       add     ebp,            ebx
-       mov     ebx,            DWORD PTR 36[esp]
+       add     ebp,            ecx
+       mov     ecx,            DWORD PTR 36[esp]
        ror     edi,            1
-       xor     ecx,            eax
+       xor     ebx,            eax
        ror     edi,            1
-       lea     ebp,            DWORD PTR 1518500249[ebx*1+ebp]
-       add     ecx,            ebp
+       lea     ebp,            DWORD PTR 1518500249[ecx*1+ebp]
+       add     ebx,            ebp
        ; 00_15 10
-       mov     ebx,            edi
-       mov     ebp,            ecx
-       xor     ebx,            esi
+       mov     ecx,            edi
+       mov     ebp,            ebx
+       xor     ecx,            esi
        rol     ebp,            5
-       and     ebx,            edx
+       and     ecx,            edx
        add     ebp,            eax
        ror     edx,            1
        mov     eax,            DWORD PTR 40[esp]
        ror     edx,            1
-       xor     ebx,            esi
+       xor     ecx,            esi
        lea     ebp,            DWORD PTR 1518500249[eax*1+ebp]
        mov     eax,            edx
-       add     ebx,            ebp
+       add     ecx,            ebp
        xor     eax,            edi
-       mov     ebp,            ebx
-       and     eax,            ecx
+       mov     ebp,            ecx
+       and     eax,            ebx
        rol     ebp,            5
        add     ebp,            esi
        mov     esi,            DWORD PTR 44[esp]
-       ror     ecx,            1
+       ror     ebx,            1
        xor     eax,            edi
-       ror     ecx,            1
+       ror     ebx,            1
        lea     ebp,            DWORD PTR 1518500249[esi*1+ebp]
        add     eax,            ebp
        ; 00_15 12
-       mov     esi,            ecx
+       mov     esi,            ebx
        mov     ebp,            eax
        xor     esi,            edx
        rol     ebp,            5
-       and     esi,            ebx
+       and     esi,            ecx
        add     ebp,            edi
-       ror     ebx,            1
+       ror     ecx,            1
        mov     edi,            DWORD PTR 48[esp]
-       ror     ebx,            1
+       ror     ecx,            1
        xor     esi,            edx
        lea     ebp,            DWORD PTR 1518500249[edi*1+ebp]
-       mov     edi,            ebx
+       mov     edi,            ecx
        add     esi,            ebp
-       xor     edi,            ecx
+       xor     edi,            ebx
        mov     ebp,            esi
        and     edi,            eax
        rol     ebp,            5
        add     ebp,            edx
        mov     edx,            DWORD PTR 52[esp]
        ror     eax,            1
-       xor     edi,            ecx
+       xor     edi,            ebx
        ror     eax,            1
        lea     ebp,            DWORD PTR 1518500249[edx*1+ebp]
        add     edi,            ebp
        ; 00_15 14
        mov     edx,            eax
        mov     ebp,            edi
-       xor     edx,            ebx
+       xor     edx,            ecx
        rol     ebp,            5
        and     edx,            esi
-       add     ebp,            ecx
+       add     ebp,            ebx
        ror     esi,            1
-       mov     ecx,            DWORD PTR 56[esp]
+       mov     ebx,            DWORD PTR 56[esp]
        ror     esi,            1
-       xor     edx,            ebx
-       lea     ebp,            DWORD PTR 1518500249[ecx*1+ebp]
-       mov     ecx,            esi
+       xor     edx,            ecx
+       lea     ebp,            DWORD PTR 1518500249[ebx*1+ebp]
+       mov     ebx,            esi
        add     edx,            ebp
-       xor     ecx,            eax
+       xor     ebx,            eax
        mov     ebp,            edx
-       and     ecx,            edi
+       and     ebx,            edi
        rol     ebp,            5
-       add     ebp,            ebx
-       mov     ebx,            DWORD PTR 60[esp]
+       add     ebp,            ecx
+       mov     ecx,            DWORD PTR 60[esp]
        ror     edi,            1
-       xor     ecx,            eax
+       xor     ebx,            eax
        ror     edi,            1
-       lea     ebp,            DWORD PTR 1518500249[ebx*1+ebp]
-       add     ecx,            ebp
+       lea     ebp,            DWORD PTR 1518500249[ecx*1+ebp]
+       add     ebx,            ebp
        ; 16_19 16
        nop
        mov     ebp,            DWORD PTR [esp]
-       mov     ebx,            DWORD PTR 8[esp]
-       xor     ebx,            ebp
+       mov     ecx,            DWORD PTR 8[esp]
+       xor     ecx,            ebp
        mov     ebp,            DWORD PTR 32[esp]
-       xor     ebx,            ebp
+       xor     ecx,            ebp
        mov     ebp,            DWORD PTR 52[esp]
-       xor     ebx,            ebp
+       xor     ecx,            ebp
        mov     ebp,            edi
-       rol     ebx,            1
+       rol     ecx,            1
        xor     ebp,            esi
-       mov     DWORD PTR [esp],ebx
+       mov     DWORD PTR [esp],ecx
        and     ebp,            edx
-       lea     ebx,            DWORD PTR 1518500249[eax*1+ebx]
+       lea     ecx,            DWORD PTR 1518500249[eax*1+ecx]
        xor     ebp,            esi
-       mov     eax,            ecx
-       add     ebx,            ebp
+       mov     eax,            ebx
+       add     ecx,            ebp
        rol     eax,            5
        ror     edx,            1
-       add     ebx,            eax
+       add     ecx,            eax
        mov     eax,            DWORD PTR 4[esp]
        mov     ebp,            DWORD PTR 12[esp]
        xor     eax,            ebp
@@ -316,14 +317,14 @@
        mov     ebp,            edx
        xor     ebp,            edi
        mov     DWORD PTR 4[esp],eax
-       and     ebp,            ecx
+       and     ebp,            ebx
        lea     eax,            DWORD PTR 1518500249[esi*1+eax]
        xor     ebp,            edi
-       mov     esi,            ebx
+       mov     esi,            ecx
        rol     esi,            5
-       ror     ecx,            1
+       ror     ebx,            1
        add     eax,            esi
-       ror     ecx,            1
+       ror     ebx,            1
        add     eax,            ebp
        ; 16_19 18
        mov     ebp,            DWORD PTR 8[esp]
@@ -333,17 +334,17 @@
        xor     esi,            ebp
        mov     ebp,            DWORD PTR 60[esp]
        xor     esi,            ebp
-       mov     ebp,            ecx
+       mov     ebp,            ebx
        rol     esi,            1
        xor     ebp,            edx
        mov     DWORD PTR 8[esp],esi
-       and     ebp,            ebx
+       and     ebp,            ecx
        lea     esi,            DWORD PTR 1518500249[edi*1+esi]
        xor     ebp,            edx
        mov     edi,            eax
        add     esi,            ebp
        rol     edi,            5
-       ror     ebx,            1
+       ror     ecx,            1
        add     esi,            edi
        mov     edi,            DWORD PTR 12[esp]
        mov     ebp,            DWORD PTR 20[esp]
@@ -351,15 +352,15 @@
        mov     ebp,            DWORD PTR 44[esp]
        xor     edi,            ebp
        mov     ebp,            DWORD PTR [esp]
-       ror     ebx,            1
+       ror     ecx,            1
        xor     edi,            ebp
        rol     edi,            1
-       mov     ebp,            ebx
-       xor     ebp,            ecx
+       mov     ebp,            ecx
+       xor     ebp,            ebx
        mov     DWORD PTR 12[esp],edi
        and     ebp,            eax
        lea     edi,            DWORD PTR 1518500249[edx*1+edi]
-       xor     ebp,            ecx
+       xor     ebp,            ebx
        mov     edx,            esi
        rol     edx,            5
        ror     eax,            1
@@ -378,54 +379,54 @@
        rol     edx,            1
        xor     ebp,            eax
        mov     DWORD PTR 16[esp],edx
-       xor     ebp,            ebx
-       lea     edx,            DWORD PTR 1859775393[ecx*1+edx]
-       mov     ecx,            edi
-       rol     ecx,            5
+       xor     ebp,            ecx
+       lea     edx,            DWORD PTR 1859775393[ebx*1+edx]
+       mov     ebx,            edi
+       rol     ebx,            5
        ror     esi,            1
-       add     ecx,            ebp
+       add     ebx,            ebp
        ror     esi,            1
-       add     edx,            ecx
+       add     edx,            ebx
        ; 20_39 21
-       mov     ecx,            DWORD PTR 20[esp]
+       mov     ebx,            DWORD PTR 20[esp]
        mov     ebp,            DWORD PTR 28[esp]
-       xor     ecx,            ebp
+       xor     ebx,            ebp
        mov     ebp,            DWORD PTR 52[esp]
-       xor     ecx,            ebp
+       xor     ebx,            ebp
        mov     ebp,            DWORD PTR 8[esp]
-       xor     ecx,            ebp
+       xor     ebx,            ebp
        mov     ebp,            edi
-       rol     ecx,            1
+       rol     ebx,            1
        xor     ebp,            esi
-       mov     DWORD PTR 20[esp],ecx
+       mov     DWORD PTR 20[esp],ebx
        xor     ebp,            eax
-       lea     ecx,            DWORD PTR 1859775393[ebx*1+ecx]
-       mov     ebx,            edx
-       rol     ebx,            5
+       lea     ebx,            DWORD PTR 1859775393[ecx*1+ebx]
+       mov     ecx,            edx
+       rol     ecx,            5
        ror     edi,            1
-       add     ebx,            ebp
+       add     ecx,            ebp
        ror     edi,            1
-       add     ecx,            ebx
+       add     ebx,            ecx
        ; 20_39 22
-       mov     ebx,            DWORD PTR 24[esp]
+       mov     ecx,            DWORD PTR 24[esp]
        mov     ebp,            DWORD PTR 32[esp]
-       xor     ebx,            ebp
+       xor     ecx,            ebp
        mov     ebp,            DWORD PTR 56[esp]
-       xor     ebx,            ebp
+       xor     ecx,            ebp
        mov     ebp,            DWORD PTR 12[esp]
-       xor     ebx,            ebp
+       xor     ecx,            ebp
        mov     ebp,            edx
-       rol     ebx,            1
+       rol     ecx,            1
        xor     ebp,            edi
-       mov     DWORD PTR 24[esp],ebx
+       mov     DWORD PTR 24[esp],ecx
        xor     ebp,            esi
-       lea     ebx,            DWORD PTR 1859775393[eax*1+ebx]
-       mov     eax,            ecx
+       lea     ecx,            DWORD PTR 1859775393[eax*1+ecx]
+       mov     eax,            ebx
        rol     eax,            5
        ror     edx,            1
        add     eax,            ebp
        ror     edx,            1
-       add     ebx,            eax
+       add     ecx,            eax
        ; 20_39 23
        mov     eax,            DWORD PTR 28[esp]
        mov     ebp,            DWORD PTR 36[esp]
@@ -434,17 +435,17 @@
        xor     eax,            ebp
        mov     ebp,            DWORD PTR 16[esp]
        xor     eax,            ebp
-       mov     ebp,            ecx
+       mov     ebp,            ebx
        rol     eax,            1
        xor     ebp,            edx
        mov     DWORD PTR 28[esp],eax
        xor     ebp,            edi
        lea     eax,            DWORD PTR 1859775393[esi*1+eax]
-       mov     esi,            ebx
+       mov     esi,            ecx
        rol     esi,            5
-       ror     ecx,            1
+       ror     ebx,            1
        add     esi,            ebp
-       ror     ecx,            1
+       ror     ebx,            1
        add     eax,            esi
        ; 20_39 24
        mov     esi,            DWORD PTR 32[esp]
@@ -454,17 +455,17 @@
        xor     esi,            ebp
        mov     ebp,            DWORD PTR 20[esp]
        xor     esi,            ebp
-       mov     ebp,            ebx
+       mov     ebp,            ecx
        rol     esi,            1
-       xor     ebp,            ecx
+       xor     ebp,            ebx
        mov     DWORD PTR 32[esp],esi
        xor     ebp,            edx
        lea     esi,            DWORD PTR 1859775393[edi*1+esi]
        mov     edi,            eax
        rol     edi,            5
-       ror     ebx,            1
+       ror     ecx,            1
        add     edi,            ebp
-       ror     ebx,            1
+       ror     ecx,            1
        add     esi,            edi
        ; 20_39 25
        mov     edi,            DWORD PTR 36[esp]
@@ -476,9 +477,9 @@
        xor     edi,            ebp
        mov     ebp,            eax
        rol     edi,            1
-       xor     ebp,            ebx
-       mov     DWORD PTR 36[esp],edi
        xor     ebp,            ecx
+       mov     DWORD PTR 36[esp],edi
+       xor     ebp,            ebx
        lea     edi,            DWORD PTR 1859775393[edx*1+edi]
        mov     edx,            esi
        rol     edx,            5
@@ -498,54 +499,54 @@
        rol     edx,            1
        xor     ebp,            eax
        mov     DWORD PTR 40[esp],edx
-       xor     ebp,            ebx
-       lea     edx,            DWORD PTR 1859775393[ecx*1+edx]
-       mov     ecx,            edi
-       rol     ecx,            5
+       xor     ebp,            ecx
+       lea     edx,            DWORD PTR 1859775393[ebx*1+edx]
+       mov     ebx,            edi
+       rol     ebx,            5
        ror     esi,            1
-       add     ecx,            ebp
+       add     ebx,            ebp
        ror     esi,            1
-       add     edx,            ecx
+       add     edx,            ebx
        ; 20_39 27
-       mov     ecx,            DWORD PTR 44[esp]
+       mov     ebx,            DWORD PTR 44[esp]
        mov     ebp,            DWORD PTR 52[esp]
-       xor     ecx,            ebp
+       xor     ebx,            ebp
        mov     ebp,            DWORD PTR 12[esp]
-       xor     ecx,            ebp
+       xor     ebx,            ebp
        mov     ebp,            DWORD PTR 32[esp]
-       xor     ecx,            ebp
+       xor     ebx,            ebp
        mov     ebp,            edi
-       rol     ecx,            1
+       rol     ebx,            1
        xor     ebp,            esi
-       mov     DWORD PTR 44[esp],ecx
+       mov     DWORD PTR 44[esp],ebx
        xor     ebp,            eax
-       lea     ecx,            DWORD PTR 1859775393[ebx*1+ecx]
-       mov     ebx,            edx
-       rol     ebx,            5
+       lea     ebx,            DWORD PTR 1859775393[ecx*1+ebx]
+       mov     ecx,            edx
+       rol     ecx,            5
        ror     edi,            1
-       add     ebx,            ebp
+       add     ecx,            ebp
        ror     edi,            1
-       add     ecx,            ebx
+       add     ebx,            ecx
        ; 20_39 28
-       mov     ebx,            DWORD PTR 48[esp]
+       mov     ecx,            DWORD PTR 48[esp]
        mov     ebp,            DWORD PTR 56[esp]
-       xor     ebx,            ebp
+       xor     ecx,            ebp
        mov     ebp,            DWORD PTR 16[esp]
-       xor     ebx,            ebp
+       xor     ecx,            ebp
        mov     ebp,            DWORD PTR 36[esp]
-       xor     ebx,            ebp
+       xor     ecx,            ebp
        mov     ebp,            edx
-       rol     ebx,            1
+       rol     ecx,            1
        xor     ebp,            edi
-       mov     DWORD PTR 48[esp],ebx
+       mov     DWORD PTR 48[esp],ecx
        xor     ebp,            esi
-       lea     ebx,            DWORD PTR 1859775393[eax*1+ebx]
-       mov     eax,            ecx
+       lea     ecx,            DWORD PTR 1859775393[eax*1+ecx]
+       mov     eax,            ebx
        rol     eax,            5
        ror     edx,            1
        add     eax,            ebp
        ror     edx,            1
-       add     ebx,            eax
+       add     ecx,            eax
        ; 20_39 29
        mov     eax,            DWORD PTR 52[esp]
        mov     ebp,            DWORD PTR 60[esp]
@@ -554,17 +555,17 @@
        xor     eax,            ebp
        mov     ebp,            DWORD PTR 40[esp]
        xor     eax,            ebp
-       mov     ebp,            ecx
+       mov     ebp,            ebx
        rol     eax,            1
        xor     ebp,            edx
        mov     DWORD PTR 52[esp],eax
        xor     ebp,            edi
        lea     eax,            DWORD PTR 1859775393[esi*1+eax]
-       mov     esi,            ebx
+       mov     esi,            ecx
        rol     esi,            5
-       ror     ecx,            1
+       ror     ebx,            1
        add     esi,            ebp
-       ror     ecx,            1
+       ror     ebx,            1
        add     eax,            esi
        ; 20_39 30
        mov     esi,            DWORD PTR 56[esp]
@@ -574,17 +575,17 @@
        xor     esi,            ebp
        mov     ebp,            DWORD PTR 44[esp]
        xor     esi,            ebp
-       mov     ebp,            ebx
+       mov     ebp,            ecx
        rol     esi,            1
-       xor     ebp,            ecx
+       xor     ebp,            ebx
        mov     DWORD PTR 56[esp],esi
        xor     ebp,            edx
        lea     esi,            DWORD PTR 1859775393[edi*1+esi]
        mov     edi,            eax
        rol     edi,            5
-       ror     ebx,            1
+       ror     ecx,            1
        add     edi,            ebp
-       ror     ebx,            1
+       ror     ecx,            1
        add     esi,            edi
        ; 20_39 31
        mov     edi,            DWORD PTR 60[esp]
@@ -596,9 +597,9 @@
        xor     edi,            ebp
        mov     ebp,            eax
        rol     edi,            1
-       xor     ebp,            ebx
-       mov     DWORD PTR 60[esp],edi
        xor     ebp,            ecx
+       mov     DWORD PTR 60[esp],edi
+       xor     ebp,            ebx
        lea     edi,            DWORD PTR 1859775393[edx*1+edi]
        mov     edx,            esi
        rol     edx,            5
@@ -618,54 +619,54 @@
        rol     edx,            1
        xor     ebp,            eax
        mov     DWORD PTR [esp],edx
-       xor     ebp,            ebx
-       lea     edx,            DWORD PTR 1859775393[ecx*1+edx]
-       mov     ecx,            edi
-       rol     ecx,            5
+       xor     ebp,            ecx
+       lea     edx,            DWORD PTR 1859775393[ebx*1+edx]
+       mov     ebx,            edi
+       rol     ebx,            5
        ror     esi,            1
-       add     ecx,            ebp
+       add     ebx,            ebp
        ror     esi,            1
-       add     edx,            ecx
+       add     edx,            ebx
        ; 20_39 33
-       mov     ecx,            DWORD PTR 4[esp]
+       mov     ebx,            DWORD PTR 4[esp]
        mov     ebp,            DWORD PTR 12[esp]
-       xor     ecx,            ebp
+       xor     ebx,            ebp
        mov     ebp,            DWORD PTR 36[esp]
-       xor     ecx,            ebp
+       xor     ebx,            ebp
        mov     ebp,            DWORD PTR 56[esp]
-       xor     ecx,            ebp
+       xor     ebx,            ebp
        mov     ebp,            edi
-       rol     ecx,            1
+       rol     ebx,            1
        xor     ebp,            esi
-       mov     DWORD PTR 4[esp],ecx
+       mov     DWORD PTR 4[esp],ebx
        xor     ebp,            eax
-       lea     ecx,            DWORD PTR 1859775393[ebx*1+ecx]
-       mov     ebx,            edx
-       rol     ebx,            5
+       lea     ebx,            DWORD PTR 1859775393[ecx*1+ebx]
+       mov     ecx,            edx
+       rol     ecx,            5
        ror     edi,            1
-       add     ebx,            ebp
+       add     ecx,            ebp
        ror     edi,            1
-       add     ecx,            ebx
+       add     ebx,            ecx
        ; 20_39 34
-       mov     ebx,            DWORD PTR 8[esp]
+       mov     ecx,            DWORD PTR 8[esp]
        mov     ebp,            DWORD PTR 16[esp]
-       xor     ebx,            ebp
+       xor     ecx,            ebp
        mov     ebp,            DWORD PTR 40[esp]
-       xor     ebx,            ebp
+       xor     ecx,            ebp
        mov     ebp,            DWORD PTR 60[esp]
-       xor     ebx,            ebp
+       xor     ecx,            ebp
        mov     ebp,            edx
-       rol     ebx,            1
+       rol     ecx,            1
        xor     ebp,            edi
-       mov     DWORD PTR 8[esp],ebx
+       mov     DWORD PTR 8[esp],ecx
        xor     ebp,            esi
-       lea     ebx,            DWORD PTR 1859775393[eax*1+ebx]
-       mov     eax,            ecx
+       lea     ecx,            DWORD PTR 1859775393[eax*1+ecx]
+       mov     eax,            ebx
        rol     eax,            5
        ror     edx,            1
        add     eax,            ebp
        ror     edx,            1
-       add     ebx,            eax
+       add     ecx,            eax
        ; 20_39 35
        mov     eax,            DWORD PTR 12[esp]
        mov     ebp,            DWORD PTR 20[esp]
@@ -674,17 +675,17 @@
        xor     eax,            ebp
        mov     ebp,            DWORD PTR [esp]
        xor     eax,            ebp
-       mov     ebp,            ecx
+       mov     ebp,            ebx
        rol     eax,            1
        xor     ebp,            edx
        mov     DWORD PTR 12[esp],eax
        xor     ebp,            edi
        lea     eax,            DWORD PTR 1859775393[esi*1+eax]
-       mov     esi,            ebx
+       mov     esi,            ecx
        rol     esi,            5
-       ror     ecx,            1
+       ror     ebx,            1
        add     esi,            ebp
-       ror     ecx,            1
+       ror     ebx,            1
        add     eax,            esi
        ; 20_39 36
        mov     esi,            DWORD PTR 16[esp]
@@ -694,17 +695,17 @@
        xor     esi,            ebp
        mov     ebp,            DWORD PTR 4[esp]
        xor     esi,            ebp
-       mov     ebp,            ebx
+       mov     ebp,            ecx
        rol     esi,            1
-       xor     ebp,            ecx
+       xor     ebp,            ebx
        mov     DWORD PTR 16[esp],esi
        xor     ebp,            edx
        lea     esi,            DWORD PTR 1859775393[edi*1+esi]
        mov     edi,            eax
        rol     edi,            5
-       ror     ebx,            1
+       ror     ecx,            1
        add     edi,            ebp
-       ror     ebx,            1
+       ror     ecx,            1
        add     esi,            edi
        ; 20_39 37
        mov     edi,            DWORD PTR 20[esp]
@@ -716,9 +717,9 @@
        xor     edi,            ebp
        mov     ebp,            eax
        rol     edi,            1
-       xor     ebp,            ebx
-       mov     DWORD PTR 20[esp],edi
        xor     ebp,            ecx
+       mov     DWORD PTR 20[esp],edi
+       xor     ebp,            ebx
        lea     edi,            DWORD PTR 1859775393[edx*1+edi]
        mov     edx,            esi
        rol     edx,            5
@@ -738,57 +739,57 @@
        rol     edx,            1
        xor     ebp,            eax
        mov     DWORD PTR 24[esp],edx
-       xor     ebp,            ebx
-       lea     edx,            DWORD PTR 1859775393[ecx*1+edx]
-       mov     ecx,            edi
-       rol     ecx,            5
+       xor     ebp,            ecx
+       lea     edx,            DWORD PTR 1859775393[ebx*1+edx]
+       mov     ebx,            edi
+       rol     ebx,            5
        ror     esi,            1
-       add     ecx,            ebp
+       add     ebx,            ebp
        ror     esi,            1
-       add     edx,            ecx
+       add     edx,            ebx
        ; 20_39 39
-       mov     ecx,            DWORD PTR 28[esp]
+       mov     ebx,            DWORD PTR 28[esp]
        mov     ebp,            DWORD PTR 36[esp]
-       xor     ecx,            ebp
+       xor     ebx,            ebp
        mov     ebp,            DWORD PTR 60[esp]
-       xor     ecx,            ebp
+       xor     ebx,            ebp
        mov     ebp,            DWORD PTR 16[esp]
-       xor     ecx,            ebp
+       xor     ebx,            ebp
        mov     ebp,            edi
-       rol     ecx,            1
+       rol     ebx,            1
        xor     ebp,            esi
-       mov     DWORD PTR 28[esp],ecx
+       mov     DWORD PTR 28[esp],ebx
        xor     ebp,            eax
-       lea     ecx,            DWORD PTR 1859775393[ebx*1+ecx]
-       mov     ebx,            edx
-       rol     ebx,            5
+       lea     ebx,            DWORD PTR 1859775393[ecx*1+ebx]
+       mov     ecx,            edx
+       rol     ecx,            5
        ror     edi,            1
-       add     ebx,            ebp
+       add     ecx,            ebp
        ror     edi,            1
-       add     ecx,            ebx
+       add     ebx,            ecx
        ; 40_59 40
-       mov     ebx,            DWORD PTR 32[esp]
+       mov     ecx,            DWORD PTR 32[esp]
        mov     ebp,            DWORD PTR 40[esp]
-       xor     ebx,            ebp
+       xor     ecx,            ebp
        mov     ebp,            DWORD PTR [esp]
-       xor     ebx,            ebp
+       xor     ecx,            ebp
        mov     ebp,            DWORD PTR 20[esp]
-       xor     ebx,            ebp
+       xor     ecx,            ebp
        mov     ebp,            edx
-       rol     ebx,            1
+       rol     ecx,            1
        or      ebp,            edi
-       mov     DWORD PTR 32[esp],ebx
+       mov     DWORD PTR 32[esp],ecx
        and     ebp,            esi
-       lea     ebx,            DWORD PTR 2400959708[eax*1+ebx]
+       lea     ecx,            DWORD PTR 2400959708[eax*1+ecx]
        mov     eax,            edx
        ror     edx,            1
        and     eax,            edi
        or      ebp,            eax
-       mov     eax,            ecx
+       mov     eax,            ebx
        rol     eax,            5
        add     ebp,            eax
        mov     eax,            DWORD PTR 36[esp]
-       add     ebx,            ebp
+       add     ecx,            ebp
        mov     ebp,            DWORD PTR 44[esp]
        xor     eax,            ebp
        mov     ebp,            DWORD PTR 4[esp]
@@ -797,19 +798,19 @@
        ror     edx,            1
        xor     eax,            ebp
        rol     eax,            1
-       mov     ebp,            ecx
+       mov     ebp,            ebx
        mov     DWORD PTR 36[esp],eax
        or      ebp,            edx
        lea     eax,            DWORD PTR 2400959708[esi*1+eax]
-       mov     esi,            ecx
+       mov     esi,            ebx
        and     ebp,            edi
        and     esi,            edx
        or      ebp,            esi
-       mov     esi,            ebx
+       mov     esi,            ecx
        rol     esi,            5
-       ror     ecx,            1
+       ror     ebx,            1
        add     ebp,            esi
-       ror     ecx,            1
+       ror     ebx,            1
        add     eax,            ebp
        ; 40_59 41
        ; 40_59 42
@@ -820,15 +821,15 @@
        xor     esi,            ebp
        mov     ebp,            DWORD PTR 28[esp]
        xor     esi,            ebp
-       mov     ebp,            ebx
+       mov     ebp,            ecx
        rol     esi,            1
-       or      ebp,            ecx
+       or      ebp,            ebx
        mov     DWORD PTR 40[esp],esi
        and     ebp,            edx
        lea     esi,            DWORD PTR 2400959708[edi*1+esi]
-       mov     edi,            ebx
-       ror     ebx,            1
-       and     edi,            ecx
+       mov     edi,            ecx
+       ror     ecx,            1
+       and     edi,            ebx
        or      ebp,            edi
        mov     edi,            eax
        rol     edi,            5
@@ -840,16 +841,16 @@
        mov     ebp,            DWORD PTR 12[esp]
        xor     edi,            ebp
        mov     ebp,            DWORD PTR 32[esp]
-       ror     ebx,            1
+       ror     ecx,            1
        xor     edi,            ebp
        rol     edi,            1
        mov     ebp,            eax
        mov     DWORD PTR 44[esp],edi
-       or      ebp,            ebx
+       or      ebp,            ecx
        lea     edi,            DWORD PTR 2400959708[edx*1+edi]
        mov     edx,            eax
-       and     ebp,            ecx
-       and     edx,            ebx
+       and     ebp,            ebx
+       and     edx,            ecx
        or      ebp,            edx
        mov     edx,            esi
        rol     edx,            5
@@ -870,63 +871,63 @@
        rol     edx,            1
        or      ebp,            eax
        mov     DWORD PTR 48[esp],edx
-       and     ebp,            ebx
-       lea     edx,            DWORD PTR 2400959708[ecx*1+edx]
-       mov     ecx,            esi
+       and     ebp,            ecx
+       lea     edx,            DWORD PTR 2400959708[ebx*1+edx]
+       mov     ebx,            esi
        ror     esi,            1
-       and     ecx,            eax
-       or      ebp,            ecx
-       mov     ecx,            edi
-       rol     ecx,            5
-       add     ebp,            ecx
-       mov     ecx,            DWORD PTR 52[esp]
+       and     ebx,            eax
+       or      ebp,            ebx
+       mov     ebx,            edi
+       rol     ebx,            5
+       add     ebp,            ebx
+       mov     ebx,            DWORD PTR 52[esp]
        add     edx,            ebp
        mov     ebp,            DWORD PTR 60[esp]
-       xor     ecx,            ebp
+       xor     ebx,            ebp
        mov     ebp,            DWORD PTR 20[esp]
-       xor     ecx,            ebp
+       xor     ebx,            ebp
        mov     ebp,            DWORD PTR 40[esp]
        ror     esi,            1
-       xor     ecx,            ebp
-       rol     ecx,            1
+       xor     ebx,            ebp
+       rol     ebx,            1
        mov     ebp,            edi
-       mov     DWORD PTR 52[esp],ecx
+       mov     DWORD PTR 52[esp],ebx
        or      ebp,            esi
-       lea     ecx,            DWORD PTR 2400959708[ebx*1+ecx]
-       mov     ebx,            edi
+       lea     ebx,            DWORD PTR 2400959708[ecx*1+ebx]
+       mov     ecx,            edi
        and     ebp,            eax
-       and     ebx,            esi
-       or      ebp,            ebx
-       mov     ebx,            edx
-       rol     ebx,            5
+       and     ecx,            esi
+       or      ebp,            ecx
+       mov     ecx,            edx
+       rol     ecx,            5
        ror     edi,            1
-       add     ebp,            ebx
+       add     ebp,            ecx
        ror     edi,            1
-       add     ecx,            ebp
+       add     ebx,            ebp
        ; 40_59 45
        ; 40_59 46
-       mov     ebx,            DWORD PTR 56[esp]
+       mov     ecx,            DWORD PTR 56[esp]
        mov     ebp,            DWORD PTR [esp]
-       xor     ebx,            ebp
+       xor     ecx,            ebp
        mov     ebp,            DWORD PTR 24[esp]
-       xor     ebx,            ebp
+       xor     ecx,            ebp
        mov     ebp,            DWORD PTR 44[esp]
-       xor     ebx,            ebp
+       xor     ecx,            ebp
        mov     ebp,            edx
-       rol     ebx,            1
+       rol     ecx,            1
        or      ebp,            edi
-       mov     DWORD PTR 56[esp],ebx
+       mov     DWORD PTR 56[esp],ecx
        and     ebp,            esi
-       lea     ebx,            DWORD PTR 2400959708[eax*1+ebx]
+       lea     ecx,            DWORD PTR 2400959708[eax*1+ecx]
        mov     eax,            edx
        ror     edx,            1
        and     eax,            edi
        or      ebp,            eax
-       mov     eax,            ecx
+       mov     eax,            ebx
        rol     eax,            5
        add     ebp,            eax
        mov     eax,            DWORD PTR 60[esp]
-       add     ebx,            ebp
+       add     ecx,            ebp
        mov     ebp,            DWORD PTR 4[esp]
        xor     eax,            ebp
        mov     ebp,            DWORD PTR 28[esp]
@@ -935,19 +936,19 @@
        ror     edx,            1
        xor     eax,            ebp
        rol     eax,            1
-       mov     ebp,            ecx
+       mov     ebp,            ebx
        mov     DWORD PTR 60[esp],eax
        or      ebp,            edx
        lea     eax,            DWORD PTR 2400959708[esi*1+eax]
-       mov     esi,            ecx
+       mov     esi,            ebx
        and     ebp,            edi
        and     esi,            edx
        or      ebp,            esi
-       mov     esi,            ebx
+       mov     esi,            ecx
        rol     esi,            5
-       ror     ecx,            1
+       ror     ebx,            1
        add     ebp,            esi
-       ror     ecx,            1
+       ror     ebx,            1
        add     eax,            ebp
        ; 40_59 47
        ; 40_59 48
@@ -958,15 +959,15 @@
        xor     esi,            ebp
        mov     ebp,            DWORD PTR 52[esp]
        xor     esi,            ebp
-       mov     ebp,            ebx
+       mov     ebp,            ecx
        rol     esi,            1
-       or      ebp,            ecx
+       or      ebp,            ebx
        mov     DWORD PTR [esp],esi
        and     ebp,            edx
        lea     esi,            DWORD PTR 2400959708[edi*1+esi]
-       mov     edi,            ebx
-       ror     ebx,            1
-       and     edi,            ecx
+       mov     edi,            ecx
+       ror     ecx,            1
+       and     edi,            ebx
        or      ebp,            edi
        mov     edi,            eax
        rol     edi,            5
@@ -978,16 +979,16 @@
        mov     ebp,            DWORD PTR 36[esp]
        xor     edi,            ebp
        mov     ebp,            DWORD PTR 56[esp]
-       ror     ebx,            1
+       ror     ecx,            1
        xor     edi,            ebp
        rol     edi,            1
        mov     ebp,            eax
        mov     DWORD PTR 4[esp],edi
-       or      ebp,            ebx
+       or      ebp,            ecx
        lea     edi,            DWORD PTR 2400959708[edx*1+edi]
        mov     edx,            eax
-       and     ebp,            ecx
-       and     edx,            ebx
+       and     ebp,            ebx
+       and     edx,            ecx
        or      ebp,            edx
        mov     edx,            esi
        rol     edx,            5
@@ -1008,63 +1009,63 @@
        rol     edx,            1
        or      ebp,            eax
        mov     DWORD PTR 8[esp],edx
-       and     ebp,            ebx
-       lea     edx,            DWORD PTR 2400959708[ecx*1+edx]
-       mov     ecx,            esi
+       and     ebp,            ecx
+       lea     edx,            DWORD PTR 2400959708[ebx*1+edx]
+       mov     ebx,            esi
        ror     esi,            1
-       and     ecx,            eax
-       or      ebp,            ecx
-       mov     ecx,            edi
-       rol     ecx,            5
-       add     ebp,            ecx
-       mov     ecx,            DWORD PTR 12[esp]
+       and     ebx,            eax
+       or      ebp,            ebx
+       mov     ebx,            edi
+       rol     ebx,            5
+       add     ebp,            ebx
+       mov     ebx,            DWORD PTR 12[esp]
        add     edx,            ebp
        mov     ebp,            DWORD PTR 20[esp]
-       xor     ecx,            ebp
+       xor     ebx,            ebp
        mov     ebp,            DWORD PTR 44[esp]
-       xor     ecx,            ebp
+       xor     ebx,            ebp
        mov     ebp,            DWORD PTR [esp]
        ror     esi,            1
-       xor     ecx,            ebp
-       rol     ecx,            1
+       xor     ebx,            ebp
+       rol     ebx,            1
        mov     ebp,            edi
-       mov     DWORD PTR 12[esp],ecx
+       mov     DWORD PTR 12[esp],ebx
        or      ebp,            esi
-       lea     ecx,            DWORD PTR 2400959708[ebx*1+ecx]
-       mov     ebx,            edi
+       lea     ebx,            DWORD PTR 2400959708[ecx*1+ebx]
+       mov     ecx,            edi
        and     ebp,            eax
-       and     ebx,            esi
-       or      ebp,            ebx
-       mov     ebx,            edx
-       rol     ebx,            5
+       and     ecx,            esi
+       or      ebp,            ecx
+       mov     ecx,            edx
+       rol     ecx,            5
        ror     edi,            1
-       add     ebp,            ebx
+       add     ebp,            ecx
        ror     edi,            1
-       add     ecx,            ebp
+       add     ebx,            ebp
        ; 40_59 51
        ; 40_59 52
-       mov     ebx,            DWORD PTR 16[esp]
+       mov     ecx,            DWORD PTR 16[esp]
        mov     ebp,            DWORD PTR 24[esp]
-       xor     ebx,            ebp
+       xor     ecx,            ebp
        mov     ebp,            DWORD PTR 48[esp]
-       xor     ebx,            ebp
+       xor     ecx,            ebp
        mov     ebp,            DWORD PTR 4[esp]
-       xor     ebx,            ebp
+       xor     ecx,            ebp
        mov     ebp,            edx
-       rol     ebx,            1
+       rol     ecx,            1
        or      ebp,            edi
-       mov     DWORD PTR 16[esp],ebx
+       mov     DWORD PTR 16[esp],ecx
        and     ebp,            esi
-       lea     ebx,            DWORD PTR 2400959708[eax*1+ebx]
+       lea     ecx,            DWORD PTR 2400959708[eax*1+ecx]
        mov     eax,            edx
        ror     edx,            1
        and     eax,            edi
        or      ebp,            eax
-       mov     eax,            ecx
+       mov     eax,            ebx
        rol     eax,            5
        add     ebp,            eax
        mov     eax,            DWORD PTR 20[esp]
-       add     ebx,            ebp
+       add     ecx,            ebp
        mov     ebp,            DWORD PTR 28[esp]
        xor     eax,            ebp
        mov     ebp,            DWORD PTR 52[esp]
@@ -1073,19 +1074,19 @@
        ror     edx,            1
        xor     eax,            ebp
        rol     eax,            1
-       mov     ebp,            ecx
+       mov     ebp,            ebx
        mov     DWORD PTR 20[esp],eax
        or      ebp,            edx
        lea     eax,            DWORD PTR 2400959708[esi*1+eax]
-       mov     esi,            ecx
+       mov     esi,            ebx
        and     ebp,            edi
        and     esi,            edx
        or      ebp,            esi
-       mov     esi,            ebx
+       mov     esi,            ecx
        rol     esi,            5
-       ror     ecx,            1
+       ror     ebx,            1
        add     ebp,            esi
-       ror     ecx,            1
+       ror     ebx,            1
        add     eax,            ebp
        ; 40_59 53
        ; 40_59 54
@@ -1096,15 +1097,15 @@
        xor     esi,            ebp
        mov     ebp,            DWORD PTR 12[esp]
        xor     esi,            ebp
-       mov     ebp,            ebx
+       mov     ebp,            ecx
        rol     esi,            1
-       or      ebp,            ecx
+       or      ebp,            ebx
        mov     DWORD PTR 24[esp],esi
        and     ebp,            edx
        lea     esi,            DWORD PTR 2400959708[edi*1+esi]
-       mov     edi,            ebx
-       ror     ebx,            1
-       and     edi,            ecx
+       mov     edi,            ecx
+       ror     ecx,            1
+       and     edi,            ebx
        or      ebp,            edi
        mov     edi,            eax
        rol     edi,            5
@@ -1116,16 +1117,16 @@
        mov     ebp,            DWORD PTR 60[esp]
        xor     edi,            ebp
        mov     ebp,            DWORD PTR 16[esp]
-       ror     ebx,            1
+       ror     ecx,            1
        xor     edi,            ebp
        rol     edi,            1
        mov     ebp,            eax
        mov     DWORD PTR 28[esp],edi
-       or      ebp,            ebx
+       or      ebp,            ecx
        lea     edi,            DWORD PTR 2400959708[edx*1+edi]
        mov     edx,            eax
-       and     ebp,            ecx
-       and     edx,            ebx
+       and     ebp,            ebx
+       and     edx,            ecx
        or      ebp,            edx
        mov     edx,            esi
        rol     edx,            5
@@ -1146,63 +1147,63 @@
        rol     edx,            1
        or      ebp,            eax
        mov     DWORD PTR 32[esp],edx
-       and     ebp,            ebx
-       lea     edx,            DWORD PTR 2400959708[ecx*1+edx]
-       mov     ecx,            esi
+       and     ebp,            ecx
+       lea     edx,            DWORD PTR 2400959708[ebx*1+edx]
+       mov     ebx,            esi
        ror     esi,            1
-       and     ecx,            eax
-       or      ebp,            ecx
-       mov     ecx,            edi
-       rol     ecx,            5
-       add     ebp,            ecx
-       mov     ecx,            DWORD PTR 36[esp]
+       and     ebx,            eax
+       or      ebp,            ebx
+       mov     ebx,            edi
+       rol     ebx,            5
+       add     ebp,            ebx
+       mov     ebx,            DWORD PTR 36[esp]
        add     edx,            ebp
        mov     ebp,            DWORD PTR 44[esp]
-       xor     ecx,            ebp
+       xor     ebx,            ebp
        mov     ebp,            DWORD PTR 4[esp]
-       xor     ecx,            ebp
+       xor     ebx,            ebp
        mov     ebp,            DWORD PTR 24[esp]
        ror     esi,            1
-       xor     ecx,            ebp
-       rol     ecx,            1
+       xor     ebx,            ebp
+       rol     ebx,            1
        mov     ebp,            edi
-       mov     DWORD PTR 36[esp],ecx
+       mov     DWORD PTR 36[esp],ebx
        or      ebp,            esi
-       lea     ecx,            DWORD PTR 2400959708[ebx*1+ecx]
-       mov     ebx,            edi
+       lea     ebx,            DWORD PTR 2400959708[ecx*1+ebx]
+       mov     ecx,            edi
        and     ebp,            eax
-       and     ebx,            esi
-       or      ebp,            ebx
-       mov     ebx,            edx
-       rol     ebx,            5
+       and     ecx,            esi
+       or      ebp,            ecx
+       mov     ecx,            edx
+       rol     ecx,            5
        ror     edi,            1
-       add     ebp,            ebx
+       add     ebp,            ecx
        ror     edi,            1
-       add     ecx,            ebp
+       add     ebx,            ebp
        ; 40_59 57
        ; 40_59 58
-       mov     ebx,            DWORD PTR 40[esp]
+       mov     ecx,            DWORD PTR 40[esp]
        mov     ebp,            DWORD PTR 48[esp]
-       xor     ebx,            ebp
+       xor     ecx,            ebp
        mov     ebp,            DWORD PTR 8[esp]
-       xor     ebx,            ebp
+       xor     ecx,            ebp
        mov     ebp,            DWORD PTR 28[esp]
-       xor     ebx,            ebp
+       xor     ecx,            ebp
        mov     ebp,            edx
-       rol     ebx,            1
+       rol     ecx,            1
        or      ebp,            edi
-       mov     DWORD PTR 40[esp],ebx
+       mov     DWORD PTR 40[esp],ecx
        and     ebp,            esi
-       lea     ebx,            DWORD PTR 2400959708[eax*1+ebx]
+       lea     ecx,            DWORD PTR 2400959708[eax*1+ecx]
        mov     eax,            edx
        ror     edx,            1
        and     eax,            edi
        or      ebp,            eax
-       mov     eax,            ecx
+       mov     eax,            ebx
        rol     eax,            5
        add     ebp,            eax
        mov     eax,            DWORD PTR 44[esp]
-       add     ebx,            ebp
+       add     ecx,            ebp
        mov     ebp,            DWORD PTR 52[esp]
        xor     eax,            ebp
        mov     ebp,            DWORD PTR 12[esp]
@@ -1211,19 +1212,19 @@
        ror     edx,            1
        xor     eax,            ebp
        rol     eax,            1
-       mov     ebp,            ecx
+       mov     ebp,            ebx
        mov     DWORD PTR 44[esp],eax
        or      ebp,            edx
        lea     eax,            DWORD PTR 2400959708[esi*1+eax]
-       mov     esi,            ecx
+       mov     esi,            ebx
        and     ebp,            edi
        and     esi,            edx
        or      ebp,            esi
-       mov     esi,            ebx
+       mov     esi,            ecx
        rol     esi,            5
-       ror     ecx,            1
+       ror     ebx,            1
        add     ebp,            esi
-       ror     ecx,            1
+       ror     ebx,            1
        add     eax,            ebp
        ; 40_59 59
        ; 20_39 60
@@ -1234,17 +1235,17 @@
        xor     esi,            ebp
        mov     ebp,            DWORD PTR 36[esp]
        xor     esi,            ebp
-       mov     ebp,            ebx
+       mov     ebp,            ecx
        rol     esi,            1
-       xor     ebp,            ecx
+       xor     ebp,            ebx
        mov     DWORD PTR 48[esp],esi
        xor     ebp,            edx
        lea     esi,            DWORD PTR 3395469782[edi*1+esi]
        mov     edi,            eax
        rol     edi,            5
-       ror     ebx,            1
+       ror     ecx,            1
        add     edi,            ebp
-       ror     ebx,            1
+       ror     ecx,            1
        add     esi,            edi
        ; 20_39 61
        mov     edi,            DWORD PTR 52[esp]
@@ -1256,9 +1257,9 @@
        xor     edi,            ebp
        mov     ebp,            eax
        rol     edi,            1
-       xor     ebp,            ebx
-       mov     DWORD PTR 52[esp],edi
        xor     ebp,            ecx
+       mov     DWORD PTR 52[esp],edi
+       xor     ebp,            ebx
        lea     edi,            DWORD PTR 3395469782[edx*1+edi]
        mov     edx,            esi
        rol     edx,            5
@@ -1278,54 +1279,54 @@
        rol     edx,            1
        xor     ebp,            eax
        mov     DWORD PTR 56[esp],edx
-       xor     ebp,            ebx
-       lea     edx,            DWORD PTR 3395469782[ecx*1+edx]
-       mov     ecx,            edi
-       rol     ecx,            5
+       xor     ebp,            ecx
+       lea     edx,            DWORD PTR 3395469782[ebx*1+edx]
+       mov     ebx,            edi
+       rol     ebx,            5
        ror     esi,            1
-       add     ecx,            ebp
+       add     ebx,            ebp
        ror     esi,            1
-       add     edx,            ecx
+       add     edx,            ebx
        ; 20_39 63
-       mov     ecx,            DWORD PTR 60[esp]
+       mov     ebx,            DWORD PTR 60[esp]
        mov     ebp,            DWORD PTR 4[esp]
-       xor     ecx,            ebp
+       xor     ebx,            ebp
        mov     ebp,            DWORD PTR 28[esp]
-       xor     ecx,            ebp
+       xor     ebx,            ebp
        mov     ebp,            DWORD PTR 48[esp]
-       xor     ecx,            ebp
+       xor     ebx,            ebp
        mov     ebp,            edi
-       rol     ecx,            1
+       rol     ebx,            1
        xor     ebp,            esi
-       mov     DWORD PTR 60[esp],ecx
+       mov     DWORD PTR 60[esp],ebx
        xor     ebp,            eax
-       lea     ecx,            DWORD PTR 3395469782[ebx*1+ecx]
-       mov     ebx,            edx
-       rol     ebx,            5
+       lea     ebx,            DWORD PTR 3395469782[ecx*1+ebx]
+       mov     ecx,            edx
+       rol     ecx,            5
        ror     edi,            1
-       add     ebx,            ebp
+       add     ecx,            ebp
        ror     edi,            1
-       add     ecx,            ebx
+       add     ebx,            ecx
        ; 20_39 64
-       mov     ebx,            DWORD PTR [esp]
+       mov     ecx,            DWORD PTR [esp]
        mov     ebp,            DWORD PTR 8[esp]
-       xor     ebx,            ebp
+       xor     ecx,            ebp
        mov     ebp,            DWORD PTR 32[esp]
-       xor     ebx,            ebp
+       xor     ecx,            ebp
        mov     ebp,            DWORD PTR 52[esp]
-       xor     ebx,            ebp
+       xor     ecx,            ebp
        mov     ebp,            edx
-       rol     ebx,            1
+       rol     ecx,            1
        xor     ebp,            edi
-       mov     DWORD PTR [esp],ebx
+       mov     DWORD PTR [esp],ecx
        xor     ebp,            esi
-       lea     ebx,            DWORD PTR 3395469782[eax*1+ebx]
-       mov     eax,            ecx
+       lea     ecx,            DWORD PTR 3395469782[eax*1+ecx]
+       mov     eax,            ebx
        rol     eax,            5
        ror     edx,            1
        add     eax,            ebp
        ror     edx,            1
-       add     ebx,            eax
+       add     ecx,            eax
        ; 20_39 65
        mov     eax,            DWORD PTR 4[esp]
        mov     ebp,            DWORD PTR 12[esp]
@@ -1334,17 +1335,17 @@
        xor     eax,            ebp
        mov     ebp,            DWORD PTR 56[esp]
        xor     eax,            ebp
-       mov     ebp,            ecx
+       mov     ebp,            ebx
        rol     eax,            1
        xor     ebp,            edx
        mov     DWORD PTR 4[esp],eax
        xor     ebp,            edi
        lea     eax,            DWORD PTR 3395469782[esi*1+eax]
-       mov     esi,            ebx
+       mov     esi,            ecx
        rol     esi,            5
-       ror     ecx,            1
+       ror     ebx,            1
        add     esi,            ebp
-       ror     ecx,            1
+       ror     ebx,            1
        add     eax,            esi
        ; 20_39 66
        mov     esi,            DWORD PTR 8[esp]
@@ -1354,17 +1355,17 @@
        xor     esi,            ebp
        mov     ebp,            DWORD PTR 60[esp]
        xor     esi,            ebp
-       mov     ebp,            ebx
+       mov     ebp,            ecx
        rol     esi,            1
-       xor     ebp,            ecx
+       xor     ebp,            ebx
        mov     DWORD PTR 8[esp],esi
        xor     ebp,            edx
        lea     esi,            DWORD PTR 3395469782[edi*1+esi]
        mov     edi,            eax
        rol     edi,            5
-       ror     ebx,            1
+       ror     ecx,            1
        add     edi,            ebp
-       ror     ebx,            1
+       ror     ecx,            1
        add     esi,            edi
        ; 20_39 67
        mov     edi,            DWORD PTR 12[esp]
@@ -1376,9 +1377,9 @@
        xor     edi,            ebp
        mov     ebp,            eax
        rol     edi,            1
-       xor     ebp,            ebx
-       mov     DWORD PTR 12[esp],edi
        xor     ebp,            ecx
+       mov     DWORD PTR 12[esp],edi
+       xor     ebp,            ebx
        lea     edi,            DWORD PTR 3395469782[edx*1+edi]
        mov     edx,            esi
        rol     edx,            5
@@ -1398,54 +1399,54 @@
        rol     edx,            1
        xor     ebp,            eax
        mov     DWORD PTR 16[esp],edx
-       xor     ebp,            ebx
-       lea     edx,            DWORD PTR 3395469782[ecx*1+edx]
-       mov     ecx,            edi
-       rol     ecx,            5
+       xor     ebp,            ecx
+       lea     edx,            DWORD PTR 3395469782[ebx*1+edx]
+       mov     ebx,            edi
+       rol     ebx,            5
        ror     esi,            1
-       add     ecx,            ebp
+       add     ebx,            ebp
        ror     esi,            1
-       add     edx,            ecx
+       add     edx,            ebx
        ; 20_39 69
-       mov     ecx,            DWORD PTR 20[esp]
+       mov     ebx,            DWORD PTR 20[esp]
        mov     ebp,            DWORD PTR 28[esp]
-       xor     ecx,            ebp
+       xor     ebx,            ebp
        mov     ebp,            DWORD PTR 52[esp]
-       xor     ecx,            ebp
+       xor     ebx,            ebp
        mov     ebp,            DWORD PTR 8[esp]
-       xor     ecx,            ebp
+       xor     ebx,            ebp
        mov     ebp,            edi
-       rol     ecx,            1
+       rol     ebx,            1
        xor     ebp,            esi
-       mov     DWORD PTR 20[esp],ecx
+       mov     DWORD PTR 20[esp],ebx
        xor     ebp,            eax
-       lea     ecx,            DWORD PTR 3395469782[ebx*1+ecx]
-       mov     ebx,            edx
-       rol     ebx,            5
+       lea     ebx,            DWORD PTR 3395469782[ecx*1+ebx]
+       mov     ecx,            edx
+       rol     ecx,            5
        ror     edi,            1
-       add     ebx,            ebp
+       add     ecx,            ebp
        ror     edi,            1
-       add     ecx,            ebx
+       add     ebx,            ecx
        ; 20_39 70
-       mov     ebx,            DWORD PTR 24[esp]
+       mov     ecx,            DWORD PTR 24[esp]
        mov     ebp,            DWORD PTR 32[esp]
-       xor     ebx,            ebp
+       xor     ecx,            ebp
        mov     ebp,            DWORD PTR 56[esp]
-       xor     ebx,            ebp
+       xor     ecx,            ebp
        mov     ebp,            DWORD PTR 12[esp]
-       xor     ebx,            ebp
+       xor     ecx,            ebp
        mov     ebp,            edx
-       rol     ebx,            1
+       rol     ecx,            1
        xor     ebp,            edi
-       mov     DWORD PTR 24[esp],ebx
+       mov     DWORD PTR 24[esp],ecx
        xor     ebp,            esi
-       lea     ebx,            DWORD PTR 3395469782[eax*1+ebx]
-       mov     eax,            ecx
+       lea     ecx,            DWORD PTR 3395469782[eax*1+ecx]
+       mov     eax,            ebx
        rol     eax,            5
        ror     edx,            1
        add     eax,            ebp
        ror     edx,            1
-       add     ebx,            eax
+       add     ecx,            eax
        ; 20_39 71
        mov     eax,            DWORD PTR 28[esp]
        mov     ebp,            DWORD PTR 36[esp]
@@ -1454,17 +1455,17 @@
        xor     eax,            ebp
        mov     ebp,            DWORD PTR 16[esp]
        xor     eax,            ebp
-       mov     ebp,            ecx
+       mov     ebp,            ebx
        rol     eax,            1
        xor     ebp,            edx
        mov     DWORD PTR 28[esp],eax
        xor     ebp,            edi
        lea     eax,            DWORD PTR 3395469782[esi*1+eax]
-       mov     esi,            ebx
+       mov     esi,            ecx
        rol     esi,            5
-       ror     ecx,            1
+       ror     ebx,            1
        add     esi,            ebp
-       ror     ecx,            1
+       ror     ebx,            1
        add     eax,            esi
        ; 20_39 72
        mov     esi,            DWORD PTR 32[esp]
@@ -1474,17 +1475,17 @@
        xor     esi,            ebp
        mov     ebp,            DWORD PTR 20[esp]
        xor     esi,            ebp
-       mov     ebp,            ebx
+       mov     ebp,            ecx
        rol     esi,            1
-       xor     ebp,            ecx
+       xor     ebp,            ebx
        mov     DWORD PTR 32[esp],esi
        xor     ebp,            edx
        lea     esi,            DWORD PTR 3395469782[edi*1+esi]
        mov     edi,            eax
        rol     edi,            5
-       ror     ebx,            1
+       ror     ecx,            1
        add     edi,            ebp
-       ror     ebx,            1
+       ror     ecx,            1
        add     esi,            edi
        ; 20_39 73
        mov     edi,            DWORD PTR 36[esp]
@@ -1496,9 +1497,9 @@
        xor     edi,            ebp
        mov     ebp,            eax
        rol     edi,            1
-       xor     ebp,            ebx
-       mov     DWORD PTR 36[esp],edi
        xor     ebp,            ecx
+       mov     DWORD PTR 36[esp],edi
+       xor     ebp,            ebx
        lea     edi,            DWORD PTR 3395469782[edx*1+edi]
        mov     edx,            esi
        rol     edx,            5
@@ -1518,54 +1519,54 @@
        rol     edx,            1
        xor     ebp,            eax
        mov     DWORD PTR 40[esp],edx
-       xor     ebp,            ebx
-       lea     edx,            DWORD PTR 3395469782[ecx*1+edx]
-       mov     ecx,            edi
-       rol     ecx,            5
+       xor     ebp,            ecx
+       lea     edx,            DWORD PTR 3395469782[ebx*1+edx]
+       mov     ebx,            edi
+       rol     ebx,            5
        ror     esi,            1
-       add     ecx,            ebp
+       add     ebx,            ebp
        ror     esi,            1
-       add     edx,            ecx
+       add     edx,            ebx
        ; 20_39 75
-       mov     ecx,            DWORD PTR 44[esp]
+       mov     ebx,            DWORD PTR 44[esp]
        mov     ebp,            DWORD PTR 52[esp]
-       xor     ecx,            ebp
+       xor     ebx,            ebp
        mov     ebp,            DWORD PTR 12[esp]
-       xor     ecx,            ebp
+       xor     ebx,            ebp
        mov     ebp,            DWORD PTR 32[esp]
-       xor     ecx,            ebp
+       xor     ebx,            ebp
        mov     ebp,            edi
-       rol     ecx,            1
+       rol     ebx,            1
        xor     ebp,            esi
-       mov     DWORD PTR 44[esp],ecx
+       mov     DWORD PTR 44[esp],ebx
        xor     ebp,            eax
-       lea     ecx,            DWORD PTR 3395469782[ebx*1+ecx]
-       mov     ebx,            edx
-       rol     ebx,            5
+       lea     ebx,            DWORD PTR 3395469782[ecx*1+ebx]
+       mov     ecx,            edx
+       rol     ecx,            5
        ror     edi,            1
-       add     ebx,            ebp
+       add     ecx,            ebp
        ror     edi,            1
-       add     ecx,            ebx
+       add     ebx,            ecx
        ; 20_39 76
-       mov     ebx,            DWORD PTR 48[esp]
+       mov     ecx,            DWORD PTR 48[esp]
        mov     ebp,            DWORD PTR 56[esp]
-       xor     ebx,            ebp
+       xor     ecx,            ebp
        mov     ebp,            DWORD PTR 16[esp]
-       xor     ebx,            ebp
+       xor     ecx,            ebp
        mov     ebp,            DWORD PTR 36[esp]
-       xor     ebx,            ebp
+       xor     ecx,            ebp
        mov     ebp,            edx
-       rol     ebx,            1
+       rol     ecx,            1
        xor     ebp,            edi
-       mov     DWORD PTR 48[esp],ebx
+       mov     DWORD PTR 48[esp],ecx
        xor     ebp,            esi
-       lea     ebx,            DWORD PTR 3395469782[eax*1+ebx]
-       mov     eax,            ecx
+       lea     ecx,            DWORD PTR 3395469782[eax*1+ecx]
+       mov     eax,            ebx
        rol     eax,            5
        ror     edx,            1
        add     eax,            ebp
        ror     edx,            1
-       add     ebx,            eax
+       add     ecx,            eax
        ; 20_39 77
        mov     eax,            DWORD PTR 52[esp]
        mov     ebp,            DWORD PTR 60[esp]
@@ -1574,17 +1575,17 @@
        xor     eax,            ebp
        mov     ebp,            DWORD PTR 40[esp]
        xor     eax,            ebp
-       mov     ebp,            ecx
+       mov     ebp,            ebx
        rol     eax,            1
        xor     ebp,            edx
        mov     DWORD PTR 52[esp],eax
        xor     ebp,            edi
        lea     eax,            DWORD PTR 3395469782[esi*1+eax]
-       mov     esi,            ebx
+       mov     esi,            ecx
        rol     esi,            5
-       ror     ecx,            1
+       ror     ebx,            1
        add     esi,            ebp
-       ror     ecx,            1
+       ror     ebx,            1
        add     eax,            esi
        ; 20_39 78
        mov     esi,            DWORD PTR 56[esp]
@@ -1594,17 +1595,17 @@
        xor     esi,            ebp
        mov     ebp,            DWORD PTR 44[esp]
        xor     esi,            ebp
-       mov     ebp,            ebx
+       mov     ebp,            ecx
        rol     esi,            1
-       xor     ebp,            ecx
+       xor     ebp,            ebx
        mov     DWORD PTR 56[esp],esi
        xor     ebp,            edx
        lea     esi,            DWORD PTR 3395469782[edi*1+esi]
        mov     edi,            eax
        rol     edi,            5
-       ror     ebx,            1
+       ror     ecx,            1
        add     edi,            ebp
-       ror     ebx,            1
+       ror     ecx,            1
        add     esi,            edi
        ; 20_39 79
        mov     edi,            DWORD PTR 60[esp]
@@ -1616,49 +1617,100 @@
        xor     edi,            ebp
        mov     ebp,            eax
        rol     edi,            1
-       xor     ebp,            ebx
-       mov     DWORD PTR 60[esp],edi
        xor     ebp,            ecx
+       mov     DWORD PTR 60[esp],edi
+       xor     ebp,            ebx
        lea     edi,            DWORD PTR 3395469782[edx*1+edi]
        mov     edx,            esi
        rol     edx,            5
        add     edx,            ebp
-       mov     ebp,            DWORD PTR 92[esp]
+       mov     ebp,            DWORD PTR 128[esp]
        ror     eax,            1
        add     edi,            edx
        ror     eax,            1
        ; End processing
        ; 
        mov     edx,            DWORD PTR 12[ebp]
-       add     edx,            ebx
-       mov     ebx,            DWORD PTR 4[ebp]
-       add     ebx,            esi
+       add     edx,            ecx
+       mov     ecx,            DWORD PTR 4[ebp]
+       add     ecx,            esi
        mov     esi,            eax
        mov     eax,            DWORD PTR [ebp]
        mov     DWORD PTR 12[ebp],edx
        add     eax,            edi
        mov     edi,            DWORD PTR 16[ebp]
-       add     edi,            ecx
-       mov     ecx,            DWORD PTR 8[ebp]
-       add     ecx,            esi
+       add     edi,            ebx
+       mov     ebx,            DWORD PTR 8[ebp]
+       add     ebx,            esi
        mov     DWORD PTR [ebp],eax
-       mov     esi,            DWORD PTR 64[esp]
-       mov     DWORD PTR 8[ebp],ecx
+       mov     esi,            DWORD PTR 132[esp]
+       mov     DWORD PTR 8[ebp],ebx
        add     esi,            64
        mov     eax,            DWORD PTR 68[esp]
        mov     DWORD PTR 16[ebp],edi
-       cmp     eax,            esi
-       mov     DWORD PTR 4[ebp],ebx
-       jl      $L001end
-       mov     eax,            DWORD PTR [esi]
-       jmp     L000start
-$L001end:
-       add     esp,            72
+       cmp     esi,            eax
+       mov     DWORD PTR 4[ebp],ecx
+       jl      L000start
+       add     esp,            108
        pop     edi
        pop     ebx
        pop     ebp
        pop     esi
        ret
-_sha1_block_x86 ENDP
+_TEXT  SEGMENT
+PUBLIC _sha1_block_asm_host_order
+
+_sha1_block_asm_host_order PROC NEAR
+       mov     ecx,            DWORD PTR 12[esp]
+       push    esi
+       shl     ecx,            6
+       mov     esi,            DWORD PTR 12[esp]
+       push    ebp
+       add     ecx,            esi
+       push    ebx
+       mov     ebp,            DWORD PTR 16[esp]
+       push    edi
+       mov     edx,            DWORD PTR 12[ebp]
+       sub     esp,            108
+       mov     edi,            DWORD PTR 16[ebp]
+       mov     ebx,            DWORD PTR 8[ebp]
+       mov     DWORD PTR 68[esp],ecx
+       ; First we need to setup the X array
+       mov     eax,            DWORD PTR [esi]
+       mov     ecx,            DWORD PTR 4[esi]
+       mov     DWORD PTR [esp],eax
+       mov     DWORD PTR 4[esp],ecx
+       mov     eax,            DWORD PTR 8[esi]
+       mov     ecx,            DWORD PTR 12[esi]
+       mov     DWORD PTR 8[esp],eax
+       mov     DWORD PTR 12[esp],ecx
+       mov     eax,            DWORD PTR 16[esi]
+       mov     ecx,            DWORD PTR 20[esi]
+       mov     DWORD PTR 16[esp],eax
+       mov     DWORD PTR 20[esp],ecx
+       mov     eax,            DWORD PTR 24[esi]
+       mov     ecx,            DWORD PTR 28[esi]
+       mov     DWORD PTR 24[esp],eax
+       mov     DWORD PTR 28[esp],ecx
+       mov     eax,            DWORD PTR 32[esi]
+       mov     ecx,            DWORD PTR 36[esi]
+       mov     DWORD PTR 32[esp],eax
+       mov     DWORD PTR 36[esp],ecx
+       mov     eax,            DWORD PTR 40[esi]
+       mov     ecx,            DWORD PTR 44[esi]
+       mov     DWORD PTR 40[esp],eax
+       mov     DWORD PTR 44[esp],ecx
+       mov     eax,            DWORD PTR 48[esi]
+       mov     ecx,            DWORD PTR 52[esi]
+       mov     DWORD PTR 48[esp],eax
+       mov     DWORD PTR 52[esp],ecx
+       mov     eax,            DWORD PTR 56[esi]
+       mov     ecx,            DWORD PTR 60[esi]
+       mov     DWORD PTR 56[esp],eax
+       mov     DWORD PTR 60[esp],ecx
+       jmp     L001shortcut
+_sha1_block_asm_host_order ENDP
+_TEXT  ENDS
+_sha1_block_asm_data_order ENDP
 _TEXT  ENDS
 END
Index: opensa/openssl/crypto/sha/asm/sha1-586.pl
diff -u opensa/openssl/crypto/sha/asm/sha1-586.pl:1.1 
opensa/openssl/crypto/sha/asm/sha1-586.pl:1.2
--- opensa/openssl/crypto/sha/asm/sha1-586.pl:1.1       Tue Jan 25 23:22:34 2000
+++ opensa/openssl/crypto/sha/asm/sha1-586.pl   Thu Mar  2 21:12:01 2000
@@ -8,8 +8,8 @@
 &asm_init($ARGV[0],"sha1-586.pl",$ARGV[$#ARGV] eq "386");
 
 $A="eax";
-$B="ebx";
-$C="ecx";
+$B="ecx";
+$C="ebx";
 $D="edx";
 $E="edi";
 $T="esi";
@@ -19,7 +19,7 @@
 
 @K=(0x5a827999,0x6ed9eba1,0x8f1bbcdc,0xca62c1d6);
 
-&sha1_block("sha1_block_x86");
+&sha1_block_data("sha1_block_asm_data_order");
 
 &asm_finish();
 
@@ -53,11 +53,14 @@
        local($in)=@_;
 
        &comment("First, load the words onto the stack in network byte order");
-       for ($i=0; $i<16; $i++)
+       for ($i=0; $i<16; $i+=2)
                {
-               &mov("eax",&DWP(($i+0)*4,$in,"",0)) unless $i == 0;
-               &bswap("eax");
-               &mov(&swtmp($i+0),"eax");
+               &mov($A,&DWP(($i+0)*4,$in,"",0));# unless $i == 0;
+                &mov($B,&DWP(($i+1)*4,$in,"",0));
+               &bswap($A);
+                &bswap($B);
+               &mov(&swtmp($i+0),$A);
+                &mov(&swtmp($i+1),$B);
                }
 
        &comment("We now have the X array on the stack");
@@ -312,7 +315,7 @@
        &BODY_20_39(@_);
        }
 
-sub sha1_block
+sub sha1_block_host
        {
        local($name)=@_;
 
@@ -325,35 +328,77 @@
        # D     12
        # E     16
 
-       &push("esi");
-        &push("ebp");
-       &mov("eax",     &wparam(2));
+       &mov("ecx",     &wparam(2));
+        &push("esi");
+       &shl("ecx",6);
         &mov("esi",    &wparam(1));
-       &add("eax",     "esi"); # offset to leave on
+       &push("ebp");
+        &add("ecx","esi");     # offset to leave on
+       &push("ebx");
         &mov("ebp",    &wparam(0));
+       &push("edi");
+        &mov($D,       &DWP(12,"ebp","",0));
+       &stack_push(18+9);
+        &mov($E,       &DWP(16,"ebp","",0));
+       &mov($C,        &DWP( 8,"ebp","",0));
+        &mov(&swtmp(17),"ecx");
+
+       &comment("First we need to setup the X array");
+
+       for ($i=0; $i<16; $i+=2)
+               {
+               &mov($A,&DWP(($i+0)*4,"esi","",0));# unless $i == 0;
+                &mov($B,&DWP(($i+1)*4,"esi","",0));
+               &mov(&swtmp($i+0),$A);
+                &mov(&swtmp($i+1),$B);
+               }
+       &jmp(&label("shortcut"));
+       &function_end_B($name);
+       }
+
+
+sub sha1_block_data
+       {
+       local($name)=@_;
+
+       &function_begin_B($name,"");
+
+       # parameter 1 is the MD5_CTX structure.
+       # A     0
+       # B     4
+       # C     8
+       # D     12
+       # E     16
+
+       &mov("ecx",     &wparam(2));
+        &push("esi");
+       &shl("ecx",6);
+        &mov("esi",    &wparam(1));
+       &push("ebp");
+        &add("ecx","esi");     # offset to leave on
        &push("ebx");
-        &sub("eax",    64);
+        &mov("ebp",    &wparam(0));
        &push("edi");
-        &mov($B,       &DWP( 4,"ebp","",0));
-       &stack_push(18);
         &mov($D,       &DWP(12,"ebp","",0));
-       &mov($E,        &DWP(16,"ebp","",0));
-        &mov($C,       &DWP( 8,"ebp","",0));
-       &mov(&swtmp(17),"eax");
+       &stack_push(18+9);
+        &mov($E,       &DWP(16,"ebp","",0));
+       &mov($C,        &DWP( 8,"ebp","",0));
+        &mov(&swtmp(17),"ecx");
 
        &comment("First we need to setup the X array");
-        &mov("eax",&DWP(0,"esi","",0)); # pulled out of X_expand
 
        &set_label("start") unless $normal;
 
        &X_expand("esi");
-        &mov(&swtmp(16),"esi");
+        &mov(&wparam(1),"esi");
 
+       &set_label("shortcut", 1);
        &comment("");
        &comment("Start processing");
 
        # odd start
        &mov($A,        &DWP( 0,"ebp","",0));
+        &mov($B,       &DWP( 4,"ebp","",0));
        $X="esp";
        &BODY_00_15(-2,$K[0],$X, 0,$A,$B,$C,$D,$E,$T);
        &BODY_00_15( 0,$K[0],$X, 1,$T,$A,$B,$C,$D,$E);
@@ -468,24 +513,26 @@
        &add($C,$T);
 
         &mov(&DWP( 0,$tmp1,"",0),$A);
-       &mov("esi",&swtmp(16));
-        &mov(&DWP( 8,$tmp1,"",0),$C);  # This is for looping
+       &mov("esi",&wparam(1));
+        &mov(&DWP( 8,$tmp1,"",0),$C);
        &add("esi",64);
         &mov("eax",&swtmp(17));
        &mov(&DWP(16,$tmp1,"",0),$E);
-        &cmp("eax","esi");
-       &mov(&DWP( 4,$tmp1,"",0),$B);   # This is for looping
-        &jl(&label("end"));
-       &mov("eax",&DWP(0,"esi","",0)); # Pulled down from 
-        &jmp(&label("start"));
+        &cmp("esi","eax");
+       &mov(&DWP( 4,$tmp1,"",0),$B);
+        &jl(&label("start"));
 
-       &set_label("end");
-       &stack_pop(18);
+       &stack_pop(18+9);
         &pop("edi");
        &pop("ebx");
         &pop("ebp");
        &pop("esi");
         &ret();
+
+       # it has to reside within sha1_block_asm_host_order body
+       # because it calls &jmp(&label("shortcut"));
+       &sha1_block_host("sha1_block_asm_host_order");
+
        &function_end_B($name);
        }
 
Index: opensa/openssl/crypto/stack/makefile.ssl
diff -u opensa/openssl/crypto/stack/makefile.ssl:1.1 
opensa/openssl/crypto/stack/makefile.ssl:1.2
--- opensa/openssl/crypto/stack/makefile.ssl:1.1        Tue Jan 25 23:22:06 2000
+++ opensa/openssl/crypto/stack/makefile.ssl    Thu Mar  2 21:12:01 2000
@@ -82,4 +82,5 @@
 stack.o: ../../include/openssl/crypto.h ../../include/openssl/e_os.h
 stack.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
 stack.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
-stack.o: ../../include/openssl/stack.h ../cryptlib.h
+stack.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
+stack.o: ../cryptlib.h
Index: opensa/openssl/crypto/stack/stack.c
diff -u opensa/openssl/crypto/stack/stack.c:1.1 opensa/openssl/crypto/stack/stack.c:1.2
--- opensa/openssl/crypto/stack/stack.c:1.1     Tue Jan 25 23:22:06 2000
+++ opensa/openssl/crypto/stack/stack.c Thu Mar  2 21:12:01 2000
@@ -59,7 +59,7 @@
 /* Code for stacks
  * Author - Eric Young v 1.0
  * 1.2 eay 12-Mar-97 - Modified sk_find so that it _DOES_ return the
- *                     lowest index for the seached item.
+ *                     lowest index for the searched item.
  *
  * 1.1 eay - Take from netdb and added to SSLeay
  *
@@ -126,7 +126,7 @@
        ret->sorted=0;
        return(ret);
 err1:
-       Free((char *)ret);
+       Free(ret);
 err0:
        return(NULL);
        }
@@ -276,8 +276,8 @@
 void sk_free(STACK *st)
        {
        if (st == NULL) return;
-       if (st->data != NULL) Free((char *)st->data);
-       Free((char *)st);
+       if (st->data != NULL) Free(st->data);
+       Free(st);
        }
 
 int sk_num(STACK *st)
Index: opensa/openssl/crypto/stack/stack.h
diff -u opensa/openssl/crypto/stack/stack.h:1.1 opensa/openssl/crypto/stack/stack.h:1.2
--- opensa/openssl/crypto/stack/stack.h:1.1     Tue Jan 25 23:22:06 2000
+++ opensa/openssl/crypto/stack/stack.h Thu Mar  2 21:12:01 2000
@@ -76,8 +76,8 @@
 
 #define sk_new_null()  sk_new(NULL)
 
-#define M_sk_num(sk)           ((sk)->num)
-#define M_sk_value(sk,n)       ((sk)->data[n])
+#define M_sk_num(sk)           ((sk) ? (sk)->num:-1)
+#define M_sk_value(sk,n)       ((sk) ? (sk)->data[n] : NULL)
 
 int sk_num(STACK *);
 char *sk_value(STACK *, int);
Index: opensa/openssl/crypto/threads/mttest.c
diff -u opensa/openssl/crypto/threads/mttest.c:1.1 
opensa/openssl/crypto/threads/mttest.c:1.2
--- opensa/openssl/crypto/threads/mttest.c:1.1  Tue Jan 25 23:21:43 2000
+++ opensa/openssl/crypto/threads/mttest.c      Thu Mar  2 21:12:01 2000
@@ -74,26 +74,29 @@
 #include <ulocks.h>
 #include <sys/prctl.h>
 #endif
+#ifdef PTHREADS
+#include <pthread.h>
+#endif
 #include <openssl/lhash.h>
 #include <openssl/crypto.h>
 #include <openssl/buffer.h>
-#include "../e_os.h"
+#include "../../e_os.h"
 #include <openssl/x509.h>
 #include <openssl/ssl.h>
 #include <openssl/err.h>
+#include <openssl/rand.h>
 
 #ifdef NO_FP_API
 #define APPS_WIN16
-#include "../crypto/buffer/bss_file.c"
+#include "../buffer/bss_file.c"
 #endif
 
-#define TEST_SERVER_CERT "../apps/server.pem"
-#define TEST_CLIENT_CERT "../apps/client.pem"
+#define TEST_SERVER_CERT "../../apps/server.pem"
+#define TEST_CLIENT_CERT "../../apps/client.pem"
 
 #define MAX_THREAD_NUMBER      100
 
-int MS_CALLBACK verify_callback(int ok, X509 *xs, X509 *xi, int depth,
-       int error,char *arg);
+int MS_CALLBACK verify_callback(int ok, X509_STORE_CTX *xs);
 void thread_setup(void);
 void thread_cleanup(void);
 void do_threads(SSL_CTX *s_ctx,SSL_CTX *c_ctx);
@@ -121,6 +124,8 @@
 int reconnect=0;
 int cache_stats=0;
 
+static const char rnd_seed[] = "string to make the random number generator think it 
+has entropy";
+
 int doit(char *ctx[4]);
 static void print_stats(FILE *fp, SSL_CTX *ctx)
 {
@@ -170,6 +175,8 @@
        char *ccert=TEST_CLIENT_CERT;
        SSL_METHOD *ssl_method=SSLv23_method();
 
+       RAND_seed(rnd_seed, sizeof rnd_seed);
+
        if (bio_err == NULL)
                bio_err=BIO_new_fp(stderr,BIO_NOCLOSE);
        if (bio_stdout == NULL)
@@ -244,7 +251,7 @@
        if (cipher == NULL) cipher=getenv("SSL_CIPHER");
 
        SSL_load_error_strings();
-       SSLeay_add_ssl_algorithms();
+       OpenSSL_add_ssl_algorithms();
 
        c_ctx=SSL_CTX_new(ssl_method);
        s_ctx=SSL_CTX_new(ssl_method);
@@ -259,8 +266,15 @@
        SSL_CTX_set_session_cache_mode(c_ctx,
                SSL_SESS_CACHE_NO_AUTO_CLEAR|SSL_SESS_CACHE_SERVER);
 
-       SSL_CTX_use_certificate_file(s_ctx,scert,SSL_FILETYPE_PEM);
-       SSL_CTX_use_RSAPrivateKey_file(s_ctx,scert,SSL_FILETYPE_PEM);
+       if (!SSL_CTX_use_certificate_file(s_ctx,scert,SSL_FILETYPE_PEM))
+               {
+               ERR_print_errors(bio_err);
+               }
+       else if (!SSL_CTX_use_RSAPrivateKey_file(s_ctx,scert,SSL_FILETYPE_PEM))
+               {
+               ERR_print_errors(bio_err);
+               goto end;
+               }
 
        if (client_auth)
                {
@@ -489,6 +503,7 @@
                                        else
                                                {
                                                fprintf(stderr,"ERROR in CLIENT\n");
+                                               ERR_print_errors_fp(stderr);
                                                return(1);
                                                }
                                        }
@@ -520,6 +535,7 @@
                                        else
                                                {
                                                fprintf(stderr,"ERROR in CLIENT\n");
+                                               ERR_print_errors_fp(stderr);
                                                return(1);
                                                }
                                        }
@@ -652,18 +668,23 @@
        return(0);
        }
 
-int MS_CALLBACK verify_callback(int ok, X509 *xs, X509 *xi, int depth,
-            int error, char *arg)
+int MS_CALLBACK verify_callback(int ok, X509_STORE_CTX *ctx)
        {
-       char buf[256];
+       char *s, buf[256];
 
        if (verbose)
                {
-               X509_NAME_oneline(X509_get_subject_name(xs),buf,256);
-               if (ok)
-                       fprintf(stderr,"depth=%d %s\n",depth,buf);
-               else
-                       fprintf(stderr,"depth=%d error=%d %s\n",depth,error,buf);
+               s=X509_NAME_oneline(X509_get_subject_name(ctx->current_cert),
+                                   buf,256);
+               if (s != NULL)
+                       {
+                       if (ok)
+                               fprintf(stderr,"depth=%d %s\n",
+                                       ctx->error_depth,buf);
+                       else
+                               fprintf(stderr,"depth=%d error=%d %s\n",
+                                       ctx->error_depth,ctx->error,buf);
+                       }
                }
        return(ok);
        }
@@ -672,13 +693,14 @@
 
 #ifdef WIN32
 
-static HANDLE lock_cs[CRYPTO_NUM_LOCKS];
+static HANDLE *lock_cs;
 
 void thread_setup(void)
        {
        int i;
 
-       for (i=0; i<CRYPTO_NUM_LOCKS; i++)
+       lock_cs=Malloc(CRYPTO_num_locks() * sizeof(HANDLE));
+       for (i=0; i<CRYPTO_num_locks(); i++)
                {
                lock_cs[i]=CreateMutex(NULL,FALSE,NULL);
                }
@@ -692,8 +714,9 @@
        int i;
 
        CRYPTO_set_locking_callback(NULL);
-       for (i=0; i<CRYPTO_NUM_LOCKS; i++)
+       for (i=0; i<CRYPTO_num_locks(); i++)
                CloseHandle(lock_cs[i]);
+       Free(lock_cs);
        }
 
 void win32_locking_callback(int mode, int type, char *file, int line)
@@ -763,15 +786,17 @@
 
 #ifdef SOLARIS
 
-static mutex_t lock_cs[CRYPTO_NUM_LOCKS];
-/*static rwlock_t lock_cs[CRYPTO_NUM_LOCKS]; */
-static long lock_count[CRYPTO_NUM_LOCKS];
+static mutex_t *lock_cs;
+/*static rwlock_t *lock_cs; */
+static long *lock_count;
 
 void thread_setup(void)
        {
        int i;
 
-       for (i=0; i<CRYPTO_NUM_LOCKS; i++)
+       lock_cs=Malloc(CRYPTO_num_locks() * sizeof(mutex_t));
+       lock_count=Malloc(CRYPTO_num_locks() * sizeof(long));
+       for (i=0; i<CRYPTO_num_locks(); i++)
                {
                lock_count[i]=0;
                /* rwlock_init(&(lock_cs[i]),USYNC_THREAD,NULL); */
@@ -787,31 +812,37 @@
        int i;
 
        CRYPTO_set_locking_callback(NULL);
-fprintf(stderr,"cleanup\n");
-       for (i=0; i<CRYPTO_NUM_LOCKS; i++)
+
+       fprintf(stderr,"cleanup\n");
+
+       for (i=0; i<CRYPTO_num_locks(); i++)
                {
                /* rwlock_destroy(&(lock_cs[i])); */
                mutex_destroy(&(lock_cs[i]));
                fprintf(stderr,"%8ld:%s\n",lock_count[i],CRYPTO_get_lock_name(i));
                }
-fprintf(stderr,"done cleanup\n");
+       Free(lock_cs);
+       Free(lock_count);
+
+       fprintf(stderr,"done cleanup\n");
+
        }
 
 void solaris_locking_callback(int mode, int type, char *file, int line)
        {
 #ifdef undef
-fprintf(stderr,"thread=%4d mode=%s lock=%s %s:%d\n",
-       CRYPTO_thread_id(),
-       (mode&CRYPTO_LOCK)?"l":"u",
-       (type&CRYPTO_READ)?"r":"w",file,line);
+       fprintf(stderr,"thread=%4d mode=%s lock=%s %s:%d\n",
+               CRYPTO_thread_id(),
+               (mode&CRYPTO_LOCK)?"l":"u",
+               (type&CRYPTO_READ)?"r":"w",file,line);
 #endif
 
-/*
-if (CRYPTO_LOCK_SSL_CERT == type)
+       /*
+       if (CRYPTO_LOCK_SSL_CERT == type)
        fprintf(stderr,"(t,m,f,l) %ld %d %s %d\n",
                CRYPTO_thread_id(),
                mode,file,line);
-*/
+       */
        if (mode & CRYPTO_LOCK)
                {
        /*      if (mode & CRYPTO_READ)
@@ -871,7 +902,7 @@
 
 
 static usptr_t *arena;
-static usema_t *lock_cs[CRYPTO_NUM_LOCKS];
+static usema_t **lock_cs;
 
 void thread_setup(void)
        {
@@ -888,7 +919,8 @@
        arena=usinit(filename);
        unlink(filename);
 
-       for (i=0; i<CRYPTO_NUM_LOCKS; i++)
+       lock_cs=Malloc(CRYPTO_num_locks() * sizeof(usema_t *));
+       for (i=0; i<CRYPTO_num_locks(); i++)
                {
                lock_cs[i]=usnewsema(arena,1);
                }
@@ -902,7 +934,7 @@
        int i;
 
        CRYPTO_set_locking_callback(NULL);
-       for (i=0; i<CRYPTO_NUM_LOCKS; i++)
+       for (i=0; i<CRYPTO_num_locks(); i++)
                {
                char buf[10];
 
@@ -910,6 +942,7 @@
                usdumpsema(lock_cs[i],stdout,buf);
                usfreesema(lock_cs[i],arena);
                }
+       Free(lock_cs);
        }
 
 void irix_locking_callback(int mode, int type, char *file, int line)
@@ -962,14 +995,16 @@
 
 #ifdef PTHREADS
 
-static pthread_mutex_t lock_cs[CRYPTO_NUM_LOCKS];
-static long lock_count[CRYPTO_NUM_LOCKS];
+static pthread_mutex_t *lock_cs;
+static long *lock_count;
 
 void thread_setup(void)
        {
        int i;
 
-       for (i=0; i<CRYPTO_NUM_LOCKS; i++)
+       lock_cs=Malloc(CRYPTO_num_locks() * sizeof(pthread_mutex_t));
+       lock_count=Malloc(CRYPTO_num_locks() * sizeof(long));
+       for (i=0; i<CRYPTO_num_locks(); i++)
                {
                lock_count[i]=0;
                pthread_mutex_init(&(lock_cs[i]),NULL);
@@ -985,12 +1020,15 @@
 
        CRYPTO_set_locking_callback(NULL);
        fprintf(stderr,"cleanup\n");
-       for (i=0; i<CRYPTO_NUM_LOCKS; i++)
+       for (i=0; i<CRYPTO_num_locks(); i++)
                {
                pthread_mutex_destroy(&(lock_cs[i]));
                fprintf(stderr,"%8ld:%s\n",lock_count[i],
                        CRYPTO_get_lock_name(i));
                }
+       Free(lock_cs);
+       Free(lock_count);
+
        fprintf(stderr,"done cleanup\n");
        }
 
@@ -1045,7 +1083,7 @@
                }
 
        printf("pthreads threads done (%d,%d)\n",
-       s_ctx->references,c_ctx->references);
+               s_ctx->references,c_ctx->references);
        }
 
 unsigned long pthreads_thread_id(void)
Index: opensa/openssl/crypto/threads/th-lock.c
diff -u opensa/openssl/crypto/threads/th-lock.c:1.1 
opensa/openssl/crypto/threads/th-lock.c:1.2
--- opensa/openssl/crypto/threads/th-lock.c:1.1 Tue Jan 25 23:21:43 2000
+++ opensa/openssl/crypto/threads/th-lock.c     Thu Mar  2 21:12:01 2000
@@ -74,6 +74,9 @@
 #include <ulocks.h>
 #include <sys/prctl.h>
 #endif
+#ifdef PTHREADS
+#include <pthread.h>
+#endif
 #include <openssl/lhash.h>
 #include <openssl/crypto.h>
 #include <openssl/buffer.h>
@@ -82,7 +85,7 @@
 #include <openssl/ssl.h>
 #include <openssl/err.h>
 
-int CRYPTO_thread_setup(void);
+void CRYPTO_thread_setup(void);
 void CRYPTO_thread_cleanup(void);
 
 static void irix_locking_callback(int mode,int type,char *file,int line);
@@ -96,7 +99,7 @@
 
 /* usage:
  * CRYPTO_thread_setup();
- * applicaion code
+ * application code
  * CRYPTO_thread_cleanup();
  */
 
@@ -104,13 +107,14 @@
 
 #ifdef WIN32
 
-static HANDLE lock_cs[CRYPTO_NUM_LOCKS];
+static HANDLE *lock_cs;
 
-int CRYPTO_thread_setup(void)
+void CRYPTO_thread_setup(void)
        {
        int i;
 
-       for (i=0; i<CRYPTO_NUM_LOCKS; i++)
+       lock_cs=Malloc(CRYPTO_num_locks() * sizeof(HANDLE));
+       for (i=0; i<CRYPTO_num_locks(); i++)
                {
                lock_cs[i]=CreateMutex(NULL,FALSE,NULL);
                }
@@ -125,8 +129,9 @@
        int i;
 
        CRYPTO_set_locking_callback(NULL);
-       for (i=0; i<CRYPTO_NUM_LOCKS; i++)
+       for (i=0; i<CRYPTO_num_locks(); i++)
                CloseHandle(lock_cs[i]);
+       Free(lock_cs);
        }
 
 void win32_locking_callback(int mode, int type, char *file, int line)
@@ -147,18 +152,24 @@
 
 #define USE_MUTEX
 
-static mutex_t lock_cs[CRYPTO_NUM_LOCKS];
 #ifdef USE_MUTEX
-static long lock_count[CRYPTO_NUM_LOCKS];
+static mutex_t *lock_cs;
 #else
-static rwlock_t lock_cs[CRYPTO_NUM_LOCKS];
+static rwlock_t *lock_cs;
 #endif
+static long *lock_count;
 
 void CRYPTO_thread_setup(void)
        {
        int i;
 
-       for (i=0; i<CRYPTO_NUM_LOCKS; i++)
+#ifdef USE_MUTEX
+       lock_cs=Malloc(CRYPTO_num_locks() * sizeof(mutex_t));
+#else
+       lock_cs=Malloc(CRYPTO_num_locks() * sizeof(rwlock_t));
+#endif
+       lock_count=Malloc(CRYPTO_num_locks() * sizeof(long));
+       for (i=0; i<CRYPTO_num_locks(); i++)
                {
                lock_count[i]=0;
 #ifdef USE_MUTEX
@@ -177,7 +188,7 @@
        int i;
 
        CRYPTO_set_locking_callback(NULL);
-       for (i=0; i<CRYPTO_NUM_LOCKS; i++)
+       for (i=0; i<CRYPTO_num_locks(); i++)
                {
 #ifdef USE_MUTEX
                mutex_destroy(&(lock_cs[i]));
@@ -185,6 +196,8 @@
                rwlock_destroy(&(lock_cs[i]));
 #endif
                }
+       Free(lock_cs);
+       Free(lock_count);
        }
 
 void solaris_locking_callback(int mode, int type, char *file, int line)
@@ -237,7 +250,7 @@
 /* I don't think this works..... */
 
 static usptr_t *arena;
-static usema_t *lock_cs[CRYPTO_NUM_LOCKS];
+static usema_t **lock_cs;
 
 void CRYPTO_thread_setup(void)
        {
@@ -254,7 +267,8 @@
        arena=usinit(filename);
        unlink(filename);
 
-       for (i=0; i<CRYPTO_NUM_LOCKS; i++)
+       lock_cs=Malloc(CRYPTO_num_locks() * sizeof(usema_t *));
+       for (i=0; i<CRYPTO_num_locks(); i++)
                {
                lock_cs[i]=usnewsema(arena,1);
                }
@@ -268,7 +282,7 @@
        int i;
 
        CRYPTO_set_locking_callback(NULL);
-       for (i=0; i<CRYPTO_NUM_LOCKS; i++)
+       for (i=0; i<CRYPTO_num_locks(); i++)
                {
                char buf[10];
 
@@ -276,6 +290,7 @@
                usdumpsema(lock_cs[i],stdout,buf);
                usfreesema(lock_cs[i],arena);
                }
+       Free(lock_cs);
        }
 
 void irix_locking_callback(int mode, int type, char *file, int line)
@@ -302,14 +317,16 @@
 /* Linux and a few others */
 #ifdef PTHREADS
 
-static pthread_mutex_t lock_cs[CRYPTO_NUM_LOCKS];
-static long lock_count[CRYPTO_NUM_LOCKS];
+static pthread_mutex_t *lock_cs;
+static long *lock_count;
 
 void CRYPTO_thread_setup(void)
        {
        int i;
 
-       for (i=0; i<CRYPTO_NUM_LOCKS; i++)
+       lock_cs=Malloc(CRYPTO_num_locks() * sizeof(pthread_mutex_t));
+       lock_count=Malloc(CRYPTO_num_locks() * sizeof(long));
+       for (i=0; i<CRYPTO_num_locks(); i++)
                {
                lock_count[i]=0;
                pthread_mutex_init(&(lock_cs[i]),NULL);
@@ -324,10 +341,12 @@
        int i;
 
        CRYPTO_set_locking_callback(NULL);
-       for (i=0; i<CRYPTO_NUM_LOCKS; i++)
+       for (i=0; i<CRYPTO_num_locks(); i++)
                {
                pthread_mutex_destroy(&(lock_cs[i]));
                }
+       Free(lock_cs);
+       Free(lock_count);
        }
 
 void pthreads_locking_callback(int mode, int type, char *file,
Index: opensa/openssl/crypto/txt_db/makefile.ssl
diff -u opensa/openssl/crypto/txt_db/makefile.ssl:1.1 
opensa/openssl/crypto/txt_db/makefile.ssl:1.2
--- opensa/openssl/crypto/txt_db/makefile.ssl:1.1       Tue Jan 25 23:21:26 2000
+++ opensa/openssl/crypto/txt_db/makefile.ssl   Thu Mar  2 21:12:02 2000
@@ -82,5 +82,6 @@
 txt_db.o: ../../include/openssl/crypto.h ../../include/openssl/e_os.h
 txt_db.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
 txt_db.o: ../../include/openssl/lhash.h ../../include/openssl/opensslconf.h
-txt_db.o: ../../include/openssl/opensslv.h ../../include/openssl/stack.h
-txt_db.o: ../../include/openssl/txt_db.h ../cryptlib.h
+txt_db.o: ../../include/openssl/opensslv.h ../../include/openssl/safestack.h
+txt_db.o: ../../include/openssl/stack.h ../../include/openssl/txt_db.h
+txt_db.o: ../cryptlib.h
Index: opensa/openssl/crypto/txt_db/txt_db.c
diff -u opensa/openssl/crypto/txt_db/txt_db.c:1.1 
opensa/openssl/crypto/txt_db/txt_db.c:1.2
--- opensa/openssl/crypto/txt_db/txt_db.c:1.1   Tue Jan 25 23:21:26 2000
+++ opensa/openssl/crypto/txt_db/txt_db.c       Thu Mar  2 21:12:02 2000
@@ -181,7 +181,7 @@
 #endif
                if (ret->data != NULL) sk_free(ret->data);
                if (ret->index != NULL) Free(ret->index);
-               if (ret->qual != NULL) Free((char *)ret->qual);
+               if (ret->qual != NULL) Free(ret->qual);
                if (ret != NULL) Free(ret);
                return(NULL);
                }
@@ -205,7 +205,7 @@
                db->error=DB_ERROR_NO_INDEX;
                return(NULL);
                }
-       ret=(char **)lh_retrieve(lh,(char *)value);
+       ret=(char **)lh_retrieve(lh,value);
        db->error=DB_ERROR_OK;
        return(ret);
        }
@@ -306,7 +306,7 @@
                        {
                        if ((db->qual[i] != NULL) &&
                                (db->qual[i](row) == 0)) continue;
-                       r=(char **)lh_retrieve(db->index[i],(char *)row);
+                       r=(char **)lh_retrieve(db->index[i],row);
                        if (r != NULL)
                                {
                                db->error=DB_ERROR_INDEX_CLASH;
@@ -329,7 +329,7 @@
                        {
                        if ((db->qual[i] != NULL) &&
                                (db->qual[i](row) == 0)) continue;
-                       lh_insert(db->index[i],(char *)row);
+                       lh_insert(db->index[i],row);
                        }
                }
        return(1);
Index: opensa/openssl/crypto/x509/by_dir.c
diff -u opensa/openssl/crypto/x509/by_dir.c:1.1 opensa/openssl/crypto/x509/by_dir.c:1.2
--- opensa/openssl/crypto/x509/by_dir.c:1.1     Tue Jan 25 23:21:09 2000
+++ opensa/openssl/crypto/x509/by_dir.c Thu Mar  2 21:12:02 2000
@@ -59,10 +59,18 @@
 #include <stdio.h>
 #include <time.h>
 #include <errno.h>
-#include <sys/types.h>
-#include <sys/stat.h>
 
 #include "cryptlib.h"
+
+#ifndef NO_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef MAC_OS_pre_X
+# include <stat.h>
+#else
+# include <sys/stat.h>
+#endif
+
 #include <openssl/lhash.h>
 #include <openssl/x509.h>
 
@@ -210,9 +218,9 @@
                                memcpy(ip,ctx->dirs_type,(ctx->num_dirs_alloced-10)*
                                        sizeof(int));
                                if (ctx->dirs != NULL)
-                                       Free((char *)ctx->dirs);
+                                       Free(ctx->dirs);
                                if (ctx->dirs_type != NULL)
-                                       Free((char *)ctx->dirs_type);
+                                       Free(ctx->dirs_type);
                                ctx->dirs=pp;
                                ctx->dirs_type=ip;
                                }
@@ -318,8 +326,7 @@
                /* we have added it to the cache so now pull
                 * it out again */
                CRYPTO_r_lock(CRYPTO_LOCK_X509_STORE);
-               tmp=(X509_OBJECT *)lh_retrieve(xl->store_ctx->certs,
-                       (char *)&stmp);
+               tmp=(X509_OBJECT *)lh_retrieve(xl->store_ctx->certs,&stmp);
                CRYPTO_r_unlock(CRYPTO_LOCK_X509_STORE);
 
                if (tmp != NULL)
Index: opensa/openssl/crypto/x509/by_file.c
diff -u opensa/openssl/crypto/x509/by_file.c:1.1 
opensa/openssl/crypto/x509/by_file.c:1.2
--- opensa/openssl/crypto/x509/by_file.c:1.1    Tue Jan 25 23:21:09 2000
+++ opensa/openssl/crypto/x509/by_file.c        Thu Mar  2 21:12:02 2000
@@ -59,8 +59,6 @@
 #include <stdio.h>
 #include <time.h>
 #include <errno.h>
-#include <sys/types.h>
-#include <sys/stat.h>
 
 #include "cryptlib.h"
 #include <openssl/lhash.h>
@@ -94,7 +92,7 @@
 static int by_file_ctrl(X509_LOOKUP *ctx, int cmd, const char *argp, long argl,
             char **ret)
        {
-       int ok=0,ok2=0;
+       int ok=0;
        char *file;
 
        switch (cmd)
@@ -102,31 +100,30 @@
        case X509_L_FILE_LOAD:
                if (argl == X509_FILETYPE_DEFAULT)
                        {
-                       ok=X509_load_cert_file(ctx,X509_get_default_cert_file(),
-                               X509_FILETYPE_PEM);
-                       ok2=X509_load_crl_file(ctx,X509_get_default_cert_file(),
-                               X509_FILETYPE_PEM);
-                       if (!ok || !ok2)
+                       ok = (X509_load_cert_crl_file(ctx,X509_get_default_cert_file(),
+                               X509_FILETYPE_PEM) != 0);
+                       if (!ok)
                                {
                                X509err(X509_F_BY_FILE_CTRL,X509_R_LOADING_DEFAULTS);
                                }
                        else
                                {
                                file=(char *)Getenv(X509_get_default_cert_file_env());
-                               ok=X509_load_cert_file(ctx,file,
-                                       X509_FILETYPE_PEM);
-                               ok2=X509_load_crl_file(ctx,file,
-                                       X509_FILETYPE_PEM);
+                               ok = (X509_load_cert_crl_file(ctx,file,
+                                       X509_FILETYPE_PEM) != 0);
                                }
                        }
                else
                        {
-                       ok=X509_load_cert_file(ctx,argp,(int)argl);
-                       ok2=X509_load_crl_file(ctx,argp,(int)argl);
+                       if(argl == X509_FILETYPE_PEM)
+                               ok = (X509_load_cert_crl_file(ctx,argp,
+                                       X509_FILETYPE_PEM) != 0);
+                       else
+                               ok = (X509_load_cert_file(ctx,argp,(int)argl) != 0);
                        }
                break;
                }
-       return((ok && ok2)?ok:0);
+       return(ok);
        }
 
 int X509_load_cert_file(X509_LOOKUP *ctx, const char *file, int type)
@@ -149,7 +146,7 @@
                {
                for (;;)
                        {
-                       x=PEM_read_bio_X509(in,NULL,NULL,NULL);
+                       x=PEM_read_bio_X509_AUX(in,NULL,NULL,NULL);
                        if (x == NULL)
                                {
                                if ((ERR_GET_REASON(ERR_peek_error()) ==
@@ -262,6 +259,40 @@
        if (in != NULL) BIO_free(in);
        return(ret);
        }
+
+int X509_load_cert_crl_file(X509_LOOKUP *ctx, const char *file, int type)
+{
+       STACK_OF(X509_INFO) *inf;
+       X509_INFO *itmp;
+       BIO *in;
+       int i, count = 0;
+       if(type != X509_FILETYPE_PEM)
+               return X509_load_cert_file(ctx, file, type);
+       in = BIO_new_file(file, "r");
+       if(!in) {
+               X509err(X509_F_X509_LOAD_CERT_CRL_FILE,ERR_R_SYS_LIB);
+               return 0;
+       }
+       inf = PEM_X509_INFO_read_bio(in, NULL, NULL, NULL);
+       BIO_free(in);
+       if(!inf) {
+               X509err(X509_F_X509_LOAD_CERT_CRL_FILE,ERR_R_PEM_LIB);
+               return 0;
+       }
+       for(i = 0; i < sk_X509_INFO_num(inf); i++) {
+               itmp = sk_X509_INFO_value(inf, i);
+               if(itmp->x509) {
+                       X509_STORE_add_cert(ctx->store_ctx, itmp->x509);
+                       count++;
+               } else if(itmp->crl) {
+                       X509_STORE_add_crl(ctx->store_ctx, itmp->crl);
+                       count++;
+               }
+       }
+       sk_X509_INFO_pop_free(inf, X509_INFO_free);
+       return count;
+}
+
 
 #endif /* NO_STDIO */
 
Index: opensa/openssl/crypto/x509/makefile.ssl
diff -u opensa/openssl/crypto/x509/makefile.ssl:1.1 
opensa/openssl/crypto/x509/makefile.ssl:1.2
--- opensa/openssl/crypto/x509/makefile.ssl:1.1 Tue Jan 25 23:21:09 2000
+++ opensa/openssl/crypto/x509/makefile.ssl     Thu Mar  2 21:12:02 2000
@@ -23,17 +23,17 @@
 
 LIB=$(TOP)/libcrypto.a
 LIBSRC=        x509_def.c x509_d2.c x509_r2x.c x509_cmp.c \
-       x509_obj.c x509_req.c x509_vfy.c \
+       x509_obj.c x509_req.c x509spki.c x509_vfy.c \
        x509_set.c x509rset.c x509_err.c \
-       x509name.c x509_v3.c x509_ext.c \
+       x509name.c x509_v3.c x509_ext.c x509_att.c \
        x509type.c x509_lu.c x_all.c x509_txt.c \
-       by_file.c by_dir.c 
+       x509_trs.c by_file.c by_dir.c 
 LIBOBJ= x509_def.o x509_d2.o x509_r2x.o x509_cmp.o \
-       x509_obj.o x509_req.o x509_vfy.o \
+       x509_obj.o x509_req.o x509spki.o x509_vfy.o \
        x509_set.o x509rset.o x509_err.o \
-       x509name.o x509_v3.o x509_ext.o \
+       x509name.o x509_v3.o x509_ext.o x509_att.o \
        x509type.o x509_lu.o x_all.o x509_txt.o \
-       by_file.o by_dir.o
+       x509_trs.o by_file.o by_dir.o
 
 SRC= $(LIBSRC)
 
@@ -123,14 +123,33 @@
 by_file.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
 by_file.o: ../../include/openssl/stack.h ../../include/openssl/x509.h
 by_file.o: ../../include/openssl/x509_vfy.h ../cryptlib.h
+x509_att.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
+x509_att.o: ../../include/openssl/blowfish.h ../../include/openssl/bn.h
+x509_att.o: ../../include/openssl/buffer.h ../../include/openssl/cast.h
+x509_att.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
+x509_att.o: ../../include/openssl/des.h ../../include/openssl/dh.h
+x509_att.o: ../../include/openssl/dsa.h ../../include/openssl/e_os.h
+x509_att.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
+x509_att.o: ../../include/openssl/evp.h ../../include/openssl/idea.h
+x509_att.o: ../../include/openssl/lhash.h ../../include/openssl/md2.h
+x509_att.o: ../../include/openssl/md5.h ../../include/openssl/mdc2.h
+x509_att.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
+x509_att.o: ../../include/openssl/opensslv.h ../../include/openssl/pkcs7.h
+x509_att.o: ../../include/openssl/rc2.h ../../include/openssl/rc4.h
+x509_att.o: ../../include/openssl/rc5.h ../../include/openssl/ripemd.h
+x509_att.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
+x509_att.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
+x509_att.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
+x509_att.o: ../../include/openssl/x509v3.h ../cryptlib.h
 x509_cmp.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
 x509_cmp.o: ../../include/openssl/blowfish.h ../../include/openssl/bn.h
 x509_cmp.o: ../../include/openssl/buffer.h ../../include/openssl/cast.h
-x509_cmp.o: ../../include/openssl/crypto.h ../../include/openssl/des.h
-x509_cmp.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h
-x509_cmp.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h
-x509_cmp.o: ../../include/openssl/err.h ../../include/openssl/evp.h
-x509_cmp.o: ../../include/openssl/idea.h ../../include/openssl/md2.h
+x509_cmp.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
+x509_cmp.o: ../../include/openssl/des.h ../../include/openssl/dh.h
+x509_cmp.o: ../../include/openssl/dsa.h ../../include/openssl/e_os.h
+x509_cmp.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
+x509_cmp.o: ../../include/openssl/evp.h ../../include/openssl/idea.h
+x509_cmp.o: ../../include/openssl/lhash.h ../../include/openssl/md2.h
 x509_cmp.o: ../../include/openssl/md5.h ../../include/openssl/mdc2.h
 x509_cmp.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 x509_cmp.o: ../../include/openssl/opensslv.h ../../include/openssl/pkcs7.h
@@ -139,7 +158,7 @@
 x509_cmp.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
 x509_cmp.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 x509_cmp.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
-x509_cmp.o: ../cryptlib.h
+x509_cmp.o: ../../include/openssl/x509v3.h ../cryptlib.h
 x509_d2.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
 x509_d2.o: ../../include/openssl/blowfish.h ../../include/openssl/bn.h
 x509_d2.o: ../../include/openssl/buffer.h ../../include/openssl/cast.h
@@ -192,11 +211,12 @@
 x509_ext.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
 x509_ext.o: ../../include/openssl/blowfish.h ../../include/openssl/bn.h
 x509_ext.o: ../../include/openssl/buffer.h ../../include/openssl/cast.h
-x509_ext.o: ../../include/openssl/crypto.h ../../include/openssl/des.h
-x509_ext.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h
-x509_ext.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h
-x509_ext.o: ../../include/openssl/err.h ../../include/openssl/evp.h
-x509_ext.o: ../../include/openssl/idea.h ../../include/openssl/md2.h
+x509_ext.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
+x509_ext.o: ../../include/openssl/des.h ../../include/openssl/dh.h
+x509_ext.o: ../../include/openssl/dsa.h ../../include/openssl/e_os.h
+x509_ext.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
+x509_ext.o: ../../include/openssl/evp.h ../../include/openssl/idea.h
+x509_ext.o: ../../include/openssl/lhash.h ../../include/openssl/md2.h
 x509_ext.o: ../../include/openssl/md5.h ../../include/openssl/mdc2.h
 x509_ext.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 x509_ext.o: ../../include/openssl/opensslv.h ../../include/openssl/pkcs7.h
@@ -205,7 +225,7 @@
 x509_ext.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
 x509_ext.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 x509_ext.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
-x509_ext.o: ../cryptlib.h
+x509_ext.o: ../../include/openssl/x509v3.h ../cryptlib.h
 x509_lu.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
 x509_lu.o: ../../include/openssl/blowfish.h ../../include/openssl/bn.h
 x509_lu.o: ../../include/openssl/buffer.h ../../include/openssl/cast.h
@@ -293,6 +313,24 @@
 x509_set.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 x509_set.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
 x509_set.o: ../cryptlib.h
+x509_trs.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
+x509_trs.o: ../../include/openssl/blowfish.h ../../include/openssl/bn.h
+x509_trs.o: ../../include/openssl/buffer.h ../../include/openssl/cast.h
+x509_trs.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
+x509_trs.o: ../../include/openssl/des.h ../../include/openssl/dh.h
+x509_trs.o: ../../include/openssl/dsa.h ../../include/openssl/e_os.h
+x509_trs.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
+x509_trs.o: ../../include/openssl/evp.h ../../include/openssl/idea.h
+x509_trs.o: ../../include/openssl/lhash.h ../../include/openssl/md2.h
+x509_trs.o: ../../include/openssl/md5.h ../../include/openssl/mdc2.h
+x509_trs.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
+x509_trs.o: ../../include/openssl/opensslv.h ../../include/openssl/pkcs7.h
+x509_trs.o: ../../include/openssl/rc2.h ../../include/openssl/rc4.h
+x509_trs.o: ../../include/openssl/rc5.h ../../include/openssl/ripemd.h
+x509_trs.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
+x509_trs.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
+x509_trs.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
+x509_trs.o: ../../include/openssl/x509v3.h ../cryptlib.h
 x509_txt.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
 x509_txt.o: ../../include/openssl/blowfish.h ../../include/openssl/bn.h
 x509_txt.o: ../../include/openssl/buffer.h ../../include/openssl/cast.h
@@ -314,11 +352,12 @@
 x509_v3.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
 x509_v3.o: ../../include/openssl/blowfish.h ../../include/openssl/bn.h
 x509_v3.o: ../../include/openssl/buffer.h ../../include/openssl/cast.h
-x509_v3.o: ../../include/openssl/crypto.h ../../include/openssl/des.h
-x509_v3.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h
-x509_v3.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h
-x509_v3.o: ../../include/openssl/err.h ../../include/openssl/evp.h
-x509_v3.o: ../../include/openssl/idea.h ../../include/openssl/md2.h
+x509_v3.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
+x509_v3.o: ../../include/openssl/des.h ../../include/openssl/dh.h
+x509_v3.o: ../../include/openssl/dsa.h ../../include/openssl/e_os.h
+x509_v3.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
+x509_v3.o: ../../include/openssl/evp.h ../../include/openssl/idea.h
+x509_v3.o: ../../include/openssl/lhash.h ../../include/openssl/md2.h
 x509_v3.o: ../../include/openssl/md5.h ../../include/openssl/mdc2.h
 x509_v3.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 x509_v3.o: ../../include/openssl/opensslv.h ../../include/openssl/pkcs7.h
@@ -327,25 +366,25 @@
 x509_v3.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
 x509_v3.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 x509_v3.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
-x509_v3.o: ../cryptlib.h
+x509_v3.o: ../../include/openssl/x509v3.h ../cryptlib.h
 x509_vfy.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
 x509_vfy.o: ../../include/openssl/blowfish.h ../../include/openssl/bn.h
 x509_vfy.o: ../../include/openssl/buffer.h ../../include/openssl/cast.h
-x509_vfy.o: ../../include/openssl/crypto.h ../../include/openssl/des.h
-x509_vfy.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h
-x509_vfy.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h
-x509_vfy.o: ../../include/openssl/err.h ../../include/openssl/evp.h
-x509_vfy.o: ../../include/openssl/idea.h ../../include/openssl/lhash.h
-x509_vfy.o: ../../include/openssl/md2.h ../../include/openssl/md5.h
-x509_vfy.o: ../../include/openssl/mdc2.h ../../include/openssl/objects.h
-x509_vfy.o: ../../include/openssl/opensslconf.h
+x509_vfy.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
+x509_vfy.o: ../../include/openssl/des.h ../../include/openssl/dh.h
+x509_vfy.o: ../../include/openssl/dsa.h ../../include/openssl/e_os.h
+x509_vfy.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
+x509_vfy.o: ../../include/openssl/evp.h ../../include/openssl/idea.h
+x509_vfy.o: ../../include/openssl/lhash.h ../../include/openssl/md2.h
+x509_vfy.o: ../../include/openssl/md5.h ../../include/openssl/mdc2.h
+x509_vfy.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 x509_vfy.o: ../../include/openssl/opensslv.h ../../include/openssl/pkcs7.h
 x509_vfy.o: ../../include/openssl/rc2.h ../../include/openssl/rc4.h
 x509_vfy.o: ../../include/openssl/rc5.h ../../include/openssl/ripemd.h
 x509_vfy.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
 x509_vfy.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 x509_vfy.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
-x509_vfy.o: ../cryptlib.h
+x509_vfy.o: ../../include/openssl/x509v3.h ../cryptlib.h
 x509name.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
 x509name.o: ../../include/openssl/blowfish.h ../../include/openssl/bn.h
 x509name.o: ../../include/openssl/buffer.h ../../include/openssl/cast.h
@@ -380,6 +419,24 @@
 x509rset.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 x509rset.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
 x509rset.o: ../cryptlib.h
+x509spki.o: ../../include/openssl/asn1.h ../../include/openssl/asn1_mac.h
+x509spki.o: ../../include/openssl/bio.h ../../include/openssl/blowfish.h
+x509spki.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
+x509spki.o: ../../include/openssl/cast.h ../../include/openssl/crypto.h
+x509spki.o: ../../include/openssl/des.h ../../include/openssl/dh.h
+x509spki.o: ../../include/openssl/dsa.h ../../include/openssl/e_os.h
+x509spki.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
+x509spki.o: ../../include/openssl/evp.h ../../include/openssl/idea.h
+x509spki.o: ../../include/openssl/md2.h ../../include/openssl/md5.h
+x509spki.o: ../../include/openssl/mdc2.h ../../include/openssl/objects.h
+x509spki.o: ../../include/openssl/opensslconf.h
+x509spki.o: ../../include/openssl/opensslv.h ../../include/openssl/pkcs7.h
+x509spki.o: ../../include/openssl/rc2.h ../../include/openssl/rc4.h
+x509spki.o: ../../include/openssl/rc5.h ../../include/openssl/ripemd.h
+x509spki.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
+x509spki.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
+x509spki.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
+x509spki.o: ../cryptlib.h
 x509type.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
 x509type.o: ../../include/openssl/blowfish.h ../../include/openssl/bn.h
 x509type.o: ../../include/openssl/buffer.h ../../include/openssl/cast.h
Index: opensa/openssl/crypto/x509/x509.h
diff -u opensa/openssl/crypto/x509/x509.h:1.1 opensa/openssl/crypto/x509/x509.h:1.2
--- opensa/openssl/crypto/x509/x509.h:1.1       Tue Jan 25 23:21:09 2000
+++ opensa/openssl/crypto/x509/x509.h   Thu Mar  2 21:12:02 2000
@@ -176,9 +176,8 @@
        short critical;
        short netscape_hack;
        ASN1_OCTET_STRING *value;
-       long argl;                      /* used when decoding */
-       char *argp;                     /* used when decoding */
-       void (*ex_free)();              /* clear argp stuff */
+       struct v3_ext_method *method;   /* V3 method to use */
+       void *ext_val;                  /* extension value */
        } X509_EXTENSION;
 
 DECLARE_STACK_OF(X509_EXTENSION)
@@ -231,6 +230,21 @@
        STACK_OF(X509_EXTENSION) *extensions;   /* [ 3 ] optional in v3 */
        } X509_CINF;
 
+/* This stuff is certificate "auxiliary info"
+ * it contains details which are useful in certificate
+ * stores and databases. When used this is tagged onto
+ * the end of the certificate itself
+ */
+
+typedef struct x509_cert_aux_st
+       {
+       STACK_OF(ASN1_OBJECT) *trust;           /* trusted uses */
+       STACK_OF(ASN1_OBJECT) *reject;          /* rejected uses */
+       ASN1_UTF8STRING *alias;                 /* "friendly name" */
+       ASN1_OCTET_STRING *keyid;               /* key id of private key */
+       STACK_OF(X509_ALGOR) *other;            /* other unspecified info */
+       } X509_CERT_AUX;
+
 typedef struct x509_st
        {
        X509_CINF *cert_info;
@@ -239,11 +253,58 @@
        int valid;
        int references;
        char *name;
+       CRYPTO_EX_DATA ex_data;
+       /* These contain copies of various extension values */
+       long ex_pathlen;
+       unsigned long ex_flags;
+       unsigned long ex_kusage;
+       unsigned long ex_xkusage;
+       unsigned long ex_nscert;
+#ifndef NO_SHA
+       unsigned char sha1_hash[SHA_DIGEST_LENGTH];
+#endif
+       X509_CERT_AUX *aux;
        } X509;
 
 DECLARE_STACK_OF(X509)
 DECLARE_ASN1_SET_OF(X509)
 
+/* This is used for a table of trust checking functions */
+
+typedef struct x509_trust_st {
+       int trust;
+       int flags;
+       int (*check_trust)(struct x509_trust_st *, X509 *, int);
+       char *name;
+       int arg1;
+       void *arg2;
+} X509_TRUST;
+
+DECLARE_STACK_OF(X509_TRUST)
+
+/* standard trust ids */
+
+#define X509_TRUST_ANY         1
+#define X509_TRUST_SSL_CLIENT  2
+#define X509_TRUST_SSL_SERVER  3
+#define X509_TRUST_EMAIL       4
+#define X509_TRUST_OBJECT_SIGN 5
+
+/* Keep these up to date! */
+#define X509_TRUST_MIN         1
+#define X509_TRUST_MAX         5
+
+
+/* trust_flags values */
+#define        X509_TRUST_DYNAMIC      1
+#define        X509_TRUST_DYNAMIC_NAME 2
+
+/* check_trust return codes */
+
+#define X509_TRUST_TRUSTED     1
+#define X509_TRUST_REJECTED    2
+#define X509_TRUST_UNTRUSTED   3
+
 typedef struct X509_revoked_st
        {
        ASN1_INTEGER *serialNumber;
@@ -318,7 +379,7 @@
 
 /* The next 2 structures and their 8 routines were sent to me by
  * Pat Richard <[EMAIL PROTECTED]> and are used to manipulate
- * Netscapes spki strucutres - usefull if you are writing a CA web page
+ * Netscapes spki structures - useful if you are writing a CA web page
  */
 typedef struct Netscape_spkac_st
        {
@@ -372,8 +433,10 @@
 typedef struct pkcs8_priv_key_info_st
         {
         int broken;     /* Flag for various broken formats */
-#define PKCS8_OK        0
-#define PKCS8_NO_OCTET  1
+#define PKCS8_OK               0
+#define PKCS8_NO_OCTET         1
+#define PKCS8_EMBEDDED_PARAM   2
+#define PKCS8_NS_DB            3
         ASN1_INTEGER *version;
         X509_ALGOR *pkeyalg;
         ASN1_TYPE *pkey; /* Should be OCTET STRING but some are broken */
@@ -552,13 +615,20 @@
 int X509_CRL_verify(X509_CRL *a, EVP_PKEY *r);
 int NETSCAPE_SPKI_verify(NETSCAPE_SPKI *a, EVP_PKEY *r);
 
+NETSCAPE_SPKI * NETSCAPE_SPKI_b64_decode(const char *str, int len);
+char * NETSCAPE_SPKI_b64_encode(NETSCAPE_SPKI *x);
+EVP_PKEY *NETSCAPE_SPKI_get_pubkey(NETSCAPE_SPKI *x);
+int NETSCAPE_SPKI_set_pubkey(NETSCAPE_SPKI *x, EVP_PKEY *pkey);
+
+int NETSCAPE_SPKI_print(BIO *out, NETSCAPE_SPKI *spki);
+
 int X509_sign(X509 *x, EVP_PKEY *pkey, const EVP_MD *md);
 int X509_REQ_sign(X509_REQ *x, EVP_PKEY *pkey, const EVP_MD *md);
 int X509_CRL_sign(X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md);
 int NETSCAPE_SPKI_sign(NETSCAPE_SPKI *x, EVP_PKEY *pkey, const EVP_MD *md);
 
-int X509_digest(X509 *data,EVP_MD *type,unsigned char *md,unsigned int *len);
-int X509_NAME_digest(X509_NAME *data,EVP_MD *type,
+int X509_digest(X509 *data,const EVP_MD *type,unsigned char *md,unsigned int *len);
+int X509_NAME_digest(X509_NAME *data,const EVP_MD *type,
        unsigned char *md,unsigned int *len);
 #endif
 
@@ -574,16 +644,23 @@
 int i2d_RSAPrivateKey_fp(FILE *fp,RSA *rsa);
 RSA *d2i_RSAPublicKey_fp(FILE *fp,RSA **rsa);
 int i2d_RSAPublicKey_fp(FILE *fp,RSA *rsa);
+RSA *d2i_RSA_PUBKEY_fp(FILE *fp,RSA **rsa);
+int i2d_RSA_PUBKEY_fp(FILE *fp,RSA *rsa);
 #endif
 #ifndef NO_DSA
+DSA *d2i_DSA_PUBKEY_fp(FILE *fp, DSA **dsa);
+int i2d_DSA_PUBKEY_fp(FILE *fp, DSA *dsa);
 DSA *d2i_DSAPrivateKey_fp(FILE *fp, DSA **dsa);
 int i2d_DSAPrivateKey_fp(FILE *fp, DSA *dsa);
+#endif
 X509_SIG *d2i_PKCS8_fp(FILE *fp,X509_SIG **p8);
 int i2d_PKCS8_fp(FILE *fp,X509_SIG *p8);
 PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_fp(FILE *fp,
                                                PKCS8_PRIV_KEY_INFO **p8inf);
 int i2d_PKCS8_PRIV_KEY_INFO_fp(FILE *fp,PKCS8_PRIV_KEY_INFO *p8inf);
-#endif
+int i2d_PKCS8PrivateKeyInfo_fp(FILE *fp, EVP_PKEY *key);
+int i2d_PrivateKey_fp(FILE *fp, EVP_PKEY *pkey);
+EVP_PKEY *d2i_PrivateKey_fp(FILE *fp, EVP_PKEY **a);
 #endif
 
 #ifdef HEADER_BIO_H
@@ -598,8 +675,12 @@
 int i2d_RSAPrivateKey_bio(BIO *bp,RSA *rsa);
 RSA *d2i_RSAPublicKey_bio(BIO *bp,RSA **rsa);
 int i2d_RSAPublicKey_bio(BIO *bp,RSA *rsa);
+RSA *d2i_RSA_PUBKEY_bio(BIO *bp,RSA **rsa);
+int i2d_RSA_PUBKEY_bio(BIO *bp,RSA *rsa);
 #endif
 #ifndef NO_DSA
+DSA *d2i_DSA_PUBKEY_bio(BIO *bp, DSA **dsa);
+int i2d_DSA_PUBKEY_bio(BIO *bp, DSA *dsa);
 DSA *d2i_DSAPrivateKey_bio(BIO *bp, DSA **dsa);
 int i2d_DSAPrivateKey_bio(BIO *bp, DSA *dsa);
 #endif
@@ -608,6 +689,9 @@
 PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_bio(BIO *bp,
                                                PKCS8_PRIV_KEY_INFO **p8inf);
 int i2d_PKCS8_PRIV_KEY_INFO_bio(BIO *bp,PKCS8_PRIV_KEY_INFO *p8inf);
+int i2d_PKCS8PrivateKeyInfo_bio(BIO *bp, EVP_PKEY *key);
+int i2d_PrivateKey_bio(BIO *bp, EVP_PKEY *pkey);
+EVP_PKEY *d2i_PrivateKey_bio(BIO *bp, EVP_PKEY **a);
 #endif
 
 X509 *X509_dup(X509 *x509);
@@ -635,7 +719,7 @@
 const char *   X509_get_default_cert_file_env(void );
 const char *   X509_get_default_private_dir(void );
 
-X509_REQ *     X509_to_X509_REQ(X509 *x, EVP_PKEY *pkey, EVP_MD *md);
+X509_REQ *     X509_to_X509_REQ(X509 *x, EVP_PKEY *pkey, const EVP_MD *md);
 X509 *         X509_REQ_to_X509(X509_REQ *r, int days,EVP_PKEY *pkey);
 void ERR_load_X509_strings(void );
 
@@ -660,7 +744,19 @@
 EVP_PKEY *     X509_PUBKEY_get(X509_PUBKEY *key);
 int            X509_get_pubkey_parameters(EVP_PKEY *pkey,
                                           STACK_OF(X509) *chain);
-
+int            i2d_PUBKEY(EVP_PKEY *a,unsigned char **pp);
+EVP_PKEY *     d2i_PUBKEY(EVP_PKEY **a,unsigned char **pp,
+                       long length);
+#ifndef NO_RSA
+int            i2d_RSA_PUBKEY(RSA *a,unsigned char **pp);
+RSA *          d2i_RSA_PUBKEY(RSA **a,unsigned char **pp,
+                       long length);
+#endif
+#ifndef NO_DSA
+int            i2d_DSA_PUBKEY(DSA *a,unsigned char **pp);
+DSA *          d2i_DSA_PUBKEY(DSA **a,unsigned char **pp,
+                       long length);
+#endif
 
 X509_SIG *     X509_SIG_new(void );
 void           X509_SIG_free(X509_SIG *a);
@@ -714,6 +810,25 @@
 void           X509_free(X509 *a);
 int            i2d_X509(X509 *a,unsigned char **pp);
 X509 *         d2i_X509(X509 **a,unsigned char **pp,long length);
+int X509_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
+            CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func);
+int X509_set_ex_data(X509 *r, int idx, void *arg);
+void *X509_get_ex_data(X509 *r, int idx);
+int            i2d_X509_AUX(X509 *a,unsigned char **pp);
+X509 *         d2i_X509_AUX(X509 **a,unsigned char **pp,long length);
+
+X509_CERT_AUX *        X509_CERT_AUX_new(void);
+void           X509_CERT_AUX_free(X509_CERT_AUX *a);
+int            i2d_X509_CERT_AUX(X509_CERT_AUX *a,unsigned char **pp);
+X509_CERT_AUX *        d2i_X509_CERT_AUX(X509_CERT_AUX **a,unsigned char **pp,
+                                                               long length);
+int X509_alias_set1(X509 *x, unsigned char *name, int len);
+unsigned char * X509_alias_get0(X509 *x, int *len);
+int (*X509_TRUST_set_default(int (*trust)(int , X509 *, int)))(int, X509 *, int);
+int X509_add1_trust_object(X509 *x, ASN1_OBJECT *obj);
+int X509_add1_reject_object(X509 *x, ASN1_OBJECT *obj);
+void X509_trust_clear(X509 *x);
+void X509_reject_clear(X509 *x);
 
 X509_REVOKED * X509_REVOKED_new(void);
 void           X509_REVOKED_free(X509_REVOKED *a);
@@ -762,7 +877,7 @@
 int ASN1_verify(int (*i2d)(), X509_ALGOR *algor1,
        ASN1_BIT_STRING *signature,char *data,EVP_PKEY *pkey);
 
-int ASN1_digest(int (*i2d)(),EVP_MD *type,char *data,
+int ASN1_digest(int (*i2d)(),const EVP_MD *type,char *data,
        unsigned char *md,unsigned int *len);
 
 int ASN1_sign(int (*i2d)(), X509_ALGOR *algor1, X509_ALGOR *algor2,
@@ -787,6 +902,30 @@
 int            X509_REQ_set_subject_name(X509_REQ *req,X509_NAME *name);
 int            X509_REQ_set_pubkey(X509_REQ *x, EVP_PKEY *pkey);
 EVP_PKEY *     X509_REQ_get_pubkey(X509_REQ *req);
+int            X509_REQ_extension_nid(int nid);
+int *          X509_REQ_get_extension_nids(void);
+void           X509_REQ_set_extension_nids(int *nids);
+STACK_OF(X509_EXTENSION) *X509_REQ_get_extensions(X509_REQ *req);
+int X509_REQ_add_extensions_nid(X509_REQ *req, STACK_OF(X509_EXTENSION) *exts,
+                               int nid);
+int X509_REQ_add_extensions(X509_REQ *req, STACK_OF(X509_EXTENSION) *exts);
+int X509_REQ_get_attr_count(const X509_REQ *req);
+int X509_REQ_get_attr_by_NID(const X509_REQ *req, int nid,
+                         int lastpos);
+int X509_REQ_get_attr_by_OBJ(const X509_REQ *req, ASN1_OBJECT *obj,
+                         int lastpos);
+X509_ATTRIBUTE *X509_REQ_get_attr(const X509_REQ *req, int loc);
+X509_ATTRIBUTE *X509_REQ_delete_attr(X509_REQ *req, int loc);
+int X509_REQ_add1_attr(X509_REQ *req, X509_ATTRIBUTE *attr);
+int X509_REQ_add1_attr_by_OBJ(X509_REQ *req,
+                       ASN1_OBJECT *obj, int type,
+                       unsigned char *bytes, int len);
+int X509_REQ_add1_attr_by_NID(X509_REQ *req,
+                       int nid, int type,
+                       unsigned char *bytes, int len);
+int X509_REQ_add1_attr_by_txt(X509_REQ *req,
+                       char *attrname, int type,
+                       unsigned char *bytes, int len);
 
 int            X509_check_private_key(X509 *x509,EVP_PKEY *pkey);
 
@@ -799,6 +938,7 @@
 int            X509_subject_name_cmp(X509 *a,X509 *b);
 unsigned long  X509_subject_name_hash(X509 *x);
 
+int            X509_cmp (X509 *a, X509 *b);
 int            X509_NAME_cmp (X509_NAME *a, X509_NAME *b);
 unsigned long  X509_NAME_hash(X509_NAME *x);
 
@@ -812,6 +952,7 @@
 #ifdef HEADER_BIO_H
 int            X509_NAME_print(BIO *bp, X509_NAME *name, int obase);
 int            X509_print(BIO *bp,X509 *x);
+int            X509_CERT_AUX_print(BIO *bp,X509_CERT_AUX *x, int indent);
 int            X509_CRL_print(BIO *bp,X509_CRL *x);
 int            X509_REQ_print(BIO *bp,X509_REQ *req);
 #endif
@@ -823,7 +964,7 @@
                        char *buf,int len);
 
 /* NOTE: you should be passsing -1, not 0 as lastpos.  The functions that use
- * lastpos, seach after that position on. */
+ * lastpos, search after that position on. */
 int            X509_NAME_get_index_by_NID(X509_NAME *name,int nid,int lastpos);
 int            X509_NAME_get_index_by_OBJ(X509_NAME *name,ASN1_OBJECT *obj,
                        int lastpos);
@@ -831,8 +972,16 @@
 X509_NAME_ENTRY *X509_NAME_delete_entry(X509_NAME *name, int loc);
 int            X509_NAME_add_entry(X509_NAME *name,X509_NAME_ENTRY *ne,
                        int loc, int set);
+int X509_NAME_add_entry_by_OBJ(X509_NAME *name, ASN1_OBJECT *obj, int type,
+                       unsigned char *bytes, int len, int loc, int set);
+int X509_NAME_add_entry_by_NID(X509_NAME *name, int nid, int type,
+                       unsigned char *bytes, int len, int loc, int set);
+X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_txt(X509_NAME_ENTRY **ne,
+               char *field, int type, unsigned char *bytes, int len);
 X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_NID(X509_NAME_ENTRY **ne, int nid,
                        int type,unsigned char *bytes, int len);
+int X509_NAME_add_entry_by_txt(X509_NAME *name, char *field, int type,
+                       unsigned char *bytes, int len, int loc, int set);
 X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_OBJ(X509_NAME_ENTRY **ne,
                        ASN1_OBJECT *obj, int type,unsigned char *bytes,
                        int len);
@@ -862,6 +1011,7 @@
 X509_EXTENSION *X509_get_ext(X509 *x, int loc);
 X509_EXTENSION *X509_delete_ext(X509 *x, int loc);
 int            X509_add_ext(X509 *x, X509_EXTENSION *ex, int loc);
+void   *       X509_get_ext_d2i(X509 *x, int nid, int *crit, int *idx);
 
 int            X509_CRL_get_ext_count(X509_CRL *x);
 int            X509_CRL_get_ext_by_NID(X509_CRL *x, int nid, int lastpos);
@@ -870,6 +1020,7 @@
 X509_EXTENSION *X509_CRL_get_ext(X509_CRL *x, int loc);
 X509_EXTENSION *X509_CRL_delete_ext(X509_CRL *x, int loc);
 int            X509_CRL_add_ext(X509_CRL *x, X509_EXTENSION *ex, int loc);
+void   *       X509_CRL_get_ext_d2i(X509_CRL *x, int nid, int *crit, int *idx);
 
 int            X509_REVOKED_get_ext_count(X509_REVOKED *x);
 int            X509_REVOKED_get_ext_by_NID(X509_REVOKED *x, int nid, int lastpos);
@@ -878,6 +1029,7 @@
 X509_EXTENSION *X509_REVOKED_get_ext(X509_REVOKED *x, int loc);
 X509_EXTENSION *X509_REVOKED_delete_ext(X509_REVOKED *x, int loc);
 int            X509_REVOKED_add_ext(X509_REVOKED *x, X509_EXTENSION *ex, int loc);
+void   *       X509_REVOKED_get_ext_d2i(X509_REVOKED *x, int nid, int *crit, int 
+*idx);
 
 X509_EXTENSION *X509_EXTENSION_create_by_NID(X509_EXTENSION **ex,
                        int nid, int crit, ASN1_OCTET_STRING *data);
@@ -891,6 +1043,38 @@
 ASN1_OCTET_STRING *X509_EXTENSION_get_data(X509_EXTENSION *ne);
 int            X509_EXTENSION_get_critical(X509_EXTENSION *ex);
 
+int X509at_get_attr_count(const STACK_OF(X509_ATTRIBUTE) *x);
+int X509at_get_attr_by_NID(const STACK_OF(X509_ATTRIBUTE) *x, int nid,
+                         int lastpos);
+int X509at_get_attr_by_OBJ(const STACK_OF(X509_ATTRIBUTE) *sk, ASN1_OBJECT *obj,
+                         int lastpos);
+X509_ATTRIBUTE *X509at_get_attr(const STACK_OF(X509_ATTRIBUTE) *x, int loc);
+X509_ATTRIBUTE *X509at_delete_attr(STACK_OF(X509_ATTRIBUTE) *x, int loc);
+STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr(STACK_OF(X509_ATTRIBUTE) **x,
+                                        X509_ATTRIBUTE *attr);
+STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_OBJ(STACK_OF(X509_ATTRIBUTE) **x,
+                       ASN1_OBJECT *obj, int type,
+                       unsigned char *bytes, int len);
+STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_NID(STACK_OF(X509_ATTRIBUTE) **x,
+                       int nid, int type,
+                       unsigned char *bytes, int len);
+STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_txt(STACK_OF(X509_ATTRIBUTE) **x,
+                       char *attrname, int type,
+                       unsigned char *bytes, int len);
+X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_NID(X509_ATTRIBUTE **attr, int nid,
+            int atrtype, void *data, int len);
+X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_OBJ(X509_ATTRIBUTE **attr,
+            ASN1_OBJECT *obj, int atrtype, void *data, int len);
+X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_txt(X509_ATTRIBUTE **attr,
+               char *atrname, int type, unsigned char *bytes, int len);
+int X509_ATTRIBUTE_set1_object(X509_ATTRIBUTE *attr, ASN1_OBJECT *obj);
+int X509_ATTRIBUTE_set1_data(X509_ATTRIBUTE *attr, int attrtype, void *data, int len);
+void *X509_ATTRIBUTE_get0_data(X509_ATTRIBUTE *attr, int idx,
+                                       int atrtype, void *data);
+int X509_ATTRIBUTE_count(X509_ATTRIBUTE *attr);
+ASN1_OBJECT *X509_ATTRIBUTE_get0_object(X509_ATTRIBUTE *attr);
+ASN1_TYPE *X509_ATTRIBUTE_get0_type(X509_ATTRIBUTE *attr, int idx);
+
 int            X509_verify_cert(X509_STORE_CTX *ctx);
 
 /* lookup a cert from a X509 STACK */
@@ -926,8 +1110,20 @@
 
 EVP_PKEY *EVP_PKCS82PKEY(PKCS8_PRIV_KEY_INFO *p8);
 PKCS8_PRIV_KEY_INFO *EVP_PKEY2PKCS8(EVP_PKEY *pkey);
+PKCS8_PRIV_KEY_INFO *EVP_PKEY2PKCS8_broken(EVP_PKEY *pkey, int broken);
 PKCS8_PRIV_KEY_INFO *PKCS8_set_broken(PKCS8_PRIV_KEY_INFO *p8, int broken);
 
+int X509_check_trust(X509 *x, int id, int flags);
+int X509_TRUST_get_count(void);
+X509_TRUST * X509_TRUST_get0(int idx);
+int X509_TRUST_get_by_id(int id);
+int X509_TRUST_add(int id, int flags, int (*ck)(X509_TRUST *, X509 *, int),
+                                       char *name, int arg1, void *arg2);
+void X509_TRUST_cleanup(void);
+int X509_TRUST_get_flags(X509_TRUST *xp);
+char *X509_TRUST_get0_name(X509_TRUST *xp);
+int X509_TRUST_get_trust(X509_TRUST *xp);
+
 /* BEGIN ERROR CODES */
 /* The following lines are auto generated by the script mkerr.pl. Any changes
  * made after this point may be overwritten when the script is next run.
@@ -940,15 +1136,25 @@
 #define X509_F_BY_FILE_CTRL                             101
 #define X509_F_DIR_CTRL                                         102
 #define X509_F_GET_CERT_BY_SUBJECT                      103
+#define X509_F_NETSCAPE_SPKI_B64_DECODE                         129
+#define X509_F_NETSCAPE_SPKI_B64_ENCODE                         130
 #define X509_F_X509V3_ADD_EXT                           104
+#define X509_F_X509_ADD_ATTR                            135
+#define X509_F_X509_ATTRIBUTE_CREATE_BY_NID             136
+#define X509_F_X509_ATTRIBUTE_CREATE_BY_OBJ             137
+#define X509_F_X509_ATTRIBUTE_CREATE_BY_TXT             140
+#define X509_F_X509_ATTRIBUTE_GET0_DATA                         139
+#define X509_F_X509_ATTRIBUTE_SET1_DATA                         138
 #define X509_F_X509_CHECK_PRIVATE_KEY                   128
 #define X509_F_X509_EXTENSION_CREATE_BY_NID             108
 #define X509_F_X509_EXTENSION_CREATE_BY_OBJ             109
 #define X509_F_X509_GET_PUBKEY_PARAMETERS               110
+#define X509_F_X509_LOAD_CERT_CRL_FILE                  132
 #define X509_F_X509_LOAD_CERT_FILE                      111
 #define X509_F_X509_LOAD_CRL_FILE                       112
 #define X509_F_X509_NAME_ADD_ENTRY                      113
 #define X509_F_X509_NAME_ENTRY_CREATE_BY_NID            114
+#define X509_F_X509_NAME_ENTRY_CREATE_BY_TXT            131
 #define X509_F_X509_NAME_ENTRY_SET_OBJECT               115
 #define X509_F_X509_NAME_ONELINE                        116
 #define X509_F_X509_NAME_PRINT                          117
@@ -960,15 +1166,19 @@
 #define X509_F_X509_REQ_TO_X509                                 123
 #define X509_F_X509_STORE_ADD_CERT                      124
 #define X509_F_X509_STORE_ADD_CRL                       125
+#define X509_F_X509_STORE_CTX_PURPOSE_INHERIT           134
 #define X509_F_X509_TO_X509_REQ                                 126
+#define X509_F_X509_TRUST_ADD                           133
 #define X509_F_X509_VERIFY_CERT                                 127
 
 /* Reason codes. */
 #define X509_R_BAD_X509_FILETYPE                        100
+#define X509_R_BASE64_DECODE_ERROR                      118
 #define X509_R_CANT_CHECK_DH_KEY                        114
 #define X509_R_CERT_ALREADY_IN_HASH_TABLE               101
 #define X509_R_ERR_ASN1_LIB                             102
 #define X509_R_INVALID_DIRECTORY                        113
+#define X509_R_INVALID_FIELD_NAME                       119
 #define X509_R_KEY_TYPE_MISMATCH                        115
 #define X509_R_KEY_VALUES_MISMATCH                      116
 #define X509_R_LOADING_CERT_DIR                                 103
@@ -979,8 +1189,11 @@
 #define X509_R_UNABLE_TO_GET_CERTS_PUBLIC_KEY           108
 #define X509_R_UNKNOWN_KEY_TYPE                                 117
 #define X509_R_UNKNOWN_NID                              109
+#define X509_R_UNKNOWN_PURPOSE_ID                       121
+#define X509_R_UNKNOWN_TRUST_ID                                 120
 #define X509_R_UNSUPPORTED_ALGORITHM                    111
 #define X509_R_WRONG_LOOKUP_TYPE                        112
+#define X509_R_WRONG_TYPE                               122
 
 #ifdef  __cplusplus
 }
Index: opensa/openssl/crypto/x509/x509_cmp.c
diff -u opensa/openssl/crypto/x509/x509_cmp.c:1.1 
opensa/openssl/crypto/x509/x509_cmp.c:1.2
--- opensa/openssl/crypto/x509/x509_cmp.c:1.1   Tue Jan 25 23:21:09 2000
+++ opensa/openssl/crypto/x509/x509_cmp.c       Thu Mar  2 21:12:02 2000
@@ -57,12 +57,11 @@
  */
 
 #include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
 #include "cryptlib.h"
 #include <openssl/asn1.h>
 #include <openssl/objects.h>
 #include <openssl/x509.h>
+#include <openssl/x509v3.h>
 
 int X509_issuer_and_serial_cmp(X509 *a, X509 *b)
        {
@@ -71,7 +70,7 @@
 
        ai=a->cert_info;
        bi=b->cert_info;
-       i=ASN1_INTEGER_cmp(ai->serialNumber,bi->serialNumber);
+       i=M_ASN1_INTEGER_cmp(ai->serialNumber,bi->serialNumber);
        if (i) return(i);
        return(X509_NAME_cmp(ai->issuer,bi->issuer));
        }
@@ -138,6 +137,20 @@
        return(X509_NAME_hash(x->cert_info->subject));
        }
 
+#ifndef NO_SHA
+/* Compare two certificates: they must be identical for
+ * this to work.
+ */
+int X509_cmp(X509 *a, X509 *b)
+{
+       /* ensure hash is valid */
+       X509_check_purpose(a, -1, 0);
+       X509_check_purpose(b, -1, 0);
+
+       return memcmp(a->sha1_hash, b->sha1_hash, SHA_DIGEST_LENGTH);
+}
+#endif
+
 int X509_NAME_cmp(X509_NAME *a, X509_NAME *b)
        {
        int i,j;
@@ -175,7 +188,7 @@
 
 #ifndef NO_MD5
 /* I now DER encode the name and hash it.  Since I cache the DER encoding,
- * this is reasonably effiecent. */
+ * this is reasonably efficient. */
 unsigned long X509_NAME_hash(X509_NAME *x)
        {
        unsigned long ret=0;
@@ -208,6 +221,8 @@
        int i;
        X509_CINF cinf;
        X509 x,*x509=NULL;
+
+       if(!sk) return NULL;
 
        x.cert_info= &cinf;
        cinf.serialNumber=serial;
Index: opensa/openssl/crypto/x509/x509_d2.c
diff -u opensa/openssl/crypto/x509/x509_d2.c:1.1 
opensa/openssl/crypto/x509/x509_d2.c:1.2
--- opensa/openssl/crypto/x509/x509_d2.c:1.1    Tue Jan 25 23:21:09 2000
+++ opensa/openssl/crypto/x509/x509_d2.c        Thu Mar  2 21:12:02 2000
@@ -57,8 +57,6 @@
  */
 
 #include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
 #include "cryptlib.h"
 #include <openssl/crypto.h>
 #include <openssl/x509.h>
@@ -91,13 +89,15 @@
                {
                lookup=X509_STORE_add_lookup(ctx,X509_LOOKUP_file());
                if (lookup == NULL) return(0);
-               X509_LOOKUP_load_file(lookup,file,X509_FILETYPE_PEM);
+               if (X509_LOOKUP_load_file(lookup,file,X509_FILETYPE_PEM) != 1)
+                   return(0);
                }
        if (path != NULL)
                {
                lookup=X509_STORE_add_lookup(ctx,X509_LOOKUP_hash_dir());
                if (lookup == NULL) return(0);
-               X509_LOOKUP_add_dir(lookup,path,X509_FILETYPE_PEM);
+               if (X509_LOOKUP_add_dir(lookup,path,X509_FILETYPE_PEM) != 1)
+                   return(0);
                }
        if ((path == NULL) && (file == NULL))
                return(0);
Index: opensa/openssl/crypto/x509/x509_def.c
diff -u opensa/openssl/crypto/x509/x509_def.c:1.1 
opensa/openssl/crypto/x509/x509_def.c:1.2
--- opensa/openssl/crypto/x509/x509_def.c:1.1   Tue Jan 25 23:21:09 2000
+++ opensa/openssl/crypto/x509/x509_def.c       Thu Mar  2 21:12:02 2000
@@ -57,8 +57,6 @@
  */
 
 #include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
 #include "cryptlib.h"
 #include <openssl/crypto.h>
 #include <openssl/x509.h>
Index: opensa/openssl/crypto/x509/x509_err.c
diff -u opensa/openssl/crypto/x509/x509_err.c:1.1 
opensa/openssl/crypto/x509/x509_err.c:1.2
--- opensa/openssl/crypto/x509/x509_err.c:1.1   Tue Jan 25 23:21:09 2000
+++ opensa/openssl/crypto/x509/x509_err.c       Thu Mar  2 21:12:02 2000
@@ -69,15 +69,25 @@
 {ERR_PACK(0,X509_F_BY_FILE_CTRL,0),    "BY_FILE_CTRL"},
 {ERR_PACK(0,X509_F_DIR_CTRL,0),        "DIR_CTRL"},
 {ERR_PACK(0,X509_F_GET_CERT_BY_SUBJECT,0),     "GET_CERT_BY_SUBJECT"},
+{ERR_PACK(0,X509_F_NETSCAPE_SPKI_B64_DECODE,0),        "NETSCAPE_SPKI_b64_decode"},
+{ERR_PACK(0,X509_F_NETSCAPE_SPKI_B64_ENCODE,0),        "NETSCAPE_SPKI_b64_encode"},
 {ERR_PACK(0,X509_F_X509V3_ADD_EXT,0),  "X509v3_add_ext"},
+{ERR_PACK(0,X509_F_X509_ADD_ATTR,0),   "X509_ADD_ATTR"},
+{ERR_PACK(0,X509_F_X509_ATTRIBUTE_CREATE_BY_NID,0),    
+"X509_ATTRIBUTE_create_by_NID"},
+{ERR_PACK(0,X509_F_X509_ATTRIBUTE_CREATE_BY_OBJ,0),    
+"X509_ATTRIBUTE_create_by_OBJ"},
+{ERR_PACK(0,X509_F_X509_ATTRIBUTE_CREATE_BY_TXT,0),    
+"X509_ATTRIBUTE_create_by_txt"},
+{ERR_PACK(0,X509_F_X509_ATTRIBUTE_GET0_DATA,0),        "X509_ATTRIBUTE_get0_data"},
+{ERR_PACK(0,X509_F_X509_ATTRIBUTE_SET1_DATA,0),        "X509_ATTRIBUTE_set1_data"},
 {ERR_PACK(0,X509_F_X509_CHECK_PRIVATE_KEY,0),  "X509_check_private_key"},
 {ERR_PACK(0,X509_F_X509_EXTENSION_CREATE_BY_NID,0),    
"X509_EXTENSION_create_by_NID"},
 {ERR_PACK(0,X509_F_X509_EXTENSION_CREATE_BY_OBJ,0),    
"X509_EXTENSION_create_by_OBJ"},
 {ERR_PACK(0,X509_F_X509_GET_PUBKEY_PARAMETERS,0),      "X509_get_pubkey_parameters"},
+{ERR_PACK(0,X509_F_X509_LOAD_CERT_CRL_FILE,0), "X509_load_cert_crl_file"},
 {ERR_PACK(0,X509_F_X509_LOAD_CERT_FILE,0),     "X509_load_cert_file"},
 {ERR_PACK(0,X509_F_X509_LOAD_CRL_FILE,0),      "X509_load_crl_file"},
 {ERR_PACK(0,X509_F_X509_NAME_ADD_ENTRY,0),     "X509_NAME_add_entry"},
 {ERR_PACK(0,X509_F_X509_NAME_ENTRY_CREATE_BY_NID,0),   
"X509_NAME_ENTRY_create_by_NID"},
+{ERR_PACK(0,X509_F_X509_NAME_ENTRY_CREATE_BY_TXT,0),   
+"X509_NAME_ENTRY_create_by_txt"},
 {ERR_PACK(0,X509_F_X509_NAME_ENTRY_SET_OBJECT,0),      "X509_NAME_ENTRY_set_object"},
 {ERR_PACK(0,X509_F_X509_NAME_ONELINE,0),       "X509_NAME_oneline"},
 {ERR_PACK(0,X509_F_X509_NAME_PRINT,0), "X509_NAME_print"},
@@ -89,7 +99,9 @@
 {ERR_PACK(0,X509_F_X509_REQ_TO_X509,0),        "X509_REQ_to_X509"},
 {ERR_PACK(0,X509_F_X509_STORE_ADD_CERT,0),     "X509_STORE_add_cert"},
 {ERR_PACK(0,X509_F_X509_STORE_ADD_CRL,0),      "X509_STORE_add_crl"},
+{ERR_PACK(0,X509_F_X509_STORE_CTX_PURPOSE_INHERIT,0),  
+"X509_STORE_CTX_purpose_inherit"},
 {ERR_PACK(0,X509_F_X509_TO_X509_REQ,0),        "X509_to_X509_REQ"},
+{ERR_PACK(0,X509_F_X509_TRUST_ADD,0),  "X509_TRUST_add"},
 {ERR_PACK(0,X509_F_X509_VERIFY_CERT,0),        "X509_verify_cert"},
 {0,NULL}
        };
@@ -97,10 +109,12 @@
 static ERR_STRING_DATA X509_str_reasons[]=
        {
 {X509_R_BAD_X509_FILETYPE                ,"bad x509 filetype"},
+{X509_R_BASE64_DECODE_ERROR              ,"base64 decode error"},
 {X509_R_CANT_CHECK_DH_KEY                ,"cant check dh key"},
 {X509_R_CERT_ALREADY_IN_HASH_TABLE       ,"cert already in hash table"},
 {X509_R_ERR_ASN1_LIB                     ,"err asn1 lib"},
 {X509_R_INVALID_DIRECTORY                ,"invalid directory"},
+{X509_R_INVALID_FIELD_NAME               ,"invalid field name"},
 {X509_R_KEY_TYPE_MISMATCH                ,"key type mismatch"},
 {X509_R_KEY_VALUES_MISMATCH              ,"key values mismatch"},
 {X509_R_LOADING_CERT_DIR                 ,"loading cert dir"},
@@ -111,8 +125,11 @@
 {X509_R_UNABLE_TO_GET_CERTS_PUBLIC_KEY   ,"unable to get certs public key"},
 {X509_R_UNKNOWN_KEY_TYPE                 ,"unknown key type"},
 {X509_R_UNKNOWN_NID                      ,"unknown nid"},
+{X509_R_UNKNOWN_PURPOSE_ID               ,"unknown purpose id"},
+{X509_R_UNKNOWN_TRUST_ID                 ,"unknown trust id"},
 {X509_R_UNSUPPORTED_ALGORITHM            ,"unsupported algorithm"},
 {X509_R_WRONG_LOOKUP_TYPE                ,"wrong lookup type"},
+{X509_R_WRONG_TYPE                       ,"wrong type"},
 {0,NULL}
        };
 
Index: opensa/openssl/crypto/x509/x509_ext.c
diff -u opensa/openssl/crypto/x509/x509_ext.c:1.1 
opensa/openssl/crypto/x509/x509_ext.c:1.2
--- opensa/openssl/crypto/x509/x509_ext.c:1.1   Tue Jan 25 23:21:09 2000
+++ opensa/openssl/crypto/x509/x509_ext.c       Thu Mar  2 21:12:02 2000
@@ -63,7 +63,9 @@
 #include <openssl/objects.h>
 #include <openssl/evp.h>
 #include <openssl/x509.h>
+#include <openssl/x509v3.h>
 
+
 int X509_CRL_get_ext_count(X509_CRL *x)
        {
        return(X509v3_get_ext_count(x->crl->extensions));
@@ -94,6 +96,11 @@
        return(X509v3_delete_ext(x->crl->extensions,loc));
        }
 
+void *X509_CRL_get_ext_d2i(X509_CRL *x, int nid, int *crit, int *idx)
+{
+       return X509V3_get_d2i(x->crl->extensions, nid, crit, idx);
+}
+
 int X509_CRL_add_ext(X509_CRL *x, X509_EXTENSION *ex, int loc)
        {
        return(X509v3_add_ext(&(x->crl->extensions),ex,loc) != NULL);
@@ -134,6 +141,11 @@
        return(X509v3_add_ext(&(x->cert_info->extensions),ex,loc) != NULL);
        }
 
+void *X509_get_ext_d2i(X509 *x, int nid, int *crit, int *idx)
+{
+       return X509V3_get_d2i(x->cert_info->extensions, nid, crit, idx);
+}
+
 int X509_REVOKED_get_ext_count(X509_REVOKED *x)
        {
        return(X509v3_get_ext_count(x->extensions));
@@ -169,6 +181,11 @@
        {
        return(X509v3_add_ext(&(x->extensions),ex,loc) != NULL);
        }
+
+void *X509_REVOKED_get_ext_d2i(X509_REVOKED *x, int nid, int *crit, int *idx)
+{
+       return X509V3_get_d2i(x->extensions, nid, crit, idx);
+}
 
 IMPLEMENT_STACK_OF(X509_EXTENSION)
 IMPLEMENT_ASN1_SET_OF(X509_EXTENSION)
Index: opensa/openssl/crypto/x509/x509_lu.c
diff -u opensa/openssl/crypto/x509/x509_lu.c:1.1 
opensa/openssl/crypto/x509/x509_lu.c:1.2
--- opensa/openssl/crypto/x509/x509_lu.c:1.1    Tue Jan 25 23:21:09 2000
+++ opensa/openssl/crypto/x509/x509_lu.c        Thu Mar  2 21:12:02 2000
@@ -61,8 +61,8 @@
 #include <openssl/lhash.h>
 #include <openssl/x509.h>
 
-static STACK *x509_store_meth=NULL;
-static STACK *x509_store_ctx_meth=NULL;
+static STACK_OF(CRYPTO_EX_DATA_FUNCS) *x509_store_meth=NULL;
+static STACK_OF(CRYPTO_EX_DATA_FUNCS) *x509_store_ctx_meth=NULL;
 
 X509_LOOKUP *X509_LOOKUP_new(X509_LOOKUP_METHOD *method)
        {
@@ -244,7 +244,7 @@
                }
        sk_X509_LOOKUP_free(sk);
 
-       CRYPTO_free_ex_data(x509_store_meth,(char *)vfy,&vfy->ex_data);
+       CRYPTO_free_ex_data(x509_store_meth,vfy,&vfy->ex_data);
        lh_doall(vfy->certs,cleanup);
        lh_free(vfy->certs);
        Free(vfy);
@@ -377,10 +377,24 @@
                abort();
                }
 
-       tmp=(X509_OBJECT *)lh_retrieve(h,(char *)&stmp);
+       tmp=(X509_OBJECT *)lh_retrieve(h,&stmp);
        return(tmp);
        }
 
+X509_STORE_CTX *X509_STORE_CTX_new(void)
+{
+       X509_STORE_CTX *ctx;
+       ctx = (X509_STORE_CTX *)Malloc(sizeof(X509_STORE_CTX));
+       if(ctx) memset(ctx, 0, sizeof(X509_STORE_CTX));
+       return ctx;
+}
+
+void X509_STORE_CTX_free(X509_STORE_CTX *ctx)
+{
+       X509_STORE_CTX_cleanup(ctx);
+       Free(ctx);
+}
+
 void X509_STORE_CTX_init(X509_STORE_CTX *ctx, X509_STORE *store, X509 *x509,
             STACK_OF(X509) *chain)
        {
@@ -389,6 +403,8 @@
        ctx->cert=x509;
        ctx->untrusted=chain;
        ctx->last_untrusted=0;
+       ctx->purpose=0;
+       ctx->trust=0;
        ctx->valid=0;
        ctx->chain=NULL;
        ctx->depth=9;
@@ -404,7 +420,7 @@
                sk_X509_pop_free(ctx->chain,X509_free);
                ctx->chain=NULL;
                }
-       CRYPTO_free_ex_data(x509_store_ctx_meth,(char *)ctx,&(ctx->ex_data));
+       CRYPTO_free_ex_data(x509_store_ctx_meth,ctx,&(ctx->ex_data));
        memset(&ctx->ex_data,0,sizeof(CRYPTO_EX_DATA));
        }
 
Index: opensa/openssl/crypto/x509/x509_r2x.c
diff -u opensa/openssl/crypto/x509/x509_r2x.c:1.1 
opensa/openssl/crypto/x509/x509_r2x.c:1.2
--- opensa/openssl/crypto/x509/x509_r2x.c:1.1   Tue Jan 25 23:21:09 2000
+++ opensa/openssl/crypto/x509/x509_r2x.c       Thu Mar  2 21:12:02 2000
@@ -82,7 +82,7 @@
 
        if (sk_X509_ATTRIBUTE_num(r->req_info->attributes) != 0)
                {
-               if ((xi->version=ASN1_INTEGER_new()) == NULL) goto err;
+               if ((xi->version=M_ASN1_INTEGER_new()) == NULL) goto err;
                if (!ASN1_INTEGER_set(xi->version,2)) goto err;
 /*             xi->extensions=ri->attributes; <- bad, should not ever be done
                ri->attributes=NULL; */
Index: opensa/openssl/crypto/x509/x509_req.c
diff -u opensa/openssl/crypto/x509/x509_req.c:1.1 
opensa/openssl/crypto/x509/x509_req.c:1.2
--- opensa/openssl/crypto/x509/x509_req.c:1.1   Tue Jan 25 23:21:09 2000
+++ opensa/openssl/crypto/x509/x509_req.c       Thu Mar  2 21:12:02 2000
@@ -66,7 +66,7 @@
 #include <openssl/buffer.h>
 #include <openssl/pem.h>
 
-X509_REQ *X509_to_X509_REQ(X509 *x, EVP_PKEY *pkey, EVP_MD *md)
+X509_REQ *X509_to_X509_REQ(X509 *x, EVP_PKEY *pkey, const EVP_MD *md)
        {
        X509_REQ *ret;
        X509_REQ_INFO *ri;
@@ -113,3 +113,166 @@
        return(X509_PUBKEY_get(req->req_info->pubkey));
        }
 
+/* It seems several organisations had the same idea of including a list of
+ * extensions in a certificate request. There are at least two OIDs that are
+ * used and there may be more: so the list is configurable.
+ */
+
+static int ext_nid_list[] = { NID_ms_ext_req, NID_ext_req, NID_undef};
+
+static int *ext_nids = ext_nid_list;
+
+int X509_REQ_extension_nid(int req_nid)
+{
+       int i, nid;
+       for(i = 0; ; i++) {
+               nid = ext_nids[i];
+               if(nid == NID_undef) return 0;
+               else if (req_nid == nid) return 1;
+       }
+}
+
+int *X509_REQ_get_extension_nids(void)
+{
+       return ext_nids;
+}
+       
+void X509_REQ_set_extension_nids(int *nids)
+{
+       ext_nids = nids;
+}
+
+STACK_OF(X509_EXTENSION) *X509_REQ_get_extensions(X509_REQ *req)
+{
+       X509_ATTRIBUTE *attr;
+       STACK_OF(X509_ATTRIBUTE) *sk;
+       ASN1_TYPE *ext = NULL;
+       int i;
+       unsigned char *p;
+       if ((req == NULL) || (req->req_info == NULL))
+               return(NULL);
+       sk=req->req_info->attributes;
+        if (!sk) return NULL;
+       for(i = 0; i < sk_X509_ATTRIBUTE_num(sk); i++) {
+               attr = sk_X509_ATTRIBUTE_value(sk, i);
+               if(X509_REQ_extension_nid(OBJ_obj2nid(attr->object))) {
+                       if(attr->set && sk_ASN1_TYPE_num(attr->value.set))
+                               ext = sk_ASN1_TYPE_value(attr->value.set, 0);
+                       else ext = attr->value.single;
+                       break;
+               }
+       }
+       if(!ext || (ext->type != V_ASN1_SEQUENCE)) return NULL;
+       p = ext->value.sequence->data;
+       return d2i_ASN1_SET_OF_X509_EXTENSION(NULL, &p,
+                       ext->value.sequence->length,
+                       d2i_X509_EXTENSION, X509_EXTENSION_free,
+                       V_ASN1_SEQUENCE, V_ASN1_UNIVERSAL);
+}
+
+/* Add a STACK_OF extensions to a certificate request: allow alternative OIDs
+ * in case we want to create a non standard one.
+ */
+
+int X509_REQ_add_extensions_nid(X509_REQ *req, STACK_OF(X509_EXTENSION) *exts,
+                               int nid)
+{
+       unsigned char *p = NULL, *q;
+       long len;
+       ASN1_TYPE *at = NULL;
+       X509_ATTRIBUTE *attr = NULL;
+       if(!(at = ASN1_TYPE_new()) ||
+               !(at->value.sequence = ASN1_STRING_new())) goto err;
+
+       at->type = V_ASN1_SEQUENCE;
+       /* Generate encoding of extensions */
+       len = i2d_ASN1_SET_OF_X509_EXTENSION(exts, NULL, i2d_X509_EXTENSION,
+                       V_ASN1_SEQUENCE, V_ASN1_UNIVERSAL, IS_SEQUENCE);
+       if(!(p = Malloc(len))) goto err;
+       q = p;
+       i2d_ASN1_SET_OF_X509_EXTENSION(exts, &q, i2d_X509_EXTENSION,
+                       V_ASN1_SEQUENCE, V_ASN1_UNIVERSAL, IS_SEQUENCE);
+       at->value.sequence->data = p;
+       p = NULL;
+       at->value.sequence->length = len;
+       if(!(attr = X509_ATTRIBUTE_new())) goto err;
+       if(!(attr->value.set = sk_ASN1_TYPE_new_null())) goto err;
+       if(!sk_ASN1_TYPE_push(attr->value.set, at)) goto err;
+       at = NULL;
+       attr->set = 1;
+       attr->object = OBJ_nid2obj(nid);
+       if(!sk_X509_ATTRIBUTE_push(req->req_info->attributes, attr)) goto err;
+       return 1;
+       err:
+       if(p) Free(p);
+       X509_ATTRIBUTE_free(attr);
+       ASN1_TYPE_free(at);
+       return 0;
+}
+/* This is the normal usage: use the "official" OID */
+int X509_REQ_add_extensions(X509_REQ *req, STACK_OF(X509_EXTENSION) *exts)
+{
+       return X509_REQ_add_extensions_nid(req, exts, NID_ext_req);
+}
+
+/* Request attribute functions */
+
+int X509_REQ_get_attr_count(const X509_REQ *req)
+{
+       return X509at_get_attr_count(req->req_info->attributes);
+}
+
+int X509_REQ_get_attr_by_NID(const X509_REQ *req, int nid,
+                         int lastpos)
+{
+       return X509at_get_attr_by_NID(req->req_info->attributes, nid, lastpos);
+}
+
+int X509_REQ_get_attr_by_OBJ(const X509_REQ *req, ASN1_OBJECT *obj,
+                         int lastpos)
+{
+       return X509at_get_attr_by_OBJ(req->req_info->attributes, obj, lastpos);
+}
+
+X509_ATTRIBUTE *X509_REQ_get_attr(const X509_REQ *req, int loc)
+{
+       return X509at_get_attr(req->req_info->attributes, loc);
+}
+
+X509_ATTRIBUTE *X509_REQ_delete_attr(X509_REQ *req, int loc)
+{
+       return X509at_delete_attr(req->req_info->attributes, loc);
+}
+
+int X509_REQ_add1_attr(X509_REQ *req, X509_ATTRIBUTE *attr)
+{
+       if(X509at_add1_attr(&req->req_info->attributes, attr)) return 1;
+       return 0;
+}
+
+int X509_REQ_add1_attr_by_OBJ(X509_REQ *req,
+                       ASN1_OBJECT *obj, int type,
+                       unsigned char *bytes, int len)
+{
+       if(X509at_add1_attr_by_OBJ(&req->req_info->attributes, obj,
+                               type, bytes, len)) return 1;
+       return 0;
+}
+
+int X509_REQ_add1_attr_by_NID(X509_REQ *req,
+                       int nid, int type,
+                       unsigned char *bytes, int len)
+{
+       if(X509at_add1_attr_by_NID(&req->req_info->attributes, nid,
+                               type, bytes, len)) return 1;
+       return 0;
+}
+
+int X509_REQ_add1_attr_by_txt(X509_REQ *req,
+                       char *attrname, int type,
+                       unsigned char *bytes, int len)
+{
+       if(X509at_add1_attr_by_txt(&req->req_info->attributes, attrname,
+                               type, bytes, len)) return 1;
+       return 0;
+}
Index: opensa/openssl/crypto/x509/x509_set.c
diff -u opensa/openssl/crypto/x509/x509_set.c:1.1 
opensa/openssl/crypto/x509/x509_set.c:1.2
--- opensa/openssl/crypto/x509/x509_set.c:1.1   Tue Jan 25 23:21:09 2000
+++ opensa/openssl/crypto/x509/x509_set.c       Thu Mar  2 21:12:02 2000
@@ -68,7 +68,7 @@
        if (x == NULL) return(0);
        if (x->cert_info->version == NULL)
                {
-               if ((x->cert_info->version=ASN1_INTEGER_new()) == NULL)
+               if ((x->cert_info->version=M_ASN1_INTEGER_new()) == NULL)
                        return(0);
                }
        return(ASN1_INTEGER_set(x->cert_info->version,version));
@@ -82,10 +82,10 @@
        in=x->cert_info->serialNumber;
        if (in != serial)
                {
-               in=ASN1_INTEGER_dup(serial);
+               in=M_ASN1_INTEGER_dup(serial);
                if (in != NULL)
                        {
-                       ASN1_INTEGER_free(x->cert_info->serialNumber);
+                       M_ASN1_INTEGER_free(x->cert_info->serialNumber);
                        x->cert_info->serialNumber=in;
                        }
                }
@@ -112,10 +112,10 @@
        in=x->cert_info->validity->notBefore;
        if (in != tm)
                {
-               in=ASN1_UTCTIME_dup(tm);
+               in=M_ASN1_UTCTIME_dup(tm);
                if (in != NULL)
                        {
-                       ASN1_UTCTIME_free(x->cert_info->validity->notBefore);
+                       M_ASN1_UTCTIME_free(x->cert_info->validity->notBefore);
                        x->cert_info->validity->notBefore=in;
                        }
                }
@@ -130,10 +130,10 @@
        in=x->cert_info->validity->notAfter;
        if (in != tm)
                {
-               in=ASN1_UTCTIME_dup(tm);
+               in=M_ASN1_UTCTIME_dup(tm);
                if (in != NULL)
                        {
-                       ASN1_UTCTIME_free(x->cert_info->validity->notAfter);
+                       M_ASN1_UTCTIME_free(x->cert_info->validity->notAfter);
                        x->cert_info->validity->notAfter=in;
                        }
                }
Index: opensa/openssl/crypto/x509/x509_txt.c
diff -u opensa/openssl/crypto/x509/x509_txt.c:1.1 
opensa/openssl/crypto/x509/x509_txt.c:1.2
--- opensa/openssl/crypto/x509/x509_txt.c:1.1   Tue Jan 25 23:21:09 2000
+++ opensa/openssl/crypto/x509/x509_txt.c       Thu Mar  2 21:12:02 2000
@@ -59,7 +59,6 @@
 #include <stdio.h>
 #include <time.h>
 #include <errno.h>
-#include <sys/types.h>
 
 #include "cryptlib.h"
 #include <openssl/lhash.h>
@@ -121,6 +120,16 @@
                return("certificate chain too long");
        case X509_V_ERR_CERT_REVOKED:
                return("certificate revoked");
+       case X509_V_ERR_INVALID_CA:
+               return ("invalid CA certificate");
+       case X509_V_ERR_PATH_LENGTH_EXCEEDED:
+               return ("path length constraint exceeded");
+       case X509_V_ERR_INVALID_PURPOSE:
+               return ("unsupported certificate purpose");
+       case X509_V_ERR_CERT_UNTRUSTED:
+               return ("certificate not trusted");
+       case X509_V_ERR_CERT_REJECTED:
+               return ("certificate rejected");
        case X509_V_ERR_APPLICATION_VERIFICATION:
                return("application verification failure");
        default:
Index: opensa/openssl/crypto/x509/x509_v3.c
diff -u opensa/openssl/crypto/x509/x509_v3.c:1.1 
opensa/openssl/crypto/x509/x509_v3.c:1.2
--- opensa/openssl/crypto/x509/x509_v3.c:1.1    Tue Jan 25 23:21:09 2000
+++ opensa/openssl/crypto/x509/x509_v3.c        Thu Mar  2 21:12:02 2000
@@ -63,6 +63,7 @@
 #include <openssl/objects.h>
 #include <openssl/evp.h>
 #include <openssl/x509.h>
+#include <openssl/x509v3.h>
 
 int X509v3_get_ext_count(const STACK_OF(X509_EXTENSION) *x)
        {
@@ -242,7 +243,7 @@
        int i;
 
        if (ex == NULL) return(0);
-       i=ASN1_OCTET_STRING_set(ex->value,data->data,data->length);
+       i=M_ASN1_OCTET_STRING_set(ex->value,data->data,data->length);
        if (!i) return(0);
        return(1);
        }
Index: opensa/openssl/crypto/x509/x509_vfy.c
diff -u opensa/openssl/crypto/x509/x509_vfy.c:1.1 
opensa/openssl/crypto/x509/x509_vfy.c:1.2
--- opensa/openssl/crypto/x509/x509_vfy.c:1.1   Tue Jan 25 23:21:09 2000
+++ opensa/openssl/crypto/x509/x509_vfy.c       Thu Mar  2 21:12:02 2000
@@ -59,23 +59,24 @@
 #include <stdio.h>
 #include <time.h>
 #include <errno.h>
-#include <sys/types.h>
-#include <sys/stat.h>
 
-#include <openssl/crypto.h>
 #include "cryptlib.h"
+#include <openssl/crypto.h>
 #include <openssl/lhash.h>
 #include <openssl/buffer.h>
 #include <openssl/evp.h>
 #include <openssl/asn1.h>
 #include <openssl/x509.h>
+#include <openssl/x509v3.h>
 #include <openssl/objects.h>
 
 static int null_callback(int ok,X509_STORE_CTX *e);
+static int check_chain_purpose(X509_STORE_CTX *ctx);
+static int check_trust(X509_STORE_CTX *ctx);
 static int internal_verify(X509_STORE_CTX *ctx);
 const char *X509_version="X.509" OPENSSL_VERSION_PTEXT;
 
-static STACK *x509_store_ctx_method=NULL;
+static STACK_OF(CRYPTO_EX_DATA_FUNCS) *x509_store_ctx_method=NULL;
 static int x509_store_ctx_num=0;
 #if 0
 static int x509_store_num=1;
@@ -127,7 +128,7 @@
                ctx->last_untrusted=1;
                }
 
-       /* We use a temporary so we can chop and hack at it */
+       /* We use a temporary STACK so we can chop and hack at it */
        if (ctx->untrusted != NULL
            && (sktmp=sk_X509_dup(ctx->untrusted)) == NULL)
                {
@@ -184,17 +185,37 @@
 
        i=sk_X509_num(ctx->chain);
        x=sk_X509_value(ctx->chain,i-1);
-       if (X509_NAME_cmp(X509_get_subject_name(x),X509_get_issuer_name(x))
+       xn = X509_get_subject_name(x);
+       if (X509_NAME_cmp(xn,X509_get_issuer_name(x))
                == 0)
                {
                /* we have a self signed certificate */
                if (sk_X509_num(ctx->chain) == 1)
                        {
-                       ctx->error=X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT;
-                       ctx->current_cert=x;
-                       ctx->error_depth=i-1;
-                       ok=cb(0,ctx);
-                       if (!ok) goto end;
+                       /* We have a single self signed certificate: see if
+                        * we can find it in the store. We must have an exact
+                        * match to avoid possible impersonation.
+                        */
+                       ok=X509_STORE_get_by_subject(ctx,X509_LU_X509,xn,&obj);
+                       if ((ok != X509_LU_X509) || X509_cmp(x, obj.data.x509)) 
+                               {
+                               ctx->error=X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT;
+                               ctx->current_cert=x;
+                               ctx->error_depth=i-1;
+                               if(ok == X509_LU_X509) X509_OBJECT_free_contents(&obj);
+                               ok=cb(0,ctx);
+                               if (!ok) goto end;
+                               }
+                       else 
+                               {
+                               /* We have a match: replace certificate with store 
+version
+                                * so we get any trust settings.
+                                */
+                               X509_free(x);
+                               x = obj.data.x509;
+                               sk_X509_set(ctx->chain, i - 1, x);
+                               ctx->last_untrusted=0;
+                               }
                        }
                else
                        {
@@ -272,6 +293,17 @@
                if (!ok) goto end;
                }
 
+       /* We have the chain complete: now we need to check its purpose */
+       if(ctx->purpose > 0) ok = check_chain_purpose(ctx);
+
+       if(!ok) goto end;
+
+       /* The chain extensions are OK: check trust */
+
+       if(ctx->trust > 0) ok = check_trust(ctx);
+
+       if(!ok) goto end;
+
        /* We may as well copy down any DSA parameters that are required */
        X509_get_pubkey_parameters(NULL,ctx->chain);
 
@@ -290,6 +322,71 @@
        return(ok);
        }
 
+/* Check a certificate chains extensions for consistency
+ * with the supplied purpose
+ */
+
+static int check_chain_purpose(X509_STORE_CTX *ctx)
+{
+#ifdef NO_CHAIN_VERIFY
+       return 1;
+#else
+       int i, ok=0;
+       X509 *x;
+       int (*cb)();
+       cb=ctx->ctx->verify_cb;
+       if (cb == NULL) cb=null_callback;
+       /* Check all untrusted certificates */
+       for(i = 0; i < ctx->last_untrusted; i++) {
+               x = sk_X509_value(ctx->chain, i);
+               if(!X509_check_purpose(x, ctx->purpose, i)) {
+                       if(i) ctx->error = X509_V_ERR_INVALID_CA;
+                       else ctx->error = X509_V_ERR_INVALID_PURPOSE;
+                       ctx->error_depth = i;
+                       ctx->current_cert = x;
+                       ok=cb(0,ctx);
+                       if(!ok) goto end;
+               }
+               /* Check pathlen */
+               if((i > 1) && (x->ex_pathlen != -1)
+                                       && (i > (x->ex_pathlen + 1))) {
+                       ctx->error = X509_V_ERR_PATH_LENGTH_EXCEEDED;
+                       ctx->error_depth = i;
+                       ctx->current_cert = x;
+                       ok=cb(0,ctx);
+                       if(!ok) goto end;
+               }
+       }
+       ok = 1;
+       end:
+       return(ok);
+#endif
+}
+
+static int check_trust(X509_STORE_CTX *ctx)
+{
+#ifdef NO_CHAIN_VERIFY
+       return 1;
+#else
+       int i, ok;
+       X509 *x;
+       int (*cb)();
+       cb=ctx->ctx->verify_cb;
+       if (cb == NULL) cb=null_callback;
+/* For now just check the last certificate in the chain */
+       i = sk_X509_num(ctx->chain) - 1;
+       x = sk_X509_value(ctx->chain, i);
+       ok = X509_check_trust(x, ctx->trust, 0);
+       if(ok == X509_TRUST_TRUSTED) return 1;
+       ctx->error_depth = sk_X509_num(ctx->chain) - 1;
+       ctx->current_cert = x;
+       if(ok == X509_TRUST_REJECTED) ctx->error = X509_V_ERR_CERT_REJECTED;
+       else ctx->error = X509_V_ERR_CERT_UNTRUSTED;
+       ok = cb(0, ctx);
+       return(ok);
+#endif
+}
+
 static int internal_verify(X509_STORE_CTX *ctx)
        {
        int i,ok=0,n;
@@ -439,7 +536,7 @@
        atm.length=sizeof(buff2);
        atm.data=(unsigned char *)buff2;
 
-       X509_gmtime_adj(&atm,-offset);
+       X509_gmtime_adj(&atm,-offset*60);
 
        i=(buff1[0]-'0')*10+(buff1[1]-'0');
        if (i < 50) i+=100; /* cf. RFC 2459 */
@@ -525,13 +622,13 @@
 
        X509_OBJECT_up_ref_count(obj);
 
-       r=(X509_OBJECT *)lh_insert(ctx->certs,(char *)obj);
+       r=(X509_OBJECT *)lh_insert(ctx->certs,obj);
        if (r != NULL)
                { /* oops, put it back */
-               lh_delete(ctx->certs,(char *)obj);
+               lh_delete(ctx->certs,obj);
                X509_OBJECT_free_contents(obj);
                Free(obj);
-               lh_insert(ctx->certs,(char *)r);
+               lh_insert(ctx->certs,r);
                X509err(X509_F_X509_STORE_ADD_CERT,X509_R_CERT_ALREADY_IN_HASH_TABLE);
                ret=0;
                }
@@ -560,13 +657,13 @@
 
        X509_OBJECT_up_ref_count(obj);
 
-       r=(X509_OBJECT *)lh_insert(ctx->certs,(char *)obj);
+       r=(X509_OBJECT *)lh_insert(ctx->certs,obj);
        if (r != NULL)
                { /* oops, put it back */
-               lh_delete(ctx->certs,(char *)obj);
+               lh_delete(ctx->certs,obj);
                X509_OBJECT_free_contents(obj);
                Free(obj);
-               lh_insert(ctx->certs,(char *)r);
+               lh_insert(ctx->certs,r);
                X509err(X509_F_X509_STORE_ADD_CRL,X509_R_CERT_ALREADY_IN_HASH_TABLE);
                ret=0;
                }
@@ -576,8 +673,8 @@
        return(ret);    
        }
 
-int X509_STORE_CTX_get_ex_new_index(long argl, char *argp, int (*new_func)(),
-            int (*dup_func)(), void (*free_func)())
+int X509_STORE_CTX_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
+            CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func)
         {
         x509_store_ctx_num++;
         return(CRYPTO_get_ex_new_index(x509_store_ctx_num-1,
@@ -620,6 +717,19 @@
        return(ctx->chain);
        }
 
+STACK_OF(X509) *X509_STORE_CTX_get1_chain(X509_STORE_CTX *ctx)
+       {
+       int i;
+       X509 *x;
+       STACK_OF(X509) *chain;
+       if(!ctx->chain || !(chain = sk_X509_dup(ctx->chain))) return NULL;
+       for(i = 0; i < sk_X509_num(chain); i++) {
+               x = sk_X509_value(chain, i);
+               CRYPTO_add(&x->references, 1, CRYPTO_LOCK_X509);
+       }
+       return(chain);
+       }
+
 void X509_STORE_CTX_set_cert(X509_STORE_CTX *ctx, X509 *x)
        {
        ctx->cert=x;
@@ -629,6 +739,62 @@
        {
        ctx->untrusted=sk;
        }
+
+int X509_STORE_CTX_set_purpose(X509_STORE_CTX *ctx, int purpose)
+       {
+       return X509_STORE_CTX_purpose_inherit(ctx, 0, purpose, 0);
+       }
+
+int X509_STORE_CTX_set_trust(X509_STORE_CTX *ctx, int trust)
+       {
+       return X509_STORE_CTX_purpose_inherit(ctx, 0, 0, trust);
+       }
+
+/* This function is used to set the X509_STORE_CTX purpose and trust
+ * values. This is intended to be used when another structure has its
+ * own trust and purpose values which (if set) will be inherited by
+ * the ctx. If they aren't set then we will usually have a default
+ * purpose in mind which should then be used to set the trust value.
+ * An example of this is SSL use: an SSL structure will have its own
+ * purpose and trust settings which the application can set: if they
+ * aren't set then we use the default of SSL client/server.
+ */
+
+int X509_STORE_CTX_purpose_inherit(X509_STORE_CTX *ctx, int def_purpose,
+                               int purpose, int trust)
+{
+       int idx;
+       /* If purpose not set use default */
+       if(!purpose) purpose = def_purpose;
+       /* If we have a purpose then check it is valid */
+       if(purpose) {
+               idx = X509_PURPOSE_get_by_id(purpose);
+               if(idx == -1) {
+                       X509err(X509_F_X509_STORE_CTX_PURPOSE_INHERIT,
+                                               X509_R_UNKNOWN_PURPOSE_ID);
+                       return 0;
+               }
+               /* If trust not set then get from purpose default */
+               if(!trust) {
+                       X509_PURPOSE *ptmp;
+                       ptmp = X509_PURPOSE_get0(idx);
+                       trust = ptmp->trust;
+               }
+       }
+       if(trust) {
+               idx = X509_TRUST_get_by_id(trust);
+               if(idx == -1) {
+                       X509err(X509_F_X509_STORE_CTX_PURPOSE_INHERIT,
+                                               X509_R_UNKNOWN_TRUST_ID);
+                       return 0;
+               }
+       }
+
+       if(purpose) ctx->purpose = purpose;
+       if(trust) ctx->trust = trust;
+       return 1;
+}
+
 
 IMPLEMENT_STACK_OF(X509)
 IMPLEMENT_ASN1_SET_OF(X509)
Index: opensa/openssl/crypto/x509/x509_vfy.h
diff -u opensa/openssl/crypto/x509/x509_vfy.h:1.1 
opensa/openssl/crypto/x509/x509_vfy.h:1.2
--- opensa/openssl/crypto/x509/x509_vfy.h:1.1   Tue Jan 25 23:21:09 2000
+++ opensa/openssl/crypto/x509/x509_vfy.h       Thu Mar  2 21:12:02 2000
@@ -202,6 +202,8 @@
        /* The following are set by the caller */
        X509 *cert;             /* The cert to check */
        STACK_OF(X509) *untrusted;      /* chain of X509s - untrusted - passed in */
+       int purpose;            /* purpose to check untrusted certificates */
+       int trust;              /* trust setting to check */
 
        /* The following is built up */
        int depth;              /* how far to go looking up certs */
@@ -234,6 +236,7 @@
                X509_LOOKUP_ctrl((x),X509_L_ADD_DIR,(name),(long)(type),NULL)
 
 #define                X509_V_OK                                       0
+/* illegal error (for uninitialized values, to avoid X509_V_OK): 1 */
 
 #define                X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT            2
 #define                X509_V_ERR_UNABLE_TO_GET_CRL                    3
@@ -257,6 +260,11 @@
 #define                X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE      21
 #define                X509_V_ERR_CERT_CHAIN_TOO_LONG                  22
 #define                X509_V_ERR_CERT_REVOKED                         23
+#define                X509_V_ERR_INVALID_CA                           24
+#define                X509_V_ERR_PATH_LENGTH_EXCEEDED                 25
+#define                X509_V_ERR_INVALID_PURPOSE                      26
+#define                X509_V_ERR_CERT_UNTRUSTED                       27
+#define                X509_V_ERR_CERT_REJECTED                        28
 
 /* The application is not happy */
 #define                X509_V_ERR_APPLICATION_VERIFICATION             50
@@ -284,6 +292,8 @@
 X509_STORE *X509_STORE_new(void );
 void X509_STORE_free(X509_STORE *v);
 
+X509_STORE_CTX *X509_STORE_CTX_new(void);
+void X509_STORE_CTX_free(X509_STORE_CTX *ctx);
 void X509_STORE_CTX_init(X509_STORE_CTX *ctx, X509_STORE *store,
                         X509 *x509, STACK_OF(X509) *chain);
 void X509_STORE_CTX_cleanup(X509_STORE_CTX *ctx);
@@ -305,6 +315,7 @@
 #ifndef NO_STDIO
 int X509_load_cert_file(X509_LOOKUP *ctx, const char *file, int type);
 int X509_load_crl_file(X509_LOOKUP *ctx, const char *file, int type);
+int X509_load_cert_crl_file(X509_LOOKUP *ctx, const char *file, int type);
 #endif
 
 
@@ -327,8 +338,8 @@
 int    X509_STORE_set_default_paths(X509_STORE *ctx);
 #endif
 
-int X509_STORE_CTX_get_ex_new_index(long argl, char *argp, int (*new_func)(),
-       int (*dup_func)(), void (*free_func)());
+int X509_STORE_CTX_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
+       CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func);
 int    X509_STORE_CTX_set_ex_data(X509_STORE_CTX *ctx,int idx,void *data);
 void * X509_STORE_CTX_get_ex_data(X509_STORE_CTX *ctx,int idx);
 int    X509_STORE_CTX_get_error(X509_STORE_CTX *ctx);
@@ -336,8 +347,13 @@
 int    X509_STORE_CTX_get_error_depth(X509_STORE_CTX *ctx);
 X509 * X509_STORE_CTX_get_current_cert(X509_STORE_CTX *ctx);
 STACK_OF(X509) *X509_STORE_CTX_get_chain(X509_STORE_CTX *ctx);
+STACK_OF(X509) *X509_STORE_CTX_get1_chain(X509_STORE_CTX *ctx);
 void   X509_STORE_CTX_set_cert(X509_STORE_CTX *c,X509 *x);
 void   X509_STORE_CTX_set_chain(X509_STORE_CTX *c,STACK_OF(X509) *sk);
+int X509_STORE_CTX_set_purpose(X509_STORE_CTX *ctx, int purpose);
+int X509_STORE_CTX_set_trust(X509_STORE_CTX *ctx, int trust);
+int X509_STORE_CTX_purpose_inherit(X509_STORE_CTX *ctx, int def_purpose,
+                               int purpose, int trust);
 
 #ifdef  __cplusplus
 }
Index: opensa/openssl/crypto/x509/x509name.c
diff -u opensa/openssl/crypto/x509/x509name.c:1.1 
opensa/openssl/crypto/x509/x509name.c:1.2
--- opensa/openssl/crypto/x509/x509name.c:1.1   Tue Jan 25 23:21:09 2000
+++ opensa/openssl/crypto/x509/x509name.c       Thu Mar  2 21:12:02 2000
@@ -171,6 +171,42 @@
        return(ret);
        }
 
+int X509_NAME_add_entry_by_OBJ(X509_NAME *name, ASN1_OBJECT *obj, int type,
+                       unsigned char *bytes, int len, int loc, int set)
+{
+       X509_NAME_ENTRY *ne;
+       int ret;
+       ne = X509_NAME_ENTRY_create_by_OBJ(NULL, obj, type, bytes, len);
+       if(!ne) return 0;
+       ret = X509_NAME_add_entry(name, ne, loc, set);
+       X509_NAME_ENTRY_free(ne);
+       return ret;
+}
+
+int X509_NAME_add_entry_by_NID(X509_NAME *name, int nid, int type,
+                       unsigned char *bytes, int len, int loc, int set)
+{
+       X509_NAME_ENTRY *ne;
+       int ret;
+       ne = X509_NAME_ENTRY_create_by_NID(NULL, nid, type, bytes, len);
+       if(!ne) return 0;
+       ret = X509_NAME_add_entry(name, ne, loc, set);
+       X509_NAME_ENTRY_free(ne);
+       return ret;
+}
+
+int X509_NAME_add_entry_by_txt(X509_NAME *name, char *field, int type,
+                       unsigned char *bytes, int len, int loc, int set)
+{
+       X509_NAME_ENTRY *ne;
+       int ret;
+       ne = X509_NAME_ENTRY_create_by_txt(NULL, field, type, bytes, len);
+       if(!ne) return 0;
+       ret = X509_NAME_add_entry(name, ne, loc, set);
+       X509_NAME_ENTRY_free(ne);
+       return ret;
+}
+
 /* if set is -1, append to previous set, 0 'a new one', and 1,
  * prepend to the guy we are about to stomp on. */
 int X509_NAME_add_entry(X509_NAME *name, X509_NAME_ENTRY *ne, int loc,
@@ -236,10 +272,30 @@
        return(0);
        }
 
+X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_txt(X509_NAME_ENTRY **ne,
+               char *field, int type, unsigned char *bytes, int len)
+       {
+       ASN1_OBJECT *obj;
+       X509_NAME_ENTRY *nentry;
+
+       obj=OBJ_txt2obj(field, 0);
+       if (obj == NULL)
+               {
+               X509err(X509_F_X509_NAME_ENTRY_CREATE_BY_TXT,
+                                               X509_R_INVALID_FIELD_NAME);
+               ERR_add_error_data(2, "name=", field);
+               return(NULL);
+               }
+       nentry = X509_NAME_ENTRY_create_by_OBJ(ne,obj,type,bytes,len);
+       ASN1_OBJECT_free(obj);
+       return nentry;
+       }
+
 X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_NID(X509_NAME_ENTRY **ne, int nid,
             int type, unsigned char *bytes, int len)
        {
        ASN1_OBJECT *obj;
+       X509_NAME_ENTRY *nentry;
 
        obj=OBJ_nid2obj(nid);
        if (obj == NULL)
@@ -247,7 +303,9 @@
                X509err(X509_F_X509_NAME_ENTRY_CREATE_BY_NID,X509_R_UNKNOWN_NID);
                return(NULL);
                }
-       return(X509_NAME_ENTRY_create_by_OBJ(ne,obj,type,bytes,len));
+       nentry = X509_NAME_ENTRY_create_by_OBJ(ne,obj,type,bytes,len);
+       ASN1_OBJECT_free(obj);
+       return nentry;
        }
 
 X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_OBJ(X509_NAME_ENTRY **ne,
@@ -267,7 +325,7 @@
                goto err;
        if (!X509_NAME_ENTRY_set_data(ret,type,bytes,len))
                goto err;
-       
+
        if ((ne != NULL) && (*ne == NULL)) *ne=ret;
        return(ret);
 err:
@@ -294,6 +352,10 @@
        int i;
 
        if ((ne == NULL) || ((bytes == NULL) && (len != 0))) return(0);
+       if(type & MBSTRING_FLAG) 
+               return ASN1_STRING_set_by_NID(&ne->value, bytes,
+                                               len, type,
+                                       OBJ_obj2nid(ne->object)) ? 1 : 0;
        if (len < 0) len=strlen((char *)bytes);
        i=ASN1_STRING_set(ne->value,bytes,len);
        if (!i) return(0);
Index: opensa/openssl/crypto/x509/x_all.c
diff -u opensa/openssl/crypto/x509/x_all.c:1.1 opensa/openssl/crypto/x509/x_all.c:1.2
--- opensa/openssl/crypto/x509/x_all.c:1.1      Tue Jan 25 23:21:09 2000
+++ opensa/openssl/crypto/x509/x_all.c  Thu Mar  2 21:12:02 2000
@@ -285,10 +285,22 @@
                (unsigned char **)(rsa)));
        }
 
+RSA *d2i_RSA_PUBKEY_fp(FILE *fp, RSA **rsa)
+       {
+       return((RSA *)ASN1_d2i_fp((char *(*)())
+               RSA_new,(char *(*)())d2i_RSA_PUBKEY, (fp),
+               (unsigned char **)(rsa)));
+       }
+
 int i2d_RSAPublicKey_fp(FILE *fp, RSA *rsa)
        {
        return(ASN1_i2d_fp(i2d_RSAPublicKey,fp,(unsigned char *)rsa));
        }
+
+int i2d_RSA_PUBKEY_fp(FILE *fp, RSA *rsa)
+       {
+       return(ASN1_i2d_fp(i2d_RSA_PUBKEY,fp,(unsigned char *)rsa));
+       }
 #endif
 
 RSA *d2i_RSAPrivateKey_bio(BIO *bp, RSA **rsa)
@@ -310,10 +322,22 @@
                (unsigned char **)(rsa)));
        }
 
+RSA *d2i_RSA_PUBKEY_bio(BIO *bp, RSA **rsa)
+       {
+       return((RSA *)ASN1_d2i_bio((char *(*)())
+               RSA_new,(char *(*)())d2i_RSA_PUBKEY, (bp),
+               (unsigned char **)(rsa)));
+       }
+
 int i2d_RSAPublicKey_bio(BIO *bp, RSA *rsa)
        {
        return(ASN1_i2d_bio(i2d_RSAPublicKey,bp,(unsigned char *)rsa));
        }
+
+int i2d_RSA_PUBKEY_bio(BIO *bp, RSA *rsa)
+       {
+       return(ASN1_i2d_bio(i2d_RSA_PUBKEY,bp,(unsigned char *)rsa));
+       }
 #endif
 
 #ifndef NO_DSA
@@ -329,6 +353,18 @@
        {
        return(ASN1_i2d_fp(i2d_DSAPrivateKey,fp,(unsigned char *)dsa));
        }
+
+DSA *d2i_DSA_PUBKEY_fp(FILE *fp, DSA **dsa)
+       {
+       return((DSA *)ASN1_d2i_fp((char *(*)())
+               DSA_new,(char *(*)())d2i_DSA_PUBKEY, (fp),
+               (unsigned char **)(dsa)));
+       }
+
+int i2d_DSA_PUBKEY_fp(FILE *fp, DSA *dsa)
+       {
+       return(ASN1_i2d_fp(i2d_DSA_PUBKEY,fp,(unsigned char *)dsa));
+       }
 #endif
 
 DSA *d2i_DSAPrivateKey_bio(BIO *bp, DSA **dsa)
@@ -342,6 +378,19 @@
        {
        return(ASN1_i2d_bio(i2d_DSAPrivateKey,bp,(unsigned char *)dsa));
        }
+
+DSA *d2i_DSA_PUBKEY_bio(BIO *bp, DSA **dsa)
+       {
+       return((DSA *)ASN1_d2i_bio((char *(*)())
+               DSA_new,(char *(*)())d2i_DSA_PUBKEY, (bp),
+               (unsigned char **)(dsa)));
+       }
+
+int i2d_DSA_PUBKEY_bio(BIO *bp, DSA *dsa)
+       {
+       return(ASN1_i2d_bio(i2d_DSA_PUBKEY,bp,(unsigned char *)dsa));
+       }
+
 #endif
 
 X509_ALGOR *X509_ALGOR_dup(X509_ALGOR *xn)
@@ -362,19 +411,19 @@
                (char *(*)())d2i_X509_NAME_ENTRY,(char *)ne));
        }
 
-int X509_digest(X509 *data, EVP_MD *type, unsigned char *md,
+int X509_digest(X509 *data, const EVP_MD *type, unsigned char *md,
             unsigned int *len)
        {
        return(ASN1_digest((int (*)())i2d_X509,type,(char *)data,md,len));
        }
 
-int X509_NAME_digest(X509_NAME *data, EVP_MD *type, unsigned char *md,
+int X509_NAME_digest(X509_NAME *data, const EVP_MD *type, unsigned char *md,
             unsigned int *len)
        {
        return(ASN1_digest((int (*)())i2d_X509_NAME,type,(char *)data,md,len));
        }
 
-int PKCS7_ISSUER_AND_SERIAL_digest(PKCS7_ISSUER_AND_SERIAL *data, EVP_MD *type,
+int PKCS7_ISSUER_AND_SERIAL_digest(PKCS7_ISSUER_AND_SERIAL *data, const EVP_MD *type,
             unsigned char *md, unsigned int *len)
        {
        return(ASN1_digest((int (*)())i2d_PKCS7_ISSUER_AND_SERIAL,type,
@@ -420,6 +469,29 @@
        {
        return(ASN1_i2d_fp(i2d_PKCS8_PRIV_KEY_INFO,fp,(unsigned char *)p8inf));
        }
+
+int i2d_PKCS8PrivateKeyInfo_fp(FILE *fp, EVP_PKEY *key)
+       {
+       PKCS8_PRIV_KEY_INFO *p8inf;
+       int ret;
+       p8inf = EVP_PKEY2PKCS8(key);
+       if(!p8inf) return 0;
+       ret = i2d_PKCS8_PRIV_KEY_INFO_fp(fp, p8inf);
+       PKCS8_PRIV_KEY_INFO_free(p8inf);
+       return ret;
+       }
+
+int i2d_PrivateKey_fp(FILE *fp, EVP_PKEY *pkey)
+       {
+       return(ASN1_i2d_fp(i2d_PrivateKey,fp,(unsigned char *)pkey));
+       }
+
+EVP_PKEY *d2i_PrivateKey_fp(FILE *fp, EVP_PKEY **a)
+{
+       return((EVP_PKEY *)ASN1_d2i_fp((char *(*)())EVP_PKEY_new,
+               (char *(*)())d2i_AutoPrivateKey, (fp),(unsigned char **)(a)));
+}
+
 #endif
 
 PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_bio(BIO *bp,
@@ -434,4 +506,26 @@
 int i2d_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, PKCS8_PRIV_KEY_INFO *p8inf)
        {
        return(ASN1_i2d_bio(i2d_PKCS8_PRIV_KEY_INFO,bp,(unsigned char *)p8inf));
+       }
+
+int i2d_PKCS8PrivateKeyInfo_bio(BIO *bp, EVP_PKEY *key)
+       {
+       PKCS8_PRIV_KEY_INFO *p8inf;
+       int ret;
+       p8inf = EVP_PKEY2PKCS8(key);
+       if(!p8inf) return 0;
+       ret = i2d_PKCS8_PRIV_KEY_INFO_bio(bp, p8inf);
+       PKCS8_PRIV_KEY_INFO_free(p8inf);
+       return ret;
+       }
+
+int i2d_PrivateKey_bio(BIO *bp, EVP_PKEY *pkey)
+       {
+       return(ASN1_i2d_bio(i2d_PrivateKey,bp,(unsigned char *)pkey));
+       }
+
+EVP_PKEY *d2i_PrivateKey_bio(BIO *bp, EVP_PKEY **a)
+       {
+       return((EVP_PKEY *)ASN1_d2i_bio((char *(*)())EVP_PKEY_new,
+               (char *(*)())d2i_AutoPrivateKey, (bp),(unsigned char **)(a)));
        }
Index: opensa/openssl/crypto/x509v3/makefile.ssl
diff -u opensa/openssl/crypto/x509v3/makefile.ssl:1.1 
opensa/openssl/crypto/x509v3/makefile.ssl:1.2
--- opensa/openssl/crypto/x509v3/makefile.ssl:1.1       Tue Jan 25 23:20:48 2000
+++ opensa/openssl/crypto/x509v3/makefile.ssl   Thu Mar  2 21:12:02 2000
@@ -24,10 +24,10 @@
 LIB=$(TOP)/libcrypto.a
 LIBSRC=        v3_bcons.c v3_bitst.c v3_conf.c v3_extku.c v3_ia5.c \
 v3_lib.c v3_prn.c v3_utl.c v3err.c v3_genn.c v3_alt.c v3_skey.c v3_akey.c \
-v3_pku.c v3_int.c v3_enum.c v3_sxnet.c v3_cpols.c v3_crld.c
+v3_pku.c v3_int.c v3_enum.c v3_sxnet.c v3_cpols.c v3_crld.c v3_purp.c v3_info.c
 LIBOBJ= v3_bcons.o v3_bitst.o v3_conf.o v3_extku.o v3_ia5.o v3_lib.o \
 v3_prn.o v3_utl.o v3err.o v3_genn.o v3_alt.o v3_skey.o v3_akey.o v3_pku.o \
-v3_int.o v3_enum.o v3_sxnet.o v3_cpols.o v3_crld.o
+v3_int.o v3_enum.o v3_sxnet.o v3_cpols.o v3_crld.o v3_purp.o v3_info.o
 
 SRC= $(LIBSRC)
 
@@ -285,6 +285,25 @@
 v3_ia5.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 v3_ia5.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
 v3_ia5.o: ../../include/openssl/x509v3.h ../cryptlib.h
+v3_info.o: ../../include/openssl/asn1.h ../../include/openssl/asn1_mac.h
+v3_info.o: ../../include/openssl/bio.h ../../include/openssl/blowfish.h
+v3_info.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
+v3_info.o: ../../include/openssl/cast.h ../../include/openssl/conf.h
+v3_info.o: ../../include/openssl/crypto.h ../../include/openssl/des.h
+v3_info.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h
+v3_info.o: ../../include/openssl/e_os.h ../../include/openssl/e_os2.h
+v3_info.o: ../../include/openssl/err.h ../../include/openssl/evp.h
+v3_info.o: ../../include/openssl/idea.h ../../include/openssl/lhash.h
+v3_info.o: ../../include/openssl/md2.h ../../include/openssl/md5.h
+v3_info.o: ../../include/openssl/mdc2.h ../../include/openssl/objects.h
+v3_info.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
+v3_info.o: ../../include/openssl/pkcs7.h ../../include/openssl/rc2.h
+v3_info.o: ../../include/openssl/rc4.h ../../include/openssl/rc5.h
+v3_info.o: ../../include/openssl/ripemd.h ../../include/openssl/rsa.h
+v3_info.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
+v3_info.o: ../../include/openssl/stack.h ../../include/openssl/x509.h
+v3_info.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h
+v3_info.o: ../cryptlib.h
 v3_int.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
 v3_int.o: ../../include/openssl/blowfish.h ../../include/openssl/bn.h
 v3_int.o: ../../include/openssl/buffer.h ../../include/openssl/cast.h
@@ -320,7 +339,7 @@
 v3_lib.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
 v3_lib.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 v3_lib.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
-v3_lib.o: ../../include/openssl/x509v3.h ../cryptlib.h
+v3_lib.o: ../../include/openssl/x509v3.h ../cryptlib.h ext_dat.h
 v3_pku.o: ../../include/openssl/asn1.h ../../include/openssl/asn1_mac.h
 v3_pku.o: ../../include/openssl/bio.h ../../include/openssl/blowfish.h
 v3_pku.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
@@ -358,6 +377,24 @@
 v3_prn.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 v3_prn.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
 v3_prn.o: ../../include/openssl/x509v3.h ../cryptlib.h
+v3_purp.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
+v3_purp.o: ../../include/openssl/blowfish.h ../../include/openssl/bn.h
+v3_purp.o: ../../include/openssl/buffer.h ../../include/openssl/cast.h
+v3_purp.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
+v3_purp.o: ../../include/openssl/des.h ../../include/openssl/dh.h
+v3_purp.o: ../../include/openssl/dsa.h ../../include/openssl/e_os.h
+v3_purp.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
+v3_purp.o: ../../include/openssl/evp.h ../../include/openssl/idea.h
+v3_purp.o: ../../include/openssl/lhash.h ../../include/openssl/md2.h
+v3_purp.o: ../../include/openssl/md5.h ../../include/openssl/mdc2.h
+v3_purp.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
+v3_purp.o: ../../include/openssl/opensslv.h ../../include/openssl/pkcs7.h
+v3_purp.o: ../../include/openssl/rc2.h ../../include/openssl/rc4.h
+v3_purp.o: ../../include/openssl/rc5.h ../../include/openssl/ripemd.h
+v3_purp.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
+v3_purp.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
+v3_purp.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
+v3_purp.o: ../../include/openssl/x509v3.h ../cryptlib.h
 v3_skey.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
 v3_skey.o: ../../include/openssl/blowfish.h ../../include/openssl/bn.h
 v3_skey.o: ../../include/openssl/buffer.h ../../include/openssl/cast.h
Index: opensa/openssl/crypto/x509v3/v3_akey.c
diff -u opensa/openssl/crypto/x509v3/v3_akey.c:1.1 
opensa/openssl/crypto/x509v3/v3_akey.c:1.2
--- opensa/openssl/crypto/x509v3/v3_akey.c:1.1  Tue Jan 25 23:20:48 2000
+++ opensa/openssl/crypto/x509v3/v3_akey.c      Thu Mar  2 21:12:02 2000
@@ -129,10 +129,10 @@
 void AUTHORITY_KEYID_free(AUTHORITY_KEYID *a)
 {
        if (a == NULL) return;
-       ASN1_OCTET_STRING_free(a->keyid);
+       M_ASN1_OCTET_STRING_free(a->keyid);
        sk_GENERAL_NAME_pop_free(a->issuer, GENERAL_NAME_free);
-       ASN1_INTEGER_free (a->serial);
-       Free ((char *)a);
+       M_ASN1_INTEGER_free (a->serial);
+       Free (a);
 }
 
 static STACK_OF(CONF_VALUE) *i2v_AUTHORITY_KEYID(X509V3_EXT_METHOD *method,
@@ -214,7 +214,7 @@
 
 if((issuer && !ikeyid) || (issuer == 2)) {
        isname = X509_NAME_dup(X509_get_issuer_name(cert));
-       serial = ASN1_INTEGER_dup(X509_get_serialNumber(cert));
+       serial = M_ASN1_INTEGER_dup(X509_get_serialNumber(cert));
        if(!isname || !serial) {
                
X509V3err(X509V3_F_V2I_AUTHORITY_KEYID,X509V3_R_UNABLE_TO_GET_ISSUER_DETAILS);
                goto err;
@@ -241,8 +241,8 @@
 
 err:
 X509_NAME_free(isname);
-ASN1_INTEGER_free(serial);
-ASN1_OCTET_STRING_free(ikeyid);
+M_ASN1_INTEGER_free(serial);
+M_ASN1_OCTET_STRING_free(ikeyid);
 return NULL;
 
 }
Index: opensa/openssl/crypto/x509v3/v3_alt.c
diff -u opensa/openssl/crypto/x509v3/v3_alt.c:1.1 
opensa/openssl/crypto/x509v3/v3_alt.c:1.2
--- opensa/openssl/crypto/x509v3/v3_alt.c:1.1   Tue Jan 25 23:20:48 2000
+++ opensa/openssl/crypto/x509v3/v3_alt.c       Thu Mar  2 21:12:02 2000
@@ -84,7 +84,6 @@
 (X509V3_EXT_I2V)i2v_GENERAL_NAMES,
 (X509V3_EXT_V2I)v2i_issuer_alt,
 NULL, NULL, NULL},
-EXT_END
 };
 
 STACK_OF(CONF_VALUE) *i2v_GENERAL_NAMES(X509V3_EXT_METHOD *method,
@@ -273,7 +272,7 @@
        while((i = X509_NAME_get_index_by_NID(nm,
                                         NID_pkcs9_emailAddress, i)) > 0) {
                ne = X509_NAME_get_entry(nm, i);
-               email = ASN1_IA5STRING_dup(X509_NAME_ENTRY_get_data(ne));
+               email = M_ASN1_IA5STRING_dup(X509_NAME_ENTRY_get_data(ne));
                if(!email || !(gen = GENERAL_NAME_new())) {
                        X509V3err(X509V3_F_COPY_EMAIL,ERR_R_MALLOC_FAILURE);
                        goto err;
@@ -293,7 +292,7 @@
                
        err:
        GENERAL_NAME_free(gen);
-       ASN1_IA5STRING_free(email);
+       M_ASN1_IA5STRING_free(email);
        return 0;
        
 }
@@ -371,7 +370,7 @@
                goto err;
        }
        ip[0] = i1; ip[1] = i2 ; ip[2] = i3 ; ip[3] = i4;
-       if(!(gen->d.ip = ASN1_OCTET_STRING_new()) ||
+       if(!(gen->d.ip = M_ASN1_OCTET_STRING_new()) ||
                !ASN1_STRING_set(gen->d.ip, ip, 4)) {
                        X509V3err(X509V3_F_V2I_GENERAL_NAME,ERR_R_MALLOC_FAILURE);
                        goto err;
@@ -384,7 +383,7 @@
 }
 
 if(is_string) {
-       if(!(gen->d.ia5 = ASN1_IA5STRING_new()) ||
+       if(!(gen->d.ia5 = M_ASN1_IA5STRING_new()) ||
                      !ASN1_STRING_set(gen->d.ia5, (unsigned char*)value,
                                       strlen(value))) {
                X509V3err(X509V3_F_V2I_GENERAL_NAME,ERR_R_MALLOC_FAILURE);
Index: opensa/openssl/crypto/x509v3/v3_bcons.c
diff -u opensa/openssl/crypto/x509v3/v3_bcons.c:1.1 
opensa/openssl/crypto/x509v3/v3_bcons.c:1.2
--- opensa/openssl/crypto/x509v3/v3_bcons.c:1.1 Tue Jan 25 23:20:48 2000
+++ opensa/openssl/crypto/x509v3/v3_bcons.c     Thu Mar  2 21:12:02 2000
@@ -122,8 +122,8 @@
 void BASIC_CONSTRAINTS_free(BASIC_CONSTRAINTS *a)
 {
        if (a == NULL) return;
-       ASN1_INTEGER_free (a->pathlen);
-       Free ((char *)a);
+       M_ASN1_INTEGER_free (a->pathlen);
+       Free (a);
 }
 
 static STACK_OF(CONF_VALUE) *i2v_BASIC_CONSTRAINTS(X509V3_EXT_METHOD *method,
Index: opensa/openssl/crypto/x509v3/v3_bitst.c
diff -u opensa/openssl/crypto/x509v3/v3_bitst.c:1.1 
opensa/openssl/crypto/x509v3/v3_bitst.c:1.2
--- opensa/openssl/crypto/x509v3/v3_bitst.c:1.1 Tue Jan 25 23:20:48 2000
+++ opensa/openssl/crypto/x509v3/v3_bitst.c     Thu Mar  2 21:12:02 2000
@@ -61,7 +61,6 @@
 #include <openssl/conf.h>
 #include <openssl/x509v3.h>
 
-static ASN1_BIT_STRING *asn1_bit_string_new(void);
 static ASN1_BIT_STRING *v2i_ASN1_BIT_STRING(X509V3_EXT_METHOD *method,
                                X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *nval);
 static STACK_OF(CONF_VALUE) *i2v_ASN1_BIT_STRING(X509V3_EXT_METHOD *method,
@@ -97,11 +96,6 @@
 X509V3_EXT_METHOD v3_nscert = EXT_BITSTRING(NID_netscape_cert_type, 
ns_cert_type_table);
 X509V3_EXT_METHOD v3_key_usage = EXT_BITSTRING(NID_key_usage, key_usage_type_table);
 
-static ASN1_BIT_STRING *asn1_bit_string_new(void)
-{
-       return ASN1_BIT_STRING_new();
-}
-
 static STACK_OF(CONF_VALUE) *i2v_ASN1_BIT_STRING(X509V3_EXT_METHOD *method,
             ASN1_BIT_STRING *bits, STACK_OF(CONF_VALUE) *ret)
 {
@@ -120,7 +114,7 @@
        ASN1_BIT_STRING *bs;
        int i;
        BIT_STRING_BITNAME *bnam;
-       if(!(bs = ASN1_BIT_STRING_new())) {
+       if(!(bs = M_ASN1_BIT_STRING_new())) {
                X509V3err(X509V3_F_V2I_ASN1_BIT_STRING,ERR_R_MALLOC_FAILURE);
                return NULL;
        }
@@ -137,7 +131,7 @@
                        X509V3err(X509V3_F_V2I_ASN1_BIT_STRING,
                                        X509V3_R_UNKNOWN_BIT_STRING_ARGUMENT);
                        X509V3_conf_err(val);
-                       ASN1_BIT_STRING_free(bs);
+                       M_ASN1_BIT_STRING_free(bs);
                        return NULL;
                }
        }
Index: opensa/openssl/crypto/x509v3/v3_conf.c
diff -u opensa/openssl/crypto/x509v3/v3_conf.c:1.1 
opensa/openssl/crypto/x509v3/v3_conf.c:1.2
--- opensa/openssl/crypto/x509v3/v3_conf.c:1.1  Tue Jan 25 23:20:48 2000
+++ opensa/openssl/crypto/x509v3/v3_conf.c      Thu Mar  2 21:12:02 2000
@@ -170,13 +170,13 @@
        if(!(ext_der = Malloc(ext_len))) goto merr;
        p = ext_der;
        method->i2d(ext_struc, &p);
-       if(!(ext_oct = ASN1_OCTET_STRING_new())) goto merr;
+       if(!(ext_oct = M_ASN1_OCTET_STRING_new())) goto merr;
        ext_oct->data = ext_der;
        ext_oct->length = ext_len;
        
        ext = X509_EXTENSION_create_by_NID(NULL, ext_nid, crit, ext_oct);
        if(!ext) goto merr;
-       ASN1_OCTET_STRING_free(ext_oct);
+       M_ASN1_OCTET_STRING_free(ext_oct);
 
        return ext;
 
@@ -220,7 +220,7 @@
        return 1;
 }
 
-/* Create a generic extension: for now just handle RAW type */
+/* Create a generic extension: for now just handle DER type */
 static X509_EXTENSION *v3_generic_extension(const char *ext, char *value,
             int crit, int type)
 {
@@ -241,7 +241,7 @@
        goto err;
 }
 
-if(!(oct = ASN1_OCTET_STRING_new())) {
+if(!(oct = M_ASN1_OCTET_STRING_new())) {
        X509V3err(X509V3_F_V3_GENERIC_EXTENSION,ERR_R_MALLOC_FAILURE);
        goto err;
 }
@@ -254,7 +254,7 @@
 
 err:
 ASN1_OBJECT_free(obj);
-ASN1_OCTET_STRING_free(oct);
+M_ASN1_OCTET_STRING_free(oct);
 if(ext_der) Free(ext_der);
 return extension;
 }
@@ -300,6 +300,30 @@
                X509_EXTENSION_free(ext);
        }
        return 1;
+}
+
+/* Add extensions to certificate request */
+
+int X509V3_EXT_REQ_add_conf(LHASH *conf, X509V3_CTX *ctx, char *section,
+            X509_REQ *req)
+{
+       X509_EXTENSION *ext;
+       STACK_OF(X509_EXTENSION) *extlist = NULL;
+       STACK_OF(CONF_VALUE) *nval;
+       CONF_VALUE *val;        
+       int i;
+       if(!(nval = CONF_get_section(conf, section))) return 0;
+       for(i = 0; i < sk_CONF_VALUE_num(nval); i++) {
+               val = sk_CONF_VALUE_value(nval, i);
+               if(!(ext = X509V3_EXT_conf(conf, ctx, val->name, val->value)))
+                                                               return 0;
+               if(!extlist) extlist = sk_X509_EXTENSION_new_null();
+               sk_X509_EXTENSION_push(extlist, ext);
+       }
+       if(req) i = X509_REQ_add_extensions(req, extlist);
+       else i = 1;
+       sk_X509_EXTENSION_pop_free(extlist, X509_EXTENSION_free);
+       return i;
 }
 
 /* Config database functions */
Index: opensa/openssl/crypto/x509v3/v3_cpols.c
diff -u opensa/openssl/crypto/x509v3/v3_cpols.c:1.1 
opensa/openssl/crypto/x509v3/v3_cpols.c:1.2
--- opensa/openssl/crypto/x509v3/v3_cpols.c:1.1 Tue Jan 25 23:20:48 2000
+++ opensa/openssl/crypto/x509v3/v3_cpols.c     Thu Mar  2 21:12:02 2000
@@ -169,7 +169,7 @@
                        if(!sk_POLICYQUALINFO_push(pol->qualifiers, qual))
                                                                 goto merr;
                        qual->pqualid = OBJ_nid2obj(NID_id_qt_cps);
-                       qual->d.cpsuri = ASN1_IA5STRING_new();
+                       qual->d.cpsuri = M_ASN1_IA5STRING_new();
                        if(!ASN1_STRING_set(qual->d.cpsuri, cnf->value,
                                                 strlen(cnf->value))) goto merr;
                } else if(!name_cmp(cnf->name, "userNotice")) {
@@ -229,7 +229,7 @@
        for(i = 0; i < sk_CONF_VALUE_num(unot); i++) {
                cnf = sk_CONF_VALUE_value(unot, i);
                if(!strcmp(cnf->name, "explicitText")) {
-                       not->exptext = ASN1_VISIBLESTRING_new();
+                       not->exptext = M_ASN1_VISIBLESTRING_new();
                        if(!ASN1_STRING_set(not->exptext, cnf->value,
                                                 strlen(cnf->value))) goto merr;
                } else if(!strcmp(cnf->name, "organization")) {
@@ -238,8 +238,8 @@
                                if(!(nref = NOTICEREF_new())) goto merr;
                                not->noticeref = nref;
                        } else nref = not->noticeref;
-                       if(ia5org) nref->organization = ASN1_IA5STRING_new();
-                       else nref->organization = ASN1_VISIBLESTRING_new();
+                       if(ia5org) nref->organization = M_ASN1_IA5STRING_new();
+                       else nref->organization = M_ASN1_VISIBLESTRING_new();
                        if(!ASN1_STRING_set(nref->organization, cnf->value,
                                                 strlen(cnf->value))) goto merr;
                } else if(!strcmp(cnf->name, "noticeNumbers")) {
@@ -538,7 +538,7 @@
        if (a == NULL) return;
        switch(OBJ_obj2nid(a->pqualid)) {
                case NID_id_qt_cps:
-               ASN1_IA5STRING_free(a->d.cpsuri);
+               M_ASN1_IA5STRING_free(a->d.cpsuri);
                break;
 
                case NID_id_qt_unotice:
@@ -596,7 +596,7 @@
 {
        if (a == NULL) return;
        NOTICEREF_free(a->noticeref);
-       DISPLAYTEXT_free(a->exptext);
+       M_DISPLAYTEXT_free(a->exptext);
        Free (a);
 }
 
@@ -646,7 +646,7 @@
 void NOTICEREF_free(NOTICEREF *a)
 {
        if (a == NULL) return;
-       DISPLAYTEXT_free(a->organization);
+       M_DISPLAYTEXT_free(a->organization);
        sk_pop_free(a->noticenos, ASN1_STRING_free);
        Free (a);
 }
Index: opensa/openssl/crypto/x509v3/v3_crld.c
diff -u opensa/openssl/crypto/x509v3/v3_crld.c:1.1 
opensa/openssl/crypto/x509v3/v3_crld.c:1.2
--- opensa/openssl/crypto/x509v3/v3_crld.c:1.1  Tue Jan 25 23:20:48 2000
+++ opensa/openssl/crypto/x509v3/v3_crld.c      Thu Mar  2 21:12:02 2000
@@ -211,20 +211,20 @@
 {
        if (a == NULL) return;
        DIST_POINT_NAME_free(a->distpoint);
-       ASN1_BIT_STRING_free(a->reasons);
+       M_ASN1_BIT_STRING_free(a->reasons);
        sk_GENERAL_NAME_pop_free(a->CRLissuer, GENERAL_NAME_free);
-       Free ((char *)a);
+       Free (a);
 }
 
 int i2d_DIST_POINT_NAME(DIST_POINT_NAME *a, unsigned char **pp)
 {
-       int v = 0;
        M_ASN1_I2D_vars(a);
 
        if(a->fullname) {
                M_ASN1_I2D_len_IMP_opt (a->fullname, i2d_GENERAL_NAMES);
        } else {
-               M_ASN1_I2D_len_EXP_opt (a->relativename, i2d_X509_NAME, 1, v);
+               M_ASN1_I2D_len_IMP_SET_opt_type(X509_NAME_ENTRY,
+                               a->relativename, i2d_X509_NAME_ENTRY, 1);
        }
 
        /* Don't want a SEQUENCE so... */
@@ -234,7 +234,8 @@
        if(a->fullname) {
                M_ASN1_I2D_put_IMP_opt (a->fullname, i2d_GENERAL_NAMES, 0);
        } else {
-               M_ASN1_I2D_put_EXP_opt (a->relativename, i2d_X509_NAME, 1, v);
+               M_ASN1_I2D_put_IMP_SET_opt_type(X509_NAME_ENTRY,
+                               a->relativename, i2d_X509_NAME_ENTRY, 1);
        }
        M_ASN1_I2D_finish();
 }
@@ -253,9 +254,9 @@
 void DIST_POINT_NAME_free(DIST_POINT_NAME *a)
 {
        if (a == NULL) return;
-       X509_NAME_free(a->relativename);
+       sk_X509_NAME_ENTRY_pop_free(a->relativename, X509_NAME_ENTRY_free);
        sk_GENERAL_NAME_pop_free(a->fullname, GENERAL_NAME_free);
-       Free ((char *)a);
+       Free (a);
 }
 
 DIST_POINT_NAME *d2i_DIST_POINT_NAME(DIST_POINT_NAME **a, unsigned char **pp,
@@ -273,7 +274,8 @@
                M_ASN1_D2I_get_imp(ret->fullname, d2i_GENERAL_NAMES,
                                                        V_ASN1_SEQUENCE);
        } else if (tag == (1|V_ASN1_CONTEXT_SPECIFIC)) {
-               M_ASN1_D2I_get_EXP_opt (ret->relativename, d2i_X509_NAME, 1);
+               M_ASN1_D2I_get_IMP_set_opt_type (X509_NAME_ENTRY,
+                       ret->relativename, d2i_X509_NAME_ENTRY, X509_NAME_ENTRY_free, 
+1);
        } else {
                c.error = ASN1_R_BAD_TAG;
                goto err;
Index: opensa/openssl/crypto/x509v3/v3_enum.c
diff -u opensa/openssl/crypto/x509v3/v3_enum.c:1.1 
opensa/openssl/crypto/x509v3/v3_enum.c:1.2
--- opensa/openssl/crypto/x509v3/v3_enum.c:1.1  Tue Jan 25 23:20:48 2000
+++ opensa/openssl/crypto/x509v3/v3_enum.c      Thu Mar  2 21:12:02 2000
@@ -60,8 +60,6 @@
 #include "cryptlib.h"
 #include <openssl/x509v3.h>
 
-static ASN1_ENUMERATED *asn1_enumerated_new(void);
-
 static ENUMERATED_NAMES crl_reasons[] = {
 {0, "Unspecified", "unspecified"},
 {1, "Key Compromise", "keyCompromise"},
@@ -76,19 +74,14 @@
 
 X509V3_EXT_METHOD v3_crl_reason = { 
 NID_crl_reason, 0,
-(X509V3_EXT_NEW)asn1_enumerated_new,
-(X509V3_EXT_FREE)ASN1_STRING_free,
+(X509V3_EXT_NEW)ASN1_ENUMERATED_new,
+(X509V3_EXT_FREE)ASN1_ENUMERATED_free,
 (X509V3_EXT_D2I)d2i_ASN1_ENUMERATED,
 (X509V3_EXT_I2D)i2d_ASN1_ENUMERATED,
 (X509V3_EXT_I2S)i2s_ASN1_ENUMERATED_TABLE,
-(X509V3_EXT_S2I)NULL,
+(X509V3_EXT_S2I)0,
 NULL, NULL, NULL, NULL, crl_reasons};
 
-
-static ASN1_ENUMERATED *asn1_enumerated_new(void)
-{
-       return ASN1_ENUMERATED_new();
-}
 
 char *i2s_ASN1_ENUMERATED_TABLE(X509V3_EXT_METHOD *method,
             ASN1_ENUMERATED *e)
Index: opensa/openssl/crypto/x509v3/v3_genn.c
diff -u opensa/openssl/crypto/x509v3/v3_genn.c:1.1 
opensa/openssl/crypto/x509v3/v3_genn.c:1.2
--- opensa/openssl/crypto/x509v3/v3_genn.c:1.1  Tue Jan 25 23:20:48 2000
+++ opensa/openssl/crypto/x509v3/v3_genn.c      Thu Mar  2 21:12:02 2000
@@ -88,12 +88,15 @@
 
        switch(a->type) {
 
-               case GEN_OTHERNAME:
                case GEN_X400:
                case GEN_EDIPARTY:
                ret = i2d_ASN1_TYPE(a->d.other, pp);
                break;
 
+               case GEN_OTHERNAME:
+               ret = i2d_OTHERNAME(a->d.otherName, pp);
+               break;
+
                case GEN_EMAIL:
                case GEN_DNS:
                case GEN_URI:
@@ -137,12 +140,15 @@
 
        switch(ret->type) {
                /* Just put these in a "blob" for now */
-               case GEN_OTHERNAME:
                case GEN_X400:
                case GEN_EDIPARTY:
                M_ASN1_D2I_get_imp(ret->d.other, d2i_ASN1_TYPE,V_ASN1_SEQUENCE);
                break;
 
+               case GEN_OTHERNAME:
+               M_ASN1_D2I_get_imp(ret->d.otherName, d2i_OTHERNAME,V_ASN1_SEQUENCE);
+               break;
+
                case GEN_EMAIL:
                case GEN_DNS:
                case GEN_URI:
@@ -176,17 +182,20 @@
 {
        if (a == NULL) return;
        switch(a->type) {
-               case GEN_OTHERNAME:
                case GEN_X400:
                case GEN_EDIPARTY:
                ASN1_TYPE_free(a->d.other);
                break;
 
+               case GEN_OTHERNAME:
+               OTHERNAME_free(a->d.otherName);
+               break;
+
                case GEN_EMAIL:
                case GEN_DNS:
                case GEN_URI:
 
-               ASN1_IA5STRING_free(a->d.ia5);
+               M_ASN1_IA5STRING_free(a->d.ia5);
                break;
 
                case GEN_DIRNAME:
@@ -194,7 +203,7 @@
                break;
 
                case GEN_IPADD:
-               ASN1_OCTET_STRING_free(a->d.ip);
+               M_ASN1_OCTET_STRING_free(a->d.ip);
                break;
        
                case GEN_RID:
@@ -202,11 +211,11 @@
                break;
 
        }
-       Free ((char *)a);
+       Free (a);
 }
 
-/* Now the GeneralNames versions: a SEQUENCE OF GeneralName These are needed as
- * an explicit functions.
+/* Now the GeneralNames versions: a SEQUENCE OF GeneralName. These are needed as
+ * explicit functions.
  */
 
 STACK_OF(GENERAL_NAME) *GENERAL_NAMES_new()
@@ -234,4 +243,49 @@
 
 IMPLEMENT_STACK_OF(GENERAL_NAME)
 IMPLEMENT_ASN1_SET_OF(GENERAL_NAME)
+
+int i2d_OTHERNAME(OTHERNAME *a, unsigned char **pp)
+{
+       int v = 0;
+       M_ASN1_I2D_vars(a);
+
+       M_ASN1_I2D_len(a->type_id, i2d_ASN1_OBJECT);
+       M_ASN1_I2D_len_EXP_opt(a->value, i2d_ASN1_TYPE, 0, v);
+
+       M_ASN1_I2D_seq_total();
+
+       M_ASN1_I2D_put(a->type_id, i2d_ASN1_OBJECT);
+       M_ASN1_I2D_put_EXP_opt(a->value, i2d_ASN1_TYPE, 0, v);
+
+       M_ASN1_I2D_finish();
+}
+
+OTHERNAME *OTHERNAME_new(void)
+{
+       OTHERNAME *ret=NULL;
+       ASN1_CTX c;
+       M_ASN1_New_Malloc(ret, OTHERNAME);
+       ret->type_id = OBJ_nid2obj(NID_undef);
+       M_ASN1_New(ret->value, ASN1_TYPE_new);
+       return (ret);
+       M_ASN1_New_Error(ASN1_F_OTHERNAME_NEW);
+}
+
+OTHERNAME *d2i_OTHERNAME(OTHERNAME **a, unsigned char **pp, long length)
+{
+       M_ASN1_D2I_vars(a,OTHERNAME *,OTHERNAME_new);
+       M_ASN1_D2I_Init();
+       M_ASN1_D2I_start_sequence();
+       M_ASN1_D2I_get(ret->type_id, d2i_ASN1_OBJECT);
+       M_ASN1_D2I_get_EXP_opt(ret->value, d2i_ASN1_TYPE, 0);
+       M_ASN1_D2I_Finish(a, OTHERNAME_free, ASN1_F_D2I_OTHERNAME);
+}
+
+void OTHERNAME_free(OTHERNAME *a)
+{
+       if (a == NULL) return;
+       ASN1_OBJECT_free(a->type_id);
+       ASN1_TYPE_free(a->value);
+       Free (a);
+}
 
Index: opensa/openssl/crypto/x509v3/v3_ia5.c
diff -u opensa/openssl/crypto/x509v3/v3_ia5.c:1.1 
opensa/openssl/crypto/x509v3/v3_ia5.c:1.2
--- opensa/openssl/crypto/x509v3/v3_ia5.c:1.1   Tue Jan 25 23:20:48 2000
+++ opensa/openssl/crypto/x509v3/v3_ia5.c       Thu Mar  2 21:12:02 2000
@@ -63,7 +63,6 @@
 #include <openssl/conf.h>
 #include <openssl/x509v3.h>
 
-static ASN1_IA5STRING *ia5string_new(void);
 static char *i2s_ASN1_IA5STRING(X509V3_EXT_METHOD *method, ASN1_IA5STRING *ia5);
 static ASN1_IA5STRING *s2i_ASN1_IA5STRING(X509V3_EXT_METHOD *method, X509V3_CTX *ctx, 
char *str);
 X509V3_EXT_METHOD v3_ns_ia5_list[] = { 
@@ -78,11 +77,6 @@
 };
 
 
-static ASN1_IA5STRING *ia5string_new(void)
-{
-       return ASN1_IA5STRING_new();
-}
-
 static char *i2s_ASN1_IA5STRING(X509V3_EXT_METHOD *method,
             ASN1_IA5STRING *ia5)
 {
@@ -102,12 +96,15 @@
                X509V3err(X509V3_F_S2I_ASN1_IA5STRING,X509V3_R_INVALID_NULL_ARGUMENT);
                return NULL;
        }
-       if(!(ia5 = ASN1_IA5STRING_new())) goto err;
+       if(!(ia5 = M_ASN1_IA5STRING_new())) goto err;
        if(!ASN1_STRING_set((ASN1_STRING *)ia5, (unsigned char*)str,
                            strlen(str))) {
-               ASN1_IA5STRING_free(ia5);
+               M_ASN1_IA5STRING_free(ia5);
                goto err;
        }
+#ifdef CHARSET_EBCDIC
+        ebcdic2ascii(ia5->data, ia5->data, ia5->length);
+#endif /*CHARSET_EBCDIC*/
        return ia5;
        err:
        X509V3err(X509V3_F_S2I_ASN1_IA5STRING,ERR_R_MALLOC_FAILURE);
Index: opensa/openssl/crypto/x509v3/v3_int.c
diff -u opensa/openssl/crypto/x509v3/v3_int.c:1.1 
opensa/openssl/crypto/x509v3/v3_int.c:1.2
--- opensa/openssl/crypto/x509v3/v3_int.c:1.1   Tue Jan 25 23:20:48 2000
+++ opensa/openssl/crypto/x509v3/v3_int.c       Thu Mar  2 21:12:02 2000
@@ -60,20 +60,13 @@
 #include "cryptlib.h"
 #include <openssl/x509v3.h>
 
-static ASN1_INTEGER *asn1_integer_new(void);
-
 X509V3_EXT_METHOD v3_crl_num = { 
 NID_crl_number, 0,
-(X509V3_EXT_NEW)asn1_integer_new,
-(X509V3_EXT_FREE)ASN1_STRING_free,
+(X509V3_EXT_NEW)ASN1_INTEGER_new,
+(X509V3_EXT_FREE)ASN1_INTEGER_free,
 (X509V3_EXT_D2I)d2i_ASN1_INTEGER,
 (X509V3_EXT_I2D)i2d_ASN1_INTEGER,
 (X509V3_EXT_I2S)i2s_ASN1_INTEGER,
-(X509V3_EXT_S2I)NULL,
+(X509V3_EXT_S2I)0,
 NULL, NULL, NULL, NULL, NULL};
 
-
-static ASN1_INTEGER *asn1_integer_new(void)
-{
-       return ASN1_INTEGER_new();
-}
Index: opensa/openssl/crypto/x509v3/v3_lib.c
diff -u opensa/openssl/crypto/x509v3/v3_lib.c:1.1 
opensa/openssl/crypto/x509v3/v3_lib.c:1.2
--- opensa/openssl/crypto/x509v3/v3_lib.c:1.1   Tue Jan 25 23:20:48 2000
+++ opensa/openssl/crypto/x509v3/v3_lib.c       Thu Mar  2 21:12:02 2000
@@ -62,6 +62,8 @@
 #include <openssl/conf.h>
 #include <openssl/x509v3.h>
 
+#include "ext_dat.h"
+
 static STACK *ext_list = NULL;
 
 static int ext_cmp(X509V3_EXT_METHOD **a, X509V3_EXT_METHOD **b);
@@ -87,10 +89,15 @@
 
 X509V3_EXT_METHOD *X509V3_EXT_get_nid(int nid)
 {
-       X509V3_EXT_METHOD tmp;
+       X509V3_EXT_METHOD tmp, *t = &tmp, **ret;
        int idx;
+       if(nid < 0) return NULL;
        tmp.ext_nid = nid;
-       if(!ext_list || (tmp.ext_nid < 0) ) return NULL;
+       ret = (X509V3_EXT_METHOD **) OBJ_bsearch((char *)&t,
+                       (char *)standard_exts, STANDARD_EXTENSION_COUNT,
+                       sizeof(X509V3_EXT_METHOD *), (int (*)())ext_cmp);
+       if(ret) return *ret;
+       if(!ext_list) return NULL;
        idx = sk_find(ext_list, (char *)&tmp);
        if(idx == -1) return NULL;
        return (X509V3_EXT_METHOD *)sk_value(ext_list, idx);
@@ -125,7 +132,7 @@
        *tmpext = *ext;
        tmpext->ext_nid = nid_to;
        tmpext->ext_flags |= X509V3_EXT_DYNAMIC;
-       return 1;
+       return X509V3_EXT_add(tmpext);
 }
 
 void X509V3_EXT_cleanup(void)
@@ -139,28 +146,12 @@
        if(ext->ext_flags & X509V3_EXT_DYNAMIC) Free(ext);
 }
 
-extern X509V3_EXT_METHOD v3_bcons, v3_nscert, v3_key_usage, v3_ext_ku;
-extern X509V3_EXT_METHOD v3_pkey_usage_period, v3_sxnet;
-extern X509V3_EXT_METHOD v3_ns_ia5_list[], v3_alt[], v3_skey_id, v3_akey_id;
+/* Legacy function: we don't need to add standard extensions
+ * any more because they are now kept in ext_dat.h.
+ */
 
-extern X509V3_EXT_METHOD v3_crl_num, v3_crl_reason, v3_cpols, v3_crld;
-
 int X509V3_add_standard_extensions(void)
 {
-       X509V3_EXT_add_list(v3_ns_ia5_list);
-       X509V3_EXT_add_list(v3_alt);
-       X509V3_EXT_add(&v3_bcons);
-       X509V3_EXT_add(&v3_nscert);
-       X509V3_EXT_add(&v3_key_usage);
-       X509V3_EXT_add(&v3_ext_ku);
-       X509V3_EXT_add(&v3_skey_id);
-       X509V3_EXT_add(&v3_akey_id);
-       X509V3_EXT_add(&v3_pkey_usage_period);
-       X509V3_EXT_add(&v3_crl_num);
-       X509V3_EXT_add(&v3_sxnet);
-       X509V3_EXT_add(&v3_crl_reason);
-       X509V3_EXT_add(&v3_cpols);
-       X509V3_EXT_add(&v3_crld);
        return 1;
 }
 
@@ -175,3 +166,56 @@
        return method->d2i(NULL, &p, ext->value->length);
 }
 
+/* Get critical flag and decoded version of extension from a NID.
+ * The "idx" variable returns the last found extension and can
+ * be used to retrieve multiple extensions of the same NID.
+ * However multiple extensions with the same NID is usually
+ * due to a badly encoded certificate so if idx is NULL we
+ * choke if multiple extensions exist.
+ * The "crit" variable is set to the critical value.
+ * The return value is the decoded extension or NULL on
+ * error. The actual error can have several different causes,
+ * the value of *crit reflects the cause:
+ * >= 0, extension found but not decoded (reflects critical value).
+ * -1 extension not found.
+ * -2 extension occurs more than once.
+ */
+
+void *X509V3_get_d2i(STACK_OF(X509_EXTENSION) *x, int nid, int *crit, int *idx)
+{
+       int lastpos, i;
+       X509_EXTENSION *ex, *found_ex = NULL;
+       if(!x) {
+               if(idx) *idx = -1;
+               if(crit) *crit = -1;
+               return NULL;
+       }
+       if(idx) lastpos = *idx + 1;
+       else lastpos = 0;
+       if(lastpos < 0) lastpos = 0;
+       for(i = lastpos; i < sk_X509_EXTENSION_num(x); i++)
+       {
+               ex = sk_X509_EXTENSION_value(x, i);
+               if(OBJ_obj2nid(ex->object) == nid) {
+                       if(idx) {
+                               *idx = i;
+                               break;
+                       } else if(found_ex) {
+                               /* Found more than one */
+                               if(crit) *crit = -2;
+                               return NULL;
+                       }
+                       found_ex = ex;
+               }
+       }
+       if(found_ex) {
+               /* Found it */
+               if(crit) *crit = found_ex->critical;
+               return X509V3_EXT_d2i(found_ex);
+       }
+       
+       /* Extension not found */
+       if(idx) *idx = -1;
+       if(crit) *crit = -1;
+       return NULL;
+}
Index: opensa/openssl/crypto/x509v3/v3_pku.c
diff -u opensa/openssl/crypto/x509v3/v3_pku.c:1.1 
opensa/openssl/crypto/x509v3/v3_pku.c:1.2
--- opensa/openssl/crypto/x509v3/v3_pku.c:1.1   Tue Jan 25 23:20:48 2000
+++ opensa/openssl/crypto/x509v3/v3_pku.c       Thu Mar  2 21:12:02 2000
@@ -119,9 +119,9 @@
 void PKEY_USAGE_PERIOD_free(PKEY_USAGE_PERIOD *a)
 {
        if (a == NULL) return;
-       ASN1_GENERALIZEDTIME_free(a->notBefore);
-       ASN1_GENERALIZEDTIME_free(a->notAfter);
-       Free ((char *)a);
+       M_ASN1_GENERALIZEDTIME_free(a->notBefore);
+       M_ASN1_GENERALIZEDTIME_free(a->notAfter);
+       Free (a);
 }
 
 static int i2r_PKEY_USAGE_PERIOD(X509V3_EXT_METHOD *method,
Index: opensa/openssl/crypto/x509v3/v3_prn.c
diff -u opensa/openssl/crypto/x509v3/v3_prn.c:1.1 
opensa/openssl/crypto/x509v3/v3_prn.c:1.2
--- opensa/openssl/crypto/x509v3/v3_prn.c:1.1   Tue Jan 25 23:20:48 2000
+++ opensa/openssl/crypto/x509v3/v3_prn.c       Thu Mar  2 21:12:02 2000
@@ -81,7 +81,15 @@
                nval = sk_CONF_VALUE_value(val, i);
                if(!nval->name) BIO_puts(out, nval->value);
                else if(!nval->value) BIO_puts(out, nval->name);
+#ifndef CHARSET_EBCDIC
                else BIO_printf(out, "%s:%s", nval->name, nval->value);
+#else
+               else {
+                       char tmp[10240]; /* 10k is BIO_printf's limit anyway */
+                       ascii2ebcdic(tmp, nval->value, strlen(nval->value)+1);
+                       BIO_printf(out, "%s:%s", nval->name, tmp);
+               }
+#endif
                if(ml) BIO_puts(out, "\n");
        }
 }
@@ -103,7 +111,15 @@
                        ok = 0;
                        goto err;
                }
+#ifndef CHARSET_EBCDIC
                BIO_printf(out, "%*s%s", indent, "", value);
+#else
+               {
+                       char tmp[10240]; /* 10k is BIO_printf's limit anyway */
+                       ascii2ebcdic(tmp, value, strlen(value)+1);
+                       BIO_printf(out, "%*s%s", indent, "", tmp);
+               }
+#endif
        } else if(method->i2v) {
                if(!(nval = method->i2v(method, ext_str, NULL))) {
                        ok = 0;
Index: opensa/openssl/crypto/x509v3/v3_skey.c
diff -u opensa/openssl/crypto/x509v3/v3_skey.c:1.1 
opensa/openssl/crypto/x509v3/v3_skey.c:1.2
--- opensa/openssl/crypto/x509v3/v3_skey.c:1.1  Tue Jan 25 23:20:48 2000
+++ opensa/openssl/crypto/x509v3/v3_skey.c      Thu Mar  2 21:12:02 2000
@@ -61,24 +61,17 @@
 #include "cryptlib.h"
 #include <openssl/x509v3.h>
 
-static ASN1_OCTET_STRING *octet_string_new(void);
 static ASN1_OCTET_STRING *s2i_skey_id(X509V3_EXT_METHOD *method, X509V3_CTX *ctx, 
char *str);
 X509V3_EXT_METHOD v3_skey_id = { 
 NID_subject_key_identifier, 0,
-(X509V3_EXT_NEW)octet_string_new,
-(X509V3_EXT_FREE)ASN1_STRING_free,
+(X509V3_EXT_NEW)ASN1_OCTET_STRING_new,
+(X509V3_EXT_FREE)ASN1_OCTET_STRING_free,
 (X509V3_EXT_D2I)d2i_ASN1_OCTET_STRING,
 (X509V3_EXT_I2D)i2d_ASN1_OCTET_STRING,
 (X509V3_EXT_I2S)i2s_ASN1_OCTET_STRING,
 (X509V3_EXT_S2I)s2i_skey_id,
 NULL, NULL, NULL, NULL, NULL};
 
-
-static ASN1_OCTET_STRING *octet_string_new(void)
-{
-       return ASN1_OCTET_STRING_new();
-}
-
 char *i2s_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method,
             ASN1_OCTET_STRING *oct)
 {
@@ -91,13 +84,13 @@
        ASN1_OCTET_STRING *oct;
        long length;
 
-       if(!(oct = ASN1_OCTET_STRING_new())) {
+       if(!(oct = M_ASN1_OCTET_STRING_new())) {
                X509V3err(X509V3_F_S2I_ASN1_OCTET_STRING,ERR_R_MALLOC_FAILURE);
                return NULL;
        }
 
        if(!(oct->data = string_to_hex(str, &length))) {
-               ASN1_OCTET_STRING_free(oct);
+               M_ASN1_OCTET_STRING_free(oct);
                return NULL;
        }
 
@@ -118,7 +111,7 @@
 
        if(strcmp(str, "hash")) return s2i_ASN1_OCTET_STRING(method, ctx, str);
 
-       if(!(oct = ASN1_OCTET_STRING_new())) {
+       if(!(oct = M_ASN1_OCTET_STRING_new())) {
                X509V3err(X509V3_F_S2I_S2I_SKEY_ID,ERR_R_MALLOC_FAILURE);
                return NULL;
        }
@@ -143,7 +136,7 @@
        EVP_DigestUpdate(&md, pk->data, pk->length);
        EVP_DigestFinal(&md, pkey_dig, &diglen);
 
-       if(!ASN1_OCTET_STRING_set(oct, pkey_dig, diglen)) {
+       if(!M_ASN1_OCTET_STRING_set(oct, pkey_dig, diglen)) {
                X509V3err(X509V3_F_S2I_S2I_SKEY_ID,ERR_R_MALLOC_FAILURE);
                goto err;
        }
@@ -151,6 +144,6 @@
        return oct;
        
        err:
-       ASN1_OCTET_STRING_free(oct);
+       M_ASN1_OCTET_STRING_free(oct);
        return NULL;
 }
Index: opensa/openssl/crypto/x509v3/v3_sxnet.c
diff -u opensa/openssl/crypto/x509v3/v3_sxnet.c:1.1 
opensa/openssl/crypto/x509v3/v3_sxnet.c:1.2
--- opensa/openssl/crypto/x509v3/v3_sxnet.c:1.1 Tue Jan 25 23:20:48 2000
+++ opensa/openssl/crypto/x509v3/v3_sxnet.c     Thu Mar  2 21:12:02 2000
@@ -111,7 +111,7 @@
        SXNET *ret=NULL;
        ASN1_CTX c;
        M_ASN1_New_Malloc(ret, SXNET);
-       M_ASN1_New(ret->version,ASN1_INTEGER_new);
+       M_ASN1_New(ret->version,M_ASN1_INTEGER_new);
        M_ASN1_New(ret->ids,sk_SXNETID_new_null);
        return (ret);
        M_ASN1_New_Error(ASN1_F_SXNET_NEW);
@@ -130,7 +130,7 @@
 void SXNET_free(SXNET *a)
 {
        if (a == NULL) return;
-       ASN1_INTEGER_free(a->version);
+       M_ASN1_INTEGER_free(a->version);
        sk_SXNETID_pop_free(a->ids, SXNETID_free);
        Free (a);
 }
@@ -156,7 +156,7 @@
        ASN1_CTX c;
        M_ASN1_New_Malloc(ret, SXNETID);
        ret->zone = NULL;
-       M_ASN1_New(ret->user,ASN1_OCTET_STRING_new);
+       M_ASN1_New(ret->user,M_ASN1_OCTET_STRING_new);
        return (ret);
        M_ASN1_New_Error(ASN1_F_SXNETID_NEW);
 }
@@ -174,8 +174,8 @@
 void SXNETID_free(SXNETID *a)
 {
        if (a == NULL) return;
-       ASN1_INTEGER_free(a->zone);
-       ASN1_OCTET_STRING_free(a->user);
+       M_ASN1_INTEGER_free(a->zone);
+       M_ASN1_OCTET_STRING_free(a->user);
        Free (a);
 }
 
@@ -193,7 +193,7 @@
                tmp = i2s_ASN1_INTEGER(NULL, id->zone);
                BIO_printf(out, "\n%*sZone: %s, User: ", indent, "", tmp);
                Free(tmp);
-               ASN1_OCTET_STRING_print(out, id->user);
+               M_ASN1_OCTET_STRING_print(out, id->user);
        }
        return 1;
 }
@@ -244,9 +244,9 @@
             int userlen)
 {
        ASN1_INTEGER *izone = NULL;
-       if(!(izone = ASN1_INTEGER_new()) || !ASN1_INTEGER_set(izone, lzone)) {
+       if(!(izone = M_ASN1_INTEGER_new()) || !ASN1_INTEGER_set(izone, lzone)) {
                X509V3err(X509V3_F_SXNET_ADD_ID_ULONG,ERR_R_MALLOC_FAILURE);
-               ASN1_INTEGER_free(izone);
+               M_ASN1_INTEGER_free(izone);
                return 0;
        }
        return SXNET_add_id_INTEGER(psx, izone, user, userlen);
@@ -285,7 +285,7 @@
        if(!(id = SXNETID_new())) goto err;
        if(userlen == -1) userlen = strlen(user);
                
-       if(!ASN1_OCTET_STRING_set(id->user, user, userlen)) goto err;
+       if(!M_ASN1_OCTET_STRING_set(id->user, user, userlen)) goto err;
        if(!sk_SXNETID_push(sx->ids, id)) goto err;
        id->zone = zone;
        return 1;
@@ -307,7 +307,7 @@
                return NULL;
        }
        oct = SXNET_get_id_INTEGER(sx, izone);
-       ASN1_INTEGER_free(izone);
+       M_ASN1_INTEGER_free(izone);
        return oct;
 }
 
@@ -315,13 +315,13 @@
 {
        ASN1_INTEGER *izone = NULL;
        ASN1_OCTET_STRING *oct;
-       if(!(izone = ASN1_INTEGER_new()) || !ASN1_INTEGER_set(izone, lzone)) {
+       if(!(izone = M_ASN1_INTEGER_new()) || !ASN1_INTEGER_set(izone, lzone)) {
                X509V3err(X509V3_F_SXNET_GET_ID_ULONG,ERR_R_MALLOC_FAILURE);
-               ASN1_INTEGER_free(izone);
+               M_ASN1_INTEGER_free(izone);
                return NULL;
        }
        oct = SXNET_get_id_INTEGER(sx, izone);
-       ASN1_INTEGER_free(izone);
+       M_ASN1_INTEGER_free(izone);
        return oct;
 }
 
@@ -331,7 +331,7 @@
        int i;
        for(i = 0; i < sk_SXNETID_num(sx->ids); i++) {
                id = sk_SXNETID_value(sx->ids, i);
-               if(!ASN1_INTEGER_cmp(id->zone, zone)) return id->user;
+               if(!M_ASN1_INTEGER_cmp(id->zone, zone)) return id->user;
        }
        return NULL;
 }
Index: opensa/openssl/crypto/x509v3/v3_utl.c
diff -u opensa/openssl/crypto/x509v3/v3_utl.c:1.1 
opensa/openssl/crypto/x509v3/v3_utl.c:1.2
--- opensa/openssl/crypto/x509v3/v3_utl.c:1.1   Tue Jan 25 23:20:48 2000
+++ opensa/openssl/crypto/x509v3/v3_utl.c       Thu Mar  2 21:12:02 2000
@@ -104,7 +104,7 @@
        if(conf->name) Free(conf->name);
        if(conf->value) Free(conf->value);
        if(conf->section) Free(conf->section);
-       Free((char *)conf);
+       Free(conf);
 }
 
 int X509V3_add_value_bool(const char *name, int asn1_bool,
Index: opensa/openssl/crypto/x509v3/v3err.c
diff -u opensa/openssl/crypto/x509v3/v3err.c:1.1 
opensa/openssl/crypto/x509v3/v3err.c:1.2
--- opensa/openssl/crypto/x509v3/v3err.c:1.1    Tue Jan 25 23:20:48 2000
+++ opensa/openssl/crypto/x509v3/v3err.c        Thu Mar  2 21:12:02 2000
@@ -72,6 +72,7 @@
 {ERR_PACK(0,X509V3_F_HEX_TO_STRING,0), "hex_to_string"},
 {ERR_PACK(0,X509V3_F_I2S_ASN1_ENUMERATED,0),   "i2s_ASN1_ENUMERATED"},
 {ERR_PACK(0,X509V3_F_I2S_ASN1_INTEGER,0),      "i2s_ASN1_INTEGER"},
+{ERR_PACK(0,X509V3_F_I2V_AUTHORITY_INFO_ACCESS,0),     "I2V_AUTHORITY_INFO_ACCESS"},
 {ERR_PACK(0,X509V3_F_NOTICE_SECTION,0),        "NOTICE_SECTION"},
 {ERR_PACK(0,X509V3_F_NREF_NOS,0),      "NREF_NOS"},
 {ERR_PACK(0,X509V3_F_POLICY_SECTION,0),        "POLICY_SECTION"},
@@ -87,6 +88,7 @@
 {ERR_PACK(0,X509V3_F_SXNET_ADD_ID_ULONG,0),    "SXNET_add_id_ulong"},
 {ERR_PACK(0,X509V3_F_SXNET_GET_ID_ASC,0),      "SXNET_get_id_asc"},
 {ERR_PACK(0,X509V3_F_SXNET_GET_ID_ULONG,0),    "SXNET_get_id_ulong"},
+{ERR_PACK(0,X509V3_F_V2I_ACCESS_DESCRIPTION,0),        "V2I_ACCESS_DESCRIPTION"},
 {ERR_PACK(0,X509V3_F_V2I_ASN1_BIT_STRING,0),   "V2I_ASN1_BIT_STRING"},
 {ERR_PACK(0,X509V3_F_V2I_AUTHORITY_KEYID,0),   "V2I_AUTHORITY_KEYID"},
 {ERR_PACK(0,X509V3_F_V2I_BASIC_CONSTRAINTS,0), "V2I_BASIC_CONSTRAINTS"},
@@ -102,6 +104,7 @@
 {ERR_PACK(0,X509V3_F_X509V3_EXT_I2D,0),        "X509V3_EXT_i2d"},
 {ERR_PACK(0,X509V3_F_X509V3_GET_VALUE_BOOL,0), "X509V3_get_value_bool"},
 {ERR_PACK(0,X509V3_F_X509V3_PARSE_LIST,0),     "X509V3_parse_list"},
+{ERR_PACK(0,X509V3_F_X509_PURPOSE_ADD,0),      "X509_PURPOSE_add"},
 {0,NULL}
        };
 
@@ -132,6 +135,7 @@
 {X509V3_R_INVALID_OPTION                 ,"invalid option"},
 {X509V3_R_INVALID_POLICY_IDENTIFIER      ,"invalid policy identifier"},
 {X509V3_R_INVALID_SECTION                ,"invalid section"},
+{X509V3_R_INVALID_SYNTAX                 ,"invalid syntax"},
 {X509V3_R_ISSUER_DECODE_ERROR            ,"issuer decode error"},
 {X509V3_R_MISSING_VALUE                  ,"missing value"},
 {X509V3_R_NEED_ORGANIZATION_AND_NUMBERS  ,"need organization and numbers"},
Index: opensa/openssl/crypto/x509v3/x509v3.h
diff -u opensa/openssl/crypto/x509v3/x509v3.h:1.1 
opensa/openssl/crypto/x509v3/x509v3.h:1.2
--- opensa/openssl/crypto/x509v3/x509v3.h:1.1   Tue Jan 25 23:20:48 2000
+++ opensa/openssl/crypto/x509v3/x509v3.h       Thu Mar  2 21:12:02 2000
@@ -136,12 +136,6 @@
 #define X509V3_EXT_CTX_DEP     0x2
 #define X509V3_EXT_MULTILINE   0x4
 
-typedef struct BIT_STRING_BITNAME_st {
-int bitnum;
-const char *lname;
-const char *sname;
-} BIT_STRING_BITNAME;
-
 typedef BIT_STRING_BITNAME ENUMERATED_NAMES;
 
 typedef struct BASIC_CONSTRAINTS_st {
@@ -155,6 +149,11 @@
 ASN1_GENERALIZEDTIME *notAfter;
 } PKEY_USAGE_PERIOD;
 
+typedef struct otherName_st {
+ASN1_OBJECT *type_id;
+ASN1_TYPE *value;
+} OTHERNAME;
+
 typedef struct GENERAL_NAME_st {
 
 #define GEN_OTHERNAME  (0|V_ASN1_CONTEXT_SPECIFIC)
@@ -174,17 +173,26 @@
        ASN1_OCTET_STRING *ip; /* iPAddress */
        X509_NAME *dirn;                /* dirn */
        ASN1_OBJECT *rid; /* registeredID */
-       ASN1_TYPE *other; /* otherName, ediPartyName, x400Address */
+       OTHERNAME *otherName; /* otherName */
+       ASN1_TYPE *other; /* ediPartyName, x400Address */
 } d;
 } GENERAL_NAME;
 
+typedef struct ACCESS_DESCRIPTION_st {
+ASN1_OBJECT *method;
+GENERAL_NAME *location;
+} ACCESS_DESCRIPTION;
+
 DECLARE_STACK_OF(GENERAL_NAME)
 DECLARE_ASN1_SET_OF(GENERAL_NAME)
 
+DECLARE_STACK_OF(ACCESS_DESCRIPTION)
+DECLARE_ASN1_SET_OF(ACCESS_DESCRIPTION)
+
 typedef struct DIST_POINT_NAME_st {
 /* NB: this is a CHOICE type and only one of these should be set */
 STACK_OF(GENERAL_NAME) *fullname;
-X509_NAME *relativename;
+STACK_OF(X509_NAME_ENTRY) *relativename;
 } DIST_POINT_NAME;
 
 typedef struct DIST_POINT_st {
@@ -255,8 +263,8 @@
 #define X509V3_set_ctx_nodb(ctx) ctx->db = NULL;
 
 #define EXT_BITSTRING(nid, table) { nid, 0, \
-                       (X509V3_EXT_NEW)asn1_bit_string_new, \
-                       (X509V3_EXT_FREE)ASN1_STRING_free, \
+                       (X509V3_EXT_NEW)ASN1_BIT_STRING_new, \
+                       (X509V3_EXT_FREE)ASN1_BIT_STRING_free, \
                        (X509V3_EXT_D2I)d2i_ASN1_BIT_STRING, \
                        (X509V3_EXT_I2D)i2d_ASN1_BIT_STRING, \
                        NULL, NULL, \
@@ -266,8 +274,8 @@
                        (char *)table}
 
 #define EXT_IA5STRING(nid) { nid, 0, \
-                       (X509V3_EXT_NEW)ia5string_new, \
-                       (X509V3_EXT_FREE)ASN1_STRING_free, \
+                       (X509V3_EXT_NEW)ASN1_IA5STRING_new, \
+                       (X509V3_EXT_FREE)ASN1_IA5STRING_free, \
                        (X509V3_EXT_D2I)d2i_ASN1_IA5STRING, \
                        (X509V3_EXT_I2D)i2d_ASN1_IA5STRING, \
                        (X509V3_EXT_I2S)i2s_ASN1_IA5STRING, \
@@ -279,6 +287,69 @@
                         NULL, NULL, NULL, NULL, \
                         NULL}
 
+
+/* X509_PURPOSE stuff */
+
+#define EXFLAG_BCONS           0x1
+#define EXFLAG_KUSAGE          0x2
+#define EXFLAG_XKUSAGE         0x4
+#define EXFLAG_NSCERT          0x8
+
+#define EXFLAG_CA              0x10
+#define EXFLAG_SS              0x20
+#define EXFLAG_V1              0x40
+#define EXFLAG_INVALID         0x80
+#define EXFLAG_SET             0x100
+
+#define KU_DIGITAL_SIGNATURE   0x0080
+#define KU_NON_REPUDIATION     0x0040
+#define KU_KEY_ENCIPHERMENT    0x0020
+#define KU_DATA_ENCIPHERMENT   0x0010
+#define KU_KEY_AGREEMENT       0x0008
+#define KU_KEY_CERT_SIGN       0x0004
+#define KU_CRL_SIGN            0x0002
+#define KU_ENCIPHER_ONLY       0x0001
+#define KU_DECIPHER_ONLY       0x8000
+
+#define NS_SSL_CLIENT          0x80
+#define NS_SSL_SERVER          0x40
+#define NS_SMIME               0x20
+#define NS_OBJSIGN             0x10
+#define NS_SSL_CA              0x04
+#define NS_SMIME_CA            0x02
+#define NS_OBJSIGN_CA          0x01
+
+#define XKU_SSL_SERVER         0x1     
+#define XKU_SSL_CLIENT         0x2
+#define XKU_SMIME              0x4
+#define XKU_CODE_SIGN          0x8
+#define XKU_SGC                        0x10
+
+#define X509_PURPOSE_DYNAMIC   0x1
+#define X509_PURPOSE_DYNAMIC_NAME      0x2
+
+typedef struct x509_purpose_st {
+       int purpose;
+       int trust;              /* Default trust ID */
+       int flags;
+       int (*check_purpose)(struct x509_purpose_st *, X509 *, int);
+       char *name;
+       char *sname;
+       void *usr_data;
+} X509_PURPOSE;
+
+#define X509_PURPOSE_SSL_CLIENT                1
+#define X509_PURPOSE_SSL_SERVER                2
+#define X509_PURPOSE_NS_SSL_SERVER     3
+#define X509_PURPOSE_SMIME_SIGN                4
+#define X509_PURPOSE_SMIME_ENCRYPT     5
+#define X509_PURPOSE_CRL_SIGN          6
+
+#define X509_PURPOSE_MIN               1
+#define X509_PURPOSE_MAX               6
+
+DECLARE_STACK_OF(X509_PURPOSE)
+
 void ERR_load_X509V3_strings(void);
 int i2d_BASIC_CONSTRAINTS(BASIC_CONSTRAINTS *a, unsigned char **pp);
 BASIC_CONSTRAINTS *d2i_BASIC_CONSTRAINTS(BASIC_CONSTRAINTS **a, unsigned char **pp, 
long length);
@@ -328,6 +399,11 @@
 STACK_OF(GENERAL_NAME) *v2i_GENERAL_NAMES(X509V3_EXT_METHOD *method,
                                X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *nval);
 
+int i2d_OTHERNAME(OTHERNAME *a, unsigned char **pp);
+OTHERNAME *OTHERNAME_new(void);
+OTHERNAME *d2i_OTHERNAME(OTHERNAME **a, unsigned char **pp, long length);
+void OTHERNAME_free(OTHERNAME *a);
+
 char *i2s_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method, ASN1_OCTET_STRING *ia5);
 ASN1_OCTET_STRING *s2i_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method, X509V3_CTX *ctx, 
char *str);
 
@@ -380,12 +456,27 @@
 DIST_POINT_NAME *d2i_DIST_POINT_NAME(DIST_POINT_NAME **a, unsigned char **pp,
              long length);
 
+int i2d_ACCESS_DESCRIPTION(ACCESS_DESCRIPTION *a, unsigned char **pp);
+ACCESS_DESCRIPTION *ACCESS_DESCRIPTION_new(void);
+void ACCESS_DESCRIPTION_free(ACCESS_DESCRIPTION *a);
+ACCESS_DESCRIPTION *d2i_ACCESS_DESCRIPTION(ACCESS_DESCRIPTION **a, unsigned char **pp,
+             long length);
+
+STACK_OF(ACCESS_DESCRIPTION) *AUTHORITY_INFO_ACCESS_new(void);
+void AUTHORITY_INFO_ACCESS_free(STACK_OF(ACCESS_DESCRIPTION) *a);
+STACK_OF(ACCESS_DESCRIPTION) *d2i_AUTHORITY_INFO_ACCESS(STACK_OF(ACCESS_DESCRIPTION) 
+**a,
+                                        unsigned char **pp, long length);
+int i2d_AUTHORITY_INFO_ACCESS(STACK_OF(ACCESS_DESCRIPTION) *a, unsigned char **pp);
+
+
+
 #ifdef HEADER_CONF_H
 GENERAL_NAME *v2i_GENERAL_NAME(X509V3_EXT_METHOD *method, X509V3_CTX *ctx, CONF_VALUE 
*cnf);
 void X509V3_conf_free(CONF_VALUE *val);
 X509_EXTENSION *X509V3_EXT_conf_nid(LHASH *conf, X509V3_CTX *ctx, int ext_nid, char 
*value);
 X509_EXTENSION *X509V3_EXT_conf(LHASH *conf, X509V3_CTX *ctx, char *name, char 
*value);
 int X509V3_EXT_add_conf(LHASH *conf, X509V3_CTX *ctx, char *section, X509 *cert);
+int X509V3_EXT_REQ_add_conf(LHASH *conf, X509V3_CTX *ctx, char *section, X509_REQ 
+*req);
 int X509V3_EXT_CRL_add_conf(LHASH *conf, X509V3_CTX *ctx, char *section, X509_CRL 
*crl);
 int X509V3_add_value_bool_nf(char *name, int asn1_bool,
                                                STACK_OF(CONF_VALUE) **extlist);
@@ -423,6 +514,8 @@
 int X509V3_add_standard_extensions(void);
 STACK_OF(CONF_VALUE) *X509V3_parse_list(char *line);
 void *X509V3_EXT_d2i(X509_EXTENSION *ext);
+void *X509V3_get_d2i(STACK_OF(X509_EXTENSION) *x, int nid, int *crit, int *idx);
+
 X509_EXTENSION *X509V3_EXT_i2d(int ext_nid, int crit, void *ext_struc);
 
 char *hex_to_string(unsigned char *buffer, long len);
@@ -434,6 +527,20 @@
 int X509V3_EXT_print(BIO *out, X509_EXTENSION *ext, int flag, int indent);
 int X509V3_EXT_print_fp(FILE *out, X509_EXTENSION *ext, int flag, int indent);
 
+int X509_check_purpose(X509 *x, int id, int ca);
+int X509_PURPOSE_get_count(void);
+X509_PURPOSE * X509_PURPOSE_get0(int idx);
+int X509_PURPOSE_get_by_sname(char *sname);
+int X509_PURPOSE_get_by_id(int id);
+int X509_PURPOSE_add(int id, int trust, int flags,
+                       int (*ck)(X509_PURPOSE *, X509 *, int),
+                               char *name, char *sname, void *arg);
+char *X509_PURPOSE_get0_name(X509_PURPOSE *xp);
+char *X509_PURPOSE_get0_sname(X509_PURPOSE *xp);
+int X509_PURPOSE_get_trust(X509_PURPOSE *xp);
+void X509_PURPOSE_cleanup(void);
+int X509_PURPOSE_get_id(X509_PURPOSE *);
+
 /* BEGIN ERROR CODES */
 /* The following lines are auto generated by the script mkerr.pl. Any changes
  * made after this point may be overwritten when the script is next run.
@@ -449,6 +556,7 @@
 #define X509V3_F_HEX_TO_STRING                          111
 #define X509V3_F_I2S_ASN1_ENUMERATED                    121
 #define X509V3_F_I2S_ASN1_INTEGER                       120
+#define X509V3_F_I2V_AUTHORITY_INFO_ACCESS              138
 #define X509V3_F_NOTICE_SECTION                                 132
 #define X509V3_F_NREF_NOS                               133
 #define X509V3_F_POLICY_SECTION                                 131
@@ -464,6 +572,7 @@
 #define X509V3_F_SXNET_ADD_ID_ULONG                     127
 #define X509V3_F_SXNET_GET_ID_ASC                       128
 #define X509V3_F_SXNET_GET_ID_ULONG                     129
+#define X509V3_F_V2I_ACCESS_DESCRIPTION                         139
 #define X509V3_F_V2I_ASN1_BIT_STRING                    101
 #define X509V3_F_V2I_AUTHORITY_KEYID                    119
 #define X509V3_F_V2I_BASIC_CONSTRAINTS                  102
@@ -479,6 +588,7 @@
 #define X509V3_F_X509V3_EXT_I2D                                 136
 #define X509V3_F_X509V3_GET_VALUE_BOOL                  110
 #define X509V3_F_X509V3_PARSE_LIST                      109
+#define X509V3_F_X509_PURPOSE_ADD                       137
 
 /* Reason codes. */
 #define X509V3_R_BAD_IP_ADDRESS                                 118
@@ -506,6 +616,7 @@
 #define X509V3_R_INVALID_OPTION                                 138
 #define X509V3_R_INVALID_POLICY_IDENTIFIER              134
 #define X509V3_R_INVALID_SECTION                        135
+#define X509V3_R_INVALID_SYNTAX                                 143
 #define X509V3_R_ISSUER_DECODE_ERROR                    126
 #define X509V3_R_MISSING_VALUE                          124
 #define X509V3_R_NEED_ORGANIZATION_AND_NUMBERS          142
Index: opensa/openssl/demos/selfsign.c
diff -u opensa/openssl/demos/selfsign.c:1.1 opensa/openssl/demos/selfsign.c:1.2
--- opensa/openssl/demos/selfsign.c:1.1 Tue Jan 25 23:18:36 2000
+++ opensa/openssl/demos/selfsign.c     Thu Mar  2 21:12:03 2000
@@ -18,26 +18,27 @@
 
        CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON);
 
-       X509V3_add_standard_extensions();
+       bio_err=BIO_new_fp(stderr, BIO_NOCLOSE);
 
-       if ((bio_err=BIO_new(BIO_s_file())) != NULL)
-               BIO_set_fp(bio_err,stderr,BIO_NOCLOSE);
-
        mkit(&x509,&pkey,512,0,365);
 
        RSA_print_fp(stdout,pkey->pkey.rsa,0);
        X509_print_fp(stdout,x509);
 
-       PEM_write_RSAPrivateKey(stdout,pkey->pkey.rsa,NULL,NULL,0,NULL);
+       PEM_write_PrivateKey(stdout,pkey,NULL,NULL,0,NULL, NULL);
        PEM_write_X509(stdout,x509);
 
        X509_free(x509);
        EVP_PKEY_free(pkey);
-       BIO_free(bio_err);
 
+#ifdef CUSTOM_EXT
+       /* Only needed if we add objects or custom extensions */
        X509V3_EXT_cleanup();
+       OBJ_cleanup();
+#endif
 
        CRYPTO_mem_leaks(bio_err);
+       BIO_free(bio_err);
        return(0);
        }
 
@@ -110,26 +111,20 @@
        X509_gmtime_adj(X509_get_notBefore(x),0);
        X509_gmtime_adj(X509_get_notAfter(x),(long)60*60*24*days);
        X509_set_pubkey(x,pk);
-
-       name=X509_NAME_new();
-
-       ne=X509_NAME_ENTRY_create_by_NID(NULL,NID_countryName,
-               V_ASN1_APP_CHOOSE,"AU",-1);
-       X509_NAME_add_entry(name,ne,0,0);
 
-       X509_NAME_ENTRY_create_by_NID(&ne,NID_commonName,
-               V_ASN1_APP_CHOOSE,"Eric Young",-1);
-       X509_NAME_add_entry(name,ne,1,0);
+       name=X509_get_subject_name(x);
 
-       /* finished with structure */
-       X509_NAME_ENTRY_free(ne);
+       /* This function creates and adds the entry, working out the
+        * correct string type and performing checks on its length.
+        * Normally we'd check the return value for errors...
+        */
+       X509_NAME_add_entry_by_txt(name,"C",
+                               MBSTRING_ASC, "UK", -1, -1, 0);
+       X509_NAME_add_entry_by_txt(name,"CN",
+                               MBSTRING_ASC, "OpenSSL Group", -1, -1, 0);
 
-       X509_set_subject_name(x,name);
        X509_set_issuer_name(x,name);
 
-       /* finished with structure */
-       X509_NAME_free(name);
-
        /* Add extension using V3 code: we can set the config file as NULL
         * because we wont reference any other sections. We can also set
          * the context to NULL because none of these extensions below will need
@@ -138,15 +133,18 @@
 
        ex = X509V3_EXT_conf_nid(NULL, NULL, NID_netscape_cert_type, "server");
        X509_add_ext(x,ex,-1);
+       X509_EXTENSION_free(ex);
 
        ex = X509V3_EXT_conf_nid(NULL, NULL, NID_netscape_comment,
                                                "example comment extension");
        X509_add_ext(x,ex,-1);
+       X509_EXTENSION_free(ex);
 
        ex = X509V3_EXT_conf_nid(NULL, NULL, NID_netscape_ssl_server_name,
                                                        "www.openssl.org");
 
        X509_add_ext(x,ex,-1);
+       X509_EXTENSION_free(ex);
 
 #if 0
        /* might want something like this too.... */
@@ -155,6 +153,20 @@
 
 
        X509_add_ext(x,ex,-1);
+       X509_EXTENSION_free(ex);
+#endif
+
+#ifdef CUSTOM_EXT
+       /* Maybe even add our own extension based on existing */
+       {
+               int nid;
+               nid = OBJ_create("1.2.3.4", "MyAlias", "My Test Alias Extension");
+               X509V3_EXT_add_alias(nid, NID_netscape_comment);
+               ex = X509V3_EXT_conf_nid(NULL, NULL, nid,
+                                               "example comment alias");
+               X509_add_ext(x,ex,-1);
+               X509_EXTENSION_free(ex);
+       }
 #endif
        
        if (!X509_sign(x,pk,EVP_md5()))
Index: opensa/openssl/demos/bio/saccept.c
diff -u opensa/openssl/demos/bio/saccept.c:1.1 opensa/openssl/demos/bio/saccept.c:1.2
--- opensa/openssl/demos/bio/saccept.c:1.1      Tue Jan 25 23:19:51 2000
+++ opensa/openssl/demos/bio/saccept.c  Thu Mar  2 21:12:04 2000
@@ -46,7 +46,7 @@
        SSL_load_error_strings();
 
        /* Add ciphers and message digests */
-       SSLeay_add_ssl_algorithms();
+       OpenSSL_add_ssl_algorithms();
 
        ctx=SSL_CTX_new(SSLv23_server_method());
        if (!SSL_CTX_use_certificate_file(ctx,CERT_FILE,SSL_FILETYPE_PEM))
Index: opensa/openssl/demos/bio/sconnect.c
diff -u opensa/openssl/demos/bio/sconnect.c:1.1 opensa/openssl/demos/bio/sconnect.c:1.2
--- opensa/openssl/demos/bio/sconnect.c:1.1     Tue Jan 25 23:19:51 2000
+++ opensa/openssl/demos/bio/sconnect.c Thu Mar  2 21:12:04 2000
@@ -36,7 +36,7 @@
        SSL_load_error_strings();
 
        /* Setup all the global SSL stuff */
-       SSLeay_add_ssl_algorithms();
+       OpenSSL_add_ssl_algorithms();
        ssl_ctx=SSL_CTX_new(SSLv23_client_method());
 
        /* Lets make a SSL structure */
Index: opensa/openssl/demos/ssl/cli.cpp
diff -u opensa/openssl/demos/ssl/cli.cpp:1.1 opensa/openssl/demos/ssl/cli.cpp:1.2
--- opensa/openssl/demos/ssl/cli.cpp:1.1        Tue Jan 25 23:18:48 2000
+++ opensa/openssl/demos/ssl/cli.cpp    Thu Mar  2 21:12:04 2000
@@ -14,7 +14,6 @@
 #include <arpa/inet.h>
 #include <netdb.h>
 
-#include "rsa.h"       /* SSLeay stuff */
 #include <openssl/crypto.h>
 #include <openssl/x509.h>
 #include <openssl/pem.h>
Index: opensa/openssl/doc/c-indentation.el
diff -u opensa/openssl/doc/c-indentation.el:1.1 opensa/openssl/doc/c-indentation.el:1.2
--- opensa/openssl/doc/c-indentation.el:1.1     Tue Jan 25 23:18:01 2000
+++ opensa/openssl/doc/c-indentation.el Thu Mar  2 21:12:04 2000
@@ -26,11 +26,20 @@
               (c-hanging-braces-alist)
               (c-offsets-alist . ((defun-open . +)
                                   (defun-block-intro . 0)
+                                  (class-open . +)
+                                  (class-close . +)
                                   (block-open . 0)
+                                  (block-close . 0)
                                   (substatement-open . +)
+                                  (statement . 0)
                                   (statement-block-intro . 0)
                                   (statement-case-open . +)
                                   (statement-case-intro . +)
                                   (case-label . -)
                                   (label . -)
-                                  (arglist-cont-nonempty . +)))))
+                                  (arglist-cont-nonempty . +)
+                                  (topmost-intro . -)
+                                  (brace-list-close . +)
+                                  (brace-list-intro . +)
+                                  ))))
+
Index: opensa/openssl/doc/openssl.txt
diff -u opensa/openssl/doc/openssl.txt:1.1 opensa/openssl/doc/openssl.txt:1.2
--- opensa/openssl/doc/openssl.txt:1.1  Tue Jan 25 23:18:01 2000
+++ opensa/openssl/doc/openssl.txt      Thu Mar  2 21:12:04 2000
@@ -1,54 +1,13 @@
 
 This is some preliminary documentation for OpenSSL.
 
-==============================================================================
-                            BUFFER Library
-==============================================================================
-
-The buffer library handles simple character arrays. Buffers are used for
-various purposes in the library, most notably memory BIOs.
-
-The library uses the BUF_MEM structure defined in buffer.h:
-
-typedef struct buf_mem_st
-{
-        int length;     /* current number of bytes */
-        char *data;
-        int max;        /* size of buffer */
-} BUF_MEM;
-
-'length' is the current size of the buffer in bytes, 'max' is the amount of
-memory allocated to the buffer. There are three functions which handle these
-and one "miscellaneous" function.
-
-BUF_MEM *BUF_MEM_new()
-
-This allocates a new buffer of zero size. Returns the buffer or NULL on error.
-
-void BUF_MEM_free(BUF_MEM *a)
-
-This frees up an already existing buffer. The data is zeroed before freeing
-up in case the buffer contains sensitive data.
-
-int BUF_MEM_grow(BUF_MEM *str, int len)
-
-This changes the size of an already existing buffer. It returns zero on error
-or the new size (i.e. 'len'). Any data already in the buffer is preserved if
-it increases in size.
+Contents:
 
-char * BUF_strdup(char *str)
+ OpenSSL X509V3 extension configuration
+ X509V3 Extension code: programmers guide
+ PKCS#12 Library
 
-This is the previously mentioned strdup function: like the standard library
-strdup() it copies a null terminated string into a block of allocated memory
-and returns a pointer to the allocated block.
 
-Unlike the standard C library strdup() this function uses Malloc() and so
-should be used in preference to the standard library strdup() because it can
-be used for memory leak checking or replacing the malloc() function.
-
-The memory allocated from BUF_strdup() should be freed up using the Free()
-function.
-
 ==============================================================================
                OpenSSL X509V3 extension configuration
 ==============================================================================
@@ -188,7 +147,7 @@
 email.2=steve@there
 
 This is because the configuration file code cannot handle the same name
-occurring twice in the same extension.
+occurring twice in the same section.
 
 The syntax of raw extensions is governed by the extension code: it can
 for example contain data in multiple sections. The correct syntax to
@@ -315,6 +274,41 @@
 According to PKIX recommendations it should exclude the extension entirely,
 however some software may require CA set to FALSE for end entity certificates.
 
+Extended Key Usage.
+
+This extensions consists of a list of usages.
+
+These can either be object short names of the dotted numerical form of OIDs.
+While any OID can be used only certain values make sense. In particular the
+following PKIX, NS and MS values are meaningful:
+
+Value                  Meaning
+-----                  -------
+serverAuth             SSL/TLS Web Server Authentication.
+clientAuth             SSL/TLS Web Client Authentication.
+codeSigning            Code signing.
+emailProtection                E-mail Protection (S/MIME).
+timeStamping           Trusted Timestamping
+msCodeInd              Microsoft Individual Code Signing (authenticode)
+msCodeCom              Microsoft Commercial Code Signing (authenticode)
+msCTLSign              Microsoft Trust List Signing
+msSGC                  Microsoft Server Gated Crypto
+msEFS                  Microsoft Encrypted File System
+nsSGC                  Netscape Server Gated Crypto
+
+For example, under IE5 a CA can be used for any purpose: by including a list
+of the above usages the CA can be restricted to only authorised uses.
+
+Note: software packages may place additional interpretations on certificate 
+use, in particular some usages may only work for selected CAs. Don't for example
+expect just including msSGC or nsSGC will automatically mean that a certificate
+can be used for SGC ("step up" encryption) otherwise anyone could use it.
+
+Examples:
+
+extendedKeyUsage=critical,codeSigning,1.2.3.4
+extendedKeyUsage=nsSGC,msSGC
+
 Subject Key Identifier.
 
 This is really a string extension and can take two possible values. Either
@@ -458,17 +452,17 @@
 extension in a human or machine readable form.
 
 1. Initialisation and cleanup.
-
-X509V3_add_standard_extensions();
 
-This function should be called before any other extension code. It adds support
-for some common PKIX and Netscape extensions. Additional custom extensions can
-be added as well (see later).
+No special initialisation is needed before calling the extension functions.
+You used to have to call X509V3_add_standard_extensions(); but this is no longer
+required and this function no longer does anything.
 
 void X509V3_EXT_cleanup(void);
 
-This function should be called last to cleanup the extension code. After this
-call no other extension calls should be made.
+This function should be called to cleanup the extension code if any custom
+extensions have been added. If no custom extensions have been added then this
+call does nothing. After this call all custom extension code is freed up but
+you can still use the standard extensions.
 
 2. Printing and parsing extensions.
 
@@ -512,7 +506,7 @@
 In each case 'conf' is the LHASH pointer of the configuration file to use
 and 'section' is the section containing the extension details.
 
-See the 'context functions' section for a description of the ctx paramater.
+See the 'context functions' section for a description of the ctx parameter.
 
 
 X509_EXTENSION *X509V3_EXT_conf(LHASH *conf, X509V3_CTX *ctx, char *name,
@@ -531,7 +525,7 @@
 For example to produce basicConstraints with the CA flag and a path length of
 10:
 
-x = X509V3_EXT_conf_nid(NULL, NULL, NID_basicConstraints, "CA:TRUE,pathlen:10");
+x = X509V3_EXT_conf_nid(NULL, NULL, NID_basic_constraints,"CA:TRUE,pathlen:10");
 
 
 X509_EXTENSION *X509V3_EXT_i2d(int ext_nid, int crit, void *ext_struc);
@@ -659,7 +653,7 @@
 int X509V3_add_value_bool(const char *name, int asn1_bool,
                                                STACK_OF(CONF_VALUE) **extlist);
 
-This adds either "TRUE" or "FALSE" depending on the value of 'ans1_bool'
+This adds either "TRUE" or "FALSE" depending on the value of 'asn1_bool'
 
 int X509V3_add_value_bool_nf(char *name, int asn1_bool,
                                                STACK_OF(CONF_VALUE) **extlist);
@@ -686,7 +680,7 @@
 or return a STACK_OF(CONF_VALUE).
 
 Raw extensions are just passed a BIO or a value and it is the extensions
-responsiblity to handle all the necessary printing.
+responsibility to handle all the necessary printing.
 
 There are two ways to add an extension. One is simply as an alias to an already
 existing extension. An alias is an extension that is identical in ASN1 structure
@@ -811,7 +805,7 @@
 
 This function is passed the internal extension structure in the ext parameter
 and sends out a human readable version of the extension to out. The 'indent'
-paremeter should be noted to determine the necessary amount of indentation
+parameter should be noted to determine the necessary amount of indentation
 needed on the output.
 
 void * r2i(struct v3_ext_method *method, struct v3_ext_ctx *ctx, char *str);
@@ -882,7 +876,7 @@
 
 This is the same but for a FILE pointer.
 
-3. Parsing and creation functions.
+3. High level functions.
 
 3.1 Parsing with PKCS12_parse().
 
@@ -919,6 +913,14 @@
 p12 = PKCS12_create(pass, "My Certificate", pkey, cert, NULL, 0,0,0,0,0);
 i2d_PKCS12_fp(fp, p12);
 PKCS12_free(p12);
+
+3.3 Changing a PKCS#12 structure password.
+
+int PKCS12_newpass(PKCS12 *p12, char *oldpass, char *newpass);
+
+This changes the password of an already existing PKCS#12 structure. oldpass
+is the old password and newpass is the new one. An error occurs if the old
+password is incorrect.
 
 LOW LEVEL FUNCTIONS.
 
Index: opensa/openssl/doc/readme
diff -u opensa/openssl/doc/readme:1.1 opensa/openssl/doc/readme:1.2
--- opensa/openssl/doc/readme:1.1       Tue Jan 25 23:18:01 2000
+++ opensa/openssl/doc/readme   Thu Mar  2 21:12:04 2000
@@ -1,9 +1,9 @@
 
- openssl.pod ..... Documentation of OpenSSL `openssl' command
- crypto.pod ...... Documentation of OpenSSL crypto.h+libcrypto.a
- ssl.pod ......... Documentation of OpenSSL ssl.h+libssl.a
- ssleay.txt ...... Assembled documentation files of ancestor SSLeay [obsolete]
- openssl.txt ..... Assembled documentation files for OpenSSL [not final]
+ apps/openssl.pod .... Documentation of OpenSSL `openssl' command
+ crypto/crypto.pod ... Documentation of OpenSSL crypto.h+libcrypto.a
+ ssl/ssl.pod ......... Documentation of OpenSSL ssl.h+libssl.a
+ openssl.txt ......... Assembled documentation files for OpenSSL [not final]
+ ssleay.txt .......... Assembled documentation of ancestor SSLeay [obsolete]
 
  An archive of HTML documents for the SSLeay library is available from
  http://www.columbia.edu/~ariel/ssleay/
Index: opensa/openssl/doc/ssleay.txt
diff -u opensa/openssl/doc/ssleay.txt:1.1 opensa/openssl/doc/ssleay.txt:1.2
--- opensa/openssl/doc/ssleay.txt:1.1   Tue Jan 25 23:18:01 2000
+++ opensa/openssl/doc/ssleay.txt       Thu Mar  2 21:12:04 2000
@@ -6710,8 +6710,8 @@
 before any multithreading is started.
 id_function does not need to be defined under Windows NT or 95, the
 correct function will be called if it is not.  Under unix, getpid()
-is call if the id_callback is not defined, for solaris this is wrong
-(since threads id's are not pid's) but under IRIX it is correct
+is call if the id_callback is not defined, for Solaris this is wrong
+(since threads id's are not pid's) but under Linux it is correct
 (threads are just processes sharing the data segement).
 
 The locking_callback is used to perform locking by the SSLeay library.
Index: opensa/openssl/ms/bcb4.bat
diff -u opensa/openssl/ms/bcb4.bat:1.1 opensa/openssl/ms/bcb4.bat:1.2
--- opensa/openssl/ms/bcb4.bat:1.1      Tue Jan 25 23:16:42 2000
+++ opensa/openssl/ms/bcb4.bat  Thu Mar  2 21:12:04 2000
@@ -1,6 +1,6 @@
-perl Configure BC-32
-perl util\mkfiles.pl > MINFO
-
-@rem create make file
-perl util\mk1mf.pl no-asm BC-NT > bcb.mak
-
+perl Configure BC-32
+perl util\mkfiles.pl > MINFO
+
+@rem create make file
+perl util\mk1mf.pl no-asm BC-NT > bcb.mak
+
Index: opensa/openssl/ms/do_masm.bat
diff -u opensa/openssl/ms/do_masm.bat:1.1 opensa/openssl/ms/do_masm.bat:1.2
--- opensa/openssl/ms/do_masm.bat:1.1   Tue Jan 25 23:16:42 2000
+++ opensa/openssl/ms/do_masm.bat       Thu Mar  2 21:12:04 2000
@@ -1,68 +1,68 @@
-@echo off
-echo Generating x86 for MASM assember
-
-echo Bignum
-cd crypto\bn\asm
-perl x86.pl win32 > bn-win32.asm
-cd ..\..\..
-
-echo DES
-cd crypto\des\asm
-perl des-586.pl win32 > d-win32.asm
-cd ..\..\..
-
-echo "crypt(3)"
-
-cd crypto\des\asm
-perl crypt586.pl win32 > y-win32.asm
-cd ..\..\..
-
-echo Blowfish
-
-cd crypto\bf\asm
-perl bf-586.pl win32 > b-win32.asm
-cd ..\..\..
-
-echo CAST5
-cd crypto\cast\asm
-perl cast-586.pl win32 > c-win32.asm
-cd ..\..\..
-
-echo RC4
-cd crypto\rc4\asm
-perl rc4-586.pl win32 > r4-win32.asm
-cd ..\..\..
-
-echo MD5
-cd crypto\md5\asm
-perl md5-586.pl win32 > m5-win32.asm
-cd ..\..\..
-
-echo SHA1
-cd crypto\sha\asm
-perl sha1-586.pl win32 > s1-win32.asm
-cd ..\..\..
-
-echo RIPEMD160
-cd crypto\ripemd\asm
-perl rmd-586.pl win32 > rm-win32.asm
-cd ..\..\..
-
-echo RC5\32
-cd crypto\rc5\asm
-perl rc5-586.pl win32 > r5-win32.asm
-cd ..\..\..
-
-echo on
-
-perl util\mkfiles.pl >MINFO
-rem perl util\mk1mf.pl VC-MSDOS no-sock >ms\msdos.mak
-rem perl util\mk1mf.pl VC-W31-32 >ms\w31.mak
-perl util\mk1mf.pl dll VC-W31-32 >ms\w31dll.mak
-perl util\mk1mf.pl VC-WIN32 >ms\nt.mak
-perl util\mk1mf.pl dll VC-WIN32 >ms\ntdll.mak
-
-perl util\mkdef.pl 16 libeay > ms\libeay16.def
-perl util\mkdef.pl 32 libeay > ms\libeay32.def
-perl util\mkdef.pl 16 ssleay > ms\ssleay16.def
-perl util\mkdef.pl 32 ssleay > ms\ssleay32.def
+@echo off
+echo Generating x86 for MASM assember
+
+echo Bignum
+cd crypto\bn\asm
+perl x86.pl win32 > bn-win32.asm
+cd ..\..\..
+
+echo DES
+cd crypto\des\asm
+perl des-586.pl win32 > d-win32.asm
+cd ..\..\..
+
+echo "crypt(3)"
+
+cd crypto\des\asm
+perl crypt586.pl win32 > y-win32.asm
+cd ..\..\..
+
+echo Blowfish
+
+cd crypto\bf\asm
+perl bf-586.pl win32 > b-win32.asm
+cd ..\..\..
+
+echo CAST5
+cd crypto\cast\asm
+perl cast-586.pl win32 > c-win32.asm
+cd ..\..\..
+
+echo RC4
+cd crypto\rc4\asm
+perl rc4-586.pl win32 > r4-win32.asm
+cd ..\..\..
+
+echo MD5
+cd crypto\md5\asm
+perl md5-586.pl win32 > m5-win32.asm
+cd ..\..\..
+
+echo SHA1
+cd crypto\sha\asm
+perl sha1-586.pl win32 > s1-win32.asm
+cd ..\..\..
+
+echo RIPEMD160
+cd crypto\ripemd\asm
+perl rmd-586.pl win32 > rm-win32.asm
+cd ..\..\..
+
+echo RC5\32
+cd crypto\rc5\asm
+perl rc5-586.pl win32 > r5-win32.asm
+cd ..\..\..
+
+echo on
+
+perl util\mkfiles.pl >MINFO
+rem perl util\mk1mf.pl VC-MSDOS no-sock >ms\msdos.mak
+rem perl util\mk1mf.pl VC-W31-32 >ms\w31.mak
+perl util\mk1mf.pl dll VC-W31-32 >ms\w31dll.mak
+perl util\mk1mf.pl VC-WIN32 >ms\nt.mak
+perl util\mk1mf.pl dll VC-WIN32 >ms\ntdll.mak
+
+perl util\mkdef.pl 16 libeay > ms\libeay16.def
+perl util\mkdef.pl 32 libeay > ms\libeay32.def
+perl util\mkdef.pl 16 ssleay > ms\ssleay16.def
+perl util\mkdef.pl 32 ssleay > ms\ssleay32.def
Index: opensa/openssl/ms/do_ms.bat
diff -u opensa/openssl/ms/do_ms.bat:1.1 opensa/openssl/ms/do_ms.bat:1.2
--- opensa/openssl/ms/do_ms.bat:1.1     Tue Jan 25 23:16:42 2000
+++ opensa/openssl/ms/do_ms.bat Thu Mar  2 21:12:04 2000
@@ -1,12 +1,12 @@
-
-perl util\mkfiles.pl >MINFO
-rem perl util\mk1mf.pl VC-MSDOS no-sock >ms\msdos.mak
-rem perl util\mk1mf.pl VC-W31-32 >ms\w31.mak
-perl util\mk1mf.pl dll VC-W31-32 >ms\w31dll.mak
-perl util\mk1mf.pl no-asm VC-WIN32 >ms\nt.mak
-perl util\mk1mf.pl dll no-asm VC-WIN32 >ms\ntdll.mak
-
-perl util\mkdef.pl 16 libeay > ms\libeay16.def
-perl util\mkdef.pl 32 libeay > ms\libeay32.def
-perl util\mkdef.pl 16 ssleay > ms\ssleay16.def
-perl util\mkdef.pl 32 ssleay > ms\ssleay32.def
+
+perl util\mkfiles.pl >MINFO
+rem perl util\mk1mf.pl VC-MSDOS no-sock >ms\msdos.mak
+rem perl util\mk1mf.pl VC-W31-32 >ms\w31.mak
+perl util\mk1mf.pl dll VC-W31-32 >ms\w31dll.mak
+perl util\mk1mf.pl no-asm VC-WIN32 >ms\nt.mak
+perl util\mk1mf.pl dll no-asm VC-WIN32 >ms\ntdll.mak
+
+perl util\mkdef.pl 16 libeay > ms\libeay16.def
+perl util\mkdef.pl 32 libeay > ms\libeay32.def
+perl util\mkdef.pl 16 ssleay > ms\ssleay16.def
+perl util\mkdef.pl 32 ssleay > ms\ssleay32.def
Index: opensa/openssl/ms/do_nasm.bat
diff -u opensa/openssl/ms/do_nasm.bat:1.1 opensa/openssl/ms/do_nasm.bat:1.2
--- opensa/openssl/ms/do_nasm.bat:1.1   Tue Jan 25 23:16:42 2000
+++ opensa/openssl/ms/do_nasm.bat       Thu Mar  2 21:12:04 2000
@@ -1,69 +1,69 @@
-
-@echo off
-echo Generating x86 for NASM assember
-
-echo Bignum
-cd crypto\bn\asm
-perl x86.pl win32n > bn-win32.asm
-cd ..\..\..
-
-echo DES
-cd crypto\des\asm
-perl des-586.pl win32n > d-win32.asm
-cd ..\..\..
-
-echo "crypt(3)"
-
-cd crypto\des\asm
-perl crypt586.pl win32n > y-win32.asm
-cd ..\..\..
-
-echo Blowfish
-
-cd crypto\bf\asm
-perl bf-586.pl win32n > b-win32.asm
-cd ..\..\..
-
-echo CAST5
-cd crypto\cast\asm
-perl cast-586.pl win32n > c-win32.asm
-cd ..\..\..
-
-echo RC4
-cd crypto\rc4\asm
-perl rc4-586.pl win32n > r4-win32.asm
-cd ..\..\..
-
-echo MD5
-cd crypto\md5\asm
-perl md5-586.pl win32n > m5-win32.asm
-cd ..\..\..
-
-echo SHA1
-cd crypto\sha\asm
-perl sha1-586.pl win32n > s1-win32.asm
-cd ..\..\..
-
-echo RIPEMD160
-cd crypto\ripemd\asm
-perl rmd-586.pl win32n > rm-win32.asm
-cd ..\..\..
-
-echo RC5\32
-cd crypto\rc5\asm
-perl rc5-586.pl win32n > r5-win32.asm
-cd ..\..\..
-
-echo on
-
-perl util\mkfiles.pl >MINFO
-rem perl util\mk1mf.pl VC-MSDOS no-sock >ms\msdos.mak
-rem perl util\mk1mf.pl VC-W31-32 >ms\w31.mak
-perl util\mk1mf.pl dll VC-W31-32 >ms\w31dll.mak
-perl util\mk1mf.pl nasm VC-WIN32 >ms\nt.mak
-perl util\mk1mf.pl dll nasm VC-WIN32 >ms\ntdll.mak
-
-perl util\mkdef.pl 16 libeay > ms\libeay16.def
-perl util\mkdef.pl 32 libeay > ms\libeay32.def
-perl util\mkdef.pl 16 ssleay > ms\ssleay16.def
-perl util\mkdef.pl 32 ssleay > ms\ssleay32.def
+
+@echo off
+echo Generating x86 for NASM assember
+
+echo Bignum
+cd crypto\bn\asm
+perl x86.pl win32n > bn-win32.asm
+cd ..\..\..
+
+echo DES
+cd crypto\des\asm
+perl des-586.pl win32n > d-win32.asm
+cd ..\..\..
+
+echo "crypt(3)"
+
+cd crypto\des\asm
+perl crypt586.pl win32n > y-win32.asm
+cd ..\..\..
+
+echo Blowfish
+
+cd crypto\bf\asm
+perl bf-586.pl win32n > b-win32.asm
+cd ..\..\..
+
+echo CAST5
+cd crypto\cast\asm
+perl cast-586.pl win32n > c-win32.asm
+cd ..\..\..
+
+echo RC4
+cd crypto\rc4\asm
+perl rc4-586.pl win32n > r4-win32.asm
+cd ..\..\..
+
+echo MD5
+cd crypto\md5\asm
+perl md5-586.pl win32n > m5-win32.asm
+cd ..\..\..
+
+echo SHA1
+cd crypto\sha\asm
+perl sha1-586.pl win32n > s1-win32.asm
+cd ..\..\..
+
+echo RIPEMD160
+cd crypto\ripemd\asm
+perl rmd-586.pl win32n > rm-win32.asm
+cd ..\..\..
+
+echo RC5\32
+cd crypto\rc5\asm
+perl rc5-586.pl win32n > r5-win32.asm
+cd ..\..\..
+
+echo on
+
+perl util\mkfiles.pl >MINFO
+rem perl util\mk1mf.pl VC-MSDOS no-sock >ms\msdos.mak
+rem perl util\mk1mf.pl VC-W31-32 >ms\w31.mak
+perl util\mk1mf.pl dll VC-W31-32 >ms\w31dll.mak
+perl util\mk1mf.pl nasm VC-WIN32 >ms\nt.mak
+perl util\mk1mf.pl dll nasm VC-WIN32 >ms\ntdll.mak
+
+perl util\mkdef.pl 16 libeay > ms\libeay16.def
+perl util\mkdef.pl 32 libeay > ms\libeay32.def
+perl util\mkdef.pl 16 ssleay > ms\ssleay16.def
+perl util\mkdef.pl 32 ssleay > ms\ssleay32.def
Index: opensa/openssl/ms/do_nt.bat
diff -u opensa/openssl/ms/do_nt.bat:1.1 opensa/openssl/ms/do_nt.bat:1.2
--- opensa/openssl/ms/do_nt.bat:1.1     Tue Jan 25 23:16:42 2000
+++ opensa/openssl/ms/do_nt.bat Thu Mar  2 21:12:04 2000
@@ -1,7 +1,7 @@
-
-perl util\mkfiles.pl >MINFO
-perl util\mk1mf.pl no-asm VC-NT >ms\nt.mak
-perl util\mk1mf.pl dll no-asm VC-NT >ms\ntdll.mak
-
-perl util\mkdef.pl libeay NT > ms\libeay32.def
-perl util\mkdef.pl ssleay NT > ms\ssleay32.def
+
+perl util\mkfiles.pl >MINFO
+perl util\mk1mf.pl no-asm VC-NT >ms\nt.mak
+perl util\mk1mf.pl dll no-asm VC-NT >ms\ntdll.mak
+
+perl util\mkdef.pl libeay NT > ms\libeay32.def
+perl util\mkdef.pl ssleay NT > ms\ssleay32.def
Index: opensa/openssl/ms/libeay16.def
diff -u opensa/openssl/ms/libeay16.def:1.1 opensa/openssl/ms/libeay16.def:1.2
--- opensa/openssl/ms/libeay16.def:1.1  Tue Jan 25 23:16:42 2000
+++ opensa/openssl/ms/libeay16.def      Thu Mar  2 21:12:04 2000
@@ -1,1726 +1,2084 @@
-;
-; Definition file for the DLL version of the LIBEAY16 library from OpenSSL
-;
-
-LIBRARY         LIBEAY16
-
-DESCRIPTION     'OpenSSL LIBEAY16 - http://www.openssl.org/'
-
-CODE            PRELOAD MOVEABLE
-DATA            PRELOAD MOVEABLE SINGLE
-
-EXETYPE                WINDOWS
-
-HEAPSIZE       4096
-STACKSIZE      8192
-
-EXPORTS
-    _SSLeay                                  @1
-    _SSLeay_add_all_algorithms               @508
-    _SSLeay_add_all_ciphers                  @509
-    _SSLeay_add_all_digests                  @510
-    _SSLeay_version                          @2
-    _ASN1_BIT_STRING_asn1_meth               @3
-    _ASN1_BIT_STRING_get_bit                 @1060
-    _ASN1_BIT_STRING_set_bit                 @1061
-    _ASN1_ENUMERATED_get                     @1206
-    _ASN1_ENUMERATED_set                     @1205
-    _ASN1_ENUMERATED_to_BN                   @1208
-    _ASN1_GENERALIZEDTIME_check              @1157
-    _ASN1_GENERALIZEDTIME_print              @1158
-    _ASN1_GENERALIZEDTIME_set                @1159
-    _ASN1_GENERALIZEDTIME_set_string         @1160
-    _ASN1_HEADER_free                        @4
-    _ASN1_HEADER_new                         @5
-    _ASN1_IA5STRING_asn1_meth                @6
-    _ASN1_INTEGER_get                        @7
-    _ASN1_INTEGER_set                        @8
-    _ASN1_INTEGER_to_BN                      @9
-    _ASN1_OBJECT_create                      @10
-    _ASN1_OBJECT_free                        @11
-    _ASN1_OBJECT_new                         @12
-    _ASN1_PRINTABLE_type                     @13
-    _ASN1_STRING_cmp                         @14
-    _ASN1_STRING_dup                         @15
-    _ASN1_STRING_free                        @16
-    _ASN1_STRING_new                         @17
-    _ASN1_STRING_print                       @18
-    _ASN1_STRING_set                         @19
-    _ASN1_STRING_type_new                    @20
-    _ASN1_TIME_print                         @1161
-    _ASN1_TIME_set                           @1253
-    _ASN1_TYPE_free                          @21
-    _ASN1_TYPE_get                           @916
-    _ASN1_TYPE_get_int_octetstring           @1076
-    _ASN1_TYPE_get_octetstring               @1077
-    _ASN1_TYPE_new                           @22
-    _ASN1_TYPE_set                           @917
-    _ASN1_TYPE_set_int_octetstring           @1078
-    _ASN1_TYPE_set_octetstring               @1079
-    _ASN1_UNIVERSALSTRING_to_string          @23
-    _ASN1_UTCTIME_check                      @24
-    _ASN1_UTCTIME_print                      @25
-    _ASN1_UTCTIME_set                        @26
-    _ASN1_UTCTIME_set_string                 @1080
-    _ASN1_check_infinite_end                 @27
-    _ASN1_d2i_bio                            @28
-    _ASN1_digest                             @30
-    _ASN1_dup                                @31
-    _ASN1_get_object                         @32
-    _ASN1_i2d_bio                            @33
-    _ASN1_object_size                        @35
-    _ASN1_pack_string                        @1261
-    _ASN1_parse                              @36
-    _ASN1_put_object                         @37
-    _ASN1_seq_pack                           @1259
-    _ASN1_seq_unpack                         @1258
-    _ASN1_sign                               @38
-    _ASN1_unpack_string                      @1260
-    _ASN1_verify                             @39
-    _AUTHORITY_KEYID_free                    @1257
-    _AUTHORITY_KEYID_new                     @1256
-    _BASIC_CONSTRAINTS_free                  @1162
-    _BASIC_CONSTRAINTS_new                   @1163
-    _BF_cbc_encrypt                          @40
-    _BF_cfb64_encrypt                        @41
-    _BF_decrypt                              @987
-    _BF_ecb_encrypt                          @42
-    _BF_encrypt                              @43
-    _BF_ofb64_encrypt                        @44
-    _BF_options                              @45
-    _BF_set_key                              @46
-    _BIO_accept                              @51
-    _BIO_copy_next_retry                     @955
-    _BIO_ctrl                                @52
-    _BIO_ctrl_get_read_request               @1799
-    _BIO_ctrl_get_write_guarantee            @1803
-    _BIO_ctrl_pending                        @1800
-    _BIO_ctrl_wpending                       @1801
-    _BIO_debug_callback                      @54
-    _BIO_dump                                @55
-    _BIO_dup_chain                           @56
-    _BIO_f_base64                            @57
-    _BIO_f_buffer                            @58
-    _BIO_f_cipher                            @59
-    _BIO_f_md                                @60
-    _BIO_f_nbio_test                         @915
-    _BIO_f_null                              @61
-    _BIO_f_reliable                          @1244
-    _BIO_fd_non_fatal_error                  @63
-    _BIO_fd_should_retry                     @64
-    _BIO_find_type                           @65
-    _BIO_free                                @66
-    _BIO_free_all                            @67
-    _BIO_get_accept_socket                   @69
-    _BIO_get_ex_data                         @1062
-    _BIO_get_ex_new_index                    @1063
-    _BIO_get_host_ip                         @71
-    _BIO_get_port                            @72
-    _BIO_get_retry_BIO                       @73
-    _BIO_get_retry_reason                    @74
-    _BIO_gethostbyname                       @75
-    _BIO_gets                                @76
-    _BIO_ghbn_ctrl                           @1003
-    _BIO_int_ctrl                            @53
-    _BIO_new                                 @78
-    _BIO_new_accept                          @79
-    _BIO_new_bio_pair                        @1802
-    _BIO_new_connect                         @80
-    _BIO_new_fd                              @81
-    _BIO_new_file_internal                   @970
-    _BIO_new_fp_internal                     @971
-    _BIO_new_socket                          @84
-    _BIO_pop                                 @85
-    _BIO_printf                              @86
-    _BIO_ptr_ctrl                            @969
-    _BIO_push                                @87
-    _BIO_puts                                @88
-    _BIO_read                                @89
-    _BIO_s_accept                            @90
-    _BIO_s_bio                               @1793
-    _BIO_s_connect                           @91
-    _BIO_s_fd                                @92
-    _BIO_s_file_internal                     @972
-    _BIO_s_mem                               @95
-    _BIO_s_null                              @96
-    _BIO_s_socket                            @98
-    _BIO_set                                 @100
-    _BIO_set_cipher                          @101
-    _BIO_set_ex_data                         @1064
-    _BIO_set_tcp_ndelay                      @102
-    _BIO_sock_cleanup                        @103
-    _BIO_sock_error                          @104
-    _BIO_sock_init                           @105
-    _BIO_sock_non_fatal_error                @106
-    _BIO_sock_should_retry                   @107
-    _BIO_socket_ioctl                        @108
-    _BIO_socket_nbio                         @1102
-    _BIO_write                               @109
-    _BN_BLINDING_convert                     @973
-    _BN_BLINDING_free                        @981
-    _BN_BLINDING_invert                      @974
-    _BN_BLINDING_new                         @980
-    _BN_BLINDING_update                      @975
-    _BN_CTX_free                             @110
-    _BN_CTX_init                             @1135
-    _BN_CTX_new                              @111
-    _BN_MONT_CTX_copy                        @1109
-    _BN_MONT_CTX_free                        @112
-    _BN_MONT_CTX_init                        @1136
-    _BN_MONT_CTX_new                         @113
-    _BN_MONT_CTX_set                         @114
-    _BN_RECP_CTX_free                        @1130
-    _BN_RECP_CTX_init                        @1128
-    _BN_RECP_CTX_new                         @1129
-    _BN_RECP_CTX_set                         @1131
-    _BN_add                                  @115
-    _BN_add_word                             @116
-    _BN_bin2bn                               @118
-    _BN_bn2bin                               @120
-    _BN_bn2dec                               @1002
-    _BN_bn2hex                               @119
-    _BN_bn2mpi                               @1058
-    _BN_clear                                @121
-    _BN_clear_bit                            @122
-    _BN_clear_free                           @123
-    _BN_cmp                                  @124
-    _BN_copy                                 @125
-    _BN_dec2bn                               @1001
-    _BN_div                                  @126
-    _BN_div_recp                             @1134
-    _BN_div_word                             @127
-    _BN_dup                                  @128
-    _BN_exp                                  @998
-    _BN_free                                 @129
-    _BN_from_montgomery                      @130
-    _BN_gcd                                  @131
-    _BN_generate_prime                       @132
-    _BN_get_params                           @1249
-    _BN_get_word                             @133
-    _BN_hex2bn                               @117
-    _BN_init                                 @1095
-    _BN_is_bit_set                           @134
-    _BN_is_prime                             @135
-    _BN_lshift                               @136
-    _BN_lshift1                              @137
-    _BN_mask_bits                            @138
-    _BN_mod                                  @139
-    _BN_mod_exp                              @140
-    _BN_mod_exp2_mont                        @1514
-    _BN_mod_exp_mont                         @141
-    _BN_mod_exp_recp                         @1133
-    _BN_mod_exp_simple                       @143
-    _BN_mod_inverse                          @144
-    _BN_mod_mul                              @145
-    _BN_mod_mul_montgomery                   @146
-    _BN_mod_mul_reciprocal                   @1132
-    _BN_mod_word                             @148
-    _BN_mpi2bn                               @1059
-    _BN_mul                                  @149
-    _BN_mul_word                             @999
-    _BN_new                                  @150
-    _BN_num_bits                             @151
-    _BN_num_bits_word                        @152
-    _BN_options                              @153
-    _BN_print                                @154
-    _BN_rand                                 @156
-    _BN_reciprocal                           @157
-    _BN_rshift                               @158
-    _BN_rshift1                              @159
-    _BN_set_bit                              @160
-    _BN_set_params                           @1248
-    _BN_set_word                             @161
-    _BN_sqr                                  @162
-    _BN_sub                                  @163
-    _BN_sub_word                             @1000
-    _BN_to_ASN1_ENUMERATED                   @1207
-    _BN_to_ASN1_INTEGER                      @164
-    _BN_uadd                                 @708
-    _BN_ucmp                                 @165
-    _BN_usub                                 @709
-    _BN_value_one                            @166
-    _BUF_MEM_free                            @167
-    _BUF_MEM_grow                            @168
-    _BUF_MEM_new                             @169
-    _BUF_strdup                              @170
-    _CAST_cbc_encrypt                        @992
-    _CAST_cfb64_encrypt                      @993
-    _CAST_decrypt                            @990
-    _CAST_ecb_encrypt                        @991
-    _CAST_encrypt                            @989
-    _CAST_ofb64_encrypt                      @994
-    _CAST_set_key                            @988
-    _CERTIFICATEPOLICIES_free                @1486
-    _CERTIFICATEPOLICIES_new                 @1485
-    _COMP_CTX_free                           @1097
-    _COMP_CTX_new                            @1096
-    _COMP_compress_block                     @1144
-    _COMP_expand_block                       @1145
-    _COMP_rle                                @1146
-    _COMP_zlib                               @1147
-    _CONF_free                               @171
-    _CONF_get_number                         @172
-    _CONF_get_section                        @173
-    _CONF_get_string                         @174
-    _CONF_load                               @175
-    _CONF_load_bio                           @1805
-    _CONF_load_fp                            @1806
-    _CRL_DIST_POINTS_free                    @1539
-    _CRL_DIST_POINTS_new                     @1538
-    _CRYPTO_add_lock                         @176
-    _CRYPTO_dbg_free                         @177
-    _CRYPTO_dbg_malloc                       @178
-    _CRYPTO_dbg_realloc                      @179
-    _CRYPTO_dbg_remalloc                     @180
-    _CRYPTO_dup_ex_data                      @1025
-    _CRYPTO_free                             @181
-    _CRYPTO_free_ex_data                     @1004
-    _CRYPTO_free_locked                      @1513
-    _CRYPTO_get_add_lock_callback            @182
-    _CRYPTO_get_ex_data                      @1005
-    _CRYPTO_get_ex_new_index                 @1041
-    _CRYPTO_get_id_callback                  @183
-    _CRYPTO_get_lock_name                    @184
-    _CRYPTO_get_locked_mem_functions         @1511
-    _CRYPTO_get_locking_callback             @185
-    _CRYPTO_get_mem_functions                @186
-    _CRYPTO_get_new_lockid                   @1026
-    _CRYPTO_lock                             @187
-    _CRYPTO_malloc                           @188
-    _CRYPTO_malloc_locked                    @1512
-    _CRYPTO_mem_ctrl                         @189
-    _CRYPTO_mem_leaks                        @190
-    _CRYPTO_mem_leaks_cb                     @191
-    _CRYPTO_new_ex_data                      @1027
-    _CRYPTO_num_locks                        @1804
-    _CRYPTO_realloc                          @193
-    _CRYPTO_remalloc                         @194
-    _CRYPTO_set_add_lock_callback            @195
-    _CRYPTO_set_ex_data                      @1007
-    _CRYPTO_set_id_callback                  @196
-    _CRYPTO_set_locked_mem_functions         @1510
-    _CRYPTO_set_locking_callback             @197
-    _CRYPTO_set_mem_functions                @198
-    _CRYPTO_thread_id                        @199
-    _DH_check                                @200
-    _DH_compute_key                          @201
-    _DH_free                                 @202
-    _DH_generate_key                         @203
-    _DH_generate_parameters                  @204
-    _DH_new                                  @205
-    _DH_size                                 @206
-    _DHparams_print                          @207
-    _DIST_POINT_NAME_free                    @1547
-    _DIST_POINT_NAME_new                     @1546
-    _DIST_POINT_free                         @1544
-    _DIST_POINT_new                          @1542
-    _DSA_SIG_free                            @1334
-    _DSA_SIG_new                             @1333
-    _DSA_do_sign                             @1335
-    _DSA_do_verify                           @1336
-    _DSA_dup_DH                              @1871
-    _DSA_free                                @209
-    _DSA_generate_key                        @210
-    _DSA_generate_parameters                 @211
-    _DSA_is_prime                            @212
-    _DSA_new                                 @213
-    _DSA_print                               @214
-    _DSA_sign                                @216
-    _DSA_sign_setup                          @217
-    _DSA_size                                @218
-    _DSA_verify                              @219
-    _DSAparams_print                         @220
-    _ERR_add_error_data                      @1081
-    _ERR_clear_error                         @222
-    _ERR_error_string                        @223
-    _ERR_free_strings                        @224
-    _ERR_func_error_string                   @225
-    _ERR_get_err_state_table                 @226
-    _ERR_get_error                           @227
-    _ERR_get_error_line                      @228
-    _ERR_get_error_line_data                 @1515
-    _ERR_get_next_error_library              @966
-    _ERR_get_state                           @229
-    _ERR_get_string_table                    @230
-    _ERR_lib_error_string                    @231
-    _ERR_load_ASN1_strings                   @232
-    _ERR_load_BIO_strings                    @233
-    _ERR_load_BN_strings                     @234
-    _ERR_load_BUF_strings                    @235
-    _ERR_load_CONF_strings                   @236
-    _ERR_load_CRYPTOlib_strings              @1009
-    _ERR_load_DH_strings                     @237
-    _ERR_load_DSA_strings                    @238
-    _ERR_load_ERR_strings                    @239
-    _ERR_load_EVP_strings                    @240
-    _ERR_load_OBJ_strings                    @241
-    _ERR_load_PEM_strings                    @242
-    _ERR_load_PKCS12_strings                 @1300
-    _ERR_load_PKCS7_strings                  @919
-    _ERR_load_RSA_strings                    @244
-    _ERR_load_X509V3_strings                 @1164
-    _ERR_load_X509_strings                   @245
-    _ERR_load_crypto_strings                 @246
-    _ERR_load_strings                        @247
-    _ERR_peek_error                          @248
-    _ERR_peek_error_line                     @249
-    _ERR_peek_error_line_data                @1516
-    _ERR_print_errors                        @250
-    _ERR_put_error                           @252
-    _ERR_reason_error_string                 @253
-    _ERR_remove_state                        @254
-    _ERR_set_error_data                      @1082
-    _EVP_BytesToKey                          @255
-    _EVP_CIPHER_CTX_cleanup                  @256
-    _EVP_CIPHER_CTX_init                     @961
-    _EVP_CIPHER_asn1_to_param                @1083
-    _EVP_CIPHER_get_asn1_iv                  @1085
-    _EVP_CIPHER_param_to_asn1                @1084
-    _EVP_CIPHER_set_asn1_iv                  @1086
-    _EVP_CIPHER_type                         @1649
-    _EVP_CipherFinal                         @257
-    _EVP_CipherInit                          @258
-    _EVP_CipherUpdate                        @259
-    _EVP_DecodeBlock                         @260
-    _EVP_DecodeFinal                         @261
-    _EVP_DecodeInit                          @262
-    _EVP_DecodeUpdate                        @263
-    _EVP_DecryptFinal                        @264
-    _EVP_DecryptInit                         @265
-    _EVP_DecryptUpdate                       @266
-    _EVP_DigestFinal                         @267
-    _EVP_DigestInit                          @268
-    _EVP_DigestUpdate                        @269
-    _EVP_EncodeBlock                         @270
-    _EVP_EncodeFinal                         @271
-    _EVP_EncodeInit                          @272
-    _EVP_EncodeUpdate                        @273
-    _EVP_EncryptFinal                        @274
-    _EVP_EncryptInit                         @275
-    _EVP_EncryptUpdate                       @276
-    _EVP_MD_CTX_copy                         @1202
-    _EVP_OpenFinal                           @277
-    _EVP_OpenInit                            @278
-    _EVP_PBE_CipherInit                      @1650
-    _EVP_PBE_alg_add                         @1322
-    _EVP_PBE_cleanup                         @1324
-    _EVP_PKCS82PKEY                          @1318
-    _EVP_PKEY2PKCS8                          @1319
-    _EVP_PKEY_assign                         @279
-    _EVP_PKEY_bits                           @1010
-    _EVP_PKEY_cmp_parameters                 @967
-    _EVP_PKEY_copy_parameters                @280
-    _EVP_PKEY_decrypt                        @1070
-    _EVP_PKEY_encrypt                        @1071
-    _EVP_PKEY_free                           @281
-    _EVP_PKEY_missing_parameters             @282
-    _EVP_PKEY_new                            @283
-    _EVP_PKEY_save_parameters                @284
-    _EVP_PKEY_size                           @285
-    _EVP_PKEY_type                           @286
-    _EVP_SealFinal                           @287
-    _EVP_SealInit                            @288
-    _EVP_SignFinal                           @289
-    _EVP_VerifyFinal                         @290
-    _EVP_add_cipher                          @292
-    _EVP_add_digest                          @293
-    _EVP_bf_cbc                              @294
-    _EVP_bf_cfb                              @295
-    _EVP_bf_ecb                              @296
-    _EVP_bf_ofb                              @297
-    _EVP_cast5_cbc                           @983
-    _EVP_cast5_cfb                           @984
-    _EVP_cast5_ecb                           @985
-    _EVP_cast5_ofb                           @986
-    _EVP_cleanup                             @298
-    _EVP_des_cbc                             @299
-    _EVP_des_cfb                             @300
-    _EVP_des_ecb                             @301
-    _EVP_des_ede                             @302
-    _EVP_des_ede3                            @303
-    _EVP_des_ede3_cbc                        @304
-    _EVP_des_ede3_cfb                        @305
-    _EVP_des_ede3_ofb                        @306
-    _EVP_des_ede_cbc                         @307
-    _EVP_des_ede_cfb                         @308
-    _EVP_des_ede_ofb                         @309
-    _EVP_des_ofb                             @310
-    _EVP_desx_cbc                            @311
-    _EVP_dss                                 @312
-    _EVP_dss1                                @313
-    _EVP_enc_null                            @314
-    _EVP_get_cipherbyname                    @315
-    _EVP_get_digestbyname                    @316
-    _EVP_get_pw_prompt                       @317
-    _EVP_idea_cbc                            @318
-    _EVP_idea_cfb                            @319
-    _EVP_idea_ecb                            @320
-    _EVP_idea_ofb                            @321
-    _EVP_md2                                 @322
-    _EVP_md5                                 @323
-    _EVP_md_null                             @324
-    _EVP_mdc2                                @942
-    _EVP_rc2_40_cbc                          @959
-    _EVP_rc2_64_cbc                          @1103
-    _EVP_rc2_cbc                             @325
-    _EVP_rc2_cfb                             @326
-    _EVP_rc2_ecb                             @327
-    _EVP_rc2_ofb                             @328
-    _EVP_rc4                                 @329
-    _EVP_rc4_40                              @960
-    _EVP_rc5_32_12_16_cbc                    @1087
-    _EVP_rc5_32_12_16_cfb                    @1088
-    _EVP_rc5_32_12_16_ecb                    @1089
-    _EVP_rc5_32_12_16_ofb                    @1090
-    _EVP_read_pw_string                      @330
-    _EVP_ripemd160                           @1252
-    _EVP_set_pw_prompt                       @331
-    _EVP_sha                                 @332
-    _EVP_sha1                                @333
-    _GENERAL_NAMES_free                      @1216
-    _GENERAL_NAMES_new                       @1215
-    _GENERAL_NAME_free                       @1214
-    _GENERAL_NAME_new                        @1213
-    _HMAC                                    @962
-    _HMAC_Final                              @965
-    _HMAC_Init                               @963
-    _HMAC_Update                             @964
-    _HMAC_cleanup                            @968
-    _MD2                                     @334
-    _MD2_Final                               @335
-    _MD2_Init                                @336
-    _MD2_Update                              @337
-    _MD2_options                             @338
-    _MD5                                     @339
-    _MD5_Final                               @340
-    _MD5_Init                                @341
-    _MD5_Transform                           @1011
-    _MD5_Update                              @342
-    _MDC2                                    @343
-    _MDC2_Final                              @344
-    _MDC2_Init                               @345
-    _MDC2_Update                             @346
-    _NETSCAPE_CERT_SEQUENCE_free             @1165
-    _NETSCAPE_CERT_SEQUENCE_new              @1166
-    _NETSCAPE_SPKAC_free                     @347
-    _NETSCAPE_SPKAC_new                      @348
-    _NETSCAPE_SPKI_free                      @349
-    _NETSCAPE_SPKI_new                       @350
-    _NETSCAPE_SPKI_sign                      @351
-    _NETSCAPE_SPKI_verify                    @352
-    _NOTICEREF_free                          @1503
-    _NOTICEREF_new                           @1501
-    _OBJ_NAME_add                            @1101
-    _OBJ_NAME_cleanup                        @1104
-    _OBJ_NAME_get                            @1105
-    _OBJ_NAME_init                           @1106
-    _OBJ_NAME_new_index                      @1107
-    _OBJ_NAME_remove                         @1108
-    _OBJ_add_object                          @353
-    _OBJ_bsearch                             @354
-    _OBJ_cleanup                             @355
-    _OBJ_cmp                                 @356
-    _OBJ_create                              @357
-    _OBJ_create_objects                      @997
-    _OBJ_dup                                 @358
-    _OBJ_ln2nid                              @359
-    _OBJ_new_nid                             @360
-    _OBJ_nid2ln                              @361
-    _OBJ_nid2obj                             @362
-    _OBJ_nid2sn                              @363
-    _OBJ_obj2nid                             @364
-    _OBJ_obj2txt                             @1870
-    _OBJ_sn2nid                              @365
-    _OBJ_txt2nid                             @366
-    _OBJ_txt2obj                             @1167
-    _PBE2PARAM_free                          @1404
-    _PBE2PARAM_new                           @1402
-    _PBEPARAM_free                           @1313
-    _PBEPARAM_new                            @1311
-    _PBKDF2PARAM_free                        @1400
-    _PBKDF2PARAM_new                         @1398
-    _PEM_ASN1_read_bio                       @368
-    _PEM_ASN1_write_bio                      @370
-    _PEM_SealFinal                           @371
-    _PEM_SealInit                            @372
-    _PEM_SealUpdate                          @373
-    _PEM_SignFinal                           @374
-    _PEM_SignInit                            @375
-    _PEM_SignUpdate                          @376
-    _PEM_X509_INFO_read_bio                  @378
-    _PEM_X509_INFO_write_bio                 @379
-    _PEM_dek_info                            @380
-    _PEM_do_header                           @381
-    _PEM_get_EVP_CIPHER_INFO                 @382
-    _PEM_proc_type                           @383
-    _PEM_read_bio                            @394
-    _PEM_read_bio_DHparams                   @395
-    _PEM_read_bio_DSAPrivateKey              @396
-    _PEM_read_bio_DSAparams                  @397
-    _PEM_read_bio_NETSCAPE_CERT_SEQUENCE     @1169
-    _PEM_read_bio_PKCS7                      @398
-    _PEM_read_bio_PKCS8                      @1787
-    _PEM_read_bio_PKCS8_PRIV_KEY_INFO        @1778
-    _PEM_read_bio_PrivateKey                 @399
-    _PEM_read_bio_RSAPrivateKey              @400
-    _PEM_read_bio_RSAPublicKey               @943
-    _PEM_read_bio_X509                       @401
-    _PEM_read_bio_X509_CRL                   @402
-    _PEM_read_bio_X509_REQ                   @403
-    _PEM_write_PKCS8PrivateKey               @1798
-    _PEM_write_bio                           @414
-    _PEM_write_bio_DHparams                  @415
-    _PEM_write_bio_DSAPrivateKey             @416
-    _PEM_write_bio_DSAparams                 @417
-    _PEM_write_bio_NETSCAPE_CERT_SEQUENCE    @1171
-    _PEM_write_bio_PKCS7                     @418
-    _PEM_write_bio_PKCS8                     @1776
-    _PEM_write_bio_PKCS8PrivateKey           @1797
-    _PEM_write_bio_PKCS8_PRIV_KEY_INFO       @1781
-    _PEM_write_bio_PrivateKey                @419
-    _PEM_write_bio_RSAPrivateKey             @420
-    _PEM_write_bio_RSAPublicKey              @944
-    _PEM_write_bio_X509                      @421
-    _PEM_write_bio_X509_CRL                  @422
-    _PEM_write_bio_X509_REQ                  @423
-    _PKCS12_BAGS_free                        @1287
-    _PKCS12_BAGS_new                         @1285
-    _PKCS12_MAC_DATA_free                    @1295
-    _PKCS12_MAC_DATA_new                     @1293
-    _PKCS12_MAKE_KEYBAG                      @1263
-    _PKCS12_MAKE_SHKEYBAG                    @1265
-    _PKCS12_PBE_add                          @1301
-    _PKCS12_PBE_keyivgen                     @1517
-    _PKCS12_SAFEBAG_free                     @1299
-    _PKCS12_SAFEBAG_new                      @1297
-    _PKCS12_add_friendlyname_asc             @1269
-    _PKCS12_add_friendlyname_uni             @1270
-    _PKCS12_add_localkeyid                   @1268
-    _PKCS12_create                           @1305
-    _PKCS12_decrypt_d2i                      @1273
-    _PKCS12_free                             @1291
-    _PKCS12_gen_mac                          @1278
-    _PKCS12_get_attr_gen                     @1303
-    _PKCS12_get_friendlyname                 @1271
-    _PKCS12_i2d_encrypt                      @1274
-    _PKCS12_init                             @1275
-    _PKCS12_key_gen_asc                      @1276
-    _PKCS12_key_gen_uni                      @1277
-    _PKCS12_new                              @1290
-    _PKCS12_pack_p7data                      @1266
-    _PKCS12_pack_p7encdata                   @1267
-    _PKCS12_pack_safebag                     @1262
-    _PKCS12_parse                            @1304
-    _PKCS12_pbe_crypt                        @1272
-    _PKCS12_set_mac                          @1280
-    _PKCS12_setup_mac                        @1281
-    _PKCS12_verify_mac                       @1279
-    _PKCS5_PBE_add                           @1775
-    _PKCS5_PBE_keyivgen                      @1789
-    _PKCS5_PBKDF2_HMAC_SHA1                  @1795
-    _PKCS5_pbe2_set                          @1794
-    _PKCS5_pbe_set                           @1323
-    _PKCS5_v2_PBE_keyivgen                   @1796
-    _PKCS7_DIGEST_free                       @424
-    _PKCS7_DIGEST_new                        @425
-    _PKCS7_ENCRYPT_free                      @426
-    _PKCS7_ENCRYPT_new                       @427
-    _PKCS7_ENC_CONTENT_free                  @428
-    _PKCS7_ENC_CONTENT_new                   @429
-    _PKCS7_ENVELOPE_free                     @430
-    _PKCS7_ENVELOPE_new                      @431
-    _PKCS7_ISSUER_AND_SERIAL_digest          @432
-    _PKCS7_ISSUER_AND_SERIAL_free            @433
-    _PKCS7_ISSUER_AND_SERIAL_new             @434
-    _PKCS7_RECIP_INFO_free                   @435
-    _PKCS7_RECIP_INFO_new                    @436
-    _PKCS7_RECIP_INFO_set                    @1072
-    _PKCS7_SIGNED_free                       @437
-    _PKCS7_SIGNED_new                        @438
-    _PKCS7_SIGNER_INFO_free                  @439
-    _PKCS7_SIGNER_INFO_new                   @440
-    _PKCS7_SIGNER_INFO_set                   @930
-    _PKCS7_SIGN_ENVELOPE_free                @441
-    _PKCS7_SIGN_ENVELOPE_new                 @442
-    _PKCS7_add_attribute                     @1138
-    _PKCS7_add_certificate                   @932
-    _PKCS7_add_crl                           @933
-    _PKCS7_add_recipient                     @1073
-    _PKCS7_add_recipient_info                @1074
-    _PKCS7_add_signature                     @938
-    _PKCS7_add_signed_attribute              @1139
-    _PKCS7_add_signer                        @931
-    _PKCS7_cert_from_signer_info             @939
-    _PKCS7_content_free                      @918
-    _PKCS7_content_new                       @934
-    _PKCS7_ctrl                              @927
-    _PKCS7_dataDecode                        @1246
-    _PKCS7_dataFinal                         @1245
-    _PKCS7_dataInit                          @937
-    _PKCS7_dataVerify                        @936
-    _PKCS7_digest_from_attributes            @1140
-    _PKCS7_dup                               @443
-    _PKCS7_free                              @444
-    _PKCS7_get_attribute                     @1141
-    _PKCS7_get_issuer_and_serial             @1142
-    _PKCS7_get_signed_attribute              @1143
-    _PKCS7_get_signer_info                   @940
-    _PKCS7_new                               @445
-    _PKCS7_set_attributes                    @1153
-    _PKCS7_set_cipher                        @1075
-    _PKCS7_set_content                       @929
-    _PKCS7_set_signed_attributes             @1154
-    _PKCS7_set_type                          @928
-    _PKCS7_signatureVerify                   @1845
-    _PKCS8_PRIV_KEY_INFO_free                @1317
-    _PKCS8_PRIV_KEY_INFO_new                 @1315
-    _PKCS8_add_keyusage                      @1302
-    _PKCS8_encrypt                           @1264
-    _PKCS8_set_broken                        @1320
-    _PKEY_USAGE_PERIOD_free                  @1235
-    _PKEY_USAGE_PERIOD_new                   @1234
-    _POLICYINFO_free                         @1491
-    _POLICYINFO_new                          @1489
-    _POLICYQUALINFO_free                     @1495
-    _POLICYQUALINFO_new                      @1493
-    _RAND_SSLeay                             @1113
-    _RAND_bytes                              @464
-    _RAND_cleanup                            @465
-    _RAND_file_name                          @466
-    _RAND_get_rand_method                    @1137
-    _RAND_load_file                          @467
-    _RAND_screen                             @468
-    _RAND_seed                               @469
-    _RAND_set_rand_method                    @1114
-    _RAND_write_file                         @470
-    _RC2_cbc_encrypt                         @471
-    _RC2_cfb64_encrypt                       @472
-    _RC2_decrypt                             @995
-    _RC2_ecb_encrypt                         @473
-    _RC2_encrypt                             @474
-    _RC2_ofb64_encrypt                       @475
-    _RC2_set_key                             @476
-    _RC4                                     @477
-    _RC4_options                             @478
-    _RC4_set_key                             @479
-    _RC5_32_cbc_encrypt                      @1051
-    _RC5_32_cfb64_encrypt                    @1052
-    _RC5_32_decrypt                          @1050
-    _RC5_32_ecb_encrypt                      @1048
-    _RC5_32_encrypt                          @1049
-    _RC5_32_ofb64_encrypt                    @1053
-    _RC5_32_set_key                          @1047
-    _RIPEMD160                               @1045
-    _RIPEMD160_Final                         @1044
-    _RIPEMD160_Init                          @1042
-    _RIPEMD160_Transform                     @1046
-    _RIPEMD160_Update                        @1043
-    _RSAPrivateKey_asn1_meth                 @480
-    _RSAPrivateKey_dup                       @481
-    _RSAPublicKey_dup                        @482
-    _RSA_PKCS1_SSLeay                        @483
-    _RSA_blinding_off                        @978
-    _RSA_blinding_on                         @977
-    _RSA_check_key                           @1869
-    _RSA_flags                               @956
-    _RSA_free                                @484
-    _RSA_generate_key                        @485
-    _RSA_get_default_method                  @1848
-    _RSA_get_ex_data                         @1029
-    _RSA_get_ex_new_index                    @1030
-    _RSA_get_method                          @1847
-    _RSA_memory_lock                         @1115
-    _RSA_new                                 @486
-    _RSA_new_method                          @487
-    _RSA_padding_add_PKCS1_OAEP              @1226
-    _RSA_padding_add_PKCS1_type_1            @1031
-    _RSA_padding_add_PKCS1_type_2            @1032
-    _RSA_padding_add_SSLv23                  @1033
-    _RSA_padding_add_none                    @1034
-    _RSA_padding_check_PKCS1_OAEP            @1227
-    _RSA_padding_check_PKCS1_type_1          @1035
-    _RSA_padding_check_PKCS1_type_2          @1036
-    _RSA_padding_check_SSLv23                @1037
-    _RSA_padding_check_none                  @1038
-    _RSA_print                               @488
-    _RSA_private_decrypt                     @490
-    _RSA_private_encrypt                     @491
-    _RSA_public_decrypt                      @492
-    _RSA_public_encrypt                      @493
-    _RSA_set_default_method                  @494
-    _RSA_set_ex_data                         @1028
-    _RSA_set_method                          @1846
-    _RSA_sign                                @495
-    _RSA_sign_ASN1_OCTET_STRING              @496
-    _RSA_size                                @497
-    _RSA_verify                              @498
-    _RSA_verify_ASN1_OCTET_STRING            @499
-    _SHA                                     @500
-    _SHA1                                    @501
-    _SHA1_Final                              @502
-    _SHA1_Init                               @503
-    _SHA1_Transform                          @1012
-    _SHA1_Update                             @504
-    _SHA_Final                               @505
-    _SHA_Init                                @506
-    _SHA_Transform                           @1013
-    _SHA_Update                              @507
-    _SXNETID_free                            @1332
-    _SXNETID_new                             @1331
-    _SXNET_add_id_INTEGER                    @1479
-    _SXNET_add_id_asc                        @1477
-    _SXNET_add_id_ulong                      @1478
-    _SXNET_free                              @1328
-    _SXNET_get_id_INTEGER                    @1482
-    _SXNET_get_id_asc                        @1480
-    _SXNET_get_id_ulong                      @1481
-    _SXNET_new                               @1327
-    _TXT_DB_create_index                     @511
-    _TXT_DB_free                             @512
-    _TXT_DB_get_by_index                     @513
-    _TXT_DB_insert                           @514
-    _TXT_DB_read                             @515
-    _TXT_DB_write                            @516
-    _USERNOTICE_free                         @1499
-    _USERNOTICE_new                          @1497
-    _X509V3_EXT_CRL_add_conf                 @1247
-    _X509V3_EXT_add                          @1172
-    _X509V3_EXT_add_alias                    @1173
-    _X509V3_EXT_add_conf                     @1174
-    _X509V3_EXT_add_list                     @1648
-    _X509V3_EXT_cleanup                      @1175
-    _X509V3_EXT_conf                         @1176
-    _X509V3_EXT_conf_nid                     @1177
-    _X509V3_EXT_d2i                          @1238
-    _X509V3_EXT_get                          @1178
-    _X509V3_EXT_get_nid                      @1179
-    _X509V3_EXT_i2d                          @1646
-    _X509V3_EXT_print                        @1180
-    _X509V3_EXT_print_fp                     @1181
-    _X509V3_EXT_val_prn                      @1647
-    _X509V3_add_standard_extensions          @1182
-    _X509V3_add_value                        @1183
-    _X509V3_add_value_bool                   @1184
-    _X509V3_add_value_bool_nf                @1651
-    _X509V3_add_value_int                    @1185
-    _X509V3_add_value_uchar                  @1549
-    _X509V3_conf_free                        @1186
-    _X509V3_get_section                      @1505
-    _X509V3_get_string                       @1504
-    _X509V3_get_value_bool                   @1187
-    _X509V3_get_value_int                    @1188
-    _X509V3_parse_list                       @1189
-    _X509V3_section_free                     @1507
-    _X509V3_set_conf_lhash                   @1483
-    _X509V3_set_ctx                          @1508
-    _X509V3_string_free                      @1506
-    _X509_ALGOR_dup                          @1518
-    _X509_ALGOR_free                         @517
-    _X509_ALGOR_new                          @518
-    _X509_ATTRIBUTE_create                   @1155
-    _X509_ATTRIBUTE_dup                      @1156
-    _X509_ATTRIBUTE_free                     @519
-    _X509_ATTRIBUTE_new                      @520
-    _X509_CINF_free                          @521
-    _X509_CINF_new                           @522
-    _X509_CRL_INFO_free                      @523
-    _X509_CRL_INFO_new                       @524
-    _X509_CRL_add_ext                        @525
-    _X509_CRL_cmp                            @526
-    _X509_CRL_delete_ext                     @527
-    _X509_CRL_dup                            @528
-    _X509_CRL_free                           @529
-    _X509_CRL_get_ext                        @530
-    _X509_CRL_get_ext_by_NID                 @531
-    _X509_CRL_get_ext_by_OBJ                 @532
-    _X509_CRL_get_ext_by_critical            @533
-    _X509_CRL_get_ext_count                  @534
-    _X509_CRL_new                            @535
-    _X509_CRL_print                          @1229
-    _X509_CRL_sign                           @536
-    _X509_CRL_verify                         @537
-    _X509_EXTENSION_create_by_NID            @538
-    _X509_EXTENSION_create_by_OBJ            @539
-    _X509_EXTENSION_dup                      @540
-    _X509_EXTENSION_free                     @541
-    _X509_EXTENSION_get_critical             @542
-    _X509_EXTENSION_get_data                 @543
-    _X509_EXTENSION_get_object               @544
-    _X509_EXTENSION_new                      @545
-    _X509_EXTENSION_set_critical             @546
-    _X509_EXTENSION_set_data                 @547
-    _X509_EXTENSION_set_object               @548
-    _X509_INFO_free                          @549
-    _X509_INFO_new                           @550
-    _X509_LOOKUP_by_alias                    @551
-    _X509_LOOKUP_by_fingerprint              @552
-    _X509_LOOKUP_by_issuer_serial            @553
-    _X509_LOOKUP_by_subject                  @554
-    _X509_LOOKUP_ctrl                        @555
-    _X509_LOOKUP_file                        @556
-    _X509_LOOKUP_free                        @557
-    _X509_LOOKUP_hash_dir                    @558
-    _X509_LOOKUP_init                        @559
-    _X509_LOOKUP_new                         @560
-    _X509_LOOKUP_shutdown                    @561
-    _X509_NAME_ENTRY_create_by_NID           @562
-    _X509_NAME_ENTRY_create_by_OBJ           @563
-    _X509_NAME_ENTRY_dup                     @564
-    _X509_NAME_ENTRY_free                    @565
-    _X509_NAME_ENTRY_get_data                @566
-    _X509_NAME_ENTRY_get_object              @567
-    _X509_NAME_ENTRY_new                     @568
-    _X509_NAME_ENTRY_set_data                @569
-    _X509_NAME_ENTRY_set_object              @570
-    _X509_NAME_add_entry                     @571
-    _X509_NAME_cmp                           @572
-    _X509_NAME_delete_entry                  @573
-    _X509_NAME_digest                        @574
-    _X509_NAME_dup                           @575
-    _X509_NAME_entry_count                   @576
-    _X509_NAME_free                          @577
-    _X509_NAME_get_entry                     @578
-    _X509_NAME_get_index_by_NID              @579
-    _X509_NAME_get_index_by_OBJ              @580
-    _X509_NAME_get_text_by_NID               @581
-    _X509_NAME_get_text_by_OBJ               @582
-    _X509_NAME_hash                          @583
-    _X509_NAME_new                           @584
-    _X509_NAME_oneline                       @585
-    _X509_NAME_print                         @586
-    _X509_NAME_set                           @587
-    _X509_OBJECT_free_contents               @588
-    _X509_OBJECT_retrieve_by_subject         @589
-    _X509_OBJECT_up_ref_count                @590
-    _X509_PKEY_free                          @591
-    _X509_PKEY_new                           @592
-    _X509_PUBKEY_free                        @593
-    _X509_PUBKEY_get                         @594
-    _X509_PUBKEY_new                         @595
-    _X509_PUBKEY_set                         @596
-    _X509_REQ_INFO_free                      @597
-    _X509_REQ_INFO_new                       @598
-    _X509_REQ_dup                            @599
-    _X509_REQ_free                           @600
-    _X509_REQ_get_pubkey                     @601
-    _X509_REQ_new                            @602
-    _X509_REQ_print                          @603
-    _X509_REQ_set_pubkey                     @605
-    _X509_REQ_set_subject_name               @606
-    _X509_REQ_set_version                    @607
-    _X509_REQ_sign                           @608
-    _X509_REQ_to_X509                        @609
-    _X509_REQ_verify                         @610
-    _X509_REVOKED_add_ext                    @611
-    _X509_REVOKED_delete_ext                 @612
-    _X509_REVOKED_free                       @613
-    _X509_REVOKED_get_ext                    @614
-    _X509_REVOKED_get_ext_by_NID             @615
-    _X509_REVOKED_get_ext_by_OBJ             @616
-    _X509_REVOKED_get_ext_by_critical        @617
-    _X509_REVOKED_get_ext_count              @618
-    _X509_REVOKED_new                        @619
-    _X509_SIG_free                           @620
-    _X509_SIG_new                            @621
-    _X509_STORE_CTX_cleanup                  @622
-    _X509_STORE_CTX_get_chain                @1014
-    _X509_STORE_CTX_get_current_cert         @1015
-    _X509_STORE_CTX_get_error                @1016
-    _X509_STORE_CTX_get_error_depth          @1017
-    _X509_STORE_CTX_get_ex_data              @1018
-    _X509_STORE_CTX_get_ex_new_index         @1100
-    _X509_STORE_CTX_init                     @623
-    _X509_STORE_CTX_set_cert                 @1020
-    _X509_STORE_CTX_set_chain                @1021
-    _X509_STORE_CTX_set_error                @1022
-    _X509_STORE_CTX_set_ex_data              @1023
-    _X509_STORE_add_cert                     @624
-    _X509_STORE_add_crl                      @957
-    _X509_STORE_add_lookup                   @625
-    _X509_STORE_free                         @626
-    _X509_STORE_get_by_subject               @627
-    _X509_STORE_load_locations               @628
-    _X509_STORE_new                          @629
-    _X509_STORE_set_default_paths            @630
-    _X509_VAL_free                           @631
-    _X509_VAL_new                            @632
-    _X509_add_ext                            @633
-    _X509_asn1_meth                          @634
-    _X509_certificate_type                   @635
-    _X509_check_private_key                  @636
-    _X509_cmp_current_time                   @637
-    _X509_delete_ext                         @638
-    _X509_digest                             @639
-    _X509_dup                                @640
-    _X509_find_by_issuer_and_serial          @920
-    _X509_find_by_subject                    @921
-    _X509_free                               @641
-    _X509_get_default_cert_area              @642
-    _X509_get_default_cert_dir               @643
-    _X509_get_default_cert_dir_env           @644
-    _X509_get_default_cert_file              @645
-    _X509_get_default_cert_file_env          @646
-    _X509_get_default_private_dir            @647
-    _X509_get_ext                            @648
-    _X509_get_ext_by_NID                     @649
-    _X509_get_ext_by_OBJ                     @650
-    _X509_get_ext_by_critical                @651
-    _X509_get_ext_count                      @652
-    _X509_get_issuer_name                    @653
-    _X509_get_pubkey                         @654
-    _X509_get_pubkey_parameters              @655
-    _X509_get_serialNumber                   @656
-    _X509_get_subject_name                   @657
-    _X509_gmtime_adj                         @658
-    _X509_issuer_and_serial_cmp              @659
-    _X509_issuer_and_serial_hash             @660
-    _X509_issuer_name_cmp                    @661
-    _X509_issuer_name_hash                   @662
-    _X509_load_cert_file                     @663
-    _X509_load_crl_file                      @958
-    _X509_new                                @664
-    _X509_print                              @665
-    _X509_set_issuer_name                    @667
-    _X509_set_notAfter                       @668
-    _X509_set_notBefore                      @669
-    _X509_set_pubkey                         @670
-    _X509_set_serialNumber                   @671
-    _X509_set_subject_name                   @672
-    _X509_set_version                        @673
-    _X509_sign                               @674
-    _X509_subject_name_cmp                   @675
-    _X509_subject_name_hash                  @676
-    _X509_to_X509_REQ                        @677
-    _X509_verify                             @678
-    _X509_verify_cert                        @679
-    _X509_verify_cert_error_string           @680
-    _X509v3_add_ext                          @681
-    _X509v3_delete_ext                       @688
-    _X509v3_get_ext                          @689
-    _X509v3_get_ext_by_NID                   @690
-    _X509v3_get_ext_by_OBJ                   @691
-    _X509v3_get_ext_by_critical              @692
-    _X509v3_get_ext_count                    @693
-    _a2d_ASN1_OBJECT                         @699
-    _a2i_ASN1_ENUMERATED                     @1210
-    _a2i_ASN1_INTEGER                        @700
-    _a2i_ASN1_STRING                         @701
-    _asc2uni                                 @1282
-    _asn1_Finish                             @702
-    _asn1_GetSequence                        @703
-    _asn1_add_error                          @1091
-    _bn_add_words                            @1039
-    _bn_div_words                            @704
-    _bn_expand2                              @705
-    _bn_mul_add_words                        @706
-    _bn_mul_words                            @707
-    _bn_sqr_words                            @710
-    _bn_sub_words                            @1116
-    _crypt                                   @711
-    _d2i_ASN1_BIT_STRING                     @712
-    _d2i_ASN1_BMPSTRING                      @1092
-    _d2i_ASN1_BOOLEAN                        @713
-    _d2i_ASN1_ENUMERATED                     @1204
-    _d2i_ASN1_GENERALIZEDTIME                @1190
-    _d2i_ASN1_HEADER                         @714
-    _d2i_ASN1_IA5STRING                      @715
-    _d2i_ASN1_INTEGER                        @716
-    _d2i_ASN1_OBJECT                         @717
-    _d2i_ASN1_OCTET_STRING                   @718
-    _d2i_ASN1_PRINTABLE                      @719
-    _d2i_ASN1_PRINTABLESTRING                @720
-    _d2i_ASN1_SET                            @721
-    _d2i_ASN1_SET_OF_ASN1_OBJECT             @1844
-    _d2i_ASN1_SET_OF_ASN1_TYPE               @1589
-    _d2i_ASN1_SET_OF_DIST_POINT              @1535
-    _d2i_ASN1_SET_OF_GENERAL_NAME            @1421
-    _d2i_ASN1_SET_OF_PKCS7_RECIP_INFO        @1753
-    _d2i_ASN1_SET_OF_PKCS7_SIGNER_INFO       @1748
-    _d2i_ASN1_SET_OF_POLICYINFO              @1475
-    _d2i_ASN1_SET_OF_POLICYQUALINFO          @1457
-    _d2i_ASN1_SET_OF_SXNETID                 @1439
-    _d2i_ASN1_SET_OF_X509                    @1379
-    _d2i_ASN1_SET_OF_X509_ALGOR              @1696
-    _d2i_ASN1_SET_OF_X509_ATTRIBUTE          @1555
-    _d2i_ASN1_SET_OF_X509_CRL                @1702
-    _d2i_ASN1_SET_OF_X509_EXTENSION          @1567
-    _d2i_ASN1_SET_OF_X509_NAME_ENTRY         @1574
-    _d2i_ASN1_SET_OF_X509_REVOKED            @1674
-    _d2i_ASN1_T61STRING                      @722
-    _d2i_ASN1_TIME                           @1191
-    _d2i_ASN1_TYPE                           @723
-    _d2i_ASN1_UINTEGER                       @1652
-    _d2i_ASN1_UTCTIME                        @724
-    _d2i_ASN1_UTF8STRING                     @1342
-    _d2i_ASN1_VISIBLESTRING                  @1340
-    _d2i_ASN1_bytes                          @725
-    _d2i_ASN1_type_bytes                     @726
-    _d2i_AUTHORITY_KEYID                     @1255
-    _d2i_BASIC_CONSTRAINTS                   @1192
-    _d2i_CERTIFICATEPOLICIES                 @1487
-    _d2i_CRL_DIST_POINTS                     @1540
-    _d2i_DHparams                            @727
-    _d2i_DIRECTORYSTRING                     @1344
-    _d2i_DISPLAYTEXT                         @1346
-    _d2i_DIST_POINT                          @1543
-    _d2i_DIST_POINT_NAME                     @1548
-    _d2i_DSAPrivateKey                       @728
-    _d2i_DSAPrivateKey_bio                   @729
-    _d2i_DSAPublicKey                        @731
-    _d2i_DSA_SIG                             @1337
-    _d2i_DSAparams                           @732
-    _d2i_GENERAL_NAME                        @1212
-    _d2i_GENERAL_NAMES                       @1217
-    _d2i_NETSCAPE_CERT_SEQUENCE              @1193
-    _d2i_NETSCAPE_SPKAC                      @733
-    _d2i_NETSCAPE_SPKI                       @734
-    _d2i_NOTICEREF                           @1502
-    _d2i_Netscape_RSA                        @735
-    _d2i_Netscape_RSA_2                      @1040
-    _d2i_PBE2PARAM                           @1403
-    _d2i_PBEPARAM                            @1312
-    _d2i_PBKDF2PARAM                         @1399
-    _d2i_PKCS12                              @1289
-    _d2i_PKCS12_BAGS                         @1286
-    _d2i_PKCS12_MAC_DATA                     @1294
-    _d2i_PKCS12_SAFEBAG                      @1298
-    _d2i_PKCS12_bio                          @1308
-    _d2i_PKCS12_fp                           @1309
-    _d2i_PKCS7                               @736
-    _d2i_PKCS7_DIGEST                        @737
-    _d2i_PKCS7_ENCRYPT                       @738
-    _d2i_PKCS7_ENC_CONTENT                   @739
-    _d2i_PKCS7_ENVELOPE                      @740
-    _d2i_PKCS7_ISSUER_AND_SERIAL             @741
-    _d2i_PKCS7_RECIP_INFO                    @742
-    _d2i_PKCS7_SIGNED                        @743
-    _d2i_PKCS7_SIGNER_INFO                   @744
-    _d2i_PKCS7_SIGN_ENVELOPE                 @745
-    _d2i_PKCS7_bio                           @746
-    _d2i_PKCS8_PRIV_KEY_INFO                 @1316
-    _d2i_PKCS8_PRIV_KEY_INFO_bio             @1783
-    _d2i_PKCS8_bio                           @1779
-    _d2i_PKEY_USAGE_PERIOD                   @1233
-    _d2i_POLICYINFO                          @1490
-    _d2i_POLICYQUALINFO                      @1494
-    _d2i_PrivateKey                          @748
-    _d2i_PublicKey                           @749
-    _d2i_RSAPrivateKey                       @750
-    _d2i_RSAPrivateKey_bio                   @751
-    _d2i_RSAPublicKey                        @753
-    _d2i_RSAPublicKey_bio                    @945
-    _d2i_SXNET                               @1326
-    _d2i_SXNETID                             @1330
-    _d2i_USERNOTICE                          @1498
-    _d2i_X509                                @754
-    _d2i_X509_ALGOR                          @755
-    _d2i_X509_ATTRIBUTE                      @756
-    _d2i_X509_CINF                           @757
-    _d2i_X509_CRL                            @758
-    _d2i_X509_CRL_INFO                       @759
-    _d2i_X509_CRL_bio                        @760
-    _d2i_X509_EXTENSION                      @762
-    _d2i_X509_NAME                           @763
-    _d2i_X509_NAME_ENTRY                     @764
-    _d2i_X509_PKEY                           @765
-    _d2i_X509_PUBKEY                         @766
-    _d2i_X509_REQ                            @767
-    _d2i_X509_REQ_INFO                       @768
-    _d2i_X509_REQ_bio                        @769
-    _d2i_X509_REVOKED                        @771
-    _d2i_X509_SIG                            @772
-    _d2i_X509_VAL                            @773
-    _d2i_X509_bio                            @774
-    _d2i_ext_ku                              @1194
-    _des_cbc_cksum                           @777
-    _des_cbc_encrypt                         @778
-    _des_cblock_print_file                   @779
-    _des_cfb64_encrypt                       @780
-    _des_cfb_encrypt                         @781
-    _des_decrypt3                            @782
-    _des_ecb3_encrypt                        @783
-    _des_ecb_encrypt                         @784
-    _des_ede3_cbc_encrypt                    @785
-    _des_ede3_cbcm_encrypt                   @1225
-    _des_ede3_cfb64_encrypt                  @786
-    _des_ede3_ofb64_encrypt                  @787
-    _des_enc_read                            @788
-    _des_enc_write                           @789
-    _des_encrypt                             @790
-    _des_encrypt2                            @791
-    _des_encrypt3                            @792
-    _des_fcrypt                              @793
-    _des_is_weak_key                         @794
-    _des_key_sched                           @795
-    _des_ncbc_encrypt                        @796
-    _des_ofb64_encrypt                       @797
-    _des_ofb_encrypt                         @798
-    _des_options                             @799
-    _des_pcbc_encrypt                        @800
-    _des_quad_cksum                          @801
-    _des_random_key                          @802
-    _des_random_seed                         @803
-    _des_read_2passwords                     @804
-    _des_read_password                       @805
-    _des_read_pw                             @806
-    _des_read_pw_string                      @807
-    _des_set_key                             @808
-    _des_set_odd_parity                      @809
-    _des_string_to_2keys                     @810
-    _des_string_to_key                       @811
-    _des_xcbc_encrypt                        @812
-    _des_xwhite_in2out                       @813
-    _ext_ku_free                             @1195
-    _ext_ku_new                              @1196
-    _hex_to_string                           @1223
-    _i2a_ASN1_ENUMERATED                     @1209
-    _i2a_ASN1_INTEGER                        @815
-    _i2a_ASN1_OBJECT                         @816
-    _i2a_ASN1_STRING                         @817
-    _i2d_ASN1_BIT_STRING                     @818
-    _i2d_ASN1_BMPSTRING                      @1093
-    _i2d_ASN1_BOOLEAN                        @819
-    _i2d_ASN1_ENUMERATED                     @1203
-    _i2d_ASN1_GENERALIZEDTIME                @1197
-    _i2d_ASN1_HEADER                         @820
-    _i2d_ASN1_IA5STRING                      @821
-    _i2d_ASN1_INTEGER                        @822
-    _i2d_ASN1_OBJECT                         @823
-    _i2d_ASN1_OCTET_STRING                   @824
-    _i2d_ASN1_PRINTABLE                      @825
-    _i2d_ASN1_SET                            @826
-    _i2d_ASN1_SET_OF_ASN1_OBJECT             @1837
-    _i2d_ASN1_SET_OF_ASN1_TYPE               @1560
-    _i2d_ASN1_SET_OF_DIST_POINT              @1536
-    _i2d_ASN1_SET_OF_GENERAL_NAME            @1422
-    _i2d_ASN1_SET_OF_PKCS7_RECIP_INFO        @1738
-    _i2d_ASN1_SET_OF_PKCS7_SIGNER_INFO       @1723
-    _i2d_ASN1_SET_OF_POLICYINFO              @1476
-    _i2d_ASN1_SET_OF_POLICYQUALINFO          @1458
-    _i2d_ASN1_SET_OF_SXNETID                 @1440
-    _i2d_ASN1_SET_OF_X509                    @1380
-    _i2d_ASN1_SET_OF_X509_ALGOR              @1682
-    _i2d_ASN1_SET_OF_X509_ATTRIBUTE          @1615
-    _i2d_ASN1_SET_OF_X509_CRL                @1685
-    _i2d_ASN1_SET_OF_X509_EXTENSION          @1624
-    _i2d_ASN1_SET_OF_X509_NAME_ENTRY         @1633
-    _i2d_ASN1_SET_OF_X509_REVOKED            @1661
-    _i2d_ASN1_TIME                           @1198
-    _i2d_ASN1_TYPE                           @827
-    _i2d_ASN1_UTCTIME                        @828
-    _i2d_ASN1_UTF8STRING                     @1341
-    _i2d_ASN1_VISIBLESTRING                  @1339
-    _i2d_ASN1_bytes                          @829
-    _i2d_AUTHORITY_KEYID                     @1254
-    _i2d_BASIC_CONSTRAINTS                   @1199
-    _i2d_CERTIFICATEPOLICIES                 @1484
-    _i2d_CRL_DIST_POINTS                     @1537
-    _i2d_DHparams                            @830
-    _i2d_DIRECTORYSTRING                     @1343
-    _i2d_DISPLAYTEXT                         @1345
-    _i2d_DIST_POINT                          @1541
-    _i2d_DIST_POINT_NAME                     @1545
-    _i2d_DSAPrivateKey                       @831
-    _i2d_DSAPrivateKey_bio                   @832
-    _i2d_DSAPublicKey                        @834
-    _i2d_DSA_SIG                             @1338
-    _i2d_DSAparams                           @835
-    _i2d_GENERAL_NAME                        @1211
-    _i2d_GENERAL_NAMES                       @1218
-    _i2d_NETSCAPE_CERT_SEQUENCE              @1200
-    _i2d_NETSCAPE_SPKAC                      @836
-    _i2d_NETSCAPE_SPKI                       @837
-    _i2d_NOTICEREF                           @1500
-    _i2d_Netscape_RSA                        @838
-    _i2d_PBE2PARAM                           @1401
-    _i2d_PBEPARAM                            @1310
-    _i2d_PBKDF2PARAM                         @1397
-    _i2d_PKCS12                              @1288
-    _i2d_PKCS12_BAGS                         @1284
-    _i2d_PKCS12_MAC_DATA                     @1292
-    _i2d_PKCS12_SAFEBAG                      @1296
-    _i2d_PKCS12_bio                          @1306
-    _i2d_PKCS12_fp                           @1307
-    _i2d_PKCS7                               @839
-    _i2d_PKCS7_DIGEST                        @840
-    _i2d_PKCS7_ENCRYPT                       @841
-    _i2d_PKCS7_ENC_CONTENT                   @842
-    _i2d_PKCS7_ENVELOPE                      @843
-    _i2d_PKCS7_ISSUER_AND_SERIAL             @844
-    _i2d_PKCS7_RECIP_INFO                    @845
-    _i2d_PKCS7_SIGNED                        @846
-    _i2d_PKCS7_SIGNER_INFO                   @847
-    _i2d_PKCS7_SIGN_ENVELOPE                 @848
-    _i2d_PKCS7_bio                           @849
-    _i2d_PKCS8_PRIV_KEY_INFO                 @1314
-    _i2d_PKCS8_PRIV_KEY_INFO_bio             @1792
-    _i2d_PKCS8_bio                           @1790
-    _i2d_PKEY_USAGE_PERIOD                   @1232
-    _i2d_POLICYINFO                          @1488
-    _i2d_POLICYQUALINFO                      @1492
-    _i2d_PrivateKey                          @851
-    _i2d_PublicKey                           @852
-    _i2d_RSAPrivateKey                       @853
-    _i2d_RSAPrivateKey_bio                   @854
-    _i2d_RSAPublicKey                        @856
-    _i2d_RSAPublicKey_bio                    @946
-    _i2d_SXNET                               @1325
-    _i2d_SXNETID                             @1329
-    _i2d_USERNOTICE                          @1496
-    _i2d_X509                                @857
-    _i2d_X509_ALGOR                          @858
-    _i2d_X509_ATTRIBUTE                      @859
-    _i2d_X509_CINF                           @860
-    _i2d_X509_CRL                            @861
-    _i2d_X509_CRL_INFO                       @862
-    _i2d_X509_CRL_bio                        @863
-    _i2d_X509_EXTENSION                      @865
-    _i2d_X509_NAME                           @866
-    _i2d_X509_NAME_ENTRY                     @867
-    _i2d_X509_PKEY                           @868
-    _i2d_X509_PUBKEY                         @869
-    _i2d_X509_REQ                            @870
-    _i2d_X509_REQ_INFO                       @871
-    _i2d_X509_REQ_bio                        @872
-    _i2d_X509_REVOKED                        @874
-    _i2d_X509_SIG                            @875
-    _i2d_X509_VAL                            @876
-    _i2d_X509_bio                            @877
-    _i2d_ext_ku                              @1201
-    _i2s_ASN1_ENUMERATED                     @1241
-    _i2s_ASN1_ENUMERATED_TABLE               @1242
-    _i2s_ASN1_INTEGER                        @1237
-    _i2s_ASN1_OCTET_STRING                   @1220
-    _i2t_ASN1_OBJECT                         @979
-    _i2v_GENERAL_NAME                        @1230
-    _i2v_GENERAL_NAMES                       @1219
-    _idea_cbc_encrypt                        @879
-    _idea_cfb64_encrypt                      @880
-    _idea_ecb_encrypt                        @881
-    _idea_encrypt                            @882
-    _idea_ofb64_encrypt                      @883
-    _idea_options                            @884
-    _idea_set_decrypt_key                    @885
-    _idea_set_encrypt_key                    @886
-    _lh_delete                               @887
-    _lh_doall                                @888
-    _lh_doall_arg                            @889
-    _lh_free                                 @890
-    _lh_insert                               @891
-    _lh_new                                  @892
-    _lh_node_stats_bio                       @894
-    _lh_node_usage_stats_bio                 @896
-    _lh_retrieve                             @897
-    _lh_stats_bio                            @899
-    _lh_strhash                              @900
-    _ms_time_cmp                             @1151
-    _ms_time_diff                            @1148
-    _ms_time_free                            @1150
-    _ms_time_get                             @1152
-    _ms_time_new                             @1149
-    _name_cmp                                @1239
-    _s2i_ASN1_INTEGER                        @1509
-    _s2i_ASN1_OCTET_STRING                   @1221
-    _sk_ASN1_OBJECT_delete                   @1831
-    _sk_ASN1_OBJECT_delete_ptr               @1828
-    _sk_ASN1_OBJECT_dup                      @1827
-    _sk_ASN1_OBJECT_find                     @1825
-    _sk_ASN1_OBJECT_free                     @1838
-    _sk_ASN1_OBJECT_insert                   @1842
-    _sk_ASN1_OBJECT_new                      @1829
-    _sk_ASN1_OBJECT_new_null                 @1836
-    _sk_ASN1_OBJECT_num                      @1834
-    _sk_ASN1_OBJECT_pop                      @1833
-    _sk_ASN1_OBJECT_pop_free                 @1826
-    _sk_ASN1_OBJECT_push                     @1843
-    _sk_ASN1_OBJECT_set                      @1839
-    _sk_ASN1_OBJECT_set_cmp_func             @1840
-    _sk_ASN1_OBJECT_shift                    @1832
-    _sk_ASN1_OBJECT_sort                     @1863
-    _sk_ASN1_OBJECT_unshift                  @1830
-    _sk_ASN1_OBJECT_value                    @1835
-    _sk_ASN1_OBJECT_zero                     @1841
-    _sk_ASN1_TYPE_delete                     @1631
-    _sk_ASN1_TYPE_delete_ptr                 @1598
-    _sk_ASN1_TYPE_dup                        @1620
-    _sk_ASN1_TYPE_find                       @1635
-    _sk_ASN1_TYPE_free                       @1597
-    _sk_ASN1_TYPE_insert                     @1603
-    _sk_ASN1_TYPE_new                        @1628
-    _sk_ASN1_TYPE_new_null                   @1558
-    _sk_ASN1_TYPE_num                        @1564
-    _sk_ASN1_TYPE_pop                        @1556
-    _sk_ASN1_TYPE_pop_free                   @1599
-    _sk_ASN1_TYPE_push                       @1626
-    _sk_ASN1_TYPE_set                        @1593
-    _sk_ASN1_TYPE_set_cmp_func               @1571
-    _sk_ASN1_TYPE_shift                      @1630
-    _sk_ASN1_TYPE_sort                       @1857
-    _sk_ASN1_TYPE_unshift                    @1596
-    _sk_ASN1_TYPE_value                      @1553
-    _sk_ASN1_TYPE_zero                       @1623
-    _sk_CONF_VALUE_delete                    @1807
-    _sk_CONF_VALUE_delete_ptr                @1818
-    _sk_CONF_VALUE_dup                       @1822
-    _sk_CONF_VALUE_find                      @1819
-    _sk_CONF_VALUE_free                      @1811
-    _sk_CONF_VALUE_insert                    @1823
-    _sk_CONF_VALUE_new                       @1824
-    _sk_CONF_VALUE_new_null                  @1821
-    _sk_CONF_VALUE_num                       @1809
-    _sk_CONF_VALUE_pop                       @1808
-    _sk_CONF_VALUE_pop_free                  @1810
-    _sk_CONF_VALUE_push                      @1817
-    _sk_CONF_VALUE_set                       @1815
-    _sk_CONF_VALUE_set_cmp_func              @1820
-    _sk_CONF_VALUE_shift                     @1812
-    _sk_CONF_VALUE_sort                      @1849
-    _sk_CONF_VALUE_unshift                   @1813
-    _sk_CONF_VALUE_value                     @1814
-    _sk_CONF_VALUE_zero                      @1816
-    _sk_DIST_POINT_delete                    @1529
-    _sk_DIST_POINT_delete_ptr                @1530
-    _sk_DIST_POINT_dup                       @1532
-    _sk_DIST_POINT_find                      @1528
-    _sk_DIST_POINT_free                      @1521
-    _sk_DIST_POINT_insert                    @1570
-    _sk_DIST_POINT_new                       @1519
-    _sk_DIST_POINT_new_null                  @1520
-    _sk_DIST_POINT_num                       @1522
-    _sk_DIST_POINT_pop                       @1527
-    _sk_DIST_POINT_pop_free                  @1533
-    _sk_DIST_POINT_push                      @1526
-    _sk_DIST_POINT_set                       @1524
-    _sk_DIST_POINT_set_cmp_func              @1531
-    _sk_DIST_POINT_shift                     @1534
-    _sk_DIST_POINT_sort                      @1868
-    _sk_DIST_POINT_unshift                   @1573
-    _sk_DIST_POINT_value                     @1523
-    _sk_DIST_POINT_zero                      @1525
-    _sk_GENERAL_NAME_delete                  @1415
-    _sk_GENERAL_NAME_delete_ptr              @1416
-    _sk_GENERAL_NAME_dup                     @1418
-    _sk_GENERAL_NAME_find                    @1414
-    _sk_GENERAL_NAME_free                    @1407
-    _sk_GENERAL_NAME_insert                  @1629
-    _sk_GENERAL_NAME_new                     @1405
-    _sk_GENERAL_NAME_new_null                @1406
-    _sk_GENERAL_NAME_num                     @1408
-    _sk_GENERAL_NAME_pop                     @1413
-    _sk_GENERAL_NAME_pop_free                @1419
-    _sk_GENERAL_NAME_push                    @1412
-    _sk_GENERAL_NAME_set                     @1410
-    _sk_GENERAL_NAME_set_cmp_func            @1417
-    _sk_GENERAL_NAME_shift                   @1420
-    _sk_GENERAL_NAME_sort                    @1854
-    _sk_GENERAL_NAME_unshift                 @1587
-    _sk_GENERAL_NAME_value                   @1409
-    _sk_GENERAL_NAME_zero                    @1411
-    _sk_PKCS7_RECIP_INFO_delete              @1774
-    _sk_PKCS7_RECIP_INFO_delete_ptr          @1759
-    _sk_PKCS7_RECIP_INFO_dup                 @1720
-    _sk_PKCS7_RECIP_INFO_find                @1773
-    _sk_PKCS7_RECIP_INFO_free                @1752
-    _sk_PKCS7_RECIP_INFO_insert              @1761
-    _sk_PKCS7_RECIP_INFO_new                 @1724
-    _sk_PKCS7_RECIP_INFO_new_null            @1730
-    _sk_PKCS7_RECIP_INFO_num                 @1746
-    _sk_PKCS7_RECIP_INFO_pop                 @1743
-    _sk_PKCS7_RECIP_INFO_pop_free            @1760
-    _sk_PKCS7_RECIP_INFO_push                @1766
-    _sk_PKCS7_RECIP_INFO_set                 @1763
-    _sk_PKCS7_RECIP_INFO_set_cmp_func        @1741
-    _sk_PKCS7_RECIP_INFO_shift               @1729
-    _sk_PKCS7_RECIP_INFO_sort                @1859
-    _sk_PKCS7_RECIP_INFO_unshift             @1767
-    _sk_PKCS7_RECIP_INFO_value               @1745
-    _sk_PKCS7_RECIP_INFO_zero                @1764
-    _sk_PKCS7_SIGNER_INFO_delete             @1740
-    _sk_PKCS7_SIGNER_INFO_delete_ptr         @1742
-    _sk_PKCS7_SIGNER_INFO_dup                @1770
-    _sk_PKCS7_SIGNER_INFO_find               @1726
-    _sk_PKCS7_SIGNER_INFO_free               @1762
-    _sk_PKCS7_SIGNER_INFO_insert             @1721
-    _sk_PKCS7_SIGNER_INFO_new                @1717
-    _sk_PKCS7_SIGNER_INFO_new_null           @1758
-    _sk_PKCS7_SIGNER_INFO_num                @1736
-    _sk_PKCS7_SIGNER_INFO_pop                @1732
-    _sk_PKCS7_SIGNER_INFO_pop_free           @1733
-    _sk_PKCS7_SIGNER_INFO_push               @1722
-    _sk_PKCS7_SIGNER_INFO_set                @1754
-    _sk_PKCS7_SIGNER_INFO_set_cmp_func       @1727
-    _sk_PKCS7_SIGNER_INFO_shift              @1731
-    _sk_PKCS7_SIGNER_INFO_sort               @1864
-    _sk_PKCS7_SIGNER_INFO_unshift            @1719
-    _sk_PKCS7_SIGNER_INFO_value              @1747
-    _sk_PKCS7_SIGNER_INFO_zero               @1718
-    _sk_POLICYINFO_delete                    @1469
-    _sk_POLICYINFO_delete_ptr                @1470
-    _sk_POLICYINFO_dup                       @1472
-    _sk_POLICYINFO_find                      @1468
-    _sk_POLICYINFO_free                      @1461
-    _sk_POLICYINFO_insert                    @1622
-    _sk_POLICYINFO_new                       @1459
-    _sk_POLICYINFO_new_null                  @1460
-    _sk_POLICYINFO_num                       @1462
-    _sk_POLICYINFO_pop                       @1467
-    _sk_POLICYINFO_pop_free                  @1473
-    _sk_POLICYINFO_push                      @1466
-    _sk_POLICYINFO_set                       @1464
-    _sk_POLICYINFO_set_cmp_func              @1471
-    _sk_POLICYINFO_shift                     @1474
-    _sk_POLICYINFO_sort                      @1853
-    _sk_POLICYINFO_unshift                   @1582
-    _sk_POLICYINFO_value                     @1463
-    _sk_POLICYINFO_zero                      @1465
-    _sk_POLICYQUALINFO_delete                @1451
-    _sk_POLICYQUALINFO_delete_ptr            @1452
-    _sk_POLICYQUALINFO_dup                   @1454
-    _sk_POLICYQUALINFO_find                  @1450
-    _sk_POLICYQUALINFO_free                  @1443
-    _sk_POLICYQUALINFO_insert                @1592
-    _sk_POLICYQUALINFO_new                   @1441
-    _sk_POLICYQUALINFO_new_null              @1442
-    _sk_POLICYQUALINFO_num                   @1444
-    _sk_POLICYQUALINFO_pop                   @1449
-    _sk_POLICYQUALINFO_pop_free              @1455
-    _sk_POLICYQUALINFO_push                  @1448
-    _sk_POLICYQUALINFO_set                   @1446
-    _sk_POLICYQUALINFO_set_cmp_func          @1453
-    _sk_POLICYQUALINFO_shift                 @1456
-    _sk_POLICYQUALINFO_sort                  @1866
-    _sk_POLICYQUALINFO_unshift               @1581
-    _sk_POLICYQUALINFO_value                 @1445
-    _sk_POLICYQUALINFO_zero                  @1447
-    _sk_SXNETID_delete                       @1433
-    _sk_SXNETID_delete_ptr                   @1434
-    _sk_SXNETID_dup                          @1436
-    _sk_SXNETID_find                         @1432
-    _sk_SXNETID_free                         @1425
-    _sk_SXNETID_insert                       @1605
-    _sk_SXNETID_new                          @1423
-    _sk_SXNETID_new_null                     @1424
-    _sk_SXNETID_num                          @1426
-    _sk_SXNETID_pop                          @1431
-    _sk_SXNETID_pop_free                     @1437
-    _sk_SXNETID_push                         @1430
-    _sk_SXNETID_set                          @1428
-    _sk_SXNETID_set_cmp_func                 @1435
-    _sk_SXNETID_shift                        @1438
-    _sk_SXNETID_sort                         @1862
-    _sk_SXNETID_unshift                      @1616
-    _sk_SXNETID_value                        @1427
-    _sk_SXNETID_zero                         @1429
-    _sk_X509_ALGOR_delete                    @1701
-    _sk_X509_ALGOR_delete_ptr                @1703
-    _sk_X509_ALGOR_dup                       @1715
-    _sk_X509_ALGOR_find                      @1713
-    _sk_X509_ALGOR_free                      @1700
-    _sk_X509_ALGOR_insert                    @1690
-    _sk_X509_ALGOR_new                       @1677
-    _sk_X509_ALGOR_new_null                  @1695
-    _sk_X509_ALGOR_num                       @1686
-    _sk_X509_ALGOR_pop                       @1683
-    _sk_X509_ALGOR_pop_free                  @1716
-    _sk_X509_ALGOR_push                      @1711
-    _sk_X509_ALGOR_set                       @1705
-    _sk_X509_ALGOR_set_cmp_func              @1714
-    _sk_X509_ALGOR_shift                     @1708
-    _sk_X509_ALGOR_sort                      @1858
-    _sk_X509_ALGOR_unshift                   @1680
-    _sk_X509_ALGOR_value                     @1712
-    _sk_X509_ALGOR_zero                      @1709
-    _sk_X509_ATTRIBUTE_delete                @1391
-    _sk_X509_ATTRIBUTE_delete_ptr            @1392
-    _sk_X509_ATTRIBUTE_dup                   @1394
-    _sk_X509_ATTRIBUTE_find                  @1390
-    _sk_X509_ATTRIBUTE_free                  @1383
-    _sk_X509_ATTRIBUTE_insert                @1610
-    _sk_X509_ATTRIBUTE_new                   @1381
-    _sk_X509_ATTRIBUTE_new_null              @1382
-    _sk_X509_ATTRIBUTE_num                   @1384
-    _sk_X509_ATTRIBUTE_pop                   @1389
-    _sk_X509_ATTRIBUTE_pop_free              @1395
-    _sk_X509_ATTRIBUTE_push                  @1388
-    _sk_X509_ATTRIBUTE_set                   @1386
-    _sk_X509_ATTRIBUTE_set_cmp_func          @1393
-    _sk_X509_ATTRIBUTE_shift                 @1396
-    _sk_X509_ATTRIBUTE_sort                  @1851
-    _sk_X509_ATTRIBUTE_unshift               @1585
-    _sk_X509_ATTRIBUTE_value                 @1385
-    _sk_X509_ATTRIBUTE_zero                  @1387
-    _sk_X509_CRL_delete                      @1699
-    _sk_X509_CRL_delete_ptr                  @1689
-    _sk_X509_CRL_dup                         @1691
-    _sk_X509_CRL_find                        @1698
-    _sk_X509_CRL_free                        @1681
-    _sk_X509_CRL_insert                      @1687
-    _sk_X509_CRL_new                         @1693
-    _sk_X509_CRL_new_null                    @1710
-    _sk_X509_CRL_num                         @1706
-    _sk_X509_CRL_pop                         @1704
-    _sk_X509_CRL_pop_free                    @1688
-    _sk_X509_CRL_push                        @1694
-    _sk_X509_CRL_set                         @1679
-    _sk_X509_CRL_set_cmp_func                @1678
-    _sk_X509_CRL_shift                       @1697
-    _sk_X509_CRL_sort                        @1867
-    _sk_X509_CRL_unshift                     @1684
-    _sk_X509_CRL_value                       @1707
-    _sk_X509_CRL_zero                        @1692
-    _sk_X509_EXTENSION_delete                @1642
-    _sk_X509_EXTENSION_delete_ptr            @1594
-    _sk_X509_EXTENSION_dup                   @1641
-    _sk_X509_EXTENSION_find                  @1554
-    _sk_X509_EXTENSION_free                  @1614
-    _sk_X509_EXTENSION_insert                @1618
-    _sk_X509_EXTENSION_new                   @1551
-    _sk_X509_EXTENSION_new_null              @1565
-    _sk_X509_EXTENSION_num                   @1579
-    _sk_X509_EXTENSION_pop                   @1576
-    _sk_X509_EXTENSION_pop_free              @1601
-    _sk_X509_EXTENSION_push                  @1644
-    _sk_X509_EXTENSION_set                   @1613
-    _sk_X509_EXTENSION_set_cmp_func          @1557
-    _sk_X509_EXTENSION_shift                 @1643
-    _sk_X509_EXTENSION_sort                  @1861
-    _sk_X509_EXTENSION_unshift               @1600
-    _sk_X509_EXTENSION_value                 @1572
-    _sk_X509_EXTENSION_zero                  @1638
-    _sk_X509_INFO_delete                     @1608
-    _sk_X509_INFO_delete_ptr                 @1568
-    _sk_X509_INFO_dup                        @1640
-    _sk_X509_INFO_find                       @1621
-    _sk_X509_INFO_free                       @1588
-    _sk_X509_INFO_insert                     @1590
-    _sk_X509_INFO_new                        @1550
-    _sk_X509_INFO_new_null                   @1619
-    _sk_X509_INFO_num                        @1578
-    _sk_X509_INFO_pop                        @1575
-    _sk_X509_INFO_pop_free                   @1580
-    _sk_X509_INFO_push                       @1617
-    _sk_X509_INFO_set                        @1612
-    _sk_X509_INFO_set_cmp_func               @1609
-    _sk_X509_INFO_shift                      @1639
-    _sk_X509_INFO_sort                       @1852
-    _sk_X509_INFO_unshift                    @1595
-    _sk_X509_INFO_value                      @1566
-    _sk_X509_INFO_zero                       @1611
-    _sk_X509_LOOKUP_delete                   @1751
-    _sk_X509_LOOKUP_delete_ptr               @1771
-    _sk_X509_LOOKUP_dup                      @1735
-    _sk_X509_LOOKUP_find                     @1737
-    _sk_X509_LOOKUP_free                     @1769
-    _sk_X509_LOOKUP_insert                   @1744
-    _sk_X509_LOOKUP_new                      @1739
-    _sk_X509_LOOKUP_new_null                 @1725
-    _sk_X509_LOOKUP_num                      @1750
-    _sk_X509_LOOKUP_pop                      @1749
-    _sk_X509_LOOKUP_pop_free                 @1755
-    _sk_X509_LOOKUP_push                     @1734
-    _sk_X509_LOOKUP_set                      @1772
-    _sk_X509_LOOKUP_set_cmp_func             @1768
-    _sk_X509_LOOKUP_shift                    @1756
-    _sk_X509_LOOKUP_sort                     @1865
-    _sk_X509_LOOKUP_unshift                  @1757
-    _sk_X509_LOOKUP_value                    @1765
-    _sk_X509_LOOKUP_zero                     @1728
-    _sk_X509_NAME_ENTRY_delete               @1559
-    _sk_X509_NAME_ENTRY_delete_ptr           @1636
-    _sk_X509_NAME_ENTRY_dup                  @1561
-    _sk_X509_NAME_ENTRY_find                 @1645
-    _sk_X509_NAME_ENTRY_free                 @1604
-    _sk_X509_NAME_ENTRY_insert               @1627
-    _sk_X509_NAME_ENTRY_new                  @1569
-    _sk_X509_NAME_ENTRY_new_null             @1583
-    _sk_X509_NAME_ENTRY_num                  @1586
-    _sk_X509_NAME_ENTRY_pop                  @1584
-    _sk_X509_NAME_ENTRY_pop_free             @1632
-    _sk_X509_NAME_ENTRY_push                 @1637
-    _sk_X509_NAME_ENTRY_set                  @1625
-    _sk_X509_NAME_ENTRY_set_cmp_func         @1602
-    _sk_X509_NAME_ENTRY_shift                @1577
-    _sk_X509_NAME_ENTRY_sort                 @1860
-    _sk_X509_NAME_ENTRY_unshift              @1552
-    _sk_X509_NAME_ENTRY_value                @1591
-    _sk_X509_NAME_ENTRY_zero                 @1634
-    _sk_X509_NAME_delete                     @1357
-    _sk_X509_NAME_delete_ptr                 @1358
-    _sk_X509_NAME_dup                        @1360
-    _sk_X509_NAME_find                       @1356
-    _sk_X509_NAME_free                       @1349
-    _sk_X509_NAME_insert                     @1606
-    _sk_X509_NAME_new                        @1347
-    _sk_X509_NAME_new_null                   @1348
-    _sk_X509_NAME_num                        @1350
-    _sk_X509_NAME_pop                        @1355
-    _sk_X509_NAME_pop_free                   @1361
-    _sk_X509_NAME_push                       @1354
-    _sk_X509_NAME_set                        @1352
-    _sk_X509_NAME_set_cmp_func               @1359
-    _sk_X509_NAME_shift                      @1362
-    _sk_X509_NAME_sort                       @1856
-    _sk_X509_NAME_unshift                    @1563
-    _sk_X509_NAME_value                      @1351
-    _sk_X509_NAME_zero                       @1353
-    _sk_X509_REVOKED_delete                  @1673
-    _sk_X509_REVOKED_delete_ptr              @1663
-    _sk_X509_REVOKED_dup                     @1658
-    _sk_X509_REVOKED_find                    @1672
-    _sk_X509_REVOKED_free                    @1659
-    _sk_X509_REVOKED_insert                  @1665
-    _sk_X509_REVOKED_new                     @1660
-    _sk_X509_REVOKED_new_null                @1675
-    _sk_X509_REVOKED_num                     @1669
-    _sk_X509_REVOKED_pop                     @1667
-    _sk_X509_REVOKED_pop_free                @1664
-    _sk_X509_REVOKED_push                    @1670
-    _sk_X509_REVOKED_set                     @1676
-    _sk_X509_REVOKED_set_cmp_func            @1656
-    _sk_X509_REVOKED_shift                   @1662
-    _sk_X509_REVOKED_sort                    @1850
-    _sk_X509_REVOKED_unshift                 @1657
-    _sk_X509_REVOKED_value                   @1668
-    _sk_X509_REVOKED_zero                    @1666
-    _sk_X509_delete                          @1373
-    _sk_X509_delete_ptr                      @1374
-    _sk_X509_dup                             @1376
-    _sk_X509_find                            @1372
-    _sk_X509_free                            @1365
-    _sk_X509_insert                          @1607
-    _sk_X509_new                             @1363
-    _sk_X509_new_null                        @1364
-    _sk_X509_num                             @1366
-    _sk_X509_pop                             @1371
-    _sk_X509_pop_free                        @1377
-    _sk_X509_push                            @1370
-    _sk_X509_set                             @1368
-    _sk_X509_set_cmp_func                    @1375
-    _sk_X509_shift                           @1378
-    _sk_X509_sort                            @1855
-    _sk_X509_unshift                         @1562
-    _sk_X509_value                           @1367
-    _sk_X509_zero                            @1369
-    _sk_delete                               @901
-    _sk_delete_ptr                           @902
-    _sk_dup                                  @903
-    _sk_find                                 @904
-    _sk_free                                 @905
-    _sk_insert                               @906
-    _sk_new                                  @907
-    _sk_num                                  @1654
-    _sk_pop                                  @908
-    _sk_pop_free                             @909
-    _sk_push                                 @910
-    _sk_set                                  @1655
-    _sk_set_cmp_func                         @911
-    _sk_shift                                @912
-    _sk_sort                                 @1671
-    _sk_unshift                              @913
-    _sk_value                                @1653
-    _sk_zero                                 @914
-    _string_to_hex                           @1224
-    _uni2asc                                 @1283
-    _v2i_GENERAL_NAME                        @1231
-    _v2i_GENERAL_NAMES                       @1236
-
+;
+; Definition file for the DLL version of the LIBEAY16 library from OpenSSL
+;
+
+LIBRARY         LIBEAY16
+
+DESCRIPTION     'OpenSSL LIBEAY16 - http://www.openssl.org/'
+
+CODE            PRELOAD MOVEABLE
+DATA            PRELOAD MOVEABLE SINGLE
+
+EXETYPE                WINDOWS
+
+HEAPSIZE       4096
+STACKSIZE      8192
+
+EXPORTS
+    _SSLeay                                  @1
+    _SSLeay_version                          @2
+    _ACCESS_DESCRIPTION_free                 @1994
+    _ACCESS_DESCRIPTION_new                  @1925
+    _ASN1_BIT_STRING_asn1_meth               @3
+    _ASN1_BIT_STRING_free                    @2080
+    _ASN1_BIT_STRING_get_bit                 @1060
+    _ASN1_BIT_STRING_name_print              @2134
+    _ASN1_BIT_STRING_new                     @1957
+    _ASN1_BIT_STRING_num_asc                 @1986
+    _ASN1_BIT_STRING_set                     @2109
+    _ASN1_BIT_STRING_set_asc                 @2017
+    _ASN1_BIT_STRING_set_bit                 @1061
+    _ASN1_BMPSTRING_free                     @2057
+    _ASN1_BMPSTRING_new                      @1936
+    _ASN1_ENUMERATED_free                    @2027
+    _ASN1_ENUMERATED_get                     @1206
+    _ASN1_ENUMERATED_new                     @2052
+    _ASN1_ENUMERATED_set                     @1205
+    _ASN1_ENUMERATED_to_BN                   @1208
+    _ASN1_GENERALIZEDTIME_check              @1157
+    _ASN1_GENERALIZEDTIME_free               @1908
+    _ASN1_GENERALIZEDTIME_new                @2126
+    _ASN1_GENERALIZEDTIME_print              @1158
+    _ASN1_GENERALIZEDTIME_set                @1159
+    _ASN1_GENERALIZEDTIME_set_string         @1160
+    _ASN1_HEADER_free                        @4
+    _ASN1_HEADER_new                         @5
+    _ASN1_IA5STRING_asn1_meth                @6
+    _ASN1_IA5STRING_free                     @2065
+    _ASN1_IA5STRING_new                      @2049
+    _ASN1_INTEGER_cmp                        @1963
+    _ASN1_INTEGER_dup                        @2114
+    _ASN1_INTEGER_free                       @2111
+    _ASN1_INTEGER_get                        @7
+    _ASN1_INTEGER_new                        @2131
+    _ASN1_INTEGER_set                        @8
+    _ASN1_INTEGER_to_BN                      @9
+    _ASN1_NULL_free                          @2168
+    _ASN1_NULL_new                           @2170
+    _ASN1_OBJECT_create                      @10
+    _ASN1_OBJECT_free                        @11
+    _ASN1_OBJECT_new                         @12
+    _ASN1_OCTET_STRING_cmp                   @1955
+    _ASN1_OCTET_STRING_dup                   @2108
+    _ASN1_OCTET_STRING_free                  @2016
+    _ASN1_OCTET_STRING_new                   @2130
+    _ASN1_OCTET_STRING_set                   @2040
+    _ASN1_PRINTABLESTRING_free               @1934
+    _ASN1_PRINTABLESTRING_new                @2025
+    _ASN1_PRINTABLE_type                     @13
+    _ASN1_STRING_TABLE_add                   @2245
+    _ASN1_STRING_TABLE_cleanup               @2020
+    _ASN1_STRING_TABLE_get                   @2091
+    _ASN1_STRING_cmp                         @14
+    _ASN1_STRING_data                        @2075
+    _ASN1_STRING_dup                         @15
+    _ASN1_STRING_free                        @16
+    _ASN1_STRING_get_default_mask            @2072
+    _ASN1_STRING_length                      @2023
+    _ASN1_STRING_length_set                  @2136
+    _ASN1_STRING_new                         @17
+    _ASN1_STRING_print                       @18
+    _ASN1_STRING_set                         @19
+    _ASN1_STRING_set_by_NID                  @1996
+    _ASN1_STRING_set_default_mask            @2032
+    _ASN1_STRING_set_default_mask_asc        @1960
+    _ASN1_STRING_type                        @1951
+    _ASN1_STRING_type_new                    @20
+    _ASN1_T61STRING_free                     @1946
+    _ASN1_T61STRING_new                      @2058
+    _ASN1_TIME_free                          @1954
+    _ASN1_TIME_new                           @1973
+    _ASN1_TIME_print                         @1161
+    _ASN1_TIME_set                           @1253
+    _ASN1_TYPE_free                          @21
+    _ASN1_TYPE_get                           @916
+    _ASN1_TYPE_get_int_octetstring           @1076
+    _ASN1_TYPE_get_octetstring               @1077
+    _ASN1_TYPE_new                           @22
+    _ASN1_TYPE_set                           @917
+    _ASN1_TYPE_set_int_octetstring           @1078
+    _ASN1_TYPE_set_octetstring               @1079
+    _ASN1_UNIVERSALSTRING_to_string          @23
+    _ASN1_UTCTIME_check                      @24
+    _ASN1_UTCTIME_free                       @1988
+    _ASN1_UTCTIME_new                        @2060
+    _ASN1_UTCTIME_print                      @25
+    _ASN1_UTCTIME_set                        @26
+    _ASN1_UTCTIME_set_string                 @1080
+    _ASN1_UTF8STRING_free                    @2092
+    _ASN1_UTF8STRING_new                     @1938
+    _ASN1_VISIBLESTRING_free                 @2118
+    _ASN1_VISIBLESTRING_new                  @1932
+    _ASN1_check_infinite_end                 @27
+    _ASN1_d2i_bio                            @28
+    _ASN1_digest                             @30
+    _ASN1_dup                                @31
+    _ASN1_get_object                         @32
+    _ASN1_i2d_bio                            @33
+    _ASN1_mbstring_copy                      @1937
+    _ASN1_mbstring_ncopy                     @2123
+    _ASN1_object_size                        @35
+    _ASN1_pack_string                        @1261
+    _ASN1_parse                              @36
+    _ASN1_put_object                         @37
+    _ASN1_seq_pack                           @1259
+    _ASN1_seq_unpack                         @1258
+    _ASN1_sign                               @38
+    _ASN1_tag2str                            @1905
+    _ASN1_unpack_string                      @1260
+    _ASN1_verify                             @39
+    _AUTHORITY_INFO_ACCESS_free              @2048
+    _AUTHORITY_INFO_ACCESS_new               @2247
+    _AUTHORITY_KEYID_free                    @1257
+    _AUTHORITY_KEYID_new                     @1256
+    _BASIC_CONSTRAINTS_free                  @1162
+    _BASIC_CONSTRAINTS_new                   @1163
+    _BF_cbc_encrypt                          @40
+    _BF_cfb64_encrypt                        @41
+    _BF_decrypt                              @987
+    _BF_ecb_encrypt                          @42
+    _BF_encrypt                              @43
+    _BF_ofb64_encrypt                        @44
+    _BF_options                              @45
+    _BF_set_key                              @46
+    _BIO_accept                              @51
+    _BIO_callback_ctrl                       @2252
+    _BIO_copy_next_retry                     @955
+    _BIO_ctrl                                @52
+    _BIO_ctrl_get_read_request               @1799
+    _BIO_ctrl_get_write_guarantee            @1803
+    _BIO_ctrl_pending                        @1800
+    _BIO_ctrl_reset_read_request             @1906
+    _BIO_ctrl_wpending                       @1801
+    _BIO_debug_callback                      @54
+    _BIO_dump                                @55
+    _BIO_dup_chain                           @56
+    _BIO_f_base64                            @57
+    _BIO_f_buffer                            @58
+    _BIO_f_cipher                            @59
+    _BIO_f_md                                @60
+    _BIO_f_nbio_test                         @915
+    _BIO_f_null                              @61
+    _BIO_f_reliable                          @1244
+    _BIO_fd_non_fatal_error                  @63
+    _BIO_fd_should_retry                     @64
+    _BIO_find_type                           @65
+    _BIO_free                                @66
+    _BIO_free_all                            @67
+    _BIO_get_accept_socket                   @69
+    _BIO_get_ex_data                         @1062
+    _BIO_get_ex_new_index                    @1063
+    _BIO_get_host_ip                         @71
+    _BIO_get_port                            @72
+    _BIO_get_retry_BIO                       @73
+    _BIO_get_retry_reason                    @74
+    _BIO_gethostbyname                       @75
+    _BIO_gets                                @76
+    _BIO_ghbn_ctrl                           @1003
+    _BIO_int_ctrl                            @53
+    _BIO_new                                 @78
+    _BIO_new_accept                          @79
+    _BIO_new_bio_pair                        @1802
+    _BIO_new_connect                         @80
+    _BIO_new_fd                              @81
+    _BIO_new_file_internal                   @970
+    _BIO_new_fp_internal                     @971
+    _BIO_new_mem_buf                         @1882
+    _BIO_new_socket                          @84
+    _BIO_nread                               @1876
+    _BIO_nread0                              @1880
+    _BIO_number_read                         @2203
+    _BIO_number_written                      @2202
+    _BIO_nwrite                              @1874
+    _BIO_nwrite0                             @1878
+    _BIO_pop                                 @85
+    _BIO_printf                              @86
+    _BIO_ptr_ctrl                            @969
+    _BIO_push                                @87
+    _BIO_puts                                @88
+    _BIO_read                                @89
+    _BIO_s_accept                            @90
+    _BIO_s_bio                               @1793
+    _BIO_s_connect                           @91
+    _BIO_s_fd                                @92
+    _BIO_s_file_internal                     @972
+    _BIO_s_mem                               @95
+    _BIO_s_null                              @96
+    _BIO_s_socket                            @98
+    _BIO_set                                 @100
+    _BIO_set_cipher                          @101
+    _BIO_set_ex_data                         @1064
+    _BIO_set_tcp_ndelay                      @102
+    _BIO_sock_cleanup                        @103
+    _BIO_sock_error                          @104
+    _BIO_sock_init                           @105
+    _BIO_sock_non_fatal_error                @106
+    _BIO_sock_should_retry                   @107
+    _BIO_socket_ioctl                        @108
+    _BIO_socket_nbio                         @1102
+    _BIO_write                               @109
+    _BN_BLINDING_convert                     @973
+    _BN_BLINDING_free                        @981
+    _BN_BLINDING_invert                      @974
+    _BN_BLINDING_new                         @980
+    _BN_BLINDING_update                      @975
+    _BN_CTX_end                              @2241
+    _BN_CTX_free                             @110
+    _BN_CTX_get                              @2243
+    _BN_CTX_init                             @1135
+    _BN_CTX_new                              @111
+    _BN_CTX_start                            @2242
+    _BN_MONT_CTX_copy                        @1109
+    _BN_MONT_CTX_free                        @112
+    _BN_MONT_CTX_init                        @1136
+    _BN_MONT_CTX_new                         @113
+    _BN_MONT_CTX_set                         @114
+    _BN_RECP_CTX_free                        @1130
+    _BN_RECP_CTX_init                        @1128
+    _BN_RECP_CTX_new                         @1129
+    _BN_RECP_CTX_set                         @1131
+    _BN_add                                  @115
+    _BN_add_word                             @116
+    _BN_bin2bn                               @118
+    _BN_bn2bin                               @120
+    _BN_bn2dec                               @1002
+    _BN_bn2hex                               @119
+    _BN_bn2mpi                               @1058
+    _BN_clear                                @121
+    _BN_clear_bit                            @122
+    _BN_clear_free                           @123
+    _BN_cmp                                  @124
+    _BN_copy                                 @125
+    _BN_dec2bn                               @1001
+    _BN_div                                  @126
+    _BN_div_recp                             @1134
+    _BN_div_word                             @127
+    _BN_dup                                  @128
+    _BN_exp                                  @998
+    _BN_free                                 @129
+    _BN_from_montgomery                      @130
+    _BN_gcd                                  @131
+    _BN_generate_prime                       @132
+    _BN_get_params                           @1249
+    _BN_get_word                             @133
+    _BN_hex2bn                               @117
+    _BN_init                                 @1095
+    _BN_is_bit_set                           @134
+    _BN_is_prime                             @135
+    _BN_is_prime_fasttest                    @2240
+    _BN_lshift                               @136
+    _BN_lshift1                              @137
+    _BN_mask_bits                            @138
+    _BN_mod                                  @139
+    _BN_mod_exp                              @140
+    _BN_mod_exp2_mont                        @1514
+    _BN_mod_exp_mont                         @141
+    _BN_mod_exp_recp                         @1133
+    _BN_mod_exp_simple                       @143
+    _BN_mod_inverse                          @144
+    _BN_mod_mul                              @145
+    _BN_mod_mul_montgomery                   @146
+    _BN_mod_mul_reciprocal                   @1132
+    _BN_mod_word                             @148
+    _BN_mpi2bn                               @1059
+    _BN_mul                                  @149
+    _BN_mul_word                             @999
+    _BN_new                                  @150
+    _BN_num_bits                             @151
+    _BN_num_bits_word                        @152
+    _BN_options                              @153
+    _BN_print                                @154
+    _BN_pseudo_rand                          @2239
+    _BN_rand                                 @156
+    _BN_reciprocal                           @157
+    _BN_rshift                               @158
+    _BN_rshift1                              @159
+    _BN_set_bit                              @160
+    _BN_set_params                           @1248
+    _BN_set_word                             @161
+    _BN_sqr                                  @162
+    _BN_sub                                  @163
+    _BN_sub_word                             @1000
+    _BN_to_ASN1_ENUMERATED                   @1207
+    _BN_to_ASN1_INTEGER                      @164
+    _BN_uadd                                 @708
+    _BN_ucmp                                 @165
+    _BN_usub                                 @709
+    _BN_value_one                            @166
+    _BUF_MEM_free                            @167
+    _BUF_MEM_grow                            @168
+    _BUF_MEM_new                             @169
+    _BUF_strdup                              @170
+    _CAST_cbc_encrypt                        @992
+    _CAST_cfb64_encrypt                      @993
+    _CAST_decrypt                            @990
+    _CAST_ecb_encrypt                        @991
+    _CAST_encrypt                            @989
+    _CAST_ofb64_encrypt                      @994
+    _CAST_set_key                            @988
+    _CERTIFICATEPOLICIES_free                @1486
+    _CERTIFICATEPOLICIES_new                 @1485
+    _COMP_CTX_free                           @1097
+    _COMP_CTX_new                            @1096
+    _COMP_compress_block                     @1144
+    _COMP_expand_block                       @1145
+    _COMP_rle                                @1146
+    _COMP_zlib                               @1147
+    _CONF_free                               @171
+    _CONF_get_number                         @172
+    _CONF_get_section                        @173
+    _CONF_get_string                         @174
+    _CONF_load                               @175
+    _CONF_load_bio                           @1805
+    _CRL_DIST_POINTS_free                    @1539
+    _CRL_DIST_POINTS_new                     @1538
+    _CRYPTO_add_lock                         @176
+    _CRYPTO_dbg_free                         @177
+    _CRYPTO_dbg_get_options                  @2246
+    _CRYPTO_dbg_malloc                       @178
+    _CRYPTO_dbg_realloc                      @179
+    _CRYPTO_dbg_set_options                  @2157
+    _CRYPTO_dup_ex_data                      @1025
+    _CRYPTO_free                             @181
+    _CRYPTO_free_ex_data                     @1004
+    _CRYPTO_free_locked                      @1513
+    _CRYPTO_get_add_lock_callback            @182
+    _CRYPTO_get_ex_data                      @1005
+    _CRYPTO_get_ex_new_index                 @1041
+    _CRYPTO_get_id_callback                  @183
+    _CRYPTO_get_lock_name                    @184
+    _CRYPTO_get_locked_mem_functions         @1511
+    _CRYPTO_get_locking_callback             @185
+    _CRYPTO_get_mem_debug_functions          @2159
+    _CRYPTO_get_mem_debug_options            @2248
+    _CRYPTO_get_mem_functions                @186
+    _CRYPTO_get_new_lockid                   @1026
+    _CRYPTO_is_mem_check_on                  @2160
+    _CRYPTO_lock                             @187
+    _CRYPTO_malloc                           @188
+    _CRYPTO_malloc_locked                    @1512
+    _CRYPTO_mem_ctrl                         @189
+    _CRYPTO_mem_leaks                        @190
+    _CRYPTO_mem_leaks_cb                     @191
+    _CRYPTO_new_ex_data                      @1027
+    _CRYPTO_num_locks                        @1804
+    _CRYPTO_pop_info                         @2162
+    _CRYPTO_push_info_                       @2163
+    _CRYPTO_realloc                          @193
+    _CRYPTO_remalloc                         @194
+    _CRYPTO_remove_all_info                  @2158
+    _CRYPTO_set_add_lock_callback            @195
+    _CRYPTO_set_ex_data                      @1007
+    _CRYPTO_set_id_callback                  @196
+    _CRYPTO_set_locked_mem_functions         @1510
+    _CRYPTO_set_locking_callback             @197
+    _CRYPTO_set_mem_debug_functions          @2161
+    _CRYPTO_set_mem_debug_options            @2164
+    _CRYPTO_set_mem_functions                @198
+    _CRYPTO_thread_id                        @199
+    _DH_OpenSSL                              @1890
+    _DH_check                                @200
+    _DH_compute_key                          @201
+    _DH_free                                 @202
+    _DH_generate_key                         @203
+    _DH_generate_parameters                  @204
+    _DH_get_default_method                   @1892
+    _DH_get_ex_data                          @1886
+    _DH_get_ex_new_index                     @1887
+    _DH_new                                  @205
+    _DH_new_method                           @1889
+    _DH_set_default_method                   @1894
+    _DH_set_ex_data                          @1883
+    _DH_set_method                           @1884
+    _DH_size                                 @206
+    _DHparams_print                          @207
+    _DIRECTORYSTRING_free                    @2038
+    _DIRECTORYSTRING_new                     @2137
+    _DISPLAYTEXT_free                        @1998
+    _DISPLAYTEXT_new                         @1907
+    _DIST_POINT_NAME_free                    @1547
+    _DIST_POINT_NAME_new                     @1546
+    _DIST_POINT_free                         @1544
+    _DIST_POINT_new                          @1542
+    _DSA_OpenSSL                             @1885
+    _DSA_SIG_free                            @1334
+    _DSA_SIG_new                             @1333
+    _DSA_do_sign                             @1335
+    _DSA_do_verify                           @1336
+    _DSA_dup_DH                              @1871
+    _DSA_free                                @209
+    _DSA_generate_key                        @210
+    _DSA_generate_parameters                 @211
+    _DSA_get_default_method                  @1941
+    _DSA_get_ex_data                         @1895
+    _DSA_get_ex_new_index                    @1891
+    _DSA_new                                 @213
+    _DSA_new_method                          @1888
+    _DSA_print                               @214
+    _DSA_set_default_method                  @1989
+    _DSA_set_ex_data                         @1893
+    _DSA_set_method                          @1949
+    _DSA_sign                                @216
+    _DSA_sign_setup                          @217
+    _DSA_size                                @218
+    _DSA_verify                              @219
+    _DSAparams_print                         @220
+    _ERR_add_error_data                      @1081
+    _ERR_clear_error                         @222
+    _ERR_error_string                        @223
+    _ERR_free_strings                        @224
+    _ERR_func_error_string                   @225
+    _ERR_get_err_state_table                 @226
+    _ERR_get_error                           @227
+    _ERR_get_error_line                      @228
+    _ERR_get_error_line_data                 @1515
+    _ERR_get_next_error_library              @966
+    _ERR_get_state                           @229
+    _ERR_get_string_table                    @230
+    _ERR_lib_error_string                    @231
+    _ERR_load_ASN1_strings                   @232
+    _ERR_load_BIO_strings                    @233
+    _ERR_load_BN_strings                     @234
+    _ERR_load_BUF_strings                    @235
+    _ERR_load_CONF_strings                   @236
+    _ERR_load_CRYPTOlib_strings              @1009
+    _ERR_load_DH_strings                     @237
+    _ERR_load_DSA_strings                    @238
+    _ERR_load_ERR_strings                    @239
+    _ERR_load_EVP_strings                    @240
+    _ERR_load_OBJ_strings                    @241
+    _ERR_load_PEM_strings                    @242
+    _ERR_load_PKCS12_strings                 @1300
+    _ERR_load_PKCS7_strings                  @919
+    _ERR_load_RAND_strings                   @2205
+    _ERR_load_RSA_strings                    @244
+    _ERR_load_X509V3_strings                 @1164
+    _ERR_load_X509_strings                   @245
+    _ERR_load_crypto_strings                 @246
+    _ERR_load_strings                        @247
+    _ERR_peek_error                          @248
+    _ERR_peek_error_line                     @249
+    _ERR_peek_error_line_data                @1516
+    _ERR_print_errors                        @250
+    _ERR_put_error                           @252
+    _ERR_reason_error_string                 @253
+    _ERR_remove_state                        @254
+    _ERR_set_error_data                      @1082
+    _EVP_BytesToKey                          @255
+    _EVP_CIPHER_CTX_cleanup                  @256
+    _EVP_CIPHER_CTX_init                     @961
+    _EVP_CIPHER_asn1_to_param                @1083
+    _EVP_CIPHER_get_asn1_iv                  @1085
+    _EVP_CIPHER_param_to_asn1                @1084
+    _EVP_CIPHER_set_asn1_iv                  @1086
+    _EVP_CIPHER_type                         @1649
+    _EVP_CipherFinal                         @257
+    _EVP_CipherInit                          @258
+    _EVP_CipherUpdate                        @259
+    _EVP_DecodeBlock                         @260
+    _EVP_DecodeFinal                         @261
+    _EVP_DecodeInit                          @262
+    _EVP_DecodeUpdate                        @263
+    _EVP_DecryptFinal                        @264
+    _EVP_DecryptInit                         @265
+    _EVP_DecryptUpdate                       @266
+    _EVP_DigestFinal                         @267
+    _EVP_DigestInit                          @268
+    _EVP_DigestUpdate                        @269
+    _EVP_EncodeBlock                         @270
+    _EVP_EncodeFinal                         @271
+    _EVP_EncodeInit                          @272
+    _EVP_EncodeUpdate                        @273
+    _EVP_EncryptFinal                        @274
+    _EVP_EncryptInit                         @275
+    _EVP_EncryptUpdate                       @276
+    _EVP_MD_CTX_copy                         @1202
+    _EVP_OpenFinal                           @277
+    _EVP_OpenInit                            @278
+    _EVP_PBE_CipherInit                      @1650
+    _EVP_PBE_alg_add                         @1322
+    _EVP_PBE_cleanup                         @1324
+    _EVP_PKCS82PKEY                          @1318
+    _EVP_PKEY2PKCS8                          @1319
+    _EVP_PKEY2PKCS8_broken                   @2244
+    _EVP_PKEY_assign                         @279
+    _EVP_PKEY_bits                           @1010
+    _EVP_PKEY_cmp_parameters                 @967
+    _EVP_PKEY_copy_parameters                @280
+    _EVP_PKEY_decrypt                        @1070
+    _EVP_PKEY_encrypt                        @1071
+    _EVP_PKEY_free                           @281
+    _EVP_PKEY_get1_DH                        @2128
+    _EVP_PKEY_get1_DSA                       @1935
+    _EVP_PKEY_get1_RSA                       @2034
+    _EVP_PKEY_missing_parameters             @282
+    _EVP_PKEY_new                            @283
+    _EVP_PKEY_save_parameters                @284
+    _EVP_PKEY_set1_DH                        @2107
+    _EVP_PKEY_set1_DSA                       @1970
+    _EVP_PKEY_set1_RSA                       @2063
+    _EVP_PKEY_size                           @285
+    _EVP_PKEY_type                           @286
+    _EVP_SealFinal                           @287
+    _EVP_SealInit                            @288
+    _EVP_SignFinal                           @289
+    _EVP_VerifyFinal                         @290
+    _EVP_add_cipher                          @292
+    _EVP_add_digest                          @293
+    _EVP_bf_cbc                              @294
+    _EVP_bf_cfb                              @295
+    _EVP_bf_ecb                              @296
+    _EVP_bf_ofb                              @297
+    _EVP_cast5_cbc                           @983
+    _EVP_cast5_cfb                           @984
+    _EVP_cast5_ecb                           @985
+    _EVP_cast5_ofb                           @986
+    _EVP_cleanup                             @298
+    _EVP_des_cbc                             @299
+    _EVP_des_cfb                             @300
+    _EVP_des_ecb                             @301
+    _EVP_des_ede                             @302
+    _EVP_des_ede3                            @303
+    _EVP_des_ede3_cbc                        @304
+    _EVP_des_ede3_cfb                        @305
+    _EVP_des_ede3_ofb                        @306
+    _EVP_des_ede_cbc                         @307
+    _EVP_des_ede_cfb                         @308
+    _EVP_des_ede_ofb                         @309
+    _EVP_des_ofb                             @310
+    _EVP_desx_cbc                            @311
+    _EVP_dss                                 @312
+    _EVP_dss1                                @313
+    _EVP_enc_null                            @314
+    _EVP_get_cipherbyname                    @315
+    _EVP_get_digestbyname                    @316
+    _EVP_get_pw_prompt                       @317
+    _EVP_idea_cbc                            @318
+    _EVP_idea_cfb                            @319
+    _EVP_idea_ecb                            @320
+    _EVP_idea_ofb                            @321
+    _EVP_md2                                 @322
+    _EVP_md5                                 @323
+    _EVP_md_null                             @324
+    _EVP_mdc2                                @942
+    _EVP_rc2_40_cbc                          @959
+    _EVP_rc2_64_cbc                          @1103
+    _EVP_rc2_cbc                             @325
+    _EVP_rc2_cfb                             @326
+    _EVP_rc2_ecb                             @327
+    _EVP_rc2_ofb                             @328
+    _EVP_rc4                                 @329
+    _EVP_rc4_40                              @960
+    _EVP_rc5_32_12_16_cbc                    @1087
+    _EVP_rc5_32_12_16_cfb                    @1088
+    _EVP_rc5_32_12_16_ecb                    @1089
+    _EVP_rc5_32_12_16_ofb                    @1090
+    _EVP_read_pw_string                      @330
+    _EVP_ripemd160                           @1252
+    _EVP_set_pw_prompt                       @331
+    _EVP_sha                                 @332
+    _EVP_sha1                                @333
+    _GENERAL_NAMES_free                      @1216
+    _GENERAL_NAMES_new                       @1215
+    _GENERAL_NAME_free                       @1214
+    _GENERAL_NAME_new                        @1213
+    _HMAC                                    @962
+    _HMAC_Final                              @965
+    _HMAC_Init                               @963
+    _HMAC_Update                             @964
+    _HMAC_cleanup                            @968
+    _MD2                                     @334
+    _MD2_Final                               @335
+    _MD2_Init                                @336
+    _MD2_Update                              @337
+    _MD2_options                             @338
+    _MD5                                     @339
+    _MD5_Final                               @340
+    _MD5_Init                                @341
+    _MD5_Transform                           @1011
+    _MD5_Update                              @342
+    _MDC2                                    @343
+    _MDC2_Final                              @344
+    _MDC2_Init                               @345
+    _MDC2_Update                             @346
+    _NETSCAPE_CERT_SEQUENCE_free             @1165
+    _NETSCAPE_CERT_SEQUENCE_new              @1166
+    _NETSCAPE_SPKAC_free                     @347
+    _NETSCAPE_SPKAC_new                      @348
+    _NETSCAPE_SPKI_b64_decode                @1901
+    _NETSCAPE_SPKI_b64_encode                @1899
+    _NETSCAPE_SPKI_free                      @349
+    _NETSCAPE_SPKI_get_pubkey                @1900
+    _NETSCAPE_SPKI_new                       @350
+    _NETSCAPE_SPKI_print                     @1897
+    _NETSCAPE_SPKI_set_pubkey                @1898
+    _NETSCAPE_SPKI_sign                      @351
+    _NETSCAPE_SPKI_verify                    @352
+    _NOTICEREF_free                          @1503
+    _NOTICEREF_new                           @1501
+    _OBJ_NAME_add                            @1101
+    _OBJ_NAME_cleanup                        @1104
+    _OBJ_NAME_get                            @1105
+    _OBJ_NAME_init                           @1106
+    _OBJ_NAME_new_index                      @1107
+    _OBJ_NAME_remove                         @1108
+    _OBJ_add_object                          @353
+    _OBJ_bsearch                             @354
+    _OBJ_cleanup                             @355
+    _OBJ_cmp                                 @356
+    _OBJ_create                              @357
+    _OBJ_create_objects                      @997
+    _OBJ_dup                                 @358
+    _OBJ_ln2nid                              @359
+    _OBJ_new_nid                             @360
+    _OBJ_nid2ln                              @361
+    _OBJ_nid2obj                             @362
+    _OBJ_nid2sn                              @363
+    _OBJ_obj2nid                             @364
+    _OBJ_obj2txt                             @1870
+    _OBJ_sn2nid                              @365
+    _OBJ_txt2nid                             @366
+    _OBJ_txt2obj                             @1167
+    _OTHERNAME_free                          @2112
+    _OTHERNAME_new                           @1999
+    _OpenSSL_add_all_algorithms              @508
+    _OpenSSL_add_all_ciphers                 @509
+    _OpenSSL_add_all_digests                 @510
+    _PBE2PARAM_free                          @1404
+    _PBE2PARAM_new                           @1402
+    _PBEPARAM_free                           @1313
+    _PBEPARAM_new                            @1311
+    _PBKDF2PARAM_free                        @1400
+    _PBKDF2PARAM_new                         @1398
+    _PEM_ASN1_read_bio                       @368
+    _PEM_ASN1_write_bio                      @370
+    _PEM_SealFinal                           @371
+    _PEM_SealInit                            @372
+    _PEM_SealUpdate                          @373
+    _PEM_SignFinal                           @374
+    _PEM_SignInit                            @375
+    _PEM_SignUpdate                          @376
+    _PEM_X509_INFO_read_bio                  @378
+    _PEM_X509_INFO_write_bio                 @379
+    _PEM_dek_info                            @380
+    _PEM_do_header                           @381
+    _PEM_get_EVP_CIPHER_INFO                 @382
+    _PEM_proc_type                           @383
+    _PEM_read_bio                            @394
+    _PEM_read_bio_DHparams                   @395
+    _PEM_read_bio_DSAPrivateKey              @396
+    _PEM_read_bio_DSA_PUBKEY                 @2088
+    _PEM_read_bio_DSAparams                  @397
+    _PEM_read_bio_NETSCAPE_CERT_SEQUENCE     @1169
+    _PEM_read_bio_PKCS7                      @398
+    _PEM_read_bio_PKCS8                      @1787
+    _PEM_read_bio_PKCS8_PRIV_KEY_INFO        @1778
+    _PEM_read_bio_PUBKEY                     @1995
+    _PEM_read_bio_PrivateKey                 @399
+    _PEM_read_bio_RSAPrivateKey              @400
+    _PEM_read_bio_RSAPublicKey               @943
+    _PEM_read_bio_RSA_PUBKEY                 @2081
+    _PEM_read_bio_X509                       @401
+    _PEM_read_bio_X509_AUX                   @1959
+    _PEM_read_bio_X509_CRL                   @402
+    _PEM_read_bio_X509_REQ                   @403
+    _PEM_write_PKCS8PrivateKey               @1798
+    _PEM_write_PKCS8PrivateKey_nid           @2165
+    _PEM_write_bio                           @414
+    _PEM_write_bio_DHparams                  @415
+    _PEM_write_bio_DSAPrivateKey             @416
+    _PEM_write_bio_DSA_PUBKEY                @1968
+    _PEM_write_bio_DSAparams                 @417
+    _PEM_write_bio_NETSCAPE_CERT_SEQUENCE    @1171
+    _PEM_write_bio_PKCS7                     @418
+    _PEM_write_bio_PKCS8                     @1776
+    _PEM_write_bio_PKCS8PrivateKey           @1797
+    _PEM_write_bio_PKCS8PrivateKey_nid       @2166
+    _PEM_write_bio_PKCS8_PRIV_KEY_INFO       @1781
+    _PEM_write_bio_PUBKEY                    @2117
+    _PEM_write_bio_PrivateKey                @419
+    _PEM_write_bio_RSAPrivateKey             @420
+    _PEM_write_bio_RSAPublicKey              @944
+    _PEM_write_bio_RSA_PUBKEY                @1961
+    _PEM_write_bio_X509                      @421
+    _PEM_write_bio_X509_AUX                  @2066
+    _PEM_write_bio_X509_CRL                  @422
+    _PEM_write_bio_X509_REQ                  @423
+    _PEM_write_bio_X509_REQ_NEW              @2250
+    _PKCS12_BAGS_free                        @1287
+    _PKCS12_BAGS_new                         @1285
+    _PKCS12_MAC_DATA_free                    @1295
+    _PKCS12_MAC_DATA_new                     @1293
+    _PKCS12_MAKE_KEYBAG                      @1263
+    _PKCS12_MAKE_SHKEYBAG                    @1265
+    _PKCS12_PBE_add                          @1301
+    _PKCS12_PBE_keyivgen                     @1517
+    _PKCS12_SAFEBAG_free                     @1299
+    _PKCS12_SAFEBAG_new                      @1297
+    _PKCS12_add_friendlyname_asc             @1269
+    _PKCS12_add_friendlyname_uni             @1270
+    _PKCS12_add_localkeyid                   @1268
+    _PKCS12_create                           @1305
+    _PKCS12_decrypt_d2i                      @1273
+    _PKCS12_free                             @1291
+    _PKCS12_gen_mac                          @1278
+    _PKCS12_get_attr_gen                     @1303
+    _PKCS12_get_friendlyname                 @1271
+    _PKCS12_i2d_encrypt                      @1274
+    _PKCS12_init                             @1275
+    _PKCS12_key_gen_asc                      @1276
+    _PKCS12_key_gen_uni                      @1277
+    _PKCS12_new                              @1290
+    _PKCS12_newpass                          @2141
+    _PKCS12_pack_p7data                      @1266
+    _PKCS12_pack_p7encdata                   @1267
+    _PKCS12_pack_safebag                     @1262
+    _PKCS12_parse                            @1304
+    _PKCS12_pbe_crypt                        @1272
+    _PKCS12_set_mac                          @1280
+    _PKCS12_setup_mac                        @1281
+    _PKCS12_verify_mac                       @1279
+    _PKCS5_PBE_add                           @1775
+    _PKCS5_PBE_keyivgen                      @1789
+    _PKCS5_PBKDF2_HMAC_SHA1                  @1795
+    _PKCS5_pbe2_set                          @1794
+    _PKCS5_pbe_set                           @1323
+    _PKCS5_v2_PBE_keyivgen                   @1796
+    _PKCS7_DIGEST_free                       @424
+    _PKCS7_DIGEST_new                        @425
+    _PKCS7_ENCRYPT_free                      @426
+    _PKCS7_ENCRYPT_new                       @427
+    _PKCS7_ENC_CONTENT_free                  @428
+    _PKCS7_ENC_CONTENT_new                   @429
+    _PKCS7_ENVELOPE_free                     @430
+    _PKCS7_ENVELOPE_new                      @431
+    _PKCS7_ISSUER_AND_SERIAL_digest          @432
+    _PKCS7_ISSUER_AND_SERIAL_free            @433
+    _PKCS7_ISSUER_AND_SERIAL_new             @434
+    _PKCS7_RECIP_INFO_free                   @435
+    _PKCS7_RECIP_INFO_new                    @436
+    _PKCS7_RECIP_INFO_set                    @1072
+    _PKCS7_SIGNED_free                       @437
+    _PKCS7_SIGNED_new                        @438
+    _PKCS7_SIGNER_INFO_free                  @439
+    _PKCS7_SIGNER_INFO_new                   @440
+    _PKCS7_SIGNER_INFO_set                   @930
+    _PKCS7_SIGN_ENVELOPE_free                @441
+    _PKCS7_SIGN_ENVELOPE_new                 @442
+    _PKCS7_add_attrib_smimecap               @2156
+    _PKCS7_add_attribute                     @1138
+    _PKCS7_add_certificate                   @932
+    _PKCS7_add_crl                           @933
+    _PKCS7_add_recipient                     @1073
+    _PKCS7_add_recipient_info                @1074
+    _PKCS7_add_signature                     @938
+    _PKCS7_add_signed_attribute              @1139
+    _PKCS7_add_signer                        @931
+    _PKCS7_cert_from_signer_info             @939
+    _PKCS7_content_free                      @918
+    _PKCS7_content_new                       @934
+    _PKCS7_ctrl                              @927
+    _PKCS7_dataDecode                        @1246
+    _PKCS7_dataFinal                         @1245
+    _PKCS7_dataInit                          @937
+    _PKCS7_dataVerify                        @936
+    _PKCS7_decrypt                           @2151
+    _PKCS7_digest_from_attributes            @1140
+    _PKCS7_dup                               @443
+    _PKCS7_encrypt                           @2146
+    _PKCS7_free                              @444
+    _PKCS7_get0_signers                      @2150
+    _PKCS7_get_attribute                     @1141
+    _PKCS7_get_issuer_and_serial             @1142
+    _PKCS7_get_signed_attribute              @1143
+    _PKCS7_get_signer_info                   @940
+    _PKCS7_get_smimecap                      @2154
+    _PKCS7_new                               @445
+    _PKCS7_set_attributes                    @1153
+    _PKCS7_set_cipher                        @1075
+    _PKCS7_set_content                       @929
+    _PKCS7_set_signed_attributes             @1154
+    _PKCS7_set_type                          @928
+    _PKCS7_sign                              @2155
+    _PKCS7_signatureVerify                   @1845
+    _PKCS7_simple_smimecap                   @2153
+    _PKCS7_verify                            @2145
+    _PKCS8_PRIV_KEY_INFO_free                @1317
+    _PKCS8_PRIV_KEY_INFO_new                 @1315
+    _PKCS8_add_keyusage                      @1302
+    _PKCS8_encrypt                           @1264
+    _PKCS8_set_broken                        @1320
+    _PKEY_USAGE_PERIOD_free                  @1235
+    _PKEY_USAGE_PERIOD_new                   @1234
+    _POLICYINFO_free                         @1491
+    _POLICYINFO_new                          @1489
+    _POLICYQUALINFO_free                     @1495
+    _POLICYQUALINFO_new                      @1493
+    _RAND_SSLeay                             @1113
+    _RAND_add                                @2201
+    _RAND_bytes                              @464
+    _RAND_cleanup                            @465
+    _RAND_egd                                @2253
+    _RAND_file_name                          @466
+    _RAND_get_rand_method                    @1137
+    _RAND_load_file                          @467
+    _RAND_pseudo_bytes                       @2206
+    _RAND_screen                             @468
+    _RAND_seed                               @469
+    _RAND_set_rand_method                    @1114
+    _RAND_status                             @2254
+    _RAND_write_file                         @470
+    _RC2_cbc_encrypt                         @471
+    _RC2_cfb64_encrypt                       @472
+    _RC2_decrypt                             @995
+    _RC2_ecb_encrypt                         @473
+    _RC2_encrypt                             @474
+    _RC2_ofb64_encrypt                       @475
+    _RC2_set_key                             @476
+    _RC4                                     @477
+    _RC4_options                             @478
+    _RC4_set_key                             @479
+    _RC5_32_cbc_encrypt                      @1051
+    _RC5_32_cfb64_encrypt                    @1052
+    _RC5_32_decrypt                          @1050
+    _RC5_32_ecb_encrypt                      @1048
+    _RC5_32_encrypt                          @1049
+    _RC5_32_ofb64_encrypt                    @1053
+    _RC5_32_set_key                          @1047
+    _RIPEMD160                               @1045
+    _RIPEMD160_Final                         @1044
+    _RIPEMD160_Init                          @1042
+    _RIPEMD160_Transform                     @1046
+    _RIPEMD160_Update                        @1043
+    _RSAPrivateKey_asn1_meth                 @480
+    _RSAPrivateKey_dup                       @481
+    _RSAPublicKey_dup                        @482
+    _RSA_PKCS1_SSLeay                        @483
+    _RSA_blinding_off                        @978
+    _RSA_blinding_on                         @977
+    _RSA_check_key                           @1869
+    _RSA_flags                               @956
+    _RSA_free                                @484
+    _RSA_generate_key                        @485
+    _RSA_get_default_method                  @1848
+    _RSA_get_ex_data                         @1029
+    _RSA_get_ex_new_index                    @1030
+    _RSA_get_method                          @1847
+    _RSA_memory_lock                         @1115
+    _RSA_new                                 @486
+    _RSA_new_method                          @487
+    _RSA_null_method                         @1904
+    _RSA_padding_add_PKCS1_OAEP              @1226
+    _RSA_padding_add_PKCS1_type_1            @1031
+    _RSA_padding_add_PKCS1_type_2            @1032
+    _RSA_padding_add_SSLv23                  @1033
+    _RSA_padding_add_none                    @1034
+    _RSA_padding_check_PKCS1_OAEP            @1227
+    _RSA_padding_check_PKCS1_type_1          @1035
+    _RSA_padding_check_PKCS1_type_2          @1036
+    _RSA_padding_check_SSLv23                @1037
+    _RSA_padding_check_none                  @1038
+    _RSA_print                               @488
+    _RSA_private_decrypt                     @490
+    _RSA_private_encrypt                     @491
+    _RSA_public_decrypt                      @492
+    _RSA_public_encrypt                      @493
+    _RSA_set_default_method                  @494
+    _RSA_set_ex_data                         @1028
+    _RSA_set_method                          @1846
+    _RSA_sign                                @495
+    _RSA_sign_ASN1_OCTET_STRING              @496
+    _RSA_size                                @497
+    _RSA_verify                              @498
+    _RSA_verify_ASN1_OCTET_STRING            @499
+    _SHA                                     @500
+    _SHA1                                    @501
+    _SHA1_Final                              @502
+    _SHA1_Init                               @503
+    _SHA1_Transform                          @1012
+    _SHA1_Update                             @504
+    _SHA_Final                               @505
+    _SHA_Init                                @506
+    _SHA_Transform                           @1013
+    _SHA_Update                              @507
+    _SMIME_crlf_copy                         @2148
+    _SMIME_read_PKCS7                        @2143
+    _SMIME_text                              @2152
+    _SMIME_write_PKCS7                       @2142
+    _SXNETID_free                            @1332
+    _SXNETID_new                             @1331
+    _SXNET_add_id_INTEGER                    @1479
+    _SXNET_add_id_asc                        @1477
+    _SXNET_add_id_ulong                      @1478
+    _SXNET_free                              @1328
+    _SXNET_get_id_INTEGER                    @1482
+    _SXNET_get_id_asc                        @1480
+    _SXNET_get_id_ulong                      @1481
+    _SXNET_new                               @1327
+    _TXT_DB_create_index                     @511
+    _TXT_DB_free                             @512
+    _TXT_DB_get_by_index                     @513
+    _TXT_DB_insert                           @514
+    _TXT_DB_read                             @515
+    _TXT_DB_write                            @516
+    _USERNOTICE_free                         @1499
+    _USERNOTICE_new                          @1497
+    _UTF8_getc                               @1903
+    _UTF8_putc                               @1902
+    _X509V3_EXT_CRL_add_conf                 @1247
+    _X509V3_EXT_REQ_add_conf                 @1896
+    _X509V3_EXT_add                          @1172
+    _X509V3_EXT_add_alias                    @1173
+    _X509V3_EXT_add_conf                     @1174
+    _X509V3_EXT_add_list                     @1648
+    _X509V3_EXT_cleanup                      @1175
+    _X509V3_EXT_conf                         @1176
+    _X509V3_EXT_conf_nid                     @1177
+    _X509V3_EXT_d2i                          @1238
+    _X509V3_EXT_get                          @1178
+    _X509V3_EXT_get_nid                      @1179
+    _X509V3_EXT_i2d                          @1646
+    _X509V3_EXT_print                        @1180
+    _X509V3_EXT_print_fp                     @1181
+    _X509V3_EXT_val_prn                      @1647
+    _X509V3_add_standard_extensions          @1182
+    _X509V3_add_value                        @1183
+    _X509V3_add_value_bool                   @1184
+    _X509V3_add_value_bool_nf                @1651
+    _X509V3_add_value_int                    @1185
+    _X509V3_add_value_uchar                  @1549
+    _X509V3_conf_free                        @1186
+    _X509V3_get_d2i                          @2026
+    _X509V3_get_section                      @1505
+    _X509V3_get_string                       @1504
+    _X509V3_get_value_bool                   @1187
+    _X509V3_get_value_int                    @1188
+    _X509V3_parse_list                       @1189
+    _X509V3_section_free                     @1507
+    _X509V3_set_conf_lhash                   @1483
+    _X509V3_set_ctx                          @1508
+    _X509V3_string_free                      @1506
+    _X509_ALGOR_dup                          @1518
+    _X509_ALGOR_free                         @517
+    _X509_ALGOR_new                          @518
+    _X509_ATTRIBUTE_count                    @2193
+    _X509_ATTRIBUTE_create                   @1155
+    _X509_ATTRIBUTE_create_by_NID            @2191
+    _X509_ATTRIBUTE_create_by_OBJ            @2194
+    _X509_ATTRIBUTE_create_by_txt            @2218
+    _X509_ATTRIBUTE_dup                      @1156
+    _X509_ATTRIBUTE_free                     @519
+    _X509_ATTRIBUTE_get0_data                @2198
+    _X509_ATTRIBUTE_get0_object              @2195
+    _X509_ATTRIBUTE_get0_type                @2187
+    _X509_ATTRIBUTE_new                      @520
+    _X509_ATTRIBUTE_set1_data                @2188
+    _X509_ATTRIBUTE_set1_object              @2192
+    _X509_CERT_AUX_free                      @1926
+    _X509_CERT_AUX_new                       @2001
+    _X509_CERT_AUX_print                     @1982
+    _X509_CINF_free                          @521
+    _X509_CINF_new                           @522
+    _X509_CRL_INFO_free                      @523
+    _X509_CRL_INFO_new                       @524
+    _X509_CRL_add_ext                        @525
+    _X509_CRL_cmp                            @526
+    _X509_CRL_delete_ext                     @527
+    _X509_CRL_dup                            @528
+    _X509_CRL_free                           @529
+    _X509_CRL_get_ext                        @530
+    _X509_CRL_get_ext_by_NID                 @531
+    _X509_CRL_get_ext_by_OBJ                 @532
+    _X509_CRL_get_ext_by_critical            @533
+    _X509_CRL_get_ext_count                  @534
+    _X509_CRL_get_ext_d2i                    @2009
+    _X509_CRL_new                            @535
+    _X509_CRL_print                          @1229
+    _X509_CRL_sign                           @536
+    _X509_CRL_verify                         @537
+    _X509_EXTENSION_create_by_NID            @538
+    _X509_EXTENSION_create_by_OBJ            @539
+    _X509_EXTENSION_dup                      @540
+    _X509_EXTENSION_free                     @541
+    _X509_EXTENSION_get_critical             @542
+    _X509_EXTENSION_get_data                 @543
+    _X509_EXTENSION_get_object               @544
+    _X509_EXTENSION_new                      @545
+    _X509_EXTENSION_set_critical             @546
+    _X509_EXTENSION_set_data                 @547
+    _X509_EXTENSION_set_object               @548
+    _X509_INFO_free                          @549
+    _X509_INFO_new                           @550
+    _X509_LOOKUP_by_alias                    @551
+    _X509_LOOKUP_by_fingerprint              @552
+    _X509_LOOKUP_by_issuer_serial            @553
+    _X509_LOOKUP_by_subject                  @554
+    _X509_LOOKUP_ctrl                        @555
+    _X509_LOOKUP_file                        @556
+    _X509_LOOKUP_free                        @557
+    _X509_LOOKUP_hash_dir                    @558
+    _X509_LOOKUP_init                        @559
+    _X509_LOOKUP_new                         @560
+    _X509_LOOKUP_shutdown                    @561
+    _X509_NAME_ENTRY_create_by_NID           @562
+    _X509_NAME_ENTRY_create_by_OBJ           @563
+    _X509_NAME_ENTRY_create_by_txt           @2071
+    _X509_NAME_ENTRY_dup                     @564
+    _X509_NAME_ENTRY_free                    @565
+    _X509_NAME_ENTRY_get_data                @566
+    _X509_NAME_ENTRY_get_object              @567
+    _X509_NAME_ENTRY_new                     @568
+    _X509_NAME_ENTRY_set_data                @569
+    _X509_NAME_ENTRY_set_object              @570
+    _X509_NAME_add_entry                     @571
+    _X509_NAME_add_entry_by_NID              @1914
+    _X509_NAME_add_entry_by_OBJ              @2008
+    _X509_NAME_add_entry_by_txt              @1912
+    _X509_NAME_cmp                           @572
+    _X509_NAME_delete_entry                  @573
+    _X509_NAME_digest                        @574
+    _X509_NAME_dup                           @575
+    _X509_NAME_entry_count                   @576
+    _X509_NAME_free                          @577
+    _X509_NAME_get_entry                     @578
+    _X509_NAME_get_index_by_NID              @579
+    _X509_NAME_get_index_by_OBJ              @580
+    _X509_NAME_get_text_by_NID               @581
+    _X509_NAME_get_text_by_OBJ               @582
+    _X509_NAME_hash                          @583
+    _X509_NAME_new                           @584
+    _X509_NAME_oneline                       @585
+    _X509_NAME_print                         @586
+    _X509_NAME_set                           @587
+    _X509_OBJECT_free_contents               @588
+    _X509_OBJECT_retrieve_by_subject         @589
+    _X509_OBJECT_up_ref_count                @590
+    _X509_PKEY_free                          @591
+    _X509_PKEY_new                           @592
+    _X509_PUBKEY_free                        @593
+    _X509_PUBKEY_get                         @594
+    _X509_PUBKEY_new                         @595
+    _X509_PUBKEY_set                         @596
+    _X509_PURPOSE_add                        @2090
+    _X509_PURPOSE_cleanup                    @2119
+    _X509_PURPOSE_get0                       @1915
+    _X509_PURPOSE_get0_name                  @2011
+    _X509_PURPOSE_get0_sname                 @2105
+    _X509_PURPOSE_get_by_id                  @1990
+    _X509_PURPOSE_get_by_sname               @1952
+    _X509_PURPOSE_get_count                  @2067
+    _X509_PURPOSE_get_id                     @1997
+    _X509_PURPOSE_get_trust                  @2022
+    _X509_REQ_INFO_free                      @597
+    _X509_REQ_INFO_new                       @598
+    _X509_REQ_add1_attr                      @2214
+    _X509_REQ_add1_attr_by_NID               @2209
+    _X509_REQ_add1_attr_by_OBJ               @2212
+    _X509_REQ_add1_attr_by_txt               @2217
+    _X509_REQ_add_extensions                 @1881
+    _X509_REQ_add_extensions_nid             @1879
+    _X509_REQ_delete_attr                    @2215
+    _X509_REQ_dup                            @599
+    _X509_REQ_extension_nid                  @1875
+    _X509_REQ_free                           @600
+    _X509_REQ_get_attr                       @2208
+    _X509_REQ_get_attr_by_NID                @2207
+    _X509_REQ_get_attr_by_OBJ                @2210
+    _X509_REQ_get_attr_count                 @2213
+    _X509_REQ_get_extension_nids             @1877
+    _X509_REQ_get_extensions                 @1872
+    _X509_REQ_get_pubkey                     @601
+    _X509_REQ_new                            @602
+    _X509_REQ_print                          @603
+    _X509_REQ_set_extension_nids             @1873
+    _X509_REQ_set_pubkey                     @605
+    _X509_REQ_set_subject_name               @606
+    _X509_REQ_set_version                    @607
+    _X509_REQ_sign                           @608
+    _X509_REQ_to_X509                        @609
+    _X509_REQ_verify                         @610
+    _X509_REVOKED_add_ext                    @611
+    _X509_REVOKED_delete_ext                 @612
+    _X509_REVOKED_free                       @613
+    _X509_REVOKED_get_ext                    @614
+    _X509_REVOKED_get_ext_by_NID             @615
+    _X509_REVOKED_get_ext_by_OBJ             @616
+    _X509_REVOKED_get_ext_by_critical        @617
+    _X509_REVOKED_get_ext_count              @618
+    _X509_REVOKED_get_ext_d2i                @1909
+    _X509_REVOKED_new                        @619
+    _X509_SIG_free                           @620
+    _X509_SIG_new                            @621
+    _X509_STORE_CTX_cleanup                  @622
+    _X509_STORE_CTX_free                     @1969
+    _X509_STORE_CTX_get1_chain               @2204
+    _X509_STORE_CTX_get_chain                @1014
+    _X509_STORE_CTX_get_current_cert         @1015
+    _X509_STORE_CTX_get_error                @1016
+    _X509_STORE_CTX_get_error_depth          @1017
+    _X509_STORE_CTX_get_ex_data              @1018
+    _X509_STORE_CTX_get_ex_new_index         @1100
+    _X509_STORE_CTX_init                     @623
+    _X509_STORE_CTX_new                      @2033
+    _X509_STORE_CTX_purpose_inherit          @1976
+    _X509_STORE_CTX_set_cert                 @1020
+    _X509_STORE_CTX_set_chain                @1021
+    _X509_STORE_CTX_set_error                @1022
+    _X509_STORE_CTX_set_ex_data              @1023
+    _X509_STORE_CTX_set_purpose              @2064
+    _X509_STORE_CTX_set_trust                @2030
+    _X509_STORE_add_cert                     @624
+    _X509_STORE_add_crl                      @957
+    _X509_STORE_add_lookup                   @625
+    _X509_STORE_free                         @626
+    _X509_STORE_get_by_subject               @627
+    _X509_STORE_load_locations               @628
+    _X509_STORE_new                          @629
+    _X509_STORE_set_default_paths            @630
+    _X509_TRUST_add                          @1931
+    _X509_TRUST_cleanup                      @2007
+    _X509_TRUST_get0                         @2047
+    _X509_TRUST_get0_name                    @2046
+    _X509_TRUST_get_by_id                    @2021
+    _X509_TRUST_get_count                    @2110
+    _X509_TRUST_get_flags                    @2056
+    _X509_TRUST_get_trust                    @2055
+    _X509_TRUST_set_default                  @2185
+    _X509_VAL_free                           @631
+    _X509_VAL_new                            @632
+    _X509_add1_reject_object                 @2082
+    _X509_add1_trust_object                  @2140
+    _X509_add_ext                            @633
+    _X509_alias_get0                         @2074
+    _X509_alias_set1                         @1933
+    _X509_asn1_meth                          @634
+    _X509_certificate_type                   @635
+    _X509_check_private_key                  @636
+    _X509_check_purpose                      @2051
+    _X509_check_trust                        @2083
+    _X509_cmp                                @2135
+    _X509_cmp_current_time                   @637
+    _X509_delete_ext                         @638
+    _X509_digest                             @639
+    _X509_dup                                @640
+    _X509_find_by_issuer_and_serial          @920
+    _X509_find_by_subject                    @921
+    _X509_free                               @641
+    _X509_get_default_cert_area              @642
+    _X509_get_default_cert_dir               @643
+    _X509_get_default_cert_dir_env           @644
+    _X509_get_default_cert_file              @645
+    _X509_get_default_cert_file_env          @646
+    _X509_get_default_private_dir            @647
+    _X509_get_ex_data                        @1950
+    _X509_get_ex_new_index                   @2019
+    _X509_get_ext                            @648
+    _X509_get_ext_by_NID                     @649
+    _X509_get_ext_by_OBJ                     @650
+    _X509_get_ext_by_critical                @651
+    _X509_get_ext_count                      @652
+    _X509_get_ext_d2i                        @1958
+    _X509_get_issuer_name                    @653
+    _X509_get_pubkey                         @654
+    _X509_get_pubkey_parameters              @655
+    _X509_get_serialNumber                   @656
+    _X509_get_subject_name                   @657
+    _X509_gmtime_adj                         @658
+    _X509_issuer_and_serial_cmp              @659
+    _X509_issuer_and_serial_hash             @660
+    _X509_issuer_name_cmp                    @661
+    _X509_issuer_name_hash                   @662
+    _X509_load_cert_crl_file                 @1972
+    _X509_load_cert_file                     @663
+    _X509_load_crl_file                      @958
+    _X509_new                                @664
+    _X509_print                              @665
+    _X509_reject_clear                       @2184
+    _X509_set_ex_data                        @1910
+    _X509_set_issuer_name                    @667
+    _X509_set_notAfter                       @668
+    _X509_set_notBefore                      @669
+    _X509_set_pubkey                         @670
+    _X509_set_serialNumber                   @671
+    _X509_set_subject_name                   @672
+    _X509_set_version                        @673
+    _X509_sign                               @674
+    _X509_subject_name_cmp                   @675
+    _X509_subject_name_hash                  @676
+    _X509_to_X509_REQ                        @677
+    _X509_trust_clear                        @1928
+    _X509_verify                             @678
+    _X509_verify_cert                        @679
+    _X509_verify_cert_error_string           @680
+    _X509at_add1_attr                        @2197
+    _X509at_add1_attr_by_NID                 @2211
+    _X509at_add1_attr_by_OBJ                 @2216
+    _X509at_add1_attr_by_txt                 @2219
+    _X509at_delete_attr                      @2199
+    _X509at_get_attr                         @2189
+    _X509at_get_attr_by_NID                  @2196
+    _X509at_get_attr_by_OBJ                  @2200
+    _X509at_get_attr_count                   @2190
+    _X509v3_add_ext                          @681
+    _X509v3_delete_ext                       @688
+    _X509v3_get_ext                          @689
+    _X509v3_get_ext_by_NID                   @690
+    _X509v3_get_ext_by_OBJ                   @691
+    _X509v3_get_ext_by_critical              @692
+    _X509v3_get_ext_count                    @693
+    _a2d_ASN1_OBJECT                         @699
+    _a2i_ASN1_ENUMERATED                     @1210
+    _a2i_ASN1_INTEGER                        @700
+    _a2i_ASN1_STRING                         @701
+    _asc2uni                                 @1282
+    _asn1_Finish                             @702
+    _asn1_GetSequence                        @703
+    _asn1_add_error                          @1091
+    _bn_add_words                            @1039
+    _bn_div_words                            @704
+    _bn_expand2                              @705
+    _bn_mul_add_words                        @706
+    _bn_mul_words                            @707
+    _bn_sqr_words                            @710
+    _bn_sub_words                            @1116
+    _crypt                                   @711
+    _d2i_ACCESS_DESCRIPTION                  @1927
+    _d2i_ASN1_BIT_STRING                     @712
+    _d2i_ASN1_BMPSTRING                      @1092
+    _d2i_ASN1_BOOLEAN                        @713
+    _d2i_ASN1_ENUMERATED                     @1204
+    _d2i_ASN1_GENERALIZEDTIME                @1190
+    _d2i_ASN1_HEADER                         @714
+    _d2i_ASN1_IA5STRING                      @715
+    _d2i_ASN1_INTEGER                        @716
+    _d2i_ASN1_NULL                           @2169
+    _d2i_ASN1_OBJECT                         @717
+    _d2i_ASN1_OCTET_STRING                   @718
+    _d2i_ASN1_PRINTABLE                      @719
+    _d2i_ASN1_PRINTABLESTRING                @720
+    _d2i_ASN1_SET                            @721
+    _d2i_ASN1_SET_OF_ACCESS_DESCRIPTION      @2024
+    _d2i_ASN1_SET_OF_ASN1_OBJECT             @1844
+    _d2i_ASN1_SET_OF_ASN1_TYPE               @1589
+    _d2i_ASN1_SET_OF_DIST_POINT              @1535
+    _d2i_ASN1_SET_OF_GENERAL_NAME            @1421
+    _d2i_ASN1_SET_OF_PKCS7_RECIP_INFO        @1753
+    _d2i_ASN1_SET_OF_PKCS7_SIGNER_INFO       @1748
+    _d2i_ASN1_SET_OF_POLICYINFO              @1475
+    _d2i_ASN1_SET_OF_POLICYQUALINFO          @1457
+    _d2i_ASN1_SET_OF_SXNETID                 @1439
+    _d2i_ASN1_SET_OF_X509                    @1379
+    _d2i_ASN1_SET_OF_X509_ALGOR              @1696
+    _d2i_ASN1_SET_OF_X509_ATTRIBUTE          @1555
+    _d2i_ASN1_SET_OF_X509_CRL                @1702
+    _d2i_ASN1_SET_OF_X509_EXTENSION          @1567
+    _d2i_ASN1_SET_OF_X509_NAME_ENTRY         @1574
+    _d2i_ASN1_SET_OF_X509_REVOKED            @1674
+    _d2i_ASN1_T61STRING                      @722
+    _d2i_ASN1_TIME                           @1191
+    _d2i_ASN1_TYPE                           @723
+    _d2i_ASN1_UINTEGER                       @1652
+    _d2i_ASN1_UTCTIME                        @724
+    _d2i_ASN1_UTF8STRING                     @1342
+    _d2i_ASN1_VISIBLESTRING                  @1340
+    _d2i_ASN1_bytes                          @725
+    _d2i_ASN1_type_bytes                     @726
+    _d2i_AUTHORITY_INFO_ACCESS               @1918
+    _d2i_AUTHORITY_KEYID                     @1255
+    _d2i_AutoPrivateKey                      @2186
+    _d2i_BASIC_CONSTRAINTS                   @1192
+    _d2i_CERTIFICATEPOLICIES                 @1487
+    _d2i_CRL_DIST_POINTS                     @1540
+    _d2i_DHparams                            @727
+    _d2i_DIRECTORYSTRING                     @1344
+    _d2i_DISPLAYTEXT                         @1346
+    _d2i_DIST_POINT                          @1543
+    _d2i_DIST_POINT_NAME                     @1548
+    _d2i_DSAPrivateKey                       @728
+    _d2i_DSAPrivateKey_bio                   @729
+    _d2i_DSAPublicKey                        @731
+    _d2i_DSA_PUBKEY                          @2050
+    _d2i_DSA_PUBKEY_bio                      @2093
+    _d2i_DSA_SIG                             @1337
+    _d2i_DSAparams                           @732
+    _d2i_GENERAL_NAME                        @1212
+    _d2i_GENERAL_NAMES                       @1217
+    _d2i_NETSCAPE_CERT_SEQUENCE              @1193
+    _d2i_NETSCAPE_SPKAC                      @733
+    _d2i_NETSCAPE_SPKI                       @734
+    _d2i_NOTICEREF                           @1502
+    _d2i_Netscape_RSA                        @735
+    _d2i_Netscape_RSA_2                      @1040
+    _d2i_OTHERNAME                           @2096
+    _d2i_PBE2PARAM                           @1403
+    _d2i_PBEPARAM                            @1312
+    _d2i_PBKDF2PARAM                         @1399
+    _d2i_PKCS12                              @1289
+    _d2i_PKCS12_BAGS                         @1286
+    _d2i_PKCS12_MAC_DATA                     @1294
+    _d2i_PKCS12_SAFEBAG                      @1298
+    _d2i_PKCS12_bio                          @1308
+    _d2i_PKCS12_fp                           @1309
+    _d2i_PKCS7                               @736
+    _d2i_PKCS7_DIGEST                        @737
+    _d2i_PKCS7_ENCRYPT                       @738
+    _d2i_PKCS7_ENC_CONTENT                   @739
+    _d2i_PKCS7_ENVELOPE                      @740
+    _d2i_PKCS7_ISSUER_AND_SERIAL             @741
+    _d2i_PKCS7_RECIP_INFO                    @742
+    _d2i_PKCS7_SIGNED                        @743
+    _d2i_PKCS7_SIGNER_INFO                   @744
+    _d2i_PKCS7_SIGN_ENVELOPE                 @745
+    _d2i_PKCS7_bio                           @746
+    _d2i_PKCS8PrivateKey_bio                 @2167
+    _d2i_PKCS8PrivateKey_fp                  @2175
+    _d2i_PKCS8_PRIV_KEY_INFO                 @1316
+    _d2i_PKCS8_PRIV_KEY_INFO_bio             @1783
+    _d2i_PKCS8_bio                           @1779
+    _d2i_PKEY_USAGE_PERIOD                   @1233
+    _d2i_POLICYINFO                          @1490
+    _d2i_POLICYQUALINFO                      @1494
+    _d2i_PUBKEY                              @2054
+    _d2i_PrivateKey                          @748
+    _d2i_PrivateKey_bio                      @2181
+    _d2i_PublicKey                           @749
+    _d2i_RSAPrivateKey                       @750
+    _d2i_RSAPrivateKey_bio                   @751
+    _d2i_RSAPublicKey                        @753
+    _d2i_RSAPublicKey_bio                    @945
+    _d2i_RSA_PUBKEY                          @2044
+    _d2i_RSA_PUBKEY_bio                      @2053
+    _d2i_SXNET                               @1326
+    _d2i_SXNETID                             @1330
+    _d2i_USERNOTICE                          @1498
+    _d2i_X509                                @754
+    _d2i_X509_ALGOR                          @755
+    _d2i_X509_ATTRIBUTE                      @756
+    _d2i_X509_AUX                            @1980
+    _d2i_X509_CERT_AUX                       @2115
+    _d2i_X509_CINF                           @757
+    _d2i_X509_CRL                            @758
+    _d2i_X509_CRL_INFO                       @759
+    _d2i_X509_CRL_bio                        @760
+    _d2i_X509_EXTENSION                      @762
+    _d2i_X509_NAME                           @763
+    _d2i_X509_NAME_ENTRY                     @764
+    _d2i_X509_PKEY                           @765
+    _d2i_X509_PUBKEY                         @766
+    _d2i_X509_REQ                            @767
+    _d2i_X509_REQ_INFO                       @768
+    _d2i_X509_REQ_bio                        @769
+    _d2i_X509_REVOKED                        @771
+    _d2i_X509_SIG                            @772
+    _d2i_X509_VAL                            @773
+    _d2i_X509_bio                            @774
+    _d2i_ext_ku                              @1194
+    _des_cbc_cksum                           @777
+    _des_cbc_encrypt                         @778
+    _des_cblock_print_file                   @779
+    _des_cfb64_encrypt                       @780
+    _des_cfb_encrypt                         @781
+    _des_crypt                               @2249
+    _des_decrypt3                            @782
+    _des_ecb3_encrypt                        @783
+    _des_ecb_encrypt                         @784
+    _des_ede3_cbc_encrypt                    @785
+    _des_ede3_cbcm_encrypt                   @1225
+    _des_ede3_cfb64_encrypt                  @786
+    _des_ede3_ofb64_encrypt                  @787
+    _des_enc_read                            @788
+    _des_enc_write                           @789
+    _des_encrypt                             @790
+    _des_encrypt2                            @791
+    _des_encrypt3                            @792
+    _des_fcrypt                              @793
+    _des_is_weak_key                         @794
+    _des_key_sched                           @795
+    _des_ncbc_encrypt                        @796
+    _des_ofb64_encrypt                       @797
+    _des_ofb_encrypt                         @798
+    _des_options                             @799
+    _des_pcbc_encrypt                        @800
+    _des_quad_cksum                          @801
+    _des_random_key                          @802
+    _des_random_seed                         @803
+    _des_read_2passwords                     @804
+    _des_read_password                       @805
+    _des_read_pw                             @806
+    _des_read_pw_string                      @807
+    _des_set_key                             @808
+    _des_set_key_checked                     @2144
+    _des_set_key_unchecked                   @2147
+    _des_set_odd_parity                      @809
+    _des_string_to_2keys                     @810
+    _des_string_to_key                       @811
+    _des_xcbc_encrypt                        @812
+    _des_xwhite_in2out                       @813
+    _ext_ku_free                             @1195
+    _ext_ku_new                              @1196
+    _hex_to_string                           @1223
+    _i2a_ASN1_ENUMERATED                     @1209
+    _i2a_ASN1_INTEGER                        @815
+    _i2a_ASN1_OBJECT                         @816
+    _i2a_ASN1_STRING                         @817
+    _i2d_ACCESS_DESCRIPTION                  @2077
+    _i2d_ASN1_BIT_STRING                     @818
+    _i2d_ASN1_BMPSTRING                      @1093
+    _i2d_ASN1_BOOLEAN                        @819
+    _i2d_ASN1_ENUMERATED                     @1203
+    _i2d_ASN1_GENERALIZEDTIME                @1197
+    _i2d_ASN1_HEADER                         @820
+    _i2d_ASN1_IA5STRING                      @821
+    _i2d_ASN1_INTEGER                        @822
+    _i2d_ASN1_NULL                           @2173
+    _i2d_ASN1_OBJECT                         @823
+    _i2d_ASN1_OCTET_STRING                   @824
+    _i2d_ASN1_PRINTABLE                      @825
+    _i2d_ASN1_PRINTABLESTRING                @2149
+    _i2d_ASN1_SET                            @826
+    _i2d_ASN1_SET_OF_ACCESS_DESCRIPTION      @1945
+    _i2d_ASN1_SET_OF_ASN1_OBJECT             @1837
+    _i2d_ASN1_SET_OF_ASN1_TYPE               @1560
+    _i2d_ASN1_SET_OF_DIST_POINT              @1536
+    _i2d_ASN1_SET_OF_GENERAL_NAME            @1422
+    _i2d_ASN1_SET_OF_PKCS7_RECIP_INFO        @1738
+    _i2d_ASN1_SET_OF_PKCS7_SIGNER_INFO       @1723
+    _i2d_ASN1_SET_OF_POLICYINFO              @1476
+    _i2d_ASN1_SET_OF_POLICYQUALINFO          @1458
+    _i2d_ASN1_SET_OF_SXNETID                 @1440
+    _i2d_ASN1_SET_OF_X509                    @1380
+    _i2d_ASN1_SET_OF_X509_ALGOR              @1682
+    _i2d_ASN1_SET_OF_X509_ATTRIBUTE          @1615
+    _i2d_ASN1_SET_OF_X509_CRL                @1685
+    _i2d_ASN1_SET_OF_X509_EXTENSION          @1624
+    _i2d_ASN1_SET_OF_X509_NAME_ENTRY         @1633
+    _i2d_ASN1_SET_OF_X509_REVOKED            @1661
+    _i2d_ASN1_TIME                           @1198
+    _i2d_ASN1_TYPE                           @827
+    _i2d_ASN1_UTCTIME                        @828
+    _i2d_ASN1_UTF8STRING                     @1341
+    _i2d_ASN1_VISIBLESTRING                  @1339
+    _i2d_ASN1_bytes                          @829
+    _i2d_AUTHORITY_INFO_ACCESS               @2062
+    _i2d_AUTHORITY_KEYID                     @1254
+    _i2d_BASIC_CONSTRAINTS                   @1199
+    _i2d_CERTIFICATEPOLICIES                 @1484
+    _i2d_CRL_DIST_POINTS                     @1537
+    _i2d_DHparams                            @830
+    _i2d_DIRECTORYSTRING                     @1343
+    _i2d_DISPLAYTEXT                         @1345
+    _i2d_DIST_POINT                          @1541
+    _i2d_DIST_POINT_NAME                     @1545
+    _i2d_DSAPrivateKey                       @831
+    _i2d_DSAPrivateKey_bio                   @832
+    _i2d_DSAPublicKey                        @834
+    _i2d_DSA_PUBKEY                          @1981
+    _i2d_DSA_PUBKEY_bio                      @2014
+    _i2d_DSA_SIG                             @1338
+    _i2d_DSAparams                           @835
+    _i2d_GENERAL_NAME                        @1211
+    _i2d_GENERAL_NAMES                       @1218
+    _i2d_NETSCAPE_CERT_SEQUENCE              @1200
+    _i2d_NETSCAPE_SPKAC                      @836
+    _i2d_NETSCAPE_SPKI                       @837
+    _i2d_NOTICEREF                           @1500
+    _i2d_Netscape_RSA                        @838
+    _i2d_OTHERNAME                           @2015
+    _i2d_PBE2PARAM                           @1401
+    _i2d_PBEPARAM                            @1310
+    _i2d_PBKDF2PARAM                         @1397
+    _i2d_PKCS12                              @1288
+    _i2d_PKCS12_BAGS                         @1284
+    _i2d_PKCS12_MAC_DATA                     @1292
+    _i2d_PKCS12_SAFEBAG                      @1296
+    _i2d_PKCS12_bio                          @1306
+    _i2d_PKCS12_fp                           @1307
+    _i2d_PKCS7                               @839
+    _i2d_PKCS7_DIGEST                        @840
+    _i2d_PKCS7_ENCRYPT                       @841
+    _i2d_PKCS7_ENC_CONTENT                   @842
+    _i2d_PKCS7_ENVELOPE                      @843
+    _i2d_PKCS7_ISSUER_AND_SERIAL             @844
+    _i2d_PKCS7_RECIP_INFO                    @845
+    _i2d_PKCS7_SIGNED                        @846
+    _i2d_PKCS7_SIGNER_INFO                   @847
+    _i2d_PKCS7_SIGN_ENVELOPE                 @848
+    _i2d_PKCS7_bio                           @849
+    _i2d_PKCS8PrivateKeyInfo_bio             @2178
+    _i2d_PKCS8PrivateKey_bio                 @2171
+    _i2d_PKCS8PrivateKey_fp                  @2172
+    _i2d_PKCS8PrivateKey_nid_bio             @2176
+    _i2d_PKCS8PrivateKey_nid_fp              @2174
+    _i2d_PKCS8_PRIV_KEY_INFO                 @1314
+    _i2d_PKCS8_PRIV_KEY_INFO_bio             @1792
+    _i2d_PKCS8_bio                           @1790
+    _i2d_PKEY_USAGE_PERIOD                   @1232
+    _i2d_POLICYINFO                          @1488
+    _i2d_POLICYQUALINFO                      @1492
+    _i2d_PUBKEY                              @1987
+    _i2d_PrivateKey                          @851
+    _i2d_PrivateKey_bio                      @2183
+    _i2d_PublicKey                           @852
+    _i2d_RSAPrivateKey                       @853
+    _i2d_RSAPrivateKey_bio                   @854
+    _i2d_RSAPublicKey                        @856
+    _i2d_RSAPublicKey_bio                    @946
+    _i2d_RSA_PUBKEY                          @1974
+    _i2d_RSA_PUBKEY_bio                      @1985
+    _i2d_SXNET                               @1325
+    _i2d_SXNETID                             @1329
+    _i2d_USERNOTICE                          @1496
+    _i2d_X509                                @857
+    _i2d_X509_ALGOR                          @858
+    _i2d_X509_ATTRIBUTE                      @859
+    _i2d_X509_AUX                            @2132
+    _i2d_X509_CERT_AUX                       @2028
+    _i2d_X509_CINF                           @860
+    _i2d_X509_CRL                            @861
+    _i2d_X509_CRL_INFO                       @862
+    _i2d_X509_CRL_bio                        @863
+    _i2d_X509_EXTENSION                      @865
+    _i2d_X509_NAME                           @866
+    _i2d_X509_NAME_ENTRY                     @867
+    _i2d_X509_PKEY                           @868
+    _i2d_X509_PUBKEY                         @869
+    _i2d_X509_REQ                            @870
+    _i2d_X509_REQ_INFO                       @871
+    _i2d_X509_REQ_bio                        @872
+    _i2d_X509_REVOKED                        @874
+    _i2d_X509_SIG                            @875
+    _i2d_X509_VAL                            @876
+    _i2d_X509_bio                            @877
+    _i2d_ext_ku                              @1201
+    _i2s_ASN1_ENUMERATED                     @1241
+    _i2s_ASN1_ENUMERATED_TABLE               @1242
+    _i2s_ASN1_INTEGER                        @1237
+    _i2s_ASN1_OCTET_STRING                   @1220
+    _i2t_ASN1_OBJECT                         @979
+    _i2v_GENERAL_NAME                        @1230
+    _i2v_GENERAL_NAMES                       @1219
+    _idea_cbc_encrypt                        @879
+    _idea_cfb64_encrypt                      @880
+    _idea_ecb_encrypt                        @881
+    _idea_encrypt                            @882
+    _idea_ofb64_encrypt                      @883
+    _idea_options                            @884
+    _idea_set_decrypt_key                    @885
+    _idea_set_encrypt_key                    @886
+    _lh_delete                               @887
+    _lh_doall                                @888
+    _lh_doall_arg                            @889
+    _lh_free                                 @890
+    _lh_insert                               @891
+    _lh_new                                  @892
+    _lh_node_stats_bio                       @894
+    _lh_node_usage_stats_bio                 @896
+    _lh_retrieve                             @897
+    _lh_stats_bio                            @899
+    _lh_strhash                              @900
+    _ms_time_cmp                             @1151
+    _ms_time_diff                            @1148
+    _ms_time_free                            @1150
+    _ms_time_get                             @1152
+    _ms_time_new                             @1149
+    _name_cmp                                @1239
+    _s2i_ASN1_INTEGER                        @1509
+    _s2i_ASN1_OCTET_STRING                   @1221
+    _sk_ACCESS_DESCRIPTION_delete            @1923
+    _sk_ACCESS_DESCRIPTION_delete_ptr        @2086
+    _sk_ACCESS_DESCRIPTION_dup               @2002
+    _sk_ACCESS_DESCRIPTION_find              @2029
+    _sk_ACCESS_DESCRIPTION_free              @1947
+    _sk_ACCESS_DESCRIPTION_insert            @2097
+    _sk_ACCESS_DESCRIPTION_new               @2013
+    _sk_ACCESS_DESCRIPTION_new_null          @2085
+    _sk_ACCESS_DESCRIPTION_num               @2069
+    _sk_ACCESS_DESCRIPTION_pop               @2061
+    _sk_ACCESS_DESCRIPTION_pop_free          @1979
+    _sk_ACCESS_DESCRIPTION_push              @2018
+    _sk_ACCESS_DESCRIPTION_set               @1939
+    _sk_ACCESS_DESCRIPTION_set_cmp_func      @2129
+    _sk_ACCESS_DESCRIPTION_shift             @1916
+    _sk_ACCESS_DESCRIPTION_sort              @2127
+    _sk_ACCESS_DESCRIPTION_unshift           @1965
+    _sk_ACCESS_DESCRIPTION_value             @1956
+    _sk_ACCESS_DESCRIPTION_zero              @2006
+    _sk_ASN1_OBJECT_delete                   @1831
+    _sk_ASN1_OBJECT_delete_ptr               @1828
+    _sk_ASN1_OBJECT_dup                      @1827
+    _sk_ASN1_OBJECT_find                     @1825
+    _sk_ASN1_OBJECT_free                     @1838
+    _sk_ASN1_OBJECT_insert                   @1842
+    _sk_ASN1_OBJECT_new                      @1829
+    _sk_ASN1_OBJECT_new_null                 @1836
+    _sk_ASN1_OBJECT_num                      @1834
+    _sk_ASN1_OBJECT_pop                      @1833
+    _sk_ASN1_OBJECT_pop_free                 @1826
+    _sk_ASN1_OBJECT_push                     @1843
+    _sk_ASN1_OBJECT_set                      @1839
+    _sk_ASN1_OBJECT_set_cmp_func             @1840
+    _sk_ASN1_OBJECT_shift                    @1832
+    _sk_ASN1_OBJECT_sort                     @1863
+    _sk_ASN1_OBJECT_unshift                  @1830
+    _sk_ASN1_OBJECT_value                    @1835
+    _sk_ASN1_OBJECT_zero                     @1841
+    _sk_ASN1_STRING_TABLE_delete             @2094
+    _sk_ASN1_STRING_TABLE_delete_ptr         @1966
+    _sk_ASN1_STRING_TABLE_dup                @2121
+    _sk_ASN1_STRING_TABLE_find               @2133
+    _sk_ASN1_STRING_TABLE_free               @2042
+    _sk_ASN1_STRING_TABLE_insert             @2036
+    _sk_ASN1_STRING_TABLE_new                @2138
+    _sk_ASN1_STRING_TABLE_new_null           @2116
+    _sk_ASN1_STRING_TABLE_num                @1962
+    _sk_ASN1_STRING_TABLE_pop                @1948
+    _sk_ASN1_STRING_TABLE_pop_free           @2003
+    _sk_ASN1_STRING_TABLE_push               @2120
+    _sk_ASN1_STRING_TABLE_set                @2045
+    _sk_ASN1_STRING_TABLE_set_cmp_func       @2070
+    _sk_ASN1_STRING_TABLE_shift              @2106
+    _sk_ASN1_STRING_TABLE_sort               @1992
+    _sk_ASN1_STRING_TABLE_unshift            @2004
+    _sk_ASN1_STRING_TABLE_value              @1924
+    _sk_ASN1_STRING_TABLE_zero               @2104
+    _sk_ASN1_TYPE_delete                     @1631
+    _sk_ASN1_TYPE_delete_ptr                 @1598
+    _sk_ASN1_TYPE_dup                        @1620
+    _sk_ASN1_TYPE_find                       @1635
+    _sk_ASN1_TYPE_free                       @1597
+    _sk_ASN1_TYPE_insert                     @1603
+    _sk_ASN1_TYPE_new                        @1628
+    _sk_ASN1_TYPE_new_null                   @1558
+    _sk_ASN1_TYPE_num                        @1564
+    _sk_ASN1_TYPE_pop                        @1556
+    _sk_ASN1_TYPE_pop_free                   @1599
+    _sk_ASN1_TYPE_push                       @1626
+    _sk_ASN1_TYPE_set                        @1593
+    _sk_ASN1_TYPE_set_cmp_func               @1571
+    _sk_ASN1_TYPE_shift                      @1630
+    _sk_ASN1_TYPE_sort                       @1857
+    _sk_ASN1_TYPE_unshift                    @1596
+    _sk_ASN1_TYPE_value                      @1553
+    _sk_ASN1_TYPE_zero                       @1623
+    _sk_CONF_VALUE_delete                    @1807
+    _sk_CONF_VALUE_delete_ptr                @1818
+    _sk_CONF_VALUE_dup                       @1822
+    _sk_CONF_VALUE_find                      @1819
+    _sk_CONF_VALUE_free                      @1811
+    _sk_CONF_VALUE_insert                    @1823
+    _sk_CONF_VALUE_new                       @1824
+    _sk_CONF_VALUE_new_null                  @1821
+    _sk_CONF_VALUE_num                       @1809
+    _sk_CONF_VALUE_pop                       @1808
+    _sk_CONF_VALUE_pop_free                  @1810
+    _sk_CONF_VALUE_push                      @1817
+    _sk_CONF_VALUE_set                       @1815
+    _sk_CONF_VALUE_set_cmp_func              @1820
+    _sk_CONF_VALUE_shift                     @1812
+    _sk_CONF_VALUE_sort                      @1849
+    _sk_CONF_VALUE_unshift                   @1813
+    _sk_CONF_VALUE_value                     @1814
+    _sk_CONF_VALUE_zero                      @1816
+    _sk_CRYPTO_EX_DATA_FUNCS_delete          @2220
+    _sk_CRYPTO_EX_DATA_FUNCS_delete_ptr      @2234
+    _sk_CRYPTO_EX_DATA_FUNCS_dup             @2226
+    _sk_CRYPTO_EX_DATA_FUNCS_find            @2231
+    _sk_CRYPTO_EX_DATA_FUNCS_free            @2233
+    _sk_CRYPTO_EX_DATA_FUNCS_insert          @2237
+    _sk_CRYPTO_EX_DATA_FUNCS_new             @2232
+    _sk_CRYPTO_EX_DATA_FUNCS_new_null        @2223
+    _sk_CRYPTO_EX_DATA_FUNCS_num             @2235
+    _sk_CRYPTO_EX_DATA_FUNCS_pop             @2229
+    _sk_CRYPTO_EX_DATA_FUNCS_pop_free        @2236
+    _sk_CRYPTO_EX_DATA_FUNCS_push            @2230
+    _sk_CRYPTO_EX_DATA_FUNCS_set             @2221
+    _sk_CRYPTO_EX_DATA_FUNCS_set_cmp_func    @2224
+    _sk_CRYPTO_EX_DATA_FUNCS_shift           @2227
+    _sk_CRYPTO_EX_DATA_FUNCS_sort            @2225
+    _sk_CRYPTO_EX_DATA_FUNCS_unshift         @2222
+    _sk_CRYPTO_EX_DATA_FUNCS_value           @2228
+    _sk_CRYPTO_EX_DATA_FUNCS_zero            @2238
+    _sk_DIST_POINT_delete                    @1529
+    _sk_DIST_POINT_delete_ptr                @1530
+    _sk_DIST_POINT_dup                       @1532
+    _sk_DIST_POINT_find                      @1528
+    _sk_DIST_POINT_free                      @1521
+    _sk_DIST_POINT_insert                    @1570
+    _sk_DIST_POINT_new                       @1519
+    _sk_DIST_POINT_new_null                  @1520
+    _sk_DIST_POINT_num                       @1522
+    _sk_DIST_POINT_pop                       @1527
+    _sk_DIST_POINT_pop_free                  @1533
+    _sk_DIST_POINT_push                      @1526
+    _sk_DIST_POINT_set                       @1524
+    _sk_DIST_POINT_set_cmp_func              @1531
+    _sk_DIST_POINT_shift                     @1534
+    _sk_DIST_POINT_sort                      @1868
+    _sk_DIST_POINT_unshift                   @1573
+    _sk_DIST_POINT_value                     @1523
+    _sk_DIST_POINT_zero                      @1525
+    _sk_GENERAL_NAME_delete                  @1415
+    _sk_GENERAL_NAME_delete_ptr              @1416
+    _sk_GENERAL_NAME_dup                     @1418
+    _sk_GENERAL_NAME_find                    @1414
+    _sk_GENERAL_NAME_free                    @1407
+    _sk_GENERAL_NAME_insert                  @1629
+    _sk_GENERAL_NAME_new                     @1405
+    _sk_GENERAL_NAME_new_null                @1406
+    _sk_GENERAL_NAME_num                     @1408
+    _sk_GENERAL_NAME_pop                     @1413
+    _sk_GENERAL_NAME_pop_free                @1419
+    _sk_GENERAL_NAME_push                    @1412
+    _sk_GENERAL_NAME_set                     @1410
+    _sk_GENERAL_NAME_set_cmp_func            @1417
+    _sk_GENERAL_NAME_shift                   @1420
+    _sk_GENERAL_NAME_sort                    @1854
+    _sk_GENERAL_NAME_unshift                 @1587
+    _sk_GENERAL_NAME_value                   @1409
+    _sk_GENERAL_NAME_zero                    @1411
+    _sk_PKCS7_RECIP_INFO_delete              @1774
+    _sk_PKCS7_RECIP_INFO_delete_ptr          @1759
+    _sk_PKCS7_RECIP_INFO_dup                 @1720
+    _sk_PKCS7_RECIP_INFO_find                @1773
+    _sk_PKCS7_RECIP_INFO_free                @1752
+    _sk_PKCS7_RECIP_INFO_insert              @1761
+    _sk_PKCS7_RECIP_INFO_new                 @1724
+    _sk_PKCS7_RECIP_INFO_new_null            @1730
+    _sk_PKCS7_RECIP_INFO_num                 @1746
+    _sk_PKCS7_RECIP_INFO_pop                 @1743
+    _sk_PKCS7_RECIP_INFO_pop_free            @1760
+    _sk_PKCS7_RECIP_INFO_push                @1766
+    _sk_PKCS7_RECIP_INFO_set                 @1763
+    _sk_PKCS7_RECIP_INFO_set_cmp_func        @1741
+    _sk_PKCS7_RECIP_INFO_shift               @1729
+    _sk_PKCS7_RECIP_INFO_sort                @1859
+    _sk_PKCS7_RECIP_INFO_unshift             @1767
+    _sk_PKCS7_RECIP_INFO_value               @1745
+    _sk_PKCS7_RECIP_INFO_zero                @1764
+    _sk_PKCS7_SIGNER_INFO_delete             @1740
+    _sk_PKCS7_SIGNER_INFO_delete_ptr         @1742
+    _sk_PKCS7_SIGNER_INFO_dup                @1770
+    _sk_PKCS7_SIGNER_INFO_find               @1726
+    _sk_PKCS7_SIGNER_INFO_free               @1762
+    _sk_PKCS7_SIGNER_INFO_insert             @1721
+    _sk_PKCS7_SIGNER_INFO_new                @1717
+    _sk_PKCS7_SIGNER_INFO_new_null           @1758
+    _sk_PKCS7_SIGNER_INFO_num                @1736
+    _sk_PKCS7_SIGNER_INFO_pop                @1732
+    _sk_PKCS7_SIGNER_INFO_pop_free           @1733
+    _sk_PKCS7_SIGNER_INFO_push               @1722
+    _sk_PKCS7_SIGNER_INFO_set                @1754
+    _sk_PKCS7_SIGNER_INFO_set_cmp_func       @1727
+    _sk_PKCS7_SIGNER_INFO_shift              @1731
+    _sk_PKCS7_SIGNER_INFO_sort               @1864
+    _sk_PKCS7_SIGNER_INFO_unshift            @1719
+    _sk_PKCS7_SIGNER_INFO_value              @1747
+    _sk_PKCS7_SIGNER_INFO_zero               @1718
+    _sk_POLICYINFO_delete                    @1469
+    _sk_POLICYINFO_delete_ptr                @1470
+    _sk_POLICYINFO_dup                       @1472
+    _sk_POLICYINFO_find                      @1468
+    _sk_POLICYINFO_free                      @1461
+    _sk_POLICYINFO_insert                    @1622
+    _sk_POLICYINFO_new                       @1459
+    _sk_POLICYINFO_new_null                  @1460
+    _sk_POLICYINFO_num                       @1462
+    _sk_POLICYINFO_pop                       @1467
+    _sk_POLICYINFO_pop_free                  @1473
+    _sk_POLICYINFO_push                      @1466
+    _sk_POLICYINFO_set                       @1464
+    _sk_POLICYINFO_set_cmp_func              @1471
+    _sk_POLICYINFO_shift                     @1474
+    _sk_POLICYINFO_sort                      @1853
+    _sk_POLICYINFO_unshift                   @1582
+    _sk_POLICYINFO_value                     @1463
+    _sk_POLICYINFO_zero                      @1465
+    _sk_POLICYQUALINFO_delete                @1451
+    _sk_POLICYQUALINFO_delete_ptr            @1452
+    _sk_POLICYQUALINFO_dup                   @1454
+    _sk_POLICYQUALINFO_find                  @1450
+    _sk_POLICYQUALINFO_free                  @1443
+    _sk_POLICYQUALINFO_insert                @1592
+    _sk_POLICYQUALINFO_new                   @1441
+    _sk_POLICYQUALINFO_new_null              @1442
+    _sk_POLICYQUALINFO_num                   @1444
+    _sk_POLICYQUALINFO_pop                   @1449
+    _sk_POLICYQUALINFO_pop_free              @1455
+    _sk_POLICYQUALINFO_push                  @1448
+    _sk_POLICYQUALINFO_set                   @1446
+    _sk_POLICYQUALINFO_set_cmp_func          @1453
+    _sk_POLICYQUALINFO_shift                 @1456
+    _sk_POLICYQUALINFO_sort                  @1866
+    _sk_POLICYQUALINFO_unshift               @1581
+    _sk_POLICYQUALINFO_value                 @1445
+    _sk_POLICYQUALINFO_zero                  @1447
+    _sk_SXNETID_delete                       @1433
+    _sk_SXNETID_delete_ptr                   @1434
+    _sk_SXNETID_dup                          @1436
+    _sk_SXNETID_find                         @1432
+    _sk_SXNETID_free                         @1425
+    _sk_SXNETID_insert                       @1605
+    _sk_SXNETID_new                          @1423
+    _sk_SXNETID_new_null                     @1424
+    _sk_SXNETID_num                          @1426
+    _sk_SXNETID_pop                          @1431
+    _sk_SXNETID_pop_free                     @1437
+    _sk_SXNETID_push                         @1430
+    _sk_SXNETID_set                          @1428
+    _sk_SXNETID_set_cmp_func                 @1435
+    _sk_SXNETID_shift                        @1438
+    _sk_SXNETID_sort                         @1862
+    _sk_SXNETID_unshift                      @1616
+    _sk_SXNETID_value                        @1427
+    _sk_SXNETID_zero                         @1429
+    _sk_X509_ALGOR_delete                    @1701
+    _sk_X509_ALGOR_delete_ptr                @1703
+    _sk_X509_ALGOR_dup                       @1715
+    _sk_X509_ALGOR_find                      @1713
+    _sk_X509_ALGOR_free                      @1700
+    _sk_X509_ALGOR_insert                    @1690
+    _sk_X509_ALGOR_new                       @1677
+    _sk_X509_ALGOR_new_null                  @1695
+    _sk_X509_ALGOR_num                       @1686
+    _sk_X509_ALGOR_pop                       @1683
+    _sk_X509_ALGOR_pop_free                  @1716
+    _sk_X509_ALGOR_push                      @1711
+    _sk_X509_ALGOR_set                       @1705
+    _sk_X509_ALGOR_set_cmp_func              @1714
+    _sk_X509_ALGOR_shift                     @1708
+    _sk_X509_ALGOR_sort                      @1858
+    _sk_X509_ALGOR_unshift                   @1680
+    _sk_X509_ALGOR_value                     @1712
+    _sk_X509_ALGOR_zero                      @1709
+    _sk_X509_ATTRIBUTE_delete                @1391
+    _sk_X509_ATTRIBUTE_delete_ptr            @1392
+    _sk_X509_ATTRIBUTE_dup                   @1394
+    _sk_X509_ATTRIBUTE_find                  @1390
+    _sk_X509_ATTRIBUTE_free                  @1383
+    _sk_X509_ATTRIBUTE_insert                @1610
+    _sk_X509_ATTRIBUTE_new                   @1381
+    _sk_X509_ATTRIBUTE_new_null              @1382
+    _sk_X509_ATTRIBUTE_num                   @1384
+    _sk_X509_ATTRIBUTE_pop                   @1389
+    _sk_X509_ATTRIBUTE_pop_free              @1395
+    _sk_X509_ATTRIBUTE_push                  @1388
+    _sk_X509_ATTRIBUTE_set                   @1386
+    _sk_X509_ATTRIBUTE_set_cmp_func          @1393
+    _sk_X509_ATTRIBUTE_shift                 @1396
+    _sk_X509_ATTRIBUTE_sort                  @1851
+    _sk_X509_ATTRIBUTE_unshift               @1585
+    _sk_X509_ATTRIBUTE_value                 @1385
+    _sk_X509_ATTRIBUTE_zero                  @1387
+    _sk_X509_CRL_delete                      @1699
+    _sk_X509_CRL_delete_ptr                  @1689
+    _sk_X509_CRL_dup                         @1691
+    _sk_X509_CRL_find                        @1698
+    _sk_X509_CRL_free                        @1681
+    _sk_X509_CRL_insert                      @1687
+    _sk_X509_CRL_new                         @1693
+    _sk_X509_CRL_new_null                    @1710
+    _sk_X509_CRL_num                         @1706
+    _sk_X509_CRL_pop                         @1704
+    _sk_X509_CRL_pop_free                    @1688
+    _sk_X509_CRL_push                        @1694
+    _sk_X509_CRL_set                         @1679
+    _sk_X509_CRL_set_cmp_func                @1678
+    _sk_X509_CRL_shift                       @1697
+    _sk_X509_CRL_sort                        @1867
+    _sk_X509_CRL_unshift                     @1684
+    _sk_X509_CRL_value                       @1707
+    _sk_X509_CRL_zero                        @1692
+    _sk_X509_EXTENSION_delete                @1642
+    _sk_X509_EXTENSION_delete_ptr            @1594
+    _sk_X509_EXTENSION_dup                   @1641
+    _sk_X509_EXTENSION_find                  @1554
+    _sk_X509_EXTENSION_free                  @1614
+    _sk_X509_EXTENSION_insert                @1618
+    _sk_X509_EXTENSION_new                   @1551
+    _sk_X509_EXTENSION_new_null              @1565
+    _sk_X509_EXTENSION_num                   @1579
+    _sk_X509_EXTENSION_pop                   @1576
+    _sk_X509_EXTENSION_pop_free              @1601
+    _sk_X509_EXTENSION_push                  @1644
+    _sk_X509_EXTENSION_set                   @1613
+    _sk_X509_EXTENSION_set_cmp_func          @1557
+    _sk_X509_EXTENSION_shift                 @1643
+    _sk_X509_EXTENSION_sort                  @1861
+    _sk_X509_EXTENSION_unshift               @1600
+    _sk_X509_EXTENSION_value                 @1572
+    _sk_X509_EXTENSION_zero                  @1638
+    _sk_X509_INFO_delete                     @1608
+    _sk_X509_INFO_delete_ptr                 @1568
+    _sk_X509_INFO_dup                        @1640
+    _sk_X509_INFO_find                       @1621
+    _sk_X509_INFO_free                       @1588
+    _sk_X509_INFO_insert                     @1590
+    _sk_X509_INFO_new                        @1550
+    _sk_X509_INFO_new_null                   @1619
+    _sk_X509_INFO_num                        @1578
+    _sk_X509_INFO_pop                        @1575
+    _sk_X509_INFO_pop_free                   @1580
+    _sk_X509_INFO_push                       @1617
+    _sk_X509_INFO_set                        @1612
+    _sk_X509_INFO_set_cmp_func               @1609
+    _sk_X509_INFO_shift                      @1639
+    _sk_X509_INFO_sort                       @1852
+    _sk_X509_INFO_unshift                    @1595
+    _sk_X509_INFO_value                      @1566
+    _sk_X509_INFO_zero                       @1611
+    _sk_X509_LOOKUP_delete                   @1751
+    _sk_X509_LOOKUP_delete_ptr               @1771
+    _sk_X509_LOOKUP_dup                      @1735
+    _sk_X509_LOOKUP_find                     @1737
+    _sk_X509_LOOKUP_free                     @1769
+    _sk_X509_LOOKUP_insert                   @1744
+    _sk_X509_LOOKUP_new                      @1739
+    _sk_X509_LOOKUP_new_null                 @1725
+    _sk_X509_LOOKUP_num                      @1750
+    _sk_X509_LOOKUP_pop                      @1749
+    _sk_X509_LOOKUP_pop_free                 @1755
+    _sk_X509_LOOKUP_push                     @1734
+    _sk_X509_LOOKUP_set                      @1772
+    _sk_X509_LOOKUP_set_cmp_func             @1768
+    _sk_X509_LOOKUP_shift                    @1756
+    _sk_X509_LOOKUP_sort                     @1865
+    _sk_X509_LOOKUP_unshift                  @1757
+    _sk_X509_LOOKUP_value                    @1765
+    _sk_X509_LOOKUP_zero                     @1728
+    _sk_X509_NAME_ENTRY_delete               @1559
+    _sk_X509_NAME_ENTRY_delete_ptr           @1636
+    _sk_X509_NAME_ENTRY_dup                  @1561
+    _sk_X509_NAME_ENTRY_find                 @1645
+    _sk_X509_NAME_ENTRY_free                 @1604
+    _sk_X509_NAME_ENTRY_insert               @1627
+    _sk_X509_NAME_ENTRY_new                  @1569
+    _sk_X509_NAME_ENTRY_new_null             @1583
+    _sk_X509_NAME_ENTRY_num                  @1586
+    _sk_X509_NAME_ENTRY_pop                  @1584
+    _sk_X509_NAME_ENTRY_pop_free             @1632
+    _sk_X509_NAME_ENTRY_push                 @1637
+    _sk_X509_NAME_ENTRY_set                  @1625
+    _sk_X509_NAME_ENTRY_set_cmp_func         @1602
+    _sk_X509_NAME_ENTRY_shift                @1577
+    _sk_X509_NAME_ENTRY_sort                 @1860
+    _sk_X509_NAME_ENTRY_unshift              @1552
+    _sk_X509_NAME_ENTRY_value                @1591
+    _sk_X509_NAME_ENTRY_zero                 @1634
+    _sk_X509_NAME_delete                     @1357
+    _sk_X509_NAME_delete_ptr                 @1358
+    _sk_X509_NAME_dup                        @1360
+    _sk_X509_NAME_find                       @1356
+    _sk_X509_NAME_free                       @1349
+    _sk_X509_NAME_insert                     @1606
+    _sk_X509_NAME_new                        @1347
+    _sk_X509_NAME_new_null                   @1348
+    _sk_X509_NAME_num                        @1350
+    _sk_X509_NAME_pop                        @1355
+    _sk_X509_NAME_pop_free                   @1361
+    _sk_X509_NAME_push                       @1354
+    _sk_X509_NAME_set                        @1352
+    _sk_X509_NAME_set_cmp_func               @1359
+    _sk_X509_NAME_shift                      @1362
+    _sk_X509_NAME_sort                       @1856
+    _sk_X509_NAME_unshift                    @1563
+    _sk_X509_NAME_value                      @1351
+    _sk_X509_NAME_zero                       @1353
+    _sk_X509_PURPOSE_delete                  @1943
+    _sk_X509_PURPOSE_delete_ptr              @2079
+    _sk_X509_PURPOSE_dup                     @2103
+    _sk_X509_PURPOSE_find                    @1953
+    _sk_X509_PURPOSE_free                    @2102
+    _sk_X509_PURPOSE_insert                  @2125
+    _sk_X509_PURPOSE_new                     @2124
+    _sk_X509_PURPOSE_new_null                @1983
+    _sk_X509_PURPOSE_num                     @1944
+    _sk_X509_PURPOSE_pop                     @1940
+    _sk_X509_PURPOSE_pop_free                @2100
+    _sk_X509_PURPOSE_push                    @1942
+    _sk_X509_PURPOSE_set                     @2035
+    _sk_X509_PURPOSE_set_cmp_func            @1993
+    _sk_X509_PURPOSE_shift                   @2122
+    _sk_X509_PURPOSE_sort                    @2037
+    _sk_X509_PURPOSE_unshift                 @2031
+    _sk_X509_PURPOSE_value                   @1929
+    _sk_X509_PURPOSE_zero                    @1930
+    _sk_X509_REVOKED_delete                  @1673
+    _sk_X509_REVOKED_delete_ptr              @1663
+    _sk_X509_REVOKED_dup                     @1658
+    _sk_X509_REVOKED_find                    @1672
+    _sk_X509_REVOKED_free                    @1659
+    _sk_X509_REVOKED_insert                  @1665
+    _sk_X509_REVOKED_new                     @1660
+    _sk_X509_REVOKED_new_null                @1675
+    _sk_X509_REVOKED_num                     @1669
+    _sk_X509_REVOKED_pop                     @1667
+    _sk_X509_REVOKED_pop_free                @1664
+    _sk_X509_REVOKED_push                    @1670
+    _sk_X509_REVOKED_set                     @1676
+    _sk_X509_REVOKED_set_cmp_func            @1656
+    _sk_X509_REVOKED_shift                   @1662
+    _sk_X509_REVOKED_sort                    @1850
+    _sk_X509_REVOKED_unshift                 @1657
+    _sk_X509_REVOKED_value                   @1668
+    _sk_X509_REVOKED_zero                    @1666
+    _sk_X509_TRUST_delete                    @2139
+    _sk_X509_TRUST_delete_ptr                @2099
+    _sk_X509_TRUST_dup                       @2073
+    _sk_X509_TRUST_find                      @2000
+    _sk_X509_TRUST_free                      @1920
+    _sk_X509_TRUST_insert                    @2076
+    _sk_X509_TRUST_new                       @2089
+    _sk_X509_TRUST_new_null                  @2084
+    _sk_X509_TRUST_num                       @1922
+    _sk_X509_TRUST_pop                       @1913
+    _sk_X509_TRUST_pop_free                  @1975
+    _sk_X509_TRUST_push                      @1991
+    _sk_X509_TRUST_set                       @2010
+    _sk_X509_TRUST_set_cmp_func              @1919
+    _sk_X509_TRUST_shift                     @2005
+    _sk_X509_TRUST_sort                      @2087
+    _sk_X509_TRUST_unshift                   @2059
+    _sk_X509_TRUST_value                     @2043
+    _sk_X509_TRUST_zero                      @1978
+    _sk_X509_delete                          @1373
+    _sk_X509_delete_ptr                      @1374
+    _sk_X509_dup                             @1376
+    _sk_X509_find                            @1372
+    _sk_X509_free                            @1365
+    _sk_X509_insert                          @1607
+    _sk_X509_new                             @1363
+    _sk_X509_new_null                        @1364
+    _sk_X509_num                             @1366
+    _sk_X509_pop                             @1371
+    _sk_X509_pop_free                        @1377
+    _sk_X509_push                            @1370
+    _sk_X509_set                             @1368
+    _sk_X509_set_cmp_func                    @1375
+    _sk_X509_shift                           @1378
+    _sk_X509_sort                            @1855
+    _sk_X509_unshift                         @1562
+    _sk_X509_value                           @1367
+    _sk_X509_zero                            @1369
+    _sk_delete                               @901
+    _sk_delete_ptr                           @902
+    _sk_dup                                  @903
+    _sk_find                                 @904
+    _sk_free                                 @905
+    _sk_insert                               @906
+    _sk_new                                  @907
+    _sk_num                                  @1654
+    _sk_pop                                  @908
+    _sk_pop_free                             @909
+    _sk_push                                 @910
+    _sk_set                                  @1655
+    _sk_set_cmp_func                         @911
+    _sk_shift                                @912
+    _sk_sort                                 @1671
+    _sk_unshift                              @913
+    _sk_value                                @1653
+    _sk_zero                                 @914
+    _string_to_hex                           @1224
+    _uni2asc                                 @1283
+    _v2i_GENERAL_NAME                        @1231
+    _v2i_GENERAL_NAMES                       @1236
+
Index: opensa/openssl/ms/libeay32.def
diff -u opensa/openssl/ms/libeay32.def:1.1 opensa/openssl/ms/libeay32.def:1.2
--- opensa/openssl/ms/libeay32.def:1.1  Tue Jan 25 23:16:42 2000
+++ opensa/openssl/ms/libeay32.def      Thu Mar  2 21:12:04 2000
@@ -1,1782 +1,2157 @@
-;
-; Definition file for the DLL version of the LIBEAY32 library from OpenSSL
-;
-
-LIBRARY         LIBEAY32
-
-DESCRIPTION     'OpenSSL LIBEAY32 - http://www.openssl.org/'
-
-EXPORTS
-    SSLeay                                  @1
-    SSLeay_add_all_algorithms               @508
-    SSLeay_add_all_ciphers                  @509
-    SSLeay_add_all_digests                  @510
-    SSLeay_version                          @2
-    ASN1_BIT_STRING_asn1_meth               @3
-    ASN1_BIT_STRING_get_bit                 @1060
-    ASN1_BIT_STRING_set_bit                 @1061
-    ASN1_ENUMERATED_get                     @1206
-    ASN1_ENUMERATED_set                     @1205
-    ASN1_ENUMERATED_to_BN                   @1208
-    ASN1_GENERALIZEDTIME_check              @1157
-    ASN1_GENERALIZEDTIME_print              @1158
-    ASN1_GENERALIZEDTIME_set                @1159
-    ASN1_GENERALIZEDTIME_set_string         @1160
-    ASN1_HEADER_free                        @4
-    ASN1_HEADER_new                         @5
-    ASN1_IA5STRING_asn1_meth                @6
-    ASN1_INTEGER_get                        @7
-    ASN1_INTEGER_set                        @8
-    ASN1_INTEGER_to_BN                      @9
-    ASN1_OBJECT_create                      @10
-    ASN1_OBJECT_free                        @11
-    ASN1_OBJECT_new                         @12
-    ASN1_PRINTABLE_type                     @13
-    ASN1_STRING_cmp                         @14
-    ASN1_STRING_dup                         @15
-    ASN1_STRING_free                        @16
-    ASN1_STRING_new                         @17
-    ASN1_STRING_print                       @18
-    ASN1_STRING_set                         @19
-    ASN1_STRING_type_new                    @20
-    ASN1_TIME_print                         @1161
-    ASN1_TIME_set                           @1253
-    ASN1_TYPE_free                          @21
-    ASN1_TYPE_get                           @916
-    ASN1_TYPE_get_int_octetstring           @1076
-    ASN1_TYPE_get_octetstring               @1077
-    ASN1_TYPE_new                           @22
-    ASN1_TYPE_set                           @917
-    ASN1_TYPE_set_int_octetstring           @1078
-    ASN1_TYPE_set_octetstring               @1079
-    ASN1_UNIVERSALSTRING_to_string          @23
-    ASN1_UTCTIME_check                      @24
-    ASN1_UTCTIME_print                      @25
-    ASN1_UTCTIME_set                        @26
-    ASN1_UTCTIME_set_string                 @1080
-    ASN1_check_infinite_end                 @27
-    ASN1_d2i_bio                            @28
-    ASN1_d2i_fp                             @29
-    ASN1_digest                             @30
-    ASN1_dup                                @31
-    ASN1_get_object                         @32
-    ASN1_i2d_bio                            @33
-    ASN1_i2d_fp                             @34
-    ASN1_object_size                        @35
-    ASN1_pack_string                        @1261
-    ASN1_parse                              @36
-    ASN1_put_object                         @37
-    ASN1_seq_pack                           @1259
-    ASN1_seq_unpack                         @1258
-    ASN1_sign                               @38
-    ASN1_unpack_string                      @1260
-    ASN1_verify                             @39
-    AUTHORITY_KEYID_free                    @1257
-    AUTHORITY_KEYID_new                     @1256
-    BASIC_CONSTRAINTS_free                  @1162
-    BASIC_CONSTRAINTS_new                   @1163
-    BF_cbc_encrypt                          @40
-    BF_cfb64_encrypt                        @41
-    BF_decrypt                              @987
-    BF_ecb_encrypt                          @42
-    BF_encrypt                              @43
-    BF_ofb64_encrypt                        @44
-    BF_options                              @45
-    BF_set_key                              @46
-    BIO_accept                              @51
-    BIO_copy_next_retry                     @955
-    BIO_ctrl                                @52
-    BIO_ctrl_get_read_request               @1799
-    BIO_ctrl_get_write_guarantee            @1803
-    BIO_ctrl_pending                        @1800
-    BIO_ctrl_wpending                       @1801
-    BIO_debug_callback                      @54
-    BIO_dump                                @55
-    BIO_dup_chain                           @56
-    BIO_f_base64                            @57
-    BIO_f_buffer                            @58
-    BIO_f_cipher                            @59
-    BIO_f_md                                @60
-    BIO_f_nbio_test                         @915
-    BIO_f_null                              @61
-    BIO_f_reliable                          @1244
-    BIO_fd_non_fatal_error                  @63
-    BIO_fd_should_retry                     @64
-    BIO_find_type                           @65
-    BIO_free                                @66
-    BIO_free_all                            @67
-    BIO_get_accept_socket                   @69
-    BIO_get_ex_data                         @1062
-    BIO_get_ex_new_index                    @1063
-    BIO_get_host_ip                         @71
-    BIO_get_port                            @72
-    BIO_get_retry_BIO                       @73
-    BIO_get_retry_reason                    @74
-    BIO_gethostbyname                       @75
-    BIO_gets                                @76
-    BIO_ghbn_ctrl                           @1003
-    BIO_int_ctrl                            @53
-    BIO_new                                 @78
-    BIO_new_accept                          @79
-    BIO_new_bio_pair                        @1802
-    BIO_new_connect                         @80
-    BIO_new_fd                              @81
-    BIO_new_file                            @82
-    BIO_new_fp                              @83
-    BIO_new_socket                          @84
-    BIO_pop                                 @85
-    BIO_printf                              @86
-    BIO_ptr_ctrl                            @969
-    BIO_push                                @87
-    BIO_puts                                @88
-    BIO_read                                @89
-    BIO_s_accept                            @90
-    BIO_s_bio                               @1793
-    BIO_s_connect                           @91
-    BIO_s_fd                                @92
-    BIO_s_file                              @93
-    BIO_s_mem                               @95
-    BIO_s_null                              @96
-    BIO_s_socket                            @98
-    BIO_set                                 @100
-    BIO_set_cipher                          @101
-    BIO_set_ex_data                         @1064
-    BIO_set_tcp_ndelay                      @102
-    BIO_sock_cleanup                        @103
-    BIO_sock_error                          @104
-    BIO_sock_init                           @105
-    BIO_sock_non_fatal_error                @106
-    BIO_sock_should_retry                   @107
-    BIO_socket_ioctl                        @108
-    BIO_socket_nbio                         @1102
-    BIO_write                               @109
-    BN_BLINDING_convert                     @973
-    BN_BLINDING_free                        @981
-    BN_BLINDING_invert                      @974
-    BN_BLINDING_new                         @980
-    BN_BLINDING_update                      @975
-    BN_CTX_free                             @110
-    BN_CTX_init                             @1135
-    BN_CTX_new                              @111
-    BN_MONT_CTX_copy                        @1109
-    BN_MONT_CTX_free                        @112
-    BN_MONT_CTX_init                        @1136
-    BN_MONT_CTX_new                         @113
-    BN_MONT_CTX_set                         @114
-    BN_RECP_CTX_free                        @1130
-    BN_RECP_CTX_init                        @1128
-    BN_RECP_CTX_new                         @1129
-    BN_RECP_CTX_set                         @1131
-    BN_add                                  @115
-    BN_add_word                             @116
-    BN_bin2bn                               @118
-    BN_bn2bin                               @120
-    BN_bn2dec                               @1002
-    BN_bn2hex                               @119
-    BN_bn2mpi                               @1058
-    BN_clear                                @121
-    BN_clear_bit                            @122
-    BN_clear_free                           @123
-    BN_cmp                                  @124
-    BN_copy                                 @125
-    BN_dec2bn                               @1001
-    BN_div                                  @126
-    BN_div_recp                             @1134
-    BN_div_word                             @127
-    BN_dup                                  @128
-    BN_exp                                  @998
-    BN_free                                 @129
-    BN_from_montgomery                      @130
-    BN_gcd                                  @131
-    BN_generate_prime                       @132
-    BN_get_params                           @1249
-    BN_get_word                             @133
-    BN_hex2bn                               @117
-    BN_init                                 @1095
-    BN_is_bit_set                           @134
-    BN_is_prime                             @135
-    BN_lshift                               @136
-    BN_lshift1                              @137
-    BN_mask_bits                            @138
-    BN_mod                                  @139
-    BN_mod_exp                              @140
-    BN_mod_exp2_mont                        @1514
-    BN_mod_exp_mont                         @141
-    BN_mod_exp_recp                         @1133
-    BN_mod_exp_simple                       @143
-    BN_mod_inverse                          @144
-    BN_mod_mul                              @145
-    BN_mod_mul_montgomery                   @146
-    BN_mod_mul_reciprocal                   @1132
-    BN_mod_word                             @148
-    BN_mpi2bn                               @1059
-    BN_mul                                  @149
-    BN_mul_word                             @999
-    BN_new                                  @150
-    BN_num_bits                             @151
-    BN_num_bits_word                        @152
-    BN_options                              @153
-    BN_print                                @154
-    BN_print_fp                             @155
-    BN_rand                                 @156
-    BN_reciprocal                           @157
-    BN_rshift                               @158
-    BN_rshift1                              @159
-    BN_set_bit                              @160
-    BN_set_params                           @1248
-    BN_set_word                             @161
-    BN_sqr                                  @162
-    BN_sub                                  @163
-    BN_sub_word                             @1000
-    BN_to_ASN1_ENUMERATED                   @1207
-    BN_to_ASN1_INTEGER                      @164
-    BN_uadd                                 @708
-    BN_ucmp                                 @165
-    BN_usub                                 @709
-    BN_value_one                            @166
-    BUF_MEM_free                            @167
-    BUF_MEM_grow                            @168
-    BUF_MEM_new                             @169
-    BUF_strdup                              @170
-    CAST_cbc_encrypt                        @992
-    CAST_cfb64_encrypt                      @993
-    CAST_decrypt                            @990
-    CAST_ecb_encrypt                        @991
-    CAST_encrypt                            @989
-    CAST_ofb64_encrypt                      @994
-    CAST_set_key                            @988
-    CERTIFICATEPOLICIES_free                @1486
-    CERTIFICATEPOLICIES_new                 @1485
-    COMP_CTX_free                           @1097
-    COMP_CTX_new                            @1096
-    COMP_compress_block                     @1144
-    COMP_expand_block                       @1145
-    COMP_rle                                @1146
-    COMP_zlib                               @1147
-    CONF_free                               @171
-    CONF_get_number                         @172
-    CONF_get_section                        @173
-    CONF_get_string                         @174
-    CONF_load                               @175
-    CONF_load_bio                           @1805
-    CONF_load_fp                            @1806
-    CRL_DIST_POINTS_free                    @1539
-    CRL_DIST_POINTS_new                     @1538
-    CRYPTO_add_lock                         @176
-    CRYPTO_dbg_free                         @177
-    CRYPTO_dbg_malloc                       @178
-    CRYPTO_dbg_realloc                      @179
-    CRYPTO_dbg_remalloc                     @180
-    CRYPTO_dup_ex_data                      @1025
-    CRYPTO_free                             @181
-    CRYPTO_free_ex_data                     @1004
-    CRYPTO_free_locked                      @1513
-    CRYPTO_get_add_lock_callback            @182
-    CRYPTO_get_ex_data                      @1005
-    CRYPTO_get_ex_new_index                 @1041
-    CRYPTO_get_id_callback                  @183
-    CRYPTO_get_lock_name                    @184
-    CRYPTO_get_locked_mem_functions         @1511
-    CRYPTO_get_locking_callback             @185
-    CRYPTO_get_mem_functions                @186
-    CRYPTO_get_new_lockid                   @1026
-    CRYPTO_lock                             @187
-    CRYPTO_malloc                           @188
-    CRYPTO_malloc_locked                    @1512
-    CRYPTO_mem_ctrl                         @189
-    CRYPTO_mem_leaks                        @190
-    CRYPTO_mem_leaks_cb                     @191
-    CRYPTO_mem_leaks_fp                     @192
-    CRYPTO_new_ex_data                      @1027
-    CRYPTO_num_locks                        @1804
-    CRYPTO_realloc                          @193
-    CRYPTO_remalloc                         @194
-    CRYPTO_set_add_lock_callback            @195
-    CRYPTO_set_ex_data                      @1007
-    CRYPTO_set_id_callback                  @196
-    CRYPTO_set_locked_mem_functions         @1510
-    CRYPTO_set_locking_callback             @197
-    CRYPTO_set_mem_functions                @198
-    CRYPTO_thread_id                        @199
-    DH_check                                @200
-    DH_compute_key                          @201
-    DH_free                                 @202
-    DH_generate_key                         @203
-    DH_generate_parameters                  @204
-    DH_new                                  @205
-    DH_size                                 @206
-    DHparams_print                          @207
-    DHparams_print_fp                       @208
-    DIST_POINT_NAME_free                    @1547
-    DIST_POINT_NAME_new                     @1546
-    DIST_POINT_free                         @1544
-    DIST_POINT_new                          @1542
-    DSA_SIG_free                            @1334
-    DSA_SIG_new                             @1333
-    DSA_do_sign                             @1335
-    DSA_do_verify                           @1336
-    DSA_dup_DH                              @1871
-    DSA_free                                @209
-    DSA_generate_key                        @210
-    DSA_generate_parameters                 @211
-    DSA_is_prime                            @212
-    DSA_new                                 @213
-    DSA_print                               @214
-    DSA_print_fp                            @215
-    DSA_sign                                @216
-    DSA_sign_setup                          @217
-    DSA_size                                @218
-    DSA_verify                              @219
-    DSAparams_print                         @220
-    DSAparams_print_fp                      @221
-    ERR_add_error_data                      @1081
-    ERR_clear_error                         @222
-    ERR_error_string                        @223
-    ERR_free_strings                        @224
-    ERR_func_error_string                   @225
-    ERR_get_err_state_table                 @226
-    ERR_get_error                           @227
-    ERR_get_error_line                      @228
-    ERR_get_error_line_data                 @1515
-    ERR_get_next_error_library              @966
-    ERR_get_state                           @229
-    ERR_get_string_table                    @230
-    ERR_lib_error_string                    @231
-    ERR_load_ASN1_strings                   @232
-    ERR_load_BIO_strings                    @233
-    ERR_load_BN_strings                     @234
-    ERR_load_BUF_strings                    @235
-    ERR_load_CONF_strings                   @236
-    ERR_load_CRYPTO_strings                 @1009
-    ERR_load_DH_strings                     @237
-    ERR_load_DSA_strings                    @238
-    ERR_load_ERR_strings                    @239
-    ERR_load_EVP_strings                    @240
-    ERR_load_OBJ_strings                    @241
-    ERR_load_PEM_strings                    @242
-    ERR_load_PKCS12_strings                 @1300
-    ERR_load_PKCS7_strings                  @919
-    ERR_load_RSA_strings                    @244
-    ERR_load_X509V3_strings                 @1164
-    ERR_load_X509_strings                   @245
-    ERR_load_crypto_strings                 @246
-    ERR_load_strings                        @247
-    ERR_peek_error                          @248
-    ERR_peek_error_line                     @249
-    ERR_peek_error_line_data                @1516
-    ERR_print_errors                        @250
-    ERR_print_errors_fp                     @251
-    ERR_put_error                           @252
-    ERR_reason_error_string                 @253
-    ERR_remove_state                        @254
-    ERR_set_error_data                      @1082
-    EVP_BytesToKey                          @255
-    EVP_CIPHER_CTX_cleanup                  @256
-    EVP_CIPHER_CTX_init                     @961
-    EVP_CIPHER_asn1_to_param                @1083
-    EVP_CIPHER_get_asn1_iv                  @1085
-    EVP_CIPHER_param_to_asn1                @1084
-    EVP_CIPHER_set_asn1_iv                  @1086
-    EVP_CIPHER_type                         @1649
-    EVP_CipherFinal                         @257
-    EVP_CipherInit                          @258
-    EVP_CipherUpdate                        @259
-    EVP_DecodeBlock                         @260
-    EVP_DecodeFinal                         @261
-    EVP_DecodeInit                          @262
-    EVP_DecodeUpdate                        @263
-    EVP_DecryptFinal                        @264
-    EVP_DecryptInit                         @265
-    EVP_DecryptUpdate                       @266
-    EVP_DigestFinal                         @267
-    EVP_DigestInit                          @268
-    EVP_DigestUpdate                        @269
-    EVP_EncodeBlock                         @270
-    EVP_EncodeFinal                         @271
-    EVP_EncodeInit                          @272
-    EVP_EncodeUpdate                        @273
-    EVP_EncryptFinal                        @274
-    EVP_EncryptInit                         @275
-    EVP_EncryptUpdate                       @276
-    EVP_MD_CTX_copy                         @1202
-    EVP_OpenFinal                           @277
-    EVP_OpenInit                            @278
-    EVP_PBE_CipherInit                      @1650
-    EVP_PBE_alg_add                         @1322
-    EVP_PBE_cleanup                         @1324
-    EVP_PKCS82PKEY                          @1318
-    EVP_PKEY2PKCS8                          @1319
-    EVP_PKEY_assign                         @279
-    EVP_PKEY_bits                           @1010
-    EVP_PKEY_cmp_parameters                 @967
-    EVP_PKEY_copy_parameters                @280
-    EVP_PKEY_decrypt                        @1070
-    EVP_PKEY_encrypt                        @1071
-    EVP_PKEY_free                           @281
-    EVP_PKEY_missing_parameters             @282
-    EVP_PKEY_new                            @283
-    EVP_PKEY_save_parameters                @284
-    EVP_PKEY_size                           @285
-    EVP_PKEY_type                           @286
-    EVP_SealFinal                           @287
-    EVP_SealInit                            @288
-    EVP_SignFinal                           @289
-    EVP_VerifyFinal                         @290
-    EVP_add_cipher                          @292
-    EVP_add_digest                          @293
-    EVP_bf_cbc                              @294
-    EVP_bf_cfb                              @295
-    EVP_bf_ecb                              @296
-    EVP_bf_ofb                              @297
-    EVP_cast5_cbc                           @983
-    EVP_cast5_cfb                           @984
-    EVP_cast5_ecb                           @985
-    EVP_cast5_ofb                           @986
-    EVP_cleanup                             @298
-    EVP_des_cbc                             @299
-    EVP_des_cfb                             @300
-    EVP_des_ecb                             @301
-    EVP_des_ede                             @302
-    EVP_des_ede3                            @303
-    EVP_des_ede3_cbc                        @304
-    EVP_des_ede3_cfb                        @305
-    EVP_des_ede3_ofb                        @306
-    EVP_des_ede_cbc                         @307
-    EVP_des_ede_cfb                         @308
-    EVP_des_ede_ofb                         @309
-    EVP_des_ofb                             @310
-    EVP_desx_cbc                            @311
-    EVP_dss                                 @312
-    EVP_dss1                                @313
-    EVP_enc_null                            @314
-    EVP_get_cipherbyname                    @315
-    EVP_get_digestbyname                    @316
-    EVP_get_pw_prompt                       @317
-    EVP_idea_cbc                            @318
-    EVP_idea_cfb                            @319
-    EVP_idea_ecb                            @320
-    EVP_idea_ofb                            @321
-    EVP_md2                                 @322
-    EVP_md5                                 @323
-    EVP_md_null                             @324
-    EVP_mdc2                                @942
-    EVP_rc2_40_cbc                          @959
-    EVP_rc2_64_cbc                          @1103
-    EVP_rc2_cbc                             @325
-    EVP_rc2_cfb                             @326
-    EVP_rc2_ecb                             @327
-    EVP_rc2_ofb                             @328
-    EVP_rc4                                 @329
-    EVP_rc4_40                              @960
-    EVP_rc5_32_12_16_cbc                    @1087
-    EVP_rc5_32_12_16_cfb                    @1088
-    EVP_rc5_32_12_16_ecb                    @1089
-    EVP_rc5_32_12_16_ofb                    @1090
-    EVP_read_pw_string                      @330
-    EVP_ripemd160                           @1252
-    EVP_set_pw_prompt                       @331
-    EVP_sha                                 @332
-    EVP_sha1                                @333
-    GENERAL_NAMES_free                      @1216
-    GENERAL_NAMES_new                       @1215
-    GENERAL_NAME_free                       @1214
-    GENERAL_NAME_new                        @1213
-    HMAC                                    @962
-    HMAC_Final                              @965
-    HMAC_Init                               @963
-    HMAC_Update                             @964
-    HMAC_cleanup                            @968
-    MD2                                     @334
-    MD2_Final                               @335
-    MD2_Init                                @336
-    MD2_Update                              @337
-    MD2_options                             @338
-    MD5                                     @339
-    MD5_Final                               @340
-    MD5_Init                                @341
-    MD5_Transform                           @1011
-    MD5_Update                              @342
-    MDC2                                    @343
-    MDC2_Final                              @344
-    MDC2_Init                               @345
-    MDC2_Update                             @346
-    NETSCAPE_CERT_SEQUENCE_free             @1165
-    NETSCAPE_CERT_SEQUENCE_new              @1166
-    NETSCAPE_SPKAC_free                     @347
-    NETSCAPE_SPKAC_new                      @348
-    NETSCAPE_SPKI_free                      @349
-    NETSCAPE_SPKI_new                       @350
-    NETSCAPE_SPKI_sign                      @351
-    NETSCAPE_SPKI_verify                    @352
-    NOTICEREF_free                          @1503
-    NOTICEREF_new                           @1501
-    OBJ_NAME_add                            @1101
-    OBJ_NAME_cleanup                        @1104
-    OBJ_NAME_get                            @1105
-    OBJ_NAME_init                           @1106
-    OBJ_NAME_new_index                      @1107
-    OBJ_NAME_remove                         @1108
-    OBJ_add_object                          @353
-    OBJ_bsearch                             @354
-    OBJ_cleanup                             @355
-    OBJ_cmp                                 @356
-    OBJ_create                              @357
-    OBJ_create_objects                      @997
-    OBJ_dup                                 @358
-    OBJ_ln2nid                              @359
-    OBJ_new_nid                             @360
-    OBJ_nid2ln                              @361
-    OBJ_nid2obj                             @362
-    OBJ_nid2sn                              @363
-    OBJ_obj2nid                             @364
-    OBJ_obj2txt                             @1870
-    OBJ_sn2nid                              @365
-    OBJ_txt2nid                             @366
-    OBJ_txt2obj                             @1167
-    PBE2PARAM_free                          @1404
-    PBE2PARAM_new                           @1402
-    PBEPARAM_free                           @1313
-    PBEPARAM_new                            @1311
-    PBKDF2PARAM_free                        @1400
-    PBKDF2PARAM_new                         @1398
-    PEM_ASN1_read                           @367
-    PEM_ASN1_read_bio                       @368
-    PEM_ASN1_write                          @369
-    PEM_ASN1_write_bio                      @370
-    PEM_SealFinal                           @371
-    PEM_SealInit                            @372
-    PEM_SealUpdate                          @373
-    PEM_SignFinal                           @374
-    PEM_SignInit                            @375
-    PEM_SignUpdate                          @376
-    PEM_X509_INFO_read                      @377
-    PEM_X509_INFO_read_bio                  @378
-    PEM_X509_INFO_write_bio                 @379
-    PEM_dek_info                            @380
-    PEM_do_header                           @381
-    PEM_get_EVP_CIPHER_INFO                 @382
-    PEM_proc_type                           @383
-    PEM_read                                @384
-    PEM_read_DHparams                       @385
-    PEM_read_DSAPrivateKey                  @386
-    PEM_read_DSAparams                      @387
-    PEM_read_NETSCAPE_CERT_SEQUENCE         @1168
-    PEM_read_PKCS7                          @388
-    PEM_read_PKCS8                          @1782
-    PEM_read_PKCS8_PRIV_KEY_INFO            @1786
-    PEM_read_PrivateKey                     @389
-    PEM_read_RSAPrivateKey                  @390
-    PEM_read_RSAPublicKey                   @947
-    PEM_read_X509                           @391
-    PEM_read_X509_CRL                       @392
-    PEM_read_X509_REQ                       @393
-    PEM_read_bio                            @394
-    PEM_read_bio_DHparams                   @395
-    PEM_read_bio_DSAPrivateKey              @396
-    PEM_read_bio_DSAparams                  @397
-    PEM_read_bio_NETSCAPE_CERT_SEQUENCE     @1169
-    PEM_read_bio_PKCS7                      @398
-    PEM_read_bio_PKCS8                      @1787
-    PEM_read_bio_PKCS8_PRIV_KEY_INFO        @1778
-    PEM_read_bio_PrivateKey                 @399
-    PEM_read_bio_RSAPrivateKey              @400
-    PEM_read_bio_RSAPublicKey               @943
-    PEM_read_bio_X509                       @401
-    PEM_read_bio_X509_CRL                   @402
-    PEM_read_bio_X509_REQ                   @403
-    PEM_write                               @404
-    PEM_write_DHparams                      @405
-    PEM_write_DSAPrivateKey                 @406
-    PEM_write_DSAparams                     @407
-    PEM_write_NETSCAPE_CERT_SEQUENCE        @1170
-    PEM_write_PKCS7                         @408
-    PEM_write_PKCS8                         @1785
-    PEM_write_PKCS8PrivateKey               @1798
-    PEM_write_PKCS8_PRIV_KEY_INFO           @1788
-    PEM_write_PrivateKey                    @409
-    PEM_write_RSAPrivateKey                 @410
-    PEM_write_RSAPublicKey                  @949
-    PEM_write_X509                          @411
-    PEM_write_X509_CRL                      @412
-    PEM_write_X509_REQ                      @413
-    PEM_write_bio                           @414
-    PEM_write_bio_DHparams                  @415
-    PEM_write_bio_DSAPrivateKey             @416
-    PEM_write_bio_DSAparams                 @417
-    PEM_write_bio_NETSCAPE_CERT_SEQUENCE    @1171
-    PEM_write_bio_PKCS7                     @418
-    PEM_write_bio_PKCS8                     @1776
-    PEM_write_bio_PKCS8PrivateKey           @1797
-    PEM_write_bio_PKCS8_PRIV_KEY_INFO       @1781
-    PEM_write_bio_PrivateKey                @419
-    PEM_write_bio_RSAPrivateKey             @420
-    PEM_write_bio_RSAPublicKey              @944
-    PEM_write_bio_X509                      @421
-    PEM_write_bio_X509_CRL                  @422
-    PEM_write_bio_X509_REQ                  @423
-    PKCS12_BAGS_free                        @1287
-    PKCS12_BAGS_new                         @1285
-    PKCS12_MAC_DATA_free                    @1295
-    PKCS12_MAC_DATA_new                     @1293
-    PKCS12_MAKE_KEYBAG                      @1263
-    PKCS12_MAKE_SHKEYBAG                    @1265
-    PKCS12_PBE_add                          @1301
-    PKCS12_PBE_keyivgen                     @1517
-    PKCS12_SAFEBAG_free                     @1299
-    PKCS12_SAFEBAG_new                      @1297
-    PKCS12_add_friendlyname_asc             @1269
-    PKCS12_add_friendlyname_uni             @1270
-    PKCS12_add_localkeyid                   @1268
-    PKCS12_create                           @1305
-    PKCS12_decrypt_d2i                      @1273
-    PKCS12_free                             @1291
-    PKCS12_gen_mac                          @1278
-    PKCS12_get_attr_gen                     @1303
-    PKCS12_get_friendlyname                 @1271
-    PKCS12_i2d_encrypt                      @1274
-    PKCS12_init                             @1275
-    PKCS12_key_gen_asc                      @1276
-    PKCS12_key_gen_uni                      @1277
-    PKCS12_new                              @1290
-    PKCS12_pack_p7data                      @1266
-    PKCS12_pack_p7encdata                   @1267
-    PKCS12_pack_safebag                     @1262
-    PKCS12_parse                            @1304
-    PKCS12_pbe_crypt                        @1272
-    PKCS12_set_mac                          @1280
-    PKCS12_setup_mac                        @1281
-    PKCS12_verify_mac                       @1279
-    PKCS5_PBE_add                           @1775
-    PKCS5_PBE_keyivgen                      @1789
-    PKCS5_PBKDF2_HMAC_SHA1                  @1795
-    PKCS5_pbe2_set                          @1794
-    PKCS5_pbe_set                           @1323
-    PKCS5_v2_PBE_keyivgen                   @1796
-    PKCS7_DIGEST_free                       @424
-    PKCS7_DIGEST_new                        @425
-    PKCS7_ENCRYPT_free                      @426
-    PKCS7_ENCRYPT_new                       @427
-    PKCS7_ENC_CONTENT_free                  @428
-    PKCS7_ENC_CONTENT_new                   @429
-    PKCS7_ENVELOPE_free                     @430
-    PKCS7_ENVELOPE_new                      @431
-    PKCS7_ISSUER_AND_SERIAL_digest          @432
-    PKCS7_ISSUER_AND_SERIAL_free            @433
-    PKCS7_ISSUER_AND_SERIAL_new             @434
-    PKCS7_RECIP_INFO_free                   @435
-    PKCS7_RECIP_INFO_new                    @436
-    PKCS7_RECIP_INFO_set                    @1072
-    PKCS7_SIGNED_free                       @437
-    PKCS7_SIGNED_new                        @438
-    PKCS7_SIGNER_INFO_free                  @439
-    PKCS7_SIGNER_INFO_new                   @440
-    PKCS7_SIGNER_INFO_set                   @930
-    PKCS7_SIGN_ENVELOPE_free                @441
-    PKCS7_SIGN_ENVELOPE_new                 @442
-    PKCS7_add_attribute                     @1138
-    PKCS7_add_certificate                   @932
-    PKCS7_add_crl                           @933
-    PKCS7_add_recipient                     @1073
-    PKCS7_add_recipient_info                @1074
-    PKCS7_add_signature                     @938
-    PKCS7_add_signed_attribute              @1139
-    PKCS7_add_signer                        @931
-    PKCS7_cert_from_signer_info             @939
-    PKCS7_content_free                      @918
-    PKCS7_content_new                       @934
-    PKCS7_ctrl                              @927
-    PKCS7_dataDecode                        @1246
-    PKCS7_dataFinal                         @1245
-    PKCS7_dataInit                          @937
-    PKCS7_dataVerify                        @936
-    PKCS7_digest_from_attributes            @1140
-    PKCS7_dup                               @443
-    PKCS7_free                              @444
-    PKCS7_get_attribute                     @1141
-    PKCS7_get_issuer_and_serial             @1142
-    PKCS7_get_signed_attribute              @1143
-    PKCS7_get_signer_info                   @940
-    PKCS7_new                               @445
-    PKCS7_set_attributes                    @1153
-    PKCS7_set_cipher                        @1075
-    PKCS7_set_content                       @929
-    PKCS7_set_signed_attributes             @1154
-    PKCS7_set_type                          @928
-    PKCS7_signatureVerify                   @1845
-    PKCS8_PRIV_KEY_INFO_free                @1317
-    PKCS8_PRIV_KEY_INFO_new                 @1315
-    PKCS8_add_keyusage                      @1302
-    PKCS8_encrypt                           @1264
-    PKCS8_set_broken                        @1320
-    PKEY_USAGE_PERIOD_free                  @1235
-    PKEY_USAGE_PERIOD_new                   @1234
-    POLICYINFO_free                         @1491
-    POLICYINFO_new                          @1489
-    POLICYQUALINFO_free                     @1495
-    POLICYQUALINFO_new                      @1493
-    RAND_SSLeay                             @1113
-    RAND_bytes                              @464
-    RAND_cleanup                            @465
-    RAND_file_name                          @466
-    RAND_get_rand_method                    @1137
-    RAND_load_file                          @467
-    RAND_screen                             @468
-    RAND_seed                               @469
-    RAND_set_rand_method                    @1114
-    RAND_write_file                         @470
-    RC2_cbc_encrypt                         @471
-    RC2_cfb64_encrypt                       @472
-    RC2_decrypt                             @995
-    RC2_ecb_encrypt                         @473
-    RC2_encrypt                             @474
-    RC2_ofb64_encrypt                       @475
-    RC2_set_key                             @476
-    RC4                                     @477
-    RC4_options                             @478
-    RC4_set_key                             @479
-    RC5_32_cbc_encrypt                      @1051
-    RC5_32_cfb64_encrypt                    @1052
-    RC5_32_decrypt                          @1050
-    RC5_32_ecb_encrypt                      @1048
-    RC5_32_encrypt                          @1049
-    RC5_32_ofb64_encrypt                    @1053
-    RC5_32_set_key                          @1047
-    RIPEMD160                               @1045
-    RIPEMD160_Final                         @1044
-    RIPEMD160_Init                          @1042
-    RIPEMD160_Transform                     @1046
-    RIPEMD160_Update                        @1043
-    RSAPrivateKey_asn1_meth                 @480
-    RSAPrivateKey_dup                       @481
-    RSAPublicKey_dup                        @482
-    RSA_PKCS1_SSLeay                        @483
-    RSA_blinding_off                        @978
-    RSA_blinding_on                         @977
-    RSA_check_key                           @1869
-    RSA_flags                               @956
-    RSA_free                                @484
-    RSA_generate_key                        @485
-    RSA_get_default_method                  @1848
-    RSA_get_ex_data                         @1029
-    RSA_get_ex_new_index                    @1030
-    RSA_get_method                          @1847
-    RSA_memory_lock                         @1115
-    RSA_new                                 @486
-    RSA_new_method                          @487
-    RSA_padding_add_PKCS1_OAEP              @1226
-    RSA_padding_add_PKCS1_type_1            @1031
-    RSA_padding_add_PKCS1_type_2            @1032
-    RSA_padding_add_SSLv23                  @1033
-    RSA_padding_add_none                    @1034
-    RSA_padding_check_PKCS1_OAEP            @1227
-    RSA_padding_check_PKCS1_type_1          @1035
-    RSA_padding_check_PKCS1_type_2          @1036
-    RSA_padding_check_SSLv23                @1037
-    RSA_padding_check_none                  @1038
-    RSA_print                               @488
-    RSA_print_fp                            @489
-    RSA_private_decrypt                     @490
-    RSA_private_encrypt                     @491
-    RSA_public_decrypt                      @492
-    RSA_public_encrypt                      @493
-    RSA_set_default_method                  @494
-    RSA_set_ex_data                         @1028
-    RSA_set_method                          @1846
-    RSA_sign                                @495
-    RSA_sign_ASN1_OCTET_STRING              @496
-    RSA_size                                @497
-    RSA_verify                              @498
-    RSA_verify_ASN1_OCTET_STRING            @499
-    SHA                                     @500
-    SHA1                                    @501
-    SHA1_Final                              @502
-    SHA1_Init                               @503
-    SHA1_Transform                          @1012
-    SHA1_Update                             @504
-    SHA_Final                               @505
-    SHA_Init                                @506
-    SHA_Transform                           @1013
-    SHA_Update                              @507
-    SXNETID_free                            @1332
-    SXNETID_new                             @1331
-    SXNET_add_id_INTEGER                    @1479
-    SXNET_add_id_asc                        @1477
-    SXNET_add_id_ulong                      @1478
-    SXNET_free                              @1328
-    SXNET_get_id_INTEGER                    @1482
-    SXNET_get_id_asc                        @1480
-    SXNET_get_id_ulong                      @1481
-    SXNET_new                               @1327
-    TXT_DB_create_index                     @511
-    TXT_DB_free                             @512
-    TXT_DB_get_by_index                     @513
-    TXT_DB_insert                           @514
-    TXT_DB_read                             @515
-    TXT_DB_write                            @516
-    USERNOTICE_free                         @1499
-    USERNOTICE_new                          @1497
-    X509V3_EXT_CRL_add_conf                 @1247
-    X509V3_EXT_add                          @1172
-    X509V3_EXT_add_alias                    @1173
-    X509V3_EXT_add_conf                     @1174
-    X509V3_EXT_add_list                     @1648
-    X509V3_EXT_cleanup                      @1175
-    X509V3_EXT_conf                         @1176
-    X509V3_EXT_conf_nid                     @1177
-    X509V3_EXT_d2i                          @1238
-    X509V3_EXT_get                          @1178
-    X509V3_EXT_get_nid                      @1179
-    X509V3_EXT_i2d                          @1646
-    X509V3_EXT_print                        @1180
-    X509V3_EXT_print_fp                     @1181
-    X509V3_EXT_val_prn                      @1647
-    X509V3_add_standard_extensions          @1182
-    X509V3_add_value                        @1183
-    X509V3_add_value_bool                   @1184
-    X509V3_add_value_bool_nf                @1651
-    X509V3_add_value_int                    @1185
-    X509V3_add_value_uchar                  @1549
-    X509V3_conf_free                        @1186
-    X509V3_get_section                      @1505
-    X509V3_get_string                       @1504
-    X509V3_get_value_bool                   @1187
-    X509V3_get_value_int                    @1188
-    X509V3_parse_list                       @1189
-    X509V3_section_free                     @1507
-    X509V3_set_conf_lhash                   @1483
-    X509V3_set_ctx                          @1508
-    X509V3_string_free                      @1506
-    X509_ALGOR_dup                          @1518
-    X509_ALGOR_free                         @517
-    X509_ALGOR_new                          @518
-    X509_ATTRIBUTE_create                   @1155
-    X509_ATTRIBUTE_dup                      @1156
-    X509_ATTRIBUTE_free                     @519
-    X509_ATTRIBUTE_new                      @520
-    X509_CINF_free                          @521
-    X509_CINF_new                           @522
-    X509_CRL_INFO_free                      @523
-    X509_CRL_INFO_new                       @524
-    X509_CRL_add_ext                        @525
-    X509_CRL_cmp                            @526
-    X509_CRL_delete_ext                     @527
-    X509_CRL_dup                            @528
-    X509_CRL_free                           @529
-    X509_CRL_get_ext                        @530
-    X509_CRL_get_ext_by_NID                 @531
-    X509_CRL_get_ext_by_OBJ                 @532
-    X509_CRL_get_ext_by_critical            @533
-    X509_CRL_get_ext_count                  @534
-    X509_CRL_new                            @535
-    X509_CRL_print                          @1229
-    X509_CRL_print_fp                       @1228
-    X509_CRL_sign                           @536
-    X509_CRL_verify                         @537
-    X509_EXTENSION_create_by_NID            @538
-    X509_EXTENSION_create_by_OBJ            @539
-    X509_EXTENSION_dup                      @540
-    X509_EXTENSION_free                     @541
-    X509_EXTENSION_get_critical             @542
-    X509_EXTENSION_get_data                 @543
-    X509_EXTENSION_get_object               @544
-    X509_EXTENSION_new                      @545
-    X509_EXTENSION_set_critical             @546
-    X509_EXTENSION_set_data                 @547
-    X509_EXTENSION_set_object               @548
-    X509_INFO_free                          @549
-    X509_INFO_new                           @550
-    X509_LOOKUP_by_alias                    @551
-    X509_LOOKUP_by_fingerprint              @552
-    X509_LOOKUP_by_issuer_serial            @553
-    X509_LOOKUP_by_subject                  @554
-    X509_LOOKUP_ctrl                        @555
-    X509_LOOKUP_file                        @556
-    X509_LOOKUP_free                        @557
-    X509_LOOKUP_hash_dir                    @558
-    X509_LOOKUP_init                        @559
-    X509_LOOKUP_new                         @560
-    X509_LOOKUP_shutdown                    @561
-    X509_NAME_ENTRY_create_by_NID           @562
-    X509_NAME_ENTRY_create_by_OBJ           @563
-    X509_NAME_ENTRY_dup                     @564
-    X509_NAME_ENTRY_free                    @565
-    X509_NAME_ENTRY_get_data                @566
-    X509_NAME_ENTRY_get_object              @567
-    X509_NAME_ENTRY_new                     @568
-    X509_NAME_ENTRY_set_data                @569
-    X509_NAME_ENTRY_set_object              @570
-    X509_NAME_add_entry                     @571
-    X509_NAME_cmp                           @572
-    X509_NAME_delete_entry                  @573
-    X509_NAME_digest                        @574
-    X509_NAME_dup                           @575
-    X509_NAME_entry_count                   @576
-    X509_NAME_free                          @577
-    X509_NAME_get_entry                     @578
-    X509_NAME_get_index_by_NID              @579
-    X509_NAME_get_index_by_OBJ              @580
-    X509_NAME_get_text_by_NID               @581
-    X509_NAME_get_text_by_OBJ               @582
-    X509_NAME_hash                          @583
-    X509_NAME_new                           @584
-    X509_NAME_oneline                       @585
-    X509_NAME_print                         @586
-    X509_NAME_set                           @587
-    X509_OBJECT_free_contents               @588
-    X509_OBJECT_retrieve_by_subject         @589
-    X509_OBJECT_up_ref_count                @590
-    X509_PKEY_free                          @591
-    X509_PKEY_new                           @592
-    X509_PUBKEY_free                        @593
-    X509_PUBKEY_get                         @594
-    X509_PUBKEY_new                         @595
-    X509_PUBKEY_set                         @596
-    X509_REQ_INFO_free                      @597
-    X509_REQ_INFO_new                       @598
-    X509_REQ_dup                            @599
-    X509_REQ_free                           @600
-    X509_REQ_get_pubkey                     @601
-    X509_REQ_new                            @602
-    X509_REQ_print                          @603
-    X509_REQ_print_fp                       @604
-    X509_REQ_set_pubkey                     @605
-    X509_REQ_set_subject_name               @606
-    X509_REQ_set_version                    @607
-    X509_REQ_sign                           @608
-    X509_REQ_to_X509                        @609
-    X509_REQ_verify                         @610
-    X509_REVOKED_add_ext                    @611
-    X509_REVOKED_delete_ext                 @612
-    X509_REVOKED_free                       @613
-    X509_REVOKED_get_ext                    @614
-    X509_REVOKED_get_ext_by_NID             @615
-    X509_REVOKED_get_ext_by_OBJ             @616
-    X509_REVOKED_get_ext_by_critical        @617
-    X509_REVOKED_get_ext_count              @618
-    X509_REVOKED_new                        @619
-    X509_SIG_free                           @620
-    X509_SIG_new                            @621
-    X509_STORE_CTX_cleanup                  @622
-    X509_STORE_CTX_get_chain                @1014
-    X509_STORE_CTX_get_current_cert         @1015
-    X509_STORE_CTX_get_error                @1016
-    X509_STORE_CTX_get_error_depth          @1017
-    X509_STORE_CTX_get_ex_data              @1018
-    X509_STORE_CTX_get_ex_new_index         @1100
-    X509_STORE_CTX_init                     @623
-    X509_STORE_CTX_set_cert                 @1020
-    X509_STORE_CTX_set_chain                @1021
-    X509_STORE_CTX_set_error                @1022
-    X509_STORE_CTX_set_ex_data              @1023
-    X509_STORE_add_cert                     @624
-    X509_STORE_add_crl                      @957
-    X509_STORE_add_lookup                   @625
-    X509_STORE_free                         @626
-    X509_STORE_get_by_subject               @627
-    X509_STORE_load_locations               @628
-    X509_STORE_new                          @629
-    X509_STORE_set_default_paths            @630
-    X509_VAL_free                           @631
-    X509_VAL_new                            @632
-    X509_add_ext                            @633
-    X509_asn1_meth                          @634
-    X509_certificate_type                   @635
-    X509_check_private_key                  @636
-    X509_cmp_current_time                   @637
-    X509_delete_ext                         @638
-    X509_digest                             @639
-    X509_dup                                @640
-    X509_find_by_issuer_and_serial          @920
-    X509_find_by_subject                    @921
-    X509_free                               @641
-    X509_get_default_cert_area              @642
-    X509_get_default_cert_dir               @643
-    X509_get_default_cert_dir_env           @644
-    X509_get_default_cert_file              @645
-    X509_get_default_cert_file_env          @646
-    X509_get_default_private_dir            @647
-    X509_get_ext                            @648
-    X509_get_ext_by_NID                     @649
-    X509_get_ext_by_OBJ                     @650
-    X509_get_ext_by_critical                @651
-    X509_get_ext_count                      @652
-    X509_get_issuer_name                    @653
-    X509_get_pubkey                         @654
-    X509_get_pubkey_parameters              @655
-    X509_get_serialNumber                   @656
-    X509_get_subject_name                   @657
-    X509_gmtime_adj                         @658
-    X509_issuer_and_serial_cmp              @659
-    X509_issuer_and_serial_hash             @660
-    X509_issuer_name_cmp                    @661
-    X509_issuer_name_hash                   @662
-    X509_load_cert_file                     @663
-    X509_load_crl_file                      @958
-    X509_new                                @664
-    X509_print                              @665
-    X509_print_fp                           @666
-    X509_set_issuer_name                    @667
-    X509_set_notAfter                       @668
-    X509_set_notBefore                      @669
-    X509_set_pubkey                         @670
-    X509_set_serialNumber                   @671
-    X509_set_subject_name                   @672
-    X509_set_version                        @673
-    X509_sign                               @674
-    X509_subject_name_cmp                   @675
-    X509_subject_name_hash                  @676
-    X509_to_X509_REQ                        @677
-    X509_verify                             @678
-    X509_verify_cert                        @679
-    X509_verify_cert_error_string           @680
-    X509v3_add_ext                          @681
-    X509v3_delete_ext                       @688
-    X509v3_get_ext                          @689
-    X509v3_get_ext_by_NID                   @690
-    X509v3_get_ext_by_OBJ                   @691
-    X509v3_get_ext_by_critical              @692
-    X509v3_get_ext_count                    @693
-    a2d_ASN1_OBJECT                         @699
-    a2i_ASN1_ENUMERATED                     @1210
-    a2i_ASN1_INTEGER                        @700
-    a2i_ASN1_STRING                         @701
-    asc2uni                                 @1282
-    asn1_Finish                             @702
-    asn1_GetSequence                        @703
-    asn1_add_error                          @1091
-    bn_add_words                            @1039
-    bn_div_words                            @704
-    bn_expand2                              @705
-    bn_mul_add_words                        @706
-    bn_mul_words                            @707
-    bn_sqr_words                            @710
-    bn_sub_words                            @1116
-    crypt                                   @711
-    d2i_ASN1_BIT_STRING                     @712
-    d2i_ASN1_BMPSTRING                      @1092
-    d2i_ASN1_BOOLEAN                        @713
-    d2i_ASN1_ENUMERATED                     @1204
-    d2i_ASN1_GENERALIZEDTIME                @1190
-    d2i_ASN1_HEADER                         @714
-    d2i_ASN1_IA5STRING                      @715
-    d2i_ASN1_INTEGER                        @716
-    d2i_ASN1_OBJECT                         @717
-    d2i_ASN1_OCTET_STRING                   @718
-    d2i_ASN1_PRINTABLE                      @719
-    d2i_ASN1_PRINTABLESTRING                @720
-    d2i_ASN1_SET                            @721
-    d2i_ASN1_SET_OF_ASN1_OBJECT             @1844
-    d2i_ASN1_SET_OF_ASN1_TYPE               @1589
-    d2i_ASN1_SET_OF_DIST_POINT              @1535
-    d2i_ASN1_SET_OF_GENERAL_NAME            @1421
-    d2i_ASN1_SET_OF_PKCS7_RECIP_INFO        @1753
-    d2i_ASN1_SET_OF_PKCS7_SIGNER_INFO       @1748
-    d2i_ASN1_SET_OF_POLICYINFO              @1475
-    d2i_ASN1_SET_OF_POLICYQUALINFO          @1457
-    d2i_ASN1_SET_OF_SXNETID                 @1439
-    d2i_ASN1_SET_OF_X509                    @1379
-    d2i_ASN1_SET_OF_X509_ALGOR              @1696
-    d2i_ASN1_SET_OF_X509_ATTRIBUTE          @1555
-    d2i_ASN1_SET_OF_X509_CRL                @1702
-    d2i_ASN1_SET_OF_X509_EXTENSION          @1567
-    d2i_ASN1_SET_OF_X509_NAME_ENTRY         @1574
-    d2i_ASN1_SET_OF_X509_REVOKED            @1674
-    d2i_ASN1_T61STRING                      @722
-    d2i_ASN1_TIME                           @1191
-    d2i_ASN1_TYPE                           @723
-    d2i_ASN1_UINTEGER                       @1652
-    d2i_ASN1_UTCTIME                        @724
-    d2i_ASN1_UTF8STRING                     @1342
-    d2i_ASN1_VISIBLESTRING                  @1340
-    d2i_ASN1_bytes                          @725
-    d2i_ASN1_type_bytes                     @726
-    d2i_AUTHORITY_KEYID                     @1255
-    d2i_BASIC_CONSTRAINTS                   @1192
-    d2i_CERTIFICATEPOLICIES                 @1487
-    d2i_CRL_DIST_POINTS                     @1540
-    d2i_DHparams                            @727
-    d2i_DIRECTORYSTRING                     @1344
-    d2i_DISPLAYTEXT                         @1346
-    d2i_DIST_POINT                          @1543
-    d2i_DIST_POINT_NAME                     @1548
-    d2i_DSAPrivateKey                       @728
-    d2i_DSAPrivateKey_bio                   @729
-    d2i_DSAPrivateKey_fp                    @730
-    d2i_DSAPublicKey                        @731
-    d2i_DSA_SIG                             @1337
-    d2i_DSAparams                           @732
-    d2i_GENERAL_NAME                        @1212
-    d2i_GENERAL_NAMES                       @1217
-    d2i_NETSCAPE_CERT_SEQUENCE              @1193
-    d2i_NETSCAPE_SPKAC                      @733
-    d2i_NETSCAPE_SPKI                       @734
-    d2i_NOTICEREF                           @1502
-    d2i_Netscape_RSA                        @735
-    d2i_Netscape_RSA_2                      @1040
-    d2i_PBE2PARAM                           @1403
-    d2i_PBEPARAM                            @1312
-    d2i_PBKDF2PARAM                         @1399
-    d2i_PKCS12                              @1289
-    d2i_PKCS12_BAGS                         @1286
-    d2i_PKCS12_MAC_DATA                     @1294
-    d2i_PKCS12_SAFEBAG                      @1298
-    d2i_PKCS12_bio                          @1308
-    d2i_PKCS12_fp                           @1309
-    d2i_PKCS7                               @736
-    d2i_PKCS7_DIGEST                        @737
-    d2i_PKCS7_ENCRYPT                       @738
-    d2i_PKCS7_ENC_CONTENT                   @739
-    d2i_PKCS7_ENVELOPE                      @740
-    d2i_PKCS7_ISSUER_AND_SERIAL             @741
-    d2i_PKCS7_RECIP_INFO                    @742
-    d2i_PKCS7_SIGNED                        @743
-    d2i_PKCS7_SIGNER_INFO                   @744
-    d2i_PKCS7_SIGN_ENVELOPE                 @745
-    d2i_PKCS7_bio                           @746
-    d2i_PKCS7_fp                            @747
-    d2i_PKCS8_PRIV_KEY_INFO                 @1316
-    d2i_PKCS8_PRIV_KEY_INFO_bio             @1783
-    d2i_PKCS8_PRIV_KEY_INFO_fp              @1780
-    d2i_PKCS8_bio                           @1779
-    d2i_PKCS8_fp                            @1784
-    d2i_PKEY_USAGE_PERIOD                   @1233
-    d2i_POLICYINFO                          @1490
-    d2i_POLICYQUALINFO                      @1494
-    d2i_PrivateKey                          @748
-    d2i_PublicKey                           @749
-    d2i_RSAPrivateKey                       @750
-    d2i_RSAPrivateKey_bio                   @751
-    d2i_RSAPrivateKey_fp                    @752
-    d2i_RSAPublicKey                        @753
-    d2i_RSAPublicKey_bio                    @945
-    d2i_RSAPublicKey_fp                     @952
-    d2i_SXNET                               @1326
-    d2i_SXNETID                             @1330
-    d2i_USERNOTICE                          @1498
-    d2i_X509                                @754
-    d2i_X509_ALGOR                          @755
-    d2i_X509_ATTRIBUTE                      @756
-    d2i_X509_CINF                           @757
-    d2i_X509_CRL                            @758
-    d2i_X509_CRL_INFO                       @759
-    d2i_X509_CRL_bio                        @760
-    d2i_X509_CRL_fp                         @761
-    d2i_X509_EXTENSION                      @762
-    d2i_X509_NAME                           @763
-    d2i_X509_NAME_ENTRY                     @764
-    d2i_X509_PKEY                           @765
-    d2i_X509_PUBKEY                         @766
-    d2i_X509_REQ                            @767
-    d2i_X509_REQ_INFO                       @768
-    d2i_X509_REQ_bio                        @769
-    d2i_X509_REQ_fp                         @770
-    d2i_X509_REVOKED                        @771
-    d2i_X509_SIG                            @772
-    d2i_X509_VAL                            @773
-    d2i_X509_bio                            @774
-    d2i_X509_fp                             @775
-    d2i_ext_ku                              @1194
-    des_cbc_cksum                           @777
-    des_cbc_encrypt                         @778
-    des_cblock_print_file                   @779
-    des_cfb64_encrypt                       @780
-    des_cfb_encrypt                         @781
-    des_decrypt3                            @782
-    des_ecb3_encrypt                        @783
-    des_ecb_encrypt                         @784
-    des_ede3_cbc_encrypt                    @785
-    des_ede3_cbcm_encrypt                   @1225
-    des_ede3_cfb64_encrypt                  @786
-    des_ede3_ofb64_encrypt                  @787
-    des_enc_read                            @788
-    des_enc_write                           @789
-    des_encrypt                             @790
-    des_encrypt2                            @791
-    des_encrypt3                            @792
-    des_fcrypt                              @793
-    des_is_weak_key                         @794
-    des_key_sched                           @795
-    des_ncbc_encrypt                        @796
-    des_ofb64_encrypt                       @797
-    des_ofb_encrypt                         @798
-    des_options                             @799
-    des_pcbc_encrypt                        @800
-    des_quad_cksum                          @801
-    des_random_key                          @802
-    des_random_seed                         @803
-    des_read_2passwords                     @804
-    des_read_password                       @805
-    des_read_pw                             @806
-    des_read_pw_string                      @807
-    des_set_key                             @808
-    des_set_odd_parity                      @809
-    des_string_to_2keys                     @810
-    des_string_to_key                       @811
-    des_xcbc_encrypt                        @812
-    des_xwhite_in2out                       @813
-    ext_ku_free                             @1195
-    ext_ku_new                              @1196
-    hex_to_string                           @1223
-    i2a_ASN1_ENUMERATED                     @1209
-    i2a_ASN1_INTEGER                        @815
-    i2a_ASN1_OBJECT                         @816
-    i2a_ASN1_STRING                         @817
-    i2d_ASN1_BIT_STRING                     @818
-    i2d_ASN1_BMPSTRING                      @1093
-    i2d_ASN1_BOOLEAN                        @819
-    i2d_ASN1_ENUMERATED                     @1203
-    i2d_ASN1_GENERALIZEDTIME                @1197
-    i2d_ASN1_HEADER                         @820
-    i2d_ASN1_IA5STRING                      @821
-    i2d_ASN1_INTEGER                        @822
-    i2d_ASN1_OBJECT                         @823
-    i2d_ASN1_OCTET_STRING                   @824
-    i2d_ASN1_PRINTABLE                      @825
-    i2d_ASN1_SET                            @826
-    i2d_ASN1_SET_OF_ASN1_OBJECT             @1837
-    i2d_ASN1_SET_OF_ASN1_TYPE               @1560
-    i2d_ASN1_SET_OF_DIST_POINT              @1536
-    i2d_ASN1_SET_OF_GENERAL_NAME            @1422
-    i2d_ASN1_SET_OF_PKCS7_RECIP_INFO        @1738
-    i2d_ASN1_SET_OF_PKCS7_SIGNER_INFO       @1723
-    i2d_ASN1_SET_OF_POLICYINFO              @1476
-    i2d_ASN1_SET_OF_POLICYQUALINFO          @1458
-    i2d_ASN1_SET_OF_SXNETID                 @1440
-    i2d_ASN1_SET_OF_X509                    @1380
-    i2d_ASN1_SET_OF_X509_ALGOR              @1682
-    i2d_ASN1_SET_OF_X509_ATTRIBUTE          @1615
-    i2d_ASN1_SET_OF_X509_CRL                @1685
-    i2d_ASN1_SET_OF_X509_EXTENSION          @1624
-    i2d_ASN1_SET_OF_X509_NAME_ENTRY         @1633
-    i2d_ASN1_SET_OF_X509_REVOKED            @1661
-    i2d_ASN1_TIME                           @1198
-    i2d_ASN1_TYPE                           @827
-    i2d_ASN1_UTCTIME                        @828
-    i2d_ASN1_UTF8STRING                     @1341
-    i2d_ASN1_VISIBLESTRING                  @1339
-    i2d_ASN1_bytes                          @829
-    i2d_AUTHORITY_KEYID                     @1254
-    i2d_BASIC_CONSTRAINTS                   @1199
-    i2d_CERTIFICATEPOLICIES                 @1484
-    i2d_CRL_DIST_POINTS                     @1537
-    i2d_DHparams                            @830
-    i2d_DIRECTORYSTRING                     @1343
-    i2d_DISPLAYTEXT                         @1345
-    i2d_DIST_POINT                          @1541
-    i2d_DIST_POINT_NAME                     @1545
-    i2d_DSAPrivateKey                       @831
-    i2d_DSAPrivateKey_bio                   @832
-    i2d_DSAPrivateKey_fp                    @833
-    i2d_DSAPublicKey                        @834
-    i2d_DSA_SIG                             @1338
-    i2d_DSAparams                           @835
-    i2d_GENERAL_NAME                        @1211
-    i2d_GENERAL_NAMES                       @1218
-    i2d_NETSCAPE_CERT_SEQUENCE              @1200
-    i2d_NETSCAPE_SPKAC                      @836
-    i2d_NETSCAPE_SPKI                       @837
-    i2d_NOTICEREF                           @1500
-    i2d_Netscape_RSA                        @838
-    i2d_PBE2PARAM                           @1401
-    i2d_PBEPARAM                            @1310
-    i2d_PBKDF2PARAM                         @1397
-    i2d_PKCS12                              @1288
-    i2d_PKCS12_BAGS                         @1284
-    i2d_PKCS12_MAC_DATA                     @1292
-    i2d_PKCS12_SAFEBAG                      @1296
-    i2d_PKCS12_bio                          @1306
-    i2d_PKCS12_fp                           @1307
-    i2d_PKCS7                               @839
-    i2d_PKCS7_DIGEST                        @840
-    i2d_PKCS7_ENCRYPT                       @841
-    i2d_PKCS7_ENC_CONTENT                   @842
-    i2d_PKCS7_ENVELOPE                      @843
-    i2d_PKCS7_ISSUER_AND_SERIAL             @844
-    i2d_PKCS7_RECIP_INFO                    @845
-    i2d_PKCS7_SIGNED                        @846
-    i2d_PKCS7_SIGNER_INFO                   @847
-    i2d_PKCS7_SIGN_ENVELOPE                 @848
-    i2d_PKCS7_bio                           @849
-    i2d_PKCS7_fp                            @850
-    i2d_PKCS8_PRIV_KEY_INFO                 @1314
-    i2d_PKCS8_PRIV_KEY_INFO_bio             @1792
-    i2d_PKCS8_PRIV_KEY_INFO_fp              @1791
-    i2d_PKCS8_bio                           @1790
-    i2d_PKCS8_fp                            @1777
-    i2d_PKEY_USAGE_PERIOD                   @1232
-    i2d_POLICYINFO                          @1488
-    i2d_POLICYQUALINFO                      @1492
-    i2d_PrivateKey                          @851
-    i2d_PublicKey                           @852
-    i2d_RSAPrivateKey                       @853
-    i2d_RSAPrivateKey_bio                   @854
-    i2d_RSAPrivateKey_fp                    @855
-    i2d_RSAPublicKey                        @856
-    i2d_RSAPublicKey_bio                    @946
-    i2d_RSAPublicKey_fp                     @954
-    i2d_SXNET                               @1325
-    i2d_SXNETID                             @1329
-    i2d_USERNOTICE                          @1496
-    i2d_X509                                @857
-    i2d_X509_ALGOR                          @858
-    i2d_X509_ATTRIBUTE                      @859
-    i2d_X509_CINF                           @860
-    i2d_X509_CRL                            @861
-    i2d_X509_CRL_INFO                       @862
-    i2d_X509_CRL_bio                        @863
-    i2d_X509_CRL_fp                         @864
-    i2d_X509_EXTENSION                      @865
-    i2d_X509_NAME                           @866
-    i2d_X509_NAME_ENTRY                     @867
-    i2d_X509_PKEY                           @868
-    i2d_X509_PUBKEY                         @869
-    i2d_X509_REQ                            @870
-    i2d_X509_REQ_INFO                       @871
-    i2d_X509_REQ_bio                        @872
-    i2d_X509_REQ_fp                         @873
-    i2d_X509_REVOKED                        @874
-    i2d_X509_SIG                            @875
-    i2d_X509_VAL                            @876
-    i2d_X509_bio                            @877
-    i2d_X509_fp                             @878
-    i2d_ext_ku                              @1201
-    i2s_ASN1_ENUMERATED                     @1241
-    i2s_ASN1_ENUMERATED_TABLE               @1242
-    i2s_ASN1_INTEGER                        @1237
-    i2s_ASN1_OCTET_STRING                   @1220
-    i2t_ASN1_OBJECT                         @979
-    i2v_GENERAL_NAME                        @1230
-    i2v_GENERAL_NAMES                       @1219
-    idea_cbc_encrypt                        @879
-    idea_cfb64_encrypt                      @880
-    idea_ecb_encrypt                        @881
-    idea_encrypt                            @882
-    idea_ofb64_encrypt                      @883
-    idea_options                            @884
-    idea_set_decrypt_key                    @885
-    idea_set_encrypt_key                    @886
-    lh_delete                               @887
-    lh_doall                                @888
-    lh_doall_arg                            @889
-    lh_free                                 @890
-    lh_insert                               @891
-    lh_new                                  @892
-    lh_node_stats                           @893
-    lh_node_stats_bio                       @894
-    lh_node_usage_stats                     @895
-    lh_node_usage_stats_bio                 @896
-    lh_retrieve                             @897
-    lh_stats                                @898
-    lh_stats_bio                            @899
-    lh_strhash                              @900
-    ms_time_cmp                             @1151
-    ms_time_diff                            @1148
-    ms_time_free                            @1150
-    ms_time_get                             @1152
-    ms_time_new                             @1149
-    name_cmp                                @1239
-    s2i_ASN1_INTEGER                        @1509
-    s2i_ASN1_OCTET_STRING                   @1221
-    sk_ASN1_OBJECT_delete                   @1831
-    sk_ASN1_OBJECT_delete_ptr               @1828
-    sk_ASN1_OBJECT_dup                      @1827
-    sk_ASN1_OBJECT_find                     @1825
-    sk_ASN1_OBJECT_free                     @1838
-    sk_ASN1_OBJECT_insert                   @1842
-    sk_ASN1_OBJECT_new                      @1829
-    sk_ASN1_OBJECT_new_null                 @1836
-    sk_ASN1_OBJECT_num                      @1834
-    sk_ASN1_OBJECT_pop                      @1833
-    sk_ASN1_OBJECT_pop_free                 @1826
-    sk_ASN1_OBJECT_push                     @1843
-    sk_ASN1_OBJECT_set                      @1839
-    sk_ASN1_OBJECT_set_cmp_func             @1840
-    sk_ASN1_OBJECT_shift                    @1832
-    sk_ASN1_OBJECT_sort                     @1863
-    sk_ASN1_OBJECT_unshift                  @1830
-    sk_ASN1_OBJECT_value                    @1835
-    sk_ASN1_OBJECT_zero                     @1841
-    sk_ASN1_TYPE_delete                     @1631
-    sk_ASN1_TYPE_delete_ptr                 @1598
-    sk_ASN1_TYPE_dup                        @1620
-    sk_ASN1_TYPE_find                       @1635
-    sk_ASN1_TYPE_free                       @1597
-    sk_ASN1_TYPE_insert                     @1603
-    sk_ASN1_TYPE_new                        @1628
-    sk_ASN1_TYPE_new_null                   @1558
-    sk_ASN1_TYPE_num                        @1564
-    sk_ASN1_TYPE_pop                        @1556
-    sk_ASN1_TYPE_pop_free                   @1599
-    sk_ASN1_TYPE_push                       @1626
-    sk_ASN1_TYPE_set                        @1593
-    sk_ASN1_TYPE_set_cmp_func               @1571
-    sk_ASN1_TYPE_shift                      @1630
-    sk_ASN1_TYPE_sort                       @1857
-    sk_ASN1_TYPE_unshift                    @1596
-    sk_ASN1_TYPE_value                      @1553
-    sk_ASN1_TYPE_zero                       @1623
-    sk_CONF_VALUE_delete                    @1807
-    sk_CONF_VALUE_delete_ptr                @1818
-    sk_CONF_VALUE_dup                       @1822
-    sk_CONF_VALUE_find                      @1819
-    sk_CONF_VALUE_free                      @1811
-    sk_CONF_VALUE_insert                    @1823
-    sk_CONF_VALUE_new                       @1824
-    sk_CONF_VALUE_new_null                  @1821
-    sk_CONF_VALUE_num                       @1809
-    sk_CONF_VALUE_pop                       @1808
-    sk_CONF_VALUE_pop_free                  @1810
-    sk_CONF_VALUE_push                      @1817
-    sk_CONF_VALUE_set                       @1815
-    sk_CONF_VALUE_set_cmp_func              @1820
-    sk_CONF_VALUE_shift                     @1812
-    sk_CONF_VALUE_sort                      @1849
-    sk_CONF_VALUE_unshift                   @1813
-    sk_CONF_VALUE_value                     @1814
-    sk_CONF_VALUE_zero                      @1816
-    sk_DIST_POINT_delete                    @1529
-    sk_DIST_POINT_delete_ptr                @1530
-    sk_DIST_POINT_dup                       @1532
-    sk_DIST_POINT_find                      @1528
-    sk_DIST_POINT_free                      @1521
-    sk_DIST_POINT_insert                    @1570
-    sk_DIST_POINT_new                       @1519
-    sk_DIST_POINT_new_null                  @1520
-    sk_DIST_POINT_num                       @1522
-    sk_DIST_POINT_pop                       @1527
-    sk_DIST_POINT_pop_free                  @1533
-    sk_DIST_POINT_push                      @1526
-    sk_DIST_POINT_set                       @1524
-    sk_DIST_POINT_set_cmp_func              @1531
-    sk_DIST_POINT_shift                     @1534
-    sk_DIST_POINT_sort                      @1868
-    sk_DIST_POINT_unshift                   @1573
-    sk_DIST_POINT_value                     @1523
-    sk_DIST_POINT_zero                      @1525
-    sk_GENERAL_NAME_delete                  @1415
-    sk_GENERAL_NAME_delete_ptr              @1416
-    sk_GENERAL_NAME_dup                     @1418
-    sk_GENERAL_NAME_find                    @1414
-    sk_GENERAL_NAME_free                    @1407
-    sk_GENERAL_NAME_insert                  @1629
-    sk_GENERAL_NAME_new                     @1405
-    sk_GENERAL_NAME_new_null                @1406
-    sk_GENERAL_NAME_num                     @1408
-    sk_GENERAL_NAME_pop                     @1413
-    sk_GENERAL_NAME_pop_free                @1419
-    sk_GENERAL_NAME_push                    @1412
-    sk_GENERAL_NAME_set                     @1410
-    sk_GENERAL_NAME_set_cmp_func            @1417
-    sk_GENERAL_NAME_shift                   @1420
-    sk_GENERAL_NAME_sort                    @1854
-    sk_GENERAL_NAME_unshift                 @1587
-    sk_GENERAL_NAME_value                   @1409
-    sk_GENERAL_NAME_zero                    @1411
-    sk_PKCS7_RECIP_INFO_delete              @1774
-    sk_PKCS7_RECIP_INFO_delete_ptr          @1759
-    sk_PKCS7_RECIP_INFO_dup                 @1720
-    sk_PKCS7_RECIP_INFO_find                @1773
-    sk_PKCS7_RECIP_INFO_free                @1752
-    sk_PKCS7_RECIP_INFO_insert              @1761
-    sk_PKCS7_RECIP_INFO_new                 @1724
-    sk_PKCS7_RECIP_INFO_new_null            @1730
-    sk_PKCS7_RECIP_INFO_num                 @1746
-    sk_PKCS7_RECIP_INFO_pop                 @1743
-    sk_PKCS7_RECIP_INFO_pop_free            @1760
-    sk_PKCS7_RECIP_INFO_push                @1766
-    sk_PKCS7_RECIP_INFO_set                 @1763
-    sk_PKCS7_RECIP_INFO_set_cmp_func        @1741
-    sk_PKCS7_RECIP_INFO_shift               @1729
-    sk_PKCS7_RECIP_INFO_sort                @1859
-    sk_PKCS7_RECIP_INFO_unshift             @1767
-    sk_PKCS7_RECIP_INFO_value               @1745
-    sk_PKCS7_RECIP_INFO_zero                @1764
-    sk_PKCS7_SIGNER_INFO_delete             @1740
-    sk_PKCS7_SIGNER_INFO_delete_ptr         @1742
-    sk_PKCS7_SIGNER_INFO_dup                @1770
-    sk_PKCS7_SIGNER_INFO_find               @1726
-    sk_PKCS7_SIGNER_INFO_free               @1762
-    sk_PKCS7_SIGNER_INFO_insert             @1721
-    sk_PKCS7_SIGNER_INFO_new                @1717
-    sk_PKCS7_SIGNER_INFO_new_null           @1758
-    sk_PKCS7_SIGNER_INFO_num                @1736
-    sk_PKCS7_SIGNER_INFO_pop                @1732
-    sk_PKCS7_SIGNER_INFO_pop_free           @1733
-    sk_PKCS7_SIGNER_INFO_push               @1722
-    sk_PKCS7_SIGNER_INFO_set                @1754
-    sk_PKCS7_SIGNER_INFO_set_cmp_func       @1727
-    sk_PKCS7_SIGNER_INFO_shift              @1731
-    sk_PKCS7_SIGNER_INFO_sort               @1864
-    sk_PKCS7_SIGNER_INFO_unshift            @1719
-    sk_PKCS7_SIGNER_INFO_value              @1747
-    sk_PKCS7_SIGNER_INFO_zero               @1718
-    sk_POLICYINFO_delete                    @1469
-    sk_POLICYINFO_delete_ptr                @1470
-    sk_POLICYINFO_dup                       @1472
-    sk_POLICYINFO_find                      @1468
-    sk_POLICYINFO_free                      @1461
-    sk_POLICYINFO_insert                    @1622
-    sk_POLICYINFO_new                       @1459
-    sk_POLICYINFO_new_null                  @1460
-    sk_POLICYINFO_num                       @1462
-    sk_POLICYINFO_pop                       @1467
-    sk_POLICYINFO_pop_free                  @1473
-    sk_POLICYINFO_push                      @1466
-    sk_POLICYINFO_set                       @1464
-    sk_POLICYINFO_set_cmp_func              @1471
-    sk_POLICYINFO_shift                     @1474
-    sk_POLICYINFO_sort                      @1853
-    sk_POLICYINFO_unshift                   @1582
-    sk_POLICYINFO_value                     @1463
-    sk_POLICYINFO_zero                      @1465
-    sk_POLICYQUALINFO_delete                @1451
-    sk_POLICYQUALINFO_delete_ptr            @1452
-    sk_POLICYQUALINFO_dup                   @1454
-    sk_POLICYQUALINFO_find                  @1450
-    sk_POLICYQUALINFO_free                  @1443
-    sk_POLICYQUALINFO_insert                @1592
-    sk_POLICYQUALINFO_new                   @1441
-    sk_POLICYQUALINFO_new_null              @1442
-    sk_POLICYQUALINFO_num                   @1444
-    sk_POLICYQUALINFO_pop                   @1449
-    sk_POLICYQUALINFO_pop_free              @1455
-    sk_POLICYQUALINFO_push                  @1448
-    sk_POLICYQUALINFO_set                   @1446
-    sk_POLICYQUALINFO_set_cmp_func          @1453
-    sk_POLICYQUALINFO_shift                 @1456
-    sk_POLICYQUALINFO_sort                  @1866
-    sk_POLICYQUALINFO_unshift               @1581
-    sk_POLICYQUALINFO_value                 @1445
-    sk_POLICYQUALINFO_zero                  @1447
-    sk_SXNETID_delete                       @1433
-    sk_SXNETID_delete_ptr                   @1434
-    sk_SXNETID_dup                          @1436
-    sk_SXNETID_find                         @1432
-    sk_SXNETID_free                         @1425
-    sk_SXNETID_insert                       @1605
-    sk_SXNETID_new                          @1423
-    sk_SXNETID_new_null                     @1424
-    sk_SXNETID_num                          @1426
-    sk_SXNETID_pop                          @1431
-    sk_SXNETID_pop_free                     @1437
-    sk_SXNETID_push                         @1430
-    sk_SXNETID_set                          @1428
-    sk_SXNETID_set_cmp_func                 @1435
-    sk_SXNETID_shift                        @1438
-    sk_SXNETID_sort                         @1862
-    sk_SXNETID_unshift                      @1616
-    sk_SXNETID_value                        @1427
-    sk_SXNETID_zero                         @1429
-    sk_X509_ALGOR_delete                    @1701
-    sk_X509_ALGOR_delete_ptr                @1703
-    sk_X509_ALGOR_dup                       @1715
-    sk_X509_ALGOR_find                      @1713
-    sk_X509_ALGOR_free                      @1700
-    sk_X509_ALGOR_insert                    @1690
-    sk_X509_ALGOR_new                       @1677
-    sk_X509_ALGOR_new_null                  @1695
-    sk_X509_ALGOR_num                       @1686
-    sk_X509_ALGOR_pop                       @1683
-    sk_X509_ALGOR_pop_free                  @1716
-    sk_X509_ALGOR_push                      @1711
-    sk_X509_ALGOR_set                       @1705
-    sk_X509_ALGOR_set_cmp_func              @1714
-    sk_X509_ALGOR_shift                     @1708
-    sk_X509_ALGOR_sort                      @1858
-    sk_X509_ALGOR_unshift                   @1680
-    sk_X509_ALGOR_value                     @1712
-    sk_X509_ALGOR_zero                      @1709
-    sk_X509_ATTRIBUTE_delete                @1391
-    sk_X509_ATTRIBUTE_delete_ptr            @1392
-    sk_X509_ATTRIBUTE_dup                   @1394
-    sk_X509_ATTRIBUTE_find                  @1390
-    sk_X509_ATTRIBUTE_free                  @1383
-    sk_X509_ATTRIBUTE_insert                @1610
-    sk_X509_ATTRIBUTE_new                   @1381
-    sk_X509_ATTRIBUTE_new_null              @1382
-    sk_X509_ATTRIBUTE_num                   @1384
-    sk_X509_ATTRIBUTE_pop                   @1389
-    sk_X509_ATTRIBUTE_pop_free              @1395
-    sk_X509_ATTRIBUTE_push                  @1388
-    sk_X509_ATTRIBUTE_set                   @1386
-    sk_X509_ATTRIBUTE_set_cmp_func          @1393
-    sk_X509_ATTRIBUTE_shift                 @1396
-    sk_X509_ATTRIBUTE_sort                  @1851
-    sk_X509_ATTRIBUTE_unshift               @1585
-    sk_X509_ATTRIBUTE_value                 @1385
-    sk_X509_ATTRIBUTE_zero                  @1387
-    sk_X509_CRL_delete                      @1699
-    sk_X509_CRL_delete_ptr                  @1689
-    sk_X509_CRL_dup                         @1691
-    sk_X509_CRL_find                        @1698
-    sk_X509_CRL_free                        @1681
-    sk_X509_CRL_insert                      @1687
-    sk_X509_CRL_new                         @1693
-    sk_X509_CRL_new_null                    @1710
-    sk_X509_CRL_num                         @1706
-    sk_X509_CRL_pop                         @1704
-    sk_X509_CRL_pop_free                    @1688
-    sk_X509_CRL_push                        @1694
-    sk_X509_CRL_set                         @1679
-    sk_X509_CRL_set_cmp_func                @1678
-    sk_X509_CRL_shift                       @1697
-    sk_X509_CRL_sort                        @1867
-    sk_X509_CRL_unshift                     @1684
-    sk_X509_CRL_value                       @1707
-    sk_X509_CRL_zero                        @1692
-    sk_X509_EXTENSION_delete                @1642
-    sk_X509_EXTENSION_delete_ptr            @1594
-    sk_X509_EXTENSION_dup                   @1641
-    sk_X509_EXTENSION_find                  @1554
-    sk_X509_EXTENSION_free                  @1614
-    sk_X509_EXTENSION_insert                @1618
-    sk_X509_EXTENSION_new                   @1551
-    sk_X509_EXTENSION_new_null              @1565
-    sk_X509_EXTENSION_num                   @1579
-    sk_X509_EXTENSION_pop                   @1576
-    sk_X509_EXTENSION_pop_free              @1601
-    sk_X509_EXTENSION_push                  @1644
-    sk_X509_EXTENSION_set                   @1613
-    sk_X509_EXTENSION_set_cmp_func          @1557
-    sk_X509_EXTENSION_shift                 @1643
-    sk_X509_EXTENSION_sort                  @1861
-    sk_X509_EXTENSION_unshift               @1600
-    sk_X509_EXTENSION_value                 @1572
-    sk_X509_EXTENSION_zero                  @1638
-    sk_X509_INFO_delete                     @1608
-    sk_X509_INFO_delete_ptr                 @1568
-    sk_X509_INFO_dup                        @1640
-    sk_X509_INFO_find                       @1621
-    sk_X509_INFO_free                       @1588
-    sk_X509_INFO_insert                     @1590
-    sk_X509_INFO_new                        @1550
-    sk_X509_INFO_new_null                   @1619
-    sk_X509_INFO_num                        @1578
-    sk_X509_INFO_pop                        @1575
-    sk_X509_INFO_pop_free                   @1580
-    sk_X509_INFO_push                       @1617
-    sk_X509_INFO_set                        @1612
-    sk_X509_INFO_set_cmp_func               @1609
-    sk_X509_INFO_shift                      @1639
-    sk_X509_INFO_sort                       @1852
-    sk_X509_INFO_unshift                    @1595
-    sk_X509_INFO_value                      @1566
-    sk_X509_INFO_zero                       @1611
-    sk_X509_LOOKUP_delete                   @1751
-    sk_X509_LOOKUP_delete_ptr               @1771
-    sk_X509_LOOKUP_dup                      @1735
-    sk_X509_LOOKUP_find                     @1737
-    sk_X509_LOOKUP_free                     @1769
-    sk_X509_LOOKUP_insert                   @1744
-    sk_X509_LOOKUP_new                      @1739
-    sk_X509_LOOKUP_new_null                 @1725
-    sk_X509_LOOKUP_num                      @1750
-    sk_X509_LOOKUP_pop                      @1749
-    sk_X509_LOOKUP_pop_free                 @1755
-    sk_X509_LOOKUP_push                     @1734
-    sk_X509_LOOKUP_set                      @1772
-    sk_X509_LOOKUP_set_cmp_func             @1768
-    sk_X509_LOOKUP_shift                    @1756
-    sk_X509_LOOKUP_sort                     @1865
-    sk_X509_LOOKUP_unshift                  @1757
-    sk_X509_LOOKUP_value                    @1765
-    sk_X509_LOOKUP_zero                     @1728
-    sk_X509_NAME_ENTRY_delete               @1559
-    sk_X509_NAME_ENTRY_delete_ptr           @1636
-    sk_X509_NAME_ENTRY_dup                  @1561
-    sk_X509_NAME_ENTRY_find                 @1645
-    sk_X509_NAME_ENTRY_free                 @1604
-    sk_X509_NAME_ENTRY_insert               @1627
-    sk_X509_NAME_ENTRY_new                  @1569
-    sk_X509_NAME_ENTRY_new_null             @1583
-    sk_X509_NAME_ENTRY_num                  @1586
-    sk_X509_NAME_ENTRY_pop                  @1584
-    sk_X509_NAME_ENTRY_pop_free             @1632
-    sk_X509_NAME_ENTRY_push                 @1637
-    sk_X509_NAME_ENTRY_set                  @1625
-    sk_X509_NAME_ENTRY_set_cmp_func         @1602
-    sk_X509_NAME_ENTRY_shift                @1577
-    sk_X509_NAME_ENTRY_sort                 @1860
-    sk_X509_NAME_ENTRY_unshift              @1552
-    sk_X509_NAME_ENTRY_value                @1591
-    sk_X509_NAME_ENTRY_zero                 @1634
-    sk_X509_NAME_delete                     @1357
-    sk_X509_NAME_delete_ptr                 @1358
-    sk_X509_NAME_dup                        @1360
-    sk_X509_NAME_find                       @1356
-    sk_X509_NAME_free                       @1349
-    sk_X509_NAME_insert                     @1606
-    sk_X509_NAME_new                        @1347
-    sk_X509_NAME_new_null                   @1348
-    sk_X509_NAME_num                        @1350
-    sk_X509_NAME_pop                        @1355
-    sk_X509_NAME_pop_free                   @1361
-    sk_X509_NAME_push                       @1354
-    sk_X509_NAME_set                        @1352
-    sk_X509_NAME_set_cmp_func               @1359
-    sk_X509_NAME_shift                      @1362
-    sk_X509_NAME_sort                       @1856
-    sk_X509_NAME_unshift                    @1563
-    sk_X509_NAME_value                      @1351
-    sk_X509_NAME_zero                       @1353
-    sk_X509_REVOKED_delete                  @1673
-    sk_X509_REVOKED_delete_ptr              @1663
-    sk_X509_REVOKED_dup                     @1658
-    sk_X509_REVOKED_find                    @1672
-    sk_X509_REVOKED_free                    @1659
-    sk_X509_REVOKED_insert                  @1665
-    sk_X509_REVOKED_new                     @1660
-    sk_X509_REVOKED_new_null                @1675
-    sk_X509_REVOKED_num                     @1669
-    sk_X509_REVOKED_pop                     @1667
-    sk_X509_REVOKED_pop_free                @1664
-    sk_X509_REVOKED_push                    @1670
-    sk_X509_REVOKED_set                     @1676
-    sk_X509_REVOKED_set_cmp_func            @1656
-    sk_X509_REVOKED_shift                   @1662
-    sk_X509_REVOKED_sort                    @1850
-    sk_X509_REVOKED_unshift                 @1657
-    sk_X509_REVOKED_value                   @1668
-    sk_X509_REVOKED_zero                    @1666
-    sk_X509_delete                          @1373
-    sk_X509_delete_ptr                      @1374
-    sk_X509_dup                             @1376
-    sk_X509_find                            @1372
-    sk_X509_free                            @1365
-    sk_X509_insert                          @1607
-    sk_X509_new                             @1363
-    sk_X509_new_null                        @1364
-    sk_X509_num                             @1366
-    sk_X509_pop                             @1371
-    sk_X509_pop_free                        @1377
-    sk_X509_push                            @1370
-    sk_X509_set                             @1368
-    sk_X509_set_cmp_func                    @1375
-    sk_X509_shift                           @1378
-    sk_X509_sort                            @1855
-    sk_X509_unshift                         @1562
-    sk_X509_value                           @1367
-    sk_X509_zero                            @1369
-    sk_delete                               @901
-    sk_delete_ptr                           @902
-    sk_dup                                  @903
-    sk_find                                 @904
-    sk_free                                 @905
-    sk_insert                               @906
-    sk_new                                  @907
-    sk_num                                  @1654
-    sk_pop                                  @908
-    sk_pop_free                             @909
-    sk_push                                 @910
-    sk_set                                  @1655
-    sk_set_cmp_func                         @911
-    sk_shift                                @912
-    sk_sort                                 @1671
-    sk_unshift                              @913
-    sk_value                                @1653
-    sk_zero                                 @914
-    string_to_hex                           @1224
-    uni2asc                                 @1283
-    v2i_GENERAL_NAME                        @1231
-    v2i_GENERAL_NAMES                       @1236
-
+;
+; Definition file for the DLL version of the LIBEAY32 library from OpenSSL
+;
+
+LIBRARY         LIBEAY32
+
+DESCRIPTION     'OpenSSL LIBEAY32 - http://www.openssl.org/'
+
+EXPORTS
+    SSLeay                                  @1
+    SSLeay_version                          @2
+    ACCESS_DESCRIPTION_free                 @1994
+    ACCESS_DESCRIPTION_new                  @1925
+    ASN1_BIT_STRING_asn1_meth               @3
+    ASN1_BIT_STRING_free                    @2080
+    ASN1_BIT_STRING_get_bit                 @1060
+    ASN1_BIT_STRING_name_print              @2134
+    ASN1_BIT_STRING_new                     @1957
+    ASN1_BIT_STRING_num_asc                 @1986
+    ASN1_BIT_STRING_set                     @2109
+    ASN1_BIT_STRING_set_asc                 @2017
+    ASN1_BIT_STRING_set_bit                 @1061
+    ASN1_BMPSTRING_free                     @2057
+    ASN1_BMPSTRING_new                      @1936
+    ASN1_ENUMERATED_free                    @2027
+    ASN1_ENUMERATED_get                     @1206
+    ASN1_ENUMERATED_new                     @2052
+    ASN1_ENUMERATED_set                     @1205
+    ASN1_ENUMERATED_to_BN                   @1208
+    ASN1_GENERALIZEDTIME_check              @1157
+    ASN1_GENERALIZEDTIME_free               @1908
+    ASN1_GENERALIZEDTIME_new                @2126
+    ASN1_GENERALIZEDTIME_print              @1158
+    ASN1_GENERALIZEDTIME_set                @1159
+    ASN1_GENERALIZEDTIME_set_string         @1160
+    ASN1_HEADER_free                        @4
+    ASN1_HEADER_new                         @5
+    ASN1_IA5STRING_asn1_meth                @6
+    ASN1_IA5STRING_free                     @2065
+    ASN1_IA5STRING_new                      @2049
+    ASN1_INTEGER_cmp                        @1963
+    ASN1_INTEGER_dup                        @2114
+    ASN1_INTEGER_free                       @2111
+    ASN1_INTEGER_get                        @7
+    ASN1_INTEGER_new                        @2131
+    ASN1_INTEGER_set                        @8
+    ASN1_INTEGER_to_BN                      @9
+    ASN1_NULL_free                          @2168
+    ASN1_NULL_new                           @2170
+    ASN1_OBJECT_create                      @10
+    ASN1_OBJECT_free                        @11
+    ASN1_OBJECT_new                         @12
+    ASN1_OCTET_STRING_cmp                   @1955
+    ASN1_OCTET_STRING_dup                   @2108
+    ASN1_OCTET_STRING_free                  @2016
+    ASN1_OCTET_STRING_new                   @2130
+    ASN1_OCTET_STRING_set                   @2040
+    ASN1_PRINTABLESTRING_free               @1934
+    ASN1_PRINTABLESTRING_new                @2025
+    ASN1_PRINTABLE_type                     @13
+    ASN1_STRING_TABLE_add                   @2245
+    ASN1_STRING_TABLE_cleanup               @2020
+    ASN1_STRING_TABLE_get                   @2091
+    ASN1_STRING_cmp                         @14
+    ASN1_STRING_data                        @2075
+    ASN1_STRING_dup                         @15
+    ASN1_STRING_free                        @16
+    ASN1_STRING_get_default_mask            @2072
+    ASN1_STRING_length                      @2023
+    ASN1_STRING_length_set                  @2136
+    ASN1_STRING_new                         @17
+    ASN1_STRING_print                       @18
+    ASN1_STRING_set                         @19
+    ASN1_STRING_set_by_NID                  @1996
+    ASN1_STRING_set_default_mask            @2032
+    ASN1_STRING_set_default_mask_asc        @1960
+    ASN1_STRING_type                        @1951
+    ASN1_STRING_type_new                    @20
+    ASN1_T61STRING_free                     @1946
+    ASN1_T61STRING_new                      @2058
+    ASN1_TIME_free                          @1954
+    ASN1_TIME_new                           @1973
+    ASN1_TIME_print                         @1161
+    ASN1_TIME_set                           @1253
+    ASN1_TYPE_free                          @21
+    ASN1_TYPE_get                           @916
+    ASN1_TYPE_get_int_octetstring           @1076
+    ASN1_TYPE_get_octetstring               @1077
+    ASN1_TYPE_new                           @22
+    ASN1_TYPE_set                           @917
+    ASN1_TYPE_set_int_octetstring           @1078
+    ASN1_TYPE_set_octetstring               @1079
+    ASN1_UNIVERSALSTRING_to_string          @23
+    ASN1_UTCTIME_check                      @24
+    ASN1_UTCTIME_free                       @1988
+    ASN1_UTCTIME_new                        @2060
+    ASN1_UTCTIME_print                      @25
+    ASN1_UTCTIME_set                        @26
+    ASN1_UTCTIME_set_string                 @1080
+    ASN1_UTF8STRING_free                    @2092
+    ASN1_UTF8STRING_new                     @1938
+    ASN1_VISIBLESTRING_free                 @2118
+    ASN1_VISIBLESTRING_new                  @1932
+    ASN1_check_infinite_end                 @27
+    ASN1_d2i_bio                            @28
+    ASN1_d2i_fp                             @29
+    ASN1_digest                             @30
+    ASN1_dup                                @31
+    ASN1_get_object                         @32
+    ASN1_i2d_bio                            @33
+    ASN1_i2d_fp                             @34
+    ASN1_mbstring_copy                      @1937
+    ASN1_mbstring_ncopy                     @2123
+    ASN1_object_size                        @35
+    ASN1_pack_string                        @1261
+    ASN1_parse                              @36
+    ASN1_put_object                         @37
+    ASN1_seq_pack                           @1259
+    ASN1_seq_unpack                         @1258
+    ASN1_sign                               @38
+    ASN1_tag2str                            @1905
+    ASN1_unpack_string                      @1260
+    ASN1_verify                             @39
+    AUTHORITY_INFO_ACCESS_free              @2048
+    AUTHORITY_INFO_ACCESS_new               @2247
+    AUTHORITY_KEYID_free                    @1257
+    AUTHORITY_KEYID_new                     @1256
+    BASIC_CONSTRAINTS_free                  @1162
+    BASIC_CONSTRAINTS_new                   @1163
+    BF_cbc_encrypt                          @40
+    BF_cfb64_encrypt                        @41
+    BF_decrypt                              @987
+    BF_ecb_encrypt                          @42
+    BF_encrypt                              @43
+    BF_ofb64_encrypt                        @44
+    BF_options                              @45
+    BF_set_key                              @46
+    BIO_accept                              @51
+    BIO_callback_ctrl                       @2252
+    BIO_copy_next_retry                     @955
+    BIO_ctrl                                @52
+    BIO_ctrl_get_read_request               @1799
+    BIO_ctrl_get_write_guarantee            @1803
+    BIO_ctrl_pending                        @1800
+    BIO_ctrl_reset_read_request             @1906
+    BIO_ctrl_wpending                       @1801
+    BIO_debug_callback                      @54
+    BIO_dump                                @55
+    BIO_dup_chain                           @56
+    BIO_f_base64                            @57
+    BIO_f_buffer                            @58
+    BIO_f_cipher                            @59
+    BIO_f_md                                @60
+    BIO_f_nbio_test                         @915
+    BIO_f_null                              @61
+    BIO_f_reliable                          @1244
+    BIO_fd_non_fatal_error                  @63
+    BIO_fd_should_retry                     @64
+    BIO_find_type                           @65
+    BIO_free                                @66
+    BIO_free_all                            @67
+    BIO_get_accept_socket                   @69
+    BIO_get_ex_data                         @1062
+    BIO_get_ex_new_index                    @1063
+    BIO_get_host_ip                         @71
+    BIO_get_port                            @72
+    BIO_get_retry_BIO                       @73
+    BIO_get_retry_reason                    @74
+    BIO_gethostbyname                       @75
+    BIO_gets                                @76
+    BIO_ghbn_ctrl                           @1003
+    BIO_int_ctrl                            @53
+    BIO_new                                 @78
+    BIO_new_accept                          @79
+    BIO_new_bio_pair                        @1802
+    BIO_new_connect                         @80
+    BIO_new_fd                              @81
+    BIO_new_file                            @82
+    BIO_new_fp                              @83
+    BIO_new_mem_buf                         @1882
+    BIO_new_socket                          @84
+    BIO_nread                               @1876
+    BIO_nread0                              @1880
+    BIO_number_read                         @2203
+    BIO_number_written                      @2202
+    BIO_nwrite                              @1874
+    BIO_nwrite0                             @1878
+    BIO_pop                                 @85
+    BIO_printf                              @86
+    BIO_ptr_ctrl                            @969
+    BIO_push                                @87
+    BIO_puts                                @88
+    BIO_read                                @89
+    BIO_s_accept                            @90
+    BIO_s_bio                               @1793
+    BIO_s_connect                           @91
+    BIO_s_fd                                @92
+    BIO_s_file                              @93
+    BIO_s_mem                               @95
+    BIO_s_null                              @96
+    BIO_s_socket                            @98
+    BIO_set                                 @100
+    BIO_set_cipher                          @101
+    BIO_set_ex_data                         @1064
+    BIO_set_tcp_ndelay                      @102
+    BIO_sock_cleanup                        @103
+    BIO_sock_error                          @104
+    BIO_sock_init                           @105
+    BIO_sock_non_fatal_error                @106
+    BIO_sock_should_retry                   @107
+    BIO_socket_ioctl                        @108
+    BIO_socket_nbio                         @1102
+    BIO_write                               @109
+    BN_BLINDING_convert                     @973
+    BN_BLINDING_free                        @981
+    BN_BLINDING_invert                      @974
+    BN_BLINDING_new                         @980
+    BN_BLINDING_update                      @975
+    BN_CTX_end                              @2241
+    BN_CTX_free                             @110
+    BN_CTX_get                              @2243
+    BN_CTX_init                             @1135
+    BN_CTX_new                              @111
+    BN_CTX_start                            @2242
+    BN_MONT_CTX_copy                        @1109
+    BN_MONT_CTX_free                        @112
+    BN_MONT_CTX_init                        @1136
+    BN_MONT_CTX_new                         @113
+    BN_MONT_CTX_set                         @114
+    BN_RECP_CTX_free                        @1130
+    BN_RECP_CTX_init                        @1128
+    BN_RECP_CTX_new                         @1129
+    BN_RECP_CTX_set                         @1131
+    BN_add                                  @115
+    BN_add_word                             @116
+    BN_bin2bn                               @118
+    BN_bn2bin                               @120
+    BN_bn2dec                               @1002
+    BN_bn2hex                               @119
+    BN_bn2mpi                               @1058
+    BN_clear                                @121
+    BN_clear_bit                            @122
+    BN_clear_free                           @123
+    BN_cmp                                  @124
+    BN_copy                                 @125
+    BN_dec2bn                               @1001
+    BN_div                                  @126
+    BN_div_recp                             @1134
+    BN_div_word                             @127
+    BN_dup                                  @128
+    BN_exp                                  @998
+    BN_free                                 @129
+    BN_from_montgomery                      @130
+    BN_gcd                                  @131
+    BN_generate_prime                       @132
+    BN_get_params                           @1249
+    BN_get_word                             @133
+    BN_hex2bn                               @117
+    BN_init                                 @1095
+    BN_is_bit_set                           @134
+    BN_is_prime                             @135
+    BN_is_prime_fasttest                    @2240
+    BN_lshift                               @136
+    BN_lshift1                              @137
+    BN_mask_bits                            @138
+    BN_mod                                  @139
+    BN_mod_exp                              @140
+    BN_mod_exp2_mont                        @1514
+    BN_mod_exp_mont                         @141
+    BN_mod_exp_recp                         @1133
+    BN_mod_exp_simple                       @143
+    BN_mod_inverse                          @144
+    BN_mod_mul                              @145
+    BN_mod_mul_montgomery                   @146
+    BN_mod_mul_reciprocal                   @1132
+    BN_mod_word                             @148
+    BN_mpi2bn                               @1059
+    BN_mul                                  @149
+    BN_mul_word                             @999
+    BN_new                                  @150
+    BN_num_bits                             @151
+    BN_num_bits_word                        @152
+    BN_options                              @153
+    BN_print                                @154
+    BN_print_fp                             @155
+    BN_pseudo_rand                          @2239
+    BN_rand                                 @156
+    BN_reciprocal                           @157
+    BN_rshift                               @158
+    BN_rshift1                              @159
+    BN_set_bit                              @160
+    BN_set_params                           @1248
+    BN_set_word                             @161
+    BN_sqr                                  @162
+    BN_sub                                  @163
+    BN_sub_word                             @1000
+    BN_to_ASN1_ENUMERATED                   @1207
+    BN_to_ASN1_INTEGER                      @164
+    BN_uadd                                 @708
+    BN_ucmp                                 @165
+    BN_usub                                 @709
+    BN_value_one                            @166
+    BUF_MEM_free                            @167
+    BUF_MEM_grow                            @168
+    BUF_MEM_new                             @169
+    BUF_strdup                              @170
+    CAST_cbc_encrypt                        @992
+    CAST_cfb64_encrypt                      @993
+    CAST_decrypt                            @990
+    CAST_ecb_encrypt                        @991
+    CAST_encrypt                            @989
+    CAST_ofb64_encrypt                      @994
+    CAST_set_key                            @988
+    CERTIFICATEPOLICIES_free                @1486
+    CERTIFICATEPOLICIES_new                 @1485
+    COMP_CTX_free                           @1097
+    COMP_CTX_new                            @1096
+    COMP_compress_block                     @1144
+    COMP_expand_block                       @1145
+    COMP_rle                                @1146
+    COMP_zlib                               @1147
+    CONF_free                               @171
+    CONF_get_number                         @172
+    CONF_get_section                        @173
+    CONF_get_string                         @174
+    CONF_load                               @175
+    CONF_load_bio                           @1805
+    CONF_load_fp                            @1806
+    CRL_DIST_POINTS_free                    @1539
+    CRL_DIST_POINTS_new                     @1538
+    CRYPTO_add_lock                         @176
+    CRYPTO_dbg_free                         @177
+    CRYPTO_dbg_get_options                  @2246
+    CRYPTO_dbg_malloc                       @178
+    CRYPTO_dbg_realloc                      @179
+    CRYPTO_dbg_set_options                  @2157
+    CRYPTO_dup_ex_data                      @1025
+    CRYPTO_free                             @181
+    CRYPTO_free_ex_data                     @1004
+    CRYPTO_free_locked                      @1513
+    CRYPTO_get_add_lock_callback            @182
+    CRYPTO_get_ex_data                      @1005
+    CRYPTO_get_ex_new_index                 @1041
+    CRYPTO_get_id_callback                  @183
+    CRYPTO_get_lock_name                    @184
+    CRYPTO_get_locked_mem_functions         @1511
+    CRYPTO_get_locking_callback             @185
+    CRYPTO_get_mem_debug_functions          @2159
+    CRYPTO_get_mem_debug_options            @2248
+    CRYPTO_get_mem_functions                @186
+    CRYPTO_get_new_lockid                   @1026
+    CRYPTO_is_mem_check_on                  @2160
+    CRYPTO_lock                             @187
+    CRYPTO_malloc                           @188
+    CRYPTO_malloc_locked                    @1512
+    CRYPTO_mem_ctrl                         @189
+    CRYPTO_mem_leaks                        @190
+    CRYPTO_mem_leaks_cb                     @191
+    CRYPTO_mem_leaks_fp                     @192
+    CRYPTO_new_ex_data                      @1027
+    CRYPTO_num_locks                        @1804
+    CRYPTO_pop_info                         @2162
+    CRYPTO_push_info_                       @2163
+    CRYPTO_realloc                          @193
+    CRYPTO_remalloc                         @194
+    CRYPTO_remove_all_info                  @2158
+    CRYPTO_set_add_lock_callback            @195
+    CRYPTO_set_ex_data                      @1007
+    CRYPTO_set_id_callback                  @196
+    CRYPTO_set_locked_mem_functions         @1510
+    CRYPTO_set_locking_callback             @197
+    CRYPTO_set_mem_debug_functions          @2161
+    CRYPTO_set_mem_debug_options            @2164
+    CRYPTO_set_mem_functions                @198
+    CRYPTO_thread_id                        @199
+    DH_OpenSSL                              @1890
+    DH_check                                @200
+    DH_compute_key                          @201
+    DH_free                                 @202
+    DH_generate_key                         @203
+    DH_generate_parameters                  @204
+    DH_get_default_method                   @1892
+    DH_get_ex_data                          @1886
+    DH_get_ex_new_index                     @1887
+    DH_new                                  @205
+    DH_new_method                           @1889
+    DH_set_default_method                   @1894
+    DH_set_ex_data                          @1883
+    DH_set_method                           @1884
+    DH_size                                 @206
+    DHparams_print                          @207
+    DHparams_print_fp                       @208
+    DIRECTORYSTRING_free                    @2038
+    DIRECTORYSTRING_new                     @2137
+    DISPLAYTEXT_free                        @1998
+    DISPLAYTEXT_new                         @1907
+    DIST_POINT_NAME_free                    @1547
+    DIST_POINT_NAME_new                     @1546
+    DIST_POINT_free                         @1544
+    DIST_POINT_new                          @1542
+    DSA_OpenSSL                             @1885
+    DSA_SIG_free                            @1334
+    DSA_SIG_new                             @1333
+    DSA_do_sign                             @1335
+    DSA_do_verify                           @1336
+    DSA_dup_DH                              @1871
+    DSA_free                                @209
+    DSA_generate_key                        @210
+    DSA_generate_parameters                 @211
+    DSA_get_default_method                  @1941
+    DSA_get_ex_data                         @1895
+    DSA_get_ex_new_index                    @1891
+    DSA_new                                 @213
+    DSA_new_method                          @1888
+    DSA_print                               @214
+    DSA_print_fp                            @215
+    DSA_set_default_method                  @1989
+    DSA_set_ex_data                         @1893
+    DSA_set_method                          @1949
+    DSA_sign                                @216
+    DSA_sign_setup                          @217
+    DSA_size                                @218
+    DSA_verify                              @219
+    DSAparams_print                         @220
+    DSAparams_print_fp                      @221
+    ERR_add_error_data                      @1081
+    ERR_clear_error                         @222
+    ERR_error_string                        @223
+    ERR_free_strings                        @224
+    ERR_func_error_string                   @225
+    ERR_get_err_state_table                 @226
+    ERR_get_error                           @227
+    ERR_get_error_line                      @228
+    ERR_get_error_line_data                 @1515
+    ERR_get_next_error_library              @966
+    ERR_get_state                           @229
+    ERR_get_string_table                    @230
+    ERR_lib_error_string                    @231
+    ERR_load_ASN1_strings                   @232
+    ERR_load_BIO_strings                    @233
+    ERR_load_BN_strings                     @234
+    ERR_load_BUF_strings                    @235
+    ERR_load_CONF_strings                   @236
+    ERR_load_CRYPTO_strings                 @1009
+    ERR_load_DH_strings                     @237
+    ERR_load_DSA_strings                    @238
+    ERR_load_ERR_strings                    @239
+    ERR_load_EVP_strings                    @240
+    ERR_load_OBJ_strings                    @241
+    ERR_load_PEM_strings                    @242
+    ERR_load_PKCS12_strings                 @1300
+    ERR_load_PKCS7_strings                  @919
+    ERR_load_RAND_strings                   @2205
+    ERR_load_RSA_strings                    @244
+    ERR_load_X509V3_strings                 @1164
+    ERR_load_X509_strings                   @245
+    ERR_load_crypto_strings                 @246
+    ERR_load_strings                        @247
+    ERR_peek_error                          @248
+    ERR_peek_error_line                     @249
+    ERR_peek_error_line_data                @1516
+    ERR_print_errors                        @250
+    ERR_print_errors_fp                     @251
+    ERR_put_error                           @252
+    ERR_reason_error_string                 @253
+    ERR_remove_state                        @254
+    ERR_set_error_data                      @1082
+    EVP_BytesToKey                          @255
+    EVP_CIPHER_CTX_cleanup                  @256
+    EVP_CIPHER_CTX_init                     @961
+    EVP_CIPHER_asn1_to_param                @1083
+    EVP_CIPHER_get_asn1_iv                  @1085
+    EVP_CIPHER_param_to_asn1                @1084
+    EVP_CIPHER_set_asn1_iv                  @1086
+    EVP_CIPHER_type                         @1649
+    EVP_CipherFinal                         @257
+    EVP_CipherInit                          @258
+    EVP_CipherUpdate                        @259
+    EVP_DecodeBlock                         @260
+    EVP_DecodeFinal                         @261
+    EVP_DecodeInit                          @262
+    EVP_DecodeUpdate                        @263
+    EVP_DecryptFinal                        @264
+    EVP_DecryptInit                         @265
+    EVP_DecryptUpdate                       @266
+    EVP_DigestFinal                         @267
+    EVP_DigestInit                          @268
+    EVP_DigestUpdate                        @269
+    EVP_EncodeBlock                         @270
+    EVP_EncodeFinal                         @271
+    EVP_EncodeInit                          @272
+    EVP_EncodeUpdate                        @273
+    EVP_EncryptFinal                        @274
+    EVP_EncryptInit                         @275
+    EVP_EncryptUpdate                       @276
+    EVP_MD_CTX_copy                         @1202
+    EVP_OpenFinal                           @277
+    EVP_OpenInit                            @278
+    EVP_PBE_CipherInit                      @1650
+    EVP_PBE_alg_add                         @1322
+    EVP_PBE_cleanup                         @1324
+    EVP_PKCS82PKEY                          @1318
+    EVP_PKEY2PKCS8                          @1319
+    EVP_PKEY2PKCS8_broken                   @2244
+    EVP_PKEY_assign                         @279
+    EVP_PKEY_bits                           @1010
+    EVP_PKEY_cmp_parameters                 @967
+    EVP_PKEY_copy_parameters                @280
+    EVP_PKEY_decrypt                        @1070
+    EVP_PKEY_encrypt                        @1071
+    EVP_PKEY_free                           @281
+    EVP_PKEY_get1_DH                        @2128
+    EVP_PKEY_get1_DSA                       @1935
+    EVP_PKEY_get1_RSA                       @2034
+    EVP_PKEY_missing_parameters             @282
+    EVP_PKEY_new                            @283
+    EVP_PKEY_save_parameters                @284
+    EVP_PKEY_set1_DH                        @2107
+    EVP_PKEY_set1_DSA                       @1970
+    EVP_PKEY_set1_RSA                       @2063
+    EVP_PKEY_size                           @285
+    EVP_PKEY_type                           @286
+    EVP_SealFinal                           @287
+    EVP_SealInit                            @288
+    EVP_SignFinal                           @289
+    EVP_VerifyFinal                         @290
+    EVP_add_cipher                          @292
+    EVP_add_digest                          @293
+    EVP_bf_cbc                              @294
+    EVP_bf_cfb                              @295
+    EVP_bf_ecb                              @296
+    EVP_bf_ofb                              @297
+    EVP_cast5_cbc                           @983
+    EVP_cast5_cfb                           @984
+    EVP_cast5_ecb                           @985
+    EVP_cast5_ofb                           @986
+    EVP_cleanup                             @298
+    EVP_des_cbc                             @299
+    EVP_des_cfb                             @300
+    EVP_des_ecb                             @301
+    EVP_des_ede                             @302
+    EVP_des_ede3                            @303
+    EVP_des_ede3_cbc                        @304
+    EVP_des_ede3_cfb                        @305
+    EVP_des_ede3_ofb                        @306
+    EVP_des_ede_cbc                         @307
+    EVP_des_ede_cfb                         @308
+    EVP_des_ede_ofb                         @309
+    EVP_des_ofb                             @310
+    EVP_desx_cbc                            @311
+    EVP_dss                                 @312
+    EVP_dss1                                @313
+    EVP_enc_null                            @314
+    EVP_get_cipherbyname                    @315
+    EVP_get_digestbyname                    @316
+    EVP_get_pw_prompt                       @317
+    EVP_idea_cbc                            @318
+    EVP_idea_cfb                            @319
+    EVP_idea_ecb                            @320
+    EVP_idea_ofb                            @321
+    EVP_md2                                 @322
+    EVP_md5                                 @323
+    EVP_md_null                             @324
+    EVP_mdc2                                @942
+    EVP_rc2_40_cbc                          @959
+    EVP_rc2_64_cbc                          @1103
+    EVP_rc2_cbc                             @325
+    EVP_rc2_cfb                             @326
+    EVP_rc2_ecb                             @327
+    EVP_rc2_ofb                             @328
+    EVP_rc4                                 @329
+    EVP_rc4_40                              @960
+    EVP_rc5_32_12_16_cbc                    @1087
+    EVP_rc5_32_12_16_cfb                    @1088
+    EVP_rc5_32_12_16_ecb                    @1089
+    EVP_rc5_32_12_16_ofb                    @1090
+    EVP_read_pw_string                      @330
+    EVP_ripemd160                           @1252
+    EVP_set_pw_prompt                       @331
+    EVP_sha                                 @332
+    EVP_sha1                                @333
+    GENERAL_NAMES_free                      @1216
+    GENERAL_NAMES_new                       @1215
+    GENERAL_NAME_free                       @1214
+    GENERAL_NAME_new                        @1213
+    HMAC                                    @962
+    HMAC_Final                              @965
+    HMAC_Init                               @963
+    HMAC_Update                             @964
+    HMAC_cleanup                            @968
+    MD2                                     @334
+    MD2_Final                               @335
+    MD2_Init                                @336
+    MD2_Update                              @337
+    MD2_options                             @338
+    MD5                                     @339
+    MD5_Final                               @340
+    MD5_Init                                @341
+    MD5_Transform                           @1011
+    MD5_Update                              @342
+    MDC2                                    @343
+    MDC2_Final                              @344
+    MDC2_Init                               @345
+    MDC2_Update                             @346
+    NETSCAPE_CERT_SEQUENCE_free             @1165
+    NETSCAPE_CERT_SEQUENCE_new              @1166
+    NETSCAPE_SPKAC_free                     @347
+    NETSCAPE_SPKAC_new                      @348
+    NETSCAPE_SPKI_b64_decode                @1901
+    NETSCAPE_SPKI_b64_encode                @1899
+    NETSCAPE_SPKI_free                      @349
+    NETSCAPE_SPKI_get_pubkey                @1900
+    NETSCAPE_SPKI_new                       @350
+    NETSCAPE_SPKI_print                     @1897
+    NETSCAPE_SPKI_set_pubkey                @1898
+    NETSCAPE_SPKI_sign                      @351
+    NETSCAPE_SPKI_verify                    @352
+    NOTICEREF_free                          @1503
+    NOTICEREF_new                           @1501
+    OBJ_NAME_add                            @1101
+    OBJ_NAME_cleanup                        @1104
+    OBJ_NAME_get                            @1105
+    OBJ_NAME_init                           @1106
+    OBJ_NAME_new_index                      @1107
+    OBJ_NAME_remove                         @1108
+    OBJ_add_object                          @353
+    OBJ_bsearch                             @354
+    OBJ_cleanup                             @355
+    OBJ_cmp                                 @356
+    OBJ_create                              @357
+    OBJ_create_objects                      @997
+    OBJ_dup                                 @358
+    OBJ_ln2nid                              @359
+    OBJ_new_nid                             @360
+    OBJ_nid2ln                              @361
+    OBJ_nid2obj                             @362
+    OBJ_nid2sn                              @363
+    OBJ_obj2nid                             @364
+    OBJ_obj2txt                             @1870
+    OBJ_sn2nid                              @365
+    OBJ_txt2nid                             @366
+    OBJ_txt2obj                             @1167
+    OTHERNAME_free                          @2112
+    OTHERNAME_new                           @1999
+    OpenSSL_add_all_algorithms              @508
+    OpenSSL_add_all_ciphers                 @509
+    OpenSSL_add_all_digests                 @510
+    PBE2PARAM_free                          @1404
+    PBE2PARAM_new                           @1402
+    PBEPARAM_free                           @1313
+    PBEPARAM_new                            @1311
+    PBKDF2PARAM_free                        @1400
+    PBKDF2PARAM_new                         @1398
+    PEM_ASN1_read                           @367
+    PEM_ASN1_read_bio                       @368
+    PEM_ASN1_write                          @369
+    PEM_ASN1_write_bio                      @370
+    PEM_SealFinal                           @371
+    PEM_SealInit                            @372
+    PEM_SealUpdate                          @373
+    PEM_SignFinal                           @374
+    PEM_SignInit                            @375
+    PEM_SignUpdate                          @376
+    PEM_X509_INFO_read                      @377
+    PEM_X509_INFO_read_bio                  @378
+    PEM_X509_INFO_write_bio                 @379
+    PEM_dek_info                            @380
+    PEM_do_header                           @381
+    PEM_get_EVP_CIPHER_INFO                 @382
+    PEM_proc_type                           @383
+    PEM_read                                @384
+    PEM_read_DHparams                       @385
+    PEM_read_DSAPrivateKey                  @386
+    PEM_read_DSA_PUBKEY                     @1984
+    PEM_read_DSAparams                      @387
+    PEM_read_NETSCAPE_CERT_SEQUENCE         @1168
+    PEM_read_PKCS7                          @388
+    PEM_read_PKCS8                          @1782
+    PEM_read_PKCS8_PRIV_KEY_INFO            @1786
+    PEM_read_PUBKEY                         @2012
+    PEM_read_PrivateKey                     @389
+    PEM_read_RSAPrivateKey                  @390
+    PEM_read_RSAPublicKey                   @947
+    PEM_read_RSA_PUBKEY                     @1977
+    PEM_read_X509                           @391
+    PEM_read_X509_AUX                       @1917
+    PEM_read_X509_CRL                       @392
+    PEM_read_X509_REQ                       @393
+    PEM_read_bio                            @394
+    PEM_read_bio_DHparams                   @395
+    PEM_read_bio_DSAPrivateKey              @396
+    PEM_read_bio_DSA_PUBKEY                 @2088
+    PEM_read_bio_DSAparams                  @397
+    PEM_read_bio_NETSCAPE_CERT_SEQUENCE     @1169
+    PEM_read_bio_PKCS7                      @398
+    PEM_read_bio_PKCS8                      @1787
+    PEM_read_bio_PKCS8_PRIV_KEY_INFO        @1778
+    PEM_read_bio_PUBKEY                     @1995
+    PEM_read_bio_PrivateKey                 @399
+    PEM_read_bio_RSAPrivateKey              @400
+    PEM_read_bio_RSAPublicKey               @943
+    PEM_read_bio_RSA_PUBKEY                 @2081
+    PEM_read_bio_X509                       @401
+    PEM_read_bio_X509_AUX                   @1959
+    PEM_read_bio_X509_CRL                   @402
+    PEM_read_bio_X509_REQ                   @403
+    PEM_write                               @404
+    PEM_write_DHparams                      @405
+    PEM_write_DSAPrivateKey                 @406
+    PEM_write_DSA_PUBKEY                    @2101
+    PEM_write_DSAparams                     @407
+    PEM_write_NETSCAPE_CERT_SEQUENCE        @1170
+    PEM_write_PKCS7                         @408
+    PEM_write_PKCS8                         @1785
+    PEM_write_PKCS8PrivateKey               @1798
+    PEM_write_PKCS8PrivateKey_nid           @2165
+    PEM_write_PKCS8_PRIV_KEY_INFO           @1788
+    PEM_write_PUBKEY                        @1921
+    PEM_write_PrivateKey                    @409
+    PEM_write_RSAPrivateKey                 @410
+    PEM_write_RSAPublicKey                  @949
+    PEM_write_RSA_PUBKEY                    @2095
+    PEM_write_X509                          @411
+    PEM_write_X509_AUX                      @2039
+    PEM_write_X509_CRL                      @412
+    PEM_write_X509_REQ                      @413
+    PEM_write_X509_REQ_NEW                  @2251
+    PEM_write_bio                           @414
+    PEM_write_bio_DHparams                  @415
+    PEM_write_bio_DSAPrivateKey             @416
+    PEM_write_bio_DSA_PUBKEY                @1968
+    PEM_write_bio_DSAparams                 @417
+    PEM_write_bio_NETSCAPE_CERT_SEQUENCE    @1171
+    PEM_write_bio_PKCS7                     @418
+    PEM_write_bio_PKCS8                     @1776
+    PEM_write_bio_PKCS8PrivateKey           @1797
+    PEM_write_bio_PKCS8PrivateKey_nid       @2166
+    PEM_write_bio_PKCS8_PRIV_KEY_INFO       @1781
+    PEM_write_bio_PUBKEY                    @2117
+    PEM_write_bio_PrivateKey                @419
+    PEM_write_bio_RSAPrivateKey             @420
+    PEM_write_bio_RSAPublicKey              @944
+    PEM_write_bio_RSA_PUBKEY                @1961
+    PEM_write_bio_X509                      @421
+    PEM_write_bio_X509_AUX                  @2066
+    PEM_write_bio_X509_CRL                  @422
+    PEM_write_bio_X509_REQ                  @423
+    PEM_write_bio_X509_REQ_NEW              @2250
+    PKCS12_BAGS_free                        @1287
+    PKCS12_BAGS_new                         @1285
+    PKCS12_MAC_DATA_free                    @1295
+    PKCS12_MAC_DATA_new                     @1293
+    PKCS12_MAKE_KEYBAG                      @1263
+    PKCS12_MAKE_SHKEYBAG                    @1265
+    PKCS12_PBE_add                          @1301
+    PKCS12_PBE_keyivgen                     @1517
+    PKCS12_SAFEBAG_free                     @1299
+    PKCS12_SAFEBAG_new                      @1297
+    PKCS12_add_friendlyname_asc             @1269
+    PKCS12_add_friendlyname_uni             @1270
+    PKCS12_add_localkeyid                   @1268
+    PKCS12_create                           @1305
+    PKCS12_decrypt_d2i                      @1273
+    PKCS12_free                             @1291
+    PKCS12_gen_mac                          @1278
+    PKCS12_get_attr_gen                     @1303
+    PKCS12_get_friendlyname                 @1271
+    PKCS12_i2d_encrypt                      @1274
+    PKCS12_init                             @1275
+    PKCS12_key_gen_asc                      @1276
+    PKCS12_key_gen_uni                      @1277
+    PKCS12_new                              @1290
+    PKCS12_newpass                          @2141
+    PKCS12_pack_p7data                      @1266
+    PKCS12_pack_p7encdata                   @1267
+    PKCS12_pack_safebag                     @1262
+    PKCS12_parse                            @1304
+    PKCS12_pbe_crypt                        @1272
+    PKCS12_set_mac                          @1280
+    PKCS12_setup_mac                        @1281
+    PKCS12_verify_mac                       @1279
+    PKCS5_PBE_add                           @1775
+    PKCS5_PBE_keyivgen                      @1789
+    PKCS5_PBKDF2_HMAC_SHA1                  @1795
+    PKCS5_pbe2_set                          @1794
+    PKCS5_pbe_set                           @1323
+    PKCS5_v2_PBE_keyivgen                   @1796
+    PKCS7_DIGEST_free                       @424
+    PKCS7_DIGEST_new                        @425
+    PKCS7_ENCRYPT_free                      @426
+    PKCS7_ENCRYPT_new                       @427
+    PKCS7_ENC_CONTENT_free                  @428
+    PKCS7_ENC_CONTENT_new                   @429
+    PKCS7_ENVELOPE_free                     @430
+    PKCS7_ENVELOPE_new                      @431
+    PKCS7_ISSUER_AND_SERIAL_digest          @432
+    PKCS7_ISSUER_AND_SERIAL_free            @433
+    PKCS7_ISSUER_AND_SERIAL_new             @434
+    PKCS7_RECIP_INFO_free                   @435
+    PKCS7_RECIP_INFO_new                    @436
+    PKCS7_RECIP_INFO_set                    @1072
+    PKCS7_SIGNED_free                       @437
+    PKCS7_SIGNED_new                        @438
+    PKCS7_SIGNER_INFO_free                  @439
+    PKCS7_SIGNER_INFO_new                   @440
+    PKCS7_SIGNER_INFO_set                   @930
+    PKCS7_SIGN_ENVELOPE_free                @441
+    PKCS7_SIGN_ENVELOPE_new                 @442
+    PKCS7_add_attrib_smimecap               @2156
+    PKCS7_add_attribute                     @1138
+    PKCS7_add_certificate                   @932
+    PKCS7_add_crl                           @933
+    PKCS7_add_recipient                     @1073
+    PKCS7_add_recipient_info                @1074
+    PKCS7_add_signature                     @938
+    PKCS7_add_signed_attribute              @1139
+    PKCS7_add_signer                        @931
+    PKCS7_cert_from_signer_info             @939
+    PKCS7_content_free                      @918
+    PKCS7_content_new                       @934
+    PKCS7_ctrl                              @927
+    PKCS7_dataDecode                        @1246
+    PKCS7_dataFinal                         @1245
+    PKCS7_dataInit                          @937
+    PKCS7_dataVerify                        @936
+    PKCS7_decrypt                           @2151
+    PKCS7_digest_from_attributes            @1140
+    PKCS7_dup                               @443
+    PKCS7_encrypt                           @2146
+    PKCS7_free                              @444
+    PKCS7_get0_signers                      @2150
+    PKCS7_get_attribute                     @1141
+    PKCS7_get_issuer_and_serial             @1142
+    PKCS7_get_signed_attribute              @1143
+    PKCS7_get_signer_info                   @940
+    PKCS7_get_smimecap                      @2154
+    PKCS7_new                               @445
+    PKCS7_set_attributes                    @1153
+    PKCS7_set_cipher                        @1075
+    PKCS7_set_content                       @929
+    PKCS7_set_signed_attributes             @1154
+    PKCS7_set_type                          @928
+    PKCS7_sign                              @2155
+    PKCS7_signatureVerify                   @1845
+    PKCS7_simple_smimecap                   @2153
+    PKCS7_verify                            @2145
+    PKCS8_PRIV_KEY_INFO_free                @1317
+    PKCS8_PRIV_KEY_INFO_new                 @1315
+    PKCS8_add_keyusage                      @1302
+    PKCS8_encrypt                           @1264
+    PKCS8_set_broken                        @1320
+    PKEY_USAGE_PERIOD_free                  @1235
+    PKEY_USAGE_PERIOD_new                   @1234
+    POLICYINFO_free                         @1491
+    POLICYINFO_new                          @1489
+    POLICYQUALINFO_free                     @1495
+    POLICYQUALINFO_new                      @1493
+    RAND_SSLeay                             @1113
+    RAND_add                                @2201
+    RAND_bytes                              @464
+    RAND_cleanup                            @465
+    RAND_egd                                @2253
+    RAND_file_name                          @466
+    RAND_get_rand_method                    @1137
+    RAND_load_file                          @467
+    RAND_pseudo_bytes                       @2206
+    RAND_screen                             @468
+    RAND_seed                               @469
+    RAND_set_rand_method                    @1114
+    RAND_status                             @2254
+    RAND_write_file                         @470
+    RC2_cbc_encrypt                         @471
+    RC2_cfb64_encrypt                       @472
+    RC2_decrypt                             @995
+    RC2_ecb_encrypt                         @473
+    RC2_encrypt                             @474
+    RC2_ofb64_encrypt                       @475
+    RC2_set_key                             @476
+    RC4                                     @477
+    RC4_options                             @478
+    RC4_set_key                             @479
+    RC5_32_cbc_encrypt                      @1051
+    RC5_32_cfb64_encrypt                    @1052
+    RC5_32_decrypt                          @1050
+    RC5_32_ecb_encrypt                      @1048
+    RC5_32_encrypt                          @1049
+    RC5_32_ofb64_encrypt                    @1053
+    RC5_32_set_key                          @1047
+    RIPEMD160                               @1045
+    RIPEMD160_Final                         @1044
+    RIPEMD160_Init                          @1042
+    RIPEMD160_Transform                     @1046
+    RIPEMD160_Update                        @1043
+    RSAPrivateKey_asn1_meth                 @480
+    RSAPrivateKey_dup                       @481
+    RSAPublicKey_dup                        @482
+    RSA_PKCS1_SSLeay                        @483
+    RSA_blinding_off                        @978
+    RSA_blinding_on                         @977
+    RSA_check_key                           @1869
+    RSA_flags                               @956
+    RSA_free                                @484
+    RSA_generate_key                        @485
+    RSA_get_default_method                  @1848
+    RSA_get_ex_data                         @1029
+    RSA_get_ex_new_index                    @1030
+    RSA_get_method                          @1847
+    RSA_memory_lock                         @1115
+    RSA_new                                 @486
+    RSA_new_method                          @487
+    RSA_null_method                         @1904
+    RSA_padding_add_PKCS1_OAEP              @1226
+    RSA_padding_add_PKCS1_type_1            @1031
+    RSA_padding_add_PKCS1_type_2            @1032
+    RSA_padding_add_SSLv23                  @1033
+    RSA_padding_add_none                    @1034
+    RSA_padding_check_PKCS1_OAEP            @1227
+    RSA_padding_check_PKCS1_type_1          @1035
+    RSA_padding_check_PKCS1_type_2          @1036
+    RSA_padding_check_SSLv23                @1037
+    RSA_padding_check_none                  @1038
+    RSA_print                               @488
+    RSA_print_fp                            @489
+    RSA_private_decrypt                     @490
+    RSA_private_encrypt                     @491
+    RSA_public_decrypt                      @492
+    RSA_public_encrypt                      @493
+    RSA_set_default_method                  @494
+    RSA_set_ex_data                         @1028
+    RSA_set_method                          @1846
+    RSA_sign                                @495
+    RSA_sign_ASN1_OCTET_STRING              @496
+    RSA_size                                @497
+    RSA_verify                              @498
+    RSA_verify_ASN1_OCTET_STRING            @499
+    SHA                                     @500
+    SHA1                                    @501
+    SHA1_Final                              @502
+    SHA1_Init                               @503
+    SHA1_Transform                          @1012
+    SHA1_Update                             @504
+    SHA_Final                               @505
+    SHA_Init                                @506
+    SHA_Transform                           @1013
+    SHA_Update                              @507
+    SMIME_crlf_copy                         @2148
+    SMIME_read_PKCS7                        @2143
+    SMIME_text                              @2152
+    SMIME_write_PKCS7                       @2142
+    SXNETID_free                            @1332
+    SXNETID_new                             @1331
+    SXNET_add_id_INTEGER                    @1479
+    SXNET_add_id_asc                        @1477
+    SXNET_add_id_ulong                      @1478
+    SXNET_free                              @1328
+    SXNET_get_id_INTEGER                    @1482
+    SXNET_get_id_asc                        @1480
+    SXNET_get_id_ulong                      @1481
+    SXNET_new                               @1327
+    TXT_DB_create_index                     @511
+    TXT_DB_free                             @512
+    TXT_DB_get_by_index                     @513
+    TXT_DB_insert                           @514
+    TXT_DB_read                             @515
+    TXT_DB_write                            @516
+    USERNOTICE_free                         @1499
+    USERNOTICE_new                          @1497
+    UTF8_getc                               @1903
+    UTF8_putc                               @1902
+    X509V3_EXT_CRL_add_conf                 @1247
+    X509V3_EXT_REQ_add_conf                 @1896
+    X509V3_EXT_add                          @1172
+    X509V3_EXT_add_alias                    @1173
+    X509V3_EXT_add_conf                     @1174
+    X509V3_EXT_add_list                     @1648
+    X509V3_EXT_cleanup                      @1175
+    X509V3_EXT_conf                         @1176
+    X509V3_EXT_conf_nid                     @1177
+    X509V3_EXT_d2i                          @1238
+    X509V3_EXT_get                          @1178
+    X509V3_EXT_get_nid                      @1179
+    X509V3_EXT_i2d                          @1646
+    X509V3_EXT_print                        @1180
+    X509V3_EXT_print_fp                     @1181
+    X509V3_EXT_val_prn                      @1647
+    X509V3_add_standard_extensions          @1182
+    X509V3_add_value                        @1183
+    X509V3_add_value_bool                   @1184
+    X509V3_add_value_bool_nf                @1651
+    X509V3_add_value_int                    @1185
+    X509V3_add_value_uchar                  @1549
+    X509V3_conf_free                        @1186
+    X509V3_get_d2i                          @2026
+    X509V3_get_section                      @1505
+    X509V3_get_string                       @1504
+    X509V3_get_value_bool                   @1187
+    X509V3_get_value_int                    @1188
+    X509V3_parse_list                       @1189
+    X509V3_section_free                     @1507
+    X509V3_set_conf_lhash                   @1483
+    X509V3_set_ctx                          @1508
+    X509V3_string_free                      @1506
+    X509_ALGOR_dup                          @1518
+    X509_ALGOR_free                         @517
+    X509_ALGOR_new                          @518
+    X509_ATTRIBUTE_count                    @2193
+    X509_ATTRIBUTE_create                   @1155
+    X509_ATTRIBUTE_create_by_NID            @2191
+    X509_ATTRIBUTE_create_by_OBJ            @2194
+    X509_ATTRIBUTE_create_by_txt            @2218
+    X509_ATTRIBUTE_dup                      @1156
+    X509_ATTRIBUTE_free                     @519
+    X509_ATTRIBUTE_get0_data                @2198
+    X509_ATTRIBUTE_get0_object              @2195
+    X509_ATTRIBUTE_get0_type                @2187
+    X509_ATTRIBUTE_new                      @520
+    X509_ATTRIBUTE_set1_data                @2188
+    X509_ATTRIBUTE_set1_object              @2192
+    X509_CERT_AUX_free                      @1926
+    X509_CERT_AUX_new                       @2001
+    X509_CERT_AUX_print                     @1982
+    X509_CINF_free                          @521
+    X509_CINF_new                           @522
+    X509_CRL_INFO_free                      @523
+    X509_CRL_INFO_new                       @524
+    X509_CRL_add_ext                        @525
+    X509_CRL_cmp                            @526
+    X509_CRL_delete_ext                     @527
+    X509_CRL_dup                            @528
+    X509_CRL_free                           @529
+    X509_CRL_get_ext                        @530
+    X509_CRL_get_ext_by_NID                 @531
+    X509_CRL_get_ext_by_OBJ                 @532
+    X509_CRL_get_ext_by_critical            @533
+    X509_CRL_get_ext_count                  @534
+    X509_CRL_get_ext_d2i                    @2009
+    X509_CRL_new                            @535
+    X509_CRL_print                          @1229
+    X509_CRL_print_fp                       @1228
+    X509_CRL_sign                           @536
+    X509_CRL_verify                         @537
+    X509_EXTENSION_create_by_NID            @538
+    X509_EXTENSION_create_by_OBJ            @539
+    X509_EXTENSION_dup                      @540
+    X509_EXTENSION_free                     @541
+    X509_EXTENSION_get_critical             @542
+    X509_EXTENSION_get_data                 @543
+    X509_EXTENSION_get_object               @544
+    X509_EXTENSION_new                      @545
+    X509_EXTENSION_set_critical             @546
+    X509_EXTENSION_set_data                 @547
+    X509_EXTENSION_set_object               @548
+    X509_INFO_free                          @549
+    X509_INFO_new                           @550
+    X509_LOOKUP_by_alias                    @551
+    X509_LOOKUP_by_fingerprint              @552
+    X509_LOOKUP_by_issuer_serial            @553
+    X509_LOOKUP_by_subject                  @554
+    X509_LOOKUP_ctrl                        @555
+    X509_LOOKUP_file                        @556
+    X509_LOOKUP_free                        @557
+    X509_LOOKUP_hash_dir                    @558
+    X509_LOOKUP_init                        @559
+    X509_LOOKUP_new                         @560
+    X509_LOOKUP_shutdown                    @561
+    X509_NAME_ENTRY_create_by_NID           @562
+    X509_NAME_ENTRY_create_by_OBJ           @563
+    X509_NAME_ENTRY_create_by_txt           @2071
+    X509_NAME_ENTRY_dup                     @564
+    X509_NAME_ENTRY_free                    @565
+    X509_NAME_ENTRY_get_data                @566
+    X509_NAME_ENTRY_get_object              @567
+    X509_NAME_ENTRY_new                     @568
+    X509_NAME_ENTRY_set_data                @569
+    X509_NAME_ENTRY_set_object              @570
+    X509_NAME_add_entry                     @571
+    X509_NAME_add_entry_by_NID              @1914
+    X509_NAME_add_entry_by_OBJ              @2008
+    X509_NAME_add_entry_by_txt              @1912
+    X509_NAME_cmp                           @572
+    X509_NAME_delete_entry                  @573
+    X509_NAME_digest                        @574
+    X509_NAME_dup                           @575
+    X509_NAME_entry_count                   @576
+    X509_NAME_free                          @577
+    X509_NAME_get_entry                     @578
+    X509_NAME_get_index_by_NID              @579
+    X509_NAME_get_index_by_OBJ              @580
+    X509_NAME_get_text_by_NID               @581
+    X509_NAME_get_text_by_OBJ               @582
+    X509_NAME_hash                          @583
+    X509_NAME_new                           @584
+    X509_NAME_oneline                       @585
+    X509_NAME_print                         @586
+    X509_NAME_set                           @587
+    X509_OBJECT_free_contents               @588
+    X509_OBJECT_retrieve_by_subject         @589
+    X509_OBJECT_up_ref_count                @590
+    X509_PKEY_free                          @591
+    X509_PKEY_new                           @592
+    X509_PUBKEY_free                        @593
+    X509_PUBKEY_get                         @594
+    X509_PUBKEY_new                         @595
+    X509_PUBKEY_set                         @596
+    X509_PURPOSE_add                        @2090
+    X509_PURPOSE_cleanup                    @2119
+    X509_PURPOSE_get0                       @1915
+    X509_PURPOSE_get0_name                  @2011
+    X509_PURPOSE_get0_sname                 @2105
+    X509_PURPOSE_get_by_id                  @1990
+    X509_PURPOSE_get_by_sname               @1952
+    X509_PURPOSE_get_count                  @2067
+    X509_PURPOSE_get_id                     @1997
+    X509_PURPOSE_get_trust                  @2022
+    X509_REQ_INFO_free                      @597
+    X509_REQ_INFO_new                       @598
+    X509_REQ_add1_attr                      @2214
+    X509_REQ_add1_attr_by_NID               @2209
+    X509_REQ_add1_attr_by_OBJ               @2212
+    X509_REQ_add1_attr_by_txt               @2217
+    X509_REQ_add_extensions                 @1881
+    X509_REQ_add_extensions_nid             @1879
+    X509_REQ_delete_attr                    @2215
+    X509_REQ_dup                            @599
+    X509_REQ_extension_nid                  @1875
+    X509_REQ_free                           @600
+    X509_REQ_get_attr                       @2208
+    X509_REQ_get_attr_by_NID                @2207
+    X509_REQ_get_attr_by_OBJ                @2210
+    X509_REQ_get_attr_count                 @2213
+    X509_REQ_get_extension_nids             @1877
+    X509_REQ_get_extensions                 @1872
+    X509_REQ_get_pubkey                     @601
+    X509_REQ_new                            @602
+    X509_REQ_print                          @603
+    X509_REQ_print_fp                       @604
+    X509_REQ_set_extension_nids             @1873
+    X509_REQ_set_pubkey                     @605
+    X509_REQ_set_subject_name               @606
+    X509_REQ_set_version                    @607
+    X509_REQ_sign                           @608
+    X509_REQ_to_X509                        @609
+    X509_REQ_verify                         @610
+    X509_REVOKED_add_ext                    @611
+    X509_REVOKED_delete_ext                 @612
+    X509_REVOKED_free                       @613
+    X509_REVOKED_get_ext                    @614
+    X509_REVOKED_get_ext_by_NID             @615
+    X509_REVOKED_get_ext_by_OBJ             @616
+    X509_REVOKED_get_ext_by_critical        @617
+    X509_REVOKED_get_ext_count              @618
+    X509_REVOKED_get_ext_d2i                @1909
+    X509_REVOKED_new                        @619
+    X509_SIG_free                           @620
+    X509_SIG_new                            @621
+    X509_STORE_CTX_cleanup                  @622
+    X509_STORE_CTX_free                     @1969
+    X509_STORE_CTX_get1_chain               @2204
+    X509_STORE_CTX_get_chain                @1014
+    X509_STORE_CTX_get_current_cert         @1015
+    X509_STORE_CTX_get_error                @1016
+    X509_STORE_CTX_get_error_depth          @1017
+    X509_STORE_CTX_get_ex_data              @1018
+    X509_STORE_CTX_get_ex_new_index         @1100
+    X509_STORE_CTX_init                     @623
+    X509_STORE_CTX_new                      @2033
+    X509_STORE_CTX_purpose_inherit          @1976
+    X509_STORE_CTX_set_cert                 @1020
+    X509_STORE_CTX_set_chain                @1021
+    X509_STORE_CTX_set_error                @1022
+    X509_STORE_CTX_set_ex_data              @1023
+    X509_STORE_CTX_set_purpose              @2064
+    X509_STORE_CTX_set_trust                @2030
+    X509_STORE_add_cert                     @624
+    X509_STORE_add_crl                      @957
+    X509_STORE_add_lookup                   @625
+    X509_STORE_free                         @626
+    X509_STORE_get_by_subject               @627
+    X509_STORE_load_locations               @628
+    X509_STORE_new                          @629
+    X509_STORE_set_default_paths            @630
+    X509_TRUST_add                          @1931
+    X509_TRUST_cleanup                      @2007
+    X509_TRUST_get0                         @2047
+    X509_TRUST_get0_name                    @2046
+    X509_TRUST_get_by_id                    @2021
+    X509_TRUST_get_count                    @2110
+    X509_TRUST_get_flags                    @2056
+    X509_TRUST_get_trust                    @2055
+    X509_TRUST_set_default                  @2185
+    X509_VAL_free                           @631
+    X509_VAL_new                            @632
+    X509_add1_reject_object                 @2082
+    X509_add1_trust_object                  @2140
+    X509_add_ext                            @633
+    X509_alias_get0                         @2074
+    X509_alias_set1                         @1933
+    X509_asn1_meth                          @634
+    X509_certificate_type                   @635
+    X509_check_private_key                  @636
+    X509_check_purpose                      @2051
+    X509_check_trust                        @2083
+    X509_cmp                                @2135
+    X509_cmp_current_time                   @637
+    X509_delete_ext                         @638
+    X509_digest                             @639
+    X509_dup                                @640
+    X509_find_by_issuer_and_serial          @920
+    X509_find_by_subject                    @921
+    X509_free                               @641
+    X509_get_default_cert_area              @642
+    X509_get_default_cert_dir               @643
+    X509_get_default_cert_dir_env           @644
+    X509_get_default_cert_file              @645
+    X509_get_default_cert_file_env          @646
+    X509_get_default_private_dir            @647
+    X509_get_ex_data                        @1950
+    X509_get_ex_new_index                   @2019
+    X509_get_ext                            @648
+    X509_get_ext_by_NID                     @649
+    X509_get_ext_by_OBJ                     @650
+    X509_get_ext_by_critical                @651
+    X509_get_ext_count                      @652
+    X509_get_ext_d2i                        @1958
+    X509_get_issuer_name                    @653
+    X509_get_pubkey                         @654
+    X509_get_pubkey_parameters              @655
+    X509_get_serialNumber                   @656
+    X509_get_subject_name                   @657
+    X509_gmtime_adj                         @658
+    X509_issuer_and_serial_cmp              @659
+    X509_issuer_and_serial_hash             @660
+    X509_issuer_name_cmp                    @661
+    X509_issuer_name_hash                   @662
+    X509_load_cert_crl_file                 @1972
+    X509_load_cert_file                     @663
+    X509_load_crl_file                      @958
+    X509_new                                @664
+    X509_print                              @665
+    X509_print_fp                           @666
+    X509_reject_clear                       @2184
+    X509_set_ex_data                        @1910
+    X509_set_issuer_name                    @667
+    X509_set_notAfter                       @668
+    X509_set_notBefore                      @669
+    X509_set_pubkey                         @670
+    X509_set_serialNumber                   @671
+    X509_set_subject_name                   @672
+    X509_set_version                        @673
+    X509_sign                               @674
+    X509_subject_name_cmp                   @675
+    X509_subject_name_hash                  @676
+    X509_to_X509_REQ                        @677
+    X509_trust_clear                        @1928
+    X509_verify                             @678
+    X509_verify_cert                        @679
+    X509_verify_cert_error_string           @680
+    X509at_add1_attr                        @2197
+    X509at_add1_attr_by_NID                 @2211
+    X509at_add1_attr_by_OBJ                 @2216
+    X509at_add1_attr_by_txt                 @2219
+    X509at_delete_attr                      @2199
+    X509at_get_attr                         @2189
+    X509at_get_attr_by_NID                  @2196
+    X509at_get_attr_by_OBJ                  @2200
+    X509at_get_attr_count                   @2190
+    X509v3_add_ext                          @681
+    X509v3_delete_ext                       @688
+    X509v3_get_ext                          @689
+    X509v3_get_ext_by_NID                   @690
+    X509v3_get_ext_by_OBJ                   @691
+    X509v3_get_ext_by_critical              @692
+    X509v3_get_ext_count                    @693
+    a2d_ASN1_OBJECT                         @699
+    a2i_ASN1_ENUMERATED                     @1210
+    a2i_ASN1_INTEGER                        @700
+    a2i_ASN1_STRING                         @701
+    asc2uni                                 @1282
+    asn1_Finish                             @702
+    asn1_GetSequence                        @703
+    asn1_add_error                          @1091
+    bn_add_words                            @1039
+    bn_div_words                            @704
+    bn_expand2                              @705
+    bn_mul_add_words                        @706
+    bn_mul_words                            @707
+    bn_sqr_words                            @710
+    bn_sub_words                            @1116
+    crypt                                   @711
+    d2i_ACCESS_DESCRIPTION                  @1927
+    d2i_ASN1_BIT_STRING                     @712
+    d2i_ASN1_BMPSTRING                      @1092
+    d2i_ASN1_BOOLEAN                        @713
+    d2i_ASN1_ENUMERATED                     @1204
+    d2i_ASN1_GENERALIZEDTIME                @1190
+    d2i_ASN1_HEADER                         @714
+    d2i_ASN1_IA5STRING                      @715
+    d2i_ASN1_INTEGER                        @716
+    d2i_ASN1_NULL                           @2169
+    d2i_ASN1_OBJECT                         @717
+    d2i_ASN1_OCTET_STRING                   @718
+    d2i_ASN1_PRINTABLE                      @719
+    d2i_ASN1_PRINTABLESTRING                @720
+    d2i_ASN1_SET                            @721
+    d2i_ASN1_SET_OF_ACCESS_DESCRIPTION      @2024
+    d2i_ASN1_SET_OF_ASN1_OBJECT             @1844
+    d2i_ASN1_SET_OF_ASN1_TYPE               @1589
+    d2i_ASN1_SET_OF_DIST_POINT              @1535
+    d2i_ASN1_SET_OF_GENERAL_NAME            @1421
+    d2i_ASN1_SET_OF_PKCS7_RECIP_INFO        @1753
+    d2i_ASN1_SET_OF_PKCS7_SIGNER_INFO       @1748
+    d2i_ASN1_SET_OF_POLICYINFO              @1475
+    d2i_ASN1_SET_OF_POLICYQUALINFO          @1457
+    d2i_ASN1_SET_OF_SXNETID                 @1439
+    d2i_ASN1_SET_OF_X509                    @1379
+    d2i_ASN1_SET_OF_X509_ALGOR              @1696
+    d2i_ASN1_SET_OF_X509_ATTRIBUTE          @1555
+    d2i_ASN1_SET_OF_X509_CRL                @1702
+    d2i_ASN1_SET_OF_X509_EXTENSION          @1567
+    d2i_ASN1_SET_OF_X509_NAME_ENTRY         @1574
+    d2i_ASN1_SET_OF_X509_REVOKED            @1674
+    d2i_ASN1_T61STRING                      @722
+    d2i_ASN1_TIME                           @1191
+    d2i_ASN1_TYPE                           @723
+    d2i_ASN1_UINTEGER                       @1652
+    d2i_ASN1_UTCTIME                        @724
+    d2i_ASN1_UTF8STRING                     @1342
+    d2i_ASN1_VISIBLESTRING                  @1340
+    d2i_ASN1_bytes                          @725
+    d2i_ASN1_type_bytes                     @726
+    d2i_AUTHORITY_INFO_ACCESS               @1918
+    d2i_AUTHORITY_KEYID                     @1255
+    d2i_AutoPrivateKey                      @2186
+    d2i_BASIC_CONSTRAINTS                   @1192
+    d2i_CERTIFICATEPOLICIES                 @1487
+    d2i_CRL_DIST_POINTS                     @1540
+    d2i_DHparams                            @727
+    d2i_DIRECTORYSTRING                     @1344
+    d2i_DISPLAYTEXT                         @1346
+    d2i_DIST_POINT                          @1543
+    d2i_DIST_POINT_NAME                     @1548
+    d2i_DSAPrivateKey                       @728
+    d2i_DSAPrivateKey_bio                   @729
+    d2i_DSAPrivateKey_fp                    @730
+    d2i_DSAPublicKey                        @731
+    d2i_DSA_PUBKEY                          @2050
+    d2i_DSA_PUBKEY_bio                      @2093
+    d2i_DSA_PUBKEY_fp                       @2041
+    d2i_DSA_SIG                             @1337
+    d2i_DSAparams                           @732
+    d2i_GENERAL_NAME                        @1212
+    d2i_GENERAL_NAMES                       @1217
+    d2i_NETSCAPE_CERT_SEQUENCE              @1193
+    d2i_NETSCAPE_SPKAC                      @733
+    d2i_NETSCAPE_SPKI                       @734
+    d2i_NOTICEREF                           @1502
+    d2i_Netscape_RSA                        @735
+    d2i_Netscape_RSA_2                      @1040
+    d2i_OTHERNAME                           @2096
+    d2i_PBE2PARAM                           @1403
+    d2i_PBEPARAM                            @1312
+    d2i_PBKDF2PARAM                         @1399
+    d2i_PKCS12                              @1289
+    d2i_PKCS12_BAGS                         @1286
+    d2i_PKCS12_MAC_DATA                     @1294
+    d2i_PKCS12_SAFEBAG                      @1298
+    d2i_PKCS12_bio                          @1308
+    d2i_PKCS12_fp                           @1309
+    d2i_PKCS7                               @736
+    d2i_PKCS7_DIGEST                        @737
+    d2i_PKCS7_ENCRYPT                       @738
+    d2i_PKCS7_ENC_CONTENT                   @739
+    d2i_PKCS7_ENVELOPE                      @740
+    d2i_PKCS7_ISSUER_AND_SERIAL             @741
+    d2i_PKCS7_RECIP_INFO                    @742
+    d2i_PKCS7_SIGNED                        @743
+    d2i_PKCS7_SIGNER_INFO                   @744
+    d2i_PKCS7_SIGN_ENVELOPE                 @745
+    d2i_PKCS7_bio                           @746
+    d2i_PKCS7_fp                            @747
+    d2i_PKCS8PrivateKey_bio                 @2167
+    d2i_PKCS8PrivateKey_fp                  @2175
+    d2i_PKCS8_PRIV_KEY_INFO                 @1316
+    d2i_PKCS8_PRIV_KEY_INFO_bio             @1783
+    d2i_PKCS8_PRIV_KEY_INFO_fp              @1780
+    d2i_PKCS8_bio                           @1779
+    d2i_PKCS8_fp                            @1784
+    d2i_PKEY_USAGE_PERIOD                   @1233
+    d2i_POLICYINFO                          @1490
+    d2i_POLICYQUALINFO                      @1494
+    d2i_PUBKEY                              @2054
+    d2i_PrivateKey                          @748
+    d2i_PrivateKey_bio                      @2181
+    d2i_PrivateKey_fp                       @2182
+    d2i_PublicKey                           @749
+    d2i_RSAPrivateKey                       @750
+    d2i_RSAPrivateKey_bio                   @751
+    d2i_RSAPrivateKey_fp                    @752
+    d2i_RSAPublicKey                        @753
+    d2i_RSAPublicKey_bio                    @945
+    d2i_RSAPublicKey_fp                     @952
+    d2i_RSA_PUBKEY                          @2044
+    d2i_RSA_PUBKEY_bio                      @2053
+    d2i_RSA_PUBKEY_fp                       @1964
+    d2i_SXNET                               @1326
+    d2i_SXNETID                             @1330
+    d2i_USERNOTICE                          @1498
+    d2i_X509                                @754
+    d2i_X509_ALGOR                          @755
+    d2i_X509_ATTRIBUTE                      @756
+    d2i_X509_AUX                            @1980
+    d2i_X509_CERT_AUX                       @2115
+    d2i_X509_CINF                           @757
+    d2i_X509_CRL                            @758
+    d2i_X509_CRL_INFO                       @759
+    d2i_X509_CRL_bio                        @760
+    d2i_X509_CRL_fp                         @761
+    d2i_X509_EXTENSION                      @762
+    d2i_X509_NAME                           @763
+    d2i_X509_NAME_ENTRY                     @764
+    d2i_X509_PKEY                           @765
+    d2i_X509_PUBKEY                         @766
+    d2i_X509_REQ                            @767
+    d2i_X509_REQ_INFO                       @768
+    d2i_X509_REQ_bio                        @769
+    d2i_X509_REQ_fp                         @770
+    d2i_X509_REVOKED                        @771
+    d2i_X509_SIG                            @772
+    d2i_X509_VAL                            @773
+    d2i_X509_bio                            @774
+    d2i_X509_fp                             @775
+    d2i_ext_ku                              @1194
+    des_cbc_cksum                           @777
+    des_cbc_encrypt                         @778
+    des_cblock_print_file                   @779
+    des_cfb64_encrypt                       @780
+    des_cfb_encrypt                         @781
+    des_crypt                               @2249
+    des_decrypt3                            @782
+    des_ecb3_encrypt                        @783
+    des_ecb_encrypt                         @784
+    des_ede3_cbc_encrypt                    @785
+    des_ede3_cbcm_encrypt                   @1225
+    des_ede3_cfb64_encrypt                  @786
+    des_ede3_ofb64_encrypt                  @787
+    des_enc_read                            @788
+    des_enc_write                           @789
+    des_encrypt                             @790
+    des_encrypt2                            @791
+    des_encrypt3                            @792
+    des_fcrypt                              @793
+    des_is_weak_key                         @794
+    des_key_sched                           @795
+    des_ncbc_encrypt                        @796
+    des_ofb64_encrypt                       @797
+    des_ofb_encrypt                         @798
+    des_options                             @799
+    des_pcbc_encrypt                        @800
+    des_quad_cksum                          @801
+    des_random_key                          @802
+    des_random_seed                         @803
+    des_read_2passwords                     @804
+    des_read_password                       @805
+    des_read_pw                             @806
+    des_read_pw_string                      @807
+    des_set_key                             @808
+    des_set_key_checked                     @2144
+    des_set_key_unchecked                   @2147
+    des_set_odd_parity                      @809
+    des_string_to_2keys                     @810
+    des_string_to_key                       @811
+    des_xcbc_encrypt                        @812
+    des_xwhite_in2out                       @813
+    ext_ku_free                             @1195
+    ext_ku_new                              @1196
+    hex_to_string                           @1223
+    i2a_ASN1_ENUMERATED                     @1209
+    i2a_ASN1_INTEGER                        @815
+    i2a_ASN1_OBJECT                         @816
+    i2a_ASN1_STRING                         @817
+    i2d_ACCESS_DESCRIPTION                  @2077
+    i2d_ASN1_BIT_STRING                     @818
+    i2d_ASN1_BMPSTRING                      @1093
+    i2d_ASN1_BOOLEAN                        @819
+    i2d_ASN1_ENUMERATED                     @1203
+    i2d_ASN1_GENERALIZEDTIME                @1197
+    i2d_ASN1_HEADER                         @820
+    i2d_ASN1_IA5STRING                      @821
+    i2d_ASN1_INTEGER                        @822
+    i2d_ASN1_NULL                           @2173
+    i2d_ASN1_OBJECT                         @823
+    i2d_ASN1_OCTET_STRING                   @824
+    i2d_ASN1_PRINTABLE                      @825
+    i2d_ASN1_PRINTABLESTRING                @2149
+    i2d_ASN1_SET                            @826
+    i2d_ASN1_SET_OF_ACCESS_DESCRIPTION      @1945
+    i2d_ASN1_SET_OF_ASN1_OBJECT             @1837
+    i2d_ASN1_SET_OF_ASN1_TYPE               @1560
+    i2d_ASN1_SET_OF_DIST_POINT              @1536
+    i2d_ASN1_SET_OF_GENERAL_NAME            @1422
+    i2d_ASN1_SET_OF_PKCS7_RECIP_INFO        @1738
+    i2d_ASN1_SET_OF_PKCS7_SIGNER_INFO       @1723
+    i2d_ASN1_SET_OF_POLICYINFO              @1476
+    i2d_ASN1_SET_OF_POLICYQUALINFO          @1458
+    i2d_ASN1_SET_OF_SXNETID                 @1440
+    i2d_ASN1_SET_OF_X509                    @1380
+    i2d_ASN1_SET_OF_X509_ALGOR              @1682
+    i2d_ASN1_SET_OF_X509_ATTRIBUTE          @1615
+    i2d_ASN1_SET_OF_X509_CRL                @1685
+    i2d_ASN1_SET_OF_X509_EXTENSION          @1624
+    i2d_ASN1_SET_OF_X509_NAME_ENTRY         @1633
+    i2d_ASN1_SET_OF_X509_REVOKED            @1661
+    i2d_ASN1_TIME                           @1198
+    i2d_ASN1_TYPE                           @827
+    i2d_ASN1_UTCTIME                        @828
+    i2d_ASN1_UTF8STRING                     @1341
+    i2d_ASN1_VISIBLESTRING                  @1339
+    i2d_ASN1_bytes                          @829
+    i2d_AUTHORITY_INFO_ACCESS               @2062
+    i2d_AUTHORITY_KEYID                     @1254
+    i2d_BASIC_CONSTRAINTS                   @1199
+    i2d_CERTIFICATEPOLICIES                 @1484
+    i2d_CRL_DIST_POINTS                     @1537
+    i2d_DHparams                            @830
+    i2d_DIRECTORYSTRING                     @1343
+    i2d_DISPLAYTEXT                         @1345
+    i2d_DIST_POINT                          @1541
+    i2d_DIST_POINT_NAME                     @1545
+    i2d_DSAPrivateKey                       @831
+    i2d_DSAPrivateKey_bio                   @832
+    i2d_DSAPrivateKey_fp                    @833
+    i2d_DSAPublicKey                        @834
+    i2d_DSA_PUBKEY                          @1981
+    i2d_DSA_PUBKEY_bio                      @2014
+    i2d_DSA_PUBKEY_fp                       @1971
+    i2d_DSA_SIG                             @1338
+    i2d_DSAparams                           @835
+    i2d_GENERAL_NAME                        @1211
+    i2d_GENERAL_NAMES                       @1218
+    i2d_NETSCAPE_CERT_SEQUENCE              @1200
+    i2d_NETSCAPE_SPKAC                      @836
+    i2d_NETSCAPE_SPKI                       @837
+    i2d_NOTICEREF                           @1500
+    i2d_Netscape_RSA                        @838
+    i2d_OTHERNAME                           @2015
+    i2d_PBE2PARAM                           @1401
+    i2d_PBEPARAM                            @1310
+    i2d_PBKDF2PARAM                         @1397
+    i2d_PKCS12                              @1288
+    i2d_PKCS12_BAGS                         @1284
+    i2d_PKCS12_MAC_DATA                     @1292
+    i2d_PKCS12_SAFEBAG                      @1296
+    i2d_PKCS12_bio                          @1306
+    i2d_PKCS12_fp                           @1307
+    i2d_PKCS7                               @839
+    i2d_PKCS7_DIGEST                        @840
+    i2d_PKCS7_ENCRYPT                       @841
+    i2d_PKCS7_ENC_CONTENT                   @842
+    i2d_PKCS7_ENVELOPE                      @843
+    i2d_PKCS7_ISSUER_AND_SERIAL             @844
+    i2d_PKCS7_RECIP_INFO                    @845
+    i2d_PKCS7_SIGNED                        @846
+    i2d_PKCS7_SIGNER_INFO                   @847
+    i2d_PKCS7_SIGN_ENVELOPE                 @848
+    i2d_PKCS7_bio                           @849
+    i2d_PKCS7_fp                            @850
+    i2d_PKCS8PrivateKeyInfo_bio             @2178
+    i2d_PKCS8PrivateKeyInfo_fp              @2177
+    i2d_PKCS8PrivateKey_bio                 @2171
+    i2d_PKCS8PrivateKey_fp                  @2172
+    i2d_PKCS8PrivateKey_nid_bio             @2176
+    i2d_PKCS8PrivateKey_nid_fp              @2174
+    i2d_PKCS8_PRIV_KEY_INFO                 @1314
+    i2d_PKCS8_PRIV_KEY_INFO_bio             @1792
+    i2d_PKCS8_PRIV_KEY_INFO_fp              @1791
+    i2d_PKCS8_bio                           @1790
+    i2d_PKCS8_fp                            @1777
+    i2d_PKEY_USAGE_PERIOD                   @1232
+    i2d_POLICYINFO                          @1488
+    i2d_POLICYQUALINFO                      @1492
+    i2d_PUBKEY                              @1987
+    i2d_PrivateKey                          @851
+    i2d_PrivateKey_bio                      @2183
+    i2d_PrivateKey_fp                       @2180
+    i2d_PublicKey                           @852
+    i2d_RSAPrivateKey                       @853
+    i2d_RSAPrivateKey_bio                   @854
+    i2d_RSAPrivateKey_fp                    @855
+    i2d_RSAPublicKey                        @856
+    i2d_RSAPublicKey_bio                    @946
+    i2d_RSAPublicKey_fp                     @954
+    i2d_RSA_PUBKEY                          @1974
+    i2d_RSA_PUBKEY_bio                      @1985
+    i2d_RSA_PUBKEY_fp                       @2113
+    i2d_SXNET                               @1325
+    i2d_SXNETID                             @1329
+    i2d_USERNOTICE                          @1496
+    i2d_X509                                @857
+    i2d_X509_ALGOR                          @858
+    i2d_X509_ATTRIBUTE                      @859
+    i2d_X509_AUX                            @2132
+    i2d_X509_CERT_AUX                       @2028
+    i2d_X509_CINF                           @860
+    i2d_X509_CRL                            @861
+    i2d_X509_CRL_INFO                       @862
+    i2d_X509_CRL_bio                        @863
+    i2d_X509_CRL_fp                         @864
+    i2d_X509_EXTENSION                      @865
+    i2d_X509_NAME                           @866
+    i2d_X509_NAME_ENTRY                     @867
+    i2d_X509_PKEY                           @868
+    i2d_X509_PUBKEY                         @869
+    i2d_X509_REQ                            @870
+    i2d_X509_REQ_INFO                       @871
+    i2d_X509_REQ_bio                        @872
+    i2d_X509_REQ_fp                         @873
+    i2d_X509_REVOKED                        @874
+    i2d_X509_SIG                            @875
+    i2d_X509_VAL                            @876
+    i2d_X509_bio                            @877
+    i2d_X509_fp                             @878
+    i2d_ext_ku                              @1201
+    i2s_ASN1_ENUMERATED                     @1241
+    i2s_ASN1_ENUMERATED_TABLE               @1242
+    i2s_ASN1_INTEGER                        @1237
+    i2s_ASN1_OCTET_STRING                   @1220
+    i2t_ASN1_OBJECT                         @979
+    i2v_GENERAL_NAME                        @1230
+    i2v_GENERAL_NAMES                       @1219
+    idea_cbc_encrypt                        @879
+    idea_cfb64_encrypt                      @880
+    idea_ecb_encrypt                        @881
+    idea_encrypt                            @882
+    idea_ofb64_encrypt                      @883
+    idea_options                            @884
+    idea_set_decrypt_key                    @885
+    idea_set_encrypt_key                    @886
+    lh_delete                               @887
+    lh_doall                                @888
+    lh_doall_arg                            @889
+    lh_free                                 @890
+    lh_insert                               @891
+    lh_new                                  @892
+    lh_node_stats                           @893
+    lh_node_stats_bio                       @894
+    lh_node_usage_stats                     @895
+    lh_node_usage_stats_bio                 @896
+    lh_retrieve                             @897
+    lh_stats                                @898
+    lh_stats_bio                            @899
+    lh_strhash                              @900
+    ms_time_cmp                             @1151
+    ms_time_diff                            @1148
+    ms_time_free                            @1150
+    ms_time_get                             @1152
+    ms_time_new                             @1149
+    name_cmp                                @1239
+    s2i_ASN1_INTEGER                        @1509
+    s2i_ASN1_OCTET_STRING                   @1221
+    sk_ACCESS_DESCRIPTION_delete            @1923
+    sk_ACCESS_DESCRIPTION_delete_ptr        @2086
+    sk_ACCESS_DESCRIPTION_dup               @2002
+    sk_ACCESS_DESCRIPTION_find              @2029
+    sk_ACCESS_DESCRIPTION_free              @1947
+    sk_ACCESS_DESCRIPTION_insert            @2097
+    sk_ACCESS_DESCRIPTION_new               @2013
+    sk_ACCESS_DESCRIPTION_new_null          @2085
+    sk_ACCESS_DESCRIPTION_num               @2069
+    sk_ACCESS_DESCRIPTION_pop               @2061
+    sk_ACCESS_DESCRIPTION_pop_free          @1979
+    sk_ACCESS_DESCRIPTION_push              @2018
+    sk_ACCESS_DESCRIPTION_set               @1939
+    sk_ACCESS_DESCRIPTION_set_cmp_func      @2129
+    sk_ACCESS_DESCRIPTION_shift             @1916
+    sk_ACCESS_DESCRIPTION_sort              @2127
+    sk_ACCESS_DESCRIPTION_unshift           @1965
+    sk_ACCESS_DESCRIPTION_value             @1956
+    sk_ACCESS_DESCRIPTION_zero              @2006
+    sk_ASN1_OBJECT_delete                   @1831
+    sk_ASN1_OBJECT_delete_ptr               @1828
+    sk_ASN1_OBJECT_dup                      @1827
+    sk_ASN1_OBJECT_find                     @1825
+    sk_ASN1_OBJECT_free                     @1838
+    sk_ASN1_OBJECT_insert                   @1842
+    sk_ASN1_OBJECT_new                      @1829
+    sk_ASN1_OBJECT_new_null                 @1836
+    sk_ASN1_OBJECT_num                      @1834
+    sk_ASN1_OBJECT_pop                      @1833
+    sk_ASN1_OBJECT_pop_free                 @1826
+    sk_ASN1_OBJECT_push                     @1843
+    sk_ASN1_OBJECT_set                      @1839
+    sk_ASN1_OBJECT_set_cmp_func             @1840
+    sk_ASN1_OBJECT_shift                    @1832
+    sk_ASN1_OBJECT_sort                     @1863
+    sk_ASN1_OBJECT_unshift                  @1830
+    sk_ASN1_OBJECT_value                    @1835
+    sk_ASN1_OBJECT_zero                     @1841
+    sk_ASN1_STRING_TABLE_delete             @2094
+    sk_ASN1_STRING_TABLE_delete_ptr         @1966
+    sk_ASN1_STRING_TABLE_dup                @2121
+    sk_ASN1_STRING_TABLE_find               @2133
+    sk_ASN1_STRING_TABLE_free               @2042
+    sk_ASN1_STRING_TABLE_insert             @2036
+    sk_ASN1_STRING_TABLE_new                @2138
+    sk_ASN1_STRING_TABLE_new_null           @2116
+    sk_ASN1_STRING_TABLE_num                @1962
+    sk_ASN1_STRING_TABLE_pop                @1948
+    sk_ASN1_STRING_TABLE_pop_free           @2003
+    sk_ASN1_STRING_TABLE_push               @2120
+    sk_ASN1_STRING_TABLE_set                @2045
+    sk_ASN1_STRING_TABLE_set_cmp_func       @2070
+    sk_ASN1_STRING_TABLE_shift              @2106
+    sk_ASN1_STRING_TABLE_sort               @1992
+    sk_ASN1_STRING_TABLE_unshift            @2004
+    sk_ASN1_STRING_TABLE_value              @1924
+    sk_ASN1_STRING_TABLE_zero               @2104
+    sk_ASN1_TYPE_delete                     @1631
+    sk_ASN1_TYPE_delete_ptr                 @1598
+    sk_ASN1_TYPE_dup                        @1620
+    sk_ASN1_TYPE_find                       @1635
+    sk_ASN1_TYPE_free                       @1597
+    sk_ASN1_TYPE_insert                     @1603
+    sk_ASN1_TYPE_new                        @1628
+    sk_ASN1_TYPE_new_null                   @1558
+    sk_ASN1_TYPE_num                        @1564
+    sk_ASN1_TYPE_pop                        @1556
+    sk_ASN1_TYPE_pop_free                   @1599
+    sk_ASN1_TYPE_push                       @1626
+    sk_ASN1_TYPE_set                        @1593
+    sk_ASN1_TYPE_set_cmp_func               @1571
+    sk_ASN1_TYPE_shift                      @1630
+    sk_ASN1_TYPE_sort                       @1857
+    sk_ASN1_TYPE_unshift                    @1596
+    sk_ASN1_TYPE_value                      @1553
+    sk_ASN1_TYPE_zero                       @1623
+    sk_CONF_VALUE_delete                    @1807
+    sk_CONF_VALUE_delete_ptr                @1818
+    sk_CONF_VALUE_dup                       @1822
+    sk_CONF_VALUE_find                      @1819
+    sk_CONF_VALUE_free                      @1811
+    sk_CONF_VALUE_insert                    @1823
+    sk_CONF_VALUE_new                       @1824
+    sk_CONF_VALUE_new_null                  @1821
+    sk_CONF_VALUE_num                       @1809
+    sk_CONF_VALUE_pop                       @1808
+    sk_CONF_VALUE_pop_free                  @1810
+    sk_CONF_VALUE_push                      @1817
+    sk_CONF_VALUE_set                       @1815
+    sk_CONF_VALUE_set_cmp_func              @1820
+    sk_CONF_VALUE_shift                     @1812
+    sk_CONF_VALUE_sort                      @1849
+    sk_CONF_VALUE_unshift                   @1813
+    sk_CONF_VALUE_value                     @1814
+    sk_CONF_VALUE_zero                      @1816
+    sk_CRYPTO_EX_DATA_FUNCS_delete          @2220
+    sk_CRYPTO_EX_DATA_FUNCS_delete_ptr      @2234
+    sk_CRYPTO_EX_DATA_FUNCS_dup             @2226
+    sk_CRYPTO_EX_DATA_FUNCS_find            @2231
+    sk_CRYPTO_EX_DATA_FUNCS_free            @2233
+    sk_CRYPTO_EX_DATA_FUNCS_insert          @2237
+    sk_CRYPTO_EX_DATA_FUNCS_new             @2232
+    sk_CRYPTO_EX_DATA_FUNCS_new_null        @2223
+    sk_CRYPTO_EX_DATA_FUNCS_num             @2235
+    sk_CRYPTO_EX_DATA_FUNCS_pop             @2229
+    sk_CRYPTO_EX_DATA_FUNCS_pop_free        @2236
+    sk_CRYPTO_EX_DATA_FUNCS_push            @2230
+    sk_CRYPTO_EX_DATA_FUNCS_set             @2221
+    sk_CRYPTO_EX_DATA_FUNCS_set_cmp_func    @2224
+    sk_CRYPTO_EX_DATA_FUNCS_shift           @2227
+    sk_CRYPTO_EX_DATA_FUNCS_sort            @2225
+    sk_CRYPTO_EX_DATA_FUNCS_unshift         @2222
+    sk_CRYPTO_EX_DATA_FUNCS_value           @2228
+    sk_CRYPTO_EX_DATA_FUNCS_zero            @2238
+    sk_DIST_POINT_delete                    @1529
+    sk_DIST_POINT_delete_ptr                @1530
+    sk_DIST_POINT_dup                       @1532
+    sk_DIST_POINT_find                      @1528
+    sk_DIST_POINT_free                      @1521
+    sk_DIST_POINT_insert                    @1570
+    sk_DIST_POINT_new                       @1519
+    sk_DIST_POINT_new_null                  @1520
+    sk_DIST_POINT_num                       @1522
+    sk_DIST_POINT_pop                       @1527
+    sk_DIST_POINT_pop_free                  @1533
+    sk_DIST_POINT_push                      @1526
+    sk_DIST_POINT_set                       @1524
+    sk_DIST_POINT_set_cmp_func              @1531
+    sk_DIST_POINT_shift                     @1534
+    sk_DIST_POINT_sort                      @1868
+    sk_DIST_POINT_unshift                   @1573
+    sk_DIST_POINT_value                     @1523
+    sk_DIST_POINT_zero                      @1525
+    sk_GENERAL_NAME_delete                  @1415
+    sk_GENERAL_NAME_delete_ptr              @1416
+    sk_GENERAL_NAME_dup                     @1418
+    sk_GENERAL_NAME_find                    @1414
+    sk_GENERAL_NAME_free                    @1407
+    sk_GENERAL_NAME_insert                  @1629
+    sk_GENERAL_NAME_new                     @1405
+    sk_GENERAL_NAME_new_null                @1406
+    sk_GENERAL_NAME_num                     @1408
+    sk_GENERAL_NAME_pop                     @1413
+    sk_GENERAL_NAME_pop_free                @1419
+    sk_GENERAL_NAME_push                    @1412
+    sk_GENERAL_NAME_set                     @1410
+    sk_GENERAL_NAME_set_cmp_func            @1417
+    sk_GENERAL_NAME_shift                   @1420
+    sk_GENERAL_NAME_sort                    @1854
+    sk_GENERAL_NAME_unshift                 @1587
+    sk_GENERAL_NAME_value                   @1409
+    sk_GENERAL_NAME_zero                    @1411
+    sk_PKCS7_RECIP_INFO_delete              @1774
+    sk_PKCS7_RECIP_INFO_delete_ptr          @1759
+    sk_PKCS7_RECIP_INFO_dup                 @1720
+    sk_PKCS7_RECIP_INFO_find                @1773
+    sk_PKCS7_RECIP_INFO_free                @1752
+    sk_PKCS7_RECIP_INFO_insert              @1761
+    sk_PKCS7_RECIP_INFO_new                 @1724
+    sk_PKCS7_RECIP_INFO_new_null            @1730
+    sk_PKCS7_RECIP_INFO_num                 @1746
+    sk_PKCS7_RECIP_INFO_pop                 @1743
+    sk_PKCS7_RECIP_INFO_pop_free            @1760
+    sk_PKCS7_RECIP_INFO_push                @1766
+    sk_PKCS7_RECIP_INFO_set                 @1763
+    sk_PKCS7_RECIP_INFO_set_cmp_func        @1741
+    sk_PKCS7_RECIP_INFO_shift               @1729
+    sk_PKCS7_RECIP_INFO_sort                @1859
+    sk_PKCS7_RECIP_INFO_unshift             @1767
+    sk_PKCS7_RECIP_INFO_value               @1745
+    sk_PKCS7_RECIP_INFO_zero                @1764
+    sk_PKCS7_SIGNER_INFO_delete             @1740
+    sk_PKCS7_SIGNER_INFO_delete_ptr         @1742
+    sk_PKCS7_SIGNER_INFO_dup                @1770
+    sk_PKCS7_SIGNER_INFO_find               @1726
+    sk_PKCS7_SIGNER_INFO_free               @1762
+    sk_PKCS7_SIGNER_INFO_insert             @1721
+    sk_PKCS7_SIGNER_INFO_new                @1717
+    sk_PKCS7_SIGNER_INFO_new_null           @1758
+    sk_PKCS7_SIGNER_INFO_num                @1736
+    sk_PKCS7_SIGNER_INFO_pop                @1732
+    sk_PKCS7_SIGNER_INFO_pop_free           @1733
+    sk_PKCS7_SIGNER_INFO_push               @1722
+    sk_PKCS7_SIGNER_INFO_set                @1754
+    sk_PKCS7_SIGNER_INFO_set_cmp_func       @1727
+    sk_PKCS7_SIGNER_INFO_shift              @1731
+    sk_PKCS7_SIGNER_INFO_sort               @1864
+    sk_PKCS7_SIGNER_INFO_unshift            @1719
+    sk_PKCS7_SIGNER_INFO_value              @1747
+    sk_PKCS7_SIGNER_INFO_zero               @1718
+    sk_POLICYINFO_delete                    @1469
+    sk_POLICYINFO_delete_ptr                @1470
+    sk_POLICYINFO_dup                       @1472
+    sk_POLICYINFO_find                      @1468
+    sk_POLICYINFO_free                      @1461
+    sk_POLICYINFO_insert                    @1622
+    sk_POLICYINFO_new                       @1459
+    sk_POLICYINFO_new_null                  @1460
+    sk_POLICYINFO_num                       @1462
+    sk_POLICYINFO_pop                       @1467
+    sk_POLICYINFO_pop_free                  @1473
+    sk_POLICYINFO_push                      @1466
+    sk_POLICYINFO_set                       @1464
+    sk_POLICYINFO_set_cmp_func              @1471
+    sk_POLICYINFO_shift                     @1474
+    sk_POLICYINFO_sort                      @1853
+    sk_POLICYINFO_unshift                   @1582
+    sk_POLICYINFO_value                     @1463
+    sk_POLICYINFO_zero                      @1465
+    sk_POLICYQUALINFO_delete                @1451
+    sk_POLICYQUALINFO_delete_ptr            @1452
+    sk_POLICYQUALINFO_dup                   @1454
+    sk_POLICYQUALINFO_find                  @1450
+    sk_POLICYQUALINFO_free                  @1443
+    sk_POLICYQUALINFO_insert                @1592
+    sk_POLICYQUALINFO_new                   @1441
+    sk_POLICYQUALINFO_new_null              @1442
+    sk_POLICYQUALINFO_num                   @1444
+    sk_POLICYQUALINFO_pop                   @1449
+    sk_POLICYQUALINFO_pop_free              @1455
+    sk_POLICYQUALINFO_push                  @1448
+    sk_POLICYQUALINFO_set                   @1446
+    sk_POLICYQUALINFO_set_cmp_func          @1453
+    sk_POLICYQUALINFO_shift                 @1456
+    sk_POLICYQUALINFO_sort                  @1866
+    sk_POLICYQUALINFO_unshift               @1581
+    sk_POLICYQUALINFO_value                 @1445
+    sk_POLICYQUALINFO_zero                  @1447
+    sk_SXNETID_delete                       @1433
+    sk_SXNETID_delete_ptr                   @1434
+    sk_SXNETID_dup                          @1436
+    sk_SXNETID_find                         @1432
+    sk_SXNETID_free                         @1425
+    sk_SXNETID_insert                       @1605
+    sk_SXNETID_new                          @1423
+    sk_SXNETID_new_null                     @1424
+    sk_SXNETID_num                          @1426
+    sk_SXNETID_pop                          @1431
+    sk_SXNETID_pop_free                     @1437
+    sk_SXNETID_push                         @1430
+    sk_SXNETID_set                          @1428
+    sk_SXNETID_set_cmp_func                 @1435
+    sk_SXNETID_shift                        @1438
+    sk_SXNETID_sort                         @1862
+    sk_SXNETID_unshift                      @1616
+    sk_SXNETID_value                        @1427
+    sk_SXNETID_zero                         @1429
+    sk_X509_ALGOR_delete                    @1701
+    sk_X509_ALGOR_delete_ptr                @1703
+    sk_X509_ALGOR_dup                       @1715
+    sk_X509_ALGOR_find                      @1713
+    sk_X509_ALGOR_free                      @1700
+    sk_X509_ALGOR_insert                    @1690
+    sk_X509_ALGOR_new                       @1677
+    sk_X509_ALGOR_new_null                  @1695
+    sk_X509_ALGOR_num                       @1686
+    sk_X509_ALGOR_pop                       @1683
+    sk_X509_ALGOR_pop_free                  @1716
+    sk_X509_ALGOR_push                      @1711
+    sk_X509_ALGOR_set                       @1705
+    sk_X509_ALGOR_set_cmp_func              @1714
+    sk_X509_ALGOR_shift                     @1708
+    sk_X509_ALGOR_sort                      @1858
+    sk_X509_ALGOR_unshift                   @1680
+    sk_X509_ALGOR_value                     @1712
+    sk_X509_ALGOR_zero                      @1709
+    sk_X509_ATTRIBUTE_delete                @1391
+    sk_X509_ATTRIBUTE_delete_ptr            @1392
+    sk_X509_ATTRIBUTE_dup                   @1394
+    sk_X509_ATTRIBUTE_find                  @1390
+    sk_X509_ATTRIBUTE_free                  @1383
+    sk_X509_ATTRIBUTE_insert                @1610
+    sk_X509_ATTRIBUTE_new                   @1381
+    sk_X509_ATTRIBUTE_new_null              @1382
+    sk_X509_ATTRIBUTE_num                   @1384
+    sk_X509_ATTRIBUTE_pop                   @1389
+    sk_X509_ATTRIBUTE_pop_free              @1395
+    sk_X509_ATTRIBUTE_push                  @1388
+    sk_X509_ATTRIBUTE_set                   @1386
+    sk_X509_ATTRIBUTE_set_cmp_func          @1393
+    sk_X509_ATTRIBUTE_shift                 @1396
+    sk_X509_ATTRIBUTE_sort                  @1851
+    sk_X509_ATTRIBUTE_unshift               @1585
+    sk_X509_ATTRIBUTE_value                 @1385
+    sk_X509_ATTRIBUTE_zero                  @1387
+    sk_X509_CRL_delete                      @1699
+    sk_X509_CRL_delete_ptr                  @1689
+    sk_X509_CRL_dup                         @1691
+    sk_X509_CRL_find                        @1698
+    sk_X509_CRL_free                        @1681
+    sk_X509_CRL_insert                      @1687
+    sk_X509_CRL_new                         @1693
+    sk_X509_CRL_new_null                    @1710
+    sk_X509_CRL_num                         @1706
+    sk_X509_CRL_pop                         @1704
+    sk_X509_CRL_pop_free                    @1688
+    sk_X509_CRL_push                        @1694
+    sk_X509_CRL_set                         @1679
+    sk_X509_CRL_set_cmp_func                @1678
+    sk_X509_CRL_shift                       @1697
+    sk_X509_CRL_sort                        @1867
+    sk_X509_CRL_unshift                     @1684
+    sk_X509_CRL_value                       @1707
+    sk_X509_CRL_zero                        @1692
+    sk_X509_EXTENSION_delete                @1642
+    sk_X509_EXTENSION_delete_ptr            @1594
+    sk_X509_EXTENSION_dup                   @1641
+    sk_X509_EXTENSION_find                  @1554
+    sk_X509_EXTENSION_free                  @1614
+    sk_X509_EXTENSION_insert                @1618
+    sk_X509_EXTENSION_new                   @1551
+    sk_X509_EXTENSION_new_null              @1565
+    sk_X509_EXTENSION_num                   @1579
+    sk_X509_EXTENSION_pop                   @1576
+    sk_X509_EXTENSION_pop_free              @1601
+    sk_X509_EXTENSION_push                  @1644
+    sk_X509_EXTENSION_set                   @1613
+    sk_X509_EXTENSION_set_cmp_func          @1557
+    sk_X509_EXTENSION_shift                 @1643
+    sk_X509_EXTENSION_sort                  @1861
+    sk_X509_EXTENSION_unshift               @1600
+    sk_X509_EXTENSION_value                 @1572
+    sk_X509_EXTENSION_zero                  @1638
+    sk_X509_INFO_delete                     @1608
+    sk_X509_INFO_delete_ptr                 @1568
+    sk_X509_INFO_dup                        @1640
+    sk_X509_INFO_find                       @1621
+    sk_X509_INFO_free                       @1588
+    sk_X509_INFO_insert                     @1590
+    sk_X509_INFO_new                        @1550
+    sk_X509_INFO_new_null                   @1619
+    sk_X509_INFO_num                        @1578
+    sk_X509_INFO_pop                        @1575
+    sk_X509_INFO_pop_free                   @1580
+    sk_X509_INFO_push                       @1617
+    sk_X509_INFO_set                        @1612
+    sk_X509_INFO_set_cmp_func               @1609
+    sk_X509_INFO_shift                      @1639
+    sk_X509_INFO_sort                       @1852
+    sk_X509_INFO_unshift                    @1595
+    sk_X509_INFO_value                      @1566
+    sk_X509_INFO_zero                       @1611
+    sk_X509_LOOKUP_delete                   @1751
+    sk_X509_LOOKUP_delete_ptr               @1771
+    sk_X509_LOOKUP_dup                      @1735
+    sk_X509_LOOKUP_find                     @1737
+    sk_X509_LOOKUP_free                     @1769
+    sk_X509_LOOKUP_insert                   @1744
+    sk_X509_LOOKUP_new                      @1739
+    sk_X509_LOOKUP_new_null                 @1725
+    sk_X509_LOOKUP_num                      @1750
+    sk_X509_LOOKUP_pop                      @1749
+    sk_X509_LOOKUP_pop_free                 @1755
+    sk_X509_LOOKUP_push                     @1734
+    sk_X509_LOOKUP_set                      @1772
+    sk_X509_LOOKUP_set_cmp_func             @1768
+    sk_X509_LOOKUP_shift                    @1756
+    sk_X509_LOOKUP_sort                     @1865
+    sk_X509_LOOKUP_unshift                  @1757
+    sk_X509_LOOKUP_value                    @1765
+    sk_X509_LOOKUP_zero                     @1728
+    sk_X509_NAME_ENTRY_delete               @1559
+    sk_X509_NAME_ENTRY_delete_ptr           @1636
+    sk_X509_NAME_ENTRY_dup                  @1561
+    sk_X509_NAME_ENTRY_find                 @1645
+    sk_X509_NAME_ENTRY_free                 @1604
+    sk_X509_NAME_ENTRY_insert               @1627
+    sk_X509_NAME_ENTRY_new                  @1569
+    sk_X509_NAME_ENTRY_new_null             @1583
+    sk_X509_NAME_ENTRY_num                  @1586
+    sk_X509_NAME_ENTRY_pop                  @1584
+    sk_X509_NAME_ENTRY_pop_free             @1632
+    sk_X509_NAME_ENTRY_push                 @1637
+    sk_X509_NAME_ENTRY_set                  @1625
+    sk_X509_NAME_ENTRY_set_cmp_func         @1602
+    sk_X509_NAME_ENTRY_shift                @1577
+    sk_X509_NAME_ENTRY_sort                 @1860
+    sk_X509_NAME_ENTRY_unshift              @1552
+    sk_X509_NAME_ENTRY_value                @1591
+    sk_X509_NAME_ENTRY_zero                 @1634
+    sk_X509_NAME_delete                     @1357
+    sk_X509_NAME_delete_ptr                 @1358
+    sk_X509_NAME_dup                        @1360
+    sk_X509_NAME_find                       @1356
+    sk_X509_NAME_free                       @1349
+    sk_X509_NAME_insert                     @1606
+    sk_X509_NAME_new                        @1347
+    sk_X509_NAME_new_null                   @1348
+    sk_X509_NAME_num                        @1350
+    sk_X509_NAME_pop                        @1355
+    sk_X509_NAME_pop_free                   @1361
+    sk_X509_NAME_push                       @1354
+    sk_X509_NAME_set                        @1352
+    sk_X509_NAME_set_cmp_func               @1359
+    sk_X509_NAME_shift                      @1362
+    sk_X509_NAME_sort                       @1856
+    sk_X509_NAME_unshift                    @1563
+    sk_X509_NAME_value                      @1351
+    sk_X509_NAME_zero                       @1353
+    sk_X509_PURPOSE_delete                  @1943
+    sk_X509_PURPOSE_delete_ptr              @2079
+    sk_X509_PURPOSE_dup                     @2103
+    sk_X509_PURPOSE_find                    @1953
+    sk_X509_PURPOSE_free                    @2102
+    sk_X509_PURPOSE_insert                  @2125
+    sk_X509_PURPOSE_new                     @2124
+    sk_X509_PURPOSE_new_null                @1983
+    sk_X509_PURPOSE_num                     @1944
+    sk_X509_PURPOSE_pop                     @1940
+    sk_X509_PURPOSE_pop_free                @2100
+    sk_X509_PURPOSE_push                    @1942
+    sk_X509_PURPOSE_set                     @2035
+    sk_X509_PURPOSE_set_cmp_func            @1993
+    sk_X509_PURPOSE_shift                   @2122
+    sk_X509_PURPOSE_sort                    @2037
+    sk_X509_PURPOSE_unshift                 @2031
+    sk_X509_PURPOSE_value                   @1929
+    sk_X509_PURPOSE_zero                    @1930
+    sk_X509_REVOKED_delete                  @1673
+    sk_X509_REVOKED_delete_ptr              @1663
+    sk_X509_REVOKED_dup                     @1658
+    sk_X509_REVOKED_find                    @1672
+    sk_X509_REVOKED_free                    @1659
+    sk_X509_REVOKED_insert                  @1665
+    sk_X509_REVOKED_new                     @1660
+    sk_X509_REVOKED_new_null                @1675
+    sk_X509_REVOKED_num                     @1669
+    sk_X509_REVOKED_pop                     @1667
+    sk_X509_REVOKED_pop_free                @1664
+    sk_X509_REVOKED_push                    @1670
+    sk_X509_REVOKED_set                     @1676
+    sk_X509_REVOKED_set_cmp_func            @1656
+    sk_X509_REVOKED_shift                   @1662
+    sk_X509_REVOKED_sort                    @1850
+    sk_X509_REVOKED_unshift                 @1657
+    sk_X509_REVOKED_value                   @1668
+    sk_X509_REVOKED_zero                    @1666
+    sk_X509_TRUST_delete                    @2139
+    sk_X509_TRUST_delete_ptr                @2099
+    sk_X509_TRUST_dup                       @2073
+    sk_X509_TRUST_find                      @2000
+    sk_X509_TRUST_free                      @1920
+    sk_X509_TRUST_insert                    @2076
+    sk_X509_TRUST_new                       @2089
+    sk_X509_TRUST_new_null                  @2084
+    sk_X509_TRUST_num                       @1922
+    sk_X509_TRUST_pop                       @1913
+    sk_X509_TRUST_pop_free                  @1975
+    sk_X509_TRUST_push                      @1991
+    sk_X509_TRUST_set                       @2010
+    sk_X509_TRUST_set_cmp_func              @1919
+    sk_X509_TRUST_shift                     @2005
+    sk_X509_TRUST_sort                      @2087
+    sk_X509_TRUST_unshift                   @2059
+    sk_X509_TRUST_value                     @2043
+    sk_X509_TRUST_zero                      @1978
+    sk_X509_delete                          @1373
+    sk_X509_delete_ptr                      @1374
+    sk_X509_dup                             @1376
+    sk_X509_find                            @1372
+    sk_X509_free                            @1365
+    sk_X509_insert                          @1607
+    sk_X509_new                             @1363
+    sk_X509_new_null                        @1364
+    sk_X509_num                             @1366
+    sk_X509_pop                             @1371
+    sk_X509_pop_free                        @1377
+    sk_X509_push                            @1370
+    sk_X509_set                             @1368
+    sk_X509_set_cmp_func                    @1375
+    sk_X509_shift                           @1378
+    sk_X509_sort                            @1855
+    sk_X509_unshift                         @1562
+    sk_X509_value                           @1367
+    sk_X509_zero                            @1369
+    sk_delete                               @901
+    sk_delete_ptr                           @902
+    sk_dup                                  @903
+    sk_find                                 @904
+    sk_free                                 @905
+    sk_insert                               @906
+    sk_new                                  @907
+    sk_num                                  @1654
+    sk_pop                                  @908
+    sk_pop_free                             @909
+    sk_push                                 @910
+    sk_set                                  @1655
+    sk_set_cmp_func                         @911
+    sk_shift                                @912
+    sk_sort                                 @1671
+    sk_unshift                              @913
+    sk_value                                @1653
+    sk_zero                                 @914
+    string_to_hex                           @1224
+    uni2asc                                 @1283
+    v2i_GENERAL_NAME                        @1231
+    v2i_GENERAL_NAMES                       @1236
+
Index: opensa/openssl/ms/mw.bat
diff -u opensa/openssl/ms/mw.bat:1.1 opensa/openssl/ms/mw.bat:1.2
--- opensa/openssl/ms/mw.bat:1.1        Tue Jan 25 23:16:42 2000
+++ opensa/openssl/ms/mw.bat    Thu Mar  2 21:12:04 2000
@@ -1,31 +1,31 @@
-@rem OpenSSL with Mingw32
-@rem --------------------
-
-@rem Makefile
-perl util\mkfiles.pl >MINFO
-perl util\mk1mf.pl Mingw32 >ms\mingw32.mak
-perl util\mk1mf.pl Mingw32-files >ms\mingw32f.mak
-@rem DLL definition files
-perl util\mkdef.pl 32 libeay >ms\libeay32.def
-if errorlevel 1 goto end
-perl util\mkdef.pl 32 ssleay >ms\ssleay32.def
-if errorlevel 1 goto end
-
-@rem Create files -- this can be skipped if using the GNU file utilities
-make -f ms/mingw32f.mak
-echo You can ignore the error messages above
-
-@rem Build the libraries
-make -f ms/mingw32.mak
-if errorlevel 1 goto end
-
-@rem Generate the DLLs and input libraries
-dllwrap --dllname libeay32.dll --output-lib out/libeay32.a --def ms/libeay32.def 
out/libcrypto.a -lwsock32 -lgdi32
-if errorlevel 1 goto end
-dllwrap --dllname libssl32.dll --output-lib out/libssl32.a --def ms/ssleay32.def 
out/libssl.a out/libeay32.a
-if errorlevel 1 goto end
-
-echo Done compiling OpenSSL
-
-:end
-
+@rem OpenSSL with Mingw32
+@rem --------------------
+
+@rem Makefile
+perl util\mkfiles.pl >MINFO
+perl util\mk1mf.pl Mingw32 >ms\mingw32.mak
+perl util\mk1mf.pl Mingw32-files >ms\mingw32f.mak
+@rem DLL definition files
+perl util\mkdef.pl 32 libeay >ms\libeay32.def
+if errorlevel 1 goto end
+perl util\mkdef.pl 32 ssleay >ms\ssleay32.def
+if errorlevel 1 goto end
+
+@rem Create files -- this can be skipped if using the GNU file utilities
+make -f ms/mingw32f.mak
+echo You can ignore the error messages above
+
+@rem Build the libraries
+make -f ms/mingw32.mak
+if errorlevel 1 goto end
+
+@rem Generate the DLLs and input libraries
+dllwrap --dllname libeay32.dll --output-lib out/libeay32.a --def ms/libeay32.def 
+out/libcrypto.a -lwsock32 -lgdi32
+if errorlevel 1 goto end
+dllwrap --dllname libssl32.dll --output-lib out/libssl32.a --def ms/ssleay32.def 
+out/libssl.a out/libeay32.a
+if errorlevel 1 goto end
+
+echo Done compiling OpenSSL
+
+:end
+
Index: opensa/openssl/ms/nt.mak
diff -u opensa/openssl/ms/nt.mak:1.1 opensa/openssl/ms/nt.mak:1.2
--- opensa/openssl/ms/nt.mak:1.1        Tue Jan 25 23:16:42 2000
+++ opensa/openssl/ms/nt.mak    Thu Mar  2 21:12:05 2000
@@ -1,2082 +1,2181 @@
-# This makefile has been automatically generated from the OpenSSL distribution.
-# This single makefile will build the complete OpenSSL distribution and
-# by default leave the 'intertesting' output files in .\out and the stuff
-# that needs deleting in .\tmp.
-# The file was generated by running 'make makefile.one', which
-# does a 'make files', which writes all the environment variables from all
-# the makefiles to the file call MINFO.  This file is used by
-# util\mk1mf.pl to generate makefile.one.
-# The 'makefile per directory' system suites me when developing this
-# library and also so I can 'distribute' indervidual library sections.
-# The one monster makefile better suits building in non-unix
-# environments.
-
-INSTALLTOP=\usr\local\ssl
-
-# Set your compiler options
-PLATFORM=VC-WIN32
-CC=cl
-CFLAG= /MD /W3 /WX /G5 /Ox /O2 /Ob2 /Gs0 /GF /Gy /nologo -DWIN32 
-DWIN32_LEAN_AND_MEAN -DL_ENDIAN /Fdout32
-APP_CFLAG=
-LIB_CFLAG=
-SHLIB_CFLAG=
-APP_EX_OBJ=setargv.obj
-SHLIB_EX_OBJ=
-# add extra libraries to this define, for solaris -lsocket -lnsl would
-# be added
-EX_LIBS=wsock32.lib user32.lib gdi32.lib
-
-# The OpenSSL directory
-SRC_D=.
-
-LINK=link
-LFLAGS=/nologo /subsystem:console /machine:I386 /opt:ref
-
-BN_ASM_OBJ=
-BN_ASM_SRC=
-DES_ENC_OBJ=
-DES_ENC_SRC=
-BF_ENC_OBJ=
-BF_ENC_SRC=
-CAST_ENC_OBJ=
-CAST_ENC_SRC=
-RC4_ENC_OBJ=
-RC4_ENC_SRC=
-RC5_ENC_OBJ=
-RC5_ENC_SRC=
-MD5_ASM_OBJ=
-MD5_ASM_SRC=
-SHA1_ASM_OBJ=
-SHA1_ASM_SRC=
-RMD160_ASM_OBJ=
-RMD160_ASM_SRC=
-
-# The output directory for everything intersting
-OUT_D=out32
-# The output directory for all the temporary muck
-TMP_D=tmp32
-# The output directory for the header files
-INC_D=inc32
-INCO_D=inc32\openssl
-
-CP=copy nul+
-RM=del
-RANLIB=
-MKDIR=mkdir
-MKLIB=lib
-MLFLAGS=
-ASM=ml /Cp /coff /c /Cx
-
-######################################################
-# You should not need to touch anything below this point
-######################################################
-
-E_EXE=openssl
-SSL=ssleay32
-CRYPTO=libeay32
-RSAGLUE=RSAglue
-
-# BIN_D  - Binary output directory
-# TEST_D - Binary test file output directory
-# LIB_D  - library output directory
-# Note: if you change these point to different directories then uncomment out
-# the lines around the 'NB' comment below.
-# 
-BIN_D=$(OUT_D)
-TEST_D=$(OUT_D)
-LIB_D=$(OUT_D)
-
-# INCL_D - local library directory
-# OBJ_D  - temp object file directory
-OBJ_D=$(TMP_D)
-INCL_D=$(TMP_D)
-
-O_SSL=     $(LIB_D)\$(SSL).lib
-O_CRYPTO=  $(LIB_D)\$(CRYPTO).lib
-O_RSAGLUE= $(LIB_D)\$(RSAGLUE).lib
-SO_SSL=    $(SSL)
-SO_CRYPTO= $(CRYPTO)
-L_SSL=     $(LIB_D)\$(SSL).lib
-L_CRYPTO=  $(LIB_D)\$(CRYPTO).lib
-
-L_LIBS= $(L_SSL) $(L_CRYPTO)
-#L_LIBS= $(O_SSL) $(O_RSAGLUE) -lrsaref $(O_CRYPTO)
-
-######################################################
-# Don't touch anything below this point
-######################################################
-
-INC=-I$(INC_D) -I$(INCL_D)
-APP_CFLAGS=$(INC) $(CFLAG) $(APP_CFLAG)
-LIB_CFLAGS=$(INC) $(CFLAG) $(LIB_CFLAG)
-SHLIB_CFLAGS=$(INC) $(CFLAG) $(LIB_CFLAG) $(SHLIB_CFLAG)
-LIBS_DEP=$(O_CRYPTO) $(O_RSAGLUE) $(O_SSL)
-
-#############################################
-HEADER=$(INCL_D)\cryptlib.h \
-       $(INCL_D)\buildinf.h $(INCL_D)\md5_locl.h $(INCL_D)\sha_locl.h \
-       $(INCL_D)\rmd_locl.h $(INCL_D)\rmdconst.h $(INCL_D)\des_locl.h \
-       $(INCL_D)\rpc_des.h $(INCL_D)\podd.h $(INCL_D)\sk.h \
-       $(INCL_D)\spr.h $(INCL_D)\des_ver.h $(INCL_D)\rc2_locl.h \
-       $(INCL_D)\rc4_locl.h $(INCL_D)\rc5_locl.h $(INCL_D)\idea_lcl.h \
-       $(INCL_D)\bf_pi.h $(INCL_D)\bf_locl.h $(INCL_D)\cast_s.h \
-       $(INCL_D)\cast_lcl.h $(INCL_D)\bn_lcl.h $(INCL_D)\bn_prime.h \
-       $(INCL_D)\bss_file.c $(INCL_D)\obj_dat.h $(INCL_D)\conf_lcl.h \
-       $(INCL_D)\ssl_locl.h $(INCL_D)\apps.h $(INCL_D)\progs.h \
-       $(INCL_D)\s_apps.h $(INCL_D)\testdsa.h $(INCL_D)\testrsa.h
-
-EXHEADER=$(INCO_D)\e_os.h \
-       $(INCO_D)\e_os2.h $(INCO_D)\crypto.h $(INCO_D)\tmdiff.h \
-       $(INCO_D)\opensslv.h $(INCO_D)\opensslconf.h $(INCO_D)\ebcdic.h \
-       $(INCO_D)\md2.h $(INCO_D)\md5.h $(INCO_D)\sha.h \
-       $(INCO_D)\mdc2.h $(INCO_D)\hmac.h $(INCO_D)\ripemd.h \
-       $(INCO_D)\des.h $(INCO_D)\rc2.h $(INCO_D)\rc4.h \
-       $(INCO_D)\rc5.h $(INCO_D)\idea.h $(INCO_D)\blowfish.h \
-       $(INCO_D)\cast.h $(INCO_D)\bn.h $(INCO_D)\rsa.h \
-       $(INCO_D)\dsa.h $(INCO_D)\dh.h $(INCO_D)\buffer.h \
-       $(INCO_D)\bio.h $(INCO_D)\stack.h $(INCO_D)\safestack.h \
-       $(INCO_D)\lhash.h $(INCO_D)\rand.h $(INCO_D)\err.h \
-       $(INCO_D)\objects.h $(INCO_D)\evp.h $(INCO_D)\asn1.h \
-       $(INCO_D)\asn1_mac.h $(INCO_D)\pem.h $(INCO_D)\pem2.h \
-       $(INCO_D)\x509.h $(INCO_D)\x509_vfy.h $(INCO_D)\x509v3.h \
-       $(INCO_D)\conf.h $(INCO_D)\txt_db.h $(INCO_D)\pkcs7.h \
-       $(INCO_D)\pkcs12.h $(INCO_D)\comp.h $(INCO_D)\ssl.h \
-       $(INCO_D)\ssl2.h $(INCO_D)\ssl3.h $(INCO_D)\ssl23.h \
-       $(INCO_D)\tls1.h $(INCO_D)\rsaref.h
-
-T_OBJ=$(OBJ_D)\md2test.obj \
-       $(OBJ_D)\md5test.obj $(OBJ_D)\shatest.obj $(OBJ_D)\sha1test.obj \
-       $(OBJ_D)\mdc2test.obj $(OBJ_D)\hmactest.obj $(OBJ_D)\rmdtest.obj \
-       $(OBJ_D)\destest.obj $(OBJ_D)\rc2test.obj $(OBJ_D)\rc4test.obj \
-       $(OBJ_D)\rc5test.obj $(OBJ_D)\ideatest.obj $(OBJ_D)\bftest.obj \
-       $(OBJ_D)\casttest.obj $(OBJ_D)\bntest.obj $(OBJ_D)\exptest.obj \
-       $(OBJ_D)\rsa_oaep_test.obj $(OBJ_D)\dsatest.obj $(OBJ_D)\dhtest.obj \
-       $(OBJ_D)\randtest.obj $(OBJ_D)\ssltest.obj
-
-E_OBJ=$(OBJ_D)\verify.obj \
-       $(OBJ_D)\asn1pars.obj $(OBJ_D)\req.obj $(OBJ_D)\dgst.obj \
-       $(OBJ_D)\dh.obj $(OBJ_D)\enc.obj $(OBJ_D)\gendh.obj \
-       $(OBJ_D)\errstr.obj $(OBJ_D)\ca.obj $(OBJ_D)\pkcs7.obj \
-       $(OBJ_D)\crl2p7.obj $(OBJ_D)\crl.obj $(OBJ_D)\rsa.obj \
-       $(OBJ_D)\dsa.obj $(OBJ_D)\dsaparam.obj $(OBJ_D)\x509.obj \
-       $(OBJ_D)\genrsa.obj $(OBJ_D)\gendsa.obj $(OBJ_D)\s_server.obj \
-       $(OBJ_D)\s_client.obj $(OBJ_D)\speed.obj $(OBJ_D)\s_time.obj \
-       $(OBJ_D)\apps.obj $(OBJ_D)\s_cb.obj $(OBJ_D)\s_socket.obj \
-       $(OBJ_D)\version.obj $(OBJ_D)\sess_id.obj $(OBJ_D)\ciphers.obj \
-       $(OBJ_D)\nseq.obj $(OBJ_D)\pkcs12.obj $(OBJ_D)\pkcs8.obj \
-       $(OBJ_D)\openssl.obj
-
-CRYPTOOBJ=$(OBJ_D)\cryptlib.obj \
-       $(OBJ_D)\mem.obj $(OBJ_D)\cversion.obj $(OBJ_D)\ex_data.obj \
-       $(OBJ_D)\tmdiff.obj $(OBJ_D)\cpt_err.obj $(OBJ_D)\md2_dgst.obj \
-       $(OBJ_D)\md2_one.obj $(OBJ_D)\md5_dgst.obj $(OBJ_D)\md5_one.obj \
-       $(OBJ_D)\sha_dgst.obj $(OBJ_D)\sha1dgst.obj $(OBJ_D)\sha_one.obj \
-       $(OBJ_D)\sha1_one.obj $(OBJ_D)\mdc2dgst.obj $(OBJ_D)\mdc2_one.obj \
-       $(OBJ_D)\hmac.obj $(OBJ_D)\rmd_dgst.obj $(OBJ_D)\rmd_one.obj \
-       $(OBJ_D)\set_key.obj $(OBJ_D)\ecb_enc.obj $(OBJ_D)\cbc_enc.obj \
-       $(OBJ_D)\ecb3_enc.obj $(OBJ_D)\cfb64enc.obj $(OBJ_D)\cfb64ede.obj \
-       $(OBJ_D)\cfb_enc.obj $(OBJ_D)\ofb64ede.obj $(OBJ_D)\enc_read.obj \
-       $(OBJ_D)\enc_writ.obj $(OBJ_D)\ofb64enc.obj $(OBJ_D)\ofb_enc.obj \
-       $(OBJ_D)\str2key.obj $(OBJ_D)\pcbc_enc.obj $(OBJ_D)\qud_cksm.obj \
-       $(OBJ_D)\rand_key.obj $(OBJ_D)\des_enc.obj $(OBJ_D)\fcrypt_b.obj \
-       $(OBJ_D)\read2pwd.obj $(OBJ_D)\fcrypt.obj $(OBJ_D)\xcbc_enc.obj \
-       $(OBJ_D)\read_pwd.obj $(OBJ_D)\rpc_enc.obj $(OBJ_D)\cbc_cksm.obj \
-       $(OBJ_D)\supp.obj $(OBJ_D)\ede_cbcm_enc.obj $(OBJ_D)\rc2_ecb.obj \
-       $(OBJ_D)\rc2_skey.obj $(OBJ_D)\rc2_cbc.obj $(OBJ_D)\rc2cfb64.obj \
-       $(OBJ_D)\rc2ofb64.obj $(OBJ_D)\rc4_skey.obj $(OBJ_D)\rc4_enc.obj \
-       $(OBJ_D)\rc5_skey.obj $(OBJ_D)\rc5_ecb.obj $(OBJ_D)\rc5_enc.obj \
-       $(OBJ_D)\rc5cfb64.obj $(OBJ_D)\rc5ofb64.obj $(OBJ_D)\i_cbc.obj \
-       $(OBJ_D)\i_cfb64.obj $(OBJ_D)\i_ofb64.obj $(OBJ_D)\i_ecb.obj \
-       $(OBJ_D)\i_skey.obj $(OBJ_D)\bf_skey.obj $(OBJ_D)\bf_ecb.obj \
-       $(OBJ_D)\bf_enc.obj $(OBJ_D)\bf_cfb64.obj $(OBJ_D)\bf_ofb64.obj \
-       $(OBJ_D)\c_skey.obj $(OBJ_D)\c_ecb.obj $(OBJ_D)\c_enc.obj \
-       $(OBJ_D)\c_cfb64.obj $(OBJ_D)\c_ofb64.obj $(OBJ_D)\bn_add.obj \
-       $(OBJ_D)\bn_div.obj $(OBJ_D)\bn_exp.obj $(OBJ_D)\bn_lib.obj \
-       $(OBJ_D)\bn_mul.obj $(OBJ_D)\bn_print.obj $(OBJ_D)\bn_rand.obj \
-       $(OBJ_D)\bn_shift.obj $(OBJ_D)\bn_word.obj $(OBJ_D)\bn_blind.obj \
-       $(OBJ_D)\bn_gcd.obj $(OBJ_D)\bn_prime.obj $(OBJ_D)\bn_err.obj \
-       $(OBJ_D)\bn_sqr.obj $(OBJ_D)\bn_asm.obj $(OBJ_D)\bn_recp.obj \
-       $(OBJ_D)\bn_mont.obj $(OBJ_D)\bn_mpi.obj $(OBJ_D)\bn_exp2.obj \
-       $(OBJ_D)\rsa_eay.obj $(OBJ_D)\rsa_gen.obj $(OBJ_D)\rsa_lib.obj \
-       $(OBJ_D)\rsa_sign.obj $(OBJ_D)\rsa_saos.obj $(OBJ_D)\rsa_err.obj \
-       $(OBJ_D)\rsa_pk1.obj $(OBJ_D)\rsa_ssl.obj $(OBJ_D)\rsa_none.obj \
-       $(OBJ_D)\rsa_oaep.obj $(OBJ_D)\rsa_chk.obj $(OBJ_D)\dsa_gen.obj \
-       $(OBJ_D)\dsa_key.obj $(OBJ_D)\dsa_lib.obj $(OBJ_D)\dsa_asn1.obj \
-       $(OBJ_D)\dsa_vrf.obj $(OBJ_D)\dsa_sign.obj $(OBJ_D)\dsa_err.obj \
-       $(OBJ_D)\dh_gen.obj $(OBJ_D)\dh_key.obj $(OBJ_D)\dh_lib.obj \
-       $(OBJ_D)\dh_check.obj $(OBJ_D)\dh_err.obj $(OBJ_D)\buffer.obj \
-       $(OBJ_D)\buf_err.obj $(OBJ_D)\bio_lib.obj $(OBJ_D)\bio_cb.obj \
-       $(OBJ_D)\bio_err.obj $(OBJ_D)\bss_mem.obj $(OBJ_D)\bss_null.obj \
-       $(OBJ_D)\bss_fd.obj $(OBJ_D)\bss_file.obj $(OBJ_D)\bss_sock.obj \
-       $(OBJ_D)\bss_conn.obj $(OBJ_D)\bf_null.obj $(OBJ_D)\bf_buff.obj \
-       $(OBJ_D)\b_print.obj $(OBJ_D)\b_dump.obj $(OBJ_D)\b_sock.obj \
-       $(OBJ_D)\bss_acpt.obj $(OBJ_D)\bf_nbio.obj $(OBJ_D)\bss_log.obj \
-       $(OBJ_D)\bss_bio.obj $(OBJ_D)\stack.obj $(OBJ_D)\lhash.obj \
-       $(OBJ_D)\lh_stats.obj $(OBJ_D)\md_rand.obj $(OBJ_D)\randfile.obj \
-       $(OBJ_D)\rand_lib.obj $(OBJ_D)\err.obj $(OBJ_D)\err_all.obj \
-       $(OBJ_D)\err_prn.obj $(OBJ_D)\o_names.obj $(OBJ_D)\obj_dat.obj \
-       $(OBJ_D)\obj_lib.obj $(OBJ_D)\obj_err.obj $(OBJ_D)\encode.obj \
-       $(OBJ_D)\digest.obj $(OBJ_D)\evp_enc.obj $(OBJ_D)\evp_key.obj \
-       $(OBJ_D)\e_ecb_d.obj $(OBJ_D)\e_cbc_d.obj $(OBJ_D)\e_cfb_d.obj \
-       $(OBJ_D)\e_ofb_d.obj $(OBJ_D)\e_ecb_i.obj $(OBJ_D)\e_cbc_i.obj \
-       $(OBJ_D)\e_cfb_i.obj $(OBJ_D)\e_ofb_i.obj $(OBJ_D)\e_ecb_3d.obj \
-       $(OBJ_D)\e_cbc_3d.obj $(OBJ_D)\e_rc4.obj $(OBJ_D)\names.obj \
-       $(OBJ_D)\e_cfb_3d.obj $(OBJ_D)\e_ofb_3d.obj $(OBJ_D)\e_xcbc_d.obj \
-       $(OBJ_D)\e_ecb_r2.obj $(OBJ_D)\e_cbc_r2.obj $(OBJ_D)\e_cfb_r2.obj \
-       $(OBJ_D)\e_ofb_r2.obj $(OBJ_D)\e_ecb_bf.obj $(OBJ_D)\e_cbc_bf.obj \
-       $(OBJ_D)\e_cfb_bf.obj $(OBJ_D)\e_ofb_bf.obj $(OBJ_D)\e_ecb_c.obj \
-       $(OBJ_D)\e_cbc_c.obj $(OBJ_D)\e_cfb_c.obj $(OBJ_D)\e_ofb_c.obj \
-       $(OBJ_D)\e_ecb_r5.obj $(OBJ_D)\e_cbc_r5.obj $(OBJ_D)\e_cfb_r5.obj \
-       $(OBJ_D)\e_ofb_r5.obj $(OBJ_D)\m_null.obj $(OBJ_D)\m_md2.obj \
-       $(OBJ_D)\m_md5.obj $(OBJ_D)\m_sha.obj $(OBJ_D)\m_sha1.obj \
-       $(OBJ_D)\m_dss.obj $(OBJ_D)\m_dss1.obj $(OBJ_D)\m_mdc2.obj \
-       $(OBJ_D)\m_ripemd.obj $(OBJ_D)\p_open.obj $(OBJ_D)\p_seal.obj \
-       $(OBJ_D)\p_sign.obj $(OBJ_D)\p_verify.obj $(OBJ_D)\p_lib.obj \
-       $(OBJ_D)\p_enc.obj $(OBJ_D)\p_dec.obj $(OBJ_D)\bio_md.obj \
-       $(OBJ_D)\bio_b64.obj $(OBJ_D)\bio_enc.obj $(OBJ_D)\evp_err.obj \
-       $(OBJ_D)\e_null.obj $(OBJ_D)\c_all.obj $(OBJ_D)\evp_lib.obj \
-       $(OBJ_D)\bio_ok.obj $(OBJ_D)\evp_pkey.obj $(OBJ_D)\evp_pbe.obj \
-       $(OBJ_D)\p5_crpt.obj $(OBJ_D)\p5_crpt2.obj $(OBJ_D)\a_object.obj \
-       $(OBJ_D)\a_bitstr.obj $(OBJ_D)\a_utctm.obj $(OBJ_D)\a_gentm.obj \
-       $(OBJ_D)\a_time.obj $(OBJ_D)\a_int.obj $(OBJ_D)\a_octet.obj \
-       $(OBJ_D)\a_print.obj $(OBJ_D)\a_type.obj $(OBJ_D)\a_set.obj \
-       $(OBJ_D)\a_dup.obj $(OBJ_D)\a_d2i_fp.obj $(OBJ_D)\a_i2d_fp.obj \
-       $(OBJ_D)\a_bmp.obj $(OBJ_D)\a_enum.obj $(OBJ_D)\a_vis.obj \
-       $(OBJ_D)\a_utf8.obj $(OBJ_D)\a_sign.obj $(OBJ_D)\a_digest.obj \
-       $(OBJ_D)\a_verify.obj $(OBJ_D)\x_algor.obj $(OBJ_D)\x_val.obj \
-       $(OBJ_D)\x_pubkey.obj $(OBJ_D)\x_sig.obj $(OBJ_D)\x_req.obj \
-       $(OBJ_D)\x_attrib.obj $(OBJ_D)\x_name.obj $(OBJ_D)\x_cinf.obj \
-       $(OBJ_D)\x_x509.obj $(OBJ_D)\x_crl.obj $(OBJ_D)\x_info.obj \
-       $(OBJ_D)\x_spki.obj $(OBJ_D)\nsseq.obj $(OBJ_D)\d2i_r_pr.obj \
-       $(OBJ_D)\i2d_r_pr.obj $(OBJ_D)\d2i_r_pu.obj $(OBJ_D)\i2d_r_pu.obj \
-       $(OBJ_D)\d2i_s_pr.obj $(OBJ_D)\i2d_s_pr.obj $(OBJ_D)\d2i_s_pu.obj \
-       $(OBJ_D)\i2d_s_pu.obj $(OBJ_D)\d2i_pu.obj $(OBJ_D)\d2i_pr.obj \
-       $(OBJ_D)\i2d_pu.obj $(OBJ_D)\i2d_pr.obj $(OBJ_D)\t_req.obj \
-       $(OBJ_D)\t_x509.obj $(OBJ_D)\t_crl.obj $(OBJ_D)\t_pkey.obj \
-       $(OBJ_D)\p7_i_s.obj $(OBJ_D)\p7_signi.obj $(OBJ_D)\p7_signd.obj \
-       $(OBJ_D)\p7_recip.obj $(OBJ_D)\p7_enc_c.obj $(OBJ_D)\p7_evp.obj \
-       $(OBJ_D)\p7_dgst.obj $(OBJ_D)\p7_s_e.obj $(OBJ_D)\p7_enc.obj \
-       $(OBJ_D)\p7_lib.obj $(OBJ_D)\f_int.obj $(OBJ_D)\f_string.obj \
-       $(OBJ_D)\i2d_dhp.obj $(OBJ_D)\i2d_dsap.obj $(OBJ_D)\d2i_dhp.obj \
-       $(OBJ_D)\d2i_dsap.obj $(OBJ_D)\n_pkey.obj $(OBJ_D)\f_enum.obj \
-       $(OBJ_D)\a_hdr.obj $(OBJ_D)\x_pkey.obj $(OBJ_D)\a_bool.obj \
-       $(OBJ_D)\x_exten.obj $(OBJ_D)\asn1_par.obj $(OBJ_D)\asn1_lib.obj \
-       $(OBJ_D)\asn1_err.obj $(OBJ_D)\a_meth.obj $(OBJ_D)\a_bytes.obj \
-       $(OBJ_D)\evp_asn1.obj $(OBJ_D)\asn_pack.obj $(OBJ_D)\p5_pbe.obj \
-       $(OBJ_D)\p5_pbev2.obj $(OBJ_D)\p8_pkey.obj $(OBJ_D)\pem_sign.obj \
-       $(OBJ_D)\pem_seal.obj $(OBJ_D)\pem_info.obj $(OBJ_D)\pem_lib.obj \
-       $(OBJ_D)\pem_all.obj $(OBJ_D)\pem_err.obj $(OBJ_D)\x509_def.obj \
-       $(OBJ_D)\x509_d2.obj $(OBJ_D)\x509_r2x.obj $(OBJ_D)\x509_cmp.obj \
-       $(OBJ_D)\x509_obj.obj $(OBJ_D)\x509_req.obj $(OBJ_D)\x509_vfy.obj \
-       $(OBJ_D)\x509_set.obj $(OBJ_D)\x509rset.obj $(OBJ_D)\x509_err.obj \
-       $(OBJ_D)\x509name.obj $(OBJ_D)\x509_v3.obj $(OBJ_D)\x509_ext.obj \
-       $(OBJ_D)\x509type.obj $(OBJ_D)\x509_lu.obj $(OBJ_D)\x_all.obj \
-       $(OBJ_D)\x509_txt.obj $(OBJ_D)\by_file.obj $(OBJ_D)\by_dir.obj \
-       $(OBJ_D)\v3_bcons.obj $(OBJ_D)\v3_bitst.obj $(OBJ_D)\v3_conf.obj \
-       $(OBJ_D)\v3_extku.obj $(OBJ_D)\v3_ia5.obj $(OBJ_D)\v3_lib.obj \
-       $(OBJ_D)\v3_prn.obj $(OBJ_D)\v3_utl.obj $(OBJ_D)\v3err.obj \
-       $(OBJ_D)\v3_genn.obj $(OBJ_D)\v3_alt.obj $(OBJ_D)\v3_skey.obj \
-       $(OBJ_D)\v3_akey.obj $(OBJ_D)\v3_pku.obj $(OBJ_D)\v3_int.obj \
-       $(OBJ_D)\v3_enum.obj $(OBJ_D)\v3_sxnet.obj $(OBJ_D)\v3_cpols.obj \
-       $(OBJ_D)\v3_crld.obj $(OBJ_D)\conf.obj $(OBJ_D)\conf_err.obj \
-       $(OBJ_D)\txt_db.obj $(OBJ_D)\pk7_lib.obj $(OBJ_D)\pkcs7err.obj \
-       $(OBJ_D)\pk7_doit.obj $(OBJ_D)\p12_add.obj $(OBJ_D)\p12_attr.obj \
-       $(OBJ_D)\p12_bags.obj $(OBJ_D)\p12_crpt.obj $(OBJ_D)\p12_crt.obj \
-       $(OBJ_D)\p12_decr.obj $(OBJ_D)\p12_init.obj $(OBJ_D)\p12_key.obj \
-       $(OBJ_D)\p12_kiss.obj $(OBJ_D)\p12_lib.obj $(OBJ_D)\p12_mac.obj \
-       $(OBJ_D)\p12_mutl.obj $(OBJ_D)\p12_sbag.obj $(OBJ_D)\p12_utl.obj \
-       $(OBJ_D)\pk12err.obj $(OBJ_D)\comp_lib.obj $(OBJ_D)\c_rle.obj \
-       $(OBJ_D)\c_zlib.obj
-
-SSLOBJ=$(OBJ_D)\s2_meth.obj \
-       $(OBJ_D)\s2_srvr.obj $(OBJ_D)\s2_clnt.obj $(OBJ_D)\s2_lib.obj \
-       $(OBJ_D)\s2_enc.obj $(OBJ_D)\s2_pkt.obj $(OBJ_D)\s3_meth.obj \
-       $(OBJ_D)\s3_srvr.obj $(OBJ_D)\s3_clnt.obj $(OBJ_D)\s3_lib.obj \
-       $(OBJ_D)\s3_enc.obj $(OBJ_D)\s3_pkt.obj $(OBJ_D)\s3_both.obj \
-       $(OBJ_D)\s23_meth.obj $(OBJ_D)\s23_srvr.obj $(OBJ_D)\s23_clnt.obj \
-       $(OBJ_D)\s23_lib.obj $(OBJ_D)\s23_pkt.obj $(OBJ_D)\t1_meth.obj \
-       $(OBJ_D)\t1_srvr.obj $(OBJ_D)\t1_clnt.obj $(OBJ_D)\t1_lib.obj \
-       $(OBJ_D)\t1_enc.obj $(OBJ_D)\ssl_lib.obj $(OBJ_D)\ssl_err2.obj \
-       $(OBJ_D)\ssl_cert.obj $(OBJ_D)\ssl_sess.obj $(OBJ_D)\ssl_ciph.obj \
-       $(OBJ_D)\ssl_stat.obj $(OBJ_D)\ssl_rsa.obj $(OBJ_D)\ssl_asn1.obj \
-       $(OBJ_D)\ssl_txt.obj $(OBJ_D)\ssl_algs.obj $(OBJ_D)\bio_ssl.obj \
-       $(OBJ_D)\ssl_err.obj
-
-RSAGLUEOBJ=$(OBJ_D)\rsaref.obj \
-       $(OBJ_D)\rsar_err.obj
-
-T_EXE=$(TEST_D)\md2test.exe \
-       $(TEST_D)\md5test.exe $(TEST_D)\shatest.exe $(TEST_D)\sha1test.exe \
-       $(TEST_D)\mdc2test.exe $(TEST_D)\hmactest.exe $(TEST_D)\rmdtest.exe \
-       $(TEST_D)\destest.exe $(TEST_D)\rc2test.exe $(TEST_D)\rc4test.exe \
-       $(TEST_D)\rc5test.exe $(TEST_D)\ideatest.exe $(TEST_D)\bftest.exe \
-       $(TEST_D)\casttest.exe $(TEST_D)\bntest.exe $(TEST_D)\exptest.exe \
-       $(TEST_D)\rsa_oaep_test.exe $(TEST_D)\dsatest.exe $(TEST_D)\dhtest.exe \
-       $(TEST_D)\randtest.exe $(TEST_D)\ssltest.exe
-
-###################################################################
-all: banner $(TMP_D) $(BIN_D) $(TEST_D) $(LIB_D) $(INCO_D) headers lib exe
-
-banner:
-
-
-$(TMP_D):
-       $(MKDIR) $(TMP_D)
-# NB: uncomment out these lines if BIN_D, TEST_D and LIB_D are different
-#$(BIN_D):
-#      $(MKDIR) $(BIN_D)
-#
-#$(TEST_D):
-#      $(MKDIR) $(TEST_D)
-
-$(LIB_D):
-       $(MKDIR) $(LIB_D)
-
-$(INCO_D): $(INC_D)
-       $(MKDIR) $(INCO_D)
-
-$(INC_D):
-       $(MKDIR) $(INC_D)
-
-headers: $(HEADER) $(EXHEADER)
-
-lib: $(LIBS_DEP)
-
-exe: $(T_EXE) $(BIN_D)\$(E_EXE).exe
-
-install:
-       $(MKDIR) $(INSTALLTOP)
-       $(MKDIR) $(INSTALLTOP)\bin
-       $(MKDIR) $(INSTALLTOP)\include
-       $(MKDIR) $(INSTALLTOP)\include\openssl
-       $(MKDIR) $(INSTALLTOP)\lib
-       $(CP) $(INCO_D)\*.[ch] $(INSTALLTOP)\include\openssl
-       $(CP) $(BIN_D)\$(E_EXE).exe $(INSTALLTOP)\bin
-       $(CP) $(O_SSL) $(INSTALLTOP)\lib
-       $(CP) $(O_CRYPTO) $(INSTALLTOP)\lib
-
-clean:
-       $(RM) $(TMP_D)\*.*
-
-vclean:
-       $(RM) $(TMP_D)\*.*
-       $(RM) $(OUT_D)\*.*
-
-$(INCL_D)\cryptlib.h: $(SRC_D)\crypto\cryptlib.h
-       $(CP) $(SRC_D)\crypto\cryptlib.h $(INCL_D)\cryptlib.h
-
-$(INCL_D)\buildinf.h: $(SRC_D)\crypto\buildinf.h
-       $(CP) $(SRC_D)\crypto\buildinf.h $(INCL_D)\buildinf.h
-
-$(INCL_D)\md5_locl.h: $(SRC_D)\crypto\md5\md5_locl.h
-       $(CP) $(SRC_D)\crypto\md5\md5_locl.h $(INCL_D)\md5_locl.h
-
-$(INCL_D)\sha_locl.h: $(SRC_D)\crypto\sha\sha_locl.h
-       $(CP) $(SRC_D)\crypto\sha\sha_locl.h $(INCL_D)\sha_locl.h
-
-$(INCL_D)\rmd_locl.h: $(SRC_D)\crypto\ripemd\rmd_locl.h
-       $(CP) $(SRC_D)\crypto\ripemd\rmd_locl.h $(INCL_D)\rmd_locl.h
-
-$(INCL_D)\rmdconst.h: $(SRC_D)\crypto\ripemd\rmdconst.h
-       $(CP) $(SRC_D)\crypto\ripemd\rmdconst.h $(INCL_D)\rmdconst.h
-
-$(INCL_D)\des_locl.h: $(SRC_D)\crypto\des\des_locl.h
-       $(CP) $(SRC_D)\crypto\des\des_locl.h $(INCL_D)\des_locl.h
-
-$(INCL_D)\rpc_des.h: $(SRC_D)\crypto\des\rpc_des.h
-       $(CP) $(SRC_D)\crypto\des\rpc_des.h $(INCL_D)\rpc_des.h
-
-$(INCL_D)\podd.h: $(SRC_D)\crypto\des\podd.h
-       $(CP) $(SRC_D)\crypto\des\podd.h $(INCL_D)\podd.h
-
-$(INCL_D)\sk.h: $(SRC_D)\crypto\des\sk.h
-       $(CP) $(SRC_D)\crypto\des\sk.h $(INCL_D)\sk.h
-
-$(INCL_D)\spr.h: $(SRC_D)\crypto\des\spr.h
-       $(CP) $(SRC_D)\crypto\des\spr.h $(INCL_D)\spr.h
-
-$(INCL_D)\des_ver.h: $(SRC_D)\crypto\des\des_ver.h
-       $(CP) $(SRC_D)\crypto\des\des_ver.h $(INCL_D)\des_ver.h
-
-$(INCL_D)\rc2_locl.h: $(SRC_D)\crypto\rc2\rc2_locl.h
-       $(CP) $(SRC_D)\crypto\rc2\rc2_locl.h $(INCL_D)\rc2_locl.h
-
-$(INCL_D)\rc4_locl.h: $(SRC_D)\crypto\rc4\rc4_locl.h
-       $(CP) $(SRC_D)\crypto\rc4\rc4_locl.h $(INCL_D)\rc4_locl.h
-
-$(INCL_D)\rc5_locl.h: $(SRC_D)\crypto\rc5\rc5_locl.h
-       $(CP) $(SRC_D)\crypto\rc5\rc5_locl.h $(INCL_D)\rc5_locl.h
-
-$(INCL_D)\idea_lcl.h: $(SRC_D)\crypto\idea\idea_lcl.h
-       $(CP) $(SRC_D)\crypto\idea\idea_lcl.h $(INCL_D)\idea_lcl.h
-
-$(INCL_D)\bf_pi.h: $(SRC_D)\crypto\bf\bf_pi.h
-       $(CP) $(SRC_D)\crypto\bf\bf_pi.h $(INCL_D)\bf_pi.h
-
-$(INCL_D)\bf_locl.h: $(SRC_D)\crypto\bf\bf_locl.h
-       $(CP) $(SRC_D)\crypto\bf\bf_locl.h $(INCL_D)\bf_locl.h
-
-$(INCL_D)\cast_s.h: $(SRC_D)\crypto\cast\cast_s.h
-       $(CP) $(SRC_D)\crypto\cast\cast_s.h $(INCL_D)\cast_s.h
-
-$(INCL_D)\cast_lcl.h: $(SRC_D)\crypto\cast\cast_lcl.h
-       $(CP) $(SRC_D)\crypto\cast\cast_lcl.h $(INCL_D)\cast_lcl.h
-
-$(INCL_D)\bn_lcl.h: $(SRC_D)\crypto\bn\bn_lcl.h
-       $(CP) $(SRC_D)\crypto\bn\bn_lcl.h $(INCL_D)\bn_lcl.h
-
-$(INCL_D)\bn_prime.h: $(SRC_D)\crypto\bn\bn_prime.h
-       $(CP) $(SRC_D)\crypto\bn\bn_prime.h $(INCL_D)\bn_prime.h
-
-$(INCL_D)\bss_file.c: $(SRC_D)\crypto\bio\bss_file.c
-       $(CP) $(SRC_D)\crypto\bio\bss_file.c $(INCL_D)\bss_file.c
-
-$(INCL_D)\obj_dat.h: $(SRC_D)\crypto\objects\obj_dat.h
-       $(CP) $(SRC_D)\crypto\objects\obj_dat.h $(INCL_D)\obj_dat.h
-
-$(INCL_D)\conf_lcl.h: $(SRC_D)\crypto\conf\conf_lcl.h
-       $(CP) $(SRC_D)\crypto\conf\conf_lcl.h $(INCL_D)\conf_lcl.h
-
-$(INCL_D)\ssl_locl.h: $(SRC_D)\ssl\ssl_locl.h
-       $(CP) $(SRC_D)\ssl\ssl_locl.h $(INCL_D)\ssl_locl.h
-
-$(INCL_D)\apps.h: $(SRC_D)\apps\apps.h
-       $(CP) $(SRC_D)\apps\apps.h $(INCL_D)\apps.h
-
-$(INCL_D)\progs.h: $(SRC_D)\apps\progs.h
-       $(CP) $(SRC_D)\apps\progs.h $(INCL_D)\progs.h
-
-$(INCL_D)\s_apps.h: $(SRC_D)\apps\s_apps.h
-       $(CP) $(SRC_D)\apps\s_apps.h $(INCL_D)\s_apps.h
-
-$(INCL_D)\testdsa.h: $(SRC_D)\apps\testdsa.h
-       $(CP) $(SRC_D)\apps\testdsa.h $(INCL_D)\testdsa.h
-
-$(INCL_D)\testrsa.h: $(SRC_D)\apps\testrsa.h
-       $(CP) $(SRC_D)\apps\testrsa.h $(INCL_D)\testrsa.h
-
-$(INCO_D)\e_os.h: $(SRC_D)\.\e_os.h
-       $(CP) $(SRC_D)\.\e_os.h $(INCO_D)\e_os.h
-
-$(INCO_D)\e_os2.h: $(SRC_D)\.\e_os2.h
-       $(CP) $(SRC_D)\.\e_os2.h $(INCO_D)\e_os2.h
-
-$(INCO_D)\crypto.h: $(SRC_D)\crypto\crypto.h
-       $(CP) $(SRC_D)\crypto\crypto.h $(INCO_D)\crypto.h
-
-$(INCO_D)\tmdiff.h: $(SRC_D)\crypto\tmdiff.h
-       $(CP) $(SRC_D)\crypto\tmdiff.h $(INCO_D)\tmdiff.h
-
-$(INCO_D)\opensslv.h: $(SRC_D)\crypto\opensslv.h
-       $(CP) $(SRC_D)\crypto\opensslv.h $(INCO_D)\opensslv.h
-
-$(INCO_D)\opensslconf.h: $(SRC_D)\crypto\opensslconf.h
-       $(CP) $(SRC_D)\crypto\opensslconf.h $(INCO_D)\opensslconf.h
-
-$(INCO_D)\ebcdic.h: $(SRC_D)\crypto\ebcdic.h
-       $(CP) $(SRC_D)\crypto\ebcdic.h $(INCO_D)\ebcdic.h
-
-$(INCO_D)\md2.h: $(SRC_D)\crypto\md2\md2.h
-       $(CP) $(SRC_D)\crypto\md2\md2.h $(INCO_D)\md2.h
-
-$(INCO_D)\md5.h: $(SRC_D)\crypto\md5\md5.h
-       $(CP) $(SRC_D)\crypto\md5\md5.h $(INCO_D)\md5.h
-
-$(INCO_D)\sha.h: $(SRC_D)\crypto\sha\sha.h
-       $(CP) $(SRC_D)\crypto\sha\sha.h $(INCO_D)\sha.h
-
-$(INCO_D)\mdc2.h: $(SRC_D)\crypto\mdc2\mdc2.h
-       $(CP) $(SRC_D)\crypto\mdc2\mdc2.h $(INCO_D)\mdc2.h
-
-$(INCO_D)\hmac.h: $(SRC_D)\crypto\hmac\hmac.h
-       $(CP) $(SRC_D)\crypto\hmac\hmac.h $(INCO_D)\hmac.h
-
-$(INCO_D)\ripemd.h: $(SRC_D)\crypto\ripemd\ripemd.h
-       $(CP) $(SRC_D)\crypto\ripemd\ripemd.h $(INCO_D)\ripemd.h
-
-$(INCO_D)\des.h: $(SRC_D)\crypto\des\des.h
-       $(CP) $(SRC_D)\crypto\des\des.h $(INCO_D)\des.h
-
-$(INCO_D)\rc2.h: $(SRC_D)\crypto\rc2\rc2.h
-       $(CP) $(SRC_D)\crypto\rc2\rc2.h $(INCO_D)\rc2.h
-
-$(INCO_D)\rc4.h: $(SRC_D)\crypto\rc4\rc4.h
-       $(CP) $(SRC_D)\crypto\rc4\rc4.h $(INCO_D)\rc4.h
-
-$(INCO_D)\rc5.h: $(SRC_D)\crypto\rc5\rc5.h
-       $(CP) $(SRC_D)\crypto\rc5\rc5.h $(INCO_D)\rc5.h
-
-$(INCO_D)\idea.h: $(SRC_D)\crypto\idea\idea.h
-       $(CP) $(SRC_D)\crypto\idea\idea.h $(INCO_D)\idea.h
-
-$(INCO_D)\blowfish.h: $(SRC_D)\crypto\bf\blowfish.h
-       $(CP) $(SRC_D)\crypto\bf\blowfish.h $(INCO_D)\blowfish.h
-
-$(INCO_D)\cast.h: $(SRC_D)\crypto\cast\cast.h
-       $(CP) $(SRC_D)\crypto\cast\cast.h $(INCO_D)\cast.h
-
-$(INCO_D)\bn.h: $(SRC_D)\crypto\bn\bn.h
-       $(CP) $(SRC_D)\crypto\bn\bn.h $(INCO_D)\bn.h
-
-$(INCO_D)\rsa.h: $(SRC_D)\crypto\rsa\rsa.h
-       $(CP) $(SRC_D)\crypto\rsa\rsa.h $(INCO_D)\rsa.h
-
-$(INCO_D)\dsa.h: $(SRC_D)\crypto\dsa\dsa.h
-       $(CP) $(SRC_D)\crypto\dsa\dsa.h $(INCO_D)\dsa.h
-
-$(INCO_D)\dh.h: $(SRC_D)\crypto\dh\dh.h
-       $(CP) $(SRC_D)\crypto\dh\dh.h $(INCO_D)\dh.h
-
-$(INCO_D)\buffer.h: $(SRC_D)\crypto\buffer\buffer.h
-       $(CP) $(SRC_D)\crypto\buffer\buffer.h $(INCO_D)\buffer.h
-
-$(INCO_D)\bio.h: $(SRC_D)\crypto\bio\bio.h
-       $(CP) $(SRC_D)\crypto\bio\bio.h $(INCO_D)\bio.h
-
-$(INCO_D)\stack.h: $(SRC_D)\crypto\stack\stack.h
-       $(CP) $(SRC_D)\crypto\stack\stack.h $(INCO_D)\stack.h
-
-$(INCO_D)\safestack.h: $(SRC_D)\crypto\stack\safestack.h
-       $(CP) $(SRC_D)\crypto\stack\safestack.h $(INCO_D)\safestack.h
-
-$(INCO_D)\lhash.h: $(SRC_D)\crypto\lhash\lhash.h
-       $(CP) $(SRC_D)\crypto\lhash\lhash.h $(INCO_D)\lhash.h
-
-$(INCO_D)\rand.h: $(SRC_D)\crypto\rand\rand.h
-       $(CP) $(SRC_D)\crypto\rand\rand.h $(INCO_D)\rand.h
-
-$(INCO_D)\err.h: $(SRC_D)\crypto\err\err.h
-       $(CP) $(SRC_D)\crypto\err\err.h $(INCO_D)\err.h
-
-$(INCO_D)\objects.h: $(SRC_D)\crypto\objects\objects.h
-       $(CP) $(SRC_D)\crypto\objects\objects.h $(INCO_D)\objects.h
-
-$(INCO_D)\evp.h: $(SRC_D)\crypto\evp\evp.h
-       $(CP) $(SRC_D)\crypto\evp\evp.h $(INCO_D)\evp.h
-
-$(INCO_D)\asn1.h: $(SRC_D)\crypto\asn1\asn1.h
-       $(CP) $(SRC_D)\crypto\asn1\asn1.h $(INCO_D)\asn1.h
-
-$(INCO_D)\asn1_mac.h: $(SRC_D)\crypto\asn1\asn1_mac.h
-       $(CP) $(SRC_D)\crypto\asn1\asn1_mac.h $(INCO_D)\asn1_mac.h
-
-$(INCO_D)\pem.h: $(SRC_D)\crypto\pem\pem.h
-       $(CP) $(SRC_D)\crypto\pem\pem.h $(INCO_D)\pem.h
-
-$(INCO_D)\pem2.h: $(SRC_D)\crypto\pem\pem2.h
-       $(CP) $(SRC_D)\crypto\pem\pem2.h $(INCO_D)\pem2.h
-
-$(INCO_D)\x509.h: $(SRC_D)\crypto\x509\x509.h
-       $(CP) $(SRC_D)\crypto\x509\x509.h $(INCO_D)\x509.h
-
-$(INCO_D)\x509_vfy.h: $(SRC_D)\crypto\x509\x509_vfy.h
-       $(CP) $(SRC_D)\crypto\x509\x509_vfy.h $(INCO_D)\x509_vfy.h
-
-$(INCO_D)\x509v3.h: $(SRC_D)\crypto\x509v3\x509v3.h
-       $(CP) $(SRC_D)\crypto\x509v3\x509v3.h $(INCO_D)\x509v3.h
-
-$(INCO_D)\conf.h: $(SRC_D)\crypto\conf\conf.h
-       $(CP) $(SRC_D)\crypto\conf\conf.h $(INCO_D)\conf.h
-
-$(INCO_D)\txt_db.h: $(SRC_D)\crypto\txt_db\txt_db.h
-       $(CP) $(SRC_D)\crypto\txt_db\txt_db.h $(INCO_D)\txt_db.h
-
-$(INCO_D)\pkcs7.h: $(SRC_D)\crypto\pkcs7\pkcs7.h
-       $(CP) $(SRC_D)\crypto\pkcs7\pkcs7.h $(INCO_D)\pkcs7.h
-
-$(INCO_D)\pkcs12.h: $(SRC_D)\crypto\pkcs12\pkcs12.h
-       $(CP) $(SRC_D)\crypto\pkcs12\pkcs12.h $(INCO_D)\pkcs12.h
-
-$(INCO_D)\comp.h: $(SRC_D)\crypto\comp\comp.h
-       $(CP) $(SRC_D)\crypto\comp\comp.h $(INCO_D)\comp.h
-
-$(INCO_D)\ssl.h: $(SRC_D)\ssl\ssl.h
-       $(CP) $(SRC_D)\ssl\ssl.h $(INCO_D)\ssl.h
-
-$(INCO_D)\ssl2.h: $(SRC_D)\ssl\ssl2.h
-       $(CP) $(SRC_D)\ssl\ssl2.h $(INCO_D)\ssl2.h
-
-$(INCO_D)\ssl3.h: $(SRC_D)\ssl\ssl3.h
-       $(CP) $(SRC_D)\ssl\ssl3.h $(INCO_D)\ssl3.h
-
-$(INCO_D)\ssl23.h: $(SRC_D)\ssl\ssl23.h
-       $(CP) $(SRC_D)\ssl\ssl23.h $(INCO_D)\ssl23.h
-
-$(INCO_D)\tls1.h: $(SRC_D)\ssl\tls1.h
-       $(CP) $(SRC_D)\ssl\tls1.h $(INCO_D)\tls1.h
-
-$(INCO_D)\rsaref.h: $(SRC_D)\rsaref\rsaref.h
-       $(CP) $(SRC_D)\rsaref\rsaref.h $(INCO_D)\rsaref.h
-
-$(OBJ_D)\md2test.obj: $(SRC_D)\crypto\md2\md2test.c
-       $(CC) /Fo$(OBJ_D)\md2test.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\md2\md2test.c
-
-$(OBJ_D)\md5test.obj: $(SRC_D)\crypto\md5\md5test.c
-       $(CC) /Fo$(OBJ_D)\md5test.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\md5\md5test.c
-
-$(OBJ_D)\shatest.obj: $(SRC_D)\crypto\sha\shatest.c
-       $(CC) /Fo$(OBJ_D)\shatest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\sha\shatest.c
-
-$(OBJ_D)\sha1test.obj: $(SRC_D)\crypto\sha\sha1test.c
-       $(CC) /Fo$(OBJ_D)\sha1test.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\sha\sha1test.c
-
-$(OBJ_D)\mdc2test.obj: $(SRC_D)\crypto\mdc2\mdc2test.c
-       $(CC) /Fo$(OBJ_D)\mdc2test.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\mdc2\mdc2test.c
-
-$(OBJ_D)\hmactest.obj: $(SRC_D)\crypto\hmac\hmactest.c
-       $(CC) /Fo$(OBJ_D)\hmactest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\hmac\hmactest.c
-
-$(OBJ_D)\rmdtest.obj: $(SRC_D)\crypto\ripemd\rmdtest.c
-       $(CC) /Fo$(OBJ_D)\rmdtest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\ripemd\rmdtest.c
-
-$(OBJ_D)\destest.obj: $(SRC_D)\crypto\des\destest.c
-       $(CC) /Fo$(OBJ_D)\destest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\des\destest.c
-
-$(OBJ_D)\rc2test.obj: $(SRC_D)\crypto\rc2\rc2test.c
-       $(CC) /Fo$(OBJ_D)\rc2test.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\rc2\rc2test.c
-
-$(OBJ_D)\rc4test.obj: $(SRC_D)\crypto\rc4\rc4test.c
-       $(CC) /Fo$(OBJ_D)\rc4test.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\rc4\rc4test.c
-
-$(OBJ_D)\rc5test.obj: $(SRC_D)\crypto\rc5\rc5test.c
-       $(CC) /Fo$(OBJ_D)\rc5test.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\rc5\rc5test.c
-
-$(OBJ_D)\ideatest.obj: $(SRC_D)\crypto\idea\ideatest.c
-       $(CC) /Fo$(OBJ_D)\ideatest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\idea\ideatest.c
-
-$(OBJ_D)\bftest.obj: $(SRC_D)\crypto\bf\bftest.c
-       $(CC) /Fo$(OBJ_D)\bftest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\bf\bftest.c
-
-$(OBJ_D)\casttest.obj: $(SRC_D)\crypto\cast\casttest.c
-       $(CC) /Fo$(OBJ_D)\casttest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\cast\casttest.c
-
-$(OBJ_D)\bntest.obj: $(SRC_D)\crypto\bn\bntest.c
-       $(CC) /Fo$(OBJ_D)\bntest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\bn\bntest.c
-
-$(OBJ_D)\exptest.obj: $(SRC_D)\crypto\bn\exptest.c
-       $(CC) /Fo$(OBJ_D)\exptest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\bn\exptest.c
-
-$(OBJ_D)\rsa_oaep_test.obj: $(SRC_D)\crypto\rsa\rsa_oaep_test.c
-       $(CC) /Fo$(OBJ_D)\rsa_oaep_test.obj $(APP_CFLAGS) -c 
$(SRC_D)\crypto\rsa\rsa_oaep_test.c
-
-$(OBJ_D)\dsatest.obj: $(SRC_D)\crypto\dsa\dsatest.c
-       $(CC) /Fo$(OBJ_D)\dsatest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\dsa\dsatest.c
-
-$(OBJ_D)\dhtest.obj: $(SRC_D)\crypto\dh\dhtest.c
-       $(CC) /Fo$(OBJ_D)\dhtest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\dh\dhtest.c
-
-$(OBJ_D)\randtest.obj: $(SRC_D)\crypto\rand\randtest.c
-       $(CC) /Fo$(OBJ_D)\randtest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\rand\randtest.c
-
-$(OBJ_D)\ssltest.obj: $(SRC_D)\ssl\ssltest.c
-       $(CC) /Fo$(OBJ_D)\ssltest.obj $(APP_CFLAGS) -c $(SRC_D)\ssl\ssltest.c
-
-$(OBJ_D)\verify.obj: $(SRC_D)\apps\verify.c
-       $(CC) /Fo$(OBJ_D)\verify.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\verify.c
-
-$(OBJ_D)\asn1pars.obj: $(SRC_D)\apps\asn1pars.c
-       $(CC) /Fo$(OBJ_D)\asn1pars.obj -DMONOLITH $(APP_CFLAGS) -c 
$(SRC_D)\apps\asn1pars.c
-
-$(OBJ_D)\req.obj: $(SRC_D)\apps\req.c
-       $(CC) /Fo$(OBJ_D)\req.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\req.c
-
-$(OBJ_D)\dgst.obj: $(SRC_D)\apps\dgst.c
-       $(CC) /Fo$(OBJ_D)\dgst.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\dgst.c
-
-$(OBJ_D)\dh.obj: $(SRC_D)\apps\dh.c
-       $(CC) /Fo$(OBJ_D)\dh.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\dh.c
-
-$(OBJ_D)\enc.obj: $(SRC_D)\apps\enc.c
-       $(CC) /Fo$(OBJ_D)\enc.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\enc.c
-
-$(OBJ_D)\gendh.obj: $(SRC_D)\apps\gendh.c
-       $(CC) /Fo$(OBJ_D)\gendh.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\gendh.c
-
-$(OBJ_D)\errstr.obj: $(SRC_D)\apps\errstr.c
-       $(CC) /Fo$(OBJ_D)\errstr.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\errstr.c
-
-$(OBJ_D)\ca.obj: $(SRC_D)\apps\ca.c
-       $(CC) /Fo$(OBJ_D)\ca.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\ca.c
-
-$(OBJ_D)\pkcs7.obj: $(SRC_D)\apps\pkcs7.c
-       $(CC) /Fo$(OBJ_D)\pkcs7.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\pkcs7.c
-
-$(OBJ_D)\crl2p7.obj: $(SRC_D)\apps\crl2p7.c
-       $(CC) /Fo$(OBJ_D)\crl2p7.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\crl2p7.c
-
-$(OBJ_D)\crl.obj: $(SRC_D)\apps\crl.c
-       $(CC) /Fo$(OBJ_D)\crl.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\crl.c
-
-$(OBJ_D)\rsa.obj: $(SRC_D)\apps\rsa.c
-       $(CC) /Fo$(OBJ_D)\rsa.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\rsa.c
-
-$(OBJ_D)\dsa.obj: $(SRC_D)\apps\dsa.c
-       $(CC) /Fo$(OBJ_D)\dsa.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\dsa.c
-
-$(OBJ_D)\dsaparam.obj: $(SRC_D)\apps\dsaparam.c
-       $(CC) /Fo$(OBJ_D)\dsaparam.obj -DMONOLITH $(APP_CFLAGS) -c 
$(SRC_D)\apps\dsaparam.c
-
-$(OBJ_D)\x509.obj: $(SRC_D)\apps\x509.c
-       $(CC) /Fo$(OBJ_D)\x509.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\x509.c
-
-$(OBJ_D)\genrsa.obj: $(SRC_D)\apps\genrsa.c
-       $(CC) /Fo$(OBJ_D)\genrsa.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\genrsa.c
-
-$(OBJ_D)\gendsa.obj: $(SRC_D)\apps\gendsa.c
-       $(CC) /Fo$(OBJ_D)\gendsa.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\gendsa.c
-
-$(OBJ_D)\s_server.obj: $(SRC_D)\apps\s_server.c
-       $(CC) /Fo$(OBJ_D)\s_server.obj -DMONOLITH $(APP_CFLAGS) -c 
$(SRC_D)\apps\s_server.c
-
-$(OBJ_D)\s_client.obj: $(SRC_D)\apps\s_client.c
-       $(CC) /Fo$(OBJ_D)\s_client.obj -DMONOLITH $(APP_CFLAGS) -c 
$(SRC_D)\apps\s_client.c
-
-$(OBJ_D)\speed.obj: $(SRC_D)\apps\speed.c
-       $(CC) /Fo$(OBJ_D)\speed.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\speed.c
-
-$(OBJ_D)\s_time.obj: $(SRC_D)\apps\s_time.c
-       $(CC) /Fo$(OBJ_D)\s_time.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\s_time.c
-
-$(OBJ_D)\apps.obj: $(SRC_D)\apps\apps.c
-       $(CC) /Fo$(OBJ_D)\apps.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\apps.c
-
-$(OBJ_D)\s_cb.obj: $(SRC_D)\apps\s_cb.c
-       $(CC) /Fo$(OBJ_D)\s_cb.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\s_cb.c
-
-$(OBJ_D)\s_socket.obj: $(SRC_D)\apps\s_socket.c
-       $(CC) /Fo$(OBJ_D)\s_socket.obj -DMONOLITH $(APP_CFLAGS) -c 
$(SRC_D)\apps\s_socket.c
-
-$(OBJ_D)\version.obj: $(SRC_D)\apps\version.c
-       $(CC) /Fo$(OBJ_D)\version.obj -DMONOLITH $(APP_CFLAGS) -c 
$(SRC_D)\apps\version.c
-
-$(OBJ_D)\sess_id.obj: $(SRC_D)\apps\sess_id.c
-       $(CC) /Fo$(OBJ_D)\sess_id.obj -DMONOLITH $(APP_CFLAGS) -c 
$(SRC_D)\apps\sess_id.c
-
-$(OBJ_D)\ciphers.obj: $(SRC_D)\apps\ciphers.c
-       $(CC) /Fo$(OBJ_D)\ciphers.obj -DMONOLITH $(APP_CFLAGS) -c 
$(SRC_D)\apps\ciphers.c
-
-$(OBJ_D)\nseq.obj: $(SRC_D)\apps\nseq.c
-       $(CC) /Fo$(OBJ_D)\nseq.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\nseq.c
-
-$(OBJ_D)\pkcs12.obj: $(SRC_D)\apps\pkcs12.c
-       $(CC) /Fo$(OBJ_D)\pkcs12.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\pkcs12.c
-
-$(OBJ_D)\pkcs8.obj: $(SRC_D)\apps\pkcs8.c
-       $(CC) /Fo$(OBJ_D)\pkcs8.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\pkcs8.c
-
-$(OBJ_D)\openssl.obj: $(SRC_D)\apps\openssl.c
-       $(CC) /Fo$(OBJ_D)\openssl.obj -DMONOLITH $(APP_CFLAGS) -c 
$(SRC_D)\apps\openssl.c
-
-$(OBJ_D)\cryptlib.obj: $(SRC_D)\crypto\cryptlib.c
-       $(CC) /Fo$(OBJ_D)\cryptlib.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\cryptlib.c
-
-$(OBJ_D)\mem.obj: $(SRC_D)\crypto\mem.c
-       $(CC) /Fo$(OBJ_D)\mem.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\mem.c
-
-$(OBJ_D)\cversion.obj: $(SRC_D)\crypto\cversion.c
-       $(CC) /Fo$(OBJ_D)\cversion.obj  $(LIB_CFLAGS) -DMK1MF_BUILD 
-DMK1MF_PLATFORM_VC_WIN32 -c $(SRC_D)\crypto\cversion.c
-
-$(OBJ_D)\ex_data.obj: $(SRC_D)\crypto\ex_data.c
-       $(CC) /Fo$(OBJ_D)\ex_data.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\ex_data.c
-
-$(OBJ_D)\tmdiff.obj: $(SRC_D)\crypto\tmdiff.c
-       $(CC) /Fo$(OBJ_D)\tmdiff.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\tmdiff.c
-
-$(OBJ_D)\cpt_err.obj: $(SRC_D)\crypto\cpt_err.c
-       $(CC) /Fo$(OBJ_D)\cpt_err.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\cpt_err.c
-
-$(OBJ_D)\md2_dgst.obj: $(SRC_D)\crypto\md2\md2_dgst.c
-       $(CC) /Fo$(OBJ_D)\md2_dgst.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\md2\md2_dgst.c
-
-$(OBJ_D)\md2_one.obj: $(SRC_D)\crypto\md2\md2_one.c
-       $(CC) /Fo$(OBJ_D)\md2_one.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\md2\md2_one.c
-
-$(OBJ_D)\md5_dgst.obj: $(SRC_D)\crypto\md5\md5_dgst.c
-       $(CC) /Fo$(OBJ_D)\md5_dgst.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\md5\md5_dgst.c
-
-$(OBJ_D)\md5_one.obj: $(SRC_D)\crypto\md5\md5_one.c
-       $(CC) /Fo$(OBJ_D)\md5_one.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\md5\md5_one.c
-
-$(OBJ_D)\sha_dgst.obj: $(SRC_D)\crypto\sha\sha_dgst.c
-       $(CC) /Fo$(OBJ_D)\sha_dgst.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\sha\sha_dgst.c
-
-$(OBJ_D)\sha1dgst.obj: $(SRC_D)\crypto\sha\sha1dgst.c
-       $(CC) /Fo$(OBJ_D)\sha1dgst.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\sha\sha1dgst.c
-
-$(OBJ_D)\sha_one.obj: $(SRC_D)\crypto\sha\sha_one.c
-       $(CC) /Fo$(OBJ_D)\sha_one.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\sha\sha_one.c
-
-$(OBJ_D)\sha1_one.obj: $(SRC_D)\crypto\sha\sha1_one.c
-       $(CC) /Fo$(OBJ_D)\sha1_one.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\sha\sha1_one.c
-
-$(OBJ_D)\mdc2dgst.obj: $(SRC_D)\crypto\mdc2\mdc2dgst.c
-       $(CC) /Fo$(OBJ_D)\mdc2dgst.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\mdc2\mdc2dgst.c
-
-$(OBJ_D)\mdc2_one.obj: $(SRC_D)\crypto\mdc2\mdc2_one.c
-       $(CC) /Fo$(OBJ_D)\mdc2_one.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\mdc2\mdc2_one.c
-
-$(OBJ_D)\hmac.obj: $(SRC_D)\crypto\hmac\hmac.c
-       $(CC) /Fo$(OBJ_D)\hmac.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\hmac\hmac.c
-
-$(OBJ_D)\rmd_dgst.obj: $(SRC_D)\crypto\ripemd\rmd_dgst.c
-       $(CC) /Fo$(OBJ_D)\rmd_dgst.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\ripemd\rmd_dgst.c
-
-$(OBJ_D)\rmd_one.obj: $(SRC_D)\crypto\ripemd\rmd_one.c
-       $(CC) /Fo$(OBJ_D)\rmd_one.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\ripemd\rmd_one.c
-
-$(OBJ_D)\set_key.obj: $(SRC_D)\crypto\des\set_key.c
-       $(CC) /Fo$(OBJ_D)\set_key.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\des\set_key.c
-
-$(OBJ_D)\ecb_enc.obj: $(SRC_D)\crypto\des\ecb_enc.c
-       $(CC) /Fo$(OBJ_D)\ecb_enc.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\des\ecb_enc.c
-
-$(OBJ_D)\cbc_enc.obj: $(SRC_D)\crypto\des\cbc_enc.c
-       $(CC) /Fo$(OBJ_D)\cbc_enc.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\des\cbc_enc.c
-
-$(OBJ_D)\ecb3_enc.obj: $(SRC_D)\crypto\des\ecb3_enc.c
-       $(CC) /Fo$(OBJ_D)\ecb3_enc.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\des\ecb3_enc.c
-
-$(OBJ_D)\cfb64enc.obj: $(SRC_D)\crypto\des\cfb64enc.c
-       $(CC) /Fo$(OBJ_D)\cfb64enc.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\des\cfb64enc.c
-
-$(OBJ_D)\cfb64ede.obj: $(SRC_D)\crypto\des\cfb64ede.c
-       $(CC) /Fo$(OBJ_D)\cfb64ede.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\des\cfb64ede.c
-
-$(OBJ_D)\cfb_enc.obj: $(SRC_D)\crypto\des\cfb_enc.c
-       $(CC) /Fo$(OBJ_D)\cfb_enc.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\des\cfb_enc.c
-
-$(OBJ_D)\ofb64ede.obj: $(SRC_D)\crypto\des\ofb64ede.c
-       $(CC) /Fo$(OBJ_D)\ofb64ede.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\des\ofb64ede.c
-
-$(OBJ_D)\enc_read.obj: $(SRC_D)\crypto\des\enc_read.c
-       $(CC) /Fo$(OBJ_D)\enc_read.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\des\enc_read.c
-
-$(OBJ_D)\enc_writ.obj: $(SRC_D)\crypto\des\enc_writ.c
-       $(CC) /Fo$(OBJ_D)\enc_writ.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\des\enc_writ.c
-
-$(OBJ_D)\ofb64enc.obj: $(SRC_D)\crypto\des\ofb64enc.c
-       $(CC) /Fo$(OBJ_D)\ofb64enc.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\des\ofb64enc.c
-
-$(OBJ_D)\ofb_enc.obj: $(SRC_D)\crypto\des\ofb_enc.c
-       $(CC) /Fo$(OBJ_D)\ofb_enc.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\des\ofb_enc.c
-
-$(OBJ_D)\str2key.obj: $(SRC_D)\crypto\des\str2key.c
-       $(CC) /Fo$(OBJ_D)\str2key.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\des\str2key.c
-
-$(OBJ_D)\pcbc_enc.obj: $(SRC_D)\crypto\des\pcbc_enc.c
-       $(CC) /Fo$(OBJ_D)\pcbc_enc.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\des\pcbc_enc.c
-
-$(OBJ_D)\qud_cksm.obj: $(SRC_D)\crypto\des\qud_cksm.c
-       $(CC) /Fo$(OBJ_D)\qud_cksm.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\des\qud_cksm.c
-
-$(OBJ_D)\rand_key.obj: $(SRC_D)\crypto\des\rand_key.c
-       $(CC) /Fo$(OBJ_D)\rand_key.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\des\rand_key.c
-
-$(OBJ_D)\des_enc.obj: $(SRC_D)\crypto\des\des_enc.c
-       $(CC) /Fo$(OBJ_D)\des_enc.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\des\des_enc.c
-
-$(OBJ_D)\fcrypt_b.obj: $(SRC_D)\crypto\des\fcrypt_b.c
-       $(CC) /Fo$(OBJ_D)\fcrypt_b.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\des\fcrypt_b.c
-
-$(OBJ_D)\read2pwd.obj: $(SRC_D)\crypto\des\read2pwd.c
-       $(CC) /Fo$(OBJ_D)\read2pwd.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\des\read2pwd.c
-
-$(OBJ_D)\fcrypt.obj: $(SRC_D)\crypto\des\fcrypt.c
-       $(CC) /Fo$(OBJ_D)\fcrypt.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\des\fcrypt.c
-
-$(OBJ_D)\xcbc_enc.obj: $(SRC_D)\crypto\des\xcbc_enc.c
-       $(CC) /Fo$(OBJ_D)\xcbc_enc.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\des\xcbc_enc.c
-
-$(OBJ_D)\read_pwd.obj: $(SRC_D)\crypto\des\read_pwd.c
-       $(CC) /Fo$(OBJ_D)\read_pwd.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\des\read_pwd.c
-
-$(OBJ_D)\rpc_enc.obj: $(SRC_D)\crypto\des\rpc_enc.c
-       $(CC) /Fo$(OBJ_D)\rpc_enc.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\des\rpc_enc.c
-
-$(OBJ_D)\cbc_cksm.obj: $(SRC_D)\crypto\des\cbc_cksm.c
-       $(CC) /Fo$(OBJ_D)\cbc_cksm.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\des\cbc_cksm.c
-
-$(OBJ_D)\supp.obj: $(SRC_D)\crypto\des\supp.c
-       $(CC) /Fo$(OBJ_D)\supp.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\des\supp.c
-
-$(OBJ_D)\ede_cbcm_enc.obj: $(SRC_D)\crypto\des\ede_cbcm_enc.c
-       $(CC) /Fo$(OBJ_D)\ede_cbcm_enc.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\des\ede_cbcm_enc.c
-
-$(OBJ_D)\rc2_ecb.obj: $(SRC_D)\crypto\rc2\rc2_ecb.c
-       $(CC) /Fo$(OBJ_D)\rc2_ecb.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\rc2\rc2_ecb.c
-
-$(OBJ_D)\rc2_skey.obj: $(SRC_D)\crypto\rc2\rc2_skey.c
-       $(CC) /Fo$(OBJ_D)\rc2_skey.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\rc2\rc2_skey.c
-
-$(OBJ_D)\rc2_cbc.obj: $(SRC_D)\crypto\rc2\rc2_cbc.c
-       $(CC) /Fo$(OBJ_D)\rc2_cbc.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\rc2\rc2_cbc.c
-
-$(OBJ_D)\rc2cfb64.obj: $(SRC_D)\crypto\rc2\rc2cfb64.c
-       $(CC) /Fo$(OBJ_D)\rc2cfb64.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\rc2\rc2cfb64.c
-
-$(OBJ_D)\rc2ofb64.obj: $(SRC_D)\crypto\rc2\rc2ofb64.c
-       $(CC) /Fo$(OBJ_D)\rc2ofb64.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\rc2\rc2ofb64.c
-
-$(OBJ_D)\rc4_skey.obj: $(SRC_D)\crypto\rc4\rc4_skey.c
-       $(CC) /Fo$(OBJ_D)\rc4_skey.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\rc4\rc4_skey.c
-
-$(OBJ_D)\rc4_enc.obj: $(SRC_D)\crypto\rc4\rc4_enc.c
-       $(CC) /Fo$(OBJ_D)\rc4_enc.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\rc4\rc4_enc.c
-
-$(OBJ_D)\rc5_skey.obj: $(SRC_D)\crypto\rc5\rc5_skey.c
-       $(CC) /Fo$(OBJ_D)\rc5_skey.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\rc5\rc5_skey.c
-
-$(OBJ_D)\rc5_ecb.obj: $(SRC_D)\crypto\rc5\rc5_ecb.c
-       $(CC) /Fo$(OBJ_D)\rc5_ecb.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\rc5\rc5_ecb.c
-
-$(OBJ_D)\rc5_enc.obj: $(SRC_D)\crypto\rc5\rc5_enc.c
-       $(CC) /Fo$(OBJ_D)\rc5_enc.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\rc5\rc5_enc.c
-
-$(OBJ_D)\rc5cfb64.obj: $(SRC_D)\crypto\rc5\rc5cfb64.c
-       $(CC) /Fo$(OBJ_D)\rc5cfb64.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\rc5\rc5cfb64.c
-
-$(OBJ_D)\rc5ofb64.obj: $(SRC_D)\crypto\rc5\rc5ofb64.c
-       $(CC) /Fo$(OBJ_D)\rc5ofb64.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\rc5\rc5ofb64.c
-
-$(OBJ_D)\i_cbc.obj: $(SRC_D)\crypto\idea\i_cbc.c
-       $(CC) /Fo$(OBJ_D)\i_cbc.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\idea\i_cbc.c
-
-$(OBJ_D)\i_cfb64.obj: $(SRC_D)\crypto\idea\i_cfb64.c
-       $(CC) /Fo$(OBJ_D)\i_cfb64.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\idea\i_cfb64.c
-
-$(OBJ_D)\i_ofb64.obj: $(SRC_D)\crypto\idea\i_ofb64.c
-       $(CC) /Fo$(OBJ_D)\i_ofb64.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\idea\i_ofb64.c
-
-$(OBJ_D)\i_ecb.obj: $(SRC_D)\crypto\idea\i_ecb.c
-       $(CC) /Fo$(OBJ_D)\i_ecb.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\idea\i_ecb.c
-
-$(OBJ_D)\i_skey.obj: $(SRC_D)\crypto\idea\i_skey.c
-       $(CC) /Fo$(OBJ_D)\i_skey.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\idea\i_skey.c
-
-$(OBJ_D)\bf_skey.obj: $(SRC_D)\crypto\bf\bf_skey.c
-       $(CC) /Fo$(OBJ_D)\bf_skey.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bf\bf_skey.c
-
-$(OBJ_D)\bf_ecb.obj: $(SRC_D)\crypto\bf\bf_ecb.c
-       $(CC) /Fo$(OBJ_D)\bf_ecb.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bf\bf_ecb.c
-
-$(OBJ_D)\bf_enc.obj: $(SRC_D)\crypto\bf\bf_enc.c
-       $(CC) /Fo$(OBJ_D)\bf_enc.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bf\bf_enc.c
-
-$(OBJ_D)\bf_cfb64.obj: $(SRC_D)\crypto\bf\bf_cfb64.c
-       $(CC) /Fo$(OBJ_D)\bf_cfb64.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bf\bf_cfb64.c
-
-$(OBJ_D)\bf_ofb64.obj: $(SRC_D)\crypto\bf\bf_ofb64.c
-       $(CC) /Fo$(OBJ_D)\bf_ofb64.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bf\bf_ofb64.c
-
-$(OBJ_D)\c_skey.obj: $(SRC_D)\crypto\cast\c_skey.c
-       $(CC) /Fo$(OBJ_D)\c_skey.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\cast\c_skey.c
-
-$(OBJ_D)\c_ecb.obj: $(SRC_D)\crypto\cast\c_ecb.c
-       $(CC) /Fo$(OBJ_D)\c_ecb.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\cast\c_ecb.c
-
-$(OBJ_D)\c_enc.obj: $(SRC_D)\crypto\cast\c_enc.c
-       $(CC) /Fo$(OBJ_D)\c_enc.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\cast\c_enc.c
-
-$(OBJ_D)\c_cfb64.obj: $(SRC_D)\crypto\cast\c_cfb64.c
-       $(CC) /Fo$(OBJ_D)\c_cfb64.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\cast\c_cfb64.c
-
-$(OBJ_D)\c_ofb64.obj: $(SRC_D)\crypto\cast\c_ofb64.c
-       $(CC) /Fo$(OBJ_D)\c_ofb64.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\cast\c_ofb64.c
-
-$(OBJ_D)\bn_add.obj: $(SRC_D)\crypto\bn\bn_add.c
-       $(CC) /Fo$(OBJ_D)\bn_add.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_add.c
-
-$(OBJ_D)\bn_div.obj: $(SRC_D)\crypto\bn\bn_div.c
-       $(CC) /Fo$(OBJ_D)\bn_div.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_div.c
-
-$(OBJ_D)\bn_exp.obj: $(SRC_D)\crypto\bn\bn_exp.c
-       $(CC) /Fo$(OBJ_D)\bn_exp.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_exp.c
-
-$(OBJ_D)\bn_lib.obj: $(SRC_D)\crypto\bn\bn_lib.c
-       $(CC) /Fo$(OBJ_D)\bn_lib.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_lib.c
-
-$(OBJ_D)\bn_mul.obj: $(SRC_D)\crypto\bn\bn_mul.c
-       $(CC) /Fo$(OBJ_D)\bn_mul.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_mul.c
-
-$(OBJ_D)\bn_print.obj: $(SRC_D)\crypto\bn\bn_print.c
-       $(CC) /Fo$(OBJ_D)\bn_print.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_print.c
-
-$(OBJ_D)\bn_rand.obj: $(SRC_D)\crypto\bn\bn_rand.c
-       $(CC) /Fo$(OBJ_D)\bn_rand.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_rand.c
-
-$(OBJ_D)\bn_shift.obj: $(SRC_D)\crypto\bn\bn_shift.c
-       $(CC) /Fo$(OBJ_D)\bn_shift.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_shift.c
-
-$(OBJ_D)\bn_word.obj: $(SRC_D)\crypto\bn\bn_word.c
-       $(CC) /Fo$(OBJ_D)\bn_word.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_word.c
-
-$(OBJ_D)\bn_blind.obj: $(SRC_D)\crypto\bn\bn_blind.c
-       $(CC) /Fo$(OBJ_D)\bn_blind.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_blind.c
-
-$(OBJ_D)\bn_gcd.obj: $(SRC_D)\crypto\bn\bn_gcd.c
-       $(CC) /Fo$(OBJ_D)\bn_gcd.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_gcd.c
-
-$(OBJ_D)\bn_prime.obj: $(SRC_D)\crypto\bn\bn_prime.c
-       $(CC) /Fo$(OBJ_D)\bn_prime.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_prime.c
-
-$(OBJ_D)\bn_err.obj: $(SRC_D)\crypto\bn\bn_err.c
-       $(CC) /Fo$(OBJ_D)\bn_err.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_err.c
-
-$(OBJ_D)\bn_sqr.obj: $(SRC_D)\crypto\bn\bn_sqr.c
-       $(CC) /Fo$(OBJ_D)\bn_sqr.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_sqr.c
-
-$(OBJ_D)\bn_asm.obj: $(SRC_D)\crypto\bn\bn_asm.c
-       $(CC) /Fo$(OBJ_D)\bn_asm.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_asm.c
-
-$(OBJ_D)\bn_recp.obj: $(SRC_D)\crypto\bn\bn_recp.c
-       $(CC) /Fo$(OBJ_D)\bn_recp.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_recp.c
-
-$(OBJ_D)\bn_mont.obj: $(SRC_D)\crypto\bn\bn_mont.c
-       $(CC) /Fo$(OBJ_D)\bn_mont.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_mont.c
-
-$(OBJ_D)\bn_mpi.obj: $(SRC_D)\crypto\bn\bn_mpi.c
-       $(CC) /Fo$(OBJ_D)\bn_mpi.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_mpi.c
-
-$(OBJ_D)\bn_exp2.obj: $(SRC_D)\crypto\bn\bn_exp2.c
-       $(CC) /Fo$(OBJ_D)\bn_exp2.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_exp2.c
-
-$(OBJ_D)\rsa_eay.obj: $(SRC_D)\crypto\rsa\rsa_eay.c
-       $(CC) /Fo$(OBJ_D)\rsa_eay.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\rsa\rsa_eay.c
-
-$(OBJ_D)\rsa_gen.obj: $(SRC_D)\crypto\rsa\rsa_gen.c
-       $(CC) /Fo$(OBJ_D)\rsa_gen.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\rsa\rsa_gen.c
-
-$(OBJ_D)\rsa_lib.obj: $(SRC_D)\crypto\rsa\rsa_lib.c
-       $(CC) /Fo$(OBJ_D)\rsa_lib.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\rsa\rsa_lib.c
-
-$(OBJ_D)\rsa_sign.obj: $(SRC_D)\crypto\rsa\rsa_sign.c
-       $(CC) /Fo$(OBJ_D)\rsa_sign.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\rsa\rsa_sign.c
-
-$(OBJ_D)\rsa_saos.obj: $(SRC_D)\crypto\rsa\rsa_saos.c
-       $(CC) /Fo$(OBJ_D)\rsa_saos.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\rsa\rsa_saos.c
-
-$(OBJ_D)\rsa_err.obj: $(SRC_D)\crypto\rsa\rsa_err.c
-       $(CC) /Fo$(OBJ_D)\rsa_err.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\rsa\rsa_err.c
-
-$(OBJ_D)\rsa_pk1.obj: $(SRC_D)\crypto\rsa\rsa_pk1.c
-       $(CC) /Fo$(OBJ_D)\rsa_pk1.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\rsa\rsa_pk1.c
-
-$(OBJ_D)\rsa_ssl.obj: $(SRC_D)\crypto\rsa\rsa_ssl.c
-       $(CC) /Fo$(OBJ_D)\rsa_ssl.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\rsa\rsa_ssl.c
-
-$(OBJ_D)\rsa_none.obj: $(SRC_D)\crypto\rsa\rsa_none.c
-       $(CC) /Fo$(OBJ_D)\rsa_none.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\rsa\rsa_none.c
-
-$(OBJ_D)\rsa_oaep.obj: $(SRC_D)\crypto\rsa\rsa_oaep.c
-       $(CC) /Fo$(OBJ_D)\rsa_oaep.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\rsa\rsa_oaep.c
-
-$(OBJ_D)\rsa_chk.obj: $(SRC_D)\crypto\rsa\rsa_chk.c
-       $(CC) /Fo$(OBJ_D)\rsa_chk.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\rsa\rsa_chk.c
-
-$(OBJ_D)\dsa_gen.obj: $(SRC_D)\crypto\dsa\dsa_gen.c
-       $(CC) /Fo$(OBJ_D)\dsa_gen.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\dsa\dsa_gen.c
-
-$(OBJ_D)\dsa_key.obj: $(SRC_D)\crypto\dsa\dsa_key.c
-       $(CC) /Fo$(OBJ_D)\dsa_key.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\dsa\dsa_key.c
-
-$(OBJ_D)\dsa_lib.obj: $(SRC_D)\crypto\dsa\dsa_lib.c
-       $(CC) /Fo$(OBJ_D)\dsa_lib.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\dsa\dsa_lib.c
-
-$(OBJ_D)\dsa_asn1.obj: $(SRC_D)\crypto\dsa\dsa_asn1.c
-       $(CC) /Fo$(OBJ_D)\dsa_asn1.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\dsa\dsa_asn1.c
-
-$(OBJ_D)\dsa_vrf.obj: $(SRC_D)\crypto\dsa\dsa_vrf.c
-       $(CC) /Fo$(OBJ_D)\dsa_vrf.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\dsa\dsa_vrf.c
-
-$(OBJ_D)\dsa_sign.obj: $(SRC_D)\crypto\dsa\dsa_sign.c
-       $(CC) /Fo$(OBJ_D)\dsa_sign.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\dsa\dsa_sign.c
-
-$(OBJ_D)\dsa_err.obj: $(SRC_D)\crypto\dsa\dsa_err.c
-       $(CC) /Fo$(OBJ_D)\dsa_err.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\dsa\dsa_err.c
-
-$(OBJ_D)\dh_gen.obj: $(SRC_D)\crypto\dh\dh_gen.c
-       $(CC) /Fo$(OBJ_D)\dh_gen.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\dh\dh_gen.c
-
-$(OBJ_D)\dh_key.obj: $(SRC_D)\crypto\dh\dh_key.c
-       $(CC) /Fo$(OBJ_D)\dh_key.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\dh\dh_key.c
-
-$(OBJ_D)\dh_lib.obj: $(SRC_D)\crypto\dh\dh_lib.c
-       $(CC) /Fo$(OBJ_D)\dh_lib.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\dh\dh_lib.c
-
-$(OBJ_D)\dh_check.obj: $(SRC_D)\crypto\dh\dh_check.c
-       $(CC) /Fo$(OBJ_D)\dh_check.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\dh\dh_check.c
-
-$(OBJ_D)\dh_err.obj: $(SRC_D)\crypto\dh\dh_err.c
-       $(CC) /Fo$(OBJ_D)\dh_err.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\dh\dh_err.c
-
-$(OBJ_D)\buffer.obj: $(SRC_D)\crypto\buffer\buffer.c
-       $(CC) /Fo$(OBJ_D)\buffer.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\buffer\buffer.c
-
-$(OBJ_D)\buf_err.obj: $(SRC_D)\crypto\buffer\buf_err.c
-       $(CC) /Fo$(OBJ_D)\buf_err.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\buffer\buf_err.c
-
-$(OBJ_D)\bio_lib.obj: $(SRC_D)\crypto\bio\bio_lib.c
-       $(CC) /Fo$(OBJ_D)\bio_lib.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bio\bio_lib.c
-
-$(OBJ_D)\bio_cb.obj: $(SRC_D)\crypto\bio\bio_cb.c
-       $(CC) /Fo$(OBJ_D)\bio_cb.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bio\bio_cb.c
-
-$(OBJ_D)\bio_err.obj: $(SRC_D)\crypto\bio\bio_err.c
-       $(CC) /Fo$(OBJ_D)\bio_err.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bio\bio_err.c
-
-$(OBJ_D)\bss_mem.obj: $(SRC_D)\crypto\bio\bss_mem.c
-       $(CC) /Fo$(OBJ_D)\bss_mem.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bio\bss_mem.c
-
-$(OBJ_D)\bss_null.obj: $(SRC_D)\crypto\bio\bss_null.c
-       $(CC) /Fo$(OBJ_D)\bss_null.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bio\bss_null.c
-
-$(OBJ_D)\bss_fd.obj: $(SRC_D)\crypto\bio\bss_fd.c
-       $(CC) /Fo$(OBJ_D)\bss_fd.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bio\bss_fd.c
-
-$(OBJ_D)\bss_file.obj: $(SRC_D)\crypto\bio\bss_file.c
-       $(CC) /Fo$(OBJ_D)\bss_file.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bio\bss_file.c
-
-$(OBJ_D)\bss_sock.obj: $(SRC_D)\crypto\bio\bss_sock.c
-       $(CC) /Fo$(OBJ_D)\bss_sock.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bio\bss_sock.c
-
-$(OBJ_D)\bss_conn.obj: $(SRC_D)\crypto\bio\bss_conn.c
-       $(CC) /Fo$(OBJ_D)\bss_conn.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bio\bss_conn.c
-
-$(OBJ_D)\bf_null.obj: $(SRC_D)\crypto\bio\bf_null.c
-       $(CC) /Fo$(OBJ_D)\bf_null.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bio\bf_null.c
-
-$(OBJ_D)\bf_buff.obj: $(SRC_D)\crypto\bio\bf_buff.c
-       $(CC) /Fo$(OBJ_D)\bf_buff.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bio\bf_buff.c
-
-$(OBJ_D)\b_print.obj: $(SRC_D)\crypto\bio\b_print.c
-       $(CC) /Fo$(OBJ_D)\b_print.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bio\b_print.c
-
-$(OBJ_D)\b_dump.obj: $(SRC_D)\crypto\bio\b_dump.c
-       $(CC) /Fo$(OBJ_D)\b_dump.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bio\b_dump.c
-
-$(OBJ_D)\b_sock.obj: $(SRC_D)\crypto\bio\b_sock.c
-       $(CC) /Fo$(OBJ_D)\b_sock.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bio\b_sock.c
-
-$(OBJ_D)\bss_acpt.obj: $(SRC_D)\crypto\bio\bss_acpt.c
-       $(CC) /Fo$(OBJ_D)\bss_acpt.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bio\bss_acpt.c
-
-$(OBJ_D)\bf_nbio.obj: $(SRC_D)\crypto\bio\bf_nbio.c
-       $(CC) /Fo$(OBJ_D)\bf_nbio.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bio\bf_nbio.c
-
-$(OBJ_D)\bss_log.obj: $(SRC_D)\crypto\bio\bss_log.c
-       $(CC) /Fo$(OBJ_D)\bss_log.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bio\bss_log.c
-
-$(OBJ_D)\bss_bio.obj: $(SRC_D)\crypto\bio\bss_bio.c
-       $(CC) /Fo$(OBJ_D)\bss_bio.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bio\bss_bio.c
-
-$(OBJ_D)\stack.obj: $(SRC_D)\crypto\stack\stack.c
-       $(CC) /Fo$(OBJ_D)\stack.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\stack\stack.c
-
-$(OBJ_D)\lhash.obj: $(SRC_D)\crypto\lhash\lhash.c
-       $(CC) /Fo$(OBJ_D)\lhash.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\lhash\lhash.c
-
-$(OBJ_D)\lh_stats.obj: $(SRC_D)\crypto\lhash\lh_stats.c
-       $(CC) /Fo$(OBJ_D)\lh_stats.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\lhash\lh_stats.c
-
-$(OBJ_D)\md_rand.obj: $(SRC_D)\crypto\rand\md_rand.c
-       $(CC) /Fo$(OBJ_D)\md_rand.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\rand\md_rand.c
-
-$(OBJ_D)\randfile.obj: $(SRC_D)\crypto\rand\randfile.c
-       $(CC) /Fo$(OBJ_D)\randfile.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\rand\randfile.c
-
-$(OBJ_D)\rand_lib.obj: $(SRC_D)\crypto\rand\rand_lib.c
-       $(CC) /Fo$(OBJ_D)\rand_lib.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\rand\rand_lib.c
-
-$(OBJ_D)\err.obj: $(SRC_D)\crypto\err\err.c
-       $(CC) /Fo$(OBJ_D)\err.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\err\err.c
-
-$(OBJ_D)\err_all.obj: $(SRC_D)\crypto\err\err_all.c
-       $(CC) /Fo$(OBJ_D)\err_all.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\err\err_all.c
-
-$(OBJ_D)\err_prn.obj: $(SRC_D)\crypto\err\err_prn.c
-       $(CC) /Fo$(OBJ_D)\err_prn.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\err\err_prn.c
-
-$(OBJ_D)\o_names.obj: $(SRC_D)\crypto\objects\o_names.c
-       $(CC) /Fo$(OBJ_D)\o_names.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\objects\o_names.c
-
-$(OBJ_D)\obj_dat.obj: $(SRC_D)\crypto\objects\obj_dat.c
-       $(CC) /Fo$(OBJ_D)\obj_dat.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\objects\obj_dat.c
-
-$(OBJ_D)\obj_lib.obj: $(SRC_D)\crypto\objects\obj_lib.c
-       $(CC) /Fo$(OBJ_D)\obj_lib.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\objects\obj_lib.c
-
-$(OBJ_D)\obj_err.obj: $(SRC_D)\crypto\objects\obj_err.c
-       $(CC) /Fo$(OBJ_D)\obj_err.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\objects\obj_err.c
-
-$(OBJ_D)\encode.obj: $(SRC_D)\crypto\evp\encode.c
-       $(CC) /Fo$(OBJ_D)\encode.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\encode.c
-
-$(OBJ_D)\digest.obj: $(SRC_D)\crypto\evp\digest.c
-       $(CC) /Fo$(OBJ_D)\digest.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\digest.c
-
-$(OBJ_D)\evp_enc.obj: $(SRC_D)\crypto\evp\evp_enc.c
-       $(CC) /Fo$(OBJ_D)\evp_enc.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\evp_enc.c
-
-$(OBJ_D)\evp_key.obj: $(SRC_D)\crypto\evp\evp_key.c
-       $(CC) /Fo$(OBJ_D)\evp_key.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\evp_key.c
-
-$(OBJ_D)\e_ecb_d.obj: $(SRC_D)\crypto\evp\e_ecb_d.c
-       $(CC) /Fo$(OBJ_D)\e_ecb_d.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_ecb_d.c
-
-$(OBJ_D)\e_cbc_d.obj: $(SRC_D)\crypto\evp\e_cbc_d.c
-       $(CC) /Fo$(OBJ_D)\e_cbc_d.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_cbc_d.c
-
-$(OBJ_D)\e_cfb_d.obj: $(SRC_D)\crypto\evp\e_cfb_d.c
-       $(CC) /Fo$(OBJ_D)\e_cfb_d.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_cfb_d.c
-
-$(OBJ_D)\e_ofb_d.obj: $(SRC_D)\crypto\evp\e_ofb_d.c
-       $(CC) /Fo$(OBJ_D)\e_ofb_d.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_ofb_d.c
-
-$(OBJ_D)\e_ecb_i.obj: $(SRC_D)\crypto\evp\e_ecb_i.c
-       $(CC) /Fo$(OBJ_D)\e_ecb_i.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_ecb_i.c
-
-$(OBJ_D)\e_cbc_i.obj: $(SRC_D)\crypto\evp\e_cbc_i.c
-       $(CC) /Fo$(OBJ_D)\e_cbc_i.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_cbc_i.c
-
-$(OBJ_D)\e_cfb_i.obj: $(SRC_D)\crypto\evp\e_cfb_i.c
-       $(CC) /Fo$(OBJ_D)\e_cfb_i.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_cfb_i.c
-
-$(OBJ_D)\e_ofb_i.obj: $(SRC_D)\crypto\evp\e_ofb_i.c
-       $(CC) /Fo$(OBJ_D)\e_ofb_i.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_ofb_i.c
-
-$(OBJ_D)\e_ecb_3d.obj: $(SRC_D)\crypto\evp\e_ecb_3d.c
-       $(CC) /Fo$(OBJ_D)\e_ecb_3d.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_ecb_3d.c
-
-$(OBJ_D)\e_cbc_3d.obj: $(SRC_D)\crypto\evp\e_cbc_3d.c
-       $(CC) /Fo$(OBJ_D)\e_cbc_3d.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_cbc_3d.c
-
-$(OBJ_D)\e_rc4.obj: $(SRC_D)\crypto\evp\e_rc4.c
-       $(CC) /Fo$(OBJ_D)\e_rc4.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_rc4.c
-
-$(OBJ_D)\names.obj: $(SRC_D)\crypto\evp\names.c
-       $(CC) /Fo$(OBJ_D)\names.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\names.c
-
-$(OBJ_D)\e_cfb_3d.obj: $(SRC_D)\crypto\evp\e_cfb_3d.c
-       $(CC) /Fo$(OBJ_D)\e_cfb_3d.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_cfb_3d.c
-
-$(OBJ_D)\e_ofb_3d.obj: $(SRC_D)\crypto\evp\e_ofb_3d.c
-       $(CC) /Fo$(OBJ_D)\e_ofb_3d.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_ofb_3d.c
-
-$(OBJ_D)\e_xcbc_d.obj: $(SRC_D)\crypto\evp\e_xcbc_d.c
-       $(CC) /Fo$(OBJ_D)\e_xcbc_d.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_xcbc_d.c
-
-$(OBJ_D)\e_ecb_r2.obj: $(SRC_D)\crypto\evp\e_ecb_r2.c
-       $(CC) /Fo$(OBJ_D)\e_ecb_r2.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_ecb_r2.c
-
-$(OBJ_D)\e_cbc_r2.obj: $(SRC_D)\crypto\evp\e_cbc_r2.c
-       $(CC) /Fo$(OBJ_D)\e_cbc_r2.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_cbc_r2.c
-
-$(OBJ_D)\e_cfb_r2.obj: $(SRC_D)\crypto\evp\e_cfb_r2.c
-       $(CC) /Fo$(OBJ_D)\e_cfb_r2.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_cfb_r2.c
-
-$(OBJ_D)\e_ofb_r2.obj: $(SRC_D)\crypto\evp\e_ofb_r2.c
-       $(CC) /Fo$(OBJ_D)\e_ofb_r2.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_ofb_r2.c
-
-$(OBJ_D)\e_ecb_bf.obj: $(SRC_D)\crypto\evp\e_ecb_bf.c
-       $(CC) /Fo$(OBJ_D)\e_ecb_bf.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_ecb_bf.c
-
-$(OBJ_D)\e_cbc_bf.obj: $(SRC_D)\crypto\evp\e_cbc_bf.c
-       $(CC) /Fo$(OBJ_D)\e_cbc_bf.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_cbc_bf.c
-
-$(OBJ_D)\e_cfb_bf.obj: $(SRC_D)\crypto\evp\e_cfb_bf.c
-       $(CC) /Fo$(OBJ_D)\e_cfb_bf.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_cfb_bf.c
-
-$(OBJ_D)\e_ofb_bf.obj: $(SRC_D)\crypto\evp\e_ofb_bf.c
-       $(CC) /Fo$(OBJ_D)\e_ofb_bf.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_ofb_bf.c
-
-$(OBJ_D)\e_ecb_c.obj: $(SRC_D)\crypto\evp\e_ecb_c.c
-       $(CC) /Fo$(OBJ_D)\e_ecb_c.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_ecb_c.c
-
-$(OBJ_D)\e_cbc_c.obj: $(SRC_D)\crypto\evp\e_cbc_c.c
-       $(CC) /Fo$(OBJ_D)\e_cbc_c.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_cbc_c.c
-
-$(OBJ_D)\e_cfb_c.obj: $(SRC_D)\crypto\evp\e_cfb_c.c
-       $(CC) /Fo$(OBJ_D)\e_cfb_c.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_cfb_c.c
-
-$(OBJ_D)\e_ofb_c.obj: $(SRC_D)\crypto\evp\e_ofb_c.c
-       $(CC) /Fo$(OBJ_D)\e_ofb_c.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_ofb_c.c
-
-$(OBJ_D)\e_ecb_r5.obj: $(SRC_D)\crypto\evp\e_ecb_r5.c
-       $(CC) /Fo$(OBJ_D)\e_ecb_r5.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_ecb_r5.c
-
-$(OBJ_D)\e_cbc_r5.obj: $(SRC_D)\crypto\evp\e_cbc_r5.c
-       $(CC) /Fo$(OBJ_D)\e_cbc_r5.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_cbc_r5.c
-
-$(OBJ_D)\e_cfb_r5.obj: $(SRC_D)\crypto\evp\e_cfb_r5.c
-       $(CC) /Fo$(OBJ_D)\e_cfb_r5.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_cfb_r5.c
-
-$(OBJ_D)\e_ofb_r5.obj: $(SRC_D)\crypto\evp\e_ofb_r5.c
-       $(CC) /Fo$(OBJ_D)\e_ofb_r5.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_ofb_r5.c
-
-$(OBJ_D)\m_null.obj: $(SRC_D)\crypto\evp\m_null.c
-       $(CC) /Fo$(OBJ_D)\m_null.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\m_null.c
-
-$(OBJ_D)\m_md2.obj: $(SRC_D)\crypto\evp\m_md2.c
-       $(CC) /Fo$(OBJ_D)\m_md2.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\m_md2.c
-
-$(OBJ_D)\m_md5.obj: $(SRC_D)\crypto\evp\m_md5.c
-       $(CC) /Fo$(OBJ_D)\m_md5.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\m_md5.c
-
-$(OBJ_D)\m_sha.obj: $(SRC_D)\crypto\evp\m_sha.c
-       $(CC) /Fo$(OBJ_D)\m_sha.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\m_sha.c
-
-$(OBJ_D)\m_sha1.obj: $(SRC_D)\crypto\evp\m_sha1.c
-       $(CC) /Fo$(OBJ_D)\m_sha1.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\m_sha1.c
-
-$(OBJ_D)\m_dss.obj: $(SRC_D)\crypto\evp\m_dss.c
-       $(CC) /Fo$(OBJ_D)\m_dss.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\m_dss.c
-
-$(OBJ_D)\m_dss1.obj: $(SRC_D)\crypto\evp\m_dss1.c
-       $(CC) /Fo$(OBJ_D)\m_dss1.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\m_dss1.c
-
-$(OBJ_D)\m_mdc2.obj: $(SRC_D)\crypto\evp\m_mdc2.c
-       $(CC) /Fo$(OBJ_D)\m_mdc2.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\m_mdc2.c
-
-$(OBJ_D)\m_ripemd.obj: $(SRC_D)\crypto\evp\m_ripemd.c
-       $(CC) /Fo$(OBJ_D)\m_ripemd.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\m_ripemd.c
-
-$(OBJ_D)\p_open.obj: $(SRC_D)\crypto\evp\p_open.c
-       $(CC) /Fo$(OBJ_D)\p_open.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\p_open.c
-
-$(OBJ_D)\p_seal.obj: $(SRC_D)\crypto\evp\p_seal.c
-       $(CC) /Fo$(OBJ_D)\p_seal.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\p_seal.c
-
-$(OBJ_D)\p_sign.obj: $(SRC_D)\crypto\evp\p_sign.c
-       $(CC) /Fo$(OBJ_D)\p_sign.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\p_sign.c
-
-$(OBJ_D)\p_verify.obj: $(SRC_D)\crypto\evp\p_verify.c
-       $(CC) /Fo$(OBJ_D)\p_verify.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\p_verify.c
-
-$(OBJ_D)\p_lib.obj: $(SRC_D)\crypto\evp\p_lib.c
-       $(CC) /Fo$(OBJ_D)\p_lib.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\p_lib.c
-
-$(OBJ_D)\p_enc.obj: $(SRC_D)\crypto\evp\p_enc.c
-       $(CC) /Fo$(OBJ_D)\p_enc.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\p_enc.c
-
-$(OBJ_D)\p_dec.obj: $(SRC_D)\crypto\evp\p_dec.c
-       $(CC) /Fo$(OBJ_D)\p_dec.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\p_dec.c
-
-$(OBJ_D)\bio_md.obj: $(SRC_D)\crypto\evp\bio_md.c
-       $(CC) /Fo$(OBJ_D)\bio_md.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\bio_md.c
-
-$(OBJ_D)\bio_b64.obj: $(SRC_D)\crypto\evp\bio_b64.c
-       $(CC) /Fo$(OBJ_D)\bio_b64.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\bio_b64.c
-
-$(OBJ_D)\bio_enc.obj: $(SRC_D)\crypto\evp\bio_enc.c
-       $(CC) /Fo$(OBJ_D)\bio_enc.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\bio_enc.c
-
-$(OBJ_D)\evp_err.obj: $(SRC_D)\crypto\evp\evp_err.c
-       $(CC) /Fo$(OBJ_D)\evp_err.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\evp_err.c
-
-$(OBJ_D)\e_null.obj: $(SRC_D)\crypto\evp\e_null.c
-       $(CC) /Fo$(OBJ_D)\e_null.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_null.c
-
-$(OBJ_D)\c_all.obj: $(SRC_D)\crypto\evp\c_all.c
-       $(CC) /Fo$(OBJ_D)\c_all.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\c_all.c
-
-$(OBJ_D)\evp_lib.obj: $(SRC_D)\crypto\evp\evp_lib.c
-       $(CC) /Fo$(OBJ_D)\evp_lib.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\evp_lib.c
-
-$(OBJ_D)\bio_ok.obj: $(SRC_D)\crypto\evp\bio_ok.c
-       $(CC) /Fo$(OBJ_D)\bio_ok.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\bio_ok.c
-
-$(OBJ_D)\evp_pkey.obj: $(SRC_D)\crypto\evp\evp_pkey.c
-       $(CC) /Fo$(OBJ_D)\evp_pkey.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\evp_pkey.c
-
-$(OBJ_D)\evp_pbe.obj: $(SRC_D)\crypto\evp\evp_pbe.c
-       $(CC) /Fo$(OBJ_D)\evp_pbe.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\evp_pbe.c
-
-$(OBJ_D)\p5_crpt.obj: $(SRC_D)\crypto\evp\p5_crpt.c
-       $(CC) /Fo$(OBJ_D)\p5_crpt.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\p5_crpt.c
-
-$(OBJ_D)\p5_crpt2.obj: $(SRC_D)\crypto\evp\p5_crpt2.c
-       $(CC) /Fo$(OBJ_D)\p5_crpt2.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\p5_crpt2.c
-
-$(OBJ_D)\a_object.obj: $(SRC_D)\crypto\asn1\a_object.c
-       $(CC) /Fo$(OBJ_D)\a_object.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\a_object.c
-
-$(OBJ_D)\a_bitstr.obj: $(SRC_D)\crypto\asn1\a_bitstr.c
-       $(CC) /Fo$(OBJ_D)\a_bitstr.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\a_bitstr.c
-
-$(OBJ_D)\a_utctm.obj: $(SRC_D)\crypto\asn1\a_utctm.c
-       $(CC) /Fo$(OBJ_D)\a_utctm.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_utctm.c
-
-$(OBJ_D)\a_gentm.obj: $(SRC_D)\crypto\asn1\a_gentm.c
-       $(CC) /Fo$(OBJ_D)\a_gentm.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_gentm.c
-
-$(OBJ_D)\a_time.obj: $(SRC_D)\crypto\asn1\a_time.c
-       $(CC) /Fo$(OBJ_D)\a_time.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_time.c
-
-$(OBJ_D)\a_int.obj: $(SRC_D)\crypto\asn1\a_int.c
-       $(CC) /Fo$(OBJ_D)\a_int.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_int.c
-
-$(OBJ_D)\a_octet.obj: $(SRC_D)\crypto\asn1\a_octet.c
-       $(CC) /Fo$(OBJ_D)\a_octet.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_octet.c
-
-$(OBJ_D)\a_print.obj: $(SRC_D)\crypto\asn1\a_print.c
-       $(CC) /Fo$(OBJ_D)\a_print.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_print.c
-
-$(OBJ_D)\a_type.obj: $(SRC_D)\crypto\asn1\a_type.c
-       $(CC) /Fo$(OBJ_D)\a_type.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_type.c
-
-$(OBJ_D)\a_set.obj: $(SRC_D)\crypto\asn1\a_set.c
-       $(CC) /Fo$(OBJ_D)\a_set.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_set.c
-
-$(OBJ_D)\a_dup.obj: $(SRC_D)\crypto\asn1\a_dup.c
-       $(CC) /Fo$(OBJ_D)\a_dup.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_dup.c
-
-$(OBJ_D)\a_d2i_fp.obj: $(SRC_D)\crypto\asn1\a_d2i_fp.c
-       $(CC) /Fo$(OBJ_D)\a_d2i_fp.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\a_d2i_fp.c
-
-$(OBJ_D)\a_i2d_fp.obj: $(SRC_D)\crypto\asn1\a_i2d_fp.c
-       $(CC) /Fo$(OBJ_D)\a_i2d_fp.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\a_i2d_fp.c
-
-$(OBJ_D)\a_bmp.obj: $(SRC_D)\crypto\asn1\a_bmp.c
-       $(CC) /Fo$(OBJ_D)\a_bmp.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_bmp.c
-
-$(OBJ_D)\a_enum.obj: $(SRC_D)\crypto\asn1\a_enum.c
-       $(CC) /Fo$(OBJ_D)\a_enum.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_enum.c
-
-$(OBJ_D)\a_vis.obj: $(SRC_D)\crypto\asn1\a_vis.c
-       $(CC) /Fo$(OBJ_D)\a_vis.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_vis.c
-
-$(OBJ_D)\a_utf8.obj: $(SRC_D)\crypto\asn1\a_utf8.c
-       $(CC) /Fo$(OBJ_D)\a_utf8.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_utf8.c
-
-$(OBJ_D)\a_sign.obj: $(SRC_D)\crypto\asn1\a_sign.c
-       $(CC) /Fo$(OBJ_D)\a_sign.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_sign.c
-
-$(OBJ_D)\a_digest.obj: $(SRC_D)\crypto\asn1\a_digest.c
-       $(CC) /Fo$(OBJ_D)\a_digest.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\a_digest.c
-
-$(OBJ_D)\a_verify.obj: $(SRC_D)\crypto\asn1\a_verify.c
-       $(CC) /Fo$(OBJ_D)\a_verify.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\a_verify.c
-
-$(OBJ_D)\x_algor.obj: $(SRC_D)\crypto\asn1\x_algor.c
-       $(CC) /Fo$(OBJ_D)\x_algor.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_algor.c
-
-$(OBJ_D)\x_val.obj: $(SRC_D)\crypto\asn1\x_val.c
-       $(CC) /Fo$(OBJ_D)\x_val.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_val.c
-
-$(OBJ_D)\x_pubkey.obj: $(SRC_D)\crypto\asn1\x_pubkey.c
-       $(CC) /Fo$(OBJ_D)\x_pubkey.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\x_pubkey.c
-
-$(OBJ_D)\x_sig.obj: $(SRC_D)\crypto\asn1\x_sig.c
-       $(CC) /Fo$(OBJ_D)\x_sig.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_sig.c
-
-$(OBJ_D)\x_req.obj: $(SRC_D)\crypto\asn1\x_req.c
-       $(CC) /Fo$(OBJ_D)\x_req.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_req.c
-
-$(OBJ_D)\x_attrib.obj: $(SRC_D)\crypto\asn1\x_attrib.c
-       $(CC) /Fo$(OBJ_D)\x_attrib.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\x_attrib.c
-
-$(OBJ_D)\x_name.obj: $(SRC_D)\crypto\asn1\x_name.c
-       $(CC) /Fo$(OBJ_D)\x_name.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_name.c
-
-$(OBJ_D)\x_cinf.obj: $(SRC_D)\crypto\asn1\x_cinf.c
-       $(CC) /Fo$(OBJ_D)\x_cinf.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_cinf.c
-
-$(OBJ_D)\x_x509.obj: $(SRC_D)\crypto\asn1\x_x509.c
-       $(CC) /Fo$(OBJ_D)\x_x509.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_x509.c
-
-$(OBJ_D)\x_crl.obj: $(SRC_D)\crypto\asn1\x_crl.c
-       $(CC) /Fo$(OBJ_D)\x_crl.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_crl.c
-
-$(OBJ_D)\x_info.obj: $(SRC_D)\crypto\asn1\x_info.c
-       $(CC) /Fo$(OBJ_D)\x_info.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_info.c
-
-$(OBJ_D)\x_spki.obj: $(SRC_D)\crypto\asn1\x_spki.c
-       $(CC) /Fo$(OBJ_D)\x_spki.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_spki.c
-
-$(OBJ_D)\nsseq.obj: $(SRC_D)\crypto\asn1\nsseq.c
-       $(CC) /Fo$(OBJ_D)\nsseq.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\nsseq.c
-
-$(OBJ_D)\d2i_r_pr.obj: $(SRC_D)\crypto\asn1\d2i_r_pr.c
-       $(CC) /Fo$(OBJ_D)\d2i_r_pr.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\d2i_r_pr.c
-
-$(OBJ_D)\i2d_r_pr.obj: $(SRC_D)\crypto\asn1\i2d_r_pr.c
-       $(CC) /Fo$(OBJ_D)\i2d_r_pr.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\i2d_r_pr.c
-
-$(OBJ_D)\d2i_r_pu.obj: $(SRC_D)\crypto\asn1\d2i_r_pu.c
-       $(CC) /Fo$(OBJ_D)\d2i_r_pu.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\d2i_r_pu.c
-
-$(OBJ_D)\i2d_r_pu.obj: $(SRC_D)\crypto\asn1\i2d_r_pu.c
-       $(CC) /Fo$(OBJ_D)\i2d_r_pu.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\i2d_r_pu.c
-
-$(OBJ_D)\d2i_s_pr.obj: $(SRC_D)\crypto\asn1\d2i_s_pr.c
-       $(CC) /Fo$(OBJ_D)\d2i_s_pr.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\d2i_s_pr.c
-
-$(OBJ_D)\i2d_s_pr.obj: $(SRC_D)\crypto\asn1\i2d_s_pr.c
-       $(CC) /Fo$(OBJ_D)\i2d_s_pr.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\i2d_s_pr.c
-
-$(OBJ_D)\d2i_s_pu.obj: $(SRC_D)\crypto\asn1\d2i_s_pu.c
-       $(CC) /Fo$(OBJ_D)\d2i_s_pu.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\d2i_s_pu.c
-
-$(OBJ_D)\i2d_s_pu.obj: $(SRC_D)\crypto\asn1\i2d_s_pu.c
-       $(CC) /Fo$(OBJ_D)\i2d_s_pu.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\i2d_s_pu.c
-
-$(OBJ_D)\d2i_pu.obj: $(SRC_D)\crypto\asn1\d2i_pu.c
-       $(CC) /Fo$(OBJ_D)\d2i_pu.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\d2i_pu.c
-
-$(OBJ_D)\d2i_pr.obj: $(SRC_D)\crypto\asn1\d2i_pr.c
-       $(CC) /Fo$(OBJ_D)\d2i_pr.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\d2i_pr.c
-
-$(OBJ_D)\i2d_pu.obj: $(SRC_D)\crypto\asn1\i2d_pu.c
-       $(CC) /Fo$(OBJ_D)\i2d_pu.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\i2d_pu.c
-
-$(OBJ_D)\i2d_pr.obj: $(SRC_D)\crypto\asn1\i2d_pr.c
-       $(CC) /Fo$(OBJ_D)\i2d_pr.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\i2d_pr.c
-
-$(OBJ_D)\t_req.obj: $(SRC_D)\crypto\asn1\t_req.c
-       $(CC) /Fo$(OBJ_D)\t_req.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\t_req.c
-
-$(OBJ_D)\t_x509.obj: $(SRC_D)\crypto\asn1\t_x509.c
-       $(CC) /Fo$(OBJ_D)\t_x509.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\t_x509.c
-
-$(OBJ_D)\t_crl.obj: $(SRC_D)\crypto\asn1\t_crl.c
-       $(CC) /Fo$(OBJ_D)\t_crl.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\t_crl.c
-
-$(OBJ_D)\t_pkey.obj: $(SRC_D)\crypto\asn1\t_pkey.c
-       $(CC) /Fo$(OBJ_D)\t_pkey.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\t_pkey.c
-
-$(OBJ_D)\p7_i_s.obj: $(SRC_D)\crypto\asn1\p7_i_s.c
-       $(CC) /Fo$(OBJ_D)\p7_i_s.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\p7_i_s.c
-
-$(OBJ_D)\p7_signi.obj: $(SRC_D)\crypto\asn1\p7_signi.c
-       $(CC) /Fo$(OBJ_D)\p7_signi.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\p7_signi.c
-
-$(OBJ_D)\p7_signd.obj: $(SRC_D)\crypto\asn1\p7_signd.c
-       $(CC) /Fo$(OBJ_D)\p7_signd.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\p7_signd.c
-
-$(OBJ_D)\p7_recip.obj: $(SRC_D)\crypto\asn1\p7_recip.c
-       $(CC) /Fo$(OBJ_D)\p7_recip.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\p7_recip.c
-
-$(OBJ_D)\p7_enc_c.obj: $(SRC_D)\crypto\asn1\p7_enc_c.c
-       $(CC) /Fo$(OBJ_D)\p7_enc_c.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\p7_enc_c.c
-
-$(OBJ_D)\p7_evp.obj: $(SRC_D)\crypto\asn1\p7_evp.c
-       $(CC) /Fo$(OBJ_D)\p7_evp.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\p7_evp.c
-
-$(OBJ_D)\p7_dgst.obj: $(SRC_D)\crypto\asn1\p7_dgst.c
-       $(CC) /Fo$(OBJ_D)\p7_dgst.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\p7_dgst.c
-
-$(OBJ_D)\p7_s_e.obj: $(SRC_D)\crypto\asn1\p7_s_e.c
-       $(CC) /Fo$(OBJ_D)\p7_s_e.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\p7_s_e.c
-
-$(OBJ_D)\p7_enc.obj: $(SRC_D)\crypto\asn1\p7_enc.c
-       $(CC) /Fo$(OBJ_D)\p7_enc.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\p7_enc.c
-
-$(OBJ_D)\p7_lib.obj: $(SRC_D)\crypto\asn1\p7_lib.c
-       $(CC) /Fo$(OBJ_D)\p7_lib.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\p7_lib.c
-
-$(OBJ_D)\f_int.obj: $(SRC_D)\crypto\asn1\f_int.c
-       $(CC) /Fo$(OBJ_D)\f_int.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\f_int.c
-
-$(OBJ_D)\f_string.obj: $(SRC_D)\crypto\asn1\f_string.c
-       $(CC) /Fo$(OBJ_D)\f_string.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\f_string.c
-
-$(OBJ_D)\i2d_dhp.obj: $(SRC_D)\crypto\asn1\i2d_dhp.c
-       $(CC) /Fo$(OBJ_D)\i2d_dhp.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\i2d_dhp.c
-
-$(OBJ_D)\i2d_dsap.obj: $(SRC_D)\crypto\asn1\i2d_dsap.c
-       $(CC) /Fo$(OBJ_D)\i2d_dsap.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\i2d_dsap.c
-
-$(OBJ_D)\d2i_dhp.obj: $(SRC_D)\crypto\asn1\d2i_dhp.c
-       $(CC) /Fo$(OBJ_D)\d2i_dhp.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\d2i_dhp.c
-
-$(OBJ_D)\d2i_dsap.obj: $(SRC_D)\crypto\asn1\d2i_dsap.c
-       $(CC) /Fo$(OBJ_D)\d2i_dsap.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\d2i_dsap.c
-
-$(OBJ_D)\n_pkey.obj: $(SRC_D)\crypto\asn1\n_pkey.c
-       $(CC) /Fo$(OBJ_D)\n_pkey.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\n_pkey.c
-
-$(OBJ_D)\f_enum.obj: $(SRC_D)\crypto\asn1\f_enum.c
-       $(CC) /Fo$(OBJ_D)\f_enum.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\f_enum.c
-
-$(OBJ_D)\a_hdr.obj: $(SRC_D)\crypto\asn1\a_hdr.c
-       $(CC) /Fo$(OBJ_D)\a_hdr.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_hdr.c
-
-$(OBJ_D)\x_pkey.obj: $(SRC_D)\crypto\asn1\x_pkey.c
-       $(CC) /Fo$(OBJ_D)\x_pkey.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_pkey.c
-
-$(OBJ_D)\a_bool.obj: $(SRC_D)\crypto\asn1\a_bool.c
-       $(CC) /Fo$(OBJ_D)\a_bool.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_bool.c
-
-$(OBJ_D)\x_exten.obj: $(SRC_D)\crypto\asn1\x_exten.c
-       $(CC) /Fo$(OBJ_D)\x_exten.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_exten.c
-
-$(OBJ_D)\asn1_par.obj: $(SRC_D)\crypto\asn1\asn1_par.c
-       $(CC) /Fo$(OBJ_D)\asn1_par.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\asn1_par.c
-
-$(OBJ_D)\asn1_lib.obj: $(SRC_D)\crypto\asn1\asn1_lib.c
-       $(CC) /Fo$(OBJ_D)\asn1_lib.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\asn1_lib.c
-
-$(OBJ_D)\asn1_err.obj: $(SRC_D)\crypto\asn1\asn1_err.c
-       $(CC) /Fo$(OBJ_D)\asn1_err.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\asn1_err.c
-
-$(OBJ_D)\a_meth.obj: $(SRC_D)\crypto\asn1\a_meth.c
-       $(CC) /Fo$(OBJ_D)\a_meth.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_meth.c
-
-$(OBJ_D)\a_bytes.obj: $(SRC_D)\crypto\asn1\a_bytes.c
-       $(CC) /Fo$(OBJ_D)\a_bytes.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_bytes.c
-
-$(OBJ_D)\evp_asn1.obj: $(SRC_D)\crypto\asn1\evp_asn1.c
-       $(CC) /Fo$(OBJ_D)\evp_asn1.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\evp_asn1.c
-
-$(OBJ_D)\asn_pack.obj: $(SRC_D)\crypto\asn1\asn_pack.c
-       $(CC) /Fo$(OBJ_D)\asn_pack.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\asn_pack.c
-
-$(OBJ_D)\p5_pbe.obj: $(SRC_D)\crypto\asn1\p5_pbe.c
-       $(CC) /Fo$(OBJ_D)\p5_pbe.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\p5_pbe.c
-
-$(OBJ_D)\p5_pbev2.obj: $(SRC_D)\crypto\asn1\p5_pbev2.c
-       $(CC) /Fo$(OBJ_D)\p5_pbev2.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\p5_pbev2.c
-
-$(OBJ_D)\p8_pkey.obj: $(SRC_D)\crypto\asn1\p8_pkey.c
-       $(CC) /Fo$(OBJ_D)\p8_pkey.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\p8_pkey.c
-
-$(OBJ_D)\pem_sign.obj: $(SRC_D)\crypto\pem\pem_sign.c
-       $(CC) /Fo$(OBJ_D)\pem_sign.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\pem\pem_sign.c
-
-$(OBJ_D)\pem_seal.obj: $(SRC_D)\crypto\pem\pem_seal.c
-       $(CC) /Fo$(OBJ_D)\pem_seal.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\pem\pem_seal.c
-
-$(OBJ_D)\pem_info.obj: $(SRC_D)\crypto\pem\pem_info.c
-       $(CC) /Fo$(OBJ_D)\pem_info.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\pem\pem_info.c
-
-$(OBJ_D)\pem_lib.obj: $(SRC_D)\crypto\pem\pem_lib.c
-       $(CC) /Fo$(OBJ_D)\pem_lib.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\pem\pem_lib.c
-
-$(OBJ_D)\pem_all.obj: $(SRC_D)\crypto\pem\pem_all.c
-       $(CC) /Fo$(OBJ_D)\pem_all.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\pem\pem_all.c
-
-$(OBJ_D)\pem_err.obj: $(SRC_D)\crypto\pem\pem_err.c
-       $(CC) /Fo$(OBJ_D)\pem_err.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\pem\pem_err.c
-
-$(OBJ_D)\x509_def.obj: $(SRC_D)\crypto\x509\x509_def.c
-       $(CC) /Fo$(OBJ_D)\x509_def.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\x509\x509_def.c
-
-$(OBJ_D)\x509_d2.obj: $(SRC_D)\crypto\x509\x509_d2.c
-       $(CC) /Fo$(OBJ_D)\x509_d2.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\x509\x509_d2.c
-
-$(OBJ_D)\x509_r2x.obj: $(SRC_D)\crypto\x509\x509_r2x.c
-       $(CC) /Fo$(OBJ_D)\x509_r2x.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\x509\x509_r2x.c
-
-$(OBJ_D)\x509_cmp.obj: $(SRC_D)\crypto\x509\x509_cmp.c
-       $(CC) /Fo$(OBJ_D)\x509_cmp.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\x509\x509_cmp.c
-
-$(OBJ_D)\x509_obj.obj: $(SRC_D)\crypto\x509\x509_obj.c
-       $(CC) /Fo$(OBJ_D)\x509_obj.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\x509\x509_obj.c
-
-$(OBJ_D)\x509_req.obj: $(SRC_D)\crypto\x509\x509_req.c
-       $(CC) /Fo$(OBJ_D)\x509_req.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\x509\x509_req.c
-
-$(OBJ_D)\x509_vfy.obj: $(SRC_D)\crypto\x509\x509_vfy.c
-       $(CC) /Fo$(OBJ_D)\x509_vfy.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\x509\x509_vfy.c
-
-$(OBJ_D)\x509_set.obj: $(SRC_D)\crypto\x509\x509_set.c
-       $(CC) /Fo$(OBJ_D)\x509_set.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\x509\x509_set.c
-
-$(OBJ_D)\x509rset.obj: $(SRC_D)\crypto\x509\x509rset.c
-       $(CC) /Fo$(OBJ_D)\x509rset.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\x509\x509rset.c
-
-$(OBJ_D)\x509_err.obj: $(SRC_D)\crypto\x509\x509_err.c
-       $(CC) /Fo$(OBJ_D)\x509_err.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\x509\x509_err.c
-
-$(OBJ_D)\x509name.obj: $(SRC_D)\crypto\x509\x509name.c
-       $(CC) /Fo$(OBJ_D)\x509name.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\x509\x509name.c
-
-$(OBJ_D)\x509_v3.obj: $(SRC_D)\crypto\x509\x509_v3.c
-       $(CC) /Fo$(OBJ_D)\x509_v3.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\x509\x509_v3.c
-
-$(OBJ_D)\x509_ext.obj: $(SRC_D)\crypto\x509\x509_ext.c
-       $(CC) /Fo$(OBJ_D)\x509_ext.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\x509\x509_ext.c
-
-$(OBJ_D)\x509type.obj: $(SRC_D)\crypto\x509\x509type.c
-       $(CC) /Fo$(OBJ_D)\x509type.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\x509\x509type.c
-
-$(OBJ_D)\x509_lu.obj: $(SRC_D)\crypto\x509\x509_lu.c
-       $(CC) /Fo$(OBJ_D)\x509_lu.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\x509\x509_lu.c
-
-$(OBJ_D)\x_all.obj: $(SRC_D)\crypto\x509\x_all.c
-       $(CC) /Fo$(OBJ_D)\x_all.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\x509\x_all.c
-
-$(OBJ_D)\x509_txt.obj: $(SRC_D)\crypto\x509\x509_txt.c
-       $(CC) /Fo$(OBJ_D)\x509_txt.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\x509\x509_txt.c
-
-$(OBJ_D)\by_file.obj: $(SRC_D)\crypto\x509\by_file.c
-       $(CC) /Fo$(OBJ_D)\by_file.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\x509\by_file.c
-
-$(OBJ_D)\by_dir.obj: $(SRC_D)\crypto\x509\by_dir.c
-       $(CC) /Fo$(OBJ_D)\by_dir.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\x509\by_dir.c
-
-$(OBJ_D)\v3_bcons.obj: $(SRC_D)\crypto\x509v3\v3_bcons.c
-       $(CC) /Fo$(OBJ_D)\v3_bcons.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\x509v3\v3_bcons.c
-
-$(OBJ_D)\v3_bitst.obj: $(SRC_D)\crypto\x509v3\v3_bitst.c
-       $(CC) /Fo$(OBJ_D)\v3_bitst.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\x509v3\v3_bitst.c
-
-$(OBJ_D)\v3_conf.obj: $(SRC_D)\crypto\x509v3\v3_conf.c
-       $(CC) /Fo$(OBJ_D)\v3_conf.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\x509v3\v3_conf.c
-
-$(OBJ_D)\v3_extku.obj: $(SRC_D)\crypto\x509v3\v3_extku.c
-       $(CC) /Fo$(OBJ_D)\v3_extku.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\x509v3\v3_extku.c
-
-$(OBJ_D)\v3_ia5.obj: $(SRC_D)\crypto\x509v3\v3_ia5.c
-       $(CC) /Fo$(OBJ_D)\v3_ia5.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\x509v3\v3_ia5.c
-
-$(OBJ_D)\v3_lib.obj: $(SRC_D)\crypto\x509v3\v3_lib.c
-       $(CC) /Fo$(OBJ_D)\v3_lib.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\x509v3\v3_lib.c
-
-$(OBJ_D)\v3_prn.obj: $(SRC_D)\crypto\x509v3\v3_prn.c
-       $(CC) /Fo$(OBJ_D)\v3_prn.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\x509v3\v3_prn.c
-
-$(OBJ_D)\v3_utl.obj: $(SRC_D)\crypto\x509v3\v3_utl.c
-       $(CC) /Fo$(OBJ_D)\v3_utl.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\x509v3\v3_utl.c
-
-$(OBJ_D)\v3err.obj: $(SRC_D)\crypto\x509v3\v3err.c
-       $(CC) /Fo$(OBJ_D)\v3err.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\x509v3\v3err.c
-
-$(OBJ_D)\v3_genn.obj: $(SRC_D)\crypto\x509v3\v3_genn.c
-       $(CC) /Fo$(OBJ_D)\v3_genn.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\x509v3\v3_genn.c
-
-$(OBJ_D)\v3_alt.obj: $(SRC_D)\crypto\x509v3\v3_alt.c
-       $(CC) /Fo$(OBJ_D)\v3_alt.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\x509v3\v3_alt.c
-
-$(OBJ_D)\v3_skey.obj: $(SRC_D)\crypto\x509v3\v3_skey.c
-       $(CC) /Fo$(OBJ_D)\v3_skey.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\x509v3\v3_skey.c
-
-$(OBJ_D)\v3_akey.obj: $(SRC_D)\crypto\x509v3\v3_akey.c
-       $(CC) /Fo$(OBJ_D)\v3_akey.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\x509v3\v3_akey.c
-
-$(OBJ_D)\v3_pku.obj: $(SRC_D)\crypto\x509v3\v3_pku.c
-       $(CC) /Fo$(OBJ_D)\v3_pku.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\x509v3\v3_pku.c
-
-$(OBJ_D)\v3_int.obj: $(SRC_D)\crypto\x509v3\v3_int.c
-       $(CC) /Fo$(OBJ_D)\v3_int.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\x509v3\v3_int.c
-
-$(OBJ_D)\v3_enum.obj: $(SRC_D)\crypto\x509v3\v3_enum.c
-       $(CC) /Fo$(OBJ_D)\v3_enum.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\x509v3\v3_enum.c
-
-$(OBJ_D)\v3_sxnet.obj: $(SRC_D)\crypto\x509v3\v3_sxnet.c
-       $(CC) /Fo$(OBJ_D)\v3_sxnet.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\x509v3\v3_sxnet.c
-
-$(OBJ_D)\v3_cpols.obj: $(SRC_D)\crypto\x509v3\v3_cpols.c
-       $(CC) /Fo$(OBJ_D)\v3_cpols.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\x509v3\v3_cpols.c
-
-$(OBJ_D)\v3_crld.obj: $(SRC_D)\crypto\x509v3\v3_crld.c
-       $(CC) /Fo$(OBJ_D)\v3_crld.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\x509v3\v3_crld.c
-
-$(OBJ_D)\conf.obj: $(SRC_D)\crypto\conf\conf.c
-       $(CC) /Fo$(OBJ_D)\conf.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\conf\conf.c
-
-$(OBJ_D)\conf_err.obj: $(SRC_D)\crypto\conf\conf_err.c
-       $(CC) /Fo$(OBJ_D)\conf_err.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\conf\conf_err.c
-
-$(OBJ_D)\txt_db.obj: $(SRC_D)\crypto\txt_db\txt_db.c
-       $(CC) /Fo$(OBJ_D)\txt_db.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\txt_db\txt_db.c
-
-$(OBJ_D)\pk7_lib.obj: $(SRC_D)\crypto\pkcs7\pk7_lib.c
-       $(CC) /Fo$(OBJ_D)\pk7_lib.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\pkcs7\pk7_lib.c
-
-$(OBJ_D)\pkcs7err.obj: $(SRC_D)\crypto\pkcs7\pkcs7err.c
-       $(CC) /Fo$(OBJ_D)\pkcs7err.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\pkcs7\pkcs7err.c
-
-$(OBJ_D)\pk7_doit.obj: $(SRC_D)\crypto\pkcs7\pk7_doit.c
-       $(CC) /Fo$(OBJ_D)\pk7_doit.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\pkcs7\pk7_doit.c
-
-$(OBJ_D)\p12_add.obj: $(SRC_D)\crypto\pkcs12\p12_add.c
-       $(CC) /Fo$(OBJ_D)\p12_add.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\pkcs12\p12_add.c
-
-$(OBJ_D)\p12_attr.obj: $(SRC_D)\crypto\pkcs12\p12_attr.c
-       $(CC) /Fo$(OBJ_D)\p12_attr.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\pkcs12\p12_attr.c
-
-$(OBJ_D)\p12_bags.obj: $(SRC_D)\crypto\pkcs12\p12_bags.c
-       $(CC) /Fo$(OBJ_D)\p12_bags.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\pkcs12\p12_bags.c
-
-$(OBJ_D)\p12_crpt.obj: $(SRC_D)\crypto\pkcs12\p12_crpt.c
-       $(CC) /Fo$(OBJ_D)\p12_crpt.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\pkcs12\p12_crpt.c
-
-$(OBJ_D)\p12_crt.obj: $(SRC_D)\crypto\pkcs12\p12_crt.c
-       $(CC) /Fo$(OBJ_D)\p12_crt.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\pkcs12\p12_crt.c
-
-$(OBJ_D)\p12_decr.obj: $(SRC_D)\crypto\pkcs12\p12_decr.c
-       $(CC) /Fo$(OBJ_D)\p12_decr.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\pkcs12\p12_decr.c
-
-$(OBJ_D)\p12_init.obj: $(SRC_D)\crypto\pkcs12\p12_init.c
-       $(CC) /Fo$(OBJ_D)\p12_init.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\pkcs12\p12_init.c
-
-$(OBJ_D)\p12_key.obj: $(SRC_D)\crypto\pkcs12\p12_key.c
-       $(CC) /Fo$(OBJ_D)\p12_key.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\pkcs12\p12_key.c
-
-$(OBJ_D)\p12_kiss.obj: $(SRC_D)\crypto\pkcs12\p12_kiss.c
-       $(CC) /Fo$(OBJ_D)\p12_kiss.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\pkcs12\p12_kiss.c
-
-$(OBJ_D)\p12_lib.obj: $(SRC_D)\crypto\pkcs12\p12_lib.c
-       $(CC) /Fo$(OBJ_D)\p12_lib.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\pkcs12\p12_lib.c
-
-$(OBJ_D)\p12_mac.obj: $(SRC_D)\crypto\pkcs12\p12_mac.c
-       $(CC) /Fo$(OBJ_D)\p12_mac.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\pkcs12\p12_mac.c
-
-$(OBJ_D)\p12_mutl.obj: $(SRC_D)\crypto\pkcs12\p12_mutl.c
-       $(CC) /Fo$(OBJ_D)\p12_mutl.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\pkcs12\p12_mutl.c
-
-$(OBJ_D)\p12_sbag.obj: $(SRC_D)\crypto\pkcs12\p12_sbag.c
-       $(CC) /Fo$(OBJ_D)\p12_sbag.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\pkcs12\p12_sbag.c
-
-$(OBJ_D)\p12_utl.obj: $(SRC_D)\crypto\pkcs12\p12_utl.c
-       $(CC) /Fo$(OBJ_D)\p12_utl.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\pkcs12\p12_utl.c
-
-$(OBJ_D)\pk12err.obj: $(SRC_D)\crypto\pkcs12\pk12err.c
-       $(CC) /Fo$(OBJ_D)\pk12err.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\pkcs12\pk12err.c
-
-$(OBJ_D)\comp_lib.obj: $(SRC_D)\crypto\comp\comp_lib.c
-       $(CC) /Fo$(OBJ_D)\comp_lib.obj  $(LIB_CFLAGS) -c 
$(SRC_D)\crypto\comp\comp_lib.c
-
-$(OBJ_D)\c_rle.obj: $(SRC_D)\crypto\comp\c_rle.c
-       $(CC) /Fo$(OBJ_D)\c_rle.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\comp\c_rle.c
-
-$(OBJ_D)\c_zlib.obj: $(SRC_D)\crypto\comp\c_zlib.c
-       $(CC) /Fo$(OBJ_D)\c_zlib.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\comp\c_zlib.c
-
-$(OBJ_D)\s2_meth.obj: $(SRC_D)\ssl\s2_meth.c
-       $(CC) /Fo$(OBJ_D)\s2_meth.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\s2_meth.c
-
-$(OBJ_D)\s2_srvr.obj: $(SRC_D)\ssl\s2_srvr.c
-       $(CC) /Fo$(OBJ_D)\s2_srvr.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\s2_srvr.c
-
-$(OBJ_D)\s2_clnt.obj: $(SRC_D)\ssl\s2_clnt.c
-       $(CC) /Fo$(OBJ_D)\s2_clnt.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\s2_clnt.c
-
-$(OBJ_D)\s2_lib.obj: $(SRC_D)\ssl\s2_lib.c
-       $(CC) /Fo$(OBJ_D)\s2_lib.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\s2_lib.c
-
-$(OBJ_D)\s2_enc.obj: $(SRC_D)\ssl\s2_enc.c
-       $(CC) /Fo$(OBJ_D)\s2_enc.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\s2_enc.c
-
-$(OBJ_D)\s2_pkt.obj: $(SRC_D)\ssl\s2_pkt.c
-       $(CC) /Fo$(OBJ_D)\s2_pkt.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\s2_pkt.c
-
-$(OBJ_D)\s3_meth.obj: $(SRC_D)\ssl\s3_meth.c
-       $(CC) /Fo$(OBJ_D)\s3_meth.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\s3_meth.c
-
-$(OBJ_D)\s3_srvr.obj: $(SRC_D)\ssl\s3_srvr.c
-       $(CC) /Fo$(OBJ_D)\s3_srvr.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\s3_srvr.c
-
-$(OBJ_D)\s3_clnt.obj: $(SRC_D)\ssl\s3_clnt.c
-       $(CC) /Fo$(OBJ_D)\s3_clnt.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\s3_clnt.c
-
-$(OBJ_D)\s3_lib.obj: $(SRC_D)\ssl\s3_lib.c
-       $(CC) /Fo$(OBJ_D)\s3_lib.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\s3_lib.c
-
-$(OBJ_D)\s3_enc.obj: $(SRC_D)\ssl\s3_enc.c
-       $(CC) /Fo$(OBJ_D)\s3_enc.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\s3_enc.c
-
-$(OBJ_D)\s3_pkt.obj: $(SRC_D)\ssl\s3_pkt.c
-       $(CC) /Fo$(OBJ_D)\s3_pkt.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\s3_pkt.c
-
-$(OBJ_D)\s3_both.obj: $(SRC_D)\ssl\s3_both.c
-       $(CC) /Fo$(OBJ_D)\s3_both.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\s3_both.c
-
-$(OBJ_D)\s23_meth.obj: $(SRC_D)\ssl\s23_meth.c
-       $(CC) /Fo$(OBJ_D)\s23_meth.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\s23_meth.c
-
-$(OBJ_D)\s23_srvr.obj: $(SRC_D)\ssl\s23_srvr.c
-       $(CC) /Fo$(OBJ_D)\s23_srvr.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\s23_srvr.c
-
-$(OBJ_D)\s23_clnt.obj: $(SRC_D)\ssl\s23_clnt.c
-       $(CC) /Fo$(OBJ_D)\s23_clnt.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\s23_clnt.c
-
-$(OBJ_D)\s23_lib.obj: $(SRC_D)\ssl\s23_lib.c
-       $(CC) /Fo$(OBJ_D)\s23_lib.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\s23_lib.c
-
-$(OBJ_D)\s23_pkt.obj: $(SRC_D)\ssl\s23_pkt.c
-       $(CC) /Fo$(OBJ_D)\s23_pkt.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\s23_pkt.c
-
-$(OBJ_D)\t1_meth.obj: $(SRC_D)\ssl\t1_meth.c
-       $(CC) /Fo$(OBJ_D)\t1_meth.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\t1_meth.c
-
-$(OBJ_D)\t1_srvr.obj: $(SRC_D)\ssl\t1_srvr.c
-       $(CC) /Fo$(OBJ_D)\t1_srvr.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\t1_srvr.c
-
-$(OBJ_D)\t1_clnt.obj: $(SRC_D)\ssl\t1_clnt.c
-       $(CC) /Fo$(OBJ_D)\t1_clnt.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\t1_clnt.c
-
-$(OBJ_D)\t1_lib.obj: $(SRC_D)\ssl\t1_lib.c
-       $(CC) /Fo$(OBJ_D)\t1_lib.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\t1_lib.c
-
-$(OBJ_D)\t1_enc.obj: $(SRC_D)\ssl\t1_enc.c
-       $(CC) /Fo$(OBJ_D)\t1_enc.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\t1_enc.c
-
-$(OBJ_D)\ssl_lib.obj: $(SRC_D)\ssl\ssl_lib.c
-       $(CC) /Fo$(OBJ_D)\ssl_lib.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\ssl_lib.c
-
-$(OBJ_D)\ssl_err2.obj: $(SRC_D)\ssl\ssl_err2.c
-       $(CC) /Fo$(OBJ_D)\ssl_err2.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\ssl_err2.c
-
-$(OBJ_D)\ssl_cert.obj: $(SRC_D)\ssl\ssl_cert.c
-       $(CC) /Fo$(OBJ_D)\ssl_cert.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\ssl_cert.c
-
-$(OBJ_D)\ssl_sess.obj: $(SRC_D)\ssl\ssl_sess.c
-       $(CC) /Fo$(OBJ_D)\ssl_sess.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\ssl_sess.c
-
-$(OBJ_D)\ssl_ciph.obj: $(SRC_D)\ssl\ssl_ciph.c
-       $(CC) /Fo$(OBJ_D)\ssl_ciph.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\ssl_ciph.c
-
-$(OBJ_D)\ssl_stat.obj: $(SRC_D)\ssl\ssl_stat.c
-       $(CC) /Fo$(OBJ_D)\ssl_stat.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\ssl_stat.c
-
-$(OBJ_D)\ssl_rsa.obj: $(SRC_D)\ssl\ssl_rsa.c
-       $(CC) /Fo$(OBJ_D)\ssl_rsa.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\ssl_rsa.c
-
-$(OBJ_D)\ssl_asn1.obj: $(SRC_D)\ssl\ssl_asn1.c
-       $(CC) /Fo$(OBJ_D)\ssl_asn1.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\ssl_asn1.c
-
-$(OBJ_D)\ssl_txt.obj: $(SRC_D)\ssl\ssl_txt.c
-       $(CC) /Fo$(OBJ_D)\ssl_txt.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\ssl_txt.c
-
-$(OBJ_D)\ssl_algs.obj: $(SRC_D)\ssl\ssl_algs.c
-       $(CC) /Fo$(OBJ_D)\ssl_algs.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\ssl_algs.c
-
-$(OBJ_D)\bio_ssl.obj: $(SRC_D)\ssl\bio_ssl.c
-       $(CC) /Fo$(OBJ_D)\bio_ssl.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\bio_ssl.c
-
-$(OBJ_D)\ssl_err.obj: $(SRC_D)\ssl\ssl_err.c
-       $(CC) /Fo$(OBJ_D)\ssl_err.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\ssl_err.c
-
-$(OBJ_D)\rsaref.obj: $(SRC_D)\rsaref\rsaref.c
-       $(CC) /Fo$(OBJ_D)\rsaref.obj  $(LIB_CFLAGS) -c $(SRC_D)\rsaref\rsaref.c
-
-$(OBJ_D)\rsar_err.obj: $(SRC_D)\rsaref\rsar_err.c
-       $(CC) /Fo$(OBJ_D)\rsar_err.obj  $(LIB_CFLAGS) -c $(SRC_D)\rsaref\rsar_err.c
-
-$(TEST_D)\md2test.exe: $(OBJ_D)\md2test.obj $(LIBS_DEP)
-  $(LINK) $(LFLAGS) /out:$(TEST_D)\md2test.exe @<<
-  $(APP_EX_OBJ) $(OBJ_D)\md2test.obj $(L_LIBS) $(EX_LIBS)
-<<
-
-$(TEST_D)\md5test.exe: $(OBJ_D)\md5test.obj $(LIBS_DEP)
-  $(LINK) $(LFLAGS) /out:$(TEST_D)\md5test.exe @<<
-  $(APP_EX_OBJ) $(OBJ_D)\md5test.obj $(L_LIBS) $(EX_LIBS)
-<<
-
-$(TEST_D)\shatest.exe: $(OBJ_D)\shatest.obj $(LIBS_DEP)
-  $(LINK) $(LFLAGS) /out:$(TEST_D)\shatest.exe @<<
-  $(APP_EX_OBJ) $(OBJ_D)\shatest.obj $(L_LIBS) $(EX_LIBS)
-<<
-
-$(TEST_D)\sha1test.exe: $(OBJ_D)\sha1test.obj $(LIBS_DEP)
-  $(LINK) $(LFLAGS) /out:$(TEST_D)\sha1test.exe @<<
-  $(APP_EX_OBJ) $(OBJ_D)\sha1test.obj $(L_LIBS) $(EX_LIBS)
-<<
-
-$(TEST_D)\mdc2test.exe: $(OBJ_D)\mdc2test.obj $(LIBS_DEP)
-  $(LINK) $(LFLAGS) /out:$(TEST_D)\mdc2test.exe @<<
-  $(APP_EX_OBJ) $(OBJ_D)\mdc2test.obj $(L_LIBS) $(EX_LIBS)
-<<
-
-$(TEST_D)\hmactest.exe: $(OBJ_D)\hmactest.obj $(LIBS_DEP)
-  $(LINK) $(LFLAGS) /out:$(TEST_D)\hmactest.exe @<<
-  $(APP_EX_OBJ) $(OBJ_D)\hmactest.obj $(L_LIBS) $(EX_LIBS)
-<<
-
-$(TEST_D)\rmdtest.exe: $(OBJ_D)\rmdtest.obj $(LIBS_DEP)
-  $(LINK) $(LFLAGS) /out:$(TEST_D)\rmdtest.exe @<<
-  $(APP_EX_OBJ) $(OBJ_D)\rmdtest.obj $(L_LIBS) $(EX_LIBS)
-<<
-
-$(TEST_D)\destest.exe: $(OBJ_D)\destest.obj $(LIBS_DEP)
-  $(LINK) $(LFLAGS) /out:$(TEST_D)\destest.exe @<<
-  $(APP_EX_OBJ) $(OBJ_D)\destest.obj $(L_LIBS) $(EX_LIBS)
-<<
-
-$(TEST_D)\rc2test.exe: $(OBJ_D)\rc2test.obj $(LIBS_DEP)
-  $(LINK) $(LFLAGS) /out:$(TEST_D)\rc2test.exe @<<
-  $(APP_EX_OBJ) $(OBJ_D)\rc2test.obj $(L_LIBS) $(EX_LIBS)
-<<
-
-$(TEST_D)\rc4test.exe: $(OBJ_D)\rc4test.obj $(LIBS_DEP)
-  $(LINK) $(LFLAGS) /out:$(TEST_D)\rc4test.exe @<<
-  $(APP_EX_OBJ) $(OBJ_D)\rc4test.obj $(L_LIBS) $(EX_LIBS)
-<<
-
-$(TEST_D)\rc5test.exe: $(OBJ_D)\rc5test.obj $(LIBS_DEP)
-  $(LINK) $(LFLAGS) /out:$(TEST_D)\rc5test.exe @<<
-  $(APP_EX_OBJ) $(OBJ_D)\rc5test.obj $(L_LIBS) $(EX_LIBS)
-<<
-
-$(TEST_D)\ideatest.exe: $(OBJ_D)\ideatest.obj $(LIBS_DEP)
-  $(LINK) $(LFLAGS) /out:$(TEST_D)\ideatest.exe @<<
-  $(APP_EX_OBJ) $(OBJ_D)\ideatest.obj $(L_LIBS) $(EX_LIBS)
-<<
-
-$(TEST_D)\bftest.exe: $(OBJ_D)\bftest.obj $(LIBS_DEP)
-  $(LINK) $(LFLAGS) /out:$(TEST_D)\bftest.exe @<<
-  $(APP_EX_OBJ) $(OBJ_D)\bftest.obj $(L_LIBS) $(EX_LIBS)
-<<
-
-$(TEST_D)\casttest.exe: $(OBJ_D)\casttest.obj $(LIBS_DEP)
-  $(LINK) $(LFLAGS) /out:$(TEST_D)\casttest.exe @<<
-  $(APP_EX_OBJ) $(OBJ_D)\casttest.obj $(L_LIBS) $(EX_LIBS)
-<<
-
-$(TEST_D)\bntest.exe: $(OBJ_D)\bntest.obj $(LIBS_DEP)
-  $(LINK) $(LFLAGS) /out:$(TEST_D)\bntest.exe @<<
-  $(APP_EX_OBJ) $(OBJ_D)\bntest.obj $(L_LIBS) $(EX_LIBS)
-<<
-
-$(TEST_D)\exptest.exe: $(OBJ_D)\exptest.obj $(LIBS_DEP)
-  $(LINK) $(LFLAGS) /out:$(TEST_D)\exptest.exe @<<
-  $(APP_EX_OBJ) $(OBJ_D)\exptest.obj $(L_LIBS) $(EX_LIBS)
-<<
-
-$(TEST_D)\rsa_oaep_test.exe: $(OBJ_D)\rsa_oaep_test.obj $(LIBS_DEP)
-  $(LINK) $(LFLAGS) /out:$(TEST_D)\rsa_oaep_test.exe @<<
-  $(APP_EX_OBJ) $(OBJ_D)\rsa_oaep_test.obj $(L_LIBS) $(EX_LIBS)
-<<
-
-$(TEST_D)\dsatest.exe: $(OBJ_D)\dsatest.obj $(LIBS_DEP)
-  $(LINK) $(LFLAGS) /out:$(TEST_D)\dsatest.exe @<<
-  $(APP_EX_OBJ) $(OBJ_D)\dsatest.obj $(L_LIBS) $(EX_LIBS)
-<<
-
-$(TEST_D)\dhtest.exe: $(OBJ_D)\dhtest.obj $(LIBS_DEP)
-  $(LINK) $(LFLAGS) /out:$(TEST_D)\dhtest.exe @<<
-  $(APP_EX_OBJ) $(OBJ_D)\dhtest.obj $(L_LIBS) $(EX_LIBS)
-<<
-
-$(TEST_D)\randtest.exe: $(OBJ_D)\randtest.obj $(LIBS_DEP)
-  $(LINK) $(LFLAGS) /out:$(TEST_D)\randtest.exe @<<
-  $(APP_EX_OBJ) $(OBJ_D)\randtest.obj $(L_LIBS) $(EX_LIBS)
-<<
-
-$(TEST_D)\ssltest.exe: $(OBJ_D)\ssltest.obj $(LIBS_DEP)
-  $(LINK) $(LFLAGS) /out:$(TEST_D)\ssltest.exe @<<
-  $(APP_EX_OBJ) $(OBJ_D)\ssltest.obj $(L_LIBS) $(EX_LIBS)
-<<
-
-$(O_SSL): $(SSLOBJ)
-       $(MKLIB) /out:$(O_SSL) @<<
-  $(SSLOBJ)
-<<
-
-$(O_RSAGLUE): $(RSAGLUEOBJ)
-       $(MKLIB) /out:$(O_RSAGLUE) @<<
-  $(RSAGLUEOBJ)
-<<
-
-$(O_CRYPTO): $(CRYPTOOBJ)
-       $(MKLIB) /out:$(O_CRYPTO) @<<
-  $(CRYPTOOBJ)
-<<
-
-$(BIN_D)\$(E_EXE).exe: $(E_OBJ) $(LIBS_DEP)
-  $(LINK) $(LFLAGS) /out:$(BIN_D)\$(E_EXE).exe @<<
-  $(APP_EX_OBJ) $(E_OBJ) $(L_LIBS) $(EX_LIBS)
-<<
-
+# This makefile has been automatically generated from the OpenSSL distribution.
+# This single makefile will build the complete OpenSSL distribution and
+# by default leave the 'intertesting' output files in .\out and the stuff
+# that needs deleting in .\tmp.
+# The file was generated by running 'make makefile.one', which
+# does a 'make files', which writes all the environment variables from all
+# the makefiles to the file call MINFO.  This file is used by
+# util\mk1mf.pl to generate makefile.one.
+# The 'makefile per directory' system suites me when developing this
+# library and also so I can 'distribute' indervidual library sections.
+# The one monster makefile better suits building in non-unix
+# environments.
+
+INSTALLTOP=\usr\local\ssl
+
+# Set your compiler options
+PLATFORM=VC-WIN32
+CC=cl
+CFLAG= /MD /W3 /WX /G5 /Ox /O2 /Ob2 /Gs0 /GF /Gy /nologo -DWIN32 
+-DWIN32_LEAN_AND_MEAN -DL_ENDIAN /Fdout32
+APP_CFLAG=
+LIB_CFLAG=
+SHLIB_CFLAG=
+APP_EX_OBJ=setargv.obj
+SHLIB_EX_OBJ=
+# add extra libraries to this define, for solaris -lsocket -lnsl would
+# be added
+EX_LIBS=wsock32.lib user32.lib gdi32.lib
+
+# The OpenSSL directory
+SRC_D=.
+
+LINK=link
+LFLAGS=/nologo /subsystem:console /machine:I386 /opt:ref
+
+BN_ASM_OBJ=
+BN_ASM_SRC=
+DES_ENC_OBJ=
+DES_ENC_SRC=
+BF_ENC_OBJ=
+BF_ENC_SRC=
+CAST_ENC_OBJ=
+CAST_ENC_SRC=
+RC4_ENC_OBJ=
+RC4_ENC_SRC=
+RC5_ENC_OBJ=
+RC5_ENC_SRC=
+MD5_ASM_OBJ=
+MD5_ASM_SRC=
+SHA1_ASM_OBJ=
+SHA1_ASM_SRC=
+RMD160_ASM_OBJ=
+RMD160_ASM_SRC=
+
+# The output directory for everything intersting
+OUT_D=out32
+# The output directory for all the temporary muck
+TMP_D=tmp32
+# The output directory for the header files
+INC_D=inc32
+INCO_D=inc32\openssl
+
+CP=copy nul+
+RM=del
+RANLIB=
+MKDIR=mkdir
+MKLIB=lib
+MLFLAGS=
+ASM=ml /Cp /coff /c /Cx
+
+######################################################
+# You should not need to touch anything below this point
+######################################################
+
+E_EXE=openssl
+SSL=ssleay32
+CRYPTO=libeay32
+RSAGLUE=RSAglue
+
+# BIN_D  - Binary output directory
+# TEST_D - Binary test file output directory
+# LIB_D  - library output directory
+# Note: if you change these point to different directories then uncomment out
+# the lines around the 'NB' comment below.
+# 
+BIN_D=$(OUT_D)
+TEST_D=$(OUT_D)
+LIB_D=$(OUT_D)
+
+# INCL_D - local library directory
+# OBJ_D  - temp object file directory
+OBJ_D=$(TMP_D)
+INCL_D=$(TMP_D)
+
+O_SSL=     $(LIB_D)\$(SSL).lib
+O_CRYPTO=  $(LIB_D)\$(CRYPTO).lib
+O_RSAGLUE= $(LIB_D)\$(RSAGLUE).lib
+SO_SSL=    $(SSL)
+SO_CRYPTO= $(CRYPTO)
+L_SSL=     $(LIB_D)\$(SSL).lib
+L_CRYPTO=  $(LIB_D)\$(CRYPTO).lib
+
+L_LIBS= $(L_SSL) $(L_CRYPTO)
+#L_LIBS= $(O_SSL) $(O_RSAGLUE) -lrsaref $(O_CRYPTO)
+
+######################################################
+# Don't touch anything below this point
+######################################################
+
+INC=-I$(INC_D) -I$(INCL_D)
+APP_CFLAGS=$(INC) $(CFLAG) $(APP_CFLAG)
+LIB_CFLAGS=$(INC) $(CFLAG) $(LIB_CFLAG)
+SHLIB_CFLAGS=$(INC) $(CFLAG) $(LIB_CFLAG) $(SHLIB_CFLAG)
+LIBS_DEP=$(O_CRYPTO) $(O_RSAGLUE) $(O_SSL)
+
+#############################################
+HEADER=$(INCL_D)\cryptlib.h \
+       $(INCL_D)\buildinf.h $(INCL_D)\md5_locl.h $(INCL_D)\sha_locl.h \
+       $(INCL_D)\rmd_locl.h $(INCL_D)\rmdconst.h $(INCL_D)\des_locl.h \
+       $(INCL_D)\rpc_des.h $(INCL_D)\podd.h $(INCL_D)\sk.h \
+       $(INCL_D)\spr.h $(INCL_D)\des_ver.h $(INCL_D)\rc2_locl.h \
+       $(INCL_D)\rc4_locl.h $(INCL_D)\rc5_locl.h $(INCL_D)\idea_lcl.h \
+       $(INCL_D)\bf_pi.h $(INCL_D)\bf_locl.h $(INCL_D)\cast_s.h \
+       $(INCL_D)\cast_lcl.h $(INCL_D)\bn_lcl.h $(INCL_D)\bn_prime.h \
+       $(INCL_D)\bss_file.c $(INCL_D)\obj_dat.h $(INCL_D)\conf_lcl.h \
+       $(INCL_D)\ssl_locl.h $(INCL_D)\apps.h $(INCL_D)\progs.h \
+       $(INCL_D)\s_apps.h $(INCL_D)\testdsa.h $(INCL_D)\testrsa.h
+
+EXHEADER=$(INCO_D)\e_os.h \
+       $(INCO_D)\e_os2.h $(INCO_D)\crypto.h $(INCO_D)\tmdiff.h \
+       $(INCO_D)\opensslv.h $(INCO_D)\opensslconf.h $(INCO_D)\ebcdic.h \
+       $(INCO_D)\md2.h $(INCO_D)\md5.h $(INCO_D)\sha.h \
+       $(INCO_D)\mdc2.h $(INCO_D)\hmac.h $(INCO_D)\ripemd.h \
+       $(INCO_D)\des.h $(INCO_D)\rc2.h $(INCO_D)\rc4.h \
+       $(INCO_D)\rc5.h $(INCO_D)\idea.h $(INCO_D)\blowfish.h \
+       $(INCO_D)\cast.h $(INCO_D)\bn.h $(INCO_D)\rsa.h \
+       $(INCO_D)\dsa.h $(INCO_D)\dh.h $(INCO_D)\buffer.h \
+       $(INCO_D)\bio.h $(INCO_D)\stack.h $(INCO_D)\safestack.h \
+       $(INCO_D)\lhash.h $(INCO_D)\rand.h $(INCO_D)\err.h \
+       $(INCO_D)\objects.h $(INCO_D)\evp.h $(INCO_D)\asn1.h \
+       $(INCO_D)\asn1_mac.h $(INCO_D)\pem.h $(INCO_D)\pem2.h \
+       $(INCO_D)\x509.h $(INCO_D)\x509_vfy.h $(INCO_D)\x509v3.h \
+       $(INCO_D)\conf.h $(INCO_D)\txt_db.h $(INCO_D)\pkcs7.h \
+       $(INCO_D)\pkcs12.h $(INCO_D)\comp.h $(INCO_D)\ssl.h \
+       $(INCO_D)\ssl2.h $(INCO_D)\ssl3.h $(INCO_D)\ssl23.h \
+       $(INCO_D)\tls1.h $(INCO_D)\rsaref.h
+
+T_OBJ=$(OBJ_D)\md2test.obj \
+       $(OBJ_D)\md5test.obj $(OBJ_D)\shatest.obj $(OBJ_D)\sha1test.obj \
+       $(OBJ_D)\mdc2test.obj $(OBJ_D)\hmactest.obj $(OBJ_D)\rmdtest.obj \
+       $(OBJ_D)\destest.obj $(OBJ_D)\rc2test.obj $(OBJ_D)\rc4test.obj \
+       $(OBJ_D)\rc5test.obj $(OBJ_D)\ideatest.obj $(OBJ_D)\bftest.obj \
+       $(OBJ_D)\casttest.obj $(OBJ_D)\bntest.obj $(OBJ_D)\exptest.obj \
+       $(OBJ_D)\rsa_test.obj $(OBJ_D)\dsatest.obj $(OBJ_D)\dhtest.obj \
+       $(OBJ_D)\randtest.obj $(OBJ_D)\ssltest.obj
+
+E_OBJ=$(OBJ_D)\verify.obj \
+       $(OBJ_D)\asn1pars.obj $(OBJ_D)\req.obj $(OBJ_D)\dgst.obj \
+       $(OBJ_D)\dh.obj $(OBJ_D)\dhparam.obj $(OBJ_D)\enc.obj \
+       $(OBJ_D)\passwd.obj $(OBJ_D)\gendh.obj $(OBJ_D)\errstr.obj \
+       $(OBJ_D)\ca.obj $(OBJ_D)\pkcs7.obj $(OBJ_D)\crl2p7.obj \
+       $(OBJ_D)\crl.obj $(OBJ_D)\rsa.obj $(OBJ_D)\dsa.obj \
+       $(OBJ_D)\dsaparam.obj $(OBJ_D)\x509.obj $(OBJ_D)\genrsa.obj \
+       $(OBJ_D)\gendsa.obj $(OBJ_D)\s_server.obj $(OBJ_D)\s_client.obj \
+       $(OBJ_D)\speed.obj $(OBJ_D)\s_time.obj $(OBJ_D)\apps.obj \
+       $(OBJ_D)\s_cb.obj $(OBJ_D)\s_socket.obj $(OBJ_D)\app_rand.obj \
+       $(OBJ_D)\version.obj $(OBJ_D)\sess_id.obj $(OBJ_D)\ciphers.obj \
+       $(OBJ_D)\nseq.obj $(OBJ_D)\pkcs12.obj $(OBJ_D)\pkcs8.obj \
+       $(OBJ_D)\spkac.obj $(OBJ_D)\smime.obj $(OBJ_D)\openssl.obj
+
+CRYPTOOBJ=$(OBJ_D)\cryptlib.obj \
+       $(OBJ_D)\mem.obj $(OBJ_D)\mem_dbg.obj $(OBJ_D)\cversion.obj \
+       $(OBJ_D)\ex_data.obj $(OBJ_D)\tmdiff.obj $(OBJ_D)\cpt_err.obj \
+       $(OBJ_D)\ebcdic.obj $(OBJ_D)\md2_dgst.obj $(OBJ_D)\md2_one.obj \
+       $(OBJ_D)\md5_dgst.obj $(OBJ_D)\md5_one.obj $(OBJ_D)\sha_dgst.obj \
+       $(OBJ_D)\sha1dgst.obj $(OBJ_D)\sha_one.obj $(OBJ_D)\sha1_one.obj \
+       $(OBJ_D)\mdc2dgst.obj $(OBJ_D)\mdc2_one.obj $(OBJ_D)\hmac.obj \
+       $(OBJ_D)\rmd_dgst.obj $(OBJ_D)\rmd_one.obj $(OBJ_D)\set_key.obj \
+       $(OBJ_D)\ecb_enc.obj $(OBJ_D)\cbc_enc.obj $(OBJ_D)\ecb3_enc.obj \
+       $(OBJ_D)\cfb64enc.obj $(OBJ_D)\cfb64ede.obj $(OBJ_D)\cfb_enc.obj \
+       $(OBJ_D)\ofb64ede.obj $(OBJ_D)\enc_read.obj $(OBJ_D)\enc_writ.obj \
+       $(OBJ_D)\ofb64enc.obj $(OBJ_D)\ofb_enc.obj $(OBJ_D)\str2key.obj \
+       $(OBJ_D)\pcbc_enc.obj $(OBJ_D)\qud_cksm.obj $(OBJ_D)\rand_key.obj \
+       $(OBJ_D)\des_enc.obj $(OBJ_D)\fcrypt_b.obj $(OBJ_D)\read2pwd.obj \
+       $(OBJ_D)\fcrypt.obj $(OBJ_D)\xcbc_enc.obj $(OBJ_D)\read_pwd.obj \
+       $(OBJ_D)\rpc_enc.obj $(OBJ_D)\cbc_cksm.obj $(OBJ_D)\supp.obj \
+       $(OBJ_D)\ede_cbcm_enc.obj $(OBJ_D)\rc2_ecb.obj $(OBJ_D)\rc2_skey.obj \
+       $(OBJ_D)\rc2_cbc.obj $(OBJ_D)\rc2cfb64.obj $(OBJ_D)\rc2ofb64.obj \
+       $(OBJ_D)\rc4_skey.obj $(OBJ_D)\rc4_enc.obj $(OBJ_D)\rc5_skey.obj \
+       $(OBJ_D)\rc5_ecb.obj $(OBJ_D)\rc5_enc.obj $(OBJ_D)\rc5cfb64.obj \
+       $(OBJ_D)\rc5ofb64.obj $(OBJ_D)\i_cbc.obj $(OBJ_D)\i_cfb64.obj \
+       $(OBJ_D)\i_ofb64.obj $(OBJ_D)\i_ecb.obj $(OBJ_D)\i_skey.obj \
+       $(OBJ_D)\bf_skey.obj $(OBJ_D)\bf_ecb.obj $(OBJ_D)\bf_enc.obj \
+       $(OBJ_D)\bf_cfb64.obj $(OBJ_D)\bf_ofb64.obj $(OBJ_D)\c_skey.obj \
+       $(OBJ_D)\c_ecb.obj $(OBJ_D)\c_enc.obj $(OBJ_D)\c_cfb64.obj \
+       $(OBJ_D)\c_ofb64.obj $(OBJ_D)\bn_add.obj $(OBJ_D)\bn_div.obj \
+       $(OBJ_D)\bn_exp.obj $(OBJ_D)\bn_lib.obj $(OBJ_D)\bn_ctx.obj \
+       $(OBJ_D)\bn_mul.obj $(OBJ_D)\bn_print.obj $(OBJ_D)\bn_rand.obj \
+       $(OBJ_D)\bn_shift.obj $(OBJ_D)\bn_word.obj $(OBJ_D)\bn_blind.obj \
+       $(OBJ_D)\bn_gcd.obj $(OBJ_D)\bn_prime.obj $(OBJ_D)\bn_err.obj \
+       $(OBJ_D)\bn_sqr.obj $(OBJ_D)\bn_asm.obj $(OBJ_D)\bn_recp.obj \
+       $(OBJ_D)\bn_mont.obj $(OBJ_D)\bn_mpi.obj $(OBJ_D)\bn_exp2.obj \
+       $(OBJ_D)\rsa_eay.obj $(OBJ_D)\rsa_gen.obj $(OBJ_D)\rsa_lib.obj \
+       $(OBJ_D)\rsa_sign.obj $(OBJ_D)\rsa_saos.obj $(OBJ_D)\rsa_err.obj \
+       $(OBJ_D)\rsa_pk1.obj $(OBJ_D)\rsa_ssl.obj $(OBJ_D)\rsa_none.obj \
+       $(OBJ_D)\rsa_oaep.obj $(OBJ_D)\rsa_chk.obj $(OBJ_D)\rsa_null.obj \
+       $(OBJ_D)\dsa_gen.obj $(OBJ_D)\dsa_key.obj $(OBJ_D)\dsa_lib.obj \
+       $(OBJ_D)\dsa_asn1.obj $(OBJ_D)\dsa_vrf.obj $(OBJ_D)\dsa_sign.obj \
+       $(OBJ_D)\dsa_err.obj $(OBJ_D)\dsa_ossl.obj $(OBJ_D)\dh_gen.obj \
+       $(OBJ_D)\dh_key.obj $(OBJ_D)\dh_lib.obj $(OBJ_D)\dh_check.obj \
+       $(OBJ_D)\dh_err.obj $(OBJ_D)\buffer.obj $(OBJ_D)\buf_err.obj \
+       $(OBJ_D)\bio_lib.obj $(OBJ_D)\bio_cb.obj $(OBJ_D)\bio_err.obj \
+       $(OBJ_D)\bss_mem.obj $(OBJ_D)\bss_null.obj $(OBJ_D)\bss_fd.obj \
+       $(OBJ_D)\bss_file.obj $(OBJ_D)\bss_sock.obj $(OBJ_D)\bss_conn.obj \
+       $(OBJ_D)\bf_null.obj $(OBJ_D)\bf_buff.obj $(OBJ_D)\b_print.obj \
+       $(OBJ_D)\b_dump.obj $(OBJ_D)\b_sock.obj $(OBJ_D)\bss_acpt.obj \
+       $(OBJ_D)\bf_nbio.obj $(OBJ_D)\bss_log.obj $(OBJ_D)\bss_bio.obj \
+       $(OBJ_D)\stack.obj $(OBJ_D)\lhash.obj $(OBJ_D)\lh_stats.obj \
+       $(OBJ_D)\md_rand.obj $(OBJ_D)\randfile.obj $(OBJ_D)\rand_lib.obj \
+       $(OBJ_D)\rand_err.obj $(OBJ_D)\rand_egd.obj $(OBJ_D)\err.obj \
+       $(OBJ_D)\err_all.obj $(OBJ_D)\err_prn.obj $(OBJ_D)\o_names.obj \
+       $(OBJ_D)\obj_dat.obj $(OBJ_D)\obj_lib.obj $(OBJ_D)\obj_err.obj \
+       $(OBJ_D)\encode.obj $(OBJ_D)\digest.obj $(OBJ_D)\evp_enc.obj \
+       $(OBJ_D)\evp_key.obj $(OBJ_D)\e_ecb_d.obj $(OBJ_D)\e_cbc_d.obj \
+       $(OBJ_D)\e_cfb_d.obj $(OBJ_D)\e_ofb_d.obj $(OBJ_D)\e_ecb_i.obj \
+       $(OBJ_D)\e_cbc_i.obj $(OBJ_D)\e_cfb_i.obj $(OBJ_D)\e_ofb_i.obj \
+       $(OBJ_D)\e_ecb_3d.obj $(OBJ_D)\e_cbc_3d.obj $(OBJ_D)\e_rc4.obj \
+       $(OBJ_D)\names.obj $(OBJ_D)\e_cfb_3d.obj $(OBJ_D)\e_ofb_3d.obj \
+       $(OBJ_D)\e_xcbc_d.obj $(OBJ_D)\e_ecb_r2.obj $(OBJ_D)\e_cbc_r2.obj \
+       $(OBJ_D)\e_cfb_r2.obj $(OBJ_D)\e_ofb_r2.obj $(OBJ_D)\e_ecb_bf.obj \
+       $(OBJ_D)\e_cbc_bf.obj $(OBJ_D)\e_cfb_bf.obj $(OBJ_D)\e_ofb_bf.obj \
+       $(OBJ_D)\e_ecb_c.obj $(OBJ_D)\e_cbc_c.obj $(OBJ_D)\e_cfb_c.obj \
+       $(OBJ_D)\e_ofb_c.obj $(OBJ_D)\e_ecb_r5.obj $(OBJ_D)\e_cbc_r5.obj \
+       $(OBJ_D)\e_cfb_r5.obj $(OBJ_D)\e_ofb_r5.obj $(OBJ_D)\m_null.obj \
+       $(OBJ_D)\m_md2.obj $(OBJ_D)\m_md5.obj $(OBJ_D)\m_sha.obj \
+       $(OBJ_D)\m_sha1.obj $(OBJ_D)\m_dss.obj $(OBJ_D)\m_dss1.obj \
+       $(OBJ_D)\m_mdc2.obj $(OBJ_D)\m_ripemd.obj $(OBJ_D)\p_open.obj \
+       $(OBJ_D)\p_seal.obj $(OBJ_D)\p_sign.obj $(OBJ_D)\p_verify.obj \
+       $(OBJ_D)\p_lib.obj $(OBJ_D)\p_enc.obj $(OBJ_D)\p_dec.obj \
+       $(OBJ_D)\bio_md.obj $(OBJ_D)\bio_b64.obj $(OBJ_D)\bio_enc.obj \
+       $(OBJ_D)\evp_err.obj $(OBJ_D)\e_null.obj $(OBJ_D)\c_all.obj \
+       $(OBJ_D)\c_allc.obj $(OBJ_D)\c_alld.obj $(OBJ_D)\evp_lib.obj \
+       $(OBJ_D)\bio_ok.obj $(OBJ_D)\evp_pkey.obj $(OBJ_D)\evp_pbe.obj \
+       $(OBJ_D)\p5_crpt.obj $(OBJ_D)\p5_crpt2.obj $(OBJ_D)\a_object.obj \
+       $(OBJ_D)\a_bitstr.obj $(OBJ_D)\a_utctm.obj $(OBJ_D)\a_gentm.obj \
+       $(OBJ_D)\a_time.obj $(OBJ_D)\a_int.obj $(OBJ_D)\a_octet.obj \
+       $(OBJ_D)\a_null.obj $(OBJ_D)\a_print.obj $(OBJ_D)\a_type.obj \
+       $(OBJ_D)\a_set.obj $(OBJ_D)\a_dup.obj $(OBJ_D)\a_d2i_fp.obj \
+       $(OBJ_D)\a_i2d_fp.obj $(OBJ_D)\a_bmp.obj $(OBJ_D)\a_enum.obj \
+       $(OBJ_D)\a_vis.obj $(OBJ_D)\a_utf8.obj $(OBJ_D)\a_sign.obj \
+       $(OBJ_D)\a_digest.obj $(OBJ_D)\a_verify.obj $(OBJ_D)\a_mbstr.obj \
+       $(OBJ_D)\x_algor.obj $(OBJ_D)\x_val.obj $(OBJ_D)\x_pubkey.obj \
+       $(OBJ_D)\x_sig.obj $(OBJ_D)\x_req.obj $(OBJ_D)\x_attrib.obj \
+       $(OBJ_D)\x_name.obj $(OBJ_D)\x_cinf.obj $(OBJ_D)\x_x509.obj \
+       $(OBJ_D)\x_x509a.obj $(OBJ_D)\x_crl.obj $(OBJ_D)\x_info.obj \
+       $(OBJ_D)\x_spki.obj $(OBJ_D)\nsseq.obj $(OBJ_D)\d2i_r_pr.obj \
+       $(OBJ_D)\i2d_r_pr.obj $(OBJ_D)\d2i_r_pu.obj $(OBJ_D)\i2d_r_pu.obj \
+       $(OBJ_D)\d2i_s_pr.obj $(OBJ_D)\i2d_s_pr.obj $(OBJ_D)\d2i_s_pu.obj \
+       $(OBJ_D)\i2d_s_pu.obj $(OBJ_D)\d2i_pu.obj $(OBJ_D)\d2i_pr.obj \
+       $(OBJ_D)\i2d_pu.obj $(OBJ_D)\i2d_pr.obj $(OBJ_D)\t_req.obj \
+       $(OBJ_D)\t_x509.obj $(OBJ_D)\t_x509a.obj $(OBJ_D)\t_crl.obj \
+       $(OBJ_D)\t_pkey.obj $(OBJ_D)\t_spki.obj $(OBJ_D)\t_bitst.obj \
+       $(OBJ_D)\p7_i_s.obj $(OBJ_D)\p7_signi.obj $(OBJ_D)\p7_signd.obj \
+       $(OBJ_D)\p7_recip.obj $(OBJ_D)\p7_enc_c.obj $(OBJ_D)\p7_evp.obj \
+       $(OBJ_D)\p7_dgst.obj $(OBJ_D)\p7_s_e.obj $(OBJ_D)\p7_enc.obj \
+       $(OBJ_D)\p7_lib.obj $(OBJ_D)\f_int.obj $(OBJ_D)\f_string.obj \
+       $(OBJ_D)\i2d_dhp.obj $(OBJ_D)\i2d_dsap.obj $(OBJ_D)\d2i_dhp.obj \
+       $(OBJ_D)\d2i_dsap.obj $(OBJ_D)\n_pkey.obj $(OBJ_D)\f_enum.obj \
+       $(OBJ_D)\a_hdr.obj $(OBJ_D)\x_pkey.obj $(OBJ_D)\a_bool.obj \
+       $(OBJ_D)\x_exten.obj $(OBJ_D)\asn1_par.obj $(OBJ_D)\asn1_lib.obj \
+       $(OBJ_D)\asn1_err.obj $(OBJ_D)\a_meth.obj $(OBJ_D)\a_bytes.obj \
+       $(OBJ_D)\a_strnid.obj $(OBJ_D)\evp_asn1.obj $(OBJ_D)\asn_pack.obj \
+       $(OBJ_D)\p5_pbe.obj $(OBJ_D)\p5_pbev2.obj $(OBJ_D)\p8_pkey.obj \
+       $(OBJ_D)\pem_sign.obj $(OBJ_D)\pem_seal.obj $(OBJ_D)\pem_info.obj \
+       $(OBJ_D)\pem_lib.obj $(OBJ_D)\pem_all.obj $(OBJ_D)\pem_err.obj \
+       $(OBJ_D)\x509_def.obj $(OBJ_D)\x509_d2.obj $(OBJ_D)\x509_r2x.obj \
+       $(OBJ_D)\x509_cmp.obj $(OBJ_D)\x509_obj.obj $(OBJ_D)\x509_req.obj \
+       $(OBJ_D)\x509spki.obj $(OBJ_D)\x509_vfy.obj $(OBJ_D)\x509_set.obj \
+       $(OBJ_D)\x509rset.obj $(OBJ_D)\x509_err.obj $(OBJ_D)\x509name.obj \
+       $(OBJ_D)\x509_v3.obj $(OBJ_D)\x509_ext.obj $(OBJ_D)\x509_att.obj \
+       $(OBJ_D)\x509type.obj $(OBJ_D)\x509_lu.obj $(OBJ_D)\x_all.obj \
+       $(OBJ_D)\x509_txt.obj $(OBJ_D)\x509_trs.obj $(OBJ_D)\by_file.obj \
+       $(OBJ_D)\by_dir.obj $(OBJ_D)\v3_bcons.obj $(OBJ_D)\v3_bitst.obj \
+       $(OBJ_D)\v3_conf.obj $(OBJ_D)\v3_extku.obj $(OBJ_D)\v3_ia5.obj \
+       $(OBJ_D)\v3_lib.obj $(OBJ_D)\v3_prn.obj $(OBJ_D)\v3_utl.obj \
+       $(OBJ_D)\v3err.obj $(OBJ_D)\v3_genn.obj $(OBJ_D)\v3_alt.obj \
+       $(OBJ_D)\v3_skey.obj $(OBJ_D)\v3_akey.obj $(OBJ_D)\v3_pku.obj \
+       $(OBJ_D)\v3_int.obj $(OBJ_D)\v3_enum.obj $(OBJ_D)\v3_sxnet.obj \
+       $(OBJ_D)\v3_cpols.obj $(OBJ_D)\v3_crld.obj $(OBJ_D)\v3_purp.obj \
+       $(OBJ_D)\v3_info.obj $(OBJ_D)\conf.obj $(OBJ_D)\conf_err.obj \
+       $(OBJ_D)\txt_db.obj $(OBJ_D)\pk7_lib.obj $(OBJ_D)\pkcs7err.obj \
+       $(OBJ_D)\pk7_doit.obj $(OBJ_D)\pk7_smime.obj $(OBJ_D)\pk7_attr.obj \
+       $(OBJ_D)\pk7_mime.obj $(OBJ_D)\p12_add.obj $(OBJ_D)\p12_attr.obj \
+       $(OBJ_D)\p12_bags.obj $(OBJ_D)\p12_crpt.obj $(OBJ_D)\p12_crt.obj \
+       $(OBJ_D)\p12_decr.obj $(OBJ_D)\p12_init.obj $(OBJ_D)\p12_key.obj \
+       $(OBJ_D)\p12_kiss.obj $(OBJ_D)\p12_lib.obj $(OBJ_D)\p12_mac.obj \
+       $(OBJ_D)\p12_mutl.obj $(OBJ_D)\p12_sbag.obj $(OBJ_D)\p12_utl.obj \
+       $(OBJ_D)\p12_npas.obj $(OBJ_D)\pk12err.obj $(OBJ_D)\comp_lib.obj \
+       $(OBJ_D)\c_rle.obj $(OBJ_D)\c_zlib.obj
+
+SSLOBJ=$(OBJ_D)\s2_meth.obj \
+       $(OBJ_D)\s2_srvr.obj $(OBJ_D)\s2_clnt.obj $(OBJ_D)\s2_lib.obj \
+       $(OBJ_D)\s2_enc.obj $(OBJ_D)\s2_pkt.obj $(OBJ_D)\s3_meth.obj \
+       $(OBJ_D)\s3_srvr.obj $(OBJ_D)\s3_clnt.obj $(OBJ_D)\s3_lib.obj \
+       $(OBJ_D)\s3_enc.obj $(OBJ_D)\s3_pkt.obj $(OBJ_D)\s3_both.obj \
+       $(OBJ_D)\s23_meth.obj $(OBJ_D)\s23_srvr.obj $(OBJ_D)\s23_clnt.obj \
+       $(OBJ_D)\s23_lib.obj $(OBJ_D)\s23_pkt.obj $(OBJ_D)\t1_meth.obj \
+       $(OBJ_D)\t1_srvr.obj $(OBJ_D)\t1_clnt.obj $(OBJ_D)\t1_lib.obj \
+       $(OBJ_D)\t1_enc.obj $(OBJ_D)\ssl_lib.obj $(OBJ_D)\ssl_err2.obj \
+       $(OBJ_D)\ssl_cert.obj $(OBJ_D)\ssl_sess.obj $(OBJ_D)\ssl_ciph.obj \
+       $(OBJ_D)\ssl_stat.obj $(OBJ_D)\ssl_rsa.obj $(OBJ_D)\ssl_asn1.obj \
+       $(OBJ_D)\ssl_txt.obj $(OBJ_D)\ssl_algs.obj $(OBJ_D)\bio_ssl.obj \
+       $(OBJ_D)\ssl_err.obj
+
+RSAGLUEOBJ=$(OBJ_D)\rsaref.obj \
+       $(OBJ_D)\rsar_err.obj
+
+T_EXE=$(TEST_D)\md2test.exe \
+       $(TEST_D)\md5test.exe $(TEST_D)\shatest.exe $(TEST_D)\sha1test.exe \
+       $(TEST_D)\mdc2test.exe $(TEST_D)\hmactest.exe $(TEST_D)\rmdtest.exe \
+       $(TEST_D)\destest.exe $(TEST_D)\rc2test.exe $(TEST_D)\rc4test.exe \
+       $(TEST_D)\rc5test.exe $(TEST_D)\ideatest.exe $(TEST_D)\bftest.exe \
+       $(TEST_D)\casttest.exe $(TEST_D)\bntest.exe $(TEST_D)\exptest.exe \
+       $(TEST_D)\rsa_test.exe $(TEST_D)\dsatest.exe $(TEST_D)\dhtest.exe \
+       $(TEST_D)\randtest.exe $(TEST_D)\ssltest.exe
+
+###################################################################
+all: banner $(TMP_D) $(BIN_D) $(TEST_D) $(LIB_D) $(INCO_D) headers lib exe
+
+banner:
+
+
+$(TMP_D):
+       $(MKDIR) $(TMP_D)
+# NB: uncomment out these lines if BIN_D, TEST_D and LIB_D are different
+#$(BIN_D):
+#      $(MKDIR) $(BIN_D)
+#
+#$(TEST_D):
+#      $(MKDIR) $(TEST_D)
+
+$(LIB_D):
+       $(MKDIR) $(LIB_D)
+
+$(INCO_D): $(INC_D)
+       $(MKDIR) $(INCO_D)
+
+$(INC_D):
+       $(MKDIR) $(INC_D)
+
+headers: $(HEADER) $(EXHEADER)
+
+lib: $(LIBS_DEP)
+
+exe: $(T_EXE) $(BIN_D)\$(E_EXE).exe
+
+install:
+       $(MKDIR) $(INSTALLTOP)
+       $(MKDIR) $(INSTALLTOP)\bin
+       $(MKDIR) $(INSTALLTOP)\include
+       $(MKDIR) $(INSTALLTOP)\include\openssl
+       $(MKDIR) $(INSTALLTOP)\lib
+       $(CP) $(INCO_D)\*.[ch] $(INSTALLTOP)\include\openssl
+       $(CP) $(BIN_D)\$(E_EXE).exe $(INSTALLTOP)\bin
+       $(CP) $(O_SSL) $(INSTALLTOP)\lib
+       $(CP) $(O_CRYPTO) $(INSTALLTOP)\lib
+
+clean:
+       $(RM) $(TMP_D)\*.*
+
+vclean:
+       $(RM) $(TMP_D)\*.*
+       $(RM) $(OUT_D)\*.*
+
+$(INCL_D)\cryptlib.h: $(SRC_D)\crypto\cryptlib.h
+       $(CP) $(SRC_D)\crypto\cryptlib.h $(INCL_D)\cryptlib.h
+
+$(INCL_D)\buildinf.h: $(SRC_D)\crypto\buildinf.h
+       $(CP) $(SRC_D)\crypto\buildinf.h $(INCL_D)\buildinf.h
+
+$(INCL_D)\md5_locl.h: $(SRC_D)\crypto\md5\md5_locl.h
+       $(CP) $(SRC_D)\crypto\md5\md5_locl.h $(INCL_D)\md5_locl.h
+
+$(INCL_D)\sha_locl.h: $(SRC_D)\crypto\sha\sha_locl.h
+       $(CP) $(SRC_D)\crypto\sha\sha_locl.h $(INCL_D)\sha_locl.h
+
+$(INCL_D)\rmd_locl.h: $(SRC_D)\crypto\ripemd\rmd_locl.h
+       $(CP) $(SRC_D)\crypto\ripemd\rmd_locl.h $(INCL_D)\rmd_locl.h
+
+$(INCL_D)\rmdconst.h: $(SRC_D)\crypto\ripemd\rmdconst.h
+       $(CP) $(SRC_D)\crypto\ripemd\rmdconst.h $(INCL_D)\rmdconst.h
+
+$(INCL_D)\des_locl.h: $(SRC_D)\crypto\des\des_locl.h
+       $(CP) $(SRC_D)\crypto\des\des_locl.h $(INCL_D)\des_locl.h
+
+$(INCL_D)\rpc_des.h: $(SRC_D)\crypto\des\rpc_des.h
+       $(CP) $(SRC_D)\crypto\des\rpc_des.h $(INCL_D)\rpc_des.h
+
+$(INCL_D)\podd.h: $(SRC_D)\crypto\des\podd.h
+       $(CP) $(SRC_D)\crypto\des\podd.h $(INCL_D)\podd.h
+
+$(INCL_D)\sk.h: $(SRC_D)\crypto\des\sk.h
+       $(CP) $(SRC_D)\crypto\des\sk.h $(INCL_D)\sk.h
+
+$(INCL_D)\spr.h: $(SRC_D)\crypto\des\spr.h
+       $(CP) $(SRC_D)\crypto\des\spr.h $(INCL_D)\spr.h
+
+$(INCL_D)\des_ver.h: $(SRC_D)\crypto\des\des_ver.h
+       $(CP) $(SRC_D)\crypto\des\des_ver.h $(INCL_D)\des_ver.h
+
+$(INCL_D)\rc2_locl.h: $(SRC_D)\crypto\rc2\rc2_locl.h
+       $(CP) $(SRC_D)\crypto\rc2\rc2_locl.h $(INCL_D)\rc2_locl.h
+
+$(INCL_D)\rc4_locl.h: $(SRC_D)\crypto\rc4\rc4_locl.h
+       $(CP) $(SRC_D)\crypto\rc4\rc4_locl.h $(INCL_D)\rc4_locl.h
+
+$(INCL_D)\rc5_locl.h: $(SRC_D)\crypto\rc5\rc5_locl.h
+       $(CP) $(SRC_D)\crypto\rc5\rc5_locl.h $(INCL_D)\rc5_locl.h
+
+$(INCL_D)\idea_lcl.h: $(SRC_D)\crypto\idea\idea_lcl.h
+       $(CP) $(SRC_D)\crypto\idea\idea_lcl.h $(INCL_D)\idea_lcl.h
+
+$(INCL_D)\bf_pi.h: $(SRC_D)\crypto\bf\bf_pi.h
+       $(CP) $(SRC_D)\crypto\bf\bf_pi.h $(INCL_D)\bf_pi.h
+
+$(INCL_D)\bf_locl.h: $(SRC_D)\crypto\bf\bf_locl.h
+       $(CP) $(SRC_D)\crypto\bf\bf_locl.h $(INCL_D)\bf_locl.h
+
+$(INCL_D)\cast_s.h: $(SRC_D)\crypto\cast\cast_s.h
+       $(CP) $(SRC_D)\crypto\cast\cast_s.h $(INCL_D)\cast_s.h
+
+$(INCL_D)\cast_lcl.h: $(SRC_D)\crypto\cast\cast_lcl.h
+       $(CP) $(SRC_D)\crypto\cast\cast_lcl.h $(INCL_D)\cast_lcl.h
+
+$(INCL_D)\bn_lcl.h: $(SRC_D)\crypto\bn\bn_lcl.h
+       $(CP) $(SRC_D)\crypto\bn\bn_lcl.h $(INCL_D)\bn_lcl.h
+
+$(INCL_D)\bn_prime.h: $(SRC_D)\crypto\bn\bn_prime.h
+       $(CP) $(SRC_D)\crypto\bn\bn_prime.h $(INCL_D)\bn_prime.h
+
+$(INCL_D)\bss_file.c: $(SRC_D)\crypto\bio\bss_file.c
+       $(CP) $(SRC_D)\crypto\bio\bss_file.c $(INCL_D)\bss_file.c
+
+$(INCL_D)\obj_dat.h: $(SRC_D)\crypto\objects\obj_dat.h
+       $(CP) $(SRC_D)\crypto\objects\obj_dat.h $(INCL_D)\obj_dat.h
+
+$(INCL_D)\conf_lcl.h: $(SRC_D)\crypto\conf\conf_lcl.h
+       $(CP) $(SRC_D)\crypto\conf\conf_lcl.h $(INCL_D)\conf_lcl.h
+
+$(INCL_D)\ssl_locl.h: $(SRC_D)\ssl\ssl_locl.h
+       $(CP) $(SRC_D)\ssl\ssl_locl.h $(INCL_D)\ssl_locl.h
+
+$(INCL_D)\apps.h: $(SRC_D)\apps\apps.h
+       $(CP) $(SRC_D)\apps\apps.h $(INCL_D)\apps.h
+
+$(INCL_D)\progs.h: $(SRC_D)\apps\progs.h
+       $(CP) $(SRC_D)\apps\progs.h $(INCL_D)\progs.h
+
+$(INCL_D)\s_apps.h: $(SRC_D)\apps\s_apps.h
+       $(CP) $(SRC_D)\apps\s_apps.h $(INCL_D)\s_apps.h
+
+$(INCL_D)\testdsa.h: $(SRC_D)\apps\testdsa.h
+       $(CP) $(SRC_D)\apps\testdsa.h $(INCL_D)\testdsa.h
+
+$(INCL_D)\testrsa.h: $(SRC_D)\apps\testrsa.h
+       $(CP) $(SRC_D)\apps\testrsa.h $(INCL_D)\testrsa.h
+
+$(INCO_D)\e_os.h: $(SRC_D)\.\e_os.h
+       $(CP) $(SRC_D)\.\e_os.h $(INCO_D)\e_os.h
+
+$(INCO_D)\e_os2.h: $(SRC_D)\.\e_os2.h
+       $(CP) $(SRC_D)\.\e_os2.h $(INCO_D)\e_os2.h
+
+$(INCO_D)\crypto.h: $(SRC_D)\crypto\crypto.h
+       $(CP) $(SRC_D)\crypto\crypto.h $(INCO_D)\crypto.h
+
+$(INCO_D)\tmdiff.h: $(SRC_D)\crypto\tmdiff.h
+       $(CP) $(SRC_D)\crypto\tmdiff.h $(INCO_D)\tmdiff.h
+
+$(INCO_D)\opensslv.h: $(SRC_D)\crypto\opensslv.h
+       $(CP) $(SRC_D)\crypto\opensslv.h $(INCO_D)\opensslv.h
+
+$(INCO_D)\opensslconf.h: $(SRC_D)\crypto\opensslconf.h
+       $(CP) $(SRC_D)\crypto\opensslconf.h $(INCO_D)\opensslconf.h
+
+$(INCO_D)\ebcdic.h: $(SRC_D)\crypto\ebcdic.h
+       $(CP) $(SRC_D)\crypto\ebcdic.h $(INCO_D)\ebcdic.h
+
+$(INCO_D)\md2.h: $(SRC_D)\crypto\md2\md2.h
+       $(CP) $(SRC_D)\crypto\md2\md2.h $(INCO_D)\md2.h
+
+$(INCO_D)\md5.h: $(SRC_D)\crypto\md5\md5.h
+       $(CP) $(SRC_D)\crypto\md5\md5.h $(INCO_D)\md5.h
+
+$(INCO_D)\sha.h: $(SRC_D)\crypto\sha\sha.h
+       $(CP) $(SRC_D)\crypto\sha\sha.h $(INCO_D)\sha.h
+
+$(INCO_D)\mdc2.h: $(SRC_D)\crypto\mdc2\mdc2.h
+       $(CP) $(SRC_D)\crypto\mdc2\mdc2.h $(INCO_D)\mdc2.h
+
+$(INCO_D)\hmac.h: $(SRC_D)\crypto\hmac\hmac.h
+       $(CP) $(SRC_D)\crypto\hmac\hmac.h $(INCO_D)\hmac.h
+
+$(INCO_D)\ripemd.h: $(SRC_D)\crypto\ripemd\ripemd.h
+       $(CP) $(SRC_D)\crypto\ripemd\ripemd.h $(INCO_D)\ripemd.h
+
+$(INCO_D)\des.h: $(SRC_D)\crypto\des\des.h
+       $(CP) $(SRC_D)\crypto\des\des.h $(INCO_D)\des.h
+
+$(INCO_D)\rc2.h: $(SRC_D)\crypto\rc2\rc2.h
+       $(CP) $(SRC_D)\crypto\rc2\rc2.h $(INCO_D)\rc2.h
+
+$(INCO_D)\rc4.h: $(SRC_D)\crypto\rc4\rc4.h
+       $(CP) $(SRC_D)\crypto\rc4\rc4.h $(INCO_D)\rc4.h
+
+$(INCO_D)\rc5.h: $(SRC_D)\crypto\rc5\rc5.h
+       $(CP) $(SRC_D)\crypto\rc5\rc5.h $(INCO_D)\rc5.h
+
+$(INCO_D)\idea.h: $(SRC_D)\crypto\idea\idea.h
+       $(CP) $(SRC_D)\crypto\idea\idea.h $(INCO_D)\idea.h
+
+$(INCO_D)\blowfish.h: $(SRC_D)\crypto\bf\blowfish.h
+       $(CP) $(SRC_D)\crypto\bf\blowfish.h $(INCO_D)\blowfish.h
+
+$(INCO_D)\cast.h: $(SRC_D)\crypto\cast\cast.h
+       $(CP) $(SRC_D)\crypto\cast\cast.h $(INCO_D)\cast.h
+
+$(INCO_D)\bn.h: $(SRC_D)\crypto\bn\bn.h
+       $(CP) $(SRC_D)\crypto\bn\bn.h $(INCO_D)\bn.h
+
+$(INCO_D)\rsa.h: $(SRC_D)\crypto\rsa\rsa.h
+       $(CP) $(SRC_D)\crypto\rsa\rsa.h $(INCO_D)\rsa.h
+
+$(INCO_D)\dsa.h: $(SRC_D)\crypto\dsa\dsa.h
+       $(CP) $(SRC_D)\crypto\dsa\dsa.h $(INCO_D)\dsa.h
+
+$(INCO_D)\dh.h: $(SRC_D)\crypto\dh\dh.h
+       $(CP) $(SRC_D)\crypto\dh\dh.h $(INCO_D)\dh.h
+
+$(INCO_D)\buffer.h: $(SRC_D)\crypto\buffer\buffer.h
+       $(CP) $(SRC_D)\crypto\buffer\buffer.h $(INCO_D)\buffer.h
+
+$(INCO_D)\bio.h: $(SRC_D)\crypto\bio\bio.h
+       $(CP) $(SRC_D)\crypto\bio\bio.h $(INCO_D)\bio.h
+
+$(INCO_D)\stack.h: $(SRC_D)\crypto\stack\stack.h
+       $(CP) $(SRC_D)\crypto\stack\stack.h $(INCO_D)\stack.h
+
+$(INCO_D)\safestack.h: $(SRC_D)\crypto\stack\safestack.h
+       $(CP) $(SRC_D)\crypto\stack\safestack.h $(INCO_D)\safestack.h
+
+$(INCO_D)\lhash.h: $(SRC_D)\crypto\lhash\lhash.h
+       $(CP) $(SRC_D)\crypto\lhash\lhash.h $(INCO_D)\lhash.h
+
+$(INCO_D)\rand.h: $(SRC_D)\crypto\rand\rand.h
+       $(CP) $(SRC_D)\crypto\rand\rand.h $(INCO_D)\rand.h
+
+$(INCO_D)\err.h: $(SRC_D)\crypto\err\err.h
+       $(CP) $(SRC_D)\crypto\err\err.h $(INCO_D)\err.h
+
+$(INCO_D)\objects.h: $(SRC_D)\crypto\objects\objects.h
+       $(CP) $(SRC_D)\crypto\objects\objects.h $(INCO_D)\objects.h
+
+$(INCO_D)\evp.h: $(SRC_D)\crypto\evp\evp.h
+       $(CP) $(SRC_D)\crypto\evp\evp.h $(INCO_D)\evp.h
+
+$(INCO_D)\asn1.h: $(SRC_D)\crypto\asn1\asn1.h
+       $(CP) $(SRC_D)\crypto\asn1\asn1.h $(INCO_D)\asn1.h
+
+$(INCO_D)\asn1_mac.h: $(SRC_D)\crypto\asn1\asn1_mac.h
+       $(CP) $(SRC_D)\crypto\asn1\asn1_mac.h $(INCO_D)\asn1_mac.h
+
+$(INCO_D)\pem.h: $(SRC_D)\crypto\pem\pem.h
+       $(CP) $(SRC_D)\crypto\pem\pem.h $(INCO_D)\pem.h
+
+$(INCO_D)\pem2.h: $(SRC_D)\crypto\pem\pem2.h
+       $(CP) $(SRC_D)\crypto\pem\pem2.h $(INCO_D)\pem2.h
+
+$(INCO_D)\x509.h: $(SRC_D)\crypto\x509\x509.h
+       $(CP) $(SRC_D)\crypto\x509\x509.h $(INCO_D)\x509.h
+
+$(INCO_D)\x509_vfy.h: $(SRC_D)\crypto\x509\x509_vfy.h
+       $(CP) $(SRC_D)\crypto\x509\x509_vfy.h $(INCO_D)\x509_vfy.h
+
+$(INCO_D)\x509v3.h: $(SRC_D)\crypto\x509v3\x509v3.h
+       $(CP) $(SRC_D)\crypto\x509v3\x509v3.h $(INCO_D)\x509v3.h
+
+$(INCO_D)\conf.h: $(SRC_D)\crypto\conf\conf.h
+       $(CP) $(SRC_D)\crypto\conf\conf.h $(INCO_D)\conf.h
+
+$(INCO_D)\txt_db.h: $(SRC_D)\crypto\txt_db\txt_db.h
+       $(CP) $(SRC_D)\crypto\txt_db\txt_db.h $(INCO_D)\txt_db.h
+
+$(INCO_D)\pkcs7.h: $(SRC_D)\crypto\pkcs7\pkcs7.h
+       $(CP) $(SRC_D)\crypto\pkcs7\pkcs7.h $(INCO_D)\pkcs7.h
+
+$(INCO_D)\pkcs12.h: $(SRC_D)\crypto\pkcs12\pkcs12.h
+       $(CP) $(SRC_D)\crypto\pkcs12\pkcs12.h $(INCO_D)\pkcs12.h
+
+$(INCO_D)\comp.h: $(SRC_D)\crypto\comp\comp.h
+       $(CP) $(SRC_D)\crypto\comp\comp.h $(INCO_D)\comp.h
+
+$(INCO_D)\ssl.h: $(SRC_D)\ssl\ssl.h
+       $(CP) $(SRC_D)\ssl\ssl.h $(INCO_D)\ssl.h
+
+$(INCO_D)\ssl2.h: $(SRC_D)\ssl\ssl2.h
+       $(CP) $(SRC_D)\ssl\ssl2.h $(INCO_D)\ssl2.h
+
+$(INCO_D)\ssl3.h: $(SRC_D)\ssl\ssl3.h
+       $(CP) $(SRC_D)\ssl\ssl3.h $(INCO_D)\ssl3.h
+
+$(INCO_D)\ssl23.h: $(SRC_D)\ssl\ssl23.h
+       $(CP) $(SRC_D)\ssl\ssl23.h $(INCO_D)\ssl23.h
+
+$(INCO_D)\tls1.h: $(SRC_D)\ssl\tls1.h
+       $(CP) $(SRC_D)\ssl\tls1.h $(INCO_D)\tls1.h
+
+$(INCO_D)\rsaref.h: $(SRC_D)\rsaref\rsaref.h
+       $(CP) $(SRC_D)\rsaref\rsaref.h $(INCO_D)\rsaref.h
+
+$(OBJ_D)\md2test.obj: $(SRC_D)\crypto\md2\md2test.c
+       $(CC) /Fo$(OBJ_D)\md2test.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\md2\md2test.c
+
+$(OBJ_D)\md5test.obj: $(SRC_D)\crypto\md5\md5test.c
+       $(CC) /Fo$(OBJ_D)\md5test.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\md5\md5test.c
+
+$(OBJ_D)\shatest.obj: $(SRC_D)\crypto\sha\shatest.c
+       $(CC) /Fo$(OBJ_D)\shatest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\sha\shatest.c
+
+$(OBJ_D)\sha1test.obj: $(SRC_D)\crypto\sha\sha1test.c
+       $(CC) /Fo$(OBJ_D)\sha1test.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\sha\sha1test.c
+
+$(OBJ_D)\mdc2test.obj: $(SRC_D)\crypto\mdc2\mdc2test.c
+       $(CC) /Fo$(OBJ_D)\mdc2test.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\mdc2\mdc2test.c
+
+$(OBJ_D)\hmactest.obj: $(SRC_D)\crypto\hmac\hmactest.c
+       $(CC) /Fo$(OBJ_D)\hmactest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\hmac\hmactest.c
+
+$(OBJ_D)\rmdtest.obj: $(SRC_D)\crypto\ripemd\rmdtest.c
+       $(CC) /Fo$(OBJ_D)\rmdtest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\ripemd\rmdtest.c
+
+$(OBJ_D)\destest.obj: $(SRC_D)\crypto\des\destest.c
+       $(CC) /Fo$(OBJ_D)\destest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\des\destest.c
+
+$(OBJ_D)\rc2test.obj: $(SRC_D)\crypto\rc2\rc2test.c
+       $(CC) /Fo$(OBJ_D)\rc2test.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\rc2\rc2test.c
+
+$(OBJ_D)\rc4test.obj: $(SRC_D)\crypto\rc4\rc4test.c
+       $(CC) /Fo$(OBJ_D)\rc4test.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\rc4\rc4test.c
+
+$(OBJ_D)\rc5test.obj: $(SRC_D)\crypto\rc5\rc5test.c
+       $(CC) /Fo$(OBJ_D)\rc5test.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\rc5\rc5test.c
+
+$(OBJ_D)\ideatest.obj: $(SRC_D)\crypto\idea\ideatest.c
+       $(CC) /Fo$(OBJ_D)\ideatest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\idea\ideatest.c
+
+$(OBJ_D)\bftest.obj: $(SRC_D)\crypto\bf\bftest.c
+       $(CC) /Fo$(OBJ_D)\bftest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\bf\bftest.c
+
+$(OBJ_D)\casttest.obj: $(SRC_D)\crypto\cast\casttest.c
+       $(CC) /Fo$(OBJ_D)\casttest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\cast\casttest.c
+
+$(OBJ_D)\bntest.obj: $(SRC_D)\crypto\bn\bntest.c
+       $(CC) /Fo$(OBJ_D)\bntest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\bn\bntest.c
+
+$(OBJ_D)\exptest.obj: $(SRC_D)\crypto\bn\exptest.c
+       $(CC) /Fo$(OBJ_D)\exptest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\bn\exptest.c
+
+$(OBJ_D)\rsa_test.obj: $(SRC_D)\crypto\rsa\rsa_test.c
+       $(CC) /Fo$(OBJ_D)\rsa_test.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\rsa\rsa_test.c
+
+$(OBJ_D)\dsatest.obj: $(SRC_D)\crypto\dsa\dsatest.c
+       $(CC) /Fo$(OBJ_D)\dsatest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\dsa\dsatest.c
+
+$(OBJ_D)\dhtest.obj: $(SRC_D)\crypto\dh\dhtest.c
+       $(CC) /Fo$(OBJ_D)\dhtest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\dh\dhtest.c
+
+$(OBJ_D)\randtest.obj: $(SRC_D)\crypto\rand\randtest.c
+       $(CC) /Fo$(OBJ_D)\randtest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\rand\randtest.c
+
+$(OBJ_D)\ssltest.obj: $(SRC_D)\ssl\ssltest.c
+       $(CC) /Fo$(OBJ_D)\ssltest.obj $(APP_CFLAGS) -c $(SRC_D)\ssl\ssltest.c
+
+$(OBJ_D)\verify.obj: $(SRC_D)\apps\verify.c
+       $(CC) /Fo$(OBJ_D)\verify.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\verify.c
+
+$(OBJ_D)\asn1pars.obj: $(SRC_D)\apps\asn1pars.c
+       $(CC) /Fo$(OBJ_D)\asn1pars.obj -DMONOLITH $(APP_CFLAGS) -c 
+$(SRC_D)\apps\asn1pars.c
+
+$(OBJ_D)\req.obj: $(SRC_D)\apps\req.c
+       $(CC) /Fo$(OBJ_D)\req.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\req.c
+
+$(OBJ_D)\dgst.obj: $(SRC_D)\apps\dgst.c
+       $(CC) /Fo$(OBJ_D)\dgst.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\dgst.c
+
+$(OBJ_D)\dh.obj: $(SRC_D)\apps\dh.c
+       $(CC) /Fo$(OBJ_D)\dh.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\dh.c
+
+$(OBJ_D)\dhparam.obj: $(SRC_D)\apps\dhparam.c
+       $(CC) /Fo$(OBJ_D)\dhparam.obj -DMONOLITH $(APP_CFLAGS) -c 
+$(SRC_D)\apps\dhparam.c
+
+$(OBJ_D)\enc.obj: $(SRC_D)\apps\enc.c
+       $(CC) /Fo$(OBJ_D)\enc.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\enc.c
+
+$(OBJ_D)\passwd.obj: $(SRC_D)\apps\passwd.c
+       $(CC) /Fo$(OBJ_D)\passwd.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\passwd.c
+
+$(OBJ_D)\gendh.obj: $(SRC_D)\apps\gendh.c
+       $(CC) /Fo$(OBJ_D)\gendh.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\gendh.c
+
+$(OBJ_D)\errstr.obj: $(SRC_D)\apps\errstr.c
+       $(CC) /Fo$(OBJ_D)\errstr.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\errstr.c
+
+$(OBJ_D)\ca.obj: $(SRC_D)\apps\ca.c
+       $(CC) /Fo$(OBJ_D)\ca.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\ca.c
+
+$(OBJ_D)\pkcs7.obj: $(SRC_D)\apps\pkcs7.c
+       $(CC) /Fo$(OBJ_D)\pkcs7.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\pkcs7.c
+
+$(OBJ_D)\crl2p7.obj: $(SRC_D)\apps\crl2p7.c
+       $(CC) /Fo$(OBJ_D)\crl2p7.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\crl2p7.c
+
+$(OBJ_D)\crl.obj: $(SRC_D)\apps\crl.c
+       $(CC) /Fo$(OBJ_D)\crl.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\crl.c
+
+$(OBJ_D)\rsa.obj: $(SRC_D)\apps\rsa.c
+       $(CC) /Fo$(OBJ_D)\rsa.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\rsa.c
+
+$(OBJ_D)\dsa.obj: $(SRC_D)\apps\dsa.c
+       $(CC) /Fo$(OBJ_D)\dsa.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\dsa.c
+
+$(OBJ_D)\dsaparam.obj: $(SRC_D)\apps\dsaparam.c
+       $(CC) /Fo$(OBJ_D)\dsaparam.obj -DMONOLITH $(APP_CFLAGS) -c 
+$(SRC_D)\apps\dsaparam.c
+
+$(OBJ_D)\x509.obj: $(SRC_D)\apps\x509.c
+       $(CC) /Fo$(OBJ_D)\x509.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\x509.c
+
+$(OBJ_D)\genrsa.obj: $(SRC_D)\apps\genrsa.c
+       $(CC) /Fo$(OBJ_D)\genrsa.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\genrsa.c
+
+$(OBJ_D)\gendsa.obj: $(SRC_D)\apps\gendsa.c
+       $(CC) /Fo$(OBJ_D)\gendsa.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\gendsa.c
+
+$(OBJ_D)\s_server.obj: $(SRC_D)\apps\s_server.c
+       $(CC) /Fo$(OBJ_D)\s_server.obj -DMONOLITH $(APP_CFLAGS) -c 
+$(SRC_D)\apps\s_server.c
+
+$(OBJ_D)\s_client.obj: $(SRC_D)\apps\s_client.c
+       $(CC) /Fo$(OBJ_D)\s_client.obj -DMONOLITH $(APP_CFLAGS) -c 
+$(SRC_D)\apps\s_client.c
+
+$(OBJ_D)\speed.obj: $(SRC_D)\apps\speed.c
+       $(CC) /Fo$(OBJ_D)\speed.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\speed.c
+
+$(OBJ_D)\s_time.obj: $(SRC_D)\apps\s_time.c
+       $(CC) /Fo$(OBJ_D)\s_time.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\s_time.c
+
+$(OBJ_D)\apps.obj: $(SRC_D)\apps\apps.c
+       $(CC) /Fo$(OBJ_D)\apps.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\apps.c
+
+$(OBJ_D)\s_cb.obj: $(SRC_D)\apps\s_cb.c
+       $(CC) /Fo$(OBJ_D)\s_cb.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\s_cb.c
+
+$(OBJ_D)\s_socket.obj: $(SRC_D)\apps\s_socket.c
+       $(CC) /Fo$(OBJ_D)\s_socket.obj -DMONOLITH $(APP_CFLAGS) -c 
+$(SRC_D)\apps\s_socket.c
+
+$(OBJ_D)\app_rand.obj: $(SRC_D)\apps\app_rand.c
+       $(CC) /Fo$(OBJ_D)\app_rand.obj -DMONOLITH $(APP_CFLAGS) -c 
+$(SRC_D)\apps\app_rand.c
+
+$(OBJ_D)\version.obj: $(SRC_D)\apps\version.c
+       $(CC) /Fo$(OBJ_D)\version.obj -DMONOLITH $(APP_CFLAGS) -c 
+$(SRC_D)\apps\version.c
+
+$(OBJ_D)\sess_id.obj: $(SRC_D)\apps\sess_id.c
+       $(CC) /Fo$(OBJ_D)\sess_id.obj -DMONOLITH $(APP_CFLAGS) -c 
+$(SRC_D)\apps\sess_id.c
+
+$(OBJ_D)\ciphers.obj: $(SRC_D)\apps\ciphers.c
+       $(CC) /Fo$(OBJ_D)\ciphers.obj -DMONOLITH $(APP_CFLAGS) -c 
+$(SRC_D)\apps\ciphers.c
+
+$(OBJ_D)\nseq.obj: $(SRC_D)\apps\nseq.c
+       $(CC) /Fo$(OBJ_D)\nseq.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\nseq.c
+
+$(OBJ_D)\pkcs12.obj: $(SRC_D)\apps\pkcs12.c
+       $(CC) /Fo$(OBJ_D)\pkcs12.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\pkcs12.c
+
+$(OBJ_D)\pkcs8.obj: $(SRC_D)\apps\pkcs8.c
+       $(CC) /Fo$(OBJ_D)\pkcs8.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\pkcs8.c
+
+$(OBJ_D)\spkac.obj: $(SRC_D)\apps\spkac.c
+       $(CC) /Fo$(OBJ_D)\spkac.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\spkac.c
+
+$(OBJ_D)\smime.obj: $(SRC_D)\apps\smime.c
+       $(CC) /Fo$(OBJ_D)\smime.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\smime.c
+
+$(OBJ_D)\openssl.obj: $(SRC_D)\apps\openssl.c
+       $(CC) /Fo$(OBJ_D)\openssl.obj -DMONOLITH $(APP_CFLAGS) -c 
+$(SRC_D)\apps\openssl.c
+
+$(OBJ_D)\cryptlib.obj: $(SRC_D)\crypto\cryptlib.c
+       $(CC) /Fo$(OBJ_D)\cryptlib.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\cryptlib.c
+
+$(OBJ_D)\mem.obj: $(SRC_D)\crypto\mem.c
+       $(CC) /Fo$(OBJ_D)\mem.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\mem.c
+
+$(OBJ_D)\mem_dbg.obj: $(SRC_D)\crypto\mem_dbg.c
+       $(CC) /Fo$(OBJ_D)\mem_dbg.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\mem_dbg.c
+
+$(OBJ_D)\cversion.obj: $(SRC_D)\crypto\cversion.c
+       $(CC) /Fo$(OBJ_D)\cversion.obj  $(LIB_CFLAGS) -DMK1MF_BUILD 
+-DMK1MF_PLATFORM_VC_WIN32 -c $(SRC_D)\crypto\cversion.c
+
+$(OBJ_D)\ex_data.obj: $(SRC_D)\crypto\ex_data.c
+       $(CC) /Fo$(OBJ_D)\ex_data.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\ex_data.c
+
+$(OBJ_D)\tmdiff.obj: $(SRC_D)\crypto\tmdiff.c
+       $(CC) /Fo$(OBJ_D)\tmdiff.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\tmdiff.c
+
+$(OBJ_D)\cpt_err.obj: $(SRC_D)\crypto\cpt_err.c
+       $(CC) /Fo$(OBJ_D)\cpt_err.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\cpt_err.c
+
+$(OBJ_D)\ebcdic.obj: $(SRC_D)\crypto\ebcdic.c
+       $(CC) /Fo$(OBJ_D)\ebcdic.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\ebcdic.c
+
+$(OBJ_D)\md2_dgst.obj: $(SRC_D)\crypto\md2\md2_dgst.c
+       $(CC) /Fo$(OBJ_D)\md2_dgst.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\md2\md2_dgst.c
+
+$(OBJ_D)\md2_one.obj: $(SRC_D)\crypto\md2\md2_one.c
+       $(CC) /Fo$(OBJ_D)\md2_one.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\md2\md2_one.c
+
+$(OBJ_D)\md5_dgst.obj: $(SRC_D)\crypto\md5\md5_dgst.c
+       $(CC) /Fo$(OBJ_D)\md5_dgst.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\md5\md5_dgst.c
+
+$(OBJ_D)\md5_one.obj: $(SRC_D)\crypto\md5\md5_one.c
+       $(CC) /Fo$(OBJ_D)\md5_one.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\md5\md5_one.c
+
+$(OBJ_D)\sha_dgst.obj: $(SRC_D)\crypto\sha\sha_dgst.c
+       $(CC) /Fo$(OBJ_D)\sha_dgst.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\sha\sha_dgst.c
+
+$(OBJ_D)\sha1dgst.obj: $(SRC_D)\crypto\sha\sha1dgst.c
+       $(CC) /Fo$(OBJ_D)\sha1dgst.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\sha\sha1dgst.c
+
+$(OBJ_D)\sha_one.obj: $(SRC_D)\crypto\sha\sha_one.c
+       $(CC) /Fo$(OBJ_D)\sha_one.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\sha\sha_one.c
+
+$(OBJ_D)\sha1_one.obj: $(SRC_D)\crypto\sha\sha1_one.c
+       $(CC) /Fo$(OBJ_D)\sha1_one.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\sha\sha1_one.c
+
+$(OBJ_D)\mdc2dgst.obj: $(SRC_D)\crypto\mdc2\mdc2dgst.c
+       $(CC) /Fo$(OBJ_D)\mdc2dgst.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\mdc2\mdc2dgst.c
+
+$(OBJ_D)\mdc2_one.obj: $(SRC_D)\crypto\mdc2\mdc2_one.c
+       $(CC) /Fo$(OBJ_D)\mdc2_one.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\mdc2\mdc2_one.c
+
+$(OBJ_D)\hmac.obj: $(SRC_D)\crypto\hmac\hmac.c
+       $(CC) /Fo$(OBJ_D)\hmac.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\hmac\hmac.c
+
+$(OBJ_D)\rmd_dgst.obj: $(SRC_D)\crypto\ripemd\rmd_dgst.c
+       $(CC) /Fo$(OBJ_D)\rmd_dgst.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\ripemd\rmd_dgst.c
+
+$(OBJ_D)\rmd_one.obj: $(SRC_D)\crypto\ripemd\rmd_one.c
+       $(CC) /Fo$(OBJ_D)\rmd_one.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\ripemd\rmd_one.c
+
+$(OBJ_D)\set_key.obj: $(SRC_D)\crypto\des\set_key.c
+       $(CC) /Fo$(OBJ_D)\set_key.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\des\set_key.c
+
+$(OBJ_D)\ecb_enc.obj: $(SRC_D)\crypto\des\ecb_enc.c
+       $(CC) /Fo$(OBJ_D)\ecb_enc.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\des\ecb_enc.c
+
+$(OBJ_D)\cbc_enc.obj: $(SRC_D)\crypto\des\cbc_enc.c
+       $(CC) /Fo$(OBJ_D)\cbc_enc.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\des\cbc_enc.c
+
+$(OBJ_D)\ecb3_enc.obj: $(SRC_D)\crypto\des\ecb3_enc.c
+       $(CC) /Fo$(OBJ_D)\ecb3_enc.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\des\ecb3_enc.c
+
+$(OBJ_D)\cfb64enc.obj: $(SRC_D)\crypto\des\cfb64enc.c
+       $(CC) /Fo$(OBJ_D)\cfb64enc.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\des\cfb64enc.c
+
+$(OBJ_D)\cfb64ede.obj: $(SRC_D)\crypto\des\cfb64ede.c
+       $(CC) /Fo$(OBJ_D)\cfb64ede.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\des\cfb64ede.c
+
+$(OBJ_D)\cfb_enc.obj: $(SRC_D)\crypto\des\cfb_enc.c
+       $(CC) /Fo$(OBJ_D)\cfb_enc.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\des\cfb_enc.c
+
+$(OBJ_D)\ofb64ede.obj: $(SRC_D)\crypto\des\ofb64ede.c
+       $(CC) /Fo$(OBJ_D)\ofb64ede.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\des\ofb64ede.c
+
+$(OBJ_D)\enc_read.obj: $(SRC_D)\crypto\des\enc_read.c
+       $(CC) /Fo$(OBJ_D)\enc_read.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\des\enc_read.c
+
+$(OBJ_D)\enc_writ.obj: $(SRC_D)\crypto\des\enc_writ.c
+       $(CC) /Fo$(OBJ_D)\enc_writ.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\des\enc_writ.c
+
+$(OBJ_D)\ofb64enc.obj: $(SRC_D)\crypto\des\ofb64enc.c
+       $(CC) /Fo$(OBJ_D)\ofb64enc.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\des\ofb64enc.c
+
+$(OBJ_D)\ofb_enc.obj: $(SRC_D)\crypto\des\ofb_enc.c
+       $(CC) /Fo$(OBJ_D)\ofb_enc.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\des\ofb_enc.c
+
+$(OBJ_D)\str2key.obj: $(SRC_D)\crypto\des\str2key.c
+       $(CC) /Fo$(OBJ_D)\str2key.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\des\str2key.c
+
+$(OBJ_D)\pcbc_enc.obj: $(SRC_D)\crypto\des\pcbc_enc.c
+       $(CC) /Fo$(OBJ_D)\pcbc_enc.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\des\pcbc_enc.c
+
+$(OBJ_D)\qud_cksm.obj: $(SRC_D)\crypto\des\qud_cksm.c
+       $(CC) /Fo$(OBJ_D)\qud_cksm.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\des\qud_cksm.c
+
+$(OBJ_D)\rand_key.obj: $(SRC_D)\crypto\des\rand_key.c
+       $(CC) /Fo$(OBJ_D)\rand_key.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\des\rand_key.c
+
+$(OBJ_D)\des_enc.obj: $(SRC_D)\crypto\des\des_enc.c
+       $(CC) /Fo$(OBJ_D)\des_enc.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\des\des_enc.c
+
+$(OBJ_D)\fcrypt_b.obj: $(SRC_D)\crypto\des\fcrypt_b.c
+       $(CC) /Fo$(OBJ_D)\fcrypt_b.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\des\fcrypt_b.c
+
+$(OBJ_D)\read2pwd.obj: $(SRC_D)\crypto\des\read2pwd.c
+       $(CC) /Fo$(OBJ_D)\read2pwd.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\des\read2pwd.c
+
+$(OBJ_D)\fcrypt.obj: $(SRC_D)\crypto\des\fcrypt.c
+       $(CC) /Fo$(OBJ_D)\fcrypt.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\des\fcrypt.c
+
+$(OBJ_D)\xcbc_enc.obj: $(SRC_D)\crypto\des\xcbc_enc.c
+       $(CC) /Fo$(OBJ_D)\xcbc_enc.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\des\xcbc_enc.c
+
+$(OBJ_D)\read_pwd.obj: $(SRC_D)\crypto\des\read_pwd.c
+       $(CC) /Fo$(OBJ_D)\read_pwd.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\des\read_pwd.c
+
+$(OBJ_D)\rpc_enc.obj: $(SRC_D)\crypto\des\rpc_enc.c
+       $(CC) /Fo$(OBJ_D)\rpc_enc.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\des\rpc_enc.c
+
+$(OBJ_D)\cbc_cksm.obj: $(SRC_D)\crypto\des\cbc_cksm.c
+       $(CC) /Fo$(OBJ_D)\cbc_cksm.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\des\cbc_cksm.c
+
+$(OBJ_D)\supp.obj: $(SRC_D)\crypto\des\supp.c
+       $(CC) /Fo$(OBJ_D)\supp.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\des\supp.c
+
+$(OBJ_D)\ede_cbcm_enc.obj: $(SRC_D)\crypto\des\ede_cbcm_enc.c
+       $(CC) /Fo$(OBJ_D)\ede_cbcm_enc.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\des\ede_cbcm_enc.c
+
+$(OBJ_D)\rc2_ecb.obj: $(SRC_D)\crypto\rc2\rc2_ecb.c
+       $(CC) /Fo$(OBJ_D)\rc2_ecb.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\rc2\rc2_ecb.c
+
+$(OBJ_D)\rc2_skey.obj: $(SRC_D)\crypto\rc2\rc2_skey.c
+       $(CC) /Fo$(OBJ_D)\rc2_skey.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\rc2\rc2_skey.c
+
+$(OBJ_D)\rc2_cbc.obj: $(SRC_D)\crypto\rc2\rc2_cbc.c
+       $(CC) /Fo$(OBJ_D)\rc2_cbc.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\rc2\rc2_cbc.c
+
+$(OBJ_D)\rc2cfb64.obj: $(SRC_D)\crypto\rc2\rc2cfb64.c
+       $(CC) /Fo$(OBJ_D)\rc2cfb64.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\rc2\rc2cfb64.c
+
+$(OBJ_D)\rc2ofb64.obj: $(SRC_D)\crypto\rc2\rc2ofb64.c
+       $(CC) /Fo$(OBJ_D)\rc2ofb64.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\rc2\rc2ofb64.c
+
+$(OBJ_D)\rc4_skey.obj: $(SRC_D)\crypto\rc4\rc4_skey.c
+       $(CC) /Fo$(OBJ_D)\rc4_skey.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\rc4\rc4_skey.c
+
+$(OBJ_D)\rc4_enc.obj: $(SRC_D)\crypto\rc4\rc4_enc.c
+       $(CC) /Fo$(OBJ_D)\rc4_enc.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\rc4\rc4_enc.c
+
+$(OBJ_D)\rc5_skey.obj: $(SRC_D)\crypto\rc5\rc5_skey.c
+       $(CC) /Fo$(OBJ_D)\rc5_skey.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\rc5\rc5_skey.c
+
+$(OBJ_D)\rc5_ecb.obj: $(SRC_D)\crypto\rc5\rc5_ecb.c
+       $(CC) /Fo$(OBJ_D)\rc5_ecb.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\rc5\rc5_ecb.c
+
+$(OBJ_D)\rc5_enc.obj: $(SRC_D)\crypto\rc5\rc5_enc.c
+       $(CC) /Fo$(OBJ_D)\rc5_enc.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\rc5\rc5_enc.c
+
+$(OBJ_D)\rc5cfb64.obj: $(SRC_D)\crypto\rc5\rc5cfb64.c
+       $(CC) /Fo$(OBJ_D)\rc5cfb64.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\rc5\rc5cfb64.c
+
+$(OBJ_D)\rc5ofb64.obj: $(SRC_D)\crypto\rc5\rc5ofb64.c
+       $(CC) /Fo$(OBJ_D)\rc5ofb64.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\rc5\rc5ofb64.c
+
+$(OBJ_D)\i_cbc.obj: $(SRC_D)\crypto\idea\i_cbc.c
+       $(CC) /Fo$(OBJ_D)\i_cbc.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\idea\i_cbc.c
+
+$(OBJ_D)\i_cfb64.obj: $(SRC_D)\crypto\idea\i_cfb64.c
+       $(CC) /Fo$(OBJ_D)\i_cfb64.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\idea\i_cfb64.c
+
+$(OBJ_D)\i_ofb64.obj: $(SRC_D)\crypto\idea\i_ofb64.c
+       $(CC) /Fo$(OBJ_D)\i_ofb64.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\idea\i_ofb64.c
+
+$(OBJ_D)\i_ecb.obj: $(SRC_D)\crypto\idea\i_ecb.c
+       $(CC) /Fo$(OBJ_D)\i_ecb.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\idea\i_ecb.c
+
+$(OBJ_D)\i_skey.obj: $(SRC_D)\crypto\idea\i_skey.c
+       $(CC) /Fo$(OBJ_D)\i_skey.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\idea\i_skey.c
+
+$(OBJ_D)\bf_skey.obj: $(SRC_D)\crypto\bf\bf_skey.c
+       $(CC) /Fo$(OBJ_D)\bf_skey.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bf\bf_skey.c
+
+$(OBJ_D)\bf_ecb.obj: $(SRC_D)\crypto\bf\bf_ecb.c
+       $(CC) /Fo$(OBJ_D)\bf_ecb.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bf\bf_ecb.c
+
+$(OBJ_D)\bf_enc.obj: $(SRC_D)\crypto\bf\bf_enc.c
+       $(CC) /Fo$(OBJ_D)\bf_enc.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bf\bf_enc.c
+
+$(OBJ_D)\bf_cfb64.obj: $(SRC_D)\crypto\bf\bf_cfb64.c
+       $(CC) /Fo$(OBJ_D)\bf_cfb64.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bf\bf_cfb64.c
+
+$(OBJ_D)\bf_ofb64.obj: $(SRC_D)\crypto\bf\bf_ofb64.c
+       $(CC) /Fo$(OBJ_D)\bf_ofb64.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bf\bf_ofb64.c
+
+$(OBJ_D)\c_skey.obj: $(SRC_D)\crypto\cast\c_skey.c
+       $(CC) /Fo$(OBJ_D)\c_skey.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\cast\c_skey.c
+
+$(OBJ_D)\c_ecb.obj: $(SRC_D)\crypto\cast\c_ecb.c
+       $(CC) /Fo$(OBJ_D)\c_ecb.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\cast\c_ecb.c
+
+$(OBJ_D)\c_enc.obj: $(SRC_D)\crypto\cast\c_enc.c
+       $(CC) /Fo$(OBJ_D)\c_enc.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\cast\c_enc.c
+
+$(OBJ_D)\c_cfb64.obj: $(SRC_D)\crypto\cast\c_cfb64.c
+       $(CC) /Fo$(OBJ_D)\c_cfb64.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\cast\c_cfb64.c
+
+$(OBJ_D)\c_ofb64.obj: $(SRC_D)\crypto\cast\c_ofb64.c
+       $(CC) /Fo$(OBJ_D)\c_ofb64.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\cast\c_ofb64.c
+
+$(OBJ_D)\bn_add.obj: $(SRC_D)\crypto\bn\bn_add.c
+       $(CC) /Fo$(OBJ_D)\bn_add.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_add.c
+
+$(OBJ_D)\bn_div.obj: $(SRC_D)\crypto\bn\bn_div.c
+       $(CC) /Fo$(OBJ_D)\bn_div.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_div.c
+
+$(OBJ_D)\bn_exp.obj: $(SRC_D)\crypto\bn\bn_exp.c
+       $(CC) /Fo$(OBJ_D)\bn_exp.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_exp.c
+
+$(OBJ_D)\bn_lib.obj: $(SRC_D)\crypto\bn\bn_lib.c
+       $(CC) /Fo$(OBJ_D)\bn_lib.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_lib.c
+
+$(OBJ_D)\bn_ctx.obj: $(SRC_D)\crypto\bn\bn_ctx.c
+       $(CC) /Fo$(OBJ_D)\bn_ctx.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_ctx.c
+
+$(OBJ_D)\bn_mul.obj: $(SRC_D)\crypto\bn\bn_mul.c
+       $(CC) /Fo$(OBJ_D)\bn_mul.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_mul.c
+
+$(OBJ_D)\bn_print.obj: $(SRC_D)\crypto\bn\bn_print.c
+       $(CC) /Fo$(OBJ_D)\bn_print.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_print.c
+
+$(OBJ_D)\bn_rand.obj: $(SRC_D)\crypto\bn\bn_rand.c
+       $(CC) /Fo$(OBJ_D)\bn_rand.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_rand.c
+
+$(OBJ_D)\bn_shift.obj: $(SRC_D)\crypto\bn\bn_shift.c
+       $(CC) /Fo$(OBJ_D)\bn_shift.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_shift.c
+
+$(OBJ_D)\bn_word.obj: $(SRC_D)\crypto\bn\bn_word.c
+       $(CC) /Fo$(OBJ_D)\bn_word.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_word.c
+
+$(OBJ_D)\bn_blind.obj: $(SRC_D)\crypto\bn\bn_blind.c
+       $(CC) /Fo$(OBJ_D)\bn_blind.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_blind.c
+
+$(OBJ_D)\bn_gcd.obj: $(SRC_D)\crypto\bn\bn_gcd.c
+       $(CC) /Fo$(OBJ_D)\bn_gcd.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_gcd.c
+
+$(OBJ_D)\bn_prime.obj: $(SRC_D)\crypto\bn\bn_prime.c
+       $(CC) /Fo$(OBJ_D)\bn_prime.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_prime.c
+
+$(OBJ_D)\bn_err.obj: $(SRC_D)\crypto\bn\bn_err.c
+       $(CC) /Fo$(OBJ_D)\bn_err.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_err.c
+
+$(OBJ_D)\bn_sqr.obj: $(SRC_D)\crypto\bn\bn_sqr.c
+       $(CC) /Fo$(OBJ_D)\bn_sqr.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_sqr.c
+
+$(OBJ_D)\bn_asm.obj: $(SRC_D)\crypto\bn\bn_asm.c
+       $(CC) /Fo$(OBJ_D)\bn_asm.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_asm.c
+
+$(OBJ_D)\bn_recp.obj: $(SRC_D)\crypto\bn\bn_recp.c
+       $(CC) /Fo$(OBJ_D)\bn_recp.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_recp.c
+
+$(OBJ_D)\bn_mont.obj: $(SRC_D)\crypto\bn\bn_mont.c
+       $(CC) /Fo$(OBJ_D)\bn_mont.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_mont.c
+
+$(OBJ_D)\bn_mpi.obj: $(SRC_D)\crypto\bn\bn_mpi.c
+       $(CC) /Fo$(OBJ_D)\bn_mpi.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_mpi.c
+
+$(OBJ_D)\bn_exp2.obj: $(SRC_D)\crypto\bn\bn_exp2.c
+       $(CC) /Fo$(OBJ_D)\bn_exp2.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_exp2.c
+
+$(OBJ_D)\rsa_eay.obj: $(SRC_D)\crypto\rsa\rsa_eay.c
+       $(CC) /Fo$(OBJ_D)\rsa_eay.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\rsa\rsa_eay.c
+
+$(OBJ_D)\rsa_gen.obj: $(SRC_D)\crypto\rsa\rsa_gen.c
+       $(CC) /Fo$(OBJ_D)\rsa_gen.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\rsa\rsa_gen.c
+
+$(OBJ_D)\rsa_lib.obj: $(SRC_D)\crypto\rsa\rsa_lib.c
+       $(CC) /Fo$(OBJ_D)\rsa_lib.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\rsa\rsa_lib.c
+
+$(OBJ_D)\rsa_sign.obj: $(SRC_D)\crypto\rsa\rsa_sign.c
+       $(CC) /Fo$(OBJ_D)\rsa_sign.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\rsa\rsa_sign.c
+
+$(OBJ_D)\rsa_saos.obj: $(SRC_D)\crypto\rsa\rsa_saos.c
+       $(CC) /Fo$(OBJ_D)\rsa_saos.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\rsa\rsa_saos.c
+
+$(OBJ_D)\rsa_err.obj: $(SRC_D)\crypto\rsa\rsa_err.c
+       $(CC) /Fo$(OBJ_D)\rsa_err.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\rsa\rsa_err.c
+
+$(OBJ_D)\rsa_pk1.obj: $(SRC_D)\crypto\rsa\rsa_pk1.c
+       $(CC) /Fo$(OBJ_D)\rsa_pk1.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\rsa\rsa_pk1.c
+
+$(OBJ_D)\rsa_ssl.obj: $(SRC_D)\crypto\rsa\rsa_ssl.c
+       $(CC) /Fo$(OBJ_D)\rsa_ssl.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\rsa\rsa_ssl.c
+
+$(OBJ_D)\rsa_none.obj: $(SRC_D)\crypto\rsa\rsa_none.c
+       $(CC) /Fo$(OBJ_D)\rsa_none.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\rsa\rsa_none.c
+
+$(OBJ_D)\rsa_oaep.obj: $(SRC_D)\crypto\rsa\rsa_oaep.c
+       $(CC) /Fo$(OBJ_D)\rsa_oaep.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\rsa\rsa_oaep.c
+
+$(OBJ_D)\rsa_chk.obj: $(SRC_D)\crypto\rsa\rsa_chk.c
+       $(CC) /Fo$(OBJ_D)\rsa_chk.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\rsa\rsa_chk.c
+
+$(OBJ_D)\rsa_null.obj: $(SRC_D)\crypto\rsa\rsa_null.c
+       $(CC) /Fo$(OBJ_D)\rsa_null.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\rsa\rsa_null.c
+
+$(OBJ_D)\dsa_gen.obj: $(SRC_D)\crypto\dsa\dsa_gen.c
+       $(CC) /Fo$(OBJ_D)\dsa_gen.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\dsa\dsa_gen.c
+
+$(OBJ_D)\dsa_key.obj: $(SRC_D)\crypto\dsa\dsa_key.c
+       $(CC) /Fo$(OBJ_D)\dsa_key.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\dsa\dsa_key.c
+
+$(OBJ_D)\dsa_lib.obj: $(SRC_D)\crypto\dsa\dsa_lib.c
+       $(CC) /Fo$(OBJ_D)\dsa_lib.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\dsa\dsa_lib.c
+
+$(OBJ_D)\dsa_asn1.obj: $(SRC_D)\crypto\dsa\dsa_asn1.c
+       $(CC) /Fo$(OBJ_D)\dsa_asn1.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\dsa\dsa_asn1.c
+
+$(OBJ_D)\dsa_vrf.obj: $(SRC_D)\crypto\dsa\dsa_vrf.c
+       $(CC) /Fo$(OBJ_D)\dsa_vrf.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\dsa\dsa_vrf.c
+
+$(OBJ_D)\dsa_sign.obj: $(SRC_D)\crypto\dsa\dsa_sign.c
+       $(CC) /Fo$(OBJ_D)\dsa_sign.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\dsa\dsa_sign.c
+
+$(OBJ_D)\dsa_err.obj: $(SRC_D)\crypto\dsa\dsa_err.c
+       $(CC) /Fo$(OBJ_D)\dsa_err.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\dsa\dsa_err.c
+
+$(OBJ_D)\dsa_ossl.obj: $(SRC_D)\crypto\dsa\dsa_ossl.c
+       $(CC) /Fo$(OBJ_D)\dsa_ossl.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\dsa\dsa_ossl.c
+
+$(OBJ_D)\dh_gen.obj: $(SRC_D)\crypto\dh\dh_gen.c
+       $(CC) /Fo$(OBJ_D)\dh_gen.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\dh\dh_gen.c
+
+$(OBJ_D)\dh_key.obj: $(SRC_D)\crypto\dh\dh_key.c
+       $(CC) /Fo$(OBJ_D)\dh_key.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\dh\dh_key.c
+
+$(OBJ_D)\dh_lib.obj: $(SRC_D)\crypto\dh\dh_lib.c
+       $(CC) /Fo$(OBJ_D)\dh_lib.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\dh\dh_lib.c
+
+$(OBJ_D)\dh_check.obj: $(SRC_D)\crypto\dh\dh_check.c
+       $(CC) /Fo$(OBJ_D)\dh_check.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\dh\dh_check.c
+
+$(OBJ_D)\dh_err.obj: $(SRC_D)\crypto\dh\dh_err.c
+       $(CC) /Fo$(OBJ_D)\dh_err.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\dh\dh_err.c
+
+$(OBJ_D)\buffer.obj: $(SRC_D)\crypto\buffer\buffer.c
+       $(CC) /Fo$(OBJ_D)\buffer.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\buffer\buffer.c
+
+$(OBJ_D)\buf_err.obj: $(SRC_D)\crypto\buffer\buf_err.c
+       $(CC) /Fo$(OBJ_D)\buf_err.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\buffer\buf_err.c
+
+$(OBJ_D)\bio_lib.obj: $(SRC_D)\crypto\bio\bio_lib.c
+       $(CC) /Fo$(OBJ_D)\bio_lib.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bio\bio_lib.c
+
+$(OBJ_D)\bio_cb.obj: $(SRC_D)\crypto\bio\bio_cb.c
+       $(CC) /Fo$(OBJ_D)\bio_cb.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bio\bio_cb.c
+
+$(OBJ_D)\bio_err.obj: $(SRC_D)\crypto\bio\bio_err.c
+       $(CC) /Fo$(OBJ_D)\bio_err.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bio\bio_err.c
+
+$(OBJ_D)\bss_mem.obj: $(SRC_D)\crypto\bio\bss_mem.c
+       $(CC) /Fo$(OBJ_D)\bss_mem.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bio\bss_mem.c
+
+$(OBJ_D)\bss_null.obj: $(SRC_D)\crypto\bio\bss_null.c
+       $(CC) /Fo$(OBJ_D)\bss_null.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bio\bss_null.c
+
+$(OBJ_D)\bss_fd.obj: $(SRC_D)\crypto\bio\bss_fd.c
+       $(CC) /Fo$(OBJ_D)\bss_fd.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bio\bss_fd.c
+
+$(OBJ_D)\bss_file.obj: $(SRC_D)\crypto\bio\bss_file.c
+       $(CC) /Fo$(OBJ_D)\bss_file.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bio\bss_file.c
+
+$(OBJ_D)\bss_sock.obj: $(SRC_D)\crypto\bio\bss_sock.c
+       $(CC) /Fo$(OBJ_D)\bss_sock.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bio\bss_sock.c
+
+$(OBJ_D)\bss_conn.obj: $(SRC_D)\crypto\bio\bss_conn.c
+       $(CC) /Fo$(OBJ_D)\bss_conn.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bio\bss_conn.c
+
+$(OBJ_D)\bf_null.obj: $(SRC_D)\crypto\bio\bf_null.c
+       $(CC) /Fo$(OBJ_D)\bf_null.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bio\bf_null.c
+
+$(OBJ_D)\bf_buff.obj: $(SRC_D)\crypto\bio\bf_buff.c
+       $(CC) /Fo$(OBJ_D)\bf_buff.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bio\bf_buff.c
+
+$(OBJ_D)\b_print.obj: $(SRC_D)\crypto\bio\b_print.c
+       $(CC) /Fo$(OBJ_D)\b_print.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bio\b_print.c
+
+$(OBJ_D)\b_dump.obj: $(SRC_D)\crypto\bio\b_dump.c
+       $(CC) /Fo$(OBJ_D)\b_dump.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bio\b_dump.c
+
+$(OBJ_D)\b_sock.obj: $(SRC_D)\crypto\bio\b_sock.c
+       $(CC) /Fo$(OBJ_D)\b_sock.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bio\b_sock.c
+
+$(OBJ_D)\bss_acpt.obj: $(SRC_D)\crypto\bio\bss_acpt.c
+       $(CC) /Fo$(OBJ_D)\bss_acpt.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bio\bss_acpt.c
+
+$(OBJ_D)\bf_nbio.obj: $(SRC_D)\crypto\bio\bf_nbio.c
+       $(CC) /Fo$(OBJ_D)\bf_nbio.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bio\bf_nbio.c
+
+$(OBJ_D)\bss_log.obj: $(SRC_D)\crypto\bio\bss_log.c
+       $(CC) /Fo$(OBJ_D)\bss_log.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bio\bss_log.c
+
+$(OBJ_D)\bss_bio.obj: $(SRC_D)\crypto\bio\bss_bio.c
+       $(CC) /Fo$(OBJ_D)\bss_bio.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\bio\bss_bio.c
+
+$(OBJ_D)\stack.obj: $(SRC_D)\crypto\stack\stack.c
+       $(CC) /Fo$(OBJ_D)\stack.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\stack\stack.c
+
+$(OBJ_D)\lhash.obj: $(SRC_D)\crypto\lhash\lhash.c
+       $(CC) /Fo$(OBJ_D)\lhash.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\lhash\lhash.c
+
+$(OBJ_D)\lh_stats.obj: $(SRC_D)\crypto\lhash\lh_stats.c
+       $(CC) /Fo$(OBJ_D)\lh_stats.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\lhash\lh_stats.c
+
+$(OBJ_D)\md_rand.obj: $(SRC_D)\crypto\rand\md_rand.c
+       $(CC) /Fo$(OBJ_D)\md_rand.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\rand\md_rand.c
+
+$(OBJ_D)\randfile.obj: $(SRC_D)\crypto\rand\randfile.c
+       $(CC) /Fo$(OBJ_D)\randfile.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\rand\randfile.c
+
+$(OBJ_D)\rand_lib.obj: $(SRC_D)\crypto\rand\rand_lib.c
+       $(CC) /Fo$(OBJ_D)\rand_lib.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\rand\rand_lib.c
+
+$(OBJ_D)\rand_err.obj: $(SRC_D)\crypto\rand\rand_err.c
+       $(CC) /Fo$(OBJ_D)\rand_err.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\rand\rand_err.c
+
+$(OBJ_D)\rand_egd.obj: $(SRC_D)\crypto\rand\rand_egd.c
+       $(CC) /Fo$(OBJ_D)\rand_egd.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\rand\rand_egd.c
+
+$(OBJ_D)\err.obj: $(SRC_D)\crypto\err\err.c
+       $(CC) /Fo$(OBJ_D)\err.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\err\err.c
+
+$(OBJ_D)\err_all.obj: $(SRC_D)\crypto\err\err_all.c
+       $(CC) /Fo$(OBJ_D)\err_all.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\err\err_all.c
+
+$(OBJ_D)\err_prn.obj: $(SRC_D)\crypto\err\err_prn.c
+       $(CC) /Fo$(OBJ_D)\err_prn.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\err\err_prn.c
+
+$(OBJ_D)\o_names.obj: $(SRC_D)\crypto\objects\o_names.c
+       $(CC) /Fo$(OBJ_D)\o_names.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\objects\o_names.c
+
+$(OBJ_D)\obj_dat.obj: $(SRC_D)\crypto\objects\obj_dat.c
+       $(CC) /Fo$(OBJ_D)\obj_dat.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\objects\obj_dat.c
+
+$(OBJ_D)\obj_lib.obj: $(SRC_D)\crypto\objects\obj_lib.c
+       $(CC) /Fo$(OBJ_D)\obj_lib.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\objects\obj_lib.c
+
+$(OBJ_D)\obj_err.obj: $(SRC_D)\crypto\objects\obj_err.c
+       $(CC) /Fo$(OBJ_D)\obj_err.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\objects\obj_err.c
+
+$(OBJ_D)\encode.obj: $(SRC_D)\crypto\evp\encode.c
+       $(CC) /Fo$(OBJ_D)\encode.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\encode.c
+
+$(OBJ_D)\digest.obj: $(SRC_D)\crypto\evp\digest.c
+       $(CC) /Fo$(OBJ_D)\digest.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\digest.c
+
+$(OBJ_D)\evp_enc.obj: $(SRC_D)\crypto\evp\evp_enc.c
+       $(CC) /Fo$(OBJ_D)\evp_enc.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\evp_enc.c
+
+$(OBJ_D)\evp_key.obj: $(SRC_D)\crypto\evp\evp_key.c
+       $(CC) /Fo$(OBJ_D)\evp_key.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\evp_key.c
+
+$(OBJ_D)\e_ecb_d.obj: $(SRC_D)\crypto\evp\e_ecb_d.c
+       $(CC) /Fo$(OBJ_D)\e_ecb_d.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_ecb_d.c
+
+$(OBJ_D)\e_cbc_d.obj: $(SRC_D)\crypto\evp\e_cbc_d.c
+       $(CC) /Fo$(OBJ_D)\e_cbc_d.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_cbc_d.c
+
+$(OBJ_D)\e_cfb_d.obj: $(SRC_D)\crypto\evp\e_cfb_d.c
+       $(CC) /Fo$(OBJ_D)\e_cfb_d.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_cfb_d.c
+
+$(OBJ_D)\e_ofb_d.obj: $(SRC_D)\crypto\evp\e_ofb_d.c
+       $(CC) /Fo$(OBJ_D)\e_ofb_d.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_ofb_d.c
+
+$(OBJ_D)\e_ecb_i.obj: $(SRC_D)\crypto\evp\e_ecb_i.c
+       $(CC) /Fo$(OBJ_D)\e_ecb_i.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_ecb_i.c
+
+$(OBJ_D)\e_cbc_i.obj: $(SRC_D)\crypto\evp\e_cbc_i.c
+       $(CC) /Fo$(OBJ_D)\e_cbc_i.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_cbc_i.c
+
+$(OBJ_D)\e_cfb_i.obj: $(SRC_D)\crypto\evp\e_cfb_i.c
+       $(CC) /Fo$(OBJ_D)\e_cfb_i.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_cfb_i.c
+
+$(OBJ_D)\e_ofb_i.obj: $(SRC_D)\crypto\evp\e_ofb_i.c
+       $(CC) /Fo$(OBJ_D)\e_ofb_i.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_ofb_i.c
+
+$(OBJ_D)\e_ecb_3d.obj: $(SRC_D)\crypto\evp\e_ecb_3d.c
+       $(CC) /Fo$(OBJ_D)\e_ecb_3d.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_ecb_3d.c
+
+$(OBJ_D)\e_cbc_3d.obj: $(SRC_D)\crypto\evp\e_cbc_3d.c
+       $(CC) /Fo$(OBJ_D)\e_cbc_3d.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_cbc_3d.c
+
+$(OBJ_D)\e_rc4.obj: $(SRC_D)\crypto\evp\e_rc4.c
+       $(CC) /Fo$(OBJ_D)\e_rc4.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_rc4.c
+
+$(OBJ_D)\names.obj: $(SRC_D)\crypto\evp\names.c
+       $(CC) /Fo$(OBJ_D)\names.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\names.c
+
+$(OBJ_D)\e_cfb_3d.obj: $(SRC_D)\crypto\evp\e_cfb_3d.c
+       $(CC) /Fo$(OBJ_D)\e_cfb_3d.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_cfb_3d.c
+
+$(OBJ_D)\e_ofb_3d.obj: $(SRC_D)\crypto\evp\e_ofb_3d.c
+       $(CC) /Fo$(OBJ_D)\e_ofb_3d.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_ofb_3d.c
+
+$(OBJ_D)\e_xcbc_d.obj: $(SRC_D)\crypto\evp\e_xcbc_d.c
+       $(CC) /Fo$(OBJ_D)\e_xcbc_d.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_xcbc_d.c
+
+$(OBJ_D)\e_ecb_r2.obj: $(SRC_D)\crypto\evp\e_ecb_r2.c
+       $(CC) /Fo$(OBJ_D)\e_ecb_r2.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_ecb_r2.c
+
+$(OBJ_D)\e_cbc_r2.obj: $(SRC_D)\crypto\evp\e_cbc_r2.c
+       $(CC) /Fo$(OBJ_D)\e_cbc_r2.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_cbc_r2.c
+
+$(OBJ_D)\e_cfb_r2.obj: $(SRC_D)\crypto\evp\e_cfb_r2.c
+       $(CC) /Fo$(OBJ_D)\e_cfb_r2.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_cfb_r2.c
+
+$(OBJ_D)\e_ofb_r2.obj: $(SRC_D)\crypto\evp\e_ofb_r2.c
+       $(CC) /Fo$(OBJ_D)\e_ofb_r2.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_ofb_r2.c
+
+$(OBJ_D)\e_ecb_bf.obj: $(SRC_D)\crypto\evp\e_ecb_bf.c
+       $(CC) /Fo$(OBJ_D)\e_ecb_bf.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_ecb_bf.c
+
+$(OBJ_D)\e_cbc_bf.obj: $(SRC_D)\crypto\evp\e_cbc_bf.c
+       $(CC) /Fo$(OBJ_D)\e_cbc_bf.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_cbc_bf.c
+
+$(OBJ_D)\e_cfb_bf.obj: $(SRC_D)\crypto\evp\e_cfb_bf.c
+       $(CC) /Fo$(OBJ_D)\e_cfb_bf.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_cfb_bf.c
+
+$(OBJ_D)\e_ofb_bf.obj: $(SRC_D)\crypto\evp\e_ofb_bf.c
+       $(CC) /Fo$(OBJ_D)\e_ofb_bf.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_ofb_bf.c
+
+$(OBJ_D)\e_ecb_c.obj: $(SRC_D)\crypto\evp\e_ecb_c.c
+       $(CC) /Fo$(OBJ_D)\e_ecb_c.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_ecb_c.c
+
+$(OBJ_D)\e_cbc_c.obj: $(SRC_D)\crypto\evp\e_cbc_c.c
+       $(CC) /Fo$(OBJ_D)\e_cbc_c.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_cbc_c.c
+
+$(OBJ_D)\e_cfb_c.obj: $(SRC_D)\crypto\evp\e_cfb_c.c
+       $(CC) /Fo$(OBJ_D)\e_cfb_c.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_cfb_c.c
+
+$(OBJ_D)\e_ofb_c.obj: $(SRC_D)\crypto\evp\e_ofb_c.c
+       $(CC) /Fo$(OBJ_D)\e_ofb_c.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_ofb_c.c
+
+$(OBJ_D)\e_ecb_r5.obj: $(SRC_D)\crypto\evp\e_ecb_r5.c
+       $(CC) /Fo$(OBJ_D)\e_ecb_r5.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_ecb_r5.c
+
+$(OBJ_D)\e_cbc_r5.obj: $(SRC_D)\crypto\evp\e_cbc_r5.c
+       $(CC) /Fo$(OBJ_D)\e_cbc_r5.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_cbc_r5.c
+
+$(OBJ_D)\e_cfb_r5.obj: $(SRC_D)\crypto\evp\e_cfb_r5.c
+       $(CC) /Fo$(OBJ_D)\e_cfb_r5.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_cfb_r5.c
+
+$(OBJ_D)\e_ofb_r5.obj: $(SRC_D)\crypto\evp\e_ofb_r5.c
+       $(CC) /Fo$(OBJ_D)\e_ofb_r5.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_ofb_r5.c
+
+$(OBJ_D)\m_null.obj: $(SRC_D)\crypto\evp\m_null.c
+       $(CC) /Fo$(OBJ_D)\m_null.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\m_null.c
+
+$(OBJ_D)\m_md2.obj: $(SRC_D)\crypto\evp\m_md2.c
+       $(CC) /Fo$(OBJ_D)\m_md2.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\m_md2.c
+
+$(OBJ_D)\m_md5.obj: $(SRC_D)\crypto\evp\m_md5.c
+       $(CC) /Fo$(OBJ_D)\m_md5.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\m_md5.c
+
+$(OBJ_D)\m_sha.obj: $(SRC_D)\crypto\evp\m_sha.c
+       $(CC) /Fo$(OBJ_D)\m_sha.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\m_sha.c
+
+$(OBJ_D)\m_sha1.obj: $(SRC_D)\crypto\evp\m_sha1.c
+       $(CC) /Fo$(OBJ_D)\m_sha1.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\m_sha1.c
+
+$(OBJ_D)\m_dss.obj: $(SRC_D)\crypto\evp\m_dss.c
+       $(CC) /Fo$(OBJ_D)\m_dss.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\m_dss.c
+
+$(OBJ_D)\m_dss1.obj: $(SRC_D)\crypto\evp\m_dss1.c
+       $(CC) /Fo$(OBJ_D)\m_dss1.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\m_dss1.c
+
+$(OBJ_D)\m_mdc2.obj: $(SRC_D)\crypto\evp\m_mdc2.c
+       $(CC) /Fo$(OBJ_D)\m_mdc2.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\m_mdc2.c
+
+$(OBJ_D)\m_ripemd.obj: $(SRC_D)\crypto\evp\m_ripemd.c
+       $(CC) /Fo$(OBJ_D)\m_ripemd.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\m_ripemd.c
+
+$(OBJ_D)\p_open.obj: $(SRC_D)\crypto\evp\p_open.c
+       $(CC) /Fo$(OBJ_D)\p_open.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\p_open.c
+
+$(OBJ_D)\p_seal.obj: $(SRC_D)\crypto\evp\p_seal.c
+       $(CC) /Fo$(OBJ_D)\p_seal.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\p_seal.c
+
+$(OBJ_D)\p_sign.obj: $(SRC_D)\crypto\evp\p_sign.c
+       $(CC) /Fo$(OBJ_D)\p_sign.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\p_sign.c
+
+$(OBJ_D)\p_verify.obj: $(SRC_D)\crypto\evp\p_verify.c
+       $(CC) /Fo$(OBJ_D)\p_verify.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\p_verify.c
+
+$(OBJ_D)\p_lib.obj: $(SRC_D)\crypto\evp\p_lib.c
+       $(CC) /Fo$(OBJ_D)\p_lib.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\p_lib.c
+
+$(OBJ_D)\p_enc.obj: $(SRC_D)\crypto\evp\p_enc.c
+       $(CC) /Fo$(OBJ_D)\p_enc.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\p_enc.c
+
+$(OBJ_D)\p_dec.obj: $(SRC_D)\crypto\evp\p_dec.c
+       $(CC) /Fo$(OBJ_D)\p_dec.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\p_dec.c
+
+$(OBJ_D)\bio_md.obj: $(SRC_D)\crypto\evp\bio_md.c
+       $(CC) /Fo$(OBJ_D)\bio_md.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\bio_md.c
+
+$(OBJ_D)\bio_b64.obj: $(SRC_D)\crypto\evp\bio_b64.c
+       $(CC) /Fo$(OBJ_D)\bio_b64.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\bio_b64.c
+
+$(OBJ_D)\bio_enc.obj: $(SRC_D)\crypto\evp\bio_enc.c
+       $(CC) /Fo$(OBJ_D)\bio_enc.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\bio_enc.c
+
+$(OBJ_D)\evp_err.obj: $(SRC_D)\crypto\evp\evp_err.c
+       $(CC) /Fo$(OBJ_D)\evp_err.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\evp_err.c
+
+$(OBJ_D)\e_null.obj: $(SRC_D)\crypto\evp\e_null.c
+       $(CC) /Fo$(OBJ_D)\e_null.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_null.c
+
+$(OBJ_D)\c_all.obj: $(SRC_D)\crypto\evp\c_all.c
+       $(CC) /Fo$(OBJ_D)\c_all.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\c_all.c
+
+$(OBJ_D)\c_allc.obj: $(SRC_D)\crypto\evp\c_allc.c
+       $(CC) /Fo$(OBJ_D)\c_allc.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\c_allc.c
+
+$(OBJ_D)\c_alld.obj: $(SRC_D)\crypto\evp\c_alld.c
+       $(CC) /Fo$(OBJ_D)\c_alld.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\c_alld.c
+
+$(OBJ_D)\evp_lib.obj: $(SRC_D)\crypto\evp\evp_lib.c
+       $(CC) /Fo$(OBJ_D)\evp_lib.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\evp_lib.c
+
+$(OBJ_D)\bio_ok.obj: $(SRC_D)\crypto\evp\bio_ok.c
+       $(CC) /Fo$(OBJ_D)\bio_ok.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\bio_ok.c
+
+$(OBJ_D)\evp_pkey.obj: $(SRC_D)\crypto\evp\evp_pkey.c
+       $(CC) /Fo$(OBJ_D)\evp_pkey.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\evp_pkey.c
+
+$(OBJ_D)\evp_pbe.obj: $(SRC_D)\crypto\evp\evp_pbe.c
+       $(CC) /Fo$(OBJ_D)\evp_pbe.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\evp_pbe.c
+
+$(OBJ_D)\p5_crpt.obj: $(SRC_D)\crypto\evp\p5_crpt.c
+       $(CC) /Fo$(OBJ_D)\p5_crpt.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\p5_crpt.c
+
+$(OBJ_D)\p5_crpt2.obj: $(SRC_D)\crypto\evp\p5_crpt2.c
+       $(CC) /Fo$(OBJ_D)\p5_crpt2.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\evp\p5_crpt2.c
+
+$(OBJ_D)\a_object.obj: $(SRC_D)\crypto\asn1\a_object.c
+       $(CC) /Fo$(OBJ_D)\a_object.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\a_object.c
+
+$(OBJ_D)\a_bitstr.obj: $(SRC_D)\crypto\asn1\a_bitstr.c
+       $(CC) /Fo$(OBJ_D)\a_bitstr.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\a_bitstr.c
+
+$(OBJ_D)\a_utctm.obj: $(SRC_D)\crypto\asn1\a_utctm.c
+       $(CC) /Fo$(OBJ_D)\a_utctm.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_utctm.c
+
+$(OBJ_D)\a_gentm.obj: $(SRC_D)\crypto\asn1\a_gentm.c
+       $(CC) /Fo$(OBJ_D)\a_gentm.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_gentm.c
+
+$(OBJ_D)\a_time.obj: $(SRC_D)\crypto\asn1\a_time.c
+       $(CC) /Fo$(OBJ_D)\a_time.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_time.c
+
+$(OBJ_D)\a_int.obj: $(SRC_D)\crypto\asn1\a_int.c
+       $(CC) /Fo$(OBJ_D)\a_int.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_int.c
+
+$(OBJ_D)\a_octet.obj: $(SRC_D)\crypto\asn1\a_octet.c
+       $(CC) /Fo$(OBJ_D)\a_octet.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_octet.c
+
+$(OBJ_D)\a_null.obj: $(SRC_D)\crypto\asn1\a_null.c
+       $(CC) /Fo$(OBJ_D)\a_null.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_null.c
+
+$(OBJ_D)\a_print.obj: $(SRC_D)\crypto\asn1\a_print.c
+       $(CC) /Fo$(OBJ_D)\a_print.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_print.c
+
+$(OBJ_D)\a_type.obj: $(SRC_D)\crypto\asn1\a_type.c
+       $(CC) /Fo$(OBJ_D)\a_type.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_type.c
+
+$(OBJ_D)\a_set.obj: $(SRC_D)\crypto\asn1\a_set.c
+       $(CC) /Fo$(OBJ_D)\a_set.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_set.c
+
+$(OBJ_D)\a_dup.obj: $(SRC_D)\crypto\asn1\a_dup.c
+       $(CC) /Fo$(OBJ_D)\a_dup.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_dup.c
+
+$(OBJ_D)\a_d2i_fp.obj: $(SRC_D)\crypto\asn1\a_d2i_fp.c
+       $(CC) /Fo$(OBJ_D)\a_d2i_fp.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\a_d2i_fp.c
+
+$(OBJ_D)\a_i2d_fp.obj: $(SRC_D)\crypto\asn1\a_i2d_fp.c
+       $(CC) /Fo$(OBJ_D)\a_i2d_fp.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\a_i2d_fp.c
+
+$(OBJ_D)\a_bmp.obj: $(SRC_D)\crypto\asn1\a_bmp.c
+       $(CC) /Fo$(OBJ_D)\a_bmp.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_bmp.c
+
+$(OBJ_D)\a_enum.obj: $(SRC_D)\crypto\asn1\a_enum.c
+       $(CC) /Fo$(OBJ_D)\a_enum.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_enum.c
+
+$(OBJ_D)\a_vis.obj: $(SRC_D)\crypto\asn1\a_vis.c
+       $(CC) /Fo$(OBJ_D)\a_vis.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_vis.c
+
+$(OBJ_D)\a_utf8.obj: $(SRC_D)\crypto\asn1\a_utf8.c
+       $(CC) /Fo$(OBJ_D)\a_utf8.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_utf8.c
+
+$(OBJ_D)\a_sign.obj: $(SRC_D)\crypto\asn1\a_sign.c
+       $(CC) /Fo$(OBJ_D)\a_sign.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_sign.c
+
+$(OBJ_D)\a_digest.obj: $(SRC_D)\crypto\asn1\a_digest.c
+       $(CC) /Fo$(OBJ_D)\a_digest.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\a_digest.c
+
+$(OBJ_D)\a_verify.obj: $(SRC_D)\crypto\asn1\a_verify.c
+       $(CC) /Fo$(OBJ_D)\a_verify.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\a_verify.c
+
+$(OBJ_D)\a_mbstr.obj: $(SRC_D)\crypto\asn1\a_mbstr.c
+       $(CC) /Fo$(OBJ_D)\a_mbstr.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_mbstr.c
+
+$(OBJ_D)\x_algor.obj: $(SRC_D)\crypto\asn1\x_algor.c
+       $(CC) /Fo$(OBJ_D)\x_algor.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_algor.c
+
+$(OBJ_D)\x_val.obj: $(SRC_D)\crypto\asn1\x_val.c
+       $(CC) /Fo$(OBJ_D)\x_val.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_val.c
+
+$(OBJ_D)\x_pubkey.obj: $(SRC_D)\crypto\asn1\x_pubkey.c
+       $(CC) /Fo$(OBJ_D)\x_pubkey.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\x_pubkey.c
+
+$(OBJ_D)\x_sig.obj: $(SRC_D)\crypto\asn1\x_sig.c
+       $(CC) /Fo$(OBJ_D)\x_sig.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_sig.c
+
+$(OBJ_D)\x_req.obj: $(SRC_D)\crypto\asn1\x_req.c
+       $(CC) /Fo$(OBJ_D)\x_req.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_req.c
+
+$(OBJ_D)\x_attrib.obj: $(SRC_D)\crypto\asn1\x_attrib.c
+       $(CC) /Fo$(OBJ_D)\x_attrib.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\x_attrib.c
+
+$(OBJ_D)\x_name.obj: $(SRC_D)\crypto\asn1\x_name.c
+       $(CC) /Fo$(OBJ_D)\x_name.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_name.c
+
+$(OBJ_D)\x_cinf.obj: $(SRC_D)\crypto\asn1\x_cinf.c
+       $(CC) /Fo$(OBJ_D)\x_cinf.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_cinf.c
+
+$(OBJ_D)\x_x509.obj: $(SRC_D)\crypto\asn1\x_x509.c
+       $(CC) /Fo$(OBJ_D)\x_x509.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_x509.c
+
+$(OBJ_D)\x_x509a.obj: $(SRC_D)\crypto\asn1\x_x509a.c
+       $(CC) /Fo$(OBJ_D)\x_x509a.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_x509a.c
+
+$(OBJ_D)\x_crl.obj: $(SRC_D)\crypto\asn1\x_crl.c
+       $(CC) /Fo$(OBJ_D)\x_crl.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_crl.c
+
+$(OBJ_D)\x_info.obj: $(SRC_D)\crypto\asn1\x_info.c
+       $(CC) /Fo$(OBJ_D)\x_info.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_info.c
+
+$(OBJ_D)\x_spki.obj: $(SRC_D)\crypto\asn1\x_spki.c
+       $(CC) /Fo$(OBJ_D)\x_spki.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_spki.c
+
+$(OBJ_D)\nsseq.obj: $(SRC_D)\crypto\asn1\nsseq.c
+       $(CC) /Fo$(OBJ_D)\nsseq.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\nsseq.c
+
+$(OBJ_D)\d2i_r_pr.obj: $(SRC_D)\crypto\asn1\d2i_r_pr.c
+       $(CC) /Fo$(OBJ_D)\d2i_r_pr.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\d2i_r_pr.c
+
+$(OBJ_D)\i2d_r_pr.obj: $(SRC_D)\crypto\asn1\i2d_r_pr.c
+       $(CC) /Fo$(OBJ_D)\i2d_r_pr.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\i2d_r_pr.c
+
+$(OBJ_D)\d2i_r_pu.obj: $(SRC_D)\crypto\asn1\d2i_r_pu.c
+       $(CC) /Fo$(OBJ_D)\d2i_r_pu.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\d2i_r_pu.c
+
+$(OBJ_D)\i2d_r_pu.obj: $(SRC_D)\crypto\asn1\i2d_r_pu.c
+       $(CC) /Fo$(OBJ_D)\i2d_r_pu.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\i2d_r_pu.c
+
+$(OBJ_D)\d2i_s_pr.obj: $(SRC_D)\crypto\asn1\d2i_s_pr.c
+       $(CC) /Fo$(OBJ_D)\d2i_s_pr.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\d2i_s_pr.c
+
+$(OBJ_D)\i2d_s_pr.obj: $(SRC_D)\crypto\asn1\i2d_s_pr.c
+       $(CC) /Fo$(OBJ_D)\i2d_s_pr.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\i2d_s_pr.c
+
+$(OBJ_D)\d2i_s_pu.obj: $(SRC_D)\crypto\asn1\d2i_s_pu.c
+       $(CC) /Fo$(OBJ_D)\d2i_s_pu.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\d2i_s_pu.c
+
+$(OBJ_D)\i2d_s_pu.obj: $(SRC_D)\crypto\asn1\i2d_s_pu.c
+       $(CC) /Fo$(OBJ_D)\i2d_s_pu.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\i2d_s_pu.c
+
+$(OBJ_D)\d2i_pu.obj: $(SRC_D)\crypto\asn1\d2i_pu.c
+       $(CC) /Fo$(OBJ_D)\d2i_pu.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\d2i_pu.c
+
+$(OBJ_D)\d2i_pr.obj: $(SRC_D)\crypto\asn1\d2i_pr.c
+       $(CC) /Fo$(OBJ_D)\d2i_pr.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\d2i_pr.c
+
+$(OBJ_D)\i2d_pu.obj: $(SRC_D)\crypto\asn1\i2d_pu.c
+       $(CC) /Fo$(OBJ_D)\i2d_pu.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\i2d_pu.c
+
+$(OBJ_D)\i2d_pr.obj: $(SRC_D)\crypto\asn1\i2d_pr.c
+       $(CC) /Fo$(OBJ_D)\i2d_pr.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\i2d_pr.c
+
+$(OBJ_D)\t_req.obj: $(SRC_D)\crypto\asn1\t_req.c
+       $(CC) /Fo$(OBJ_D)\t_req.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\t_req.c
+
+$(OBJ_D)\t_x509.obj: $(SRC_D)\crypto\asn1\t_x509.c
+       $(CC) /Fo$(OBJ_D)\t_x509.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\t_x509.c
+
+$(OBJ_D)\t_x509a.obj: $(SRC_D)\crypto\asn1\t_x509a.c
+       $(CC) /Fo$(OBJ_D)\t_x509a.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\t_x509a.c
+
+$(OBJ_D)\t_crl.obj: $(SRC_D)\crypto\asn1\t_crl.c
+       $(CC) /Fo$(OBJ_D)\t_crl.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\t_crl.c
+
+$(OBJ_D)\t_pkey.obj: $(SRC_D)\crypto\asn1\t_pkey.c
+       $(CC) /Fo$(OBJ_D)\t_pkey.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\t_pkey.c
+
+$(OBJ_D)\t_spki.obj: $(SRC_D)\crypto\asn1\t_spki.c
+       $(CC) /Fo$(OBJ_D)\t_spki.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\t_spki.c
+
+$(OBJ_D)\t_bitst.obj: $(SRC_D)\crypto\asn1\t_bitst.c
+       $(CC) /Fo$(OBJ_D)\t_bitst.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\t_bitst.c
+
+$(OBJ_D)\p7_i_s.obj: $(SRC_D)\crypto\asn1\p7_i_s.c
+       $(CC) /Fo$(OBJ_D)\p7_i_s.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\p7_i_s.c
+
+$(OBJ_D)\p7_signi.obj: $(SRC_D)\crypto\asn1\p7_signi.c
+       $(CC) /Fo$(OBJ_D)\p7_signi.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\p7_signi.c
+
+$(OBJ_D)\p7_signd.obj: $(SRC_D)\crypto\asn1\p7_signd.c
+       $(CC) /Fo$(OBJ_D)\p7_signd.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\p7_signd.c
+
+$(OBJ_D)\p7_recip.obj: $(SRC_D)\crypto\asn1\p7_recip.c
+       $(CC) /Fo$(OBJ_D)\p7_recip.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\p7_recip.c
+
+$(OBJ_D)\p7_enc_c.obj: $(SRC_D)\crypto\asn1\p7_enc_c.c
+       $(CC) /Fo$(OBJ_D)\p7_enc_c.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\p7_enc_c.c
+
+$(OBJ_D)\p7_evp.obj: $(SRC_D)\crypto\asn1\p7_evp.c
+       $(CC) /Fo$(OBJ_D)\p7_evp.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\p7_evp.c
+
+$(OBJ_D)\p7_dgst.obj: $(SRC_D)\crypto\asn1\p7_dgst.c
+       $(CC) /Fo$(OBJ_D)\p7_dgst.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\p7_dgst.c
+
+$(OBJ_D)\p7_s_e.obj: $(SRC_D)\crypto\asn1\p7_s_e.c
+       $(CC) /Fo$(OBJ_D)\p7_s_e.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\p7_s_e.c
+
+$(OBJ_D)\p7_enc.obj: $(SRC_D)\crypto\asn1\p7_enc.c
+       $(CC) /Fo$(OBJ_D)\p7_enc.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\p7_enc.c
+
+$(OBJ_D)\p7_lib.obj: $(SRC_D)\crypto\asn1\p7_lib.c
+       $(CC) /Fo$(OBJ_D)\p7_lib.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\p7_lib.c
+
+$(OBJ_D)\f_int.obj: $(SRC_D)\crypto\asn1\f_int.c
+       $(CC) /Fo$(OBJ_D)\f_int.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\f_int.c
+
+$(OBJ_D)\f_string.obj: $(SRC_D)\crypto\asn1\f_string.c
+       $(CC) /Fo$(OBJ_D)\f_string.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\f_string.c
+
+$(OBJ_D)\i2d_dhp.obj: $(SRC_D)\crypto\asn1\i2d_dhp.c
+       $(CC) /Fo$(OBJ_D)\i2d_dhp.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\i2d_dhp.c
+
+$(OBJ_D)\i2d_dsap.obj: $(SRC_D)\crypto\asn1\i2d_dsap.c
+       $(CC) /Fo$(OBJ_D)\i2d_dsap.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\i2d_dsap.c
+
+$(OBJ_D)\d2i_dhp.obj: $(SRC_D)\crypto\asn1\d2i_dhp.c
+       $(CC) /Fo$(OBJ_D)\d2i_dhp.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\d2i_dhp.c
+
+$(OBJ_D)\d2i_dsap.obj: $(SRC_D)\crypto\asn1\d2i_dsap.c
+       $(CC) /Fo$(OBJ_D)\d2i_dsap.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\d2i_dsap.c
+
+$(OBJ_D)\n_pkey.obj: $(SRC_D)\crypto\asn1\n_pkey.c
+       $(CC) /Fo$(OBJ_D)\n_pkey.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\n_pkey.c
+
+$(OBJ_D)\f_enum.obj: $(SRC_D)\crypto\asn1\f_enum.c
+       $(CC) /Fo$(OBJ_D)\f_enum.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\f_enum.c
+
+$(OBJ_D)\a_hdr.obj: $(SRC_D)\crypto\asn1\a_hdr.c
+       $(CC) /Fo$(OBJ_D)\a_hdr.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_hdr.c
+
+$(OBJ_D)\x_pkey.obj: $(SRC_D)\crypto\asn1\x_pkey.c
+       $(CC) /Fo$(OBJ_D)\x_pkey.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_pkey.c
+
+$(OBJ_D)\a_bool.obj: $(SRC_D)\crypto\asn1\a_bool.c
+       $(CC) /Fo$(OBJ_D)\a_bool.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_bool.c
+
+$(OBJ_D)\x_exten.obj: $(SRC_D)\crypto\asn1\x_exten.c
+       $(CC) /Fo$(OBJ_D)\x_exten.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_exten.c
+
+$(OBJ_D)\asn1_par.obj: $(SRC_D)\crypto\asn1\asn1_par.c
+       $(CC) /Fo$(OBJ_D)\asn1_par.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\asn1_par.c
+
+$(OBJ_D)\asn1_lib.obj: $(SRC_D)\crypto\asn1\asn1_lib.c
+       $(CC) /Fo$(OBJ_D)\asn1_lib.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\asn1_lib.c
+
+$(OBJ_D)\asn1_err.obj: $(SRC_D)\crypto\asn1\asn1_err.c
+       $(CC) /Fo$(OBJ_D)\asn1_err.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\asn1_err.c
+
+$(OBJ_D)\a_meth.obj: $(SRC_D)\crypto\asn1\a_meth.c
+       $(CC) /Fo$(OBJ_D)\a_meth.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_meth.c
+
+$(OBJ_D)\a_bytes.obj: $(SRC_D)\crypto\asn1\a_bytes.c
+       $(CC) /Fo$(OBJ_D)\a_bytes.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_bytes.c
+
+$(OBJ_D)\a_strnid.obj: $(SRC_D)\crypto\asn1\a_strnid.c
+       $(CC) /Fo$(OBJ_D)\a_strnid.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\a_strnid.c
+
+$(OBJ_D)\evp_asn1.obj: $(SRC_D)\crypto\asn1\evp_asn1.c
+       $(CC) /Fo$(OBJ_D)\evp_asn1.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\evp_asn1.c
+
+$(OBJ_D)\asn_pack.obj: $(SRC_D)\crypto\asn1\asn_pack.c
+       $(CC) /Fo$(OBJ_D)\asn_pack.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\asn_pack.c
+
+$(OBJ_D)\p5_pbe.obj: $(SRC_D)\crypto\asn1\p5_pbe.c
+       $(CC) /Fo$(OBJ_D)\p5_pbe.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\p5_pbe.c
+
+$(OBJ_D)\p5_pbev2.obj: $(SRC_D)\crypto\asn1\p5_pbev2.c
+       $(CC) /Fo$(OBJ_D)\p5_pbev2.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\p5_pbev2.c
+
+$(OBJ_D)\p8_pkey.obj: $(SRC_D)\crypto\asn1\p8_pkey.c
+       $(CC) /Fo$(OBJ_D)\p8_pkey.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\asn1\p8_pkey.c
+
+$(OBJ_D)\pem_sign.obj: $(SRC_D)\crypto\pem\pem_sign.c
+       $(CC) /Fo$(OBJ_D)\pem_sign.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\pem\pem_sign.c
+
+$(OBJ_D)\pem_seal.obj: $(SRC_D)\crypto\pem\pem_seal.c
+       $(CC) /Fo$(OBJ_D)\pem_seal.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\pem\pem_seal.c
+
+$(OBJ_D)\pem_info.obj: $(SRC_D)\crypto\pem\pem_info.c
+       $(CC) /Fo$(OBJ_D)\pem_info.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\pem\pem_info.c
+
+$(OBJ_D)\pem_lib.obj: $(SRC_D)\crypto\pem\pem_lib.c
+       $(CC) /Fo$(OBJ_D)\pem_lib.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\pem\pem_lib.c
+
+$(OBJ_D)\pem_all.obj: $(SRC_D)\crypto\pem\pem_all.c
+       $(CC) /Fo$(OBJ_D)\pem_all.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\pem\pem_all.c
+
+$(OBJ_D)\pem_err.obj: $(SRC_D)\crypto\pem\pem_err.c
+       $(CC) /Fo$(OBJ_D)\pem_err.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\pem\pem_err.c
+
+$(OBJ_D)\x509_def.obj: $(SRC_D)\crypto\x509\x509_def.c
+       $(CC) /Fo$(OBJ_D)\x509_def.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509\x509_def.c
+
+$(OBJ_D)\x509_d2.obj: $(SRC_D)\crypto\x509\x509_d2.c
+       $(CC) /Fo$(OBJ_D)\x509_d2.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\x509\x509_d2.c
+
+$(OBJ_D)\x509_r2x.obj: $(SRC_D)\crypto\x509\x509_r2x.c
+       $(CC) /Fo$(OBJ_D)\x509_r2x.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509\x509_r2x.c
+
+$(OBJ_D)\x509_cmp.obj: $(SRC_D)\crypto\x509\x509_cmp.c
+       $(CC) /Fo$(OBJ_D)\x509_cmp.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509\x509_cmp.c
+
+$(OBJ_D)\x509_obj.obj: $(SRC_D)\crypto\x509\x509_obj.c
+       $(CC) /Fo$(OBJ_D)\x509_obj.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509\x509_obj.c
+
+$(OBJ_D)\x509_req.obj: $(SRC_D)\crypto\x509\x509_req.c
+       $(CC) /Fo$(OBJ_D)\x509_req.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509\x509_req.c
+
+$(OBJ_D)\x509spki.obj: $(SRC_D)\crypto\x509\x509spki.c
+       $(CC) /Fo$(OBJ_D)\x509spki.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509\x509spki.c
+
+$(OBJ_D)\x509_vfy.obj: $(SRC_D)\crypto\x509\x509_vfy.c
+       $(CC) /Fo$(OBJ_D)\x509_vfy.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509\x509_vfy.c
+
+$(OBJ_D)\x509_set.obj: $(SRC_D)\crypto\x509\x509_set.c
+       $(CC) /Fo$(OBJ_D)\x509_set.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509\x509_set.c
+
+$(OBJ_D)\x509rset.obj: $(SRC_D)\crypto\x509\x509rset.c
+       $(CC) /Fo$(OBJ_D)\x509rset.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509\x509rset.c
+
+$(OBJ_D)\x509_err.obj: $(SRC_D)\crypto\x509\x509_err.c
+       $(CC) /Fo$(OBJ_D)\x509_err.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509\x509_err.c
+
+$(OBJ_D)\x509name.obj: $(SRC_D)\crypto\x509\x509name.c
+       $(CC) /Fo$(OBJ_D)\x509name.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509\x509name.c
+
+$(OBJ_D)\x509_v3.obj: $(SRC_D)\crypto\x509\x509_v3.c
+       $(CC) /Fo$(OBJ_D)\x509_v3.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\x509\x509_v3.c
+
+$(OBJ_D)\x509_ext.obj: $(SRC_D)\crypto\x509\x509_ext.c
+       $(CC) /Fo$(OBJ_D)\x509_ext.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509\x509_ext.c
+
+$(OBJ_D)\x509_att.obj: $(SRC_D)\crypto\x509\x509_att.c
+       $(CC) /Fo$(OBJ_D)\x509_att.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509\x509_att.c
+
+$(OBJ_D)\x509type.obj: $(SRC_D)\crypto\x509\x509type.c
+       $(CC) /Fo$(OBJ_D)\x509type.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509\x509type.c
+
+$(OBJ_D)\x509_lu.obj: $(SRC_D)\crypto\x509\x509_lu.c
+       $(CC) /Fo$(OBJ_D)\x509_lu.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\x509\x509_lu.c
+
+$(OBJ_D)\x_all.obj: $(SRC_D)\crypto\x509\x_all.c
+       $(CC) /Fo$(OBJ_D)\x_all.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\x509\x_all.c
+
+$(OBJ_D)\x509_txt.obj: $(SRC_D)\crypto\x509\x509_txt.c
+       $(CC) /Fo$(OBJ_D)\x509_txt.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509\x509_txt.c
+
+$(OBJ_D)\x509_trs.obj: $(SRC_D)\crypto\x509\x509_trs.c
+       $(CC) /Fo$(OBJ_D)\x509_trs.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509\x509_trs.c
+
+$(OBJ_D)\by_file.obj: $(SRC_D)\crypto\x509\by_file.c
+       $(CC) /Fo$(OBJ_D)\by_file.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\x509\by_file.c
+
+$(OBJ_D)\by_dir.obj: $(SRC_D)\crypto\x509\by_dir.c
+       $(CC) /Fo$(OBJ_D)\by_dir.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\x509\by_dir.c
+
+$(OBJ_D)\v3_bcons.obj: $(SRC_D)\crypto\x509v3\v3_bcons.c
+       $(CC) /Fo$(OBJ_D)\v3_bcons.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509v3\v3_bcons.c
+
+$(OBJ_D)\v3_bitst.obj: $(SRC_D)\crypto\x509v3\v3_bitst.c
+       $(CC) /Fo$(OBJ_D)\v3_bitst.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509v3\v3_bitst.c
+
+$(OBJ_D)\v3_conf.obj: $(SRC_D)\crypto\x509v3\v3_conf.c
+       $(CC) /Fo$(OBJ_D)\v3_conf.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509v3\v3_conf.c
+
+$(OBJ_D)\v3_extku.obj: $(SRC_D)\crypto\x509v3\v3_extku.c
+       $(CC) /Fo$(OBJ_D)\v3_extku.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509v3\v3_extku.c
+
+$(OBJ_D)\v3_ia5.obj: $(SRC_D)\crypto\x509v3\v3_ia5.c
+       $(CC) /Fo$(OBJ_D)\v3_ia5.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\x509v3\v3_ia5.c
+
+$(OBJ_D)\v3_lib.obj: $(SRC_D)\crypto\x509v3\v3_lib.c
+       $(CC) /Fo$(OBJ_D)\v3_lib.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\x509v3\v3_lib.c
+
+$(OBJ_D)\v3_prn.obj: $(SRC_D)\crypto\x509v3\v3_prn.c
+       $(CC) /Fo$(OBJ_D)\v3_prn.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\x509v3\v3_prn.c
+
+$(OBJ_D)\v3_utl.obj: $(SRC_D)\crypto\x509v3\v3_utl.c
+       $(CC) /Fo$(OBJ_D)\v3_utl.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\x509v3\v3_utl.c
+
+$(OBJ_D)\v3err.obj: $(SRC_D)\crypto\x509v3\v3err.c
+       $(CC) /Fo$(OBJ_D)\v3err.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\x509v3\v3err.c
+
+$(OBJ_D)\v3_genn.obj: $(SRC_D)\crypto\x509v3\v3_genn.c
+       $(CC) /Fo$(OBJ_D)\v3_genn.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509v3\v3_genn.c
+
+$(OBJ_D)\v3_alt.obj: $(SRC_D)\crypto\x509v3\v3_alt.c
+       $(CC) /Fo$(OBJ_D)\v3_alt.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\x509v3\v3_alt.c
+
+$(OBJ_D)\v3_skey.obj: $(SRC_D)\crypto\x509v3\v3_skey.c
+       $(CC) /Fo$(OBJ_D)\v3_skey.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509v3\v3_skey.c
+
+$(OBJ_D)\v3_akey.obj: $(SRC_D)\crypto\x509v3\v3_akey.c
+       $(CC) /Fo$(OBJ_D)\v3_akey.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509v3\v3_akey.c
+
+$(OBJ_D)\v3_pku.obj: $(SRC_D)\crypto\x509v3\v3_pku.c
+       $(CC) /Fo$(OBJ_D)\v3_pku.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\x509v3\v3_pku.c
+
+$(OBJ_D)\v3_int.obj: $(SRC_D)\crypto\x509v3\v3_int.c
+       $(CC) /Fo$(OBJ_D)\v3_int.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\x509v3\v3_int.c
+
+$(OBJ_D)\v3_enum.obj: $(SRC_D)\crypto\x509v3\v3_enum.c
+       $(CC) /Fo$(OBJ_D)\v3_enum.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509v3\v3_enum.c
+
+$(OBJ_D)\v3_sxnet.obj: $(SRC_D)\crypto\x509v3\v3_sxnet.c
+       $(CC) /Fo$(OBJ_D)\v3_sxnet.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509v3\v3_sxnet.c
+
+$(OBJ_D)\v3_cpols.obj: $(SRC_D)\crypto\x509v3\v3_cpols.c
+       $(CC) /Fo$(OBJ_D)\v3_cpols.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509v3\v3_cpols.c
+
+$(OBJ_D)\v3_crld.obj: $(SRC_D)\crypto\x509v3\v3_crld.c
+       $(CC) /Fo$(OBJ_D)\v3_crld.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509v3\v3_crld.c
+
+$(OBJ_D)\v3_purp.obj: $(SRC_D)\crypto\x509v3\v3_purp.c
+       $(CC) /Fo$(OBJ_D)\v3_purp.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509v3\v3_purp.c
+
+$(OBJ_D)\v3_info.obj: $(SRC_D)\crypto\x509v3\v3_info.c
+       $(CC) /Fo$(OBJ_D)\v3_info.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509v3\v3_info.c
+
+$(OBJ_D)\conf.obj: $(SRC_D)\crypto\conf\conf.c
+       $(CC) /Fo$(OBJ_D)\conf.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\conf\conf.c
+
+$(OBJ_D)\conf_err.obj: $(SRC_D)\crypto\conf\conf_err.c
+       $(CC) /Fo$(OBJ_D)\conf_err.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\conf\conf_err.c
+
+$(OBJ_D)\txt_db.obj: $(SRC_D)\crypto\txt_db\txt_db.c
+       $(CC) /Fo$(OBJ_D)\txt_db.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\txt_db\txt_db.c
+
+$(OBJ_D)\pk7_lib.obj: $(SRC_D)\crypto\pkcs7\pk7_lib.c
+       $(CC) /Fo$(OBJ_D)\pk7_lib.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\pkcs7\pk7_lib.c
+
+$(OBJ_D)\pkcs7err.obj: $(SRC_D)\crypto\pkcs7\pkcs7err.c
+       $(CC) /Fo$(OBJ_D)\pkcs7err.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs7\pkcs7err.c
+
+$(OBJ_D)\pk7_doit.obj: $(SRC_D)\crypto\pkcs7\pk7_doit.c
+       $(CC) /Fo$(OBJ_D)\pk7_doit.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs7\pk7_doit.c
+
+$(OBJ_D)\pk7_smime.obj: $(SRC_D)\crypto\pkcs7\pk7_smime.c
+       $(CC) /Fo$(OBJ_D)\pk7_smime.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs7\pk7_smime.c
+
+$(OBJ_D)\pk7_attr.obj: $(SRC_D)\crypto\pkcs7\pk7_attr.c
+       $(CC) /Fo$(OBJ_D)\pk7_attr.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs7\pk7_attr.c
+
+$(OBJ_D)\pk7_mime.obj: $(SRC_D)\crypto\pkcs7\pk7_mime.c
+       $(CC) /Fo$(OBJ_D)\pk7_mime.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs7\pk7_mime.c
+
+$(OBJ_D)\p12_add.obj: $(SRC_D)\crypto\pkcs12\p12_add.c
+       $(CC) /Fo$(OBJ_D)\p12_add.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs12\p12_add.c
+
+$(OBJ_D)\p12_attr.obj: $(SRC_D)\crypto\pkcs12\p12_attr.c
+       $(CC) /Fo$(OBJ_D)\p12_attr.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs12\p12_attr.c
+
+$(OBJ_D)\p12_bags.obj: $(SRC_D)\crypto\pkcs12\p12_bags.c
+       $(CC) /Fo$(OBJ_D)\p12_bags.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs12\p12_bags.c
+
+$(OBJ_D)\p12_crpt.obj: $(SRC_D)\crypto\pkcs12\p12_crpt.c
+       $(CC) /Fo$(OBJ_D)\p12_crpt.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs12\p12_crpt.c
+
+$(OBJ_D)\p12_crt.obj: $(SRC_D)\crypto\pkcs12\p12_crt.c
+       $(CC) /Fo$(OBJ_D)\p12_crt.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs12\p12_crt.c
+
+$(OBJ_D)\p12_decr.obj: $(SRC_D)\crypto\pkcs12\p12_decr.c
+       $(CC) /Fo$(OBJ_D)\p12_decr.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs12\p12_decr.c
+
+$(OBJ_D)\p12_init.obj: $(SRC_D)\crypto\pkcs12\p12_init.c
+       $(CC) /Fo$(OBJ_D)\p12_init.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs12\p12_init.c
+
+$(OBJ_D)\p12_key.obj: $(SRC_D)\crypto\pkcs12\p12_key.c
+       $(CC) /Fo$(OBJ_D)\p12_key.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs12\p12_key.c
+
+$(OBJ_D)\p12_kiss.obj: $(SRC_D)\crypto\pkcs12\p12_kiss.c
+       $(CC) /Fo$(OBJ_D)\p12_kiss.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs12\p12_kiss.c
+
+$(OBJ_D)\p12_lib.obj: $(SRC_D)\crypto\pkcs12\p12_lib.c
+       $(CC) /Fo$(OBJ_D)\p12_lib.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs12\p12_lib.c
+
+$(OBJ_D)\p12_mac.obj: $(SRC_D)\crypto\pkcs12\p12_mac.c
+       $(CC) /Fo$(OBJ_D)\p12_mac.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs12\p12_mac.c
+
+$(OBJ_D)\p12_mutl.obj: $(SRC_D)\crypto\pkcs12\p12_mutl.c
+       $(CC) /Fo$(OBJ_D)\p12_mutl.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs12\p12_mutl.c
+
+$(OBJ_D)\p12_sbag.obj: $(SRC_D)\crypto\pkcs12\p12_sbag.c
+       $(CC) /Fo$(OBJ_D)\p12_sbag.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs12\p12_sbag.c
+
+$(OBJ_D)\p12_utl.obj: $(SRC_D)\crypto\pkcs12\p12_utl.c
+       $(CC) /Fo$(OBJ_D)\p12_utl.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs12\p12_utl.c
+
+$(OBJ_D)\p12_npas.obj: $(SRC_D)\crypto\pkcs12\p12_npas.c
+       $(CC) /Fo$(OBJ_D)\p12_npas.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs12\p12_npas.c
+
+$(OBJ_D)\pk12err.obj: $(SRC_D)\crypto\pkcs12\pk12err.c
+       $(CC) /Fo$(OBJ_D)\pk12err.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs12\pk12err.c
+
+$(OBJ_D)\comp_lib.obj: $(SRC_D)\crypto\comp\comp_lib.c
+       $(CC) /Fo$(OBJ_D)\comp_lib.obj  $(LIB_CFLAGS) -c 
+$(SRC_D)\crypto\comp\comp_lib.c
+
+$(OBJ_D)\c_rle.obj: $(SRC_D)\crypto\comp\c_rle.c
+       $(CC) /Fo$(OBJ_D)\c_rle.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\comp\c_rle.c
+
+$(OBJ_D)\c_zlib.obj: $(SRC_D)\crypto\comp\c_zlib.c
+       $(CC) /Fo$(OBJ_D)\c_zlib.obj  $(LIB_CFLAGS) -c $(SRC_D)\crypto\comp\c_zlib.c
+
+$(OBJ_D)\s2_meth.obj: $(SRC_D)\ssl\s2_meth.c
+       $(CC) /Fo$(OBJ_D)\s2_meth.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\s2_meth.c
+
+$(OBJ_D)\s2_srvr.obj: $(SRC_D)\ssl\s2_srvr.c
+       $(CC) /Fo$(OBJ_D)\s2_srvr.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\s2_srvr.c
+
+$(OBJ_D)\s2_clnt.obj: $(SRC_D)\ssl\s2_clnt.c
+       $(CC) /Fo$(OBJ_D)\s2_clnt.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\s2_clnt.c
+
+$(OBJ_D)\s2_lib.obj: $(SRC_D)\ssl\s2_lib.c
+       $(CC) /Fo$(OBJ_D)\s2_lib.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\s2_lib.c
+
+$(OBJ_D)\s2_enc.obj: $(SRC_D)\ssl\s2_enc.c
+       $(CC) /Fo$(OBJ_D)\s2_enc.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\s2_enc.c
+
+$(OBJ_D)\s2_pkt.obj: $(SRC_D)\ssl\s2_pkt.c
+       $(CC) /Fo$(OBJ_D)\s2_pkt.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\s2_pkt.c
+
+$(OBJ_D)\s3_meth.obj: $(SRC_D)\ssl\s3_meth.c
+       $(CC) /Fo$(OBJ_D)\s3_meth.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\s3_meth.c
+
+$(OBJ_D)\s3_srvr.obj: $(SRC_D)\ssl\s3_srvr.c
+       $(CC) /Fo$(OBJ_D)\s3_srvr.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\s3_srvr.c
+
+$(OBJ_D)\s3_clnt.obj: $(SRC_D)\ssl\s3_clnt.c
+       $(CC) /Fo$(OBJ_D)\s3_clnt.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\s3_clnt.c
+
+$(OBJ_D)\s3_lib.obj: $(SRC_D)\ssl\s3_lib.c
+       $(CC) /Fo$(OBJ_D)\s3_lib.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\s3_lib.c
+
+$(OBJ_D)\s3_enc.obj: $(SRC_D)\ssl\s3_enc.c
+       $(CC) /Fo$(OBJ_D)\s3_enc.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\s3_enc.c
+
+$(OBJ_D)\s3_pkt.obj: $(SRC_D)\ssl\s3_pkt.c
+       $(CC) /Fo$(OBJ_D)\s3_pkt.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\s3_pkt.c
+
+$(OBJ_D)\s3_both.obj: $(SRC_D)\ssl\s3_both.c
+       $(CC) /Fo$(OBJ_D)\s3_both.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\s3_both.c
+
+$(OBJ_D)\s23_meth.obj: $(SRC_D)\ssl\s23_meth.c
+       $(CC) /Fo$(OBJ_D)\s23_meth.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\s23_meth.c
+
+$(OBJ_D)\s23_srvr.obj: $(SRC_D)\ssl\s23_srvr.c
+       $(CC) /Fo$(OBJ_D)\s23_srvr.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\s23_srvr.c
+
+$(OBJ_D)\s23_clnt.obj: $(SRC_D)\ssl\s23_clnt.c
+       $(CC) /Fo$(OBJ_D)\s23_clnt.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\s23_clnt.c
+
+$(OBJ_D)\s23_lib.obj: $(SRC_D)\ssl\s23_lib.c
+       $(CC) /Fo$(OBJ_D)\s23_lib.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\s23_lib.c
+
+$(OBJ_D)\s23_pkt.obj: $(SRC_D)\ssl\s23_pkt.c
+       $(CC) /Fo$(OBJ_D)\s23_pkt.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\s23_pkt.c
+
+$(OBJ_D)\t1_meth.obj: $(SRC_D)\ssl\t1_meth.c
+       $(CC) /Fo$(OBJ_D)\t1_meth.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\t1_meth.c
+
+$(OBJ_D)\t1_srvr.obj: $(SRC_D)\ssl\t1_srvr.c
+       $(CC) /Fo$(OBJ_D)\t1_srvr.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\t1_srvr.c
+
+$(OBJ_D)\t1_clnt.obj: $(SRC_D)\ssl\t1_clnt.c
+       $(CC) /Fo$(OBJ_D)\t1_clnt.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\t1_clnt.c
+
+$(OBJ_D)\t1_lib.obj: $(SRC_D)\ssl\t1_lib.c
+       $(CC) /Fo$(OBJ_D)\t1_lib.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\t1_lib.c
+
+$(OBJ_D)\t1_enc.obj: $(SRC_D)\ssl\t1_enc.c
+       $(CC) /Fo$(OBJ_D)\t1_enc.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\t1_enc.c
+
+$(OBJ_D)\ssl_lib.obj: $(SRC_D)\ssl\ssl_lib.c
+       $(CC) /Fo$(OBJ_D)\ssl_lib.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\ssl_lib.c
+
+$(OBJ_D)\ssl_err2.obj: $(SRC_D)\ssl\ssl_err2.c
+       $(CC) /Fo$(OBJ_D)\ssl_err2.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\ssl_err2.c
+
+$(OBJ_D)\ssl_cert.obj: $(SRC_D)\ssl\ssl_cert.c
+       $(CC) /Fo$(OBJ_D)\ssl_cert.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\ssl_cert.c
+
+$(OBJ_D)\ssl_sess.obj: $(SRC_D)\ssl\ssl_sess.c
+       $(CC) /Fo$(OBJ_D)\ssl_sess.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\ssl_sess.c
+
+$(OBJ_D)\ssl_ciph.obj: $(SRC_D)\ssl\ssl_ciph.c
+       $(CC) /Fo$(OBJ_D)\ssl_ciph.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\ssl_ciph.c
+
+$(OBJ_D)\ssl_stat.obj: $(SRC_D)\ssl\ssl_stat.c
+       $(CC) /Fo$(OBJ_D)\ssl_stat.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\ssl_stat.c
+
+$(OBJ_D)\ssl_rsa.obj: $(SRC_D)\ssl\ssl_rsa.c
+       $(CC) /Fo$(OBJ_D)\ssl_rsa.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\ssl_rsa.c
+
+$(OBJ_D)\ssl_asn1.obj: $(SRC_D)\ssl\ssl_asn1.c
+       $(CC) /Fo$(OBJ_D)\ssl_asn1.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\ssl_asn1.c
+
+$(OBJ_D)\ssl_txt.obj: $(SRC_D)\ssl\ssl_txt.c
+       $(CC) /Fo$(OBJ_D)\ssl_txt.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\ssl_txt.c
+
+$(OBJ_D)\ssl_algs.obj: $(SRC_D)\ssl\ssl_algs.c
+       $(CC) /Fo$(OBJ_D)\ssl_algs.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\ssl_algs.c
+
+$(OBJ_D)\bio_ssl.obj: $(SRC_D)\ssl\bio_ssl.c
+       $(CC) /Fo$(OBJ_D)\bio_ssl.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\bio_ssl.c
+
+$(OBJ_D)\ssl_err.obj: $(SRC_D)\ssl\ssl_err.c
+       $(CC) /Fo$(OBJ_D)\ssl_err.obj  $(LIB_CFLAGS) -c $(SRC_D)\ssl\ssl_err.c
+
+$(OBJ_D)\rsaref.obj: $(SRC_D)\rsaref\rsaref.c
+       $(CC) /Fo$(OBJ_D)\rsaref.obj  $(LIB_CFLAGS) -c $(SRC_D)\rsaref\rsaref.c
+
+$(OBJ_D)\rsar_err.obj: $(SRC_D)\rsaref\rsar_err.c
+       $(CC) /Fo$(OBJ_D)\rsar_err.obj  $(LIB_CFLAGS) -c $(SRC_D)\rsaref\rsar_err.c
+
+$(TEST_D)\md2test.exe: $(OBJ_D)\md2test.obj $(LIBS_DEP)
+  $(LINK) $(LFLAGS) /out:$(TEST_D)\md2test.exe @<<
+  $(APP_EX_OBJ) $(OBJ_D)\md2test.obj $(L_LIBS) $(EX_LIBS)
+<<
+
+$(TEST_D)\md5test.exe: $(OBJ_D)\md5test.obj $(LIBS_DEP)
+  $(LINK) $(LFLAGS) /out:$(TEST_D)\md5test.exe @<<
+  $(APP_EX_OBJ) $(OBJ_D)\md5test.obj $(L_LIBS) $(EX_LIBS)
+<<
+
+$(TEST_D)\shatest.exe: $(OBJ_D)\shatest.obj $(LIBS_DEP)
+  $(LINK) $(LFLAGS) /out:$(TEST_D)\shatest.exe @<<
+  $(APP_EX_OBJ) $(OBJ_D)\shatest.obj $(L_LIBS) $(EX_LIBS)
+<<
+
+$(TEST_D)\sha1test.exe: $(OBJ_D)\sha1test.obj $(LIBS_DEP)
+  $(LINK) $(LFLAGS) /out:$(TEST_D)\sha1test.exe @<<
+  $(APP_EX_OBJ) $(OBJ_D)\sha1test.obj $(L_LIBS) $(EX_LIBS)
+<<
+
+$(TEST_D)\mdc2test.exe: $(OBJ_D)\mdc2test.obj $(LIBS_DEP)
+  $(LINK) $(LFLAGS) /out:$(TEST_D)\mdc2test.exe @<<
+  $(APP_EX_OBJ) $(OBJ_D)\mdc2test.obj $(L_LIBS) $(EX_LIBS)
+<<
+
+$(TEST_D)\hmactest.exe: $(OBJ_D)\hmactest.obj $(LIBS_DEP)
+  $(LINK) $(LFLAGS) /out:$(TEST_D)\hmactest.exe @<<
+  $(APP_EX_OBJ) $(OBJ_D)\hmactest.obj $(L_LIBS) $(EX_LIBS)
+<<
+
+$(TEST_D)\rmdtest.exe: $(OBJ_D)\rmdtest.obj $(LIBS_DEP)
+  $(LINK) $(LFLAGS) /out:$(TEST_D)\rmdtest.exe @<<
+  $(APP_EX_OBJ) $(OBJ_D)\rmdtest.obj $(L_LIBS) $(EX_LIBS)
+<<
+
+$(TEST_D)\destest.exe: $(OBJ_D)\destest.obj $(LIBS_DEP)
+  $(LINK) $(LFLAGS) /out:$(TEST_D)\destest.exe @<<
+  $(APP_EX_OBJ) $(OBJ_D)\destest.obj $(L_LIBS) $(EX_LIBS)
+<<
+
+$(TEST_D)\rc2test.exe: $(OBJ_D)\rc2test.obj $(LIBS_DEP)
+  $(LINK) $(LFLAGS) /out:$(TEST_D)\rc2test.exe @<<
+  $(APP_EX_OBJ) $(OBJ_D)\rc2test.obj $(L_LIBS) $(EX_LIBS)
+<<
+
+$(TEST_D)\rc4test.exe: $(OBJ_D)\rc4test.obj $(LIBS_DEP)
+  $(LINK) $(LFLAGS) /out:$(TEST_D)\rc4test.exe @<<
+  $(APP_EX_OBJ) $(OBJ_D)\rc4test.obj $(L_LIBS) $(EX_LIBS)
+<<
+
+$(TEST_D)\rc5test.exe: $(OBJ_D)\rc5test.obj $(LIBS_DEP)
+  $(LINK) $(LFLAGS) /out:$(TEST_D)\rc5test.exe @<<
+  $(APP_EX_OBJ) $(OBJ_D)\rc5test.obj $(L_LIBS) $(EX_LIBS)
+<<
+
+$(TEST_D)\ideatest.exe: $(OBJ_D)\ideatest.obj $(LIBS_DEP)
+  $(LINK) $(LFLAGS) /out:$(TEST_D)\ideatest.exe @<<
+  $(APP_EX_OBJ) $(OBJ_D)\ideatest.obj $(L_LIBS) $(EX_LIBS)
+<<
+
+$(TEST_D)\bftest.exe: $(OBJ_D)\bftest.obj $(LIBS_DEP)
+  $(LINK) $(LFLAGS) /out:$(TEST_D)\bftest.exe @<<
+  $(APP_EX_OBJ) $(OBJ_D)\bftest.obj $(L_LIBS) $(EX_LIBS)
+<<
+
+$(TEST_D)\casttest.exe: $(OBJ_D)\casttest.obj $(LIBS_DEP)
+  $(LINK) $(LFLAGS) /out:$(TEST_D)\casttest.exe @<<
+  $(APP_EX_OBJ) $(OBJ_D)\casttest.obj $(L_LIBS) $(EX_LIBS)
+<<
+
+$(TEST_D)\bntest.exe: $(OBJ_D)\bntest.obj $(LIBS_DEP)
+  $(LINK) $(LFLAGS) /out:$(TEST_D)\bntest.exe @<<
+  $(APP_EX_OBJ) $(OBJ_D)\bntest.obj $(L_LIBS) $(EX_LIBS)
+<<
+
+$(TEST_D)\exptest.exe: $(OBJ_D)\exptest.obj $(LIBS_DEP)
+  $(LINK) $(LFLAGS) /out:$(TEST_D)\exptest.exe @<<
+  $(APP_EX_OBJ) $(OBJ_D)\exptest.obj $(L_LIBS) $(EX_LIBS)
+<<
+
+$(TEST_D)\rsa_test.exe: $(OBJ_D)\rsa_test.obj $(LIBS_DEP)
+  $(LINK) $(LFLAGS) /out:$(TEST_D)\rsa_test.exe @<<
+  $(APP_EX_OBJ) $(OBJ_D)\rsa_test.obj $(L_LIBS) $(EX_LIBS)
+<<
+
+$(TEST_D)\dsatest.exe: $(OBJ_D)\dsatest.obj $(LIBS_DEP)
+  $(LINK) $(LFLAGS) /out:$(TEST_D)\dsatest.exe @<<
+  $(APP_EX_OBJ) $(OBJ_D)\dsatest.obj $(L_LIBS) $(EX_LIBS)
+<<
+
+$(TEST_D)\dhtest.exe: $(OBJ_D)\dhtest.obj $(LIBS_DEP)
+  $(LINK) $(LFLAGS) /out:$(TEST_D)\dhtest.exe @<<
+  $(APP_EX_OBJ) $(OBJ_D)\dhtest.obj $(L_LIBS) $(EX_LIBS)
+<<
+
+$(TEST_D)\randtest.exe: $(OBJ_D)\randtest.obj $(LIBS_DEP)
+  $(LINK) $(LFLAGS) /out:$(TEST_D)\randtest.exe @<<
+  $(APP_EX_OBJ) $(OBJ_D)\randtest.obj $(L_LIBS) $(EX_LIBS)
+<<
+
+$(TEST_D)\ssltest.exe: $(OBJ_D)\ssltest.obj $(LIBS_DEP)
+  $(LINK) $(LFLAGS) /out:$(TEST_D)\ssltest.exe @<<
+  $(APP_EX_OBJ) $(OBJ_D)\ssltest.obj $(L_LIBS) $(EX_LIBS)
+<<
+
+$(O_SSL): $(SSLOBJ)
+       $(MKLIB) /out:$(O_SSL) @<<
+  $(SSLOBJ)
+<<
+
+$(O_RSAGLUE): $(RSAGLUEOBJ)
+       $(MKLIB) /out:$(O_RSAGLUE) @<<
+  $(RSAGLUEOBJ)
+<<
+
+$(O_CRYPTO): $(CRYPTOOBJ)
+       $(MKLIB) /out:$(O_CRYPTO) @<<
+  $(CRYPTOOBJ)
+<<
+
+$(BIN_D)\$(E_EXE).exe: $(E_OBJ) $(LIBS_DEP)
+  $(LINK) $(LFLAGS) /out:$(BIN_D)\$(E_EXE).exe @<<
+  $(APP_EX_OBJ) $(E_OBJ) $(L_LIBS) $(EX_LIBS)
+<<
+
Index: opensa/openssl/ms/ntdll.mak
diff -u opensa/openssl/ms/ntdll.mak:1.1 opensa/openssl/ms/ntdll.mak:1.2
--- opensa/openssl/ms/ntdll.mak:1.1     Tue Jan 25 23:16:43 2000
+++ opensa/openssl/ms/ntdll.mak Thu Mar  2 21:12:05 2000
@@ -1,2082 +1,2181 @@
-# This makefile has been automatically generated from the OpenSSL distribution.
-# This single makefile will build the complete OpenSSL distribution and
-# by default leave the 'intertesting' output files in .\out and the stuff
-# that needs deleting in .\tmp.
-# The file was generated by running 'make makefile.one', which
-# does a 'make files', which writes all the environment variables from all
-# the makefiles to the file call MINFO.  This file is used by
-# util\mk1mf.pl to generate makefile.one.
-# The 'makefile per directory' system suites me when developing this
-# library and also so I can 'distribute' indervidual library sections.
-# The one monster makefile better suits building in non-unix
-# environments.
-
-INSTALLTOP=\usr\local\ssl
-
-# Set your compiler options
-PLATFORM=VC-WIN32
-CC=cl
-CFLAG= /MD /W3 /WX /G5 /Ox /O2 /Ob2 /Gs0 /GF /Gy /nologo -DWIN32 
-DWIN32_LEAN_AND_MEAN -DL_ENDIAN /Fdout32dll
-APP_CFLAG=
-LIB_CFLAG= /GD -D_WINDLL -D_DLL
-SHLIB_CFLAG=
-APP_EX_OBJ=setargv.obj
-SHLIB_EX_OBJ=
-# add extra libraries to this define, for solaris -lsocket -lnsl would
-# be added
-EX_LIBS=wsock32.lib user32.lib gdi32.lib
-
-# The OpenSSL directory
-SRC_D=.
-
-LINK=link
-LFLAGS=/nologo /subsystem:console /machine:I386 /opt:ref
-
-BN_ASM_OBJ=
-BN_ASM_SRC=
-DES_ENC_OBJ=
-DES_ENC_SRC=
-BF_ENC_OBJ=
-BF_ENC_SRC=
-CAST_ENC_OBJ=
-CAST_ENC_SRC=
-RC4_ENC_OBJ=
-RC4_ENC_SRC=
-RC5_ENC_OBJ=
-RC5_ENC_SRC=
-MD5_ASM_OBJ=
-MD5_ASM_SRC=
-SHA1_ASM_OBJ=
-SHA1_ASM_SRC=
-RMD160_ASM_OBJ=
-RMD160_ASM_SRC=
-
-# The output directory for everything intersting
-OUT_D=out32dll
-# The output directory for all the temporary muck
-TMP_D=tmp32dll
-# The output directory for the header files
-INC_D=inc32
-INCO_D=inc32\openssl
-
-CP=copy nul+
-RM=del
-RANLIB=
-MKDIR=mkdir
-MKLIB=lib
-MLFLAGS= /nologo /subsystem:console /machine:I386 /opt:ref /dll
-ASM=ml /Cp /coff /c /Cx
-
-######################################################
-# You should not need to touch anything below this point
-######################################################
-
-E_EXE=openssl
-SSL=ssleay32
-CRYPTO=libeay32
-RSAGLUE=RSAglue
-
-# BIN_D  - Binary output directory
-# TEST_D - Binary test file output directory
-# LIB_D  - library output directory
-# Note: if you change these point to different directories then uncomment out
-# the lines around the 'NB' comment below.
-# 
-BIN_D=$(OUT_D)
-TEST_D=$(OUT_D)
-LIB_D=$(OUT_D)
-
-# INCL_D - local library directory
-# OBJ_D  - temp object file directory
-OBJ_D=$(TMP_D)
-INCL_D=$(TMP_D)
-
-O_SSL=     $(LIB_D)\$(SSL).dll
-O_CRYPTO=  $(LIB_D)\$(CRYPTO).dll
-O_RSAGLUE= $(LIB_D)\$(RSAGLUE).lib
-SO_SSL=    $(SSL)
-SO_CRYPTO= $(CRYPTO)
-L_SSL=     $(LIB_D)\$(SSL).lib
-L_CRYPTO=  $(LIB_D)\$(CRYPTO).lib
-
-L_LIBS= $(L_SSL) $(L_CRYPTO)
-#L_LIBS= $(O_SSL) $(O_RSAGLUE) -lrsaref $(O_CRYPTO)
-
-######################################################
-# Don't touch anything below this point
-######################################################
-
-INC=-I$(INC_D) -I$(INCL_D)
-APP_CFLAGS=$(INC) $(CFLAG) $(APP_CFLAG)
-LIB_CFLAGS=$(INC) $(CFLAG) $(LIB_CFLAG)
-SHLIB_CFLAGS=$(INC) $(CFLAG) $(LIB_CFLAG) $(SHLIB_CFLAG)
-LIBS_DEP=$(O_CRYPTO) $(O_RSAGLUE) $(O_SSL)
-
-#############################################
-HEADER=$(INCL_D)\cryptlib.h \
-       $(INCL_D)\buildinf.h $(INCL_D)\md5_locl.h $(INCL_D)\sha_locl.h \
-       $(INCL_D)\rmd_locl.h $(INCL_D)\rmdconst.h $(INCL_D)\des_locl.h \
-       $(INCL_D)\rpc_des.h $(INCL_D)\podd.h $(INCL_D)\sk.h \
-       $(INCL_D)\spr.h $(INCL_D)\des_ver.h $(INCL_D)\rc2_locl.h \
-       $(INCL_D)\rc4_locl.h $(INCL_D)\rc5_locl.h $(INCL_D)\idea_lcl.h \
-       $(INCL_D)\bf_pi.h $(INCL_D)\bf_locl.h $(INCL_D)\cast_s.h \
-       $(INCL_D)\cast_lcl.h $(INCL_D)\bn_lcl.h $(INCL_D)\bn_prime.h \
-       $(INCL_D)\bss_file.c $(INCL_D)\obj_dat.h $(INCL_D)\conf_lcl.h \
-       $(INCL_D)\ssl_locl.h $(INCL_D)\apps.h $(INCL_D)\progs.h \
-       $(INCL_D)\s_apps.h $(INCL_D)\testdsa.h $(INCL_D)\testrsa.h
-
-EXHEADER=$(INCO_D)\e_os.h \
-       $(INCO_D)\e_os2.h $(INCO_D)\crypto.h $(INCO_D)\tmdiff.h \
-       $(INCO_D)\opensslv.h $(INCO_D)\opensslconf.h $(INCO_D)\ebcdic.h \
-       $(INCO_D)\md2.h $(INCO_D)\md5.h $(INCO_D)\sha.h \
-       $(INCO_D)\mdc2.h $(INCO_D)\hmac.h $(INCO_D)\ripemd.h \
-       $(INCO_D)\des.h $(INCO_D)\rc2.h $(INCO_D)\rc4.h \
-       $(INCO_D)\rc5.h $(INCO_D)\idea.h $(INCO_D)\blowfish.h \
-       $(INCO_D)\cast.h $(INCO_D)\bn.h $(INCO_D)\rsa.h \
-       $(INCO_D)\dsa.h $(INCO_D)\dh.h $(INCO_D)\buffer.h \
-       $(INCO_D)\bio.h $(INCO_D)\stack.h $(INCO_D)\safestack.h \
-       $(INCO_D)\lhash.h $(INCO_D)\rand.h $(INCO_D)\err.h \
-       $(INCO_D)\objects.h $(INCO_D)\evp.h $(INCO_D)\asn1.h \
-       $(INCO_D)\asn1_mac.h $(INCO_D)\pem.h $(INCO_D)\pem2.h \
-       $(INCO_D)\x509.h $(INCO_D)\x509_vfy.h $(INCO_D)\x509v3.h \
-       $(INCO_D)\conf.h $(INCO_D)\txt_db.h $(INCO_D)\pkcs7.h \
-       $(INCO_D)\pkcs12.h $(INCO_D)\comp.h $(INCO_D)\ssl.h \
-       $(INCO_D)\ssl2.h $(INCO_D)\ssl3.h $(INCO_D)\ssl23.h \
-       $(INCO_D)\tls1.h $(INCO_D)\rsaref.h
-
-T_OBJ=$(OBJ_D)\md2test.obj \
-       $(OBJ_D)\md5test.obj $(OBJ_D)\shatest.obj $(OBJ_D)\sha1test.obj \
-       $(OBJ_D)\mdc2test.obj $(OBJ_D)\hmactest.obj $(OBJ_D)\rmdtest.obj \
-       $(OBJ_D)\destest.obj $(OBJ_D)\rc2test.obj $(OBJ_D)\rc4test.obj \
-       $(OBJ_D)\rc5test.obj $(OBJ_D)\ideatest.obj $(OBJ_D)\bftest.obj \
-       $(OBJ_D)\casttest.obj $(OBJ_D)\bntest.obj $(OBJ_D)\exptest.obj \
-       $(OBJ_D)\rsa_oaep_test.obj $(OBJ_D)\dsatest.obj $(OBJ_D)\dhtest.obj \
-       $(OBJ_D)\randtest.obj $(OBJ_D)\ssltest.obj
-
-E_OBJ=$(OBJ_D)\verify.obj \
-       $(OBJ_D)\asn1pars.obj $(OBJ_D)\req.obj $(OBJ_D)\dgst.obj \
-       $(OBJ_D)\dh.obj $(OBJ_D)\enc.obj $(OBJ_D)\gendh.obj \
-       $(OBJ_D)\errstr.obj $(OBJ_D)\ca.obj $(OBJ_D)\pkcs7.obj \
-       $(OBJ_D)\crl2p7.obj $(OBJ_D)\crl.obj $(OBJ_D)\rsa.obj \
-       $(OBJ_D)\dsa.obj $(OBJ_D)\dsaparam.obj $(OBJ_D)\x509.obj \
-       $(OBJ_D)\genrsa.obj $(OBJ_D)\gendsa.obj $(OBJ_D)\s_server.obj \
-       $(OBJ_D)\s_client.obj $(OBJ_D)\speed.obj $(OBJ_D)\s_time.obj \
-       $(OBJ_D)\apps.obj $(OBJ_D)\s_cb.obj $(OBJ_D)\s_socket.obj \
-       $(OBJ_D)\version.obj $(OBJ_D)\sess_id.obj $(OBJ_D)\ciphers.obj \
-       $(OBJ_D)\nseq.obj $(OBJ_D)\pkcs12.obj $(OBJ_D)\pkcs8.obj \
-       $(OBJ_D)\openssl.obj
-
-CRYPTOOBJ=$(OBJ_D)\cryptlib.obj \
-       $(OBJ_D)\mem.obj $(OBJ_D)\cversion.obj $(OBJ_D)\ex_data.obj \
-       $(OBJ_D)\tmdiff.obj $(OBJ_D)\cpt_err.obj $(OBJ_D)\md2_dgst.obj \
-       $(OBJ_D)\md2_one.obj $(OBJ_D)\md5_dgst.obj $(OBJ_D)\md5_one.obj \
-       $(OBJ_D)\sha_dgst.obj $(OBJ_D)\sha1dgst.obj $(OBJ_D)\sha_one.obj \
-       $(OBJ_D)\sha1_one.obj $(OBJ_D)\mdc2dgst.obj $(OBJ_D)\mdc2_one.obj \
-       $(OBJ_D)\hmac.obj $(OBJ_D)\rmd_dgst.obj $(OBJ_D)\rmd_one.obj \
-       $(OBJ_D)\set_key.obj $(OBJ_D)\ecb_enc.obj $(OBJ_D)\cbc_enc.obj \
-       $(OBJ_D)\ecb3_enc.obj $(OBJ_D)\cfb64enc.obj $(OBJ_D)\cfb64ede.obj \
-       $(OBJ_D)\cfb_enc.obj $(OBJ_D)\ofb64ede.obj $(OBJ_D)\enc_read.obj \
-       $(OBJ_D)\enc_writ.obj $(OBJ_D)\ofb64enc.obj $(OBJ_D)\ofb_enc.obj \
-       $(OBJ_D)\str2key.obj $(OBJ_D)\pcbc_enc.obj $(OBJ_D)\qud_cksm.obj \
-       $(OBJ_D)\rand_key.obj $(OBJ_D)\des_enc.obj $(OBJ_D)\fcrypt_b.obj \
-       $(OBJ_D)\read2pwd.obj $(OBJ_D)\fcrypt.obj $(OBJ_D)\xcbc_enc.obj \
-       $(OBJ_D)\read_pwd.obj $(OBJ_D)\rpc_enc.obj $(OBJ_D)\cbc_cksm.obj \
-       $(OBJ_D)\supp.obj $(OBJ_D)\ede_cbcm_enc.obj $(OBJ_D)\rc2_ecb.obj \
-       $(OBJ_D)\rc2_skey.obj $(OBJ_D)\rc2_cbc.obj $(OBJ_D)\rc2cfb64.obj \
-       $(OBJ_D)\rc2ofb64.obj $(OBJ_D)\rc4_skey.obj $(OBJ_D)\rc4_enc.obj \
-       $(OBJ_D)\rc5_skey.obj $(OBJ_D)\rc5_ecb.obj $(OBJ_D)\rc5_enc.obj \
-       $(OBJ_D)\rc5cfb64.obj $(OBJ_D)\rc5ofb64.obj $(OBJ_D)\i_cbc.obj \
-       $(OBJ_D)\i_cfb64.obj $(OBJ_D)\i_ofb64.obj $(OBJ_D)\i_ecb.obj \
-       $(OBJ_D)\i_skey.obj $(OBJ_D)\bf_skey.obj $(OBJ_D)\bf_ecb.obj \
-       $(OBJ_D)\bf_enc.obj $(OBJ_D)\bf_cfb64.obj $(OBJ_D)\bf_ofb64.obj \
-       $(OBJ_D)\c_skey.obj $(OBJ_D)\c_ecb.obj $(OBJ_D)\c_enc.obj \
-       $(OBJ_D)\c_cfb64.obj $(OBJ_D)\c_ofb64.obj $(OBJ_D)\bn_add.obj \
-       $(OBJ_D)\bn_div.obj $(OBJ_D)\bn_exp.obj $(OBJ_D)\bn_lib.obj \
-       $(OBJ_D)\bn_mul.obj $(OBJ_D)\bn_print.obj $(OBJ_D)\bn_rand.obj \
-       $(OBJ_D)\bn_shift.obj $(OBJ_D)\bn_word.obj $(OBJ_D)\bn_blind.obj \
-       $(OBJ_D)\bn_gcd.obj $(OBJ_D)\bn_prime.obj $(OBJ_D)\bn_err.obj \
-       $(OBJ_D)\bn_sqr.obj $(OBJ_D)\bn_asm.obj $(OBJ_D)\bn_recp.obj \
-       $(OBJ_D)\bn_mont.obj $(OBJ_D)\bn_mpi.obj $(OBJ_D)\bn_exp2.obj \
-       $(OBJ_D)\rsa_eay.obj $(OBJ_D)\rsa_gen.obj $(OBJ_D)\rsa_lib.obj \
-       $(OBJ_D)\rsa_sign.obj $(OBJ_D)\rsa_saos.obj $(OBJ_D)\rsa_err.obj \
-       $(OBJ_D)\rsa_pk1.obj $(OBJ_D)\rsa_ssl.obj $(OBJ_D)\rsa_none.obj \
-       $(OBJ_D)\rsa_oaep.obj $(OBJ_D)\rsa_chk.obj $(OBJ_D)\dsa_gen.obj \
-       $(OBJ_D)\dsa_key.obj $(OBJ_D)\dsa_lib.obj $(OBJ_D)\dsa_asn1.obj \
-       $(OBJ_D)\dsa_vrf.obj $(OBJ_D)\dsa_sign.obj $(OBJ_D)\dsa_err.obj \
-       $(OBJ_D)\dh_gen.obj $(OBJ_D)\dh_key.obj $(OBJ_D)\dh_lib.obj \
-       $(OBJ_D)\dh_check.obj $(OBJ_D)\dh_err.obj $(OBJ_D)\buffer.obj \
-       $(OBJ_D)\buf_err.obj $(OBJ_D)\bio_lib.obj $(OBJ_D)\bio_cb.obj \
-       $(OBJ_D)\bio_err.obj $(OBJ_D)\bss_mem.obj $(OBJ_D)\bss_null.obj \
-       $(OBJ_D)\bss_fd.obj $(OBJ_D)\bss_file.obj $(OBJ_D)\bss_sock.obj \
-       $(OBJ_D)\bss_conn.obj $(OBJ_D)\bf_null.obj $(OBJ_D)\bf_buff.obj \
-       $(OBJ_D)\b_print.obj $(OBJ_D)\b_dump.obj $(OBJ_D)\b_sock.obj \
-       $(OBJ_D)\bss_acpt.obj $(OBJ_D)\bf_nbio.obj $(OBJ_D)\bss_log.obj \
-       $(OBJ_D)\bss_bio.obj $(OBJ_D)\stack.obj $(OBJ_D)\lhash.obj \
-       $(OBJ_D)\lh_stats.obj $(OBJ_D)\md_rand.obj $(OBJ_D)\randfile.obj \
-       $(OBJ_D)\rand_lib.obj $(OBJ_D)\err.obj $(OBJ_D)\err_all.obj \
-       $(OBJ_D)\err_prn.obj $(OBJ_D)\o_names.obj $(OBJ_D)\obj_dat.obj \
-       $(OBJ_D)\obj_lib.obj $(OBJ_D)\obj_err.obj $(OBJ_D)\encode.obj \
-       $(OBJ_D)\digest.obj $(OBJ_D)\evp_enc.obj $(OBJ_D)\evp_key.obj \
-       $(OBJ_D)\e_ecb_d.obj $(OBJ_D)\e_cbc_d.obj $(OBJ_D)\e_cfb_d.obj \
-       $(OBJ_D)\e_ofb_d.obj $(OBJ_D)\e_ecb_i.obj $(OBJ_D)\e_cbc_i.obj \
-       $(OBJ_D)\e_cfb_i.obj $(OBJ_D)\e_ofb_i.obj $(OBJ_D)\e_ecb_3d.obj \
-       $(OBJ_D)\e_cbc_3d.obj $(OBJ_D)\e_rc4.obj $(OBJ_D)\names.obj \
-       $(OBJ_D)\e_cfb_3d.obj $(OBJ_D)\e_ofb_3d.obj $(OBJ_D)\e_xcbc_d.obj \
-       $(OBJ_D)\e_ecb_r2.obj $(OBJ_D)\e_cbc_r2.obj $(OBJ_D)\e_cfb_r2.obj \
-       $(OBJ_D)\e_ofb_r2.obj $(OBJ_D)\e_ecb_bf.obj $(OBJ_D)\e_cbc_bf.obj \
-       $(OBJ_D)\e_cfb_bf.obj $(OBJ_D)\e_ofb_bf.obj $(OBJ_D)\e_ecb_c.obj \
-       $(OBJ_D)\e_cbc_c.obj $(OBJ_D)\e_cfb_c.obj $(OBJ_D)\e_ofb_c.obj \
-       $(OBJ_D)\e_ecb_r5.obj $(OBJ_D)\e_cbc_r5.obj $(OBJ_D)\e_cfb_r5.obj \
-       $(OBJ_D)\e_ofb_r5.obj $(OBJ_D)\m_null.obj $(OBJ_D)\m_md2.obj \
-       $(OBJ_D)\m_md5.obj $(OBJ_D)\m_sha.obj $(OBJ_D)\m_sha1.obj \
-       $(OBJ_D)\m_dss.obj $(OBJ_D)\m_dss1.obj $(OBJ_D)\m_mdc2.obj \
-       $(OBJ_D)\m_ripemd.obj $(OBJ_D)\p_open.obj $(OBJ_D)\p_seal.obj \
-       $(OBJ_D)\p_sign.obj $(OBJ_D)\p_verify.obj $(OBJ_D)\p_lib.obj \
-       $(OBJ_D)\p_enc.obj $(OBJ_D)\p_dec.obj $(OBJ_D)\bio_md.obj \
-       $(OBJ_D)\bio_b64.obj $(OBJ_D)\bio_enc.obj $(OBJ_D)\evp_err.obj \
-       $(OBJ_D)\e_null.obj $(OBJ_D)\c_all.obj $(OBJ_D)\evp_lib.obj \
-       $(OBJ_D)\bio_ok.obj $(OBJ_D)\evp_pkey.obj $(OBJ_D)\evp_pbe.obj \
-       $(OBJ_D)\p5_crpt.obj $(OBJ_D)\p5_crpt2.obj $(OBJ_D)\a_object.obj \
-       $(OBJ_D)\a_bitstr.obj $(OBJ_D)\a_utctm.obj $(OBJ_D)\a_gentm.obj \
-       $(OBJ_D)\a_time.obj $(OBJ_D)\a_int.obj $(OBJ_D)\a_octet.obj \
-       $(OBJ_D)\a_print.obj $(OBJ_D)\a_type.obj $(OBJ_D)\a_set.obj \
-       $(OBJ_D)\a_dup.obj $(OBJ_D)\a_d2i_fp.obj $(OBJ_D)\a_i2d_fp.obj \
-       $(OBJ_D)\a_bmp.obj $(OBJ_D)\a_enum.obj $(OBJ_D)\a_vis.obj \
-       $(OBJ_D)\a_utf8.obj $(OBJ_D)\a_sign.obj $(OBJ_D)\a_digest.obj \
-       $(OBJ_D)\a_verify.obj $(OBJ_D)\x_algor.obj $(OBJ_D)\x_val.obj \
-       $(OBJ_D)\x_pubkey.obj $(OBJ_D)\x_sig.obj $(OBJ_D)\x_req.obj \
-       $(OBJ_D)\x_attrib.obj $(OBJ_D)\x_name.obj $(OBJ_D)\x_cinf.obj \
-       $(OBJ_D)\x_x509.obj $(OBJ_D)\x_crl.obj $(OBJ_D)\x_info.obj \
-       $(OBJ_D)\x_spki.obj $(OBJ_D)\nsseq.obj $(OBJ_D)\d2i_r_pr.obj \
-       $(OBJ_D)\i2d_r_pr.obj $(OBJ_D)\d2i_r_pu.obj $(OBJ_D)\i2d_r_pu.obj \
-       $(OBJ_D)\d2i_s_pr.obj $(OBJ_D)\i2d_s_pr.obj $(OBJ_D)\d2i_s_pu.obj \
-       $(OBJ_D)\i2d_s_pu.obj $(OBJ_D)\d2i_pu.obj $(OBJ_D)\d2i_pr.obj \
-       $(OBJ_D)\i2d_pu.obj $(OBJ_D)\i2d_pr.obj $(OBJ_D)\t_req.obj \
-       $(OBJ_D)\t_x509.obj $(OBJ_D)\t_crl.obj $(OBJ_D)\t_pkey.obj \
-       $(OBJ_D)\p7_i_s.obj $(OBJ_D)\p7_signi.obj $(OBJ_D)\p7_signd.obj \
-       $(OBJ_D)\p7_recip.obj $(OBJ_D)\p7_enc_c.obj $(OBJ_D)\p7_evp.obj \
-       $(OBJ_D)\p7_dgst.obj $(OBJ_D)\p7_s_e.obj $(OBJ_D)\p7_enc.obj \
-       $(OBJ_D)\p7_lib.obj $(OBJ_D)\f_int.obj $(OBJ_D)\f_string.obj \
-       $(OBJ_D)\i2d_dhp.obj $(OBJ_D)\i2d_dsap.obj $(OBJ_D)\d2i_dhp.obj \
-       $(OBJ_D)\d2i_dsap.obj $(OBJ_D)\n_pkey.obj $(OBJ_D)\f_enum.obj \
-       $(OBJ_D)\a_hdr.obj $(OBJ_D)\x_pkey.obj $(OBJ_D)\a_bool.obj \
-       $(OBJ_D)\x_exten.obj $(OBJ_D)\asn1_par.obj $(OBJ_D)\asn1_lib.obj \
-       $(OBJ_D)\asn1_err.obj $(OBJ_D)\a_meth.obj $(OBJ_D)\a_bytes.obj \
-       $(OBJ_D)\evp_asn1.obj $(OBJ_D)\asn_pack.obj $(OBJ_D)\p5_pbe.obj \
-       $(OBJ_D)\p5_pbev2.obj $(OBJ_D)\p8_pkey.obj $(OBJ_D)\pem_sign.obj \
-       $(OBJ_D)\pem_seal.obj $(OBJ_D)\pem_info.obj $(OBJ_D)\pem_lib.obj \
-       $(OBJ_D)\pem_all.obj $(OBJ_D)\pem_err.obj $(OBJ_D)\x509_def.obj \
-       $(OBJ_D)\x509_d2.obj $(OBJ_D)\x509_r2x.obj $(OBJ_D)\x509_cmp.obj \
-       $(OBJ_D)\x509_obj.obj $(OBJ_D)\x509_req.obj $(OBJ_D)\x509_vfy.obj \
-       $(OBJ_D)\x509_set.obj $(OBJ_D)\x509rset.obj $(OBJ_D)\x509_err.obj \
-       $(OBJ_D)\x509name.obj $(OBJ_D)\x509_v3.obj $(OBJ_D)\x509_ext.obj \
-       $(OBJ_D)\x509type.obj $(OBJ_D)\x509_lu.obj $(OBJ_D)\x_all.obj \
-       $(OBJ_D)\x509_txt.obj $(OBJ_D)\by_file.obj $(OBJ_D)\by_dir.obj \
-       $(OBJ_D)\v3_bcons.obj $(OBJ_D)\v3_bitst.obj $(OBJ_D)\v3_conf.obj \
-       $(OBJ_D)\v3_extku.obj $(OBJ_D)\v3_ia5.obj $(OBJ_D)\v3_lib.obj \
-       $(OBJ_D)\v3_prn.obj $(OBJ_D)\v3_utl.obj $(OBJ_D)\v3err.obj \
-       $(OBJ_D)\v3_genn.obj $(OBJ_D)\v3_alt.obj $(OBJ_D)\v3_skey.obj \
-       $(OBJ_D)\v3_akey.obj $(OBJ_D)\v3_pku.obj $(OBJ_D)\v3_int.obj \
-       $(OBJ_D)\v3_enum.obj $(OBJ_D)\v3_sxnet.obj $(OBJ_D)\v3_cpols.obj \
-       $(OBJ_D)\v3_crld.obj $(OBJ_D)\conf.obj $(OBJ_D)\conf_err.obj \
-       $(OBJ_D)\txt_db.obj $(OBJ_D)\pk7_lib.obj $(OBJ_D)\pkcs7err.obj \
-       $(OBJ_D)\pk7_doit.obj $(OBJ_D)\p12_add.obj $(OBJ_D)\p12_attr.obj \
-       $(OBJ_D)\p12_bags.obj $(OBJ_D)\p12_crpt.obj $(OBJ_D)\p12_crt.obj \
-       $(OBJ_D)\p12_decr.obj $(OBJ_D)\p12_init.obj $(OBJ_D)\p12_key.obj \
-       $(OBJ_D)\p12_kiss.obj $(OBJ_D)\p12_lib.obj $(OBJ_D)\p12_mac.obj \
-       $(OBJ_D)\p12_mutl.obj $(OBJ_D)\p12_sbag.obj $(OBJ_D)\p12_utl.obj \
-       $(OBJ_D)\pk12err.obj $(OBJ_D)\comp_lib.obj $(OBJ_D)\c_rle.obj \
-       $(OBJ_D)\c_zlib.obj
-
-SSLOBJ=$(OBJ_D)\s2_meth.obj \
-       $(OBJ_D)\s2_srvr.obj $(OBJ_D)\s2_clnt.obj $(OBJ_D)\s2_lib.obj \
-       $(OBJ_D)\s2_enc.obj $(OBJ_D)\s2_pkt.obj $(OBJ_D)\s3_meth.obj \
-       $(OBJ_D)\s3_srvr.obj $(OBJ_D)\s3_clnt.obj $(OBJ_D)\s3_lib.obj \
-       $(OBJ_D)\s3_enc.obj $(OBJ_D)\s3_pkt.obj $(OBJ_D)\s3_both.obj \
-       $(OBJ_D)\s23_meth.obj $(OBJ_D)\s23_srvr.obj $(OBJ_D)\s23_clnt.obj \
-       $(OBJ_D)\s23_lib.obj $(OBJ_D)\s23_pkt.obj $(OBJ_D)\t1_meth.obj \
-       $(OBJ_D)\t1_srvr.obj $(OBJ_D)\t1_clnt.obj $(OBJ_D)\t1_lib.obj \
-       $(OBJ_D)\t1_enc.obj $(OBJ_D)\ssl_lib.obj $(OBJ_D)\ssl_err2.obj \
-       $(OBJ_D)\ssl_cert.obj $(OBJ_D)\ssl_sess.obj $(OBJ_D)\ssl_ciph.obj \
-       $(OBJ_D)\ssl_stat.obj $(OBJ_D)\ssl_rsa.obj $(OBJ_D)\ssl_asn1.obj \
-       $(OBJ_D)\ssl_txt.obj $(OBJ_D)\ssl_algs.obj $(OBJ_D)\bio_ssl.obj \
-       $(OBJ_D)\ssl_err.obj
-
-RSAGLUEOBJ=$(OBJ_D)\rsaref.obj \
-       $(OBJ_D)\rsar_err.obj
-
-T_EXE=$(TEST_D)\md2test.exe \
-       $(TEST_D)\md5test.exe $(TEST_D)\shatest.exe $(TEST_D)\sha1test.exe \
-       $(TEST_D)\mdc2test.exe $(TEST_D)\hmactest.exe $(TEST_D)\rmdtest.exe \
-       $(TEST_D)\destest.exe $(TEST_D)\rc2test.exe $(TEST_D)\rc4test.exe \
-       $(TEST_D)\rc5test.exe $(TEST_D)\ideatest.exe $(TEST_D)\bftest.exe \
-       $(TEST_D)\casttest.exe $(TEST_D)\bntest.exe $(TEST_D)\exptest.exe \
-       $(TEST_D)\rsa_oaep_test.exe $(TEST_D)\dsatest.exe $(TEST_D)\dhtest.exe \
-       $(TEST_D)\randtest.exe $(TEST_D)\ssltest.exe
-
-###################################################################
-all: banner $(TMP_D) $(BIN_D) $(TEST_D) $(LIB_D) $(INCO_D) headers lib exe
-
-banner:
-
-
-$(TMP_D):
-       $(MKDIR) $(TMP_D)
-# NB: uncomment out these lines if BIN_D, TEST_D and LIB_D are different
-#$(BIN_D):
-#      $(MKDIR) $(BIN_D)
-#
-#$(TEST_D):
-#      $(MKDIR) $(TEST_D)
-
-$(LIB_D):
-       $(MKDIR) $(LIB_D)
-
-$(INCO_D): $(INC_D)
-       $(MKDIR) $(INCO_D)
-
-$(INC_D):
-       $(MKDIR) $(INC_D)
-
-headers: $(HEADER) $(EXHEADER)
-
-lib: $(LIBS_DEP)
-
-exe: $(T_EXE) $(BIN_D)\$(E_EXE).exe
-
-install:
-       $(MKDIR) $(INSTALLTOP)
-       $(MKDIR) $(INSTALLTOP)\bin
-       $(MKDIR) $(INSTALLTOP)\include
-       $(MKDIR) $(INSTALLTOP)\include\openssl
-       $(MKDIR) $(INSTALLTOP)\lib
-       $(CP) $(INCO_D)\*.[ch] $(INSTALLTOP)\include\openssl
-       $(CP) $(BIN_D)\$(E_EXE).exe $(INSTALLTOP)\bin
-       $(CP) $(O_SSL) $(INSTALLTOP)\lib
-       $(CP) $(O_CRYPTO) $(INSTALLTOP)\lib
-
-clean:
-       $(RM) $(TMP_D)\*.*
-
-vclean:
-       $(RM) $(TMP_D)\*.*
-       $(RM) $(OUT_D)\*.*
-
-$(INCL_D)\cryptlib.h: $(SRC_D)\crypto\cryptlib.h
-       $(CP) $(SRC_D)\crypto\cryptlib.h $(INCL_D)\cryptlib.h
-
-$(INCL_D)\buildinf.h: $(SRC_D)\crypto\buildinf.h
-       $(CP) $(SRC_D)\crypto\buildinf.h $(INCL_D)\buildinf.h
-
-$(INCL_D)\md5_locl.h: $(SRC_D)\crypto\md5\md5_locl.h
-       $(CP) $(SRC_D)\crypto\md5\md5_locl.h $(INCL_D)\md5_locl.h
-
-$(INCL_D)\sha_locl.h: $(SRC_D)\crypto\sha\sha_locl.h
-       $(CP) $(SRC_D)\crypto\sha\sha_locl.h $(INCL_D)\sha_locl.h
-
-$(INCL_D)\rmd_locl.h: $(SRC_D)\crypto\ripemd\rmd_locl.h
-       $(CP) $(SRC_D)\crypto\ripemd\rmd_locl.h $(INCL_D)\rmd_locl.h
-
-$(INCL_D)\rmdconst.h: $(SRC_D)\crypto\ripemd\rmdconst.h
-       $(CP) $(SRC_D)\crypto\ripemd\rmdconst.h $(INCL_D)\rmdconst.h
-
-$(INCL_D)\des_locl.h: $(SRC_D)\crypto\des\des_locl.h
-       $(CP) $(SRC_D)\crypto\des\des_locl.h $(INCL_D)\des_locl.h
-
-$(INCL_D)\rpc_des.h: $(SRC_D)\crypto\des\rpc_des.h
-       $(CP) $(SRC_D)\crypto\des\rpc_des.h $(INCL_D)\rpc_des.h
-
-$(INCL_D)\podd.h: $(SRC_D)\crypto\des\podd.h
-       $(CP) $(SRC_D)\crypto\des\podd.h $(INCL_D)\podd.h
-
-$(INCL_D)\sk.h: $(SRC_D)\crypto\des\sk.h
-       $(CP) $(SRC_D)\crypto\des\sk.h $(INCL_D)\sk.h
-
-$(INCL_D)\spr.h: $(SRC_D)\crypto\des\spr.h
-       $(CP) $(SRC_D)\crypto\des\spr.h $(INCL_D)\spr.h
-
-$(INCL_D)\des_ver.h: $(SRC_D)\crypto\des\des_ver.h
-       $(CP) $(SRC_D)\crypto\des\des_ver.h $(INCL_D)\des_ver.h
-
-$(INCL_D)\rc2_locl.h: $(SRC_D)\crypto\rc2\rc2_locl.h
-       $(CP) $(SRC_D)\crypto\rc2\rc2_locl.h $(INCL_D)\rc2_locl.h
-
-$(INCL_D)\rc4_locl.h: $(SRC_D)\crypto\rc4\rc4_locl.h
-       $(CP) $(SRC_D)\crypto\rc4\rc4_locl.h $(INCL_D)\rc4_locl.h
-
-$(INCL_D)\rc5_locl.h: $(SRC_D)\crypto\rc5\rc5_locl.h
-       $(CP) $(SRC_D)\crypto\rc5\rc5_locl.h $(INCL_D)\rc5_locl.h
-
-$(INCL_D)\idea_lcl.h: $(SRC_D)\crypto\idea\idea_lcl.h
-       $(CP) $(SRC_D)\crypto\idea\idea_lcl.h $(INCL_D)\idea_lcl.h
-
-$(INCL_D)\bf_pi.h: $(SRC_D)\crypto\bf\bf_pi.h
-       $(CP) $(SRC_D)\crypto\bf\bf_pi.h $(INCL_D)\bf_pi.h
-
-$(INCL_D)\bf_locl.h: $(SRC_D)\crypto\bf\bf_locl.h
-       $(CP) $(SRC_D)\crypto\bf\bf_locl.h $(INCL_D)\bf_locl.h
-
-$(INCL_D)\cast_s.h: $(SRC_D)\crypto\cast\cast_s.h
-       $(CP) $(SRC_D)\crypto\cast\cast_s.h $(INCL_D)\cast_s.h
-
-$(INCL_D)\cast_lcl.h: $(SRC_D)\crypto\cast\cast_lcl.h
-       $(CP) $(SRC_D)\crypto\cast\cast_lcl.h $(INCL_D)\cast_lcl.h
-
-$(INCL_D)\bn_lcl.h: $(SRC_D)\crypto\bn\bn_lcl.h
-       $(CP) $(SRC_D)\crypto\bn\bn_lcl.h $(INCL_D)\bn_lcl.h
-
-$(INCL_D)\bn_prime.h: $(SRC_D)\crypto\bn\bn_prime.h
-       $(CP) $(SRC_D)\crypto\bn\bn_prime.h $(INCL_D)\bn_prime.h
-
-$(INCL_D)\bss_file.c: $(SRC_D)\crypto\bio\bss_file.c
-       $(CP) $(SRC_D)\crypto\bio\bss_file.c $(INCL_D)\bss_file.c
-
-$(INCL_D)\obj_dat.h: $(SRC_D)\crypto\objects\obj_dat.h
-       $(CP) $(SRC_D)\crypto\objects\obj_dat.h $(INCL_D)\obj_dat.h
-
-$(INCL_D)\conf_lcl.h: $(SRC_D)\crypto\conf\conf_lcl.h
-       $(CP) $(SRC_D)\crypto\conf\conf_lcl.h $(INCL_D)\conf_lcl.h
-
-$(INCL_D)\ssl_locl.h: $(SRC_D)\ssl\ssl_locl.h
-       $(CP) $(SRC_D)\ssl\ssl_locl.h $(INCL_D)\ssl_locl.h
-
-$(INCL_D)\apps.h: $(SRC_D)\apps\apps.h
-       $(CP) $(SRC_D)\apps\apps.h $(INCL_D)\apps.h
-
-$(INCL_D)\progs.h: $(SRC_D)\apps\progs.h
-       $(CP) $(SRC_D)\apps\progs.h $(INCL_D)\progs.h
-
-$(INCL_D)\s_apps.h: $(SRC_D)\apps\s_apps.h
-       $(CP) $(SRC_D)\apps\s_apps.h $(INCL_D)\s_apps.h
-
-$(INCL_D)\testdsa.h: $(SRC_D)\apps\testdsa.h
-       $(CP) $(SRC_D)\apps\testdsa.h $(INCL_D)\testdsa.h
-
-$(INCL_D)\testrsa.h: $(SRC_D)\apps\testrsa.h
-       $(CP) $(SRC_D)\apps\testrsa.h $(INCL_D)\testrsa.h
-
-$(INCO_D)\e_os.h: $(SRC_D)\.\e_os.h
-       $(CP) $(SRC_D)\.\e_os.h $(INCO_D)\e_os.h
-
-$(INCO_D)\e_os2.h: $(SRC_D)\.\e_os2.h
-       $(CP) $(SRC_D)\.\e_os2.h $(INCO_D)\e_os2.h
-
-$(INCO_D)\crypto.h: $(SRC_D)\crypto\crypto.h
-       $(CP) $(SRC_D)\crypto\crypto.h $(INCO_D)\crypto.h
-
-$(INCO_D)\tmdiff.h: $(SRC_D)\crypto\tmdiff.h
-       $(CP) $(SRC_D)\crypto\tmdiff.h $(INCO_D)\tmdiff.h
-
-$(INCO_D)\opensslv.h: $(SRC_D)\crypto\opensslv.h
-       $(CP) $(SRC_D)\crypto\opensslv.h $(INCO_D)\opensslv.h
-
-$(INCO_D)\opensslconf.h: $(SRC_D)\crypto\opensslconf.h
-       $(CP) $(SRC_D)\crypto\opensslconf.h $(INCO_D)\opensslconf.h
-
-$(INCO_D)\ebcdic.h: $(SRC_D)\crypto\ebcdic.h
-       $(CP) $(SRC_D)\crypto\ebcdic.h $(INCO_D)\ebcdic.h
-
-$(INCO_D)\md2.h: $(SRC_D)\crypto\md2\md2.h
-       $(CP) $(SRC_D)\crypto\md2\md2.h $(INCO_D)\md2.h
-
-$(INCO_D)\md5.h: $(SRC_D)\crypto\md5\md5.h
-       $(CP) $(SRC_D)\crypto\md5\md5.h $(INCO_D)\md5.h
-
-$(INCO_D)\sha.h: $(SRC_D)\crypto\sha\sha.h
-       $(CP) $(SRC_D)\crypto\sha\sha.h $(INCO_D)\sha.h
-
-$(INCO_D)\mdc2.h: $(SRC_D)\crypto\mdc2\mdc2.h
-       $(CP) $(SRC_D)\crypto\mdc2\mdc2.h $(INCO_D)\mdc2.h
-
-$(INCO_D)\hmac.h: $(SRC_D)\crypto\hmac\hmac.h
-       $(CP) $(SRC_D)\crypto\hmac\hmac.h $(INCO_D)\hmac.h
-
-$(INCO_D)\ripemd.h: $(SRC_D)\crypto\ripemd\ripemd.h
-       $(CP) $(SRC_D)\crypto\ripemd\ripemd.h $(INCO_D)\ripemd.h
-
-$(INCO_D)\des.h: $(SRC_D)\crypto\des\des.h
-       $(CP) $(SRC_D)\crypto\des\des.h $(INCO_D)\des.h
-
-$(INCO_D)\rc2.h: $(SRC_D)\crypto\rc2\rc2.h
-       $(CP) $(SRC_D)\crypto\rc2\rc2.h $(INCO_D)\rc2.h
-
-$(INCO_D)\rc4.h: $(SRC_D)\crypto\rc4\rc4.h
-       $(CP) $(SRC_D)\crypto\rc4\rc4.h $(INCO_D)\rc4.h
-
-$(INCO_D)\rc5.h: $(SRC_D)\crypto\rc5\rc5.h
-       $(CP) $(SRC_D)\crypto\rc5\rc5.h $(INCO_D)\rc5.h
-
-$(INCO_D)\idea.h: $(SRC_D)\crypto\idea\idea.h
-       $(CP) $(SRC_D)\crypto\idea\idea.h $(INCO_D)\idea.h
-
-$(INCO_D)\blowfish.h: $(SRC_D)\crypto\bf\blowfish.h
-       $(CP) $(SRC_D)\crypto\bf\blowfish.h $(INCO_D)\blowfish.h
-
-$(INCO_D)\cast.h: $(SRC_D)\crypto\cast\cast.h
-       $(CP) $(SRC_D)\crypto\cast\cast.h $(INCO_D)\cast.h
-
-$(INCO_D)\bn.h: $(SRC_D)\crypto\bn\bn.h
-       $(CP) $(SRC_D)\crypto\bn\bn.h $(INCO_D)\bn.h
-
-$(INCO_D)\rsa.h: $(SRC_D)\crypto\rsa\rsa.h
-       $(CP) $(SRC_D)\crypto\rsa\rsa.h $(INCO_D)\rsa.h
-
-$(INCO_D)\dsa.h: $(SRC_D)\crypto\dsa\dsa.h
-       $(CP) $(SRC_D)\crypto\dsa\dsa.h $(INCO_D)\dsa.h
-
-$(INCO_D)\dh.h: $(SRC_D)\crypto\dh\dh.h
-       $(CP) $(SRC_D)\crypto\dh\dh.h $(INCO_D)\dh.h
-
-$(INCO_D)\buffer.h: $(SRC_D)\crypto\buffer\buffer.h
-       $(CP) $(SRC_D)\crypto\buffer\buffer.h $(INCO_D)\buffer.h
-
-$(INCO_D)\bio.h: $(SRC_D)\crypto\bio\bio.h
-       $(CP) $(SRC_D)\crypto\bio\bio.h $(INCO_D)\bio.h
-
-$(INCO_D)\stack.h: $(SRC_D)\crypto\stack\stack.h
-       $(CP) $(SRC_D)\crypto\stack\stack.h $(INCO_D)\stack.h
-
-$(INCO_D)\safestack.h: $(SRC_D)\crypto\stack\safestack.h
-       $(CP) $(SRC_D)\crypto\stack\safestack.h $(INCO_D)\safestack.h
-
-$(INCO_D)\lhash.h: $(SRC_D)\crypto\lhash\lhash.h
-       $(CP) $(SRC_D)\crypto\lhash\lhash.h $(INCO_D)\lhash.h
-
-$(INCO_D)\rand.h: $(SRC_D)\crypto\rand\rand.h
-       $(CP) $(SRC_D)\crypto\rand\rand.h $(INCO_D)\rand.h
-
-$(INCO_D)\err.h: $(SRC_D)\crypto\err\err.h
-       $(CP) $(SRC_D)\crypto\err\err.h $(INCO_D)\err.h
-
-$(INCO_D)\objects.h: $(SRC_D)\crypto\objects\objects.h
-       $(CP) $(SRC_D)\crypto\objects\objects.h $(INCO_D)\objects.h
-
-$(INCO_D)\evp.h: $(SRC_D)\crypto\evp\evp.h
-       $(CP) $(SRC_D)\crypto\evp\evp.h $(INCO_D)\evp.h
-
-$(INCO_D)\asn1.h: $(SRC_D)\crypto\asn1\asn1.h
-       $(CP) $(SRC_D)\crypto\asn1\asn1.h $(INCO_D)\asn1.h
-
-$(INCO_D)\asn1_mac.h: $(SRC_D)\crypto\asn1\asn1_mac.h
-       $(CP) $(SRC_D)\crypto\asn1\asn1_mac.h $(INCO_D)\asn1_mac.h
-
-$(INCO_D)\pem.h: $(SRC_D)\crypto\pem\pem.h
-       $(CP) $(SRC_D)\crypto\pem\pem.h $(INCO_D)\pem.h
-
-$(INCO_D)\pem2.h: $(SRC_D)\crypto\pem\pem2.h
-       $(CP) $(SRC_D)\crypto\pem\pem2.h $(INCO_D)\pem2.h
-
-$(INCO_D)\x509.h: $(SRC_D)\crypto\x509\x509.h
-       $(CP) $(SRC_D)\crypto\x509\x509.h $(INCO_D)\x509.h
-
-$(INCO_D)\x509_vfy.h: $(SRC_D)\crypto\x509\x509_vfy.h
-       $(CP) $(SRC_D)\crypto\x509\x509_vfy.h $(INCO_D)\x509_vfy.h
-
-$(INCO_D)\x509v3.h: $(SRC_D)\crypto\x509v3\x509v3.h
-       $(CP) $(SRC_D)\crypto\x509v3\x509v3.h $(INCO_D)\x509v3.h
-
-$(INCO_D)\conf.h: $(SRC_D)\crypto\conf\conf.h
-       $(CP) $(SRC_D)\crypto\conf\conf.h $(INCO_D)\conf.h
-
-$(INCO_D)\txt_db.h: $(SRC_D)\crypto\txt_db\txt_db.h
-       $(CP) $(SRC_D)\crypto\txt_db\txt_db.h $(INCO_D)\txt_db.h
-
-$(INCO_D)\pkcs7.h: $(SRC_D)\crypto\pkcs7\pkcs7.h
-       $(CP) $(SRC_D)\crypto\pkcs7\pkcs7.h $(INCO_D)\pkcs7.h
-
-$(INCO_D)\pkcs12.h: $(SRC_D)\crypto\pkcs12\pkcs12.h
-       $(CP) $(SRC_D)\crypto\pkcs12\pkcs12.h $(INCO_D)\pkcs12.h
-
-$(INCO_D)\comp.h: $(SRC_D)\crypto\comp\comp.h
-       $(CP) $(SRC_D)\crypto\comp\comp.h $(INCO_D)\comp.h
-
-$(INCO_D)\ssl.h: $(SRC_D)\ssl\ssl.h
-       $(CP) $(SRC_D)\ssl\ssl.h $(INCO_D)\ssl.h
-
-$(INCO_D)\ssl2.h: $(SRC_D)\ssl\ssl2.h
-       $(CP) $(SRC_D)\ssl\ssl2.h $(INCO_D)\ssl2.h
-
-$(INCO_D)\ssl3.h: $(SRC_D)\ssl\ssl3.h
-       $(CP) $(SRC_D)\ssl\ssl3.h $(INCO_D)\ssl3.h
-
-$(INCO_D)\ssl23.h: $(SRC_D)\ssl\ssl23.h
-       $(CP) $(SRC_D)\ssl\ssl23.h $(INCO_D)\ssl23.h
-
-$(INCO_D)\tls1.h: $(SRC_D)\ssl\tls1.h
-       $(CP) $(SRC_D)\ssl\tls1.h $(INCO_D)\tls1.h
-
-$(INCO_D)\rsaref.h: $(SRC_D)\rsaref\rsaref.h
-       $(CP) $(SRC_D)\rsaref\rsaref.h $(INCO_D)\rsaref.h
-
-$(OBJ_D)\md2test.obj: $(SRC_D)\crypto\md2\md2test.c
-       $(CC) /Fo$(OBJ_D)\md2test.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\md2\md2test.c
-
-$(OBJ_D)\md5test.obj: $(SRC_D)\crypto\md5\md5test.c
-       $(CC) /Fo$(OBJ_D)\md5test.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\md5\md5test.c
-
-$(OBJ_D)\shatest.obj: $(SRC_D)\crypto\sha\shatest.c
-       $(CC) /Fo$(OBJ_D)\shatest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\sha\shatest.c
-
-$(OBJ_D)\sha1test.obj: $(SRC_D)\crypto\sha\sha1test.c
-       $(CC) /Fo$(OBJ_D)\sha1test.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\sha\sha1test.c
-
-$(OBJ_D)\mdc2test.obj: $(SRC_D)\crypto\mdc2\mdc2test.c
-       $(CC) /Fo$(OBJ_D)\mdc2test.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\mdc2\mdc2test.c
-
-$(OBJ_D)\hmactest.obj: $(SRC_D)\crypto\hmac\hmactest.c
-       $(CC) /Fo$(OBJ_D)\hmactest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\hmac\hmactest.c
-
-$(OBJ_D)\rmdtest.obj: $(SRC_D)\crypto\ripemd\rmdtest.c
-       $(CC) /Fo$(OBJ_D)\rmdtest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\ripemd\rmdtest.c
-
-$(OBJ_D)\destest.obj: $(SRC_D)\crypto\des\destest.c
-       $(CC) /Fo$(OBJ_D)\destest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\des\destest.c
-
-$(OBJ_D)\rc2test.obj: $(SRC_D)\crypto\rc2\rc2test.c
-       $(CC) /Fo$(OBJ_D)\rc2test.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\rc2\rc2test.c
-
-$(OBJ_D)\rc4test.obj: $(SRC_D)\crypto\rc4\rc4test.c
-       $(CC) /Fo$(OBJ_D)\rc4test.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\rc4\rc4test.c
-
-$(OBJ_D)\rc5test.obj: $(SRC_D)\crypto\rc5\rc5test.c
-       $(CC) /Fo$(OBJ_D)\rc5test.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\rc5\rc5test.c
-
-$(OBJ_D)\ideatest.obj: $(SRC_D)\crypto\idea\ideatest.c
-       $(CC) /Fo$(OBJ_D)\ideatest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\idea\ideatest.c
-
-$(OBJ_D)\bftest.obj: $(SRC_D)\crypto\bf\bftest.c
-       $(CC) /Fo$(OBJ_D)\bftest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\bf\bftest.c
-
-$(OBJ_D)\casttest.obj: $(SRC_D)\crypto\cast\casttest.c
-       $(CC) /Fo$(OBJ_D)\casttest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\cast\casttest.c
-
-$(OBJ_D)\bntest.obj: $(SRC_D)\crypto\bn\bntest.c
-       $(CC) /Fo$(OBJ_D)\bntest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\bn\bntest.c
-
-$(OBJ_D)\exptest.obj: $(SRC_D)\crypto\bn\exptest.c
-       $(CC) /Fo$(OBJ_D)\exptest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\bn\exptest.c
-
-$(OBJ_D)\rsa_oaep_test.obj: $(SRC_D)\crypto\rsa\rsa_oaep_test.c
-       $(CC) /Fo$(OBJ_D)\rsa_oaep_test.obj $(APP_CFLAGS) -c 
$(SRC_D)\crypto\rsa\rsa_oaep_test.c
-
-$(OBJ_D)\dsatest.obj: $(SRC_D)\crypto\dsa\dsatest.c
-       $(CC) /Fo$(OBJ_D)\dsatest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\dsa\dsatest.c
-
-$(OBJ_D)\dhtest.obj: $(SRC_D)\crypto\dh\dhtest.c
-       $(CC) /Fo$(OBJ_D)\dhtest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\dh\dhtest.c
-
-$(OBJ_D)\randtest.obj: $(SRC_D)\crypto\rand\randtest.c
-       $(CC) /Fo$(OBJ_D)\randtest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\rand\randtest.c
-
-$(OBJ_D)\ssltest.obj: $(SRC_D)\ssl\ssltest.c
-       $(CC) /Fo$(OBJ_D)\ssltest.obj $(APP_CFLAGS) -c $(SRC_D)\ssl\ssltest.c
-
-$(OBJ_D)\verify.obj: $(SRC_D)\apps\verify.c
-       $(CC) /Fo$(OBJ_D)\verify.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\verify.c
-
-$(OBJ_D)\asn1pars.obj: $(SRC_D)\apps\asn1pars.c
-       $(CC) /Fo$(OBJ_D)\asn1pars.obj -DMONOLITH $(APP_CFLAGS) -c 
$(SRC_D)\apps\asn1pars.c
-
-$(OBJ_D)\req.obj: $(SRC_D)\apps\req.c
-       $(CC) /Fo$(OBJ_D)\req.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\req.c
-
-$(OBJ_D)\dgst.obj: $(SRC_D)\apps\dgst.c
-       $(CC) /Fo$(OBJ_D)\dgst.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\dgst.c
-
-$(OBJ_D)\dh.obj: $(SRC_D)\apps\dh.c
-       $(CC) /Fo$(OBJ_D)\dh.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\dh.c
-
-$(OBJ_D)\enc.obj: $(SRC_D)\apps\enc.c
-       $(CC) /Fo$(OBJ_D)\enc.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\enc.c
-
-$(OBJ_D)\gendh.obj: $(SRC_D)\apps\gendh.c
-       $(CC) /Fo$(OBJ_D)\gendh.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\gendh.c
-
-$(OBJ_D)\errstr.obj: $(SRC_D)\apps\errstr.c
-       $(CC) /Fo$(OBJ_D)\errstr.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\errstr.c
-
-$(OBJ_D)\ca.obj: $(SRC_D)\apps\ca.c
-       $(CC) /Fo$(OBJ_D)\ca.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\ca.c
-
-$(OBJ_D)\pkcs7.obj: $(SRC_D)\apps\pkcs7.c
-       $(CC) /Fo$(OBJ_D)\pkcs7.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\pkcs7.c
-
-$(OBJ_D)\crl2p7.obj: $(SRC_D)\apps\crl2p7.c
-       $(CC) /Fo$(OBJ_D)\crl2p7.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\crl2p7.c
-
-$(OBJ_D)\crl.obj: $(SRC_D)\apps\crl.c
-       $(CC) /Fo$(OBJ_D)\crl.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\crl.c
-
-$(OBJ_D)\rsa.obj: $(SRC_D)\apps\rsa.c
-       $(CC) /Fo$(OBJ_D)\rsa.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\rsa.c
-
-$(OBJ_D)\dsa.obj: $(SRC_D)\apps\dsa.c
-       $(CC) /Fo$(OBJ_D)\dsa.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\dsa.c
-
-$(OBJ_D)\dsaparam.obj: $(SRC_D)\apps\dsaparam.c
-       $(CC) /Fo$(OBJ_D)\dsaparam.obj -DMONOLITH $(APP_CFLAGS) -c 
$(SRC_D)\apps\dsaparam.c
-
-$(OBJ_D)\x509.obj: $(SRC_D)\apps\x509.c
-       $(CC) /Fo$(OBJ_D)\x509.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\x509.c
-
-$(OBJ_D)\genrsa.obj: $(SRC_D)\apps\genrsa.c
-       $(CC) /Fo$(OBJ_D)\genrsa.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\genrsa.c
-
-$(OBJ_D)\gendsa.obj: $(SRC_D)\apps\gendsa.c
-       $(CC) /Fo$(OBJ_D)\gendsa.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\gendsa.c
-
-$(OBJ_D)\s_server.obj: $(SRC_D)\apps\s_server.c
-       $(CC) /Fo$(OBJ_D)\s_server.obj -DMONOLITH $(APP_CFLAGS) -c 
$(SRC_D)\apps\s_server.c
-
-$(OBJ_D)\s_client.obj: $(SRC_D)\apps\s_client.c
-       $(CC) /Fo$(OBJ_D)\s_client.obj -DMONOLITH $(APP_CFLAGS) -c 
$(SRC_D)\apps\s_client.c
-
-$(OBJ_D)\speed.obj: $(SRC_D)\apps\speed.c
-       $(CC) /Fo$(OBJ_D)\speed.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\speed.c
-
-$(OBJ_D)\s_time.obj: $(SRC_D)\apps\s_time.c
-       $(CC) /Fo$(OBJ_D)\s_time.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\s_time.c
-
-$(OBJ_D)\apps.obj: $(SRC_D)\apps\apps.c
-       $(CC) /Fo$(OBJ_D)\apps.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\apps.c
-
-$(OBJ_D)\s_cb.obj: $(SRC_D)\apps\s_cb.c
-       $(CC) /Fo$(OBJ_D)\s_cb.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\s_cb.c
-
-$(OBJ_D)\s_socket.obj: $(SRC_D)\apps\s_socket.c
-       $(CC) /Fo$(OBJ_D)\s_socket.obj -DMONOLITH $(APP_CFLAGS) -c 
$(SRC_D)\apps\s_socket.c
-
-$(OBJ_D)\version.obj: $(SRC_D)\apps\version.c
-       $(CC) /Fo$(OBJ_D)\version.obj -DMONOLITH $(APP_CFLAGS) -c 
$(SRC_D)\apps\version.c
-
-$(OBJ_D)\sess_id.obj: $(SRC_D)\apps\sess_id.c
-       $(CC) /Fo$(OBJ_D)\sess_id.obj -DMONOLITH $(APP_CFLAGS) -c 
$(SRC_D)\apps\sess_id.c
-
-$(OBJ_D)\ciphers.obj: $(SRC_D)\apps\ciphers.c
-       $(CC) /Fo$(OBJ_D)\ciphers.obj -DMONOLITH $(APP_CFLAGS) -c 
$(SRC_D)\apps\ciphers.c
-
-$(OBJ_D)\nseq.obj: $(SRC_D)\apps\nseq.c
-       $(CC) /Fo$(OBJ_D)\nseq.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\nseq.c
-
-$(OBJ_D)\pkcs12.obj: $(SRC_D)\apps\pkcs12.c
-       $(CC) /Fo$(OBJ_D)\pkcs12.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\pkcs12.c
-
-$(OBJ_D)\pkcs8.obj: $(SRC_D)\apps\pkcs8.c
-       $(CC) /Fo$(OBJ_D)\pkcs8.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\pkcs8.c
-
-$(OBJ_D)\openssl.obj: $(SRC_D)\apps\openssl.c
-       $(CC) /Fo$(OBJ_D)\openssl.obj -DMONOLITH $(APP_CFLAGS) -c 
$(SRC_D)\apps\openssl.c
-
-$(OBJ_D)\cryptlib.obj: $(SRC_D)\crypto\cryptlib.c
-       $(CC) /Fo$(OBJ_D)\cryptlib.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\cryptlib.c
-
-$(OBJ_D)\mem.obj: $(SRC_D)\crypto\mem.c
-       $(CC) /Fo$(OBJ_D)\mem.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\mem.c
-
-$(OBJ_D)\cversion.obj: $(SRC_D)\crypto\cversion.c
-       $(CC) /Fo$(OBJ_D)\cversion.obj  $(SHLIB_CFLAGS) -DMK1MF_BUILD 
-DMK1MF_PLATFORM_VC_WIN32 -c $(SRC_D)\crypto\cversion.c
-
-$(OBJ_D)\ex_data.obj: $(SRC_D)\crypto\ex_data.c
-       $(CC) /Fo$(OBJ_D)\ex_data.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\ex_data.c
-
-$(OBJ_D)\tmdiff.obj: $(SRC_D)\crypto\tmdiff.c
-       $(CC) /Fo$(OBJ_D)\tmdiff.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\tmdiff.c
-
-$(OBJ_D)\cpt_err.obj: $(SRC_D)\crypto\cpt_err.c
-       $(CC) /Fo$(OBJ_D)\cpt_err.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\cpt_err.c
-
-$(OBJ_D)\md2_dgst.obj: $(SRC_D)\crypto\md2\md2_dgst.c
-       $(CC) /Fo$(OBJ_D)\md2_dgst.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\md2\md2_dgst.c
-
-$(OBJ_D)\md2_one.obj: $(SRC_D)\crypto\md2\md2_one.c
-       $(CC) /Fo$(OBJ_D)\md2_one.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\md2\md2_one.c
-
-$(OBJ_D)\md5_dgst.obj: $(SRC_D)\crypto\md5\md5_dgst.c
-       $(CC) /Fo$(OBJ_D)\md5_dgst.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\md5\md5_dgst.c
-
-$(OBJ_D)\md5_one.obj: $(SRC_D)\crypto\md5\md5_one.c
-       $(CC) /Fo$(OBJ_D)\md5_one.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\md5\md5_one.c
-
-$(OBJ_D)\sha_dgst.obj: $(SRC_D)\crypto\sha\sha_dgst.c
-       $(CC) /Fo$(OBJ_D)\sha_dgst.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\sha\sha_dgst.c
-
-$(OBJ_D)\sha1dgst.obj: $(SRC_D)\crypto\sha\sha1dgst.c
-       $(CC) /Fo$(OBJ_D)\sha1dgst.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\sha\sha1dgst.c
-
-$(OBJ_D)\sha_one.obj: $(SRC_D)\crypto\sha\sha_one.c
-       $(CC) /Fo$(OBJ_D)\sha_one.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\sha\sha_one.c
-
-$(OBJ_D)\sha1_one.obj: $(SRC_D)\crypto\sha\sha1_one.c
-       $(CC) /Fo$(OBJ_D)\sha1_one.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\sha\sha1_one.c
-
-$(OBJ_D)\mdc2dgst.obj: $(SRC_D)\crypto\mdc2\mdc2dgst.c
-       $(CC) /Fo$(OBJ_D)\mdc2dgst.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\mdc2\mdc2dgst.c
-
-$(OBJ_D)\mdc2_one.obj: $(SRC_D)\crypto\mdc2\mdc2_one.c
-       $(CC) /Fo$(OBJ_D)\mdc2_one.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\mdc2\mdc2_one.c
-
-$(OBJ_D)\hmac.obj: $(SRC_D)\crypto\hmac\hmac.c
-       $(CC) /Fo$(OBJ_D)\hmac.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\hmac\hmac.c
-
-$(OBJ_D)\rmd_dgst.obj: $(SRC_D)\crypto\ripemd\rmd_dgst.c
-       $(CC) /Fo$(OBJ_D)\rmd_dgst.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\ripemd\rmd_dgst.c
-
-$(OBJ_D)\rmd_one.obj: $(SRC_D)\crypto\ripemd\rmd_one.c
-       $(CC) /Fo$(OBJ_D)\rmd_one.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\ripemd\rmd_one.c
-
-$(OBJ_D)\set_key.obj: $(SRC_D)\crypto\des\set_key.c
-       $(CC) /Fo$(OBJ_D)\set_key.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\des\set_key.c
-
-$(OBJ_D)\ecb_enc.obj: $(SRC_D)\crypto\des\ecb_enc.c
-       $(CC) /Fo$(OBJ_D)\ecb_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\des\ecb_enc.c
-
-$(OBJ_D)\cbc_enc.obj: $(SRC_D)\crypto\des\cbc_enc.c
-       $(CC) /Fo$(OBJ_D)\cbc_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\des\cbc_enc.c
-
-$(OBJ_D)\ecb3_enc.obj: $(SRC_D)\crypto\des\ecb3_enc.c
-       $(CC) /Fo$(OBJ_D)\ecb3_enc.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\des\ecb3_enc.c
-
-$(OBJ_D)\cfb64enc.obj: $(SRC_D)\crypto\des\cfb64enc.c
-       $(CC) /Fo$(OBJ_D)\cfb64enc.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\des\cfb64enc.c
-
-$(OBJ_D)\cfb64ede.obj: $(SRC_D)\crypto\des\cfb64ede.c
-       $(CC) /Fo$(OBJ_D)\cfb64ede.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\des\cfb64ede.c
-
-$(OBJ_D)\cfb_enc.obj: $(SRC_D)\crypto\des\cfb_enc.c
-       $(CC) /Fo$(OBJ_D)\cfb_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\des\cfb_enc.c
-
-$(OBJ_D)\ofb64ede.obj: $(SRC_D)\crypto\des\ofb64ede.c
-       $(CC) /Fo$(OBJ_D)\ofb64ede.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\des\ofb64ede.c
-
-$(OBJ_D)\enc_read.obj: $(SRC_D)\crypto\des\enc_read.c
-       $(CC) /Fo$(OBJ_D)\enc_read.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\des\enc_read.c
-
-$(OBJ_D)\enc_writ.obj: $(SRC_D)\crypto\des\enc_writ.c
-       $(CC) /Fo$(OBJ_D)\enc_writ.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\des\enc_writ.c
-
-$(OBJ_D)\ofb64enc.obj: $(SRC_D)\crypto\des\ofb64enc.c
-       $(CC) /Fo$(OBJ_D)\ofb64enc.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\des\ofb64enc.c
-
-$(OBJ_D)\ofb_enc.obj: $(SRC_D)\crypto\des\ofb_enc.c
-       $(CC) /Fo$(OBJ_D)\ofb_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\des\ofb_enc.c
-
-$(OBJ_D)\str2key.obj: $(SRC_D)\crypto\des\str2key.c
-       $(CC) /Fo$(OBJ_D)\str2key.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\des\str2key.c
-
-$(OBJ_D)\pcbc_enc.obj: $(SRC_D)\crypto\des\pcbc_enc.c
-       $(CC) /Fo$(OBJ_D)\pcbc_enc.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\des\pcbc_enc.c
-
-$(OBJ_D)\qud_cksm.obj: $(SRC_D)\crypto\des\qud_cksm.c
-       $(CC) /Fo$(OBJ_D)\qud_cksm.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\des\qud_cksm.c
-
-$(OBJ_D)\rand_key.obj: $(SRC_D)\crypto\des\rand_key.c
-       $(CC) /Fo$(OBJ_D)\rand_key.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\des\rand_key.c
-
-$(OBJ_D)\des_enc.obj: $(SRC_D)\crypto\des\des_enc.c
-       $(CC) /Fo$(OBJ_D)\des_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\des\des_enc.c
-
-$(OBJ_D)\fcrypt_b.obj: $(SRC_D)\crypto\des\fcrypt_b.c
-       $(CC) /Fo$(OBJ_D)\fcrypt_b.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\des\fcrypt_b.c
-
-$(OBJ_D)\read2pwd.obj: $(SRC_D)\crypto\des\read2pwd.c
-       $(CC) /Fo$(OBJ_D)\read2pwd.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\des\read2pwd.c
-
-$(OBJ_D)\fcrypt.obj: $(SRC_D)\crypto\des\fcrypt.c
-       $(CC) /Fo$(OBJ_D)\fcrypt.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\des\fcrypt.c
-
-$(OBJ_D)\xcbc_enc.obj: $(SRC_D)\crypto\des\xcbc_enc.c
-       $(CC) /Fo$(OBJ_D)\xcbc_enc.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\des\xcbc_enc.c
-
-$(OBJ_D)\read_pwd.obj: $(SRC_D)\crypto\des\read_pwd.c
-       $(CC) /Fo$(OBJ_D)\read_pwd.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\des\read_pwd.c
-
-$(OBJ_D)\rpc_enc.obj: $(SRC_D)\crypto\des\rpc_enc.c
-       $(CC) /Fo$(OBJ_D)\rpc_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\des\rpc_enc.c
-
-$(OBJ_D)\cbc_cksm.obj: $(SRC_D)\crypto\des\cbc_cksm.c
-       $(CC) /Fo$(OBJ_D)\cbc_cksm.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\des\cbc_cksm.c
-
-$(OBJ_D)\supp.obj: $(SRC_D)\crypto\des\supp.c
-       $(CC) /Fo$(OBJ_D)\supp.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\des\supp.c
-
-$(OBJ_D)\ede_cbcm_enc.obj: $(SRC_D)\crypto\des\ede_cbcm_enc.c
-       $(CC) /Fo$(OBJ_D)\ede_cbcm_enc.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\des\ede_cbcm_enc.c
-
-$(OBJ_D)\rc2_ecb.obj: $(SRC_D)\crypto\rc2\rc2_ecb.c
-       $(CC) /Fo$(OBJ_D)\rc2_ecb.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\rc2\rc2_ecb.c
-
-$(OBJ_D)\rc2_skey.obj: $(SRC_D)\crypto\rc2\rc2_skey.c
-       $(CC) /Fo$(OBJ_D)\rc2_skey.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\rc2\rc2_skey.c
-
-$(OBJ_D)\rc2_cbc.obj: $(SRC_D)\crypto\rc2\rc2_cbc.c
-       $(CC) /Fo$(OBJ_D)\rc2_cbc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\rc2\rc2_cbc.c
-
-$(OBJ_D)\rc2cfb64.obj: $(SRC_D)\crypto\rc2\rc2cfb64.c
-       $(CC) /Fo$(OBJ_D)\rc2cfb64.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\rc2\rc2cfb64.c
-
-$(OBJ_D)\rc2ofb64.obj: $(SRC_D)\crypto\rc2\rc2ofb64.c
-       $(CC) /Fo$(OBJ_D)\rc2ofb64.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\rc2\rc2ofb64.c
-
-$(OBJ_D)\rc4_skey.obj: $(SRC_D)\crypto\rc4\rc4_skey.c
-       $(CC) /Fo$(OBJ_D)\rc4_skey.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\rc4\rc4_skey.c
-
-$(OBJ_D)\rc4_enc.obj: $(SRC_D)\crypto\rc4\rc4_enc.c
-       $(CC) /Fo$(OBJ_D)\rc4_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\rc4\rc4_enc.c
-
-$(OBJ_D)\rc5_skey.obj: $(SRC_D)\crypto\rc5\rc5_skey.c
-       $(CC) /Fo$(OBJ_D)\rc5_skey.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\rc5\rc5_skey.c
-
-$(OBJ_D)\rc5_ecb.obj: $(SRC_D)\crypto\rc5\rc5_ecb.c
-       $(CC) /Fo$(OBJ_D)\rc5_ecb.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\rc5\rc5_ecb.c
-
-$(OBJ_D)\rc5_enc.obj: $(SRC_D)\crypto\rc5\rc5_enc.c
-       $(CC) /Fo$(OBJ_D)\rc5_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\rc5\rc5_enc.c
-
-$(OBJ_D)\rc5cfb64.obj: $(SRC_D)\crypto\rc5\rc5cfb64.c
-       $(CC) /Fo$(OBJ_D)\rc5cfb64.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\rc5\rc5cfb64.c
-
-$(OBJ_D)\rc5ofb64.obj: $(SRC_D)\crypto\rc5\rc5ofb64.c
-       $(CC) /Fo$(OBJ_D)\rc5ofb64.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\rc5\rc5ofb64.c
-
-$(OBJ_D)\i_cbc.obj: $(SRC_D)\crypto\idea\i_cbc.c
-       $(CC) /Fo$(OBJ_D)\i_cbc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\idea\i_cbc.c
-
-$(OBJ_D)\i_cfb64.obj: $(SRC_D)\crypto\idea\i_cfb64.c
-       $(CC) /Fo$(OBJ_D)\i_cfb64.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\idea\i_cfb64.c
-
-$(OBJ_D)\i_ofb64.obj: $(SRC_D)\crypto\idea\i_ofb64.c
-       $(CC) /Fo$(OBJ_D)\i_ofb64.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\idea\i_ofb64.c
-
-$(OBJ_D)\i_ecb.obj: $(SRC_D)\crypto\idea\i_ecb.c
-       $(CC) /Fo$(OBJ_D)\i_ecb.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\idea\i_ecb.c
-
-$(OBJ_D)\i_skey.obj: $(SRC_D)\crypto\idea\i_skey.c
-       $(CC) /Fo$(OBJ_D)\i_skey.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\idea\i_skey.c
-
-$(OBJ_D)\bf_skey.obj: $(SRC_D)\crypto\bf\bf_skey.c
-       $(CC) /Fo$(OBJ_D)\bf_skey.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bf\bf_skey.c
-
-$(OBJ_D)\bf_ecb.obj: $(SRC_D)\crypto\bf\bf_ecb.c
-       $(CC) /Fo$(OBJ_D)\bf_ecb.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bf\bf_ecb.c
-
-$(OBJ_D)\bf_enc.obj: $(SRC_D)\crypto\bf\bf_enc.c
-       $(CC) /Fo$(OBJ_D)\bf_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bf\bf_enc.c
-
-$(OBJ_D)\bf_cfb64.obj: $(SRC_D)\crypto\bf\bf_cfb64.c
-       $(CC) /Fo$(OBJ_D)\bf_cfb64.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\bf\bf_cfb64.c
-
-$(OBJ_D)\bf_ofb64.obj: $(SRC_D)\crypto\bf\bf_ofb64.c
-       $(CC) /Fo$(OBJ_D)\bf_ofb64.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\bf\bf_ofb64.c
-
-$(OBJ_D)\c_skey.obj: $(SRC_D)\crypto\cast\c_skey.c
-       $(CC) /Fo$(OBJ_D)\c_skey.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\cast\c_skey.c
-
-$(OBJ_D)\c_ecb.obj: $(SRC_D)\crypto\cast\c_ecb.c
-       $(CC) /Fo$(OBJ_D)\c_ecb.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\cast\c_ecb.c
-
-$(OBJ_D)\c_enc.obj: $(SRC_D)\crypto\cast\c_enc.c
-       $(CC) /Fo$(OBJ_D)\c_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\cast\c_enc.c
-
-$(OBJ_D)\c_cfb64.obj: $(SRC_D)\crypto\cast\c_cfb64.c
-       $(CC) /Fo$(OBJ_D)\c_cfb64.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\cast\c_cfb64.c
-
-$(OBJ_D)\c_ofb64.obj: $(SRC_D)\crypto\cast\c_ofb64.c
-       $(CC) /Fo$(OBJ_D)\c_ofb64.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\cast\c_ofb64.c
-
-$(OBJ_D)\bn_add.obj: $(SRC_D)\crypto\bn\bn_add.c
-       $(CC) /Fo$(OBJ_D)\bn_add.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_add.c
-
-$(OBJ_D)\bn_div.obj: $(SRC_D)\crypto\bn\bn_div.c
-       $(CC) /Fo$(OBJ_D)\bn_div.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_div.c
-
-$(OBJ_D)\bn_exp.obj: $(SRC_D)\crypto\bn\bn_exp.c
-       $(CC) /Fo$(OBJ_D)\bn_exp.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_exp.c
-
-$(OBJ_D)\bn_lib.obj: $(SRC_D)\crypto\bn\bn_lib.c
-       $(CC) /Fo$(OBJ_D)\bn_lib.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_lib.c
-
-$(OBJ_D)\bn_mul.obj: $(SRC_D)\crypto\bn\bn_mul.c
-       $(CC) /Fo$(OBJ_D)\bn_mul.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_mul.c
-
-$(OBJ_D)\bn_print.obj: $(SRC_D)\crypto\bn\bn_print.c
-       $(CC) /Fo$(OBJ_D)\bn_print.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\bn\bn_print.c
-
-$(OBJ_D)\bn_rand.obj: $(SRC_D)\crypto\bn\bn_rand.c
-       $(CC) /Fo$(OBJ_D)\bn_rand.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_rand.c
-
-$(OBJ_D)\bn_shift.obj: $(SRC_D)\crypto\bn\bn_shift.c
-       $(CC) /Fo$(OBJ_D)\bn_shift.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\bn\bn_shift.c
-
-$(OBJ_D)\bn_word.obj: $(SRC_D)\crypto\bn\bn_word.c
-       $(CC) /Fo$(OBJ_D)\bn_word.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_word.c
-
-$(OBJ_D)\bn_blind.obj: $(SRC_D)\crypto\bn\bn_blind.c
-       $(CC) /Fo$(OBJ_D)\bn_blind.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\bn\bn_blind.c
-
-$(OBJ_D)\bn_gcd.obj: $(SRC_D)\crypto\bn\bn_gcd.c
-       $(CC) /Fo$(OBJ_D)\bn_gcd.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_gcd.c
-
-$(OBJ_D)\bn_prime.obj: $(SRC_D)\crypto\bn\bn_prime.c
-       $(CC) /Fo$(OBJ_D)\bn_prime.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\bn\bn_prime.c
-
-$(OBJ_D)\bn_err.obj: $(SRC_D)\crypto\bn\bn_err.c
-       $(CC) /Fo$(OBJ_D)\bn_err.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_err.c
-
-$(OBJ_D)\bn_sqr.obj: $(SRC_D)\crypto\bn\bn_sqr.c
-       $(CC) /Fo$(OBJ_D)\bn_sqr.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_sqr.c
-
-$(OBJ_D)\bn_asm.obj: $(SRC_D)\crypto\bn\bn_asm.c
-       $(CC) /Fo$(OBJ_D)\bn_asm.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_asm.c
-
-$(OBJ_D)\bn_recp.obj: $(SRC_D)\crypto\bn\bn_recp.c
-       $(CC) /Fo$(OBJ_D)\bn_recp.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_recp.c
-
-$(OBJ_D)\bn_mont.obj: $(SRC_D)\crypto\bn\bn_mont.c
-       $(CC) /Fo$(OBJ_D)\bn_mont.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_mont.c
-
-$(OBJ_D)\bn_mpi.obj: $(SRC_D)\crypto\bn\bn_mpi.c
-       $(CC) /Fo$(OBJ_D)\bn_mpi.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_mpi.c
-
-$(OBJ_D)\bn_exp2.obj: $(SRC_D)\crypto\bn\bn_exp2.c
-       $(CC) /Fo$(OBJ_D)\bn_exp2.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_exp2.c
-
-$(OBJ_D)\rsa_eay.obj: $(SRC_D)\crypto\rsa\rsa_eay.c
-       $(CC) /Fo$(OBJ_D)\rsa_eay.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\rsa\rsa_eay.c
-
-$(OBJ_D)\rsa_gen.obj: $(SRC_D)\crypto\rsa\rsa_gen.c
-       $(CC) /Fo$(OBJ_D)\rsa_gen.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\rsa\rsa_gen.c
-
-$(OBJ_D)\rsa_lib.obj: $(SRC_D)\crypto\rsa\rsa_lib.c
-       $(CC) /Fo$(OBJ_D)\rsa_lib.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\rsa\rsa_lib.c
-
-$(OBJ_D)\rsa_sign.obj: $(SRC_D)\crypto\rsa\rsa_sign.c
-       $(CC) /Fo$(OBJ_D)\rsa_sign.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\rsa\rsa_sign.c
-
-$(OBJ_D)\rsa_saos.obj: $(SRC_D)\crypto\rsa\rsa_saos.c
-       $(CC) /Fo$(OBJ_D)\rsa_saos.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\rsa\rsa_saos.c
-
-$(OBJ_D)\rsa_err.obj: $(SRC_D)\crypto\rsa\rsa_err.c
-       $(CC) /Fo$(OBJ_D)\rsa_err.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\rsa\rsa_err.c
-
-$(OBJ_D)\rsa_pk1.obj: $(SRC_D)\crypto\rsa\rsa_pk1.c
-       $(CC) /Fo$(OBJ_D)\rsa_pk1.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\rsa\rsa_pk1.c
-
-$(OBJ_D)\rsa_ssl.obj: $(SRC_D)\crypto\rsa\rsa_ssl.c
-       $(CC) /Fo$(OBJ_D)\rsa_ssl.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\rsa\rsa_ssl.c
-
-$(OBJ_D)\rsa_none.obj: $(SRC_D)\crypto\rsa\rsa_none.c
-       $(CC) /Fo$(OBJ_D)\rsa_none.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\rsa\rsa_none.c
-
-$(OBJ_D)\rsa_oaep.obj: $(SRC_D)\crypto\rsa\rsa_oaep.c
-       $(CC) /Fo$(OBJ_D)\rsa_oaep.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\rsa\rsa_oaep.c
-
-$(OBJ_D)\rsa_chk.obj: $(SRC_D)\crypto\rsa\rsa_chk.c
-       $(CC) /Fo$(OBJ_D)\rsa_chk.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\rsa\rsa_chk.c
-
-$(OBJ_D)\dsa_gen.obj: $(SRC_D)\crypto\dsa\dsa_gen.c
-       $(CC) /Fo$(OBJ_D)\dsa_gen.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\dsa\dsa_gen.c
-
-$(OBJ_D)\dsa_key.obj: $(SRC_D)\crypto\dsa\dsa_key.c
-       $(CC) /Fo$(OBJ_D)\dsa_key.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\dsa\dsa_key.c
-
-$(OBJ_D)\dsa_lib.obj: $(SRC_D)\crypto\dsa\dsa_lib.c
-       $(CC) /Fo$(OBJ_D)\dsa_lib.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\dsa\dsa_lib.c
-
-$(OBJ_D)\dsa_asn1.obj: $(SRC_D)\crypto\dsa\dsa_asn1.c
-       $(CC) /Fo$(OBJ_D)\dsa_asn1.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\dsa\dsa_asn1.c
-
-$(OBJ_D)\dsa_vrf.obj: $(SRC_D)\crypto\dsa\dsa_vrf.c
-       $(CC) /Fo$(OBJ_D)\dsa_vrf.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\dsa\dsa_vrf.c
-
-$(OBJ_D)\dsa_sign.obj: $(SRC_D)\crypto\dsa\dsa_sign.c
-       $(CC) /Fo$(OBJ_D)\dsa_sign.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\dsa\dsa_sign.c
-
-$(OBJ_D)\dsa_err.obj: $(SRC_D)\crypto\dsa\dsa_err.c
-       $(CC) /Fo$(OBJ_D)\dsa_err.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\dsa\dsa_err.c
-
-$(OBJ_D)\dh_gen.obj: $(SRC_D)\crypto\dh\dh_gen.c
-       $(CC) /Fo$(OBJ_D)\dh_gen.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\dh\dh_gen.c
-
-$(OBJ_D)\dh_key.obj: $(SRC_D)\crypto\dh\dh_key.c
-       $(CC) /Fo$(OBJ_D)\dh_key.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\dh\dh_key.c
-
-$(OBJ_D)\dh_lib.obj: $(SRC_D)\crypto\dh\dh_lib.c
-       $(CC) /Fo$(OBJ_D)\dh_lib.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\dh\dh_lib.c
-
-$(OBJ_D)\dh_check.obj: $(SRC_D)\crypto\dh\dh_check.c
-       $(CC) /Fo$(OBJ_D)\dh_check.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\dh\dh_check.c
-
-$(OBJ_D)\dh_err.obj: $(SRC_D)\crypto\dh\dh_err.c
-       $(CC) /Fo$(OBJ_D)\dh_err.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\dh\dh_err.c
-
-$(OBJ_D)\buffer.obj: $(SRC_D)\crypto\buffer\buffer.c
-       $(CC) /Fo$(OBJ_D)\buffer.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\buffer\buffer.c
-
-$(OBJ_D)\buf_err.obj: $(SRC_D)\crypto\buffer\buf_err.c
-       $(CC) /Fo$(OBJ_D)\buf_err.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\buffer\buf_err.c
-
-$(OBJ_D)\bio_lib.obj: $(SRC_D)\crypto\bio\bio_lib.c
-       $(CC) /Fo$(OBJ_D)\bio_lib.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bio\bio_lib.c
-
-$(OBJ_D)\bio_cb.obj: $(SRC_D)\crypto\bio\bio_cb.c
-       $(CC) /Fo$(OBJ_D)\bio_cb.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bio\bio_cb.c
-
-$(OBJ_D)\bio_err.obj: $(SRC_D)\crypto\bio\bio_err.c
-       $(CC) /Fo$(OBJ_D)\bio_err.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bio\bio_err.c
-
-$(OBJ_D)\bss_mem.obj: $(SRC_D)\crypto\bio\bss_mem.c
-       $(CC) /Fo$(OBJ_D)\bss_mem.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bio\bss_mem.c
-
-$(OBJ_D)\bss_null.obj: $(SRC_D)\crypto\bio\bss_null.c
-       $(CC) /Fo$(OBJ_D)\bss_null.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\bio\bss_null.c
-
-$(OBJ_D)\bss_fd.obj: $(SRC_D)\crypto\bio\bss_fd.c
-       $(CC) /Fo$(OBJ_D)\bss_fd.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bio\bss_fd.c
-
-$(OBJ_D)\bss_file.obj: $(SRC_D)\crypto\bio\bss_file.c
-       $(CC) /Fo$(OBJ_D)\bss_file.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\bio\bss_file.c
-
-$(OBJ_D)\bss_sock.obj: $(SRC_D)\crypto\bio\bss_sock.c
-       $(CC) /Fo$(OBJ_D)\bss_sock.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\bio\bss_sock.c
-
-$(OBJ_D)\bss_conn.obj: $(SRC_D)\crypto\bio\bss_conn.c
-       $(CC) /Fo$(OBJ_D)\bss_conn.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\bio\bss_conn.c
-
-$(OBJ_D)\bf_null.obj: $(SRC_D)\crypto\bio\bf_null.c
-       $(CC) /Fo$(OBJ_D)\bf_null.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bio\bf_null.c
-
-$(OBJ_D)\bf_buff.obj: $(SRC_D)\crypto\bio\bf_buff.c
-       $(CC) /Fo$(OBJ_D)\bf_buff.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bio\bf_buff.c
-
-$(OBJ_D)\b_print.obj: $(SRC_D)\crypto\bio\b_print.c
-       $(CC) /Fo$(OBJ_D)\b_print.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bio\b_print.c
-
-$(OBJ_D)\b_dump.obj: $(SRC_D)\crypto\bio\b_dump.c
-       $(CC) /Fo$(OBJ_D)\b_dump.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bio\b_dump.c
-
-$(OBJ_D)\b_sock.obj: $(SRC_D)\crypto\bio\b_sock.c
-       $(CC) /Fo$(OBJ_D)\b_sock.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bio\b_sock.c
-
-$(OBJ_D)\bss_acpt.obj: $(SRC_D)\crypto\bio\bss_acpt.c
-       $(CC) /Fo$(OBJ_D)\bss_acpt.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\bio\bss_acpt.c
-
-$(OBJ_D)\bf_nbio.obj: $(SRC_D)\crypto\bio\bf_nbio.c
-       $(CC) /Fo$(OBJ_D)\bf_nbio.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bio\bf_nbio.c
-
-$(OBJ_D)\bss_log.obj: $(SRC_D)\crypto\bio\bss_log.c
-       $(CC) /Fo$(OBJ_D)\bss_log.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bio\bss_log.c
-
-$(OBJ_D)\bss_bio.obj: $(SRC_D)\crypto\bio\bss_bio.c
-       $(CC) /Fo$(OBJ_D)\bss_bio.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bio\bss_bio.c
-
-$(OBJ_D)\stack.obj: $(SRC_D)\crypto\stack\stack.c
-       $(CC) /Fo$(OBJ_D)\stack.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\stack\stack.c
-
-$(OBJ_D)\lhash.obj: $(SRC_D)\crypto\lhash\lhash.c
-       $(CC) /Fo$(OBJ_D)\lhash.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\lhash\lhash.c
-
-$(OBJ_D)\lh_stats.obj: $(SRC_D)\crypto\lhash\lh_stats.c
-       $(CC) /Fo$(OBJ_D)\lh_stats.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\lhash\lh_stats.c
-
-$(OBJ_D)\md_rand.obj: $(SRC_D)\crypto\rand\md_rand.c
-       $(CC) /Fo$(OBJ_D)\md_rand.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\rand\md_rand.c
-
-$(OBJ_D)\randfile.obj: $(SRC_D)\crypto\rand\randfile.c
-       $(CC) /Fo$(OBJ_D)\randfile.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\rand\randfile.c
-
-$(OBJ_D)\rand_lib.obj: $(SRC_D)\crypto\rand\rand_lib.c
-       $(CC) /Fo$(OBJ_D)\rand_lib.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\rand\rand_lib.c
-
-$(OBJ_D)\err.obj: $(SRC_D)\crypto\err\err.c
-       $(CC) /Fo$(OBJ_D)\err.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\err\err.c
-
-$(OBJ_D)\err_all.obj: $(SRC_D)\crypto\err\err_all.c
-       $(CC) /Fo$(OBJ_D)\err_all.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\err\err_all.c
-
-$(OBJ_D)\err_prn.obj: $(SRC_D)\crypto\err\err_prn.c
-       $(CC) /Fo$(OBJ_D)\err_prn.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\err\err_prn.c
-
-$(OBJ_D)\o_names.obj: $(SRC_D)\crypto\objects\o_names.c
-       $(CC) /Fo$(OBJ_D)\o_names.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\objects\o_names.c
-
-$(OBJ_D)\obj_dat.obj: $(SRC_D)\crypto\objects\obj_dat.c
-       $(CC) /Fo$(OBJ_D)\obj_dat.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\objects\obj_dat.c
-
-$(OBJ_D)\obj_lib.obj: $(SRC_D)\crypto\objects\obj_lib.c
-       $(CC) /Fo$(OBJ_D)\obj_lib.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\objects\obj_lib.c
-
-$(OBJ_D)\obj_err.obj: $(SRC_D)\crypto\objects\obj_err.c
-       $(CC) /Fo$(OBJ_D)\obj_err.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\objects\obj_err.c
-
-$(OBJ_D)\encode.obj: $(SRC_D)\crypto\evp\encode.c
-       $(CC) /Fo$(OBJ_D)\encode.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\encode.c
-
-$(OBJ_D)\digest.obj: $(SRC_D)\crypto\evp\digest.c
-       $(CC) /Fo$(OBJ_D)\digest.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\digest.c
-
-$(OBJ_D)\evp_enc.obj: $(SRC_D)\crypto\evp\evp_enc.c
-       $(CC) /Fo$(OBJ_D)\evp_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\evp_enc.c
-
-$(OBJ_D)\evp_key.obj: $(SRC_D)\crypto\evp\evp_key.c
-       $(CC) /Fo$(OBJ_D)\evp_key.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\evp_key.c
-
-$(OBJ_D)\e_ecb_d.obj: $(SRC_D)\crypto\evp\e_ecb_d.c
-       $(CC) /Fo$(OBJ_D)\e_ecb_d.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_ecb_d.c
-
-$(OBJ_D)\e_cbc_d.obj: $(SRC_D)\crypto\evp\e_cbc_d.c
-       $(CC) /Fo$(OBJ_D)\e_cbc_d.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_cbc_d.c
-
-$(OBJ_D)\e_cfb_d.obj: $(SRC_D)\crypto\evp\e_cfb_d.c
-       $(CC) /Fo$(OBJ_D)\e_cfb_d.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_cfb_d.c
-
-$(OBJ_D)\e_ofb_d.obj: $(SRC_D)\crypto\evp\e_ofb_d.c
-       $(CC) /Fo$(OBJ_D)\e_ofb_d.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_ofb_d.c
-
-$(OBJ_D)\e_ecb_i.obj: $(SRC_D)\crypto\evp\e_ecb_i.c
-       $(CC) /Fo$(OBJ_D)\e_ecb_i.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_ecb_i.c
-
-$(OBJ_D)\e_cbc_i.obj: $(SRC_D)\crypto\evp\e_cbc_i.c
-       $(CC) /Fo$(OBJ_D)\e_cbc_i.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_cbc_i.c
-
-$(OBJ_D)\e_cfb_i.obj: $(SRC_D)\crypto\evp\e_cfb_i.c
-       $(CC) /Fo$(OBJ_D)\e_cfb_i.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_cfb_i.c
-
-$(OBJ_D)\e_ofb_i.obj: $(SRC_D)\crypto\evp\e_ofb_i.c
-       $(CC) /Fo$(OBJ_D)\e_ofb_i.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_ofb_i.c
-
-$(OBJ_D)\e_ecb_3d.obj: $(SRC_D)\crypto\evp\e_ecb_3d.c
-       $(CC) /Fo$(OBJ_D)\e_ecb_3d.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\evp\e_ecb_3d.c
-
-$(OBJ_D)\e_cbc_3d.obj: $(SRC_D)\crypto\evp\e_cbc_3d.c
-       $(CC) /Fo$(OBJ_D)\e_cbc_3d.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\evp\e_cbc_3d.c
-
-$(OBJ_D)\e_rc4.obj: $(SRC_D)\crypto\evp\e_rc4.c
-       $(CC) /Fo$(OBJ_D)\e_rc4.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_rc4.c
-
-$(OBJ_D)\names.obj: $(SRC_D)\crypto\evp\names.c
-       $(CC) /Fo$(OBJ_D)\names.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\names.c
-
-$(OBJ_D)\e_cfb_3d.obj: $(SRC_D)\crypto\evp\e_cfb_3d.c
-       $(CC) /Fo$(OBJ_D)\e_cfb_3d.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\evp\e_cfb_3d.c
-
-$(OBJ_D)\e_ofb_3d.obj: $(SRC_D)\crypto\evp\e_ofb_3d.c
-       $(CC) /Fo$(OBJ_D)\e_ofb_3d.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\evp\e_ofb_3d.c
-
-$(OBJ_D)\e_xcbc_d.obj: $(SRC_D)\crypto\evp\e_xcbc_d.c
-       $(CC) /Fo$(OBJ_D)\e_xcbc_d.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\evp\e_xcbc_d.c
-
-$(OBJ_D)\e_ecb_r2.obj: $(SRC_D)\crypto\evp\e_ecb_r2.c
-       $(CC) /Fo$(OBJ_D)\e_ecb_r2.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\evp\e_ecb_r2.c
-
-$(OBJ_D)\e_cbc_r2.obj: $(SRC_D)\crypto\evp\e_cbc_r2.c
-       $(CC) /Fo$(OBJ_D)\e_cbc_r2.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\evp\e_cbc_r2.c
-
-$(OBJ_D)\e_cfb_r2.obj: $(SRC_D)\crypto\evp\e_cfb_r2.c
-       $(CC) /Fo$(OBJ_D)\e_cfb_r2.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\evp\e_cfb_r2.c
-
-$(OBJ_D)\e_ofb_r2.obj: $(SRC_D)\crypto\evp\e_ofb_r2.c
-       $(CC) /Fo$(OBJ_D)\e_ofb_r2.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\evp\e_ofb_r2.c
-
-$(OBJ_D)\e_ecb_bf.obj: $(SRC_D)\crypto\evp\e_ecb_bf.c
-       $(CC) /Fo$(OBJ_D)\e_ecb_bf.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\evp\e_ecb_bf.c
-
-$(OBJ_D)\e_cbc_bf.obj: $(SRC_D)\crypto\evp\e_cbc_bf.c
-       $(CC) /Fo$(OBJ_D)\e_cbc_bf.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\evp\e_cbc_bf.c
-
-$(OBJ_D)\e_cfb_bf.obj: $(SRC_D)\crypto\evp\e_cfb_bf.c
-       $(CC) /Fo$(OBJ_D)\e_cfb_bf.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\evp\e_cfb_bf.c
-
-$(OBJ_D)\e_ofb_bf.obj: $(SRC_D)\crypto\evp\e_ofb_bf.c
-       $(CC) /Fo$(OBJ_D)\e_ofb_bf.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\evp\e_ofb_bf.c
-
-$(OBJ_D)\e_ecb_c.obj: $(SRC_D)\crypto\evp\e_ecb_c.c
-       $(CC) /Fo$(OBJ_D)\e_ecb_c.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_ecb_c.c
-
-$(OBJ_D)\e_cbc_c.obj: $(SRC_D)\crypto\evp\e_cbc_c.c
-       $(CC) /Fo$(OBJ_D)\e_cbc_c.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_cbc_c.c
-
-$(OBJ_D)\e_cfb_c.obj: $(SRC_D)\crypto\evp\e_cfb_c.c
-       $(CC) /Fo$(OBJ_D)\e_cfb_c.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_cfb_c.c
-
-$(OBJ_D)\e_ofb_c.obj: $(SRC_D)\crypto\evp\e_ofb_c.c
-       $(CC) /Fo$(OBJ_D)\e_ofb_c.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_ofb_c.c
-
-$(OBJ_D)\e_ecb_r5.obj: $(SRC_D)\crypto\evp\e_ecb_r5.c
-       $(CC) /Fo$(OBJ_D)\e_ecb_r5.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\evp\e_ecb_r5.c
-
-$(OBJ_D)\e_cbc_r5.obj: $(SRC_D)\crypto\evp\e_cbc_r5.c
-       $(CC) /Fo$(OBJ_D)\e_cbc_r5.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\evp\e_cbc_r5.c
-
-$(OBJ_D)\e_cfb_r5.obj: $(SRC_D)\crypto\evp\e_cfb_r5.c
-       $(CC) /Fo$(OBJ_D)\e_cfb_r5.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\evp\e_cfb_r5.c
-
-$(OBJ_D)\e_ofb_r5.obj: $(SRC_D)\crypto\evp\e_ofb_r5.c
-       $(CC) /Fo$(OBJ_D)\e_ofb_r5.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\evp\e_ofb_r5.c
-
-$(OBJ_D)\m_null.obj: $(SRC_D)\crypto\evp\m_null.c
-       $(CC) /Fo$(OBJ_D)\m_null.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\m_null.c
-
-$(OBJ_D)\m_md2.obj: $(SRC_D)\crypto\evp\m_md2.c
-       $(CC) /Fo$(OBJ_D)\m_md2.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\m_md2.c
-
-$(OBJ_D)\m_md5.obj: $(SRC_D)\crypto\evp\m_md5.c
-       $(CC) /Fo$(OBJ_D)\m_md5.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\m_md5.c
-
-$(OBJ_D)\m_sha.obj: $(SRC_D)\crypto\evp\m_sha.c
-       $(CC) /Fo$(OBJ_D)\m_sha.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\m_sha.c
-
-$(OBJ_D)\m_sha1.obj: $(SRC_D)\crypto\evp\m_sha1.c
-       $(CC) /Fo$(OBJ_D)\m_sha1.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\m_sha1.c
-
-$(OBJ_D)\m_dss.obj: $(SRC_D)\crypto\evp\m_dss.c
-       $(CC) /Fo$(OBJ_D)\m_dss.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\m_dss.c
-
-$(OBJ_D)\m_dss1.obj: $(SRC_D)\crypto\evp\m_dss1.c
-       $(CC) /Fo$(OBJ_D)\m_dss1.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\m_dss1.c
-
-$(OBJ_D)\m_mdc2.obj: $(SRC_D)\crypto\evp\m_mdc2.c
-       $(CC) /Fo$(OBJ_D)\m_mdc2.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\m_mdc2.c
-
-$(OBJ_D)\m_ripemd.obj: $(SRC_D)\crypto\evp\m_ripemd.c
-       $(CC) /Fo$(OBJ_D)\m_ripemd.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\evp\m_ripemd.c
-
-$(OBJ_D)\p_open.obj: $(SRC_D)\crypto\evp\p_open.c
-       $(CC) /Fo$(OBJ_D)\p_open.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\p_open.c
-
-$(OBJ_D)\p_seal.obj: $(SRC_D)\crypto\evp\p_seal.c
-       $(CC) /Fo$(OBJ_D)\p_seal.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\p_seal.c
-
-$(OBJ_D)\p_sign.obj: $(SRC_D)\crypto\evp\p_sign.c
-       $(CC) /Fo$(OBJ_D)\p_sign.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\p_sign.c
-
-$(OBJ_D)\p_verify.obj: $(SRC_D)\crypto\evp\p_verify.c
-       $(CC) /Fo$(OBJ_D)\p_verify.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\evp\p_verify.c
-
-$(OBJ_D)\p_lib.obj: $(SRC_D)\crypto\evp\p_lib.c
-       $(CC) /Fo$(OBJ_D)\p_lib.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\p_lib.c
-
-$(OBJ_D)\p_enc.obj: $(SRC_D)\crypto\evp\p_enc.c
-       $(CC) /Fo$(OBJ_D)\p_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\p_enc.c
-
-$(OBJ_D)\p_dec.obj: $(SRC_D)\crypto\evp\p_dec.c
-       $(CC) /Fo$(OBJ_D)\p_dec.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\p_dec.c
-
-$(OBJ_D)\bio_md.obj: $(SRC_D)\crypto\evp\bio_md.c
-       $(CC) /Fo$(OBJ_D)\bio_md.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\bio_md.c
-
-$(OBJ_D)\bio_b64.obj: $(SRC_D)\crypto\evp\bio_b64.c
-       $(CC) /Fo$(OBJ_D)\bio_b64.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\bio_b64.c
-
-$(OBJ_D)\bio_enc.obj: $(SRC_D)\crypto\evp\bio_enc.c
-       $(CC) /Fo$(OBJ_D)\bio_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\bio_enc.c
-
-$(OBJ_D)\evp_err.obj: $(SRC_D)\crypto\evp\evp_err.c
-       $(CC) /Fo$(OBJ_D)\evp_err.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\evp_err.c
-
-$(OBJ_D)\e_null.obj: $(SRC_D)\crypto\evp\e_null.c
-       $(CC) /Fo$(OBJ_D)\e_null.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_null.c
-
-$(OBJ_D)\c_all.obj: $(SRC_D)\crypto\evp\c_all.c
-       $(CC) /Fo$(OBJ_D)\c_all.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\c_all.c
-
-$(OBJ_D)\evp_lib.obj: $(SRC_D)\crypto\evp\evp_lib.c
-       $(CC) /Fo$(OBJ_D)\evp_lib.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\evp_lib.c
-
-$(OBJ_D)\bio_ok.obj: $(SRC_D)\crypto\evp\bio_ok.c
-       $(CC) /Fo$(OBJ_D)\bio_ok.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\bio_ok.c
-
-$(OBJ_D)\evp_pkey.obj: $(SRC_D)\crypto\evp\evp_pkey.c
-       $(CC) /Fo$(OBJ_D)\evp_pkey.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\evp\evp_pkey.c
-
-$(OBJ_D)\evp_pbe.obj: $(SRC_D)\crypto\evp\evp_pbe.c
-       $(CC) /Fo$(OBJ_D)\evp_pbe.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\evp_pbe.c
-
-$(OBJ_D)\p5_crpt.obj: $(SRC_D)\crypto\evp\p5_crpt.c
-       $(CC) /Fo$(OBJ_D)\p5_crpt.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\p5_crpt.c
-
-$(OBJ_D)\p5_crpt2.obj: $(SRC_D)\crypto\evp\p5_crpt2.c
-       $(CC) /Fo$(OBJ_D)\p5_crpt2.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\evp\p5_crpt2.c
-
-$(OBJ_D)\a_object.obj: $(SRC_D)\crypto\asn1\a_object.c
-       $(CC) /Fo$(OBJ_D)\a_object.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\a_object.c
-
-$(OBJ_D)\a_bitstr.obj: $(SRC_D)\crypto\asn1\a_bitstr.c
-       $(CC) /Fo$(OBJ_D)\a_bitstr.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\a_bitstr.c
-
-$(OBJ_D)\a_utctm.obj: $(SRC_D)\crypto\asn1\a_utctm.c
-       $(CC) /Fo$(OBJ_D)\a_utctm.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\a_utctm.c
-
-$(OBJ_D)\a_gentm.obj: $(SRC_D)\crypto\asn1\a_gentm.c
-       $(CC) /Fo$(OBJ_D)\a_gentm.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\a_gentm.c
-
-$(OBJ_D)\a_time.obj: $(SRC_D)\crypto\asn1\a_time.c
-       $(CC) /Fo$(OBJ_D)\a_time.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_time.c
-
-$(OBJ_D)\a_int.obj: $(SRC_D)\crypto\asn1\a_int.c
-       $(CC) /Fo$(OBJ_D)\a_int.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_int.c
-
-$(OBJ_D)\a_octet.obj: $(SRC_D)\crypto\asn1\a_octet.c
-       $(CC) /Fo$(OBJ_D)\a_octet.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\a_octet.c
-
-$(OBJ_D)\a_print.obj: $(SRC_D)\crypto\asn1\a_print.c
-       $(CC) /Fo$(OBJ_D)\a_print.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\a_print.c
-
-$(OBJ_D)\a_type.obj: $(SRC_D)\crypto\asn1\a_type.c
-       $(CC) /Fo$(OBJ_D)\a_type.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_type.c
-
-$(OBJ_D)\a_set.obj: $(SRC_D)\crypto\asn1\a_set.c
-       $(CC) /Fo$(OBJ_D)\a_set.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_set.c
-
-$(OBJ_D)\a_dup.obj: $(SRC_D)\crypto\asn1\a_dup.c
-       $(CC) /Fo$(OBJ_D)\a_dup.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_dup.c
-
-$(OBJ_D)\a_d2i_fp.obj: $(SRC_D)\crypto\asn1\a_d2i_fp.c
-       $(CC) /Fo$(OBJ_D)\a_d2i_fp.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\a_d2i_fp.c
-
-$(OBJ_D)\a_i2d_fp.obj: $(SRC_D)\crypto\asn1\a_i2d_fp.c
-       $(CC) /Fo$(OBJ_D)\a_i2d_fp.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\a_i2d_fp.c
-
-$(OBJ_D)\a_bmp.obj: $(SRC_D)\crypto\asn1\a_bmp.c
-       $(CC) /Fo$(OBJ_D)\a_bmp.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_bmp.c
-
-$(OBJ_D)\a_enum.obj: $(SRC_D)\crypto\asn1\a_enum.c
-       $(CC) /Fo$(OBJ_D)\a_enum.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_enum.c
-
-$(OBJ_D)\a_vis.obj: $(SRC_D)\crypto\asn1\a_vis.c
-       $(CC) /Fo$(OBJ_D)\a_vis.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_vis.c
-
-$(OBJ_D)\a_utf8.obj: $(SRC_D)\crypto\asn1\a_utf8.c
-       $(CC) /Fo$(OBJ_D)\a_utf8.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_utf8.c
-
-$(OBJ_D)\a_sign.obj: $(SRC_D)\crypto\asn1\a_sign.c
-       $(CC) /Fo$(OBJ_D)\a_sign.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_sign.c
-
-$(OBJ_D)\a_digest.obj: $(SRC_D)\crypto\asn1\a_digest.c
-       $(CC) /Fo$(OBJ_D)\a_digest.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\a_digest.c
-
-$(OBJ_D)\a_verify.obj: $(SRC_D)\crypto\asn1\a_verify.c
-       $(CC) /Fo$(OBJ_D)\a_verify.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\a_verify.c
-
-$(OBJ_D)\x_algor.obj: $(SRC_D)\crypto\asn1\x_algor.c
-       $(CC) /Fo$(OBJ_D)\x_algor.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\x_algor.c
-
-$(OBJ_D)\x_val.obj: $(SRC_D)\crypto\asn1\x_val.c
-       $(CC) /Fo$(OBJ_D)\x_val.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_val.c
-
-$(OBJ_D)\x_pubkey.obj: $(SRC_D)\crypto\asn1\x_pubkey.c
-       $(CC) /Fo$(OBJ_D)\x_pubkey.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\x_pubkey.c
-
-$(OBJ_D)\x_sig.obj: $(SRC_D)\crypto\asn1\x_sig.c
-       $(CC) /Fo$(OBJ_D)\x_sig.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_sig.c
-
-$(OBJ_D)\x_req.obj: $(SRC_D)\crypto\asn1\x_req.c
-       $(CC) /Fo$(OBJ_D)\x_req.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_req.c
-
-$(OBJ_D)\x_attrib.obj: $(SRC_D)\crypto\asn1\x_attrib.c
-       $(CC) /Fo$(OBJ_D)\x_attrib.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\x_attrib.c
-
-$(OBJ_D)\x_name.obj: $(SRC_D)\crypto\asn1\x_name.c
-       $(CC) /Fo$(OBJ_D)\x_name.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_name.c
-
-$(OBJ_D)\x_cinf.obj: $(SRC_D)\crypto\asn1\x_cinf.c
-       $(CC) /Fo$(OBJ_D)\x_cinf.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_cinf.c
-
-$(OBJ_D)\x_x509.obj: $(SRC_D)\crypto\asn1\x_x509.c
-       $(CC) /Fo$(OBJ_D)\x_x509.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_x509.c
-
-$(OBJ_D)\x_crl.obj: $(SRC_D)\crypto\asn1\x_crl.c
-       $(CC) /Fo$(OBJ_D)\x_crl.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_crl.c
-
-$(OBJ_D)\x_info.obj: $(SRC_D)\crypto\asn1\x_info.c
-       $(CC) /Fo$(OBJ_D)\x_info.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_info.c
-
-$(OBJ_D)\x_spki.obj: $(SRC_D)\crypto\asn1\x_spki.c
-       $(CC) /Fo$(OBJ_D)\x_spki.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_spki.c
-
-$(OBJ_D)\nsseq.obj: $(SRC_D)\crypto\asn1\nsseq.c
-       $(CC) /Fo$(OBJ_D)\nsseq.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\nsseq.c
-
-$(OBJ_D)\d2i_r_pr.obj: $(SRC_D)\crypto\asn1\d2i_r_pr.c
-       $(CC) /Fo$(OBJ_D)\d2i_r_pr.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\d2i_r_pr.c
-
-$(OBJ_D)\i2d_r_pr.obj: $(SRC_D)\crypto\asn1\i2d_r_pr.c
-       $(CC) /Fo$(OBJ_D)\i2d_r_pr.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\i2d_r_pr.c
-
-$(OBJ_D)\d2i_r_pu.obj: $(SRC_D)\crypto\asn1\d2i_r_pu.c
-       $(CC) /Fo$(OBJ_D)\d2i_r_pu.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\d2i_r_pu.c
-
-$(OBJ_D)\i2d_r_pu.obj: $(SRC_D)\crypto\asn1\i2d_r_pu.c
-       $(CC) /Fo$(OBJ_D)\i2d_r_pu.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\i2d_r_pu.c
-
-$(OBJ_D)\d2i_s_pr.obj: $(SRC_D)\crypto\asn1\d2i_s_pr.c
-       $(CC) /Fo$(OBJ_D)\d2i_s_pr.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\d2i_s_pr.c
-
-$(OBJ_D)\i2d_s_pr.obj: $(SRC_D)\crypto\asn1\i2d_s_pr.c
-       $(CC) /Fo$(OBJ_D)\i2d_s_pr.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\i2d_s_pr.c
-
-$(OBJ_D)\d2i_s_pu.obj: $(SRC_D)\crypto\asn1\d2i_s_pu.c
-       $(CC) /Fo$(OBJ_D)\d2i_s_pu.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\d2i_s_pu.c
-
-$(OBJ_D)\i2d_s_pu.obj: $(SRC_D)\crypto\asn1\i2d_s_pu.c
-       $(CC) /Fo$(OBJ_D)\i2d_s_pu.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\i2d_s_pu.c
-
-$(OBJ_D)\d2i_pu.obj: $(SRC_D)\crypto\asn1\d2i_pu.c
-       $(CC) /Fo$(OBJ_D)\d2i_pu.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\d2i_pu.c
-
-$(OBJ_D)\d2i_pr.obj: $(SRC_D)\crypto\asn1\d2i_pr.c
-       $(CC) /Fo$(OBJ_D)\d2i_pr.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\d2i_pr.c
-
-$(OBJ_D)\i2d_pu.obj: $(SRC_D)\crypto\asn1\i2d_pu.c
-       $(CC) /Fo$(OBJ_D)\i2d_pu.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\i2d_pu.c
-
-$(OBJ_D)\i2d_pr.obj: $(SRC_D)\crypto\asn1\i2d_pr.c
-       $(CC) /Fo$(OBJ_D)\i2d_pr.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\i2d_pr.c
-
-$(OBJ_D)\t_req.obj: $(SRC_D)\crypto\asn1\t_req.c
-       $(CC) /Fo$(OBJ_D)\t_req.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\t_req.c
-
-$(OBJ_D)\t_x509.obj: $(SRC_D)\crypto\asn1\t_x509.c
-       $(CC) /Fo$(OBJ_D)\t_x509.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\t_x509.c
-
-$(OBJ_D)\t_crl.obj: $(SRC_D)\crypto\asn1\t_crl.c
-       $(CC) /Fo$(OBJ_D)\t_crl.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\t_crl.c
-
-$(OBJ_D)\t_pkey.obj: $(SRC_D)\crypto\asn1\t_pkey.c
-       $(CC) /Fo$(OBJ_D)\t_pkey.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\t_pkey.c
-
-$(OBJ_D)\p7_i_s.obj: $(SRC_D)\crypto\asn1\p7_i_s.c
-       $(CC) /Fo$(OBJ_D)\p7_i_s.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\p7_i_s.c
-
-$(OBJ_D)\p7_signi.obj: $(SRC_D)\crypto\asn1\p7_signi.c
-       $(CC) /Fo$(OBJ_D)\p7_signi.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\p7_signi.c
-
-$(OBJ_D)\p7_signd.obj: $(SRC_D)\crypto\asn1\p7_signd.c
-       $(CC) /Fo$(OBJ_D)\p7_signd.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\p7_signd.c
-
-$(OBJ_D)\p7_recip.obj: $(SRC_D)\crypto\asn1\p7_recip.c
-       $(CC) /Fo$(OBJ_D)\p7_recip.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\p7_recip.c
-
-$(OBJ_D)\p7_enc_c.obj: $(SRC_D)\crypto\asn1\p7_enc_c.c
-       $(CC) /Fo$(OBJ_D)\p7_enc_c.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\p7_enc_c.c
-
-$(OBJ_D)\p7_evp.obj: $(SRC_D)\crypto\asn1\p7_evp.c
-       $(CC) /Fo$(OBJ_D)\p7_evp.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\p7_evp.c
-
-$(OBJ_D)\p7_dgst.obj: $(SRC_D)\crypto\asn1\p7_dgst.c
-       $(CC) /Fo$(OBJ_D)\p7_dgst.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\p7_dgst.c
-
-$(OBJ_D)\p7_s_e.obj: $(SRC_D)\crypto\asn1\p7_s_e.c
-       $(CC) /Fo$(OBJ_D)\p7_s_e.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\p7_s_e.c
-
-$(OBJ_D)\p7_enc.obj: $(SRC_D)\crypto\asn1\p7_enc.c
-       $(CC) /Fo$(OBJ_D)\p7_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\p7_enc.c
-
-$(OBJ_D)\p7_lib.obj: $(SRC_D)\crypto\asn1\p7_lib.c
-       $(CC) /Fo$(OBJ_D)\p7_lib.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\p7_lib.c
-
-$(OBJ_D)\f_int.obj: $(SRC_D)\crypto\asn1\f_int.c
-       $(CC) /Fo$(OBJ_D)\f_int.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\f_int.c
-
-$(OBJ_D)\f_string.obj: $(SRC_D)\crypto\asn1\f_string.c
-       $(CC) /Fo$(OBJ_D)\f_string.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\f_string.c
-
-$(OBJ_D)\i2d_dhp.obj: $(SRC_D)\crypto\asn1\i2d_dhp.c
-       $(CC) /Fo$(OBJ_D)\i2d_dhp.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\i2d_dhp.c
-
-$(OBJ_D)\i2d_dsap.obj: $(SRC_D)\crypto\asn1\i2d_dsap.c
-       $(CC) /Fo$(OBJ_D)\i2d_dsap.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\i2d_dsap.c
-
-$(OBJ_D)\d2i_dhp.obj: $(SRC_D)\crypto\asn1\d2i_dhp.c
-       $(CC) /Fo$(OBJ_D)\d2i_dhp.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\d2i_dhp.c
-
-$(OBJ_D)\d2i_dsap.obj: $(SRC_D)\crypto\asn1\d2i_dsap.c
-       $(CC) /Fo$(OBJ_D)\d2i_dsap.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\d2i_dsap.c
-
-$(OBJ_D)\n_pkey.obj: $(SRC_D)\crypto\asn1\n_pkey.c
-       $(CC) /Fo$(OBJ_D)\n_pkey.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\n_pkey.c
-
-$(OBJ_D)\f_enum.obj: $(SRC_D)\crypto\asn1\f_enum.c
-       $(CC) /Fo$(OBJ_D)\f_enum.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\f_enum.c
-
-$(OBJ_D)\a_hdr.obj: $(SRC_D)\crypto\asn1\a_hdr.c
-       $(CC) /Fo$(OBJ_D)\a_hdr.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_hdr.c
-
-$(OBJ_D)\x_pkey.obj: $(SRC_D)\crypto\asn1\x_pkey.c
-       $(CC) /Fo$(OBJ_D)\x_pkey.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_pkey.c
-
-$(OBJ_D)\a_bool.obj: $(SRC_D)\crypto\asn1\a_bool.c
-       $(CC) /Fo$(OBJ_D)\a_bool.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_bool.c
-
-$(OBJ_D)\x_exten.obj: $(SRC_D)\crypto\asn1\x_exten.c
-       $(CC) /Fo$(OBJ_D)\x_exten.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\x_exten.c
-
-$(OBJ_D)\asn1_par.obj: $(SRC_D)\crypto\asn1\asn1_par.c
-       $(CC) /Fo$(OBJ_D)\asn1_par.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\asn1_par.c
-
-$(OBJ_D)\asn1_lib.obj: $(SRC_D)\crypto\asn1\asn1_lib.c
-       $(CC) /Fo$(OBJ_D)\asn1_lib.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\asn1_lib.c
-
-$(OBJ_D)\asn1_err.obj: $(SRC_D)\crypto\asn1\asn1_err.c
-       $(CC) /Fo$(OBJ_D)\asn1_err.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\asn1_err.c
-
-$(OBJ_D)\a_meth.obj: $(SRC_D)\crypto\asn1\a_meth.c
-       $(CC) /Fo$(OBJ_D)\a_meth.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_meth.c
-
-$(OBJ_D)\a_bytes.obj: $(SRC_D)\crypto\asn1\a_bytes.c
-       $(CC) /Fo$(OBJ_D)\a_bytes.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\a_bytes.c
-
-$(OBJ_D)\evp_asn1.obj: $(SRC_D)\crypto\asn1\evp_asn1.c
-       $(CC) /Fo$(OBJ_D)\evp_asn1.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\evp_asn1.c
-
-$(OBJ_D)\asn_pack.obj: $(SRC_D)\crypto\asn1\asn_pack.c
-       $(CC) /Fo$(OBJ_D)\asn_pack.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\asn_pack.c
-
-$(OBJ_D)\p5_pbe.obj: $(SRC_D)\crypto\asn1\p5_pbe.c
-       $(CC) /Fo$(OBJ_D)\p5_pbe.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\p5_pbe.c
-
-$(OBJ_D)\p5_pbev2.obj: $(SRC_D)\crypto\asn1\p5_pbev2.c
-       $(CC) /Fo$(OBJ_D)\p5_pbev2.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\p5_pbev2.c
-
-$(OBJ_D)\p8_pkey.obj: $(SRC_D)\crypto\asn1\p8_pkey.c
-       $(CC) /Fo$(OBJ_D)\p8_pkey.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\p8_pkey.c
-
-$(OBJ_D)\pem_sign.obj: $(SRC_D)\crypto\pem\pem_sign.c
-       $(CC) /Fo$(OBJ_D)\pem_sign.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\pem\pem_sign.c
-
-$(OBJ_D)\pem_seal.obj: $(SRC_D)\crypto\pem\pem_seal.c
-       $(CC) /Fo$(OBJ_D)\pem_seal.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\pem\pem_seal.c
-
-$(OBJ_D)\pem_info.obj: $(SRC_D)\crypto\pem\pem_info.c
-       $(CC) /Fo$(OBJ_D)\pem_info.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\pem\pem_info.c
-
-$(OBJ_D)\pem_lib.obj: $(SRC_D)\crypto\pem\pem_lib.c
-       $(CC) /Fo$(OBJ_D)\pem_lib.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\pem\pem_lib.c
-
-$(OBJ_D)\pem_all.obj: $(SRC_D)\crypto\pem\pem_all.c
-       $(CC) /Fo$(OBJ_D)\pem_all.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\pem\pem_all.c
-
-$(OBJ_D)\pem_err.obj: $(SRC_D)\crypto\pem\pem_err.c
-       $(CC) /Fo$(OBJ_D)\pem_err.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\pem\pem_err.c
-
-$(OBJ_D)\x509_def.obj: $(SRC_D)\crypto\x509\x509_def.c
-       $(CC) /Fo$(OBJ_D)\x509_def.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509\x509_def.c
-
-$(OBJ_D)\x509_d2.obj: $(SRC_D)\crypto\x509\x509_d2.c
-       $(CC) /Fo$(OBJ_D)\x509_d2.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509\x509_d2.c
-
-$(OBJ_D)\x509_r2x.obj: $(SRC_D)\crypto\x509\x509_r2x.c
-       $(CC) /Fo$(OBJ_D)\x509_r2x.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509\x509_r2x.c
-
-$(OBJ_D)\x509_cmp.obj: $(SRC_D)\crypto\x509\x509_cmp.c
-       $(CC) /Fo$(OBJ_D)\x509_cmp.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509\x509_cmp.c
-
-$(OBJ_D)\x509_obj.obj: $(SRC_D)\crypto\x509\x509_obj.c
-       $(CC) /Fo$(OBJ_D)\x509_obj.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509\x509_obj.c
-
-$(OBJ_D)\x509_req.obj: $(SRC_D)\crypto\x509\x509_req.c
-       $(CC) /Fo$(OBJ_D)\x509_req.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509\x509_req.c
-
-$(OBJ_D)\x509_vfy.obj: $(SRC_D)\crypto\x509\x509_vfy.c
-       $(CC) /Fo$(OBJ_D)\x509_vfy.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509\x509_vfy.c
-
-$(OBJ_D)\x509_set.obj: $(SRC_D)\crypto\x509\x509_set.c
-       $(CC) /Fo$(OBJ_D)\x509_set.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509\x509_set.c
-
-$(OBJ_D)\x509rset.obj: $(SRC_D)\crypto\x509\x509rset.c
-       $(CC) /Fo$(OBJ_D)\x509rset.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509\x509rset.c
-
-$(OBJ_D)\x509_err.obj: $(SRC_D)\crypto\x509\x509_err.c
-       $(CC) /Fo$(OBJ_D)\x509_err.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509\x509_err.c
-
-$(OBJ_D)\x509name.obj: $(SRC_D)\crypto\x509\x509name.c
-       $(CC) /Fo$(OBJ_D)\x509name.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509\x509name.c
-
-$(OBJ_D)\x509_v3.obj: $(SRC_D)\crypto\x509\x509_v3.c
-       $(CC) /Fo$(OBJ_D)\x509_v3.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509\x509_v3.c
-
-$(OBJ_D)\x509_ext.obj: $(SRC_D)\crypto\x509\x509_ext.c
-       $(CC) /Fo$(OBJ_D)\x509_ext.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509\x509_ext.c
-
-$(OBJ_D)\x509type.obj: $(SRC_D)\crypto\x509\x509type.c
-       $(CC) /Fo$(OBJ_D)\x509type.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509\x509type.c
-
-$(OBJ_D)\x509_lu.obj: $(SRC_D)\crypto\x509\x509_lu.c
-       $(CC) /Fo$(OBJ_D)\x509_lu.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509\x509_lu.c
-
-$(OBJ_D)\x_all.obj: $(SRC_D)\crypto\x509\x_all.c
-       $(CC) /Fo$(OBJ_D)\x_all.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\x509\x_all.c
-
-$(OBJ_D)\x509_txt.obj: $(SRC_D)\crypto\x509\x509_txt.c
-       $(CC) /Fo$(OBJ_D)\x509_txt.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509\x509_txt.c
-
-$(OBJ_D)\by_file.obj: $(SRC_D)\crypto\x509\by_file.c
-       $(CC) /Fo$(OBJ_D)\by_file.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509\by_file.c
-
-$(OBJ_D)\by_dir.obj: $(SRC_D)\crypto\x509\by_dir.c
-       $(CC) /Fo$(OBJ_D)\by_dir.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\x509\by_dir.c
-
-$(OBJ_D)\v3_bcons.obj: $(SRC_D)\crypto\x509v3\v3_bcons.c
-       $(CC) /Fo$(OBJ_D)\v3_bcons.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509v3\v3_bcons.c
-
-$(OBJ_D)\v3_bitst.obj: $(SRC_D)\crypto\x509v3\v3_bitst.c
-       $(CC) /Fo$(OBJ_D)\v3_bitst.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509v3\v3_bitst.c
-
-$(OBJ_D)\v3_conf.obj: $(SRC_D)\crypto\x509v3\v3_conf.c
-       $(CC) /Fo$(OBJ_D)\v3_conf.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509v3\v3_conf.c
-
-$(OBJ_D)\v3_extku.obj: $(SRC_D)\crypto\x509v3\v3_extku.c
-       $(CC) /Fo$(OBJ_D)\v3_extku.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509v3\v3_extku.c
-
-$(OBJ_D)\v3_ia5.obj: $(SRC_D)\crypto\x509v3\v3_ia5.c
-       $(CC) /Fo$(OBJ_D)\v3_ia5.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509v3\v3_ia5.c
-
-$(OBJ_D)\v3_lib.obj: $(SRC_D)\crypto\x509v3\v3_lib.c
-       $(CC) /Fo$(OBJ_D)\v3_lib.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509v3\v3_lib.c
-
-$(OBJ_D)\v3_prn.obj: $(SRC_D)\crypto\x509v3\v3_prn.c
-       $(CC) /Fo$(OBJ_D)\v3_prn.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509v3\v3_prn.c
-
-$(OBJ_D)\v3_utl.obj: $(SRC_D)\crypto\x509v3\v3_utl.c
-       $(CC) /Fo$(OBJ_D)\v3_utl.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509v3\v3_utl.c
-
-$(OBJ_D)\v3err.obj: $(SRC_D)\crypto\x509v3\v3err.c
-       $(CC) /Fo$(OBJ_D)\v3err.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\x509v3\v3err.c
-
-$(OBJ_D)\v3_genn.obj: $(SRC_D)\crypto\x509v3\v3_genn.c
-       $(CC) /Fo$(OBJ_D)\v3_genn.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509v3\v3_genn.c
-
-$(OBJ_D)\v3_alt.obj: $(SRC_D)\crypto\x509v3\v3_alt.c
-       $(CC) /Fo$(OBJ_D)\v3_alt.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509v3\v3_alt.c
-
-$(OBJ_D)\v3_skey.obj: $(SRC_D)\crypto\x509v3\v3_skey.c
-       $(CC) /Fo$(OBJ_D)\v3_skey.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509v3\v3_skey.c
-
-$(OBJ_D)\v3_akey.obj: $(SRC_D)\crypto\x509v3\v3_akey.c
-       $(CC) /Fo$(OBJ_D)\v3_akey.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509v3\v3_akey.c
-
-$(OBJ_D)\v3_pku.obj: $(SRC_D)\crypto\x509v3\v3_pku.c
-       $(CC) /Fo$(OBJ_D)\v3_pku.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509v3\v3_pku.c
-
-$(OBJ_D)\v3_int.obj: $(SRC_D)\crypto\x509v3\v3_int.c
-       $(CC) /Fo$(OBJ_D)\v3_int.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509v3\v3_int.c
-
-$(OBJ_D)\v3_enum.obj: $(SRC_D)\crypto\x509v3\v3_enum.c
-       $(CC) /Fo$(OBJ_D)\v3_enum.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509v3\v3_enum.c
-
-$(OBJ_D)\v3_sxnet.obj: $(SRC_D)\crypto\x509v3\v3_sxnet.c
-       $(CC) /Fo$(OBJ_D)\v3_sxnet.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509v3\v3_sxnet.c
-
-$(OBJ_D)\v3_cpols.obj: $(SRC_D)\crypto\x509v3\v3_cpols.c
-       $(CC) /Fo$(OBJ_D)\v3_cpols.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509v3\v3_cpols.c
-
-$(OBJ_D)\v3_crld.obj: $(SRC_D)\crypto\x509v3\v3_crld.c
-       $(CC) /Fo$(OBJ_D)\v3_crld.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509v3\v3_crld.c
-
-$(OBJ_D)\conf.obj: $(SRC_D)\crypto\conf\conf.c
-       $(CC) /Fo$(OBJ_D)\conf.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\conf\conf.c
-
-$(OBJ_D)\conf_err.obj: $(SRC_D)\crypto\conf\conf_err.c
-       $(CC) /Fo$(OBJ_D)\conf_err.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\conf\conf_err.c
-
-$(OBJ_D)\txt_db.obj: $(SRC_D)\crypto\txt_db\txt_db.c
-       $(CC) /Fo$(OBJ_D)\txt_db.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\txt_db\txt_db.c
-
-$(OBJ_D)\pk7_lib.obj: $(SRC_D)\crypto\pkcs7\pk7_lib.c
-       $(CC) /Fo$(OBJ_D)\pk7_lib.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\pkcs7\pk7_lib.c
-
-$(OBJ_D)\pkcs7err.obj: $(SRC_D)\crypto\pkcs7\pkcs7err.c
-       $(CC) /Fo$(OBJ_D)\pkcs7err.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\pkcs7\pkcs7err.c
-
-$(OBJ_D)\pk7_doit.obj: $(SRC_D)\crypto\pkcs7\pk7_doit.c
-       $(CC) /Fo$(OBJ_D)\pk7_doit.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\pkcs7\pk7_doit.c
-
-$(OBJ_D)\p12_add.obj: $(SRC_D)\crypto\pkcs12\p12_add.c
-       $(CC) /Fo$(OBJ_D)\p12_add.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\pkcs12\p12_add.c
-
-$(OBJ_D)\p12_attr.obj: $(SRC_D)\crypto\pkcs12\p12_attr.c
-       $(CC) /Fo$(OBJ_D)\p12_attr.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\pkcs12\p12_attr.c
-
-$(OBJ_D)\p12_bags.obj: $(SRC_D)\crypto\pkcs12\p12_bags.c
-       $(CC) /Fo$(OBJ_D)\p12_bags.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\pkcs12\p12_bags.c
-
-$(OBJ_D)\p12_crpt.obj: $(SRC_D)\crypto\pkcs12\p12_crpt.c
-       $(CC) /Fo$(OBJ_D)\p12_crpt.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\pkcs12\p12_crpt.c
-
-$(OBJ_D)\p12_crt.obj: $(SRC_D)\crypto\pkcs12\p12_crt.c
-       $(CC) /Fo$(OBJ_D)\p12_crt.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\pkcs12\p12_crt.c
-
-$(OBJ_D)\p12_decr.obj: $(SRC_D)\crypto\pkcs12\p12_decr.c
-       $(CC) /Fo$(OBJ_D)\p12_decr.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\pkcs12\p12_decr.c
-
-$(OBJ_D)\p12_init.obj: $(SRC_D)\crypto\pkcs12\p12_init.c
-       $(CC) /Fo$(OBJ_D)\p12_init.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\pkcs12\p12_init.c
-
-$(OBJ_D)\p12_key.obj: $(SRC_D)\crypto\pkcs12\p12_key.c
-       $(CC) /Fo$(OBJ_D)\p12_key.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\pkcs12\p12_key.c
-
-$(OBJ_D)\p12_kiss.obj: $(SRC_D)\crypto\pkcs12\p12_kiss.c
-       $(CC) /Fo$(OBJ_D)\p12_kiss.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\pkcs12\p12_kiss.c
-
-$(OBJ_D)\p12_lib.obj: $(SRC_D)\crypto\pkcs12\p12_lib.c
-       $(CC) /Fo$(OBJ_D)\p12_lib.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\pkcs12\p12_lib.c
-
-$(OBJ_D)\p12_mac.obj: $(SRC_D)\crypto\pkcs12\p12_mac.c
-       $(CC) /Fo$(OBJ_D)\p12_mac.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\pkcs12\p12_mac.c
-
-$(OBJ_D)\p12_mutl.obj: $(SRC_D)\crypto\pkcs12\p12_mutl.c
-       $(CC) /Fo$(OBJ_D)\p12_mutl.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\pkcs12\p12_mutl.c
-
-$(OBJ_D)\p12_sbag.obj: $(SRC_D)\crypto\pkcs12\p12_sbag.c
-       $(CC) /Fo$(OBJ_D)\p12_sbag.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\pkcs12\p12_sbag.c
-
-$(OBJ_D)\p12_utl.obj: $(SRC_D)\crypto\pkcs12\p12_utl.c
-       $(CC) /Fo$(OBJ_D)\p12_utl.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\pkcs12\p12_utl.c
-
-$(OBJ_D)\pk12err.obj: $(SRC_D)\crypto\pkcs12\pk12err.c
-       $(CC) /Fo$(OBJ_D)\pk12err.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\pkcs12\pk12err.c
-
-$(OBJ_D)\comp_lib.obj: $(SRC_D)\crypto\comp\comp_lib.c
-       $(CC) /Fo$(OBJ_D)\comp_lib.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\comp\comp_lib.c
-
-$(OBJ_D)\c_rle.obj: $(SRC_D)\crypto\comp\c_rle.c
-       $(CC) /Fo$(OBJ_D)\c_rle.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\comp\c_rle.c
-
-$(OBJ_D)\c_zlib.obj: $(SRC_D)\crypto\comp\c_zlib.c
-       $(CC) /Fo$(OBJ_D)\c_zlib.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\comp\c_zlib.c
-
-$(OBJ_D)\s2_meth.obj: $(SRC_D)\ssl\s2_meth.c
-       $(CC) /Fo$(OBJ_D)\s2_meth.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s2_meth.c
-
-$(OBJ_D)\s2_srvr.obj: $(SRC_D)\ssl\s2_srvr.c
-       $(CC) /Fo$(OBJ_D)\s2_srvr.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s2_srvr.c
-
-$(OBJ_D)\s2_clnt.obj: $(SRC_D)\ssl\s2_clnt.c
-       $(CC) /Fo$(OBJ_D)\s2_clnt.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s2_clnt.c
-
-$(OBJ_D)\s2_lib.obj: $(SRC_D)\ssl\s2_lib.c
-       $(CC) /Fo$(OBJ_D)\s2_lib.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s2_lib.c
-
-$(OBJ_D)\s2_enc.obj: $(SRC_D)\ssl\s2_enc.c
-       $(CC) /Fo$(OBJ_D)\s2_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s2_enc.c
-
-$(OBJ_D)\s2_pkt.obj: $(SRC_D)\ssl\s2_pkt.c
-       $(CC) /Fo$(OBJ_D)\s2_pkt.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s2_pkt.c
-
-$(OBJ_D)\s3_meth.obj: $(SRC_D)\ssl\s3_meth.c
-       $(CC) /Fo$(OBJ_D)\s3_meth.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s3_meth.c
-
-$(OBJ_D)\s3_srvr.obj: $(SRC_D)\ssl\s3_srvr.c
-       $(CC) /Fo$(OBJ_D)\s3_srvr.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s3_srvr.c
-
-$(OBJ_D)\s3_clnt.obj: $(SRC_D)\ssl\s3_clnt.c
-       $(CC) /Fo$(OBJ_D)\s3_clnt.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s3_clnt.c
-
-$(OBJ_D)\s3_lib.obj: $(SRC_D)\ssl\s3_lib.c
-       $(CC) /Fo$(OBJ_D)\s3_lib.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s3_lib.c
-
-$(OBJ_D)\s3_enc.obj: $(SRC_D)\ssl\s3_enc.c
-       $(CC) /Fo$(OBJ_D)\s3_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s3_enc.c
-
-$(OBJ_D)\s3_pkt.obj: $(SRC_D)\ssl\s3_pkt.c
-       $(CC) /Fo$(OBJ_D)\s3_pkt.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s3_pkt.c
-
-$(OBJ_D)\s3_both.obj: $(SRC_D)\ssl\s3_both.c
-       $(CC) /Fo$(OBJ_D)\s3_both.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s3_both.c
-
-$(OBJ_D)\s23_meth.obj: $(SRC_D)\ssl\s23_meth.c
-       $(CC) /Fo$(OBJ_D)\s23_meth.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s23_meth.c
-
-$(OBJ_D)\s23_srvr.obj: $(SRC_D)\ssl\s23_srvr.c
-       $(CC) /Fo$(OBJ_D)\s23_srvr.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s23_srvr.c
-
-$(OBJ_D)\s23_clnt.obj: $(SRC_D)\ssl\s23_clnt.c
-       $(CC) /Fo$(OBJ_D)\s23_clnt.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s23_clnt.c
-
-$(OBJ_D)\s23_lib.obj: $(SRC_D)\ssl\s23_lib.c
-       $(CC) /Fo$(OBJ_D)\s23_lib.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s23_lib.c
-
-$(OBJ_D)\s23_pkt.obj: $(SRC_D)\ssl\s23_pkt.c
-       $(CC) /Fo$(OBJ_D)\s23_pkt.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s23_pkt.c
-
-$(OBJ_D)\t1_meth.obj: $(SRC_D)\ssl\t1_meth.c
-       $(CC) /Fo$(OBJ_D)\t1_meth.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\t1_meth.c
-
-$(OBJ_D)\t1_srvr.obj: $(SRC_D)\ssl\t1_srvr.c
-       $(CC) /Fo$(OBJ_D)\t1_srvr.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\t1_srvr.c
-
-$(OBJ_D)\t1_clnt.obj: $(SRC_D)\ssl\t1_clnt.c
-       $(CC) /Fo$(OBJ_D)\t1_clnt.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\t1_clnt.c
-
-$(OBJ_D)\t1_lib.obj: $(SRC_D)\ssl\t1_lib.c
-       $(CC) /Fo$(OBJ_D)\t1_lib.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\t1_lib.c
-
-$(OBJ_D)\t1_enc.obj: $(SRC_D)\ssl\t1_enc.c
-       $(CC) /Fo$(OBJ_D)\t1_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\t1_enc.c
-
-$(OBJ_D)\ssl_lib.obj: $(SRC_D)\ssl\ssl_lib.c
-       $(CC) /Fo$(OBJ_D)\ssl_lib.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\ssl_lib.c
-
-$(OBJ_D)\ssl_err2.obj: $(SRC_D)\ssl\ssl_err2.c
-       $(CC) /Fo$(OBJ_D)\ssl_err2.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\ssl_err2.c
-
-$(OBJ_D)\ssl_cert.obj: $(SRC_D)\ssl\ssl_cert.c
-       $(CC) /Fo$(OBJ_D)\ssl_cert.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\ssl_cert.c
-
-$(OBJ_D)\ssl_sess.obj: $(SRC_D)\ssl\ssl_sess.c
-       $(CC) /Fo$(OBJ_D)\ssl_sess.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\ssl_sess.c
-
-$(OBJ_D)\ssl_ciph.obj: $(SRC_D)\ssl\ssl_ciph.c
-       $(CC) /Fo$(OBJ_D)\ssl_ciph.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\ssl_ciph.c
-
-$(OBJ_D)\ssl_stat.obj: $(SRC_D)\ssl\ssl_stat.c
-       $(CC) /Fo$(OBJ_D)\ssl_stat.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\ssl_stat.c
-
-$(OBJ_D)\ssl_rsa.obj: $(SRC_D)\ssl\ssl_rsa.c
-       $(CC) /Fo$(OBJ_D)\ssl_rsa.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\ssl_rsa.c
-
-$(OBJ_D)\ssl_asn1.obj: $(SRC_D)\ssl\ssl_asn1.c
-       $(CC) /Fo$(OBJ_D)\ssl_asn1.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\ssl_asn1.c
-
-$(OBJ_D)\ssl_txt.obj: $(SRC_D)\ssl\ssl_txt.c
-       $(CC) /Fo$(OBJ_D)\ssl_txt.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\ssl_txt.c
-
-$(OBJ_D)\ssl_algs.obj: $(SRC_D)\ssl\ssl_algs.c
-       $(CC) /Fo$(OBJ_D)\ssl_algs.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\ssl_algs.c
-
-$(OBJ_D)\bio_ssl.obj: $(SRC_D)\ssl\bio_ssl.c
-       $(CC) /Fo$(OBJ_D)\bio_ssl.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\bio_ssl.c
-
-$(OBJ_D)\ssl_err.obj: $(SRC_D)\ssl\ssl_err.c
-       $(CC) /Fo$(OBJ_D)\ssl_err.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\ssl_err.c
-
-$(OBJ_D)\rsaref.obj: $(SRC_D)\rsaref\rsaref.c
-       $(CC) /Fo$(OBJ_D)\rsaref.obj  $(LIB_CFLAGS) -c $(SRC_D)\rsaref\rsaref.c
-
-$(OBJ_D)\rsar_err.obj: $(SRC_D)\rsaref\rsar_err.c
-       $(CC) /Fo$(OBJ_D)\rsar_err.obj  $(LIB_CFLAGS) -c $(SRC_D)\rsaref\rsar_err.c
-
-$(TEST_D)\md2test.exe: $(OBJ_D)\md2test.obj $(LIBS_DEP)
-  $(LINK) $(LFLAGS) /out:$(TEST_D)\md2test.exe @<<
-  $(APP_EX_OBJ) $(OBJ_D)\md2test.obj $(L_LIBS) $(EX_LIBS)
-<<
-
-$(TEST_D)\md5test.exe: $(OBJ_D)\md5test.obj $(LIBS_DEP)
-  $(LINK) $(LFLAGS) /out:$(TEST_D)\md5test.exe @<<
-  $(APP_EX_OBJ) $(OBJ_D)\md5test.obj $(L_LIBS) $(EX_LIBS)
-<<
-
-$(TEST_D)\shatest.exe: $(OBJ_D)\shatest.obj $(LIBS_DEP)
-  $(LINK) $(LFLAGS) /out:$(TEST_D)\shatest.exe @<<
-  $(APP_EX_OBJ) $(OBJ_D)\shatest.obj $(L_LIBS) $(EX_LIBS)
-<<
-
-$(TEST_D)\sha1test.exe: $(OBJ_D)\sha1test.obj $(LIBS_DEP)
-  $(LINK) $(LFLAGS) /out:$(TEST_D)\sha1test.exe @<<
-  $(APP_EX_OBJ) $(OBJ_D)\sha1test.obj $(L_LIBS) $(EX_LIBS)
-<<
-
-$(TEST_D)\mdc2test.exe: $(OBJ_D)\mdc2test.obj $(LIBS_DEP)
-  $(LINK) $(LFLAGS) /out:$(TEST_D)\mdc2test.exe @<<
-  $(APP_EX_OBJ) $(OBJ_D)\mdc2test.obj $(L_LIBS) $(EX_LIBS)
-<<
-
-$(TEST_D)\hmactest.exe: $(OBJ_D)\hmactest.obj $(LIBS_DEP)
-  $(LINK) $(LFLAGS) /out:$(TEST_D)\hmactest.exe @<<
-  $(APP_EX_OBJ) $(OBJ_D)\hmactest.obj $(L_LIBS) $(EX_LIBS)
-<<
-
-$(TEST_D)\rmdtest.exe: $(OBJ_D)\rmdtest.obj $(LIBS_DEP)
-  $(LINK) $(LFLAGS) /out:$(TEST_D)\rmdtest.exe @<<
-  $(APP_EX_OBJ) $(OBJ_D)\rmdtest.obj $(L_LIBS) $(EX_LIBS)
-<<
-
-$(TEST_D)\destest.exe: $(OBJ_D)\destest.obj $(LIBS_DEP)
-  $(LINK) $(LFLAGS) /out:$(TEST_D)\destest.exe @<<
-  $(APP_EX_OBJ) $(OBJ_D)\destest.obj $(L_LIBS) $(EX_LIBS)
-<<
-
-$(TEST_D)\rc2test.exe: $(OBJ_D)\rc2test.obj $(LIBS_DEP)
-  $(LINK) $(LFLAGS) /out:$(TEST_D)\rc2test.exe @<<
-  $(APP_EX_OBJ) $(OBJ_D)\rc2test.obj $(L_LIBS) $(EX_LIBS)
-<<
-
-$(TEST_D)\rc4test.exe: $(OBJ_D)\rc4test.obj $(LIBS_DEP)
-  $(LINK) $(LFLAGS) /out:$(TEST_D)\rc4test.exe @<<
-  $(APP_EX_OBJ) $(OBJ_D)\rc4test.obj $(L_LIBS) $(EX_LIBS)
-<<
-
-$(TEST_D)\rc5test.exe: $(OBJ_D)\rc5test.obj $(LIBS_DEP)
-  $(LINK) $(LFLAGS) /out:$(TEST_D)\rc5test.exe @<<
-  $(APP_EX_OBJ) $(OBJ_D)\rc5test.obj $(L_LIBS) $(EX_LIBS)
-<<
-
-$(TEST_D)\ideatest.exe: $(OBJ_D)\ideatest.obj $(LIBS_DEP)
-  $(LINK) $(LFLAGS) /out:$(TEST_D)\ideatest.exe @<<
-  $(APP_EX_OBJ) $(OBJ_D)\ideatest.obj $(L_LIBS) $(EX_LIBS)
-<<
-
-$(TEST_D)\bftest.exe: $(OBJ_D)\bftest.obj $(LIBS_DEP)
-  $(LINK) $(LFLAGS) /out:$(TEST_D)\bftest.exe @<<
-  $(APP_EX_OBJ) $(OBJ_D)\bftest.obj $(L_LIBS) $(EX_LIBS)
-<<
-
-$(TEST_D)\casttest.exe: $(OBJ_D)\casttest.obj $(LIBS_DEP)
-  $(LINK) $(LFLAGS) /out:$(TEST_D)\casttest.exe @<<
-  $(APP_EX_OBJ) $(OBJ_D)\casttest.obj $(L_LIBS) $(EX_LIBS)
-<<
-
-$(TEST_D)\bntest.exe: $(OBJ_D)\bntest.obj $(LIBS_DEP)
-  $(LINK) $(LFLAGS) /out:$(TEST_D)\bntest.exe @<<
-  $(APP_EX_OBJ) $(OBJ_D)\bntest.obj $(L_LIBS) $(EX_LIBS)
-<<
-
-$(TEST_D)\exptest.exe: $(OBJ_D)\exptest.obj $(LIBS_DEP)
-  $(LINK) $(LFLAGS) /out:$(TEST_D)\exptest.exe @<<
-  $(APP_EX_OBJ) $(OBJ_D)\exptest.obj $(L_LIBS) $(EX_LIBS)
-<<
-
-$(TEST_D)\rsa_oaep_test.exe: $(OBJ_D)\rsa_oaep_test.obj $(LIBS_DEP)
-  $(LINK) $(LFLAGS) /out:$(TEST_D)\rsa_oaep_test.exe @<<
-  $(APP_EX_OBJ) $(OBJ_D)\rsa_oaep_test.obj $(L_LIBS) $(EX_LIBS)
-<<
-
-$(TEST_D)\dsatest.exe: $(OBJ_D)\dsatest.obj $(LIBS_DEP)
-  $(LINK) $(LFLAGS) /out:$(TEST_D)\dsatest.exe @<<
-  $(APP_EX_OBJ) $(OBJ_D)\dsatest.obj $(L_LIBS) $(EX_LIBS)
-<<
-
-$(TEST_D)\dhtest.exe: $(OBJ_D)\dhtest.obj $(LIBS_DEP)
-  $(LINK) $(LFLAGS) /out:$(TEST_D)\dhtest.exe @<<
-  $(APP_EX_OBJ) $(OBJ_D)\dhtest.obj $(L_LIBS) $(EX_LIBS)
-<<
-
-$(TEST_D)\randtest.exe: $(OBJ_D)\randtest.obj $(LIBS_DEP)
-  $(LINK) $(LFLAGS) /out:$(TEST_D)\randtest.exe @<<
-  $(APP_EX_OBJ) $(OBJ_D)\randtest.obj $(L_LIBS) $(EX_LIBS)
-<<
-
-$(TEST_D)\ssltest.exe: $(OBJ_D)\ssltest.obj $(LIBS_DEP)
-  $(LINK) $(LFLAGS) /out:$(TEST_D)\ssltest.exe @<<
-  $(APP_EX_OBJ) $(OBJ_D)\ssltest.obj $(L_LIBS) $(EX_LIBS)
-<<
-
-$(O_SSL): $(SSLOBJ)
-       $(LINK) $(MLFLAGS) /out:$(O_SSL) /def:ms/SSLEAY32.def @<<
-  $(SHLIB_EX_OBJ) $(SSLOBJ)  $(L_CRYPTO) wsock32.lib gdi32.lib advapi32.lib
-<<
-
-$(O_RSAGLUE): $(RSAGLUEOBJ)
-       $(MKLIB) /out:$(O_RSAGLUE) @<<
-  $(RSAGLUEOBJ)
-<<
-
-$(O_CRYPTO): $(CRYPTOOBJ)
-       $(LINK) $(MLFLAGS) /out:$(O_CRYPTO) /def:ms/LIBEAY32.def @<<
-  $(SHLIB_EX_OBJ) $(CRYPTOOBJ)  wsock32.lib gdi32.lib advapi32.lib
-<<
-
-$(BIN_D)\$(E_EXE).exe: $(E_OBJ) $(LIBS_DEP)
-  $(LINK) $(LFLAGS) /out:$(BIN_D)\$(E_EXE).exe @<<
-  $(APP_EX_OBJ) $(E_OBJ) $(L_LIBS) $(EX_LIBS)
-<<
-
+# This makefile has been automatically generated from the OpenSSL distribution.
+# This single makefile will build the complete OpenSSL distribution and
+# by default leave the 'intertesting' output files in .\out and the stuff
+# that needs deleting in .\tmp.
+# The file was generated by running 'make makefile.one', which
+# does a 'make files', which writes all the environment variables from all
+# the makefiles to the file call MINFO.  This file is used by
+# util\mk1mf.pl to generate makefile.one.
+# The 'makefile per directory' system suites me when developing this
+# library and also so I can 'distribute' indervidual library sections.
+# The one monster makefile better suits building in non-unix
+# environments.
+
+INSTALLTOP=\usr\local\ssl
+
+# Set your compiler options
+PLATFORM=VC-WIN32
+CC=cl
+CFLAG= /MD /W3 /WX /G5 /Ox /O2 /Ob2 /Gs0 /GF /Gy /nologo -DWIN32 
+-DWIN32_LEAN_AND_MEAN -DL_ENDIAN /Fdout32dll
+APP_CFLAG=
+LIB_CFLAG= /GD -D_WINDLL -D_DLL
+SHLIB_CFLAG=
+APP_EX_OBJ=setargv.obj
+SHLIB_EX_OBJ=
+# add extra libraries to this define, for solaris -lsocket -lnsl would
+# be added
+EX_LIBS=wsock32.lib user32.lib gdi32.lib
+
+# The OpenSSL directory
+SRC_D=.
+
+LINK=link
+LFLAGS=/nologo /subsystem:console /machine:I386 /opt:ref
+
+BN_ASM_OBJ=
+BN_ASM_SRC=
+DES_ENC_OBJ=
+DES_ENC_SRC=
+BF_ENC_OBJ=
+BF_ENC_SRC=
+CAST_ENC_OBJ=
+CAST_ENC_SRC=
+RC4_ENC_OBJ=
+RC4_ENC_SRC=
+RC5_ENC_OBJ=
+RC5_ENC_SRC=
+MD5_ASM_OBJ=
+MD5_ASM_SRC=
+SHA1_ASM_OBJ=
+SHA1_ASM_SRC=
+RMD160_ASM_OBJ=
+RMD160_ASM_SRC=
+
+# The output directory for everything intersting
+OUT_D=out32dll
+# The output directory for all the temporary muck
+TMP_D=tmp32dll
+# The output directory for the header files
+INC_D=inc32
+INCO_D=inc32\openssl
+
+CP=copy nul+
+RM=del
+RANLIB=
+MKDIR=mkdir
+MKLIB=lib
+MLFLAGS= /nologo /subsystem:console /machine:I386 /opt:ref /dll
+ASM=ml /Cp /coff /c /Cx
+
+######################################################
+# You should not need to touch anything below this point
+######################################################
+
+E_EXE=openssl
+SSL=ssleay32
+CRYPTO=libeay32
+RSAGLUE=RSAglue
+
+# BIN_D  - Binary output directory
+# TEST_D - Binary test file output directory
+# LIB_D  - library output directory
+# Note: if you change these point to different directories then uncomment out
+# the lines around the 'NB' comment below.
+# 
+BIN_D=$(OUT_D)
+TEST_D=$(OUT_D)
+LIB_D=$(OUT_D)
+
+# INCL_D - local library directory
+# OBJ_D  - temp object file directory
+OBJ_D=$(TMP_D)
+INCL_D=$(TMP_D)
+
+O_SSL=     $(LIB_D)\$(SSL).dll
+O_CRYPTO=  $(LIB_D)\$(CRYPTO).dll
+O_RSAGLUE= $(LIB_D)\$(RSAGLUE).lib
+SO_SSL=    $(SSL)
+SO_CRYPTO= $(CRYPTO)
+L_SSL=     $(LIB_D)\$(SSL).lib
+L_CRYPTO=  $(LIB_D)\$(CRYPTO).lib
+
+L_LIBS= $(L_SSL) $(L_CRYPTO)
+#L_LIBS= $(O_SSL) $(O_RSAGLUE) -lrsaref $(O_CRYPTO)
+
+######################################################
+# Don't touch anything below this point
+######################################################
+
+INC=-I$(INC_D) -I$(INCL_D)
+APP_CFLAGS=$(INC) $(CFLAG) $(APP_CFLAG)
+LIB_CFLAGS=$(INC) $(CFLAG) $(LIB_CFLAG)
+SHLIB_CFLAGS=$(INC) $(CFLAG) $(LIB_CFLAG) $(SHLIB_CFLAG)
+LIBS_DEP=$(O_CRYPTO) $(O_RSAGLUE) $(O_SSL)
+
+#############################################
+HEADER=$(INCL_D)\cryptlib.h \
+       $(INCL_D)\buildinf.h $(INCL_D)\md5_locl.h $(INCL_D)\sha_locl.h \
+       $(INCL_D)\rmd_locl.h $(INCL_D)\rmdconst.h $(INCL_D)\des_locl.h \
+       $(INCL_D)\rpc_des.h $(INCL_D)\podd.h $(INCL_D)\sk.h \
+       $(INCL_D)\spr.h $(INCL_D)\des_ver.h $(INCL_D)\rc2_locl.h \
+       $(INCL_D)\rc4_locl.h $(INCL_D)\rc5_locl.h $(INCL_D)\idea_lcl.h \
+       $(INCL_D)\bf_pi.h $(INCL_D)\bf_locl.h $(INCL_D)\cast_s.h \
+       $(INCL_D)\cast_lcl.h $(INCL_D)\bn_lcl.h $(INCL_D)\bn_prime.h \
+       $(INCL_D)\bss_file.c $(INCL_D)\obj_dat.h $(INCL_D)\conf_lcl.h \
+       $(INCL_D)\ssl_locl.h $(INCL_D)\apps.h $(INCL_D)\progs.h \
+       $(INCL_D)\s_apps.h $(INCL_D)\testdsa.h $(INCL_D)\testrsa.h
+
+EXHEADER=$(INCO_D)\e_os.h \
+       $(INCO_D)\e_os2.h $(INCO_D)\crypto.h $(INCO_D)\tmdiff.h \
+       $(INCO_D)\opensslv.h $(INCO_D)\opensslconf.h $(INCO_D)\ebcdic.h \
+       $(INCO_D)\md2.h $(INCO_D)\md5.h $(INCO_D)\sha.h \
+       $(INCO_D)\mdc2.h $(INCO_D)\hmac.h $(INCO_D)\ripemd.h \
+       $(INCO_D)\des.h $(INCO_D)\rc2.h $(INCO_D)\rc4.h \
+       $(INCO_D)\rc5.h $(INCO_D)\idea.h $(INCO_D)\blowfish.h \
+       $(INCO_D)\cast.h $(INCO_D)\bn.h $(INCO_D)\rsa.h \
+       $(INCO_D)\dsa.h $(INCO_D)\dh.h $(INCO_D)\buffer.h \
+       $(INCO_D)\bio.h $(INCO_D)\stack.h $(INCO_D)\safestack.h \
+       $(INCO_D)\lhash.h $(INCO_D)\rand.h $(INCO_D)\err.h \
+       $(INCO_D)\objects.h $(INCO_D)\evp.h $(INCO_D)\asn1.h \
+       $(INCO_D)\asn1_mac.h $(INCO_D)\pem.h $(INCO_D)\pem2.h \
+       $(INCO_D)\x509.h $(INCO_D)\x509_vfy.h $(INCO_D)\x509v3.h \
+       $(INCO_D)\conf.h $(INCO_D)\txt_db.h $(INCO_D)\pkcs7.h \
+       $(INCO_D)\pkcs12.h $(INCO_D)\comp.h $(INCO_D)\ssl.h \
+       $(INCO_D)\ssl2.h $(INCO_D)\ssl3.h $(INCO_D)\ssl23.h \
+       $(INCO_D)\tls1.h $(INCO_D)\rsaref.h
+
+T_OBJ=$(OBJ_D)\md2test.obj \
+       $(OBJ_D)\md5test.obj $(OBJ_D)\shatest.obj $(OBJ_D)\sha1test.obj \
+       $(OBJ_D)\mdc2test.obj $(OBJ_D)\hmactest.obj $(OBJ_D)\rmdtest.obj \
+       $(OBJ_D)\destest.obj $(OBJ_D)\rc2test.obj $(OBJ_D)\rc4test.obj \
+       $(OBJ_D)\rc5test.obj $(OBJ_D)\ideatest.obj $(OBJ_D)\bftest.obj \
+       $(OBJ_D)\casttest.obj $(OBJ_D)\bntest.obj $(OBJ_D)\exptest.obj \
+       $(OBJ_D)\rsa_test.obj $(OBJ_D)\dsatest.obj $(OBJ_D)\dhtest.obj \
+       $(OBJ_D)\randtest.obj $(OBJ_D)\ssltest.obj
+
+E_OBJ=$(OBJ_D)\verify.obj \
+       $(OBJ_D)\asn1pars.obj $(OBJ_D)\req.obj $(OBJ_D)\dgst.obj \
+       $(OBJ_D)\dh.obj $(OBJ_D)\dhparam.obj $(OBJ_D)\enc.obj \
+       $(OBJ_D)\passwd.obj $(OBJ_D)\gendh.obj $(OBJ_D)\errstr.obj \
+       $(OBJ_D)\ca.obj $(OBJ_D)\pkcs7.obj $(OBJ_D)\crl2p7.obj \
+       $(OBJ_D)\crl.obj $(OBJ_D)\rsa.obj $(OBJ_D)\dsa.obj \
+       $(OBJ_D)\dsaparam.obj $(OBJ_D)\x509.obj $(OBJ_D)\genrsa.obj \
+       $(OBJ_D)\gendsa.obj $(OBJ_D)\s_server.obj $(OBJ_D)\s_client.obj \
+       $(OBJ_D)\speed.obj $(OBJ_D)\s_time.obj $(OBJ_D)\apps.obj \
+       $(OBJ_D)\s_cb.obj $(OBJ_D)\s_socket.obj $(OBJ_D)\app_rand.obj \
+       $(OBJ_D)\version.obj $(OBJ_D)\sess_id.obj $(OBJ_D)\ciphers.obj \
+       $(OBJ_D)\nseq.obj $(OBJ_D)\pkcs12.obj $(OBJ_D)\pkcs8.obj \
+       $(OBJ_D)\spkac.obj $(OBJ_D)\smime.obj $(OBJ_D)\openssl.obj
+
+CRYPTOOBJ=$(OBJ_D)\cryptlib.obj \
+       $(OBJ_D)\mem.obj $(OBJ_D)\mem_dbg.obj $(OBJ_D)\cversion.obj \
+       $(OBJ_D)\ex_data.obj $(OBJ_D)\tmdiff.obj $(OBJ_D)\cpt_err.obj \
+       $(OBJ_D)\ebcdic.obj $(OBJ_D)\md2_dgst.obj $(OBJ_D)\md2_one.obj \
+       $(OBJ_D)\md5_dgst.obj $(OBJ_D)\md5_one.obj $(OBJ_D)\sha_dgst.obj \
+       $(OBJ_D)\sha1dgst.obj $(OBJ_D)\sha_one.obj $(OBJ_D)\sha1_one.obj \
+       $(OBJ_D)\mdc2dgst.obj $(OBJ_D)\mdc2_one.obj $(OBJ_D)\hmac.obj \
+       $(OBJ_D)\rmd_dgst.obj $(OBJ_D)\rmd_one.obj $(OBJ_D)\set_key.obj \
+       $(OBJ_D)\ecb_enc.obj $(OBJ_D)\cbc_enc.obj $(OBJ_D)\ecb3_enc.obj \
+       $(OBJ_D)\cfb64enc.obj $(OBJ_D)\cfb64ede.obj $(OBJ_D)\cfb_enc.obj \
+       $(OBJ_D)\ofb64ede.obj $(OBJ_D)\enc_read.obj $(OBJ_D)\enc_writ.obj \
+       $(OBJ_D)\ofb64enc.obj $(OBJ_D)\ofb_enc.obj $(OBJ_D)\str2key.obj \
+       $(OBJ_D)\pcbc_enc.obj $(OBJ_D)\qud_cksm.obj $(OBJ_D)\rand_key.obj \
+       $(OBJ_D)\des_enc.obj $(OBJ_D)\fcrypt_b.obj $(OBJ_D)\read2pwd.obj \
+       $(OBJ_D)\fcrypt.obj $(OBJ_D)\xcbc_enc.obj $(OBJ_D)\read_pwd.obj \
+       $(OBJ_D)\rpc_enc.obj $(OBJ_D)\cbc_cksm.obj $(OBJ_D)\supp.obj \
+       $(OBJ_D)\ede_cbcm_enc.obj $(OBJ_D)\rc2_ecb.obj $(OBJ_D)\rc2_skey.obj \
+       $(OBJ_D)\rc2_cbc.obj $(OBJ_D)\rc2cfb64.obj $(OBJ_D)\rc2ofb64.obj \
+       $(OBJ_D)\rc4_skey.obj $(OBJ_D)\rc4_enc.obj $(OBJ_D)\rc5_skey.obj \
+       $(OBJ_D)\rc5_ecb.obj $(OBJ_D)\rc5_enc.obj $(OBJ_D)\rc5cfb64.obj \
+       $(OBJ_D)\rc5ofb64.obj $(OBJ_D)\i_cbc.obj $(OBJ_D)\i_cfb64.obj \
+       $(OBJ_D)\i_ofb64.obj $(OBJ_D)\i_ecb.obj $(OBJ_D)\i_skey.obj \
+       $(OBJ_D)\bf_skey.obj $(OBJ_D)\bf_ecb.obj $(OBJ_D)\bf_enc.obj \
+       $(OBJ_D)\bf_cfb64.obj $(OBJ_D)\bf_ofb64.obj $(OBJ_D)\c_skey.obj \
+       $(OBJ_D)\c_ecb.obj $(OBJ_D)\c_enc.obj $(OBJ_D)\c_cfb64.obj \
+       $(OBJ_D)\c_ofb64.obj $(OBJ_D)\bn_add.obj $(OBJ_D)\bn_div.obj \
+       $(OBJ_D)\bn_exp.obj $(OBJ_D)\bn_lib.obj $(OBJ_D)\bn_ctx.obj \
+       $(OBJ_D)\bn_mul.obj $(OBJ_D)\bn_print.obj $(OBJ_D)\bn_rand.obj \
+       $(OBJ_D)\bn_shift.obj $(OBJ_D)\bn_word.obj $(OBJ_D)\bn_blind.obj \
+       $(OBJ_D)\bn_gcd.obj $(OBJ_D)\bn_prime.obj $(OBJ_D)\bn_err.obj \
+       $(OBJ_D)\bn_sqr.obj $(OBJ_D)\bn_asm.obj $(OBJ_D)\bn_recp.obj \
+       $(OBJ_D)\bn_mont.obj $(OBJ_D)\bn_mpi.obj $(OBJ_D)\bn_exp2.obj \
+       $(OBJ_D)\rsa_eay.obj $(OBJ_D)\rsa_gen.obj $(OBJ_D)\rsa_lib.obj \
+       $(OBJ_D)\rsa_sign.obj $(OBJ_D)\rsa_saos.obj $(OBJ_D)\rsa_err.obj \
+       $(OBJ_D)\rsa_pk1.obj $(OBJ_D)\rsa_ssl.obj $(OBJ_D)\rsa_none.obj \
+       $(OBJ_D)\rsa_oaep.obj $(OBJ_D)\rsa_chk.obj $(OBJ_D)\rsa_null.obj \
+       $(OBJ_D)\dsa_gen.obj $(OBJ_D)\dsa_key.obj $(OBJ_D)\dsa_lib.obj \
+       $(OBJ_D)\dsa_asn1.obj $(OBJ_D)\dsa_vrf.obj $(OBJ_D)\dsa_sign.obj \
+       $(OBJ_D)\dsa_err.obj $(OBJ_D)\dsa_ossl.obj $(OBJ_D)\dh_gen.obj \
+       $(OBJ_D)\dh_key.obj $(OBJ_D)\dh_lib.obj $(OBJ_D)\dh_check.obj \
+       $(OBJ_D)\dh_err.obj $(OBJ_D)\buffer.obj $(OBJ_D)\buf_err.obj \
+       $(OBJ_D)\bio_lib.obj $(OBJ_D)\bio_cb.obj $(OBJ_D)\bio_err.obj \
+       $(OBJ_D)\bss_mem.obj $(OBJ_D)\bss_null.obj $(OBJ_D)\bss_fd.obj \
+       $(OBJ_D)\bss_file.obj $(OBJ_D)\bss_sock.obj $(OBJ_D)\bss_conn.obj \
+       $(OBJ_D)\bf_null.obj $(OBJ_D)\bf_buff.obj $(OBJ_D)\b_print.obj \
+       $(OBJ_D)\b_dump.obj $(OBJ_D)\b_sock.obj $(OBJ_D)\bss_acpt.obj \
+       $(OBJ_D)\bf_nbio.obj $(OBJ_D)\bss_log.obj $(OBJ_D)\bss_bio.obj \
+       $(OBJ_D)\stack.obj $(OBJ_D)\lhash.obj $(OBJ_D)\lh_stats.obj \
+       $(OBJ_D)\md_rand.obj $(OBJ_D)\randfile.obj $(OBJ_D)\rand_lib.obj \
+       $(OBJ_D)\rand_err.obj $(OBJ_D)\rand_egd.obj $(OBJ_D)\err.obj \
+       $(OBJ_D)\err_all.obj $(OBJ_D)\err_prn.obj $(OBJ_D)\o_names.obj \
+       $(OBJ_D)\obj_dat.obj $(OBJ_D)\obj_lib.obj $(OBJ_D)\obj_err.obj \
+       $(OBJ_D)\encode.obj $(OBJ_D)\digest.obj $(OBJ_D)\evp_enc.obj \
+       $(OBJ_D)\evp_key.obj $(OBJ_D)\e_ecb_d.obj $(OBJ_D)\e_cbc_d.obj \
+       $(OBJ_D)\e_cfb_d.obj $(OBJ_D)\e_ofb_d.obj $(OBJ_D)\e_ecb_i.obj \
+       $(OBJ_D)\e_cbc_i.obj $(OBJ_D)\e_cfb_i.obj $(OBJ_D)\e_ofb_i.obj \
+       $(OBJ_D)\e_ecb_3d.obj $(OBJ_D)\e_cbc_3d.obj $(OBJ_D)\e_rc4.obj \
+       $(OBJ_D)\names.obj $(OBJ_D)\e_cfb_3d.obj $(OBJ_D)\e_ofb_3d.obj \
+       $(OBJ_D)\e_xcbc_d.obj $(OBJ_D)\e_ecb_r2.obj $(OBJ_D)\e_cbc_r2.obj \
+       $(OBJ_D)\e_cfb_r2.obj $(OBJ_D)\e_ofb_r2.obj $(OBJ_D)\e_ecb_bf.obj \
+       $(OBJ_D)\e_cbc_bf.obj $(OBJ_D)\e_cfb_bf.obj $(OBJ_D)\e_ofb_bf.obj \
+       $(OBJ_D)\e_ecb_c.obj $(OBJ_D)\e_cbc_c.obj $(OBJ_D)\e_cfb_c.obj \
+       $(OBJ_D)\e_ofb_c.obj $(OBJ_D)\e_ecb_r5.obj $(OBJ_D)\e_cbc_r5.obj \
+       $(OBJ_D)\e_cfb_r5.obj $(OBJ_D)\e_ofb_r5.obj $(OBJ_D)\m_null.obj \
+       $(OBJ_D)\m_md2.obj $(OBJ_D)\m_md5.obj $(OBJ_D)\m_sha.obj \
+       $(OBJ_D)\m_sha1.obj $(OBJ_D)\m_dss.obj $(OBJ_D)\m_dss1.obj \
+       $(OBJ_D)\m_mdc2.obj $(OBJ_D)\m_ripemd.obj $(OBJ_D)\p_open.obj \
+       $(OBJ_D)\p_seal.obj $(OBJ_D)\p_sign.obj $(OBJ_D)\p_verify.obj \
+       $(OBJ_D)\p_lib.obj $(OBJ_D)\p_enc.obj $(OBJ_D)\p_dec.obj \
+       $(OBJ_D)\bio_md.obj $(OBJ_D)\bio_b64.obj $(OBJ_D)\bio_enc.obj \
+       $(OBJ_D)\evp_err.obj $(OBJ_D)\e_null.obj $(OBJ_D)\c_all.obj \
+       $(OBJ_D)\c_allc.obj $(OBJ_D)\c_alld.obj $(OBJ_D)\evp_lib.obj \
+       $(OBJ_D)\bio_ok.obj $(OBJ_D)\evp_pkey.obj $(OBJ_D)\evp_pbe.obj \
+       $(OBJ_D)\p5_crpt.obj $(OBJ_D)\p5_crpt2.obj $(OBJ_D)\a_object.obj \
+       $(OBJ_D)\a_bitstr.obj $(OBJ_D)\a_utctm.obj $(OBJ_D)\a_gentm.obj \
+       $(OBJ_D)\a_time.obj $(OBJ_D)\a_int.obj $(OBJ_D)\a_octet.obj \
+       $(OBJ_D)\a_null.obj $(OBJ_D)\a_print.obj $(OBJ_D)\a_type.obj \
+       $(OBJ_D)\a_set.obj $(OBJ_D)\a_dup.obj $(OBJ_D)\a_d2i_fp.obj \
+       $(OBJ_D)\a_i2d_fp.obj $(OBJ_D)\a_bmp.obj $(OBJ_D)\a_enum.obj \
+       $(OBJ_D)\a_vis.obj $(OBJ_D)\a_utf8.obj $(OBJ_D)\a_sign.obj \
+       $(OBJ_D)\a_digest.obj $(OBJ_D)\a_verify.obj $(OBJ_D)\a_mbstr.obj \
+       $(OBJ_D)\x_algor.obj $(OBJ_D)\x_val.obj $(OBJ_D)\x_pubkey.obj \
+       $(OBJ_D)\x_sig.obj $(OBJ_D)\x_req.obj $(OBJ_D)\x_attrib.obj \
+       $(OBJ_D)\x_name.obj $(OBJ_D)\x_cinf.obj $(OBJ_D)\x_x509.obj \
+       $(OBJ_D)\x_x509a.obj $(OBJ_D)\x_crl.obj $(OBJ_D)\x_info.obj \
+       $(OBJ_D)\x_spki.obj $(OBJ_D)\nsseq.obj $(OBJ_D)\d2i_r_pr.obj \
+       $(OBJ_D)\i2d_r_pr.obj $(OBJ_D)\d2i_r_pu.obj $(OBJ_D)\i2d_r_pu.obj \
+       $(OBJ_D)\d2i_s_pr.obj $(OBJ_D)\i2d_s_pr.obj $(OBJ_D)\d2i_s_pu.obj \
+       $(OBJ_D)\i2d_s_pu.obj $(OBJ_D)\d2i_pu.obj $(OBJ_D)\d2i_pr.obj \
+       $(OBJ_D)\i2d_pu.obj $(OBJ_D)\i2d_pr.obj $(OBJ_D)\t_req.obj \
+       $(OBJ_D)\t_x509.obj $(OBJ_D)\t_x509a.obj $(OBJ_D)\t_crl.obj \
+       $(OBJ_D)\t_pkey.obj $(OBJ_D)\t_spki.obj $(OBJ_D)\t_bitst.obj \
+       $(OBJ_D)\p7_i_s.obj $(OBJ_D)\p7_signi.obj $(OBJ_D)\p7_signd.obj \
+       $(OBJ_D)\p7_recip.obj $(OBJ_D)\p7_enc_c.obj $(OBJ_D)\p7_evp.obj \
+       $(OBJ_D)\p7_dgst.obj $(OBJ_D)\p7_s_e.obj $(OBJ_D)\p7_enc.obj \
+       $(OBJ_D)\p7_lib.obj $(OBJ_D)\f_int.obj $(OBJ_D)\f_string.obj \
+       $(OBJ_D)\i2d_dhp.obj $(OBJ_D)\i2d_dsap.obj $(OBJ_D)\d2i_dhp.obj \
+       $(OBJ_D)\d2i_dsap.obj $(OBJ_D)\n_pkey.obj $(OBJ_D)\f_enum.obj \
+       $(OBJ_D)\a_hdr.obj $(OBJ_D)\x_pkey.obj $(OBJ_D)\a_bool.obj \
+       $(OBJ_D)\x_exten.obj $(OBJ_D)\asn1_par.obj $(OBJ_D)\asn1_lib.obj \
+       $(OBJ_D)\asn1_err.obj $(OBJ_D)\a_meth.obj $(OBJ_D)\a_bytes.obj \
+       $(OBJ_D)\a_strnid.obj $(OBJ_D)\evp_asn1.obj $(OBJ_D)\asn_pack.obj \
+       $(OBJ_D)\p5_pbe.obj $(OBJ_D)\p5_pbev2.obj $(OBJ_D)\p8_pkey.obj \
+       $(OBJ_D)\pem_sign.obj $(OBJ_D)\pem_seal.obj $(OBJ_D)\pem_info.obj \
+       $(OBJ_D)\pem_lib.obj $(OBJ_D)\pem_all.obj $(OBJ_D)\pem_err.obj \
+       $(OBJ_D)\x509_def.obj $(OBJ_D)\x509_d2.obj $(OBJ_D)\x509_r2x.obj \
+       $(OBJ_D)\x509_cmp.obj $(OBJ_D)\x509_obj.obj $(OBJ_D)\x509_req.obj \
+       $(OBJ_D)\x509spki.obj $(OBJ_D)\x509_vfy.obj $(OBJ_D)\x509_set.obj \
+       $(OBJ_D)\x509rset.obj $(OBJ_D)\x509_err.obj $(OBJ_D)\x509name.obj \
+       $(OBJ_D)\x509_v3.obj $(OBJ_D)\x509_ext.obj $(OBJ_D)\x509_att.obj \
+       $(OBJ_D)\x509type.obj $(OBJ_D)\x509_lu.obj $(OBJ_D)\x_all.obj \
+       $(OBJ_D)\x509_txt.obj $(OBJ_D)\x509_trs.obj $(OBJ_D)\by_file.obj \
+       $(OBJ_D)\by_dir.obj $(OBJ_D)\v3_bcons.obj $(OBJ_D)\v3_bitst.obj \
+       $(OBJ_D)\v3_conf.obj $(OBJ_D)\v3_extku.obj $(OBJ_D)\v3_ia5.obj \
+       $(OBJ_D)\v3_lib.obj $(OBJ_D)\v3_prn.obj $(OBJ_D)\v3_utl.obj \
+       $(OBJ_D)\v3err.obj $(OBJ_D)\v3_genn.obj $(OBJ_D)\v3_alt.obj \
+       $(OBJ_D)\v3_skey.obj $(OBJ_D)\v3_akey.obj $(OBJ_D)\v3_pku.obj \
+       $(OBJ_D)\v3_int.obj $(OBJ_D)\v3_enum.obj $(OBJ_D)\v3_sxnet.obj \
+       $(OBJ_D)\v3_cpols.obj $(OBJ_D)\v3_crld.obj $(OBJ_D)\v3_purp.obj \
+       $(OBJ_D)\v3_info.obj $(OBJ_D)\conf.obj $(OBJ_D)\conf_err.obj \
+       $(OBJ_D)\txt_db.obj $(OBJ_D)\pk7_lib.obj $(OBJ_D)\pkcs7err.obj \
+       $(OBJ_D)\pk7_doit.obj $(OBJ_D)\pk7_smime.obj $(OBJ_D)\pk7_attr.obj \
+       $(OBJ_D)\pk7_mime.obj $(OBJ_D)\p12_add.obj $(OBJ_D)\p12_attr.obj \
+       $(OBJ_D)\p12_bags.obj $(OBJ_D)\p12_crpt.obj $(OBJ_D)\p12_crt.obj \
+       $(OBJ_D)\p12_decr.obj $(OBJ_D)\p12_init.obj $(OBJ_D)\p12_key.obj \
+       $(OBJ_D)\p12_kiss.obj $(OBJ_D)\p12_lib.obj $(OBJ_D)\p12_mac.obj \
+       $(OBJ_D)\p12_mutl.obj $(OBJ_D)\p12_sbag.obj $(OBJ_D)\p12_utl.obj \
+       $(OBJ_D)\p12_npas.obj $(OBJ_D)\pk12err.obj $(OBJ_D)\comp_lib.obj \
+       $(OBJ_D)\c_rle.obj $(OBJ_D)\c_zlib.obj
+
+SSLOBJ=$(OBJ_D)\s2_meth.obj \
+       $(OBJ_D)\s2_srvr.obj $(OBJ_D)\s2_clnt.obj $(OBJ_D)\s2_lib.obj \
+       $(OBJ_D)\s2_enc.obj $(OBJ_D)\s2_pkt.obj $(OBJ_D)\s3_meth.obj \
+       $(OBJ_D)\s3_srvr.obj $(OBJ_D)\s3_clnt.obj $(OBJ_D)\s3_lib.obj \
+       $(OBJ_D)\s3_enc.obj $(OBJ_D)\s3_pkt.obj $(OBJ_D)\s3_both.obj \
+       $(OBJ_D)\s23_meth.obj $(OBJ_D)\s23_srvr.obj $(OBJ_D)\s23_clnt.obj \
+       $(OBJ_D)\s23_lib.obj $(OBJ_D)\s23_pkt.obj $(OBJ_D)\t1_meth.obj \
+       $(OBJ_D)\t1_srvr.obj $(OBJ_D)\t1_clnt.obj $(OBJ_D)\t1_lib.obj \
+       $(OBJ_D)\t1_enc.obj $(OBJ_D)\ssl_lib.obj $(OBJ_D)\ssl_err2.obj \
+       $(OBJ_D)\ssl_cert.obj $(OBJ_D)\ssl_sess.obj $(OBJ_D)\ssl_ciph.obj \
+       $(OBJ_D)\ssl_stat.obj $(OBJ_D)\ssl_rsa.obj $(OBJ_D)\ssl_asn1.obj \
+       $(OBJ_D)\ssl_txt.obj $(OBJ_D)\ssl_algs.obj $(OBJ_D)\bio_ssl.obj \
+       $(OBJ_D)\ssl_err.obj
+
+RSAGLUEOBJ=$(OBJ_D)\rsaref.obj \
+       $(OBJ_D)\rsar_err.obj
+
+T_EXE=$(TEST_D)\md2test.exe \
+       $(TEST_D)\md5test.exe $(TEST_D)\shatest.exe $(TEST_D)\sha1test.exe \
+       $(TEST_D)\mdc2test.exe $(TEST_D)\hmactest.exe $(TEST_D)\rmdtest.exe \
+       $(TEST_D)\destest.exe $(TEST_D)\rc2test.exe $(TEST_D)\rc4test.exe \
+       $(TEST_D)\rc5test.exe $(TEST_D)\ideatest.exe $(TEST_D)\bftest.exe \
+       $(TEST_D)\casttest.exe $(TEST_D)\bntest.exe $(TEST_D)\exptest.exe \
+       $(TEST_D)\rsa_test.exe $(TEST_D)\dsatest.exe $(TEST_D)\dhtest.exe \
+       $(TEST_D)\randtest.exe $(TEST_D)\ssltest.exe
+
+###################################################################
+all: banner $(TMP_D) $(BIN_D) $(TEST_D) $(LIB_D) $(INCO_D) headers lib exe
+
+banner:
+
+
+$(TMP_D):
+       $(MKDIR) $(TMP_D)
+# NB: uncomment out these lines if BIN_D, TEST_D and LIB_D are different
+#$(BIN_D):
+#      $(MKDIR) $(BIN_D)
+#
+#$(TEST_D):
+#      $(MKDIR) $(TEST_D)
+
+$(LIB_D):
+       $(MKDIR) $(LIB_D)
+
+$(INCO_D): $(INC_D)
+       $(MKDIR) $(INCO_D)
+
+$(INC_D):
+       $(MKDIR) $(INC_D)
+
+headers: $(HEADER) $(EXHEADER)
+
+lib: $(LIBS_DEP)
+
+exe: $(T_EXE) $(BIN_D)\$(E_EXE).exe
+
+install:
+       $(MKDIR) $(INSTALLTOP)
+       $(MKDIR) $(INSTALLTOP)\bin
+       $(MKDIR) $(INSTALLTOP)\include
+       $(MKDIR) $(INSTALLTOP)\include\openssl
+       $(MKDIR) $(INSTALLTOP)\lib
+       $(CP) $(INCO_D)\*.[ch] $(INSTALLTOP)\include\openssl
+       $(CP) $(BIN_D)\$(E_EXE).exe $(INSTALLTOP)\bin
+       $(CP) $(O_SSL) $(INSTALLTOP)\lib
+       $(CP) $(O_CRYPTO) $(INSTALLTOP)\lib
+
+clean:
+       $(RM) $(TMP_D)\*.*
+
+vclean:
+       $(RM) $(TMP_D)\*.*
+       $(RM) $(OUT_D)\*.*
+
+$(INCL_D)\cryptlib.h: $(SRC_D)\crypto\cryptlib.h
+       $(CP) $(SRC_D)\crypto\cryptlib.h $(INCL_D)\cryptlib.h
+
+$(INCL_D)\buildinf.h: $(SRC_D)\crypto\buildinf.h
+       $(CP) $(SRC_D)\crypto\buildinf.h $(INCL_D)\buildinf.h
+
+$(INCL_D)\md5_locl.h: $(SRC_D)\crypto\md5\md5_locl.h
+       $(CP) $(SRC_D)\crypto\md5\md5_locl.h $(INCL_D)\md5_locl.h
+
+$(INCL_D)\sha_locl.h: $(SRC_D)\crypto\sha\sha_locl.h
+       $(CP) $(SRC_D)\crypto\sha\sha_locl.h $(INCL_D)\sha_locl.h
+
+$(INCL_D)\rmd_locl.h: $(SRC_D)\crypto\ripemd\rmd_locl.h
+       $(CP) $(SRC_D)\crypto\ripemd\rmd_locl.h $(INCL_D)\rmd_locl.h
+
+$(INCL_D)\rmdconst.h: $(SRC_D)\crypto\ripemd\rmdconst.h
+       $(CP) $(SRC_D)\crypto\ripemd\rmdconst.h $(INCL_D)\rmdconst.h
+
+$(INCL_D)\des_locl.h: $(SRC_D)\crypto\des\des_locl.h
+       $(CP) $(SRC_D)\crypto\des\des_locl.h $(INCL_D)\des_locl.h
+
+$(INCL_D)\rpc_des.h: $(SRC_D)\crypto\des\rpc_des.h
+       $(CP) $(SRC_D)\crypto\des\rpc_des.h $(INCL_D)\rpc_des.h
+
+$(INCL_D)\podd.h: $(SRC_D)\crypto\des\podd.h
+       $(CP) $(SRC_D)\crypto\des\podd.h $(INCL_D)\podd.h
+
+$(INCL_D)\sk.h: $(SRC_D)\crypto\des\sk.h
+       $(CP) $(SRC_D)\crypto\des\sk.h $(INCL_D)\sk.h
+
+$(INCL_D)\spr.h: $(SRC_D)\crypto\des\spr.h
+       $(CP) $(SRC_D)\crypto\des\spr.h $(INCL_D)\spr.h
+
+$(INCL_D)\des_ver.h: $(SRC_D)\crypto\des\des_ver.h
+       $(CP) $(SRC_D)\crypto\des\des_ver.h $(INCL_D)\des_ver.h
+
+$(INCL_D)\rc2_locl.h: $(SRC_D)\crypto\rc2\rc2_locl.h
+       $(CP) $(SRC_D)\crypto\rc2\rc2_locl.h $(INCL_D)\rc2_locl.h
+
+$(INCL_D)\rc4_locl.h: $(SRC_D)\crypto\rc4\rc4_locl.h
+       $(CP) $(SRC_D)\crypto\rc4\rc4_locl.h $(INCL_D)\rc4_locl.h
+
+$(INCL_D)\rc5_locl.h: $(SRC_D)\crypto\rc5\rc5_locl.h
+       $(CP) $(SRC_D)\crypto\rc5\rc5_locl.h $(INCL_D)\rc5_locl.h
+
+$(INCL_D)\idea_lcl.h: $(SRC_D)\crypto\idea\idea_lcl.h
+       $(CP) $(SRC_D)\crypto\idea\idea_lcl.h $(INCL_D)\idea_lcl.h
+
+$(INCL_D)\bf_pi.h: $(SRC_D)\crypto\bf\bf_pi.h
+       $(CP) $(SRC_D)\crypto\bf\bf_pi.h $(INCL_D)\bf_pi.h
+
+$(INCL_D)\bf_locl.h: $(SRC_D)\crypto\bf\bf_locl.h
+       $(CP) $(SRC_D)\crypto\bf\bf_locl.h $(INCL_D)\bf_locl.h
+
+$(INCL_D)\cast_s.h: $(SRC_D)\crypto\cast\cast_s.h
+       $(CP) $(SRC_D)\crypto\cast\cast_s.h $(INCL_D)\cast_s.h
+
+$(INCL_D)\cast_lcl.h: $(SRC_D)\crypto\cast\cast_lcl.h
+       $(CP) $(SRC_D)\crypto\cast\cast_lcl.h $(INCL_D)\cast_lcl.h
+
+$(INCL_D)\bn_lcl.h: $(SRC_D)\crypto\bn\bn_lcl.h
+       $(CP) $(SRC_D)\crypto\bn\bn_lcl.h $(INCL_D)\bn_lcl.h
+
+$(INCL_D)\bn_prime.h: $(SRC_D)\crypto\bn\bn_prime.h
+       $(CP) $(SRC_D)\crypto\bn\bn_prime.h $(INCL_D)\bn_prime.h
+
+$(INCL_D)\bss_file.c: $(SRC_D)\crypto\bio\bss_file.c
+       $(CP) $(SRC_D)\crypto\bio\bss_file.c $(INCL_D)\bss_file.c
+
+$(INCL_D)\obj_dat.h: $(SRC_D)\crypto\objects\obj_dat.h
+       $(CP) $(SRC_D)\crypto\objects\obj_dat.h $(INCL_D)\obj_dat.h
+
+$(INCL_D)\conf_lcl.h: $(SRC_D)\crypto\conf\conf_lcl.h
+       $(CP) $(SRC_D)\crypto\conf\conf_lcl.h $(INCL_D)\conf_lcl.h
+
+$(INCL_D)\ssl_locl.h: $(SRC_D)\ssl\ssl_locl.h
+       $(CP) $(SRC_D)\ssl\ssl_locl.h $(INCL_D)\ssl_locl.h
+
+$(INCL_D)\apps.h: $(SRC_D)\apps\apps.h
+       $(CP) $(SRC_D)\apps\apps.h $(INCL_D)\apps.h
+
+$(INCL_D)\progs.h: $(SRC_D)\apps\progs.h
+       $(CP) $(SRC_D)\apps\progs.h $(INCL_D)\progs.h
+
+$(INCL_D)\s_apps.h: $(SRC_D)\apps\s_apps.h
+       $(CP) $(SRC_D)\apps\s_apps.h $(INCL_D)\s_apps.h
+
+$(INCL_D)\testdsa.h: $(SRC_D)\apps\testdsa.h
+       $(CP) $(SRC_D)\apps\testdsa.h $(INCL_D)\testdsa.h
+
+$(INCL_D)\testrsa.h: $(SRC_D)\apps\testrsa.h
+       $(CP) $(SRC_D)\apps\testrsa.h $(INCL_D)\testrsa.h
+
+$(INCO_D)\e_os.h: $(SRC_D)\.\e_os.h
+       $(CP) $(SRC_D)\.\e_os.h $(INCO_D)\e_os.h
+
+$(INCO_D)\e_os2.h: $(SRC_D)\.\e_os2.h
+       $(CP) $(SRC_D)\.\e_os2.h $(INCO_D)\e_os2.h
+
+$(INCO_D)\crypto.h: $(SRC_D)\crypto\crypto.h
+       $(CP) $(SRC_D)\crypto\crypto.h $(INCO_D)\crypto.h
+
+$(INCO_D)\tmdiff.h: $(SRC_D)\crypto\tmdiff.h
+       $(CP) $(SRC_D)\crypto\tmdiff.h $(INCO_D)\tmdiff.h
+
+$(INCO_D)\opensslv.h: $(SRC_D)\crypto\opensslv.h
+       $(CP) $(SRC_D)\crypto\opensslv.h $(INCO_D)\opensslv.h
+
+$(INCO_D)\opensslconf.h: $(SRC_D)\crypto\opensslconf.h
+       $(CP) $(SRC_D)\crypto\opensslconf.h $(INCO_D)\opensslconf.h
+
+$(INCO_D)\ebcdic.h: $(SRC_D)\crypto\ebcdic.h
+       $(CP) $(SRC_D)\crypto\ebcdic.h $(INCO_D)\ebcdic.h
+
+$(INCO_D)\md2.h: $(SRC_D)\crypto\md2\md2.h
+       $(CP) $(SRC_D)\crypto\md2\md2.h $(INCO_D)\md2.h
+
+$(INCO_D)\md5.h: $(SRC_D)\crypto\md5\md5.h
+       $(CP) $(SRC_D)\crypto\md5\md5.h $(INCO_D)\md5.h
+
+$(INCO_D)\sha.h: $(SRC_D)\crypto\sha\sha.h
+       $(CP) $(SRC_D)\crypto\sha\sha.h $(INCO_D)\sha.h
+
+$(INCO_D)\mdc2.h: $(SRC_D)\crypto\mdc2\mdc2.h
+       $(CP) $(SRC_D)\crypto\mdc2\mdc2.h $(INCO_D)\mdc2.h
+
+$(INCO_D)\hmac.h: $(SRC_D)\crypto\hmac\hmac.h
+       $(CP) $(SRC_D)\crypto\hmac\hmac.h $(INCO_D)\hmac.h
+
+$(INCO_D)\ripemd.h: $(SRC_D)\crypto\ripemd\ripemd.h
+       $(CP) $(SRC_D)\crypto\ripemd\ripemd.h $(INCO_D)\ripemd.h
+
+$(INCO_D)\des.h: $(SRC_D)\crypto\des\des.h
+       $(CP) $(SRC_D)\crypto\des\des.h $(INCO_D)\des.h
+
+$(INCO_D)\rc2.h: $(SRC_D)\crypto\rc2\rc2.h
+       $(CP) $(SRC_D)\crypto\rc2\rc2.h $(INCO_D)\rc2.h
+
+$(INCO_D)\rc4.h: $(SRC_D)\crypto\rc4\rc4.h
+       $(CP) $(SRC_D)\crypto\rc4\rc4.h $(INCO_D)\rc4.h
+
+$(INCO_D)\rc5.h: $(SRC_D)\crypto\rc5\rc5.h
+       $(CP) $(SRC_D)\crypto\rc5\rc5.h $(INCO_D)\rc5.h
+
+$(INCO_D)\idea.h: $(SRC_D)\crypto\idea\idea.h
+       $(CP) $(SRC_D)\crypto\idea\idea.h $(INCO_D)\idea.h
+
+$(INCO_D)\blowfish.h: $(SRC_D)\crypto\bf\blowfish.h
+       $(CP) $(SRC_D)\crypto\bf\blowfish.h $(INCO_D)\blowfish.h
+
+$(INCO_D)\cast.h: $(SRC_D)\crypto\cast\cast.h
+       $(CP) $(SRC_D)\crypto\cast\cast.h $(INCO_D)\cast.h
+
+$(INCO_D)\bn.h: $(SRC_D)\crypto\bn\bn.h
+       $(CP) $(SRC_D)\crypto\bn\bn.h $(INCO_D)\bn.h
+
+$(INCO_D)\rsa.h: $(SRC_D)\crypto\rsa\rsa.h
+       $(CP) $(SRC_D)\crypto\rsa\rsa.h $(INCO_D)\rsa.h
+
+$(INCO_D)\dsa.h: $(SRC_D)\crypto\dsa\dsa.h
+       $(CP) $(SRC_D)\crypto\dsa\dsa.h $(INCO_D)\dsa.h
+
+$(INCO_D)\dh.h: $(SRC_D)\crypto\dh\dh.h
+       $(CP) $(SRC_D)\crypto\dh\dh.h $(INCO_D)\dh.h
+
+$(INCO_D)\buffer.h: $(SRC_D)\crypto\buffer\buffer.h
+       $(CP) $(SRC_D)\crypto\buffer\buffer.h $(INCO_D)\buffer.h
+
+$(INCO_D)\bio.h: $(SRC_D)\crypto\bio\bio.h
+       $(CP) $(SRC_D)\crypto\bio\bio.h $(INCO_D)\bio.h
+
+$(INCO_D)\stack.h: $(SRC_D)\crypto\stack\stack.h
+       $(CP) $(SRC_D)\crypto\stack\stack.h $(INCO_D)\stack.h
+
+$(INCO_D)\safestack.h: $(SRC_D)\crypto\stack\safestack.h
+       $(CP) $(SRC_D)\crypto\stack\safestack.h $(INCO_D)\safestack.h
+
+$(INCO_D)\lhash.h: $(SRC_D)\crypto\lhash\lhash.h
+       $(CP) $(SRC_D)\crypto\lhash\lhash.h $(INCO_D)\lhash.h
+
+$(INCO_D)\rand.h: $(SRC_D)\crypto\rand\rand.h
+       $(CP) $(SRC_D)\crypto\rand\rand.h $(INCO_D)\rand.h
+
+$(INCO_D)\err.h: $(SRC_D)\crypto\err\err.h
+       $(CP) $(SRC_D)\crypto\err\err.h $(INCO_D)\err.h
+
+$(INCO_D)\objects.h: $(SRC_D)\crypto\objects\objects.h
+       $(CP) $(SRC_D)\crypto\objects\objects.h $(INCO_D)\objects.h
+
+$(INCO_D)\evp.h: $(SRC_D)\crypto\evp\evp.h
+       $(CP) $(SRC_D)\crypto\evp\evp.h $(INCO_D)\evp.h
+
+$(INCO_D)\asn1.h: $(SRC_D)\crypto\asn1\asn1.h
+       $(CP) $(SRC_D)\crypto\asn1\asn1.h $(INCO_D)\asn1.h
+
+$(INCO_D)\asn1_mac.h: $(SRC_D)\crypto\asn1\asn1_mac.h
+       $(CP) $(SRC_D)\crypto\asn1\asn1_mac.h $(INCO_D)\asn1_mac.h
+
+$(INCO_D)\pem.h: $(SRC_D)\crypto\pem\pem.h
+       $(CP) $(SRC_D)\crypto\pem\pem.h $(INCO_D)\pem.h
+
+$(INCO_D)\pem2.h: $(SRC_D)\crypto\pem\pem2.h
+       $(CP) $(SRC_D)\crypto\pem\pem2.h $(INCO_D)\pem2.h
+
+$(INCO_D)\x509.h: $(SRC_D)\crypto\x509\x509.h
+       $(CP) $(SRC_D)\crypto\x509\x509.h $(INCO_D)\x509.h
+
+$(INCO_D)\x509_vfy.h: $(SRC_D)\crypto\x509\x509_vfy.h
+       $(CP) $(SRC_D)\crypto\x509\x509_vfy.h $(INCO_D)\x509_vfy.h
+
+$(INCO_D)\x509v3.h: $(SRC_D)\crypto\x509v3\x509v3.h
+       $(CP) $(SRC_D)\crypto\x509v3\x509v3.h $(INCO_D)\x509v3.h
+
+$(INCO_D)\conf.h: $(SRC_D)\crypto\conf\conf.h
+       $(CP) $(SRC_D)\crypto\conf\conf.h $(INCO_D)\conf.h
+
+$(INCO_D)\txt_db.h: $(SRC_D)\crypto\txt_db\txt_db.h
+       $(CP) $(SRC_D)\crypto\txt_db\txt_db.h $(INCO_D)\txt_db.h
+
+$(INCO_D)\pkcs7.h: $(SRC_D)\crypto\pkcs7\pkcs7.h
+       $(CP) $(SRC_D)\crypto\pkcs7\pkcs7.h $(INCO_D)\pkcs7.h
+
+$(INCO_D)\pkcs12.h: $(SRC_D)\crypto\pkcs12\pkcs12.h
+       $(CP) $(SRC_D)\crypto\pkcs12\pkcs12.h $(INCO_D)\pkcs12.h
+
+$(INCO_D)\comp.h: $(SRC_D)\crypto\comp\comp.h
+       $(CP) $(SRC_D)\crypto\comp\comp.h $(INCO_D)\comp.h
+
+$(INCO_D)\ssl.h: $(SRC_D)\ssl\ssl.h
+       $(CP) $(SRC_D)\ssl\ssl.h $(INCO_D)\ssl.h
+
+$(INCO_D)\ssl2.h: $(SRC_D)\ssl\ssl2.h
+       $(CP) $(SRC_D)\ssl\ssl2.h $(INCO_D)\ssl2.h
+
+$(INCO_D)\ssl3.h: $(SRC_D)\ssl\ssl3.h
+       $(CP) $(SRC_D)\ssl\ssl3.h $(INCO_D)\ssl3.h
+
+$(INCO_D)\ssl23.h: $(SRC_D)\ssl\ssl23.h
+       $(CP) $(SRC_D)\ssl\ssl23.h $(INCO_D)\ssl23.h
+
+$(INCO_D)\tls1.h: $(SRC_D)\ssl\tls1.h
+       $(CP) $(SRC_D)\ssl\tls1.h $(INCO_D)\tls1.h
+
+$(INCO_D)\rsaref.h: $(SRC_D)\rsaref\rsaref.h
+       $(CP) $(SRC_D)\rsaref\rsaref.h $(INCO_D)\rsaref.h
+
+$(OBJ_D)\md2test.obj: $(SRC_D)\crypto\md2\md2test.c
+       $(CC) /Fo$(OBJ_D)\md2test.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\md2\md2test.c
+
+$(OBJ_D)\md5test.obj: $(SRC_D)\crypto\md5\md5test.c
+       $(CC) /Fo$(OBJ_D)\md5test.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\md5\md5test.c
+
+$(OBJ_D)\shatest.obj: $(SRC_D)\crypto\sha\shatest.c
+       $(CC) /Fo$(OBJ_D)\shatest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\sha\shatest.c
+
+$(OBJ_D)\sha1test.obj: $(SRC_D)\crypto\sha\sha1test.c
+       $(CC) /Fo$(OBJ_D)\sha1test.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\sha\sha1test.c
+
+$(OBJ_D)\mdc2test.obj: $(SRC_D)\crypto\mdc2\mdc2test.c
+       $(CC) /Fo$(OBJ_D)\mdc2test.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\mdc2\mdc2test.c
+
+$(OBJ_D)\hmactest.obj: $(SRC_D)\crypto\hmac\hmactest.c
+       $(CC) /Fo$(OBJ_D)\hmactest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\hmac\hmactest.c
+
+$(OBJ_D)\rmdtest.obj: $(SRC_D)\crypto\ripemd\rmdtest.c
+       $(CC) /Fo$(OBJ_D)\rmdtest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\ripemd\rmdtest.c
+
+$(OBJ_D)\destest.obj: $(SRC_D)\crypto\des\destest.c
+       $(CC) /Fo$(OBJ_D)\destest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\des\destest.c
+
+$(OBJ_D)\rc2test.obj: $(SRC_D)\crypto\rc2\rc2test.c
+       $(CC) /Fo$(OBJ_D)\rc2test.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\rc2\rc2test.c
+
+$(OBJ_D)\rc4test.obj: $(SRC_D)\crypto\rc4\rc4test.c
+       $(CC) /Fo$(OBJ_D)\rc4test.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\rc4\rc4test.c
+
+$(OBJ_D)\rc5test.obj: $(SRC_D)\crypto\rc5\rc5test.c
+       $(CC) /Fo$(OBJ_D)\rc5test.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\rc5\rc5test.c
+
+$(OBJ_D)\ideatest.obj: $(SRC_D)\crypto\idea\ideatest.c
+       $(CC) /Fo$(OBJ_D)\ideatest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\idea\ideatest.c
+
+$(OBJ_D)\bftest.obj: $(SRC_D)\crypto\bf\bftest.c
+       $(CC) /Fo$(OBJ_D)\bftest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\bf\bftest.c
+
+$(OBJ_D)\casttest.obj: $(SRC_D)\crypto\cast\casttest.c
+       $(CC) /Fo$(OBJ_D)\casttest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\cast\casttest.c
+
+$(OBJ_D)\bntest.obj: $(SRC_D)\crypto\bn\bntest.c
+       $(CC) /Fo$(OBJ_D)\bntest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\bn\bntest.c
+
+$(OBJ_D)\exptest.obj: $(SRC_D)\crypto\bn\exptest.c
+       $(CC) /Fo$(OBJ_D)\exptest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\bn\exptest.c
+
+$(OBJ_D)\rsa_test.obj: $(SRC_D)\crypto\rsa\rsa_test.c
+       $(CC) /Fo$(OBJ_D)\rsa_test.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\rsa\rsa_test.c
+
+$(OBJ_D)\dsatest.obj: $(SRC_D)\crypto\dsa\dsatest.c
+       $(CC) /Fo$(OBJ_D)\dsatest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\dsa\dsatest.c
+
+$(OBJ_D)\dhtest.obj: $(SRC_D)\crypto\dh\dhtest.c
+       $(CC) /Fo$(OBJ_D)\dhtest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\dh\dhtest.c
+
+$(OBJ_D)\randtest.obj: $(SRC_D)\crypto\rand\randtest.c
+       $(CC) /Fo$(OBJ_D)\randtest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\rand\randtest.c
+
+$(OBJ_D)\ssltest.obj: $(SRC_D)\ssl\ssltest.c
+       $(CC) /Fo$(OBJ_D)\ssltest.obj $(APP_CFLAGS) -c $(SRC_D)\ssl\ssltest.c
+
+$(OBJ_D)\verify.obj: $(SRC_D)\apps\verify.c
+       $(CC) /Fo$(OBJ_D)\verify.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\verify.c
+
+$(OBJ_D)\asn1pars.obj: $(SRC_D)\apps\asn1pars.c
+       $(CC) /Fo$(OBJ_D)\asn1pars.obj -DMONOLITH $(APP_CFLAGS) -c 
+$(SRC_D)\apps\asn1pars.c
+
+$(OBJ_D)\req.obj: $(SRC_D)\apps\req.c
+       $(CC) /Fo$(OBJ_D)\req.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\req.c
+
+$(OBJ_D)\dgst.obj: $(SRC_D)\apps\dgst.c
+       $(CC) /Fo$(OBJ_D)\dgst.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\dgst.c
+
+$(OBJ_D)\dh.obj: $(SRC_D)\apps\dh.c
+       $(CC) /Fo$(OBJ_D)\dh.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\dh.c
+
+$(OBJ_D)\dhparam.obj: $(SRC_D)\apps\dhparam.c
+       $(CC) /Fo$(OBJ_D)\dhparam.obj -DMONOLITH $(APP_CFLAGS) -c 
+$(SRC_D)\apps\dhparam.c
+
+$(OBJ_D)\enc.obj: $(SRC_D)\apps\enc.c
+       $(CC) /Fo$(OBJ_D)\enc.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\enc.c
+
+$(OBJ_D)\passwd.obj: $(SRC_D)\apps\passwd.c
+       $(CC) /Fo$(OBJ_D)\passwd.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\passwd.c
+
+$(OBJ_D)\gendh.obj: $(SRC_D)\apps\gendh.c
+       $(CC) /Fo$(OBJ_D)\gendh.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\gendh.c
+
+$(OBJ_D)\errstr.obj: $(SRC_D)\apps\errstr.c
+       $(CC) /Fo$(OBJ_D)\errstr.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\errstr.c
+
+$(OBJ_D)\ca.obj: $(SRC_D)\apps\ca.c
+       $(CC) /Fo$(OBJ_D)\ca.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\ca.c
+
+$(OBJ_D)\pkcs7.obj: $(SRC_D)\apps\pkcs7.c
+       $(CC) /Fo$(OBJ_D)\pkcs7.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\pkcs7.c
+
+$(OBJ_D)\crl2p7.obj: $(SRC_D)\apps\crl2p7.c
+       $(CC) /Fo$(OBJ_D)\crl2p7.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\crl2p7.c
+
+$(OBJ_D)\crl.obj: $(SRC_D)\apps\crl.c
+       $(CC) /Fo$(OBJ_D)\crl.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\crl.c
+
+$(OBJ_D)\rsa.obj: $(SRC_D)\apps\rsa.c
+       $(CC) /Fo$(OBJ_D)\rsa.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\rsa.c
+
+$(OBJ_D)\dsa.obj: $(SRC_D)\apps\dsa.c
+       $(CC) /Fo$(OBJ_D)\dsa.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\dsa.c
+
+$(OBJ_D)\dsaparam.obj: $(SRC_D)\apps\dsaparam.c
+       $(CC) /Fo$(OBJ_D)\dsaparam.obj -DMONOLITH $(APP_CFLAGS) -c 
+$(SRC_D)\apps\dsaparam.c
+
+$(OBJ_D)\x509.obj: $(SRC_D)\apps\x509.c
+       $(CC) /Fo$(OBJ_D)\x509.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\x509.c
+
+$(OBJ_D)\genrsa.obj: $(SRC_D)\apps\genrsa.c
+       $(CC) /Fo$(OBJ_D)\genrsa.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\genrsa.c
+
+$(OBJ_D)\gendsa.obj: $(SRC_D)\apps\gendsa.c
+       $(CC) /Fo$(OBJ_D)\gendsa.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\gendsa.c
+
+$(OBJ_D)\s_server.obj: $(SRC_D)\apps\s_server.c
+       $(CC) /Fo$(OBJ_D)\s_server.obj -DMONOLITH $(APP_CFLAGS) -c 
+$(SRC_D)\apps\s_server.c
+
+$(OBJ_D)\s_client.obj: $(SRC_D)\apps\s_client.c
+       $(CC) /Fo$(OBJ_D)\s_client.obj -DMONOLITH $(APP_CFLAGS) -c 
+$(SRC_D)\apps\s_client.c
+
+$(OBJ_D)\speed.obj: $(SRC_D)\apps\speed.c
+       $(CC) /Fo$(OBJ_D)\speed.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\speed.c
+
+$(OBJ_D)\s_time.obj: $(SRC_D)\apps\s_time.c
+       $(CC) /Fo$(OBJ_D)\s_time.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\s_time.c
+
+$(OBJ_D)\apps.obj: $(SRC_D)\apps\apps.c
+       $(CC) /Fo$(OBJ_D)\apps.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\apps.c
+
+$(OBJ_D)\s_cb.obj: $(SRC_D)\apps\s_cb.c
+       $(CC) /Fo$(OBJ_D)\s_cb.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\s_cb.c
+
+$(OBJ_D)\s_socket.obj: $(SRC_D)\apps\s_socket.c
+       $(CC) /Fo$(OBJ_D)\s_socket.obj -DMONOLITH $(APP_CFLAGS) -c 
+$(SRC_D)\apps\s_socket.c
+
+$(OBJ_D)\app_rand.obj: $(SRC_D)\apps\app_rand.c
+       $(CC) /Fo$(OBJ_D)\app_rand.obj -DMONOLITH $(APP_CFLAGS) -c 
+$(SRC_D)\apps\app_rand.c
+
+$(OBJ_D)\version.obj: $(SRC_D)\apps\version.c
+       $(CC) /Fo$(OBJ_D)\version.obj -DMONOLITH $(APP_CFLAGS) -c 
+$(SRC_D)\apps\version.c
+
+$(OBJ_D)\sess_id.obj: $(SRC_D)\apps\sess_id.c
+       $(CC) /Fo$(OBJ_D)\sess_id.obj -DMONOLITH $(APP_CFLAGS) -c 
+$(SRC_D)\apps\sess_id.c
+
+$(OBJ_D)\ciphers.obj: $(SRC_D)\apps\ciphers.c
+       $(CC) /Fo$(OBJ_D)\ciphers.obj -DMONOLITH $(APP_CFLAGS) -c 
+$(SRC_D)\apps\ciphers.c
+
+$(OBJ_D)\nseq.obj: $(SRC_D)\apps\nseq.c
+       $(CC) /Fo$(OBJ_D)\nseq.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\nseq.c
+
+$(OBJ_D)\pkcs12.obj: $(SRC_D)\apps\pkcs12.c
+       $(CC) /Fo$(OBJ_D)\pkcs12.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\pkcs12.c
+
+$(OBJ_D)\pkcs8.obj: $(SRC_D)\apps\pkcs8.c
+       $(CC) /Fo$(OBJ_D)\pkcs8.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\pkcs8.c
+
+$(OBJ_D)\spkac.obj: $(SRC_D)\apps\spkac.c
+       $(CC) /Fo$(OBJ_D)\spkac.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\spkac.c
+
+$(OBJ_D)\smime.obj: $(SRC_D)\apps\smime.c
+       $(CC) /Fo$(OBJ_D)\smime.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\smime.c
+
+$(OBJ_D)\openssl.obj: $(SRC_D)\apps\openssl.c
+       $(CC) /Fo$(OBJ_D)\openssl.obj -DMONOLITH $(APP_CFLAGS) -c 
+$(SRC_D)\apps\openssl.c
+
+$(OBJ_D)\cryptlib.obj: $(SRC_D)\crypto\cryptlib.c
+       $(CC) /Fo$(OBJ_D)\cryptlib.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\cryptlib.c
+
+$(OBJ_D)\mem.obj: $(SRC_D)\crypto\mem.c
+       $(CC) /Fo$(OBJ_D)\mem.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\mem.c
+
+$(OBJ_D)\mem_dbg.obj: $(SRC_D)\crypto\mem_dbg.c
+       $(CC) /Fo$(OBJ_D)\mem_dbg.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\mem_dbg.c
+
+$(OBJ_D)\cversion.obj: $(SRC_D)\crypto\cversion.c
+       $(CC) /Fo$(OBJ_D)\cversion.obj  $(SHLIB_CFLAGS) -DMK1MF_BUILD 
+-DMK1MF_PLATFORM_VC_WIN32 -c $(SRC_D)\crypto\cversion.c
+
+$(OBJ_D)\ex_data.obj: $(SRC_D)\crypto\ex_data.c
+       $(CC) /Fo$(OBJ_D)\ex_data.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\ex_data.c
+
+$(OBJ_D)\tmdiff.obj: $(SRC_D)\crypto\tmdiff.c
+       $(CC) /Fo$(OBJ_D)\tmdiff.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\tmdiff.c
+
+$(OBJ_D)\cpt_err.obj: $(SRC_D)\crypto\cpt_err.c
+       $(CC) /Fo$(OBJ_D)\cpt_err.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\cpt_err.c
+
+$(OBJ_D)\ebcdic.obj: $(SRC_D)\crypto\ebcdic.c
+       $(CC) /Fo$(OBJ_D)\ebcdic.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\ebcdic.c
+
+$(OBJ_D)\md2_dgst.obj: $(SRC_D)\crypto\md2\md2_dgst.c
+       $(CC) /Fo$(OBJ_D)\md2_dgst.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\md2\md2_dgst.c
+
+$(OBJ_D)\md2_one.obj: $(SRC_D)\crypto\md2\md2_one.c
+       $(CC) /Fo$(OBJ_D)\md2_one.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\md2\md2_one.c
+
+$(OBJ_D)\md5_dgst.obj: $(SRC_D)\crypto\md5\md5_dgst.c
+       $(CC) /Fo$(OBJ_D)\md5_dgst.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\md5\md5_dgst.c
+
+$(OBJ_D)\md5_one.obj: $(SRC_D)\crypto\md5\md5_one.c
+       $(CC) /Fo$(OBJ_D)\md5_one.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\md5\md5_one.c
+
+$(OBJ_D)\sha_dgst.obj: $(SRC_D)\crypto\sha\sha_dgst.c
+       $(CC) /Fo$(OBJ_D)\sha_dgst.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\sha\sha_dgst.c
+
+$(OBJ_D)\sha1dgst.obj: $(SRC_D)\crypto\sha\sha1dgst.c
+       $(CC) /Fo$(OBJ_D)\sha1dgst.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\sha\sha1dgst.c
+
+$(OBJ_D)\sha_one.obj: $(SRC_D)\crypto\sha\sha_one.c
+       $(CC) /Fo$(OBJ_D)\sha_one.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\sha\sha_one.c
+
+$(OBJ_D)\sha1_one.obj: $(SRC_D)\crypto\sha\sha1_one.c
+       $(CC) /Fo$(OBJ_D)\sha1_one.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\sha\sha1_one.c
+
+$(OBJ_D)\mdc2dgst.obj: $(SRC_D)\crypto\mdc2\mdc2dgst.c
+       $(CC) /Fo$(OBJ_D)\mdc2dgst.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\mdc2\mdc2dgst.c
+
+$(OBJ_D)\mdc2_one.obj: $(SRC_D)\crypto\mdc2\mdc2_one.c
+       $(CC) /Fo$(OBJ_D)\mdc2_one.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\mdc2\mdc2_one.c
+
+$(OBJ_D)\hmac.obj: $(SRC_D)\crypto\hmac\hmac.c
+       $(CC) /Fo$(OBJ_D)\hmac.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\hmac\hmac.c
+
+$(OBJ_D)\rmd_dgst.obj: $(SRC_D)\crypto\ripemd\rmd_dgst.c
+       $(CC) /Fo$(OBJ_D)\rmd_dgst.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\ripemd\rmd_dgst.c
+
+$(OBJ_D)\rmd_one.obj: $(SRC_D)\crypto\ripemd\rmd_one.c
+       $(CC) /Fo$(OBJ_D)\rmd_one.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\ripemd\rmd_one.c
+
+$(OBJ_D)\set_key.obj: $(SRC_D)\crypto\des\set_key.c
+       $(CC) /Fo$(OBJ_D)\set_key.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\des\set_key.c
+
+$(OBJ_D)\ecb_enc.obj: $(SRC_D)\crypto\des\ecb_enc.c
+       $(CC) /Fo$(OBJ_D)\ecb_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\des\ecb_enc.c
+
+$(OBJ_D)\cbc_enc.obj: $(SRC_D)\crypto\des\cbc_enc.c
+       $(CC) /Fo$(OBJ_D)\cbc_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\des\cbc_enc.c
+
+$(OBJ_D)\ecb3_enc.obj: $(SRC_D)\crypto\des\ecb3_enc.c
+       $(CC) /Fo$(OBJ_D)\ecb3_enc.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\des\ecb3_enc.c
+
+$(OBJ_D)\cfb64enc.obj: $(SRC_D)\crypto\des\cfb64enc.c
+       $(CC) /Fo$(OBJ_D)\cfb64enc.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\des\cfb64enc.c
+
+$(OBJ_D)\cfb64ede.obj: $(SRC_D)\crypto\des\cfb64ede.c
+       $(CC) /Fo$(OBJ_D)\cfb64ede.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\des\cfb64ede.c
+
+$(OBJ_D)\cfb_enc.obj: $(SRC_D)\crypto\des\cfb_enc.c
+       $(CC) /Fo$(OBJ_D)\cfb_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\des\cfb_enc.c
+
+$(OBJ_D)\ofb64ede.obj: $(SRC_D)\crypto\des\ofb64ede.c
+       $(CC) /Fo$(OBJ_D)\ofb64ede.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\des\ofb64ede.c
+
+$(OBJ_D)\enc_read.obj: $(SRC_D)\crypto\des\enc_read.c
+       $(CC) /Fo$(OBJ_D)\enc_read.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\des\enc_read.c
+
+$(OBJ_D)\enc_writ.obj: $(SRC_D)\crypto\des\enc_writ.c
+       $(CC) /Fo$(OBJ_D)\enc_writ.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\des\enc_writ.c
+
+$(OBJ_D)\ofb64enc.obj: $(SRC_D)\crypto\des\ofb64enc.c
+       $(CC) /Fo$(OBJ_D)\ofb64enc.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\des\ofb64enc.c
+
+$(OBJ_D)\ofb_enc.obj: $(SRC_D)\crypto\des\ofb_enc.c
+       $(CC) /Fo$(OBJ_D)\ofb_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\des\ofb_enc.c
+
+$(OBJ_D)\str2key.obj: $(SRC_D)\crypto\des\str2key.c
+       $(CC) /Fo$(OBJ_D)\str2key.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\des\str2key.c
+
+$(OBJ_D)\pcbc_enc.obj: $(SRC_D)\crypto\des\pcbc_enc.c
+       $(CC) /Fo$(OBJ_D)\pcbc_enc.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\des\pcbc_enc.c
+
+$(OBJ_D)\qud_cksm.obj: $(SRC_D)\crypto\des\qud_cksm.c
+       $(CC) /Fo$(OBJ_D)\qud_cksm.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\des\qud_cksm.c
+
+$(OBJ_D)\rand_key.obj: $(SRC_D)\crypto\des\rand_key.c
+       $(CC) /Fo$(OBJ_D)\rand_key.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\des\rand_key.c
+
+$(OBJ_D)\des_enc.obj: $(SRC_D)\crypto\des\des_enc.c
+       $(CC) /Fo$(OBJ_D)\des_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\des\des_enc.c
+
+$(OBJ_D)\fcrypt_b.obj: $(SRC_D)\crypto\des\fcrypt_b.c
+       $(CC) /Fo$(OBJ_D)\fcrypt_b.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\des\fcrypt_b.c
+
+$(OBJ_D)\read2pwd.obj: $(SRC_D)\crypto\des\read2pwd.c
+       $(CC) /Fo$(OBJ_D)\read2pwd.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\des\read2pwd.c
+
+$(OBJ_D)\fcrypt.obj: $(SRC_D)\crypto\des\fcrypt.c
+       $(CC) /Fo$(OBJ_D)\fcrypt.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\des\fcrypt.c
+
+$(OBJ_D)\xcbc_enc.obj: $(SRC_D)\crypto\des\xcbc_enc.c
+       $(CC) /Fo$(OBJ_D)\xcbc_enc.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\des\xcbc_enc.c
+
+$(OBJ_D)\read_pwd.obj: $(SRC_D)\crypto\des\read_pwd.c
+       $(CC) /Fo$(OBJ_D)\read_pwd.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\des\read_pwd.c
+
+$(OBJ_D)\rpc_enc.obj: $(SRC_D)\crypto\des\rpc_enc.c
+       $(CC) /Fo$(OBJ_D)\rpc_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\des\rpc_enc.c
+
+$(OBJ_D)\cbc_cksm.obj: $(SRC_D)\crypto\des\cbc_cksm.c
+       $(CC) /Fo$(OBJ_D)\cbc_cksm.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\des\cbc_cksm.c
+
+$(OBJ_D)\supp.obj: $(SRC_D)\crypto\des\supp.c
+       $(CC) /Fo$(OBJ_D)\supp.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\des\supp.c
+
+$(OBJ_D)\ede_cbcm_enc.obj: $(SRC_D)\crypto\des\ede_cbcm_enc.c
+       $(CC) /Fo$(OBJ_D)\ede_cbcm_enc.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\des\ede_cbcm_enc.c
+
+$(OBJ_D)\rc2_ecb.obj: $(SRC_D)\crypto\rc2\rc2_ecb.c
+       $(CC) /Fo$(OBJ_D)\rc2_ecb.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\rc2\rc2_ecb.c
+
+$(OBJ_D)\rc2_skey.obj: $(SRC_D)\crypto\rc2\rc2_skey.c
+       $(CC) /Fo$(OBJ_D)\rc2_skey.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\rc2\rc2_skey.c
+
+$(OBJ_D)\rc2_cbc.obj: $(SRC_D)\crypto\rc2\rc2_cbc.c
+       $(CC) /Fo$(OBJ_D)\rc2_cbc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\rc2\rc2_cbc.c
+
+$(OBJ_D)\rc2cfb64.obj: $(SRC_D)\crypto\rc2\rc2cfb64.c
+       $(CC) /Fo$(OBJ_D)\rc2cfb64.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\rc2\rc2cfb64.c
+
+$(OBJ_D)\rc2ofb64.obj: $(SRC_D)\crypto\rc2\rc2ofb64.c
+       $(CC) /Fo$(OBJ_D)\rc2ofb64.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\rc2\rc2ofb64.c
+
+$(OBJ_D)\rc4_skey.obj: $(SRC_D)\crypto\rc4\rc4_skey.c
+       $(CC) /Fo$(OBJ_D)\rc4_skey.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\rc4\rc4_skey.c
+
+$(OBJ_D)\rc4_enc.obj: $(SRC_D)\crypto\rc4\rc4_enc.c
+       $(CC) /Fo$(OBJ_D)\rc4_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\rc4\rc4_enc.c
+
+$(OBJ_D)\rc5_skey.obj: $(SRC_D)\crypto\rc5\rc5_skey.c
+       $(CC) /Fo$(OBJ_D)\rc5_skey.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\rc5\rc5_skey.c
+
+$(OBJ_D)\rc5_ecb.obj: $(SRC_D)\crypto\rc5\rc5_ecb.c
+       $(CC) /Fo$(OBJ_D)\rc5_ecb.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\rc5\rc5_ecb.c
+
+$(OBJ_D)\rc5_enc.obj: $(SRC_D)\crypto\rc5\rc5_enc.c
+       $(CC) /Fo$(OBJ_D)\rc5_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\rc5\rc5_enc.c
+
+$(OBJ_D)\rc5cfb64.obj: $(SRC_D)\crypto\rc5\rc5cfb64.c
+       $(CC) /Fo$(OBJ_D)\rc5cfb64.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\rc5\rc5cfb64.c
+
+$(OBJ_D)\rc5ofb64.obj: $(SRC_D)\crypto\rc5\rc5ofb64.c
+       $(CC) /Fo$(OBJ_D)\rc5ofb64.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\rc5\rc5ofb64.c
+
+$(OBJ_D)\i_cbc.obj: $(SRC_D)\crypto\idea\i_cbc.c
+       $(CC) /Fo$(OBJ_D)\i_cbc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\idea\i_cbc.c
+
+$(OBJ_D)\i_cfb64.obj: $(SRC_D)\crypto\idea\i_cfb64.c
+       $(CC) /Fo$(OBJ_D)\i_cfb64.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\idea\i_cfb64.c
+
+$(OBJ_D)\i_ofb64.obj: $(SRC_D)\crypto\idea\i_ofb64.c
+       $(CC) /Fo$(OBJ_D)\i_ofb64.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\idea\i_ofb64.c
+
+$(OBJ_D)\i_ecb.obj: $(SRC_D)\crypto\idea\i_ecb.c
+       $(CC) /Fo$(OBJ_D)\i_ecb.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\idea\i_ecb.c
+
+$(OBJ_D)\i_skey.obj: $(SRC_D)\crypto\idea\i_skey.c
+       $(CC) /Fo$(OBJ_D)\i_skey.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\idea\i_skey.c
+
+$(OBJ_D)\bf_skey.obj: $(SRC_D)\crypto\bf\bf_skey.c
+       $(CC) /Fo$(OBJ_D)\bf_skey.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bf\bf_skey.c
+
+$(OBJ_D)\bf_ecb.obj: $(SRC_D)\crypto\bf\bf_ecb.c
+       $(CC) /Fo$(OBJ_D)\bf_ecb.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bf\bf_ecb.c
+
+$(OBJ_D)\bf_enc.obj: $(SRC_D)\crypto\bf\bf_enc.c
+       $(CC) /Fo$(OBJ_D)\bf_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bf\bf_enc.c
+
+$(OBJ_D)\bf_cfb64.obj: $(SRC_D)\crypto\bf\bf_cfb64.c
+       $(CC) /Fo$(OBJ_D)\bf_cfb64.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\bf\bf_cfb64.c
+
+$(OBJ_D)\bf_ofb64.obj: $(SRC_D)\crypto\bf\bf_ofb64.c
+       $(CC) /Fo$(OBJ_D)\bf_ofb64.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\bf\bf_ofb64.c
+
+$(OBJ_D)\c_skey.obj: $(SRC_D)\crypto\cast\c_skey.c
+       $(CC) /Fo$(OBJ_D)\c_skey.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\cast\c_skey.c
+
+$(OBJ_D)\c_ecb.obj: $(SRC_D)\crypto\cast\c_ecb.c
+       $(CC) /Fo$(OBJ_D)\c_ecb.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\cast\c_ecb.c
+
+$(OBJ_D)\c_enc.obj: $(SRC_D)\crypto\cast\c_enc.c
+       $(CC) /Fo$(OBJ_D)\c_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\cast\c_enc.c
+
+$(OBJ_D)\c_cfb64.obj: $(SRC_D)\crypto\cast\c_cfb64.c
+       $(CC) /Fo$(OBJ_D)\c_cfb64.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\cast\c_cfb64.c
+
+$(OBJ_D)\c_ofb64.obj: $(SRC_D)\crypto\cast\c_ofb64.c
+       $(CC) /Fo$(OBJ_D)\c_ofb64.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\cast\c_ofb64.c
+
+$(OBJ_D)\bn_add.obj: $(SRC_D)\crypto\bn\bn_add.c
+       $(CC) /Fo$(OBJ_D)\bn_add.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_add.c
+
+$(OBJ_D)\bn_div.obj: $(SRC_D)\crypto\bn\bn_div.c
+       $(CC) /Fo$(OBJ_D)\bn_div.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_div.c
+
+$(OBJ_D)\bn_exp.obj: $(SRC_D)\crypto\bn\bn_exp.c
+       $(CC) /Fo$(OBJ_D)\bn_exp.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_exp.c
+
+$(OBJ_D)\bn_lib.obj: $(SRC_D)\crypto\bn\bn_lib.c
+       $(CC) /Fo$(OBJ_D)\bn_lib.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_lib.c
+
+$(OBJ_D)\bn_ctx.obj: $(SRC_D)\crypto\bn\bn_ctx.c
+       $(CC) /Fo$(OBJ_D)\bn_ctx.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_ctx.c
+
+$(OBJ_D)\bn_mul.obj: $(SRC_D)\crypto\bn\bn_mul.c
+       $(CC) /Fo$(OBJ_D)\bn_mul.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_mul.c
+
+$(OBJ_D)\bn_print.obj: $(SRC_D)\crypto\bn\bn_print.c
+       $(CC) /Fo$(OBJ_D)\bn_print.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\bn\bn_print.c
+
+$(OBJ_D)\bn_rand.obj: $(SRC_D)\crypto\bn\bn_rand.c
+       $(CC) /Fo$(OBJ_D)\bn_rand.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_rand.c
+
+$(OBJ_D)\bn_shift.obj: $(SRC_D)\crypto\bn\bn_shift.c
+       $(CC) /Fo$(OBJ_D)\bn_shift.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\bn\bn_shift.c
+
+$(OBJ_D)\bn_word.obj: $(SRC_D)\crypto\bn\bn_word.c
+       $(CC) /Fo$(OBJ_D)\bn_word.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_word.c
+
+$(OBJ_D)\bn_blind.obj: $(SRC_D)\crypto\bn\bn_blind.c
+       $(CC) /Fo$(OBJ_D)\bn_blind.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\bn\bn_blind.c
+
+$(OBJ_D)\bn_gcd.obj: $(SRC_D)\crypto\bn\bn_gcd.c
+       $(CC) /Fo$(OBJ_D)\bn_gcd.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_gcd.c
+
+$(OBJ_D)\bn_prime.obj: $(SRC_D)\crypto\bn\bn_prime.c
+       $(CC) /Fo$(OBJ_D)\bn_prime.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\bn\bn_prime.c
+
+$(OBJ_D)\bn_err.obj: $(SRC_D)\crypto\bn\bn_err.c
+       $(CC) /Fo$(OBJ_D)\bn_err.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_err.c
+
+$(OBJ_D)\bn_sqr.obj: $(SRC_D)\crypto\bn\bn_sqr.c
+       $(CC) /Fo$(OBJ_D)\bn_sqr.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_sqr.c
+
+$(OBJ_D)\bn_asm.obj: $(SRC_D)\crypto\bn\bn_asm.c
+       $(CC) /Fo$(OBJ_D)\bn_asm.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_asm.c
+
+$(OBJ_D)\bn_recp.obj: $(SRC_D)\crypto\bn\bn_recp.c
+       $(CC) /Fo$(OBJ_D)\bn_recp.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_recp.c
+
+$(OBJ_D)\bn_mont.obj: $(SRC_D)\crypto\bn\bn_mont.c
+       $(CC) /Fo$(OBJ_D)\bn_mont.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_mont.c
+
+$(OBJ_D)\bn_mpi.obj: $(SRC_D)\crypto\bn\bn_mpi.c
+       $(CC) /Fo$(OBJ_D)\bn_mpi.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_mpi.c
+
+$(OBJ_D)\bn_exp2.obj: $(SRC_D)\crypto\bn\bn_exp2.c
+       $(CC) /Fo$(OBJ_D)\bn_exp2.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_exp2.c
+
+$(OBJ_D)\rsa_eay.obj: $(SRC_D)\crypto\rsa\rsa_eay.c
+       $(CC) /Fo$(OBJ_D)\rsa_eay.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\rsa\rsa_eay.c
+
+$(OBJ_D)\rsa_gen.obj: $(SRC_D)\crypto\rsa\rsa_gen.c
+       $(CC) /Fo$(OBJ_D)\rsa_gen.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\rsa\rsa_gen.c
+
+$(OBJ_D)\rsa_lib.obj: $(SRC_D)\crypto\rsa\rsa_lib.c
+       $(CC) /Fo$(OBJ_D)\rsa_lib.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\rsa\rsa_lib.c
+
+$(OBJ_D)\rsa_sign.obj: $(SRC_D)\crypto\rsa\rsa_sign.c
+       $(CC) /Fo$(OBJ_D)\rsa_sign.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\rsa\rsa_sign.c
+
+$(OBJ_D)\rsa_saos.obj: $(SRC_D)\crypto\rsa\rsa_saos.c
+       $(CC) /Fo$(OBJ_D)\rsa_saos.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\rsa\rsa_saos.c
+
+$(OBJ_D)\rsa_err.obj: $(SRC_D)\crypto\rsa\rsa_err.c
+       $(CC) /Fo$(OBJ_D)\rsa_err.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\rsa\rsa_err.c
+
+$(OBJ_D)\rsa_pk1.obj: $(SRC_D)\crypto\rsa\rsa_pk1.c
+       $(CC) /Fo$(OBJ_D)\rsa_pk1.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\rsa\rsa_pk1.c
+
+$(OBJ_D)\rsa_ssl.obj: $(SRC_D)\crypto\rsa\rsa_ssl.c
+       $(CC) /Fo$(OBJ_D)\rsa_ssl.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\rsa\rsa_ssl.c
+
+$(OBJ_D)\rsa_none.obj: $(SRC_D)\crypto\rsa\rsa_none.c
+       $(CC) /Fo$(OBJ_D)\rsa_none.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\rsa\rsa_none.c
+
+$(OBJ_D)\rsa_oaep.obj: $(SRC_D)\crypto\rsa\rsa_oaep.c
+       $(CC) /Fo$(OBJ_D)\rsa_oaep.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\rsa\rsa_oaep.c
+
+$(OBJ_D)\rsa_chk.obj: $(SRC_D)\crypto\rsa\rsa_chk.c
+       $(CC) /Fo$(OBJ_D)\rsa_chk.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\rsa\rsa_chk.c
+
+$(OBJ_D)\rsa_null.obj: $(SRC_D)\crypto\rsa\rsa_null.c
+       $(CC) /Fo$(OBJ_D)\rsa_null.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\rsa\rsa_null.c
+
+$(OBJ_D)\dsa_gen.obj: $(SRC_D)\crypto\dsa\dsa_gen.c
+       $(CC) /Fo$(OBJ_D)\dsa_gen.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\dsa\dsa_gen.c
+
+$(OBJ_D)\dsa_key.obj: $(SRC_D)\crypto\dsa\dsa_key.c
+       $(CC) /Fo$(OBJ_D)\dsa_key.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\dsa\dsa_key.c
+
+$(OBJ_D)\dsa_lib.obj: $(SRC_D)\crypto\dsa\dsa_lib.c
+       $(CC) /Fo$(OBJ_D)\dsa_lib.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\dsa\dsa_lib.c
+
+$(OBJ_D)\dsa_asn1.obj: $(SRC_D)\crypto\dsa\dsa_asn1.c
+       $(CC) /Fo$(OBJ_D)\dsa_asn1.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\dsa\dsa_asn1.c
+
+$(OBJ_D)\dsa_vrf.obj: $(SRC_D)\crypto\dsa\dsa_vrf.c
+       $(CC) /Fo$(OBJ_D)\dsa_vrf.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\dsa\dsa_vrf.c
+
+$(OBJ_D)\dsa_sign.obj: $(SRC_D)\crypto\dsa\dsa_sign.c
+       $(CC) /Fo$(OBJ_D)\dsa_sign.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\dsa\dsa_sign.c
+
+$(OBJ_D)\dsa_err.obj: $(SRC_D)\crypto\dsa\dsa_err.c
+       $(CC) /Fo$(OBJ_D)\dsa_err.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\dsa\dsa_err.c
+
+$(OBJ_D)\dsa_ossl.obj: $(SRC_D)\crypto\dsa\dsa_ossl.c
+       $(CC) /Fo$(OBJ_D)\dsa_ossl.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\dsa\dsa_ossl.c
+
+$(OBJ_D)\dh_gen.obj: $(SRC_D)\crypto\dh\dh_gen.c
+       $(CC) /Fo$(OBJ_D)\dh_gen.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\dh\dh_gen.c
+
+$(OBJ_D)\dh_key.obj: $(SRC_D)\crypto\dh\dh_key.c
+       $(CC) /Fo$(OBJ_D)\dh_key.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\dh\dh_key.c
+
+$(OBJ_D)\dh_lib.obj: $(SRC_D)\crypto\dh\dh_lib.c
+       $(CC) /Fo$(OBJ_D)\dh_lib.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\dh\dh_lib.c
+
+$(OBJ_D)\dh_check.obj: $(SRC_D)\crypto\dh\dh_check.c
+       $(CC) /Fo$(OBJ_D)\dh_check.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\dh\dh_check.c
+
+$(OBJ_D)\dh_err.obj: $(SRC_D)\crypto\dh\dh_err.c
+       $(CC) /Fo$(OBJ_D)\dh_err.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\dh\dh_err.c
+
+$(OBJ_D)\buffer.obj: $(SRC_D)\crypto\buffer\buffer.c
+       $(CC) /Fo$(OBJ_D)\buffer.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\buffer\buffer.c
+
+$(OBJ_D)\buf_err.obj: $(SRC_D)\crypto\buffer\buf_err.c
+       $(CC) /Fo$(OBJ_D)\buf_err.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\buffer\buf_err.c
+
+$(OBJ_D)\bio_lib.obj: $(SRC_D)\crypto\bio\bio_lib.c
+       $(CC) /Fo$(OBJ_D)\bio_lib.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bio\bio_lib.c
+
+$(OBJ_D)\bio_cb.obj: $(SRC_D)\crypto\bio\bio_cb.c
+       $(CC) /Fo$(OBJ_D)\bio_cb.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bio\bio_cb.c
+
+$(OBJ_D)\bio_err.obj: $(SRC_D)\crypto\bio\bio_err.c
+       $(CC) /Fo$(OBJ_D)\bio_err.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bio\bio_err.c
+
+$(OBJ_D)\bss_mem.obj: $(SRC_D)\crypto\bio\bss_mem.c
+       $(CC) /Fo$(OBJ_D)\bss_mem.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bio\bss_mem.c
+
+$(OBJ_D)\bss_null.obj: $(SRC_D)\crypto\bio\bss_null.c
+       $(CC) /Fo$(OBJ_D)\bss_null.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\bio\bss_null.c
+
+$(OBJ_D)\bss_fd.obj: $(SRC_D)\crypto\bio\bss_fd.c
+       $(CC) /Fo$(OBJ_D)\bss_fd.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bio\bss_fd.c
+
+$(OBJ_D)\bss_file.obj: $(SRC_D)\crypto\bio\bss_file.c
+       $(CC) /Fo$(OBJ_D)\bss_file.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\bio\bss_file.c
+
+$(OBJ_D)\bss_sock.obj: $(SRC_D)\crypto\bio\bss_sock.c
+       $(CC) /Fo$(OBJ_D)\bss_sock.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\bio\bss_sock.c
+
+$(OBJ_D)\bss_conn.obj: $(SRC_D)\crypto\bio\bss_conn.c
+       $(CC) /Fo$(OBJ_D)\bss_conn.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\bio\bss_conn.c
+
+$(OBJ_D)\bf_null.obj: $(SRC_D)\crypto\bio\bf_null.c
+       $(CC) /Fo$(OBJ_D)\bf_null.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bio\bf_null.c
+
+$(OBJ_D)\bf_buff.obj: $(SRC_D)\crypto\bio\bf_buff.c
+       $(CC) /Fo$(OBJ_D)\bf_buff.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bio\bf_buff.c
+
+$(OBJ_D)\b_print.obj: $(SRC_D)\crypto\bio\b_print.c
+       $(CC) /Fo$(OBJ_D)\b_print.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bio\b_print.c
+
+$(OBJ_D)\b_dump.obj: $(SRC_D)\crypto\bio\b_dump.c
+       $(CC) /Fo$(OBJ_D)\b_dump.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bio\b_dump.c
+
+$(OBJ_D)\b_sock.obj: $(SRC_D)\crypto\bio\b_sock.c
+       $(CC) /Fo$(OBJ_D)\b_sock.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bio\b_sock.c
+
+$(OBJ_D)\bss_acpt.obj: $(SRC_D)\crypto\bio\bss_acpt.c
+       $(CC) /Fo$(OBJ_D)\bss_acpt.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\bio\bss_acpt.c
+
+$(OBJ_D)\bf_nbio.obj: $(SRC_D)\crypto\bio\bf_nbio.c
+       $(CC) /Fo$(OBJ_D)\bf_nbio.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bio\bf_nbio.c
+
+$(OBJ_D)\bss_log.obj: $(SRC_D)\crypto\bio\bss_log.c
+       $(CC) /Fo$(OBJ_D)\bss_log.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bio\bss_log.c
+
+$(OBJ_D)\bss_bio.obj: $(SRC_D)\crypto\bio\bss_bio.c
+       $(CC) /Fo$(OBJ_D)\bss_bio.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bio\bss_bio.c
+
+$(OBJ_D)\stack.obj: $(SRC_D)\crypto\stack\stack.c
+       $(CC) /Fo$(OBJ_D)\stack.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\stack\stack.c
+
+$(OBJ_D)\lhash.obj: $(SRC_D)\crypto\lhash\lhash.c
+       $(CC) /Fo$(OBJ_D)\lhash.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\lhash\lhash.c
+
+$(OBJ_D)\lh_stats.obj: $(SRC_D)\crypto\lhash\lh_stats.c
+       $(CC) /Fo$(OBJ_D)\lh_stats.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\lhash\lh_stats.c
+
+$(OBJ_D)\md_rand.obj: $(SRC_D)\crypto\rand\md_rand.c
+       $(CC) /Fo$(OBJ_D)\md_rand.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\rand\md_rand.c
+
+$(OBJ_D)\randfile.obj: $(SRC_D)\crypto\rand\randfile.c
+       $(CC) /Fo$(OBJ_D)\randfile.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\rand\randfile.c
+
+$(OBJ_D)\rand_lib.obj: $(SRC_D)\crypto\rand\rand_lib.c
+       $(CC) /Fo$(OBJ_D)\rand_lib.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\rand\rand_lib.c
+
+$(OBJ_D)\rand_err.obj: $(SRC_D)\crypto\rand\rand_err.c
+       $(CC) /Fo$(OBJ_D)\rand_err.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\rand\rand_err.c
+
+$(OBJ_D)\rand_egd.obj: $(SRC_D)\crypto\rand\rand_egd.c
+       $(CC) /Fo$(OBJ_D)\rand_egd.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\rand\rand_egd.c
+
+$(OBJ_D)\err.obj: $(SRC_D)\crypto\err\err.c
+       $(CC) /Fo$(OBJ_D)\err.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\err\err.c
+
+$(OBJ_D)\err_all.obj: $(SRC_D)\crypto\err\err_all.c
+       $(CC) /Fo$(OBJ_D)\err_all.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\err\err_all.c
+
+$(OBJ_D)\err_prn.obj: $(SRC_D)\crypto\err\err_prn.c
+       $(CC) /Fo$(OBJ_D)\err_prn.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\err\err_prn.c
+
+$(OBJ_D)\o_names.obj: $(SRC_D)\crypto\objects\o_names.c
+       $(CC) /Fo$(OBJ_D)\o_names.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\objects\o_names.c
+
+$(OBJ_D)\obj_dat.obj: $(SRC_D)\crypto\objects\obj_dat.c
+       $(CC) /Fo$(OBJ_D)\obj_dat.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\objects\obj_dat.c
+
+$(OBJ_D)\obj_lib.obj: $(SRC_D)\crypto\objects\obj_lib.c
+       $(CC) /Fo$(OBJ_D)\obj_lib.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\objects\obj_lib.c
+
+$(OBJ_D)\obj_err.obj: $(SRC_D)\crypto\objects\obj_err.c
+       $(CC) /Fo$(OBJ_D)\obj_err.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\objects\obj_err.c
+
+$(OBJ_D)\encode.obj: $(SRC_D)\crypto\evp\encode.c
+       $(CC) /Fo$(OBJ_D)\encode.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\encode.c
+
+$(OBJ_D)\digest.obj: $(SRC_D)\crypto\evp\digest.c
+       $(CC) /Fo$(OBJ_D)\digest.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\digest.c
+
+$(OBJ_D)\evp_enc.obj: $(SRC_D)\crypto\evp\evp_enc.c
+       $(CC) /Fo$(OBJ_D)\evp_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\evp_enc.c
+
+$(OBJ_D)\evp_key.obj: $(SRC_D)\crypto\evp\evp_key.c
+       $(CC) /Fo$(OBJ_D)\evp_key.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\evp_key.c
+
+$(OBJ_D)\e_ecb_d.obj: $(SRC_D)\crypto\evp\e_ecb_d.c
+       $(CC) /Fo$(OBJ_D)\e_ecb_d.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_ecb_d.c
+
+$(OBJ_D)\e_cbc_d.obj: $(SRC_D)\crypto\evp\e_cbc_d.c
+       $(CC) /Fo$(OBJ_D)\e_cbc_d.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_cbc_d.c
+
+$(OBJ_D)\e_cfb_d.obj: $(SRC_D)\crypto\evp\e_cfb_d.c
+       $(CC) /Fo$(OBJ_D)\e_cfb_d.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_cfb_d.c
+
+$(OBJ_D)\e_ofb_d.obj: $(SRC_D)\crypto\evp\e_ofb_d.c
+       $(CC) /Fo$(OBJ_D)\e_ofb_d.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_ofb_d.c
+
+$(OBJ_D)\e_ecb_i.obj: $(SRC_D)\crypto\evp\e_ecb_i.c
+       $(CC) /Fo$(OBJ_D)\e_ecb_i.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_ecb_i.c
+
+$(OBJ_D)\e_cbc_i.obj: $(SRC_D)\crypto\evp\e_cbc_i.c
+       $(CC) /Fo$(OBJ_D)\e_cbc_i.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_cbc_i.c
+
+$(OBJ_D)\e_cfb_i.obj: $(SRC_D)\crypto\evp\e_cfb_i.c
+       $(CC) /Fo$(OBJ_D)\e_cfb_i.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_cfb_i.c
+
+$(OBJ_D)\e_ofb_i.obj: $(SRC_D)\crypto\evp\e_ofb_i.c
+       $(CC) /Fo$(OBJ_D)\e_ofb_i.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_ofb_i.c
+
+$(OBJ_D)\e_ecb_3d.obj: $(SRC_D)\crypto\evp\e_ecb_3d.c
+       $(CC) /Fo$(OBJ_D)\e_ecb_3d.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\evp\e_ecb_3d.c
+
+$(OBJ_D)\e_cbc_3d.obj: $(SRC_D)\crypto\evp\e_cbc_3d.c
+       $(CC) /Fo$(OBJ_D)\e_cbc_3d.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\evp\e_cbc_3d.c
+
+$(OBJ_D)\e_rc4.obj: $(SRC_D)\crypto\evp\e_rc4.c
+       $(CC) /Fo$(OBJ_D)\e_rc4.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_rc4.c
+
+$(OBJ_D)\names.obj: $(SRC_D)\crypto\evp\names.c
+       $(CC) /Fo$(OBJ_D)\names.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\names.c
+
+$(OBJ_D)\e_cfb_3d.obj: $(SRC_D)\crypto\evp\e_cfb_3d.c
+       $(CC) /Fo$(OBJ_D)\e_cfb_3d.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\evp\e_cfb_3d.c
+
+$(OBJ_D)\e_ofb_3d.obj: $(SRC_D)\crypto\evp\e_ofb_3d.c
+       $(CC) /Fo$(OBJ_D)\e_ofb_3d.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\evp\e_ofb_3d.c
+
+$(OBJ_D)\e_xcbc_d.obj: $(SRC_D)\crypto\evp\e_xcbc_d.c
+       $(CC) /Fo$(OBJ_D)\e_xcbc_d.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\evp\e_xcbc_d.c
+
+$(OBJ_D)\e_ecb_r2.obj: $(SRC_D)\crypto\evp\e_ecb_r2.c
+       $(CC) /Fo$(OBJ_D)\e_ecb_r2.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\evp\e_ecb_r2.c
+
+$(OBJ_D)\e_cbc_r2.obj: $(SRC_D)\crypto\evp\e_cbc_r2.c
+       $(CC) /Fo$(OBJ_D)\e_cbc_r2.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\evp\e_cbc_r2.c
+
+$(OBJ_D)\e_cfb_r2.obj: $(SRC_D)\crypto\evp\e_cfb_r2.c
+       $(CC) /Fo$(OBJ_D)\e_cfb_r2.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\evp\e_cfb_r2.c
+
+$(OBJ_D)\e_ofb_r2.obj: $(SRC_D)\crypto\evp\e_ofb_r2.c
+       $(CC) /Fo$(OBJ_D)\e_ofb_r2.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\evp\e_ofb_r2.c
+
+$(OBJ_D)\e_ecb_bf.obj: $(SRC_D)\crypto\evp\e_ecb_bf.c
+       $(CC) /Fo$(OBJ_D)\e_ecb_bf.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\evp\e_ecb_bf.c
+
+$(OBJ_D)\e_cbc_bf.obj: $(SRC_D)\crypto\evp\e_cbc_bf.c
+       $(CC) /Fo$(OBJ_D)\e_cbc_bf.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\evp\e_cbc_bf.c
+
+$(OBJ_D)\e_cfb_bf.obj: $(SRC_D)\crypto\evp\e_cfb_bf.c
+       $(CC) /Fo$(OBJ_D)\e_cfb_bf.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\evp\e_cfb_bf.c
+
+$(OBJ_D)\e_ofb_bf.obj: $(SRC_D)\crypto\evp\e_ofb_bf.c
+       $(CC) /Fo$(OBJ_D)\e_ofb_bf.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\evp\e_ofb_bf.c
+
+$(OBJ_D)\e_ecb_c.obj: $(SRC_D)\crypto\evp\e_ecb_c.c
+       $(CC) /Fo$(OBJ_D)\e_ecb_c.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_ecb_c.c
+
+$(OBJ_D)\e_cbc_c.obj: $(SRC_D)\crypto\evp\e_cbc_c.c
+       $(CC) /Fo$(OBJ_D)\e_cbc_c.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_cbc_c.c
+
+$(OBJ_D)\e_cfb_c.obj: $(SRC_D)\crypto\evp\e_cfb_c.c
+       $(CC) /Fo$(OBJ_D)\e_cfb_c.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_cfb_c.c
+
+$(OBJ_D)\e_ofb_c.obj: $(SRC_D)\crypto\evp\e_ofb_c.c
+       $(CC) /Fo$(OBJ_D)\e_ofb_c.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_ofb_c.c
+
+$(OBJ_D)\e_ecb_r5.obj: $(SRC_D)\crypto\evp\e_ecb_r5.c
+       $(CC) /Fo$(OBJ_D)\e_ecb_r5.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\evp\e_ecb_r5.c
+
+$(OBJ_D)\e_cbc_r5.obj: $(SRC_D)\crypto\evp\e_cbc_r5.c
+       $(CC) /Fo$(OBJ_D)\e_cbc_r5.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\evp\e_cbc_r5.c
+
+$(OBJ_D)\e_cfb_r5.obj: $(SRC_D)\crypto\evp\e_cfb_r5.c
+       $(CC) /Fo$(OBJ_D)\e_cfb_r5.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\evp\e_cfb_r5.c
+
+$(OBJ_D)\e_ofb_r5.obj: $(SRC_D)\crypto\evp\e_ofb_r5.c
+       $(CC) /Fo$(OBJ_D)\e_ofb_r5.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\evp\e_ofb_r5.c
+
+$(OBJ_D)\m_null.obj: $(SRC_D)\crypto\evp\m_null.c
+       $(CC) /Fo$(OBJ_D)\m_null.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\m_null.c
+
+$(OBJ_D)\m_md2.obj: $(SRC_D)\crypto\evp\m_md2.c
+       $(CC) /Fo$(OBJ_D)\m_md2.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\m_md2.c
+
+$(OBJ_D)\m_md5.obj: $(SRC_D)\crypto\evp\m_md5.c
+       $(CC) /Fo$(OBJ_D)\m_md5.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\m_md5.c
+
+$(OBJ_D)\m_sha.obj: $(SRC_D)\crypto\evp\m_sha.c
+       $(CC) /Fo$(OBJ_D)\m_sha.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\m_sha.c
+
+$(OBJ_D)\m_sha1.obj: $(SRC_D)\crypto\evp\m_sha1.c
+       $(CC) /Fo$(OBJ_D)\m_sha1.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\m_sha1.c
+
+$(OBJ_D)\m_dss.obj: $(SRC_D)\crypto\evp\m_dss.c
+       $(CC) /Fo$(OBJ_D)\m_dss.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\m_dss.c
+
+$(OBJ_D)\m_dss1.obj: $(SRC_D)\crypto\evp\m_dss1.c
+       $(CC) /Fo$(OBJ_D)\m_dss1.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\m_dss1.c
+
+$(OBJ_D)\m_mdc2.obj: $(SRC_D)\crypto\evp\m_mdc2.c
+       $(CC) /Fo$(OBJ_D)\m_mdc2.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\m_mdc2.c
+
+$(OBJ_D)\m_ripemd.obj: $(SRC_D)\crypto\evp\m_ripemd.c
+       $(CC) /Fo$(OBJ_D)\m_ripemd.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\evp\m_ripemd.c
+
+$(OBJ_D)\p_open.obj: $(SRC_D)\crypto\evp\p_open.c
+       $(CC) /Fo$(OBJ_D)\p_open.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\p_open.c
+
+$(OBJ_D)\p_seal.obj: $(SRC_D)\crypto\evp\p_seal.c
+       $(CC) /Fo$(OBJ_D)\p_seal.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\p_seal.c
+
+$(OBJ_D)\p_sign.obj: $(SRC_D)\crypto\evp\p_sign.c
+       $(CC) /Fo$(OBJ_D)\p_sign.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\p_sign.c
+
+$(OBJ_D)\p_verify.obj: $(SRC_D)\crypto\evp\p_verify.c
+       $(CC) /Fo$(OBJ_D)\p_verify.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\evp\p_verify.c
+
+$(OBJ_D)\p_lib.obj: $(SRC_D)\crypto\evp\p_lib.c
+       $(CC) /Fo$(OBJ_D)\p_lib.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\p_lib.c
+
+$(OBJ_D)\p_enc.obj: $(SRC_D)\crypto\evp\p_enc.c
+       $(CC) /Fo$(OBJ_D)\p_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\p_enc.c
+
+$(OBJ_D)\p_dec.obj: $(SRC_D)\crypto\evp\p_dec.c
+       $(CC) /Fo$(OBJ_D)\p_dec.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\p_dec.c
+
+$(OBJ_D)\bio_md.obj: $(SRC_D)\crypto\evp\bio_md.c
+       $(CC) /Fo$(OBJ_D)\bio_md.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\bio_md.c
+
+$(OBJ_D)\bio_b64.obj: $(SRC_D)\crypto\evp\bio_b64.c
+       $(CC) /Fo$(OBJ_D)\bio_b64.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\bio_b64.c
+
+$(OBJ_D)\bio_enc.obj: $(SRC_D)\crypto\evp\bio_enc.c
+       $(CC) /Fo$(OBJ_D)\bio_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\bio_enc.c
+
+$(OBJ_D)\evp_err.obj: $(SRC_D)\crypto\evp\evp_err.c
+       $(CC) /Fo$(OBJ_D)\evp_err.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\evp_err.c
+
+$(OBJ_D)\e_null.obj: $(SRC_D)\crypto\evp\e_null.c
+       $(CC) /Fo$(OBJ_D)\e_null.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_null.c
+
+$(OBJ_D)\c_all.obj: $(SRC_D)\crypto\evp\c_all.c
+       $(CC) /Fo$(OBJ_D)\c_all.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\c_all.c
+
+$(OBJ_D)\c_allc.obj: $(SRC_D)\crypto\evp\c_allc.c
+       $(CC) /Fo$(OBJ_D)\c_allc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\c_allc.c
+
+$(OBJ_D)\c_alld.obj: $(SRC_D)\crypto\evp\c_alld.c
+       $(CC) /Fo$(OBJ_D)\c_alld.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\c_alld.c
+
+$(OBJ_D)\evp_lib.obj: $(SRC_D)\crypto\evp\evp_lib.c
+       $(CC) /Fo$(OBJ_D)\evp_lib.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\evp_lib.c
+
+$(OBJ_D)\bio_ok.obj: $(SRC_D)\crypto\evp\bio_ok.c
+       $(CC) /Fo$(OBJ_D)\bio_ok.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\bio_ok.c
+
+$(OBJ_D)\evp_pkey.obj: $(SRC_D)\crypto\evp\evp_pkey.c
+       $(CC) /Fo$(OBJ_D)\evp_pkey.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\evp\evp_pkey.c
+
+$(OBJ_D)\evp_pbe.obj: $(SRC_D)\crypto\evp\evp_pbe.c
+       $(CC) /Fo$(OBJ_D)\evp_pbe.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\evp_pbe.c
+
+$(OBJ_D)\p5_crpt.obj: $(SRC_D)\crypto\evp\p5_crpt.c
+       $(CC) /Fo$(OBJ_D)\p5_crpt.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\p5_crpt.c
+
+$(OBJ_D)\p5_crpt2.obj: $(SRC_D)\crypto\evp\p5_crpt2.c
+       $(CC) /Fo$(OBJ_D)\p5_crpt2.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\evp\p5_crpt2.c
+
+$(OBJ_D)\a_object.obj: $(SRC_D)\crypto\asn1\a_object.c
+       $(CC) /Fo$(OBJ_D)\a_object.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\a_object.c
+
+$(OBJ_D)\a_bitstr.obj: $(SRC_D)\crypto\asn1\a_bitstr.c
+       $(CC) /Fo$(OBJ_D)\a_bitstr.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\a_bitstr.c
+
+$(OBJ_D)\a_utctm.obj: $(SRC_D)\crypto\asn1\a_utctm.c
+       $(CC) /Fo$(OBJ_D)\a_utctm.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\a_utctm.c
+
+$(OBJ_D)\a_gentm.obj: $(SRC_D)\crypto\asn1\a_gentm.c
+       $(CC) /Fo$(OBJ_D)\a_gentm.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\a_gentm.c
+
+$(OBJ_D)\a_time.obj: $(SRC_D)\crypto\asn1\a_time.c
+       $(CC) /Fo$(OBJ_D)\a_time.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_time.c
+
+$(OBJ_D)\a_int.obj: $(SRC_D)\crypto\asn1\a_int.c
+       $(CC) /Fo$(OBJ_D)\a_int.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_int.c
+
+$(OBJ_D)\a_octet.obj: $(SRC_D)\crypto\asn1\a_octet.c
+       $(CC) /Fo$(OBJ_D)\a_octet.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\a_octet.c
+
+$(OBJ_D)\a_null.obj: $(SRC_D)\crypto\asn1\a_null.c
+       $(CC) /Fo$(OBJ_D)\a_null.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_null.c
+
+$(OBJ_D)\a_print.obj: $(SRC_D)\crypto\asn1\a_print.c
+       $(CC) /Fo$(OBJ_D)\a_print.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\a_print.c
+
+$(OBJ_D)\a_type.obj: $(SRC_D)\crypto\asn1\a_type.c
+       $(CC) /Fo$(OBJ_D)\a_type.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_type.c
+
+$(OBJ_D)\a_set.obj: $(SRC_D)\crypto\asn1\a_set.c
+       $(CC) /Fo$(OBJ_D)\a_set.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_set.c
+
+$(OBJ_D)\a_dup.obj: $(SRC_D)\crypto\asn1\a_dup.c
+       $(CC) /Fo$(OBJ_D)\a_dup.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_dup.c
+
+$(OBJ_D)\a_d2i_fp.obj: $(SRC_D)\crypto\asn1\a_d2i_fp.c
+       $(CC) /Fo$(OBJ_D)\a_d2i_fp.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\a_d2i_fp.c
+
+$(OBJ_D)\a_i2d_fp.obj: $(SRC_D)\crypto\asn1\a_i2d_fp.c
+       $(CC) /Fo$(OBJ_D)\a_i2d_fp.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\a_i2d_fp.c
+
+$(OBJ_D)\a_bmp.obj: $(SRC_D)\crypto\asn1\a_bmp.c
+       $(CC) /Fo$(OBJ_D)\a_bmp.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_bmp.c
+
+$(OBJ_D)\a_enum.obj: $(SRC_D)\crypto\asn1\a_enum.c
+       $(CC) /Fo$(OBJ_D)\a_enum.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_enum.c
+
+$(OBJ_D)\a_vis.obj: $(SRC_D)\crypto\asn1\a_vis.c
+       $(CC) /Fo$(OBJ_D)\a_vis.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_vis.c
+
+$(OBJ_D)\a_utf8.obj: $(SRC_D)\crypto\asn1\a_utf8.c
+       $(CC) /Fo$(OBJ_D)\a_utf8.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_utf8.c
+
+$(OBJ_D)\a_sign.obj: $(SRC_D)\crypto\asn1\a_sign.c
+       $(CC) /Fo$(OBJ_D)\a_sign.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_sign.c
+
+$(OBJ_D)\a_digest.obj: $(SRC_D)\crypto\asn1\a_digest.c
+       $(CC) /Fo$(OBJ_D)\a_digest.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\a_digest.c
+
+$(OBJ_D)\a_verify.obj: $(SRC_D)\crypto\asn1\a_verify.c
+       $(CC) /Fo$(OBJ_D)\a_verify.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\a_verify.c
+
+$(OBJ_D)\a_mbstr.obj: $(SRC_D)\crypto\asn1\a_mbstr.c
+       $(CC) /Fo$(OBJ_D)\a_mbstr.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\a_mbstr.c
+
+$(OBJ_D)\x_algor.obj: $(SRC_D)\crypto\asn1\x_algor.c
+       $(CC) /Fo$(OBJ_D)\x_algor.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\x_algor.c
+
+$(OBJ_D)\x_val.obj: $(SRC_D)\crypto\asn1\x_val.c
+       $(CC) /Fo$(OBJ_D)\x_val.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_val.c
+
+$(OBJ_D)\x_pubkey.obj: $(SRC_D)\crypto\asn1\x_pubkey.c
+       $(CC) /Fo$(OBJ_D)\x_pubkey.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\x_pubkey.c
+
+$(OBJ_D)\x_sig.obj: $(SRC_D)\crypto\asn1\x_sig.c
+       $(CC) /Fo$(OBJ_D)\x_sig.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_sig.c
+
+$(OBJ_D)\x_req.obj: $(SRC_D)\crypto\asn1\x_req.c
+       $(CC) /Fo$(OBJ_D)\x_req.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_req.c
+
+$(OBJ_D)\x_attrib.obj: $(SRC_D)\crypto\asn1\x_attrib.c
+       $(CC) /Fo$(OBJ_D)\x_attrib.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\x_attrib.c
+
+$(OBJ_D)\x_name.obj: $(SRC_D)\crypto\asn1\x_name.c
+       $(CC) /Fo$(OBJ_D)\x_name.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_name.c
+
+$(OBJ_D)\x_cinf.obj: $(SRC_D)\crypto\asn1\x_cinf.c
+       $(CC) /Fo$(OBJ_D)\x_cinf.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_cinf.c
+
+$(OBJ_D)\x_x509.obj: $(SRC_D)\crypto\asn1\x_x509.c
+       $(CC) /Fo$(OBJ_D)\x_x509.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_x509.c
+
+$(OBJ_D)\x_x509a.obj: $(SRC_D)\crypto\asn1\x_x509a.c
+       $(CC) /Fo$(OBJ_D)\x_x509a.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\x_x509a.c
+
+$(OBJ_D)\x_crl.obj: $(SRC_D)\crypto\asn1\x_crl.c
+       $(CC) /Fo$(OBJ_D)\x_crl.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_crl.c
+
+$(OBJ_D)\x_info.obj: $(SRC_D)\crypto\asn1\x_info.c
+       $(CC) /Fo$(OBJ_D)\x_info.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_info.c
+
+$(OBJ_D)\x_spki.obj: $(SRC_D)\crypto\asn1\x_spki.c
+       $(CC) /Fo$(OBJ_D)\x_spki.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_spki.c
+
+$(OBJ_D)\nsseq.obj: $(SRC_D)\crypto\asn1\nsseq.c
+       $(CC) /Fo$(OBJ_D)\nsseq.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\nsseq.c
+
+$(OBJ_D)\d2i_r_pr.obj: $(SRC_D)\crypto\asn1\d2i_r_pr.c
+       $(CC) /Fo$(OBJ_D)\d2i_r_pr.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\d2i_r_pr.c
+
+$(OBJ_D)\i2d_r_pr.obj: $(SRC_D)\crypto\asn1\i2d_r_pr.c
+       $(CC) /Fo$(OBJ_D)\i2d_r_pr.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\i2d_r_pr.c
+
+$(OBJ_D)\d2i_r_pu.obj: $(SRC_D)\crypto\asn1\d2i_r_pu.c
+       $(CC) /Fo$(OBJ_D)\d2i_r_pu.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\d2i_r_pu.c
+
+$(OBJ_D)\i2d_r_pu.obj: $(SRC_D)\crypto\asn1\i2d_r_pu.c
+       $(CC) /Fo$(OBJ_D)\i2d_r_pu.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\i2d_r_pu.c
+
+$(OBJ_D)\d2i_s_pr.obj: $(SRC_D)\crypto\asn1\d2i_s_pr.c
+       $(CC) /Fo$(OBJ_D)\d2i_s_pr.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\d2i_s_pr.c
+
+$(OBJ_D)\i2d_s_pr.obj: $(SRC_D)\crypto\asn1\i2d_s_pr.c
+       $(CC) /Fo$(OBJ_D)\i2d_s_pr.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\i2d_s_pr.c
+
+$(OBJ_D)\d2i_s_pu.obj: $(SRC_D)\crypto\asn1\d2i_s_pu.c
+       $(CC) /Fo$(OBJ_D)\d2i_s_pu.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\d2i_s_pu.c
+
+$(OBJ_D)\i2d_s_pu.obj: $(SRC_D)\crypto\asn1\i2d_s_pu.c
+       $(CC) /Fo$(OBJ_D)\i2d_s_pu.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\i2d_s_pu.c
+
+$(OBJ_D)\d2i_pu.obj: $(SRC_D)\crypto\asn1\d2i_pu.c
+       $(CC) /Fo$(OBJ_D)\d2i_pu.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\d2i_pu.c
+
+$(OBJ_D)\d2i_pr.obj: $(SRC_D)\crypto\asn1\d2i_pr.c
+       $(CC) /Fo$(OBJ_D)\d2i_pr.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\d2i_pr.c
+
+$(OBJ_D)\i2d_pu.obj: $(SRC_D)\crypto\asn1\i2d_pu.c
+       $(CC) /Fo$(OBJ_D)\i2d_pu.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\i2d_pu.c
+
+$(OBJ_D)\i2d_pr.obj: $(SRC_D)\crypto\asn1\i2d_pr.c
+       $(CC) /Fo$(OBJ_D)\i2d_pr.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\i2d_pr.c
+
+$(OBJ_D)\t_req.obj: $(SRC_D)\crypto\asn1\t_req.c
+       $(CC) /Fo$(OBJ_D)\t_req.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\t_req.c
+
+$(OBJ_D)\t_x509.obj: $(SRC_D)\crypto\asn1\t_x509.c
+       $(CC) /Fo$(OBJ_D)\t_x509.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\t_x509.c
+
+$(OBJ_D)\t_x509a.obj: $(SRC_D)\crypto\asn1\t_x509a.c
+       $(CC) /Fo$(OBJ_D)\t_x509a.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\t_x509a.c
+
+$(OBJ_D)\t_crl.obj: $(SRC_D)\crypto\asn1\t_crl.c
+       $(CC) /Fo$(OBJ_D)\t_crl.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\t_crl.c
+
+$(OBJ_D)\t_pkey.obj: $(SRC_D)\crypto\asn1\t_pkey.c
+       $(CC) /Fo$(OBJ_D)\t_pkey.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\t_pkey.c
+
+$(OBJ_D)\t_spki.obj: $(SRC_D)\crypto\asn1\t_spki.c
+       $(CC) /Fo$(OBJ_D)\t_spki.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\t_spki.c
+
+$(OBJ_D)\t_bitst.obj: $(SRC_D)\crypto\asn1\t_bitst.c
+       $(CC) /Fo$(OBJ_D)\t_bitst.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\t_bitst.c
+
+$(OBJ_D)\p7_i_s.obj: $(SRC_D)\crypto\asn1\p7_i_s.c
+       $(CC) /Fo$(OBJ_D)\p7_i_s.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\p7_i_s.c
+
+$(OBJ_D)\p7_signi.obj: $(SRC_D)\crypto\asn1\p7_signi.c
+       $(CC) /Fo$(OBJ_D)\p7_signi.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\p7_signi.c
+
+$(OBJ_D)\p7_signd.obj: $(SRC_D)\crypto\asn1\p7_signd.c
+       $(CC) /Fo$(OBJ_D)\p7_signd.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\p7_signd.c
+
+$(OBJ_D)\p7_recip.obj: $(SRC_D)\crypto\asn1\p7_recip.c
+       $(CC) /Fo$(OBJ_D)\p7_recip.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\p7_recip.c
+
+$(OBJ_D)\p7_enc_c.obj: $(SRC_D)\crypto\asn1\p7_enc_c.c
+       $(CC) /Fo$(OBJ_D)\p7_enc_c.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\p7_enc_c.c
+
+$(OBJ_D)\p7_evp.obj: $(SRC_D)\crypto\asn1\p7_evp.c
+       $(CC) /Fo$(OBJ_D)\p7_evp.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\p7_evp.c
+
+$(OBJ_D)\p7_dgst.obj: $(SRC_D)\crypto\asn1\p7_dgst.c
+       $(CC) /Fo$(OBJ_D)\p7_dgst.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\p7_dgst.c
+
+$(OBJ_D)\p7_s_e.obj: $(SRC_D)\crypto\asn1\p7_s_e.c
+       $(CC) /Fo$(OBJ_D)\p7_s_e.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\p7_s_e.c
+
+$(OBJ_D)\p7_enc.obj: $(SRC_D)\crypto\asn1\p7_enc.c
+       $(CC) /Fo$(OBJ_D)\p7_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\p7_enc.c
+
+$(OBJ_D)\p7_lib.obj: $(SRC_D)\crypto\asn1\p7_lib.c
+       $(CC) /Fo$(OBJ_D)\p7_lib.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\p7_lib.c
+
+$(OBJ_D)\f_int.obj: $(SRC_D)\crypto\asn1\f_int.c
+       $(CC) /Fo$(OBJ_D)\f_int.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\f_int.c
+
+$(OBJ_D)\f_string.obj: $(SRC_D)\crypto\asn1\f_string.c
+       $(CC) /Fo$(OBJ_D)\f_string.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\f_string.c
+
+$(OBJ_D)\i2d_dhp.obj: $(SRC_D)\crypto\asn1\i2d_dhp.c
+       $(CC) /Fo$(OBJ_D)\i2d_dhp.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\i2d_dhp.c
+
+$(OBJ_D)\i2d_dsap.obj: $(SRC_D)\crypto\asn1\i2d_dsap.c
+       $(CC) /Fo$(OBJ_D)\i2d_dsap.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\i2d_dsap.c
+
+$(OBJ_D)\d2i_dhp.obj: $(SRC_D)\crypto\asn1\d2i_dhp.c
+       $(CC) /Fo$(OBJ_D)\d2i_dhp.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\d2i_dhp.c
+
+$(OBJ_D)\d2i_dsap.obj: $(SRC_D)\crypto\asn1\d2i_dsap.c
+       $(CC) /Fo$(OBJ_D)\d2i_dsap.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\d2i_dsap.c
+
+$(OBJ_D)\n_pkey.obj: $(SRC_D)\crypto\asn1\n_pkey.c
+       $(CC) /Fo$(OBJ_D)\n_pkey.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\n_pkey.c
+
+$(OBJ_D)\f_enum.obj: $(SRC_D)\crypto\asn1\f_enum.c
+       $(CC) /Fo$(OBJ_D)\f_enum.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\f_enum.c
+
+$(OBJ_D)\a_hdr.obj: $(SRC_D)\crypto\asn1\a_hdr.c
+       $(CC) /Fo$(OBJ_D)\a_hdr.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_hdr.c
+
+$(OBJ_D)\x_pkey.obj: $(SRC_D)\crypto\asn1\x_pkey.c
+       $(CC) /Fo$(OBJ_D)\x_pkey.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_pkey.c
+
+$(OBJ_D)\a_bool.obj: $(SRC_D)\crypto\asn1\a_bool.c
+       $(CC) /Fo$(OBJ_D)\a_bool.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_bool.c
+
+$(OBJ_D)\x_exten.obj: $(SRC_D)\crypto\asn1\x_exten.c
+       $(CC) /Fo$(OBJ_D)\x_exten.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\x_exten.c
+
+$(OBJ_D)\asn1_par.obj: $(SRC_D)\crypto\asn1\asn1_par.c
+       $(CC) /Fo$(OBJ_D)\asn1_par.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\asn1_par.c
+
+$(OBJ_D)\asn1_lib.obj: $(SRC_D)\crypto\asn1\asn1_lib.c
+       $(CC) /Fo$(OBJ_D)\asn1_lib.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\asn1_lib.c
+
+$(OBJ_D)\asn1_err.obj: $(SRC_D)\crypto\asn1\asn1_err.c
+       $(CC) /Fo$(OBJ_D)\asn1_err.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\asn1_err.c
+
+$(OBJ_D)\a_meth.obj: $(SRC_D)\crypto\asn1\a_meth.c
+       $(CC) /Fo$(OBJ_D)\a_meth.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_meth.c
+
+$(OBJ_D)\a_bytes.obj: $(SRC_D)\crypto\asn1\a_bytes.c
+       $(CC) /Fo$(OBJ_D)\a_bytes.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\a_bytes.c
+
+$(OBJ_D)\a_strnid.obj: $(SRC_D)\crypto\asn1\a_strnid.c
+       $(CC) /Fo$(OBJ_D)\a_strnid.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\a_strnid.c
+
+$(OBJ_D)\evp_asn1.obj: $(SRC_D)\crypto\asn1\evp_asn1.c
+       $(CC) /Fo$(OBJ_D)\evp_asn1.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\evp_asn1.c
+
+$(OBJ_D)\asn_pack.obj: $(SRC_D)\crypto\asn1\asn_pack.c
+       $(CC) /Fo$(OBJ_D)\asn_pack.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\asn_pack.c
+
+$(OBJ_D)\p5_pbe.obj: $(SRC_D)\crypto\asn1\p5_pbe.c
+       $(CC) /Fo$(OBJ_D)\p5_pbe.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\p5_pbe.c
+
+$(OBJ_D)\p5_pbev2.obj: $(SRC_D)\crypto\asn1\p5_pbev2.c
+       $(CC) /Fo$(OBJ_D)\p5_pbev2.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\p5_pbev2.c
+
+$(OBJ_D)\p8_pkey.obj: $(SRC_D)\crypto\asn1\p8_pkey.c
+       $(CC) /Fo$(OBJ_D)\p8_pkey.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\p8_pkey.c
+
+$(OBJ_D)\pem_sign.obj: $(SRC_D)\crypto\pem\pem_sign.c
+       $(CC) /Fo$(OBJ_D)\pem_sign.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\pem\pem_sign.c
+
+$(OBJ_D)\pem_seal.obj: $(SRC_D)\crypto\pem\pem_seal.c
+       $(CC) /Fo$(OBJ_D)\pem_seal.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\pem\pem_seal.c
+
+$(OBJ_D)\pem_info.obj: $(SRC_D)\crypto\pem\pem_info.c
+       $(CC) /Fo$(OBJ_D)\pem_info.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\pem\pem_info.c
+
+$(OBJ_D)\pem_lib.obj: $(SRC_D)\crypto\pem\pem_lib.c
+       $(CC) /Fo$(OBJ_D)\pem_lib.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\pem\pem_lib.c
+
+$(OBJ_D)\pem_all.obj: $(SRC_D)\crypto\pem\pem_all.c
+       $(CC) /Fo$(OBJ_D)\pem_all.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\pem\pem_all.c
+
+$(OBJ_D)\pem_err.obj: $(SRC_D)\crypto\pem\pem_err.c
+       $(CC) /Fo$(OBJ_D)\pem_err.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\pem\pem_err.c
+
+$(OBJ_D)\x509_def.obj: $(SRC_D)\crypto\x509\x509_def.c
+       $(CC) /Fo$(OBJ_D)\x509_def.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509\x509_def.c
+
+$(OBJ_D)\x509_d2.obj: $(SRC_D)\crypto\x509\x509_d2.c
+       $(CC) /Fo$(OBJ_D)\x509_d2.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509\x509_d2.c
+
+$(OBJ_D)\x509_r2x.obj: $(SRC_D)\crypto\x509\x509_r2x.c
+       $(CC) /Fo$(OBJ_D)\x509_r2x.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509\x509_r2x.c
+
+$(OBJ_D)\x509_cmp.obj: $(SRC_D)\crypto\x509\x509_cmp.c
+       $(CC) /Fo$(OBJ_D)\x509_cmp.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509\x509_cmp.c
+
+$(OBJ_D)\x509_obj.obj: $(SRC_D)\crypto\x509\x509_obj.c
+       $(CC) /Fo$(OBJ_D)\x509_obj.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509\x509_obj.c
+
+$(OBJ_D)\x509_req.obj: $(SRC_D)\crypto\x509\x509_req.c
+       $(CC) /Fo$(OBJ_D)\x509_req.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509\x509_req.c
+
+$(OBJ_D)\x509spki.obj: $(SRC_D)\crypto\x509\x509spki.c
+       $(CC) /Fo$(OBJ_D)\x509spki.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509\x509spki.c
+
+$(OBJ_D)\x509_vfy.obj: $(SRC_D)\crypto\x509\x509_vfy.c
+       $(CC) /Fo$(OBJ_D)\x509_vfy.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509\x509_vfy.c
+
+$(OBJ_D)\x509_set.obj: $(SRC_D)\crypto\x509\x509_set.c
+       $(CC) /Fo$(OBJ_D)\x509_set.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509\x509_set.c
+
+$(OBJ_D)\x509rset.obj: $(SRC_D)\crypto\x509\x509rset.c
+       $(CC) /Fo$(OBJ_D)\x509rset.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509\x509rset.c
+
+$(OBJ_D)\x509_err.obj: $(SRC_D)\crypto\x509\x509_err.c
+       $(CC) /Fo$(OBJ_D)\x509_err.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509\x509_err.c
+
+$(OBJ_D)\x509name.obj: $(SRC_D)\crypto\x509\x509name.c
+       $(CC) /Fo$(OBJ_D)\x509name.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509\x509name.c
+
+$(OBJ_D)\x509_v3.obj: $(SRC_D)\crypto\x509\x509_v3.c
+       $(CC) /Fo$(OBJ_D)\x509_v3.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509\x509_v3.c
+
+$(OBJ_D)\x509_ext.obj: $(SRC_D)\crypto\x509\x509_ext.c
+       $(CC) /Fo$(OBJ_D)\x509_ext.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509\x509_ext.c
+
+$(OBJ_D)\x509_att.obj: $(SRC_D)\crypto\x509\x509_att.c
+       $(CC) /Fo$(OBJ_D)\x509_att.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509\x509_att.c
+
+$(OBJ_D)\x509type.obj: $(SRC_D)\crypto\x509\x509type.c
+       $(CC) /Fo$(OBJ_D)\x509type.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509\x509type.c
+
+$(OBJ_D)\x509_lu.obj: $(SRC_D)\crypto\x509\x509_lu.c
+       $(CC) /Fo$(OBJ_D)\x509_lu.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509\x509_lu.c
+
+$(OBJ_D)\x_all.obj: $(SRC_D)\crypto\x509\x_all.c
+       $(CC) /Fo$(OBJ_D)\x_all.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\x509\x_all.c
+
+$(OBJ_D)\x509_txt.obj: $(SRC_D)\crypto\x509\x509_txt.c
+       $(CC) /Fo$(OBJ_D)\x509_txt.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509\x509_txt.c
+
+$(OBJ_D)\x509_trs.obj: $(SRC_D)\crypto\x509\x509_trs.c
+       $(CC) /Fo$(OBJ_D)\x509_trs.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509\x509_trs.c
+
+$(OBJ_D)\by_file.obj: $(SRC_D)\crypto\x509\by_file.c
+       $(CC) /Fo$(OBJ_D)\by_file.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509\by_file.c
+
+$(OBJ_D)\by_dir.obj: $(SRC_D)\crypto\x509\by_dir.c
+       $(CC) /Fo$(OBJ_D)\by_dir.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\x509\by_dir.c
+
+$(OBJ_D)\v3_bcons.obj: $(SRC_D)\crypto\x509v3\v3_bcons.c
+       $(CC) /Fo$(OBJ_D)\v3_bcons.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509v3\v3_bcons.c
+
+$(OBJ_D)\v3_bitst.obj: $(SRC_D)\crypto\x509v3\v3_bitst.c
+       $(CC) /Fo$(OBJ_D)\v3_bitst.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509v3\v3_bitst.c
+
+$(OBJ_D)\v3_conf.obj: $(SRC_D)\crypto\x509v3\v3_conf.c
+       $(CC) /Fo$(OBJ_D)\v3_conf.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509v3\v3_conf.c
+
+$(OBJ_D)\v3_extku.obj: $(SRC_D)\crypto\x509v3\v3_extku.c
+       $(CC) /Fo$(OBJ_D)\v3_extku.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509v3\v3_extku.c
+
+$(OBJ_D)\v3_ia5.obj: $(SRC_D)\crypto\x509v3\v3_ia5.c
+       $(CC) /Fo$(OBJ_D)\v3_ia5.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509v3\v3_ia5.c
+
+$(OBJ_D)\v3_lib.obj: $(SRC_D)\crypto\x509v3\v3_lib.c
+       $(CC) /Fo$(OBJ_D)\v3_lib.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509v3\v3_lib.c
+
+$(OBJ_D)\v3_prn.obj: $(SRC_D)\crypto\x509v3\v3_prn.c
+       $(CC) /Fo$(OBJ_D)\v3_prn.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509v3\v3_prn.c
+
+$(OBJ_D)\v3_utl.obj: $(SRC_D)\crypto\x509v3\v3_utl.c
+       $(CC) /Fo$(OBJ_D)\v3_utl.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509v3\v3_utl.c
+
+$(OBJ_D)\v3err.obj: $(SRC_D)\crypto\x509v3\v3err.c
+       $(CC) /Fo$(OBJ_D)\v3err.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\x509v3\v3err.c
+
+$(OBJ_D)\v3_genn.obj: $(SRC_D)\crypto\x509v3\v3_genn.c
+       $(CC) /Fo$(OBJ_D)\v3_genn.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509v3\v3_genn.c
+
+$(OBJ_D)\v3_alt.obj: $(SRC_D)\crypto\x509v3\v3_alt.c
+       $(CC) /Fo$(OBJ_D)\v3_alt.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509v3\v3_alt.c
+
+$(OBJ_D)\v3_skey.obj: $(SRC_D)\crypto\x509v3\v3_skey.c
+       $(CC) /Fo$(OBJ_D)\v3_skey.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509v3\v3_skey.c
+
+$(OBJ_D)\v3_akey.obj: $(SRC_D)\crypto\x509v3\v3_akey.c
+       $(CC) /Fo$(OBJ_D)\v3_akey.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509v3\v3_akey.c
+
+$(OBJ_D)\v3_pku.obj: $(SRC_D)\crypto\x509v3\v3_pku.c
+       $(CC) /Fo$(OBJ_D)\v3_pku.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509v3\v3_pku.c
+
+$(OBJ_D)\v3_int.obj: $(SRC_D)\crypto\x509v3\v3_int.c
+       $(CC) /Fo$(OBJ_D)\v3_int.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509v3\v3_int.c
+
+$(OBJ_D)\v3_enum.obj: $(SRC_D)\crypto\x509v3\v3_enum.c
+       $(CC) /Fo$(OBJ_D)\v3_enum.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509v3\v3_enum.c
+
+$(OBJ_D)\v3_sxnet.obj: $(SRC_D)\crypto\x509v3\v3_sxnet.c
+       $(CC) /Fo$(OBJ_D)\v3_sxnet.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509v3\v3_sxnet.c
+
+$(OBJ_D)\v3_cpols.obj: $(SRC_D)\crypto\x509v3\v3_cpols.c
+       $(CC) /Fo$(OBJ_D)\v3_cpols.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509v3\v3_cpols.c
+
+$(OBJ_D)\v3_crld.obj: $(SRC_D)\crypto\x509v3\v3_crld.c
+       $(CC) /Fo$(OBJ_D)\v3_crld.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509v3\v3_crld.c
+
+$(OBJ_D)\v3_purp.obj: $(SRC_D)\crypto\x509v3\v3_purp.c
+       $(CC) /Fo$(OBJ_D)\v3_purp.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509v3\v3_purp.c
+
+$(OBJ_D)\v3_info.obj: $(SRC_D)\crypto\x509v3\v3_info.c
+       $(CC) /Fo$(OBJ_D)\v3_info.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509v3\v3_info.c
+
+$(OBJ_D)\conf.obj: $(SRC_D)\crypto\conf\conf.c
+       $(CC) /Fo$(OBJ_D)\conf.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\conf\conf.c
+
+$(OBJ_D)\conf_err.obj: $(SRC_D)\crypto\conf\conf_err.c
+       $(CC) /Fo$(OBJ_D)\conf_err.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\conf\conf_err.c
+
+$(OBJ_D)\txt_db.obj: $(SRC_D)\crypto\txt_db\txt_db.c
+       $(CC) /Fo$(OBJ_D)\txt_db.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\txt_db\txt_db.c
+
+$(OBJ_D)\pk7_lib.obj: $(SRC_D)\crypto\pkcs7\pk7_lib.c
+       $(CC) /Fo$(OBJ_D)\pk7_lib.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs7\pk7_lib.c
+
+$(OBJ_D)\pkcs7err.obj: $(SRC_D)\crypto\pkcs7\pkcs7err.c
+       $(CC) /Fo$(OBJ_D)\pkcs7err.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs7\pkcs7err.c
+
+$(OBJ_D)\pk7_doit.obj: $(SRC_D)\crypto\pkcs7\pk7_doit.c
+       $(CC) /Fo$(OBJ_D)\pk7_doit.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs7\pk7_doit.c
+
+$(OBJ_D)\pk7_smime.obj: $(SRC_D)\crypto\pkcs7\pk7_smime.c
+       $(CC) /Fo$(OBJ_D)\pk7_smime.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs7\pk7_smime.c
+
+$(OBJ_D)\pk7_attr.obj: $(SRC_D)\crypto\pkcs7\pk7_attr.c
+       $(CC) /Fo$(OBJ_D)\pk7_attr.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs7\pk7_attr.c
+
+$(OBJ_D)\pk7_mime.obj: $(SRC_D)\crypto\pkcs7\pk7_mime.c
+       $(CC) /Fo$(OBJ_D)\pk7_mime.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs7\pk7_mime.c
+
+$(OBJ_D)\p12_add.obj: $(SRC_D)\crypto\pkcs12\p12_add.c
+       $(CC) /Fo$(OBJ_D)\p12_add.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs12\p12_add.c
+
+$(OBJ_D)\p12_attr.obj: $(SRC_D)\crypto\pkcs12\p12_attr.c
+       $(CC) /Fo$(OBJ_D)\p12_attr.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs12\p12_attr.c
+
+$(OBJ_D)\p12_bags.obj: $(SRC_D)\crypto\pkcs12\p12_bags.c
+       $(CC) /Fo$(OBJ_D)\p12_bags.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs12\p12_bags.c
+
+$(OBJ_D)\p12_crpt.obj: $(SRC_D)\crypto\pkcs12\p12_crpt.c
+       $(CC) /Fo$(OBJ_D)\p12_crpt.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs12\p12_crpt.c
+
+$(OBJ_D)\p12_crt.obj: $(SRC_D)\crypto\pkcs12\p12_crt.c
+       $(CC) /Fo$(OBJ_D)\p12_crt.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs12\p12_crt.c
+
+$(OBJ_D)\p12_decr.obj: $(SRC_D)\crypto\pkcs12\p12_decr.c
+       $(CC) /Fo$(OBJ_D)\p12_decr.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs12\p12_decr.c
+
+$(OBJ_D)\p12_init.obj: $(SRC_D)\crypto\pkcs12\p12_init.c
+       $(CC) /Fo$(OBJ_D)\p12_init.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs12\p12_init.c
+
+$(OBJ_D)\p12_key.obj: $(SRC_D)\crypto\pkcs12\p12_key.c
+       $(CC) /Fo$(OBJ_D)\p12_key.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs12\p12_key.c
+
+$(OBJ_D)\p12_kiss.obj: $(SRC_D)\crypto\pkcs12\p12_kiss.c
+       $(CC) /Fo$(OBJ_D)\p12_kiss.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs12\p12_kiss.c
+
+$(OBJ_D)\p12_lib.obj: $(SRC_D)\crypto\pkcs12\p12_lib.c
+       $(CC) /Fo$(OBJ_D)\p12_lib.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs12\p12_lib.c
+
+$(OBJ_D)\p12_mac.obj: $(SRC_D)\crypto\pkcs12\p12_mac.c
+       $(CC) /Fo$(OBJ_D)\p12_mac.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs12\p12_mac.c
+
+$(OBJ_D)\p12_mutl.obj: $(SRC_D)\crypto\pkcs12\p12_mutl.c
+       $(CC) /Fo$(OBJ_D)\p12_mutl.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs12\p12_mutl.c
+
+$(OBJ_D)\p12_sbag.obj: $(SRC_D)\crypto\pkcs12\p12_sbag.c
+       $(CC) /Fo$(OBJ_D)\p12_sbag.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs12\p12_sbag.c
+
+$(OBJ_D)\p12_utl.obj: $(SRC_D)\crypto\pkcs12\p12_utl.c
+       $(CC) /Fo$(OBJ_D)\p12_utl.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs12\p12_utl.c
+
+$(OBJ_D)\p12_npas.obj: $(SRC_D)\crypto\pkcs12\p12_npas.c
+       $(CC) /Fo$(OBJ_D)\p12_npas.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs12\p12_npas.c
+
+$(OBJ_D)\pk12err.obj: $(SRC_D)\crypto\pkcs12\pk12err.c
+       $(CC) /Fo$(OBJ_D)\pk12err.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs12\pk12err.c
+
+$(OBJ_D)\comp_lib.obj: $(SRC_D)\crypto\comp\comp_lib.c
+       $(CC) /Fo$(OBJ_D)\comp_lib.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\comp\comp_lib.c
+
+$(OBJ_D)\c_rle.obj: $(SRC_D)\crypto\comp\c_rle.c
+       $(CC) /Fo$(OBJ_D)\c_rle.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\comp\c_rle.c
+
+$(OBJ_D)\c_zlib.obj: $(SRC_D)\crypto\comp\c_zlib.c
+       $(CC) /Fo$(OBJ_D)\c_zlib.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\comp\c_zlib.c
+
+$(OBJ_D)\s2_meth.obj: $(SRC_D)\ssl\s2_meth.c
+       $(CC) /Fo$(OBJ_D)\s2_meth.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s2_meth.c
+
+$(OBJ_D)\s2_srvr.obj: $(SRC_D)\ssl\s2_srvr.c
+       $(CC) /Fo$(OBJ_D)\s2_srvr.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s2_srvr.c
+
+$(OBJ_D)\s2_clnt.obj: $(SRC_D)\ssl\s2_clnt.c
+       $(CC) /Fo$(OBJ_D)\s2_clnt.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s2_clnt.c
+
+$(OBJ_D)\s2_lib.obj: $(SRC_D)\ssl\s2_lib.c
+       $(CC) /Fo$(OBJ_D)\s2_lib.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s2_lib.c
+
+$(OBJ_D)\s2_enc.obj: $(SRC_D)\ssl\s2_enc.c
+       $(CC) /Fo$(OBJ_D)\s2_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s2_enc.c
+
+$(OBJ_D)\s2_pkt.obj: $(SRC_D)\ssl\s2_pkt.c
+       $(CC) /Fo$(OBJ_D)\s2_pkt.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s2_pkt.c
+
+$(OBJ_D)\s3_meth.obj: $(SRC_D)\ssl\s3_meth.c
+       $(CC) /Fo$(OBJ_D)\s3_meth.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s3_meth.c
+
+$(OBJ_D)\s3_srvr.obj: $(SRC_D)\ssl\s3_srvr.c
+       $(CC) /Fo$(OBJ_D)\s3_srvr.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s3_srvr.c
+
+$(OBJ_D)\s3_clnt.obj: $(SRC_D)\ssl\s3_clnt.c
+       $(CC) /Fo$(OBJ_D)\s3_clnt.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s3_clnt.c
+
+$(OBJ_D)\s3_lib.obj: $(SRC_D)\ssl\s3_lib.c
+       $(CC) /Fo$(OBJ_D)\s3_lib.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s3_lib.c
+
+$(OBJ_D)\s3_enc.obj: $(SRC_D)\ssl\s3_enc.c
+       $(CC) /Fo$(OBJ_D)\s3_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s3_enc.c
+
+$(OBJ_D)\s3_pkt.obj: $(SRC_D)\ssl\s3_pkt.c
+       $(CC) /Fo$(OBJ_D)\s3_pkt.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s3_pkt.c
+
+$(OBJ_D)\s3_both.obj: $(SRC_D)\ssl\s3_both.c
+       $(CC) /Fo$(OBJ_D)\s3_both.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s3_both.c
+
+$(OBJ_D)\s23_meth.obj: $(SRC_D)\ssl\s23_meth.c
+       $(CC) /Fo$(OBJ_D)\s23_meth.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s23_meth.c
+
+$(OBJ_D)\s23_srvr.obj: $(SRC_D)\ssl\s23_srvr.c
+       $(CC) /Fo$(OBJ_D)\s23_srvr.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s23_srvr.c
+
+$(OBJ_D)\s23_clnt.obj: $(SRC_D)\ssl\s23_clnt.c
+       $(CC) /Fo$(OBJ_D)\s23_clnt.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s23_clnt.c
+
+$(OBJ_D)\s23_lib.obj: $(SRC_D)\ssl\s23_lib.c
+       $(CC) /Fo$(OBJ_D)\s23_lib.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s23_lib.c
+
+$(OBJ_D)\s23_pkt.obj: $(SRC_D)\ssl\s23_pkt.c
+       $(CC) /Fo$(OBJ_D)\s23_pkt.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s23_pkt.c
+
+$(OBJ_D)\t1_meth.obj: $(SRC_D)\ssl\t1_meth.c
+       $(CC) /Fo$(OBJ_D)\t1_meth.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\t1_meth.c
+
+$(OBJ_D)\t1_srvr.obj: $(SRC_D)\ssl\t1_srvr.c
+       $(CC) /Fo$(OBJ_D)\t1_srvr.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\t1_srvr.c
+
+$(OBJ_D)\t1_clnt.obj: $(SRC_D)\ssl\t1_clnt.c
+       $(CC) /Fo$(OBJ_D)\t1_clnt.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\t1_clnt.c
+
+$(OBJ_D)\t1_lib.obj: $(SRC_D)\ssl\t1_lib.c
+       $(CC) /Fo$(OBJ_D)\t1_lib.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\t1_lib.c
+
+$(OBJ_D)\t1_enc.obj: $(SRC_D)\ssl\t1_enc.c
+       $(CC) /Fo$(OBJ_D)\t1_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\t1_enc.c
+
+$(OBJ_D)\ssl_lib.obj: $(SRC_D)\ssl\ssl_lib.c
+       $(CC) /Fo$(OBJ_D)\ssl_lib.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\ssl_lib.c
+
+$(OBJ_D)\ssl_err2.obj: $(SRC_D)\ssl\ssl_err2.c
+       $(CC) /Fo$(OBJ_D)\ssl_err2.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\ssl_err2.c
+
+$(OBJ_D)\ssl_cert.obj: $(SRC_D)\ssl\ssl_cert.c
+       $(CC) /Fo$(OBJ_D)\ssl_cert.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\ssl_cert.c
+
+$(OBJ_D)\ssl_sess.obj: $(SRC_D)\ssl\ssl_sess.c
+       $(CC) /Fo$(OBJ_D)\ssl_sess.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\ssl_sess.c
+
+$(OBJ_D)\ssl_ciph.obj: $(SRC_D)\ssl\ssl_ciph.c
+       $(CC) /Fo$(OBJ_D)\ssl_ciph.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\ssl_ciph.c
+
+$(OBJ_D)\ssl_stat.obj: $(SRC_D)\ssl\ssl_stat.c
+       $(CC) /Fo$(OBJ_D)\ssl_stat.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\ssl_stat.c
+
+$(OBJ_D)\ssl_rsa.obj: $(SRC_D)\ssl\ssl_rsa.c
+       $(CC) /Fo$(OBJ_D)\ssl_rsa.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\ssl_rsa.c
+
+$(OBJ_D)\ssl_asn1.obj: $(SRC_D)\ssl\ssl_asn1.c
+       $(CC) /Fo$(OBJ_D)\ssl_asn1.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\ssl_asn1.c
+
+$(OBJ_D)\ssl_txt.obj: $(SRC_D)\ssl\ssl_txt.c
+       $(CC) /Fo$(OBJ_D)\ssl_txt.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\ssl_txt.c
+
+$(OBJ_D)\ssl_algs.obj: $(SRC_D)\ssl\ssl_algs.c
+       $(CC) /Fo$(OBJ_D)\ssl_algs.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\ssl_algs.c
+
+$(OBJ_D)\bio_ssl.obj: $(SRC_D)\ssl\bio_ssl.c
+       $(CC) /Fo$(OBJ_D)\bio_ssl.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\bio_ssl.c
+
+$(OBJ_D)\ssl_err.obj: $(SRC_D)\ssl\ssl_err.c
+       $(CC) /Fo$(OBJ_D)\ssl_err.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\ssl_err.c
+
+$(OBJ_D)\rsaref.obj: $(SRC_D)\rsaref\rsaref.c
+       $(CC) /Fo$(OBJ_D)\rsaref.obj  $(LIB_CFLAGS) -c $(SRC_D)\rsaref\rsaref.c
+
+$(OBJ_D)\rsar_err.obj: $(SRC_D)\rsaref\rsar_err.c
+       $(CC) /Fo$(OBJ_D)\rsar_err.obj  $(LIB_CFLAGS) -c $(SRC_D)\rsaref\rsar_err.c
+
+$(TEST_D)\md2test.exe: $(OBJ_D)\md2test.obj $(LIBS_DEP)
+  $(LINK) $(LFLAGS) /out:$(TEST_D)\md2test.exe @<<
+  $(APP_EX_OBJ) $(OBJ_D)\md2test.obj $(L_LIBS) $(EX_LIBS)
+<<
+
+$(TEST_D)\md5test.exe: $(OBJ_D)\md5test.obj $(LIBS_DEP)
+  $(LINK) $(LFLAGS) /out:$(TEST_D)\md5test.exe @<<
+  $(APP_EX_OBJ) $(OBJ_D)\md5test.obj $(L_LIBS) $(EX_LIBS)
+<<
+
+$(TEST_D)\shatest.exe: $(OBJ_D)\shatest.obj $(LIBS_DEP)
+  $(LINK) $(LFLAGS) /out:$(TEST_D)\shatest.exe @<<
+  $(APP_EX_OBJ) $(OBJ_D)\shatest.obj $(L_LIBS) $(EX_LIBS)
+<<
+
+$(TEST_D)\sha1test.exe: $(OBJ_D)\sha1test.obj $(LIBS_DEP)
+  $(LINK) $(LFLAGS) /out:$(TEST_D)\sha1test.exe @<<
+  $(APP_EX_OBJ) $(OBJ_D)\sha1test.obj $(L_LIBS) $(EX_LIBS)
+<<
+
+$(TEST_D)\mdc2test.exe: $(OBJ_D)\mdc2test.obj $(LIBS_DEP)
+  $(LINK) $(LFLAGS) /out:$(TEST_D)\mdc2test.exe @<<
+  $(APP_EX_OBJ) $(OBJ_D)\mdc2test.obj $(L_LIBS) $(EX_LIBS)
+<<
+
+$(TEST_D)\hmactest.exe: $(OBJ_D)\hmactest.obj $(LIBS_DEP)
+  $(LINK) $(LFLAGS) /out:$(TEST_D)\hmactest.exe @<<
+  $(APP_EX_OBJ) $(OBJ_D)\hmactest.obj $(L_LIBS) $(EX_LIBS)
+<<
+
+$(TEST_D)\rmdtest.exe: $(OBJ_D)\rmdtest.obj $(LIBS_DEP)
+  $(LINK) $(LFLAGS) /out:$(TEST_D)\rmdtest.exe @<<
+  $(APP_EX_OBJ) $(OBJ_D)\rmdtest.obj $(L_LIBS) $(EX_LIBS)
+<<
+
+$(TEST_D)\destest.exe: $(OBJ_D)\destest.obj $(LIBS_DEP)
+  $(LINK) $(LFLAGS) /out:$(TEST_D)\destest.exe @<<
+  $(APP_EX_OBJ) $(OBJ_D)\destest.obj $(L_LIBS) $(EX_LIBS)
+<<
+
+$(TEST_D)\rc2test.exe: $(OBJ_D)\rc2test.obj $(LIBS_DEP)
+  $(LINK) $(LFLAGS) /out:$(TEST_D)\rc2test.exe @<<
+  $(APP_EX_OBJ) $(OBJ_D)\rc2test.obj $(L_LIBS) $(EX_LIBS)
+<<
+
+$(TEST_D)\rc4test.exe: $(OBJ_D)\rc4test.obj $(LIBS_DEP)
+  $(LINK) $(LFLAGS) /out:$(TEST_D)\rc4test.exe @<<
+  $(APP_EX_OBJ) $(OBJ_D)\rc4test.obj $(L_LIBS) $(EX_LIBS)
+<<
+
+$(TEST_D)\rc5test.exe: $(OBJ_D)\rc5test.obj $(LIBS_DEP)
+  $(LINK) $(LFLAGS) /out:$(TEST_D)\rc5test.exe @<<
+  $(APP_EX_OBJ) $(OBJ_D)\rc5test.obj $(L_LIBS) $(EX_LIBS)
+<<
+
+$(TEST_D)\ideatest.exe: $(OBJ_D)\ideatest.obj $(LIBS_DEP)
+  $(LINK) $(LFLAGS) /out:$(TEST_D)\ideatest.exe @<<
+  $(APP_EX_OBJ) $(OBJ_D)\ideatest.obj $(L_LIBS) $(EX_LIBS)
+<<
+
+$(TEST_D)\bftest.exe: $(OBJ_D)\bftest.obj $(LIBS_DEP)
+  $(LINK) $(LFLAGS) /out:$(TEST_D)\bftest.exe @<<
+  $(APP_EX_OBJ) $(OBJ_D)\bftest.obj $(L_LIBS) $(EX_LIBS)
+<<
+
+$(TEST_D)\casttest.exe: $(OBJ_D)\casttest.obj $(LIBS_DEP)
+  $(LINK) $(LFLAGS) /out:$(TEST_D)\casttest.exe @<<
+  $(APP_EX_OBJ) $(OBJ_D)\casttest.obj $(L_LIBS) $(EX_LIBS)
+<<
+
+$(TEST_D)\bntest.exe: $(OBJ_D)\bntest.obj $(LIBS_DEP)
+  $(LINK) $(LFLAGS) /out:$(TEST_D)\bntest.exe @<<
+  $(APP_EX_OBJ) $(OBJ_D)\bntest.obj $(L_LIBS) $(EX_LIBS)
+<<
+
+$(TEST_D)\exptest.exe: $(OBJ_D)\exptest.obj $(LIBS_DEP)
+  $(LINK) $(LFLAGS) /out:$(TEST_D)\exptest.exe @<<
+  $(APP_EX_OBJ) $(OBJ_D)\exptest.obj $(L_LIBS) $(EX_LIBS)
+<<
+
+$(TEST_D)\rsa_test.exe: $(OBJ_D)\rsa_test.obj $(LIBS_DEP)
+  $(LINK) $(LFLAGS) /out:$(TEST_D)\rsa_test.exe @<<
+  $(APP_EX_OBJ) $(OBJ_D)\rsa_test.obj $(L_LIBS) $(EX_LIBS)
+<<
+
+$(TEST_D)\dsatest.exe: $(OBJ_D)\dsatest.obj $(LIBS_DEP)
+  $(LINK) $(LFLAGS) /out:$(TEST_D)\dsatest.exe @<<
+  $(APP_EX_OBJ) $(OBJ_D)\dsatest.obj $(L_LIBS) $(EX_LIBS)
+<<
+
+$(TEST_D)\dhtest.exe: $(OBJ_D)\dhtest.obj $(LIBS_DEP)
+  $(LINK) $(LFLAGS) /out:$(TEST_D)\dhtest.exe @<<
+  $(APP_EX_OBJ) $(OBJ_D)\dhtest.obj $(L_LIBS) $(EX_LIBS)
+<<
+
+$(TEST_D)\randtest.exe: $(OBJ_D)\randtest.obj $(LIBS_DEP)
+  $(LINK) $(LFLAGS) /out:$(TEST_D)\randtest.exe @<<
+  $(APP_EX_OBJ) $(OBJ_D)\randtest.obj $(L_LIBS) $(EX_LIBS)
+<<
+
+$(TEST_D)\ssltest.exe: $(OBJ_D)\ssltest.obj $(LIBS_DEP)
+  $(LINK) $(LFLAGS) /out:$(TEST_D)\ssltest.exe @<<
+  $(APP_EX_OBJ) $(OBJ_D)\ssltest.obj $(L_LIBS) $(EX_LIBS)
+<<
+
+$(O_SSL): $(SSLOBJ)
+       $(LINK) $(MLFLAGS) /out:$(O_SSL) /def:ms/SSLEAY32.def @<<
+  $(SHLIB_EX_OBJ) $(SSLOBJ)  $(L_CRYPTO) wsock32.lib gdi32.lib advapi32.lib
+<<
+
+$(O_RSAGLUE): $(RSAGLUEOBJ)
+       $(MKLIB) /out:$(O_RSAGLUE) @<<
+  $(RSAGLUEOBJ)
+<<
+
+$(O_CRYPTO): $(CRYPTOOBJ)
+       $(LINK) $(MLFLAGS) /out:$(O_CRYPTO) /def:ms/LIBEAY32.def @<<
+  $(SHLIB_EX_OBJ) $(CRYPTOOBJ)  wsock32.lib gdi32.lib advapi32.lib
+<<
+
+$(BIN_D)\$(E_EXE).exe: $(E_OBJ) $(LIBS_DEP)
+  $(LINK) $(LFLAGS) /out:$(BIN_D)\$(E_EXE).exe @<<
+  $(APP_EX_OBJ) $(E_OBJ) $(L_LIBS) $(EX_LIBS)
+<<
+
Index: opensa/openssl/ms/ssleay16.def
diff -u opensa/openssl/ms/ssleay16.def:1.1 opensa/openssl/ms/ssleay16.def:1.2
--- opensa/openssl/ms/ssleay16.def:1.1  Tue Jan 25 23:16:43 2000
+++ opensa/openssl/ms/ssleay16.def      Thu Mar  2 21:12:05 2000
@@ -1,230 +1,240 @@
-;
-; Definition file for the DLL version of the SSLEAY16 library from OpenSSL
-;
-
-LIBRARY         SSLEAY16
-
-DESCRIPTION     'OpenSSL SSLEAY16 - http://www.openssl.org/'
-
-CODE            PRELOAD MOVEABLE
-DATA            PRELOAD MOVEABLE SINGLE
-
-EXETYPE                WINDOWS
-
-HEAPSIZE       4096
-STACKSIZE      8192
-
-EXPORTS
-    _BIO_f_ssl                               @121
-    _BIO_new_buffer_ssl_connect              @173
-    _BIO_new_ssl                             @122
-    _BIO_new_ssl_connect                     @174
-    _BIO_ssl_copy_session_id                 @124
-    _BIO_ssl_shutdown                        @131
-    _ERR_load_SSL_strings                    @1
-    _SSL_CIPHER_description                  @2
-    _SSL_CIPHER_get_bits                     @128
-    _SSL_CIPHER_get_name                     @130
-    _SSL_CIPHER_get_version                  @129
-    _SSL_COMP_add_compression_method         @184
-    _SSL_CTX_add_client_CA                   @3
-    _SSL_CTX_add_session                     @4
-    _SSL_CTX_check_private_key               @5
-    _SSL_CTX_ctrl                            @6
-    _SSL_CTX_flush_sessions                  @7
-    _SSL_CTX_free                            @8
-    _SSL_CTX_get_cert_store                  @180
-    _SSL_CTX_get_client_CA_list              @9
-    _SSL_CTX_get_ex_data                     @138
-    _SSL_CTX_get_ex_new_index                @167
-    _SSL_CTX_get_quiet_shutdown              @140
-    _SSL_CTX_get_timeout                     @179
-    _SSL_CTX_get_verify_callback             @10
-    _SSL_CTX_get_verify_depth                @228
-    _SSL_CTX_get_verify_mode                 @11
-    _SSL_CTX_load_verify_locations           @141
-    _SSL_CTX_new                             @12
-    _SSL_CTX_remove_session                  @13
-    _SSL_CTX_set_cert_store                  @181
-    _SSL_CTX_set_cert_verify_callback        @232
-    _SSL_CTX_set_cipher_list                 @15
-    _SSL_CTX_set_client_CA_list              @16
-    _SSL_CTX_set_default_passwd_cb           @17
-    _SSL_CTX_set_default_passwd_cb_userdata  @235
-    _SSL_CTX_set_default_verify_paths        @142
-    _SSL_CTX_set_ex_data                     @143
-    _SSL_CTX_set_quiet_shutdown              @145
-    _SSL_CTX_set_session_id_context          @231
-    _SSL_CTX_set_ssl_version                 @19
-    _SSL_CTX_set_timeout                     @178
-    _SSL_CTX_set_tmp_dh_callback             @176
-    _SSL_CTX_set_tmp_rsa_callback            @177
-    _SSL_CTX_set_verify                      @21
-    _SSL_CTX_set_verify_depth                @225
-    _SSL_CTX_use_PrivateKey                  @22
-    _SSL_CTX_use_PrivateKey_ASN1             @23
-    _SSL_CTX_use_PrivateKey_file             @24
-    _SSL_CTX_use_RSAPrivateKey               @25
-    _SSL_CTX_use_RSAPrivateKey_ASN1          @26
-    _SSL_CTX_use_RSAPrivateKey_file          @27
-    _SSL_CTX_use_certificate                 @28
-    _SSL_CTX_use_certificate_ASN1            @29
-    _SSL_CTX_use_certificate_chain_file      @222
-    _SSL_CTX_use_certificate_file            @30
-    _SSL_SESSION_cmp                         @132
-    _SSL_SESSION_free                        @31
-    _SSL_SESSION_get_ex_data                 @146
-    _SSL_SESSION_get_ex_new_index            @168
-    _SSL_SESSION_get_time                    @134
-    _SSL_SESSION_get_timeout                 @136
-    _SSL_SESSION_hash                        @133
-    _SSL_SESSION_new                         @32
-    _SSL_SESSION_print                       @33
-    _SSL_SESSION_set_ex_data                 @148
-    _SSL_SESSION_set_time                    @135
-    _SSL_SESSION_set_timeout                 @137
-    _SSL_accept                              @35
-    _SSL_add_client_CA                       @36
-    _SSL_add_file_cert_subjects_to_stack     @185
-    _SSL_alert_desc_string                   @37
-    _SSL_alert_desc_string_long              @38
-    _SSL_alert_type_string                   @39
-    _SSL_alert_type_string_long              @40
-    _SSL_check_private_key                   @41
-    _SSL_clear                               @42
-    _SSL_connect                             @43
-    _SSL_copy_session_id                     @44
-    _SSL_ctrl                                @45
-    _SSL_do_handshake                        @125
-    _SSL_dup                                 @46
-    _SSL_dup_CA_list                         @47
-    _SSL_free                                @48
-    _SSL_get_SSL_CTX                         @150
-    _SSL_get_certificate                     @49
-    _SSL_get_cipher_list                     @52
-    _SSL_get_ciphers                         @55
-    _SSL_get_client_CA_list                  @56
-    _SSL_get_current_cipher                  @127
-    _SSL_get_default_timeout                 @57
-    _SSL_get_error                           @58
-    _SSL_get_ex_data                         @151
-    _SSL_get_ex_data_X509_STORE_CTX_idx      @175
-    _SSL_get_ex_new_index                    @169
-    _SSL_get_fd                              @59
-    _SSL_get_info_callback                   @165
-    _SSL_get_peer_cert_chain                 @60
-    _SSL_get_peer_certificate                @61
-    _SSL_get_privatekey                      @126
-    _SSL_get_quiet_shutdown                  @153
-    _SSL_get_rbio                            @63
-    _SSL_get_read_ahead                      @64
-    _SSL_get_session                         @154
-    _SSL_get_shared_ciphers                  @65
-    _SSL_get_shutdown                        @155
-    _SSL_get_ssl_method                      @66
-    _SSL_get_verify_callback                 @69
-    _SSL_get_verify_depth                    @229
-    _SSL_get_verify_mode                     @70
-    _SSL_get_verify_result                   @157
-    _SSL_get_version                         @71
-    _SSL_get_wbio                            @72
-    _SSL_library_init                        @183
-    _SSL_load_client_CA_file                 @73
-    _SSL_load_error_strings                  @74
-    _SSL_new                                 @75
-    _SSL_peek                                @76
-    _SSL_pending                             @77
-    _SSL_read                                @78
-    _SSL_renegotiate                         @79
-    _SSL_rstate_string                       @80
-    _SSL_rstate_string_long                  @81
-    _SSL_set_accept_state                    @82
-    _SSL_set_bio                             @83
-    _SSL_set_cipher_list                     @84
-    _SSL_set_client_CA_list                  @85
-    _SSL_set_connect_state                   @86
-    _SSL_set_ex_data                         @158
-    _SSL_set_fd                              @87
-    _SSL_set_info_callback                   @160
-    _SSL_set_quiet_shutdown                  @161
-    _SSL_set_read_ahead                      @88
-    _SSL_set_rfd                             @89
-    _SSL_set_session                         @90
-    _SSL_set_session_id_context              @189
-    _SSL_set_shutdown                        @162
-    _SSL_set_ssl_method                      @91
-    _SSL_set_tmp_dh_callback                 @187
-    _SSL_set_tmp_rsa_callback                @186
-    _SSL_set_verify                          @94
-    _SSL_set_verify_depth                    @226
-    _SSL_set_verify_result                   @163
-    _SSL_set_wfd                             @95
-    _SSL_shutdown                            @96
-    _SSL_state                               @166
-    _SSL_state_string                        @97
-    _SSL_state_string_long                   @98
-    _SSL_use_PrivateKey                      @99
-    _SSL_use_PrivateKey_ASN1                 @100
-    _SSL_use_PrivateKey_file                 @101
-    _SSL_use_RSAPrivateKey                   @102
-    _SSL_use_RSAPrivateKey_ASN1              @103
-    _SSL_use_RSAPrivateKey_file              @104
-    _SSL_use_certificate                     @105
-    _SSL_use_certificate_ASN1                @106
-    _SSL_use_certificate_file                @107
-    _SSL_version                             @164
-    _SSL_want                                @182
-    _SSL_write                               @108
-    _SSLv23_client_method                    @110
-    _SSLv23_method                           @111
-    _SSLv23_server_method                    @112
-    _SSLv2_client_method                     @113
-    _SSLv2_method                            @114
-    _SSLv2_server_method                     @115
-    _SSLv3_client_method                     @116
-    _SSLv3_method                            @117
-    _SSLv3_server_method                     @118
-    _TLSv1_client_method                     @172
-    _TLSv1_method                            @170
-    _TLSv1_server_method                     @171
-    _d2i_SSL_SESSION                         @119
-    _i2d_SSL_SESSION                         @120
-    _sk_SSL_CIPHER_delete                    @200
-    _sk_SSL_CIPHER_delete_ptr                @201
-    _sk_SSL_CIPHER_dup                       @203
-    _sk_SSL_CIPHER_find                      @199
-    _sk_SSL_CIPHER_free                      @192
-    _sk_SSL_CIPHER_insert                    @224
-    _sk_SSL_CIPHER_new                       @190
-    _sk_SSL_CIPHER_new_null                  @191
-    _sk_SSL_CIPHER_num                       @193
-    _sk_SSL_CIPHER_pop                       @198
-    _sk_SSL_CIPHER_pop_free                  @204
-    _sk_SSL_CIPHER_push                      @197
-    _sk_SSL_CIPHER_set                       @195
-    _sk_SSL_CIPHER_set_cmp_func              @202
-    _sk_SSL_CIPHER_shift                     @205
-    _sk_SSL_CIPHER_sort                      @234
-    _sk_SSL_CIPHER_unshift                   @227
-    _sk_SSL_CIPHER_value                     @194
-    _sk_SSL_CIPHER_zero                      @196
-    _sk_SSL_COMP_delete                      @216
-    _sk_SSL_COMP_delete_ptr                  @217
-    _sk_SSL_COMP_dup                         @219
-    _sk_SSL_COMP_find                        @215
-    _sk_SSL_COMP_free                        @208
-    _sk_SSL_COMP_insert                      @223
-    _sk_SSL_COMP_new                         @206
-    _sk_SSL_COMP_new_null                    @207
-    _sk_SSL_COMP_num                         @209
-    _sk_SSL_COMP_pop                         @214
-    _sk_SSL_COMP_pop_free                    @220
-    _sk_SSL_COMP_push                        @213
-    _sk_SSL_COMP_set                         @211
-    _sk_SSL_COMP_set_cmp_func                @218
-    _sk_SSL_COMP_shift                       @221
-    _sk_SSL_COMP_sort                        @233
-    _sk_SSL_COMP_unshift                     @230
-    _sk_SSL_COMP_value                       @210
-    _sk_SSL_COMP_zero                        @212
-
+;
+; Definition file for the DLL version of the SSLEAY16 library from OpenSSL
+;
+
+LIBRARY         SSLEAY16
+
+DESCRIPTION     'OpenSSL SSLEAY16 - http://www.openssl.org/'
+
+CODE            PRELOAD MOVEABLE
+DATA            PRELOAD MOVEABLE SINGLE
+
+EXETYPE                WINDOWS
+
+HEAPSIZE       4096
+STACKSIZE      8192
+
+EXPORTS
+    _BIO_f_ssl                               @121
+    _BIO_new_buffer_ssl_connect              @173
+    _BIO_new_ssl                             @122
+    _BIO_new_ssl_connect                     @174
+    _BIO_ssl_copy_session_id                 @124
+    _BIO_ssl_shutdown                        @131
+    _ERR_load_SSL_strings                    @1
+    _SSL_CIPHER_description                  @2
+    _SSL_CIPHER_get_bits                     @128
+    _SSL_CIPHER_get_name                     @130
+    _SSL_CIPHER_get_version                  @129
+    _SSL_COMP_add_compression_method         @184
+    _SSL_CTX_add_client_CA                   @3
+    _SSL_CTX_add_session                     @4
+    _SSL_CTX_callback_ctrl                   @243
+    _SSL_CTX_check_private_key               @5
+    _SSL_CTX_ctrl                            @6
+    _SSL_CTX_flush_sessions                  @7
+    _SSL_CTX_free                            @8
+    _SSL_CTX_get_cert_store                  @180
+    _SSL_CTX_get_client_CA_list              @9
+    _SSL_CTX_get_ex_data                     @138
+    _SSL_CTX_get_ex_new_index                @167
+    _SSL_CTX_get_quiet_shutdown              @140
+    _SSL_CTX_get_timeout                     @179
+    _SSL_CTX_get_verify_callback             @10
+    _SSL_CTX_get_verify_depth                @228
+    _SSL_CTX_get_verify_mode                 @11
+    _SSL_CTX_load_verify_locations           @141
+    _SSL_CTX_new                             @12
+    _SSL_CTX_remove_session                  @13
+    _SSL_CTX_sessions                        @245
+    _SSL_CTX_set_cert_store                  @181
+    _SSL_CTX_set_cert_verify_callback        @232
+    _SSL_CTX_set_cipher_list                 @15
+    _SSL_CTX_set_client_CA_list              @16
+    _SSL_CTX_set_default_passwd_cb           @17
+    _SSL_CTX_set_default_passwd_cb_userdata  @235
+    _SSL_CTX_set_default_verify_paths        @142
+    _SSL_CTX_set_ex_data                     @143
+    _SSL_CTX_set_purpose                     @238
+    _SSL_CTX_set_quiet_shutdown              @145
+    _SSL_CTX_set_session_id_context          @231
+    _SSL_CTX_set_ssl_version                 @19
+    _SSL_CTX_set_timeout                     @178
+    _SSL_CTX_set_tmp_dh_callback             @176
+    _SSL_CTX_set_tmp_rsa_callback            @177
+    _SSL_CTX_set_trust                       @237
+    _SSL_CTX_set_verify                      @21
+    _SSL_CTX_set_verify_depth                @225
+    _SSL_CTX_use_PrivateKey                  @22
+    _SSL_CTX_use_PrivateKey_ASN1             @23
+    _SSL_CTX_use_PrivateKey_file             @24
+    _SSL_CTX_use_RSAPrivateKey               @25
+    _SSL_CTX_use_RSAPrivateKey_ASN1          @26
+    _SSL_CTX_use_RSAPrivateKey_file          @27
+    _SSL_CTX_use_certificate                 @28
+    _SSL_CTX_use_certificate_ASN1            @29
+    _SSL_CTX_use_certificate_chain_file      @222
+    _SSL_CTX_use_certificate_file            @30
+    _SSL_SESSION_cmp                         @132
+    _SSL_SESSION_free                        @31
+    _SSL_SESSION_get_ex_data                 @146
+    _SSL_SESSION_get_ex_new_index            @168
+    _SSL_SESSION_get_time                    @134
+    _SSL_SESSION_get_timeout                 @136
+    _SSL_SESSION_hash                        @133
+    _SSL_SESSION_new                         @32
+    _SSL_SESSION_print                       @33
+    _SSL_SESSION_set_ex_data                 @148
+    _SSL_SESSION_set_time                    @135
+    _SSL_SESSION_set_timeout                 @137
+    _SSL_accept                              @35
+    _SSL_add_client_CA                       @36
+    _SSL_add_file_cert_subjects_to_stack     @185
+    _SSL_alert_desc_string                   @37
+    _SSL_alert_desc_string_long              @38
+    _SSL_alert_type_string                   @39
+    _SSL_alert_type_string_long              @40
+    _SSL_callback_ctrl                       @244
+    _SSL_check_private_key                   @41
+    _SSL_clear                               @42
+    _SSL_connect                             @43
+    _SSL_copy_session_id                     @44
+    _SSL_ctrl                                @45
+    _SSL_do_handshake                        @125
+    _SSL_dup                                 @46
+    _SSL_dup_CA_list                         @47
+    _SSL_free                                @48
+    _SSL_get1_session                        @242
+    _SSL_get_SSL_CTX                         @150
+    _SSL_get_certificate                     @49
+    _SSL_get_cipher_list                     @52
+    _SSL_get_ciphers                         @55
+    _SSL_get_client_CA_list                  @56
+    _SSL_get_current_cipher                  @127
+    _SSL_get_default_timeout                 @57
+    _SSL_get_error                           @58
+    _SSL_get_ex_data                         @151
+    _SSL_get_ex_data_X509_STORE_CTX_idx      @175
+    _SSL_get_ex_new_index                    @169
+    _SSL_get_fd                              @59
+    _SSL_get_finished                        @240
+    _SSL_get_info_callback                   @165
+    _SSL_get_peer_cert_chain                 @60
+    _SSL_get_peer_certificate                @61
+    _SSL_get_peer_finished                   @241
+    _SSL_get_privatekey                      @126
+    _SSL_get_quiet_shutdown                  @153
+    _SSL_get_rbio                            @63
+    _SSL_get_read_ahead                      @64
+    _SSL_get_session                         @154
+    _SSL_get_shared_ciphers                  @65
+    _SSL_get_shutdown                        @155
+    _SSL_get_ssl_method                      @66
+    _SSL_get_verify_callback                 @69
+    _SSL_get_verify_depth                    @229
+    _SSL_get_verify_mode                     @70
+    _SSL_get_verify_result                   @157
+    _SSL_get_version                         @71
+    _SSL_get_wbio                            @72
+    _SSL_library_init                        @183
+    _SSL_load_client_CA_file                 @73
+    _SSL_load_error_strings                  @74
+    _SSL_new                                 @75
+    _SSL_peek                                @76
+    _SSL_pending                             @77
+    _SSL_read                                @78
+    _SSL_renegotiate                         @79
+    _SSL_rstate_string                       @80
+    _SSL_rstate_string_long                  @81
+    _SSL_set_accept_state                    @82
+    _SSL_set_bio                             @83
+    _SSL_set_cipher_list                     @84
+    _SSL_set_client_CA_list                  @85
+    _SSL_set_connect_state                   @86
+    _SSL_set_ex_data                         @158
+    _SSL_set_fd                              @87
+    _SSL_set_info_callback                   @160
+    _SSL_set_purpose                         @236
+    _SSL_set_quiet_shutdown                  @161
+    _SSL_set_read_ahead                      @88
+    _SSL_set_rfd                             @89
+    _SSL_set_session                         @90
+    _SSL_set_session_id_context              @189
+    _SSL_set_shutdown                        @162
+    _SSL_set_ssl_method                      @91
+    _SSL_set_tmp_dh_callback                 @187
+    _SSL_set_tmp_rsa_callback                @186
+    _SSL_set_trust                           @239
+    _SSL_set_verify                          @94
+    _SSL_set_verify_depth                    @226
+    _SSL_set_verify_result                   @163
+    _SSL_set_wfd                             @95
+    _SSL_shutdown                            @96
+    _SSL_state                               @166
+    _SSL_state_string                        @97
+    _SSL_state_string_long                   @98
+    _SSL_use_PrivateKey                      @99
+    _SSL_use_PrivateKey_ASN1                 @100
+    _SSL_use_PrivateKey_file                 @101
+    _SSL_use_RSAPrivateKey                   @102
+    _SSL_use_RSAPrivateKey_ASN1              @103
+    _SSL_use_RSAPrivateKey_file              @104
+    _SSL_use_certificate                     @105
+    _SSL_use_certificate_ASN1                @106
+    _SSL_use_certificate_file                @107
+    _SSL_version                             @164
+    _SSL_want                                @182
+    _SSL_write                               @108
+    _SSLv23_client_method                    @110
+    _SSLv23_method                           @111
+    _SSLv23_server_method                    @112
+    _SSLv2_client_method                     @113
+    _SSLv2_method                            @114
+    _SSLv2_server_method                     @115
+    _SSLv3_client_method                     @116
+    _SSLv3_method                            @117
+    _SSLv3_server_method                     @118
+    _TLSv1_client_method                     @172
+    _TLSv1_method                            @170
+    _TLSv1_server_method                     @171
+    _d2i_SSL_SESSION                         @119
+    _i2d_SSL_SESSION                         @120
+    _sk_SSL_CIPHER_delete                    @200
+    _sk_SSL_CIPHER_delete_ptr                @201
+    _sk_SSL_CIPHER_dup                       @203
+    _sk_SSL_CIPHER_find                      @199
+    _sk_SSL_CIPHER_free                      @192
+    _sk_SSL_CIPHER_insert                    @224
+    _sk_SSL_CIPHER_new                       @190
+    _sk_SSL_CIPHER_new_null                  @191
+    _sk_SSL_CIPHER_num                       @193
+    _sk_SSL_CIPHER_pop                       @198
+    _sk_SSL_CIPHER_pop_free                  @204
+    _sk_SSL_CIPHER_push                      @197
+    _sk_SSL_CIPHER_set                       @195
+    _sk_SSL_CIPHER_set_cmp_func              @202
+    _sk_SSL_CIPHER_shift                     @205
+    _sk_SSL_CIPHER_sort                      @234
+    _sk_SSL_CIPHER_unshift                   @227
+    _sk_SSL_CIPHER_value                     @194
+    _sk_SSL_CIPHER_zero                      @196
+    _sk_SSL_COMP_delete                      @216
+    _sk_SSL_COMP_delete_ptr                  @217
+    _sk_SSL_COMP_dup                         @219
+    _sk_SSL_COMP_find                        @215
+    _sk_SSL_COMP_free                        @208
+    _sk_SSL_COMP_insert                      @223
+    _sk_SSL_COMP_new                         @206
+    _sk_SSL_COMP_new_null                    @207
+    _sk_SSL_COMP_num                         @209
+    _sk_SSL_COMP_pop                         @214
+    _sk_SSL_COMP_pop_free                    @220
+    _sk_SSL_COMP_push                        @213
+    _sk_SSL_COMP_set                         @211
+    _sk_SSL_COMP_set_cmp_func                @218
+    _sk_SSL_COMP_shift                       @221
+    _sk_SSL_COMP_sort                        @233
+    _sk_SSL_COMP_unshift                     @230
+    _sk_SSL_COMP_value                       @210
+    _sk_SSL_COMP_zero                        @212
+
Index: opensa/openssl/ms/ssleay32.def
diff -u opensa/openssl/ms/ssleay32.def:1.1 opensa/openssl/ms/ssleay32.def:1.2
--- opensa/openssl/ms/ssleay32.def:1.1  Tue Jan 25 23:16:43 2000
+++ opensa/openssl/ms/ssleay32.def      Thu Mar  2 21:12:05 2000
@@ -1,223 +1,233 @@
-;
-; Definition file for the DLL version of the SSLEAY32 library from OpenSSL
-;
-
-LIBRARY         SSLEAY32
-
-DESCRIPTION     'OpenSSL SSLEAY32 - http://www.openssl.org/'
-
-EXPORTS
-    BIO_f_ssl                               @121
-    BIO_new_buffer_ssl_connect              @173
-    BIO_new_ssl                             @122
-    BIO_new_ssl_connect                     @174
-    BIO_ssl_copy_session_id                 @124
-    BIO_ssl_shutdown                        @131
-    ERR_load_SSL_strings                    @1
-    SSL_CIPHER_description                  @2
-    SSL_CIPHER_get_bits                     @128
-    SSL_CIPHER_get_name                     @130
-    SSL_CIPHER_get_version                  @129
-    SSL_COMP_add_compression_method         @184
-    SSL_CTX_add_client_CA                   @3
-    SSL_CTX_add_session                     @4
-    SSL_CTX_check_private_key               @5
-    SSL_CTX_ctrl                            @6
-    SSL_CTX_flush_sessions                  @7
-    SSL_CTX_free                            @8
-    SSL_CTX_get_cert_store                  @180
-    SSL_CTX_get_client_CA_list              @9
-    SSL_CTX_get_ex_data                     @138
-    SSL_CTX_get_ex_new_index                @167
-    SSL_CTX_get_quiet_shutdown              @140
-    SSL_CTX_get_timeout                     @179
-    SSL_CTX_get_verify_callback             @10
-    SSL_CTX_get_verify_depth                @228
-    SSL_CTX_get_verify_mode                 @11
-    SSL_CTX_load_verify_locations           @141
-    SSL_CTX_new                             @12
-    SSL_CTX_remove_session                  @13
-    SSL_CTX_set_cert_store                  @181
-    SSL_CTX_set_cert_verify_callback        @232
-    SSL_CTX_set_cipher_list                 @15
-    SSL_CTX_set_client_CA_list              @16
-    SSL_CTX_set_default_passwd_cb           @17
-    SSL_CTX_set_default_passwd_cb_userdata  @235
-    SSL_CTX_set_default_verify_paths        @142
-    SSL_CTX_set_ex_data                     @143
-    SSL_CTX_set_quiet_shutdown              @145
-    SSL_CTX_set_session_id_context          @231
-    SSL_CTX_set_ssl_version                 @19
-    SSL_CTX_set_timeout                     @178
-    SSL_CTX_set_tmp_dh_callback             @176
-    SSL_CTX_set_tmp_rsa_callback            @177
-    SSL_CTX_set_verify                      @21
-    SSL_CTX_set_verify_depth                @225
-    SSL_CTX_use_PrivateKey                  @22
-    SSL_CTX_use_PrivateKey_ASN1             @23
-    SSL_CTX_use_PrivateKey_file             @24
-    SSL_CTX_use_RSAPrivateKey               @25
-    SSL_CTX_use_RSAPrivateKey_ASN1          @26
-    SSL_CTX_use_RSAPrivateKey_file          @27
-    SSL_CTX_use_certificate                 @28
-    SSL_CTX_use_certificate_ASN1            @29
-    SSL_CTX_use_certificate_chain_file      @222
-    SSL_CTX_use_certificate_file            @30
-    SSL_SESSION_cmp                         @132
-    SSL_SESSION_free                        @31
-    SSL_SESSION_get_ex_data                 @146
-    SSL_SESSION_get_ex_new_index            @168
-    SSL_SESSION_get_time                    @134
-    SSL_SESSION_get_timeout                 @136
-    SSL_SESSION_hash                        @133
-    SSL_SESSION_new                         @32
-    SSL_SESSION_print                       @33
-    SSL_SESSION_print_fp                    @34
-    SSL_SESSION_set_ex_data                 @148
-    SSL_SESSION_set_time                    @135
-    SSL_SESSION_set_timeout                 @137
-    SSL_accept                              @35
-    SSL_add_client_CA                       @36
-    SSL_add_file_cert_subjects_to_stack     @185
-    SSL_alert_desc_string                   @37
-    SSL_alert_desc_string_long              @38
-    SSL_alert_type_string                   @39
-    SSL_alert_type_string_long              @40
-    SSL_check_private_key                   @41
-    SSL_clear                               @42
-    SSL_connect                             @43
-    SSL_copy_session_id                     @44
-    SSL_ctrl                                @45
-    SSL_do_handshake                        @125
-    SSL_dup                                 @46
-    SSL_dup_CA_list                         @47
-    SSL_free                                @48
-    SSL_get_SSL_CTX                         @150
-    SSL_get_certificate                     @49
-    SSL_get_cipher_list                     @52
-    SSL_get_ciphers                         @55
-    SSL_get_client_CA_list                  @56
-    SSL_get_current_cipher                  @127
-    SSL_get_default_timeout                 @57
-    SSL_get_error                           @58
-    SSL_get_ex_data                         @151
-    SSL_get_ex_data_X509_STORE_CTX_idx      @175
-    SSL_get_ex_new_index                    @169
-    SSL_get_fd                              @59
-    SSL_get_info_callback                   @165
-    SSL_get_peer_cert_chain                 @60
-    SSL_get_peer_certificate                @61
-    SSL_get_privatekey                      @126
-    SSL_get_quiet_shutdown                  @153
-    SSL_get_rbio                            @63
-    SSL_get_read_ahead                      @64
-    SSL_get_session                         @154
-    SSL_get_shared_ciphers                  @65
-    SSL_get_shutdown                        @155
-    SSL_get_ssl_method                      @66
-    SSL_get_verify_callback                 @69
-    SSL_get_verify_depth                    @229
-    SSL_get_verify_mode                     @70
-    SSL_get_verify_result                   @157
-    SSL_get_version                         @71
-    SSL_get_wbio                            @72
-    SSL_library_init                        @183
-    SSL_load_client_CA_file                 @73
-    SSL_load_error_strings                  @74
-    SSL_new                                 @75
-    SSL_peek                                @76
-    SSL_pending                             @77
-    SSL_read                                @78
-    SSL_renegotiate                         @79
-    SSL_rstate_string                       @80
-    SSL_rstate_string_long                  @81
-    SSL_set_accept_state                    @82
-    SSL_set_bio                             @83
-    SSL_set_cipher_list                     @84
-    SSL_set_client_CA_list                  @85
-    SSL_set_connect_state                   @86
-    SSL_set_ex_data                         @158
-    SSL_set_fd                              @87
-    SSL_set_info_callback                   @160
-    SSL_set_quiet_shutdown                  @161
-    SSL_set_read_ahead                      @88
-    SSL_set_rfd                             @89
-    SSL_set_session                         @90
-    SSL_set_session_id_context              @189
-    SSL_set_shutdown                        @162
-    SSL_set_ssl_method                      @91
-    SSL_set_tmp_dh_callback                 @187
-    SSL_set_tmp_rsa_callback                @186
-    SSL_set_verify                          @94
-    SSL_set_verify_depth                    @226
-    SSL_set_verify_result                   @163
-    SSL_set_wfd                             @95
-    SSL_shutdown                            @96
-    SSL_state                               @166
-    SSL_state_string                        @97
-    SSL_state_string_long                   @98
-    SSL_use_PrivateKey                      @99
-    SSL_use_PrivateKey_ASN1                 @100
-    SSL_use_PrivateKey_file                 @101
-    SSL_use_RSAPrivateKey                   @102
-    SSL_use_RSAPrivateKey_ASN1              @103
-    SSL_use_RSAPrivateKey_file              @104
-    SSL_use_certificate                     @105
-    SSL_use_certificate_ASN1                @106
-    SSL_use_certificate_file                @107
-    SSL_version                             @164
-    SSL_want                                @182
-    SSL_write                               @108
-    SSLv23_client_method                    @110
-    SSLv23_method                           @111
-    SSLv23_server_method                    @112
-    SSLv2_client_method                     @113
-    SSLv2_method                            @114
-    SSLv2_server_method                     @115
-    SSLv3_client_method                     @116
-    SSLv3_method                            @117
-    SSLv3_server_method                     @118
-    TLSv1_client_method                     @172
-    TLSv1_method                            @170
-    TLSv1_server_method                     @171
-    d2i_SSL_SESSION                         @119
-    i2d_SSL_SESSION                         @120
-    sk_SSL_CIPHER_delete                    @200
-    sk_SSL_CIPHER_delete_ptr                @201
-    sk_SSL_CIPHER_dup                       @203
-    sk_SSL_CIPHER_find                      @199
-    sk_SSL_CIPHER_free                      @192
-    sk_SSL_CIPHER_insert                    @224
-    sk_SSL_CIPHER_new                       @190
-    sk_SSL_CIPHER_new_null                  @191
-    sk_SSL_CIPHER_num                       @193
-    sk_SSL_CIPHER_pop                       @198
-    sk_SSL_CIPHER_pop_free                  @204
-    sk_SSL_CIPHER_push                      @197
-    sk_SSL_CIPHER_set                       @195
-    sk_SSL_CIPHER_set_cmp_func              @202
-    sk_SSL_CIPHER_shift                     @205
-    sk_SSL_CIPHER_sort                      @234
-    sk_SSL_CIPHER_unshift                   @227
-    sk_SSL_CIPHER_value                     @194
-    sk_SSL_CIPHER_zero                      @196
-    sk_SSL_COMP_delete                      @216
-    sk_SSL_COMP_delete_ptr                  @217
-    sk_SSL_COMP_dup                         @219
-    sk_SSL_COMP_find                        @215
-    sk_SSL_COMP_free                        @208
-    sk_SSL_COMP_insert                      @223
-    sk_SSL_COMP_new                         @206
-    sk_SSL_COMP_new_null                    @207
-    sk_SSL_COMP_num                         @209
-    sk_SSL_COMP_pop                         @214
-    sk_SSL_COMP_pop_free                    @220
-    sk_SSL_COMP_push                        @213
-    sk_SSL_COMP_set                         @211
-    sk_SSL_COMP_set_cmp_func                @218
-    sk_SSL_COMP_shift                       @221
-    sk_SSL_COMP_sort                        @233
-    sk_SSL_COMP_unshift                     @230
-    sk_SSL_COMP_value                       @210
-    sk_SSL_COMP_zero                        @212
-
+;
+; Definition file for the DLL version of the SSLEAY32 library from OpenSSL
+;
+
+LIBRARY         SSLEAY32
+
+DESCRIPTION     'OpenSSL SSLEAY32 - http://www.openssl.org/'
+
+EXPORTS
+    BIO_f_ssl                               @121
+    BIO_new_buffer_ssl_connect              @173
+    BIO_new_ssl                             @122
+    BIO_new_ssl_connect                     @174
+    BIO_ssl_copy_session_id                 @124
+    BIO_ssl_shutdown                        @131
+    ERR_load_SSL_strings                    @1
+    SSL_CIPHER_description                  @2
+    SSL_CIPHER_get_bits                     @128
+    SSL_CIPHER_get_name                     @130
+    SSL_CIPHER_get_version                  @129
+    SSL_COMP_add_compression_method         @184
+    SSL_CTX_add_client_CA                   @3
+    SSL_CTX_add_session                     @4
+    SSL_CTX_callback_ctrl                   @243
+    SSL_CTX_check_private_key               @5
+    SSL_CTX_ctrl                            @6
+    SSL_CTX_flush_sessions                  @7
+    SSL_CTX_free                            @8
+    SSL_CTX_get_cert_store                  @180
+    SSL_CTX_get_client_CA_list              @9
+    SSL_CTX_get_ex_data                     @138
+    SSL_CTX_get_ex_new_index                @167
+    SSL_CTX_get_quiet_shutdown              @140
+    SSL_CTX_get_timeout                     @179
+    SSL_CTX_get_verify_callback             @10
+    SSL_CTX_get_verify_depth                @228
+    SSL_CTX_get_verify_mode                 @11
+    SSL_CTX_load_verify_locations           @141
+    SSL_CTX_new                             @12
+    SSL_CTX_remove_session                  @13
+    SSL_CTX_sessions                        @245
+    SSL_CTX_set_cert_store                  @181
+    SSL_CTX_set_cert_verify_callback        @232
+    SSL_CTX_set_cipher_list                 @15
+    SSL_CTX_set_client_CA_list              @16
+    SSL_CTX_set_default_passwd_cb           @17
+    SSL_CTX_set_default_passwd_cb_userdata  @235
+    SSL_CTX_set_default_verify_paths        @142
+    SSL_CTX_set_ex_data                     @143
+    SSL_CTX_set_purpose                     @238
+    SSL_CTX_set_quiet_shutdown              @145
+    SSL_CTX_set_session_id_context          @231
+    SSL_CTX_set_ssl_version                 @19
+    SSL_CTX_set_timeout                     @178
+    SSL_CTX_set_tmp_dh_callback             @176
+    SSL_CTX_set_tmp_rsa_callback            @177
+    SSL_CTX_set_trust                       @237
+    SSL_CTX_set_verify                      @21
+    SSL_CTX_set_verify_depth                @225
+    SSL_CTX_use_PrivateKey                  @22
+    SSL_CTX_use_PrivateKey_ASN1             @23
+    SSL_CTX_use_PrivateKey_file             @24
+    SSL_CTX_use_RSAPrivateKey               @25
+    SSL_CTX_use_RSAPrivateKey_ASN1          @26
+    SSL_CTX_use_RSAPrivateKey_file          @27
+    SSL_CTX_use_certificate                 @28
+    SSL_CTX_use_certificate_ASN1            @29
+    SSL_CTX_use_certificate_chain_file      @222
+    SSL_CTX_use_certificate_file            @30
+    SSL_SESSION_cmp                         @132
+    SSL_SESSION_free                        @31
+    SSL_SESSION_get_ex_data                 @146
+    SSL_SESSION_get_ex_new_index            @168
+    SSL_SESSION_get_time                    @134
+    SSL_SESSION_get_timeout                 @136
+    SSL_SESSION_hash                        @133
+    SSL_SESSION_new                         @32
+    SSL_SESSION_print                       @33
+    SSL_SESSION_print_fp                    @34
+    SSL_SESSION_set_ex_data                 @148
+    SSL_SESSION_set_time                    @135
+    SSL_SESSION_set_timeout                 @137
+    SSL_accept                              @35
+    SSL_add_client_CA                       @36
+    SSL_add_file_cert_subjects_to_stack     @185
+    SSL_alert_desc_string                   @37
+    SSL_alert_desc_string_long              @38
+    SSL_alert_type_string                   @39
+    SSL_alert_type_string_long              @40
+    SSL_callback_ctrl                       @244
+    SSL_check_private_key                   @41
+    SSL_clear                               @42
+    SSL_connect                             @43
+    SSL_copy_session_id                     @44
+    SSL_ctrl                                @45
+    SSL_do_handshake                        @125
+    SSL_dup                                 @46
+    SSL_dup_CA_list                         @47
+    SSL_free                                @48
+    SSL_get1_session                        @242
+    SSL_get_SSL_CTX                         @150
+    SSL_get_certificate                     @49
+    SSL_get_cipher_list                     @52
+    SSL_get_ciphers                         @55
+    SSL_get_client_CA_list                  @56
+    SSL_get_current_cipher                  @127
+    SSL_get_default_timeout                 @57
+    SSL_get_error                           @58
+    SSL_get_ex_data                         @151
+    SSL_get_ex_data_X509_STORE_CTX_idx      @175
+    SSL_get_ex_new_index                    @169
+    SSL_get_fd                              @59
+    SSL_get_finished                        @240
+    SSL_get_info_callback                   @165
+    SSL_get_peer_cert_chain                 @60
+    SSL_get_peer_certificate                @61
+    SSL_get_peer_finished                   @241
+    SSL_get_privatekey                      @126
+    SSL_get_quiet_shutdown                  @153
+    SSL_get_rbio                            @63
+    SSL_get_read_ahead                      @64
+    SSL_get_session                         @154
+    SSL_get_shared_ciphers                  @65
+    SSL_get_shutdown                        @155
+    SSL_get_ssl_method                      @66
+    SSL_get_verify_callback                 @69
+    SSL_get_verify_depth                    @229
+    SSL_get_verify_mode                     @70
+    SSL_get_verify_result                   @157
+    SSL_get_version                         @71
+    SSL_get_wbio                            @72
+    SSL_library_init                        @183
+    SSL_load_client_CA_file                 @73
+    SSL_load_error_strings                  @74
+    SSL_new                                 @75
+    SSL_peek                                @76
+    SSL_pending                             @77
+    SSL_read                                @78
+    SSL_renegotiate                         @79
+    SSL_rstate_string                       @80
+    SSL_rstate_string_long                  @81
+    SSL_set_accept_state                    @82
+    SSL_set_bio                             @83
+    SSL_set_cipher_list                     @84
+    SSL_set_client_CA_list                  @85
+    SSL_set_connect_state                   @86
+    SSL_set_ex_data                         @158
+    SSL_set_fd                              @87
+    SSL_set_info_callback                   @160
+    SSL_set_purpose                         @236
+    SSL_set_quiet_shutdown                  @161
+    SSL_set_read_ahead                      @88
+    SSL_set_rfd                             @89
+    SSL_set_session                         @90
+    SSL_set_session_id_context              @189
+    SSL_set_shutdown                        @162
+    SSL_set_ssl_method                      @91
+    SSL_set_tmp_dh_callback                 @187
+    SSL_set_tmp_rsa_callback                @186
+    SSL_set_trust                           @239
+    SSL_set_verify                          @94
+    SSL_set_verify_depth                    @226
+    SSL_set_verify_result                   @163
+    SSL_set_wfd                             @95
+    SSL_shutdown                            @96
+    SSL_state                               @166
+    SSL_state_string                        @97
+    SSL_state_string_long                   @98
+    SSL_use_PrivateKey                      @99
+    SSL_use_PrivateKey_ASN1                 @100
+    SSL_use_PrivateKey_file                 @101
+    SSL_use_RSAPrivateKey                   @102
+    SSL_use_RSAPrivateKey_ASN1              @103
+    SSL_use_RSAPrivateKey_file              @104
+    SSL_use_certificate                     @105
+    SSL_use_certificate_ASN1                @106
+    SSL_use_certificate_file                @107
+    SSL_version                             @164
+    SSL_want                                @182
+    SSL_write                               @108
+    SSLv23_client_method                    @110
+    SSLv23_method                           @111
+    SSLv23_server_method                    @112
+    SSLv2_client_method                     @113
+    SSLv2_method                            @114
+    SSLv2_server_method                     @115
+    SSLv3_client_method                     @116
+    SSLv3_method                            @117
+    SSLv3_server_method                     @118
+    TLSv1_client_method                     @172
+    TLSv1_method                            @170
+    TLSv1_server_method                     @171
+    d2i_SSL_SESSION                         @119
+    i2d_SSL_SESSION                         @120
+    sk_SSL_CIPHER_delete                    @200
+    sk_SSL_CIPHER_delete_ptr                @201
+    sk_SSL_CIPHER_dup                       @203
+    sk_SSL_CIPHER_find                      @199
+    sk_SSL_CIPHER_free                      @192
+    sk_SSL_CIPHER_insert                    @224
+    sk_SSL_CIPHER_new                       @190
+    sk_SSL_CIPHER_new_null                  @191
+    sk_SSL_CIPHER_num                       @193
+    sk_SSL_CIPHER_pop                       @198
+    sk_SSL_CIPHER_pop_free                  @204
+    sk_SSL_CIPHER_push                      @197
+    sk_SSL_CIPHER_set                       @195
+    sk_SSL_CIPHER_set_cmp_func              @202
+    sk_SSL_CIPHER_shift                     @205
+    sk_SSL_CIPHER_sort                      @234
+    sk_SSL_CIPHER_unshift                   @227
+    sk_SSL_CIPHER_value                     @194
+    sk_SSL_CIPHER_zero                      @196
+    sk_SSL_COMP_delete                      @216
+    sk_SSL_COMP_delete_ptr                  @217
+    sk_SSL_COMP_dup                         @219
+    sk_SSL_COMP_find                        @215
+    sk_SSL_COMP_free                        @208
+    sk_SSL_COMP_insert                      @223
+    sk_SSL_COMP_new                         @206
+    sk_SSL_COMP_new_null                    @207
+    sk_SSL_COMP_num                         @209
+    sk_SSL_COMP_pop                         @214
+    sk_SSL_COMP_pop_free                    @220
+    sk_SSL_COMP_push                        @213
+    sk_SSL_COMP_set                         @211
+    sk_SSL_COMP_set_cmp_func                @218
+    sk_SSL_COMP_shift                       @221
+    sk_SSL_COMP_sort                        @233
+    sk_SSL_COMP_unshift                     @230
+    sk_SSL_COMP_value                       @210
+    sk_SSL_COMP_zero                        @212
+
Index: opensa/openssl/ms/tenc.bat
diff -u opensa/openssl/ms/tenc.bat:1.1 opensa/openssl/ms/tenc.bat:1.2
--- opensa/openssl/ms/tenc.bat:1.1      Tue Jan 25 23:16:43 2000
+++ opensa/openssl/ms/tenc.bat  Thu Mar  2 21:12:05 2000
@@ -1,14 +1,14 @@
-rem called by testenc
-
-echo test %1 %2 %3 %4 %5 %6 
-%ssleay% %1 %2 %3 %4 %5 %6 -e -bufsize 113 -k test -in %input% -out %tmp1%
-%ssleay% %1 %2 %3 %4 %5 %6 -d -bufsize 157 -k test -in %tmp1% -out %out1%
-%cmp% %input% %out1%
-if errorlevel 1 goto err
-
-echo test base64 %1 %2 %3 %4 %5 %6 
-%ssleay% %1 %2 %3 %4 %5 %6 -a -e -bufsize 113 -k test -in %input% -out %tmp1%
-%ssleay% %1 %2 %3 %4 %5 %6 -a -d -bufsize 157 -k test -in %tmp1% -out %out1%
-%cmp% %input% %out1%
-
-:err
+rem called by testenc
+
+echo test %1 %2 %3 %4 %5 %6 
+%ssleay% %1 %2 %3 %4 %5 %6 -e -bufsize 113 -k test -in %input% -out %tmp1%
+%ssleay% %1 %2 %3 %4 %5 %6 -d -bufsize 157 -k test -in %tmp1% -out %out1%
+%cmp% %input% %out1%
+if errorlevel 1 goto err
+
+echo test base64 %1 %2 %3 %4 %5 %6 
+%ssleay% %1 %2 %3 %4 %5 %6 -a -e -bufsize 113 -k test -in %input% -out %tmp1%
+%ssleay% %1 %2 %3 %4 %5 %6 -a -d -bufsize 157 -k test -in %tmp1% -out %out1%
+%cmp% %input% %out1%
+
+:err
Index: opensa/openssl/ms/test.bat
diff -u opensa/openssl/ms/test.bat:1.1 opensa/openssl/ms/test.bat:1.2
--- opensa/openssl/ms/test.bat:1.1      Tue Jan 25 23:16:43 2000
+++ opensa/openssl/ms/test.bat  Thu Mar  2 21:12:05 2000
@@ -1,189 +1,193 @@
-@echo=off
-
-set test=..\ms
-set opath=%PATH%
-PATH=..\ms;%PATH%
-set OPENSSL_CONF=..\apps\openssl.cnf
-
-rem run this from inside the bin directory
-
-echo rsa_oaep_test
-rsa_oaep_test
-if errorlevel 1 goto done
-
-echo destest
-destest
-if errorlevel 1 goto done
-
-echo ideatest
-ideatest
-if errorlevel 1 goto done
-
-echo bftest
-bftest
-if errorlevel 1 goto done
-
-echo shatest
-shatest
-if errorlevel 1 goto done
-
-echo sha1test
-sha1test
-if errorlevel 1 goto done
-
-echo md5test
-md5test
-if errorlevel 1 goto done
-
-echo md2test
-md2test
-if errorlevel 1 goto done
-
-echo mdc2test
-mdc2test
-if errorlevel 1 goto done
-
-echo rc2test
-rc2test
-if errorlevel 1 goto done
-
-echo rc4test
-rc4test
-if errorlevel 1 goto done
-
-echo randtest
-randtest
-if errorlevel 1 goto done
-
-echo dhtest
-dhtest
-if errorlevel 1 goto done
-
-echo exptest
-exptest
-if errorlevel 1 goto done
-
-echo dsatest
-dsatest
-if errorlevel 1 goto done
-
-echo testenc
-call %test%\testenc openssl
-if errorlevel 1 goto done
-
-echo testpem
-call %test%\testpem openssl
-if errorlevel 1 goto done
-
-echo verify
-copy ..\certs\*.pem cert.tmp >nul
-openssl verify -CAfile cert.tmp ..\certs\*.pem
-
-echo testss
-call %test%\testss openssl
-if errorlevel 1 goto done
-
-echo test sslv2
-ssltest -ssl2
-if errorlevel 1 goto done
-
-echo test sslv2 with server authentication
-ssltest -ssl2 -server_auth -CAfile cert.tmp
-if errorlevel 1 goto done
-
-echo test sslv2 with client authentication
-ssltest -ssl2 -client_auth -CAfile cert.tmp
-if errorlevel 1 goto done
-
-echo test sslv2 with both client and server authentication
-ssltest -ssl2 -server_auth -client_auth -CAfile cert.tmp
-if errorlevel 1 goto done
-
-echo test sslv3
-ssltest -ssl3
-if errorlevel 1 goto done
-
-echo test sslv3 with server authentication
-ssltest -ssl3 -server_auth -CAfile cert.tmp
-if errorlevel 1 goto done
-
-echo test sslv3 with client authentication
-ssltest -ssl3 -client_auth -CAfile cert.tmp
-if errorlevel 1 goto done
-
-echo test sslv3 with both client and server authentication
-ssltest -ssl3 -server_auth -client_auth -CAfile cert.tmp
-if errorlevel 1 goto done
-
-echo test sslv2/sslv3
-ssltest
-if errorlevel 1 goto done
-
-echo test sslv2/sslv3 with server authentication
-ssltest -server_auth -CAfile cert.tmp
-if errorlevel 1 goto done
-
-echo test sslv2/sslv3 with client authentication
-ssltest -client_auth -CAfile cert.tmp
-if errorlevel 1 goto done
-
-echo test sslv2/sslv3 with both client and server authentication
-ssltest -server_auth -client_auth -CAfile cert.tmp
-if errorlevel 1 goto done
-
-echo test sslv2 via BIO pair
-ssltest -bio_pair -ssl2
-if errorlevel 1 goto done
-
-echo test sslv2 with server authentication via BIO pair
-ssltest -bio_pair -ssl2 -server_auth -CAfile cert.tmp
-if errorlevel 1 goto done
-
-echo test sslv2 with client authentication via BIO pair
-ssltest -bio_pair -ssl2 -client_auth -CAfile cert.tmp
-if errorlevel 1 goto done
-
-echo test sslv2 with both client and server authentication via BIO pair
-ssltest -bio_pair -ssl2 -server_auth -client_auth -CAfile cert.tmp
-if errorlevel 1 goto done
-
-echo test sslv3 via BIO pair
-ssltest -bio_pair -ssl3
-if errorlevel 1 goto done
-
-echo test sslv3 with server authentication via BIO pair
-ssltest -bio_pair -ssl3 -server_auth -CAfile cert.tmp
-if errorlevel 1 goto done
-
-echo test sslv3 with client authentication  via BIO pair
-ssltest -bio_pair -ssl3 -client_auth -CAfile cert.tmp
-if errorlevel 1 goto done
-
-echo test sslv3 with both client and server authentication via BIO pair
-ssltest -bio_pair -ssl3 -server_auth -client_auth -CAfile cert.tmp
-if errorlevel 1 goto done
-
-echo test sslv2/sslv3 via BIO pair
-ssltest
-if errorlevel 1 goto done
-
-echo test sslv2/sslv3 with server authentication
-ssltest -bio_pair -server_auth -CAfile cert.tmp
-if errorlevel 1 goto done
-
-echo test sslv2/sslv3 with client authentication via BIO pair
-ssltest -bio_pair -client_auth -CAfile cert.tmp
-if errorlevel 1 goto done
-
-echo test sslv2/sslv3 with both client and server authentication via BIO pair
-ssltest -bio_pair -server_auth -client_auth -CAfile cert.tmp
-if errorlevel 1 goto done
-
-del cert.tmp
-
-echo passed all tests
-goto end
-:done
-echo problems.....
-:end
-PATH=%opath%
+@echo=off
+
+set test=..\ms
+set opath=%PATH%
+PATH=..\ms;%PATH%
+set OPENSSL_CONF=..\apps\openssl.cnf
+
+rem run this from inside the bin directory
+
+echo rsa_test
+rsa_test
+if errorlevel 1 goto done
+
+echo destest
+destest
+if errorlevel 1 goto done
+
+echo ideatest
+ideatest
+if errorlevel 1 goto done
+
+echo bftest
+bftest
+if errorlevel 1 goto done
+
+echo shatest
+shatest
+if errorlevel 1 goto done
+
+echo sha1test
+sha1test
+if errorlevel 1 goto done
+
+echo md5test
+md5test
+if errorlevel 1 goto done
+
+echo md2test
+md2test
+if errorlevel 1 goto done
+
+echo mdc2test
+mdc2test
+if errorlevel 1 goto done
+
+echo rc2test
+rc2test
+if errorlevel 1 goto done
+
+echo rc4test
+rc4test
+if errorlevel 1 goto done
+
+echo randtest
+randtest
+if errorlevel 1 goto done
+
+echo dhtest
+dhtest
+if errorlevel 1 goto done
+
+echo exptest
+exptest
+if errorlevel 1 goto done
+
+echo dsatest
+dsatest
+if errorlevel 1 goto done
+
+echo testenc
+call %test%\testenc openssl
+if errorlevel 1 goto done
+
+echo testpem
+call %test%\testpem openssl
+if errorlevel 1 goto done
+
+echo verify
+copy ..\certs\*.pem cert.tmp >nul
+openssl verify -CAfile cert.tmp ..\certs\*.pem
+
+echo testss
+call %test%\testss openssl
+if errorlevel 1 goto done
+
+echo test sslv2
+ssltest -ssl2
+if errorlevel 1 goto done
+
+echo test sslv2 with server authentication
+ssltest -ssl2 -server_auth -CAfile cert.tmp
+if errorlevel 1 goto done
+
+echo test sslv2 with client authentication
+ssltest -ssl2 -client_auth -CAfile cert.tmp
+if errorlevel 1 goto done
+
+echo test sslv2 with both client and server authentication
+ssltest -ssl2 -server_auth -client_auth -CAfile cert.tmp
+if errorlevel 1 goto done
+
+echo test sslv3
+ssltest -ssl3
+if errorlevel 1 goto done
+
+echo test sslv3 with server authentication
+ssltest -ssl3 -server_auth -CAfile cert.tmp
+if errorlevel 1 goto done
+
+echo test sslv3 with client authentication
+ssltest -ssl3 -client_auth -CAfile cert.tmp
+if errorlevel 1 goto done
+
+echo test sslv3 with both client and server authentication
+ssltest -ssl3 -server_auth -client_auth -CAfile cert.tmp
+if errorlevel 1 goto done
+
+echo test sslv2/sslv3
+ssltest
+if errorlevel 1 goto done
+
+echo test sslv2/sslv3 with server authentication
+ssltest -server_auth -CAfile cert.tmp
+if errorlevel 1 goto done
+
+echo test sslv2/sslv3 with client authentication
+ssltest -client_auth -CAfile cert.tmp
+if errorlevel 1 goto done
+
+echo test sslv2/sslv3 with both client and server authentication
+ssltest -server_auth -client_auth -CAfile cert.tmp
+if errorlevel 1 goto done
+
+echo test sslv2 via BIO pair
+ssltest -bio_pair -ssl2
+if errorlevel 1 goto done
+
+echo test sslv2/sslv3 with 1024 bit DHE via BIO pair
+ssltest -bio_pair -dhe1024 -v
+if errorlevel 1 goto done
+
+echo test sslv2 with server authentication via BIO pair
+ssltest -bio_pair -ssl2 -server_auth -CAfile cert.tmp
+if errorlevel 1 goto done
+
+echo test sslv2 with client authentication via BIO pair
+ssltest -bio_pair -ssl2 -client_auth -CAfile cert.tmp
+if errorlevel 1 goto done
+
+echo test sslv2 with both client and server authentication via BIO pair
+ssltest -bio_pair -ssl2 -server_auth -client_auth -CAfile cert.tmp
+if errorlevel 1 goto done
+
+echo test sslv3 via BIO pair
+ssltest -bio_pair -ssl3
+if errorlevel 1 goto done
+
+echo test sslv3 with server authentication via BIO pair
+ssltest -bio_pair -ssl3 -server_auth -CAfile cert.tmp
+if errorlevel 1 goto done
+
+echo test sslv3 with client authentication  via BIO pair
+ssltest -bio_pair -ssl3 -client_auth -CAfile cert.tmp
+if errorlevel 1 goto done
+
+echo test sslv3 with both client and server authentication via BIO pair
+ssltest -bio_pair -ssl3 -server_auth -client_auth -CAfile cert.tmp
+if errorlevel 1 goto done
+
+echo test sslv2/sslv3 via BIO pair
+ssltest
+if errorlevel 1 goto done
+
+echo test sslv2/sslv3 with server authentication
+ssltest -bio_pair -server_auth -CAfile cert.tmp
+if errorlevel 1 goto done
+
+echo test sslv2/sslv3 with client authentication via BIO pair
+ssltest -bio_pair -client_auth -CAfile cert.tmp
+if errorlevel 1 goto done
+
+echo test sslv2/sslv3 with both client and server authentication via BIO pair
+ssltest -bio_pair -server_auth -client_auth -CAfile cert.tmp
+if errorlevel 1 goto done
+
+del cert.tmp
+
+echo passed all tests
+goto end
+:done
+echo problems.....
+:end
+PATH=%opath%
Index: opensa/openssl/ms/testenc.bat
diff -u opensa/openssl/ms/testenc.bat:1.1 opensa/openssl/ms/testenc.bat:1.2
--- opensa/openssl/ms/testenc.bat:1.1   Tue Jan 25 23:16:43 2000
+++ opensa/openssl/ms/testenc.bat       Thu Mar  2 21:12:05 2000
@@ -1,94 +1,94 @@
-
-echo start testenc
-echo=off
-path=..\ms;%path%
-set ssleay=%1%
-set input=..\ms\testenc.bat
-set tmp1=..\ms\cipher.out
-set out1=..\ms\clear.out
-set cmp=perl ..\ms\cmp.pl
-
-cd
-call tenc.bat enc
-if errorlevel 1 goto err
-
-call tenc.bat rc4
-if errorlevel 1 goto err
-
-call tenc.bat des-cfb
-if errorlevel 1 goto err
-
-call tenc.bat des-ede-cfb
-if errorlevel 1 goto err
-
-call tenc.bat des-ede3-cfb
-if errorlevel 1 goto err
-
-call tenc.bat des-ofb
-if errorlevel 1 goto err
-
-call tenc.bat des-ede-ofb
-if errorlevel 1 goto err
-
-call tenc.bat des-ede3-ofb
-if errorlevel 1 goto err
-
-call tenc.bat des-ecb
-if errorlevel 1 goto err
-
-call tenc.bat des-ede
-if errorlevel 1 goto err
-
-call tenc.bat des-ede3
-if errorlevel 1 goto err
-
-call tenc.bat des-cbc
-if errorlevel 1 goto err
-
-call tenc.bat des-ede-cbc
-if errorlevel 1 goto err
-
-call tenc.bat des-ede3-cbc
-if errorlevel 1 goto err
-
-call tenc.bat idea-ecb
-if errorlevel 1 goto err
-
-call tenc.bat idea-cfb
-if errorlevel 1 goto err
-
-call tenc.bat idea-ofb
-if errorlevel 1 goto err
-
-call tenc.bat idea-cbc
-if errorlevel 1 goto err
-
-call tenc.bat rc2-ecb
-if errorlevel 1 goto err
-
-call tenc.bat rc2-cfb
-if errorlevel 1 goto err
-
-call tenc.bat rc2-ofb
-if errorlevel 1 goto err
-
-call tenc.bat rc2-cbc
-if errorlevel 1 goto err
-
-call tenc.bat bf-ecb
-if errorlevel 1 goto err
-
-call tenc.bat bf-cfb
-if errorlevel 1 goto err
-
-call tenc.bat bf-ofb
-if errorlevel 1 goto err
-
-call tenc.bat bf-cbc
-if errorlevel 1 goto err
-
-echo OK
-del %out1%
-del %tmp1%
-:err
-
+
+echo start testenc
+echo=off
+path=..\ms;%path%
+set ssleay=%1%
+set input=..\ms\testenc.bat
+set tmp1=..\ms\cipher.out
+set out1=..\ms\clear.out
+set cmp=perl ..\ms\cmp.pl
+
+cd
+call tenc.bat enc
+if errorlevel 1 goto err
+
+call tenc.bat rc4
+if errorlevel 1 goto err
+
+call tenc.bat des-cfb
+if errorlevel 1 goto err
+
+call tenc.bat des-ede-cfb
+if errorlevel 1 goto err
+
+call tenc.bat des-ede3-cfb
+if errorlevel 1 goto err
+
+call tenc.bat des-ofb
+if errorlevel 1 goto err
+
+call tenc.bat des-ede-ofb
+if errorlevel 1 goto err
+
+call tenc.bat des-ede3-ofb
+if errorlevel 1 goto err
+
+call tenc.bat des-ecb
+if errorlevel 1 goto err
+
+call tenc.bat des-ede
+if errorlevel 1 goto err
+
+call tenc.bat des-ede3
+if errorlevel 1 goto err
+
+call tenc.bat des-cbc
+if errorlevel 1 goto err
+
+call tenc.bat des-ede-cbc
+if errorlevel 1 goto err
+
+call tenc.bat des-ede3-cbc
+if errorlevel 1 goto err
+
+call tenc.bat idea-ecb
+if errorlevel 1 goto err
+
+call tenc.bat idea-cfb
+if errorlevel 1 goto err
+
+call tenc.bat idea-ofb
+if errorlevel 1 goto err
+
+call tenc.bat idea-cbc
+if errorlevel 1 goto err
+
+call tenc.bat rc2-ecb
+if errorlevel 1 goto err
+
+call tenc.bat rc2-cfb
+if errorlevel 1 goto err
+
+call tenc.bat rc2-ofb
+if errorlevel 1 goto err
+
+call tenc.bat rc2-cbc
+if errorlevel 1 goto err
+
+call tenc.bat bf-ecb
+if errorlevel 1 goto err
+
+call tenc.bat bf-cfb
+if errorlevel 1 goto err
+
+call tenc.bat bf-ofb
+if errorlevel 1 goto err
+
+call tenc.bat bf-cbc
+if errorlevel 1 goto err
+
+echo OK
+del %out1%
+del %tmp1%
+:err
+
Index: opensa/openssl/ms/testpem.bat
diff -u opensa/openssl/ms/testpem.bat:1.1 opensa/openssl/ms/testpem.bat:1.2
--- opensa/openssl/ms/testpem.bat:1.1   Tue Jan 25 23:16:43 2000
+++ opensa/openssl/ms/testpem.bat       Thu Mar  2 21:12:05 2000
@@ -1,32 +1,32 @@
-echo=off
-set ssleay=%1%
-set tmp1=pem.out
-set cmp=fc.exe
-
-call tpem.bat crl ..\test\testcrl.pem
-if errorlevel 1 goto err
-
-call tpem.bat pkcs7 ..\test\testp7.pem
-if errorlevel 1 goto err
-
-call tpem.bat req ..\test\testreq2.pem
-if errorlevel 1 goto err
-
-call tpem.bat rsa ..\test\testrsa.pem
-if errorlevel 1 goto err
-
-call tpem.bat x509 ..\test\testx509.pem
-if errorlevel 1 goto err
-
-call tpem.bat x509 ..\test\v3-cert1.pem
-if errorlevel 1 goto err
-
-call tpem.bat x509 ..\test\v3-cert1.pem
-if errorlevel 1 goto err
-
-call tpem.bat sess_id ..\test\testsid.pem
-if errorlevel 1 goto err
-
-echo OK
-del %tmp1%
-:err
+echo=off
+set ssleay=%1%
+set tmp1=pem.out
+set cmp=fc.exe
+
+call tpem.bat crl ..\test\testcrl.pem
+if errorlevel 1 goto err
+
+call tpem.bat pkcs7 ..\test\testp7.pem
+if errorlevel 1 goto err
+
+call tpem.bat req ..\test\testreq2.pem
+if errorlevel 1 goto err
+
+call tpem.bat rsa ..\test\testrsa.pem
+if errorlevel 1 goto err
+
+call tpem.bat x509 ..\test\testx509.pem
+if errorlevel 1 goto err
+
+call tpem.bat x509 ..\test\v3-cert1.pem
+if errorlevel 1 goto err
+
+call tpem.bat x509 ..\test\v3-cert1.pem
+if errorlevel 1 goto err
+
+call tpem.bat sess_id ..\test\testsid.pem
+if errorlevel 1 goto err
+
+echo OK
+del %tmp1%
+:err
Index: opensa/openssl/ms/testss.bat
diff -u opensa/openssl/ms/testss.bat:1.1 opensa/openssl/ms/testss.bat:1.2
--- opensa/openssl/ms/testss.bat:1.1    Tue Jan 25 23:16:43 2000
+++ opensa/openssl/ms/testss.bat        Thu Mar  2 21:12:05 2000
@@ -1,98 +1,98 @@
-echo=on
-
-rem set ssleay=..\out\ssleay
-set ssleay=%1
-
-set reqcmd=%ssleay% req
-set x509cmd=%ssleay% x509
-set verifycmd=%ssleay% verify
-
-set CAkey=keyCA.ss
-set CAcert=certCA.ss
-set CAserial=certCA.srl
-set CAreq=reqCA.ss
-set CAconf=..\test\CAss.cnf
-set CAreq2=req2CA.ss   
-
-set Uconf=..\test\Uss.cnf
-set Ukey=keyU.ss
-set Ureq=reqU.ss
-set Ucert=certU.ss
-
-echo make a certificate request using 'req'
-%reqcmd% -config %CAconf% -out %CAreq% -keyout %CAkey% -new
-if errorlevel 1 goto e_req
-
-echo convert the certificate request into a self signed certificate using 'x509'
-%x509cmd% -CAcreateserial -in %CAreq% -days 30 -req -out %CAcert% -signkey %CAkey% 
>err.ss
-if errorlevel 1 goto e_x509
-
-echo --
-echo convert a certificate into a certificate request using 'x509'
-%x509cmd% -in %CAcert% -x509toreq -signkey %CAkey% -out %CAreq2% >err.ss
-if errorlevel 1 goto e_x509_2
-
-%reqcmd% -verify -in %CAreq% -noout
-if errorlevel 1 goto e_vrfy_1
-
-%reqcmd% -verify -in %CAreq2% -noout
-if errorlevel 1 goto e_vrfy_2
-
-%verifycmd% -CAfile %CAcert% %CAcert%
-if errorlevel 1 goto e_vrfy_3
-
-echo --
-echo make another certificate request using 'req'
-%reqcmd% -config %Uconf% -out %Ureq% -keyout %Ukey% -new >err.ss
-if errorlevel 1 goto e_req_gen
-
-echo --
-echo sign certificate request with the just created CA via 'x509'
-%x509cmd% -CAcreateserial -in %Ureq% -days 30 -req -out %Ucert% -CA %CAcert% -CAkey 
%CAkey% -CAserial %CAserial%
-if errorlevel 1 goto e_x_sign
-
-%verifycmd% -CAfile %CAcert% %Ucert%
-echo --
-echo Certificate details
-%x509cmd% -subject -issuer -startdate -enddate -noout -in %Ucert%
-
-echo Everything appeared to work
-echo --
-echo The generated CA certificate is %CAcert%
-echo The generated CA private key is %CAkey%
-echo The current CA signing serial number is in %CAserial%
-
-echo The generated user certificate is %Ucert%
-echo The generated user private key is %Ukey%
-echo --
-
-del err.ss
-
-goto end
-
-:e_req
-echo error using 'req' to generate a certificate request
-goto end
-:e_x509
-echo error using 'x509' to self sign a certificate request
-goto end
-:e_x509_2
-echo error using 'x509' convert a certificate to a certificate request
-goto end
-:e_vrfy_1
-echo first generated request is invalid
-goto end
-:e_vrfy_2
-echo second generated request is invalid
-goto end
-:e_vrfy_3
-echo first generated cert is invalid
-goto end
-:e_req_gen
-echo error using 'req' to generate a certificate request
-goto end
-:e_x_sign
-echo error using 'x509' to sign a certificate request
-goto end
-
-:end
+echo=on
+
+rem set ssleay=..\out\ssleay
+set ssleay=%1
+
+set reqcmd=%ssleay% req
+set x509cmd=%ssleay% x509
+set verifycmd=%ssleay% verify
+
+set CAkey=keyCA.ss
+set CAcert=certCA.ss
+set CAserial=certCA.srl
+set CAreq=reqCA.ss
+set CAconf=..\test\CAss.cnf
+set CAreq2=req2CA.ss   
+
+set Uconf=..\test\Uss.cnf
+set Ukey=keyU.ss
+set Ureq=reqU.ss
+set Ucert=certU.ss
+
+echo make a certificate request using 'req'
+%reqcmd% -config %CAconf% -out %CAreq% -keyout %CAkey% -new
+if errorlevel 1 goto e_req
+
+echo convert the certificate request into a self signed certificate using 'x509'
+%x509cmd% -CAcreateserial -in %CAreq% -days 30 -req -out %CAcert% -signkey %CAkey% 
+>err.ss
+if errorlevel 1 goto e_x509
+
+echo --
+echo convert a certificate into a certificate request using 'x509'
+%x509cmd% -in %CAcert% -x509toreq -signkey %CAkey% -out %CAreq2% >err.ss
+if errorlevel 1 goto e_x509_2
+
+%reqcmd% -verify -in %CAreq% -noout
+if errorlevel 1 goto e_vrfy_1
+
+%reqcmd% -verify -in %CAreq2% -noout
+if errorlevel 1 goto e_vrfy_2
+
+%verifycmd% -CAfile %CAcert% %CAcert%
+if errorlevel 1 goto e_vrfy_3
+
+echo --
+echo make another certificate request using 'req'
+%reqcmd% -config %Uconf% -out %Ureq% -keyout %Ukey% -new >err.ss
+if errorlevel 1 goto e_req_gen
+
+echo --
+echo sign certificate request with the just created CA via 'x509'
+%x509cmd% -CAcreateserial -in %Ureq% -days 30 -req -out %Ucert% -CA %CAcert% -CAkey 
+%CAkey% -CAserial %CAserial%
+if errorlevel 1 goto e_x_sign
+
+%verifycmd% -CAfile %CAcert% %Ucert%
+echo --
+echo Certificate details
+%x509cmd% -subject -issuer -startdate -enddate -noout -in %Ucert%
+
+echo Everything appeared to work
+echo --
+echo The generated CA certificate is %CAcert%
+echo The generated CA private key is %CAkey%
+echo The current CA signing serial number is in %CAserial%
+
+echo The generated user certificate is %Ucert%
+echo The generated user private key is %Ukey%
+echo --
+
+del err.ss
+
+goto end
+
+:e_req
+echo error using 'req' to generate a certificate request
+goto end
+:e_x509
+echo error using 'x509' to self sign a certificate request
+goto end
+:e_x509_2
+echo error using 'x509' convert a certificate to a certificate request
+goto end
+:e_vrfy_1
+echo first generated request is invalid
+goto end
+:e_vrfy_2
+echo second generated request is invalid
+goto end
+:e_vrfy_3
+echo first generated cert is invalid
+goto end
+:e_req_gen
+echo error using 'req' to generate a certificate request
+goto end
+:e_x_sign
+echo error using 'x509' to sign a certificate request
+goto end
+
+:end
Index: opensa/openssl/ms/tpem.bat
diff -u opensa/openssl/ms/tpem.bat:1.1 opensa/openssl/ms/tpem.bat:1.2
--- opensa/openssl/ms/tpem.bat:1.1      Tue Jan 25 23:16:43 2000
+++ opensa/openssl/ms/tpem.bat  Thu Mar  2 21:12:05 2000
@@ -1,6 +1,6 @@
-rem called by testpem
-
-echo test %1 %2
-%ssleay% %1 -in %2 -out %tmp1%
-%cmp% %2 %tmp1%
-
+rem called by testpem
+
+echo test %1 %2
+%ssleay% %1 -in %2 -out %tmp1%
+%cmp% %2 %tmp1%
+
Index: opensa/openssl/ms/w31dll.mak
diff -u opensa/openssl/ms/w31dll.mak:1.1 opensa/openssl/ms/w31dll.mak:1.2
--- opensa/openssl/ms/w31dll.mak:1.1    Tue Jan 25 23:16:43 2000
+++ opensa/openssl/ms/w31dll.mak        Thu Mar  2 21:12:05 2000
@@ -1,2622 +1,2751 @@
-# This makefile has been automatically generated from the OpenSSL distribution.
-# This single makefile will build the complete OpenSSL distribution and
-# by default leave the 'intertesting' output files in .\out and the stuff
-# that needs deleting in .\tmp.
-# The file was generated by running 'make makefile.one', which
-# does a 'make files', which writes all the environment variables from all
-# the makefiles to the file call MINFO.  This file is used by
-# util\mk1mf.pl to generate makefile.one.
-# The 'makefile per directory' system suites me when developing this
-# library and also so I can 'distribute' indervidual library sections.
-# The one monster makefile better suits building in non-unix
-# environments.
-
-INSTALLTOP=\usr\local\ssl
-
-# Set your compiler options
-PLATFORM=VC-W31-32
-CC=cl
-CFLAG=/ALw /Gx- /Gt256 /Gf /G2 /f- /Ocgnotb2 /W3 /WX -DL_ENDIAN /nologo -DWINDOWS 
-DWIN16
-APP_CFLAG=/Gw /FPi87
-LIB_CFLAG=/Gw -D_WINDLL -D_DLL
-SHLIB_CFLAG=
-APP_EX_OBJ=setargv.obj
-SHLIB_EX_OBJ=
-# add extra libraries to this define, for solaris -lsocket -lnsl would
-# be added
-EX_LIBS=oldnames llibcewq libw winsock
-
-# The OpenSSL directory
-SRC_D=.
-
-LINK=link
-LFLAGS= /FARCALL /NOLOGO /NOD /SEG:1024 /ONERROR:NOEXE /NOE /PACKC:60000 /PACKD:60000 
/STACK:20000 /ALIGN:256
-
-BN_ASM_OBJ=crypto\bn\asm\x86w32.obj
-BN_ASM_SRC=crypto\bn\asm\x86w32.asm
-DES_ENC_OBJ=
-DES_ENC_SRC=
-BF_ENC_OBJ=
-BF_ENC_SRC=
-CAST_ENC_OBJ=
-CAST_ENC_SRC=
-RC4_ENC_OBJ=
-RC4_ENC_SRC=
-RC5_ENC_OBJ=
-RC5_ENC_SRC=
-MD5_ASM_OBJ=
-MD5_ASM_SRC=
-SHA1_ASM_OBJ=
-SHA1_ASM_SRC=
-RMD160_ASM_OBJ=
-RMD160_ASM_SRC=
-
-# The output directory for everything intersting
-OUT_D=out16dll
-# The output directory for all the temporary muck
-TMP_D=tmp16dll
-# The output directory for the header files
-INC_D=inc16
-INCO_D=inc16\openssl
-
-CP=copy
-RM=del
-RANLIB=
-MKDIR=mkdir
-MKLIB=lib /PAGESIZE:1024
-MLFLAGS= /FARCALL /NOLOGO /NOD /SEG:1024 /ONERROR:NOEXE /NOE /PACKC:60000 /PACKD:60000
-ASM=ml /Cp /c /Cx
-
-######################################################
-# You should not need to touch anything below this point
-######################################################
-
-E_EXE=openssl
-SSL=ssleay16
-CRYPTO=libeay16
-RSAGLUE=RSAglue
-
-# BIN_D  - Binary output directory
-# TEST_D - Binary test file output directory
-# LIB_D  - library output directory
-# Note: if you change these point to different directories then uncomment out
-# the lines around the 'NB' comment below.
-# 
-BIN_D=$(OUT_D)
-TEST_D=$(OUT_D)
-LIB_D=$(OUT_D)
-
-# INCL_D - local library directory
-# OBJ_D  - temp object file directory
-OBJ_D=$(TMP_D)
-INCL_D=$(TMP_D)
-
-O_SSL=     $(LIB_D)\$(SSL).dll
-O_CRYPTO=  $(LIB_D)\$(CRYPTO).dll
-O_RSAGLUE= $(LIB_D)\$(RSAGLUE).lib
-SO_SSL=    $(SSL)
-SO_CRYPTO= $(CRYPTO)
-L_SSL=     $(LIB_D)\$(SSL).lib
-L_CRYPTO=  $(LIB_D)\$(CRYPTO).lib
-
-L_LIBS= $(L_SSL) $(L_CRYPTO)
-#L_LIBS= $(O_SSL) $(O_RSAGLUE) -lrsaref $(O_CRYPTO)
-
-######################################################
-# Don't touch anything below this point
-######################################################
-
-INC=-I$(INC_D) -I$(INCL_D)
-APP_CFLAGS=$(INC) $(CFLAG) $(APP_CFLAG)
-LIB_CFLAGS=$(INC) $(CFLAG) $(LIB_CFLAG)
-SHLIB_CFLAGS=$(INC) $(CFLAG) $(LIB_CFLAG) $(SHLIB_CFLAG)
-LIBS_DEP=$(O_CRYPTO) $(O_RSAGLUE) $(O_SSL)
-
-#############################################
-HEADER=$(INCL_D)\cryptlib.h \
-       $(INCL_D)\buildinf.h $(INCL_D)\md5_locl.h $(INCL_D)\sha_locl.h \
-       $(INCL_D)\rmd_locl.h $(INCL_D)\rmdconst.h $(INCL_D)\des_locl.h \
-       $(INCL_D)\rpc_des.h $(INCL_D)\podd.h $(INCL_D)\sk.h \
-       $(INCL_D)\spr.h $(INCL_D)\des_ver.h $(INCL_D)\rc2_locl.h \
-       $(INCL_D)\rc4_locl.h $(INCL_D)\rc5_locl.h $(INCL_D)\idea_lcl.h \
-       $(INCL_D)\bf_pi.h $(INCL_D)\bf_locl.h $(INCL_D)\cast_s.h \
-       $(INCL_D)\cast_lcl.h $(INCL_D)\bn_lcl.h $(INCL_D)\bn_prime.h \
-       $(INCL_D)\bss_file.c $(INCL_D)\obj_dat.h $(INCL_D)\conf_lcl.h \
-       $(INCL_D)\ssl_locl.h $(INCL_D)\apps.h $(INCL_D)\progs.h \
-       $(INCL_D)\s_apps.h $(INCL_D)\testdsa.h $(INCL_D)\testrsa.h
-
-EXHEADER=$(INCO_D)\e_os.h \
-       $(INCO_D)\e_os2.h $(INCO_D)\crypto.h $(INCO_D)\tmdiff.h \
-       $(INCO_D)\opensslv.h $(INCO_D)\opensslconf.h $(INCO_D)\ebcdic.h \
-       $(INCO_D)\md2.h $(INCO_D)\md5.h $(INCO_D)\sha.h \
-       $(INCO_D)\mdc2.h $(INCO_D)\hmac.h $(INCO_D)\ripemd.h \
-       $(INCO_D)\des.h $(INCO_D)\rc2.h $(INCO_D)\rc4.h \
-       $(INCO_D)\rc5.h $(INCO_D)\idea.h $(INCO_D)\blowfish.h \
-       $(INCO_D)\cast.h $(INCO_D)\bn.h $(INCO_D)\rsa.h \
-       $(INCO_D)\dsa.h $(INCO_D)\dh.h $(INCO_D)\buffer.h \
-       $(INCO_D)\bio.h $(INCO_D)\stack.h $(INCO_D)\safestack.h \
-       $(INCO_D)\lhash.h $(INCO_D)\rand.h $(INCO_D)\err.h \
-       $(INCO_D)\objects.h $(INCO_D)\evp.h $(INCO_D)\asn1.h \
-       $(INCO_D)\asn1_mac.h $(INCO_D)\pem.h $(INCO_D)\pem2.h \
-       $(INCO_D)\x509.h $(INCO_D)\x509_vfy.h $(INCO_D)\x509v3.h \
-       $(INCO_D)\conf.h $(INCO_D)\txt_db.h $(INCO_D)\pkcs7.h \
-       $(INCO_D)\pkcs12.h $(INCO_D)\comp.h $(INCO_D)\ssl.h \
-       $(INCO_D)\ssl2.h $(INCO_D)\ssl3.h $(INCO_D)\ssl23.h \
-       $(INCO_D)\tls1.h $(INCO_D)\rsaref.h
-
-T_OBJ=$(OBJ_D)\md2test.obj \
-       $(OBJ_D)\md5test.obj $(OBJ_D)\shatest.obj $(OBJ_D)\sha1test.obj \
-       $(OBJ_D)\mdc2test.obj $(OBJ_D)\hmactest.obj $(OBJ_D)\rmdtest.obj \
-       $(OBJ_D)\destest.obj $(OBJ_D)\rc2test.obj $(OBJ_D)\rc4test.obj \
-       $(OBJ_D)\rc5test.obj $(OBJ_D)\ideatest.obj $(OBJ_D)\bftest.obj \
-       $(OBJ_D)\casttest.obj $(OBJ_D)\bntest.obj $(OBJ_D)\exptest.obj \
-       $(OBJ_D)\rsa_oaep_test.obj $(OBJ_D)\dsatest.obj $(OBJ_D)\dhtest.obj \
-       $(OBJ_D)\randtest.obj $(OBJ_D)\ssltest.obj
-
-E_OBJ=$(OBJ_D)\verify.obj \
-       $(OBJ_D)\asn1pars.obj $(OBJ_D)\req.obj $(OBJ_D)\dgst.obj \
-       $(OBJ_D)\dh.obj $(OBJ_D)\enc.obj $(OBJ_D)\gendh.obj \
-       $(OBJ_D)\errstr.obj $(OBJ_D)\ca.obj $(OBJ_D)\pkcs7.obj \
-       $(OBJ_D)\crl2p7.obj $(OBJ_D)\crl.obj $(OBJ_D)\rsa.obj \
-       $(OBJ_D)\dsa.obj $(OBJ_D)\dsaparam.obj $(OBJ_D)\x509.obj \
-       $(OBJ_D)\genrsa.obj $(OBJ_D)\gendsa.obj $(OBJ_D)\s_server.obj \
-       $(OBJ_D)\s_client.obj $(OBJ_D)\speed.obj $(OBJ_D)\s_time.obj \
-       $(OBJ_D)\apps.obj $(OBJ_D)\s_cb.obj $(OBJ_D)\s_socket.obj \
-       $(OBJ_D)\version.obj $(OBJ_D)\sess_id.obj $(OBJ_D)\ciphers.obj \
-       $(OBJ_D)\nseq.obj $(OBJ_D)\pkcs12.obj $(OBJ_D)\pkcs8.obj \
-       $(OBJ_D)\openssl.obj
-
-CRYPTOOBJ=$(OBJ_D)\cryptlib.obj \
-       $(OBJ_D)\mem.obj $(OBJ_D)\cversion.obj $(OBJ_D)\ex_data.obj \
-       $(OBJ_D)\tmdiff.obj $(OBJ_D)\cpt_err.obj $(OBJ_D)\md2_dgst.obj \
-       $(OBJ_D)\md2_one.obj $(OBJ_D)\md5_dgst.obj $(OBJ_D)\md5_one.obj \
-       $(OBJ_D)\sha_dgst.obj $(OBJ_D)\sha1dgst.obj $(OBJ_D)\sha_one.obj \
-       $(OBJ_D)\sha1_one.obj $(OBJ_D)\mdc2dgst.obj $(OBJ_D)\mdc2_one.obj \
-       $(OBJ_D)\hmac.obj $(OBJ_D)\rmd_dgst.obj $(OBJ_D)\rmd_one.obj \
-       $(OBJ_D)\set_key.obj $(OBJ_D)\ecb_enc.obj $(OBJ_D)\cbc_enc.obj \
-       $(OBJ_D)\ecb3_enc.obj $(OBJ_D)\cfb64enc.obj $(OBJ_D)\cfb64ede.obj \
-       $(OBJ_D)\cfb_enc.obj $(OBJ_D)\ofb64ede.obj $(OBJ_D)\enc_read.obj \
-       $(OBJ_D)\enc_writ.obj $(OBJ_D)\ofb64enc.obj $(OBJ_D)\ofb_enc.obj \
-       $(OBJ_D)\str2key.obj $(OBJ_D)\pcbc_enc.obj $(OBJ_D)\qud_cksm.obj \
-       $(OBJ_D)\rand_key.obj $(OBJ_D)\des_enc.obj $(OBJ_D)\fcrypt_b.obj \
-       $(OBJ_D)\read2pwd.obj $(OBJ_D)\fcrypt.obj $(OBJ_D)\xcbc_enc.obj \
-       $(OBJ_D)\read_pwd.obj $(OBJ_D)\rpc_enc.obj $(OBJ_D)\cbc_cksm.obj \
-       $(OBJ_D)\supp.obj $(OBJ_D)\ede_cbcm_enc.obj $(OBJ_D)\rc2_ecb.obj \
-       $(OBJ_D)\rc2_skey.obj $(OBJ_D)\rc2_cbc.obj $(OBJ_D)\rc2cfb64.obj \
-       $(OBJ_D)\rc2ofb64.obj $(OBJ_D)\rc4_skey.obj $(OBJ_D)\rc4_enc.obj \
-       $(OBJ_D)\rc5_skey.obj $(OBJ_D)\rc5_ecb.obj $(OBJ_D)\rc5_enc.obj \
-       $(OBJ_D)\rc5cfb64.obj $(OBJ_D)\rc5ofb64.obj $(OBJ_D)\i_cbc.obj \
-       $(OBJ_D)\i_cfb64.obj $(OBJ_D)\i_ofb64.obj $(OBJ_D)\i_ecb.obj \
-       $(OBJ_D)\i_skey.obj $(OBJ_D)\bf_skey.obj $(OBJ_D)\bf_ecb.obj \
-       $(OBJ_D)\bf_enc.obj $(OBJ_D)\bf_cfb64.obj $(OBJ_D)\bf_ofb64.obj \
-       $(OBJ_D)\c_skey.obj $(OBJ_D)\c_ecb.obj $(OBJ_D)\c_enc.obj \
-       $(OBJ_D)\c_cfb64.obj $(OBJ_D)\c_ofb64.obj $(OBJ_D)\bn_add.obj \
-       $(OBJ_D)\bn_div.obj $(OBJ_D)\bn_exp.obj $(OBJ_D)\bn_lib.obj \
-       $(OBJ_D)\bn_mul.obj $(OBJ_D)\bn_print.obj $(OBJ_D)\bn_rand.obj \
-       $(OBJ_D)\bn_shift.obj $(OBJ_D)\bn_word.obj $(OBJ_D)\bn_blind.obj \
-       $(OBJ_D)\bn_gcd.obj $(OBJ_D)\bn_prime.obj $(OBJ_D)\bn_err.obj \
-       $(OBJ_D)\bn_sqr.obj $(BN_ASM_OBJ) $(OBJ_D)\bn_recp.obj \
-       $(OBJ_D)\bn_mont.obj $(OBJ_D)\bn_mpi.obj $(OBJ_D)\bn_exp2.obj \
-       $(OBJ_D)\rsa_eay.obj $(OBJ_D)\rsa_gen.obj $(OBJ_D)\rsa_lib.obj \
-       $(OBJ_D)\rsa_sign.obj $(OBJ_D)\rsa_saos.obj $(OBJ_D)\rsa_err.obj \
-       $(OBJ_D)\rsa_pk1.obj $(OBJ_D)\rsa_ssl.obj $(OBJ_D)\rsa_none.obj \
-       $(OBJ_D)\rsa_oaep.obj $(OBJ_D)\rsa_chk.obj $(OBJ_D)\dsa_gen.obj \
-       $(OBJ_D)\dsa_key.obj $(OBJ_D)\dsa_lib.obj $(OBJ_D)\dsa_asn1.obj \
-       $(OBJ_D)\dsa_vrf.obj $(OBJ_D)\dsa_sign.obj $(OBJ_D)\dsa_err.obj \
-       $(OBJ_D)\dh_gen.obj $(OBJ_D)\dh_key.obj $(OBJ_D)\dh_lib.obj \
-       $(OBJ_D)\dh_check.obj $(OBJ_D)\dh_err.obj $(OBJ_D)\buffer.obj \
-       $(OBJ_D)\buf_err.obj $(OBJ_D)\bio_lib.obj $(OBJ_D)\bio_cb.obj \
-       $(OBJ_D)\bio_err.obj $(OBJ_D)\bss_mem.obj $(OBJ_D)\bss_null.obj \
-       $(OBJ_D)\bss_fd.obj $(OBJ_D)\bss_file.obj $(OBJ_D)\bss_sock.obj \
-       $(OBJ_D)\bss_conn.obj $(OBJ_D)\bf_null.obj $(OBJ_D)\bf_buff.obj \
-       $(OBJ_D)\b_print.obj $(OBJ_D)\b_dump.obj $(OBJ_D)\b_sock.obj \
-       $(OBJ_D)\bss_acpt.obj $(OBJ_D)\bf_nbio.obj $(OBJ_D)\bss_log.obj \
-       $(OBJ_D)\bss_bio.obj $(OBJ_D)\stack.obj $(OBJ_D)\lhash.obj \
-       $(OBJ_D)\lh_stats.obj $(OBJ_D)\md_rand.obj $(OBJ_D)\randfile.obj \
-       $(OBJ_D)\rand_lib.obj $(OBJ_D)\err.obj $(OBJ_D)\err_all.obj \
-       $(OBJ_D)\err_prn.obj $(OBJ_D)\o_names.obj $(OBJ_D)\obj_dat.obj \
-       $(OBJ_D)\obj_lib.obj $(OBJ_D)\obj_err.obj $(OBJ_D)\encode.obj \
-       $(OBJ_D)\digest.obj $(OBJ_D)\evp_enc.obj $(OBJ_D)\evp_key.obj \
-       $(OBJ_D)\e_ecb_d.obj $(OBJ_D)\e_cbc_d.obj $(OBJ_D)\e_cfb_d.obj \
-       $(OBJ_D)\e_ofb_d.obj $(OBJ_D)\e_ecb_i.obj $(OBJ_D)\e_cbc_i.obj \
-       $(OBJ_D)\e_cfb_i.obj $(OBJ_D)\e_ofb_i.obj $(OBJ_D)\e_ecb_3d.obj \
-       $(OBJ_D)\e_cbc_3d.obj $(OBJ_D)\e_rc4.obj $(OBJ_D)\names.obj \
-       $(OBJ_D)\e_cfb_3d.obj $(OBJ_D)\e_ofb_3d.obj $(OBJ_D)\e_xcbc_d.obj \
-       $(OBJ_D)\e_ecb_r2.obj $(OBJ_D)\e_cbc_r2.obj $(OBJ_D)\e_cfb_r2.obj \
-       $(OBJ_D)\e_ofb_r2.obj $(OBJ_D)\e_ecb_bf.obj $(OBJ_D)\e_cbc_bf.obj \
-       $(OBJ_D)\e_cfb_bf.obj $(OBJ_D)\e_ofb_bf.obj $(OBJ_D)\e_ecb_c.obj \
-       $(OBJ_D)\e_cbc_c.obj $(OBJ_D)\e_cfb_c.obj $(OBJ_D)\e_ofb_c.obj \
-       $(OBJ_D)\e_ecb_r5.obj $(OBJ_D)\e_cbc_r5.obj $(OBJ_D)\e_cfb_r5.obj \
-       $(OBJ_D)\e_ofb_r5.obj $(OBJ_D)\m_null.obj $(OBJ_D)\m_md2.obj \
-       $(OBJ_D)\m_md5.obj $(OBJ_D)\m_sha.obj $(OBJ_D)\m_sha1.obj \
-       $(OBJ_D)\m_dss.obj $(OBJ_D)\m_dss1.obj $(OBJ_D)\m_mdc2.obj \
-       $(OBJ_D)\m_ripemd.obj $(OBJ_D)\p_open.obj $(OBJ_D)\p_seal.obj \
-       $(OBJ_D)\p_sign.obj $(OBJ_D)\p_verify.obj $(OBJ_D)\p_lib.obj \
-       $(OBJ_D)\p_enc.obj $(OBJ_D)\p_dec.obj $(OBJ_D)\bio_md.obj \
-       $(OBJ_D)\bio_b64.obj $(OBJ_D)\bio_enc.obj $(OBJ_D)\evp_err.obj \
-       $(OBJ_D)\e_null.obj $(OBJ_D)\c_all.obj $(OBJ_D)\evp_lib.obj \
-       $(OBJ_D)\bio_ok.obj $(OBJ_D)\evp_pkey.obj $(OBJ_D)\evp_pbe.obj \
-       $(OBJ_D)\p5_crpt.obj $(OBJ_D)\p5_crpt2.obj $(OBJ_D)\a_object.obj \
-       $(OBJ_D)\a_bitstr.obj $(OBJ_D)\a_utctm.obj $(OBJ_D)\a_gentm.obj \
-       $(OBJ_D)\a_time.obj $(OBJ_D)\a_int.obj $(OBJ_D)\a_octet.obj \
-       $(OBJ_D)\a_print.obj $(OBJ_D)\a_type.obj $(OBJ_D)\a_set.obj \
-       $(OBJ_D)\a_dup.obj $(OBJ_D)\a_d2i_fp.obj $(OBJ_D)\a_i2d_fp.obj \
-       $(OBJ_D)\a_bmp.obj $(OBJ_D)\a_enum.obj $(OBJ_D)\a_vis.obj \
-       $(OBJ_D)\a_utf8.obj $(OBJ_D)\a_sign.obj $(OBJ_D)\a_digest.obj \
-       $(OBJ_D)\a_verify.obj $(OBJ_D)\x_algor.obj $(OBJ_D)\x_val.obj \
-       $(OBJ_D)\x_pubkey.obj $(OBJ_D)\x_sig.obj $(OBJ_D)\x_req.obj \
-       $(OBJ_D)\x_attrib.obj $(OBJ_D)\x_name.obj $(OBJ_D)\x_cinf.obj \
-       $(OBJ_D)\x_x509.obj $(OBJ_D)\x_crl.obj $(OBJ_D)\x_info.obj \
-       $(OBJ_D)\x_spki.obj $(OBJ_D)\nsseq.obj $(OBJ_D)\d2i_r_pr.obj \
-       $(OBJ_D)\i2d_r_pr.obj $(OBJ_D)\d2i_r_pu.obj $(OBJ_D)\i2d_r_pu.obj \
-       $(OBJ_D)\d2i_s_pr.obj $(OBJ_D)\i2d_s_pr.obj $(OBJ_D)\d2i_s_pu.obj \
-       $(OBJ_D)\i2d_s_pu.obj $(OBJ_D)\d2i_pu.obj $(OBJ_D)\d2i_pr.obj \
-       $(OBJ_D)\i2d_pu.obj $(OBJ_D)\i2d_pr.obj $(OBJ_D)\t_req.obj \
-       $(OBJ_D)\t_x509.obj $(OBJ_D)\t_crl.obj $(OBJ_D)\t_pkey.obj \
-       $(OBJ_D)\p7_i_s.obj $(OBJ_D)\p7_signi.obj $(OBJ_D)\p7_signd.obj \
-       $(OBJ_D)\p7_recip.obj $(OBJ_D)\p7_enc_c.obj $(OBJ_D)\p7_evp.obj \
-       $(OBJ_D)\p7_dgst.obj $(OBJ_D)\p7_s_e.obj $(OBJ_D)\p7_enc.obj \
-       $(OBJ_D)\p7_lib.obj $(OBJ_D)\f_int.obj $(OBJ_D)\f_string.obj \
-       $(OBJ_D)\i2d_dhp.obj $(OBJ_D)\i2d_dsap.obj $(OBJ_D)\d2i_dhp.obj \
-       $(OBJ_D)\d2i_dsap.obj $(OBJ_D)\n_pkey.obj $(OBJ_D)\f_enum.obj \
-       $(OBJ_D)\a_hdr.obj $(OBJ_D)\x_pkey.obj $(OBJ_D)\a_bool.obj \
-       $(OBJ_D)\x_exten.obj $(OBJ_D)\asn1_par.obj $(OBJ_D)\asn1_lib.obj \
-       $(OBJ_D)\asn1_err.obj $(OBJ_D)\a_meth.obj $(OBJ_D)\a_bytes.obj \
-       $(OBJ_D)\evp_asn1.obj $(OBJ_D)\asn_pack.obj $(OBJ_D)\p5_pbe.obj \
-       $(OBJ_D)\p5_pbev2.obj $(OBJ_D)\p8_pkey.obj $(OBJ_D)\pem_sign.obj \
-       $(OBJ_D)\pem_seal.obj $(OBJ_D)\pem_info.obj $(OBJ_D)\pem_lib.obj \
-       $(OBJ_D)\pem_all.obj $(OBJ_D)\pem_err.obj $(OBJ_D)\x509_def.obj \
-       $(OBJ_D)\x509_d2.obj $(OBJ_D)\x509_r2x.obj $(OBJ_D)\x509_cmp.obj \
-       $(OBJ_D)\x509_obj.obj $(OBJ_D)\x509_req.obj $(OBJ_D)\x509_vfy.obj \
-       $(OBJ_D)\x509_set.obj $(OBJ_D)\x509rset.obj $(OBJ_D)\x509_err.obj \
-       $(OBJ_D)\x509name.obj $(OBJ_D)\x509_v3.obj $(OBJ_D)\x509_ext.obj \
-       $(OBJ_D)\x509type.obj $(OBJ_D)\x509_lu.obj $(OBJ_D)\x_all.obj \
-       $(OBJ_D)\x509_txt.obj $(OBJ_D)\by_file.obj $(OBJ_D)\by_dir.obj \
-       $(OBJ_D)\v3_bcons.obj $(OBJ_D)\v3_bitst.obj $(OBJ_D)\v3_conf.obj \
-       $(OBJ_D)\v3_extku.obj $(OBJ_D)\v3_ia5.obj $(OBJ_D)\v3_lib.obj \
-       $(OBJ_D)\v3_prn.obj $(OBJ_D)\v3_utl.obj $(OBJ_D)\v3err.obj \
-       $(OBJ_D)\v3_genn.obj $(OBJ_D)\v3_alt.obj $(OBJ_D)\v3_skey.obj \
-       $(OBJ_D)\v3_akey.obj $(OBJ_D)\v3_pku.obj $(OBJ_D)\v3_int.obj \
-       $(OBJ_D)\v3_enum.obj $(OBJ_D)\v3_sxnet.obj $(OBJ_D)\v3_cpols.obj \
-       $(OBJ_D)\v3_crld.obj $(OBJ_D)\conf.obj $(OBJ_D)\conf_err.obj \
-       $(OBJ_D)\txt_db.obj $(OBJ_D)\pk7_lib.obj $(OBJ_D)\pkcs7err.obj \
-       $(OBJ_D)\pk7_doit.obj $(OBJ_D)\p12_add.obj $(OBJ_D)\p12_attr.obj \
-       $(OBJ_D)\p12_bags.obj $(OBJ_D)\p12_crpt.obj $(OBJ_D)\p12_crt.obj \
-       $(OBJ_D)\p12_decr.obj $(OBJ_D)\p12_init.obj $(OBJ_D)\p12_key.obj \
-       $(OBJ_D)\p12_kiss.obj $(OBJ_D)\p12_lib.obj $(OBJ_D)\p12_mac.obj \
-       $(OBJ_D)\p12_mutl.obj $(OBJ_D)\p12_sbag.obj $(OBJ_D)\p12_utl.obj \
-       $(OBJ_D)\pk12err.obj $(OBJ_D)\comp_lib.obj $(OBJ_D)\c_rle.obj \
-       $(OBJ_D)\c_zlib.obj
-
-SSLOBJ=$(OBJ_D)\s2_meth.obj \
-       $(OBJ_D)\s2_srvr.obj $(OBJ_D)\s2_clnt.obj $(OBJ_D)\s2_lib.obj \
-       $(OBJ_D)\s2_enc.obj $(OBJ_D)\s2_pkt.obj $(OBJ_D)\s3_meth.obj \
-       $(OBJ_D)\s3_srvr.obj $(OBJ_D)\s3_clnt.obj $(OBJ_D)\s3_lib.obj \
-       $(OBJ_D)\s3_enc.obj $(OBJ_D)\s3_pkt.obj $(OBJ_D)\s3_both.obj \
-       $(OBJ_D)\s23_meth.obj $(OBJ_D)\s23_srvr.obj $(OBJ_D)\s23_clnt.obj \
-       $(OBJ_D)\s23_lib.obj $(OBJ_D)\s23_pkt.obj $(OBJ_D)\t1_meth.obj \
-       $(OBJ_D)\t1_srvr.obj $(OBJ_D)\t1_clnt.obj $(OBJ_D)\t1_lib.obj \
-       $(OBJ_D)\t1_enc.obj $(OBJ_D)\ssl_lib.obj $(OBJ_D)\ssl_err2.obj \
-       $(OBJ_D)\ssl_cert.obj $(OBJ_D)\ssl_sess.obj $(OBJ_D)\ssl_ciph.obj \
-       $(OBJ_D)\ssl_stat.obj $(OBJ_D)\ssl_rsa.obj $(OBJ_D)\ssl_asn1.obj \
-       $(OBJ_D)\ssl_txt.obj $(OBJ_D)\ssl_algs.obj $(OBJ_D)\bio_ssl.obj \
-       $(OBJ_D)\ssl_err.obj
-
-RSAGLUEOBJ=$(OBJ_D)\rsaref.obj \
-       $(OBJ_D)\rsar_err.obj
-
-T_EXE=$(TEST_D)\md2test.exe \
-       $(TEST_D)\md5test.exe $(TEST_D)\shatest.exe $(TEST_D)\sha1test.exe \
-       $(TEST_D)\mdc2test.exe $(TEST_D)\hmactest.exe $(TEST_D)\rmdtest.exe \
-       $(TEST_D)\destest.exe $(TEST_D)\rc2test.exe $(TEST_D)\rc4test.exe \
-       $(TEST_D)\rc5test.exe $(TEST_D)\ideatest.exe $(TEST_D)\bftest.exe \
-       $(TEST_D)\casttest.exe $(TEST_D)\bntest.exe $(TEST_D)\exptest.exe \
-       $(TEST_D)\rsa_oaep_test.exe $(TEST_D)\dsatest.exe $(TEST_D)\dhtest.exe \
-       $(TEST_D)\randtest.exe $(TEST_D)\ssltest.exe
-
-###################################################################
-all: banner $(TMP_D) $(BIN_D) $(TEST_D) $(LIB_D) $(INCO_D) headers lib exe
-
-banner:
-       @echo Make sure you have run 'perl Configure VC-W31-32' in the
-       @echo top level directory, if you don't have perl, you will
-       @echo need to probably edit crypto/bn/bn.h, check the
-       @echo documentation for details.
-
-
-$(TMP_D):
-       $(MKDIR) $(TMP_D)
-# NB: uncomment out these lines if BIN_D, TEST_D and LIB_D are different
-#$(BIN_D):
-#      $(MKDIR) $(BIN_D)
-#
-#$(TEST_D):
-#      $(MKDIR) $(TEST_D)
-
-$(LIB_D):
-       $(MKDIR) $(LIB_D)
-
-$(INCO_D): $(INC_D)
-       $(MKDIR) $(INCO_D)
-
-$(INC_D):
-       $(MKDIR) $(INC_D)
-
-headers: $(HEADER) $(EXHEADER)
-
-lib: $(LIBS_DEP)
-
-exe: $(T_EXE) $(BIN_D)\$(E_EXE).exe
-
-install:
-       $(MKDIR) $(INSTALLTOP)
-       $(MKDIR) $(INSTALLTOP)\bin
-       $(MKDIR) $(INSTALLTOP)\include
-       $(MKDIR) $(INSTALLTOP)\include\openssl
-       $(MKDIR) $(INSTALLTOP)\lib
-       $(CP) $(INCO_D)\*.[ch] $(INSTALLTOP)\include\openssl
-       $(CP) $(BIN_D)\$(E_EXE).exe $(INSTALLTOP)\bin
-       $(CP) $(O_SSL) $(INSTALLTOP)\lib
-       $(CP) $(O_CRYPTO) $(INSTALLTOP)\lib
-
-clean:
-       $(RM) $(TMP_D)\*.*
-
-vclean:
-       $(RM) $(TMP_D)\*.*
-       $(RM) $(OUT_D)\*.*
-
-$(INCL_D)\cryptlib.h: $(SRC_D)\crypto\cryptlib.h
-       $(CP) $(SRC_D)\crypto\cryptlib.h $(INCL_D)\cryptlib.h
-
-$(INCL_D)\buildinf.h: $(SRC_D)\crypto\buildinf.h
-       $(CP) $(SRC_D)\crypto\buildinf.h $(INCL_D)\buildinf.h
-
-$(INCL_D)\md5_locl.h: $(SRC_D)\crypto\md5\md5_locl.h
-       $(CP) $(SRC_D)\crypto\md5\md5_locl.h $(INCL_D)\md5_locl.h
-
-$(INCL_D)\sha_locl.h: $(SRC_D)\crypto\sha\sha_locl.h
-       $(CP) $(SRC_D)\crypto\sha\sha_locl.h $(INCL_D)\sha_locl.h
-
-$(INCL_D)\rmd_locl.h: $(SRC_D)\crypto\ripemd\rmd_locl.h
-       $(CP) $(SRC_D)\crypto\ripemd\rmd_locl.h $(INCL_D)\rmd_locl.h
-
-$(INCL_D)\rmdconst.h: $(SRC_D)\crypto\ripemd\rmdconst.h
-       $(CP) $(SRC_D)\crypto\ripemd\rmdconst.h $(INCL_D)\rmdconst.h
-
-$(INCL_D)\des_locl.h: $(SRC_D)\crypto\des\des_locl.h
-       $(CP) $(SRC_D)\crypto\des\des_locl.h $(INCL_D)\des_locl.h
-
-$(INCL_D)\rpc_des.h: $(SRC_D)\crypto\des\rpc_des.h
-       $(CP) $(SRC_D)\crypto\des\rpc_des.h $(INCL_D)\rpc_des.h
-
-$(INCL_D)\podd.h: $(SRC_D)\crypto\des\podd.h
-       $(CP) $(SRC_D)\crypto\des\podd.h $(INCL_D)\podd.h
-
-$(INCL_D)\sk.h: $(SRC_D)\crypto\des\sk.h
-       $(CP) $(SRC_D)\crypto\des\sk.h $(INCL_D)\sk.h
-
-$(INCL_D)\spr.h: $(SRC_D)\crypto\des\spr.h
-       $(CP) $(SRC_D)\crypto\des\spr.h $(INCL_D)\spr.h
-
-$(INCL_D)\des_ver.h: $(SRC_D)\crypto\des\des_ver.h
-       $(CP) $(SRC_D)\crypto\des\des_ver.h $(INCL_D)\des_ver.h
-
-$(INCL_D)\rc2_locl.h: $(SRC_D)\crypto\rc2\rc2_locl.h
-       $(CP) $(SRC_D)\crypto\rc2\rc2_locl.h $(INCL_D)\rc2_locl.h
-
-$(INCL_D)\rc4_locl.h: $(SRC_D)\crypto\rc4\rc4_locl.h
-       $(CP) $(SRC_D)\crypto\rc4\rc4_locl.h $(INCL_D)\rc4_locl.h
-
-$(INCL_D)\rc5_locl.h: $(SRC_D)\crypto\rc5\rc5_locl.h
-       $(CP) $(SRC_D)\crypto\rc5\rc5_locl.h $(INCL_D)\rc5_locl.h
-
-$(INCL_D)\idea_lcl.h: $(SRC_D)\crypto\idea\idea_lcl.h
-       $(CP) $(SRC_D)\crypto\idea\idea_lcl.h $(INCL_D)\idea_lcl.h
-
-$(INCL_D)\bf_pi.h: $(SRC_D)\crypto\bf\bf_pi.h
-       $(CP) $(SRC_D)\crypto\bf\bf_pi.h $(INCL_D)\bf_pi.h
-
-$(INCL_D)\bf_locl.h: $(SRC_D)\crypto\bf\bf_locl.h
-       $(CP) $(SRC_D)\crypto\bf\bf_locl.h $(INCL_D)\bf_locl.h
-
-$(INCL_D)\cast_s.h: $(SRC_D)\crypto\cast\cast_s.h
-       $(CP) $(SRC_D)\crypto\cast\cast_s.h $(INCL_D)\cast_s.h
-
-$(INCL_D)\cast_lcl.h: $(SRC_D)\crypto\cast\cast_lcl.h
-       $(CP) $(SRC_D)\crypto\cast\cast_lcl.h $(INCL_D)\cast_lcl.h
-
-$(INCL_D)\bn_lcl.h: $(SRC_D)\crypto\bn\bn_lcl.h
-       $(CP) $(SRC_D)\crypto\bn\bn_lcl.h $(INCL_D)\bn_lcl.h
-
-$(INCL_D)\bn_prime.h: $(SRC_D)\crypto\bn\bn_prime.h
-       $(CP) $(SRC_D)\crypto\bn\bn_prime.h $(INCL_D)\bn_prime.h
-
-$(INCL_D)\bss_file.c: $(SRC_D)\crypto\bio\bss_file.c
-       $(CP) $(SRC_D)\crypto\bio\bss_file.c $(INCL_D)\bss_file.c
-
-$(INCL_D)\obj_dat.h: $(SRC_D)\crypto\objects\obj_dat.h
-       $(CP) $(SRC_D)\crypto\objects\obj_dat.h $(INCL_D)\obj_dat.h
-
-$(INCL_D)\conf_lcl.h: $(SRC_D)\crypto\conf\conf_lcl.h
-       $(CP) $(SRC_D)\crypto\conf\conf_lcl.h $(INCL_D)\conf_lcl.h
-
-$(INCL_D)\ssl_locl.h: $(SRC_D)\ssl\ssl_locl.h
-       $(CP) $(SRC_D)\ssl\ssl_locl.h $(INCL_D)\ssl_locl.h
-
-$(INCL_D)\apps.h: $(SRC_D)\apps\apps.h
-       $(CP) $(SRC_D)\apps\apps.h $(INCL_D)\apps.h
-
-$(INCL_D)\progs.h: $(SRC_D)\apps\progs.h
-       $(CP) $(SRC_D)\apps\progs.h $(INCL_D)\progs.h
-
-$(INCL_D)\s_apps.h: $(SRC_D)\apps\s_apps.h
-       $(CP) $(SRC_D)\apps\s_apps.h $(INCL_D)\s_apps.h
-
-$(INCL_D)\testdsa.h: $(SRC_D)\apps\testdsa.h
-       $(CP) $(SRC_D)\apps\testdsa.h $(INCL_D)\testdsa.h
-
-$(INCL_D)\testrsa.h: $(SRC_D)\apps\testrsa.h
-       $(CP) $(SRC_D)\apps\testrsa.h $(INCL_D)\testrsa.h
-
-$(INCO_D)\e_os.h: $(SRC_D)\.\e_os.h
-       $(CP) $(SRC_D)\.\e_os.h $(INCO_D)\e_os.h
-
-$(INCO_D)\e_os2.h: $(SRC_D)\.\e_os2.h
-       $(CP) $(SRC_D)\.\e_os2.h $(INCO_D)\e_os2.h
-
-$(INCO_D)\crypto.h: $(SRC_D)\crypto\crypto.h
-       $(CP) $(SRC_D)\crypto\crypto.h $(INCO_D)\crypto.h
-
-$(INCO_D)\tmdiff.h: $(SRC_D)\crypto\tmdiff.h
-       $(CP) $(SRC_D)\crypto\tmdiff.h $(INCO_D)\tmdiff.h
-
-$(INCO_D)\opensslv.h: $(SRC_D)\crypto\opensslv.h
-       $(CP) $(SRC_D)\crypto\opensslv.h $(INCO_D)\opensslv.h
-
-$(INCO_D)\opensslconf.h: $(SRC_D)\crypto\opensslconf.h
-       $(CP) $(SRC_D)\crypto\opensslconf.h $(INCO_D)\opensslconf.h
-
-$(INCO_D)\ebcdic.h: $(SRC_D)\crypto\ebcdic.h
-       $(CP) $(SRC_D)\crypto\ebcdic.h $(INCO_D)\ebcdic.h
-
-$(INCO_D)\md2.h: $(SRC_D)\crypto\md2\md2.h
-       $(CP) $(SRC_D)\crypto\md2\md2.h $(INCO_D)\md2.h
-
-$(INCO_D)\md5.h: $(SRC_D)\crypto\md5\md5.h
-       $(CP) $(SRC_D)\crypto\md5\md5.h $(INCO_D)\md5.h
-
-$(INCO_D)\sha.h: $(SRC_D)\crypto\sha\sha.h
-       $(CP) $(SRC_D)\crypto\sha\sha.h $(INCO_D)\sha.h
-
-$(INCO_D)\mdc2.h: $(SRC_D)\crypto\mdc2\mdc2.h
-       $(CP) $(SRC_D)\crypto\mdc2\mdc2.h $(INCO_D)\mdc2.h
-
-$(INCO_D)\hmac.h: $(SRC_D)\crypto\hmac\hmac.h
-       $(CP) $(SRC_D)\crypto\hmac\hmac.h $(INCO_D)\hmac.h
-
-$(INCO_D)\ripemd.h: $(SRC_D)\crypto\ripemd\ripemd.h
-       $(CP) $(SRC_D)\crypto\ripemd\ripemd.h $(INCO_D)\ripemd.h
-
-$(INCO_D)\des.h: $(SRC_D)\crypto\des\des.h
-       $(CP) $(SRC_D)\crypto\des\des.h $(INCO_D)\des.h
-
-$(INCO_D)\rc2.h: $(SRC_D)\crypto\rc2\rc2.h
-       $(CP) $(SRC_D)\crypto\rc2\rc2.h $(INCO_D)\rc2.h
-
-$(INCO_D)\rc4.h: $(SRC_D)\crypto\rc4\rc4.h
-       $(CP) $(SRC_D)\crypto\rc4\rc4.h $(INCO_D)\rc4.h
-
-$(INCO_D)\rc5.h: $(SRC_D)\crypto\rc5\rc5.h
-       $(CP) $(SRC_D)\crypto\rc5\rc5.h $(INCO_D)\rc5.h
-
-$(INCO_D)\idea.h: $(SRC_D)\crypto\idea\idea.h
-       $(CP) $(SRC_D)\crypto\idea\idea.h $(INCO_D)\idea.h
-
-$(INCO_D)\blowfish.h: $(SRC_D)\crypto\bf\blowfish.h
-       $(CP) $(SRC_D)\crypto\bf\blowfish.h $(INCO_D)\blowfish.h
-
-$(INCO_D)\cast.h: $(SRC_D)\crypto\cast\cast.h
-       $(CP) $(SRC_D)\crypto\cast\cast.h $(INCO_D)\cast.h
-
-$(INCO_D)\bn.h: $(SRC_D)\crypto\bn\bn.h
-       $(CP) $(SRC_D)\crypto\bn\bn.h $(INCO_D)\bn.h
-
-$(INCO_D)\rsa.h: $(SRC_D)\crypto\rsa\rsa.h
-       $(CP) $(SRC_D)\crypto\rsa\rsa.h $(INCO_D)\rsa.h
-
-$(INCO_D)\dsa.h: $(SRC_D)\crypto\dsa\dsa.h
-       $(CP) $(SRC_D)\crypto\dsa\dsa.h $(INCO_D)\dsa.h
-
-$(INCO_D)\dh.h: $(SRC_D)\crypto\dh\dh.h
-       $(CP) $(SRC_D)\crypto\dh\dh.h $(INCO_D)\dh.h
-
-$(INCO_D)\buffer.h: $(SRC_D)\crypto\buffer\buffer.h
-       $(CP) $(SRC_D)\crypto\buffer\buffer.h $(INCO_D)\buffer.h
-
-$(INCO_D)\bio.h: $(SRC_D)\crypto\bio\bio.h
-       $(CP) $(SRC_D)\crypto\bio\bio.h $(INCO_D)\bio.h
-
-$(INCO_D)\stack.h: $(SRC_D)\crypto\stack\stack.h
-       $(CP) $(SRC_D)\crypto\stack\stack.h $(INCO_D)\stack.h
-
-$(INCO_D)\safestack.h: $(SRC_D)\crypto\stack\safestack.h
-       $(CP) $(SRC_D)\crypto\stack\safestack.h $(INCO_D)\safestack.h
-
-$(INCO_D)\lhash.h: $(SRC_D)\crypto\lhash\lhash.h
-       $(CP) $(SRC_D)\crypto\lhash\lhash.h $(INCO_D)\lhash.h
-
-$(INCO_D)\rand.h: $(SRC_D)\crypto\rand\rand.h
-       $(CP) $(SRC_D)\crypto\rand\rand.h $(INCO_D)\rand.h
-
-$(INCO_D)\err.h: $(SRC_D)\crypto\err\err.h
-       $(CP) $(SRC_D)\crypto\err\err.h $(INCO_D)\err.h
-
-$(INCO_D)\objects.h: $(SRC_D)\crypto\objects\objects.h
-       $(CP) $(SRC_D)\crypto\objects\objects.h $(INCO_D)\objects.h
-
-$(INCO_D)\evp.h: $(SRC_D)\crypto\evp\evp.h
-       $(CP) $(SRC_D)\crypto\evp\evp.h $(INCO_D)\evp.h
-
-$(INCO_D)\asn1.h: $(SRC_D)\crypto\asn1\asn1.h
-       $(CP) $(SRC_D)\crypto\asn1\asn1.h $(INCO_D)\asn1.h
-
-$(INCO_D)\asn1_mac.h: $(SRC_D)\crypto\asn1\asn1_mac.h
-       $(CP) $(SRC_D)\crypto\asn1\asn1_mac.h $(INCO_D)\asn1_mac.h
-
-$(INCO_D)\pem.h: $(SRC_D)\crypto\pem\pem.h
-       $(CP) $(SRC_D)\crypto\pem\pem.h $(INCO_D)\pem.h
-
-$(INCO_D)\pem2.h: $(SRC_D)\crypto\pem\pem2.h
-       $(CP) $(SRC_D)\crypto\pem\pem2.h $(INCO_D)\pem2.h
-
-$(INCO_D)\x509.h: $(SRC_D)\crypto\x509\x509.h
-       $(CP) $(SRC_D)\crypto\x509\x509.h $(INCO_D)\x509.h
-
-$(INCO_D)\x509_vfy.h: $(SRC_D)\crypto\x509\x509_vfy.h
-       $(CP) $(SRC_D)\crypto\x509\x509_vfy.h $(INCO_D)\x509_vfy.h
-
-$(INCO_D)\x509v3.h: $(SRC_D)\crypto\x509v3\x509v3.h
-       $(CP) $(SRC_D)\crypto\x509v3\x509v3.h $(INCO_D)\x509v3.h
-
-$(INCO_D)\conf.h: $(SRC_D)\crypto\conf\conf.h
-       $(CP) $(SRC_D)\crypto\conf\conf.h $(INCO_D)\conf.h
-
-$(INCO_D)\txt_db.h: $(SRC_D)\crypto\txt_db\txt_db.h
-       $(CP) $(SRC_D)\crypto\txt_db\txt_db.h $(INCO_D)\txt_db.h
-
-$(INCO_D)\pkcs7.h: $(SRC_D)\crypto\pkcs7\pkcs7.h
-       $(CP) $(SRC_D)\crypto\pkcs7\pkcs7.h $(INCO_D)\pkcs7.h
-
-$(INCO_D)\pkcs12.h: $(SRC_D)\crypto\pkcs12\pkcs12.h
-       $(CP) $(SRC_D)\crypto\pkcs12\pkcs12.h $(INCO_D)\pkcs12.h
-
-$(INCO_D)\comp.h: $(SRC_D)\crypto\comp\comp.h
-       $(CP) $(SRC_D)\crypto\comp\comp.h $(INCO_D)\comp.h
-
-$(INCO_D)\ssl.h: $(SRC_D)\ssl\ssl.h
-       $(CP) $(SRC_D)\ssl\ssl.h $(INCO_D)\ssl.h
-
-$(INCO_D)\ssl2.h: $(SRC_D)\ssl\ssl2.h
-       $(CP) $(SRC_D)\ssl\ssl2.h $(INCO_D)\ssl2.h
-
-$(INCO_D)\ssl3.h: $(SRC_D)\ssl\ssl3.h
-       $(CP) $(SRC_D)\ssl\ssl3.h $(INCO_D)\ssl3.h
-
-$(INCO_D)\ssl23.h: $(SRC_D)\ssl\ssl23.h
-       $(CP) $(SRC_D)\ssl\ssl23.h $(INCO_D)\ssl23.h
-
-$(INCO_D)\tls1.h: $(SRC_D)\ssl\tls1.h
-       $(CP) $(SRC_D)\ssl\tls1.h $(INCO_D)\tls1.h
-
-$(INCO_D)\rsaref.h: $(SRC_D)\rsaref\rsaref.h
-       $(CP) $(SRC_D)\rsaref\rsaref.h $(INCO_D)\rsaref.h
-
-$(OBJ_D)\md2test.obj: $(SRC_D)\crypto\md2\md2test.c
-       $(CC) /Fo$(OBJ_D)\md2test.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\md2\md2test.c
-
-$(OBJ_D)\md5test.obj: $(SRC_D)\crypto\md5\md5test.c
-       $(CC) /Fo$(OBJ_D)\md5test.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\md5\md5test.c
-
-$(OBJ_D)\shatest.obj: $(SRC_D)\crypto\sha\shatest.c
-       $(CC) /Fo$(OBJ_D)\shatest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\sha\shatest.c
-
-$(OBJ_D)\sha1test.obj: $(SRC_D)\crypto\sha\sha1test.c
-       $(CC) /Fo$(OBJ_D)\sha1test.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\sha\sha1test.c
-
-$(OBJ_D)\mdc2test.obj: $(SRC_D)\crypto\mdc2\mdc2test.c
-       $(CC) /Fo$(OBJ_D)\mdc2test.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\mdc2\mdc2test.c
-
-$(OBJ_D)\hmactest.obj: $(SRC_D)\crypto\hmac\hmactest.c
-       $(CC) /Fo$(OBJ_D)\hmactest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\hmac\hmactest.c
-
-$(OBJ_D)\rmdtest.obj: $(SRC_D)\crypto\ripemd\rmdtest.c
-       $(CC) /Fo$(OBJ_D)\rmdtest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\ripemd\rmdtest.c
-
-$(OBJ_D)\destest.obj: $(SRC_D)\crypto\des\destest.c
-       $(CC) /Fo$(OBJ_D)\destest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\des\destest.c
-
-$(OBJ_D)\rc2test.obj: $(SRC_D)\crypto\rc2\rc2test.c
-       $(CC) /Fo$(OBJ_D)\rc2test.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\rc2\rc2test.c
-
-$(OBJ_D)\rc4test.obj: $(SRC_D)\crypto\rc4\rc4test.c
-       $(CC) /Fo$(OBJ_D)\rc4test.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\rc4\rc4test.c
-
-$(OBJ_D)\rc5test.obj: $(SRC_D)\crypto\rc5\rc5test.c
-       $(CC) /Fo$(OBJ_D)\rc5test.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\rc5\rc5test.c
-
-$(OBJ_D)\ideatest.obj: $(SRC_D)\crypto\idea\ideatest.c
-       $(CC) /Fo$(OBJ_D)\ideatest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\idea\ideatest.c
-
-$(OBJ_D)\bftest.obj: $(SRC_D)\crypto\bf\bftest.c
-       $(CC) /Fo$(OBJ_D)\bftest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\bf\bftest.c
-
-$(OBJ_D)\casttest.obj: $(SRC_D)\crypto\cast\casttest.c
-       $(CC) /Fo$(OBJ_D)\casttest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\cast\casttest.c
-
-$(OBJ_D)\bntest.obj: $(SRC_D)\crypto\bn\bntest.c
-       $(CC) /Fo$(OBJ_D)\bntest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\bn\bntest.c
-
-$(OBJ_D)\exptest.obj: $(SRC_D)\crypto\bn\exptest.c
-       $(CC) /Fo$(OBJ_D)\exptest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\bn\exptest.c
-
-$(OBJ_D)\rsa_oaep_test.obj: $(SRC_D)\crypto\rsa\rsa_oaep_test.c
-       $(CC) /Fo$(OBJ_D)\rsa_oaep_test.obj $(APP_CFLAGS) -c 
$(SRC_D)\crypto\rsa\rsa_oaep_test.c
-
-$(OBJ_D)\dsatest.obj: $(SRC_D)\crypto\dsa\dsatest.c
-       $(CC) /Fo$(OBJ_D)\dsatest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\dsa\dsatest.c
-
-$(OBJ_D)\dhtest.obj: $(SRC_D)\crypto\dh\dhtest.c
-       $(CC) /Fo$(OBJ_D)\dhtest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\dh\dhtest.c
-
-$(OBJ_D)\randtest.obj: $(SRC_D)\crypto\rand\randtest.c
-       $(CC) /Fo$(OBJ_D)\randtest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\rand\randtest.c
-
-$(OBJ_D)\ssltest.obj: $(SRC_D)\ssl\ssltest.c
-       $(CC) /Fo$(OBJ_D)\ssltest.obj $(APP_CFLAGS) -c $(SRC_D)\ssl\ssltest.c
-
-$(OBJ_D)\verify.obj: $(SRC_D)\apps\verify.c
-       $(CC) /Fo$(OBJ_D)\verify.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\verify.c
-
-$(OBJ_D)\asn1pars.obj: $(SRC_D)\apps\asn1pars.c
-       $(CC) /Fo$(OBJ_D)\asn1pars.obj -DMONOLITH $(APP_CFLAGS) -c 
$(SRC_D)\apps\asn1pars.c
-
-$(OBJ_D)\req.obj: $(SRC_D)\apps\req.c
-       $(CC) /Fo$(OBJ_D)\req.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\req.c
-
-$(OBJ_D)\dgst.obj: $(SRC_D)\apps\dgst.c
-       $(CC) /Fo$(OBJ_D)\dgst.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\dgst.c
-
-$(OBJ_D)\dh.obj: $(SRC_D)\apps\dh.c
-       $(CC) /Fo$(OBJ_D)\dh.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\dh.c
-
-$(OBJ_D)\enc.obj: $(SRC_D)\apps\enc.c
-       $(CC) /Fo$(OBJ_D)\enc.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\enc.c
-
-$(OBJ_D)\gendh.obj: $(SRC_D)\apps\gendh.c
-       $(CC) /Fo$(OBJ_D)\gendh.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\gendh.c
-
-$(OBJ_D)\errstr.obj: $(SRC_D)\apps\errstr.c
-       $(CC) /Fo$(OBJ_D)\errstr.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\errstr.c
-
-$(OBJ_D)\ca.obj: $(SRC_D)\apps\ca.c
-       $(CC) /Fo$(OBJ_D)\ca.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\ca.c
-
-$(OBJ_D)\pkcs7.obj: $(SRC_D)\apps\pkcs7.c
-       $(CC) /Fo$(OBJ_D)\pkcs7.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\pkcs7.c
-
-$(OBJ_D)\crl2p7.obj: $(SRC_D)\apps\crl2p7.c
-       $(CC) /Fo$(OBJ_D)\crl2p7.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\crl2p7.c
-
-$(OBJ_D)\crl.obj: $(SRC_D)\apps\crl.c
-       $(CC) /Fo$(OBJ_D)\crl.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\crl.c
-
-$(OBJ_D)\rsa.obj: $(SRC_D)\apps\rsa.c
-       $(CC) /Fo$(OBJ_D)\rsa.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\rsa.c
-
-$(OBJ_D)\dsa.obj: $(SRC_D)\apps\dsa.c
-       $(CC) /Fo$(OBJ_D)\dsa.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\dsa.c
-
-$(OBJ_D)\dsaparam.obj: $(SRC_D)\apps\dsaparam.c
-       $(CC) /Fo$(OBJ_D)\dsaparam.obj -DMONOLITH $(APP_CFLAGS) -c 
$(SRC_D)\apps\dsaparam.c
-
-$(OBJ_D)\x509.obj: $(SRC_D)\apps\x509.c
-       $(CC) /Fo$(OBJ_D)\x509.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\x509.c
-
-$(OBJ_D)\genrsa.obj: $(SRC_D)\apps\genrsa.c
-       $(CC) /Fo$(OBJ_D)\genrsa.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\genrsa.c
-
-$(OBJ_D)\gendsa.obj: $(SRC_D)\apps\gendsa.c
-       $(CC) /Fo$(OBJ_D)\gendsa.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\gendsa.c
-
-$(OBJ_D)\s_server.obj: $(SRC_D)\apps\s_server.c
-       $(CC) /Fo$(OBJ_D)\s_server.obj -DMONOLITH $(APP_CFLAGS) -c 
$(SRC_D)\apps\s_server.c
-
-$(OBJ_D)\s_client.obj: $(SRC_D)\apps\s_client.c
-       $(CC) /Fo$(OBJ_D)\s_client.obj -DMONOLITH $(APP_CFLAGS) -c 
$(SRC_D)\apps\s_client.c
-
-$(OBJ_D)\speed.obj: $(SRC_D)\apps\speed.c
-       $(CC) /Fo$(OBJ_D)\speed.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\speed.c
-
-$(OBJ_D)\s_time.obj: $(SRC_D)\apps\s_time.c
-       $(CC) /Fo$(OBJ_D)\s_time.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\s_time.c
-
-$(OBJ_D)\apps.obj: $(SRC_D)\apps\apps.c
-       $(CC) /Fo$(OBJ_D)\apps.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\apps.c
-
-$(OBJ_D)\s_cb.obj: $(SRC_D)\apps\s_cb.c
-       $(CC) /Fo$(OBJ_D)\s_cb.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\s_cb.c
-
-$(OBJ_D)\s_socket.obj: $(SRC_D)\apps\s_socket.c
-       $(CC) /Fo$(OBJ_D)\s_socket.obj -DMONOLITH $(APP_CFLAGS) -c 
$(SRC_D)\apps\s_socket.c
-
-$(OBJ_D)\version.obj: $(SRC_D)\apps\version.c
-       $(CC) /Fo$(OBJ_D)\version.obj -DMONOLITH $(APP_CFLAGS) -c 
$(SRC_D)\apps\version.c
-
-$(OBJ_D)\sess_id.obj: $(SRC_D)\apps\sess_id.c
-       $(CC) /Fo$(OBJ_D)\sess_id.obj -DMONOLITH $(APP_CFLAGS) -c 
$(SRC_D)\apps\sess_id.c
-
-$(OBJ_D)\ciphers.obj: $(SRC_D)\apps\ciphers.c
-       $(CC) /Fo$(OBJ_D)\ciphers.obj -DMONOLITH $(APP_CFLAGS) -c 
$(SRC_D)\apps\ciphers.c
-
-$(OBJ_D)\nseq.obj: $(SRC_D)\apps\nseq.c
-       $(CC) /Fo$(OBJ_D)\nseq.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\nseq.c
-
-$(OBJ_D)\pkcs12.obj: $(SRC_D)\apps\pkcs12.c
-       $(CC) /Fo$(OBJ_D)\pkcs12.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\pkcs12.c
-
-$(OBJ_D)\pkcs8.obj: $(SRC_D)\apps\pkcs8.c
-       $(CC) /Fo$(OBJ_D)\pkcs8.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\pkcs8.c
-
-$(OBJ_D)\openssl.obj: $(SRC_D)\apps\openssl.c
-       $(CC) /Fo$(OBJ_D)\openssl.obj -DMONOLITH $(APP_CFLAGS) -c 
$(SRC_D)\apps\openssl.c
-
-crypto\bn\asm\x86w32.obj: crypto\bn\asm\x86w32.asm
-       $(ASM) /Focrypto\bn\asm\x86w32.obj $(SRC_D)\crypto\bn\asm\x86w32.asm
-
-$(OBJ_D)\cryptlib.obj: $(SRC_D)\crypto\cryptlib.c
-       $(CC) /Fo$(OBJ_D)\cryptlib.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\cryptlib.c
-
-$(OBJ_D)\mem.obj: $(SRC_D)\crypto\mem.c
-       $(CC) /Fo$(OBJ_D)\mem.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\mem.c
-
-$(OBJ_D)\cversion.obj: $(SRC_D)\crypto\cversion.c
-       $(CC) /Fo$(OBJ_D)\cversion.obj  $(SHLIB_CFLAGS) -DMK1MF_BUILD 
-DMK1MF_PLATFORM_VC_W31_32 -c $(SRC_D)\crypto\cversion.c
-
-$(OBJ_D)\ex_data.obj: $(SRC_D)\crypto\ex_data.c
-       $(CC) /Fo$(OBJ_D)\ex_data.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\ex_data.c
-
-$(OBJ_D)\tmdiff.obj: $(SRC_D)\crypto\tmdiff.c
-       $(CC) /Fo$(OBJ_D)\tmdiff.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\tmdiff.c
-
-$(OBJ_D)\cpt_err.obj: $(SRC_D)\crypto\cpt_err.c
-       $(CC) /Fo$(OBJ_D)\cpt_err.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\cpt_err.c
-
-$(OBJ_D)\md2_dgst.obj: $(SRC_D)\crypto\md2\md2_dgst.c
-       $(CC) /Fo$(OBJ_D)\md2_dgst.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\md2\md2_dgst.c
-
-$(OBJ_D)\md2_one.obj: $(SRC_D)\crypto\md2\md2_one.c
-       $(CC) /Fo$(OBJ_D)\md2_one.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\md2\md2_one.c
-
-$(OBJ_D)\md5_dgst.obj: $(SRC_D)\crypto\md5\md5_dgst.c
-       $(CC) /Fo$(OBJ_D)\md5_dgst.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\md5\md5_dgst.c
-
-$(OBJ_D)\md5_one.obj: $(SRC_D)\crypto\md5\md5_one.c
-       $(CC) /Fo$(OBJ_D)\md5_one.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\md5\md5_one.c
-
-$(OBJ_D)\sha_dgst.obj: $(SRC_D)\crypto\sha\sha_dgst.c
-       $(CC) /Fo$(OBJ_D)\sha_dgst.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\sha\sha_dgst.c
-
-$(OBJ_D)\sha1dgst.obj: $(SRC_D)\crypto\sha\sha1dgst.c
-       $(CC) /Fo$(OBJ_D)\sha1dgst.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\sha\sha1dgst.c
-
-$(OBJ_D)\sha_one.obj: $(SRC_D)\crypto\sha\sha_one.c
-       $(CC) /Fo$(OBJ_D)\sha_one.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\sha\sha_one.c
-
-$(OBJ_D)\sha1_one.obj: $(SRC_D)\crypto\sha\sha1_one.c
-       $(CC) /Fo$(OBJ_D)\sha1_one.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\sha\sha1_one.c
-
-$(OBJ_D)\mdc2dgst.obj: $(SRC_D)\crypto\mdc2\mdc2dgst.c
-       $(CC) /Fo$(OBJ_D)\mdc2dgst.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\mdc2\mdc2dgst.c
-
-$(OBJ_D)\mdc2_one.obj: $(SRC_D)\crypto\mdc2\mdc2_one.c
-       $(CC) /Fo$(OBJ_D)\mdc2_one.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\mdc2\mdc2_one.c
-
-$(OBJ_D)\hmac.obj: $(SRC_D)\crypto\hmac\hmac.c
-       $(CC) /Fo$(OBJ_D)\hmac.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\hmac\hmac.c
-
-$(OBJ_D)\rmd_dgst.obj: $(SRC_D)\crypto\ripemd\rmd_dgst.c
-       $(CC) /Fo$(OBJ_D)\rmd_dgst.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\ripemd\rmd_dgst.c
-
-$(OBJ_D)\rmd_one.obj: $(SRC_D)\crypto\ripemd\rmd_one.c
-       $(CC) /Fo$(OBJ_D)\rmd_one.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\ripemd\rmd_one.c
-
-$(OBJ_D)\set_key.obj: $(SRC_D)\crypto\des\set_key.c
-       $(CC) /Fo$(OBJ_D)\set_key.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\des\set_key.c
-
-$(OBJ_D)\ecb_enc.obj: $(SRC_D)\crypto\des\ecb_enc.c
-       $(CC) /Fo$(OBJ_D)\ecb_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\des\ecb_enc.c
-
-$(OBJ_D)\cbc_enc.obj: $(SRC_D)\crypto\des\cbc_enc.c
-       $(CC) /Fo$(OBJ_D)\cbc_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\des\cbc_enc.c
-
-$(OBJ_D)\ecb3_enc.obj: $(SRC_D)\crypto\des\ecb3_enc.c
-       $(CC) /Fo$(OBJ_D)\ecb3_enc.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\des\ecb3_enc.c
-
-$(OBJ_D)\cfb64enc.obj: $(SRC_D)\crypto\des\cfb64enc.c
-       $(CC) /Fo$(OBJ_D)\cfb64enc.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\des\cfb64enc.c
-
-$(OBJ_D)\cfb64ede.obj: $(SRC_D)\crypto\des\cfb64ede.c
-       $(CC) /Fo$(OBJ_D)\cfb64ede.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\des\cfb64ede.c
-
-$(OBJ_D)\cfb_enc.obj: $(SRC_D)\crypto\des\cfb_enc.c
-       $(CC) /Fo$(OBJ_D)\cfb_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\des\cfb_enc.c
-
-$(OBJ_D)\ofb64ede.obj: $(SRC_D)\crypto\des\ofb64ede.c
-       $(CC) /Fo$(OBJ_D)\ofb64ede.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\des\ofb64ede.c
-
-$(OBJ_D)\enc_read.obj: $(SRC_D)\crypto\des\enc_read.c
-       $(CC) /Fo$(OBJ_D)\enc_read.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\des\enc_read.c
-
-$(OBJ_D)\enc_writ.obj: $(SRC_D)\crypto\des\enc_writ.c
-       $(CC) /Fo$(OBJ_D)\enc_writ.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\des\enc_writ.c
-
-$(OBJ_D)\ofb64enc.obj: $(SRC_D)\crypto\des\ofb64enc.c
-       $(CC) /Fo$(OBJ_D)\ofb64enc.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\des\ofb64enc.c
-
-$(OBJ_D)\ofb_enc.obj: $(SRC_D)\crypto\des\ofb_enc.c
-       $(CC) /Fo$(OBJ_D)\ofb_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\des\ofb_enc.c
-
-$(OBJ_D)\str2key.obj: $(SRC_D)\crypto\des\str2key.c
-       $(CC) /Fo$(OBJ_D)\str2key.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\des\str2key.c
-
-$(OBJ_D)\pcbc_enc.obj: $(SRC_D)\crypto\des\pcbc_enc.c
-       $(CC) /Fo$(OBJ_D)\pcbc_enc.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\des\pcbc_enc.c
-
-$(OBJ_D)\qud_cksm.obj: $(SRC_D)\crypto\des\qud_cksm.c
-       $(CC) /Fo$(OBJ_D)\qud_cksm.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\des\qud_cksm.c
-
-$(OBJ_D)\rand_key.obj: $(SRC_D)\crypto\des\rand_key.c
-       $(CC) /Fo$(OBJ_D)\rand_key.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\des\rand_key.c
-
-$(OBJ_D)\des_enc.obj: $(SRC_D)\crypto\des\des_enc.c
-       $(CC) /Fo$(OBJ_D)\des_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\des\des_enc.c
-
-$(OBJ_D)\fcrypt_b.obj: $(SRC_D)\crypto\des\fcrypt_b.c
-       $(CC) /Fo$(OBJ_D)\fcrypt_b.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\des\fcrypt_b.c
-
-$(OBJ_D)\read2pwd.obj: $(SRC_D)\crypto\des\read2pwd.c
-       $(CC) /Fo$(OBJ_D)\read2pwd.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\des\read2pwd.c
-
-$(OBJ_D)\fcrypt.obj: $(SRC_D)\crypto\des\fcrypt.c
-       $(CC) /Fo$(OBJ_D)\fcrypt.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\des\fcrypt.c
-
-$(OBJ_D)\xcbc_enc.obj: $(SRC_D)\crypto\des\xcbc_enc.c
-       $(CC) /Fo$(OBJ_D)\xcbc_enc.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\des\xcbc_enc.c
-
-$(OBJ_D)\read_pwd.obj: $(SRC_D)\crypto\des\read_pwd.c
-       $(CC) /Fo$(OBJ_D)\read_pwd.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\des\read_pwd.c
-
-$(OBJ_D)\rpc_enc.obj: $(SRC_D)\crypto\des\rpc_enc.c
-       $(CC) /Fo$(OBJ_D)\rpc_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\des\rpc_enc.c
-
-$(OBJ_D)\cbc_cksm.obj: $(SRC_D)\crypto\des\cbc_cksm.c
-       $(CC) /Fo$(OBJ_D)\cbc_cksm.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\des\cbc_cksm.c
-
-$(OBJ_D)\supp.obj: $(SRC_D)\crypto\des\supp.c
-       $(CC) /Fo$(OBJ_D)\supp.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\des\supp.c
-
-$(OBJ_D)\ede_cbcm_enc.obj: $(SRC_D)\crypto\des\ede_cbcm_enc.c
-       $(CC) /Fo$(OBJ_D)\ede_cbcm_enc.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\des\ede_cbcm_enc.c
-
-$(OBJ_D)\rc2_ecb.obj: $(SRC_D)\crypto\rc2\rc2_ecb.c
-       $(CC) /Fo$(OBJ_D)\rc2_ecb.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\rc2\rc2_ecb.c
-
-$(OBJ_D)\rc2_skey.obj: $(SRC_D)\crypto\rc2\rc2_skey.c
-       $(CC) /Fo$(OBJ_D)\rc2_skey.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\rc2\rc2_skey.c
-
-$(OBJ_D)\rc2_cbc.obj: $(SRC_D)\crypto\rc2\rc2_cbc.c
-       $(CC) /Fo$(OBJ_D)\rc2_cbc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\rc2\rc2_cbc.c
-
-$(OBJ_D)\rc2cfb64.obj: $(SRC_D)\crypto\rc2\rc2cfb64.c
-       $(CC) /Fo$(OBJ_D)\rc2cfb64.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\rc2\rc2cfb64.c
-
-$(OBJ_D)\rc2ofb64.obj: $(SRC_D)\crypto\rc2\rc2ofb64.c
-       $(CC) /Fo$(OBJ_D)\rc2ofb64.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\rc2\rc2ofb64.c
-
-$(OBJ_D)\rc4_skey.obj: $(SRC_D)\crypto\rc4\rc4_skey.c
-       $(CC) /Fo$(OBJ_D)\rc4_skey.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\rc4\rc4_skey.c
-
-$(OBJ_D)\rc4_enc.obj: $(SRC_D)\crypto\rc4\rc4_enc.c
-       $(CC) /Fo$(OBJ_D)\rc4_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\rc4\rc4_enc.c
-
-$(OBJ_D)\rc5_skey.obj: $(SRC_D)\crypto\rc5\rc5_skey.c
-       $(CC) /Fo$(OBJ_D)\rc5_skey.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\rc5\rc5_skey.c
-
-$(OBJ_D)\rc5_ecb.obj: $(SRC_D)\crypto\rc5\rc5_ecb.c
-       $(CC) /Fo$(OBJ_D)\rc5_ecb.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\rc5\rc5_ecb.c
-
-$(OBJ_D)\rc5_enc.obj: $(SRC_D)\crypto\rc5\rc5_enc.c
-       $(CC) /Fo$(OBJ_D)\rc5_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\rc5\rc5_enc.c
-
-$(OBJ_D)\rc5cfb64.obj: $(SRC_D)\crypto\rc5\rc5cfb64.c
-       $(CC) /Fo$(OBJ_D)\rc5cfb64.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\rc5\rc5cfb64.c
-
-$(OBJ_D)\rc5ofb64.obj: $(SRC_D)\crypto\rc5\rc5ofb64.c
-       $(CC) /Fo$(OBJ_D)\rc5ofb64.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\rc5\rc5ofb64.c
-
-$(OBJ_D)\i_cbc.obj: $(SRC_D)\crypto\idea\i_cbc.c
-       $(CC) /Fo$(OBJ_D)\i_cbc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\idea\i_cbc.c
-
-$(OBJ_D)\i_cfb64.obj: $(SRC_D)\crypto\idea\i_cfb64.c
-       $(CC) /Fo$(OBJ_D)\i_cfb64.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\idea\i_cfb64.c
-
-$(OBJ_D)\i_ofb64.obj: $(SRC_D)\crypto\idea\i_ofb64.c
-       $(CC) /Fo$(OBJ_D)\i_ofb64.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\idea\i_ofb64.c
-
-$(OBJ_D)\i_ecb.obj: $(SRC_D)\crypto\idea\i_ecb.c
-       $(CC) /Fo$(OBJ_D)\i_ecb.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\idea\i_ecb.c
-
-$(OBJ_D)\i_skey.obj: $(SRC_D)\crypto\idea\i_skey.c
-       $(CC) /Fo$(OBJ_D)\i_skey.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\idea\i_skey.c
-
-$(OBJ_D)\bf_skey.obj: $(SRC_D)\crypto\bf\bf_skey.c
-       $(CC) /Fo$(OBJ_D)\bf_skey.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bf\bf_skey.c
-
-$(OBJ_D)\bf_ecb.obj: $(SRC_D)\crypto\bf\bf_ecb.c
-       $(CC) /Fo$(OBJ_D)\bf_ecb.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bf\bf_ecb.c
-
-$(OBJ_D)\bf_enc.obj: $(SRC_D)\crypto\bf\bf_enc.c
-       $(CC) /Fo$(OBJ_D)\bf_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bf\bf_enc.c
-
-$(OBJ_D)\bf_cfb64.obj: $(SRC_D)\crypto\bf\bf_cfb64.c
-       $(CC) /Fo$(OBJ_D)\bf_cfb64.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\bf\bf_cfb64.c
-
-$(OBJ_D)\bf_ofb64.obj: $(SRC_D)\crypto\bf\bf_ofb64.c
-       $(CC) /Fo$(OBJ_D)\bf_ofb64.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\bf\bf_ofb64.c
-
-$(OBJ_D)\c_skey.obj: $(SRC_D)\crypto\cast\c_skey.c
-       $(CC) /Fo$(OBJ_D)\c_skey.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\cast\c_skey.c
-
-$(OBJ_D)\c_ecb.obj: $(SRC_D)\crypto\cast\c_ecb.c
-       $(CC) /Fo$(OBJ_D)\c_ecb.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\cast\c_ecb.c
-
-$(OBJ_D)\c_enc.obj: $(SRC_D)\crypto\cast\c_enc.c
-       $(CC) /Fo$(OBJ_D)\c_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\cast\c_enc.c
-
-$(OBJ_D)\c_cfb64.obj: $(SRC_D)\crypto\cast\c_cfb64.c
-       $(CC) /Fo$(OBJ_D)\c_cfb64.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\cast\c_cfb64.c
-
-$(OBJ_D)\c_ofb64.obj: $(SRC_D)\crypto\cast\c_ofb64.c
-       $(CC) /Fo$(OBJ_D)\c_ofb64.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\cast\c_ofb64.c
-
-$(OBJ_D)\bn_add.obj: $(SRC_D)\crypto\bn\bn_add.c
-       $(CC) /Fo$(OBJ_D)\bn_add.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_add.c
-
-$(OBJ_D)\bn_div.obj: $(SRC_D)\crypto\bn\bn_div.c
-       $(CC) /Fo$(OBJ_D)\bn_div.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_div.c
-
-$(OBJ_D)\bn_exp.obj: $(SRC_D)\crypto\bn\bn_exp.c
-       $(CC) /Fo$(OBJ_D)\bn_exp.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_exp.c
-
-$(OBJ_D)\bn_lib.obj: $(SRC_D)\crypto\bn\bn_lib.c
-       $(CC) /Fo$(OBJ_D)\bn_lib.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_lib.c
-
-$(OBJ_D)\bn_mul.obj: $(SRC_D)\crypto\bn\bn_mul.c
-       $(CC) /Fo$(OBJ_D)\bn_mul.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_mul.c
-
-$(OBJ_D)\bn_print.obj: $(SRC_D)\crypto\bn\bn_print.c
-       $(CC) /Fo$(OBJ_D)\bn_print.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\bn\bn_print.c
-
-$(OBJ_D)\bn_rand.obj: $(SRC_D)\crypto\bn\bn_rand.c
-       $(CC) /Fo$(OBJ_D)\bn_rand.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_rand.c
-
-$(OBJ_D)\bn_shift.obj: $(SRC_D)\crypto\bn\bn_shift.c
-       $(CC) /Fo$(OBJ_D)\bn_shift.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\bn\bn_shift.c
-
-$(OBJ_D)\bn_word.obj: $(SRC_D)\crypto\bn\bn_word.c
-       $(CC) /Fo$(OBJ_D)\bn_word.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_word.c
-
-$(OBJ_D)\bn_blind.obj: $(SRC_D)\crypto\bn\bn_blind.c
-       $(CC) /Fo$(OBJ_D)\bn_blind.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\bn\bn_blind.c
-
-$(OBJ_D)\bn_gcd.obj: $(SRC_D)\crypto\bn\bn_gcd.c
-       $(CC) /Fo$(OBJ_D)\bn_gcd.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_gcd.c
-
-$(OBJ_D)\bn_prime.obj: $(SRC_D)\crypto\bn\bn_prime.c
-       $(CC) /Fo$(OBJ_D)\bn_prime.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\bn\bn_prime.c
-
-$(OBJ_D)\bn_err.obj: $(SRC_D)\crypto\bn\bn_err.c
-       $(CC) /Fo$(OBJ_D)\bn_err.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_err.c
-
-$(OBJ_D)\bn_sqr.obj: $(SRC_D)\crypto\bn\bn_sqr.c
-       $(CC) /Fo$(OBJ_D)\bn_sqr.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_sqr.c
-
-$(OBJ_D)\bn_asm.obj: $(SRC_D)\crypto\bn\bn_asm.c
-       $(CC) /Fo$(OBJ_D)\bn_asm.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_asm.c
-
-$(OBJ_D)\bn_recp.obj: $(SRC_D)\crypto\bn\bn_recp.c
-       $(CC) /Fo$(OBJ_D)\bn_recp.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_recp.c
-
-$(OBJ_D)\bn_mont.obj: $(SRC_D)\crypto\bn\bn_mont.c
-       $(CC) /Fo$(OBJ_D)\bn_mont.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_mont.c
-
-$(OBJ_D)\bn_mpi.obj: $(SRC_D)\crypto\bn\bn_mpi.c
-       $(CC) /Fo$(OBJ_D)\bn_mpi.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_mpi.c
-
-$(OBJ_D)\bn_exp2.obj: $(SRC_D)\crypto\bn\bn_exp2.c
-       $(CC) /Fo$(OBJ_D)\bn_exp2.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_exp2.c
-
-$(OBJ_D)\rsa_eay.obj: $(SRC_D)\crypto\rsa\rsa_eay.c
-       $(CC) /Fo$(OBJ_D)\rsa_eay.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\rsa\rsa_eay.c
-
-$(OBJ_D)\rsa_gen.obj: $(SRC_D)\crypto\rsa\rsa_gen.c
-       $(CC) /Fo$(OBJ_D)\rsa_gen.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\rsa\rsa_gen.c
-
-$(OBJ_D)\rsa_lib.obj: $(SRC_D)\crypto\rsa\rsa_lib.c
-       $(CC) /Fo$(OBJ_D)\rsa_lib.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\rsa\rsa_lib.c
-
-$(OBJ_D)\rsa_sign.obj: $(SRC_D)\crypto\rsa\rsa_sign.c
-       $(CC) /Fo$(OBJ_D)\rsa_sign.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\rsa\rsa_sign.c
-
-$(OBJ_D)\rsa_saos.obj: $(SRC_D)\crypto\rsa\rsa_saos.c
-       $(CC) /Fo$(OBJ_D)\rsa_saos.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\rsa\rsa_saos.c
-
-$(OBJ_D)\rsa_err.obj: $(SRC_D)\crypto\rsa\rsa_err.c
-       $(CC) /Fo$(OBJ_D)\rsa_err.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\rsa\rsa_err.c
-
-$(OBJ_D)\rsa_pk1.obj: $(SRC_D)\crypto\rsa\rsa_pk1.c
-       $(CC) /Fo$(OBJ_D)\rsa_pk1.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\rsa\rsa_pk1.c
-
-$(OBJ_D)\rsa_ssl.obj: $(SRC_D)\crypto\rsa\rsa_ssl.c
-       $(CC) /Fo$(OBJ_D)\rsa_ssl.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\rsa\rsa_ssl.c
-
-$(OBJ_D)\rsa_none.obj: $(SRC_D)\crypto\rsa\rsa_none.c
-       $(CC) /Fo$(OBJ_D)\rsa_none.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\rsa\rsa_none.c
-
-$(OBJ_D)\rsa_oaep.obj: $(SRC_D)\crypto\rsa\rsa_oaep.c
-       $(CC) /Fo$(OBJ_D)\rsa_oaep.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\rsa\rsa_oaep.c
-
-$(OBJ_D)\rsa_chk.obj: $(SRC_D)\crypto\rsa\rsa_chk.c
-       $(CC) /Fo$(OBJ_D)\rsa_chk.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\rsa\rsa_chk.c
-
-$(OBJ_D)\dsa_gen.obj: $(SRC_D)\crypto\dsa\dsa_gen.c
-       $(CC) /Fo$(OBJ_D)\dsa_gen.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\dsa\dsa_gen.c
-
-$(OBJ_D)\dsa_key.obj: $(SRC_D)\crypto\dsa\dsa_key.c
-       $(CC) /Fo$(OBJ_D)\dsa_key.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\dsa\dsa_key.c
-
-$(OBJ_D)\dsa_lib.obj: $(SRC_D)\crypto\dsa\dsa_lib.c
-       $(CC) /Fo$(OBJ_D)\dsa_lib.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\dsa\dsa_lib.c
-
-$(OBJ_D)\dsa_asn1.obj: $(SRC_D)\crypto\dsa\dsa_asn1.c
-       $(CC) /Fo$(OBJ_D)\dsa_asn1.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\dsa\dsa_asn1.c
-
-$(OBJ_D)\dsa_vrf.obj: $(SRC_D)\crypto\dsa\dsa_vrf.c
-       $(CC) /Fo$(OBJ_D)\dsa_vrf.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\dsa\dsa_vrf.c
-
-$(OBJ_D)\dsa_sign.obj: $(SRC_D)\crypto\dsa\dsa_sign.c
-       $(CC) /Fo$(OBJ_D)\dsa_sign.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\dsa\dsa_sign.c
-
-$(OBJ_D)\dsa_err.obj: $(SRC_D)\crypto\dsa\dsa_err.c
-       $(CC) /Fo$(OBJ_D)\dsa_err.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\dsa\dsa_err.c
-
-$(OBJ_D)\dh_gen.obj: $(SRC_D)\crypto\dh\dh_gen.c
-       $(CC) /Fo$(OBJ_D)\dh_gen.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\dh\dh_gen.c
-
-$(OBJ_D)\dh_key.obj: $(SRC_D)\crypto\dh\dh_key.c
-       $(CC) /Fo$(OBJ_D)\dh_key.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\dh\dh_key.c
-
-$(OBJ_D)\dh_lib.obj: $(SRC_D)\crypto\dh\dh_lib.c
-       $(CC) /Fo$(OBJ_D)\dh_lib.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\dh\dh_lib.c
-
-$(OBJ_D)\dh_check.obj: $(SRC_D)\crypto\dh\dh_check.c
-       $(CC) /Fo$(OBJ_D)\dh_check.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\dh\dh_check.c
-
-$(OBJ_D)\dh_err.obj: $(SRC_D)\crypto\dh\dh_err.c
-       $(CC) /Fo$(OBJ_D)\dh_err.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\dh\dh_err.c
-
-$(OBJ_D)\buffer.obj: $(SRC_D)\crypto\buffer\buffer.c
-       $(CC) /Fo$(OBJ_D)\buffer.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\buffer\buffer.c
-
-$(OBJ_D)\buf_err.obj: $(SRC_D)\crypto\buffer\buf_err.c
-       $(CC) /Fo$(OBJ_D)\buf_err.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\buffer\buf_err.c
-
-$(OBJ_D)\bio_lib.obj: $(SRC_D)\crypto\bio\bio_lib.c
-       $(CC) /Fo$(OBJ_D)\bio_lib.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bio\bio_lib.c
-
-$(OBJ_D)\bio_cb.obj: $(SRC_D)\crypto\bio\bio_cb.c
-       $(CC) /Fo$(OBJ_D)\bio_cb.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bio\bio_cb.c
-
-$(OBJ_D)\bio_err.obj: $(SRC_D)\crypto\bio\bio_err.c
-       $(CC) /Fo$(OBJ_D)\bio_err.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bio\bio_err.c
-
-$(OBJ_D)\bss_mem.obj: $(SRC_D)\crypto\bio\bss_mem.c
-       $(CC) /Fo$(OBJ_D)\bss_mem.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bio\bss_mem.c
-
-$(OBJ_D)\bss_null.obj: $(SRC_D)\crypto\bio\bss_null.c
-       $(CC) /Fo$(OBJ_D)\bss_null.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\bio\bss_null.c
-
-$(OBJ_D)\bss_fd.obj: $(SRC_D)\crypto\bio\bss_fd.c
-       $(CC) /Fo$(OBJ_D)\bss_fd.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bio\bss_fd.c
-
-$(OBJ_D)\bss_file.obj: $(SRC_D)\crypto\bio\bss_file.c
-       $(CC) /Fo$(OBJ_D)\bss_file.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\bio\bss_file.c
-
-$(OBJ_D)\bss_sock.obj: $(SRC_D)\crypto\bio\bss_sock.c
-       $(CC) /Fo$(OBJ_D)\bss_sock.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\bio\bss_sock.c
-
-$(OBJ_D)\bss_conn.obj: $(SRC_D)\crypto\bio\bss_conn.c
-       $(CC) /Fo$(OBJ_D)\bss_conn.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\bio\bss_conn.c
-
-$(OBJ_D)\bf_null.obj: $(SRC_D)\crypto\bio\bf_null.c
-       $(CC) /Fo$(OBJ_D)\bf_null.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bio\bf_null.c
-
-$(OBJ_D)\bf_buff.obj: $(SRC_D)\crypto\bio\bf_buff.c
-       $(CC) /Fo$(OBJ_D)\bf_buff.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bio\bf_buff.c
-
-$(OBJ_D)\b_print.obj: $(SRC_D)\crypto\bio\b_print.c
-       $(CC) /Fo$(OBJ_D)\b_print.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bio\b_print.c
-
-$(OBJ_D)\b_dump.obj: $(SRC_D)\crypto\bio\b_dump.c
-       $(CC) /Fo$(OBJ_D)\b_dump.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bio\b_dump.c
-
-$(OBJ_D)\b_sock.obj: $(SRC_D)\crypto\bio\b_sock.c
-       $(CC) /Fo$(OBJ_D)\b_sock.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bio\b_sock.c
-
-$(OBJ_D)\bss_acpt.obj: $(SRC_D)\crypto\bio\bss_acpt.c
-       $(CC) /Fo$(OBJ_D)\bss_acpt.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\bio\bss_acpt.c
-
-$(OBJ_D)\bf_nbio.obj: $(SRC_D)\crypto\bio\bf_nbio.c
-       $(CC) /Fo$(OBJ_D)\bf_nbio.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bio\bf_nbio.c
-
-$(OBJ_D)\bss_log.obj: $(SRC_D)\crypto\bio\bss_log.c
-       $(CC) /Fo$(OBJ_D)\bss_log.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bio\bss_log.c
-
-$(OBJ_D)\bss_bio.obj: $(SRC_D)\crypto\bio\bss_bio.c
-       $(CC) /Fo$(OBJ_D)\bss_bio.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bio\bss_bio.c
-
-$(OBJ_D)\stack.obj: $(SRC_D)\crypto\stack\stack.c
-       $(CC) /Fo$(OBJ_D)\stack.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\stack\stack.c
-
-$(OBJ_D)\lhash.obj: $(SRC_D)\crypto\lhash\lhash.c
-       $(CC) /Fo$(OBJ_D)\lhash.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\lhash\lhash.c
-
-$(OBJ_D)\lh_stats.obj: $(SRC_D)\crypto\lhash\lh_stats.c
-       $(CC) /Fo$(OBJ_D)\lh_stats.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\lhash\lh_stats.c
-
-$(OBJ_D)\md_rand.obj: $(SRC_D)\crypto\rand\md_rand.c
-       $(CC) /Fo$(OBJ_D)\md_rand.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\rand\md_rand.c
-
-$(OBJ_D)\randfile.obj: $(SRC_D)\crypto\rand\randfile.c
-       $(CC) /Fo$(OBJ_D)\randfile.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\rand\randfile.c
-
-$(OBJ_D)\rand_lib.obj: $(SRC_D)\crypto\rand\rand_lib.c
-       $(CC) /Fo$(OBJ_D)\rand_lib.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\rand\rand_lib.c
-
-$(OBJ_D)\err.obj: $(SRC_D)\crypto\err\err.c
-       $(CC) /Fo$(OBJ_D)\err.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\err\err.c
-
-$(OBJ_D)\err_all.obj: $(SRC_D)\crypto\err\err_all.c
-       $(CC) /Fo$(OBJ_D)\err_all.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\err\err_all.c
-
-$(OBJ_D)\err_prn.obj: $(SRC_D)\crypto\err\err_prn.c
-       $(CC) /Fo$(OBJ_D)\err_prn.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\err\err_prn.c
-
-$(OBJ_D)\o_names.obj: $(SRC_D)\crypto\objects\o_names.c
-       $(CC) /Fo$(OBJ_D)\o_names.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\objects\o_names.c
-
-$(OBJ_D)\obj_dat.obj: $(SRC_D)\crypto\objects\obj_dat.c
-       $(CC) /Fo$(OBJ_D)\obj_dat.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\objects\obj_dat.c
-
-$(OBJ_D)\obj_lib.obj: $(SRC_D)\crypto\objects\obj_lib.c
-       $(CC) /Fo$(OBJ_D)\obj_lib.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\objects\obj_lib.c
-
-$(OBJ_D)\obj_err.obj: $(SRC_D)\crypto\objects\obj_err.c
-       $(CC) /Fo$(OBJ_D)\obj_err.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\objects\obj_err.c
-
-$(OBJ_D)\encode.obj: $(SRC_D)\crypto\evp\encode.c
-       $(CC) /Fo$(OBJ_D)\encode.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\encode.c
-
-$(OBJ_D)\digest.obj: $(SRC_D)\crypto\evp\digest.c
-       $(CC) /Fo$(OBJ_D)\digest.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\digest.c
-
-$(OBJ_D)\evp_enc.obj: $(SRC_D)\crypto\evp\evp_enc.c
-       $(CC) /Fo$(OBJ_D)\evp_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\evp_enc.c
-
-$(OBJ_D)\evp_key.obj: $(SRC_D)\crypto\evp\evp_key.c
-       $(CC) /Fo$(OBJ_D)\evp_key.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\evp_key.c
-
-$(OBJ_D)\e_ecb_d.obj: $(SRC_D)\crypto\evp\e_ecb_d.c
-       $(CC) /Fo$(OBJ_D)\e_ecb_d.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_ecb_d.c
-
-$(OBJ_D)\e_cbc_d.obj: $(SRC_D)\crypto\evp\e_cbc_d.c
-       $(CC) /Fo$(OBJ_D)\e_cbc_d.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_cbc_d.c
-
-$(OBJ_D)\e_cfb_d.obj: $(SRC_D)\crypto\evp\e_cfb_d.c
-       $(CC) /Fo$(OBJ_D)\e_cfb_d.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_cfb_d.c
-
-$(OBJ_D)\e_ofb_d.obj: $(SRC_D)\crypto\evp\e_ofb_d.c
-       $(CC) /Fo$(OBJ_D)\e_ofb_d.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_ofb_d.c
-
-$(OBJ_D)\e_ecb_i.obj: $(SRC_D)\crypto\evp\e_ecb_i.c
-       $(CC) /Fo$(OBJ_D)\e_ecb_i.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_ecb_i.c
-
-$(OBJ_D)\e_cbc_i.obj: $(SRC_D)\crypto\evp\e_cbc_i.c
-       $(CC) /Fo$(OBJ_D)\e_cbc_i.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_cbc_i.c
-
-$(OBJ_D)\e_cfb_i.obj: $(SRC_D)\crypto\evp\e_cfb_i.c
-       $(CC) /Fo$(OBJ_D)\e_cfb_i.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_cfb_i.c
-
-$(OBJ_D)\e_ofb_i.obj: $(SRC_D)\crypto\evp\e_ofb_i.c
-       $(CC) /Fo$(OBJ_D)\e_ofb_i.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_ofb_i.c
-
-$(OBJ_D)\e_ecb_3d.obj: $(SRC_D)\crypto\evp\e_ecb_3d.c
-       $(CC) /Fo$(OBJ_D)\e_ecb_3d.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\evp\e_ecb_3d.c
-
-$(OBJ_D)\e_cbc_3d.obj: $(SRC_D)\crypto\evp\e_cbc_3d.c
-       $(CC) /Fo$(OBJ_D)\e_cbc_3d.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\evp\e_cbc_3d.c
-
-$(OBJ_D)\e_rc4.obj: $(SRC_D)\crypto\evp\e_rc4.c
-       $(CC) /Fo$(OBJ_D)\e_rc4.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_rc4.c
-
-$(OBJ_D)\names.obj: $(SRC_D)\crypto\evp\names.c
-       $(CC) /Fo$(OBJ_D)\names.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\names.c
-
-$(OBJ_D)\e_cfb_3d.obj: $(SRC_D)\crypto\evp\e_cfb_3d.c
-       $(CC) /Fo$(OBJ_D)\e_cfb_3d.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\evp\e_cfb_3d.c
-
-$(OBJ_D)\e_ofb_3d.obj: $(SRC_D)\crypto\evp\e_ofb_3d.c
-       $(CC) /Fo$(OBJ_D)\e_ofb_3d.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\evp\e_ofb_3d.c
-
-$(OBJ_D)\e_xcbc_d.obj: $(SRC_D)\crypto\evp\e_xcbc_d.c
-       $(CC) /Fo$(OBJ_D)\e_xcbc_d.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\evp\e_xcbc_d.c
-
-$(OBJ_D)\e_ecb_r2.obj: $(SRC_D)\crypto\evp\e_ecb_r2.c
-       $(CC) /Fo$(OBJ_D)\e_ecb_r2.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\evp\e_ecb_r2.c
-
-$(OBJ_D)\e_cbc_r2.obj: $(SRC_D)\crypto\evp\e_cbc_r2.c
-       $(CC) /Fo$(OBJ_D)\e_cbc_r2.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\evp\e_cbc_r2.c
-
-$(OBJ_D)\e_cfb_r2.obj: $(SRC_D)\crypto\evp\e_cfb_r2.c
-       $(CC) /Fo$(OBJ_D)\e_cfb_r2.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\evp\e_cfb_r2.c
-
-$(OBJ_D)\e_ofb_r2.obj: $(SRC_D)\crypto\evp\e_ofb_r2.c
-       $(CC) /Fo$(OBJ_D)\e_ofb_r2.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\evp\e_ofb_r2.c
-
-$(OBJ_D)\e_ecb_bf.obj: $(SRC_D)\crypto\evp\e_ecb_bf.c
-       $(CC) /Fo$(OBJ_D)\e_ecb_bf.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\evp\e_ecb_bf.c
-
-$(OBJ_D)\e_cbc_bf.obj: $(SRC_D)\crypto\evp\e_cbc_bf.c
-       $(CC) /Fo$(OBJ_D)\e_cbc_bf.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\evp\e_cbc_bf.c
-
-$(OBJ_D)\e_cfb_bf.obj: $(SRC_D)\crypto\evp\e_cfb_bf.c
-       $(CC) /Fo$(OBJ_D)\e_cfb_bf.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\evp\e_cfb_bf.c
-
-$(OBJ_D)\e_ofb_bf.obj: $(SRC_D)\crypto\evp\e_ofb_bf.c
-       $(CC) /Fo$(OBJ_D)\e_ofb_bf.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\evp\e_ofb_bf.c
-
-$(OBJ_D)\e_ecb_c.obj: $(SRC_D)\crypto\evp\e_ecb_c.c
-       $(CC) /Fo$(OBJ_D)\e_ecb_c.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_ecb_c.c
-
-$(OBJ_D)\e_cbc_c.obj: $(SRC_D)\crypto\evp\e_cbc_c.c
-       $(CC) /Fo$(OBJ_D)\e_cbc_c.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_cbc_c.c
-
-$(OBJ_D)\e_cfb_c.obj: $(SRC_D)\crypto\evp\e_cfb_c.c
-       $(CC) /Fo$(OBJ_D)\e_cfb_c.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_cfb_c.c
-
-$(OBJ_D)\e_ofb_c.obj: $(SRC_D)\crypto\evp\e_ofb_c.c
-       $(CC) /Fo$(OBJ_D)\e_ofb_c.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_ofb_c.c
-
-$(OBJ_D)\e_ecb_r5.obj: $(SRC_D)\crypto\evp\e_ecb_r5.c
-       $(CC) /Fo$(OBJ_D)\e_ecb_r5.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\evp\e_ecb_r5.c
-
-$(OBJ_D)\e_cbc_r5.obj: $(SRC_D)\crypto\evp\e_cbc_r5.c
-       $(CC) /Fo$(OBJ_D)\e_cbc_r5.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\evp\e_cbc_r5.c
-
-$(OBJ_D)\e_cfb_r5.obj: $(SRC_D)\crypto\evp\e_cfb_r5.c
-       $(CC) /Fo$(OBJ_D)\e_cfb_r5.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\evp\e_cfb_r5.c
-
-$(OBJ_D)\e_ofb_r5.obj: $(SRC_D)\crypto\evp\e_ofb_r5.c
-       $(CC) /Fo$(OBJ_D)\e_ofb_r5.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\evp\e_ofb_r5.c
-
-$(OBJ_D)\m_null.obj: $(SRC_D)\crypto\evp\m_null.c
-       $(CC) /Fo$(OBJ_D)\m_null.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\m_null.c
-
-$(OBJ_D)\m_md2.obj: $(SRC_D)\crypto\evp\m_md2.c
-       $(CC) /Fo$(OBJ_D)\m_md2.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\m_md2.c
-
-$(OBJ_D)\m_md5.obj: $(SRC_D)\crypto\evp\m_md5.c
-       $(CC) /Fo$(OBJ_D)\m_md5.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\m_md5.c
-
-$(OBJ_D)\m_sha.obj: $(SRC_D)\crypto\evp\m_sha.c
-       $(CC) /Fo$(OBJ_D)\m_sha.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\m_sha.c
-
-$(OBJ_D)\m_sha1.obj: $(SRC_D)\crypto\evp\m_sha1.c
-       $(CC) /Fo$(OBJ_D)\m_sha1.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\m_sha1.c
-
-$(OBJ_D)\m_dss.obj: $(SRC_D)\crypto\evp\m_dss.c
-       $(CC) /Fo$(OBJ_D)\m_dss.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\m_dss.c
-
-$(OBJ_D)\m_dss1.obj: $(SRC_D)\crypto\evp\m_dss1.c
-       $(CC) /Fo$(OBJ_D)\m_dss1.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\m_dss1.c
-
-$(OBJ_D)\m_mdc2.obj: $(SRC_D)\crypto\evp\m_mdc2.c
-       $(CC) /Fo$(OBJ_D)\m_mdc2.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\m_mdc2.c
-
-$(OBJ_D)\m_ripemd.obj: $(SRC_D)\crypto\evp\m_ripemd.c
-       $(CC) /Fo$(OBJ_D)\m_ripemd.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\evp\m_ripemd.c
-
-$(OBJ_D)\p_open.obj: $(SRC_D)\crypto\evp\p_open.c
-       $(CC) /Fo$(OBJ_D)\p_open.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\p_open.c
-
-$(OBJ_D)\p_seal.obj: $(SRC_D)\crypto\evp\p_seal.c
-       $(CC) /Fo$(OBJ_D)\p_seal.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\p_seal.c
-
-$(OBJ_D)\p_sign.obj: $(SRC_D)\crypto\evp\p_sign.c
-       $(CC) /Fo$(OBJ_D)\p_sign.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\p_sign.c
-
-$(OBJ_D)\p_verify.obj: $(SRC_D)\crypto\evp\p_verify.c
-       $(CC) /Fo$(OBJ_D)\p_verify.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\evp\p_verify.c
-
-$(OBJ_D)\p_lib.obj: $(SRC_D)\crypto\evp\p_lib.c
-       $(CC) /Fo$(OBJ_D)\p_lib.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\p_lib.c
-
-$(OBJ_D)\p_enc.obj: $(SRC_D)\crypto\evp\p_enc.c
-       $(CC) /Fo$(OBJ_D)\p_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\p_enc.c
-
-$(OBJ_D)\p_dec.obj: $(SRC_D)\crypto\evp\p_dec.c
-       $(CC) /Fo$(OBJ_D)\p_dec.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\p_dec.c
-
-$(OBJ_D)\bio_md.obj: $(SRC_D)\crypto\evp\bio_md.c
-       $(CC) /Fo$(OBJ_D)\bio_md.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\bio_md.c
-
-$(OBJ_D)\bio_b64.obj: $(SRC_D)\crypto\evp\bio_b64.c
-       $(CC) /Fo$(OBJ_D)\bio_b64.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\bio_b64.c
-
-$(OBJ_D)\bio_enc.obj: $(SRC_D)\crypto\evp\bio_enc.c
-       $(CC) /Fo$(OBJ_D)\bio_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\bio_enc.c
-
-$(OBJ_D)\evp_err.obj: $(SRC_D)\crypto\evp\evp_err.c
-       $(CC) /Fo$(OBJ_D)\evp_err.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\evp_err.c
-
-$(OBJ_D)\e_null.obj: $(SRC_D)\crypto\evp\e_null.c
-       $(CC) /Fo$(OBJ_D)\e_null.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_null.c
-
-$(OBJ_D)\c_all.obj: $(SRC_D)\crypto\evp\c_all.c
-       $(CC) /Fo$(OBJ_D)\c_all.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\c_all.c
-
-$(OBJ_D)\evp_lib.obj: $(SRC_D)\crypto\evp\evp_lib.c
-       $(CC) /Fo$(OBJ_D)\evp_lib.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\evp_lib.c
-
-$(OBJ_D)\bio_ok.obj: $(SRC_D)\crypto\evp\bio_ok.c
-       $(CC) /Fo$(OBJ_D)\bio_ok.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\bio_ok.c
-
-$(OBJ_D)\evp_pkey.obj: $(SRC_D)\crypto\evp\evp_pkey.c
-       $(CC) /Fo$(OBJ_D)\evp_pkey.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\evp\evp_pkey.c
-
-$(OBJ_D)\evp_pbe.obj: $(SRC_D)\crypto\evp\evp_pbe.c
-       $(CC) /Fo$(OBJ_D)\evp_pbe.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\evp_pbe.c
-
-$(OBJ_D)\p5_crpt.obj: $(SRC_D)\crypto\evp\p5_crpt.c
-       $(CC) /Fo$(OBJ_D)\p5_crpt.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\p5_crpt.c
-
-$(OBJ_D)\p5_crpt2.obj: $(SRC_D)\crypto\evp\p5_crpt2.c
-       $(CC) /Fo$(OBJ_D)\p5_crpt2.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\evp\p5_crpt2.c
-
-$(OBJ_D)\a_object.obj: $(SRC_D)\crypto\asn1\a_object.c
-       $(CC) /Fo$(OBJ_D)\a_object.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\a_object.c
-
-$(OBJ_D)\a_bitstr.obj: $(SRC_D)\crypto\asn1\a_bitstr.c
-       $(CC) /Fo$(OBJ_D)\a_bitstr.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\a_bitstr.c
-
-$(OBJ_D)\a_utctm.obj: $(SRC_D)\crypto\asn1\a_utctm.c
-       $(CC) /Fo$(OBJ_D)\a_utctm.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\a_utctm.c
-
-$(OBJ_D)\a_gentm.obj: $(SRC_D)\crypto\asn1\a_gentm.c
-       $(CC) /Fo$(OBJ_D)\a_gentm.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\a_gentm.c
-
-$(OBJ_D)\a_time.obj: $(SRC_D)\crypto\asn1\a_time.c
-       $(CC) /Fo$(OBJ_D)\a_time.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_time.c
-
-$(OBJ_D)\a_int.obj: $(SRC_D)\crypto\asn1\a_int.c
-       $(CC) /Fo$(OBJ_D)\a_int.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_int.c
-
-$(OBJ_D)\a_octet.obj: $(SRC_D)\crypto\asn1\a_octet.c
-       $(CC) /Fo$(OBJ_D)\a_octet.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\a_octet.c
-
-$(OBJ_D)\a_print.obj: $(SRC_D)\crypto\asn1\a_print.c
-       $(CC) /Fo$(OBJ_D)\a_print.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\a_print.c
-
-$(OBJ_D)\a_type.obj: $(SRC_D)\crypto\asn1\a_type.c
-       $(CC) /Fo$(OBJ_D)\a_type.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_type.c
-
-$(OBJ_D)\a_set.obj: $(SRC_D)\crypto\asn1\a_set.c
-       $(CC) /Fo$(OBJ_D)\a_set.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_set.c
-
-$(OBJ_D)\a_dup.obj: $(SRC_D)\crypto\asn1\a_dup.c
-       $(CC) /Fo$(OBJ_D)\a_dup.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_dup.c
-
-$(OBJ_D)\a_d2i_fp.obj: $(SRC_D)\crypto\asn1\a_d2i_fp.c
-       $(CC) /Fo$(OBJ_D)\a_d2i_fp.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\a_d2i_fp.c
-
-$(OBJ_D)\a_i2d_fp.obj: $(SRC_D)\crypto\asn1\a_i2d_fp.c
-       $(CC) /Fo$(OBJ_D)\a_i2d_fp.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\a_i2d_fp.c
-
-$(OBJ_D)\a_bmp.obj: $(SRC_D)\crypto\asn1\a_bmp.c
-       $(CC) /Fo$(OBJ_D)\a_bmp.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_bmp.c
-
-$(OBJ_D)\a_enum.obj: $(SRC_D)\crypto\asn1\a_enum.c
-       $(CC) /Fo$(OBJ_D)\a_enum.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_enum.c
-
-$(OBJ_D)\a_vis.obj: $(SRC_D)\crypto\asn1\a_vis.c
-       $(CC) /Fo$(OBJ_D)\a_vis.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_vis.c
-
-$(OBJ_D)\a_utf8.obj: $(SRC_D)\crypto\asn1\a_utf8.c
-       $(CC) /Fo$(OBJ_D)\a_utf8.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_utf8.c
-
-$(OBJ_D)\a_sign.obj: $(SRC_D)\crypto\asn1\a_sign.c
-       $(CC) /Fo$(OBJ_D)\a_sign.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_sign.c
-
-$(OBJ_D)\a_digest.obj: $(SRC_D)\crypto\asn1\a_digest.c
-       $(CC) /Fo$(OBJ_D)\a_digest.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\a_digest.c
-
-$(OBJ_D)\a_verify.obj: $(SRC_D)\crypto\asn1\a_verify.c
-       $(CC) /Fo$(OBJ_D)\a_verify.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\a_verify.c
-
-$(OBJ_D)\x_algor.obj: $(SRC_D)\crypto\asn1\x_algor.c
-       $(CC) /Fo$(OBJ_D)\x_algor.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\x_algor.c
-
-$(OBJ_D)\x_val.obj: $(SRC_D)\crypto\asn1\x_val.c
-       $(CC) /Fo$(OBJ_D)\x_val.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_val.c
-
-$(OBJ_D)\x_pubkey.obj: $(SRC_D)\crypto\asn1\x_pubkey.c
-       $(CC) /Fo$(OBJ_D)\x_pubkey.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\x_pubkey.c
-
-$(OBJ_D)\x_sig.obj: $(SRC_D)\crypto\asn1\x_sig.c
-       $(CC) /Fo$(OBJ_D)\x_sig.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_sig.c
-
-$(OBJ_D)\x_req.obj: $(SRC_D)\crypto\asn1\x_req.c
-       $(CC) /Fo$(OBJ_D)\x_req.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_req.c
-
-$(OBJ_D)\x_attrib.obj: $(SRC_D)\crypto\asn1\x_attrib.c
-       $(CC) /Fo$(OBJ_D)\x_attrib.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\x_attrib.c
-
-$(OBJ_D)\x_name.obj: $(SRC_D)\crypto\asn1\x_name.c
-       $(CC) /Fo$(OBJ_D)\x_name.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_name.c
-
-$(OBJ_D)\x_cinf.obj: $(SRC_D)\crypto\asn1\x_cinf.c
-       $(CC) /Fo$(OBJ_D)\x_cinf.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_cinf.c
-
-$(OBJ_D)\x_x509.obj: $(SRC_D)\crypto\asn1\x_x509.c
-       $(CC) /Fo$(OBJ_D)\x_x509.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_x509.c
-
-$(OBJ_D)\x_crl.obj: $(SRC_D)\crypto\asn1\x_crl.c
-       $(CC) /Fo$(OBJ_D)\x_crl.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_crl.c
-
-$(OBJ_D)\x_info.obj: $(SRC_D)\crypto\asn1\x_info.c
-       $(CC) /Fo$(OBJ_D)\x_info.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_info.c
-
-$(OBJ_D)\x_spki.obj: $(SRC_D)\crypto\asn1\x_spki.c
-       $(CC) /Fo$(OBJ_D)\x_spki.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_spki.c
-
-$(OBJ_D)\nsseq.obj: $(SRC_D)\crypto\asn1\nsseq.c
-       $(CC) /Fo$(OBJ_D)\nsseq.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\nsseq.c
-
-$(OBJ_D)\d2i_r_pr.obj: $(SRC_D)\crypto\asn1\d2i_r_pr.c
-       $(CC) /Fo$(OBJ_D)\d2i_r_pr.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\d2i_r_pr.c
-
-$(OBJ_D)\i2d_r_pr.obj: $(SRC_D)\crypto\asn1\i2d_r_pr.c
-       $(CC) /Fo$(OBJ_D)\i2d_r_pr.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\i2d_r_pr.c
-
-$(OBJ_D)\d2i_r_pu.obj: $(SRC_D)\crypto\asn1\d2i_r_pu.c
-       $(CC) /Fo$(OBJ_D)\d2i_r_pu.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\d2i_r_pu.c
-
-$(OBJ_D)\i2d_r_pu.obj: $(SRC_D)\crypto\asn1\i2d_r_pu.c
-       $(CC) /Fo$(OBJ_D)\i2d_r_pu.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\i2d_r_pu.c
-
-$(OBJ_D)\d2i_s_pr.obj: $(SRC_D)\crypto\asn1\d2i_s_pr.c
-       $(CC) /Fo$(OBJ_D)\d2i_s_pr.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\d2i_s_pr.c
-
-$(OBJ_D)\i2d_s_pr.obj: $(SRC_D)\crypto\asn1\i2d_s_pr.c
-       $(CC) /Fo$(OBJ_D)\i2d_s_pr.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\i2d_s_pr.c
-
-$(OBJ_D)\d2i_s_pu.obj: $(SRC_D)\crypto\asn1\d2i_s_pu.c
-       $(CC) /Fo$(OBJ_D)\d2i_s_pu.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\d2i_s_pu.c
-
-$(OBJ_D)\i2d_s_pu.obj: $(SRC_D)\crypto\asn1\i2d_s_pu.c
-       $(CC) /Fo$(OBJ_D)\i2d_s_pu.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\i2d_s_pu.c
-
-$(OBJ_D)\d2i_pu.obj: $(SRC_D)\crypto\asn1\d2i_pu.c
-       $(CC) /Fo$(OBJ_D)\d2i_pu.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\d2i_pu.c
-
-$(OBJ_D)\d2i_pr.obj: $(SRC_D)\crypto\asn1\d2i_pr.c
-       $(CC) /Fo$(OBJ_D)\d2i_pr.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\d2i_pr.c
-
-$(OBJ_D)\i2d_pu.obj: $(SRC_D)\crypto\asn1\i2d_pu.c
-       $(CC) /Fo$(OBJ_D)\i2d_pu.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\i2d_pu.c
-
-$(OBJ_D)\i2d_pr.obj: $(SRC_D)\crypto\asn1\i2d_pr.c
-       $(CC) /Fo$(OBJ_D)\i2d_pr.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\i2d_pr.c
-
-$(OBJ_D)\t_req.obj: $(SRC_D)\crypto\asn1\t_req.c
-       $(CC) /Fo$(OBJ_D)\t_req.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\t_req.c
-
-$(OBJ_D)\t_x509.obj: $(SRC_D)\crypto\asn1\t_x509.c
-       $(CC) /Fo$(OBJ_D)\t_x509.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\t_x509.c
-
-$(OBJ_D)\t_crl.obj: $(SRC_D)\crypto\asn1\t_crl.c
-       $(CC) /Fo$(OBJ_D)\t_crl.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\t_crl.c
-
-$(OBJ_D)\t_pkey.obj: $(SRC_D)\crypto\asn1\t_pkey.c
-       $(CC) /Fo$(OBJ_D)\t_pkey.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\t_pkey.c
-
-$(OBJ_D)\p7_i_s.obj: $(SRC_D)\crypto\asn1\p7_i_s.c
-       $(CC) /Fo$(OBJ_D)\p7_i_s.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\p7_i_s.c
-
-$(OBJ_D)\p7_signi.obj: $(SRC_D)\crypto\asn1\p7_signi.c
-       $(CC) /Fo$(OBJ_D)\p7_signi.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\p7_signi.c
-
-$(OBJ_D)\p7_signd.obj: $(SRC_D)\crypto\asn1\p7_signd.c
-       $(CC) /Fo$(OBJ_D)\p7_signd.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\p7_signd.c
-
-$(OBJ_D)\p7_recip.obj: $(SRC_D)\crypto\asn1\p7_recip.c
-       $(CC) /Fo$(OBJ_D)\p7_recip.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\p7_recip.c
-
-$(OBJ_D)\p7_enc_c.obj: $(SRC_D)\crypto\asn1\p7_enc_c.c
-       $(CC) /Fo$(OBJ_D)\p7_enc_c.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\p7_enc_c.c
-
-$(OBJ_D)\p7_evp.obj: $(SRC_D)\crypto\asn1\p7_evp.c
-       $(CC) /Fo$(OBJ_D)\p7_evp.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\p7_evp.c
-
-$(OBJ_D)\p7_dgst.obj: $(SRC_D)\crypto\asn1\p7_dgst.c
-       $(CC) /Fo$(OBJ_D)\p7_dgst.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\p7_dgst.c
-
-$(OBJ_D)\p7_s_e.obj: $(SRC_D)\crypto\asn1\p7_s_e.c
-       $(CC) /Fo$(OBJ_D)\p7_s_e.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\p7_s_e.c
-
-$(OBJ_D)\p7_enc.obj: $(SRC_D)\crypto\asn1\p7_enc.c
-       $(CC) /Fo$(OBJ_D)\p7_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\p7_enc.c
-
-$(OBJ_D)\p7_lib.obj: $(SRC_D)\crypto\asn1\p7_lib.c
-       $(CC) /Fo$(OBJ_D)\p7_lib.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\p7_lib.c
-
-$(OBJ_D)\f_int.obj: $(SRC_D)\crypto\asn1\f_int.c
-       $(CC) /Fo$(OBJ_D)\f_int.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\f_int.c
-
-$(OBJ_D)\f_string.obj: $(SRC_D)\crypto\asn1\f_string.c
-       $(CC) /Fo$(OBJ_D)\f_string.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\f_string.c
-
-$(OBJ_D)\i2d_dhp.obj: $(SRC_D)\crypto\asn1\i2d_dhp.c
-       $(CC) /Fo$(OBJ_D)\i2d_dhp.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\i2d_dhp.c
-
-$(OBJ_D)\i2d_dsap.obj: $(SRC_D)\crypto\asn1\i2d_dsap.c
-       $(CC) /Fo$(OBJ_D)\i2d_dsap.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\i2d_dsap.c
-
-$(OBJ_D)\d2i_dhp.obj: $(SRC_D)\crypto\asn1\d2i_dhp.c
-       $(CC) /Fo$(OBJ_D)\d2i_dhp.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\d2i_dhp.c
-
-$(OBJ_D)\d2i_dsap.obj: $(SRC_D)\crypto\asn1\d2i_dsap.c
-       $(CC) /Fo$(OBJ_D)\d2i_dsap.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\d2i_dsap.c
-
-$(OBJ_D)\n_pkey.obj: $(SRC_D)\crypto\asn1\n_pkey.c
-       $(CC) /Fo$(OBJ_D)\n_pkey.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\n_pkey.c
-
-$(OBJ_D)\f_enum.obj: $(SRC_D)\crypto\asn1\f_enum.c
-       $(CC) /Fo$(OBJ_D)\f_enum.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\f_enum.c
-
-$(OBJ_D)\a_hdr.obj: $(SRC_D)\crypto\asn1\a_hdr.c
-       $(CC) /Fo$(OBJ_D)\a_hdr.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_hdr.c
-
-$(OBJ_D)\x_pkey.obj: $(SRC_D)\crypto\asn1\x_pkey.c
-       $(CC) /Fo$(OBJ_D)\x_pkey.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_pkey.c
-
-$(OBJ_D)\a_bool.obj: $(SRC_D)\crypto\asn1\a_bool.c
-       $(CC) /Fo$(OBJ_D)\a_bool.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_bool.c
-
-$(OBJ_D)\x_exten.obj: $(SRC_D)\crypto\asn1\x_exten.c
-       $(CC) /Fo$(OBJ_D)\x_exten.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\x_exten.c
-
-$(OBJ_D)\asn1_par.obj: $(SRC_D)\crypto\asn1\asn1_par.c
-       $(CC) /Fo$(OBJ_D)\asn1_par.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\asn1_par.c
-
-$(OBJ_D)\asn1_lib.obj: $(SRC_D)\crypto\asn1\asn1_lib.c
-       $(CC) /Fo$(OBJ_D)\asn1_lib.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\asn1_lib.c
-
-$(OBJ_D)\asn1_err.obj: $(SRC_D)\crypto\asn1\asn1_err.c
-       $(CC) /Fo$(OBJ_D)\asn1_err.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\asn1_err.c
-
-$(OBJ_D)\a_meth.obj: $(SRC_D)\crypto\asn1\a_meth.c
-       $(CC) /Fo$(OBJ_D)\a_meth.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_meth.c
-
-$(OBJ_D)\a_bytes.obj: $(SRC_D)\crypto\asn1\a_bytes.c
-       $(CC) /Fo$(OBJ_D)\a_bytes.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\a_bytes.c
-
-$(OBJ_D)\evp_asn1.obj: $(SRC_D)\crypto\asn1\evp_asn1.c
-       $(CC) /Fo$(OBJ_D)\evp_asn1.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\evp_asn1.c
-
-$(OBJ_D)\asn_pack.obj: $(SRC_D)\crypto\asn1\asn_pack.c
-       $(CC) /Fo$(OBJ_D)\asn_pack.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\asn_pack.c
-
-$(OBJ_D)\p5_pbe.obj: $(SRC_D)\crypto\asn1\p5_pbe.c
-       $(CC) /Fo$(OBJ_D)\p5_pbe.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\p5_pbe.c
-
-$(OBJ_D)\p5_pbev2.obj: $(SRC_D)\crypto\asn1\p5_pbev2.c
-       $(CC) /Fo$(OBJ_D)\p5_pbev2.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\p5_pbev2.c
-
-$(OBJ_D)\p8_pkey.obj: $(SRC_D)\crypto\asn1\p8_pkey.c
-       $(CC) /Fo$(OBJ_D)\p8_pkey.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\asn1\p8_pkey.c
-
-$(OBJ_D)\pem_sign.obj: $(SRC_D)\crypto\pem\pem_sign.c
-       $(CC) /Fo$(OBJ_D)\pem_sign.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\pem\pem_sign.c
-
-$(OBJ_D)\pem_seal.obj: $(SRC_D)\crypto\pem\pem_seal.c
-       $(CC) /Fo$(OBJ_D)\pem_seal.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\pem\pem_seal.c
-
-$(OBJ_D)\pem_info.obj: $(SRC_D)\crypto\pem\pem_info.c
-       $(CC) /Fo$(OBJ_D)\pem_info.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\pem\pem_info.c
-
-$(OBJ_D)\pem_lib.obj: $(SRC_D)\crypto\pem\pem_lib.c
-       $(CC) /Fo$(OBJ_D)\pem_lib.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\pem\pem_lib.c
-
-$(OBJ_D)\pem_all.obj: $(SRC_D)\crypto\pem\pem_all.c
-       $(CC) /Fo$(OBJ_D)\pem_all.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\pem\pem_all.c
-
-$(OBJ_D)\pem_err.obj: $(SRC_D)\crypto\pem\pem_err.c
-       $(CC) /Fo$(OBJ_D)\pem_err.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\pem\pem_err.c
-
-$(OBJ_D)\x509_def.obj: $(SRC_D)\crypto\x509\x509_def.c
-       $(CC) /Fo$(OBJ_D)\x509_def.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509\x509_def.c
-
-$(OBJ_D)\x509_d2.obj: $(SRC_D)\crypto\x509\x509_d2.c
-       $(CC) /Fo$(OBJ_D)\x509_d2.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509\x509_d2.c
-
-$(OBJ_D)\x509_r2x.obj: $(SRC_D)\crypto\x509\x509_r2x.c
-       $(CC) /Fo$(OBJ_D)\x509_r2x.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509\x509_r2x.c
-
-$(OBJ_D)\x509_cmp.obj: $(SRC_D)\crypto\x509\x509_cmp.c
-       $(CC) /Fo$(OBJ_D)\x509_cmp.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509\x509_cmp.c
-
-$(OBJ_D)\x509_obj.obj: $(SRC_D)\crypto\x509\x509_obj.c
-       $(CC) /Fo$(OBJ_D)\x509_obj.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509\x509_obj.c
-
-$(OBJ_D)\x509_req.obj: $(SRC_D)\crypto\x509\x509_req.c
-       $(CC) /Fo$(OBJ_D)\x509_req.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509\x509_req.c
-
-$(OBJ_D)\x509_vfy.obj: $(SRC_D)\crypto\x509\x509_vfy.c
-       $(CC) /Fo$(OBJ_D)\x509_vfy.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509\x509_vfy.c
-
-$(OBJ_D)\x509_set.obj: $(SRC_D)\crypto\x509\x509_set.c
-       $(CC) /Fo$(OBJ_D)\x509_set.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509\x509_set.c
-
-$(OBJ_D)\x509rset.obj: $(SRC_D)\crypto\x509\x509rset.c
-       $(CC) /Fo$(OBJ_D)\x509rset.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509\x509rset.c
-
-$(OBJ_D)\x509_err.obj: $(SRC_D)\crypto\x509\x509_err.c
-       $(CC) /Fo$(OBJ_D)\x509_err.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509\x509_err.c
-
-$(OBJ_D)\x509name.obj: $(SRC_D)\crypto\x509\x509name.c
-       $(CC) /Fo$(OBJ_D)\x509name.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509\x509name.c
-
-$(OBJ_D)\x509_v3.obj: $(SRC_D)\crypto\x509\x509_v3.c
-       $(CC) /Fo$(OBJ_D)\x509_v3.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509\x509_v3.c
-
-$(OBJ_D)\x509_ext.obj: $(SRC_D)\crypto\x509\x509_ext.c
-       $(CC) /Fo$(OBJ_D)\x509_ext.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509\x509_ext.c
-
-$(OBJ_D)\x509type.obj: $(SRC_D)\crypto\x509\x509type.c
-       $(CC) /Fo$(OBJ_D)\x509type.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509\x509type.c
-
-$(OBJ_D)\x509_lu.obj: $(SRC_D)\crypto\x509\x509_lu.c
-       $(CC) /Fo$(OBJ_D)\x509_lu.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509\x509_lu.c
-
-$(OBJ_D)\x_all.obj: $(SRC_D)\crypto\x509\x_all.c
-       $(CC) /Fo$(OBJ_D)\x_all.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\x509\x_all.c
-
-$(OBJ_D)\x509_txt.obj: $(SRC_D)\crypto\x509\x509_txt.c
-       $(CC) /Fo$(OBJ_D)\x509_txt.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509\x509_txt.c
-
-$(OBJ_D)\by_file.obj: $(SRC_D)\crypto\x509\by_file.c
-       $(CC) /Fo$(OBJ_D)\by_file.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509\by_file.c
-
-$(OBJ_D)\by_dir.obj: $(SRC_D)\crypto\x509\by_dir.c
-       $(CC) /Fo$(OBJ_D)\by_dir.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\x509\by_dir.c
-
-$(OBJ_D)\v3_bcons.obj: $(SRC_D)\crypto\x509v3\v3_bcons.c
-       $(CC) /Fo$(OBJ_D)\v3_bcons.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509v3\v3_bcons.c
-
-$(OBJ_D)\v3_bitst.obj: $(SRC_D)\crypto\x509v3\v3_bitst.c
-       $(CC) /Fo$(OBJ_D)\v3_bitst.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509v3\v3_bitst.c
-
-$(OBJ_D)\v3_conf.obj: $(SRC_D)\crypto\x509v3\v3_conf.c
-       $(CC) /Fo$(OBJ_D)\v3_conf.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509v3\v3_conf.c
-
-$(OBJ_D)\v3_extku.obj: $(SRC_D)\crypto\x509v3\v3_extku.c
-       $(CC) /Fo$(OBJ_D)\v3_extku.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509v3\v3_extku.c
-
-$(OBJ_D)\v3_ia5.obj: $(SRC_D)\crypto\x509v3\v3_ia5.c
-       $(CC) /Fo$(OBJ_D)\v3_ia5.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509v3\v3_ia5.c
-
-$(OBJ_D)\v3_lib.obj: $(SRC_D)\crypto\x509v3\v3_lib.c
-       $(CC) /Fo$(OBJ_D)\v3_lib.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509v3\v3_lib.c
-
-$(OBJ_D)\v3_prn.obj: $(SRC_D)\crypto\x509v3\v3_prn.c
-       $(CC) /Fo$(OBJ_D)\v3_prn.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509v3\v3_prn.c
-
-$(OBJ_D)\v3_utl.obj: $(SRC_D)\crypto\x509v3\v3_utl.c
-       $(CC) /Fo$(OBJ_D)\v3_utl.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509v3\v3_utl.c
-
-$(OBJ_D)\v3err.obj: $(SRC_D)\crypto\x509v3\v3err.c
-       $(CC) /Fo$(OBJ_D)\v3err.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\x509v3\v3err.c
-
-$(OBJ_D)\v3_genn.obj: $(SRC_D)\crypto\x509v3\v3_genn.c
-       $(CC) /Fo$(OBJ_D)\v3_genn.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509v3\v3_genn.c
-
-$(OBJ_D)\v3_alt.obj: $(SRC_D)\crypto\x509v3\v3_alt.c
-       $(CC) /Fo$(OBJ_D)\v3_alt.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509v3\v3_alt.c
-
-$(OBJ_D)\v3_skey.obj: $(SRC_D)\crypto\x509v3\v3_skey.c
-       $(CC) /Fo$(OBJ_D)\v3_skey.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509v3\v3_skey.c
-
-$(OBJ_D)\v3_akey.obj: $(SRC_D)\crypto\x509v3\v3_akey.c
-       $(CC) /Fo$(OBJ_D)\v3_akey.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509v3\v3_akey.c
-
-$(OBJ_D)\v3_pku.obj: $(SRC_D)\crypto\x509v3\v3_pku.c
-       $(CC) /Fo$(OBJ_D)\v3_pku.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509v3\v3_pku.c
-
-$(OBJ_D)\v3_int.obj: $(SRC_D)\crypto\x509v3\v3_int.c
-       $(CC) /Fo$(OBJ_D)\v3_int.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509v3\v3_int.c
-
-$(OBJ_D)\v3_enum.obj: $(SRC_D)\crypto\x509v3\v3_enum.c
-       $(CC) /Fo$(OBJ_D)\v3_enum.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509v3\v3_enum.c
-
-$(OBJ_D)\v3_sxnet.obj: $(SRC_D)\crypto\x509v3\v3_sxnet.c
-       $(CC) /Fo$(OBJ_D)\v3_sxnet.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509v3\v3_sxnet.c
-
-$(OBJ_D)\v3_cpols.obj: $(SRC_D)\crypto\x509v3\v3_cpols.c
-       $(CC) /Fo$(OBJ_D)\v3_cpols.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509v3\v3_cpols.c
-
-$(OBJ_D)\v3_crld.obj: $(SRC_D)\crypto\x509v3\v3_crld.c
-       $(CC) /Fo$(OBJ_D)\v3_crld.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\x509v3\v3_crld.c
-
-$(OBJ_D)\conf.obj: $(SRC_D)\crypto\conf\conf.c
-       $(CC) /Fo$(OBJ_D)\conf.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\conf\conf.c
-
-$(OBJ_D)\conf_err.obj: $(SRC_D)\crypto\conf\conf_err.c
-       $(CC) /Fo$(OBJ_D)\conf_err.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\conf\conf_err.c
-
-$(OBJ_D)\txt_db.obj: $(SRC_D)\crypto\txt_db\txt_db.c
-       $(CC) /Fo$(OBJ_D)\txt_db.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\txt_db\txt_db.c
-
-$(OBJ_D)\pk7_lib.obj: $(SRC_D)\crypto\pkcs7\pk7_lib.c
-       $(CC) /Fo$(OBJ_D)\pk7_lib.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\pkcs7\pk7_lib.c
-
-$(OBJ_D)\pkcs7err.obj: $(SRC_D)\crypto\pkcs7\pkcs7err.c
-       $(CC) /Fo$(OBJ_D)\pkcs7err.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\pkcs7\pkcs7err.c
-
-$(OBJ_D)\pk7_doit.obj: $(SRC_D)\crypto\pkcs7\pk7_doit.c
-       $(CC) /Fo$(OBJ_D)\pk7_doit.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\pkcs7\pk7_doit.c
-
-$(OBJ_D)\p12_add.obj: $(SRC_D)\crypto\pkcs12\p12_add.c
-       $(CC) /Fo$(OBJ_D)\p12_add.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\pkcs12\p12_add.c
-
-$(OBJ_D)\p12_attr.obj: $(SRC_D)\crypto\pkcs12\p12_attr.c
-       $(CC) /Fo$(OBJ_D)\p12_attr.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\pkcs12\p12_attr.c
-
-$(OBJ_D)\p12_bags.obj: $(SRC_D)\crypto\pkcs12\p12_bags.c
-       $(CC) /Fo$(OBJ_D)\p12_bags.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\pkcs12\p12_bags.c
-
-$(OBJ_D)\p12_crpt.obj: $(SRC_D)\crypto\pkcs12\p12_crpt.c
-       $(CC) /Fo$(OBJ_D)\p12_crpt.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\pkcs12\p12_crpt.c
-
-$(OBJ_D)\p12_crt.obj: $(SRC_D)\crypto\pkcs12\p12_crt.c
-       $(CC) /Fo$(OBJ_D)\p12_crt.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\pkcs12\p12_crt.c
-
-$(OBJ_D)\p12_decr.obj: $(SRC_D)\crypto\pkcs12\p12_decr.c
-       $(CC) /Fo$(OBJ_D)\p12_decr.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\pkcs12\p12_decr.c
-
-$(OBJ_D)\p12_init.obj: $(SRC_D)\crypto\pkcs12\p12_init.c
-       $(CC) /Fo$(OBJ_D)\p12_init.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\pkcs12\p12_init.c
-
-$(OBJ_D)\p12_key.obj: $(SRC_D)\crypto\pkcs12\p12_key.c
-       $(CC) /Fo$(OBJ_D)\p12_key.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\pkcs12\p12_key.c
-
-$(OBJ_D)\p12_kiss.obj: $(SRC_D)\crypto\pkcs12\p12_kiss.c
-       $(CC) /Fo$(OBJ_D)\p12_kiss.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\pkcs12\p12_kiss.c
-
-$(OBJ_D)\p12_lib.obj: $(SRC_D)\crypto\pkcs12\p12_lib.c
-       $(CC) /Fo$(OBJ_D)\p12_lib.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\pkcs12\p12_lib.c
-
-$(OBJ_D)\p12_mac.obj: $(SRC_D)\crypto\pkcs12\p12_mac.c
-       $(CC) /Fo$(OBJ_D)\p12_mac.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\pkcs12\p12_mac.c
-
-$(OBJ_D)\p12_mutl.obj: $(SRC_D)\crypto\pkcs12\p12_mutl.c
-       $(CC) /Fo$(OBJ_D)\p12_mutl.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\pkcs12\p12_mutl.c
-
-$(OBJ_D)\p12_sbag.obj: $(SRC_D)\crypto\pkcs12\p12_sbag.c
-       $(CC) /Fo$(OBJ_D)\p12_sbag.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\pkcs12\p12_sbag.c
-
-$(OBJ_D)\p12_utl.obj: $(SRC_D)\crypto\pkcs12\p12_utl.c
-       $(CC) /Fo$(OBJ_D)\p12_utl.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\pkcs12\p12_utl.c
-
-$(OBJ_D)\pk12err.obj: $(SRC_D)\crypto\pkcs12\pk12err.c
-       $(CC) /Fo$(OBJ_D)\pk12err.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\pkcs12\pk12err.c
-
-$(OBJ_D)\comp_lib.obj: $(SRC_D)\crypto\comp\comp_lib.c
-       $(CC) /Fo$(OBJ_D)\comp_lib.obj  $(SHLIB_CFLAGS) -c 
$(SRC_D)\crypto\comp\comp_lib.c
-
-$(OBJ_D)\c_rle.obj: $(SRC_D)\crypto\comp\c_rle.c
-       $(CC) /Fo$(OBJ_D)\c_rle.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\comp\c_rle.c
-
-$(OBJ_D)\c_zlib.obj: $(SRC_D)\crypto\comp\c_zlib.c
-       $(CC) /Fo$(OBJ_D)\c_zlib.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\comp\c_zlib.c
-
-$(OBJ_D)\s2_meth.obj: $(SRC_D)\ssl\s2_meth.c
-       $(CC) /Fo$(OBJ_D)\s2_meth.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s2_meth.c
-
-$(OBJ_D)\s2_srvr.obj: $(SRC_D)\ssl\s2_srvr.c
-       $(CC) /Fo$(OBJ_D)\s2_srvr.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s2_srvr.c
-
-$(OBJ_D)\s2_clnt.obj: $(SRC_D)\ssl\s2_clnt.c
-       $(CC) /Fo$(OBJ_D)\s2_clnt.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s2_clnt.c
-
-$(OBJ_D)\s2_lib.obj: $(SRC_D)\ssl\s2_lib.c
-       $(CC) /Fo$(OBJ_D)\s2_lib.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s2_lib.c
-
-$(OBJ_D)\s2_enc.obj: $(SRC_D)\ssl\s2_enc.c
-       $(CC) /Fo$(OBJ_D)\s2_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s2_enc.c
-
-$(OBJ_D)\s2_pkt.obj: $(SRC_D)\ssl\s2_pkt.c
-       $(CC) /Fo$(OBJ_D)\s2_pkt.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s2_pkt.c
-
-$(OBJ_D)\s3_meth.obj: $(SRC_D)\ssl\s3_meth.c
-       $(CC) /Fo$(OBJ_D)\s3_meth.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s3_meth.c
-
-$(OBJ_D)\s3_srvr.obj: $(SRC_D)\ssl\s3_srvr.c
-       $(CC) /Fo$(OBJ_D)\s3_srvr.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s3_srvr.c
-
-$(OBJ_D)\s3_clnt.obj: $(SRC_D)\ssl\s3_clnt.c
-       $(CC) /Fo$(OBJ_D)\s3_clnt.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s3_clnt.c
-
-$(OBJ_D)\s3_lib.obj: $(SRC_D)\ssl\s3_lib.c
-       $(CC) /Fo$(OBJ_D)\s3_lib.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s3_lib.c
-
-$(OBJ_D)\s3_enc.obj: $(SRC_D)\ssl\s3_enc.c
-       $(CC) /Fo$(OBJ_D)\s3_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s3_enc.c
-
-$(OBJ_D)\s3_pkt.obj: $(SRC_D)\ssl\s3_pkt.c
-       $(CC) /Fo$(OBJ_D)\s3_pkt.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s3_pkt.c
-
-$(OBJ_D)\s3_both.obj: $(SRC_D)\ssl\s3_both.c
-       $(CC) /Fo$(OBJ_D)\s3_both.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s3_both.c
-
-$(OBJ_D)\s23_meth.obj: $(SRC_D)\ssl\s23_meth.c
-       $(CC) /Fo$(OBJ_D)\s23_meth.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s23_meth.c
-
-$(OBJ_D)\s23_srvr.obj: $(SRC_D)\ssl\s23_srvr.c
-       $(CC) /Fo$(OBJ_D)\s23_srvr.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s23_srvr.c
-
-$(OBJ_D)\s23_clnt.obj: $(SRC_D)\ssl\s23_clnt.c
-       $(CC) /Fo$(OBJ_D)\s23_clnt.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s23_clnt.c
-
-$(OBJ_D)\s23_lib.obj: $(SRC_D)\ssl\s23_lib.c
-       $(CC) /Fo$(OBJ_D)\s23_lib.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s23_lib.c
-
-$(OBJ_D)\s23_pkt.obj: $(SRC_D)\ssl\s23_pkt.c
-       $(CC) /Fo$(OBJ_D)\s23_pkt.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s23_pkt.c
-
-$(OBJ_D)\t1_meth.obj: $(SRC_D)\ssl\t1_meth.c
-       $(CC) /Fo$(OBJ_D)\t1_meth.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\t1_meth.c
-
-$(OBJ_D)\t1_srvr.obj: $(SRC_D)\ssl\t1_srvr.c
-       $(CC) /Fo$(OBJ_D)\t1_srvr.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\t1_srvr.c
-
-$(OBJ_D)\t1_clnt.obj: $(SRC_D)\ssl\t1_clnt.c
-       $(CC) /Fo$(OBJ_D)\t1_clnt.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\t1_clnt.c
-
-$(OBJ_D)\t1_lib.obj: $(SRC_D)\ssl\t1_lib.c
-       $(CC) /Fo$(OBJ_D)\t1_lib.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\t1_lib.c
-
-$(OBJ_D)\t1_enc.obj: $(SRC_D)\ssl\t1_enc.c
-       $(CC) /Fo$(OBJ_D)\t1_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\t1_enc.c
-
-$(OBJ_D)\ssl_lib.obj: $(SRC_D)\ssl\ssl_lib.c
-       $(CC) /Fo$(OBJ_D)\ssl_lib.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\ssl_lib.c
-
-$(OBJ_D)\ssl_err2.obj: $(SRC_D)\ssl\ssl_err2.c
-       $(CC) /Fo$(OBJ_D)\ssl_err2.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\ssl_err2.c
-
-$(OBJ_D)\ssl_cert.obj: $(SRC_D)\ssl\ssl_cert.c
-       $(CC) /Fo$(OBJ_D)\ssl_cert.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\ssl_cert.c
-
-$(OBJ_D)\ssl_sess.obj: $(SRC_D)\ssl\ssl_sess.c
-       $(CC) /Fo$(OBJ_D)\ssl_sess.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\ssl_sess.c
-
-$(OBJ_D)\ssl_ciph.obj: $(SRC_D)\ssl\ssl_ciph.c
-       $(CC) /Fo$(OBJ_D)\ssl_ciph.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\ssl_ciph.c
-
-$(OBJ_D)\ssl_stat.obj: $(SRC_D)\ssl\ssl_stat.c
-       $(CC) /Fo$(OBJ_D)\ssl_stat.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\ssl_stat.c
-
-$(OBJ_D)\ssl_rsa.obj: $(SRC_D)\ssl\ssl_rsa.c
-       $(CC) /Fo$(OBJ_D)\ssl_rsa.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\ssl_rsa.c
-
-$(OBJ_D)\ssl_asn1.obj: $(SRC_D)\ssl\ssl_asn1.c
-       $(CC) /Fo$(OBJ_D)\ssl_asn1.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\ssl_asn1.c
-
-$(OBJ_D)\ssl_txt.obj: $(SRC_D)\ssl\ssl_txt.c
-       $(CC) /Fo$(OBJ_D)\ssl_txt.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\ssl_txt.c
-
-$(OBJ_D)\ssl_algs.obj: $(SRC_D)\ssl\ssl_algs.c
-       $(CC) /Fo$(OBJ_D)\ssl_algs.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\ssl_algs.c
-
-$(OBJ_D)\bio_ssl.obj: $(SRC_D)\ssl\bio_ssl.c
-       $(CC) /Fo$(OBJ_D)\bio_ssl.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\bio_ssl.c
-
-$(OBJ_D)\ssl_err.obj: $(SRC_D)\ssl\ssl_err.c
-       $(CC) /Fo$(OBJ_D)\ssl_err.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\ssl_err.c
-
-$(OBJ_D)\rsaref.obj: $(SRC_D)\rsaref\rsaref.c
-       $(CC) /Fo$(OBJ_D)\rsaref.obj  $(LIB_CFLAGS) -c $(SRC_D)\rsaref\rsaref.c
-
-$(OBJ_D)\rsar_err.obj: $(SRC_D)\rsaref\rsar_err.c
-       $(CC) /Fo$(OBJ_D)\rsar_err.obj  $(LIB_CFLAGS) -c $(SRC_D)\rsaref\rsar_err.c
-
-$(TEST_D)\md2test.exe: $(OBJ_D)\md2test.obj $(LIBS_DEP)
-  $(LINK) $(LFLAGS) @<<
-  $(APP_EX_OBJ) $(OBJ_D)\md2test.obj
-  $(TEST_D)\md2test.exe
-
-  $(L_LIBS) $(EX_LIBS)
-
-<<
-
-$(TEST_D)\md5test.exe: $(OBJ_D)\md5test.obj $(LIBS_DEP)
-  $(LINK) $(LFLAGS) @<<
-  $(APP_EX_OBJ) $(OBJ_D)\md5test.obj
-  $(TEST_D)\md5test.exe
-
-  $(L_LIBS) $(EX_LIBS)
-
-<<
-
-$(TEST_D)\shatest.exe: $(OBJ_D)\shatest.obj $(LIBS_DEP)
-  $(LINK) $(LFLAGS) @<<
-  $(APP_EX_OBJ) $(OBJ_D)\shatest.obj
-  $(TEST_D)\shatest.exe
-
-  $(L_LIBS) $(EX_LIBS)
-
-<<
-
-$(TEST_D)\sha1test.exe: $(OBJ_D)\sha1test.obj $(LIBS_DEP)
-  $(LINK) $(LFLAGS) @<<
-  $(APP_EX_OBJ) $(OBJ_D)\sha1test.obj
-  $(TEST_D)\sha1test.exe
-
-  $(L_LIBS) $(EX_LIBS)
-
-<<
-
-$(TEST_D)\mdc2test.exe: $(OBJ_D)\mdc2test.obj $(LIBS_DEP)
-  $(LINK) $(LFLAGS) @<<
-  $(APP_EX_OBJ) $(OBJ_D)\mdc2test.obj
-  $(TEST_D)\mdc2test.exe
-
-  $(L_LIBS) $(EX_LIBS)
-
-<<
-
-$(TEST_D)\hmactest.exe: $(OBJ_D)\hmactest.obj $(LIBS_DEP)
-  $(LINK) $(LFLAGS) @<<
-  $(APP_EX_OBJ) $(OBJ_D)\hmactest.obj
-  $(TEST_D)\hmactest.exe
-
-  $(L_LIBS) $(EX_LIBS)
-
-<<
-
-$(TEST_D)\rmdtest.exe: $(OBJ_D)\rmdtest.obj $(LIBS_DEP)
-  $(LINK) $(LFLAGS) @<<
-  $(APP_EX_OBJ) $(OBJ_D)\rmdtest.obj
-  $(TEST_D)\rmdtest.exe
-
-  $(L_LIBS) $(EX_LIBS)
-
-<<
-
-$(TEST_D)\destest.exe: $(OBJ_D)\destest.obj $(LIBS_DEP)
-  $(LINK) $(LFLAGS) @<<
-  $(APP_EX_OBJ) $(OBJ_D)\destest.obj
-  $(TEST_D)\destest.exe
-
-  $(L_LIBS) $(EX_LIBS)
-
-<<
-
-$(TEST_D)\rc2test.exe: $(OBJ_D)\rc2test.obj $(LIBS_DEP)
-  $(LINK) $(LFLAGS) @<<
-  $(APP_EX_OBJ) $(OBJ_D)\rc2test.obj
-  $(TEST_D)\rc2test.exe
-
-  $(L_LIBS) $(EX_LIBS)
-
-<<
-
-$(TEST_D)\rc4test.exe: $(OBJ_D)\rc4test.obj $(LIBS_DEP)
-  $(LINK) $(LFLAGS) @<<
-  $(APP_EX_OBJ) $(OBJ_D)\rc4test.obj
-  $(TEST_D)\rc4test.exe
-
-  $(L_LIBS) $(EX_LIBS)
-
-<<
-
-$(TEST_D)\rc5test.exe: $(OBJ_D)\rc5test.obj $(LIBS_DEP)
-  $(LINK) $(LFLAGS) @<<
-  $(APP_EX_OBJ) $(OBJ_D)\rc5test.obj
-  $(TEST_D)\rc5test.exe
-
-  $(L_LIBS) $(EX_LIBS)
-
-<<
-
-$(TEST_D)\ideatest.exe: $(OBJ_D)\ideatest.obj $(LIBS_DEP)
-  $(LINK) $(LFLAGS) @<<
-  $(APP_EX_OBJ) $(OBJ_D)\ideatest.obj
-  $(TEST_D)\ideatest.exe
-
-  $(L_LIBS) $(EX_LIBS)
-
-<<
-
-$(TEST_D)\bftest.exe: $(OBJ_D)\bftest.obj $(LIBS_DEP)
-  $(LINK) $(LFLAGS) @<<
-  $(APP_EX_OBJ) $(OBJ_D)\bftest.obj
-  $(TEST_D)\bftest.exe
-
-  $(L_LIBS) $(EX_LIBS)
-
-<<
-
-$(TEST_D)\casttest.exe: $(OBJ_D)\casttest.obj $(LIBS_DEP)
-  $(LINK) $(LFLAGS) @<<
-  $(APP_EX_OBJ) $(OBJ_D)\casttest.obj
-  $(TEST_D)\casttest.exe
-
-  $(L_LIBS) $(EX_LIBS)
-
-<<
-
-$(TEST_D)\bntest.exe: $(OBJ_D)\bntest.obj $(LIBS_DEP)
-  $(LINK) $(LFLAGS) @<<
-  $(APP_EX_OBJ) $(OBJ_D)\bntest.obj
-  $(TEST_D)\bntest.exe
-
-  $(L_LIBS) $(EX_LIBS)
-
-<<
-
-$(TEST_D)\exptest.exe: $(OBJ_D)\exptest.obj $(LIBS_DEP)
-  $(LINK) $(LFLAGS) @<<
-  $(APP_EX_OBJ) $(OBJ_D)\exptest.obj
-  $(TEST_D)\exptest.exe
-
-  $(L_LIBS) $(EX_LIBS)
-
-<<
-
-$(TEST_D)\rsa_oaep_test.exe: $(OBJ_D)\rsa_oaep_test.obj $(LIBS_DEP)
-  $(LINK) $(LFLAGS) @<<
-  $(APP_EX_OBJ) $(OBJ_D)\rsa_oaep_test.obj
-  $(TEST_D)\rsa_oaep_test.exe
-
-  $(L_LIBS) $(EX_LIBS)
-
-<<
-
-$(TEST_D)\dsatest.exe: $(OBJ_D)\dsatest.obj $(LIBS_DEP)
-  $(LINK) $(LFLAGS) @<<
-  $(APP_EX_OBJ) $(OBJ_D)\dsatest.obj
-  $(TEST_D)\dsatest.exe
-
-  $(L_LIBS) $(EX_LIBS)
-
-<<
-
-$(TEST_D)\dhtest.exe: $(OBJ_D)\dhtest.obj $(LIBS_DEP)
-  $(LINK) $(LFLAGS) @<<
-  $(APP_EX_OBJ) $(OBJ_D)\dhtest.obj
-  $(TEST_D)\dhtest.exe
-
-  $(L_LIBS) $(EX_LIBS)
-
-<<
-
-$(TEST_D)\randtest.exe: $(OBJ_D)\randtest.obj $(LIBS_DEP)
-  $(LINK) $(LFLAGS) @<<
-  $(APP_EX_OBJ) $(OBJ_D)\randtest.obj
-  $(TEST_D)\randtest.exe
-
-  $(L_LIBS) $(EX_LIBS)
-
-<<
-
-$(TEST_D)\ssltest.exe: $(OBJ_D)\ssltest.obj $(LIBS_DEP)
-  $(LINK) $(LFLAGS) @<<
-  $(APP_EX_OBJ) $(OBJ_D)\ssltest.obj
-  $(TEST_D)\ssltest.exe
-
-  $(L_LIBS) $(EX_LIBS)
-
-<<
-
-$(O_SSL): $(SSLOBJ)
-       $(LINK) $(MLFLAGS) @<<
-  $(SHLIB_EX_OBJ) +
-  $(OBJ_D)\bio_ssl.obj +
-  $(OBJ_D)\s23_clnt.obj +
-  $(OBJ_D)\s23_lib.obj +
-  $(OBJ_D)\s23_meth.obj +
-  $(OBJ_D)\s23_pkt.obj +
-  $(OBJ_D)\s23_srvr.obj +
-  $(OBJ_D)\s2_clnt.obj +
-  $(OBJ_D)\s2_enc.obj +
-  $(OBJ_D)\s2_lib.obj +
-  $(OBJ_D)\s2_meth.obj +
-  $(OBJ_D)\s2_pkt.obj +
-  $(OBJ_D)\s2_srvr.obj +
-  $(OBJ_D)\s3_both.obj +
-  $(OBJ_D)\s3_clnt.obj +
-  $(OBJ_D)\s3_enc.obj +
-  $(OBJ_D)\s3_lib.obj +
-  $(OBJ_D)\s3_meth.obj +
-  $(OBJ_D)\s3_pkt.obj +
-  $(OBJ_D)\s3_srvr.obj +
-  $(OBJ_D)\ssl_algs.obj +
-  $(OBJ_D)\ssl_asn1.obj +
-  $(OBJ_D)\ssl_cert.obj +
-  $(OBJ_D)\ssl_ciph.obj +
-  $(OBJ_D)\ssl_err.obj +
-  $(OBJ_D)\ssl_err2.obj +
-  $(OBJ_D)\ssl_lib.obj +
-  $(OBJ_D)\ssl_rsa.obj +
-  $(OBJ_D)\ssl_sess.obj +
-  $(OBJ_D)\ssl_stat.obj +
-  $(OBJ_D)\ssl_txt.obj +
-  $(OBJ_D)\t1_clnt.obj +
-  $(OBJ_D)\t1_enc.obj +
-  $(OBJ_D)\t1_lib.obj +
-  $(OBJ_D)\t1_meth.obj +
-  $(OBJ_D)\t1_srvr.obj +
-
-  $(O_SSL)
-
-  $(L_CRYPTO) winsock oldnames ldllcew libw
-ms\ssleay16.def;
-<<
-       implib /noignorecase /nowep $(L_SSL) $(O_SSL)
-
-$(O_RSAGLUE): $(RSAGLUEOBJ)
-       del $(O_RSAGLUE)
-       $(MKLIB) @<<
-$(O_RSAGLUE)
-y
-+$(OBJ_D)\rsar_err.obj &
-+$(OBJ_D)\rsaref.obj &
-
-
-<<
-
-$(O_CRYPTO): $(CRYPTOOBJ)
-       $(LINK) $(MLFLAGS) @<<
-  $(SHLIB_EX_OBJ) +
-  $(BN_ASM_OBJ) +
-  $(OBJ_D)\a_bitstr.obj +
-  $(OBJ_D)\a_bmp.obj +
-  $(OBJ_D)\a_bool.obj +
-  $(OBJ_D)\a_bytes.obj +
-  $(OBJ_D)\a_d2i_fp.obj +
-  $(OBJ_D)\a_digest.obj +
-  $(OBJ_D)\a_dup.obj +
-  $(OBJ_D)\a_enum.obj +
-  $(OBJ_D)\a_gentm.obj +
-  $(OBJ_D)\a_hdr.obj +
-  $(OBJ_D)\a_i2d_fp.obj +
-  $(OBJ_D)\a_int.obj +
-  $(OBJ_D)\a_meth.obj +
-  $(OBJ_D)\a_object.obj +
-  $(OBJ_D)\a_octet.obj +
-  $(OBJ_D)\a_print.obj +
-  $(OBJ_D)\a_set.obj +
-  $(OBJ_D)\a_sign.obj +
-  $(OBJ_D)\a_time.obj +
-  $(OBJ_D)\a_type.obj +
-  $(OBJ_D)\a_utctm.obj +
-  $(OBJ_D)\a_utf8.obj +
-  $(OBJ_D)\a_verify.obj +
-  $(OBJ_D)\a_vis.obj +
-  $(OBJ_D)\asn1_err.obj +
-  $(OBJ_D)\asn1_lib.obj +
-  $(OBJ_D)\asn1_par.obj +
-  $(OBJ_D)\asn_pack.obj +
-  $(OBJ_D)\b_dump.obj +
-  $(OBJ_D)\b_print.obj +
-  $(OBJ_D)\b_sock.obj +
-  $(OBJ_D)\bf_buff.obj +
-  $(OBJ_D)\bf_cfb64.obj +
-  $(OBJ_D)\bf_ecb.obj +
-  $(OBJ_D)\bf_enc.obj +
-  $(OBJ_D)\bf_nbio.obj +
-  $(OBJ_D)\bf_null.obj +
-  $(OBJ_D)\bf_ofb64.obj +
-  $(OBJ_D)\bf_skey.obj +
-  $(OBJ_D)\bio_b64.obj +
-  $(OBJ_D)\bio_cb.obj +
-  $(OBJ_D)\bio_enc.obj +
-  $(OBJ_D)\bio_err.obj +
-  $(OBJ_D)\bio_lib.obj +
-  $(OBJ_D)\bio_md.obj +
-  $(OBJ_D)\bio_ok.obj +
-  $(OBJ_D)\bn_add.obj +
-  $(OBJ_D)\bn_blind.obj +
-  $(OBJ_D)\bn_div.obj +
-  $(OBJ_D)\bn_err.obj +
-  $(OBJ_D)\bn_exp.obj +
-  $(OBJ_D)\bn_exp2.obj +
-  $(OBJ_D)\bn_gcd.obj +
-  $(OBJ_D)\bn_lib.obj +
-  $(OBJ_D)\bn_mont.obj +
-  $(OBJ_D)\bn_mpi.obj +
-  $(OBJ_D)\bn_mul.obj +
-  $(OBJ_D)\bn_prime.obj +
-  $(OBJ_D)\bn_print.obj +
-  $(OBJ_D)\bn_rand.obj +
-  $(OBJ_D)\bn_recp.obj +
-  $(OBJ_D)\bn_shift.obj +
-  $(OBJ_D)\bn_sqr.obj +
-  $(OBJ_D)\bn_word.obj +
-  $(OBJ_D)\bss_acpt.obj +
-  $(OBJ_D)\bss_bio.obj +
-  $(OBJ_D)\bss_conn.obj +
-  $(OBJ_D)\bss_fd.obj +
-  $(OBJ_D)\bss_file.obj +
-  $(OBJ_D)\bss_log.obj +
-  $(OBJ_D)\bss_mem.obj +
-  $(OBJ_D)\bss_null.obj +
-  $(OBJ_D)\bss_sock.obj +
-  $(OBJ_D)\buf_err.obj +
-  $(OBJ_D)\buffer.obj +
-  $(OBJ_D)\by_dir.obj +
-  $(OBJ_D)\by_file.obj +
-  $(OBJ_D)\c_all.obj +
-  $(OBJ_D)\c_cfb64.obj +
-  $(OBJ_D)\c_ecb.obj +
-  $(OBJ_D)\c_enc.obj +
-  $(OBJ_D)\c_ofb64.obj +
-  $(OBJ_D)\c_rle.obj +
-  $(OBJ_D)\c_skey.obj +
-  $(OBJ_D)\c_zlib.obj +
-  $(OBJ_D)\cbc_cksm.obj +
-  $(OBJ_D)\cbc_enc.obj +
-  $(OBJ_D)\cfb64ede.obj +
-  $(OBJ_D)\cfb64enc.obj +
-  $(OBJ_D)\cfb_enc.obj +
-  $(OBJ_D)\comp_lib.obj +
-  $(OBJ_D)\conf.obj +
-  $(OBJ_D)\conf_err.obj +
-  $(OBJ_D)\cpt_err.obj +
-  $(OBJ_D)\cryptlib.obj +
-  $(OBJ_D)\cversion.obj +
-  $(OBJ_D)\d2i_dhp.obj +
-  $(OBJ_D)\d2i_dsap.obj +
-  $(OBJ_D)\d2i_pr.obj +
-  $(OBJ_D)\d2i_pu.obj +
-  $(OBJ_D)\d2i_r_pr.obj +
-  $(OBJ_D)\d2i_r_pu.obj +
-  $(OBJ_D)\d2i_s_pr.obj +
-  $(OBJ_D)\d2i_s_pu.obj +
-  $(OBJ_D)\des_enc.obj +
-  $(OBJ_D)\dh_check.obj +
-  $(OBJ_D)\dh_err.obj +
-  $(OBJ_D)\dh_gen.obj +
-  $(OBJ_D)\dh_key.obj +
-  $(OBJ_D)\dh_lib.obj +
-  $(OBJ_D)\digest.obj +
-  $(OBJ_D)\dsa_asn1.obj +
-  $(OBJ_D)\dsa_err.obj +
-  $(OBJ_D)\dsa_gen.obj +
-  $(OBJ_D)\dsa_key.obj +
-  $(OBJ_D)\dsa_lib.obj +
-  $(OBJ_D)\dsa_sign.obj +
-  $(OBJ_D)\dsa_vrf.obj +
-  $(OBJ_D)\e_cbc_3d.obj +
-  $(OBJ_D)\e_cbc_bf.obj +
-  $(OBJ_D)\e_cbc_c.obj +
-  $(OBJ_D)\e_cbc_d.obj +
-  $(OBJ_D)\e_cbc_i.obj +
-  $(OBJ_D)\e_cbc_r2.obj +
-  $(OBJ_D)\e_cbc_r5.obj +
-  $(OBJ_D)\e_cfb_3d.obj +
-  $(OBJ_D)\e_cfb_bf.obj +
-  $(OBJ_D)\e_cfb_c.obj +
-  $(OBJ_D)\e_cfb_d.obj +
-  $(OBJ_D)\e_cfb_i.obj +
-  $(OBJ_D)\e_cfb_r2.obj +
-  $(OBJ_D)\e_cfb_r5.obj +
-  $(OBJ_D)\e_ecb_3d.obj +
-  $(OBJ_D)\e_ecb_bf.obj +
-  $(OBJ_D)\e_ecb_c.obj +
-  $(OBJ_D)\e_ecb_d.obj +
-  $(OBJ_D)\e_ecb_i.obj +
-  $(OBJ_D)\e_ecb_r2.obj +
-  $(OBJ_D)\e_ecb_r5.obj +
-  $(OBJ_D)\e_null.obj +
-  $(OBJ_D)\e_ofb_3d.obj +
-  $(OBJ_D)\e_ofb_bf.obj +
-  $(OBJ_D)\e_ofb_c.obj +
-  $(OBJ_D)\e_ofb_d.obj +
-  $(OBJ_D)\e_ofb_i.obj +
-  $(OBJ_D)\e_ofb_r2.obj +
-  $(OBJ_D)\e_ofb_r5.obj +
-  $(OBJ_D)\e_rc4.obj +
-  $(OBJ_D)\e_xcbc_d.obj +
-  $(OBJ_D)\ecb3_enc.obj +
-  $(OBJ_D)\ecb_enc.obj +
-  $(OBJ_D)\ede_cbcm_enc.obj +
-  $(OBJ_D)\enc_read.obj +
-  $(OBJ_D)\enc_writ.obj +
-  $(OBJ_D)\encode.obj +
-  $(OBJ_D)\err.obj +
-  $(OBJ_D)\err_all.obj +
-  $(OBJ_D)\err_prn.obj +
-  $(OBJ_D)\evp_asn1.obj +
-  $(OBJ_D)\evp_enc.obj +
-  $(OBJ_D)\evp_err.obj +
-  $(OBJ_D)\evp_key.obj +
-  $(OBJ_D)\evp_lib.obj +
-  $(OBJ_D)\evp_pbe.obj +
-  $(OBJ_D)\evp_pkey.obj +
-  $(OBJ_D)\ex_data.obj +
-  $(OBJ_D)\f_enum.obj +
-  $(OBJ_D)\f_int.obj +
-  $(OBJ_D)\f_string.obj +
-  $(OBJ_D)\fcrypt.obj +
-  $(OBJ_D)\fcrypt_b.obj +
-  $(OBJ_D)\hmac.obj +
-  $(OBJ_D)\i2d_dhp.obj +
-  $(OBJ_D)\i2d_dsap.obj +
-  $(OBJ_D)\i2d_pr.obj +
-  $(OBJ_D)\i2d_pu.obj +
-  $(OBJ_D)\i2d_r_pr.obj +
-  $(OBJ_D)\i2d_r_pu.obj +
-  $(OBJ_D)\i2d_s_pr.obj +
-  $(OBJ_D)\i2d_s_pu.obj +
-  $(OBJ_D)\i_cbc.obj +
-  $(OBJ_D)\i_cfb64.obj +
-  $(OBJ_D)\i_ecb.obj +
-  $(OBJ_D)\i_ofb64.obj +
-  $(OBJ_D)\i_skey.obj +
-  $(OBJ_D)\lh_stats.obj +
-  $(OBJ_D)\lhash.obj +
-  $(OBJ_D)\m_dss.obj +
-  $(OBJ_D)\m_dss1.obj +
-  $(OBJ_D)\m_md2.obj +
-  $(OBJ_D)\m_md5.obj +
-  $(OBJ_D)\m_mdc2.obj +
-  $(OBJ_D)\m_null.obj +
-  $(OBJ_D)\m_ripemd.obj +
-  $(OBJ_D)\m_sha.obj +
-  $(OBJ_D)\m_sha1.obj +
-  $(OBJ_D)\md2_dgst.obj +
-  $(OBJ_D)\md2_one.obj +
-  $(OBJ_D)\md5_dgst.obj +
-  $(OBJ_D)\md5_one.obj +
-  $(OBJ_D)\md_rand.obj +
-  $(OBJ_D)\mdc2_one.obj +
-  $(OBJ_D)\mdc2dgst.obj +
-  $(OBJ_D)\mem.obj +
-  $(OBJ_D)\n_pkey.obj +
-  $(OBJ_D)\names.obj +
-  $(OBJ_D)\nsseq.obj +
-  $(OBJ_D)\o_names.obj +
-  $(OBJ_D)\obj_dat.obj +
-  $(OBJ_D)\obj_err.obj +
-  $(OBJ_D)\obj_lib.obj +
-  $(OBJ_D)\ofb64ede.obj +
-  $(OBJ_D)\ofb64enc.obj +
-  $(OBJ_D)\ofb_enc.obj +
-  $(OBJ_D)\p12_add.obj +
-  $(OBJ_D)\p12_attr.obj +
-  $(OBJ_D)\p12_bags.obj +
-  $(OBJ_D)\p12_crpt.obj +
-  $(OBJ_D)\p12_crt.obj +
-  $(OBJ_D)\p12_decr.obj +
-  $(OBJ_D)\p12_init.obj +
-  $(OBJ_D)\p12_key.obj +
-  $(OBJ_D)\p12_kiss.obj +
-  $(OBJ_D)\p12_lib.obj +
-  $(OBJ_D)\p12_mac.obj +
-  $(OBJ_D)\p12_mutl.obj +
-  $(OBJ_D)\p12_sbag.obj +
-  $(OBJ_D)\p12_utl.obj +
-  $(OBJ_D)\p5_crpt.obj +
-  $(OBJ_D)\p5_crpt2.obj +
-  $(OBJ_D)\p5_pbe.obj +
-  $(OBJ_D)\p5_pbev2.obj +
-  $(OBJ_D)\p7_dgst.obj +
-  $(OBJ_D)\p7_enc.obj +
-  $(OBJ_D)\p7_enc_c.obj +
-  $(OBJ_D)\p7_evp.obj +
-  $(OBJ_D)\p7_i_s.obj +
-  $(OBJ_D)\p7_lib.obj +
-  $(OBJ_D)\p7_recip.obj +
-  $(OBJ_D)\p7_s_e.obj +
-  $(OBJ_D)\p7_signd.obj +
-  $(OBJ_D)\p7_signi.obj +
-  $(OBJ_D)\p8_pkey.obj +
-  $(OBJ_D)\p_dec.obj +
-  $(OBJ_D)\p_enc.obj +
-  $(OBJ_D)\p_lib.obj +
-  $(OBJ_D)\p_open.obj +
-  $(OBJ_D)\p_seal.obj +
-  $(OBJ_D)\p_sign.obj +
-  $(OBJ_D)\p_verify.obj +
-  $(OBJ_D)\pcbc_enc.obj +
-  $(OBJ_D)\pem_all.obj +
-  $(OBJ_D)\pem_err.obj +
-  $(OBJ_D)\pem_info.obj +
-  $(OBJ_D)\pem_lib.obj +
-  $(OBJ_D)\pem_seal.obj +
-  $(OBJ_D)\pem_sign.obj +
-  $(OBJ_D)\pk12err.obj +
-  $(OBJ_D)\pk7_doit.obj +
-  $(OBJ_D)\pk7_lib.obj +
-  $(OBJ_D)\pkcs7err.obj +
-  $(OBJ_D)\qud_cksm.obj +
-  $(OBJ_D)\rand_key.obj +
-  $(OBJ_D)\rand_lib.obj +
-  $(OBJ_D)\randfile.obj +
-  $(OBJ_D)\rc2_cbc.obj +
-  $(OBJ_D)\rc2_ecb.obj +
-  $(OBJ_D)\rc2_skey.obj +
-  $(OBJ_D)\rc2cfb64.obj +
-  $(OBJ_D)\rc2ofb64.obj +
-  $(OBJ_D)\rc4_enc.obj +
-  $(OBJ_D)\rc4_skey.obj +
-  $(OBJ_D)\rc5_ecb.obj +
-  $(OBJ_D)\rc5_enc.obj +
-  $(OBJ_D)\rc5_skey.obj +
-  $(OBJ_D)\rc5cfb64.obj +
-  $(OBJ_D)\rc5ofb64.obj +
-  $(OBJ_D)\read2pwd.obj +
-  $(OBJ_D)\read_pwd.obj +
-  $(OBJ_D)\rmd_dgst.obj +
-  $(OBJ_D)\rmd_one.obj +
-  $(OBJ_D)\rpc_enc.obj +
-  $(OBJ_D)\rsa_chk.obj +
-  $(OBJ_D)\rsa_eay.obj +
-  $(OBJ_D)\rsa_err.obj +
-  $(OBJ_D)\rsa_gen.obj +
-  $(OBJ_D)\rsa_lib.obj +
-  $(OBJ_D)\rsa_none.obj +
-  $(OBJ_D)\rsa_oaep.obj +
-  $(OBJ_D)\rsa_pk1.obj +
-  $(OBJ_D)\rsa_saos.obj +
-  $(OBJ_D)\rsa_sign.obj +
-  $(OBJ_D)\rsa_ssl.obj +
-  $(OBJ_D)\set_key.obj +
-  $(OBJ_D)\sha1_one.obj +
-  $(OBJ_D)\sha1dgst.obj +
-  $(OBJ_D)\sha_dgst.obj +
-  $(OBJ_D)\sha_one.obj +
-  $(OBJ_D)\stack.obj +
-  $(OBJ_D)\str2key.obj +
-  $(OBJ_D)\supp.obj +
-  $(OBJ_D)\t_crl.obj +
-  $(OBJ_D)\t_pkey.obj +
-  $(OBJ_D)\t_req.obj +
-  $(OBJ_D)\t_x509.obj +
-  $(OBJ_D)\tmdiff.obj +
-  $(OBJ_D)\txt_db.obj +
-  $(OBJ_D)\v3_akey.obj +
-  $(OBJ_D)\v3_alt.obj +
-  $(OBJ_D)\v3_bcons.obj +
-  $(OBJ_D)\v3_bitst.obj +
-  $(OBJ_D)\v3_conf.obj +
-  $(OBJ_D)\v3_cpols.obj +
-  $(OBJ_D)\v3_crld.obj +
-  $(OBJ_D)\v3_enum.obj +
-  $(OBJ_D)\v3_extku.obj +
-  $(OBJ_D)\v3_genn.obj +
-  $(OBJ_D)\v3_ia5.obj +
-  $(OBJ_D)\v3_int.obj +
-  $(OBJ_D)\v3_lib.obj +
-  $(OBJ_D)\v3_pku.obj +
-  $(OBJ_D)\v3_prn.obj +
-  $(OBJ_D)\v3_skey.obj +
-  $(OBJ_D)\v3_sxnet.obj +
-  $(OBJ_D)\v3_utl.obj +
-  $(OBJ_D)\v3err.obj +
-  $(OBJ_D)\x509_cmp.obj +
-  $(OBJ_D)\x509_d2.obj +
-  $(OBJ_D)\x509_def.obj +
-  $(OBJ_D)\x509_err.obj +
-  $(OBJ_D)\x509_ext.obj +
-  $(OBJ_D)\x509_lu.obj +
-  $(OBJ_D)\x509_obj.obj +
-  $(OBJ_D)\x509_r2x.obj +
-  $(OBJ_D)\x509_req.obj +
-  $(OBJ_D)\x509_set.obj +
-  $(OBJ_D)\x509_txt.obj +
-  $(OBJ_D)\x509_v3.obj +
-  $(OBJ_D)\x509_vfy.obj +
-  $(OBJ_D)\x509name.obj +
-  $(OBJ_D)\x509rset.obj +
-  $(OBJ_D)\x509type.obj +
-  $(OBJ_D)\x_algor.obj +
-  $(OBJ_D)\x_all.obj +
-  $(OBJ_D)\x_attrib.obj +
-  $(OBJ_D)\x_cinf.obj +
-  $(OBJ_D)\x_crl.obj +
-  $(OBJ_D)\x_exten.obj +
-  $(OBJ_D)\x_info.obj +
-  $(OBJ_D)\x_name.obj +
-  $(OBJ_D)\x_pkey.obj +
-  $(OBJ_D)\x_pubkey.obj +
-  $(OBJ_D)\x_req.obj +
-  $(OBJ_D)\x_sig.obj +
-  $(OBJ_D)\x_spki.obj +
-  $(OBJ_D)\x_val.obj +
-  $(OBJ_D)\x_x509.obj +
-  $(OBJ_D)\xcbc_enc.obj +
-
-  $(O_CRYPTO)
-
-   winsock oldnames ldllcew libw
-ms\libeay16.def;
-<<
-       implib /noignorecase /nowep $(L_CRYPTO) $(O_CRYPTO)
-
-$(BIN_D)\$(E_EXE).exe: $(E_OBJ) $(LIBS_DEP)
-  $(LINK) $(LFLAGS) @<<
-  $(APP_EX_OBJ) +
-  $(OBJ_D)\apps.obj +
-  $(OBJ_D)\asn1pars.obj +
-  $(OBJ_D)\ca.obj +
-  $(OBJ_D)\ciphers.obj +
-  $(OBJ_D)\crl.obj +
-  $(OBJ_D)\crl2p7.obj +
-  $(OBJ_D)\dgst.obj +
-  $(OBJ_D)\dh.obj +
-  $(OBJ_D)\dsa.obj +
-  $(OBJ_D)\dsaparam.obj +
-  $(OBJ_D)\enc.obj +
-  $(OBJ_D)\errstr.obj +
-  $(OBJ_D)\gendh.obj +
-  $(OBJ_D)\gendsa.obj +
-  $(OBJ_D)\genrsa.obj +
-  $(OBJ_D)\nseq.obj +
-  $(OBJ_D)\openssl.obj +
-  $(OBJ_D)\pkcs12.obj +
-  $(OBJ_D)\pkcs7.obj +
-  $(OBJ_D)\pkcs8.obj +
-  $(OBJ_D)\req.obj +
-  $(OBJ_D)\rsa.obj +
-  $(OBJ_D)\s_cb.obj +
-  $(OBJ_D)\s_client.obj +
-  $(OBJ_D)\s_server.obj +
-  $(OBJ_D)\s_socket.obj +
-  $(OBJ_D)\s_time.obj +
-  $(OBJ_D)\sess_id.obj +
-  $(OBJ_D)\speed.obj +
-  $(OBJ_D)\verify.obj +
-  $(OBJ_D)\version.obj +
-  $(OBJ_D)\x509.obj +
-
-  $(BIN_D)\$(E_EXE).exe
-
-  $(L_LIBS) $(EX_LIBS)
-
-<<
-
+# This makefile has been automatically generated from the OpenSSL distribution.
+# This single makefile will build the complete OpenSSL distribution and
+# by default leave the 'intertesting' output files in .\out and the stuff
+# that needs deleting in .\tmp.
+# The file was generated by running 'make makefile.one', which
+# does a 'make files', which writes all the environment variables from all
+# the makefiles to the file call MINFO.  This file is used by
+# util\mk1mf.pl to generate makefile.one.
+# The 'makefile per directory' system suites me when developing this
+# library and also so I can 'distribute' indervidual library sections.
+# The one monster makefile better suits building in non-unix
+# environments.
+
+INSTALLTOP=\usr\local\ssl
+
+# Set your compiler options
+PLATFORM=VC-W31-32
+CC=cl
+CFLAG=/ALw /Gx- /Gt256 /Gf /G2 /f- /Ocgnotb2 /W3 /WX -DL_ENDIAN /nologo -DWINDOWS 
+-DWIN16
+APP_CFLAG=/Gw /FPi87
+LIB_CFLAG=/Gw -D_WINDLL -D_DLL
+SHLIB_CFLAG=
+APP_EX_OBJ=setargv.obj
+SHLIB_EX_OBJ=
+# add extra libraries to this define, for solaris -lsocket -lnsl would
+# be added
+EX_LIBS=oldnames llibcewq libw winsock
+
+# The OpenSSL directory
+SRC_D=.
+
+LINK=link
+LFLAGS= /FARCALL /NOLOGO /NOD /SEG:1024 /ONERROR:NOEXE /NOE /PACKC:60000 /PACKD:60000 
+/STACK:20000 /ALIGN:256
+
+BN_ASM_OBJ=crypto\bn\asm\x86w32.obj
+BN_ASM_SRC=crypto\bn\asm\x86w32.asm
+DES_ENC_OBJ=
+DES_ENC_SRC=
+BF_ENC_OBJ=
+BF_ENC_SRC=
+CAST_ENC_OBJ=
+CAST_ENC_SRC=
+RC4_ENC_OBJ=
+RC4_ENC_SRC=
+RC5_ENC_OBJ=
+RC5_ENC_SRC=
+MD5_ASM_OBJ=
+MD5_ASM_SRC=
+SHA1_ASM_OBJ=
+SHA1_ASM_SRC=
+RMD160_ASM_OBJ=
+RMD160_ASM_SRC=
+
+# The output directory for everything intersting
+OUT_D=out16dll
+# The output directory for all the temporary muck
+TMP_D=tmp16dll
+# The output directory for the header files
+INC_D=inc16
+INCO_D=inc16\openssl
+
+CP=copy
+RM=del
+RANLIB=
+MKDIR=mkdir
+MKLIB=lib /PAGESIZE:1024
+MLFLAGS= /FARCALL /NOLOGO /NOD /SEG:1024 /ONERROR:NOEXE /NOE /PACKC:60000 /PACKD:60000
+ASM=ml /Cp /c /Cx
+
+######################################################
+# You should not need to touch anything below this point
+######################################################
+
+E_EXE=openssl
+SSL=ssleay16
+CRYPTO=libeay16
+RSAGLUE=RSAglue
+
+# BIN_D  - Binary output directory
+# TEST_D - Binary test file output directory
+# LIB_D  - library output directory
+# Note: if you change these point to different directories then uncomment out
+# the lines around the 'NB' comment below.
+# 
+BIN_D=$(OUT_D)
+TEST_D=$(OUT_D)
+LIB_D=$(OUT_D)
+
+# INCL_D - local library directory
+# OBJ_D  - temp object file directory
+OBJ_D=$(TMP_D)
+INCL_D=$(TMP_D)
+
+O_SSL=     $(LIB_D)\$(SSL).dll
+O_CRYPTO=  $(LIB_D)\$(CRYPTO).dll
+O_RSAGLUE= $(LIB_D)\$(RSAGLUE).lib
+SO_SSL=    $(SSL)
+SO_CRYPTO= $(CRYPTO)
+L_SSL=     $(LIB_D)\$(SSL).lib
+L_CRYPTO=  $(LIB_D)\$(CRYPTO).lib
+
+L_LIBS= $(L_SSL) $(L_CRYPTO)
+#L_LIBS= $(O_SSL) $(O_RSAGLUE) -lrsaref $(O_CRYPTO)
+
+######################################################
+# Don't touch anything below this point
+######################################################
+
+INC=-I$(INC_D) -I$(INCL_D)
+APP_CFLAGS=$(INC) $(CFLAG) $(APP_CFLAG)
+LIB_CFLAGS=$(INC) $(CFLAG) $(LIB_CFLAG)
+SHLIB_CFLAGS=$(INC) $(CFLAG) $(LIB_CFLAG) $(SHLIB_CFLAG)
+LIBS_DEP=$(O_CRYPTO) $(O_RSAGLUE) $(O_SSL)
+
+#############################################
+HEADER=$(INCL_D)\cryptlib.h \
+       $(INCL_D)\buildinf.h $(INCL_D)\md5_locl.h $(INCL_D)\sha_locl.h \
+       $(INCL_D)\rmd_locl.h $(INCL_D)\rmdconst.h $(INCL_D)\des_locl.h \
+       $(INCL_D)\rpc_des.h $(INCL_D)\podd.h $(INCL_D)\sk.h \
+       $(INCL_D)\spr.h $(INCL_D)\des_ver.h $(INCL_D)\rc2_locl.h \
+       $(INCL_D)\rc4_locl.h $(INCL_D)\rc5_locl.h $(INCL_D)\idea_lcl.h \
+       $(INCL_D)\bf_pi.h $(INCL_D)\bf_locl.h $(INCL_D)\cast_s.h \
+       $(INCL_D)\cast_lcl.h $(INCL_D)\bn_lcl.h $(INCL_D)\bn_prime.h \
+       $(INCL_D)\bss_file.c $(INCL_D)\obj_dat.h $(INCL_D)\conf_lcl.h \
+       $(INCL_D)\ssl_locl.h $(INCL_D)\apps.h $(INCL_D)\progs.h \
+       $(INCL_D)\s_apps.h $(INCL_D)\testdsa.h $(INCL_D)\testrsa.h
+
+EXHEADER=$(INCO_D)\e_os.h \
+       $(INCO_D)\e_os2.h $(INCO_D)\crypto.h $(INCO_D)\tmdiff.h \
+       $(INCO_D)\opensslv.h $(INCO_D)\opensslconf.h $(INCO_D)\ebcdic.h \
+       $(INCO_D)\md2.h $(INCO_D)\md5.h $(INCO_D)\sha.h \
+       $(INCO_D)\mdc2.h $(INCO_D)\hmac.h $(INCO_D)\ripemd.h \
+       $(INCO_D)\des.h $(INCO_D)\rc2.h $(INCO_D)\rc4.h \
+       $(INCO_D)\rc5.h $(INCO_D)\idea.h $(INCO_D)\blowfish.h \
+       $(INCO_D)\cast.h $(INCO_D)\bn.h $(INCO_D)\rsa.h \
+       $(INCO_D)\dsa.h $(INCO_D)\dh.h $(INCO_D)\buffer.h \
+       $(INCO_D)\bio.h $(INCO_D)\stack.h $(INCO_D)\safestack.h \
+       $(INCO_D)\lhash.h $(INCO_D)\rand.h $(INCO_D)\err.h \
+       $(INCO_D)\objects.h $(INCO_D)\evp.h $(INCO_D)\asn1.h \
+       $(INCO_D)\asn1_mac.h $(INCO_D)\pem.h $(INCO_D)\pem2.h \
+       $(INCO_D)\x509.h $(INCO_D)\x509_vfy.h $(INCO_D)\x509v3.h \
+       $(INCO_D)\conf.h $(INCO_D)\txt_db.h $(INCO_D)\pkcs7.h \
+       $(INCO_D)\pkcs12.h $(INCO_D)\comp.h $(INCO_D)\ssl.h \
+       $(INCO_D)\ssl2.h $(INCO_D)\ssl3.h $(INCO_D)\ssl23.h \
+       $(INCO_D)\tls1.h $(INCO_D)\rsaref.h
+
+T_OBJ=$(OBJ_D)\md2test.obj \
+       $(OBJ_D)\md5test.obj $(OBJ_D)\shatest.obj $(OBJ_D)\sha1test.obj \
+       $(OBJ_D)\mdc2test.obj $(OBJ_D)\hmactest.obj $(OBJ_D)\rmdtest.obj \
+       $(OBJ_D)\destest.obj $(OBJ_D)\rc2test.obj $(OBJ_D)\rc4test.obj \
+       $(OBJ_D)\rc5test.obj $(OBJ_D)\ideatest.obj $(OBJ_D)\bftest.obj \
+       $(OBJ_D)\casttest.obj $(OBJ_D)\bntest.obj $(OBJ_D)\exptest.obj \
+       $(OBJ_D)\rsa_test.obj $(OBJ_D)\dsatest.obj $(OBJ_D)\dhtest.obj \
+       $(OBJ_D)\randtest.obj $(OBJ_D)\ssltest.obj
+
+E_OBJ=$(OBJ_D)\verify.obj \
+       $(OBJ_D)\asn1pars.obj $(OBJ_D)\req.obj $(OBJ_D)\dgst.obj \
+       $(OBJ_D)\dh.obj $(OBJ_D)\dhparam.obj $(OBJ_D)\enc.obj \
+       $(OBJ_D)\passwd.obj $(OBJ_D)\gendh.obj $(OBJ_D)\errstr.obj \
+       $(OBJ_D)\ca.obj $(OBJ_D)\pkcs7.obj $(OBJ_D)\crl2p7.obj \
+       $(OBJ_D)\crl.obj $(OBJ_D)\rsa.obj $(OBJ_D)\dsa.obj \
+       $(OBJ_D)\dsaparam.obj $(OBJ_D)\x509.obj $(OBJ_D)\genrsa.obj \
+       $(OBJ_D)\gendsa.obj $(OBJ_D)\s_server.obj $(OBJ_D)\s_client.obj \
+       $(OBJ_D)\speed.obj $(OBJ_D)\s_time.obj $(OBJ_D)\apps.obj \
+       $(OBJ_D)\s_cb.obj $(OBJ_D)\s_socket.obj $(OBJ_D)\app_rand.obj \
+       $(OBJ_D)\version.obj $(OBJ_D)\sess_id.obj $(OBJ_D)\ciphers.obj \
+       $(OBJ_D)\nseq.obj $(OBJ_D)\pkcs12.obj $(OBJ_D)\pkcs8.obj \
+       $(OBJ_D)\spkac.obj $(OBJ_D)\smime.obj $(OBJ_D)\openssl.obj
+
+CRYPTOOBJ=$(OBJ_D)\cryptlib.obj \
+       $(OBJ_D)\mem.obj $(OBJ_D)\mem_dbg.obj $(OBJ_D)\cversion.obj \
+       $(OBJ_D)\ex_data.obj $(OBJ_D)\tmdiff.obj $(OBJ_D)\cpt_err.obj \
+       $(OBJ_D)\ebcdic.obj $(OBJ_D)\md2_dgst.obj $(OBJ_D)\md2_one.obj \
+       $(OBJ_D)\md5_dgst.obj $(OBJ_D)\md5_one.obj $(OBJ_D)\sha_dgst.obj \
+       $(OBJ_D)\sha1dgst.obj $(OBJ_D)\sha_one.obj $(OBJ_D)\sha1_one.obj \
+       $(OBJ_D)\mdc2dgst.obj $(OBJ_D)\mdc2_one.obj $(OBJ_D)\hmac.obj \
+       $(OBJ_D)\rmd_dgst.obj $(OBJ_D)\rmd_one.obj $(OBJ_D)\set_key.obj \
+       $(OBJ_D)\ecb_enc.obj $(OBJ_D)\cbc_enc.obj $(OBJ_D)\ecb3_enc.obj \
+       $(OBJ_D)\cfb64enc.obj $(OBJ_D)\cfb64ede.obj $(OBJ_D)\cfb_enc.obj \
+       $(OBJ_D)\ofb64ede.obj $(OBJ_D)\enc_read.obj $(OBJ_D)\enc_writ.obj \
+       $(OBJ_D)\ofb64enc.obj $(OBJ_D)\ofb_enc.obj $(OBJ_D)\str2key.obj \
+       $(OBJ_D)\pcbc_enc.obj $(OBJ_D)\qud_cksm.obj $(OBJ_D)\rand_key.obj \
+       $(OBJ_D)\des_enc.obj $(OBJ_D)\fcrypt_b.obj $(OBJ_D)\read2pwd.obj \
+       $(OBJ_D)\fcrypt.obj $(OBJ_D)\xcbc_enc.obj $(OBJ_D)\read_pwd.obj \
+       $(OBJ_D)\rpc_enc.obj $(OBJ_D)\cbc_cksm.obj $(OBJ_D)\supp.obj \
+       $(OBJ_D)\ede_cbcm_enc.obj $(OBJ_D)\rc2_ecb.obj $(OBJ_D)\rc2_skey.obj \
+       $(OBJ_D)\rc2_cbc.obj $(OBJ_D)\rc2cfb64.obj $(OBJ_D)\rc2ofb64.obj \
+       $(OBJ_D)\rc4_skey.obj $(OBJ_D)\rc4_enc.obj $(OBJ_D)\rc5_skey.obj \
+       $(OBJ_D)\rc5_ecb.obj $(OBJ_D)\rc5_enc.obj $(OBJ_D)\rc5cfb64.obj \
+       $(OBJ_D)\rc5ofb64.obj $(OBJ_D)\i_cbc.obj $(OBJ_D)\i_cfb64.obj \
+       $(OBJ_D)\i_ofb64.obj $(OBJ_D)\i_ecb.obj $(OBJ_D)\i_skey.obj \
+       $(OBJ_D)\bf_skey.obj $(OBJ_D)\bf_ecb.obj $(OBJ_D)\bf_enc.obj \
+       $(OBJ_D)\bf_cfb64.obj $(OBJ_D)\bf_ofb64.obj $(OBJ_D)\c_skey.obj \
+       $(OBJ_D)\c_ecb.obj $(OBJ_D)\c_enc.obj $(OBJ_D)\c_cfb64.obj \
+       $(OBJ_D)\c_ofb64.obj $(OBJ_D)\bn_add.obj $(OBJ_D)\bn_div.obj \
+       $(OBJ_D)\bn_exp.obj $(OBJ_D)\bn_lib.obj $(OBJ_D)\bn_ctx.obj \
+       $(OBJ_D)\bn_mul.obj $(OBJ_D)\bn_print.obj $(OBJ_D)\bn_rand.obj \
+       $(OBJ_D)\bn_shift.obj $(OBJ_D)\bn_word.obj $(OBJ_D)\bn_blind.obj \
+       $(OBJ_D)\bn_gcd.obj $(OBJ_D)\bn_prime.obj $(OBJ_D)\bn_err.obj \
+       $(OBJ_D)\bn_sqr.obj $(BN_ASM_OBJ) $(OBJ_D)\bn_recp.obj \
+       $(OBJ_D)\bn_mont.obj $(OBJ_D)\bn_mpi.obj $(OBJ_D)\bn_exp2.obj \
+       $(OBJ_D)\rsa_eay.obj $(OBJ_D)\rsa_gen.obj $(OBJ_D)\rsa_lib.obj \
+       $(OBJ_D)\rsa_sign.obj $(OBJ_D)\rsa_saos.obj $(OBJ_D)\rsa_err.obj \
+       $(OBJ_D)\rsa_pk1.obj $(OBJ_D)\rsa_ssl.obj $(OBJ_D)\rsa_none.obj \
+       $(OBJ_D)\rsa_oaep.obj $(OBJ_D)\rsa_chk.obj $(OBJ_D)\rsa_null.obj \
+       $(OBJ_D)\dsa_gen.obj $(OBJ_D)\dsa_key.obj $(OBJ_D)\dsa_lib.obj \
+       $(OBJ_D)\dsa_asn1.obj $(OBJ_D)\dsa_vrf.obj $(OBJ_D)\dsa_sign.obj \
+       $(OBJ_D)\dsa_err.obj $(OBJ_D)\dsa_ossl.obj $(OBJ_D)\dh_gen.obj \
+       $(OBJ_D)\dh_key.obj $(OBJ_D)\dh_lib.obj $(OBJ_D)\dh_check.obj \
+       $(OBJ_D)\dh_err.obj $(OBJ_D)\buffer.obj $(OBJ_D)\buf_err.obj \
+       $(OBJ_D)\bio_lib.obj $(OBJ_D)\bio_cb.obj $(OBJ_D)\bio_err.obj \
+       $(OBJ_D)\bss_mem.obj $(OBJ_D)\bss_null.obj $(OBJ_D)\bss_fd.obj \
+       $(OBJ_D)\bss_file.obj $(OBJ_D)\bss_sock.obj $(OBJ_D)\bss_conn.obj \
+       $(OBJ_D)\bf_null.obj $(OBJ_D)\bf_buff.obj $(OBJ_D)\b_print.obj \
+       $(OBJ_D)\b_dump.obj $(OBJ_D)\b_sock.obj $(OBJ_D)\bss_acpt.obj \
+       $(OBJ_D)\bf_nbio.obj $(OBJ_D)\bss_log.obj $(OBJ_D)\bss_bio.obj \
+       $(OBJ_D)\stack.obj $(OBJ_D)\lhash.obj $(OBJ_D)\lh_stats.obj \
+       $(OBJ_D)\md_rand.obj $(OBJ_D)\randfile.obj $(OBJ_D)\rand_lib.obj \
+       $(OBJ_D)\rand_err.obj $(OBJ_D)\rand_egd.obj $(OBJ_D)\err.obj \
+       $(OBJ_D)\err_all.obj $(OBJ_D)\err_prn.obj $(OBJ_D)\o_names.obj \
+       $(OBJ_D)\obj_dat.obj $(OBJ_D)\obj_lib.obj $(OBJ_D)\obj_err.obj \
+       $(OBJ_D)\encode.obj $(OBJ_D)\digest.obj $(OBJ_D)\evp_enc.obj \
+       $(OBJ_D)\evp_key.obj $(OBJ_D)\e_ecb_d.obj $(OBJ_D)\e_cbc_d.obj \
+       $(OBJ_D)\e_cfb_d.obj $(OBJ_D)\e_ofb_d.obj $(OBJ_D)\e_ecb_i.obj \
+       $(OBJ_D)\e_cbc_i.obj $(OBJ_D)\e_cfb_i.obj $(OBJ_D)\e_ofb_i.obj \
+       $(OBJ_D)\e_ecb_3d.obj $(OBJ_D)\e_cbc_3d.obj $(OBJ_D)\e_rc4.obj \
+       $(OBJ_D)\names.obj $(OBJ_D)\e_cfb_3d.obj $(OBJ_D)\e_ofb_3d.obj \
+       $(OBJ_D)\e_xcbc_d.obj $(OBJ_D)\e_ecb_r2.obj $(OBJ_D)\e_cbc_r2.obj \
+       $(OBJ_D)\e_cfb_r2.obj $(OBJ_D)\e_ofb_r2.obj $(OBJ_D)\e_ecb_bf.obj \
+       $(OBJ_D)\e_cbc_bf.obj $(OBJ_D)\e_cfb_bf.obj $(OBJ_D)\e_ofb_bf.obj \
+       $(OBJ_D)\e_ecb_c.obj $(OBJ_D)\e_cbc_c.obj $(OBJ_D)\e_cfb_c.obj \
+       $(OBJ_D)\e_ofb_c.obj $(OBJ_D)\e_ecb_r5.obj $(OBJ_D)\e_cbc_r5.obj \
+       $(OBJ_D)\e_cfb_r5.obj $(OBJ_D)\e_ofb_r5.obj $(OBJ_D)\m_null.obj \
+       $(OBJ_D)\m_md2.obj $(OBJ_D)\m_md5.obj $(OBJ_D)\m_sha.obj \
+       $(OBJ_D)\m_sha1.obj $(OBJ_D)\m_dss.obj $(OBJ_D)\m_dss1.obj \
+       $(OBJ_D)\m_mdc2.obj $(OBJ_D)\m_ripemd.obj $(OBJ_D)\p_open.obj \
+       $(OBJ_D)\p_seal.obj $(OBJ_D)\p_sign.obj $(OBJ_D)\p_verify.obj \
+       $(OBJ_D)\p_lib.obj $(OBJ_D)\p_enc.obj $(OBJ_D)\p_dec.obj \
+       $(OBJ_D)\bio_md.obj $(OBJ_D)\bio_b64.obj $(OBJ_D)\bio_enc.obj \
+       $(OBJ_D)\evp_err.obj $(OBJ_D)\e_null.obj $(OBJ_D)\c_all.obj \
+       $(OBJ_D)\c_allc.obj $(OBJ_D)\c_alld.obj $(OBJ_D)\evp_lib.obj \
+       $(OBJ_D)\bio_ok.obj $(OBJ_D)\evp_pkey.obj $(OBJ_D)\evp_pbe.obj \
+       $(OBJ_D)\p5_crpt.obj $(OBJ_D)\p5_crpt2.obj $(OBJ_D)\a_object.obj \
+       $(OBJ_D)\a_bitstr.obj $(OBJ_D)\a_utctm.obj $(OBJ_D)\a_gentm.obj \
+       $(OBJ_D)\a_time.obj $(OBJ_D)\a_int.obj $(OBJ_D)\a_octet.obj \
+       $(OBJ_D)\a_null.obj $(OBJ_D)\a_print.obj $(OBJ_D)\a_type.obj \
+       $(OBJ_D)\a_set.obj $(OBJ_D)\a_dup.obj $(OBJ_D)\a_d2i_fp.obj \
+       $(OBJ_D)\a_i2d_fp.obj $(OBJ_D)\a_bmp.obj $(OBJ_D)\a_enum.obj \
+       $(OBJ_D)\a_vis.obj $(OBJ_D)\a_utf8.obj $(OBJ_D)\a_sign.obj \
+       $(OBJ_D)\a_digest.obj $(OBJ_D)\a_verify.obj $(OBJ_D)\a_mbstr.obj \
+       $(OBJ_D)\x_algor.obj $(OBJ_D)\x_val.obj $(OBJ_D)\x_pubkey.obj \
+       $(OBJ_D)\x_sig.obj $(OBJ_D)\x_req.obj $(OBJ_D)\x_attrib.obj \
+       $(OBJ_D)\x_name.obj $(OBJ_D)\x_cinf.obj $(OBJ_D)\x_x509.obj \
+       $(OBJ_D)\x_x509a.obj $(OBJ_D)\x_crl.obj $(OBJ_D)\x_info.obj \
+       $(OBJ_D)\x_spki.obj $(OBJ_D)\nsseq.obj $(OBJ_D)\d2i_r_pr.obj \
+       $(OBJ_D)\i2d_r_pr.obj $(OBJ_D)\d2i_r_pu.obj $(OBJ_D)\i2d_r_pu.obj \
+       $(OBJ_D)\d2i_s_pr.obj $(OBJ_D)\i2d_s_pr.obj $(OBJ_D)\d2i_s_pu.obj \
+       $(OBJ_D)\i2d_s_pu.obj $(OBJ_D)\d2i_pu.obj $(OBJ_D)\d2i_pr.obj \
+       $(OBJ_D)\i2d_pu.obj $(OBJ_D)\i2d_pr.obj $(OBJ_D)\t_req.obj \
+       $(OBJ_D)\t_x509.obj $(OBJ_D)\t_x509a.obj $(OBJ_D)\t_crl.obj \
+       $(OBJ_D)\t_pkey.obj $(OBJ_D)\t_spki.obj $(OBJ_D)\t_bitst.obj \
+       $(OBJ_D)\p7_i_s.obj $(OBJ_D)\p7_signi.obj $(OBJ_D)\p7_signd.obj \
+       $(OBJ_D)\p7_recip.obj $(OBJ_D)\p7_enc_c.obj $(OBJ_D)\p7_evp.obj \
+       $(OBJ_D)\p7_dgst.obj $(OBJ_D)\p7_s_e.obj $(OBJ_D)\p7_enc.obj \
+       $(OBJ_D)\p7_lib.obj $(OBJ_D)\f_int.obj $(OBJ_D)\f_string.obj \
+       $(OBJ_D)\i2d_dhp.obj $(OBJ_D)\i2d_dsap.obj $(OBJ_D)\d2i_dhp.obj \
+       $(OBJ_D)\d2i_dsap.obj $(OBJ_D)\n_pkey.obj $(OBJ_D)\f_enum.obj \
+       $(OBJ_D)\a_hdr.obj $(OBJ_D)\x_pkey.obj $(OBJ_D)\a_bool.obj \
+       $(OBJ_D)\x_exten.obj $(OBJ_D)\asn1_par.obj $(OBJ_D)\asn1_lib.obj \
+       $(OBJ_D)\asn1_err.obj $(OBJ_D)\a_meth.obj $(OBJ_D)\a_bytes.obj \
+       $(OBJ_D)\a_strnid.obj $(OBJ_D)\evp_asn1.obj $(OBJ_D)\asn_pack.obj \
+       $(OBJ_D)\p5_pbe.obj $(OBJ_D)\p5_pbev2.obj $(OBJ_D)\p8_pkey.obj \
+       $(OBJ_D)\pem_sign.obj $(OBJ_D)\pem_seal.obj $(OBJ_D)\pem_info.obj \
+       $(OBJ_D)\pem_lib.obj $(OBJ_D)\pem_all.obj $(OBJ_D)\pem_err.obj \
+       $(OBJ_D)\x509_def.obj $(OBJ_D)\x509_d2.obj $(OBJ_D)\x509_r2x.obj \
+       $(OBJ_D)\x509_cmp.obj $(OBJ_D)\x509_obj.obj $(OBJ_D)\x509_req.obj \
+       $(OBJ_D)\x509spki.obj $(OBJ_D)\x509_vfy.obj $(OBJ_D)\x509_set.obj \
+       $(OBJ_D)\x509rset.obj $(OBJ_D)\x509_err.obj $(OBJ_D)\x509name.obj \
+       $(OBJ_D)\x509_v3.obj $(OBJ_D)\x509_ext.obj $(OBJ_D)\x509_att.obj \
+       $(OBJ_D)\x509type.obj $(OBJ_D)\x509_lu.obj $(OBJ_D)\x_all.obj \
+       $(OBJ_D)\x509_txt.obj $(OBJ_D)\x509_trs.obj $(OBJ_D)\by_file.obj \
+       $(OBJ_D)\by_dir.obj $(OBJ_D)\v3_bcons.obj $(OBJ_D)\v3_bitst.obj \
+       $(OBJ_D)\v3_conf.obj $(OBJ_D)\v3_extku.obj $(OBJ_D)\v3_ia5.obj \
+       $(OBJ_D)\v3_lib.obj $(OBJ_D)\v3_prn.obj $(OBJ_D)\v3_utl.obj \
+       $(OBJ_D)\v3err.obj $(OBJ_D)\v3_genn.obj $(OBJ_D)\v3_alt.obj \
+       $(OBJ_D)\v3_skey.obj $(OBJ_D)\v3_akey.obj $(OBJ_D)\v3_pku.obj \
+       $(OBJ_D)\v3_int.obj $(OBJ_D)\v3_enum.obj $(OBJ_D)\v3_sxnet.obj \
+       $(OBJ_D)\v3_cpols.obj $(OBJ_D)\v3_crld.obj $(OBJ_D)\v3_purp.obj \
+       $(OBJ_D)\v3_info.obj $(OBJ_D)\conf.obj $(OBJ_D)\conf_err.obj \
+       $(OBJ_D)\txt_db.obj $(OBJ_D)\pk7_lib.obj $(OBJ_D)\pkcs7err.obj \
+       $(OBJ_D)\pk7_doit.obj $(OBJ_D)\pk7_smime.obj $(OBJ_D)\pk7_attr.obj \
+       $(OBJ_D)\pk7_mime.obj $(OBJ_D)\p12_add.obj $(OBJ_D)\p12_attr.obj \
+       $(OBJ_D)\p12_bags.obj $(OBJ_D)\p12_crpt.obj $(OBJ_D)\p12_crt.obj \
+       $(OBJ_D)\p12_decr.obj $(OBJ_D)\p12_init.obj $(OBJ_D)\p12_key.obj \
+       $(OBJ_D)\p12_kiss.obj $(OBJ_D)\p12_lib.obj $(OBJ_D)\p12_mac.obj \
+       $(OBJ_D)\p12_mutl.obj $(OBJ_D)\p12_sbag.obj $(OBJ_D)\p12_utl.obj \
+       $(OBJ_D)\p12_npas.obj $(OBJ_D)\pk12err.obj $(OBJ_D)\comp_lib.obj \
+       $(OBJ_D)\c_rle.obj $(OBJ_D)\c_zlib.obj
+
+SSLOBJ=$(OBJ_D)\s2_meth.obj \
+       $(OBJ_D)\s2_srvr.obj $(OBJ_D)\s2_clnt.obj $(OBJ_D)\s2_lib.obj \
+       $(OBJ_D)\s2_enc.obj $(OBJ_D)\s2_pkt.obj $(OBJ_D)\s3_meth.obj \
+       $(OBJ_D)\s3_srvr.obj $(OBJ_D)\s3_clnt.obj $(OBJ_D)\s3_lib.obj \
+       $(OBJ_D)\s3_enc.obj $(OBJ_D)\s3_pkt.obj $(OBJ_D)\s3_both.obj \
+       $(OBJ_D)\s23_meth.obj $(OBJ_D)\s23_srvr.obj $(OBJ_D)\s23_clnt.obj \
+       $(OBJ_D)\s23_lib.obj $(OBJ_D)\s23_pkt.obj $(OBJ_D)\t1_meth.obj \
+       $(OBJ_D)\t1_srvr.obj $(OBJ_D)\t1_clnt.obj $(OBJ_D)\t1_lib.obj \
+       $(OBJ_D)\t1_enc.obj $(OBJ_D)\ssl_lib.obj $(OBJ_D)\ssl_err2.obj \
+       $(OBJ_D)\ssl_cert.obj $(OBJ_D)\ssl_sess.obj $(OBJ_D)\ssl_ciph.obj \
+       $(OBJ_D)\ssl_stat.obj $(OBJ_D)\ssl_rsa.obj $(OBJ_D)\ssl_asn1.obj \
+       $(OBJ_D)\ssl_txt.obj $(OBJ_D)\ssl_algs.obj $(OBJ_D)\bio_ssl.obj \
+       $(OBJ_D)\ssl_err.obj
+
+RSAGLUEOBJ=$(OBJ_D)\rsaref.obj \
+       $(OBJ_D)\rsar_err.obj
+
+T_EXE=$(TEST_D)\md2test.exe \
+       $(TEST_D)\md5test.exe $(TEST_D)\shatest.exe $(TEST_D)\sha1test.exe \
+       $(TEST_D)\mdc2test.exe $(TEST_D)\hmactest.exe $(TEST_D)\rmdtest.exe \
+       $(TEST_D)\destest.exe $(TEST_D)\rc2test.exe $(TEST_D)\rc4test.exe \
+       $(TEST_D)\rc5test.exe $(TEST_D)\ideatest.exe $(TEST_D)\bftest.exe \
+       $(TEST_D)\casttest.exe $(TEST_D)\bntest.exe $(TEST_D)\exptest.exe \
+       $(TEST_D)\rsa_test.exe $(TEST_D)\dsatest.exe $(TEST_D)\dhtest.exe \
+       $(TEST_D)\randtest.exe $(TEST_D)\ssltest.exe
+
+###################################################################
+all: banner $(TMP_D) $(BIN_D) $(TEST_D) $(LIB_D) $(INCO_D) headers lib exe
+
+banner:
+       @echo Make sure you have run 'perl Configure VC-W31-32' in the
+       @echo top level directory, if you don't have perl, you will
+       @echo need to probably edit crypto/bn/bn.h, check the
+       @echo documentation for details.
+
+
+$(TMP_D):
+       $(MKDIR) $(TMP_D)
+# NB: uncomment out these lines if BIN_D, TEST_D and LIB_D are different
+#$(BIN_D):
+#      $(MKDIR) $(BIN_D)
+#
+#$(TEST_D):
+#      $(MKDIR) $(TEST_D)
+
+$(LIB_D):
+       $(MKDIR) $(LIB_D)
+
+$(INCO_D): $(INC_D)
+       $(MKDIR) $(INCO_D)
+
+$(INC_D):
+       $(MKDIR) $(INC_D)
+
+headers: $(HEADER) $(EXHEADER)
+
+lib: $(LIBS_DEP)
+
+exe: $(T_EXE) $(BIN_D)\$(E_EXE).exe
+
+install:
+       $(MKDIR) $(INSTALLTOP)
+       $(MKDIR) $(INSTALLTOP)\bin
+       $(MKDIR) $(INSTALLTOP)\include
+       $(MKDIR) $(INSTALLTOP)\include\openssl
+       $(MKDIR) $(INSTALLTOP)\lib
+       $(CP) $(INCO_D)\*.[ch] $(INSTALLTOP)\include\openssl
+       $(CP) $(BIN_D)\$(E_EXE).exe $(INSTALLTOP)\bin
+       $(CP) $(O_SSL) $(INSTALLTOP)\lib
+       $(CP) $(O_CRYPTO) $(INSTALLTOP)\lib
+
+clean:
+       $(RM) $(TMP_D)\*.*
+
+vclean:
+       $(RM) $(TMP_D)\*.*
+       $(RM) $(OUT_D)\*.*
+
+$(INCL_D)\cryptlib.h: $(SRC_D)\crypto\cryptlib.h
+       $(CP) $(SRC_D)\crypto\cryptlib.h $(INCL_D)\cryptlib.h
+
+$(INCL_D)\buildinf.h: $(SRC_D)\crypto\buildinf.h
+       $(CP) $(SRC_D)\crypto\buildinf.h $(INCL_D)\buildinf.h
+
+$(INCL_D)\md5_locl.h: $(SRC_D)\crypto\md5\md5_locl.h
+       $(CP) $(SRC_D)\crypto\md5\md5_locl.h $(INCL_D)\md5_locl.h
+
+$(INCL_D)\sha_locl.h: $(SRC_D)\crypto\sha\sha_locl.h
+       $(CP) $(SRC_D)\crypto\sha\sha_locl.h $(INCL_D)\sha_locl.h
+
+$(INCL_D)\rmd_locl.h: $(SRC_D)\crypto\ripemd\rmd_locl.h
+       $(CP) $(SRC_D)\crypto\ripemd\rmd_locl.h $(INCL_D)\rmd_locl.h
+
+$(INCL_D)\rmdconst.h: $(SRC_D)\crypto\ripemd\rmdconst.h
+       $(CP) $(SRC_D)\crypto\ripemd\rmdconst.h $(INCL_D)\rmdconst.h
+
+$(INCL_D)\des_locl.h: $(SRC_D)\crypto\des\des_locl.h
+       $(CP) $(SRC_D)\crypto\des\des_locl.h $(INCL_D)\des_locl.h
+
+$(INCL_D)\rpc_des.h: $(SRC_D)\crypto\des\rpc_des.h
+       $(CP) $(SRC_D)\crypto\des\rpc_des.h $(INCL_D)\rpc_des.h
+
+$(INCL_D)\podd.h: $(SRC_D)\crypto\des\podd.h
+       $(CP) $(SRC_D)\crypto\des\podd.h $(INCL_D)\podd.h
+
+$(INCL_D)\sk.h: $(SRC_D)\crypto\des\sk.h
+       $(CP) $(SRC_D)\crypto\des\sk.h $(INCL_D)\sk.h
+
+$(INCL_D)\spr.h: $(SRC_D)\crypto\des\spr.h
+       $(CP) $(SRC_D)\crypto\des\spr.h $(INCL_D)\spr.h
+
+$(INCL_D)\des_ver.h: $(SRC_D)\crypto\des\des_ver.h
+       $(CP) $(SRC_D)\crypto\des\des_ver.h $(INCL_D)\des_ver.h
+
+$(INCL_D)\rc2_locl.h: $(SRC_D)\crypto\rc2\rc2_locl.h
+       $(CP) $(SRC_D)\crypto\rc2\rc2_locl.h $(INCL_D)\rc2_locl.h
+
+$(INCL_D)\rc4_locl.h: $(SRC_D)\crypto\rc4\rc4_locl.h
+       $(CP) $(SRC_D)\crypto\rc4\rc4_locl.h $(INCL_D)\rc4_locl.h
+
+$(INCL_D)\rc5_locl.h: $(SRC_D)\crypto\rc5\rc5_locl.h
+       $(CP) $(SRC_D)\crypto\rc5\rc5_locl.h $(INCL_D)\rc5_locl.h
+
+$(INCL_D)\idea_lcl.h: $(SRC_D)\crypto\idea\idea_lcl.h
+       $(CP) $(SRC_D)\crypto\idea\idea_lcl.h $(INCL_D)\idea_lcl.h
+
+$(INCL_D)\bf_pi.h: $(SRC_D)\crypto\bf\bf_pi.h
+       $(CP) $(SRC_D)\crypto\bf\bf_pi.h $(INCL_D)\bf_pi.h
+
+$(INCL_D)\bf_locl.h: $(SRC_D)\crypto\bf\bf_locl.h
+       $(CP) $(SRC_D)\crypto\bf\bf_locl.h $(INCL_D)\bf_locl.h
+
+$(INCL_D)\cast_s.h: $(SRC_D)\crypto\cast\cast_s.h
+       $(CP) $(SRC_D)\crypto\cast\cast_s.h $(INCL_D)\cast_s.h
+
+$(INCL_D)\cast_lcl.h: $(SRC_D)\crypto\cast\cast_lcl.h
+       $(CP) $(SRC_D)\crypto\cast\cast_lcl.h $(INCL_D)\cast_lcl.h
+
+$(INCL_D)\bn_lcl.h: $(SRC_D)\crypto\bn\bn_lcl.h
+       $(CP) $(SRC_D)\crypto\bn\bn_lcl.h $(INCL_D)\bn_lcl.h
+
+$(INCL_D)\bn_prime.h: $(SRC_D)\crypto\bn\bn_prime.h
+       $(CP) $(SRC_D)\crypto\bn\bn_prime.h $(INCL_D)\bn_prime.h
+
+$(INCL_D)\bss_file.c: $(SRC_D)\crypto\bio\bss_file.c
+       $(CP) $(SRC_D)\crypto\bio\bss_file.c $(INCL_D)\bss_file.c
+
+$(INCL_D)\obj_dat.h: $(SRC_D)\crypto\objects\obj_dat.h
+       $(CP) $(SRC_D)\crypto\objects\obj_dat.h $(INCL_D)\obj_dat.h
+
+$(INCL_D)\conf_lcl.h: $(SRC_D)\crypto\conf\conf_lcl.h
+       $(CP) $(SRC_D)\crypto\conf\conf_lcl.h $(INCL_D)\conf_lcl.h
+
+$(INCL_D)\ssl_locl.h: $(SRC_D)\ssl\ssl_locl.h
+       $(CP) $(SRC_D)\ssl\ssl_locl.h $(INCL_D)\ssl_locl.h
+
+$(INCL_D)\apps.h: $(SRC_D)\apps\apps.h
+       $(CP) $(SRC_D)\apps\apps.h $(INCL_D)\apps.h
+
+$(INCL_D)\progs.h: $(SRC_D)\apps\progs.h
+       $(CP) $(SRC_D)\apps\progs.h $(INCL_D)\progs.h
+
+$(INCL_D)\s_apps.h: $(SRC_D)\apps\s_apps.h
+       $(CP) $(SRC_D)\apps\s_apps.h $(INCL_D)\s_apps.h
+
+$(INCL_D)\testdsa.h: $(SRC_D)\apps\testdsa.h
+       $(CP) $(SRC_D)\apps\testdsa.h $(INCL_D)\testdsa.h
+
+$(INCL_D)\testrsa.h: $(SRC_D)\apps\testrsa.h
+       $(CP) $(SRC_D)\apps\testrsa.h $(INCL_D)\testrsa.h
+
+$(INCO_D)\e_os.h: $(SRC_D)\.\e_os.h
+       $(CP) $(SRC_D)\.\e_os.h $(INCO_D)\e_os.h
+
+$(INCO_D)\e_os2.h: $(SRC_D)\.\e_os2.h
+       $(CP) $(SRC_D)\.\e_os2.h $(INCO_D)\e_os2.h
+
+$(INCO_D)\crypto.h: $(SRC_D)\crypto\crypto.h
+       $(CP) $(SRC_D)\crypto\crypto.h $(INCO_D)\crypto.h
+
+$(INCO_D)\tmdiff.h: $(SRC_D)\crypto\tmdiff.h
+       $(CP) $(SRC_D)\crypto\tmdiff.h $(INCO_D)\tmdiff.h
+
+$(INCO_D)\opensslv.h: $(SRC_D)\crypto\opensslv.h
+       $(CP) $(SRC_D)\crypto\opensslv.h $(INCO_D)\opensslv.h
+
+$(INCO_D)\opensslconf.h: $(SRC_D)\crypto\opensslconf.h
+       $(CP) $(SRC_D)\crypto\opensslconf.h $(INCO_D)\opensslconf.h
+
+$(INCO_D)\ebcdic.h: $(SRC_D)\crypto\ebcdic.h
+       $(CP) $(SRC_D)\crypto\ebcdic.h $(INCO_D)\ebcdic.h
+
+$(INCO_D)\md2.h: $(SRC_D)\crypto\md2\md2.h
+       $(CP) $(SRC_D)\crypto\md2\md2.h $(INCO_D)\md2.h
+
+$(INCO_D)\md5.h: $(SRC_D)\crypto\md5\md5.h
+       $(CP) $(SRC_D)\crypto\md5\md5.h $(INCO_D)\md5.h
+
+$(INCO_D)\sha.h: $(SRC_D)\crypto\sha\sha.h
+       $(CP) $(SRC_D)\crypto\sha\sha.h $(INCO_D)\sha.h
+
+$(INCO_D)\mdc2.h: $(SRC_D)\crypto\mdc2\mdc2.h
+       $(CP) $(SRC_D)\crypto\mdc2\mdc2.h $(INCO_D)\mdc2.h
+
+$(INCO_D)\hmac.h: $(SRC_D)\crypto\hmac\hmac.h
+       $(CP) $(SRC_D)\crypto\hmac\hmac.h $(INCO_D)\hmac.h
+
+$(INCO_D)\ripemd.h: $(SRC_D)\crypto\ripemd\ripemd.h
+       $(CP) $(SRC_D)\crypto\ripemd\ripemd.h $(INCO_D)\ripemd.h
+
+$(INCO_D)\des.h: $(SRC_D)\crypto\des\des.h
+       $(CP) $(SRC_D)\crypto\des\des.h $(INCO_D)\des.h
+
+$(INCO_D)\rc2.h: $(SRC_D)\crypto\rc2\rc2.h
+       $(CP) $(SRC_D)\crypto\rc2\rc2.h $(INCO_D)\rc2.h
+
+$(INCO_D)\rc4.h: $(SRC_D)\crypto\rc4\rc4.h
+       $(CP) $(SRC_D)\crypto\rc4\rc4.h $(INCO_D)\rc4.h
+
+$(INCO_D)\rc5.h: $(SRC_D)\crypto\rc5\rc5.h
+       $(CP) $(SRC_D)\crypto\rc5\rc5.h $(INCO_D)\rc5.h
+
+$(INCO_D)\idea.h: $(SRC_D)\crypto\idea\idea.h
+       $(CP) $(SRC_D)\crypto\idea\idea.h $(INCO_D)\idea.h
+
+$(INCO_D)\blowfish.h: $(SRC_D)\crypto\bf\blowfish.h
+       $(CP) $(SRC_D)\crypto\bf\blowfish.h $(INCO_D)\blowfish.h
+
+$(INCO_D)\cast.h: $(SRC_D)\crypto\cast\cast.h
+       $(CP) $(SRC_D)\crypto\cast\cast.h $(INCO_D)\cast.h
+
+$(INCO_D)\bn.h: $(SRC_D)\crypto\bn\bn.h
+       $(CP) $(SRC_D)\crypto\bn\bn.h $(INCO_D)\bn.h
+
+$(INCO_D)\rsa.h: $(SRC_D)\crypto\rsa\rsa.h
+       $(CP) $(SRC_D)\crypto\rsa\rsa.h $(INCO_D)\rsa.h
+
+$(INCO_D)\dsa.h: $(SRC_D)\crypto\dsa\dsa.h
+       $(CP) $(SRC_D)\crypto\dsa\dsa.h $(INCO_D)\dsa.h
+
+$(INCO_D)\dh.h: $(SRC_D)\crypto\dh\dh.h
+       $(CP) $(SRC_D)\crypto\dh\dh.h $(INCO_D)\dh.h
+
+$(INCO_D)\buffer.h: $(SRC_D)\crypto\buffer\buffer.h
+       $(CP) $(SRC_D)\crypto\buffer\buffer.h $(INCO_D)\buffer.h
+
+$(INCO_D)\bio.h: $(SRC_D)\crypto\bio\bio.h
+       $(CP) $(SRC_D)\crypto\bio\bio.h $(INCO_D)\bio.h
+
+$(INCO_D)\stack.h: $(SRC_D)\crypto\stack\stack.h
+       $(CP) $(SRC_D)\crypto\stack\stack.h $(INCO_D)\stack.h
+
+$(INCO_D)\safestack.h: $(SRC_D)\crypto\stack\safestack.h
+       $(CP) $(SRC_D)\crypto\stack\safestack.h $(INCO_D)\safestack.h
+
+$(INCO_D)\lhash.h: $(SRC_D)\crypto\lhash\lhash.h
+       $(CP) $(SRC_D)\crypto\lhash\lhash.h $(INCO_D)\lhash.h
+
+$(INCO_D)\rand.h: $(SRC_D)\crypto\rand\rand.h
+       $(CP) $(SRC_D)\crypto\rand\rand.h $(INCO_D)\rand.h
+
+$(INCO_D)\err.h: $(SRC_D)\crypto\err\err.h
+       $(CP) $(SRC_D)\crypto\err\err.h $(INCO_D)\err.h
+
+$(INCO_D)\objects.h: $(SRC_D)\crypto\objects\objects.h
+       $(CP) $(SRC_D)\crypto\objects\objects.h $(INCO_D)\objects.h
+
+$(INCO_D)\evp.h: $(SRC_D)\crypto\evp\evp.h
+       $(CP) $(SRC_D)\crypto\evp\evp.h $(INCO_D)\evp.h
+
+$(INCO_D)\asn1.h: $(SRC_D)\crypto\asn1\asn1.h
+       $(CP) $(SRC_D)\crypto\asn1\asn1.h $(INCO_D)\asn1.h
+
+$(INCO_D)\asn1_mac.h: $(SRC_D)\crypto\asn1\asn1_mac.h
+       $(CP) $(SRC_D)\crypto\asn1\asn1_mac.h $(INCO_D)\asn1_mac.h
+
+$(INCO_D)\pem.h: $(SRC_D)\crypto\pem\pem.h
+       $(CP) $(SRC_D)\crypto\pem\pem.h $(INCO_D)\pem.h
+
+$(INCO_D)\pem2.h: $(SRC_D)\crypto\pem\pem2.h
+       $(CP) $(SRC_D)\crypto\pem\pem2.h $(INCO_D)\pem2.h
+
+$(INCO_D)\x509.h: $(SRC_D)\crypto\x509\x509.h
+       $(CP) $(SRC_D)\crypto\x509\x509.h $(INCO_D)\x509.h
+
+$(INCO_D)\x509_vfy.h: $(SRC_D)\crypto\x509\x509_vfy.h
+       $(CP) $(SRC_D)\crypto\x509\x509_vfy.h $(INCO_D)\x509_vfy.h
+
+$(INCO_D)\x509v3.h: $(SRC_D)\crypto\x509v3\x509v3.h
+       $(CP) $(SRC_D)\crypto\x509v3\x509v3.h $(INCO_D)\x509v3.h
+
+$(INCO_D)\conf.h: $(SRC_D)\crypto\conf\conf.h
+       $(CP) $(SRC_D)\crypto\conf\conf.h $(INCO_D)\conf.h
+
+$(INCO_D)\txt_db.h: $(SRC_D)\crypto\txt_db\txt_db.h
+       $(CP) $(SRC_D)\crypto\txt_db\txt_db.h $(INCO_D)\txt_db.h
+
+$(INCO_D)\pkcs7.h: $(SRC_D)\crypto\pkcs7\pkcs7.h
+       $(CP) $(SRC_D)\crypto\pkcs7\pkcs7.h $(INCO_D)\pkcs7.h
+
+$(INCO_D)\pkcs12.h: $(SRC_D)\crypto\pkcs12\pkcs12.h
+       $(CP) $(SRC_D)\crypto\pkcs12\pkcs12.h $(INCO_D)\pkcs12.h
+
+$(INCO_D)\comp.h: $(SRC_D)\crypto\comp\comp.h
+       $(CP) $(SRC_D)\crypto\comp\comp.h $(INCO_D)\comp.h
+
+$(INCO_D)\ssl.h: $(SRC_D)\ssl\ssl.h
+       $(CP) $(SRC_D)\ssl\ssl.h $(INCO_D)\ssl.h
+
+$(INCO_D)\ssl2.h: $(SRC_D)\ssl\ssl2.h
+       $(CP) $(SRC_D)\ssl\ssl2.h $(INCO_D)\ssl2.h
+
+$(INCO_D)\ssl3.h: $(SRC_D)\ssl\ssl3.h
+       $(CP) $(SRC_D)\ssl\ssl3.h $(INCO_D)\ssl3.h
+
+$(INCO_D)\ssl23.h: $(SRC_D)\ssl\ssl23.h
+       $(CP) $(SRC_D)\ssl\ssl23.h $(INCO_D)\ssl23.h
+
+$(INCO_D)\tls1.h: $(SRC_D)\ssl\tls1.h
+       $(CP) $(SRC_D)\ssl\tls1.h $(INCO_D)\tls1.h
+
+$(INCO_D)\rsaref.h: $(SRC_D)\rsaref\rsaref.h
+       $(CP) $(SRC_D)\rsaref\rsaref.h $(INCO_D)\rsaref.h
+
+$(OBJ_D)\md2test.obj: $(SRC_D)\crypto\md2\md2test.c
+       $(CC) /Fo$(OBJ_D)\md2test.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\md2\md2test.c
+
+$(OBJ_D)\md5test.obj: $(SRC_D)\crypto\md5\md5test.c
+       $(CC) /Fo$(OBJ_D)\md5test.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\md5\md5test.c
+
+$(OBJ_D)\shatest.obj: $(SRC_D)\crypto\sha\shatest.c
+       $(CC) /Fo$(OBJ_D)\shatest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\sha\shatest.c
+
+$(OBJ_D)\sha1test.obj: $(SRC_D)\crypto\sha\sha1test.c
+       $(CC) /Fo$(OBJ_D)\sha1test.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\sha\sha1test.c
+
+$(OBJ_D)\mdc2test.obj: $(SRC_D)\crypto\mdc2\mdc2test.c
+       $(CC) /Fo$(OBJ_D)\mdc2test.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\mdc2\mdc2test.c
+
+$(OBJ_D)\hmactest.obj: $(SRC_D)\crypto\hmac\hmactest.c
+       $(CC) /Fo$(OBJ_D)\hmactest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\hmac\hmactest.c
+
+$(OBJ_D)\rmdtest.obj: $(SRC_D)\crypto\ripemd\rmdtest.c
+       $(CC) /Fo$(OBJ_D)\rmdtest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\ripemd\rmdtest.c
+
+$(OBJ_D)\destest.obj: $(SRC_D)\crypto\des\destest.c
+       $(CC) /Fo$(OBJ_D)\destest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\des\destest.c
+
+$(OBJ_D)\rc2test.obj: $(SRC_D)\crypto\rc2\rc2test.c
+       $(CC) /Fo$(OBJ_D)\rc2test.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\rc2\rc2test.c
+
+$(OBJ_D)\rc4test.obj: $(SRC_D)\crypto\rc4\rc4test.c
+       $(CC) /Fo$(OBJ_D)\rc4test.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\rc4\rc4test.c
+
+$(OBJ_D)\rc5test.obj: $(SRC_D)\crypto\rc5\rc5test.c
+       $(CC) /Fo$(OBJ_D)\rc5test.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\rc5\rc5test.c
+
+$(OBJ_D)\ideatest.obj: $(SRC_D)\crypto\idea\ideatest.c
+       $(CC) /Fo$(OBJ_D)\ideatest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\idea\ideatest.c
+
+$(OBJ_D)\bftest.obj: $(SRC_D)\crypto\bf\bftest.c
+       $(CC) /Fo$(OBJ_D)\bftest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\bf\bftest.c
+
+$(OBJ_D)\casttest.obj: $(SRC_D)\crypto\cast\casttest.c
+       $(CC) /Fo$(OBJ_D)\casttest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\cast\casttest.c
+
+$(OBJ_D)\bntest.obj: $(SRC_D)\crypto\bn\bntest.c
+       $(CC) /Fo$(OBJ_D)\bntest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\bn\bntest.c
+
+$(OBJ_D)\exptest.obj: $(SRC_D)\crypto\bn\exptest.c
+       $(CC) /Fo$(OBJ_D)\exptest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\bn\exptest.c
+
+$(OBJ_D)\rsa_test.obj: $(SRC_D)\crypto\rsa\rsa_test.c
+       $(CC) /Fo$(OBJ_D)\rsa_test.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\rsa\rsa_test.c
+
+$(OBJ_D)\dsatest.obj: $(SRC_D)\crypto\dsa\dsatest.c
+       $(CC) /Fo$(OBJ_D)\dsatest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\dsa\dsatest.c
+
+$(OBJ_D)\dhtest.obj: $(SRC_D)\crypto\dh\dhtest.c
+       $(CC) /Fo$(OBJ_D)\dhtest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\dh\dhtest.c
+
+$(OBJ_D)\randtest.obj: $(SRC_D)\crypto\rand\randtest.c
+       $(CC) /Fo$(OBJ_D)\randtest.obj $(APP_CFLAGS) -c $(SRC_D)\crypto\rand\randtest.c
+
+$(OBJ_D)\ssltest.obj: $(SRC_D)\ssl\ssltest.c
+       $(CC) /Fo$(OBJ_D)\ssltest.obj $(APP_CFLAGS) -c $(SRC_D)\ssl\ssltest.c
+
+$(OBJ_D)\verify.obj: $(SRC_D)\apps\verify.c
+       $(CC) /Fo$(OBJ_D)\verify.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\verify.c
+
+$(OBJ_D)\asn1pars.obj: $(SRC_D)\apps\asn1pars.c
+       $(CC) /Fo$(OBJ_D)\asn1pars.obj -DMONOLITH $(APP_CFLAGS) -c 
+$(SRC_D)\apps\asn1pars.c
+
+$(OBJ_D)\req.obj: $(SRC_D)\apps\req.c
+       $(CC) /Fo$(OBJ_D)\req.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\req.c
+
+$(OBJ_D)\dgst.obj: $(SRC_D)\apps\dgst.c
+       $(CC) /Fo$(OBJ_D)\dgst.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\dgst.c
+
+$(OBJ_D)\dh.obj: $(SRC_D)\apps\dh.c
+       $(CC) /Fo$(OBJ_D)\dh.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\dh.c
+
+$(OBJ_D)\dhparam.obj: $(SRC_D)\apps\dhparam.c
+       $(CC) /Fo$(OBJ_D)\dhparam.obj -DMONOLITH $(APP_CFLAGS) -c 
+$(SRC_D)\apps\dhparam.c
+
+$(OBJ_D)\enc.obj: $(SRC_D)\apps\enc.c
+       $(CC) /Fo$(OBJ_D)\enc.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\enc.c
+
+$(OBJ_D)\passwd.obj: $(SRC_D)\apps\passwd.c
+       $(CC) /Fo$(OBJ_D)\passwd.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\passwd.c
+
+$(OBJ_D)\gendh.obj: $(SRC_D)\apps\gendh.c
+       $(CC) /Fo$(OBJ_D)\gendh.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\gendh.c
+
+$(OBJ_D)\errstr.obj: $(SRC_D)\apps\errstr.c
+       $(CC) /Fo$(OBJ_D)\errstr.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\errstr.c
+
+$(OBJ_D)\ca.obj: $(SRC_D)\apps\ca.c
+       $(CC) /Fo$(OBJ_D)\ca.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\ca.c
+
+$(OBJ_D)\pkcs7.obj: $(SRC_D)\apps\pkcs7.c
+       $(CC) /Fo$(OBJ_D)\pkcs7.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\pkcs7.c
+
+$(OBJ_D)\crl2p7.obj: $(SRC_D)\apps\crl2p7.c
+       $(CC) /Fo$(OBJ_D)\crl2p7.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\crl2p7.c
+
+$(OBJ_D)\crl.obj: $(SRC_D)\apps\crl.c
+       $(CC) /Fo$(OBJ_D)\crl.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\crl.c
+
+$(OBJ_D)\rsa.obj: $(SRC_D)\apps\rsa.c
+       $(CC) /Fo$(OBJ_D)\rsa.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\rsa.c
+
+$(OBJ_D)\dsa.obj: $(SRC_D)\apps\dsa.c
+       $(CC) /Fo$(OBJ_D)\dsa.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\dsa.c
+
+$(OBJ_D)\dsaparam.obj: $(SRC_D)\apps\dsaparam.c
+       $(CC) /Fo$(OBJ_D)\dsaparam.obj -DMONOLITH $(APP_CFLAGS) -c 
+$(SRC_D)\apps\dsaparam.c
+
+$(OBJ_D)\x509.obj: $(SRC_D)\apps\x509.c
+       $(CC) /Fo$(OBJ_D)\x509.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\x509.c
+
+$(OBJ_D)\genrsa.obj: $(SRC_D)\apps\genrsa.c
+       $(CC) /Fo$(OBJ_D)\genrsa.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\genrsa.c
+
+$(OBJ_D)\gendsa.obj: $(SRC_D)\apps\gendsa.c
+       $(CC) /Fo$(OBJ_D)\gendsa.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\gendsa.c
+
+$(OBJ_D)\s_server.obj: $(SRC_D)\apps\s_server.c
+       $(CC) /Fo$(OBJ_D)\s_server.obj -DMONOLITH $(APP_CFLAGS) -c 
+$(SRC_D)\apps\s_server.c
+
+$(OBJ_D)\s_client.obj: $(SRC_D)\apps\s_client.c
+       $(CC) /Fo$(OBJ_D)\s_client.obj -DMONOLITH $(APP_CFLAGS) -c 
+$(SRC_D)\apps\s_client.c
+
+$(OBJ_D)\speed.obj: $(SRC_D)\apps\speed.c
+       $(CC) /Fo$(OBJ_D)\speed.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\speed.c
+
+$(OBJ_D)\s_time.obj: $(SRC_D)\apps\s_time.c
+       $(CC) /Fo$(OBJ_D)\s_time.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\s_time.c
+
+$(OBJ_D)\apps.obj: $(SRC_D)\apps\apps.c
+       $(CC) /Fo$(OBJ_D)\apps.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\apps.c
+
+$(OBJ_D)\s_cb.obj: $(SRC_D)\apps\s_cb.c
+       $(CC) /Fo$(OBJ_D)\s_cb.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\s_cb.c
+
+$(OBJ_D)\s_socket.obj: $(SRC_D)\apps\s_socket.c
+       $(CC) /Fo$(OBJ_D)\s_socket.obj -DMONOLITH $(APP_CFLAGS) -c 
+$(SRC_D)\apps\s_socket.c
+
+$(OBJ_D)\app_rand.obj: $(SRC_D)\apps\app_rand.c
+       $(CC) /Fo$(OBJ_D)\app_rand.obj -DMONOLITH $(APP_CFLAGS) -c 
+$(SRC_D)\apps\app_rand.c
+
+$(OBJ_D)\version.obj: $(SRC_D)\apps\version.c
+       $(CC) /Fo$(OBJ_D)\version.obj -DMONOLITH $(APP_CFLAGS) -c 
+$(SRC_D)\apps\version.c
+
+$(OBJ_D)\sess_id.obj: $(SRC_D)\apps\sess_id.c
+       $(CC) /Fo$(OBJ_D)\sess_id.obj -DMONOLITH $(APP_CFLAGS) -c 
+$(SRC_D)\apps\sess_id.c
+
+$(OBJ_D)\ciphers.obj: $(SRC_D)\apps\ciphers.c
+       $(CC) /Fo$(OBJ_D)\ciphers.obj -DMONOLITH $(APP_CFLAGS) -c 
+$(SRC_D)\apps\ciphers.c
+
+$(OBJ_D)\nseq.obj: $(SRC_D)\apps\nseq.c
+       $(CC) /Fo$(OBJ_D)\nseq.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\nseq.c
+
+$(OBJ_D)\pkcs12.obj: $(SRC_D)\apps\pkcs12.c
+       $(CC) /Fo$(OBJ_D)\pkcs12.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\pkcs12.c
+
+$(OBJ_D)\pkcs8.obj: $(SRC_D)\apps\pkcs8.c
+       $(CC) /Fo$(OBJ_D)\pkcs8.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\pkcs8.c
+
+$(OBJ_D)\spkac.obj: $(SRC_D)\apps\spkac.c
+       $(CC) /Fo$(OBJ_D)\spkac.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\spkac.c
+
+$(OBJ_D)\smime.obj: $(SRC_D)\apps\smime.c
+       $(CC) /Fo$(OBJ_D)\smime.obj -DMONOLITH $(APP_CFLAGS) -c $(SRC_D)\apps\smime.c
+
+$(OBJ_D)\openssl.obj: $(SRC_D)\apps\openssl.c
+       $(CC) /Fo$(OBJ_D)\openssl.obj -DMONOLITH $(APP_CFLAGS) -c 
+$(SRC_D)\apps\openssl.c
+
+crypto\bn\asm\x86w32.obj: crypto\bn\asm\x86w32.asm
+       $(ASM) /Focrypto\bn\asm\x86w32.obj $(SRC_D)\crypto\bn\asm\x86w32.asm
+
+$(OBJ_D)\cryptlib.obj: $(SRC_D)\crypto\cryptlib.c
+       $(CC) /Fo$(OBJ_D)\cryptlib.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\cryptlib.c
+
+$(OBJ_D)\mem.obj: $(SRC_D)\crypto\mem.c
+       $(CC) /Fo$(OBJ_D)\mem.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\mem.c
+
+$(OBJ_D)\mem_dbg.obj: $(SRC_D)\crypto\mem_dbg.c
+       $(CC) /Fo$(OBJ_D)\mem_dbg.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\mem_dbg.c
+
+$(OBJ_D)\cversion.obj: $(SRC_D)\crypto\cversion.c
+       $(CC) /Fo$(OBJ_D)\cversion.obj  $(SHLIB_CFLAGS) -DMK1MF_BUILD 
+-DMK1MF_PLATFORM_VC_W31_32 -c $(SRC_D)\crypto\cversion.c
+
+$(OBJ_D)\ex_data.obj: $(SRC_D)\crypto\ex_data.c
+       $(CC) /Fo$(OBJ_D)\ex_data.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\ex_data.c
+
+$(OBJ_D)\tmdiff.obj: $(SRC_D)\crypto\tmdiff.c
+       $(CC) /Fo$(OBJ_D)\tmdiff.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\tmdiff.c
+
+$(OBJ_D)\cpt_err.obj: $(SRC_D)\crypto\cpt_err.c
+       $(CC) /Fo$(OBJ_D)\cpt_err.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\cpt_err.c
+
+$(OBJ_D)\ebcdic.obj: $(SRC_D)\crypto\ebcdic.c
+       $(CC) /Fo$(OBJ_D)\ebcdic.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\ebcdic.c
+
+$(OBJ_D)\md2_dgst.obj: $(SRC_D)\crypto\md2\md2_dgst.c
+       $(CC) /Fo$(OBJ_D)\md2_dgst.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\md2\md2_dgst.c
+
+$(OBJ_D)\md2_one.obj: $(SRC_D)\crypto\md2\md2_one.c
+       $(CC) /Fo$(OBJ_D)\md2_one.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\md2\md2_one.c
+
+$(OBJ_D)\md5_dgst.obj: $(SRC_D)\crypto\md5\md5_dgst.c
+       $(CC) /Fo$(OBJ_D)\md5_dgst.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\md5\md5_dgst.c
+
+$(OBJ_D)\md5_one.obj: $(SRC_D)\crypto\md5\md5_one.c
+       $(CC) /Fo$(OBJ_D)\md5_one.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\md5\md5_one.c
+
+$(OBJ_D)\sha_dgst.obj: $(SRC_D)\crypto\sha\sha_dgst.c
+       $(CC) /Fo$(OBJ_D)\sha_dgst.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\sha\sha_dgst.c
+
+$(OBJ_D)\sha1dgst.obj: $(SRC_D)\crypto\sha\sha1dgst.c
+       $(CC) /Fo$(OBJ_D)\sha1dgst.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\sha\sha1dgst.c
+
+$(OBJ_D)\sha_one.obj: $(SRC_D)\crypto\sha\sha_one.c
+       $(CC) /Fo$(OBJ_D)\sha_one.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\sha\sha_one.c
+
+$(OBJ_D)\sha1_one.obj: $(SRC_D)\crypto\sha\sha1_one.c
+       $(CC) /Fo$(OBJ_D)\sha1_one.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\sha\sha1_one.c
+
+$(OBJ_D)\mdc2dgst.obj: $(SRC_D)\crypto\mdc2\mdc2dgst.c
+       $(CC) /Fo$(OBJ_D)\mdc2dgst.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\mdc2\mdc2dgst.c
+
+$(OBJ_D)\mdc2_one.obj: $(SRC_D)\crypto\mdc2\mdc2_one.c
+       $(CC) /Fo$(OBJ_D)\mdc2_one.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\mdc2\mdc2_one.c
+
+$(OBJ_D)\hmac.obj: $(SRC_D)\crypto\hmac\hmac.c
+       $(CC) /Fo$(OBJ_D)\hmac.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\hmac\hmac.c
+
+$(OBJ_D)\rmd_dgst.obj: $(SRC_D)\crypto\ripemd\rmd_dgst.c
+       $(CC) /Fo$(OBJ_D)\rmd_dgst.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\ripemd\rmd_dgst.c
+
+$(OBJ_D)\rmd_one.obj: $(SRC_D)\crypto\ripemd\rmd_one.c
+       $(CC) /Fo$(OBJ_D)\rmd_one.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\ripemd\rmd_one.c
+
+$(OBJ_D)\set_key.obj: $(SRC_D)\crypto\des\set_key.c
+       $(CC) /Fo$(OBJ_D)\set_key.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\des\set_key.c
+
+$(OBJ_D)\ecb_enc.obj: $(SRC_D)\crypto\des\ecb_enc.c
+       $(CC) /Fo$(OBJ_D)\ecb_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\des\ecb_enc.c
+
+$(OBJ_D)\cbc_enc.obj: $(SRC_D)\crypto\des\cbc_enc.c
+       $(CC) /Fo$(OBJ_D)\cbc_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\des\cbc_enc.c
+
+$(OBJ_D)\ecb3_enc.obj: $(SRC_D)\crypto\des\ecb3_enc.c
+       $(CC) /Fo$(OBJ_D)\ecb3_enc.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\des\ecb3_enc.c
+
+$(OBJ_D)\cfb64enc.obj: $(SRC_D)\crypto\des\cfb64enc.c
+       $(CC) /Fo$(OBJ_D)\cfb64enc.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\des\cfb64enc.c
+
+$(OBJ_D)\cfb64ede.obj: $(SRC_D)\crypto\des\cfb64ede.c
+       $(CC) /Fo$(OBJ_D)\cfb64ede.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\des\cfb64ede.c
+
+$(OBJ_D)\cfb_enc.obj: $(SRC_D)\crypto\des\cfb_enc.c
+       $(CC) /Fo$(OBJ_D)\cfb_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\des\cfb_enc.c
+
+$(OBJ_D)\ofb64ede.obj: $(SRC_D)\crypto\des\ofb64ede.c
+       $(CC) /Fo$(OBJ_D)\ofb64ede.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\des\ofb64ede.c
+
+$(OBJ_D)\enc_read.obj: $(SRC_D)\crypto\des\enc_read.c
+       $(CC) /Fo$(OBJ_D)\enc_read.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\des\enc_read.c
+
+$(OBJ_D)\enc_writ.obj: $(SRC_D)\crypto\des\enc_writ.c
+       $(CC) /Fo$(OBJ_D)\enc_writ.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\des\enc_writ.c
+
+$(OBJ_D)\ofb64enc.obj: $(SRC_D)\crypto\des\ofb64enc.c
+       $(CC) /Fo$(OBJ_D)\ofb64enc.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\des\ofb64enc.c
+
+$(OBJ_D)\ofb_enc.obj: $(SRC_D)\crypto\des\ofb_enc.c
+       $(CC) /Fo$(OBJ_D)\ofb_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\des\ofb_enc.c
+
+$(OBJ_D)\str2key.obj: $(SRC_D)\crypto\des\str2key.c
+       $(CC) /Fo$(OBJ_D)\str2key.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\des\str2key.c
+
+$(OBJ_D)\pcbc_enc.obj: $(SRC_D)\crypto\des\pcbc_enc.c
+       $(CC) /Fo$(OBJ_D)\pcbc_enc.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\des\pcbc_enc.c
+
+$(OBJ_D)\qud_cksm.obj: $(SRC_D)\crypto\des\qud_cksm.c
+       $(CC) /Fo$(OBJ_D)\qud_cksm.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\des\qud_cksm.c
+
+$(OBJ_D)\rand_key.obj: $(SRC_D)\crypto\des\rand_key.c
+       $(CC) /Fo$(OBJ_D)\rand_key.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\des\rand_key.c
+
+$(OBJ_D)\des_enc.obj: $(SRC_D)\crypto\des\des_enc.c
+       $(CC) /Fo$(OBJ_D)\des_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\des\des_enc.c
+
+$(OBJ_D)\fcrypt_b.obj: $(SRC_D)\crypto\des\fcrypt_b.c
+       $(CC) /Fo$(OBJ_D)\fcrypt_b.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\des\fcrypt_b.c
+
+$(OBJ_D)\read2pwd.obj: $(SRC_D)\crypto\des\read2pwd.c
+       $(CC) /Fo$(OBJ_D)\read2pwd.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\des\read2pwd.c
+
+$(OBJ_D)\fcrypt.obj: $(SRC_D)\crypto\des\fcrypt.c
+       $(CC) /Fo$(OBJ_D)\fcrypt.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\des\fcrypt.c
+
+$(OBJ_D)\xcbc_enc.obj: $(SRC_D)\crypto\des\xcbc_enc.c
+       $(CC) /Fo$(OBJ_D)\xcbc_enc.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\des\xcbc_enc.c
+
+$(OBJ_D)\read_pwd.obj: $(SRC_D)\crypto\des\read_pwd.c
+       $(CC) /Fo$(OBJ_D)\read_pwd.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\des\read_pwd.c
+
+$(OBJ_D)\rpc_enc.obj: $(SRC_D)\crypto\des\rpc_enc.c
+       $(CC) /Fo$(OBJ_D)\rpc_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\des\rpc_enc.c
+
+$(OBJ_D)\cbc_cksm.obj: $(SRC_D)\crypto\des\cbc_cksm.c
+       $(CC) /Fo$(OBJ_D)\cbc_cksm.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\des\cbc_cksm.c
+
+$(OBJ_D)\supp.obj: $(SRC_D)\crypto\des\supp.c
+       $(CC) /Fo$(OBJ_D)\supp.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\des\supp.c
+
+$(OBJ_D)\ede_cbcm_enc.obj: $(SRC_D)\crypto\des\ede_cbcm_enc.c
+       $(CC) /Fo$(OBJ_D)\ede_cbcm_enc.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\des\ede_cbcm_enc.c
+
+$(OBJ_D)\rc2_ecb.obj: $(SRC_D)\crypto\rc2\rc2_ecb.c
+       $(CC) /Fo$(OBJ_D)\rc2_ecb.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\rc2\rc2_ecb.c
+
+$(OBJ_D)\rc2_skey.obj: $(SRC_D)\crypto\rc2\rc2_skey.c
+       $(CC) /Fo$(OBJ_D)\rc2_skey.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\rc2\rc2_skey.c
+
+$(OBJ_D)\rc2_cbc.obj: $(SRC_D)\crypto\rc2\rc2_cbc.c
+       $(CC) /Fo$(OBJ_D)\rc2_cbc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\rc2\rc2_cbc.c
+
+$(OBJ_D)\rc2cfb64.obj: $(SRC_D)\crypto\rc2\rc2cfb64.c
+       $(CC) /Fo$(OBJ_D)\rc2cfb64.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\rc2\rc2cfb64.c
+
+$(OBJ_D)\rc2ofb64.obj: $(SRC_D)\crypto\rc2\rc2ofb64.c
+       $(CC) /Fo$(OBJ_D)\rc2ofb64.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\rc2\rc2ofb64.c
+
+$(OBJ_D)\rc4_skey.obj: $(SRC_D)\crypto\rc4\rc4_skey.c
+       $(CC) /Fo$(OBJ_D)\rc4_skey.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\rc4\rc4_skey.c
+
+$(OBJ_D)\rc4_enc.obj: $(SRC_D)\crypto\rc4\rc4_enc.c
+       $(CC) /Fo$(OBJ_D)\rc4_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\rc4\rc4_enc.c
+
+$(OBJ_D)\rc5_skey.obj: $(SRC_D)\crypto\rc5\rc5_skey.c
+       $(CC) /Fo$(OBJ_D)\rc5_skey.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\rc5\rc5_skey.c
+
+$(OBJ_D)\rc5_ecb.obj: $(SRC_D)\crypto\rc5\rc5_ecb.c
+       $(CC) /Fo$(OBJ_D)\rc5_ecb.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\rc5\rc5_ecb.c
+
+$(OBJ_D)\rc5_enc.obj: $(SRC_D)\crypto\rc5\rc5_enc.c
+       $(CC) /Fo$(OBJ_D)\rc5_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\rc5\rc5_enc.c
+
+$(OBJ_D)\rc5cfb64.obj: $(SRC_D)\crypto\rc5\rc5cfb64.c
+       $(CC) /Fo$(OBJ_D)\rc5cfb64.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\rc5\rc5cfb64.c
+
+$(OBJ_D)\rc5ofb64.obj: $(SRC_D)\crypto\rc5\rc5ofb64.c
+       $(CC) /Fo$(OBJ_D)\rc5ofb64.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\rc5\rc5ofb64.c
+
+$(OBJ_D)\i_cbc.obj: $(SRC_D)\crypto\idea\i_cbc.c
+       $(CC) /Fo$(OBJ_D)\i_cbc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\idea\i_cbc.c
+
+$(OBJ_D)\i_cfb64.obj: $(SRC_D)\crypto\idea\i_cfb64.c
+       $(CC) /Fo$(OBJ_D)\i_cfb64.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\idea\i_cfb64.c
+
+$(OBJ_D)\i_ofb64.obj: $(SRC_D)\crypto\idea\i_ofb64.c
+       $(CC) /Fo$(OBJ_D)\i_ofb64.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\idea\i_ofb64.c
+
+$(OBJ_D)\i_ecb.obj: $(SRC_D)\crypto\idea\i_ecb.c
+       $(CC) /Fo$(OBJ_D)\i_ecb.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\idea\i_ecb.c
+
+$(OBJ_D)\i_skey.obj: $(SRC_D)\crypto\idea\i_skey.c
+       $(CC) /Fo$(OBJ_D)\i_skey.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\idea\i_skey.c
+
+$(OBJ_D)\bf_skey.obj: $(SRC_D)\crypto\bf\bf_skey.c
+       $(CC) /Fo$(OBJ_D)\bf_skey.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bf\bf_skey.c
+
+$(OBJ_D)\bf_ecb.obj: $(SRC_D)\crypto\bf\bf_ecb.c
+       $(CC) /Fo$(OBJ_D)\bf_ecb.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bf\bf_ecb.c
+
+$(OBJ_D)\bf_enc.obj: $(SRC_D)\crypto\bf\bf_enc.c
+       $(CC) /Fo$(OBJ_D)\bf_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bf\bf_enc.c
+
+$(OBJ_D)\bf_cfb64.obj: $(SRC_D)\crypto\bf\bf_cfb64.c
+       $(CC) /Fo$(OBJ_D)\bf_cfb64.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\bf\bf_cfb64.c
+
+$(OBJ_D)\bf_ofb64.obj: $(SRC_D)\crypto\bf\bf_ofb64.c
+       $(CC) /Fo$(OBJ_D)\bf_ofb64.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\bf\bf_ofb64.c
+
+$(OBJ_D)\c_skey.obj: $(SRC_D)\crypto\cast\c_skey.c
+       $(CC) /Fo$(OBJ_D)\c_skey.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\cast\c_skey.c
+
+$(OBJ_D)\c_ecb.obj: $(SRC_D)\crypto\cast\c_ecb.c
+       $(CC) /Fo$(OBJ_D)\c_ecb.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\cast\c_ecb.c
+
+$(OBJ_D)\c_enc.obj: $(SRC_D)\crypto\cast\c_enc.c
+       $(CC) /Fo$(OBJ_D)\c_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\cast\c_enc.c
+
+$(OBJ_D)\c_cfb64.obj: $(SRC_D)\crypto\cast\c_cfb64.c
+       $(CC) /Fo$(OBJ_D)\c_cfb64.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\cast\c_cfb64.c
+
+$(OBJ_D)\c_ofb64.obj: $(SRC_D)\crypto\cast\c_ofb64.c
+       $(CC) /Fo$(OBJ_D)\c_ofb64.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\cast\c_ofb64.c
+
+$(OBJ_D)\bn_add.obj: $(SRC_D)\crypto\bn\bn_add.c
+       $(CC) /Fo$(OBJ_D)\bn_add.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_add.c
+
+$(OBJ_D)\bn_div.obj: $(SRC_D)\crypto\bn\bn_div.c
+       $(CC) /Fo$(OBJ_D)\bn_div.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_div.c
+
+$(OBJ_D)\bn_exp.obj: $(SRC_D)\crypto\bn\bn_exp.c
+       $(CC) /Fo$(OBJ_D)\bn_exp.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_exp.c
+
+$(OBJ_D)\bn_lib.obj: $(SRC_D)\crypto\bn\bn_lib.c
+       $(CC) /Fo$(OBJ_D)\bn_lib.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_lib.c
+
+$(OBJ_D)\bn_ctx.obj: $(SRC_D)\crypto\bn\bn_ctx.c
+       $(CC) /Fo$(OBJ_D)\bn_ctx.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_ctx.c
+
+$(OBJ_D)\bn_mul.obj: $(SRC_D)\crypto\bn\bn_mul.c
+       $(CC) /Fo$(OBJ_D)\bn_mul.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_mul.c
+
+$(OBJ_D)\bn_print.obj: $(SRC_D)\crypto\bn\bn_print.c
+       $(CC) /Fo$(OBJ_D)\bn_print.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\bn\bn_print.c
+
+$(OBJ_D)\bn_rand.obj: $(SRC_D)\crypto\bn\bn_rand.c
+       $(CC) /Fo$(OBJ_D)\bn_rand.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_rand.c
+
+$(OBJ_D)\bn_shift.obj: $(SRC_D)\crypto\bn\bn_shift.c
+       $(CC) /Fo$(OBJ_D)\bn_shift.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\bn\bn_shift.c
+
+$(OBJ_D)\bn_word.obj: $(SRC_D)\crypto\bn\bn_word.c
+       $(CC) /Fo$(OBJ_D)\bn_word.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_word.c
+
+$(OBJ_D)\bn_blind.obj: $(SRC_D)\crypto\bn\bn_blind.c
+       $(CC) /Fo$(OBJ_D)\bn_blind.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\bn\bn_blind.c
+
+$(OBJ_D)\bn_gcd.obj: $(SRC_D)\crypto\bn\bn_gcd.c
+       $(CC) /Fo$(OBJ_D)\bn_gcd.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_gcd.c
+
+$(OBJ_D)\bn_prime.obj: $(SRC_D)\crypto\bn\bn_prime.c
+       $(CC) /Fo$(OBJ_D)\bn_prime.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\bn\bn_prime.c
+
+$(OBJ_D)\bn_err.obj: $(SRC_D)\crypto\bn\bn_err.c
+       $(CC) /Fo$(OBJ_D)\bn_err.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_err.c
+
+$(OBJ_D)\bn_sqr.obj: $(SRC_D)\crypto\bn\bn_sqr.c
+       $(CC) /Fo$(OBJ_D)\bn_sqr.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_sqr.c
+
+$(OBJ_D)\bn_asm.obj: $(SRC_D)\crypto\bn\bn_asm.c
+       $(CC) /Fo$(OBJ_D)\bn_asm.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_asm.c
+
+$(OBJ_D)\bn_recp.obj: $(SRC_D)\crypto\bn\bn_recp.c
+       $(CC) /Fo$(OBJ_D)\bn_recp.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_recp.c
+
+$(OBJ_D)\bn_mont.obj: $(SRC_D)\crypto\bn\bn_mont.c
+       $(CC) /Fo$(OBJ_D)\bn_mont.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_mont.c
+
+$(OBJ_D)\bn_mpi.obj: $(SRC_D)\crypto\bn\bn_mpi.c
+       $(CC) /Fo$(OBJ_D)\bn_mpi.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_mpi.c
+
+$(OBJ_D)\bn_exp2.obj: $(SRC_D)\crypto\bn\bn_exp2.c
+       $(CC) /Fo$(OBJ_D)\bn_exp2.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bn\bn_exp2.c
+
+$(OBJ_D)\rsa_eay.obj: $(SRC_D)\crypto\rsa\rsa_eay.c
+       $(CC) /Fo$(OBJ_D)\rsa_eay.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\rsa\rsa_eay.c
+
+$(OBJ_D)\rsa_gen.obj: $(SRC_D)\crypto\rsa\rsa_gen.c
+       $(CC) /Fo$(OBJ_D)\rsa_gen.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\rsa\rsa_gen.c
+
+$(OBJ_D)\rsa_lib.obj: $(SRC_D)\crypto\rsa\rsa_lib.c
+       $(CC) /Fo$(OBJ_D)\rsa_lib.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\rsa\rsa_lib.c
+
+$(OBJ_D)\rsa_sign.obj: $(SRC_D)\crypto\rsa\rsa_sign.c
+       $(CC) /Fo$(OBJ_D)\rsa_sign.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\rsa\rsa_sign.c
+
+$(OBJ_D)\rsa_saos.obj: $(SRC_D)\crypto\rsa\rsa_saos.c
+       $(CC) /Fo$(OBJ_D)\rsa_saos.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\rsa\rsa_saos.c
+
+$(OBJ_D)\rsa_err.obj: $(SRC_D)\crypto\rsa\rsa_err.c
+       $(CC) /Fo$(OBJ_D)\rsa_err.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\rsa\rsa_err.c
+
+$(OBJ_D)\rsa_pk1.obj: $(SRC_D)\crypto\rsa\rsa_pk1.c
+       $(CC) /Fo$(OBJ_D)\rsa_pk1.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\rsa\rsa_pk1.c
+
+$(OBJ_D)\rsa_ssl.obj: $(SRC_D)\crypto\rsa\rsa_ssl.c
+       $(CC) /Fo$(OBJ_D)\rsa_ssl.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\rsa\rsa_ssl.c
+
+$(OBJ_D)\rsa_none.obj: $(SRC_D)\crypto\rsa\rsa_none.c
+       $(CC) /Fo$(OBJ_D)\rsa_none.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\rsa\rsa_none.c
+
+$(OBJ_D)\rsa_oaep.obj: $(SRC_D)\crypto\rsa\rsa_oaep.c
+       $(CC) /Fo$(OBJ_D)\rsa_oaep.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\rsa\rsa_oaep.c
+
+$(OBJ_D)\rsa_chk.obj: $(SRC_D)\crypto\rsa\rsa_chk.c
+       $(CC) /Fo$(OBJ_D)\rsa_chk.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\rsa\rsa_chk.c
+
+$(OBJ_D)\rsa_null.obj: $(SRC_D)\crypto\rsa\rsa_null.c
+       $(CC) /Fo$(OBJ_D)\rsa_null.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\rsa\rsa_null.c
+
+$(OBJ_D)\dsa_gen.obj: $(SRC_D)\crypto\dsa\dsa_gen.c
+       $(CC) /Fo$(OBJ_D)\dsa_gen.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\dsa\dsa_gen.c
+
+$(OBJ_D)\dsa_key.obj: $(SRC_D)\crypto\dsa\dsa_key.c
+       $(CC) /Fo$(OBJ_D)\dsa_key.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\dsa\dsa_key.c
+
+$(OBJ_D)\dsa_lib.obj: $(SRC_D)\crypto\dsa\dsa_lib.c
+       $(CC) /Fo$(OBJ_D)\dsa_lib.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\dsa\dsa_lib.c
+
+$(OBJ_D)\dsa_asn1.obj: $(SRC_D)\crypto\dsa\dsa_asn1.c
+       $(CC) /Fo$(OBJ_D)\dsa_asn1.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\dsa\dsa_asn1.c
+
+$(OBJ_D)\dsa_vrf.obj: $(SRC_D)\crypto\dsa\dsa_vrf.c
+       $(CC) /Fo$(OBJ_D)\dsa_vrf.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\dsa\dsa_vrf.c
+
+$(OBJ_D)\dsa_sign.obj: $(SRC_D)\crypto\dsa\dsa_sign.c
+       $(CC) /Fo$(OBJ_D)\dsa_sign.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\dsa\dsa_sign.c
+
+$(OBJ_D)\dsa_err.obj: $(SRC_D)\crypto\dsa\dsa_err.c
+       $(CC) /Fo$(OBJ_D)\dsa_err.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\dsa\dsa_err.c
+
+$(OBJ_D)\dsa_ossl.obj: $(SRC_D)\crypto\dsa\dsa_ossl.c
+       $(CC) /Fo$(OBJ_D)\dsa_ossl.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\dsa\dsa_ossl.c
+
+$(OBJ_D)\dh_gen.obj: $(SRC_D)\crypto\dh\dh_gen.c
+       $(CC) /Fo$(OBJ_D)\dh_gen.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\dh\dh_gen.c
+
+$(OBJ_D)\dh_key.obj: $(SRC_D)\crypto\dh\dh_key.c
+       $(CC) /Fo$(OBJ_D)\dh_key.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\dh\dh_key.c
+
+$(OBJ_D)\dh_lib.obj: $(SRC_D)\crypto\dh\dh_lib.c
+       $(CC) /Fo$(OBJ_D)\dh_lib.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\dh\dh_lib.c
+
+$(OBJ_D)\dh_check.obj: $(SRC_D)\crypto\dh\dh_check.c
+       $(CC) /Fo$(OBJ_D)\dh_check.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\dh\dh_check.c
+
+$(OBJ_D)\dh_err.obj: $(SRC_D)\crypto\dh\dh_err.c
+       $(CC) /Fo$(OBJ_D)\dh_err.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\dh\dh_err.c
+
+$(OBJ_D)\buffer.obj: $(SRC_D)\crypto\buffer\buffer.c
+       $(CC) /Fo$(OBJ_D)\buffer.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\buffer\buffer.c
+
+$(OBJ_D)\buf_err.obj: $(SRC_D)\crypto\buffer\buf_err.c
+       $(CC) /Fo$(OBJ_D)\buf_err.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\buffer\buf_err.c
+
+$(OBJ_D)\bio_lib.obj: $(SRC_D)\crypto\bio\bio_lib.c
+       $(CC) /Fo$(OBJ_D)\bio_lib.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bio\bio_lib.c
+
+$(OBJ_D)\bio_cb.obj: $(SRC_D)\crypto\bio\bio_cb.c
+       $(CC) /Fo$(OBJ_D)\bio_cb.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bio\bio_cb.c
+
+$(OBJ_D)\bio_err.obj: $(SRC_D)\crypto\bio\bio_err.c
+       $(CC) /Fo$(OBJ_D)\bio_err.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bio\bio_err.c
+
+$(OBJ_D)\bss_mem.obj: $(SRC_D)\crypto\bio\bss_mem.c
+       $(CC) /Fo$(OBJ_D)\bss_mem.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bio\bss_mem.c
+
+$(OBJ_D)\bss_null.obj: $(SRC_D)\crypto\bio\bss_null.c
+       $(CC) /Fo$(OBJ_D)\bss_null.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\bio\bss_null.c
+
+$(OBJ_D)\bss_fd.obj: $(SRC_D)\crypto\bio\bss_fd.c
+       $(CC) /Fo$(OBJ_D)\bss_fd.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bio\bss_fd.c
+
+$(OBJ_D)\bss_file.obj: $(SRC_D)\crypto\bio\bss_file.c
+       $(CC) /Fo$(OBJ_D)\bss_file.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\bio\bss_file.c
+
+$(OBJ_D)\bss_sock.obj: $(SRC_D)\crypto\bio\bss_sock.c
+       $(CC) /Fo$(OBJ_D)\bss_sock.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\bio\bss_sock.c
+
+$(OBJ_D)\bss_conn.obj: $(SRC_D)\crypto\bio\bss_conn.c
+       $(CC) /Fo$(OBJ_D)\bss_conn.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\bio\bss_conn.c
+
+$(OBJ_D)\bf_null.obj: $(SRC_D)\crypto\bio\bf_null.c
+       $(CC) /Fo$(OBJ_D)\bf_null.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bio\bf_null.c
+
+$(OBJ_D)\bf_buff.obj: $(SRC_D)\crypto\bio\bf_buff.c
+       $(CC) /Fo$(OBJ_D)\bf_buff.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bio\bf_buff.c
+
+$(OBJ_D)\b_print.obj: $(SRC_D)\crypto\bio\b_print.c
+       $(CC) /Fo$(OBJ_D)\b_print.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bio\b_print.c
+
+$(OBJ_D)\b_dump.obj: $(SRC_D)\crypto\bio\b_dump.c
+       $(CC) /Fo$(OBJ_D)\b_dump.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bio\b_dump.c
+
+$(OBJ_D)\b_sock.obj: $(SRC_D)\crypto\bio\b_sock.c
+       $(CC) /Fo$(OBJ_D)\b_sock.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bio\b_sock.c
+
+$(OBJ_D)\bss_acpt.obj: $(SRC_D)\crypto\bio\bss_acpt.c
+       $(CC) /Fo$(OBJ_D)\bss_acpt.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\bio\bss_acpt.c
+
+$(OBJ_D)\bf_nbio.obj: $(SRC_D)\crypto\bio\bf_nbio.c
+       $(CC) /Fo$(OBJ_D)\bf_nbio.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bio\bf_nbio.c
+
+$(OBJ_D)\bss_log.obj: $(SRC_D)\crypto\bio\bss_log.c
+       $(CC) /Fo$(OBJ_D)\bss_log.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bio\bss_log.c
+
+$(OBJ_D)\bss_bio.obj: $(SRC_D)\crypto\bio\bss_bio.c
+       $(CC) /Fo$(OBJ_D)\bss_bio.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\bio\bss_bio.c
+
+$(OBJ_D)\stack.obj: $(SRC_D)\crypto\stack\stack.c
+       $(CC) /Fo$(OBJ_D)\stack.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\stack\stack.c
+
+$(OBJ_D)\lhash.obj: $(SRC_D)\crypto\lhash\lhash.c
+       $(CC) /Fo$(OBJ_D)\lhash.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\lhash\lhash.c
+
+$(OBJ_D)\lh_stats.obj: $(SRC_D)\crypto\lhash\lh_stats.c
+       $(CC) /Fo$(OBJ_D)\lh_stats.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\lhash\lh_stats.c
+
+$(OBJ_D)\md_rand.obj: $(SRC_D)\crypto\rand\md_rand.c
+       $(CC) /Fo$(OBJ_D)\md_rand.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\rand\md_rand.c
+
+$(OBJ_D)\randfile.obj: $(SRC_D)\crypto\rand\randfile.c
+       $(CC) /Fo$(OBJ_D)\randfile.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\rand\randfile.c
+
+$(OBJ_D)\rand_lib.obj: $(SRC_D)\crypto\rand\rand_lib.c
+       $(CC) /Fo$(OBJ_D)\rand_lib.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\rand\rand_lib.c
+
+$(OBJ_D)\rand_err.obj: $(SRC_D)\crypto\rand\rand_err.c
+       $(CC) /Fo$(OBJ_D)\rand_err.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\rand\rand_err.c
+
+$(OBJ_D)\rand_egd.obj: $(SRC_D)\crypto\rand\rand_egd.c
+       $(CC) /Fo$(OBJ_D)\rand_egd.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\rand\rand_egd.c
+
+$(OBJ_D)\err.obj: $(SRC_D)\crypto\err\err.c
+       $(CC) /Fo$(OBJ_D)\err.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\err\err.c
+
+$(OBJ_D)\err_all.obj: $(SRC_D)\crypto\err\err_all.c
+       $(CC) /Fo$(OBJ_D)\err_all.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\err\err_all.c
+
+$(OBJ_D)\err_prn.obj: $(SRC_D)\crypto\err\err_prn.c
+       $(CC) /Fo$(OBJ_D)\err_prn.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\err\err_prn.c
+
+$(OBJ_D)\o_names.obj: $(SRC_D)\crypto\objects\o_names.c
+       $(CC) /Fo$(OBJ_D)\o_names.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\objects\o_names.c
+
+$(OBJ_D)\obj_dat.obj: $(SRC_D)\crypto\objects\obj_dat.c
+       $(CC) /Fo$(OBJ_D)\obj_dat.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\objects\obj_dat.c
+
+$(OBJ_D)\obj_lib.obj: $(SRC_D)\crypto\objects\obj_lib.c
+       $(CC) /Fo$(OBJ_D)\obj_lib.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\objects\obj_lib.c
+
+$(OBJ_D)\obj_err.obj: $(SRC_D)\crypto\objects\obj_err.c
+       $(CC) /Fo$(OBJ_D)\obj_err.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\objects\obj_err.c
+
+$(OBJ_D)\encode.obj: $(SRC_D)\crypto\evp\encode.c
+       $(CC) /Fo$(OBJ_D)\encode.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\encode.c
+
+$(OBJ_D)\digest.obj: $(SRC_D)\crypto\evp\digest.c
+       $(CC) /Fo$(OBJ_D)\digest.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\digest.c
+
+$(OBJ_D)\evp_enc.obj: $(SRC_D)\crypto\evp\evp_enc.c
+       $(CC) /Fo$(OBJ_D)\evp_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\evp_enc.c
+
+$(OBJ_D)\evp_key.obj: $(SRC_D)\crypto\evp\evp_key.c
+       $(CC) /Fo$(OBJ_D)\evp_key.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\evp_key.c
+
+$(OBJ_D)\e_ecb_d.obj: $(SRC_D)\crypto\evp\e_ecb_d.c
+       $(CC) /Fo$(OBJ_D)\e_ecb_d.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_ecb_d.c
+
+$(OBJ_D)\e_cbc_d.obj: $(SRC_D)\crypto\evp\e_cbc_d.c
+       $(CC) /Fo$(OBJ_D)\e_cbc_d.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_cbc_d.c
+
+$(OBJ_D)\e_cfb_d.obj: $(SRC_D)\crypto\evp\e_cfb_d.c
+       $(CC) /Fo$(OBJ_D)\e_cfb_d.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_cfb_d.c
+
+$(OBJ_D)\e_ofb_d.obj: $(SRC_D)\crypto\evp\e_ofb_d.c
+       $(CC) /Fo$(OBJ_D)\e_ofb_d.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_ofb_d.c
+
+$(OBJ_D)\e_ecb_i.obj: $(SRC_D)\crypto\evp\e_ecb_i.c
+       $(CC) /Fo$(OBJ_D)\e_ecb_i.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_ecb_i.c
+
+$(OBJ_D)\e_cbc_i.obj: $(SRC_D)\crypto\evp\e_cbc_i.c
+       $(CC) /Fo$(OBJ_D)\e_cbc_i.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_cbc_i.c
+
+$(OBJ_D)\e_cfb_i.obj: $(SRC_D)\crypto\evp\e_cfb_i.c
+       $(CC) /Fo$(OBJ_D)\e_cfb_i.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_cfb_i.c
+
+$(OBJ_D)\e_ofb_i.obj: $(SRC_D)\crypto\evp\e_ofb_i.c
+       $(CC) /Fo$(OBJ_D)\e_ofb_i.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_ofb_i.c
+
+$(OBJ_D)\e_ecb_3d.obj: $(SRC_D)\crypto\evp\e_ecb_3d.c
+       $(CC) /Fo$(OBJ_D)\e_ecb_3d.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\evp\e_ecb_3d.c
+
+$(OBJ_D)\e_cbc_3d.obj: $(SRC_D)\crypto\evp\e_cbc_3d.c
+       $(CC) /Fo$(OBJ_D)\e_cbc_3d.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\evp\e_cbc_3d.c
+
+$(OBJ_D)\e_rc4.obj: $(SRC_D)\crypto\evp\e_rc4.c
+       $(CC) /Fo$(OBJ_D)\e_rc4.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_rc4.c
+
+$(OBJ_D)\names.obj: $(SRC_D)\crypto\evp\names.c
+       $(CC) /Fo$(OBJ_D)\names.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\names.c
+
+$(OBJ_D)\e_cfb_3d.obj: $(SRC_D)\crypto\evp\e_cfb_3d.c
+       $(CC) /Fo$(OBJ_D)\e_cfb_3d.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\evp\e_cfb_3d.c
+
+$(OBJ_D)\e_ofb_3d.obj: $(SRC_D)\crypto\evp\e_ofb_3d.c
+       $(CC) /Fo$(OBJ_D)\e_ofb_3d.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\evp\e_ofb_3d.c
+
+$(OBJ_D)\e_xcbc_d.obj: $(SRC_D)\crypto\evp\e_xcbc_d.c
+       $(CC) /Fo$(OBJ_D)\e_xcbc_d.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\evp\e_xcbc_d.c
+
+$(OBJ_D)\e_ecb_r2.obj: $(SRC_D)\crypto\evp\e_ecb_r2.c
+       $(CC) /Fo$(OBJ_D)\e_ecb_r2.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\evp\e_ecb_r2.c
+
+$(OBJ_D)\e_cbc_r2.obj: $(SRC_D)\crypto\evp\e_cbc_r2.c
+       $(CC) /Fo$(OBJ_D)\e_cbc_r2.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\evp\e_cbc_r2.c
+
+$(OBJ_D)\e_cfb_r2.obj: $(SRC_D)\crypto\evp\e_cfb_r2.c
+       $(CC) /Fo$(OBJ_D)\e_cfb_r2.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\evp\e_cfb_r2.c
+
+$(OBJ_D)\e_ofb_r2.obj: $(SRC_D)\crypto\evp\e_ofb_r2.c
+       $(CC) /Fo$(OBJ_D)\e_ofb_r2.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\evp\e_ofb_r2.c
+
+$(OBJ_D)\e_ecb_bf.obj: $(SRC_D)\crypto\evp\e_ecb_bf.c
+       $(CC) /Fo$(OBJ_D)\e_ecb_bf.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\evp\e_ecb_bf.c
+
+$(OBJ_D)\e_cbc_bf.obj: $(SRC_D)\crypto\evp\e_cbc_bf.c
+       $(CC) /Fo$(OBJ_D)\e_cbc_bf.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\evp\e_cbc_bf.c
+
+$(OBJ_D)\e_cfb_bf.obj: $(SRC_D)\crypto\evp\e_cfb_bf.c
+       $(CC) /Fo$(OBJ_D)\e_cfb_bf.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\evp\e_cfb_bf.c
+
+$(OBJ_D)\e_ofb_bf.obj: $(SRC_D)\crypto\evp\e_ofb_bf.c
+       $(CC) /Fo$(OBJ_D)\e_ofb_bf.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\evp\e_ofb_bf.c
+
+$(OBJ_D)\e_ecb_c.obj: $(SRC_D)\crypto\evp\e_ecb_c.c
+       $(CC) /Fo$(OBJ_D)\e_ecb_c.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_ecb_c.c
+
+$(OBJ_D)\e_cbc_c.obj: $(SRC_D)\crypto\evp\e_cbc_c.c
+       $(CC) /Fo$(OBJ_D)\e_cbc_c.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_cbc_c.c
+
+$(OBJ_D)\e_cfb_c.obj: $(SRC_D)\crypto\evp\e_cfb_c.c
+       $(CC) /Fo$(OBJ_D)\e_cfb_c.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_cfb_c.c
+
+$(OBJ_D)\e_ofb_c.obj: $(SRC_D)\crypto\evp\e_ofb_c.c
+       $(CC) /Fo$(OBJ_D)\e_ofb_c.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_ofb_c.c
+
+$(OBJ_D)\e_ecb_r5.obj: $(SRC_D)\crypto\evp\e_ecb_r5.c
+       $(CC) /Fo$(OBJ_D)\e_ecb_r5.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\evp\e_ecb_r5.c
+
+$(OBJ_D)\e_cbc_r5.obj: $(SRC_D)\crypto\evp\e_cbc_r5.c
+       $(CC) /Fo$(OBJ_D)\e_cbc_r5.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\evp\e_cbc_r5.c
+
+$(OBJ_D)\e_cfb_r5.obj: $(SRC_D)\crypto\evp\e_cfb_r5.c
+       $(CC) /Fo$(OBJ_D)\e_cfb_r5.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\evp\e_cfb_r5.c
+
+$(OBJ_D)\e_ofb_r5.obj: $(SRC_D)\crypto\evp\e_ofb_r5.c
+       $(CC) /Fo$(OBJ_D)\e_ofb_r5.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\evp\e_ofb_r5.c
+
+$(OBJ_D)\m_null.obj: $(SRC_D)\crypto\evp\m_null.c
+       $(CC) /Fo$(OBJ_D)\m_null.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\m_null.c
+
+$(OBJ_D)\m_md2.obj: $(SRC_D)\crypto\evp\m_md2.c
+       $(CC) /Fo$(OBJ_D)\m_md2.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\m_md2.c
+
+$(OBJ_D)\m_md5.obj: $(SRC_D)\crypto\evp\m_md5.c
+       $(CC) /Fo$(OBJ_D)\m_md5.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\m_md5.c
+
+$(OBJ_D)\m_sha.obj: $(SRC_D)\crypto\evp\m_sha.c
+       $(CC) /Fo$(OBJ_D)\m_sha.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\m_sha.c
+
+$(OBJ_D)\m_sha1.obj: $(SRC_D)\crypto\evp\m_sha1.c
+       $(CC) /Fo$(OBJ_D)\m_sha1.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\m_sha1.c
+
+$(OBJ_D)\m_dss.obj: $(SRC_D)\crypto\evp\m_dss.c
+       $(CC) /Fo$(OBJ_D)\m_dss.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\m_dss.c
+
+$(OBJ_D)\m_dss1.obj: $(SRC_D)\crypto\evp\m_dss1.c
+       $(CC) /Fo$(OBJ_D)\m_dss1.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\m_dss1.c
+
+$(OBJ_D)\m_mdc2.obj: $(SRC_D)\crypto\evp\m_mdc2.c
+       $(CC) /Fo$(OBJ_D)\m_mdc2.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\m_mdc2.c
+
+$(OBJ_D)\m_ripemd.obj: $(SRC_D)\crypto\evp\m_ripemd.c
+       $(CC) /Fo$(OBJ_D)\m_ripemd.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\evp\m_ripemd.c
+
+$(OBJ_D)\p_open.obj: $(SRC_D)\crypto\evp\p_open.c
+       $(CC) /Fo$(OBJ_D)\p_open.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\p_open.c
+
+$(OBJ_D)\p_seal.obj: $(SRC_D)\crypto\evp\p_seal.c
+       $(CC) /Fo$(OBJ_D)\p_seal.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\p_seal.c
+
+$(OBJ_D)\p_sign.obj: $(SRC_D)\crypto\evp\p_sign.c
+       $(CC) /Fo$(OBJ_D)\p_sign.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\p_sign.c
+
+$(OBJ_D)\p_verify.obj: $(SRC_D)\crypto\evp\p_verify.c
+       $(CC) /Fo$(OBJ_D)\p_verify.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\evp\p_verify.c
+
+$(OBJ_D)\p_lib.obj: $(SRC_D)\crypto\evp\p_lib.c
+       $(CC) /Fo$(OBJ_D)\p_lib.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\p_lib.c
+
+$(OBJ_D)\p_enc.obj: $(SRC_D)\crypto\evp\p_enc.c
+       $(CC) /Fo$(OBJ_D)\p_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\p_enc.c
+
+$(OBJ_D)\p_dec.obj: $(SRC_D)\crypto\evp\p_dec.c
+       $(CC) /Fo$(OBJ_D)\p_dec.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\p_dec.c
+
+$(OBJ_D)\bio_md.obj: $(SRC_D)\crypto\evp\bio_md.c
+       $(CC) /Fo$(OBJ_D)\bio_md.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\bio_md.c
+
+$(OBJ_D)\bio_b64.obj: $(SRC_D)\crypto\evp\bio_b64.c
+       $(CC) /Fo$(OBJ_D)\bio_b64.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\bio_b64.c
+
+$(OBJ_D)\bio_enc.obj: $(SRC_D)\crypto\evp\bio_enc.c
+       $(CC) /Fo$(OBJ_D)\bio_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\bio_enc.c
+
+$(OBJ_D)\evp_err.obj: $(SRC_D)\crypto\evp\evp_err.c
+       $(CC) /Fo$(OBJ_D)\evp_err.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\evp_err.c
+
+$(OBJ_D)\e_null.obj: $(SRC_D)\crypto\evp\e_null.c
+       $(CC) /Fo$(OBJ_D)\e_null.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\e_null.c
+
+$(OBJ_D)\c_all.obj: $(SRC_D)\crypto\evp\c_all.c
+       $(CC) /Fo$(OBJ_D)\c_all.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\c_all.c
+
+$(OBJ_D)\c_allc.obj: $(SRC_D)\crypto\evp\c_allc.c
+       $(CC) /Fo$(OBJ_D)\c_allc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\c_allc.c
+
+$(OBJ_D)\c_alld.obj: $(SRC_D)\crypto\evp\c_alld.c
+       $(CC) /Fo$(OBJ_D)\c_alld.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\c_alld.c
+
+$(OBJ_D)\evp_lib.obj: $(SRC_D)\crypto\evp\evp_lib.c
+       $(CC) /Fo$(OBJ_D)\evp_lib.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\evp_lib.c
+
+$(OBJ_D)\bio_ok.obj: $(SRC_D)\crypto\evp\bio_ok.c
+       $(CC) /Fo$(OBJ_D)\bio_ok.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\bio_ok.c
+
+$(OBJ_D)\evp_pkey.obj: $(SRC_D)\crypto\evp\evp_pkey.c
+       $(CC) /Fo$(OBJ_D)\evp_pkey.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\evp\evp_pkey.c
+
+$(OBJ_D)\evp_pbe.obj: $(SRC_D)\crypto\evp\evp_pbe.c
+       $(CC) /Fo$(OBJ_D)\evp_pbe.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\evp_pbe.c
+
+$(OBJ_D)\p5_crpt.obj: $(SRC_D)\crypto\evp\p5_crpt.c
+       $(CC) /Fo$(OBJ_D)\p5_crpt.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\evp\p5_crpt.c
+
+$(OBJ_D)\p5_crpt2.obj: $(SRC_D)\crypto\evp\p5_crpt2.c
+       $(CC) /Fo$(OBJ_D)\p5_crpt2.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\evp\p5_crpt2.c
+
+$(OBJ_D)\a_object.obj: $(SRC_D)\crypto\asn1\a_object.c
+       $(CC) /Fo$(OBJ_D)\a_object.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\a_object.c
+
+$(OBJ_D)\a_bitstr.obj: $(SRC_D)\crypto\asn1\a_bitstr.c
+       $(CC) /Fo$(OBJ_D)\a_bitstr.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\a_bitstr.c
+
+$(OBJ_D)\a_utctm.obj: $(SRC_D)\crypto\asn1\a_utctm.c
+       $(CC) /Fo$(OBJ_D)\a_utctm.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\a_utctm.c
+
+$(OBJ_D)\a_gentm.obj: $(SRC_D)\crypto\asn1\a_gentm.c
+       $(CC) /Fo$(OBJ_D)\a_gentm.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\a_gentm.c
+
+$(OBJ_D)\a_time.obj: $(SRC_D)\crypto\asn1\a_time.c
+       $(CC) /Fo$(OBJ_D)\a_time.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_time.c
+
+$(OBJ_D)\a_int.obj: $(SRC_D)\crypto\asn1\a_int.c
+       $(CC) /Fo$(OBJ_D)\a_int.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_int.c
+
+$(OBJ_D)\a_octet.obj: $(SRC_D)\crypto\asn1\a_octet.c
+       $(CC) /Fo$(OBJ_D)\a_octet.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\a_octet.c
+
+$(OBJ_D)\a_null.obj: $(SRC_D)\crypto\asn1\a_null.c
+       $(CC) /Fo$(OBJ_D)\a_null.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_null.c
+
+$(OBJ_D)\a_print.obj: $(SRC_D)\crypto\asn1\a_print.c
+       $(CC) /Fo$(OBJ_D)\a_print.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\a_print.c
+
+$(OBJ_D)\a_type.obj: $(SRC_D)\crypto\asn1\a_type.c
+       $(CC) /Fo$(OBJ_D)\a_type.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_type.c
+
+$(OBJ_D)\a_set.obj: $(SRC_D)\crypto\asn1\a_set.c
+       $(CC) /Fo$(OBJ_D)\a_set.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_set.c
+
+$(OBJ_D)\a_dup.obj: $(SRC_D)\crypto\asn1\a_dup.c
+       $(CC) /Fo$(OBJ_D)\a_dup.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_dup.c
+
+$(OBJ_D)\a_d2i_fp.obj: $(SRC_D)\crypto\asn1\a_d2i_fp.c
+       $(CC) /Fo$(OBJ_D)\a_d2i_fp.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\a_d2i_fp.c
+
+$(OBJ_D)\a_i2d_fp.obj: $(SRC_D)\crypto\asn1\a_i2d_fp.c
+       $(CC) /Fo$(OBJ_D)\a_i2d_fp.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\a_i2d_fp.c
+
+$(OBJ_D)\a_bmp.obj: $(SRC_D)\crypto\asn1\a_bmp.c
+       $(CC) /Fo$(OBJ_D)\a_bmp.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_bmp.c
+
+$(OBJ_D)\a_enum.obj: $(SRC_D)\crypto\asn1\a_enum.c
+       $(CC) /Fo$(OBJ_D)\a_enum.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_enum.c
+
+$(OBJ_D)\a_vis.obj: $(SRC_D)\crypto\asn1\a_vis.c
+       $(CC) /Fo$(OBJ_D)\a_vis.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_vis.c
+
+$(OBJ_D)\a_utf8.obj: $(SRC_D)\crypto\asn1\a_utf8.c
+       $(CC) /Fo$(OBJ_D)\a_utf8.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_utf8.c
+
+$(OBJ_D)\a_sign.obj: $(SRC_D)\crypto\asn1\a_sign.c
+       $(CC) /Fo$(OBJ_D)\a_sign.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_sign.c
+
+$(OBJ_D)\a_digest.obj: $(SRC_D)\crypto\asn1\a_digest.c
+       $(CC) /Fo$(OBJ_D)\a_digest.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\a_digest.c
+
+$(OBJ_D)\a_verify.obj: $(SRC_D)\crypto\asn1\a_verify.c
+       $(CC) /Fo$(OBJ_D)\a_verify.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\a_verify.c
+
+$(OBJ_D)\a_mbstr.obj: $(SRC_D)\crypto\asn1\a_mbstr.c
+       $(CC) /Fo$(OBJ_D)\a_mbstr.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\a_mbstr.c
+
+$(OBJ_D)\x_algor.obj: $(SRC_D)\crypto\asn1\x_algor.c
+       $(CC) /Fo$(OBJ_D)\x_algor.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\x_algor.c
+
+$(OBJ_D)\x_val.obj: $(SRC_D)\crypto\asn1\x_val.c
+       $(CC) /Fo$(OBJ_D)\x_val.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_val.c
+
+$(OBJ_D)\x_pubkey.obj: $(SRC_D)\crypto\asn1\x_pubkey.c
+       $(CC) /Fo$(OBJ_D)\x_pubkey.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\x_pubkey.c
+
+$(OBJ_D)\x_sig.obj: $(SRC_D)\crypto\asn1\x_sig.c
+       $(CC) /Fo$(OBJ_D)\x_sig.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_sig.c
+
+$(OBJ_D)\x_req.obj: $(SRC_D)\crypto\asn1\x_req.c
+       $(CC) /Fo$(OBJ_D)\x_req.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_req.c
+
+$(OBJ_D)\x_attrib.obj: $(SRC_D)\crypto\asn1\x_attrib.c
+       $(CC) /Fo$(OBJ_D)\x_attrib.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\x_attrib.c
+
+$(OBJ_D)\x_name.obj: $(SRC_D)\crypto\asn1\x_name.c
+       $(CC) /Fo$(OBJ_D)\x_name.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_name.c
+
+$(OBJ_D)\x_cinf.obj: $(SRC_D)\crypto\asn1\x_cinf.c
+       $(CC) /Fo$(OBJ_D)\x_cinf.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_cinf.c
+
+$(OBJ_D)\x_x509.obj: $(SRC_D)\crypto\asn1\x_x509.c
+       $(CC) /Fo$(OBJ_D)\x_x509.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_x509.c
+
+$(OBJ_D)\x_x509a.obj: $(SRC_D)\crypto\asn1\x_x509a.c
+       $(CC) /Fo$(OBJ_D)\x_x509a.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\x_x509a.c
+
+$(OBJ_D)\x_crl.obj: $(SRC_D)\crypto\asn1\x_crl.c
+       $(CC) /Fo$(OBJ_D)\x_crl.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_crl.c
+
+$(OBJ_D)\x_info.obj: $(SRC_D)\crypto\asn1\x_info.c
+       $(CC) /Fo$(OBJ_D)\x_info.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_info.c
+
+$(OBJ_D)\x_spki.obj: $(SRC_D)\crypto\asn1\x_spki.c
+       $(CC) /Fo$(OBJ_D)\x_spki.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_spki.c
+
+$(OBJ_D)\nsseq.obj: $(SRC_D)\crypto\asn1\nsseq.c
+       $(CC) /Fo$(OBJ_D)\nsseq.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\nsseq.c
+
+$(OBJ_D)\d2i_r_pr.obj: $(SRC_D)\crypto\asn1\d2i_r_pr.c
+       $(CC) /Fo$(OBJ_D)\d2i_r_pr.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\d2i_r_pr.c
+
+$(OBJ_D)\i2d_r_pr.obj: $(SRC_D)\crypto\asn1\i2d_r_pr.c
+       $(CC) /Fo$(OBJ_D)\i2d_r_pr.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\i2d_r_pr.c
+
+$(OBJ_D)\d2i_r_pu.obj: $(SRC_D)\crypto\asn1\d2i_r_pu.c
+       $(CC) /Fo$(OBJ_D)\d2i_r_pu.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\d2i_r_pu.c
+
+$(OBJ_D)\i2d_r_pu.obj: $(SRC_D)\crypto\asn1\i2d_r_pu.c
+       $(CC) /Fo$(OBJ_D)\i2d_r_pu.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\i2d_r_pu.c
+
+$(OBJ_D)\d2i_s_pr.obj: $(SRC_D)\crypto\asn1\d2i_s_pr.c
+       $(CC) /Fo$(OBJ_D)\d2i_s_pr.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\d2i_s_pr.c
+
+$(OBJ_D)\i2d_s_pr.obj: $(SRC_D)\crypto\asn1\i2d_s_pr.c
+       $(CC) /Fo$(OBJ_D)\i2d_s_pr.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\i2d_s_pr.c
+
+$(OBJ_D)\d2i_s_pu.obj: $(SRC_D)\crypto\asn1\d2i_s_pu.c
+       $(CC) /Fo$(OBJ_D)\d2i_s_pu.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\d2i_s_pu.c
+
+$(OBJ_D)\i2d_s_pu.obj: $(SRC_D)\crypto\asn1\i2d_s_pu.c
+       $(CC) /Fo$(OBJ_D)\i2d_s_pu.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\i2d_s_pu.c
+
+$(OBJ_D)\d2i_pu.obj: $(SRC_D)\crypto\asn1\d2i_pu.c
+       $(CC) /Fo$(OBJ_D)\d2i_pu.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\d2i_pu.c
+
+$(OBJ_D)\d2i_pr.obj: $(SRC_D)\crypto\asn1\d2i_pr.c
+       $(CC) /Fo$(OBJ_D)\d2i_pr.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\d2i_pr.c
+
+$(OBJ_D)\i2d_pu.obj: $(SRC_D)\crypto\asn1\i2d_pu.c
+       $(CC) /Fo$(OBJ_D)\i2d_pu.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\i2d_pu.c
+
+$(OBJ_D)\i2d_pr.obj: $(SRC_D)\crypto\asn1\i2d_pr.c
+       $(CC) /Fo$(OBJ_D)\i2d_pr.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\i2d_pr.c
+
+$(OBJ_D)\t_req.obj: $(SRC_D)\crypto\asn1\t_req.c
+       $(CC) /Fo$(OBJ_D)\t_req.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\t_req.c
+
+$(OBJ_D)\t_x509.obj: $(SRC_D)\crypto\asn1\t_x509.c
+       $(CC) /Fo$(OBJ_D)\t_x509.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\t_x509.c
+
+$(OBJ_D)\t_x509a.obj: $(SRC_D)\crypto\asn1\t_x509a.c
+       $(CC) /Fo$(OBJ_D)\t_x509a.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\t_x509a.c
+
+$(OBJ_D)\t_crl.obj: $(SRC_D)\crypto\asn1\t_crl.c
+       $(CC) /Fo$(OBJ_D)\t_crl.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\t_crl.c
+
+$(OBJ_D)\t_pkey.obj: $(SRC_D)\crypto\asn1\t_pkey.c
+       $(CC) /Fo$(OBJ_D)\t_pkey.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\t_pkey.c
+
+$(OBJ_D)\t_spki.obj: $(SRC_D)\crypto\asn1\t_spki.c
+       $(CC) /Fo$(OBJ_D)\t_spki.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\t_spki.c
+
+$(OBJ_D)\t_bitst.obj: $(SRC_D)\crypto\asn1\t_bitst.c
+       $(CC) /Fo$(OBJ_D)\t_bitst.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\t_bitst.c
+
+$(OBJ_D)\p7_i_s.obj: $(SRC_D)\crypto\asn1\p7_i_s.c
+       $(CC) /Fo$(OBJ_D)\p7_i_s.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\p7_i_s.c
+
+$(OBJ_D)\p7_signi.obj: $(SRC_D)\crypto\asn1\p7_signi.c
+       $(CC) /Fo$(OBJ_D)\p7_signi.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\p7_signi.c
+
+$(OBJ_D)\p7_signd.obj: $(SRC_D)\crypto\asn1\p7_signd.c
+       $(CC) /Fo$(OBJ_D)\p7_signd.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\p7_signd.c
+
+$(OBJ_D)\p7_recip.obj: $(SRC_D)\crypto\asn1\p7_recip.c
+       $(CC) /Fo$(OBJ_D)\p7_recip.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\p7_recip.c
+
+$(OBJ_D)\p7_enc_c.obj: $(SRC_D)\crypto\asn1\p7_enc_c.c
+       $(CC) /Fo$(OBJ_D)\p7_enc_c.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\p7_enc_c.c
+
+$(OBJ_D)\p7_evp.obj: $(SRC_D)\crypto\asn1\p7_evp.c
+       $(CC) /Fo$(OBJ_D)\p7_evp.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\p7_evp.c
+
+$(OBJ_D)\p7_dgst.obj: $(SRC_D)\crypto\asn1\p7_dgst.c
+       $(CC) /Fo$(OBJ_D)\p7_dgst.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\p7_dgst.c
+
+$(OBJ_D)\p7_s_e.obj: $(SRC_D)\crypto\asn1\p7_s_e.c
+       $(CC) /Fo$(OBJ_D)\p7_s_e.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\p7_s_e.c
+
+$(OBJ_D)\p7_enc.obj: $(SRC_D)\crypto\asn1\p7_enc.c
+       $(CC) /Fo$(OBJ_D)\p7_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\p7_enc.c
+
+$(OBJ_D)\p7_lib.obj: $(SRC_D)\crypto\asn1\p7_lib.c
+       $(CC) /Fo$(OBJ_D)\p7_lib.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\p7_lib.c
+
+$(OBJ_D)\f_int.obj: $(SRC_D)\crypto\asn1\f_int.c
+       $(CC) /Fo$(OBJ_D)\f_int.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\f_int.c
+
+$(OBJ_D)\f_string.obj: $(SRC_D)\crypto\asn1\f_string.c
+       $(CC) /Fo$(OBJ_D)\f_string.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\f_string.c
+
+$(OBJ_D)\i2d_dhp.obj: $(SRC_D)\crypto\asn1\i2d_dhp.c
+       $(CC) /Fo$(OBJ_D)\i2d_dhp.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\i2d_dhp.c
+
+$(OBJ_D)\i2d_dsap.obj: $(SRC_D)\crypto\asn1\i2d_dsap.c
+       $(CC) /Fo$(OBJ_D)\i2d_dsap.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\i2d_dsap.c
+
+$(OBJ_D)\d2i_dhp.obj: $(SRC_D)\crypto\asn1\d2i_dhp.c
+       $(CC) /Fo$(OBJ_D)\d2i_dhp.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\d2i_dhp.c
+
+$(OBJ_D)\d2i_dsap.obj: $(SRC_D)\crypto\asn1\d2i_dsap.c
+       $(CC) /Fo$(OBJ_D)\d2i_dsap.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\d2i_dsap.c
+
+$(OBJ_D)\n_pkey.obj: $(SRC_D)\crypto\asn1\n_pkey.c
+       $(CC) /Fo$(OBJ_D)\n_pkey.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\n_pkey.c
+
+$(OBJ_D)\f_enum.obj: $(SRC_D)\crypto\asn1\f_enum.c
+       $(CC) /Fo$(OBJ_D)\f_enum.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\f_enum.c
+
+$(OBJ_D)\a_hdr.obj: $(SRC_D)\crypto\asn1\a_hdr.c
+       $(CC) /Fo$(OBJ_D)\a_hdr.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_hdr.c
+
+$(OBJ_D)\x_pkey.obj: $(SRC_D)\crypto\asn1\x_pkey.c
+       $(CC) /Fo$(OBJ_D)\x_pkey.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\x_pkey.c
+
+$(OBJ_D)\a_bool.obj: $(SRC_D)\crypto\asn1\a_bool.c
+       $(CC) /Fo$(OBJ_D)\a_bool.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_bool.c
+
+$(OBJ_D)\x_exten.obj: $(SRC_D)\crypto\asn1\x_exten.c
+       $(CC) /Fo$(OBJ_D)\x_exten.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\x_exten.c
+
+$(OBJ_D)\asn1_par.obj: $(SRC_D)\crypto\asn1\asn1_par.c
+       $(CC) /Fo$(OBJ_D)\asn1_par.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\asn1_par.c
+
+$(OBJ_D)\asn1_lib.obj: $(SRC_D)\crypto\asn1\asn1_lib.c
+       $(CC) /Fo$(OBJ_D)\asn1_lib.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\asn1_lib.c
+
+$(OBJ_D)\asn1_err.obj: $(SRC_D)\crypto\asn1\asn1_err.c
+       $(CC) /Fo$(OBJ_D)\asn1_err.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\asn1_err.c
+
+$(OBJ_D)\a_meth.obj: $(SRC_D)\crypto\asn1\a_meth.c
+       $(CC) /Fo$(OBJ_D)\a_meth.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\a_meth.c
+
+$(OBJ_D)\a_bytes.obj: $(SRC_D)\crypto\asn1\a_bytes.c
+       $(CC) /Fo$(OBJ_D)\a_bytes.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\a_bytes.c
+
+$(OBJ_D)\a_strnid.obj: $(SRC_D)\crypto\asn1\a_strnid.c
+       $(CC) /Fo$(OBJ_D)\a_strnid.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\a_strnid.c
+
+$(OBJ_D)\evp_asn1.obj: $(SRC_D)\crypto\asn1\evp_asn1.c
+       $(CC) /Fo$(OBJ_D)\evp_asn1.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\evp_asn1.c
+
+$(OBJ_D)\asn_pack.obj: $(SRC_D)\crypto\asn1\asn_pack.c
+       $(CC) /Fo$(OBJ_D)\asn_pack.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\asn_pack.c
+
+$(OBJ_D)\p5_pbe.obj: $(SRC_D)\crypto\asn1\p5_pbe.c
+       $(CC) /Fo$(OBJ_D)\p5_pbe.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\asn1\p5_pbe.c
+
+$(OBJ_D)\p5_pbev2.obj: $(SRC_D)\crypto\asn1\p5_pbev2.c
+       $(CC) /Fo$(OBJ_D)\p5_pbev2.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\p5_pbev2.c
+
+$(OBJ_D)\p8_pkey.obj: $(SRC_D)\crypto\asn1\p8_pkey.c
+       $(CC) /Fo$(OBJ_D)\p8_pkey.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\asn1\p8_pkey.c
+
+$(OBJ_D)\pem_sign.obj: $(SRC_D)\crypto\pem\pem_sign.c
+       $(CC) /Fo$(OBJ_D)\pem_sign.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\pem\pem_sign.c
+
+$(OBJ_D)\pem_seal.obj: $(SRC_D)\crypto\pem\pem_seal.c
+       $(CC) /Fo$(OBJ_D)\pem_seal.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\pem\pem_seal.c
+
+$(OBJ_D)\pem_info.obj: $(SRC_D)\crypto\pem\pem_info.c
+       $(CC) /Fo$(OBJ_D)\pem_info.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\pem\pem_info.c
+
+$(OBJ_D)\pem_lib.obj: $(SRC_D)\crypto\pem\pem_lib.c
+       $(CC) /Fo$(OBJ_D)\pem_lib.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\pem\pem_lib.c
+
+$(OBJ_D)\pem_all.obj: $(SRC_D)\crypto\pem\pem_all.c
+       $(CC) /Fo$(OBJ_D)\pem_all.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\pem\pem_all.c
+
+$(OBJ_D)\pem_err.obj: $(SRC_D)\crypto\pem\pem_err.c
+       $(CC) /Fo$(OBJ_D)\pem_err.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\pem\pem_err.c
+
+$(OBJ_D)\x509_def.obj: $(SRC_D)\crypto\x509\x509_def.c
+       $(CC) /Fo$(OBJ_D)\x509_def.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509\x509_def.c
+
+$(OBJ_D)\x509_d2.obj: $(SRC_D)\crypto\x509\x509_d2.c
+       $(CC) /Fo$(OBJ_D)\x509_d2.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509\x509_d2.c
+
+$(OBJ_D)\x509_r2x.obj: $(SRC_D)\crypto\x509\x509_r2x.c
+       $(CC) /Fo$(OBJ_D)\x509_r2x.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509\x509_r2x.c
+
+$(OBJ_D)\x509_cmp.obj: $(SRC_D)\crypto\x509\x509_cmp.c
+       $(CC) /Fo$(OBJ_D)\x509_cmp.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509\x509_cmp.c
+
+$(OBJ_D)\x509_obj.obj: $(SRC_D)\crypto\x509\x509_obj.c
+       $(CC) /Fo$(OBJ_D)\x509_obj.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509\x509_obj.c
+
+$(OBJ_D)\x509_req.obj: $(SRC_D)\crypto\x509\x509_req.c
+       $(CC) /Fo$(OBJ_D)\x509_req.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509\x509_req.c
+
+$(OBJ_D)\x509spki.obj: $(SRC_D)\crypto\x509\x509spki.c
+       $(CC) /Fo$(OBJ_D)\x509spki.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509\x509spki.c
+
+$(OBJ_D)\x509_vfy.obj: $(SRC_D)\crypto\x509\x509_vfy.c
+       $(CC) /Fo$(OBJ_D)\x509_vfy.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509\x509_vfy.c
+
+$(OBJ_D)\x509_set.obj: $(SRC_D)\crypto\x509\x509_set.c
+       $(CC) /Fo$(OBJ_D)\x509_set.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509\x509_set.c
+
+$(OBJ_D)\x509rset.obj: $(SRC_D)\crypto\x509\x509rset.c
+       $(CC) /Fo$(OBJ_D)\x509rset.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509\x509rset.c
+
+$(OBJ_D)\x509_err.obj: $(SRC_D)\crypto\x509\x509_err.c
+       $(CC) /Fo$(OBJ_D)\x509_err.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509\x509_err.c
+
+$(OBJ_D)\x509name.obj: $(SRC_D)\crypto\x509\x509name.c
+       $(CC) /Fo$(OBJ_D)\x509name.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509\x509name.c
+
+$(OBJ_D)\x509_v3.obj: $(SRC_D)\crypto\x509\x509_v3.c
+       $(CC) /Fo$(OBJ_D)\x509_v3.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509\x509_v3.c
+
+$(OBJ_D)\x509_ext.obj: $(SRC_D)\crypto\x509\x509_ext.c
+       $(CC) /Fo$(OBJ_D)\x509_ext.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509\x509_ext.c
+
+$(OBJ_D)\x509_att.obj: $(SRC_D)\crypto\x509\x509_att.c
+       $(CC) /Fo$(OBJ_D)\x509_att.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509\x509_att.c
+
+$(OBJ_D)\x509type.obj: $(SRC_D)\crypto\x509\x509type.c
+       $(CC) /Fo$(OBJ_D)\x509type.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509\x509type.c
+
+$(OBJ_D)\x509_lu.obj: $(SRC_D)\crypto\x509\x509_lu.c
+       $(CC) /Fo$(OBJ_D)\x509_lu.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509\x509_lu.c
+
+$(OBJ_D)\x_all.obj: $(SRC_D)\crypto\x509\x_all.c
+       $(CC) /Fo$(OBJ_D)\x_all.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\x509\x_all.c
+
+$(OBJ_D)\x509_txt.obj: $(SRC_D)\crypto\x509\x509_txt.c
+       $(CC) /Fo$(OBJ_D)\x509_txt.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509\x509_txt.c
+
+$(OBJ_D)\x509_trs.obj: $(SRC_D)\crypto\x509\x509_trs.c
+       $(CC) /Fo$(OBJ_D)\x509_trs.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509\x509_trs.c
+
+$(OBJ_D)\by_file.obj: $(SRC_D)\crypto\x509\by_file.c
+       $(CC) /Fo$(OBJ_D)\by_file.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509\by_file.c
+
+$(OBJ_D)\by_dir.obj: $(SRC_D)\crypto\x509\by_dir.c
+       $(CC) /Fo$(OBJ_D)\by_dir.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\x509\by_dir.c
+
+$(OBJ_D)\v3_bcons.obj: $(SRC_D)\crypto\x509v3\v3_bcons.c
+       $(CC) /Fo$(OBJ_D)\v3_bcons.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509v3\v3_bcons.c
+
+$(OBJ_D)\v3_bitst.obj: $(SRC_D)\crypto\x509v3\v3_bitst.c
+       $(CC) /Fo$(OBJ_D)\v3_bitst.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509v3\v3_bitst.c
+
+$(OBJ_D)\v3_conf.obj: $(SRC_D)\crypto\x509v3\v3_conf.c
+       $(CC) /Fo$(OBJ_D)\v3_conf.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509v3\v3_conf.c
+
+$(OBJ_D)\v3_extku.obj: $(SRC_D)\crypto\x509v3\v3_extku.c
+       $(CC) /Fo$(OBJ_D)\v3_extku.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509v3\v3_extku.c
+
+$(OBJ_D)\v3_ia5.obj: $(SRC_D)\crypto\x509v3\v3_ia5.c
+       $(CC) /Fo$(OBJ_D)\v3_ia5.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509v3\v3_ia5.c
+
+$(OBJ_D)\v3_lib.obj: $(SRC_D)\crypto\x509v3\v3_lib.c
+       $(CC) /Fo$(OBJ_D)\v3_lib.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509v3\v3_lib.c
+
+$(OBJ_D)\v3_prn.obj: $(SRC_D)\crypto\x509v3\v3_prn.c
+       $(CC) /Fo$(OBJ_D)\v3_prn.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509v3\v3_prn.c
+
+$(OBJ_D)\v3_utl.obj: $(SRC_D)\crypto\x509v3\v3_utl.c
+       $(CC) /Fo$(OBJ_D)\v3_utl.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509v3\v3_utl.c
+
+$(OBJ_D)\v3err.obj: $(SRC_D)\crypto\x509v3\v3err.c
+       $(CC) /Fo$(OBJ_D)\v3err.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\x509v3\v3err.c
+
+$(OBJ_D)\v3_genn.obj: $(SRC_D)\crypto\x509v3\v3_genn.c
+       $(CC) /Fo$(OBJ_D)\v3_genn.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509v3\v3_genn.c
+
+$(OBJ_D)\v3_alt.obj: $(SRC_D)\crypto\x509v3\v3_alt.c
+       $(CC) /Fo$(OBJ_D)\v3_alt.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509v3\v3_alt.c
+
+$(OBJ_D)\v3_skey.obj: $(SRC_D)\crypto\x509v3\v3_skey.c
+       $(CC) /Fo$(OBJ_D)\v3_skey.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509v3\v3_skey.c
+
+$(OBJ_D)\v3_akey.obj: $(SRC_D)\crypto\x509v3\v3_akey.c
+       $(CC) /Fo$(OBJ_D)\v3_akey.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509v3\v3_akey.c
+
+$(OBJ_D)\v3_pku.obj: $(SRC_D)\crypto\x509v3\v3_pku.c
+       $(CC) /Fo$(OBJ_D)\v3_pku.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509v3\v3_pku.c
+
+$(OBJ_D)\v3_int.obj: $(SRC_D)\crypto\x509v3\v3_int.c
+       $(CC) /Fo$(OBJ_D)\v3_int.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509v3\v3_int.c
+
+$(OBJ_D)\v3_enum.obj: $(SRC_D)\crypto\x509v3\v3_enum.c
+       $(CC) /Fo$(OBJ_D)\v3_enum.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509v3\v3_enum.c
+
+$(OBJ_D)\v3_sxnet.obj: $(SRC_D)\crypto\x509v3\v3_sxnet.c
+       $(CC) /Fo$(OBJ_D)\v3_sxnet.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509v3\v3_sxnet.c
+
+$(OBJ_D)\v3_cpols.obj: $(SRC_D)\crypto\x509v3\v3_cpols.c
+       $(CC) /Fo$(OBJ_D)\v3_cpols.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509v3\v3_cpols.c
+
+$(OBJ_D)\v3_crld.obj: $(SRC_D)\crypto\x509v3\v3_crld.c
+       $(CC) /Fo$(OBJ_D)\v3_crld.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509v3\v3_crld.c
+
+$(OBJ_D)\v3_purp.obj: $(SRC_D)\crypto\x509v3\v3_purp.c
+       $(CC) /Fo$(OBJ_D)\v3_purp.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509v3\v3_purp.c
+
+$(OBJ_D)\v3_info.obj: $(SRC_D)\crypto\x509v3\v3_info.c
+       $(CC) /Fo$(OBJ_D)\v3_info.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\x509v3\v3_info.c
+
+$(OBJ_D)\conf.obj: $(SRC_D)\crypto\conf\conf.c
+       $(CC) /Fo$(OBJ_D)\conf.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\conf\conf.c
+
+$(OBJ_D)\conf_err.obj: $(SRC_D)\crypto\conf\conf_err.c
+       $(CC) /Fo$(OBJ_D)\conf_err.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\conf\conf_err.c
+
+$(OBJ_D)\txt_db.obj: $(SRC_D)\crypto\txt_db\txt_db.c
+       $(CC) /Fo$(OBJ_D)\txt_db.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\txt_db\txt_db.c
+
+$(OBJ_D)\pk7_lib.obj: $(SRC_D)\crypto\pkcs7\pk7_lib.c
+       $(CC) /Fo$(OBJ_D)\pk7_lib.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs7\pk7_lib.c
+
+$(OBJ_D)\pkcs7err.obj: $(SRC_D)\crypto\pkcs7\pkcs7err.c
+       $(CC) /Fo$(OBJ_D)\pkcs7err.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs7\pkcs7err.c
+
+$(OBJ_D)\pk7_doit.obj: $(SRC_D)\crypto\pkcs7\pk7_doit.c
+       $(CC) /Fo$(OBJ_D)\pk7_doit.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs7\pk7_doit.c
+
+$(OBJ_D)\pk7_smime.obj: $(SRC_D)\crypto\pkcs7\pk7_smime.c
+       $(CC) /Fo$(OBJ_D)\pk7_smime.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs7\pk7_smime.c
+
+$(OBJ_D)\pk7_attr.obj: $(SRC_D)\crypto\pkcs7\pk7_attr.c
+       $(CC) /Fo$(OBJ_D)\pk7_attr.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs7\pk7_attr.c
+
+$(OBJ_D)\pk7_mime.obj: $(SRC_D)\crypto\pkcs7\pk7_mime.c
+       $(CC) /Fo$(OBJ_D)\pk7_mime.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs7\pk7_mime.c
+
+$(OBJ_D)\p12_add.obj: $(SRC_D)\crypto\pkcs12\p12_add.c
+       $(CC) /Fo$(OBJ_D)\p12_add.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs12\p12_add.c
+
+$(OBJ_D)\p12_attr.obj: $(SRC_D)\crypto\pkcs12\p12_attr.c
+       $(CC) /Fo$(OBJ_D)\p12_attr.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs12\p12_attr.c
+
+$(OBJ_D)\p12_bags.obj: $(SRC_D)\crypto\pkcs12\p12_bags.c
+       $(CC) /Fo$(OBJ_D)\p12_bags.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs12\p12_bags.c
+
+$(OBJ_D)\p12_crpt.obj: $(SRC_D)\crypto\pkcs12\p12_crpt.c
+       $(CC) /Fo$(OBJ_D)\p12_crpt.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs12\p12_crpt.c
+
+$(OBJ_D)\p12_crt.obj: $(SRC_D)\crypto\pkcs12\p12_crt.c
+       $(CC) /Fo$(OBJ_D)\p12_crt.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs12\p12_crt.c
+
+$(OBJ_D)\p12_decr.obj: $(SRC_D)\crypto\pkcs12\p12_decr.c
+       $(CC) /Fo$(OBJ_D)\p12_decr.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs12\p12_decr.c
+
+$(OBJ_D)\p12_init.obj: $(SRC_D)\crypto\pkcs12\p12_init.c
+       $(CC) /Fo$(OBJ_D)\p12_init.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs12\p12_init.c
+
+$(OBJ_D)\p12_key.obj: $(SRC_D)\crypto\pkcs12\p12_key.c
+       $(CC) /Fo$(OBJ_D)\p12_key.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs12\p12_key.c
+
+$(OBJ_D)\p12_kiss.obj: $(SRC_D)\crypto\pkcs12\p12_kiss.c
+       $(CC) /Fo$(OBJ_D)\p12_kiss.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs12\p12_kiss.c
+
+$(OBJ_D)\p12_lib.obj: $(SRC_D)\crypto\pkcs12\p12_lib.c
+       $(CC) /Fo$(OBJ_D)\p12_lib.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs12\p12_lib.c
+
+$(OBJ_D)\p12_mac.obj: $(SRC_D)\crypto\pkcs12\p12_mac.c
+       $(CC) /Fo$(OBJ_D)\p12_mac.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs12\p12_mac.c
+
+$(OBJ_D)\p12_mutl.obj: $(SRC_D)\crypto\pkcs12\p12_mutl.c
+       $(CC) /Fo$(OBJ_D)\p12_mutl.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs12\p12_mutl.c
+
+$(OBJ_D)\p12_sbag.obj: $(SRC_D)\crypto\pkcs12\p12_sbag.c
+       $(CC) /Fo$(OBJ_D)\p12_sbag.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs12\p12_sbag.c
+
+$(OBJ_D)\p12_utl.obj: $(SRC_D)\crypto\pkcs12\p12_utl.c
+       $(CC) /Fo$(OBJ_D)\p12_utl.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs12\p12_utl.c
+
+$(OBJ_D)\p12_npas.obj: $(SRC_D)\crypto\pkcs12\p12_npas.c
+       $(CC) /Fo$(OBJ_D)\p12_npas.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs12\p12_npas.c
+
+$(OBJ_D)\pk12err.obj: $(SRC_D)\crypto\pkcs12\pk12err.c
+       $(CC) /Fo$(OBJ_D)\pk12err.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\pkcs12\pk12err.c
+
+$(OBJ_D)\comp_lib.obj: $(SRC_D)\crypto\comp\comp_lib.c
+       $(CC) /Fo$(OBJ_D)\comp_lib.obj  $(SHLIB_CFLAGS) -c 
+$(SRC_D)\crypto\comp\comp_lib.c
+
+$(OBJ_D)\c_rle.obj: $(SRC_D)\crypto\comp\c_rle.c
+       $(CC) /Fo$(OBJ_D)\c_rle.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\comp\c_rle.c
+
+$(OBJ_D)\c_zlib.obj: $(SRC_D)\crypto\comp\c_zlib.c
+       $(CC) /Fo$(OBJ_D)\c_zlib.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\crypto\comp\c_zlib.c
+
+$(OBJ_D)\s2_meth.obj: $(SRC_D)\ssl\s2_meth.c
+       $(CC) /Fo$(OBJ_D)\s2_meth.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s2_meth.c
+
+$(OBJ_D)\s2_srvr.obj: $(SRC_D)\ssl\s2_srvr.c
+       $(CC) /Fo$(OBJ_D)\s2_srvr.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s2_srvr.c
+
+$(OBJ_D)\s2_clnt.obj: $(SRC_D)\ssl\s2_clnt.c
+       $(CC) /Fo$(OBJ_D)\s2_clnt.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s2_clnt.c
+
+$(OBJ_D)\s2_lib.obj: $(SRC_D)\ssl\s2_lib.c
+       $(CC) /Fo$(OBJ_D)\s2_lib.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s2_lib.c
+
+$(OBJ_D)\s2_enc.obj: $(SRC_D)\ssl\s2_enc.c
+       $(CC) /Fo$(OBJ_D)\s2_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s2_enc.c
+
+$(OBJ_D)\s2_pkt.obj: $(SRC_D)\ssl\s2_pkt.c
+       $(CC) /Fo$(OBJ_D)\s2_pkt.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s2_pkt.c
+
+$(OBJ_D)\s3_meth.obj: $(SRC_D)\ssl\s3_meth.c
+       $(CC) /Fo$(OBJ_D)\s3_meth.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s3_meth.c
+
+$(OBJ_D)\s3_srvr.obj: $(SRC_D)\ssl\s3_srvr.c
+       $(CC) /Fo$(OBJ_D)\s3_srvr.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s3_srvr.c
+
+$(OBJ_D)\s3_clnt.obj: $(SRC_D)\ssl\s3_clnt.c
+       $(CC) /Fo$(OBJ_D)\s3_clnt.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s3_clnt.c
+
+$(OBJ_D)\s3_lib.obj: $(SRC_D)\ssl\s3_lib.c
+       $(CC) /Fo$(OBJ_D)\s3_lib.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s3_lib.c
+
+$(OBJ_D)\s3_enc.obj: $(SRC_D)\ssl\s3_enc.c
+       $(CC) /Fo$(OBJ_D)\s3_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s3_enc.c
+
+$(OBJ_D)\s3_pkt.obj: $(SRC_D)\ssl\s3_pkt.c
+       $(CC) /Fo$(OBJ_D)\s3_pkt.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s3_pkt.c
+
+$(OBJ_D)\s3_both.obj: $(SRC_D)\ssl\s3_both.c
+       $(CC) /Fo$(OBJ_D)\s3_both.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s3_both.c
+
+$(OBJ_D)\s23_meth.obj: $(SRC_D)\ssl\s23_meth.c
+       $(CC) /Fo$(OBJ_D)\s23_meth.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s23_meth.c
+
+$(OBJ_D)\s23_srvr.obj: $(SRC_D)\ssl\s23_srvr.c
+       $(CC) /Fo$(OBJ_D)\s23_srvr.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s23_srvr.c
+
+$(OBJ_D)\s23_clnt.obj: $(SRC_D)\ssl\s23_clnt.c
+       $(CC) /Fo$(OBJ_D)\s23_clnt.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s23_clnt.c
+
+$(OBJ_D)\s23_lib.obj: $(SRC_D)\ssl\s23_lib.c
+       $(CC) /Fo$(OBJ_D)\s23_lib.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s23_lib.c
+
+$(OBJ_D)\s23_pkt.obj: $(SRC_D)\ssl\s23_pkt.c
+       $(CC) /Fo$(OBJ_D)\s23_pkt.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\s23_pkt.c
+
+$(OBJ_D)\t1_meth.obj: $(SRC_D)\ssl\t1_meth.c
+       $(CC) /Fo$(OBJ_D)\t1_meth.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\t1_meth.c
+
+$(OBJ_D)\t1_srvr.obj: $(SRC_D)\ssl\t1_srvr.c
+       $(CC) /Fo$(OBJ_D)\t1_srvr.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\t1_srvr.c
+
+$(OBJ_D)\t1_clnt.obj: $(SRC_D)\ssl\t1_clnt.c
+       $(CC) /Fo$(OBJ_D)\t1_clnt.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\t1_clnt.c
+
+$(OBJ_D)\t1_lib.obj: $(SRC_D)\ssl\t1_lib.c
+       $(CC) /Fo$(OBJ_D)\t1_lib.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\t1_lib.c
+
+$(OBJ_D)\t1_enc.obj: $(SRC_D)\ssl\t1_enc.c
+       $(CC) /Fo$(OBJ_D)\t1_enc.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\t1_enc.c
+
+$(OBJ_D)\ssl_lib.obj: $(SRC_D)\ssl\ssl_lib.c
+       $(CC) /Fo$(OBJ_D)\ssl_lib.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\ssl_lib.c
+
+$(OBJ_D)\ssl_err2.obj: $(SRC_D)\ssl\ssl_err2.c
+       $(CC) /Fo$(OBJ_D)\ssl_err2.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\ssl_err2.c
+
+$(OBJ_D)\ssl_cert.obj: $(SRC_D)\ssl\ssl_cert.c
+       $(CC) /Fo$(OBJ_D)\ssl_cert.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\ssl_cert.c
+
+$(OBJ_D)\ssl_sess.obj: $(SRC_D)\ssl\ssl_sess.c
+       $(CC) /Fo$(OBJ_D)\ssl_sess.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\ssl_sess.c
+
+$(OBJ_D)\ssl_ciph.obj: $(SRC_D)\ssl\ssl_ciph.c
+       $(CC) /Fo$(OBJ_D)\ssl_ciph.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\ssl_ciph.c
+
+$(OBJ_D)\ssl_stat.obj: $(SRC_D)\ssl\ssl_stat.c
+       $(CC) /Fo$(OBJ_D)\ssl_stat.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\ssl_stat.c
+
+$(OBJ_D)\ssl_rsa.obj: $(SRC_D)\ssl\ssl_rsa.c
+       $(CC) /Fo$(OBJ_D)\ssl_rsa.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\ssl_rsa.c
+
+$(OBJ_D)\ssl_asn1.obj: $(SRC_D)\ssl\ssl_asn1.c
+       $(CC) /Fo$(OBJ_D)\ssl_asn1.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\ssl_asn1.c
+
+$(OBJ_D)\ssl_txt.obj: $(SRC_D)\ssl\ssl_txt.c
+       $(CC) /Fo$(OBJ_D)\ssl_txt.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\ssl_txt.c
+
+$(OBJ_D)\ssl_algs.obj: $(SRC_D)\ssl\ssl_algs.c
+       $(CC) /Fo$(OBJ_D)\ssl_algs.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\ssl_algs.c
+
+$(OBJ_D)\bio_ssl.obj: $(SRC_D)\ssl\bio_ssl.c
+       $(CC) /Fo$(OBJ_D)\bio_ssl.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\bio_ssl.c
+
+$(OBJ_D)\ssl_err.obj: $(SRC_D)\ssl\ssl_err.c
+       $(CC) /Fo$(OBJ_D)\ssl_err.obj  $(SHLIB_CFLAGS) -c $(SRC_D)\ssl\ssl_err.c
+
+$(OBJ_D)\rsaref.obj: $(SRC_D)\rsaref\rsaref.c
+       $(CC) /Fo$(OBJ_D)\rsaref.obj  $(LIB_CFLAGS) -c $(SRC_D)\rsaref\rsaref.c
+
+$(OBJ_D)\rsar_err.obj: $(SRC_D)\rsaref\rsar_err.c
+       $(CC) /Fo$(OBJ_D)\rsar_err.obj  $(LIB_CFLAGS) -c $(SRC_D)\rsaref\rsar_err.c
+
+$(TEST_D)\md2test.exe: $(OBJ_D)\md2test.obj $(LIBS_DEP)
+  $(LINK) $(LFLAGS) @<<
+  $(APP_EX_OBJ) $(OBJ_D)\md2test.obj
+  $(TEST_D)\md2test.exe
+
+  $(L_LIBS) $(EX_LIBS)
+
+<<
+
+$(TEST_D)\md5test.exe: $(OBJ_D)\md5test.obj $(LIBS_DEP)
+  $(LINK) $(LFLAGS) @<<
+  $(APP_EX_OBJ) $(OBJ_D)\md5test.obj
+  $(TEST_D)\md5test.exe
+
+  $(L_LIBS) $(EX_LIBS)
+
+<<
+
+$(TEST_D)\shatest.exe: $(OBJ_D)\shatest.obj $(LIBS_DEP)
+  $(LINK) $(LFLAGS) @<<
+  $(APP_EX_OBJ) $(OBJ_D)\shatest.obj
+  $(TEST_D)\shatest.exe
+
+  $(L_LIBS) $(EX_LIBS)
+
+<<
+
+$(TEST_D)\sha1test.exe: $(OBJ_D)\sha1test.obj $(LIBS_DEP)
+  $(LINK) $(LFLAGS) @<<
+  $(APP_EX_OBJ) $(OBJ_D)\sha1test.obj
+  $(TEST_D)\sha1test.exe
+
+  $(L_LIBS) $(EX_LIBS)
+
+<<
+
+$(TEST_D)\mdc2test.exe: $(OBJ_D)\mdc2test.obj $(LIBS_DEP)
+  $(LINK) $(LFLAGS) @<<
+  $(APP_EX_OBJ) $(OBJ_D)\mdc2test.obj
+  $(TEST_D)\mdc2test.exe
+
+  $(L_LIBS) $(EX_LIBS)
+
+<<
+
+$(TEST_D)\hmactest.exe: $(OBJ_D)\hmactest.obj $(LIBS_DEP)
+  $(LINK) $(LFLAGS) @<<
+  $(APP_EX_OBJ) $(OBJ_D)\hmactest.obj
+  $(TEST_D)\hmactest.exe
+
+  $(L_LIBS) $(EX_LIBS)
+
+<<
+
+$(TEST_D)\rmdtest.exe: $(OBJ_D)\rmdtest.obj $(LIBS_DEP)
+  $(LINK) $(LFLAGS) @<<
+  $(APP_EX_OBJ) $(OBJ_D)\rmdtest.obj
+  $(TEST_D)\rmdtest.exe
+
+  $(L_LIBS) $(EX_LIBS)
+
+<<
+
+$(TEST_D)\destest.exe: $(OBJ_D)\destest.obj $(LIBS_DEP)
+  $(LINK) $(LFLAGS) @<<
+  $(APP_EX_OBJ) $(OBJ_D)\destest.obj
+  $(TEST_D)\destest.exe
+
+  $(L_LIBS) $(EX_LIBS)
+
+<<
+
+$(TEST_D)\rc2test.exe: $(OBJ_D)\rc2test.obj $(LIBS_DEP)
+  $(LINK) $(LFLAGS) @<<
+  $(APP_EX_OBJ) $(OBJ_D)\rc2test.obj
+  $(TEST_D)\rc2test.exe
+
+  $(L_LIBS) $(EX_LIBS)
+
+<<
+
+$(TEST_D)\rc4test.exe: $(OBJ_D)\rc4test.obj $(LIBS_DEP)
+  $(LINK) $(LFLAGS) @<<
+  $(APP_EX_OBJ) $(OBJ_D)\rc4test.obj
+  $(TEST_D)\rc4test.exe
+
+  $(L_LIBS) $(EX_LIBS)
+
+<<
+
+$(TEST_D)\rc5test.exe: $(OBJ_D)\rc5test.obj $(LIBS_DEP)
+  $(LINK) $(LFLAGS) @<<
+  $(APP_EX_OBJ) $(OBJ_D)\rc5test.obj
+  $(TEST_D)\rc5test.exe
+
+  $(L_LIBS) $(EX_LIBS)
+
+<<
+
+$(TEST_D)\ideatest.exe: $(OBJ_D)\ideatest.obj $(LIBS_DEP)
+  $(LINK) $(LFLAGS) @<<
+  $(APP_EX_OBJ) $(OBJ_D)\ideatest.obj
+  $(TEST_D)\ideatest.exe
+
+  $(L_LIBS) $(EX_LIBS)
+
+<<
+
+$(TEST_D)\bftest.exe: $(OBJ_D)\bftest.obj $(LIBS_DEP)
+  $(LINK) $(LFLAGS) @<<
+  $(APP_EX_OBJ) $(OBJ_D)\bftest.obj
+  $(TEST_D)\bftest.exe
+
+  $(L_LIBS) $(EX_LIBS)
+
+<<
+
+$(TEST_D)\casttest.exe: $(OBJ_D)\casttest.obj $(LIBS_DEP)
+  $(LINK) $(LFLAGS) @<<
+  $(APP_EX_OBJ) $(OBJ_D)\casttest.obj
+  $(TEST_D)\casttest.exe
+
+  $(L_LIBS) $(EX_LIBS)
+
+<<
+
+$(TEST_D)\bntest.exe: $(OBJ_D)\bntest.obj $(LIBS_DEP)
+  $(LINK) $(LFLAGS) @<<
+  $(APP_EX_OBJ) $(OBJ_D)\bntest.obj
+  $(TEST_D)\bntest.exe
+
+  $(L_LIBS) $(EX_LIBS)
+
+<<
+
+$(TEST_D)\exptest.exe: $(OBJ_D)\exptest.obj $(LIBS_DEP)
+  $(LINK) $(LFLAGS) @<<
+  $(APP_EX_OBJ) $(OBJ_D)\exptest.obj
+  $(TEST_D)\exptest.exe
+
+  $(L_LIBS) $(EX_LIBS)
+
+<<
+
+$(TEST_D)\rsa_test.exe: $(OBJ_D)\rsa_test.obj $(LIBS_DEP)
+  $(LINK) $(LFLAGS) @<<
+  $(APP_EX_OBJ) $(OBJ_D)\rsa_test.obj
+  $(TEST_D)\rsa_test.exe
+
+  $(L_LIBS) $(EX_LIBS)
+
+<<
+
+$(TEST_D)\dsatest.exe: $(OBJ_D)\dsatest.obj $(LIBS_DEP)
+  $(LINK) $(LFLAGS) @<<
+  $(APP_EX_OBJ) $(OBJ_D)\dsatest.obj
+  $(TEST_D)\dsatest.exe
+
+  $(L_LIBS) $(EX_LIBS)
+
+<<
+
+$(TEST_D)\dhtest.exe: $(OBJ_D)\dhtest.obj $(LIBS_DEP)
+  $(LINK) $(LFLAGS) @<<
+  $(APP_EX_OBJ) $(OBJ_D)\dhtest.obj
+  $(TEST_D)\dhtest.exe
+
+  $(L_LIBS) $(EX_LIBS)
+
+<<
+
+$(TEST_D)\randtest.exe: $(OBJ_D)\randtest.obj $(LIBS_DEP)
+  $(LINK) $(LFLAGS) @<<
+  $(APP_EX_OBJ) $(OBJ_D)\randtest.obj
+  $(TEST_D)\randtest.exe
+
+  $(L_LIBS) $(EX_LIBS)
+
+<<
+
+$(TEST_D)\ssltest.exe: $(OBJ_D)\ssltest.obj $(LIBS_DEP)
+  $(LINK) $(LFLAGS) @<<
+  $(APP_EX_OBJ) $(OBJ_D)\ssltest.obj
+  $(TEST_D)\ssltest.exe
+
+  $(L_LIBS) $(EX_LIBS)
+
+<<
+
+$(O_SSL): $(SSLOBJ)
+       $(LINK) $(MLFLAGS) @<<
+  $(SHLIB_EX_OBJ) +
+  $(OBJ_D)\bio_ssl.obj +
+  $(OBJ_D)\s23_clnt.obj +
+  $(OBJ_D)\s23_lib.obj +
+  $(OBJ_D)\s23_meth.obj +
+  $(OBJ_D)\s23_pkt.obj +
+  $(OBJ_D)\s23_srvr.obj +
+  $(OBJ_D)\s2_clnt.obj +
+  $(OBJ_D)\s2_enc.obj +
+  $(OBJ_D)\s2_lib.obj +
+  $(OBJ_D)\s2_meth.obj +
+  $(OBJ_D)\s2_pkt.obj +
+  $(OBJ_D)\s2_srvr.obj +
+  $(OBJ_D)\s3_both.obj +
+  $(OBJ_D)\s3_clnt.obj +
+  $(OBJ_D)\s3_enc.obj +
+  $(OBJ_D)\s3_lib.obj +
+  $(OBJ_D)\s3_meth.obj +
+  $(OBJ_D)\s3_pkt.obj +
+  $(OBJ_D)\s3_srvr.obj +
+  $(OBJ_D)\ssl_algs.obj +
+  $(OBJ_D)\ssl_asn1.obj +
+  $(OBJ_D)\ssl_cert.obj +
+  $(OBJ_D)\ssl_ciph.obj +
+  $(OBJ_D)\ssl_err.obj +
+  $(OBJ_D)\ssl_err2.obj +
+  $(OBJ_D)\ssl_lib.obj +
+  $(OBJ_D)\ssl_rsa.obj +
+  $(OBJ_D)\ssl_sess.obj +
+  $(OBJ_D)\ssl_stat.obj +
+  $(OBJ_D)\ssl_txt.obj +
+  $(OBJ_D)\t1_clnt.obj +
+  $(OBJ_D)\t1_enc.obj +
+  $(OBJ_D)\t1_lib.obj +
+  $(OBJ_D)\t1_meth.obj +
+  $(OBJ_D)\t1_srvr.obj +
+
+  $(O_SSL)
+
+  $(L_CRYPTO) winsock oldnames ldllcew libw
+ms\ssleay16.def;
+<<
+       implib /noignorecase /nowep $(L_SSL) $(O_SSL)
+
+$(O_RSAGLUE): $(RSAGLUEOBJ)
+       del $(O_RSAGLUE)
+       $(MKLIB) @<<
+$(O_RSAGLUE)
+y
++$(OBJ_D)\rsar_err.obj &
++$(OBJ_D)\rsaref.obj &
+
+
+<<
+
+$(O_CRYPTO): $(CRYPTOOBJ)
+       $(LINK) $(MLFLAGS) @<<
+  $(SHLIB_EX_OBJ) +
+  $(BN_ASM_OBJ) +
+  $(OBJ_D)\a_bitstr.obj +
+  $(OBJ_D)\a_bmp.obj +
+  $(OBJ_D)\a_bool.obj +
+  $(OBJ_D)\a_bytes.obj +
+  $(OBJ_D)\a_d2i_fp.obj +
+  $(OBJ_D)\a_digest.obj +
+  $(OBJ_D)\a_dup.obj +
+  $(OBJ_D)\a_enum.obj +
+  $(OBJ_D)\a_gentm.obj +
+  $(OBJ_D)\a_hdr.obj +
+  $(OBJ_D)\a_i2d_fp.obj +
+  $(OBJ_D)\a_int.obj +
+  $(OBJ_D)\a_mbstr.obj +
+  $(OBJ_D)\a_meth.obj +
+  $(OBJ_D)\a_null.obj +
+  $(OBJ_D)\a_object.obj +
+  $(OBJ_D)\a_octet.obj +
+  $(OBJ_D)\a_print.obj +
+  $(OBJ_D)\a_set.obj +
+  $(OBJ_D)\a_sign.obj +
+  $(OBJ_D)\a_strnid.obj +
+  $(OBJ_D)\a_time.obj +
+  $(OBJ_D)\a_type.obj +
+  $(OBJ_D)\a_utctm.obj +
+  $(OBJ_D)\a_utf8.obj +
+  $(OBJ_D)\a_verify.obj +
+  $(OBJ_D)\a_vis.obj +
+  $(OBJ_D)\asn1_err.obj +
+  $(OBJ_D)\asn1_lib.obj +
+  $(OBJ_D)\asn1_par.obj +
+  $(OBJ_D)\asn_pack.obj +
+  $(OBJ_D)\b_dump.obj +
+  $(OBJ_D)\b_print.obj +
+  $(OBJ_D)\b_sock.obj +
+  $(OBJ_D)\bf_buff.obj +
+  $(OBJ_D)\bf_cfb64.obj +
+  $(OBJ_D)\bf_ecb.obj +
+  $(OBJ_D)\bf_enc.obj +
+  $(OBJ_D)\bf_nbio.obj +
+  $(OBJ_D)\bf_null.obj +
+  $(OBJ_D)\bf_ofb64.obj +
+  $(OBJ_D)\bf_skey.obj +
+  $(OBJ_D)\bio_b64.obj +
+  $(OBJ_D)\bio_cb.obj +
+  $(OBJ_D)\bio_enc.obj +
+  $(OBJ_D)\bio_err.obj +
+  $(OBJ_D)\bio_lib.obj +
+  $(OBJ_D)\bio_md.obj +
+  $(OBJ_D)\bio_ok.obj +
+  $(OBJ_D)\bn_add.obj +
+  $(OBJ_D)\bn_blind.obj +
+  $(OBJ_D)\bn_ctx.obj +
+  $(OBJ_D)\bn_div.obj +
+  $(OBJ_D)\bn_err.obj +
+  $(OBJ_D)\bn_exp.obj +
+  $(OBJ_D)\bn_exp2.obj +
+  $(OBJ_D)\bn_gcd.obj +
+  $(OBJ_D)\bn_lib.obj +
+  $(OBJ_D)\bn_mont.obj +
+  $(OBJ_D)\bn_mpi.obj +
+  $(OBJ_D)\bn_mul.obj +
+  $(OBJ_D)\bn_prime.obj +
+  $(OBJ_D)\bn_print.obj +
+  $(OBJ_D)\bn_rand.obj +
+  $(OBJ_D)\bn_recp.obj +
+  $(OBJ_D)\bn_shift.obj +
+  $(OBJ_D)\bn_sqr.obj +
+  $(OBJ_D)\bn_word.obj +
+  $(OBJ_D)\bss_acpt.obj +
+  $(OBJ_D)\bss_bio.obj +
+  $(OBJ_D)\bss_conn.obj +
+  $(OBJ_D)\bss_fd.obj +
+  $(OBJ_D)\bss_file.obj +
+  $(OBJ_D)\bss_log.obj +
+  $(OBJ_D)\bss_mem.obj +
+  $(OBJ_D)\bss_null.obj +
+  $(OBJ_D)\bss_sock.obj +
+  $(OBJ_D)\buf_err.obj +
+  $(OBJ_D)\buffer.obj +
+  $(OBJ_D)\by_dir.obj +
+  $(OBJ_D)\by_file.obj +
+  $(OBJ_D)\c_all.obj +
+  $(OBJ_D)\c_allc.obj +
+  $(OBJ_D)\c_alld.obj +
+  $(OBJ_D)\c_cfb64.obj +
+  $(OBJ_D)\c_ecb.obj +
+  $(OBJ_D)\c_enc.obj +
+  $(OBJ_D)\c_ofb64.obj +
+  $(OBJ_D)\c_rle.obj +
+  $(OBJ_D)\c_skey.obj +
+  $(OBJ_D)\c_zlib.obj +
+  $(OBJ_D)\cbc_cksm.obj +
+  $(OBJ_D)\cbc_enc.obj +
+  $(OBJ_D)\cfb64ede.obj +
+  $(OBJ_D)\cfb64enc.obj +
+  $(OBJ_D)\cfb_enc.obj +
+  $(OBJ_D)\comp_lib.obj +
+  $(OBJ_D)\conf.obj +
+  $(OBJ_D)\conf_err.obj +
+  $(OBJ_D)\cpt_err.obj +
+  $(OBJ_D)\cryptlib.obj +
+  $(OBJ_D)\cversion.obj +
+  $(OBJ_D)\d2i_dhp.obj +
+  $(OBJ_D)\d2i_dsap.obj +
+  $(OBJ_D)\d2i_pr.obj +
+  $(OBJ_D)\d2i_pu.obj +
+  $(OBJ_D)\d2i_r_pr.obj +
+  $(OBJ_D)\d2i_r_pu.obj +
+  $(OBJ_D)\d2i_s_pr.obj +
+  $(OBJ_D)\d2i_s_pu.obj +
+  $(OBJ_D)\des_enc.obj +
+  $(OBJ_D)\dh_check.obj +
+  $(OBJ_D)\dh_err.obj +
+  $(OBJ_D)\dh_gen.obj +
+  $(OBJ_D)\dh_key.obj +
+  $(OBJ_D)\dh_lib.obj +
+  $(OBJ_D)\digest.obj +
+  $(OBJ_D)\dsa_asn1.obj +
+  $(OBJ_D)\dsa_err.obj +
+  $(OBJ_D)\dsa_gen.obj +
+  $(OBJ_D)\dsa_key.obj +
+  $(OBJ_D)\dsa_lib.obj +
+  $(OBJ_D)\dsa_ossl.obj +
+  $(OBJ_D)\dsa_sign.obj +
+  $(OBJ_D)\dsa_vrf.obj +
+  $(OBJ_D)\e_cbc_3d.obj +
+  $(OBJ_D)\e_cbc_bf.obj +
+  $(OBJ_D)\e_cbc_c.obj +
+  $(OBJ_D)\e_cbc_d.obj +
+  $(OBJ_D)\e_cbc_i.obj +
+  $(OBJ_D)\e_cbc_r2.obj +
+  $(OBJ_D)\e_cbc_r5.obj +
+  $(OBJ_D)\e_cfb_3d.obj +
+  $(OBJ_D)\e_cfb_bf.obj +
+  $(OBJ_D)\e_cfb_c.obj +
+  $(OBJ_D)\e_cfb_d.obj +
+  $(OBJ_D)\e_cfb_i.obj +
+  $(OBJ_D)\e_cfb_r2.obj +
+  $(OBJ_D)\e_cfb_r5.obj +
+  $(OBJ_D)\e_ecb_3d.obj +
+  $(OBJ_D)\e_ecb_bf.obj +
+  $(OBJ_D)\e_ecb_c.obj +
+  $(OBJ_D)\e_ecb_d.obj +
+  $(OBJ_D)\e_ecb_i.obj +
+  $(OBJ_D)\e_ecb_r2.obj +
+  $(OBJ_D)\e_ecb_r5.obj +
+  $(OBJ_D)\e_null.obj +
+  $(OBJ_D)\e_ofb_3d.obj +
+  $(OBJ_D)\e_ofb_bf.obj +
+  $(OBJ_D)\e_ofb_c.obj +
+  $(OBJ_D)\e_ofb_d.obj +
+  $(OBJ_D)\e_ofb_i.obj +
+  $(OBJ_D)\e_ofb_r2.obj +
+  $(OBJ_D)\e_ofb_r5.obj +
+  $(OBJ_D)\e_rc4.obj +
+  $(OBJ_D)\e_xcbc_d.obj +
+  $(OBJ_D)\ebcdic.obj +
+  $(OBJ_D)\ecb3_enc.obj +
+  $(OBJ_D)\ecb_enc.obj +
+  $(OBJ_D)\ede_cbcm_enc.obj +
+  $(OBJ_D)\enc_read.obj +
+  $(OBJ_D)\enc_writ.obj +
+  $(OBJ_D)\encode.obj +
+  $(OBJ_D)\err.obj +
+  $(OBJ_D)\err_all.obj +
+  $(OBJ_D)\err_prn.obj +
+  $(OBJ_D)\evp_asn1.obj +
+  $(OBJ_D)\evp_enc.obj +
+  $(OBJ_D)\evp_err.obj +
+  $(OBJ_D)\evp_key.obj +
+  $(OBJ_D)\evp_lib.obj +
+  $(OBJ_D)\evp_pbe.obj +
+  $(OBJ_D)\evp_pkey.obj +
+  $(OBJ_D)\ex_data.obj +
+  $(OBJ_D)\f_enum.obj +
+  $(OBJ_D)\f_int.obj +
+  $(OBJ_D)\f_string.obj +
+  $(OBJ_D)\fcrypt.obj +
+  $(OBJ_D)\fcrypt_b.obj +
+  $(OBJ_D)\hmac.obj +
+  $(OBJ_D)\i2d_dhp.obj +
+  $(OBJ_D)\i2d_dsap.obj +
+  $(OBJ_D)\i2d_pr.obj +
+  $(OBJ_D)\i2d_pu.obj +
+  $(OBJ_D)\i2d_r_pr.obj +
+  $(OBJ_D)\i2d_r_pu.obj +
+  $(OBJ_D)\i2d_s_pr.obj +
+  $(OBJ_D)\i2d_s_pu.obj +
+  $(OBJ_D)\i_cbc.obj +
+  $(OBJ_D)\i_cfb64.obj +
+  $(OBJ_D)\i_ecb.obj +
+  $(OBJ_D)\i_ofb64.obj +
+  $(OBJ_D)\i_skey.obj +
+  $(OBJ_D)\lh_stats.obj +
+  $(OBJ_D)\lhash.obj +
+  $(OBJ_D)\m_dss.obj +
+  $(OBJ_D)\m_dss1.obj +
+  $(OBJ_D)\m_md2.obj +
+  $(OBJ_D)\m_md5.obj +
+  $(OBJ_D)\m_mdc2.obj +
+  $(OBJ_D)\m_null.obj +
+  $(OBJ_D)\m_ripemd.obj +
+  $(OBJ_D)\m_sha.obj +
+  $(OBJ_D)\m_sha1.obj +
+  $(OBJ_D)\md2_dgst.obj +
+  $(OBJ_D)\md2_one.obj +
+  $(OBJ_D)\md5_dgst.obj +
+  $(OBJ_D)\md5_one.obj +
+  $(OBJ_D)\md_rand.obj +
+  $(OBJ_D)\mdc2_one.obj +
+  $(OBJ_D)\mdc2dgst.obj +
+  $(OBJ_D)\mem.obj +
+  $(OBJ_D)\mem_dbg.obj +
+  $(OBJ_D)\n_pkey.obj +
+  $(OBJ_D)\names.obj +
+  $(OBJ_D)\nsseq.obj +
+  $(OBJ_D)\o_names.obj +
+  $(OBJ_D)\obj_dat.obj +
+  $(OBJ_D)\obj_err.obj +
+  $(OBJ_D)\obj_lib.obj +
+  $(OBJ_D)\ofb64ede.obj +
+  $(OBJ_D)\ofb64enc.obj +
+  $(OBJ_D)\ofb_enc.obj +
+  $(OBJ_D)\p12_add.obj +
+  $(OBJ_D)\p12_attr.obj +
+  $(OBJ_D)\p12_bags.obj +
+  $(OBJ_D)\p12_crpt.obj +
+  $(OBJ_D)\p12_crt.obj +
+  $(OBJ_D)\p12_decr.obj +
+  $(OBJ_D)\p12_init.obj +
+  $(OBJ_D)\p12_key.obj +
+  $(OBJ_D)\p12_kiss.obj +
+  $(OBJ_D)\p12_lib.obj +
+  $(OBJ_D)\p12_mac.obj +
+  $(OBJ_D)\p12_mutl.obj +
+  $(OBJ_D)\p12_npas.obj +
+  $(OBJ_D)\p12_sbag.obj +
+  $(OBJ_D)\p12_utl.obj +
+  $(OBJ_D)\p5_crpt.obj +
+  $(OBJ_D)\p5_crpt2.obj +
+  $(OBJ_D)\p5_pbe.obj +
+  $(OBJ_D)\p5_pbev2.obj +
+  $(OBJ_D)\p7_dgst.obj +
+  $(OBJ_D)\p7_enc.obj +
+  $(OBJ_D)\p7_enc_c.obj +
+  $(OBJ_D)\p7_evp.obj +
+  $(OBJ_D)\p7_i_s.obj +
+  $(OBJ_D)\p7_lib.obj +
+  $(OBJ_D)\p7_recip.obj +
+  $(OBJ_D)\p7_s_e.obj +
+  $(OBJ_D)\p7_signd.obj +
+  $(OBJ_D)\p7_signi.obj +
+  $(OBJ_D)\p8_pkey.obj +
+  $(OBJ_D)\p_dec.obj +
+  $(OBJ_D)\p_enc.obj +
+  $(OBJ_D)\p_lib.obj +
+  $(OBJ_D)\p_open.obj +
+  $(OBJ_D)\p_seal.obj +
+  $(OBJ_D)\p_sign.obj +
+  $(OBJ_D)\p_verify.obj +
+  $(OBJ_D)\pcbc_enc.obj +
+  $(OBJ_D)\pem_all.obj +
+  $(OBJ_D)\pem_err.obj +
+  $(OBJ_D)\pem_info.obj +
+  $(OBJ_D)\pem_lib.obj +
+  $(OBJ_D)\pem_seal.obj +
+  $(OBJ_D)\pem_sign.obj +
+  $(OBJ_D)\pk12err.obj +
+  $(OBJ_D)\pk7_attr.obj +
+  $(OBJ_D)\pk7_doit.obj +
+  $(OBJ_D)\pk7_lib.obj +
+  $(OBJ_D)\pk7_mime.obj +
+  $(OBJ_D)\pk7_smime.obj +
+  $(OBJ_D)\pkcs7err.obj +
+  $(OBJ_D)\qud_cksm.obj +
+  $(OBJ_D)\rand_egd.obj +
+  $(OBJ_D)\rand_err.obj +
+  $(OBJ_D)\rand_key.obj +
+  $(OBJ_D)\rand_lib.obj +
+  $(OBJ_D)\randfile.obj +
+  $(OBJ_D)\rc2_cbc.obj +
+  $(OBJ_D)\rc2_ecb.obj +
+  $(OBJ_D)\rc2_skey.obj +
+  $(OBJ_D)\rc2cfb64.obj +
+  $(OBJ_D)\rc2ofb64.obj +
+  $(OBJ_D)\rc4_enc.obj +
+  $(OBJ_D)\rc4_skey.obj +
+  $(OBJ_D)\rc5_ecb.obj +
+  $(OBJ_D)\rc5_enc.obj +
+  $(OBJ_D)\rc5_skey.obj +
+  $(OBJ_D)\rc5cfb64.obj +
+  $(OBJ_D)\rc5ofb64.obj +
+  $(OBJ_D)\read2pwd.obj +
+  $(OBJ_D)\read_pwd.obj +
+  $(OBJ_D)\rmd_dgst.obj +
+  $(OBJ_D)\rmd_one.obj +
+  $(OBJ_D)\rpc_enc.obj +
+  $(OBJ_D)\rsa_chk.obj +
+  $(OBJ_D)\rsa_eay.obj +
+  $(OBJ_D)\rsa_err.obj +
+  $(OBJ_D)\rsa_gen.obj +
+  $(OBJ_D)\rsa_lib.obj +
+  $(OBJ_D)\rsa_none.obj +
+  $(OBJ_D)\rsa_null.obj +
+  $(OBJ_D)\rsa_oaep.obj +
+  $(OBJ_D)\rsa_pk1.obj +
+  $(OBJ_D)\rsa_saos.obj +
+  $(OBJ_D)\rsa_sign.obj +
+  $(OBJ_D)\rsa_ssl.obj +
+  $(OBJ_D)\set_key.obj +
+  $(OBJ_D)\sha1_one.obj +
+  $(OBJ_D)\sha1dgst.obj +
+  $(OBJ_D)\sha_dgst.obj +
+  $(OBJ_D)\sha_one.obj +
+  $(OBJ_D)\stack.obj +
+  $(OBJ_D)\str2key.obj +
+  $(OBJ_D)\supp.obj +
+  $(OBJ_D)\t_bitst.obj +
+  $(OBJ_D)\t_crl.obj +
+  $(OBJ_D)\t_pkey.obj +
+  $(OBJ_D)\t_req.obj +
+  $(OBJ_D)\t_spki.obj +
+  $(OBJ_D)\t_x509.obj +
+  $(OBJ_D)\t_x509a.obj +
+  $(OBJ_D)\tmdiff.obj +
+  $(OBJ_D)\txt_db.obj +
+  $(OBJ_D)\v3_akey.obj +
+  $(OBJ_D)\v3_alt.obj +
+  $(OBJ_D)\v3_bcons.obj +
+  $(OBJ_D)\v3_bitst.obj +
+  $(OBJ_D)\v3_conf.obj +
+  $(OBJ_D)\v3_cpols.obj +
+  $(OBJ_D)\v3_crld.obj +
+  $(OBJ_D)\v3_enum.obj +
+  $(OBJ_D)\v3_extku.obj +
+  $(OBJ_D)\v3_genn.obj +
+  $(OBJ_D)\v3_ia5.obj +
+  $(OBJ_D)\v3_info.obj +
+  $(OBJ_D)\v3_int.obj +
+  $(OBJ_D)\v3_lib.obj +
+  $(OBJ_D)\v3_pku.obj +
+  $(OBJ_D)\v3_prn.obj +
+  $(OBJ_D)\v3_purp.obj +
+  $(OBJ_D)\v3_skey.obj +
+  $(OBJ_D)\v3_sxnet.obj +
+  $(OBJ_D)\v3_utl.obj +
+  $(OBJ_D)\v3err.obj +
+  $(OBJ_D)\x509_att.obj +
+  $(OBJ_D)\x509_cmp.obj +
+  $(OBJ_D)\x509_d2.obj +
+  $(OBJ_D)\x509_def.obj +
+  $(OBJ_D)\x509_err.obj +
+  $(OBJ_D)\x509_ext.obj +
+  $(OBJ_D)\x509_lu.obj +
+  $(OBJ_D)\x509_obj.obj +
+  $(OBJ_D)\x509_r2x.obj +
+  $(OBJ_D)\x509_req.obj +
+  $(OBJ_D)\x509_set.obj +
+  $(OBJ_D)\x509_trs.obj +
+  $(OBJ_D)\x509_txt.obj +
+  $(OBJ_D)\x509_v3.obj +
+  $(OBJ_D)\x509_vfy.obj +
+  $(OBJ_D)\x509name.obj +
+  $(OBJ_D)\x509rset.obj +
+  $(OBJ_D)\x509spki.obj +
+  $(OBJ_D)\x509type.obj +
+  $(OBJ_D)\x_algor.obj +
+  $(OBJ_D)\x_all.obj +
+  $(OBJ_D)\x_attrib.obj +
+  $(OBJ_D)\x_cinf.obj +
+  $(OBJ_D)\x_crl.obj +
+  $(OBJ_D)\x_exten.obj +
+  $(OBJ_D)\x_info.obj +
+  $(OBJ_D)\x_name.obj +
+  $(OBJ_D)\x_pkey.obj +
+  $(OBJ_D)\x_pubkey.obj +
+  $(OBJ_D)\x_req.obj +
+  $(OBJ_D)\x_sig.obj +
+  $(OBJ_D)\x_spki.obj +
+  $(OBJ_D)\x_val.obj +
+  $(OBJ_D)\x_x509.obj +
+  $(OBJ_D)\x_x509a.obj +
+  $(OBJ_D)\xcbc_enc.obj +
+
+  $(O_CRYPTO)
+
+   winsock oldnames ldllcew libw
+ms\libeay16.def;
+<<
+       implib /noignorecase /nowep $(L_CRYPTO) $(O_CRYPTO)
+
+$(BIN_D)\$(E_EXE).exe: $(E_OBJ) $(LIBS_DEP)
+  $(LINK) $(LFLAGS) @<<
+  $(APP_EX_OBJ) +
+  $(OBJ_D)\app_rand.obj +
+  $(OBJ_D)\apps.obj +
+  $(OBJ_D)\asn1pars.obj +
+  $(OBJ_D)\ca.obj +
+  $(OBJ_D)\ciphers.obj +
+  $(OBJ_D)\crl.obj +
+  $(OBJ_D)\crl2p7.obj +
+  $(OBJ_D)\dgst.obj +
+  $(OBJ_D)\dh.obj +
+  $(OBJ_D)\dhparam.obj +
+  $(OBJ_D)\dsa.obj +
+  $(OBJ_D)\dsaparam.obj +
+  $(OBJ_D)\enc.obj +
+  $(OBJ_D)\errstr.obj +
+  $(OBJ_D)\gendh.obj +
+  $(OBJ_D)\gendsa.obj +
+  $(OBJ_D)\genrsa.obj +
+  $(OBJ_D)\nseq.obj +
+  $(OBJ_D)\openssl.obj +
+  $(OBJ_D)\passwd.obj +
+  $(OBJ_D)\pkcs12.obj +
+  $(OBJ_D)\pkcs7.obj +
+  $(OBJ_D)\pkcs8.obj +
+  $(OBJ_D)\req.obj +
+  $(OBJ_D)\rsa.obj +
+  $(OBJ_D)\s_cb.obj +
+  $(OBJ_D)\s_client.obj +
+  $(OBJ_D)\s_server.obj +
+  $(OBJ_D)\s_socket.obj +
+  $(OBJ_D)\s_time.obj +
+  $(OBJ_D)\sess_id.obj +
+  $(OBJ_D)\smime.obj +
+  $(OBJ_D)\speed.obj +
+  $(OBJ_D)\spkac.obj +
+  $(OBJ_D)\verify.obj +
+  $(OBJ_D)\version.obj +
+  $(OBJ_D)\x509.obj +
+
+  $(BIN_D)\$(E_EXE).exe
+
+  $(L_LIBS) $(EX_LIBS)
+
+<<
+
Index: opensa/openssl/ms/x86asm.bat
diff -u opensa/openssl/ms/x86asm.bat:1.1 opensa/openssl/ms/x86asm.bat:1.2
--- opensa/openssl/ms/x86asm.bat:1.1    Tue Jan 25 23:16:43 2000
+++ opensa/openssl/ms/x86asm.bat        Thu Mar  2 21:12:05 2000
@@ -1,57 +1,57 @@
-
-@echo off
-echo Generating x86 assember
-
-echo Bignum
-cd crypto\bn\asm
-perl x86.pl win32n > bn-win32.asm
-cd ..\..\..
-
-echo DES
-cd crypto\des\asm
-perl des-586.pl win32n > d-win32.asm
-cd ..\..\..
-
-echo "crypt(3)"
-
-cd crypto\des\asm
-perl crypt586.pl win32n > y-win32.asm
-cd ..\..\..
-
-echo Blowfish
-
-cd crypto\bf\asm
-perl bf-586.pl win32n > b-win32.asm
-cd ..\..\..
-
-echo CAST5
-cd crypto\cast\asm
-perl cast-586.pl win32n > c-win32.asm
-cd ..\..\..
-
-echo RC4
-cd crypto\rc4\asm
-perl rc4-586.pl win32n > r4-win32.asm
-cd ..\..\..
-
-echo MD5
-cd crypto\md5\asm
-perl md5-586.pl win32n > m5-win32.asm
-cd ..\..\..
-
-echo SHA1
-cd crypto\sha\asm
-perl sha1-586.pl win32n > s1-win32.asm
-cd ..\..\..
-
-echo RIPEMD160
-cd crypto\ripemd\asm
-perl rmd-586.pl win32n > rm-win32.asm
-cd ..\..\..
-
-echo RC5\32
-cd crypto\rc5\asm
-perl rc5-586.pl win32n > r5-win32.asm
-cd ..\..\..
-
-echo on
+
+@echo off
+echo Generating x86 assember
+
+echo Bignum
+cd crypto\bn\asm
+perl x86.pl win32n > bn-win32.asm
+cd ..\..\..
+
+echo DES
+cd crypto\des\asm
+perl des-586.pl win32n > d-win32.asm
+cd ..\..\..
+
+echo "crypt(3)"
+
+cd crypto\des\asm
+perl crypt586.pl win32n > y-win32.asm
+cd ..\..\..
+
+echo Blowfish
+
+cd crypto\bf\asm
+perl bf-586.pl win32n > b-win32.asm
+cd ..\..\..
+
+echo CAST5
+cd crypto\cast\asm
+perl cast-586.pl win32n > c-win32.asm
+cd ..\..\..
+
+echo RC4
+cd crypto\rc4\asm
+perl rc4-586.pl win32n > r4-win32.asm
+cd ..\..\..
+
+echo MD5
+cd crypto\md5\asm
+perl md5-586.pl win32n > m5-win32.asm
+cd ..\..\..
+
+echo SHA1
+cd crypto\sha\asm
+perl sha1-586.pl win32n > s1-win32.asm
+cd ..\..\..
+
+echo RIPEMD160
+cd crypto\ripemd\asm
+perl rmd-586.pl win32n > rm-win32.asm
+cd ..\..\..
+
+echo RC5\32
+cd crypto\rc5\asm
+perl rc5-586.pl win32n > r5-win32.asm
+cd ..\..\..
+
+echo on
Index: opensa/openssl/rsaref/makefile.ssl
diff -u opensa/openssl/rsaref/makefile.ssl:1.1 opensa/openssl/rsaref/makefile.ssl:1.2
--- opensa/openssl/rsaref/makefile.ssl:1.1      Tue Jan 25 23:02:01 2000
+++ opensa/openssl/rsaref/makefile.ssl  Thu Mar  2 21:12:05 2000
@@ -88,11 +88,12 @@
 rsar_err.o: ../include/openssl/bn.h ../include/openssl/crypto.h
 rsar_err.o: ../include/openssl/err.h ../include/openssl/opensslconf.h
 rsar_err.o: ../include/openssl/opensslv.h ../include/openssl/rsa.h
-rsar_err.o: ../include/openssl/rsaref.h ../include/openssl/stack.h
+rsar_err.o: ../include/openssl/rsaref.h ../include/openssl/safestack.h
+rsar_err.o: ../include/openssl/stack.h
 rsaref.o: ../crypto/cryptlib.h ../include/openssl/bio.h ../include/openssl/bn.h
 rsaref.o: ../include/openssl/buffer.h ../include/openssl/crypto.h
 rsaref.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
 rsaref.o: ../include/openssl/err.h ../include/openssl/opensslconf.h
 rsaref.o: ../include/openssl/opensslv.h ../include/openssl/rand.h
 rsaref.o: ../include/openssl/rsa.h ../include/openssl/rsaref.h
-rsaref.o: ../include/openssl/stack.h
+rsaref.o: ../include/openssl/safestack.h ../include/openssl/stack.h
Index: opensa/openssl/rsaref/rsaref.c
diff -u opensa/openssl/rsaref/rsaref.c:1.1 opensa/openssl/rsaref/rsaref.c:1.2
--- opensa/openssl/rsaref/rsaref.c:1.1  Tue Jan 25 23:02:01 2000
+++ opensa/openssl/rsaref/rsaref.c      Thu Mar  2 21:12:05 2000
@@ -279,7 +279,8 @@
        R_GetRandomBytesNeeded((unsigned int *)&i,&rnd);
        while (i > 0)
                {
-               RAND_bytes(buf,16);
+               if (RAND_bytes(buf,16) <= 0)
+                       goto err;
                R_RandomUpdate(&rnd,buf,(unsigned int)((i>16)?16:i));
                i-=16;
                }
@@ -298,4 +299,10 @@
        memset(&rnd,0,sizeof(rnd));
        return(outlen);
        }
+#else /* !NO_RSA */
+
+# if PEDANTIC
+static void *dummy=&dummy;
+# endif
+
 #endif
Index: opensa/openssl/ssl/bio_ssl.c
diff -u opensa/openssl/ssl/bio_ssl.c:1.1 opensa/openssl/ssl/bio_ssl.c:1.2
--- opensa/openssl/ssl/bio_ssl.c:1.1    Tue Jan 25 23:01:17 2000
+++ opensa/openssl/ssl/bio_ssl.c        Thu Mar  2 21:12:05 2000
@@ -71,6 +71,7 @@
 static long ssl_ctrl(BIO *h,int cmd,long arg1,char *arg2);
 static int ssl_new(BIO *h);
 static int ssl_free(BIO *data);
+static long ssl_callback_ctrl(BIO *h,int cmd,void (*fp)());
 typedef struct bio_ssl_st
        {
        SSL *ssl; /* The ssl handle :-) */
@@ -92,6 +93,7 @@
        ssl_ctrl,
        ssl_new,
        ssl_free,
+       ssl_callback_ctrl,
        };
 
 BIO_METHOD *BIO_f_ssl(void)
@@ -444,7 +446,14 @@
                ret=BIO_ctrl(ssl->rbio,cmd,num,ptr);
                break;
        case BIO_CTRL_SET_CALLBACK:
-               SSL_set_info_callback(ssl,(void (*)())ptr);
+               {
+#if 0 /* FIXME: Should this be used?  -- Richard Levitte */
+               BIOerr(SSL_F_SSL_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
+               ret = -1;
+#else
+               ret=0;
+#endif
+               }
                break;
        case BIO_CTRL_GET_CALLBACK:
                {
@@ -456,6 +465,28 @@
                break;
        default:
                ret=BIO_ctrl(ssl->rbio,cmd,num,ptr);
+               break;
+               }
+       return(ret);
+       }
+
+static long ssl_callback_ctrl(BIO *b, int cmd, void (*fp)())
+       {
+       SSL *ssl;
+       BIO_SSL *bs;
+       long ret=1;
+
+       bs=(BIO_SSL *)b->ptr;
+       ssl=bs->ssl;
+       switch (cmd)
+               {
+       case BIO_CTRL_SET_CALLBACK:
+               {
+               SSL_set_info_callback(ssl,fp);
+               }
+               break;
+       default:
+               ret=BIO_callback_ctrl(ssl->rbio,cmd,fp);
                break;
                }
        return(ret);
Index: opensa/openssl/ssl/install.com
diff -u opensa/openssl/ssl/install.com:1.1 opensa/openssl/ssl/install.com:1.2
--- opensa/openssl/ssl/install.com:1.1  Tue Jan 25 23:01:17 2000
+++ opensa/openssl/ssl/install.com      Thu Mar  2 21:12:05 2000
@@ -46,6 +46,7 @@
 $      AEXE_DIR := [-.AXP.EXE.SSL]
 $
 $      COPY 'EXHEADER' WRK_SSLINCLUDE:/LOG
+$      SET FILE/PROT=WORLD:RE WRK_SSLINCLUDE:'EXHEADER'
 $
 $      I = 0
 $ LOOP_EXE: 
Index: opensa/openssl/ssl/makefile.ssl
diff -u opensa/openssl/ssl/makefile.ssl:1.1 opensa/openssl/ssl/makefile.ssl:1.2
--- opensa/openssl/ssl/makefile.ssl:1.1 Tue Jan 25 23:01:17 2000
+++ opensa/openssl/ssl/makefile.ssl     Thu Mar  2 21:12:05 2000
@@ -537,9 +537,10 @@
 ssl_cert.o: ../include/openssl/asn1.h ../include/openssl/bio.h
 ssl_cert.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
 ssl_cert.o: ../include/openssl/buffer.h ../include/openssl/cast.h
-ssl_cert.o: ../include/openssl/comp.h ../include/openssl/crypto.h
-ssl_cert.o: ../include/openssl/des.h ../include/openssl/dh.h
-ssl_cert.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
+ssl_cert.o: ../include/openssl/comp.h ../include/openssl/conf.h
+ssl_cert.o: ../include/openssl/crypto.h ../include/openssl/des.h
+ssl_cert.o: ../include/openssl/dh.h ../include/openssl/dsa.h
+ssl_cert.o: ../include/openssl/e_os.h ../include/openssl/e_os.h
 ssl_cert.o: ../include/openssl/e_os2.h ../include/openssl/err.h
 ssl_cert.o: ../include/openssl/evp.h ../include/openssl/idea.h
 ssl_cert.o: ../include/openssl/lhash.h ../include/openssl/md2.h
@@ -554,7 +555,8 @@
 ssl_cert.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
 ssl_cert.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
 ssl_cert.o: ../include/openssl/tls1.h ../include/openssl/x509.h
-ssl_cert.o: ../include/openssl/x509_vfy.h ssl_locl.h
+ssl_cert.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h
+ssl_cert.o: ssl_locl.h
 ssl_ciph.o: ../include/openssl/asn1.h ../include/openssl/bio.h
 ssl_ciph.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
 ssl_ciph.o: ../include/openssl/buffer.h ../include/openssl/cast.h
@@ -619,24 +621,25 @@
 ssl_lib.o: ../include/openssl/asn1.h ../include/openssl/bio.h
 ssl_lib.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
 ssl_lib.o: ../include/openssl/buffer.h ../include/openssl/cast.h
-ssl_lib.o: ../include/openssl/comp.h ../include/openssl/crypto.h
-ssl_lib.o: ../include/openssl/des.h ../include/openssl/dh.h
-ssl_lib.o: ../include/openssl/dsa.h ../include/openssl/e_os.h
-ssl_lib.o: ../include/openssl/e_os2.h ../include/openssl/err.h
-ssl_lib.o: ../include/openssl/evp.h ../include/openssl/idea.h
-ssl_lib.o: ../include/openssl/lhash.h ../include/openssl/md2.h
-ssl_lib.o: ../include/openssl/md5.h ../include/openssl/mdc2.h
-ssl_lib.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
-ssl_lib.o: ../include/openssl/opensslv.h ../include/openssl/pem.h
-ssl_lib.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
-ssl_lib.o: ../include/openssl/rc2.h ../include/openssl/rc4.h
-ssl_lib.o: ../include/openssl/rc5.h ../include/openssl/ripemd.h
-ssl_lib.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
-ssl_lib.o: ../include/openssl/sha.h ../include/openssl/ssl.h
-ssl_lib.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
-ssl_lib.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
-ssl_lib.o: ../include/openssl/tls1.h ../include/openssl/x509.h
-ssl_lib.o: ../include/openssl/x509_vfy.h ssl_locl.h
+ssl_lib.o: ../include/openssl/comp.h ../include/openssl/conf.h
+ssl_lib.o: ../include/openssl/crypto.h ../include/openssl/des.h
+ssl_lib.o: ../include/openssl/dh.h ../include/openssl/dsa.h
+ssl_lib.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
+ssl_lib.o: ../include/openssl/err.h ../include/openssl/evp.h
+ssl_lib.o: ../include/openssl/idea.h ../include/openssl/lhash.h
+ssl_lib.o: ../include/openssl/md2.h ../include/openssl/md5.h
+ssl_lib.o: ../include/openssl/mdc2.h ../include/openssl/objects.h
+ssl_lib.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
+ssl_lib.o: ../include/openssl/pem.h ../include/openssl/pem2.h
+ssl_lib.o: ../include/openssl/pkcs7.h ../include/openssl/rc2.h
+ssl_lib.o: ../include/openssl/rc4.h ../include/openssl/rc5.h
+ssl_lib.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
+ssl_lib.o: ../include/openssl/safestack.h ../include/openssl/sha.h
+ssl_lib.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h
+ssl_lib.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
+ssl_lib.o: ../include/openssl/stack.h ../include/openssl/tls1.h
+ssl_lib.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h
+ssl_lib.o: ../include/openssl/x509v3.h ssl_locl.h
 ssl_rsa.o: ../include/openssl/asn1.h ../include/openssl/bio.h
 ssl_rsa.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
 ssl_rsa.o: ../include/openssl/buffer.h ../include/openssl/cast.h
Index: opensa/openssl/ssl/s23_clnt.c
diff -u opensa/openssl/ssl/s23_clnt.c:1.1 opensa/openssl/ssl/s23_clnt.c:1.2
--- opensa/openssl/ssl/s23_clnt.c:1.1   Tue Jan 25 23:01:17 2000
+++ opensa/openssl/ssl/s23_clnt.c       Thu Mar  2 21:12:05 2000
@@ -68,8 +68,10 @@
 static int ssl23_get_server_hello(SSL *s);
 static SSL_METHOD *ssl23_get_client_method(int ver)
        {
+#ifndef NO_SSL2
        if (ver == SSL2_VERSION)
                return(SSLv2_client_method());
+#endif
        if (ver == SSL3_VERSION)
                return(SSLv3_client_method());
        else if (ver == TLS1_VERSION)
@@ -102,7 +104,7 @@
        int ret= -1;
        int new_state,state;
 
-       RAND_seed(&Time,sizeof(Time));
+       RAND_add(&Time,sizeof(Time),0);
        ERR_clear_error();
        clear_sys_error();
 
@@ -222,7 +224,7 @@
 #endif
 
                p=s->s3->client_random;
-               RAND_bytes(p,SSL3_RANDOM_SIZE);
+               RAND_pseudo_bytes(p,SSL3_RANDOM_SIZE);
 
                /* Do the message type and length last */
                d= &(buf[2]);
@@ -283,7 +285,7 @@
                        i=ch_len;
                s2n(i,d);
                memset(&(s->s3->client_random[0]),0,SSL3_RANDOM_SIZE);
-               RAND_bytes(&(s->s3->client_random[SSL3_RANDOM_SIZE-i]),i);
+               RAND_pseudo_bytes(&(s->s3->client_random[SSL3_RANDOM_SIZE-i]),i);
                memcpy(p,&(s->s3->client_random[SSL3_RANDOM_SIZE-i]),i);
                p+=i;
 
@@ -307,7 +309,7 @@
        {
        char buf[8];
        unsigned char *p;
-       int i,ch_len;
+       int i;
        int n;
 
        n=ssl23_read_bytes(s,7);
@@ -320,9 +322,14 @@
        if ((p[0] & 0x80) && (p[2] == SSL2_MT_SERVER_HELLO) &&
                (p[5] == 0x00) && (p[6] == 0x02))
                {
+#ifdef NO_SSL2
+               SSLerr(SSL_F_SSL23_GET_SERVER_HELLO,SSL_R_UNSUPPORTED_PROTOCOL);
+               goto err;
+#else
                /* we are talking sslv2 */
                /* we need to clean up the SSLv3 setup and put in the
                 * sslv2 stuff. */
+               int ch_len;
 
                if (s->options & SSL_OP_NO_SSLv2)
                        {
@@ -375,6 +382,7 @@
 
                s->method=SSLv2_client_method();
                s->handshake_func=s->method->ssl_connect;
+#endif
                }
        else if ((p[0] == SSL3_RT_HANDSHAKE) &&
                 (p[1] == SSL3_VERSION_MAJOR) &&
Index: opensa/openssl/ssl/s23_lib.c
diff -u opensa/openssl/ssl/s23_lib.c:1.1 opensa/openssl/ssl/s23_lib.c:1.2
--- opensa/openssl/ssl/s23_lib.c:1.1    Tue Jan 25 23:01:17 2000
+++ opensa/openssl/ssl/s23_lib.c        Thu Mar  2 21:12:05 2000
@@ -67,7 +67,7 @@
 static long ssl23_default_timeout(void );
 static int ssl23_put_cipher_by_char(const SSL_CIPHER *c, unsigned char *p);
 static SSL_CIPHER *ssl23_get_cipher_by_char(const unsigned char *p);
-char *SSL23_version_str="SSLv2/3 compatibility" OPENSSL_VERSION_PTEXT;
+const char *SSL23_version_str="SSLv2/3 compatibility" OPENSSL_VERSION_PTEXT;
 
 static SSL_METHOD SSLv23_data= {
        TLS1_VERSION,
@@ -92,6 +92,9 @@
        ssl_bad_method,
        ssl23_default_timeout,
        &ssl3_undef_enc_method,
+       ssl_undefined_function,
+       ssl3_callback_ctrl,
+       ssl3_ctx_callback_ctrl,
        };
 
 static long ssl23_default_timeout(void)
@@ -106,7 +109,11 @@
 
 static int ssl23_num_ciphers(void)
        {
-       return(ssl3_num_ciphers()+ssl2_num_ciphers());
+       return(ssl3_num_ciphers()
+#ifndef NO_SSL2
+              + ssl2_num_ciphers()
+#endif
+           );
        }
 
 static SSL_CIPHER *ssl23_get_cipher(unsigned int u)
@@ -116,7 +123,11 @@
        if (u < uu)
                return(ssl3_get_cipher(u));
        else
+#ifndef NO_SSL2
                return(ssl2_get_cipher(u-uu));
+#else
+               return(NULL);
+#endif
        }
 
 /* This function needs to check if the ciphers required are actually
@@ -132,8 +143,10 @@
                ((unsigned long)p[1]<<8L)|(unsigned long)p[2];
        c.id=id;
        cp=ssl3_get_cipher_by_char(p);
+#ifndef NO_SSL2
        if (cp == NULL)
                cp=ssl2_get_cipher_by_char(p);
+#endif
        return(cp);
        }
 
Index: opensa/openssl/ssl/s23_pkt.c
diff -u opensa/openssl/ssl/s23_pkt.c:1.1 opensa/openssl/ssl/s23_pkt.c:1.2
--- opensa/openssl/ssl/s23_pkt.c:1.1    Tue Jan 25 23:01:17 2000
+++ opensa/openssl/ssl/s23_pkt.c        Thu Mar  2 21:12:05 2000
@@ -89,7 +89,7 @@
                }
        }
 
-/* only return when we have read 'n' bytes */
+/* return regularly only when we have read (at least) 'n' bytes */
 int ssl23_read_bytes(SSL *s, int n)
        {
        unsigned char *p;
Index: opensa/openssl/ssl/s23_srvr.c
diff -u opensa/openssl/ssl/s23_srvr.c:1.1 opensa/openssl/ssl/s23_srvr.c:1.2
--- opensa/openssl/ssl/s23_srvr.c:1.1   Tue Jan 25 23:01:17 2000
+++ opensa/openssl/ssl/s23_srvr.c       Thu Mar  2 21:12:05 2000
@@ -67,8 +67,10 @@
 int ssl23_get_client_hello(SSL *s);
 static SSL_METHOD *ssl23_get_server_method(int ver)
        {
+#ifndef NO_SSL2
        if (ver == SSL2_VERSION)
                return(SSLv2_server_method());
+#endif
        if (ver == SSL3_VERSION)
                return(SSLv3_server_method());
        else if (ver == TLS1_VERSION)
@@ -101,7 +103,7 @@
        int ret= -1;
        int new_state,state;
 
-       RAND_seed(&Time,sizeof(Time));
+       RAND_add(&Time,sizeof(Time),0);
        ERR_clear_error();
        clear_sys_error();
 
@@ -186,23 +188,39 @@
 
 int ssl23_get_client_hello(SSL *s)
        {
-       char buf_space[8];
+       char buf_space[11]; /* Request this many bytes in initial read.
+                            * We can detect SSL 3.0/TLS 1.0 Client Hellos
+                            * ('type == 3') correctly only when the following
+                            * is in a single record, which is not guaranteed by
+                            * the protocol specification:
+                            * Byte  Content
+                            *  0     type            \
+                            *  1/2   version          > record header
+                            *  3/4   length          /
+                            *  5     msg_type        \
+                            *  6-8   length           > Client Hello message
+                            *  9/10  client_version  /
+                            */
        char *buf= &(buf_space[0]);
        unsigned char *p,*d,*dd;
        unsigned int i;
        unsigned int csl,sil,cl;
-       int n=0,j,tls1=0;
-       int type=0,use_sslv2_strong=0;
+       int n=0,j;
+       int type=0;
        int v[2];
+#ifndef NO_RSA
+       int use_sslv2_strong=0;
+#endif
 
-       /* read the initial header */
-       v[0]=v[1]=0;
        if (s->state == SSL23_ST_SR_CLNT_HELLO_A)
                {
+               /* read the initial header */
+               v[0]=v[1]=0;
+
                if (!ssl3_setup_buffers(s)) goto err;
 
-               n=ssl23_read_bytes(s,7);
-               if (n != 7) return(n); /* n == -1 || n == 0 */
+               n=ssl23_read_bytes(s, sizeof buf_space);
+               if (n != sizeof buf_space) return(n); /* n == -1 || n == 0 */
 
                p=s->packet;
 
@@ -210,7 +228,9 @@
 
                if ((p[0] & 0x80) && (p[2] == SSL2_MT_CLIENT_HELLO))
                        {
-                       /* SSLv2 header */
+                       /*
+                        * SSLv2 header
+                        */
                        if ((p[3] == 0x00) && (p[4] == 0x02))
                                {
                                v[0]=p[3]; v[1]=p[4];
@@ -226,11 +246,14 @@
                                        {
                                        if (!(s->options & SSL_OP_NO_TLSv1))
                                                {
-                                               tls1=1;
+                                               s->version=TLS1_VERSION;
+                                               /* type=2; */ /* done later to survive 
+restarts */
                                                s->state=SSL23_ST_SR_CLNT_HELLO_B;
                                                }
                                        else if (!(s->options & SSL_OP_NO_SSLv3))
                                                {
+                                               s->version=SSL3_VERSION;
+                                               /* type=2; */
                                                s->state=SSL23_ST_SR_CLNT_HELLO_B;
                                                }
                                        else if (!(s->options & SSL_OP_NO_SSLv2))
@@ -239,12 +262,26 @@
                                                }
                                        }
                                else if (!(s->options & SSL_OP_NO_SSLv3))
+                                       {
+                                       s->version=SSL3_VERSION;
+                                       /* type=2; */
                                        s->state=SSL23_ST_SR_CLNT_HELLO_B;
+                                       }
                                else if (!(s->options & SSL_OP_NO_SSLv2))
                                        type=1;
 
                                if (s->options & SSL_OP_NON_EXPORT_FIRST)
+                                       /* Not only utterly confusing, but broken
+                                        * ('fractured programming'?) -- the details
+                                        * of this block nearly make it work
+                                        * as intended in this environment, but on one
+                                        * of the fine points (w.r.t. restarts) it 
+fails.
+                                        * The obvious fix would be even more 
+devastating
+                                        * to program structure; if you want the 
+functionality,
+                                        * throw this away and implement it in a way
+                                        * that makes sense */
                                        {
+#if 0
                                        STACK_OF(SSL_CIPHER) *sk;
                                        SSL_CIPHER *c;
                                        int ne2,ne3;
@@ -294,27 +331,51 @@
                                                        goto next_bit;
                                                        }
                                                }
+#else
+                                       
+SSLerr(SSL_F_SSL23_GET_CLIENT_HELLO,SSL_R_UNSUPPORTED_OPTION);
+                                       goto err;
+#endif
                                        }
                                }
                        }
                else if ((p[0] == SSL3_RT_HANDSHAKE) &&
                         (p[1] == SSL3_VERSION_MAJOR) &&
-                        (p[5] == SSL3_MT_CLIENT_HELLO))
-                       {
-                       v[0]=p[1]; v[1]=p[2];
-                       /* true SSLv3 or tls1 */
-                       if (p[2] >= TLS1_VERSION_MINOR)
+                        (p[5] == SSL3_MT_CLIENT_HELLO) &&
+                        ((p[3] == 0 && p[4] < 5 /* silly record length? */)
+                               || (p[9] == p[1])))
+                       {
+                       /*
+                        * SSLv3 or tls1 header
+                        */
+                       
+                       v[0]=p[1]; /* major version */
+                       /* We must look at client_version inside the Client Hello 
+message
+                        * to get the correct minor version: */
+                       v[1]=p[10];
+                       /* However if we have only a pathologically small fragment of 
+the
+                        * Client Hello message, we simply use the version from the
+                        * record header -- this is incorrect but unlikely to fail in
+                        * practice */
+                       if (p[3] == 0 && p[4] < 6)
+                               v[1]=p[2];
+                       if (v[1] >= TLS1_VERSION_MINOR)
                                {
                                if (!(s->options & SSL_OP_NO_TLSv1))
                                        {
+                                       s->version=TLS1_VERSION;
                                        type=3;
-                                       tls1=1;
                                        }
                                else if (!(s->options & SSL_OP_NO_SSLv3))
+                                       {
+                                       s->version=SSL3_VERSION;
                                        type=3;
+                                       }
                                }
                        else if (!(s->options & SSL_OP_NO_SSLv3))
+                               {
+                               s->version=SSL3_VERSION;
                                type=3;
+                               }
                        }
                else if ((strncmp("GET ", (char *)p,4) == 0) ||
                         (strncmp("POST ",(char *)p,5) == 0) ||
@@ -331,12 +392,16 @@
                        }
                }
 
-next_bit:
        if (s->state == SSL23_ST_SR_CLNT_HELLO_B)
                {
-               /* we have a SSLv3/TLSv1 in a SSLv2 header */
+               /* we have SSLv3/TLSv1 in an SSLv2 header
+                * (other cases skip this state) */
+
                type=2;
                p=s->packet;
+               v[0] = p[3]; /* == SSL3_VERSION_MAJOR */
+               v[1] = p[4];
+
                n=((p[0]&0x7f)<<8)|p[1];
                if (n > (1024*4))
                        {
@@ -361,14 +426,11 @@
                        goto err;
                        }
 
-               *(d++)=SSL3_VERSION_MAJOR;
-               if (tls1)
-                       *(d++)=TLS1_VERSION_MINOR;
-               else
-                       *(d++)=SSL3_VERSION_MINOR;
+               *(d++) = SSL3_VERSION_MAJOR; /* == v[0] */
+               *(d++) = v[1];
 
                /* lets populate the random area */
-               /* get the chalenge_length */
+               /* get the challenge_length */
                i=(cl > SSL3_RANDOM_SIZE)?SSL3_RANDOM_SIZE:cl;
                memset(d,0,SSL3_RANDOM_SIZE);
                memcpy(&(d[SSL3_RANDOM_SIZE-i]),&(p[csl+sil]),i);
@@ -402,8 +464,15 @@
                s->s3->tmp.message_size=i;
                }
 
+       /* imaginary new state (for program structure): */
+       /* s->state = SSL23_SR_CLNT_HELLO_C */
+
        if (type == 1)
                {
+#ifdef NO_SSL2
+               SSLerr(SSL_F_SSL23_GET_CLIENT_HELLO,SSL_R_UNSUPPORTED_PROTOCOL);
+               goto err;
+#else
                /* we are talking sslv2 */
                /* we need to clean up the SSLv3/TLSv1 setup and put in the
                 * sslv2 stuff. */
@@ -431,7 +500,7 @@
                else
                        s->s2->ssl2_rollback=1;
 
-               /* setup the 5 bytes we have read so we get them from
+               /* setup the n bytes we have read so we get them from
                 * the sslv2 buffer */
                s->rstate=SSL_ST_READ_HEADER;
                s->packet_length=n;
@@ -442,11 +511,12 @@
 
                s->method=SSLv2_server_method();
                s->handshake_func=s->method->ssl_accept;
+#endif
                }
 
        if ((type == 2) || (type == 3))
                {
-               /* we have SSLv3/TLSv1 */
+               /* we have SSLv3/TLSv1 (type 2: SSL2 style, type 3: SSL3/TLS style) */
 
                if (!ssl_init_wbio_buffer(s,1)) goto err;
 
@@ -471,17 +541,13 @@
                        s->s3->rbuf.offset=0;
                        }
 
-               if (tls1)
-                       {
-                       s->version=TLS1_VERSION;
-                       s->method=TLSv1_server_method();
-                       }
+               if (s->version == TLS1_VERSION)
+                       s->method = TLSv1_server_method();
                else
-                       {
-                       s->version=SSL3_VERSION;
-                       s->method=SSLv3_server_method();
-                       }
+                       s->method = SSLv3_server_method();
+#if 0 /* ssl3_get_client_hello does this */
                s->client_version=(v[0]<<8)|v[1];
+#endif
                s->handshake_func=s->method->ssl_accept;
                }
        
@@ -500,4 +566,3 @@
        if (buf != buf_space) Free(buf);
        return(-1);
        }
-
Index: opensa/openssl/ssl/s2_clnt.c
diff -u opensa/openssl/ssl/s2_clnt.c:1.1 opensa/openssl/ssl/s2_clnt.c:1.2
--- opensa/openssl/ssl/s2_clnt.c:1.1    Tue Jan 25 23:01:17 2000
+++ opensa/openssl/ssl/s2_clnt.c        Thu Mar  2 21:12:05 2000
@@ -56,12 +56,12 @@
  * [including the GNU Public Licence.]
  */
 
-#ifndef NO_RSA
+#include "ssl_locl.h"
+#ifndef NO_SSL2
 #include <stdio.h>
 #include <openssl/rand.h>
 #include <openssl/buffer.h>
 #include <openssl/objects.h>
-#include "ssl_locl.h"
 #include <openssl/evp.h>
 
 static SSL_METHOD *ssl2_get_client_method(int ver);
@@ -108,7 +108,7 @@
        void (*cb)()=NULL;
        int new_state,state;
 
-       RAND_seed(&l,sizeof(l));
+       RAND_add(&l,sizeof(l),0);
        ERR_clear_error();
        clear_sys_error();
 
@@ -245,7 +245,7 @@
                /*      ERR_clear_error();*/
 
                        /* If we want to cache session-ids in the client
-                        * and we sucessfully add the session-id to the
+                        * and we successfully add the session-id to the
                         * cache, and there is a callback, then pass it out.
                         * 26/11/96 - eay - only add if not a re-used session.
                         */
@@ -310,7 +310,13 @@
                                        SSL_R_PEER_ERROR);
                        return(-1);
                        }
+#ifdef __APPLE_CC__
+               /* The Rhapsody 5.5 (a.k.a. MacOS X) compiler bug
+                * workaround. <[EMAIL PROTECTED]> */
+               s->hit=(i=*(p++))?1:0;
+#else
                s->hit=(*(p++))?1:0;
+#endif
                s->s2->tmp.cert_type= *(p++);
                n2s(p,i);
                if (i < s->version) s->version=i;
@@ -362,7 +368,7 @@
                */
 #endif
 
-               /* we need to do this incase we were trying to reuse a 
+               /* we need to do this in case we were trying to reuse a 
                 * client session but others are already reusing it.
                 * If this was a new 'blank' session ID, the session-id
                 * length will still be 0 */
@@ -412,7 +418,7 @@
 
                /* In theory we could have ciphers sent back that we
                 * don't want to use but that does not matter since we
-                * will check against the list we origionally sent and
+                * will check against the list we originally sent and
                 * for performance reasons we should not bother to match
                 * the two lists up just to check. */
                for (i=0; i<sk_SSL_CIPHER_num(cl); i++)
@@ -429,26 +435,28 @@
                        return(-1);
                        }
                s->session->cipher=sk_SSL_CIPHER_value(cl,i);
-               }
 
-       if (s->session->peer != NULL)
-               X509_free(s->session->peer);
 
-#if 0 /* What is all this meant to accomplish?? */
-       /* hmmm, can we have the problem of the other session with this
-        * cert, Free's it before we increment the reference count. */
-       CRYPTO_w_lock(CRYPTO_LOCK_X509);
-       s->session->peer=s->session->sess_cert->key->x509;
-       /* Shouldn't do this: already locked */
-       /*CRYPTO_add(&s->session->peer->references,1,CRYPTO_LOCK_X509);*/
-       s->session->peer->references++;
-       CRYPTO_w_unlock(CRYPTO_LOCK_X509);
-#else
-       s->session->peer = s->session->sess_cert->peer_key->x509;
-    /* peer_key->x509 has been set by ssl2_set_certificate. */
-       CRYPTO_add(&s->session->peer->references, 1, CRYPTO_LOCK_X509);
-#endif
+               if (s->session->peer != NULL) /* can't happen*/
+                       {
+                       ssl2_return_error(s, SSL2_PE_UNDEFINED_ERROR);
+                       SSLerr(SSL_F_GET_SERVER_HELLO, SSL_R_INTERNAL_ERROR);
+                       return(-1);
+                       }
+
+               s->session->peer = s->session->sess_cert->peer_key->x509;
+               /* peer_key->x509 has been set by ssl2_set_certificate. */
+               CRYPTO_add(&s->session->peer->references, 1, CRYPTO_LOCK_X509);
+               }
 
+       if (s->session->peer != s->session->sess_cert->peer_key->x509)
+               /* can't happen */
+               {
+               ssl2_return_error(s, SSL2_PE_UNDEFINED_ERROR);
+               SSLerr(SSL_F_GET_SERVER_HELLO, SSL_R_INTERNAL_ERROR);
+               return(-1);
+               }
+               
        s->s2->conn_id_length=s->s2->tmp.conn_id_length;
        memcpy(s->s2->conn_id,p,s->s2->tmp.conn_id_length);
        return(1);
@@ -509,7 +517,7 @@
                s->s2->challenge_length=SSL2_CHALLENGE_LENGTH;
                s2n(SSL2_CHALLENGE_LENGTH,p);           /* challenge length */
                /*challenge id data*/
-               RAND_bytes(s->s2->challenge,SSL2_CHALLENGE_LENGTH);
+               RAND_pseudo_bytes(s->s2->challenge,SSL2_CHALLENGE_LENGTH);
                memcpy(d,s->s2->challenge,SSL2_CHALLENGE_LENGTH);
                d+=SSL2_CHALLENGE_LENGTH;
 
@@ -551,12 +559,19 @@
                /* make key_arg data */
                i=EVP_CIPHER_iv_length(c);
                sess->key_arg_length=i;
-               if (i > 0) RAND_bytes(sess->key_arg,i);
+               if (i > 0) RAND_pseudo_bytes(sess->key_arg,i);
 
                /* make a master key */
                i=EVP_CIPHER_key_length(c);
                sess->master_key_length=i;
-               if (i > 0) RAND_bytes(sess->master_key,i);
+               if (i > 0)
+                       {
+                       if (RAND_bytes(sess->master_key,i) <= 0)
+                               {
+                               ssl2_return_error(s,SSL2_PE_UNDEFINED_ERROR);
+                               return(-1);
+                               }
+                       }
 
                if (sess->cipher->algorithm2 & SSL2_CF_8_BYTE_ENC)
                        enc=8;
@@ -753,7 +768,7 @@
                        {
                        /* this is not good.  If things have failed it
                         * means there so something wrong with the key.
-                        * We will contiune with a 0 length signature
+                        * We will continue with a 0 length signature
                         */
                        }
                memset(&ctx,0,sizeof(ctx));
@@ -968,4 +983,10 @@
        EVP_PKEY_free(pkey);
        return(i);
        }
+#else /* !NO_SSL2 */
+
+# if PEDANTIC
+static void *dummy=&dummy;
+# endif
+
 #endif
Index: opensa/openssl/ssl/s2_enc.c
diff -u opensa/openssl/ssl/s2_enc.c:1.1 opensa/openssl/ssl/s2_enc.c:1.2
--- opensa/openssl/ssl/s2_enc.c:1.1     Tue Jan 25 23:01:18 2000
+++ opensa/openssl/ssl/s2_enc.c Thu Mar  2 21:12:05 2000
@@ -56,8 +56,9 @@
  * [including the GNU Public Licence.]
  */
 
-#include <stdio.h>
 #include "ssl_locl.h"
+#ifndef NO_SSL2
+#include <stdio.h>
 
 int ssl2_enc_init(SSL *s, int client)
        {
@@ -177,4 +178,10 @@
        EVP_DigestFinal(&c,md,NULL);
        /* some would say I should zero the md context */
        }
+#else /* !NO_SSL2 */
+
+# if PEDANTIC
+static void *dummy=&dummy;
+# endif
 
+#endif
Index: opensa/openssl/ssl/s2_lib.c
diff -u opensa/openssl/ssl/s2_lib.c:1.1 opensa/openssl/ssl/s2_lib.c:1.2
--- opensa/openssl/ssl/s2_lib.c:1.1     Tue Jan 25 23:01:18 2000
+++ opensa/openssl/ssl/s2_lib.c Thu Mar  2 21:12:05 2000
@@ -56,12 +56,12 @@
  * [including the GNU Public Licence.]
  */
 
-#ifndef NO_RSA
+#include "ssl_locl.h"
+#ifndef NO_SSL2
 #include <stdio.h>
 #include <openssl/rsa.h>
 #include <openssl/objects.h>
 #include <openssl/md5.h>
-#include "ssl_locl.h"
 
 static long ssl2_default_timeout(void );
 const char *ssl2_version_str="SSLv2" OPENSSL_VERSION_PTEXT;
@@ -75,9 +75,12 @@
        1,
        SSL2_TXT_NULL_WITH_MD5,
        SSL2_CK_NULL_WITH_MD5,
-       SSL_kRSA|SSL_aRSA|SSL_eNULL|SSL_MD5|SSL_EXP40|SSL_SSLV2,
+       SSL_kRSA|SSL_aRSA|SSL_eNULL|SSL_MD5|SSL_SSLV2,
+       SSL_EXPORT|SSL_EXP40,
+       0,
        0,
        SSL_ALL_CIPHERS,
+       SSL_ALL_STRENGTHS,
        },
 #endif
 /* RC4_128_EXPORT40_WITH_MD5 */
@@ -85,63 +88,91 @@
        1,
        SSL2_TXT_RC4_128_EXPORT40_WITH_MD5,
        SSL2_CK_RC4_128_EXPORT40_WITH_MD5,
-       SSL_kRSA|SSL_aRSA|SSL_RC4|SSL_MD5|SSL_EXP40|SSL_SSLV2,
+       SSL_kRSA|SSL_aRSA|SSL_RC4|SSL_MD5|SSL_SSLV2,
+       SSL_EXPORT|SSL_EXP40,
        SSL2_CF_5_BYTE_ENC,
+       40,
+       128,
        SSL_ALL_CIPHERS,
+       SSL_ALL_STRENGTHS,
        },
 /* RC4_128_WITH_MD5 */
        {
        1,
        SSL2_TXT_RC4_128_WITH_MD5,
        SSL2_CK_RC4_128_WITH_MD5,
-       SSL_kRSA|SSL_aRSA|SSL_RC4|SSL_MD5|SSL_NOT_EXP|SSL_SSLV2|SSL_MEDIUM,
+       SSL_kRSA|SSL_aRSA|SSL_RC4|SSL_MD5|SSL_SSLV2,
+       SSL_NOT_EXP|SSL_MEDIUM,
        0,
+       128,
+       128,
        SSL_ALL_CIPHERS,
+       SSL_ALL_STRENGTHS,
        },
 /* RC2_128_CBC_EXPORT40_WITH_MD5 */
        {
        1,
        SSL2_TXT_RC2_128_CBC_EXPORT40_WITH_MD5,
        SSL2_CK_RC2_128_CBC_EXPORT40_WITH_MD5,
-       SSL_kRSA|SSL_aRSA|SSL_RC2|SSL_MD5|SSL_EXP40|SSL_SSLV2,
+       SSL_kRSA|SSL_aRSA|SSL_RC2|SSL_MD5|SSL_SSLV2,
+       SSL_EXPORT|SSL_EXP40,
        SSL2_CF_5_BYTE_ENC,
+       40,
+       128,
        SSL_ALL_CIPHERS,
+       SSL_ALL_STRENGTHS,
        },
 /* RC2_128_CBC_WITH_MD5 */
        {
        1,
        SSL2_TXT_RC2_128_CBC_WITH_MD5,
        SSL2_CK_RC2_128_CBC_WITH_MD5,
-       SSL_kRSA|SSL_aRSA|SSL_RC2|SSL_MD5|SSL_NOT_EXP|SSL_SSLV2|SSL_MEDIUM,
+       SSL_kRSA|SSL_aRSA|SSL_RC2|SSL_MD5|SSL_SSLV2,
+       SSL_NOT_EXP|SSL_MEDIUM,
        0,
+       128,
+       128,
        SSL_ALL_CIPHERS,
+       SSL_ALL_STRENGTHS,
        },
 /* IDEA_128_CBC_WITH_MD5 */
        {
        1,
        SSL2_TXT_IDEA_128_CBC_WITH_MD5,
        SSL2_CK_IDEA_128_CBC_WITH_MD5,
-       SSL_kRSA|SSL_aRSA|SSL_IDEA|SSL_MD5|SSL_NOT_EXP|SSL_SSLV2|SSL_MEDIUM,
+       SSL_kRSA|SSL_aRSA|SSL_IDEA|SSL_MD5|SSL_SSLV2,
+       SSL_NOT_EXP|SSL_MEDIUM,
        0,
+       128,
+       128,
        SSL_ALL_CIPHERS,
+       SSL_ALL_STRENGTHS,
        },
 /* DES_64_CBC_WITH_MD5 */
        {
        1,
        SSL2_TXT_DES_64_CBC_WITH_MD5,
        SSL2_CK_DES_64_CBC_WITH_MD5,
-       SSL_kRSA|SSL_aRSA|SSL_DES|SSL_MD5|SSL_NOT_EXP|SSL_SSLV2|SSL_LOW,
+       SSL_kRSA|SSL_aRSA|SSL_DES|SSL_MD5|SSL_SSLV2,
+       SSL_NOT_EXP|SSL_LOW,
        0,
+       56,
+       56,
        SSL_ALL_CIPHERS,
+       SSL_ALL_STRENGTHS,
        },
 /* DES_192_EDE3_CBC_WITH_MD5 */
        {
        1,
        SSL2_TXT_DES_192_EDE3_CBC_WITH_MD5,
        SSL2_CK_DES_192_EDE3_CBC_WITH_MD5,
-       SSL_kRSA|SSL_aRSA|SSL_3DES|SSL_MD5|SSL_NOT_EXP|SSL_SSLV2|SSL_HIGH,
+       SSL_kRSA|SSL_aRSA|SSL_3DES|SSL_MD5|SSL_SSLV2,
+       SSL_NOT_EXP|SSL_HIGH,
        0,
+       168,
+       168,
        SSL_ALL_CIPHERS,
+       SSL_ALL_STRENGTHS,
        },
 /* RC4_64_WITH_MD5 */
 #if 1
@@ -149,9 +180,13 @@
        1,
        SSL2_TXT_RC4_64_WITH_MD5,
        SSL2_CK_RC4_64_WITH_MD5,
-       SSL_kRSA|SSL_aRSA|SSL_RC4|SSL_MD5|SSL_SSLV2|SSL_LOW,
+       SSL_kRSA|SSL_aRSA|SSL_RC4|SSL_MD5|SSL_SSLV2,
+       SSL_NOT_EXP|SSL_LOW,
        SSL2_CF_8_BYTE_ENC,
+       64,
+       64,
        SSL_ALL_CIPHERS,
+       SSL_ALL_STRENGTHS,
        },
 #endif
 /* NULL SSLeay (testing) */
@@ -161,7 +196,11 @@
        SSL2_TXT_NULL,
        SSL2_CK_NULL,
        0,
+       0,
+       0,
+       0,
        SSL_ALL_CIPHERS,
+       SSL_ALL_STRENGTHS,
        },
 #endif
 
@@ -191,6 +230,9 @@
        ssl_bad_method,
        ssl2_default_timeout,
        &ssl3_undef_enc_method,
+       ssl_undefined_function,
+       ssl2_callback_ctrl,     /* local */
+       ssl2_ctx_callback_ctrl, /* local */
        };
 
 static long ssl2_default_timeout(void)
@@ -223,14 +265,14 @@
 
 int ssl2_new(SSL *s)
        {
-       SSL2_CTX *s2;
+       SSL2_STATE *s2;
 
-       if ((s2=(SSL2_CTX *)Malloc(sizeof(SSL2_CTX))) == NULL) goto err;
-       memset(s2,0,sizeof(SSL2_CTX));
+       if ((s2=Malloc(sizeof *s2)) == NULL) goto err;
+       memset(s2,0,sizeof *s2);
 
-       if ((s2->rbuf=(unsigned char *)Malloc(
+       if ((s2->rbuf=Malloc(
                SSL2_MAX_RECORD_LENGTH_2_BYTE_HEADER+2)) == NULL) goto err;
-       if ((s2->wbuf=(unsigned char *)Malloc(
+       if ((s2->wbuf=Malloc(
                SSL2_MAX_RECORD_LENGTH_2_BYTE_HEADER+2)) == NULL) goto err;
        s->s2=s2;
 
@@ -248,7 +290,7 @@
 
 void ssl2_free(SSL *s)
        {
-       SSL2_CTX *s2;
+       SSL2_STATE *s2;
 
        if(s == NULL)
            return;
@@ -256,14 +298,14 @@
        s2=s->s2;
        if (s2->rbuf != NULL) Free(s2->rbuf);
        if (s2->wbuf != NULL) Free(s2->wbuf);
-       memset(s2,0,sizeof(SSL2_CTX));
+       memset(s2,0,sizeof *s2);
        Free(s2);
        s->s2=NULL;
        }
 
 void ssl2_clear(SSL *s)
        {
-       SSL2_CTX *s2;
+       SSL2_STATE *s2;
        unsigned char *rbuf,*wbuf;
 
        s2=s->s2;
@@ -271,7 +313,7 @@
        rbuf=s2->rbuf;
        wbuf=s2->wbuf;
 
-       memset(s2,0,sizeof(SSL2_CTX));
+       memset(s2,0,sizeof *s2);
 
        s2->rbuf=rbuf;
        s2->wbuf=wbuf;
@@ -296,11 +338,21 @@
        return(ret);
        }
 
+long ssl2_callback_ctrl(SSL *s, int cmd, void (*fp)())
+       {
+       return(0);
+       }
+
 long ssl2_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, char *parg)
        {
        return(0);
        }
 
+long ssl2_ctx_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp)())
+       {
+       return(0);
+       }
+
 /* This function needs to check if the ciphers required are actually
  * available */
 SSL_CIPHER *ssl2_get_cipher_by_char(const unsigned char *p)
@@ -372,7 +424,7 @@
                MD5_Init(&ctx);
 
                MD5_Update(&ctx,s->session->master_key,s->session->master_key_length);
-               MD5_Update(&ctx,(unsigned char *)&c,1);
+               MD5_Update(&ctx,&c,1);
                c++;
                MD5_Update(&ctx,s->s2->challenge,s->s2->challenge_length);
                MD5_Update(&ctx,s->s2->conn_id,s->s2->conn_id_length);
@@ -421,4 +473,10 @@
        s->shutdown=(SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN);
        return(1);
        }
+#else /* !NO_SSL2 */
+
+# if PEDANTIC
+static void *dummy=&dummy;
+# endif
+
 #endif
Index: opensa/openssl/ssl/s2_meth.c
diff -u opensa/openssl/ssl/s2_meth.c:1.1 opensa/openssl/ssl/s2_meth.c:1.2
--- opensa/openssl/ssl/s2_meth.c:1.1    Tue Jan 25 23:01:18 2000
+++ opensa/openssl/ssl/s2_meth.c        Thu Mar  2 21:12:05 2000
@@ -56,10 +56,10 @@
  * [including the GNU Public Licence.]
  */
 
-#ifndef NO_RSA
+#include "ssl_locl.h"
+#ifndef NO_SSL2
 #include <stdio.h>
 #include <openssl/objects.h>
-#include "ssl_locl.h"
 
 static SSL_METHOD *ssl2_get_method(int ver);
 static SSL_METHOD *ssl2_get_method(int ver)
@@ -86,4 +86,10 @@
                }
        return(&SSLv2_data);
        }
+#else /* !NO_SSL2 */
+
+# if PEDANTIC
+static void *dummy=&dummy;
+# endif
+
 #endif
Index: opensa/openssl/ssl/s2_pkt.c
diff -u opensa/openssl/ssl/s2_pkt.c:1.1 opensa/openssl/ssl/s2_pkt.c:1.2
--- opensa/openssl/ssl/s2_pkt.c:1.1     Tue Jan 25 23:01:18 2000
+++ opensa/openssl/ssl/s2_pkt.c Thu Mar  2 21:12:05 2000
@@ -56,10 +56,11 @@
  * [including the GNU Public Licence.]
  */
 
+#include "ssl_locl.h"
+#ifndef NO_SSL2
 #include <stdio.h>
 #include <errno.h>
 #define USE_SOCKETS
-#include "ssl_locl.h"
 
 static int read_n(SSL *s,unsigned int n,unsigned int max,unsigned int extend);
 static int do_ssl_write(SSL *s, const unsigned char *buf, unsigned int len);
@@ -638,3 +639,10 @@
                }
        return(ret);
        }
+#else /* !NO_SSL2 */
+
+# if PEDANTIC
+static void *dummy=&dummy;
+# endif
+
+#endif
Index: opensa/openssl/ssl/s2_srvr.c
diff -u opensa/openssl/ssl/s2_srvr.c:1.1 opensa/openssl/ssl/s2_srvr.c:1.2
--- opensa/openssl/ssl/s2_srvr.c:1.1    Tue Jan 25 23:01:18 2000
+++ opensa/openssl/ssl/s2_srvr.c        Thu Mar  2 21:12:05 2000
@@ -56,12 +56,12 @@
  * [including the GNU Public Licence.]
  */
 
-#ifndef NO_RSA
+#include "ssl_locl.h"
+#ifndef NO_SSL2
 #include <stdio.h>
 #include <openssl/bio.h>
 #include <openssl/rand.h>
 #include <openssl/objects.h>
-#include "ssl_locl.h"
 #include <openssl/evp.h>
 
 static SSL_METHOD *ssl2_get_server_method(int ver);
@@ -109,7 +109,7 @@
        void (*cb)()=NULL;
        int new_state,state;
 
-       RAND_seed(&l,sizeof(l));
+       RAND_add(&l,sizeof(l),0);
        ERR_clear_error();
        clear_sys_error();
 
@@ -415,7 +415,7 @@
                        i=ek;
                else
                        i=EVP_CIPHER_key_length(c);
-               RAND_bytes(p,i);
+               RAND_pseudo_bytes(p,i);
                }
 #else
        if (i < 0)
@@ -680,7 +680,7 @@
                /* make and send conn_id */
                s2n(SSL2_CONNECTION_ID_LENGTH,p);       /* add conn_id length */
                s->s2->conn_id_length=SSL2_CONNECTION_ID_LENGTH;
-               RAND_bytes(s->s2->conn_id,(int)s->s2->conn_id_length);
+               RAND_pseudo_bytes(s->s2->conn_id,(int)s->s2->conn_id_length);
                memcpy(d,s->s2->conn_id,SSL2_CONNECTION_ID_LENGTH);
                d+=SSL2_CONNECTION_ID_LENGTH;
 
@@ -689,7 +689,7 @@
                s->init_off=0;
                }
        /* SSL2_ST_SEND_SERVER_HELLO_B */
-       /* If we are using TCP/IP, the performace is bad if we do 2
+       /* If we are using TCP/IP, the performance is bad if we do 2
         * writes without a read between them.  This occurs when
         * Session-id reuse is used, so I will put in a buffering module
         */
@@ -798,7 +798,7 @@
                p=(unsigned char *)s->init_buf->data;
                *(p++)=SSL2_MT_REQUEST_CERTIFICATE;
                *(p++)=SSL2_AT_MD5_WITH_RSA_ENCRYPTION;
-               RAND_bytes(ccd,SSL2_MIN_CERT_CHALLENGE_LENGTH);
+               RAND_pseudo_bytes(ccd,SSL2_MIN_CERT_CHALLENGE_LENGTH);
                memcpy(p,ccd,SSL2_MIN_CERT_CHALLENGE_LENGTH);
 
                s->state=SSL2_ST_SEND_REQUEST_CERTIFICATE_B;
@@ -898,7 +898,7 @@
                EVP_VerifyUpdate(&ctx,ccd,SSL2_MIN_CERT_CHALLENGE_LENGTH);
 
                i=i2d_X509(s->cert->pkeys[SSL_PKEY_RSA_ENC].x509,NULL);
-               buf2=(unsigned char *)Malloc((unsigned int)i);
+               buf2=Malloc((unsigned int)i);
                if (buf2 == NULL)
                        {
                        SSLerr(SSL_F_REQUEST_CERTIFICATE,ERR_R_MALLOC_FAILURE);
@@ -921,6 +921,7 @@
                                X509_free(s->session->peer);
                        s->session->peer=x509;
                        CRYPTO_add(&x509->references,1,CRYPTO_LOCK_X509);
+                       s->session->verify_result = s->verify_result;
                        ret=1;
                        goto end;
                        }
@@ -965,4 +966,10 @@
                SSLerr(SSL_F_SSL_RSA_PRIVATE_DECRYPT,ERR_R_RSA_LIB);
        return(i);
        }
+#else /* !NO_SSL2 */
+
+# if PEDANTIC
+static void *dummy=&dummy;
+# endif
+
 #endif
Index: opensa/openssl/ssl/s3_both.c
diff -u opensa/openssl/ssl/s3_both.c:1.1 opensa/openssl/ssl/s3_both.c:1.2
--- opensa/openssl/ssl/s3_both.c:1.1    Tue Jan 25 23:01:18 2000
+++ opensa/openssl/ssl/s3_both.c        Thu Mar  2 21:12:05 2000
@@ -55,7 +55,61 @@
  * copied and put under another distribution licence
  * [including the GNU Public Licence.]
  */
+/* ====================================================================
+ * Copyright (c) 1998-2000 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
+ *    [EMAIL PROTECTED]
+ *
+ * 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
+ * ([EMAIL PROTECTED]).  This product includes software written by Tim
+ * Hudson ([EMAIL PROTECTED]).
+ *
+ */
 
+#include <string.h>
 #include <stdio.h>
 #include <openssl/buffer.h>
 #include <openssl/rand.h>
@@ -63,9 +117,28 @@
 #include <openssl/evp.h>
 #include <openssl/x509.h>
 #include "ssl_locl.h"
+
+/* send s->init_buf in records of type 'type' */
+int ssl3_do_write(SSL *s, int type)
+       {
+       int ret;
+
+       ret=ssl3_write_bytes(s,type,&s->init_buf->data[s->init_off],
+                            s->init_num);
+       if (ret < 0) return(-1);
+       if (type == SSL3_RT_HANDSHAKE)
+               /* should not be done for 'Hello Request's, but in that case
+                * we'll ignore the result anyway */
+               ssl3_finish_mac(s,(unsigned char 
+*)&s->init_buf->data[s->init_off],ret);
+       
+       if (ret == s->init_num)
+               return(1);
+       s->init_off+=ret;
+       s->init_num-=ret;
+       return(0);
+       }
 
-int ssl3_send_finished(SSL *s, int a, int b, unsigned char *sender,
-            int slen)
+int ssl3_send_finished(SSL *s, int a, int b, const char *sender, int slen)
        {
        unsigned char *p,*d;
        int i;
@@ -79,7 +152,9 @@
                i=s->method->ssl3_enc->final_finish_mac(s,
                        &(s->s3->finish_dgst1),
                        &(s->s3->finish_dgst2),
-                       sender,slen,p);
+                       sender,slen,s->s3->tmp.finish_md);
+               s->s3->tmp.finish_md_len = i;
+               memcpy(p, s->s3->tmp.finish_md, i);
                p+=i;
                l=i;
 
@@ -109,7 +184,7 @@
        unsigned char *p;
 
        /* the mac has already been generated when we received the
-        * change cipher spec message and is in s->s3->tmp.in_dgst[12]
+        * change cipher spec message and is in s->s3->tmp.peer_finish_md
         */ 
 
        n=ssl3_get_message(s,
@@ -121,7 +196,7 @@
 
        if (!ok) return((int)n);
 
-       /* If this occurs if we has missed a message */
+       /* If this occurs, we have missed a message */
        if (!s->s3->change_cipher_spec)
                {
                al=SSL_AD_UNEXPECTED_MESSAGE;
@@ -129,10 +204,9 @@
                goto f_err;
                }
        s->s3->change_cipher_spec=0;
-
-       p=(unsigned char *)s->init_buf->data;
 
-       i=s->method->ssl3_enc->finish_mac_length;
+       p = (unsigned char *)s->init_buf->data;
+       i = s->s3->tmp.peer_finish_md_len;
 
        if (i != n)
                {
@@ -141,7 +215,7 @@
                goto f_err;
                }
 
-       if (memcmp(  p,    (char *)&(s->s3->tmp.finish_md[0]),i) != 0)
+       if (memcmp(p, s->s3->tmp.peer_finish_md, i) != 0)
                {
                al=SSL_AD_DECRYPT_ERROR;
                SSLerr(SSL_F_SSL3_GET_FINISHED,SSL_R_DIGEST_CHECK_FAILED);
@@ -255,6 +329,11 @@
        return(l);
        }
 
+/* Obtain handshake message of message type 'mt' (any if mt == -1),
+ * maximum acceptable body length 'max'.
+ * The first four bytes (msg_type and length) are read in state 'st1',
+ * the body is read in state 'stn'.
+ */
 long ssl3_get_message(SSL *s, int st1, int stn, int mt, long max, int *ok)
        {
        unsigned char *p;
@@ -277,22 +356,59 @@
 
        p=(unsigned char *)s->init_buf->data;
 
-       if (s->state == st1)
+       if (s->state == st1) /* s->init_num < 4 */
                {
-               i=ssl3_read_bytes(s,SSL3_RT_HANDSHAKE,&p[s->init_num],
-                                 4-s->init_num);
-               if (i < (4-s->init_num))
+               int skip_message;
+
+               do
                        {
-                       *ok=0;
-                       return(ssl3_part_read(s,i));
+                       while (s->init_num < 4)
+                               {
+                               i=ssl3_read_bytes(s,SSL3_RT_HANDSHAKE,&p[s->init_num],
+                                       4 - s->init_num);
+                               if (i <= 0)
+                                       {
+                                       s->rwstate=SSL_READING;
+                                       *ok = 0;
+                                       return i;
+                                       }
+                               s->init_num+=i;
+                               }
+                       
+                       skip_message = 0;
+                       if (!s->server)
+                               if (p[0] == SSL3_MT_HELLO_REQUEST)
+                                       /* The server may always send 'Hello Request' 
+messages --
+                                        * we are doing a handshake anyway now, so 
+ignore them
+                                        * if their format is correct. Does not count 
+for
+                                        * 'Finished' MAC. */
+                                       if (p[1] == 0 && p[2] == 0 &&p[3] == 0)
+                                               skip_message = 1;
                        }
+               while (skip_message);
 
+               /* s->init_num == 4 */
+
                if ((mt >= 0) && (*p != mt))
                        {
                        al=SSL_AD_UNEXPECTED_MESSAGE;
                        SSLerr(SSL_F_SSL3_GET_MESSAGE,SSL_R_UNEXPECTED_MESSAGE);
                        goto f_err;
                        }
+               if ((mt < 0) && (*p == SSL3_MT_CLIENT_HELLO) &&
+                                       (st1 == SSL3_ST_SR_CERT_A) &&
+                                       (stn == SSL3_ST_SR_CERT_B))
+                       {
+                       /* At this point we have got an MS SGC second client
+                        * hello (maybe we should always allow the client to
+                        * start a new handshake?). We need to restart the mac.
+                        * Don't increment {num,total}_renegotiations because
+                        * we have not completed the handshake. */
+                       ssl3_init_finished_mac(s);
+                       }
+
+               ssl3_finish_mac(s, (unsigned char *)s->init_buf->data, 4);
+                       
                s->s3->tmp.message_type= *(p++);
 
                n2l3(p,l);
@@ -316,17 +432,21 @@
        /* next state (stn) */
        p=(unsigned char *)s->init_buf->data;
        n=s->s3->tmp.message_size;
-       if (n > 0)
+       while (n > 0)
                {
                i=ssl3_read_bytes(s,SSL3_RT_HANDSHAKE,&p[s->init_num],n);
-               if (i != (int)n)
+               if (i <= 0)
                        {
-                       *ok=0;
-                       return(ssl3_part_read(s,i));
+                       s->rwstate=SSL_READING;
+                       *ok = 0;
+                       return i;
                        }
+               s->init_num += i;
+               n -= i;
                }
+       ssl3_finish_mac(s, (unsigned char *)s->init_buf->data, s->init_num);
        *ok=1;
-       return(n);
+       return s->init_num;
 f_err:
        ssl3_send_alert(s,SSL3_AL_FATAL,al);
 err:
@@ -447,7 +567,7 @@
                        extra=SSL3_RT_MAX_EXTRA;
                else
                        extra=0;
-               if ((p=(unsigned char *)Malloc(SSL3_RT_MAX_PACKET_SIZE+extra))
+               if ((p=Malloc(SSL3_RT_MAX_PACKET_SIZE+extra))
                        == NULL)
                        goto err;
                s->s3->rbuf.buf=p;
@@ -455,7 +575,7 @@
 
        if (s->s3->wbuf.buf == NULL)
                {
-               if ((p=(unsigned char *)Malloc(SSL3_RT_MAX_PACKET_SIZE))
+               if ((p=Malloc(SSL3_RT_MAX_PACKET_SIZE))
                        == NULL)
                        goto err;
                s->s3->wbuf.buf=p;
Index: opensa/openssl/ssl/s3_clnt.c
diff -u opensa/openssl/ssl/s3_clnt.c:1.1 opensa/openssl/ssl/s3_clnt.c:1.2
--- opensa/openssl/ssl/s3_clnt.c:1.1    Tue Jan 25 23:01:18 2000
+++ opensa/openssl/ssl/s3_clnt.c        Thu Mar  2 21:12:05 2000
@@ -110,7 +110,7 @@
        int ret= -1;
        int new_state,state,skip=0;;
 
-       RAND_seed(&Time,sizeof(Time));
+       RAND_add(&Time,sizeof(Time),0);
        ERR_clear_error();
        clear_sys_error();
 
@@ -325,8 +325,8 @@
                case SSL3_ST_CW_FINISHED_B:
                        ret=ssl3_send_finished(s,
                                SSL3_ST_CW_FINISHED_A,SSL3_ST_CW_FINISHED_B,
-                               s->method->ssl3_enc->client_finished,
-                               s->method->ssl3_enc->client_finished_len);
+                               s->method->ssl3_enc->client_finished_label,
+                               s->method->ssl3_enc->client_finished_label_len);
                        if (ret <= 0) goto end;
                        s->state=SSL3_ST_CW_FLUSH;
 
@@ -466,7 +466,7 @@
                p=s->s3->client_random;
                Time=time(NULL);                        /* Time */
                l2n(Time,p);
-               RAND_bytes(p,SSL3_RANDOM_SIZE-sizeof(Time));
+               RAND_pseudo_bytes(p,SSL3_RANDOM_SIZE-sizeof(Time));
 
                /* Do the message type and length last */
                d=p= &(buf[4]);
@@ -1053,15 +1053,15 @@
                                q+=i;
                                j+=i;
                                }
-                       i=RSA_public_decrypt((int)n,p,p,pkey->pkey.rsa,
-                               RSA_PKCS1_PADDING);
-                       if (i <= 0)
+                       i=RSA_verify(NID_md5_sha1, md_buf, j, p, n,
+                                                               pkey->pkey.rsa);
+                       if (i < 0)
                                {
                                al=SSL_AD_DECRYPT_ERROR;
                                
SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE,SSL_R_BAD_RSA_DECRYPT);
                                goto f_err;
                                }
-                       if ((j != i) || (memcmp(p,md_buf,i) != 0))
+                       if (i == 0)
                                {
                                /* bad signature */
                                al=SSL_AD_DECRYPT_ERROR;
@@ -1225,7 +1225,7 @@
 
                if ((xn=d2i_X509_NAME(NULL,&q,l)) == NULL)
                        {
-                       /* If netscape tollerance is on, ignore errors */
+                       /* If netscape tolerance is on, ignore errors */
                        if (s->options & SSL_OP_NETSCAPE_CA_DN_BUG)
                                goto cont;
                        else
@@ -1258,7 +1258,7 @@
                ERR_clear_error();
                }
 
-       /* we should setup a certficate to return.... */
+       /* we should setup a certificate to return.... */
        s->s3->tmp.cert_req=1;
        s->s3->tmp.ctype_num=ctype_num;
        if (s->s3->tmp.ca_names != NULL)
@@ -1341,7 +1341,8 @@
                                
                        tmp_buf[0]=s->client_version>>8;
                        tmp_buf[1]=s->client_version&0xff;
-                       RAND_bytes(&(tmp_buf[2]),SSL_MAX_MASTER_KEY_LENGTH-2);
+                       if (RAND_bytes(&(tmp_buf[2]),SSL_MAX_MASTER_KEY_LENGTH-2) <= 0)
+                                       goto err;
 
                        s->session->master_key_length=SSL_MAX_MASTER_KEY_LENGTH;
 
@@ -1460,7 +1461,7 @@
        unsigned char data[MD5_DIGEST_LENGTH+SHA_DIGEST_LENGTH];
        EVP_PKEY *pkey;
 #ifndef NO_RSA
-       int i=0;
+       unsigned u=0;
 #endif
        unsigned long n;
 #ifndef NO_DSA
@@ -1481,17 +1482,15 @@
                        {
                        s->method->ssl3_enc->cert_verify_mac(s,
                                &(s->s3->finish_dgst1),&(data[0]));
-                       i=RSA_private_encrypt(
-                               MD5_DIGEST_LENGTH+SHA_DIGEST_LENGTH,
-                               data,&(p[2]),pkey->pkey.rsa,
-                               RSA_PKCS1_PADDING);
-                       if (i <= 0)
+                       if (RSA_sign(NID_md5_sha1, data,
+                                        MD5_DIGEST_LENGTH+SHA_DIGEST_LENGTH,
+                                       &(p[2]), &u, pkey->pkey.rsa) <= 0 )
                                {
                                SSLerr(SSL_F_SSL3_SEND_CLIENT_VERIFY,ERR_R_RSA_LIB);
                                goto err;
                                }
-                       s2n(i,p);
-                       n=i+2;
+                       s2n(u,p);
+                       n=u+2;
                        }
                else
 #endif
@@ -1689,13 +1688,13 @@
 #endif
 #endif
 
-       if (SSL_IS_EXPORT(algs) && !has_bits(i,EVP_PKT_EXP))
+       if (SSL_C_IS_EXPORT(s->s3->tmp.new_cipher) && !has_bits(i,EVP_PKT_EXP))
                {
 #ifndef NO_RSA
                if (algs & SSL_kRSA)
                        {
                        if (rsa == NULL
-                           || RSA_size(rsa) > SSL_EXPORT_PKEYLENGTH(algs))
+                           || RSA_size(rsa) > 
+SSL_C_EXPORT_PKEYLENGTH(s->s3->tmp.new_cipher))
                                {
                                
SSLerr(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM,SSL_R_MISSING_EXPORT_TMP_RSA_KEY);
                                goto f_err;
@@ -1707,7 +1706,7 @@
                        if (algs & (SSL_kEDH|SSL_kDHr|SSL_kDHd))
                            {
                            if (dh == NULL
-                               || DH_size(dh) > SSL_EXPORT_PKEYLENGTH(algs))
+                               || DH_size(dh) > 
+SSL_C_EXPORT_PKEYLENGTH(s->s3->tmp.new_cipher))
                                {
                                
SSLerr(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM,SSL_R_MISSING_EXPORT_TMP_DH_KEY);
                                goto f_err;
Index: opensa/openssl/ssl/s3_enc.c
diff -u opensa/openssl/ssl/s3_enc.c:1.1 opensa/openssl/ssl/s3_enc.c:1.2
--- opensa/openssl/ssl/s3_enc.c:1.1     Tue Jan 25 23:01:18 2000
+++ opensa/openssl/ssl/s3_enc.c Thu Mar  2 21:12:05 2000
@@ -78,12 +78,8 @@
        0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,
        0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c };
 
-#ifndef NO_PROTO
 static int ssl3_handshake_mac(SSL *s, EVP_MD_CTX *in_ctx,
-       unsigned char *sender, int len, unsigned char *p);
-#else
-static int ssl3_handshake_mac();
-#endif
+       const char *sender, int len, unsigned char *p);
 
 static void ssl3_generate_key_block(SSL *s, unsigned char *km, int num)
        {
@@ -304,7 +300,7 @@
 
        ssl3_cleanup_key_block(s);
 
-       if ((p=(unsigned char *)Malloc(num)) == NULL)
+       if ((p=Malloc(num)) == NULL)
                goto err;
 
        s->s3->tmp.key_block_length=num;
@@ -416,7 +412,7 @@
        }
 
 int ssl3_final_finish_mac(SSL *s, EVP_MD_CTX *ctx1, EVP_MD_CTX *ctx2,
-            unsigned char *sender, int len, unsigned char *p)
+            const char *sender, int len, unsigned char *p)
        {
        int ret;
 
@@ -427,7 +423,7 @@
        }
 
 static int ssl3_handshake_mac(SSL *s, EVP_MD_CTX *in_ctx,
-            unsigned char *sender, int len, unsigned char *p)
+            const char *sender, int len, unsigned char *p)
        {
        unsigned int ret;
        int npad,n;
@@ -447,7 +443,7 @@
        EVP_DigestUpdate(&ctx,ssl3_pad_1,npad);
        EVP_DigestFinal(&ctx,md_buf,&i);
 
-       EVP_DigestInit(&ctx,EVP_MD_CTX_type(&ctx));
+       EVP_DigestInit(&ctx,EVP_MD_CTX_md(&ctx));
        EVP_DigestUpdate(&ctx,s->session->master_key,
                s->session->master_key_length);
        EVP_DigestUpdate(&ctx,ssl3_pad_2,npad);
@@ -575,11 +571,11 @@
        case SSL_AD_ACCESS_DENIED:      return(SSL3_AD_HANDSHAKE_FAILURE);
        case SSL_AD_DECODE_ERROR:       return(SSL3_AD_HANDSHAKE_FAILURE);
        case SSL_AD_DECRYPT_ERROR:      return(SSL3_AD_HANDSHAKE_FAILURE);
-       case SSL_AD_EXPORT_RESTRICION:  return(SSL3_AD_HANDSHAKE_FAILURE);
+       case SSL_AD_EXPORT_RESTRICTION: return(SSL3_AD_HANDSHAKE_FAILURE);
        case SSL_AD_PROTOCOL_VERSION:   return(SSL3_AD_HANDSHAKE_FAILURE);
        case SSL_AD_INSUFFICIENT_SECURITY:return(SSL3_AD_HANDSHAKE_FAILURE);
        case SSL_AD_INTERNAL_ERROR:     return(SSL3_AD_HANDSHAKE_FAILURE);
-       case SSL_AD_USER_CANCLED:       return(SSL3_AD_HANDSHAKE_FAILURE);
+       case SSL_AD_USER_CANCELLED:     return(SSL3_AD_HANDSHAKE_FAILURE);
        case SSL_AD_NO_RENEGOTIATION:   return(-1); /* Don't send it :-) */
        default:                        return(-1);
                }
Index: opensa/openssl/ssl/s3_lib.c
diff -u opensa/openssl/ssl/s3_lib.c:1.1 opensa/openssl/ssl/s3_lib.c:1.2
--- opensa/openssl/ssl/s3_lib.c:1.1     Tue Jan 25 23:01:18 2000
+++ opensa/openssl/ssl/s3_lib.c Thu Mar  2 21:12:05 2000
@@ -75,18 +75,26 @@
        1,
        SSL3_TXT_RSA_NULL_MD5,
        SSL3_CK_RSA_NULL_MD5,
-       SSL_kRSA|SSL_aRSA|SSL_eNULL |SSL_MD5|SSL_NOT_EXP|SSL_SSLV3,
+       SSL_kRSA|SSL_aRSA|SSL_eNULL |SSL_MD5|SSL_SSLV3,
+       SSL_NOT_EXP,
        0,
+       0,
+       0,
        SSL_ALL_CIPHERS,
+       SSL_ALL_STRENGTHS,
        },
 /* Cipher 02 */
        {
        1,
        SSL3_TXT_RSA_NULL_SHA,
        SSL3_CK_RSA_NULL_SHA,
-       SSL_kRSA|SSL_aRSA|SSL_eNULL |SSL_SHA1|SSL_NOT_EXP|SSL_SSLV3,
+       SSL_kRSA|SSL_aRSA|SSL_eNULL |SSL_SHA1|SSL_SSLV3,
+       SSL_NOT_EXP,
+       0,
+       0,
        0,
        SSL_ALL_CIPHERS,
+       SSL_ALL_STRENGTHS,
        },
 
 /* anon DH */
@@ -95,45 +103,65 @@
        1,
        SSL3_TXT_ADH_RC4_40_MD5,
        SSL3_CK_ADH_RC4_40_MD5,
-       SSL_kEDH |SSL_aNULL|SSL_RC4  |SSL_MD5 |SSL_EXP40|SSL_SSLV3,
+       SSL_kEDH |SSL_aNULL|SSL_RC4  |SSL_MD5 |SSL_SSLV3,
+       SSL_EXPORT|SSL_EXP40,
        0,
+       40,
+       128,
        SSL_ALL_CIPHERS,
+       SSL_ALL_STRENGTHS,
        },
 /* Cipher 18 */
        {
        1,
        SSL3_TXT_ADH_RC4_128_MD5,
        SSL3_CK_ADH_RC4_128_MD5,
-       SSL_kEDH |SSL_aNULL|SSL_RC4  |SSL_MD5|SSL_NOT_EXP|SSL_SSLV3,
+       SSL_kEDH |SSL_aNULL|SSL_RC4  |SSL_MD5 |SSL_SSLV3,
+       SSL_NOT_EXP,
        0,
+       128,
+       128,
        SSL_ALL_CIPHERS,
+       SSL_ALL_STRENGTHS,
        },
 /* Cipher 19 */
        {
        1,
        SSL3_TXT_ADH_DES_40_CBC_SHA,
        SSL3_CK_ADH_DES_40_CBC_SHA,
-       SSL_kEDH |SSL_aNULL|SSL_DES|SSL_SHA1|SSL_EXP40|SSL_SSLV3,
+       SSL_kEDH |SSL_aNULL|SSL_DES|SSL_SHA1|SSL_SSLV3,
+       SSL_EXPORT|SSL_EXP40,
        0,
+       40,
+       128,
        SSL_ALL_CIPHERS,
+       SSL_ALL_STRENGTHS,
        },
 /* Cipher 1A */
        {
        1,
        SSL3_TXT_ADH_DES_64_CBC_SHA,
        SSL3_CK_ADH_DES_64_CBC_SHA,
-       SSL_kEDH |SSL_aNULL|SSL_DES  |SSL_SHA1|SSL_NOT_EXP|SSL_SSLV3,
+       SSL_kEDH |SSL_aNULL|SSL_DES  |SSL_SHA1|SSL_SSLV3,
+       SSL_NOT_EXP,
        0,
+       56,
+       56,
        SSL_ALL_CIPHERS,
+       SSL_ALL_STRENGTHS,
        },
 /* Cipher 1B */
        {
        1,
        SSL3_TXT_ADH_DES_192_CBC_SHA,
        SSL3_CK_ADH_DES_192_CBC_SHA,
-       SSL_kEDH |SSL_aNULL|SSL_3DES |SSL_SHA1|SSL_NOT_EXP|SSL_SSLV3,
+       SSL_kEDH |SSL_aNULL|SSL_3DES |SSL_SHA1|SSL_SSLV3,
+       SSL_NOT_EXP,
        0,
+       168,
+       168,
        SSL_ALL_CIPHERS,
+       SSL_ALL_STRENGTHS,
        },
 
 /* RSA again */
@@ -142,72 +170,104 @@
        1,
        SSL3_TXT_RSA_RC4_40_MD5,
        SSL3_CK_RSA_RC4_40_MD5,
-       SSL_kRSA|SSL_aRSA|SSL_RC4  |SSL_MD5 |SSL_EXP40|SSL_SSLV3,
+       SSL_kRSA|SSL_aRSA|SSL_RC4  |SSL_MD5 |SSL_SSLV3,
+       SSL_EXPORT|SSL_EXP40,
        0,
+       40,
+       128,
        SSL_ALL_CIPHERS,
+       SSL_ALL_STRENGTHS,
        },
 /* Cipher 04 */
        {
        1,
        SSL3_TXT_RSA_RC4_128_MD5,
        SSL3_CK_RSA_RC4_128_MD5,
-       SSL_kRSA|SSL_aRSA|SSL_RC4  |SSL_MD5|SSL_NOT_EXP|SSL_SSLV3|SSL_MEDIUM,
+       SSL_kRSA|SSL_aRSA|SSL_RC4  |SSL_MD5|SSL_SSLV3,
+       SSL_NOT_EXP|SSL_MEDIUM,
        0,
+       128,
+       128,
        SSL_ALL_CIPHERS,
+       SSL_ALL_STRENGTHS,
        },
 /* Cipher 05 */
        {
        1,
        SSL3_TXT_RSA_RC4_128_SHA,
        SSL3_CK_RSA_RC4_128_SHA,
-       SSL_kRSA|SSL_aRSA|SSL_RC4  |SSL_SHA1|SSL_NOT_EXP|SSL_SSLV3|SSL_MEDIUM,
+       SSL_kRSA|SSL_aRSA|SSL_RC4  |SSL_SHA1|SSL_SSLV3,
+       SSL_NOT_EXP|SSL_MEDIUM,
        0,
+       128,
+       128,
        SSL_ALL_CIPHERS,
+       SSL_ALL_STRENGTHS,
        },
 /* Cipher 06 */
        {
        1,
        SSL3_TXT_RSA_RC2_40_MD5,
        SSL3_CK_RSA_RC2_40_MD5,
-       SSL_kRSA|SSL_aRSA|SSL_RC2  |SSL_MD5 |SSL_EXP40|SSL_SSLV3,
+       SSL_kRSA|SSL_aRSA|SSL_RC2  |SSL_MD5 |SSL_SSLV3,
+       SSL_EXPORT|SSL_EXP40,
        0,
+       40,
+       128,
        SSL_ALL_CIPHERS,
+       SSL_ALL_STRENGTHS,
        },
 /* Cipher 07 */
        {
        1,
        SSL3_TXT_RSA_IDEA_128_SHA,
        SSL3_CK_RSA_IDEA_128_SHA,
-       SSL_kRSA|SSL_aRSA|SSL_IDEA |SSL_SHA1|SSL_NOT_EXP|SSL_SSLV3|SSL_MEDIUM,
+       SSL_kRSA|SSL_aRSA|SSL_IDEA |SSL_SHA1|SSL_SSLV3,
+       SSL_NOT_EXP|SSL_MEDIUM,
        0,
+       128,
+       128,
        SSL_ALL_CIPHERS,
+       SSL_ALL_STRENGTHS,
        },
 /* Cipher 08 */
        {
        1,
        SSL3_TXT_RSA_DES_40_CBC_SHA,
        SSL3_CK_RSA_DES_40_CBC_SHA,
-       SSL_kRSA|SSL_aRSA|SSL_DES|SSL_SHA1|SSL_EXP40|SSL_SSLV3,
+       SSL_kRSA|SSL_aRSA|SSL_DES|SSL_SHA1|SSL_SSLV3,
+       SSL_EXPORT|SSL_EXP40,
        0,
+       40,
+       56,
        SSL_ALL_CIPHERS,
+       SSL_ALL_STRENGTHS,
        },
 /* Cipher 09 */
        {
        1,
        SSL3_TXT_RSA_DES_64_CBC_SHA,
        SSL3_CK_RSA_DES_64_CBC_SHA,
-       SSL_kRSA|SSL_aRSA|SSL_DES  |SSL_SHA1|SSL_NOT_EXP|SSL_SSLV3|SSL_LOW,
+       SSL_kRSA|SSL_aRSA|SSL_DES  |SSL_SHA1|SSL_SSLV3,
+       SSL_NOT_EXP|SSL_LOW,
        0,
+       56,
+       56,
        SSL_ALL_CIPHERS,
+       SSL_ALL_STRENGTHS,
        },
 /* Cipher 0A */
        {
        1,
        SSL3_TXT_RSA_DES_192_CBC3_SHA,
        SSL3_CK_RSA_DES_192_CBC3_SHA,
-       SSL_kRSA|SSL_aRSA|SSL_3DES |SSL_SHA1|SSL_NOT_EXP|SSL_SSLV3|SSL_HIGH,
+       SSL_kRSA|SSL_aRSA|SSL_3DES |SSL_SHA1|SSL_SSLV3,
+       SSL_NOT_EXP|SSL_HIGH,
        0,
+       168,
+       168,
        SSL_ALL_CIPHERS,
+       SSL_ALL_STRENGTHS,
        },
 
 /*  The DH ciphers */
@@ -216,54 +276,78 @@
        0,
        SSL3_TXT_DH_DSS_DES_40_CBC_SHA,
        SSL3_CK_DH_DSS_DES_40_CBC_SHA,
-       SSL_kDHd |SSL_aDH|SSL_DES|SSL_SHA1|SSL_EXP40|SSL_SSLV3,
+       SSL_kDHd |SSL_aDH|SSL_DES|SSL_SHA1|SSL_SSLV3,
+       SSL_EXPORT|SSL_EXP40,
        0,
+       40,
+       56,
        SSL_ALL_CIPHERS,
+       SSL_ALL_STRENGTHS,
        },
 /* Cipher 0C */
        {
        0,
        SSL3_TXT_DH_DSS_DES_64_CBC_SHA,
        SSL3_CK_DH_DSS_DES_64_CBC_SHA,
-       SSL_kDHd |SSL_aDH|SSL_DES  |SSL_SHA1|SSL_NOT_EXP|SSL_SSLV3|SSL_LOW,
+       SSL_kDHd |SSL_aDH|SSL_DES  |SSL_SHA1|SSL_SSLV3,
+       SSL_NOT_EXP|SSL_LOW,
        0,
+       56,
+       56,
        SSL_ALL_CIPHERS,
+       SSL_ALL_STRENGTHS,
        },
 /* Cipher 0D */
        {
        0,
        SSL3_TXT_DH_DSS_DES_192_CBC3_SHA,
        SSL3_CK_DH_DSS_DES_192_CBC3_SHA,
-       SSL_kDHd |SSL_aDH|SSL_3DES |SSL_SHA1|SSL_NOT_EXP|SSL_SSLV3|SSL_HIGH,
+       SSL_kDHd |SSL_aDH|SSL_3DES |SSL_SHA1|SSL_SSLV3,
+       SSL_NOT_EXP|SSL_HIGH,
        0,
+       168,
+       168,
        SSL_ALL_CIPHERS,
+       SSL_ALL_STRENGTHS,
        },
 /* Cipher 0E */
        {
        0,
        SSL3_TXT_DH_RSA_DES_40_CBC_SHA,
        SSL3_CK_DH_RSA_DES_40_CBC_SHA,
-       SSL_kDHr |SSL_aDH|SSL_DES|SSL_SHA1|SSL_EXP40|SSL_SSLV3,
+       SSL_kDHr |SSL_aDH|SSL_DES|SSL_SHA1|SSL_SSLV3,
+       SSL_EXPORT|SSL_EXP40,
        0,
+       40,
+       56,
        SSL_ALL_CIPHERS,
+       SSL_ALL_STRENGTHS,
        },
 /* Cipher 0F */
        {
        0,
        SSL3_TXT_DH_RSA_DES_64_CBC_SHA,
        SSL3_CK_DH_RSA_DES_64_CBC_SHA,
-       SSL_kDHr |SSL_aDH|SSL_DES  |SSL_SHA1|SSL_NOT_EXP|SSL_SSLV3|SSL_LOW,
+       SSL_kDHr |SSL_aDH|SSL_DES  |SSL_SHA1|SSL_SSLV3,
+       SSL_NOT_EXP|SSL_LOW,
        0,
+       56,
+       56,
        SSL_ALL_CIPHERS,
+       SSL_ALL_STRENGTHS,
        },
 /* Cipher 10 */
        {
        0,
        SSL3_TXT_DH_RSA_DES_192_CBC3_SHA,
        SSL3_CK_DH_RSA_DES_192_CBC3_SHA,
-       SSL_kDHr |SSL_aDH|SSL_3DES |SSL_SHA1|SSL_NOT_EXP|SSL_SSLV3|SSL_HIGH,
+       SSL_kDHr |SSL_aDH|SSL_3DES |SSL_SHA1|SSL_SSLV3,
+       SSL_NOT_EXP|SSL_HIGH,
        0,
+       168,
+       168,
        SSL_ALL_CIPHERS,
+       SSL_ALL_STRENGTHS,
        },
 
 /* The Ephemeral DH ciphers */
@@ -272,54 +356,78 @@
        1,
        SSL3_TXT_EDH_DSS_DES_40_CBC_SHA,
        SSL3_CK_EDH_DSS_DES_40_CBC_SHA,
-       SSL_kEDH|SSL_aDSS|SSL_DES|SSL_SHA1|SSL_EXP40|SSL_SSLV3,
+       SSL_kEDH|SSL_aDSS|SSL_DES|SSL_SHA1|SSL_SSLV3,
+       SSL_EXPORT|SSL_EXP40,
        0,
+       40,
+       56,
        SSL_ALL_CIPHERS,
+       SSL_ALL_STRENGTHS,
        },
 /* Cipher 12 */
        {
        1,
        SSL3_TXT_EDH_DSS_DES_64_CBC_SHA,
        SSL3_CK_EDH_DSS_DES_64_CBC_SHA,
-       SSL_kEDH|SSL_aDSS|SSL_DES  |SSL_SHA1|SSL_NOT_EXP|SSL_SSLV3|SSL_LOW,
+       SSL_kEDH|SSL_aDSS|SSL_DES  |SSL_SHA1|SSL_SSLV3,
+       SSL_NOT_EXP|SSL_LOW,
        0,
+       56,
+       56,
        SSL_ALL_CIPHERS,
+       SSL_ALL_STRENGTHS,
        },
 /* Cipher 13 */
        {
        1,
        SSL3_TXT_EDH_DSS_DES_192_CBC3_SHA,
        SSL3_CK_EDH_DSS_DES_192_CBC3_SHA,
-       SSL_kEDH|SSL_aDSS|SSL_3DES |SSL_SHA1|SSL_NOT_EXP|SSL_SSLV3|SSL_HIGH,
+       SSL_kEDH|SSL_aDSS|SSL_3DES |SSL_SHA1|SSL_SSLV3,
+       SSL_NOT_EXP|SSL_HIGH,
        0,
+       168,
+       168,
        SSL_ALL_CIPHERS,
+       SSL_ALL_STRENGTHS,
        },
 /* Cipher 14 */
        {
        1,
        SSL3_TXT_EDH_RSA_DES_40_CBC_SHA,
        SSL3_CK_EDH_RSA_DES_40_CBC_SHA,
-       SSL_kEDH|SSL_aRSA|SSL_DES|SSL_SHA1|SSL_EXP40|SSL_SSLV3,
+       SSL_kEDH|SSL_aRSA|SSL_DES|SSL_SHA1|SSL_SSLV3,
+       SSL_EXPORT|SSL_EXP40,
        0,
+       40,
+       56,
        SSL_ALL_CIPHERS,
+       SSL_ALL_STRENGTHS,
        },
 /* Cipher 15 */
        {
        1,
        SSL3_TXT_EDH_RSA_DES_64_CBC_SHA,
        SSL3_CK_EDH_RSA_DES_64_CBC_SHA,
-       SSL_kEDH|SSL_aRSA|SSL_DES  |SSL_SHA1|SSL_NOT_EXP|SSL_SSLV3|SSL_LOW,
+       SSL_kEDH|SSL_aRSA|SSL_DES  |SSL_SHA1|SSL_SSLV3,
+       SSL_NOT_EXP|SSL_LOW,
        0,
+       56,
+       56,
        SSL_ALL_CIPHERS,
+       SSL_ALL_STRENGTHS,
        },
 /* Cipher 16 */
        {
        1,
        SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA,
        SSL3_CK_EDH_RSA_DES_192_CBC3_SHA,
-       SSL_kEDH|SSL_aRSA|SSL_3DES |SSL_SHA1|SSL_NOT_EXP|SSL_SSLV3|SSL_HIGH,
+       SSL_kEDH|SSL_aRSA|SSL_3DES |SSL_SHA1|SSL_SSLV3,
+       SSL_NOT_EXP|SSL_HIGH,
        0,
+       168,
+       168,
        SSL_ALL_CIPHERS,
+       SSL_ALL_STRENGTHS,
        },
 
 /* Fortezza */
@@ -328,9 +436,13 @@
        0,
        SSL3_TXT_FZA_DMS_NULL_SHA,
        SSL3_CK_FZA_DMS_NULL_SHA,
-       SSL_kFZA|SSL_aFZA |SSL_eNULL |SSL_SHA1|SSL_NOT_EXP|SSL_SSLV3,
+       SSL_kFZA|SSL_aFZA |SSL_eNULL |SSL_SHA1|SSL_SSLV3,
+       SSL_NOT_EXP,
        0,
+       0,
+       0,
        SSL_ALL_CIPHERS,
+       SSL_ALL_STRENGTHS,
        },
 
 /* Cipher 1D */
@@ -338,9 +450,13 @@
        0,
        SSL3_TXT_FZA_DMS_FZA_SHA,
        SSL3_CK_FZA_DMS_FZA_SHA,
-       SSL_kFZA|SSL_aFZA |SSL_eFZA |SSL_SHA1|SSL_NOT_EXP|SSL_SSLV3,
+       SSL_kFZA|SSL_aFZA |SSL_eFZA |SSL_SHA1|SSL_SSLV3,
+       SSL_NOT_EXP,
+       0,
        0,
+       0,
        SSL_ALL_CIPHERS,
+       SSL_ALL_STRENGTHS,
        },
 
 /* Cipher 1E */
@@ -348,9 +464,13 @@
        0,
        SSL3_TXT_FZA_DMS_RC4_SHA,
        SSL3_CK_FZA_DMS_RC4_SHA,
-       SSL_kFZA|SSL_aFZA |SSL_RC4  |SSL_SHA1|SSL_NOT_EXP|SSL_SSLV3,
+       SSL_kFZA|SSL_aFZA |SSL_RC4  |SSL_SHA1|SSL_SSLV3,
+       SSL_NOT_EXP,
        0,
+       128,
+       128,
        SSL_ALL_CIPHERS,
+       SSL_ALL_STRENGTHS,
        },
 
 #if TLS1_ALLOW_EXPERIMENTAL_CIPHERSUITES
@@ -360,54 +480,78 @@
            1,
            TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_MD5,
            TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_MD5,
-           SSL_kRSA|SSL_aRSA|SSL_RC4|SSL_MD5|SSL_EXP56|SSL_TLSV1,
+           SSL_kRSA|SSL_aRSA|SSL_RC4|SSL_MD5|SSL_TLSV1,
+           SSL_EXPORT|SSL_EXP56,
            0,
-           SSL_ALL_CIPHERS
+           56,
+           128,
+           SSL_ALL_CIPHERS,
+           SSL_ALL_STRENGTHS,
            },
        /* Cipher 61 */
            {
            1,
            TLS1_TXT_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5,
            TLS1_CK_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5,
-           SSL_kRSA|SSL_aRSA|SSL_RC2|SSL_MD5|SSL_EXP56|SSL_TLSV1,
+           SSL_kRSA|SSL_aRSA|SSL_RC2|SSL_MD5|SSL_TLSV1,
+           SSL_EXPORT|SSL_EXP56,
            0,
-           SSL_ALL_CIPHERS
+           56,
+           128,
+           SSL_ALL_CIPHERS,
+           SSL_ALL_STRENGTHS,
            },
        /* Cipher 62 */
            {
            1,
            TLS1_TXT_RSA_EXPORT1024_WITH_DES_CBC_SHA,
            TLS1_CK_RSA_EXPORT1024_WITH_DES_CBC_SHA,
-           SSL_kRSA|SSL_aRSA|SSL_DES|SSL_SHA|SSL_EXP56|SSL_TLSV1,
+           SSL_kRSA|SSL_aRSA|SSL_DES|SSL_SHA|SSL_TLSV1,
+           SSL_EXPORT|SSL_EXP56,
            0,
-           SSL_ALL_CIPHERS
+           56,
+           56,
+           SSL_ALL_CIPHERS,
+           SSL_ALL_STRENGTHS,
            },
        /* Cipher 63 */
            {
            1,
            TLS1_TXT_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA,
            TLS1_CK_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA,
-           SSL_kEDH|SSL_aDSS|SSL_DES|SSL_SHA|SSL_EXP56|SSL_TLSV1,
+           SSL_kEDH|SSL_aDSS|SSL_DES|SSL_SHA|SSL_TLSV1,
+           SSL_EXPORT|SSL_EXP56,
            0,
-           SSL_ALL_CIPHERS
+           56,
+           56,
+           SSL_ALL_CIPHERS,
+           SSL_ALL_STRENGTHS,
            },
        /* Cipher 64 */
            {
            1,
            TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_SHA,
            TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_SHA,
-           SSL_kRSA|SSL_aRSA|SSL_RC4|SSL_SHA|SSL_EXP56|SSL_TLSV1,
+           SSL_kRSA|SSL_aRSA|SSL_RC4|SSL_SHA|SSL_TLSV1,
+           SSL_EXPORT|SSL_EXP56,
            0,
-           SSL_ALL_CIPHERS
+           56,
+           128,
+           SSL_ALL_CIPHERS,
+           SSL_ALL_STRENGTHS,
            },
        /* Cipher 65 */
            {
            1,
            TLS1_TXT_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA,
            TLS1_CK_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA,
-           SSL_kEDH|SSL_aDSS|SSL_RC4|SSL_SHA|SSL_EXP56|SSL_TLSV1,
+           SSL_kEDH|SSL_aDSS|SSL_RC4|SSL_SHA|SSL_TLSV1,
+           SSL_EXPORT|SSL_EXP56,
            0,
-           SSL_ALL_CIPHERS
+           56,
+           128,
+           SSL_ALL_CIPHERS,
+           SSL_ALL_STRENGTHS,
            },
        /* Cipher 66 */
            {
@@ -415,8 +559,12 @@
            TLS1_TXT_DHE_DSS_WITH_RC4_128_SHA,
            TLS1_CK_DHE_DSS_WITH_RC4_128_SHA,
            SSL_kEDH|SSL_aDSS|SSL_RC4|SSL_SHA|SSL_TLSV1,
+           SSL_NOT_EXP,
            0,
-           SSL_ALL_CIPHERS
+           128,
+           128,
+           SSL_ALL_CIPHERS,
+           SSL_ALL_STRENGTHS
            },
 #endif
 
@@ -460,6 +608,9 @@
        ssl_bad_method,
        ssl3_default_timeout,
        &SSLv3_enc_data,
+       ssl_undefined_function,
+       ssl3_callback_ctrl,
+       ssl3_ctx_callback_ctrl,
        };
 
 static long ssl3_default_timeout(void)
@@ -495,19 +646,12 @@
 
 int ssl3_new(SSL *s)
        {
-       SSL3_CTX *s3;
+       SSL3_STATE *s3;
 
-       if ((s3=(SSL3_CTX *)Malloc(sizeof(SSL3_CTX))) == NULL) goto err;
-       memset(s3,0,sizeof(SSL3_CTX));
+       if ((s3=Malloc(sizeof *s3)) == NULL) goto err;
+       memset(s3,0,sizeof *s3);
 
        s->s3=s3;
-       /*
-       s->s3->tmp.ca_names=NULL;
-       s->s3->tmp.key_block=NULL;
-       s->s3->tmp.key_block_length=0;
-       s->s3->rbuf.buf=NULL;
-       s->s3->wbuf.buf=NULL;
-       */
 
        s->method->ssl_clear(s);
        return(1);
@@ -533,7 +677,7 @@
 #endif
        if (s->s3->tmp.ca_names != NULL)
                sk_X509_NAME_pop_free(s->s3->tmp.ca_names,X509_NAME_free);
-       memset(s->s3,0,sizeof(SSL3_CTX));
+       memset(s->s3,0,sizeof *s->s3);
        Free(s->s3);
        s->s3=NULL;
        }
@@ -551,11 +695,15 @@
                Free(s->s3->rrec.comp);
                s->s3->rrec.comp=NULL;
                }
+#ifndef NO_DH
+       if (s->s3->tmp.dh != NULL)
+               DH_free(s->s3->tmp.dh);
+#endif
 
        rp=s->s3->rbuf.buf;
        wp=s->s3->wbuf.buf;
 
-       memset(s->s3,0,sizeof(SSL3_CTX));
+       memset(s->s3,0,sizeof *s->s3);
        if (rp != NULL) s->s3->rbuf.buf=rp;
        if (wp != NULL) s->s3->wbuf.buf=wp;
 
@@ -638,7 +786,10 @@
                }
                break;
        case SSL_CTRL_SET_TMP_RSA_CB:
-               s->cert->rsa_tmp_cb = (RSA *(*)(SSL *, int, int))parg;
+               {
+               SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
+               return(ret);
+               }
                break;
 #endif
 #ifndef NO_DH
@@ -665,7 +816,10 @@
                }
                break;
        case SSL_CTRL_SET_TMP_DH_CB:
-               s->cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))parg;
+               {
+               SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
+               return(ret);
+               }
                break;
 #endif
        default:
@@ -674,6 +828,50 @@
        return(ret);
        }
 
+long ssl3_callback_ctrl(SSL *s, int cmd, void (*fp)())
+       {
+       int ret=0;
+
+#if !defined(NO_DSA) || !defined(NO_RSA)
+       if (
+#ifndef NO_RSA
+           cmd == SSL_CTRL_SET_TMP_RSA_CB ||
+#endif
+#ifndef NO_DSA
+           cmd == SSL_CTRL_SET_TMP_DH_CB ||
+#endif
+               0)
+               {
+               if (!ssl_cert_inst(&s->cert))
+                       {
+                       SSLerr(SSL_F_SSL3_CTRL, ERR_R_MALLOC_FAILURE);
+                       return(0);
+                       }
+               }
+#endif
+
+       switch (cmd)
+               {
+#ifndef NO_RSA
+       case SSL_CTRL_SET_TMP_RSA_CB:
+               {
+               s->cert->rsa_tmp_cb = (RSA *(*)(SSL *, int, int))fp;
+               }
+               break;
+#endif
+#ifndef NO_DH
+       case SSL_CTRL_SET_TMP_DH_CB:
+               {
+               s->cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp;
+               }
+               break;
+#endif
+       default:
+               break;
+               }
+       return(ret);
+       }
+
 long ssl3_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, char *parg)
        {
        CERT *cert;
@@ -721,7 +919,10 @@
                }
                /* break; */
        case SSL_CTRL_SET_TMP_RSA_CB:
-               cert->rsa_tmp_cb=(RSA *(*)(SSL *, int, int))parg;
+               {
+               SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
+               return(0);
+               }
                break;
 #endif
 #ifndef NO_DH
@@ -748,7 +949,10 @@
                }
                /*break; */
        case SSL_CTRL_SET_TMP_DH_CB:
-               cert->dh_tmp_cb=(DH *(*)(SSL *, int, int))parg;
+               {
+               SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
+               return(0);
+               }
                break;
 #endif
        /* A Thawte special :-) */
@@ -767,6 +971,34 @@
        return(1);
        }
 
+long ssl3_ctx_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp)())
+       {
+       CERT *cert;
+
+       cert=ctx->cert;
+
+       switch (cmd)
+               {
+#ifndef NO_RSA
+       case SSL_CTRL_SET_TMP_RSA_CB:
+               {
+               cert->rsa_tmp_cb = (RSA *(*)(SSL *, int, int))fp;
+               }
+               break;
+#endif
+#ifndef NO_DH
+       case SSL_CTRL_SET_TMP_DH_CB:
+               {
+               cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp;
+               }
+               break;
+#endif
+       default:
+               return(0);
+               }
+       return(1);
+       }
+
 /* This function needs to check if the ciphers required are actually
  * available */
 SSL_CIPHER *ssl3_get_cipher_by_char(const unsigned char *p)
@@ -819,21 +1051,6 @@
        return(2);
        }
 
-int ssl3_part_read(SSL *s, int i)
-       {
-       s->rwstate=SSL_READING;
-
-       if (i < 0)
-               {
-               return(i);
-               }
-       else
-               {
-               s->init_num+=i;
-               return(0);
-               }
-       }
-
 SSL_CIPHER *ssl3_choose_cipher(SSL *s, STACK_OF(SSL_CIPHER) *have,
             STACK_OF(SSL_CIPHER) *pref)
        {
@@ -865,7 +1082,7 @@
                emask=cert->export_mask;
                        
                alg=c->algorithms&(SSL_MKEY_MASK|SSL_AUTH_MASK);
-               if (SSL_IS_EXPORT(c->algorithms))
+               if (SSL_C_IS_EXPORT(c))
                        {
                        ok=((alg & emask) == alg)?1:0;
 #ifdef CIPHER_DEBUG
@@ -1034,8 +1251,12 @@
        ret=ssl3_read_bytes(s,SSL3_RT_APPLICATION_DATA,buf,len);
        if ((ret == -1) && (s->s3->in_read_app_data == 0))
                {
-               ERR_get_error(); /* clear the error */
-               s->s3->in_read_app_data=0;
+               /* ssl3_read_bytes decided to call s->handshake_func, which
+                * called ssl3_read_bytes to read handshake data.
+                * However, ssl3_read_bytes actually found application data
+                * and thinks that application data makes sense here (signalled
+                * by resetting 'in_read_app_data', strangely); so disable
+                * handshake processing and try to read application data again. */
                s->in_handshake++;
                ret=ssl3_read_bytes(s,SSL3_RT_APPLICATION_DATA,buf,len);
                s->in_handshake--;
@@ -1092,7 +1313,7 @@
                        {
 /*
 if we are the server, and we have sent a 'RENEGOTIATE' message, we
-need to go to SSL_ST_ACCEPT.
+need to go to SSL_ST_ACCEPT.
 */
                        /* SSL_ST_ACCEPT */
                        s->state=SSL_ST_RENEGOTIATE;
Index: opensa/openssl/ssl/s3_pkt.c
diff -u opensa/openssl/ssl/s3_pkt.c:1.1 opensa/openssl/ssl/s3_pkt.c:1.2
--- opensa/openssl/ssl/s3_pkt.c:1.1     Tue Jan 25 23:01:18 2000
+++ opensa/openssl/ssl/s3_pkt.c Thu Mar  2 21:12:05 2000
@@ -55,6 +55,59 @@
  * copied and put under another distribution licence
  * [including the GNU Public Licence.]
  */
+/* ====================================================================
+ * Copyright (c) 1998-2000 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
+ *    [EMAIL PROTECTED]
+ *
+ * 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
+ * ([EMAIL PROTECTED]).  This product includes software written by Tim
+ * Hudson ([EMAIL PROTECTED]).
+ *
+ */
 
 #include <stdio.h>
 #include <errno.h>
@@ -71,104 +124,98 @@
 static int do_compress(SSL *ssl);
 static int do_uncompress(SSL *ssl);
 static int do_change_cipher_spec(SSL *ssl);
+
+/* used only by ssl3_get_record */
 static int ssl3_read_n(SSL *s, int n, int max, int extend)
        {
+       /* If extend == 0, obtain new n-byte packet; if extend == 1, increase
+        * packet by another n bytes.
+        * The packet will be in the sub-array of s->s3->rbuf.buf specified
+        * by s->packet and s->packet_length.
+        * (If s->read_ahead is set, 'max' bytes may be stored in rbuf
+        * [plus s->packet_length bytes if extend == 1].)
+        */
        int i,off,newb;
 
-       /* if there is stuff still in the buffer from a previous read,
-        * and there is more than we want, take some. */
+       if (!extend)
+               {
+               /* start with empty packet ... */
+               if (s->s3->rbuf.left == 0)
+                       s->s3->rbuf.offset = 0;
+               s->packet = s->s3->rbuf.buf + s->s3->rbuf.offset;
+               s->packet_length = 0;
+               /* ... now we can act as if 'extend' was set */
+               }
+
+       /* if there is enough in the buffer from a previous read, take some */
        if (s->s3->rbuf.left >= (int)n)
                {
-               if (extend)
-                       s->packet_length+=n;
-               else
-                       {
-                       s->packet= &(s->s3->rbuf.buf[s->s3->rbuf.offset]);
-                       s->packet_length=n;
-                       }
+               s->packet_length+=n;
                s->s3->rbuf.left-=n;
                s->s3->rbuf.offset+=n;
                return(n);
                }
 
        /* else we need to read more data */
-       if (!s->read_ahead) max=n;
-       if (max > SSL3_RT_MAX_PACKET_SIZE)
-               max=SSL3_RT_MAX_PACKET_SIZE;
-
-       /* First check if there is some left or we want to extend */
-       off=0;
-       if (    (s->s3->rbuf.left != 0) ||
-               ((s->packet_length != 0) && extend))
-               {
-               newb=s->s3->rbuf.left;
-               if (extend)
-                       {
-                       /* Copy bytes back to the front of the buffer 
-                        * Take the bytes already pointed to by 'packet'
-                        * and take the extra ones on the end. */
-                       off=s->packet_length;
-                       if (s->packet != s->s3->rbuf.buf)
-                               memcpy(s->s3->rbuf.buf,s->packet,newb+off);
-                       }
-               else if (s->s3->rbuf.offset != 0)
-                       { /* so the data is not at the start of the buffer */
-                       memcpy(s->s3->rbuf.buf,
-                               &(s->s3->rbuf.buf[s->s3->rbuf.offset]),newb);
-                       s->s3->rbuf.offset=0;
-                       }
+       if (!s->read_ahead)
+               max=n;
 
-               s->s3->rbuf.left=0;
+       {
+               /* avoid buffer overflow */
+               int max_max = SSL3_RT_MAX_PACKET_SIZE - s->packet_length;
+               if (s->options & SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER)
+                       max_max += SSL3_RT_MAX_EXTRA;
+               if (max > max_max)
+                       max = max_max;
+       }
+       if (n > max) /* does not happen */
+               {
+               SSLerr(SSL_F_SSL3_READ_N,SSL_R_INTERNAL_ERROR);
+               return -1;
                }
-       else
-               newb=0;
 
-       /* So we now have 'newb' bytes at the front of 
-        * s->s3->rbuf.buf and need to read some more in on the end
-        * We start reading into the buffer at 's->s3->rbuf.offset'
-        */
-       s->packet=s->s3->rbuf.buf;
+       off = s->packet_length;
+       newb = s->s3->rbuf.left;
+       /* Move any available bytes to front of buffer:
+        * 'off' bytes already pointed to by 'packet',
+        * 'newb' extra ones at the end */
+       if (s->packet != s->s3->rbuf.buf)
+               {
+               /*  off > 0 */
+               memmove(s->s3->rbuf.buf, s->packet, off+newb);
+               s->packet = s->s3->rbuf.buf;
+               }
 
        while (newb < n)
                {
+               /* Now we have off+newb bytes at the front of s->s3->rbuf.buf and need
+                * to read in more until we have off+n (up to off+max if possible) */
+
                clear_sys_error();
                if (s->rbio != NULL)
                        {
                        s->rwstate=SSL_READING;
-                       i=BIO_read(s->rbio,
-                               (char *)&(s->s3->rbuf.buf[off+newb]),
-                               max-newb);
+                       i=BIO_read(s->rbio,     &(s->s3->rbuf.buf[off+newb]), 
+max-newb);
                        }
                else
                        {
                        SSLerr(SSL_F_SSL3_READ_N,SSL_R_READ_BIO_NOT_SET);
-                       i= -1;
+                       i = -1;
                        }
 
                if (i <= 0)
                        {
-                       s->s3->rbuf.left+=newb;
+                       s->s3->rbuf.left = newb;
                        return(i);
                        }
                newb+=i;
                }
-
-       /* record used data read */
-       if (newb > n)
-               {
-               s->s3->rbuf.offset=n+off;
-               s->s3->rbuf.left=newb-n;
-               }
-       else
-               {
-               s->s3->rbuf.offset=0;
-               s->s3->rbuf.left=0;
-               }
 
-       if (extend)
-               s->packet_length+=n;
-       else
-               s->packet_length+=n;
+       /* done reading, now the book-keeping */
+       s->s3->rbuf.offset = off + n;
+       s->s3->rbuf.left = newb - n;
+       s->packet_length += n;
+       s->rwstate=SSL_NOTHING;
        return(n);
        }
 
@@ -176,15 +223,15 @@
  * It will return <= 0 if more data is needed, normally due to an error
  * or non-blocking IO.
  * When it finishes, one packet has been decoded and can be found in
- * ssl->s3->rrec.type  - is the type of record
- * ssl->s3->rrec.data,         - data
+ * ssl->s3->rrec.type    - is the type of record
+ * ssl->s3->rrec.data,          - data
  * ssl->s3->rrec.length, - number of bytes
  */
+/* used only by ssl3_read_bytes */
 static int ssl3_get_record(SSL *s)
        {
        int ssl_major,ssl_minor,al;
        int n,i,ret= -1;
-       SSL3_BUFFER *rb;
        SSL3_RECORD *rr;
        SSL_SESSION *sess;
        unsigned char *p;
@@ -194,7 +241,6 @@
        int clear=0,extra;
 
        rr= &(s->s3->rrec);
-       rb= &(s->s3->rbuf);
        sess=s->session;
 
        if (s->options & SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER)
@@ -253,27 +299,26 @@
                        goto f_err;
                        }
 
-               s->rstate=SSL_ST_READ_BODY;
+               /* now s->rstate == SSL_ST_READ_BODY */
                }
+
+       /* s->rstate == SSL_ST_READ_BODY, get and decode the data */
 
-       /* get and decode the data */
-       if (s->rstate == SSL_ST_READ_BODY)
+       if (rr->length > (s->packet_length-SSL3_RT_HEADER_LENGTH))
                {
-               if (rr->length > (s->packet_length-SSL3_RT_HEADER_LENGTH))
-                       {
-                       i=rr->length;
-                       /*-(s->packet_length-SSL3_RT_HEADER_LENGTH); */
-                       n=ssl3_read_n(s,i,i,1);
-                       if (n <= 0) return(n); /* error or non-blocking io */
-                       }
-               s->rstate=SSL_ST_READ_HEADER;
+               /* now s->packet_length == SSL3_RT_HEADER_LENGTH */
+               i=rr->length;
+               n=ssl3_read_n(s,i,i,1);
+               if (n <= 0) return(n); /* error or non-blocking io */
+               /* now n == rr->length,
+                * and s->packet_length == SSL3_RT_HEADER_LENGTH + rr->length */
                }
 
-       /* At this point, we have the data in s->packet and there should be
-        * s->packet_length bytes, we must not 'overrun' this buffer :-)
-        * One of the following functions will copy the data from the
-        * s->packet buffer */
+       s->rstate=SSL_ST_READ_HEADER; /* set state for later operations */
 
+       /* At this point, s->packet_length == SSL3_RT_HEADER_LNGTH + rr->length,
+        * and we have that many bytes in s->packet
+        */
        rr->input= &(s->packet[SSL3_RT_HEADER_LENGTH]);
 
        /* ok, we can now read from 's->packet' data into 'rr'
@@ -283,13 +328,10 @@
         * When the data is 'copied' into the rr->data buffer,
         * rr->input will be pointed at the new buffer */ 
 
-       /* Set the state for the following operations */
-       s->rstate=SSL_ST_READ_HEADER;
-
        /* We now have - encrypted [ MAC [ compressed [ plain ] ] ]
         * rr->length bytes of encrypted compressed stuff. */
 
-       /* check is not needed I belive */
+       /* check is not needed I believe */
        if (rr->length > (unsigned int)SSL3_RT_MAX_ENCRYPTED_LENGTH+extra)
                {
                al=SSL_AD_RECORD_OVERFLOW;
@@ -326,7 +368,7 @@
                        SSLerr(SSL_F_SSL3_GET_RECORD,SSL_R_PRE_MAC_LENGTH_TOO_LONG);
                        goto f_err;
                        }
-               /* check MAC for rr->input' */
+               /* check the MAC for rr->input (it's in mac_size bytes at the tail) */
                if (rr->length < mac_size)
                        {
                        al=SSL_AD_DECODE_ERROR;
@@ -426,12 +468,12 @@
        return(1);
        }
 
-/* Call this to write data
+/* Call this to write data in records of type 'type'
  * It will return <= 0 if not all data has been sent or non-blocking IO.
  */
-int ssl3_write_bytes(SSL *s, int type, const void *_buf, int len)
+int ssl3_write_bytes(SSL *s, int type, const void *buf_, int len)
        {
-       const unsigned char *buf=_buf;
+       const unsigned char *buf=buf_;
        unsigned int tot,n,nw;
        int i;
 
@@ -457,7 +499,7 @@
                        nw=SSL3_RT_MAX_PLAIN_LENGTH;
                else
                        nw=n;
-                       
+
                i=do_ssl3_write(s,type,&(buf[tot]),nw);
                if (i <= 0)
                        {
@@ -465,9 +507,6 @@
                        return(i);
                        }
 
-               if (type == SSL3_RT_HANDSHAKE)
-                       ssl3_finish_mac(s,&(buf[tot]),i);
-
                if ((i == (int)n) ||
                        (type == SSL3_RT_APPLICATION_DATA &&
                         (s->mode & SSL_MODE_ENABLE_PARTIAL_WRITE)))
@@ -502,9 +541,9 @@
                        return(i);
                /* if it went, fall through and send more stuff */
                }
+
+       if (len == 0) return(len);
 
-       if (len <= 0) return(len);
-       
        wr= &(s->s3->wrec);
        wb= &(s->s3->wbuf);
        sess=s->session;
@@ -527,11 +566,11 @@
 
        *(p++)=(s->version>>8);
        *(p++)=s->version&0xff;
-       
+
        /* record where we are to write out packet length */
        plen=p; 
        p+=2;
-       
+
        /* lets setup the record stuff. */
        wr->data=p;
        wr->length=(int)len;
@@ -638,19 +677,75 @@
                }
        }
 
+/* Return up to 'len' payload bytes received in 'type' records.
+ * 'type' is one of the following:
+ *
+ *   -  SSL3_RT_HANDSHAKE (when ssl3_get_message calls us)
+ *   -  SSL3_RT_APPLICATION_DATA (when ssl3_read calls us)
+ *   -  0 (during a shutdown, no data has to be returned)
+ *
+ * If we don't have stored data to work from, read a SSL/TLS record first
+ * (possibly multiple records if we still don't have anything to return).
+ *
+ * This function must handle any surprises the peer may have for us, such as
+ * Alert records (e.g. close_notify), ChangeCipherSpec records (not really
+ * a surprise, but handled as if it were), or renegotiation requests.
+ * Also if record payloads contain fragments too small to process, we store
+ * them until there is enough for the respective protocol (the record protocol
+ * may use arbitrary fragmentation and even interleaving):
+ *     Change cipher spec protocol
+ *             just 1 byte needed, no need for keeping anything stored
+ *     Alert protocol
+ *             2 bytes needed (AlertLevel, AlertDescription)
+ *     Handshake protocol
+ *             4 bytes needed (HandshakeType, uint24 length) -- we just have
+ *             to detect unexpected Client Hello and Hello Request messages
+ *             here, anything else is handled by higher layers
+ *     Application data protocol
+ *             none of our business
+ */
 int ssl3_read_bytes(SSL *s, int type, unsigned char *buf, int len)
        {
-       int al,i,j,n,ret;
+       int al,i,j,ret;
+       unsigned int n;
        SSL3_RECORD *rr;
        void (*cb)()=NULL;
-       BIO *bio;
 
-       if (s->s3->rbuf.buf == NULL) /* Not initialize yet */
+       if (s->s3->rbuf.buf == NULL) /* Not initialized yet */
                if (!ssl3_setup_buffers(s))
                        return(-1);
 
+       if ((type != SSL3_RT_APPLICATION_DATA) && (type != SSL3_RT_HANDSHAKE) && type)
+               {
+               SSLerr(SSL_F_SSL3_READ_BYTES, SSL_R_INTERNAL_ERROR);
+               return -1;
+               }
+
+       if ((type == SSL3_RT_HANDSHAKE) && (s->s3->handshake_fragment_len > 0))
+               /* (partially) satisfy request from storage */
+               {
+               unsigned char *src = s->s3->handshake_fragment;
+               unsigned char *dst = buf;
+               unsigned int k;
+
+               n = 0;
+               while ((len > 0) && (s->s3->handshake_fragment_len > 0))
+                       {
+                       *dst++ = *src++;
+                       len--; s->s3->handshake_fragment_len--;
+                       n++;
+                       }
+               /* move any remaining fragment bytes: */
+               for (k = 0; k < s->s3->handshake_fragment_len; k++)
+                       s->s3->handshake_fragment[k] = *src++;
+               return n;
+       }
+
+       /* Now s->s3->handshake_fragment_len == 0 if type == SSL3_RT_HANDSHAKE. */
+
        if (!s->in_handshake && SSL_in_init(s))
                {
+               /* type == SSL3_RT_APPLICATION_DATA */
                i=s->handshake_func(s);
                if (i < 0) return(i);
                if (i == 0)
@@ -662,11 +757,11 @@
 start:
        s->rwstate=SSL_NOTHING;
 
-       /* s->s3->rrec.type     - is the type of record
-        * s->s3->rrec.data,    - data
-        * s->s3->rrec.off,     - ofset into 'data' for next read
-        * s->s3->rrec.length,  - number of bytes. */
-       rr= &(s->s3->rrec);
+       /* s->s3->rrec.type         - is the type of record
+        * s->s3->rrec.data,    - data
+        * s->s3->rrec.off,     - offset into 'data' for next read
+        * s->s3->rrec.length,  - number of bytes. */
+       rr = &(s->s3->rrec);
 
        /* get new packet */
        if ((rr->length == 0) || (s->rstate == SSL_ST_READ_BODY))
@@ -677,7 +772,9 @@
 
        /* we now have a packet which can be read and processed */
 
-       if (s->s3->change_cipher_spec && (rr->type != SSL3_RT_HANDSHAKE))
+       if (s->s3->change_cipher_spec /* set when we receive ChangeCipherSpec,
+                                      * reset by ssl3_get_finished */
+               && (rr->type != SSL3_RT_HANDSHAKE))
                {
                al=SSL_AD_UNEXPECTED_MESSAGE;
                SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_DATA_BETWEEN_CCS_AND_FINISHED);
@@ -691,17 +788,99 @@
                s->rwstate=SSL_NOTHING;
                return(0);
                }
+
+
+       if (type == rr->type) /* SSL3_RT_APPLICATION_DATA or SSL3_RT_HANDSHAKE */
+               {
+               /* make sure that we are not getting application data when we
+                * are doing a handshake for the first time */
+               if (SSL_in_init(s) && (type == SSL3_RT_APPLICATION_DATA) &&
+                       (s->enc_read_ctx == NULL))
+                       {
+                       al=SSL_AD_UNEXPECTED_MESSAGE;
+                       SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_APP_DATA_IN_HANDSHAKE);
+                       goto f_err;
+                       }
+
+               if (len <= 0) return(len);
+
+               if ((unsigned int)len > rr->length)
+                       n = rr->length;
+               else
+                       n = (unsigned int)len;
+
+               memcpy(buf,&(rr->data[rr->off]),n);
+               rr->length-=n;
+               rr->off+=n;
+               if (rr->length == 0)
+                       {
+                       s->rstate=SSL_ST_READ_HEADER;
+                       rr->off=0;
+                       }
+               return(n);
+               }
+
+
+       /* If we get here, then type != rr->type; if we have a handshake
+        * message, then it was unexpected (Hello Request or Client Hello). */
+
+       /* In case of record types for which we have 'fragment' storage,
+        * fill that so that we can process the data at a fixed place.
+        */
+               {
+               unsigned int dest_maxlen = 0;
+               unsigned char *dest = NULL;
+               unsigned int *dest_len = NULL;
+
+               if (rr->type == SSL3_RT_HANDSHAKE)
+                       {
+                       dest_maxlen = sizeof s->s3->handshake_fragment;
+                       dest = s->s3->handshake_fragment;
+                       dest_len = &s->s3->handshake_fragment_len;
+                       }
+               else if (rr->type == SSL3_RT_ALERT)
+                       {
+                       dest_maxlen = sizeof s->s3->alert_fragment;
+                       dest = s->s3->alert_fragment;
+                       dest_len = &s->s3->alert_fragment_len;
+                       }
+
+               if (dest_maxlen > 0)
+                       {
+                       n = dest_maxlen - *dest_len; /* available space in 'dest' */
+                       if (rr->length < n)
+                               n = rr->length; /* available bytes */
+
+                       /* now move 'n' bytes: */
+                       while (n-- > 0)
+                               {
+                               dest[(*dest_len)++] = rr->data[rr->off++];
+                               rr->length--;
+                               }
+
+                       if (*dest_len < dest_maxlen)
+                               goto start; /* fragment was too small */
+                       }
+               }
 
-       /* Check for an incoming 'Client Request' message */
-       if ((rr->type == SSL3_RT_HANDSHAKE) && (rr->length == 4) &&
-               (rr->data[0] == SSL3_MT_CLIENT_REQUEST) &&
+       /* s->s3->handshake_fragment_len == 4  iff  rr->type == SSL3_RT_HANDSHAKE;
+        * s->s3->alert_fragment_len == 2      iff  rr->type == SSL3_RT_ALERT.
+        * (Possibly rr is 'empty' now, i.e. rr->length may be 0.) */
+
+       /* If we are a client, check for an incoming 'Hello Request': */
+       if ((!s->server) &&
+               (s->s3->handshake_fragment_len >= 4) &&
+               (s->s3->handshake_fragment[0] == SSL3_MT_HELLO_REQUEST) &&
                (s->session != NULL) && (s->session->cipher != NULL))
                {
-               if ((rr->data[1] != 0) || (rr->data[2] != 0) ||
-                       (rr->data[3] != 0))
+               s->s3->handshake_fragment_len = 0;
+
+               if ((s->s3->handshake_fragment[1] != 0) ||
+                       (s->s3->handshake_fragment[2] != 0) ||
+                       (s->s3->handshake_fragment[3] != 0))
                        {
                        al=SSL_AD_DECODE_ERROR;
-                       SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_BAD_CLIENT_REQUEST);
+                       SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_BAD_HELLO_REQUEST);
                        goto err;
                        }
 
@@ -712,220 +891,209 @@
                        ssl3_renegotiate(s);
                        if (ssl3_renegotiate_check(s))
                                {
-                               n=s->handshake_func(s);
-                               if (n < 0) return(n);
-                               if (n == 0)
+                               i=s->handshake_func(s);
+                               if (i < 0) return(i);
+                               if (i == 0)
                                        {
                                        
SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_SSL_HANDSHAKE_FAILURE);
                                        return(-1);
                                        }
+
+                               if (s->s3->rbuf.left == 0) /* no read-ahead left? */
+                                       {
+                                       BIO *bio;
+                                       /* In the case where we try to read 
+application data
+                                        * the first time, but we trigger an SSL 
+handshake, we
+                                        * return -1 with the retry option set.  I do 
+this
+                                        * otherwise renegotiation can cause nasty 
+problems 
+                                        * in the blocking world */ /* ? */
+                                       s->rwstate=SSL_READING;
+                                       bio=SSL_get_rbio(s);
+                                       BIO_clear_retry_flags(bio);
+                                       BIO_set_retry_read(bio);
+                                       return(-1);
+                                       }
                                }
                        }
-               rr->length=0;
-/* ZZZ */      goto start;
+               /* we either finished a handshake or ignored the request,
+                * now try again to obtain the (application) data we were asked for */
+               goto start;
                }
 
-       /* if it is not the type we want, or we have shutdown and want
-        * the peer shutdown */
-       if ((rr->type != type) || (s->shutdown & SSL_SENT_SHUTDOWN))
+       if (s->s3->alert_fragment_len >= 2)
                {
-               if (rr->type == SSL3_RT_ALERT)
-                       {
-                       if ((rr->length != 2) || (rr->off != 0))
-                               {
-                               al=SSL_AD_DECODE_ERROR;
-                               SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_BAD_ALERT_RECORD);
-                               goto f_err;
-                               }
-
-                       i=rr->data[0];
-                       n=rr->data[1];
+               int alert_level = s->s3->alert_fragment[0];
+               int alert_descr = s->s3->alert_fragment[1];
 
-                       /* clear from buffer */
-                       rr->length=0;
+               s->s3->alert_fragment_len = 0;
 
-                       if (s->info_callback != NULL)
-                               cb=s->info_callback;
-                       else if (s->ctx->info_callback != NULL)
-                               cb=s->ctx->info_callback;
+               if (s->info_callback != NULL)
+                       cb=s->info_callback;
+               else if (s->ctx->info_callback != NULL)
+                       cb=s->ctx->info_callback;
 
-                       if (cb != NULL)
-                               {
-                               j=(i<<8)|n;
-                               cb(s,SSL_CB_READ_ALERT,j);
-                               }
+               if (cb != NULL)
+                       {
+                       j = (alert_level << 8) | alert_descr;
+                       cb(s, SSL_CB_READ_ALERT, j);
+                       }
 
-                       if (i == 1)
-                               {
-                               s->s3->warn_alert=n;
-                               if (n == SSL_AD_CLOSE_NOTIFY)
-                                       {
-                                       s->shutdown|=SSL_RECEIVED_SHUTDOWN;
-                                       return(0);
-                                       }
-                               }
-                       else if (i == 2)
+               if (alert_level == 1) /* warning */
+                       {
+                       s->s3->warn_alert = alert_descr;
+                       if (alert_descr == SSL_AD_CLOSE_NOTIFY)
                                {
-                               char tmp[16];
-
-                               s->rwstate=SSL_NOTHING;
-                               s->s3->fatal_alert=n;
-                               SSLerr(SSL_F_SSL3_READ_BYTES,
-                                       SSL_AD_REASON_OFFSET+n);
-                               sprintf(tmp,"%d",n);
-                               ERR_add_error_data(2,"SSL alert number ",tmp);
-                               s->shutdown|=SSL_RECEIVED_SHUTDOWN;
-                               SSL_CTX_remove_session(s->ctx,s->session);
+                               s->shutdown |= SSL_RECEIVED_SHUTDOWN;
                                return(0);
                                }
-                       else
-                               {
-                               al=SSL_AD_ILLEGAL_PARAMETER;
-                               SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_UNKNOWN_ALERT_TYPE);
-                               goto f_err;
-                               }
-
-                       rr->length=0;
-                       goto start;
                        }
-
-               if (s->shutdown & SSL_SENT_SHUTDOWN)
+               else if (alert_level == 2) /* fatal */
                        {
+                       char tmp[16];
+
                        s->rwstate=SSL_NOTHING;
-                       rr->length=0;
+                       s->s3->fatal_alert = alert_descr;
+                       SSLerr(SSL_F_SSL3_READ_BYTES, SSL_AD_REASON_OFFSET + 
+alert_descr);
+                       sprintf(tmp,"%d",alert_descr);
+                       ERR_add_error_data(2,"SSL alert number ",tmp);
+                       s->shutdown|=SSL_RECEIVED_SHUTDOWN;
+                       SSL_CTX_remove_session(s->ctx,s->session);
                        return(0);
                        }
-
-               if (rr->type == SSL3_RT_CHANGE_CIPHER_SPEC)
+               else
                        {
-                       if (    (rr->length != 1) || (rr->off != 0) ||
-                               (rr->data[0] != SSL3_MT_CCS))
-                               {
-                               i=SSL_AD_ILLEGAL_PARAMETER;
-                               
SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_BAD_CHANGE_CIPHER_SPEC);
-                               goto err;
-                               }
+                       al=SSL_AD_ILLEGAL_PARAMETER;
+                       SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_UNKNOWN_ALERT_TYPE);
+                       goto f_err;
+                       }
 
-                       rr->length=0;
-                       s->s3->change_cipher_spec=1;
-                       if (!do_change_cipher_spec(s))
-                               goto err;
-                       else
-                               goto start;
+               goto start;
+               }
+
+       if (s->shutdown & SSL_SENT_SHUTDOWN) /* but we have not received a shutdown */
+               {
+               s->rwstate=SSL_NOTHING;
+               rr->length=0;
+               return(0);
+               }
+
+       if (rr->type == SSL3_RT_CHANGE_CIPHER_SPEC)
+               {
+               /* 'Change Cipher Spec' is just a single byte, so we know
+                * exactly what the record payload has to look like */
+               if (    (rr->length != 1) || (rr->off != 0) ||
+                       (rr->data[0] != SSL3_MT_CCS))
+                       {
+                       i=SSL_AD_ILLEGAL_PARAMETER;
+                       SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_BAD_CHANGE_CIPHER_SPEC);
+                       goto err;
                        }
 
-               /* else we have a handshake */
-               if ((rr->type == SSL3_RT_HANDSHAKE) &&
-                       !s->in_handshake)
+               rr->length=0;
+               s->s3->change_cipher_spec=1;
+               if (!do_change_cipher_spec(s))
+                       goto err;
+               else
+                       goto start;
+               }
+
+       /* Unexpected handshake message (Client Hello, or protocol violation) */
+       if ((s->s3->handshake_fragment_len >= 4) &&     !s->in_handshake)
+               {
+               if (((s->state&SSL_ST_MASK) == SSL_ST_OK) &&
+                       !(s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS))
                        {
-                       if (((s->state&SSL_ST_MASK) == SSL_ST_OK) &&
-                               !(s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS))
-                               {
-                               s->state=SSL_ST_BEFORE|(s->server)
-                                               ?SSL_ST_ACCEPT
-                                               :SSL_ST_CONNECT;
-                               s->new_session=1;
-                               }
-                       n=s->handshake_func(s);
-                       if (n < 0) return(n);
-                       if (n == 0)
-                               {
-                               
SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_SSL_HANDSHAKE_FAILURE);
-                               return(-1);
-                               }
+#if 0 /* worked only because C operator preferences are not as expected (and
+       * because this is not really needed for clients except for detecting
+       * protocol violations): */
+                       s->state=SSL_ST_BEFORE|(s->server)
+                               ?SSL_ST_ACCEPT
+                               :SSL_ST_CONNECT;
+#else
+                       s->state = s->server ? SSL_ST_ACCEPT : SSL_ST_CONNECT;
+#endif
+                       s->new_session=1;
+                       }
+               i=s->handshake_func(s);
+               if (i < 0) return(i);
+               if (i == 0)
+                       {
+                       SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_SSL_HANDSHAKE_FAILURE);
+                       return(-1);
+                       }
 
+               if (s->s3->rbuf.left == 0) /* no read-ahead left? */
+                       {
+                       BIO *bio;
                        /* In the case where we try to read application data
                         * the first time, but we trigger an SSL handshake, we
                         * return -1 with the retry option set.  I do this
                         * otherwise renegotiation can cause nasty problems 
-                        * in the non-blocking world */
-
+                        * in the blocking world */ /* ? */
                        s->rwstate=SSL_READING;
                        bio=SSL_get_rbio(s);
                        BIO_clear_retry_flags(bio);
                        BIO_set_retry_read(bio);
                        return(-1);
                        }
+               goto start;
+               }
 
-               switch (rr->type)
-                       {
-               default:
+       switch (rr->type)
+               {
+       default:
 #ifndef NO_TLS
-                       /* TLS just ignores unknown message types */
-                       if (s->version == TLS1_VERSION)
-                               {
-                               goto start;
-                               }
+               /* TLS just ignores unknown message types */
+               if (s->version == TLS1_VERSION)
+                       {
+                       goto start;
+                       }
 #endif
-               case SSL3_RT_CHANGE_CIPHER_SPEC:
-               case SSL3_RT_ALERT:
-               case SSL3_RT_HANDSHAKE:
+               al=SSL_AD_UNEXPECTED_MESSAGE;
+               SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_UNEXPECTED_RECORD);
+               goto f_err;
+       case SSL3_RT_CHANGE_CIPHER_SPEC:
+       case SSL3_RT_ALERT:
+       case SSL3_RT_HANDSHAKE:
+               /* we already handled all of these, with the possible exception
+                * of SSL3_RT_HANDSHAKE when s->in_handshake is set, but that
+                * should not happen when type != rr->type */
+               al=SSL_AD_UNEXPECTED_MESSAGE;
+               SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_INTERNAL_ERROR);
+               goto f_err;
+       case SSL3_RT_APPLICATION_DATA:
+               /* At this point, we were expecting handshake data,
+                * but have application data.  If the library was
+                * running inside ssl3_read() (i.e. in_read_app_data
+                * is set) and it makes sense to read application data
+                * at this point (session renegotiation not yet started),
+                * we will indulge it.
+                */
+               if (s->s3->in_read_app_data &&
+                       (s->s3->total_renegotiations != 0) &&
+                       ((
+                               (s->state & SSL_ST_CONNECT) &&
+                               (s->state >= SSL3_ST_CW_CLNT_HELLO_A) &&
+                               (s->state <= SSL3_ST_CR_SRVR_HELLO_A)
+                               ) || (
+                                       (s->state & SSL_ST_ACCEPT) &&
+                                       (s->state <= SSL3_ST_SW_HELLO_REQ_A) &&
+                                       (s->state >= SSL3_ST_SR_CLNT_HELLO_A)
+                                       )
+                               ))
+                       {
+                       s->s3->in_read_app_data=0;
+                       return(-1);
+                       }
+               else
+                       {
                        al=SSL_AD_UNEXPECTED_MESSAGE;
                        SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_UNEXPECTED_RECORD);
                        goto f_err;
-               case SSL3_RT_APPLICATION_DATA:
-                       /* At this point, we were expecting something else,
-                        * but have application data.  What we do is set the
-                        * error, and return -1.  On the way out, if the
-                        * library was running inside ssl3_read() and it makes
-                        * sense to read application data at this point, we
-                        * will indulge it.  This will mostly happen during
-                        * session renegotiation.
-                        */
-                       if (s->s3->in_read_app_data &&
-                               (s->s3->total_renegotiations != 0) &&
-                               ((
-                                 (s->state & SSL_ST_CONNECT) &&
-                                 (s->state >= SSL3_ST_CW_CLNT_HELLO_A) &&
-                                 (s->state <= SSL3_ST_CR_SRVR_HELLO_A)
-                                ) || (
-                                 (s->state & SSL_ST_ACCEPT) &&
-                                 (s->state <= SSL3_ST_SW_HELLO_REQ_A) &&
-                                 (s->state >= SSL3_ST_SR_CLNT_HELLO_A)
-                                )
-                               ))
-                               {
-                               s->s3->in_read_app_data=0;
-                               return(-1);
-                               }
-                       else
-                               {
-                               al=SSL_AD_UNEXPECTED_MESSAGE;
-                               SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_UNEXPECTED_RECORD);
-                               goto f_err;
-                               }
                        }
                }
+       /* not reached */
 
-       /* make sure that we are not getting application data when we
-        * are doing a handshake for the first time */
-       if (SSL_in_init(s) && (type == SSL3_RT_APPLICATION_DATA) &&
-               (s->enc_read_ctx == NULL))
-               {
-               al=SSL_AD_UNEXPECTED_MESSAGE;
-               SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_APP_DATA_IN_HANDSHAKE);
-               goto f_err;
-               }
-
-       if (len <= 0) return(len);
-
-       if ((unsigned int)len > rr->length)
-               n=rr->length;
-       else
-               n=len;
-
-       memcpy(buf,&(rr->data[rr->off]),(unsigned int)n);
-       rr->length-=n;
-       rr->off+=n;
-       if (rr->length <= 0)
-               {
-               s->rstate=SSL_ST_READ_HEADER;
-               rr->off=0;
-               }
-
-       if (type == SSL3_RT_HANDSHAKE)
-               ssl3_finish_mac(s,buf,n);
-       return(n);
 f_err:
        ssl3_send_alert(s,SSL3_AL_FATAL,al);
 err:
@@ -935,7 +1103,7 @@
 static int do_change_cipher_spec(SSL *s)
        {
        int i;
-       unsigned char *sender;
+       const char *sender;
        int slen;
 
        if (s->state & SSL_ST_ACCEPT)
@@ -957,37 +1125,23 @@
         * the finished message */
        if (s->state & SSL_ST_CONNECT)
                {
-               sender=s->method->ssl3_enc->server_finished;
-               slen=s->method->ssl3_enc->server_finished_len;
+               sender=s->method->ssl3_enc->server_finished_label;
+               slen=s->method->ssl3_enc->server_finished_label_len;
                }
        else
                {
-               sender=s->method->ssl3_enc->client_finished;
-               slen=s->method->ssl3_enc->client_finished_len;
+               sender=s->method->ssl3_enc->client_finished_label;
+               slen=s->method->ssl3_enc->client_finished_label_len;
                }
 
-       s->method->ssl3_enc->final_finish_mac(s,
+       s->s3->tmp.peer_finish_md_len = s->method->ssl3_enc->final_finish_mac(s,
                &(s->s3->finish_dgst1),
                &(s->s3->finish_dgst2),
-               sender,slen,&(s->s3->tmp.finish_md[0]));
+               sender,slen,s->s3->tmp.peer_finish_md);
 
        return(1);
        }
 
-int ssl3_do_write(SSL *s, int type)
-       {
-       int ret;
-
-       ret=ssl3_write_bytes(s,type,&s->init_buf->data[s->init_off],
-                            s->init_num);
-       if (ret == s->init_num)
-               return(1);
-       if (ret < 0) return(-1);
-       s->init_off+=ret;
-       s->init_num-=ret;
-       return(0);
-       }
-
 void ssl3_send_alert(SSL *s, int level, int desc)
        {
        /* Map tls/ssl alert value to correct one */
@@ -1029,7 +1183,7 @@
                        cb=s->info_callback;
                else if (s->ctx->info_callback != NULL)
                        cb=s->ctx->info_callback;
-               
+
                if (cb != NULL)
                        {
                        j=(s->s3->send_alert[0]<<8)|s->s3->send_alert[1];
@@ -1038,4 +1192,3 @@
                }
        return(i);
        }
-
Index: opensa/openssl/ssl/s3_srvr.c
diff -u opensa/openssl/ssl/s3_srvr.c:1.1 opensa/openssl/ssl/s3_srvr.c:1.2
--- opensa/openssl/ssl/s3_srvr.c:1.1    Tue Jan 25 23:01:18 2000
+++ opensa/openssl/ssl/s3_srvr.c        Thu Mar  2 21:12:05 2000
@@ -57,7 +57,9 @@
  */
 
 #define REUSE_CIPHER_BUG
+#define NETSCAPE_HANG_BUG
 
+
 #include <stdio.h>
 #include <openssl/buffer.h>
 #include <openssl/rand.h>
@@ -70,13 +72,14 @@
 
 static SSL_METHOD *ssl3_get_server_method(int ver);
 static int ssl3_get_client_hello(SSL *s);
+static int ssl3_check_client_hello(SSL *s);
 static int ssl3_send_server_hello(SSL *s);
 static int ssl3_send_server_key_exchange(SSL *s);
 static int ssl3_send_certificate_request(SSL *s);
 static int ssl3_send_server_done(SSL *s);
-static int ssl3_get_cert_verify(SSL *s);
 static int ssl3_get_client_key_exchange(SSL *s);
 static int ssl3_get_client_certificate(SSL *s);
+static int ssl3_get_cert_verify(SSL *s);
 static int ssl3_send_hello_request(SSL *s);
 
 static SSL_METHOD *ssl3_get_server_method(int ver)
@@ -112,7 +115,7 @@
        int ret= -1;
        int new_state,state,skip=0;
 
-       RAND_seed(&Time,sizeof(Time));
+       RAND_add(&Time,sizeof(Time),0);
        ERR_clear_error();
        clear_sys_error();
 
@@ -151,7 +154,6 @@
 
                        if ((s->version>>8) != 3)
                                abort();
-                       /* s->version=SSL3_VERSION; */
                        s->type=SSL_ST_ACCEPT;
 
                        if (s->init_buf == NULL)
@@ -184,8 +186,8 @@
 
                        if (s->state != SSL_ST_RENEGOTIATE)
                                {
-                               s->state=SSL3_ST_SR_CLNT_HELLO_A;
                                ssl3_init_finished_mac(s);
+                               s->state=SSL3_ST_SR_CLNT_HELLO_A;
                                s->ctx->stats.sess_accept++;
                                }
                        else
@@ -268,8 +270,8 @@
                            || (l & (SSL_DH|SSL_kFZA))
                            || ((l & SSL_kRSA)
                                && (s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey == NULL
-                                   || (SSL_IS_EXPORT(l)
-                                       && 
EVP_PKEY_size(s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey)*8 > SSL_EXPORT_PKEYLENGTH(l)
+                                   || (SSL_C_IS_EXPORT(s->s3->tmp.new_cipher)
+                                       && 
+EVP_PKEY_size(s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey)*8 > 
+SSL_C_EXPORT_PKEYLENGTH(s->s3->tmp.new_cipher)
                                        )
                                    )
                                )
@@ -287,9 +289,19 @@
 
                case SSL3_ST_SW_CERT_REQ_A:
                case SSL3_ST_SW_CERT_REQ_B:
-                       if (!(s->verify_mode & SSL_VERIFY_PEER) ||
+                       if (/* don't request cert unless asked for it: */
+                               !(s->verify_mode & SSL_VERIFY_PEER) ||
+                               /* if SSL_VERIFY_CLIENT_ONCE is set,
+                                * don't request cert during re-negotiation: */
                                ((s->session->peer != NULL) &&
-                                (s->verify_mode & SSL_VERIFY_CLIENT_ONCE)))
+                                (s->verify_mode & SSL_VERIFY_CLIENT_ONCE)) ||
+                               /* never request cert in anonymous ciphersuites
+                                * (see section "Certificate request" in SSL 3 drafts
+                                * and in RFC 2246): */
+                               ((s->s3->tmp.new_cipher->algorithms & SSL_aNULL) &&
+                                /* ... except when the application insists on 
+verification
+                                 * (against the specs, but s3_clnt.c accepts this for 
+SSL 3) */
+                                !(s->verify_mode & SSL_VERIFY_FAIL_IF_NO_PEER_CERT)))
                                {
                                /* no cert request */
                                skip=1;
@@ -301,7 +313,12 @@
                                s->s3->tmp.cert_request=1;
                                ret=ssl3_send_certificate_request(s);
                                if (ret <= 0) goto end;
+#ifndef NETSCAPE_HANG_BUG
                                s->state=SSL3_ST_SW_SRVR_DONE_A;
+#else
+                               s->state=SSL3_ST_SW_FLUSH;
+                               s->s3->tmp.next_state=SSL3_ST_SR_CERT_A;
+#endif
                                s->init_num=0;
                                }
                        break;
@@ -331,12 +348,20 @@
 
                case SSL3_ST_SR_CERT_A:
                case SSL3_ST_SR_CERT_B:
-                       /* could be sent for a DH cert, even if we
-                        * have not asked for it :-) */
-                       ret=ssl3_get_client_certificate(s);
-                       if (ret <= 0) goto end;
-                       s->init_num=0;
-                       s->state=SSL3_ST_SR_KEY_EXCH_A;
+                       /* Check for second client hello (MS SGC) */
+                       ret = ssl3_check_client_hello(s);
+                       if (ret <= 0)
+                               goto end;
+                       if (ret == 2)
+                               s->state = SSL3_ST_SR_CLNT_HELLO_C;
+                       else {
+                               /* could be sent for a DH cert, even if we
+                                * have not asked for it :-) */
+                               ret=ssl3_get_client_certificate(s);
+                               if (ret <= 0) goto end;
+                               s->init_num=0;
+                               s->state=SSL3_ST_SR_KEY_EXCH_A;
+                       }
                        break;
 
                case SSL3_ST_SR_KEY_EXCH_A:
@@ -350,10 +375,10 @@
                         * a client cert, it can be verified */ 
                        s->method->ssl3_enc->cert_verify_mac(s,
                                &(s->s3->finish_dgst1),
-                               &(s->s3->tmp.finish_md[0]));
+                               &(s->s3->tmp.cert_verify_md[0]));
                        s->method->ssl3_enc->cert_verify_mac(s,
                                &(s->s3->finish_dgst2),
-                               &(s->s3->tmp.finish_md[MD5_DIGEST_LENGTH]));
+                               &(s->s3->tmp.cert_verify_md[MD5_DIGEST_LENGTH]));
 
                        break;
 
@@ -407,8 +432,8 @@
                case SSL3_ST_SW_FINISHED_B:
                        ret=ssl3_send_finished(s,
                                SSL3_ST_SW_FINISHED_A,SSL3_ST_SW_FINISHED_B,
-                               s->method->ssl3_enc->server_finished,
-                               s->method->ssl3_enc->server_finished_len);
+                               s->method->ssl3_enc->server_finished_label,
+                               s->method->ssl3_enc->server_finished_label_len);
                        if (ret <= 0) goto end;
                        s->state=SSL3_ST_SW_FLUSH;
                        if (s->hit)
@@ -485,7 +510,7 @@
        if (s->state == SSL3_ST_SW_HELLO_REQ_A)
                {
                p=(unsigned char *)s->init_buf->data;
-               *(p++)=SSL3_MT_CLIENT_REQUEST;
+               *(p++)=SSL3_MT_HELLO_REQUEST;
                *(p++)=0;
                *(p++)=0;
                *(p++)=0;
@@ -500,6 +525,37 @@
        return(ssl3_do_write(s,SSL3_RT_HANDSHAKE));
        }
 
+static int ssl3_check_client_hello(SSL *s)
+       {
+       int ok;
+       long n;
+
+       n=ssl3_get_message(s,
+               SSL3_ST_SR_CERT_A,
+               SSL3_ST_SR_CERT_B,
+               -1,
+               SSL3_RT_MAX_PLAIN_LENGTH,
+               &ok);
+       if (!ok) return((int)n);
+       s->s3->tmp.reuse_message = 1;
+       if (s->s3->tmp.message_type == SSL3_MT_CLIENT_HELLO)
+               {
+               /* Throw away what we have done so far in the current handshake,
+                * which will now be aborted. (A full SSL_clear would be too much.)
+                * I hope that tmp.dh is the only thing that may need to be cleared
+                * when a handshake is not completed ... */
+#ifndef NO_DH
+               if (s->s3->tmp.dh != NULL)
+                       {
+                       DH_free(s->s3->tmp.dh);
+                       s->s3->tmp.dh = NULL;
+                       }
+#endif
+               return 2;
+               }
+       return 1;
+}
+
 static int ssl3_get_client_hello(SSL *s)
        {
        int i,j,ok,al,ret= -1;
@@ -531,10 +587,9 @@
        if (!ok) return((int)n);
        d=p=(unsigned char *)s->init_buf->data;
 
-       /* The version number has already been checked in ssl3_get_message.
-        * I a native TLSv1/SSLv3 method, the match must be correct except
-        * perhaps for the first message */
-/*     s->client_version=(((int)p[0])<<8)|(int)p[1]; */
+       /* use version from inside client hello, not from record header
+        * (may differ: see RFC 2246, Appendix E, second paragraph) */
+       s->client_version=(((int)p[0])<<8)|(int)p[1];
        p+=2;
 
        /* load the client random */
@@ -754,7 +809,7 @@
         * compression          - basically ignored right now
         * ssl version is set   - sslv3
         * s->session           - The ssl session has been setup.
-        * s->hit               - sesson reuse flag
+        * s->hit               - session reuse flag
         * s->tmp.new_cipher    - the new cipher to use.
         */
 
@@ -782,7 +837,7 @@
                p=s->s3->server_random;
                Time=time(NULL);                        /* Time */
                l2n(Time,p);
-               RAND_bytes(p,SSL3_RANDOM_SIZE-sizeof(Time));
+               RAND_pseudo_bytes(p,SSL3_RANDOM_SIZE-sizeof(Time));
                /* Do the message type and length last */
                d=p= &(buf[4]);
 
@@ -866,9 +921,10 @@
        int j,num;
        RSA *rsa;
        unsigned char md_buf[MD5_DIGEST_LENGTH+SHA_DIGEST_LENGTH];
+       unsigned int u;
 #endif
 #ifndef NO_DH
-       DH *dh,*dhp;
+       DH *dh=NULL,*dhp;
 #endif
        EVP_PKEY *pkey;
        unsigned char *p,*d;
@@ -899,6 +955,12 @@
                                rsa=s->cert->rsa_tmp_cb(s,
                                      SSL_C_IS_EXPORT(s->s3->tmp.new_cipher),
                                      SSL_C_EXPORT_PKEYLENGTH(s->s3->tmp.new_cipher));
+                               if(rsa == NULL)
+                               {
+                                       al=SSL_AD_HANDSHAKE_FAILURE;
+                                       
+SSLerr(SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE,SSL_R_ERROR_GENERATING_TMP_RSA_KEY);
+                                       goto f_err;
+                               }
                                CRYPTO_add(&rsa->references,1,CRYPTO_LOCK_RSA);
                                cert->rsa_tmp=rsa;
                                }
@@ -928,6 +990,14 @@
                                
SSLerr(SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE,SSL_R_MISSING_TMP_DH_KEY);
                                goto f_err;
                                }
+
+                       if (s->s3->tmp.dh != NULL)
+                               {
+                               DH_free(dh);
+                               SSLerr(SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE, 
+SSL_R_INTERNAL_ERROR);
+                               goto err;
+                               }
+
                        if ((dh=DHparams_dup(dhp)) == NULL)
                                {
                                
SSLerr(SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE,ERR_R_DH_LIB);
@@ -1027,15 +1097,14 @@
                                        q+=i;
                                        j+=i;
                                        }
-                               i=RSA_private_encrypt(j,md_buf,&(p[2]),
-                                       pkey->pkey.rsa,RSA_PKCS1_PADDING);
-                               if (i <= 0)
+                               if (RSA_sign(NID_md5_sha1, md_buf, j,
+                                       &(p[2]), &u, pkey->pkey.rsa) <= 0)
                                        {
                                        
SSLerr(SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE,ERR_LIB_RSA);
                                        goto err;
                                        }
-                               s2n(i,p);
-                               n+=i+2;
+                               s2n(u,p);
+                               n+=u+2;
                                }
                        else
 #endif
@@ -1075,7 +1144,7 @@
                s->init_off=0;
                }
 
-       /* SSL3_ST_SW_KEY_EXCH_B */
+       s->state = SSL3_ST_SW_KEY_EXCH_B;
        return(ssl3_do_write(s,SSL3_RT_HANDSHAKE));
 f_err:
        ssl3_send_alert(s,SSL3_AL_FATAL,al);
@@ -1152,6 +1221,17 @@
 
                s->init_num=n+4;
                s->init_off=0;
+#ifdef NETSCAPE_HANG_BUG
+               p=(unsigned char *)s->init_buf->data + s->init_num;
+
+               /* do the header */
+               *(p++)=SSL3_MT_SERVER_DONE;
+               *(p++)=0;
+               *(p++)=0;
+               *(p++)=0;
+               s->init_num += 4;
+#endif
+
                }
 
        /* SSL3_ST_SW_CERT_REQ_B */
@@ -1239,31 +1319,6 @@
 
                i=RSA_private_decrypt((int)n,p,p,rsa,RSA_PKCS1_PADDING);
 
-#if 1
-               /* If a bad decrypt, use a random master key */
-               if ((i != SSL_MAX_MASTER_KEY_LENGTH) ||
-                       ((p[0] != (s->client_version>>8)) ||
-                        (p[1] != (s->client_version & 0xff))))
-                       {
-                       int bad=1;
-
-                       if ((i == SSL_MAX_MASTER_KEY_LENGTH) &&
-                               (p[0] == (s->version>>8)) &&
-                               (p[1] == 0))
-                               {
-                               if (s->options & SSL_OP_TLS_ROLLBACK_BUG)
-                                       bad=0;
-                               }
-                       if (bad)
-                               {
-                               p[0]=(s->version>>8);
-                               p[1]=(s->version & 0xff);
-                               RAND_bytes(&(p[2]),SSL_MAX_MASTER_KEY_LENGTH-2);
-                               i=SSL_MAX_MASTER_KEY_LENGTH;
-                               }
-                       /* else, an SSLeay bug, ssl only server, tls client */
-                       }
-#else
                if (i != SSL_MAX_MASTER_KEY_LENGTH)
                        {
                        al=SSL_AD_DECODE_ERROR;
@@ -1271,13 +1326,12 @@
                        goto f_err;
                        }
 
-               if ((p[0] != (s->version>>8)) || (p[1] != (s->version & 0xff)))
+               if ((p[0] != (s->client_version>>8)) || (p[1] != (s->client_version & 
+0xff)))
                        {
                        al=SSL_AD_DECODE_ERROR;
                        
SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,SSL_R_BAD_PROTOCOL_VERSION_NUMBER);
                        goto f_err;
                        }
-#endif
 
                s->session->master_key_length=
                        s->method->ssl3_enc->generate_master_secret(s,
@@ -1450,16 +1504,16 @@
 #ifndef NO_RSA 
        if (pkey->type == EVP_PKEY_RSA)
                {
-               i=RSA_public_decrypt(i,p,p,pkey->pkey.rsa,RSA_PKCS1_PADDING);
+               i=RSA_verify(NID_md5_sha1, s->s3->tmp.cert_verify_md,
+                       MD5_DIGEST_LENGTH+SHA_DIGEST_LENGTH, p, i, 
+                                                       pkey->pkey.rsa);
                if (i < 0)
                        {
                        al=SSL_AD_DECRYPT_ERROR;
                        SSLerr(SSL_F_SSL3_GET_CERT_VERIFY,SSL_R_BAD_RSA_DECRYPT);
                        goto f_err;
                        }
-               if ((i != (MD5_DIGEST_LENGTH+SHA_DIGEST_LENGTH)) ||
-                       memcmp(&(s->s3->tmp.finish_md[0]),p,
-                               MD5_DIGEST_LENGTH+SHA_DIGEST_LENGTH))
+               if (i == 0)
                        {
                        al=SSL_AD_DECRYPT_ERROR;
                        SSLerr(SSL_F_SSL3_GET_CERT_VERIFY,SSL_R_BAD_RSA_SIGNATURE);
@@ -1472,7 +1526,7 @@
                if (pkey->type == EVP_PKEY_DSA)
                {
                j=DSA_verify(pkey->save_type,
-                       &(s->s3->tmp.finish_md[MD5_DIGEST_LENGTH]),
+                       &(s->s3->tmp.cert_verify_md[MD5_DIGEST_LENGTH]),
                        SHA_DIGEST_LENGTH,p,i,pkey->pkey.dsa);
                if (j <= 0)
                        {
@@ -1532,7 +1586,7 @@
                        al=SSL_AD_HANDSHAKE_FAILURE;
                        goto f_err;
                        }
-               /* If tls asked for a client cert we must return a 0 list */
+               /* If tls asked for a client cert, the client must return a 0 list */
                if ((s->version > SSL3_VERSION) && s->s3->tmp.cert_request)
                        {
                        
SSLerr(SSL_F_SSL3_GET_CLIENT_CERTIFICATE,SSL_R_TLS_PEER_DID_NOT_RESPOND_WITH_CERTIFICATE_LIST);
@@ -1628,6 +1682,7 @@
        if (s->session->peer != NULL) /* This should not be needed */
                X509_free(s->session->peer);
        s->session->peer=sk_X509_shift(sk);
+       s->session->verify_result = s->verify_result;
 
        /* With the current implementation, sess_cert will always be NULL
         * when we arrive here. */
Index: opensa/openssl/ssl/ssl-lib.com
diff -u opensa/openssl/ssl/ssl-lib.com:1.1 opensa/openssl/ssl/ssl-lib.com:1.2
--- opensa/openssl/ssl/ssl-lib.com:1.1  Tue Jan 25 23:01:18 2000
+++ opensa/openssl/ssl/ssl-lib.com      Thu Mar  2 21:12:05 2000
@@ -897,12 +897,36 @@
 $! Set Up Initial CC Definitions, Possibly With User Ones
 $!
 $ CCDEFS = "VMS=1,TCPIP_TYPE_''P5'"
+$ IF F$TRNLNM("OPENSSL_NO_ASM") THEN CCDEFS = CCDEFS + ",NO_ASM"
+$ IF F$TRNLNM("OPENSSL_NO_RSA") THEN CCDEFS = CCDEFS + ",NO_RSA"
+$ IF F$TRNLNM("OPENSSL_NO_DSA") THEN CCDEFS = CCDEFS + ",NO_DSA"
+$ IF F$TRNLNM("OPENSSL_NO_DH") THEN CCDEFS = CCDEFS + ",NO_DH"
+$ IF F$TRNLNM("OPENSSL_NO_MD2") THEN CCDEFS = CCDEFS + ",NO_MD2"
+$ IF F$TRNLNM("OPENSSL_NO_MD5") THEN CCDEFS = CCDEFS + ",NO_MD5"
+$ IF F$TRNLNM("OPENSSL_NO_RIPEMD") THEN CCDEFS = CCDEFS + ",NO_RIPEMD"
+$ IF F$TRNLNM("OPENSSL_NO_SHA") THEN CCDEFS = CCDEFS + ",NO_SHA"
+$ IF F$TRNLNM("OPENSSL_NO_SHA0") THEN CCDEFS = CCDEFS + ",NO_SHA0"
+$ IF F$TRNLNM("OPENSSL_NO_SHA1") THEN CCDEFS = CCDEFS + ",NO_SHA1"
+$ IF F$TRNLNM("OPENSSL_NO_DES")
+$ THEN
+$   CCDEFS = CCDEFS + ",NO_DES,NO_MDC2"
+$ ELSE
+$   IF F$TRNLNM("OPENSSL_NO_MDC2") THEN CCDEFS = CCDEFS + ",NO_MDC2"
+$ ENDIF
+$ IF F$TRNLNM("OPENSSL_NO_RC2") THEN CCDEFS = CCDEFS + ",NO_RC2"
+$ IF F$TRNLNM("OPENSSL_NO_RC4") THEN CCDEFS = CCDEFS + ",NO_RC4"
+$ IF F$TRNLNM("OPENSSL_NO_RC5") THEN CCDEFS = CCDEFS + ",NO_RC5"
+$ IF F$TRNLNM("OPENSSL_NO_IDEA") THEN CCDEFS = CCDEFS + ",NO_IDEA"
+$ IF F$TRNLNM("OPENSSL_NO_BF") THEN CCDEFS = CCDEFS + ",NO_BF"
+$ IF F$TRNLNM("OPENSSL_NO_CAST") THEN CCDEFS = CCDEFS + ",NO_CAST"
+$ IF F$TRNLNM("OPENSSL_NO_HMAC") THEN CCDEFS = CCDEFS + ",NO_HMAC"
+$ IF F$TRNLNM("OPENSSL_NO_SSL2") THEN CCDEFS = CCDEFS + ",NO_SSL2"
 $ IF F$TYPE(USER_CCDEFS) .NES. "" THEN CCDEFS = CCDEFS + "," + USER_CCDEFS
 $ CCEXTRAFLAGS = ""
 $ IF F$TYPE(USER_CCFLAGS) .NES. "" THEN CCEXTRAFLAGS = USER_CCFLAGS
-$ CCDISABLEWARNINGS = ""
+$ CCDISABLEWARNINGS = "LONGLONGTYPE,LONGLONGSUFX"
 $ IF F$TYPE(USER_CCDISABLEWARNINGS) .NES. "" THEN -
-       CCDISABLEWARNINGS = USER_CCDISABLEWARNINGS
+       CCDISABLEWARNINGS = CCDISABLEWARNINGS + "," + USER_CCDISABLEWARNINGS
 $!
 $!  Check To See If The User Entered A Valid Paramter.
 $!
Index: opensa/openssl/ssl/ssl.h
diff -u opensa/openssl/ssl/ssl.h:1.1 opensa/openssl/ssl/ssl.h:1.2
--- opensa/openssl/ssl/ssl.h:1.1        Tue Jan 25 23:01:18 2000
+++ opensa/openssl/ssl/ssl.h    Thu Mar  2 21:12:05 2000
@@ -123,8 +123,9 @@
 #define SSL_TXT_MD5            "MD5"
 #define SSL_TXT_SHA1           "SHA1"
 #define SSL_TXT_SHA            "SHA"
-#define SSL_TXT_EXP40          "EXP"
+#define SSL_TXT_EXP            "EXP"
 #define SSL_TXT_EXPORT         "EXPORT"
+#define SSL_TXT_EXP40          "EXPORT40"
 #define SSL_TXT_EXP56          "EXPORT56"
 #define SSL_TXT_SSLV2          "SSLv2"
 #define SSL_TXT_SSLV3          "SSLv3"
@@ -133,12 +134,7 @@
 
 /* 'DEFAULT' at the start of the cipher list insert the following string
  * in addition to this being the default cipher string */
-#ifndef NO_RSA
-#define SSL_DEFAULT_CIPHER_LIST        
"ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP"
-#else
-#define SSL_ALLOW_ADH
-#define SSL_DEFAULT_CIPHER_LIST        "HIGH:MEDIUM:LOW:ADH+3DES:ADH+RC4:ADH+DES:+EXP"
-#endif
+#define SSL_DEFAULT_CIPHER_LIST        "ALL:!ADH:RC4+RSA:+SSLv2:@STRENGTH"
 
 /* Used in SSL_set_shutdown()/SSL_get_shutdown(); */
 #define SSL_SENT_SHUTDOWN      1
@@ -151,6 +147,10 @@
 #include <openssl/pem.h>
 #include <openssl/x509.h>
 
+#if (defined(NO_RSA) || defined(NO_MD5)) && !defined(NO_SSL2)
+#define NO_SSL2
+#endif
+
 #define SSL_FILETYPE_ASN1      X509_FILETYPE_ASN1
 #define SSL_FILETYPE_PEM       X509_FILETYPE_PEM
 
@@ -166,8 +166,12 @@
        const char *name;               /* text name */
        unsigned long id;               /* id, 4 bytes, first is version */
        unsigned long algorithms;       /* what ciphers are used */
+       unsigned long algo_strength;    /* strength and export flags */
        unsigned long algorithm2;       /* Extra flags */
+       int strength_bits;              /* Number of bits really used */
+       int alg_bits;                   /* Number of bits for algorithm */
        unsigned long mask;             /* used for matching */
+       unsigned long mask_strength;    /* also used for matching */
        } SSL_CIPHER;
 
 DECLARE_STACK_OF(SSL_CIPHER)
@@ -201,6 +205,8 @@
        long (*get_timeout)(void);
        struct ssl3_enc_method *ssl3_enc; /* Extra SSLv3/TLS stuff */
        int (*ssl_version)();
+       long (*ssl_callback_ctrl)(SSL *s, int cb_id, void (*fp)());
+       long (*ssl_ctx_callback_ctrl)(SSL_CTX *s, int cb_id, void (*fp)());
        } SSL_METHOD;
 
 /* Lets make this into an ASN.1 type structure as follows
@@ -215,7 +221,8 @@
  *     Timeout [ 2 ] EXPLICIT  INTEGER,        -- optional Timeout ins seconds
  *     Peer [ 3 ] EXPLICIT     X509,           -- optional Peer Certificate
  *     Session_ID_context [ 4 ] EXPLICIT OCTET_STRING,   -- the Session ID context
- *     Compression [5] IMPLICIT ASN1_OBJECT    -- compression OID XXXXX
+ *     Verify_result [ 5 ] EXPLICIT INTEGER    -- X509_V_... code for `Peer'
+ *     Compression [6] IMPLICIT ASN1_OBJECT    -- compression OID XXXXX
  *     }
  * Look in ssl/ssl_asn1.c for more details
  * I'm using EXPLICIT tags so I can read the damn things using asn1parse :-).
@@ -249,6 +256,9 @@
         * (the latter is not enough as sess_cert is not retained
         * in the external representation of sessions, see ssl_asn1.c). */
        X509 *peer;
+       /* when app_verify_callback accepts a session where the peer's certificate
+        * is not ok, we must remember the error for session reuse: */
+       long verify_result; /* only for servers */
 
        int references;
        long timeout;
@@ -291,6 +301,7 @@
 #define SSL_OP_PKCS1_CHECK_1                           0x08000000L
 #define SSL_OP_PKCS1_CHECK_2                           0x10000000L
 #define SSL_OP_NETSCAPE_CA_DN_BUG                      0x20000000L
+/* SSL_OP_NON_EXPORT_FIRST looks utterly broken .. */
 #define SSL_OP_NON_EXPORT_FIRST                        0x40000000L
 #define SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG         0x80000000L
 #define SSL_OP_ALL                                     0x000FFFFFL
@@ -355,9 +366,9 @@
        STACK_OF(SSL_CIPHER) *cipher_list_by_id;
 
        struct x509_store_st /* X509_STORE */ *cert_store;
-       struct lhash_st /* LHASH */ *sessions;  /* a set of SSL_SESSION's */
+       struct lhash_st /* LHASH */ *sessions;  /* a set of SSL_SESSIONs */
        /* Most session-ids that will be cached, default is
-        * SSL_SESSION_CACHE_SIZE_DEFAULT. 0 is unlimited. */
+        * SSL_SESSION_CACHE_MAX_SIZE_DEFAULT. 0 is unlimited. */
        unsigned long session_cache_size;
        struct ssl_session_st *session_cache_head;
        struct ssl_session_st *session_cache_tail;
@@ -424,6 +435,9 @@
 /**/   unsigned char sid_ctx[SSL_MAX_SID_CTX_LENGTH];
 /**/   int (*default_verify_callback)(int ok,X509_STORE_CTX *ctx);
 
+       int purpose;            /* Purpose setting */
+       int trust;              /* Trust setting */
+
        /* Default password callback. */
 /**/   pem_password_cb *default_passwd_callback;
 
@@ -433,7 +447,7 @@
        /* get client cert callback */
 /**/   int (*client_cert_cb)(/* SSL *ssl, X509 **x509, EVP_PKEY **pkey */);
 
-       /* what we put in client requests */
+       /* what we put in client cert requests */
        STACK_OF(X509_NAME) *client_CA;
 
 /**/   int quiet_shutdown;
@@ -458,6 +472,7 @@
  * defined, this will still get called. */
 #define SSL_SESS_CACHE_NO_INTERNAL_LOOKUP      0x0100
 
+  struct lhash_st *SSL_CTX_sessions(SSL_CTX *ctx);
 #define SSL_CTX_sess_number(ctx) \
        SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_NUMBER,0,NULL)
 #define SSL_CTX_sess_connect(ctx) \
@@ -564,17 +579,21 @@
        unsigned char *packet;
        unsigned int packet_length;
 
-       struct ssl2_ctx_st *s2; /* SSLv2 variables */
-       struct ssl3_ctx_st *s3; /* SSLv3 variables */
+       struct ssl2_state_st *s2; /* SSLv2 variables */
+       struct ssl3_state_st *s3; /* SSLv3 variables */
 
-       int read_ahead;         /* Read as many input bytes as possible */
+       int read_ahead;         /* Read as many input bytes as possible
+                                * (for non-blocking reads) */
        int hit;                /* reusing a previous session */
 
+       int purpose;            /* Purpose setting */
+       int trust;              /* Trust setting */
+
        /* crypto */
        STACK_OF(SSL_CIPHER) *cipher_list;
        STACK_OF(SSL_CIPHER) *cipher_list_by_id;
 
-       /* These are the ones being used, the ones is SSL_SESSION are
+       /* These are the ones being used, the ones in SSL_SESSION are
         * the ones to be 'copied' into these ones */
 
        EVP_CIPHER_CTX *enc_read_ctx;           /* cryptographic state */
@@ -634,7 +653,7 @@
        unsigned long mode; /* API behaviour */
        int first_packet;
        int client_version;     /* what was passed, used for
-                                * SSLv3/TLS rolback check */
+                                * SSLv3/TLS rollback check */
        };
 
 #include <openssl/ssl2.h>
@@ -642,7 +661,7 @@
 #include <openssl/tls1.h> /* This is mostly sslv3 with a few tweaks */
 #include <openssl/ssl23.h>
 
-/* compatablity */
+/* compatibility */
 #define SSL_set_app_data(s,arg)                (SSL_set_ex_data(s,0,(char *)arg))
 #define SSL_get_app_data(s)            (SSL_get_ex_data(s,0))
 #define SSL_SESSION_set_app_data(s,a)  (SSL_SESSION_set_ex_data(s,0,(char *)a))
@@ -651,7 +670,7 @@
 #define SSL_CTX_set_app_data(ctx,arg)  (SSL_CTX_set_ex_data(ctx,0,(char *)arg))
 
 /* The following are the possible values for ssl->state are are
- * used to indicate where we are upto in the SSL connection establishment.
+ * used to indicate where we are up to in the SSL connection establishment.
  * The macros that follow are about the only things you should need to use
  * and even then, only when using non-blocking IO.
  * It can also be useful to work out where you were when the connection
@@ -693,6 +712,13 @@
 #define SSL_ST_READ_BODY                       0xF1
 #define SSL_ST_READ_DONE                       0xF2
 
+/* Obtain latest Finished message
+ *   -- that we sent (SSL_get_finished)
+ *   -- that we expected from peer (SSL_get_peer_finished).
+ * Returns length (0 == no Finished so far), copies up to 'count' bytes. */
+size_t SSL_get_finished(SSL *s, void *buf, size_t count);
+size_t SSL_get_peer_finished(SSL *s, void *buf, size_t count);
+
 /* use either SSL_VERIFY_NONE or SSL_VERIFY_PEER, the last 2 options
  * are 'ored' with SSL_VERIFY_PEER if they are desired */
 #define SSL_VERIFY_NONE                        0x00
@@ -700,9 +726,10 @@
 #define SSL_VERIFY_FAIL_IF_NO_PEER_CERT        0x02
 #define SSL_VERIFY_CLIENT_ONCE         0x04
 
+#define OpenSSL_add_ssl_algorithms()   SSL_library_init()
 #define SSLeay_add_ssl_algorithms()    SSL_library_init()
 
-/* this is for backward compatablility */
+/* this is for backward compatibility */
 #if 0 /* NEW_SSLEAY */
 #define SSL_CTX_set_default_verify(a,b,c) SSL_CTX_set_verify(a,b,c)
 #define SSL_set_pref_cipher(c,n)       SSL_set_cipher_list(c,n)
@@ -710,7 +737,7 @@
 #define SSL_remove_session(a,b)                SSL_CTX_remove_session((a),(b))
 #define SSL_flush_sessions(a,b)                SSL_CTX_flush_sessions((a),(b))
 #endif
-/* More backward compatablity */
+/* More backward compatibility */
 #define SSL_get_cipher(s) \
                SSL_CIPHER_get_name(SSL_get_current_cipher(s))
 #define SSL_get_cipher_bits(s,np) \
@@ -762,11 +789,11 @@
 #define SSL_AD_ACCESS_DENIED           TLS1_AD_ACCESS_DENIED   /* fatal */
 #define SSL_AD_DECODE_ERROR            TLS1_AD_DECODE_ERROR    /* fatal */
 #define SSL_AD_DECRYPT_ERROR           TLS1_AD_DECRYPT_ERROR
-#define SSL_AD_EXPORT_RESTRICION       TLS1_AD_EXPORT_RESTRICION/* fatal */
+#define SSL_AD_EXPORT_RESTRICTION      TLS1_AD_EXPORT_RESTRICTION/* fatal */
 #define SSL_AD_PROTOCOL_VERSION                TLS1_AD_PROTOCOL_VERSION /* fatal */
 #define SSL_AD_INSUFFICIENT_SECURITY   TLS1_AD_INSUFFICIENT_SECURITY/* fatal */
 #define SSL_AD_INTERNAL_ERROR          TLS1_AD_INTERNAL_ERROR  /* fatal */
-#define SSL_AD_USER_CANCLED            TLS1_AD_USER_CANCLED
+#define SSL_AD_USER_CANCELLED          TLS1_AD_USER_CANCELLED
 #define SSL_AD_NO_RENEGOTIATION                TLS1_AD_NO_RENEGOTIATION
 
 #define SSL_ERROR_NONE                 0
@@ -867,7 +894,7 @@
 
 #endif
 
-int    SSL_CTX_set_cipher_list(SSL_CTX *,char *str);
+int    SSL_CTX_set_cipher_list(SSL_CTX *,const char *str);
 SSL_CTX *SSL_CTX_new(SSL_METHOD *meth);
 void   SSL_CTX_free(SSL_CTX *);
 long SSL_CTX_set_timeout(SSL_CTX *ctx,long t);
@@ -899,7 +926,7 @@
 BIO *  SSL_get_rbio(SSL *s);
 BIO *  SSL_get_wbio(SSL *s);
 #endif
-int    SSL_set_cipher_list(SSL *s, char *str);
+int    SSL_set_cipher_list(SSL *s, const char *str);
 void   SSL_set_read_ahead(SSL *s, int yes);
 int    SSL_get_verify_mode(SSL *s);
 int    SSL_get_verify_depth(SSL *s);
@@ -998,6 +1025,12 @@
 SSL *  SSL_new(SSL_CTX *ctx);
 int    SSL_set_session_id_context(SSL *ssl,const unsigned char *sid_ctx,
                                   unsigned int sid_ctx_len);
+
+int SSL_CTX_set_purpose(SSL_CTX *s, int purpose);
+int SSL_set_purpose(SSL *s, int purpose);
+int SSL_CTX_set_trust(SSL_CTX *s, int trust);
+int SSL_set_trust(SSL *s, int trust);
+
 void   SSL_free(SSL *ssl);
 int    SSL_accept(SSL *ssl);
 int    SSL_connect(SSL *ssl);
@@ -1005,10 +1038,12 @@
 int    SSL_peek(SSL *ssl,char *buf,int num);
 int    SSL_write(SSL *ssl,const char *buf,int num);
 long   SSL_ctrl(SSL *ssl,int cmd, long larg, char *parg);
+long   SSL_callback_ctrl(SSL *, int, void (*)());
 long   SSL_CTX_ctrl(SSL_CTX *ctx,int cmd, long larg, char *parg);
+long   SSL_CTX_callback_ctrl(SSL_CTX *, int, void (*)());
 
 int    SSL_get_error(SSL *s,int ret_code);
-char * SSL_get_version(SSL *s);
+const char *SSL_get_version(SSL *s);
 
 /* This sets the 'default' SSL version that SSL_new() will create */
 int SSL_CTX_set_ssl_version(SSL_CTX *ctx,SSL_METHOD *meth);
@@ -1074,7 +1109,9 @@
 int SSL_CTX_set_default_verify_paths(SSL_CTX *ctx);
 int SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile,
        const char *CApath);
+#define SSL_get0_session SSL_get_session /* just peek at pointer */
 SSL_SESSION *SSL_get_session(SSL *ssl);
+SSL_SESSION *SSL_get1_session(SSL *ssl); /* obtain a reference count */
 SSL_CTX *SSL_get_SSL_CTX(SSL *ssl);
 void SSL_set_info_callback(SSL *ssl,void (*cb)());
 void (*SSL_get_info_callback(SSL *ssl))();
@@ -1085,18 +1122,18 @@
 
 int SSL_set_ex_data(SSL *ssl,int idx,void *data);
 void *SSL_get_ex_data(SSL *ssl,int idx);
-int SSL_get_ex_new_index(long argl, char *argp, int (*new_func)(),
-       int (*dup_func)(), void (*free_func)());
+int SSL_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
+       CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func);
 
 int SSL_SESSION_set_ex_data(SSL_SESSION *ss,int idx,void *data);
 void *SSL_SESSION_get_ex_data(SSL_SESSION *ss,int idx);
-int SSL_SESSION_get_ex_new_index(long argl, char *argp, int (*new_func)(),
-       int (*dup_func)(), void (*free_func)());
+int SSL_SESSION_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
+       CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func);
 
 int SSL_CTX_set_ex_data(SSL_CTX *ssl,int idx,void *data);
 void *SSL_CTX_get_ex_data(SSL_CTX *ssl,int idx);
-int SSL_CTX_get_ex_new_index(long argl, char *argp, int (*new_func)(),
-       int (*dup_func)(), void (*free_func)());
+int SSL_CTX_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
+       CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func);
 
 int SSL_get_ex_data_X509_STORE_CTX_idx(void );
 
@@ -1219,13 +1256,18 @@
 #define SSL_F_SSL_CERT_INSTANTIATE                      214
 #define SSL_F_SSL_CERT_NEW                              162
 #define SSL_F_SSL_CHECK_PRIVATE_KEY                     163
+#define SSL_F_SSL_CIPHER_PROCESS_RULESTR                230
+#define SSL_F_SSL_CIPHER_STRENGTH_SORT                  231
 #define SSL_F_SSL_CLEAR                                         164
 #define SSL_F_SSL_COMP_ADD_COMPRESSION_METHOD           165
 #define SSL_F_SSL_CREATE_CIPHER_LIST                    166
+#define SSL_F_SSL_CTRL                                  232
 #define SSL_F_SSL_CTX_CHECK_PRIVATE_KEY                         168
 #define SSL_F_SSL_CTX_NEW                               169
+#define SSL_F_SSL_CTX_SET_PURPOSE                       226
 #define SSL_F_SSL_CTX_SET_SESSION_ID_CONTEXT            219
 #define SSL_F_SSL_CTX_SET_SSL_VERSION                   170
+#define SSL_F_SSL_CTX_SET_TRUST                                 229
 #define SSL_F_SSL_CTX_USE_CERTIFICATE                   171
 #define SSL_F_SSL_CTX_USE_CERTIFICATE_ASN1              172
 #define SSL_F_SSL_CTX_USE_CERTIFICATE_CHAIN_FILE        220
@@ -1253,9 +1295,11 @@
 #define SSL_F_SSL_SET_CERT                              191
 #define SSL_F_SSL_SET_FD                                192
 #define SSL_F_SSL_SET_PKEY                              193
+#define SSL_F_SSL_SET_PURPOSE                           227
 #define SSL_F_SSL_SET_RFD                               194
 #define SSL_F_SSL_SET_SESSION                           195
 #define SSL_F_SSL_SET_SESSION_ID_CONTEXT                218
+#define SSL_F_SSL_SET_TRUST                             228
 #define SSL_F_SSL_SET_WFD                               196
 #define SSL_F_SSL_SHUTDOWN                              224
 #define SSL_F_SSL_UNDEFINED_FUNCTION                    197
@@ -1282,7 +1326,6 @@
 #define SSL_R_BAD_AUTHENTICATION_TYPE                   102
 #define SSL_R_BAD_CHANGE_CIPHER_SPEC                    103
 #define SSL_R_BAD_CHECKSUM                              104
-#define SSL_R_BAD_CLIENT_REQUEST                        105
 #define SSL_R_BAD_DATA_RETURNED_BY_CALLBACK             106
 #define SSL_R_BAD_DECOMPRESSION                                 107
 #define SSL_R_BAD_DH_G_LENGTH                           108
@@ -1290,6 +1333,7 @@
 #define SSL_R_BAD_DH_P_LENGTH                           110
 #define SSL_R_BAD_DIGEST_LENGTH                                 111
 #define SSL_R_BAD_DSA_SIGNATURE                                 112
+#define SSL_R_BAD_HELLO_REQUEST                                 105
 #define SSL_R_BAD_LENGTH                                271
 #define SSL_R_BAD_MAC_DECODE                            113
 #define SSL_R_BAD_MESSAGE_TYPE                          114
@@ -1329,6 +1373,7 @@
 #define SSL_R_DH_PUBLIC_VALUE_LENGTH_IS_WRONG           148
 #define SSL_R_DIGEST_CHECK_FAILED                       149
 #define SSL_R_ENCRYPTED_LENGTH_TOO_LONG                         150
+#define SSL_R_ERROR_GENERATING_TMP_RSA_KEY              1092
 #define SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST             151
 #define SSL_R_EXCESSIVE_MESSAGE_SIZE                    152
 #define SSL_R_EXTRA_DATA_IN_MESSAGE                     153
@@ -1337,6 +1382,9 @@
 #define SSL_R_HTTP_REQUEST                              156
 #define SSL_R_INTERNAL_ERROR                            157
 #define SSL_R_INVALID_CHALLENGE_LENGTH                  158
+#define SSL_R_INVALID_COMMAND                           280
+#define SSL_R_INVALID_PURPOSE                           278
+#define SSL_R_INVALID_TRUST                             279
 #define SSL_R_LENGTH_MISMATCH                           159
 #define SSL_R_LENGTH_TOO_SHORT                          160
 #define SSL_R_LIBRARY_BUG                               274
@@ -1429,14 +1477,14 @@
 #define SSL_R_TLSV1_ALERT_DECODE_ERROR                  1050
 #define SSL_R_TLSV1_ALERT_DECRYPTION_FAILED             1021
 #define SSL_R_TLSV1_ALERT_DECRYPT_ERROR                         1051
-#define SSL_R_TLSV1_ALERT_EXPORT_RESTRICION             1060
+#define SSL_R_TLSV1_ALERT_EXPORT_RESTRICTION            1060
 #define SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY                 1071
 #define SSL_R_TLSV1_ALERT_INTERNAL_ERROR                1080
 #define SSL_R_TLSV1_ALERT_NO_RENEGOTIATION              1100
 #define SSL_R_TLSV1_ALERT_PROTOCOL_VERSION              1070
 #define SSL_R_TLSV1_ALERT_RECORD_OVERFLOW               1022
 #define SSL_R_TLSV1_ALERT_UNKNOWN_CA                    1048
-#define SSL_R_TLSV1_ALERT_USER_CANCLED                  1090
+#define SSL_R_TLSV1_ALERT_USER_CANCELLED                1090
 #define SSL_R_TLS_CLIENT_CERT_REQ_WITH_ANON_CIPHER      232
 #define SSL_R_TLS_PEER_DID_NOT_RESPOND_WITH_CERTIFICATE_LIST 233
 #define SSL_R_TLS_RSA_ENCRYPTED_VALUE_LENGTH_IS_WRONG   234
@@ -1464,6 +1512,7 @@
 #define SSL_R_UNKNOWN_STATE                             255
 #define SSL_R_UNSUPPORTED_CIPHER                        256
 #define SSL_R_UNSUPPORTED_COMPRESSION_ALGORITHM                 257
+#define SSL_R_UNSUPPORTED_OPTION                        1091
 #define SSL_R_UNSUPPORTED_PROTOCOL                      258
 #define SSL_R_UNSUPPORTED_SSL_VERSION                   259
 #define SSL_R_WRITE_BIO_NOT_SET                                 260
Index: opensa/openssl/ssl/ssl2.h
diff -u opensa/openssl/ssl/ssl2.h:1.1 opensa/openssl/ssl/ssl2.h:1.2
--- opensa/openssl/ssl/ssl2.h:1.1       Tue Jan 25 23:01:18 2000
+++ opensa/openssl/ssl/ssl2.h   Thu Mar  2 21:12:05 2000
@@ -151,7 +151,7 @@
 #define  CERT          char
 #endif
 
-typedef struct ssl2_ctx_st
+typedef struct ssl2_state_st
        {
        int three_byte_header;
        int clear_text;         /* clear text */
@@ -214,7 +214,7 @@
                unsigned int clen;
                unsigned int rlen;
                } tmp;
-       } SSL2_CTX;
+       } SSL2_STATE;
 
 /* SSLv2 */
 /* client */
Index: opensa/openssl/ssl/ssl3.h
diff -u opensa/openssl/ssl/ssl3.h:1.1 opensa/openssl/ssl/ssl3.h:1.2
--- opensa/openssl/ssl/ssl3.h:1.1       Tue Jan 25 23:01:18 2000
+++ opensa/openssl/ssl/ssl3.h   Thu Mar  2 21:12:05 2000
@@ -158,25 +158,9 @@
 #define SSL3_RT_MAX_PACKET_SIZE                
(SSL3_RT_MAX_ENCRYPTED_LENGTH+SSL3_RT_HEADER_LENGTH)
 #define SSL3_RT_MAX_DATA_SIZE                  (1024*1024)
 
-/* the states that a SSL3_RECORD can be in
- * For SSL_read it goes
- * rbuf->ENCODED       -> read 
- * ENCODED             -> we need to decode everything - call decode_record
- */
- 
-#define SSL3_RS_BLANK                  1
-#define SSL3_RS_DATA
-
-#define SSL3_RS_ENCODED                        2
-#define SSL3_RS_READ_MORE              3
-#define SSL3_RS_WRITE_MORE
-#define SSL3_RS_PLAIN                  3
-#define SSL3_RS_PART_READ              4
-#define SSL3_RS_PART_WRITE             5
+#define SSL3_MD_CLIENT_FINISHED_CONST  "\x43\x4C\x4E\x54"
+#define SSL3_MD_SERVER_FINISHED_CONST  "\x53\x52\x56\x52"
 
-#define SSL3_MD_CLIENT_FINISHED_CONST  {0x43,0x4C,0x4E,0x54}
-#define SSL3_MD_SERVER_FINISHED_CONST  {0x53,0x52,0x56,0x52}
-
 #define SSL3_VERSION                   0x0300
 #define SSL3_VERSION_MAJOR             0x03
 #define SSL3_VERSION_MINOR             0x00
@@ -204,22 +188,20 @@
 
 typedef struct ssl3_record_st
        {
-/*r */ int type;               /* type of record */
-/*  */ /*int state;*/          /* any data in it? */
-/*rw*/ unsigned int length;    /* How many bytes available */
-/*r */ unsigned int off;       /* read/write offset into 'buf' */
-/*rw*/ unsigned char *data;    /* pointer to the record data */
-/*rw*/ unsigned char *input;   /* where the decode bytes are */
-/*r */ unsigned char *comp;    /* only used with decompression - malloc()ed */
+/*r */ int type;               /* type of record */
+/*rw*/ unsigned int length;    /* How many bytes available */
+/*r */ unsigned int off;       /* read/write offset into 'buf' */
+/*rw*/ unsigned char *data;    /* pointer to the record data */
+/*rw*/ unsigned char *input;   /* where the decode bytes are */
+/*r */ unsigned char *comp;    /* only used with decompression - malloc()ed */
        } SSL3_RECORD;
 
 typedef struct ssl3_buffer_st
        {
-/*r */ int total;              /* used in non-blocking writes */
-/*r */ int wanted;             /* how many more bytes we need */
-/*rw*/ int left;               /* how many bytes left */
-/*rw*/ int offset;             /* where to 'copy from' */
-/*rw*/ unsigned char *buf;     /* SSL3_RT_MAX_PACKET_SIZE bytes */
+       unsigned char *buf;     /* SSL3_RT_MAX_PACKET_SIZE bytes (more if
+                                * SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER is set) */
+       int offset;             /* where to 'copy from' */
+       int left;               /* how many bytes left */
        } SSL3_BUFFER;
 
 #define SSL3_CT_RSA_SIGN                       1
@@ -235,35 +217,8 @@
 #define SSL3_FLAGS_DELAY_CLIENT_FINISHED       0x0002
 #define SSL3_FLAGS_POP_BUFFER                  0x0004
 #define TLS1_FLAGS_TLS_PADDING_BUG             0x0008
-
-#if 0
-#define AD_CLOSE_NOTIFY                        0
-#define AD_UNEXPECTED_MESSAGE          1
-#define AD_BAD_RECORD_MAC              2
-#define AD_DECRYPTION_FAILED           3
-#define AD_RECORD_OVERFLOW             4
-#define AD_DECOMPRESSION_FAILURE       5       /* fatal */
-#define AD_HANDSHAKE_FAILURE           6       /* fatal */
-#define AD_NO_CERTIFICATE              7       /* Not under TLS */
-#define AD_BAD_CERTIFICATE             8
-#define AD_UNSUPPORTED_CERTIFICATE     9
-#define AD_CERTIFICATE_REVOKED         10      
-#define AD_CERTIFICATE_EXPIRED         11
-#define AD_CERTIFICATE_UNKNOWN         12
-#define AD_ILLEGAL_PARAMETER           13      /* fatal */
-#define AD_UNKNOWN_CA                  14      /* fatal */
-#define AD_ACCESS_DENIED               15      /* fatal */
-#define AD_DECODE_ERROR                        16      /* fatal */
-#define AD_DECRYPT_ERROR               17
-#define AD_EXPORT_RESTRICION           18      /* fatal */
-#define AD_PROTOCOL_VERSION            19      /* fatal */
-#define AD_INSUFFICIENT_SECURITY       20      /* fatal */
-#define AD_INTERNAL_ERROR              21      /* fatal */
-#define AD_USER_CANCLED                        22
-#define AD_NO_RENEGOTIATION            23
-#endif
 
-typedef struct ssl3_ctx_st
+typedef struct ssl3_state_st
        {
        long flags;
        int delay_buf_pop_ret;
@@ -278,10 +233,16 @@
 
        SSL3_BUFFER rbuf;       /* read IO goes into here */
        SSL3_BUFFER wbuf;       /* write IO goes into here */
+
        SSL3_RECORD rrec;       /* each decoded record goes in here */
        SSL3_RECORD wrec;       /* goes out from here */
-                               /* Used by ssl3_read_n to point
-                                * to input data packet */
+
+       /* storage for Alert/Handshake protocol data received but not
+        * yet processed by ssl3_read_bytes: */
+       unsigned char alert_fragment[2];
+       unsigned int alert_fragment_len;
+       unsigned char handshake_fragment[4];
+       unsigned int handshake_fragment_len;
 
        /* partial write - check the numbers match */
        unsigned int wnum;      /* number of bytes sent so far */
@@ -300,7 +261,7 @@
 
        int warn_alert;
        int fatal_alert;
-       /* we alow one fatal and one warning alert to be outstanding,
+       /* we allow one fatal and one warning alert to be outstanding,
         * send close alert via the warning alert */
        int alert_dispatch;
        unsigned char send_alert[2];
@@ -314,8 +275,14 @@
        int in_read_app_data;
 
        struct  {
-               /* Actually only needs to be 16+20 for SSLv3 and 12 for TLS */
+               /* actually only needs to be 16+20 */
+               unsigned char cert_verify_md[EVP_MAX_MD_SIZE*2];
+
+               /* actually only need to be 16+20 for SSLv3 and 12 for TLS */
                unsigned char finish_md[EVP_MAX_MD_SIZE*2];
+               int finish_md_len;
+               unsigned char peer_finish_md[EVP_MAX_MD_SIZE*2];
+               int peer_finish_md_len;
                
                unsigned long message_size;
                int message_type;
@@ -351,7 +318,7 @@
                int cert_request;
                } tmp;
 
-       } SSL3_CTX;
+       } SSL3_STATE;
 
 /* SSLv3 */
 /*client */
@@ -429,7 +396,7 @@
 #define SSL3_ST_SW_FINISHED_A          (0x1E0|SSL_ST_ACCEPT)
 #define SSL3_ST_SW_FINISHED_B          (0x1E1|SSL_ST_ACCEPT)
 
-#define SSL3_MT_CLIENT_REQUEST                 0
+#define SSL3_MT_HELLO_REQUEST                  0
 #define SSL3_MT_CLIENT_HELLO                   1
 #define SSL3_MT_SERVER_HELLO                   2
 #define SSL3_MT_CERTIFICATE                    11
Index: opensa/openssl/ssl/ssl_asn1.c
diff -u opensa/openssl/ssl/ssl_asn1.c:1.1 opensa/openssl/ssl/ssl_asn1.c:1.2
--- opensa/openssl/ssl/ssl_asn1.c:1.1   Tue Jan 25 23:01:18 2000
+++ opensa/openssl/ssl/ssl_asn1.c       Thu Mar  2 21:12:05 2000
@@ -60,6 +60,7 @@
 #include <stdlib.h>
 #include <openssl/asn1_mac.h>
 #include <openssl/objects.h>
+#include <openssl/x509.h>
 #include "ssl_locl.h"
 
 typedef struct ssl_session_asn1_st
@@ -73,14 +74,15 @@
        ASN1_OCTET_STRING key_arg;
        ASN1_INTEGER time;
        ASN1_INTEGER timeout;
+       ASN1_INTEGER verify_result;
        } SSL_SESSION_ASN1;
 
 int i2d_SSL_SESSION(SSL_SESSION *in, unsigned char **pp)
        {
 #define LSIZE2 (sizeof(long)*2)
-       int v1=0,v2=0,v3=0,v4=0;
+       int v1=0,v2=0,v3=0,v4=0,v5=0;
        unsigned char buf[4],ibuf1[LSIZE2],ibuf2[LSIZE2];
-       unsigned char ibuf3[LSIZE2],ibuf4[LSIZE2];
+       unsigned char ibuf3[LSIZE2],ibuf4[LSIZE2],ibuf5[LSIZE2];
        long l;
        SSL_SESSION_ASN1 a;
        M_ASN1_I2D_vars(in);
@@ -89,7 +91,7 @@
                return(0);
 
        /* Note that I cheat in the following 2 assignments.  I know
-        * that if the ASN1_INTERGER passed to ASN1_INTEGER_set
+        * that if the ASN1_INTEGER passed to ASN1_INTEGER_set
         * is > sizeof(long)+1, the buffer will not be re-Malloc()ed.
         * This is a bit evil but makes things simple, no dynamic allocation
         * to clean up :-) */
@@ -156,6 +158,14 @@
                ASN1_INTEGER_set(&(a.timeout),in->timeout);
                }
 
+       if (in->verify_result != X509_V_OK)
+               {
+               a.verify_result.length=LSIZE2;
+               a.verify_result.type=V_ASN1_INTEGER;
+               a.verify_result.data=ibuf5;
+               ASN1_INTEGER_set(&a.verify_result,in->verify_result);
+               }
+
        M_ASN1_I2D_len(&(a.version),            i2d_ASN1_INTEGER);
        M_ASN1_I2D_len(&(a.ssl_version),        i2d_ASN1_INTEGER);
        M_ASN1_I2D_len(&(a.cipher),             i2d_ASN1_OCTET_STRING);
@@ -170,6 +180,8 @@
        if (in->peer != NULL)
                M_ASN1_I2D_len_EXP_opt(in->peer,i2d_X509,3,v3);
        M_ASN1_I2D_len_EXP_opt(&a.session_id_context,i2d_ASN1_OCTET_STRING,4,v4);
+       if (in->verify_result != X509_V_OK)
+               M_ASN1_I2D_len_EXP_opt(&(a.verify_result),i2d_ASN1_INTEGER,5,v5);
 
        M_ASN1_I2D_seq_total();
 
@@ -188,7 +200,8 @@
                M_ASN1_I2D_put_EXP_opt(in->peer,i2d_X509,3,v3);
        M_ASN1_I2D_put_EXP_opt(&a.session_id_context,i2d_ASN1_OCTET_STRING,4,
                               v4);
-
+       if (in->verify_result != X509_V_OK)
+               M_ASN1_I2D_put_EXP_opt(&a.verify_result,i2d_ASN1_INTEGER,5,v5);
        M_ASN1_I2D_finish();
        }
 
@@ -322,6 +335,15 @@
        else
            ret->sid_ctx_length=0;
 
+       ai.length=0;
+       M_ASN1_D2I_get_EXP_opt(aip,d2i_ASN1_INTEGER,5);
+       if (ai.data != NULL)
+               {
+               ret->verify_result=ASN1_INTEGER_get(aip);
+               Free(ai.data); ai.data=NULL; ai.length=0;
+               }
+       else
+               ret->verify_result=X509_V_OK;
+
        M_ASN1_D2I_Finish(a,SSL_SESSION_free,SSL_F_D2I_SSL_SESSION);
        }
-
Index: opensa/openssl/ssl/ssl_cert.c
diff -u opensa/openssl/ssl/ssl_cert.c:1.1 opensa/openssl/ssl/ssl_cert.c:1.2
--- opensa/openssl/ssl/ssl_cert.c:1.1   Tue Jan 25 23:01:18 2000
+++ opensa/openssl/ssl/ssl_cert.c       Thu Mar  2 21:12:05 2000
@@ -105,17 +105,26 @@
  */
 
 #include <stdio.h>
-#include <sys/types.h>
-#if !defined(WIN32) && !defined(VSM) && !defined(NeXT)
+
+#include "openssl/e_os.h"
+
+#ifndef NO_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+
+#if !defined(WIN32) && !defined(VSM) && !defined(NeXT) && !defined(MAC_OS_pre_X)
 #include <dirent.h>
 #endif
+
 #ifdef NeXT
 #include <sys/dir.h>
 #define dirent direct
 #endif
+
 #include <openssl/objects.h>
 #include <openssl/bio.h>
 #include <openssl/pem.h>
+#include <openssl/x509v3.h>
 #include "ssl_locl.h"
 
 int SSL_get_ex_data_X509_STORE_CTX_idx(void)
@@ -422,9 +431,17 @@
        X509_STORE_CTX_init(&ctx,s->ctx->cert_store,x,sk);
        if (SSL_get_verify_depth(s) >= 0)
                X509_STORE_CTX_set_depth(&ctx, SSL_get_verify_depth(s));
-       X509_STORE_CTX_set_ex_data(&ctx,SSL_get_ex_data_X509_STORE_CTX_idx(),
-               (char *)s);
+       X509_STORE_CTX_set_ex_data(&ctx,SSL_get_ex_data_X509_STORE_CTX_idx(),s);
+       /* We need to set the verify purpose. The purpose can be determined by
+        * the context: if its a server it will verify SSL client certificates
+        * or vice versa.
+         */
+
+       if(s->server) i = X509_PURPOSE_SSL_CLIENT;
+       else i = X509_PURPOSE_SSL_SERVER;
 
+       X509_STORE_CTX_purpose_inherit(&ctx, i, s->purpose, s->trust);
+
        if (s->ctx->app_verify_callback != NULL)
                i=s->ctx->app_verify_callback(&ctx); /* should pass app_verify_arg */
        else
@@ -534,7 +551,7 @@
        return(add_client_CA(&(ctx->client_CA),x));
        }
 
-static int name_cmp(X509_NAME **a,X509_NAME **b)
+static int xname_cmp(X509_NAME **a,X509_NAME **b)
        {
        return(X509_NAME_cmp(*a,*b));
        }
@@ -556,7 +573,7 @@
        STACK_OF(X509_NAME) *ret,*sk;
 
        ret=sk_X509_NAME_new(NULL);
-       sk=sk_X509_NAME_new(name_cmp);
+       sk=sk_X509_NAME_new(xname_cmp);
 
        in=BIO_new(BIO_s_file_internal());
 
@@ -617,7 +634,7 @@
     int ret=1;
     int (*oldcmp)(X509_NAME **a, X509_NAME **b);
 
-    oldcmp=sk_X509_NAME_set_cmp_func(stack,name_cmp);
+    oldcmp=sk_X509_NAME_set_cmp_func(stack,xname_cmp);
 
     in=BIO_new(BIO_s_file_internal());
 
@@ -671,6 +688,7 @@
 
 #ifndef WIN32
 #ifndef VMS                    /* XXXX This may be fixed in the future */
+#ifndef MAC_OS_pre_X
 
 int SSL_add_dir_cert_subjects_to_stack(STACK_OF(X509_NAME) *stack,
                                       const char *dir)
@@ -712,5 +730,6 @@
     return ret;
     }
 
+#endif
 #endif
 #endif
Index: opensa/openssl/ssl/ssl_ciph.c
diff -u opensa/openssl/ssl/ssl_ciph.c:1.1 opensa/openssl/ssl/ssl_ciph.c:1.2
--- opensa/openssl/ssl/ssl_ciph.c:1.1   Tue Jan 25 23:01:18 2000
+++ opensa/openssl/ssl/ssl_ciph.c       Thu Mar  2 21:12:05 2000
@@ -83,25 +83,12 @@
        NULL,NULL,
        };
 
-typedef struct cipher_sort_st
-       {
-       SSL_CIPHER *cipher;
-       int pref;
-       } CIPHER_SORT;
-
 #define CIPHER_ADD     1
 #define CIPHER_KILL    2
 #define CIPHER_DEL     3
 #define CIPHER_ORD     4
+#define CIPHER_SPECIAL 5
 
-typedef struct cipher_choice_st
-       {
-       int type;
-       unsigned long algorithms;
-       unsigned long mask;
-       long top;
-       } CIPHER_CHOICE;
-
 typedef struct cipher_order_st
        {
        SSL_CIPHER *cipher;
@@ -110,59 +97,55 @@
        struct cipher_order_st *next,*prev;
        } CIPHER_ORDER;
 
-static SSL_CIPHER cipher_aliases[]={
+static const SSL_CIPHER cipher_aliases[]={
        /* Don't include eNULL unless specifically enabled */
-       {0,SSL_TXT_ALL, 0,SSL_ALL & ~SSL_eNULL, 0,SSL_ALL}, /* must be first */
-       {0,SSL_TXT_kRSA,0,SSL_kRSA,  0,SSL_MKEY_MASK},
-       {0,SSL_TXT_kDHr,0,SSL_kDHr,  0,SSL_MKEY_MASK},
-       {0,SSL_TXT_kDHd,0,SSL_kDHd,  0,SSL_MKEY_MASK},
-       {0,SSL_TXT_kEDH,0,SSL_kEDH,  0,SSL_MKEY_MASK},
-       {0,SSL_TXT_kFZA,0,SSL_kFZA,  0,SSL_MKEY_MASK},
-       {0,SSL_TXT_DH,  0,SSL_DH,    0,SSL_MKEY_MASK},
-       {0,SSL_TXT_EDH, 0,SSL_EDH,   0,SSL_MKEY_MASK|SSL_AUTH_MASK},
-
-       {0,SSL_TXT_aRSA,0,SSL_aRSA,  0,SSL_AUTH_MASK},
-       {0,SSL_TXT_aDSS,0,SSL_aDSS,  0,SSL_AUTH_MASK},
-       {0,SSL_TXT_aFZA,0,SSL_aFZA,  0,SSL_AUTH_MASK},
-       {0,SSL_TXT_aNULL,0,SSL_aNULL,0,SSL_AUTH_MASK},
-       {0,SSL_TXT_aDH, 0,SSL_aDH,   0,SSL_AUTH_MASK},
-       {0,SSL_TXT_DSS, 0,SSL_DSS,   0,SSL_AUTH_MASK},
-
-       {0,SSL_TXT_DES, 0,SSL_DES,   0,SSL_ENC_MASK},
-       {0,SSL_TXT_3DES,0,SSL_3DES,  0,SSL_ENC_MASK},
-       {0,SSL_TXT_RC4, 0,SSL_RC4,   0,SSL_ENC_MASK},
-       {0,SSL_TXT_RC2, 0,SSL_RC2,   0,SSL_ENC_MASK},
-       {0,SSL_TXT_IDEA,0,SSL_IDEA,  0,SSL_ENC_MASK},
-       {0,SSL_TXT_eNULL,0,SSL_eNULL,0,SSL_ENC_MASK},
-       {0,SSL_TXT_eFZA,0,SSL_eFZA,  0,SSL_ENC_MASK},
-
-       {0,SSL_TXT_MD5, 0,SSL_MD5,   0,SSL_MAC_MASK},
-       {0,SSL_TXT_SHA1,0,SSL_SHA1,  0,SSL_MAC_MASK},
-       {0,SSL_TXT_SHA, 0,SSL_SHA,   0,SSL_MAC_MASK},
-
-       {0,SSL_TXT_NULL,0,SSL_NULL,  0,SSL_ENC_MASK},
-       {0,SSL_TXT_RSA, 0,SSL_RSA,   0,SSL_AUTH_MASK|SSL_MKEY_MASK},
-       {0,SSL_TXT_ADH, 0,SSL_ADH,   0,SSL_AUTH_MASK|SSL_MKEY_MASK},
-       {0,SSL_TXT_FZA, 0,SSL_FZA,   0,SSL_AUTH_MASK|SSL_MKEY_MASK|SSL_ENC_MASK},
-
-       {0,SSL_TXT_EXP40, 0,SSL_EXP40, 0,SSL_EXP_MASK},
-       {0,SSL_TXT_EXPORT,0,SSL_EXP40, 0,SSL_EXP_MASK},
-       {0,SSL_TXT_EXP56, 0,SSL_EXP56, 0,SSL_EXP_MASK},
-       {0,SSL_TXT_SSLV2, 0,SSL_SSLV2, 0,SSL_SSL_MASK},
-       {0,SSL_TXT_SSLV3, 0,SSL_SSLV3, 0,SSL_SSL_MASK},
-       {0,SSL_TXT_TLSV1, 0,SSL_TLSV1, 0,SSL_SSL_MASK},
-       {0,SSL_TXT_LOW,   0,SSL_LOW,   0,SSL_STRONG_MASK},
-       {0,SSL_TXT_MEDIUM,0,SSL_MEDIUM,0,SSL_STRONG_MASK},
-       {0,SSL_TXT_HIGH,  0,SSL_HIGH,  0,SSL_STRONG_MASK},
+       {0,SSL_TXT_ALL, 0,SSL_ALL & ~SSL_eNULL, SSL_ALL ,0,0,0,SSL_ALL,SSL_ALL}, /* 
+must be first */
+       {0,SSL_TXT_kRSA,0,SSL_kRSA,  0,0,0,0,SSL_MKEY_MASK,0},
+       {0,SSL_TXT_kDHr,0,SSL_kDHr,  0,0,0,0,SSL_MKEY_MASK,0},
+       {0,SSL_TXT_kDHd,0,SSL_kDHd,  0,0,0,0,SSL_MKEY_MASK,0},
+       {0,SSL_TXT_kEDH,0,SSL_kEDH,  0,0,0,0,SSL_MKEY_MASK,0},
+       {0,SSL_TXT_kFZA,0,SSL_kFZA,  0,0,0,0,SSL_MKEY_MASK,0},
+       {0,SSL_TXT_DH,  0,SSL_DH,    0,0,0,0,SSL_MKEY_MASK,0},
+       {0,SSL_TXT_EDH, 0,SSL_EDH,   0,0,0,0,SSL_MKEY_MASK|SSL_AUTH_MASK,0},
+
+       {0,SSL_TXT_aRSA,0,SSL_aRSA,  0,0,0,0,SSL_AUTH_MASK,0},
+       {0,SSL_TXT_aDSS,0,SSL_aDSS,  0,0,0,0,SSL_AUTH_MASK,0},
+       {0,SSL_TXT_aFZA,0,SSL_aFZA,  0,0,0,0,SSL_AUTH_MASK,0},
+       {0,SSL_TXT_aNULL,0,SSL_aNULL,0,0,0,0,SSL_AUTH_MASK,0},
+       {0,SSL_TXT_aDH, 0,SSL_aDH,   0,0,0,0,SSL_AUTH_MASK,0},
+       {0,SSL_TXT_DSS, 0,SSL_DSS,   0,0,0,0,SSL_AUTH_MASK,0},
+
+       {0,SSL_TXT_DES, 0,SSL_DES,   0,0,0,0,SSL_ENC_MASK,0},
+       {0,SSL_TXT_3DES,0,SSL_3DES,  0,0,0,0,SSL_ENC_MASK,0},
+       {0,SSL_TXT_RC4, 0,SSL_RC4,   0,0,0,0,SSL_ENC_MASK,0},
+       {0,SSL_TXT_RC2, 0,SSL_RC2,   0,0,0,0,SSL_ENC_MASK,0},
+       {0,SSL_TXT_IDEA,0,SSL_IDEA,  0,0,0,0,SSL_ENC_MASK,0},
+       {0,SSL_TXT_eNULL,0,SSL_eNULL,0,0,0,0,SSL_ENC_MASK,0},
+       {0,SSL_TXT_eFZA,0,SSL_eFZA,  0,0,0,0,SSL_ENC_MASK,0},
+
+       {0,SSL_TXT_MD5, 0,SSL_MD5,   0,0,0,0,SSL_MAC_MASK,0},
+       {0,SSL_TXT_SHA1,0,SSL_SHA1,  0,0,0,0,SSL_MAC_MASK,0},
+       {0,SSL_TXT_SHA, 0,SSL_SHA,   0,0,0,0,SSL_MAC_MASK,0},
+
+       {0,SSL_TXT_NULL,0,SSL_NULL,  0,0,0,0,SSL_ENC_MASK,0},
+       {0,SSL_TXT_RSA, 0,SSL_RSA,   0,0,0,0,SSL_AUTH_MASK|SSL_MKEY_MASK,0},
+       {0,SSL_TXT_ADH, 0,SSL_ADH,   0,0,0,0,SSL_AUTH_MASK|SSL_MKEY_MASK,0},
+       {0,SSL_TXT_FZA, 0,SSL_FZA,   
+0,0,0,0,SSL_AUTH_MASK|SSL_MKEY_MASK|SSL_ENC_MASK,0},
+
+       {0,SSL_TXT_SSLV2, 0,SSL_SSLV2, 0,0,0,0,SSL_SSL_MASK,0},
+       {0,SSL_TXT_SSLV3, 0,SSL_SSLV3, 0,0,0,0,SSL_SSL_MASK,0},
+       {0,SSL_TXT_TLSV1, 0,SSL_TLSV1, 0,0,0,0,SSL_SSL_MASK,0},
+
+       {0,SSL_TXT_EXP   ,0, 0,SSL_EXPORT, 0,0,0,0,SSL_EXP_MASK},
+       {0,SSL_TXT_EXPORT,0, 0,SSL_EXPORT, 0,0,0,0,SSL_EXP_MASK},
+       {0,SSL_TXT_EXP40, 0, 0, SSL_EXP40, 0,0,0,0,SSL_STRONG_MASK},
+       {0,SSL_TXT_EXP56, 0, 0, SSL_EXP56, 0,0,0,0,SSL_STRONG_MASK},
+       {0,SSL_TXT_LOW,   0, 0,   SSL_LOW, 0,0,0,0,SSL_STRONG_MASK},
+       {0,SSL_TXT_MEDIUM,0, 0,SSL_MEDIUM, 0,0,0,0,SSL_STRONG_MASK},
+       {0,SSL_TXT_HIGH,  0, 0,  SSL_HIGH, 0,0,0,0,SSL_STRONG_MASK},
        };
 
 static int init_ciphers=1;
-static void load_ciphers();
-
-static int cmp_by_name(SSL_CIPHER **a, SSL_CIPHER **b)
-       {
-       return(strcmp((*a)->name,(*b)->name));
-       }
 
 static void load_ciphers(void)
        {
@@ -294,170 +277,320 @@
        *tail=curr;
        }
 
-STACK_OF(SSL_CIPHER) *ssl_create_cipher_list(SSL_METHOD *ssl_method,
-               STACK_OF(SSL_CIPHER) **cipher_list,
-               STACK_OF(SSL_CIPHER) **cipher_list_by_id,
-               char *str)
+static unsigned long ssl_cipher_get_disabled(void)
        {
-       SSL_CIPHER *c;
-       char *l;
-       STACK_OF(SSL_CIPHER) *ret=NULL,*ok=NULL;
-#define CL_BUF 40
-       char buf[CL_BUF];
-       char *tmp_str=NULL;
-       unsigned long mask,algorithms,ma;
-       char *start;
-       int i,j,k,num=0,ch,multi;
-       unsigned long al;
-       STACK *ca_list=NULL;
-       int current_x,num_x;
-       CIPHER_CHOICE *ops=NULL;
-       CIPHER_ORDER *list=NULL,*head=NULL,*tail=NULL,*curr,*tail2,*curr2;
-       int list_num;
-       int type;
-       SSL_CIPHER c_tmp,*cp;
-
-       if (str == NULL) return(NULL);
-
-       if (strncmp(str,"DEFAULT",7) == 0)
-               {
-               i=strlen(str)+2+strlen(SSL_DEFAULT_CIPHER_LIST);
-               if ((tmp_str=Malloc(i)) == NULL)
-                       {
-                       SSLerr(SSL_F_SSL_CREATE_CIPHER_LIST,ERR_R_MALLOC_FAILURE);
-                       goto err;
-                       }
-               strcpy(tmp_str,SSL_DEFAULT_CIPHER_LIST);
-               strcat(tmp_str,":");
-               strcat(tmp_str,&(str[7]));
-               str=tmp_str;
-               }
-       if (init_ciphers) load_ciphers();
-
-       num=ssl_method->num_ciphers();
-
-       if ((ret=sk_SSL_CIPHER_new(NULL)) == NULL) goto err;
-       if ((ca_list=(STACK *)sk_new(cmp_by_name)) == NULL) goto err;
+       unsigned long mask;
 
-       mask =SSL_kFZA;
+       mask = SSL_kFZA;
 #ifdef NO_RSA
-       mask|=SSL_aRSA|SSL_kRSA;
+       mask |= SSL_aRSA|SSL_kRSA;
 #endif
 #ifdef NO_DSA
-       mask|=SSL_aDSS;
+       mask |= SSL_aDSS;
 #endif
 #ifdef NO_DH
-       mask|=SSL_kDHr|SSL_kDHd|SSL_kEDH|SSL_aDH;
+       mask |= SSL_kDHr|SSL_kDHd|SSL_kEDH|SSL_aDH;
 #endif
 
 #ifdef SSL_FORBID_ENULL
-       mask|=SSL_eNULL;
+       mask |= SSL_eNULL;
 #endif
 
-       mask|=(ssl_cipher_methods[SSL_ENC_DES_IDX ] == NULL)?SSL_DES :0;
-       mask|=(ssl_cipher_methods[SSL_ENC_3DES_IDX] == NULL)?SSL_3DES:0;
-       mask|=(ssl_cipher_methods[SSL_ENC_RC4_IDX ] == NULL)?SSL_RC4 :0;
-       mask|=(ssl_cipher_methods[SSL_ENC_RC2_IDX ] == NULL)?SSL_RC2 :0;
-       mask|=(ssl_cipher_methods[SSL_ENC_IDEA_IDX] == NULL)?SSL_IDEA:0;
-       mask|=(ssl_cipher_methods[SSL_ENC_eFZA_IDX] == NULL)?SSL_eFZA:0;
+       mask |= (ssl_cipher_methods[SSL_ENC_DES_IDX ] == NULL) ? SSL_DES :0;
+       mask |= (ssl_cipher_methods[SSL_ENC_3DES_IDX] == NULL) ? SSL_3DES:0;
+       mask |= (ssl_cipher_methods[SSL_ENC_RC4_IDX ] == NULL) ? SSL_RC4 :0;
+       mask |= (ssl_cipher_methods[SSL_ENC_RC2_IDX ] == NULL) ? SSL_RC2 :0;
+       mask |= (ssl_cipher_methods[SSL_ENC_IDEA_IDX] == NULL) ? SSL_IDEA:0;
+       mask |= (ssl_cipher_methods[SSL_ENC_eFZA_IDX] == NULL) ? SSL_eFZA:0;
 
-       mask|=(ssl_digest_methods[SSL_MD_MD5_IDX ] == NULL)?SSL_MD5 :0;
-       mask|=(ssl_digest_methods[SSL_MD_SHA1_IDX] == NULL)?SSL_SHA1:0;
+       mask |= (ssl_digest_methods[SSL_MD_MD5_IDX ] == NULL) ? SSL_MD5 :0;
+       mask |= (ssl_digest_methods[SSL_MD_SHA1_IDX] == NULL) ? SSL_SHA1:0;
 
-       if ((list=(CIPHER_ORDER *)Malloc(sizeof(CIPHER_ORDER)*num)) == NULL)
-               goto err;
+       return(mask);
+       }
+
+static void ssl_cipher_collect_ciphers(const SSL_METHOD *ssl_method,
+               int num_of_ciphers, unsigned long mask, CIPHER_ORDER *list,
+               CIPHER_ORDER **head_p, CIPHER_ORDER **tail_p)
+       {
+       int i, list_num;
+       SSL_CIPHER *c;
+
+       /*
+        * We have num_of_ciphers descriptions compiled in, depending on the
+        * method selected (SSLv2 and/or SSLv3, TLSv1 etc).
+        * These will later be sorted in a linked list with at most num
+        * entries.
+        */
 
        /* Get the initial list of ciphers */
-       list_num=0;
-       for (i=0; i<num; i++)
+       list_num = 0;   /* actual count of ciphers */
+       for (i = 0; i < num_of_ciphers; i++)
                {
-               c=ssl_method->get_cipher((unsigned int)i);
+               c = ssl_method->get_cipher(i);
                /* drop those that use any of that is not available */
                if ((c != NULL) && c->valid && !(c->algorithms & mask))
                        {
-                       list[list_num].cipher=c;
-                       list[list_num].next=NULL;
-                       list[list_num].prev=NULL;
-                       list[list_num].active=0;
+                       list[list_num].cipher = c;
+                       list[list_num].next = NULL;
+                       list[list_num].prev = NULL;
+                       list[list_num].active = 0;
                        list_num++;
+                       /*
                        if (!sk_push(ca_list,(char *)c)) goto err;
+                       */
                        }
                }
-       
-       for (i=1; i<list_num-1; i++)
+
+       /*
+        * Prepare linked list from list entries
+        */     
+       for (i = 1; i < list_num - 1; i++)
                {
-               list[i].prev= &(list[i-1]);
-               list[i].next= &(list[i+1]);
+               list[i].prev = &(list[i-1]);
+               list[i].next = &(list[i+1]);
                }
        if (list_num > 0)
                {
-               head= &(list[0]);
-               head->prev=NULL;
-               head->next= &(list[1]);
-               tail= &(list[list_num-1]);
-               tail->prev= &(list[list_num-2]);
-               tail->next=NULL;
-               }
-
-       /* special case */
-       cipher_aliases[0].algorithms &= ~mask;
-
-       /* get the aliases */
-       k=sizeof(cipher_aliases)/sizeof(SSL_CIPHER);
-       for (j=0; j<k; j++)
-               {
-               al=cipher_aliases[j].algorithms;
-               /* Drop those that are not relevent */
-               if ((al & mask) == al) continue;
-               if (!sk_push(ca_list,(char *)&(cipher_aliases[j]))) goto err;
-               }
-
-       /* ca_list now holds a 'stack' of SSL_CIPHERS, some real, some
-        * 'aliases' */
-
-       /* how many parameters are there? */
-       num=1;
-       for (l=str; *l; l++)
-               if (ITEM_SEP(*l))
-                       num++;
-       ops=(CIPHER_CHOICE *)Malloc(sizeof(CIPHER_CHOICE)*num);
-       if (ops == NULL) goto err;
-       memset(ops,0,sizeof(CIPHER_CHOICE)*num);
-
-       /* we now parse the input string and create our operations */
-       l=str;
-       i=0;
-       current_x=0;
+               (*head_p) = &(list[0]);
+               (*head_p)->prev = NULL;
+               (*head_p)->next = &(list[1]);
+               (*tail_p) = &(list[list_num - 1]);
+               (*tail_p)->prev = &(list[list_num - 2]);
+               (*tail_p)->next = NULL;
+               }
+       }
+
+static void ssl_cipher_collect_aliases(SSL_CIPHER **ca_list,
+                       int num_of_group_aliases, unsigned long mask,
+                       CIPHER_ORDER *head)
+       {
+       CIPHER_ORDER *ciph_curr;
+       SSL_CIPHER **ca_curr;
+       int i;
+
+       /*
+        * First, add the real ciphers as already collected
+        */
+       ciph_curr = head;
+       ca_curr = ca_list;
+       while (ciph_curr != NULL)
+               {
+               *ca_curr = ciph_curr->cipher;
+               ca_curr++;
+               ciph_curr = ciph_curr->next;
+               }
+
+       /*
+        * Now we add the available ones from the cipher_aliases[] table.
+        * They represent either an algorithm, that must be fully
+        * supported (not match any bit in mask) or represent a cipher
+        * strength value (will be added in any case because algorithms=0).
+        */
+       for (i = 0; i < num_of_group_aliases; i++)
+               {
+               if ((i == 0) ||         /* always fetch "ALL" */
+                   !(cipher_aliases[i].algorithms & mask))
+                       {
+                       *ca_curr = (SSL_CIPHER *)(cipher_aliases + i);
+                       ca_curr++;
+                       }
+               }
 
+       *ca_curr = NULL;        /* end of list */
+       }
+
+static void ssl_cipher_apply_rule(unsigned long algorithms, unsigned long mask,
+               unsigned long algo_strength, unsigned long mask_strength,
+               int rule, int strength_bits, CIPHER_ORDER *list,
+               CIPHER_ORDER **head_p, CIPHER_ORDER **tail_p)
+       {
+       CIPHER_ORDER *head, *tail, *curr, *curr2, *tail2;
+       SSL_CIPHER *cp;
+       unsigned long ma, ma_s;
+
+#ifdef CIPHER_DEBUG
+       printf("Applying rule %d with %08lx %08lx %08lx %08lx (%d)\n",
+               rule, algorithms, mask, algo_strength, mask_strength,
+               strength_bits);
+#endif
+
+       curr = head = *head_p;
+       curr2 = head;
+       tail2 = tail = *tail_p;
        for (;;)
+               {
+               if ((curr == NULL) || (curr == tail2)) break;
+               curr = curr2;
+               curr2 = curr->next;
+
+               cp = curr->cipher;
+
+               /*
+                * Selection criteria is either the number of strength_bits
+                * or the algorithm used.
+                */
+               if (strength_bits == -1)
+                       {
+                       ma = mask & cp->algorithms;
+                       ma_s = mask_strength & cp->algo_strength;
+
+#ifdef CIPHER_DEBUG
+                       printf("\nName: %s:\nAlgo = %08lx Algo_strength = %08lx\nMask 
+= %08lx Mask_strength %08lx\n", cp->name, cp->algorithms, cp->algo_strength, mask, 
+mask_strength);
+                       printf("ma = %08lx ma_s %08lx, ma&algo=%08lx, 
+ma_s&algos=%08lx\n", ma, ma_s, ma&algorithms, ma_s&algo_strength);
+#endif
+                       /*
+                        * Select: if none of the mask bit was met from the
+                        * cipher or not all of the bits were met, the
+                        * selection does not apply.
+                        */
+                       if (((ma == 0) && (ma_s == 0)) ||
+                           ((ma & algorithms) != ma) ||
+                           ((ma_s & algo_strength) != ma_s))
+                               continue; /* does not apply */
+                       }
+               else if (strength_bits != cp->strength_bits)
+                       continue;       /* does not apply */
+
+#ifdef CIPHER_DEBUG
+               printf("Action = %d\n", rule);
+#endif
+
+               /* add the cipher if it has not been added yet. */
+               if (rule == CIPHER_ADD)
+                       {
+                       if (!curr->active)
+                               {
+                               ll_append_tail(&head, curr, &tail);
+                               curr->active = 1;
+                               }
+                       }
+               /* Move the added cipher to this location */
+               else if (rule == CIPHER_ORD)
+                       {
+                       if (curr->active)
+                               {
+                               ll_append_tail(&head, curr, &tail);
+                               }
+                       }
+               else if (rule == CIPHER_DEL)
+                       curr->active = 0;
+               else if (rule == CIPHER_KILL)
+                       {
+                       if (head == curr)
+                               head = curr->next;
+                       else
+                               curr->prev->next = curr->next;
+                       if (tail == curr)
+                               tail = curr->prev;
+                       curr->active = 0;
+                       if (curr->next != NULL)
+                               curr->next->prev = curr->prev;
+                       if (curr->prev != NULL)
+                               curr->prev->next = curr->next;
+                       curr->next = NULL;
+                       curr->prev = NULL;
+                       }
+               }
+
+       *head_p = head;
+       *tail_p = tail;
+       }
+
+static int ssl_cipher_strength_sort(CIPHER_ORDER *list, CIPHER_ORDER **head_p,
+                                    CIPHER_ORDER **tail_p)
+       {
+       int max_strength_bits, i, *number_uses;
+       CIPHER_ORDER *curr;
+
+       /*
+        * This routine sorts the ciphers with descending strength. The sorting
+        * must keep the pre-sorted sequence, so we apply the normal sorting
+        * routine as '+' movement to the end of the list.
+        */
+       max_strength_bits = 0;
+       curr = *head_p;
+       while (curr != NULL)
+               {
+               if (curr->active &&
+                   (curr->cipher->strength_bits > max_strength_bits))
+                   max_strength_bits = curr->cipher->strength_bits;
+               curr = curr->next;
+               }
+
+       number_uses = Malloc((max_strength_bits + 1) * sizeof(int));
+       if (!number_uses)
+       {
+               SSLerr(SSL_F_SSL_CIPHER_STRENGTH_SORT,ERR_R_MALLOC_FAILURE);
+               return(0);
+       }
+       memset(number_uses, 0, (max_strength_bits + 1) * sizeof(int));
+
+       /*
+        * Now find the strength_bits values actually used
+        */
+       curr = *head_p;
+       while (curr != NULL)
                {
-               ch= *l;
+               if (curr->active)
+                       number_uses[curr->cipher->strength_bits]++;
+               curr = curr->next;
+               }
+       /*
+        * Go through the list of used strength_bits values in descending
+        * order.
+        */
+       for (i = max_strength_bits; i >= 0; i--)
+               if (number_uses[i] > 0)
+                       ssl_cipher_apply_rule(0, 0, 0, 0, CIPHER_ORD, i,
+                                       list, head_p, tail_p);
 
-               if (ch == '\0') break;
+       Free(number_uses);
+       return(1);
+       }
 
+static int ssl_cipher_process_rulestr(const char *rule_str,
+               CIPHER_ORDER *list, CIPHER_ORDER **head_p,
+               CIPHER_ORDER **tail_p, SSL_CIPHER **ca_list)
+       {
+       unsigned long algorithms, mask, algo_strength, mask_strength;
+       const char *l, *start, *buf;
+       int j, multi, found, rule, retval, ok, buflen;
+       char ch;
+
+       retval = 1;
+       l = rule_str;
+       for (;;)
+               {
+               ch = *l;
+
+               if (ch == '\0')
+                       break;          /* done */
                if (ch == '-')
-                       { j=CIPHER_DEL; l++; }
+                       { rule = CIPHER_DEL; l++; }
                else if (ch == '+')
-                       { j=CIPHER_ORD; l++; }
+                       { rule = CIPHER_ORD; l++; }
                else if (ch == '!')
-                       { j=CIPHER_KILL; l++; }
-               else    
-                       { j=CIPHER_ADD; }
+                       { rule = CIPHER_KILL; l++; }
+               else if (ch == '@')
+                       { rule = CIPHER_SPECIAL; l++; }
+               else
+                       { rule = CIPHER_ADD; }
 
                if (ITEM_SEP(ch))
                        {
                        l++;
                        continue;
                        }
-               ops[current_x].type=j;
-               ops[current_x].algorithms=0;
-               ops[current_x].mask=0;
+
+               algorithms = mask = algo_strength = mask_strength = 0;
 
                start=l;
                for (;;)
                        {
-                       ch= *l;
-                       i=0;
+                       ch = *l;
+                       buf = l;
+                       buflen = 0;
 #ifndef CHARSET_EBCDIC
                        while ( ((ch >= 'A') && (ch <= 'Z')) ||
                                ((ch >= '0') && (ch <= '9')) ||
@@ -467,12 +600,28 @@
                        while ( isalnum(ch) || (ch == '-'))
 #endif
                                 {
-                                buf[i]=ch;
-                                ch= *(++l);
-                                i++;
-                                if (i >= (CL_BUF-2)) break;
+                                ch = *(++l);
+                                buflen++;
                                 }
-                       buf[i]='\0';
+
+                       if (buflen == 0)
+                               {
+                               /*
+                                * We hit something, we cannot deal with,
+                                * it is no command or separator nor
+                                * alphanumeric, so we call this an error.
+                                */
+                               SSLerr(SSL_F_SSL_CIPHER_PROCESS_RULESTR,
+                                      SSL_R_INVALID_COMMAND);
+                               retval = found = 0;
+                               l++;
+                               break;
+                               }
+
+                       if (rule == CIPHER_SPECIAL)
+                               {
+                               break;  /* special treatment */
+                               }
 
                        /* check for multi-part specification */
                        if (ch == '+')
@@ -483,133 +632,237 @@
                        else
                                multi=0;
 
-                       c_tmp.name=buf;
-                       j=sk_find(ca_list,(char *)&c_tmp);
-                       if (j < 0)
-                               goto end_loop;
-
-                       cp=(SSL_CIPHER *)sk_value(ca_list,j);
-                       ops[current_x].algorithms|=cp->algorithms;
-                       /* We add the SSL_SSL_MASK so we can match the
-                        * SSLv2 and SSLv3 versions of RC4-MD5 */
-                       ops[current_x].mask|=cp->mask;
-                       if (!multi) break;
-                       }
-               current_x++;
-               if (ch == '\0') break;
-end_loop:
-               /* Make sure we scan until the next valid start point */
-               while ((*l != '\0') && ITEM_SEP(*l))
-                       l++;
-               }
-
-       num_x=current_x;
-       current_x=0;
-
-       /* We will now process the list of ciphers, once for each category, to
-        * decide what we should do with it. */
-       for (j=0; j<num_x; j++)
-               {
-               algorithms=ops[j].algorithms;
-               type=ops[j].type;
-               mask=ops[j].mask;
-
-               curr=head;
-               curr2=head;
-               tail2=tail;
-               for (;;)
-                       {
-                       if ((curr == NULL) || (curr == tail2)) break;
-                       curr=curr2;
-                       curr2=curr->next;
-
-                       cp=curr->cipher;
-                       ma=mask & cp->algorithms;
-                       if ((ma == 0) || ((ma & algorithms) != ma))
+                       /*
+                        * Now search for the name in the ca_list. Be careful
+                        * with the strncmp, because the "buflen" limitation
+                        * will make the rule "ADH:SOME" and the cipher
+                        * "ADH-MY-CIPHER" look like a match for buflen=3.
+                        * So additionally check, whether the cipher name found
+                        * has the correct length. We can save a strlen() call,
+                        * just checking for the '\0' at the right place is
+                        * sufficient, we have to strncmp() anyway.
+                        */
+                        j = found = 0;
+                        while (ca_list[j])
                                {
-                               /* does not apply */
-                               continue;
-                               }
-
-                       /* add the cipher if it has not been added yet. */
-                       if (type == CIPHER_ADD)
-                               {
-                               if (!curr->active)
+                               if ((ca_list[j]->name[buflen] == '\0') &&
+                                   !strncmp(buf, ca_list[j]->name, buflen))
                                        {
-                                       ll_append_tail(&head,curr,&tail);
-                                       curr->active=1;
+                                       found = 1;
+                                       break;
                                        }
+                               else
+                                       j++;
                                }
-                       /* Move the added cipher to this location */
-                       else if (type == CIPHER_ORD)
+                       if (!found)
+                               break;  /* ignore this entry */
+
+                       algorithms |= ca_list[j]->algorithms;
+                       mask |= ca_list[j]->mask;
+                       algo_strength |= ca_list[j]->algo_strength;
+                       mask_strength |= ca_list[j]->mask_strength;
+
+                       if (!multi) break;
+                       }
+
+                       /*
+                        * Ok, we have the rule, now apply it
+                        */
+                       if (rule == CIPHER_SPECIAL)
+                               {       /* special command */
+                               ok = 0;
+                               if ((buflen == 8) &&
+                                       !strncmp(buf, "STRENGTH", 8))
+                                       ok = ssl_cipher_strength_sort(list,
+                                                       head_p, tail_p);
+                               else
+                                       SSLerr(SSL_F_SSL_CIPHER_PROCESS_RULESTR,
+                                               SSL_R_INVALID_COMMAND);
+                               if (ok == 0)
+                                       retval = 0;
+                               /*
+                                * We do not support any "multi" options
+                                * together with "@", so throw away the
+                                * rest of the command, if any left, until
+                                * end or ':' is found.
+                                */
+                               while ((*l != '\0') && ITEM_SEP(*l))
+                                       l++;
+                               }
+                       else if (found)
                                {
-                               if (curr->active)
-                                       {
-                                       ll_append_tail(&head,curr,&tail);
-                                       }
+                               ssl_cipher_apply_rule(algorithms, mask,
+                                       algo_strength, mask_strength, rule, -1,
+                                       list, head_p, tail_p);
                                }
-                       else if (type == CIPHER_DEL)
-                               curr->active=0;
-                       if (type == CIPHER_KILL)
+                       else
                                {
-                               if (head == curr)
-                                       head=curr->next;
-                               else
-                                       curr->prev->next=curr->next;
-                               if (tail == curr)
-                                       tail=curr->prev;
-                               curr->active=0;
-                               if (curr->next != NULL)
-                                       curr->next->prev=curr->prev;
-                               if (curr->prev != NULL)
-                                       curr->prev->next=curr->next;
-                               curr->next=NULL;
-                               curr->prev=NULL;
+                               while ((*l != '\0') && ITEM_SEP(*l))
+                                       l++;
                                }
-                       }
+                       if (*l == '\0') break; /* done */
                }
+
+       return(retval);
+       }
 
-       for (curr=head; curr != NULL; curr=curr->next)
+STACK_OF(SSL_CIPHER) *ssl_create_cipher_list(const SSL_METHOD *ssl_method,
+               STACK_OF(SSL_CIPHER) **cipher_list,
+               STACK_OF(SSL_CIPHER) **cipher_list_by_id,
+               const char *rule_str)
+       {
+       int ok, num_of_ciphers, num_of_alias_max, num_of_group_aliases;
+       unsigned long disabled_mask;
+       STACK_OF(SSL_CIPHER) *cipherstack;
+       const char *rule_p;
+       CIPHER_ORDER *list = NULL, *head = NULL, *tail = NULL, *curr;
+       SSL_CIPHER **ca_list = NULL;
+
+       /*
+        * Return with error if nothing to do.
+        */
+       if (rule_str == NULL) return(NULL);
+
+       if (init_ciphers) load_ciphers();
+
+       /*
+        * To reduce the work to do we only want to process the compiled
+        * in algorithms, so we first get the mask of disabled ciphers.
+        */
+       disabled_mask = ssl_cipher_get_disabled();
+
+       /*
+        * Now we have to collect the available ciphers from the compiled
+        * in ciphers. We cannot get more than the number compiled in, so
+        * it is used for allocation.
+        */
+       num_of_ciphers = ssl_method->num_ciphers();
+       list = (CIPHER_ORDER *)Malloc(sizeof(CIPHER_ORDER) * num_of_ciphers);
+       if (list == NULL)
+               {
+               SSLerr(SSL_F_SSL_CREATE_CIPHER_LIST,ERR_R_MALLOC_FAILURE);
+               return(NULL);   /* Failure */
+               }
+
+       ssl_cipher_collect_ciphers(ssl_method, num_of_ciphers, disabled_mask,
+                                  list, &head, &tail);
+
+       /*
+        * We also need cipher aliases for selecting based on the rule_str.
+        * There might be two types of entries in the rule_str: 1) names
+        * of ciphers themselves 2) aliases for groups of ciphers.
+        * For 1) we need the available ciphers and for 2) the cipher
+        * groups of cipher_aliases added together in one list (otherwise
+        * we would be happy with just the cipher_aliases table).
+        */
+       num_of_group_aliases = sizeof(cipher_aliases) / sizeof(SSL_CIPHER);
+       num_of_alias_max = num_of_ciphers + num_of_group_aliases + 1;
+       ca_list =
+               (SSL_CIPHER **)Malloc(sizeof(SSL_CIPHER *) * num_of_alias_max);
+       if (ca_list == NULL)
+               {
+               Free(list);
+               SSLerr(SSL_F_SSL_CREATE_CIPHER_LIST,ERR_R_MALLOC_FAILURE);
+               return(NULL);   /* Failure */
+               }
+       ssl_cipher_collect_aliases(ca_list, num_of_group_aliases, disabled_mask,
+                                  head);
+
+       /*
+        * If the rule_string begins with DEFAULT, apply the default rule
+        * before using the (possibly available) additional rules.
+        */
+       ok = 1;
+       rule_p = rule_str;
+       if (strncmp(rule_str,"DEFAULT",7) == 0)
+               {
+               ok = ssl_cipher_process_rulestr(SSL_DEFAULT_CIPHER_LIST,
+                       list, &head, &tail, ca_list);
+               rule_p += 7;
+               if (*rule_p == ':')
+                       rule_p++;
+               }
+
+       if (ok && (strlen(rule_p) > 0))
+               ok = ssl_cipher_process_rulestr(rule_p, list, &head, &tail,
+                                               ca_list);
+
+       Free(ca_list);  /* Not needed anymore */
+
+       if (!ok)
+               {       /* Rule processing failure */
+               Free(list);
+               return(NULL);
+               }
+       /*
+        * Allocate new "cipherstack" for the result, return with error
+        * if we cannot get one.
+        */
+       if ((cipherstack = sk_SSL_CIPHER_new(NULL)) == NULL)
+               {
+               Free(list);
+               return(NULL);
+               }
+
+       /*
+        * The cipher selection for the list is done. The ciphers are added
+        * to the resulting precedence to the STACK_OF(SSL_CIPHER).
+        */
+       for (curr = head; curr != NULL; curr = curr->next)
                {
                if (curr->active)
                        {
-                       sk_SSL_CIPHER_push(ret,curr->cipher);
+                       sk_SSL_CIPHER_push(cipherstack, curr->cipher);
 #ifdef CIPHER_DEBUG
                        printf("<%s>\n",curr->cipher->name);
 #endif
                        }
                }
+       Free(list);     /* Not needed any longer */
 
+       /*
+        * The following passage is a little bit odd. If pointer variables
+        * were supplied to hold STACK_OF(SSL_CIPHER) return information,
+        * the old memory pointed to is free()ed. Then, however, the
+        * cipher_list entry will be assigned just a copy of the returned
+        * cipher stack. For cipher_list_by_id a copy of the cipher stack
+        * will be created. See next comment...
+        */
        if (cipher_list != NULL)
                {
                if (*cipher_list != NULL)
                        sk_SSL_CIPHER_free(*cipher_list);
-               *cipher_list=ret;
+               *cipher_list = cipherstack;
                }
 
        if (cipher_list_by_id != NULL)
                {
                if (*cipher_list_by_id != NULL)
                        sk_SSL_CIPHER_free(*cipher_list_by_id);
-               *cipher_list_by_id=sk_SSL_CIPHER_dup(ret);
+               *cipher_list_by_id = sk_SSL_CIPHER_dup(cipherstack);
                }
 
+       /*
+        * Now it is getting really strange. If something failed during
+        * the previous pointer assignment or if one of the pointers was
+        * not requested, the error condition is met. That might be
+        * discussable. The strange thing is however that in this case
+        * the memory "ret" pointed to is "free()ed" and hence the pointer
+        * cipher_list becomes wild. The memory reserved for
+        * cipher_list_by_id however is not "free()ed" and stays intact.
+        */
        if (    (cipher_list_by_id == NULL) ||
                (*cipher_list_by_id == NULL) ||
                (cipher_list == NULL) ||
                (*cipher_list == NULL))
-               goto err;
+               {
+               sk_SSL_CIPHER_free(cipherstack);
+               return(NULL);
+               }
+
        sk_SSL_CIPHER_set_cmp_func(*cipher_list_by_id,ssl_cipher_ptr_id_cmp);
 
-       ok=ret;
-       ret=NULL;
-err:
-       if (tmp_str) Free(tmp_str);
-       if (ops != NULL) Free(ops);
-       if (ret != NULL) sk_SSL_CIPHER_free(ret);
-       if (ca_list != NULL) sk_free(ca_list);
-       if (list != NULL) Free(list);
-       return(ok);
+       return(cipherstack);
        }
 
 char *SSL_CIPHER_description(SSL_CIPHER *cipher, char *buf, int len)
@@ -617,15 +870,16 @@
        int is_export,pkl,kl;
        char *ver,*exp;
        char *kx,*au,*enc,*mac;
-       unsigned long alg,alg2;
+       unsigned long alg,alg2,alg_s;
        static char *format="%-23s %s Kx=%-8s Au=%-4s Enc=%-9s Mac=%-4s%s\n";
        
        alg=cipher->algorithms;
+       alg_s=cipher->algo_strength;
        alg2=cipher->algorithm2;
 
-       is_export=SSL_IS_EXPORT(alg);
-       pkl=SSL_EXPORT_PKEYLENGTH(alg);
-       kl=SSL_EXPORT_KEYLENGTH(alg);
+       is_export=SSL_C_IS_EXPORT(cipher);
+       pkl=SSL_C_EXPORT_PKEYLENGTH(cipher);
+       kl=SSL_C_EXPORT_KEYLENGTH(cipher);
        exp=is_export?" export":"";
 
        if (alg & SSL_SSLV2)
@@ -752,37 +1006,16 @@
        return("(NONE)");
        }
 
-/* number of bits for symetric cipher */
+/* number of bits for symmetric cipher */
 int SSL_CIPHER_get_bits(SSL_CIPHER *c, int *alg_bits)
        {
-       int ret=0,a=0;
-       const EVP_CIPHER *enc;
-       const EVP_MD *md;
-       SSL_SESSION ss;
+       int ret=0;
 
        if (c != NULL)
                {
-               ss.cipher=c;
-               if (!ssl_cipher_get_evp(&ss,&enc,&md,NULL))
-                       return(0);
-
-               a=EVP_CIPHER_key_length(enc)*8;
-
-               if (SSL_C_IS_EXPORT(c))
-                       {
-                       ret=SSL_C_EXPORT_KEYLENGTH(c)*8;
-                       }
-               else
-                       {
-                       if (c->algorithm2 & SSL2_CF_8_BYTE_ENC)
-                               ret=64;
-                       else
-                               ret=a;
-                       }
+               if (alg_bits != NULL) *alg_bits = c->alg_bits;
+               ret = c->strength_bits;
                }
-
-       if (alg_bits != NULL) *alg_bits=a;
-       
        return(ret);
        }
 
Index: opensa/openssl/ssl/ssl_err.c
diff -u opensa/openssl/ssl/ssl_err.c:1.1 opensa/openssl/ssl/ssl_err.c:1.2
--- opensa/openssl/ssl/ssl_err.c:1.1    Tue Jan 25 23:01:18 2000
+++ opensa/openssl/ssl/ssl_err.c        Thu Mar  2 21:12:05 2000
@@ -135,13 +135,18 @@
 {ERR_PACK(0,SSL_F_SSL_CERT_INSTANTIATE,0),     "SSL_CERT_INSTANTIATE"},
 {ERR_PACK(0,SSL_F_SSL_CERT_NEW,0),     "SSL_CERT_NEW"},
 {ERR_PACK(0,SSL_F_SSL_CHECK_PRIVATE_KEY,0),    "SSL_check_private_key"},
+{ERR_PACK(0,SSL_F_SSL_CIPHER_PROCESS_RULESTR,0),       "SSL_CIPHER_PROCESS_RULESTR"},
+{ERR_PACK(0,SSL_F_SSL_CIPHER_STRENGTH_SORT,0), "SSL_CIPHER_STRENGTH_SORT"},
 {ERR_PACK(0,SSL_F_SSL_CLEAR,0),        "SSL_clear"},
 {ERR_PACK(0,SSL_F_SSL_COMP_ADD_COMPRESSION_METHOD,0),  
"SSL_COMP_add_compression_method"},
 {ERR_PACK(0,SSL_F_SSL_CREATE_CIPHER_LIST,0),   "SSL_CREATE_CIPHER_LIST"},
+{ERR_PACK(0,SSL_F_SSL_CTRL,0), "SSL_ctrl"},
 {ERR_PACK(0,SSL_F_SSL_CTX_CHECK_PRIVATE_KEY,0),        "SSL_CTX_check_private_key"},
 {ERR_PACK(0,SSL_F_SSL_CTX_NEW,0),      "SSL_CTX_new"},
+{ERR_PACK(0,SSL_F_SSL_CTX_SET_PURPOSE,0),      "SSL_CTX_set_purpose"},
 {ERR_PACK(0,SSL_F_SSL_CTX_SET_SESSION_ID_CONTEXT,0),   
"SSL_CTX_set_session_id_context"},
 {ERR_PACK(0,SSL_F_SSL_CTX_SET_SSL_VERSION,0),  "SSL_CTX_set_ssl_version"},
+{ERR_PACK(0,SSL_F_SSL_CTX_SET_TRUST,0),        "SSL_CTX_set_trust"},
 {ERR_PACK(0,SSL_F_SSL_CTX_USE_CERTIFICATE,0),  "SSL_CTX_use_certificate"},
 {ERR_PACK(0,SSL_F_SSL_CTX_USE_CERTIFICATE_ASN1,0),     
"SSL_CTX_use_certificate_ASN1"},
 {ERR_PACK(0,SSL_F_SSL_CTX_USE_CERTIFICATE_CHAIN_FILE,0),       
"SSL_CTX_use_certificate_chain_file"},
@@ -169,9 +174,11 @@
 {ERR_PACK(0,SSL_F_SSL_SET_CERT,0),     "SSL_SET_CERT"},
 {ERR_PACK(0,SSL_F_SSL_SET_FD,0),       "SSL_set_fd"},
 {ERR_PACK(0,SSL_F_SSL_SET_PKEY,0),     "SSL_SET_PKEY"},
+{ERR_PACK(0,SSL_F_SSL_SET_PURPOSE,0),  "SSL_set_purpose"},
 {ERR_PACK(0,SSL_F_SSL_SET_RFD,0),      "SSL_set_rfd"},
 {ERR_PACK(0,SSL_F_SSL_SET_SESSION,0),  "SSL_set_session"},
 {ERR_PACK(0,SSL_F_SSL_SET_SESSION_ID_CONTEXT,0),       "SSL_set_session_id_context"},
+{ERR_PACK(0,SSL_F_SSL_SET_TRUST,0),    "SSL_set_trust"},
 {ERR_PACK(0,SSL_F_SSL_SET_WFD,0),      "SSL_set_wfd"},
 {ERR_PACK(0,SSL_F_SSL_SHUTDOWN,0),     "SSL_shutdown"},
 {ERR_PACK(0,SSL_F_SSL_UNDEFINED_FUNCTION,0),   "SSL_UNDEFINED_FUNCTION"},
@@ -201,7 +208,6 @@
 {SSL_R_BAD_AUTHENTICATION_TYPE           ,"bad authentication type"},
 {SSL_R_BAD_CHANGE_CIPHER_SPEC            ,"bad change cipher spec"},
 {SSL_R_BAD_CHECKSUM                      ,"bad checksum"},
-{SSL_R_BAD_CLIENT_REQUEST                ,"bad client request"},
 {SSL_R_BAD_DATA_RETURNED_BY_CALLBACK     ,"bad data returned by callback"},
 {SSL_R_BAD_DECOMPRESSION                 ,"bad decompression"},
 {SSL_R_BAD_DH_G_LENGTH                   ,"bad dh g length"},
@@ -209,6 +215,7 @@
 {SSL_R_BAD_DH_P_LENGTH                   ,"bad dh p length"},
 {SSL_R_BAD_DIGEST_LENGTH                 ,"bad digest length"},
 {SSL_R_BAD_DSA_SIGNATURE                 ,"bad dsa signature"},
+{SSL_R_BAD_HELLO_REQUEST                 ,"bad hello request"},
 {SSL_R_BAD_LENGTH                        ,"bad length"},
 {SSL_R_BAD_MAC_DECODE                    ,"bad mac decode"},
 {SSL_R_BAD_MESSAGE_TYPE                  ,"bad message type"},
@@ -248,6 +255,7 @@
 {SSL_R_DH_PUBLIC_VALUE_LENGTH_IS_WRONG   ,"dh public value length is wrong"},
 {SSL_R_DIGEST_CHECK_FAILED               ,"digest check failed"},
 {SSL_R_ENCRYPTED_LENGTH_TOO_LONG         ,"encrypted length too long"},
+{SSL_R_ERROR_GENERATING_TMP_RSA_KEY      ,"error generating tmp rsa key"},
 {SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST     ,"error in received cipher list"},
 {SSL_R_EXCESSIVE_MESSAGE_SIZE            ,"excessive message size"},
 {SSL_R_EXTRA_DATA_IN_MESSAGE             ,"extra data in message"},
@@ -256,6 +264,9 @@
 {SSL_R_HTTP_REQUEST                      ,"http request"},
 {SSL_R_INTERNAL_ERROR                    ,"internal error"},
 {SSL_R_INVALID_CHALLENGE_LENGTH          ,"invalid challenge length"},
+{SSL_R_INVALID_COMMAND                   ,"invalid command"},
+{SSL_R_INVALID_PURPOSE                   ,"invalid purpose"},
+{SSL_R_INVALID_TRUST                     ,"invalid trust"},
 {SSL_R_LENGTH_MISMATCH                   ,"length mismatch"},
 {SSL_R_LENGTH_TOO_SHORT                  ,"length too short"},
 {SSL_R_LIBRARY_BUG                       ,"library bug"},
@@ -348,14 +359,14 @@
 {SSL_R_TLSV1_ALERT_DECODE_ERROR          ,"tlsv1 alert decode error"},
 {SSL_R_TLSV1_ALERT_DECRYPTION_FAILED     ,"tlsv1 alert decryption failed"},
 {SSL_R_TLSV1_ALERT_DECRYPT_ERROR         ,"tlsv1 alert decrypt error"},
-{SSL_R_TLSV1_ALERT_EXPORT_RESTRICION     ,"tlsv1 alert export restricion"},
+{SSL_R_TLSV1_ALERT_EXPORT_RESTRICTION    ,"tlsv1 alert export restriction"},
 {SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY ,"tlsv1 alert insufficient security"},
 {SSL_R_TLSV1_ALERT_INTERNAL_ERROR        ,"tlsv1 alert internal error"},
 {SSL_R_TLSV1_ALERT_NO_RENEGOTIATION      ,"tlsv1 alert no renegotiation"},
 {SSL_R_TLSV1_ALERT_PROTOCOL_VERSION      ,"tlsv1 alert protocol version"},
 {SSL_R_TLSV1_ALERT_RECORD_OVERFLOW       ,"tlsv1 alert record overflow"},
 {SSL_R_TLSV1_ALERT_UNKNOWN_CA            ,"tlsv1 alert unknown ca"},
-{SSL_R_TLSV1_ALERT_USER_CANCLED          ,"tlsv1 alert user cancled"},
+{SSL_R_TLSV1_ALERT_USER_CANCELLED        ,"tlsv1 alert user cancelled"},
 {SSL_R_TLS_CLIENT_CERT_REQ_WITH_ANON_CIPHER,"tls client cert req with anon cipher"},
 {SSL_R_TLS_PEER_DID_NOT_RESPOND_WITH_CERTIFICATE_LIST,"tls peer did not respond with 
certificate list"},
 {SSL_R_TLS_RSA_ENCRYPTED_VALUE_LENGTH_IS_WRONG,"tls rsa encrypted value length is 
wrong"},
@@ -383,6 +394,7 @@
 {SSL_R_UNKNOWN_STATE                     ,"unknown state"},
 {SSL_R_UNSUPPORTED_CIPHER                ,"unsupported cipher"},
 {SSL_R_UNSUPPORTED_COMPRESSION_ALGORITHM ,"unsupported compression algorithm"},
+{SSL_R_UNSUPPORTED_OPTION                ,"unsupported option"},
 {SSL_R_UNSUPPORTED_PROTOCOL              ,"unsupported protocol"},
 {SSL_R_UNSUPPORTED_SSL_VERSION           ,"unsupported ssl version"},
 {SSL_R_WRITE_BIO_NOT_SET                 ,"write bio not set"},
Index: opensa/openssl/ssl/ssl_lib.c
diff -u opensa/openssl/ssl/ssl_lib.c:1.1 opensa/openssl/ssl/ssl_lib.c:1.2
--- opensa/openssl/ssl/ssl_lib.c:1.1    Tue Jan 25 23:01:18 2000
+++ opensa/openssl/ssl/ssl_lib.c        Thu Mar  2 21:12:05 2000
@@ -61,22 +61,24 @@
 #include <stdio.h>
 #include <openssl/objects.h>
 #include <openssl/lhash.h>
+#include <openssl/x509v3.h>
 #include "ssl_locl.h"
 
-char *SSL_version_str=OPENSSL_VERSION_TEXT;
+const char *SSL_version_str=OPENSSL_VERSION_TEXT;
 
-static STACK *ssl_meth=NULL;
-static STACK *ssl_ctx_meth=NULL;
+static STACK_OF(CRYPTO_EX_DATA_FUNCS) *ssl_meth=NULL;
+static STACK_OF(CRYPTO_EX_DATA_FUNCS) *ssl_ctx_meth=NULL;
 static int ssl_meth_num=0;
 static int ssl_ctx_meth_num=0;
 
 OPENSSL_GLOBAL SSL3_ENC_METHOD ssl3_undef_enc_method={
+       /* evil casts, but these functions are only called if there's a library bug */
+       (int (*)(SSL *,int))ssl_undefined_function,
+       (int (*)(SSL *, unsigned char *, int))ssl_undefined_function,
        ssl_undefined_function,
-       ssl_undefined_function,
-       ssl_undefined_function,
-       ssl_undefined_function,
-       ssl_undefined_function,
-       ssl_undefined_function,
+       (int (*)(SSL *, unsigned char *, unsigned char *, int))ssl_undefined_function,
+       (int (*)(SSL*, int))ssl_undefined_function,
+       (int (*)(SSL *, EVP_MD_CTX *, EVP_MD_CTX *, const char*, int, unsigned char 
+*))ssl_undefined_function
        };
 
 int SSL_clear(SSL *s)
@@ -93,10 +95,17 @@
        s->hit=0;
        s->shutdown=0;
 
-#if 0
+#if 0 /* Disabled since version 1.10 of this file (early return not
+       * needed because SSL_clear is not called when doing renegotiation) */
        /* This is set if we are doing dynamic renegotiation so keep
         * the old cipher.  It is sort of a SSL_clear_lite :-) */
        if (s->new_session) return(1);
+#else
+       if (s->new_session)
+               {
+               SSLerr(SSL_F_SSL_CLEAR,SSL_R_INTERNAL_ERROR);
+               return 0;
+               }
 #endif
 
        state=s->state; /* Keep to check if we throw away the session-id */
@@ -201,6 +210,8 @@
        s->verify_mode=ctx->verify_mode;
        s->verify_depth=ctx->verify_depth;
        s->verify_callback=ctx->default_verify_callback;
+       s->purpose = ctx->purpose;
+       s->trust = ctx->trust;
        CRYPTO_add(&ctx->references,1,CRYPTO_LOCK_SSL_CTX);
        s->ctx=ctx;
 
@@ -218,7 +229,7 @@
        s->mode=ctx->mode;
        SSL_clear(s);
 
-       CRYPTO_new_ex_data(ssl_meth,(char *)s,&s->ex_data);
+       CRYPTO_new_ex_data(ssl_meth,s,&s->ex_data);
 
        return(s);
 err:
@@ -262,6 +273,46 @@
     return 1;
     }
 
+int SSL_CTX_set_purpose(SSL_CTX *s, int purpose)
+{
+       if(X509_PURPOSE_get_by_id(purpose) == -1) {
+               SSLerr(SSL_F_SSL_CTX_SET_PURPOSE, SSL_R_INVALID_PURPOSE);
+               return 0;
+       }
+       s->purpose = purpose;
+       return 1;
+}
+
+int SSL_set_purpose(SSL *s, int purpose)
+{
+       if(X509_PURPOSE_get_by_id(purpose) == -1) {
+               SSLerr(SSL_F_SSL_SET_PURPOSE, SSL_R_INVALID_PURPOSE);
+               return 0;
+       }
+       s->purpose = purpose;
+       return 1;
+}
+       
+int SSL_CTX_set_trust(SSL_CTX *s, int trust)
+{
+       if(X509_TRUST_get_by_id(trust) == -1) {
+               SSLerr(SSL_F_SSL_CTX_SET_TRUST, SSL_R_INVALID_TRUST);
+               return 0;
+       }
+       s->trust = trust;
+       return 1;
+}
+
+int SSL_set_trust(SSL *s, int trust)
+{
+       if(X509_TRUST_get_by_id(trust) == -1) {
+               SSLerr(SSL_F_SSL_SET_TRUST, SSL_R_INVALID_TRUST);
+               return 0;
+       }
+       s->trust = trust;
+       return 1;
+}
+
 void SSL_free(SSL *s)
        {
        int i;
@@ -324,7 +375,7 @@
 
        if (s->method != NULL) s->method->ssl_free(s);
 
-       Free((char *)s);
+       Free(s);
        }
 
 void SSL_set_bio(SSL *s,BIO *rbio,BIO *wbio)
@@ -433,6 +484,38 @@
        }
 #endif
 
+
+/* return length of latest Finished message we sent, copy to 'buf' */
+size_t SSL_get_finished(SSL *s, void *buf, size_t count)
+       {
+       size_t ret = 0;
+       
+       if (s->s3 != NULL)
+               {
+               ret = s->s3->tmp.finish_md_len;
+               if (count > ret)
+                       count = ret;
+               memcpy(buf, s->s3->tmp.finish_md, count);
+               }
+       return ret;
+       }
+
+/* return length of latest Finished message we expected, copy to 'buf' */
+size_t SSL_get_peer_finished(SSL *s, void *buf, size_t count)
+       {
+       size_t ret = 0;
+       
+       if (s->s3 != NULL)
+               {
+               ret = s->s3->tmp.peer_finish_md_len;
+               if (count > ret)
+                       count = ret;
+               memcpy(buf, s->s3->tmp.peer_finish_md, count);
+               }
+       return ret;
+       }
+
+
 int SSL_get_verify_mode(SSL *s)
        {
        return(s->verify_mode);
@@ -706,6 +789,20 @@
                }
        }
 
+long SSL_callback_ctrl(SSL *s, int cmd, void (*fp)())
+       {
+       switch(cmd)
+               {
+       default:
+               return(s->method->ssl_callback_ctrl(s,cmd,fp));
+               }
+       }
+
+struct lhash_st *SSL_CTX_sessions(SSL_CTX *ctx)
+       {
+       return ctx->sessions;
+       }
+
 long SSL_CTX_ctrl(SSL_CTX *ctx,int cmd,long larg,char *parg)
        {
        long l;
@@ -765,6 +862,15 @@
                }
        }
 
+long SSL_CTX_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp)())
+       {
+       switch(cmd)
+               {
+       default:
+               return(ctx->method->ssl_ctx_callback_ctrl(ctx,cmd,fp));
+               }
+       }
+
 int ssl_cipher_id_cmp(SSL_CIPHER *a,SSL_CIPHER *b)
        {
        long l;
@@ -834,8 +940,8 @@
        return(c->name);
        }
 
-/** specify the ciphers to be used by defaut by the SSL_CTX */
-int SSL_CTX_set_cipher_list(SSL_CTX *ctx,char *str)
+/** specify the ciphers to be used by default by the SSL_CTX */
+int SSL_CTX_set_cipher_list(SSL_CTX *ctx, const char *str)
        {
        STACK_OF(SSL_CIPHER) *sk;
        
@@ -846,7 +952,7 @@
        }
 
 /** specify the ciphers to be used by the SSL */
-int SSL_set_cipher_list(SSL *s,char *str)
+int SSL_set_cipher_list(SSL *s,const char *str)
        {
        STACK_OF(SSL_CIPHER) *sk;
        
@@ -1127,7 +1233,7 @@
                sk_X509_pop_free(a->extra_certs,X509_free);
        if (a->comp_methods != NULL)
                sk_SSL_COMP_pop_free(a->comp_methods,SSL_COMP_free);
-       Free((char *)a);
+       Free(a);
        }
 
 void SSL_CTX_set_default_passwd_cb(SSL_CTX *ctx, pem_password_cb *cb)
@@ -1254,10 +1360,8 @@
                emask|=SSL_aDSS;
                }
 
-#ifdef SSL_ALLOW_ADH
        mask|=SSL_aNULL;
        emask|=SSL_aNULL;
-#endif
 
        c->mask=mask;
        c->export_mask=emask;
@@ -1274,7 +1378,7 @@
        c=s->cert;
        ssl_set_cert_masks(c, s->s3->tmp.new_cipher);
        alg=s->s3->tmp.new_cipher->algorithms;
-       is_export=SSL_IS_EXPORT(alg);
+       is_export=SSL_C_IS_EXPORT(s->s3->tmp.new_cipher);
        mask=is_export?c->export_mask:c->mask;
        kalg=alg&(SSL_MKEY_MASK|SSL_AUTH_MASK);
 
@@ -1527,7 +1631,7 @@
        return(NULL);
        }
 
-char *SSL_get_version(SSL *s)
+const char *SSL_get_version(SSL *s)
        {
        if (s->version == TLS1_VERSION)
                return("TLSv1");
@@ -1831,8 +1935,8 @@
        return(ssl->verify_result);
        }
 
-int SSL_get_ex_new_index(long argl,char *argp,int (*new_func)(),
-                        int (*dup_func)(),void (*free_func)())
+int SSL_get_ex_new_index(long argl,void *argp,CRYPTO_EX_new *new_func,
+                        CRYPTO_EX_dup *dup_func,CRYPTO_EX_free *free_func)
        {
        ssl_meth_num++;
        return(CRYPTO_get_ex_new_index(ssl_meth_num-1,
@@ -1849,8 +1953,8 @@
        return(CRYPTO_get_ex_data(&s->ex_data,idx));
        }
 
-int SSL_CTX_get_ex_new_index(long argl,char *argp,int (*new_func)(),
-                            int (*dup_func)(),void (*free_func)())
+int SSL_CTX_get_ex_new_index(long argl,void *argp,CRYPTO_EX_new *new_func,
+                            CRYPTO_EX_dup *dup_func,CRYPTO_EX_free *free_func)
        {
        ssl_ctx_meth_num++;
        return(CRYPTO_get_ex_new_index(ssl_ctx_meth_num-1,
@@ -1899,13 +2003,16 @@
 void SSL_CTX_set_tmp_rsa_callback(SSL_CTX *ctx,RSA *(*cb)(SSL *ssl,
                                                          int is_export,
                                                          int keylength))
-    { SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_RSA_CB,0,(char *)cb); }
-#endif
+    {
+    SSL_CTX_callback_ctrl(ctx,SSL_CTRL_SET_TMP_RSA_CB,(void (*)())cb);
+    }
 
-#ifndef NO_RSA
-void SSL_set_tmp_rsa_callback(SSL *ssl,RSA *(*cb)(SSL *ssl,int is_export,
-                                                         int keylength))
-    { SSL_ctrl(ssl,SSL_CTRL_SET_TMP_RSA_CB,0,(char *)cb); }
+void SSL_set_tmp_rsa_callback(SSL *ssl,RSA *(*cb)(SSL *ssl,
+                                                 int is_export,
+                                                 int keylength))
+    {
+    SSL_callback_ctrl(ssl,SSL_CTRL_SET_TMP_RSA_CB,(void (*)())cb);
+    }
 #endif
 
 #ifdef DOXYGEN
@@ -1932,11 +2039,15 @@
 #ifndef NO_DH
 void SSL_CTX_set_tmp_dh_callback(SSL_CTX *ctx,DH *(*dh)(SSL *ssl,int is_export,
                                                        int keylength))
-    { SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_DH_CB,0,(char *)dh); }
+    {
+    SSL_CTX_callback_ctrl(ctx,SSL_CTRL_SET_TMP_DH_CB,(void (*)())dh);
+    }
 
 void SSL_set_tmp_dh_callback(SSL *ssl,DH *(*dh)(SSL *ssl,int is_export,
-                                                       int keylength))
-    { SSL_ctrl(ssl,SSL_CTRL_SET_TMP_DH_CB,0,(char *)dh); }
+                                               int keylength))
+    {
+    SSL_callback_ctrl(ssl,SSL_CTRL_SET_TMP_DH_CB,(void (*)())dh);
+    }
 #endif
 
 #if defined(_WINDLL) && defined(WIN16)
Index: opensa/openssl/ssl/ssl_locl.h
diff -u opensa/openssl/ssl/ssl_locl.h:1.1 opensa/openssl/ssl/ssl_locl.h:1.2
--- opensa/openssl/ssl/ssl_locl.h:1.1   Tue Jan 25 23:01:18 2000
+++ opensa/openssl/ssl/ssl_locl.h       Thu Mar  2 21:12:05 2000
@@ -155,6 +155,19 @@
 #define DEC32(a)       ((a)=((a)-1)&0xffffffffL)
 #define MAX_MAC_SIZE   20 /* up from 16 for SSLv3 */
 
+/*
+ * Define the Bitmasks for SSL_CIPHER.algorithms.
+ * This bits are used packed as dense as possible. If new methods/ciphers
+ * etc will be added, the bits a likely to change, so this information
+ * is for internal library use only, even though SSL_CIPHER.algorithms
+ * can be publicly accessed.
+ * Use the according functions for cipher management instead.
+ *
+ * The bit mask handling in the selection and sorting scheme in
+ * ssl_create_cipher_list() has only limited capabilities, reflecting
+ * that the different entities within are mutually exclusive:
+ * ONLY ONE BIT PER MASK CAN BE SET AT A TIME.
+ */
 #define SSL_MKEY_MASK          0x0000001FL
 #define SSL_kRSA               0x00000001L /* RSA key exchange */
 #define SSL_kDHr               0x00000002L /* DH cert RSA CA cert */
@@ -190,37 +203,76 @@
 #define SSL_MD5                        0x00020000L
 #define SSL_SHA1               0x00040000L
 #define SSL_SHA                        (SSL_SHA1)
+
+#define SSL_SSL_MASK           0x00180000L
+#define SSL_SSLV2              0x00080000L
+#define SSL_SSLV3              0x00100000L
+#define SSL_TLSV1              SSL_SSLV3       /* for now */
+
+/* we have used 001fffff - 11 bits left to go */
+
+/*
+ * Export and cipher strength information. For each cipher we have to decide
+ * whether it is exportable or not. This information is likely to change
+ * over time, since the export control rules are no static technical issue.
+ *
+ * Independent of the export flag the cipher strength is sorted into classes.
+ * SSL_EXP40 was denoting the 40bit US export limit of past times, which now
+ * is at 56bit (SSL_EXP56). If the exportable cipher class is going to change
+ * again (eg. to 64bit) the use of "SSL_EXP*" becomes blurred even more,
+ * since SSL_EXP64 could be similar to SSL_LOW.
+ * For this reason SSL_MICRO and SSL_MINI macros are included to widen the
+ * namespace of SSL_LOW-SSL_HIGH to lower values. As development of speed
+ * and ciphers goes, another extension to SSL_SUPER and/or SSL_ULTRA would
+ * be possible.
+ */
+#define SSL_EXP_MASK           0x00000003L
+#define SSL_NOT_EXP            0x00000001L
+#define SSL_EXPORT             0x00000002L
+
+#define SSL_STRONG_MASK                0x0000007cL
+#define SSL_EXP40              0x00000004L
+#define SSL_MICRO              (SSL_EXP40)
+#define SSL_EXP56              0x00000008L
+#define SSL_MINI               (SSL_EXP56)
+#define SSL_LOW                        0x00000010L
+#define SSL_MEDIUM             0x00000020L
+#define SSL_HIGH               0x00000040L
 
-#define SSL_EXP_MASK           0x00300000L
-#define SSL_EXP40              0x00100000L
-#define SSL_NOT_EXP            0x00200000L
-#define SSL_EXP56              0x00300000L
-#define SSL_IS_EXPORT(a)       ((a)&SSL_EXP40)
-#define SSL_IS_EXPORT56(a)     (((a)&SSL_EXP_MASK) == SSL_EXP56)
-#define SSL_IS_EXPORT40(a)     (((a)&SSL_EXP_MASK) == SSL_EXP40)
-#define SSL_C_IS_EXPORT(c)     SSL_IS_EXPORT((c)->algorithms)
-#define SSL_C_IS_EXPORT56(c)   SSL_IS_EXPORT56((c)->algorithms)
-#define SSL_C_IS_EXPORT40(c)   SSL_IS_EXPORT40((c)->algorithms)
-#define SSL_EXPORT_KEYLENGTH(a)        (SSL_IS_EXPORT40(a) ? 5 : \
+/* we have used 0000007f - 25 bits left to go */
+
+/*
+ * Macros to check the export status and cipher strength for export ciphers.
+ * Even though the macros for EXPORT and EXPORT40/56 have similar names,
+ * their meaning is different:
+ * *_EXPORT macros check the 'exportable' status.
+ * *_EXPORT40/56 macros are used to check whether a certain cipher strength
+ *          is given.
+ * Since the SSL_IS_EXPORT* and SSL_EXPORT* macros depend on the correct
+ * algorithm structure element to be passed (algorithms, algo_strength) and no
+ * typechecking can be done as they are all of type unsigned long, their
+ * direct usage is discouraged.
+ * Use the SSL_C_* macros instead.
+ */
+#define SSL_IS_EXPORT(a)       ((a)&SSL_EXPORT)
+#define SSL_IS_EXPORT56(a)     ((a)&SSL_EXP56)
+#define SSL_IS_EXPORT40(a)     ((a)&SSL_EXP40)
+#define SSL_C_IS_EXPORT(c)     SSL_IS_EXPORT((c)->algo_strength)
+#define SSL_C_IS_EXPORT56(c)   SSL_IS_EXPORT56((c)->algo_strength)
+#define SSL_C_IS_EXPORT40(c)   SSL_IS_EXPORT40((c)->algo_strength)
+
+#define SSL_EXPORT_KEYLENGTH(a,s)      (SSL_IS_EXPORT40(s) ? 5 : \
                                 ((a)&SSL_ENC_MASK) == SSL_DES ? 8 : 7)
 #define SSL_EXPORT_PKEYLENGTH(a) (SSL_IS_EXPORT40(a) ? 512 : 1024)
-#define SSL_C_EXPORT_KEYLENGTH(c)      SSL_EXPORT_KEYLENGTH((c)->algorithms)
-#define SSL_C_EXPORT_PKEYLENGTH(c)     SSL_EXPORT_PKEYLENGTH((c)->algorithms)
+#define SSL_C_EXPORT_KEYLENGTH(c)      SSL_EXPORT_KEYLENGTH((c)->algorithms, \
+                               (c)->algo_strength)
+#define SSL_C_EXPORT_PKEYLENGTH(c)     SSL_EXPORT_PKEYLENGTH((c)->algo_strength)
 
-#define SSL_SSL_MASK           0x00c00000L
-#define SSL_SSLV2              0x00400000L
-#define SSL_SSLV3              0x00800000L
-#define SSL_TLSV1              SSL_SSLV3       /* for now */
-
-#define SSL_STRONG_MASK                0x07000000L
-#define SSL_LOW                        0x01000000L
-#define SSL_MEDIUM             0x02000000L
-#define SSL_HIGH               0x04000000L
 
-/* we have used 0fffffff - 4 bits left to go */
 #define SSL_ALL                        0xffffffffL
 #define SSL_ALL_CIPHERS                (SSL_MKEY_MASK|SSL_AUTH_MASK|SSL_ENC_MASK|\
-                               SSL_MAC_MASK|SSL_EXP_MASK)
+                               SSL_MAC_MASK)
+#define SSL_ALL_STRENGTHS      (SSL_EXP_MASK|SSL_STRONG_MASK)
 
 /* Mostly for SSLv3 */
 #define SSL_PKEY_RSA_ENC       0
@@ -254,9 +306,9 @@
        {
        /* Current active set */
        CERT_PKEY *key; /* ALWAYS points to an element of the pkeys array
-                                        * Probably it would make more sense to store
-                                        * an index, not a pointer. */
-
+                        * Probably it would make more sense to store
+                        * an index, not a pointer. */
+ 
        /* The following masks are for the key and auth
         * algorithms that are supported by the certs below */
        int valid;
@@ -319,28 +371,28 @@
 
 /* This is for the SSLv3/TLSv1.0 differences in crypto/hash stuff
  * It is a bit of a mess of functions, but hell, think of it as
- * an opaque strucute :-) */
+ * an opaque structure :-) */
 typedef struct ssl3_enc_method
        {
-       int (*enc)();
-       int (*mac)();
-       int (*setup_key_block)();
-       int (*generate_master_secret)();
-       int (*change_cipher_state)();
-       int (*final_finish_mac)();
+       int (*enc)(SSL *, int);
+       int (*mac)(SSL *, unsigned char *, int);
+       int (*setup_key_block)(SSL *);
+       int (*generate_master_secret)(SSL *, unsigned char *, unsigned char *, int);
+       int (*change_cipher_state)(SSL *, int);
+       int (*final_finish_mac)(SSL *, EVP_MD_CTX *, EVP_MD_CTX *, const char *, int, 
+unsigned char *);
        int finish_mac_length;
-       int (*cert_verify_mac)();
-       unsigned char client_finished[20];
-       int client_finished_len;
-       unsigned char server_finished[20];
-       int server_finished_len;
-       int (*alert_value)();
+       int (*cert_verify_mac)(SSL *, EVP_MD_CTX *, unsigned char *);
+       const char *client_finished_label;
+       int client_finished_label_len;
+       const char *server_finished_label;
+       int server_finished_label_len;
+       int (*alert_value)(int);
        } SSL3_ENC_METHOD;
 
 /* Used for holding the relevant compression methods loaded into SSL_CTX */
 typedef struct ssl3_comp_st
        {
-       int comp_id;    /* The identifer byte for this compression type */
+       int comp_id;    /* The identifier byte for this compression type */
        char *name;     /* Text name used for the compression type */
        COMP_METHOD *method; /* The method :-) */
        } SSL3_COMP;
@@ -376,10 +428,10 @@
 STACK_OF(SSL_CIPHER) *ssl_bytes_to_cipher_list(SSL *s,unsigned char *p,int num,
                                               STACK_OF(SSL_CIPHER) **skp);
 int ssl_cipher_list_to_bytes(SSL *s,STACK_OF(SSL_CIPHER) *sk,unsigned char *p);
-STACK_OF(SSL_CIPHER) *ssl_create_cipher_list(SSL_METHOD *meth,
+STACK_OF(SSL_CIPHER) *ssl_create_cipher_list(const SSL_METHOD *meth,
                                             STACK_OF(SSL_CIPHER) **pref,
                                             STACK_OF(SSL_CIPHER) **sorted,
-                                            char *str);
+                                            const char *rule_str);
 void ssl_update_cache(SSL *s, int mode);
 int ssl_cipher_get_evp(SSL_SESSION *s,const EVP_CIPHER **enc,const EVP_MD **md,
                       SSL_COMP **comp);
@@ -416,6 +468,8 @@
 void   ssl2_clear(SSL *s);
 long   ssl2_ctrl(SSL *s,int cmd, long larg, char *parg);
 long   ssl2_ctx_ctrl(SSL_CTX *s,int cmd, long larg, char *parg);
+long   ssl2_callback_ctrl(SSL *s,int cmd, void (*fp)());
+long   ssl2_ctx_callback_ctrl(SSL_CTX *s,int cmd, void (*fp)());
 int    ssl2_pending(SSL *s);
 
 SSL_CIPHER *ssl3_get_cipher_by_char(const unsigned char *p);
@@ -433,17 +487,16 @@
        unsigned char *p, int len);
 int ssl3_get_req_cert_type(SSL *s,unsigned char *p);
 long ssl3_get_message(SSL *s, int st1, int stn, int mt, long max, int *ok);
-int ssl3_send_finished(SSL *s, int a, int b, unsigned char *sender,int slen);
+int ssl3_send_finished(SSL *s, int a, int b, const char *sender,int slen);
 int ssl3_num_ciphers(void);
 SSL_CIPHER *ssl3_get_cipher(unsigned int u);
 int ssl3_renegotiate(SSL *ssl); 
 int ssl3_renegotiate_check(SSL *ssl); 
 int ssl3_dispatch_alert(SSL *s);
 int ssl3_read_bytes(SSL *s, int type, unsigned char *buf, int len);
-int ssl3_part_read(SSL *s, int i);
 int ssl3_write_bytes(SSL *s, int type, const void *buf, int len);
-int ssl3_final_finish_mac(SSL *s, EVP_MD_CTX *ctx1,EVP_MD_CTX *ctx2,
-       unsigned char *sender, int slen,unsigned char *p);
+int ssl3_final_finish_mac(SSL *s, EVP_MD_CTX *ctx1, EVP_MD_CTX *ctx2,
+       const char *sender, int slen,unsigned char *p);
 int ssl3_cert_verify_mac(SSL *s, EVP_MD_CTX *in, unsigned char *p);
 void ssl3_finish_mac(SSL *s, const unsigned char *buf, int len);
 int ssl3_enc(SSL *s, int send_data);
@@ -463,6 +516,8 @@
 void   ssl3_clear(SSL *s);
 long   ssl3_ctrl(SSL *s,int cmd, long larg, char *parg);
 long   ssl3_ctx_ctrl(SSL_CTX *s,int cmd, long larg, char *parg);
+long   ssl3_callback_ctrl(SSL *s,int cmd, void (*fp)());
+long   ssl3_ctx_callback_ctrl(SSL_CTX *s,int cmd, void (*fp)());
 int    ssl3_pending(SSL *s);
 
 int ssl23_accept(SSL *s);
@@ -474,6 +529,7 @@
 void tls1_free(SSL *s);
 void tls1_clear(SSL *s);
 long tls1_ctrl(SSL *s,int cmd, long larg, char *parg);
+long tls1_callback_ctrl(SSL *s,int cmd, void (*fp)());
 SSL_METHOD *tlsv1_base_method(void );
 
 int ssl_init_wbio_buffer(SSL *s, int push);
@@ -483,7 +539,7 @@
 int tls1_setup_key_block(SSL *s);
 int tls1_enc(SSL *s, int snd);
 int tls1_final_finish_mac(SSL *s, EVP_MD_CTX *in1_ctx, EVP_MD_CTX *in2_ctx,
-       unsigned char *str, int slen, unsigned char *p);
+       const char *str, int slen, unsigned char *p);
 int tls1_cert_verify_mac(SSL *s, EVP_MD_CTX *in, unsigned char *p);
 int tls1_mac(SSL *ssl, unsigned char *md, int snd);
 int tls1_generate_master_secret(SSL *s, unsigned char *out,
Index: opensa/openssl/ssl/ssl_sess.c
diff -u opensa/openssl/ssl/ssl_sess.c:1.1 opensa/openssl/ssl/ssl_sess.c:1.2
--- opensa/openssl/ssl/ssl_sess.c:1.1   Tue Jan 25 23:01:18 2000
+++ opensa/openssl/ssl/ssl_sess.c       Thu Mar  2 21:12:05 2000
@@ -65,16 +65,32 @@
 static void SSL_SESSION_list_add(SSL_CTX *ctx,SSL_SESSION *s);
 static int remove_session_lock(SSL_CTX *ctx, SSL_SESSION *c, int lck);
 static int ssl_session_num=0;
-static STACK *ssl_session_meth=NULL;
+static STACK_OF(CRYPTO_EX_DATA_FUNCS) *ssl_session_meth=NULL;
 
 SSL_SESSION *SSL_get_session(SSL *ssl)
+/* aka SSL_get0_session; gets 0 objects, just returns a copy of the pointer */
        {
        return(ssl->session);
        }
 
-int SSL_SESSION_get_ex_new_index(long argl, char *argp, int (*new_func)(),
-            int (*dup_func)(), void (*free_func)())
+SSL_SESSION *SSL_get1_session(SSL *ssl)
+/* variant of SSL_get_session: caller really gets something */
        {
+       SSL_SESSION *sess;
+       /* Need to lock this all up rather than just use CRYPTO_add so that
+        * somebody doesn't free ssl->session between when we check it's
+        * non-null and when we up the reference count. */
+       CRYPTO_r_lock(CRYPTO_LOCK_SSL_SESSION);
+       sess = ssl->session;
+       if(sess)
+               sess->references++;
+       CRYPTO_r_unlock(CRYPTO_LOCK_SSL_SESSION);
+       return(sess);
+       }
+
+int SSL_SESSION_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
+            CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func)
+       {
        ssl_session_num++;
        return(CRYPTO_get_ex_new_index(ssl_session_num-1,
                &ssl_session_meth,
@@ -103,13 +119,14 @@
                }
        memset(ss,0,sizeof(SSL_SESSION));
 
+       ss->verify_result = 1; /* avoid 0 (= X509_V_OK) just in case */
        ss->references=1;
        ss->timeout=60*5+4; /* 5 minute timeout by default */
        ss->time=time(NULL);
        ss->prev=NULL;
        ss->next=NULL;
        ss->compress_meth=0;
-       CRYPTO_new_ex_data(ssl_session_meth,(char *)ss,&ss->ex_data);
+       CRYPTO_new_ex_data(ssl_session_meth,ss,&ss->ex_data);
        return(ss);
        }
 
@@ -161,15 +178,20 @@
                        {
                        SSL_SESSION *r;
 
-                       RAND_bytes(ss->session_id,ss->session_id_length);
+                       RAND_pseudo_bytes(ss->session_id,ss->session_id_length);
                        CRYPTO_r_lock(CRYPTO_LOCK_SSL_CTX);
-                       r=(SSL_SESSION *)lh_retrieve(s->ctx->sessions,
-                               (char *)ss);
+                       r=(SSL_SESSION *)lh_retrieve(s->ctx->sessions, ss);
                        CRYPTO_r_unlock(CRYPTO_LOCK_SSL_CTX);
                        if (r == NULL) break;
                        /* else - woops a session_id match */
-                       /* XXX should also check external cache!
-                        * (But the probability of a collision is negligible, 
anyway...) */
+                       /* XXX We should also check the external cache --
+                        * but the probability of a collision is negligible, and
+                        * we could not prevent the concurrent creation of sessions
+                        * with identical IDs since we currently don't have means
+                        * to atomically check whether a session ID already exists
+                        * and make a reservation for it if it does not
+                        * (this problem applies to the internal cache as well).
+                        */
                        }
                }
        else
@@ -181,6 +203,7 @@
        ss->sid_ctx_length=s->sid_ctx_length;
        s->session=ss;
        ss->ssl_version=s->version;
+       ss->verify_result = X509_V_OK;
 
        return(1);
        }
@@ -192,7 +215,6 @@
        SSL_SESSION *ret=NULL,data;
        int fatal = 0;
 
-       /* conn_init();*/
        data.ssl_version=s->version;
        data.session_id_length=len;
        if (len > SSL_MAX_SSL_SESSION_ID_LENGTH)
@@ -202,7 +224,7 @@
        if (!(s->ctx->session_cache_mode & SSL_SESS_CACHE_NO_INTERNAL_LOOKUP))
                {
                CRYPTO_r_lock(CRYPTO_LOCK_SSL_CTX);
-               ret=(SSL_SESSION *)lh_retrieve(s->ctx->sessions,(char *)&data);
+               ret=(SSL_SESSION *)lh_retrieve(s->ctx->sessions,&data);
                if (ret != NULL)
                    /* don't allow other threads to steal it: */
                    CRYPTO_add(&ret->references,1,CRYPTO_LOCK_SSL_SESSION);
@@ -311,6 +333,7 @@
        if (s->session != NULL)
                SSL_SESSION_free(s->session);
        s->session=ret;
+       s->verify_result = s->session->verify_result;
        return(1);
 
  err:
@@ -327,27 +350,47 @@
        int ret=0;
        SSL_SESSION *s;
 
-       /* conn_init(); */
+       /* add just 1 reference count for the SSL_CTX's session cache
+        * even though it has two ways of access: each session is in a
+        * doubly linked list and an lhash */
        CRYPTO_add(&c->references,1,CRYPTO_LOCK_SSL_SESSION);
+       /* if session c is in already in cache, we take back the increment later */
 
        CRYPTO_w_lock(CRYPTO_LOCK_SSL_CTX);
-       s=(SSL_SESSION *)lh_insert(ctx->sessions,(char *)c);
+       s=(SSL_SESSION *)lh_insert(ctx->sessions,c);
        
-       /* Put on the end of the queue unless it is already in the cache */
+       /* s != NULL iff we already had a session with the given PID.
+        * In this case, s == c should hold (then we did not really modify
+        * ctx->sessions), or we're in trouble. */
+       if (s != NULL && s != c)
+               {
+               /* We *are* in trouble ... */
+               SSL_SESSION_list_remove(ctx,s);
+               SSL_SESSION_free(s);
+               /* ... so pretend the other session did not exist in cache
+                * (we cannot handle two SSL_SESSION structures with identical
+                * session ID in the same cache, which could happen e.g. when
+                * two threads concurrently obtain the same session from an external
+                * cache) */
+               s = NULL;
+               }
+
+       /* Put at the head of the queue unless it is already in the cache */
        if (s == NULL)
                SSL_SESSION_list_add(ctx,c);
 
-       /* If the same session if is being 're-added', Free the old
-        * one when the last person stops using it.
-        * This will also work if it is alread in the cache.
-        * The references will go up and then down :-) */
        if (s != NULL)
                {
-               SSL_SESSION_free(s);
+               /* existing cache entry -- decrement previously incremented reference
+                * count because it already takes into account the cache */
+
+               SSL_SESSION_free(s); /* s == c */
                ret=0;
                }
        else
                {
+               /* new cache entry -- remove old ones if cache has become too large */
+               
                ret=1;
 
                if (SSL_CTX_sess_get_cache_size(ctx) > 0)
@@ -380,7 +423,7 @@
        if ((c != NULL) && (c->session_id_length != 0))
                {
                if(lck) CRYPTO_w_lock(CRYPTO_LOCK_SSL_CTX);
-               r=(SSL_SESSION *)lh_delete(ctx->sessions,(char *)c);
+               r=(SSL_SESSION *)lh_delete(ctx->sessions,c);
                if (r != NULL)
                        {
                        ret=1;
@@ -422,7 +465,7 @@
                }
 #endif
 
-       CRYPTO_free_ex_data(ssl_session_meth,(char *)ss,&ss->ex_data);
+       CRYPTO_free_ex_data(ssl_session_meth,ss,&ss->ex_data);
 
        memset(ss->key_arg,0,SSL_MAX_KEY_ARG_LENGTH);
        memset(ss->master_key,0,SSL_MAX_MASTER_KEY_LENGTH);
@@ -541,7 +584,7 @@
                {
                /* The reason we don't call SSL_CTX_remove_session() is to
                 * save on locking overhead */
-               lh_delete(p->cache,(char *)s);
+               lh_delete(p->cache,s);
                SSL_SESSION_list_remove(p->ctx,s);
                s->not_resumable=1;
                if (p->ctx->remove_session_cb != NULL)
@@ -562,7 +605,7 @@
        CRYPTO_w_lock(CRYPTO_LOCK_SSL_CTX);
        i=tp.cache->down_load;
        tp.cache->down_load=0;
-       lh_doall_arg(tp.cache,(void (*)())timeout,(char *)&tp);
+       lh_doall_arg(tp.cache,(void (*)())timeout,&tp);
        tp.cache->down_load=i;
        CRYPTO_w_unlock(CRYPTO_LOCK_SSL_CTX);
        }
Index: opensa/openssl/ssl/ssl_stat.c
diff -u opensa/openssl/ssl/ssl_stat.c:1.1 opensa/openssl/ssl/ssl_stat.c:1.2
--- opensa/openssl/ssl/ssl_stat.c:1.1   Tue Jan 25 23:01:18 2000
+++ opensa/openssl/ssl/ssl_stat.c       Thu Mar  2 21:12:05 2000
@@ -183,7 +183,7 @@
 #endif
 
 #if !defined(NO_SSL2) && !defined(NO_SSL3)
-/* SSLv2/v3 compatablitity states */
+/* SSLv2/v3 compatibility states */
 /* client */
 case SSL23_ST_CW_CLNT_HELLO_A: str="SSLv2/v3 write client hello A"; break;
 case SSL23_ST_CW_CLNT_HELLO_B: str="SSLv2/v3 write client hello B"; break;
@@ -331,7 +331,7 @@
 #endif
 
 #if !defined(NO_SSL2) && !defined(NO_SSL3)
-/* SSLv2/v3 compatablitity states */
+/* SSLv2/v3 compatibility states */
 /* client */
 case SSL23_ST_CW_CLNT_HELLO_A:                 str="23WCHA"; break;
 case SSL23_ST_CW_CLNT_HELLO_B:                 str="23WCHB"; break;
@@ -402,7 +402,7 @@
                str="close notify";
                break;
        case SSL3_AD_UNEXPECTED_MESSAGE:
-               str="unexected_message";
+               str="unexpected_message";
                break;
        case SSL3_AD_BAD_RECORD_MAC:
                str="bad record mac";
@@ -429,7 +429,7 @@
                str="certificate expired";
                break;
        case SSL3_AD_CERTIFICATE_UNKNOWN:
-               str="certifcate unknown";
+               str="certificate unknown";
                break;
        case SSL3_AD_ILLEGAL_PARAMETER:
                str="illegal parameter";
Index: opensa/openssl/ssl/ssl_task.c
diff -u opensa/openssl/ssl/ssl_task.c:1.1 opensa/openssl/ssl/ssl_task.c:1.2
--- opensa/openssl/ssl/ssl_task.c:1.1   Tue Jan 25 23:01:18 2000
+++ opensa/openssl/ssl/ssl_task.c       Thu Mar  2 21:12:05 2000
@@ -226,7 +226,7 @@
        printf("cipher list: %s\n", cipher ? cipher : "{undefined}" );
 
        SSL_load_error_strings();
-       SSLeay_add_all_algorithms();
+       OpenSSL_add_all_algorithms();
 
 /* DRM, this was the original, but there is no such thing as SSLv2()
        s_ctx=SSL_CTX_new(SSLv2());
Index: opensa/openssl/ssl/ssl_txt.c
diff -u opensa/openssl/ssl/ssl_txt.c:1.1 opensa/openssl/ssl/ssl_txt.c:1.2
--- opensa/openssl/ssl/ssl_txt.c:1.1    Tue Jan 25 23:01:18 2000
+++ opensa/openssl/ssl/ssl_txt.c        Thu Mar  2 21:12:05 2000
@@ -112,7 +112,7 @@
                sprintf(str,"%02X",x->session_id[i]);
                if (BIO_puts(bp,str) <= 0) goto err;
                }
-       if (BIO_puts(bp,"\nSession-ID-ctx: ") <= 0) goto err;
+       if (BIO_puts(bp,"\n    Session-ID-ctx: ") <= 0) goto err;
        for (i=0; i<x->sid_ctx_length; i++)
                {
                sprintf(str,"%02X",x->sid_ctx[i]);
@@ -163,6 +163,11 @@
                if (BIO_puts(bp,str) <= 0) goto err;
                }
        if (BIO_puts(bp,"\n") <= 0) goto err;
+
+       if (BIO_puts(bp, "    Verify return code ") <= 0) goto err;
+       sprintf(str, "%ld (%s)\n", x->verify_result, 
+                       X509_verify_cert_error_string(x->verify_result));
+       if (BIO_puts(bp,str) <= 0) goto err;
                
        return(1);
 err:
Index: opensa/openssl/ssl/ssltest.c
diff -u opensa/openssl/ssl/ssltest.c:1.1 opensa/openssl/ssl/ssltest.c:1.2
--- opensa/openssl/ssl/ssltest.c:1.1    Tue Jan 25 23:01:18 2000
+++ opensa/openssl/ssl/ssltest.c        Thu Mar  2 21:12:05 2000
@@ -56,11 +56,12 @@
  * [including the GNU Public Licence.]
  */
 
+#include <assert.h>
+#include <errno.h>
+#include <limits.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-#include <errno.h>
-#include <limits.h>
 
 #include "openssl/e_os.h"
 
@@ -69,14 +70,11 @@
 #include <openssl/x509.h>
 #include <openssl/ssl.h>
 #include <openssl/err.h>
+#include <openssl/rand.h>
 #ifdef WINDOWS
 #include "../crypto/bio/bss_file.c"
 #endif
 
-#if defined(NO_RSA) && !defined(NO_SSL2)
-#define NO_SSL2
-#endif
-
 #ifdef VMS
 #  define TEST_SERVER_CERT "SYS$DISK:[-.APPS]SERVER.PEM"
 #  define TEST_CLIENT_CERT "SYS$DISK:[-.APPS]CLIENT.PEM"
@@ -85,19 +83,23 @@
 #  define TEST_CLIENT_CERT "../apps/client.pem"
 #endif
 
-int MS_CALLBACK verify_callback(int ok, X509_STORE_CTX *ctx);
+static int MS_CALLBACK verify_callback(int ok, X509_STORE_CTX *ctx);
 #ifndef NO_RSA
 static RSA MS_CALLBACK *tmp_rsa_cb(SSL *s, int is_export,int keylength);
 #endif
 #ifndef NO_DH
 static DH *get_dh512(void);
+#endif
+#ifndef NO_DSA
+static void MS_CALLBACK dsa_cb(int p, int n, void *arg);
 #endif
-BIO *bio_err=NULL;
-BIO *bio_stdout=NULL;
 
+static BIO *bio_err=NULL;
+static BIO *bio_stdout=NULL;
+
 static char *cipher=NULL;
-int verbose=0;
-int debug=0;
+static int verbose=0;
+static int debug=0;
 #if 0
 /* Not used yet. */
 #ifdef FIONBIO
@@ -105,6 +107,7 @@
 #endif
 #endif
 
+static const char rnd_seed[] = "string to make the random number generator think it 
+has entropy";
 
 int doit_biopair(SSL *s_ssl,SSL *c_ssl,long bytes);
 int doit(SSL *s_ssl,SSL *c_ssl,long bytes);
@@ -122,6 +125,9 @@
 #if !defined NO_DH && !defined NO_DSA
        fprintf(stderr," -dhe1024      - generate 1024 bit key for DHE\n");
 #endif
+#if !defined NO_DH
+       fprintf(stderr," -no_dhe       - disable DHE\n");
+#endif
 #ifndef NO_SSL2
        fprintf(stderr," -ssl2         - use SSLv2\n");
 #endif
@@ -159,16 +165,21 @@
        int number=1,reuse=0;
        long bytes=1L;
        SSL_CIPHER *ciph;
-       int dhe1024 = 0;
+       int dhe1024 = 0, no_dhe = 0;
 #ifndef NO_DH
        DH *dh;
 #endif
+       verbose = 0;
+       debug = 0;
+       cipher = 0;
+       
+       CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON);
 
+       RAND_seed(rnd_seed, sizeof rnd_seed);
+
        bio_err=BIO_new_fp(stderr,BIO_NOCLOSE);
        bio_stdout=BIO_new_fp(stdout,BIO_NOCLOSE);
 
-       CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON);
-
        argc--;
        argv++;
 
@@ -186,6 +197,8 @@
                        reuse=1;
                else if (strcmp(*argv,"-dhe1024") == 0)
                        dhe1024=1;
+               else if (strcmp(*argv,"-no_dhe") == 0)
+                       no_dhe=1;
                else if (strcmp(*argv,"-ssl2") == 0)
                        ssl2=1;
                else if (strcmp(*argv,"-tls1") == 0)
@@ -311,31 +324,36 @@
                }
 
 #ifndef NO_DH
-# ifndef NO_DSA
-       if (dhe1024) 
+       if (!no_dhe)
                {
-               DSA *dsa;
-
-               if (verbose)
+# ifndef NO_DSA
+               if (dhe1024) 
                        {
-                       fprintf(stdout, "Creating 1024 bit DHE parameters ...");
-                       fflush(stdout);
+                       DSA *dsa;
+                       unsigned char seed[20];
+                       
+                       if (verbose)
+                               {
+                               BIO_printf(bio_err, "Creating 1024 bit DHE 
+parameters\n");
+                               BIO_flush(bio_err);
+                               }
+                       
+                       memcpy(seed, "Random String no. 12", 20);
+                       dsa = DSA_generate_parameters(1024, seed, 20, NULL, NULL, 
+dsa_cb, bio_err);
+                       dh = DSA_dup_DH(dsa);   
+                       DSA_free(dsa);
+                       /* important: SSL_OP_SINGLE_DH_USE to avoid small subgroup 
+attacks */
+                       SSL_CTX_set_options(s_ctx, SSL_OP_SINGLE_DH_USE);
+                       
+                       if (verbose)
+                               fprintf(stdout, " done\n");
                        }
-
-               dsa = DSA_generate_parameters(1024, NULL, 0, NULL, NULL, 0, NULL);
-               dh = DSA_dup_DH(dsa);   
-               DSA_free(dsa);
-               /* important: SSL_OP_SINGLE_DH_USE to avoid small subgroup attacks */
-               SSL_CTX_set_options(s_ctx, SSL_OP_SINGLE_DH_USE);
-
-               if (verbose)
-                       fprintf(stdout, " done\n");
-               }
-       else
+               else
 # endif
-               dh=get_dh512();
-       SSL_CTX_set_tmp_dh(s_ctx,dh);
-       DH_free(dh);
+                       dh=get_dh512();
+               SSL_CTX_set_tmp_dh(s_ctx,dh);
+               DH_free(dh);
+               }
 #endif
 
 #ifndef NO_RSA
@@ -373,17 +391,22 @@
 
        if (client_auth)
                {
-               fprintf(stderr,"client authentication\n");
+               BIO_printf(bio_err,"client authentication\n");
                SSL_CTX_set_verify(s_ctx,
                        SSL_VERIFY_PEER|SSL_VERIFY_FAIL_IF_NO_PEER_CERT,
                        verify_callback);
                }
        if (server_auth)
                {
-               fprintf(stderr,"server authentication\n");
+               BIO_printf(bio_err,"server authentication\n");
                SSL_CTX_set_verify(c_ctx,SSL_VERIFY_PEER,
                        verify_callback);
                }
+       
+       {
+               int session_id_context = 0;
+               SSL_CTX_set_session_id_context(s_ctx, (void *)&session_id_context, 
+sizeof session_id_context);
+       }
 
        c_ssl=SSL_new(c_ctx);
        s_ssl=SSL_new(s_ctx);
@@ -400,13 +423,13 @@
        if (!verbose)
                {
                ciph=SSL_get_current_cipher(c_ssl);
-               fprintf(stdout,"Protocol %s, cipher %s, %s\n",
+               BIO_printf(bio_stdout,"Protocol %s, cipher %s, %s\n",
                        SSL_get_version(c_ssl),
                        SSL_CIPHER_get_version(ciph),
                        SSL_CIPHER_get_name(ciph));
                }
        if ((number > 1) || (bytes > 1L))
-               printf("%d handshakes of %ld bytes done\n",number,bytes);
+               BIO_printf(bio_stdout, "%d handshakes of %ld bytes 
+done\n",number,bytes);
 
        SSL_free(s_ssl);
        SSL_free(c_ssl);
@@ -421,6 +444,7 @@
        ERR_remove_state(0);
        EVP_cleanup();
        CRYPTO_mem_leaks(bio_err);
+       if (bio_err != NULL) BIO_free(bio_err);
        EXIT(ret);
        }
 
@@ -485,7 +509,7 @@
                 * BIO_ctrl_pending(bio)              number of bytes we can read now
                 * BIO_ctrl_get_read_request(bio)     number of bytes needed to fulfil
                 *                                      other side's read attempt
-                * BIO_ctrl_get_write_gurantee(bio)   number of bytes we can write now
+                * BIO_ctrl_get_write_guarantee(bio)   number of bytes we can write now
                 *
                 * ..._read_request is never more than ..._write_guarantee;
                 * it depends on the application which one you should use.
@@ -517,7 +541,7 @@
                                else
                                        i = (int)cw_num;
                                r = BIO_write(c_ssl_bio, cbuf, i);
-                               if (r == -1)
+                               if (r < 0)
                                        {
                                        if (!BIO_should_retry(c_ssl_bio))
                                                {
@@ -590,7 +614,7 @@
                                else
                                        i = (int)sw_num;
                                r = BIO_write(s_ssl_bio, sbuf, i);
-                               if (r == -1)
+                               if (r < 0)
                                        {
                                        if (!BIO_should_retry(s_ssl_bio))
                                                {
@@ -643,47 +667,42 @@
                        {
                        /* "I/O" BETWEEN CLIENT AND SERVER. */
 
-#define RELAYBUFSIZ 200
-                       static char buf[RELAYBUFSIZ];
-
-                       /* RELAYBUF is arbitrary.  When writing data over some real
-                        * network, use a buffer of the same size as in the BIO_pipe
-                        * and make that size large (for reading from the network
-                        * small buffers usually won't hurt).
-                        * Here sizes differ for testing. */
-
                        size_t r1, r2;
-                       size_t num;
-                       int r;
+                       BIO *io1 = server_io, *io2 = client_io;
+                       /* we use the non-copying interface for io1
+                        * and the standard BIO_write/BIO_read interface for io2
+                        */
+                       
                        static int prev_progress = 1;
                        int progress = 0;
                        
-                       /* client to server */
+                       /* io1 to io2 */
                        do
                                {
-                               r1 = BIO_ctrl_pending(client_io);
-                               r2 = BIO_ctrl_get_write_guarantee(server_io);
+                               size_t num;
+                               int r;
+
+                               r1 = BIO_ctrl_pending(io1);
+                               r2 = BIO_ctrl_get_write_guarantee(io2);
 
                                num = r1;
                                if (r2 < num)
                                        num = r2;
                                if (num)
                                        {
-                                       if (sizeof buf < num)
-                                               num = sizeof buf;
+                                       char *dataptr;
+
                                        if (INT_MAX < num) /* yeah, right */
                                                num = INT_MAX;
                                        
-                                       r = BIO_read(client_io, buf, (int)num);
+                                       r = BIO_nread(io1, &dataptr, (int)num);
+                                       assert(r > 0);
+                                       assert(r <= (int)num);
+                                       /* possibly r < num (non-contiguous data) */
+                                       num = r;
+                                       r = BIO_write(io2, dataptr, (int)num);
                                        if (r != (int)num) /* can't happen */
                                                {
-                                               fprintf(stderr, "ERROR: BIO_read could 
not read "
-                                                       "BIO_ctrl_pending() bytes");
-                                               goto err;
-                                               }
-                                       r = BIO_write(server_io, buf, (int)num);
-                                       if (r != (int)num) /* can't happen */
-                                               {
                                                fprintf(stderr, "ERROR: BIO_write 
could not write "
                                                        
"BIO_ctrl_get_write_guarantee() bytes");
                                                goto err;
@@ -691,48 +710,58 @@
                                        progress = 1;
 
                                        if (debug)
-                                               printf("C->S relaying: %d bytes\n", 
(int)num);
+                                               printf((io1 == client_io) ?
+                                                       "C->S relaying: %d bytes\n" :
+                                                       "S->C relaying: %d bytes\n",
+                                                       (int)num);
                                        }
                                }
                        while (r1 && r2);
 
-                       /* server to client */
-                       do
-                               {
-                               r1 = BIO_ctrl_pending(server_io);
-                               r2 = BIO_ctrl_get_write_guarantee(client_io);
+                       /* io2 to io1 */
+                       {
+                               size_t num;
+                               int r;
 
+                               r1 = BIO_ctrl_pending(io2);
+                               r2 = BIO_ctrl_get_read_request(io1);
+                               /* here we could use ..._get_write_guarantee instead of
+                                * ..._get_read_request, but by using the latter
+                                * we test restartability of the SSL implementation
+                                * more thoroughly */
                                num = r1;
                                if (r2 < num)
                                        num = r2;
                                if (num)
                                        {
-                                       if (sizeof buf < num)
-                                               num = sizeof buf;
+                                       char *dataptr;
+                                       
                                        if (INT_MAX < num)
                                                num = INT_MAX;
+
+                                       if (num > 1)
+                                               --num; /* test restartability even 
+more thoroughly */
                                        
-                                       r = BIO_read(server_io, buf, (int)num);
+                                       r = BIO_nwrite(io1, &dataptr, (int)num);
+                                       assert(r > 0);
+                                       assert(r <= (int)num);
+                                       num = r;
+                                       r = BIO_read(io2, dataptr, (int)num);
                                        if (r != (int)num) /* can't happen */
                                                {
                                                fprintf(stderr, "ERROR: BIO_read could 
not read "
                                                        "BIO_ctrl_pending() bytes");
                                                goto err;
                                                }
-                                       r = BIO_write(client_io, buf, (int)num);
-                                       if (r != (int)num) /* can't happen */
-                                               {
-                                               fprintf(stderr, "ERROR: BIO_write 
could not write "
-                                                       
"BIO_ctrl_get_write_guarantee() bytes");
-                                               goto err;
-                                               }
                                        progress = 1;
-
+                                       
                                        if (debug)
-                                               printf("S->C relaying: %d bytes\n", 
(int)num);
+                                               printf((io2 == client_io) ?
+                                                       "C->S relaying: %d bytes\n" :
+                                                       "S->C relaying: %d bytes\n",
+                                                       (int)num);
                                        }
-                               }
-                       while (r1 && r2);
+                       } /* no loop, BIO_ctrl_get_read_request now returns 0 anyway */
 
                        if (!progress && !prev_progress)
                                if (cw_num > 0 || cr_num > 0 || sw_num > 0 || sr_num > 
0)
@@ -1091,7 +1120,7 @@
        return(ret);
        }
 
-int MS_CALLBACK verify_callback(int ok, X509_STORE_CTX *ctx)
+static int MS_CALLBACK verify_callback(int ok, X509_STORE_CTX *ctx)
        {
        char *s,buf[256];
 
@@ -1159,5 +1188,26 @@
                (void)BIO_flush(bio_err);
                }
        return(rsa_tmp);
+       }
+#endif
+
+#ifndef NO_DSA
+static void MS_CALLBACK dsa_cb(int p, int n, void *arg)
+       {
+       char c='*';
+       static int ok=0,num=0;
+
+       if (p == 0) { c='.'; num++; };
+       if (p == 1) c='+';
+       if (p == 2) { c='*'; ok++; }
+       if (p == 3) c='\n';
+       BIO_write(arg,&c,1);
+       (void)BIO_flush(arg);
+
+       if (!ok && (p == 0) && (num > 1))
+               {
+               BIO_printf((BIO *)arg,"error in dsatest\n");
+               exit(1);
+               }
        }
 #endif
Index: opensa/openssl/ssl/t1_enc.c
diff -u opensa/openssl/ssl/t1_enc.c:1.1 opensa/openssl/ssl/t1_enc.c:1.2
--- opensa/openssl/ssl/t1_enc.c:1.1     Tue Jan 25 23:01:18 2000
+++ opensa/openssl/ssl/t1_enc.c Thu Mar  2 21:12:06 2000
@@ -494,7 +494,7 @@
        }
 
 int tls1_final_finish_mac(SSL *s, EVP_MD_CTX *in1_ctx, EVP_MD_CTX *in2_ctx,
-            unsigned char *str, int slen, unsigned char *out)
+            const char *str, int slen, unsigned char *out)
        {
        unsigned int i;
        EVP_MD_CTX ctx;
@@ -621,11 +621,11 @@
        case SSL_AD_ACCESS_DENIED:      return(TLS1_AD_ACCESS_DENIED);
        case SSL_AD_DECODE_ERROR:       return(TLS1_AD_DECODE_ERROR);
        case SSL_AD_DECRYPT_ERROR:      return(TLS1_AD_DECRYPT_ERROR);
-       case SSL_AD_EXPORT_RESTRICION:  return(TLS1_AD_EXPORT_RESTRICION);
+       case SSL_AD_EXPORT_RESTRICTION: return(TLS1_AD_EXPORT_RESTRICTION);
        case SSL_AD_PROTOCOL_VERSION:   return(TLS1_AD_PROTOCOL_VERSION);
        case SSL_AD_INSUFFICIENT_SECURITY:return(TLS1_AD_INSUFFICIENT_SECURITY);
        case SSL_AD_INTERNAL_ERROR:     return(TLS1_AD_INTERNAL_ERROR);
-       case SSL_AD_USER_CANCLED:       return(TLS1_AD_USER_CANCLED);
+       case SSL_AD_USER_CANCELLED:     return(TLS1_AD_USER_CANCELLED);
        case SSL_AD_NO_RENEGOTIATION:   return(TLS1_AD_NO_RENEGOTIATION);
        default:                        return(-1);
                }
Index: opensa/openssl/ssl/t1_lib.c
diff -u opensa/openssl/ssl/t1_lib.c:1.1 opensa/openssl/ssl/t1_lib.c:1.2
--- opensa/openssl/ssl/t1_lib.c:1.1     Tue Jan 25 23:01:18 2000
+++ opensa/openssl/ssl/t1_lib.c Thu Mar  2 21:12:06 2000
@@ -60,13 +60,9 @@
 #include <openssl/objects.h>
 #include "ssl_locl.h"
 
-char *tls1_version_str="TLSv1" OPENSSL_VERSION_PTEXT;
+const char *tls1_version_str="TLSv1" OPENSSL_VERSION_PTEXT;
 
-#ifndef NO_PROTO
 static long tls1_default_timeout(void);
-#else
-static long tls1_default_timeout();
-#endif
 
 static SSL3_ENC_METHOD TLSv1_enc_data={
        tls1_enc,
@@ -105,6 +101,9 @@
        ssl_bad_method,
        tls1_default_timeout,
        &TLSv1_enc_data,
+       ssl_undefined_function,
+       ssl3_callback_ctrl,
+       ssl3_ctx_callback_ctrl,
        };
 
 static long tls1_default_timeout(void)
@@ -139,6 +138,11 @@
 
 #if 0
 long tls1_ctrl(SSL *s, int cmd, long larg, char *parg)
+       {
+       return(0);
+       }
+
+long tls1_callback_ctrl(SSL *s, int cmd, void *(*fp)())
        {
        return(0);
        }
Index: opensa/openssl/ssl/tls1.h
diff -u opensa/openssl/ssl/tls1.h:1.1 opensa/openssl/ssl/tls1.h:1.2
--- opensa/openssl/ssl/tls1.h:1.1       Tue Jan 25 23:01:18 2000
+++ opensa/openssl/ssl/tls1.h   Thu Mar  2 21:12:06 2000
@@ -65,7 +65,7 @@
 extern "C" {
 #endif
 
-#define TLS1_ALLOW_EXPERIMENTAL_CIPHERSUITES   0
+#define TLS1_ALLOW_EXPERIMENTAL_CIPHERSUITES   1
 
 #define TLS1_VERSION                   0x0301
 #define TLS1_VERSION_MAJOR             0x03
@@ -77,11 +77,11 @@
 #define TLS1_AD_ACCESS_DENIED          49      /* fatal */
 #define TLS1_AD_DECODE_ERROR           50      /* fatal */
 #define TLS1_AD_DECRYPT_ERROR          51
-#define TLS1_AD_EXPORT_RESTRICION      60      /* fatal */
+#define TLS1_AD_EXPORT_RESTRICTION     60      /* fatal */
 #define TLS1_AD_PROTOCOL_VERSION       70      /* fatal */
 #define TLS1_AD_INSUFFICIENT_SECURITY  71      /* fatal */
 #define TLS1_AD_INTERNAL_ERROR         80      /* fatal */
-#define TLS1_AD_USER_CANCLED           90
+#define TLS1_AD_USER_CANCELLED         90
 #define TLS1_AD_NO_RENEGOTIATION       100
 
 #define TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_MD5         0x03000060
Index: opensa/openssl/test/makefile.ssl
diff -u opensa/openssl/test/makefile.ssl:1.1 opensa/openssl/test/makefile.ssl:1.2
--- opensa/openssl/test/makefile.ssl:1.1        Tue Jan 25 23:00:59 2000
+++ opensa/openssl/test/makefile.ssl    Thu Mar  2 21:12:06 2000
@@ -13,6 +13,7 @@
 MAKEFILE=      Makefile.ssl
 MAKE=          make -f $(MAKEFILE)
 MAKEDEPEND=    $(TOP)/util/domd $(TOP)
+PERL=          perl
 
 PEX_LIBS=
 EX_LIBS= #-lnsl -lsocket
@@ -50,7 +51,7 @@
 DSATEST=       dsatest
 METHTEST=      methtest
 SSLTEST=       ssltest
-RSATEST=       rsa_oaep_test
+RSATEST=       rsa_test
 
 EXE=   $(BNTEST) $(IDEATEST) $(MD2TEST)  $(MD5TEST) $(HMACTEST) \
        $(RC2TEST) $(RC4TEST) $(RC5TEST) \
@@ -98,9 +99,9 @@
 
 tests: exe apps \
        test_des test_idea test_sha test_md5 test_hmac test_md2 test_mdc2 \
-       test_rc2 test_rc4 test_rc5 test_bf test_cast \
+       test_rmd test_rc2 test_rc4 test_rc5 test_bf test_cast \
        test_rand test_bn test_enc test_x509 test_rsa test_crl test_sid \
-       test_reqgen test_req test_pkcs7 test_verify test_dh test_dsa \
+       test_gen test_req test_pkcs7 test_verify test_dh test_dsa \
        test_ss test_ssl test_ca
 
 apps:
@@ -180,9 +181,10 @@
 
 test_bn:
        @echo starting big number library test, could take a while...
-       @(./$(BNTEST)|bc) | awk '{ \
-if ($$0 != "0") {print "error"; exit(1); } \
-if (((NR+1)%64) == 0) print NR+1," tests done"; }'
+       @./$(BNTEST) >tmp.bntest
+       @echo quit >>tmp.bntest
+       @echo "running bc"
+       @bc tmp.bntest 2>&1 | $(PERL) -e 'while (<STDIN>) {if (/^test (.*)/) {print 
+STDERR "\nverify $$1";} elsif (!/^0$$/) {die "\nFailed! bc: $$_";} print STDERR "."; 
+$$i++;} print STDERR "\n$$i tests passed\n"'
        @echo 'test a^b%c implementations'
        ./$(EXPTEST)
 
@@ -192,14 +194,15 @@
        ../apps/openssl verify -CApath ../certs ../certs/*.pem
 
 test_dh:
-       @echo "Generate as set of DH parameters"
+       @echo "Generate a set of DH parameters"
        ./$(DHTEST)
 
 test_dsa:
-       @echo "Generate as set of DSA parameters"
+       @echo "Generate a set of DSA parameters"
        ./$(DSATEST)
+       ./$(DSATEST) -app2_1
 
-test_reqgen:
+test_gen:
        @echo "Generate and verify a certificate request"
        @sh ./testgen
 
@@ -226,7 +229,7 @@
        mv -f Makefile.new $(MAKEFILE)
 
 clean:
-       rm -f *.o *.obj lib tags core .pure .nfs* *.old *.bak fluff $(EXE) *.ss log
+       rm -f .rnd tmp.bntest *.o *.obj lib tags core .pure .nfs* *.old *.bak fluff 
+$(EXE) *.ss log
 
 $(DLIBSSL):
        (cd ../ssl; $(MAKE))
@@ -325,16 +328,19 @@
 dhtest.o: ../include/openssl/bio.h ../include/openssl/bn.h
 dhtest.o: ../include/openssl/crypto.h ../include/openssl/dh.h
 dhtest.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
+dhtest.o: ../include/openssl/rand.h ../include/openssl/safestack.h
 dhtest.o: ../include/openssl/stack.h
 dsatest.o: ../include/openssl/bio.h ../include/openssl/bn.h
 dsatest.o: ../include/openssl/crypto.h ../include/openssl/dh.h
 dsatest.o: ../include/openssl/dsa.h ../include/openssl/err.h
 dsatest.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
-dsatest.o: ../include/openssl/rand.h ../include/openssl/stack.h
+dsatest.o: ../include/openssl/rand.h ../include/openssl/safestack.h
+dsatest.o: ../include/openssl/stack.h
 exptest.o: ../include/openssl/bio.h ../include/openssl/bn.h
 exptest.o: ../include/openssl/crypto.h ../include/openssl/err.h
 exptest.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
-exptest.o: ../include/openssl/rand.h ../include/openssl/stack.h
+exptest.o: ../include/openssl/rand.h ../include/openssl/safestack.h
+exptest.o: ../include/openssl/stack.h
 hmactest.o: ../include/openssl/asn1.h ../include/openssl/bio.h
 hmactest.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
 hmactest.o: ../include/openssl/cast.h ../include/openssl/crypto.h
@@ -359,11 +365,12 @@
 rc4test.o: ../include/openssl/opensslconf.h ../include/openssl/rc4.h
 rc5test.o: ../include/openssl/rc5.h
 rmdtest.o: ../include/openssl/ripemd.h
-rsa_oaep_test.o: ../include/openssl/bn.h ../include/openssl/crypto.h
-rsa_oaep_test.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
-rsa_oaep_test.o: ../include/openssl/err.h ../include/openssl/opensslconf.h
-rsa_oaep_test.o: ../include/openssl/opensslv.h ../include/openssl/rsa.h
-rsa_oaep_test.o: ../include/openssl/stack.h
+rsa_test.o: ../include/openssl/bn.h ../include/openssl/crypto.h
+rsa_test.o: ../include/openssl/e_os.h ../include/openssl/e_os2.h
+rsa_test.o: ../include/openssl/err.h ../include/openssl/opensslconf.h
+rsa_test.o: ../include/openssl/opensslv.h ../include/openssl/rand.h
+rsa_test.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
+rsa_test.o: ../include/openssl/stack.h
 sha1test.o: ../include/openssl/sha.h
 shatest.o: ../include/openssl/sha.h
 ssltest.o: ../include/openssl/asn1.h ../include/openssl/bio.h
@@ -378,11 +385,12 @@
 ssltest.o: ../include/openssl/mdc2.h ../include/openssl/objects.h
 ssltest.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
 ssltest.o: ../include/openssl/pem.h ../include/openssl/pem2.h
-ssltest.o: ../include/openssl/pkcs7.h ../include/openssl/rc2.h
-ssltest.o: ../include/openssl/rc4.h ../include/openssl/rc5.h
-ssltest.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
-ssltest.o: ../include/openssl/safestack.h ../include/openssl/sha.h
-ssltest.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h
-ssltest.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
-ssltest.o: ../include/openssl/stack.h ../include/openssl/tls1.h
-ssltest.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h
+ssltest.o: ../include/openssl/pkcs7.h ../include/openssl/rand.h
+ssltest.o: ../include/openssl/rc2.h ../include/openssl/rc4.h
+ssltest.o: ../include/openssl/rc5.h ../include/openssl/ripemd.h
+ssltest.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
+ssltest.o: ../include/openssl/sha.h ../include/openssl/ssl.h
+ssltest.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
+ssltest.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
+ssltest.o: ../include/openssl/tls1.h ../include/openssl/x509.h
+ssltest.o: ../include/openssl/x509_vfy.h
Index: opensa/openssl/test/maketests.com
diff -u opensa/openssl/test/maketests.com:1.1 opensa/openssl/test/maketests.com:1.2
--- opensa/openssl/test/maketests.com:1.1       Tue Jan 25 23:00:59 2000
+++ opensa/openssl/test/maketests.com   Thu Mar  2 21:12:06 2000
@@ -147,7 +147,7 @@
               "RC2TEST,RC4TEST,RC5TEST,"+ -
               "DESTEST,SHATEST,SHA1TEST,MDC2TEST,RMDTEST,"+ -
               "RANDTEST,DHTEST,"+ -
-              "BFTEST,CASTTEST,SSLTEST,EXPTEST,DSATEST,RSA_OAEP_TEST"
+              "BFTEST,CASTTEST,SSLTEST,EXPTEST,DSATEST,RSA_TEST"
 $ TCPIP_PROGRAMS = ",,"
 $ IF COMPILER .EQS. "VAXC" THEN -
      TCPIP_PROGRAMS = ",SSLTEST,"
@@ -730,12 +730,36 @@
 $! Set Up Initial CC Definitions, Possibly With User Ones
 $!
 $ CCDEFS = "VMS=1,TCPIP_TYPE_''P4'"
+$ IF F$TRNLNM("OPENSSL_NO_ASM") THEN CCDEFS = CCDEFS + ",NO_ASM"
+$ IF F$TRNLNM("OPENSSL_NO_RSA") THEN CCDEFS = CCDEFS + ",NO_RSA"
+$ IF F$TRNLNM("OPENSSL_NO_DSA") THEN CCDEFS = CCDEFS + ",NO_DSA"
+$ IF F$TRNLNM("OPENSSL_NO_DH") THEN CCDEFS = CCDEFS + ",NO_DH"
+$ IF F$TRNLNM("OPENSSL_NO_MD2") THEN CCDEFS = CCDEFS + ",NO_MD2"
+$ IF F$TRNLNM("OPENSSL_NO_MD5") THEN CCDEFS = CCDEFS + ",NO_MD5"
+$ IF F$TRNLNM("OPENSSL_NO_RIPEMD") THEN CCDEFS = CCDEFS + ",NO_RIPEMD"
+$ IF F$TRNLNM("OPENSSL_NO_SHA") THEN CCDEFS = CCDEFS + ",NO_SHA"
+$ IF F$TRNLNM("OPENSSL_NO_SHA0") THEN CCDEFS = CCDEFS + ",NO_SHA0"
+$ IF F$TRNLNM("OPENSSL_NO_SHA1") THEN CCDEFS = CCDEFS + ",NO_SHA1"
+$ IF F$TRNLNM("OPENSSL_NO_DES")
+$ THEN
+$   CCDEFS = CCDEFS + ",NO_DES,NO_MDC2"
+$ ELSE
+$   IF F$TRNLNM("OPENSSL_NO_MDC2") THEN CCDEFS = CCDEFS + ",NO_MDC2"
+$ ENDIF
+$ IF F$TRNLNM("OPENSSL_NO_RC2") THEN CCDEFS = CCDEFS + ",NO_RC2"
+$ IF F$TRNLNM("OPENSSL_NO_RC4") THEN CCDEFS = CCDEFS + ",NO_RC4"
+$ IF F$TRNLNM("OPENSSL_NO_RC5") THEN CCDEFS = CCDEFS + ",NO_RC5"
+$ IF F$TRNLNM("OPENSSL_NO_IDEA") THEN CCDEFS = CCDEFS + ",NO_IDEA"
+$ IF F$TRNLNM("OPENSSL_NO_BF") THEN CCDEFS = CCDEFS + ",NO_BF"
+$ IF F$TRNLNM("OPENSSL_NO_CAST") THEN CCDEFS = CCDEFS + ",NO_CAST"
+$ IF F$TRNLNM("OPENSSL_NO_HMAC") THEN CCDEFS = CCDEFS + ",NO_HMAC"
+$ IF F$TRNLNM("OPENSSL_NO_SSL2") THEN CCDEFS = CCDEFS + ",NO_SSL2"
 $ IF F$TYPE(USER_CCDEFS) .NES. "" THEN CCDEFS = CCDEFS + "," + USER_CCDEFS
 $ CCEXTRAFLAGS = ""
 $ IF F$TYPE(USER_CCFLAGS) .NES. "" THEN CCEXTRAFLAGS = USER_CCFLAGS
-$ CCDISABLEWARNINGS = ""
+$ CCDISABLEWARNINGS = "LONGLONGTYPE,LONGLONGSUFX"
 $ IF F$TYPE(USER_CCDISABLEWARNINGS) .NES. "" THEN -
-       CCDISABLEWARNINGS = USER_CCDISABLEWARNINGS
+       CCDISABLEWARNINGS = CCDISABLEWARNINGS + "," + USER_CCDISABLEWARNINGS
 $!
 $!  Check To See If The User Entered A Valid Paramter.
 $!
Index: opensa/openssl/test/tcrl.com
diff -u opensa/openssl/test/tcrl.com:1.1 opensa/openssl/test/tcrl.com:1.2
--- opensa/openssl/test/tcrl.com:1.1    Tue Jan 25 23:00:59 2000
+++ opensa/openssl/test/tcrl.com        Thu Mar  2 21:12:06 2000
@@ -10,6 +10,9 @@
 $      if p1 .nes. "" then t = p1
 $
 $      write sys$output "testing CRL conversions"
+$      if f$search("fff.*") .nes "" then delete fff.*;*
+$      if f$search("ff.*") .nes "" then delete ff.*;*
+$      if f$search("f.*") .nes "" then delete f.*;*
 $      copy 't' fff.p
 $
 $      write sys$output "p -> d"
@@ -52,27 +55,27 @@
 $      'cmd' -in f.p -inform p -outform p -out ff.p3
 $      if $severity .ne. 1 then exit 3
 $
-$      difference/output=nl: fff.p f.p
+$      backup/compare fff.p f.p
 $      if $severity .ne. 1 then exit 3
-$      difference/output=nl: fff.p ff.p1
+$      backup/compare fff.p ff.p1
 $      if $severity .ne. 1 then exit 3
-$!     difference/output=nl: fff.p ff.p2
+$!     backup/compare fff.p ff.p2
 $!     if $severity .ne. 1 then exit 3
-$      difference/output=nl: fff.p ff.p3
+$      backup/compare fff.p ff.p3
 $      if $severity .ne. 1 then exit 3
 $
-$!     difference/output=nl: f.t ff.t1
+$!     backup/compare f.t ff.t1
 $!     if $severity .ne. 1 then exit 3
-$!     difference/output=nl: f.t ff.t2
+$!     backup/compare f.t ff.t2
 $!     if $severity .ne. 1 then exit 3
-$!     difference/output=nl: f.t ff.t3
+$!     backup/compare f.t ff.t3
 $!     if $severity .ne. 1 then exit 3
 $
-$      difference/output=nl: f.p ff.p1
+$      backup/compare f.p ff.p1
 $      if $severity .ne. 1 then exit 3
-$!     difference/output=nl: f.p ff.p2
+$!     backup/compare f.p ff.p2
 $!     if $severity .ne. 1 then exit 3
-$      difference/output=nl: f.p ff.p3
+$      backup/compare f.p ff.p3
 $      if $severity .ne. 1 then exit 3
 $
 $      delete f.*;*,ff.*;*,fff.*;*
Index: opensa/openssl/test/testca.com
diff -u opensa/openssl/test/testca.com:1.1 opensa/openssl/test/testca.com:1.2
--- opensa/openssl/test/testca.com:1.1  Tue Jan 25 23:00:59 2000
+++ opensa/openssl/test/testca.com      Thu Mar  2 21:12:06 2000
@@ -40,7 +40,9 @@
 $      set noon
 $      call deltree [.demoCA]*.*
 $      set file/prot=(S:RWED,O:RWED,G:RWED,W:RWED) demoCA.dir;*
-$      delete demoCA.dir;*,newcert.pem;*,newreq.pem;*
+$      delete demoCA.dir;*
+$      if f$search("newcert.pem") .nes. "" then delete newcert.pem;*
+$      if f$search("newcert.pem") .nes. "" then delete newreq.pem;*
 $      set on
 $!     #usage: CA -newcert|-newreq|-newca|-sign|-verify
 $
Index: opensa/openssl/test/testenc.com
diff -u opensa/openssl/test/testenc.com:1.1 opensa/openssl/test/testenc.com:1.2
--- opensa/openssl/test/testenc.com:1.1 Tue Jan 25 23:00:59 2000
+++ opensa/openssl/test/testenc.com     Thu Mar  2 21:12:06 2000
@@ -8,19 +8,23 @@
 $      test := p.txt
 $      cmd := mcr 'exe_dir'openssl
 $
+$      if f$search(test) .nes. "" then delete 'test';*
 $      copy 'testsrc' 'test'
 $
+$      if f$search(test+"-cipher") .nes. "" then delete 'test'-cipher;*
+$      if f$search(test+"-clear") .nes. "" then delete 'test'-clear;*
+$
 $      write sys$output "cat"
 $      'cmd' enc -in 'test' -out 'test'-cipher
 $      'cmd' enc -in 'test'-cipher -out 'test'-clear
-$      difference/output=nl: 'test' 'test'-clear
+$      backup/compare 'test' 'test'-clear
 $      if $severity .ne. 1 then exit 3
 $      delete 'test'-cipher;*,'test'-clear;*
 $
 $      write sys$output "base64"
 $      'cmd' enc -a -e -in 'test' -out 'test'-cipher
 $      'cmd' enc -a -d -in 'test'-cipher -out 'test'-clear
-$      difference/output=nl: 'test' 'test'-clear
+$      backup/compare 'test' 'test'-clear
 $      if $severity .ne. 1 then exit 3
 $      delete 'test'-cipher;*,'test'-clear;*
 $
@@ -30,16 +34,22 @@
 $ loop_cipher_commands:
 $      read/end=loop_cipher_commands_end f i
 $      write sys$output i
+$
+$      if f$search(test+"-"+i+"-cipher") .nes. "" then -
+               delete 'test'-'i'-cipher;*
+$      if f$search(test+"-"+i+"-clear") .nes. "" then -
+               delete 'test'-'i'-clear;*
+$
 $      'cmd' 'i' -bufsize 113 -e -k test -in 'test' -out 'test'-'i'-cipher
 $      'cmd' 'i' -bufsize 157 -d -k test -in 'test'-'i'-cipher -out 'test'-'i'-clear
-$      difference/output=nl: 'test' 'test'-'i'-clear
+$      backup/compare 'test' 'test'-'i'-clear
 $      if $severity .ne. 1 then exit 3
 $      delete 'test'-'i'-cipher;*,'test'-'i'-clear;*
 $
 $      write sys$output i," base64"
 $      'cmd' 'i' -bufsize 113 -a -e -k test -in 'test' -out 'test'-'i'-cipher
 $      'cmd' 'i' -bufsize 157 -a -d -k test -in 'test'-'i'-cipher -out 
'test'-'i'-clear
-$      difference/output=nl: 'test' 'test'-'i'-clear
+$      backup/compare 'test' 'test'-'i'-clear
 $      if $severity .ne. 1 then exit 3
 $      delete 'test'-'i'-cipher;*,'test'-'i'-clear;*
 $
Index: opensa/openssl/test/testgen
diff -u opensa/openssl/test/testgen:1.1 opensa/openssl/test/testgen:1.2
--- opensa/openssl/test/testgen:1.1     Tue Jan 25 23:00:59 2000
+++ opensa/openssl/test/testgen Thu Mar  2 21:12:06 2000
@@ -15,6 +15,8 @@
 echo "There should not be more that at most 80 per line"
 echo "This could take some time."
 
+echo "string to make the random number generator think it has entropy" >> ./.rnd
+
 ../apps/openssl req -config test.cnf -new -out testreq.pem
 if [ $? != 0 ]; then
 echo problems creating request
Index: opensa/openssl/test/testgen.com
diff -u opensa/openssl/test/testgen.com:1.1 opensa/openssl/test/testgen.com:1.2
--- opensa/openssl/test/testgen.com:1.1 Tue Jan 25 23:00:59 2000
+++ opensa/openssl/test/testgen.com     Thu Mar  2 21:12:06 2000
@@ -20,6 +20,11 @@
 $      write sys$output "There should not be more that at most 80 per line"
 $      write sys$output "This could take some time."
 $
+$      append/new nl: .rnd
+$      open/append random_file .rnd
+$      write random_file "string to make the random number generator think it has 
+entropy"
+$      close random_file
+$
 $      mcr 'exe_dir'openssl req -config test.cnf -new -out testreq.pem
 $      if $severity .ne. 1
 $      then
Index: opensa/openssl/test/tests.com
diff -u opensa/openssl/test/tests.com:1.1 opensa/openssl/test/tests.com:1.2
--- opensa/openssl/test/tests.com:1.1   Tue Jan 25 23:00:59 2000
+++ opensa/openssl/test/tests.com       Thu Mar  2 21:12:06 2000
@@ -20,9 +20,9 @@
 $      else
 $          tests := -
        test_des,test_idea,test_sha,test_md5,test_hmac,test_md2,test_mdc2,-
-       test_rc2,test_rc4,test_rc5,test_bf,test_cast,-
+       test_rmd,test_rc2,test_rc4,test_rc5,test_bf,test_cast,-
        test_rand,test_bn,test_enc,test_x509,test_rsa,test_crl,test_sid,-
-       test_reqgen,test_req,test_pkcs7,test_verify,test_dh,test_dsa,-
+       test_gen,test_req,test_pkcs7,test_verify,test_dh,test_dsa,-
        test_ss,test_ssl,test_ca
 $      endif
 $      tests = f$edit(tests,"COLLAPSE")
@@ -48,7 +48,7 @@
 $      DSATEST :=      dsatest
 $      METHTEST :=     methtest
 $      SSLTEST :=      ssltest
-$      RSATEST :=      rsa_oaep_test
+$      RSATEST :=      rsa_test
 $
 $      tests_i = 0
 $ loop_tests:
@@ -151,9 +151,7 @@
 $      create/fdl=bntest-vms.fdl bntest-vms.sh
 $      open/append foo bntest-vms.sh
 $      type/output=foo: sys$input:
-<< __FOO__ bc | awk '{ \
-if ($$0 != "0") {print "error"; exit(1); } \
-if (((NR+1)%64) == 0) print NR+1," tests done"; }'
+<< __FOO__ bc | perl -e 'while (<STDIN>) {if (/^test (.*)/) {print STDERR "\nverify 
+$1";} elsif (!/^0$/) {die "\nFailed! bc: $_";} print STDERR "."; $i++;} print STDERR 
+"\n$i tests passed\n"'
 $      define/user sys$output bntest-vms.tmp
 $      mcr 'texe_dir''bntest'
 $      copy bntest-vms.tmp foo:
@@ -173,14 +171,14 @@
 $      @tverify.com
 $      goto loop_tests
 $ test_dh:
-$      write sys$output "Generate as set of DH parameters"
+$      write sys$output "Generate a set of DH parameters"
 $      mcr 'texe_dir''dhtest'
 $      goto loop_tests
 $ test_dsa:
-$      write sys$output "Generate as set of DSA parameters"
+$      write sys$output "Generate a set of DSA parameters"
 $      mcr 'texe_dir''dsatest'
 $      goto loop_tests
-$ test_reqgen:
+$ test_gen:
 $      write sys$output "Generate and verify a certificate request"
 $      @testgen.com
 $      goto loop_tests
Index: opensa/openssl/test/testssl
diff -u opensa/openssl/test/testssl:1.1 opensa/openssl/test/testssl:1.2
--- opensa/openssl/test/testssl:1.1     Tue Jan 25 23:00:59 2000
+++ opensa/openssl/test/testssl Thu Mar  2 21:12:06 2000
@@ -63,6 +63,12 @@
 echo test sslv2/sslv3 via BIO pair
 ./ssltest || exit 1
 
+echo test sslv2/sslv3 w/o DHE via BIO pair
+./ssltest -bio_pair -no_dhe || exit 1
+
+echo test sslv2/sslv3 with 1024bit DHE
+./ssltest -bio_pair -dhe1024 -v || exit 1
+
 echo test sslv2/sslv3 with server authentication
 ./ssltest -bio_pair -server_auth -CApath ../certs || exit 1
 
Index: opensa/openssl/test/testssl.com
diff -u opensa/openssl/test/testssl.com:1.1 opensa/openssl/test/testssl.com:1.2
--- opensa/openssl/test/testssl.com:1.1 Tue Jan 25 23:00:59 2000
+++ opensa/openssl/test/testssl.com     Thu Mar  2 21:12:06 2000
@@ -58,6 +58,10 @@
 $      mcr 'exe_dir'ssltest -bio_pair -ssl2 
 $      if $severity .ne. 1 then goto exit3
 $
+$      write sys$output "test sslv2/sslv3 with 1024 bit DHE via BIO pair"
+$      mcr 'exe_dir'ssltest -bio_pair -dhe1024 -v
+$      if $severity .ne. 1 then goto exit3
+$
 $      write sys$output "test sslv2 with server authentication via BIO pair"
 $      mcr 'exe_dir'ssltest -bio_pair -ssl2 -server_auth "-CAfile" certs.tmp 
 $      if $severity .ne. 1 then goto exit3
@@ -88,6 +92,10 @@
 $
 $      write sys$output "test sslv2/sslv3 via BIO pair"
 $      mcr 'exe_dir'ssltest 
+$      if $severity .ne. 1 then goto exit3
+$
+$      write sys$output "test sslv2/sslv3 w/o DHE via BIO pair"
+$      mcr 'exe_dir'ssltest -bio_pair -no_dhe
 $      if $severity .ne. 1 then goto exit3
 $
 $      write sys$output "test sslv2/sslv3 with server authentication"
Index: opensa/openssl/test/tpkcs7.com
diff -u opensa/openssl/test/tpkcs7.com:1.1 opensa/openssl/test/tpkcs7.com:1.2
--- opensa/openssl/test/tpkcs7.com:1.1  Tue Jan 25 23:00:59 2000
+++ opensa/openssl/test/tpkcs7.com      Thu Mar  2 21:12:06 2000
@@ -10,6 +10,9 @@
 $      if p1 .nes. "" then t = p1
 $
 $      write sys$output "testing PKCS7 conversions"
+$      if f$search("fff.*") .nes "" then delete fff.*;*
+$      if f$search("ff.*") .nes "" then delete ff.*;*
+$      if f$search("f.*") .nes "" then delete f.*;*
 $      copy 't' fff.p
 $
 $      write sys$output "p -> d"
@@ -34,16 +37,16 @@
 $      'cmd' -in f.p -inform p -outform p -out ff.p3
 $      if $severity .ne. 1 then exit 3
 $
-$      difference/output=nl: fff.p f.p
+$      backup/compare fff.p f.p
 $      if $severity .ne. 1 then exit 3
-$      difference/output=nl: fff.p ff.p1
+$      backup/compare fff.p ff.p1
 $      if $severity .ne. 1 then exit 3
-$      difference/output=nl: fff.p ff.p3
+$      backup/compare fff.p ff.p3
 $      if $severity .ne. 1 then exit 3
 $
-$      difference/output=nl: f.p ff.p1
+$      backup/compare f.p ff.p1
 $      if $severity .ne. 1 then exit 3
-$      difference/output=nl: f.p ff.p3
+$      backup/compare f.p ff.p3
 $      if $severity .ne. 1 then exit 3
 $
 $      delete f.*;*,ff.*;*,fff.*;*
Index: opensa/openssl/test/tpkcs7d.com
diff -u opensa/openssl/test/tpkcs7d.com:1.1 opensa/openssl/test/tpkcs7d.com:1.2
--- opensa/openssl/test/tpkcs7d.com:1.1 Tue Jan 25 23:00:59 2000
+++ opensa/openssl/test/tpkcs7d.com     Thu Mar  2 21:12:06 2000
@@ -10,6 +10,9 @@
 $      if p1 .nes. "" then t = p1
 $
 $      write sys$output "testing PKCS7 conversions (2)"
+$      if f$search("fff.*") .nes "" then delete fff.*;*
+$      if f$search("ff.*") .nes "" then delete ff.*;*
+$      if f$search("f.*") .nes "" then delete f.*;*
 $      copy 't' fff.p
 $
 $      write sys$output "p -> d"
@@ -34,9 +37,9 @@
 $      'cmd' -in f.p -inform p -outform p -out ff.p3
 $      if $severity .ne. 1 then exit 3
 $
-$      difference/output=nl: f.p ff.p1
+$      backup/compare f.p ff.p1
 $      if $severity .ne. 1 then exit 3
-$      difference/output=nl: f.p ff.p3
+$      backup/compare f.p ff.p3
 $      if $severity .ne. 1 then exit 3
 $
 $      delete f.*;*,ff.*;*,fff.*;*
Index: opensa/openssl/test/treq.com
diff -u opensa/openssl/test/treq.com:1.1 opensa/openssl/test/treq.com:1.2
--- opensa/openssl/test/treq.com:1.1    Tue Jan 25 23:00:59 2000
+++ opensa/openssl/test/treq.com        Thu Mar  2 21:12:06 2000
@@ -10,6 +10,9 @@
 $      if p1 .nes. "" then t = p1
 $
 $      write sys$output "testing req conversions"
+$      if f$search("fff.*") .nes "" then delete fff.*;*
+$      if f$search("ff.*") .nes "" then delete ff.*;*
+$      if f$search("f.*") .nes "" then delete f.*;*
 $      copy 't' fff.p
 $
 $      write sys$output "p -> d"
@@ -52,27 +55,27 @@
 $      'cmd' -in f.p -inform p -outform p -out ff.p3
 $      if $severity .ne. 1 then exit 3
 $
-$      difference/output=nl: fff.p f.p
+$      backup/compare fff.p f.p
 $      if $severity .ne. 1 then exit 3
-$      difference/output=nl: fff.p ff.p1
+$      backup/compare fff.p ff.p1
 $      if $severity .ne. 1 then exit 3
-$!     difference/output=nl: fff.p ff.p2
+$!     backup/compare fff.p ff.p2
 $!     if $severity .ne. 1 then exit 3
-$      difference/output=nl: fff.p ff.p3
+$      backup/compare fff.p ff.p3
 $      if $severity .ne. 1 then exit 3
 $
-$!     difference/output=nl: f.t ff.t1
+$!     backup/compare f.t ff.t1
 $!     if $severity .ne. 1 then exit 3
-$!     difference/output=nl: f.t ff.t2
+$!     backup/compare f.t ff.t2
 $!     if $severity .ne. 1 then exit 3
-$!     difference/output=nl: f.t ff.t3
+$!     backup/compare f.t ff.t3
 $!     if $severity .ne. 1 then exit 3
 $
-$      difference/output=nl: f.p ff.p1
+$      backup/compare f.p ff.p1
 $      if $severity .ne. 1 then exit 3
-$!     difference/output=nl: f.p ff.p2
+$!     backup/compare f.p ff.p2
 $!     if $severity .ne. 1 then exit 3
-$      difference/output=nl: f.p ff.p3
+$      backup/compare f.p ff.p3
 $      if $severity .ne. 1 then exit 3
 $
 $      delete f.*;*,ff.*;*,fff.*;*
Index: opensa/openssl/test/trsa.com
diff -u opensa/openssl/test/trsa.com:1.1 opensa/openssl/test/trsa.com:1.2
--- opensa/openssl/test/trsa.com:1.1    Tue Jan 25 23:00:59 2000
+++ opensa/openssl/test/trsa.com        Thu Mar  2 21:12:06 2000
@@ -10,6 +10,9 @@
 $      if p1 .nes. "" then t = p1
 $
 $      write sys$output "testing RSA conversions"
+$      if f$search("fff.*") .nes "" then delete fff.*;*
+$      if f$search("ff.*") .nes "" then delete ff.*;*
+$      if f$search("f.*") .nes "" then delete f.*;*
 $      copy 't' fff.p
 $
 $      write sys$output "p -> d"
@@ -52,27 +55,27 @@
 $      'cmd' -in f.p -inform p -outform p -out ff.p3
 $      if $severity .ne. 1 then exit 3
 $
-$      difference/output=nl: fff.p f.p
+$      backup/compare fff.p f.p
 $      if $severity .ne. 1 then exit 3
-$      difference/output=nl: fff.p ff.p1
+$      backup/compare fff.p ff.p1
 $      if $severity .ne. 1 then exit 3
-$!     difference/output=nl: fff.p ff.p2
+$!     backup/compare fff.p ff.p2
 $!     if $severity .ne. 1 then exit 3
-$      difference/output=nl: fff.p ff.p3
+$      backup/compare fff.p ff.p3
 $      if $severity .ne. 1 then exit 3
 $
-$!     difference/output=nl: f.t ff.t1
+$!     backup/compare f.t ff.t1
 $!     if $severity .ne. 1 then exit 3
-$!     difference/output=nl: f.t ff.t2
+$!     backup/compare f.t ff.t2
 $!     if $severity .ne. 1 then exit 3
-$!     difference/output=nl: f.t ff.t3
+$!     backup/compare f.t ff.t3
 $!     if $severity .ne. 1 then exit 3
 $
-$      difference/output=nl: f.p ff.p1
+$      backup/compare f.p ff.p1
 $      if $severity .ne. 1 then exit 3
-$!     difference/output=nl: f.p ff.p2
+$!     backup/compare f.p ff.p2
 $!     if $severity .ne. 1 then exit 3
-$      difference/output=nl: f.p ff.p3
+$      backup/compare f.p ff.p3
 $      if $severity .ne. 1 then exit 3
 $
 $      delete f.*;*,ff.*;*,fff.*;*
Index: opensa/openssl/test/tsid.com
diff -u opensa/openssl/test/tsid.com:1.1 opensa/openssl/test/tsid.com:1.2
--- opensa/openssl/test/tsid.com:1.1    Tue Jan 25 23:00:59 2000
+++ opensa/openssl/test/tsid.com        Thu Mar  2 21:12:06 2000
@@ -10,6 +10,9 @@
 $      if p1 .nes. "" then t = p1
 $
 $      write sys$output "testing session-id conversions"
+$      if f$search("fff.*") .nes "" then delete fff.*;*
+$      if f$search("ff.*") .nes "" then delete ff.*;*
+$      if f$search("f.*") .nes "" then delete f.*;*
 $      copy 't' fff.p
 $
 $      write sys$output "p -> d"
@@ -52,27 +55,27 @@
 $      'cmd' -in f.p -inform p -outform p -out ff.p3
 $      if $severity .ne. 1 then exit 3
 $
-$      difference/output=nl: fff.p f.p
+$      backup/compare fff.p f.p
 $      if $severity .ne. 1 then exit 3
-$      difference/output=nl: fff.p ff.p1
+$      backup/compare fff.p ff.p1
 $      if $severity .ne. 1 then exit 3
-$!     difference/output=nl: fff.p ff.p2
+$!     backup/compare fff.p ff.p2
 $!     if $severity .ne. 1 then exit 3
-$      difference/output=nl: fff.p ff.p3
+$      backup/compare fff.p ff.p3
 $      if $severity .ne. 1 then exit 3
 $
-$!     difference/output=nl: f.t ff.t1
+$!     backup/compare f.t ff.t1
 $!     if $severity .ne. 1 then exit 3
-$!     difference/output=nl: f.t ff.t2
+$!     backup/compare f.t ff.t2
 $!     if $severity .ne. 1 then exit 3
-$!     difference/output=nl: f.t ff.t3
+$!     backup/compare f.t ff.t3
 $!     if $severity .ne. 1 then exit 3
 $
-$      difference/output=nl: f.p ff.p1
+$      backup/compare f.p ff.p1
 $      if $severity .ne. 1 then exit 3
-$!     difference/output=nl: f.p ff.p2
+$!     backup/compare f.p ff.p2
 $!     if $severity .ne. 1 then exit 3
-$      difference/output=nl: f.p ff.p3
+$      backup/compare f.p ff.p3
 $      if $severity .ne. 1 then exit 3
 $
 $      delete f.*;*,ff.*;*,fff.*;*
Index: opensa/openssl/test/tx509.com
diff -u opensa/openssl/test/tx509.com:1.1 opensa/openssl/test/tx509.com:1.2
--- opensa/openssl/test/tx509.com:1.1   Tue Jan 25 23:00:59 2000
+++ opensa/openssl/test/tx509.com       Thu Mar  2 21:12:06 2000
@@ -10,6 +10,9 @@
 $      if p1 .nes. "" then t = p1
 $
 $      write sys$output "testing X509 conversions"
+$      if f$search("fff.*") .nes "" then delete fff.*;*
+$      if f$search("ff.*") .nes "" then delete ff.*;*
+$      if f$search("f.*") .nes "" then delete f.*;*
 $      copy 't' fff.p
 $
 $      write sys$output "p -> d"
@@ -52,27 +55,27 @@
 $      'cmd' -in f.p -inform p -outform p -out ff.p3
 $      if $severity .ne. 1 then exit 3
 $
-$      difference/output=nl: fff.p f.p
+$      backup/compare fff.p f.p
 $      if $severity .ne. 1 then exit 3
-$      difference/output=nl: fff.p ff.p1
+$      backup/compare fff.p ff.p1
 $      if $severity .ne. 1 then exit 3
-$      difference/output=nl: fff.p ff.p2
+$      backup/compare fff.p ff.p2
 $      if $severity .ne. 1 then exit 3
-$      difference/output=nl: fff.p ff.p3
+$      backup/compare fff.p ff.p3
 $      if $severity .ne. 1 then exit 3
 $
-$      difference/output=nl: f.n ff.n1
+$      backup/compare f.n ff.n1
 $      if $severity .ne. 1 then exit 3
-$      difference/output=nl: f.n ff.n2
+$      backup/compare f.n ff.n2
 $      if $severity .ne. 1 then exit 3
-$      difference/output=nl: f.n ff.n3
+$      backup/compare f.n ff.n3
 $      if $severity .ne. 1 then exit 3
 $
-$      difference/output=nl: f.p ff.p1
+$      backup/compare f.p ff.p1
 $      if $severity .ne. 1 then exit 3
-$      difference/output=nl: f.p ff.p2
+$      backup/compare f.p ff.p2
 $      if $severity .ne. 1 then exit 3
-$      difference/output=nl: f.p ff.p3
+$      backup/compare f.p ff.p3
 $      if $severity .ne. 1 then exit 3
 $
 $      delete f.*;*,ff.*;*,fff.*;*
Index: opensa/openssl/util/domd
diff -u opensa/openssl/util/domd:1.1 opensa/openssl/util/domd:1.2
--- opensa/openssl/util/domd:1.1        Tue Jan 25 22:58:35 2000
+++ opensa/openssl/util/domd    Thu Mar  2 21:12:06 2000
@@ -7,5 +7,5 @@
 
 cp Makefile.ssl Makefile.save
 makedepend -f Makefile.ssl $@
-$TOP/util/clean-depend.pl < Makefile.ssl > Makefile.new
+perl $TOP/util/clean-depend.pl < Makefile.ssl > Makefile.new
 mv Makefile.new Makefile.ssl
Index: opensa/openssl/util/libeay.num
diff -u opensa/openssl/util/libeay.num:1.1 opensa/openssl/util/libeay.num:1.2
--- opensa/openssl/util/libeay.num:1.1  Tue Jan 25 22:58:35 2000
+++ opensa/openssl/util/libeay.num      Thu Mar  2 21:12:06 2000
@@ -499,9 +499,9 @@
 SHA_Final                              505
 SHA_Init                               506
 SHA_Update                             507
-SSLeay_add_all_algorithms              508
-SSLeay_add_all_ciphers                 509
-SSLeay_add_all_digests                 510
+OpenSSL_add_all_algorithms             508
+OpenSSL_add_all_ciphers                        509
+OpenSSL_add_all_digests                        510
 TXT_DB_create_index                    511
 TXT_DB_free                            512
 TXT_DB_get_by_index                    513
@@ -1304,13 +1304,12 @@
 d2i_SXNETID                             1330
 SXNETID_new                             1331
 SXNETID_free                            1332
-DSA_SIG_new                                                            1333
-DSA_SIG_free                                                   1334
-DSA_do_sign                                                            1335
-DSA_do_verify                                                  1336
-d2i_DSA_SIG                                                            1337
-i2d_DSA_SIG                                                            1338
-
+DSA_SIG_new                             1333
+DSA_SIG_free                            1334
+DSA_do_sign                             1335
+DSA_do_verify                           1336
+d2i_DSA_SIG                             1337
+i2d_DSA_SIG                             1338
 i2d_ASN1_VISIBLESTRING                  1339
 d2i_ASN1_VISIBLESTRING                  1340
 i2d_ASN1_UTF8STRING                     1341
@@ -1844,3 +1843,387 @@
 RSA_check_key                           1869
 OBJ_obj2txt                             1870
 DSA_dup_DH                              1871
+X509_REQ_get_extensions                 1872
+X509_REQ_set_extension_nids             1873
+BIO_nwrite                              1874
+X509_REQ_extension_nid                  1875
+BIO_nread                               1876
+X509_REQ_get_extension_nids              1877
+BIO_nwrite0                             1878
+X509_REQ_add_extensions_nid             1879
+BIO_nread0                              1880
+X509_REQ_add_extensions                 1881
+BIO_new_mem_buf                         1882
+DH_set_ex_data                          1883
+DH_set_method                           1884
+DSA_OpenSSL                             1885
+DH_get_ex_data                          1886
+DH_get_ex_new_index                     1887
+DSA_new_method                          1888
+DH_new_method                           1889
+DH_OpenSSL                              1890
+DSA_get_ex_new_index                    1891
+DH_get_default_method                   1892
+DSA_set_ex_data                         1893
+DH_set_default_method                   1894
+DSA_get_ex_data                         1895
+X509V3_EXT_REQ_add_conf                 1896
+NETSCAPE_SPKI_print                     1897
+NETSCAPE_SPKI_set_pubkey                1898
+NETSCAPE_SPKI_b64_encode                1899
+NETSCAPE_SPKI_get_pubkey                1900
+NETSCAPE_SPKI_b64_decode                1901
+UTF8_putc                               1902
+UTF8_getc                               1903
+RSA_null_method                         1904
+ASN1_tag2str                            1905
+BIO_ctrl_reset_read_request             1906
+DISPLAYTEXT_new                         1907
+ASN1_GENERALIZEDTIME_free               1908
+X509_REVOKED_get_ext_d2i                1909
+X509_set_ex_data                        1910
+X509_reject_set_bit_asc                 1911
+X509_NAME_add_entry_by_txt              1912
+sk_X509_TRUST_pop                       1913
+X509_NAME_add_entry_by_NID              1914
+X509_PURPOSE_get0                       1915
+sk_ACCESS_DESCRIPTION_shift             1916
+PEM_read_X509_AUX                       1917
+d2i_AUTHORITY_INFO_ACCESS               1918
+sk_X509_TRUST_set_cmp_func              1919
+sk_X509_TRUST_free                      1920
+PEM_write_PUBKEY                        1921
+sk_X509_TRUST_num                       1922
+sk_ACCESS_DESCRIPTION_delete            1923
+sk_ASN1_STRING_TABLE_value              1924
+ACCESS_DESCRIPTION_new                  1925
+X509_CERT_AUX_free                      1926
+d2i_ACCESS_DESCRIPTION                  1927
+X509_trust_clear                        1928
+sk_X509_PURPOSE_value                   1929
+sk_X509_PURPOSE_zero                    1930
+X509_TRUST_add                          1931
+ASN1_VISIBLESTRING_new                  1932
+X509_alias_set1                         1933
+ASN1_PRINTABLESTRING_free               1934
+EVP_PKEY_get1_DSA                       1935
+ASN1_BMPSTRING_new                      1936
+ASN1_mbstring_copy                      1937
+ASN1_UTF8STRING_new                     1938
+sk_ACCESS_DESCRIPTION_set               1939
+sk_X509_PURPOSE_pop                     1940
+DSA_get_default_method                  1941
+sk_X509_PURPOSE_push                    1942
+sk_X509_PURPOSE_delete                  1943
+sk_X509_PURPOSE_num                     1944
+i2d_ASN1_SET_OF_ACCESS_DESCRIPTION      1945
+ASN1_T61STRING_free                     1946
+sk_ACCESS_DESCRIPTION_free              1947
+sk_ASN1_STRING_TABLE_pop                1948
+DSA_set_method                          1949
+X509_get_ex_data                        1950
+ASN1_STRING_type                        1951
+X509_PURPOSE_get_by_sname               1952
+sk_X509_PURPOSE_find                    1953
+ASN1_TIME_free                          1954
+ASN1_OCTET_STRING_cmp                   1955
+sk_ACCESS_DESCRIPTION_value             1956
+ASN1_BIT_STRING_new                     1957
+X509_get_ext_d2i                        1958
+PEM_read_bio_X509_AUX                   1959
+ASN1_STRING_set_default_mask_asc        1960
+PEM_write_bio_RSA_PUBKEY                1961
+sk_ASN1_STRING_TABLE_num                1962
+ASN1_INTEGER_cmp                        1963
+d2i_RSA_PUBKEY_fp                       1964
+sk_ACCESS_DESCRIPTION_unshift           1965
+sk_ASN1_STRING_TABLE_delete_ptr         1966
+X509_trust_set_bit_asc                  1967
+PEM_write_bio_DSA_PUBKEY                1968
+X509_STORE_CTX_free                     1969
+EVP_PKEY_set1_DSA                       1970
+i2d_DSA_PUBKEY_fp                       1971
+X509_load_cert_crl_file                 1972
+ASN1_TIME_new                           1973
+i2d_RSA_PUBKEY                          1974
+sk_X509_TRUST_pop_free                  1975
+X509_STORE_CTX_purpose_inherit          1976
+PEM_read_RSA_PUBKEY                     1977
+sk_X509_TRUST_zero                      1978
+sk_ACCESS_DESCRIPTION_pop_free          1979
+d2i_X509_AUX                            1980
+i2d_DSA_PUBKEY                          1981
+X509_CERT_AUX_print                     1982
+sk_X509_PURPOSE_new_null                1983
+PEM_read_DSA_PUBKEY                     1984
+i2d_RSA_PUBKEY_bio                      1985
+ASN1_BIT_STRING_num_asc                 1986
+i2d_PUBKEY                              1987
+ASN1_UTCTIME_free                       1988
+DSA_set_default_method                  1989
+X509_PURPOSE_get_by_id                  1990
+sk_X509_TRUST_push                      1991
+sk_ASN1_STRING_TABLE_sort               1992
+sk_X509_PURPOSE_set_cmp_func            1993
+ACCESS_DESCRIPTION_free                 1994
+PEM_read_bio_PUBKEY                     1995
+ASN1_STRING_set_by_NID                  1996
+X509_PURPOSE_get_id                     1997
+DISPLAYTEXT_free                        1998
+OTHERNAME_new                           1999
+sk_X509_TRUST_find                      2000
+X509_CERT_AUX_new                       2001
+sk_ACCESS_DESCRIPTION_dup               2002
+sk_ASN1_STRING_TABLE_pop_free           2003
+sk_ASN1_STRING_TABLE_unshift            2004
+sk_X509_TRUST_shift                     2005
+sk_ACCESS_DESCRIPTION_zero              2006
+X509_TRUST_cleanup                      2007
+X509_NAME_add_entry_by_OBJ              2008
+X509_CRL_get_ext_d2i                    2009
+sk_X509_TRUST_set                       2010
+X509_PURPOSE_get0_name                  2011
+PEM_read_PUBKEY                         2012
+sk_ACCESS_DESCRIPTION_new               2013
+i2d_DSA_PUBKEY_bio                      2014
+i2d_OTHERNAME                           2015
+ASN1_OCTET_STRING_free                  2016
+ASN1_BIT_STRING_set_asc                 2017
+sk_ACCESS_DESCRIPTION_push              2018
+X509_get_ex_new_index                   2019
+ASN1_STRING_TABLE_cleanup               2020
+X509_TRUST_get_by_id                    2021
+X509_PURPOSE_get_trust                  2022
+ASN1_STRING_length                      2023
+d2i_ASN1_SET_OF_ACCESS_DESCRIPTION      2024
+ASN1_PRINTABLESTRING_new                2025
+X509V3_get_d2i                          2026
+ASN1_ENUMERATED_free                    2027
+i2d_X509_CERT_AUX                       2028
+sk_ACCESS_DESCRIPTION_find              2029
+X509_STORE_CTX_set_trust                2030
+sk_X509_PURPOSE_unshift                 2031
+ASN1_STRING_set_default_mask            2032
+X509_STORE_CTX_new                      2033
+EVP_PKEY_get1_RSA                       2034
+sk_X509_PURPOSE_set                     2035
+sk_ASN1_STRING_TABLE_insert             2036
+sk_X509_PURPOSE_sort                    2037
+DIRECTORYSTRING_free                    2038
+PEM_write_X509_AUX                      2039
+ASN1_OCTET_STRING_set                   2040
+d2i_DSA_PUBKEY_fp                       2041
+sk_ASN1_STRING_TABLE_free               2042
+sk_X509_TRUST_value                     2043
+d2i_RSA_PUBKEY                          2044
+sk_ASN1_STRING_TABLE_set                2045
+X509_TRUST_get0_name                    2046
+X509_TRUST_get0                         2047
+AUTHORITY_INFO_ACCESS_free              2048
+ASN1_IA5STRING_new                      2049
+d2i_DSA_PUBKEY                          2050
+X509_check_purpose                      2051
+ASN1_ENUMERATED_new                     2052
+d2i_RSA_PUBKEY_bio                      2053
+d2i_PUBKEY                              2054
+X509_TRUST_get_trust                    2055
+X509_TRUST_get_flags                    2056
+ASN1_BMPSTRING_free                     2057
+ASN1_T61STRING_new                      2058
+sk_X509_TRUST_unshift                   2059
+ASN1_UTCTIME_new                        2060
+sk_ACCESS_DESCRIPTION_pop               2061
+i2d_AUTHORITY_INFO_ACCESS               2062
+EVP_PKEY_set1_RSA                       2063
+X509_STORE_CTX_set_purpose              2064
+ASN1_IA5STRING_free                     2065
+PEM_write_bio_X509_AUX                  2066
+X509_PURPOSE_get_count                  2067
+CRYPTO_add_info                         2068
+sk_ACCESS_DESCRIPTION_num               2069
+sk_ASN1_STRING_TABLE_set_cmp_func       2070
+X509_NAME_ENTRY_create_by_txt           2071
+ASN1_STRING_get_default_mask            2072
+sk_X509_TRUST_dup                       2073
+X509_alias_get0                         2074
+ASN1_STRING_data                        2075
+sk_X509_TRUST_insert                    2076
+i2d_ACCESS_DESCRIPTION                  2077
+X509_trust_set_bit                      2078
+sk_X509_PURPOSE_delete_ptr              2079
+ASN1_BIT_STRING_free                    2080
+PEM_read_bio_RSA_PUBKEY                 2081
+X509_add1_reject_object                 2082
+X509_check_trust                        2083
+sk_X509_TRUST_new_null                  2084
+sk_ACCESS_DESCRIPTION_new_null          2085
+sk_ACCESS_DESCRIPTION_delete_ptr        2086
+sk_X509_TRUST_sort                      2087
+PEM_read_bio_DSA_PUBKEY                 2088
+sk_X509_TRUST_new                       2089
+X509_PURPOSE_add                        2090
+ASN1_STRING_TABLE_get                   2091
+ASN1_UTF8STRING_free                    2092
+d2i_DSA_PUBKEY_bio                      2093
+sk_ASN1_STRING_TABLE_delete             2094
+PEM_write_RSA_PUBKEY                    2095
+d2i_OTHERNAME                           2096
+sk_ACCESS_DESCRIPTION_insert            2097
+X509_reject_set_bit                     2098
+sk_X509_TRUST_delete_ptr                2099
+sk_X509_PURPOSE_pop_free                2100
+PEM_write_DSA_PUBKEY                    2101
+sk_X509_PURPOSE_free                    2102
+sk_X509_PURPOSE_dup                     2103
+sk_ASN1_STRING_TABLE_zero               2104
+X509_PURPOSE_get0_sname                 2105
+sk_ASN1_STRING_TABLE_shift              2106
+EVP_PKEY_set1_DH                        2107
+ASN1_OCTET_STRING_dup                   2108
+ASN1_BIT_STRING_set                     2109
+X509_TRUST_get_count                    2110
+ASN1_INTEGER_free                       2111
+OTHERNAME_free                          2112
+i2d_RSA_PUBKEY_fp                       2113
+ASN1_INTEGER_dup                        2114
+d2i_X509_CERT_AUX                       2115
+sk_ASN1_STRING_TABLE_new_null           2116
+PEM_write_bio_PUBKEY                    2117
+ASN1_VISIBLESTRING_free                 2118
+X509_PURPOSE_cleanup                    2119
+sk_ASN1_STRING_TABLE_push               2120
+sk_ASN1_STRING_TABLE_dup                2121
+sk_X509_PURPOSE_shift                   2122
+ASN1_mbstring_ncopy                     2123
+sk_X509_PURPOSE_new                     2124
+sk_X509_PURPOSE_insert                  2125
+ASN1_GENERALIZEDTIME_new                2126
+sk_ACCESS_DESCRIPTION_sort              2127
+EVP_PKEY_get1_DH                        2128
+sk_ACCESS_DESCRIPTION_set_cmp_func      2129
+ASN1_OCTET_STRING_new                   2130
+ASN1_INTEGER_new                        2131
+i2d_X509_AUX                            2132
+sk_ASN1_STRING_TABLE_find               2133
+ASN1_BIT_STRING_name_print              2134
+X509_cmp                                2135
+ASN1_STRING_length_set                  2136
+DIRECTORYSTRING_new                     2137
+sk_ASN1_STRING_TABLE_new                2138
+sk_X509_TRUST_delete                    2139
+X509_add1_trust_object                  2140
+PKCS12_newpass                          2141
+SMIME_write_PKCS7                       2142
+SMIME_read_PKCS7                        2143
+des_set_key_checked                     2144
+PKCS7_verify                            2145
+PKCS7_encrypt                           2146
+des_set_key_unchecked                   2147
+SMIME_crlf_copy                         2148
+i2d_ASN1_PRINTABLESTRING                2149
+PKCS7_get0_signers                      2150
+PKCS7_decrypt                           2151
+SMIME_text                              2152
+PKCS7_simple_smimecap                   2153
+PKCS7_get_smimecap                      2154
+PKCS7_sign                              2155
+PKCS7_add_attrib_smimecap               2156
+CRYPTO_dbg_set_options                  2157
+CRYPTO_remove_all_info                  2158
+CRYPTO_get_mem_debug_functions          2159
+CRYPTO_is_mem_check_on                  2160
+CRYPTO_set_mem_debug_functions          2161
+CRYPTO_pop_info                         2162
+CRYPTO_push_info_                       2163
+CRYPTO_set_mem_debug_options            2164
+PEM_write_PKCS8PrivateKey_nid           2165
+PEM_write_bio_PKCS8PrivateKey_nid       2166
+d2i_PKCS8PrivateKey_bio                 2167
+ASN1_NULL_free                          2168
+d2i_ASN1_NULL                           2169
+ASN1_NULL_new                           2170
+i2d_PKCS8PrivateKey_bio                 2171
+i2d_PKCS8PrivateKey_fp                  2172
+i2d_ASN1_NULL                           2173
+i2d_PKCS8PrivateKey_nid_fp              2174
+d2i_PKCS8PrivateKey_fp                  2175
+i2d_PKCS8PrivateKey_nid_bio             2176
+i2d_PKCS8PrivateKeyInfo_fp              2177
+i2d_PKCS8PrivateKeyInfo_bio             2178
+PEM_cb                                  2179
+i2d_PrivateKey_fp                       2180
+d2i_PrivateKey_bio                      2181
+d2i_PrivateKey_fp                       2182
+i2d_PrivateKey_bio                      2183
+X509_reject_clear                       2184
+X509_TRUST_set_default                  2185
+d2i_AutoPrivateKey                      2186
+X509_ATTRIBUTE_get0_type                2187
+X509_ATTRIBUTE_set1_data                2188
+X509at_get_attr                         2189
+X509at_get_attr_count                   2190
+X509_ATTRIBUTE_create_by_NID            2191
+X509_ATTRIBUTE_set1_object              2192
+X509_ATTRIBUTE_count                    2193
+X509_ATTRIBUTE_create_by_OBJ            2194
+X509_ATTRIBUTE_get0_object              2195
+X509at_get_attr_by_NID                  2196
+X509at_add1_attr                        2197
+X509_ATTRIBUTE_get0_data                2198
+X509at_delete_attr                      2199
+X509at_get_attr_by_OBJ                  2200
+RAND_add                                2201
+BIO_number_written                      2202
+BIO_number_read                         2203
+X509_STORE_CTX_get1_chain               2204
+ERR_load_RAND_strings                   2205
+RAND_pseudo_bytes                       2206
+X509_REQ_get_attr_by_NID                2207
+X509_REQ_get_attr                       2208
+X509_REQ_add1_attr_by_NID               2209
+X509_REQ_get_attr_by_OBJ                2210
+X509at_add1_attr_by_NID                 2211
+X509_REQ_add1_attr_by_OBJ               2212
+X509_REQ_get_attr_count                 2213
+X509_REQ_add1_attr                      2214
+X509_REQ_delete_attr                    2215
+X509at_add1_attr_by_OBJ                 2216
+X509_REQ_add1_attr_by_txt               2217
+X509_ATTRIBUTE_create_by_txt            2218
+X509at_add1_attr_by_txt                 2219
+sk_CRYPTO_EX_DATA_FUNCS_delete          2220
+sk_CRYPTO_EX_DATA_FUNCS_set             2221
+sk_CRYPTO_EX_DATA_FUNCS_unshift         2222
+sk_CRYPTO_EX_DATA_FUNCS_new_null        2223
+sk_CRYPTO_EX_DATA_FUNCS_set_cmp_func    2224
+sk_CRYPTO_EX_DATA_FUNCS_sort            2225
+sk_CRYPTO_EX_DATA_FUNCS_dup             2226
+sk_CRYPTO_EX_DATA_FUNCS_shift           2227
+sk_CRYPTO_EX_DATA_FUNCS_value           2228
+sk_CRYPTO_EX_DATA_FUNCS_pop             2229
+sk_CRYPTO_EX_DATA_FUNCS_push            2230
+sk_CRYPTO_EX_DATA_FUNCS_find            2231
+sk_CRYPTO_EX_DATA_FUNCS_new             2232
+sk_CRYPTO_EX_DATA_FUNCS_free            2233
+sk_CRYPTO_EX_DATA_FUNCS_delete_ptr      2234
+sk_CRYPTO_EX_DATA_FUNCS_num             2235
+sk_CRYPTO_EX_DATA_FUNCS_pop_free        2236
+sk_CRYPTO_EX_DATA_FUNCS_insert          2237
+sk_CRYPTO_EX_DATA_FUNCS_zero            2238
+BN_pseudo_rand                          2239
+BN_is_prime_fasttest                    2240
+BN_CTX_end                              2241
+BN_CTX_start                            2242
+BN_CTX_get                              2243
+EVP_PKEY2PKCS8_broken                   2244
+ASN1_STRING_TABLE_add                   2245
+CRYPTO_dbg_get_options                  2246
+AUTHORITY_INFO_ACCESS_new               2247
+CRYPTO_get_mem_debug_options            2248
+des_crypt                               2249
+PEM_write_bio_X509_REQ_NEW              2250
+PEM_write_X509_REQ_NEW                  2251
+BIO_callback_ctrl                       2252
+RAND_egd                                2253
+RAND_status                             2254
+bn_dump1                                2255
Index: opensa/openssl/util/mkdef.pl
diff -u opensa/openssl/util/mkdef.pl:1.1 opensa/openssl/util/mkdef.pl:1.2
--- opensa/openssl/util/mkdef.pl:1.1    Tue Jan 25 22:58:35 2000
+++ opensa/openssl/util/mkdef.pl        Thu Mar  2 21:12:06 2000
@@ -6,26 +6,34 @@
 # prototyped functions: it then prunes the output.
 #
 
-$crypto_num="util/libeay.num";
-$ssl_num=   "util/ssleay.num";
+my $crypto_num="util/libeay.num";
+my $ssl_num=   "util/ssleay.num";
 
 my $do_update = 0;
 my $do_crypto = 0;
 my $do_ssl = 0;
-$rsaref = 0;
+my $do_ctest = 0;
+my $rsaref = 0;
 
-$W32=1;
-$NT=0;
+my $W32=1;
+my $NT=0;
 # Set this to make typesafe STACK definitions appear in DEF
-$safe_stack_def = 1;
+my $safe_stack_def = 1;
 
-$options="";
+my $options="";
 open(IN,"<Makefile.ssl") || die "unable to open Makefile.ssl!\n";
 while(<IN>) {
     $options=$1 if (/^OPTIONS=(.*)$/);
 }
 close(IN);
 
+# The following ciphers may be excluded (by Configure). This means functions
+# defined with ifndef(NO_XXX) are not included in the .def file, and everything
+# in directory xxx is ignored.
+my $no_rc2; my $no_rc4; my $no_rc5; my $no_idea; my $no_des; my $no_bf;
+my $no_cast; my $no_md2; my $no_md5; my $no_sha; my $no_ripemd; my $no_mdc2;
+my $no_rsa; my $no_dsa; my $no_dh; my $no_hmac=0;
+
 foreach (@ARGV, split(/ /, $options))
        {
        $W32=1 if $_ eq "32";
@@ -39,6 +47,7 @@
        $do_crypto=1 if $_ eq "libeay";
        $do_crypto=1 if $_ eq "crypto";
        $do_update=1 if $_ eq "update";
+       $do_ctest=1 if $_ eq "ctest";
        $rsaref=1 if $_ eq "rsaref";
 
        if    (/^no-rc2$/)      { $no_rc2=1; }
@@ -59,6 +68,7 @@
        elsif (/^no-hmac$/)     { $no_hmac=1; }
        }
 
+
 if (!$do_ssl && !$do_crypto)
        {
        print STDERR "usage: $0 ( ssl | crypto ) [ 16 | 32 | NT ] [rsaref]\n";
@@ -70,9 +80,9 @@
 %crypto_list=&load_numbers($crypto_num);
 $max_crypto = $max_num;
 
-$ssl="ssl/ssl.h";
+my $ssl="ssl/ssl.h";
 
-$crypto ="crypto/crypto.h";
+my $crypto ="crypto/crypto.h";
 $crypto.=" crypto/des/des.h" unless $no_des;
 $crypto.=" crypto/idea/idea.h" unless $no_idea;
 $crypto.=" crypto/rc4/rc4.h" unless $no_rc4;
@@ -115,8 +125,8 @@
 $crypto.=" crypto/comp/comp.h";
 $crypto.=" crypto/tmdiff.h";
 
-@ssl_func = &do_defs("SSLEAY", $ssl);
-@crypto_func = &do_defs("LIBEAY", $crypto);
+my @ssl_func = &do_defs("SSLEAY", $ssl);
+my @crypto_func = &do_defs("LIBEAY", $crypto);
 
 
 if ($do_update) {
@@ -131,8 +141,27 @@
        open(OUT, ">>$crypto_num");
        &update_numbers(*OUT,"LIBEAY",*crypto_list,$max_crypto, @crypto_func);
        close OUT;
-}
+} 
+
+} elsif ($do_ctest) {
 
+       print <<"EOF";
+
+/* Test file to check all DEF file symbols are present by trying
+ * to link to all of them. This is *not* intended to be run!
+ */
+
+int main()
+{
+EOF
+       &print_test_file(*STDOUT,"SSLEAY",*ssl_list,@ssl_func)
+               if $do_ssl == 1;
+
+       &print_test_file(*STDOUT,"LIBEAY",*crypto_list,@crypto_func)
+               if $do_crypto == 1;
+
+       print "}\n";
+
 } else {
 
        &print_def_file(*STDOUT,"SSLEAY",*ssl_list,@ssl_func)
@@ -147,14 +176,15 @@
 sub do_defs
 {
        my($name,$files)=@_;
+       my $file;
        my @ret;
        my %funcs;
+       my $cpp;
 
        foreach $file (split(/\s+/,$files))
                {
                open(IN,"<$file") || die "unable to open $file:$!\n";
-
-               my $line = "", $def= "";
+               my $line = "", my $def= "";
                my %tag = (
                        FreeBSD         => 0,
                        NOPROTO         => 0,
@@ -164,6 +194,22 @@
                        NO_FP_API       => 0,
                        CONST_STRICT    => 0,
                        TRUE            => 1,
+                       NO_RC2          => 0,
+                       NO_RC4          => 0,
+                       NO_RC5          => 0,
+                       NO_IDEA         => 0,
+                       NO_DES          => 0,
+                       NO_BF           => 0,
+                       NO_CAST         => 0,
+                       NO_MD2          => 0,
+                       NO_MD5          => 0,
+                       NO_SHA          => 0,
+                       NO_RIPEMD       => 0,
+                       NO_MDC2         => 0,
+                       NO_RSA          => 0,
+                       NO_DSA          => 0,
+                       NO_DH           => 0,
+                       NO_HMAC         => 0,
                );
                while(<IN>) {
                        last if (/BEGIN ERROR CODES/);
@@ -214,6 +260,11 @@
                                push(@tag,"TRUE");
                                $tag{"TRUE"}=1;
                                next;
+                       } elsif (/^\#\s*if\s+0/) {
+                               # Dummy tag
+                               push(@tag,"TRUE");
+                               $tag{"TRUE"}=-1;
+                               next;
                        } elsif (/^\#/) {
                                next;
                        }
@@ -250,7 +301,20 @@
                                }
                                $funcs{"PEM_read_bio_${1}"} = 1;
                                $funcs{"PEM_write_bio_${1}"} = 1;
-                       } elsif ( 
+                       } elsif (/^DECLARE_PEM_write\s*\(\s*(\w*)\s*,/ ||
+                                    /^DECLARE_PEM_write_cb\s*\(\s*(\w*)\s*,/ ) {
+                               if($W32) {
+                                       $funcs{"PEM_write_${1}"} = 1;
+                               }
+                               $funcs{"PEM_write_bio_${1}"} = 1;
+                       } elsif (/^DECLARE_PEM_read\s*\(\s*(\w*)\s*,/ ||
+                                    /^DECLARE_PEM_read_cb\s*\(\s*(\w*)\s*,/ ) {
+                               if($W32) {
+                                       $funcs{"PEM_read_${1}"} = 1;
+                               }
+                               $funcs{"PEM_read_bio_${1}"} = 1;
+                       } elsif (
+                               ($tag{'TRUE'} != -1) &&
                                ($tag{'FreeBSD'} != 1) &&
                                ($tag{'CONST_STRICT'} != 1) &&
                                (($W32 && ($tag{'WIN16'} != 1)) ||
@@ -260,7 +324,23 @@
                                ((!$W32 && $tag{'_WINDLL'} != -1) ||
                                 ($W32 && $tag{'_WINDLL'} != 1)) &&
                                ((($tag{'NO_FP_API'} != 1) && $W32) ||
-                                (($tag{'NO_FP_API'} != -1) && !$W32)))
+                                (($tag{'NO_FP_API'} != -1) && !$W32)) &&
+                               ($tag{'NO_RC2'} == 0  || !$no_rc2) &&
+                               ($tag{'NO_RC4'} == 0  || !$no_rc4) &&
+                               ($tag{'NO_RC5'} == 0  || !$no_rc5) &&
+                               ($tag{'NO_IDEA'} == 0 || !$no_idea) &&
+                               ($tag{'NO_DES'} == 0  || !$no_des) &&
+                               ($tag{'NO_BF'} == 0   || !$no_bf) &&
+                               ($tag{'NO_CAST'} == 0 || !$no_cast) &&
+                               ($tag{'NO_MD2'} == 0  || !$no_md2) &&
+                               ($tag{'NO_MD5'} == 0  || !$no_md5) &&
+                               ($tag{'NO_SHA'} == 0  || !$no_sha) &&
+                               ($tag{'NO_RIPEMD'} == 0 || !$no_ripemd) &&
+                               ($tag{'NO_MDC2'} == 0 || !$no_mdc2) &&
+                               ($tag{'NO_RSA'} == 0  || !$no_rsa) &&
+                               ($tag{'NO_DSA'} == 0  || !$no_dsa) &&
+                               ($tag{'NO_DH'} == 0   || !$no_dh) &&
+                               ($tag{'NO_HMAC'} == 0 || !$no_hmac))
                                {
                                        if (/{|\/\*/) { # }
                                                $line = $_;
@@ -309,8 +389,8 @@
        # Prune the returned functions
 
         delete $funcs{"SSL_add_dir_cert_subjects_to_stack"};
-        delete $funcs{"des_crypt"};
         delete $funcs{"RSA_PKCS1_RSAref"} unless $rsaref;
+        delete $funcs{"bn_dump1"};
 
        if($W32) {
                delete $funcs{"BIO_s_file_internal"};
@@ -334,10 +414,31 @@
        return(@ret);
 }
 
+sub print_test_file
+{
+       (*OUT,my $name,*nums,my @functions)=@_;
+       my $n = 1; my @e; my @r;
+       my $func;
+
+       (@e)=grep(/^SSLeay/,@functions);
+       (@r)=grep(!/^SSLeay/,@functions);
+       @functions=((sort @e),(sort @r));
+
+       foreach $func (@functions) {
+               if (!defined($nums{$func})) {
+                       printf STDERR "$func does not have a number assigned\n"
+                                       if(!$do_update);
+               } else {
+                       $n=$nums{$func};
+                       print OUT "\t$func();\n";
+               }
+       }
+}
+
 sub print_def_file
 {
-       (*OUT,my $name,*nums,@functions)=@_;
-       my $n =1;
+       (*OUT,my $name,*nums,my @functions)=@_;
+       my $n = 1; my @e; my @r;
 
        if ($W32)
                { $name.="32"; }
Index: opensa/openssl/util/mkerr.pl
diff -u opensa/openssl/util/mkerr.pl:1.1 opensa/openssl/util/mkerr.pl:1.2
--- opensa/openssl/util/mkerr.pl:1.1    Tue Jan 25 22:58:35 2000
+++ opensa/openssl/util/mkerr.pl        Thu Mar  2 21:12:06 2000
@@ -450,7 +450,7 @@
 #ifdef ${lib}_LIB_NAME
                ${lib}_lib_name->error = ERR_PACK(${lib}_lib_error_code,0,0);
                ERR_load_strings(0,${lib}_lib_name);
-#endif;
+#endif
                }
        }
 
Index: opensa/openssl/util/ssleay.num
diff -u opensa/openssl/util/ssleay.num:1.1 opensa/openssl/util/ssleay.num:1.2
--- opensa/openssl/util/ssleay.num:1.1  Tue Jan 25 22:58:35 2000
+++ opensa/openssl/util/ssleay.num      Thu Mar  2 21:12:06 2000
@@ -215,3 +215,13 @@
 sk_SSL_COMP_sort                        233
 sk_SSL_CIPHER_sort                      234
 SSL_CTX_set_default_passwd_cb_userdata  235
+SSL_set_purpose                         236
+SSL_CTX_set_trust                       237
+SSL_CTX_set_purpose                     238
+SSL_set_trust                           239
+SSL_get_finished                        240
+SSL_get_peer_finished                   241
+SSL_get1_session                        242
+SSL_CTX_callback_ctrl                   243
+SSL_callback_ctrl                       244
+SSL_CTX_sessions                        245
Index: opensa/openssl/util/pl/bc-32.pl
diff -u opensa/openssl/util/pl/bc-32.pl:1.1 opensa/openssl/util/pl/bc-32.pl:1.2
--- opensa/openssl/util/pl/bc-32.pl:1.1 Tue Jan 25 22:58:47 2000
+++ opensa/openssl/util/pl/bc-32.pl     Thu Mar  2 21:12:06 2000
@@ -19,7 +19,7 @@
 $tmp_def="tmp32";
 $inc_def="inc32";
 #enable max error messages, disable most common warnings
-$cflags="-DWIN32_LEAN_AND_MEAN -j255 -w-aus -w-par -w-inl  -c -tWC -tWM -DWINDOWS 
-DWIN32 -DL_ENDIAN ";
+$cflags="-DWIN32_LEAN_AND_MEAN -q -w-aus -w-par -w-inl  -c -tWC -tWM -DWINDOWS 
+-DWIN32 -DL_ENDIAN ";
 if ($debug)
 {
     $cflags.="-Od -y -v -vi- -D_DEBUG";
Index: opensa/openssl/util/pl/mingw32.pl
diff -u opensa/openssl/util/pl/mingw32.pl:1.1 opensa/openssl/util/pl/mingw32.pl:1.2
--- opensa/openssl/util/pl/mingw32.pl:1.1       Tue Jan 25 22:58:47 2000
+++ opensa/openssl/util/pl/mingw32.pl   Thu Mar  2 21:12:06 2000
@@ -17,7 +17,7 @@
 
 $cc='gcc';
 if ($debug)
-       { $cflags="-g2 -ggdb"; }
+       { $cflags="-DL_ENDIAN -g2 -ggdb"; }
 else
        { $cflags="-DL_ENDIAN -fomit-frame-pointer -O3 -m486 -Wall"; }
 
Index: opensa/openssl/util/pl/vc-32.pl
diff -u opensa/openssl/util/pl/vc-32.pl:1.1 opensa/openssl/util/pl/vc-32.pl:1.2
--- opensa/openssl/util/pl/vc-32.pl:1.1 Tue Jan 25 22:58:47 2000
+++ opensa/openssl/util/pl/vc-32.pl     Thu Mar  2 21:12:06 2000
@@ -22,7 +22,7 @@
 
 if ($debug)
        {
-       $cflags=" /MDd /W3 /WX /Zi /Yd /Od /nologo -DWINDOWS -DWIN32 -D_DEBUG 
-DL_ENDIAN -DWIN32_LEAN_AND_MEAN -DDEBUG";
+       $cflags=" /MDd /W3 /WX /Zi /Yd /Od /nologo -DWIN32 -D_DEBUG -DL_ENDIAN 
+-DWIN32_LEAN_AND_MEAN -DDEBUG";
        $lflags.=" /debug";
        $mlflags.=' /debug';
        }
Index: opensa/openssl/vms/install.com
diff -u opensa/openssl/vms/install.com:1.1 opensa/openssl/vms/install.com:1.2
--- opensa/openssl/vms/install.com:1.1  Tue Jan 25 22:58:15 2000
+++ opensa/openssl/vms/install.com      Thu Mar  2 21:12:07 2000
@@ -37,6 +37,7 @@
 $      EXHEADER := vms_idhacks.h
 $
 $      COPY 'EXHEADER' WRK_SSLINCLUDE: /LOG
+$      SET FILE/PROT=WORLD:RE WRK_SSLINCLUDE:'EXHEADER'
 $
 $      OPEN/WRITE SF WRK_SSLROOT:[VMS]OPENSSL_STARTUP.COM
 $      WRITE SYS$OUTPUT "%OPEN-I-CREATED,  
",F$SEARCH("WRK_SSLROOT:[VMS]OPENSSL_STARTUP.COM")," created."
@@ -65,7 +66,9 @@
 $      WRITE SF "$"
 $      WRITE SF "$     EXIT"
 $      CLOSE SF
+$      SET FILE/PROT=WORLD:RE WRK_SSLROOT:[VMS]OPENSSL_STARTUP.COM
 $
 $      COPY OPENSSL_UTILS.COM WRK_SSLROOT:[VMS]/LOG
+$      SET FILE/PROT=WORLD:RE WRK_SSLROOT:[VMS]OPENSSL_UTILS.COM
 $
 $      EXIT
Index: opensa/openssl/vms/vms_idhacks.h
diff -u opensa/openssl/vms/vms_idhacks.h:1.1 opensa/openssl/vms/vms_idhacks.h:1.2
--- opensa/openssl/vms/vms_idhacks.h:1.1        Tue Jan 25 22:58:15 2000
+++ opensa/openssl/vms/vms_idhacks.h    Thu Mar  2 21:12:07 2000
@@ -57,56 +57,125 @@
 
 #ifdef VMS
 
+/* Hack a long name in crypto/asn1/a_mbstr.c */
+#define ASN1_STRING_set_default_mask_asc ASN1_STRING_set_def_mask_asc
 /* Hack the names created with DECLARE_STACK_OF(PKCS7_SIGNER_INFO) */
-#define sk_PKCS7_SIGNER_INFO_new       sk_PKCS7_SIGINF_new
-#define sk_PKCS7_SIGNER_INFO_new_null  sk_PKCS7_SIGINF_new_null
-#define sk_PKCS7_SIGNER_INFO_free      sk_PKCS7_SIGINF_free
-#define sk_PKCS7_SIGNER_INFO_num       sk_PKCS7_SIGINF_num
-#define sk_PKCS7_SIGNER_INFO_value     sk_PKCS7_SIGINF_value
-#define sk_PKCS7_SIGNER_INFO_set       sk_PKCS7_SIGINF_set
-#define sk_PKCS7_SIGNER_INFO_zero      sk_PKCS7_SIGINF_zero
-#define sk_PKCS7_SIGNER_INFO_push      sk_PKCS7_SIGINF_push
-#define sk_PKCS7_SIGNER_INFO_unshift   sk_PKCS7_SIGINF_unshift
-#define sk_PKCS7_SIGNER_INFO_find      sk_PKCS7_SIGINF_find
-#define sk_PKCS7_SIGNER_INFO_delete    sk_PKCS7_SIGINF_delete
-#define sk_PKCS7_SIGNER_INFO_delete_ptr        sk_PKCS7_SIGINF_delete_ptr
-#define sk_PKCS7_SIGNER_INFO_insert    sk_PKCS7_SIGINF_insert
+#define sk_PKCS7_SIGNER_INFO_new               sk_PKCS7_SIGINF_new
+#define sk_PKCS7_SIGNER_INFO_new_null          sk_PKCS7_SIGINF_new_null
+#define sk_PKCS7_SIGNER_INFO_free              sk_PKCS7_SIGINF_free
+#define sk_PKCS7_SIGNER_INFO_num               sk_PKCS7_SIGINF_num
+#define sk_PKCS7_SIGNER_INFO_value             sk_PKCS7_SIGINF_value
+#define sk_PKCS7_SIGNER_INFO_set               sk_PKCS7_SIGINF_set
+#define sk_PKCS7_SIGNER_INFO_zero              sk_PKCS7_SIGINF_zero
+#define sk_PKCS7_SIGNER_INFO_push              sk_PKCS7_SIGINF_push
+#define sk_PKCS7_SIGNER_INFO_unshift           sk_PKCS7_SIGINF_unshift
+#define sk_PKCS7_SIGNER_INFO_find              sk_PKCS7_SIGINF_find
+#define sk_PKCS7_SIGNER_INFO_delete            sk_PKCS7_SIGINF_delete
+#define sk_PKCS7_SIGNER_INFO_delete_ptr                sk_PKCS7_SIGINF_delete_ptr
+#define sk_PKCS7_SIGNER_INFO_insert            sk_PKCS7_SIGINF_insert
 #define sk_PKCS7_SIGNER_INFO_set_cmp_func      sk_PKCS7_SIGINF_set_cmp_func
-#define sk_PKCS7_SIGNER_INFO_dup       sk_PKCS7_SIGINF_dup
-#define sk_PKCS7_SIGNER_INFO_pop_free  sk_PKCS7_SIGINF_pop_free
-#define sk_PKCS7_SIGNER_INFO_shift     sk_PKCS7_SIGINF_shift
-#define sk_PKCS7_SIGNER_INFO_pop       sk_PKCS7_SIGINF_pop
-#define sk_PKCS7_SIGNER_INFO_sort      sk_PKCS7_SIGINF_sort
+#define sk_PKCS7_SIGNER_INFO_dup               sk_PKCS7_SIGINF_dup
+#define sk_PKCS7_SIGNER_INFO_pop_free          sk_PKCS7_SIGINF_pop_free
+#define sk_PKCS7_SIGNER_INFO_shift             sk_PKCS7_SIGINF_shift
+#define sk_PKCS7_SIGNER_INFO_pop               sk_PKCS7_SIGINF_pop
+#define sk_PKCS7_SIGNER_INFO_sort              sk_PKCS7_SIGINF_sort
 
 /* Hack the names created with DECLARE_STACK_OF(PKCS7_RECIP_INFO) */
-#define sk_PKCS7_RECIP_INFO_new                sk_PKCS7_RECINF_new
-#define sk_PKCS7_RECIP_INFO_new_null   sk_PKCS7_RECINF_new_null
-#define sk_PKCS7_RECIP_INFO_free       sk_PKCS7_RECINF_free
-#define sk_PKCS7_RECIP_INFO_num                sk_PKCS7_RECINF_num
-#define sk_PKCS7_RECIP_INFO_value      sk_PKCS7_RECINF_value
-#define sk_PKCS7_RECIP_INFO_set                sk_PKCS7_RECINF_set
-#define sk_PKCS7_RECIP_INFO_zero       sk_PKCS7_RECINF_zero
-#define sk_PKCS7_RECIP_INFO_push       sk_PKCS7_RECINF_push
-#define sk_PKCS7_RECIP_INFO_unshift    sk_PKCS7_RECINF_unshift
-#define sk_PKCS7_RECIP_INFO_find       sk_PKCS7_RECINF_find
-#define sk_PKCS7_RECIP_INFO_delete     sk_PKCS7_RECINF_delete
-#define sk_PKCS7_RECIP_INFO_delete_ptr sk_PKCS7_RECINF_delete_ptr
-#define sk_PKCS7_RECIP_INFO_insert     sk_PKCS7_RECINF_insert
+#define sk_PKCS7_RECIP_INFO_new                        sk_PKCS7_RECINF_new
+#define sk_PKCS7_RECIP_INFO_new_null           sk_PKCS7_RECINF_new_null
+#define sk_PKCS7_RECIP_INFO_free               sk_PKCS7_RECINF_free
+#define sk_PKCS7_RECIP_INFO_num                        sk_PKCS7_RECINF_num
+#define sk_PKCS7_RECIP_INFO_value              sk_PKCS7_RECINF_value
+#define sk_PKCS7_RECIP_INFO_set                        sk_PKCS7_RECINF_set
+#define sk_PKCS7_RECIP_INFO_zero               sk_PKCS7_RECINF_zero
+#define sk_PKCS7_RECIP_INFO_push               sk_PKCS7_RECINF_push
+#define sk_PKCS7_RECIP_INFO_unshift            sk_PKCS7_RECINF_unshift
+#define sk_PKCS7_RECIP_INFO_find               sk_PKCS7_RECINF_find
+#define sk_PKCS7_RECIP_INFO_delete             sk_PKCS7_RECINF_delete
+#define sk_PKCS7_RECIP_INFO_delete_ptr         sk_PKCS7_RECINF_delete_ptr
+#define sk_PKCS7_RECIP_INFO_insert             sk_PKCS7_RECINF_insert
 #define sk_PKCS7_RECIP_INFO_set_cmp_func       sk_PKCS7_RECINF_set_cmp_func
-#define sk_PKCS7_RECIP_INFO_dup                sk_PKCS7_RECINF_dup
-#define sk_PKCS7_RECIP_INFO_pop_free   sk_PKCS7_RECINF_pop_free
-#define sk_PKCS7_RECIP_INFO_shift      sk_PKCS7_RECINF_shift
-#define sk_PKCS7_RECIP_INFO_pop                sk_PKCS7_RECINF_pop
-#define sk_PKCS7_RECIP_INFO_sort       sk_PKCS7_RECINF_sort
+#define sk_PKCS7_RECIP_INFO_dup                        sk_PKCS7_RECINF_dup
+#define sk_PKCS7_RECIP_INFO_pop_free           sk_PKCS7_RECINF_pop_free
+#define sk_PKCS7_RECIP_INFO_shift              sk_PKCS7_RECINF_shift
+#define sk_PKCS7_RECIP_INFO_pop                        sk_PKCS7_RECINF_pop
+#define sk_PKCS7_RECIP_INFO_sort               sk_PKCS7_RECINF_sort
 
+/* Hack the names created with DECLARE_STACK_OF(ASN1_STRING_TABLE) */
+#define sk_ASN1_STRING_TABLE_new               sk_ASN1_STRTAB_new
+#define sk_ASN1_STRING_TABLE_new_null          sk_ASN1_STRTAB_new_null
+#define sk_ASN1_STRING_TABLE_free              sk_ASN1_STRTAB_free
+#define sk_ASN1_STRING_TABLE_num               sk_ASN1_STRTAB_num
+#define sk_ASN1_STRING_TABLE_value             sk_ASN1_STRTAB_value
+#define sk_ASN1_STRING_TABLE_set               sk_ASN1_STRTAB_set
+#define sk_ASN1_STRING_TABLE_zero              sk_ASN1_STRTAB_zero
+#define sk_ASN1_STRING_TABLE_push              sk_ASN1_STRTAB_push
+#define sk_ASN1_STRING_TABLE_unshift           sk_ASN1_STRTAB_unshift
+#define sk_ASN1_STRING_TABLE_find              sk_ASN1_STRTAB_find
+#define sk_ASN1_STRING_TABLE_delete            sk_ASN1_STRTAB_delete
+#define sk_ASN1_STRING_TABLE_delete_ptr                sk_ASN1_STRTAB_delete_ptr
+#define sk_ASN1_STRING_TABLE_insert            sk_ASN1_STRTAB_insert
+#define sk_ASN1_STRING_TABLE_set_cmp_func      sk_ASN1_STRTAB_set_cmp_func
+#define sk_ASN1_STRING_TABLE_dup               sk_ASN1_STRTAB_dup
+#define sk_ASN1_STRING_TABLE_pop_free          sk_ASN1_STRTAB_pop_free
+#define sk_ASN1_STRING_TABLE_shift             sk_ASN1_STRTAB_shift
+#define sk_ASN1_STRING_TABLE_pop               sk_ASN1_STRTAB_pop
+#define sk_ASN1_STRING_TABLE_sort              sk_ASN1_STRTAB_sort
+
+/* Hack the names created with DECLARE_STACK_OF(ACCESS_DESCRIPTION) */
+#define sk_ACCESS_DESCRIPTION_new              sk_ACC_DESC_new
+#define sk_ACCESS_DESCRIPTION_new_null         sk_ACC_DESC_new_null
+#define sk_ACCESS_DESCRIPTION_free             sk_ACC_DESC_free
+#define sk_ACCESS_DESCRIPTION_num              sk_ACC_DESC_num
+#define sk_ACCESS_DESCRIPTION_value            sk_ACC_DESC_value
+#define sk_ACCESS_DESCRIPTION_set              sk_ACC_DESC_set
+#define sk_ACCESS_DESCRIPTION_zero             sk_ACC_DESC_zero
+#define sk_ACCESS_DESCRIPTION_push             sk_ACC_DESC_push
+#define sk_ACCESS_DESCRIPTION_unshift          sk_ACC_DESC_unshift
+#define sk_ACCESS_DESCRIPTION_find             sk_ACC_DESC_find
+#define sk_ACCESS_DESCRIPTION_delete           sk_ACC_DESC_delete
+#define sk_ACCESS_DESCRIPTION_delete_ptr       sk_ACC_DESC_delete_ptr
+#define sk_ACCESS_DESCRIPTION_insert           sk_ACC_DESC_insert
+#define sk_ACCESS_DESCRIPTION_set_cmp_func     sk_ACC_DESC_set_cmp_func
+#define sk_ACCESS_DESCRIPTION_dup              sk_ACC_DESC_dup
+#define sk_ACCESS_DESCRIPTION_pop_free         sk_ACC_DESC_pop_free
+#define sk_ACCESS_DESCRIPTION_shift            sk_ACC_DESC_shift
+#define sk_ACCESS_DESCRIPTION_pop              sk_ACC_DESC_pop
+#define sk_ACCESS_DESCRIPTION_sort             sk_ACC_DESC_sort
+
+/* Hack the names created with DECLARE_STACK_OF(CRYPTO_EX_DATA_FUNCS) */
+#define sk_CRYPTO_EX_DATA_FUNCS_new            sk_CRYPT_EX_DATFNS_new
+#define sk_CRYPTO_EX_DATA_FUNCS_new_null       sk_CRYPT_EX_DATFNS_new_null
+#define sk_CRYPTO_EX_DATA_FUNCS_free           sk_CRYPT_EX_DATFNS_free
+#define sk_CRYPTO_EX_DATA_FUNCS_num            sk_CRYPT_EX_DATFNS_num
+#define sk_CRYPTO_EX_DATA_FUNCS_value          sk_CRYPT_EX_DATFNS_value
+#define sk_CRYPTO_EX_DATA_FUNCS_set            sk_CRYPT_EX_DATFNS_set
+#define sk_CRYPTO_EX_DATA_FUNCS_zero           sk_CRYPT_EX_DATFNS_zero
+#define sk_CRYPTO_EX_DATA_FUNCS_push           sk_CRYPT_EX_DATFNS_push
+#define sk_CRYPTO_EX_DATA_FUNCS_unshift                sk_CRYPT_EX_DATFNS_unshift
+#define sk_CRYPTO_EX_DATA_FUNCS_find           sk_CRYPT_EX_DATFNS_find
+#define sk_CRYPTO_EX_DATA_FUNCS_delete         sk_CRYPT_EX_DATFNS_delete
+#define sk_CRYPTO_EX_DATA_FUNCS_delete_ptr     sk_CRYPT_EX_DATFNS_delete_ptr
+#define sk_CRYPTO_EX_DATA_FUNCS_insert         sk_CRYPT_EX_DATFNS_insert
+#define sk_CRYPTO_EX_DATA_FUNCS_set_cmp_func   sk_CRYPT_EX_DATFNS_set_cmp_func
+#define sk_CRYPTO_EX_DATA_FUNCS_dup            sk_CRYPT_EX_DATFNS_dup
+#define sk_CRYPTO_EX_DATA_FUNCS_pop_free       sk_CRYPT_EX_DATFNS_pop_free
+#define sk_CRYPTO_EX_DATA_FUNCS_shift          sk_CRYPT_EX_DATFNS_shift
+#define sk_CRYPTO_EX_DATA_FUNCS_pop            sk_CRYPT_EX_DATFNS_pop
+#define sk_CRYPTO_EX_DATA_FUNCS_sort           sk_CRYPT_EX_DATFNS_sort
+
 /* Hack the names created with DECLARE_ASN1_SET_OF(PKCS7_SIGNER_INFO) */
-#define i2d_ASN1_SET_OF_PKCS7_SIGNER_INFO i2d_ASN1_SET_OF_PKCS7_SIGINF
-#define d2i_ASN1_SET_OF_PKCS7_SIGNER_INFO d2i_ASN1_SET_OF_PKCS7_SIGINF
+#define i2d_ASN1_SET_OF_PKCS7_SIGNER_INFO      i2d_ASN1_SET_OF_PKCS7_SIGINF
+#define d2i_ASN1_SET_OF_PKCS7_SIGNER_INFO      d2i_ASN1_SET_OF_PKCS7_SIGINF
 
 /* Hack the names created with DECLARE_ASN1_SET_OF(PKCS7_RECIP_INFO) */
-#define i2d_ASN1_SET_OF_PKCS7_RECIP_INFO i2d_ASN1_SET_OF_PKCS7_RECGINF
-#define d2i_ASN1_SET_OF_PKCS7_RECIP_INFO d2i_ASN1_SET_OF_PKCS7_RECGINF
+#define i2d_ASN1_SET_OF_PKCS7_RECIP_INFO       i2d_ASN1_SET_OF_PKCS7_RECGINF
+#define d2i_ASN1_SET_OF_PKCS7_RECIP_INFO       d2i_ASN1_SET_OF_PKCS7_RECGINF
 
+/* Hack the names created with DECLARE_ASN1_SET_OF(ACCESS_DESCRIPTION) */
+#define i2d_ASN1_SET_OF_ACCESS_DESCRIPTION     i2d_ASN1_SET_OF_ACC_DESC
+#define d2i_ASN1_SET_OF_ACCESS_DESCRIPTION     d2i_ASN1_SET_OF_ACC_DESC
+
 /* Hack the names created with DECLARE_PEM_rw(NETSCAPE_CERT_SEQUENCE) */
 #define PEM_read_NETSCAPE_CERT_SEQUENCE                PEM_read_NS_CERT_SEQUENCE
 #define PEM_write_NETSCAPE_CERT_SEQUENCE       PEM_write_NS_CERT_SEQUENCE
@@ -119,7 +188,10 @@
 #define PEM_write_PKCS8_PRIV_KEY_INFO          PEM_write_P8_PRIV_KEY_INFO
 #define PEM_read_bio_PKCS8_PRIV_KEY_INFO       PEM_read_bio_P8_PRIV_KEY_INFO
 #define PEM_write_bio_PKCS8_PRIV_KEY_INFO      PEM_write_bio_P8_PRIV_KEY_INFO
-#define PEM_write_cb_bio_PKCS8_PRIV_KEY_INFO   PEM_write_cb_bio_P8_PRIV_KEY_INFO
+#define PEM_write_cb_bio_PKCS8_PRIV_KEY_INFO   PEM_wrt_cb_bio_P8_PRIV_KEY_INFO
+
+/* Hack other PEM names */
+#define PEM_write_bio_PKCS8PrivateKey_nid      PEM_write_bio_PKCS8PrivKey_nid
 
 #endif /* defined VMS */
 

Reply via email to