#!/usr/bin/perl -w

use Scriptalicious;
use Fatal qw(:void open);

#-rw-r--r-- 1 samv git  151192 Dec 23 03:11 keys
#-rw-r--r-- 1 samv git 1570250 Dec 23 03:11 names
#-rw-r--r-- 1 samv git 1673008 Dec 23 03:11 signatures

our @row_index;
our %keys;
open NAMES, "<names";
open SIGNATURES, "<signatures";
open KEYS, "<keys";

getopt;

run qw(GET http://

while (<NAMES>) {
	my $name = $_;
	my @sigs;
	my $id;
	{
		local($/)=\4;
		$id = unpack("N", <KEYS>);
		my $num = unpack("N", scalar <SIGNATURES>);
		whisper sprintf "key: 0x%.8x %3d sigs: %30s", $id, $num,
			substr($name, 0, 30)
				if $VERBOSE > 1;
		for my $sig (1..$num) {
			my $raw = unpack("N", <SIGNATURES>);
			my $type_bits = $raw >> 28;
			my $index = $raw & ((1<<28)-1);
			my $check_level = $type_bits & 3;
			my $signed_primary = !!($type_bits & 4);
			push @sigs, [$index,$check_level,$signed_primary];
		}
	}
	push @row_index, $keys{$id}={ name => $name, sigs => \@sigs };
}

# now normalize..
while (my ($id, $rec) = each %keys) {
	for my $sig (@{ $rec->{sigs} }) {
		die "index out of range: $sig->[0] (we have ".@row_index.")"
			unless exists $row_index[$sig->[0]];
		$sig->[0] = $row_index[$sig->[0]];
	}
}

use Storable qw(store retrieve);

store \@row_index, "known.pm3";


