libreSSL/update.sh

419 lines
16 KiB
Bash
Executable File

#!/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_S) -f \$(DESTDIR)\$(mandir)/man3/$1 \$(DESTDIR)\$(mandir)/man3/$2" >> Makefile.am
done
)