#!/bin/sh

# change directory to $AUTOPKGTEST_TMP
cd "${AUTOPKGTEST_TMP}"

cleanup() {
  ex=$?
  rm -f alice.* bob.*
  exit "${ex}"
}
trap "cleanup" EXIT TERM INT

primitives="
mceliece6960119
mceliece6688128
mceliece8192128
mceliece460896
mceliece348864
mceliece6960119pc
mceliece6688128pc
mceliece8192128pc
mceliece460896pc
mceliece348864pc
"

# main test
EX=0
for primitive in ${primitives}; do
  # alice - keypair
  "${primitive}-keypair" 5>alice.publickey 9>alice.secretkey
  # bob - encrypts
  "${primitive}-enc" >bob.ciphertext 7>bob.sessionkey 4<alice.publickey
  # alice - decrypts
  "${primitive}-dec" 7>alice.sessionkey <bob.ciphertext 8<alice.secretkey
  # compare session keys
  if [ x"`xxd -p -c 0 < alice.sessionkey`" != x"`xxd -p -c 0 < bob.sessionkey`" ]; then
    (
      echo 'alice publickey:  '`xxd -p -c 0 < alice.publickey`
      echo 'alice secretkey:  '`xxd -p -c 0 < alice.secretkey`
      echo 'bob.ciphertext:   '`xxd -p -c 0 < bob.ciphertext`
      echo 'alice sessionkey: '`xxd -p -c 0 < alice.sessionkey`
      echo 'bob sessionkey:   '`xxd -p -c 0 < bob.sessionkey`
      echo "${primitive} ... FAILED"
    ) >&2
    EX=1
  else
    echo "${primitive} ... OK"
  fi
done

# f-variants
for primitive in ${primitives}; do
  # alice - keypair
  "${primitive}f-keypair" 5>alice.publickey 9>alice.secretkey
  # bob - encrypts
  "${primitive}-enc" >bob.ciphertext 7>bob.sessionkey 4<alice.publickey
  # alice - decrypts
  "${primitive}-dec" 7>alice.sessionkey <bob.ciphertext 8<alice.secretkey
  # compare session keys
  if [ x"`xxd -p -c 0 < alice.sessionkey`" != x"`xxd -p -c 0 < bob.sessionkey`" ]; then
    (
      echo 'alice publickey:  '`xxd -p -c 0 < alice.publickey`
      echo 'alice secretkey:  '`xxd -p -c 0 < alice.secretkey`
      echo 'bob.ciphertext:   '`xxd -p -c 0 < bob.ciphertext`
      echo 'alice sessionkey: '`xxd -p -c 0 < alice.sessionkey`
      echo 'bob sessionkey:   '`xxd -p -c 0 < bob.sessionkey`
      echo "${primitive}f ... FAILED"
    ) >&2
    EX=1
  else
    echo "${primitive}f ... OK"
  fi
done

exit "${EX}"
