Import OpenSSL 1.0.1m.
authorSascha Wildner <saw@online.de>
Thu, 19 Mar 2015 20:01:12 +0000 (21:01 +0100)
committerSascha Wildner <saw@online.de>
Thu, 19 Mar 2015 20:01:12 +0000 (21:01 +0100)
Fixes CVE-2015-0286, CVE-2015-0287, CVE-2015-0289, CVE-2015-0293,
CVE-2015-0209, and CVE-2015-0288.

881 files changed:
crypto/openssl/CHANGES
crypto/openssl/NEWS
crypto/openssl/README
crypto/openssl/README.DELETED
crypto/openssl/apps/app_rand.c
crypto/openssl/apps/apps.c
crypto/openssl/apps/apps.h
crypto/openssl/apps/asn1pars.c
crypto/openssl/apps/ca.c
crypto/openssl/apps/ciphers.c
crypto/openssl/apps/cms.c
crypto/openssl/apps/crl.c
crypto/openssl/apps/crl2p7.c
crypto/openssl/apps/dgst.c
crypto/openssl/apps/dh.c
crypto/openssl/apps/dhparam.c
crypto/openssl/apps/dsa.c
crypto/openssl/apps/dsaparam.c
crypto/openssl/apps/ec.c
crypto/openssl/apps/ecparam.c
crypto/openssl/apps/enc.c
crypto/openssl/apps/engine.c
crypto/openssl/apps/errstr.c
crypto/openssl/apps/gendh.c
crypto/openssl/apps/gendsa.c
crypto/openssl/apps/genpkey.c
crypto/openssl/apps/genrsa.c
crypto/openssl/apps/nseq.c
crypto/openssl/apps/ocsp.c
crypto/openssl/apps/openssl.c
crypto/openssl/apps/passwd.c
crypto/openssl/apps/pkcs12.c
crypto/openssl/apps/pkcs7.c
crypto/openssl/apps/pkcs8.c
crypto/openssl/apps/pkey.c
crypto/openssl/apps/pkeyparam.c
crypto/openssl/apps/pkeyutl.c
crypto/openssl/apps/prime.c
crypto/openssl/apps/progs.h
crypto/openssl/apps/rand.c
crypto/openssl/apps/req.c
crypto/openssl/apps/rsa.c
crypto/openssl/apps/rsautl.c
crypto/openssl/apps/s_apps.h
crypto/openssl/apps/s_cb.c
crypto/openssl/apps/s_client.c
crypto/openssl/apps/s_server.c
crypto/openssl/apps/s_socket.c
crypto/openssl/apps/s_time.c
crypto/openssl/apps/sess_id.c
crypto/openssl/apps/smime.c
crypto/openssl/apps/speed.c
crypto/openssl/apps/spkac.c
crypto/openssl/apps/srp.c
crypto/openssl/apps/testdsa.h
crypto/openssl/apps/testrsa.h
crypto/openssl/apps/timeouts.h
crypto/openssl/apps/ts.c
crypto/openssl/apps/verify.c
crypto/openssl/apps/version.c
crypto/openssl/apps/x509.c
crypto/openssl/crypto/LPdir_unix.c
crypto/openssl/crypto/aes/aes.h
crypto/openssl/crypto/aes/aes_cbc.c
crypto/openssl/crypto/aes/aes_cfb.c
crypto/openssl/crypto/aes/aes_core.c
crypto/openssl/crypto/aes/aes_ctr.c
crypto/openssl/crypto/aes/aes_ecb.c
crypto/openssl/crypto/aes/aes_ige.c
crypto/openssl/crypto/aes/aes_locl.h
crypto/openssl/crypto/aes/aes_misc.c
crypto/openssl/crypto/aes/aes_ofb.c
crypto/openssl/crypto/aes/aes_wrap.c
crypto/openssl/crypto/asn1/a_bitstr.c
crypto/openssl/crypto/asn1/a_bool.c
crypto/openssl/crypto/asn1/a_bytes.c
crypto/openssl/crypto/asn1/a_d2i_fp.c
crypto/openssl/crypto/asn1/a_digest.c
crypto/openssl/crypto/asn1/a_dup.c
crypto/openssl/crypto/asn1/a_enum.c
crypto/openssl/crypto/asn1/a_gentm.c
crypto/openssl/crypto/asn1/a_i2d_fp.c
crypto/openssl/crypto/asn1/a_int.c
crypto/openssl/crypto/asn1/a_mbstr.c
crypto/openssl/crypto/asn1/a_object.c
crypto/openssl/crypto/asn1/a_octet.c
crypto/openssl/crypto/asn1/a_print.c
crypto/openssl/crypto/asn1/a_set.c
crypto/openssl/crypto/asn1/a_sign.c
crypto/openssl/crypto/asn1/a_strex.c
crypto/openssl/crypto/asn1/a_strnid.c
crypto/openssl/crypto/asn1/a_time.c
crypto/openssl/crypto/asn1/a_type.c
crypto/openssl/crypto/asn1/a_utctm.c
crypto/openssl/crypto/asn1/a_utf8.c
crypto/openssl/crypto/asn1/a_verify.c
crypto/openssl/crypto/asn1/ameth_lib.c
crypto/openssl/crypto/asn1/asn1.h
crypto/openssl/crypto/asn1/asn1_err.c
crypto/openssl/crypto/asn1/asn1_gen.c
crypto/openssl/crypto/asn1/asn1_lib.c
crypto/openssl/crypto/asn1/asn1_locl.h
crypto/openssl/crypto/asn1/asn1_mac.h
crypto/openssl/crypto/asn1/asn1_par.c
crypto/openssl/crypto/asn1/asn1t.h
crypto/openssl/crypto/asn1/asn_mime.c
crypto/openssl/crypto/asn1/asn_moid.c
crypto/openssl/crypto/asn1/asn_pack.c
crypto/openssl/crypto/asn1/bio_asn1.c
crypto/openssl/crypto/asn1/bio_ndef.c
crypto/openssl/crypto/asn1/charmap.h
crypto/openssl/crypto/asn1/d2i_pr.c
crypto/openssl/crypto/asn1/d2i_pu.c
crypto/openssl/crypto/asn1/evp_asn1.c
crypto/openssl/crypto/asn1/f_enum.c
crypto/openssl/crypto/asn1/f_int.c
crypto/openssl/crypto/asn1/f_string.c
crypto/openssl/crypto/asn1/i2d_pr.c
crypto/openssl/crypto/asn1/i2d_pu.c
crypto/openssl/crypto/asn1/n_pkey.c
crypto/openssl/crypto/asn1/nsseq.c
crypto/openssl/crypto/asn1/p5_pbe.c
crypto/openssl/crypto/asn1/p5_pbev2.c
crypto/openssl/crypto/asn1/p8_pkey.c
crypto/openssl/crypto/asn1/t_bitst.c
crypto/openssl/crypto/asn1/t_crl.c
crypto/openssl/crypto/asn1/t_pkey.c
crypto/openssl/crypto/asn1/t_req.c
crypto/openssl/crypto/asn1/t_spki.c
crypto/openssl/crypto/asn1/t_x509.c
crypto/openssl/crypto/asn1/t_x509a.c
crypto/openssl/crypto/asn1/tasn_dec.c
crypto/openssl/crypto/asn1/tasn_enc.c
crypto/openssl/crypto/asn1/tasn_fre.c
crypto/openssl/crypto/asn1/tasn_new.c
crypto/openssl/crypto/asn1/tasn_prn.c
crypto/openssl/crypto/asn1/tasn_typ.c
crypto/openssl/crypto/asn1/tasn_utl.c
crypto/openssl/crypto/asn1/x_algor.c
crypto/openssl/crypto/asn1/x_attrib.c
crypto/openssl/crypto/asn1/x_bignum.c
crypto/openssl/crypto/asn1/x_crl.c
crypto/openssl/crypto/asn1/x_exten.c
crypto/openssl/crypto/asn1/x_info.c
crypto/openssl/crypto/asn1/x_long.c
crypto/openssl/crypto/asn1/x_name.c
crypto/openssl/crypto/asn1/x_nx509.c
crypto/openssl/crypto/asn1/x_pkey.c
crypto/openssl/crypto/asn1/x_pubkey.c
crypto/openssl/crypto/asn1/x_req.c
crypto/openssl/crypto/asn1/x_sig.c
crypto/openssl/crypto/asn1/x_spki.c
crypto/openssl/crypto/asn1/x_val.c
crypto/openssl/crypto/asn1/x_x509.c
crypto/openssl/crypto/asn1/x_x509a.c
crypto/openssl/crypto/bf/bf_cfb64.c
crypto/openssl/crypto/bf/bf_ecb.c
crypto/openssl/crypto/bf/bf_enc.c
crypto/openssl/crypto/bf/bf_locl.h
crypto/openssl/crypto/bf/bf_ofb64.c
crypto/openssl/crypto/bf/bf_pi.h
crypto/openssl/crypto/bf/bf_skey.c
crypto/openssl/crypto/bf/blowfish.h
crypto/openssl/crypto/bio/b_dump.c
crypto/openssl/crypto/bio/b_print.c
crypto/openssl/crypto/bio/b_sock.c
crypto/openssl/crypto/bio/bf_buff.c
crypto/openssl/crypto/bio/bf_lbuf.c
crypto/openssl/crypto/bio/bf_nbio.c
crypto/openssl/crypto/bio/bf_null.c
crypto/openssl/crypto/bio/bio.h
crypto/openssl/crypto/bio/bio_cb.c
crypto/openssl/crypto/bio/bio_err.c
crypto/openssl/crypto/bio/bio_lcl.h
crypto/openssl/crypto/bio/bio_lib.c
crypto/openssl/crypto/bio/bss_acpt.c
crypto/openssl/crypto/bio/bss_bio.c
crypto/openssl/crypto/bio/bss_conn.c
crypto/openssl/crypto/bio/bss_dgram.c
crypto/openssl/crypto/bio/bss_fd.c
crypto/openssl/crypto/bio/bss_file.c
crypto/openssl/crypto/bio/bss_log.c
crypto/openssl/crypto/bio/bss_mem.c
crypto/openssl/crypto/bio/bss_null.c
crypto/openssl/crypto/bio/bss_sock.c
crypto/openssl/crypto/bn/asm/x86_64-gcc.c
crypto/openssl/crypto/bn/bn.h
crypto/openssl/crypto/bn/bn_add.c
crypto/openssl/crypto/bn/bn_asm.c
crypto/openssl/crypto/bn/bn_blind.c
crypto/openssl/crypto/bn/bn_const.c [changed mode: 0755->0644]
crypto/openssl/crypto/bn/bn_ctx.c
crypto/openssl/crypto/bn/bn_depr.c
crypto/openssl/crypto/bn/bn_div.c
crypto/openssl/crypto/bn/bn_err.c
crypto/openssl/crypto/bn/bn_exp.c
crypto/openssl/crypto/bn/bn_exp2.c
crypto/openssl/crypto/bn/bn_gcd.c
crypto/openssl/crypto/bn/bn_gf2m.c
crypto/openssl/crypto/bn/bn_kron.c
crypto/openssl/crypto/bn/bn_lcl.h
crypto/openssl/crypto/bn/bn_lib.c
crypto/openssl/crypto/bn/bn_mod.c
crypto/openssl/crypto/bn/bn_mont.c
crypto/openssl/crypto/bn/bn_mpi.c
crypto/openssl/crypto/bn/bn_mul.c
crypto/openssl/crypto/bn/bn_nist.c
crypto/openssl/crypto/bn/bn_prime.c
crypto/openssl/crypto/bn/bn_prime.h
crypto/openssl/crypto/bn/bn_print.c
crypto/openssl/crypto/bn/bn_rand.c
crypto/openssl/crypto/bn/bn_recp.c
crypto/openssl/crypto/bn/bn_shift.c
crypto/openssl/crypto/bn/bn_sqr.c
crypto/openssl/crypto/bn/bn_sqrt.c
crypto/openssl/crypto/bn/bn_word.c
crypto/openssl/crypto/bn/bn_x931p.c
crypto/openssl/crypto/buffer/buf_err.c
crypto/openssl/crypto/buffer/buf_str.c
crypto/openssl/crypto/buffer/buffer.c
crypto/openssl/crypto/buffer/buffer.h
crypto/openssl/crypto/camellia/camellia.c
crypto/openssl/crypto/camellia/camellia.h
crypto/openssl/crypto/camellia/cmll_cbc.c
crypto/openssl/crypto/camellia/cmll_cfb.c
crypto/openssl/crypto/camellia/cmll_ctr.c
crypto/openssl/crypto/camellia/cmll_ecb.c
crypto/openssl/crypto/camellia/cmll_locl.h
crypto/openssl/crypto/camellia/cmll_misc.c
crypto/openssl/crypto/camellia/cmll_ofb.c
crypto/openssl/crypto/camellia/cmll_utl.c
crypto/openssl/crypto/cast/c_cfb64.c
crypto/openssl/crypto/cast/c_ecb.c
crypto/openssl/crypto/cast/c_enc.c
crypto/openssl/crypto/cast/c_ofb64.c
crypto/openssl/crypto/cast/c_skey.c
crypto/openssl/crypto/cast/cast.h
crypto/openssl/crypto/cast/cast_lcl.h
crypto/openssl/crypto/cast/cast_s.h
crypto/openssl/crypto/cmac/cm_ameth.c
crypto/openssl/crypto/cmac/cm_pmeth.c
crypto/openssl/crypto/cmac/cmac.c
crypto/openssl/crypto/cmac/cmac.h
crypto/openssl/crypto/cms/cms.h
crypto/openssl/crypto/cms/cms_asn1.c
crypto/openssl/crypto/cms/cms_att.c
crypto/openssl/crypto/cms/cms_cd.c
crypto/openssl/crypto/cms/cms_dd.c
crypto/openssl/crypto/cms/cms_enc.c
crypto/openssl/crypto/cms/cms_env.c
crypto/openssl/crypto/cms/cms_err.c
crypto/openssl/crypto/cms/cms_ess.c
crypto/openssl/crypto/cms/cms_io.c
crypto/openssl/crypto/cms/cms_lcl.h
crypto/openssl/crypto/cms/cms_lib.c
crypto/openssl/crypto/cms/cms_pwri.c
crypto/openssl/crypto/cms/cms_sd.c
crypto/openssl/crypto/cms/cms_smime.c
crypto/openssl/crypto/comp/c_rle.c
crypto/openssl/crypto/comp/c_zlib.c
crypto/openssl/crypto/comp/comp.h
crypto/openssl/crypto/comp/comp_err.c
crypto/openssl/crypto/comp/comp_lib.c
crypto/openssl/crypto/conf/conf.h
crypto/openssl/crypto/conf/conf_api.c
crypto/openssl/crypto/conf/conf_api.h
crypto/openssl/crypto/conf/conf_def.c
crypto/openssl/crypto/conf/conf_def.h
crypto/openssl/crypto/conf/conf_err.c
crypto/openssl/crypto/conf/conf_lib.c
crypto/openssl/crypto/conf/conf_mall.c
crypto/openssl/crypto/conf/conf_mod.c
crypto/openssl/crypto/conf/conf_sap.c
crypto/openssl/crypto/constant_time_locl.h
crypto/openssl/crypto/cpt_err.c
crypto/openssl/crypto/cryptlib.c
crypto/openssl/crypto/cryptlib.h
crypto/openssl/crypto/crypto.h
crypto/openssl/crypto/cversion.c
crypto/openssl/crypto/des/cbc3_enc.c
crypto/openssl/crypto/des/cbc_cksm.c
crypto/openssl/crypto/des/cbc_enc.c
crypto/openssl/crypto/des/cfb64ede.c
crypto/openssl/crypto/des/cfb64enc.c
crypto/openssl/crypto/des/cfb_enc.c
crypto/openssl/crypto/des/des.h
crypto/openssl/crypto/des/des_enc.c
crypto/openssl/crypto/des/des_locl.h
crypto/openssl/crypto/des/des_old.c
crypto/openssl/crypto/des/des_old.h
crypto/openssl/crypto/des/des_old2.c
crypto/openssl/crypto/des/des_ver.h
crypto/openssl/crypto/des/ecb3_enc.c
crypto/openssl/crypto/des/ecb_enc.c
crypto/openssl/crypto/des/ede_cbcm_enc.c
crypto/openssl/crypto/des/enc_read.c
crypto/openssl/crypto/des/enc_writ.c
crypto/openssl/crypto/des/fcrypt.c
crypto/openssl/crypto/des/fcrypt_b.c
crypto/openssl/crypto/des/ncbc_enc.c
crypto/openssl/crypto/des/ofb64ede.c
crypto/openssl/crypto/des/ofb64enc.c
crypto/openssl/crypto/des/ofb_enc.c
crypto/openssl/crypto/des/pcbc_enc.c
crypto/openssl/crypto/des/qud_cksm.c
crypto/openssl/crypto/des/rand_key.c
crypto/openssl/crypto/des/read2pwd.c
crypto/openssl/crypto/des/rpc_des.h
crypto/openssl/crypto/des/rpc_enc.c
crypto/openssl/crypto/des/set_key.c
crypto/openssl/crypto/des/spr.h
crypto/openssl/crypto/des/str2key.c
crypto/openssl/crypto/des/xcbc_enc.c
crypto/openssl/crypto/dh/dh.h
crypto/openssl/crypto/dh/dh_ameth.c
crypto/openssl/crypto/dh/dh_asn1.c
crypto/openssl/crypto/dh/dh_check.c
crypto/openssl/crypto/dh/dh_depr.c
crypto/openssl/crypto/dh/dh_err.c
crypto/openssl/crypto/dh/dh_gen.c
crypto/openssl/crypto/dh/dh_key.c
crypto/openssl/crypto/dh/dh_lib.c
crypto/openssl/crypto/dh/dh_pmeth.c
crypto/openssl/crypto/dh/dh_prn.c
crypto/openssl/crypto/dsa/dsa.h
crypto/openssl/crypto/dsa/dsa_ameth.c
crypto/openssl/crypto/dsa/dsa_asn1.c
crypto/openssl/crypto/dsa/dsa_depr.c
crypto/openssl/crypto/dsa/dsa_err.c
crypto/openssl/crypto/dsa/dsa_gen.c
crypto/openssl/crypto/dsa/dsa_key.c
crypto/openssl/crypto/dsa/dsa_lib.c
crypto/openssl/crypto/dsa/dsa_locl.h
crypto/openssl/crypto/dsa/dsa_ossl.c
crypto/openssl/crypto/dsa/dsa_pmeth.c
crypto/openssl/crypto/dsa/dsa_prn.c
crypto/openssl/crypto/dsa/dsa_sign.c
crypto/openssl/crypto/dsa/dsa_vrf.c
crypto/openssl/crypto/dso/dso.h
crypto/openssl/crypto/dso/dso_dl.c
crypto/openssl/crypto/dso/dso_dlfcn.c
crypto/openssl/crypto/dso/dso_err.c
crypto/openssl/crypto/dso/dso_lib.c
crypto/openssl/crypto/dso/dso_null.c
crypto/openssl/crypto/dso/dso_openssl.c
crypto/openssl/crypto/ebcdic.c
crypto/openssl/crypto/ebcdic.h
crypto/openssl/crypto/ec/ec.h
crypto/openssl/crypto/ec/ec2_mult.c
crypto/openssl/crypto/ec/ec2_oct.c
crypto/openssl/crypto/ec/ec2_smpl.c
crypto/openssl/crypto/ec/ec_ameth.c
crypto/openssl/crypto/ec/ec_asn1.c
crypto/openssl/crypto/ec/ec_check.c
crypto/openssl/crypto/ec/ec_curve.c
crypto/openssl/crypto/ec/ec_cvt.c
crypto/openssl/crypto/ec/ec_err.c
crypto/openssl/crypto/ec/ec_key.c
crypto/openssl/crypto/ec/ec_lcl.h
crypto/openssl/crypto/ec/ec_lib.c
crypto/openssl/crypto/ec/ec_mult.c
crypto/openssl/crypto/ec/ec_oct.c
crypto/openssl/crypto/ec/ec_pmeth.c
crypto/openssl/crypto/ec/ec_print.c
crypto/openssl/crypto/ec/eck_prn.c
crypto/openssl/crypto/ec/ecp_mont.c
crypto/openssl/crypto/ec/ecp_nist.c
crypto/openssl/crypto/ec/ecp_nistp224.c
crypto/openssl/crypto/ec/ecp_nistp256.c
crypto/openssl/crypto/ec/ecp_nistp521.c
crypto/openssl/crypto/ec/ecp_nistputil.c
crypto/openssl/crypto/ec/ecp_oct.c
crypto/openssl/crypto/ec/ecp_smpl.c
crypto/openssl/crypto/ecdh/ecdh.h
crypto/openssl/crypto/ecdh/ech_err.c
crypto/openssl/crypto/ecdh/ech_key.c
crypto/openssl/crypto/ecdh/ech_lib.c
crypto/openssl/crypto/ecdh/ech_locl.h
crypto/openssl/crypto/ecdh/ech_ossl.c
crypto/openssl/crypto/ecdsa/ecdsa.h
crypto/openssl/crypto/ecdsa/ecs_asn1.c
crypto/openssl/crypto/ecdsa/ecs_err.c
crypto/openssl/crypto/ecdsa/ecs_lib.c
crypto/openssl/crypto/ecdsa/ecs_locl.h
crypto/openssl/crypto/ecdsa/ecs_ossl.c
crypto/openssl/crypto/ecdsa/ecs_sign.c
crypto/openssl/crypto/ecdsa/ecs_vrf.c
crypto/openssl/crypto/engine/eng_all.c
crypto/openssl/crypto/engine/eng_cnf.c
crypto/openssl/crypto/engine/eng_cryptodev.c
crypto/openssl/crypto/engine/eng_ctrl.c
crypto/openssl/crypto/engine/eng_dyn.c
crypto/openssl/crypto/engine/eng_err.c
crypto/openssl/crypto/engine/eng_fat.c
crypto/openssl/crypto/engine/eng_init.c
crypto/openssl/crypto/engine/eng_int.h
crypto/openssl/crypto/engine/eng_lib.c
crypto/openssl/crypto/engine/eng_list.c
crypto/openssl/crypto/engine/eng_openssl.c
crypto/openssl/crypto/engine/eng_pkey.c
crypto/openssl/crypto/engine/eng_rdrand.c
crypto/openssl/crypto/engine/eng_rsax.c
crypto/openssl/crypto/engine/eng_table.c
crypto/openssl/crypto/engine/engine.h
crypto/openssl/crypto/engine/tb_asnmth.c
crypto/openssl/crypto/engine/tb_cipher.c
crypto/openssl/crypto/engine/tb_dh.c
crypto/openssl/crypto/engine/tb_digest.c
crypto/openssl/crypto/engine/tb_dsa.c
crypto/openssl/crypto/engine/tb_ecdh.c
crypto/openssl/crypto/engine/tb_ecdsa.c
crypto/openssl/crypto/engine/tb_pkmeth.c
crypto/openssl/crypto/engine/tb_rand.c
crypto/openssl/crypto/engine/tb_rsa.c
crypto/openssl/crypto/engine/tb_store.c
crypto/openssl/crypto/err/err.c
crypto/openssl/crypto/err/err.h
crypto/openssl/crypto/err/err_all.c
crypto/openssl/crypto/err/err_prn.c
crypto/openssl/crypto/evp/bio_b64.c
crypto/openssl/crypto/evp/bio_enc.c
crypto/openssl/crypto/evp/bio_md.c
crypto/openssl/crypto/evp/bio_ok.c
crypto/openssl/crypto/evp/c_all.c
crypto/openssl/crypto/evp/c_allc.c
crypto/openssl/crypto/evp/c_alld.c
crypto/openssl/crypto/evp/digest.c
crypto/openssl/crypto/evp/e_aes.c
crypto/openssl/crypto/evp/e_aes_cbc_hmac_sha1.c
crypto/openssl/crypto/evp/e_bf.c
crypto/openssl/crypto/evp/e_camellia.c
crypto/openssl/crypto/evp/e_cast.c
crypto/openssl/crypto/evp/e_des.c
crypto/openssl/crypto/evp/e_des3.c
crypto/openssl/crypto/evp/e_idea.c
crypto/openssl/crypto/evp/e_null.c
crypto/openssl/crypto/evp/e_old.c
crypto/openssl/crypto/evp/e_rc2.c
crypto/openssl/crypto/evp/e_rc4.c
crypto/openssl/crypto/evp/e_rc4_hmac_md5.c
crypto/openssl/crypto/evp/e_rc5.c
crypto/openssl/crypto/evp/e_seed.c
crypto/openssl/crypto/evp/e_xcbc_d.c
crypto/openssl/crypto/evp/encode.c
crypto/openssl/crypto/evp/evp.h
crypto/openssl/crypto/evp/evp_acnf.c
crypto/openssl/crypto/evp/evp_cnf.c
crypto/openssl/crypto/evp/evp_enc.c
crypto/openssl/crypto/evp/evp_err.c
crypto/openssl/crypto/evp/evp_fips.c
crypto/openssl/crypto/evp/evp_key.c
crypto/openssl/crypto/evp/evp_lib.c
crypto/openssl/crypto/evp/evp_locl.h
crypto/openssl/crypto/evp/evp_pbe.c
crypto/openssl/crypto/evp/evp_pkey.c
crypto/openssl/crypto/evp/m_dss.c
crypto/openssl/crypto/evp/m_dss1.c
crypto/openssl/crypto/evp/m_ecdsa.c
crypto/openssl/crypto/evp/m_md2.c
crypto/openssl/crypto/evp/m_md4.c
crypto/openssl/crypto/evp/m_md5.c
crypto/openssl/crypto/evp/m_mdc2.c
crypto/openssl/crypto/evp/m_null.c
crypto/openssl/crypto/evp/m_ripemd.c
crypto/openssl/crypto/evp/m_sha.c
crypto/openssl/crypto/evp/m_sha1.c
crypto/openssl/crypto/evp/m_sigver.c
crypto/openssl/crypto/evp/m_wp.c
crypto/openssl/crypto/evp/names.c
crypto/openssl/crypto/evp/openbsd_hw.c
crypto/openssl/crypto/evp/p5_crpt.c
crypto/openssl/crypto/evp/p5_crpt2.c
crypto/openssl/crypto/evp/p_dec.c
crypto/openssl/crypto/evp/p_enc.c
crypto/openssl/crypto/evp/p_lib.c
crypto/openssl/crypto/evp/p_open.c
crypto/openssl/crypto/evp/p_seal.c
crypto/openssl/crypto/evp/p_sign.c
crypto/openssl/crypto/evp/p_verify.c
crypto/openssl/crypto/evp/pmeth_fn.c
crypto/openssl/crypto/evp/pmeth_gn.c
crypto/openssl/crypto/evp/pmeth_lib.c
crypto/openssl/crypto/ex_data.c
crypto/openssl/crypto/fips_ers.c
crypto/openssl/crypto/hmac/hm_ameth.c
crypto/openssl/crypto/hmac/hm_pmeth.c
crypto/openssl/crypto/hmac/hmac.c
crypto/openssl/crypto/hmac/hmac.h
crypto/openssl/crypto/idea/i_cbc.c
crypto/openssl/crypto/idea/i_cfb64.c
crypto/openssl/crypto/idea/i_ecb.c
crypto/openssl/crypto/idea/i_ofb64.c
crypto/openssl/crypto/idea/i_skey.c
crypto/openssl/crypto/idea/idea.h
crypto/openssl/crypto/idea/idea_lcl.h
crypto/openssl/crypto/krb5/krb5_asn.c
crypto/openssl/crypto/krb5/krb5_asn.h
crypto/openssl/crypto/lhash/lh_stats.c
crypto/openssl/crypto/lhash/lhash.c
crypto/openssl/crypto/lhash/lhash.h
crypto/openssl/crypto/md32_common.h
crypto/openssl/crypto/md4/md4.h
crypto/openssl/crypto/md4/md4_dgst.c
crypto/openssl/crypto/md4/md4_locl.h
crypto/openssl/crypto/md4/md4_one.c
crypto/openssl/crypto/md5/md5.h
crypto/openssl/crypto/md5/md5_dgst.c
crypto/openssl/crypto/md5/md5_locl.h
crypto/openssl/crypto/md5/md5_one.c
crypto/openssl/crypto/mdc2/mdc2.h
crypto/openssl/crypto/mdc2/mdc2_one.c
crypto/openssl/crypto/mdc2/mdc2dgst.c
crypto/openssl/crypto/mem.c
crypto/openssl/crypto/mem_clr.c
crypto/openssl/crypto/mem_dbg.c
crypto/openssl/crypto/modes/cbc128.c
crypto/openssl/crypto/modes/ccm128.c
crypto/openssl/crypto/modes/cfb128.c
crypto/openssl/crypto/modes/ctr128.c
crypto/openssl/crypto/modes/cts128.c
crypto/openssl/crypto/modes/gcm128.c
crypto/openssl/crypto/modes/modes.h
crypto/openssl/crypto/modes/modes_lcl.h
crypto/openssl/crypto/modes/ofb128.c
crypto/openssl/crypto/modes/xts128.c
crypto/openssl/crypto/o_dir.c
crypto/openssl/crypto/o_dir.h
crypto/openssl/crypto/o_fips.c
crypto/openssl/crypto/o_init.c
crypto/openssl/crypto/o_time.c
crypto/openssl/crypto/o_time.h
crypto/openssl/crypto/objects/o_names.c
crypto/openssl/crypto/objects/obj_dat.c
crypto/openssl/crypto/objects/obj_err.c
crypto/openssl/crypto/objects/obj_lib.c
crypto/openssl/crypto/objects/obj_mac.h
crypto/openssl/crypto/objects/obj_xref.c
crypto/openssl/crypto/objects/obj_xref.h
crypto/openssl/crypto/objects/objects.h
crypto/openssl/crypto/ocsp/ocsp.h
crypto/openssl/crypto/ocsp/ocsp_asn.c
crypto/openssl/crypto/ocsp/ocsp_cl.c
crypto/openssl/crypto/ocsp/ocsp_err.c
crypto/openssl/crypto/ocsp/ocsp_ext.c
crypto/openssl/crypto/ocsp/ocsp_ht.c
crypto/openssl/crypto/ocsp/ocsp_lib.c
crypto/openssl/crypto/ocsp/ocsp_prn.c
crypto/openssl/crypto/ocsp/ocsp_srv.c
crypto/openssl/crypto/ocsp/ocsp_vfy.c
crypto/openssl/crypto/opensslv.h
crypto/openssl/crypto/ossl_typ.h
crypto/openssl/crypto/pem/pem.h
crypto/openssl/crypto/pem/pem2.h
crypto/openssl/crypto/pem/pem_all.c
crypto/openssl/crypto/pem/pem_err.c
crypto/openssl/crypto/pem/pem_info.c
crypto/openssl/crypto/pem/pem_lib.c
crypto/openssl/crypto/pem/pem_oth.c
crypto/openssl/crypto/pem/pem_pk8.c
crypto/openssl/crypto/pem/pem_pkey.c
crypto/openssl/crypto/pem/pem_seal.c
crypto/openssl/crypto/pem/pem_sign.c
crypto/openssl/crypto/pem/pem_x509.c
crypto/openssl/crypto/pem/pem_xaux.c
crypto/openssl/crypto/pem/pvkfmt.c
crypto/openssl/crypto/pkcs12/p12_add.c
crypto/openssl/crypto/pkcs12/p12_asn.c
crypto/openssl/crypto/pkcs12/p12_attr.c
crypto/openssl/crypto/pkcs12/p12_crpt.c
crypto/openssl/crypto/pkcs12/p12_crt.c
crypto/openssl/crypto/pkcs12/p12_decr.c
crypto/openssl/crypto/pkcs12/p12_init.c
crypto/openssl/crypto/pkcs12/p12_key.c
crypto/openssl/crypto/pkcs12/p12_kiss.c
crypto/openssl/crypto/pkcs12/p12_mutl.c
crypto/openssl/crypto/pkcs12/p12_npas.c
crypto/openssl/crypto/pkcs12/p12_p8d.c
crypto/openssl/crypto/pkcs12/p12_p8e.c
crypto/openssl/crypto/pkcs12/p12_utl.c
crypto/openssl/crypto/pkcs12/pk12err.c
crypto/openssl/crypto/pkcs12/pkcs12.h
crypto/openssl/crypto/pkcs7/bio_pk7.c
crypto/openssl/crypto/pkcs7/pk7_asn1.c
crypto/openssl/crypto/pkcs7/pk7_attr.c
crypto/openssl/crypto/pkcs7/pk7_dgst.c
crypto/openssl/crypto/pkcs7/pk7_doit.c
crypto/openssl/crypto/pkcs7/pk7_lib.c
crypto/openssl/crypto/pkcs7/pk7_mime.c
crypto/openssl/crypto/pkcs7/pk7_smime.c
crypto/openssl/crypto/pkcs7/pkcs7.h
crypto/openssl/crypto/pkcs7/pkcs7err.c
crypto/openssl/crypto/pqueue/pq_test.c
crypto/openssl/crypto/pqueue/pqueue.c
crypto/openssl/crypto/pqueue/pqueue.h
crypto/openssl/crypto/rand/md_rand.c
crypto/openssl/crypto/rand/rand.h
crypto/openssl/crypto/rand/rand_egd.c
crypto/openssl/crypto/rand/rand_err.c
crypto/openssl/crypto/rand/rand_lcl.h
crypto/openssl/crypto/rand/rand_lib.c
crypto/openssl/crypto/rand/rand_nw.c
crypto/openssl/crypto/rand/rand_unix.c
crypto/openssl/crypto/rand/randfile.c
crypto/openssl/crypto/rc2/rc2.h
crypto/openssl/crypto/rc2/rc2_cbc.c
crypto/openssl/crypto/rc2/rc2_ecb.c
crypto/openssl/crypto/rc2/rc2_locl.h
crypto/openssl/crypto/rc2/rc2_skey.c
crypto/openssl/crypto/rc2/rc2cfb64.c
crypto/openssl/crypto/rc2/rc2ofb64.c
crypto/openssl/crypto/rc4/rc4.h
crypto/openssl/crypto/rc4/rc4_enc.c
crypto/openssl/crypto/rc4/rc4_locl.h
crypto/openssl/crypto/rc4/rc4_skey.c
crypto/openssl/crypto/rc4/rc4_utl.c
crypto/openssl/crypto/ripemd/ripemd.h
crypto/openssl/crypto/ripemd/rmd_dgst.c
crypto/openssl/crypto/ripemd/rmd_locl.h
crypto/openssl/crypto/ripemd/rmd_one.c
crypto/openssl/crypto/ripemd/rmdconst.h
crypto/openssl/crypto/rsa/rsa.h
crypto/openssl/crypto/rsa/rsa_ameth.c
crypto/openssl/crypto/rsa/rsa_asn1.c
crypto/openssl/crypto/rsa/rsa_chk.c
crypto/openssl/crypto/rsa/rsa_crpt.c
crypto/openssl/crypto/rsa/rsa_depr.c
crypto/openssl/crypto/rsa/rsa_eay.c
crypto/openssl/crypto/rsa/rsa_err.c
crypto/openssl/crypto/rsa/rsa_gen.c
crypto/openssl/crypto/rsa/rsa_lib.c
crypto/openssl/crypto/rsa/rsa_locl.h
crypto/openssl/crypto/rsa/rsa_none.c
crypto/openssl/crypto/rsa/rsa_null.c
crypto/openssl/crypto/rsa/rsa_oaep.c
crypto/openssl/crypto/rsa/rsa_pk1.c
crypto/openssl/crypto/rsa/rsa_pmeth.c
crypto/openssl/crypto/rsa/rsa_prn.c
crypto/openssl/crypto/rsa/rsa_pss.c
crypto/openssl/crypto/rsa/rsa_saos.c
crypto/openssl/crypto/rsa/rsa_sign.c
crypto/openssl/crypto/rsa/rsa_ssl.c
crypto/openssl/crypto/rsa/rsa_x931.c
crypto/openssl/crypto/seed/seed.c
crypto/openssl/crypto/seed/seed.h
crypto/openssl/crypto/seed/seed_cbc.c
crypto/openssl/crypto/seed/seed_cfb.c
crypto/openssl/crypto/seed/seed_ecb.c
crypto/openssl/crypto/seed/seed_locl.h
crypto/openssl/crypto/seed/seed_ofb.c
crypto/openssl/crypto/sha/sha.h
crypto/openssl/crypto/sha/sha1_one.c
crypto/openssl/crypto/sha/sha1dgst.c
crypto/openssl/crypto/sha/sha256.c
crypto/openssl/crypto/sha/sha512.c
crypto/openssl/crypto/sha/sha_dgst.c
crypto/openssl/crypto/sha/sha_locl.h
crypto/openssl/crypto/sha/sha_one.c
crypto/openssl/crypto/srp/srp.h
crypto/openssl/crypto/srp/srp_grps.h
crypto/openssl/crypto/srp/srp_lcl.h
crypto/openssl/crypto/srp/srp_lib.c
crypto/openssl/crypto/srp/srp_vfy.c
crypto/openssl/crypto/stack/safestack.h
crypto/openssl/crypto/stack/stack.c
crypto/openssl/crypto/stack/stack.h
crypto/openssl/crypto/symhacks.h
crypto/openssl/crypto/threads/th-lock.c
crypto/openssl/crypto/ts/ts.h
crypto/openssl/crypto/ts/ts_asn1.c
crypto/openssl/crypto/ts/ts_conf.c
crypto/openssl/crypto/ts/ts_err.c
crypto/openssl/crypto/ts/ts_lib.c
crypto/openssl/crypto/ts/ts_req_print.c
crypto/openssl/crypto/ts/ts_req_utils.c
crypto/openssl/crypto/ts/ts_rsp_print.c
crypto/openssl/crypto/ts/ts_rsp_sign.c
crypto/openssl/crypto/ts/ts_rsp_utils.c
crypto/openssl/crypto/ts/ts_rsp_verify.c
crypto/openssl/crypto/ts/ts_verify_ctx.c
crypto/openssl/crypto/txt_db/txt_db.c
crypto/openssl/crypto/txt_db/txt_db.h
crypto/openssl/crypto/ui/ui.h
crypto/openssl/crypto/ui/ui_compat.c
crypto/openssl/crypto/ui/ui_compat.h
crypto/openssl/crypto/ui/ui_err.c
crypto/openssl/crypto/ui/ui_lib.c
crypto/openssl/crypto/ui/ui_locl.h
crypto/openssl/crypto/ui/ui_openssl.c
crypto/openssl/crypto/ui/ui_util.c
crypto/openssl/crypto/uid.c
crypto/openssl/crypto/whrlpool/whrlpool.h
crypto/openssl/crypto/whrlpool/wp_block.c
crypto/openssl/crypto/whrlpool/wp_dgst.c
crypto/openssl/crypto/whrlpool/wp_locl.h
crypto/openssl/crypto/x509/by_dir.c
crypto/openssl/crypto/x509/by_file.c
crypto/openssl/crypto/x509/x509.h
crypto/openssl/crypto/x509/x509_att.c
crypto/openssl/crypto/x509/x509_cmp.c
crypto/openssl/crypto/x509/x509_d2.c
crypto/openssl/crypto/x509/x509_def.c
crypto/openssl/crypto/x509/x509_err.c
crypto/openssl/crypto/x509/x509_ext.c
crypto/openssl/crypto/x509/x509_lu.c
crypto/openssl/crypto/x509/x509_obj.c
crypto/openssl/crypto/x509/x509_r2x.c
crypto/openssl/crypto/x509/x509_req.c
crypto/openssl/crypto/x509/x509_set.c
crypto/openssl/crypto/x509/x509_trs.c
crypto/openssl/crypto/x509/x509_txt.c
crypto/openssl/crypto/x509/x509_v3.c
crypto/openssl/crypto/x509/x509_vfy.c
crypto/openssl/crypto/x509/x509_vfy.h
crypto/openssl/crypto/x509/x509_vpm.c
crypto/openssl/crypto/x509/x509cset.c
crypto/openssl/crypto/x509/x509name.c
crypto/openssl/crypto/x509/x509rset.c
crypto/openssl/crypto/x509/x509spki.c
crypto/openssl/crypto/x509/x509type.c
crypto/openssl/crypto/x509/x_all.c
crypto/openssl/crypto/x509v3/ext_dat.h
crypto/openssl/crypto/x509v3/pcy_cache.c
crypto/openssl/crypto/x509v3/pcy_data.c
crypto/openssl/crypto/x509v3/pcy_int.h
crypto/openssl/crypto/x509v3/pcy_lib.c
crypto/openssl/crypto/x509v3/pcy_map.c
crypto/openssl/crypto/x509v3/pcy_node.c
crypto/openssl/crypto/x509v3/pcy_tree.c
crypto/openssl/crypto/x509v3/v3_addr.c
crypto/openssl/crypto/x509v3/v3_akey.c
crypto/openssl/crypto/x509v3/v3_akeya.c
crypto/openssl/crypto/x509v3/v3_alt.c
crypto/openssl/crypto/x509v3/v3_asid.c
crypto/openssl/crypto/x509v3/v3_bcons.c
crypto/openssl/crypto/x509v3/v3_bitst.c
crypto/openssl/crypto/x509v3/v3_conf.c
crypto/openssl/crypto/x509v3/v3_cpols.c
crypto/openssl/crypto/x509v3/v3_crld.c
crypto/openssl/crypto/x509v3/v3_enum.c
crypto/openssl/crypto/x509v3/v3_extku.c
crypto/openssl/crypto/x509v3/v3_genn.c
crypto/openssl/crypto/x509v3/v3_ia5.c
crypto/openssl/crypto/x509v3/v3_info.c
crypto/openssl/crypto/x509v3/v3_int.c
crypto/openssl/crypto/x509v3/v3_lib.c
crypto/openssl/crypto/x509v3/v3_ncons.c
crypto/openssl/crypto/x509v3/v3_ocsp.c
crypto/openssl/crypto/x509v3/v3_pci.c
crypto/openssl/crypto/x509v3/v3_pcia.c
crypto/openssl/crypto/x509v3/v3_pcons.c
crypto/openssl/crypto/x509v3/v3_pku.c
crypto/openssl/crypto/x509v3/v3_pmaps.c
crypto/openssl/crypto/x509v3/v3_prn.c
crypto/openssl/crypto/x509v3/v3_purp.c
crypto/openssl/crypto/x509v3/v3_skey.c
crypto/openssl/crypto/x509v3/v3_sxnet.c
crypto/openssl/crypto/x509v3/v3_utl.c
crypto/openssl/crypto/x509v3/v3err.c
crypto/openssl/crypto/x509v3/x509v3.h
crypto/openssl/e_os.h
crypto/openssl/e_os2.h
crypto/openssl/engines/ccgost/e_gost_err.c
crypto/openssl/engines/ccgost/e_gost_err.h
crypto/openssl/engines/ccgost/gost2001.c
crypto/openssl/engines/ccgost/gost2001_keyx.c
crypto/openssl/engines/ccgost/gost2001_keyx.h
crypto/openssl/engines/ccgost/gost89.c
crypto/openssl/engines/ccgost/gost89.h
crypto/openssl/engines/ccgost/gost94_keyx.c
crypto/openssl/engines/ccgost/gost_ameth.c
crypto/openssl/engines/ccgost/gost_asn1.c
crypto/openssl/engines/ccgost/gost_crypt.c
crypto/openssl/engines/ccgost/gost_ctl.c
crypto/openssl/engines/ccgost/gost_eng.c
crypto/openssl/engines/ccgost/gost_keywrap.c
crypto/openssl/engines/ccgost/gost_keywrap.h
crypto/openssl/engines/ccgost/gost_lcl.h
crypto/openssl/engines/ccgost/gost_md.c
crypto/openssl/engines/ccgost/gost_params.c
crypto/openssl/engines/ccgost/gost_params.h
crypto/openssl/engines/ccgost/gost_pmeth.c
crypto/openssl/engines/ccgost/gost_sign.c
crypto/openssl/engines/ccgost/gosthash.c
crypto/openssl/engines/ccgost/gosthash.h
crypto/openssl/engines/ccgost/gostsum.c
crypto/openssl/engines/e_4758cca.c
crypto/openssl/engines/e_4758cca_err.c
crypto/openssl/engines/e_4758cca_err.h
crypto/openssl/engines/e_aep.c
crypto/openssl/engines/e_aep_err.c
crypto/openssl/engines/e_aep_err.h
crypto/openssl/engines/e_atalla.c
crypto/openssl/engines/e_atalla_err.c
crypto/openssl/engines/e_atalla_err.h
crypto/openssl/engines/e_capi.c
crypto/openssl/engines/e_capi_err.c
crypto/openssl/engines/e_capi_err.h
crypto/openssl/engines/e_chil.c
crypto/openssl/engines/e_chil_err.c
crypto/openssl/engines/e_chil_err.h
crypto/openssl/engines/e_cswift.c
crypto/openssl/engines/e_cswift_err.c
crypto/openssl/engines/e_cswift_err.h
crypto/openssl/engines/e_gmp.c
crypto/openssl/engines/e_gmp_err.c
crypto/openssl/engines/e_gmp_err.h
crypto/openssl/engines/e_nuron.c
crypto/openssl/engines/e_nuron_err.c
crypto/openssl/engines/e_nuron_err.h
crypto/openssl/engines/e_padlock.c
crypto/openssl/engines/e_sureware.c
crypto/openssl/engines/e_sureware_err.c
crypto/openssl/engines/e_sureware_err.h
crypto/openssl/engines/e_ubsec.c
crypto/openssl/engines/e_ubsec_err.c
crypto/openssl/engines/e_ubsec_err.h
crypto/openssl/engines/vendor_defns/aep.h
crypto/openssl/engines/vendor_defns/atalla.h
crypto/openssl/engines/vendor_defns/cswift.h
crypto/openssl/engines/vendor_defns/hw_4758_cca.h
crypto/openssl/engines/vendor_defns/hw_ubsec.h
crypto/openssl/engines/vendor_defns/hwcryptohook.h
crypto/openssl/engines/vendor_defns/sureware.h
crypto/openssl/ssl/bio_ssl.c
crypto/openssl/ssl/d1_both.c
crypto/openssl/ssl/d1_clnt.c
crypto/openssl/ssl/d1_enc.c
crypto/openssl/ssl/d1_lib.c
crypto/openssl/ssl/d1_meth.c
crypto/openssl/ssl/d1_pkt.c
crypto/openssl/ssl/d1_srtp.c
crypto/openssl/ssl/d1_srvr.c
crypto/openssl/ssl/dtls1.h
crypto/openssl/ssl/kssl.c
crypto/openssl/ssl/kssl.h
crypto/openssl/ssl/kssl_lcl.h
crypto/openssl/ssl/s23_clnt.c
crypto/openssl/ssl/s23_lib.c
crypto/openssl/ssl/s23_meth.c
crypto/openssl/ssl/s23_pkt.c
crypto/openssl/ssl/s23_srvr.c
crypto/openssl/ssl/s2_clnt.c
crypto/openssl/ssl/s2_enc.c
crypto/openssl/ssl/s2_lib.c
crypto/openssl/ssl/s2_meth.c
crypto/openssl/ssl/s2_pkt.c
crypto/openssl/ssl/s2_srvr.c
crypto/openssl/ssl/s3_both.c
crypto/openssl/ssl/s3_cbc.c
crypto/openssl/ssl/s3_clnt.c
crypto/openssl/ssl/s3_enc.c
crypto/openssl/ssl/s3_lib.c
crypto/openssl/ssl/s3_meth.c
crypto/openssl/ssl/s3_pkt.c
crypto/openssl/ssl/s3_srvr.c
crypto/openssl/ssl/srtp.h
crypto/openssl/ssl/ssl.h
crypto/openssl/ssl/ssl2.h
crypto/openssl/ssl/ssl23.h
crypto/openssl/ssl/ssl3.h
crypto/openssl/ssl/ssl_algs.c
crypto/openssl/ssl/ssl_asn1.c
crypto/openssl/ssl/ssl_cert.c
crypto/openssl/ssl/ssl_ciph.c
crypto/openssl/ssl/ssl_err.c
crypto/openssl/ssl/ssl_err2.c
crypto/openssl/ssl/ssl_lib.c
crypto/openssl/ssl/ssl_locl.h
crypto/openssl/ssl/ssl_rsa.c
crypto/openssl/ssl/ssl_sess.c
crypto/openssl/ssl/ssl_stat.c
crypto/openssl/ssl/ssl_txt.c
crypto/openssl/ssl/ssl_utst.c
crypto/openssl/ssl/t1_clnt.c
crypto/openssl/ssl/t1_enc.c
crypto/openssl/ssl/t1_lib.c
crypto/openssl/ssl/t1_meth.c
crypto/openssl/ssl/t1_reneg.c
crypto/openssl/ssl/t1_srvr.c
crypto/openssl/ssl/tls1.h
crypto/openssl/ssl/tls_srp.c

