123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- # SPDX-License-Identifier: BSD-3-Clause
- source helpers.sh
- # Purpose of this test is to cover the additional code paths that come into
- # play when non-default output formats for public keys or signatures are used
- # in the various tools.
- #
- # The test covers all available output formats, makes sure the tools
- # successfully run in these cases and checks the output files by feeding them
- # to OpenSSL as appropriate.
- alg_ek=rsa
- file_pubek_base=ek_${alg_ek}
- file_pubek_orig=${file_pubek_base}.tss.orig
- handle_ek=0x81010014
- alg_ak=rsa
- file_pubak_name="ak.${alg_ak}.name"
- file_pubak_tss="ak.${alg_ak}.tss"
- file_pubak_pem="ak.${alg_ak}.pem"
- handle_ak=0x81010016
- handle_ak_file=ak.handle
- ak_ctx=ak.ctx
- file_hash_input="hash.in"
- file_hash_ticket=hash.ticket
- file_hash_result=hash.result
- file_sig_base=hash.sig
- alg_hash=sha256
- file_quote_msg=quote.msg
- file_quote_sig_base=quote.sig
- cleanup() {
- rm -f "$file_pubek_base".*
- rm -f "$file_pubak_tss" "$file_pubak_name" "$file_pubak_pem"
- rm -f "$file_hash_ticket" "$file_hash_result" "$file_sig_base".*
- rm -f "$file_quote_msg" "$file_quote_sig_base".* $file_hash_input
- rm -f primary.ctx ecc.ctx ecc.pub ecc.priv ecc.fmt.pub $ak_ctx
- # Evict persistent handles, we want them to always succeed and never trip
- # the onerror trap.
- for handle in $handle_ek $handle_ak; do
- tpm2 evictcontrol -Q -C o -c $handle 2>/dev/null || true
- done
- shut_down
- }
- trap cleanup EXIT
- start_up
- head -c 4096 /dev/urandom > $file_hash_input
- tpm2 createek -Q -G $alg_ek -u "$file_pubek_orig" -c $handle_ek
- for fmt in tss pem der; do
- this_key="${file_pubek_base}.${fmt}"
- tpm2 readpublic -Q -c $handle_ek -f "$fmt" -o "$this_key"
- if [ "$fmt" = tss ]; then
- diff "$file_pubek_orig" "$this_key" > /dev/null
- else
- openssl rsa -pubin -inform "$fmt" -text -in "$this_key" &> /dev/null
- fi
- done
- tpm2 createak -Q -G $alg_ak -C $handle_ek -c $ak_ctx -u "$file_pubak_tss" \
- -n "$file_pubak_name"
- echo "tpm2 evictcontrol -Q -c $ak_ctx -o $handle_ak_file" $handle_ak
- tpm2 evictcontrol -Q -c $ak_ctx -o $handle_ak_file $handle_ak
- tpm2 readpublic -Q -c $handle_ak_file -f "pem" -o "$file_pubak_pem"
- tpm2 hash -Q -C e -g $alg_hash -t "$file_hash_ticket" -o "$file_hash_result" \
- "$file_hash_input"
- for fmt in tss plain; do
- this_sig="${file_sig_base}.${fmt}"
- tpm2 sign -Q -c $handle_ak -g $alg_hash -f $fmt -o "${this_sig}" \
- -t "${file_hash_ticket}" "${file_hash_input}"
- if [ "$fmt" = plain ]; then
- openssl dgst -verify "$file_pubak_pem" -keyform pem -${alg_hash} \
- -signature "$this_sig" "$file_hash_input" > /dev/null
- fi
- done
- for fmt in tss plain; do
- this_sig="${file_quote_sig_base}.${fmt}"
- tpm2 quote -Q -c $handle_ak -l "$alg_hash":0 -f $fmt -m "$file_quote_msg" \
- -s "$this_sig"
- if [ "$fmt" = plain ]; then
- openssl dgst -verify "$file_pubak_pem" -keyform pem -${alg_hash} \
- -signature "$this_sig" "$file_quote_msg" > /dev/null
- fi
- done
- #
- # Test ECC keys
- #
- tpm2 createprimary -c primary.ctx
- tpm2 create -Q -C primary.ctx -G ecc -u ecc.pub -r ecc.priv
- tpm2 load -C primary.ctx -u ecc.pub -r ecc.priv -c ecc.ctx
- for fmt in pem der; do
- tpm2 readpublic -Q -c ecc.ctx -f "$fmt" -o ecc.fmt.pub
- openssl ec -pubin -inform "$fmt" -text -in ecc.fmt.pub &> /dev/null
- done
- exit 0
|