fapi-policy_signed_ecc.sh 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. # set -e
  2. source helpers.sh
  3. start_up
  4. CRYPTO_PROFILE="ECC"
  5. setup_fapi $CRYPTO_PROFILE
  6. function cleanup {
  7. tss2 delete --path=/
  8. shut_down
  9. }
  10. trap cleanup EXIT
  11. # openssl ecparam -name secp256r1 -genkey -noout -out key_priv.pem
  12. # openssl ec -in key_priv.pem -pubout -out key_pub.pem
  13. # -----BEGIN PUBLIC KEY-----
  14. # MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEAw+PKFksCw+ikD76l6BMeXfebcZx
  15. # Gf8QGWT2MOy8tOfpe6m+6MUUm2GUijGPkvCTjtJPOJz//XMom+k+7OaWmA==
  16. # -----END PUBLIC KEY-----
  17. # -----BEGIN EC PRIVATE KEY-----
  18. # MHcCAQEEICf0OXKKsPkEVR1jsPOKSQQJnJVimamLYwLDZwJDj7etoAoGCCqGSM49
  19. # AwEHoUQDQgAEAw+PKFksCw+ikD76l6BMeXfebcZxGf8QGWT2MOy8tOfpe6m+6MUU
  20. # m2GUijGPkvCTjtJPOJz//XMom+k+7OaWmA==
  21. # -----END EC PRIVATE KEY-----
  22. KEY_PATH_1=HS/SRK/mySignKey1
  23. KEY_PATH_2=HS/SRK/mySignKey2
  24. SIGN_POLICY_DATA=pol_signed.json
  25. SIGN_POLICY_DATA_KEY_HINT=pol_signed_key_hint.json
  26. POLICY_SIGNED=policy/policy-signed
  27. POLICY_SIGNED_KEY_HINT=policy/policy-signed_key_hint
  28. TEST_SIGNATURE_FILE=test_signature.file
  29. SIGNATURE_FILE=signature.file
  30. DIGEST_FILE=digest.file
  31. PRIV_KEY_FILE=priv_key.file
  32. LOG_FILE=$TEMP_DIR/log.file
  33. touch $LOG_FILE
  34. EMPTY_FILE=$TEMP_DIR/empty.file
  35. BIG_FILE=$TEMP_DIR/big_file.file
  36. # Setup Policy Signed
  37. cat > $SIGN_POLICY_DATA_KEY_HINT <<EOF
  38. {
  39. "description":"Description pol_signed",
  40. "policy":[
  41. {
  42. "type": "POLICYSIGNED",
  43. "keyPEM": "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEAw+PKFksCw+ikD76l6BMeXfebcZx\nGf8QGWT2MOy8tOfpe6m+6MUUm2GUijGPkvCTjtJPOJz//XMom+k+7OaWmA==\n-----END PUBLIC KEY-----",
  44. "keyPEMhashAlg": "SHA1",
  45. "publicKeyHint": "My Signature Key"
  46. }
  47. ]
  48. }
  49. EOF
  50. cat > $SIGN_POLICY_DATA <<EOF
  51. {
  52. "description":"Description pol_signed",
  53. "policy":[
  54. {
  55. "type": "POLICYSIGNED",
  56. "keyPEM": "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEAw+PKFksCw+ikD76l6BMeXfebcZx\nGf8QGWT2MOy8tOfpe6m+6MUUm2GUijGPkvCTjtJPOJz//XMom+k+7OaWmA==\n-----END PUBLIC KEY-----",
  57. "keyPEMhashAlg": "SHA1",
  58. }
  59. ]
  60. }
  61. EOF
  62. # Write private pem key to file
  63. cat > $PRIV_KEY_FILE <<EOF
  64. -----BEGIN EC PRIVATE KEY-----
  65. MHcCAQEEICf0OXKKsPkEVR1jsPOKSQQJnJVimamLYwLDZwJDj7etoAoGCCqGSM49
  66. AwEHoUQDQgAEAw+PKFksCw+ikD76l6BMeXfebcZxGf8QGWT2MOy8tOfpe6m+6MUU
  67. m2GUijGPkvCTjtJPOJz//XMom+k+7OaWmA==
  68. -----END EC PRIVATE KEY-----
  69. EOF
  70. echo -n 01234567890123456789 > $DIGEST_FILE
  71. tss2 provision
  72. tss2 import --path=$POLICY_SIGNED --importData=$SIGN_POLICY_DATA
  73. tss2 import --path=$POLICY_SIGNED_KEY_HINT --importData=$SIGN_POLICY_DATA_KEY_HINT
  74. tss2 createkey --path $KEY_PATH_1 --type="sign, noda" \
  75. --policyPath $POLICY_SIGNED --authValue ""
  76. tss2 createkey --path $KEY_PATH_2 --type="sign, noda" \
  77. --policyPath $POLICY_SIGNED_KEY_HINT --authValue ""
  78. OUTPUT_FILE=$TEMP_DIR/data2sign.file
  79. expect <<EOF
  80. spawn sh -c "tss2 sign --keyPath=$KEY_PATH_1 --digest=$DIGEST_FILE --signature=$TEST_SIGNATURE_FILE --force 2> $LOG_FILE"
  81. expect "Filename for nonce output: " {
  82. send "$OUTPUT_FILE\r"
  83. expect "Filename for signature input: " {
  84. exec openssl dgst -sha1 -sign $PRIV_KEY_FILE -out $SIGNATURE_FILE $OUTPUT_FILE
  85. send "$SIGNATURE_FILE\r"
  86. exp_continue
  87. }
  88. }
  89. EOF
  90. if grep "ERROR" $LOG_FILE > /dev/null
  91. then
  92. cat $LOG_FILE
  93. exit 1
  94. fi
  95. expect <<EOF
  96. spawn sh -c "tss2 sign --keyPath=$KEY_PATH_2 --digest=$DIGEST_FILE --signature=$TEST_SIGNATURE_FILE --force 2> $LOG_FILE"
  97. expect "Filename for nonce output: " {
  98. send "$OUTPUT_FILE\r"
  99. expect "Filename for signature input: " {
  100. exec openssl dgst -sha1 -sign $PRIV_KEY_FILE -out $SIGNATURE_FILE $OUTPUT_FILE
  101. send "$SIGNATURE_FILE\r"
  102. exp_continue
  103. }
  104. }
  105. EOF
  106. if grep "ERROR" $LOG_FILE > /dev/null
  107. then
  108. cat $LOG_FILE
  109. exit 1
  110. fi
  111. echo "sign callback with BIG_FILE" # Expected to fail
  112. expect <<EOF
  113. spawn sh -c "tss2 sign --keyPath=$KEY_PATH_1 --digest=$DIGEST_FILE --signature=$TEST_SIGNATURE_FILE --force 2> $LOG_FILE"
  114. expect "Filename for nonce output: " {
  115. send "$OUTPUT_FILE\r"
  116. expect "Filename for signature input: " {
  117. exec openssl dgst -sha1 -sign $PRIV_KEY_FILE -out $SIGNATURE_FILE $OUTPUT_FILE
  118. send "$BIG_FILE\r"
  119. set ret [wait]
  120. if {[lindex \$ret 2] || [lindex \$ret 3] == 0} {
  121. send_user "\n[lindex \$ret]\n"
  122. send_user "Command not failed as expected\n"
  123. exit 1
  124. }
  125. }
  126. set ret [wait]
  127. if {[lindex \$ret 2] || [lindex \$ret 3] == 0} {
  128. set file [open $LOG_FILE r]
  129. set log [read \$file]
  130. close $file
  131. send_user "\n[lindex \$ret]\n"
  132. send_user "Command has not failed as expected\n"
  133. exit 1
  134. }
  135. }
  136. EOF
  137. if [[ "`cat $LOG_FILE`" == $SANITIZER_FILTER ]]; then
  138. echo "Error: AddressSanitizer triggered."
  139. cat $LOG_FILE
  140. exit 1
  141. fi
  142. echo "sign callback with EMPTY_FILE" # Expected to fail
  143. expect <<EOF
  144. spawn sh -c "tss2 sign --keyPath=$KEY_PATH_1 --digest=$DIGEST_FILE --signature=$TEST_SIGNATURE_FILE --force 2> $LOG_FILE"
  145. expect "Filename for nonce output: " {
  146. send "$OUTPUT_FILE\r"
  147. expect "Filename for signature input: " {
  148. exec openssl dgst -sha1 -sign $PRIV_KEY_FILE -out $SIGNATURE_FILE $OUTPUT_FILE
  149. send "$EMPTY_FILE\r"
  150. set ret [wait]
  151. if {[lindex \$ret 2] || [lindex \$ret 3] == 0} {
  152. send_user "\n[lindex \$ret]\n"
  153. send_user "Command has not failed as expected\n"
  154. exit 1
  155. }
  156. }
  157. set ret [wait]
  158. if {[lindex \$ret 2] || [lindex \$ret 3] == 0} {
  159. set file [open $LOG_FILE r]
  160. set log [read \$file]
  161. close $file
  162. send_user "\n[lindex \$ret]\n"
  163. send_user "Command has not failed as expected\n"
  164. exit 1
  165. }
  166. }
  167. EOF
  168. if [[ "`cat $LOG_FILE`" == $SANITIZER_FILTER ]]; then
  169. echo "Error: AddressSanitizer triggered."
  170. cat $LOG_FILE
  171. exit 1
  172. fi
  173. exit 0