spid-es 0.0.6 → 0.0.7

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,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- ZjAzNzZkNWNkYzgyYzkxMmQ3YWU2OTE0NDg3NWRjM2RjMjkyOTY0NA==
4
+ N2NhNjg3NDRlNGYxYTcyYzk4MzRmZGUyOGRmNTE2ZjE4NDc2MDYyMg==
5
5
  data.tar.gz: !binary |-
6
- MmMyMjIzOWU2ZmRiMWExMGI4YmFiN2JjODBmYjJiNGRjZTM3MWIwYQ==
6
+ OTBjMTI4YzdmNTkyMzQ3NDYwMzlhZDk2NTczNWExMWVkYWYzMmZhZg==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- MWEzNGJmNmJhZDZkZDM5ZjY4NTA0Mjk2Y2NjNjBmZTAxMTE4NjZmMjg3NDdm
10
- Y2FkMzI4M2QzNWRjM2ZjOGZjM2UzYWE1OGM0OTRjZWM4N2Q3NGMwZGU2NWVh
11
- YzhlYjMwOWQ0YzNjY2RhZjViYzU0OGI3MGY0YmEwYTM4NDZkMGU=
9
+ ZTg4OTVhZjliMTA3YTBlY2ZhODI1YWIwZjQ2NTdjNjk5NzczZTdhODM3ZWJm
10
+ Nzc2OGJiZGJlZmJhZmUzNDUxZWU2ZWYxZDE1NjdiMjUwYmVhMjdkZGEwNWRj
11
+ MDlmZWM2OTk2Y2UzODg5ODBjMDMzYjAyOGQyYjIxMGE1NjI5MzY=
12
12
  data.tar.gz: !binary |-
13
- YTU4YzJhZmFhM2E2YzMzOTk2ZWJiYTlkZjg3N2FkZTdlOWIzZjc3MjJkZDVk
14
- MmMzYWEyZTY1MmE1Zjc5YjNhZjY1ZmE3ZThlZTJjYzU1ZjUwZWVlNGE2ZDJl
15
- ZjllNWU2YzVmZTEwZDlkMGUzYmU3MDMxZTk5MmYxMzE3YmVjZTE=
13
+ NjkzMGNhNjdhMjg0NjZhZjk5ZGY5MjEzZmIwZTdkYzNjMjZhNjU0MjMzN2I4
14
+ ZTBmNzQwYWJiNDczMmUwNDdiN2M2Nzk3NDJiY2I2YzIwYjk0MDI1NDlhYTE2
15
+ ZDdkOTM2YWE1ZmE5NTk0ODJhMTM0Y2VhN2JkODUzMTQ5Mzc3YzY=
@@ -48,21 +48,48 @@ module Spid
48
48
  "AuthnRequestsSigned" => "1"
49
49
 
50
50
  }
51
- if settings.sp_cert != nil
52
- keyDescriptor = sp_sso.add_element "md:KeyDescriptor", {
53
- "use" => "signing"
54
- }
55
- keyInfo = keyDescriptor.add_element "ds:KeyInfo", {
56
- "xmlns:ds" => "http://www.w3.org/2000/09/xmldsig#"
57
- }
58
- x509Data = keyInfo.add_element "ds:X509Data"
59
- x509Certificate = x509Data.add_element "ds:X509Certificate"
60
- file = ""
61
- File.foreach(settings.sp_cert){ |line|
62
- file += line unless (line.include?("RSA PUBLIC KEY") || line.include?("CERTIFICATE"))
63
- }
64
- x509Certificate.text = file
51
+
52
+
53
+ # if settings.sp_cert != nil
54
+ # keyDescriptor = sp_sso.add_element "md:KeyDescriptor", {
55
+ # "use" => "signing"
56
+ # }
57
+ # keyInfo = keyDescriptor.add_element "ds:KeyInfo", {
58
+ # "xmlns:ds" => "http://www.w3.org/2000/09/xmldsig#"
59
+ # }
60
+ # x509Data = keyInfo.add_element "ds:X509Data"
61
+ # x509Certificate = x509Data.add_element "ds:X509Certificate"
62
+ # file = ""
63
+ # File.foreach(settings.sp_cert){ |line|
64
+ # file += line unless (line.include?("RSA PUBLIC KEY") || line.include?("CERTIFICATE"))
65
+ # }
66
+ # x509Certificate.text = file
67
+ # end
68
+
69
+ # Add KeyDescriptor if messages will be signed / encrypted
70
+ cert = settings.get_sp_cert
71
+ if cert
72
+
73
+ if cert.is_a?(String)
74
+ cert = OpenSSL::X509::Certificate.new(cert)
75
+ end
76
+
77
+ cert_text = Base64.encode64(cert.to_der).to_s.gsub(/\n/, "").gsub(/\t/, "")
78
+ kd = sp_sso.add_element "md:KeyDescriptor", { "use" => "signing" }
79
+ ki = kd.add_element "ds:KeyInfo", {"xmlns:ds" => "http://www.w3.org/2000/09/xmldsig#"}
80
+ xd = ki.add_element "ds:X509Data"
81
+ xc = xd.add_element "ds:X509Certificate"
82
+ xc.text = cert_text
83
+
84
+ # kd2 = sp_sso.add_element "md:KeyDescriptor", { "use" => "encryption" }
85
+ # ki2 = kd2.add_element "ds:KeyInfo", {"xmlns:ds" => "http://www.w3.org/2000/09/xmldsig#"}
86
+ # xd2 = ki2.add_element "ds:X509Data"
87
+ # xc2 = xd2.add_element "ds:X509Certificate"
88
+ # xc2.text = cert_text
65
89
  end
