#! /usr/bin/perl $mode = shift @ARGV; if ($mode eq "k") { print "pubkey {\n"; } elsif ($mode eq "s") { print "sign {\n"; } elsif ($mode eq "v") { print "verify {\n"; } while (<>) { s/^([^:]{64})([^:]{64}):\2:([^:]*):([^:]{128})\3:$/$1:$2:$3:$4/; my ($k, $K, $m, $s) = ($1, $2, $3, $4); $m = '""' unless length $m; if ($mode eq "k") { print " $k\n $K;\n"; } elsif ($mode eq "s") { print " $k\n $m\n $s;\n"; } elsif ($mode eq "v") { print " $K\n $m\n $s\n 0;\n"; (my $Kneg = $K) =~ s/([0-9a-f]{2})$/ sprintf "%02x", hex($1) ^ 0x80 /e; print " $Kneg\n $m\n $s\n -1;\n"; (my $Kzap = $K) =~ s/^([0-9a-f]{2})/ sprintf "%02x", hex($1) ^ 0xff /e; print " $Kzap\n $m\n $s\n -1;\n"; (my $mzap = $m) =~ s/^([0-9a-f]{2})/ sprintf "%02x", hex($1) ^ 0xff /e; $mzap = "00" unless $m ne '""'; print " $K\n $mzap\n $s\n -1;\n"; (my $szap = $s) =~ s/^([0-9a-f]{2})/ sprintf "%02x", hex($1) ^ 0xff /e; print " $K\n $m\n $szap\n -1;\n"; } } print "}\n";