system: Linux mars.sprixweb.com 3.10.0-1160.119.1.el7.x86_64 #1 SMP Tue Jun 4 14:43:51 UTC 2024 x86_64
package Net::DNS::RR::CERT;
#
# $Id: CERT.pm 1073 2012-12-09 21:48:01Z willem $
#
use vars qw($VERSION);
$VERSION = (qw$LastChangedRevision: 1073 $)[1];
use base Net::DNS::RR;
=head1 NAME
Net::DNS::RR::CERT - DNS CERT resource record
=cut
use strict;
use integer;
use MIME::Base64;
my %formats = (
PKIX => 1, # X.509 as per PKIX
SPKI => 2, # SPKI certificate
PGP => 3, # OpenPGP packet
IPKIX => 4, # The URL of an X.509 data object
ISPKI => 5, # The URL of an SPKI certificate
IPGP => 6, # The fingerprint and URL of an OpenPGP packet
ACPKIX => 7, # Attribute Certificate
IACPKIX => 8, # The URL of an Attribute Certificate
URI => 253, # URI private
OID => 254, # OID private
);
my %r_formats = reverse %formats;
my %algorithms = ( # RFC4034 except where noted
RSAMD5 => 1,
DH => 2,
DSA => 3,
ECC => 4,
RSASHA1 => 5,
RESERVE123 => 123, # RFC6014
RESERVE251 => 251, # RFC6014
INDIRECT => 252,
PRIVATEDNS => 253,
PRIVATEOID => 254,
);
my %r_algorithms = reverse %algorithms;
sub decode_rdata { ## decode rdata from wire-format octet string
my $self = shift;
my ( $data, $offset ) = @_;
@{$self}{qw(format tag algorithm)} = unpack "\@$offset n2 C", $$data;
$self->{certbin} = substr $$data, $offset + 5, $self->{rdlength} - 5;
}
sub encode_rdata { ## encode rdata as wire-format octet string
my $self = shift;
return '' unless $self->{certbin};
pack "n2 C a*", @{$self}{qw(format tag algorithm certbin)};
}
sub format_rdata { ## format rdata portion of RR string.
my $self = shift;
return '' unless $self->{certbin};
my $format = $r_formats{$self->{format}} || $self->{format};
my $algorithm = $r_algorithms{$self->{algorithm}} || $self->{algorithm};
my $base64 = MIME::Base64::encode $self->{certbin};
chomp $base64;
return "$format $self->{tag} $algorithm $base64" if length($base64) < 40;
return "$format $self->{tag} $algorithm(\n$base64 )";
}
sub parse_rdata { ## populate RR from rdata in argument list
my $self = shift;
$self->$_(shift) for qw(format tag algorithm);
$self->cert(@_);
}
sub format {
my $self = shift;
return $self->{format} unless scalar @_;
my $format = shift;
$format = '<undef>' unless defined $format;
$format = $formats{$format} || die "Unknown mnemonic: '$format'"
if $format =~ /\D/; # look up mnemonic
$self->{format} = $format;
}
sub tag {
my $self = shift;
$self->{tag} = shift if scalar @_;
return 0 + ( $self->{tag} || 0 );
}
sub algorithm {
my $self = shift;
return $self->{algorithm} unless scalar @_;
my $algorithm = shift;
$algorithm = '<undef>' unless defined $algorithm;
$algorithm = $algorithms{$algorithm} || die "Unknown mnemonic: '$algorithm'"
if $algorithm =~ /\D/; # look up mnemonic
$self->{algorithm} = $algorithm;
}
sub cert {
my $self = shift;
$self->{certbin} = MIME::Base64::decode( join "", @_ ) if scalar @_;
return MIME::Base64::encode( $self->certbin, "" ) if defined wantarray;
}
sub certbin {
my $self = shift;
$self->{certbin} = shift if scalar @_;
$self->{certbin} || "";
}
sub certificate { &certbin; } ## historical
1;
__END__
=head1 SYNOPSIS
use Net::DNS;
$rr = new Net::DNS::RR('name IN CERT format tag algorithm cert');
=head1 DESCRIPTION
Class for DNS Certificate (CERT) resource records.
=head1 METHODS
The available methods are those inherited from the base class augmented
by the type-specific methods defined in this package.
Use of undocumented package features or direct access to internal data
structures is discouraged and could result in program termination or
other unpredictable behaviour.
=head2 format
$format = $rr->format;
Returns the format code for the certificate (in numeric form)
=head2 tag
$tag = $rr->tag;
Returns the key tag for the public key in the certificate
=head2 algorithm
$algorithm = $rr->algorithm;
Returns the algorithm used by the certificate (in numeric form).
=head2 cert
$cert = $rr->cert;
Base64 representation of the certificate.
=head2 certbin
$certbin = $rr->certbin;
Binary representation of the certificate.
=head1 COPYRIGHT
Copyright (c)2002 VeriSign, Mike Schiraldi
Package template (c)2009,2012 O.M.Kolkman and R.W.Franks.
All rights reserved.
This program is free software; you may redistribute it and/or
modify it under the same terms as Perl itself.
=head1 SEE ALSO
L<perl>, L<Net::DNS>, L<Net::DNS::RR>, RFC4398
=cut