File Coverage

blib/lib/Net/DNS/RR/SSHFP.pm
Criterion Covered Total %
statement 57 57 100.0
branch 4 4 100.0
path n/a
condition 6 6 100.0
subroutine 16 16 100.0
pod 6 6 100.0
total 89 89 100.0


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