--- /dev/null
+#! /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";