#!/bin/bash

# Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
#
# Generate test keys for use by the tests.

# Load common constants and variables.
. "$(dirname "$0")/common.sh"

set -e

sha_types=( 1 256 512 )

# Generate RSA test keys of various lengths.
function generate_keys {
  key_index=0
  key_name_base="${TESTKEY_DIR}/key_rsa"
  for i in ${key_lengths[@]}
  do
    key_base="${key_name_base}${i}"
    if [ -f "${key_base}.keyb" ]; then
      key_index=$((${key_index} + 1))
      continue
    fi

    # Extract exponent from key_length name, if necessary
    exp="F4"
    bits=$i
    if [ "${i##*_exp}" != "${i}" ]; then
        exp="${i##*_exp}"
        bits="${i%%_exp${exp}}"
    fi

    openssl genrsa -${exp} -out ${key_base}.pem ${bits}
    # Generate self-signed certificate from key.
    openssl req -batch -new -x509 -key ${key_base}.pem \
      -out ${key_base}.crt

    # Generate pre-processed key for use by RSA signature verification code.
    ${BIN_DIR}/dumpRSAPublicKey -cert ${key_base}.crt \
      > ${key_base}.keyb

    alg_index=0
    for sha_type in ${sha_types[@]}
    do
      alg=$((${key_index} * 3 + ${alg_index}))
  # wrap the public key
      ${FUTILITY} vbutil_key \
        --pack "${key_base}.sha${sha_type}.vbpubk" \
        --key "${key_base}.keyb" \
        --version 1 \
        --algorithm ${alg}

  # wrap the private key
      ${FUTILITY} vbutil_key \
        --pack "${key_base}.sha${sha_type}.vbprivk" \
        --key "${key_base}.pem" \
        --algorithm ${alg}
      alg_index=$((${alg_index} + 1))
    done
    key_index=$((${key_index} + 1))
  done
}

mkdir -p ${TESTKEY_DIR}
generate_keys
