mirror of https://github.com/vacp2p/rfc.git
728 lines
44 KiB
HTML
728 lines
44 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en" dir="ltr">
|
|
|
|
<head>
|
|
<meta name="generator" content="Hugo 0.106.0">
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<meta name="description" content="Terminology # Account: A valid BIP-32 compliant key. Multiaccount: An account from which multiple Accounts can be derived. Abstract # This specification describes how an application can use the Status Keycard to -
|
|
Create Multiaccounts Store Multiaccounts Use Multiaccounts for transaction or message signing Derive Accounts from Multiaccounts More documentation on the Status Keycard can be found here
|
|
Motivation # The Status Keycard is a hardware wallet that can be used to store and sign transactions.">
|
|
<meta name="theme-color" content="#FFFFFF"><meta property="og:title" content="63/STATUS-Keycard-Usage" />
|
|
<meta property="og:description" content="Terminology # Account: A valid BIP-32 compliant key. Multiaccount: An account from which multiple Accounts can be derived. Abstract # This specification describes how an application can use the Status Keycard to -
|
|
Create Multiaccounts Store Multiaccounts Use Multiaccounts for transaction or message signing Derive Accounts from Multiaccounts More documentation on the Status Keycard can be found here
|
|
Motivation # The Status Keycard is a hardware wallet that can be used to store and sign transactions." />
|
|
<meta property="og:type" content="article" />
|
|
<meta property="og:url" content="https://rfc.vac.dev/spec/63/" /><meta property="article:section" content="docs" />
|
|
|
|
|
|
|
|
<title>63/STATUS-Keycard-Usage | Vac RFC</title>
|
|
<link rel="manifest" href="/manifest.json">
|
|
<link rel="icon" href="/favicon.png" type="image/x-icon">
|
|
<link rel="stylesheet" href="/book.min.e935e20bd0d469378cb482f0958edf258c731a4f895dccd55799c6fbc8043f23.css" integrity="sha256-6TXiC9DUaTeMtILwlY7fJYxzGk+JXczVV5nG+8gEPyM=">
|
|
<script defer src="/en.search.min.5ae14046c81918d2a9c50127aabc329f4f345e6c256f04e9ae05f6d48759463d.js" integrity="sha256-WuFARsgZGNKpxQEnqrwyn080XmwlbwTprgX21IdZRj0="></script>
|
|
<!--
|
|
Made with Book Theme
|
|
https://github.com/alex-shpak/hugo-book
|
|
-->
|
|
|
|
|
|
</head>
|
|
|
|
<body dir="ltr">
|
|
<input type="checkbox" class="hidden toggle" id="menu-control" />
|
|
<input type="checkbox" class="hidden toggle" id="toc-control" />
|
|
<main class="container flex">
|
|
<aside class="book-menu">
|
|
<div class="book-menu-content">
|
|
|
|
<nav>
|
|
<h2 class="book-brand">
|
|
<a href="/"><span>Vac RFC</span>
|
|
</a>
|
|
</h2>
|
|
|
|
|
|
<div class="book-search">
|
|
<input type="text" id="book-search-input" placeholder="Search" aria-label="Search" maxlength="64" data-hotkeys="s/" />
|
|
<div class="book-search-spinner hidden"></div>
|
|
<ul id="book-search-results"></ul>
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<ul>
|
|
<li>Raw
|
|
<ul>
|
|
<li><a href="/spec/20/">20/TOY-ETH-PM</a></li>
|
|
<li><a href="/spec/24/">24/STATUS-CURATION</a></li>
|
|
<li><a href="/spec/28/">28/STATUS-FEATURING</a></li>
|
|
<li><a href="/spec/31/">31/WAKU2-ENR</a></li>
|
|
<li><a href="/spec/32/">32/RLN-V1</a></li>
|
|
<li><a href="/spec/34/">34/WAKU2-PEER-EXCHANGE</a></li>
|
|
<li><a href="/spec/35/">35/WAKU2-NOISE</a></li>
|
|
<li><a href="/spec/37/">37/WAKU2-NOISE-SESSIONS</a></li>
|
|
<li><a href="/spec/38/">38/CONSENSUS-CLARO</a></li>
|
|
<li><a href="/spec/43/">43/WAKU2-NOISE-PAIRING</a></li>
|
|
<li><a href="/spec/44/">44/WAKU2-DANDELION</a></li>
|
|
<li><a href="/spec/45/">45/WAKU2-ADVERSARIAL-MODELS</a></li>
|
|
<li><a href="/spec/46/">46/GOSSIPSUB-TOR-PUSH</a></li>
|
|
<li><a href="/spec/47/">47/WAKU2-TOR-PUSH</a></li>
|
|
<li><a href="/spec/48/">48/RLN-INTEREP-SPEC</a></li>
|
|
<li><a href="/spec/51/">51/WAKU2-RELAY-SHARDING</a></li>
|
|
<li><a href="/spec/52/">52/WAKU2-RELAY-STATIC-SHARD-ALLOC</a></li>
|
|
<li><a href="/spec/57/">57/STATUS-Simple-Scaling</a></li>
|
|
<li><a href="/spec/58/">58/RLN-V2</a></li>
|
|
<li><a href="/spec/61/">61/STATUS-Community-History-Archives</a></li>
|
|
<li><a href="/spec/63/"class=active>63/STATUS-Keycard-Usage</a></li>
|
|
<li><a href="/spec/64/">64/WAKU2-NETWORK</a></li>
|
|
</ul>
|
|
</li>
|
|
<li>Draft
|
|
<ul>
|
|
<li><a href="/spec/1/">1/COSS</a></li>
|
|
<li><a href="/spec/3/">3/REMOTE-LOG</a></li>
|
|
<li><a href="/spec/4/">4/MVDS-META</a></li>
|
|
<li><a href="/spec/10/">10/WAKU2</a></li>
|
|
<li><a href="/spec/12/">12/WAKU2-FILTER</a></li>
|
|
<li><a href="/spec/13/">13/WAKU2-STORE</a></li>
|
|
<li><a href="/spec/14/">14/WAKU2-MESSAGE</a></li>
|
|
<li><a href="/spec/15/">15/WAKU2-BRIDGE</a></li>
|
|
<li><a href="/spec/16/">16/WAKU2-RPC</a></li>
|
|
<li><a href="/spec/17/">17/WAKU2-RLN-RELAY</a></li>
|
|
<li><a href="/spec/18/">18/WAKU2-SWAP</a></li>
|
|
<li><a href="/spec/19/">19/WAKU2-LIGHTPUSH</a></li>
|
|
<li><a href="/spec/21/">21/WAKU2-FTSTORE</a></li>
|
|
<li><a href="/spec/22/">22/TOY-CHAT</a></li>
|
|
<li><a href="/spec/23/">23/WAKU2-TOPICS</a></li>
|
|
<li><a href="/spec/26/">26/WAKU2-PAYLOAD</a></li>
|
|
<li><a href="/spec/27/">27/WAKU2-PEERS</a></li>
|
|
<li><a href="/spec/29/">29/WAKU2-CONFIG</a></li>
|
|
<li><a href="/spec/30/">30/ADAPTIVE-NODES</a></li>
|
|
<li><a href="/spec/33/">33/WAKU2-DISCV5</a></li>
|
|
<li><a href="/spec/36/">36/WAKU2-BINDINGS-API</a></li>
|
|
<li><a href="/spec/53/">53/WAKU2-X3DH</a></li>
|
|
<li><a href="/spec/54/">54/WAKU2-X3DH-SESSIONS</a></li>
|
|
<li><a href="/spec/55/">55/STATUS-1TO1-CHAT</a></li>
|
|
<li><a href="/spec/56/">56/STATUS-COMMUNITIES</a></li>
|
|
</ul>
|
|
</li>
|
|
<li>Stable
|
|
<ul>
|
|
<li><a href="/spec/2/">2/MVDS</a></li>
|
|
<li><a href="/spec/6/">6/WAKU1</a></li>
|
|
<li><a href="/spec/7/">7/WAKU-DATA</a></li>
|
|
<li><a href="/spec/8/">8/WAKU-MAIL</a></li>
|
|
<li><a href="/spec/9/">9/WAKU-RPC</a></li>
|
|
<li><a href="/spec/11/">11/WAKU2-RELAY</a></li>
|
|
</ul>
|
|
</li>
|
|
<li>Deprecated
|
|
<ul>
|
|
<li><a href="/spec/5/">5/WAKU0</a></li>
|
|
</ul>
|
|
</li>
|
|
<li>Retired</li>
|
|
</ul>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</nav>
|
|
|
|
|
|
|
|
|
|
<script>(function(){var e=document.querySelector("aside.book-menu nav");addEventListener("beforeunload",function(){localStorage.setItem("menu.scrollTop",e.scrollTop)}),e.scrollTop=localStorage.getItem("menu.scrollTop")})()</script>
|
|
|
|
|
|
|
|
</div>
|
|
</aside>
|
|
|
|
<div class="book-page">
|
|
<header class="book-header">
|
|
|
|
<div class="flex align-center justify-between">
|
|
<label for="menu-control">
|
|
<img src="/svg/menu.svg" class="book-icon" alt="Menu" />
|
|
</label>
|
|
|
|
<strong>63/STATUS-Keycard-Usage</strong>
|
|
|
|
<label for="toc-control">
|
|
|
|
<img src="/svg/toc.svg" class="book-icon" alt="Table of Contents" />
|
|
|
|
</label>
|
|
</div>
|
|
|
|
|
|
|
|
<aside class="hidden clearfix">
|
|
|
|
|
|
<nav id="TableOfContents">
|
|
<ul>
|
|
<li><a href="#terminology">Terminology</a></li>
|
|
<li><a href="#abstract">Abstract</a></li>
|
|
<li><a href="#motivation">Motivation</a></li>
|
|
<li><a href="#usage">Usage</a>
|
|
<ul>
|
|
<li><a href="#endpoints">Endpoints</a>
|
|
<ul>
|
|
<li><a href="#1-initialize-keycard-init-keycard">1. Initialize Keycard (<code>/init-keycard</code>)</a></li>
|
|
<li><a href="#2-get-application-info-get-application-info">2. Get Application Info (<code>/get-application-info</code>)</a></li>
|
|
<li><a href="#3-pairing-the-keycard-to-the-client-device-pair">3. Pairing the Keycard to the Client device (<code>/pair</code>)</a></li>
|
|
<li><a href="#4-generate-a-new-set-of-keys-generate-and-load-keys">4. Generate a new set of keys (<code>/generate-and-load-keys</code>)</a></li>
|
|
<li><a href="#5-get-a-set-of-generated-keys-get-keys">5. Get a set of generated keys (<code>/get-keys</code>)</a></li>
|
|
<li><a href="#6-sign-a-transaction-sign">6. Sign a transaction (<code>/sign</code>)</a></li>
|
|
<li><a href="#7-export-a-key-export-key">7. Export a key (<code>/export-key</code>)</a></li>
|
|
<li><a href="#8-verify-a-pin-verify-pin">8. Verify a pin (<code>/verify-pin</code>)</a></li>
|
|
<li><a href="#9-change-the-pin-change-pin">9. Change the pin (<code>/change-pin</code>)</a></li>
|
|
<li><a href="#10-unblock-the-keycard-unblock-pin">10. Unblock the keycard (<code>/unblock-pin</code>)</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#flows">Flows</a>
|
|
<ul>
|
|
<li><a href="#1-a-new-user-wants-to-use-the-keycard-with-the-application">1. A new user wants to use the Keycard with the application</a></li>
|
|
<li><a href="#2-an-existing-user-wants-to-use-the-keycard-with-the-application">2. An existing user wants to use the Keycard with the application</a></li>
|
|
<li><a href="#3-an-existing-user-wants-to-use-the-keycard-with-a-new-client-device">3. An existing user wants to use the Keycard with a new client device</a></li>
|
|
<li><a href="#4-an-existing-user-wishes-to-verify-the-pin-of-the-keycard">4. An existing user wishes to verify the pin of the Keycard</a></li>
|
|
<li><a href="#5-an-existing-user-wishes-to-change-the-pin-of-the-keycard">5. An existing user wishes to change the pin of the Keycard</a></li>
|
|
<li><a href="#6-an-existing-user-wishes-to-unblock-the-keycard">6. An existing user wishes to unblock the Keycard</a></li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#security-considerations">Security Considerations</a></li>
|
|
<li><a href="#privacy-considerations">Privacy Considerations</a></li>
|
|
<li><a href="#copyright">Copyright</a></li>
|
|
<li><a href="#references">References</a></li>
|
|
</ul>
|
|
</nav>
|
|
|
|
|
|
|
|
</aside>
|
|
|
|
|
|
</header>
|
|
|
|
|
|
|
|
<article class="markdown">
|
|
<h1 id="63status-keycard-usage">
|
|
63/STATUS-Keycard-Usage
|
|
<a class="anchor" href="#63status-keycard-usage">#</a>
|
|
</h1>
|
|
|
|
|
|
<h1 id="status-keycard-usage">
|
|
Status Keycard Usage
|
|
<a class="anchor" href="#status-keycard-usage">#</a>
|
|
</h1>
|
|
|
|
|
|
|
|
|
|
<img src="https://img.shields.io/badge/status-raw-lightgrey?style=flat-square" />
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<ul>
|
|
<li>Status: raw</li>
|
|
<li>Editor: Aaryamann Challani <a href="mailto:aaryamann@status.im">aaryamann@status.im</a></li>
|
|
|
|
<li>Contributors:
|
|
|
|
|
|
?
|
|
|
|
</li>
|
|
|
|
</ul><h1 id="terminology">
|
|
Terminology
|
|
<a class="anchor" href="#terminology">#</a>
|
|
</h1>
|
|
<ul>
|
|
<li><strong>Account</strong>: A valid <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki">BIP-32</a> compliant key.</li>
|
|
<li><strong>Multiaccount</strong>: An account from which multiple Accounts can be derived.</li>
|
|
</ul>
|
|
<h1 id="abstract">
|
|
Abstract
|
|
<a class="anchor" href="#abstract">#</a>
|
|
</h1>
|
|
<p>This specification describes how an application can use the Status Keycard to -</p>
|
|
<ol>
|
|
<li>Create Multiaccounts</li>
|
|
<li>Store Multiaccounts</li>
|
|
<li>Use Multiaccounts for transaction or message signing</li>
|
|
<li>Derive Accounts from Multiaccounts</li>
|
|
</ol>
|
|
<p>More documentation on the Status Keycard can be found <a href="https://keycard.tech/docs/">here</a></p>
|
|
<h1 id="motivation">
|
|
Motivation
|
|
<a class="anchor" href="#motivation">#</a>
|
|
</h1>
|
|
<p>The Status Keycard is a hardware wallet that can be used to store and sign transactions.
|
|
For the purpose of the Status App, this specification describes how the Keycard SHOULD be used to store and sign transactions.</p>
|
|
<h1 id="usage">
|
|
Usage
|
|
<a class="anchor" href="#usage">#</a>
|
|
</h1>
|
|
<h2 id="endpoints">
|
|
Endpoints
|
|
<a class="anchor" href="#endpoints">#</a>
|
|
</h2>
|
|
<h3 id="1-initialize-keycard-init-keycard">
|
|
1. Initialize Keycard (<code>/init-keycard</code>)
|
|
<a class="anchor" href="#1-initialize-keycard-init-keycard">#</a>
|
|
</h3>
|
|
<p>To initialize the keycard for use with the application.
|
|
The keycard is locked with a 6 digit pin.</p>
|
|
<h4 id="request-wire-format">
|
|
Request wire format
|
|
<a class="anchor" href="#request-wire-format">#</a>
|
|
</h4>
|
|
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
|
</span></span><span style="display:flex;"><span> <span style="color:#f92672">"pin"</span>: <span style="color:#ae81ff">6</span><span style="color:#960050;background-color:#1e0010">_digit_pin</span>
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span></code></pre></div><h4 id="response-wire-format">
|
|
Response wire format
|
|
<a class="anchor" href="#response-wire-format">#</a>
|
|
</h4>
|
|
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
|
</span></span><span style="display:flex;"><span> <span style="color:#f92672">"password"</span>: <span style="color:#960050;background-color:#1e0010">password_to_unlock_keycard</span>,
|
|
</span></span><span style="display:flex;"><span> <span style="color:#f92672">"puk"</span>: <span style="color:#ae81ff">12</span><span style="color:#960050;background-color:#1e0010">_digit_recovery_code</span>,
|
|
</span></span><span style="display:flex;"><span> <span style="color:#f92672">"pin"</span>: <span style="color:#960050;background-color:#1e0010">provided_pin</span>,
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span></code></pre></div><p>The keycard MUST be initialized before it can be used with the application.
|
|
The application SHOULD provide a way to recover the keycard in case the pin is forgotten.</p>
|
|
<h3 id="2-get-application-info-get-application-info">
|
|
2. Get Application Info (<code>/get-application-info</code>)
|
|
<a class="anchor" href="#2-get-application-info-get-application-info">#</a>
|
|
</h3>
|
|
<p>To fetch if the keycard is ready to be used by the application.</p>
|
|
<h4 id="request-wire-format-1">
|
|
Request wire format
|
|
<a class="anchor" href="#request-wire-format-1">#</a>
|
|
</h4>
|
|
<p>The requester MAY add a <code>pairing</code> field to filter through the generated keys</p>
|
|
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
|
</span></span><span style="display:flex;"><span> <span style="color:#f92672">"pairing"</span>: <span style="color:#960050;background-color:#1e0010"><shared_secret>/<pairing_index>/<</span><span style="color:#ae81ff">256</span><span style="color:#960050;background-color:#1e0010">_bit_salt></span> <span style="color:#960050;background-color:#1e0010">OR</span> <span style="color:#66d9ef">null</span>
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span></code></pre></div><h4 id="response-wire-format-1">
|
|
Response wire format
|
|
<a class="anchor" href="#response-wire-format-1">#</a>
|
|
</h4>
|
|
<h5 id="if-the-keycard-is-not-initialized-yet">
|
|
If the keycard is not initialized yet
|
|
<a class="anchor" href="#if-the-keycard-is-not-initialized-yet">#</a>
|
|
</h5>
|
|
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
|
</span></span><span style="display:flex;"><span> <span style="color:#f92672">"initialized?"</span>: <span style="color:#66d9ef">false</span>
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span></code></pre></div><h5 id="if-the-keycard-is-initialized">
|
|
If the keycard is initialized
|
|
<a class="anchor" href="#if-the-keycard-is-initialized">#</a>
|
|
</h5>
|
|
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
|
</span></span><span style="display:flex;"><span> <span style="color:#f92672">"free-pairing-slots"</span>: <span style="color:#960050;background-color:#1e0010">number</span>,
|
|
</span></span><span style="display:flex;"><span> <span style="color:#f92672">"app-version"</span>: <span style="color:#960050;background-color:#1e0010">major_version.minor_version</span>,
|
|
</span></span><span style="display:flex;"><span> <span style="color:#f92672">"secure-channel-pub-key"</span>: <span style="color:#960050;background-color:#1e0010">valid_bip</span><span style="color:#ae81ff">32</span><span style="color:#960050;background-color:#1e0010">_key</span>,<span style="color:#960050;background-color:#1e0010">,</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#f92672">"key-uid"</span>: <span style="color:#960050;background-color:#1e0010">unique_id_of_the_default_key</span>,
|
|
</span></span><span style="display:flex;"><span> <span style="color:#f92672">"instance-uid"</span>: <span style="color:#960050;background-color:#1e0010">unique_instance_id</span>,
|
|
</span></span><span style="display:flex;"><span> <span style="color:#f92672">"paired?"</span>: <span style="color:#960050;background-color:#1e0010">bool</span>,
|
|
</span></span><span style="display:flex;"><span> <span style="color:#f92672">"has-master-key?"</span>: <span style="color:#960050;background-color:#1e0010">bool</span>,
|
|
</span></span><span style="display:flex;"><span> <span style="color:#f92672">"initialized?"</span> <span style="color:#66d9ef">true</span>
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span></code></pre></div><h3 id="3-pairing-the-keycard-to-the-client-device-pair">
|
|
3. Pairing the Keycard to the Client device (<code>/pair</code>)
|
|
<a class="anchor" href="#3-pairing-the-keycard-to-the-client-device-pair">#</a>
|
|
</h3>
|
|
<p>To establish a secure communication channel described <a href="https://keycard.tech/docs/apdu/opensecurechannel.html">here</a>, the keycard and the client device need to be paired.</p>
|
|
<h4 id="request-wire-format-2">
|
|
Request wire format
|
|
<a class="anchor" href="#request-wire-format-2">#</a>
|
|
</h4>
|
|
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
|
</span></span><span style="display:flex;"><span> <span style="color:#f92672">"password"</span>: <span style="color:#960050;background-color:#1e0010">password_to_unlock_keycard</span>
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span></code></pre></div><h4 id="response-wire-format-2">
|
|
Response wire format
|
|
<a class="anchor" href="#response-wire-format-2">#</a>
|
|
</h4>
|
|
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span><span style="color:#e6db74">"<shared_secret>/<pairing_index>/<256_bit_salt>"</span>
|
|
</span></span></code></pre></div><h3 id="4-generate-a-new-set-of-keys-generate-and-load-keys">
|
|
4. Generate a new set of keys (<code>/generate-and-load-keys</code>)
|
|
<a class="anchor" href="#4-generate-a-new-set-of-keys-generate-and-load-keys">#</a>
|
|
</h3>
|
|
<p>To generate a new set of keys and load them onto the keycard.</p>
|
|
<h4 id="request-wire-format-3">
|
|
Request wire format
|
|
<a class="anchor" href="#request-wire-format-3">#</a>
|
|
</h4>
|
|
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
|
</span></span><span style="display:flex;"><span> <span style="color:#f92672">"mnemonic"</span>: <span style="color:#ae81ff">12</span><span style="color:#960050;background-color:#1e0010">_word_mnemonic</span>,
|
|
</span></span><span style="display:flex;"><span> <span style="color:#f92672">"pairing"</span>: <span style="color:#960050;background-color:#1e0010"><shared_secret>/<pairing_index>/<</span><span style="color:#ae81ff">256</span><span style="color:#960050;background-color:#1e0010">_bit_salt></span>,
|
|
</span></span><span style="display:flex;"><span> <span style="color:#f92672">"pin"</span>: <span style="color:#ae81ff">6</span><span style="color:#960050;background-color:#1e0010">_digit_pin</span>
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span></code></pre></div><h4 id="response-wire-format-3">
|
|
Response wire format
|
|
<a class="anchor" href="#response-wire-format-3">#</a>
|
|
</h4>
|
|
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
|
</span></span><span style="display:flex;"><span> <span style="color:#f92672">"whisper-address"</span>: <span style="color:#ae81ff">20</span><span style="color:#960050;background-color:#1e0010">_byte_whisper_compatible_address</span>,
|
|
</span></span><span style="display:flex;"><span> <span style="color:#f92672">"whisper-private-key"</span>: <span style="color:#960050;background-color:#1e0010">whisper_private_key</span>,
|
|
</span></span><span style="display:flex;"><span> <span style="color:#f92672">"wallet-root-public-key"</span>: <span style="color:#ae81ff">256</span><span style="color:#960050;background-color:#1e0010">_bit_wallet_root_public_key</span>,
|
|
</span></span><span style="display:flex;"><span> <span style="color:#f92672">"encryption-public-key"</span>: <span style="color:#ae81ff">256</span><span style="color:#960050;background-color:#1e0010">_bit_encryption_public_key</span>,<span style="color:#960050;background-color:#1e0010">,</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#f92672">"wallet-root-address"</span>: <span style="color:#ae81ff">20</span><span style="color:#960050;background-color:#1e0010">_byte_wallet_root_address</span>,
|
|
</span></span><span style="display:flex;"><span> <span style="color:#f92672">"whisper-public-key"</span>: <span style="color:#ae81ff">256</span><span style="color:#960050;background-color:#1e0010">_bit_whisper_public_key</span>,
|
|
</span></span><span style="display:flex;"><span> <span style="color:#f92672">"address"</span>: <span style="color:#ae81ff">20</span><span style="color:#960050;background-color:#1e0010">_byte_address</span>,
|
|
</span></span><span style="display:flex;"><span> <span style="color:#f92672">"wallet-address"</span>: <span style="color:#ae81ff">20</span><span style="color:#960050;background-color:#1e0010">_byte_wallet_address</span>,<span style="color:#960050;background-color:#1e0010">,</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#f92672">"key-uid"</span>: <span style="color:#ae81ff">64</span><span style="color:#960050;background-color:#1e0010">_byte_unique_key_id</span>,
|
|
</span></span><span style="display:flex;"><span> <span style="color:#f92672">"wallet-public-key"</span>: <span style="color:#ae81ff">256</span><span style="color:#960050;background-color:#1e0010">_bit_wallet_public_key</span>,
|
|
</span></span><span style="display:flex;"><span> <span style="color:#f92672">"public-key"</span>: <span style="color:#ae81ff">256</span><span style="color:#960050;background-color:#1e0010">_bit_public_key</span>,
|
|
</span></span><span style="display:flex;"><span> <span style="color:#f92672">"instance-uid"</span>: <span style="color:#ae81ff">32</span><span style="color:#960050;background-color:#1e0010">_byte_unique_instance_id</span>,
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span></code></pre></div><h3 id="5-get-a-set-of-generated-keys-get-keys">
|
|
5. Get a set of generated keys (<code>/get-keys</code>)
|
|
<a class="anchor" href="#5-get-a-set-of-generated-keys-get-keys">#</a>
|
|
</h3>
|
|
<p>To fetch the keys that are currently loaded on the keycard.</p>
|
|
<h4 id="request-wire-format-4">
|
|
Request wire format
|
|
<a class="anchor" href="#request-wire-format-4">#</a>
|
|
</h4>
|
|
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
|
</span></span><span style="display:flex;"><span> <span style="color:#f92672">"pairing"</span>: <span style="color:#960050;background-color:#1e0010"><shared_secret>/<pairing_index>/<</span><span style="color:#ae81ff">256</span><span style="color:#960050;background-color:#1e0010">_bit_salt></span>,
|
|
</span></span><span style="display:flex;"><span> <span style="color:#f92672">"pin"</span>: <span style="color:#ae81ff">6</span><span style="color:#960050;background-color:#1e0010">_digit_pin</span>
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span></code></pre></div><h4 id="response-wire-format-4">
|
|
Response wire format
|
|
<a class="anchor" href="#response-wire-format-4">#</a>
|
|
</h4>
|
|
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
|
</span></span><span style="display:flex;"><span> <span style="color:#f92672">"whisper-address"</span>: <span style="color:#ae81ff">20</span><span style="color:#960050;background-color:#1e0010">_byte_whisper_compatible_address</span>,
|
|
</span></span><span style="display:flex;"><span> <span style="color:#f92672">"whisper-private-key"</span>: <span style="color:#960050;background-color:#1e0010">whisper_private_key</span>,
|
|
</span></span><span style="display:flex;"><span> <span style="color:#f92672">"wallet-root-public-key"</span>: <span style="color:#ae81ff">256</span><span style="color:#960050;background-color:#1e0010">_bit_wallet_root_public_key</span>,
|
|
</span></span><span style="display:flex;"><span> <span style="color:#f92672">"encryption-public-key"</span>: <span style="color:#ae81ff">256</span><span style="color:#960050;background-color:#1e0010">_bit_encryption_public_key</span>,
|
|
</span></span><span style="display:flex;"><span> <span style="color:#f92672">"wallet-root-address"</span>: <span style="color:#ae81ff">20</span><span style="color:#960050;background-color:#1e0010">_byte_wallet_root_address</span>,
|
|
</span></span><span style="display:flex;"><span> <span style="color:#f92672">"whisper-public-key"</span>: <span style="color:#ae81ff">256</span><span style="color:#960050;background-color:#1e0010">_bit_whisper_public_key</span>,
|
|
</span></span><span style="display:flex;"><span> <span style="color:#f92672">"address"</span>: <span style="color:#ae81ff">20</span><span style="color:#960050;background-color:#1e0010">_byte_address</span>,
|
|
</span></span><span style="display:flex;"><span> <span style="color:#f92672">"wallet-address"</span>: <span style="color:#ae81ff">20</span><span style="color:#960050;background-color:#1e0010">_byte_wallet_address</span>,
|
|
</span></span><span style="display:flex;"><span> <span style="color:#f92672">"key-uid"</span>: <span style="color:#ae81ff">64</span><span style="color:#960050;background-color:#1e0010">_byte_unique_key_id</span>,
|
|
</span></span><span style="display:flex;"><span> <span style="color:#f92672">"wallet-public-key"</span>: <span style="color:#ae81ff">256</span><span style="color:#960050;background-color:#1e0010">_bit_wallet_public_key</span>,
|
|
</span></span><span style="display:flex;"><span> <span style="color:#f92672">"public-key"</span>: <span style="color:#ae81ff">256</span><span style="color:#960050;background-color:#1e0010">_bit_public_key</span>,
|
|
</span></span><span style="display:flex;"><span> <span style="color:#f92672">"instance-uid"</span>: <span style="color:#ae81ff">32</span><span style="color:#960050;background-color:#1e0010">_byte_unique_instance_id</span>,
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span></code></pre></div><h3 id="6-sign-a-transaction-sign">
|
|
6. Sign a transaction (<code>/sign</code>)
|
|
<a class="anchor" href="#6-sign-a-transaction-sign">#</a>
|
|
</h3>
|
|
<p>To sign a transaction using the keycard, passing in the pairing information and the transaction to be signed.</p>
|
|
<h4 id="request-wire-format-5">
|
|
Request wire format
|
|
<a class="anchor" href="#request-wire-format-5">#</a>
|
|
</h4>
|
|
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
|
</span></span><span style="display:flex;"><span> <span style="color:#f92672">"hash"</span>: <span style="color:#ae81ff">64</span><span style="color:#960050;background-color:#1e0010">_byte_hash_of_the_transaction</span>,
|
|
</span></span><span style="display:flex;"><span> <span style="color:#f92672">"pairing"</span>: <span style="color:#960050;background-color:#1e0010"><shared_secret>/<pairing_index>/<</span><span style="color:#ae81ff">256</span><span style="color:#960050;background-color:#1e0010">_bit_salt></span>,
|
|
</span></span><span style="display:flex;"><span> <span style="color:#f92672">"pin"</span>: <span style="color:#ae81ff">6</span><span style="color:#960050;background-color:#1e0010">_digit_pin</span>,
|
|
</span></span><span style="display:flex;"><span> <span style="color:#f92672">"path"</span>: <span style="color:#960050;background-color:#1e0010">bip</span><span style="color:#ae81ff">32</span><span style="color:#960050;background-color:#1e0010">_path_to_the_key</span>
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span></code></pre></div><h4 id="response-wire-format-5">
|
|
Response wire format
|
|
<a class="anchor" href="#response-wire-format-5">#</a>
|
|
</h4>
|
|
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span><span style="color:#960050;background-color:#1e0010"><</span><span style="color:#ae81ff">256</span><span style="color:#960050;background-color:#1e0010">_bit_signature></span>
|
|
</span></span></code></pre></div><h3 id="7-export-a-key-export-key">
|
|
7. Export a key (<code>/export-key</code>)
|
|
<a class="anchor" href="#7-export-a-key-export-key">#</a>
|
|
</h3>
|
|
<p>To export a key from the keycard, passing in the pairing information and the path to the key to be exported.</p>
|
|
<h4 id="request-wire-format-6">
|
|
Request wire format
|
|
<a class="anchor" href="#request-wire-format-6">#</a>
|
|
</h4>
|
|
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
|
</span></span><span style="display:flex;"><span> <span style="color:#f92672">"pairing"</span>: <span style="color:#960050;background-color:#1e0010"><shared_secret>/<pairing_index>/<</span><span style="color:#ae81ff">256</span><span style="color:#960050;background-color:#1e0010">_bit_salt></span>,
|
|
</span></span><span style="display:flex;"><span> <span style="color:#f92672">"pin"</span>: <span style="color:#ae81ff">6</span><span style="color:#960050;background-color:#1e0010">_digit_pin</span>,
|
|
</span></span><span style="display:flex;"><span> <span style="color:#f92672">"path"</span>: <span style="color:#960050;background-color:#1e0010">bip</span><span style="color:#ae81ff">32</span><span style="color:#960050;background-color:#1e0010">_path_to_the_key</span>
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span></code></pre></div><h4 id="response-wire-format-6">
|
|
Response wire format
|
|
<a class="anchor" href="#response-wire-format-6">#</a>
|
|
</h4>
|
|
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span><span style="color:#960050;background-color:#1e0010"><</span><span style="color:#ae81ff">256</span><span style="color:#960050;background-color:#1e0010">_bit_public_key></span>
|
|
</span></span></code></pre></div><h3 id="8-verify-a-pin-verify-pin">
|
|
8. Verify a pin (<code>/verify-pin</code>)
|
|
<a class="anchor" href="#8-verify-a-pin-verify-pin">#</a>
|
|
</h3>
|
|
<p>To verify the pin of the keycard.</p>
|
|
<h4 id="request-wire-format-7">
|
|
Request wire format
|
|
<a class="anchor" href="#request-wire-format-7">#</a>
|
|
</h4>
|
|
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
|
</span></span><span style="display:flex;"><span> <span style="color:#f92672">"pin"</span>: <span style="color:#ae81ff">6</span><span style="color:#960050;background-color:#1e0010">_digit_pin</span>
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span></code></pre></div><h4 id="response-wire-format-7">
|
|
Response wire format
|
|
<a class="anchor" href="#response-wire-format-7">#</a>
|
|
</h4>
|
|
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span><span style="color:#ae81ff">1</span><span style="color:#960050;background-color:#1e0010">_digit_status_code</span>
|
|
</span></span></code></pre></div><p>Status code reference:</p>
|
|
<ul>
|
|
<li>3: PIN is valid</li>
|
|
</ul>
|
|
<!-- raw HTML omitted -->
|
|
<h3 id="9-change-the-pin-change-pin">
|
|
9. Change the pin (<code>/change-pin</code>)
|
|
<a class="anchor" href="#9-change-the-pin-change-pin">#</a>
|
|
</h3>
|
|
<p>To change the pin of the keycard.</p>
|
|
<h4 id="request-wire-format-8">
|
|
Request wire format
|
|
<a class="anchor" href="#request-wire-format-8">#</a>
|
|
</h4>
|
|
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
|
</span></span><span style="display:flex;"><span> <span style="color:#f92672">"new-pin"</span>: <span style="color:#ae81ff">6</span><span style="color:#960050;background-color:#1e0010">_digit_new_pin</span>,
|
|
</span></span><span style="display:flex;"><span> <span style="color:#f92672">"current-pin"</span>: <span style="color:#ae81ff">6</span><span style="color:#960050;background-color:#1e0010">_digit_new_pin</span>,
|
|
</span></span><span style="display:flex;"><span> <span style="color:#f92672">"pairing"</span>: <span style="color:#960050;background-color:#1e0010"><shared_secret>/<pairing_index>/<</span><span style="color:#ae81ff">256</span><span style="color:#960050;background-color:#1e0010">_bit_salt></span>
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span></code></pre></div><h4 id="response-wire-format-8">
|
|
Response wire format
|
|
<a class="anchor" href="#response-wire-format-8">#</a>
|
|
</h4>
|
|
<h5 id="if-the-operation-was-successful">
|
|
If the operation was successful
|
|
<a class="anchor" href="#if-the-operation-was-successful">#</a>
|
|
</h5>
|
|
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span><span style="color:#66d9ef">true</span>
|
|
</span></span></code></pre></div><h5 id="if-the-operation-was-unsuccessful">
|
|
If the operation was unsuccessful
|
|
<a class="anchor" href="#if-the-operation-was-unsuccessful">#</a>
|
|
</h5>
|
|
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span><span style="color:#66d9ef">false</span>
|
|
</span></span></code></pre></div><h3 id="10-unblock-the-keycard-unblock-pin">
|
|
10. Unblock the keycard (<code>/unblock-pin</code>)
|
|
<a class="anchor" href="#10-unblock-the-keycard-unblock-pin">#</a>
|
|
</h3>
|
|
<p>If the Keycard is blocked due to too many incorrect pin attempts, it can be unblocked using the PUK.</p>
|
|
<h4 id="request-wire-format-9">
|
|
Request wire format
|
|
<a class="anchor" href="#request-wire-format-9">#</a>
|
|
</h4>
|
|
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
|
|
</span></span><span style="display:flex;"><span> <span style="color:#f92672">"puk"</span>: <span style="color:#ae81ff">12</span><span style="color:#960050;background-color:#1e0010">_digit_recovery_code</span>,
|
|
</span></span><span style="display:flex;"><span> <span style="color:#f92672">"new-pin"</span>: <span style="color:#ae81ff">6</span><span style="color:#960050;background-color:#1e0010">_digit_new_pin</span>,
|
|
</span></span><span style="display:flex;"><span> <span style="color:#f92672">"pairing"</span>: <span style="color:#960050;background-color:#1e0010"><shared_secret>/<pairing_index>/<</span><span style="color:#ae81ff">256</span><span style="color:#960050;background-color:#1e0010">_bit_salt></span>
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span></code></pre></div><h4 id="response-wire-format-9">
|
|
Response wire format
|
|
<a class="anchor" href="#response-wire-format-9">#</a>
|
|
</h4>
|
|
<h5 id="if-the-operation-was-successful-1">
|
|
If the operation was successful
|
|
<a class="anchor" href="#if-the-operation-was-successful-1">#</a>
|
|
</h5>
|
|
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span><span style="color:#66d9ef">true</span>
|
|
</span></span></code></pre></div><h5 id="if-the-operation-was-unsuccessful-1">
|
|
If the operation was unsuccessful
|
|
<a class="anchor" href="#if-the-operation-was-unsuccessful-1">#</a>
|
|
</h5>
|
|
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span><span style="color:#66d9ef">false</span>
|
|
</span></span></code></pre></div><h2 id="flows">
|
|
Flows
|
|
<a class="anchor" href="#flows">#</a>
|
|
</h2>
|
|
<p>Any application that uses the Status Keycard MAY implement the following flows according to the actions listed above.</p>
|
|
<h3 id="1-a-new-user-wants-to-use-the-keycard-with-the-application">
|
|
1. A new user wants to use the Keycard with the application
|
|
<a class="anchor" href="#1-a-new-user-wants-to-use-the-keycard-with-the-application">#</a>
|
|
</h3>
|
|
<ol>
|
|
<li>The user initializes the Keycard using the <code>/init-keycard</code> endpoint.</li>
|
|
<li>The user pairs the Keycard with the client device using the <code>/pair</code> endpoint.</li>
|
|
<li>The user generates a new set of keys using the <code>/generate-and-load-keys</code> endpoint.</li>
|
|
<li>The user can now use the Keycard to sign transactions using the <code>/sign</code> endpoint.</li>
|
|
</ol>
|
|
<h3 id="2-an-existing-user-wants-to-use-the-keycard-with-the-application">
|
|
2. An existing user wants to use the Keycard with the application
|
|
<a class="anchor" href="#2-an-existing-user-wants-to-use-the-keycard-with-the-application">#</a>
|
|
</h3>
|
|
<ol>
|
|
<li>The user pairs the Keycard with the client device using the <code>/pair</code> endpoint.</li>
|
|
<li>The user can now use the Keycard to sign transactions using the <code>/sign</code> endpoint.</li>
|
|
</ol>
|
|
<h3 id="3-an-existing-user-wants-to-use-the-keycard-with-a-new-client-device">
|
|
3. An existing user wants to use the Keycard with a new client device
|
|
<a class="anchor" href="#3-an-existing-user-wants-to-use-the-keycard-with-a-new-client-device">#</a>
|
|
</h3>
|
|
<ol>
|
|
<li>The user pairs the Keycard with the new client device using the <code>/pair</code> endpoint.</li>
|
|
<li>The user can now use the Keycard to sign transactions using the <code>/sign</code> endpoint.</li>
|
|
</ol>
|
|
<h3 id="4-an-existing-user-wishes-to-verify-the-pin-of-the-keycard">
|
|
4. An existing user wishes to verify the pin of the Keycard
|
|
<a class="anchor" href="#4-an-existing-user-wishes-to-verify-the-pin-of-the-keycard">#</a>
|
|
</h3>
|
|
<ol>
|
|
<li>The user verifies the pin of the Keycard using the <code>/verify-pin</code> endpoint.</li>
|
|
</ol>
|
|
<h3 id="5-an-existing-user-wishes-to-change-the-pin-of-the-keycard">
|
|
5. An existing user wishes to change the pin of the Keycard
|
|
<a class="anchor" href="#5-an-existing-user-wishes-to-change-the-pin-of-the-keycard">#</a>
|
|
</h3>
|
|
<ol>
|
|
<li>The user changes the pin of the Keycard using the <code>/change-pin</code> endpoint.</li>
|
|
</ol>
|
|
<h3 id="6-an-existing-user-wishes-to-unblock-the-keycard">
|
|
6. An existing user wishes to unblock the Keycard
|
|
<a class="anchor" href="#6-an-existing-user-wishes-to-unblock-the-keycard">#</a>
|
|
</h3>
|
|
<ol>
|
|
<li>The user unblocks the Keycard using the <code>/unblock-pin</code> endpoint.</li>
|
|
</ol>
|
|
<h1 id="security-considerations">
|
|
Security Considerations
|
|
<a class="anchor" href="#security-considerations">#</a>
|
|
</h1>
|
|
<p>Inherits the security considerations of <a href="https://keycard.tech/docs/">Status Keycard</a></p>
|
|
<h1 id="privacy-considerations">
|
|
Privacy Considerations
|
|
<a class="anchor" href="#privacy-considerations">#</a>
|
|
</h1>
|
|
<p>Inherits the privacy considerations of <a href="https://keycard.tech/docs/">Status Keycard</a></p>
|
|
<h1 id="copyright">
|
|
Copyright
|
|
<a class="anchor" href="#copyright">#</a>
|
|
</h1>
|
|
<p>Copyright and related rights waived via <a href="https://creativecommons.org/publicdomain/zero/1.0/">CC0</a>.</p>
|
|
<h1 id="references">
|
|
References
|
|
<a class="anchor" href="#references">#</a>
|
|
</h1>
|
|
<ol>
|
|
<li><a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki">BIP-32 specification</a></li>
|
|
<li><a href="https://keycard.tech/docs/">Keycard documentation</a></li>
|
|
<li><a href="https://specs.status.im/draft/16">16/Keycard-Usage</a></li>
|
|
</ol>
|
|
</article>
|
|
|
|
|
|
|
|
<footer class="book-footer">
|
|
|
|
<div class="flex flex-wrap justify-between">
|
|
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</footer>
|
|
|
|
|
|
|
|
<div class="book-comments">
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<label for="menu-control" class="hidden book-menu-overlay"></label>
|
|
</div>
|
|
|
|
|
|
<aside class="book-toc">
|
|
<div class="book-toc-content">
|
|
|
|
|
|
<nav id="TableOfContents">
|
|
<ul>
|
|
<li><a href="#terminology">Terminology</a></li>
|
|
<li><a href="#abstract">Abstract</a></li>
|
|
<li><a href="#motivation">Motivation</a></li>
|
|
<li><a href="#usage">Usage</a>
|
|
<ul>
|
|
<li><a href="#endpoints">Endpoints</a>
|
|
<ul>
|
|
<li><a href="#1-initialize-keycard-init-keycard">1. Initialize Keycard (<code>/init-keycard</code>)</a></li>
|
|
<li><a href="#2-get-application-info-get-application-info">2. Get Application Info (<code>/get-application-info</code>)</a></li>
|
|
<li><a href="#3-pairing-the-keycard-to-the-client-device-pair">3. Pairing the Keycard to the Client device (<code>/pair</code>)</a></li>
|
|
<li><a href="#4-generate-a-new-set-of-keys-generate-and-load-keys">4. Generate a new set of keys (<code>/generate-and-load-keys</code>)</a></li>
|
|
<li><a href="#5-get-a-set-of-generated-keys-get-keys">5. Get a set of generated keys (<code>/get-keys</code>)</a></li>
|
|
<li><a href="#6-sign-a-transaction-sign">6. Sign a transaction (<code>/sign</code>)</a></li>
|
|
<li><a href="#7-export-a-key-export-key">7. Export a key (<code>/export-key</code>)</a></li>
|
|
<li><a href="#8-verify-a-pin-verify-pin">8. Verify a pin (<code>/verify-pin</code>)</a></li>
|
|
<li><a href="#9-change-the-pin-change-pin">9. Change the pin (<code>/change-pin</code>)</a></li>
|
|
<li><a href="#10-unblock-the-keycard-unblock-pin">10. Unblock the keycard (<code>/unblock-pin</code>)</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#flows">Flows</a>
|
|
<ul>
|
|
<li><a href="#1-a-new-user-wants-to-use-the-keycard-with-the-application">1. A new user wants to use the Keycard with the application</a></li>
|
|
<li><a href="#2-an-existing-user-wants-to-use-the-keycard-with-the-application">2. An existing user wants to use the Keycard with the application</a></li>
|
|
<li><a href="#3-an-existing-user-wants-to-use-the-keycard-with-a-new-client-device">3. An existing user wants to use the Keycard with a new client device</a></li>
|
|
<li><a href="#4-an-existing-user-wishes-to-verify-the-pin-of-the-keycard">4. An existing user wishes to verify the pin of the Keycard</a></li>
|
|
<li><a href="#5-an-existing-user-wishes-to-change-the-pin-of-the-keycard">5. An existing user wishes to change the pin of the Keycard</a></li>
|
|
<li><a href="#6-an-existing-user-wishes-to-unblock-the-keycard">6. An existing user wishes to unblock the Keycard</a></li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#security-considerations">Security Considerations</a></li>
|
|
<li><a href="#privacy-considerations">Privacy Considerations</a></li>
|
|
<li><a href="#copyright">Copyright</a></li>
|
|
<li><a href="#references">References</a></li>
|
|
</ul>
|
|
</nav>
|
|
|
|
|
|
|
|
</div>
|
|
</aside>
|
|
|
|
</main>
|
|
|
|
|
|
</body>
|
|
|
|
</html>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|