specs/draft/16.html
status-im-auto 590672e462 Updates
2021-11-16 14:54:10 +00:00

112 lines
41 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html> <html lang="en-US"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=Edge"> <title>16/Keycard Usage for Wallet and Chat Keys - Status Specification</title> <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon"> <link rel="stylesheet" href="/assets/css/just-the-docs-default.css"> <script type="text/javascript" src="/assets/js/vendor/lunr.min.js"></script> <script type="text/javascript" src="/assets/js/just-the-docs.js"></script> <meta name="viewport" content="width=device-width, initial-scale=1"> <!-- Begin Jekyll SEO tag v2.7.1 --> <title>16/Keycard Usage for Wallet and Chat Keys | Status Specification</title> <meta name="generator" content="Jekyll v4.2.1" /> <meta property="og:title" content="16/Keycard Usage for Wallet and Chat Keys" /> <meta property="og:locale" content="en_US" /> <link rel="canonical" href="https://specs.status.im/draft/16" /> <meta property="og:url" content="https://specs.status.im/draft/16" /> <meta property="og:site_name" content="Status Specification" /> <meta name="twitter:card" content="summary" /> <meta property="twitter:title" content="16/Keycard Usage for Wallet and Chat Keys" /> <script type="application/ld+json"> {"@type":"WebPage","url":"https://specs.status.im/draft/16","headline":"16/Keycard Usage for Wallet and Chat Keys","@context":"https://schema.org"}</script> <!-- End Jekyll SEO tag --> </head> <body> <svg xmlns="http://www.w3.org/2000/svg" style="display: none;"> <symbol id="svg-link" viewBox="0 0 24 24"> <title>Link</title> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-link"> <path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path> </svg> </symbol> <symbol id="svg-search" viewBox="0 0 24 24"> <title>Search</title> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-search"> <circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line> </svg> </symbol> <symbol id="svg-menu" viewBox="0 0 24 24"> <title>Menu</title> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-menu"> <line x1="3" y1="12" x2="21" y2="12"></line><line x1="3" y1="6" x2="21" y2="6"></line><line x1="3" y1="18" x2="21" y2="18"></line> </svg> </symbol> <symbol id="svg-arrow-right" viewBox="0 0 24 24"> <title>Expand</title> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-chevron-right"> <polyline points="9 18 15 12 9 6"></polyline> </svg> </symbol> <symbol id="svg-doc" viewBox="0 0 24 24"> <title>Document</title> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-file"> <path d="M13 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z"></path><polyline points="13 2 13 9 20 9"></polyline> </svg> </symbol> </svg> <div class="side-bar"> <div class="site-header"> <a href="https://specs.status.im/" class="site-title lh-tight"> Status Specification </a> <a href="#" id="menu-button" class="site-button"> <svg viewBox="0 0 24 24" class="icon"><use xlink:href="#svg-menu"></use></svg> </a> </div> <nav role="navigation" aria-label="Main" id="site-nav" class="site-nav"> <ul class="nav-list"><li class="nav-list-item"><a href="#" class="nav-list-expander"><svg viewBox="0 0 24 24"><use xlink:href="#svg-arrow-right"></use></svg></a><a href="https://specs.status.im/stable/" class="nav-list-link">Stable specs</a><ul class="nav-list "><li class="nav-list-item "><a href="https://specs.status.im/stable/1" class="nav-list-link">1/CLIENT</a></li><li class="nav-list-item "><a href="https://specs.status.im/stable/10" class="nav-list-link">10/WAKU-USAGE</a></li><li class="nav-list-item "><a href="https://specs.status.im/stable/11" class="nav-list-link">11/WAKU-MAILSERVER</a></li><li class="nav-list-item "><a href="https://specs.status.im/stable/15" class="nav-list-link">15/NOTIFICATIONS</a></li><li class="nav-list-item "><a href="https://specs.status.im/stable/2" class="nav-list-link">2/ACCOUNT</a></li><li class="nav-list-item "><a href="https://specs.status.im/stable/3" class="nav-list-link">3/WHISPER-USAGE</a></li><li class="nav-list-item "><a href="https://specs.status.im/stable/4" class="nav-list-link">4/WHISPER-MAILSERVER</a></li><li class="nav-list-item "><a href="https://specs.status.im/stable/5" class="nav-list-link">5/SECURE-TRANSPORT</a></li><li class="nav-list-item "><a href="https://specs.status.im/stable/6" class="nav-list-link">6/PAYLOADS</a></li><li class="nav-list-item "><a href="https://specs.status.im/stable/8" class="nav-list-link">8/EIPS</a></li><li class="nav-list-item "><a href="https://specs.status.im/stable/9" class="nav-list-link">9/ETHEREUM-USAGE</a></li></ul></li><li class="nav-list-item active"><a href="#" class="nav-list-expander"><svg viewBox="0 0 24 24"><use xlink:href="#svg-arrow-right"></use></svg></a><a href="https://specs.status.im/draft/" class="nav-list-link">Draft specs</a><ul class="nav-list "><li class="nav-list-item "><a href="https://specs.status.im/draft/12" class="nav-list-link">12/IPFS gateway for Sticker Pack</a></li><li class="nav-list-item "><a href="https://specs.status.im/draft/13" class="nav-list-link">13/3RD-PARTY-USAGE</a></li><li class="nav-list-item "><a href="https://specs.status.im/draft/14" class="nav-list-link">14/Dapp browser API usage</a></li><li class="nav-list-item active"><a href="https://specs.status.im/draft/16" class="nav-list-link active">16/Keycard Usage for Wallet and Chat Keys</a></li><li class="nav-list-item "><a href="https://specs.status.im/draft/3" class="nav-list-link">3/WHISPER-USAGE</a></li><li class="nav-list-item "><a href="https://specs.status.im/draft/6" class="nav-list-link">6/PAYLOADS</a></li><li class="nav-list-item "><a href="https://specs.status.im/draft/7" class="nav-list-link">7/GROUP-CHAT</a></li></ul></li><li class="nav-list-item"><a href="#" class="nav-list-expander"><svg viewBox="0 0 24 24"><use xlink:href="#svg-arrow-right"></use></svg></a><a href="https://specs.status.im/raw/" class="nav-list-link">Raw specs</a><ul class="nav-list "><li class="nav-list-item "><a href="https://specs.status.im/raw/16" class="nav-list-link">16/PUSH-NOTIFICATION-SERVER</a></li></ul></li><li class="nav-list-item"><a href="https://specs.status.im/development" class="nav-list-link">DEVELOPMENT</a></li><li class="nav-list-item"><a href="https://specs.status.im/style-guideline" class="nav-list-link">STYLE-GUIDELINE</a></li></ul> </nav> <footer class="site-footer"> This site uses <a href="https://github.com/pmarsceill/just-the-docs">Just the Docs</a>, a documentation theme for Jekyll. </footer> </div> <div class="main" id="top"> <div id="main-header" class="main-header"> <div class="search"> <div class="search-input-wrap"> <input type="text" id="search-input" class="search-input" tabindex="0" placeholder="Search Status Specification" aria-label="Search Status Specification" autocomplete="off"> <label for="search-input" class="search-label"><svg viewBox="0 0 24 24" class="search-icon"><use xlink:href="#svg-search"></use></svg></label> </div> <div id="search-results" class="search-results"></div> </div> </div> <div id="main-content-wrap" class="main-content-wrap"> <nav aria-label="Breadcrumb" class="breadcrumb-nav"> <ol class="breadcrumb-nav-list"> <li class="breadcrumb-nav-list-item"><a href="https://specs.status.im/draft/">Draft specs</a></li> <li class="breadcrumb-nav-list-item"><span>16/Keycard Usage for Wallet and Chat Keys</span></li> </ol> </nav> <div id="main-content" class="main-content" role="main"> <h2 id="table-of-contents"> <a href="#table-of-contents" class="anchor-heading" aria-labelledby="table-of-contents"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Table of Contents </h2> <ol> <li><a href="#abstract">Abstract</a></li> <li><a href="#definitions">Definitions</a></li> <li><a href="#Multiaccount-creationrestoring">Multiaccount creation</a></li> <li><a href="#Multiaccount-restoring-via-pairing">Multiaccount restoring via pairing</a></li> <li><a href="#Multiaccount-unlocking">Multiaccount unlocking</a></li> <li><a href="#Transaction-signing">Transaction signing</a></li> <li><a href="#Account-derivation">Account derivation</a></li> <li><a href="#Reset-pin">Reset pin</a></li> <li><a href="#Unblock-pin">Unblock pin</a></li> <li><a href="#Status-go-calls">Status go calls</a></li> <li><a href="#Where-are-the-keys-stored">Where are the keys stored?</a></li> <li><a href="#Copyright">Copyright</a></li> </ol> <h2 id="abstract"> <a href="#abstract" class="anchor-heading" aria-labelledby="abstract"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Abstract </h2> <p>In this specification, we describe how Status communicates with Keycard to create, store and use multiaccount.</p> <h2 id="definitions"> <a href="#definitions" class="anchor-heading" aria-labelledby="definitions"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Definitions </h2> <div class="table-wrapper"><table> <thead> <tr> <th>Term</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td>Keycard Hardwallet</td> <td><a href="https://keycard.tech/docs/">https://keycard.tech/docs/</a></td> </tr> <tr> <td> </td> <td> </td> </tr> </tbody> </table></div> <h2 id="multiaccount-creationrestoring"> <a href="#multiaccount-creationrestoring" class="anchor-heading" aria-labelledby="multiaccount-creationrestoring"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Multiaccount creation/restoring </h2> <h3 id="creation-and-restoring-via-mnemonic"> <a href="#creation-and-restoring-via-mnemonic" class="anchor-heading" aria-labelledby="creation-and-restoring-via-mnemonic"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Creation and restoring via mnemonic </h3> <ol> <li><code class="language-plaintext highlighter-rouge">status-im.hardwallet.card/get-application-info</code> request: <code class="language-plaintext highlighter-rouge">nil</code> response: <code class="language-plaintext highlighter-rouge">{"initialized?" false}</code></li> <li><code class="language-plaintext highlighter-rouge">status-im.hardwallet.card/init-card</code> request: <code class="language-plaintext highlighter-rouge">{:pin 123123}</code> response: <div class="language-clojure highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="s">"password"</span><span class="w"> </span><span class="s">"nEJXqf6VWbqeC5oN"</span><span class="n">,</span><span class="w">
</span><span class="s">"puk"</span><span class="w"> </span><span class="s">"411810112887"</span><span class="n">,</span><span class="w">
</span><span class="s">"pin"</span><span class="w"> </span><span class="s">"123123"</span><span class="p">}</span><span class="w">
</span></code></pre></div> </div> </li> <li><code class="language-plaintext highlighter-rouge">status-im.hardwallet.card/get-application-info</code> request: <code class="language-plaintext highlighter-rouge">nil</code> response: <div class="language-clojure highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="w"> </span><span class="p">{</span><span class="s">"free-pairing-slots"</span><span class="w"> </span><span class="mi">5</span><span class="n">,</span><span class="w">
</span><span class="s">"app-version"</span><span class="w"> </span><span class="s">"2.2"</span><span class="n">,</span><span class="w">
</span><span class="s">"secure-channel-pub-key"</span><span class="w"> </span><span class="s">"04e70d7af7d91b8cd23adbefdfc242c096adee6c1b5ad27a4013a8f926864c1a4f816b338238dc4a04226ab42f23672585c6dca03627885530643f1656ee69b025"</span><span class="n">,</span><span class="w">
</span><span class="s">"key-uid"</span><span class="w"> </span><span class="s">""</span><span class="n">,</span><span class="w">
</span><span class="s">"instance-uid"</span><span class="w"> </span><span class="s">"9f149d438988a7af5e1a186f650c9328"</span><span class="n">,</span><span class="w">
</span><span class="s">"paired?"</span><span class="w"> </span><span class="n">false,</span><span class="w">
</span><span class="s">"has-master-key?"</span><span class="w"> </span><span class="n">false,</span><span class="w">
</span><span class="s">"initialized?"</span><span class="w"> </span><span class="n">true</span><span class="p">}</span><span class="w">
</span></code></pre></div> </div> </li> <li> <p><code class="language-plaintext highlighter-rouge">status-im.hardwallet.card/pair</code> params: <code class="language-plaintext highlighter-rouge">{:password "nEJXqf6VWbqeC5oN"}</code> response: <code class="language-plaintext highlighter-rouge">AAVefVX0kPGsxnvQV5OXRbRTLGI3k8/S27rpsq/lZrVR</code> (<code class="language-plaintext highlighter-rouge">pairing</code>)</p> </li> <li><code class="language-plaintext highlighter-rouge">status-im.hardwallet.card/generate-and-load-keys</code> <div class="language-clojure highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="w"> </span><span class="p">{</span><span class="no">:mnemonic</span><span class="w"> </span><span class="s">"lift mansion moment version card type uncle sunny lock gather nerve math"</span><span class="n">,</span><span class="w">
</span><span class="no">:pairing</span><span class="w"> </span><span class="s">"AAVefVX0kPGsxnvQV5OXRbRTLGI3k8/S27rpsq/lZrVR"</span><span class="n">,</span><span class="w">
</span><span class="no">:pin</span><span class="w"> </span><span class="s">"123123"</span><span class="p">}</span><span class="w">
</span></code></pre></div> </div> <p>response:</p> <div class="language-clojure highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="w"> </span><span class="p">{</span><span class="s">"whisper-address"</span><span class="w"> </span><span class="s">"1f29a1a60c8a12f80c397a91c6ae0323f420e609"</span><span class="n">,</span><span class="w">
</span><span class="s">"whisper-private-key"</span><span class="w"> </span><span class="s">"123123123123123"</span><span class="n">,</span><span class="w">
</span><span class="s">"wallet-root-public-key"</span><span class="w"> </span><span class="s">"04eb9d01990a106a65a6dfaa48300f72aecfeabe502d9f4f7aeaccb146dc2f16e2dec81dcec0a1a52c1df4450f441a48c210e1a73777c0161030378df22e4ae015"</span><span class="n">,</span><span class="w">
</span><span class="s">"encryption-public-key"</span><span class="w"> </span><span class="s">"045ee42f012d72be74b31a28ce320df617e0cd5b9b343fad34fcd61e2f5dfa89ab23d880473ba4e95401a191764c7f872b7af92ea0d8c39462147df6f3f05c2a11"</span><span class="n">,</span><span class="w">
</span><span class="s">"wallet-root-address"</span><span class="w"> </span><span class="s">"132dd67ff47cc1c376879c474fd2afd0f1eee6de"</span><span class="n">,</span><span class="w">
</span><span class="s">"whisper-public-key"</span><span class="w"> </span><span class="s">"0450ad84bb95f32c64f4e5027cc11d1b363a0566a0cfc475c5653e8af9964c5c9b0661129b75e6e1bc6e96ba2443238e53e7f49f2c5f2d16fcf04aca4826765d46"</span><span class="n">,</span><span class="w">
</span><span class="s">"address"</span><span class="w"> </span><span class="s">"bf93eb43fea2ce94bf3a6463c16680b56aa4a08a"</span><span class="n">,</span><span class="w">
</span><span class="s">"wallet-address"</span><span class="w"> </span><span class="s">"7eee1060d8e4722d36c99f30ff8291caa3cfc40c"</span><span class="n">,</span><span class="w">
</span><span class="s">"key-uid"</span><span class="w"> </span><span class="s">"472d8436ccedb64bcbd897bed5895ec3458b306352e1bcee377df87db32ef2c2"</span><span class="n">,</span><span class="w">
</span><span class="s">"wallet-public-key"</span><span class="w"> </span><span class="s">"0495ab02978ea1f8b059140e0be5a87aad9b64bb7d9706735c47dda6e182fd5ca41744ca37583b9a10c316b01d4321d6c85760c61301874089acab041037246294"</span><span class="n">,</span><span class="w">
</span><span class="s">"public-key"</span><span class="w"> </span><span class="s">"0465d452d12171711f32bb931f9ea26fe1b88fe2511a7909a042b914fde10a99719136365d506e2d1694fc14627f9d557da33865efc6001da3942fc1d4d2469ca1"</span><span class="n">,</span><span class="w">
</span><span class="s">"instance-uid"</span><span class="w"> </span><span class="s">"9f149d438988a7af5e1a186f650c9328"</span><span class="p">}</span><span class="w">
</span></code></pre></div> </div> </li> </ol> <h3 id="multiaccount-restoring-via-pairing"> <a href="#multiaccount-restoring-via-pairing" class="anchor-heading" aria-labelledby="multiaccount-restoring-via-pairing"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Multiaccount restoring via pairing </h3> <p>This flow is required in case if a user want to pair a card with an existing multiaccount on it.</p> <ol> <li><code class="language-plaintext highlighter-rouge">status-im.hardwallet.card/get-application-info</code> request: <code class="language-plaintext highlighter-rouge">nil</code> response: <div class="language-clojure highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="w"> </span><span class="p">{</span><span class="s">"free-pairing-slots"</span><span class="w"> </span><span class="mi">4</span><span class="n">,</span><span class="w">
</span><span class="s">"app-version"</span><span class="w"> </span><span class="s">"2.2"</span><span class="n">,</span><span class="w">
</span><span class="s">"secure-channel-pub-key"</span><span class="w"> </span><span class="s">"04e70d7af7d91b8cd23adbefdfc242c096adee6c1b5ad27a4013a8f926864c1a4f816b338238dc4a04226ab42f23672585c6dca03627885530643f1656ee69b025"</span><span class="n">,</span><span class="w">
</span><span class="s">"key-uid"</span><span class="w"> </span><span class="s">""</span><span class="n">,</span><span class="w">
</span><span class="s">"instance-uid"</span><span class="w"> </span><span class="s">"9f149d438988a7af5e1a186f650c9328"</span><span class="n">,</span><span class="w">
</span><span class="s">"paired?"</span><span class="w"> </span><span class="n">false,</span><span class="w">
</span><span class="s">"has-master-key?"</span><span class="w"> </span><span class="n">false,</span><span class="w">
</span><span class="s">"initialized?"</span><span class="w"> </span><span class="n">true</span><span class="p">}</span><span class="w">
</span></code></pre></div> </div> </li> <li> <p><code class="language-plaintext highlighter-rouge">status-im.hardwallet.card/pair</code> params: <code class="language-plaintext highlighter-rouge">{:password "nEJXqf6VWbqeC5oN"}</code> response: <code class="language-plaintext highlighter-rouge">AAVefVX0kPGsxnvQV5OXRbRTLGI3k8/S27rpsq/lZrVR</code> (<code class="language-plaintext highlighter-rouge">pairing</code>)</p> </li> <li><code class="language-plaintext highlighter-rouge">status-im.hardwallet.card/generate-and-load-keys</code> <div class="language-clojure highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="w"> </span><span class="p">{</span><span class="no">:mnemonic</span><span class="w"> </span><span class="s">"lift mansion moment version card type uncle sunny lock gather nerve math"</span><span class="n">,</span><span class="w">
</span><span class="no">:pairing</span><span class="w"> </span><span class="s">"AAVefVX0kPGsxnvQV5OXRbRTLGI3k8/S27rpsq/lZrVR"</span><span class="n">,</span><span class="w">
</span><span class="no">:pin</span><span class="w"> </span><span class="s">"123123"</span><span class="p">}</span><span class="w">
</span></code></pre></div> </div> <p>response:</p> <div class="language-clojure highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="w"> </span><span class="p">{</span><span class="s">"whisper-address"</span><span class="w"> </span><span class="s">"1f29a1a60c8a12f80c397a91c6ae0323f420e609"</span><span class="n">,</span><span class="w">
</span><span class="s">"whisper-private-key"</span><span class="w"> </span><span class="s">"123123123123123123123"</span><span class="n">,</span><span class="w">
</span><span class="s">"wallet-root-public-key"</span><span class="w"> </span><span class="s">"04eb9d01990a106a65a6dfaa48300f72aecfeabe502d9f4f7aeaccb146dc2f16e2dec81dcec0a1a52c1df4450f441a48c210e1a73777c0161030378df22e4ae015"</span><span class="n">,</span><span class="w">
</span><span class="s">"encryption-public-key"</span><span class="w"> </span><span class="s">"045ee42f012d72be74b31a28ce320df617e0cd5b9b343fad34fcd61e2f5dfa89ab23d880473ba4e95401a191764c7f872b7af92ea0d8c39462147df6f3f05c2a11"</span><span class="n">,</span><span class="w">
</span><span class="s">"wallet-root-address"</span><span class="w"> </span><span class="s">"132dd67ff47cc1c376879c474fd2afd0f1eee6de"</span><span class="n">,</span><span class="w">
</span><span class="s">"whisper-public-key"</span><span class="w"> </span><span class="s">"0450ad84bb95f32c64f4e5027cc11d1b363a0566a0cfc475c5653e8af9964c5c9b0661129b75e6e1bc6e96ba2443238e53e7f49f2c5f2d16fcf04aca4826765d46"</span><span class="n">,</span><span class="w">
</span><span class="s">"address"</span><span class="w"> </span><span class="s">"bf93eb43fea2ce94bf3a6463c16680b56aa4a08a"</span><span class="n">,</span><span class="w">
</span><span class="s">"wallet-address"</span><span class="w"> </span><span class="s">"7eee1060d8e4722d36c99f30ff8291caa3cfc40c"</span><span class="n">,</span><span class="w">
</span><span class="s">"key-uid"</span><span class="w"> </span><span class="s">"472d8436ccedb64bcbd897bed5895ec3458b306352e1bcee377df87db32ef2c2"</span><span class="n">,</span><span class="w">
</span><span class="s">"wallet-public-key"</span><span class="w"> </span><span class="s">"0495ab02978ea1f8b059140e0be5a87aad9b64bb7d9706735c47dda6e182fd5ca41744ca37583b9a10c316b01d4321d6c85760c61301874089acab041037246294"</span><span class="n">,</span><span class="w">
</span><span class="s">"public-key"</span><span class="w"> </span><span class="s">"0465d452d12171711f32bb931f9ea26fe1b88fe2511a7909a042b914fde10a99719136365d506e2d1694fc14627f9d557da33865efc6001da3942fc1d4d2469ca1"</span><span class="n">,</span><span class="w">
</span><span class="s">"instance-uid"</span><span class="w"> </span><span class="s">"9f149d438988a7af5e1a186f650c9328"</span><span class="p">}</span><span class="w">
</span></code></pre></div> </div> </li> </ol> <h2 id="multiaccount-unlocking"> <a href="#multiaccount-unlocking" class="anchor-heading" aria-labelledby="multiaccount-unlocking"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Multiaccount unlocking </h2> <ol> <li><code class="language-plaintext highlighter-rouge">status-im.hardwallet.card/get-application-info</code> params: <div class="language-clojure highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="w"> </span><span class="p">{</span><span class="no">:pairing</span><span class="w"> </span><span class="n">nil,</span><span class="w"> </span><span class="no">:on-success</span><span class="w"> </span><span class="n">nil</span><span class="p">}</span><span class="w">
</span></code></pre></div> </div> <p>response:</p> <div class="language-clojure highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="w"> </span><span class="p">{</span><span class="s">"free-pairing-slots"</span><span class="w"> </span><span class="mi">4</span><span class="n">,</span><span class="w">
</span><span class="s">"app-version"</span><span class="w"> </span><span class="s">"2.2"</span><span class="n">,</span><span class="w">
</span><span class="s">"secure-channel-pub-key"</span><span class="w"> </span><span class="s">"04b079ac513d5e0ebbe9becbae1618503419f5cb59edddc7d7bb09ce0db069a8e6dec1fb40c6b8e5454f7e1fcd0bb4a0b9750256afb4e4390e169109f3ea3ba91d"</span><span class="n">,</span><span class="w">
</span><span class="s">"key-uid"</span><span class="w"> </span><span class="s">"a5424fb033f5cc66dce9cbbe464426b6feff70ca40aa952c56247aaeaf4764a9"</span><span class="n">,</span><span class="w">
</span><span class="s">"instance-uid"</span><span class="w"> </span><span class="s">"2268254e3ed7898839abe0b40e1b4200"</span><span class="n">,</span><span class="w">
</span><span class="s">"paired?"</span><span class="w"> </span><span class="n">false,</span><span class="w">
</span><span class="s">"has-master-key?"</span><span class="w"> </span><span class="n">true,</span><span class="w">
</span><span class="s">"initialized?"</span><span class="w"> </span><span class="n">true</span><span class="p">}</span><span class="w">
</span></code></pre></div> </div> </li> <li><code class="language-plaintext highlighter-rouge">status-im.hardwallet.card/get-keys</code> params: <div class="language-clojure highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="w"> </span><span class="p">{</span><span class="no">:pairing</span><span class="w"> </span><span class="s">"ACEWbvUlordYWOE6M1Narn/AXICRltjyuKIAn4kkPXQG"</span><span class="n">,</span><span class="w">
</span><span class="no">:pin</span><span class="w"> </span><span class="s">"123123"</span><span class="p">}</span><span class="w">
</span></code></pre></div> </div> <p>response:</p> <div class="language-clojure highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="w"> </span><span class="p">{</span><span class="s">"whisper-address"</span><span class="w"> </span><span class="s">"ec83f7354ca112203d2ce3e0b77b47e6e33258aa"</span><span class="n">,</span><span class="w">
</span><span class="s">"whisper-private-key"</span><span class="w"> </span><span class="s">"123123123123123123123123"</span><span class="n">,</span><span class="w">
</span><span class="s">"wallet-root-public-key"</span><span class="w"> </span><span class="s">"0424a93fe62a271ad230eb2957bf221b4644670589f5c0d69bd11f3371034674bf7875495816095006c2c0d5f834d628b87691a8bbe3bcc2225269020febd65a19"</span><span class="n">,</span><span class="w">
</span><span class="s">"encryption-public-key"</span><span class="w"> </span><span class="s">"0437eef85e669f800570f444e64baa2d0580e61cf60c0e9236b4108455ec1943f385043f759fcb5bd8348e32d6d6550a844cf24e57f68e9397a0f7c824a8caee2d"</span><span class="n">,</span><span class="w">
</span><span class="s">"wallet-root-address"</span><span class="w"> </span><span class="s">"6ff915f9f31f365511b1b8c1e40ce7f266caa5ce"</span><span class="n">,</span><span class="w">
</span><span class="s">"whisper-public-key"</span><span class="w"> </span><span class="s">"04b195df4336c596cca1b89555dc55dd6bb4c5c4491f352f6fdfae140a2349213423042023410f73a862aa188f6faa05c80b0344a1e39c253756cb30d8753f9f8324"</span><span class="n">,</span><span class="w">
</span><span class="s">"address"</span><span class="w"> </span><span class="s">"73509a1bb5f3b74d0dba143705cd9b4b55b8bba1"</span><span class="n">,</span><span class="w">
</span><span class="s">"wallet-address"</span><span class="w"> </span><span class="s">"2f0cc0e0859e7a05f319d902624649c7e0f48955"</span><span class="n">,</span><span class="w">
</span><span class="s">"key-uid"</span><span class="w"> </span><span class="s">"a5424fb033f5cc66dce9cbbe464426b6feff70ca40aa952c56247aaeaf4764a9"</span><span class="n">,</span><span class="w">
</span><span class="s">"wallet-public-key"</span><span class="w"> </span><span class="s">"04d6fab73772933215872c239787b2281f3b10907d099d04b88c861e713bd2b95883e0b1710a266830da29e76bbf6b87ed034ab139e36cc235a1b2a5b5ddfd4e91"</span><span class="n">,</span><span class="w">
</span><span class="s">"public-key"</span><span class="w"> </span><span class="s">"0437eef85e669f800570f444e64baa2d0580e61cf60c0e9236b4108455ec1943f385043f759fcb5bd8348e32d6d6550a844cf24e57f68e9397a0f7c824a8caee2d"</span><span class="n">,</span><span class="w">
</span><span class="s">"instance-uid"</span><span class="w"> </span><span class="s">"2268254e3ed7898839abe0b40e1b4200"</span><span class="p">}</span><span class="w">
</span></code></pre></div> </div> </li> <li><code class="language-plaintext highlighter-rouge">status-im.hardwallet.card/get-application-info</code> params: <div class="language-clojure highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="w"> </span><span class="p">{</span><span class="no">:pairing</span><span class="w"> </span><span class="s">"ACEWbvUlordYWOE6M1Narn/AXICRltjyuKIAn4kkPXQG"</span><span class="p">}</span><span class="w">
</span></code></pre></div> </div> <p>response:</p> <div class="language-clojure highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="w"> </span><span class="p">{</span><span class="s">"paired?"</span><span class="w"> </span><span class="n">true,</span><span class="w">
</span><span class="s">"has-master-key?"</span><span class="w"> </span><span class="n">true,</span><span class="w">
</span><span class="s">"app-version"</span><span class="w"> </span><span class="s">"2.2"</span><span class="n">,</span><span class="w">
</span><span class="s">"free-pairing-slots"</span><span class="w"> </span><span class="mi">4</span><span class="n">,</span><span class="w">
</span><span class="s">"pin-retry-counter"</span><span class="w"> </span><span class="mi">3</span><span class="n">,</span><span class="w">
</span><span class="s">"puk-retry-counter"</span><span class="w"> </span><span class="mi">5</span><span class="n">,</span><span class="w">
</span><span class="s">"initialized?"</span><span class="w"> </span><span class="n">true,</span><span class="w">
</span><span class="s">"secure-channel-pub-key"</span><span class="w"> </span><span class="s">"04b079ac513d5e0ebbe9becbae1618503419f5cb59edddc7d7bb09ce0db069a8e6dec1fb40c6b8e5454f7e1fcd0bb4a0b9750256afb4e4390e169109f3ea3ba91d"</span><span class="n">,</span><span class="w">
</span><span class="s">"key-uid"</span><span class="w"> </span><span class="s">"a5424fb033f5cc66dce9cbbe464426b6feff70ca40aa952c56247aaeaf4764a9"</span><span class="n">,</span><span class="w">
</span><span class="s">"instance-uid"</span><span class="w"> </span><span class="s">"2268254e3ed7898839abe0b40e1b4200"</span><span class="p">}</span><span class="w">
</span></code></pre></div> </div> </li> </ol> <h2 id="transaction-signing"> <a href="#transaction-signing" class="anchor-heading" aria-labelledby="transaction-signing"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Transaction signing </h2> <ol> <li><code class="language-plaintext highlighter-rouge">status-im.hardwallet.card/get-application-info</code> params: <div class="language-clojure highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="no">:pairing</span><span class="w"> </span><span class="s">"ALecvegKyOW4szknl01yYWx60GLDK5gDhxMgJECRZ+7h"</span><span class="n">,</span><span class="w">
</span><span class="no">:on-success</span><span class="w"> </span><span class="no">:hardwallet/sign</span><span class="p">}</span><span class="w">
</span></code></pre></div> </div> <p>response:</p> <div class="language-clojure highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="w"> </span><span class="p">{</span><span class="s">"paired?"</span><span class="w"> </span><span class="n">true,</span><span class="w">
</span><span class="s">"has-master-key?"</span><span class="w"> </span><span class="n">true,</span><span class="w">
</span><span class="s">"app-version"</span><span class="w"> </span><span class="s">"2.2"</span><span class="n">,</span><span class="w">
</span><span class="s">"free-pairing-slots"</span><span class="w"> </span><span class="mi">4</span><span class="n">,</span><span class="w">
</span><span class="s">"pin-retry-counter"</span><span class="w"> </span><span class="mi">3</span><span class="n">,</span><span class="w">
</span><span class="s">"puk-retry-counter"</span><span class="w"> </span><span class="mi">5</span><span class="n">,</span><span class="w">
</span><span class="s">"initialized?"</span><span class="w"> </span><span class="n">true,</span><span class="w">
</span><span class="s">"secure-channel-pub-key"</span><span class="w"> </span><span class="s">"0476d11f2ccdad4e7779b95a1ce063d7280cb6c09afe2c0e48ca0c64ab9cf2b3c901d12029d6c266bfbe227c73a802561302b2330ac07a3270fc638ad258fced4a"</span><span class="n">,</span><span class="w">
</span><span class="s">"key-uid"</span><span class="w"> </span><span class="s">"d5c8cde8085e7a3fcf95aafbcbd7b3cfe32f61b85c2a8f662f60e76bdc100718"</span><span class="n">,</span><span class="w">
</span><span class="s">"instance-uid"</span><span class="w"> </span><span class="s">"e20e27bfee115b431e6e81b8e9dcf04c"</span><span class="p">}</span><span class="w">
</span></code></pre></div> </div> </li> <li><code class="language-plaintext highlighter-rouge">status-im.hardwallet.card/sign</code> params: <div class="language-clojure highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="no">:hash</span><span class="w"> </span><span class="s">"92fc7ef54c3e0c42de256b93fbf2c49dc6948ee089406e204dec943b7a0142a9"</span><span class="n">,</span><span class="w">
</span><span class="no">:pairing</span><span class="w"> </span><span class="s">"ALecvegKyOW4szknl01yYWx60GLDK5gDhxMgJECRZ+7h"</span><span class="n">,</span><span class="w">
</span><span class="no">:pin</span><span class="w"> </span><span class="s">"123123"</span><span class="n">,</span><span class="w">
</span><span class="no">:path</span><span class="w"> </span><span class="s">"m/44'/60'/0'/0/0"</span><span class="p">}</span><span class="w">
</span></code></pre></div> </div> <p>response: <code class="language-plaintext highlighter-rouge">5d2ca075593cf50aa34007a0a1df7df14a369534450fce4a2ae8d023a9d9c0e216b5e5e3f64f81bee91613318d01601573fdb15c11887a3b8371e3291e894de600</code></p> </li> </ol> <h2 id="account-derivation"> <a href="#account-derivation" class="anchor-heading" aria-labelledby="account-derivation"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Account derivation </h2> <ol> <li><code class="language-plaintext highlighter-rouge">status-im.hardwallet.card/verify-pin</code> params: <div class="language-clojure highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="w"> </span><span class="p">{</span><span class="no">:pin</span><span class="w"> </span><span class="s">"123123"</span><span class="n">,</span><span class="w">
</span><span class="no">:pairing</span><span class="w"> </span><span class="s">"ALecvegKyOW4szknl01yYWx60GLDK5gDhxMgJECRZ+7h"</span><span class="p">}</span><span class="w">
</span></code></pre></div> </div> <p>response: <code class="language-plaintext highlighter-rouge">3</code></p> </li> <li><code class="language-plaintext highlighter-rouge">status-im.hardwallet.card/export-key</code> params: <div class="language-clojure highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="w"> </span><span class="p">{</span><span class="no">:pin</span><span class="w"> </span><span class="s">"123123"</span><span class="n">,</span><span class="w">
</span><span class="no">:pairing</span><span class="w"> </span><span class="s">"ALecvegKyOW4szknl01yYWx60GLDK5gDhxMgJECRZ+7h"</span><span class="n">,</span><span class="w">
</span><span class="no">:path</span><span class="w"> </span><span class="s">"m/44'/60'/0'/0/1"</span><span class="p">}</span><span class="w">
</span></code></pre></div> </div> <p>response: <code class="language-plaintext highlighter-rouge">046d1bcd2310a5e0094bc515b0ec995a8cb59e23d564094443af10011b6c00bdde44d160cdd32b4b6341ddd7dc83a4f31fdf60ec2276455649ccd7a22fa4ea01d8</code> (accounts <code class="language-plaintext highlighter-rouge">public-key</code>)</p> </li> </ol> <h2 id="reset-pin"> <a href="#reset-pin" class="anchor-heading" aria-labelledby="reset-pin"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Reset pin </h2> <ol> <li><code class="language-plaintext highlighter-rouge">status-im.hardwallet.card/change-pin</code> params: <div class="language-clojure highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="no">:new-pin</span><span class="w"> </span><span class="s">"111111"</span><span class="n">,</span><span class="w">
</span><span class="no">:current-pin</span><span class="w"> </span><span class="s">"222222"</span><span class="n">,</span><span class="w">
</span><span class="no">:pairing</span><span class="w"> </span><span class="s">"AA0sKxPkN+jMHXZZeI8Rgz04AaY5Fg0CzVbm9189Khob"</span><span class="p">}</span><span class="w">
</span></code></pre></div> </div> <p>response: <code class="language-plaintext highlighter-rouge">true</code></p> </li> </ol> <h2 id="unblock-pin"> <a href="#unblock-pin" class="anchor-heading" aria-labelledby="unblock-pin"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Unblock pin </h2> <p>If user enters a wrong pin three times in a row a card gets blocked. The user can use puk code then to unblock the card and set a new pin.</p> <ol> <li><code class="language-plaintext highlighter-rouge">status-im.hardwallet.card/unblock-pin</code> params: <div class="language-clojure highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="no">:puk</span><span class="w"> </span><span class="s">"120702722103"</span><span class="n">,</span><span class="w">
</span><span class="no">:new-pin</span><span class="w"> </span><span class="s">"111111"</span><span class="n">,</span><span class="w">
</span><span class="no">:pairing</span><span class="w"> </span><span class="s">"AIoQl0OtCL0/uSN7Ct1/FHRMEk/eM2Lrhn0bw7f8sgOe"</span><span class="p">}</span><span class="w">
</span></code></pre></div> </div> <p>response <code class="language-plaintext highlighter-rouge">true</code></p> </li> </ol> <h2 id="status-go-calls"> <a href="#status-go-calls" class="anchor-heading" aria-labelledby="status-go-calls"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Status go calls </h2> <p>In order to use the card in the app we need to use some parts of status-go API, specifically:</p> <ol> <li><a href="https://github.com/status-im/status-go/blob/b33ad8147d23a932064f241e575511d70a601dcc/mobile/status.go#L337"><code class="language-plaintext highlighter-rouge">SaveAccountAndLoginWithKeycard</code></a> after multiaccount creation/restoring to store multiaccount and login into it</li> <li><a href="https://github.com/status-im/status-go/blob/b33ad8147d23a932064f241e575511d70a601dcc/mobile/status.go#L373"><code class="language-plaintext highlighter-rouge">LoginWithKeycard</code></a> to log into already existing account</li> <li><a href="https://github.com/status-im/status-go/blob/b33ad8147d23a932064f241e575511d70a601dcc/mobile/status.go#L492"><code class="language-plaintext highlighter-rouge">HashTransaction</code></a> and <a href="https://github.com/status-im/status-go/blob/b33ad8147d23a932064f241e575511d70a601dcc/mobile/status.go#L520"><code class="language-plaintext highlighter-rouge">HashMessage</code></a> for hashing transaction/message before signing</li> <li><a href="https://github.com/status-im/status-go/blob/b33ad8147d23a932064f241e575511d70a601dcc/mobile/status.go#L471"><code class="language-plaintext highlighter-rouge">SendTransactionWithSignature</code></a> to send transaction</li> </ol> <h2 id="where-are-the-keys-stored"> <a href="#where-are-the-keys-stored" class="anchor-heading" aria-labelledby="where-are-the-keys-stored"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Where are the keys stored? </h2> <ol> <li>When we create a regular multiaccount all its keys are stored on device and are encrypted via key which is derived from users password. In case if account was created using keycard all keys are stored on the card and are retrieved from it during signing into multiaccount.</li> <li>When we create a regular multiaccount we also create a separate database for it and this database is encrypted using key which is derived from users password. For a keycard account we use <code class="language-plaintext highlighter-rouge">encryption-public-key</code> (returned by <code class="language-plaintext highlighter-rouge">status-im.hardwallet.card/get-keys</code>/<code class="language-plaintext highlighter-rouge">status-im.hardwallet.card/generate-and-load-keys</code>) as a password.</li> </ol> <h2 id="copyright"> <a href="#copyright" class="anchor-heading" aria-labelledby="copyright"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Copyright </h2> <p>Copyright and related rights waived via <a href="https://creativecommons.org/publicdomain/zero/1.0/">CC0</a>.</p> </div> </div> <div class="search-overlay"></div> </div> </body> </html>