sepafm 0.1.0 → 0.1.1

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,3 +1,3 @@
1
1
  module Sepa
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
@@ -25,3 +25,17 @@ SCHEMA_PATH = "#{ROOT_PATH}/lib/sepa/xml_schemas"
25
25
  SCHEMA_FILE = "#{ROOT_PATH}/lib/sepa/xml_schemas/wsdl.xml"
26
26
  AR_TEMPLATE_PATH = "#{ROOT_PATH}/lib/sepa/xml_templates/application_request"
27
27
  SOAP_TEMPLATE_PATH = "#{ROOT_PATH}/lib/sepa/xml_templates/soap"
28
+
29
+ # Common XML namespaces
30
+ DSIG = 'http://www.w3.org/2000/09/xmldsig#'
31
+ OASIS_UTILITY = 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd'
32
+ OASIS_SECEXT = 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd'
33
+ XML_DATA = 'http://bxd.fi/xmldata/'
34
+ BXD = 'http://model.bxd.fi'
35
+
36
+ # Nordea XML namespaces
37
+ NORDEA_PKI = 'http://bxd.fi/CertificateService'
38
+ NORDEA_XML_DATA = 'http://filetransfer.nordea.com/xmldata/'
39
+
40
+ # Danske XML namespaces
41
+ DANSKE_PKI = 'http://danskebank.dk/PKI/PKIFactoryService/elements'
@@ -71,7 +71,7 @@ Make sure response is valid
71
71
  response.valid?
72
72
  ```
73
73
 
74
- Get reponse content
74
+ Get response content
75
75
 
76
76
  ```ruby
77
77
  response.content
@@ -2,51 +2,65 @@ require 'test_helper'
2
2
 
3
3
  class DanskeCertResponseTest < ActiveSupport::TestCase
4
4
 
5
- get_bank_cert_soap = Nokogiri::XML(File.open "#{DANSKE_TEST_RESPONSE_PATH}get_bank_cert.xml")
6
- get_bank_cert_response = Sepa::DanskeResponse.new(get_bank_cert_soap, command: :get_bank_certificate)
5
+ setup do
6
+ options = {
7
+ response: (File.open "#{DANSKE_TEST_RESPONSE_PATH}get_bank_cert.xml"),
8
+ command: :get_bank_certificate
9
+ }
10
+ @get_bank_cert_response = Sepa::DanskeResponse.new options
7
11
 
8
- create_certificate_soap = Nokogiri::XML(File.open "#{DANSKE_TEST_RESPONSE_PATH}create_cert.xml")
9
- create_certificate_response = Sepa::DanskeResponse.new(create_certificate_soap, command: :create_certificate)
12
+ options = {
13
+ response: (File.open "#{DANSKE_TEST_RESPONSE_PATH}create_cert.xml"),
14
+ command: :create_certificate
15
+ }
16
+ @create_certificate_response = Sepa::DanskeResponse.new options
17
+ end
10
18
 
11
- ##
12
19
  # Tests for get bank certificate
13
-
14
20
  test 'should have correct bank signing cert with get_bank_certificate command' do
15
- bank_signing_cert = get_bank_cert_response.bank_signing_cert
21
+ bank_signing_cert = @get_bank_cert_response.bank_signing_cert
16
22
  refute_nil bank_signing_cert
17
23
  assert_equal bank_signing_cert.to_s, DANSKE_BANK_SIGNING_CERT
18
24
  end
19
25
 
20
26
  test 'should have corrent bank encryption cert with get bank certificate command' do
21
- bank_encryption_cert = get_bank_cert_response.bank_encryption_cert
27
+ bank_encryption_cert = @get_bank_cert_response.bank_encryption_cert
22
28
  refute_nil bank_encryption_cert
23
29
  assert_equal bank_encryption_cert.to_s, DANSKE_BANK_ENCRYPTION_CERT
24
30
  end
25
31
 
26
32
  test 'should have correct bank root cert with get bank certificate command' do
27
- bank_root_cert = get_bank_cert_response.bank_root_cert
33
+ bank_root_cert = @get_bank_cert_response.bank_root_cert
28
34
  refute_nil bank_root_cert
29
35
  assert_equal bank_root_cert.to_s, DANSKE_BANK_ROOT_CERT
30
36
  end
31
37
 
32
- ##
33
38
  # Tests for create certificate
34
-
35
39
  test 'should have own encryption certificate with create certificate command' do
36
- own_encryption_cert = create_certificate_response.own_encryption_cert
40
+ own_encryption_cert = @create_certificate_response.own_encryption_cert
37
41
  refute_nil own_encryption_cert
38
42
  assert own_encryption_cert.respond_to? :sign
39
43
  end
40
44
 
41
45
  test 'should have on signing certificate with create certificate command' do
42
- own_signing_cert = create_certificate_response.own_signing_cert
46
+ own_signing_cert = @create_certificate_response.own_signing_cert
43
47
  refute_nil own_signing_cert
44
48
  assert own_signing_cert.respond_to? :sign
45
49
  end
46
50
 
47
51
  test 'should have correct CA certificate with create certificate command' do
48
- ca_certificate = create_certificate_response.ca_certificate
52
+ ca_certificate = @create_certificate_response.ca_certificate
49
53
  refute_nil ca_certificate
50
54
  assert ca_certificate.respond_to? :sign
51
55
  end
56
+
57
+ test 'hashes should match' do
58
+ assert @create_certificate_response.hashes_match?
59
+ end
60
+
61
+ test 'hashes shouldnt match when data is corrupted' do
62
+ @create_certificate_response.doc.at('xmlns|ReturnText', xmlns: DANSKE_PKI).content = 'kana'
63
+ refute @create_certificate_response.hashes_match?
64
+ end
65
+
52
66
  end
@@ -66,17 +66,17 @@ class DanskeCertSoapBuilderTest < ActiveSupport::TestCase
66
66
 
67
67
  def test_encrypted_key_is_added_properly_and_can_be_decrypted
68
68
  enc_key = @doc.css("CipherValue", 'xmlns' => @xenc)[0].content
69
- enc_key = Base64.decode64(enc_key)
69
+ enc_key = decode enc_key
70
70
  assert @enc_private_key.private_decrypt(enc_key)
71
71
  end
72
72
 
73
73
  def test_encypted_data_is_added_properly_and_can_be_decrypted
74
74
  enc_key = @doc.css("CipherValue", 'xmlns' => @xenc)[0].content
75
- enc_key = Base64.decode64(enc_key)
75
+ enc_key = decode enc_key
76
76
  key = @enc_private_key.private_decrypt(enc_key)
77
77
 
78
78
  encypted_data = @doc.css("CipherValue", 'xmlns' => @xenc)[1].content
79
- encypted_data = Base64.decode64(encypted_data)
79
+ encypted_data = decode encypted_data
80
80
  iv = encypted_data[0, 8]
81
81
  encypted_data = encypted_data[8, encypted_data.length]
82
82
 
@@ -26,7 +26,7 @@ class DanskeGenericSoapBuilderTest < ActiveSupport::TestCase
26
26
  status: 'ALL',
27
27
  target_id: 'Danske FI',
28
28
  file_type: 'pain.001.001.02',
