spid 0.17.2 → 0.17.3

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
  SHA256:
3
- metadata.gz: 1a7a11b70c24ab1e6d40359dd05c34cf4e5bfa0c785bdf988fb02f9c6c992c0b
4
- data.tar.gz: e3864055608e4cba6a1f43d79e4ab02cf1caad03e29c5b978811d1b192740279
3
+ metadata.gz: 373a471d3c7b5987767769a28f606c719a9470f82347e3f337e49a6391bb0a38
4
+ data.tar.gz: 596d1cde1ad8283d5b2fb1ab50d3d969be1072b096497aea9d14dec5ce22c052
5
5
  SHA512:
6
- metadata.gz: 60ed65ef4c9d0c1eb8b295feb39b3113bf40042397da55b2e63d47772b6dec6be7bf46bc78f6064a36511d75cf935766258333f3989e3f144e5c24290a978c50
7
- data.tar.gz: c569e171dfe3b1f4da07c3d4e8a0d5a4b1794cd31f3b449727b27f3221c566ed761a14fdc5cd22d0c930539a122fb527751fb2b3a13a381133828a04251ce69b
6
+ metadata.gz: 8a23bd7418801a537ba5714da4dbf67808b978819780bf9592ca32db148b9ebd14734c65a76730fe4c7ca93f902312acd3c00d908254322ea7a0e9a8670671f6
7
+ data.tar.gz: 99eee38fe1d01a30e26e9efa2a59a8537955e7c2ca623f74c92368bb20eb83bd12b4c80fb926b00f847ba818af72ca7f0b9ca13cbb6d9d615d6a3015e5c3d89e
@@ -2,6 +2,11 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [0.17.3] - 2018-09-12
6
+ ### Fixed
7
+ - Metadata embed now signature
8
+ - Now it's possible to use attributes in attribute services in string format
9
+
5
10
  ## [0.17.2] - 2018-09-11
6
11
  ### Fixed
7
12
  - `Spid::Rack::Login` now use authn_context value
@@ -142,7 +147,8 @@
142
147
  - Coveralls Integration
143
148
  - Rubygems version badge in README
144
149
 
145
- [Unreleased]: https://github.com/italia/spid-ruby/compare/v0.17.2...HEAD
150
+ [Unreleased]: https://github.com/italia/spid-ruby/compare/v0.17.3...HEAD
151
+ [0.17.3]: https://github.com/italia/spid-ruby/compare/v0.17.2...v0.17.3
146
152
  [0.17.2]: https://github.com/italia/spid-ruby/compare/v0.17.1...v0.17.2
147
153
  [0.17.1]: https://github.com/italia/spid-ruby/compare/v0.17.0...v0.17.1
148
154
  [0.17.0]: https://github.com/italia/spid-ruby/compare/v0.16.1...v0.17.0
@@ -10,6 +10,7 @@ require "spid/saml2/logout_request"
10
10
  require "spid/saml2/idp_logout_request"
11
11
  require "spid/saml2/logout_response"
12
12
  require "spid/saml2/idp_logout_response"
13
+ require "spid/saml2/xml_signature"
13
14
  require "spid/saml2/sp_metadata"
14
15
  require "spid/saml2/utils"
15
16
  require "spid/saml2/idp_metadata_parser"
@@ -79,7 +79,7 @@ module Spid
79
79
  def validate_attribute_service(attribute_service)
80
80
  return false unless attribute_service.key?(:name)
81
81
  return false unless attribute_service.key?(:fields)
82
- not_valid_fields = attribute_service[:fields] - ATTRIBUTES
82
+ not_valid_fields = attribute_service[:fields].map(&:to_sym) - ATTRIBUTES
83
83
  not_valid_fields.empty?
84
84
  end
85
85
 
@@ -80,6 +80,10 @@ module Spid
80
80
  service_provider.signature_method
81
81
  end
82
82
 
83
+ def digest_method
84
+ service_provider.digest_method
85
+ end
86
+
83
87
  def acs_index
84
88
  "0"
85
89
  end
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "xmldsig"
4
+
3
5
  module Spid
4
6
  module Saml2
5
7
  # rubocop:disable Metrics/ClassLength
@@ -12,17 +14,27 @@ module Spid
12
14
  @settings = settings
13
15
  end
14
16
 
15
- def to_saml
17
+ def unsigned_document
16
18
  document.add_element(entity_descriptor)
17
19
  document.to_s
18
20
  end
19
21
 
22
+ def signed_document
23
+ doc = Xmldsig::SignedDocument.new(unsigned_document)
24
+ doc.sign(settings.private_key)
25
+ end
26
+
27
+ def to_saml
28
+ signed_document
29
+ end
30
+
20
31
  def entity_descriptor
21
32
  @entity_descriptor ||=
22
33
  begin
23
34
  element = REXML::Element.new("md:EntityDescriptor")
24
35
  element.add_attributes(entity_descriptor_attributes)
25
36
  element.add_element sp_sso_descriptor
37
+ element.add_element signature
26
38
  element
27
39
  end
28
40
  end
@@ -32,7 +44,7 @@ module Spid
32
44
  "xmlns:ds" => "http://www.w3.org/2000/09/xmldsig#",
33
45
  "xmlns:md" => "urn:oasis:names:tc:SAML:2.0:metadata",
34
46
  "entityID" => settings.sp_entity_id,
