xref: /aosp_15_r20/external/vboot_reference/tests/gen_test_keys.sh (revision 8617a60d3594060b7ecbd21bc622a7c14f3cf2bc)
1*8617a60dSAndroid Build Coastguard Worker#!/bin/bash
2*8617a60dSAndroid Build Coastguard Worker
3*8617a60dSAndroid Build Coastguard Worker# Copyright 2010 The ChromiumOS Authors
4*8617a60dSAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be
5*8617a60dSAndroid Build Coastguard Worker# found in the LICENSE file.
6*8617a60dSAndroid Build Coastguard Worker#
7*8617a60dSAndroid Build Coastguard Worker# Generate test keys for use by the tests.
8*8617a60dSAndroid Build Coastguard Worker
9*8617a60dSAndroid Build Coastguard Worker# Load common constants and variables.
10*8617a60dSAndroid Build Coastguard Worker. "$(dirname "$0")/common.sh"
11*8617a60dSAndroid Build Coastguard Worker
12*8617a60dSAndroid Build Coastguard Workerset -e
13*8617a60dSAndroid Build Coastguard Worker
14*8617a60dSAndroid Build Coastguard Workersha_types=( 1 256 512 )
15*8617a60dSAndroid Build Coastguard Worker
16*8617a60dSAndroid Build Coastguard Worker# Generate RSA test keys of various lengths.
17*8617a60dSAndroid Build Coastguard Workerfunction generate_keys {
18*8617a60dSAndroid Build Coastguard Worker  key_index=0
19*8617a60dSAndroid Build Coastguard Worker  key_name_base="${TESTKEY_DIR}/key_rsa"
20*8617a60dSAndroid Build Coastguard Worker  for i in "${key_lengths[@]}"
21*8617a60dSAndroid Build Coastguard Worker  do
22*8617a60dSAndroid Build Coastguard Worker    key_base="${key_name_base}${i}"
23*8617a60dSAndroid Build Coastguard Worker    if [ -f "${key_base}.keyb" ]; then
24*8617a60dSAndroid Build Coastguard Worker      key_index=$((key_index + 1))
25*8617a60dSAndroid Build Coastguard Worker      continue
26*8617a60dSAndroid Build Coastguard Worker    fi
27*8617a60dSAndroid Build Coastguard Worker
28*8617a60dSAndroid Build Coastguard Worker    # Extract exponent from key_length name, if necessary
29*8617a60dSAndroid Build Coastguard Worker    exp="F4"
30*8617a60dSAndroid Build Coastguard Worker    bits=$i
31*8617a60dSAndroid Build Coastguard Worker    if [ "${i##*_exp}" != "${i}" ]; then
32*8617a60dSAndroid Build Coastguard Worker        exp="${i##*_exp}"
33*8617a60dSAndroid Build Coastguard Worker        bits="${i%%_exp${exp}}"
34*8617a60dSAndroid Build Coastguard Worker    fi
35*8617a60dSAndroid Build Coastguard Worker
36*8617a60dSAndroid Build Coastguard Worker    openssl genrsa "-${exp}" -out "${key_base}.pem" "${bits}"
37*8617a60dSAndroid Build Coastguard Worker    # Generate self-signed certificate from key.
38*8617a60dSAndroid Build Coastguard Worker    openssl req -batch -new -x509 -key "${key_base}.pem" \
39*8617a60dSAndroid Build Coastguard Worker      -out "${key_base}.crt"
40*8617a60dSAndroid Build Coastguard Worker
41*8617a60dSAndroid Build Coastguard Worker    # Generate pre-processed key for use by RSA signature verification code.
42*8617a60dSAndroid Build Coastguard Worker    "${BIN_DIR}/dumpRSAPublicKey" -cert "${key_base}.crt" > "${key_base}.keyb"
43*8617a60dSAndroid Build Coastguard Worker
44*8617a60dSAndroid Build Coastguard Worker    alg_index=0
45*8617a60dSAndroid Build Coastguard Worker    for sha_type in "${sha_types[@]}"
46*8617a60dSAndroid Build Coastguard Worker    do
47*8617a60dSAndroid Build Coastguard Worker      alg=$((key_index * 3 + alg_index))
48*8617a60dSAndroid Build Coastguard Worker  # wrap the public key
49*8617a60dSAndroid Build Coastguard Worker      "${FUTILITY}" vbutil_key \
50*8617a60dSAndroid Build Coastguard Worker        --pack "${key_base}.sha${sha_type}.vbpubk" \
51*8617a60dSAndroid Build Coastguard Worker        --key "${key_base}.keyb" \
52*8617a60dSAndroid Build Coastguard Worker        --version 1 \
53*8617a60dSAndroid Build Coastguard Worker        --algorithm ${alg}
54*8617a60dSAndroid Build Coastguard Worker
55*8617a60dSAndroid Build Coastguard Worker  # wrap the private key
56*8617a60dSAndroid Build Coastguard Worker      "${FUTILITY}" vbutil_key \
57*8617a60dSAndroid Build Coastguard Worker        --pack "${key_base}.sha${sha_type}.vbprivk" \
58*8617a60dSAndroid Build Coastguard Worker        --key "${key_base}.pem" \
59*8617a60dSAndroid Build Coastguard Worker        --algorithm ${alg}
60*8617a60dSAndroid Build Coastguard Worker      alg_index=$((alg_index} + 1))
61*8617a60dSAndroid Build Coastguard Worker    done
62*8617a60dSAndroid Build Coastguard Worker    key_index=$((key_index + 1))
63*8617a60dSAndroid Build Coastguard Worker  done
64*8617a60dSAndroid Build Coastguard Worker}
65*8617a60dSAndroid Build Coastguard Worker
66*8617a60dSAndroid Build Coastguard Workermkdir -p ${TESTKEY_DIR}
67*8617a60dSAndroid Build Coastguard Workergenerate_keys
68