xmldsig-fiscalizer 0.2.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +19 -0
- data/.rspec +2 -0
- data/.travis.yml +4 -0
- data/CHANGELOG.md +4 -0
- data/Gemfile +12 -0
- data/Guardfile +24 -0
- data/LICENSE +22 -0
- data/README.md +80 -0
- data/Rakefile +10 -0
- data/lib/xmldsig.rb +20 -0
- data/lib/xmldsig/canonicalizer.rb +30 -0
- data/lib/xmldsig/reference.rb +80 -0
- data/lib/xmldsig/signature.rb +93 -0
- data/lib/xmldsig/signed_document.rb +26 -0
- data/lib/xmldsig/transforms.rb +26 -0
- data/lib/xmldsig/transforms/canonicalize.rb +25 -0
- data/lib/xmldsig/transforms/enveloped_signature.rb +10 -0
- data/lib/xmldsig/transforms/transform.rb +18 -0
- data/lib/xmldsig/version.rb +3 -0
- data/signing_service.rb +133 -0
- data/spec/fixtures/certificate.cer +16 -0
- data/spec/fixtures/certificate2.cer +16 -0
- data/spec/fixtures/key.pem +15 -0
- data/spec/fixtures/signed.xml +23 -0
- data/spec/fixtures/signed/ideal.cert +18 -0
- data/spec/fixtures/signed/ideal.txt +41 -0
- data/spec/fixtures/unsigned.xml +21 -0
- data/spec/fixtures/unsigned/canonicalizer_1_0.xml +19 -0
- data/spec/fixtures/unsigned/canonicalizer_1_1.xml +19 -0
- data/spec/fixtures/unsigned/canonicalizer_exc.xml +21 -0
- data/spec/fixtures/unsigned/digest_sha1.xml +21 -0
- data/spec/fixtures/unsigned/with_soap_envelope.xml +33 -0
- data/spec/fixtures/unsigned/without_canonicalization.xml +18 -0
- data/spec/fixtures/unsigned/without_namespace_prefix.xml +19 -0
- data/spec/fixtures/unsigned/without_reference_uri.xml +21 -0
- data/spec/fixtures/unsigned_multiple_references.xml +38 -0
- data/spec/fixtures/unsigned_nested_signature.xml +40 -0
- data/spec/lib/xmldsig/reference_spec.rb +65 -0
- data/spec/lib/xmldsig/signature_spec.rb +100 -0
- data/spec/lib/xmldsig/signed_document_spec.rb +94 -0
- data/spec/lib/xmldsig/transforms/enveloped_signature_spec.rb +18 -0
- data/spec/lib/xmldsig/transforms/transform_spec.rb +10 -0
- data/spec/lib/xmldsig_spec.rb +47 -0
- data/spec/spec_helper.rb +22 -0
- data/xmldsig.gemspec +20 -0
- metadata +127 -0
@@ -0,0 +1,26 @@
|
|
1
|
+
module Xmldsig
|
2
|
+
class Transforms < Array
|
3
|
+
|
4
|
+
def apply(node)
|
5
|
+
@node = node
|
6
|
+
each do |transform_node|
|
7
|
+
@node = get_transform(@node, transform_node).transform
|
8
|
+
end
|
9
|
+
@node
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def get_transform(node, transform_node)
|
15
|
+
case transform_node.get_attribute("Algorithm")
|
16
|
+
when "http://www.w3.org/2000/09/xmldsig#enveloped-signature"
|
17
|
+
Transforms::EnvelopedSignature.new(node, transform_node)
|
18
|
+
when "http://www.w3.org/2001/10/xml-exc-c14n#",
|
19
|
+
"http://www.w3.org/TR/2001/REC-xml-c14n-20010315",
|
20
|
+
"http://www.w3.org/2006/12/xml-c14n11"
|
21
|
+
Transforms::Canonicalize.new(node, transform_node)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Xmldsig
|
2
|
+
class Transforms < Array
|
3
|
+
class Canonicalize < Transform
|
4
|
+
def transform
|
5
|
+
self.node = Canonicalizer.new(node, algorithm, inclusive_namespaces).canonicalize
|
6
|
+
node
|
7
|
+
end
|
8
|
+
|
9
|
+
private
|
10
|
+
|
11
|
+
def algorithm
|
12
|
+
transform_node.get_attribute("Algorithm")
|
13
|
+
end
|
14
|
+
|
15
|
+
def inclusive_namespaces
|
16
|
+
inclusive_namespaces = transform_node.at_xpath("descendant::ec:InclusiveNamespaces", Xmldsig::NAMESPACES)
|
17
|
+
if inclusive_namespaces && inclusive_namespaces.has_attribute?("PrefixList")
|
18
|
+
inclusive_namespaces.get_attribute("PrefixList").to_s.split(" ")
|
19
|
+
else
|
20
|
+
[]
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Xmldsig
|
2
|
+
class Transforms < Array
|
3
|
+
class Transform
|
4
|
+
|
5
|
+
attr_accessor :node, :transform_node
|
6
|
+
|
7
|
+
def initialize(node, transform_node)
|
8
|
+
@node = node
|
9
|
+
@transform_node = transform_node
|
10
|
+
end
|
11
|
+
|
12
|
+
def transform
|
13
|
+
warn("Transform called but not implemented!")
|
14
|
+
self
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/signing_service.rb
ADDED
@@ -0,0 +1,133 @@
|
|
1
|
+
require 'base64'
|
2
|
+
|
3
|
+
class SigningService
|
4
|
+
|
5
|
+
class << self
|
6
|
+
def create_redirect_params(xml, relay_state = "")
|
7
|
+
relay_state = relay_state ? "&RelayState=#{CGI.escape(relay_state)}" : ""
|
8
|
+
|
9
|
+
encoded_xml = Saml::Encoding.to_http_redirect_binding_param(xml)
|
10
|
+
response_params = "SAMLResponse=#{encoded_xml}#{relay_state}&SigAlg=#{CGI.escape('http://www.w3.org/2000/09/xmldsig#rsa-sha1')}"
|
11
|
+
signature = CGI.escape(sign_params(:params => response_params, :private_key => Saml::Config.private_key))
|
12
|
+
|
13
|
+
"#{response_params}&Signature=#{signature}"
|
14
|
+
end
|
15
|
+
|
16
|
+
def parse_signature_params(query)
|
17
|
+
params = {}
|
18
|
+
query.split(/[&;]/).each do |pairs|
|
19
|
+
key, value = pairs.split('=',2)
|
20
|
+
params[key] = value
|
21
|
+
end
|
22
|
+
|
23
|
+
relay_state = params["RelayState"] ? "&RelayState=#{params['RelayState']}" : ""
|
24
|
+
"SAMLRequest=#{params['SAMLRequest']}#{relay_state}&SigAlg=#{params['SigAlg']}"
|
25
|
+
end
|
26
|
+
|
27
|
+
def sign_params(options={})
|
28
|
+
key = OpenSSL::PKey::RSA.new options[:private_key]
|
29
|
+
Base64.encode64(key.sign(OpenSSL::Digest::SHA1.new, options[:params])).gsub("\n", '')
|
30
|
+
end
|
31
|
+
|
32
|
+
def verify_params(options={})
|
33
|
+
cert = OpenSSL::X509::Certificate.new(options[:cert_pem])
|
34
|
+
key = OpenSSL::PKey::RSA.new cert.public_key
|
35
|
+
key.verify(OpenSSL::Digest::SHA1.new, Base64.decode64(options[:signature]), parse_signature_params(options[:query_string]))
|
36
|
+
end
|
37
|
+
|
38
|
+
def sign!(xml, options={})
|
39
|
+
raise "Missing :id_attr option" if options[:id_attr].nil?
|
40
|
+
in_tmp_dir do
|
41
|
+
options[:private_key_path] = create_tmp_file(options[:private_key])
|
42
|
+
xml_file_path = create_tmp_file xml
|
43
|
+
command = sign_command(xml_file_path, options)
|
44
|
+
result, exitstatus = run command
|
45
|
+
if exitstatus == 0
|
46
|
+
result
|
47
|
+
else
|
48
|
+
run sign_command(xml_file_path, options.merge(:debug => true))
|
49
|
+
raise "unable to sign xml: #{command}\ngot error #{exitstatus}:\n#{result}"
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
# You can add --pubkey rsapub.pem or --trusted rootcert.pem to check that signature
|
55
|
+
# is actually valid. See http://www.aleksey.com/pipermail/xmlsec/2003/001120.html
|
56
|
+
def verify_signature!(xml, options={})
|
57
|
+
in_tmp_dir do
|
58
|
+
if options[:id_attr].blank?
|
59
|
+
raise "Missing :id_attr option"
|
60
|
+
end
|
61
|
+
if options[:cert_pem].blank?
|
62
|
+
raise "Missing :cert_pem option"
|
63
|
+
else
|
64
|
+
options[:cert_path] = create_tmp_file(options[:cert_pem])
|
65
|
+
end
|
66
|
+
command = verify_command(create_tmp_file(xml), options)
|
67
|
+
result, exitstatus = run command
|
68
|
+
if (exitstatus) != 0
|
69
|
+
raise "unable to validate xml signature: #{command}\ngot error #{exitstatus}:\n#{result}"
|
70
|
+
end
|
71
|
+
result
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def self.logger
|
77
|
+
@logger ||= Logger.new('test.log')
|
78
|
+
end
|
79
|
+
|
80
|
+
private #------------------------------------------------------------------------------
|
81
|
+
|
82
|
+
class << self
|
83
|
+
def in_tmp_dir
|
84
|
+
Dir.mktmpdir do |dir|
|
85
|
+
Dir.chdir(dir) do
|
86
|
+
yield
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
def create_tmp_file contents
|
92
|
+
file_path = "signing_tmp_#{Time.now.to_f}_#{::SecureRandom.hex}"
|
93
|
+
File.open(file_path, 'w+') do |f|
|
94
|
+
f.puts contents.to_s.strip
|
95
|
+
end
|
96
|
+
file_path
|
97
|
+
end
|
98
|
+
|
99
|
+
def run command
|
100
|
+
result = `#{command}`
|
101
|
+
exitstatus = $?.exitstatus
|
102
|
+
if exitstatus != 0
|
103
|
+
logger.error "Got exitstatus '#{exitstatus}' when running #{command}:\n#{result}"
|
104
|
+
end
|
105
|
+
[result, exitstatus]
|
106
|
+
end
|
107
|
+
|
108
|
+
def sign_command(xml_file_path, options)
|
109
|
+
command = xml_sec_command
|
110
|
+
command << " --sign "
|
111
|
+
command << " --print-debug " if options[:debug]
|
112
|
+
command << " --id-attr:#{options[:id_attr]} " if options[:id_attr]
|
113
|
+
command << " --enabled-reference-uris empty,same-doc,local "
|
114
|
+
command << " --privkey-pem #{options[:private_key_path]} " if options[:private_key_path]
|
115
|
+
command << " #{xml_file_path}"
|
116
|
+
command
|
117
|
+
end
|
118
|
+
|
119
|
+
def verify_command(xml_file_path, options)
|
120
|
+
command = xml_sec_command
|
121
|
+
command << " --verify "
|
122
|
+
command << " --print-debug " if options[:debug]
|
123
|
+
command << " --id-attr:#{options[:id_attr]} " if options[:id_attr]
|
124
|
+
command << " --enabled-reference-uris empty,same-doc,local "
|
125
|
+
command << " --pubkey-cert-pem #{options[:cert_path]}" if options[:cert_path]
|
126
|
+
command << " #{xml_file_path} 2>&1"
|
127
|
+
end
|
128
|
+
|
129
|
+
def xml_sec_command
|
130
|
+
"xmlsec1"
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIICgjCCAeugAwIBAgIBADANBgkqhkiG9w0BAQUFADA6MQswCQYDVQQGEwJCRTEN
|
3
|
+
MAsGA1UECgwEVGVzdDENMAsGA1UECwwEVGVzdDENMAsGA1UEAwwEVGVzdDAeFw0x
|
4
|
+
MzAxMTMxNTMzNDNaFw0xNDAxMTMxNTMzNDNaMDoxCzAJBgNVBAYTAkJFMQ0wCwYD
|
5
|
+
VQQKDARUZXN0MQ0wCwYDVQQLDARUZXN0MQ0wCwYDVQQDDARUZXN0MIGfMA0GCSqG
|
6
|
+
SIb3DQEBAQUAA4GNADCBiQKBgQC37C0mhTmdr8iVfQPQuOKtzG/fhwG4ILuUX1Vk
|
7
|
+
5uN9oSZJxhb5Kn8aBppny1BSekgk12wn4AE/6i7Jfix3SZWoqdaxpdDalvQSdNey
|
8
|
+
n6GmV2oP4lzp6XjXmtRxvOywgTYuhf/DBlpiq7B/vTF7kMwYgs0ahM3mRJG2V7LA
|
9
|
+
RTXUfwIDAQABo4GXMIGUMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFBRkMx3Z
|
10
|
+
wHO3Zog0pWdYNB38NRmWMGIGA1UdIwRbMFmAFBRkMx3ZwHO3Zog0pWdYNB38NRmW
|
11
|
+
oT6kPDA6MQswCQYDVQQGEwJCRTENMAsGA1UECgwEVGVzdDENMAsGA1UECwwEVGVz
|
12
|
+
dDENMAsGA1UEAwwEVGVzdIIBADANBgkqhkiG9w0BAQUFAAOBgQBs8voSBDgN7HL1
|
13
|
+
i5EP+G/ymWUVenpGvRZCnfkR9Wo4ORzj1Y7ohXHooOzDJ2oi0yDwatXnPpe3hauq
|
14
|
+
QDid6d4i7F1Wpgdo2MibqXP8/DPzhuBARvPSzip+yS6ITjqKN/YN4K+kpja2Sh7D
|
15
|
+
dxWND3opvVHZTXywjZpdF1OsmNhOCg==
|
16
|
+
-----END CERTIFICATE-----
|
@@ -0,0 +1,16 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIICgjCCAeugAwIBAgIBADANBgkqhkiG9w0BAQUFADA6MQswCQYDVQQGEwJCRTEN
|
3
|
+
MAsGA1UECgwEVGVzdDENMAsGA1UECwwEVGVzdDENMAsGA1UEAwwEVGVzdDAeFw0x
|
4
|
+
MzAxMTExNTI4MzdaFw0xNDAxMTExNTI4MzdaMDoxCzAJBgNVBAYTAkJFMQ0wCwYD
|
5
|
+
VQQKDARUZXN0MQ0wCwYDVQQLDARUZXN0MQ0wCwYDVQQDDARUZXN0MIGfMA0GCSqG
|
6
|
+
SIb3DQEBAQUAA4GNADCBiQKBgQDQnLpvMvXoPGcAsdk2j2AeLLPysVtFc1f6CSGA
|
7
|
+
fiIR2dzs8h/MN5R0bFBASDUGUGdYyr0QGcKNtqW/cd3Sr1rS2fh5Bopnq9YS6od6
|
8
|
+
J6P3AGIKwmJuIBwwfsvnX3eKGDYeOqmrIo5mdPRAob2D1+FhXbMxeYbRhGMmItC0
|
9
|
+
dle7LQIDAQABo4GXMIGUMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFM7pPtef
|
10
|
+
Oj5Og5wLqI0Lt5UUmw0uMGIGA1UdIwRbMFmAFM7pPtefOj5Og5wLqI0Lt5UUmw0u
|
11
|
+
oT6kPDA6MQswCQYDVQQGEwJCRTENMAsGA1UECgwEVGVzdDENMAsGA1UECwwEVGVz
|
12
|
+
dDENMAsGA1UEAwwEVGVzdIIBADANBgkqhkiG9w0BAQUFAAOBgQBTIt/4/sraPO4g
|
13
|
+
mmY2oSGG19I2Fs24pV/bX8xqI10iexpGsxnpCQIeiDTUHamo12vyXDPx8zANdVTh
|
14
|
+
FSAWHEESBMLrS8pybbAL7sU4ij4JmfxygGk6OEsc3jKY00NYom+Mg3JObIgtjOIK
|
15
|
+
YfrH7uvpm+AIXsef5vrst4MI6GhEAA==
|
16
|
+
-----END CERTIFICATE-----
|
@@ -0,0 +1,15 @@
|
|
1
|
+
-----BEGIN RSA PRIVATE KEY-----
|
2
|
+
MIICXAIBAAKBgQC37C0mhTmdr8iVfQPQuOKtzG/fhwG4ILuUX1Vk5uN9oSZJxhb5
|
3
|
+
Kn8aBppny1BSekgk12wn4AE/6i7Jfix3SZWoqdaxpdDalvQSdNeyn6GmV2oP4lzp
|
4
|
+
6XjXmtRxvOywgTYuhf/DBlpiq7B/vTF7kMwYgs0ahM3mRJG2V7LARTXUfwIDAQAB
|
5
|
+
AoGBAKDQkd3niSw2YiVLTQW4UwNyCLOioT80567g+JKkS28yc374BGhS3xWLhoCQ
|
6
|
+
xieHogMMlRX8iDsxcT1e5FRc88wtIh4vnpUeV++tU9nqpF9SAZV1HAHsOZwyrNUc
|
7
|
+
0nZHgDcyyClirb2wbBG4L+SkrC2kS0MTlx+HiobGpMYsXMh5AkEA4EPrLY7fUaNl
|
8
|
+
bzbJb+Thb3M4UsoXzFuFm0Z/H8ty6aw9yi1pxuh8OiyGGFqPB/gl3zUE1LNdTzx5
|
9
|
+
xLt93Qdf8wJBANHy1EHwTcNbHJ935NQXF8RpllGyZG1X962NwtJ9x46MTPAhOceU
|
10
|
+
9ZU+OCSOvl+7fKjjcw8TsLYiv4q+RMGZKEUCQHPaomOmqzdBceVCKE3lr5AjtbUP
|
11
|
+
Mbwgi6TrhkCmmXadxE3tp/dZotNqrNtn7Pvw9Z+ZhCVdg5arZzx6n0rPxIECQDFZ
|
12
|
+
oBUj1FOgXhkKCKrmBrsvipsHkN22+Mw971alJDxYtFkZpkhItnVvW6kUOKGuI35b
|
13
|
+
gJdBrJ8TieymDulnA/UCQGfl27mqPX4JTzN+RiZHqGyGSzBi1ggH3vsI2oXDQZ7k
|
14
|
+
uOAPiLSBR83eeHGkE2C5fn0QfQGgFNDFjC/6Su/Wvt4=
|
15
|
+
-----END RSA PRIVATE KEY-----
|
@@ -0,0 +1,23 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<foo:Foo xmlns:foo="http://example.com/foo#" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#" ID="foo">
|
3
|
+
<foo:Bar>bar</foo:Bar>
|
4
|
+
<ds:Signature>
|
5
|
+
<ds:SignedInfo>
|
6
|
+
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
|
7
|
+
<ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
|
8
|
+
<ds:Reference URI="#foo">
|
9
|
+
<ds:Transforms>
|
10
|
+
<ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
|
11
|
+
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
|
12
|
+
<ec:InclusiveNamespaces PrefixList="foo"/>
|
13
|
+
</ds:Transform>
|
14
|
+
</ds:Transforms>
|
15
|
+
<ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
|
16
|
+
<ds:DigestValue>ftoSYFdze1AWgGHF5N9i9SFKThXkqH2AdyzA3/epbJw=</ds:DigestValue>
|
17
|
+
</ds:Reference>
|
18
|
+
</ds:SignedInfo>
|
19
|
+
<ds:SignatureValue>E3yyqsSoxRkhYEuaEtR+SLg85gU5B4a7xUXA+d2Zn6j7F6z73dOd8iYHOusB
|
20
|
+
Ty3C/3ujbmPhHKg8uX9kUE8b+YoOqZt4z9pdxAq44nJEuijwi4doIPpHWirv
|
21
|
+
BnSoP5IoL0DYzGVrgj8udRzfAw5nNeV7wSrBZEn+yrxmUPJoUZc=</ds:SignatureValue>
|
22
|
+
</ds:Signature>
|
23
|
+
</foo:Foo>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIDhzCCAm8CBgE4cUAd7DANBgkqhkiG9w0BAQsFADCBhjELMAkGA1UEBhMCREUxDzANBgNVBAgT
|
3
|
+
Bkhlc3NlbjEaMBgGA1UEBxMRRnJhbmtmdXJ0IGFtIE1haW4xDTALBgNVBAoTBFJBQk8xHTAbBgNV
|
4
|
+
BAsTFE1lcmNoYW50IFhNTCBTaWduaW5nMRwwGgYDVQQDExNBdG9zIFdvcmxkbGluZSBHbWJIMB4X
|
5
|
+
DTEyMDYzMDIyMDAwMFoXDTE3MDcwMTEwMDAwMFowgYYxCzAJBgNVBAYTAkRFMQ8wDQYDVQQIEwZI
|
6
|
+
ZXNzZW4xGjAYBgNVBAcTEUZyYW5rZnVydCBhbSBNYWluMQ0wCwYDVQQKEwRSQUJPMR0wGwYDVQQL
|
7
|
+
ExRNZXJjaGFudCBYTUwgU2lnbmluZzEcMBoGA1UEAxMTQXRvcyBXb3JsZGxpbmUgR21iSDCCASIw
|
8
|
+
DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL+hIul8xb811QmqLg9mzkoHh+0BdnQJZCqyHyFM
|
9
|
+
eY7tkFOW8vwi13OxSMGLFzNnehjitMievsx2s5yQW/3NrjG3xLw/18PJrSIgulngs6Cjw9mmIRSn
|
10
|
+
FZp3ViZR5aEmjP3aHGxIT7MTqt/AzU6TVaOYur55WmiOFJSA15AN+Onf3U+H06y/kbZlj9+QwKxe
|
11
|
+
6jEZnaMlfSyhct5elswqEKjencUUU6qdRmsH8nSXmyrFJstXKlZsygDBJQSWxHqNE4r6lnYmpflC
|
12
|
+
76KMNcW1xsp58Qa8axlpZ3UjL+nVtBKw4t+R2ebQcz12N+vv/8TBJd8ckZ+YwW4Cm2fGGcc2CcEC
|
13
|
+
AwEAATANBgkqhkiG9w0BAQsFAAOCAQEAaLXoT+EezVl4YFcFTWI58Zg7C7WujRn+pTSFGN8MLFtx
|
14
|
+
MKfujLAMRh3YPVzXr2yE1kdMiMbq7IKtsKpb3PPgD3rb6YrP7zcwzDRxkXs802BgVxCPmdYrsa1i
|
15
|
+
PdJReq2VVTKoBHXSiKWowwBQFPOOc1XjFHcJ3Nq5WgssGEjk+puRW+i8GLaIv1KdwVlWLyHNArTs
|
16
|
+
W5JCcdtBhnMDz/g3/fRMu4EAnVFVmM75KNztVvgqkt+mZVuXfHfTCSv2RVFbrJvm/xrCmGk1VxDE
|
17
|
+
t4zSMdFEi98xh8DOC1oIhMf6JDImL1JyHqTljOIjBCo2uE5TFqQ/QZiOk0IC8Rb9y3lb2g==
|
18
|
+
-----END CERTIFICATE-----
|
@@ -0,0 +1,41 @@
|
|
1
|
+
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48RGlyZWN0
|
2
|
+
b3J5UmVzIHhtbG5zPSJodHRwOi8vd3d3LmlkZWFsZGVzay5jb20vaWRlYWwv
|
3
|
+
bWVzc2FnZXMvbWVyLWFjcS8zLjMuMSIgeG1sbnM6bnMyPSJodHRwOi8vd3d3
|
4
|
+
LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjIiB2ZXJzaW9uPSIzLjMuMSI+CiAg
|
5
|
+
ICA8Y3JlYXRlRGF0ZVRpbWVzdGFtcD4yMDEzLTA3LTExVDEwOjA2OjU5Ljg3
|
6
|
+
Nlo8L2NyZWF0ZURhdGVUaW1lc3RhbXA+CiAgICA8QWNxdWlyZXI+CiAgICAg
|
7
|
+
ICAgPGFjcXVpcmVySUQ+MDAyMDwvYWNxdWlyZXJJRD4KICAgIDwvQWNxdWly
|
8
|
+
ZXI+CiAgICA8RGlyZWN0b3J5PgogICAgICAgIDxkaXJlY3RvcnlEYXRlVGlt
|
9
|
+
ZXN0YW1wPjIwMTMtMDctMTFUMTA6MDY6NTkuODc2WjwvZGlyZWN0b3J5RGF0
|
10
|
+
ZVRpbWVzdGFtcD4KICAgICAgICA8Q291bnRyeT4KICAgICAgICAgICAgPGNv
|
11
|
+
dW50cnlOYW1lcz5EZXV0c2NobGFuZDwvY291bnRyeU5hbWVzPgogICAgICAg
|
12
|
+
ICAgICA8SXNzdWVyPgogICAgICAgICAgICAgICAgPGlzc3VlcklEPklOR0JO
|
13
|
+
TDJBPC9pc3N1ZXJJRD4KICAgICAgICAgICAgICAgIDxpc3N1ZXJOYW1lPklz
|
14
|
+
c3VlciBTaW11bGF0aW9uIFYzIC0gSU5HPC9pc3N1ZXJOYW1lPgogICAgICAg
|
15
|
+
ICAgICA8L0lzc3Vlcj4KICAgICAgICAgICAgPElzc3Vlcj4KICAgICAgICAg
|
16
|
+
ICAgICAgIDxpc3N1ZXJJRD5SQUJPTkwyVTwvaXNzdWVySUQ+CiAgICAgICAg
|
17
|
+
ICAgICAgICA8aXNzdWVyTmFtZT5Jc3N1ZXIgU2ltdWxhdGlvbiBWMyAtIFJB
|
18
|
+
Qk88L2lzc3Vlck5hbWU+CiAgICAgICAgICAgIDwvSXNzdWVyPgogICAgICAg
|
19
|
+
IDwvQ291bnRyeT4KICAgIDwvRGlyZWN0b3J5Pgo8U2lnbmF0dXJlIHhtbG5z
|
20
|
+
PSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjIj48U2lnbmVk
|
21
|
+
SW5mbz48Q2Fub25pY2FsaXphdGlvbk1ldGhvZCBBbGdvcml0aG09Imh0dHA6
|
22
|
+
Ly93d3cudzMub3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuIyIvPjxTaWduYXR1
|
23
|
+
cmVNZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0
|
24
|
+
L3htbGRzaWctbW9yZSNyc2Etc2hhMjU2Ii8+PFJlZmVyZW5jZSBVUkk9IiI+
|
25
|
+
PFRyYW5zZm9ybXM+PFRyYW5zZm9ybSBBbGdvcml0aG09Imh0dHA6Ly93d3cu
|
26
|
+
dzMub3JnLzIwMDAvMDkveG1sZHNpZyNlbnZlbG9wZWQtc2lnbmF0dXJlIi8+
|
27
|
+
PC9UcmFuc2Zvcm1zPjxEaWdlc3RNZXRob2QgQWxnb3JpdGhtPSJodHRwOi8v
|
28
|
+
d3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyNzaGEyNTYiLz48RGlnZXN0VmFs
|
29
|
+
dWU+a2NnajNnSWppMFk1OEJ4MlhTTUFNZytUNmhqa21HbWhTNWFRc21IUW4r
|
30
|
+
MD08L0RpZ2VzdFZhbHVlPjwvUmVmZXJlbmNlPjwvU2lnbmVkSW5mbz48U2ln
|
31
|
+
bmF0dXJlVmFsdWU+bHNXOUo2bXVPWWpFMVJpMGgwZHNFYVRqTU96MEs0RnFv
|
32
|
+
bnlOamNIbkFONTE2Um9HOTZDcGxvQWJRdHBhUlAva0trajBlRUh4UWVXeQoy
|
33
|
+
WFZHcHliYjRTUjNqdU96ZlM3b21rcHhoeXZqZkJVSStjNUZrUTBma1dmOHFB
|
34
|
+
YVRxeUxoSXhhVGtGZHpNZ0xvKy9CU3QvNExuenFZClVmcDRLR1hlQmpDZHRU
|
35
|
+
Mmg0R2F3eFo4c0Y1cUlXQzg5SUl5UkNwMXhuVmUzQlVlTkc3RmNSN3dlV1dY
|
36
|
+
MGhIZDZhaHF6aUxTMnFWYW8KRUZZdmRaK003ajVWZ0hndUt2aWtlK01tKzlW
|
37
|
+
Mmo0UlVuMVJobWg5R2ZsR1VzK2c4SWtWRmtibkdQQ3JJVm5HOElUOWYrOSsr
|
38
|
+
cFQzegpPMGJ5NzZKWXVRRDdnWFFrMnZ3dFBkVjFMTHBRMHdoMjJ2UUtrUT09
|
39
|
+
PC9TaWduYXR1cmVWYWx1ZT48S2V5SW5mbz48S2V5TmFtZT5GQzBBMTdBN0FC
|
40
|
+
RDcyMzY5NzI2RUE0RDREQkVGOTgzODEyOEE3Qzc4PC9LZXlOYW1lPjwvS2V5
|
41
|
+
SW5mbz48L1NpZ25hdHVyZT48L0RpcmVjdG9yeVJlcz4=
|
@@ -0,0 +1,21 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<foo:Foo ID="foo" xmlns:foo="http://example.com/foo#" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#">
|
3
|
+
<foo:Bar>bar</foo:Bar>
|
4
|
+
<ds:Signature>
|
5
|
+
<ds:SignedInfo>
|
6
|
+
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
|
7
|
+
<ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
|
8
|
+
<ds:Reference URI="#foo">
|
9
|
+
<ds:Transforms>
|
10
|
+
<ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
|
11
|
+
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
|
12
|
+
<ec:InclusiveNamespaces PrefixList="foo"/>
|
13
|
+
</ds:Transform>
|
14
|
+
</ds:Transforms>
|
15
|
+
<ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
|
16
|
+
<ds:DigestValue></ds:DigestValue>
|
17
|
+
</ds:Reference>
|
18
|
+
</ds:SignedInfo>
|
19
|
+
<ds:SignatureValue></ds:SignatureValue>
|
20
|
+
</ds:Signature>
|
21
|
+
</foo:Foo>
|
@@ -0,0 +1,19 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<foo:Foo ID="foo" xmlns:foo="http://example.com/foo#" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#">
|
3
|
+
<foo:Bar>bar</foo:Bar>
|
4
|
+
<ds:Signature>
|
5
|
+
<ds:SignedInfo>
|
6
|
+
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
|
7
|
+
<ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
|
8
|
+
<ds:Reference URI="#foo">
|
9
|
+
<ds:Transforms>
|
10
|
+
<ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
|
11
|
+
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
|
12
|
+
</ds:Transforms>
|
13
|
+
<ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
|
14
|
+
<ds:DigestValue></ds:DigestValue>
|
15
|
+
</ds:Reference>
|
16
|
+
</ds:SignedInfo>
|
17
|
+
<ds:SignatureValue></ds:SignatureValue>
|
18
|
+
</ds:Signature>
|
19
|
+
</foo:Foo>
|
@@ -0,0 +1,19 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<foo:Foo ID="foo" xmlns:foo="http://example.com/foo#" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#">
|
3
|
+
<foo:Bar>bar</foo:Bar>
|
4
|
+
<ds:Signature>
|
5
|
+
<ds:SignedInfo>
|
6
|
+
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2006/12/xml-c14n11"/>
|
7
|
+
<ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
|
8
|
+
<ds:Reference URI="#foo">
|
9
|
+
<ds:Transforms>
|
10
|
+
<ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
|
11
|
+
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
|
12
|
+
</ds:Transforms>
|
13
|
+
<ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
|
14
|
+
<ds:DigestValue></ds:DigestValue>
|
15
|
+
</ds:Reference>
|
16
|
+
</ds:SignedInfo>
|
17
|
+
<ds:SignatureValue></ds:SignatureValue>
|
18
|
+
</ds:Signature>
|
19
|
+
</foo:Foo>
|
@@ -0,0 +1,21 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<foo:Foo ID="foo" xmlns:foo="http://example.com/foo#" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#">
|
3
|
+
<foo:Bar>bar</foo:Bar>
|
4
|
+
<ds:Signature>
|
5
|
+
<ds:SignedInfo>
|
6
|
+
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
|
7
|
+
<ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
|
8
|
+
<ds:Reference URI="#foo">
|
9
|
+
<ds:Transforms>
|
10
|
+
<ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
|
11
|
+
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
|
12
|
+
<ec:InclusiveNamespaces PrefixList="foo"/>
|
13
|
+
</ds:Transform>
|
14
|
+
</ds:Transforms>
|
15
|
+
<ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
|
16
|
+
<ds:DigestValue></ds:DigestValue>
|
17
|
+
</ds:Reference>
|
18
|
+
</ds:SignedInfo>
|
19
|
+
<ds:SignatureValue></ds:SignatureValue>
|
20
|
+
</ds:Signature>
|
21
|
+
</foo:Foo>
|