onc_certification_g10_test_kit 2.0.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +201 -0
  3. data/lib/inferno/exceptions.rb +31 -0
  4. data/lib/inferno/ext/bloomer.rb +24 -0
  5. data/lib/inferno/repositiories/validators.rb +17 -0
  6. data/lib/inferno/repositiories/value_sets.rb +26 -0
  7. data/lib/inferno/terminology/bcp47.rb +95 -0
  8. data/lib/inferno/terminology/bcp_13.rb +26 -0
  9. data/lib/inferno/terminology/codesystem.rb +49 -0
  10. data/lib/inferno/terminology/expected_manifest.yml +1123 -0
  11. data/lib/inferno/terminology/fhir_package_manager.rb +69 -0
  12. data/lib/inferno/terminology/loader.rb +298 -0
  13. data/lib/inferno/terminology/tasks/check_built_terminology.rb +77 -0
  14. data/lib/inferno/terminology/tasks/cleanup.rb +13 -0
  15. data/lib/inferno/terminology/tasks/cleanup_precursors.rb +23 -0
  16. data/lib/inferno/terminology/tasks/count_codes_in_value_set.rb +20 -0
  17. data/lib/inferno/terminology/tasks/create_value_set_validators.rb +34 -0
  18. data/lib/inferno/terminology/tasks/download_fhir_terminology.rb +27 -0
  19. data/lib/inferno/terminology/tasks/download_umls.rb +109 -0
  20. data/lib/inferno/terminology/tasks/download_umls_notice.rb +20 -0
  21. data/lib/inferno/terminology/tasks/expand_value_set_to_file.rb +36 -0
  22. data/lib/inferno/terminology/tasks/process_umls.rb +91 -0
  23. data/lib/inferno/terminology/tasks/process_umls_translations.rb +85 -0
  24. data/lib/inferno/terminology/tasks/run_umls_jar.rb +75 -0
  25. data/lib/inferno/terminology/tasks/temp_dir.rb +27 -0
  26. data/lib/inferno/terminology/tasks/unzip_umls.rb +42 -0
  27. data/lib/inferno/terminology/tasks/validate_code.rb +36 -0
  28. data/lib/inferno/terminology/tasks.rb +11 -0
  29. data/lib/inferno/terminology/terminology_configuration.rb +52 -0
  30. data/lib/inferno/terminology/terminology_validation.rb +42 -0
  31. data/lib/inferno/terminology/validator.rb +64 -0
  32. data/lib/inferno/terminology/value_set.rb +462 -0
  33. data/lib/inferno/terminology.rb +16 -0
  34. data/lib/onc_certification_g10_test_kit/authorization_request_builder.rb +87 -0
  35. data/lib/onc_certification_g10_test_kit/base_token_refresh_group.rb +48 -0
  36. data/lib/onc_certification_g10_test_kit/bulk_data_authorization.rb +235 -0
  37. data/lib/onc_certification_g10_test_kit/bulk_data_group_export.rb +255 -0
  38. data/lib/onc_certification_g10_test_kit/bulk_data_group_export_validation.rb +474 -0
  39. data/lib/onc_certification_g10_test_kit/bulk_data_jwks.json +58 -0
  40. data/lib/onc_certification_g10_test_kit/bulk_export_validation_tester.rb +171 -0
  41. data/lib/onc_certification_g10_test_kit/configuration_checker.rb +104 -0
  42. data/lib/onc_certification_g10_test_kit/export_kick_off_performer.rb +12 -0
  43. data/lib/onc_certification_g10_test_kit/igs/StructureDefinition-bodyheight.json +3772 -0
  44. data/lib/onc_certification_g10_test_kit/igs/StructureDefinition-bodytemp.json +3772 -0
  45. data/lib/onc_certification_g10_test_kit/igs/StructureDefinition-bodyweight.json +3772 -0
  46. data/lib/onc_certification_g10_test_kit/igs/StructureDefinition-bp.json +6034 -0
  47. data/lib/onc_certification_g10_test_kit/igs/StructureDefinition-heartrate.json +3756 -0
  48. data/lib/onc_certification_g10_test_kit/igs/StructureDefinition-resprate.json +3756 -0
  49. data/lib/onc_certification_g10_test_kit/limited_scope_grant_test.rb +66 -0
  50. data/lib/onc_certification_g10_test_kit/multi_patient_api.rb +43 -0
  51. data/lib/onc_certification_g10_test_kit/patient_context_test.rb +30 -0
  52. data/lib/onc_certification_g10_test_kit/profile_guesser.rb +69 -0
  53. data/lib/onc_certification_g10_test_kit/resource_access_test.rb +96 -0
  54. data/lib/onc_certification_g10_test_kit/restricted_access_test.rb +12 -0
  55. data/lib/onc_certification_g10_test_kit/restricted_resource_type_access_group.rb +303 -0
  56. data/lib/onc_certification_g10_test_kit/smart_app_launch_invalid_aud_group.rb +136 -0
  57. data/lib/onc_certification_g10_test_kit/smart_ehr_practitioner_app_group.rb +209 -0
  58. data/lib/onc_certification_g10_test_kit/smart_invalid_token_group.rb +197 -0
  59. data/lib/onc_certification_g10_test_kit/smart_limited_app_group.rb +123 -0
  60. data/lib/onc_certification_g10_test_kit/smart_public_standalone_launch_group.rb +113 -0
  61. data/lib/onc_certification_g10_test_kit/smart_scopes_test.rb +153 -0
  62. data/lib/onc_certification_g10_test_kit/smart_standalone_patient_app_group.rb +177 -0
  63. data/lib/onc_certification_g10_test_kit/terminology_binding_validator.rb +140 -0
  64. data/lib/onc_certification_g10_test_kit/token_revocation_group.rb +133 -0
  65. data/lib/onc_certification_g10_test_kit/unauthorized_access_test.rb +25 -0
  66. data/lib/onc_certification_g10_test_kit/unrestricted_resource_type_access_group.rb +375 -0
  67. data/lib/onc_certification_g10_test_kit/version.rb +3 -0
  68. data/lib/onc_certification_g10_test_kit/visual_inspection_and_attestations_group.rb +470 -0
  69. data/lib/onc_certification_g10_test_kit/well_known_capabilities_test.rb +37 -0
  70. data/lib/onc_certification_g10_test_kit.rb +223 -0
  71. metadata +310 -0
