Compare commits
No commits in common. 'epel9' and 'c10-beta' have entirely different histories.
@ -1,2 +1 @@
|
|||||||
Net-SNMP-5.2.0.tar.gz
|
SOURCES/Net-SNMP-v6.0.1.tar.gz
|
||||||
/Net-SNMP-v6.0.1.tar.gz
|
|
||||||
|
@ -0,0 +1 @@
|
|||||||
|
492073bcf5206b56783e07c0603ff3b1f12707fa SOURCES/Net-SNMP-v6.0.1.tar.gz
|
@ -0,0 +1,551 @@
|
|||||||
|
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
|
||||||
|
|
@ -0,0 +1,127 @@
|
|||||||
|
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
|
||||||
|
|
@ -0,0 +1,93 @@
|
|||||||
|
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
|
||||||
|
|
@ -0,0 +1,355 @@
|
|||||||
|
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
|
||||||
|
|
@ -0,0 +1,220 @@
|
|||||||
|
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