lyrebird 1.0.0 → 2.0.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.
@@ -1,171 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "test_helper"
4
-
5
- module Lyrebird
6
- class SignatureTest < Minitest::Test
7
- NS = { "ds" => XMLDSIG_NS, "saml" => SAML_ASSERTION_NS }.freeze
8
-
9
- def setup
10
- unless defined?(@@certificate)
11
- @@certificate = Certificate.build
12
- @@assertion = Assertion.new.document
13
- @@element = @@assertion.root
14
- Signature.new(@@element, @@certificate).sign!
15
- end
16
-
17
- @certificate = @@certificate
18
- @assertion = @@assertion
19
- @element = @@element
20
- @signature = @element.at_xpath("ds:Signature", NS)
21
- @signed_info = @signature.at_xpath("ds:SignedInfo", NS)
22
- @reference = @signed_info.at_xpath("ds:Reference", NS)
23
- end
24
-
25
- def test_sign_inserts_after_issuer
26
- children = @element.element_children
27
- issuer_index = children.index { |e| e.name == "Issuer" }
28
- signature_index = children.index { |e| e.name == "Signature" }
29
- assert_equal issuer_index + 1, signature_index
30
- end
31
-
32
- def test_signature_element
33
- assert_equal "Signature", @signature.name
34
- assert_equal "ds", @signature.namespace.prefix
35
- assert_equal XMLDSIG_NS, @signature.namespace.href
36
- end
37
-
38
- def test_signature_element_children
39
- children = @signature.element_children
40
- assert_equal 3, children.size
41
- assert_equal "SignedInfo", children[0].name
42
- assert_equal "SignatureValue", children[1].name
43
- assert_equal "KeyInfo", children[2].name
44
- end
45
-
46
- def test_signed_info_element
47
- assert_equal "SignedInfo", @signed_info.name
48
- assert_equal "ds", @signed_info.namespace.prefix
49
- end
50
-
51
- def test_canonicalization_method
52
- cm = @signed_info.at_xpath("ds:CanonicalizationMethod", NS)
53
- assert_equal "CanonicalizationMethod", cm.name
54
- assert_equal EXC_C14N, cm["Algorithm"]
55
- end
56
-
57
- def test_signature_method
58
- sm = @signed_info.at_xpath("ds:SignatureMethod", NS)
59
- assert_equal "SignatureMethod", sm.name
60
- assert_equal RSA_SHA256, sm["Algorithm"]
61
- end
62
-
63
- def test_reference_element
64
- assert_equal "Reference", @reference.name
65
- assert_equal "ds", @reference.namespace.prefix
66
- end
67
-
68
- def test_reference_uri
69
- assert_equal "##{@element["ID"]}", @reference["URI"]
70
- end
71
-
72
- def test_transforms_element
73
- transforms = @reference.at_xpath("ds:Transforms", NS)
74
- assert_equal "Transforms", transforms.name
75
- assert_equal "ds", transforms.namespace.prefix
76
- end
77
-
78
- def test_enveloped_signature_transform
79
- transforms = @reference.xpath("ds:Transforms/ds:Transform", NS)
80
- assert_equal ENVELOPED_SIG, transforms[0]["Algorithm"]
81
- end
82
-
83
- def test_c14n_transform
84
- transforms = @reference.xpath("ds:Transforms/ds:Transform", NS)
85
- assert_equal EXC_C14N, transforms[1]["Algorithm"]
86
- end
87
-
88
- def test_digest_method_element
89
- digest_method = @reference.at_xpath("ds:DigestMethod", NS)
90
- assert_equal "DigestMethod", digest_method.name
91
- assert_equal "ds", digest_method.namespace.prefix
92
- end
93
-
94
- def test_digest_method_algorithm
95
- digest_method = @reference.at_xpath("ds:DigestMethod", NS)
96
- assert_equal SHA256_DIGEST, digest_method["Algorithm"]
97
- end
98
-
99
- def test_digest_value_element
100
- digest_value = @reference.at_xpath("ds:DigestValue", NS)
101
- assert_equal "DigestValue", digest_value.name
102
- assert_equal "ds", digest_value.namespace.prefix
103
- end
104
-
105
- def test_digest_value_is_base64
106
- digest_value = @reference.at_xpath("ds:DigestValue", NS)
107
- decoded = Base64.strict_decode64(digest_value.text)
108
- assert_equal 32, decoded.bytesize
109
- end
110
-
111
- def test_signature_value_element
112
- sv = @signature.at_xpath("ds:SignatureValue", NS)
113
- assert_equal "SignatureValue", sv.name
114
- assert_equal "ds", sv.namespace.prefix
115
- end
116
-
117
- def test_signature_value_is_base64
118
- sv = @signature.at_xpath("ds:SignatureValue", NS)
119
- decoded = Base64.strict_decode64(sv.text)
120
- assert_equal 256, decoded.bytesize
121
- end
122
-
123
- def test_key_info_element
124
- ki = @signature.at_xpath("ds:KeyInfo", NS)
125
- assert_equal "KeyInfo", ki.name
126
- assert_equal "ds", ki.namespace.prefix
127
- end
128
-
129
- def test_x509_data_element
130
- x509_data = @signature.at_xpath("ds:KeyInfo/ds:X509Data", NS)
131
- assert_equal "X509Data", x509_data.name
132
- assert_equal "ds", x509_data.namespace.prefix
133
- end
134
-
135
- def test_x509_certificate_element
136
- xpath = "ds:KeyInfo/ds:X509Data/ds:X509Certificate"
137
- cert = @signature.at_xpath(xpath, NS)
138
- assert_equal "X509Certificate", cert.name
139
- assert_equal "ds", cert.namespace.prefix
140
- assert_equal @certificate.base64, cert.text
141
- end
142
-
143
- def test_digest_verifies
144
- assertion = @assertion.dup
145
- element = assertion.root
146
- signature = element.at_xpath("ds:Signature", NS)
147
- reference = signature.at_xpath("ds:SignedInfo/ds:Reference", NS)
148
-
149
- signature.remove
150
- c14n = Nokogiri::XML::XML_C14N_EXCLUSIVE_1_0
151
- canonical = element.canonicalize(c14n)
152
- computed = OpenSSL::Digest::SHA256.digest(canonical)
153
-
154
- digest_value = reference.at_xpath("ds:DigestValue", NS)
155
- expected = Base64.strict_decode64(digest_value.text)
156
- assert_equal expected, computed
157
- end
158
-
159
- def test_signature_verifies
160
- c14n = Nokogiri::XML::XML_C14N_EXCLUSIVE_1_0
161
- canonical = @signed_info.canonicalize(c14n)
162
-
163
- sig_value = @signature.at_xpath("ds:SignatureValue", NS)
164
- signature_bytes = Base64.strict_decode64(sig_value.text)
165
-
166
- public_key = @certificate.x509.public_key
167
- verified = public_key.verify("SHA256", signature_bytes, canonical)
168
- assert verified
169
- end
170
- end
171
- end
data/test/test_helper.rb DELETED
@@ -1,4 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "lyrebird"
4
- require "minitest/autorun"