Annotation of src/usr.bin/ssh/ed25519.sh, Revision 1.1
1.1 ! djm 1: #!/bin/sh
! 2: # $OpenBSD$
! 3: # Placed in the Public Domain.
! 4: #
! 5: AUTHOR="supercop-20221122/crypto_sign/ed25519/ref/implementors"
! 6: FILES="
! 7: supercop-20221122/crypto_verify/32/ref/verify.c
! 8: supercop-20221122/crypto_sign/ed25519/ref/fe25519.h
! 9: supercop-20221122/crypto_sign/ed25519/ref/fe25519.c
! 10: supercop-20221122/crypto_sign/ed25519/ref/sc25519.h
! 11: supercop-20221122/crypto_sign/ed25519/ref/sc25519.c
! 12: supercop-20221122/crypto_sign/ed25519/ref/ge25519.h
! 13: supercop-20221122/crypto_sign/ed25519/ref/ge25519.c
! 14: supercop-20221122/crypto_sign/ed25519/ref/keypair.c
! 15: supercop-20221122/crypto_sign/ed25519/ref/sign.c
! 16: supercop-20221122/crypto_sign/ed25519/ref/open.c
! 17: "
! 18: ###
! 19:
! 20: DATA="supercop-20221122/crypto_sign/ed25519/ref/ge25519_base.data"
! 21:
! 22: set -e
! 23: cd $1
! 24: echo -n '/* $'
! 25: echo 'OpenBSD: $ */'
! 26: echo
! 27: echo '/*'
! 28: echo ' * Public Domain, Authors:'
! 29: sed -e '/Alphabetical order:/d' -e 's/^/ * - /' < $AUTHOR
! 30: echo ' */'
! 31: echo
! 32: echo '#include <string.h>'
! 33: echo
! 34: echo '#include "crypto_api.h"'
! 35: echo
! 36: # Map the types used in this code to the ones in crypto_api.h. We use #define
! 37: # instead of typedef since some systems have existing intXX types and do not
! 38: # permit multiple typedefs even if they do not conflict.
! 39: for t in int8 uint8 int16 uint16 int32 uint32 int64 uint64; do
! 40: echo "#define $t crypto_${t}"
! 41: done
! 42: echo
! 43: for i in $FILES; do
! 44: echo "/* from $i */"
! 45: # Changes to all files:
! 46: # - inline ge25519_base.data where it is included
! 47: # - expand CRYPTO_NAMESPACE() namespacing define
! 48: # - remove all includes, we inline everything required.
! 49: # - make functions not required elsewhere static.
! 50: # - rename the functions we do use.
! 51: sed \
! 52: -e "/#include \"ge25519_base.data\"/r $DATA" \
! 53: -e "/#include/d" \
! 54: -e "s/^void /static void /g" \
! 55: -e 's/CRYPTO_NAMESPACE[(]\([a-zA-Z0-9_]*\)[)]/crypto_sign_ed25519_ref_\1/g' \
! 56: $i | \
! 57: case "$i" in
! 58: */crypto_verify/32/ref/verify.c)
! 59: # rename crypto_verify() to the name that the ed25519 code expects.
! 60: sed -e "/^#include.*/d" \
! 61: -e "s/crypto_verify/crypto_verify_32/g" \
! 62: -e "s/^int /static int /g"
! 63: ;;
! 64: */crypto_sign/ed25519/ref/sign.c)
! 65: # rename signing function to the name OpenSSH expects
! 66: sed -e "s/crypto_sign/crypto_sign_ed25519/g"
! 67: ;;
! 68: */crypto_sign/ed25519/ref/keypair.c)
! 69: # rename key generation function to the name OpenSSH expects
! 70: sed -e "s/crypto_sign_keypair/crypto_sign_ed25519_keypair/g"
! 71: ;;
! 72: */crypto_sign/ed25519/ref/open.c)
! 73: # rename verification function to the name OpenSSH expects
! 74: sed -e "s/crypto_sign_open/crypto_sign_ed25519_open/g"
! 75: ;;
! 76: */crypto_sign/ed25519/ref/fe25519.*)
! 77: # avoid a couple of name collions with other files
! 78: sed -e "s/reduce_add_sub/fe25519_reduce_add_sub/g" \
! 79: -e "s/ equal[(]/ fe25519_equal(/g" \
! 80: -e "s/^int /static int /g"
! 81: ;;
! 82: */crypto_sign/ed25519/ref/sc25519.h)
! 83: # Lots of unused prototypes to remove
! 84: sed -e "s/^int /static int /g" \
! 85: -e '/shortsc25519_from16bytes/d' \
! 86: -e '/sc25519_iszero_vartime/d' \
! 87: -e '/sc25519_isshort_vartime/d' \
! 88: -e '/sc25519_lt_vartime/d' \
! 89: -e '/sc25519_sub_nored/d' \
! 90: -e '/sc25519_mul_shortsc/d' \
! 91: -e '/sc25519_from_shortsc/d' \
! 92: -e '/sc25519_window5/d'
! 93: ;;
! 94: */crypto_sign/ed25519/ref/sc25519.c)
! 95: # Lots of unused code to remove, some name collisions to avoid
! 96: sed -e "s/reduce_add_sub/sc25519_reduce_add_sub/g" \
! 97: -e "s/ equal[(]/ sc25519_equal(/g" \
! 98: -e "s/^int /static int /g" \
! 99: -e "s/m[[]/sc25519_m[/g" \
! 100: -e "s/mu[[]/sc25519_mu[/g" \
! 101: -e '/shortsc25519_from16bytes/,/^}$/d' \
! 102: -e '/sc25519_iszero_vartime/,/^}$/d' \
! 103: -e '/sc25519_isshort_vartime/,/^}$/d' \
! 104: -e '/sc25519_lt_vartime/,/^}$/d' \
! 105: -e '/sc25519_sub_nored/,/^}$/d' \
! 106: -e '/sc25519_mul_shortsc/,/^}$/d' \
! 107: -e '/sc25519_from_shortsc/,/^}$/d' \
! 108: -e '/sc25519_window5/,/^}$/d'
! 109: ;;
! 110: */crypto_sign/ed25519/ref//ge25519.*)
! 111: sed -e "s/^int /static int /g"
! 112: ;;
! 113: # Default: pass through.
! 114: *)
! 115: cat
! 116: ;;
! 117: esac | \
! 118: sed -e 's/[ ]*$//'
! 119: done