chiark / gitweb /
Merge branch '2.3.x'
[catacomb] / pub / ed25519-tvconv
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";