quantumcoin 6.14.2 → 6.14.5
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/CHANGELOG.md +442 -442
- package/FUNDING.json +10 -10
- package/LICENSE.md +21 -21
- package/README.md +132 -142
- package/SECURITY.md +34 -34
- package/dist/README.md +22 -22
- package/dist/quantumcoin.js +1127 -1324
- package/dist/quantumcoin.js.map +1 -1
- package/dist/quantumcoin.min.js +1 -1
- package/dist/quantumcoin.umd.js +1128 -1327
- package/dist/quantumcoin.umd.js.map +1 -1
- package/dist/quantumcoin.umd.min.js +1 -1
- package/dist/wordlists-extra.js +1 -1
- package/dist/wordlists-extra.js.map +1 -1
- package/dist/wordlists-extra.min.js +1 -1
- package/lib.commonjs/README.md +16 -16
- package/lib.commonjs/_version.js +1 -1
- package/lib.commonjs/crypto/signature.d.ts +3 -76
- package/lib.commonjs/crypto/signature.d.ts.map +1 -1
- package/lib.commonjs/crypto/signature.js +15 -199
- package/lib.commonjs/crypto/signature.js.map +1 -1
- package/lib.commonjs/crypto/signing-key.d.ts +1 -1
- package/lib.commonjs/crypto/signing-key.d.ts.map +1 -1
- package/lib.commonjs/crypto/signing-key.js +19 -10
- package/lib.commonjs/crypto/signing-key.js.map +1 -1
- package/lib.commonjs/package.json +12 -12
- package/lib.commonjs/providers/provider-jsonrpc.d.ts +0 -1
- package/lib.commonjs/providers/provider-jsonrpc.d.ts.map +1 -1
- package/lib.commonjs/providers/provider-jsonrpc.js +0 -1
- package/lib.commonjs/providers/provider-jsonrpc.js.map +1 -1
- package/lib.commonjs/quantumcoin.d.ts +2 -0
- package/lib.commonjs/quantumcoin.d.ts.map +1 -1
- package/lib.commonjs/quantumcoin.js +11 -5
- package/lib.commonjs/quantumcoin.js.map +1 -1
- package/lib.commonjs/transaction/address.d.ts.map +1 -1
- package/lib.commonjs/transaction/address.js +8 -3
- package/lib.commonjs/transaction/address.js.map +1 -1
- package/lib.commonjs/transaction/transaction.d.ts.map +1 -1
- package/lib.commonjs/transaction/transaction.js +7 -40
- package/lib.commonjs/transaction/transaction.js.map +1 -1
- package/lib.commonjs/wallet/json-keystore.d.ts.map +1 -1
- package/lib.commonjs/wallet/json-keystore.js +7 -7
- package/lib.commonjs/wallet/json-keystore.js.map +1 -1
- package/lib.commonjs/wallet/wallet.d.ts.map +1 -1
- package/lib.commonjs/wallet/wallet.js +2 -2
- package/lib.commonjs/wallet/wallet.js.map +1 -1
- package/lib.esm/README.md +16 -16
- package/lib.esm/_version.js +1 -1
- package/lib.esm/crypto/signature.d.ts +3 -76
- package/lib.esm/crypto/signature.d.ts.map +1 -1
- package/lib.esm/crypto/signature.js +16 -202
- package/lib.esm/crypto/signature.js.map +1 -1
- package/lib.esm/crypto/signing-key.d.ts +1 -1
- package/lib.esm/crypto/signing-key.d.ts.map +1 -1
- package/lib.esm/crypto/signing-key.js +20 -9
- package/lib.esm/crypto/signing-key.js.map +1 -1
- package/lib.esm/package.json +12 -12
- package/lib.esm/providers/provider-jsonrpc.d.ts +0 -1
- package/lib.esm/providers/provider-jsonrpc.d.ts.map +1 -1
- package/lib.esm/providers/provider-jsonrpc.js +0 -1
- package/lib.esm/providers/provider-jsonrpc.js.map +1 -1
- package/lib.esm/quantumcoin.d.ts +2 -0
- package/lib.esm/quantumcoin.d.ts.map +1 -1
- package/lib.esm/quantumcoin.js +6 -0
- package/lib.esm/quantumcoin.js.map +1 -1
- package/lib.esm/transaction/address.d.ts.map +1 -1
- package/lib.esm/transaction/address.js +8 -2
- package/lib.esm/transaction/address.js.map +1 -1
- package/lib.esm/transaction/transaction.d.ts.map +1 -1
- package/lib.esm/transaction/transaction.js +7 -40
- package/lib.esm/transaction/transaction.js.map +1 -1
- package/lib.esm/wallet/json-keystore.d.ts.map +1 -1
- package/lib.esm/wallet/json-keystore.js +11 -5
- package/lib.esm/wallet/json-keystore.js.map +1 -1
- package/lib.esm/wallet/wallet.d.ts.map +1 -1
- package/lib.esm/wallet/wallet.js +3 -1
- package/lib.esm/wallet/wallet.js.map +1 -1
- package/package.json +6 -5
- package/rollup.config.mjs +50 -50
- package/src.ts/_version.ts +1 -1
- package/src.ts/abi/abi-coder.ts +237 -237
- package/src.ts/abi/bytes32.ts +45 -45
- package/src.ts/abi/coders/abstract-coder.ts +541 -541
- package/src.ts/abi/coders/address.ts +36 -36
- package/src.ts/abi/coders/anonymous.ts +29 -29
- package/src.ts/abi/coders/array.ts +199 -199
- package/src.ts/abi/coders/boolean.ts +27 -27
- package/src.ts/abi/coders/bytes.ts +43 -43
- package/src.ts/abi/coders/fixed-bytes.ts +37 -37
- package/src.ts/abi/coders/null.ts +28 -28
- package/src.ts/abi/coders/number.ts +63 -63
- package/src.ts/abi/coders/string.ts +29 -29
- package/src.ts/abi/coders/tuple.ts +69 -69
- package/src.ts/abi/fragments.ts +1617 -1617
- package/src.ts/abi/index.ts +41 -41
- package/src.ts/abi/interface.ts +1271 -1271
- package/src.ts/abi/typed.ts +796 -796
- package/src.ts/address/address.ts +148 -148
- package/src.ts/address/checks.ts +123 -123
- package/src.ts/address/contract-address.ts +80 -80
- package/src.ts/address/index.ts +57 -57
- package/src.ts/constants/addresses.ts +8 -8
- package/src.ts/constants/hashes.ts +7 -7
- package/src.ts/constants/index.ts +16 -16
- package/src.ts/constants/numbers.ts +35 -35
- package/src.ts/constants/strings.ts +16 -16
- package/src.ts/contract/contract.ts +1120 -1120
- package/src.ts/contract/factory.ts +143 -143
- package/src.ts/contract/index.ts +31 -31
- package/src.ts/contract/types.ts +236 -236
- package/src.ts/contract/wrappers.ts +225 -225
- package/src.ts/crypto/crypto-browser.ts +64 -64
- package/src.ts/crypto/crypto.ts +4 -4
- package/src.ts/crypto/hmac.ts +51 -51
- package/src.ts/crypto/index.ts +59 -59
- package/src.ts/crypto/keccak.ts +54 -54
- package/src.ts/crypto/pbkdf2.ts +55 -55
- package/src.ts/crypto/random.ts +36 -36
- package/src.ts/crypto/ripemd160.ts +43 -43
- package/src.ts/crypto/scrypt.ts +114 -114
- package/src.ts/crypto/sha2.ts +78 -78
- package/src.ts/crypto/signature.ts +145 -349
- package/src.ts/crypto/signing-key.ts +126 -118
- package/src.ts/hash/authorization.ts +38 -38
- package/src.ts/hash/id.ts +17 -17
- package/src.ts/hash/index.ts +18 -18
- package/src.ts/hash/message.ts +51 -51
- package/src.ts/hash/namehash.ts +101 -101
- package/src.ts/hash/solidity.ts +117 -117
- package/src.ts/hash/typed-data.ts +658 -658
- package/src.ts/index.ts +12 -12
- package/src.ts/providers/abstract-provider.ts +1761 -1761
- package/src.ts/providers/abstract-signer.ts +314 -314
- package/src.ts/providers/community.ts +49 -49
- package/src.ts/providers/contracts.ts +42 -42
- package/src.ts/providers/default-provider.ts +96 -96
- package/src.ts/providers/ens-resolver.ts +606 -606
- package/src.ts/providers/format.ts +320 -320
- package/src.ts/providers/formatting.ts +418 -418
- package/src.ts/providers/index.ts +125 -125
- package/src.ts/providers/network.ts +327 -327
- package/src.ts/providers/pagination.ts +8 -8
- package/src.ts/providers/plugin-fallback.ts +35 -35
- package/src.ts/providers/plugins-network.ts +281 -281
- package/src.ts/providers/provider-browser.ts +334 -334
- package/src.ts/providers/provider-fallback.ts +801 -801
- package/src.ts/providers/provider-ipcsocket-browser.ts +3 -3
- package/src.ts/providers/provider-ipcsocket.ts +81 -81
- package/src.ts/providers/provider-jsonrpc.ts +1334 -1335
- package/src.ts/providers/provider-socket.ts +352 -352
- package/src.ts/providers/provider-websocket.ts +103 -103
- package/src.ts/providers/provider.ts +2136 -2136
- package/src.ts/providers/signer-noncemanager.ts +98 -98
- package/src.ts/providers/signer.ts +166 -166
- package/src.ts/providers/subscriber-connection.ts +74 -74
- package/src.ts/providers/subscriber-filterid.ts +199 -199
- package/src.ts/providers/subscriber-polling.ts +321 -321
- package/src.ts/providers/ws-browser.ts +11 -11
- package/src.ts/providers/ws.ts +3 -3
- package/src.ts/quantumcoin.ts +219 -211
- package/src.ts/thirdparty.d.ts +16 -16
- package/src.ts/transaction/accesslist.ts +43 -43
- package/src.ts/transaction/address.ts +35 -31
- package/src.ts/transaction/authorization.ts +14 -14
- package/src.ts/transaction/index.ts +51 -51
- package/src.ts/transaction/transaction.ts +1349 -1379
- package/src.ts/utils/base58.ts +73 -73
- package/src.ts/utils/base64-browser.ts +25 -25
- package/src.ts/utils/base64.ts +56 -56
- package/src.ts/utils/data.ts +199 -199
- package/src.ts/utils/errors.ts +793 -793
- package/src.ts/utils/events.ts +105 -105
- package/src.ts/utils/fetch.ts +970 -970
- package/src.ts/utils/fixednumber.ts +643 -643
- package/src.ts/utils/geturl-browser.ts +81 -81
- package/src.ts/utils/geturl.ts +134 -134
- package/src.ts/utils/index.ts +95 -95
- package/src.ts/utils/maths.ts +240 -240
- package/src.ts/utils/properties.ts +60 -60
- package/src.ts/utils/rlp-decode.ts +104 -104
- package/src.ts/utils/rlp-encode.ts +64 -64
- package/src.ts/utils/rlp.ts +20 -20
- package/src.ts/utils/units.ts +91 -91
- package/src.ts/utils/utf8.ts +325 -325
- package/src.ts/utils/uuid.ts +36 -36
- package/src.ts/wallet/base-wallet.ts +160 -160
- package/src.ts/wallet/index.ts +32 -32
- package/src.ts/wallet/json-keystore.ts +108 -106
- package/src.ts/wallet/utils.ts +147 -147
- package/src.ts/wallet/wallet.ts +138 -139
- package/src.ts/wordlists/bit-reader.ts +35 -35
- package/src.ts/wordlists/decode-owl.ts +58 -58
- package/src.ts/wordlists/decode-owla.ts +33 -33
- package/src.ts/wordlists/generation/encode-latin.ts +370 -370
- package/src.ts/wordlists/index.ts +26 -26
- package/src.ts/wordlists/lang-cz.ts +33 -33
- package/src.ts/wordlists/lang-en.ts +33 -33
- package/src.ts/wordlists/lang-es.ts +35 -35
- package/src.ts/wordlists/lang-fr.ts +34 -34
- package/src.ts/wordlists/lang-it.ts +33 -33
- package/src.ts/wordlists/lang-ja.ts +181 -181
- package/src.ts/wordlists/lang-ko.ts +104 -104
- package/src.ts/wordlists/lang-pt.ts +34 -34
- package/src.ts/wordlists/lang-zh.ts +112 -112
- package/src.ts/wordlists/wordlist-owl.ts +77 -77
- package/src.ts/wordlists/wordlist-owla.ts +41 -41
- package/src.ts/wordlists/wordlist.ts +59 -59
- package/src.ts/wordlists/wordlists-browser.ts +8 -8
- package/src.ts/wordlists/wordlists-extra.ts +9 -9
- package/src.ts/wordlists/wordlists.ts +38 -38
- package/dist/quantumcoin.min.js'.gz' +0 -0
- package/dist/quantumcoin.umd.min.js'.gz' +0 -0
- package/dist/wordlists-extra.min.js'.gz' +0 -0
- package/lib.commonjs/providers/provider-alchemy.d.ts +0 -50
- package/lib.commonjs/providers/provider-alchemy.d.ts.map +0 -1
- package/lib.commonjs/providers/provider-alchemy.js +0 -151
- package/lib.commonjs/providers/provider-alchemy.js.map +0 -1
- package/lib.commonjs/providers/provider-ankr.d.ts +0 -61
- package/lib.commonjs/providers/provider-ankr.d.ts.map +0 -1
- package/lib.commonjs/providers/provider-ankr.js +0 -137
- package/lib.commonjs/providers/provider-ankr.js.map +0 -1
- package/lib.commonjs/providers/provider-blockscout.d.ts +0 -59
- package/lib.commonjs/providers/provider-blockscout.d.ts.map +0 -1
- package/lib.commonjs/providers/provider-blockscout.js +0 -145
- package/lib.commonjs/providers/provider-blockscout.js.map +0 -1
- package/lib.commonjs/providers/provider-chainstack.d.ts +0 -46
- package/lib.commonjs/providers/provider-chainstack.d.ts.map +0 -1
- package/lib.commonjs/providers/provider-chainstack.js +0 -102
- package/lib.commonjs/providers/provider-chainstack.js.map +0 -1
- package/lib.commonjs/providers/provider-cloudflare.d.ts +0 -14
- package/lib.commonjs/providers/provider-cloudflare.d.ts.map +0 -1
- package/lib.commonjs/providers/provider-cloudflare.js +0 -26
- package/lib.commonjs/providers/provider-cloudflare.js.map +0 -1
- package/lib.commonjs/providers/provider-etherscan.d.ts +0 -147
- package/lib.commonjs/providers/provider-etherscan.d.ts.map +0 -1
- package/lib.commonjs/providers/provider-etherscan.js +0 -587
- package/lib.commonjs/providers/provider-etherscan.js.map +0 -1
- package/lib.commonjs/providers/provider-infura.d.ts +0 -101
- package/lib.commonjs/providers/provider-infura.d.ts.map +0 -1
- package/lib.commonjs/providers/provider-infura.js +0 -206
- package/lib.commonjs/providers/provider-infura.js.map +0 -1
- package/lib.commonjs/providers/provider-pocket.d.ts +0 -54
- package/lib.commonjs/providers/provider-pocket.d.ts.map +0 -1
- package/lib.commonjs/providers/provider-pocket.js +0 -109
- package/lib.commonjs/providers/provider-pocket.js.map +0 -1
- package/lib.commonjs/providers/provider-quicknode.d.ts +0 -59
- package/lib.commonjs/providers/provider-quicknode.d.ts.map +0 -1
- package/lib.commonjs/providers/provider-quicknode.js +0 -163
- package/lib.commonjs/providers/provider-quicknode.js.map +0 -1
- package/lib.commonjs/wallet/hdwallet.d.ts +0 -248
- package/lib.commonjs/wallet/hdwallet.d.ts.map +0 -1
- package/lib.commonjs/wallet/hdwallet.js +0 -505
- package/lib.commonjs/wallet/hdwallet.js.map +0 -1
- package/lib.commonjs/wallet/json-crowdsale.d.ts +0 -27
- package/lib.commonjs/wallet/json-crowdsale.d.ts.map +0 -1
- package/lib.commonjs/wallet/json-crowdsale.js +0 -60
- package/lib.commonjs/wallet/json-crowdsale.js.map +0 -1
- package/lib.commonjs/wallet/mnemonic.d.ts +0 -65
- package/lib.commonjs/wallet/mnemonic.d.ts.map +0 -1
- package/lib.commonjs/wallet/mnemonic.js +0 -169
- package/lib.commonjs/wallet/mnemonic.js.map +0 -1
- package/lib.commonjs/wallet/seedwallet.d.ts +0 -4
- package/lib.commonjs/wallet/seedwallet.d.ts.map +0 -1
- package/lib.commonjs/wallet/seedwallet.js +0 -8
- package/lib.commonjs/wallet/seedwallet.js.map +0 -1
- package/lib.esm/providers/provider-alchemy.d.ts +0 -50
- package/lib.esm/providers/provider-alchemy.d.ts.map +0 -1
- package/lib.esm/providers/provider-alchemy.js +0 -147
- package/lib.esm/providers/provider-alchemy.js.map +0 -1
- package/lib.esm/providers/provider-ankr.d.ts +0 -61
- package/lib.esm/providers/provider-ankr.d.ts.map +0 -1
- package/lib.esm/providers/provider-ankr.js +0 -133
- package/lib.esm/providers/provider-ankr.js.map +0 -1
- package/lib.esm/providers/provider-blockscout.d.ts +0 -59
- package/lib.esm/providers/provider-blockscout.d.ts.map +0 -1
- package/lib.esm/providers/provider-blockscout.js +0 -141
- package/lib.esm/providers/provider-blockscout.js.map +0 -1
- package/lib.esm/providers/provider-chainstack.d.ts +0 -46
- package/lib.esm/providers/provider-chainstack.d.ts.map +0 -1
- package/lib.esm/providers/provider-chainstack.js +0 -98
- package/lib.esm/providers/provider-chainstack.js.map +0 -1
- package/lib.esm/providers/provider-cloudflare.d.ts +0 -14
- package/lib.esm/providers/provider-cloudflare.d.ts.map +0 -1
- package/lib.esm/providers/provider-cloudflare.js +0 -22
- package/lib.esm/providers/provider-cloudflare.js.map +0 -1
- package/lib.esm/providers/provider-etherscan.d.ts +0 -147
- package/lib.esm/providers/provider-etherscan.d.ts.map +0 -1
- package/lib.esm/providers/provider-etherscan.js +0 -584
- package/lib.esm/providers/provider-etherscan.js.map +0 -1
- package/lib.esm/providers/provider-infura.d.ts +0 -101
- package/lib.esm/providers/provider-infura.d.ts.map +0 -1
- package/lib.esm/providers/provider-infura.js +0 -201
- package/lib.esm/providers/provider-infura.js.map +0 -1
- package/lib.esm/providers/provider-pocket.d.ts +0 -54
- package/lib.esm/providers/provider-pocket.d.ts.map +0 -1
- package/lib.esm/providers/provider-pocket.js +0 -105
- package/lib.esm/providers/provider-pocket.js.map +0 -1
- package/lib.esm/providers/provider-quicknode.d.ts +0 -59
- package/lib.esm/providers/provider-quicknode.d.ts.map +0 -1
- package/lib.esm/providers/provider-quicknode.js +0 -159
- package/lib.esm/providers/provider-quicknode.js.map +0 -1
- package/lib.esm/wallet/hdwallet.d.ts +0 -248
- package/lib.esm/wallet/hdwallet.d.ts.map +0 -1
- package/lib.esm/wallet/hdwallet.js +0 -498
- package/lib.esm/wallet/hdwallet.js.map +0 -1
- package/lib.esm/wallet/json-crowdsale.d.ts +0 -27
- package/lib.esm/wallet/json-crowdsale.d.ts.map +0 -1
- package/lib.esm/wallet/json-crowdsale.js +0 -55
- package/lib.esm/wallet/json-crowdsale.js.map +0 -1
- package/lib.esm/wallet/mnemonic.d.ts +0 -65
- package/lib.esm/wallet/mnemonic.d.ts.map +0 -1
- package/lib.esm/wallet/mnemonic.js +0 -165
- package/lib.esm/wallet/mnemonic.js.map +0 -1
- package/lib.esm/wallet/seedwallet.d.ts +0 -4
- package/lib.esm/wallet/seedwallet.d.ts.map +0 -1
- package/lib.esm/wallet/seedwallet.js +0 -4
- package/lib.esm/wallet/seedwallet.js.map +0 -1
package/src.ts/crypto/scrypt.ts
CHANGED
|
@@ -1,114 +1,114 @@
|
|
|
1
|
-
import { scrypt as _nobleSync, scryptAsync as _nobleAsync } from "@noble/hashes/scrypt";
|
|
2
|
-
|
|
3
|
-
import { getBytes, hexlify as H } from "../utils/index.js";
|
|
4
|
-
|
|
5
|
-
import type { BytesLike } from "../utils/index.js";
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* A callback during long-running operations to update any
|
|
9
|
-
* UI or provide programatic access to the progress.
|
|
10
|
-
*
|
|
11
|
-
* The %%percent%% is a value between ``0`` and ``1``.
|
|
12
|
-
*
|
|
13
|
-
* @_docloc: api/crypto:Passwords
|
|
14
|
-
*/
|
|
15
|
-
export type ProgressCallback = (percent: number) => void;
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
let lockedSync = false, lockedAsync = false;
|
|
19
|
-
|
|
20
|
-
const _scryptAsync = async function(passwd: Uint8Array, salt: Uint8Array, N: number, r: number, p: number, dkLen: number, onProgress?: ProgressCallback) {
|
|
21
|
-
return await _nobleAsync(passwd, salt, { N, r, p, dkLen, onProgress });
|
|
22
|
-
}
|
|
23
|
-
const _scryptSync = function(passwd: Uint8Array, salt: Uint8Array, N: number, r: number, p: number, dkLen: number) {
|
|
24
|
-
return _nobleSync(passwd, salt, { N, r, p, dkLen });
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
let __scryptAsync: (passwd: Uint8Array, salt: Uint8Array, N: number, r: number, p: number, dkLen: number, onProgress?: ProgressCallback) => Promise<BytesLike> = _scryptAsync;
|
|
28
|
-
let __scryptSync: (passwd: Uint8Array, salt: Uint8Array, N: number, r: number, p: number, dkLen: number) => BytesLike = _scryptSync
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* The [[link-wiki-scrypt]] uses a memory and cpu hard method of
|
|
33
|
-
* derivation to increase the resource cost to brute-force a password
|
|
34
|
-
* for a given key.
|
|
35
|
-
*
|
|
36
|
-
* This means this algorithm is intentionally slow, and can be tuned to
|
|
37
|
-
* become slower. As computation and memory speed improve over time,
|
|
38
|
-
* increasing the difficulty maintains the cost of an attacker.
|
|
39
|
-
*
|
|
40
|
-
* For example, if a target time of 5 seconds is used, a legitimate user
|
|
41
|
-
* which knows their password requires only 5 seconds to unlock their
|
|
42
|
-
* account. A 6 character password has 68 billion possibilities, which
|
|
43
|
-
* would require an attacker to invest over 10,000 years of CPU time. This
|
|
44
|
-
* is of course a crude example (as password generally aren't random),
|
|
45
|
-
* but demonstrates to value of imposing large costs to decryption.
|
|
46
|
-
*
|
|
47
|
-
* For this reason, if building a UI which involved decrypting or
|
|
48
|
-
* encrypting datsa using scrypt, it is recommended to use a
|
|
49
|
-
* [[ProgressCallback]] (as event short periods can seem lik an eternity
|
|
50
|
-
* if the UI freezes). Including the phrase //"decrypting"// in the UI
|
|
51
|
-
* can also help, assuring the user their waiting is for a good reason.
|
|
52
|
-
*
|
|
53
|
-
* @_docloc: api/crypto:Passwords
|
|
54
|
-
*
|
|
55
|
-
* @example:
|
|
56
|
-
* // The password must be converted to bytes, and it is generally
|
|
57
|
-
* // best practices to ensure the string has been normalized. Many
|
|
58
|
-
* // formats explicitly indicate the normalization form to use.
|
|
59
|
-
* password = "hello"
|
|
60
|
-
* passwordBytes = toUtf8Bytes(password, "NFKC")
|
|
61
|
-
*
|
|
62
|
-
* salt = id("some-salt")
|
|
63
|
-
*
|
|
64
|
-
* // Compute the scrypt
|
|
65
|
-
* scrypt(passwordBytes, salt, 1024, 8, 1, 16)
|
|
66
|
-
* //_result:
|
|
67
|
-
*/
|
|
68
|
-
export async function scrypt(_passwd: BytesLike, _salt: BytesLike, N: number, r: number, p: number, dkLen: number, progress?: ProgressCallback): Promise<string> {
|
|
69
|
-
const passwd = getBytes(_passwd, "passwd");
|
|
70
|
-
const salt = getBytes(_salt, "salt");
|
|
71
|
-
return H(await __scryptAsync(passwd, salt, N, r, p, dkLen, progress));
|
|
72
|
-
}
|
|
73
|
-
scrypt._ = _scryptAsync;
|
|
74
|
-
scrypt.lock = function(): void { lockedAsync = true; }
|
|
75
|
-
scrypt.register = function(func: (passwd: Uint8Array, salt: Uint8Array, N: number, r: number, p: number, dkLen: number, progress?: ProgressCallback) => Promise<BytesLike>) {
|
|
76
|
-
if (lockedAsync) { throw new Error("scrypt is locked"); }
|
|
77
|
-
__scryptAsync = func;
|
|
78
|
-
}
|
|
79
|
-
Object.freeze(scrypt);
|
|
80
|
-
|
|
81
|
-
/**
|
|
82
|
-
* Provides a synchronous variant of [[scrypt]].
|
|
83
|
-
*
|
|
84
|
-
* This will completely lock up and freeze the UI in a browser and will
|
|
85
|
-
* prevent any event loop from progressing. For this reason, it is
|
|
86
|
-
* preferred to use the [async variant](scrypt).
|
|
87
|
-
*
|
|
88
|
-
* @_docloc: api/crypto:Passwords
|
|
89
|
-
*
|
|
90
|
-
* @example:
|
|
91
|
-
* // The password must be converted to bytes, and it is generally
|
|
92
|
-
* // best practices to ensure the string has been normalized. Many
|
|
93
|
-
* // formats explicitly indicate the normalization form to use.
|
|
94
|
-
* password = "hello"
|
|
95
|
-
* passwordBytes = toUtf8Bytes(password, "NFKC")
|
|
96
|
-
*
|
|
97
|
-
* salt = id("some-salt")
|
|
98
|
-
*
|
|
99
|
-
* // Compute the scrypt
|
|
100
|
-
* scryptSync(passwordBytes, salt, 1024, 8, 1, 16)
|
|
101
|
-
* //_result:
|
|
102
|
-
*/
|
|
103
|
-
export function scryptSync(_passwd: BytesLike, _salt: BytesLike, N: number, r: number, p: number, dkLen: number): string {
|
|
104
|
-
const passwd = getBytes(_passwd, "passwd");
|
|
105
|
-
const salt = getBytes(_salt, "salt");
|
|
106
|
-
return H(__scryptSync(passwd, salt, N, r, p, dkLen));
|
|
107
|
-
}
|
|
108
|
-
scryptSync._ = _scryptSync;
|
|
109
|
-
scryptSync.lock = function(): void { lockedSync = true; }
|
|
110
|
-
scryptSync.register = function(func: (passwd: Uint8Array, salt: Uint8Array, N: number, r: number, p: number, dkLen: number) => BytesLike) {
|
|
111
|
-
if (lockedSync) { throw new Error("scryptSync is locked"); }
|
|
112
|
-
__scryptSync = func;
|
|
113
|
-
}
|
|
114
|
-
Object.freeze(scryptSync);
|
|
1
|
+
import { scrypt as _nobleSync, scryptAsync as _nobleAsync } from "@noble/hashes/scrypt";
|
|
2
|
+
|
|
3
|
+
import { getBytes, hexlify as H } from "../utils/index.js";
|
|
4
|
+
|
|
5
|
+
import type { BytesLike } from "../utils/index.js";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* A callback during long-running operations to update any
|
|
9
|
+
* UI or provide programatic access to the progress.
|
|
10
|
+
*
|
|
11
|
+
* The %%percent%% is a value between ``0`` and ``1``.
|
|
12
|
+
*
|
|
13
|
+
* @_docloc: api/crypto:Passwords
|
|
14
|
+
*/
|
|
15
|
+
export type ProgressCallback = (percent: number) => void;
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
let lockedSync = false, lockedAsync = false;
|
|
19
|
+
|
|
20
|
+
const _scryptAsync = async function(passwd: Uint8Array, salt: Uint8Array, N: number, r: number, p: number, dkLen: number, onProgress?: ProgressCallback) {
|
|
21
|
+
return await _nobleAsync(passwd, salt, { N, r, p, dkLen, onProgress });
|
|
22
|
+
}
|
|
23
|
+
const _scryptSync = function(passwd: Uint8Array, salt: Uint8Array, N: number, r: number, p: number, dkLen: number) {
|
|
24
|
+
return _nobleSync(passwd, salt, { N, r, p, dkLen });
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
let __scryptAsync: (passwd: Uint8Array, salt: Uint8Array, N: number, r: number, p: number, dkLen: number, onProgress?: ProgressCallback) => Promise<BytesLike> = _scryptAsync;
|
|
28
|
+
let __scryptSync: (passwd: Uint8Array, salt: Uint8Array, N: number, r: number, p: number, dkLen: number) => BytesLike = _scryptSync
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* The [[link-wiki-scrypt]] uses a memory and cpu hard method of
|
|
33
|
+
* derivation to increase the resource cost to brute-force a password
|
|
34
|
+
* for a given key.
|
|
35
|
+
*
|
|
36
|
+
* This means this algorithm is intentionally slow, and can be tuned to
|
|
37
|
+
* become slower. As computation and memory speed improve over time,
|
|
38
|
+
* increasing the difficulty maintains the cost of an attacker.
|
|
39
|
+
*
|
|
40
|
+
* For example, if a target time of 5 seconds is used, a legitimate user
|
|
41
|
+
* which knows their password requires only 5 seconds to unlock their
|
|
42
|
+
* account. A 6 character password has 68 billion possibilities, which
|
|
43
|
+
* would require an attacker to invest over 10,000 years of CPU time. This
|
|
44
|
+
* is of course a crude example (as password generally aren't random),
|
|
45
|
+
* but demonstrates to value of imposing large costs to decryption.
|
|
46
|
+
*
|
|
47
|
+
* For this reason, if building a UI which involved decrypting or
|
|
48
|
+
* encrypting datsa using scrypt, it is recommended to use a
|
|
49
|
+
* [[ProgressCallback]] (as event short periods can seem lik an eternity
|
|
50
|
+
* if the UI freezes). Including the phrase //"decrypting"// in the UI
|
|
51
|
+
* can also help, assuring the user their waiting is for a good reason.
|
|
52
|
+
*
|
|
53
|
+
* @_docloc: api/crypto:Passwords
|
|
54
|
+
*
|
|
55
|
+
* @example:
|
|
56
|
+
* // The password must be converted to bytes, and it is generally
|
|
57
|
+
* // best practices to ensure the string has been normalized. Many
|
|
58
|
+
* // formats explicitly indicate the normalization form to use.
|
|
59
|
+
* password = "hello"
|
|
60
|
+
* passwordBytes = toUtf8Bytes(password, "NFKC")
|
|
61
|
+
*
|
|
62
|
+
* salt = id("some-salt")
|
|
63
|
+
*
|
|
64
|
+
* // Compute the scrypt
|
|
65
|
+
* scrypt(passwordBytes, salt, 1024, 8, 1, 16)
|
|
66
|
+
* //_result:
|
|
67
|
+
*/
|
|
68
|
+
export async function scrypt(_passwd: BytesLike, _salt: BytesLike, N: number, r: number, p: number, dkLen: number, progress?: ProgressCallback): Promise<string> {
|
|
69
|
+
const passwd = getBytes(_passwd, "passwd");
|
|
70
|
+
const salt = getBytes(_salt, "salt");
|
|
71
|
+
return H(await __scryptAsync(passwd, salt, N, r, p, dkLen, progress));
|
|
72
|
+
}
|
|
73
|
+
scrypt._ = _scryptAsync;
|
|
74
|
+
scrypt.lock = function(): void { lockedAsync = true; }
|
|
75
|
+
scrypt.register = function(func: (passwd: Uint8Array, salt: Uint8Array, N: number, r: number, p: number, dkLen: number, progress?: ProgressCallback) => Promise<BytesLike>) {
|
|
76
|
+
if (lockedAsync) { throw new Error("scrypt is locked"); }
|
|
77
|
+
__scryptAsync = func;
|
|
78
|
+
}
|
|
79
|
+
Object.freeze(scrypt);
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Provides a synchronous variant of [[scrypt]].
|
|
83
|
+
*
|
|
84
|
+
* This will completely lock up and freeze the UI in a browser and will
|
|
85
|
+
* prevent any event loop from progressing. For this reason, it is
|
|
86
|
+
* preferred to use the [async variant](scrypt).
|
|
87
|
+
*
|
|
88
|
+
* @_docloc: api/crypto:Passwords
|
|
89
|
+
*
|
|
90
|
+
* @example:
|
|
91
|
+
* // The password must be converted to bytes, and it is generally
|
|
92
|
+
* // best practices to ensure the string has been normalized. Many
|
|
93
|
+
* // formats explicitly indicate the normalization form to use.
|
|
94
|
+
* password = "hello"
|
|
95
|
+
* passwordBytes = toUtf8Bytes(password, "NFKC")
|
|
96
|
+
*
|
|
97
|
+
* salt = id("some-salt")
|
|
98
|
+
*
|
|
99
|
+
* // Compute the scrypt
|
|
100
|
+
* scryptSync(passwordBytes, salt, 1024, 8, 1, 16)
|
|
101
|
+
* //_result:
|
|
102
|
+
*/
|
|
103
|
+
export function scryptSync(_passwd: BytesLike, _salt: BytesLike, N: number, r: number, p: number, dkLen: number): string {
|
|
104
|
+
const passwd = getBytes(_passwd, "passwd");
|
|
105
|
+
const salt = getBytes(_salt, "salt");
|
|
106
|
+
return H(__scryptSync(passwd, salt, N, r, p, dkLen));
|
|
107
|
+
}
|
|
108
|
+
scryptSync._ = _scryptSync;
|
|
109
|
+
scryptSync.lock = function(): void { lockedSync = true; }
|
|
110
|
+
scryptSync.register = function(func: (passwd: Uint8Array, salt: Uint8Array, N: number, r: number, p: number, dkLen: number) => BytesLike) {
|
|
111
|
+
if (lockedSync) { throw new Error("scryptSync is locked"); }
|
|
112
|
+
__scryptSync = func;
|
|
113
|
+
}
|
|
114
|
+
Object.freeze(scryptSync);
|
package/src.ts/crypto/sha2.ts
CHANGED
|
@@ -1,78 +1,78 @@
|
|
|
1
|
-
import { createHash } from "./crypto.js";
|
|
2
|
-
|
|
3
|
-
import { getBytes, hexlify } from "../utils/index.js";
|
|
4
|
-
|
|
5
|
-
import type { BytesLike } from "../utils/index.js";
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const _sha256 = function(data: Uint8Array): Uint8Array {
|
|
9
|
-
return createHash("sha256").update(data).digest();
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
const _sha512 = function(data: Uint8Array): Uint8Array {
|
|
13
|
-
return createHash("sha512").update(data).digest();
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
let __sha256: (data: Uint8Array) => BytesLike = _sha256;
|
|
17
|
-
let __sha512: (data: Uint8Array) => BytesLike = _sha512;
|
|
18
|
-
|
|
19
|
-
let locked256 = false, locked512 = false;
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Compute the cryptographic SHA2-256 hash of %%data%%.
|
|
24
|
-
*
|
|
25
|
-
* @_docloc: api/crypto:Hash Functions
|
|
26
|
-
* @returns DataHexstring
|
|
27
|
-
*
|
|
28
|
-
* @example:
|
|
29
|
-
* sha256("0x")
|
|
30
|
-
* //_result:
|
|
31
|
-
*
|
|
32
|
-
* sha256("0x1337")
|
|
33
|
-
* //_result:
|
|
34
|
-
*
|
|
35
|
-
* sha256(new Uint8Array([ 0x13, 0x37 ]))
|
|
36
|
-
* //_result:
|
|
37
|
-
*
|
|
38
|
-
*/
|
|
39
|
-
export function sha256(_data: BytesLike): string {
|
|
40
|
-
const data = getBytes(_data, "data");
|
|
41
|
-
return hexlify(__sha256(data));
|
|
42
|
-
}
|
|
43
|
-
sha256._ = _sha256;
|
|
44
|
-
sha256.lock = function(): void { locked256 = true; }
|
|
45
|
-
sha256.register = function(func: (data: Uint8Array) => BytesLike): void {
|
|
46
|
-
if (locked256) { throw new Error("sha256 is locked"); }
|
|
47
|
-
__sha256 = func;
|
|
48
|
-
}
|
|
49
|
-
Object.freeze(sha256);
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
* Compute the cryptographic SHA2-512 hash of %%data%%.
|
|
54
|
-
*
|
|
55
|
-
* @_docloc: api/crypto:Hash Functions
|
|
56
|
-
* @returns DataHexstring
|
|
57
|
-
*
|
|
58
|
-
* @example:
|
|
59
|
-
* sha512("0x")
|
|
60
|
-
* //_result:
|
|
61
|
-
*
|
|
62
|
-
* sha512("0x1337")
|
|
63
|
-
* //_result:
|
|
64
|
-
*
|
|
65
|
-
* sha512(new Uint8Array([ 0x13, 0x37 ]))
|
|
66
|
-
* //_result:
|
|
67
|
-
*/
|
|
68
|
-
export function sha512(_data: BytesLike): string {
|
|
69
|
-
const data = getBytes(_data, "data");
|
|
70
|
-
return hexlify(__sha512(data));
|
|
71
|
-
}
|
|
72
|
-
sha512._ = _sha512;
|
|
73
|
-
sha512.lock = function(): void { locked512 = true; }
|
|
74
|
-
sha512.register = function(func: (data: Uint8Array) => BytesLike): void {
|
|
75
|
-
if (locked512) { throw new Error("sha512 is locked"); }
|
|
76
|
-
__sha512 = func;
|
|
77
|
-
}
|
|
78
|
-
Object.freeze(sha256);
|
|
1
|
+
import { createHash } from "./crypto.js";
|
|
2
|
+
|
|
3
|
+
import { getBytes, hexlify } from "../utils/index.js";
|
|
4
|
+
|
|
5
|
+
import type { BytesLike } from "../utils/index.js";
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
const _sha256 = function(data: Uint8Array): Uint8Array {
|
|
9
|
+
return createHash("sha256").update(data).digest();
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
const _sha512 = function(data: Uint8Array): Uint8Array {
|
|
13
|
+
return createHash("sha512").update(data).digest();
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
let __sha256: (data: Uint8Array) => BytesLike = _sha256;
|
|
17
|
+
let __sha512: (data: Uint8Array) => BytesLike = _sha512;
|
|
18
|
+
|
|
19
|
+
let locked256 = false, locked512 = false;
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Compute the cryptographic SHA2-256 hash of %%data%%.
|
|
24
|
+
*
|
|
25
|
+
* @_docloc: api/crypto:Hash Functions
|
|
26
|
+
* @returns DataHexstring
|
|
27
|
+
*
|
|
28
|
+
* @example:
|
|
29
|
+
* sha256("0x")
|
|
30
|
+
* //_result:
|
|
31
|
+
*
|
|
32
|
+
* sha256("0x1337")
|
|
33
|
+
* //_result:
|
|
34
|
+
*
|
|
35
|
+
* sha256(new Uint8Array([ 0x13, 0x37 ]))
|
|
36
|
+
* //_result:
|
|
37
|
+
*
|
|
38
|
+
*/
|
|
39
|
+
export function sha256(_data: BytesLike): string {
|
|
40
|
+
const data = getBytes(_data, "data");
|
|
41
|
+
return hexlify(__sha256(data));
|
|
42
|
+
}
|
|
43
|
+
sha256._ = _sha256;
|
|
44
|
+
sha256.lock = function(): void { locked256 = true; }
|
|
45
|
+
sha256.register = function(func: (data: Uint8Array) => BytesLike): void {
|
|
46
|
+
if (locked256) { throw new Error("sha256 is locked"); }
|
|
47
|
+
__sha256 = func;
|
|
48
|
+
}
|
|
49
|
+
Object.freeze(sha256);
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Compute the cryptographic SHA2-512 hash of %%data%%.
|
|
54
|
+
*
|
|
55
|
+
* @_docloc: api/crypto:Hash Functions
|
|
56
|
+
* @returns DataHexstring
|
|
57
|
+
*
|
|
58
|
+
* @example:
|
|
59
|
+
* sha512("0x")
|
|
60
|
+
* //_result:
|
|
61
|
+
*
|
|
62
|
+
* sha512("0x1337")
|
|
63
|
+
* //_result:
|
|
64
|
+
*
|
|
65
|
+
* sha512(new Uint8Array([ 0x13, 0x37 ]))
|
|
66
|
+
* //_result:
|
|
67
|
+
*/
|
|
68
|
+
export function sha512(_data: BytesLike): string {
|
|
69
|
+
const data = getBytes(_data, "data");
|
|
70
|
+
return hexlify(__sha512(data));
|
|
71
|
+
}
|
|
72
|
+
sha512._ = _sha512;
|
|
73
|
+
sha512.lock = function(): void { locked512 = true; }
|
|
74
|
+
sha512.register = function(func: (data: Uint8Array) => BytesLike): void {
|
|
75
|
+
if (locked512) { throw new Error("sha512 is locked"); }
|
|
76
|
+
__sha512 = func;
|
|
77
|
+
}
|
|
78
|
+
Object.freeze(sha256);
|