index d4700d9..74179ab 100644 (file)
@@ -2,6 +2,83 @@
  OpenSSL CHANGES
  _______________
 
+ Changes between 1.0.1l and 1.0.1m [19 Mar 2015]
+
+  *) Segmentation fault in ASN1_TYPE_cmp fix
+
+     The function ASN1_TYPE_cmp will crash with an invalid read if an attempt is
+     made to compare ASN.1 boolean types. Since ASN1_TYPE_cmp is used to check
+     certificate signature algorithm consistency this can be used to crash any
+     certificate verification operation and exploited in a DoS attack. Any
+     application which performs certificate verification is vulnerable including
+     OpenSSL clients and servers which enable client authentication.
+     (CVE-2015-0286)
+     [Stephen Henson]
+
+  *) ASN.1 structure reuse memory corruption fix
+
+     Reusing a structure in ASN.1 parsing may allow an attacker to cause
+     memory corruption via an invalid write. Such reuse is and has been
+     strongly discouraged and is believed to be rare.
+
+     Applications that parse structures containing CHOICE or ANY DEFINED BY
+     components may be affected. Certificate parsing (d2i_X509 and related
+     functions) are however not affected. OpenSSL clients and servers are
+     not affected.
+     (CVE-2015-0287)
+     [Stephen Henson]
+
+  *) PKCS7 NULL pointer dereferences fix
+
+     The PKCS#7 parsing code does not handle missing outer ContentInfo
+     correctly. An attacker can craft malformed ASN.1-encoded PKCS#7 blobs with
+     missing content and trigger a NULL pointer dereference on parsing.
+
+     Applications that verify PKCS#7 signatures, decrypt PKCS#7 data or
+     otherwise parse PKCS#7 structures from untrusted sources are
+     affected. OpenSSL clients and servers are not affected.
+
+     This issue was reported to OpenSSL by Michal Zalewski (Google).
+     (CVE-2015-0289)
+     [Emilia Käsper]
+
+  *) DoS via reachable assert in SSLv2 servers fix
+
+     A malicious client can trigger an OPENSSL_assert (i.e., an abort) in
+     servers that both support SSLv2 and enable export cipher suites by sending
+     a specially crafted SSLv2 CLIENT-MASTER-KEY message.
+
+     This issue was discovered by Sean Burford (Google) and Emilia Käsper
+     (OpenSSL development team).
+     (CVE-2015-0293)
+     [Emilia Käsper]
+
+  *) Use After Free following d2i_ECPrivatekey error fix
+
+     A malformed EC private key file consumed via the d2i_ECPrivateKey function
+     could cause a use after free condition. This, in turn, could cause a double
+     free in several private key parsing functions (such as d2i_PrivateKey
+     or EVP_PKCS82PKEY) and could lead to a DoS attack or memory corruption
+     for applications that receive EC private keys from untrusted
+     sources. This scenario is considered rare.
+
+     This issue was discovered by the BoringSSL project and fixed in their
+     commit 517073cd4b.
+     (CVE-2015-0209)
+     [Matt Caswell]
+
+  *) X509_to_X509_REQ NULL pointer deref fix
+
+     The function X509_to_X509_REQ will crash with a NULL pointer dereference if
+     the certificate key is invalid. This function is rarely used in practice.
+
+     This issue was discovered by Brian Carpenter.
+     (CVE-2015-0288)
+     [Stephen Henson]
+
+  *) Removed the export ciphers from the DEFAULT ciphers
+     [Kurt Roeckx]
+
  Changes between 1.0.1k and 1.0.1l [15 Jan 2015]
 
   *) Build fixes for the Windows and OpenVMS platforms
        Add command line options to s_client/s_server.
      [Steve Henson]
 
