akami 1.2.2 → 1.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 825ae5faa9ad5fa6de8a41b5cafaf9440c1ed815
4
- data.tar.gz: eb85cd1306247a20e0197a6243f4655814c1ff66
3
+ metadata.gz: 208bce131b542d769f19dd08ee9ca4fabffd2bb3
4
+ data.tar.gz: ab59a51d740dcabd830313410803fe6853bedbfa
5
5
  SHA512:
6
- metadata.gz: 68eca4d3c681de14d7b263214f1572cea56890783daf3dfb7f9fd72e1489f61119e38cce7baae1eac854d22b5afd8bb35fc82f2563c54550006136357a32fb62
7
- data.tar.gz: 8888ee881ba31dea74e698f232dd63c72b420d4c01d1aee5ffd06b231d3361026e49ee87571dfcbcb3d1623a3c404a8e92f374c7850058cc0a9818fb2e9a6552
6
+ metadata.gz: 675a10d8d0cbf41cb96627f736c372c1c8a9fc9793c28e35ffafee7f916c57e0cd7d901be1fda698d42bec82de71fe161bda6fa7ed66a897fcbb379fb687b680
7
+ data.tar.gz: a2d88a8c8966bad864ebc14f150ee950748de0567a60d9db7568d3983de929ea223a105f308528ad13f6189d3f538479bc63c4c72a2fdffcabff48ff879d60e2
@@ -2,7 +2,11 @@
2
2
  language: "ruby"
3
3
  script: "bundle exec rake"
4
4
  rvm:
5
- - 1.9.2
6
5
  - 1.9.3
6
+ - 2.0
7
+ - 2.1
8
+ - 2.2
7
9
  - jruby-19mode
8
- - rbx
10
+ - rbx-2
11
+ notifications:
12
+ irc: "irc.freenode.org#savon"
@@ -1,4 +1,6 @@
1
- ## master
1
+ ## 1.3.0 (2015-03-31)
2
+
3
+ * Formally drop support for ruby 1.8.7
2
4
 
3
5
  ## 1.2.1 (2014-01-31)
