| 1 | #! /usr/bin/perl |
| 2 | |
| 3 | $mode = shift @ARGV; |
| 4 | |
| 5 | if ($mode eq "k") { print "pubkey {\n"; } |
| 6 | elsif ($mode eq "s") { print "sign {\n"; } |
| 7 | elsif ($mode eq "v") { print "verify {\n"; } |
| 8 | |
| 9 | while (<>) { |
| 10 | s/^([^:]{64})([^:]{64}):\2:([^:]*):([^:]{128})\3:$/$1:$2:$3:$4/; |
| 11 | my ($k, $K, $m, $s) = ($1, $2, $3, $4); |
| 12 | $m = '""' unless length $m; |
| 13 | if ($mode eq "k") { print " $k\n $K;\n"; } |
| 14 | elsif ($mode eq "s") { print " $k\n $m\n $s;\n"; } |
| 15 | elsif ($mode eq "v") { |
| 16 | print " $K\n $m\n $s\n 0;\n"; |
| 17 | (my $Kneg = $K) =~ s/([0-9a-f]{2})$/ sprintf "%02x", hex($1) ^ 0x80 /e; |
| 18 | print " $Kneg\n $m\n $s\n -1;\n"; |
| 19 | (my $Kzap = $K) =~ s/^([0-9a-f]{2})/ sprintf "%02x", hex($1) ^ 0xff /e; |
| 20 | print " $Kzap\n $m\n $s\n -1;\n"; |
| 21 | (my $mzap = $m) =~ s/^([0-9a-f]{2})/ sprintf "%02x", hex($1) ^ 0xff /e; |
| 22 | $mzap = "00" unless $m ne '""'; |
| 23 | print " $K\n $mzap\n $s\n -1;\n"; |
| 24 | (my $szap = $s) =~ s/^([0-9a-f]{2})/ sprintf "%02x", hex($1) ^ 0xff /e; |
| 25 | print " $K\n $m\n $szap\n -1;\n"; |
| 26 | } |
| 27 | } |
| 28 | |
| 29 | print "}\n"; |