- Changes between 1.0.0j and 1.0.0k [5 Feb 2013]
-
-  *) Make the decoding of SSLv3, TLS and DTLS CBC records constant time.
-
-     This addresses the flaw in CBC record processing discovered by 
-     Nadhem Alfardan and Kenny Paterson. Details of this attack can be found
-     at: http://www.isg.rhul.ac.uk/tls/     
-
-     Thanks go to Nadhem Alfardan and Kenny Paterson of the Information
-     Security Group at Royal Holloway, University of London
-     (www.isg.rhul.ac.uk) for discovering this flaw and Adam Langley and
-     Emilia Käsper for the initial patch.
-     (CVE-2013-0169)
-     [Emilia Käsper, Adam Langley, Ben Laurie, Andy Polyakov, Steve Henson]
-
-  *) Return an error when checking OCSP signatures when key is NULL.
-     This fixes a DoS attack. (CVE-2013-0166)
-     [Steve Henson]
-
-  *) Call OCSP Stapling callback after ciphersuite has been chosen, so
-     the right response is stapled. Also change SSL_get_certificate()
-     so it returns the certificate actually sent.
-     See http://rt.openssl.org/Ticket/Display.html?id=2836.
-     (This is a backport)
-     [Rob Stradling <rob.stradling@comodo.com>]
-
-  *) Fix possible deadlock when decoding public keys.
-     [Steve Henson]
-
- Changes between 1.0.0i and 1.0.0j [10 May 2012]
-
-  [NB: OpenSSL 1.0.0i and later 1.0.0 patch levels were released after
-  OpenSSL 1.0.1.]
-
-  *) Sanity check record length before skipping explicit IV in DTLS
-     to fix DoS attack.
-
-     Thanks to Codenomicon for discovering this issue using Fuzz-o-Matic
-     fuzzing as a service testing platform.
-     (CVE-2012-2333)
-     [Steve Henson]
-
-  *) Initialise tkeylen properly when encrypting CMS messages.
-     Thanks to Solar Designer of Openwall for reporting this issue.
-     [Steve Henson]
-
- Changes between 1.0.0h and 1.0.0i [19 Apr 2012]
-
-  *) Check for potentially exploitable overflows in asn1_d2i_read_bio
-     BUF_mem_grow and BUF_mem_grow_clean. Refuse attempts to shrink buffer
-     in CRYPTO_realloc_clean.
-
-     Thanks to Tavis Ormandy, Google Security Team, for discovering this
-     issue and to Adam Langley <agl@chromium.org> for fixing it.
-     (CVE-2012-2110)
-     [Adam Langley (Google), Tavis Ormandy, Google Security Team]
-
  Changes between 1.0.0g and 1.0.0h [12 Mar 2012]
 
   *) Fix MMA (Bleichenbacher's attack on PKCS #1 v1.5 RSA padding) weakness
   *) Change 'Configure' script to enable Camellia by default.
      [NTT]
 
- Changes between 0.9.8x and 0.9.8y [5 Feb 2013]
-
-  *) Make the decoding of SSLv3, TLS and DTLS CBC records constant time.
-
-     This addresses the flaw in CBC record processing discovered by 
-     Nadhem Alfardan and Kenny Paterson. Details of this attack can be found
-     at: http://www.isg.rhul.ac.uk/tls/     
-
-     Thanks go to Nadhem Alfardan and Kenny Paterson of the Information
-     Security Group at Royal Holloway, University of London
-     (www.isg.rhul.ac.uk) for discovering this flaw and Adam Langley and
-     Emilia Käsper for the initial patch.
-     (CVE-2013-0169)
-     [Emilia Käsper, Adam Langley, Ben Laurie, Andy Polyakov, Steve Henson]
-
-  *) Return an error when checking OCSP signatures when key is NULL.
-     This fixes a DoS attack. (CVE-2013-0166)
-     [Steve Henson]
-
-  *) Call OCSP Stapling callback after ciphersuite has been chosen, so
-     the right response is stapled. Also change SSL_get_certificate()
-     so it returns the certificate actually sent.
-     See http://rt.openssl.org/Ticket/Display.html?id=2836.
-     (This is a backport)
-     [Rob Stradling <rob.stradling@comodo.com>]
-
-  *) Fix possible deadlock when decoding public keys.
-     [Steve Henson]
-
- Changes between 0.9.8w and 0.9.8x [10 May 2012]
-
-  *) Sanity check record length before skipping explicit IV in DTLS
-     to fix DoS attack.
-
-     Thanks to Codenomicon for discovering this issue using Fuzz-o-Matic
-     fuzzing as a service testing platform.
-     (CVE-2012-2333)
-     [Steve Henson]
-
-  *) Initialise tkeylen properly when encrypting CMS messages.
-     Thanks to Solar Designer of Openwall for reporting this issue.
-     [Steve Henson]
-
- Changes between 0.9.8v and 0.9.8w [23 Apr 2012]
-
-  *) The fix for CVE-2012-2110 did not take into account that the 
-     'len' argument to BUF_MEM_grow and BUF_MEM_grow_clean is an
-     int in OpenSSL 0.9.8, making it still vulnerable. Fix by 
-     rejecting negative len parameter. (CVE-2012-2131)
-     [Tomas Hoger <thoger@redhat.com>]
-
- Changes between 0.9.8u and 0.9.8v [19 Apr 2012]
-
-  *) Check for potentially exploitable overflows in asn1_d2i_read_bio
-     BUF_mem_grow and BUF_mem_grow_clean. Refuse attempts to shrink buffer
-     in CRYPTO_realloc_clean.
-
-     Thanks to Tavis Ormandy, Google Security Team, for discovering this
-     issue and to Adam Langley <agl@chromium.org> for fixing it.
-     (CVE-2012-2110)
-     [Adam Langley (Google), Tavis Ormandy, Google Security Team]
-
- Changes between 0.9.8t and 0.9.8u [12 Mar 2012]
-
-  *) Fix MMA (Bleichenbacher's attack on PKCS #1 v1.5 RSA padding) weakness
-     in CMS and PKCS7 code. When RSA decryption fails use a random key for
-     content decryption and always return the same error. Note: this attack
-     needs on average 2^20 messages so it only affects automated senders. The
-     old behaviour can be reenabled in the CMS code by setting the
-     CMS_DEBUG_DECRYPT flag: this is useful for debugging and testing where
-     an MMA defence is not necessary.
-     Thanks to Ivan Nestlerode <inestlerode@us.ibm.com> for discovering
-     this issue. (CVE-2012-0884)
-     [Steve Henson]
-
-  *) Fix CVE-2011-4619: make sure we really are receiving a 
-     client hello before rejecting multiple SGC restarts. Thanks to
-     Ivan Nestlerode <inestlerode@us.ibm.com> for discovering this bug.
-     [Steve Henson]
-
- Changes between 0.9.8s and 0.9.8t [18 Jan 2012]
-
-  *) Fix for DTLS DoS issue introduced by fix for CVE-2011-4109.
-     Thanks to Antonio Martin, Enterprise Secure Access Research and
-     Development, Cisco Systems, Inc. for discovering this bug and
-     preparing a fix. (CVE-2012-0050)
-     [Antonio Martin]
-
- Changes between 0.9.8r and 0.9.8s [4 Jan 2012]
-
-  *) Nadhem Alfardan and Kenny Paterson have discovered an extension
-     of the Vaudenay padding oracle attack on CBC mode encryption
-     which enables an efficient plaintext recovery attack against
-     the OpenSSL implementation of DTLS. Their attack exploits timing
-     differences arising during decryption processing. A research
-     paper describing this attack can be found at:
-                  http://www.isg.rhul.ac.uk/~kp/dtls.pdf
-     Thanks go to Nadhem Alfardan and Kenny Paterson of the Information
-     Security Group at Royal Holloway, University of London
-     (www.isg.rhul.ac.uk) for discovering this flaw and to Robin Seggelmann
-     <seggelmann@fh-muenster.de> and Michael Tuexen <tuexen@fh-muenster.de>
-     for preparing the fix. (CVE-2011-4108)
-     [Robin Seggelmann, Michael Tuexen]
-
-  *) Stop policy check failure freeing same buffer twice. (CVE-2011-4109)
-     [Ben Laurie, Kasper <ekasper@google.com>]
-
-  *) Clear bytes used for block padding of SSL 3.0 records.
-     (CVE-2011-4576)
-     [Adam Langley (Google)]
-
-  *) Only allow one SGC handshake restart for SSL/TLS. Thanks to George
-     Kadianakis <desnacked@gmail.com> for discovering this issue and
-     Adam Langley for preparing the fix. (CVE-2011-4619)
-     [Adam Langley (Google)]
-  *) Prevent malformed RFC3779 data triggering an assertion failure.
-     Thanks to Andrew Chi, BBN Technologies, for discovering the flaw
-     and Rob Austein <sra@hactrn.net> for fixing it. (CVE-2011-4577)
-     [Rob Austein <sra@hactrn.net>]
-
-  *) Fix ssl_ciph.c set-up race.
-     [Adam Langley (Google)]
-
-  *) Fix spurious failures in ecdsatest.c.
-     [Emilia Käsper (Google)]
-
-  *) Fix the BIO_f_buffer() implementation (which was mixing different
-     interpretations of the '..._len' fields).
-     [Adam Langley (Google)]
-
-  *) Fix handling of BN_BLINDING: now BN_BLINDING_invert_ex (rather than
-     BN_BLINDING_invert_ex) calls BN_BLINDING_update, ensuring that concurrent
-     threads won't reuse the same blinding coefficients.
-
-     This also avoids the need to obtain the CRYPTO_LOCK_RSA_BLINDING
-     lock to call BN_BLINDING_invert_ex, and avoids one use of
-     BN_BLINDING_update for each BN_BLINDING structure (previously,
-     the last update always remained unused).
-     [Emilia Käsper (Google)]
-
-  *) Fix SSL memory handling for (EC)DH ciphersuites, in particular
-     for multi-threaded use of ECDH.
-     [Adam Langley (Google)]
-
-  *) Fix x509_name_ex_d2i memory leak on bad inputs.
-     [Bodo Moeller]
-
-  *) Add protection against ECDSA timing attacks as mentioned in the paper
-     by Billy Bob Brumley and Nicola Tuveri, see:
-
-       http://eprint.iacr.org/2011/232.pdf
-
-     [Billy Bob Brumley and Nicola Tuveri]
-
- Changes between 0.9.8q and 0.9.8r [8 Feb 2011]
-
-  *) Fix parsing of OCSP stapling ClientHello extension. CVE-2011-0014
-     [Neel Mehta, Adam Langley, Bodo Moeller (Google)]
-
-  *) Fix bug in string printing code: if *any* escaping is enabled we must
-     escape the escape character (backslash) or the resulting string is
-     ambiguous.
-     [Steve Henson]
-
- Changes between 0.9.8p and 0.9.8q [2 Dec 2010]
-
-  *) Disable code workaround for ancient and obsolete Netscape browsers
-     and servers: an attacker can use it in a ciphersuite downgrade attack.
-     Thanks to Martin Rex for discovering this bug. CVE-2010-4180
-     [Steve Henson]
-
-  *) Fixed J-PAKE implementation error, originally discovered by
-     Sebastien Martini, further info and confirmation from Stefan
-     Arentz and Feng Hao. Note that this fix is a security fix. CVE-2010-4252
-     [Ben Laurie]
-
- Changes between 0.9.8o and 0.9.8p [16 Nov 2010]
-
-  *) Fix extension code to avoid race conditions which can result in a buffer
-     overrun vulnerability: resumed sessions must not be modified as they can
-     be shared by multiple threads. CVE-2010-3864
-     [Steve Henson]
-
-  *) Fix for double free bug in ssl/s3_clnt.c CVE-2010-2939
-     [Steve Henson]
-
-  *) Don't reencode certificate when calculating signature: cache and use
-     the original encoding instead. This makes signature verification of
-     some broken encodings work correctly.
-     [Steve Henson]
-
-  *) ec2_GF2m_simple_mul bugfix: compute correct result if the output EC_POINT
-     is also one of the inputs.
-     [Emilia Käsper <emilia.kasper@esat.kuleuven.be> (Google)]
-
-  *) Don't repeatedly append PBE algorithms to table if they already exist.
-     Sort table on each new add. This effectively makes the table read only
-     after all algorithms are added and subsequent calls to PKCS12_pbe_add
-     etc are non-op.
-     [Steve Henson]
-
- Changes between 0.9.8n and 0.9.8o [01 Jun 2010]
-
-  [NB: OpenSSL 0.9.8o and later 0.9.8 patch levels were released after
-  OpenSSL 1.0.0.]
-
-  *) Correct a typo in the CMS ASN1 module which can result in invalid memory
-     access or freeing data twice (CVE-2010-0742)
-     [Steve Henson, Ronald Moesbergen <intercommit@gmail.com>]
-
-  *) Add SHA2 algorithms to SSL_library_init(). SHA2 is becoming far more
-     common in certificates and some applications which only call
-     SSL_library_init and not OpenSSL_add_all_algorithms() will fail.
-     [Steve Henson]
-
-  *) VMS fixes: 
-     Reduce copying into .apps and .test in makevms.com
-     Don't try to use blank CA certificate in CA.com
-     Allow use of C files from original directories in maketests.com
-     [Steven M. Schweda" <sms@antinode.info>]
-
  Changes between 0.9.8m and 0.9.8n [24 Mar 2010]
 
   *) When rejecting SSL/TLS records due to an incorrect version number, never
