+# FIXME: think about native perl representation of the packets instead.
+
+# Put a user ID into the $data
+sub finduid {
+ my $data = shift;
+ my $instr = shift;
+ my $tag = shift;
+ my $packetlen = shift;
+
+ my $dummy;
+ ($tag == $packet_types->{uid}) or die "This should not be called on anything but a User ID packet";
+
+ read($instr, $dummy, $packetlen);
+ $data->{uid} = $dummy;
+}
+
+
+# find signatures associated with the given fingerprint and user ID.
+sub findsig {
+ my $data = shift;
+ my $instr = shift;
+ my $tag = shift;
+ my $packetlen = shift;
+
+ ($tag == $packet_types->{sig}) or die "No calling revuid on anything other than a signature packet.";
+
+ if ((undef $data->{key}) ||
+ (undef $data->{uid}) ||
+ ($data->{uid} ne $data->{target}->{uid})) {
+ # this is not the user ID we are looking for.
+ read($instr, $dummy, $packetlen - $readbytes) or die "Could not skip past this packet.\n";
+ }
+
+ my $data;
+ read($instr, $data, 6) or die "could not read signature header\n";
+ my ($ver, $sigtype, $pubkeyalgo, $digestalgo, $subpacketsize) = unpack('CCCCn', $data);
+ if ($ver != 4) {
+ printf(STDERR "We only work with version 4 signatures.");
+ read($instr, $dummy, $packetlen - $readbytes) or die "Could not skip past this packet.\n";
+ return;
+ }
+ if ($pubkeyalgo != $asym_algos->{rsa}) {
+ printf(STDERR "We can only work with RSA at the moment");
+ read($instr, $dummy, $packetlen - $readbytes) or die "Could not skip past this packet.\n";
+ return;
+ }
+ if ($sigtype != $sig_types->{positive_certification}) {
+ # FIXME: some weird implementations might have made generic,
+ # persona, or casual certifications instead of positive
+ # certifications for self-sigs. Probably should handle them too.
+ read($instr, $dummy, $packetlen - $readbytes) or die "Could not skip past this packet.\n";
+ return;
+ }
+
+ my $subpackets;
+ read($instr, $subpackets, $subpacketsize) or die "could not read hashed signature subpackets.\n";
+
+ read($instr, $subpacketsize, 2) or die "could not read unhashed signature subpacket size.\n";
+ $subpacketsize = unpack('n', $subpacketsize);
+
+ my $unhashedsubpackets;
+ read($instr, $unhashedsubpackets, $subpacketsize) or die "could not read unhashed signature subpackets.\n";
+
+ my $hashtail;
+ read($instr, $hashtail, 2) or die "could not read left 16 bits of digest.\n";
+
+ # RSA signatures should read in how many MPIs?
+
+
+ # reason for revocation
+
+ # non-revocable
+
+}
+
+# FIXME: to do in order to generate a proper revocation certificate:
+# parse subpackets
+
+