sepafm 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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