index 4ff2775..12616d2 100644 (file)
@@ -5,6 +5,16 @@
   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 1.0.1l and OpenSSL 1.0.1m [19 Mar 2015]
+
+      o Segmentation fault in ASN1_TYPE_cmp fix (CVE-2015-0286)
+      o ASN.1 structure reuse memory corruption fix (CVE-2015-0287)
+      o PKCS7 NULL pointer dereferences fix (CVE-2015-0289)
+      o DoS via reachable assert in SSLv2 servers fix (CVE-2015-0293)
+      o Use After Free following d2i_ECPrivatekey error fix (CVE-2015-0209)
+      o X509_to_X509_REQ NULL pointer deref fix (CVE-2015-0288)
+      o Removed the export ciphers from the DEFAULT ciphers
+
   Major changes between OpenSSL 1.0.1k and OpenSSL 1.0.1l [15 Jan 2015]
 
       o Build fixes for the Windows and OpenVMS platforms
       o Preliminary FIPS capability for unvalidated 2.0 FIPS module.
       o SRP support.
 
-  Major changes between OpenSSL 1.0.0j and OpenSSL 1.0.0k [5 Feb 2013]:
-
-      o Fix for SSL/TLS/DTLS CBC plaintext recovery attack CVE-2013-0169
-      o Fix OCSP bad key DoS attack CVE-2013-0166
-
-  Major changes between OpenSSL 1.0.0i and OpenSSL 1.0.0j [10 May 2012]:
-
-      o Fix DTLS record length checking bug CVE-2012-2333
-
-  Major changes between OpenSSL 1.0.0h and OpenSSL 1.0.0i [19 Apr 2012]:
-
-      o Fix for ASN1 overflow bug CVE-2012-2110
-
   Major changes between OpenSSL 1.0.0g and OpenSSL 1.0.0h [12 Mar 2012]:
 
       o Fix for CMS/PKCS#7 MMA CVE-2012-0884
       o Opaque PRF Input TLS extension support.
       o Updated time routines to avoid OS limitations.
 
-  Major changes between OpenSSL 0.9.8x and OpenSSL 0.9.8y [5 Feb 2013]:
-
-      o Fix for SSL/TLS/DTLS CBC plaintext recovery attack CVE-2013-0169
-      o Fix OCSP bad key DoS attack CVE-2013-0166
-
-  Major changes between OpenSSL 0.9.8w and OpenSSL 0.9.8x [10 May 2012]:
-
-      o Fix DTLS record length checking bug CVE-2012-2333
-
-  Major changes between OpenSSL 0.9.8v and OpenSSL 0.9.8w [23 Apr 2012]:
-
-      o Fix for CVE-2012-2131 (corrected fix for 0.9.8 and CVE-2012-2110)
-
-  Major changes between OpenSSL 0.9.8u and OpenSSL 0.9.8v [19 Apr 2012]:
-
-      o Fix for ASN1 overflow bug CVE-2012-2110
-
-  Major changes between OpenSSL 0.9.8t and OpenSSL 0.9.8u [12 Mar 2012]:
-
-      o Fix for CMS/PKCS#7 MMA CVE-2012-0884
-      o Corrected fix for CVE-2011-4619
-      o Various DTLS fixes.
-
-  Major changes between OpenSSL 0.9.8s and OpenSSL 0.9.8t [18 Jan 2012]:
-
-      o Fix for DTLS DoS issue CVE-2012-0050
-
-  Major changes between OpenSSL 0.9.8r and OpenSSL 0.9.8s [4 Jan 2012]:
-
-      o Fix for DTLS plaintext recovery attack CVE-2011-4108
-      o Fix policy check double free error CVE-2011-4109
-      o Clear block padding bytes of SSL 3.0 records CVE-2011-4576
-      o Only allow one SGC handshake restart for SSL/TLS CVE-2011-4619
-      o Check for malformed RFC3779 data CVE-2011-4577
-
-  Major changes between OpenSSL 0.9.8q and OpenSSL 0.9.8r [8 Feb 2011]:
-
-      o Fix for security issue CVE-2011-0014
-
-  Major changes between OpenSSL 0.9.8p and OpenSSL 0.9.8q [2 Dec 2010]:
-
-      o Fix for security issue CVE-2010-4180
-      o Fix for CVE-2010-4252
-
-  Major changes between OpenSSL 0.9.8o and OpenSSL 0.9.8p [16 Nov 2010]:
-
-      o Fix for security issue CVE-2010-3864.
-
-  Major changes between OpenSSL 0.9.8n and OpenSSL 0.9.8o [1 Jun 2010]:
-
-      o Fix for security issue CVE-2010-0742.
-      o Various DTLS fixes.
-      o Recognise SHA2 certificates if only SSL algorithms added.
-      o Fix for no-rc4 compilation.
-      o Chil ENGINE unload workaround.
-
   Major changes between OpenSSL 0.9.8m and OpenSSL 0.9.8n [24 Mar 2010]:
 
       o CFB cipher definition fixes.
index ef7eec7..ecdcfb2 100644 (file)
@@ -1,5 +1,5 @@
 
- OpenSSL 1.0.1l 15 Jan 2015
+ OpenSSL 1.0.1m 19 Mar 2015
 
  Copyright (c) 1998-2011 The OpenSSL Project
  Copyright (c) 1995-1998 Eric A. Young, Tim J. Hudson
index 0f4eb6f..c9d1f3f 100644 (file)
@@ -204,6 +204,7 @@ crypto/err/Makefile
 crypto/err/openssl.ec
 crypto/evp/Makefile
 crypto/evp/e_dsa.c
+crypto/evp/evp_extra_test.c
 crypto/evp/evp_test.c
 crypto/evp/evptests.txt
 crypto/fips_err.h
@@ -403,6 +404,7 @@ util/domd
 util/err-ins.pl
 util/files.pl
 util/fixNT.sh
+util/indent.pro
 util/install.sh
 util/libeay.num
 util/mk1mf.pl
@@ -415,6 +417,7 @@ util/mkfiles.pl
 util/mklink.pl
 util/mkrc.pl
 util/mkstack.pl
+util/openssl-format-source
 util/opensslwrap.sh
 util/perlpath.pl
 util/pl/
@@ -428,5 +431,6 @@ util/sp-diff.pl
 util/speed.sh
 util/src-dep.pl
 util/ssleay.num
+util/su-filter.pl
 util/tab_num.pl
 util/x86asm.sh
index b7b6128..595fc78 100644 (file)
@@ -5,21 +5,21 @@
  * This package is an SSL implementation written
  * by Eric Young (eay@cryptsoft.com).
  * 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 (tjh@cryptsoft.com).
- * 
+ *
  * 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:
  *     Eric Young (eay@cryptsoft.com)"
  *    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 
+ * 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 (tjh@cryptsoft.com)"
- * 
+ *
  * 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
@@ -49,7 +49,7 @@
  * 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
@@ -63,7 +63,7 @@
  * are met:
  *
  * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer. 
+ *    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
 #include <openssl/bio.h>
 #include <openssl/rand.h>
 
-
 static int seeded = 0;
 static int egdsocket = 0;
 
 int app_RAND_load_file(const char *file, BIO *bio_e, int dont_warn)
-       {
-       int consider_randfile = (file == NULL);
-       char buffer[200];
-       
+{
+    int consider_randfile = (file == NULL);
+    char buffer[200];
+
 #ifdef OPENSSL_SYS_WINDOWS
-       BIO_printf(bio_e,"Loading 'screen' into random state -");
-       BIO_flush(bio_e);
-       RAND_screen();
-       BIO_printf(bio_e," done\n");
+    BIO_printf(bio_e, "Loading 'screen' into random state -");
+    BIO_flush(bio_e);
+    RAND_screen();
+    BIO_printf(bio_e, " done\n");
 #endif
 
-       if (file == NULL)
-               file = RAND_file_name(buffer, sizeof buffer);
-       else if (RAND_egd(file) > 0)
-               {
-               /* we try if the given filename is an EGD socket.
-                  if it is, we don't write anything back to the file. */
-               egdsocket = 1;
-               return 1;
-               }
-       if (file == NULL || !RAND_load_file(file, -1))
-               {
-               if (RAND_status() == 0)
-                       {
-                       if (!dont_warn)
-                               {
-                               BIO_printf(bio_e,"unable to load 'random state'\n");
-                               BIO_printf(bio_e,"This means that the random number generator has not been seeded\n");
-                               BIO_printf(bio_e,"with much random data.\n");
-                               if (consider_randfile) /* explanation does not apply when a file is explicitly named */
-                                       {
-                                       BIO_printf(bio_e,"Consider setting the RANDFILE environment variable to point at a file that\n");
-                                       BIO_printf(bio_e,"'random' data can be kept in (the file will be overwritten).\n");
-                                       }
-                               }
-                       return 0;
-                       }
-               }
-       seeded = 1;
-       return 1;
-       }
+    if (file == NULL)
+        file = RAND_file_name(buffer, sizeof buffer);
+    else if (RAND_egd(file) > 0) {
+        /*
+         * we try if the given filename is an EGD socket. if it is, we don't
+         * write anything back to the file.
+         */
+        egdsocket = 1;
+        return 1;
+    }
+    if (file == NULL || !RAND_load_file(file, -1)) {
+        if (RAND_status() == 0) {
+            if (!dont_warn) {
+                BIO_printf(bio_e, "unable to load 'random state'\n");
+                BIO_printf(bio_e,
+                           "This means that the random number generator has not been seeded\n");
+                BIO_printf(bio_e, "with much random data.\n");
+                if (consider_randfile) { /* explanation does not apply when a
+                                          * file is explicitly named */
+                    BIO_printf(bio_e,
+                               "Consider setting the RANDFILE environment variable to point at a file that\n");
+                    BIO_printf(bio_e,
+                               "'random' data can be kept in (the file will be overwritten).\n");
+                }
+            }
+            return 0;
+        }
+    }
+    seeded = 1;
+    return 1;
+}
 
 long app_RAND_load_files(char *name)
-       {
-       char *p,*n;
-       int last;
-       long tot=0;
-       int egd;
-       
-       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;
+{
+    char *p, *n;
+    int last;
+    long tot = 0;
+    int egd;
 
-               egd=RAND_egd(n);
-               if (egd > 0)
-                       tot+=egd;
-               else
-                       tot+=RAND_load_file(n,-1);
-               if (last) break;
-               }
-       if (tot > 512)
-               app_RAND_allow_write_file();
-       return(tot);
-       }
+    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;
+
+        egd = RAND_egd(n);
+        if (egd > 0)
+            tot += egd;
+        else
+            tot += RAND_load_file(n, -1);
+        if (last)
+            break;
+    }
+    if (tot > 512)
+        app_RAND_allow_write_file();
+    return (tot);
+}
 
 int app_RAND_write_file(const char *file, BIO *bio_e)
-       {
-       char buffer[200];
-       
-       if (egdsocket || !seeded)
-               /* If we did not manage to read the seed file,
-                * we should not write a low-entropy seed file back --
-                * it would suppress a crucial warning the next time
-                * we want to use it. */
-               return 0;
+{
+    char buffer[200];
+
+    if (egdsocket || !seeded)
+        /*
+         * If we did not manage to read the seed file, we should not write a
+         * low-entropy seed file back -- it would suppress a crucial warning
+         * the next time we want to use it.
+         */
+        return 0;
 
-       if (file == NULL)
-               file = RAND_file_name(buffer, sizeof buffer);
-       if (file == NULL || !RAND_write_file(file))
-               {
-               BIO_printf(bio_e,"unable to write 'random state'\n");
-               return 0;
-               }
-       return 1;
-       }
+    if (file == NULL)
+        file = RAND_file_name(buffer, sizeof buffer);
+    if (file == NULL || !RAND_write_file(file)) {
+        BIO_printf(bio_e, "unable to write 'random state'\n");
+        return 0;
+    }
+    return 1;
+}
 
 void app_RAND_allow_write_file(void)
-       {
-       seeded = 1;
-       }
+{
+    seeded = 1;
+}
index 3e18289..9862afd 100644 (file)
@@ -5,21 +5,21 @@
  * This package is an SSL implementation written
  * by Eric Young (eay@cryptsoft.com).
  * 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 (tjh@cryptsoft.com).
- * 
+ *
  * 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:
  *     Eric Young (eay@cryptsoft.com)"
  *    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 
+ * 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 (tjh@cryptsoft.com)"
- * 
+ *
  * 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
@@ -49,7 +49,7 @@
  * 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
@@ -63,7 +63,7 @@
  * are met:
  *
  * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer. 
+ *    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
  */
 
 #if !defined(_POSIX_C_SOURCE) && defined(OPENSSL_SYS_VMS)
-#define _POSIX_C_SOURCE 2      /* On VMS, you need to define this to get
-                                  the declaration of fileno().  The value
-                                  2 is to make sure no function defined
-                                  in POSIX-2 is left undefined. */
+/*
+ * On VMS, you need to define this to get the declaration of fileno().  The
+ * value 2 is to make sure no function defined in POSIX-2 is left undefined.
+ */
+# define _POSIX_C_SOURCE 2
 #endif
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #if !defined(OPENSSL_SYSNAME_WIN32) && !defined(NETWARE_CLIB)
-#include <strings.h>
+# include <strings.h>
 #endif
 #include <sys/types.h>
 #include <ctype.h>
 #include <openssl/ui.h>
 #include <openssl/safestack.h>
 #ifndef OPENSSL_NO_ENGINE
-#include <openssl/engine.h>
+# include <openssl/engine.h>
 #endif
 #ifndef OPENSSL_NO_RSA
-#include <openssl/rsa.h>
+# include <openssl/rsa.h>
 #endif
 #include <openssl/bn.h>
 #ifndef OPENSSL_NO_JPAKE
-#include <openssl/jpake.h>
+# include <openssl/jpake.h>
 #endif
 
 #define NON_MAIN
 
 #ifdef _WIN32
 static int WIN32_rename(const char *from, const char *to);
-#define rename(from,to) WIN32_rename((from),(to))
+# define rename(from,to) WIN32_rename((from),(to))
 #endif
 
 typedef struct {
-       const char *name;
-       unsigned long flag;
-       unsigned long mask;
+    const char *name;
+    unsigned long flag;
+    unsigned long mask;
 } NAME_EX_TBL;
 
 static UI_METHOD *ui_method = NULL;
 
-static int set_table_opts(unsigned long *flags, const char *arg, const NAME_EX_TBL *in_tbl);
-static int set_multi_opts(unsigned long *flags, const char *arg, const NAME_EX_TBL *in_tbl);
+static int set_table_opts(unsigned long *flags, const char *arg,
+                          const NAME_EX_TBL * in_tbl);
+static int set_multi_opts(unsigned long *flags, const char *arg,
+                          const NAME_EX_TBL * in_tbl);
 
 #if !defined(OPENSSL_NO_RC4) && !defined(OPENSSL_NO_RSA)
 /* Looks like this stuff is worth moving into separate function */
-static EVP_PKEY *
-load_netscape_key(BIO *err, BIO *key, const char *file,
-               const char *key_descrip, int format);
+static EVP_PKEY *load_netscape_key(BIO *err, BIO *key, const char *file,
+                                   const char *key_descrip, int format);
 #endif
 
 int app_init(long mesgwin);
-#ifdef undef /* never finished - probably never will be :-) */
+#ifdef undef                    /* never finished - probably never will be
+                                 * :-) */
 int args_from_file(char *file, int *argc, char **argv[])
-       {
-       FILE *fp;
-       int num,i;
-       unsigned int len;
-       static char *buf=NULL;
-       static char **arg=NULL;
-       char *p;
-
-       fp=fopen(file,"r");
-       if (fp == NULL)
-               return(0);
-
-       if (fseek(fp,0,SEEK_END)==0)
-               len=ftell(fp), rewind(fp);
-       else    len=-1;
-       if (len<=0)
-               {
-               fclose(fp);
-               return(0);
-               }
-
-       *argc=0;
-       *argv=NULL;
-
-       if (buf != NULL) OPENSSL_free(buf);
-       buf=(char *)OPENSSL_malloc(len+1);
-       if (buf == NULL) return(0);
-
-       len=fread(buf,1,len,fp);
-       if (len <= 1) return(0);
-       buf[len]='\0';
-
-       i=0;
-       for (p=buf; *p; p++)
-               if (*p == '\n') i++;
-       if (arg != NULL) OPENSSL_free(arg);
-       arg=(char **)OPENSSL_malloc(sizeof(char *)*(i*2));
-
-       *argv=arg;
-       num=0;
-       p=buf;
-       for (;;)
-               {
-               if (!*p) break;
-               if (*p == '#') /* comment line */
-                       {
-                       while (*p && (*p != '\n')) p++;
-                       continue;
-                       }
-               /* else we have a line */
-               *(arg++)=p;
-               num++;
-               while (*p && ((*p != ' ') && (*p != '\t') && (*p != '\n')))
-                       p++;
-               if (!*p) break;
-               if (*p == '\n')
-                       {
-                       *(p++)='\0';
-                       continue;
-                       }
-               /* else it is a tab or space */
-               p++;
-               while (*p && ((*p == ' ') || (*p == '\t') || (*p == '\n')))
-                       p++;
-               if (!*p) break;
-               if (*p == '\n')
-                       {
-                       p++;
-                       continue;
-                       }
-               *(arg++)=p++;
-               num++;
-               while (*p && (*p != '\n')) p++;
-               if (!*p) break;
-               /* else *p == '\n' */
-               *(p++)='\0';
-               }
-       *argc=num;
-       return(1);
-       }
+{
+    FILE *fp;
+    int num, i;
+    unsigned int len;
+    static char *buf = NULL;
+    static char **arg = NULL;
+    char *p;
+
+    fp = fopen(file, "r");
+    if (fp == NULL)
+        return (0);
+
+    if (fseek(fp, 0, SEEK_END) == 0)
+        len = ftell(fp), rewind(fp);
+    else
+        len = -1;
+    if (len <= 0) {
+        fclose(fp);
+        return (0);
+    }
+
+    *argc = 0;
+    *argv = NULL;
+
+    if (buf != NULL)
+        OPENSSL_free(buf);
+    buf = (char *)OPENSSL_malloc(len + 1);
+    if (buf == NULL)
+        return (0);
+
+    len = fread(buf, 1, len, fp);
+    if (len <= 1)
+        return (0);
+    buf[len] = '\0';
+
+    i = 0;
+    for (p = buf; *p; p++)
+        if (*p == '\n')
+            i++;
+    if (arg != NULL)
+        OPENSSL_free(arg);
+    arg = (char **)OPENSSL_malloc(sizeof(char *) * (i * 2));
+
+    *argv = arg;
+    num = 0;
+    p = buf;
+    for (;;) {
+        if (!*p)
+            break;
+        if (*p == '#') {        /* comment line */
+            while (*p && (*p != '\n'))
+                p++;
+            continue;
+        }
+        /* else we have a line */
+        *(arg++) = p;
+        num++;
+        while (*p && ((*p != ' ') && (*p != '\t') && (*p != '\n')))
+            p++;
+        if (!*p)
+            break;
+        if (*p == '\n') {
+            *(p++) = '\0';
+            continue;
+        }
+        /* else it is a tab or space */
+        p++;
+        while (*p && ((*p == ' ') || (*p == '\t') || (*p == '\n')))
+            p++;
+        if (!*p)
+            break;
+        if (*p == '\n') {
+            p++;
+            continue;
+        }
+        *(arg++) = p++;
+        num++;
+        while (*p && (*p != '\n'))
+            p++;
+        if (!*p)
+            break;
+        /* else *p == '\n' */
+        *(p++) = '\0';
+    }
+    *argc = num;
+    return (1);
+}
 #endif
 
 int str2fmt(char *s)
