run_rsa_tests.sh revision 08df9b88a36b7a351305a06b2849c5fcdac54135
1322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah#!/bin/bash 2322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah 3322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah# Copyright (c) 2010 The Chromium OS Authors. All rights reserved. 4322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah# Use of this source code is governed by a BSD-style license that can be 5322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah# found in the LICENSE file. 6322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah 7322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah# Run tests for cryptographic routine implementations - Message digests 8322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah# and RSA Signature verification. 9322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah 101a055adf7bb61ef239e554441defc13503eb2b51Gaurav Shahreturn_code=0 11322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shahhash_algos=( sha1 sha256 sha512 ) 12322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shahkey_lengths=( 1024 2048 4096 8192 ) 13322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav ShahTEST_FILE=test_file 14322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav ShahTEST_FILE_SIZE=1000000 15322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah 1608df9b88a36b7a351305a06b2849c5fcdac54135Gaurav ShahCOL_RED='\E[31;1m' 1708df9b88a36b7a351305a06b2849c5fcdac54135Gaurav ShahCOL_GREEN='\E[32;1m' 1808df9b88a36b7a351305a06b2849c5fcdac54135Gaurav ShahCOL_YELLOW='\E[33;1m' 1908df9b88a36b7a351305a06b2849c5fcdac54135Gaurav ShahCOL_BLUE='\E[34;1m' 2008df9b88a36b7a351305a06b2849c5fcdac54135Gaurav ShahCOL_STOP='\E[0;m' 2108df9b88a36b7a351305a06b2849c5fcdac54135Gaurav Shah 22322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah# Generate public key signatures on an input file for various combinations 23322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah# of message digest algorithms and RSA key sizes. 24322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shahfunction generate_signatures { 258bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shah algorithmcounter=0 268bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shah for keylen in ${key_lengths[@]} 27322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah do 288bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shah for hashalgo in ${hash_algos[@]} 29322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah do 301f81a6f936c0200d3d92286f3126ba672dba5781Gaurav Shah ${UTIL_DIR}/signature_digest $algorithmcounter $1 | openssl rsautl -sign \ 31e3ef9c9f40fdb7f377f4d02031ad125b59c0d6c7Gaurav Shah -pkcs -inkey ${KEY_DIR}/key_rsa${keylen}.pem \ 32e3ef9c9f40fdb7f377f4d02031ad125b59c0d6c7Gaurav Shah > $1.rsa${keylen}\_${hashalgo}.sig 338bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shah let algorithmcounter=algorithmcounter+1 34322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah done 35322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah done 36322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah} 37322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah 38322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shahfunction test_signatures { 39322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah algorithmcounter=0 408bf29d8ea10392c03f8d11561a4e63182f6211a3Gaurav Shah for keylen in ${key_lengths[@]} 41322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah do 42322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah for hashalgo in ${hash_algos[@]} 43322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah do 4408df9b88a36b7a351305a06b2849c5fcdac54135Gaurav Shah echo -e "For ${COL_YELLOW}RSA-$keylen and $hashalgo${COL_STOP}:" 45e3ef9c9f40fdb7f377f4d02031ad125b59c0d6c7Gaurav Shah ${UTIL_DIR}/verify_data $algorithmcounter \ 46e3ef9c9f40fdb7f377f4d02031ad125b59c0d6c7Gaurav Shah ${KEY_DIR}/key_rsa${keylen}.keyb \ 47e3ef9c9f40fdb7f377f4d02031ad125b59c0d6c7Gaurav Shah ${TEST_FILE}.rsa${keylen}_${hashalgo}.sig ${TEST_FILE} 481a055adf7bb61ef239e554441defc13503eb2b51Gaurav Shah if [ $? -ne 0 ] 491a055adf7bb61ef239e554441defc13503eb2b51Gaurav Shah then 501a055adf7bb61ef239e554441defc13503eb2b51Gaurav Shah return_code=255 511a055adf7bb61ef239e554441defc13503eb2b51Gaurav Shah fi 52322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah let algorithmcounter=algorithmcounter+1 53322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah done 54322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah done 55322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah} 56322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah 57431b98886ed80b46e404d7288362f8dcdfa9ace3Gaurav Shahfunction test_verification { 58431b98886ed80b46e404d7288362f8dcdfa9ace3Gaurav Shah algorithmcounter=0 59431b98886ed80b46e404d7288362f8dcdfa9ace3Gaurav Shah for keylen in ${key_lengths[@]} 60431b98886ed80b46e404d7288362f8dcdfa9ace3Gaurav Shah do 61431b98886ed80b46e404d7288362f8dcdfa9ace3Gaurav Shah for hashalgo in ${hash_algos[@]} 62431b98886ed80b46e404d7288362f8dcdfa9ace3Gaurav Shah do 63431b98886ed80b46e404d7288362f8dcdfa9ace3Gaurav Shah echo -e "For ${COL_YELLOW}RSA-$keylen and $hashalgo${COL_STOP}:" 6452898d3c268e1cdb695b1c9a25fb4190d84a24f8Gaurav Shah cd ${UTIL_DIR} && ${TEST_DIR}/firmware_image_tests $algorithmcounter \ 6552898d3c268e1cdb695b1c9a25fb4190d84a24f8Gaurav Shah ${TEST_DIR}/testkeys/key_rsa8192.pem \ 6652898d3c268e1cdb695b1c9a25fb4190d84a24f8Gaurav Shah ${TEST_DIR}/testkeys/key_rsa8192.keyb \ 6752898d3c268e1cdb695b1c9a25fb4190d84a24f8Gaurav Shah ${TEST_DIR}/testkeys/key_rsa${keylen}.pem \ 6852898d3c268e1cdb695b1c9a25fb4190d84a24f8Gaurav Shah ${TEST_DIR}/testkeys/key_rsa${keylen}.keyb 69431b98886ed80b46e404d7288362f8dcdfa9ace3Gaurav Shah let algorithmcounter=algorithmcounter+1 70431b98886ed80b46e404d7288362f8dcdfa9ace3Gaurav Shah done 71431b98886ed80b46e404d7288362f8dcdfa9ace3Gaurav Shah done 72431b98886ed80b46e404d7288362f8dcdfa9ace3Gaurav Shah} 73431b98886ed80b46e404d7288362f8dcdfa9ace3Gaurav Shah 74322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shahfunction pre_work { 75322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah # Generate a file with random bytes for signature tests. 76322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah echo "Generating test file..." 77322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah dd if=/dev/urandom of=${TEST_FILE} bs=${TEST_FILE_SIZE} count=1 78322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah echo "Generating signatures..." 79322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah generate_signatures $TEST_FILE 80322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah} 81322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah 82322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shahfunction cleanup { 837ca31f3e4d21bb7dfa39e1e4b9ab42c7047e66d8Gaurav Shah rm ${SCRIPT_DIR}/${TEST_FILE} ${SCRIPT_DIR}/${TEST_FILE}.*.sig 84322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah} 85322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah 861a055adf7bb61ef239e554441defc13503eb2b51Gaurav Shah# Determine script directory. 871a055adf7bb61ef239e554441defc13503eb2b51Gaurav Shahif [[ $0 == '/'* ]]; 881a055adf7bb61ef239e554441defc13503eb2b51Gaurav Shahthen 891a055adf7bb61ef239e554441defc13503eb2b51Gaurav Shah SCRIPT_DIR="`dirname $0`" 901a055adf7bb61ef239e554441defc13503eb2b51Gaurav Shahelif [[ $0 == './'* ]]; 911a055adf7bb61ef239e554441defc13503eb2b51Gaurav Shahthen 921a055adf7bb61ef239e554441defc13503eb2b51Gaurav Shah SCRIPT_DIR="`pwd`" 931a055adf7bb61ef239e554441defc13503eb2b51Gaurav Shahelse 941a055adf7bb61ef239e554441defc13503eb2b51Gaurav Shah SCRIPT_DIR="`pwd`"/"`dirname $0`" 951a055adf7bb61ef239e554441defc13503eb2b51Gaurav Shahfi 961a055adf7bb61ef239e554441defc13503eb2b51Gaurav ShahUTIL_DIR=`dirname ${SCRIPT_DIR}`/utils 971a055adf7bb61ef239e554441defc13503eb2b51Gaurav ShahKEY_DIR=${SCRIPT_DIR}/testkeys 987ca31f3e4d21bb7dfa39e1e4b9ab42c7047e66d8Gaurav ShahTEST_DIR=${SCRIPT_DIR}/ 991a055adf7bb61ef239e554441defc13503eb2b51Gaurav Shah 1001a055adf7bb61ef239e554441defc13503eb2b51Gaurav Shahecho "Generating test cases..." 1011a055adf7bb61ef239e554441defc13503eb2b51Gaurav Shahpre_work 102322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah 103322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shahecho 104322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shahecho "Testing signature verification..." 105322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shahtest_signatures 106322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah 107322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shahecho 108431b98886ed80b46e404d7288362f8dcdfa9ace3Gaurav Shahecho "Testing high-level image verification..." 109431b98886ed80b46e404d7288362f8dcdfa9ace3Gaurav Shahtest_verification 110431b98886ed80b46e404d7288362f8dcdfa9ace3Gaurav Shah 111431b98886ed80b46e404d7288362f8dcdfa9ace3Gaurav Shahecho 112322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shahecho "Cleaning up..." 1137ca31f3e4d21bb7dfa39e1e4b9ab42c7047e66d8Gaurav Shahcleanup 114322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah 1151a055adf7bb61ef239e554441defc13503eb2b51Gaurav Shahexit $return_code 116322536d2f9d30f42218cc9f2ab40574557da8a9Gaurav Shah 117