signer 1.1.1 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ YWY1OWFhM2YzMDYxMzBiNTE3MTVkNDZiYTg3NDQ4MmM3MzcyMzdhMg==
5
+ data.tar.gz: !binary |-
6
+ NDI0MWQxNWZkYWI4NmE3YmQ2NzNlMTNiM2Q0OWY5Mzk5M2QyZGU5Mw==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ ZDE0MDRmMGRiMWE4ZjQ5ODUxMjc2M2QwNjMxMTg0NzRlMzNiMGM1YTNmOTk3
10
+ YzQ1Y2YyMmRmZGI2MThlM2Q5ODk2NjJiOTc0NDBkYjE2ZWZkYzk4MDRhZTc1
11
+ OTdhODFhZTU4ZjkxYTA4ZGNlZjIwZDA5OWRjZDA5Nzc1ZTdmMWU=
12
+ data.tar.gz: !binary |-
13
+ YzUwNDQ5MzljOTA1ZThlZTliMTNmZjljYTJlYmFjZDRhMDk1YWMzZDJjMTNl
14
+ OTY1YmFmMzNkMzNmNWIwNTg2YWY2Njk1ZjEwMGMzYTVjZGRlM2U5ZWE0YWYx
15
+ Mzc1MzE3MTI1YjQ2MzEzYWQ1OWE3MGIyMDU5YTI5MzgzMTlmM2U=
data/CHANGELOG.md ADDED
@@ -0,0 +1,15 @@
1
+ ## 1.2.0 (2014-05-06)
2
+
3
+ - Id and attribute namespace preserving when digesting the nodes (#1, @Envek)
4
+
5
+ ## 1.1.1 (2013-04-03)
6
+
7
+ - Allow to sign using enveloped-signature
8
+
9
+ ## 1.1.0 (2012-06-21)
10
+
11
+ - Allow to sign XML documents without SOAP
12
+
13
+ ## 1.0.0 (2012-05-03)
14
+
15
+ - Allow to sign SOAP documents
data/README.md CHANGED
@@ -199,3 +199,12 @@ Output:
199
199
  </s:Body>
200
200
  </s:Envelope>
201
201
  ```
202
+
203
+ ## Miscellaneous
204
+
205
+ If you need to digest a `BinarySecurityToken` tag, you need to construct it yourself **before** signing.
206
+
207
+ ```ruby
208
+ signer.digest!(signer.binary_security_token_node) # Constructing tag and digesting it
209
+ signer.sign! # No need to pass a :security_token option, as we already constructed and inserted this node
210
+ ```
data/lib/signer.rb CHANGED
@@ -9,6 +9,8 @@ class Signer
9
9
  attr_accessor :document, :cert, :private_key
10
10
  attr_writer :security_node, :security_token_id
11
11
 
12
+ WSU_NAMESPACE = 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd'
13
+
12
14
  def initialize(document)
13
15
  self.document = Nokogiri::XML(document.to_s, &:noblanks)
14
16
  end
@@ -75,11 +77,12 @@ class Signer
75
77
  node = document.xpath("//o:BinarySecurityToken", "o" => "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd").first
76
78
  unless node
77
79
  node = Nokogiri::XML::Node.new('BinarySecurityToken', document)
78
- node['u:Id'] = security_token_id
79
80
  node['ValueType'] = 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3'
80
81
  node['EncodingType'] = 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary'
81
82
  node.content = Base64.encode64(cert.to_der).gsub("\n", '')
82
83
  signature_node.add_previous_sibling(node)
84
+ wsu_ns = namespace_prefix(node, WSU_NAMESPACE, 'wsu')
85
+ node["#{wsu_ns}:Id"] = security_token_id
83
86
  key_info_node = Nokogiri::XML::Node.new('KeyInfo', document)
84
87
  security_token_reference_node = Nokogiri::XML::Node.new('o:SecurityTokenReference', document)
85
88
  key_info_node.add_child(security_token_reference_node)
@@ -135,13 +138,18 @@ class Signer
135
138
  # <DigestValue>aeqXriJuUCk4tPNPAGDXGqHj6ao=</DigestValue>
136
139
  # </Reference>
137
140
  def digest!(target_node, options = {})
138
- id = options[:id] || "_#{Digest::SHA1.hexdigest(target_node.to_s)}"
139
- target_node['u:Id'] = id if id.size > 0
141
+ wsu_ns = namespace_prefix(target_node, WSU_NAMESPACE)
142
+ current_id = target_node["#{wsu_ns}:Id"] if wsu_ns
143
+ id = options[:id] || current_id || "_#{Digest::SHA1.hexdigest(target_node.to_s)}"
144
+ if id.to_s.size > 0
145
+ wsu_ns ||= namespace_prefix(target_node, WSU_NAMESPACE, 'wsu')
146
+ target_node["#{wsu_ns}:Id"] = id.to_s
147
+ end
140
148
  target_canon = canonicalize(target_node)
141
149
  target_digest = Base64.encode64(OpenSSL::Digest::SHA1.digest(target_canon)).strip
142
150
 
143
151
  reference_node = Nokogiri::XML::Node.new('Reference', document)
144
- reference_node['URI'] = id.size > 0 ? "##{id}" : ""
152
+ reference_node['URI'] = id.to_s.size > 0 ? "##{id}" : ""
145
153
  signed_info_node.add_child(reference_node)
146
154
 
147
155
  transforms_node = Nokogiri::XML::Node.new('Transforms', document)
@@ -185,4 +193,24 @@ class Signer
185
193
  signed_info_node.add_next_sibling(signature_value_node)
186
194
  self
187
195
  end
196
+
197
+ protected
198
+
199
+ ##
200
+ # Searches in namespaces, defined on +target_node+ or its ancestors,
201
+ # for the +namespace+ with given URI and returns its prefix.
202
+ #
203
+ # If there is no such namespace and +desired_prefix+ is specified,
204
+ # adds such a namespace to +target_node+ with +desired_prefix+
205
+
206
+ def namespace_prefix(target_node, namespace, desired_prefix = nil)
207
+ ns = target_node.namespaces.key(namespace)
208
+ if ns
209
+ ns.match(/(?:xmlns:)?(.*)/) && $1
210
+ elsif desired_prefix
211
+ target_node.add_namespace_definition(desired_prefix, namespace)
212
+ desired_prefix
213
+ end
214
+ end
215
+
188
216
  end
@@ -1,3 +1,3 @@
1
1
  class Signer
2
- VERSION = "1.1.1"
2
+ VERSION = "1.2.0"
3
3
  end
@@ -1,5 +1,5 @@
1
1
  <?xml version="1.0"?>
2
- <s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
2
+ <s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing" xmlns:wsurandom="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
3
3
  <s:Header>
4
4
  <a:Action s:mustUnderstand="1">http://tempuri.org/IDocumentService/SearchDocuments</a:Action>
5
5
  <a:MessageID>urn:uuid:30db5d4f-ab84-46be-907c-be690a92979b</a:MessageID>
@@ -8,10 +8,10 @@
8
8
  </a:ReplyTo>
9
9
  <To xmlns="http://www.w3.org/2005/08/addressing" xmlns:a="http://www.w3.org/2003/05/soap-envelope" a:mustUnderstand="1">http://tempuri.org/PublicServices/Test/1.0.12/PublicServices/DocumentService.svc</To>
10
10
  <o:Security xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" s:mustUnderstand="1">
11
- <u:Timestamp>
12
- <u:Created>2012-05-02T18:17:14.467Z</u:Created>
13
- <u:Expires>2012-05-02T18:22:14.467Z</u:Expires>
14
- </u:Timestamp>
11
+ <wsurandom:Timestamp>
12
+ <wsurandom:Created>2012-05-02T18:17:14.467Z</wsurandom:Created>
13
+ <wsurandom:Expires>2012-05-02T18:22:14.467Z</wsurandom:Expires>
14
+ </wsurandom:Timestamp>
15
15
  </o:Security>
16
16
  </s:Header>
17
17
  <s:Body>
@@ -1,38 +1,45 @@
1
1
  <?xml version="1.0"?>
2
- <s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
2
+ <s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing" xmlns:wsurandom="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
3
3
  <s:Header>
4
4
  <a:Action s:mustUnderstand="1">http://tempuri.org/IDocumentService/SearchDocuments</a:Action>
5
5
  <a:MessageID>urn:uuid:30db5d4f-ab84-46be-907c-be690a92979b</a:MessageID>
6
6
  <a:ReplyTo>
7
7
  <a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>
8
8
  </a:ReplyTo>
9
- <To xmlns="http://www.w3.org/2005/08/addressing" xmlns:a="http://www.w3.org/2003/05/soap-envelope" a:mustUnderstand="1" u:Id="_7e75a8ded22253b163ca76a40b6cc0c670ed0c33">http://tempuri.org/PublicServices/Test/1.0.12/PublicServices/DocumentService.svc</To>
9
+ <To xmlns="http://www.w3.org/2005/08/addressing" xmlns:a="http://www.w3.org/2003/05/soap-envelope" a:mustUnderstand="1" wsurandom:Id="_7e75a8ded22253b163ca76a40b6cc0c670ed0c33">http://tempuri.org/PublicServices/Test/1.0.12/PublicServices/DocumentService.svc</To>
10
10
  <o:Security xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" s:mustUnderstand="1">
11
- <u:Timestamp u:Id="_23dd13bb673d95ac7c29f0bebcca8268d39675b1">
12
- <u:Created>2012-05-02T18:17:14.467Z</u:Created>
13
- <u:Expires>2012-05-02T18:22:14.467Z</u:Expires>
14
- </u:Timestamp>
15
- <o:BinarySecurityToken u:Id="uuid-639b8970-7644-4f9e-9bc4-9c2e367808fc-1" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">MIICsDCCAhmgAwIBAgIJAOUHvh4oho0tMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwHhcNMTIwNTAzMTMxODIyWhcNMTMwNTAzMTMxODIyWjBFMQswCQYDVQQGEwJBVTETMBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCvK5hMPv/R5IFmwWyJOyEaFUrF/ZsmN+Gip8hvR6rLP3YPNx9iFYvPcZllFmuVwyaz7YT2N5BsqTwLdyi5v4HY4fUtuz0p8jIPoSd6dfDvcnSpf4QLTOgOaL3ciPEbgDHH2tnIksukoWzqCYva+qFZ74NFl19swXotW9fA4Jzs4QIDAQABo4GnMIGkMB0GA1UdDgQWBBRU1WEHDnP8Hr7ZulxrSzEwOcYpMzB1BgNVHSMEbjBsgBRU1WEHDnP8Hr7ZulxrSzEwOcYpM6FJpEcwRTELMAkGA1UEBhMCQVUxEzARBgNVBAgTClNvbWUtU3RhdGUxITAfBgNVBAoTGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZIIJAOUHvh4oho0tMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEASY/9SAOK57q9mGnNJJeyDbmyGrAHSJTod646xTHYkMvhUqwHyk9PTr5bdfmswpmyVn+AQ43U2tU5vnpTBmKpHWD2+HSHgGa92mMLrfBOd8EBZ329NL3N2HDPIaHr4NPGyhNrSK3QVOnAq2D0jlyrGYJlLli1NxHiBz7FCEJaVI8=</o:BinarySecurityToken>
11
+ <wsurandom:Timestamp wsurandom:Id="_3e2f6b0b9430b7f2b69712172db02293291f5322">
12
+ <wsurandom:Created>2012-05-02T18:17:14.467Z</wsurandom:Created>
13
+ <wsurandom:Expires>2012-05-02T18:22:14.467Z</wsurandom:Expires>
14
+ </wsurandom:Timestamp>
15
+ <o:BinarySecurityToken ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" wsurandom:Id="uuid-639b8970-7644-4f9e-9bc4-9c2e367808fc-1">MIICsDCCAhmgAwIBAgIJAOUHvh4oho0tMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwHhcNMTIwNTAzMTMxODIyWhcNMTMwNTAzMTMxODIyWjBFMQswCQYDVQQGEwJBVTETMBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCvK5hMPv/R5IFmwWyJOyEaFUrF/ZsmN+Gip8hvR6rLP3YPNx9iFYvPcZllFmuVwyaz7YT2N5BsqTwLdyi5v4HY4fUtuz0p8jIPoSd6dfDvcnSpf4QLTOgOaL3ciPEbgDHH2tnIksukoWzqCYva+qFZ74NFl19swXotW9fA4Jzs4QIDAQABo4GnMIGkMB0GA1UdDgQWBBRU1WEHDnP8Hr7ZulxrSzEwOcYpMzB1BgNVHSMEbjBsgBRU1WEHDnP8Hr7ZulxrSzEwOcYpM6FJpEcwRTELMAkGA1UEBhMCQVUxEzARBgNVBAgTClNvbWUtU3RhdGUxITAfBgNVBAoTGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZIIJAOUHvh4oho0tMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEASY/9SAOK57q9mGnNJJeyDbmyGrAHSJTod646xTHYkMvhUqwHyk9PTr5bdfmswpmyVn+AQ43U2tU5vnpTBmKpHWD2+HSHgGa92mMLrfBOd8EBZ329NL3N2HDPIaHr4NPGyhNrSK3QVOnAq2D0jlyrGYJlLli1NxHiBz7FCEJaVI8=</o:BinarySecurityToken>
16
16
  <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
17
17
  <SignedInfo>
18
18
  <CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
19
19
  <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
20
- <Reference URI="#_23dd13bb673d95ac7c29f0bebcca8268d39675b1">
20
+ <Reference URI="#_3e2f6b0b9430b7f2b69712172db02293291f5322">
21
21
  <Transforms>
22
22
  <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
23
23
  </Transforms>
24
24
  <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
25
- <DigestValue>Oz29YgZk14+nchoqv9zGzhJcDUo=</DigestValue>
25
+ <DigestValue>hUP34KxVar1UE5I87U1kH8MzV+o=</DigestValue>
26
26
  </Reference>
27
27
  <Reference URI="#_7e75a8ded22253b163ca76a40b6cc0c670ed0c33">
28
28
  <Transforms>
29
29
  <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
30
30
  </Transforms>
31
31
  <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
32
- <DigestValue>leV/RNYhwuCuD7/DBzn3IgQzUxI=</DigestValue>
32
+ <DigestValue>/rAVEm0SjaC0ckFViZd+A0hYe+U=</DigestValue>
33
+ </Reference>
34
+ <Reference URI="#uuid-639b8970-7644-4f9e-9bc4-9c2e367808fc-1">
35
+ <Transforms>
36
+ <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
37
+ </Transforms>
38
+ <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
39
+ <DigestValue>3UQ13wcqsZOqwueVE7DfSmTGQ9c=</DigestValue>
33
40
  </Reference>
34
41
  </SignedInfo>
35
- <SignatureValue>en7YYAIn90ofH08aF917jNngMuse+vK6bihF0v6UsXFnGGMOflWfRTZ6mFmC2HwLmb2lSrhZ3eth3cs2fCBlEr/K2ZDMQfJo6CPxmbzfX/fxR/isCTDz+HIJd13J0HK4n+CzkndwplkCmT8SQlduUruUFUUmlQiiZQ7nryR+XyM=</SignatureValue>
42
+ <SignatureValue>BB0CHnd4qA8AVSj/xXrfK29Xa1aCmA9K+X4Bkvc2IsLOmfprXTrSHSb0maEKkFHFCLKH+DEIgCWtDC4rkyiXR5i8iKKZGggoMfD/2Wmw3TcARiQ2pyGrZA04NXTPWHo17nYwBQDhfhafeIKE4zFRXltyW/I/RRO678E3Fd1Ma0Y=</SignatureValue>
36
43
  <KeyInfo>
37
44
  <o:SecurityTokenReference>
38
45
  <o:Reference ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" URI="#uuid-639b8970-7644-4f9e-9bc4-9c2e367808fc-1"/>
data/spec/signer_spec.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  require "spec_helper"
2
2
 
3
3
  describe Signer do
4
- it "should digest and sign SOAP XML with security node and binary token" do
4
+ it "should digest and sign SOAP XML with security node and digested binary token" do
5
5
  input_xml_file = File.join(File.dirname(__FILE__), 'fixtures', 'input_1.xml')
6
6
  cert_file = File.join(File.dirname(__FILE__), 'fixtures', 'cert.pem')
7
7
  private_key_file = File.join(File.dirname(__FILE__), 'fixtures', 'key.pem')
@@ -18,7 +18,9 @@ describe Signer do
18
18
  signer.digest!(node)
19
19
  end
20
20
 
21
- signer.sign!(:security_token => true)
21
+ signer.digest!(signer.binary_security_token_node)
22
+
23
+ signer.sign!
22
24
 
23
25
  # File.open(File.join(File.dirname(__FILE__), 'fixtures', 'output_1.xml'), "w") do |f|
24
26
  # f.write signer.document.to_s
@@ -38,7 +40,7 @@ describe Signer do
38
40
  signer.private_key = OpenSSL::PKey::RSA.new(File.read(private_key_file), "test")
39
41
  signer.security_node = signer.document.root
40
42
  signer.security_token_id = ""
41
- signer.digest!(signer.document, :id => "", :enveloped => true)
43
+ signer.digest!(signer.document.root, :id => "", :enveloped => true)
42
44
  signer.sign!(:issuer_serial => true)
43
45
 
44
46
  # File.open(File.join(File.dirname(__FILE__), 'fixtures', 'output_2.xml'), "w") do |f|
metadata CHANGED
@@ -1,59 +1,52 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: signer
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
5
- prerelease:
4
+ version: 1.2.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Edgars Beigarts
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-04-03 00:00:00.000000000 Z
11
+ date: 2014-05-06 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
- type: :development
16
- name: rake
17
- requirement: !ruby/object:Gem::Requirement
18
- none: false
14
+ version_requirements: !ruby/object:Gem::Requirement
19
15
  requirements:
20
16
  - - ! '>='
21
17
  - !ruby/object:Gem::Version
22
18
  version: '0'
23
- version_requirements: !ruby/object:Gem::Requirement
24
- none: false
19
+ name: rake
20
+ type: :development
21
+ requirement: !ruby/object:Gem::Requirement
25
22
  requirements:
26
23
  - - ! '>='
27
24
  - !ruby/object:Gem::Version
28
25
  version: '0'
29
26
  prerelease: false
30
27
  - !ruby/object:Gem::Dependency
31
- type: :development
32
- name: rspec
33
- requirement: !ruby/object:Gem::Requirement
34
- none: false
28
+ version_requirements: !ruby/object:Gem::Requirement
35
29
  requirements:
36
30
  - - ! '>='
37
31
  - !ruby/object:Gem::Version
38
32
  version: '0'
39
- version_requirements: !ruby/object:Gem::Requirement
40
- none: false
33
+ name: rspec
34
+ type: :development
35
+ requirement: !ruby/object:Gem::Requirement
41
36
  requirements:
42
37
  - - ! '>='
43
38
  - !ruby/object:Gem::Version
44
39
  version: '0'
45
40
  prerelease: false
46
41
  - !ruby/object:Gem::Dependency
47
- type: :runtime
48
- name: nokogiri
49
- requirement: !ruby/object:Gem::Requirement
50
- none: false
42
+ version_requirements: !ruby/object:Gem::Requirement
51
43
  requirements:
52
44
  - - ! '>='
53
45
  - !ruby/object:Gem::Version
54
46
  version: 1.5.1
55
- version_requirements: !ruby/object:Gem::Requirement
56
- none: false
47
+ name: nokogiri
48
+ type: :runtime
49
+ requirement: !ruby/object:Gem::Requirement
57
50
  requirements:
58
51
  - - ! '>='
59
52
  - !ruby/object:Gem::Version
@@ -69,6 +62,7 @@ files:
69
62
  - lib/signer/version.rb
70
63
  - lib/signer.rb
71
64
  - README.md
65
+ - CHANGELOG.md
72
66
  - LICENSE
73
67
  - spec/fixtures/cert.pem
74
68
  - spec/fixtures/input_1.xml
@@ -80,33 +74,26 @@ files:
80
74
  - spec/spec_helper.rb
81
75
  homepage: ''
82
76
  licenses: []
77
+ metadata: {}
83
78
  post_install_message:
84
79
  rdoc_options: []
85
80
  require_paths:
86
81
  - lib
87
82
  required_ruby_version: !ruby/object:Gem::Requirement
88
- none: false
89
83
  requirements:
90
84
  - - ! '>='
91
85
  - !ruby/object:Gem::Version
92
- segments:
93
- - 0
94
86
  version: '0'
95
- hash: -2151872733267505792
96
87
  required_rubygems_version: !ruby/object:Gem::Requirement
97
- none: false
98
88
  requirements:
99
89
  - - ! '>='
100
90
  - !ruby/object:Gem::Version
101
- segments:
102
- - 0
103
91
  version: '0'
104
- hash: -2151872733267505792
105
92
  requirements: []
106
93
  rubyforge_project:
107
- rubygems_version: 1.8.25
94
+ rubygems_version: 2.1.11
108
95
  signing_key:
109
- specification_version: 3
96
+ specification_version: 4
110
97
  summary: WS Security XML signer
111
98
  test_files:
112
99
  - spec/fixtures/cert.pem