| 
															
																@@ -24,11 +24,12 @@ auth="o" 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 # Algorithm type must be keyedhash for object with user provided sensitive data. 
															 | 
															
															 | 
															
																 # Algorithm type must be keyedhash for object with user provided sensitive data. 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 alg_create_key="keyedhash" 
															 | 
															
															 | 
															
																 alg_create_key="keyedhash" 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 # Attributes for the created TPM2 object with the JWK as sensitive data. 
															 | 
															
															 | 
															
																 # Attributes for the created TPM2 object with the JWK as sensitive data. 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-obj_attr="fixedtpm|fixedparent|sensitivedataorigin|noda|adminwithpolicy" 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+obj_attr="fixedtpm|fixedparent|noda|adminwithpolicy" 
															 | 
														
													
												
													
														
															| 
															 | 
															
																  
															 | 
															
															 | 
															
																  
															 | 
														
													
												
													
														
															| 
															 | 
															
																 function on_exit() { 
															 | 
															
															 | 
															
																 function on_exit() { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-    if ! rm -rf $TMP; then 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+    if [ ! -d "$TMP" ] || ! rm -rf "$TMP"; then 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         echo "Delete temporary files failed!" >&2 
															 | 
															
															 | 
															
																         echo "Delete temporary files failed!" >&2 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        echo "You need to clean up: $TMP" >&2 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         exit 1 
															 | 
															
															 | 
															
																         exit 1 
															 | 
														
													
												
													
														
															| 
															 | 
															
																     fi 
															 | 
															
															 | 
															
																     fi 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 } 
															 | 
															
															 | 
															
																 } 
															 | 
														
													
												
											
												
													
														
															 | 
															
																@@ -39,81 +40,126 @@ if [ "$1" == "--summary" ]; then 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 fi 
															 | 
															
															 | 
															
																 fi 
															 | 
														
													
												
													
														
															| 
															 | 
															
																  
															 | 
															
															 | 
															
																  
															 | 
														
													
												
													
														
															| 
															 | 
															
																 if [ -t 0 ]; then 
															 | 
															
															 | 
															
																 if [ -t 0 ]; then 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-    echo >&2 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-    echo "Usage: clevis encrypt tpm2 CONFIG < PLAINTEXT > JWE" >&2 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-    echo >&2 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-    echo $SUMMARY >&2 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-    echo >&2 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-    echo "This command uses the following configuration properties:" >&2 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-    echo >&2 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-    echo "  hash: <string>  Hash algorithm used in the computation of the object name (default: sha256)" >&2 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-    echo >&2 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-    echo "  key: <string>   Algorithm type for the generated key (default: ecc)" >&2 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-    echo >&2 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-    echo "  pcr_bank: <string>   PCR algorithm bank to use for policy (default: sha1)" >&2 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-    echo >&2 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-    echo "  pcr_ids: <string>   PCR list used for policy. If not present, no policy is used" >&2 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-    echo >&2 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-    echo "  pcr_digest: <string>   Binary PCR hashes encoded in base64. If not present, the hash values are looked up" >&2 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-    echo >&2 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-    exit 1 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+    exec >&2 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+    echo 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+    echo "Usage: clevis encrypt tpm2 CONFIG < PLAINTEXT > JWE" 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+    echo 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+    echo "$SUMMARY" 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+    echo 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+    echo "This command uses the following configuration properties:" 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+    echo 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+    echo "  hash: <string>  Hash algorithm used in the computation of the object name (default: sha256)" 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+    echo 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+    echo "  key: <string>   Algorithm type for the generated key (default: ecc)" 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+    echo 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+    echo "  pcr_bank: <string>   PCR algorithm bank to use for policy (default: sha1)" 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+    echo 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+    echo "  pcr_ids: <string>   PCR list used for policy. If not present, no policy is used" 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+    echo 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+    echo "  pcr_digest: <string>   Binary PCR hashes encoded in base64. If not present, the hash values are looked up" 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+    echo 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+    exit 2 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 fi 
															 | 
															
															 | 
															
																 fi 
															 | 
														
													
												
													
														
															| 
															 | 
															
																  
															 | 
															
															 | 
															
																  
															 | 
														
													
												
													
														
															| 
															 | 
															
																-TPM2TOOLS_INFO=`tpm2_pcrlist -v` 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+TPM2TOOLS_INFO="$(tpm2_createprimary -v)" 
															 | 
														
													
												
													
														
															| 
															 | 
															
																  
															 | 
															
															 | 
															
																  
															 | 
														
													
												
													
														
															| 
															 | 
															
																-if [[ $TPM2TOOLS_INFO != *version=\"3.* ]]; then 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-    echo "The tpm2 pin requires tpm2-tools version 3" >&2 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+match='version="(.)\.' 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+[[ $TPM2TOOLS_INFO =~ $match ]] && TPM2TOOLS_VERSION="${BASH_REMATCH[1]}" 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+if [[ $TPM2TOOLS_VERSION != 3 ]] && [[ $TPM2TOOLS_VERSION != 4 ]]; then 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+    echo "The tpm2 pin requires tpm2-tools version 3 or 4" >&2 
															 | 
														
													
												
													
														
															| 
															 | 
															
																     exit 1 
															 | 
															
															 | 
															
																     exit 1 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 fi 
															 | 
															
															 | 
															
																 fi 
															 | 
														
													
												
													
														
															| 
															 | 
															
																  
															 | 
															
															 | 
															
																  
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+# Old environment variables for tpm2-tools 3.0 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 export TPM2TOOLS_TCTI_NAME=device 
															 | 
															
															 | 
															
																 export TPM2TOOLS_TCTI_NAME=device 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-export TPM2TOOLS_DEVICE_FILE=`ls /dev/tpmrm? 2>/dev/null` 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+export TPM2TOOLS_DEVICE_FILE= 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+for dev in /dev/tpmrm?; do 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+    [ -e "$dev" ] || continue 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+    TPM2TOOLS_DEVICE_FILE="$dev" 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+    break 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+done 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+ 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+# New environment variable for tpm2-tools >= 3.1 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+export TPM2TOOLS_TCTI="$TPM2TOOLS_TCTI_NAME:$TPM2TOOLS_DEVICE_FILE" 
															 | 
														
													
												
													
														
															| 
															 | 
															
																  
															 | 
															
															 | 
															
																  
															 | 
														
													
												
													
														
															| 
															 | 
															
																-if [ -z "${TPM2TOOLS_DEVICE_FILE[0]}" ]; then 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+if [ -z "$TPM2TOOLS_DEVICE_FILE" ]; then 
															 | 
														
													
												
													
														
															| 
															 | 
															
																     echo "A TPM2 device with the in-kernel resource manager is needed!" >&2 
															 | 
															
															 | 
															
																     echo "A TPM2 device with the in-kernel resource manager is needed!" >&2 
															 | 
														
													
												
													
														
															| 
															 | 
															
																     exit 1 
															 | 
															
															 | 
															
																     exit 1 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 fi 
															 | 
															
															 | 
															
																 fi 
															 | 
														
													
												
													
														
															| 
															 | 
															
																  
															 | 
															
															 | 
															
																  
															 | 
														
													
												
													
														
															| 
															 | 
															
																-if ! [[ -r "${TPM2TOOLS_DEVICE_FILE[0]}" && -w "${TPM2TOOLS_DEVICE_FILE[0]}" ]]; then 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-    echo "The ${TPM2TOOLS_DEVICE_FILE[0]} device must be readable and writable!" >&2 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+if ! [[ -r "$TPM2TOOLS_DEVICE_FILE" && -w "$TPM2TOOLS_DEVICE_FILE" ]]; then 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+    echo "The $TPM2TOOLS_DEVICE_FILE device must be readable and writable!" >&2 
															 | 
														
													
												
													
														
															| 
															 | 
															
																     exit 1 
															 | 
															
															 | 
															
																     exit 1 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 fi 
															 | 
															
															 | 
															
																 fi 
															 | 
														
													
												
													
														
															| 
															 | 
															
																  
															 | 
															
															 | 
															
																  
															 | 
														
													
												
													
														
															| 
															 | 
															
																-if ! cfg=`jose fmt -j "$1" -Oo- 2>/dev/null`; then 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+if ! cfg="$(jose fmt -j "$1" -Oo- 2>/dev/null)"; then 
															 | 
														
													
												
													
														
															| 
															 | 
															
																     echo "Configuration is malformed!" >&2 
															 | 
															
															 | 
															
																     echo "Configuration is malformed!" >&2 
															 | 
														
													
												
													
														
															| 
															 | 
															
																     exit 1 
															 | 
															
															 | 
															
																     exit 1 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 fi 
															 | 
															
															 | 
															
																 fi 
															 | 
														
													
												
													
														
															| 
															 | 
															
																  
															 | 
															
															 | 
															
																  
															 | 
														
													
												
													
														
															| 
															 | 
															
																-hash=`jose fmt -j- -Og hash -u- <<< "$cfg"` || hash="sha256" 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+hash="$(jose fmt -j- -Og hash -u- <<< "$cfg")" || hash="sha256" 
															 | 
														
													
												
													
														
															| 
															 | 
															
																  
															 | 
															
															 | 
															
																  
															 | 
														
													
												
													
														
															| 
															 | 
															
																-key=`jose fmt -j- -Og key -u- <<< "$cfg"` || key="ecc" 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+key="$(jose fmt -j- -Og key -u- <<< "$cfg")" || key="ecc" 
															 | 
														
													
												
													
														
															| 
															 | 
															
																  
															 | 
															
															 | 
															
																  
															 | 
														
													
												
													
														
															| 
															 | 
															
																-pcr_bank=`jose fmt -j- -Og pcr_hash -u- <<< "$cfg"` || pcr_bank="sha1" 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+pcr_bank="$(jose fmt -j- -Og pcr_bank -u- <<< "$cfg")" || pcr_bank="sha1" 
															 | 
														
													
												
													
														
															| 
															 | 
															
																  
															 | 
															
															 | 
															
																  
															 | 
														
													
												
													
														
															| 
															 | 
															
																-pcr_ids=`jose fmt -j- -Og pcr_ids -u- <<< "$cfg"` || true 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+# Issue #103: We support passing pcr_ids using both a single string, as in 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+# "1,3", as well as an actual JSON array, such as ["1,"3"]. Let's handle both 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+# cases here. 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+if [[ ${cfg// /} != '{}' ]] \ 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+    && ! pcr_ids="$(jose fmt -j- -Og pcr_ids -u- 2>/dev/null <<< "$cfg")"; then 
															 | 
														
													
												
													
														
															| 
															 | 
															
																  
															 | 
															
															 | 
															
																  
															 | 
														
													
												
													
														
															| 
															 | 
															
																-pcr_digest=`jose fmt -j- -Og pcr_digest -u- <<< "$cfg"` || true 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+    # We failed to parse a string, so let's try to parse a JSON array instead. 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+    if jose fmt -j- -Og pcr_ids -A 2>/dev/null <<< "${cfg}"; then 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        # OK, it is an array, so let's get the items and form a string. 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        pcr_ids= 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        for pcr in $(jose fmt -j- -Og pcr_ids -Af- <<< "${cfg}" \ 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                     | tr -d '"'); do 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            pcr_ids=$(printf '%s,%s' "${pcr_ids}" "${pcr}") 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        done 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        # Now let's remove the leading comma. 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        pcr_ids=${pcr_ids/#,/} 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+    else 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        # Not to add a policy that was not intended, in this case, no policy 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        # at all, let's report the issue and exit. 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        echo "Parsing the requested policy failed!" >&2 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        exit 1 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+    fi 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+fi 
															 | 
														
													
												
													
														
															| 
															 | 
															
																  
															 | 
															
															 | 
															
																  
															 | 
														
													
												
													
														
															| 
															 | 
															
																-if ! jwk=`jose jwk gen -i '{"alg":"A256GCM"}'`; then 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+pcr_digest="$(jose fmt -j- -Og pcr_digest -u- <<< "$cfg")" || true 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+ 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+if ! jwk="$(jose jwk gen -i '{"alg":"A256GCM"}')"; then 
															 | 
														
													
												
													
														
															| 
															 | 
															
																     echo "Generating a jwk failed!" >&2 
															 | 
															
															 | 
															
																     echo "Generating a jwk failed!" >&2 
															 | 
														
													
												
													
														
															| 
															 | 
															
																     exit 1 
															 | 
															
															 | 
															
																     exit 1 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 fi 
															 | 
															
															 | 
															
																 fi 
															 | 
														
													
												
													
														
															| 
															 | 
															
																  
															 | 
															
															 | 
															
																  
															 | 
														
													
												
													
														
															| 
															 | 
															
																-if ! TMP=`mktemp -d`; then 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+if ! TMP="$(mktemp -d)"; then 
															 | 
														
													
												
													
														
															| 
															 | 
															
																     echo "Creating a temporary dir for TPM files failed!" >&2 
															 | 
															
															 | 
															
																     echo "Creating a temporary dir for TPM files failed!" >&2 
															 | 
														
													
												
													
														
															| 
															 | 
															
																     exit 1 
															 | 
															
															 | 
															
																     exit 1 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 fi 
															 | 
															
															 | 
															
																 fi 
															 | 
														
													
												
													
														
															| 
															 | 
															
																  
															 | 
															
															 | 
															
																  
															 | 
														
													
												
													
														
															| 
															 | 
															
																 trap 'on_exit' EXIT 
															 | 
															
															 | 
															
																 trap 'on_exit' EXIT 
															 | 
														
													
												
													
														
															| 
															 | 
															
																  
															 | 
															
															 | 
															
																  
															 | 
														
													
												
													
														
															| 
															 | 
															
																-if ! tpm2_createprimary -Q -H "$auth" -g "$hash" -G "$key" -C $TMP/primary.context; then 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+case "$TPM2TOOLS_VERSION" in 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+    3) tpm2_createprimary -Q -H "$auth" -g "$hash" -G "$key" -C "$TMP"/primary.context || fail=$?;; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+    4) tpm2_createprimary -Q -C "$auth" -g "$hash" -G "$key" -c "$TMP"/primary.context || fail=$?;; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+    *) fail=1;; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+esac 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+if [ -n "$fail" ]; then 
															 | 
														
													
												
													
														
															| 
															 | 
															
																     echo "Creating TPM2 primary key failed!" >&2 
															 | 
															
															 | 
															
																     echo "Creating TPM2 primary key failed!" >&2 
															 | 
														
													
												
													
														
															| 
															 | 
															
																     exit 1 
															 | 
															
															 | 
															
																     exit 1 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 fi 
															 | 
															
															 | 
															
																 fi 
															 | 
														
													
												
													
														
															| 
															 | 
															
																  
															 | 
															
															 | 
															
																  
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+policy_options=() 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 if [ -n "$pcr_ids" ]; then 
															 | 
															
															 | 
															
																 if [ -n "$pcr_ids" ]; then 
															 | 
														
													
												
													
														
															| 
															 | 
															
																     if [ -z "$pcr_digest" ]; then 
															 | 
															
															 | 
															
																     if [ -z "$pcr_digest" ]; then 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-        if ! tpm2_pcrlist -Q -L "$pcr_bank":"$pcr_ids" -o $TMP/pcr.digest; then 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        case "$TPM2TOOLS_VERSION" in 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            3) tpm2_pcrlist -Q -L "$pcr_bank":"$pcr_ids" -o "$TMP"/pcr.digest || fail=$?;; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            4) tpm2_pcrread -Q "$pcr_bank":"$pcr_ids" -o "$TMP"/pcr.digest || fail=$?;; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            *) fail=1;; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        esac 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        if [ -n "$fail" ]; then 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             echo "Creating PCR hashes file failed!" >&2 
															 | 
															
															 | 
															
																             echo "Creating PCR hashes file failed!" >&2 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             exit 1 
															 | 
															
															 | 
															
																             exit 1 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         fi 
															 | 
															
															 | 
															
																         fi 
															 | 
														
													
												
											
												
													
														
															 | 
															
																@@ -124,40 +170,59 @@ if [ -n "$pcr_ids" ]; then 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         fi 
															 | 
															
															 | 
															
																         fi 
															 | 
														
													
												
													
														
															| 
															 | 
															
																     fi 
															 | 
															
															 | 
															
																     fi 
															 | 
														
													
												
													
														
															| 
															 | 
															
																  
															 | 
															
															 | 
															
																  
															 | 
														
													
												
													
														
															| 
															 | 
															
																-    if ! tpm2_createpolicy -Q -P -L "$pcr_bank":"$pcr_ids" -F $TMP/pcr.digest -f $TMP/pcr.policy; then 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+    case "$TPM2TOOLS_VERSION" in 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        3) tpm2_createpolicy -Q -g "$hash" -P -L "$pcr_bank":"$pcr_ids" \ 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                             -F "$TMP"/pcr.digest -f "$TMP"/pcr.policy || fail=$?;; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        4) tpm2_createpolicy -Q -g "$hash" --policy-pcr -l "$pcr_bank":"$pcr_ids" \ 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                             -f "$TMP"/pcr.digest -L "$TMP"/pcr.policy || fail=$?;; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        *) fail=1;; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+    esac 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+    if [ -n "$fail" ]; then 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         echo "create policy fail, please check the environment or parameters!" 
															 | 
															
															 | 
															
																         echo "create policy fail, please check the environment or parameters!" 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         exit 1 
															 | 
															
															 | 
															
																         exit 1 
															 | 
														
													
												
													
														
															| 
															 | 
															
																     fi 
															 | 
															
															 | 
															
																     fi 
															 | 
														
													
												
													
														
															| 
															 | 
															
																  
															 | 
															
															 | 
															
																  
															 | 
														
													
												
													
														
															| 
															 | 
															
																-    policy_options="-L $TMP/pcr.policy" 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+    policy_options+=(-L "$TMP/pcr.policy") 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+else 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+    obj_attr="$obj_attr|userwithauth" 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 fi 
															 | 
															
															 | 
															
																 fi 
															 | 
														
													
												
													
														
															| 
															 | 
															
																  
															 | 
															
															 | 
															
																  
															 | 
														
													
												
													
														
															| 
															 | 
															
																-if ! tpm2_create -Q -g "$hash" -G "$alg_create_key" -c $TMP/primary.context -u $TMP/jwk.pub \ 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-     -r $TMP/jwk.priv -A "$obj_attr" $policy_options -I- <<< "$jwk"; then 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+case "$TPM2TOOLS_VERSION" in 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+    3) tpm2_create -Q -g "$hash" -G "$alg_create_key" -c "$TMP"/primary.context -u "$TMP"/jwk.pub \ 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                   -r "$TMP"/jwk.priv -A "$obj_attr" "${policy_options[@]}" -I- <<< "$jwk" || fail=$?;; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+    4) tpm2_create -Q -g "$hash" -C "$TMP"/primary.context -u "$TMP"/jwk.pub \ 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                   -r "$TMP"/jwk.priv -a "$obj_attr" "${policy_options[@]}" -i- <<< "$jwk" || fail=$?;; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+    *) fail=1;; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+esac 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+if [ -n "$fail" ]; then 
															 | 
														
													
												
													
														
															| 
															 | 
															
																     echo "Creating TPM2 object for jwk failed!" >&2 
															 | 
															
															 | 
															
																     echo "Creating TPM2 object for jwk failed!" >&2 
															 | 
														
													
												
													
														
															| 
															 | 
															
																     exit 1 
															 | 
															
															 | 
															
																     exit 1 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 fi 
															 | 
															
															 | 
															
																 fi 
															 | 
														
													
												
													
														
															| 
															 | 
															
																  
															 | 
															
															 | 
															
																  
															 | 
														
													
												
													
														
															| 
															 | 
															
																-if ! jwk_pub=`jose b64 enc -I $TMP/jwk.pub`; then 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+if ! jwk_pub="$(jose b64 enc -I "$TMP"/jwk.pub)"; then 
															 | 
														
													
												
													
														
															| 
															 | 
															
																     echo "Encoding jwk.pub in Base64 failed!" >&2 
															 | 
															
															 | 
															
																     echo "Encoding jwk.pub in Base64 failed!" >&2 
															 | 
														
													
												
													
														
															| 
															 | 
															
																     exit 1 
															 | 
															
															 | 
															
																     exit 1 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 fi 
															 | 
															
															 | 
															
																 fi 
															 | 
														
													
												
													
														
															| 
															 | 
															
																  
															 | 
															
															 | 
															
																  
															 | 
														
													
												
													
														
															| 
															 | 
															
																-if ! jwk_priv=`jose b64 enc -I $TMP/jwk.priv`; then 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+if ! jwk_priv="$(jose b64 enc -I "$TMP"/jwk.priv)"; then 
															 | 
														
													
												
													
														
															| 
															 | 
															
																     echo "Encoding jwk.priv in Base64 failed!" >&2 
															 | 
															
															 | 
															
																     echo "Encoding jwk.priv in Base64 failed!" >&2 
															 | 
														
													
												
													
														
															| 
															 | 
															
																     exit 1 
															 | 
															
															 | 
															
																     exit 1 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 fi 
															 | 
															
															 | 
															
																 fi 
															 | 
														
													
												
													
														
															| 
															 | 
															
																  
															 | 
															
															 | 
															
																  
															 | 
														
													
												
													
														
															| 
															 | 
															
																 jwe='{"protected":{"clevis":{"pin":"tpm2","tpm2":{}}}}' 
															 | 
															
															 | 
															
																 jwe='{"protected":{"clevis":{"pin":"tpm2","tpm2":{}}}}' 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-jwe=`jose fmt -j "$jwe" -g protected -g clevis -g tpm2 -q "$hash" -s hash -UUUUo-` 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-jwe=`jose fmt -j "$jwe" -g protected -g clevis -g tpm2 -q "$key" -s key -UUUUo-` 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+jwe="$(jose fmt -j "$jwe" -g protected -g clevis -g tpm2 -q "$hash" -s hash -UUUUo-)" 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+jwe="$(jose fmt -j "$jwe" -g protected -g clevis -g tpm2 -q "$key" -s key -UUUUo-)" 
															 | 
														
													
												
													
														
															| 
															 | 
															
																  
															 | 
															
															 | 
															
																  
															 | 
														
													
												
													
														
															| 
															 | 
															
																 if [ -n "$pcr_ids" ]; then 
															 | 
															
															 | 
															
																 if [ -n "$pcr_ids" ]; then 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-    jwe=`jose fmt -j "$jwe" -g protected -g clevis -g tpm2 -q "$pcr_bank" -s pcr_bank -UUUUo-` 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-    jwe=`jose fmt -j "$jwe" -g protected -g clevis -g tpm2 -q "$pcr_ids" -s pcr_ids -UUUUo-` 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+    jwe="$(jose fmt -j "$jwe" -g protected -g clevis -g tpm2 -q "$pcr_bank" -s pcr_bank -UUUUo-)" 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+    jwe="$(jose fmt -j "$jwe" -g protected -g clevis -g tpm2 -q "$pcr_ids" -s pcr_ids -UUUUo-)" 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 fi 
															 | 
															
															 | 
															
																 fi 
															 | 
														
													
												
													
														
															| 
															 | 
															
																  
															 | 
															
															 | 
															
																  
															 | 
														
													
												
													
														
															| 
															 | 
															
																-jwe=`jose fmt -j "$jwe" -g protected -g clevis -g tpm2 -q "$jwk_pub" -s jwk_pub -UUUUo-` 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-jwe=`jose fmt -j "$jwe" -g protected -g clevis -g tpm2 -q "$jwk_priv" -s jwk_priv -UUUUo-` 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+jwe="$(jose fmt -j "$jwe" -g protected -g clevis -g tpm2 -q "$jwk_pub" -s jwk_pub -UUUUo-)" 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+jwe="$(jose fmt -j "$jwe" -g protected -g clevis -g tpm2 -q "$jwk_priv" -s jwk_priv -UUUUo-)" 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+ 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+# The on_exit() trap will not be fired after exec, so let's clean up the temp 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+# directory at this point. 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+[ -d "${TMP}" ] && rm -rf "${TMP}" 
															 | 
														
													
												
													
														
															| 
															 | 
															
																  
															 | 
															
															 | 
															
																  
															 | 
														
													
												
													
														
															| 
															 | 
															
																-jose jwe enc -i- -k- -I- -c < <(echo -n "$jwe$jwk"; /bin/cat) 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+exec jose jwe enc -i- -k- -I- -c < <(echo -n "$jwe$jwk"; /bin/cat) 
															 |