@evolu/common 6.0.1-preview.18 → 6.0.1-preview.19
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/src/Crypto.d.ts +7 -1
- package/dist/src/Crypto.d.ts.map +1 -1
- package/dist/src/Crypto.js +15 -6
- package/package.json +1 -1
- package/src/Crypto.ts +20 -7
package/dist/src/Crypto.d.ts
CHANGED
|
@@ -26,7 +26,13 @@ export declare const mnemonicToMnemonicSeed: (mnemonic: Mnemonic) => MnemonicSee
|
|
|
26
26
|
*
|
|
27
27
|
* https://github.com/satoshilabs/slips/blob/master/slip-0021.md
|
|
28
28
|
*/
|
|
29
|
-
export declare const createSlip21: (seed:
|
|
29
|
+
export declare const createSlip21: (seed: Uint8Array, path: ReadonlyArray<string>) => Uint8Array;
|
|
30
|
+
/**
|
|
31
|
+
* Derives a single node in the SLIP-21 hierarchical key derivation.
|
|
32
|
+
*
|
|
33
|
+
* @see {@link createSlip21}
|
|
34
|
+
*/
|
|
35
|
+
export declare const deriveSlip21Node: (component: string, m: Uint8Array) => Uint8Array;
|
|
30
36
|
/**
|
|
31
37
|
* Creates a 21-character Base64URL ID (also known as nanoid) from a SLIP-21
|
|
32
38
|
* derived key.
|
package/dist/src/Crypto.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Crypto.d.ts","sourceRoot":"","sources":["../../src/Crypto.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,OAAO,EAAc,MAAM,EAAW,MAAM,aAAa,CAAC;AAC1D,OAAO,EAEL,EAAE,EAEF,QAAQ,EACR,cAAc,EAEf,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"Crypto.d.ts","sourceRoot":"","sources":["../../src/Crypto.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,OAAO,EAAc,MAAM,EAAW,MAAM,aAAa,CAAC;AAC1D,OAAO,EAEL,EAAE,EAEF,QAAQ,EACR,cAAc,EAEf,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAInC,yDAAyD;AACzD,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC;AAE5D,MAAM,MAAM,iBAAiB,GAAG,CAAC,WAAW,CAAC,EAAE,MAAM,KAAK,WAAW,CAAC;AAEtE,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;CAC/C;AAED,oFAAoF;AACpF,eAAO,MAAM,iBAAiB,EAAE,iBACS,CAAC;AAE1C,MAAM,MAAM,cAAc,GAAG,MAAM,QAAQ,CAAC;AAE5C,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;CACzC;AAED,eAAO,MAAM,qBAAqB,EAAE,cACe,CAAC;AAEpD,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC;AAE9D,eAAO,MAAM,sBAAsB,GAAI,UAAU,QAAQ,KAAG,YACR,CAAC;AAErD;;;;GAIG;AACH,eAAO,MAAM,YAAY,GACvB,MAAM,UAAU,EAChB,MAAM,aAAa,CAAC,MAAM,CAAC,KAC1B,UAWF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,GAC3B,WAAW,MAAM,EACjB,GAAG,UAAU,KACZ,UAMF,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,cAAc,GACzB,MAAM,YAAY,EAClB,MAAM,aAAa,CAAC,MAAM,CAAC,KAC1B,EAUF,CAAC;AAEF,sDAAsD;AACtD,eAAO,MAAM,aAAa,8fAAiD,CAAC;AAC5E,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAC,IAAI,CAAC;AAEtD,8BAA8B;AAC9B,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,WAAW,EAAE,cAAc,CAAC;IAErC,QAAQ,CAAC,OAAO,EAAE,CAChB,SAAS,EAAE,UAAU,EACrB,aAAa,EAAE,aAAa,KACzB;QACH,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;QAC3B,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;KACjC,CAAC;IAEF,QAAQ,CAAC,OAAO,EAAE,CAChB,UAAU,EAAE,UAAU,EACtB,aAAa,EAAE,aAAa,EAC5B,KAAK,EAAE,UAAU,KACd,MAAM,CAAC,UAAU,EAAE,2BAA2B,CAAC,CAAC;CACtD;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;CAC3C;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,IAAI,EAAE,6BAA6B,CAAC;IAC7C,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB;AAED;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,GAChC,MAAM,oBAAoB,KACzB,eAyBF,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,GAAI,QAAQ,cAAc,KAAG,cAO1D,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAAI,QAAQ,cAAc,KAAG,cAE3D,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,KAAK,OAAO,CAAC;AAExE,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;CAC3C"}
|
package/dist/src/Crypto.js
CHANGED
|
@@ -13,6 +13,7 @@ import { urlAlphabet } from "nanoid";
|
|
|
13
13
|
import { getOrThrow, trySync } from "./Result.js";
|
|
14
14
|
import { brand, length, NonNegativeInt, Uint8Array, } from "./Type.js";
|
|
15
15
|
import { assert } from "./Assert.js";
|
|
16
|
+
import { utf8ToBytes } from "./Buffer.js";
|
|
16
17
|
/** Cryptographically secure PRNG. Uses internal OS-level crypto.getRandomValues. */
|
|
17
18
|
export const createRandomBytes = (bytesLength = 32) => randomBytes(bytesLength);
|
|
18
19
|
export const createEnglishMnemonic = () => bip39.generateMnemonic(wordlist, 128);
|
|
@@ -24,16 +25,24 @@ export const mnemonicToMnemonicSeed = (mnemonic) => bip39.mnemonicToSeedSync(mne
|
|
|
24
25
|
*/
|
|
25
26
|
export const createSlip21 = (seed, path) => {
|
|
26
27
|
assert(seed.length >= 16 && seed.length <= 64, `Unusual SLIP-0021 seed length: ${seed.length} bytes`);
|
|
27
|
-
let m = hmac(sha512, "Symmetric key seed", seed);
|
|
28
|
+
let m = hmac(sha512, utf8ToBytes("Symmetric key seed"), seed);
|
|
28
29
|
for (const component of path) {
|
|
29
|
-
|
|
30
|
-
const e = new globalThis.Uint8Array(p.byteLength + 1);
|
|
31
|
-
e[0] = 0;
|
|
32
|
-
e.set(p, 1);
|
|
33
|
-
m = hmac(sha512, m.slice(0, 32), e);
|
|
30
|
+
m = deriveSlip21Node(component, m);
|
|
34
31
|
}
|
|
35
32
|
return m.slice(32, 64);
|
|
36
33
|
};
|
|
34
|
+
/**
|
|
35
|
+
* Derives a single node in the SLIP-21 hierarchical key derivation.
|
|
36
|
+
*
|
|
37
|
+
* @see {@link createSlip21}
|
|
38
|
+
*/
|
|
39
|
+
export const deriveSlip21Node = (component, m) => {
|
|
40
|
+
const p = utf8ToBytes(component);
|
|
41
|
+
const e = new globalThis.Uint8Array(p.byteLength + 1);
|
|
42
|
+
e[0] = 0;
|
|
43
|
+
e.set(p, 1);
|
|
44
|
+
return hmac(sha512, m.slice(0, 32), e);
|
|
45
|
+
};
|
|
37
46
|
/**
|
|
38
47
|
* Creates a 21-character Base64URL ID (also known as nanoid) from a SLIP-21
|
|
39
48
|
* derived key.
|
package/package.json
CHANGED
package/src/Crypto.ts
CHANGED
|
@@ -22,6 +22,7 @@ import {
|
|
|
22
22
|
} from "./Type.js";
|
|
23
23
|
import { Brand } from "./Brand.js";
|
|
24
24
|
import { assert } from "./Assert.js";
|
|
25
|
+
import { utf8ToBytes } from "./Buffer.js";
|
|
25
26
|
|
|
26
27
|
/** `Uint8Array` created by {@link createRandomBytes}. */
|
|
27
28
|
export type RandomBytes = Uint8Array & Brand<"RandomBytes">;
|
|
@@ -56,7 +57,7 @@ export const mnemonicToMnemonicSeed = (mnemonic: Mnemonic): MnemonicSeed =>
|
|
|
56
57
|
* https://github.com/satoshilabs/slips/blob/master/slip-0021.md
|
|
57
58
|
*/
|
|
58
59
|
export const createSlip21 = (
|
|
59
|
-
seed:
|
|
60
|
+
seed: Uint8Array,
|
|
60
61
|
path: ReadonlyArray<string>,
|
|
61
62
|
): Uint8Array => {
|
|
62
63
|
assert(
|
|
@@ -64,17 +65,29 @@ export const createSlip21 = (
|
|
|
64
65
|
`Unusual SLIP-0021 seed length: ${seed.length} bytes`,
|
|
65
66
|
);
|
|
66
67
|
|
|
67
|
-
let m = hmac(sha512, "Symmetric key seed", seed);
|
|
68
|
+
let m = hmac(sha512, utf8ToBytes("Symmetric key seed"), seed);
|
|
68
69
|
for (const component of path) {
|
|
69
|
-
|
|
70
|
-
const e = new globalThis.Uint8Array(p.byteLength + 1);
|
|
71
|
-
e[0] = 0;
|
|
72
|
-
e.set(p, 1);
|
|
73
|
-
m = hmac(sha512, m.slice(0, 32), e);
|
|
70
|
+
m = deriveSlip21Node(component, m);
|
|
74
71
|
}
|
|
75
72
|
return m.slice(32, 64);
|
|
76
73
|
};
|
|
77
74
|
|
|
75
|
+
/**
|
|
76
|
+
* Derives a single node in the SLIP-21 hierarchical key derivation.
|
|
77
|
+
*
|
|
78
|
+
* @see {@link createSlip21}
|
|
79
|
+
*/
|
|
80
|
+
export const deriveSlip21Node = (
|
|
81
|
+
component: string,
|
|
82
|
+
m: Uint8Array,
|
|
83
|
+
): Uint8Array => {
|
|
84
|
+
const p = utf8ToBytes(component);
|
|
85
|
+
const e = new globalThis.Uint8Array(p.byteLength + 1);
|
|
86
|
+
e[0] = 0;
|
|
87
|
+
e.set(p, 1);
|
|
88
|
+
return hmac(sha512, m.slice(0, 32), e);
|
|
89
|
+
};
|
|
90
|
+
|
|
78
91
|
/**
|
|
79
92
|
* Creates a 21-character Base64URL ID (also known as nanoid) from a SLIP-21
|
|
80
93
|
* derived key.
|