- openssl enc $openssl_decrypt "-$(sed -n "${layer}s/ .*//p" "$keyfile")" \
- -pass fd:37 37< <(sed -n "${layer}s/^[^ ]* //p" "$keyfile") |
- go $(( layer + next_layer ))
+ operation=$(sed -n "${layer}{;s/ .*//;p;}" "$keyfile")
+ if [[ "$operation" == openssl-enc ]];then
+ openssl enc $openssl_decrypt "-$(sed -rn "${layer}s/[^ ]+ ([^ ]+) .*/\\1/p" "$keyfile")" \
+ -pass fd:37 37< <(sed -rn "${layer}s/^[^ ]+ [^ ]+ //p" "$keyfile")
+ elif [[ "$operation" == reverse ]];then
+ reverse
+ elif [[ "$operation" == openssl-dgst ]];then
+ tee >(sed -rn "${layer}s/^[^ ]+ [^ ]+ //p" "$keyfile" > "$hash_dir/$layer"
+ openssl dgst -binary "-$(sed -rn "${layer}s/[^ ]+ ([^ ]+) .*/\\1/p" "$keyfile")" |
+ base64 --wrap=0 | sed 's/$/\n/' >> "$hash_dir/$layer"
+ # Dying here doesn't terminate the pipeline. :(
+ verify_hash "$hash_dir/$layer" || die "Hash check $layer failed" )
+ else
+ die "Unknown operation"
+ fi |
+ go $(( layer + next_layer ))
+ fi
+}
+
+function record_hashes() {
+ if [[ "$mode" == d ]] || (( $# < 2 ));then
+ cat
+ else
+ stage=$1
+ hash=$2
+ shift 2
+ tee >(openssl dgst -binary "-$hash" | base64 --wrap=0 |
+ sed "s/^/openssl-dgst $hash /;s/$/\n/" > "$hash_dir/$stage-$hash") |
+ record_hashes "$stage" "$@"