xref: /freebsd/crypto/libecc/scripts/test_ec_utils.sh (revision f0865ec9906d5a18fa2a3b61381f22ce16e606ad)
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