-       {
-       if (s == NULL)
-               return FORMAT_UNDEF;
-       if      ((*s == 'D') || (*s == 'd'))
-               return(FORMAT_ASN1);
-       else if ((*s == 'T') || (*s == 't'))
-               return(FORMAT_TEXT);
-       else if ((*s == 'N') || (*s == 'n'))
-               return(FORMAT_NETSCAPE);
-       else if ((*s == 'S') || (*s == 's'))
-               return(FORMAT_SMIME);
-       else if ((*s == 'M') || (*s == 'm'))
-               return(FORMAT_MSBLOB);
-       else if ((*s == '1')
-               || (strcmp(s,"PKCS12") == 0) || (strcmp(s,"pkcs12") == 0)
-               || (strcmp(s,"P12") == 0) || (strcmp(s,"p12") == 0))
-               return(FORMAT_PKCS12);
-       else if ((*s == 'E') || (*s == 'e'))
-               return(FORMAT_ENGINE);
-       else if ((*s == 'P') || (*s == 'p'))
-               {
-               if (s[1] == 'V' || s[1] == 'v')
-                       return FORMAT_PVK;
-               else
-                       return(FORMAT_PEM);
-               }
-       else
-               return(FORMAT_UNDEF);
-       }
+{
+    if (s == NULL)
+        return FORMAT_UNDEF;
+    if ((*s == 'D') || (*s == 'd'))
+        return (FORMAT_ASN1);
+    else if ((*s == 'T') || (*s == 't'))
+        return (FORMAT_TEXT);
+    else if ((*s == 'N') || (*s == 'n'))
+        return (FORMAT_NETSCAPE);
+    else if ((*s == 'S') || (*s == 's'))
+        return (FORMAT_SMIME);
+    else if ((*s == 'M') || (*s == 'm'))
+        return (FORMAT_MSBLOB);
+    else if ((*s == '1')
+             || (strcmp(s, "PKCS12") == 0) || (strcmp(s, "pkcs12") == 0)
+             || (strcmp(s, "P12") == 0) || (strcmp(s, "p12") == 0))
+        return (FORMAT_PKCS12);
+    else if ((*s == 'E') || (*s == 'e'))
+        return (FORMAT_ENGINE);
+    else if ((*s == 'P') || (*s == 'p')) {
+        if (s[1] == 'V' || s[1] == 'v')
+            return FORMAT_PVK;
+        else
+            return (FORMAT_PEM);
+    } else
+        return (FORMAT_UNDEF);
+}
 
 #if defined(OPENSSL_SYS_MSDOS) || defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_WIN16) || defined(OPENSSL_SYS_NETWARE)
 void program_name(char *in, char *out, int size)
-       {
-       int i,n;
-       char *p=NULL;
-
-       n=strlen(in);
-       /* find the last '/', '\' or ':' */
-       for (i=n-1; i>0; i--)
-               {
-               if ((in[i] == '/') || (in[i] == '\\') || (in[i] == ':'))
-                       {
-                       p= &(in[i+1]);
-                       break;
-                       }
-               }
-       if (p == NULL)
-               p=in;
-       n=strlen(p);
-
-#if defined(OPENSSL_SYS_NETWARE)
-   /* strip off trailing .nlm if present. */
-   if ((n > 4) && (p[n-4] == '.') &&
-      ((p[n-3] == 'n') || (p[n-3] == 'N')) &&
-      ((p[n-2] == 'l') || (p[n-2] == 'L')) &&
-      ((p[n-1] == 'm') || (p[n-1] == 'M')))
-      n-=4;
-#else
-       /* strip off trailing .exe if present. */
-       if ((n > 4) && (p[n-4] == '.') &&
-               ((p[n-3] == 'e') || (p[n-3] == 'E')) &&
-               ((p[n-2] == 'x') || (p[n-2] == 'X')) &&
-               ((p[n-1] == 'e') || (p[n-1] == 'E')))
-               n-=4;
-#endif
+{
+    int i, n;
+    char *p = NULL;
+
+    n = strlen(in);
+    /* find the last '/', '\' or ':' */
+    for (i = n - 1; i > 0; i--) {
+        if ((in[i] == '/') || (in[i] == '\\') || (in[i] == ':')) {
+            p = &(in[i + 1]);
+            break;
+        }
+    }
+    if (p == NULL)
+        p = in;
+    n = strlen(p);
+
+# if defined(OPENSSL_SYS_NETWARE)
+    /* strip off trailing .nlm if present. */
+    if ((n > 4) && (p[n - 4] == '.') &&
+        ((p[n - 3] == 'n') || (p[n - 3] == 'N')) &&
+        ((p[n - 2] == 'l') || (p[n - 2] == 'L')) &&
+        ((p[n - 1] == 'm') || (p[n - 1] == 'M')))
+        n -= 4;
+# else
+    /* strip off trailing .exe if present. */
+    if ((n > 4) && (p[n - 4] == '.') &&
+        ((p[n - 3] == 'e') || (p[n - 3] == 'E')) &&
+        ((p[n - 2] == 'x') || (p[n - 2] == 'X')) &&
+        ((p[n - 1] == 'e') || (p[n - 1] == 'E')))
+        n -= 4;
+# endif
 
-       if (n > size-1)
-               n=size-1;
-
-       for (i=0; i<n; i++)
-               {
-               if ((p[i] >= 'A') && (p[i] <= 'Z'))
-                       out[i]=p[i]-'A'+'a';
-               else
-                       out[i]=p[i];
-               }
-       out[n]='\0';
-       }
+    if (n > size - 1)
+        n = size - 1;
+
+    for (i = 0; i < n; i++) {
+        if ((p[i] >= 'A') && (p[i] <= 'Z'))
+            out[i] = p[i] - 'A' + 'a';
+        else
+            out[i] = p[i];
+    }
+    out[n] = '\0';
+}
 #else
-#ifdef OPENSSL_SYS_VMS
+# ifdef OPENSSL_SYS_VMS
 void program_name(char *in, char *out, int size)
-       {
-       char *p=in, *q;
-       char *chars=":]>";
-
-       while(*chars != '\0')
-               {
-               q=strrchr(p,*chars);
-               if (q > p)
-                       p = q + 1;
-               chars++;
-               }
-
-       q=strrchr(p,'.');
-       if (q == NULL)
-               q = p + strlen(p);
-       strncpy(out,p,size-1);
-       if (q-p >= size)
-               {
-               out[size-1]='\0';
-               }
-       else
-               {
-               out[q-p]='\0';
-               }
-       }
-#else
+{
+    char *p = in, *q;
+    char *chars = ":]>";
+
+    while (*chars != '\0') {
+        q = strrchr(p, *chars);
+        if (q > p)
+            p = q + 1;
+        chars++;
+    }
+
+    q = strrchr(p, '.');
+    if (q == NULL)
+        q = p + strlen(p);
+    strncpy(out, p, size - 1);
+    if (q - p >= size) {
+        out[size - 1] = '\0';
+    } else {
+        out[q - p] = '\0';
+    }
+}
+# else
 void program_name(char *in, char *out, int size)
-       {
-       char *p;
-
-       p=strrchr(in,'/');
-       if (p != NULL)
-               p++;
-       else
-               p=in;
-       BUF_strlcpy(out,p,size);
-       }
-#endif
+{
+    char *p;
+
+    p = strrchr(in, '/');
+    if (p != NULL)
+        p++;
+    else
+        p = in;
+    BUF_strlcpy(out, p, size);
+}
+# endif
 #endif
 
 int chopup_args(ARGS *arg, char *buf, int *argc, char **argv[])
-       {
-       int num,i;
-       char *p;
-
-       *argc=0;
-       *argv=NULL;
-
-       i=0;
-       if (arg->count == 0)
-               {
-               arg->count=20;
-               arg->data=(char **)OPENSSL_malloc(sizeof(char *)*arg->count);
-               if (arg->data == NULL)
-                       return 0;
-               }
-       for (i=0; i<arg->count; i++)
-               arg->data[i]=NULL;
-
-       num=0;
-       p=buf;
-       for (;;)
-               {
-               /* first scan over white space */
-               if (!*p) break;
-               while (*p && ((*p == ' ') || (*p == '\t') || (*p == '\n')))
-                       p++;
-               if (!*p) break;
-
-               /* The start of something good :-) */
-               if (num >= arg->count)
-                       {
-                       char **tmp_p;
-                       int tlen = arg->count + 20;
-                       tmp_p = (char **)OPENSSL_realloc(arg->data,
-                               sizeof(char *)*tlen);
-                       if (tmp_p == NULL)
-                               return 0;
-                       arg->data  = tmp_p;
-                       arg->count = tlen;
-                       /* initialize newly allocated data */
-                       for (i = num; i < arg->count; i++)
-                               arg->data[i] = NULL;
-                       }
-               arg->data[num++]=p;
-
-               /* now look for the end of this */
-               if ((*p == '\'') || (*p == '\"')) /* scan for closing quote */
-                       {
-                       i= *(p++);
-                       arg->data[num-1]++; /* jump over quote */
-                       while (*p && (*p != i))
-                               p++;
-                       *p='\0';
-                       }
-               else
-                       {
-                       while (*p && ((*p != ' ') &&
-                               (*p != '\t') && (*p != '\n')))
-                               p++;
-
-                       if (*p == '\0')
-                               p--;
-                       else
-                               *p='\0';
-                       }
-               p++;
-               }
-       *argc=num;
-       *argv=arg->data;
-       return(1);
-       }
+{
+    int num, i;
+    char *p;
+
+    *argc = 0;
+    *argv = NULL;
+
+    i = 0;
+    if (arg->count == 0) {
+        arg->count = 20;
+        arg->data = (char **)OPENSSL_malloc(sizeof(char *) * arg->count);
+        if (arg->data == NULL)
+            return 0;
+    }
+    for (i = 0; i < arg->count; i++)
+        arg->data[i] = NULL;
+
+    num = 0;
+    p = buf;
+    for (;;) {
+        /* first scan over white space */
+        if (!*p)
+            break;
+        while (*p && ((*p == ' ') || (*p == '\t') || (*p == '\n')))
+            p++;
+        if (!*p)
+            break;
+
+        /* The start of something good :-) */
+        if (num >= arg->count) {
+            char **tmp_p;
+            int tlen = arg->count + 20;
+            tmp_p = (char **)OPENSSL_realloc(arg->data,
+                                             sizeof(char *) * tlen);
+            if (tmp_p == NULL)
+                return 0;
+            arg->data = tmp_p;
+            arg->count = tlen;
+            /* initialize newly allocated data */
+            for (i = num; i < arg->count; i++)
+                arg->data[i] = NULL;
+        }
+        arg->data[num++] = p;
+
+        /* now look for the end of this */
+        if ((*p == '\'') || (*p == '\"')) { /* scan for closing quote */
+            i = *(p++);
+            arg->data[num - 1]++; /* jump over quote */
+            while (*p && (*p != i))
+                p++;
+            *p = '\0';
+        } else {
+            while (*p && ((*p != ' ') && (*p != '\t') && (*p != '\n')))
+                p++;
+
+            if (*p == '\0')
+                p--;
+            else
+                *p = '\0';
+        }
+        p++;
+    }
+    *argc = num;
+    *argv = arg->data;
+    return (1);
+}
 
 #ifndef APP_INIT
 int app_init(long mesgwin)
-       {
-       return(1);
-       }
+{
+    return (1);
+}
 #endif
 
-
-int dump_cert_text (BIO *out, X509 *x)
+int dump_cert_text(BIO *out, X509 *x)
 {
-       char *p;
+    char *p;
 
-       p=X509_NAME_oneline(X509_get_subject_name(x),NULL,0);
-       BIO_puts(out,"subject=");
-       BIO_puts(out,p);
-       OPENSSL_free(p);
+    p = X509_NAME_oneline(X509_get_subject_name(x), NULL, 0);
+    BIO_puts(out, "subject=");
+    BIO_puts(out, p);
+    OPENSSL_free(p);
 
-       p=X509_NAME_oneline(X509_get_issuer_name(x),NULL,0);
-       BIO_puts(out,"\nissuer=");
-       BIO_puts(out,p);
-       BIO_puts(out,"\n");
-       OPENSSL_free(p);
+    p = X509_NAME_oneline(X509_get_issuer_name(x), NULL, 0);
+    BIO_puts(out, "\nissuer=");
+    BIO_puts(out, p);
+    BIO_puts(out, "\n");
+    OPENSSL_free(p);
 
-       return 0;
+    return 0;
 }
 
 static int ui_open(UI *ui)
-       {
-       return UI_method_get_opener(UI_OpenSSL())(ui);
-       }
+{
+    return UI_method_get_opener(UI_OpenSSL())(ui);
+}
+
 static int ui_read(UI *ui, UI_STRING *uis)
-       {
-       if (UI_get_input_flags(uis) & UI_INPUT_FLAG_DEFAULT_PWD
-               && UI_get0_user_data(ui))
-               {
-               switch(UI_get_string_type(uis))
-                       {
-               case UIT_PROMPT:
-               case UIT_VERIFY:
-                       {
-                       const char *password =
-                               ((PW_CB_DATA *)UI_get0_user_data(ui))->password;
-                       if (password && password[0] != '\0')
-                               {
-                               UI_set_result(ui, uis, password);
-                               return 1;
-                               }
-                       }
-               default:
-                       break;
-                       }
-               }
-       return UI_method_get_reader(UI_OpenSSL())(ui, uis);
-       }
+{
+    if (UI_get_input_flags(uis) & UI_INPUT_FLAG_DEFAULT_PWD
+        && UI_get0_user_data(ui)) {
+        switch (UI_get_string_type(uis)) {
+        case UIT_PROMPT:
+        case UIT_VERIFY:
+            {
+                const char *password =
+                    ((PW_CB_DATA *)UI_get0_user_data(ui))->password;
+                if (password && password[0] != '\0') {
+                    UI_set_result(ui, uis, password);
+                    return 1;
+                }
+            }
+        default:
+            break;
+        }
+    }
+    return UI_method_get_reader(UI_OpenSSL())(ui, uis);
+}
+
 static int ui_write(UI *ui, UI_STRING *uis)
-       {
-       if (UI_get_input_flags(uis) & UI_INPUT_FLAG_DEFAULT_PWD
-               && UI_get0_user_data(ui))
-               {
-               switch(UI_get_string_type(uis))
-                       {
-               case UIT_PROMPT:
-               case UIT_VERIFY:
-                       {
-                       const char *password =
-                               ((PW_CB_DATA *)UI_get0_user_data(ui))->password;
-                       if (password && password[0] != '\0')
-                               return 1;
-                       }
-               default:
-                       break;
-                       }
-               }
-       return UI_method_get_writer(UI_OpenSSL())(ui, uis);
-       }
+{
+    if (UI_get_input_flags(uis) & UI_INPUT_FLAG_DEFAULT_PWD
+        && UI_get0_user_data(ui)) {
+        switch (UI_get_string_type(uis)) {
+        case UIT_PROMPT:
+        case UIT_VERIFY:
+            {
+                const char *password =
+                    ((PW_CB_DATA *)UI_get0_user_data(ui))->password;
+                if (password && password[0] != '\0')
+                    return 1;
+            }
+        default:
+            break;
+        }
+    }
+    return UI_method_get_writer(UI_OpenSSL())(ui, uis);
+}
+
 static int ui_close(UI *ui)
-       {
-       return UI_method_get_closer(UI_OpenSSL())(ui);
-       }
+{
+    return UI_method_get_closer(UI_OpenSSL())(ui);
+}
+
 int setup_ui_method(void)
-       {
-       ui_method = UI_create_method("OpenSSL application user interface");
-       UI_method_set_opener(ui_method, ui_open);
-       UI_method_set_reader(ui_method, ui_read);
-       UI_method_set_writer(ui_method, ui_write);
-       UI_method_set_closer(ui_method, ui_close);
-       return 0;
-       }
+{
+    ui_method = UI_create_method("OpenSSL application user interface");
+    UI_method_set_opener(ui_method, ui_open);
+    UI_method_set_reader(ui_method, ui_read);
+    UI_method_set_writer(ui_method, ui_write);
+    UI_method_set_closer(ui_method, ui_close);
+    return 0;
+}
+
 void destroy_ui_method(void)
-       {
-       if(ui_method)
-               {
-               UI_destroy_method(ui_method);
-               ui_method = NULL;
-               }
-       }
-int password_callback(char *buf, int bufsiz, int verify,
-       PW_CB_DATA *cb_tmp)
-       {
-       UI *ui = NULL;
-       int res = 0;
-       const char *prompt_info = NULL;
-       const char *password = NULL;
-       PW_CB_DATA *cb_data = (PW_CB_DATA *)cb_tmp;
-
-       if (cb_data)
-               {
-               if (cb_data->password)
-                       password = cb_data->password;
-               if (cb_data->prompt_info)
-                       prompt_info = cb_data->prompt_info;
-               }
-
-       if (password)
-               {
-               res = strlen(password);
-               if (res > bufsiz)
-                       res = bufsiz;
-               memcpy(buf, password, res);
-               return res;
-               }
-
-       ui = UI_new_method(ui_method);
-       if (ui)
-               {
-               int ok = 0;
-               char *buff = NULL;
-               int ui_flags = 0;
-               char *prompt = NULL;
-
-               prompt = UI_construct_prompt(ui, "pass phrase",
-                       prompt_info);
-
-               ui_flags |= UI_INPUT_FLAG_DEFAULT_PWD;
-               UI_ctrl(ui, UI_CTRL_PRINT_ERRORS, 1, 0, 0);
-
-               if (ok >= 0)
-                       ok = UI_add_input_string(ui,prompt,ui_flags,buf,
-                               PW_MIN_LENGTH,bufsiz-1);
-               if (ok >= 0 && verify)
-                       {
-                       buff = (char *)OPENSSL_malloc(bufsiz);
-                       ok = UI_add_verify_string(ui,prompt,ui_flags,buff,
-                               PW_MIN_LENGTH,bufsiz-1, buf);
-                       }
-               if (ok >= 0)
-                       do
-                               {
-                               ok = UI_process(ui);
-                               }
-                       while (ok < 0 && UI_ctrl(ui, UI_CTRL_IS_REDOABLE, 0, 0, 0));
-
-               if (buff)
-                       {
-                       OPENSSL_cleanse(buff,(unsigned int)bufsiz);
-                       OPENSSL_free(buff);
-                       }
-
-               if (ok >= 0)
-                       res = strlen(buf);
-               if (ok == -1)
-                       {
-                       BIO_printf(bio_err, "User interface error\n");
-                       ERR_print_errors(bio_err);
-                       OPENSSL_cleanse(buf,(unsigned int)bufsiz);
-                       res = 0;
-                       }
-               if (ok == -2)
-                       {
-                       BIO_printf(bio_err,"aborted!\n");
-                       OPENSSL_cleanse(buf,(unsigned int)bufsiz);
-                       res = 0;
-                       }
-               UI_free(ui);
-               OPENSSL_free(prompt);
-               }
-       return res;
-       }
+{
+    if (ui_method) {
+        UI_destroy_method(ui_method);
+        ui_method = NULL;
+    }
+}
+
+int password_callback(char *buf, int bufsiz, int verify, PW_CB_DATA *cb_tmp)
+{
+    UI *ui = NULL;
+    int res = 0;
+    const char *prompt_info = NULL;
+    const char *password = NULL;
+    PW_CB_DATA *cb_data = (PW_CB_DATA *)cb_tmp;
+
+    if (cb_data) {
+        if (cb_data->password)
+            password = cb_data->password;
+        if (cb_data->prompt_info)
+            prompt_info = cb_data->prompt_info;
+    }
+
+    if (password) {
+        res = strlen(password);
+        if (res > bufsiz)
+            res = bufsiz;
+        memcpy(buf, password, res);
+        return res;
+    }
+
+    ui = UI_new_method(ui_method);
+    if (ui) {
+        int ok = 0;
+        char *buff = NULL;
+        int ui_flags = 0;
+        char *prompt = NULL;
+
+        prompt = UI_construct_prompt(ui, "pass phrase", prompt_info);
+        if(!prompt) {
+            BIO_printf(bio_err, "Out of memory\n");
+            UI_free(ui);
+            return 0;
+        }
+
+        ui_flags |= UI_INPUT_FLAG_DEFAULT_PWD;
+        UI_ctrl(ui, UI_CTRL_PRINT_ERRORS, 1, 0, 0);
+
+        if (ok >= 0)
+            ok = UI_add_input_string(ui, prompt, ui_flags, buf,
+                                     PW_MIN_LENGTH, bufsiz - 1);
+        if (ok >= 0 && verify) {
+            buff = (char *)OPENSSL_malloc(bufsiz);
+            if(!buff) {
+                BIO_printf(bio_err, "Out of memory\n");
+                UI_free(ui);
+                OPENSSL_free(prompt);
+                return 0;
+            }
+            ok = UI_add_verify_string(ui, prompt, ui_flags, buff,
+                                      PW_MIN_LENGTH, bufsiz - 1, buf);
+        }
+        if (ok >= 0)
+            do {
+                ok = UI_process(ui);
+            }
+            while (ok < 0 && UI_ctrl(ui, UI_CTRL_IS_REDOABLE, 0, 0, 0));
+
+        if (buff) {
+            OPENSSL_cleanse(buff, (unsigned int)bufsiz);
+            OPENSSL_free(buff);
+        }
+
+        if (ok >= 0)
+            res = strlen(buf);
+        if (ok == -1) {
+            BIO_printf(bio_err, "User interface error\n");
+            ERR_print_errors(bio_err);
+            OPENSSL_cleanse(buf, (unsigned int)bufsiz);
+            res = 0;
+        }
+        if (ok == -2) {
+            BIO_printf(bio_err, "aborted!\n");
+            OPENSSL_cleanse(buf, (unsigned int)bufsiz);
+            res = 0;
+        }
+        UI_free(ui);
+        OPENSSL_free(prompt);
+    }
+    return res;
+}
 
 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;
