@ckb-ccc/core 0.1.0-alpha.7 → 0.1.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/CHANGELOG.md +27 -0
- package/dist/ckb/transactionLumos.d.ts +2 -1
- package/dist/ckb/transactionLumos.d.ts.map +1 -1
- package/dist/client/client.js +1 -1
- package/dist/signer/btc/signerBtc.d.ts.map +1 -1
- package/dist/signer/btc/signerBtc.js +2 -3
- package/dist/signer/btc/verify.d.ts +14 -1
- package/dist/signer/btc/verify.d.ts.map +1 -1
- package/dist/signer/btc/verify.js +22 -1
- package/dist/signer/doge/index.d.ts +5 -0
- package/dist/signer/doge/index.d.ts.map +1 -0
- package/dist/signer/doge/index.js +4 -0
- package/dist/signer/doge/signerDoge.d.ts +52 -0
- package/dist/signer/doge/signerDoge.d.ts.map +1 -0
- package/dist/signer/doge/signerDoge.js +82 -0
- package/dist/signer/doge/signerDogeAddressReadonly.d.ts +41 -0
- package/dist/signer/doge/signerDogeAddressReadonly.d.ts.map +1 -0
- package/dist/signer/doge/signerDogeAddressReadonly.js +45 -0
- package/dist/signer/doge/signerDogePrivateKey.d.ts +52 -0
- package/dist/signer/doge/signerDogePrivateKey.d.ts.map +1 -0
- package/dist/signer/doge/signerDogePrivateKey.js +68 -0
- package/dist/signer/doge/verify.d.ts +6 -0
- package/dist/signer/doge/verify.d.ts.map +1 -0
- package/dist/signer/doge/verify.js +17 -0
- package/dist/signer/index.d.ts +1 -0
- package/dist/signer/index.d.ts.map +1 -1
- package/dist/signer/index.js +1 -0
- package/dist/signer/nostr/index.d.ts +1 -0
- package/dist/signer/nostr/index.d.ts.map +1 -1
- package/dist/signer/nostr/index.js +1 -0
- package/dist/signer/signer/index.d.ts +4 -2
- package/dist/signer/signer/index.d.ts.map +1 -1
- package/dist/signer/signer/index.js +5 -0
- package/dist.commonjs/address/address.advanced.js +23 -28
- package/dist.commonjs/address/advanced.js +1 -17
- package/dist.commonjs/address/index.js +11 -15
- package/dist.commonjs/advanced.js +2 -31
- package/dist.commonjs/advancedBarrel.js +5 -21
- package/dist.commonjs/barrel.js +12 -41
- package/dist.commonjs/bytes/advanced.js +1 -2
- package/dist.commonjs/bytes/index.js +7 -12
- package/dist.commonjs/ckb/advanced.js +3 -32
- package/dist.commonjs/ckb/index.js +3 -19
- package/dist.commonjs/ckb/molecule.advanced/generated.js +64 -131
- package/dist.commonjs/ckb/molecule.advanced/index.js +2 -19
- package/dist.commonjs/ckb/script.advanced.js +3 -6
- package/dist.commonjs/ckb/script.js +23 -53
- package/dist.commonjs/ckb/transaction.advanced.js +3 -6
- package/dist.commonjs/ckb/transaction.js +122 -163
- package/dist.commonjs/ckb/transactionLumos.d.ts +2 -1
- package/dist.commonjs/ckb/transactionLumos.d.ts.map +1 -1
- package/dist.commonjs/ckb/transactionLumos.js +1 -2
- package/dist.commonjs/client/advanced.js +6 -22
- package/dist.commonjs/client/cache/advanced.js +1 -17
- package/dist.commonjs/client/cache/cache.js +3 -7
- package/dist.commonjs/client/cache/index.js +2 -18
- package/dist.commonjs/client/cache/memory.advanced.js +21 -28
- package/dist.commonjs/client/cache/memory.js +19 -23
- package/dist.commonjs/client/client.js +22 -26
- package/dist.commonjs/client/clientPublicMainnet.advanced.js +22 -25
- package/dist.commonjs/client/clientPublicMainnet.js +8 -15
- package/dist.commonjs/client/clientPublicTestnet.advanced.js +22 -25
- package/dist.commonjs/client/clientPublicTestnet.js +8 -15
- package/dist.commonjs/client/clientTypes.advanced.js +3 -6
- package/dist.commonjs/client/clientTypes.js +29 -43
- package/dist.commonjs/client/index.js +6 -22
- package/dist.commonjs/client/jsonRpc/advanced.js +2 -18
- package/dist.commonjs/client/jsonRpc/index.js +37 -41
- package/dist.commonjs/client/jsonRpc/transformers.js +57 -61
- package/dist.commonjs/client/jsonRpc/types.js +1 -2
- package/dist.commonjs/client/transports/advanced.js +8 -25
- package/dist.commonjs/client/transports/http.js +1 -5
- package/dist.commonjs/client/transports/transport.js +1 -2
- package/dist.commonjs/client/transports/webSocket.js +3 -10
- package/dist.commonjs/fixedPoint/index.js +4 -9
- package/dist.commonjs/hasher/advanced.js +1 -4
- package/dist.commonjs/hasher/hasher.js +1 -2
- package/dist.commonjs/hasher/hasherCkb.js +14 -20
- package/dist.commonjs/hasher/hasherKeecak256.js +7 -11
- package/dist.commonjs/hasher/index.js +3 -19
- package/dist.commonjs/hex/index.js +3 -6
- package/dist.commonjs/index.js +2 -31
- package/dist.commonjs/keystore/index.js +21 -25
- package/dist.commonjs/molecule/codec.js +48 -63
- package/dist.commonjs/molecule/index.js +2 -18
- package/dist.commonjs/molecule/predefined.js +77 -103
- package/dist.commonjs/num/index.js +17 -29
- package/dist.commonjs/signer/btc/index.js +3 -19
- package/dist.commonjs/signer/btc/signerBtc.d.ts.map +1 -1
- package/dist.commonjs/signer/btc/signerBtc.js +20 -25
- package/dist.commonjs/signer/btc/signerBtcPublicKeyReadonly.js +4 -8
- package/dist.commonjs/signer/btc/verify.d.ts +14 -1
- package/dist.commonjs/signer/btc/verify.d.ts.map +1 -1
- package/dist.commonjs/signer/btc/verify.js +29 -11
- package/dist.commonjs/signer/ckb/index.js +5 -21
- package/dist.commonjs/signer/ckb/signerCkbPrivateKey.js +16 -20
- package/dist.commonjs/signer/ckb/signerCkbPublicKey.js +20 -24
- package/dist.commonjs/signer/ckb/signerCkbScriptReadonly.js +8 -12
- package/dist.commonjs/signer/ckb/verifyCkbSecp256k1.js +12 -16
- package/dist.commonjs/signer/ckb/verifyJoyId.js +5 -8
- package/dist.commonjs/signer/doge/index.d.ts +5 -0
- package/dist.commonjs/signer/doge/index.d.ts.map +1 -0
- package/dist.commonjs/signer/doge/index.js +4 -0
- package/dist.commonjs/signer/doge/signerDoge.d.ts +52 -0
- package/dist.commonjs/signer/doge/signerDoge.d.ts.map +1 -0
- package/dist.commonjs/signer/doge/signerDoge.js +82 -0
- package/dist.commonjs/signer/doge/signerDogeAddressReadonly.d.ts +41 -0
- package/dist.commonjs/signer/doge/signerDogeAddressReadonly.d.ts.map +1 -0
- package/dist.commonjs/signer/doge/signerDogeAddressReadonly.js +45 -0
- package/dist.commonjs/signer/doge/signerDogePrivateKey.d.ts +52 -0
- package/dist.commonjs/signer/doge/signerDogePrivateKey.d.ts.map +1 -0
- package/dist.commonjs/signer/doge/signerDogePrivateKey.js +68 -0
- package/dist.commonjs/signer/doge/verify.d.ts +6 -0
- package/dist.commonjs/signer/doge/verify.d.ts.map +1 -0
- package/dist.commonjs/signer/doge/verify.js +17 -0
- package/dist.commonjs/signer/dummy/alwaysError.js +2 -6
- package/dist.commonjs/signer/dummy/dummy.js +3 -7
- package/dist.commonjs/signer/dummy/index.js +3 -19
- package/dist.commonjs/signer/dummy/openLink.js +2 -6
- package/dist.commonjs/signer/evm/index.js +3 -19
- package/dist.commonjs/signer/evm/signerEvm.js +31 -35
- package/dist.commonjs/signer/evm/signerEvmAddressReadonly.js +4 -8
- package/dist.commonjs/signer/evm/verify.js +4 -7
- package/dist.commonjs/signer/index.d.ts +1 -0
- package/dist.commonjs/signer/index.d.ts.map +1 -1
- package/dist.commonjs/signer/index.js +7 -22
- package/dist.commonjs/signer/nostr/index.d.ts +1 -0
- package/dist.commonjs/signer/nostr/index.d.ts.map +1 -1
- package/dist.commonjs/signer/nostr/index.js +2 -17
- package/dist.commonjs/signer/nostr/signerNostr.js +21 -25
- package/dist.commonjs/signer/nostr/verify.js +12 -16
- package/dist.commonjs/signer/signer/index.d.ts +4 -2
- package/dist.commonjs/signer/signer/index.d.ts.map +1 -1
- package/dist.commonjs/signer/signer/index.js +22 -23
- package/dist.commonjs/utils/index.js +6 -12
- package/package.json +3 -1
- package/src/ckb/transactionLumos.ts +2 -1
- package/src/client/client.ts +1 -1
- package/src/signer/btc/signerBtc.ts +2 -3
- package/src/signer/btc/verify.ts +31 -2
- package/src/signer/doge/index.ts +4 -0
- package/src/signer/doge/signerDoge.ts +116 -0
- package/src/signer/doge/signerDogeAddressReadonly.ts +52 -0
- package/src/signer/doge/signerDogePrivateKey.ts +97 -0
- package/src/signer/doge/verify.ts +38 -0
- package/src/signer/index.ts +1 -0
- package/src/signer/nostr/index.ts +1 -0
- package/src/signer/signer/index.ts +9 -0
|
@@ -1,26 +1,21 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
const index_js_1 = require("../bytes/index.js");
|
|
8
|
-
const index_js_2 = require("../ckb/index.js");
|
|
9
|
-
const index_js_3 = require("../hex/index.js");
|
|
10
|
-
const index_js_4 = require("../num/index.js");
|
|
11
|
-
const advanced_js_1 = require("./advanced.js");
|
|
1
|
+
import { blake2b } from "@noble/hashes/blake2b";
|
|
2
|
+
import { bytesFrom } from "../bytes/index.js";
|
|
3
|
+
import { CellInput } from "../ckb/index.js";
|
|
4
|
+
import { hexFrom } from "../hex/index.js";
|
|
5
|
+
import { numLeToBytes } from "../num/index.js";
|
|
6
|
+
import { CKB_BLAKE2B_PERSONAL } from "./advanced.js";
|
|
12
7
|
/**
|
|
13
8
|
* @public
|
|
14
9
|
*/
|
|
15
|
-
class HasherCkb {
|
|
10
|
+
export class HasherCkb {
|
|
16
11
|
/**
|
|
17
12
|
* Creates an instance of Hasher.
|
|
18
13
|
*
|
|
19
14
|
* @param outLength - The output length of the hash in bytes. Default is 32.
|
|
20
15
|
* @param personal - The personal string for the Blake2b algorithm. Default is CKB_BLAKE2B_PERSONAL.
|
|
21
16
|
*/
|
|
22
|
-
constructor(outLength = 32, personal =
|
|
23
|
-
this.hasher =
|
|
17
|
+
constructor(outLength = 32, personal = CKB_BLAKE2B_PERSONAL) {
|
|
18
|
+
this.hasher = blake2b.create({
|
|
24
19
|
personalization: personal,
|
|
25
20
|
dkLen: outLength,
|
|
26
21
|
});
|
|
@@ -39,7 +34,7 @@ class HasherCkb {
|
|
|
39
34
|
* ```
|
|
40
35
|
*/
|
|
41
36
|
update(data) {
|
|
42
|
-
this.hasher.update(
|
|
37
|
+
this.hasher.update(bytesFrom(data));
|
|
43
38
|
return this;
|
|
44
39
|
}
|
|
45
40
|
/**
|
|
@@ -55,10 +50,9 @@ class HasherCkb {
|
|
|
55
50
|
* ```
|
|
56
51
|
*/
|
|
57
52
|
digest() {
|
|
58
|
-
return
|
|
53
|
+
return hexFrom(this.hasher.digest());
|
|
59
54
|
}
|
|
60
55
|
}
|
|
61
|
-
exports.HasherCkb = HasherCkb;
|
|
62
56
|
/**
|
|
63
57
|
* Computes the CKB hash of the given data using the Blake2b algorithm.
|
|
64
58
|
* @public
|
|
@@ -71,7 +65,7 @@ exports.HasherCkb = HasherCkb;
|
|
|
71
65
|
* const hash = hashCkb("some data"); // Outputs something like "0x..."
|
|
72
66
|
* ```
|
|
73
67
|
*/
|
|
74
|
-
function hashCkb(...data) {
|
|
68
|
+
export function hashCkb(...data) {
|
|
75
69
|
const hasher = new HasherCkb();
|
|
76
70
|
data.forEach((d) => hasher.update(d));
|
|
77
71
|
return hasher.digest();
|
|
@@ -89,6 +83,6 @@ function hashCkb(...data) {
|
|
|
89
83
|
* const hash = hashTypeId(cellInput, outputIndex); // Outputs something like "0x..."
|
|
90
84
|
* ```
|
|
91
85
|
*/
|
|
92
|
-
function hashTypeId(cellInputLike, outputIndex) {
|
|
93
|
-
return hashCkb(
|
|
86
|
+
export function hashTypeId(cellInputLike, outputIndex) {
|
|
87
|
+
return hashCkb(CellInput.from(cellInputLike).toBytes(), numLeToBytes(outputIndex, 8));
|
|
94
88
|
}
|
|
@@ -1,18 +1,15 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const sha3_1 = require("@noble/hashes/sha3");
|
|
5
|
-
const index_js_1 = require("../bytes/index.js");
|
|
6
|
-
const index_js_2 = require("../hex/index.js");
|
|
1
|
+
import { keccak_256 } from "@noble/hashes/sha3";
|
|
2
|
+
import { bytesFrom } from "../bytes/index.js";
|
|
3
|
+
import { hexFrom } from "../hex/index.js";
|
|
7
4
|
/**
|
|
8
5
|
* @public
|
|
9
6
|
*/
|
|
10
|
-
class HasherKeecak256 {
|
|
7
|
+
export class HasherKeecak256 {
|
|
11
8
|
/**
|
|
12
9
|
* Creates an instance of Hasher.
|
|
13
10
|
*/
|
|
14
11
|
constructor() {
|
|
15
|
-
this.hasher =
|
|
12
|
+
this.hasher = keccak_256.create();
|
|
16
13
|
}
|
|
17
14
|
/**
|
|
18
15
|
* Updates the hash with the given data.
|
|
@@ -28,7 +25,7 @@ class HasherKeecak256 {
|
|
|
28
25
|
* ```
|
|
29
26
|
*/
|
|
30
27
|
update(data) {
|
|
31
|
-
this.hasher.update(
|
|
28
|
+
this.hasher.update(bytesFrom(data));
|
|
32
29
|
return this;
|
|
33
30
|
}
|
|
34
31
|
/**
|
|
@@ -44,7 +41,6 @@ class HasherKeecak256 {
|
|
|
44
41
|
* ```
|
|
45
42
|
*/
|
|
46
43
|
digest() {
|
|
47
|
-
return
|
|
44
|
+
return hexFrom(this.hasher.digest());
|
|
48
45
|
}
|
|
49
46
|
}
|
|
50
|
-
exports.HasherKeecak256 = HasherKeecak256;
|
|
@@ -1,19 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./hasher.js"), exports);
|
|
18
|
-
__exportStar(require("./hasherCkb.js"), exports);
|
|
19
|
-
__exportStar(require("./hasherKeecak256.js"), exports);
|
|
1
|
+
export * from "./hasher.js";
|
|
2
|
+
export * from "./hasherCkb.js";
|
|
3
|
+
export * from "./hasherKeecak256.js";
|
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.hexFrom = hexFrom;
|
|
4
|
-
const index_js_1 = require("../bytes/index.js");
|
|
1
|
+
import { bytesFrom, bytesTo } from "../bytes/index.js";
|
|
5
2
|
/**
|
|
6
3
|
* Converts a HexLike value to a Hex string.
|
|
7
4
|
* @public
|
|
@@ -15,6 +12,6 @@ const index_js_1 = require("../bytes/index.js");
|
|
|
15
12
|
* const hexStringFromBytes = hexFrom(new Uint8Array([104, 101, 108, 108, 111])); // Outputs "0x68656c6c6f"
|
|
16
13
|
* ```
|
|
17
14
|
*/
|
|
18
|
-
function hexFrom(hex) {
|
|
19
|
-
return `0x${
|
|
15
|
+
export function hexFrom(hex) {
|
|
16
|
+
return `0x${bytesTo(bytesFrom(hex), "hex")}`;
|
|
20
17
|
}
|
package/dist.commonjs/index.js
CHANGED
|
@@ -1,31 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
19
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
20
|
-
};
|
|
21
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
22
|
-
if (mod && mod.__esModule) return mod;
|
|
23
|
-
var result = {};
|
|
24
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
25
|
-
__setModuleDefault(result, mod);
|
|
26
|
-
return result;
|
|
27
|
-
};
|
|
28
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
exports.ccc = void 0;
|
|
30
|
-
__exportStar(require("./barrel.js"), exports);
|
|
31
|
-
exports.ccc = __importStar(require("./barrel.js"));
|
|
1
|
+
export * from "./barrel.js";
|
|
2
|
+
export * as ccc from "./barrel.js";
|
|
@@ -1,13 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
const sha3_1 = require("@noble/hashes/sha3");
|
|
8
|
-
const utils_1 = require("@noble/hashes/utils");
|
|
9
|
-
const index_js_1 = require("../bytes/index.js");
|
|
10
|
-
const index_js_2 = require("../hex/index.js");
|
|
1
|
+
import { ctr } from "@noble/ciphers/aes";
|
|
2
|
+
import { scryptAsync } from "@noble/hashes/scrypt";
|
|
3
|
+
import { keccak_256 } from "@noble/hashes/sha3";
|
|
4
|
+
import { randomBytes } from "@noble/hashes/utils";
|
|
5
|
+
import { bytesConcat, bytesFrom } from "../bytes/index.js";
|
|
6
|
+
import { hexFrom } from "../hex/index.js";
|
|
11
7
|
// The parameter r ("blockSize")
|
|
12
8
|
const DEFAULT_SCRYPT_PARAM_R = 8;
|
|
13
9
|
// The parallelization parameter p
|
|
@@ -15,35 +11,35 @@ const DEFAULT_SCRYPT_PARAM_P = 1;
|
|
|
15
11
|
// The CPU/Memory cost parameter N
|
|
16
12
|
const DEFAULT_SCRYPT_PARAM_N = 262144;
|
|
17
13
|
function mac(derivedKey, cipherText) {
|
|
18
|
-
return
|
|
14
|
+
return hexFrom(keccak_256(bytesConcat(derivedKey.slice(16, 32), cipherText))).slice(2);
|
|
19
15
|
}
|
|
20
16
|
/**
|
|
21
17
|
* @public
|
|
22
18
|
*/
|
|
23
|
-
async function keystoreEncrypt(privateKeyLike, chainCodeLike, password) {
|
|
24
|
-
const salt =
|
|
25
|
-
const iv =
|
|
19
|
+
export async function keystoreEncrypt(privateKeyLike, chainCodeLike, password) {
|
|
20
|
+
const salt = randomBytes(32);
|
|
21
|
+
const iv = randomBytes(16);
|
|
26
22
|
const kdfparams = {
|
|
27
23
|
dklen: 32,
|
|
28
|
-
salt:
|
|
24
|
+
salt: hexFrom(salt).slice(2),
|
|
29
25
|
n: DEFAULT_SCRYPT_PARAM_N,
|
|
30
26
|
r: DEFAULT_SCRYPT_PARAM_R,
|
|
31
27
|
p: DEFAULT_SCRYPT_PARAM_P,
|
|
32
28
|
};
|
|
33
|
-
const derivedKey = await
|
|
29
|
+
const derivedKey = await scryptAsync(bytesFrom(password, "utf8"), salt, {
|
|
34
30
|
N: kdfparams.n,
|
|
35
31
|
r: kdfparams.r,
|
|
36
32
|
p: kdfparams.p,
|
|
37
33
|
dkLen: kdfparams.dklen,
|
|
38
34
|
});
|
|
39
|
-
const cipher =
|
|
40
|
-
const ciphertext = cipher.encrypt(
|
|
35
|
+
const cipher = ctr(derivedKey.slice(0, 16), iv.map((v) => v));
|
|
36
|
+
const ciphertext = cipher.encrypt(bytesConcat(bytesFrom(privateKeyLike), bytesFrom(chainCodeLike)));
|
|
41
37
|
return {
|
|
42
|
-
id:
|
|
38
|
+
id: hexFrom(randomBytes(16)).slice(2),
|
|
43
39
|
crypto: {
|
|
44
|
-
ciphertext:
|
|
40
|
+
ciphertext: hexFrom(ciphertext).slice(2),
|
|
45
41
|
cipherparams: {
|
|
46
|
-
iv:
|
|
42
|
+
iv: hexFrom(iv).slice(2),
|
|
47
43
|
},
|
|
48
44
|
cipher: "aes-128-ctr",
|
|
49
45
|
kdf: "scrypt",
|
|
@@ -55,7 +51,7 @@ async function keystoreEncrypt(privateKeyLike, chainCodeLike, password) {
|
|
|
55
51
|
/**
|
|
56
52
|
* @public
|
|
57
53
|
*/
|
|
58
|
-
async function keystoreDecrypt(keystore, password) {
|
|
54
|
+
export async function keystoreDecrypt(keystore, password) {
|
|
59
55
|
if (typeof keystore !== "object" ||
|
|
60
56
|
keystore === null ||
|
|
61
57
|
!("crypto" in keystore)) {
|
|
@@ -91,17 +87,17 @@ async function keystoreDecrypt(keystore, password) {
|
|
|
91
87
|
typeof kdfparams.salt !== "string") {
|
|
92
88
|
throw Error("Invalid kdfparams");
|
|
93
89
|
}
|
|
94
|
-
const derivedKey = await
|
|
90
|
+
const derivedKey = await scryptAsync(bytesFrom(password, "utf8"), bytesFrom(kdfparams.salt), {
|
|
95
91
|
N: kdfparams.n,
|
|
96
92
|
r: kdfparams.r,
|
|
97
93
|
p: kdfparams.p,
|
|
98
94
|
dkLen: kdfparams.dklen,
|
|
99
95
|
});
|
|
100
|
-
const ciphertext =
|
|
96
|
+
const ciphertext = bytesFrom(crypto.ciphertext);
|
|
101
97
|
if (mac(derivedKey, ciphertext) !== crypto.mac) {
|
|
102
98
|
throw Error("Invalid password");
|
|
103
99
|
}
|
|
104
|
-
const cipher =
|
|
100
|
+
const cipher = ctr(derivedKey.slice(0, 16), bytesFrom(crypto.cipherparams.iv));
|
|
105
101
|
const result = cipher.decrypt(ciphertext);
|
|
106
102
|
return {
|
|
107
103
|
privateKey: result.slice(0, 32),
|
|
@@ -1,21 +1,7 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
exports.dynItemVec = dynItemVec;
|
|
7
|
-
exports.vector = vector;
|
|
8
|
-
exports.option = option;
|
|
9
|
-
exports.byteVec = byteVec;
|
|
10
|
-
exports.table = table;
|
|
11
|
-
exports.union = union;
|
|
12
|
-
exports.struct = struct;
|
|
13
|
-
exports.array = array;
|
|
14
|
-
exports.uint = uint;
|
|
15
|
-
exports.uintNumber = uintNumber;
|
|
16
|
-
const index_js_1 = require("../bytes/index.js");
|
|
17
|
-
const index_js_2 = require("../num/index.js");
|
|
18
|
-
class Codec {
|
|
2
|
+
import { bytesConcat, bytesFrom } from "../bytes/index.js";
|
|
3
|
+
import { numBeFromBytes, numBeToBytes, numFromBytes, numToBytes, } from "../num/index.js";
|
|
4
|
+
export class Codec {
|
|
19
5
|
constructor(encode, decode, byteLength) {
|
|
20
6
|
this.encode = encode;
|
|
21
7
|
this.decode = decode;
|
|
@@ -34,18 +20,17 @@ class Codec {
|
|
|
34
20
|
});
|
|
35
21
|
}
|
|
36
22
|
}
|
|
37
|
-
exports.Codec = Codec;
|
|
38
23
|
function uint32To(numLike) {
|
|
39
|
-
return
|
|
24
|
+
return numToBytes(numLike, 4);
|
|
40
25
|
}
|
|
41
26
|
function uint32From(bytesLike) {
|
|
42
|
-
return Number(
|
|
27
|
+
return Number(numFromBytes(bytesLike));
|
|
43
28
|
}
|
|
44
29
|
/**
|
|
45
30
|
* Vector with fixed size item codec
|
|
46
31
|
* @param itemCodec fixed-size vector item codec
|
|
47
32
|
*/
|
|
48
|
-
function fixedItemVec(itemCodec) {
|
|
33
|
+
export function fixedItemVec(itemCodec) {
|
|
49
34
|
const itemByteLength = itemCodec.byteLength;
|
|
50
35
|
if (itemByteLength === undefined) {
|
|
51
36
|
throw new Error("fixedItemVec: itemCodec requires a byte length");
|
|
@@ -53,14 +38,14 @@ function fixedItemVec(itemCodec) {
|
|
|
53
38
|
return Codec.from({
|
|
54
39
|
encode(userDefinedItems) {
|
|
55
40
|
try {
|
|
56
|
-
return userDefinedItems.reduce((concatted, item) =>
|
|
41
|
+
return userDefinedItems.reduce((concatted, item) => bytesConcat(concatted, itemCodec.encode(item)), uint32To(userDefinedItems.length));
|
|
57
42
|
}
|
|
58
43
|
catch (e) {
|
|
59
44
|
throw new Error(`fixedItemVec(${e?.toString()})`);
|
|
60
45
|
}
|
|
61
46
|
},
|
|
62
47
|
decode(buffer) {
|
|
63
|
-
const value =
|
|
48
|
+
const value = bytesFrom(buffer);
|
|
64
49
|
if (value.byteLength < 4) {
|
|
65
50
|
throw new Error(`fixedItemVec: too short buffer, expected at least 4 bytes, but got ${value.byteLength}`);
|
|
66
51
|
}
|
|
@@ -86,7 +71,7 @@ function fixedItemVec(itemCodec) {
|
|
|
86
71
|
* Vector with dynamic size item codec, you can create a recursive vector with this function
|
|
87
72
|
* @param itemCodec the vector item codec. It can be fixed-size or dynamic-size.
|
|
88
73
|
*/
|
|
89
|
-
function dynItemVec(itemCodec) {
|
|
74
|
+
export function dynItemVec(itemCodec) {
|
|
90
75
|
return Codec.from({
|
|
91
76
|
encode(userDefinedItems) {
|
|
92
77
|
try {
|
|
@@ -94,24 +79,24 @@ function dynItemVec(itemCodec) {
|
|
|
94
79
|
const encodedItem = itemCodec.encode(item);
|
|
95
80
|
const packedHeader = uint32To(offset);
|
|
96
81
|
return {
|
|
97
|
-
header:
|
|
98
|
-
body:
|
|
99
|
-
offset: offset +
|
|
82
|
+
header: bytesConcat(header, packedHeader),
|
|
83
|
+
body: bytesConcat(body, encodedItem),
|
|
84
|
+
offset: offset + bytesFrom(encodedItem).byteLength,
|
|
100
85
|
};
|
|
101
86
|
}, {
|
|
102
|
-
header:
|
|
103
|
-
body:
|
|
87
|
+
header: bytesFrom([]),
|
|
88
|
+
body: bytesFrom([]),
|
|
104
89
|
offset: 4 + userDefinedItems.length * 4,
|
|
105
90
|
});
|
|
106
91
|
const packedTotalSize = uint32To(encoded.header.byteLength + encoded.body.byteLength + 4);
|
|
107
|
-
return
|
|
92
|
+
return bytesConcat(packedTotalSize, encoded.header, encoded.body);
|
|
108
93
|
}
|
|
109
94
|
catch (e) {
|
|
110
95
|
throw new Error(`dynItemVec(${e?.toString()})`);
|
|
111
96
|
}
|
|
112
97
|
},
|
|
113
98
|
decode(buffer) {
|
|
114
|
-
const value =
|
|
99
|
+
const value = bytesFrom(buffer);
|
|
115
100
|
const byteLength = uint32From(value.slice(0, 4));
|
|
116
101
|
if (byteLength !== value.byteLength) {
|
|
117
102
|
throw new Error(`dynItemVec: invalid buffer size, expected ${byteLength}, but got ${value.byteLength}`);
|
|
@@ -143,7 +128,7 @@ function dynItemVec(itemCodec) {
|
|
|
143
128
|
* General vector codec, if `itemCodec` is fixed size type, it will create a fixvec codec, otherwise a dynvec codec will be created.
|
|
144
129
|
* @param itemCodec
|
|
145
130
|
*/
|
|
146
|
-
function vector(itemCodec) {
|
|
131
|
+
export function vector(itemCodec) {
|
|
147
132
|
if (itemCodec.byteLength !== undefined) {
|
|
148
133
|
return fixedItemVec(itemCodec);
|
|
149
134
|
}
|
|
@@ -156,11 +141,11 @@ function vector(itemCodec) {
|
|
|
156
141
|
* - if it's not empty, just serialize the inner item (the size is same as the inner item's size).
|
|
157
142
|
* @param innerCodec
|
|
158
143
|
*/
|
|
159
|
-
function option(innerCodec) {
|
|
144
|
+
export function option(innerCodec) {
|
|
160
145
|
return Codec.from({
|
|
161
146
|
encode(userDefinedOrNull) {
|
|
162
147
|
if (!userDefinedOrNull) {
|
|
163
|
-
return
|
|
148
|
+
return bytesFrom([]);
|
|
164
149
|
}
|
|
165
150
|
try {
|
|
166
151
|
return innerCodec.encode(userDefinedOrNull);
|
|
@@ -170,7 +155,7 @@ function option(innerCodec) {
|
|
|
170
155
|
}
|
|
171
156
|
},
|
|
172
157
|
decode(buffer) {
|
|
173
|
-
const value =
|
|
158
|
+
const value = bytesFrom(buffer);
|
|
174
159
|
if (value.byteLength === 0) {
|
|
175
160
|
return undefined;
|
|
176
161
|
}
|
|
@@ -187,20 +172,20 @@ function option(innerCodec) {
|
|
|
187
172
|
* Wrap the encoded value with a fixed-length buffer
|
|
188
173
|
* @param codec
|
|
189
174
|
*/
|
|
190
|
-
function byteVec(codec) {
|
|
175
|
+
export function byteVec(codec) {
|
|
191
176
|
return Codec.from({
|
|
192
177
|
encode(userDefined) {
|
|
193
178
|
try {
|
|
194
|
-
const payload =
|
|
179
|
+
const payload = bytesFrom(codec.encode(userDefined));
|
|
195
180
|
const byteLength = uint32To(payload.byteLength);
|
|
196
|
-
return
|
|
181
|
+
return bytesConcat(byteLength, payload);
|
|
197
182
|
}
|
|
198
183
|
catch (e) {
|
|
199
184
|
throw new Error(`byteVec(${e?.toString()})`);
|
|
200
185
|
}
|
|
201
186
|
},
|
|
202
187
|
decode(buffer) {
|
|
203
|
-
const value =
|
|
188
|
+
const value = bytesFrom(buffer);
|
|
204
189
|
if (value.byteLength < 4) {
|
|
205
190
|
throw new Error(`byteVec: too short buffer, expected at least 4 bytes, but got ${value.byteLength}`);
|
|
206
191
|
}
|
|
@@ -221,7 +206,7 @@ function byteVec(codec) {
|
|
|
221
206
|
* Table is a dynamic-size type. It can be considered as a dynvec but the length is fixed.
|
|
222
207
|
* @param codecLayout
|
|
223
208
|
*/
|
|
224
|
-
function table(codecLayout) {
|
|
209
|
+
export function table(codecLayout) {
|
|
225
210
|
const keys = Object.keys(codecLayout);
|
|
226
211
|
return Codec.from({
|
|
227
212
|
encode(object) {
|
|
@@ -231,24 +216,24 @@ function table(codecLayout) {
|
|
|
231
216
|
const encodedItem = codecLayout[key].encode(object[key]);
|
|
232
217
|
const packedOffset = uint32To(result.offset);
|
|
233
218
|
return {
|
|
234
|
-
header:
|
|
235
|
-
body:
|
|
236
|
-
offset: result.offset +
|
|
219
|
+
header: bytesConcat(result.header, packedOffset),
|
|
220
|
+
body: bytesConcat(result.body, encodedItem),
|
|
221
|
+
offset: result.offset + bytesFrom(encodedItem).byteLength,
|
|
237
222
|
};
|
|
238
223
|
}
|
|
239
224
|
catch (e) {
|
|
240
225
|
throw new Error(`table.${key}(${e?.toString()})`);
|
|
241
226
|
}
|
|
242
227
|
}, {
|
|
243
|
-
header:
|
|
244
|
-
body:
|
|
228
|
+
header: bytesFrom([]),
|
|
229
|
+
body: bytesFrom([]),
|
|
245
230
|
offset: headerLength,
|
|
246
231
|
});
|
|
247
232
|
const packedTotalSize = uint32To(header.byteLength + body.byteLength + 4);
|
|
248
|
-
return
|
|
233
|
+
return bytesConcat(packedTotalSize, header, body);
|
|
249
234
|
},
|
|
250
235
|
decode(buffer) {
|
|
251
|
-
const value =
|
|
236
|
+
const value = bytesFrom(buffer);
|
|
252
237
|
const byteLength = uint32From(value.slice(0, 4));
|
|
253
238
|
if (byteLength !== value.byteLength) {
|
|
254
239
|
throw new Error(`table: invalid buffer size, expected ${byteLength}, but got ${value.byteLength}`);
|
|
@@ -290,7 +275,7 @@ function table(codecLayout) {
|
|
|
290
275
|
* // with custom id
|
|
291
276
|
* union({ cafe: Uint8, bee: Uint8 }, { cafe: 0xcafe, bee: 0xbee })
|
|
292
277
|
*/
|
|
293
|
-
function union(codecLayout, fields) {
|
|
278
|
+
export function union(codecLayout, fields) {
|
|
294
279
|
const keys = Object.keys(codecLayout);
|
|
295
280
|
return Codec.from({
|
|
296
281
|
encode({ type, value }) {
|
|
@@ -306,14 +291,14 @@ function union(codecLayout, fields) {
|
|
|
306
291
|
const header = uint32To(fieldId);
|
|
307
292
|
try {
|
|
308
293
|
const body = codec.encode(value);
|
|
309
|
-
return
|
|
294
|
+
return bytesConcat(header, body);
|
|
310
295
|
}
|
|
311
296
|
catch (e) {
|
|
312
297
|
throw new Error(`union.(${typeStr})(${e?.toString()})`);
|
|
313
298
|
}
|
|
314
299
|
},
|
|
315
300
|
decode(buffer) {
|
|
316
|
-
const value =
|
|
301
|
+
const value = bytesFrom(buffer);
|
|
317
302
|
const fieldIndex = uint32From(value.slice(0, 4));
|
|
318
303
|
const keys = Object.keys(codecLayout);
|
|
319
304
|
const field = (() => {
|
|
@@ -343,7 +328,7 @@ function union(codecLayout, fields) {
|
|
|
343
328
|
* The size of a struct is the sum of all fields' size.
|
|
344
329
|
* @param codecLayout a object contains all fields' codec
|
|
345
330
|
*/
|
|
346
|
-
function struct(codecLayout) {
|
|
331
|
+
export function struct(codecLayout) {
|
|
347
332
|
const codecArray = Object.values(codecLayout);
|
|
348
333
|
if (codecArray.some((codec) => codec.byteLength === undefined)) {
|
|
349
334
|
throw new Error("struct: all fields must be fixed-size");
|
|
@@ -355,15 +340,15 @@ function struct(codecLayout) {
|
|
|
355
340
|
return keys.reduce((result, key) => {
|
|
356
341
|
try {
|
|
357
342
|
const encodedItem = codecLayout[key].encode(object[key]);
|
|
358
|
-
return
|
|
343
|
+
return bytesConcat(result, encodedItem);
|
|
359
344
|
}
|
|
360
345
|
catch (e) {
|
|
361
346
|
throw new Error(`struct.${key}(${e?.toString()})`);
|
|
362
347
|
}
|
|
363
|
-
},
|
|
348
|
+
}, bytesFrom([]));
|
|
364
349
|
},
|
|
365
350
|
decode(buffer) {
|
|
366
|
-
const value =
|
|
351
|
+
const value = bytesFrom(buffer);
|
|
367
352
|
const object = {};
|
|
368
353
|
let offset = 0;
|
|
369
354
|
Object.entries(codecLayout).forEach(([key, codec]) => {
|
|
@@ -387,7 +372,7 @@ function struct(codecLayout) {
|
|
|
387
372
|
* @param itemCodec the fixed-size array item codec
|
|
388
373
|
* @param itemCount
|
|
389
374
|
*/
|
|
390
|
-
function array(itemCodec, itemCount) {
|
|
375
|
+
export function array(itemCodec, itemCount) {
|
|
391
376
|
if (itemCodec.byteLength === undefined) {
|
|
392
377
|
throw new Error("array: itemCodec requires a byte length");
|
|
393
378
|
}
|
|
@@ -396,14 +381,14 @@ function array(itemCodec, itemCount) {
|
|
|
396
381
|
byteLength,
|
|
397
382
|
encode(items) {
|
|
398
383
|
try {
|
|
399
|
-
return items.reduce((concatted, item) =>
|
|
384
|
+
return items.reduce((concatted, item) => bytesConcat(concatted, itemCodec.encode(item)), bytesFrom([]));
|
|
400
385
|
}
|
|
401
386
|
catch (e) {
|
|
402
387
|
throw new Error(`array(${e?.toString()})`);
|
|
403
388
|
}
|
|
404
389
|
},
|
|
405
390
|
decode(buffer) {
|
|
406
|
-
const value =
|
|
391
|
+
const value = bytesFrom(buffer);
|
|
407
392
|
if (value.byteLength != byteLength) {
|
|
408
393
|
throw new Error(`array: invalid buffer size, expected ${byteLength}, but got ${value.byteLength}`);
|
|
409
394
|
}
|
|
@@ -425,23 +410,23 @@ function array(itemCodec, itemCount) {
|
|
|
425
410
|
* @param byteLength
|
|
426
411
|
* @param littleEndian
|
|
427
412
|
*/
|
|
428
|
-
function uint(byteLength, littleEndian = false) {
|
|
413
|
+
export function uint(byteLength, littleEndian = false) {
|
|
429
414
|
return Codec.from({
|
|
430
415
|
byteLength,
|
|
431
416
|
encode: (numLike) => {
|
|
432
417
|
if (littleEndian) {
|
|
433
|
-
return
|
|
418
|
+
return numToBytes(numLike, byteLength);
|
|
434
419
|
}
|
|
435
420
|
else {
|
|
436
|
-
return
|
|
421
|
+
return numBeToBytes(numLike, byteLength);
|
|
437
422
|
}
|
|
438
423
|
},
|
|
439
424
|
decode: (buffer) => {
|
|
440
425
|
if (littleEndian) {
|
|
441
|
-
return
|
|
426
|
+
return numFromBytes(buffer);
|
|
442
427
|
}
|
|
443
428
|
else {
|
|
444
|
-
return
|
|
429
|
+
return numBeFromBytes(buffer);
|
|
445
430
|
}
|
|
446
431
|
},
|
|
447
432
|
});
|
|
@@ -451,7 +436,7 @@ function uint(byteLength, littleEndian = false) {
|
|
|
451
436
|
* @param byteLength
|
|
452
437
|
* @param littleEndian
|
|
453
438
|
*/
|
|
454
|
-
function uintNumber(byteLength, littleEndian = false) {
|
|
439
|
+
export function uintNumber(byteLength, littleEndian = false) {
|
|
455
440
|
if (byteLength > 4) {
|
|
456
441
|
throw new Error("uintNumber: byteLength must be less than or equal to 4");
|
|
457
442
|
}
|
|
@@ -1,18 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./codec.js"), exports);
|
|
18
|
-
__exportStar(require("./predefined.js"), exports);
|
|
1
|
+
export * from "./codec.js";
|
|
2
|
+
export * from "./predefined.js";
|