123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 |
- #!/bin/bash
- ##############################################################################
- # Copyright (c) 2021 by Rambus, Inc. and/or its subsidiaries
- # All rights reserved. Unauthorized use (including, without limitation,
- # distribution and copying) is strictly prohibited. All use requires,
- # and is subject to, explicit written authorization and nondisclosure
- # Rambus, Inc. and/or its subsidiaries
- #
- # For more information or support, please go to our online support system at
- # https://sipsupport.rambus.com.
- # In case you do not have an account for this system, please send an e-mail
- # to sipsupport@rambus.com.
- ##############################################################################
- ############################ constants ############################
- result=0
- ENGINE_ID_120=eip120
- KERNEL_MODULE=umpci_k
- OPENSSL=$OPENSSL_DIR/apps/openssl
- O1="cipherout1.txt" # Temporary file, used for cipher eip120 output
- O2="cipherout2.txt" # Temporary file, used for cipher 'internal' output
- #MES=testdatain.txt #Data to encrypt or Decrypt
- MES=message.txt
- BIGMES=testdatain.txt
- IVFILE=iv.txt # IV file for test application
- KEYFILE=key.txt # Key file for test application
- TAGFILE=tag.txt # tag file for test application
- AADFILE=aad.txt # aad file for test application
- RED='\033[0;31m'
- GRN='\033[0;32m'
- NC='\033[0m' # No Color
- testarray=(aes-128-ecb aes-192-ecb aes-256-ecb
- aes-128-cbc aes-192-cbc aes-256-cbc
- aes-128-ctr aes-192-ctr aes-256-ctr
- des-ecb des-cbc des-cfb des-ofb
- des-ede3-ecb des-ede3-cbc des-ede3-cfb des-ede3-ofb
- sm4-ecb sm4-cbc sm4-ctr)
- keysizearray=(16 24 32
- 16 24 32
- 16 24 32
- 8 8 8 8
- 24 24 24 24
- 16 16 16)
- ivsizearray=(0 0 0
- 16 16 16
- 16 16 16
- 0 8 8 8
- 0 8 8 8
- 0 16 16)
- testarrayxts=(aes-128-xts aes-256-xts)
- testarraygcm=(aes-128-gcm aes-192-gcm aes-256-gcm)
- DATESTAMP=$(date +%y%m%d_%H%M)
- TEMPFILE=tempfile.txt
- VALGRIND_CMD='valgrind --leak-check=full --show-leak-kinds=all --log-file='$TEMPFILE
- ############################ functions ############################
- validate_environment()
- {
- if [ ! -f $OPENSSL ]; then
- echo "Error: openssl client not found"
- exit 1
- fi
- if [ -z $OPENSSL_ENGINES ]; then
- echo "Error: Environment variable OPENSSL_ENGINES is undefined"
- exit 1
- fi
- if [ $(lsmod | grep "$KERNEL_MODULE" -c) -ne 1 ]; then
- echo "Error: kernel module $KERNEL_MODULE not found"
- exit 1
- fi
- ${OPENSSL} engine -t ${ENGINE_ID_120} &> /dev/null
- if [ $? -ne 0 ]; then
- echo -e "\n${RED}Error: OpenSSL engine ${ENGINE_ID_120} is not loaded${NC}"
- exit 1
- fi
- }
- check_diff()
- {
- diff ${O1} ${O2} > /dev/null
- if [ $? -ne 0 ]; then
- echo -e "\n${RED}$1 $2 tests FAILED${NC}"
- result=1
- return
- fi
- if [ $2 = e ]; then
- echo $1 ENCRYPTION PASSED
- else
- echo $1 DECRYPTION PASSED
- fi
- }
- test_aes()
- {
- if [ $DO_VALGRIND ]; then
- echo "// test_aes $1 $2" >> ciphertest_$DATESTAMP.log
- fi
- $VALGRIND ./../build/cipher --type $1 --engine ${ENGINE_ID_120} --in ${BIGMES} --out ${O1} --op $2 --iv ${IVFILE} --key ${KEYFILE} > /dev/null
- if [ $1 = aes-128-ecb ] || [ $1 = aes-192-ecb ] || [ $1 = aes-256-ecb ] ||
- [ $1 = des-ecb ] || [ $1 = des-ede3-ecb ] || [ $1 = sm4-ecb ]; then
- ${OPENSSL} $1 -nosalt -in ${BIGMES} -out ${O2} -$2 -K ${ckey:0:$3} -nopad > /dev/null
- else
- ${OPENSSL} $1 -nosalt -in ${BIGMES} -out ${O2} -$2 -K ${ckey:0:$3} -iv ${ivkey:0:$4} -nopad > /dev/null
- fi
- check_diff $1 $2
- if [ $DO_VALGRIND ]; then
- cat $TEMPFILE >> ciphertest_$DATESTAMP.log
- fi
- }
- test_xts()
- {
- if [ $DO_VALGRIND ]; then
- echo "// test_xts $1 $2" >> ciphertest_$DATESTAMP.log
- fi
- $VALGRIND ./../build/cipher --type $1 --engine ${ENGINE_ID_120} --in ${MES} --out ${O1} --outdef ${O2} --op $2 --iv ${IVFILE} --key ${KEYFILE} > /dev/null
- check_diff $1 $2
- if [ $DO_VALGRIND ]; then
- cat $TEMPFILE >> ciphertest_$DATESTAMP.log
- fi
- }
- test_gcm()
- {
- if [ $DO_VALGRIND ]; then
- echo "// test_gcm $1 $2" >> ciphertest_$DATESTAMP.log
- fi
- if [ $2 = e ]; then
- $VALGRIND ./../build/cipher --type $1 --engine ${ENGINE_ID_120} --in ${MES} --out ${O1} --outdef ${O2} --op $2 --iv ${IVFILE} --key ${KEYFILE} --tag ${TAGFILE} --aad ${AADFILE} > /dev/null
- check_diff $1 $2
- else
- $VALGRIND ./../build/cipher --type $1 --engine ${ENGINE_ID_120} --in ${O1} --out ${O1} --outdef ${O2} --op $2 --iv ${IVFILE} --key ${KEYFILE} --tag ${TAGFILE} --aad ${AADFILE} > /dev/null
- check_diff $1 $2
- fi
- if [ $DO_VALGRIND ]; then
- cat $TEMPFILE >> ciphertest_$DATESTAMP.log
- fi
- }
- main () {
- ${OPENSSL} version
- validate_environment
- if [ "$1" = "-v" ]; then
- DO_VALGRIND=1
- VALGRIND=$VALGRIND_CMD
- echo "// OS_IK ciphertest valgrind results - $DATESTAMP" > ciphertest_$DATESTAMP.log
- fi
- ckey=$(<${KEYFILE})
- ivkey=$(<${IVFILE})
- for ((loop = 0; loop < ${#testarray[@]}; loop++)); do
- test_aes ${testarray[loop]} e ${keysizearray[loop]}*2 ${ivsizearray[loop]}*2
- test_aes ${testarray[loop]} d ${keysizearray[loop]}*2 ${ivsizearray[loop]}*2
- done
- for loop in ${testarraygcm[@]}; do
- test_gcm $loop e
- test_gcm $loop d
- done
- for loop in ${testarrayxts[@]}; do
- test_xts $loop e
- test_xts $loop d
- done
- rm ${O1} ${O2}
- if [ ${result} -ne 0 ]; then
- echo -e "\n${RED}Cipher tests FAILED${NC}"
- return
- fi
- echo -e "\n${GRN}Cipher tests PASSED${NC}"
- if [ $DO_VALGRIND ]; then
- rm $TEMPFILE
- fi
- }
- main "$@"
|