Page MenuHomePhabricator

[ecash-lib] Add `payment` with `asn1` and `x509`
Needs ReviewPublic

Authored by tobias_ruck on Sun, Mar 2, 22:19.

Details

Reviewers
bytesofman
Group Reviewers
Restricted Project
Summary

Allows parsing X509 certificates. This is needed for verifying BIP70 PaymentRequests.

This is based on:

Names for the OID variables have been taken from https://oid-base.com/ (screaming snake case-ified). This is the reason why the OID constant of the secp256k1 curve is called OID_ANSIP256K1, because that's the official name.

Depends on D17733.

Test Plan

npm test

Also, consider creating your own certificate and verify its signature using Ecc:

  1. openssl ecparam -genkey -out key.pem -name secp256k1
  2. openssl req -x509 -new -key key.pem -out cert.pem -sha256 -days 36500 -nodes -subj "/C=CA/ST=British Columbia/L=Vancouver/O=eCash Palace/OU=Software/CN=example.e.cash/emailAddress=example@e.cash"
  3. Replace the contents of the CERT variable with the inner content of cert.pem (without BEGIN CERTIFICATE)
  4. npm test -- -g 'asn1.readCert', and update some of the variables

Event Timeline

Tail of the build log:

To address all issues, run:
  npm audit fix

Run `npm audit` for details.

> ecashaddrjs@2.0.0 build
> tsc

/work/modules/chronik-client /work/abc-ci-builds/ecash-lib-tests

> chronik-client@3.0.0 prepublish
> npm run build


> chronik-client@3.0.0 build
> tsc


added 265 packages, and audited 267 packages in 5s

48 packages are looking for funding
  run `npm fund` for details

6 vulnerabilities (4 moderate, 2 high)

To address issues that do not require attention, run:
  npm audit fix

To address all issues (including breaking changes), run:
  npm audit fix --force

Run `npm audit` for details.

> chronik-client@3.0.0 build
> tsc

/work/modules/ecash-lib /work/abc-ci-builds/ecash-lib-tests

added 365 packages, and audited 369 packages in 2s

60 packages are looking for funding
  run `npm fund` for details

6 vulnerabilities (5 moderate, 1 high)

To address all issues, run:
  npm audit fix

Run `npm audit` for details.
CI configured to test build. Building...

> ecash-lib@3.0.0 build
> tsc && tsc -p ./tsconfig.build.json && cp -r ./src/ffi ./dist

src/initBrowser.ts(16,10): error TS2345: Argument of type 'import("/work/modules/ecash-lib/src/ffi/ecash_lib_wasm_browser").Ecc' is not assignable to parameter of type 'import("/work/modules/ecash-lib/src/ecc").Ecc'.
  Property 'compressPk' is missing in type 'import("/work/modules/ecash-lib/src/ffi/ecash_lib_wasm_browser").Ecc' but required in type 'import("/work/modules/ecash-lib/src/ecc").Ecc'.
src/initNodeJs.ts(9,10): error TS2345: Argument of type 'import("/work/modules/ecash-lib/src/ffi/ecash_lib_wasm_nodejs").Ecc' is not assignable to parameter of type 'import("/work/modules/ecash-lib/src/ecc").Ecc'.
  Property 'compressPk' is missing in type 'import("/work/modules/ecash-lib/src/ffi/ecash_lib_wasm_nodejs").Ecc' but required in type 'import("/work/modules/ecash-lib/src/ecc").Ecc'.
Build ecash-lib-tests failed with exit code 2

Tail of the build log:

5 vulnerabilities (4 moderate, 1 high)

To address all issues, run:
  npm audit fix

Run `npm audit` for details.

> ecashaddrjs@2.0.0 build
> tsc

/work/modules/chronik-client /work/abc-ci-builds/ecash-agora-tests

> chronik-client@3.0.0 prepublish
> npm run build


> chronik-client@3.0.0 build
> tsc


added 265 packages, and audited 267 packages in 5s

48 packages are looking for funding
  run `npm fund` for details

6 vulnerabilities (4 moderate, 2 high)