@@ -0,0 +1,474 @@
1
+ require_relative 'bulk_export_validation_tester'
2
+
3
+ module ONCCertificationG10TestKit
4
+ class BulkDataGroupExportValidation < Inferno::TestGroup
5
+ title 'Group Compartment Export Validation Tests'
6
+ short_description 'Verify that the exported data conforms to the US Core Implementation Guide.'
7
+ description <<~DESCRIPTION
8
+ Verify that Group compartment export from the Bulk Data server follow US Core Implementation Guide
9
+ DESCRIPTION
10
+
11
+ id :bulk_data_group_export_validation
12
+
13
+ input :status_output, :requires_access_token, :bearer_token, :bulk_download_url
14
+ input :lines_to_validate,
15
+ title: 'Limit validation to a maximum resource count',
16
+ description: 'To validate all, leave blank.',
17
+ optional: true
18
+ input :bulk_patient_ids_in_group,
19
+ title: 'Patient IDs in exported Group',
20
+ description: 'Comma separated list of every Patient ID that is in the specified Group. This information is
21
+ provided by the system under test to verify that data returned matches expectations. Leave blank to not
22
+ verify Group inclusion.'
23
+ input :bulk_device_types_in_group,
24
+ title: 'Implantable Device Type Codes in exported Group',
25
+ description: 'Comma separated list of every Implantable Device type that is in the specified Group. This
26
+ information is provided by the system under test to verify that data returned matches expectations. Leave
27
+ blank to verify all Device resources against the Implantable Device profile.',
28
+ optional: true
29
+
30
+ test from: :tls_version_test do
31
+ title 'Bulk Data Server is secured by transport layer security'
32
+ description <<~DESCRIPTION
33
+ [§170.315(g)(10) Test Procedure]
34
+ (https://www.healthit.gov/test-method/standardized-api-patient-and-population-services)
35
+ requires that all exchanges described herein between a client and a
36
+ server SHALL be secured using Transport Layer Security (TLS)
37
+ Protocol Version 1.2 (RFC5246).
38
+ DESCRIPTION
39
+ id :g10_bulk_file_server_tls_version
40
+
41
+ config(
42
+ inputs: { url: { name: :bulk_download_url } },
43
+ options: { minimum_allowed_version: OpenSSL::SSL::TLS1_2_VERSION }
44
+ )
45
+ end
46
+
47
+ test do
48
+ title 'NDJSON download requires access token if requireAccessToken is true'
49
+ description <<~DESCRIPTION
50
+ If the requiresAccessToken field in the Complete Status body is set to true, the request SHALL include a valid#{' '}
51
+ access token.
52
+
53
+ [FHIR R4 Security](http://build.fhir.org/security.html#AccessDenied) and
54
+ [The OAuth 2.0 Authorization Framework: Bearer Token Usage](https://tools.ietf.org/html/rfc6750#section-3.1)
55
+ recommend using HTTP status code 401 for invalid token but also allow the actual result be controlled by policy#{' '}
56
+ and context.
57
+ DESCRIPTION
58
+ # link 'http://hl7.org/fhir/uv/bulkdata/export/index.html#file-request'
59
+
60
+ input :bulk_download_url
61
+
62
+ run do
63
+ skip_if bulk_download_url.blank?, 'Could not verify this functionality when no download link was provided'
64
+ skip_if requires_access_token.blank?,
65
+ 'Could not verify this functionality when requiresAccessToken is not provided'
66
+ omit_if requires_access_token == 'false',
67
+ 'Could not verify this functionality when requiresAccessToken is false'
68
+ skip_if bearer_token.blank?, 'Could not verify this functionality when Bearer Token is not provided'
69
+
70
+ get(bulk_download_url, headers: { accept: 'application/fhir+ndjson' })
71
+ assert_response_status([400, 401])
72
+ end
73
+ end
74
+
75
+ test do
76
+ title 'Patient resources returned conform to the US Core Patient Profile'
77
+ description <<~DESCRIPTION
78
+ This test verifies that the resources returned from bulk data export conform to the US Core profiles. This#{' '}
79
+ includes checking for missing data elements and value set verification.
80
+ DESCRIPTION
81
+ # link 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-patient'
82
+
83
+ include BulkExportValidationTester
84
+
85
+ def resource_type
86
+ 'Patient'
87
+ end
88
+
89
+ run do
90
+ perform_bulk_export_validation
91
+ end
92
+ end
93
+
94
+ test do
95
+ title 'Group export has at least two patients'
96
+ description <<~DESCRIPTION
97
+ This test verifies that the Group export has at least two patients.
98
+ DESCRIPTION
99
+ # link 'http://ndjson.org/'
100
+
101
+ include BulkExportValidationTester
102
+
103
+ run do
104
+ skip 'No Patient resources processed from bulk data export.' unless patient_ids_seen.present?
105
+
106
+ assert patient_ids_seen.length >= BulkExportValidationTester::MIN_RESOURCE_COUNT,
107
+ 'Bulk data export did not have multiple Patient resources.'
108
+ end
109
+ end
110
+
111
+ test do
112
+ title 'Patient IDs match those expected in Group'
113
+ description <<~DESCRIPTION
114
+ This test checks that the list of patient IDs that are expected match those that are returned.
115
+ If no patient ids are provided to the test, then the test will be omitted.
116
+ DESCRIPTION
117
+ # link 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-patient'
118
+
119
+ include BulkExportValidationTester
120
+
121
+ run do
122
+ omit 'No patient ids were given.' unless bulk_patient_ids_in_group.present?
123
+
124
+ expected_ids = Set.new(bulk_patient_ids_in_group.split(',').map(&:strip))
125
+
126
+ assert patient_ids_seen.sort == expected_ids.sort,
127
+ "Mismatch between patient ids seen (#{patient_ids_seen.to_a.join(', ')}) " \
128
+ "and patient ids expected (#{bulk_patient_ids_in_group})"
129
+ end
130
+ end
131
+
132
+ test do
133
+ title 'AllergyIntolerance resources returned conform to the US Core AllergyIntolerance Profile'
134
+ description <<~DESCRIPTION
135
+ This test verifies that the resources returned from bulk data export conform to the US Core profiles. This includes checking for missing data elements and value set verification.
136
+ DESCRIPTION
137
+ # link 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-allergyintolerance'
138
+
139
+ include BulkExportValidationTester
140
+
141
+ def resource_type
142
+ 'AllergyIntolerance'
143
+ end
144
+
145
+ run do
146
+ perform_bulk_export_validation
147
+ end
148
+ end
149
+
150
+ test do
151
+ title 'CarePlan resources returned conform to the US Core CarePlan Profile'
152
+ description <<~DESCRIPTION
153
+ This test verifies that the resources returned from bulk data export conform to the US Core profiles. This includes checking for missing data elements and value set verification.
154
+ DESCRIPTION
155
+ # link 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-careplan'
156
+
157
+ include BulkExportValidationTester
158
+
159
+ def resource_type
160
+ 'CarePlan'
161
+ end
162
+
163
+ run do
164
+ perform_bulk_export_validation
165
+ end
166
+ end
167
+
168
+ test do
169
+ title 'CareTeam resources returned conform to the US Core CareTeam Profile'
170
+ description <<~DESCRIPTION
171
+ This test verifies that the resources returned from bulk data export conform to the US Core profiles. This includes checking for missing data elements and value set verification.
172
+ DESCRIPTION
173
+ # link 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-careteam'
174
+
175
+ include BulkExportValidationTester
176
+
177
+ def resource_type
178
+ 'CareTeam'
179
+ end
180
+
181
+ run do
182
+ perform_bulk_export_validation
183
+ end
184
+ end
185
+
186
+ test do
187
+ title 'Condition resources returned conform to the US Core Condition Profile'
188
+ description <<~DESCRIPTION
189
+ This test verifies that the resources returned from bulk data export conform to the US Core profiles. This includes checking for missing data elements and value set verification.
190
+ DESCRIPTION
191
+ # link 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-condition'
192
+
193
+ include BulkExportValidationTester
194
+
195
+ def resource_type
196
+ 'Condition'
197
+ end
198
+
199
+ run do
200
+ perform_bulk_export_validation
201
+ end
202
+ end
203
+
204
+ test do
205
+ title 'Device resources returned conform to the US Core Implantable Device Profile'
206
+ description <<~DESCRIPTION
207
+ This test verifies that the resources returned from bulk data export conform to the US Core profiles. This includes checking for missing data elements and value set verification.
208
+ DESCRIPTION
209
+ # link 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-implantable-device'
210
+
211
+ include BulkExportValidationTester
212
+
213
+ def resource_type
214
+ 'Device'
215
+ end
216
+
217
+ run do
218
+ perform_bulk_export_validation
219
+ end
220
+ end
221
+
222
+ test do
223
+ title 'DiagnosticReport resources returned conform to the US Core DiagnosticReport Profile'
224
+ description <<~DESCRIPTION
225
+ This test verifies that the resources returned from bulk data export conform to the following US Core profiles. This includes checking for missing data elements and value set verification.
226
+
227
+ * http://hl7.org/fhir/us/core/StructureDefinition/us-core-diagnosticreport-lab
228
+ * http://hl7.org/fhir/us/core/StructureDefinition/us-core-diagnosticreport-note
229
+ DESCRIPTION
230
+ # link 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-diagnosticreport-l'
231
+
232
+ include BulkExportValidationTester
233
+
234
+ def resource_type
235
+ 'DiagnosticReport'
236
+ end
237
+
238
+ run do
239
+ perform_bulk_export_validation
240
+ end
241
+ end
242
+
243
+ test do
244
+ title 'DocumentReference resources returned conform to the US Core DocumentReference Profile'
245
+ description <<~DESCRIPTION
246
+ This test verifies that the resources returned from bulk data export conform to the US Core profiles. This includes checking for missing data elements and value set verification.
247
+ DESCRIPTION
248
+ # link 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-documentreference'
249
+
250
+ include BulkExportValidationTester
251
+
252
+ def resource_type
253
+ 'DocumentReference'
254
+ end
255
+
256
+ run do
257
+ perform_bulk_export_validation
258
+ end
259
+ end
260
+
261
+ test do
262
+ title 'Goal resources returned conform to the US Core Goal Profile'
263
+ description <<~DESCRIPTION
264
+ This test verifies that the resources returned from bulk data export conform to the US Core profiles. This includes checking for missing data elements and value set verification.
265
+ DESCRIPTION
266
+ # link 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-goal'
267
+
268
+ include BulkExportValidationTester
269
+
270
+ def resource_type
271
+ 'Goal'
272
+ end
273
+
274
+ run do
275
+ perform_bulk_export_validation
276
+ end
277
+ end
278
+
279
+ test do
280
+ title 'Immunization resources returned conform to the US Core Immunization Profile'
281
+ description <<~DESCRIPTION
282
+ This test verifies that the resources returned from bulk data export conform to the US Core profiles. This includes checking for missing data elements and value set verification.
283
+ DESCRIPTION
284
+ # link 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-Immunization'
285
+
286
+ include BulkExportValidationTester
287
+
288
+ def resource_type
289
+ 'Immunization'
290
+ end
291
+
292
+ run do
293
+ perform_bulk_export_validation
294
+ end
295
+ end
296
+
297
+ test do
298
+ title 'MedicationRequest resources returned conform to the US Core MedicationRequest Profile'
299
+ description <<~DESCRIPTION
300
+ This test verifies that the resources returned from bulk data export conform to the US Core profiles. This includes checking for missing data elements and value set verification.
301
+ DESCRIPTION
302
+ # link 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-medicationrequest'
303
+
304
+ include BulkExportValidationTester
305
+
306
+ def resource_type
307
+ 'MedicationRequest'
308
+ end
309
+
310
+ run do
311
+ perform_bulk_export_validation
312
+ end
313
+ end
314
+
315
+ test do
316
+ title 'Observation resources returned conform to the US Core Observation Profile'
317
+ description <<~DESCRIPTION
318
+ This test verifies that the resources returned from bulk data
319
+ export conform to the following US Core profiles. This includes
320
+ checking for missing data elements and value set verification.
321
+
322
+ * http://hl7.org/fhir/us/core/StructureDefinition/pediatric-bmi-for-age
323
+ * http://hl7.org/fhir/us/core/StructureDefinition/pediatric-weight-for-height
324
+ * http://hl7.org/fhir/us/core/StructureDefinition/us-core-observation-lab
325
+ * http://hl7.org/fhir/us/core/StructureDefinition/us-core-pulse-oximetry
326
+ * http://hl7.org/fhir/us/core/StructureDefinition/us-core-smokingstatus
327
+ * http://hl7.org/fhir/us/core/StructureDefinition/head-occipital-frontal-circumference-percentile
328
+ * http://hl7.org/fhir/StructureDefinition/bp
329
+ * http://hl7.org/fhir/StructureDefinition/bodyheight
330
+ * http://hl7.org/fhir/StructureDefinition/bodytemp
331
+ * http://hl7.org/fhir/StructureDefinition/bodyweight
332
+ * http://hl7.org/fhir/StructureDefinition/heartrate
333
+ * http://hl7.org/fhir/StructureDefinition/resprate
334
+ DESCRIPTION
335
+ # link 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-observation-lab'
336
+
337
+ include BulkExportValidationTester
338
+
339
+ def resource_type
340
+ 'Observation'
341
+ end
342
+
343
+ run do
344
+ perform_bulk_export_validation
345
+ end
346
+ end
347
+
348
+ test do
349
+ title 'Procedure resources returned conform to the US Core Procedure Profile'
350
+ description <<~DESCRIPTION
351
+ This test verifies that the resources returned from bulk data export conform to the US Core profiles. This includes checking for missing data elements and value set verification.
352
+ DESCRIPTION
353
+ # link 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-procedure'
354
+
355
+ include BulkExportValidationTester
356
+
357
+ def resource_type
358
+ 'Procedure'
359
+ end
360
+
361
+ run do
362
+ perform_bulk_export_validation
363
+ end
364
+ end
365
+
366
+ test do
367
+ title 'Encounter resources returned conform to the US Core Encounter Profile'
368
+ description <<~DESCRIPTION
369
+ This test verifies that the resources returned from bulk data export conform to the US Core profiles. This includes checking for missing data elements and value set verification.
370
+ DESCRIPTION
371
+ # link 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-encounter'
372
+
373
+ include BulkExportValidationTester
374
+
375
+ def resource_type
376
+ 'Encounter'
377
+ end
378
+
379
+ run do
380
+ perform_bulk_export_validation
381
+ end
382
+ end
383
+
384
+ test do
385
+ title 'Organization resources returned conform to the US Core Organization Profile'
386
+ description <<~DESCRIPTION
387
+ This test verifies that the resources returned from bulk data export conform to the US Core profiles. This includes checking for missing data elements and value set verification.
388
+ DESCRIPTION
389
+ # link 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-organization'
390
+
391
+ include BulkExportValidationTester
392
+
393
+ def resource_type
394
+ 'Organization'
395
+ end
396
+
397
+ run do
398
+ perform_bulk_export_validation
399
+ end
400
+ end
401
+
402
+ test do
403
+ title 'Practitioner resources returned conform to the US Core Practitioner Profile'
404
+ description <<~DESCRIPTION
405
+ This test verifies that the resources returned from bulk data export conform to the US Core profiles. This includes checking for missing data elements and value set verification.
406
+ DESCRIPTION
407
+ # link 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-practitioner'
408
+
409
+ include BulkExportValidationTester
410
+
411
+ def resource_type
412
+ 'Practitioner'
413
+ end
414
+
415
+ run do
416
+ perform_bulk_export_validation
417
+ end
418
+ end
419
+
420
+ test do
421
+ title 'Provenance resources returned conform to the US Core Provenance Profile'
422
+ description <<~DESCRIPTION
423
+ This test verifies that the resources returned from bulk data export conform to the US Core profiles. This includes checking for missing data elements and value set verification.
424
+ DESCRIPTION
425
+ # link 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-provenance'
426
+
427
+ include BulkExportValidationTester
428
+
429
+ def resource_type
430
+ 'Provenance'
431
+ end
432
+
433
+ run do
434
+ perform_bulk_export_validation
435
+ end
436
+ end
437
+
438
+ test do
439
+ title 'Location resources returned conform to the US Core Location Profile'
440
+ description <<~DESCRIPTION
441
+ This test verifies that the resources returned from bulk data export conform to the US Core profiles. This includes checking for missing data elements and value set verification.
442
+ DESCRIPTION
443
+ # link 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-location'
444
+
445
+ include BulkExportValidationTester
446
+
447
+ def resource_type
448
+ 'Location'
449
+ end
450
+
451
+ run do
452
+ perform_bulk_export_validation
453
+ end
454
+ end
455
+
456
+ test do
457
+ title 'Medication resources returned conform to the US Core Medication Profile'
458
+ description <<~DESCRIPTION
459
+ This test verifies that the resources returned from bulk data export conform to the US Core profiles. This includes checking for missing data elements and value set verification.
460
+ DESCRIPTION
461
+ # link 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-medication'
462
+
463
+ include BulkExportValidationTester
464
+
465
+ def resource_type
466
+ 'Medication'
467
+ end
468
+
469
+ run do
470
+ perform_bulk_export_validation
471
+ end
472
+ end
473
+ end
474
+ end
@@ -0,0 +1,58 @@
1
+ {
2
+ "keys":
3
+ [{
4
+ "kty": "EC",
5
+ "crv": "P-384",
6
+ "x": "JQKTsV6PT5Szf4QtDA1qrs0EJ1pbimQmM2SKvzOlIAqlph3h1OHmZ2i7MXahIF2C",
7
+ "y": "bRWWQRJBgDa6CTgwofYrHjVGcO-A7WNEnu4oJA5OUJPPPpczgx1g2NsfinK-D2Rw",
8
+ "use": "sig",
9
+ "key_ops": [
10
+ "verify"
11
+ ],
12
+ "ext": true,
13
+ "kid": "4b49a739d1eb115b3225f4cf9beb6d1b",
14
+ "alg": "ES384"
15
+ },
16
+ {
17
+ "kty": "EC",
18
+ "crv": "P-384",
19
+ "d": "kDkn55p7gryKk2tj6z2ij7ExUnhi0ngxXosvqa73y7epwgthFqaJwApmiXXU2yhK",
20
+ "x": "JQKTsV6PT5Szf4QtDA1qrs0EJ1pbimQmM2SKvzOlIAqlph3h1OHmZ2i7MXahIF2C",
21
+ "y": "bRWWQRJBgDa6CTgwofYrHjVGcO-A7WNEnu4oJA5OUJPPPpczgx1g2NsfinK-D2Rw",
22
+ "key_ops": [
23
+ "sign"
24
+ ],
25
+ "ext": true,
26
+ "kid": "4b49a739d1eb115b3225f4cf9beb6d1b",
27
+ "alg": "ES384"
28
+ },
29
+ {
30
+ "kty": "RSA",
31
+ "alg": "RS384",
32
+ "n": "vjbIzTqiY8K8zApeNng5ekNNIxJfXAue9BjoMrZ9Qy9m7yIA-tf6muEupEXWhq70tC7vIGLqJJ4O8m7yiH8H2qklX2mCAMg3xG3nbykY2X7JXtW9P8VIdG0sAMt5aZQnUGCgSS3n0qaooGn2LUlTGIR88Qi-4Nrao9_3Ki3UCiICeCiAE224jGCg0OlQU6qj2gEB3o-DWJFlG_dz1y-Mxo5ivaeM0vWuodjDrp-aiabJcSF_dx26sdC9dZdBKXFDq0t19I9S9AyGpGDJwzGRtWHY6LsskNHLvo8Zb5AsJ9eRZKpnh30SYBZI9WHtzU85M9WQqdScR69Vyp-6Uhfbvw",
33
+ "e": "AQAB",
34
+ "use": "sig",
35
+ "key_ops": [
36
+ "verify"
37
+ ],
38
+ "ext": true,
39
+ "kid": "b41528b6f37a9500edb8a905a595bdd7"
40
+ },
41
+ {
42
+ "kty": "RSA",
43
+ "alg": "RS384",
44
+ "n": "vjbIzTqiY8K8zApeNng5ekNNIxJfXAue9BjoMrZ9Qy9m7yIA-tf6muEupEXWhq70tC7vIGLqJJ4O8m7yiH8H2qklX2mCAMg3xG3nbykY2X7JXtW9P8VIdG0sAMt5aZQnUGCgSS3n0qaooGn2LUlTGIR88Qi-4Nrao9_3Ki3UCiICeCiAE224jGCg0OlQU6qj2gEB3o-DWJFlG_dz1y-Mxo5ivaeM0vWuodjDrp-aiabJcSF_dx26sdC9dZdBKXFDq0t19I9S9AyGpGDJwzGRtWHY6LsskNHLvo8Zb5AsJ9eRZKpnh30SYBZI9WHtzU85M9WQqdScR69Vyp-6Uhfbvw",
45
+ "e": "AQAB",
46
+ "d": "rriV9GYimi5by7TOW4xNh6_gYBHVRDBsft2OFF8qapdVHt2GNuRDDxc_B6ga6TY2Enh2MLKLTr1dD3W4FIdTCJiMerrorp07FJS7nJEMgWQDxrfgkX4_EqrhW42L5d4vypYnRXEEW6u4gzkx5uFOkdvJBIK7CsIdSaBFYhochnynNgvbKWasi4rl2hayEH8tdf3B7Z6OIH9alspBTaq3j_zJt_KkrpYEzIUb4UgALB5NTWn5YKr0Avk_asOg8YfjViQwO9ASGaWjQeJ2Rx8OEQwBMQHSDMCSWNiWmYOu9PcwSZFc1vLxqzyIM8QrQSJHCCMo_wGYgke_r0CLeONHEQ",
47
+ "p": "5hH_QApWGeobRi1n7XbMfJYohB8K3JDPa0MspfplHpJ-17JiGG2sNoBdBcpaPRf9OX48P8VqO0qrSSRAk-I-uO6OO9BHbIukXJILqnY2JmurYzbcYbt5FVbknlHRJojkF6-7sFBazpueUlOnXCw7X7Z_SkfNE4QX5Ejm2Zm5mek",
48
+ "q": "06bZz7c7K9s1-aEZsxYnLJ9eTpKlt1tIBDA_LwIh5W3w259pes2kUtimbnkyOf-V2ZIERsFCh5s-S9IOEMvAIa6M5j9GW1ILNT7AcHIUfcyFcH-FF8BU_KJdRP5PXnIXFdYcylvsdoIdchy1AaUIzyiKRCU3HBYI75hez0l_F2c",
49
+ "dp": "h_sVIXW6hCCRND48EedIX06k7conMkxIu_39ErDXOWWeoMAnKIcR5TijQnviL__QxD1vQMXezuKIMHfDz2RGbClbWdD1lhtG7wvG515tDPJQXxia0wzqOQmdoFF9S8hXAAT26vPjaAAkaEZXQaxG_4Au5elgNWu6b0wDXZN1Vpk",
50
+ "dq": "GqS0YpuUTU8JGmWXUJ4HTGy7eHSpe8134V8ZdRd1oOYYHe2RX64nc25mdR24nuh3uq3Q7_9AGsYGL5E_yAl-JD9O6WUpvDE1y_wcSYty3Os0GRdUb8r8Z9kgmKDS6Pa_xTXw5eBwgfKbNlQ6zPwzgbB-x1lP-K8lbNPni3ybDR0",
51
+ "qi": "cqQfoi0sM5Su8ZOhznmdWrDIQB28H6fBKiabgaIKkbWZV4e0nwFvLquHjPOvv4Ao8iEGU5dyhvg0n5BKYPi-4mp6M6OA1sy0NrTr7EsKSYGyu2pBq9rw4oAYTM2LXKg6K-awgUUlkc451IwxHBAe15PWCBM3kvLQeijNid0Vz5I",
52
+ "key_ops": [
53
+ "sign"
54
+ ],
55
+ "ext": true,
56
+ "kid": "b41528b6f37a9500edb8a905a595bdd7"
57
+ }]
58
+ }