#!/afs/athena/contrib/perl/perl5

BEGIN { push(@INC, "/afs/net.mit.edu/project/pks/perl-mysql/perllib"); }

use PGP::Keyring;
use PGP::Certificate;
use IO::File;
use Mmap;

$ringname = shift(@ARGV);

$file = new IO::File($ringname) || die "Couldn't open keyring $ringname: $!\n";

$mmap = mmap($ringbuf, 0, PROT_READ, MAP_SHARED, $file);

$ring = new PGP::Keyring(\$ringbuf);

while ($cert = $ring->NextCert()) {
    $name{$cert->keyid} = $cert->primary_userid->name;
    push(@certs, $cert);
}

for $cert (@certs) {
    @created = gmtime($cert->created);

    printf("pub  %4d/%s %4d/%02d/%02d %s\n",
	   $cert->modlength,
	   uc unpack("x4H8", $cert->keyid),
	   1900+$created[5], $created[4]+1, $created[3],
	   $cert->primary_userid->name);

    print("            Key fingerprint = ",
	  uc join(" ",unpack("H2"x8, $cert->fingerprint)). "  ",
	  uc join(" ",unpack("x8"."H2"x8, $cert->fingerprint)), "\n");

    for $sig (@{$cert->primary_userid->signatures}) {
	printf("sig       %s             %s\n",
	       $sig->issuertext,
	       $name{$sig->issuer} ||
	       "(Unknown signator, can't be checked)");
    }

    for $uid (@{$cert->secondary_userids}) {
	printf("                              %s\n",
	       $uid->name);

	for $sig (@{$uid->signatures}) {
	    printf("sig       %s             %s\n",
		   $sig->issuertext,
		   $name{$sig->issuer} ||
		   "(Unknown signator, can't be checked)");
	}
    }
}

print scalar(@certs), " matching keys found.\n";
