ezii-ebics 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +12 -0
- data/LICENSE.txt +24 -0
- data/README.md +7 -0
- data/ebics.gemspec +12 -0
- data/ezii-ebics.rb +0 -0
- data/keys/a005.pem +27 -0
- data/keys/e002.pem +27 -0
- data/keys/example.cer +17 -0
- data/keys/x002.pem +27 -0
- data/lib/ebics.rb +104 -0
- data/templates/HEV.xml.erb +5 -0
- data/templates/HIA.xml.erb +22 -0
- data/templates/HIA_order_data.xml.erb +25 -0
- data/templates/INI.xml.erb +22 -0
- data/templates/INI_order_data.xml.erb +15 -0
- data/test/schema_test.rb +92 -0
- data/test/specification_test.rb +21 -0
- data/xsd/H003/ebics.xsd +11 -0
- data/xsd/H003/ebics_hev.xsd +135 -0
- data/xsd/H003/ebics_keymgmt_request.xsd +555 -0
- data/xsd/H003/ebics_keymgmt_response.xsd +131 -0
- data/xsd/H003/ebics_orders.xsd +1811 -0
- data/xsd/H003/ebics_request.xsd +354 -0
- data/xsd/H003/ebics_response.xsd +161 -0
- data/xsd/H003/ebics_signature.xsd +217 -0
- data/xsd/H003/ebics_types.xsd +2361 -0
- data/xsd/H003/xmldsig-core-schema.xsd +318 -0
- data/xsd/ebics_H004.xsd +11 -0
- data/xsd/ebics_hev.xsd +135 -0
- data/xsd/ebics_keymgmt_request_H004.xsd +543 -0
- data/xsd/ebics_keymgmt_response_H004.xsd +137 -0
- data/xsd/ebics_orders_H004.xsd +1892 -0
- data/xsd/ebics_request_H004.xsd +355 -0
- data/xsd/ebics_response_H004.xsd +166 -0
- data/xsd/ebics_signature.xsd +217 -0
- data/xsd/ebics_types_H004.xsd +2426 -0
- data/xsd/xmldsig-core-schema.xsd +318 -0
- metadata +80 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 57a0bc6b19b87f13c759a1a3e9c38f009eddd6d30eec20e11a860ac51f0d3092
|
4
|
+
data.tar.gz: e78ea6d59bac9b5c753bf4d85d69ef464a8046c3dea5a8af85e881e3266b51e9
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 5037694efa8ce807ff19b049df764885b8fb50cd7a38c97b434668db7239e84bb94e0b16b4f1f44a3b1303f8603c34512d9c649090184733f63cadca533c266e
|
7
|
+
data.tar.gz: 7fae7f66cc06841046468daf2cc87434eccbe8413d392edf8632ac0d8eac29a41b7eb027f46b111d3846681d31a2a59ccd587a1cb8bc30bfa70504ea53d9612a
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
This is free and unencumbered software released into the public domain.
|
2
|
+
|
3
|
+
Anyone is free to copy, modify, publish, use, compile, sell, or
|
4
|
+
distribute this software, either in source code form or as a compiled
|
5
|
+
binary, for any purpose, commercial or non-commercial, and by any
|
6
|
+
means.
|
7
|
+
|
8
|
+
In jurisdictions that recognize copyright laws, the author or authors
|
9
|
+
of this software dedicate any and all copyright interest in the
|
10
|
+
software to the public domain. We make this dedication for the benefit
|
11
|
+
of the public at large and to the detriment of our heirs and
|
12
|
+
successors. We intend this dedication to be an overt act of
|
13
|
+
relinquishment in perpetuity of all present and future rights to this
|
14
|
+
software under copyright law.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
19
|
+
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
20
|
+
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
21
|
+
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
22
|
+
OTHER DEALINGS IN THE SOFTWARE.
|
23
|
+
|
24
|
+
For more information, please refer to <http://unlicense.org>
|
data/README.md
ADDED
data/ebics.gemspec
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
s.name = 'ezii-ebics'
|
3
|
+
s.version = '0.1.0'
|
4
|
+
s.licenses = ['MIT']
|
5
|
+
s.summary = "eZii EBICS Ruby Client"
|
6
|
+
s.description = "EBICS 2.5 H004 Implementation in Ruby."
|
7
|
+
s.authors = ["Manuel Korfmann"]
|
8
|
+
s.email = 'manu@korfmann.info'
|
9
|
+
s.files = Dir.glob("**/*")
|
10
|
+
s.require_path = 'lib'
|
11
|
+
s.homepage = 'https://ezii.ml'
|
12
|
+
end
|
data/ezii-ebics.rb
ADDED
File without changes
|
data/keys/a005.pem
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
-----BEGIN RSA PRIVATE KEY-----
|
2
|
+
MIIEowIBAAKCAQEA4AcfGjkEG3A2anPNgY5DLM+4/imMhy9ToxfpRG+0eLKhnoqH
|
3
|
+
n0BbbJyoU0DiKc2Oxs78qnFPNFx+Owb8pcO2HE4wJoa7n2KhSudHJmXaZffid//t
|
4
|
+
StFZSx3rhQmgYuR817yzDr9chiJtBFBdGEnUjKtQqatTbjQ6oBTXUqp1NkCiFzVr
|
5
|
+
pZ+EDcQpuxkleFlabhF6tNy9cqGr2O4oFF5xDEtTJkYEXKIDw4QJDyLY04yyYWFA
|
6
|
+
umL5WSUwoDoLpd/QF4bkZJv+ZCeb5kH5TrPD8uLNaDL26kUxsLlIDmnpwzv+CjKE
|
7
|
+
VY/pB+UeAXvASq3sJRnHeac7onTG4t/hZ9zO+QIDAQABAoIBAFjxGt0LU+Ec3M3I
|
8
|
+
qgdMlsjcs2Jc1oj5NihjHt5nxuvAZ8AM2alVILbvPzjGYsQb8xplJRT6JWrxacA/
|
9
|
+
luCs4ck9FYrGJQkzXDvjtHC/MUUYdBYWSnxQvzW+bDoGR2HbuuDf7urk+HPciRGU
|
10
|
+
YlF5RmSOw1iJR3dSTxAtFgug1yYxJnxcYdd0++ZTlaxltqhRMMVVJ/JLB6gPRlaN
|
11
|
+
mW4dRTfwTvCPOCRWsji4htdcaJzmWG74oHle9nMLP7iNucrZ1I2bPU5geCkPlgB/
|
12
|
+
ZW5jHsaMA5IAMFf79/3yLGWAjpcV0Us+/7bo3IlnLUhNefDmbadnN0ZNdw1kLjd9
|
13
|
+
tukuVfECgYEA/IzNFx+jxB91NqsSgqtwXdSGQvvLtdpNSvGhvZtsyFTta9g+J0za
|
14
|
+
QzvaxwPAqDi2rTnTWQrJnuJaM/cxxNlZYcqNMkzroNO8uR7mvrIYqzWLqIc/Fkse
|
15
|
+
BYADIeiKdjCqpMng8DUGi9jivB6nJ/g6zwkYoiCubhLsuXBwYlCnTC0CgYEA4xaT
|
16
|
+
IK724sH9KwHTEcOTDWZLGq8H8F/LrAudXv5BStc12a3cVDxLGML7lbxdR81UeiB4
|
17
|
+
PDjqytCqPEBe8dBqTBsiGuuuc5GUvXz9U5rW2NlBcCqUebbaHTTVGVnDlit7HmJU
|
18
|
+
PtB4pKk916JRmL3PDanz1kHBJnoPf+Mhtyn4MX0CgYBXWDMOTkkLaX3WfHAYdUaV
|
19
|
+
jQ0qWX9o06lrxAoWU4zZ9FVwuQc1/GR4YFkX/3pAM+0qGBe6cfqtUseztUinNiyt
|
20
|
+
n6oZvXS42MIqnD9dsKbLf+dfT/dHtI8bg9yRe6V3nvlFqPR83zn2X/p66XcSYc2l
|
21
|
+
ERZN7FOnijAJKpQTzKUvuQKBgGKIJQaFZDI3obXLcN3AUkn6HJRTZcpyhlj8ISha
|
22
|
+
gdILVx5ARd12286+q5LozECfYwwqkoDu4VFnALZr58ZcfALRsxajNGqIvFULqo9g
|
23
|
+
G+CzQ6V7lDjLkhAiIGSDgk3iR+WDHLK0meQ4WtD5aRYxJWn0WAybM0eSpq8CylpD
|
24
|
+
J6GxAoGBALUNRi/+pgeBxxhlHKt4E2YZggcrnbOTCK7tYaCENDc+DNRI4N6l7iUC
|
25
|
+
oErpv4iI5gAdvvIydjsGzPmiR8vkG77RJDdS0Z/bbv0C35ANZ16CDF4VUqDm1XM6
|
26
|
+
AEggZrAuSpS8saXhXfHvttga14JwPj91xlNgEtmQnhGVDOasmffj
|
27
|
+
-----END RSA PRIVATE KEY-----
|
data/keys/e002.pem
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
-----BEGIN RSA PRIVATE KEY-----
|
2
|
+
MIIEpAIBAAKCAQEA2exIRgXiwjlgplH8VChWedjxT/03cijQK9loIAYgSab8Oijb
|
3
|
+
2HVaT08c6OnJ+ezbdGA9cI9iM01ATFx+Jul6V8tklAwhIkUju6HCc6knpT7q988K
|
4
|
+
yYdPmRy/R9l/NVvSXIQltQI9n8/ixywtVIkQfp8AlrcK+r60wUoegPTF9b/w6Fb5
|
5
|
+
pcfu0a+eVFP7J/Ij3n7Gb64emYzcPuFCRymfKwJHVG4z9vEwAlePzkMHCn30TYQe
|
6
|
+
pXOcLNb7x1FJj+8HcLzLcVviymkBfhnPHwBwy4eWBPlN9ryEsqDyC2Lf+oSXm88c
|
7
|
+
YiSZSyRaCoKmau1OpQJh49kKY8loAQicu4XSPwIDAQABAoIBAF1lBUh1R0yD+Kbv
|
8
|
+
JhwPOZh44Fquo++aDDVutFBdL8NA/IIUdrva93xb5IDxiS1CVH8Yq9wspyJjbjYL
|
9
|
+
wcj9cQBlW9KTLDQau4izd7nH+gS45UyVAAOEqRlul4+8Z+c/VfVucRaVQkHWf1Nq
|
10
|
+
3HaJU3dgv4jYI614w9C+6jnMLXb3JAN6+TgM0Gsx+YvV9ZZ1kmxen4hHEk2qyp/z
|
11
|
+
bQrGIo37Za7WKjdn+TbkRqUv7hiPm5t5zW2mKv+yqEFf5ZRwkwMkh2t7p7saxoaH
|
12
|
+
ZE57XW41YCvpS90hUUxOjz/V7Foah1jHZhLT0qR+rOZOlx+Oc3tRxJVlY/hqBQLx
|
13
|
+
4gQ4SmkCgYEA+nezNkCccOcqKig873xCscCOWwOXl63Y5vN+ASblWEcvnDD+By0u
|
14
|
+
6GF0dFSz4X4fKfQMq42lm12CuAC0n+K3LliYNWwq2hT6BgCxElj6S1grHO9uG0fP
|
15
|
+
/cx8NoxcXfVvAj8n2qs8VrA+8/AVsoI9dQRyLR3UT0sc3VoUu/XgbqsCgYEA3ryO
|
16
|
+
ByAG1oliVCeS3zAZkUCzmWWXyxA5WxswiDVf1hZdDGgZcMcBLG6SB1PWhSDESdMb
|
17
|
+
AG/mf0Qk6keneRoprg7cAHgGYEPhSDREBonjqF3aSV3vrb5varq5HwFOmieoJnQU
|
18
|
+
fJVNi7W59JKdUdeOMupQ3Gpq6Ru8j6Ncy7nEWr0CgYBcXVgRYbJPUHAUK9KM3l4Z
|
19
|
+
/tCAb8qvfMTIJnMJKbbZ3yaHiumi696og4fWfoX3WfNUHVOu0AWKTemuwVPawlib
|
20
|
+
FsDKsqD621F4dTjXc0iaEGGVwhXwqYLiLU6BLzHA1ImjYnboBM2zijss6hSWR8Ey
|
21
|
+
LfmM+bsZorF6T4Xl6r5hEQKBgQCf5+pnPxzppJQNKqQMy3FvkG3f8Mm7JRioSarb
|
22
|
+
/sWg40lGAO5Swuwaw/7ed9gIl2+UOJSoCa4HLBr8fxjCnn/R0CUtyP162wC/X5Z+
|
23
|
+
wzvHwilWhrPtnkxK6WbB1aRik5nqkWer0Vxssrif1ypOeVxDPWlz9IpwdFM5I+UY
|
24
|
+
9XL8WQKBgQC/4sufNIcsxLCKyayAYDnfNMzprzNIwBrr2arqL6qvuTOh5gftTKjw
|
25
|
+
7jjyl+2dAqjCysKzspo/HMA6GB9rKu+AL5x8FYcyfjHUeiW3xqVChapc9kJy3jbf
|
26
|
+
mVFKdIQrHYRrGLD1Es725KIablMshxLLb04oKYDmIXO1vUPcDd+0Pg==
|
27
|
+
-----END RSA PRIVATE KEY-----
|
data/keys/example.cer
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIDQDCCAiigAwIBAgIBATANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJGUjEOMAwGA1UEBxMF
|
3
|
+
UGFyaXMxEzARBgNVBAoTCkUuQi5JLkMuUy4xCTAHBgNVBAsTADEPMA0GA1UEAxMGRS4gQml4MB4X
|
4
|
+
DTA5MDcyNzA5MDYxNVoXDTE0MDcyNzA5MDYxNVowTjELMAkGA1UEBhMCRlIxDjAMBgNVBAcTBVBh
|
5
|
+
cmlzMRMwEQYDVQQKEwpFLkIuSS5DLlMuMQkwBwYDVQQLEwAxDzANBgNVBAMTBkUuIEJpeDCCASIw
|
6
|
+
DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANeOaO2fHl56a7bcS4FAnfTyvGiibmiyed9Jx1wi
|
7
|
+
fCojuzzLpnSVWnbDm2wyB1/YXK1V/cllK+LCrav48xMnoga0aRcVxrSCtpAW+PB6Wn1hKkNW2m/w
|
8
|
+
IuP1Vg+LB2EAsAVvCiMrCpyGKUUGNQ5x0Ph913xYUgZ41Rq/CNJ2w4AtuCgbr5KvRTwvKEv4JEJ5
|
9
|
+
qymedq3Yy1kt6t5HbQkLzMpMOBtMLzUBiZUv1sTApEtK39CdCI8GAEsZdW5ePSdr77y0qsA7QCTx
|
10
|
+
WliLpNDBx4BOuYJz9IdejqtNT4zAD7sQB6Yai54LzJ0lpHmA3baK3/Y3gBJqxC3WHSBf68x66icC
|
11
|
+
AwEAAaMpMCcwCwYDVR0PBAQDAgZAMAoGA1UdDgQDBAExMAwGA1UdIwQFMAOAATEwDQYJKoZIhvcN
|
12
|
+
AQELBQADggEBALo97IHqI3SfAS7rcTRGykCxqImtaDKJ3c77iKaUBIfJtBWuSxMLbLyC5xG5WQmS
|
13
|
+
/IdjSLp8WWetDylP2mkKvqk601UJGYHTnvUHblVY9MhG5kD6LB6bfjp6PfOm1629Mlmg5BCZ7cO1
|
14
|
+
+pEbQK2IE1MTreCYPiQyJJeT6umUKfeRgS3WFWCya/zfaLlCZDrRy+N8TVFKauMMKa8AugUn9eAm
|
15
|
+
7CuKgt89RkH3ERhJUZWb5Rbo6ykvHzbpDjaCedtnobUURjKeiwNR8cM5Tt8yeH4fOh63vbYZWUBv
|
16
|
+
3jQ5URJX2vHgkOP6sNB/E7/yqYPLxhj3E7Ty2d4/ru3yjJfRiVE=
|
17
|
+
-----END CERTIFICATE-----
|
data/keys/x002.pem
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
-----BEGIN RSA PRIVATE KEY-----
|
2
|
+
MIIEpAIBAAKCAQEAxDdGQbH114swLRsKsUp2bKgmqVJM6GGORGCs+2Q+nprnFZN0
|
3
|
+
a5g8bOY0j0pqkG/D1L/IIzUslnGg91K24GXPuGvthpGNjyEqqcUR2KXxnSiSIkDf
|
4
|
+
zgSPisuFoF0cwiYMWSYNgAqSE3+L1XUOC6EuYbRUAGMF3216kFb5Ky02ZtUX6y2I
|
5
|
+
gqqFQygIaQKd+uJtsWO4lhTo/J2G5hTmm0V2LO9yWuduwGH6kDjaeL7UfgGdlbjx
|
6
|
+
Es2eE66vNfppcAGLRZXpUp5/mAnRcFSJPUHJXXcnuLTsX30WxvSM2pha8yUj9uIR
|
7
|
+
KH4TxOIf0vRhPh5iScldKle35MsVTMxgXe7buwIDAQABAoIBAQCS9w+xXxjTI9am
|
8
|
+
wi1lE2/V/LBQfGtMVt2XS43lEXVxmHZjC7nUaQdBTb+qX8OngX79V9QQwuAtotg8
|
9
|
+
xwBg3QETkgsrktOjk+T/mbK/QbPR0bR64XqANZxKChyBO5yxsovnLgBImiJFZnAX
|
10
|
+
JoCpp0U1Ozr7uy+H5Nk7SVmBxHCN3dc5ommEyVR+Tp7lhCt8Rv9UdPkeqkdQNO2N
|
11
|
+
9g/RA0NL/5WXGe7xXB45uD0PASL0GjL/uDq7pJXtFifa17lTvymHRnCSOICXIZfa
|
12
|
+
XGlPqUFoU60IOehRWEMMP2UfBwXVvLGvkp7QXvREw6GdhtlBfbHNM0g2mcvYXLsH
|
13
|
+
llBYWH0BAoGBAPIcvLdzZfIzAeOp5b3Kdsf6vou5Dftle83fJUZOZwl7xuYcfP9p
|
14
|
+
XjEsgbeoE3zjgIURkrZrY03sGsuWtSfcips0NnF2KGCYn+3Ff1ECAkkB9RvGc6zl
|
15
|
+
Cu5u5nv2QHDzNFE4VJ6LRabBPyzt2DYsmgZ1HxH2r7R3pLCSArMcGu+BAoGBAM94
|
16
|
+
lDuDCqMTYxZwwO0O2PiUwqIRMA41hwZOlGRge6AqPFzVc4kHUg8biL9oBlJ1xyAW
|
17
|
+
0j7ztQyygtCWKWaWCHz504oHEHIpY9r6not+AViOlzqjhqzsfqljD95YADXTQ6jk
|
18
|
+
Bw9E7tiVwzf69Ecv6rdtJc3MBkARd+vOwqWiXik7AoGAaFwcuFKkmd6ErPZ50fIo
|
19
|
+
exDI+38b2MYotFfAQGrhHQReeqfC9XEcqcOOcnSfWdDSgAlQHRNy7Y6dCi5/DZyR
|
20
|
+
nk7GPOf6hZCkNyBPPcLI62FNnthO2jKsIJRrAvnlUwpx/aRzTRepQTTBH4OyE7/r
|
21
|
+
8GahquOTXw3HTljRkxTFQ4ECgYATBDNaDRXRgrpnWShl0iGTD1eTsU2dT8yziEpT
|
22
|
+
tQA/2v8zZyEy4yfjWJu9J5TExCTfTRgySvZCVq5k3g6nZ4MZqXB5S1J3lFGhxaz4
|
23
|
+
jjEjY9Z6unhiqz6k2f6fW6ORS279MQFwpdnaokeFfwwa5kp2S5vWdCfygWdjhs0S
|
24
|
+
j4Jf9wKBgQDBJzBBxN7LObQTzButu0xLuKLs5EvrECJfyqBWNKcstgPNacG8UCru
|
25
|
+
lRbhkQOt5h/1Vb3jtbZSDipIKkAV5i5lzB50n33eyUkDp+SPvdDamCVDs86Sc5q2
|
26
|
+
1zdWBwQLJ3iaB6PlJyPjtZMy3ZFSXW5Gqs52GvENVYAGcnX1wkK6SA==
|
27
|
+
-----END RSA PRIVATE KEY-----
|
data/lib/ebics.rb
ADDED
@@ -0,0 +1,104 @@
|
|
1
|
+
require 'zlib'
|
2
|
+
require 'base64'
|
3
|
+
require 'erb'
|
4
|
+
require 'openssl'
|
5
|
+
require 'time'
|
6
|
+
require 'digest/sha2'
|
7
|
+
|
8
|
+
module EBICS
|
9
|
+
class Request
|
10
|
+
def render_order_data(name)
|
11
|
+
zipped_order_data = Zlib::Deflate.deflate raw_order_data(name)
|
12
|
+
Base64.strict_encode64(zipped_order_data)
|
13
|
+
end
|
14
|
+
|
15
|
+
def raw_order_data(name)
|
16
|
+
request_template(name)
|
17
|
+
end
|
18
|
+
|
19
|
+
def request_template(name)
|
20
|
+
raw = File.read(File.join(File.dirname(__FILE__), '../templates/' + name + '.erb'))
|
21
|
+
ERB.new(raw).result(binding)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
class HEV < Request
|
26
|
+
attr_accessor :bank
|
27
|
+
|
28
|
+
def render
|
29
|
+
request_template('HEV.xml')
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
class INI < Request
|
34
|
+
attr_accessor :user
|
35
|
+
attr_accessor :bank
|
36
|
+
|
37
|
+
def render
|
38
|
+
request_template('INI.xml')
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
class HIA < Request
|
43
|
+
attr_accessor :user
|
44
|
+
attr_accessor :bank
|
45
|
+
|
46
|
+
def render
|
47
|
+
request_template('HIA.xml')
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
|
52
|
+
class User
|
53
|
+
attr_accessor :partner_id
|
54
|
+
attr_accessor :member_id
|
55
|
+
def initialize(&block)
|
56
|
+
@key_initializer = block
|
57
|
+
@keys = {}
|
58
|
+
end
|
59
|
+
|
60
|
+
def key(type)
|
61
|
+
@keys[type.to_sym] || (@keys[type] = initialize_key(type))
|
62
|
+
end
|
63
|
+
|
64
|
+
def initialize_key(type)
|
65
|
+
key = Key.new(type)
|
66
|
+
@key_initializer.call(key)
|
67
|
+
return key
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
class Bank
|
72
|
+
attr_accessor :host_id
|
73
|
+
|
74
|
+
end
|
75
|
+
|
76
|
+
class Key
|
77
|
+
attr_accessor :rsa, :type
|
78
|
+
attr_writer :created_at
|
79
|
+
|
80
|
+
def initialize(type)
|
81
|
+
@type = type
|
82
|
+
end
|
83
|
+
|
84
|
+
def public_modulus
|
85
|
+
Base64.strict_encode64(@rsa.public_key.n.to_s(16))
|
86
|
+
end
|
87
|
+
|
88
|
+
def public_exponent
|
89
|
+
Base64.strict_encode64(@rsa.public_key.e.to_s(2))
|
90
|
+
end
|
91
|
+
|
92
|
+
def public_sha_256
|
93
|
+
public_key_string = "#{ @rsa.public_key.e.to_s(16).downcase } #{ @rsa.public_key.n.to_s(16).downcase }"
|
94
|
+
public_key_string.gsub! /\A0/, ''
|
95
|
+
puts public_key_string
|
96
|
+
public_key_string.encode!('US-ASCII')
|
97
|
+
Digest::SHA256.hexdigest(public_key_string)
|
98
|
+
end
|
99
|
+
|
100
|
+
def created_at
|
101
|
+
@created_at.iso8601(10)
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
@@ -0,0 +1,5 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<ebics:ebicsHEVRequest xsi:schemaLocation="http://www.ebics.org/H000 ebics_hev.xsd"
|
3
|
+
xmlns:ebics="http://www.ebics.org/H000" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
4
|
+
<ebics:HostID><%= @bank.host_id %></ebics:HostID>
|
5
|
+
</ebics:ebicsHEVRequest>
|
@@ -0,0 +1,22 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<ebicsUnsecuredRequest xmlns="http://www.ebics.org/H003" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Revision="1" Version="H003" xsi:schemaLocation="http://www.ebics.org/H003 http://www.ebics.org/H003/ebics_keymgmt_request.xsd">
|
3
|
+
<header authenticate="true">
|
4
|
+
<static>
|
5
|
+
<HostID><%= @bank.host_id%></HostID>
|
6
|
+
<PartnerID><%= @user.partner_id %></PartnerID>
|
7
|
+
<UserID><%= @user.member_id %></UserID>
|
8
|
+
<OrderDetails>
|
9
|
+
<OrderType>HIA</OrderType>
|
10
|
+
<OrderID>A026</OrderID>
|
11
|
+
<OrderAttribute>DZNNN</OrderAttribute>
|
12
|
+
</OrderDetails>
|
13
|
+
<SecurityMedium>0000</SecurityMedium>
|
14
|
+
</static>
|
15
|
+
<mutable/>
|
16
|
+
</header>
|
17
|
+
<body>
|
18
|
+
<DataTransfer>
|
19
|
+
<OrderData><%= render_order_data 'HIA_order_data.xml' %></OrderData>
|
20
|
+
</DataTransfer>
|
21
|
+
</body>
|
22
|
+
</ebicsUnsecuredRequest>
|
@@ -0,0 +1,25 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<HIARequestOrderData xmlns="http://www.ebics.org/H003" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xsi:schemaLocation="http://www.ebics.org/H003 http://www.ebics.org/H003/ebics_orders.xsd">
|
3
|
+
<AuthenticationPubKeyInfo>
|
4
|
+
<PubKeyValue>
|
5
|
+
<ds:RSAKeyValue>
|
6
|
+
<ds:Modulus><%= @user.key('x002').public_modulus %></ds:Modulus>
|
7
|
+
<ds:Exponent><%= @user.key('x002').public_exponent %></ds:Exponent>
|
8
|
+
</ds:RSAKeyValue>
|
9
|
+
</PubKeyValue>
|
10
|
+
<AuthenticationVersion>X002</AuthenticationVersion>
|
11
|
+
</AuthenticationPubKeyInfo>
|
12
|
+
|
13
|
+
<EncryptionPubKeyInfo>
|
14
|
+
<PubKeyValue>
|
15
|
+
<ds:RSAKeyValue>
|
16
|
+
<ds:Modulus><%= @user.key('e002').public_modulus %></ds:Modulus>
|
17
|
+
<ds:Exponent><%= @user.key('e002').public_exponent %></ds:Exponent>
|
18
|
+
</ds:RSAKeyValue>
|
19
|
+
</PubKeyValue>
|
20
|
+
<EncryptionVersion>E002</EncryptionVersion>
|
21
|
+
</EncryptionPubKeyInfo>
|
22
|
+
|
23
|
+
<PartnerID><%= @user.partner_id %></PartnerID>
|
24
|
+
<UserID><%= @user.member_id %></UserID>
|
25
|
+
</HIARequestOrderData>
|
@@ -0,0 +1,22 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<ebicsUnsecuredRequest xmlns="http://www.ebics.org/H003" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Revision="1" Version="H003" xsi:schemaLocation="http://www.ebics.org/H003 http://www.ebics.org/H003/ebics_keymgmt_request.xsd">
|
3
|
+
<header authenticate="true">
|
4
|
+
<static>
|
5
|
+
<HostID><%= @bank.host_id%></HostID>
|
6
|
+
<PartnerID><%= @user.partner_id %></PartnerID>
|
7
|
+
<UserID><%= @user.member_id %></UserID>
|
8
|
+
<OrderDetails>
|
9
|
+
<OrderType>INI</OrderType>
|
10
|
+
<OrderID>A025</OrderID>
|
11
|
+
<OrderAttribute>DZNNN</OrderAttribute>
|
12
|
+
</OrderDetails>
|
13
|
+
<SecurityMedium>0000</SecurityMedium>
|
14
|
+
</static>
|
15
|
+
<mutable/>
|
16
|
+
</header>
|
17
|
+
<body>
|
18
|
+
<DataTransfer>
|
19
|
+
<OrderData><%= render_order_data 'INI_order_data.xml' %></OrderData>
|
20
|
+
</DataTransfer>
|
21
|
+
</body>
|
22
|
+
</ebicsUnsecuredRequest>
|
@@ -0,0 +1,15 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<SignaturePubKeyOrderData xmlns="http://www.ebics.org/S001" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xsi:schemaLocation="http://www.ebics.org/S001 http://www.ebics.org/S001/ebics_signature.xsd">
|
3
|
+
<SignaturePubKeyInfo>
|
4
|
+
<PubKeyValue>
|
5
|
+
<ds:RSAKeyValue>
|
6
|
+
<ds:Modulus><%= @user.key('a005').public_modulus %></ds:Modulus>
|
7
|
+
<ds:Exponent><%= @user.key('a005').public_exponent %></ds:Exponent>
|
8
|
+
</ds:RSAKeyValue>
|
9
|
+
<TimeStamp><%= @user.key('a005').created_at %></TimeStamp>
|
10
|
+
</PubKeyValue>
|
11
|
+
<SignatureVersion>A005</SignatureVersion>
|
12
|
+
</SignaturePubKeyInfo>
|
13
|
+
<PartnerID><%= @user.partner_id %></PartnerID>
|
14
|
+
<UserID><%= @user.member_id %></UserID>
|
15
|
+
</SignaturePubKeyOrderData>
|
data/test/schema_test.rb
ADDED
@@ -0,0 +1,92 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'nokogiri'
|
3
|
+
require_relative '../lib/ebics'
|
4
|
+
|
5
|
+
# TODO: Need to refactor every test cases.
|
6
|
+
|
7
|
+
class SchemaTest < MiniTest::Unit::TestCase
|
8
|
+
def setup
|
9
|
+
@bank = EBICS::Bank.new
|
10
|
+
@bank.host_id = 'EBIXH'
|
11
|
+
|
12
|
+
@user = EBICS::User.new do |key|
|
13
|
+
path = '../keys/' + key.type + '.pem'
|
14
|
+
if File.exists?(path)
|
15
|
+
key.rsa = OpenSSL::PKey::RSA.new(File.read(path))
|
16
|
+
else
|
17
|
+
key.rsa = OpenSSL::PKey::RSA.new(2048)
|
18
|
+
File.open(path, 'w') do |file|
|
19
|
+
file.write key.rsa.to_pem
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
key.created_at = File.mtime(path)
|
24
|
+
end
|
25
|
+
|
26
|
+
@user.partner_id = 'EBIXP'
|
27
|
+
@user.member_id = 'EBIXU'
|
28
|
+
|
29
|
+
@hia = EBICS::HIA.new
|
30
|
+
@hia.user = @user
|
31
|
+
@hia.bank = @bank
|
32
|
+
|
33
|
+
@ini = EBICS::INI.new
|
34
|
+
@ini.user = @user
|
35
|
+
@ini.bank = @bank
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_ini_schema
|
40
|
+
doc = Nokogiri::XML(@ini.render.to_s.tap { |ini| ini })
|
41
|
+
|
42
|
+
Dir.chdir('../xsd/H003/') do
|
43
|
+
xsd = Nokogiri::XML::Schema(File.read('ebics.xsd'))
|
44
|
+
errors = []
|
45
|
+
xsd.validate(doc).each do |error|
|
46
|
+
errors << error
|
47
|
+
end
|
48
|
+
assert_empty errors, errors.join("\n")
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_ini_order_data_schema
|
53
|
+
doc = Nokogiri::XML(@ini.raw_order_data('INI_order_data.xml').to_s.tap { |ini| puts ini })
|
54
|
+
|
55
|
+
Dir.chdir('../xsd/H003/') do
|
56
|
+
xsd = Nokogiri::XML::Schema(File.read('ebics_signature.xsd'))
|
57
|
+
errors = []
|
58
|
+
xsd.validate(doc).each do |error|
|
59
|
+
errors << error
|
60
|
+
end
|
61
|
+
assert_empty errors, errors.join("\n")
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
|
66
|
+
def test_hia_schema
|
67
|
+
doc = Nokogiri::XML(@hia.render.to_s.tap { |hia| puts hia })
|
68
|
+
|
69
|
+
Dir.chdir('../xsd/H003/') do
|
70
|
+
xsd = Nokogiri::XML::Schema(File.read('ebics.xsd'))
|
71
|
+
errors = []
|
72
|
+
xsd.validate(doc).each do |error|
|
73
|
+
errors << error
|
74
|
+
end
|
75
|
+
assert_empty errors, errors.join("\n")
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def test_hia_order_data_schema
|
80
|
+
doc = Nokogiri::XML(@hia.raw_order_data('HIA_order_data.xml').to_s.tap { |hia| puts hia })
|
81
|
+
|
82
|
+
Dir.chdir('../xsd/H003/') do
|
83
|
+
xsd = Nokogiri::XML::Schema(File.read('ebics.xsd'))
|
84
|
+
errors = []
|
85
|
+
xsd.validate(doc).each do |error|
|
86
|
+
errors << error
|
87
|
+
end
|
88
|
+
assert_empty errors, errors.join("\n")
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|