- if ( m/^sig:(?:.*?:){3,3}([0-9A-F]{8})([0-9A-F]{8}):(?:.*?:){3,3}(.*):.*?:/ ) {
- $sigs->{$key}->{$uid}->{$1.$2} = $3;
- $sigs->{$key}->{$uid}->{$2} = $3;
+ if ( m/^sig:(?:.*?:){3,3}([0-9A-F]{8})([0-9A-F]{8}):(?:.*?:){5,5}(.*?):/ ) {
+ my $class = $3;
+ if ($class eq '10x') {
+ $class = 'S';
+ } elsif ($class eq '11x') {
+ $class = '1';
+ } elsif ($class eq '12x') {
+ $class = '2';
+ } elsif ($class eq '13x') {
+ $class = '3';
+ } else {
+ $class = 's';
+ };
+ # Handle the case where one UID was signed multiple times
+ # with different signature classes.
+ my $before = $sigs->{$key}->{$uid}->{$1.$2};
+ if (defined $before) {
+ if ($before eq 'S' || $before eq 's') {
+ $sigs->{$key}->{$uid}->{$1.$2} = $class;
+ } elsif ($class eq 'S' || $class eq 's') {
+ # intentionall left blank
+ } elsif ($before < $class) {
+ $sigs->{$key}->{$uid}->{$1.$2} = $class;
+ };
+ } else {
+ $sigs->{$key}->{$uid}->{$1.$2} .= $class;
+ };
+ $sigs->{$key}->{$uid}->{$2} = $sigs->{$key}->{$uid}->{$1.$2};