diff options
author | tv <tv@krebsco.de> | 2021-01-04 15:01:52 +0100 |
---|---|---|
committer | tv <tv@krebsco.de> | 2021-01-04 15:04:15 +0100 |
commit | 0737e1f9208f26d073d49118b3aec8ebad420cd4 (patch) | |
tree | 3b7e9c9612194784ddb43e42a144f8a9b47cc6a7 | |
parent | 9feb2a8b377205ff8ab0f947ee511ec1fde5b9e7 (diff) |
-rwxr-xr-x | crxid | 46 |
1 files changed, 35 insertions, 11 deletions
@@ -1,23 +1,47 @@ #! /bin/sh -# Get CRX id from RSA key -# usage: crxid PEM_FILE +# Get CRX id from RSA key or CRX3 file +# usage: crxid FILE set -efu -pem_path=$1 +path=$1 +type=$(file -b "$path") -digest=$( - openssl rsa -in "$pem_path" -pubout -outform der 2>/dev/null | - openssl dgst -sha256 -hex | - sed 's/^(stdin)= //;s/.*/\U&/' -) +case $type in + 'Google Chrome extension, version 3') + # For details about CRX3 format see + # https://chromium.googlesource.com/chromium/src/+/HEAD/components/crx_file/crx3.proto + header_length=$(od -An -j8 -N4 -tu4 "$path") + binary_crx_id_length=16 + binary_crx_id_offset=$(expr 12 + $header_length - $binary_crx_id_length) + crx_id_hexstring=$( + od -An -j"$binary_crx_id_offset" -N"$binary_crx_id_length" -tx1 "$path" | + tr a-f A-F | + tr -d ' ' + ) + ;; + 'PEM RSA private key') + digest=$( + openssl rsa -in "$path" -pubout -outform der 2>/dev/null | + openssl dgst -sha256 -hex | + sed 's/^(stdin)= //;s/.*/\U&/' + ) + crx_id_hexstring=$( + echo "$digest" | cut -b-32 + ) + ;; + *) + echo "crxid: error: $path has unsupported type: $type" >&2 + exit 1 +esac script=" obase=16; ibase=16; ascii_a=61; - $(echo $digest | cut -b-32 | sed 's/./ascii_a + &;/g') + $(echo $crx_id_hexstring | sed 's/./ascii_a + &;/g') " -echo "$script" | bc | xxd -r -p -echo +crx_id=$(echo "$script" | bc | xxd -r -p) + +echo "$crx_id" |