Repository navigation
Commit 4b944df
committed
feat(eudi): declare key attestations in the OpenID4VCI configuration
badge_credential_configuration() emitted a proof_types_supported.jwt
object carrying proof_signing_alg_values_supported and nothing else, so
an issuer that requires a wallet key attestation had no way to advertise
it and had to patch the returned dict — the hand-written, drifting copy
this function exists to prevent. A downstream OpenID4VCI issuer that
delegates the OB 3.0 entry to us reported its wallet library rejecting
the whole /.well-known/openid-credential-issuer document over the
missing member.
key_attestations_required= now takes that object: {} for "required, no
additional constraints", or the OpenID4VCI 1.0 D.2 resistance values the
issuer accepts under key_storage / user_authentication.
The default stays omitted, and that default is normative rather than
conservative. Section 12.2.4 says the parameter "MUST NOT be present in
the metadata" unless the issuer requires an attestation, and an empty
object is not a neutral placeholder — it is the positive claim that one
is needed without additional constraints. Emitting it unasked would have
every badge issuer declare it demands a hardware-backed attestation from
every holder, locking out the software wallets that cannot produce one;
Open Badges are not high-assurance identity credentials and the library
must not say otherwise on the issuer's behalf. HAIP requires wallets to
support key attestations (4.5.1); it does not require issuers to demand
them, and Keycloak fixed the same interop report by omitting the field
(keycloak/keycloak#44736). Callers who pass nothing get the same bytes
as v4.1.0, verified against that tag.
The value is validated and defensively copied, following _status_claim:
EudiError on a non-mapping, a key other than the two D.2 defines, an
empty array where the spec says non-empty, a bare string where an array
belongs (list("iso_18045_moderate") is otherwise a list of letters), or
a non-string level. The resistance values themselves are not checked —
D.2 lets each ecosystem define its own.
Out of scope, unchanged: verifying a key attestation an incoming
Credential Request carries (the #272 proof path, not metadata), and the
enclosing metadata document, which stays deployment policy.
Closes #276. Refs #271, #272.1 parent e8e7130 commit 4b944df
4 files changed
Lines changed: 177 additions & 4 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
7 | 28 | | |
8 | 29 | | |
9 | 30 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
275 | 275 | | |
276 | 276 | | |
277 | 277 | | |
| 278 | + | |
| 279 | + | |
| 280 | + | |
| 281 | + | |
| 282 | + | |
| 283 | + | |
| 284 | + | |
| 285 | + | |
| 286 | + | |
| 287 | + | |
| 288 | + | |
| 289 | + | |
| 290 | + | |
| 291 | + | |
| 292 | + | |
| 293 | + | |
| 294 | + | |
| 295 | + | |
| 296 | + | |
| 297 | + | |
| 298 | + | |
| 299 | + | |
| 300 | + | |
| 301 | + | |
| 302 | + | |
| 303 | + | |
| 304 | + | |
| 305 | + | |
| 306 | + | |
| 307 | + | |
| 308 | + | |
| 309 | + | |
| 310 | + | |
| 311 | + | |
| 312 | + | |
| 313 | + | |
| 314 | + | |
| 315 | + | |
| 316 | + | |
| 317 | + | |
| 318 | + | |
| 319 | + | |
| 320 | + | |
| 321 | + | |
| 322 | + | |
| 323 | + | |
| 324 | + | |
| 325 | + | |
278 | 326 | | |
279 | 327 | | |
280 | 328 | | |
281 | 329 | | |
282 | 330 | | |
283 | 331 | | |
| 332 | + | |
284 | 333 | | |
285 | 334 | | |
286 | 335 | | |
| |||
293 | 342 | | |
294 | 343 | | |
295 | 344 | | |
296 | | - | |
| 345 | + | |
| 346 | + | |
297 | 347 | | |
298 | 348 | | |
299 | 349 | | |
| |||
313 | 363 | | |
314 | 364 | | |
315 | 365 | | |
| 366 | + | |
| 367 | + | |
| 368 | + | |
| 369 | + | |
| 370 | + | |
| 371 | + | |
| 372 | + | |
| 373 | + | |
| 374 | + | |
| 375 | + | |
| 376 | + | |
| 377 | + | |
316 | 378 | | |
317 | 379 | | |
318 | 380 | | |
| |||
329 | 391 | | |
330 | 392 | | |
331 | 393 | | |
| 394 | + | |
| 395 | + | |
| 396 | + | |
| 397 | + | |
332 | 398 | | |
333 | 399 | | |
334 | 400 | | |
| |||
345 | 411 | | |
346 | 412 | | |
347 | 413 | | |
348 | | - | |
349 | | - | |
350 | | - | |
| 414 | + | |
351 | 415 | | |
352 | 416 | | |
353 | 417 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
12 | 12 | | |
13 | 13 | | |
14 | 14 | | |
| 15 | + | |
15 | 16 | | |
16 | 17 | | |
17 | 18 | | |
| |||
29 | 30 | | |
30 | 31 | | |
31 | 32 | | |
| 33 | + | |
| 34 | + | |
32 | 35 | | |
33 | 36 | | |
34 | 37 | | |
| |||
57 | 60 | | |
58 | 61 | | |
59 | 62 | | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
60 | 131 | | |
61 | 132 | | |
62 | 133 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
374 | 374 | | |
375 | 375 | | |
376 | 376 | | |
| 377 | + | |
| 378 | + | |
| 379 | + | |
| 380 | + | |
| 381 | + | |
| 382 | + | |
| 383 | + | |
| 384 | + | |
| 385 | + | |
| 386 | + | |
| 387 | + | |
| 388 | + | |
| 389 | + | |
| 390 | + | |
| 391 | + | |
| 392 | + | |
| 393 | + | |
377 | 394 | | |
378 | 395 | | |
379 | 396 | | |
| |||
0 commit comments