File Coverage

blib/lib/Net/DNS/RR/SMIMEA.pm
Criterion Covered Total %
statement 63 63 100.0
branch 4 4 100.0
path n/a
condition 8 8 100.0
subroutine 17 17 100.0
pod 7 7 100.0
total 99 99 100.0


line stmt bran path cond sub pod time code
1               package Net::DNS::RR::SMIMEA;
2                
3 1       1   5 use strict;
  1           3  
  1           30  
4 1       1   3 use warnings;
  1           1  
  1           79  
5               our $VERSION = (qw$Id: SMIMEA.pm 2003 2025-01-21 12:06:06Z willem $)[2];
6                
7 1       1   6 use base qw(Net::DNS::RR);
  1           1  
  1           75  
8                
9                
10               =head1 NAME
11                
12               Net::DNS::RR::SMIMEA - DNS SMIMEA resource record
13                
14               =cut
15                
16 1       1   4 use integer;
  1           1  
  1           6  
17                
18 1       1   23 use Carp;
  1           2  
  1           82  
19                
20 1       1   4 use constant BABBLE => defined eval { require Digest::BubbleBabble };
  1           1  
  1           1  
  1           379  
21                
22                
23               sub _decode_rdata { ## decode rdata from wire-format octet string
24 1       1   3 my ( $self, $data, $offset ) = @_;
25                
26 1           3 my $next = $offset + $self->{rdlength};
27                
28 1           5 @{$self}{qw(usage selector matchingtype)} = unpack "\@$offset C3", $$data;
  1           3  
29 1           3 $offset += 3;
30 1           4 $self->{certbin} = substr $$data, $offset, $next - $offset;
31 1           3 return;
32               }
33                
34                
35               sub _encode_rdata { ## encode rdata as wire-format octet string
36 5       5   7 my $self = shift;
37                
38 5           9 return pack 'C3 a*', @{$self}{qw(usage selector matchingtype certbin)};
  5           22  
39               }
40                
41                
42               sub _format_rdata { ## format rdata portion of RR string.
43 3       3   6 my $self = shift;
44                
45 3           5 $self->_annotation( $self->babble ) if BABBLE;
46 3           7 my @cert = split /(\S{64})/, $self->cert;
47 3           10 my @rdata = ( $self->usage, $self->selector, $self->matchingtype, @cert );
48 3           11 return @rdata;
49               }
50                
51                
52               sub _parse_rdata { ## populate RR from rdata in argument list
53 2       2   7 my ( $self, @argument ) = @_;
54                
55 2           4 for (qw(usage selector matchingtype)) { $self->$_( shift @argument ) }
  6           16  
56 2           6 $self->cert(@argument);
57 2           5 return;
58               }
59                
60                
61               sub usage {
62 8       8 1 20 my ( $self, @value ) = @_;
63 8           33 for (@value) { $self->{usage} = 0 + $_ }
  3           7  
64 8     100     37 return $self->{usage} || 0;
65               }
66                
67                
68               sub selector {
69 8       8 1 2545 my ( $self, @value ) = @_;
70 8           12 for (@value) { $self->{selector} = 0 + $_ }
  3           5  
71 8     100     34 return $self->{selector} || 0;
72               }
73                
74                
75               sub matchingtype {
76 8       8 1 1395 my ( $self, @value ) = @_;
77 8           12 for (@value) { $self->{matchingtype} = 0 + $_ }
  3           6  
78 8     100     29 return $self->{matchingtype} || 0;
79               }
80                
81                
82               sub cert {
83 9       9 1 15 my ( $self, @value ) = @_;
84 9 100         25 return unpack "H*", $self->certbin() unless scalar @value;
85 4 100         9 my @hex = map { /^"*([\dA-Fa-f]*)"*$/ || croak("corrupt hex"); $1 } @value;
  4           303  
  3           10  
86 3           18 return $self->certbin( pack "H*", join "", @hex );
87               }
88                
89                
90               sub certbin {
91 15       15 1 939 my ( $self, @value ) = @_;
92 15           23 for (@value) { $self->{certbin} = $_ }
  3           6  
93 15     100     95 return $self->{certbin} || "";
94               }
95                
96                
97 4       4 1 1765 sub certificate { return &cert; }
98                
99                
100               sub babble {
101 5       5 1 1290 return BABBLE ? Digest::BubbleBabble::bubblebabble( Digest => shift->certbin ) : '';
102               }
103                
104                
105               1;
106               __END__