Compare commits
No commits in common. 'i10c-beta' and 'epel9' have entirely different histories.
@ -1 +1,2 @@
|
|||||||
SOURCES/Net-SNMP-v6.0.1.tar.gz
|
Net-SNMP-5.2.0.tar.gz
|
||||||
|
/Net-SNMP-v6.0.1.tar.gz
|
||||||
|
@ -1 +0,0 @@
|
|||||||
492073bcf5206b56783e07c0603ff3b1f12707fa SOURCES/Net-SNMP-v6.0.1.tar.gz
|
|
@ -1,551 +0,0 @@
|
|||||||
From 0ce1418f8261764c1b34c4379ed6af6ef8073678 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Michal=20Josef=20=C5=A0pa=C4=8Dek?=
|
|
||||||
<michal.josef.spacek@gmail.com>
|
|
||||||
Date: Mon, 11 Mar 2024 21:08:32 +0100
|
|
||||||
Subject: [PATCH 08/11] Add tests for another usm scenarios
|
|
||||||
|
|
||||||
---
|
|
||||||
MANIFEST | 3 +
|
|
||||||
t/usm-sha1-3des.t | 164 +++++++++++++++++++++++++++++++++++++++
|
|
||||||
t/usm-sha1-aes.t | 169 +++++++++++++++++++++++++++++++++++++++++
|
|
||||||
t/usm-sha1-cfb192aes.t | 169 +++++++++++++++++++++++++++++++++++++++++
|
|
||||||
4 files changed, 505 insertions(+)
|
|
||||||
create mode 100644 t/usm-sha1-3des.t
|
|
||||||
create mode 100644 t/usm-sha1-aes.t
|
|
||||||
create mode 100644 t/usm-sha1-cfb192aes.t
|
|
||||||
|
|
||||||
diff --git a/MANIFEST b/MANIFEST
|
|
||||||
index c750573..3430564 100644
|
|
||||||
--- a/MANIFEST
|
|
||||||
+++ b/MANIFEST
|
|
||||||
@@ -36,4 +36,7 @@ t/ber.t
|
|
||||||
t/dsp.t
|
|
||||||
t/mp.t
|
|
||||||
t/usm-md5-des.t
|
|
||||||
+t/usm-sha1-3des.t
|
|
||||||
+t/usm-sha1-aes.t
|
|
||||||
+t/usm-sha1-cfb192aes.t
|
|
||||||
t/usm-sha1-des.t
|
|
||||||
diff --git a/t/usm-sha1-3des.t b/t/usm-sha1-3des.t
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..5921ccf
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/t/usm-sha1-3des.t
|
|
||||||
@@ -0,0 +1,164 @@
|
|
||||||
+# -*- mode: perl -*-
|
|
||||||
+# ============================================================================
|
|
||||||
+
|
|
||||||
+# Test of the SNMPv3 User-based Security Model.
|
|
||||||
+
|
|
||||||
+# Copyright (c) 2001-2009 David M. Town <dtown@cpan.org>.
|
|
||||||
+# Copyright (c) 2024 Michal Josef Špaček <skim@cpan.org>.
|
|
||||||
+# All rights reserved.
|
|
||||||
+
|
|
||||||
+# This program is free software; you may redistribute it and/or modify it
|
|
||||||
+# under the same terms as the Perl 5 programming language system itself.
|
|
||||||
+
|
|
||||||
+# ============================================================================
|
|
||||||
+
|
|
||||||
+use strict;
|
|
||||||
+use Test;
|
|
||||||
+
|
|
||||||
+BEGIN
|
|
||||||
+{
|
|
||||||
+ $| = 1;
|
|
||||||
+ $^W = 1;
|
|
||||||
+ plan tests => 7
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+use Net::SNMP::Message qw(SEQUENCE OCTET_STRING FALSE);
|
|
||||||
+
|
|
||||||
+#
|
|
||||||
+# Load the Net::SNMP::Security::USM module
|
|
||||||
+#
|
|
||||||
+
|
|
||||||
+eval 'use Net::SNMP::Security::USM';
|
|
||||||
+
|
|
||||||
+my $skip = ($@ =~ /locate (:?\S+\.pm)/) ? $@ : FALSE;
|
|
||||||
+
|
|
||||||
+#
|
|
||||||
+# 1. Create the Net::SNMP::Security::USM object
|
|
||||||
+#
|
|
||||||
+
|
|
||||||
+my ($u, $e);
|
|
||||||
+
|
|
||||||
+eval
|
|
||||||
+{
|
|
||||||
+ ($u, $e) = Net::SNMP::Security::USM->new(
|
|
||||||
+ -username => 'dtown',
|
|
||||||
+ -authpassword => 'maplesyrup',
|
|
||||||
+ -authprotocol => 'sha',
|
|
||||||
+ -privpassword => 'maplesyrup',
|
|
||||||
+ -privprotocol => '3des',
|
|
||||||
+ );
|
|
||||||
+
|
|
||||||
+ # "Perform" discovery...
|
|
||||||
+ $u->_engine_id_discovery(pack 'x11H2', '02');
|
|
||||||
+
|
|
||||||
+ # ...and synchronization
|
|
||||||
+ $u->_synchronize(10, time);
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+skip(
|
|
||||||
+ $skip, ($@ || $e), q{}, 'Failed to create Net::SNMP::Security::USM object'
|
|
||||||
+);
|
|
||||||
+
|
|
||||||
+#
|
|
||||||
+# 2. Check the localized authKey
|
|
||||||
+#
|
|
||||||
+
|
|
||||||
+eval
|
|
||||||
+{
|
|
||||||
+ $e = unpack 'H*', $u->auth_key();
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+skip(
|
|
||||||
+ $skip,
|
|
||||||
+ ($@ || $e),
|
|
||||||
+ '6695febc9288e36282235fc7151f128497b38f3f',
|
|
||||||
+ 'Invalid authKey calculated'
|
|
||||||
+);
|
|
||||||
+
|
|
||||||
+#
|
|
||||||
+# 3. Check the localized privKey
|
|
||||||
+#
|
|
||||||
+
|
|
||||||
+eval
|
|
||||||
+{
|
|
||||||
+ $e = unpack 'H*', $u->priv_key();
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+skip(
|
|
||||||
+ $skip,
|
|
||||||
+ ($@ || $e),
|
|
||||||
+ '6695febc9288e36282235fc7151f128497b38f3f9b8b6d78936ba6e7d19dfd9c',
|
|
||||||
+ 'Invalid privKey calculated'
|
|
||||||
+);
|
|
||||||
+
|
|
||||||
+#
|
|
||||||
+# 4. Create and initalize a Message
|
|
||||||
+#
|
|
||||||
+
|
|
||||||
+my $m;
|
|
||||||
+
|
|
||||||
+eval
|
|
||||||
+{
|
|
||||||
+ ($m, $e) = Net::SNMP::Message->new();
|
|
||||||
+ $m->prepare(SEQUENCE, pack('H*', 'deadbeef') x 8);
|
|
||||||
+ $e = $m->error();
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+skip($skip, ($@ || $e), q{}, 'Failed to create Net::SNMP::Message object');
|
|
||||||
+
|
|
||||||
+#
|
|
||||||
+# 5. Calculate the HMAC
|
|
||||||
+#
|
|
||||||
+
|
|
||||||
+my $h;
|
|
||||||
+
|
|
||||||
+eval
|
|
||||||
+{
|
|
||||||
+ $h = unpack 'H*', $u->_auth_hmac($m);
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+skip($skip, $@, q{}, 'Calculate the HMAC failed');
|
|
||||||
+
|
|
||||||
+#
|
|
||||||
+# 6. Encrypt/descrypt the Message
|
|
||||||
+#
|
|
||||||
+
|
|
||||||
+my $henc;
|
|
||||||
+
|
|
||||||
+eval
|
|
||||||
+{
|
|
||||||
+ my $salt;
|
|
||||||
+ my $len = $m->length();
|
|
||||||
+ my $buff = $m->clear();
|
|
||||||
+ my $encrypted = $u->_encrypt_data($m, $salt, $buff);
|
|
||||||
+ $henc = unpack 'H*', $encrypted;
|
|
||||||
+ $m->append($encrypted);
|
|
||||||
+ $u->_decrypt_data($m, $salt, $m->process(OCTET_STRING));
|
|
||||||
+ $e = $u->error();
|
|
||||||
+ # Remove padding if necessary
|
|
||||||
+ if ($len -= $m->length()) {
|
|
||||||
+ substr ${$m->reference()}, $len, -$len, q{};
|
|
||||||
+ }
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+skip(
|
|
||||||
+ $skip,
|
|
||||||
+ ($@ || $e || $henc),
|
|
||||||
+ '042858d3a9fffa5afd8ef5cb338fdd79f452e13c0e77f4a918a069a84687c462726148c53198e6c97346',
|
|
||||||
+ 'Privacy failed',
|
|
||||||
+);
|
|
||||||
+
|
|
||||||
+#
|
|
||||||
+# 7. Check the HMAC
|
|
||||||
+#
|
|
||||||
+
|
|
||||||
+my $h2;
|
|
||||||
+
|
|
||||||
+eval
|
|
||||||
+{
|
|
||||||
+ $h2 = unpack 'H*', $u->_auth_hmac($m);
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+skip($skip, ($@ || $h2), $h, 'Authentication failed');
|
|
||||||
+
|
|
||||||
+# ============================================================================
|
|
||||||
diff --git a/t/usm-sha1-aes.t b/t/usm-sha1-aes.t
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..3e1b9f2
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/t/usm-sha1-aes.t
|
|
||||||
@@ -0,0 +1,169 @@
|
|
||||||
+# -*- mode: perl -*-
|
|
||||||
+# ============================================================================
|
|
||||||
+
|
|
||||||
+# Test of the SNMPv3 User-based Security Model.
|
|
||||||
+
|
|
||||||
+# Copyright (c) 2001-2009 David M. Town <dtown@cpan.org>.
|
|
||||||
+# Copyright (c) 2024 Michal Josef Špaček <skim@cpan.org>.
|
|
||||||
+# All rights reserved.
|
|
||||||
+
|
|
||||||
+# This program is free software; you may redistribute it and/or modify it
|
|
||||||
+# under the same terms as the Perl 5 programming language system itself.
|
|
||||||
+
|
|
||||||
+# ============================================================================
|
|
||||||
+
|
|
||||||
+use strict;
|
|
||||||
+use Test;
|
|
||||||
+
|
|
||||||
+BEGIN
|
|
||||||
+{
|
|
||||||
+ $| = 1;
|
|
||||||
+ $^W = 1;
|
|
||||||
+ plan tests => 7
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+use Net::SNMP::Message qw(SEQUENCE OCTET_STRING FALSE);
|
|
||||||
+
|
|
||||||
+#
|
|
||||||
+# Load the Net::SNMP::Security::USM module
|
|
||||||
+#
|
|
||||||
+
|
|
||||||
+eval 'use Net::SNMP::Security::USM; use Crypt::Rijndael;';
|
|
||||||
+
|
|
||||||
+my $skip = ($@ =~ /locate (:?\S+\.pm)/) ? $@ : FALSE;
|
|
||||||
+
|
|
||||||
+#
|
|
||||||
+# 1. Create the Net::SNMP::Security::USM object
|
|
||||||
+#
|
|
||||||
+
|
|
||||||
+my ($u, $e);
|
|
||||||
+
|
|
||||||
+eval
|
|
||||||
+{
|
|
||||||
+ ($u, $e) = Net::SNMP::Security::USM->new(
|
|
||||||
+ -username => 'dtown',
|
|
||||||
+ -authpassword => 'maplesyrup',
|
|
||||||
+ -authprotocol => 'sha1',
|
|
||||||
+ -privpassword => 'maplesyrup',
|
|
||||||
+ -privprotocol => 'aes',
|
|
||||||
+ );
|
|
||||||
+
|
|
||||||
+ # "Perform" discovery...
|
|
||||||
+ $u->_engine_id_discovery(pack 'x11H2', '02');
|
|
||||||
+
|
|
||||||
+ # ...and synchronization
|
|
||||||
+ $u->_synchronize(10, time);
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+skip(
|
|
||||||
+ $skip, ($@ || $e), q{}, 'Failed to create Net::SNMP::Security::USM object'
|
|
||||||
+);
|
|
||||||
+
|
|
||||||
+#
|
|
||||||
+# 2. Check the localized authKey
|
|
||||||
+#
|
|
||||||
+
|
|
||||||
+eval
|
|
||||||
+{
|
|
||||||
+ $e = unpack 'H*', $u->auth_key();
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+skip(
|
|
||||||
+ $skip,
|
|
||||||
+ ($@ || $e),
|
|
||||||
+ '6695febc9288e36282235fc7151f128497b38f3f',
|
|
||||||
+ 'Invalid authKey calculated'
|
|
||||||
+);
|
|
||||||
+
|
|
||||||
+#
|
|
||||||
+# 3. Check the localized privKey
|
|
||||||
+#
|
|
||||||
+
|
|
||||||
+eval
|
|
||||||
+{
|
|
||||||
+ $e = unpack 'H*', $u->priv_key();
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+skip(
|
|
||||||
+ $skip,
|
|
||||||
+ ($@ || $e),
|
|
||||||
+ '6695febc9288e36282235fc7151f1284',
|
|
||||||
+ 'Invalid privKey calculated'
|
|
||||||
+);
|
|
||||||
+
|
|
||||||
+#
|
|
||||||
+# 4. Create and initalize a Message
|
|
||||||
+#
|
|
||||||
+
|
|
||||||
+my $m;
|
|
||||||
+
|
|
||||||
+eval
|
|
||||||
+{
|
|
||||||
+ ($m, $e) = Net::SNMP::Message->new();
|
|
||||||
+ $m->prepare(SEQUENCE, pack('H*', 'deadbeef') x 8);
|
|
||||||
+ $e = $m->error();
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+skip($skip, ($@ || $e), q{}, 'Failed to create Net::SNMP::Message object');
|
|
||||||
+
|
|
||||||
+#
|
|
||||||
+# 5. Calculate the HMAC
|
|
||||||
+#
|
|
||||||
+
|
|
||||||
+my $h;
|
|
||||||
+
|
|
||||||
+eval
|
|
||||||
+{
|
|
||||||
+ $h = unpack 'H*', $u->_auth_hmac($m);
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+skip($skip, $@, q{}, 'Calculate the HMAC failed');
|
|
||||||
+
|
|
||||||
+#
|
|
||||||
+# 6. Encrypt/descrypt the Message
|
|
||||||
+#
|
|
||||||
+
|
|
||||||
+my $henc;
|
|
||||||
+
|
|
||||||
+eval
|
|
||||||
+{
|
|
||||||
+ my $engine_boots = 0;
|
|
||||||
+ my $engine_time = 1710186219;
|
|
||||||
+ my $salt;
|
|
||||||
+ my $len = $m->length();
|
|
||||||
+ my $buff = $m->clear();
|
|
||||||
+ $u->{_engine_boots} = $engine_boots;
|
|
||||||
+ $u->{_engine_time} = $engine_time;
|
|
||||||
+ my $encrypted = $u->_encrypt_data($m, $salt, $buff);
|
|
||||||
+ $henc = unpack 'H*', $encrypted;
|
|
||||||
+ $m->append($encrypted);
|
|
||||||
+ substr $salt, 0, 0, pack 'NN', $engine_boots, $engine_time;
|
|
||||||
+ $u->_decrypt_data($m, $salt, $m->process(OCTET_STRING));
|
|
||||||
+ $e = $u->error();
|
|
||||||
+ # Remove padding if necessary
|
|
||||||
+ if ($len -= $m->length()) {
|
|
||||||
+ substr ${$m->reference()}, $len, -$len, q{};
|
|
||||||
+ }
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+skip(
|
|
||||||
+ $skip,
|
|
||||||
+ ($@ || $e || $henc),
|
|
||||||
+ '0422c538d5445bbfb3a7b53b523349ce6ff3e38774bd14491703e6684aa485c48a9c217f',
|
|
||||||
+ 'Privacy failed',
|
|
||||||
+);
|
|
||||||
+
|
|
||||||
+#
|
|
||||||
+# 7. Check the HMAC
|
|
||||||
+#
|
|
||||||
+
|
|
||||||
+my $h2;
|
|
||||||
+
|
|
||||||
+eval
|
|
||||||
+{
|
|
||||||
+ $h2 = unpack 'H*', $u->_auth_hmac($m);
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+skip($skip, ($@ || $h2), $h, 'Authentication failed');
|
|
||||||
+
|
|
||||||
+# ============================================================================
|
|
||||||
diff --git a/t/usm-sha1-cfb192aes.t b/t/usm-sha1-cfb192aes.t
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..6f6898a
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/t/usm-sha1-cfb192aes.t
|
|
||||||
@@ -0,0 +1,169 @@
|
|
||||||
+# -*- mode: perl -*-
|
|
||||||
+# ============================================================================
|
|
||||||
+
|
|
||||||
+# Test of the SNMPv3 User-based Security Model.
|
|
||||||
+
|
|
||||||
+# Copyright (c) 2001-2009 David M. Town <dtown@cpan.org>.
|
|
||||||
+# Copyright (c) 2024 Michal Josef Špaček <skim@cpan.org>.
|
|
||||||
+# All rights reserved.
|
|
||||||
+
|
|
||||||
+# This program is free software; you may redistribute it and/or modify it
|
|
||||||
+# under the same terms as the Perl 5 programming language system itself.
|
|
||||||
+
|
|
||||||
+# ============================================================================
|
|
||||||
+
|
|
||||||
+use strict;
|
|
||||||
+use Test;
|
|
||||||
+
|
|
||||||
+BEGIN
|
|
||||||
+{
|
|
||||||
+ $| = 1;
|
|
||||||
+ $^W = 1;
|
|
||||||
+ plan tests => 7
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+use Net::SNMP::Message qw(SEQUENCE OCTET_STRING FALSE);
|
|
||||||
+
|
|
||||||
+#
|
|
||||||
+# Load the Net::SNMP::Security::USM module
|
|
||||||
+#
|
|
||||||
+
|
|
||||||
+eval 'use Net::SNMP::Security::USM; use Crypt::Rijndael;';
|
|
||||||
+
|
|
||||||
+my $skip = ($@ =~ /locate (:?\S+\.pm)/) ? $@ : FALSE;
|
|
||||||
+
|
|
||||||
+#
|
|
||||||
+# 1. Create the Net::SNMP::Security::USM object
|
|
||||||
+#
|
|
||||||
+
|
|
||||||
+my ($u, $e);
|
|
||||||
+
|
|
||||||
+eval
|
|
||||||
+{
|
|
||||||
+ ($u, $e) = Net::SNMP::Security::USM->new(
|
|
||||||
+ -username => 'dtown',
|
|
||||||
+ -authpassword => 'maplesyrup',
|
|
||||||
+ -authprotocol => 'sha',
|
|
||||||
+ -privpassword => 'maplesyrup',
|
|
||||||
+ -privprotocol => 'cfb192-aes',
|
|
||||||
+ );
|
|
||||||
+
|
|
||||||
+ # "Perform" discovery...
|
|
||||||
+ $u->_engine_id_discovery(pack 'x11H2', '02');
|
|
||||||
+
|
|
||||||
+ # ...and synchronization
|
|
||||||
+ $u->_synchronize(10, time);
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+skip(
|
|
||||||
+ $skip, ($@ || $e), q{}, 'Failed to create Net::SNMP::Security::USM object'
|
|
||||||
+);
|
|
||||||
+
|
|
||||||
+#
|
|
||||||
+# 2. Check the localized authKey
|
|
||||||
+#
|
|
||||||
+
|
|
||||||
+eval
|
|
||||||
+{
|
|
||||||
+ $e = unpack 'H*', $u->auth_key();
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+skip(
|
|
||||||
+ $skip,
|
|
||||||
+ ($@ || $e),
|
|
||||||
+ '6695febc9288e36282235fc7151f128497b38f3f', # RFC 3414 - A.3.2
|
|
||||||
+ 'Invalid authKey calculated'
|
|
||||||
+);
|
|
||||||
+
|
|
||||||
+#
|
|
||||||
+# 3. Check the localized privKey
|
|
||||||
+#
|
|
||||||
+
|
|
||||||
+eval
|
|
||||||
+{
|
|
||||||
+ $e = unpack 'H*', $u->priv_key();
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+skip(
|
|
||||||
+ $skip,
|
|
||||||
+ ($@ || $e),
|
|
||||||
+ '6695febc9288e36282235fc7151f128497b38f3f505e07eb',
|
|
||||||
+ 'Invalid privKey calculated'
|
|
||||||
+);
|
|
||||||
+
|
|
||||||
+#
|
|
||||||
+# 4. Create and initalize a Message
|
|
||||||
+#
|
|
||||||
+
|
|
||||||
+my $m;
|
|
||||||
+
|
|
||||||
+eval
|
|
||||||
+{
|
|
||||||
+ ($m, $e) = Net::SNMP::Message->new();
|
|
||||||
+ $m->prepare(SEQUENCE, pack('H*', 'deadbeef') x 8);
|
|
||||||
+ $e = $m->error();
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+skip($skip, ($@ || $e), q{}, 'Failed to create Net::SNMP::Message object');
|
|
||||||
+
|
|
||||||
+#
|
|
||||||
+# 5. Calculate the HMAC
|
|
||||||
+#
|
|
||||||
+
|
|
||||||
+my $h;
|
|
||||||
+
|
|
||||||
+eval
|
|
||||||
+{
|
|
||||||
+ $h = unpack 'H*', $u->_auth_hmac($m);
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+skip($skip, $@, q{}, 'Calculate the HMAC failed');
|
|
||||||
+
|
|
||||||
+#
|
|
||||||
+# 6. Encrypt/descrypt the Message
|
|
||||||
+#
|
|
||||||
+
|
|
||||||
+my $henc;
|
|
||||||
+
|
|
||||||
+eval
|
|
||||||
+{
|
|
||||||
+ my $engine_boots = 0;
|
|
||||||
+ my $engine_time = 1710186219;
|
|
||||||
+ my $salt;
|
|
||||||
+ my $len = $m->length();
|
|
||||||
+ my $buff = $m->clear();
|
|
||||||
+ $u->{_engine_boots} = $engine_boots;
|
|
||||||
+ $u->{_engine_time} = $engine_time;
|
|
||||||
+ my $encrypted = $u->_encrypt_data($m, $salt, $buff);
|
|
||||||
+ $henc = unpack 'H*', $encrypted;
|
|
||||||
+ $m->append($encrypted);
|
|
||||||
+ substr $salt, 0, 0, pack 'NN', $engine_boots, $engine_time;
|
|
||||||
+ $u->_decrypt_data($m, $salt, $m->process(OCTET_STRING));
|
|
||||||
+ $e = $u->error();
|
|
||||||
+ # Remove padding if necessary
|
|
||||||
+ if ($len -= $m->length()) {
|
|
||||||
+ substr ${$m->reference()}, $len, -$len, q{};
|
|
||||||
+ }
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+skip(
|
|
||||||
+ $skip,
|
|
||||||
+ ($@ || $e || $henc),
|
|
||||||
+ '042237eb7b044608e045878caba6d347f125edcad5b919d88d4c74d08b8040d105b3f29a',
|
|
||||||
+ 'Privacy failed',
|
|
||||||
+);
|
|
||||||
+
|
|
||||||
+#
|
|
||||||
+# 7. Check the HMAC
|
|
||||||
+#
|
|
||||||
+
|
|
||||||
+my $h2;
|
|
||||||
+
|
|
||||||
+eval
|
|
||||||
+{
|
|
||||||
+ $h2 = unpack 'H*', $u->_auth_hmac($m);
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+skip($skip, ($@ || $h2), $h, 'Authentication failed');
|
|
||||||
+
|
|
||||||
+# ============================================================================
|
|
||||||
--
|
|
||||||
2.45.1
|
|
||||||
|
|
@ -1,127 +0,0 @@
|
|||||||
From dbb8c0a1fe27bb250c8a34a8f83ace87de34eec3 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Michal=20Josef=20=C5=A0pa=C4=8Dek?=
|
|
||||||
<michal.josef.spacek@gmail.com>
|
|
||||||
Date: Wed, 13 Mar 2024 12:13:44 +0100
|
|
||||||
Subject: [PATCH 10/11] Rewrite from Digest::SHA1 to Digest::SHA
|
|
||||||
|
|
||||||
Digest::SHA is most actual in CPAN.
|
|
||||||
All changes are covered by tests.
|
|
||||||
---
|
|
||||||
Build.PL | 2 +-
|
|
||||||
META.yml | 2 +-
|
|
||||||
Makefile.PL | 2 +-
|
|
||||||
README | 2 +-
|
|
||||||
lib/Net/SNMP.pm | 4 ++--
|
|
||||||
lib/Net/SNMP/Security/USM.pm | 8 ++++----
|
|
||||||
6 files changed, 10 insertions(+), 10 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/Build.PL b/Build.PL
|
|
||||||
index a8ae8dd..3140545 100644
|
|
||||||
--- a/Build.PL
|
|
||||||
+++ b/Build.PL
|
|
||||||
@@ -38,7 +38,7 @@ Module::Build->new(
|
|
||||||
recommends => {
|
|
||||||
Crypt::DES => '2.03', # SNMPv3
|
|
||||||
Digest::MD5 => '2.11', # SNMPv3
|
|
||||||
- Digest::SHA1 => '1.02', # SNMPv3
|
|
||||||
+ Digest::SHA => 0, # SNMPv3
|
|
||||||
Digest::HMAC_MD5 => '1.01', # SNMPv3
|
|
||||||
Digest::HMAC_SHA1 => '1.03', # SNMPv3
|
|
||||||
Crypt::Rijndael => '1.02', # SNMPv3 - AES Cipher Algorithm
|
|
||||||
diff --git a/META.yml b/META.yml
|
|
||||||
index 0b1acd7..42fbc5f 100644
|
|
||||||
--- a/META.yml
|
|
||||||
+++ b/META.yml
|
|
||||||
@@ -65,7 +65,7 @@ recommends:
|
|
||||||
Digest::HMAC_MD5: '1.01'
|
|
||||||
Digest::HMAC_SHA1: '1.03'
|
|
||||||
Digest::MD5: '2.11'
|
|
||||||
- Digest::SHA1: '1.02'
|
|
||||||
+ Digest::SHA: '0'
|
|
||||||
requires:
|
|
||||||
Carp: '0'
|
|
||||||
Errno: '0'
|
|
||||||
diff --git a/Makefile.PL b/Makefile.PL
|
|
||||||
index 516b2f9..3b134c4 100644
|
|
||||||
--- a/Makefile.PL
|
|
||||||
+++ b/Makefile.PL
|
|
||||||
@@ -40,7 +40,7 @@ WriteMakefile(
|
|
||||||
Math::BigInt => 0,
|
|
||||||
Crypt::DES => '2.03', # SNMPv3
|
|
||||||
Digest::MD5 => '2.11', # SNMPv3
|
|
||||||
- Digest::SHA1 => '1.02', # SNMPv3
|
|
||||||
+ Digest::SHA => 0, # SNMPv3
|
|
||||||
Digest::HMAC_MD5 => '1.01', # SNMPv3
|
|
||||||
Digest::HMAC_SHA1 => '1.03', # SNMPv3
|
|
||||||
Socket => '2.000',
|
|
||||||
diff --git a/README b/README
|
|
||||||
index 7f23ea0..b5d02bc 100644
|
|
||||||
--- a/README
|
|
||||||
+++ b/README
|
|
||||||
@@ -53,7 +53,7 @@ REQUIREMENTS
|
|
||||||
Net::SNMP uses syntax that is not supported in versions of Perl
|
|
||||||
earlier than v5.6.0.
|
|
||||||
|
|
||||||
- The non-core modules Crypt::DES, Digest::MD5, Digest::SHA1, and
|
|
||||||
+ The non-core modules Crypt::DES, Digest::MD5, Digest::SHA, and
|
|
||||||
Digest::HMAC are needed to support SNMPv3.
|
|
||||||
|
|
||||||
In order to support the AES Cipher Algorithm as a SNMPv3 privacy
|
|
||||||
diff --git a/lib/Net/SNMP.pm b/lib/Net/SNMP.pm
|
|
||||||
index 1f69630..53ddda9 100644
|
|
||||||
--- a/lib/Net/SNMP.pm
|
|
||||||
+++ b/lib/Net/SNMP.pm
|
|
||||||
@@ -3550,8 +3550,8 @@ earlier than v5.6.0.
|
|
||||||
|
|
||||||
=item *
|
|
||||||
|
|
||||||
-The non-core modules F<Crypt::DES>, F<Digest::MD5>, F<Digest::SHA1>, and
|
|
||||||
-F<Digest::HMAC> are required to support SNMPv3.
|
|
||||||
+The non-core modules F<Crypt::DES>, F<Digest::MD5>, F<Digest::SHA>, and
|
|
||||||
+F<Digest::HMAC> are required to support SNMPv3.
|
|
||||||
|
|
||||||
=item *
|
|
||||||
|
|
||||||
diff --git a/lib/Net/SNMP/Security/USM.pm b/lib/Net/SNMP/Security/USM.pm
|
|
||||||
index 0a2ab34..a76ef56 100644
|
|
||||||
--- a/lib/Net/SNMP/Security/USM.pm
|
|
||||||
+++ b/lib/Net/SNMP/Security/USM.pm
|
|
||||||
@@ -25,7 +25,7 @@ use Net::SNMP::Message qw(
|
|
||||||
|
|
||||||
use Crypt::DES();
|
|
||||||
use Digest::MD5();
|
|
||||||
-use Digest::SHA1();
|
|
||||||
+use Digest::SHA();
|
|
||||||
use Digest::HMAC_MD5();
|
|
||||||
use Digest::HMAC_SHA1();
|
|
||||||
|
|
||||||
@@ -1392,7 +1392,7 @@ sub _priv_data_init_3desede
|
|
||||||
if ($this->{_auth_protocol} eq AUTH_PROTOCOL_HMACMD5) {
|
|
||||||
$this->{_priv_data}->{hash} = Digest::MD5->new();
|
|
||||||
} elsif ($this->{_auth_protocol} eq AUTH_PROTOCOL_HMACSHA) {
|
|
||||||
- $this->{_priv_data}->{hash} = Digest::SHA1->new();
|
|
||||||
+ $this->{_priv_data}->{hash} = Digest::SHA->new();
|
|
||||||
}
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
@@ -1682,7 +1682,7 @@ sub _priv_key_generate
|
|
||||||
if ($this->{_auth_protocol} eq AUTH_PROTOCOL_HMACMD5) {
|
|
||||||
$hnnn = Digest::MD5->new();
|
|
||||||
} elsif ($this->{_auth_protocol} eq AUTH_PROTOCOL_HMACSHA) {
|
|
||||||
- $hnnn = Digest::SHA1->new();
|
|
||||||
+ $hnnn = Digest::SHA->new();
|
|
||||||
} else {
|
|
||||||
return $this->_error(
|
|
||||||
'The authProtocol "%s" is unknown', $this->{_auth_protocol}
|
|
||||||
@@ -1784,7 +1784,7 @@ sub _password_localize
|
|
||||||
my $digests =
|
|
||||||
{
|
|
||||||
AUTH_PROTOCOL_HMACMD5, 'Digest::MD5',
|
|
||||||
- AUTH_PROTOCOL_HMACSHA, 'Digest::SHA1',
|
|
||||||
+ AUTH_PROTOCOL_HMACSHA, 'Digest::SHA',
|
|
||||||
};
|
|
||||||
|
|
||||||
if (!exists $digests->{$this->{_auth_protocol}}) {
|
|
||||||
--
|
|
||||||
2.45.1
|
|
||||||
|
|
@ -1,93 +0,0 @@
|
|||||||
From c84b7a235bdcaa37be39a927387c59429d2277c9 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Michal=20Josef=20=C5=A0pa=C4=8Dek?=
|
|
||||||
<michal.josef.spacek@gmail.com>
|
|
||||||
Date: Tue, 5 Mar 2024 19:00:55 +0100
|
|
||||||
Subject: [PATCH 03/11] Simple rewrite to Digest::HMAC helpers
|
|
||||||
|
|
||||||
We need to concretize algorithms to defined place instead of composition
|
|
||||||
in code. Digest::HMAC_* helpers are in the same package as Digest::HMAC.
|
|
||||||
|
|
||||||
Difference is that all code for algoritm is now in Digest::HMAC
|
|
||||||
distribution instead of previous situation when was composition
|
|
||||||
Digest::HMAC and Digest::SHA1 and Digest::MD5 in this code.
|
|
||||||
---
|
|
||||||
Build.PL | 3 ++-
|
|
||||||
META.yml | 3 ++-
|
|
||||||
Makefile.PL | 3 ++-
|
|
||||||
lib/Net/SNMP/Security/USM.pm | 7 ++++---
|
|
||||||
4 files changed, 10 insertions(+), 6 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/Build.PL b/Build.PL
|
|
||||||
index 6002343..a8ae8dd 100644
|
|
||||||
--- a/Build.PL
|
|
||||||
+++ b/Build.PL
|
|
||||||
@@ -39,7 +39,8 @@ Module::Build->new(
|
|
||||||
Crypt::DES => '2.03', # SNMPv3
|
|
||||||
Digest::MD5 => '2.11', # SNMPv3
|
|
||||||
Digest::SHA1 => '1.02', # SNMPv3
|
|
||||||
- Digest::HMAC => '1.00', # SNMPv3
|
|
||||||
+ Digest::HMAC_MD5 => '1.01', # SNMPv3
|
|
||||||
+ Digest::HMAC_SHA1 => '1.03', # SNMPv3
|
|
||||||
Crypt::Rijndael => '1.02', # SNMPv3 - AES Cipher Algorithm
|
|
||||||
},
|
|
||||||
meta_merge => {
|
|
||||||
diff --git a/META.yml b/META.yml
|
|
||||||
index bf64bc6..0b1acd7 100644
|
|
||||||
--- a/META.yml
|
|
||||||
+++ b/META.yml
|
|
||||||
@@ -62,7 +62,8 @@ provides:
|
|
||||||
recommends:
|
|
||||||
Crypt::DES: '2.03'
|
|
||||||
Crypt::Rijndael: '1.02'
|
|
||||||
- Digest::HMAC: '1.00'
|
|
||||||
+ Digest::HMAC_MD5: '1.01'
|
|
||||||
+ Digest::HMAC_SHA1: '1.03'
|
|
||||||
Digest::MD5: '2.11'
|
|
||||||
Digest::SHA1: '1.02'
|
|
||||||
requires:
|
|
||||||
diff --git a/Makefile.PL b/Makefile.PL
|
|
||||||
index a15243b..516b2f9 100644
|
|
||||||
--- a/Makefile.PL
|
|
||||||
+++ b/Makefile.PL
|
|
||||||
@@ -41,7 +41,8 @@ WriteMakefile(
|
|
||||||
Crypt::DES => '2.03', # SNMPv3
|
|
||||||
Digest::MD5 => '2.11', # SNMPv3
|
|
||||||
Digest::SHA1 => '1.02', # SNMPv3
|
|
||||||
- Digest::HMAC => '1.00', # SNMPv3
|
|
||||||
+ Digest::HMAC_MD5 => '1.01', # SNMPv3
|
|
||||||
+ Digest::HMAC_SHA1 => '1.03', # SNMPv3
|
|
||||||
Socket => '2.000',
|
|
||||||
},
|
|
||||||
dist => {
|
|
||||||
diff --git a/lib/Net/SNMP/Security/USM.pm b/lib/Net/SNMP/Security/USM.pm
|
|
||||||
index 4fb5742..0a2ab34 100644
|
|
||||||
--- a/lib/Net/SNMP/Security/USM.pm
|
|
||||||
+++ b/lib/Net/SNMP/Security/USM.pm
|
|
||||||
@@ -26,7 +26,8 @@ use Net::SNMP::Message qw(
|
|
||||||
use Crypt::DES();
|
|
||||||
use Digest::MD5();
|
|
||||||
use Digest::SHA1();
|
|
||||||
-use Digest::HMAC();
|
|
||||||
+use Digest::HMAC_MD5();
|
|
||||||
+use Digest::HMAC_SHA1();
|
|
||||||
|
|
||||||
## Version of the Net::SNMP::Security::USM module
|
|
||||||
|
|
||||||
@@ -1141,12 +1142,12 @@ sub _auth_data_init
|
|
||||||
if ($this->{_auth_protocol} eq AUTH_PROTOCOL_HMACMD5) {
|
|
||||||
|
|
||||||
$this->{_auth_data} =
|
|
||||||
- Digest::HMAC->new($this->{_auth_key}, 'Digest::MD5');
|
|
||||||
+ Digest::HMAC_MD5->new($this->{_auth_key});
|
|
||||||
|
|
||||||
} elsif ($this->{_auth_protocol} eq AUTH_PROTOCOL_HMACSHA) {
|
|
||||||
|
|
||||||
$this->{_auth_data} =
|
|
||||||
- Digest::HMAC->new($this->{_auth_key}, 'Digest::SHA1');
|
|
||||||
+ Digest::HMAC_SHA1->new($this->{_auth_key});
|
|
||||||
|
|
||||||
} else {
|
|
||||||
|
|
||||||
--
|
|
||||||
2.45.1
|
|
||||||
|
|
@ -1,355 +0,0 @@
|
|||||||
From 9b31754e1f3c456e15b81490b95604edf0c64cd7 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Michal=20Josef=20=C5=A0pa=C4=8Dek?=
|
|
||||||
<michal.josef.spacek@gmail.com>
|
|
||||||
Date: Mon, 11 Mar 2024 20:56:17 +0100
|
|
||||||
Subject: [PATCH 06/11] Split usm.t to two parts
|
|
||||||
|
|
||||||
---
|
|
||||||
MANIFEST | 3 +-
|
|
||||||
t/usm-md5-des.t | 153 ++++++++++++++++++++++++++++++++++++
|
|
||||||
t/{usm.t => usm-sha1-des.t} | 121 +---------------------------
|
|
||||||
3 files changed, 159 insertions(+), 118 deletions(-)
|
|
||||||
create mode 100644 t/usm-md5-des.t
|
|
||||||
rename t/{usm.t => usm-sha1-des.t} (58%)
|
|
||||||
|
|
||||||
diff --git a/MANIFEST b/MANIFEST
|
|
||||||
index 358e859..c750573 100644
|
|
||||||
--- a/MANIFEST
|
|
||||||
+++ b/MANIFEST
|
|
||||||
@@ -35,4 +35,5 @@ snmpkey.PL
|
|
||||||
t/ber.t
|
|
||||||
t/dsp.t
|
|
||||||
t/mp.t
|
|
||||||
-t/usm.t
|
|
||||||
+t/usm-md5-des.t
|
|
||||||
+t/usm-sha1-des.t
|
|
||||||
diff --git a/t/usm-md5-des.t b/t/usm-md5-des.t
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..2d8d8c0
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/t/usm-md5-des.t
|
|
||||||
@@ -0,0 +1,153 @@
|
|
||||||
+# -*- mode: perl -*-
|
|
||||||
+# ============================================================================
|
|
||||||
+
|
|
||||||
+# Test of the SNMPv3 User-based Security Model.
|
|
||||||
+
|
|
||||||
+# Copyright (c) 2001-2009 David M. Town <dtown@cpan.org>.
|
|
||||||
+# All rights reserved.
|
|
||||||
+
|
|
||||||
+# This program is free software; you may redistribute it and/or modify it
|
|
||||||
+# under the same terms as the Perl 5 programming language system itself.
|
|
||||||
+
|
|
||||||
+# ============================================================================
|
|
||||||
+
|
|
||||||
+use strict;
|
|
||||||
+use Test;
|
|
||||||
+
|
|
||||||
+BEGIN
|
|
||||||
+{
|
|
||||||
+ $| = 1;
|
|
||||||
+ $^W = 1;
|
|
||||||
+ plan tests => 7
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+use Net::SNMP::Message qw(SEQUENCE OCTET_STRING FALSE);
|
|
||||||
+
|
|
||||||
+#
|
|
||||||
+# Load the Net::SNMP::Security::USM module
|
|
||||||
+#
|
|
||||||
+
|
|
||||||
+eval 'use Net::SNMP::Security::USM';
|
|
||||||
+
|
|
||||||
+my $skip = ($@ =~ /locate (:?\S+\.pm)/) ? $@ : FALSE;
|
|
||||||
+
|
|
||||||
+#
|
|
||||||
+# 1. Create the Net::SNMP::Security::USM object
|
|
||||||
+#
|
|
||||||
+
|
|
||||||
+my ($u, $e);
|
|
||||||
+
|
|
||||||
+eval
|
|
||||||
+{
|
|
||||||
+ ($u, $e) = Net::SNMP::Security::USM->new(
|
|
||||||
+ -username => 'dtown',
|
|
||||||
+ -authpassword => 'maplesyrup',
|
|
||||||
+ -privpassword => 'maplesyrup',
|
|
||||||
+ -privprotocol => 'des',
|
|
||||||
+ );
|
|
||||||
+
|
|
||||||
+ # "Perform" discovery...
|
|
||||||
+ $u->_engine_id_discovery(pack 'x11H2', '02');
|
|
||||||
+
|
|
||||||
+ # ...and synchronization
|
|
||||||
+ $u->_synchronize(10, time);
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+skip(
|
|
||||||
+ $skip, ($@ || $e), q{}, 'Failed to create Net::SNMP::Security::USM object'
|
|
||||||
+);
|
|
||||||
+
|
|
||||||
+#
|
|
||||||
+# 2. Check the localized authKey
|
|
||||||
+#
|
|
||||||
+
|
|
||||||
+eval
|
|
||||||
+{
|
|
||||||
+ $e = unpack 'H*', $u->auth_key();
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+skip(
|
|
||||||
+ $skip,
|
|
||||||
+ ($@ || $e),
|
|
||||||
+ '526f5eed9fcce26f8964c2930787d82b', # RFC 3414 - A.3.1
|
|
||||||
+ 'Invalid authKey calculated'
|
|
||||||
+);
|
|
||||||
+
|
|
||||||
+#
|
|
||||||
+# 3. Check the localized privKey
|
|
||||||
+#
|
|
||||||
+
|
|
||||||
+eval
|
|
||||||
+{
|
|
||||||
+ $e = unpack 'H*', $u->priv_key();
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+skip(
|
|
||||||
+ $skip,
|
|
||||||
+ ($@ || $e),
|
|
||||||
+ '526f5eed9fcce26f8964c2930787d82b',
|
|
||||||
+ 'Invalid privKey calculated'
|
|
||||||
+);
|
|
||||||
+
|
|
||||||
+#
|
|
||||||
+# 4. Create and initalize a Message
|
|
||||||
+#
|
|
||||||
+
|
|
||||||
+my $m;
|
|
||||||
+
|
|
||||||
+eval
|
|
||||||
+{
|
|
||||||
+ ($m, $e) = Net::SNMP::Message->new();
|
|
||||||
+ $m->prepare(SEQUENCE, pack('H*', 'deadbeef') x 8);
|
|
||||||
+ $e = $m->error();
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+skip($skip, ($@ || $e), q{}, 'Failed to create Net::SNMP::Message object');
|
|
||||||
+
|
|
||||||
+#
|
|
||||||
+# 5. Calculate the HMAC
|
|
||||||
+#
|
|
||||||
+
|
|
||||||
+my $h;
|
|
||||||
+
|
|
||||||
+eval
|
|
||||||
+{
|
|
||||||
+ $h = unpack 'H*', $u->_auth_hmac($m);
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+skip($skip, $@, q{}, 'Calculate the HMAC failed');
|
|
||||||
+
|
|
||||||
+#
|
|
||||||
+# 6. Encrypt/descrypt the Message
|
|
||||||
+#
|
|
||||||
+
|
|
||||||
+eval
|
|
||||||
+{
|
|
||||||
+ my $salt;
|
|
||||||
+ my $len = $m->length();
|
|
||||||
+ my $buff = $m->clear();
|
|
||||||
+ $m->append($u->_encrypt_data($m, $salt, $buff));
|
|
||||||
+ $u->_decrypt_data($m, $salt, $m->process(OCTET_STRING));
|
|
||||||
+ $e = $u->error();
|
|
||||||
+ # Remove padding if necessary
|
|
||||||
+ if ($len -= $m->length()) {
|
|
||||||
+ substr ${$m->reference()}, $len, -$len, q{};
|
|
||||||
+ }
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+skip($skip, ($@ || $e), q{}, 'Privacy failed');
|
|
||||||
+
|
|
||||||
+#
|
|
||||||
+# 7. Check the HMAC
|
|
||||||
+#
|
|
||||||
+
|
|
||||||
+my $h2;
|
|
||||||
+
|
|
||||||
+eval
|
|
||||||
+{
|
|
||||||
+ $h2 = unpack 'H*', $u->_auth_hmac($m);
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+skip($skip, ($@ || $h2), $h, 'Authentication failed');
|
|
||||||
+
|
|
||||||
+# ============================================================================
|
|
||||||
diff --git a/t/usm.t b/t/usm-sha1-des.t
|
|
||||||
similarity index 58%
|
|
||||||
rename from t/usm.t
|
|
||||||
rename to t/usm-sha1-des.t
|
|
||||||
index 1a0d5a8..2efff7f 100644
|
|
||||||
--- a/t/usm.t
|
|
||||||
+++ b/t/usm-sha1-des.t
|
|
||||||
@@ -1,8 +1,6 @@
|
|
||||||
# -*- mode: perl -*-
|
|
||||||
# ============================================================================
|
|
||||||
|
|
||||||
-# $Id: usm.t,v 6.0 2009/09/09 15:07:49 dtown Rel $
|
|
||||||
-
|
|
||||||
# Test of the SNMPv3 User-based Security Model.
|
|
||||||
|
|
||||||
# Copyright (c) 2001-2009 David M. Town <dtown@cpan.org>.
|
|
||||||
@@ -20,7 +18,7 @@ BEGIN
|
|
||||||
{
|
|
||||||
$| = 1;
|
|
||||||
$^W = 1;
|
|
||||||
- plan tests => 14
|
|
||||||
+ plan tests => 7
|
|
||||||
}
|
|
||||||
|
|
||||||
use Net::SNMP::Message qw(SEQUENCE OCTET_STRING FALSE);
|
|
||||||
@@ -44,6 +42,7 @@ eval
|
|
||||||
($u, $e) = Net::SNMP::Security::USM->new(
|
|
||||||
-username => 'dtown',
|
|
||||||
-authpassword => 'maplesyrup',
|
|
||||||
+ -authprotocol => 'sha',
|
|
||||||
-privpassword => 'maplesyrup',
|
|
||||||
-privprotocol => 'des',
|
|
||||||
);
|
|
||||||
@@ -71,7 +70,7 @@ eval
|
|
||||||
skip(
|
|
||||||
$skip,
|
|
||||||
($@ || $e),
|
|
||||||
- '526f5eed9fcce26f8964c2930787d82b', # RFC 3414 - A.3.1
|
|
||||||
+ '6695febc9288e36282235fc7151f128497b38f3f', # RFC 3414 - A.3.2
|
|
||||||
'Invalid authKey calculated'
|
|
||||||
);
|
|
||||||
|
|
||||||
@@ -87,7 +86,7 @@ eval
|
|
||||||
skip(
|
|
||||||
$skip,
|
|
||||||
($@ || $e),
|
|
||||||
- '526f5eed9fcce26f8964c2930787d82b',
|
|
||||||
+ '6695febc9288e36282235fc7151f1284',
|
|
||||||
'Invalid privKey calculated'
|
|
||||||
);
|
|
||||||
|
|
||||||
@@ -152,116 +151,4 @@ eval
|
|
||||||
|
|
||||||
skip($skip, ($@ || $h2), $h, 'Authentication failed');
|
|
||||||
|
|
||||||
-#
|
|
||||||
-# 8. Create the Net::SNMP::Security::USM object
|
|
||||||
-#
|
|
||||||
-
|
|
||||||
-eval
|
|
||||||
-{
|
|
||||||
- ($u, $e) = Net::SNMP::Security::USM->new(
|
|
||||||
- -username => 'dtown',
|
|
||||||
- -authpassword => 'maplesyrup',
|
|
||||||
- -authprotocol => 'sha',
|
|
||||||
- -privpassword => 'maplesyrup',
|
|
||||||
- -privprotocol => 'des',
|
|
||||||
- );
|
|
||||||
-
|
|
||||||
- # "Perform" discovery...
|
|
||||||
- $u->_engine_id_discovery(pack 'x11H2', '02');
|
|
||||||
-
|
|
||||||
- # ...and synchronization
|
|
||||||
- $u->_synchronize(10, time);
|
|
||||||
-};
|
|
||||||
-
|
|
||||||
-skip(
|
|
||||||
- $skip, ($@ || $e), q{}, 'Failed to create Net::SNMP::Security::USM object'
|
|
||||||
-);
|
|
||||||
-
|
|
||||||
-#
|
|
||||||
-# 9. Check the localized authKey
|
|
||||||
-#
|
|
||||||
-
|
|
||||||
-eval
|
|
||||||
-{
|
|
||||||
- $e = unpack 'H*', $u->auth_key();
|
|
||||||
-};
|
|
||||||
-
|
|
||||||
-skip(
|
|
||||||
- $skip,
|
|
||||||
- ($@ || $e),
|
|
||||||
- '6695febc9288e36282235fc7151f128497b38f3f', # RFC 3414 - A.3.2
|
|
||||||
- 'Invalid authKey calculated'
|
|
||||||
-);
|
|
||||||
-
|
|
||||||
-#
|
|
||||||
-# 10. Check the localized privKey
|
|
||||||
-#
|
|
||||||
-
|
|
||||||
-eval
|
|
||||||
-{
|
|
||||||
- $e = unpack 'H*', $u->priv_key();
|
|
||||||
-};
|
|
||||||
-
|
|
||||||
-skip(
|
|
||||||
- $skip,
|
|
||||||
- ($@ || $e),
|
|
||||||
- '6695febc9288e36282235fc7151f1284',
|
|
||||||
- 'Invalid privKey calculated'
|
|
||||||
-);
|
|
||||||
-
|
|
||||||
-#
|
|
||||||
-# 11. Create and initalize a Message
|
|
||||||
-#
|
|
||||||
-
|
|
||||||
-eval
|
|
||||||
-{
|
|
||||||
- ($m, $e) = Net::SNMP::Message->new();
|
|
||||||
- $m->prepare(SEQUENCE, pack('H*', 'deadbeef') x 8);
|
|
||||||
- $e = $m->error();
|
|
||||||
-};
|
|
||||||
-
|
|
||||||
-skip($skip, ($@ || $e), q{}, 'Failed to create Net::SNMP::Message object');
|
|
||||||
-
|
|
||||||
-#
|
|
||||||
-# 12. Calculate the HMAC
|
|
||||||
-#
|
|
||||||
-
|
|
||||||
-eval
|
|
||||||
-{
|
|
||||||
- $h = unpack 'H*', $u->_auth_hmac($m);
|
|
||||||
-};
|
|
||||||
-
|
|
||||||
-skip($skip, $@, q{}, 'Calculate the HMAC failed');
|
|
||||||
-
|
|
||||||
-#
|
|
||||||
-# 13. Encrypt/descrypt the Message
|
|
||||||
-#
|
|
||||||
-
|
|
||||||
-eval
|
|
||||||
-{
|
|
||||||
- my $salt;
|
|
||||||
- my $len = $m->length();
|
|
||||||
- my $buff = $m->clear();
|
|
||||||
- $m->append($u->_encrypt_data($m, $salt, $buff));
|
|
||||||
- $u->_decrypt_data($m, $salt, $m->process(OCTET_STRING));
|
|
||||||
- $e = $u->error();
|
|
||||||
- # Remove padding if necessary
|
|
||||||
- if ($len -= $m->length()) {
|
|
||||||
- substr ${$m->reference()}, $len, -$len, q{};
|
|
||||||
- }
|
|
||||||
-};
|
|
||||||
-
|
|
||||||
-skip($skip, ($@ || $e), q{}, 'Privacy failed');
|
|
||||||
-
|
|
||||||
-#
|
|
||||||
-# 14. Check the HMAC
|
|
||||||
-#
|
|
||||||
-
|
|
||||||
-eval
|
|
||||||
-{
|
|
||||||
- $h2 = unpack 'H*', $u->_auth_hmac($m);
|
|
||||||
-};
|
|
||||||
-
|
|
||||||
-skip($skip, ($@ || $h2), $h, 'Authentication failed');
|
|
||||||
-
|
|
||||||
# ============================================================================
|
|
||||||
--
|
|
||||||
2.45.1
|
|
||||||
|
|
@ -1,220 +0,0 @@
|
|||||||
diff -Naur A/Build.PL B/Build.PL
|
|
||||||
--- A/Build.PL
|
|
||||||
+++ B/Build.PL
|
|
||||||
@@ -33,6 +33,7 @@ Module::Build->new(
|
|
||||||
Exporter => 0,
|
|
||||||
IO::Socket => 0,
|
|
||||||
Math::BigInt => 0,
|
|
||||||
+ Socket => '2.000',
|
|
||||||
},
|
|
||||||
recommends => {
|
|
||||||
Crypt::DES => '2.03', # SNMPv3
|
|
||||||
@@ -40,7 +41,6 @@ Module::Build->new(
|
|
||||||
Digest::SHA1 => '1.02', # SNMPv3
|
|
||||||
Digest::HMAC => '1.00', # SNMPv3
|
|
||||||
Crypt::Rijndael => '1.02', # SNMPv3 - AES Cipher Algorithm
|
|
||||||
- Socket6 => '0.23', # UDP/IPv6 or TCP/IPv6 Transport Domain
|
|
||||||
},
|
|
||||||
meta_merge => {
|
|
||||||
resources => {
|
|
||||||
diff -Naur A/META.yml B/META.yml
|
|
||||||
--- A/META.yml
|
|
||||||
+++ B/META.yml
|
|
||||||
@@ -3,14 +3,15 @@ abstract: 'Object oriented interface to SNMP'
|
|
||||||
author:
|
|
||||||
- 'David M. Town <dtown@cpan.org>'
|
|
||||||
build_requires:
|
|
||||||
- Test: 0
|
|
||||||
+ Test: '0'
|
|
||||||
configure_requires:
|
|
||||||
- Module::Build: 0.36
|
|
||||||
-generated_by: 'Module::Build version 0.3607'
|
|
||||||
+ Module::Build: '0.42'
|
|
||||||
+dynamic_config: 1
|
|
||||||
+generated_by: 'Module::Build version 0.4234, CPAN::Meta::Converter version 2.150010'
|
|
||||||
license: perl
|
|
||||||
meta-spec:
|
|
||||||
url: http://module-build.sourceforge.net/META-spec-v1.4.html
|
|
||||||
- version: 1.4
|
|
||||||
+ version: '1.4'
|
|
||||||
name: Net-SNMP
|
|
||||||
provides:
|
|
||||||
Net::SNMP:
|
|
||||||
@@ -59,21 +60,22 @@ provides:
|
|
||||||
file: lib/Net/SNMP/Transport/IPv6/UDP.pm
|
|
||||||
version: v3.0.0
|
|
||||||
recommends:
|
|
||||||
- Crypt::DES: 2.03
|
|
||||||
- Crypt::Rijndael: 1.02
|
|
||||||
- Digest::HMAC: 1.00
|
|
||||||
- Digest::MD5: 2.11
|
|
||||||
- Digest::SHA1: 1.02
|
|
||||||
- Socket6: 0.23
|
|
||||||
+ Crypt::DES: '2.03'
|
|
||||||
+ Crypt::Rijndael: '1.02'
|
|
||||||
+ Digest::HMAC: '1.00'
|
|
||||||
+ Digest::MD5: '2.11'
|
|
||||||
+ Digest::SHA1: '1.02'
|
|
||||||
requires:
|
|
||||||
- Carp: 0
|
|
||||||
- Errno: 0
|
|
||||||
- Exporter: 0
|
|
||||||
- IO::Socket: 0
|
|
||||||
- Math::BigInt: 0
|
|
||||||
- perl: 5.006
|
|
||||||
+ Carp: '0'
|
|
||||||
+ Errno: '0'
|
|
||||||
+ Exporter: '0'
|
|
||||||
+ IO::Socket: '0'
|
|
||||||
+ Math::BigInt: '0'
|
|
||||||
+ Socket: '2.000'
|
|
||||||
+ perl: '5.006'
|
|
||||||
resources:
|
|
||||||
CPANForum: http://www.cpanforum.com/dist/Net-SNMP
|
|
||||||
bugtracker: http://rt.cpan.org/Public/Dist/Display.html?Name=Net-SNMP
|
|
||||||
license: http://dev.perl.org/licenses/
|
|
||||||
version: v6.0.1
|
|
||||||
+x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
|
|
||||||
diff -Naur A/Makefile.PL B/Makefile.PL
|
|
||||||
index 4678c32..a15243b 100644
|
|
||||||
--- A/Makefile.PL
|
|
||||||
+++ B/Makefile.PL
|
|
||||||
@@ -42,6 +42,7 @@ WriteMakefile(
|
|
||||||
Digest::MD5 => '2.11', # SNMPv3
|
|
||||||
Digest::SHA1 => '1.02', # SNMPv3
|
|
||||||
Digest::HMAC => '1.00', # SNMPv3
|
|
||||||
+ Socket => '2.000',
|
|
||||||
},
|
|
||||||
dist => {
|
|
||||||
CI => 'ci -u -sRel -m\"Changes for $(VERSION)\"',
|
|
||||||
diff -Naur A/README B/README
|
|
||||||
--- A/README
|
|
||||||
+++ B/README
|
|
||||||
@@ -60,7 +60,7 @@ REQUIREMENTS
|
|
||||||
protocol, the non-core module Crypt::Rijndael is needed.
|
|
||||||
|
|
||||||
To use UDP/IPv6 or TCP/IPv6 as a Transport Domain, the non-core
|
|
||||||
- module Socket6 is needed.
|
|
||||||
+ module Socket is needed.
|
|
||||||
|
|
||||||
DOCUMENTATION
|
|
||||||
|
|
||||||
diff -Naur A/lib/Net/SNMP.pm B/lib/Net/SNMP.pm
|
|
||||||
--- A/lib/Net/SNMP.pm
|
|
||||||
+++ B/lib/Net/SNMP.pm
|
|
||||||
@@ -3561,7 +3561,7 @@ non-core module F<Crypt::Rijndael> is needed.
|
|
||||||
=item *
|
|
||||||
|
|
||||||
To use UDP/IPv6 or TCP/IPv6 as a Transport Domain, the non-core module
|
|
||||||
-F<Socket6> is needed.
|
|
||||||
+F<Socket> is needed.
|
|
||||||
|
|
||||||
=back
|
|
||||||
|
|
||||||
diff -Naur A/lib/Net/SNMP/Transport/IPv6.pm B/lib/Net/SNMP/Transport/IPv6.pm
|
|
||||||
--- A/lib/Net/SNMP/Transport/IPv6.pm 2010-09-10 02:02:45.000000000 +0200
|
|
||||||
+++ B/lib/Net/SNMP/Transport/IPv6.pm 2023-06-14 09:27:57.736399948 +0200
|
|
||||||
@@ -19,9 +19,9 @@
|
|
||||||
|
|
||||||
use Net::SNMP::Transport qw( DEBUG_INFO );
|
|
||||||
|
|
||||||
-use Socket6 0.23 qw(
|
|
||||||
- PF_INET6 AF_INET6 in6addr_any in6addr_loopback getaddrinfo
|
|
||||||
- pack_sockaddr_in6_all unpack_sockaddr_in6_all inet_pton inet_ntop
|
|
||||||
+use Socket qw(
|
|
||||||
+ PF_INET6 AF_INET6 IN6ADDR_ANY IN6ADDR_LOOPBACK getaddrinfo
|
|
||||||
+ pack_sockaddr_in6 unpack_sockaddr_in6 inet_pton inet_ntop
|
|
||||||
);
|
|
||||||
|
|
||||||
## Version of the Net::SNMP::Transport::IPv6 module
|
|
||||||
@@ -89,12 +89,12 @@
|
|
||||||
|
|
||||||
sub _addr_any
|
|
||||||
{
|
|
||||||
- return in6addr_any;
|
|
||||||
+ return IN6ADDR_ANY;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub _addr_loopback
|
|
||||||
{
|
|
||||||
- return in6addr_loopback;
|
|
||||||
+ return IN6ADDR_LOOPBACK;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub _hostname_resolve
|
|
||||||
@@ -117,23 +117,22 @@
|
|
||||||
|
|
||||||
# Resolve the address.
|
|
||||||
|
|
||||||
- my @info = getaddrinfo(($_[1] = $host), q{}, PF_INET6);
|
|
||||||
+ my ($err, @addrs) = getaddrinfo(($_[1] = $host), q{}, {'family' => PF_INET6});
|
|
||||||
|
|
||||||
- if (@info >= 5) {
|
|
||||||
+ if (! $err) {
|
|
||||||
if ($host =~ s/(.*)%.*$/$1/) { # <address>%<ifName>
|
|
||||||
$_[1] = $1;
|
|
||||||
}
|
|
||||||
- while (@info >= 5) {
|
|
||||||
- if ($info[0] == PF_INET6) {
|
|
||||||
- $nh->{flowinfo} = $this->_flowinfo($info[3]);
|
|
||||||
- $nh->{scope_id} ||= $this->_scope_id($info[3]);
|
|
||||||
- return $nh->{addr} = $this->_addr($info[3]);
|
|
||||||
+ while (my $addr = shift @addrs) {
|
|
||||||
+ if ($addr->{'family'} == PF_INET6) {
|
|
||||||
+ $nh->{flowinfo} = $this->_flowinfo($addr->{'addr'});
|
|
||||||
+ $nh->{scope_id} ||= $this->_scope_id($addr->{'addr'});
|
|
||||||
+ return $nh->{addr} = $this->_addr($addr->{'addr'});
|
|
||||||
}
|
|
||||||
- DEBUG_INFO('family = %d, sin = %s', $info[0], unpack 'H*', $info[3]);
|
|
||||||
- splice @info, 0, 5;
|
|
||||||
+ DEBUG_INFO('family = %d, sin = %s', $addr->{'family'}, unpack 'H*', $addr->{'addr'});
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
- DEBUG_INFO('getaddrinfo(): %s', $info[0]);
|
|
||||||
+ DEBUG_INFO('getaddrinfo(): %s', $err);
|
|
||||||
if ((my @host = split /:/, $host) == 2) { # <hostname>:<service>
|
|
||||||
$_[1] = sprintf '[%s]:%s', @host;
|
|
||||||
return $this->_hostname_resolve($_[1], $nh);
|
|
||||||
@@ -156,9 +155,9 @@
|
|
||||||
|
|
||||||
sub _name_pack
|
|
||||||
{
|
|
||||||
- return pack_sockaddr_in6_all(
|
|
||||||
- $_[1]->{port}, $_[1]->{flowinfo} || 0,
|
|
||||||
- $_[1]->{addr}, $_[1]->{scope_id} || 0
|
|
||||||
+ return pack_sockaddr_in6(
|
|
||||||
+ $_[1]->{port}, $_[1]->{addr},
|
|
||||||
+ $_[1]->{scope_id} || 0, $_[1]->{flowinfo} || 0
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -169,12 +168,12 @@
|
|
||||||
|
|
||||||
sub _addr
|
|
||||||
{
|
|
||||||
- return (unpack_sockaddr_in6_all($_[1]))[2];
|
|
||||||
+ return (unpack_sockaddr_in6($_[1]))[1];
|
|
||||||
}
|
|
||||||
|
|
||||||
sub _port
|
|
||||||
{
|
|
||||||
- return (unpack_sockaddr_in6_all($_[1]))[0];
|
|
||||||
+ return (unpack_sockaddr_in6($_[1]))[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
sub _taddress
|
|
||||||
@@ -193,12 +192,12 @@
|
|
||||||
|
|
||||||
sub _scope_id
|
|
||||||
{
|
|
||||||
- return (unpack_sockaddr_in6_all($_[1]))[3];
|
|
||||||
+ return (unpack_sockaddr_in6($_[1]))[2];
|
|
||||||
}
|
|
||||||
|
|
||||||
sub _flowinfo
|
|
||||||
{
|
|
||||||
- return (unpack_sockaddr_in6_all($_[1]))[1];
|
|
||||||
+ return (unpack_sockaddr_in6($_[1]))[3];
|
|
||||||
}
|
|
||||||
|
|
||||||
# ============================================================================
|
|
Loading…
Reference in new issue