4
6
  * Fix: [#2](https://github.com/savonrb/akami/pull/2) Fixes related to WS-Security,
@@ -10,6 +10,7 @@ Gem::Specification.new do |s|
10
10
  s.homepage = "https://github.com/savonrb/#{s.name}"
11
11
  s.summary = "Web Service Security"
12
12
  s.description = "Building Web Service Security"
13
+ s.required_ruby_version = '>= 1.9.2'
13
14
 
14
15
  s.rubyforge_project = s.name
15
16
  s.license = "MIT"
@@ -18,7 +19,7 @@ Gem::Specification.new do |s|
18
19
  s.add_dependency "nokogiri"
19
20
 
20
21
  s.add_development_dependency "rake", "~> 10.0"
21
- s.add_development_dependency "rspec", "~> 2.12"
22
+ s.add_development_dependency "rspec", "~> 2.14"
22
23
  s.add_development_dependency "mocha", "~> 0.13"
23
24
  s.add_development_dependency "timecop", "~> 0.5"
24
25
 
@@ -1,5 +1,5 @@
1
1
  module Akami
2
2
 
3
- VERSION = "1.2.2"
3
+ VERSION = "1.3.0"
4
4
 
5
5
  end
@@ -115,7 +115,7 @@ module Akami
115
115
  if digest?
116
116
  token = security_hash :wsse, "UsernameToken",
117
117
  "wsse:Username" => username,
118
- "wsse:Nonce" => Base64.encode64(nonce),
118
+ "wsse:Nonce" => Base64.encode64(nonce).chomp,
119
119
  "wsu:Created" => timestamp,
120
120
  "wsse:Password" => digest_password,
121
121
  :attributes! => { "wsse:Password" => { "Type" => PASSWORD_DIGEST_URI }, "wsse:Nonce" => { "EncodingType" => BASE64_URI } }
@@ -9,16 +9,26 @@ module Akami
9
9
  end
10
10
  end
11
11
 
12
- attr_accessor :cert_file, :private_key_file, :private_key_password
12
+ attr_accessor :cert_file, :cert_string, :private_key_file, :private_key_string, :private_key_password
13
13
 
14
- # Returns an <tt>OpenSSL::X509::Certificate</tt> for the +cert_file+.
14
+ # Returns an <tt>OpenSSL::X509::Certificate</tt> for the +cert_string+ or +cert_file+.
15
15
  def cert
16
- @cert ||= OpenSSL::X509::Certificate.new File.read(cert_file) if cert_file
16
+ @cert ||=
17
+ if cert_string.present?
18
+ OpenSSL::X509::Certificate.new(cert_string)
19
+ elsif cert_file.present?
20
+ OpenSSL::X509::Certificate.new(File.read(cert_file))
21
+ end
17
22
  end
18
23
 
19
- # Returns an <tt>OpenSSL::PKey::RSA</tt> for the +private_key_file+.
24
+ # Returns an <tt>OpenSSL::PKey::RSA</tt> for the +private_key_string+ or +private_key_file+.
20
25
  def private_key
21
- @private_key ||= OpenSSL::PKey::RSA.new(File.read(private_key_file), private_key_password) if private_key_file
26
+ @private_key ||=
27
+ if private_key_string.present?
28
+ OpenSSL::PKey::RSA.new(private_key_string, private_key_password)
29
+ elsif private_key_file.present?
30
+ OpenSSL::PKey::RSA.new(File.read(private_key_file), private_key_password)
31
+ end
22
32
  end
23
33
  end
24
34
  end
@@ -14,7 +14,8 @@ module Akami
14
14
  # Without a document, the document cannot be signed.
15
15
  # Generate the document once, and then set document and recall #to_token
16
16
  def document
17
- @document ? @document.to_s : nil
17
+ return nil if @document.nil?
18
+ @document.to_xml(save_with: Nokogiri::XML::Node::SaveOptions::AS_XML)
18
19
  end
19
20
 
20
21
  def document=(document)
@@ -1,88 +1,158 @@
1
+ require 'nokogiri'
2
+ require 'openssl'
3
+
1
4
  module Akami
2
5
  class WSSE
3
6
  class InvalidSignature < RuntimeError; end
4
7
 
8
+ # Validating WSSE signed messages.
5
9
  class VerifySignature
6
- include Akami::XPathHelper
7
10
  include Akami::C14nHelper
8
11
 
9
12
  class InvalidDigest < RuntimeError; end
10
13
  class InvalidSignedValue < RuntimeError; end
11
14
 
12
- attr_reader :response_body, :document
15
+ attr_reader :document
13
16
 
14
- def initialize(response_body)
15
- @response_body = response_body
16
- @document = create_document
17
+ def initialize(xml)
18
+ @document = Nokogiri::XML(xml.to_s, &:noblanks)
17
19
  end
18
20
 
19
- def generate_digest(element)
20
- element = element_for_xpath(element) if element.is_a? String
21
- xml = canonicalize(element)
22
- digest(xml).strip
21
+ # Returns XML namespaces that are used internally for document querying.
22
+ def namespaces
23
+ @namespaces ||= {
24
+ wse: Akami::WSSE::WSE_NAMESPACE,
25
+ ds: 'http://www.w3.org/2000/09/xmldsig#',
26
+ wsu: Akami::WSSE::WSU_NAMESPACE,
27
+ }
23
28
  end
24
29
 
25
- def supplied_digest(element)
26
- element = element_for_xpath(element) if element.is_a? String
27
- find_digest_value element.attributes["Id"]
28
- end
29
-
30
- def signature_value
31
- element = element_for_xpath("//Security/Signature/SignatureValue")
32
- element ? element.text : ""
33
- end
30
+ # Allows to replace used XML namespaces if anyone will ever need. +hash+ should be a +Hash+ with symbol keys +:wse+, +:ds+, and +:wsu+.
31
+ attr_writer :namespaces
34
32
 
33
+ # Returns signer's certificate, bundled in signed document
35
34
  def certificate
36
- certificate_value = element_for_xpath("//Security/BinarySecurityToken").text.strip
35
+ certificate_value = document.at_xpath('//wse:Security/wse:BinarySecurityToken', namespaces).text.strip
37
36
  OpenSSL::X509::Certificate.new Base64.decode64(certificate_value)
38
37
  end
39
38
 
39
+ # Validates document signature, returns +true+ on success, +false+ otherwise.
40
40
  def valid?
41
41
  verify
42
42
  rescue InvalidDigest, InvalidSignedValue
43
43
  return false
44
44
  end
45
45
 
46
+ # Validates document signature and digests and raises if anything mismatches.
46
47
  def verify!
47
48
  verify
48
49
  rescue InvalidDigest, InvalidSignedValue => e
49
50
  raise InvalidSignature, e.message
50
51
  end
51
52
 
53
+ # Returns a hash with currently initialized digesters.
54
+ #
55
+ # Will be empty after initialization, and will contain used algorithms after verification.
56
+ #
57
+ # May be used to insert additional digesters, not supported out of the box, for example:
58
+ #
59
+ # digesters['http://www.w3.org/2001/04/xmldsig-more#rsa-sha512'] = OpenSSL::Digest::SHA512.new
60
+
61
+ def digesters
62
+ @digesters
63
+ end
64
+
52
65
  private
53
66
 
54
67
  def verify
55
- xpath(document, "//Security/Signature/SignedInfo/Reference").each do |ref|
56
- element_id = ref.attributes["URI"][1..-1] # strip leading '#'
57
- element = element_for_xpath(%(//*[@wsu:Id="#{element_id}"]))
58
- raise InvalidDigest, "Invalid Digest for #{element_id}" unless supplied_digest(element) == generate_digest(element)
68
+ document.xpath('//wse:Security/ds:Signature/ds:SignedInfo/ds:Reference', namespaces).each do |ref|
69
+ digest_algorithm = ref.at_xpath('//ds:DigestMethod', namespaces)['Algorithm']
70
+ element_id = ref.attributes['URI'].value[1..-1] # strip leading '#'
71
+ element = document.at_xpath(%(//*[@wsu:Id="#{element_id}"]), namespaces)
72
+ unless supplied_digest(element) == generate_digest(element, digest_algorithm)
73
+ raise InvalidDigest, "Invalid Digest for #{element_id}"
74
+ end
59
75
  end
60
76
 
61
77
  data = canonicalize(signed_info)
62
78
  signature = Base64.decode64(signature_value)
79
+ signature_algorithm = document.at_xpath('//wse:Security/ds:Signature/ds:SignedInfo/ds:SignatureMethod', namespaces)['Algorithm']
80
+ signature_digester = digester_for_signature_method(signature_algorithm)
63
81
 
64
- certificate.public_key.verify(OpenSSL::Digest::SHA1.new, signature, data) or raise InvalidSignedValue, "Could not verify the signature value"
82
+ certificate.public_key.verify(signature_digester, signature, data) or raise InvalidSignedValue, "Could not verify the signature value"
65
83
  end
66
84
 
67
- def create_document
68
- Nokogiri::XML response_body
85
+ def signed_info
86
+ document.at_xpath('//wse:Security/ds:Signature/ds:SignedInfo', namespaces)
69
87
  end
70
88
 
71
- def element_for_xpath(xpath)
72
- document.at_xpath xpath
89
+ # Generate digest for a given +element+ (or its XPath) with a given +algorithm+
90
+ def generate_digest(element, algorithm)
91
+ element = document.at_xpath(element, namespaces) if element.is_a? String
92
+ xml = canonicalize(element)
93
+ digest(xml, algorithm).strip
73
94
  end
74
95
 
75
- def signed_info
76
- at_xpath document, "//Security/Signature/SignedInfo"
96
+ def supplied_digest(element)
97
+ element = document.at_xpath(element, namespaces) if element.is_a? String
98
+ find_digest_value element.attributes['Id'].value
99
+ end
100
+
101
+ def signature_value
102
+ element = document.at_xpath('//wse:Security/ds:Signature/ds:SignatureValue', namespaces)
103
+ element ? element.text : ""
77
104
  end
78
105
 
79
106
  def find_digest_value(id)
80
- at_xpath(document, %(//Security/Signature/SignedInfo/Reference[@URI="##{id}"]/DigestValue)).text
107
+ document.at_xpath(%(//wse:Security/ds:Signature/ds:SignedInfo/ds:Reference[@URI="##{id}"]/ds:DigestValue), namespaces).text
81
108
  end
82
109
 
83
- def digest(string)
84
- Base64.encode64 OpenSSL::Digest::SHA1.digest(string)
110
+ # Calculate digest for string with given algorithm URL and Base64 encodes it.
111
+ def digest(string, algorithm)
112
+ Base64.encode64 digester(algorithm).digest(string)
85
113
  end
114
+
115
+ # Returns digester for calculating digest for signature verification
116
+ def digester_for_signature_method(algorithm_url)
117
+ signature_digest_mapping = {
118
+ 'http://www.w3.org/2000/09/xmldsig#rsa-sha1' => 'http://www.w3.org/2000/09/xmldsig#sha1',
119
+ 'http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411' => 'http://www.w3.org/2001/04/xmldsig-more#gostr3411',
120
+ }
121
+ digest_url = signature_digest_mapping[algorithm_url] || algorithm_url
122
+ digester(digest_url)
123
+ end
124
+
125
+ # Constructors for known digest calculating objects
126
+ DIGESTERS = {
127
+ # SHA1
128
+ 'http://www.w3.org/2000/09/xmldsig#sha1' => lambda { OpenSSL::Digest::SHA1.new },
129
+ # SHA 256
130
+ 'http://www.w3.org/2001/04/xmldsig-more#rsa-sha256' => lambda { OpenSSL::Digest::SHA256.new },
131
+ # GOST R 34.11-94
132
+ # You need correctly configured gost engine in your system OpenSSL, requires OpenSSL >= 1.0.0
133
+ # see https://github.com/openssl/openssl/blob/master/engines/ccgost/README.gost
134
+ 'http://www.w3.org/2001/04/xmldsig-more#gostr3411' => lambda {
135
+ if defined? JRUBY_VERSION
136
+ OpenSSL::Digest.new('GOST3411')
137
+ else
138
+ OpenSSL::Engine.load
139
+ gost_engine = OpenSSL::Engine.by_id('gost')
140
+ gost_engine.set_default(0xFFFF)
141
+ gost_engine.digest('md_gost94')
142
+ end
143
+ },
144
+ }
145
+
146
+ # Returns instance of +OpenSSL::Digest+ class, initialized, reset, and ready to calculate new hashes.
147
+ def digester(url)
148
+ @digesters ||= {}
149
+ unless @digesters[url]
150
+ DIGESTERS[url] or raise InvalidDigest, "Digest algorithm not supported: #{url}"
151
+ @digesters[url] = DIGESTERS[url].call
152
+ end
153
+ @digesters[url].reset
154
+ end
155
+
86
156
  end
87
157
  end
88
158
  end
@@ -0,0 +1,34 @@
1
+ require 'spec_helper'
2
+
3
+ describe Akami::WSSE::Signature do
4
+
5
+ let(:validator) { Akami::WSSE::VerifySignature.new(xml) }
6
+ let(:xml) { '' }
7
+
8
+ let(:fixtures_path) {
9
+ File.join(Bundler.root, 'spec', 'fixtures', 'akami', 'wsse', 'signature' )
10
+ }
11
+ let(:cert_path) { File.join(fixtures_path, 'cert.pem') }
12
+ let(:password) { 'password' }
13
+
14
+ let(:signature) {
15
+ Akami::WSSE::Signature.new(
16
+ Akami::WSSE::Certs.new(
17
+ cert_file: cert_path,
18
+ private_key_file: cert_path,
19
+ private_key_password: password
20
+ )
21
+ )
22
+ }
23
+
24
+ context 'to_token' do
25
+ let(:xml) { fixture('akami/wsse/signature/unsigned.xml') }
26
+
27
+ it 'should ignore excessive whitespace' do
28
+ signature.document = xml
29
+ expect(signature.document).not_to include(" ")
30
+ end
31
+
32
+ end
33
+
34
+ end
@@ -0,0 +1,55 @@
1
+ require 'spec_helper'
2
+
3
+ describe Akami::WSSE::VerifySignature do
4
+
5
+ it 'should validate correctly signed XML messages' do
6
+ xml = fixture('akami/wsse/verify_signature/valid.xml')
7
+ validator = described_class.new(xml)
8
+ validator.verify!.should eq(true)
9
+ end
10
+
11
+ it 'should validate correctly signed XML messages with differently named namespaces' do
12
+ xml = fixture('akami/wsse/verify_signature/valid_namespaces.xml')
13
+ validator = described_class.new(xml)
14
+ validator.verify!.should eq(true)
15
+ end
16
+
17
+ it 'should validate correctly signed XML messages with whitespaces' do
18
+ xml = fixture('akami/wsse/verify_signature/valid_whitespaces.xml')
19
+ validator = described_class.new(xml)
20
+ expect(validator.verify!).to equal(true)
21
+ end
22
+
23
+ it 'should not validate signed XML messages with digested content changed' do
24
+ xml = fixture('akami/wsse/verify_signature/invalid_digested_changed.xml')
25
+ validator = described_class.new(xml)
26
+ expect{ validator.verify! }.to raise_error(Akami::WSSE::InvalidSignature)
27
+ end
28
+
29
+ it 'should not validate signed XML messages with digest changed' do
30
+ xml = fixture('akami/wsse/verify_signature/invalid_digest_changed.xml')
31
+ validator = described_class.new(xml)
32
+ expect{ validator.verify! }.to raise_error(Akami::WSSE::InvalidSignature)
33
+ end
34
+
35
+ it 'should not validate signed XML messages with signature changed' do
36
+ xml = fixture('akami/wsse/verify_signature/invalid_signature_changed.xml')
37
+ validator = described_class.new(xml)
38
+ expect{ validator.verify! }.to raise_error(Akami::WSSE::InvalidSignature)
39
+ end
40
+
41
+ # There is no testing for messages signed with GOST as it requires patched Ruby
42
+ # But we can test GOST digest calculation
43
+ it 'should validate correctly signed XML messages with RSA-SHA1 signature and GOST R 34.11-94 digests' do
44
+ xml = fixture('akami/wsse/verify_signature/valid_sha1_gost.xml')
45
+ validator = described_class.new(xml)
46
+ expect(validator.verify!).to equal(true)
47
+ end
48
+
49
+ it 'should validate correctly signed XML messages with SHA256 signature and SHA256 digests' do
50
+ xml = fixture('akami/wsse/verify_signature/valid_sha256.xml')
51
+ validator = described_class.new(xml)
52
+ expect(validator.verify!).to equal(true)
53
+ end
54
+
55
+ end
@@ -6,81 +6,86 @@ describe Akami do
6
6
  let(:wsse) { Akami.wsse }
7
7
 
8
8
  it "contains the namespace for WS Security Secext" do
9
- Akami::WSSE::WSE_NAMESPACE.should ==
9
+ expect(Akami::WSSE::WSE_NAMESPACE).to eq(
10
10
  "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
11
+ )
11
12
  end
12
13
 
13
14
  it "contains the namespace for WS Security Utility" do
14
- Akami::WSSE::WSU_NAMESPACE.should ==
15
+ expect(Akami::WSSE::WSU_NAMESPACE).to eq(
15
16
  "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
17
+ )
16
18
  end
17
19
 
18
20
  it "contains the namespace for the PasswordText type" do
19
- Akami::WSSE::PASSWORD_TEXT_URI.should ==
21
+ expect(Akami::WSSE::PASSWORD_TEXT_URI).to eq(
20
22
  "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText"
23
+ )
21
24
  end
22
25
 
23
26
  it "contains the namespace for the PasswordDigest type" do
24
- Akami::WSSE::PASSWORD_DIGEST_URI.should ==
27
+ expect(Akami::WSSE::PASSWORD_DIGEST_URI).to eq(
25
28
  "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest"
29
+ )
26
30
  end
27
31
 
28
32
  it "contains the namespace for Base64 Encoding type" do
29
- Akami::WSSE::BASE64_URI.should ==
33
+ expect(Akami::WSSE::BASE64_URI).to eq(
30
34
  "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary"
35
+ )
31
36
  end
32
37
 
33
38
  describe "#credentials" do
34
39
  it "sets the username" do
35
40
  wsse.credentials "username", "password"
36
- wsse.username.should == "username"
41
+ expect(wsse.username).to eq("username")
37
42
  end
38
43
 
39
44
  it "sets the password" do
40
45
  wsse.credentials "username", "password"
41
- wsse.password.should == "password"
46
+ expect(wsse.password).to eq("password")
42
47
  end
43
48
 
44
49
  it "defaults to set digest to false" do
45
50
  wsse.credentials "username", "password"
46
- wsse.should_not be_digest
51
+ expect(wsse).not_to be_digest
47
52
  end
48
53
 
49
54
  it "sets digest to true if specified" do
50
55
  wsse.credentials "username", "password", :digest
51
- wsse.should be_digest
56
+ expect(wsse).to be_digest
52
57
  end
53
58
  end
54
59
 
55
60
  describe "#username" do
56
61
  it "sets the username" do
57
62
  wsse.username = "username"
58
- wsse.username.should == "username"
63
+ expect(wsse.username).to eq("username")
59
64
  end
60
65
  end
61
66
 
62
67
  describe "#password" do
63
68
  it "sets the password" do
64
69
  wsse.password = "password"
65
- wsse.password.should == "password"
70
+ expect(wsse.password).to eq("password")
66
71
  end
67
72
  end
68
73
 
69
74
  describe "#digest" do
70
75
  it "defaults to false" do
71
- wsse.should_not be_digest
76
+ expect(wsse).not_to be_digest
72
77
  end
73
78
 
74
79
  it "specifies whether to use digest auth" do
75
80
  wsse.digest = true
76
- wsse.should be_digest
81
+ expect(wsse).to be_digest
77
82
  end
78
83
  end
79
84
 
80
85
  describe "#to_xml" do
81
86
  context "with no credentials" do
82
87
  it "returns an empty String" do
83
- wsse.to_xml.should == ""
88
+ expect(wsse.to_xml).to eq("")
84
89
  end
85
90
  end
86
91
 
@@ -88,7 +93,7 @@ describe Akami do
88
93
  before { wsse.username = "username" }
89
94
 
90
95
  it "returns an empty String" do
91
- wsse.to_xml.should == ""
96
+ expect(wsse.to_xml).to eq("")
92
97
  end
93
98
  end
94
99
 
@@ -96,7 +101,7 @@ describe Akami do
96
101
  before { wsse.password = "password" }
97
102
 
98
103
  it "returns an empty String" do
99
- wsse.to_xml.should == ""
104
+ expect(wsse.to_xml).to eq("")
100
105
  end
101
106
  end
102
107
 
@@ -105,36 +110,36 @@ describe Akami do
105
110
 
106
111
  it "contains a wsse:Security tag" do
107
112
  namespace = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
108
- wsse.to_xml.should include("<wsse:Security xmlns:wsse=\"#{namespace}\">")
113
+ expect(wsse.to_xml).to include("<wsse:Security xmlns:wsse=\"#{namespace}\">")
109
114
  end
110
115
 
111
116
  it "contains a wsu:Id attribute" do
112
- wsse.to_xml.should include('<wsse:UsernameToken wsu:Id="UsernameToken-1"')
117
+ expect(wsse.to_xml).to include('<wsse:UsernameToken wsu:Id="UsernameToken-1"')
113
118
  end
114
119
 
115
120
  it "increments the wsu:Id attribute count" do
116
- wsse.to_xml.should include('<wsse:UsernameToken wsu:Id="UsernameToken-1"')
117
- wsse.to_xml.should include('<wsse:UsernameToken wsu:Id="UsernameToken-2"')
121
+ expect(wsse.to_xml).to include('<wsse:UsernameToken wsu:Id="UsernameToken-1"')
122
+ expect(wsse.to_xml).to include('<wsse:UsernameToken wsu:Id="UsernameToken-2"')
118
123
  end
119
124
 
120
125
  it "contains the WSE and WSU namespaces" do
121
- wsse.to_xml.should include(Akami::WSSE::WSE_NAMESPACE, Akami::WSSE::WSU_NAMESPACE)
126
+ expect(wsse.to_xml).to include(Akami::WSSE::WSE_NAMESPACE, Akami::WSSE::WSU_NAMESPACE)
122
127
  end
123
128
 
124
129
  it "contains the username and password" do
125
- wsse.to_xml.should include("username", "password")
130
+ expect(wsse.to_xml).to include("username", "password")
126
131
  end
127
132
 
128
133
  it "does not contain a wsse:Nonce tag" do
129
- wsse.to_xml.should_not match(/<wsse:Nonce.*>.*<\/wsse:Nonce>/)
134
+ expect(wsse.to_xml).not_to match(/<wsse:Nonce.*>.*<\/wsse:Nonce>/)
130
135
  end
131
136
 
132
137
  it "does not contain a wsu:Created tag" do
133
- wsse.to_xml.should_not match(/<wsu:Created>.*<\/wsu:Created>/)
138
+ expect(wsse.to_xml).not_to match(/<wsu:Created>.*<\/wsu:Created>/)
134
139
  end
135
140
 
136
141
  it "contains the PasswordText type attribute" do
137
- wsse.to_xml.should include(Akami::WSSE::PASSWORD_TEXT_URI)
142
+ expect(wsse.to_xml).to include(Akami::WSSE::PASSWORD_TEXT_URI)
138
143
  end
139
144
  end
140
145
 
@@ -142,30 +147,30 @@ describe Akami do
142
147
  before { wsse.credentials "username", "password", :digest }
143
148
 
144
149
  it "contains the WSE and WSU namespaces" do
145
- wsse.to_xml.should include(Akami::WSSE::WSE_NAMESPACE, Akami::WSSE::WSU_NAMESPACE)
150
+ expect(wsse.to_xml).to include(Akami::WSSE::WSE_NAMESPACE, Akami::WSSE::WSU_NAMESPACE)
146
151
  end
147
152
 
148
153
  it "contains the username" do
149
- wsse.to_xml.should include("username")
154
+ expect(wsse.to_xml).to include("username")
150
155
  end
151
156
 
152
157
  it "does not contain the (original) password" do
153
- wsse.to_xml.should_not include("password")
158
+ expect(wsse.to_xml).not_to include("password")
154
159
  end
155
160
 
156
161
  it "contains the Nonce base64 type attribute" do
157
- wsse.to_xml.should include(Akami::WSSE::BASE64_URI)
162
+ expect(wsse.to_xml).to include(Akami::WSSE::BASE64_URI)
158
163
  end
159
164
 
160
165
  it "contains a wsu:Created tag" do
161
166
  created_at = Time.now
162
167
  Timecop.freeze created_at do
163
- wsse.to_xml.should include("<wsu:Created>#{created_at.utc.xmlschema}</wsu:Created>")
168
+ expect(wsse.to_xml).to include("<wsu:Created>#{created_at.utc.xmlschema}</wsu:Created>")
164
169
  end
165
170
  end
166
171
 
167
172
  it "contains the PasswordDigest type attribute" do
168
- wsse.to_xml.should include(Akami::WSSE::PASSWORD_DIGEST_URI)
173
+ expect(wsse.to_xml).to include(Akami::WSSE::PASSWORD_DIGEST_URI)
169
174
  end
170
175
 
171
176
  it "should reset the nonce every time" do
@@ -174,7 +179,7 @@ describe Akami do
174
179
  nonce_regexp = /<wsse:Nonce.*>([^<]+)<\/wsse:Nonce>/
175
180
  nonce_first = Base64.decode64(nonce_regexp.match(wsse.to_xml)[1])
176
181
  nonce_second = Base64.decode64(nonce_regexp.match(wsse.to_xml)[1])
177
- nonce_first.should_not == nonce_second
182
+ expect(nonce_first).not_to eq(nonce_second)
178
183
  end
179
184
  end
180
185
 
@@ -184,7 +189,7 @@ describe Akami do
184
189
  nonce = Base64.decode64(xml_header.xpath('//Nonce').first.content)
185
190
  created_at = xml_header.xpath('//Created').first.content
186
191
  password_hash = Base64.decode64(xml_header.xpath('//Password').first.content)
187
- password_hash.should == Digest::SHA1.digest((nonce + created_at + "password"))
192
+ expect(password_hash).to eq(Digest::SHA1.digest((nonce + created_at + "password")))
188
193
  end
189
194
  end
190
195
 
@@ -192,21 +197,21 @@ describe Akami do
192
197
  before { wsse.timestamp = true }
193
198
 
194
199
  it "contains a wsse:Timestamp node" do
195
- wsse.to_xml.should include('<wsu:Timestamp wsu:Id="Timestamp-1" ' +
200
+ expect(wsse.to_xml).to include('<wsu:Timestamp wsu:Id="Timestamp-1" ' +
196
201
  'xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">')
197
202
  end
198
203
 
199
204
  it "contains a wsu:Created node defaulting to Time.now" do
200
205
  created_at = Time.now
201
206
  Timecop.freeze created_at do
202
- wsse.to_xml.should include("<wsu:Created>#{created_at.utc.xmlschema}</wsu:Created>")
207
+ expect(wsse.to_xml).to include("<wsu:Created>#{created_at.utc.xmlschema}</wsu:Created>")
203
208
  end
204
209
  end
205
210
 
206
211
  it "contains a wsu:Expires node defaulting to Time.now + 60 seconds" do
207
212
  created_at = Time.now
208
213
  Timecop.freeze created_at do
209
- wsse.to_xml.should include("<wsu:Expires>#{(created_at + 60).utc.xmlschema}</wsu:Expires>")
214
+ expect(wsse.to_xml).to include("<wsu:Expires>#{(created_at + 60).utc.xmlschema}</wsu:Expires>")
210
215
  end
211
216
  end
212
217
  end
@@ -215,11 +220,11 @@ describe Akami do
215
220
  before { wsse.created_at = Time.now + 86400 }
216
221
 
217
222
  it "contains a wsu:Created node with the given time" do
218
- wsse.to_xml.should include("<wsu:Created>#{wsse.created_at.utc.xmlschema}</wsu:Created>")
223
+ expect(wsse.to_xml).to include("<wsu:Created>#{wsse.created_at.utc.xmlschema}</wsu:Created>")
219
224
  end
220
225
 
221
226
  it "contains a wsu:Expires node set to #created_at + 60 seconds" do
222
- wsse.to_xml.should include("<wsu:Expires>#{(wsse.created_at + 60).utc.xmlschema}</wsu:Expires>")
227
+ expect(wsse.to_xml).to include("<wsu:Expires>#{(wsse.created_at + 60).utc.xmlschema}</wsu:Expires>")
223
228
  end
224
229
  end
225
230
 
@@ -229,12 +234,12 @@ describe Akami do
229
234
  it "contains a wsu:Created node defaulting to Time.now" do
230
235
  created_at = Time.now
231
236
  Timecop.freeze created_at do
232
- wsse.to_xml.should include("<wsu:Created>#{created_at.utc.xmlschema}</wsu:Created>")
237
+ expect(wsse.to_xml).to include("<wsu:Created>#{created_at.utc.xmlschema}</wsu:Created>")
233
238
  end
234
239
  end
235
240
 
236
241
  it "contains a wsu:Expires node set to the given time" do
237
- wsse.to_xml.should include("<wsu:Expires>#{wsse.expires_at.utc.xmlschema}</wsu:Expires>")
242
+ expect(wsse.to_xml).to include("<wsu:Expires>#{wsse.expires_at.utc.xmlschema}</wsu:Expires>")
238
243
  end
239
244
  end
240
245
 
@@ -245,15 +250,15 @@ describe Akami do
245
250
  end
246
251
 
247
252
  it "contains a wsu:Created node" do
248
- wsse.to_xml.should include("<wsu:Created>")
253
+ expect(wsse.to_xml).to include("<wsu:Created>")
249
254
  end
250
255
 
251
256
  it "contains a wsu:Expires node" do
252
- wsse.to_xml.should include("<wsu:Expires>")
257
+ expect(wsse.to_xml).to include("<wsu:Expires>")
253
258
  end
254
259
 
255
260
  it "contains the username and password" do
256
- wsse.to_xml.should include("username", "password")
261
+ expect(wsse.to_xml).to include("username", "password")
257
262
  end
258
263
  end
259
264
  end
@@ -0,0 +1,37 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIDIjCCAougAwIBAgIJAI53JnRgJIJwMA0GCSqGSIb3DQEBBQUAMGoxCzAJBgNV
3
+ BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNp
4
+ c2NvMQ4wDAYDVQQKEwVTYXZvbjEOMAwGA1UECxMFU2F2b24xDjAMBgNVBAMTBVNh
5
+ dm9uMB4XDTE0MTIwMjAwMTMwMloXDTI0MTEyOTAwMTMwMlowajELMAkGA1UEBhMC
6
+ VVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lzY28x
7
+ DjAMBgNVBAoTBVNhdm9uMQ4wDAYDVQQLEwVTYXZvbjEOMAwGA1UEAxMFU2F2b24w
8
+ gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM56hKF3+4SSUu8msb5HWMvp322y
9
+ QL+luJ+Lt/r/ib7EPeb4UU68b+Wf3xIa3N1+w8tDQghCR4YuEIILKH/UGC785Old
10
+ VJfikD4kxiwF4jB0RgdRK/JEG/UthHKqJID+oyijW4ws4MgZ/bWMhSbSVRioqcwe
11
+ 2JElg/m2TemKJkXDAgMBAAGjgc8wgcwwHQYDVR0OBBYEFKSd+UicrRDQS2NeLSEA
12
+ Zpipjk8EMIGcBgNVHSMEgZQwgZGAFKSd+UicrRDQS2NeLSEAZpipjk8EoW6kbDBq
13
+ MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2Fu
14
+ IEZyYW5jaXNjbzEOMAwGA1UEChMFU2F2b24xDjAMBgNVBAsTBVNhdm9uMQ4wDAYD
15
+ VQQDEwVTYXZvboIJAI53JnRgJIJwMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEF
16
+ BQADgYEAWI27+cDx3U53zaJROXKfQutqUZzZz9B0NzQ0vlN2h5UbACGbXH9C1wLz
17
+ MBvNjgEiK+/jHSadSDgfvADv+2hCsFw8eNgbisWiV5yvDyTqttg3cSJHz8jRDeA+
18
+ jnvaC9Y//AoRr/WGKKU3FY40J7pQKcQNczGUzCS+ag0IO64agTs=
19
+ -----END CERTIFICATE-----
20
+ -----BEGIN RSA PRIVATE KEY-----
21
+ Proc-Type: 4,ENCRYPTED
22
+ DEK-Info: DES-EDE3-CBC,A0BF079E41C9A4C1
23
+
24
+ rEO5mWOWbnr8uyjtfIRwW9wRo2/y1wMON2c605BkgaNeAKH/++1UC9qEhNtHfE2Q
25
+ omQkXiHfV6yt3l3dWPcnA9ToT9PRNLyoRMMC+Ds5EuEk4ypihQ8SS2xt3wqCRkwm
26
+ 3/AyrRZXUnBTVzZ9D35lz1HCFfJ61UpOMN9XOZy4yUqDZVG/ybMhXilfNKgTr8xJ
27
+ StTb7ruwV/8xTiEgmcxGKJbOcDKqwsd/mW3VbDN6zOqYC0TlFc/eiCbJxMd35l6a
28
+ oRfHWHbabumcfZplqoDcOwYpRb8ZiDbu74RrDogKnpH7nnJrp8jSYueCiXGDWGFG
29
+ ZXB6f2FhsbrLEM87L8cxJO6Hk6+c39qgiP2aRICeKjUNKPOfSiPr4yP4/g3tFY2z
30
+ sI9xur3nAXoqxXBrEkEdvXiH35UfJpqOTxbAN+Ozxnj1QeLWDDE8nkMW/XRRxdCk
31
+ jeUwR5PS3sM2S/fIn7rThQSKRMxznK//cEUsMwz514HekxnKyj8rZUETcFFySxmz
32
+ lmOzDOaPNejDOgNSrlT+IDqE9YlMxLObv5l960QOjk0qBaO8e33HkgfBqENzq7Uv
33
+ Wrj3FyBlNz4vfhCZHBY0+rSgdZHM64DV0HybE7yc+mMUwrV7ish1bGb/Bek/4JF+
34
+ lrpRuxTEQFGNTGFYa0C5zDpz9UtiSUs2X4EX74GfxCUmn7kNND+4OVrndZiEONPz
35
+ /6QffS7YG1UtahDpDzI1wOCYD9Iwg/HnmTWMcXj2Yw7jRvlG0sArw/5dNJkrmuJY
36
+ 6PvFoEeZSF4qrUCDlw/BUJMaGDlhSCyTWulZZU+wWuJRTWCiDxYO1g==
37
+ -----END RSA PRIVATE KEY-----
@@ -0,0 +1 @@
1
+ <?xml version="1.0" encoding="UTF-8"?><env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tns="https://api.example.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><env:Header xmlns:wsa="http://www.w3.org/2005/08/addressing"><wsa:Action>http://api.example.com/echo</wsa:Action><wsa:To>https://api.example.com</wsa:To><wsa:MessageID xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing">urn:uuid:52d12080-5bec-0132-62fb-38f6b11526bf</wsa:MessageID></env:Header><env:Body xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="Body-69182b6fd3cdbaa69e00e0bca6c58f6aee1e0c27"><tns:echo>Example</tns:echo></env:Body></env:Envelope>
@@ -0,0 +1,3 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsa="http://www.w3.org/2005/08/addressing"><soap:Header><oasis:Security xmlns:oasis="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
3
+ <oasis: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" wsu:Id="uuid-639b8970-7644-4f9e-9bc4-9c2e367808fc-1">MIIEZTCCA02gAwIBAgIJALaQmjuYuxpuMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAldXMRIwEAYDVQQIEwlXb3JsZHdpZGUxETAPBgNVBAcTCFhNTCBjaXR5MREwDwYDVQQKEwhTYXZvbi5yYjEhMB8GA1UECxMYQWthbWkgdGVzdGluZyBkZXBhcnRtZW50MRIwEAYDVQQDEwlBa2FtaSBHZW0wHhcNMTQwNjEwMDg1NjEzWhcNMjQwNjA3MDg1NjEzWjB+MQswCQYDVQQGEwJXVzESMBAGA1UECBMJV29ybGR3aWRlMREwDwYDVQQHEwhYTUwgY2l0eTERMA8GA1UEChMIU2F2b24ucmIxITAfBgNVBAsTGEFrYW1pIHRlc3RpbmcgZGVwYXJ0bWVudDESMBAGA1UEAxMJQWthbWkgR2VtMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvjKxq8WnYOT7ymrSNmN95NFMXhLxdumQz0QniRURVQ1P2sOwxOw9mlFnMsdGwsTYUJ9TwwBvA82UAaHEp/mMlHVc0oIKBzMWXj3qK3paRpcooh9hVSGlnqGep+/mzpP9SgPeJRXUgewnnXYsdPkV3k+EFLP/ZwGKOu3lTf4eTNm+TfnW4jHQYg2DpXHXtfV/H2mlDl/p/oUSoUnD3rWrF8IDPTSpy/30KtiY9ijy4RhllbSxM5Y230rpvlty1qqlNI/g34thL15nFaU/aIWQ/KwiCqthldd3m92S9gQ+iY4YtJkxAFsVAWT8gF32pmCKeH5IMmihZqlno6pUG0pIHwIDAQABo4HlMIHiMB0GA1UdDgQWBBQxpPv3f9MSv1y+BoR07lNRWi78ODCBsgYDVR0jBIGqMIGngBQxpPv3f9MSv1y+BoR07lNRWi78OKGBg6SBgDB+MQswCQYDVQQGEwJXVzESMBAGA1UECBMJV29ybGR3aWRlMREwDwYDVQQHEwhYTUwgY2l0eTERMA8GA1UEChMIU2F2b24ucmIxITAfBgNVBAsTGEFrYW1pIHRlc3RpbmcgZGVwYXJ0bWVudDESMBAGA1UEAxMJQWthbWkgR2VtggkAtpCaO5i7Gm4wDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAZphue2C31+5SpoZiIQav3xtwfIt+PRtK0ZN0w2ZxR1LmbWS9jX4elvwE5B5Yyu4UmjyvXGA6j9s5PGedXMabpi9GWsaEfHRKsF/TrH0KauhPrAWTuc1UxMFM5zPc6LeWJ8ofaVIgg4S4UFnf/fnkc/BtMMDCIyb62HkRmV+FqOOD+LlkcT701VKty68ubCg9xKaLg7L4zZBPYJrt0iLY2LWKh4ABinxfA1DFEVw9PVIEQKopwkO1A10rrKbfZqALQg5egVQypfVJ7E0Nkq5VeT3d3u3ybnZw/ZprQR0uPm+Ap492itLMMUX3iyJkxteAfT+03ztKWEsmGMbZpzG7VA==</oasis:BinarySecurityToken><Signature xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/><SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/><Reference URI="#_779bc0e70903ff79e62739956a11c7e3584a9012"><Transforms><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><DigestValue>8yHW2c0jdon+CADkxk47/gLo0ps=</DigestValue></Reference><Reference URI="#_747c942c134dd275275707f2cf63e8de7881d367"><Transforms><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><DigestValue>eRsb4CWXD17hl5exQvaZYDnOQOM=</DigestValue></Reference><Reference URI="#_2dc10b4daca971ef4ddb482338ebd7ba30112e2a"><Transforms><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><DigestValue>1aznRVYGR81veFFG2lNU9WjUhDs=</DigestValue></Reference><Reference URI="#_1f546393fdadf04fd9afcf172658c78cfd1b735d"><Transforms><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><DigestValue>KXKU6ZFziN415Hd2K6WevzUihYs=</DigestValue></Reference><Reference URI="#_724554b8920321ee32020dac076be1f58d92d3c7"><Transforms><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><DigestValue>YrKqrE99N7hNGYEvrhifL/LaxKQ=</DigestValue></Reference><Reference URI="#uuid-639b8970-7644-4f9e-9bc4-9c2e367808fc-1"><Transforms><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><DigestValue>VevrJZBe3aVif18GuHIrSZz5my8=</DigestValue></Reference></SignedInfo><SignatureValue>NEJTWOxr2IdWOyV+b1XjRU1Koaa0OYDbz0MqErcqjEgLt3rgK2YyZpg2yMBB++YmlwhS2Gm/Iqnyv6U909hvF4Hg+9/kw/FiwqhavcW+/N9HZKo0vGww/rU4qcKrNdU/lETQhxfk5DpKAoAUWV6yGxnbP8GzTXWGtP4sfLlcFjfOkTnePEM7QLjJLk9l2YkvbmyaRClj3psYrh0Fo1G+LWZ7W8UpaPzoo8e+s2EkKDAbchWoQJp2vEIhLnRRWDMuweRpsURigjbIkJCKnawmZ8SG1nA68nYa9jTh6824XVepxbkvtvNzEFC6dmZAjwAWhADf1+7lpqUyml/wZyHWRw==</SignatureValue><KeyInfo><o:SecurityTokenReference><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"/></o:SecurityTokenReference></KeyInfo></Signature></oasis:Security><wsa:Action wsu:Id="_779bc0e70903ff79e62739956a11c7e3584a9012">SomeAction</wsa:Action><wsa:To wsu:Id="_747c942c134dd275275707f2cf63e8de7881d367">https://strict.endpoint/path</wsa:To><wsa:ReplyTo wsu:Id="_2dc10b4daca971ef4ddb482338ebd7ba30112e2a"><wsa:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:Address></wsa:ReplyTo><wsa:MessageID wsu:Id="_1f546393fdadf04fd9afcf172658c78cfd1b735d">SRV-0f687bbd-62503e99-926a4d3c-5dde443c-dbf6d68f</wsa:MessageID></soap:Header><soap:Body wsu:Id="_724554b8920321ee32020dac076be1f58d92d3c7"><messageCode>code</messageCode><!-- Comments should be ignored during canonicalization --><message>message</message></soap:Body></soap:Envelope>
@@ -0,0 +1,3 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsa="http://www.w3.org/2005/08/addressing"><soap:Header><oasis:Security xmlns:oasis="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
3
+ <oasis: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" wsu:Id="uuid-639b8970-7644-4f9e-9bc4-9c2e367808fc-1">MIIEZTCCA02gAwIBAgIJALaQmjuYuxpuMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAldXMRIwEAYDVQQIEwlXb3JsZHdpZGUxETAPBgNVBAcTCFhNTCBjaXR5MREwDwYDVQQKEwhTYXZvbi5yYjEhMB8GA1UECxMYQWthbWkgdGVzdGluZyBkZXBhcnRtZW50MRIwEAYDVQQDEwlBa2FtaSBHZW0wHhcNMTQwNjEwMDg1NjEzWhcNMjQwNjA3MDg1NjEzWjB+MQswCQYDVQQGEwJXVzESMBAGA1UECBMJV29ybGR3aWRlMREwDwYDVQQHEwhYTUwgY2l0eTERMA8GA1UEChMIU2F2b24ucmIxITAfBgNVBAsTGEFrYW1pIHRlc3RpbmcgZGVwYXJ0bWVudDESMBAGA1UEAxMJQWthbWkgR2VtMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvjKxq8WnYOT7ymrSNmN95NFMXhLxdumQz0QniRURVQ1P2sOwxOw9mlFnMsdGwsTYUJ9TwwBvA82UAaHEp/mMlHVc0oIKBzMWXj3qK3paRpcooh9hVSGlnqGep+/mzpP9SgPeJRXUgewnnXYsdPkV3k+EFLP/ZwGKOu3lTf4eTNm+TfnW4jHQYg2DpXHXtfV/H2mlDl/p/oUSoUnD3rWrF8IDPTSpy/30KtiY9ijy4RhllbSxM5Y230rpvlty1qqlNI/g34thL15nFaU/aIWQ/KwiCqthldd3m92S9gQ+iY4YtJkxAFsVAWT8gF32pmCKeH5IMmihZqlno6pUG0pIHwIDAQABo4HlMIHiMB0GA1UdDgQWBBQxpPv3f9MSv1y+BoR07lNRWi78ODCBsgYDVR0jBIGqMIGngBQxpPv3f9MSv1y+BoR07lNRWi78OKGBg6SBgDB+MQswCQYDVQQGEwJXVzESMBAGA1UECBMJV29ybGR3aWRlMREwDwYDVQQHEwhYTUwgY2l0eTERMA8GA1UEChMIU2F2b24ucmIxITAfBgNVBAsTGEFrYW1pIHRlc3RpbmcgZGVwYXJ0bWVudDESMBAGA1UEAxMJQWthbWkgR2VtggkAtpCaO5i7Gm4wDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAZphue2C31+5SpoZiIQav3xtwfIt+PRtK0ZN0w2ZxR1LmbWS9jX4elvwE5B5Yyu4UmjyvXGA6j9s5PGedXMabpi9GWsaEfHRKsF/TrH0KauhPrAWTuc1UxMFM5zPc6LeWJ8ofaVIgg4S4UFnf/fnkc/BtMMDCIyb62HkRmV+FqOOD+LlkcT701VKty68ubCg9xKaLg7L4zZBPYJrt0iLY2LWKh4ABinxfA1DFEVw9PVIEQKopwkO1A10rrKbfZqALQg5egVQypfVJ7E0Nkq5VeT3d3u3ybnZw/ZprQR0uPm+Ap492itLMMUX3iyJkxteAfT+03ztKWEsmGMbZpzG7VA==</oasis:BinarySecurityToken><Signature xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/><SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/><Reference URI="#_779bc0e70903ff79e62739956a11c7e3584a9012"><Transforms><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><DigestValue>8yHW2c0jdon+cADkxk47/gLo0ps=</DigestValue></Reference><Reference URI="#_747c942c134dd275275707f2cf63e8de7881d367"><Transforms><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><DigestValue>eRsb4CWXD17hl5exQvaZYDnOQOM=</DigestValue></Reference><Reference URI="#_2dc10b4daca971ef4ddb482338ebd7ba30112e2a"><Transforms><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><DigestValue>1aznRVYGR81veFFG2lNU9WjUhDs=</DigestValue></Reference><Reference URI="#_1f546393fdadf04fd9afcf172658c78cfd1b735d"><Transforms><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><DigestValue>KXKU6ZFziN415Hd2K6WevzUihYs=</DigestValue></Reference><Reference URI="#_724554b8920321ee32020dac076be1f58d92d3c7"><Transforms><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><DigestValue>YrKqrE99N7hNGYEvrhifL/LaxKQ=</DigestValue></Reference><Reference URI="#uuid-639b8970-7644-4f9e-9bc4-9c2e367808fc-1"><Transforms><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><DigestValue>VevrJZBe3aVif18GuHIrSZz5my8=</DigestValue></Reference></SignedInfo><SignatureValue>NEJTWOxr2IdWOyV+b1XjRU1Koaa0OYDbz0MqErcqjEgLt3rgK2YyZpg2yMBB++YmlwhS2Gm/Iqnyv6U909hvF4Hg+9/kw/FiwqhavcW+/N9HZKo0vGww/rU4qcKrNdU/lETQhxfk5DpKAoAUWV6yGxnbP8GzTXWGtP4sfLlcFjfOkTnePEM7QLjJLk9l2YkvbmyaRClj3psYrh0Fo1G+LWZ7W8UpaPzoo8e+s2EkKDAbchWoQJp2vEIhLnRRWDMuweRpsURigjbIkJCKnawmZ8SG1nA68nYa9jTh6824XVepxbkvtvNzEFC6dmZAjwAWhADf1+7lpqUyml/wZyHWRw==</SignatureValue><KeyInfo><o:SecurityTokenReference><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"/></o:SecurityTokenReference></KeyInfo></Signature></oasis:Security><wsa:Action wsu:Id="_779bc0e70903ff79e62739956a11c7e3584a9012">SomeAction</wsa:Action><wsa:To wsu:Id="_747c942c134dd275275707f2cf63e8de7881d367">https://strict.endpoint/path</wsa:To><wsa:ReplyTo wsu:Id="_2dc10b4daca971ef4ddb482338ebd7ba30112e2a"><wsa:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:Address></wsa:ReplyTo><wsa:MessageID wsu:Id="_1f546393fdadf04fd9afcf172658c78cfd1b735d">SRV-0f687bbd-62503e99-926a4d3c-5dde443c-dbf6d68f</wsa:MessageID></soap:Header><soap:Body wsu:Id="_724554b8920321ee32020dac076be1f58d92d3c7"><messageCode>code</messageCode><!-- Comments should be ignored during canonicalization --><message>fake_message</message></soap:Body></soap:Envelope>
@@ -0,0 +1,3 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsa="http://www.w3.org/2005/08/addressing"><soap:Header unexpected="unexpected"><oasis:Security xmlns:oasis="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
3
+ <oasis: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" wsu:Id="uuid-639b8970-7644-4f9e-9bc4-9c2e367808fc-1">MIIEZTCCA02gAwIBAgIJALaQmjuYuxpuMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAldXMRIwEAYDVQQIEwlXb3JsZHdpZGUxETAPBgNVBAcTCFhNTCBjaXR5MREwDwYDVQQKEwhTYXZvbi5yYjEhMB8GA1UECxMYQWthbWkgdGVzdGluZyBkZXBhcnRtZW50MRIwEAYDVQQDEwlBa2FtaSBHZW0wHhcNMTQwNjEwMDg1NjEzWhcNMjQwNjA3MDg1NjEzWjB+MQswCQYDVQQGEwJXVzESMBAGA1UECBMJV29ybGR3aWRlMREwDwYDVQQHEwhYTUwgY2l0eTERMA8GA1UEChMIU2F2b24ucmIxITAfBgNVBAsTGEFrYW1pIHRlc3RpbmcgZGVwYXJ0bWVudDESMBAGA1UEAxMJQWthbWkgR2VtMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvjKxq8WnYOT7ymrSNmN95NFMXhLxdumQz0QniRURVQ1P2sOwxOw9mlFnMsdGwsTYUJ9TwwBvA82UAaHEp/mMlHVc0oIKBzMWXj3qK3paRpcooh9hVSGlnqGep+/mzpP9SgPeJRXUgewnnXYsdPkV3k+EFLP/ZwGKOu3lTf4eTNm+TfnW4jHQYg2DpXHXtfV/H2mlDl/p/oUSoUnD3rWrF8IDPTSpy/30KtiY9ijy4RhllbSxM5Y230rpvlty1qqlNI/g34thL15nFaU/aIWQ/KwiCqthldd3m92S9gQ+iY4YtJkxAFsVAWT8gF32pmCKeH5IMmihZqlno6pUG0pIHwIDAQABo4HlMIHiMB0GA1UdDgQWBBQxpPv3f9MSv1y+BoR07lNRWi78ODCBsgYDVR0jBIGqMIGngBQxpPv3f9MSv1y+BoR07lNRWi78OKGBg6SBgDB+MQswCQYDVQQGEwJXVzESMBAGA1UECBMJV29ybGR3aWRlMREwDwYDVQQHEwhYTUwgY2l0eTERMA8GA1UEChMIU2F2b24ucmIxITAfBgNVBAsTGEFrYW1pIHRlc3RpbmcgZGVwYXJ0bWVudDESMBAGA1UEAxMJQWthbWkgR2VtggkAtpCaO5i7Gm4wDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAZphue2C31+5SpoZiIQav3xtwfIt+PRtK0ZN0w2ZxR1LmbWS9jX4elvwE5B5Yyu4UmjyvXGA6j9s5PGedXMabpi9GWsaEfHRKsF/TrH0KauhPrAWTuc1UxMFM5zPc6LeWJ8ofaVIgg4S4UFnf/fnkc/BtMMDCIyb62HkRmV+FqOOD+LlkcT701VKty68ubCg9xKaLg7L4zZBPYJrt0iLY2LWKh4ABinxfA1DFEVw9PVIEQKopwkO1A10rrKbfZqALQg5egVQypfVJ7E0Nkq5VeT3d3u3ybnZw/ZprQR0uPm+Ap492itLMMUX3iyJkxteAfT+03ztKWEsmGMbZpzG7VA==</oasis:BinarySecurityToken><Signature xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/><SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/><Reference URI="#_779bc0e70903ff79e62739956a11c7e3584a9012"><Transforms><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><DigestValue>8yHW2c0jdon+cADkxk47/gLo0ps=</DigestValue></Reference><Reference URI="#_747c942c134dd275275707f2cf63e8de7881d367"><Transforms><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><DigestValue>eRsb4CWXD17hl5exQvaZYDnOQOM=</DigestValue></Reference><Reference URI="#_2dc10b4daca971ef4ddb482338ebd7ba30112e2a"><Transforms><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><DigestValue>1aznRVYGR81veFFG2lNU9WjUhDs=</DigestValue></Reference><Reference URI="#_1f546393fdadf04fd9afcf172658c78cfd1b735d"><Transforms><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><DigestValue>KXKU6ZFziN415Hd2K6WevzUihYs=</DigestValue></Reference><Reference URI="#_724554b8920321ee32020dac076be1f58d92d3c7"><Transforms><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><DigestValue>YrKqrE99N7hNGYEvrhifL/LaxKQ=</DigestValue></Reference><Reference URI="#uuid-639b8970-7644-4f9e-9bc4-9c2e367808fc-1"><Transforms><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><DigestValue>VevrJZBe3aVif18GuHIrSZz5my8=</DigestValue></Reference></SignedInfo><SignatureValue>NYETWOxr2IdWOyV+b1XjRU1Koaa0OYDbz0MqErcqjEgLt3rgK2YyZpg2yMBB++YmlwhS2Gm/Iqnyv6U909hvF4Hg+9/kw/FiwqhavcW+/N9HZKo0vGww/rU4qcKrNdU/lETQhxfk5DpKAoAUWV6yGxnbP8GzTXWGtP4sfLlcFjfOkTnePEM7QLjJLk9l2YkvbmyaRClj3psYrh0Fo1G+LWZ7W8UpaPzoo8e+s2EkKDAbchWoQJp2vEIhLnRRWDMuweRpsURigjbIkJCKnawmZ8SG1nA68nYa9jTh6824XVepxbkvtvNzEFC6dmZAjwAWhADf1+7lpqUyml/wZyHWRw==</SignatureValue><KeyInfo><o:SecurityTokenReference><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"/></o:SecurityTokenReference></KeyInfo></Signature></oasis:Security><wsa:Action wsu:Id="_779bc0e70903ff79e62739956a11c7e3584a9012">SomeAction</wsa:Action><wsa:To wsu:Id="_747c942c134dd275275707f2cf63e8de7881d367">https://strict.endpoint/path</wsa:To><wsa:ReplyTo wsu:Id="_2dc10b4daca971ef4ddb482338ebd7ba30112e2a"><wsa:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:Address></wsa:ReplyTo><wsa:MessageID wsu:Id="_1f546393fdadf04fd9afcf172658c78cfd1b735d">SRV-0f687bbd-62503e99-926a4d3c-5dde443c-dbf6d68f</wsa:MessageID></soap:Header><soap:Body wsu:Id="_724554b8920321ee32020dac076be1f58d92d3c7"><messageCode>code</messageCode><!-- Comments should be ignored during canonicalization --><message>message</message></soap:Body></soap:Envelope>
@@ -0,0 +1,3 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsa="http://www.w3.org/2005/08/addressing"><soap:Header><oasis:Security xmlns:oasis="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
3
+ <oasis: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" wsu:Id="uuid-639b8970-7644-4f9e-9bc4-9c2e367808fc-1">MIIEZTCCA02gAwIBAgIJALaQmjuYuxpuMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAldXMRIwEAYDVQQIEwlXb3JsZHdpZGUxETAPBgNVBAcTCFhNTCBjaXR5MREwDwYDVQQKEwhTYXZvbi5yYjEhMB8GA1UECxMYQWthbWkgdGVzdGluZyBkZXBhcnRtZW50MRIwEAYDVQQDEwlBa2FtaSBHZW0wHhcNMTQwNjEwMDg1NjEzWhcNMjQwNjA3MDg1NjEzWjB+MQswCQYDVQQGEwJXVzESMBAGA1UECBMJV29ybGR3aWRlMREwDwYDVQQHEwhYTUwgY2l0eTERMA8GA1UEChMIU2F2b24ucmIxITAfBgNVBAsTGEFrYW1pIHRlc3RpbmcgZGVwYXJ0bWVudDESMBAGA1UEAxMJQWthbWkgR2VtMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvjKxq8WnYOT7ymrSNmN95NFMXhLxdumQz0QniRURVQ1P2sOwxOw9mlFnMsdGwsTYUJ9TwwBvA82UAaHEp/mMlHVc0oIKBzMWXj3qK3paRpcooh9hVSGlnqGep+/mzpP9SgPeJRXUgewnnXYsdPkV3k+EFLP/ZwGKOu3lTf4eTNm+TfnW4jHQYg2DpXHXtfV/H2mlDl/p/oUSoUnD3rWrF8IDPTSpy/30KtiY9ijy4RhllbSxM5Y230rpvlty1qqlNI/g34thL15nFaU/aIWQ/KwiCqthldd3m92S9gQ+iY4YtJkxAFsVAWT8gF32pmCKeH5IMmihZqlno6pUG0pIHwIDAQABo4HlMIHiMB0GA1UdDgQWBBQxpPv3f9MSv1y+BoR07lNRWi78ODCBsgYDVR0jBIGqMIGngBQxpPv3f9MSv1y+BoR07lNRWi78OKGBg6SBgDB+MQswCQYDVQQGEwJXVzESMBAGA1UECBMJV29ybGR3aWRlMREwDwYDVQQHEwhYTUwgY2l0eTERMA8GA1UEChMIU2F2b24ucmIxITAfBgNVBAsTGEFrYW1pIHRlc3RpbmcgZGVwYXJ0bWVudDESMBAGA1UEAxMJQWthbWkgR2VtggkAtpCaO5i7Gm4wDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAZphue2C31+5SpoZiIQav3xtwfIt+PRtK0ZN0w2ZxR1LmbWS9jX4elvwE5B5Yyu4UmjyvXGA6j9s5PGedXMabpi9GWsaEfHRKsF/TrH0KauhPrAWTuc1UxMFM5zPc6LeWJ8ofaVIgg4S4UFnf/fnkc/BtMMDCIyb62HkRmV+FqOOD+LlkcT701VKty68ubCg9xKaLg7L4zZBPYJrt0iLY2LWKh4ABinxfA1DFEVw9PVIEQKopwkO1A10rrKbfZqALQg5egVQypfVJ7E0Nkq5VeT3d3u3ybnZw/ZprQR0uPm+Ap492itLMMUX3iyJkxteAfT+03ztKWEsmGMbZpzG7VA==</oasis:BinarySecurityToken><Signature xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/><SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/><Reference URI="#_779bc0e70903ff79e62739956a11c7e3584a9012"><Transforms><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><DigestValue>8yHW2c0jdon+cADkxk47/gLo0ps=</DigestValue></Reference><Reference URI="#_747c942c134dd275275707f2cf63e8de7881d367"><Transforms><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><DigestValue>eRsb4CWXD17hl5exQvaZYDnOQOM=</DigestValue></Reference><Reference URI="#_2dc10b4daca971ef4ddb482338ebd7ba30112e2a"><Transforms><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><DigestValue>1aznRVYGR81veFFG2lNU9WjUhDs=</DigestValue></Reference><Reference URI="#_1f546393fdadf04fd9afcf172658c78cfd1b735d"><Transforms><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><DigestValue>KXKU6ZFziN415Hd2K6WevzUihYs=</DigestValue></Reference><Reference URI="#_724554b8920321ee32020dac076be1f58d92d3c7"><Transforms><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><DigestValue>YrKqrE99N7hNGYEvrhifL/LaxKQ=</DigestValue></Reference><Reference URI="#uuid-639b8970-7644-4f9e-9bc4-9c2e367808fc-1"><Transforms><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><DigestValue>VevrJZBe3aVif18GuHIrSZz5my8=</DigestValue></Reference></SignedInfo><SignatureValue>NEJTWOxr2IdWOyV+b1XjRU1Koaa0OYDbz0MqErcqjEgLt3rgK2YyZpg2yMBB++YmlwhS2Gm/Iqnyv6U909hvF4Hg+9/kw/FiwqhavcW+/N9HZKo0vGww/rU4qcKrNdU/lETQhxfk5DpKAoAUWV6yGxnbP8GzTXWGtP4sfLlcFjfOkTnePEM7QLjJLk9l2YkvbmyaRClj3psYrh0Fo1G+LWZ7W8UpaPzoo8e+s2EkKDAbchWoQJp2vEIhLnRRWDMuweRpsURigjbIkJCKnawmZ8SG1nA68nYa9jTh6824XVepxbkvtvNzEFC6dmZAjwAWhADf1+7lpqUyml/wZyHWRw==</SignatureValue><KeyInfo><o:SecurityTokenReference><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"/></o:SecurityTokenReference></KeyInfo></Signature></oasis:Security><wsa:Action wsu:Id="_779bc0e70903ff79e62739956a11c7e3584a9012">SomeAction</wsa:Action><wsa:To wsu:Id="_747c942c134dd275275707f2cf63e8de7881d367">https://strict.endpoint/path</wsa:To><wsa:ReplyTo wsu:Id="_2dc10b4daca971ef4ddb482338ebd7ba30112e2a"><wsa:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:Address></wsa:ReplyTo><wsa:MessageID wsu:Id="_1f546393fdadf04fd9afcf172658c78cfd1b735d">SRV-0f687bbd-62503e99-926a4d3c-5dde443c-dbf6d68f</wsa:MessageID></soap:Header><soap:Body wsu:Id="_724554b8920321ee32020dac076be1f58d92d3c7"><messageCode>code</messageCode><!-- Comments should be ignored during canonicalization --><message>message</message></soap:Body></soap:Envelope>
@@ -0,0 +1,3 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <bzzz:Envelope xmlns:bzzz="http://www.w3.org/2003/05/soap-envelope" xmlns:argh="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:blam="http://www.w3.org/2005/08/addressing"><bzzz:Header><pfff:Security xmlns:pfff="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
3
+ <pfff: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" argh:Id="uuid-639b8970-7644-4f9e-9bc4-9c2e367808fc-1">MIIEZTCCA02gAwIBAgIJALaQmjuYuxpuMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAldXMRIwEAYDVQQIEwlXb3JsZHdpZGUxETAPBgNVBAcTCFhNTCBjaXR5MREwDwYDVQQKEwhTYXZvbi5yYjEhMB8GA1UECxMYQWthbWkgdGVzdGluZyBkZXBhcnRtZW50MRIwEAYDVQQDEwlBa2FtaSBHZW0wHhcNMTQwNjEwMDg1NjEzWhcNMjQwNjA3MDg1NjEzWjB+MQswCQYDVQQGEwJXVzESMBAGA1UECBMJV29ybGR3aWRlMREwDwYDVQQHEwhYTUwgY2l0eTERMA8GA1UEChMIU2F2b24ucmIxITAfBgNVBAsTGEFrYW1pIHRlc3RpbmcgZGVwYXJ0bWVudDESMBAGA1UEAxMJQWthbWkgR2VtMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvjKxq8WnYOT7ymrSNmN95NFMXhLxdumQz0QniRURVQ1P2sOwxOw9mlFnMsdGwsTYUJ9TwwBvA82UAaHEp/mMlHVc0oIKBzMWXj3qK3paRpcooh9hVSGlnqGep+/mzpP9SgPeJRXUgewnnXYsdPkV3k+EFLP/ZwGKOu3lTf4eTNm+TfnW4jHQYg2DpXHXtfV/H2mlDl/p/oUSoUnD3rWrF8IDPTSpy/30KtiY9ijy4RhllbSxM5Y230rpvlty1qqlNI/g34thL15nFaU/aIWQ/KwiCqthldd3m92S9gQ+iY4YtJkxAFsVAWT8gF32pmCKeH5IMmihZqlno6pUG0pIHwIDAQABo4HlMIHiMB0GA1UdDgQWBBQxpPv3f9MSv1y+BoR07lNRWi78ODCBsgYDVR0jBIGqMIGngBQxpPv3f9MSv1y+BoR07lNRWi78OKGBg6SBgDB+MQswCQYDVQQGEwJXVzESMBAGA1UECBMJV29ybGR3aWRlMREwDwYDVQQHEwhYTUwgY2l0eTERMA8GA1UEChMIU2F2b24ucmIxITAfBgNVBAsTGEFrYW1pIHRlc3RpbmcgZGVwYXJ0bWVudDESMBAGA1UEAxMJQWthbWkgR2VtggkAtpCaO5i7Gm4wDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAZphue2C31+5SpoZiIQav3xtwfIt+PRtK0ZN0w2ZxR1LmbWS9jX4elvwE5B5Yyu4UmjyvXGA6j9s5PGedXMabpi9GWsaEfHRKsF/TrH0KauhPrAWTuc1UxMFM5zPc6LeWJ8ofaVIgg4S4UFnf/fnkc/BtMMDCIyb62HkRmV+FqOOD+LlkcT701VKty68ubCg9xKaLg7L4zZBPYJrt0iLY2LWKh4ABinxfA1DFEVw9PVIEQKopwkO1A10rrKbfZqALQg5egVQypfVJ7E0Nkq5VeT3d3u3ybnZw/ZprQR0uPm+Ap492itLMMUX3iyJkxteAfT+03ztKWEsmGMbZpzG7VA==</pfff:BinarySecurityToken><Signature xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/><SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/><Reference URI="#_32e8273d0122bb59bb8369e2cd2c3bc4d9f0fd94"><Transforms><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><DigestValue>/qQ8ucFN9UNj/PeYzpqdBaqfbDE=</DigestValue></Reference><Reference URI="#_ae66d576c72c371b63c5cb64f506a7cfbb6523b1"><Transforms><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><DigestValue>zwhy5nIdDYQw+PAtp5xJF37AwKY=</DigestValue></Reference><Reference URI="#_1f38c96249928ef39807ddc3ae7810691e080b3d"><Transforms><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><DigestValue>0ka0+fILJ/K0l+QquJ7oGI5BZ/g=</DigestValue></Reference><Reference URI="#_10cdeece6969bac5d9e6ac8d7d40df9c604781a4"><Transforms><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><DigestValue>JukA7+7mBcqtplGntFoHJ+Fk+jQ=</DigestValue></Reference><Reference URI="#_35c546657feb5dc1cf4474488f7b5d5a991f0604"><Transforms><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><DigestValue>fCQv9hvbeyNBGBrqbJ/A166hSB8=</DigestValue></Reference><Reference URI="#uuid-639b8970-7644-4f9e-9bc4-9c2e367808fc-1"><Transforms><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><DigestValue>5uVUuwPoZPnXoWjo5czBnYIywcA=</DigestValue></Reference></SignedInfo><SignatureValue>BXSWTruDmrWJYwmqqkMDUquD+Q39mOLJ2d2XZ31o/jU0jdaWg4fGwTnAYsIELbDdLBbFj5R9gsMSzw+nprglOtuMyheYuO4EZbwJijeR2n5hoaYAqQdjA4n8tFXiKo+puiKvAsWUDmVqVqSLOUtKCTCxL+NjJavgUjVKwmK3dRgMKcH4RZHTM/qgMT42N7DvSOLbuBbW/hblz74pcc86vDMrMOLrC3z7F18vOFTUpoScZuFf14wes6G+FoS7un7EvLV4Yvjq15VUh7Tczv2qzzkWfUY0So+SujGo+JivULYjJ9UJB+sL6SOrazgYNLXyz1eHHcfraUKHKJVOp4naqg==</SignatureValue><KeyInfo><o:SecurityTokenReference><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"/></o:SecurityTokenReference></KeyInfo></Signature></pfff:Security><blam:Action argh:Id="_32e8273d0122bb59bb8369e2cd2c3bc4d9f0fd94">SomeAction</blam:Action><blam:To argh:Id="_ae66d576c72c371b63c5cb64f506a7cfbb6523b1">https://strict.endpoint/path</blam:To><blam:ReplyTo argh:Id="_1f38c96249928ef39807ddc3ae7810691e080b3d"><blam:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</blam:Address></blam:ReplyTo><blam:MessageID argh:Id="_10cdeece6969bac5d9e6ac8d7d40df9c604781a4">SRV-0f687bbd-62503e99-926a4d3c-5dde443c-dbf6d68f</blam:MessageID></bzzz:Header><bzzz:Body argh:Id="_35c546657feb5dc1cf4474488f7b5d5a991f0604"><ws:messageCode>code</ws:messageCode><!-- Comments should be ignored during canonicalization --><ws:message>message</ws:message></bzzz:Body></bzzz:Envelope>
@@ -0,0 +1,3 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsa="http://www.w3.org/2005/08/addressing"><soap:Header><oasis:Security xmlns:oasis="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
3
+ <oasis: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" wsu:Id="uuid-639b8970-7644-4f9e-9bc4-9c2e367808fc-1">MIIEZTCCA02gAwIBAgIJALaQmjuYuxpuMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAldXMRIwEAYDVQQIEwlXb3JsZHdpZGUxETAPBgNVBAcTCFhNTCBjaXR5MREwDwYDVQQKEwhTYXZvbi5yYjEhMB8GA1UECxMYQWthbWkgdGVzdGluZyBkZXBhcnRtZW50MRIwEAYDVQQDEwlBa2FtaSBHZW0wHhcNMTQwNjEwMDg1NjEzWhcNMjQwNjA3MDg1NjEzWjB+MQswCQYDVQQGEwJXVzESMBAGA1UECBMJV29ybGR3aWRlMREwDwYDVQQHEwhYTUwgY2l0eTERMA8GA1UEChMIU2F2b24ucmIxITAfBgNVBAsTGEFrYW1pIHRlc3RpbmcgZGVwYXJ0bWVudDESMBAGA1UEAxMJQWthbWkgR2VtMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvjKxq8WnYOT7ymrSNmN95NFMXhLxdumQz0QniRURVQ1P2sOwxOw9mlFnMsdGwsTYUJ9TwwBvA82UAaHEp/mMlHVc0oIKBzMWXj3qK3paRpcooh9hVSGlnqGep+/mzpP9SgPeJRXUgewnnXYsdPkV3k+EFLP/ZwGKOu3lTf4eTNm+TfnW4jHQYg2DpXHXtfV/H2mlDl/p/oUSoUnD3rWrF8IDPTSpy/30KtiY9ijy4RhllbSxM5Y230rpvlty1qqlNI/g34thL15nFaU/aIWQ/KwiCqthldd3m92S9gQ+iY4YtJkxAFsVAWT8gF32pmCKeH5IMmihZqlno6pUG0pIHwIDAQABo4HlMIHiMB0GA1UdDgQWBBQxpPv3f9MSv1y+BoR07lNRWi78ODCBsgYDVR0jBIGqMIGngBQxpPv3f9MSv1y+BoR07lNRWi78OKGBg6SBgDB+MQswCQYDVQQGEwJXVzESMBAGA1UECBMJV29ybGR3aWRlMREwDwYDVQQHEwhYTUwgY2l0eTERMA8GA1UEChMIU2F2b24ucmIxITAfBgNVBAsTGEFrYW1pIHRlc3RpbmcgZGVwYXJ0bWVudDESMBAGA1UEAxMJQWthbWkgR2VtggkAtpCaO5i7Gm4wDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAZphue2C31+5SpoZiIQav3xtwfIt+PRtK0ZN0w2ZxR1LmbWS9jX4elvwE5B5Yyu4UmjyvXGA6j9s5PGedXMabpi9GWsaEfHRKsF/TrH0KauhPrAWTuc1UxMFM5zPc6LeWJ8ofaVIgg4S4UFnf/fnkc/BtMMDCIyb62HkRmV+FqOOD+LlkcT701VKty68ubCg9xKaLg7L4zZBPYJrt0iLY2LWKh4ABinxfA1DFEVw9PVIEQKopwkO1A10rrKbfZqALQg5egVQypfVJ7E0Nkq5VeT3d3u3ybnZw/ZprQR0uPm+Ap492itLMMUX3iyJkxteAfT+03ztKWEsmGMbZpzG7VA==</oasis:BinarySecurityToken><Signature xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/><SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/><Reference URI="#_779bc0e70903ff79e62739956a11c7e3584a9012"><Transforms><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr3411"/><DigestValue>Ua/7KXhpaT9/zNLttYl7kWc6zxrssuvI9FopvNyl/hs=</DigestValue></Reference><Reference URI="#_747c942c134dd275275707f2cf63e8de7881d367"><Transforms><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr3411"/><DigestValue>0tk2wqp+ybAP16lhi/7Rrvl3B7+/sOLDmX1jev5ZMdM=</DigestValue></Reference><Reference URI="#_2dc10b4daca971ef4ddb482338ebd7ba30112e2a"><Transforms><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr3411"/><DigestValue>WI8rWnflY+PhigG807yZijyET1K8iBLMdX4KOgWoEjU=</DigestValue></Reference><Reference URI="#_1f546393fdadf04fd9afcf172658c78cfd1b735d"><Transforms><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr3411"/><DigestValue>rvdJaIekkEvD7QImJX7nMevmVQN5B3xW5ZExpyoMdN0=</DigestValue></Reference><Reference URI="#_724554b8920321ee32020dac076be1f58d92d3c7"><Transforms><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr3411"/><DigestValue>3OkHjVwY6I/pj8hKhOzKfPOdBjAFcjCzM6IsRJpbQEU=</DigestValue></Reference><Reference URI="#uuid-639b8970-7644-4f9e-9bc4-9c2e367808fc-1"><Transforms><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr3411"/><DigestValue>zTmupwEL0lMuPyQlc9qx9+R+SOuIA8zwAqOA0qnXI1g=</DigestValue></Reference></SignedInfo><SignatureValue>TFqPZHrnQuN8QdquaMSG4uKkijaXmsNa1bikQ5z5JTrfGsOHaAZc/+a/jIo5Gd+m7eF1O22rtk8lm1MPmDaRXBc71uQ5yJ+qefCShfYua/gb9y24Cowoh6ONf+WymVJ1fi/H2DjmZ1T1lRq3KoqTlv7tk34t1Ta2hjFv0buBO039woXfNflbFNsfvzlTRgMeZiDC5tMGe7tmlAdll3eD/R1lGCMgRHY6KraSeksWwNVPewDyqc26nv7/R6a4VJ5E7UvDAgSi/pvy37QROiFSt59ONSM1PPaGE18U0A6Q6kH4o6JM6+bqa5jKCThLqf3yyDRKha5Co+A7s/OerJuA0A==</SignatureValue><KeyInfo><o:SecurityTokenReference><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"/></o:SecurityTokenReference></KeyInfo></Signature></oasis:Security><wsa:Action wsu:Id="_779bc0e70903ff79e62739956a11c7e3584a9012">SomeAction</wsa:Action><wsa:To wsu:Id="_747c942c134dd275275707f2cf63e8de7881d367">https://strict.endpoint/path</wsa:To><wsa:ReplyTo wsu:Id="_2dc10b4daca971ef4ddb482338ebd7ba30112e2a"><wsa:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:Address></wsa:ReplyTo><wsa:MessageID wsu:Id="_1f546393fdadf04fd9afcf172658c78cfd1b735d">SRV-0f687bbd-62503e99-926a4d3c-5dde443c-dbf6d68f</wsa:MessageID></soap:Header><soap:Body wsu:Id="_724554b8920321ee32020dac076be1f58d92d3c7"><messageCode>code</messageCode><!-- Comments should be ignored during canonicalization --><message>message</message></soap:Body></soap:Envelope>
@@ -0,0 +1,3 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsa="http://www.w3.org/2005/08/addressing"><soap:Header><oasis:Security xmlns:oasis="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
3
+ <oasis: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" wsu:Id="uuid-639b8970-7644-4f9e-9bc4-9c2e367808fc-1">MIIEZTCCA02gAwIBAgIJALaQmjuYuxpuMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAldXMRIwEAYDVQQIEwlXb3JsZHdpZGUxETAPBgNVBAcTCFhNTCBjaXR5MREwDwYDVQQKEwhTYXZvbi5yYjEhMB8GA1UECxMYQWthbWkgdGVzdGluZyBkZXBhcnRtZW50MRIwEAYDVQQDEwlBa2FtaSBHZW0wHhcNMTQwNjEwMDg1NjEzWhcNMjQwNjA3MDg1NjEzWjB+MQswCQYDVQQGEwJXVzESMBAGA1UECBMJV29ybGR3aWRlMREwDwYDVQQHEwhYTUwgY2l0eTERMA8GA1UEChMIU2F2b24ucmIxITAfBgNVBAsTGEFrYW1pIHRlc3RpbmcgZGVwYXJ0bWVudDESMBAGA1UEAxMJQWthbWkgR2VtMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvjKxq8WnYOT7ymrSNmN95NFMXhLxdumQz0QniRURVQ1P2sOwxOw9mlFnMsdGwsTYUJ9TwwBvA82UAaHEp/mMlHVc0oIKBzMWXj3qK3paRpcooh9hVSGlnqGep+/mzpP9SgPeJRXUgewnnXYsdPkV3k+EFLP/ZwGKOu3lTf4eTNm+TfnW4jHQYg2DpXHXtfV/H2mlDl/p/oUSoUnD3rWrF8IDPTSpy/30KtiY9ijy4RhllbSxM5Y230rpvlty1qqlNI/g34thL15nFaU/aIWQ/KwiCqthldd3m92S9gQ+iY4YtJkxAFsVAWT8gF32pmCKeH5IMmihZqlno6pUG0pIHwIDAQABo4HlMIHiMB0GA1UdDgQWBBQxpPv3f9MSv1y+BoR07lNRWi78ODCBsgYDVR0jBIGqMIGngBQxpPv3f9MSv1y+BoR07lNRWi78OKGBg6SBgDB+MQswCQYDVQQGEwJXVzESMBAGA1UECBMJV29ybGR3aWRlMREwDwYDVQQHEwhYTUwgY2l0eTERMA8GA1UEChMIU2F2b24ucmIxITAfBgNVBAsTGEFrYW1pIHRlc3RpbmcgZGVwYXJ0bWVudDESMBAGA1UEAxMJQWthbWkgR2VtggkAtpCaO5i7Gm4wDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAZphue2C31+5SpoZiIQav3xtwfIt+PRtK0ZN0w2ZxR1LmbWS9jX4elvwE5B5Yyu4UmjyvXGA6j9s5PGedXMabpi9GWsaEfHRKsF/TrH0KauhPrAWTuc1UxMFM5zPc6LeWJ8ofaVIgg4S4UFnf/fnkc/BtMMDCIyb62HkRmV+FqOOD+LlkcT701VKty68ubCg9xKaLg7L4zZBPYJrt0iLY2LWKh4ABinxfA1DFEVw9PVIEQKopwkO1A10rrKbfZqALQg5egVQypfVJ7E0Nkq5VeT3d3u3ybnZw/ZprQR0uPm+Ap492itLMMUX3iyJkxteAfT+03ztKWEsmGMbZpzG7VA==</oasis:BinarySecurityToken><Signature xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/><SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/><Reference URI="#_779bc0e70903ff79e62739956a11c7e3584a9012"><Transforms><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/><DigestValue>5kMYzrEfrLHK1wquUdWVF9ZxWLWh1p3AUi55JEcEpwA=</DigestValue></Reference><Reference URI="#_747c942c134dd275275707f2cf63e8de7881d367"><Transforms><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/><DigestValue>kXFE39LW1LZapv8qvvwDI1aAYGvpIyJJt5tfwFHpWLM=</DigestValue></Reference><Reference URI="#_2dc10b4daca971ef4ddb482338ebd7ba30112e2a"><Transforms><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/><DigestValue>bd5OjPsMDJpwQV1Y3F4fFd3aAdV73cBYkpqu/R/ywPs=</DigestValue></Reference><Reference URI="#_1f546393fdadf04fd9afcf172658c78cfd1b735d"><Transforms><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/><DigestValue>EsMzDJn7KGXHPwFqTGiaa8E17Wp67tFomVdODtNmKQ4=</DigestValue></Reference><Reference URI="#_724554b8920321ee32020dac076be1f58d92d3c7"><Transforms><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/><DigestValue>5gEEiIwYC1zy99DExX+YRXD1Sv8+xVgGPeyDQjMPddU=</DigestValue></Reference><Reference URI="#uuid-639b8970-7644-4f9e-9bc4-9c2e367808fc-1"><Transforms><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/><DigestValue>U+JTJP1qMZnzGV7bhlQ7y4D/aeYO2ajghskz4mjFNwI=</DigestValue></Reference></SignedInfo><SignatureValue>Fh+YPbR+D1DQcEvdlYn2krKGI445VKRW75mNtIm/n10k0QoAwL+BQ49cnc81UTzZBB1bs22Y6wDGFYwLXMhGa3YioGoyo0IqnCacIDuaNn1OjUVWGDheEl8wTvKIHPDMEhkb6XFLXokLjv/IXdoNq7g7sbhoPd8Qcx8CKYU3aDq1oyiCrtPbowDf4YEBsKxMkZbR4jXzjUmhNI3A82bzTweQLrkxgB/DmtyPHLXF/jitdzKqpKM/K7+4BVWuuKcOFIKYcN3gn4lTXPCVXfCiwhVhIogW+mmC5mjmglKP80hSUBn5csKLbFB8pHtBDcfO9PPV1NoaUtgOwdWGEKqI3w==</SignatureValue><KeyInfo><o:SecurityTokenReference><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"/></o:SecurityTokenReference></KeyInfo></Signature></oasis:Security><wsa:Action wsu:Id="_779bc0e70903ff79e62739956a11c7e3584a9012">SomeAction</wsa:Action><wsa:To wsu:Id="_747c942c134dd275275707f2cf63e8de7881d367">https://strict.endpoint/path</wsa:To><wsa:ReplyTo wsu:Id="_2dc10b4daca971ef4ddb482338ebd7ba30112e2a"><wsa:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:Address></wsa:ReplyTo><wsa:MessageID wsu:Id="_1f546393fdadf04fd9afcf172658c78cfd1b735d">SRV-0f687bbd-62503e99-926a4d3c-5dde443c-dbf6d68f</wsa:MessageID></soap:Header><soap:Body wsu:Id="_724554b8920321ee32020dac076be1f58d92d3c7"><messageCode>code</messageCode><!-- Comments should be ignored during canonicalization --><message>message</message></soap:Body></soap:Envelope>
@@ -0,0 +1,75 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsa="http://www.w3.org/2005/08/addressing">
3
+ <soap:Header>
4
+ <oasis:Security xmlns:oasis="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
5
+ <oasis: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" wsu:Id="uuid-639b8970-7644-4f9e-9bc4-9c2e367808fc-1">MIIEZTCCA02gAwIBAgIJALaQmjuYuxpuMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAldXMRIwEAYDVQQIEwlXb3JsZHdpZGUxETAPBgNVBAcTCFhNTCBjaXR5MREwDwYDVQQKEwhTYXZvbi5yYjEhMB8GA1UECxMYQWthbWkgdGVzdGluZyBkZXBhcnRtZW50MRIwEAYDVQQDEwlBa2FtaSBHZW0wHhcNMTQwNjEwMDg1NjEzWhcNMjQwNjA3MDg1NjEzWjB+MQswCQYDVQQGEwJXVzESMBAGA1UECBMJV29ybGR3aWRlMREwDwYDVQQHEwhYTUwgY2l0eTERMA8GA1UEChMIU2F2b24ucmIxITAfBgNVBAsTGEFrYW1pIHRlc3RpbmcgZGVwYXJ0bWVudDESMBAGA1UEAxMJQWthbWkgR2VtMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvjKxq8WnYOT7ymrSNmN95NFMXhLxdumQz0QniRURVQ1P2sOwxOw9mlFnMsdGwsTYUJ9TwwBvA82UAaHEp/mMlHVc0oIKBzMWXj3qK3paRpcooh9hVSGlnqGep+/mzpP9SgPeJRXUgewnnXYsdPkV3k+EFLP/ZwGKOu3lTf4eTNm+TfnW4jHQYg2DpXHXtfV/H2mlDl/p/oUSoUnD3rWrF8IDPTSpy/30KtiY9ijy4RhllbSxM5Y230rpvlty1qqlNI/g34thL15nFaU/aIWQ/KwiCqthldd3m92S9gQ+iY4YtJkxAFsVAWT8gF32pmCKeH5IMmihZqlno6pUG0pIHwIDAQABo4HlMIHiMB0GA1UdDgQWBBQxpPv3f9MSv1y+BoR07lNRWi78ODCBsgYDVR0jBIGqMIGngBQxpPv3f9MSv1y+BoR07lNRWi78OKGBg6SBgDB+MQswCQYDVQQGEwJXVzESMBAGA1UECBMJV29ybGR3aWRlMREwDwYDVQQHEwhYTUwgY2l0eTERMA8GA1UEChMIU2F2b24ucmIxITAfBgNVBAsTGEFrYW1pIHRlc3RpbmcgZGVwYXJ0bWVudDESMBAGA1UEAxMJQWthbWkgR2VtggkAtpCaO5i7Gm4wDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAZphue2C31+5SpoZiIQav3xtwfIt+PRtK0ZN0w2ZxR1LmbWS9jX4elvwE5B5Yyu4UmjyvXGA6j9s5PGedXMabpi9GWsaEfHRKsF/TrH0KauhPrAWTuc1UxMFM5zPc6LeWJ8ofaVIgg4S4UFnf/fnkc/BtMMDCIyb62HkRmV+FqOOD+LlkcT701VKty68ubCg9xKaLg7L4zZBPYJrt0iLY2LWKh4ABinxfA1DFEVw9PVIEQKopwkO1A10rrKbfZqALQg5egVQypfVJ7E0Nkq5VeT3d3u3ybnZw/ZprQR0uPm+Ap492itLMMUX3iyJkxteAfT+03ztKWEsmGMbZpzG7VA==</oasis:BinarySecurityToken>
6
+ <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
7
+ <SignedInfo>
8
+ <CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
9
+ <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
10
+ <Reference URI="#_779bc0e70903ff79e62739956a11c7e3584a9012">
11
+ <Transforms>
12
+ <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
13
+ </Transforms>
14
+ <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
15
+ <DigestValue>8yHW2c0jdon+cADkxk47/gLo0ps=</DigestValue>
16
+ </Reference>
17
+ <Reference URI="#_747c942c134dd275275707f2cf63e8de7881d367">
18
+ <Transforms>
19
+ <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
20
+ </Transforms>
21
+ <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
22
+ <DigestValue>eRsb4CWXD17hl5exQvaZYDnOQOM=</DigestValue>
23
+ </Reference>
24
+ <Reference URI="#_2dc10b4daca971ef4ddb482338ebd7ba30112e2a">
25
+ <Transforms>
26
+ <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
27
+ </Transforms>
28
+ <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
29
+ <DigestValue>1aznRVYGR81veFFG2lNU9WjUhDs=</DigestValue>
30
+ </Reference>
31
+ <Reference URI="#_1f546393fdadf04fd9afcf172658c78cfd1b735d">
32
+ <Transforms>
33
+ <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
34
+ </Transforms>
35
+ <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
36
+ <DigestValue>KXKU6ZFziN415Hd2K6WevzUihYs=</DigestValue>
37
+ </Reference>
38
+ <Reference URI="#_724554b8920321ee32020dac076be1f58d92d3c7">
39
+ <Transforms>
40
+ <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
41
+ </Transforms>
42
+ <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
43
+ <DigestValue>YrKqrE99N7hNGYEvrhifL/LaxKQ=</DigestValue>
44
+ </Reference>
45
+ <Reference URI="#uuid-639b8970-7644-4f9e-9bc4-9c2e367808fc-1">
46
+ <Transforms>
47
+ <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
48
+ </Transforms>
49
+ <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
50
+ <DigestValue>VevrJZBe3aVif18GuHIrSZz5my8=</DigestValue>
51
+ </Reference>
52
+ </SignedInfo>
53
+ <SignatureValue>
54
+ NEJTWOxr2IdWOyV+b1XjRU1Koaa0OYDbz0MqErcqjEgLt3rgK2YyZpg2yMBB++YmlwhS2Gm/Iqnyv6U909hvF4Hg+9/kw/FiwqhavcW+/N9HZKo0vGww/rU4qcKrNdU/lETQhxfk5DpKAoAUWV6yGxnbP8GzTXWGtP4sfLlcFjfOkTnePEM7QLjJLk9l2YkvbmyaRClj3psYrh0Fo1G+LWZ7W8UpaPzoo8e+s2EkKDAbchWoQJp2vEIhLnRRWDMuweRpsURigjbIkJCKnawmZ8SG1nA68nYa9jTh6824XVepxbkvtvNzEFC6dmZAjwAWhADf1+7lpqUyml/wZyHWRw==
55
+ </SignatureValue>
56
+ <KeyInfo>
57
+ <o:SecurityTokenReference>
58
+ <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"/>
59
+ </o:SecurityTokenReference>
60
+ </KeyInfo>
61
+ </Signature>
62
+ </oasis:Security>
63
+ <wsa:Action wsu:Id="_779bc0e70903ff79e62739956a11c7e3584a9012">SomeAction</wsa:Action>
64
+ <wsa:To wsu:Id="_747c942c134dd275275707f2cf63e8de7881d367">https://strict.endpoint/path</wsa:To>
65
+ <wsa:ReplyTo wsu:Id="_2dc10b4daca971ef4ddb482338ebd7ba30112e2a">
66
+ <wsa:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:Address>
67
+ </wsa:ReplyTo>
68
+ <wsa:MessageID wsu:Id="_1f546393fdadf04fd9afcf172658c78cfd1b735d">SRV-0f687bbd-62503e99-926a4d3c-5dde443c-dbf6d68f</wsa:MessageID>
69
+ </soap:Header>
70
+ <soap:Body wsu:Id="_724554b8920321ee32020dac076be1f58d92d3c7">
71
+ <messageCode>code</messageCode>
72
+ <!-- Comments should be ignored during canonicalization -->
73
+ <message>message</message>
74
+ </soap:Body>
75
+ </soap:Envelope>
@@ -1,2 +1,6 @@
1
1
  require "bundler"
2
2
  Bundler.require :default, :development
3
+
4
+ def fixture(local_path)
5
+ File.read(File.join(File.dirname(__FILE__), 'fixtures', local_path))
6
+ end
metadata CHANGED
@@ -1,97 +1,97 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: akami
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.2
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Harrington
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-18 00:00:00.000000000 Z
11
+ date: 2015-04-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gyoku
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: 0.4.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: 0.4.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: nokogiri
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ~>
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
47
  version: '10.0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ~>
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '10.0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rspec
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ~>
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '2.12'
61
+ version: '2.14'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ~>
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '2.12'
68
+ version: '2.14'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: mocha
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ~>
73
+ - - "~>"
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0.13'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ~>
80
+ - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0.13'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: timecop
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - ~>
87
+ - - "~>"
88
88
  - !ruby/object:Gem::Version
89
89
  version: '0.5'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - ~>
94
+ - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0.5'
97
97
  description: Building Web Service Security
@@ -101,9 +101,9 @@ executables: []
101
101
  extensions: []
102
102
  extra_rdoc_files: []
103
103
  files:
104
- - .gitignore
105
- - .rspec
106
- - .travis.yml
104
+ - ".gitignore"
105
+ - ".rspec"
106
+ - ".travis.yml"
107
107
  - CHANGELOG.md
108
108
  - Gemfile
109
109
  - LICENSE
@@ -119,7 +119,19 @@ files:
119
119
  - lib/akami/wsse/signature.rb
120
120
  - lib/akami/wsse/verify_signature.rb
121
121
  - lib/akami/xpath_helper.rb
122
+ - spec/akami/wsse/signature_spec.rb
123
+ - spec/akami/wsse/verify_signature_spec.rb
122
124
  - spec/akami/wsse_spec.rb
125
+ - spec/fixtures/akami/wsse/signature/cert.pem
126
+ - spec/fixtures/akami/wsse/signature/unsigned.xml
127
+ - spec/fixtures/akami/wsse/verify_signature/invalid_digest_changed.xml
128
+ - spec/fixtures/akami/wsse/verify_signature/invalid_digested_changed.xml
129
+ - spec/fixtures/akami/wsse/verify_signature/invalid_signature_changed.xml
130
+ - spec/fixtures/akami/wsse/verify_signature/valid.xml
131
+ - spec/fixtures/akami/wsse/verify_signature/valid_namespaces.xml
132
+ - spec/fixtures/akami/wsse/verify_signature/valid_sha1_gost.xml
133
+ - spec/fixtures/akami/wsse/verify_signature/valid_sha256.xml
134
+ - spec/fixtures/akami/wsse/verify_signature/valid_whitespaces.xml
123
135
  - spec/spec_helper.rb
124
136
  homepage: https://github.com/savonrb/akami
125
137
  licenses:
@@ -131,20 +143,32 @@ require_paths:
131
143
  - lib
132
144
  required_ruby_version: !ruby/object:Gem::Requirement
133
145
  requirements:
134
- - - '>='
146
+ - - ">="
135
147
  - !ruby/object:Gem::Version
136
- version: '0'
148
+ version: 1.9.2
137
149
  required_rubygems_version: !ruby/object:Gem::Requirement
138
150
  requirements:
139
- - - '>='
151
+ - - ">="
140
152
  - !ruby/object:Gem::Version
141
153
  version: '0'
142
154
  requirements: []
143
155
  rubyforge_project: akami
144
- rubygems_version: 2.1.11
156
+ rubygems_version: 2.2.2
145
157
  signing_key:
146
158
  specification_version: 4
147
159
  summary: Web Service Security
148
160
  test_files:
161
+ - spec/akami/wsse/signature_spec.rb
162
+ - spec/akami/wsse/verify_signature_spec.rb
149
163
  - spec/akami/wsse_spec.rb
164
+ - spec/fixtures/akami/wsse/signature/cert.pem
165
+ - spec/fixtures/akami/wsse/signature/unsigned.xml
166
+ - spec/fixtures/akami/wsse/verify_signature/invalid_digest_changed.xml
167
+ - spec/fixtures/akami/wsse/verify_signature/invalid_digested_changed.xml
168
+ - spec/fixtures/akami/wsse/verify_signature/invalid_signature_changed.xml
169
+ - spec/fixtures/akami/wsse/verify_signature/valid.xml
170
+ - spec/fixtures/akami/wsse/verify_signature/valid_namespaces.xml
171
+ - spec/fixtures/akami/wsse/verify_signature/valid_sha1_gost.xml
172
+ - spec/fixtures/akami/wsse/verify_signature/valid_sha256.xml
173
+ - spec/fixtures/akami/wsse/verify_signature/valid_whitespaces.xml
150
174
  - spec/spec_helper.rb