diff options
Diffstat (limited to 'devel/import-from-nettle.sh')
-rwxr-xr-x | devel/import-from-nettle.sh | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/devel/import-from-nettle.sh b/devel/import-from-nettle.sh new file mode 100755 index 0000000000..3867f9e2a7 --- /dev/null +++ b/devel/import-from-nettle.sh @@ -0,0 +1,136 @@ +#!/bin/sh + +# This script copies files from the nettle upstream, with necessary +# adjustments for bundling in GnuTLS. + +set +e + +: ${srcdir=.} +SRC=$srcdir/devel/nettle +DST=$srcdir/lib/nettle/backport + +IMPORTS=" +block-internal.h +cfb.c +cfb.h +cmac.c +cmac.h +cmac-aes128.c +cmac-aes256.c +chacha-core-internal.c +chacha-crypt.c +chacha-internal.h +chacha-poly1305.c +chacha-poly1305.h +chacha-set-key.c +chacha-set-nonce.c +chacha.h +poly1305-internal.c +poly1305-internal.h +poly1305.h +xts.c +xts.h +xts-aes128.c +xts-aes256.c +siv-cmac.c +siv-cmac.h +siv-cmac-aes128.c +siv-cmac-aes256.c +" + +PUBLIC=" +aes.h +bignum.h +ctr.h +des.h +ecc-curve.h +ecc.h +macros.h +memops.h +memxor.h +nettle-meta.h +nettle-types.h +" + +test -d $DST || mkdir $DST + +for f in $IMPORTS; do + src=$SRC/$f + dst=$DST/$f + if test -f $src; then + if test -f $dst; then + echo "Replacing $dst (existing file backed up in $dst~)" + mv $dst $dst~ + else + echo "Copying file $dst" + fi + cp $src $dst + # Use <nettle/*.h> for public headers. + for h in $PUBLIC; do + p=$(echo $h | sed 's/\./\\./g') + if grep '^#include "'$p'"' $dst 2>&1 >/dev/null; then + sed 's!^#include "'$p'"!#include <nettle/'$h'>!' $dst > $dst-t && \ + mv $dst-t $dst + fi + done + # Remove unused <assert.h>. + if grep '^#include <assert\.h>' $dst 2>&1 >/dev/null; then + if ! grep 'assert *(' $dst 2>&1 >/dev/null; then + sed '/^#include <assert\.h>/d' $dst > $dst-t && mv $dst-t $dst + fi + fi + case $dst in + *.h) + # Rename header guard so as not to conflict with the public ones. + if grep '^#ifndef NETTLE_.*_H\(_INCLUDED\)*' $dst 2>&1 >/dev/null; then + g=$(sed -n 's/^#ifndef NETTLE_\(.*_H\(_INCLUDED\)*\)/\1/p' $dst) + sed 's/\(NETTLE_'$g'\)/GNUTLS_LIB_NETTLE_BACKPORT_\1/' $dst > $dst-t && \ + mv $dst-t $dst + fi + ;; + esac + case $dst in + *.h) + # Add prefix to function symbols avoid clashing with the public ones. + sed -e 's/^#define \(.*\) nettle_\1/#define \1 gnutls_nettle_backport_\1/' \ + -e 's/^#define _\(.*\) _nettle_\1/#define _\1 _gnutls_nettle_backport_\1/' \ + -e 's/^#define \(.*\) _nettle_\1/#define \1 _gnutls_nettle_backport_\1/' \ + $dst > $dst-t && \ + mv $dst-t $dst + ;; + esac + case $dst in + */cfb.c | */cmac.c | */xts.c | */siv-cmac.c) + sed \ + -e 's/"nettle-internal\.h"/"nettle-alloca.h"/' \ + $dst > $dst-t && mv $dst-t $dst + ;; + esac + case $dst in + */*.[ch]) + sed \ + -e '/^#include <nettle\/nettle-types\.h>/a\ +#include "block8.h" +' \ + $dst > $dst-t && mv $dst-t $dst + ;; + esac + case $dst in + */siv-cmac*.[ch]) + sed \ + -e '/^#include "cmac\.h"/ { i\ +#ifdef HAVE_NETTLE_CMAC128_UPDATE\ +#include <nettle/cmac.h>\ +#else\ +#include "cmac.h"\ +#endif +; d +}' \ + $dst > $dst-t && mv $dst-t $dst + ;; + esac + else + echo "Error: $src not found" 1>&2 + exit 1 + fi +done |