|
Packit |
e6c8bb |
# $Id: 21-TSIG-create.t 1439 2015-12-07 10:37:41Z willem $ -*-perl-*-
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
use strict;
|
|
Packit |
e6c8bb |
use Test::More;
|
|
Packit |
e6c8bb |
use Net::DNS;
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
my @prerequisite = qw(
|
|
Packit |
e6c8bb |
Digest::HMAC
|
|
Packit |
e6c8bb |
Digest::MD5
|
|
Packit |
e6c8bb |
Digest::SHA
|
|
Packit |
e6c8bb |
MIME::Base64
|
|
Packit |
e6c8bb |
);
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
foreach my $package (@prerequisite) {
|
|
Packit |
e6c8bb |
next if eval "require $package";
|
|
Packit |
e6c8bb |
plan skip_all => "$package not installed";
|
|
Packit |
e6c8bb |
exit;
|
|
Packit |
e6c8bb |
}
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
plan tests => 11;
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
my $tsig = new Net::DNS::RR( type => 'TSIG' );
|
|
Packit |
e6c8bb |
my $class = ref($tsig);
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
{
|
|
Packit |
e6c8bb |
my $keyname = 'keyname.example';
|
|
Packit |
e6c8bb |
my $keytext = 'xdX9m8UtQNbJUzUgQ4xDtUNZAmU=';
|
|
Packit |
e6c8bb |
my $tsig = create $class( $keyname, $keytext );
|
|
Packit |
e6c8bb |
is( ref($tsig), $class, 'create TSIG from argument list' );
|
|
Packit |
e6c8bb |
}
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
my $privatekey = 'Khmac-md5.example.+157+53335.private';
|
|
Packit |
e6c8bb |
END { unlink($privatekey) if defined $privatekey; }
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
open( KEY, ">$privatekey" ) or die "$privatekey $!";
|
|
Packit |
e6c8bb |
print KEY <<'END';
|
|
Packit |
e6c8bb |
Private-key-format: v1.2
|
|
Packit |
e6c8bb |
Algorithm: 157 (HMAC_MD5)
|
|
Packit |
e6c8bb |
Key: ARDJZgtuTDzAWeSGYPAu9uJUkX0=
|
|
Packit |
e6c8bb |
END
|
|
Packit |
e6c8bb |
close KEY;
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
{
|
|
Packit |
e6c8bb |
my $tsig = create $class($privatekey);
|
|
Packit |
e6c8bb |
is( ref($tsig), $class, 'create TSIG from private key' );
|
|
Packit |
e6c8bb |
}
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
my $publickey = 'Khmac-sha1.example.+161+39562.key';
|
|
Packit |
e6c8bb |
END { unlink($publickey) if defined $publickey; }
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
open( KEY, ">$publickey" ) or die "$publickey $!";
|
|
Packit |
e6c8bb |
print KEY <<'END';
|
|
Packit |
e6c8bb |
HMAC-SHA1.example. IN KEY 512 3 161 xdX9m8UtQNbJUzUgQ4xDtUNZAmU=
|
|
Packit |
e6c8bb |
END
|
|
Packit |
e6c8bb |
close KEY;
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
{
|
|
Packit |
e6c8bb |
my $tsig = create $class($publickey);
|
|
Packit |
e6c8bb |
is( ref($tsig), $class, 'create TSIG from public key' );
|
|
Packit |
e6c8bb |
}
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
{
|
|
Packit |
e6c8bb |
my $packet = new Net::DNS::Packet('query.example');
|
|
Packit |
e6c8bb |
$packet->sign_tsig($privatekey);
|
|
Packit |
e6c8bb |
my $tsig = create $class($packet);
|
|
Packit |
e6c8bb |
is( ref($tsig), $class, 'create TSIG from signed packet' );
|
|
Packit |
e6c8bb |
}
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
{
|
|
Packit |
e6c8bb |
my $chain = eval { create $class($tsig); };
|
|
Packit |
e6c8bb |
is( ref($chain), $class, 'create successor to existing TSIG' );
|
|
Packit |
e6c8bb |
}
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
{
|
|
Packit |
e6c8bb |
eval { create $class(); };
|
|
Packit |
e6c8bb |
my $exception = $1 if $@ =~ /^(.+)\n/;
|
|
Packit |
e6c8bb |
ok( $exception ||= '', "empty argument list\t[$exception]" );
|
|
Packit |
e6c8bb |
}
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
{
|
|
Packit |
e6c8bb |
eval { create $class(undef); };
|
|
Packit |
e6c8bb |
my $exception = $1 if $@ =~ /^(.+)\n/;
|
|
Packit |
e6c8bb |
ok( $exception ||= '', "argument undefined\t[$exception]" );
|
|
Packit |
e6c8bb |
}
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
{
|
|
Packit |
e6c8bb |
my $null = new Net::DNS::RR( type => 'NULL' );
|
|
Packit |
e6c8bb |
eval { create $class($null); };
|
|
Packit |
e6c8bb |
my $exception = $1 if $@ =~ /^(.+)\n/;
|
|
Packit |
e6c8bb |
ok( $exception ||= '', "unexpected argument\t[$exception]" );
|
|
Packit |
e6c8bb |
}
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
{
|
|
Packit |
e6c8bb |
my $packet = new Net::DNS::Packet('query.example');
|
|
Packit |
e6c8bb |
eval { create $class($packet); };
|
|
Packit |
e6c8bb |
my $exception = $1 if $@ =~ /^(.+)\n/;
|
|
Packit |
e6c8bb |
ok( $exception ||= '', "no TSIG in packet\t[$exception]" );
|
|
Packit |
e6c8bb |
}
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
my $badprivatekey = 'K+161+39562.private';
|
|
Packit |
e6c8bb |
END { unlink($badprivatekey) if defined $badprivatekey; }
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
open( KEY, ">$badprivatekey" ) or die "$badprivatekey $!";
|
|
Packit |
e6c8bb |
print KEY <<'END';
|
|
Packit |
e6c8bb |
Private-key-format: v1.2
|
|
Packit |
e6c8bb |
Algorithm: 161 (HMAC_SHA1)
|
|
Packit |
e6c8bb |
Key: xdX9m8UtQNbJUzUgQ4xDtUNZAmU=
|
|
Packit |
e6c8bb |
END
|
|
Packit |
e6c8bb |
close KEY;
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
{
|
|
Packit |
e6c8bb |
eval { create $class($badprivatekey); };
|
|
Packit |
e6c8bb |
my $exception = $1 if $@ =~ /^(.+)\n/;
|
|
Packit |
e6c8bb |
ok( $exception ||= '', "misnamed private key\t[$exception]" );
|
|
Packit |
e6c8bb |
}
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
my $dnskey = 'Kbad.example.+161+39562.key';
|
|
Packit |
e6c8bb |
END { unlink($dnskey) if defined $dnskey; }
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
open( KEY, ">$dnskey" ) or die "$dnskey $!";
|
|
Packit |
e6c8bb |
print KEY <<'END';
|
|
Packit |
e6c8bb |
HMAC-SHA1.example. IN DNSKEY 512 3 161 xdX9m8UtQNbJUzUgQ4xDtUNZAmU=
|
|
Packit |
e6c8bb |
END
|
|
Packit |
e6c8bb |
close KEY;
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
{
|
|
Packit |
e6c8bb |
eval { create $class($dnskey); };
|
|
Packit |
e6c8bb |
my $exception = $1 if $@ =~ /^(.+)\n/;
|
|
Packit |
e6c8bb |
ok( $exception ||= '', "unrecognised public key\t[$exception]" );
|
|
Packit |
e6c8bb |
}
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
__END__
|
|
Packit |
e6c8bb |
|