90
+
91
+
92
+
66
93
  if settings.single_logout_service_url != nil
67
94
  sp_sso.add_element "md:SingleLogoutService", {
68
95
  "Binding" => "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect",
@@ -152,11 +179,9 @@ module Spid
152
179
  private_key = settings.get_sp_key
153
180
  meta_doc.sign_document(private_key, cert)
154
181
  end
155
-
156
182
  ret = ""
157
- # pretty print the XML so IdP administrators can easily see what the SP supports
158
- meta_doc.write(ret, 1)
159
-
183
+ # stampo come stringa semplice i metadata per non avere problemi con validazione firma
184
+ ret = meta_doc.to_s
160
185
  #Logging.debug "Generated metadata:\n#{ret}"
161
186
 
162
187
  return ret
@@ -45,12 +45,19 @@ module Spid
45
45
  OpenSSL::X509::Certificate.new(File.read(idp_cert))
46
46
  end
47
47
 
48
+ # def get_sp_cert
49
+ # return nil if certificate.nil? || certificate.empty?
50
+
51
+ # formatted_cert = OneLogin::RubySaml::Utils.format_cert(certificate)
52
+ # OpenSSL::X509::Certificate.new(formatted_cert)
53
+ # end
54
+
48
55
  # @return [OpenSSL::X509::Certificate|nil] Build the SP certificate from the settings (previously format it)
49
56
  #
50
57
  def get_sp_cert
51
58
  return nil if sp_cert.nil? || sp_cert.empty?
52
59
  #decoded_content = Base64.decode64(File.read(sp_cert))
53
- #formatted_cert = Spid::Saml::Utils.format_cert(decoded_content)
60
+ formatted_cert = Spid::Saml::Utils.format_cert(sp_cert)
54
61
  OpenSSL::X509::Certificate.new(File.read(sp_cert))
55
62
  end
56
63
 
@@ -57,6 +57,7 @@ module XMLSecurityNew
57
57
  else
58
58
  Nokogiri::XML::XML_C14N_EXCLUSIVE_1_0
59
59
  end
60
+ Nokogiri::XML::XML_C14N_EXCLUSIVE_1_0
60
61
  end
61
62
 
62
63
  def algorithm(element)
@@ -135,6 +136,7 @@ module XMLSecurityNew
135
136
  digest_method_element = reference_element.add_element("ds:DigestMethod", {"Algorithm" => digest_method})
136
137
  inclusive_namespaces = INC_PREFIX_LIST.split(" ")
137
138
  canon_doc = noko.canonicalize(canon_algorithm(C14N), inclusive_namespaces)
139
+ #canon_doc = noko.canonicalize(canon_algorithm(C14N))
138
140
  reference_element.add_element("ds:DigestValue").text = compute_digest(canon_doc, algorithm(digest_method_element))
139
141
 
140
142
  # add SignatureValue
@@ -143,10 +145,10 @@ module XMLSecurityNew
143
145
  end
144
146
 
145
147
  noko_signed_info_element = noko_sig_element.at_xpath('//ds:Signature/ds:SignedInfo', 'ds' => DSIG)
146
- canon_string = noko_signed_info_element.canonicalize(canon_algorithm(C14N))
148
+ canon_string = noko_signed_info_element.canonicalize(canon_algorithm(C14N), inclusive_namespaces)
147
149
 
148
150
  signature = compute_signature(private_key, algorithm(signature_method).new, canon_string)
149
- signature_element.add_element("ds:SignatureValue").text = signature
151
+ signature_element.add_element("ds:SignatureValue").text = signature.to_s.gsub(/\n/, "").gsub(/\t/, "")
150
152
 
151
153
  # add KeyInfo
152
154
  key_info_element = signature_element.add_element("ds:KeyInfo")
@@ -155,7 +157,7 @@ module XMLSecurityNew
155
157
  if certificate.is_a?(String)
156
158
  certificate = OpenSSL::X509::Certificate.new(certificate)
157
159
  end
158
- x509_cert_element.text = Base64.encode64(certificate.to_der).gsub(/\n/, "")
160
+ x509_cert_element.text = Base64.encode64(certificate.to_der).to_s.gsub(/\n/, "").gsub(/\t/, "")
159
161
 
160
162
  # add the signature
161
163
  # issuer_element = self.elements["//saml:Issuer"]
@@ -177,7 +179,7 @@ module XMLSecurityNew
177
179
  protected
178
180
 
179
181
  def compute_signature(private_key, signature_algorithm, document)
180
- Base64.encode64(private_key.sign(signature_algorithm, document)).gsub(/\n/, "")
182
+ Base64.encode64(private_key.sign(signature_algorithm, document)).to_s.gsub(/\n/, "").gsub(/\t/, "")
181
183
  end
182
184
 
183
185
  def compute_digest(document, digest_algorithm)
data/spid-es.gemspec CHANGED
@@ -2,7 +2,7 @@ $LOAD_PATH.push File.expand_path('../lib', __FILE__)
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = 'spid-es'
5
- s.version = '0.0.6'
5
+ s.version = '0.0.7'
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Fabiano Pavan"]
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spid-es
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fabiano Pavan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-10-13 00:00:00.000000000 Z
11
+ date: 2016-10-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: canonix