To address issues that do not require attention, run:
  npm audit fix

To address all issues (including breaking changes), run:
  npm audit fix --force

Run `npm audit` for details.

> chronik-client@3.0.0 build
> tsc

/work/modules/ecash-lib /work/abc-ci-builds/ecash-agora-tests

added 365 packages, and audited 369 packages in 2s

60 packages are looking for funding
  run `npm fund` for details

6 vulnerabilities (5 moderate, 1 high)

To address all issues, run:
  npm audit fix

Run `npm audit` for details.

> ecash-lib@3.0.0 build
> tsc && tsc -p ./tsconfig.build.json && cp -r ./src/ffi ./dist

src/initBrowser.ts(16,10): error TS2345: Argument of type 'import("/work/modules/ecash-lib/src/ffi/ecash_lib_wasm_browser").Ecc' is not assignable to parameter of type 'import("/work/modules/ecash-lib/src/ecc").Ecc'.
  Property 'compressPk' is missing in type 'import("/work/modules/ecash-lib/src/ffi/ecash_lib_wasm_browser").Ecc' but required in type 'import("/work/modules/ecash-lib/src/ecc").Ecc'.
src/initNodeJs.ts(9,10): error TS2345: Argument of type 'import("/work/modules/ecash-lib/src/ffi/ecash_lib_wasm_nodejs").Ecc' is not assignable to parameter of type 'import("/work/modules/ecash-lib/src/ecc").Ecc'.
  Property 'compressPk' is missing in type 'import("/work/modules/ecash-lib/src/ffi/ecash_lib_wasm_nodejs").Ecc' but required in type 'import("/work/modules/ecash-lib/src/ecc").Ecc'.
Build ecash-agora-tests failed with exit code 2

Tail of the build log:

5 vulnerabilities (4 moderate, 1 high)

To address all issues, run:
  npm audit fix

Run `npm audit` for details.

> ecashaddrjs@2.0.0 build
> tsc

/work/modules/chronik-client /work/abc-ci-builds/cashtab-tests

> chronik-client@3.0.0 prepublish
> npm run build


> chronik-client@3.0.0 build
> tsc


added 265 packages, and audited 267 packages in 5s

48 packages are looking for funding
  run `npm fund` for details

6 vulnerabilities (4 moderate, 2 high)

To address issues that do not require attention, run:
  npm audit fix

To address all issues (including breaking changes), run:
  npm audit fix --force

Run `npm audit` for details.

> chronik-client@3.0.0 build
> tsc

/work/modules/ecash-lib /work/abc-ci-builds/cashtab-tests

added 365 packages, and audited 369 packages in 2s

60 packages are looking for funding
  run `npm fund` for details

6 vulnerabilities (5 moderate, 1 high)

To address all issues, run:
  npm audit fix

Run `npm audit` for details.

> ecash-lib@3.0.0 build
> tsc && tsc -p ./tsconfig.build.json && cp -r ./src/ffi ./dist

src/initBrowser.ts(16,10): error TS2345: Argument of type 'import("/work/modules/ecash-lib/src/ffi/ecash_lib_wasm_browser").Ecc' is not assignable to parameter of type 'import("/work/modules/ecash-lib/src/ecc").Ecc'.
  Property 'compressPk' is missing in type 'import("/work/modules/ecash-lib/src/ffi/ecash_lib_wasm_browser").Ecc' but required in type 'import("/work/modules/ecash-lib/src/ecc").Ecc'.
src/initNodeJs.ts(9,10): error TS2345: Argument of type 'import("/work/modules/ecash-lib/src/ffi/ecash_lib_wasm_nodejs").Ecc' is not assignable to parameter of type 'import("/work/modules/ecash-lib/src/ecc").Ecc'.
  Property 'compressPk' is missing in type 'import("/work/modules/ecash-lib/src/ffi/ecash_lib_wasm_nodejs").Ecc' but required in type 'import("/work/modules/ecash-lib/src/ecc").Ecc'.
Build cashtab-tests failed with exit code 2