+    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;
-                       }
+    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;
+            }
 #if !defined(_WIN32)
-               /*
-                * Under _WIN32, which covers even Win64 and CE, file
-                * descriptors referenced by BIO_s_fd are not inherited
-                * by child process and therefore below is not an option.
-                * It could have been an option if bss_fd.c was operating
-                * on real Windows descriptors, such as those obtained
-                * with CreateFile.
-                */
-               } 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);
-#endif
-               } 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);
+            /*
+             * Under _WIN32, which covers even Win64 and CE, file
+             * descriptors referenced by BIO_s_fd are not inherited
+             * by child process and therefore below is not an option.
+             * It could have been an option if bss_fd.c was operating
+             * on real Windows descriptors, such as those obtained
+             * with CreateFile.
+             */
+        } 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);
+#endif
+        } 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);
 }
 
 int add_oid_section(BIO *err, CONF *conf)
-{      
-       char *p;
-       STACK_OF(CONF_VALUE) *sktmp;
-       CONF_VALUE *cnf;
-       int i;
-       if(!(p=NCONF_get_string(conf,NULL,"oid_section")))
-               {
-               ERR_clear_error();
-               return 1;
-               }
-       if(!(sktmp = NCONF_get_section(conf, p))) {
-               BIO_printf(err, "problem loading oid section %s\n", p);
-               return 0;
-       }
-       for(i = 0; i < sk_CONF_VALUE_num(sktmp); i++) {
-               cnf = sk_CONF_VALUE_value(sktmp, i);
-               if(OBJ_create(cnf->value, cnf->name, cnf->name) == NID_undef) {
-                       BIO_printf(err, "problem creating object %s=%s\n",
-                                                        cnf->name, cnf->value);
-                       return 0;
-               }
-       }
-       return 1;
+{
+    char *p;
+    STACK_OF(CONF_VALUE) *sktmp;
+    CONF_VALUE *cnf;
+    int i;
+    if (!(p = NCONF_get_string(conf, NULL, "oid_section"))) {
+        ERR_clear_error();
+        return 1;
+    }
+    if (!(sktmp = NCONF_get_section(conf, p))) {
+        BIO_printf(err, "problem loading oid section %s\n", p);
+        return 0;
+    }
+    for (i = 0; i < sk_CONF_VALUE_num(sktmp); i++) {
+        cnf = sk_CONF_VALUE_value(sktmp, i);
+        if (OBJ_create(cnf->value, cnf->name, cnf->name) == NID_undef) {
+            BIO_printf(err, "problem creating object %s=%s\n",
+                       cnf->name, cnf->value);
+            return 0;
+        }
+    }
+    return 1;
 }
 
 static int load_pkcs12(BIO *err, BIO *in, const char *desc,
-               pem_password_cb *pem_cb,  void *cb_data,
-               EVP_PKEY **pkey, X509 **cert, STACK_OF(X509) **ca)
-       {
-       const char *pass;
-       char tpass[PEM_BUFSIZE];
-       int len, ret = 0;
-       PKCS12 *p12;
-       p12 = d2i_PKCS12_bio(in, NULL);
-       if (p12 == NULL)
-               {
-               BIO_printf(err, "Error loading PKCS12 file for %s\n", desc);    
-               goto die;
-               }
-       /* See if an empty password will do */
-       if (PKCS12_verify_mac(p12, "", 0) || PKCS12_verify_mac(p12, NULL, 0))
-               pass = "";
-       else
-               {
-               if (!pem_cb)
-                       pem_cb = (pem_password_cb *)password_callback;
-               len = pem_cb(tpass, PEM_BUFSIZE, 0, cb_data);
-               if (len < 0) 
-                       {
-                       BIO_printf(err, "Passpharse callback error for %s\n",
-                                       desc);
-                       goto die;
-                       }
-               if (len < PEM_BUFSIZE)
-                       tpass[len] = 0;
-               if (!PKCS12_verify_mac(p12, tpass, len))
-                       {
-                       BIO_printf(err,
-       "Mac verify error (wrong password?) in PKCS12 file for %s\n", desc);    
-                       goto die;
-                       }
-               pass = tpass;
-               }
-       ret = PKCS12_parse(p12, pass, pkey, cert, ca);
-       die:
-       if (p12)
-               PKCS12_free(p12);
-       return ret;
-       }
+                       pem_password_cb *pem_cb, void *cb_data,
+                       EVP_PKEY **pkey, X509 **cert, STACK_OF(X509) **ca)
+{
+    const char *pass;
+    char tpass[PEM_BUFSIZE];
+    int len, ret = 0;
+    PKCS12 *p12;
+    p12 = d2i_PKCS12_bio(in, NULL);
+    if (p12 == NULL) {
+        BIO_printf(err, "Error loading PKCS12 file for %s\n", desc);
+        goto die;
+    }
+    /* See if an empty password will do */
+    if (PKCS12_verify_mac(p12, "", 0) || PKCS12_verify_mac(p12, NULL, 0))
+        pass = "";
+    else {
+        if (!pem_cb)
+            pem_cb = (pem_password_cb *)password_callback;
+        len = pem_cb(tpass, PEM_BUFSIZE, 0, cb_data);
+        if (len < 0) {
+            BIO_printf(err, "Passpharse callback error for %s\n", desc);
+            goto die;
+        }
+        if (len < PEM_BUFSIZE)
+            tpass[len] = 0;
+        if (!PKCS12_verify_mac(p12, tpass, len)) {
+            BIO_printf(err,
+                       "Mac verify error (wrong password?) in PKCS12 file for %s\n",
+                       desc);
+            goto die;
+        }
+        pass = tpass;
+    }
+    ret = PKCS12_parse(p12, pass, pkey, cert, ca);
+ die:
+    if (p12)
+        PKCS12_free(p12);
+    return ret;
+}
 
 X509 *load_cert(BIO *err, const char *file, int format,
-       const char *pass, ENGINE *e, const char *cert_descrip)
-       {
-       X509 *x=NULL;
-       BIO *cert;
-
-       if ((cert=BIO_new(BIO_s_file())) == NULL)
-               {
-               ERR_print_errors(err);
-               goto end;
-               }
-
-       if (file == NULL)
-               {
+                const char *pass, ENGINE *e, const char *cert_descrip)
+{
+    X509 *x = NULL;
+    BIO *cert;
+
+    if ((cert = BIO_new(BIO_s_file())) == NULL) {
+        ERR_print_errors(err);
+        goto end;
+    }
+
+    if (file == NULL) {
 #ifdef _IONBF
 # ifndef OPENSSL_NO_SETVBUF_IONBF
-               setvbuf(stdin, NULL, _IONBF, 0);
-# endif /* ndef OPENSSL_NO_SETVBUF_IONBF */
-#endif
-               BIO_set_fp(cert,stdin,BIO_NOCLOSE);
-               }
-       else
-               {
-               if (BIO_read_filename(cert,file) <= 0)
-                       {
-                       BIO_printf(err, "Error opening %s %s\n",
-                               cert_descrip, file);
-                       ERR_print_errors(err);
-                       goto end;
-                       }
-               }
-
-       if      (format == FORMAT_ASN1)
-               x=d2i_X509_bio(cert,NULL);
-       else if (format == FORMAT_NETSCAPE)
-               {
-               NETSCAPE_X509 *nx;
-               nx=ASN1_item_d2i_bio(ASN1_ITEM_rptr(NETSCAPE_X509),cert,NULL);
-               if (nx == NULL)
-                               goto end;
-
-               if ((strncmp(NETSCAPE_CERT_HDR,(char *)nx->header->data,
-                       nx->header->length) != 0))
-                       {
-                       NETSCAPE_X509_free(nx);
-                       BIO_printf(err,"Error reading header on certificate\n");
-                       goto end;
-                       }
-               x=nx->cert;
-               nx->cert = NULL;
-               NETSCAPE_X509_free(nx);
-               }
-       else if (format == FORMAT_PEM)
-               x=PEM_read_bio_X509_AUX(cert,NULL,
-                       (pem_password_cb *)password_callback, NULL);
-       else if (format == FORMAT_PKCS12)
-               {
-               if (!load_pkcs12(err, cert,cert_descrip, NULL, NULL,
-                                       NULL, &x, NULL))
-                       goto end;
-               }
-       else    {
-               BIO_printf(err,"bad input format specified for %s\n",
-                       cert_descrip);
-               goto end;
-               }
-end:
-       if (x == NULL)
-               {
-               BIO_printf(err,"unable to load certificate\n");
-               ERR_print_errors(err);
-               }
-       if (cert != NULL) BIO_free(cert);
-       return(x);
-       }
+        setvbuf(stdin, NULL, _IONBF, 0);
+# endif                         /* ndef OPENSSL_NO_SETVBUF_IONBF */
+#endif
+        BIO_set_fp(cert, stdin, BIO_NOCLOSE);
+    } else {
+        if (BIO_read_filename(cert, file) <= 0) {
+            BIO_printf(err, "Error opening %s %s\n", cert_descrip, file);
+            ERR_print_errors(err);
+            goto end;
+        }
+    }
+
+    if (format == FORMAT_ASN1)
+        x = d2i_X509_bio(cert, NULL);
+    else if (format == FORMAT_NETSCAPE) {
+        NETSCAPE_X509 *nx;
+        nx = ASN1_item_d2i_bio(ASN1_ITEM_rptr(NETSCAPE_X509), cert, NULL);
+        if (nx == NULL)
+            goto end;
+
+        if ((strncmp(NETSCAPE_CERT_HDR, (char *)nx->header->data,
+                     nx->header->length) != 0)) {
+            NETSCAPE_X509_free(nx);
+            BIO_printf(err, "Error reading header on certificate\n");
+            goto end;
+        }
+        x = nx->cert;
+        nx->cert = NULL;
+        NETSCAPE_X509_free(nx);
+    } else if (format == FORMAT_PEM)
+        x = PEM_read_bio_X509_AUX(cert, NULL,
+                                  (pem_password_cb *)password_callback, NULL);
+    else if (format == FORMAT_PKCS12) {
+        if (!load_pkcs12(err, cert, cert_descrip, NULL, NULL, NULL, &x, NULL))
+            goto end;
+    } else {
+        BIO_printf(err, "bad input format specified for %s\n", cert_descrip);
+        goto end;
+    }
+ end:
+    if (x == NULL) {
+        BIO_printf(err, "unable to load certificate\n");
+        ERR_print_errors(err);
+    }
+    if (cert != NULL)
+        BIO_free(cert);
+    return (x);
+}
 
 EVP_PKEY *load_key(BIO *err, const char *file, int format, int maybe_stdin,
-       const char *pass, ENGINE *e, const char *key_descrip)
-       {
-       BIO *key=NULL;
-       EVP_PKEY *pkey=NULL;
-       PW_CB_DATA cb_data;
-
-       cb_data.password = pass;
-       cb_data.prompt_info = file;
-
-       if (file == NULL && (!maybe_stdin || format == FORMAT_ENGINE))
-               {
-               BIO_printf(err,"no keyfile specified\n");
-               goto end;
-               }
+                   const char *pass, ENGINE *e, const char *key_descrip)
+{
+    BIO *key = NULL;
+    EVP_PKEY *pkey = NULL;
+    PW_CB_DATA cb_data;
+
+    cb_data.password = pass;
+    cb_data.prompt_info = file;
+
+    if (file == NULL && (!maybe_stdin || format == FORMAT_ENGINE)) {
+        BIO_printf(err, "no keyfile specified\n");
+        goto end;
+    }
 #ifndef OPENSSL_NO_ENGINE
-       if (format == FORMAT_ENGINE)
-               {
-               if (!e)
-                       BIO_printf(err,"no engine specified\n");
-               else
-                       {
-                       pkey = ENGINE_load_private_key(e, file,
-                               ui_method, &cb_data);
-                       if (!pkey) 
-                               {
-                               BIO_printf(err,"cannot load %s from engine\n",key_descrip);
-                               ERR_print_errors(err);
-                               }       
-                       }
-               goto end;
-               }
-#endif
-       key=BIO_new(BIO_s_file());
-       if (key == NULL)
-               {
-               ERR_print_errors(err);
-               goto end;
-               }
-       if (file == NULL && maybe_stdin)
-               {
+    if (format == FORMAT_ENGINE) {
+        if (!e)
+            BIO_printf(err, "no engine specified\n");
+        else {
+            pkey = ENGINE_load_private_key(e, file, ui_method, &cb_data);
+            if (!pkey) {
+                BIO_printf(err, "cannot load %s from engine\n", key_descrip);
+                ERR_print_errors(err);
+            }
+        }
+        goto end;
+    }
+#endif
+    key = BIO_new(BIO_s_file());
+    if (key == NULL) {
+        ERR_print_errors(err);
+        goto end;
+    }
+    if (file == NULL && maybe_stdin) {
 #ifdef _IONBF
 # ifndef OPENSSL_NO_SETVBUF_IONBF
-               setvbuf(stdin, NULL, _IONBF, 0);
-# endif /* ndef OPENSSL_NO_SETVBUF_IONBF */
-#endif
-               BIO_set_fp(key,stdin,BIO_NOCLOSE);
-               }
-       else
-               if (BIO_read_filename(key,file) <= 0)
-                       {
-                       BIO_printf(err, "Error opening %s %s\n",
-                               key_descrip, file);
-                       ERR_print_errors(err);
-                       goto end;
-                       }
-       if (format == FORMAT_ASN1)
-               {
-               pkey=d2i_PrivateKey_bio(key, NULL);
-               }
-       else if (format == FORMAT_PEM)
-               {
-               pkey=PEM_read_bio_PrivateKey(key,NULL,
-                       (pem_password_cb *)password_callback, &cb_data);
-               }
+        setvbuf(stdin, NULL, _IONBF, 0);
+# endif                         /* ndef OPENSSL_NO_SETVBUF_IONBF */
+#endif
+        BIO_set_fp(key, stdin, BIO_NOCLOSE);
+    } else if (BIO_read_filename(key, file) <= 0) {
+        BIO_printf(err, "Error opening %s %s\n", key_descrip, file);
+        ERR_print_errors(err);
+        goto end;
+    }
+    if (format == FORMAT_ASN1) {
+        pkey = d2i_PrivateKey_bio(key, NULL);
+    } else if (format == FORMAT_PEM) {
+        pkey = PEM_read_bio_PrivateKey(key, NULL,
+                                       (pem_password_cb *)password_callback,
+                                       &cb_data);
+    }
 #if !defined(OPENSSL_NO_RC4) && !defined(OPENSSL_NO_RSA)
-       else if (format == FORMAT_NETSCAPE || format == FORMAT_IISSGC)
-               pkey = load_netscape_key(err, key, file, key_descrip, format);
-#endif
-       else if (format == FORMAT_PKCS12)
-               {
-               if (!load_pkcs12(err, key, key_descrip,
-                               (pem_password_cb *)password_callback, &cb_data,
-                               &pkey, NULL, NULL))
-                       goto end;
-               }
+    else if (format == FORMAT_NETSCAPE || format == FORMAT_IISSGC)
+        pkey = load_netscape_key(err, key, file, key_descrip, format);
+#endif
+    else if (format == FORMAT_PKCS12) {
+        if (!load_pkcs12(err, key, key_descrip,
+                         (pem_password_cb *)password_callback, &cb_data,
+                         &pkey, NULL, NULL))
+            goto end;
+    }
 #if !defined(OPENSSL_NO_RSA) && !defined(OPENSSL_NO_DSA) && !defined (OPENSSL_NO_RC4)
-       else if (format == FORMAT_MSBLOB)
-               pkey = b2i_PrivateKey_bio(key);
-       else if (format == FORMAT_PVK)
-               pkey = b2i_PVK_bio(key, (pem_password_cb *)password_callback,
-                                                               &cb_data);
-#endif
-       else
-               {
-               BIO_printf(err,"bad input format specified for key file\n");
-               goto end;
-               }
+    else if (format == FORMAT_MSBLOB)
+        pkey = b2i_PrivateKey_bio(key);
+    else if (format == FORMAT_PVK)
+        pkey = b2i_PVK_bio(key, (pem_password_cb *)password_callback,
+                           &cb_data);
+#endif
+    else {
+        BIO_printf(err, "bad input format specified for key file\n");
+        goto end;
+    }
  end:
-       if (key != NULL) BIO_free(key);
-       if (pkey == NULL) 
-               {
-               BIO_printf(err,"unable to load %s\n", key_descrip);
-               ERR_print_errors(err);
-               }       
-       return(pkey);
-       }
+    if (key != NULL)
+        BIO_free(key);
+    if (pkey == NULL) {
+        BIO_printf(err, "unable to load %s\n", key_descrip);
+        ERR_print_errors(err);
+    }
+    return (pkey);
+}
 
 EVP_PKEY *load_pubkey(BIO *err, const char *file, int format, int maybe_stdin,
-       const char *pass, ENGINE *e, const char *key_descrip)
-       {
-       BIO *key=NULL;
-       EVP_PKEY *pkey=NULL;
-       PW_CB_DATA cb_data;
-
-       cb_data.password = pass;
-       cb_data.prompt_info = file;
-
-       if (file == NULL && (!maybe_stdin || format == FORMAT_ENGINE))
-               {
-               BIO_printf(err,"no keyfile specified\n");
-               goto end;
-               }
+                      const char *pass, ENGINE *e, const char *key_descrip)
+{
+    BIO *key = NULL;
+    EVP_PKEY *pkey = NULL;
+    PW_CB_DATA cb_data;
+
+    cb_data.password = pass;
+    cb_data.prompt_info = file;
+
+    if (file == NULL && (!maybe_stdin || format == FORMAT_ENGINE)) {
+        BIO_printf(err, "no keyfile specified\n");
+        goto end;
+    }
 #ifndef OPENSSL_NO_ENGINE
-       if (format == FORMAT_ENGINE)
-               {
-               if (!e)
-                       BIO_printf(bio_err,"no engine specified\n");
-               else
-                       pkey = ENGINE_load_public_key(e, file,
-                               ui_method, &cb_data);
-               goto end;
-               }
-#endif
-       key=BIO_new(BIO_s_file());
-       if (key == NULL)
-               {
-               ERR_print_errors(err);
-               goto end;
-               }
-       if (file == NULL && maybe_stdin)
-               {
+    if (format == FORMAT_ENGINE) {
+        if (!e)
+            BIO_printf(bio_err, "no engine specified\n");
+        else
+            pkey = ENGINE_load_public_key(e, file, ui_method, &cb_data);
+        goto end;
+    }
+#endif
+    key = BIO_new(BIO_s_file());
+    if (key == NULL) {
+        ERR_print_errors(err);
+        goto end;
+    }
+    if (file == NULL && maybe_stdin) {
 #ifdef _IONBF
 # ifndef OPENSSL_NO_SETVBUF_IONBF
-               setvbuf(stdin, NULL, _IONBF, 0);
-# endif /* ndef OPENSSL_NO_SETVBUF_IONBF */
-#endif
-               BIO_set_fp(key,stdin,BIO_NOCLOSE);
-               }
-       else
-               if (BIO_read_filename(key,file) <= 0)
-                       {
-                       BIO_printf(err, "Error opening %s %s\n",
-                               key_descrip, file);
-                       ERR_print_errors(err);
-                       goto end;
-               }
-       if (format == FORMAT_ASN1)
-               {
-               pkey=d2i_PUBKEY_bio(key, NULL);
-               }
+        setvbuf(stdin, NULL, _IONBF, 0);
+# endif                         /* ndef OPENSSL_NO_SETVBUF_IONBF */
+#endif
+        BIO_set_fp(key, stdin, BIO_NOCLOSE);
+    } else if (BIO_read_filename(key, file) <= 0) {
+        BIO_printf(err, "Error opening %s %s\n", key_descrip, file);
+        ERR_print_errors(err);
+        goto end;
+    }
+    if (format == FORMAT_ASN1) {
+        pkey = d2i_PUBKEY_bio(key, NULL);
+    }
 #ifndef OPENSSL_NO_RSA
-       else if (format == FORMAT_ASN1RSA)
-               {
-               RSA *rsa;
-               rsa = d2i_RSAPublicKey_bio(key, NULL);
-               if (rsa)
-                       {
-                       pkey = EVP_PKEY_new();
-                       if (pkey)
-                               EVP_PKEY_set1_RSA(pkey, rsa);
-                       RSA_free(rsa);
-                       }
-               else
-                       pkey = NULL;
-               }
-       else if (format == FORMAT_PEMRSA)
-               {
-               RSA *rsa;
-               rsa = PEM_read_bio_RSAPublicKey(key, NULL, 
-                       (pem_password_cb *)password_callback, &cb_data);
-               if (rsa)
-                       {
-                       pkey = EVP_PKEY_new();
-                       if (pkey)
-                               EVP_PKEY_set1_RSA(pkey, rsa);
-                       RSA_free(rsa);
-                       }
-               else
-                       pkey = NULL;
-               }
-#endif
-       else if (format == FORMAT_PEM)
-               {
-               pkey=PEM_read_bio_PUBKEY(key,NULL,
-                       (pem_password_cb *)password_callback, &cb_data);
-               }
+    else if (format == FORMAT_ASN1RSA) {
+        RSA *rsa;
+        rsa = d2i_RSAPublicKey_bio(key, NULL);
+        if (rsa) {
+            pkey = EVP_PKEY_new();
+            if (pkey)
+                EVP_PKEY_set1_RSA(pkey, rsa);
+            RSA_free(rsa);
+        } else
+            pkey = NULL;
+    } else if (format == FORMAT_PEMRSA) {
+        RSA *rsa;
+        rsa = PEM_read_bio_RSAPublicKey(key, NULL,
+                                        (pem_password_cb *)password_callback,
+                                        &cb_data);
+        if (rsa) {
+            pkey = EVP_PKEY_new();
+            if (pkey)
+                EVP_PKEY_set1_RSA(pkey, rsa);
+            RSA_free(rsa);
+        } else
+            pkey = NULL;
+    }
+#endif
+    else if (format == FORMAT_PEM) {
+        pkey = PEM_read_bio_PUBKEY(key, NULL,
+                                   (pem_password_cb *)password_callback,
+                                   &cb_data);
+    }
 #if !defined(OPENSSL_NO_RC4) && !defined(OPENSSL_NO_RSA)
-       else if (format == FORMAT_NETSCAPE || format == FORMAT_IISSGC)
-               pkey = load_netscape_key(err, key, file, key_descrip, format);
+    else if (format == FORMAT_NETSCAPE || format == FORMAT_IISSGC)
+        pkey = load_netscape_key(err, key, file, key_descrip, format);
 #endif
 #if !defined(OPENSSL_NO_RSA) && !defined(OPENSSL_NO_DSA)
-       else if (format == FORMAT_MSBLOB)
-               pkey = b2i_PublicKey_bio(key);
+    else if (format == FORMAT_MSBLOB)
+        pkey = b2i_PublicKey_bio(key);
 #endif
-       else
-               {
-               BIO_printf(err,"bad input format specified for key file\n");
-               goto end;
-               }
+    else {
+        BIO_printf(err, "bad input format specified for key file\n");
+        goto end;
+    }
  end:
-       if (key != NULL) BIO_free(key);
-       if (pkey == NULL)
-               BIO_printf(err,"unable to load %s\n", key_descrip);
-       return(pkey);
-       }
+    if (key != NULL)
+        BIO_free(key);
+    if (pkey == NULL)
+        BIO_printf(err, "unable to load %s\n", key_descrip);
+    return (pkey);
+}
 
 #if !defined(OPENSSL_NO_RC4) && !defined(OPENSSL_NO_RSA)
