# Web Wallet Authentication - Authors: William Luke (grassecon.org) - Date: 2022.01.12 - Version: 1 - Status: Pre-draft ## Rationale ## Intro ## User Flow: ![web_wallet_authentication](./images/web_wallet_authentication.svg) ```dot digraph G { node [fontname = "Handlee"]; edge [fontname = "Handlee"]; splines=true; subgraph cluster_0 { label = "Create Account"; color=black node [style=filled,color=lightgray]; create [ label = "Create Account"; shape = rect; ]; create -> trusted trusted [ label = "Are you on a trusted device"; shape = diamond; ]; trusted -> password [ label = "Yes"]; trusted -> are_you_sure [ label = "No" ]; are_you_sure [ label = "Are you sure you want to continue"; shape = diamond; ]; are_you_sure -> password [ label = "Yes"]; password [ label = "Create new Account"; shape = rect; ]; password -> generate_key_pair generate_key_pair [ label = "Generate Device Key Pair"; shape = rect; ]; seed [ label = "Seed"; shape = rect; ]; seed -> generate_key_pair generate_key_pair -> verify_key_copied verify_key_copied [ label = "Verify Seed Copied"; shape = rect; ]; verify_key_copied -> store_key_pair store_key_pair [ label = "Store Encrypted Device Key Pair"; shape = rect; ]; store_key_pair -> export_key export_key [ label = "Do you want to save to USB/local?"; shape = diamond; ]; export_key -> select_export_location [ label = "Yes"]; export_key -> create_account [ label = "No"]; select_export_location [ label = "Select Export Location"; shape = rect; ] select_export_location -> create_account create_account [ label = "Create account and associate with device key pair"; shape = rect; ]; create_account -> share_endorsement_url share_endorsement_url [ label = "Share Endorsement URL with Endorsers"; shape = rect; ]; } subgraph cluster_1 { label = "Sign In"; color=black node [style=filled,color=lightgray]; select_profile [ label = "Select Profile"; shape = rect; ]; upload_key [ label = "Upload Key"; shape = rect; ]; select_profile -> enter_password upload_key -> enter_password enter_password [ label = "Enter Password"; shape = rect; ]; link_account [ label = "Link Account"; shape = rect; ]; link_account -> enter_phone_number enter_phone_number [ label = "Enter Phone Number"; shape = rect; ]; enter_phone_number -> send_otp send_otp [ label = "Send OTP"; shape = rect; ]; send_otp -> enter_pin enter_pin [ label = "Enter Pin"; shape = rect; ]; enter_pin -> create_account_flow create_account_flow [ label = "Create Account Flow"; shape = rect; ]; } subgraph cluster_2 { label = "Endorse"; color=black node [style=filled,color=lightgray]; open_link [ label = "Open Link"; shape = rect; ]; open_link -> sign_in sign_in [ label = "Sign In"; shape = rect; ]; sign_in -> custodial custodial [ label = "Custodial"; shape = diamond; ]; custodial -> ask_server [label="Yes"] custodial -> okota_tx [label="No"] ask_server -> okota_tx ask_server [ label = "Ask Server to Sign"; shape = rect; ]; okota_tx [ label = "Sign In"; shape = rect; ]; } } ``` ## Example: ## Testing ## Action items ## Implementation ### Workflow ### Variables ### Interface ## Security ## Changelog