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