1736d6639SKyle Evans#/* 2736d6639SKyle Evans# * Copyright (C) 2021 - This file is part of libecc project 3736d6639SKyle Evans# * 4736d6639SKyle Evans# * Authors: 5736d6639SKyle Evans# * Ryad BENADJILA <ryadbenadjila@gmail.com> 6736d6639SKyle Evans# * Arnaud EBALARD <arnaud.ebalard@ssi.gouv.fr> 7736d6639SKyle Evans# * 8736d6639SKyle Evans# * This software is licensed under a dual BSD and GPL v2 license. 9736d6639SKyle Evans# * See LICENSE file at the root folder of the project. 10736d6639SKyle Evans# */ 11736d6639SKyle Evans#!/bin/bash 12736d6639SKyle Evans 13736d6639SKyle EvansBASEDIR=$(dirname "$0") 14736d6639SKyle EvansEC_UTILS=$BASEDIR/../build/ec_utils 15736d6639SKyle Evans 16736d6639SKyle Evans# trap ctrl-c and call ctrl_c() 17736d6639SKyle Evanstrap ctrl_c INT 18736d6639SKyle Evans 19736d6639SKyle Evansfunction ctrl_c() { 20736d6639SKyle Evans echo "** Trapped CTRL-C, cleaning ..." 21736d6639SKyle Evans rm -f test_key_public_key.bin test_key_private_key.bin test_key_private_key.h test_key_public_key.h signed_file.bin.signed 22736d6639SKyle Evans exit 23736d6639SKyle Evans} 24736d6639SKyle Evans 25736d6639SKyle Evans# Test ec_utils cases 26736d6639SKyle Evanscurves=("FRP256V1" "SECP192R1" "SECP224R1" "SECP256R1" "SECP384R1" "SECP521R1" "BRAINPOOLP192R1" "BRAINPOOLP224R1" "BRAINPOOLP256R1" "BRAINPOOLP384R1" "BRAINPOOLP512R1" "GOST256" "GOST512" "SM2P256TEST" "SM2P256V1" "WEI25519" "WEI448" "GOST_R3410_2012_256_PARAMSETA" "SECP256K1") 27736d6639SKyle Evanssignatures=("ECDSA" "ECKCDSA" "ECSDSA" "ECOSDSA" "ECFSDSA" "ECGDSA" "ECRDSA" "SM2" "EDDSA25519" "EDDSA25519CTX" "EDDSA25519PH" "EDDSA448" "EDDSA448PH" "DECDSA") 28736d6639SKyle Evanshashes=("SHA224" "SHA256" "SHA384" "SHA512" "SHA512_224" "SHA512_256" "SHA3_224" "SHA3_256" "SHA3_384" "SHA3_512" "SM3" "SHAKE256" "STREEBOG256" "STREEBOG512") 29736d6639SKyle Evans 30736d6639SKyle Evansfor c in "${!curves[@]}" 31736d6639SKyle Evansdo 32736d6639SKyle Evans for s in "${!signatures[@]}" 33736d6639SKyle Evans do 34736d6639SKyle Evans # Generate keys 35736d6639SKyle Evans # NOTE: EDDSA family only accepts WEI curves 36736d6639SKyle Evans if [[ "${signatures[s]}" == "EDDSA25519" || "${signatures[s]}" == "EDDSA25519CTX" || "${signatures[s]}" == "EDDSA25519PH" ]] 37736d6639SKyle Evans then 38736d6639SKyle Evans if [[ "${curves[c]}" != "WEI25519" ]] 39736d6639SKyle Evans then 40736d6639SKyle Evans continue 41736d6639SKyle Evans fi 42736d6639SKyle Evans fi 43736d6639SKyle Evans if [[ "${signatures[s]}" == "EDDSA448" || "${signatures[s]}" == "EDDSA448PH" ]] 44736d6639SKyle Evans then 45736d6639SKyle Evans if [[ "${curves[c]}" != "WEI448" ]] 46736d6639SKyle Evans then 47736d6639SKyle Evans continue 48736d6639SKyle Evans fi 49736d6639SKyle Evans fi 50736d6639SKyle Evans echo "===== ${curves[c]} ${signatures[s]}" 51736d6639SKyle Evans $EC_UTILS gen_keys ${curves[c]} ${signatures[s]} test_key || exit 0 52736d6639SKyle Evans for h in "${!hashes[@]}" 53736d6639SKyle Evans do 54736d6639SKyle Evans if [[ "${signatures[s]}" == "EDDSA25519" || "${signatures[s]}" == "EDDSA25519CTX" || "${signatures[s]}" == "EDDSA25519PH" ]] 55736d6639SKyle Evans then 56736d6639SKyle Evans if [[ "${hashes[h]}" != "SHA512" ]] 57736d6639SKyle Evans then 58736d6639SKyle Evans continue 59736d6639SKyle Evans fi 60736d6639SKyle Evans fi 61736d6639SKyle Evans if [[ "${signatures[s]}" == "EDDSA448" || "${signatures[s]}" == "EDDSA448PH" ]] 62736d6639SKyle Evans then 63736d6639SKyle Evans if [[ "${hashes[h]}" != "SHAKE256" ]] 64736d6639SKyle Evans then 65736d6639SKyle Evans continue 66736d6639SKyle Evans fi 67736d6639SKyle Evans fi 68736d6639SKyle Evans echo "========= TESTING ${curves[c]} ${signatures[s]} ${hashes[h]}" 69736d6639SKyle Evans # Try to sign 70736d6639SKyle Evans $EC_UTILS sign ${curves[c]} ${signatures[s]} ${hashes[h]} $EC_UTILS test_key_private_key.bin signed_file.bin.signed "ANCILLARY" || exit 0 71736d6639SKyle Evans # Try to verify 72736d6639SKyle Evans $EC_UTILS verify ${curves[c]} ${signatures[s]} ${hashes[h]} $EC_UTILS test_key_public_key.bin signed_file.bin.signed "ANCILLARY" || exit 0 73736d6639SKyle Evans rm -f signed_file.bin.signed 74736d6639SKyle Evans # Try to "struct" sign 75736d6639SKyle Evans $EC_UTILS struct_sign ${curves[c]} ${signatures[s]} ${hashes[h]} $EC_UTILS test_key_private_key.bin signed_file.bin.signed IMAGE_TYPE0 1337 "ANCILLARY" || exit 0 76736d6639SKyle Evans # Try to "struct" verify 77736d6639SKyle Evans $EC_UTILS struct_verify ${curves[c]} ${signatures[s]} ${hashes[h]} signed_file.bin.signed test_key_public_key.bin "ANCILLARY" || exit 0 78736d6639SKyle Evans rm -f signed_file.bin.signed 79736d6639SKyle Evans done 80736d6639SKyle Evans rm -f test_key_public_key.bin test_key_private_key.bin test_key_private_key.h test_key_public_key.h 81736d6639SKyle Evans done 82736d6639SKyle Evansdone 83