checkquote.sh 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. # SPDX-License-Identifier: BSD-3-Clause
  2. source helpers.sh
  3. handle_ek=0x81010009
  4. handle_ak=0x8101000a
  5. ek_alg=rsa
  6. ak_alg=rsa
  7. digestAlg=sha256
  8. signAlg=rsassa
  9. akpw=akpass
  10. ak_ctx=ak.ctx
  11. output_ek_pub_pem=ekpub.pem
  12. output_ak_pub_pem=akpub.pem
  13. output_ak_pub_name=ak.name
  14. output_quote=quote.out
  15. output_quotesig=quotesig.out
  16. output_quotepcr=quotepcr.out
  17. cleanup() {
  18. rm -f $output_ek_pub_pem $output_ak_pub_pem $output_ak_pub_name \
  19. $output_quote $output_quotesig $output_quotepcr rand.out $ak_ctx \
  20. pcr.bin
  21. tpm2 pcrreset 16
  22. tpm2 evictcontrol -C o -c $handle_ek 2>/dev/null || true
  23. tpm2 evictcontrol -C o -c $handle_ak 2>/dev/null || true
  24. if [ $(ina "$@" "no-shut-down") -ne 0 ]; then
  25. shut_down
  26. echo "shutdown"
  27. fi
  28. }
  29. trap cleanup EXIT
  30. start_up
  31. cleanup "no-shut-down"
  32. getrandom() {
  33. tpm2 getrandom -o rand.out $1
  34. local file_size=`ls -l rand.out | awk {'print $5'}`
  35. loaded_randomness=`cat rand.out | xxd -p -c $file_size`
  36. }
  37. # Key generation
  38. tpm2 createek -c $handle_ek -G $ek_alg -u $output_ek_pub_pem -f pem
  39. tpm2 createak -C $handle_ek -c $ak_ctx -G $ak_alg -g $digestAlg -s $signAlg \
  40. -u $output_ak_pub_pem -f pem -n $output_ak_pub_name -p "$akpw"
  41. tpm2 evictcontrol -Q -c $ak_ctx $handle_ak
  42. # Quoting
  43. getrandom 20
  44. tpm2 quote -c $handle_ak -l sha256:15,16,22 -q $loaded_randomness \
  45. -m $output_quote -s $output_quotesig -o $output_quotepcr -g $digestAlg -p "$akpw"
  46. # Verify quote
  47. tpm2 checkquote -u $output_ak_pub_pem -m $output_quote -s $output_quotesig \
  48. -f $output_quotepcr -g $digestAlg -q $loaded_randomness
  49. # Verify EC
  50. tpm2 createek -G ecc -c ecc.ek
  51. tpm2 createak -C ecc.ek -c ecc.ak -G ecc -g sha256 -s ecdsa
  52. tpm2 readpublic -c ecc.ak -f pem -o ecc.ak.pem
  53. tpm2 getrandom -o nonce.bin 20
  54. tpm2 quote -c ecc.ak -l sha256:15,16,22 -q nonce.bin -m quote.bin -s quote.sig -o quote.pcr -g sha256
  55. tpm2 checkquote -u ecc.ak.pem -m quote.bin -s quote.sig -f quote.pcr -g sha256 -q nonce.bin
  56. # Verify that tss format works
  57. tpm2 readpublic -c ecc.ak -f tss -o ecc.ak.tss
  58. tpm2 checkquote -u ecc.ak.tss -m quote.bin -s quote.sig -f quote.pcr -g sha256 -q nonce.bin
  59. # Verify the tpmt format works
  60. tpm2 readpublic -c ecc.ak -f tpmt -o ecc.ak.tpmt
  61. tpm2 checkquote -u ecc.ak.tpmt -m quote.bin -s quote.sig -f quote.pcr -g sha256 -q nonce.bin
  62. # Verify that the plain tpm2_pcrread output can be passed to the checkquote tool
  63. tpm2 pcrread sha256:15,16,22 -o pcr.bin
  64. tpm2 checkquote -u ecc.ak.tpmt -m quote.bin -s quote.sig -g sha256 -q nonce.bin \
  65. -f pcr.bin -l sha256:15,16,22
  66. exit 0