1*f0865ec9SKyle Evans#/* 2*f0865ec9SKyle Evans# * Copyright (C) 2021 - This file is part of libecc project 3*f0865ec9SKyle Evans# * 4*f0865ec9SKyle Evans# * Authors: 5*f0865ec9SKyle Evans# * Ryad BENADJILA <ryadbenadjila@gmail.com> 6*f0865ec9SKyle Evans# * Arnaud EBALARD <arnaud.ebalard@ssi.gouv.fr> 7*f0865ec9SKyle Evans# * 8*f0865ec9SKyle Evans# * This software is licensed under a dual BSD and GPL v2 license. 9*f0865ec9SKyle Evans# * See LICENSE file at the root folder of the project. 10*f0865ec9SKyle Evans# */ 11*f0865ec9SKyle Evans#!/bin/bash 12*f0865ec9SKyle Evans 13*f0865ec9SKyle EvansBASEDIR=$(dirname "$0") 14*f0865ec9SKyle EvansEC_UTILS=$BASEDIR/../build/ec_utils 15*f0865ec9SKyle Evans 16*f0865ec9SKyle Evans# trap ctrl-c and call ctrl_c() 17*f0865ec9SKyle Evanstrap ctrl_c INT 18*f0865ec9SKyle Evans 19*f0865ec9SKyle Evansfunction ctrl_c() { 20*f0865ec9SKyle Evans echo "** Trapped CTRL-C, cleaning ..." 21*f0865ec9SKyle 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 22*f0865ec9SKyle Evans exit 23*f0865ec9SKyle Evans} 24*f0865ec9SKyle Evans 25*f0865ec9SKyle Evans# Test ec_utils cases 26*f0865ec9SKyle Evanscurves=("FRP256V1" "SECP192R1" "SECP224R1" "SECP256R1" "SECP384R1" "SECP521R1" "BRAINPOOLP192R1" "BRAINPOOLP224R1" "BRAINPOOLP256R1" "BRAINPOOLP384R1" "BRAINPOOLP512R1" "GOST256" "GOST512" "SM2P256TEST" "SM2P256V1" "WEI25519" "WEI448" "GOST_R3410_2012_256_PARAMSETA" "SECP256K1") 27*f0865ec9SKyle Evanssignatures=("ECDSA" "ECKCDSA" "ECSDSA" "ECOSDSA" "ECFSDSA" "ECGDSA" "ECRDSA" "SM2" "EDDSA25519" "EDDSA25519CTX" "EDDSA25519PH" "EDDSA448" "EDDSA448PH" "DECDSA") 28*f0865ec9SKyle Evanshashes=("SHA224" "SHA256" "SHA384" "SHA512" "SHA512_224" "SHA512_256" "SHA3_224" "SHA3_256" "SHA3_384" "SHA3_512" "SM3" "SHAKE256" "STREEBOG256" "STREEBOG512") 29*f0865ec9SKyle Evans 30*f0865ec9SKyle Evansfor c in "${!curves[@]}" 31*f0865ec9SKyle Evansdo 32*f0865ec9SKyle Evans for s in "${!signatures[@]}" 33*f0865ec9SKyle Evans do 34*f0865ec9SKyle Evans # Generate keys 35*f0865ec9SKyle Evans # NOTE: EDDSA family only accepts WEI curves 36*f0865ec9SKyle Evans if [[ "${signatures[s]}" == "EDDSA25519" || "${signatures[s]}" == "EDDSA25519CTX" || "${signatures[s]}" == "EDDSA25519PH" ]] 37*f0865ec9SKyle Evans then 38*f0865ec9SKyle Evans if [[ "${curves[c]}" != "WEI25519" ]] 39*f0865ec9SKyle Evans then 40*f0865ec9SKyle Evans continue 41*f0865ec9SKyle Evans fi 42*f0865ec9SKyle Evans fi 43*f0865ec9SKyle Evans if [[ "${signatures[s]}" == "EDDSA448" || "${signatures[s]}" == "EDDSA448PH" ]] 44*f0865ec9SKyle Evans then 45*f0865ec9SKyle Evans if [[ "${curves[c]}" != "WEI448" ]] 46*f0865ec9SKyle Evans then 47*f0865ec9SKyle Evans continue 48*f0865ec9SKyle Evans fi 49*f0865ec9SKyle Evans fi 50*f0865ec9SKyle Evans echo "===== ${curves[c]} ${signatures[s]}" 51*f0865ec9SKyle Evans $EC_UTILS gen_keys ${curves[c]} ${signatures[s]} test_key || exit 0 52*f0865ec9SKyle Evans for h in "${!hashes[@]}" 53*f0865ec9SKyle Evans do 54*f0865ec9SKyle Evans if [[ "${signatures[s]}" == "EDDSA25519" || "${signatures[s]}" == "EDDSA25519CTX" || "${signatures[s]}" == "EDDSA25519PH" ]] 55*f0865ec9SKyle Evans then 56*f0865ec9SKyle Evans if [[ "${hashes[h]}" != "SHA512" ]] 57*f0865ec9SKyle Evans then 58*f0865ec9SKyle Evans continue 59*f0865ec9SKyle Evans fi 60*f0865ec9SKyle Evans fi 61*f0865ec9SKyle Evans if [[ "${signatures[s]}" == "EDDSA448" || "${signatures[s]}" == "EDDSA448PH" ]] 62*f0865ec9SKyle Evans then 63*f0865ec9SKyle Evans if [[ "${hashes[h]}" != "SHAKE256" ]] 64*f0865ec9SKyle Evans then 65*f0865ec9SKyle Evans continue 66*f0865ec9SKyle Evans fi 67*f0865ec9SKyle Evans fi 68*f0865ec9SKyle Evans echo "========= TESTING ${curves[c]} ${signatures[s]} ${hashes[h]}" 69*f0865ec9SKyle Evans # Try to sign 70*f0865ec9SKyle Evans $EC_UTILS sign ${curves[c]} ${signatures[s]} ${hashes[h]} $EC_UTILS test_key_private_key.bin signed_file.bin.signed "ANCILLARY" || exit 0 71*f0865ec9SKyle Evans # Try to verify 72*f0865ec9SKyle Evans $EC_UTILS verify ${curves[c]} ${signatures[s]} ${hashes[h]} $EC_UTILS test_key_public_key.bin signed_file.bin.signed "ANCILLARY" || exit 0 73*f0865ec9SKyle Evans rm -f signed_file.bin.signed 74*f0865ec9SKyle Evans # Try to "struct" sign 75*f0865ec9SKyle 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 76*f0865ec9SKyle Evans # Try to "struct" verify 77*f0865ec9SKyle Evans $EC_UTILS struct_verify ${curves[c]} ${signatures[s]} ${hashes[h]} signed_file.bin.signed test_key_public_key.bin "ANCILLARY" || exit 0 78*f0865ec9SKyle Evans rm -f signed_file.bin.signed 79*f0865ec9SKyle Evans done 80*f0865ec9SKyle Evans rm -f test_key_public_key.bin test_key_private_key.bin test_key_private_key.h test_key_public_key.h 81*f0865ec9SKyle Evans done 82*f0865ec9SKyle Evansdone 83