sepafm 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (90) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +35 -0
  3. data/.ruby-version +1 -0
  4. data/Gemfile +4 -0
  5. data/LICENSE +8 -0
  6. data/README.md +236 -0
  7. data/Rakefile +10 -0
  8. data/lib/danske_get_bank_certificate_test.rb +15 -0
  9. data/lib/sepa/application_request.rb +182 -0
  10. data/lib/sepa/application_response.rb +123 -0
  11. data/lib/sepa/client.rb +79 -0
  12. data/lib/sepa/danske_testing/keys/danske_encryption.crt +24 -0
  13. data/lib/sepa/filedescriptor.rb +7 -0
  14. data/lib/sepa/filetypeservice.rb +6 -0
  15. data/lib/sepa/nordea_testing/keys/CSR.csr +0 -0
  16. data/lib/sepa/nordea_testing/keys/nordea.crt +27 -0
  17. data/lib/sepa/nordea_testing/keys/nordea.key +19 -0
  18. data/lib/sepa/nordea_testing/response/content_053.xml +998 -0
  19. data/lib/sepa/nordea_testing/response/content_054.xml +1 -0
  20. data/lib/sepa/nordea_testing/response/download_file_response.xml +14 -0
  21. data/lib/sepa/nordea_testing/response/download_filelist_response.xml +14 -0
  22. data/lib/sepa/nordea_testing/response/get_user_info_response.xml +14 -0
  23. data/lib/sepa/nordea_testing/response/upload_file_response.xml +14 -0
  24. data/lib/sepa/response.rb +177 -0
  25. data/lib/sepa/sender_verifier.rb +15 -0
  26. data/lib/sepa/signature.rb +7 -0
  27. data/lib/sepa/soap_builder.rb +395 -0
  28. data/lib/sepa/soap_danske.rb +47 -0
  29. data/lib/sepa/soap_nordea.rb +68 -0
  30. data/lib/sepa/userfiletype.rb +16 -0
  31. data/lib/sepa/version.rb +3 -0
  32. data/lib/sepa/wsdl/wsdl_danske.xml +234 -0
  33. data/lib/sepa/wsdl/wsdl_danske_cert.xml +280 -0
  34. data/lib/sepa/wsdl/wsdl_nordea.xml +234 -0
  35. data/lib/sepa/wsdl/wsdl_nordea_cert.xml +187 -0
  36. data/lib/sepa/xml_parser.rb +291 -0
  37. data/lib/sepa/xml_schemas/application_request.xsd +135 -0
  38. data/lib/sepa/xml_schemas/application_response.xsd +311 -0
  39. data/lib/sepa/xml_schemas/cert_application_request.xsd +107 -0
  40. data/lib/sepa/xml_schemas/danske_pki.xsd +334 -0
  41. data/lib/sepa/xml_schemas/oasis-200401-wss-wssecurity-secext-1.0.xsd +195 -0
  42. data/lib/sepa/xml_schemas/oasis-200401-wss-wssecurity-utility-1.0.xsd +108 -0
  43. data/lib/sepa/xml_schemas/soap.xsd +126 -0
  44. data/lib/sepa/xml_schemas/wsdl.xml +310 -0
  45. data/lib/sepa/xml_schemas/xml.xsd +287 -0
  46. data/lib/sepa/xml_schemas/xmldsig-core-schema.xsd +318 -0
  47. data/lib/sepa/xml_templates/application_request/create_certificate.xml +10 -0
  48. data/lib/sepa/xml_templates/application_request/danske_get_bank_certificate.xml +10 -0
  49. data/lib/sepa/xml_templates/application_request/download_file.xml +32 -0
  50. data/lib/sepa/xml_templates/application_request/download_file_list.xml +29 -0
  51. data/lib/sepa/xml_templates/application_request/get_certificate.xml +10 -0
  52. data/lib/sepa/xml_templates/application_request/get_user_info.xml +26 -0
  53. data/lib/sepa/xml_templates/application_request/upload_file.xml +29 -0
  54. data/lib/sepa/xml_templates/soap/create_certificate.xml +15 -0
  55. data/lib/sepa/xml_templates/soap/danske_get_bank_certificate.xml +14 -0
  56. data/lib/sepa/xml_templates/soap/download_file.xml +16 -0
  57. data/lib/sepa/xml_templates/soap/download_file_list.xml +16 -0
  58. data/lib/sepa/xml_templates/soap/get_certificate.xml +13 -0
  59. data/lib/sepa/xml_templates/soap/get_user_info.xml +16 -0
  60. data/lib/sepa/xml_templates/soap/header.xml +37 -0
  61. data/lib/sepa/xml_templates/soap/upload_file.xml +16 -0
  62. data/lib/sepa.rb +21 -0
  63. data/lib/sepa_client_testing_mika.rb +32 -0
  64. data/lib/sepa_client_testing_tiere.rb +80 -0
  65. data/sepa.gemspec +29 -0
  66. data/test/sepa/application_request_test.rb +423 -0
  67. data/test/sepa/application_response_test.rb +238 -0
  68. data/test/sepa/cert_application_request_test.rb +99 -0
  69. data/test/sepa/client_test.rb +425 -0
  70. data/test/sepa/danske_test_keys/danskeroot.pem +25 -0
  71. data/test/sepa/danske_test_keys/encryption_pkcs.csr +0 -0
  72. data/test/sepa/danske_test_keys/signing_key.pem +27 -0
  73. data/test/sepa/danske_test_keys/signing_pkcs.csr +0 -0
  74. data/test/sepa/nordea_cert_request_soap_builder_test.rb +112 -0
  75. data/test/sepa/nordea_generic_soap_builder_test.rb +427 -0
  76. data/test/sepa/nordea_test_keys/nordea.crt +27 -0
  77. data/test/sepa/nordea_test_keys/nordea.key +19 -0
  78. data/test/sepa/nordea_test_keys/root_cert.cer +0 -0
  79. data/test/sepa/nordea_test_keys/testcert.csr +0 -0
  80. data/test/sepa/response_test.rb +269 -0
  81. data/test/sepa/sepa_test.rb +20 -0
  82. data/test/sepa/test_files/invalid.wsdl +1 -0
  83. data/test/sepa/test_files/test_responses/df.xml +20 -0
  84. data/test/sepa/test_files/test_responses/dfl.xml +20 -0
  85. data/test/sepa/test_files/test_responses/gui.xml +20 -0
  86. data/test/sepa/test_files/test_responses/uf.xml +20 -0
  87. data/test/sepa/user_file_type_test.rb +21 -0
  88. data/test/sepa/xml_parser_test.rb +73 -0
  89. data/test/test_helper.rb +9 -0
  90. metadata +256 -0