29
- content: Base64.encode64('kissa'),
29
+ content: encode('kissa'),
30
30
  file_reference: "11111111A12006030329501800000014",
31
31
  }
32
32
 
@@ -159,7 +159,7 @@ class DanskeGenericSoapBuilderTest < ActiveSupport::TestCase
159
159
  inclusive_namespaces = nil, with_comments = false
160
160
  )
161
161
 
162
- actual_digest = Base64.encode64(sha1.digest(body_node)).strip
162
+ actual_digest = encode(sha1.digest(body_node)).strip
163
163
 
164
164
  assert_equal actual_digest, added_digest
165
165
  end
@@ -208,7 +208,7 @@ class DanskeGenericSoapBuilderTest < ActiveSupport::TestCase
208
208
  with_comments = false
209
209
  )
210
210
 
211
- actual_digest = Base64.encode64(sha1.digest(timestamp_node)).strip
211
+ actual_digest = encode(sha1.digest(timestamp_node)).strip
212
212
 
213
213
  assert_equal actual_digest, added_digest
214
214
  end
@@ -230,7 +230,7 @@ class DanskeGenericSoapBuilderTest < ActiveSupport::TestCase
230
230
  with_comments = false
231
231
  )
232
232
 
233
- actual_signature = Base64.encode64(
233
+ actual_signature = encode(
234
234
  private_key.sign(sha1, signed_info_node)
235
235
  ).gsub(/\s+/, "")
236
236
 
@@ -1,38 +1,15 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
- <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:pkif="http://danskebank.dk/PKI/PKIFactoryService" xmlns:elem="http://danskebank.dk/PKI/PKIFactoryService/elements" xmlns:xd="http://www.w3.org/2000/09/xmldsig#">
3
- <soapenv:Header/>
4
- <soapenv:Body>
5
- <CreateCertificateOut xmlns="http://danskebank.dk/PKI/PKIFactoryService">
6
- <pkif:ResponseHeader xmlns="">
7
- <pkif:SenderId>360817</pkif:SenderId>
8
- <pkif:CustomerId>360817</pkif:CustomerId>
9
- <pkif:RequestId>494d9bf886</pkif:RequestId>
10
- <pkif:Timestamp>2014-06-11T10:46:37Z</pkif:Timestamp>
11
- <pkif:InterfaceVersion>1</pkif:InterfaceVersion>
12
- <pkif:Environment>customertest</pkif:Environment>
13
- </pkif:ResponseHeader>
14
- <tns:CreateCertificateResponse xmlns:tns="http://danskebank.dk/PKI/PKIFactoryService/elements" xmlns="" xml:id="response">
15
- <tns:ReturnCode>00</tns:ReturnCode>
16
- <tns:ReturnText>OK</tns:ReturnText>
17
- <tns:EncryptionCert>MIIDnzCCAoegAwIBAgIHHoy+tGx4NjANBgkqhkiG9w0BAQsFADCBwjEQMA4GA1UEAxMHREJHQ0FEQjELMAkGA1UEBhMCREsxEzARBgNVBAcTCkNvcGVuaGFnZW4xEDAOBgNVBAgTB0Rlbm1hcmsxGjAYBgNVBAoTEURhbnNrZSBCYW5rIEdyb3VwMRgwFgYDVQQLEw9EYW5za2UgQmFuayBBL1MxGDAWBgNVBAUTDzYxMTI2MjI4MjIzMDEwMTEJMAcGA1UEBBMAMQkwBwYDVQQqEwAxCTAHBgNVBAwTADEJMAcGA1UEERMAMB4XDTEwMDUyODExMTgzOVoXDTEyMDUyNzExMTgzOVowgaYxIDAeBgNVBAMTF0JFTkdUU1NPTiBPRyBGUi4gSkVOU0VOMQswCQYDVQQGEwJESzEcMBoGA1UEChMTREJUUyBERU1PIDEuICgzNEFLKTEeMBwGA1UECxMVQ09SUE9SQVRFIERFVkVMT1BNRU5UMTcwNQYDVQQFEy5TRS1LRVJIVi9EQUJBOjAwOTIxMDA4NDEtQUdSOjA2MTA0OC1VU1I6MDYxMTMzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCvWdhjVCuWXWu4H8WqUJGuvme+6l0g37fAXur3Xm28RChzvhue7pvwhtsZEyHN3Oa9DhLMV9UQC4wy5Md7Js+rm2HtgOtM2LMorE4GeoTYpi5f1fbYDUqHj2ygkkWDqQ9v0xSCJkGIyW+1vsrcId+DDlZqBacuXwtv5xy8plmX7wIDAQABozgwNjAJBgNVHQ4EAgQAMBkGA1UdIwQSMBCADsLGxMP29vnBwsTCxsTDMA4GA1UdDwEB/wQEAwIEMDANBgkqhkiG9w0BAQsFAAOCAQEAkITeNDN6Mxkb8AXF9SjZ1xfWD+yZcyb5wqQmpvwlM1gfovvV5mW/r2Wgn8uyhwwZd8dDJClNRslQeQrV8FbmCF8uh0dr1z2pt/t3u6lZ5YH1MWmLKGpJ8gGnWkRwEtkeZCuaD+Nji6YCGqCPytmKae+CFvz46XrvQ+VxfoqD8IlSoT2Himw6kfbE7H5oyJtuBSjozz+zz9GE09HQzCn3j1AX1jF0U0qFOXOR185NnDHtQPBytUOOBHBNog1+bVfby7E1nmXum38pMVnv5ReSvnhKhmusmxkHaKCGwgYCoKMvsXntHStAvmH/t4tGdNyLvmC/88GYfoBXtNrsuZV3Ew==</tns:EncryptionCert>
18
- <tns:SigningCert>MIIDnzCCAoegAwIBAgIHHoy+tGx4NTANBgkqhkiG9w0BAQsFADCBwjEQMA4GA1UEAxMHREJHQ0FEQjELMAkGA1UEBhMCREsxEzARBgNVBAcTCkNvcGVuaGFnZW4xEDAOBgNVBAgTB0Rlbm1hcmsxGjAYBgNVBAoTEURhbnNrZSBCYW5rIEdyb3VwMRgwFgYDVQQLEw9EYW5za2UgQmFuayBBL1MxGDAWBgNVBAUTDzYxMTI2MjI4MjIzMDEwMTEJMAcGA1UEBBMAMQkwBwYDVQQqEwAxCTAHBgNVBAwTADEJMAcGA1UEERMAMB4XDTEwMDUyODExMTgzOVoXDTEyMDUyNzExMTgzOVowgaYxIDAeBgNVBAMTF0JFTkdUU1NPTiBPRyBGUi4gSkVOU0VOMQswCQYDVQQGEwJESzEcMBoGA1UEChMTREJUUyBERU1PIDEuICgzNEFLKTEeMBwGA1UECxMVQ09SUE9SQVRFIERFVkVMT1BNRU5UMTcwNQYDVQQFEy5TRS1LRVJIVi9EQUJBOjAwOTIxMDA4NDEtQUdSOjA2MTA0OC1VU1I6MDYxMTMzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCfh+ajEvsFS1kByPsjReO+EmyFglGDiCBh7voya2aSbvGMQm/aAYugTliAhoklq4adwUwqjf86gon3ZdUMDBmDpJiPlxeexBHesOjr32hxzO8u67tS5o1xfDex3ga192g+94pAJsqmn3Fc8LJ0Wn2zJPtYCTYvbrx6551QLiD3fwIDAQABozgwNjAJBgNVHQ4EAgQAMBkGA1UdIwQSMBCADsLGxMP29vnBwsTCxsTDMA4GA1UdDwEB/wQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAQEASgxJaAoWP08MKVnuvNxG7EkmogFUfKCX7fWrHYxDzEs5uhnRQ6IR4GitTHEM/BE5KNGu6MuHuKMhp4HuMBg5YzaFtk5yFk+K6BjLEEFwz/NBFLyrtPmrezxjmxMYx4PRTqeyEthOIkZ1KFQvzxB1Vg2Kt5fqdvxKVODAFstJB2nE3uICnrOQmHlo/R/1rp0J/VQnOsWdgKmIFhFlFdFpWhI7m1ry7cuilHPdCHq+M83jGfTYVXulwbxDYv0LPHZGzCxoAnxZQM4r2HqwXTCZiRT/eP+fEv7A571aHb9GhJhQQQ0lStd1vhOJu1LlO3fe68SSKSye5CozKwvvlEwbag==</tns:SigningCert>
19
- <tns:CACert>MIIEFzCCAv+gAwIBAgIFAc+WvjUwDQYJKoZIhvcNAQELBQAwgZgxEDAOBgNVBAMTB0RCR1JPT1QxCzAJBgNVBAYTAkRLMRMwEQYDVQQHEwpDb3BlbmhhZ2VuMRAwDgYDVQQIEwdEZW5tYXJrMRowGAYDVQQKExFEYW5za2UgQmFuayBHcm91cDEaMBgGA1UECxMRRGFuc2tlIEJhbmsgR3JvdXAxGDAWBgNVBAUTDzYxMTI2MjI4MTEzMDAwMzAeFw0xMDEwMTEwMDAwMDBaFw0yMDEwMTEwMDAwMDBaMIGaMRAwDgYDVQQDEwdEQkdTV0RLMQswCQYDVQQGEwJESzETMBEGA1UEBxMKQ29wZW5oYWdlbjEQMA4GA1UECBMHRGVubWFyazEaMBgGA1UEChMRRGFuc2tlIEJhbmsgR3JvdXAxHDAaBgNVBAsTE0RhbnNrZSBCYW5rIERlbm1hcmsxGDAWBgNVBAUTDzYxMTI2MjI4NzczMDEwMTCCASAwDQYJKoZIhvcNAQEBBQADggENADCCAQgCggEBAOC0DrY9Q4HzHQ/BWr/RWB1GOq+90BiGN85uhWAeGGMI2od/ahn/R7zl8+MNcMLAuVHB8LvzRrC3lxZqjNvRKv8fYsMgwdmdYtBwiqHINpXTLjQxtLEWqEu5fiMZAi1oFE08YAkCDLUGopbkY+d2KULqxFK2blwHi3m0jOwuZGiw4ELeChGcELsOpCT/oJU5mR3dFHbRs3HBgWmuFwJKvwHNZeNAmrCwEUWqw1x4MjQRHRGl10TfTNqPrd7zyTfyR0+GPy1INxHwWZroBUc9j54ONX9pV6x835WedHdo80UxImjCiIruClzsMAXYtvsC3d9xgk9oLNFIVPRe2fTs07ECAQOjZjBkMB8GA1UdIwQYMBaAFLU6ie9kUC8x5CDLauuTRJBL35qYMB0GA1UdDgQWBBQO5nD7QkqlQCrxigdJncTYo20tIzAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADANBgkqhkiG9w0BAQsFAAOCAQEAQPCp0H3g88CZZurq0kS76ozBVRiLZ3V8S0+IYi0dmMCfTpW/qnEzMGn+NlHOvgkm5C2VaHCdbEzZPsvv4cx2YrqpsFf8x+Ts6W2r3VVjOdve5u0Oj1CK/ONwaqUl5p4SxRCfnv6sSh6TwxhJF/zESiHXLdyWdJf+NkXsATE6QB4ZjgaGw1NcvhnDUvbbfUZ1zOTIf7+wUpfCNCJi0T1sFvJ88nYkVoQmVWQFS7Kwj+kwQ1ILfnp/1xbycrt1XNxZ8SkRDAWOJARY0fS/C0o7/1t/SB2ePrY/g0U8ZWi0B6odT5isGNpLOKzhD5YGjbKGesC9GEnhmhLoawXU7b4Wcw==</tns:CACert>
20
- <tns:RequestId/>
21
- <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
22
- <SignedInfo>
23
- <CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
24
- <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
25
- <Reference URI="#response">
26
- <Transforms>
27
- <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
28
- <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
29
- </Transforms>
30
- <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
31
- <DigestValue>2vCYl3h7ksRgk7IyV2axgpXxTWM=</DigestValue>
32
- </Reference>
33
- </SignedInfo>
34
- <SignatureValue>CqPQW88gjJayDovXbk++IXJ5yjAJNf5+BL6wodkwIErqLdK3DYeAn9T6MQRNciB7POZkKqtnFj4CG1mbpGRCP5yduaBYP96uUoRSZiGuFHqb5HvMIgMvDCsnRJX11tUaMhrZkktYb0Xx2ulPrbLm/n9kW9L0oZftEijm7ixYSIsNEdJMHxWqCDGQCzLwD5zz512nNHEm3Ddimvh3mOqZ6deGtfODl4KuK247NNuak6Pjz9sE5hJnwDi4E1jtme735HEcxkrtYlqTIOjPXS/xRKkHEW6R59R3DR3FpYAo3H+SR/2WptoQhaBvVtlzle9Z8BG2JFRnbudAo3CkA245Vg==</SignatureValue><KeyInfo><X509Data><X509Certificate>MIIEADCCAuigAwIBAgIFAMa3bfMwDQYJKoZIhvcNAQELBQAwgZgxEDAOBgNVBAMTB0RCR1JPT1QxCzAJBgNVBAYTAkRLMRMwEQYDVQQHEwpDb3BlbmhhZ2VuMRAwDgYDVQQIEwdEZW5tYXJrMRowGAYDVQQKExFEYW5za2UgQmFuayBHcm91cDEaMBgGA1UECxMRRGFuc2tlIEJhbmsgR3JvdXAxGDAWBgNVBAUTDzYxMTI2MjI4MTExMDAwMjAeFw0xMjA4MDEwMDAwMDBaFw0xNDEwMzEwMDAwMDBaMIGXMQ8wDQYDVQQDEwZEUFNJR04xCzAJBgNVBAYTAkRLMRMwEQYDVQQHEwpDb3BlbmhhZ2VuMRAwDgYDVQQIEwdEZW5tYXJrMRowGAYDVQQKExFEYW5za2UgQmFuayBHcm91cDEaMBgGA1UECxMRRGFuc2tlIEJhbmsgR3JvdXAxGDAWBgNVBAUTDzYxMTI2MjI4MzkxMDAwMzCCASAwDQYJKoZIhvcNAQEBBQADggENADCCAQgCggEBAL1zYMqPk/6klEpL5wo+vWAo3MmxPz4wq9wuLAHpPUhJ4ZpHmncNsdmqSSXT6U4mxTY8tzKvz4ZdTDljp+5J6OxOl1B7av3V7hlHtfGb7wozsBAya2JOoPrLxc+ajapslbduiEvdhW9ZLKvn/n7rQ9sZzHA6GyGKQk8lfvKK+OjMylA86XyxApasFD/0eIDnzUJHth3UpPoQTJAlB7h7d4CKc/QG9tFv900AAi4R/Tmy9TRai7fVCkXz7y4qRXN+M7NIhDGAsCmtM6oSuDqjv3lh10nD7XELTxTvcbpq5xHLt9yknwjiM2ivc4XudDMgC7ESoH6vaJSUcbC17+wa6IUCAQOjUjBQMB8GA1UdIwQYMBaAFIT65b/ekUlm38WKUsOzt7MgHMdtMB0GA1UdDgQWBBQHbPgey2TInIKC7xbag8AZG25qnTAOBgNVHQ8BAf8EBAMCBsAwDQYJKoZIhvcNAQELBQADggEBAFl3WfGkVElIeUXjQsr8uQFXhkSbrI14F6mRIkUpCTa9Px/UUfw1HQNVn4Tyep30JmfsFN91Yj387jiZDzoeMYeiVI32wyZkao7rC3Z4YhAfUdPdVFZqO1k2gOgoZ49nyLKVS+GlyuzeLQVBnFE7f3sbpgDTRzd8o58W5VncHuzmSj/IVe8ZwRQ4bm3cHlKTQpRnyz5x7UJjp08fH6KOUal8DVsOaQKoo+jWIsPPir58b/QZsxIRL4uq3qqQt5udrbZqyltRsyxUpgomIN5irCn7Wgr+iYwNLhzXYwxKvwKsNRS7isEAZuyfH9fNarBRP4p72g+225NB0itQ73Xo7pg=</X509Certificate><X509IssuerSerial><X509IssuerName>serialNumber=611262281110002, OU=Danske Bank Group, O=Danske Bank Group, ST=Denmark, L=Copenhagen, C=DK, CN=DBGROOT</X509IssuerName><X509SerialNumber>3333910003</X509SerialNumber></X509IssuerSerial></X509Data></KeyInfo></Signature>
35
- </tns:CreateCertificateResponse>
36
- </CreateCertificateOut>
37
- </soapenv:Body>
38
- </soapenv:Envelope>
2
+ <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:pkif="http://danskebank.dk/PKI/PKIFactoryService" xmlns:elem="http://danskebank.dk/PKI/PKIFactoryService/elements" xmlns:xd="http://www.w3.org/2000/09/xmldsig#"><soapenv:Header/><soapenv:Body><CreateCertificateOut xmlns="http://danskebank.dk/PKI/PKIFactoryService"><pkif:ResponseHeader xmlns=""><pkif:SenderId>360817</pkif:SenderId><pkif:CustomerId>360817</pkif:CustomerId><pkif:RequestId>b0410899f4</pkif:RequestId><pkif:Timestamp>2014-06-25T11:45:47Z</pkif:Timestamp><pkif:InterfaceVersion>1</pkif:InterfaceVersion><pkif:Environment>customertest</pkif:Environment></pkif:ResponseHeader><tns:CreateCertificateResponse xml:id="response" xmlns:tns="http://danskebank.dk/PKI/PKIFactoryService/elements" xmlns=""><tns:ReturnCode>00</tns:ReturnCode><tns:ReturnText>OK</tns:ReturnText><tns:EncryptionCert>MIIDnzCCAoegAwIBAgIHHoy+tGx4NjANBgkqhkiG9w0BAQsFADCBwjEQMA4GA1UEAxMHREJHQ0FEQjELMAkGA1UEBhMCREsxEzARBgNVBAcTCkNvcGVuaGFnZW4xEDAOBgNVBAgTB0Rlbm1hcmsxGjAYBgNVBAoTEURhbnNrZSBCYW5rIEdyb3VwMRgwFgYDVQQLEw9EYW5za2UgQmFuayBBL1MxGDAWBgNVBAUTDzYxMTI2MjI4MjIzMDEwMTEJMAcGA1UEBBMAMQkwBwYDVQQqEwAxCTAHBgNVBAwTADEJMAcGA1UEERMAMB4XDTEwMDUyODExMTgzOVoXDTEyMDUyNzExMTgzOVowgaYxIDAeBgNVBAMTF0JFTkdUU1NPTiBPRyBGUi4gSkVOU0VOMQswCQYDVQQGEwJESzEcMBoGA1UEChMTREJUUyBERU1PIDEuICgzNEFLKTEeMBwGA1UECxMVQ09SUE9SQVRFIERFVkVMT1BNRU5UMTcwNQYDVQQFEy5TRS1LRVJIVi9EQUJBOjAwOTIxMDA4NDEtQUdSOjA2MTA0OC1VU1I6MDYxMTMzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCvWdhjVCuWXWu4H8WqUJGuvme+6l0g37fAXur3Xm28RChzvhue7pvwhtsZEyHN3Oa9DhLMV9UQC4wy5Md7Js+rm2HtgOtM2LMorE4GeoTYpi5f1fbYDUqHj2ygkkWDqQ9v0xSCJkGIyW+1vsrcId+DDlZqBacuXwtv5xy8plmX7wIDAQABozgwNjAJBgNVHQ4EAgQAMBkGA1UdIwQSMBCADsLGxMP29vnBwsTCxsTDMA4GA1UdDwEB/wQEAwIEMDANBgkqhkiG9w0BAQsFAAOCAQEAkITeNDN6Mxkb8AXF9SjZ1xfWD+yZcyb5wqQmpvwlM1gfovvV5mW/r2Wgn8uyhwwZd8dDJClNRslQeQrV8FbmCF8uh0dr1z2pt/t3u6lZ5YH1MWmLKGpJ8gGnWkRwEtkeZCuaD+Nji6YCGqCPytmKae+CFvz46XrvQ+VxfoqD8IlSoT2Himw6kfbE7H5oyJtuBSjozz+zz9GE09HQzCn3j1AX1jF0U0qFOXOR185NnDHtQPBytUOOBHBNog1+bVfby7E1nmXum38pMVnv5ReSvnhKhmusmxkHaKCGwgYCoKMvsXntHStAvmH/t4tGdNyLvmC/88GYfoBXtNrsuZV3Ew==</tns:EncryptionCert><tns:SigningCert>MIIDnzCCAoegAwIBAgIHHoy+tGx4NTANBgkqhkiG9w0BAQsFADCBwjEQMA4GA1UEAxMHREJHQ0FEQjELMAkGA1UEBhMCREsxEzARBgNVBAcTCkNvcGVuaGFnZW4xEDAOBgNVBAgTB0Rlbm1hcmsxGjAYBgNVBAoTEURhbnNrZSBCYW5rIEdyb3VwMRgwFgYDVQQLEw9EYW5za2UgQmFuayBBL1MxGDAWBgNVBAUTDzYxMTI2MjI4MjIzMDEwMTEJMAcGA1UEBBMAMQkwBwYDVQQqEwAxCTAHBgNVBAwTADEJMAcGA1UEERMAMB4XDTEwMDUyODExMTgzOVoXDTEyMDUyNzExMTgzOVowgaYxIDAeBgNVBAMTF0JFTkdUU1NPTiBPRyBGUi4gSkVOU0VOMQswCQYDVQQGEwJESzEcMBoGA1UEChMTREJUUyBERU1PIDEuICgzNEFLKTEeMBwGA1UECxMVQ09SUE9SQVRFIERFVkVMT1BNRU5UMTcwNQYDVQQFEy5TRS1LRVJIVi9EQUJBOjAwOTIxMDA4NDEtQUdSOjA2MTA0OC1VU1I6MDYxMTMzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCfh+ajEvsFS1kByPsjReO+EmyFglGDiCBh7voya2aSbvGMQm/aAYugTliAhoklq4adwUwqjf86gon3ZdUMDBmDpJiPlxeexBHesOjr32hxzO8u67tS5o1xfDex3ga192g+94pAJsqmn3Fc8LJ0Wn2zJPtYCTYvbrx6551QLiD3fwIDAQABozgwNjAJBgNVHQ4EAgQAMBkGA1UdIwQSMBCADsLGxMP29vnBwsTCxsTDMA4GA1UdDwEB/wQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAQEASgxJaAoWP08MKVnuvNxG7EkmogFUfKCX7fWrHYxDzEs5uhnRQ6IR4GitTHEM/BE5KNGu6MuHuKMhp4HuMBg5YzaFtk5yFk+K6BjLEEFwz/NBFLyrtPmrezxjmxMYx4PRTqeyEthOIkZ1KFQvzxB1Vg2Kt5fqdvxKVODAFstJB2nE3uICnrOQmHlo/R/1rp0J/VQnOsWdgKmIFhFlFdFpWhI7m1ry7cuilHPdCHq+M83jGfTYVXulwbxDYv0LPHZGzCxoAnxZQM4r2HqwXTCZiRT/eP+fEv7A571aHb9GhJhQQQ0lStd1vhOJu1LlO3fe68SSKSye5CozKwvvlEwbag==</tns:SigningCert><tns:CACert>MIIEFzCCAv+gAwIBAgIFAc+WvjUwDQYJKoZIhvcNAQELBQAwgZgxEDAOBgNVBAMTB0RCR1JPT1QxCzAJBgNVBAYTAkRLMRMwEQYDVQQHEwpDb3BlbmhhZ2VuMRAwDgYDVQQIEwdEZW5tYXJrMRowGAYDVQQKExFEYW5za2UgQmFuayBHcm91cDEaMBgGA1UECxMRRGFuc2tlIEJhbmsgR3JvdXAxGDAWBgNVBAUTDzYxMTI2MjI4MTEzMDAwMzAeFw0xMDEwMTEwMDAwMDBaFw0yMDEwMTEwMDAwMDBaMIGaMRAwDgYDVQQDEwdEQkdTV0RLMQswCQYDVQQGEwJESzETMBEGA1UEBxMKQ29wZW5oYWdlbjEQMA4GA1UECBMHRGVubWFyazEaMBgGA1UEChMRRGFuc2tlIEJhbmsgR3JvdXAxHDAaBgNVBAsTE0RhbnNrZSBCYW5rIERlbm1hcmsxGDAWBgNVBAUTDzYxMTI2MjI4NzczMDEwMTCCASAwDQYJKoZIhvcNAQEBBQADggENADCCAQgCggEBAOC0DrY9Q4HzHQ/BWr/RWB1GOq+90BiGN85uhWAeGGMI2od/ahn/R7zl8+MNcMLAuVHB8LvzRrC3lxZqjNvRKv8fYsMgwdmdYtBwiqHINpXTLjQxtLEWqEu5fiMZAi1oFE08YAkCDLUGopbkY+d2KULqxFK2blwHi3m0jOwuZGiw4ELeChGcELsOpCT/oJU5mR3dFHbRs3HBgWmuFwJKvwHNZeNAmrCwEUWqw1x4MjQRHRGl10TfTNqPrd7zyTfyR0+GPy1INxHwWZroBUc9j54ONX9pV6x835WedHdo80UxImjCiIruClzsMAXYtvsC3d9xgk9oLNFIVPRe2fTs07ECAQOjZjBkMB8GA1UdIwQYMBaAFLU6ie9kUC8x5CDLauuTRJBL35qYMB0GA1UdDgQWBBQO5nD7QkqlQCrxigdJncTYo20tIzAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADANBgkqhkiG9w0BAQsFAAOCAQEAQPCp0H3g88CZZurq0kS76ozBVRiLZ3V8S0+IYi0dmMCfTpW/qnEzMGn+NlHOvgkm5C2VaHCdbEzZPsvv4cx2YrqpsFf8x+Ts6W2r3VVjOdve5u0Oj1CK/ONwaqUl5p4SxRCfnv6sSh6TwxhJF/zESiHXLdyWdJf+NkXsATE6QB4ZjgaGw1NcvhnDUvbbfUZ1zOTIf7+wUpfCNCJi0T1sFvJ88nYkVoQmVWQFS7Kwj+kwQ1ILfnp/1xbycrt1XNxZ8SkRDAWOJARY0fS/C0o7/1t/SB2ePrY/g0U8ZWi0B6odT5isGNpLOKzhD5YGjbKGesC9GEnhmhLoawXU7b4Wcw==</tns:CACert><tns:RequestId/><Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
3
+ <SignedInfo>
4
+ <CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
5
+ <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
6
+ <Reference URI="#response">
7
+ <Transforms>
8
+ <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
9
+ <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
10
+ </Transforms>
11
+ <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
12
+ <DigestValue>2vCYl3h7ksRgk7IyV2axgpXxTWM=</DigestValue>
13
+ </Reference>
14
+ </SignedInfo>
15
+ <SignatureValue>CqPQW88gjJayDovXbk++IXJ5yjAJNf5+BL6wodkwIErqLdK3DYeAn9T6MQRNciB7POZkKqtnFj4CG1mbpGRCP5yduaBYP96uUoRSZiGuFHqb5HvMIgMvDCsnRJX11tUaMhrZkktYb0Xx2ulPrbLm/n9kW9L0oZftEijm7ixYSIsNEdJMHxWqCDGQCzLwD5zz512nNHEm3Ddimvh3mOqZ6deGtfODl4KuK247NNuak6Pjz9sE5hJnwDi4E1jtme735HEcxkrtYlqTIOjPXS/xRKkHEW6R59R3DR3FpYAo3H+SR/2WptoQhaBvVtlzle9Z8BG2JFRnbudAo3CkA245Vg==</SignatureValue><KeyInfo><X509Data><X509Certificate>MIIEADCCAuigAwIBAgIFAMa3bfMwDQYJKoZIhvcNAQELBQAwgZgxEDAOBgNVBAMTB0RCR1JPT1QxCzAJBgNVBAYTAkRLMRMwEQYDVQQHEwpDb3BlbmhhZ2VuMRAwDgYDVQQIEwdEZW5tYXJrMRowGAYDVQQKExFEYW5za2UgQmFuayBHcm91cDEaMBgGA1UECxMRRGFuc2tlIEJhbmsgR3JvdXAxGDAWBgNVBAUTDzYxMTI2MjI4MTExMDAwMjAeFw0xMjA4MDEwMDAwMDBaFw0xNDEwMzEwMDAwMDBaMIGXMQ8wDQYDVQQDEwZEUFNJR04xCzAJBgNVBAYTAkRLMRMwEQYDVQQHEwpDb3BlbmhhZ2VuMRAwDgYDVQQIEwdEZW5tYXJrMRowGAYDVQQKExFEYW5za2UgQmFuayBHcm91cDEaMBgGA1UECxMRRGFuc2tlIEJhbmsgR3JvdXAxGDAWBgNVBAUTDzYxMTI2MjI4MzkxMDAwMzCCASAwDQYJKoZIhvcNAQEBBQADggENADCCAQgCggEBAL1zYMqPk/6klEpL5wo+vWAo3MmxPz4wq9wuLAHpPUhJ4ZpHmncNsdmqSSXT6U4mxTY8tzKvz4ZdTDljp+5J6OxOl1B7av3V7hlHtfGb7wozsBAya2JOoPrLxc+ajapslbduiEvdhW9ZLKvn/n7rQ9sZzHA6GyGKQk8lfvKK+OjMylA86XyxApasFD/0eIDnzUJHth3UpPoQTJAlB7h7d4CKc/QG9tFv900AAi4R/Tmy9TRai7fVCkXz7y4qRXN+M7NIhDGAsCmtM6oSuDqjv3lh10nD7XELTxTvcbpq5xHLt9yknwjiM2ivc4XudDMgC7ESoH6vaJSUcbC17+wa6IUCAQOjUjBQMB8GA1UdIwQYMBaAFIT65b/ekUlm38WKUsOzt7MgHMdtMB0GA1UdDgQWBBQHbPgey2TInIKC7xbag8AZG25qnTAOBgNVHQ8BAf8EBAMCBsAwDQYJKoZIhvcNAQELBQADggEBAFl3WfGkVElIeUXjQsr8uQFXhkSbrI14F6mRIkUpCTa9Px/UUfw1HQNVn4Tyep30JmfsFN91Yj387jiZDzoeMYeiVI32wyZkao7rC3Z4YhAfUdPdVFZqO1k2gOgoZ49nyLKVS+GlyuzeLQVBnFE7f3sbpgDTRzd8o58W5VncHuzmSj/IVe8ZwRQ4bm3cHlKTQpRnyz5x7UJjp08fH6KOUal8DVsOaQKoo+jWIsPPir58b/QZsxIRL4uq3qqQt5udrbZqyltRsyxUpgomIN5irCn7Wgr+iYwNLhzXYwxKvwKsNRS7isEAZuyfH9fNarBRP4p72g+225NB0itQ73Xo7pg=</X509Certificate><X509IssuerSerial><X509IssuerName>serialNumber=611262281110002, OU=Danske Bank Group, O=Danske Bank Group, ST=Denmark, L=Copenhagen, C=DK, CN=DBGROOT</X509IssuerName><X509SerialNumber>3333910003</X509SerialNumber></X509IssuerSerial></X509Data></KeyInfo></Signature></tns:CreateCertificateResponse></CreateCertificateOut></soapenv:Body></soapenv:Envelope>
@@ -9,16 +9,16 @@ class NordeaApplicationRequestTest < ActiveSupport::TestCase
9
9
  @nordea_generic_params[:private_key] = OpenSSL::PKey::RSA.new @nordea_generic_params[:private_key]
10
10
  @nordea_generic_params[:cert] = OpenSSL::X509::Certificate.new @nordea_generic_params[:cert]
11
11
 
12
- ar_file = Sepa::SoapBuilder.new(@nordea_generic_params).ar
12
+ ar_file = Sepa::SoapBuilder.new(@nordea_generic_params).application_request
13
13
 
14
14
  @nordea_generic_params[:command] = :get_user_info
15
- ar_get = Sepa::SoapBuilder.new(@nordea_generic_params).ar
15
+ ar_get = Sepa::SoapBuilder.new(@nordea_generic_params).application_request
16
16
 
17
17
  @nordea_generic_params[:command] = :download_file_list
18
- ar_list = Sepa::SoapBuilder.new(@nordea_generic_params).ar
18
+ ar_list = Sepa::SoapBuilder.new(@nordea_generic_params).application_request
19
19
 
20
20
  @nordea_generic_params[:command] = :upload_file
21
- ar_up = Sepa::SoapBuilder.new(@nordea_generic_params).ar
21
+ ar_up = Sepa::SoapBuilder.new(@nordea_generic_params).application_request
22
22
 
23
23
  @doc_file = Nokogiri::XML(ar_file.to_xml)
24
24
  @doc_get = Nokogiri::XML(ar_get.to_xml)
@@ -36,8 +36,8 @@ class NordeaApplicationRequestTest < ActiveSupport::TestCase
36
36
  sha1.reset
37
37
 
38
38
  xmldsig_schema_digest = sha1.digest(xmldsig_schema)
39
- assert_equal Base64.encode64(ar_schema_digest).strip, "1O24A7+/6S7CFYVlhH1jEZh1ARs="
40
- assert_equal Base64.encode64(xmldsig_schema_digest).strip, "bmG0+2KykgkLeWsXsl6CFbyo4Yc="
39
+ assert_equal encode(ar_schema_digest).strip, "1O24A7+/6S7CFYVlhH1jEZh1ARs="
40
+ assert_equal encode(xmldsig_schema_digest).strip, "bmG0+2KykgkLeWsXsl6CFbyo4Yc="
41
41
  end
42
42
 
43
43
  def test_ar_should_initialize_with_proper_params
@@ -165,7 +165,7 @@ class NordeaApplicationRequestTest < ActiveSupport::TestCase
165
165
  end
166
166
 
167
167
  def test_should_have_content_when_upload_file
168
- assert_equal @doc_up.at_css("Content").content, Base64.encode64(@nordea_generic_params[:content])
168
+ assert_equal @doc_up.at_css("Content").content, encode(@nordea_generic_params[:content])
169
169
  end
170
170
 
171
171
  def test_should_not_have_content_when_download_file_list
@@ -200,7 +200,7 @@ class NordeaApplicationRequestTest < ActiveSupport::TestCase
200
200
 
201
201
  # Calculate digest
202
202
  sha1 = OpenSSL::Digest::SHA1.new
203
- actual_digest = Base64.encode64(sha1.digest(@doc_file.canonicalize))
203
+ actual_digest = encode(sha1.digest(@doc_file.canonicalize))
204
204
 
205
205
  # And then make sure the two are equal
206
206
  assert_equal calculated_digest.strip, actual_digest.strip
@@ -222,7 +222,7 @@ class NordeaApplicationRequestTest < ActiveSupport::TestCase
222
222
  private_key = OpenSSL::PKey::RSA.new(File.read("#{keys_path}/nordea.key"))
223
223
 
224
224
  sha1 = OpenSSL::Digest::SHA1.new
225
- actual_signature = Base64.encode64(private_key.sign(
225
+ actual_signature = encode(private_key.sign(
226
226
  sha1, signed_info_node.canonicalize))
227
227
 
228
228
  # And then of course assert the two are equal
@@ -1,23 +1,38 @@
1
1
  require 'test_helper'
2
2
 
3
3
  class NordeaApplicationResponseTest < ActiveSupport::TestCase
4
+ include Sepa::Utilities
4
5
 
5
- def setup
6
- keys_path = File.expand_path('../keys', __FILE__)
7
- @root_cert = OpenSSL::X509::Certificate.new File.read("#{keys_path}/root_cert.cer")
8
- @not_root_cert = OpenSSL::X509::Certificate.new File.read("#{keys_path}/nordea.crt")
9
-
10
- @dfl = Nokogiri::XML(File.read("#{NORDEA_TEST_RESPONSE_PATH}/dfl.xml"))
11
- @dfl = Sepa::Response.new(@dfl, command: :download_file_list).application_response
12
-
13
- @uf = Nokogiri::XML(File.read("#{NORDEA_TEST_RESPONSE_PATH}/uf.xml"))
14
- @uf = Sepa::Response.new(@uf, command: :upload_file).application_response
6
+ KEYS_PATH = File.expand_path('../keys', __FILE__)
15
7
 
16
- @df_tito = Nokogiri::XML(File.read("#{NORDEA_TEST_RESPONSE_PATH}/df_tito.xml"))
17
- @df_tito = Sepa::Response.new(@df_tito, command: :download_file).application_response
18
-
19
- @gui = Nokogiri::XML(File.read("#{NORDEA_TEST_RESPONSE_PATH}/gui.xml"))
20
- @gui = Sepa::Response.new(@gui, command: :get_user_info).application_response
8
+ def setup
9
+ options = {
10
+ response: File.read("#{NORDEA_TEST_RESPONSE_PATH}/dfl.xml"),
11
+ command: :download_file_list
12
+ }
13
+ @dfl = Sepa::NordeaResponse.new(options).application_response
14
+ @dfl_doc = xml_doc @dfl
15
+
16
+ options = {
17
+ response: File.read("#{NORDEA_TEST_RESPONSE_PATH}/uf.xml"),
18
+ command: :upload_file
19
+ }
20
+ @uf = Sepa::NordeaResponse.new(options).application_response
21
+ @uf_doc = xml_doc @dfl
22
+
23
+ options = {
24
+ response: File.read("#{NORDEA_TEST_RESPONSE_PATH}/df_tito.xml"),
25
+ command: :download_file
26
+ }
27
+ @df_tito = Sepa::NordeaResponse.new(options).application_response
28
+ @df_tito_doc = xml_doc @df_tito
29
+
30
+ options = {
31
+ response: File.read("#{NORDEA_TEST_RESPONSE_PATH}/gui.xml"),
32
+ command: :get_user_info
33
+ }
34
+ @gui = Sepa::NordeaResponse.new(options).application_response
35
+ @gui_doc = xml_doc @gui
21
36
 
22
37
  @dfl_ar = Sepa::ApplicationResponse.new(@dfl)
23
38
  @uf_ar = Sepa::ApplicationResponse.new(@uf)
@@ -32,7 +47,7 @@ class NordeaApplicationResponseTest < ActiveSupport::TestCase
32
47
  assert @gui_ar.valid?
33
48
  end
34
49
 
35
- def test_should_fail_if_initialized_with_not_nokogiri_xml
50
+ def test_should_fail_if_initialized_with_invalid_xml
36
51
  as = Sepa::ApplicationResponse.new("Jees")
37
52
  refute as.valid?
38
53
  end
@@ -59,39 +74,39 @@ class NordeaApplicationResponseTest < ActiveSupport::TestCase
59
74
  end
60
75
 
61
76
  def test_invalid_dfl_hash_check_should_not_verify
62
- customer_id_node = @dfl.at_css('c2b|CustomerId')
77
+ customer_id_node = @dfl_doc.at_css('c2b|CustomerId')
63
78
  customer_id_node.content = customer_id_node.content[0..-2]
64
79
 
65
- refute Sepa::ApplicationResponse.new(@dfl).hashes_match?
80
+ refute Sepa::ApplicationResponse.new(@dfl_doc.to_s).hashes_match?
66
81
  end
67
82
 
68
83
  def test_invalid_uf_hash_check_should_not_verify
69
- timestamp_node = @uf.at_css('c2b|Timestamp')
84
+ timestamp_node = @uf_doc.at_css('c2b|Timestamp')
70
85
  timestamp_node.content = Time.now.iso8601
71
86
 
72
- refute Sepa::ApplicationResponse.new(@uf).hashes_match?
87
+ refute Sepa::ApplicationResponse.new(@uf_doc.to_s).hashes_match?
73
88
  end
74
89
 
75
90
  def test_invalid_df_hash_check_should_not_verify
76
- digest_value_node = @df_tito.at_css(
91
+ digest_value_node = @df_tito_doc.at_css(
77
92
  'xmlns|DigestValue',
78
93
  'xmlns' => 'http://www.w3.org/2000/09/xmldsig#'
79
94
  )
80
95
 
81
96
  digest_value_node.content = digest_value_node.content[4..-1]
82
97
 
83
- refute Sepa::ApplicationResponse.new(@df_tito).hashes_match?
98
+ refute Sepa::ApplicationResponse.new(@df_tito_doc.to_s).hashes_match?
84
99
  end
85
100
 
86
101
  def test_invalid_gui_hash_check_should_not_verify
87
- digest_value_node = @gui.at_css(
102
+ digest_value_node = @gui_doc.at_css(
88
103
  'xmlns|DigestValue',
89
104
  'xmlns' => 'http://www.w3.org/2000/09/xmldsig#'
90
105
  )
91
106
 
92
107
  digest_value_node.content = '1234' + digest_value_node.content
93
108
 
94
- refute Sepa::ApplicationResponse.new(@gui).hashes_match?
109
+ refute Sepa::ApplicationResponse.new(@gui_doc.to_s).hashes_match?
95
110
  end
96
111
 
97
112
  def test_proper_dfl_signature_should_verify
@@ -111,51 +126,51 @@ class NordeaApplicationResponseTest < ActiveSupport::TestCase
111
126
  end
112
127
 
113
128
  def test_corrupted_signature_in_dfl_should_fail_signature_verification
114
- signature_node = @dfl.at_css(
129
+ signature_node = @dfl_doc.at_css(
115
130
  'xmlns|SignatureValue',
116
131
  'xmlns' => 'http://www.w3.org/2000/09/xmldsig#'
117
132
  )
118
133
 
119
134
  signature_node.content = signature_node.content[4..-1]
120
135
 
121
- refute Sepa::ApplicationResponse.new(@dfl).signature_is_valid?
136
+ refute Sepa::ApplicationResponse.new(@dfl_doc.to_s).signature_is_valid?
122
137
  end
123
138
 
124
139
  def test_corrupted_signature_in_uf_should_fail_signature_verification
125
- signature_node = @uf.at_css(
140
+ signature_node = @uf_doc.at_css(
126
141
  'xmlns|SignatureValue',
127
142
  'xmlns' => 'http://www.w3.org/2000/09/xmldsig#'
128
143
  )
129
144
 
130
145
  signature_node.content = signature_node.content[0..-5]
131
146
 
132
- refute Sepa::ApplicationResponse.new(@uf).signature_is_valid?
147
+ refute Sepa::ApplicationResponse.new(@uf_doc.to_s).signature_is_valid?
133
148
  end
134
149
 
135
150
  def test_corrupted_signature_in_df_should_fail_signature_verification
136
- signature_node = @df_tito.at_css(
151
+ signature_node = @df_tito_doc.at_css(
137
152
  'xmlns|SignatureValue',
138
153
  'xmlns' => 'http://www.w3.org/2000/09/xmldsig#'
139
154
  )
140
155
 
141
156
  signature_node.content = 'a' + signature_node.content[1..-1]
142
157
 
143
- refute Sepa::ApplicationResponse.new(@df_tito).signature_is_valid?
158
+ refute Sepa::ApplicationResponse.new(@df_tito_doc.to_s).signature_is_valid?
144
159
  end
145
160
 
146
161
  def test_corrupted_signature_in_gui_should_fail_signature_verification
147
- signature_node = @gui.at_css(
162
+ signature_node = @gui_doc.at_css(
148
163
  'xmlns|SignatureValue',
149
164
  'xmlns' => 'http://www.w3.org/2000/09/xmldsig#'
150
165
  )
151
166
 
152
167
  signature_node.content = 'zombi' + signature_node.content[1..-1]
153
168
 
154
- refute Sepa::ApplicationResponse.new(@gui).signature_is_valid?
169
+ refute Sepa::ApplicationResponse.new(@gui_doc.to_s).signature_is_valid?
155
170
  end
156
171
 
157
172
  def test_should_raise_error_if_certificate_corrupted_in_dfl
158
- cert_node = @dfl.at_css(
173
+ cert_node = @dfl_doc.at_css(
159
174
  'xmlns|X509Certificate',
160
175
  'xmlns' => 'http://www.w3.org/2000/09/xmldsig#'
161
176
  )
@@ -163,12 +178,12 @@ class NordeaApplicationResponseTest < ActiveSupport::TestCase
163
178
  cert_node.content = cert_node.content[0..-5]
164
179
 
165
180
  assert_raises(OpenSSL::X509::CertificateError) do
166
- Sepa::ApplicationResponse.new(@dfl).certificate
181
+ Sepa::ApplicationResponse.new(@dfl_doc.to_s).certificate
167
182
  end
168
183
  end
169
184
 
170
185
  def test_should_raise_error_if_certificate_corrupted_in_uf
171
- cert_node = @uf.at_css(
186
+ cert_node = @uf_doc.at_css(
172
187
  'xmlns|X509Certificate',
173
188
  'xmlns' => 'http://www.w3.org/2000/09/xmldsig#'
174
189
  )
@@ -176,12 +191,12 @@ class NordeaApplicationResponseTest < ActiveSupport::TestCase
176
191
  cert_node.content = cert_node.content[4..-1]
177
192
 
178
193
  assert_raises(OpenSSL::X509::CertificateError) do
179
- Sepa::ApplicationResponse.new(@uf).certificate
194
+ Sepa::ApplicationResponse.new(@uf_doc.to_s).certificate
180
195
  end
181
196
  end
182
197
 
183
198
  def test_should_raise_error_if_certificate_corrupted_in_df
184
- cert_node = @df_tito.at_css(
199
+ cert_node = @df_tito_doc.at_css(
185
200
  'xmlns|X509Certificate',
186
201
  'xmlns' => 'http://www.w3.org/2000/09/xmldsig#'
187
202
  )
@@ -189,44 +204,41 @@ class NordeaApplicationResponseTest < ActiveSupport::TestCase
189
204
  cert_node.content = "n5iw#{cert_node.content}"
190
205
 
191
206
  assert_raises(OpenSSL::X509::CertificateError) do
192
- Sepa::ApplicationResponse.new(@df_tito).certificate
207
+ Sepa::ApplicationResponse.new(@df_tito_doc.to_s).certificate
193
208
  end
194
209
  end
195
210
 
196
211
  def test_should_raise_error_if_certificate_corrupted_in_gui
197
- cert_node = @gui.at_css(
212
+ cert_node = @gui_doc.at_css(
198
213
  'xmlns|X509Certificate',
199
214
  'xmlns' => 'http://www.w3.org/2000/09/xmldsig#'
200
215
  )
201
216
 
202
- cert_node.content = Base64.encode64('voivoi')
217
+ cert_node.content = encode 'voivoi'
203
218
 
204
219
  assert_raises(OpenSSL::X509::CertificateError) do
205
- Sepa::ApplicationResponse.new(@gui).certificate
220
+ Sepa::ApplicationResponse.new(@gui_doc.to_s).certificate
206
221
  end
207
222
  end
208
223
 
209
224
  def test_cert_should_be_trusted_with_correct_root_cert
210
- assert @dfl_ar.cert_is_trusted(@root_cert)
211
- assert @uf_ar.cert_is_trusted(@root_cert)
212
- assert @df_ar.cert_is_trusted(@root_cert)
213
- assert @gui_ar.cert_is_trusted(@root_cert)
214
- end
215
-
216
- def test_dfl_should_fail_if_wrong_root_cert
217
- assert_raises(SecurityError) { @dfl_ar.cert_is_trusted(@not_root_cert) }
218
- end
219
-
220
- def test_uf_should_fail_if_wrong_root_cert
221
- assert_raises(SecurityError) { @uf_ar.cert_is_trusted(@not_root_cert) }
225
+ root_cert = OpenSSL::X509::Certificate.new File.read("#{KEYS_PATH}/root_cert.cer")
226
+ assert @dfl_ar.cert_is_trusted(root_cert)
227
+ assert @uf_ar.cert_is_trusted(root_cert)
228
+ assert @df_ar.cert_is_trusted(root_cert)
229
+ assert @gui_ar.cert_is_trusted(root_cert)
222
230
  end
223
231
 
224
- def test_df_should_fail_if_wrong_root_cert
225
- assert_raises(SecurityError) { @df_ar.cert_is_trusted(@not_root_cert) }
232
+ def test_should_fail_if_wrong_root_cert
233
+ not_root_cert = OpenSSL::X509::Certificate.new File.read("#{KEYS_PATH}/nordea.crt")
234
+ assert_raises(SecurityError) { @dfl_ar.cert_is_trusted(not_root_cert) }
235
+ assert_raises(SecurityError) { @uf_ar.cert_is_trusted(not_root_cert) }
236
+ assert_raises(SecurityError) { @df_ar.cert_is_trusted(not_root_cert) }
237
+ assert_raises(SecurityError) { @gui_ar.cert_is_trusted(not_root_cert) }
226
238
  end
227
239
 
228
- def test_gui_should_fail_if_wrong_root_cert
229
- assert_raises(SecurityError) { @gui_ar.cert_is_trusted(@not_root_cert) }
240
+ test 'to_s works' do
241
+ assert_equal @uf, @uf_ar.to_s
230
242
  end
231
243
 
232
244
  end