@laceio/sdk 0.1.0 → 0.1.1-canary.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{Ed25519PublicKey-lvu1s54U.cjs → Address-AMKTo-dA.cjs} +17150 -61
- package/dist/{Ed25519PublicKey-CjnuAYRR.js → Address-_c_-9hLC.js} +16955 -264
- package/dist/{Bip32Account-r3KAhCgU.js → Bip32Account-CaW1zC9Y.js} +4 -5
- package/dist/{Bip32Account-Cz3h0ZUa.cjs → Bip32Account-DOaGmKpv.cjs} +4 -5
- package/dist/Cardano-B-gyqBBD.js +311 -0
- package/dist/Cardano-BQ_af0Y3.cjs +322 -0
- package/dist/Ed25519PublicKey-B3QcR0J2.cjs +88 -0
- package/dist/Ed25519PublicKey-DIE19xHg.js +83 -0
- package/dist/InMemoryKeyAgent-Bc_xZY-v.cjs +652 -0
- package/dist/InMemoryKeyAgent-D8T3vtXy.js +631 -0
- package/dist/{PaymentAddress-DhbtuYb7.cjs → PaymentAddress-B4n1KZMx.cjs} +1 -2
- package/dist/{PaymentAddress-xSmGUQ-8.js → PaymentAddress-Cml3EA1n.js} +1 -2
- package/dist/Percent-Cfuw5YyL.cjs +11 -0
- package/dist/Percent-DpvyJ_93.js +5 -0
- package/dist/SodiumBip32Ed25519-BaD-kjyx.cjs +380 -0
- package/dist/SodiumBip32Ed25519-DCikAMsl.js +363 -0
- package/dist/{TransactionBuilder-CeJTNzm-.cjs → TransactionBuilder-BakTJvsJ.cjs} +59 -89
- package/dist/{TransactionBuilder-DGNDM4kt.js → TransactionBuilder-D2ErwVWv.js} +5 -71
- package/dist/_md-6zV2Cme0.cjs +684 -0
- package/dist/_md-gbUqlhqd.js +399 -0
- package/dist/_web-crypto-random-bytes-BvzwTYPG.js +197 -0
- package/dist/acc-module-NL_8mEHH.cjs +27654 -0
- package/dist/acc-module-ur8CkBd1.js +27624 -0
- package/dist/account-call-B7cF8ly4.cjs +293 -0
- package/dist/account-call-BF4rBcNw.js +3 -0
- package/dist/account-call-CoCq3V55.js +252 -0
- package/dist/account-call-DFcD257E.cjs +4 -0
- package/dist/account-guards-BeKbV9D1.cjs +41 -0
- package/dist/account-guards-qnFXuXSE.js +36 -0
- package/dist/{activity-type.stable-ClO9j_PH.cjs → activity-type-BPXxdHBP.cjs} +2 -1
- package/dist/{activity-type.stable-Ml0SOYv9.js → activity-type-C1geyPsH.js} +2 -1
- package/dist/address-OxwXIwbF.js +15502 -0
- package/dist/address-book-address-validator-BqYM0Uyp.cjs +41 -0
- package/dist/{address-book-address-validator-BhqRfmlL.cjs → address-book-address-validator-CGIcqn5W.cjs} +5 -4
- package/dist/{address-book-address-validator-VqIOB8PY.js → address-book-address-validator-FkkYim3z.js} +6 -4
- package/dist/address-book-address-validator-RSx2Jozy.js +39 -0
- package/dist/address-lECYBd9-.cjs +13043 -0
- package/dist/{apply-vkey-witnesses-Ctzk7eye.cjs → apply-vkey-witnesses-1jyczTkw.cjs} +1 -1
- package/dist/{apply-vkey-witnesses-Dfo7XfhL.js → apply-vkey-witnesses-Byb40-yJ.js} +1 -1
- package/dist/artefact-loader-Cqc9eSkL.cjs +182 -0
- package/dist/artefact-loader-D0T2f6F7.js +159 -0
- package/dist/auto-dismiss-failure-on-success-BWJceNXd.cjs +37 -0
- package/dist/auto-dismiss-failure-on-success-Bpod-v4r.js +31 -0
- package/dist/bip32-EPpcFrpH.cjs +3851 -0
- package/dist/{bip32ed25519-D2In8WzR.cjs → bip32ed25519-CRiG-Kjg.cjs} +5 -4
- package/dist/{bip32ed25519-qsLH_eWO.js → bip32ed25519-E-fCUZNv.js} +6 -4
- package/dist/bip39-DZomfqeY.js +9 -0
- package/dist/bip39-MAck9iod.cjs +26 -0
- package/dist/bitcoin-data-provider-D0OT_Uiu.cjs +26 -0
- package/dist/bitcoin-data-provider-LN_8oamW.js +21 -0
- package/dist/bitcoin.cjs +48 -0
- package/dist/bitcoin.d.ts +29805 -1
- package/dist/bitcoin.js +22 -0
- package/dist/{blake2b-BGHUWMsV.js → blake2b-BL-eR5G2.js} +6 -4
- package/dist/{blake2b-DspUqw68.cjs → blake2b-Iy324FwH.cjs} +5 -4
- package/dist/{blockfrost-tx-submit-provider-BUEOmdvc.js → blockfrost-tx-submit-provider-BHDLgOIE.js} +9 -162
- package/dist/{blockfrost-tx-submit-provider-B5dWbdrZ.cjs → blockfrost-tx-submit-provider-BxC19smv.cjs} +7 -171
- package/dist/{blockingWithLatestFrom-BhaE7pnA.js → blockingWithLatestFrom-FUfZFEUG.js} +1 -1
- package/dist/{blockingWithLatestFrom-DkuT3G2a.cjs → blockingWithLatestFrom-bmCPgA3c.cjs} +1 -1
- package/dist/bn-BFq5a4dk.cjs +2553 -0
- package/dist/{SodiumBip32Ed25519-BEfo1Q9m.js → browser-D5jRKv_L.js} +4 -401
- package/dist/bytes.vo-CziaOsba.js +24 -0
- package/dist/bytes.vo-hecRu3YZ.cjs +35 -0
- package/dist/{cardano-network-id-to-network-type-PXvn1ycQ.cjs → cardano-network-id-to-network-type-BwG_d6QP.cjs} +1 -1
- package/dist/{cardano-network-id-to-network-type-DHgKhDAK.js → cardano-network-id-to-network-type-CYJheetp.js} +1 -1
- package/dist/{cardano-network-id.vo-CbNNKd-k.cjs → cardano-network-id.vo-C5VuBXT3.cjs} +2 -2
- package/dist/{cardano-network-id.vo-CTYe-Oix.js → cardano-network-id.vo-CeLJqmb_.js} +2 -2
- package/dist/{cardano-tx-id.vo-BMwemq5x.js → cardano-tx-id.vo-DJ70NC0-.js} +1 -1
- package/dist/{cardano-tx-id.vo-NY-gCOWJ.cjs → cardano-tx-id.vo-lnyO9XaW.cjs} +1 -1
- package/dist/cardano.cjs +31 -24
- package/dist/cardano.d.ts +27602 -8121
- package/dist/cardano.js +21 -13
- package/dist/client-Bw2foG5E.cjs +808 -0
- package/dist/const-BB3MccLt.js +153 -0
- package/dist/{const-BErUlcZw.cjs → const-BWBAzOmN.cjs} +1 -1
- package/dist/const-CSWmOyzn.cjs +42 -0
- package/dist/{const-Dy8Ctnpd.cjs → const-D3mCkwrM.cjs} +5 -5
- package/dist/const-DW7z3R5k.js +13 -0
- package/dist/{const-DeUA7zYl.js → const-DbuUHSzR.js} +5 -5
- package/dist/const-DgBzKfz6.cjs +31995 -0
- package/dist/{const-DVW6DGkZ.js → const-xGSNCtwQ.js} +1 -1
- package/dist/contract-BsIGhsYa.js +171 -0
- package/dist/contract-DD6CGnpB.cjs +189 -0
- package/dist/create-add-accounts-2mQA0ST2.js +102 -0
- package/dist/create-add-accounts-B6mR2NMn.cjs +114 -0
- package/dist/{delegation-tx-builder-CF0VunDW.cjs → delegation-tx-builder-Cp30jtj9.cjs} +9 -8
- package/dist/{delegation-tx-builder-C8LQxU2R.js → delegation-tx-builder-DUMikSTg.js} +9 -7
- package/dist/{deregistration-tx-builder-DcUXA3Ls.cjs → deregistration-tx-builder-B-ZeY-dR.cjs} +10 -9
- package/dist/{deregistration-tx-builder-BOBPP8m_.js → deregistration-tx-builder-CRLrK99U.js} +10 -8
- package/dist/device-commitment-hex.vo-BIUYUNz1.cjs +31 -0
- package/dist/device-commitment-hex.vo-D9FsYLn7.js +26 -0
- package/dist/device-key-BToCoS4D.js +2394 -0
- package/dist/device-key-D6euvxFi.cjs +2489 -0
- package/dist/device-readers-BHJeNR8I.js +3 -0
- package/dist/device-readers-Dw7uTNM5.cjs +167 -0
- package/dist/device-readers-b4g2j3QL.js +144 -0
- package/dist/device-readers-cxcJcWq5.cjs +7 -0
- package/dist/dist-B00GN41m.js +141 -0
- package/dist/dist-BA1xnF9O.cjs +4413 -0
- package/dist/dist-BmHOXLe8.cjs +3814 -0
- package/dist/dist-Br0OVXKt.cjs +535 -0
- package/dist/dist-C1JK9C1I.cjs +3452 -0
- package/dist/dist-DKEViNEI.cjs +1306 -0
- package/dist/dist-Dwqx184a.cjs +43175 -0
- package/dist/dist-MJof_Ky1.cjs +145 -0
- package/dist/dist-p84sVVJ9.cjs +1394 -0
- package/dist/{earn-rewards-tx-builder-BRlTueHS.js → earn-rewards-tx-builder-8G_rouIk.js} +9 -7
- package/dist/{earn-rewards-tx-builder-RgO0QUY8.cjs → earn-rewards-tx-builder-cOUNV58E.cjs} +9 -8
- package/dist/enc-key-circuits-0Dud78IB.js +13 -0
- package/dist/enc-key-circuits-yjPHbuo_.cjs +24 -0
- package/dist/english-BZ_ebp2-.cjs +2057 -0
- package/dist/envelopes-B3QCzo5p.js +2658 -0
- package/dist/envelopes-BdE1xlgz.cjs +2777 -0
- package/dist/errors-BA3b8aVu.cjs +584 -0
- package/dist/errors-pkQdxW-7.js +392 -0
- package/dist/experimental.cjs +6820 -0
- package/dist/experimental.d.ts +63552 -0
- package/dist/experimental.js +6670 -0
- package/dist/fees-6C2uEWFK.js +653 -0
- package/dist/fees-DtC71fOx.cjs +820 -0
- package/dist/gated-call-BrPjKolT.js +3 -0
- package/dist/gated-call-CcsuW9L5.js +691 -0
- package/dist/gated-call-DdDrxEq5.cjs +732 -0
- package/dist/gated-call-Dk7PazhG.cjs +4 -0
- package/dist/grant-rules-B7eDuD5G.cjs +5468 -0
- package/dist/grant-rules-qLrKUIR3.js +5217 -0
- package/dist/grant-status-CDmZpx32.js +296 -0
- package/dist/grant-status-CQtwjLsA.cjs +337 -0
- package/dist/grants-Bnb-3Hkv.cjs +16 -0
- package/dist/grants-CIb6nOV7.cjs +273 -0
- package/dist/grants-CYY0AquW.js +202 -0
- package/dist/grants-DOsFSotP.js +4 -0
- package/dist/{group-cardano-addresses-by-account-C-1GHUu8.cjs → group-cardano-addresses-by-account-BGOtPV-Y.cjs} +4 -40
- package/dist/{group-cardano-addresses-by-account-p4dXmCoj.js → group-cardano-addresses-by-account-TqvESg9x.js} +6 -37
- package/dist/{guarded-transaction-signer-DZSGHp1K.js → guarded-transaction-signer-BbVDE9Nn.js} +12 -18
- package/dist/{guarded-transaction-signer-BLSezbfV.cjs → guarded-transaction-signer-DTLjAkif.cjs} +26 -26
- package/dist/hex-BVtOKJki.cjs +263 -0
- package/dist/hex-CGYJPK_Z.js +192 -0
- package/dist/http-client-B7_kBTYn.js +155 -0
- package/dist/http-client-DYQ_7Rdf.cjs +167 -0
- package/dist/identity-DxPhxkZs.js +239 -0
- package/dist/identity-y41Yle03.cjs +274 -0
- package/dist/in-memory-wallet-integration-5BKiAvPT.js +20861 -0
- package/dist/{in-memory-wallet-integration-CUTa68ET.js → in-memory-wallet-integration-BCOqDgbt.js} +10 -107
- package/dist/in-memory-wallet-integration-Bi8I9Dso.js +128 -0
- package/dist/in-memory-wallet-integration-Bsl2ONua.cjs +239 -0
- package/dist/in-memory-wallet-integration-DZ0CAyvY.cjs +20865 -0
- package/dist/{in-memory-wallet-integration-Dw_S7amX.cjs → in-memory-wallet-integration-DsFm8gLk.cjs} +21 -112
- package/dist/{in-memory-wallet-integration-Z4Bp_DTv.cjs → in-memory-wallet-integration-aW_SF-go.cjs} +8 -5
- package/dist/{in-memory-wallet-integration-B6cbAlvD.js → in-memory-wallet-integration-mIEc8EfR.js} +9 -5
- package/dist/index.cjs +95 -58
- package/dist/index.d.ts +45152 -13448
- package/dist/index.js +55 -28
- package/dist/{init-CVi8J0zk.cjs → init-5SfWgCYD.cjs} +3 -3
- package/dist/{init-Ci7aqWCf2.cjs → init-8NVWbo302.cjs} +2 -2
- package/dist/init-B-C7n6u6.js +5 -0
- package/dist/{init-BFMWRf-L.js → init-B-ppfGO-.js} +1 -1
- package/dist/{init-IiR093Jw.cjs → init-B2OUhY5T.cjs} +2 -2
- package/dist/{init-DXnus199.cjs → init-B6Eg_o6G.cjs} +5 -5
- package/dist/{init-4hDl5bpr.js → init-BAWMHL1k.js} +2 -2
- package/dist/init-BC2CZZOu2.cjs +2002 -0
- package/dist/{init-a228hXnS.cjs → init-BF-a2p6E.cjs} +65 -73
- package/dist/{init-fFirX8OY.cjs → init-BFxlQAD8.cjs} +1 -1
- package/dist/init-BJE1ry0O.js +17 -0
- package/dist/{init-BVnI4z2J.js → init-BPKBVOHU.js} +2 -2
- package/dist/{init-bdqZBd-o.js → init-BSP_xcpB.js} +2 -2
- package/dist/{init-CFNOn3lo.js → init-BSd7mznK.js} +3 -3
- package/dist/{init-MjR4swi6.js → init-BUJTT0MN.js} +36 -43
- package/dist/init-BUpFzYsD.cjs +143 -0
- package/dist/{init-BvpYHyLH.cjs → init-BZ-WyAIL.cjs} +3 -3
- package/dist/init-BZdfdLX7.js +422 -0
- package/dist/{init-CJeOys1w.cjs → init-B_HWNXMD.cjs} +2 -2
- package/dist/init-BbIMt6xU.cjs +6 -0
- package/dist/{init-BYdN1aqE.cjs → init-BewG6swt.cjs} +2 -2
- package/dist/{init-BX0AZAVH2.js → init-Bilqsbng.js} +2 -2
- package/dist/{init-Tpn9VkFu.cjs → init-BpwlQ6wF.cjs} +1 -1
- package/dist/{init-D5-P0HXK.js → init-BtQOzUjX.js} +1 -1
- package/dist/{init-BvGz3qUd2.js → init-CCTscPaY2.js} +2 -2
- package/dist/{init-D4hPipCD.cjs → init-CH0yyBof.cjs} +1 -1
- package/dist/init-CaIkrXal.cjs +121 -0
- package/dist/init-CkZy4IMf.cjs +107 -0
- package/dist/{init-Drr2f_Pr.js → init-CmfcY7SV.js} +1 -1
- package/dist/{init-Kf3_OLv6.js → init-CnJAlks_.js} +1 -1
- package/dist/{init-Cdjt_z-b.cjs → init-CqqmtAIK.cjs} +4 -4
- package/dist/{init-Bb0avZeZ.js → init-Cu2znmIc.js} +5 -5
- package/dist/init-Cz5LAizN.js +2001 -0
- package/dist/init-D4WM3-Mn.cjs +18 -0
- package/dist/init-DMi2FGpf.cjs +424 -0
- package/dist/{init-lcaUSOOG.js → init-DPTJohPd.js} +1 -1
- package/dist/{init-BTYLMF9F2.cjs → init-DexLSprL2.cjs} +258 -61
- package/dist/init-DfKPgD21.js +106 -0
- package/dist/init-DgzRsI-C.js +141 -0
- package/dist/init-Dj4Cn7-P.js +4789 -0
- package/dist/init-DktAnYI0.cjs +2354 -0
- package/dist/{init-DFwhgert.cjs → init-DmyuM9Lo.cjs} +1 -1
- package/dist/{init-CX_zLXc6.js → init-IBnizp1U.js} +5 -5
- package/dist/init-MDKB6tGI2.cjs +4790 -0
- package/dist/{init-DbZ5byj42.js → init-TbB38KNt2.js} +258 -60
- package/dist/init-X6m_cqDy.js +2353 -0
- package/dist/{init-DvVgKCaP2.cjs → init-bzvl1JhF.cjs} +2 -2
- package/dist/{init-BgrY29gW.js → init-dsYkC_0B.js} +4 -4
- package/dist/{init-B5BsI3DR.cjs → init-kvn5FlPS.cjs} +7 -7
- package/dist/init-vfy9DW_E.js +119 -0
- package/dist/{init-BE_6Jyc4.js → init-w7xl6LsP.js} +3 -3
- package/dist/{init-DEsWVyn5.cjs → init-wgiBUmyW.cjs} +1 -1
- package/dist/{is-retriable-error-DWv_ob-f.js → is-retriable-error-CmFR20pe.js} +1 -1
- package/dist/{is-retriable-error-Dtb4JGjd.cjs → is-retriable-error-D2yo0_lS.cjs} +1 -1
- package/dist/jubjub-authoriser-A2c8vmkN.js +84 -0
- package/dist/jubjub-authoriser-D3ZDgzcF.cjs +85 -0
- package/dist/key-source-CcLTx8HK.js +2761 -0
- package/dist/key-source-D2tTAag-.cjs +806 -0
- package/dist/{key-value-store-DTX1quRS.js → key-value-store-DZcNDB3n.js} +1 -1
- package/dist/{key-value-store-B-XRIwaM.cjs → key-value-store-Htj4RgMe.cjs} +1 -1
- package/dist/keyDerivation-DcKRUCVh.cjs +274 -0
- package/dist/keyDerivation-QGesIMbS.js +4077 -0
- package/dist/{lace-context-FpU3iG3f.cjs → lace-context-BN0b_ury.cjs} +4 -4
- package/dist/{lace-context-BQvvxVLm.js → lace-context-DMRJ87Vg.js} +4 -4
- package/dist/lib-BC-62Byh.cjs +2359 -0
- package/dist/lib-JYqcAX0c.js +2354 -0
- package/dist/midnight-account-id.vo--Vcx34Xk.cjs +10 -0
- package/dist/midnight-account-id.vo-BuB8fiVO.js +5 -0
- package/dist/midnight-engine-B7D2hbHo.js +5 -0
- package/dist/midnight-engine-D5ikN_5F.cjs +6 -0
- package/dist/midnight-wallet-BOdFD6SX.cjs +24 -0
- package/dist/midnight-wallet-CAqZrNVe.js +18 -0
- package/dist/midnight.cjs +1412 -0
- package/dist/midnight.d.ts +28609 -0
- package/dist/midnight.js +1355 -0
- package/dist/modules-cardano-BiL9hoM3.js +996 -0
- package/dist/modules-cardano-UeXks3sd.cjs +1109 -0
- package/dist/node-relay-BOuvdZvC.cjs +49 -0
- package/dist/node-relay-CLtc5n1v.js +48 -0
- package/dist/outputs-5qdW8s-f.js +196 -0
- package/dist/outputs-BEM1GPMf.cjs +339 -0
- package/dist/{SodiumBip32Ed25519-BQUcrQWX.cjs → pbkdf2-B1veireP.cjs} +6 -411
- package/dist/pending-operation-CfTUNQVD.cjs +26 -0
- package/dist/pending-operation-Ljijb1Uh.js +21 -0
- package/dist/providers-1on_fwJO.cjs +364 -0
- package/dist/providers-C1MsxfMA.js +341 -0
- package/dist/redacted-4SJPqt-G.js +81 -0
- package/dist/redacted-DwxIDdIF.cjs +86 -0
- package/dist/{reselect-DPML1uFN.cjs → reselect-kP4DaAII.cjs} +1 -1
- package/dist/{retry-config-oNtfdyrG.cjs → retry-config-BGv5q5QM.cjs} +1 -1
- package/dist/{retry-config-VdbuqBsI.js → retry-config-Bu5Yn5ua.js} +1 -1
- package/dist/safe-buffer-CqGpSFCQ.js +43 -0
- package/dist/safe-buffer-DbXbwhUQ.cjs +48 -0
- package/dist/sdk-1SRu8Ype.cjs +1445 -0
- package/dist/sdk-BneJm7ey.js +1249 -0
- package/dist/sdk-init-9TG1ZvHF.cjs +3795 -0
- package/dist/sdk-init-Ce3mD-8F.js +1047 -0
- package/dist/secret-box-CSmRp6Tt.js +3777 -0
- package/dist/secret-box-ZfbYwBgS.cjs +6970 -0
- package/dist/send-proof-progress-DtAcrMP6.cjs +33 -0
- package/dist/send-proof-progress-Dx2cUz1B.js +22 -0
- package/dist/sha2-DaRJZOjk.cjs +390 -0
- package/dist/sha2-c4sB6peD.js +378 -0
- package/dist/side-effects-C3BhLrdP.js +768 -0
- package/dist/side-effects-DG0R-KFc.cjs +804 -0
- package/dist/sign-bitcoin-transaction-with-seed-C7vq9om8.js +147 -0
- package/dist/sign-bitcoin-transaction-with-seed-Ds1dwzan.cjs +158 -0
- package/dist/signer--2I6poMD.js +2 -0
- package/dist/signer-CX21Ups_.cjs +121 -0
- package/dist/signer-Cnn9q9oY.js +92 -0
- package/dist/signer-DbSxjk0F.cjs +7 -0
- package/dist/signer-factory-B5oFuUZ-.cjs +130 -0
- package/dist/signer-factory-BAt8FPNc.cjs +281 -0
- package/dist/signer-factory-BGE4nL4k.js +129 -0
- package/dist/signer-factory-C4pgsiJi.js +281 -0
- package/dist/{signer-factory-DySc1wRX.cjs → signer-factory-D95jQIPV.cjs} +9 -6
- package/dist/{signer-factory-D4HrwFPl.js → signer-factory-PrpsGX-8.js} +10 -6
- package/dist/{slice-BZTQgYSs.js → slice-B-xJcuT1.js} +4 -4
- package/dist/slice-B4QOYaOG.cjs +105 -0
- package/dist/{slice-CtIMw2YT.cjs → slice-B9QKuhi0.cjs} +3 -3
- package/dist/slice-BKnGkAkd.cjs +9031 -0
- package/dist/{slice-Bhwmqn1p.cjs → slice-Bf4enJKZ.cjs} +8 -8
- package/dist/{slice-DaNVz7_l.js → slice-ByNWnxKS.js} +8 -8
- package/dist/{slice-C2UDQrdt.js → slice-C1zOeseG.js} +449 -355
- package/dist/{slice-DFLyKRm5.cjs → slice-C4toRM6A.cjs} +2 -2
- package/dist/{slice-Cx4dULDA.cjs → slice-C8YVv4Qn.cjs} +1 -1
- package/dist/{slice-jnpOgiSZ.cjs → slice-CaMfviYu.cjs} +3 -3
- package/dist/{slice-DFvrwUur.js → slice-CgeRsYRg.js} +6 -6
- package/dist/slice-Cwt8jShq.js +9013 -0
- package/dist/{slice-zNEspZND.js → slice-D0VzpMbY.js} +2 -2
- package/dist/slice-D14F78Ca.js +87 -0
- package/dist/{slice-F6A1YKOF.cjs → slice-DLflttAu.cjs} +479 -366
- package/dist/{slice-C96EdeY1.js → slice-DcO-iNz2.js} +1 -1
- package/dist/{slice-C19quNWM.cjs → slice-DimtxfAT.cjs} +2 -2
- package/dist/{slice-KiNoGwD9.js → slice-DlTEqIoI.js} +1 -1
- package/dist/{slice-ws8PccRX.js → slice-Dn0WojD7.js} +3 -3
- package/dist/{slice-BLSxLmie.cjs → slice-Dongunf7.cjs} +4 -4
- package/dist/{slice-B6vPum19.js → slice-DpufJAjJ.js} +2 -2
- package/dist/{slice-exhhmucR.cjs → slice-DtitVc9L.cjs} +7 -7
- package/dist/{slice-Bjj2t2ut.cjs → slice-WMMMc1Xv.cjs} +2 -2
- package/dist/slice-a8VuIqzS.cjs +378 -0
- package/dist/slice-bRASyM-m.js +354 -0
- package/dist/{slice-CBFrgHSH.js → slice-hNyKbDry.js} +3 -3
- package/dist/{InMemoryKeyAgent-pyB2gA-N.cjs → src-BayYMIjw.cjs} +20 -8228
- package/dist/{InMemoryKeyAgent-D-3HejxN.js → src-CgINPlSx.js} +29 -4811
- package/dist/store-AUlTfcI_.js +37 -0
- package/dist/store-C7AneHEY.cjs +66 -0
- package/dist/submit-BuBCVi-l.cjs +87 -0
- package/dist/submit-D37lxFrK.js +70 -0
- package/dist/submit-bitcoin-tx-DFLnhidO.js +983 -0
- package/dist/submit-bitcoin-tx-sih2hSfb.cjs +1049 -0
- package/dist/{subtractValueQuantities-DfZg6oiG.js → subtractValueQuantities-BuDJVxq6.js} +3 -22
- package/dist/{subtractValueQuantities-C8qDTtgH.cjs → subtractValueQuantities-CqR606HV.cjs} +2 -32
- package/dist/{sync-operation-utils-BrQyWFS_.cjs → sync-operation-utils--Z_IQfyW.cjs} +0 -66
- package/dist/{sync-operation-utils-CAaCGvEN.js → sync-operation-utils-BimBpvI3.js} +1 -37
- package/dist/token-color.vo-CItgoOjw.js +26 -0
- package/dist/token-color.vo-Ca4hUXfh.cjs +37 -0
- package/dist/token-id-mapper-BVau2RXa.js +16 -0
- package/dist/token-id-mapper-CSeLzM4o.cjs +18 -0
- package/dist/{token-id-mapper-pDaTxpw2.js → token-id-mapper-ClBeIdJR.js} +2 -2
- package/dist/{token-id-mapper-DYcd8hhQ.cjs → token-id-mapper-D0wFdbOy.cjs} +2 -2
- package/dist/types-BhzypKMS.cjs +15 -0
- package/dist/types-DTE1ctDB.js +10 -0
- package/dist/types-DXSxXGz0.js +12 -0
- package/dist/types-Dls6Z5gV.cjs +23 -0
- package/dist/{util-P4PX2muj.cjs → util-D1YlKzrc.cjs} +2 -2
- package/dist/{util-CQSJU0wT.js → util-DHxtzUzY.js} +2 -2
- package/dist/{utils-Bv4OHT4S.cjs → utils-DYf4iZKX.cjs} +7 -1
- package/dist/{utils-DrtzChYN.js → utils-DcnoETEP.js} +2 -2
- package/dist/utils-Du0YXRcU.cjs +112 -0
- package/dist/utils-fF_rnZe3.js +65 -0
- package/dist/v8Signatures-ClGpA8mS.cjs +71 -0
- package/dist/{vote-delegation-tx-builder-69gOEkCB.cjs → vote-delegation-tx-builder-BjZxCOd3.cjs} +9 -8
- package/dist/{vote-delegation-tx-builder-BRJ_pf-c.js → vote-delegation-tx-builder-DRJwPXkD.js} +9 -7
- package/dist/watch-FGE4B_Ge.js +13056 -0
- package/dist/watch-imlsRZDp.cjs +52207 -0
- package/package.json +95 -3
- package/dist/Address-4KjeDt_x.cjs +0 -17269
- package/dist/Address-_VPkf7Xh.js +0 -17101
- package/dist/account-guards.stable-BKyYPj4z.cjs +0 -10
- package/dist/account-guards.stable-BdmQ43vC.js +0 -5
- package/dist/init-BR9ZIbED.cjs +0 -378
- package/dist/init-B_k1RUN_.cjs +0 -21
- package/dist/init-Bs3b5ZQH.js +0 -378
- package/dist/init-ChfcrHgG2.cjs +0 -4354
- package/dist/init-D1uUMMpG.js +0 -19
- package/dist/init-DV1OSZiK.js +0 -4352
- package/dist/modules-cardano-BINzpXpk.js +0 -5454
- package/dist/modules-cardano-Dt8OwoQb.cjs +0 -5640
- package/dist/slice-Caf98m0d2.js +0 -107
- package/dist/slice-PM6llajQ2.cjs +0 -125
- /package/dist/{BigIntMath-CoJWXt1h.cjs → BigIntMath-CBciEQn2.cjs} +0 -0
- /package/dist/{BigIntMath-BWUJOsOW.js → BigIntMath-X3EniYDo.js} +0 -0
- /package/dist/{ChainId-sdLmlIRk.cjs → ChainId-CNPSU9nn.cjs} +0 -0
- /package/dist/{ChainId-CKbm87yQ.js → ChainId-CeoG8Sov.js} +0 -0
- /package/dist/{_polyfill-node.process-4fnlkbBi.cjs → _polyfill-node.process-5UxyjoHG.cjs} +0 -0
- /package/dist/{account-id.vo-Xpgnu-av.cjs → account-id.vo-DYZBZQsz.cjs} +0 -0
- /package/dist/{account-id.vo-DP0BtOoF.js → account-id.vo-KDTWJ-W5.js} +0 -0
- /package/dist/{actions-BNagEO6m.cjs → actions-BnHFVSr_.cjs} +0 -0
- /package/dist/{actions-BWTyAr7B.js → actions-Cwj0ApZf.js} +0 -0
- /package/dist/{asyncoption-po7-RiA5.cjs → asyncoption-CYcZNBRM.cjs} +0 -0
- /package/dist/{asyncoption-CzIVH5Y1.js → asyncoption-DZQGfznq.js} +0 -0
- /package/dist/{bignum.vo-DhhZ9HP1.js → bignum.vo-Co6tMH2q.js} +0 -0
- /package/dist/{bignum.vo-CpkrIXjH.cjs → bignum.vo-Du-bpvar.cjs} +0 -0
- /package/dist/{blockchain-network-id.vo-CbgrAY_K.js → blockchain-network-id.vo-C6Jowh8t.js} +0 -0
- /package/dist/{blockchain-network-id.vo-5iC6Kffo.cjs → blockchain-network-id.vo-DEQ14dYj.cjs} +0 -0
- /package/dist/{composite-signer-factory-DABpCe1_.js → composite-signer-factory-D9RWY-1V.js} +0 -0
- /package/dist/{composite-signer-factory-BizuNPP7.cjs → composite-signer-factory-v4Pxn8bA.cjs} +0 -0
- /package/dist/{error-ggOihIfv.cjs → error-B6wj9nPv.cjs} +0 -0
- /package/dist/{error-DHKO2iS4.js → error-CvEYL98P.js} +0 -0
- /package/dist/{esm-browser-DnXNvpcn.cjs → esm-browser-CZbMeVod.cjs} +0 -0
- /package/dist/{esm-browser-BBVQuyQv.js → esm-browser-DpAD_RKv.js} +0 -0
- /package/dist/{feature-flag-key.vo-DoGK5Bfh.js → feature-flag-key.vo-9reURsOQ.js} +0 -0
- /package/dist/{feature-flag-key.vo-CP1Z9s8e.cjs → feature-flag-key.vo-KTIdnzYX.cjs} +0 -0
- /package/dist/{first-state-of-status-Bx4-QQ5m.cjs → first-state-of-status-9ICeDNSa.cjs} +0 -0
- /package/dist/{first-state-of-status-D7XzEuSa.js → first-state-of-status-BscbKj_t.js} +0 -0
- /package/dist/{init-4319psUJ.cjs → init-BT67pd9x.cjs} +0 -0
- /package/dist/{init-AFUM1TSg.js → init-CHk1fvJ2.js} +0 -0
- /package/dist/{init-ZX90nEJe2.js → init-DIyNx6DZ.js} +0 -0
- /package/dist/{init-CTQ2g6Xt.js → init-DtxxFaCx.js} +0 -0
- /package/dist/{init-Dt1Xifg_2.cjs → init-J8QobR93.cjs} +0 -0
- /package/dist/{init-BNewLCqw.cjs → init-xzZPlQwB.cjs} +0 -0
- /package/dist/{is-redux-persist-state-DxJSsvxB.cjs → is-redux-persist-state-C5luvPEH.cjs} +0 -0
- /package/dist/{is-redux-persist-state-Bl2n4VMr.js → is-redux-persist-state-CjcqyCoh.js} +0 -0
- /package/dist/{isNotNil-CZxBMfL5.js → isNotNil-Be7gCY0m.js} +0 -0
- /package/dist/{isNotNil-C_SO1tcC.cjs → isNotNil-CrYIUFry.cjs} +0 -0
- /package/dist/{logging-BvMDKgl0.js → logging-BAMMfn5j.js} +0 -0
- /package/dist/{logging-Bh9ikph3.cjs → logging-CbxgIX9V.cjs} +0 -0
- /package/dist/{metadatum-B-sxBnSY.cjs → metadatum-BGvFqGPt.cjs} +0 -0
- /package/dist/{metadatum-Ego4jVas.js → metadatum-BVocMYy_.js} +0 -0
- /package/dist/{repo-slice-BzZQUTj8.cjs → repo-slice-BB_W-6OL.cjs} +0 -0
- /package/dist/{repo-slice-vCcQJotS.js → repo-slice-BQlssw9M.js} +0 -0
- /package/dist/{reselect-BPkMzw3k.js → reselect-JIgawvPe.js} +0 -0
- /package/dist/{serializable-BxFUShKY.js → serializable-F7OtYl8d.js} +0 -0
- /package/dist/{serializable-DWgkHhv_.cjs → serializable-n3UoxbZc.cjs} +0 -0
- /package/dist/{slice-DY-DNtSi.js → slice-5dGBAz6w.js} +0 -0
- /package/dist/{slice-BEFoeqgr.cjs → slice-BzJgg9FS.cjs} +0 -0
- /package/dist/{src-CPmX4KUh.cjs → src-CeBNkonz.cjs} +0 -0
- /package/dist/{src-XOZXPKxe.js → src-Cv1ifqbe.js} +0 -0
- /package/dist/{time-CQPt4FdU.js → time-ByoKevdZ.js} +0 -0
- /package/dist/{time-Blvoyh9G.cjs → time-qD7edGU0.cjs} +0 -0
- /package/dist/{time.vo-Xln4yGBU.js → time.vo-C17-tYq3.js} +0 -0
- /package/dist/{time.vo-rwWwJzmP.cjs → time.vo-TmYE-_Y2.cjs} +0 -0
- /package/dist/{toEmpty-CzmoZVLN.cjs → toEmpty-Db6V94Mf.cjs} +0 -0
- /package/dist/{toEmpty-DzLd-ZCi.js → toEmpty-Djj-QbpI.js} +0 -0
- /package/dist/{token-id.vo-l8fuSpem.cjs → token-id.vo-CZ622zcZ.cjs} +0 -0
- /package/dist/{token-id.vo-DMKSaMlc.js → token-id.vo-IDI9C_Qm.js} +0 -0
- /package/dist/{types-B61DQoFW.js → types-By-XeXWg.js} +0 -0
- /package/dist/{types-CUC-Kcqh.cjs → types-Cn6WlQV6.cjs} +0 -0
- /package/dist/{util-BV3iGOrz.cjs → util-Cp1h58uD.cjs} +0 -0
- /package/dist/{util-BsQKLorV.js → util-DHppXj7U.js} +0 -0
- /package/dist/{util-selector-CKIyoAOz.js → util-selector-BWmHpo92.js} +0 -0
- /package/dist/{util-selector-C9H5RsNw.cjs → util-selector-glXkO-jR.cjs} +0 -0
- /package/dist/{while-active-CNXeLxre.js → while-active-CDBnUlQA.js} +0 -0
- /package/dist/{while-active-BsDWSNrO.cjs → while-active-I2TlHtm7.cjs} +0 -0
|
@@ -0,0 +1,2761 @@
|
|
|
1
|
+
import { Lt as utils } from "./Address-_c_-9hLC.js";
|
|
2
|
+
import { E as toBytes$1, b as kdfInputToBytes, c as aexists, f as bytesToHex, l as ahash, m as clean, o as Hash, p as checkOpts, s as abytes, u as anumber, v as createView, y as hexToBytes } from "./_md-gbUqlhqd.js";
|
|
3
|
+
import { n as sha512, t as sha256 } from "./sha2-c4sB6peD.js";
|
|
4
|
+
//#region ../../node_modules/@noble/hashes/esm/hmac.js
|
|
5
|
+
/**
|
|
6
|
+
* HMAC: RFC2104 message authentication code.
|
|
7
|
+
* @module
|
|
8
|
+
*/
|
|
9
|
+
var HMAC = class extends Hash {
|
|
10
|
+
constructor(hash, _key) {
|
|
11
|
+
super();
|
|
12
|
+
this.finished = false;
|
|
13
|
+
this.destroyed = false;
|
|
14
|
+
ahash(hash);
|
|
15
|
+
const key = toBytes$1(_key);
|
|
16
|
+
this.iHash = hash.create();
|
|
17
|
+
if (typeof this.iHash.update !== "function") throw new Error("Expected instance of class which extends utils.Hash");
|
|
18
|
+
this.blockLen = this.iHash.blockLen;
|
|
19
|
+
this.outputLen = this.iHash.outputLen;
|
|
20
|
+
const blockLen = this.blockLen;
|
|
21
|
+
const pad = new Uint8Array(blockLen);
|
|
22
|
+
pad.set(key.length > blockLen ? hash.create().update(key).digest() : key);
|
|
23
|
+
for (let i = 0; i < pad.length; i++) pad[i] ^= 54;
|
|
24
|
+
this.iHash.update(pad);
|
|
25
|
+
this.oHash = hash.create();
|
|
26
|
+
for (let i = 0; i < pad.length; i++) pad[i] ^= 106;
|
|
27
|
+
this.oHash.update(pad);
|
|
28
|
+
clean(pad);
|
|
29
|
+
}
|
|
30
|
+
update(buf) {
|
|
31
|
+
aexists(this);
|
|
32
|
+
this.iHash.update(buf);
|
|
33
|
+
return this;
|
|
34
|
+
}
|
|
35
|
+
digestInto(out) {
|
|
36
|
+
aexists(this);
|
|
37
|
+
abytes(out, this.outputLen);
|
|
38
|
+
this.finished = true;
|
|
39
|
+
this.iHash.digestInto(out);
|
|
40
|
+
this.oHash.update(out);
|
|
41
|
+
this.oHash.digestInto(out);
|
|
42
|
+
this.destroy();
|
|
43
|
+
}
|
|
44
|
+
digest() {
|
|
45
|
+
const out = new Uint8Array(this.oHash.outputLen);
|
|
46
|
+
this.digestInto(out);
|
|
47
|
+
return out;
|
|
48
|
+
}
|
|
49
|
+
_cloneInto(to) {
|
|
50
|
+
to || (to = Object.create(Object.getPrototypeOf(this), {}));
|
|
51
|
+
const { oHash, iHash, finished, destroyed, blockLen, outputLen } = this;
|
|
52
|
+
to = to;
|
|
53
|
+
to.finished = finished;
|
|
54
|
+
to.destroyed = destroyed;
|
|
55
|
+
to.blockLen = blockLen;
|
|
56
|
+
to.outputLen = outputLen;
|
|
57
|
+
to.oHash = oHash._cloneInto(to.oHash);
|
|
58
|
+
to.iHash = iHash._cloneInto(to.iHash);
|
|
59
|
+
return to;
|
|
60
|
+
}
|
|
61
|
+
clone() {
|
|
62
|
+
return this._cloneInto();
|
|
63
|
+
}
|
|
64
|
+
destroy() {
|
|
65
|
+
this.destroyed = true;
|
|
66
|
+
this.oHash.destroy();
|
|
67
|
+
this.iHash.destroy();
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
/**
|
|
71
|
+
* HMAC: RFC2104 message authentication code.
|
|
72
|
+
* @param hash - function that would be used e.g. sha256
|
|
73
|
+
* @param key - message key
|
|
74
|
+
* @param message - message data
|
|
75
|
+
* @example
|
|
76
|
+
* import { hmac } from '@noble/hashes/hmac';
|
|
77
|
+
* import { sha256 } from '@noble/hashes/sha2';
|
|
78
|
+
* const mac1 = hmac(sha256, 'key', 'message');
|
|
79
|
+
*/
|
|
80
|
+
const hmac = (hash, key, message) => new HMAC(hash, key).update(message).digest();
|
|
81
|
+
hmac.create = (hash, key) => new HMAC(hash, key);
|
|
82
|
+
//#endregion
|
|
83
|
+
//#region ../../node_modules/@noble/hashes/esm/hkdf.js
|
|
84
|
+
/**
|
|
85
|
+
* HKDF (RFC 5869): extract + expand in one step.
|
|
86
|
+
* See https://soatok.blog/2021/11/17/understanding-hkdf/.
|
|
87
|
+
* @module
|
|
88
|
+
*/
|
|
89
|
+
/**
|
|
90
|
+
* HKDF-extract from spec. Less important part. `HKDF-Extract(IKM, salt) -> PRK`
|
|
91
|
+
* Arguments position differs from spec (IKM is first one, since it is not optional)
|
|
92
|
+
* @param hash - hash function that would be used (e.g. sha256)
|
|
93
|
+
* @param ikm - input keying material, the initial key
|
|
94
|
+
* @param salt - optional salt value (a non-secret random value)
|
|
95
|
+
*/
|
|
96
|
+
function extract(hash, ikm, salt) {
|
|
97
|
+
ahash(hash);
|
|
98
|
+
if (salt === void 0) salt = new Uint8Array(hash.outputLen);
|
|
99
|
+
return hmac(hash, toBytes$1(salt), toBytes$1(ikm));
|
|
100
|
+
}
|
|
101
|
+
const HKDF_COUNTER = /* @__PURE__ */ Uint8Array.from([0]);
|
|
102
|
+
const EMPTY_BUFFER = /* @__PURE__ */ Uint8Array.of();
|
|
103
|
+
/**
|
|
104
|
+
* HKDF-expand from the spec. The most important part. `HKDF-Expand(PRK, info, L) -> OKM`
|
|
105
|
+
* @param hash - hash function that would be used (e.g. sha256)
|
|
106
|
+
* @param prk - a pseudorandom key of at least HashLen octets (usually, the output from the extract step)
|
|
107
|
+
* @param info - optional context and application specific information (can be a zero-length string)
|
|
108
|
+
* @param length - length of output keying material in bytes
|
|
109
|
+
*/
|
|
110
|
+
function expand(hash, prk, info, length = 32) {
|
|
111
|
+
ahash(hash);
|
|
112
|
+
anumber(length);
|
|
113
|
+
const olen = hash.outputLen;
|
|
114
|
+
if (length > 255 * olen) throw new Error("Length should be <= 255*HashLen");
|
|
115
|
+
const blocks = Math.ceil(length / olen);
|
|
116
|
+
if (info === void 0) info = EMPTY_BUFFER;
|
|
117
|
+
const okm = new Uint8Array(blocks * olen);
|
|
118
|
+
const HMAC = hmac.create(hash, prk);
|
|
119
|
+
const HMACTmp = HMAC._cloneInto();
|
|
120
|
+
const T = new Uint8Array(HMAC.outputLen);
|
|
121
|
+
for (let counter = 0; counter < blocks; counter++) {
|
|
122
|
+
HKDF_COUNTER[0] = counter + 1;
|
|
123
|
+
HMACTmp.update(counter === 0 ? EMPTY_BUFFER : T).update(info).update(HKDF_COUNTER).digestInto(T);
|
|
124
|
+
okm.set(T, olen * counter);
|
|
125
|
+
HMAC._cloneInto(HMACTmp);
|
|
126
|
+
}
|
|
127
|
+
HMAC.destroy();
|
|
128
|
+
HMACTmp.destroy();
|
|
129
|
+
clean(T, HKDF_COUNTER);
|
|
130
|
+
return okm.slice(0, length);
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* HKDF (RFC 5869): derive keys from an initial input.
|
|
134
|
+
* Combines hkdf_extract + hkdf_expand in one step
|
|
135
|
+
* @param hash - hash function that would be used (e.g. sha256)
|
|
136
|
+
* @param ikm - input keying material, the initial key
|
|
137
|
+
* @param salt - optional salt value (a non-secret random value)
|
|
138
|
+
* @param info - optional context and application specific information (can be a zero-length string)
|
|
139
|
+
* @param length - length of output keying material in bytes
|
|
140
|
+
* @example
|
|
141
|
+
* import { hkdf } from '@noble/hashes/hkdf';
|
|
142
|
+
* import { sha256 } from '@noble/hashes/sha2';
|
|
143
|
+
* import { randomBytes } from '@noble/hashes/utils';
|
|
144
|
+
* const inputKey = randomBytes(32);
|
|
145
|
+
* const salt = randomBytes(32);
|
|
146
|
+
* const info = 'application-key';
|
|
147
|
+
* const hk1 = hkdf(sha256, inputKey, salt, info, 32);
|
|
148
|
+
*/
|
|
149
|
+
const hkdf = (hash, ikm, salt, info, length) => expand(hash, extract(hash, ikm, salt), info, length);
|
|
150
|
+
//#endregion
|
|
151
|
+
//#region ../../packages/lib/crypto/src/value-objects/entropy-hex.vo.ts
|
|
152
|
+
const ENTROPY_BYTE_LENGTH = 32;
|
|
153
|
+
const ENTROPY_HEX_LENGTH = ENTROPY_BYTE_LENGTH * 2;
|
|
154
|
+
const HEX_PATTERN = /^[0-9a-fA-F]+$/;
|
|
155
|
+
/**
|
|
156
|
+
* Types 32 bytes of entropy, as 64 hex characters, for `Mnemonic.deriveFrom`.
|
|
157
|
+
* Throws when the value has another length or is not hex.
|
|
158
|
+
*/
|
|
159
|
+
const EntropyHex = (value) => {
|
|
160
|
+
if (value.length !== ENTROPY_HEX_LENGTH) throw new Error(`EntropyHex must be ${ENTROPY_BYTE_LENGTH} bytes (${ENTROPY_HEX_LENGTH} hex characters), got ${value.length}`);
|
|
161
|
+
if (!HEX_PATTERN.test(value)) throw new Error("EntropyHex must be a hex-encoded string");
|
|
162
|
+
return value;
|
|
163
|
+
};
|
|
164
|
+
//#endregion
|
|
165
|
+
//#region ../../node_modules/@noble/hashes/esm/pbkdf2.js
|
|
166
|
+
/**
|
|
167
|
+
* PBKDF (RFC 2898). Can be used to create a key from password and salt.
|
|
168
|
+
* @module
|
|
169
|
+
*/
|
|
170
|
+
function pbkdf2Init(hash, _password, _salt, _opts) {
|
|
171
|
+
ahash(hash);
|
|
172
|
+
const { c, dkLen, asyncTick } = checkOpts({
|
|
173
|
+
dkLen: 32,
|
|
174
|
+
asyncTick: 10
|
|
175
|
+
}, _opts);
|
|
176
|
+
anumber(c);
|
|
177
|
+
anumber(dkLen);
|
|
178
|
+
anumber(asyncTick);
|
|
179
|
+
if (c < 1) throw new Error("iterations (c) should be >= 1");
|
|
180
|
+
const password = kdfInputToBytes(_password);
|
|
181
|
+
const salt = kdfInputToBytes(_salt);
|
|
182
|
+
const DK = new Uint8Array(dkLen);
|
|
183
|
+
const PRF = hmac.create(hash, password);
|
|
184
|
+
return {
|
|
185
|
+
c,
|
|
186
|
+
dkLen,
|
|
187
|
+
asyncTick,
|
|
188
|
+
DK,
|
|
189
|
+
PRF,
|
|
190
|
+
PRFSalt: PRF._cloneInto().update(salt)
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
function pbkdf2Output(PRF, PRFSalt, DK, prfW, u) {
|
|
194
|
+
PRF.destroy();
|
|
195
|
+
PRFSalt.destroy();
|
|
196
|
+
if (prfW) prfW.destroy();
|
|
197
|
+
clean(u);
|
|
198
|
+
return DK;
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* PBKDF2-HMAC: RFC 2898 key derivation function
|
|
202
|
+
* @param hash - hash function that would be used e.g. sha256
|
|
203
|
+
* @param password - password from which a derived key is generated
|
|
204
|
+
* @param salt - cryptographic salt
|
|
205
|
+
* @param opts - {c, dkLen} where c is work factor and dkLen is output message size
|
|
206
|
+
* @example
|
|
207
|
+
* const key = pbkdf2(sha256, 'password', 'salt', { dkLen: 32, c: Math.pow(2, 18) });
|
|
208
|
+
*/
|
|
209
|
+
function pbkdf2(hash, password, salt, opts) {
|
|
210
|
+
const { c, dkLen, DK, PRF, PRFSalt } = pbkdf2Init(hash, password, salt, opts);
|
|
211
|
+
let prfW;
|
|
212
|
+
const arr = new Uint8Array(4);
|
|
213
|
+
const view = createView(arr);
|
|
214
|
+
const u = new Uint8Array(PRF.outputLen);
|
|
215
|
+
for (let ti = 1, pos = 0; pos < dkLen; ti++, pos += PRF.outputLen) {
|
|
216
|
+
const Ti = DK.subarray(pos, pos + PRF.outputLen);
|
|
217
|
+
view.setInt32(0, ti, false);
|
|
218
|
+
(prfW = PRFSalt._cloneInto(prfW)).update(arr).digestInto(u);
|
|
219
|
+
Ti.set(u.subarray(0, Ti.length));
|
|
220
|
+
for (let ui = 1; ui < c; ui++) {
|
|
221
|
+
PRF._cloneInto(prfW).update(u).digestInto(u);
|
|
222
|
+
for (let i = 0; i < Ti.length; i++) Ti[i] ^= u[i];
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
return pbkdf2Output(PRF, PRFSalt, DK, prfW, u);
|
|
226
|
+
}
|
|
227
|
+
//#endregion
|
|
228
|
+
//#region ../../packages/lib/crypto/node_modules/@scure/bip39/esm/index.js
|
|
229
|
+
/**
|
|
230
|
+
* Audited & minimal JS implementation of
|
|
231
|
+
* [BIP39 mnemonic phrases](https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki).
|
|
232
|
+
* @module
|
|
233
|
+
* @example
|
|
234
|
+
```js
|
|
235
|
+
import * as bip39 from '@scure/bip39';
|
|
236
|
+
import { wordlist } from '@scure/bip39/wordlists/english';
|
|
237
|
+
const mn = bip39.generateMnemonic(wordlist);
|
|
238
|
+
console.log(mn);
|
|
239
|
+
const ent = bip39.mnemonicToEntropy(mn, wordlist)
|
|
240
|
+
bip39.entropyToMnemonic(ent, wordlist);
|
|
241
|
+
bip39.validateMnemonic(mn, wordlist);
|
|
242
|
+
await bip39.mnemonicToSeed(mn, 'password');
|
|
243
|
+
bip39.mnemonicToSeedSync(mn, 'password');
|
|
244
|
+
|
|
245
|
+
// Wordlists
|
|
246
|
+
import { wordlist as czech } from '@scure/bip39/wordlists/czech';
|
|
247
|
+
import { wordlist as english } from '@scure/bip39/wordlists/english';
|
|
248
|
+
import { wordlist as french } from '@scure/bip39/wordlists/french';
|
|
249
|
+
import { wordlist as italian } from '@scure/bip39/wordlists/italian';
|
|
250
|
+
import { wordlist as japanese } from '@scure/bip39/wordlists/japanese';
|
|
251
|
+
import { wordlist as korean } from '@scure/bip39/wordlists/korean';
|
|
252
|
+
import { wordlist as portuguese } from '@scure/bip39/wordlists/portuguese';
|
|
253
|
+
import { wordlist as simplifiedChinese } from '@scure/bip39/wordlists/simplified-chinese';
|
|
254
|
+
import { wordlist as spanish } from '@scure/bip39/wordlists/spanish';
|
|
255
|
+
import { wordlist as traditionalChinese } from '@scure/bip39/wordlists/traditional-chinese';
|
|
256
|
+
```
|
|
257
|
+
*/
|
|
258
|
+
/*! scure-bip39 - MIT License (c) 2022 Patricio Palladino, Paul Miller (paulmillr.com) */
|
|
259
|
+
const isJapanese = (wordlist) => wordlist[0] === "あいこくしん";
|
|
260
|
+
function nfkd(str) {
|
|
261
|
+
if (typeof str !== "string") throw new TypeError("invalid mnemonic type: " + typeof str);
|
|
262
|
+
return str.normalize("NFKD");
|
|
263
|
+
}
|
|
264
|
+
function normalize(str) {
|
|
265
|
+
const norm = nfkd(str);
|
|
266
|
+
const words = norm.split(" ");
|
|
267
|
+
if (![
|
|
268
|
+
12,
|
|
269
|
+
15,
|
|
270
|
+
18,
|
|
271
|
+
21,
|
|
272
|
+
24
|
|
273
|
+
].includes(words.length)) throw new Error("Invalid mnemonic");
|
|
274
|
+
return {
|
|
275
|
+
nfkd: norm,
|
|
276
|
+
words
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
function aentropy(ent) {
|
|
280
|
+
abytes(ent, 16, 20, 24, 28, 32);
|
|
281
|
+
}
|
|
282
|
+
const calcChecksum = (entropy) => {
|
|
283
|
+
const bitsLeft = 8 - entropy.length / 4;
|
|
284
|
+
return new Uint8Array([sha256(entropy)[0] >> bitsLeft << bitsLeft]);
|
|
285
|
+
};
|
|
286
|
+
function getCoder(wordlist) {
|
|
287
|
+
if (!Array.isArray(wordlist) || wordlist.length !== 2048 || typeof wordlist[0] !== "string") throw new Error("Wordlist: expected array of 2048 strings");
|
|
288
|
+
wordlist.forEach((i) => {
|
|
289
|
+
if (typeof i !== "string") throw new Error("wordlist: non-string element: " + i);
|
|
290
|
+
});
|
|
291
|
+
return utils.chain(utils.checksum(1, calcChecksum), utils.radix2(11, true), utils.alphabet(wordlist));
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Reversible: Converts raw entropy in form of byte array to mnemonic string.
|
|
295
|
+
* @param entropy byte array
|
|
296
|
+
* @param wordlist imported wordlist for specific language
|
|
297
|
+
* @returns 12-24 words
|
|
298
|
+
* @example
|
|
299
|
+
* const ent = new Uint8Array([
|
|
300
|
+
* 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
|
|
301
|
+
* 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f
|
|
302
|
+
* ]);
|
|
303
|
+
* entropyToMnemonic(ent, wordlist);
|
|
304
|
+
* // 'legal winner thank year wave sausage worth useful legal winner thank yellow'
|
|
305
|
+
*/
|
|
306
|
+
function entropyToMnemonic(entropy, wordlist) {
|
|
307
|
+
aentropy(entropy);
|
|
308
|
+
return getCoder(wordlist).encode(entropy).join(isJapanese(wordlist) ? " " : " ");
|
|
309
|
+
}
|
|
310
|
+
const psalt = (passphrase) => nfkd("mnemonic" + passphrase);
|
|
311
|
+
/**
|
|
312
|
+
* Irreversible: Uses KDF to derive 64 bytes of key data from mnemonic + optional password.
|
|
313
|
+
* @param mnemonic 12-24 words
|
|
314
|
+
* @param passphrase string that will additionally protect the key
|
|
315
|
+
* @returns 64 bytes of key data
|
|
316
|
+
* @example
|
|
317
|
+
* const mnem = 'legal winner thank year wave sausage worth useful legal winner thank yellow';
|
|
318
|
+
* mnemonicToSeedSync(mnem, 'password');
|
|
319
|
+
* // new Uint8Array([...64 bytes])
|
|
320
|
+
*/
|
|
321
|
+
function mnemonicToSeedSync(mnemonic, passphrase = "") {
|
|
322
|
+
return pbkdf2(sha512, normalize(mnemonic).nfkd, psalt(passphrase), {
|
|
323
|
+
c: 2048,
|
|
324
|
+
dkLen: 64
|
|
325
|
+
});
|
|
326
|
+
}
|
|
327
|
+
//#endregion
|
|
328
|
+
//#region ../../node_modules/@scure/bip39/wordlists/english.js
|
|
329
|
+
/** English BIP39 wordlist. */
|
|
330
|
+
const wordlist = /* @__PURE__ */ Object.freeze(`abandon
|
|
331
|
+
ability
|
|
332
|
+
able
|
|
333
|
+
about
|
|
334
|
+
above
|
|
335
|
+
absent
|
|
336
|
+
absorb
|
|
337
|
+
abstract
|
|
338
|
+
absurd
|
|
339
|
+
abuse
|
|
340
|
+
access
|
|
341
|
+
accident
|
|
342
|
+
account
|
|
343
|
+
accuse
|
|
344
|
+
achieve
|
|
345
|
+
acid
|
|
346
|
+
acoustic
|
|
347
|
+
acquire
|
|
348
|
+
across
|
|
349
|
+
act
|
|
350
|
+
action
|
|
351
|
+
actor
|
|
352
|
+
actress
|
|
353
|
+
actual
|
|
354
|
+
adapt
|
|
355
|
+
add
|
|
356
|
+
addict
|
|
357
|
+
address
|
|
358
|
+
adjust
|
|
359
|
+
admit
|
|
360
|
+
adult
|
|
361
|
+
advance
|
|
362
|
+
advice
|
|
363
|
+
aerobic
|
|
364
|
+
affair
|
|
365
|
+
afford
|
|
366
|
+
afraid
|
|
367
|
+
again
|
|
368
|
+
age
|
|
369
|
+
agent
|
|
370
|
+
agree
|
|
371
|
+
ahead
|
|
372
|
+
aim
|
|
373
|
+
air
|
|
374
|
+
airport
|
|
375
|
+
aisle
|
|
376
|
+
alarm
|
|
377
|
+
album
|
|
378
|
+
alcohol
|
|
379
|
+
alert
|
|
380
|
+
alien
|
|
381
|
+
all
|
|
382
|
+
alley
|
|
383
|
+
allow
|
|
384
|
+
almost
|
|
385
|
+
alone
|
|
386
|
+
alpha
|
|
387
|
+
already
|
|
388
|
+
also
|
|
389
|
+
alter
|
|
390
|
+
always
|
|
391
|
+
amateur
|
|
392
|
+
amazing
|
|
393
|
+
among
|
|
394
|
+
amount
|
|
395
|
+
amused
|
|
396
|
+
analyst
|
|
397
|
+
anchor
|
|
398
|
+
ancient
|
|
399
|
+
anger
|
|
400
|
+
angle
|
|
401
|
+
angry
|
|
402
|
+
animal
|
|
403
|
+
ankle
|
|
404
|
+
announce
|
|
405
|
+
annual
|
|
406
|
+
another
|
|
407
|
+
answer
|
|
408
|
+
antenna
|
|
409
|
+
antique
|
|
410
|
+
anxiety
|
|
411
|
+
any
|
|
412
|
+
apart
|
|
413
|
+
apology
|
|
414
|
+
appear
|
|
415
|
+
apple
|
|
416
|
+
approve
|
|
417
|
+
april
|
|
418
|
+
arch
|
|
419
|
+
arctic
|
|
420
|
+
area
|
|
421
|
+
arena
|
|
422
|
+
argue
|
|
423
|
+
arm
|
|
424
|
+
armed
|
|
425
|
+
armor
|
|
426
|
+
army
|
|
427
|
+
around
|
|
428
|
+
arrange
|
|
429
|
+
arrest
|
|
430
|
+
arrive
|
|
431
|
+
arrow
|
|
432
|
+
art
|
|
433
|
+
artefact
|
|
434
|
+
artist
|
|
435
|
+
artwork
|
|
436
|
+
ask
|
|
437
|
+
aspect
|
|
438
|
+
assault
|
|
439
|
+
asset
|
|
440
|
+
assist
|
|
441
|
+
assume
|
|
442
|
+
asthma
|
|
443
|
+
athlete
|
|
444
|
+
atom
|
|
445
|
+
attack
|
|
446
|
+
attend
|
|
447
|
+
attitude
|
|
448
|
+
attract
|
|
449
|
+
auction
|
|
450
|
+
audit
|
|
451
|
+
august
|
|
452
|
+
aunt
|
|
453
|
+
author
|
|
454
|
+
auto
|
|
455
|
+
autumn
|
|
456
|
+
average
|
|
457
|
+
avocado
|
|
458
|
+
avoid
|
|
459
|
+
awake
|
|
460
|
+
aware
|
|
461
|
+
away
|
|
462
|
+
awesome
|
|
463
|
+
awful
|
|
464
|
+
awkward
|
|
465
|
+
axis
|
|
466
|
+
baby
|
|
467
|
+
bachelor
|
|
468
|
+
bacon
|
|
469
|
+
badge
|
|
470
|
+
bag
|
|
471
|
+
balance
|
|
472
|
+
balcony
|
|
473
|
+
ball
|
|
474
|
+
bamboo
|
|
475
|
+
banana
|
|
476
|
+
banner
|
|
477
|
+
bar
|
|
478
|
+
barely
|
|
479
|
+
bargain
|
|
480
|
+
barrel
|
|
481
|
+
base
|
|
482
|
+
basic
|
|
483
|
+
basket
|
|
484
|
+
battle
|
|
485
|
+
beach
|
|
486
|
+
bean
|
|
487
|
+
beauty
|
|
488
|
+
because
|
|
489
|
+
become
|
|
490
|
+
beef
|
|
491
|
+
before
|
|
492
|
+
begin
|
|
493
|
+
behave
|
|
494
|
+
behind
|
|
495
|
+
believe
|
|
496
|
+
below
|
|
497
|
+
belt
|
|
498
|
+
bench
|
|
499
|
+
benefit
|
|
500
|
+
best
|
|
501
|
+
betray
|
|
502
|
+
better
|
|
503
|
+
between
|
|
504
|
+
beyond
|
|
505
|
+
bicycle
|
|
506
|
+
bid
|
|
507
|
+
bike
|
|
508
|
+
bind
|
|
509
|
+
biology
|
|
510
|
+
bird
|
|
511
|
+
birth
|
|
512
|
+
bitter
|
|
513
|
+
black
|
|
514
|
+
blade
|
|
515
|
+
blame
|
|
516
|
+
blanket
|
|
517
|
+
blast
|
|
518
|
+
bleak
|
|
519
|
+
bless
|
|
520
|
+
blind
|
|
521
|
+
blood
|
|
522
|
+
blossom
|
|
523
|
+
blouse
|
|
524
|
+
blue
|
|
525
|
+
blur
|
|
526
|
+
blush
|
|
527
|
+
board
|
|
528
|
+
boat
|
|
529
|
+
body
|
|
530
|
+
boil
|
|
531
|
+
bomb
|
|
532
|
+
bone
|
|
533
|
+
bonus
|
|
534
|
+
book
|
|
535
|
+
boost
|
|
536
|
+
border
|
|
537
|
+
boring
|
|
538
|
+
borrow
|
|
539
|
+
boss
|
|
540
|
+
bottom
|
|
541
|
+
bounce
|
|
542
|
+
box
|
|
543
|
+
boy
|
|
544
|
+
bracket
|
|
545
|
+
brain
|
|
546
|
+
brand
|
|
547
|
+
brass
|
|
548
|
+
brave
|
|
549
|
+
bread
|
|
550
|
+
breeze
|
|
551
|
+
brick
|
|
552
|
+
bridge
|
|
553
|
+
brief
|
|
554
|
+
bright
|
|
555
|
+
bring
|
|
556
|
+
brisk
|
|
557
|
+
broccoli
|
|
558
|
+
broken
|
|
559
|
+
bronze
|
|
560
|
+
broom
|
|
561
|
+
brother
|
|
562
|
+
brown
|
|
563
|
+
brush
|
|
564
|
+
bubble
|
|
565
|
+
buddy
|
|
566
|
+
budget
|
|
567
|
+
buffalo
|
|
568
|
+
build
|
|
569
|
+
bulb
|
|
570
|
+
bulk
|
|
571
|
+
bullet
|
|
572
|
+
bundle
|
|
573
|
+
bunker
|
|
574
|
+
burden
|
|
575
|
+
burger
|
|
576
|
+
burst
|
|
577
|
+
bus
|
|
578
|
+
business
|
|
579
|
+
busy
|
|
580
|
+
butter
|
|
581
|
+
buyer
|
|
582
|
+
buzz
|
|
583
|
+
cabbage
|
|
584
|
+
cabin
|
|
585
|
+
cable
|
|
586
|
+
cactus
|
|
587
|
+
cage
|
|
588
|
+
cake
|
|
589
|
+
call
|
|
590
|
+
calm
|
|
591
|
+
camera
|
|
592
|
+
camp
|
|
593
|
+
can
|
|
594
|
+
canal
|
|
595
|
+
cancel
|
|
596
|
+
candy
|
|
597
|
+
cannon
|
|
598
|
+
canoe
|
|
599
|
+
canvas
|
|
600
|
+
canyon
|
|
601
|
+
capable
|
|
602
|
+
capital
|
|
603
|
+
captain
|
|
604
|
+
car
|
|
605
|
+
carbon
|
|
606
|
+
card
|
|
607
|
+
cargo
|
|
608
|
+
carpet
|
|
609
|
+
carry
|
|
610
|
+
cart
|
|
611
|
+
case
|
|
612
|
+
cash
|
|
613
|
+
casino
|
|
614
|
+
castle
|
|
615
|
+
casual
|
|
616
|
+
cat
|
|
617
|
+
catalog
|
|
618
|
+
catch
|
|
619
|
+
category
|
|
620
|
+
cattle
|
|
621
|
+
caught
|
|
622
|
+
cause
|
|
623
|
+
caution
|
|
624
|
+
cave
|
|
625
|
+
ceiling
|
|
626
|
+
celery
|
|
627
|
+
cement
|
|
628
|
+
census
|
|
629
|
+
century
|
|
630
|
+
cereal
|
|
631
|
+
certain
|
|
632
|
+
chair
|
|
633
|
+
chalk
|
|
634
|
+
champion
|
|
635
|
+
change
|
|
636
|
+
chaos
|
|
637
|
+
chapter
|
|
638
|
+
charge
|
|
639
|
+
chase
|
|
640
|
+
chat
|
|
641
|
+
cheap
|
|
642
|
+
check
|
|
643
|
+
cheese
|
|
644
|
+
chef
|
|
645
|
+
cherry
|
|
646
|
+
chest
|
|
647
|
+
chicken
|
|
648
|
+
chief
|
|
649
|
+
child
|
|
650
|
+
chimney
|
|
651
|
+
choice
|
|
652
|
+
choose
|
|
653
|
+
chronic
|
|
654
|
+
chuckle
|
|
655
|
+
chunk
|
|
656
|
+
churn
|
|
657
|
+
cigar
|
|
658
|
+
cinnamon
|
|
659
|
+
circle
|
|
660
|
+
citizen
|
|
661
|
+
city
|
|
662
|
+
civil
|
|
663
|
+
claim
|
|
664
|
+
clap
|
|
665
|
+
clarify
|
|
666
|
+
claw
|
|
667
|
+
clay
|
|
668
|
+
clean
|
|
669
|
+
clerk
|
|
670
|
+
clever
|
|
671
|
+
click
|
|
672
|
+
client
|
|
673
|
+
cliff
|
|
674
|
+
climb
|
|
675
|
+
clinic
|
|
676
|
+
clip
|
|
677
|
+
clock
|
|
678
|
+
clog
|
|
679
|
+
close
|
|
680
|
+
cloth
|
|
681
|
+
cloud
|
|
682
|
+
clown
|
|
683
|
+
club
|
|
684
|
+
clump
|
|
685
|
+
cluster
|
|
686
|
+
clutch
|
|
687
|
+
coach
|
|
688
|
+
coast
|
|
689
|
+
coconut
|
|
690
|
+
code
|
|
691
|
+
coffee
|
|
692
|
+
coil
|
|
693
|
+
coin
|
|
694
|
+
collect
|
|
695
|
+
color
|
|
696
|
+
column
|
|
697
|
+
combine
|
|
698
|
+
come
|
|
699
|
+
comfort
|
|
700
|
+
comic
|
|
701
|
+
common
|
|
702
|
+
company
|
|
703
|
+
concert
|
|
704
|
+
conduct
|
|
705
|
+
confirm
|
|
706
|
+
congress
|
|
707
|
+
connect
|
|
708
|
+
consider
|
|
709
|
+
control
|
|
710
|
+
convince
|
|
711
|
+
cook
|
|
712
|
+
cool
|
|
713
|
+
copper
|
|
714
|
+
copy
|
|
715
|
+
coral
|
|
716
|
+
core
|
|
717
|
+
corn
|
|
718
|
+
correct
|
|
719
|
+
cost
|
|
720
|
+
cotton
|
|
721
|
+
couch
|
|
722
|
+
country
|
|
723
|
+
couple
|
|
724
|
+
course
|
|
725
|
+
cousin
|
|
726
|
+
cover
|
|
727
|
+
coyote
|
|
728
|
+
crack
|
|
729
|
+
cradle
|
|
730
|
+
craft
|
|
731
|
+
cram
|
|
732
|
+
crane
|
|
733
|
+
crash
|
|
734
|
+
crater
|
|
735
|
+
crawl
|
|
736
|
+
crazy
|
|
737
|
+
cream
|
|
738
|
+
credit
|
|
739
|
+
creek
|
|
740
|
+
crew
|
|
741
|
+
cricket
|
|
742
|
+
crime
|
|
743
|
+
crisp
|
|
744
|
+
critic
|
|
745
|
+
crop
|
|
746
|
+
cross
|
|
747
|
+
crouch
|
|
748
|
+
crowd
|
|
749
|
+
crucial
|
|
750
|
+
cruel
|
|
751
|
+
cruise
|
|
752
|
+
crumble
|
|
753
|
+
crunch
|
|
754
|
+
crush
|
|
755
|
+
cry
|
|
756
|
+
crystal
|
|
757
|
+
cube
|
|
758
|
+
culture
|
|
759
|
+
cup
|
|
760
|
+
cupboard
|
|
761
|
+
curious
|
|
762
|
+
current
|
|
763
|
+
curtain
|
|
764
|
+
curve
|
|
765
|
+
cushion
|
|
766
|
+
custom
|
|
767
|
+
cute
|
|
768
|
+
cycle
|
|
769
|
+
dad
|
|
770
|
+
damage
|
|
771
|
+
damp
|
|
772
|
+
dance
|
|
773
|
+
danger
|
|
774
|
+
daring
|
|
775
|
+
dash
|
|
776
|
+
daughter
|
|
777
|
+
dawn
|
|
778
|
+
day
|
|
779
|
+
deal
|
|
780
|
+
debate
|
|
781
|
+
debris
|
|
782
|
+
decade
|
|
783
|
+
december
|
|
784
|
+
decide
|
|
785
|
+
decline
|
|
786
|
+
decorate
|
|
787
|
+
decrease
|
|
788
|
+
deer
|
|
789
|
+
defense
|
|
790
|
+
define
|
|
791
|
+
defy
|
|
792
|
+
degree
|
|
793
|
+
delay
|
|
794
|
+
deliver
|
|
795
|
+
demand
|
|
796
|
+
demise
|
|
797
|
+
denial
|
|
798
|
+
dentist
|
|
799
|
+
deny
|
|
800
|
+
depart
|
|
801
|
+
depend
|
|
802
|
+
deposit
|
|
803
|
+
depth
|
|
804
|
+
deputy
|
|
805
|
+
derive
|
|
806
|
+
describe
|
|
807
|
+
desert
|
|
808
|
+
design
|
|
809
|
+
desk
|
|
810
|
+
despair
|
|
811
|
+
destroy
|
|
812
|
+
detail
|
|
813
|
+
detect
|
|
814
|
+
develop
|
|
815
|
+
device
|
|
816
|
+
devote
|
|
817
|
+
diagram
|
|
818
|
+
dial
|
|
819
|
+
diamond
|
|
820
|
+
diary
|
|
821
|
+
dice
|
|
822
|
+
diesel
|
|
823
|
+
diet
|
|
824
|
+
differ
|
|
825
|
+
digital
|
|
826
|
+
dignity
|
|
827
|
+
dilemma
|
|
828
|
+
dinner
|
|
829
|
+
dinosaur
|
|
830
|
+
direct
|
|
831
|
+
dirt
|
|
832
|
+
disagree
|
|
833
|
+
discover
|
|
834
|
+
disease
|
|
835
|
+
dish
|
|
836
|
+
dismiss
|
|
837
|
+
disorder
|
|
838
|
+
display
|
|
839
|
+
distance
|
|
840
|
+
divert
|
|
841
|
+
divide
|
|
842
|
+
divorce
|
|
843
|
+
dizzy
|
|
844
|
+
doctor
|
|
845
|
+
document
|
|
846
|
+
dog
|
|
847
|
+
doll
|
|
848
|
+
dolphin
|
|
849
|
+
domain
|
|
850
|
+
donate
|
|
851
|
+
donkey
|
|
852
|
+
donor
|
|
853
|
+
door
|
|
854
|
+
dose
|
|
855
|
+
double
|
|
856
|
+
dove
|
|
857
|
+
draft
|
|
858
|
+
dragon
|
|
859
|
+
drama
|
|
860
|
+
drastic
|
|
861
|
+
draw
|
|
862
|
+
dream
|
|
863
|
+
dress
|
|
864
|
+
drift
|
|
865
|
+
drill
|
|
866
|
+
drink
|
|
867
|
+
drip
|
|
868
|
+
drive
|
|
869
|
+
drop
|
|
870
|
+
drum
|
|
871
|
+
dry
|
|
872
|
+
duck
|
|
873
|
+
dumb
|
|
874
|
+
dune
|
|
875
|
+
during
|
|
876
|
+
dust
|
|
877
|
+
dutch
|
|
878
|
+
duty
|
|
879
|
+
dwarf
|
|
880
|
+
dynamic
|
|
881
|
+
eager
|
|
882
|
+
eagle
|
|
883
|
+
early
|
|
884
|
+
earn
|
|
885
|
+
earth
|
|
886
|
+
easily
|
|
887
|
+
east
|
|
888
|
+
easy
|
|
889
|
+
echo
|
|
890
|
+
ecology
|
|
891
|
+
economy
|
|
892
|
+
edge
|
|
893
|
+
edit
|
|
894
|
+
educate
|
|
895
|
+
effort
|
|
896
|
+
egg
|
|
897
|
+
eight
|
|
898
|
+
either
|
|
899
|
+
elbow
|
|
900
|
+
elder
|
|
901
|
+
electric
|
|
902
|
+
elegant
|
|
903
|
+
element
|
|
904
|
+
elephant
|
|
905
|
+
elevator
|
|
906
|
+
elite
|
|
907
|
+
else
|
|
908
|
+
embark
|
|
909
|
+
embody
|
|
910
|
+
embrace
|
|
911
|
+
emerge
|
|
912
|
+
emotion
|
|
913
|
+
employ
|
|
914
|
+
empower
|
|
915
|
+
empty
|
|
916
|
+
enable
|
|
917
|
+
enact
|
|
918
|
+
end
|
|
919
|
+
endless
|
|
920
|
+
endorse
|
|
921
|
+
enemy
|
|
922
|
+
energy
|
|
923
|
+
enforce
|
|
924
|
+
engage
|
|
925
|
+
engine
|
|
926
|
+
enhance
|
|
927
|
+
enjoy
|
|
928
|
+
enlist
|
|
929
|
+
enough
|
|
930
|
+
enrich
|
|
931
|
+
enroll
|
|
932
|
+
ensure
|
|
933
|
+
enter
|
|
934
|
+
entire
|
|
935
|
+
entry
|
|
936
|
+
envelope
|
|
937
|
+
episode
|
|
938
|
+
equal
|
|
939
|
+
equip
|
|
940
|
+
era
|
|
941
|
+
erase
|
|
942
|
+
erode
|
|
943
|
+
erosion
|
|
944
|
+
error
|
|
945
|
+
erupt
|
|
946
|
+
escape
|
|
947
|
+
essay
|
|
948
|
+
essence
|
|
949
|
+
estate
|
|
950
|
+
eternal
|
|
951
|
+
ethics
|
|
952
|
+
evidence
|
|
953
|
+
evil
|
|
954
|
+
evoke
|
|
955
|
+
evolve
|
|
956
|
+
exact
|
|
957
|
+
example
|
|
958
|
+
excess
|
|
959
|
+
exchange
|
|
960
|
+
excite
|
|
961
|
+
exclude
|
|
962
|
+
excuse
|
|
963
|
+
execute
|
|
964
|
+
exercise
|
|
965
|
+
exhaust
|
|
966
|
+
exhibit
|
|
967
|
+
exile
|
|
968
|
+
exist
|
|
969
|
+
exit
|
|
970
|
+
exotic
|
|
971
|
+
expand
|
|
972
|
+
expect
|
|
973
|
+
expire
|
|
974
|
+
explain
|
|
975
|
+
expose
|
|
976
|
+
express
|
|
977
|
+
extend
|
|
978
|
+
extra
|
|
979
|
+
eye
|
|
980
|
+
eyebrow
|
|
981
|
+
fabric
|
|
982
|
+
face
|
|
983
|
+
faculty
|
|
984
|
+
fade
|
|
985
|
+
faint
|
|
986
|
+
faith
|
|
987
|
+
fall
|
|
988
|
+
false
|
|
989
|
+
fame
|
|
990
|
+
family
|
|
991
|
+
famous
|
|
992
|
+
fan
|
|
993
|
+
fancy
|
|
994
|
+
fantasy
|
|
995
|
+
farm
|
|
996
|
+
fashion
|
|
997
|
+
fat
|
|
998
|
+
fatal
|
|
999
|
+
father
|
|
1000
|
+
fatigue
|
|
1001
|
+
fault
|
|
1002
|
+
favorite
|
|
1003
|
+
feature
|
|
1004
|
+
february
|
|
1005
|
+
federal
|
|
1006
|
+
fee
|
|
1007
|
+
feed
|
|
1008
|
+
feel
|
|
1009
|
+
female
|
|
1010
|
+
fence
|
|
1011
|
+
festival
|
|
1012
|
+
fetch
|
|
1013
|
+
fever
|
|
1014
|
+
few
|
|
1015
|
+
fiber
|
|
1016
|
+
fiction
|
|
1017
|
+
field
|
|
1018
|
+
figure
|
|
1019
|
+
file
|
|
1020
|
+
film
|
|
1021
|
+
filter
|
|
1022
|
+
final
|
|
1023
|
+
find
|
|
1024
|
+
fine
|
|
1025
|
+
finger
|
|
1026
|
+
finish
|
|
1027
|
+
fire
|
|
1028
|
+
firm
|
|
1029
|
+
first
|
|
1030
|
+
fiscal
|
|
1031
|
+
fish
|
|
1032
|
+
fit
|
|
1033
|
+
fitness
|
|
1034
|
+
fix
|
|
1035
|
+
flag
|
|
1036
|
+
flame
|
|
1037
|
+
flash
|
|
1038
|
+
flat
|
|
1039
|
+
flavor
|
|
1040
|
+
flee
|
|
1041
|
+
flight
|
|
1042
|
+
flip
|
|
1043
|
+
float
|
|
1044
|
+
flock
|
|
1045
|
+
floor
|
|
1046
|
+
flower
|
|
1047
|
+
fluid
|
|
1048
|
+
flush
|
|
1049
|
+
fly
|
|
1050
|
+
foam
|
|
1051
|
+
focus
|
|
1052
|
+
fog
|
|
1053
|
+
foil
|
|
1054
|
+
fold
|
|
1055
|
+
follow
|
|
1056
|
+
food
|
|
1057
|
+
foot
|
|
1058
|
+
force
|
|
1059
|
+
forest
|
|
1060
|
+
forget
|
|
1061
|
+
fork
|
|
1062
|
+
fortune
|
|
1063
|
+
forum
|
|
1064
|
+
forward
|
|
1065
|
+
fossil
|
|
1066
|
+
foster
|
|
1067
|
+
found
|
|
1068
|
+
fox
|
|
1069
|
+
fragile
|
|
1070
|
+
frame
|
|
1071
|
+
frequent
|
|
1072
|
+
fresh
|
|
1073
|
+
friend
|
|
1074
|
+
fringe
|
|
1075
|
+
frog
|
|
1076
|
+
front
|
|
1077
|
+
frost
|
|
1078
|
+
frown
|
|
1079
|
+
frozen
|
|
1080
|
+
fruit
|
|
1081
|
+
fuel
|
|
1082
|
+
fun
|
|
1083
|
+
funny
|
|
1084
|
+
furnace
|
|
1085
|
+
fury
|
|
1086
|
+
future
|
|
1087
|
+
gadget
|
|
1088
|
+
gain
|
|
1089
|
+
galaxy
|
|
1090
|
+
gallery
|
|
1091
|
+
game
|
|
1092
|
+
gap
|
|
1093
|
+
garage
|
|
1094
|
+
garbage
|
|
1095
|
+
garden
|
|
1096
|
+
garlic
|
|
1097
|
+
garment
|
|
1098
|
+
gas
|
|
1099
|
+
gasp
|
|
1100
|
+
gate
|
|
1101
|
+
gather
|
|
1102
|
+
gauge
|
|
1103
|
+
gaze
|
|
1104
|
+
general
|
|
1105
|
+
genius
|
|
1106
|
+
genre
|
|
1107
|
+
gentle
|
|
1108
|
+
genuine
|
|
1109
|
+
gesture
|
|
1110
|
+
ghost
|
|
1111
|
+
giant
|
|
1112
|
+
gift
|
|
1113
|
+
giggle
|
|
1114
|
+
ginger
|
|
1115
|
+
giraffe
|
|
1116
|
+
girl
|
|
1117
|
+
give
|
|
1118
|
+
glad
|
|
1119
|
+
glance
|
|
1120
|
+
glare
|
|
1121
|
+
glass
|
|
1122
|
+
glide
|
|
1123
|
+
glimpse
|
|
1124
|
+
globe
|
|
1125
|
+
gloom
|
|
1126
|
+
glory
|
|
1127
|
+
glove
|
|
1128
|
+
glow
|
|
1129
|
+
glue
|
|
1130
|
+
goat
|
|
1131
|
+
goddess
|
|
1132
|
+
gold
|
|
1133
|
+
good
|
|
1134
|
+
goose
|
|
1135
|
+
gorilla
|
|
1136
|
+
gospel
|
|
1137
|
+
gossip
|
|
1138
|
+
govern
|
|
1139
|
+
gown
|
|
1140
|
+
grab
|
|
1141
|
+
grace
|
|
1142
|
+
grain
|
|
1143
|
+
grant
|
|
1144
|
+
grape
|
|
1145
|
+
grass
|
|
1146
|
+
gravity
|
|
1147
|
+
great
|
|
1148
|
+
green
|
|
1149
|
+
grid
|
|
1150
|
+
grief
|
|
1151
|
+
grit
|
|
1152
|
+
grocery
|
|
1153
|
+
group
|
|
1154
|
+
grow
|
|
1155
|
+
grunt
|
|
1156
|
+
guard
|
|
1157
|
+
guess
|
|
1158
|
+
guide
|
|
1159
|
+
guilt
|
|
1160
|
+
guitar
|
|
1161
|
+
gun
|
|
1162
|
+
gym
|
|
1163
|
+
habit
|
|
1164
|
+
hair
|
|
1165
|
+
half
|
|
1166
|
+
hammer
|
|
1167
|
+
hamster
|
|
1168
|
+
hand
|
|
1169
|
+
happy
|
|
1170
|
+
harbor
|
|
1171
|
+
hard
|
|
1172
|
+
harsh
|
|
1173
|
+
harvest
|
|
1174
|
+
hat
|
|
1175
|
+
have
|
|
1176
|
+
hawk
|
|
1177
|
+
hazard
|
|
1178
|
+
head
|
|
1179
|
+
health
|
|
1180
|
+
heart
|
|
1181
|
+
heavy
|
|
1182
|
+
hedgehog
|
|
1183
|
+
height
|
|
1184
|
+
hello
|
|
1185
|
+
helmet
|
|
1186
|
+
help
|
|
1187
|
+
hen
|
|
1188
|
+
hero
|
|
1189
|
+
hidden
|
|
1190
|
+
high
|
|
1191
|
+
hill
|
|
1192
|
+
hint
|
|
1193
|
+
hip
|
|
1194
|
+
hire
|
|
1195
|
+
history
|
|
1196
|
+
hobby
|
|
1197
|
+
hockey
|
|
1198
|
+
hold
|
|
1199
|
+
hole
|
|
1200
|
+
holiday
|
|
1201
|
+
hollow
|
|
1202
|
+
home
|
|
1203
|
+
honey
|
|
1204
|
+
hood
|
|
1205
|
+
hope
|
|
1206
|
+
horn
|
|
1207
|
+
horror
|
|
1208
|
+
horse
|
|
1209
|
+
hospital
|
|
1210
|
+
host
|
|
1211
|
+
hotel
|
|
1212
|
+
hour
|
|
1213
|
+
hover
|
|
1214
|
+
hub
|
|
1215
|
+
huge
|
|
1216
|
+
human
|
|
1217
|
+
humble
|
|
1218
|
+
humor
|
|
1219
|
+
hundred
|
|
1220
|
+
hungry
|
|
1221
|
+
hunt
|
|
1222
|
+
hurdle
|
|
1223
|
+
hurry
|
|
1224
|
+
hurt
|
|
1225
|
+
husband
|
|
1226
|
+
hybrid
|
|
1227
|
+
ice
|
|
1228
|
+
icon
|
|
1229
|
+
idea
|
|
1230
|
+
identify
|
|
1231
|
+
idle
|
|
1232
|
+
ignore
|
|
1233
|
+
ill
|
|
1234
|
+
illegal
|
|
1235
|
+
illness
|
|
1236
|
+
image
|
|
1237
|
+
imitate
|
|
1238
|
+
immense
|
|
1239
|
+
immune
|
|
1240
|
+
impact
|
|
1241
|
+
impose
|
|
1242
|
+
improve
|
|
1243
|
+
impulse
|
|
1244
|
+
inch
|
|
1245
|
+
include
|
|
1246
|
+
income
|
|
1247
|
+
increase
|
|
1248
|
+
index
|
|
1249
|
+
indicate
|
|
1250
|
+
indoor
|
|
1251
|
+
industry
|
|
1252
|
+
infant
|
|
1253
|
+
inflict
|
|
1254
|
+
inform
|
|
1255
|
+
inhale
|
|
1256
|
+
inherit
|
|
1257
|
+
initial
|
|
1258
|
+
inject
|
|
1259
|
+
injury
|
|
1260
|
+
inmate
|
|
1261
|
+
inner
|
|
1262
|
+
innocent
|
|
1263
|
+
input
|
|
1264
|
+
inquiry
|
|
1265
|
+
insane
|
|
1266
|
+
insect
|
|
1267
|
+
inside
|
|
1268
|
+
inspire
|
|
1269
|
+
install
|
|
1270
|
+
intact
|
|
1271
|
+
interest
|
|
1272
|
+
into
|
|
1273
|
+
invest
|
|
1274
|
+
invite
|
|
1275
|
+
involve
|
|
1276
|
+
iron
|
|
1277
|
+
island
|
|
1278
|
+
isolate
|
|
1279
|
+
issue
|
|
1280
|
+
item
|
|
1281
|
+
ivory
|
|
1282
|
+
jacket
|
|
1283
|
+
jaguar
|
|
1284
|
+
jar
|
|
1285
|
+
jazz
|
|
1286
|
+
jealous
|
|
1287
|
+
jeans
|
|
1288
|
+
jelly
|
|
1289
|
+
jewel
|
|
1290
|
+
job
|
|
1291
|
+
join
|
|
1292
|
+
joke
|
|
1293
|
+
journey
|
|
1294
|
+
joy
|
|
1295
|
+
judge
|
|
1296
|
+
juice
|
|
1297
|
+
jump
|
|
1298
|
+
jungle
|
|
1299
|
+
junior
|
|
1300
|
+
junk
|
|
1301
|
+
just
|
|
1302
|
+
kangaroo
|
|
1303
|
+
keen
|
|
1304
|
+
keep
|
|
1305
|
+
ketchup
|
|
1306
|
+
key
|
|
1307
|
+
kick
|
|
1308
|
+
kid
|
|
1309
|
+
kidney
|
|
1310
|
+
kind
|
|
1311
|
+
kingdom
|
|
1312
|
+
kiss
|
|
1313
|
+
kit
|
|
1314
|
+
kitchen
|
|
1315
|
+
kite
|
|
1316
|
+
kitten
|
|
1317
|
+
kiwi
|
|
1318
|
+
knee
|
|
1319
|
+
knife
|
|
1320
|
+
knock
|
|
1321
|
+
know
|
|
1322
|
+
lab
|
|
1323
|
+
label
|
|
1324
|
+
labor
|
|
1325
|
+
ladder
|
|
1326
|
+
lady
|
|
1327
|
+
lake
|
|
1328
|
+
lamp
|
|
1329
|
+
language
|
|
1330
|
+
laptop
|
|
1331
|
+
large
|
|
1332
|
+
later
|
|
1333
|
+
latin
|
|
1334
|
+
laugh
|
|
1335
|
+
laundry
|
|
1336
|
+
lava
|
|
1337
|
+
law
|
|
1338
|
+
lawn
|
|
1339
|
+
lawsuit
|
|
1340
|
+
layer
|
|
1341
|
+
lazy
|
|
1342
|
+
leader
|
|
1343
|
+
leaf
|
|
1344
|
+
learn
|
|
1345
|
+
leave
|
|
1346
|
+
lecture
|
|
1347
|
+
left
|
|
1348
|
+
leg
|
|
1349
|
+
legal
|
|
1350
|
+
legend
|
|
1351
|
+
leisure
|
|
1352
|
+
lemon
|
|
1353
|
+
lend
|
|
1354
|
+
length
|
|
1355
|
+
lens
|
|
1356
|
+
leopard
|
|
1357
|
+
lesson
|
|
1358
|
+
letter
|
|
1359
|
+
level
|
|
1360
|
+
liar
|
|
1361
|
+
liberty
|
|
1362
|
+
library
|
|
1363
|
+
license
|
|
1364
|
+
life
|
|
1365
|
+
lift
|
|
1366
|
+
light
|
|
1367
|
+
like
|
|
1368
|
+
limb
|
|
1369
|
+
limit
|
|
1370
|
+
link
|
|
1371
|
+
lion
|
|
1372
|
+
liquid
|
|
1373
|
+
list
|
|
1374
|
+
little
|
|
1375
|
+
live
|
|
1376
|
+
lizard
|
|
1377
|
+
load
|
|
1378
|
+
loan
|
|
1379
|
+
lobster
|
|
1380
|
+
local
|
|
1381
|
+
lock
|
|
1382
|
+
logic
|
|
1383
|
+
lonely
|
|
1384
|
+
long
|
|
1385
|
+
loop
|
|
1386
|
+
lottery
|
|
1387
|
+
loud
|
|
1388
|
+
lounge
|
|
1389
|
+
love
|
|
1390
|
+
loyal
|
|
1391
|
+
lucky
|
|
1392
|
+
luggage
|
|
1393
|
+
lumber
|
|
1394
|
+
lunar
|
|
1395
|
+
lunch
|
|
1396
|
+
luxury
|
|
1397
|
+
lyrics
|
|
1398
|
+
machine
|
|
1399
|
+
mad
|
|
1400
|
+
magic
|
|
1401
|
+
magnet
|
|
1402
|
+
maid
|
|
1403
|
+
mail
|
|
1404
|
+
main
|
|
1405
|
+
major
|
|
1406
|
+
make
|
|
1407
|
+
mammal
|
|
1408
|
+
man
|
|
1409
|
+
manage
|
|
1410
|
+
mandate
|
|
1411
|
+
mango
|
|
1412
|
+
mansion
|
|
1413
|
+
manual
|
|
1414
|
+
maple
|
|
1415
|
+
marble
|
|
1416
|
+
march
|
|
1417
|
+
margin
|
|
1418
|
+
marine
|
|
1419
|
+
market
|
|
1420
|
+
marriage
|
|
1421
|
+
mask
|
|
1422
|
+
mass
|
|
1423
|
+
master
|
|
1424
|
+
match
|
|
1425
|
+
material
|
|
1426
|
+
math
|
|
1427
|
+
matrix
|
|
1428
|
+
matter
|
|
1429
|
+
maximum
|
|
1430
|
+
maze
|
|
1431
|
+
meadow
|
|
1432
|
+
mean
|
|
1433
|
+
measure
|
|
1434
|
+
meat
|
|
1435
|
+
mechanic
|
|
1436
|
+
medal
|
|
1437
|
+
media
|
|
1438
|
+
melody
|
|
1439
|
+
melt
|
|
1440
|
+
member
|
|
1441
|
+
memory
|
|
1442
|
+
mention
|
|
1443
|
+
menu
|
|
1444
|
+
mercy
|
|
1445
|
+
merge
|
|
1446
|
+
merit
|
|
1447
|
+
merry
|
|
1448
|
+
mesh
|
|
1449
|
+
message
|
|
1450
|
+
metal
|
|
1451
|
+
method
|
|
1452
|
+
middle
|
|
1453
|
+
midnight
|
|
1454
|
+
milk
|
|
1455
|
+
million
|
|
1456
|
+
mimic
|
|
1457
|
+
mind
|
|
1458
|
+
minimum
|
|
1459
|
+
minor
|
|
1460
|
+
minute
|
|
1461
|
+
miracle
|
|
1462
|
+
mirror
|
|
1463
|
+
misery
|
|
1464
|
+
miss
|
|
1465
|
+
mistake
|
|
1466
|
+
mix
|
|
1467
|
+
mixed
|
|
1468
|
+
mixture
|
|
1469
|
+
mobile
|
|
1470
|
+
model
|
|
1471
|
+
modify
|
|
1472
|
+
mom
|
|
1473
|
+
moment
|
|
1474
|
+
monitor
|
|
1475
|
+
monkey
|
|
1476
|
+
monster
|
|
1477
|
+
month
|
|
1478
|
+
moon
|
|
1479
|
+
moral
|
|
1480
|
+
more
|
|
1481
|
+
morning
|
|
1482
|
+
mosquito
|
|
1483
|
+
mother
|
|
1484
|
+
motion
|
|
1485
|
+
motor
|
|
1486
|
+
mountain
|
|
1487
|
+
mouse
|
|
1488
|
+
move
|
|
1489
|
+
movie
|
|
1490
|
+
much
|
|
1491
|
+
muffin
|
|
1492
|
+
mule
|
|
1493
|
+
multiply
|
|
1494
|
+
muscle
|
|
1495
|
+
museum
|
|
1496
|
+
mushroom
|
|
1497
|
+
music
|
|
1498
|
+
must
|
|
1499
|
+
mutual
|
|
1500
|
+
myself
|
|
1501
|
+
mystery
|
|
1502
|
+
myth
|
|
1503
|
+
naive
|
|
1504
|
+
name
|
|
1505
|
+
napkin
|
|
1506
|
+
narrow
|
|
1507
|
+
nasty
|
|
1508
|
+
nation
|
|
1509
|
+
nature
|
|
1510
|
+
near
|
|
1511
|
+
neck
|
|
1512
|
+
need
|
|
1513
|
+
negative
|
|
1514
|
+
neglect
|
|
1515
|
+
neither
|
|
1516
|
+
nephew
|
|
1517
|
+
nerve
|
|
1518
|
+
nest
|
|
1519
|
+
net
|
|
1520
|
+
network
|
|
1521
|
+
neutral
|
|
1522
|
+
never
|
|
1523
|
+
news
|
|
1524
|
+
next
|
|
1525
|
+
nice
|
|
1526
|
+
night
|
|
1527
|
+
noble
|
|
1528
|
+
noise
|
|
1529
|
+
nominee
|
|
1530
|
+
noodle
|
|
1531
|
+
normal
|
|
1532
|
+
north
|
|
1533
|
+
nose
|
|
1534
|
+
notable
|
|
1535
|
+
note
|
|
1536
|
+
nothing
|
|
1537
|
+
notice
|
|
1538
|
+
novel
|
|
1539
|
+
now
|
|
1540
|
+
nuclear
|
|
1541
|
+
number
|
|
1542
|
+
nurse
|
|
1543
|
+
nut
|
|
1544
|
+
oak
|
|
1545
|
+
obey
|
|
1546
|
+
object
|
|
1547
|
+
oblige
|
|
1548
|
+
obscure
|
|
1549
|
+
observe
|
|
1550
|
+
obtain
|
|
1551
|
+
obvious
|
|
1552
|
+
occur
|
|
1553
|
+
ocean
|
|
1554
|
+
october
|
|
1555
|
+
odor
|
|
1556
|
+
off
|
|
1557
|
+
offer
|
|
1558
|
+
office
|
|
1559
|
+
often
|
|
1560
|
+
oil
|
|
1561
|
+
okay
|
|
1562
|
+
old
|
|
1563
|
+
olive
|
|
1564
|
+
olympic
|
|
1565
|
+
omit
|
|
1566
|
+
once
|
|
1567
|
+
one
|
|
1568
|
+
onion
|
|
1569
|
+
online
|
|
1570
|
+
only
|
|
1571
|
+
open
|
|
1572
|
+
opera
|
|
1573
|
+
opinion
|
|
1574
|
+
oppose
|
|
1575
|
+
option
|
|
1576
|
+
orange
|
|
1577
|
+
orbit
|
|
1578
|
+
orchard
|
|
1579
|
+
order
|
|
1580
|
+
ordinary
|
|
1581
|
+
organ
|
|
1582
|
+
orient
|
|
1583
|
+
original
|
|
1584
|
+
orphan
|
|
1585
|
+
ostrich
|
|
1586
|
+
other
|
|
1587
|
+
outdoor
|
|
1588
|
+
outer
|
|
1589
|
+
output
|
|
1590
|
+
outside
|
|
1591
|
+
oval
|
|
1592
|
+
oven
|
|
1593
|
+
over
|
|
1594
|
+
own
|
|
1595
|
+
owner
|
|
1596
|
+
oxygen
|
|
1597
|
+
oyster
|
|
1598
|
+
ozone
|
|
1599
|
+
pact
|
|
1600
|
+
paddle
|
|
1601
|
+
page
|
|
1602
|
+
pair
|
|
1603
|
+
palace
|
|
1604
|
+
palm
|
|
1605
|
+
panda
|
|
1606
|
+
panel
|
|
1607
|
+
panic
|
|
1608
|
+
panther
|
|
1609
|
+
paper
|
|
1610
|
+
parade
|
|
1611
|
+
parent
|
|
1612
|
+
park
|
|
1613
|
+
parrot
|
|
1614
|
+
party
|
|
1615
|
+
pass
|
|
1616
|
+
patch
|
|
1617
|
+
path
|
|
1618
|
+
patient
|
|
1619
|
+
patrol
|
|
1620
|
+
pattern
|
|
1621
|
+
pause
|
|
1622
|
+
pave
|
|
1623
|
+
payment
|
|
1624
|
+
peace
|
|
1625
|
+
peanut
|
|
1626
|
+
pear
|
|
1627
|
+
peasant
|
|
1628
|
+
pelican
|
|
1629
|
+
pen
|
|
1630
|
+
penalty
|
|
1631
|
+
pencil
|
|
1632
|
+
people
|
|
1633
|
+
pepper
|
|
1634
|
+
perfect
|
|
1635
|
+
permit
|
|
1636
|
+
person
|
|
1637
|
+
pet
|
|
1638
|
+
phone
|
|
1639
|
+
photo
|
|
1640
|
+
phrase
|
|
1641
|
+
physical
|
|
1642
|
+
piano
|
|
1643
|
+
picnic
|
|
1644
|
+
picture
|
|
1645
|
+
piece
|
|
1646
|
+
pig
|
|
1647
|
+
pigeon
|
|
1648
|
+
pill
|
|
1649
|
+
pilot
|
|
1650
|
+
pink
|
|
1651
|
+
pioneer
|
|
1652
|
+
pipe
|
|
1653
|
+
pistol
|
|
1654
|
+
pitch
|
|
1655
|
+
pizza
|
|
1656
|
+
place
|
|
1657
|
+
planet
|
|
1658
|
+
plastic
|
|
1659
|
+
plate
|
|
1660
|
+
play
|
|
1661
|
+
please
|
|
1662
|
+
pledge
|
|
1663
|
+
pluck
|
|
1664
|
+
plug
|
|
1665
|
+
plunge
|
|
1666
|
+
poem
|
|
1667
|
+
poet
|
|
1668
|
+
point
|
|
1669
|
+
polar
|
|
1670
|
+
pole
|
|
1671
|
+
police
|
|
1672
|
+
pond
|
|
1673
|
+
pony
|
|
1674
|
+
pool
|
|
1675
|
+
popular
|
|
1676
|
+
portion
|
|
1677
|
+
position
|
|
1678
|
+
possible
|
|
1679
|
+
post
|
|
1680
|
+
potato
|
|
1681
|
+
pottery
|
|
1682
|
+
poverty
|
|
1683
|
+
powder
|
|
1684
|
+
power
|
|
1685
|
+
practice
|
|
1686
|
+
praise
|
|
1687
|
+
predict
|
|
1688
|
+
prefer
|
|
1689
|
+
prepare
|
|
1690
|
+
present
|
|
1691
|
+
pretty
|
|
1692
|
+
prevent
|
|
1693
|
+
price
|
|
1694
|
+
pride
|
|
1695
|
+
primary
|
|
1696
|
+
print
|
|
1697
|
+
priority
|
|
1698
|
+
prison
|
|
1699
|
+
private
|
|
1700
|
+
prize
|
|
1701
|
+
problem
|
|
1702
|
+
process
|
|
1703
|
+
produce
|
|
1704
|
+
profit
|
|
1705
|
+
program
|
|
1706
|
+
project
|
|
1707
|
+
promote
|
|
1708
|
+
proof
|
|
1709
|
+
property
|
|
1710
|
+
prosper
|
|
1711
|
+
protect
|
|
1712
|
+
proud
|
|
1713
|
+
provide
|
|
1714
|
+
public
|
|
1715
|
+
pudding
|
|
1716
|
+
pull
|
|
1717
|
+
pulp
|
|
1718
|
+
pulse
|
|
1719
|
+
pumpkin
|
|
1720
|
+
punch
|
|
1721
|
+
pupil
|
|
1722
|
+
puppy
|
|
1723
|
+
purchase
|
|
1724
|
+
purity
|
|
1725
|
+
purpose
|
|
1726
|
+
purse
|
|
1727
|
+
push
|
|
1728
|
+
put
|
|
1729
|
+
puzzle
|
|
1730
|
+
pyramid
|
|
1731
|
+
quality
|
|
1732
|
+
quantum
|
|
1733
|
+
quarter
|
|
1734
|
+
question
|
|
1735
|
+
quick
|
|
1736
|
+
quit
|
|
1737
|
+
quiz
|
|
1738
|
+
quote
|
|
1739
|
+
rabbit
|
|
1740
|
+
raccoon
|
|
1741
|
+
race
|
|
1742
|
+
rack
|
|
1743
|
+
radar
|
|
1744
|
+
radio
|
|
1745
|
+
rail
|
|
1746
|
+
rain
|
|
1747
|
+
raise
|
|
1748
|
+
rally
|
|
1749
|
+
ramp
|
|
1750
|
+
ranch
|
|
1751
|
+
random
|
|
1752
|
+
range
|
|
1753
|
+
rapid
|
|
1754
|
+
rare
|
|
1755
|
+
rate
|
|
1756
|
+
rather
|
|
1757
|
+
raven
|
|
1758
|
+
raw
|
|
1759
|
+
razor
|
|
1760
|
+
ready
|
|
1761
|
+
real
|
|
1762
|
+
reason
|
|
1763
|
+
rebel
|
|
1764
|
+
rebuild
|
|
1765
|
+
recall
|
|
1766
|
+
receive
|
|
1767
|
+
recipe
|
|
1768
|
+
record
|
|
1769
|
+
recycle
|
|
1770
|
+
reduce
|
|
1771
|
+
reflect
|
|
1772
|
+
reform
|
|
1773
|
+
refuse
|
|
1774
|
+
region
|
|
1775
|
+
regret
|
|
1776
|
+
regular
|
|
1777
|
+
reject
|
|
1778
|
+
relax
|
|
1779
|
+
release
|
|
1780
|
+
relief
|
|
1781
|
+
rely
|
|
1782
|
+
remain
|
|
1783
|
+
remember
|
|
1784
|
+
remind
|
|
1785
|
+
remove
|
|
1786
|
+
render
|
|
1787
|
+
renew
|
|
1788
|
+
rent
|
|
1789
|
+
reopen
|
|
1790
|
+
repair
|
|
1791
|
+
repeat
|
|
1792
|
+
replace
|
|
1793
|
+
report
|
|
1794
|
+
require
|
|
1795
|
+
rescue
|
|
1796
|
+
resemble
|
|
1797
|
+
resist
|
|
1798
|
+
resource
|
|
1799
|
+
response
|
|
1800
|
+
result
|
|
1801
|
+
retire
|
|
1802
|
+
retreat
|
|
1803
|
+
return
|
|
1804
|
+
reunion
|
|
1805
|
+
reveal
|
|
1806
|
+
review
|
|
1807
|
+
reward
|
|
1808
|
+
rhythm
|
|
1809
|
+
rib
|
|
1810
|
+
ribbon
|
|
1811
|
+
rice
|
|
1812
|
+
rich
|
|
1813
|
+
ride
|
|
1814
|
+
ridge
|
|
1815
|
+
rifle
|
|
1816
|
+
right
|
|
1817
|
+
rigid
|
|
1818
|
+
ring
|
|
1819
|
+
riot
|
|
1820
|
+
ripple
|
|
1821
|
+
risk
|
|
1822
|
+
ritual
|
|
1823
|
+
rival
|
|
1824
|
+
river
|
|
1825
|
+
road
|
|
1826
|
+
roast
|
|
1827
|
+
robot
|
|
1828
|
+
robust
|
|
1829
|
+
rocket
|
|
1830
|
+
romance
|
|
1831
|
+
roof
|
|
1832
|
+
rookie
|
|
1833
|
+
room
|
|
1834
|
+
rose
|
|
1835
|
+
rotate
|
|
1836
|
+
rough
|
|
1837
|
+
round
|
|
1838
|
+
route
|
|
1839
|
+
royal
|
|
1840
|
+
rubber
|
|
1841
|
+
rude
|
|
1842
|
+
rug
|
|
1843
|
+
rule
|
|
1844
|
+
run
|
|
1845
|
+
runway
|
|
1846
|
+
rural
|
|
1847
|
+
sad
|
|
1848
|
+
saddle
|
|
1849
|
+
sadness
|
|
1850
|
+
safe
|
|
1851
|
+
sail
|
|
1852
|
+
salad
|
|
1853
|
+
salmon
|
|
1854
|
+
salon
|
|
1855
|
+
salt
|
|
1856
|
+
salute
|
|
1857
|
+
same
|
|
1858
|
+
sample
|
|
1859
|
+
sand
|
|
1860
|
+
satisfy
|
|
1861
|
+
satoshi
|
|
1862
|
+
sauce
|
|
1863
|
+
sausage
|
|
1864
|
+
save
|
|
1865
|
+
say
|
|
1866
|
+
scale
|
|
1867
|
+
scan
|
|
1868
|
+
scare
|
|
1869
|
+
scatter
|
|
1870
|
+
scene
|
|
1871
|
+
scheme
|
|
1872
|
+
school
|
|
1873
|
+
science
|
|
1874
|
+
scissors
|
|
1875
|
+
scorpion
|
|
1876
|
+
scout
|
|
1877
|
+
scrap
|
|
1878
|
+
screen
|
|
1879
|
+
script
|
|
1880
|
+
scrub
|
|
1881
|
+
sea
|
|
1882
|
+
search
|
|
1883
|
+
season
|
|
1884
|
+
seat
|
|
1885
|
+
second
|
|
1886
|
+
secret
|
|
1887
|
+
section
|
|
1888
|
+
security
|
|
1889
|
+
seed
|
|
1890
|
+
seek
|
|
1891
|
+
segment
|
|
1892
|
+
select
|
|
1893
|
+
sell
|
|
1894
|
+
seminar
|
|
1895
|
+
senior
|
|
1896
|
+
sense
|
|
1897
|
+
sentence
|
|
1898
|
+
series
|
|
1899
|
+
service
|
|
1900
|
+
session
|
|
1901
|
+
settle
|
|
1902
|
+
setup
|
|
1903
|
+
seven
|
|
1904
|
+
shadow
|
|
1905
|
+
shaft
|
|
1906
|
+
shallow
|
|
1907
|
+
share
|
|
1908
|
+
shed
|
|
1909
|
+
shell
|
|
1910
|
+
sheriff
|
|
1911
|
+
shield
|
|
1912
|
+
shift
|
|
1913
|
+
shine
|
|
1914
|
+
ship
|
|
1915
|
+
shiver
|
|
1916
|
+
shock
|
|
1917
|
+
shoe
|
|
1918
|
+
shoot
|
|
1919
|
+
shop
|
|
1920
|
+
short
|
|
1921
|
+
shoulder
|
|
1922
|
+
shove
|
|
1923
|
+
shrimp
|
|
1924
|
+
shrug
|
|
1925
|
+
shuffle
|
|
1926
|
+
shy
|
|
1927
|
+
sibling
|
|
1928
|
+
sick
|
|
1929
|
+
side
|
|
1930
|
+
siege
|
|
1931
|
+
sight
|
|
1932
|
+
sign
|
|
1933
|
+
silent
|
|
1934
|
+
silk
|
|
1935
|
+
silly
|
|
1936
|
+
silver
|
|
1937
|
+
similar
|
|
1938
|
+
simple
|
|
1939
|
+
since
|
|
1940
|
+
sing
|
|
1941
|
+
siren
|
|
1942
|
+
sister
|
|
1943
|
+
situate
|
|
1944
|
+
six
|
|
1945
|
+
size
|
|
1946
|
+
skate
|
|
1947
|
+
sketch
|
|
1948
|
+
ski
|
|
1949
|
+
skill
|
|
1950
|
+
skin
|
|
1951
|
+
skirt
|
|
1952
|
+
skull
|
|
1953
|
+
slab
|
|
1954
|
+
slam
|
|
1955
|
+
sleep
|
|
1956
|
+
slender
|
|
1957
|
+
slice
|
|
1958
|
+
slide
|
|
1959
|
+
slight
|
|
1960
|
+
slim
|
|
1961
|
+
slogan
|
|
1962
|
+
slot
|
|
1963
|
+
slow
|
|
1964
|
+
slush
|
|
1965
|
+
small
|
|
1966
|
+
smart
|
|
1967
|
+
smile
|
|
1968
|
+
smoke
|
|
1969
|
+
smooth
|
|
1970
|
+
snack
|
|
1971
|
+
snake
|
|
1972
|
+
snap
|
|
1973
|
+
sniff
|
|
1974
|
+
snow
|
|
1975
|
+
soap
|
|
1976
|
+
soccer
|
|
1977
|
+
social
|
|
1978
|
+
sock
|
|
1979
|
+
soda
|
|
1980
|
+
soft
|
|
1981
|
+
solar
|
|
1982
|
+
soldier
|
|
1983
|
+
solid
|
|
1984
|
+
solution
|
|
1985
|
+
solve
|
|
1986
|
+
someone
|
|
1987
|
+
song
|
|
1988
|
+
soon
|
|
1989
|
+
sorry
|
|
1990
|
+
sort
|
|
1991
|
+
soul
|
|
1992
|
+
sound
|
|
1993
|
+
soup
|
|
1994
|
+
source
|
|
1995
|
+
south
|
|
1996
|
+
space
|
|
1997
|
+
spare
|
|
1998
|
+
spatial
|
|
1999
|
+
spawn
|
|
2000
|
+
speak
|
|
2001
|
+
special
|
|
2002
|
+
speed
|
|
2003
|
+
spell
|
|
2004
|
+
spend
|
|
2005
|
+
sphere
|
|
2006
|
+
spice
|
|
2007
|
+
spider
|
|
2008
|
+
spike
|
|
2009
|
+
spin
|
|
2010
|
+
spirit
|
|
2011
|
+
split
|
|
2012
|
+
spoil
|
|
2013
|
+
sponsor
|
|
2014
|
+
spoon
|
|
2015
|
+
sport
|
|
2016
|
+
spot
|
|
2017
|
+
spray
|
|
2018
|
+
spread
|
|
2019
|
+
spring
|
|
2020
|
+
spy
|
|
2021
|
+
square
|
|
2022
|
+
squeeze
|
|
2023
|
+
squirrel
|
|
2024
|
+
stable
|
|
2025
|
+
stadium
|
|
2026
|
+
staff
|
|
2027
|
+
stage
|
|
2028
|
+
stairs
|
|
2029
|
+
stamp
|
|
2030
|
+
stand
|
|
2031
|
+
start
|
|
2032
|
+
state
|
|
2033
|
+
stay
|
|
2034
|
+
steak
|
|
2035
|
+
steel
|
|
2036
|
+
stem
|
|
2037
|
+
step
|
|
2038
|
+
stereo
|
|
2039
|
+
stick
|
|
2040
|
+
still
|
|
2041
|
+
sting
|
|
2042
|
+
stock
|
|
2043
|
+
stomach
|
|
2044
|
+
stone
|
|
2045
|
+
stool
|
|
2046
|
+
story
|
|
2047
|
+
stove
|
|
2048
|
+
strategy
|
|
2049
|
+
street
|
|
2050
|
+
strike
|
|
2051
|
+
strong
|
|
2052
|
+
struggle
|
|
2053
|
+
student
|
|
2054
|
+
stuff
|
|
2055
|
+
stumble
|
|
2056
|
+
style
|
|
2057
|
+
subject
|
|
2058
|
+
submit
|
|
2059
|
+
subway
|
|
2060
|
+
success
|
|
2061
|
+
such
|
|
2062
|
+
sudden
|
|
2063
|
+
suffer
|
|
2064
|
+
sugar
|
|
2065
|
+
suggest
|
|
2066
|
+
suit
|
|
2067
|
+
summer
|
|
2068
|
+
sun
|
|
2069
|
+
sunny
|
|
2070
|
+
sunset
|
|
2071
|
+
super
|
|
2072
|
+
supply
|
|
2073
|
+
supreme
|
|
2074
|
+
sure
|
|
2075
|
+
surface
|
|
2076
|
+
surge
|
|
2077
|
+
surprise
|
|
2078
|
+
surround
|
|
2079
|
+
survey
|
|
2080
|
+
suspect
|
|
2081
|
+
sustain
|
|
2082
|
+
swallow
|
|
2083
|
+
swamp
|
|
2084
|
+
swap
|
|
2085
|
+
swarm
|
|
2086
|
+
swear
|
|
2087
|
+
sweet
|
|
2088
|
+
swift
|
|
2089
|
+
swim
|
|
2090
|
+
swing
|
|
2091
|
+
switch
|
|
2092
|
+
sword
|
|
2093
|
+
symbol
|
|
2094
|
+
symptom
|
|
2095
|
+
syrup
|
|
2096
|
+
system
|
|
2097
|
+
table
|
|
2098
|
+
tackle
|
|
2099
|
+
tag
|
|
2100
|
+
tail
|
|
2101
|
+
talent
|
|
2102
|
+
talk
|
|
2103
|
+
tank
|
|
2104
|
+
tape
|
|
2105
|
+
target
|
|
2106
|
+
task
|
|
2107
|
+
taste
|
|
2108
|
+
tattoo
|
|
2109
|
+
taxi
|
|
2110
|
+
teach
|
|
2111
|
+
team
|
|
2112
|
+
tell
|
|
2113
|
+
ten
|
|
2114
|
+
tenant
|
|
2115
|
+
tennis
|
|
2116
|
+
tent
|
|
2117
|
+
term
|
|
2118
|
+
test
|
|
2119
|
+
text
|
|
2120
|
+
thank
|
|
2121
|
+
that
|
|
2122
|
+
theme
|
|
2123
|
+
then
|
|
2124
|
+
theory
|
|
2125
|
+
there
|
|
2126
|
+
they
|
|
2127
|
+
thing
|
|
2128
|
+
this
|
|
2129
|
+
thought
|
|
2130
|
+
three
|
|
2131
|
+
thrive
|
|
2132
|
+
throw
|
|
2133
|
+
thumb
|
|
2134
|
+
thunder
|
|
2135
|
+
ticket
|
|
2136
|
+
tide
|
|
2137
|
+
tiger
|
|
2138
|
+
tilt
|
|
2139
|
+
timber
|
|
2140
|
+
time
|
|
2141
|
+
tiny
|
|
2142
|
+
tip
|
|
2143
|
+
tired
|
|
2144
|
+
tissue
|
|
2145
|
+
title
|
|
2146
|
+
toast
|
|
2147
|
+
tobacco
|
|
2148
|
+
today
|
|
2149
|
+
toddler
|
|
2150
|
+
toe
|
|
2151
|
+
together
|
|
2152
|
+
toilet
|
|
2153
|
+
token
|
|
2154
|
+
tomato
|
|
2155
|
+
tomorrow
|
|
2156
|
+
tone
|
|
2157
|
+
tongue
|
|
2158
|
+
tonight
|
|
2159
|
+
tool
|
|
2160
|
+
tooth
|
|
2161
|
+
top
|
|
2162
|
+
topic
|
|
2163
|
+
topple
|
|
2164
|
+
torch
|
|
2165
|
+
tornado
|
|
2166
|
+
tortoise
|
|
2167
|
+
toss
|
|
2168
|
+
total
|
|
2169
|
+
tourist
|
|
2170
|
+
toward
|
|
2171
|
+
tower
|
|
2172
|
+
town
|
|
2173
|
+
toy
|
|
2174
|
+
track
|
|
2175
|
+
trade
|
|
2176
|
+
traffic
|
|
2177
|
+
tragic
|
|
2178
|
+
train
|
|
2179
|
+
transfer
|
|
2180
|
+
trap
|
|
2181
|
+
trash
|
|
2182
|
+
travel
|
|
2183
|
+
tray
|
|
2184
|
+
treat
|
|
2185
|
+
tree
|
|
2186
|
+
trend
|
|
2187
|
+
trial
|
|
2188
|
+
tribe
|
|
2189
|
+
trick
|
|
2190
|
+
trigger
|
|
2191
|
+
trim
|
|
2192
|
+
trip
|
|
2193
|
+
trophy
|
|
2194
|
+
trouble
|
|
2195
|
+
truck
|
|
2196
|
+
true
|
|
2197
|
+
truly
|
|
2198
|
+
trumpet
|
|
2199
|
+
trust
|
|
2200
|
+
truth
|
|
2201
|
+
try
|
|
2202
|
+
tube
|
|
2203
|
+
tuition
|
|
2204
|
+
tumble
|
|
2205
|
+
tuna
|
|
2206
|
+
tunnel
|
|
2207
|
+
turkey
|
|
2208
|
+
turn
|
|
2209
|
+
turtle
|
|
2210
|
+
twelve
|
|
2211
|
+
twenty
|
|
2212
|
+
twice
|
|
2213
|
+
twin
|
|
2214
|
+
twist
|
|
2215
|
+
two
|
|
2216
|
+
type
|
|
2217
|
+
typical
|
|
2218
|
+
ugly
|
|
2219
|
+
umbrella
|
|
2220
|
+
unable
|
|
2221
|
+
unaware
|
|
2222
|
+
uncle
|
|
2223
|
+
uncover
|
|
2224
|
+
under
|
|
2225
|
+
undo
|
|
2226
|
+
unfair
|
|
2227
|
+
unfold
|
|
2228
|
+
unhappy
|
|
2229
|
+
uniform
|
|
2230
|
+
unique
|
|
2231
|
+
unit
|
|
2232
|
+
universe
|
|
2233
|
+
unknown
|
|
2234
|
+
unlock
|
|
2235
|
+
until
|
|
2236
|
+
unusual
|
|
2237
|
+
unveil
|
|
2238
|
+
update
|
|
2239
|
+
upgrade
|
|
2240
|
+
uphold
|
|
2241
|
+
upon
|
|
2242
|
+
upper
|
|
2243
|
+
upset
|
|
2244
|
+
urban
|
|
2245
|
+
urge
|
|
2246
|
+
usage
|
|
2247
|
+
use
|
|
2248
|
+
used
|
|
2249
|
+
useful
|
|
2250
|
+
useless
|
|
2251
|
+
usual
|
|
2252
|
+
utility
|
|
2253
|
+
vacant
|
|
2254
|
+
vacuum
|
|
2255
|
+
vague
|
|
2256
|
+
valid
|
|
2257
|
+
valley
|
|
2258
|
+
valve
|
|
2259
|
+
van
|
|
2260
|
+
vanish
|
|
2261
|
+
vapor
|
|
2262
|
+
various
|
|
2263
|
+
vast
|
|
2264
|
+
vault
|
|
2265
|
+
vehicle
|
|
2266
|
+
velvet
|
|
2267
|
+
vendor
|
|
2268
|
+
venture
|
|
2269
|
+
venue
|
|
2270
|
+
verb
|
|
2271
|
+
verify
|
|
2272
|
+
version
|
|
2273
|
+
very
|
|
2274
|
+
vessel
|
|
2275
|
+
veteran
|
|
2276
|
+
viable
|
|
2277
|
+
vibrant
|
|
2278
|
+
vicious
|
|
2279
|
+
victory
|
|
2280
|
+
video
|
|
2281
|
+
view
|
|
2282
|
+
village
|
|
2283
|
+
vintage
|
|
2284
|
+
violin
|
|
2285
|
+
virtual
|
|
2286
|
+
virus
|
|
2287
|
+
visa
|
|
2288
|
+
visit
|
|
2289
|
+
visual
|
|
2290
|
+
vital
|
|
2291
|
+
vivid
|
|
2292
|
+
vocal
|
|
2293
|
+
voice
|
|
2294
|
+
void
|
|
2295
|
+
volcano
|
|
2296
|
+
volume
|
|
2297
|
+
vote
|
|
2298
|
+
voyage
|
|
2299
|
+
wage
|
|
2300
|
+
wagon
|
|
2301
|
+
wait
|
|
2302
|
+
walk
|
|
2303
|
+
wall
|
|
2304
|
+
walnut
|
|
2305
|
+
want
|
|
2306
|
+
warfare
|
|
2307
|
+
warm
|
|
2308
|
+
warrior
|
|
2309
|
+
wash
|
|
2310
|
+
wasp
|
|
2311
|
+
waste
|
|
2312
|
+
water
|
|
2313
|
+
wave
|
|
2314
|
+
way
|
|
2315
|
+
wealth
|
|
2316
|
+
weapon
|
|
2317
|
+
wear
|
|
2318
|
+
weasel
|
|
2319
|
+
weather
|
|
2320
|
+
web
|
|
2321
|
+
wedding
|
|
2322
|
+
weekend
|
|
2323
|
+
weird
|
|
2324
|
+
welcome
|
|
2325
|
+
west
|
|
2326
|
+
wet
|
|
2327
|
+
whale
|
|
2328
|
+
what
|
|
2329
|
+
wheat
|
|
2330
|
+
wheel
|
|
2331
|
+
when
|
|
2332
|
+
where
|
|
2333
|
+
whip
|
|
2334
|
+
whisper
|
|
2335
|
+
wide
|
|
2336
|
+
width
|
|
2337
|
+
wife
|
|
2338
|
+
wild
|
|
2339
|
+
will
|
|
2340
|
+
win
|
|
2341
|
+
window
|
|
2342
|
+
wine
|
|
2343
|
+
wing
|
|
2344
|
+
wink
|
|
2345
|
+
winner
|
|
2346
|
+
winter
|
|
2347
|
+
wire
|
|
2348
|
+
wisdom
|
|
2349
|
+
wise
|
|
2350
|
+
wish
|
|
2351
|
+
witness
|
|
2352
|
+
wolf
|
|
2353
|
+
woman
|
|
2354
|
+
wonder
|
|
2355
|
+
wood
|
|
2356
|
+
wool
|
|
2357
|
+
word
|
|
2358
|
+
work
|
|
2359
|
+
world
|
|
2360
|
+
worry
|
|
2361
|
+
worth
|
|
2362
|
+
wrap
|
|
2363
|
+
wreck
|
|
2364
|
+
wrestle
|
|
2365
|
+
wrist
|
|
2366
|
+
write
|
|
2367
|
+
wrong
|
|
2368
|
+
yard
|
|
2369
|
+
year
|
|
2370
|
+
yellow
|
|
2371
|
+
you
|
|
2372
|
+
young
|
|
2373
|
+
youth
|
|
2374
|
+
zebra
|
|
2375
|
+
zero
|
|
2376
|
+
zone
|
|
2377
|
+
zoo`.split("\n"));
|
|
2378
|
+
//#endregion
|
|
2379
|
+
//#region ../../packages/lib/crypto/src/value-objects/mnemonic.vo.ts
|
|
2380
|
+
/**
|
|
2381
|
+
* Types a list of words as a BIP-39 mnemonic; it checks nothing.
|
|
2382
|
+
* `Mnemonic.deriveFrom(entropy)` derives 24 words from 32 bytes of entropy,
|
|
2383
|
+
* and `Mnemonic.toSeed(words)` gives their BIP-39 seed.
|
|
2384
|
+
*/
|
|
2385
|
+
const Mnemonic = (words) => words;
|
|
2386
|
+
/**
|
|
2387
|
+
* Derives a 24-word BIP39 mnemonic from 32 bytes of hex-encoded entropy.
|
|
2388
|
+
* Uses HKDF for domain separation, so the raw entropy is never used
|
|
2389
|
+
* directly as seed material. The entropy bytes and the expanded key are zeroed once the
|
|
2390
|
+
* words exist; the words themselves are strings and cannot be.
|
|
2391
|
+
*/
|
|
2392
|
+
Mnemonic.deriveFrom = (entropyHex) => {
|
|
2393
|
+
const rawKey = hexToBytes(entropyHex);
|
|
2394
|
+
const derived = hkdf(sha256, rawKey, "lace", "wallet-seed", 32);
|
|
2395
|
+
try {
|
|
2396
|
+
return Mnemonic(entropyToMnemonic(derived, wordlist).split(" "));
|
|
2397
|
+
} finally {
|
|
2398
|
+
rawKey.fill(0);
|
|
2399
|
+
derived.fill(0);
|
|
2400
|
+
}
|
|
2401
|
+
};
|
|
2402
|
+
/**
|
|
2403
|
+
* The 64-byte BIP39 seed of the mnemonic with an empty passphrase: the seed
|
|
2404
|
+
* that wallets deriving their keys from the BIP39 seed consume, so secrets
|
|
2405
|
+
* derived from it match what such a wallet built from the same words would
|
|
2406
|
+
* derive. The caller owns the bytes and zeroes them after use.
|
|
2407
|
+
*/
|
|
2408
|
+
Mnemonic.toSeed = (words) => mnemonicToSeedSync(words.join(" "));
|
|
2409
|
+
//#endregion
|
|
2410
|
+
//#region ../../packages/lib/passkey/src/constants.ts
|
|
2411
|
+
/** The label of the first PRF salt, whose output is the device secret. */
|
|
2412
|
+
const PRF_SALT_AUTHORISER_LABEL = "lace-passport/prf/authoriser/v1";
|
|
2413
|
+
/** The label of the second PRF salt, whose output is the root every named derivation starts from. */
|
|
2414
|
+
const PRF_SALT_ROOT_LABEL = "lace/prf/root/v1";
|
|
2415
|
+
/** The HKDF info label under which the record sealing key derives from the root. */
|
|
2416
|
+
const HKDF_RECORD_KEY_INFO = "lace-passport/hkdf/record-key/v1";
|
|
2417
|
+
/** The HKDF info label under which the wallet entropy, and from it the recovery words, derives from the root. */
|
|
2418
|
+
const HKDF_WALLET_ENTROPY_INFO = "lace/hkdf/wallet-entropy/v1";
|
|
2419
|
+
//#endregion
|
|
2420
|
+
//#region ../../packages/lib/passkey/src/errors.ts
|
|
2421
|
+
/** The user dismissed a WebAuthn ceremony. */
|
|
2422
|
+
var PasskeyCeremonyCancelledError = class extends Error {
|
|
2423
|
+
code = "ceremony-cancelled";
|
|
2424
|
+
constructor() {
|
|
2425
|
+
super("The passkey ceremony was cancelled.");
|
|
2426
|
+
this.name = "PasskeyCeremonyCancelledError";
|
|
2427
|
+
}
|
|
2428
|
+
};
|
|
2429
|
+
/** The authenticator did not supply both PRF outputs. */
|
|
2430
|
+
var PasskeyPrfUnsupportedError = class extends Error {
|
|
2431
|
+
code = "prf-unsupported";
|
|
2432
|
+
constructor() {
|
|
2433
|
+
super("The platform authenticator does not support the PRF extension.");
|
|
2434
|
+
this.name = "PasskeyPrfUnsupportedError";
|
|
2435
|
+
}
|
|
2436
|
+
};
|
|
2437
|
+
/** The selected credential differs from the imported wallet credential. */
|
|
2438
|
+
var PasskeyCredentialMismatchError = class extends Error {
|
|
2439
|
+
code = "credential-mismatch";
|
|
2440
|
+
constructor() {
|
|
2441
|
+
super("The selected passkey does not match the wallet credential.");
|
|
2442
|
+
this.name = "PasskeyCredentialMismatchError";
|
|
2443
|
+
}
|
|
2444
|
+
};
|
|
2445
|
+
/**
|
|
2446
|
+
* The browser refused to open the signer popup (`popup-blocked`); it must be
|
|
2447
|
+
* opened inside a user gesture.
|
|
2448
|
+
*/
|
|
2449
|
+
var SignerPopupBlockedError = class extends Error {
|
|
2450
|
+
code = "popup-blocked";
|
|
2451
|
+
constructor() {
|
|
2452
|
+
super("The browser blocked the signer popup.");
|
|
2453
|
+
this.name = "SignerPopupBlockedError";
|
|
2454
|
+
}
|
|
2455
|
+
};
|
|
2456
|
+
/**
|
|
2457
|
+
* The signer answered a request with a failure; `code` is the code it
|
|
2458
|
+
* reported, such as `ceremony-cancelled` when the user rejects the request
|
|
2459
|
+
* or `malformed-request` when the signer cannot describe it for consent,
|
|
2460
|
+
* and `details` the values it declared alongside, when any. Both come from
|
|
2461
|
+
* the signer page, so a reader validates `details` before acting on it.
|
|
2462
|
+
*/
|
|
2463
|
+
var RemoteSignerError = class extends Error {
|
|
2464
|
+
code;
|
|
2465
|
+
details;
|
|
2466
|
+
constructor(code, message, details) {
|
|
2467
|
+
super(message);
|
|
2468
|
+
this.code = code;
|
|
2469
|
+
this.details = details;
|
|
2470
|
+
this.name = "RemoteSignerError";
|
|
2471
|
+
}
|
|
2472
|
+
};
|
|
2473
|
+
/**
|
|
2474
|
+
* The signer popup closed, as when the user closes the window, while requests
|
|
2475
|
+
* were still pending (`ceremony-cancelled`).
|
|
2476
|
+
*/
|
|
2477
|
+
var SignerClosedError = class extends Error {
|
|
2478
|
+
code = "ceremony-cancelled";
|
|
2479
|
+
constructor() {
|
|
2480
|
+
super("The signer popup was closed.");
|
|
2481
|
+
this.name = "SignerClosedError";
|
|
2482
|
+
}
|
|
2483
|
+
};
|
|
2484
|
+
//#endregion
|
|
2485
|
+
//#region ../../packages/lib/passkey/src/ceremony.ts
|
|
2486
|
+
const DEFAULT_RP_NAME = "Lace";
|
|
2487
|
+
const CHALLENGE_LENGTH = 32;
|
|
2488
|
+
const USER_ID_LENGTH = 16;
|
|
2489
|
+
const WALLET_ENTROPY_LENGTH = 32;
|
|
2490
|
+
const MAX_CREDENTIAL_ID_LENGTH = 1023;
|
|
2491
|
+
const ES256 = -7;
|
|
2492
|
+
const RS256 = -257;
|
|
2493
|
+
const RECIPE_VERSION = "v1";
|
|
2494
|
+
const encodeId = (id) => btoa(String.fromCharCode(...new Uint8Array(id))).replaceAll("+", "-").replaceAll("/", "_").replace(/=+$/, "");
|
|
2495
|
+
const decodeId = (id) => {
|
|
2496
|
+
if (!/^[A-Za-z0-9_-]+$/.test(id) || id.length > Math.ceil(MAX_CREDENTIAL_ID_LENGTH * 4 / 3)) throw new Error("Invalid passkey credential ID.");
|
|
2497
|
+
let bytes;
|
|
2498
|
+
try {
|
|
2499
|
+
bytes = Uint8Array.from(atob(id.replaceAll("-", "+").replaceAll("_", "/")), (character) => character.charCodeAt(0));
|
|
2500
|
+
} catch {
|
|
2501
|
+
throw new Error("Invalid passkey credential ID.");
|
|
2502
|
+
}
|
|
2503
|
+
if (bytes.length > MAX_CREDENTIAL_ID_LENGTH || encodeId(bytes.buffer) !== id) throw new Error("Invalid passkey credential ID.");
|
|
2504
|
+
return bytes.buffer;
|
|
2505
|
+
};
|
|
2506
|
+
const utf8 = (value) => new TextEncoder().encode(value);
|
|
2507
|
+
/** PRF salts are public domain separators: SHA-256 of their label. */
|
|
2508
|
+
const prfSalt = async (label) => new Uint8Array(await crypto.subtle.digest("SHA-256", utf8(label)));
|
|
2509
|
+
const isCancellation = (error) => error instanceof Object && "name" in error && error.name === "NotAllowedError";
|
|
2510
|
+
const toBytes = (source) => source instanceof ArrayBuffer ? new Uint8Array(source) : new Uint8Array(source.buffer, source.byteOffset, source.byteLength);
|
|
2511
|
+
/** Zeroes every PRF output of one assertion. */
|
|
2512
|
+
const zeroOutputs = (outputs) => {
|
|
2513
|
+
outputs.device?.fill(0);
|
|
2514
|
+
outputs.root.fill(0);
|
|
2515
|
+
};
|
|
2516
|
+
/**
|
|
2517
|
+
* The wallet entropy is HKDF-SHA256 over the root with an empty salt and a
|
|
2518
|
+
* fixed info label. The expanded bytes are zeroed once encoded; the hex
|
|
2519
|
+
* string is what leaves this function, and only for the caller's use.
|
|
2520
|
+
*/
|
|
2521
|
+
const deriveWalletEntropy = (root) => {
|
|
2522
|
+
const raw = hkdf(sha256, root, void 0, HKDF_WALLET_ENTROPY_INFO, WALLET_ENTROPY_LENGTH);
|
|
2523
|
+
try {
|
|
2524
|
+
return EntropyHex(bytesToHex(raw));
|
|
2525
|
+
} finally {
|
|
2526
|
+
raw.fill(0);
|
|
2527
|
+
}
|
|
2528
|
+
};
|
|
2529
|
+
/**
|
|
2530
|
+
* Runs a fresh assertion and confines the words its root derives to `consume`.
|
|
2531
|
+
* The outputs are zeroed and the credential released on success and failure
|
|
2532
|
+
* alike; the credential is committed only when `consume` succeeds.
|
|
2533
|
+
*/
|
|
2534
|
+
const withCeremonyMnemonic = async (ceremony, consume) => {
|
|
2535
|
+
const { outputs, credential } = await ceremony();
|
|
2536
|
+
try {
|
|
2537
|
+
const result = await consume(Mnemonic.deriveFrom(deriveWalletEntropy(outputs.root)));
|
|
2538
|
+
credential.commit();
|
|
2539
|
+
return result;
|
|
2540
|
+
} finally {
|
|
2541
|
+
credential.release();
|
|
2542
|
+
zeroOutputs(outputs);
|
|
2543
|
+
}
|
|
2544
|
+
};
|
|
2545
|
+
/**
|
|
2546
|
+
* The credential handling every key source shares: enrolment, the pinned
|
|
2547
|
+
* credential, and assertions evaluating the PRF at the root salt and, when
|
|
2548
|
+
* `deviceSaltLabel` is given, at that salt first. The root output is the
|
|
2549
|
+
* same either way, so every key source over one passkey derives the same
|
|
2550
|
+
* words.
|
|
2551
|
+
*
|
|
2552
|
+
* Ceremonies pin `allowCredentials` to the credential id captured from
|
|
2553
|
+
* passkey creation or a previous assertion; before one is known the key
|
|
2554
|
+
* is omitted, which is how WebAuthn asks for a discoverable credential,
|
|
2555
|
+
* so the browser offers any resident passkey for the origin. A dismissed
|
|
2556
|
+
* prompt maps to PasskeyCeremonyCancelledError and an authenticator without
|
|
2557
|
+
* PRF support to PasskeyPrfUnsupportedError.
|
|
2558
|
+
*
|
|
2559
|
+
* Enrolment asks for a platform authenticator, so the passkey is created
|
|
2560
|
+
* on the device the user is on and syncs through their platform
|
|
2561
|
+
* credential manager. Without that constraint a browser with no passkey
|
|
2562
|
+
* for the origin yet offers to scan a QR code and enrol another device
|
|
2563
|
+
* instead.
|
|
2564
|
+
*/
|
|
2565
|
+
const createPasskeyCeremonies = ({ credentials, rpName = DEFAULT_RP_NAME, rpId = globalThis.location?.hostname, credentialId: importedCredentialId }, deviceSaltLabel) => {
|
|
2566
|
+
if (!rpId) throw new Error("A passkey RP ID is required.");
|
|
2567
|
+
const container = credentials ?? navigator.credentials;
|
|
2568
|
+
let credentialPin = importedCredentialId !== void 0 ? {
|
|
2569
|
+
credentialId: decodeId(importedCredentialId),
|
|
2570
|
+
committed: true,
|
|
2571
|
+
holders: 0
|
|
2572
|
+
} : void 0;
|
|
2573
|
+
const prfEval = async () => {
|
|
2574
|
+
const rootSalt = await prfSalt(PRF_SALT_ROOT_LABEL);
|
|
2575
|
+
return deviceSaltLabel === void 0 ? { first: rootSalt } : {
|
|
2576
|
+
first: await prfSalt(deviceSaltLabel),
|
|
2577
|
+
second: rootSalt
|
|
2578
|
+
};
|
|
2579
|
+
};
|
|
2580
|
+
const toOutputs = (results) => {
|
|
2581
|
+
if (deviceSaltLabel === void 0) {
|
|
2582
|
+
if (!results?.first) throw new PasskeyPrfUnsupportedError();
|
|
2583
|
+
return { root: toBytes(results.first) };
|
|
2584
|
+
}
|
|
2585
|
+
if (!results?.first || !results.second) throw new PasskeyPrfUnsupportedError();
|
|
2586
|
+
return {
|
|
2587
|
+
device: toBytes(results.first),
|
|
2588
|
+
root: toBytes(results.second)
|
|
2589
|
+
};
|
|
2590
|
+
};
|
|
2591
|
+
const credentialRef = () => credentialPin ? {
|
|
2592
|
+
credentialId: encodeId(credentialPin.credentialId),
|
|
2593
|
+
rpId,
|
|
2594
|
+
recipeVersion: RECIPE_VERSION
|
|
2595
|
+
} : void 0;
|
|
2596
|
+
const releaseCredentialPin = (pin) => {
|
|
2597
|
+
pin.holders -= 1;
|
|
2598
|
+
if (!pin.committed && pin.holders === 0 && credentialPin === pin) credentialPin = void 0;
|
|
2599
|
+
};
|
|
2600
|
+
const createCredential = async () => {
|
|
2601
|
+
const evaluation = await prfEval();
|
|
2602
|
+
let created;
|
|
2603
|
+
try {
|
|
2604
|
+
created = await container.create({ publicKey: {
|
|
2605
|
+
rp: {
|
|
2606
|
+
name: rpName,
|
|
2607
|
+
id: rpId
|
|
2608
|
+
},
|
|
2609
|
+
user: {
|
|
2610
|
+
id: crypto.getRandomValues(new Uint8Array(USER_ID_LENGTH)),
|
|
2611
|
+
name: rpName,
|
|
2612
|
+
displayName: rpName
|
|
2613
|
+
},
|
|
2614
|
+
challenge: crypto.getRandomValues(new Uint8Array(CHALLENGE_LENGTH)),
|
|
2615
|
+
pubKeyCredParams: [{
|
|
2616
|
+
type: "public-key",
|
|
2617
|
+
alg: ES256
|
|
2618
|
+
}, {
|
|
2619
|
+
type: "public-key",
|
|
2620
|
+
alg: RS256
|
|
2621
|
+
}],
|
|
2622
|
+
authenticatorSelection: {
|
|
2623
|
+
authenticatorAttachment: "platform",
|
|
2624
|
+
residentKey: "required",
|
|
2625
|
+
userVerification: "required"
|
|
2626
|
+
},
|
|
2627
|
+
extensions: { prf: { eval: evaluation } }
|
|
2628
|
+
} });
|
|
2629
|
+
} catch (error) {
|
|
2630
|
+
if (isCancellation(error)) throw new PasskeyCeremonyCancelledError();
|
|
2631
|
+
throw error;
|
|
2632
|
+
}
|
|
2633
|
+
if (!created) throw new PasskeyCeremonyCancelledError();
|
|
2634
|
+
const credential = created;
|
|
2635
|
+
if (!credential.getClientExtensionResults().prf?.enabled) throw new PasskeyPrfUnsupportedError();
|
|
2636
|
+
credentialPin = {
|
|
2637
|
+
credentialId: credential.rawId,
|
|
2638
|
+
committed: true,
|
|
2639
|
+
holders: 0
|
|
2640
|
+
};
|
|
2641
|
+
return credentialRef();
|
|
2642
|
+
};
|
|
2643
|
+
let enrolment;
|
|
2644
|
+
const ensureCredential = async () => {
|
|
2645
|
+
const existing = credentialRef();
|
|
2646
|
+
if (existing) return existing;
|
|
2647
|
+
enrolment ??= createCredential().finally(() => {
|
|
2648
|
+
enrolment = void 0;
|
|
2649
|
+
});
|
|
2650
|
+
return enrolment;
|
|
2651
|
+
};
|
|
2652
|
+
const ceremony = async () => {
|
|
2653
|
+
const evaluation = await prfEval();
|
|
2654
|
+
const expectedPin = credentialPin;
|
|
2655
|
+
const expectedCredentialId = expectedPin?.credentialId;
|
|
2656
|
+
if (expectedPin) expectedPin.holders += 1;
|
|
2657
|
+
let asserted;
|
|
2658
|
+
try {
|
|
2659
|
+
asserted = await container.get({ publicKey: {
|
|
2660
|
+
challenge: crypto.getRandomValues(new Uint8Array(CHALLENGE_LENGTH)),
|
|
2661
|
+
rpId,
|
|
2662
|
+
...expectedCredentialId && { allowCredentials: [{
|
|
2663
|
+
type: "public-key",
|
|
2664
|
+
id: expectedCredentialId
|
|
2665
|
+
}] },
|
|
2666
|
+
userVerification: "required",
|
|
2667
|
+
extensions: { prf: { eval: evaluation } }
|
|
2668
|
+
} });
|
|
2669
|
+
} catch (error) {
|
|
2670
|
+
if (expectedPin) releaseCredentialPin(expectedPin);
|
|
2671
|
+
if (isCancellation(error)) throw new PasskeyCeremonyCancelledError();
|
|
2672
|
+
throw error;
|
|
2673
|
+
}
|
|
2674
|
+
if (!asserted) {
|
|
2675
|
+
if (expectedPin) releaseCredentialPin(expectedPin);
|
|
2676
|
+
throw new PasskeyCeremonyCancelledError();
|
|
2677
|
+
}
|
|
2678
|
+
let heldPin = expectedPin;
|
|
2679
|
+
try {
|
|
2680
|
+
const credential = asserted;
|
|
2681
|
+
if (expectedCredentialId && encodeId(credential.rawId) !== encodeId(expectedCredentialId)) throw new PasskeyCredentialMismatchError();
|
|
2682
|
+
const outputs = toOutputs(credential.getClientExtensionResults().prf?.results);
|
|
2683
|
+
if (!heldPin) {
|
|
2684
|
+
const currentPin = credentialPin;
|
|
2685
|
+
if (currentPin && encodeId(credential.rawId) !== encodeId(currentPin.credentialId)) throw new PasskeyCredentialMismatchError();
|
|
2686
|
+
if (currentPin) {
|
|
2687
|
+
currentPin.holders += 1;
|
|
2688
|
+
heldPin = currentPin;
|
|
2689
|
+
} else {
|
|
2690
|
+
heldPin = {
|
|
2691
|
+
credentialId: credential.rawId,
|
|
2692
|
+
committed: false,
|
|
2693
|
+
holders: 1
|
|
2694
|
+
};
|
|
2695
|
+
credentialPin = heldPin;
|
|
2696
|
+
}
|
|
2697
|
+
}
|
|
2698
|
+
const selectedPin = heldPin;
|
|
2699
|
+
let isReleased = false;
|
|
2700
|
+
return {
|
|
2701
|
+
outputs,
|
|
2702
|
+
credential: {
|
|
2703
|
+
commit: () => {
|
|
2704
|
+
selectedPin.committed = true;
|
|
2705
|
+
},
|
|
2706
|
+
release: () => {
|
|
2707
|
+
if (isReleased) return;
|
|
2708
|
+
isReleased = true;
|
|
2709
|
+
releaseCredentialPin(selectedPin);
|
|
2710
|
+
}
|
|
2711
|
+
}
|
|
2712
|
+
};
|
|
2713
|
+
} catch (error) {
|
|
2714
|
+
if (heldPin) releaseCredentialPin(heldPin);
|
|
2715
|
+
throw error;
|
|
2716
|
+
}
|
|
2717
|
+
};
|
|
2718
|
+
return {
|
|
2719
|
+
ensureCredential,
|
|
2720
|
+
credentialRef,
|
|
2721
|
+
ceremony
|
|
2722
|
+
};
|
|
2723
|
+
};
|
|
2724
|
+
//#endregion
|
|
2725
|
+
//#region ../../packages/lib/passkey/src/key-source.ts
|
|
2726
|
+
/**
|
|
2727
|
+
* Creates the key source of one passkey: it runs the WebAuthn PRF ceremony
|
|
2728
|
+
* and derives the passkey's wallet words, handing them only to the callback
|
|
2729
|
+
* of `withPasskeyMnemonic`.
|
|
2730
|
+
*
|
|
2731
|
+
* @remarks
|
|
2732
|
+
* A {@link PasskeyKeySource} over the WebAuthn PRF extension. Each call to
|
|
2733
|
+
* `withPasskeyMnemonic` is its own assertion: the PRF output is the root,
|
|
2734
|
+
* the words derive from it through HKDF and BIP-39, and the root is zeroed
|
|
2735
|
+
* once the callback settles, on success and failure alike. Nothing is kept
|
|
2736
|
+
* between calls except the credential id.
|
|
2737
|
+
*
|
|
2738
|
+
* Ceremonies pin `allowCredentials` to the credential id captured from
|
|
2739
|
+
* passkey creation or a previous assertion; before one is known the key is
|
|
2740
|
+
* omitted, so the browser offers any resident passkey for the origin. A
|
|
2741
|
+
* dismissed prompt rejects with a `ceremony-cancelled` error and an
|
|
2742
|
+
* authenticator without PRF support with a `prf-unsupported` one.
|
|
2743
|
+
*
|
|
2744
|
+
* Enrolment asks for a platform authenticator, so the passkey is created on
|
|
2745
|
+
* the device the user is on and syncs through their platform credential
|
|
2746
|
+
* manager. Without that constraint a browser with no passkey for the origin
|
|
2747
|
+
* yet offers to scan a QR code and enrol another device instead.
|
|
2748
|
+
*
|
|
2749
|
+
* @param props - The relying party, a saved credential ID and the WebAuthn
|
|
2750
|
+
* entry point, each optional.
|
|
2751
|
+
*/
|
|
2752
|
+
const createPasskeyKeySource = (props = {}) => {
|
|
2753
|
+
const { ensureCredential, credentialRef, ceremony } = createPasskeyCeremonies(props);
|
|
2754
|
+
return {
|
|
2755
|
+
ensureCredential,
|
|
2756
|
+
credentialRef,
|
|
2757
|
+
withPasskeyMnemonic: async (use) => withCeremonyMnemonic(ceremony, use)
|
|
2758
|
+
};
|
|
2759
|
+
};
|
|
2760
|
+
//#endregion
|
|
2761
|
+
export { zeroOutputs as a, RemoteSignerError as c, HKDF_RECORD_KEY_INFO as d, PRF_SALT_AUTHORISER_LABEL as f, hmac as g, hkdf as h, withCeremonyMnemonic as i, SignerClosedError as l, EntropyHex as m, createPasskeyCeremonies as n, PasskeyCeremonyCancelledError as o, Mnemonic as p, deriveWalletEntropy as r, PasskeyPrfUnsupportedError as s, createPasskeyKeySource as t, SignerPopupBlockedError as u };
|