@@ -0,0 +1,311 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!-- edited with XMLSpy v2009 (http://www.altova.com) by Petri Luoto (Nordea) -->
3
+ <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:bxd="http://bxd.fi/xmldata/" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" targetNamespace="http://bxd.fi/xmldata/" elementFormDefault="qualified" attributeFormDefault="unqualified">
4
+ <xs:import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="xmldsig-core-schema.xsd"/>
5
+ <xs:element name="ApplicationResponse">
6
+ <xs:annotation>
7
+ <xs:documentation>Wrapper for data. Used for transmitting data. Can be XML Digital Signed.</xs:documentation>
8
+ </xs:annotation>
9
+ <xs:complexType>
10
+ <xs:sequence>
11
+ <xs:element name="CustomerId" nillable="false">
12
+ <xs:simpleType>
13
+ <xs:restriction base="xs:string">
14
+ <xs:minLength value="1"/>
15
+ <xs:maxLength value="16"/>
16
+ </xs:restriction>
17
+ </xs:simpleType>
18
+ </xs:element>
19
+ <xs:element name="Timestamp" type="xs:dateTime"/>
20
+ <xs:element name="ResponseCode" nillable="false">
21
+ <xs:simpleType>
22
+ <xs:restriction base="xs:string">
23
+ <xs:minLength value="1"/>
24
+ <xs:maxLength value="16"/>
25
+ </xs:restriction>
26
+ </xs:simpleType>
27
+ </xs:element>
28
+ <xs:element name="ResponseText" nillable="false">
29
+ <xs:simpleType>
30
+ <xs:restriction base="xs:string">
31
+ <xs:minLength value="1"/>
32
+ <xs:maxLength value="80"/>
33
+ </xs:restriction>
34
+ </xs:simpleType>
35
+ </xs:element>
36
+ <xs:element name="ExecutionSerial" minOccurs="0">
37
+ <xs:simpleType>
38
+ <xs:restriction base="xs:string">
39
+ <xs:minLength value="1"/>
40
+ <xs:maxLength value="32"/>
41
+ </xs:restriction>
42
+ </xs:simpleType>
43
+ </xs:element>
44
+ <xs:element name="Encrypted" type="xs:boolean" minOccurs="0"/>
45
+ <xs:element name="EncryptionMethod" minOccurs="0">
46
+ <xs:simpleType>
47
+ <xs:restriction base="xs:string">
48
+ <xs:minLength value="1"/>
49
+ <xs:maxLength value="35"/>
50
+ </xs:restriction>
51
+ </xs:simpleType>
52
+ </xs:element>
53
+ <xs:element name="Compressed" type="xs:boolean" minOccurs="0"/>
54
+ <xs:element name="CompressionMethod" minOccurs="0">
55
+ <xs:simpleType>
56
+ <xs:restriction base="xs:string">
57
+ <xs:minLength value="1"/>
58
+ <xs:maxLength value="35"/>
59
+ </xs:restriction>
60
+ </xs:simpleType>
61
+ </xs:element>
62
+ <xs:element name="AmountTotal" type="xs:double" minOccurs="0"/>
63
+ <xs:element name="TransactionCount" type="xs:long" minOccurs="0"/>
64
+ <xs:element name="FileDescriptors" minOccurs="0">
65
+ <xs:complexType>
66
+ <xs:sequence>
67
+ <xs:element name="FileDescriptor" maxOccurs="unbounded">
68
+ <xs:complexType>
69
+ <xs:sequence>
70
+ <xs:element name="FileReference">
71
+ <xs:simpleType>
72
+ <xs:restriction base="xs:string">
73
+ <xs:minLength value="1"/>
74
+ <xs:maxLength value="32"/>
75
+ </xs:restriction>
76
+ </xs:simpleType>
77
+ </xs:element>
78
+ <xs:element name="TargetId">
79
+ <xs:simpleType>
80
+ <xs:restriction base="xs:string">
81
+ <xs:minLength value="1"/>
82
+ <xs:maxLength value="80"/>
83
+ </xs:restriction>
84
+ </xs:simpleType>
85
+ </xs:element>
86
+ <xs:element name="ServiceId" minOccurs="0">
87
+ <xs:simpleType>
88
+ <xs:restriction base="xs:string">
89
+ <xs:minLength value="1"/>
90
+ <xs:maxLength value="256"/>
91
+ </xs:restriction>
92
+ </xs:simpleType>
93
+ </xs:element>
94
+ <xs:element name="ServiceIdOwnerName" minOccurs="0">
95
+ <xs:simpleType>
96
+ <xs:restriction base="xs:string">
97
+ <xs:minLength value="1"/>
98
+ <xs:maxLength value="256"/>
99
+ </xs:restriction>
100
+ </xs:simpleType>
101
+ </xs:element>
102
+ <xs:element name="UserFilename" minOccurs="0">
103
+ <xs:simpleType>
104
+ <xs:restriction base="xs:string">
105
+ <xs:minLength value="1"/>
106
+ <xs:maxLength value="80"/>
107
+ </xs:restriction>
108
+ </xs:simpleType>
109
+ </xs:element>
110
+ <xs:element name="ParentFileReference" minOccurs="0">
111
+ <xs:simpleType>
112
+ <xs:restriction base="xs:string">
113
+ <xs:minLength value="1"/>
114
+ <xs:maxLength value="16"/>
115
+ </xs:restriction>
116
+ </xs:simpleType>
117
+ </xs:element>
118
+ <xs:element name="FileType">
119
+ <xs:simpleType>
120
+ <xs:restriction base="xs:string">
121
+ <xs:minLength value="1"/>
122
+ <xs:maxLength value="40"/>
123
+ </xs:restriction>
124
+ </xs:simpleType>
125
+ </xs:element>
126
+ <xs:element name="FileTimestamp" type="xs:dateTime"/>
127
+ <xs:element name="Status">
128
+ <xs:simpleType>
129
+ <xs:restriction base="xs:string">
130
+ <xs:minLength value="1"/>
131
+ <xs:maxLength value="10"/>
132
+ </xs:restriction>
133
+ </xs:simpleType>
134
+ </xs:element>
135
+ <xs:element name="AmountTotal" type="xs:double" minOccurs="0"/>
136
+ <xs:element name="TransactionCount" type="xs:long" minOccurs="0"/>
137
+ <xs:element name="LastDownloadTimestamp" type="xs:dateTime" minOccurs="0"/>
138
+ <xs:element name="ForwardedTimestamp" type="xs:dateTime" minOccurs="0"/>
139
+ <xs:element name="Confirmable" type="xs:boolean" minOccurs="0"/>
140
+ <xs:element name="Deletable" type="xs:boolean" minOccurs="0"/>
141
+ <xs:element name="SubStatus" minOccurs="0">
142
+ <xs:simpleType>
143
+ <xs:restriction base="xs:string">
144
+ <xs:minLength value="1"/>
145
+ <xs:maxLength value="35"/>
146
+ </xs:restriction>
147
+ </xs:simpleType>
148
+ </xs:element>
149
+ <xs:element name="SubStatusText" minOccurs="0">
150
+ <xs:simpleType>
151
+ <xs:restriction base="xs:string">
152
+ <xs:minLength value="1"/>
153
+ <xs:maxLength value="70"/>
154
+ </xs:restriction>
155
+ </xs:simpleType>
156
+ </xs:element>
157
+ <xs:element name="MissingTransactions" type="xs:boolean" minOccurs="0"/>
158
+ <xs:element name="SubType" minOccurs="0">
159
+ <xs:simpleType>
160
+ <xs:restriction base="xs:string">
161
+ <xs:minLength value="1"/>
162
+ <xs:maxLength value="35"/>
163
+ </xs:restriction>
164
+ </xs:simpleType>
165
+ </xs:element>
166
+ <xs:element name="FeedbackFileAttributes" minOccurs="0">
167
+ <xs:complexType>
168
+ <xs:sequence>
169
+ <xs:element name="FeedbackFileReference">
170
+ <xs:simpleType>
171
+ <xs:restriction base="xs:string">
172
+ <xs:minLength value="1"/>
173
+ <xs:maxLength value="16"/>
174
+ </xs:restriction>
175
+ </xs:simpleType>
176
+ </xs:element>
177
+ <xs:element name="FeedbackFileType" minOccurs="0">
178
+ <xs:simpleType>
179
+ <xs:restriction base="xs:string">
180
+ <xs:minLength value="1"/>
181
+ <xs:maxLength value="35"/>
182
+ </xs:restriction>
183
+ </xs:simpleType>
184
+ </xs:element>
185
+ <xs:element name="FeedbackFileTypeName" minOccurs="0">
186
+ <xs:simpleType>
187
+ <xs:restriction base="xs:string">
188
+ <xs:minLength value="1"/>
189
+ <xs:maxLength value="80"/>
190
+ </xs:restriction>
191
+ </xs:simpleType>
192
+ </xs:element>
193
+ <xs:element name="FeedbackFileStatus" minOccurs="0">
194
+ <xs:simpleType>
195
+ <xs:restriction base="xs:string">
196
+ <xs:minLength value="1"/>
197
+ <xs:maxLength value="16"/>
198
+ </xs:restriction>
199
+ </xs:simpleType>
200
+ </xs:element>
201
+ <xs:element name="FeedbackFileDate" type="xs:date" minOccurs="0"/>
202
+ <xs:element name="FeedbackFilestamp" type="xs:dateTime" minOccurs="0"/>
203
+ <xs:element name="FeedbackServiceId" minOccurs="0">
204
+ <xs:simpleType>
205
+ <xs:restriction base="xs:string">
206
+ <xs:minLength value="1"/>
207
+ <xs:maxLength value="35"/>
208
+ </xs:restriction>
209
+ </xs:simpleType>
210
+ </xs:element>
211
+ <xs:element name="FileActionHistory" minOccurs="0">
212
+ <xs:simpleType>
213
+ <xs:restriction base="xs:string">
214
+ <xs:minLength value="1"/>
215
+ <xs:maxLength value="16"/>
216
+ </xs:restriction>
217
+ </xs:simpleType>
218
+ </xs:element>
219
+ </xs:sequence>
220
+ </xs:complexType>
221
+ </xs:element>
222
+ </xs:sequence>
223
+ </xs:complexType>
224
+ </xs:element>
225
+ </xs:sequence>
226
+ </xs:complexType>
227
+ </xs:element>
228
+ <xs:element name="CustomerExtension" type="xs:anyType" minOccurs="0"/>
229
+ <xs:element name="FileType" minOccurs="0"/>
230
+ <xs:element name="UserFileTypes" minOccurs="0">
231
+ <xs:complexType>
232
+ <xs:sequence>
233
+ <xs:element name="UserFileType" maxOccurs="unbounded">
234
+ <xs:complexType>
235
+ <xs:sequence>
236
+ <xs:element name="TargetId">
237
+ <xs:simpleType>
238
+ <xs:restriction base="xs:string">
239
+ <xs:maxLength value="80"/>
240
+ </xs:restriction>
241
+ </xs:simpleType>
242
+ </xs:element>
243
+ <xs:element name="FileType" minOccurs="0">
244
+ <xs:simpleType>
245
+ <xs:restriction base="xs:string">
246
+ <xs:maxLength value="35"/>
247
+ </xs:restriction>
248
+ </xs:simpleType>
249
+ </xs:element>
250
+ <xs:element name="FileTypeName" minOccurs="0">
251
+ <xs:simpleType>
252
+ <xs:restriction base="xs:string">
253
+ <xs:minLength value="0"/>
254
+ <xs:maxLength value="80"/>
255
+ </xs:restriction>
256
+ </xs:simpleType>
257
+ </xs:element>
258
+ <xs:element name="Country" minOccurs="0"/>
259
+ <xs:element name="Direction" minOccurs="0"/>
260
+ <xs:element name="FileTypeServices" minOccurs="0">
261
+ <xs:complexType>
262
+ <xs:sequence>
263
+ <xs:element name="FileTypeService" maxOccurs="unbounded">
264
+ <xs:complexType>
265
+ <xs:sequence>
266
+ <xs:element name="ServiceId">
267
+ <xs:simpleType>
268
+ <xs:restriction base="xs:string">
269
+ <xs:maxLength value="60"/>
270
+ </xs:restriction>
271
+ </xs:simpleType>
272
+ </xs:element>
273
+ <xs:element name="ServiceIdOwnerName" minOccurs="0">
274
+ <xs:simpleType>
275
+ <xs:restriction base="xs:string">
276
+ <xs:maxLength value="256"/>
277
+ </xs:restriction>
278
+ </xs:simpleType>
279
+ </xs:element>
280
+ <xs:element name="ServiceIdType" minOccurs="0">
281
+ <xs:simpleType>
282
+ <xs:restriction base="xs:string">
283
+ <xs:maxLength value="80"/>
284
+ </xs:restriction>
285
+ </xs:simpleType>
286
+ </xs:element>
287
+ <xs:element name="ServiceIdText" minOccurs="0">
288
+ <xs:simpleType>
289
+ <xs:restriction base="xs:string">
290
+ <xs:maxLength value="80"/>
291
+ </xs:restriction>
292
+ </xs:simpleType>
293
+ </xs:element>
294
+ </xs:sequence>
295
+ </xs:complexType>
296
+ </xs:element>
297
+ </xs:sequence>
298
+ </xs:complexType>
299
+ </xs:element>
300
+ </xs:sequence>
301
+ </xs:complexType>
302
+ </xs:element>
303
+ </xs:sequence>
304
+ </xs:complexType>
305
+ </xs:element>
306
+ <xs:element name="Content" type="xs:base64Binary" nillable="false" minOccurs="0"/>
307
+ <xs:element ref="ds:Signature" minOccurs="0"/>
308
+ </xs:sequence>
309
+ </xs:complexType>
310
+ </xs:element>
311
+ </xs:schema>
@@ -0,0 +1,107 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!-- edited with XMLSpy v2009 (http://www.altova.com) by XMLSpy 2009 Professional Ed., Concurrent for 36 users (with SMP from 2009-09-30 to 2011-10-01) (Nordea) -->
3
+ <xs:schema xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:bxd="http://filetransfer.nordea.com/xmldata/" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://filetransfer.nordea.com/xmldata/" elementFormDefault="qualified" attributeFormDefault="unqualified">
4
+
5
+ <xs:import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="xmldsig-core-schema.xsd"/>
6
+
7
+ <xs:element name="CertApplicationRequest">
8
+ <xs:annotation>
9
+ <xs:documentation>Wrapper for data. Used for transmitting data. Can be XML Digital Signed.</xs:documentation>
10
+ </xs:annotation>
11
+ <xs:complexType>
12
+ <xs:sequence>
13
+ <xs:element name="CustomerId" nillable="false">
14
+ <xs:simpleType>
15
+ <xs:restriction base="xs:string">
16
+ <xs:minLength value="1"/>
17
+ <xs:maxLength value="16"/>
18
+ </xs:restriction>
19
+ </xs:simpleType>
20
+ </xs:element>
21
+ <xs:element name="Timestamp" type="xs:dateTime"/>
22
+ <xs:element name="Environment" type="bxd:EnvironmentCode"/>
23
+ <xs:element name="SoftwareId">
24
+ <xs:simpleType>
25
+ <xs:restriction base="xs:string">
26
+ <xs:minLength value="1"/>
27
+ <xs:maxLength value="80"/>
28
+ </xs:restriction>
29
+ </xs:simpleType>
30
+ </xs:element>
31
+ <xs:element name="Command" nillable="false" minOccurs="0">
32
+ <xs:simpleType>
33
+ <xs:restriction base="xs:string">
34
+ <xs:maxLength value="32"/>
35
+ <xs:minLength value="1"/>
36
+ </xs:restriction>
37
+ </xs:simpleType>
38
+ </xs:element>
39
+ <xs:element name="ExecutionSerial" minOccurs="0">
40
+ <xs:simpleType>
41
+ <xs:restriction base="xs:string">
42
+ <xs:minLength value="1"/>
43
+ <xs:maxLength value="32"/>
44
+ </xs:restriction>
45
+ </xs:simpleType>
46
+ </xs:element>
47
+ <xs:element name="Encryption" type="xs:boolean" minOccurs="0"/>
48
+ <xs:element name="EncryptionMethod" minOccurs="0">
49
+ <xs:simpleType>
50
+ <xs:restriction base="xs:string">
51
+ <xs:minLength value="1"/>
52
+ <xs:maxLength value="35"/>
53
+ </xs:restriction>
54
+ </xs:simpleType>
55
+ </xs:element>
56
+ <xs:element name="Compression" type="xs:boolean" minOccurs="0"/>
57
+ <xs:element name="CompressionMethod" minOccurs="0">
58
+ <xs:simpleType>
59
+ <xs:restriction base="xs:string">
60
+ <xs:minLength value="1"/>
61
+ <xs:maxLength value="35"/>
62
+ </xs:restriction>
63
+ </xs:simpleType>
64
+ </xs:element>
65
+ <xs:element name="Service" type="xs:string" default="MATU">
66
+ <xs:annotation>
67
+ <xs:documentation>Maksuliikkeen tunniste; mikä palvelun varmenne pyydetään. käytännössä ISSUER</xs:documentation>
68
+ </xs:annotation>
69
+ </xs:element>
70
+ <xs:element name="Content" type="xs:base64Binary" nillable="true" minOccurs="0">
71
+ <xs:annotation>
72
+ <xs:documentation>pkcs#10 request</xs:documentation>
73
+ </xs:annotation>
74
+ </xs:element>
75
+ <xs:element name="TransferKey" nillable="false" minOccurs="0">
76
+ <xs:annotation>
77
+ <xs:documentation>(Siirtoavain) / jaettu salaisuus / salasana</xs:documentation>
78
+ </xs:annotation>
79
+ <xs:simpleType>
80
+ <xs:restriction base="xs:string">
81
+ <xs:maxLength value="32"/>
82
+ <xs:minLength value="1"/>
83
+ </xs:restriction>
84
+ </xs:simpleType>
85
+ </xs:element>
86
+ <xs:element name="SerialNumber" nillable="false" minOccurs="0">
87
+ <xs:simpleType>
88
+ <xs:restriction base="xs:string">
89
+ <xs:minLength value="1"/>
90
+ <xs:maxLength value="25"/>
91
+ </xs:restriction>
92
+ </xs:simpleType>
93
+ </xs:element>
94
+ <xs:element name="HMAC" type="xs:base64Binary" nillable="false" minOccurs="0"/>
95
+ <xs:element ref="ds:Signature" minOccurs="0"/>
96
+ </xs:sequence>
97
+ </xs:complexType>
98
+ </xs:element>
99
+ <xs:simpleType name="EnvironmentCode">
100
+ <xs:annotation>
101
+ <xs:documentation>Production or Test</xs:documentation>
102
+ </xs:annotation>
103
+ <xs:restriction base="xs:NMTOKEN">
104
+ <xs:pattern value="(PRODUCTION|TEST)"/>
105
+ </xs:restriction>
106
+ </xs:simpleType>
107
+ </xs:schema>