1#!/bin/bash
2
3# Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
4# Use of this source code is governed by a BSD-style license that can be
5# found in the LICENSE file.
6#
7# Generate test keys for use by the tests.
8
9# Load common constants and variables.
10. "$(dirname "$0")/common.sh"
11
12set -e
13
14sha_types=( 1 256 512 )
15
16# Generate RSA test keys of various lengths.
17function generate_keys {
18  key_index=0
19  key_name_base="${TESTKEY_DIR}/key_rsa"
20  for i in ${key_lengths[@]}
21  do
22    key_base="${key_name_base}${i}"
23    if [ -f "${key_base}.keyb" ]; then
24      continue
25    fi
26
27    openssl genrsa -F4 -out ${key_base}.pem $i
28    # Generate self-signed certificate from key.
29    openssl req -batch -new -x509 -key ${key_base}.pem \
30      -out ${key_base}.crt
31
32    # Generate pre-processed key for use by RSA signature verification code.
33    ${BIN_DIR}/dumpRSAPublicKey -cert ${key_base}.crt \
34      > ${key_base}.keyb
35
36    alg_index=0
37    for sha_type in ${sha_types[@]}
38    do
39      alg=$((${key_index} * 3 + ${alg_index}))
40  # wrap the public key
41      ${FUTILITY} vbutil_key \
42        --pack "${key_base}.sha${sha_type}.vbpubk" \
43        --key "${key_base}.keyb" \
44        --version 1 \
45        --algorithm ${alg}
46
47  # wrap the private key
48      ${FUTILITY} vbutil_key \
49        --pack "${key_base}.sha${sha_type}.vbprivk" \
50        --key "${key_base}.pem" \
51        --algorithm ${alg}
52      alg_index=$((${alg_index} + 1))
53    done
54    key_index=$((${key_index} + 1))
55  done
56}
57
58mkdir -p ${TESTKEY_DIR}
59generate_keys
60