Tail of the build log:

5 vulnerabilities (4 moderate, 1 high)

To address all issues, run:
  npm audit fix

Run `npm audit` for details.

> ecashaddrjs@2.0.0 build
> tsc

/work/modules/chronik-client /work/abc-ci-builds/ecash-agora-integration-tests

> chronik-client@3.0.0 prepublish
> npm run build


> chronik-client@3.0.0 build
> tsc


added 265 packages, and audited 267 packages in 5s

48 packages are looking for funding
  run `npm fund` for details

6 vulnerabilities (4 moderate, 2 high)

To address issues that do not require attention, run:
  npm audit fix

To address all issues (including breaking changes), run:
  npm audit fix --force

Run `npm audit` for details.

> chronik-client@3.0.0 build
> tsc

/work/modules/ecash-lib /work/abc-ci-builds/ecash-agora-integration-tests

added 365 packages, and audited 369 packages in 2s

60 packages are looking for funding
  run `npm fund` for details

6 vulnerabilities (5 moderate, 1 high)

To address all issues, run:
  npm audit fix

Run `npm audit` for details.

> ecash-lib@3.0.0 build
> tsc && tsc -p ./tsconfig.build.json && cp -r ./src/ffi ./dist

src/initBrowser.ts(16,10): error TS2345: Argument of type 'import("/work/modules/ecash-lib/src/ffi/ecash_lib_wasm_browser").Ecc' is not assignable to parameter of type 'import("/work/modules/ecash-lib/src/ecc").Ecc'.
  Property 'compressPk' is missing in type 'import("/work/modules/ecash-lib/src/ffi/ecash_lib_wasm_browser").Ecc' but required in type 'import("/work/modules/ecash-lib/src/ecc").Ecc'.
src/initNodeJs.ts(9,10): error TS2345: Argument of type 'import("/work/modules/ecash-lib/src/ffi/ecash_lib_wasm_nodejs").Ecc' is not assignable to parameter of type 'import("/work/modules/ecash-lib/src/ecc").Ecc'.
  Property 'compressPk' is missing in type 'import("/work/modules/ecash-lib/src/ffi/ecash_lib_wasm_nodejs").Ecc' but required in type 'import("/work/modules/ecash-lib/src/ecc").Ecc'.
Build ecash-agora-integration-tests failed with exit code 2

Tail of the build log:

[552/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/addressbookpage.cpp.o
[553/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/createwalletdialog.cpp.o
[554/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/coincontroltreewidget.cpp.o
[555/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/editaddressdialog.cpp.o
[556/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/trafficgraphwidget.cpp.o
[557/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/splashscreen.cpp.o
[558/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/qrc_bitcoin_locale.cpp.o
[559/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/askpassphrasedialog.cpp.o
[560/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/qrimagewidget.cpp.o
[561/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/openuridialog.cpp.o
[562/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/transactionfilterproxy.cpp.o
[563/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/addresstablemodel.cpp.o
[564/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/receiverequestdialog.cpp.o
[565/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/overviewpage.cpp.o
[566/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/transactiondescdialog.cpp.o
[567/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/recentrequeststablemodel.cpp.o
[568/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/sendcoinsentry.cpp.o
[569/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/receivecoinsdialog.cpp.o
[570/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/transactionrecord.cpp.o
[571/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/coincontroldialog.cpp.o
[572/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/rpcconsole.cpp.o
[573/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/walletframe.cpp.o
[574/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/walletmodeltransaction.cpp.o
[575/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/transactiontablemodel.cpp.o
[576/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/transactionview.cpp.o
[577/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/signverifymessagedialog.cpp.o
[578/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/transactiondesc.cpp.o
[579/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/paymentserver.cpp.o
[580/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/paymentrequestplus.cpp.o
[581/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/sendcoinsdialog.cpp.o
[582/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/walletcontroller.cpp.o
[583/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/walletmodel.cpp.o
[584/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/walletview.cpp.o
[585/589] Linking CXX static library src/qt/libbitcoin-qt-base.a
[586/589] Automatic MOC for target bitcoin-qt
[587/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt.dir/bitcoin-qt_autogen/mocs_compilation.cpp.o
[588/589] Building CXX object src/qt/CMakeFiles/bitcoin-qt.dir/main.cpp.o
[589/589] Linking CXX executable src/qt/bitcoin-qt
/work/modules/ecash-lib /work/abc-ci-builds/ecash-lib-integration-tests

added 365 packages, and audited 369 packages in 2s

60 packages are looking for funding
  run `npm fund` for details

6 vulnerabilities (5 moderate, 1 high)

To address all issues, run:
  npm audit fix

Run `npm audit` for details.

> ecash-lib@3.0.0 build
> tsc && tsc -p ./tsconfig.build.json && cp -r ./src/ffi ./dist

src/initBrowser.ts(16,10): error TS2345: Argument of type 'import("/work/modules/ecash-lib/src/ffi/ecash_lib_wasm_browser").Ecc' is not assignable to parameter of type 'import("/work/modules/ecash-lib/src/ecc").Ecc'.
  Property 'compressPk' is missing in type 'import("/work/modules/ecash-lib/src/ffi/ecash_lib_wasm_browser").Ecc' but required in type 'import("/work/modules/ecash-lib/src/ecc").Ecc'.
src/initNodeJs.ts(9,10): error TS2345: Argument of type 'import("/work/modules/ecash-lib/src/ffi/ecash_lib_wasm_nodejs").Ecc' is not assignable to parameter of type 'import("/work/modules/ecash-lib/src/ecc").Ecc'.
  Property 'compressPk' is missing in type 'import("/work/modules/ecash-lib/src/ffi/ecash_lib_wasm_nodejs").Ecc' but required in type 'import("/work/modules/ecash-lib/src/ecc").Ecc'.
Build ecash-lib-integration-tests failed with exit code 2

change readCert to parseCert

change readString to return Uint8Array

Failed tests logs:

====== CashTab Unit Tests: <Token /> available actions rendered We can list an SLP1 fungible token ======
TestingLibraryElementError: Unable to find an accessible element with the role "button" and name `/List Vespene Gas/`

Here are the accessible roles:

  region:

  Name "Notifications Alt+T":
  <section
    aria-atomic="false"
    aria-label="Notifications Alt+T"
    aria-live="polite"
    aria-relevant="additions text"
    class="Toastify"
  />

  --------------------------------------------------
  combobox:

  Name "":
  <select
    class="sc-crNyjn bXFivV"
    data-testid="wallet-select"
    id="wallets"
    name="wallets"
  />

  --------------------------------------------------
  option:

  Name "Token Test":
  <option
    class="sc-cpHetk jodErs"
    value="Token Test"
  />

  --------------------------------------------------
  button:

  Name "Copy ecash:qqq9f9z3uhpzkxrgdjkd7dxuuey7tmpmugpmnw0kue":
  <button
    aria-label="Copy ecash:qqq9f9z3uhpzkxrgdjkd7dxuuey7tmpmugpmnw0kue"
    class="sc-cJSrbW kZNvLw"
  />

  Name "icon for 20a0b9337a78603c6681ed2bc541593375535dcd9979196620ce71f233f2f6f8":
  <button
    class="sc-hzNEM eBXvVM"
  />

  Name "Click for more info about this token type":
  <button
    aria-label="Click for more info about this token type"
    class="sc-cJSrbW kZNvLw"
  />

  Name "Copy Token ID":
  <button
    aria-label="Copy Token ID"
    class="sc-cJSrbW kZNvLw"
  />

  Name "Click for more info about agora partial sales":
  <button
    aria-label="Click for more info about agora partial sales"
    class="sc-cJSrbW kZNvLw"
  />

  Name "Transactions":
  <button
    class="sc-hycgNl fdpVNO"
  />

  Name "Send Screen":
  <button
    aria-label="Send Screen"
    class="sc-hycgNl fdpVNO"
  />

  Name "Tokens":
  <button
    aria-label="Tokens"
    class="sc-hycgNl fdpVNO"
  />

  Name "Receive":
  <button
    aria-label="Receive"
    class="sc-hycgNl fdpVNO"
  />

  Name "Wallet Backup":
  <button
    class="sc-chAAoq hxqjDv"
  />

  Name "Wallets":
  <button
    class="sc-chAAoq hxqjDv"
  />

  Name "Listed NFTs":
  <button
    class="sc-chAAoq hxqjDv"
  />

  Name "Agora":
  <button
    class="sc-chAAoq hxqjDv"
  />

  Name "Contacts":
  <button
    class="sc-chAAoq hxqjDv"
  />

  Name "Airdrop":
  <button
    class="sc-chAAoq hxqjDv"
  />

  Name "Rewards":
  <button
    class="sc-chAAoq hxqjDv"
  />

  Name "Sign & Verify":
  <button
    class="sc-chAAoq hxqjDv"
  />

  Name "Settings":
  <button
    class="sc-chAAoq hxqjDv"
  />

  --------------------------------------------------
  link:

  Name "XECX":
  <a
    href="/#/token/c67bf5c2b6d91cfb46a5c1772582eff80d88686887be10aa63b0945479cf4ed4"
  />

  Name "FIRMA":
  <a
    href="/#/token/0387947fd575db4fb19a3e322f635dec37fd192b5941625b66bc4b2c3008cbf0"
  />

  Name "20a...6f8":
  <a
    href="https://explorer.e.cash/tx/20a0b9337a78603c6681ed2bc541593375535dcd9979196620ce71f233f2f6f8"
    rel="noopener noreferrer"
    target="_blank"
  />

  Name "simple.wikipedia.org/wiki/StarCraft#Gameplay":
  <a
    href="https://simple.wikipedia.org/wiki/StarCraft#Gameplay"
    rel="noreferrer"
    target="_blank"
  />

  --------------------------------------------------
  paragraph:

  Name "Price in Local Currency":
  <p
    class="sc-AnqlK fLVAuQ"
    title="Price in Local Currency"
  />

  Name "":
  <p />

  Name "":
  <p />

  Name "":
  <p />

  Name "":
  <p />

  Name "":
  <p />

  Name "":
  <p />

  Name "":
  <p />

  Name "":
  <p />

  Name "":
  <p />

  --------------------------------------------------
  img:

  Name "icon for 20a0b9337a78603c6681ed2bc541593375535dcd9979196620ce71f233f2f6f8":
  <img
    alt="icon for 20a0b9337a78603c6681ed2bc541593375535dcd9979196620ce71f233f2f6f8"
    height="128"
    src="https://icons.etokens.cash/128/20a0b9337a78603c6681ed2bc541593375535dcd9979196620ce71f233f2f6f8.png"
    width="128"
  />

  Name "cashtab":
  <img
    alt="cashtab"
    class="sc-cCbXAZ jOUSPN"
    src="test-file-stub"
  />

  --------------------------------------------------
  heading:

  Name "Vespene Gas":
  <h2 />

  --------------------------------------------------

Ignored nodes: comments, script, style
<body>
  <div>
    <div
      class="sc-keFjpB fuvsSf"
    >
      <section
        aria-atomic="false"
        aria-label="Notifications Alt+T"
        aria-live="polite"
        aria-relevant="additions text"
        class="Toastify"
      />
      <div
        class="sc-jWojfa gOMhPW"
      >
        <div
          class="sc-kVrTmx dSIcDd"
        >
          <div
            class="sc-ivVeuv hQBWoJ"
          >
            <img
              alt="cashtab"
              class="sc-cCbXAZ jOUSPN"
              src="test-file-stub"
            />
          </div>
          <div
            class="sc-cmIlrE ckvYmi"
          >
            <div
              class="sc-jkCMRl gxKbjs"
            >
              <select
                class="sc-crNyjn bXFivV"
                data-testid="wallet-select"
                id="wallets"
                name="wallets"
              >
                <option
                  class="sc-cpHetk jodErs"
                  value="Token Test"
                >
                  Token Test
                </option>
              </select>
              <div
                class="sc-bqjOQT kauMuv"
              >
                <button
                  aria-label="Copy ecash:qqq9f9z3uhpzkxrgdjkd7dxuuey7tmpmugpmnw0kue"
                  class="sc-cJSrbW kZNvLw"
                >
                  <svg
                    title="copy-paste"
                  />
                </button>
                <div
                  class="sc-eerKOB cvXwwv"
                >
                  <div
                    class="sc-emmjRN bSWkUh"
                  >
                    <input
                      checked=""
                      class="sc-gFaPwZ iPJMNd"
                      id="show-hide-balance"
                      name="show-hide-balance"
                      title="show-hide-balance"
                      type="checkbox"
                    />
                    <label
                      class="sc-cpmLhU iUeRKn"
                      for="show-hide-balance"
                    >
                      <span
                        class="sc-dymIpo hGwQkt"
                        data-off=""
                        data-on=""
                      />
                      <span
                        class="sc-bnXvFD cpOMDW"
                      />
                    </label>
                  </div>
                </div>
              </div>
            </div>
            <div
              class="sc-gleUXh fSfkBQ"
              title="Wallet Info"
            >
              <div
                class="sc-nrwXf erXBln"
              >
                <div
                  class="sc-eitiEO isWDMZ"
                  title="Balance XEC"
                >
                  9,970.81
                   
                  XEC
                </div>
                <div
                  class="sc-eitiEO gaHDhC"
                  title="Balance XECX"
                >
                  10,000.00
                   
                  <a
                    href="/#/token/c67bf5c2b6d91cfb46a5c1772582eff80d88686887be10aa63b0945479cf4ed4"
                  >
                    XECX
                  </a>
                </div>
                <div
                  class="sc-eitiEO gaHDhC"
                  title="Balance FIRMA"
                >
                  100.0000
                   
                  <a
                    href="/#/token/0387947fd575db4fb19a3e322f635dec37fd192b5941625b66bc4b2c3008cbf0"
                  >
                    FIRMA
                  </a>
                </div>
              </div>
              <div
                class="sc-bhlBdH kdHsOB"
                title="Balance in Local Currency"
              >
                $
                100.60
                 
                USD
              </div>
              <p
                class="sc-AnqlK fLVAuQ"
                title="Price in Local Currency"
              >
                1 
                XEC
                 = 
                0.00003000
                 
                USD
              </p>
            </div>
          </div>
          <div
            class="sc-dTLGrV eQoClh"
          >
            <div
              class="sc-jKVCRD kVWwbS"
            >
              <div
                class="sc-fcdeBU chTKnN"
                title="Token Stats"
              >
                <div
                  class="sc-RcBXQ kItXmO"
                >
                  <button
                    class="sc-hzNEM eBXvVM"
                  >
                    <img
                      alt="icon for 20a0b9337a78603c6681ed2bc541593375535dcd9979196620ce71f233f2f6f8"
                      height="128"
   ...
    at Object.getElementError (/work/cashtab/node_modules/@testing-library/dom/dist/config.js:37:19)
    at /work/cashtab/node_modules/@testing-library/dom/dist/query-helpers.js:76:38
    at /work/cashtab/node_modules/@testing-library/dom/dist/query-helpers.js:52:17
    at /work/cashtab/node_modules/@testing-library/dom/dist/query-helpers.js:95:19
    at Object.getByRole (/work/cashtab/src/components/Etokens/__tests__/TokenActions.test.js:272:35)

Each failure log is accessible here:
CashTab Unit Tests: <Token /> available actions rendered We can list an SLP1 fungible token

Is there any reason for not using an existing off-the-shelf lib for this task ?

modules/ecash-lib/src/payment/asn1.test.ts
34 ↗(On Diff #52878)

Thanks. This has been missing from the qt bip70 test and after it expired we lost tons of time figuring out how to regen the cert.

Is there any reason for not using an existing off-the-shelf lib for this task ?

well it's not that complicated to parse ASN.1 and so far ecash-lib doesn't have any external dependencies.