┌───────────────┐ ┌─────────────┐ ┌───────────────────────────┐ │Wallet Instance│ │Relying Party│ │Trust Anchor / Intermediate│ └───────┬───────┘ └──────┬──────┘ └─────────────┬─────────────┘ │ request a protected resource │ │ │──────────────────────────────────────────────────────────────────────────>│ │ │ │ │ │ signed credential presentation request │ │ │<─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │ │ │ │ │ │────┐ │ │ │ │ decode and evaluates the request │ │ │<───┘ │ │ │ │ │ │ │ │ ╔══════╤════════════════════╪═══════════════════════════════════════════════════════════════════════════╪═══════════════════════════════╪═════════════════════════════════╗ ║ ALT │ If Trust Chain is provided within the request and no internet connection │ │ ║ ╟──────┘ │ │ │ ║ ║ │────┐ │ │ ║ ║ │ │ statically validate the Trust Chain using Trust Anchor's public keys │ │ ║ ║ │<───┘ │ │ ║ ╠═══════════════════════════╪═══════════════════════════════════════════════════════════════════════════╪═══════════════════════════════╪═════════════════════════════════╣ ║ │ │ │ ║ ║ │ Fetch RP's Entity Configuration │ │ ║ ║ │ at .well-known/openid-federation │ │ ║ ║ │──────────────────────────────────────────────────────────────────────────>│ │ ║ ║ │ │ │ ║ ║ │ Return Entity Configuration │ │ ║ ║ │<──────────────────────────────────────────────────────────────────────────│ │ ║ ║ │ │ │ ║ ║ │ Extract Authority Hints from RP's Configuration │ │ ║ ║ │──────────────────────────────────────────────────────────────────────────>│ │ ║ ║ │ │ │ ║ ║ │ Provide Authority Hints │ │ ║ ║ │<──────────────────────────────────────────────────────────────────────────│ │ ║ ║ │ │ │ ║ ║ │ │ │ ║ ║ ╔═══════╤═════════╪═══════════════════════════════════════════════════════════════════════════╪═══════════════════════════════╪═══════════════════════╗ ║ ║ ║ LOOP │ for each Authority Hint │ │ ║ ║ ║ ╟───────┘ │ │ │ ║ ║ ║ ║ │ Fetch Entity Configuration -> get federation_fetch_api URL │ ║ ║ ║ ║ │──────────────────────────────────────────────────────────────────────────────────────────────────────────>│ ║ ║ ║ ║ │ │ │ ║ ║ ║ ║ │ Fetch Subordinate Statement │ │ ║ ║ ║ ║ │<──────────────────────────────────────────────────────────────────────────────────────────────────────────│ ║ ║ ║ ║ │ │ │ ║ ║ ║ ║ │────┐ │ │ ║ ║ ║ ║ │ │ Validate the previous statement │ │ ║ ║ ║ ║ │<───┘ using the Federation Entity Keys │ │ ║ ║ ║ ║ │ provided in the Subordinate Statement │ │ ║ ║ ║ ║ │ │ │ ║ ║ ║ ╚═════════════════╪═══════════════════════════════════════════════════════════════════════════╪═══════════════════════════════╪═══════════════════════╝ ║ ╚═══════════════════════════╪═══════════════════════════════════════════════════════════════════════════╪═══════════════════════════════╪═════════════════════════════════╝ │ │ │ │────┐ │ │ │ │ Validate Trust Chain │ │ │<───┘ │ │ │ │ │ │ │ │ ╔══════╤══════════╪══════════════════════════════════════════╗ │ │ ║ ALT │ If Trust Chain is valid and unexpired ║ │ │ ╟──────┘ │ ║ │ │ ║ │────┐ ║ │ │ ║ │ │ Proceed with Federation Process ║ │ │ ║ │<───┘ ║ │ │ ╠═════════════════╪══════════════════════════════════════════╣ │ │ ║ │ ║ │ │ ║ │────┐ ║ │ │ ║ │ │ Abort Process with Error ║ │ │ ║ │<───┘ ║ │ │ ╚═════════════════╪══════════════════════════════════════════╝ │ │ │ │ │ │────┐ │ │ │ │ Applies Policies │ │ │<───┘ │ │ │ │ │ │────┐ │ │ │ │ Derive RP's final metadata │ │ │<───┘ │ │ ┌───────┴───────┐ ┌──────┴──────┐ ┌─────────────┴─────────────┐ │Wallet Instance│ │Relying Party│ │Trust Anchor / Intermediate│ └───────────────┘ └─────────────┘ └───────────────────────────┘