summaryrefslogtreecommitdiffstats
path: root/crxmake
diff options
context:
space:
mode:
Diffstat (limited to 'crxmake')
-rwxr-xr-xcrxmake28
1 files changed, 25 insertions, 3 deletions
diff --git a/crxmake b/crxmake
index 9418f83..066ef60 100755
--- a/crxmake
+++ b/crxmake
@@ -16,6 +16,11 @@ zip="$name.zip"
tosign="$name.presig"
binary_crx_id="$name.crxid"
+key_size=$(
+ openssl rsa -text -noout -in "$key" |
+ sed -n 's/^.*Private-Key:.*\<\([0-9]\+\)\>\s*bit.*$/\1/p'
+)
+
workdir=$(mktemp -d -t crxmake.XXXXXXXX)
oldworkdir=$PWD
cd "$workdir"
@@ -47,9 +52,26 @@ openssl rsa -pubout -outform DER < "$key" > "$pub" 2>/dev/null
crmagic_hex="43 72 32 34" # Cr24
version_hex="03 00 00 00" # 3
-header_length="45 02 00 00"
-header_chunk_1="12 AC 04 0A A6 02"
-header_chunk_2="12 80 02"
+case $key_size in
+ 1024)
+ header_length="41 01 00 00"
+ header_chunk_1="12 A8 02 0A A2 01"
+ header_chunk_2="12 80 01"
+ ;;
+ 2048)
+ header_length="45 02 00 00"
+ header_chunk_1="12 AC 04 0A A6 02"
+ header_chunk_2="12 80 02"
+ ;;
+ 4096)
+ header_length="45 04 00 00"
+ header_chunk_1="12 AC 08 0A A6 04"
+ header_chunk_2="12 80 04"
+ ;;
+ *)
+ echo "Error: $key has unsupported key size: $key_size" >&2
+ exit 2
+esac
header_chunk_3="82 F1 04 12 0A 10"
(
echo "$crmagic_hex $version_hex $header_length $header_chunk_1" | xxd -r -p