abrmd_policyticket.sh 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. # SPDX-License-Identifier: BSD-3-Clause
  2. source helpers.sh
  3. cleanup() {
  4. rm -f session.ctx secret.dat private.pem public.pem signature.dat \
  5. signing_key.ctx policy.signed prim.ctx sealing_key.priv sealing_key.pub \
  6. unsealed.dat qual.dat time.out tic.ket authobj.name to_sign.bin
  7. tpm2 flushcontext session.ctx 2>/dev/null || true
  8. if [ "${1}" != "no-shutdown" ]; then
  9. shut_down
  10. fi
  11. }
  12. trap cleanup EXIT
  13. start_up
  14. cleanup "no-shutdown"
  15. echo "plaintext" > secret.dat
  16. #
  17. # Test with policysigned
  18. #
  19. # Create the signing authority
  20. openssl genrsa -out private.pem 2048
  21. openssl rsa -in private.pem -outform PEM -pubout -out public.pem
  22. # Load the verification key and Create the policysigned policy
  23. tpm2 loadexternal -C o -G rsa -u public.pem -c signing_key.ctx \
  24. -n signing_key.name
  25. tpm2 startauthsession -S session.ctx
  26. tpm2 policysigned -S session.ctx -c signing_key.ctx -L policy.signed
  27. tpm2 flushcontext session.ctx
  28. # Create a sealing object to use the policysigned
  29. tpm2 createprimary -C o -c prim.ctx -Q
  30. tpm2 create -u sealing_key.pub -r sealing_key.priv -c sealing_key.ctx \
  31. -C prim.ctx -i secret.dat -L policy.signed -Q
  32. # Create a policy ticket for policysigned
  33. tpm2 startauthsession -S session.ctx --policy-session
  34. tpm2 policysigned -S session.ctx -c signing_key.ctx -x -t -500 \
  35. --raw-data to_sign.bin
  36. openssl dgst -sha256 -sign private.pem -out signature.dat to_sign.bin
  37. tpm2 policysigned -S session.ctx -g sha256 -s signature.dat -f rsassa \
  38. -c signing_key.ctx -x --ticket tic.ket --timeout time.out -t -500
  39. tpm2 flushcontext session.ctx
  40. # Satisfy the policyticket and unseal the secret
  41. tpm2 startauthsession -S session.ctx --policy-session
  42. tpm2 policyticket -S session.ctx -n signing_key.name --ticket tic.ket \
  43. --timeout time.out
  44. tpm2 unseal -p session:session.ctx -c sealing_key.ctx -o unsealed.dat
  45. tpm2 flushcontext session.ctx
  46. diff secret.dat unsealed.dat
  47. rm -f unsealed.dat
  48. #
  49. # Test with policysecret
  50. #
  51. tpm2 clear
  52. tpm2 startauthsession -S session.ctx
  53. tpm2 policysecret -S session.ctx -c o -L policy.secret
  54. tpm2 flushcontext session.ctx
  55. tpm2 createprimary -C o -c prim.ctx -Q
  56. tpm2 create -Q -g sha256 -u sealing_key.pub -r sealing_key.priv -C prim.ctx \
  57. -L policy.secret -i secret.dat
  58. tpm2 load -C prim.ctx -u sealing_key.pub -r sealing_key.priv -c sealing_key.ctx
  59. tpm2 startauthsession -S session.ctx --policy-session
  60. tpm2 policysecret -S session.ctx -c o -t -500 --timeout time.out \
  61. --ticket tic.ket --nonce-tpm
  62. tpm2 flushcontext session.ctx
  63. TPM2_RH_OWNER="40000001"
  64. echo $TPM2_RH_OWNER | xxd -r -p > authobj.name
  65. tpm2 startauthsession -S session.ctx --policy-session
  66. tpm2 policyticket -S session.ctx -n authobj.name --ticket tic.ket \
  67. --timeout time.out
  68. tpm2 unseal -p"session:session.ctx" -c sealing_key.ctx -o unsealed.dat
  69. tpm2 flushcontext session.ctx
  70. diff secret.dat unsealed.dat
  71. exit 0