35
- "ID" => settings.sp_entity_id
47
+ "ID" => entity_descriptor_id
36
48
  }
37
49
  end
38
50
 
@@ -59,6 +71,13 @@ module Spid
59
71
  # rubocop:enable Metrics/AbcSize
60
72
  # rubocop:enable Metrics/MethodLength
61
73
 
74
+ def signature
75
+ @signature ||= ::Spid::Saml2::XmlSignature.new(
76
+ settings: settings,
77
+ sign_reference: entity_descriptor_id
78
+ ).signature
79
+ end
80
+
62
81
  def attribute_consuming_service(index, name, fields)
63
82
  element = REXML::Element.new("md:AttributeConsumingService")
64
83
  element.add_attributes("index" => index)
@@ -132,6 +151,15 @@ module Spid
132
151
  kd
133
152
  end
134
153
  end
154
+
155
+ private
156
+
157
+ def entity_descriptor_id
158
+ @entity_descriptor_id ||=
159
+ begin
160
+ "_#{Digest::MD5.hexdigest(settings.sp_entity_id)}"
161
+ end
162
+ end
135
163
  end
136
164
  # rubocop:enable Metrics/ClassLength
137
165
  end
@@ -0,0 +1,118 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Spid
4
+ module Saml2
5
+ class XmlSignature # :nodoc:
6
+ attr_reader :settings
7
+ attr_reader :sign_reference
8
+
9
+ def initialize(settings:, sign_reference:)
10
+ @settings = settings
11
+ @sign_reference = sign_reference
12
+ end
13
+
14
+ def signature
15
+ @signature ||=
16
+ begin
17
+ element = REXML::Element.new("ds:Signature")
18
+ element.add_element(signed_info)
19
+ element.add_element(signature_value)
20
+ element
21
+ end
22
+ end
23
+
24
+ def signed_info
25
+ @signed_info ||=
26
+ begin
27
+ element = REXML::Element.new("ds:SignedInfo")
28
+ element.add_element(canonicalization_method)
29
+ element.add_element(signature_method)
30
+ element.add_element(reference)
31
+ element
32
+ end
33
+ end
34
+
35
+ def canonicalization_method
36
+ @canonicalization_method ||=
37
+ begin
38
+ element = REXML::Element.new("ds:CanonicalizationMethod")
39
+ element.add_attributes(
40
+ "Algorithm" => "http://www.w3.org/2001/10/xml-exc-c14n#"
41
+ )
42
+ element
43
+ end
44
+ end
45
+
46
+ def signature_method
47
+ @signature_method ||=
48
+ begin
49
+ element = REXML::Element.new("ds:SignatureMethod")
50
+ element.add_attributes("Algorithm" => settings.signature_method)
51
+ element
52
+ end
53
+ end
54
+
55
+ def reference
56
+ @reference ||=
57
+ begin
58
+ element = REXML::Element.new("ds:Reference")
59
+ element.add_attributes("URI" => "##{sign_reference}")
60
+ element.add_element(transforms)
61
+ element.add_element(digest_method)
62
+ element.add_element(digest_value)
63
+ element
64
+ end
65
+ end
66
+
67
+ def transforms
68
+ @transforms ||=
69
+ begin
70
+ element = REXML::Element.new("ds:Transforms")
71
+ element.add_element(transform_enveloped)
72
+ element.add_element(transform_xml)
73
+ element
74
+ end
75
+ end
76
+
77
+ def transform_enveloped
78
+ @transform_enveloped ||=
79
+ begin
80
+ element = REXML::Element.new("ds:Transform")
81
+ element.add_attributes(
82
+ "Algorithm" =>
83
+ "http://www.w3.org/2000/09/xmldsig#enveloped-signature"
84
+ )
85
+ element
86
+ end
87
+ end
88
+
89
+ def transform_xml
90
+ @transform_xml ||=
91
+ begin
92
+ element = REXML::Element.new("ds:Transform")
93
+ element.add_attributes(
94
+ "Algorithm" => "http://www.w3.org/2001/10/xml-exc-c14n#"
95
+ )
96
+ element
97
+ end
98
+ end
99
+
100
+ def digest_method
101
+ @digest_method ||=
102
+ begin
103
+ element = REXML::Element.new("ds:DigestMethod")
104
+ element.add_attributes("Algorithm" => settings.digest_method)
105
+ element
106
+ end
107
+ end
108
+
109
+ def digest_value
110
+ @digest_value ||= REXML::Element.new("ds:DigestValue")
111
+ end
112
+
113
+ def signature_value
114
+ @signature_value ||= REXML::Element.new("ds:SignatureValue")
115
+ end
116
+ end
117
+ end
118
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Spid
4
- VERSION = "0.17.2"
4
+ VERSION = "0.17.3"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spid
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.17.2
4
+ version: 0.17.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Librera
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-09-11 00:00:00.000000000 Z
11
+ date: 2018-09-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -349,6 +349,7 @@ files:
349
349
  - lib/spid/saml2/sp_metadata.rb
350
350
  - lib/spid/saml2/utils.rb
351
351
  - lib/spid/saml2/utils/query_params_signer.rb
352
+ - lib/spid/saml2/xml_signature.rb
352
353
  - lib/spid/slo.rb
353
354
  - lib/spid/slo/idp_request.rb
354
355
  - lib/spid/slo/request.rb