sesame-door-access.puml (1523B)
1 @startuml sesame-door-access 2 ' Offline door access for DD 97 (Project Sesame). 3 ' Regenerate with: java -jar plantuml.jar -tsvg sesame-*.puml 4 !include taler-style.iuml 5 autonumber 6 7 participant "Lock\n(offline)" as lock 8 participant "Taler Wallet" as wallet 9 participant "Merchant\nbackend" as merchant 10 11 == read challenge == 12 lock -> wallet : NFC tap: door_id,\nmerchant URI, challenge (nonce) 13 14 == create order == 15 wallet -> merchant : GET /templates/$door_id\n(skipped if cached) 16 merchant --> wallet : template details 17 wallet -> merchant : POST /templates/$door_id\n{challenge} 18 merchant --> wallet : {order_id, claim token} 19 wallet -> merchant : POST /orders/$ORDER_ID/claim 20 merchant --> wallet : contract terms (choices) 21 wallet -> wallet : select choice matching\na held token 22 23 == pay (redeem token) == 24 wallet -> merchant : POST /orders/$ORDER_ID/pay\n{coins: [], tokens: [TokenUseSig],\nwallet_data: {choice_index,\ntokens_evs: [TokenEnvelope]}} 25 merchant -> merchant : verify token: h_issue,\nub_sig, token_sig, key validity,\nnot spent, family in choice 26 merchant -> merchant : compute pos_confirmation\n(sign challenge / TOTP code) 27 merchant -> merchant : blind-sign replacement with\nthe input token's issue key 28 merchant --> wallet : {sig, pos_confirmation,\ntoken_sigs} 29 30 == present to lock == 31 wallet -> lock : NFC: pos_confirmation 32 lock -> lock : verify signature over own\nnonce (or TOTP code),\nconsume challenge 33 lock --> wallet : access granted 34 wallet -> wallet : (async) unblind token_sigs\ninto replacement token 35 @enduml