-static EVP_PKEY *
-load_netscape_key(BIO *err, BIO *key, const char *file,
-               const char *key_descrip, int format)
-       {
-       EVP_PKEY *pkey;
-       BUF_MEM *buf;
-       RSA     *rsa;
-       const unsigned char *p;
-       int size, i;
-
-       buf=BUF_MEM_new();
-       pkey = EVP_PKEY_new();
-       size = 0;
-       if (buf == NULL || pkey == NULL)
-               goto error;
-       for (;;)
-               {
-               if (!BUF_MEM_grow_clean(buf,size+1024*10))
-                       goto error;
-               i = BIO_read(key, &(buf->data[size]), 1024*10);
-               size += i;
-               if (i == 0)
-                       break;
-               if (i < 0)
-                       {
-                               BIO_printf(err, "Error reading %s %s",
-                                       key_descrip, file);
-                               goto error;
-                       }
-               }
-       p=(unsigned char *)buf->data;
-       rsa = d2i_RSA_NET(NULL,&p,(long)size,NULL,
-               (format == FORMAT_IISSGC ? 1 : 0));
-       if (rsa == NULL)
-               goto error;
-       BUF_MEM_free(buf);
-       EVP_PKEY_set1_RSA(pkey, rsa);
-       return pkey;
-error:
-       BUF_MEM_free(buf);
-       EVP_PKEY_free(pkey);
-       return NULL;
-       }
-#endif /* ndef OPENSSL_NO_RC4 */
+static EVP_PKEY *load_netscape_key(BIO *err, BIO *key, const char *file,
+                                   const char *key_descrip, int format)
+{
+    EVP_PKEY *pkey;
+    BUF_MEM *buf;
+    RSA *rsa;
+    const unsigned char *p;
+    int size, i;
+
+    buf = BUF_MEM_new();
+    pkey = EVP_PKEY_new();
+    size = 0;
+    if (buf == NULL || pkey == NULL)
+        goto error;
+    for (;;) {
+        if (!BUF_MEM_grow_clean(buf, size + 1024 * 10))
+            goto error;
+        i = BIO_read(key, &(buf->data[size]), 1024 * 10);
+        size += i;
+        if (i == 0)
+            break;
+        if (i < 0) {
+            BIO_printf(err, "Error reading %s %s", key_descrip, file);
+            goto error;
+        }
+    }
+    p = (unsigned char *)buf->data;
+    rsa = d2i_RSA_NET(NULL, &p, (long)size, NULL,
+                      (format == FORMAT_IISSGC ? 1 : 0));
+    if (rsa == NULL)
+        goto error;
+    BUF_MEM_free(buf);
+    EVP_PKEY_set1_RSA(pkey, rsa);
+    return pkey;
+ error:
+    BUF_MEM_free(buf);
+    EVP_PKEY_free(pkey);
+    return NULL;
+}
+#endif                          /* ndef OPENSSL_NO_RC4 */
 
 static int load_certs_crls(BIO *err, const char *file, int format,
-       const char *pass, ENGINE *e, const char *desc,
-       STACK_OF(X509) **pcerts, STACK_OF(X509_CRL) **pcrls)
-       {
-       int i;
-       BIO *bio;
-       STACK_OF(X509_INFO) *xis = NULL;
-       X509_INFO *xi;
-       PW_CB_DATA cb_data;
-       int rv = 0;
-
-       cb_data.password = pass;
-       cb_data.prompt_info = file;
-
-       if (format != FORMAT_PEM)
-               {
-               BIO_printf(err,"bad input format specified for %s\n", desc);
-               return 0;
-               }
-
-       if (file == NULL)
-               bio = BIO_new_fp(stdin,BIO_NOCLOSE);
-       else
-               bio = BIO_new_file(file, "r");
-
-       if (bio == NULL)
-               {
-               BIO_printf(err, "Error opening %s %s\n",
-                               desc, file ? file : "stdin");
-               ERR_print_errors(err);
-               return 0;
-               }
-
-       xis = PEM_X509_INFO_read_bio(bio, NULL,
-                               (pem_password_cb *)password_callback, &cb_data);
-
-       BIO_free(bio);
-
-       if (pcerts)
-               {
-               *pcerts = sk_X509_new_null();
-               if (!*pcerts)
-                       goto end;
-               }
-
-       if (pcrls)
-               {
-               *pcrls = sk_X509_CRL_new_null();
-               if (!*pcrls)
-                       goto end;
-               }
-
-       for(i = 0; i < sk_X509_INFO_num(xis); i++)
-               {
-               xi = sk_X509_INFO_value (xis, i);
-               if (xi->x509 && pcerts)
-                       {
-                       if (!sk_X509_push(*pcerts, xi->x509))
-                               goto end;
-                       xi->x509 = NULL;
-                       }
-               if (xi->crl && pcrls)
-                       {
-                       if (!sk_X509_CRL_push(*pcrls, xi->crl))
-                               goto end;
-                       xi->crl = NULL;
-                       }
-               }
-
-       if (pcerts && sk_X509_num(*pcerts) > 0)
-               rv = 1;
-
-       if (pcrls && sk_X509_CRL_num(*pcrls) > 0)
-               rv = 1;
-
-       end:
-
-       if (xis)
-               sk_X509_INFO_pop_free(xis, X509_INFO_free);
-
-       if (rv == 0)
-               {
-               if (pcerts)
-                       {
-                       sk_X509_pop_free(*pcerts, X509_free);
-                       *pcerts = NULL;
-                       }
-               if (pcrls)
-                       {
-                       sk_X509_CRL_pop_free(*pcrls, X509_CRL_free);
-                       *pcrls = NULL;
-                       }
-               BIO_printf(err,"unable to load %s\n",
-                               pcerts ? "certificates" : "CRLs");
-               ERR_print_errors(err);
-               }
-       return rv;
-       }
+                           const char *pass, ENGINE *e, const char *desc,
+                           STACK_OF(X509) **pcerts,
+                           STACK_OF(X509_CRL) **pcrls)
+{
+    int i;
+    BIO *bio;
+    STACK_OF(X509_INFO) *xis = NULL;
+    X509_INFO *xi;
+    PW_CB_DATA cb_data;
+    int rv = 0;
+
+    cb_data.password = pass;
+    cb_data.prompt_info = file;
+
+    if (format != FORMAT_PEM) {
+        BIO_printf(err, "bad input format specified for %s\n", desc);
+        return 0;
+    }
+
+    if (file == NULL)
+        bio = BIO_new_fp(stdin, BIO_NOCLOSE);
+    else
+        bio = BIO_new_file(file, "r");
+
+    if (bio == NULL) {
+        BIO_printf(err, "Error opening %s %s\n", desc, file ? file : "stdin");
+        ERR_print_errors(err);
+        return 0;
+    }
+
+    xis = PEM_X509_INFO_read_bio(bio, NULL,
+                                 (pem_password_cb *)password_callback,
+                                 &cb_data);
+
+    BIO_free(bio);
+
+    if (pcerts) {
+        *pcerts = sk_X509_new_null();
+        if (!*pcerts)
+            goto end;
+    }
+
+    if (pcrls) {
+        *pcrls = sk_X509_CRL_new_null();
+        if (!*pcrls)
+            goto end;
+    }
+
+    for (i = 0; i < sk_X509_INFO_num(xis); i++) {
+        xi = sk_X509_INFO_value(xis, i);
+        if (xi->x509 && pcerts) {
+            if (!sk_X509_push(*pcerts, xi->x509))
+                goto end;
+            xi->x509 = NULL;
+        }
+        if (xi->crl && pcrls) {
+            if (!sk_X509_CRL_push(*pcrls, xi->crl))
+                goto end;
+            xi->crl = NULL;
+        }
+    }
+
+    if (pcerts && sk_X509_num(*pcerts) > 0)
+        rv = 1;
+
+    if (pcrls && sk_X509_CRL_num(*pcrls) > 0)
+        rv = 1;
+
+ end:
+
+    if (xis)
+        sk_X509_INFO_pop_free(xis, X509_INFO_free);
+
+    if (rv == 0) {
+        if (pcerts) {
+            sk_X509_pop_free(*pcerts, X509_free);
+            *pcerts = NULL;
+        }
+        if (pcrls) {
+            sk_X509_CRL_pop_free(*pcrls, X509_CRL_free);
+            *pcrls = NULL;
+        }
+        BIO_printf(err, "unable to load %s\n",
+                   pcerts ? "certificates" : "CRLs");
+        ERR_print_errors(err);
+    }
+    return rv;
+}
 
 STACK_OF(X509) *load_certs(BIO *err, const char *file, int format,
-       const char *pass, ENGINE *e, const char *desc)
-       {
-       STACK_OF(X509) *certs;
-       if (!load_certs_crls(err, file, format, pass, e, desc, &certs, NULL))
-               return NULL;
-       return certs;
-       }       
+                           const char *pass, ENGINE *e, const char *desc)
+{
+    STACK_OF(X509) *certs;
+    if (!load_certs_crls(err, file, format, pass, e, desc, &certs, NULL))
+        return NULL;
+    return certs;
+}
 
 STACK_OF(X509_CRL) *load_crls(BIO *err, const char *file, int format,
-       const char *pass, ENGINE *e, const char *desc)
-       {
-       STACK_OF(X509_CRL) *crls;
-       if (!load_certs_crls(err, file, format, pass, e, desc, NULL, &crls))
-               return NULL;
-       return crls;
-       }       
-
-#define X509V3_EXT_UNKNOWN_MASK                (0xfL << 16)
+                              const char *pass, ENGINE *e, const char *desc)
+{
+    STACK_OF(X509_CRL) *crls;
+    if (!load_certs_crls(err, file, format, pass, e, desc, NULL, &crls))
+        return NULL;
+    return crls;
+}
+
+#define X509V3_EXT_UNKNOWN_MASK         (0xfL << 16)
 /* Return error for unknown extensions */
-#define X509V3_EXT_DEFAULT             0
+#define X509V3_EXT_DEFAULT              0
 /* Print error for unknown extensions */
-#define X509V3_EXT_ERROR_UNKNOWN       (1L << 16)
+#define X509V3_EXT_ERROR_UNKNOWN        (1L << 16)
 /* ASN1 parse unknown extensions */
-#define X509V3_EXT_PARSE_UNKNOWN       (2L << 16)
+#define X509V3_EXT_PARSE_UNKNOWN        (2L << 16)
 /* BIO_dump unknown extensions */
-#define X509V3_EXT_DUMP_UNKNOWN                (3L << 16)
+#define X509V3_EXT_DUMP_UNKNOWN         (3L << 16)
 
 #define X509_FLAG_CA (X509_FLAG_NO_ISSUER | X509_FLAG_NO_PUBKEY | \
