[PATCH setup 3/4] Teach gpg-key-to-s-expr.sh to handle RSA pubkeys

Jon Turney jon.turney@dronecode.org.uk
Mon Feb 24 22:02:00 GMT 2020


---
 gpg-key-to-s-expr.sh | 49 +++++++++++++++++++++++++++++++-------------
 1 file changed, 35 insertions(+), 14 deletions(-)

diff --git a/gpg-key-to-s-expr.sh b/gpg-key-to-s-expr.sh
index 1938bbf..f5c6799 100755
--- a/gpg-key-to-s-expr.sh
+++ b/gpg-key-to-s-expr.sh
@@ -13,7 +13,7 @@
 # Written by Dave Korn <dave.korn.cygwin@gmail.com>
 #
 #
-# Converts a gpg dsa pub key file to a text s-expr for
+# Converts a gpg pub key file to a text s-expr for
 # building into setup.exe's signature verification.
 # Relies on having pgpdump installed.
 #
@@ -28,11 +28,10 @@
 # output on a single line.  Only one option should be
 # specified or the behaviour is undefined.
 
-
-# Usage: find_a_line DSACOEFFICIENT PGPDUMPFILE
-# Returns the hex data for the named DSA coefficeint..
+# Usage: find_a_line ALG COEFFICIENT PGPDUMPFILE
+# Returns the hex data for the named coefficient..
 function find_a_line() {
-  grep "DSA $1([0-9]* bits) -" < "$2" \
+  grep -m1 "$1 $2([0-9]* bits) -" < "$3" \
     | sed -e 's/^.*- //g' | tr -d ' '
 }
 
@@ -105,17 +104,36 @@ pgpdump -milpu "$1" >"$TMPFILE" || exit 1
 # bunch of bashes, greps and seds.  No, I don't care.  Don't bug
 # me about it until we have to run this script a million times a day!
 
-dsa_p=`find_a_line p $TMPFILE`
-dsa_q=`find_a_line q $TMPFILE`
-dsa_g=`find_a_line g $TMPFILE`
-dsa_y=`find_a_line y $TMPFILE`
+alg=`grep -m1 "Pub alg" $TMPFILE | sed -E -e 's/^.*pub (.*)\)/\1/g'`
+
+case $alg in
+    1)
+    rsa_n=`find_a_line RSA n $TMPFILE`
+    rsa_e=`find_a_line RSA e $TMPFILE`
+
+    rsa_n=`line_to_sexpr "$rsa_n"`
+    rsa_e=`line_to_sexpr "$rsa_e"`
+
+    echo -e $header$quotes"(public-key $escapes$nl\
+$starts$ind$mid(rsa $escapes$nl\
+$starts$ind$ind$mid(n $rsa_n) $escapes$nl\
+$starts$ind$ind$mid(e $rsa_e) $escapes$nl\
+$starts$ind$mid)$escapes$nl\
+$starts$mid)$quotes$nl";
+    ;;
 
-dsa_p=`line_to_sexpr "$dsa_p"`
-dsa_q=`line_to_sexpr "$dsa_q"`
-dsa_g=`line_to_sexpr "$dsa_g"`
-dsa_y=`line_to_sexpr "$dsa_y"`
+    17)
+    dsa_p=`find_a_line DSA p $TMPFILE`
+    dsa_q=`find_a_line DSA q $TMPFILE`
+    dsa_g=`find_a_line DSA g $TMPFILE`
+    dsa_y=`find_a_line DSA y $TMPFILE`
 
-echo -e $header$quotes"(public-key $escapes$nl\
+    dsa_p=`line_to_sexpr "$dsa_p"`
+    dsa_q=`line_to_sexpr "$dsa_q"`
+    dsa_g=`line_to_sexpr "$dsa_g"`
+    dsa_y=`line_to_sexpr "$dsa_y"`
+
+    echo -e $header$quotes"(public-key $escapes$nl\
 $starts$ind$mid(dsa $escapes$nl\
 $starts$ind$ind$mid(p $dsa_p) $escapes$nl\
 $starts$ind$ind$mid(q $dsa_q) $escapes$nl\
@@ -124,4 +142,7 @@ $starts$ind$ind$mid(y $dsa_y)$escapes$nl\
 $starts$ind$mid)$escapes$nl\
 $starts$mid)$quotes$nl";
 
+    ;;
+esac
+
 rm "$TMPFILE"
-- 
2.21.0



More information about the Cygwin-apps mailing list