xmldsig 0.4.0 → 0.4.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +3 -0
- data/lib/xmldsig/reference.rb +3 -1
- data/lib/xmldsig/signature.rb +4 -0
- data/lib/xmldsig/version.rb +1 -1
- data/spec/fixtures/unsigned-sha1.xml +21 -0
- data/spec/fixtures/unsigned-sha256.xml +21 -0
- data/spec/fixtures/unsigned-sha384.xml +21 -0
- data/spec/fixtures/unsigned-sha512.xml +21 -0
- data/spec/lib/xmldsig/reference_spec.rb +18 -0
- data/spec/lib/xmldsig/signature_spec.rb +20 -0
- metadata +11 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 23aefdcfb75c3ff59055a9751c19d5872f16819a
|
4
|
+
data.tar.gz: 17ec48f80925f06c21759cd7c21407531d51811b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fe51378403b39e0c55f729304816bba9b68108e98c4fa9d5fc7415ecf4d6a6860b58626cfb2c96c6f489b584d16859d0d2ec1a98ba6aaa3c25a3d35d25c6b47f
|
7
|
+
data.tar.gz: bef5d4bebd40e3abcc5023f7f4e622d3d0a1a0cf9221e99212f9bd7f7cc5e4c9a09e06e62a5b18f638438d847e2b7351836e72c6ea81b24426acaa28af6733cc
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
v0.4.1 22-03-2015
|
4
|
+
- Added support for SHA256, SHA384 and SHA512
|
5
|
+
|
3
6
|
v0.4.0 20-11-2015
|
4
7
|
- Breaking change: Signing now leaves previously signed signatures in tact. Use Xmldsig::SignedDocument.new(unsigned_xml, force: true) to resign all signatures
|
5
8
|
|
data/lib/xmldsig/reference.rb
CHANGED
@@ -58,8 +58,10 @@ module Xmldsig
|
|
58
58
|
def digest_method
|
59
59
|
algorithm = reference.at_xpath("descendant::ds:DigestMethod", NAMESPACES).get_attribute("Algorithm")
|
60
60
|
case algorithm
|
61
|
+
when "http://www.w3.org/2001/04/xmlenc#sha512"
|
62
|
+
Digest::SHA512
|
61
63
|
when "http://www.w3.org/2001/04/xmlenc#sha256"
|
62
|
-
Digest::
|
64
|
+
Digest::SHA256
|
63
65
|
when "http://www.w3.org/2000/09/xmldsig#sha1"
|
64
66
|
Digest::SHA1
|
65
67
|
end
|
data/lib/xmldsig/signature.rb
CHANGED
@@ -72,6 +72,10 @@ module Xmldsig
|
|
72
72
|
def signature_method
|
73
73
|
algorithm = signature_algorithm && signature_algorithm =~ /sha(.*?)$/i && $1.to_i
|
74
74
|
case algorithm
|
75
|
+
when 512
|
76
|
+
OpenSSL::Digest::SHA512
|
77
|
+
when 384
|
78
|
+
OpenSSL::Digest::SHA384
|
75
79
|
when 256 then
|
76
80
|
OpenSSL::Digest::SHA256
|
77
81
|
else
|
data/lib/xmldsig/version.rb
CHANGED
@@ -0,0 +1,21 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<foo:Foo ID="foo" xmlns:foo="http://example.com/foo#" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#">
|
3
|
+
<foo:Bar>bar</foo:Bar>
|
4
|
+
<ds:Signature>
|
5
|
+
<ds:SignedInfo>
|
6
|
+
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
|
7
|
+
<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
|
8
|
+
<ds:Reference URI="#foo">
|
9
|
+
<ds:Transforms>
|
10
|
+
<ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
|
11
|
+
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
|
12
|
+
<ec:InclusiveNamespaces PrefixList="foo"/>
|
13
|
+
</ds:Transform>
|
14
|
+
</ds:Transforms>
|
15
|
+
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
|
16
|
+
<ds:DigestValue></ds:DigestValue>
|
17
|
+
</ds:Reference>
|
18
|
+
</ds:SignedInfo>
|
19
|
+
<ds:SignatureValue></ds:SignatureValue>
|
20
|
+
</ds:Signature>
|
21
|
+
</foo:Foo>
|
@@ -0,0 +1,21 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<foo:Foo ID="foo" xmlns:foo="http://example.com/foo#" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#">
|
3
|
+
<foo:Bar>bar</foo:Bar>
|
4
|
+
<ds:Signature>
|
5
|
+
<ds:SignedInfo>
|
6
|
+
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
|
7
|
+
<ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
|
8
|
+
<ds:Reference URI="#foo">
|
9
|
+
<ds:Transforms>
|
10
|
+
<ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
|
11
|
+
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
|
12
|
+
<ec:InclusiveNamespaces PrefixList="foo"/>
|
13
|
+
</ds:Transform>
|
14
|
+
</ds:Transforms>
|
15
|
+
<ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
|
16
|
+
<ds:DigestValue></ds:DigestValue>
|
17
|
+
</ds:Reference>
|
18
|
+
</ds:SignedInfo>
|
19
|
+
<ds:SignatureValue></ds:SignatureValue>
|
20
|
+
</ds:Signature>
|
21
|
+
</foo:Foo>
|
@@ -0,0 +1,21 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<foo:Foo ID="foo" xmlns:foo="http://example.com/foo#" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#">
|
3
|
+
<foo:Bar>bar</foo:Bar>
|
4
|
+
<ds:Signature>
|
5
|
+
<ds:SignedInfo>
|
6
|
+
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
|
7
|
+
<ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha384"/>
|
8
|
+
<ds:Reference URI="#foo">
|
9
|
+
<ds:Transforms>
|
10
|
+
<ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
|
11
|
+
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
|
12
|
+
<ec:InclusiveNamespaces PrefixList="foo"/>
|
13
|
+
</ds:Transform>
|
14
|
+
</ds:Transforms>
|
15
|
+
<ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512"/>
|
16
|
+
<ds:DigestValue></ds:DigestValue>
|
17
|
+
</ds:Reference>
|
18
|
+
</ds:SignedInfo>
|
19
|
+
<ds:SignatureValue></ds:SignatureValue>
|
20
|
+
</ds:Signature>
|
21
|
+
</foo:Foo>
|
@@ -0,0 +1,21 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<foo:Foo ID="foo" xmlns:foo="http://example.com/foo#" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#">
|
3
|
+
<foo:Bar>bar</foo:Bar>
|
4
|
+
<ds:Signature>
|
5
|
+
<ds:SignedInfo>
|
6
|
+
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
|
7
|
+
<ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha512"/>
|
8
|
+
<ds:Reference URI="#foo">
|
9
|
+
<ds:Transforms>
|
10
|
+
<ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
|
11
|
+
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
|
12
|
+
<ec:InclusiveNamespaces PrefixList="foo"/>
|
13
|
+
</ds:Transform>
|
14
|
+
</ds:Transforms>
|
15
|
+
<ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512"/>
|
16
|
+
<ds:DigestValue></ds:DigestValue>
|
17
|
+
</ds:Reference>
|
18
|
+
</ds:SignedInfo>
|
19
|
+
<ds:SignatureValue></ds:SignatureValue>
|
20
|
+
</ds:Signature>
|
21
|
+
</foo:Foo>
|
@@ -82,4 +82,22 @@ describe Xmldsig::Reference do
|
|
82
82
|
reference.reference_uri.should == "#foo"
|
83
83
|
end
|
84
84
|
end
|
85
|
+
|
86
|
+
["sha1", "sha256", "sha512"].each do |algorithm|
|
87
|
+
describe "digest method #{algorithm}" do
|
88
|
+
let(:document) { Nokogiri::XML::Document.parse File.read("spec/fixtures/unsigned-#{algorithm}.xml") }
|
89
|
+
let(:reference) { Xmldsig::Reference.new(document.at_xpath('//ds:Reference', Xmldsig::NAMESPACES)) }
|
90
|
+
|
91
|
+
it "uses the correct digest algorithm" do
|
92
|
+
case algorithm
|
93
|
+
when "sha512"
|
94
|
+
reference.digest_method.should == Digest::SHA512
|
95
|
+
when "sha256"
|
96
|
+
reference.digest_method.should == Digest::SHA256
|
97
|
+
when "sha1"
|
98
|
+
reference.digest_method.should == Digest::SHA1
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
85
103
|
end
|
@@ -97,4 +97,24 @@ describe Xmldsig::Signature do
|
|
97
97
|
signature.errors.should be_empty
|
98
98
|
end
|
99
99
|
end
|
100
|
+
|
101
|
+
["sha1", "sha256", "sha384", "sha512"].each do |algorithm|
|
102
|
+
describe "sign method #{algorithm}" do
|
103
|
+
let(:document) { Nokogiri::XML::Document.parse File.read("spec/fixtures/unsigned-#{algorithm}.xml") }
|
104
|
+
let(:signature_node) { document.at_xpath("//ds:Signature", Xmldsig::NAMESPACES) }
|
105
|
+
let(:signature) { Xmldsig::Signature.new(signature_node) }
|
106
|
+
|
107
|
+
it "uses the correct signature algorithm" do
|
108
|
+
signature.sign do |data, signature_algorithm|
|
109
|
+
case algorithm
|
110
|
+
when "sha1"
|
111
|
+
signature_algorithm.should == "http://www.w3.org/2000/09/xmldsig#rsa-#{algorithm}"
|
112
|
+
else
|
113
|
+
signature_algorithm.should == "http://www.w3.org/2001/04/xmldsig-more#rsa-#{algorithm}"
|
114
|
+
end
|
115
|
+
private_key.sign(OpenSSL::Digest.new(algorithm).new, data)
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
100
120
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: xmldsig
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- benoist
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-03-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nokogiri
|
@@ -64,6 +64,10 @@ files:
|
|
64
64
|
- spec/fixtures/signed_custom_attribute_id.xml
|
65
65
|
- spec/fixtures/signed_xml-exc-c14n#with_comments.xml
|
66
66
|
- spec/fixtures/unsigned-malicious.xml
|
67
|
+
- spec/fixtures/unsigned-sha1.xml
|
68
|
+
- spec/fixtures/unsigned-sha256.xml
|
69
|
+
- spec/fixtures/unsigned-sha384.xml
|
70
|
+
- spec/fixtures/unsigned-sha512.xml
|
67
71
|
- spec/fixtures/unsigned.xml
|
68
72
|
- spec/fixtures/unsigned/canonicalizer_1_0.xml
|
69
73
|
- spec/fixtures/unsigned/canonicalizer_1_1.xml
|
@@ -107,7 +111,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
107
111
|
version: '0'
|
108
112
|
requirements: []
|
109
113
|
rubyforge_project:
|
110
|
-
rubygems_version: 2.
|
114
|
+
rubygems_version: 2.5.1
|
111
115
|
signing_key:
|
112
116
|
specification_version: 4
|
113
117
|
summary: This gem is a (partial) implementation of the XMLDsig specification (http://www.w3.org/TR/xmldsig-core)
|
@@ -124,6 +128,10 @@ test_files:
|
|
124
128
|
- spec/fixtures/signed_custom_attribute_id.xml
|
125
129
|
- spec/fixtures/signed_xml-exc-c14n#with_comments.xml
|
126
130
|
- spec/fixtures/unsigned-malicious.xml
|
131
|
+
- spec/fixtures/unsigned-sha1.xml
|
132
|
+
- spec/fixtures/unsigned-sha256.xml
|
133
|
+
- spec/fixtures/unsigned-sha384.xml
|
134
|
+
- spec/fixtures/unsigned-sha512.xml
|
127
135
|
- spec/fixtures/unsigned.xml
|
128
136
|
- spec/fixtures/unsigned/canonicalizer_1_0.xml
|
129
137
|
- spec/fixtures/unsigned/canonicalizer_1_1.xml
|