-                        X509_FLAG_NO_HEADER | X509_FLAG_NO_VERSION)
+                         X509_FLAG_NO_HEADER | X509_FLAG_NO_VERSION)
 
 int set_cert_ex(unsigned long *flags, const char *arg)
 {
-       static const NAME_EX_TBL cert_tbl[] = {
-               { "compatible", X509_FLAG_COMPAT, 0xffffffffl},
-               { "ca_default", X509_FLAG_CA, 0xffffffffl},
-               { "no_header", X509_FLAG_NO_HEADER, 0},
-               { "no_version", X509_FLAG_NO_VERSION, 0},
-               { "no_serial", X509_FLAG_NO_SERIAL, 0},
-               { "no_signame", X509_FLAG_NO_SIGNAME, 0},
-               { "no_validity", X509_FLAG_NO_VALIDITY, 0},
-               { "no_subject", X509_FLAG_NO_SUBJECT, 0},
-               { "no_issuer", X509_FLAG_NO_ISSUER, 0},
-               { "no_pubkey", X509_FLAG_NO_PUBKEY, 0},
-               { "no_extensions", X509_FLAG_NO_EXTENSIONS, 0},
-               { "no_sigdump", X509_FLAG_NO_SIGDUMP, 0},
-               { "no_aux", X509_FLAG_NO_AUX, 0},
-               { "no_attributes", X509_FLAG_NO_ATTRIBUTES, 0},
-               { "ext_default", X509V3_EXT_DEFAULT, X509V3_EXT_UNKNOWN_MASK},
-               { "ext_error", X509V3_EXT_ERROR_UNKNOWN, X509V3_EXT_UNKNOWN_MASK},
-               { "ext_parse", X509V3_EXT_PARSE_UNKNOWN, X509V3_EXT_UNKNOWN_MASK},
-               { "ext_dump", X509V3_EXT_DUMP_UNKNOWN, X509V3_EXT_UNKNOWN_MASK},
-               { NULL, 0, 0}
-       };
-       return set_multi_opts(flags, arg, cert_tbl);
+    static const NAME_EX_TBL cert_tbl[] = {
+        {"compatible", X509_FLAG_COMPAT, 0xffffffffl},
+        {"ca_default", X509_FLAG_CA, 0xffffffffl},
+        {"no_header", X509_FLAG_NO_HEADER, 0},
+        {"no_version", X509_FLAG_NO_VERSION, 0},
+        {"no_serial", X509_FLAG_NO_SERIAL, 0},
+        {"no_signame", X509_FLAG_NO_SIGNAME, 0},
+        {"no_validity", X509_FLAG_NO_VALIDITY, 0},
+        {"no_subject", X509_FLAG_NO_SUBJECT, 0},
+        {"no_issuer", X509_FLAG_NO_ISSUER, 0},
+        {"no_pubkey", X509_FLAG_NO_PUBKEY, 0},
+        {"no_extensions", X509_FLAG_NO_EXTENSIONS, 0},
+        {"no_sigdump", X509_FLAG_NO_SIGDUMP, 0},
+        {"no_aux", X509_FLAG_NO_AUX, 0},
+        {"no_attributes", X509_FLAG_NO_ATTRIBUTES, 0},
+        {"ext_default", X509V3_EXT_DEFAULT, X509V3_EXT_UNKNOWN_MASK},
+        {"ext_error", X509V3_EXT_ERROR_UNKNOWN, X509V3_EXT_UNKNOWN_MASK},
+        {"ext_parse", X509V3_EXT_PARSE_UNKNOWN, X509V3_EXT_UNKNOWN_MASK},
+        {"ext_dump", X509V3_EXT_DUMP_UNKNOWN, X509V3_EXT_UNKNOWN_MASK},
+        {NULL, 0, 0}
+    };
+    return set_multi_opts(flags, arg, cert_tbl);
 }
 
 int set_name_ex(unsigned long *flags, const char *arg)
 {
-       static const NAME_EX_TBL ex_tbl[] = {
-               { "esc_2253", ASN1_STRFLGS_ESC_2253, 0},
-               { "esc_ctrl", ASN1_STRFLGS_ESC_CTRL, 0},
-               { "esc_msb", ASN1_STRFLGS_ESC_MSB, 0},
-               { "use_quote", ASN1_STRFLGS_ESC_QUOTE, 0},
-               { "utf8", ASN1_STRFLGS_UTF8_CONVERT, 0},
-               { "ignore_type", ASN1_STRFLGS_IGNORE_TYPE, 0},
-               { "show_type", ASN1_STRFLGS_SHOW_TYPE, 0},
-               { "dump_all", ASN1_STRFLGS_DUMP_ALL, 0},
-               { "dump_nostr", ASN1_STRFLGS_DUMP_UNKNOWN, 0},
-               { "dump_der", ASN1_STRFLGS_DUMP_DER, 0},
-               { "compat", XN_FLAG_COMPAT, 0xffffffffL},
-               { "sep_comma_plus", XN_FLAG_SEP_COMMA_PLUS, XN_FLAG_SEP_MASK},
-               { "sep_comma_plus_space", XN_FLAG_SEP_CPLUS_SPC, XN_FLAG_SEP_MASK},
-               { "sep_semi_plus_space", XN_FLAG_SEP_SPLUS_SPC, XN_FLAG_SEP_MASK},
-               { "sep_multiline", XN_FLAG_SEP_MULTILINE, XN_FLAG_SEP_MASK},
-               { "dn_rev", XN_FLAG_DN_REV, 0},
-               { "nofname", XN_FLAG_FN_NONE, XN_FLAG_FN_MASK},
-               { "sname", XN_FLAG_FN_SN, XN_FLAG_FN_MASK},
-               { "lname", XN_FLAG_FN_LN, XN_FLAG_FN_MASK},
-               { "align", XN_FLAG_FN_ALIGN, 0},
-               { "oid", XN_FLAG_FN_OID, XN_FLAG_FN_MASK},
-               { "space_eq", XN_FLAG_SPC_EQ, 0},
-               { "dump_unknown", XN_FLAG_DUMP_UNKNOWN_FIELDS, 0},
-               { "RFC2253", XN_FLAG_RFC2253, 0xffffffffL},
-               { "oneline", XN_FLAG_ONELINE, 0xffffffffL},
-               { "multiline", XN_FLAG_MULTILINE, 0xffffffffL},
-               { "ca_default", XN_FLAG_MULTILINE, 0xffffffffL},
-               { NULL, 0, 0}
-       };
-       return set_multi_opts(flags, arg, ex_tbl);
+    static const NAME_EX_TBL ex_tbl[] = {
+        {"esc_2253", ASN1_STRFLGS_ESC_2253, 0},
+        {"esc_ctrl", ASN1_STRFLGS_ESC_CTRL, 0},
+        {"esc_msb", ASN1_STRFLGS_ESC_MSB, 0},
+        {"use_quote", ASN1_STRFLGS_ESC_QUOTE, 0},
+        {"utf8", ASN1_STRFLGS_UTF8_CONVERT, 0},
+        {"ignore_type", ASN1_STRFLGS_IGNORE_TYPE, 0},
+        {"show_type", ASN1_STRFLGS_SHOW_TYPE, 0},
+        {"dump_all", ASN1_STRFLGS_DUMP_ALL, 0},
+        {"dump_nostr", ASN1_STRFLGS_DUMP_UNKNOWN, 0},
+        {"dump_der", ASN1_STRFLGS_DUMP_DER, 0},
+        {"compat", XN_FLAG_COMPAT, 0xffffffffL},
+        {"sep_comma_plus", XN_FLAG_SEP_COMMA_PLUS, XN_FLAG_SEP_MASK},
+        {"sep_comma_plus_space", XN_FLAG_SEP_CPLUS_SPC, XN_FLAG_SEP_MASK},
+        {"sep_semi_plus_space", XN_FLAG_SEP_SPLUS_SPC, XN_FLAG_SEP_MASK},
+        {"sep_multiline", XN_FLAG_SEP_MULTILINE, XN_FLAG_SEP_MASK},
+        {"dn_rev", XN_FLAG_DN_REV, 0},
+        {"nofname", XN_FLAG_FN_NONE, XN_FLAG_FN_MASK},
+        {"sname", XN_FLAG_FN_SN, XN_FLAG_FN_MASK},
+        {"lname", XN_FLAG_FN_LN, XN_FLAG_FN_MASK},
+        {"align", XN_FLAG_FN_ALIGN, 0},
+        {"oid", XN_FLAG_FN_OID, XN_FLAG_FN_MASK},
+        {"space_eq", XN_FLAG_SPC_EQ, 0},
+        {"dump_unknown", XN_FLAG_DUMP_UNKNOWN_FIELDS, 0},
+        {"RFC2253", XN_FLAG_RFC2253, 0xffffffffL},
+        {"oneline", XN_FLAG_ONELINE, 0xffffffffL},
+        {"multiline", XN_FLAG_MULTILINE, 0xffffffffL},
+        {"ca_default", XN_FLAG_MULTILINE, 0xffffffffL},
+        {NULL, 0, 0}
+    };
+    return set_multi_opts(flags, arg, ex_tbl);
 }
 
 int set_ext_copy(int *copy_type, const char *arg)
 {
-       if (!strcasecmp(arg, "none"))
-               *copy_type = EXT_COPY_NONE;
-       else if (!strcasecmp(arg, "copy"))
-               *copy_type = EXT_COPY_ADD;
-       else if (!strcasecmp(arg, "copyall"))
-               *copy_type = EXT_COPY_ALL;
-       else
-               return 0;
-       return 1;
+    if (!strcasecmp(arg, "none"))
+        *copy_type = EXT_COPY_NONE;
+    else if (!strcasecmp(arg, "copy"))
+        *copy_type = EXT_COPY_ADD;
+    else if (!strcasecmp(arg, "copyall"))
+        *copy_type = EXT_COPY_ALL;
+    else
+        return 0;
+    return 1;
 }
 
 int copy_extensions(X509 *x, X509_REQ *req, int copy_type)
 {
-       STACK_OF(X509_EXTENSION) *exts = NULL;
-       X509_EXTENSION *ext, *tmpext;
-       ASN1_OBJECT *obj;
-       int i, idx, ret = 0;
-       if (!x || !req || (copy_type == EXT_COPY_NONE))
-               return 1;
-       exts = X509_REQ_get_extensions(req);
-
-       for(i = 0; i < sk_X509_EXTENSION_num(exts); i++) {
-               ext = sk_X509_EXTENSION_value(exts, i);
-               obj = X509_EXTENSION_get_object(ext);
-               idx = X509_get_ext_by_OBJ(x, obj, -1);
-               /* Does extension exist? */
-               if (idx != -1) {
-                       /* If normal copy don't override existing extension */
-                       if (copy_type == EXT_COPY_ADD)
-                               continue;
-                       /* Delete all extensions of same type */
-                       do {
-                               tmpext = X509_get_ext(x, idx);
-                               X509_delete_ext(x, idx);
-                               X509_EXTENSION_free(tmpext);
-                               idx = X509_get_ext_by_OBJ(x, obj, -1);
-                       } while (idx != -1);
-               }
-               if (!X509_add_ext(x, ext, -1))
-                       goto end;
-       }
-
-       ret = 1;
-
-       end:
-
-       sk_X509_EXTENSION_pop_free(exts, X509_EXTENSION_free);
-
-       return ret;
-}
-               
-               
-                       
-
-static int set_multi_opts(unsigned long *flags, const char *arg, const NAME_EX_TBL *in_tbl)
-{
-       STACK_OF(CONF_VALUE) *vals;
-       CONF_VALUE *val;
-       int i, ret = 1;
-       if(!arg) return 0;
-       vals = X509V3_parse_list(arg);
-       for (i = 0; i < sk_CONF_VALUE_num(vals); i++) {
-               val = sk_CONF_VALUE_value(vals, i);
-               if (!set_table_opts(flags, val->name, in_tbl))
-                       ret = 0;
-       }
-       sk_CONF_VALUE_pop_free(vals, X509V3_conf_free);
-       return ret;
-}
-
-static int set_table_opts(unsigned long *flags, const char *arg, const NAME_EX_TBL *in_tbl)
-{
-       char c;
-       const NAME_EX_TBL *ptbl;
-       c = arg[0];
-
-       if(c == '-') {
-               c = 0;
-               arg++;
-       } else if (c == '+') {
-               c = 1;
-               arg++;
-       } else c = 1;
-
-       for(ptbl = in_tbl; ptbl->name; ptbl++) {
-               if(!strcasecmp(arg, ptbl->name)) {
-                       *flags &= ~ptbl->mask;
-                       if(c) *flags |= ptbl->flag;
-                       else *flags &= ~ptbl->flag;
-                       return 1;
-               }
-       }
-       return 0;
-}
-
-void print_name(BIO *out, const char *title, X509_NAME *nm, unsigned long lflags)
-{
-       char *buf;
-       char mline = 0;
-       int indent = 0;
-
-       if(title) BIO_puts(out, title);
-       if((lflags & XN_FLAG_SEP_MASK) == XN_FLAG_SEP_MULTILINE) {
-               mline = 1;
-               indent = 4;
-       }
-       if(lflags == XN_FLAG_COMPAT) {
-               buf = X509_NAME_oneline(nm, 0, 0);
-               BIO_puts(out, buf);
-               BIO_puts(out, "\n");
-               OPENSSL_free(buf);
-       } else {
-               if(mline) BIO_puts(out, "\n");
-               X509_NAME_print_ex(out, nm, indent, lflags);
-               BIO_puts(out, "\n");
-       }
+    STACK_OF(X509_EXTENSION) *exts = NULL;
+    X509_EXTENSION *ext, *tmpext;
+    ASN1_OBJECT *obj;
+    int i, idx, ret = 0;
+    if (!x || !req || (copy_type == EXT_COPY_NONE))
+        return 1;
+    exts = X509_REQ_get_extensions(req);
+
+    for (i = 0; i < sk_X509_EXTENSION_num(exts); i++) {
+        ext = sk_X509_EXTENSION_value(exts, i);
+        obj = X509_EXTENSION_get_object(ext);
+        idx = X509_get_ext_by_OBJ(x, obj, -1);
+        /* Does extension exist? */
+        if (idx != -1) {
+            /* If normal copy don't override existing extension */
+            if (copy_type == EXT_COPY_ADD)
+                continue;
+            /* Delete all extensions of same type */
+            do {
+                tmpext = X509_get_ext(x, idx);
+                X509_delete_ext(x, idx);
+                X509_EXTENSION_free(tmpext);
+                idx = X509_get_ext_by_OBJ(x, obj, -1);
+            } while (idx != -1);
+        }
+        if (!X509_add_ext(x, ext, -1))
+            goto end;
+    }
+
+    ret = 1;
+
+ end:
+
+    sk_X509_EXTENSION_pop_free(exts, X509_EXTENSION_free);
+
+    return ret;
+}
+
+static int set_multi_opts(unsigned long *flags, const char *arg,
+                          const NAME_EX_TBL * in_tbl)
+{
+    STACK_OF(CONF_VALUE) *vals;
+    CONF_VALUE *val;
+    int i, ret = 1;
+    if (!arg)
+        return 0;
+    vals = X509V3_parse_list(arg);
+    for (i = 0; i < sk_CONF_VALUE_num(vals); i++) {
+        val = sk_CONF_VALUE_value(vals, i);
+        if (!set_table_opts(flags, val->name, in_tbl))
+            ret = 0;
+    }
+    sk_CONF_VALUE_pop_free(vals, X509V3_conf_free);
+    return ret;
+}
+
+static int set_table_opts(unsigned long *flags, const char *arg,
+                          const NAME_EX_TBL * in_tbl)
+{
+    char c;
+    const NAME_EX_TBL *ptbl;
+    c = arg[0];
+
+    if (c == '-') {
+        c = 0;
+        arg++;
+    } else if (c == '+') {
+        c = 1;
+        arg++;
+    } else
+        c = 1;
+
+    for (ptbl = in_tbl; ptbl->name; ptbl++) {
+        if (!strcasecmp(arg, ptbl->name)) {
+            *flags &= ~ptbl->mask;
+            if (c)
+                *flags |= ptbl->flag;
+            else
+                *flags &= ~ptbl->flag;
+            return 1;
+        }
+    }
+    return 0;
+}
+
+void print_name(BIO *out, const char *title, X509_NAME *nm,
+                unsigned long lflags)
+{
+    char *buf;
+    char mline = 0;
+    int indent = 0;
+
+    if (title)
+        BIO_puts(out, title);
+    if ((lflags & XN_FLAG_SEP_MASK) == XN_FLAG_SEP_MULTILINE) {
+        mline = 1;
+        indent = 4;
+    }
+    if (lflags == XN_FLAG_COMPAT) {
+        buf = X509_NAME_oneline(nm, 0, 0);
+        BIO_puts(out, buf);
+        BIO_puts(out, "\n");
+        OPENSSL_free(buf);
+    } else {
+        if (mline)
+            BIO_puts(out, "\n");
+        X509_NAME_print_ex(out, nm, indent, lflags);
+        BIO_puts(out, "\n");
+    }
 }
 
 X509_STORE *setup_verify(BIO *bp, char *CAfile, char *CApath)
 {
-       X509_STORE *store;
-       X509_LOOKUP *lookup;
-       if(!(store = X509_STORE_new())) goto end;
-       lookup=X509_STORE_add_lookup(store,X509_LOOKUP_file());
-       if (lookup == NULL) goto end;
-       if (CAfile) {
-               if(!X509_LOOKUP_load_file(lookup,CAfile,X509_FILETYPE_PEM)) {
-                       BIO_printf(bp, "Error loading file %s\n", CAfile);
-                       goto end;
-               }
-       } else 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 (CApath) {
-               if(!X509_LOOKUP_add_dir(lookup,CApath,X509_FILETYPE_PEM)) {
-                       BIO_printf(bp, "Error loading directory %s\n", CApath);
-                       goto end;
-               }
-       } else X509_LOOKUP_add_dir(lookup,NULL,X509_FILETYPE_DEFAULT);
-
-       ERR_clear_error();
-       return store;
-       end:
-       X509_STORE_free(store);
-       return NULL;
+    X509_STORE *store;
+    X509_LOOKUP *lookup;
+    if (!(store = X509_STORE_new()))
+        goto end;
+    lookup = X509_STORE_add_lookup(store, X509_LOOKUP_file());
+    if (lookup == NULL)
+        goto end;
+    if (CAfile) {
+        if (!X509_LOOKUP_load_file(lookup, CAfile, X509_FILETYPE_PEM)) {
+            BIO_printf(bp, "Error loading file %s\n", CAfile);
+            goto end;
+        }
+    } else
+        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 (CApath) {
+        if (!X509_LOOKUP_add_dir(lookup, CApath, X509_FILETYPE_PEM)) {
+            BIO_printf(bp, "Error loading directory %s\n", CApath);
+            goto end;
+        }
+    } else
+        X509_LOOKUP_add_dir(lookup, NULL, X509_FILETYPE_DEFAULT);
+
+    ERR_clear_error();
+    return store;
+ end:
+    X509_STORE_free(store);
+    return NULL;
 }
 
 #ifndef OPENSSL_NO_ENGINE
 /* Try to load an engine in a shareable library */
 static ENGINE *try_load_engine(BIO *err, const char *engine, int debug)
-       {
-       ENGINE *e = ENGINE_by_id("dynamic");
-       if (e)
-               {
-               if (!ENGINE_ctrl_cmd_string(e, "SO_PATH", engine, 0)
-                       || !ENGINE_ctrl_cmd_string(e, "LOAD", NULL, 0))
-                       {
-                       ENGINE_free(e);
-                       e = NULL;
-                       }
-               }
-       return e;
-       }
+{
+    ENGINE *e = ENGINE_by_id("dynamic");
+    if (e) {
+        if (!ENGINE_ctrl_cmd_string(e, "SO_PATH", engine, 0)
+            || !ENGINE_ctrl_cmd_string(e, "LOAD", NULL, 0)) {
+            ENGINE_free(e);
+            e = NULL;
+        }
+    }
+    return e;
+}
 
 ENGINE *setup_engine(BIO *err, const char *engine, int debug)
-        {
-        ENGINE *e = NULL;
-
-        if (engine)
-                {
-               if(strcmp(engine, "auto") == 0)
-                       {
-                       BIO_printf(err,"enabling auto ENGINE support\n");
-                       ENGINE_register_all_complete();
-                       return NULL;
-                       }
-               if((e = ENGINE_by_id(engine)) == NULL
-                       && (e = try_load_engine(err, engine, debug)) == NULL)
-                       {
-                       BIO_printf(err,"invalid engine \"%s\"\n", engine);
-                       ERR_print_errors(err);
-                       return NULL;
-                       }
-               if (debug)
-                       {
-                       ENGINE_ctrl(e, ENGINE_CTRL_SET_LOGSTREAM,
-                               0, err, 0);
-                       }
-                ENGINE_ctrl_cmd(e, "SET_USER_INTERFACE", 0, ui_method, 0, 1);
-               if(!ENGINE_set_default(e, ENGINE_METHOD_ALL))
-                       {
-                       BIO_printf(err,"can't use that engine\n");
-                       ERR_print_errors(err);
-                       ENGINE_free(e);
-                       return NULL;
-                       }
-
-               BIO_printf(err,"engine \"%s\" set.\n", ENGINE_get_id(e));
-
-               /* Free our "structural" reference. */
-               ENGINE_free(e);
-               }
-        return e;
+{
+    ENGINE *e = NULL;
+
+    if (engine) {
+        if (strcmp(engine, "auto") == 0) {
+            BIO_printf(err, "enabling auto ENGINE support\n");
+            ENGINE_register_all_complete();
+            return NULL;
+        }
+        if ((e = ENGINE_by_id(engine)) == NULL
+            && (e = try_load_engine(err, engine, debug)) == NULL) {
+            BIO_printf(err, "invalid engine \"%s\"\n", engine);
+            ERR_print_errors(err);
+            return NULL;
+        }
+        if (debug) {
+            ENGINE_ctrl(e, ENGINE_CTRL_SET_LOGSTREAM, 0, err, 0);
         }
+        ENGINE_ctrl_cmd(e, "SET_USER_INTERFACE", 0, ui_method, 0, 1);
+        if (!ENGINE_set_default(e, ENGINE_METHOD_ALL)) {
+            BIO_printf(err, "can't use that engine\n");
+            ERR_print_errors(err);
+            ENGINE_free(e);
+            return NULL;
+        }
+
+        BIO_printf(err, "engine \"%s\" set.\n", ENGINE_get_id(e));
+
+        /* Free our "structural" reference. */
+        ENGINE_free(e);
+    }
+    return e;
+}
 #endif
 
 int load_config(BIO *err, CONF *cnf)
-       {
-       static int load_config_called = 0;
-       if (load_config_called)
-               return 1;
-       load_config_called = 1;
-       if (!cnf)
-               cnf = config;
-       if (!cnf)
-               return 1;
-
-       OPENSSL_load_builtin_modules();
-
-       if (CONF_modules_load(cnf, NULL, 0) <= 0)
-               {
-               BIO_printf(err, "Error configuring OpenSSL\n");
-               ERR_print_errors(err);
-               return 0;
-               }
-       return 1;
-       }
+{
+    static int load_config_called = 0;
+    if (load_config_called)
+        return 1;
+    load_config_called = 1;
+    if (!cnf)
+        cnf = config;
+    if (!cnf)
+        return 1;
+
+    OPENSSL_load_builtin_modules();
+
+    if (CONF_modules_load(cnf, NULL, 0) <= 0) {
+        BIO_printf(err, "Error configuring OpenSSL\n");
+        ERR_print_errors(err);
+        return 0;
+    }
+    return 1;
+}
 
 char *make_config_name()
-       {
-       const char *t=X509_get_default_cert_area();
-       size_t len;
-       char *p;
-
-       len=strlen(t)+strlen(OPENSSL_CONF)+2;
-       p=OPENSSL_malloc(len);
-       if (p == NULL)
-               return NULL;
-       BUF_strlcpy(p,t,len);
+{
+    const char *t = X509_get_default_cert_area();
+    size_t len;
+    char *p;
+
+    len = strlen(t) + strlen(OPENSSL_CONF) + 2;
+    p = OPENSSL_malloc(len);
+    if (p == NULL)
+        return NULL;
+    BUF_strlcpy(p, t, len);
 #ifndef OPENSSL_SYS_VMS
-       BUF_strlcat(p,"/",len);
+    BUF_strlcat(p, "/", len);
 #endif
-       BUF_strlcat(p,OPENSSL_CONF,len);
+    BUF_strlcat(p, OPENSSL_CONF, len);
 
-       return p;
-       }
+    return p;
+}
 
 static unsigned long index_serial_hash(const OPENSSL_CSTRING *a)
-       {
-       const char *n;
+{
+    const char *n;
 
-       n=a[DB_serial];
-       while (*n == '0') n++;
-       return(lh_strhash(n));
-       }
+    n = a[DB_serial];
+    while (*n == '0')
+        n++;
+    return (lh_strhash(n));
+}
 
-static int index_serial_cmp(const OPENSSL_CSTRING *a, const OPENSSL_CSTRING *b)
-       {
-       const char *aa,*bb;
+static int index_serial_cmp(const OPENSSL_CSTRING *a,
+                            const OPENSSL_CSTRING *b)
+{
+    const char *aa, *bb;
 
-       for (aa=a[DB_serial]; *aa == '0'; aa++);
-       for (bb=b[DB_serial]; *bb == '0'; bb++);
-       return(strcmp(aa,bb));
-       }
+    for (aa = a[DB_serial]; *aa == '0'; aa++) ;
+    for (bb = b[DB_serial]; *bb == '0'; bb++) ;
+    return (strcmp(aa, bb));
+}
 
 static int index_name_qual(char **a)
-       { return(a[0][0] == 'V'); }
+{
+    return (a[0][0] == 'V');
+}
 
 static unsigned long index_name_hash(const OPENSSL_CSTRING *a)
-       { return(lh_strhash(a[DB_name])); }
+{
+    return (lh_strhash(a[DB_name]));
+}
 
 int index_name_cmp(const OPENSSL_CSTRING *a, const OPENSSL_CSTRING *b)
-       { return(strcmp(a[DB_name], b[DB_name])); }
+{
+    return (strcmp(a[DB_name], b[DB_name]));
+}
 
 static IMPLEMENT_LHASH_HASH_FN(index_serial, OPENSSL_CSTRING)
 static IMPLEMENT_LHASH_COMP_FN(index_serial, OPENSSL_CSTRING)
 static IMPLEMENT_LHASH_HASH_FN(index_name, OPENSSL_CSTRING)
 static IMPLEMENT_LHASH_COMP_FN(index_name, OPENSSL_CSTRING)
-
 #undef BSIZE
 #define BSIZE 256
-
 BIGNUM *load_serial(char *serialfile, int create, ASN1_INTEGER **retai)
-       {
-       BIO *in=NULL;
-       BIGNUM *ret=NULL;
-       MS_STATIC char buf[1024];
-       ASN1_INTEGER *ai=NULL;
-
-       ai=ASN1_INTEGER_new();
-       if (ai == NULL) goto err;
-
-       if ((in=BIO_new(BIO_s_file())) == NULL)
-               {
-               ERR_print_errors(bio_err);
-               goto err;
-               }
-
-       if (BIO_read_filename(in,serialfile) <= 0)
-               {
-               if (!create)