#!/usr/bin/env bash set -e # resync this library with the upstream project, remove old submodule dirs if [ -d openbsd ]; then (cd openbsd git checkout master git pull) else if [ -z "$LIBRESSL_GIT" ]; then git clone https://github.com/libressl-portable/openbsd.git else git clone $LIBRESSL_GIT/openbsd fi fi libssl_src=openbsd/src/lib/libssl libssl_regress=openbsd/src/regress/lib/libssl libc_src=openbsd/src/lib/libc libc_regress=openbsd/src/regress/lib/libc libcrypto_src=openbsd/src/lib/libcrypto openssl_cmd_src=openbsd/src/usr.sbin/openssl libcrypto_regress=openbsd/src/regress/lib/libcrypto source $libssl_src/ssl/shlib_version libssl_version=$major:$minor:0 echo libssl version $libssl_version source $libcrypto_src/crypto/shlib_version libcrypto_version=$major:$minor:0 echo libcrypto version $libcrypto_version crypto_subdirs= copy_src() { mkdir -p $1 rm -f $1/*.c for file in $2; do cp $libssl_src/src/$1/$file $1 done } copy_hdrs() { for file in $2; do cp $libssl_src/src/$1/$file include/openssl done } copy_crypto() { copy_src crypto/$1 "$2" crypto_subdirs="$crypto_subdirs $1" } cp $libssl_src/src/LICENSE COPYING echo "Please see OpenBSD CVS logs" > ChangeLog cp $libcrypto_src/crypto/arch/amd64/opensslconf.h include/openssl cp $libssl_src/src/crypto/opensslfeatures.h include/openssl cp $libssl_src/src/e_os2.h include/openssl cp $libssl_src/src/ssl/pqueue.h include for i in explicit_bzero.c strlcpy.c strlcat.c timingsafe_bcmp.c timingsafe_memcmp.c; do cp $libc_src/string/$i crypto/compat done cp $libc_src/stdlib/reallocarray.c crypto/compat cp $libc_src/stdlib/strtonum.c crypto/compat cp $libc_src/crypt/arc4random.c crypto/compat cp $libc_src/crypt/chacha_private.h crypto/compat cp $libcrypto_src/crypto/getentropy_*.c crypto/compat (cd ./$libssl_src/src/crypto/objects/; perl objects.pl objects.txt obj_mac.num obj_mac.h; perl obj_dat.pl obj_mac.h obj_dat.h ) mkdir -p include/openssl crypto/objects mv $libssl_src/src/crypto/objects/obj_mac.h ./include/openssl/obj_mac.h mv $libssl_src/src/crypto/objects/obj_dat.h ./crypto/objects/obj_dat.h copy_hdrs crypto "stack/stack.h lhash/lhash.h stack/safestack.h opensslv.h ossl_typ.h err/err.h crypto.h comp/comp.h x509/x509.h buffer/buffer.h objects/objects.h asn1/asn1.h bn/bn.h ec/ec.h ecdsa/ecdsa.h ecdh/ecdh.h rsa/rsa.h sha/sha.h x509/x509_vfy.h pkcs7/pkcs7.h pem/pem.h pem/pem2.h hmac/hmac.h rand/rand.h md5/md5.h krb5/krb5_asn.h asn1/asn1_mac.h x509v3/x509v3.h conf/conf.h ocsp/ocsp.h aes/aes.h modes/modes.h asn1/asn1t.h dso/dso.h bf/blowfish.h bio/bio.h cast/cast.h cmac/cmac.h conf/conf_api.h des/des.h dh/dh.h dsa/dsa.h cms/cms.h engine/engine.h ui/ui.h pkcs12/pkcs12.h ts/ts.h md4/md4.h ripemd/ripemd.h whrlpool/whrlpool.h idea/idea.h mdc2/mdc2.h rc2/rc2.h rc4/rc4.h rc5/rc5.h ui/ui_compat.h txt_db/txt_db.h chacha/chacha.h evp/evp.h poly1305/poly1305.h" copy_hdrs ssl "srtp.h ssl.h ssl2.h ssl3.h ssl23.h tls1.h dtls1.h" for i in ssl/srtp.h \ ssl/ssl_locl.h; do cp $libssl_src/src/$i ssl done copy_src ssl "s3_meth.c s3_srvr.c s3_clnt.c s3_lib.c s3_enc.c s3_pkt.c s3_both.c s23_meth.c s23_srvr.c s23_clnt.c s23_lib.c s23_pkt.c t1_meth.c t1_srvr.c t1_clnt.c t1_lib.c t1_enc.c d1_meth.c d1_srvr.c d1_clnt.c d1_lib.c d1_pkt.c d1_both.c d1_enc.c d1_srtp.c ssl_lib.c ssl_err2.c ssl_cert.c ssl_sess.c ssl_ciph.c ssl_stat.c ssl_rsa.c ssl_asn1.c ssl_txt.c ssl_algs.c bio_ssl.c ssl_err.c t1_reneg.c s3_cbc.c pqueue.c" copy_src crypto "cryptlib.h cryptlib.c malloc-wrapper.c mem_clr.c mem_dbg.c cversion.c ex_data.c cpt_err.c o_time.c o_time.h o_str.c o_init.c md32_common.h" copy_crypto aes "aes_cbc.c aes_core.c aes_misc.c aes_ecb.c aes_cfb.c aes_ofb.c aes_ctr.c aes_ige.c aes_wrap.c aes_locl.h" copy_crypto asn1 "a_object.c a_bitstr.c a_utctm.c a_gentm.c a_time.c a_int.c a_octet.c a_print.c a_type.c a_dup.c a_d2i_fp.c a_i2d_fp.c a_enum.c a_utf8.c a_sign.c a_digest.c a_verify.c a_mbstr.c a_strex.c x_algor.c x_val.c x_pubkey.c x_sig.c x_req.c x_attrib.c x_bignum.c x_long.c x_name.c x_x509.c x_x509a.c x_crl.c x_info.c x_spki.c nsseq.c x_nx509.c d2i_pu.c d2i_pr.c i2d_pu.c i2d_pr.c t_req.c t_x509.c t_x509a.c t_crl.c t_pkey.c t_spki.c t_bitst.c tasn_new.c tasn_fre.c tasn_enc.c tasn_dec.c tasn_utl.c tasn_typ.c tasn_prn.c ameth_lib.c f_int.c f_string.c n_pkey.c f_enum.c x_pkey.c a_bool.c x_exten.c bio_asn1.c bio_ndef.c asn_mime.c asn1_gen.c asn1_par.c asn1_lib.c asn1_err.c a_bytes.c a_strnid.c evp_asn1.c asn_pack.c p5_pbe.c p5_pbev2.c p8_pkey.c asn_moid.c a_set.c asn1_locl.h charmap.h" copy_crypto bf "bf_skey.c bf_ecb.c bf_enc.c bf_cfb64.c bf_ofb64.c bf_locl.h bf_pi.h" copy_crypto bio "bio_lib.c bio_cb.c bio_err.c bss_mem.c bss_null.c bss_fd.c bss_file.c bss_sock.c bss_conn.c bf_null.c bf_buff.c b_dump.c b_sock.c bss_acpt.c bf_nbio.c bss_log.c bss_bio.c bss_dgram.c b_print.c" copy_crypto bn "bn_add.c bn_asm.c bn_div.c bn_exp.c bn_lib.c bn_ctx.c bn_mul.c bn_mod.c bn_print.c bn_rand.c bn_shift.c bn_word.c bn_blind.c bn_kron.c bn_sqrt.c bn_gcd.c bn_prime.c bn_err.c bn_sqr.c bn_recp.c bn_mont.c bn_mpi.c bn_exp2.c bn_gf2m.c bn_nist.c bn_depr.c bn_const.c bn_x931p.c bn_lcl.h bn_prime.h" copy_crypto buffer "buffer.c buf_err.c buf_str.c" copy_crypto cast "c_skey.c c_ecb.c c_enc.c c_cfb64.c c_ofb64.c cast_lcl.h cast_s.h" copy_crypto chacha "chacha.c chacha-merged.c" copy_crypto cmac "cmac.c cm_ameth.c cm_pmeth.c" #copy_crypto cms "cms_lib.c cms_asn1.c cms_att.c cms_io.c cms_smime.c cms_err.c # cms_sd.c cms_dd.c cms_cd.c cms_env.c cms_enc.c cms_ess.c cms_pwri.c cms.h cms_lcl.h" copy_crypto comp "comp_lib.c comp_err.c c_rle.c c_zlib.c" copy_crypto conf "conf_err.c conf_lib.c conf_api.c conf_def.c conf_mod.c conf_mall.c conf_sap.c conf_def.h" copy_crypto des "cbc_cksm.c cbc_enc.c cfb64enc.c cfb_enc.c ecb3_enc.c ecb_enc.c enc_read.c enc_writ.c fcrypt.c fcrypt_b.c ofb64enc.c ofb_enc.c pcbc_enc.c qud_cksm.c rand_key.c set_key.c xcbc_enc.c str2key.c cfb64ede.c ofb64ede.c ede_cbcm_enc.c des_enc.c des_locl.h ncbc_enc.c spr.h" copy_crypto dh "dh_asn1.c dh_gen.c dh_key.c dh_lib.c dh_check.c dh_err.c dh_depr.c dh_ameth.c dh_pmeth.c dh_prn.c" copy_crypto dsa "dsa_gen.c dsa_key.c dsa_lib.c dsa_asn1.c dsa_vrf.c dsa_sign.c dsa_err.c dsa_ossl.c dsa_depr.c dsa_ameth.c dsa_pmeth.c dsa_prn.c dsa_locl.h" copy_crypto dso "dso_dlfcn.c dso_err.c dso_lib.c dso_null.c dso_openssl.c" copy_crypto ec "ec_lib.c ecp_smpl.c ecp_mont.c ecp_nist.c ec_cvt.c ec_mult.c ec_err.c ec_curve.c ec_check.c ec_print.c ec_asn1.c ec_key.c ec2_smpl.c ec2_mult.c ec_ameth.c ec_pmeth.c eck_prn.c ecp_oct.c ec2_oct.c ec_oct.c ec_lcl.h" copy_crypto ecdh "ech_lib.c ech_ossl.c ech_key.c ech_err.c ech_locl.h" copy_crypto ecdsa "ecs_lib.c ecs_asn1.c ecs_ossl.c ecs_sign.c ecs_vrf.c ecs_err.c ecs_locl.h" # Engine interface is disabled copy_crypto engine "eng_err.c eng_lib.c eng_list.c eng_init.c eng_ctrl.c eng_table.c eng_pkey.c eng_fat.c eng_all.c tb_rsa.c tb_dsa.c tb_ecdsa.c tb_dh.c tb_ecdh.c tb_rand.c tb_store.c tb_cipher.c tb_digest.c tb_pkmeth.c tb_asnmth.c eng_openssl.c eng_cnf.c eng_dyn.c eng_rsax.c eng_int.h" copy_crypto err "err.c err_all.c err_prn.c" copy_crypto evp "encode.c digest.c evp_enc.c evp_key.c e_des.c e_bf.c e_idea.c e_des3.c e_rc4.c e_aes.c names.c e_xcbc_d.c e_rc2.c e_cast.c m_null.c m_md4.c m_md5.c m_sha.c m_sha1.c m_wp.c m_dss.c m_dss1.c m_mdc2.c m_ripemd.c m_ecdsa.c p_open.c p_seal.c p_sign.c p_verify.c p_lib.c p_enc.c p_dec.c bio_md.c bio_b64.c bio_enc.c evp_err.c e_null.c c_all.c c_allc.c c_alld.c evp_lib.c evp_pkey.c evp_pbe.c p5_crpt.c p5_crpt2.c e_old.c pmeth_lib.c pmeth_fn.c pmeth_gn.c m_sigver.c e_aes_cbc_hmac_sha1.c e_rc4_hmac_md5.c evp_locl.h e_chacha.c evp_aead.c e_chacha20poly1305.c" copy_crypto hmac "hmac.c hm_ameth.c hm_pmeth.c" copy_crypto idea "i_cbc.c i_cfb64.c i_ofb64.c i_ecb.c i_skey.c idea_lcl.h" copy_crypto krb5 "krb5_asn.c" copy_crypto lhash "lhash.c lh_stats.c" copy_crypto md4 "md4_dgst.c md4_one.c md4_locl.h" copy_crypto md5 "md5_dgst.c md5_one.c md5_locl.h" copy_crypto mdc2 "mdc2dgst.c mdc2_one.c" copy_crypto modes "cbc128.c ctr128.c cts128.c cfb128.c ofb128.c gcm128.c ccm128.c xts128.c modes_lcl.h" copy_crypto objects "o_names.c obj_dat.c obj_lib.c obj_err.c obj_xref.c obj_xref.h" copy_crypto ocsp "ocsp_asn.c ocsp_ext.c ocsp_ht.c ocsp_lib.c ocsp_cl.c ocsp_srv.c ocsp_prn.c ocsp_vfy.c ocsp_err.c" copy_crypto pem "pem_sign.c pem_seal.c pem_info.c pem_lib.c pem_all.c pem_err.c pem_x509.c pem_xaux.c pem_oth.c pem_pk8.c pem_pkey.c pvkfmt.c" copy_crypto pkcs12 "p12_add.c p12_asn.c p12_attr.c p12_crpt.c p12_crt.c p12_decr.c p12_init.c p12_key.c p12_kiss.c p12_mutl.c p12_utl.c p12_npas.c pk12err.c p12_p8d.c p12_p8e.c" copy_crypto pkcs7 "pk7_asn1.c pk7_lib.c pkcs7err.c pk7_doit.c pk7_smime.c pk7_attr.c pk7_mime.c bio_pk7.c" copy_crypto poly1305 "poly1305-donna.c poly1305.c" copy_crypto rand "randfile.c rand_err.c rand_lib.c" copy_crypto rc2 "rc2_ecb.c rc2_skey.c rc2_cbc.c rc2cfb64.c rc2ofb64.c rc2_locl.h" copy_crypto rc4 "rc4_enc.c rc4_skey.c rc4_utl.c rc4_locl.h" copy_crypto ripemd "rmd_dgst.c rmd_one.c rmd_locl.h rmdconst.h" copy_crypto rsa "rsa_eay.c rsa_gen.c rsa_lib.c rsa_sign.c rsa_saos.c rsa_err.c rsa_pk1.c rsa_ssl.c rsa_none.c rsa_oaep.c rsa_chk.c rsa_pss.c rsa_x931.c rsa_asn1.c rsa_depr.c rsa_ameth.c rsa_prn.c rsa_pmeth.c rsa_crpt.c rsa_locl.h" copy_crypto sha "sha_dgst.c sha1dgst.c sha_one.c sha1_one.c sha256.c sha512.c sha_locl.h" copy_crypto stack "stack.c" copy_crypto ts "ts_err.c ts_req_utils.c ts_req_print.c ts_rsp_utils.c ts_rsp_print.c ts_rsp_sign.c ts_rsp_verify.c ts_verify_ctx.c ts_lib.c ts_conf.c ts_asn1.c" copy_crypto txt_db "txt_db.c" copy_crypto ui "ui_err.c ui_lib.c ui_openssl.c ui_util.c ui_locl.h" copy_crypto whrlpool "wp_block.c wp_dgst.c wp_locl.h" copy_crypto x509 "x509_def.c x509_d2.c x509_r2x.c x509_cmp.c x509_obj.c x509_req.c x509spki.c x509_vfy.c x509_set.c x509cset.c x509rset.c x509_err.c x509name.c x509_v3.c x509_ext.c x509_att.c x509type.c x509_lu.c x_all.c x509_txt.c x509_trs.c by_file.c by_dir.c x509_vpm.c x509_lcl.h" copy_crypto x509v3 "v3_bcons.c v3_bitst.c v3_conf.c v3_extku.c v3_ia5.c v3_lib.c v3_prn.c v3_utl.c v3err.c v3_genn.c v3_alt.c v3_skey.c v3_akey.c v3_pku.c v3_int.c v3_enum.c v3_sxnet.c v3_cpols.c v3_crld.c v3_purp.c v3_info.c v3_ocsp.c v3_akeya.c v3_pmaps.c v3_pcons.c v3_ncons.c v3_pcia.c v3_pci.c pcy_cache.c pcy_node.c pcy_data.c pcy_map.c pcy_tree.c pcy_lib.c pcy_int.h ext_dat.h" copy_src apps "apps.c apps.h asn1pars.c ca.c ciphers.c cms.c crl.c crl2p7.c dgst.c dh.c dhparam.c dsa.c dsaparam.c ec.c ecparam.c enc.c engine.c errstr.c gendh.c gendsa.c genpkey.c genrsa.c nseq.c ocsp.c openssl.c openssl.cnf passwd.c pkcs12.c pkcs7.c pkcs8.c pkey.c pkeyparam.c pkeyutl.c prime.c progs.h rand.c req.c rsa.c rsautl.c s_apps.h s_cb.c s_client.c s_server.c s_socket.c s_time.c sess_id.c smime.c speed.c spkac.c testdsa.h testrsa.h timeouts.h ts.c verify.c version.c x509.c" rm -f tests/*.c for i in aead/aeadtest.c aeswrap/aes_wrap.c base64/base64test.c bf/bftest.c \ bio/biotest.c bn/general/bntest.c bn/mont/mont.c \ cast/casttest.c chacha/chachatest.c cts128/cts128test.c \ des/destest.c dh/dhtest.c dsa/dsatest.c ec/ectest.c ecdh/ecdhtest.c \ ecdsa/ecdsatest.c engine/enginetest.c evp/evptest.c exp/exptest.c \ gcm128/gcm128test.c hmac/hmactest.c idea/ideatest.c ige/igetest.c \ md4/md4test.c md5/md5test.c mdc2/mdc2test.c poly1305/poly1305test.c \ pkcs7/pkcs7test.c pqueue/pq_test.c rand/randtest.c rc2/rc2test.c \ rc4/rc4test.c rmd/rmdtest.c sha/shatest.c sha1/sha1test.c \ sha256/sha256test.c sha512/sha512test.c utf8/utf8test.c; do cp $libcrypto_regress/$i tests done cp $libc_regress/arc4random-fork/arc4random-fork.c tests/arc4randomforktest.c cp $libc_regress/explicit_bzero/explicit_bzero.c tests cp $libc_regress/timingsafe/timingsafe.c tests for i in ssl/ssltest.c ssl/testssl certs/ca.pem certs/server.pem; do cp $libssl_regress/$i tests done # do not directly run all test programs test_excludes=(biotest aeadtest evptest pq_test ssltest arc4randomforktest) (cd tests cp Makefile.am.tpl Makefile.am for i in `ls -1 *.c|sort`; do TEST=`echo $i|sed -e "s/\.c//"` if ! [[ ${test_excludes[*]} =~ "$TEST" ]]; then echo "TESTS += $TEST" >> Makefile.am fi echo "check_PROGRAMS += $TEST" >> Makefile.am echo "${TEST}_SOURCES = $i" >> Makefile.am echo "${TEST}_LDADD = \$(PLATFORM_LDADD)" >> Makefile.am echo "${TEST}_LDADD += \$(top_builddir)/ssl/libssl.la" >> Makefile.am echo "${TEST}_LDADD += \$(top_builddir)/crypto/libcrypto.la" >> Makefile.am done ) cp $libcrypto_regress/evp/evptests.txt tests cp $libcrypto_regress/aead/aeadtests.txt tests cp $libcrypto_regress/pqueue/expected.txt tests/pq_expected.txt chmod 755 tests/testssl for i in "${test_excludes[@]}"; do if [ -e tests/${i}.sh ]; then echo "TESTS += ${i}.sh" >> tests/Makefile.am echo "EXTRA_DIST += ${i}.sh" >> tests/Makefile.am fi done echo "EXTRA_DIST += aeadtests.txt" >> tests/Makefile.am echo "EXTRA_DIST += evptests.txt" >> tests/Makefile.am echo "EXTRA_DIST += pq_expected.txt" >> tests/Makefile.am echo "EXTRA_DIST += testssl ca.pem server.pem" >> tests/Makefile.am (cd include/openssl cp Makefile.am.tpl Makefile.am for i in `ls -1 *.h|sort`; do echo "opensslinclude_HEADERS += $i" >> Makefile.am done ) (cd ssl sed -e "s/libssl-version/${libssl_version}/" Makefile.am.tpl > Makefile.am for i in `ls -1 *.c|sort`; do echo "libssl_la_SOURCES += $i" >> Makefile.am done for i in `ls -1 *.h|sort`; do echo "noinst_HEADERS += $i" >> Makefile.am done ) # do not directly compile C files that are included in other C files crypto_excludes=( des/ncbc_enc.c chacha/chacha-merged.c poly1305/poly1305-donna.c ) (cd crypto sed -e "s/libcrypto-version/${libcrypto_version}/" Makefile.am.tpl > Makefile.am for i in `ls -1 *.c|sort`; do echo "libcrypto_la_SOURCES += $i" >> Makefile.am done for i in `ls -1 *.h|sort`; do echo "noinst_HEADERS += $i" >> Makefile.am done for subdir in $crypto_subdirs; do for i in `ls -1 $subdir/*.c|sort`; do if ! [[ ${crypto_excludes[*]} =~ $i ]]; then echo "libcrypto_la_SOURCES += $i" >> Makefile.am fi done headers=`ls -1 $subdir/*.h 2>/dev/null |sort` if [ "$headers" != "" ]; then for i in $headers; do echo "noinst_HEADERS += $i" >> Makefile.am done fi done for i in "${crypto_excludes[@]}"; do echo "EXTRA_libcrypto_la_SOURCES += ${i}" >> Makefile.am done ) (cd apps cp Makefile.am.tpl Makefile.am for i in `ls -1 *.c|sort`; do echo "openssl_SOURCES += $i" >> Makefile.am done for i in `ls -1 *.h|sort`; do echo "noinst_HEADERS += $i" >> Makefile.am done ) (cd man cp Makefile.am.tpl Makefile.am for i in `ls -1 ../$libssl_src/src/doc/crypto/*.pod | sort`; do BASE=`echo $i|sed -e "s/\.pod//"` NAME=`basename "$BASE"` echo processing $NAME pod2man --official --release=LibreSSL --center=LibreSSL --section=3 --name=$NAME < $BASE.pod > $NAME.3 echo "dist_man_MANS += $NAME.3" >> Makefile.am done for i in `ls -1 ../$libssl_src/src/doc/ssl/*.pod | sort`; do BASE=`echo $i|sed -e "s/\.pod//"` NAME=`basename "$BASE"` echo processing $NAME pod2man --official --release=LibreSSL --center=LibreSSL --section=3 --name=$NAME < $BASE.pod > $NAME.3 echo "dist_man_MANS += $NAME.3" >> Makefile.am done for i in `ls -1 ../$libssl_src/src/doc/apps/*.pod | sort`; do BASE=`echo $i|sed -e "s/\.pod//"` NAME=`basename "$BASE"` echo processing $NAME pod2man --official --release=LibreSSL --center=LibreSSL --section=1 --name=$NAME < $BASE.pod > $NAME.1 echo "dist_man_MANS += $NAME.1" >> Makefile.am done echo "dist_man_MANS += openssl.1" >> Makefile.am echo "install-data-hook:" >> Makefile.am cp ../$openssl_cmd_src/openssl.1 . source links for i in $MLINKS; do IFS=","; set $i; unset IFS echo " ln -f \$(DESTDIR)\$(mandir)/man3/$1 \$(DESTDIR)\$(mandir)/man3/$2" >> Makefile.am done )