cic-docs/spec/025_web_wallet_authenticati...

3.9 KiB

Web Wallet Authentication

Rationale

Intro

User Flow:

web_wallet_authentication

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