Skip to content

Commit 751fc53

Browse files
authored
Merge pull request #66 from timlegge/dsa-sha1
Make sha1 and DSA optional
2 parents bd8a001 + 7fded42 commit 751fc53

15 files changed

+94
-33
lines changed

Makefile.PL

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ my %WriteMakefileArgs = (
2121
"Crypt::Digest::RIPEMD160" => 0,
2222
"Crypt::Mac::HMAC" => 0,
2323
"Crypt::OpenSSL::Bignum" => 0,
24-
"Crypt::OpenSSL::DSA" => "0.20",
2524
"Crypt::OpenSSL::X509" => 0,
2625
"Crypt::PK::RSA" => 0,
2726
"CryptX" => "0.036",
@@ -47,7 +46,7 @@ my %WriteMakefileArgs = (
4746
"Test::Lib" => 0,
4847
"Test::More" => 0
4948
},
50-
"VERSION" => "0.68",
49+
"VERSION" => "0.69",
5150
"test" => {
5251
"TESTS" => "t/*.t"
5352
}
@@ -60,7 +59,6 @@ my %FallbackPrereqs = (
6059
"Crypt::Digest::RIPEMD160" => 0,
6160
"Crypt::Mac::HMAC" => 0,
6261
"Crypt::OpenSSL::Bignum" => 0,
63-
"Crypt::OpenSSL::DSA" => "0.20",
6462
"Crypt::OpenSSL::Guess" => 0,
6563
"Crypt::OpenSSL::X509" => 0,
6664
"Crypt::PK::RSA" => 0,

README

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ NAME
33
Signatures
44

55
VERSION
6-
version 0.68
6+
version 0.69
77

88
SYNOPSIS
99
my $xml = '<foo ID="abc">123</foo>';
@@ -40,9 +40,9 @@ PREREQUISITES
4040

4141
* Crypt::OpenSSL::Bignum
4242

43-
* Crypt::OpenSSL::RSA
43+
* Crypt::PK::RSA
4444

45-
* Crypt::OpenSSL::DSA
45+
* Crypt::OpenSSL::DSA (Optional - required for DSA signatures)
4646

4747
* Crypt::PK::ECC
4848

@@ -304,7 +304,7 @@ AUTHOR
304304
Timothy Legge <timlegge@gmail.com>
305305

306306
COPYRIGHT AND LICENSE
307-
This software is copyright (c) 2025 by Byrne Reese, Chris Andrews and
307+
This software is copyright (c) 2026 by Byrne Reese, Chris Andrews and
308308
Others; in detail:
309309

310310
Copyright 2009 Byrne, Michael Hendricks
@@ -316,7 +316,7 @@ COPYRIGHT AND LICENSE
316316
2017 Mike Wisener, xmikew
317317
2019-2021 Timothy Legge
318318
2022-2023 Timothy Legge, Wesley Schwengle
319-
2025 Timothy Legge
319+
2025-2026 Timothy Legge
320320

321321
This is free software; you can redistribute it and/or modify it under
322322
the same terms as the Perl 5 programming language system itself.

cpanfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ requires "Class::Accessor" => "0";
55
requires "Crypt::Digest::RIPEMD160" => "0";
66
requires "Crypt::Mac::HMAC" => "0";
77
requires "Crypt::OpenSSL::Bignum" => "0";
8-
requires "Crypt::OpenSSL::DSA" => "0.20";
98
requires "Crypt::OpenSSL::X509" => "0";
109
requires "Crypt::PK::RSA" => "0";
1110
requires "CryptX" => "0.036";
@@ -20,6 +19,7 @@ requires "perl" => "5.008";
2019
requires "strict" => "0";
2120
requires "vars" => "0";
2221
requires "warnings" => "0";
22+
recommends "Crypt::OpenSSL::DSA" => "0.20";
2323

2424
on 'test' => sub {
2525
requires "Crypt::OpenSSL::Guess" => "0";

dist.ini

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,16 @@ contributor = Timothy Legge <timlegge@gmail.com>
2020

2121
[AutoPrereqs]
2222
skips = Crypt::PK::ECC
23+
skips = Crypt::OpenSSL::DSA
2324

2425
[Prereqs / RuntimeRequires]
2526
perl = 5.008
2627
Crypt::OpenSSL::Bignum = 0
27-
Crypt::OpenSSL::DSA = 0.20
2828
CryptX = 0.036
2929

30+
[Prereqs / RuntimeRecommends]
31+
Crypt::OpenSSL::DSA = 0.20
32+
3033
[PruneCruft]
3134
[ManifestSkip]
3235
[MetaYAML]

lib/XML/Sig.pm

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,9 @@ XML::Sig->mk_accessors(qw(key));
5656
5757
=item * L<Crypt::OpenSSL::Bignum>
5858
59-
=item * L<Crypt::OpenSSL::RSA>
59+
=item * L<Crypt::PK::RSA>
6060
61-
=item * L<Crypt::OpenSSL::DSA>
61+
=item * L<Crypt::OpenSSL::DSA> (Optional - required for DSA signatures)
6262
6363
=item * L<Crypt::PK::ECC>
6464

t/002_xmlsec.t

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,16 @@ my $xml = '<?xml version="1.0"?>'."\n".'<foo ID="XML-SIG_1">'."\n".' <bar>123
1010
my $sig = XML::Sig->new( { key => 't/rsa.private.key', cert => 't/rsa.cert.pem' } );
1111
my $signed = $sig->sign($xml);
1212
ok($signed, "XML is signed");
13-
my $sig2 = XML::Sig->new( { key => 't/dsa.private.key' } );
14-
my $result = $sig2->verify($signed);
15-
ok($result, "XML verified" );
13+
14+
SKIP: {
15+
eval {
16+
require Crypt::OpenSSL::DSA;
17+
};
18+
skip "Crypt::OpenSSL::DSA is not installed", 1 if ($@);
19+
my $sig2 = XML::Sig->new( { key => 't/dsa.private.key' } );
20+
my $result = $sig2->verify($signed);
21+
ok($result, "XML verified with DSA key" );
22+
}
1623

1724
SKIP: {
1825

t/008_sign_saml.t

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,11 @@ ok($ret, "RSA: Verifed Successfully");
2121
ok($sig->signer_cert);
2222

2323
# Test signing with a DSA key
24+
SKIP: {
25+
eval {
26+
require Crypt::OpenSSL::DSA;
27+
};
28+
skip "Crypt::OpenSSL::DSA not installed", 1 if ($@);
2429
foreach my $key ('t/dsa.private-2048.key', 't/dsa.private-3072.key', 't/dsa.private.key') {
2530

2631
my $dsasig = XML::Sig->new({ key => $key });
@@ -50,7 +55,6 @@ foreach my $key ('t/dsa.private-2048.key', 't/dsa.private-3072.key', 't/dsa.priv
5055

5156
}
5257
}
53-
5458
# Ensure xmlsec still verifies properly
5559
{
5660
# Test that XML::Sig can verify a xmlsec1 DSA signed xml
@@ -74,6 +78,7 @@ foreach my $key ('t/dsa.private-2048.key', 't/dsa.private-3072.key', 't/dsa.priv
7478
}
7579
}
7680

81+
}
7782
# Test that XML::Sig can verify a xmlsec1 RSA signed xml
7883
$xml = slurp_file('t/signed/saml_request-xmlsec1-rsa-signed.xml');
7984
my $xmlsec1_rsasig = XML::Sig->new({ x509 => 1, cert => 't/rsa.cert.pem' });

t/011-sign_multiple_sections.t

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,12 @@ SKIP: {
4444
);
4545
}
4646

47+
48+
SKIP: {
49+
eval {
50+
require Crypt::OpenSSL::DSA;
51+
};
52+
skip "Crypt::OpenSSL::DSA not installed", 3 if ($@);
4753
# Test signing with a DSA key
4854
my $dsasig = XML::Sig->new({ key => 't/dsa.private.key' });
4955
my $dsa_signed_xml = $dsasig->sign($xml);
@@ -71,7 +77,7 @@ SKIP: {
7177
)
7278
);
7379
}
74-
80+
}
7581
# Test that XML::Sig can verify an xmlsec1 RSA signed xml
7682
$xml = slurp_file('t/signed/xmlsec1-signed-rsa-multiple.xml');
7783
my $xmlsec1_rsasig = XML::Sig->new({ x509 => 1, cert => 't/rsa.cert.pem' });

t/016-SigningAlgorithms.t

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,15 @@ use File::Which;
44

55
my $xmlsec = get_xmlsec_features;
66

7-
my @hash_alg = qw/sha1 sha224 sha256 sha384 sha512/;
8-
7+
my @hash_alg = qw/sha224 sha256 sha384 sha512/;
8+
push @hash_alg, 'sha1' if $xmlsec->{sha1_support};
9+
10+
SKIP: {
11+
eval {
12+
require Crypt::OpenSSL::DSA;
13+
};
14+
my $algs = scalar @hash_alg;
15+
skip "Crypt::OpenSSL::DSA not installed", $algs * 4 if ($@);
916
foreach my $alg (@hash_alg) {
1017

1118
my $sig = XML::Sig->new(
@@ -35,7 +42,7 @@ foreach my $alg (@hash_alg) {
3542
$signed, qw(--verify --id-attr:ID "foo"));
3643
}
3744
}
38-
45+
}
3946
foreach my $alg (@hash_alg) {
4047
my $sig = XML::Sig->new(
4148
{

t/017-DigestAlgorithms.t

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,15 @@ use Test::XML::Sig;
44
my $xmlsec = get_xmlsec_features;
55
my $openssl = get_openssl_features;
66

7-
my @hash_alg = qw/sha1 sha224 sha256 sha384 sha512/;
7+
my @hash_alg = qw/sha224 sha256 sha384 sha512/;
88
push @hash_alg, 'ripemd160' if $xmlsec->{ripemd160};
9+
push @hash_alg, 'sha1' if $xmlsec->{sha1_support};
10+
SKIP: {
11+
eval {
12+
require Crypt::OpenSSL::DSA;
13+
};
14+
my $algs = scalar @hash_alg;
15+
skip "Crypt::OpenSSL::DSA not installed", 4 * $algs if ($@);
916
foreach my $alg (@hash_alg) {
1017
my $sig = XML::Sig->new(
1118
{
@@ -34,7 +41,7 @@ foreach my $alg (@hash_alg) {
3441
$signed, qw(--verify --id-attr:ID "foo"));
3542
}
3643
}
37-
44+
}
3845
foreach my $alg (@hash_alg) {
3946
my $sig = XML::Sig->new(
4047
{

0 commit comments

Comments
 (0)