abrmd_policyduplicationselect.sh 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. # SPDX-License-Identifier: BSD-3-Clause
  2. #;**********************************************************************;
  3. source helpers.sh
  4. source_parent_object=src_o.ctx
  5. new_parent_object=dst_n.ctx
  6. new_parent_name=dst_n.name
  7. duplicable_object_private=dupkey.priv
  8. duplicable_object_public=dupkey.pub
  9. duplicable_object=dupkey.ctx
  10. duplicable_object_name=dupkey.name
  11. policy_duplication_select=policydupselect.dat
  12. duplicated_object_private=dupkey_new.priv
  13. duplicated_object_seed=dupseed.dat
  14. policy_session=session.dat
  15. unintended_new_parent_object=dst2_n.ctx
  16. unintended_new_parent_name=dst2_n.name
  17. cleanup() {
  18. rm -f $source_parent_object $new_parent_object $new_parent_name \
  19. $duplicable_object_private $duplicable_object_public $duplicable_object \
  20. $policy_duplication_select $duplicated_object_private $policy_session \
  21. $duplicated_object_seed $duplicable_object_name \
  22. $unintended_new_parent_object $unintended_new_parent_name \
  23. if [ "$1" != "no-shut-down" ]; then
  24. shut_down
  25. fi
  26. }
  27. trap cleanup EXIT
  28. start_up
  29. cleanup "no-shut-down"
  30. # Error trapped and reported
  31. tpm2 clear
  32. # Create source parent and destination(or new) parent
  33. tpm2 createprimary -C n -g sha256 -G rsa -c $new_parent_object -Q
  34. tpm2 createprimary -C o -g sha256 -G rsa -c $source_parent_object -Q
  35. # Create the restricted parent policy
  36. tpm2 readpublic -c $new_parent_object -n $new_parent_name -Q
  37. tpm2 startauthsession -S $policy_session
  38. tpm2 policyduplicationselect -S $policy_session -N $new_parent_name \
  39. -L $policy_duplication_select -Q
  40. tpm2 flushcontext $policy_session
  41. rm $policy_session
  42. # Create the object to be duplicated using the policy
  43. tpm2 create -C $source_parent_object -g sha256 -G rsa \
  44. -r $duplicable_object_private -u $duplicable_object_public \
  45. -L $policy_duplication_select -a "sensitivedataorigin|sign|decrypt" \
  46. -c $duplicable_object -Q
  47. # Satisfy the policy and duplicate the object
  48. tpm2 readpublic -c $duplicable_object -n $duplicable_object_name -Q
  49. tpm2 startauthsession -S $policy_session --policy-session
  50. tpm2 policyduplicationselect -S $policy_session -N $new_parent_name \
  51. -n $duplicable_object_name -Q
  52. tpm2 duplicate -C $new_parent_object -c $duplicable_object -G null \
  53. -p session:$policy_session -r $duplicated_object_private \
  54. -s $duplicated_object_seed
  55. tpm2 flushcontext $policy_session
  56. rm $policy_session
  57. # Attempt duplication to unintended parent
  58. tpm2 createprimary -C n -g sha256 -G rsa -c $unintended_new_parent_object -Q
  59. tpm2 readpublic -c $new_parent_object -n $unintended_new_parent_name -Q
  60. tpm2 startauthsession -S $policy_session --policy-session
  61. tpm2 policyduplicationselect -S $policy_session -N $unintended_new_parent_name \
  62. -n $duplicable_object_name -Q
  63. ## Disable error reporting for expected failures to follow
  64. trap - ERR
  65. tpm2 duplicate -C $unintended_new_parent_object -c $duplicable_object -G null \
  66. -p session:$policy_session -r $duplicated_object_private \
  67. -s $duplicated_object_seed
  68. ## Restore error reporting
  69. trap onerror ERR
  70. tpm2 flushcontext $policy_session
  71. rm $policy_session
  72. exit 0