@talismn/crypto 0.3.4 → 0.3.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/dist/index.d.mts +18 -9
- package/dist/index.d.ts +18 -9
- package/dist/index.js +31 -29
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +23 -21
- package/dist/index.mjs.map +1 -1
- package/package.json +10 -10
package/dist/index.d.mts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import * as
|
|
2
|
-
|
|
1
|
+
import * as _noble_hashes_blake3_js from '@noble/hashes/blake3.js';
|
|
2
|
+
import * as _noble_hashes_utils_js from '@noble/hashes/utils.js';
|
|
3
|
+
export { ed25519 } from '@noble/curves/ed25519.js';
|
|
3
4
|
export { base58, base64, hex, utf8 } from '@scure/base';
|
|
4
5
|
|
|
5
6
|
type KeypairCurve = "ecdsa" | "ed25519" | "sr25519" | "ethereum" | "bitcoin-ed25519" | "bitcoin-ecdsa" | "solana";
|
|
@@ -85,7 +86,7 @@ declare const isAddressValid: (address: string) => boolean;
|
|
|
85
86
|
|
|
86
87
|
declare const normalizeAddress: (address: string) => string;
|
|
87
88
|
|
|
88
|
-
declare const getPublicKeySolana: (secretKey: Uint8Array) => Uint8Array<ArrayBufferLike>;
|
|
89
|
+
declare const getPublicKeySolana: (secretKey: Uint8Array) => Uint8Array<ArrayBufferLike> & Uint8Array<ArrayBuffer>;
|
|
89
90
|
|
|
90
91
|
declare const deriveKeypair: (seed: Uint8Array, derivationPath: string, curve: KeypairCurve) => Keypair;
|
|
91
92
|
declare const getPublicKeyFromSecret: (secretKey: Uint8Array, curve: KeypairCurve) => Uint8Array;
|
|
@@ -104,19 +105,27 @@ declare const isValidDerivationPath: (derivationPath: string, curve: KeypairCurv
|
|
|
104
105
|
* @param publicKey ML-KEM-768 encapsulation key bytes
|
|
105
106
|
* @param plaintext Data to encrypt (typically a signed extrinsic)
|
|
106
107
|
*/
|
|
107
|
-
declare const encryptKemAead: (keyHash: Uint8Array, publicKey: Uint8Array, plaintext: Uint8Array) => Promise<Uint8Array<ArrayBufferLike>>;
|
|
108
|
+
declare const encryptKemAead: (keyHash: Uint8Array, publicKey: Uint8Array, plaintext: Uint8Array) => Promise<Uint8Array<ArrayBufferLike> & Uint8Array<ArrayBuffer>>;
|
|
108
109
|
|
|
109
110
|
declare const blake3: {
|
|
110
|
-
(msg: _noble_hashes_utils.Input, opts?: Object | undefined): Uint8Array;
|
|
111
111
|
outputLen: number;
|
|
112
112
|
blockLen: number;
|
|
113
|
-
|
|
113
|
+
canXOF: boolean;
|
|
114
|
+
} & _noble_hashes_utils_js.HashInfo & {
|
|
115
|
+
(msg: _noble_hashes_utils_js.TArg<Uint8Array>, opts?: _noble_hashes_utils_js.TArg<_noble_hashes_blake3_js.Blake3Opts> | undefined): _noble_hashes_utils_js.TRet<Uint8Array>;
|
|
116
|
+
create(opts?: _noble_hashes_blake3_js.Blake3Opts | undefined): _noble_hashes_blake3_js._BLAKE3;
|
|
117
|
+
} & ((msg: _noble_hashes_utils_js.TArg<_noble_hashes_utils_js.TArg<Uint8Array<ArrayBufferLike>>>, opts?: _noble_hashes_utils_js.TArg<_noble_hashes_utils_js.TArg<_noble_hashes_blake3_js.Blake3Opts> | undefined>) => Uint8Array<ArrayBufferLike> & Uint8Array<ArrayBuffer>) & {
|
|
118
|
+
outputLen: number;
|
|
119
|
+
blockLen: number;
|
|
120
|
+
canXOF: boolean;
|
|
121
|
+
oid?: _noble_hashes_utils_js.TRet<Uint8Array> | undefined;
|
|
122
|
+
create: (opts?: _noble_hashes_blake3_js.Blake3Opts | undefined) => _noble_hashes_blake3_js._BLAKE3;
|
|
114
123
|
};
|
|
115
|
-
declare const blake2b256: (msg: Uint8Array) => Uint8Array<ArrayBufferLike>;
|
|
116
|
-
declare const blake2b512: (msg: Uint8Array) => Uint8Array<ArrayBufferLike>;
|
|
124
|
+
declare const blake2b256: (msg: Uint8Array) => Uint8Array<ArrayBufferLike> & Uint8Array<ArrayBuffer>;
|
|
125
|
+
declare const blake2b512: (msg: Uint8Array) => Uint8Array<ArrayBufferLike> & Uint8Array<ArrayBuffer>;
|
|
117
126
|
declare const getSafeHash: (bytes: Uint8Array) => string;
|
|
118
127
|
|
|
119
|
-
declare const mnemonicToEntropy: (mnemonic: string) => Uint8Array<ArrayBufferLike>;
|
|
128
|
+
declare const mnemonicToEntropy: (mnemonic: string) => Uint8Array<ArrayBufferLike> & Uint8Array<ArrayBuffer>;
|
|
120
129
|
declare const entropyToMnemonic: (entropy: Uint8Array) => string;
|
|
121
130
|
declare const entropyToSeed: (entropy: Uint8Array, curve: KeypairCurve, password?: string) => Promise<Uint8Array<ArrayBuffer>>;
|
|
122
131
|
declare const isValidMnemonic: (mnemonic: string) => boolean;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import * as
|
|
2
|
-
|
|
1
|
+
import * as _noble_hashes_blake3_js from '@noble/hashes/blake3.js';
|
|
2
|
+
import * as _noble_hashes_utils_js from '@noble/hashes/utils.js';
|
|
3
|
+
export { ed25519 } from '@noble/curves/ed25519.js';
|
|
3
4
|
export { base58, base64, hex, utf8 } from '@scure/base';
|
|
4
5
|
|
|
5
6
|
type KeypairCurve = "ecdsa" | "ed25519" | "sr25519" | "ethereum" | "bitcoin-ed25519" | "bitcoin-ecdsa" | "solana";
|
|
@@ -85,7 +86,7 @@ declare const isAddressValid: (address: string) => boolean;
|
|
|
85
86
|
|
|
86
87
|
declare const normalizeAddress: (address: string) => string;
|
|
87
88
|
|
|
88
|
-
declare const getPublicKeySolana: (secretKey: Uint8Array) => Uint8Array<ArrayBufferLike>;
|
|
89
|
+
declare const getPublicKeySolana: (secretKey: Uint8Array) => Uint8Array<ArrayBufferLike> & Uint8Array<ArrayBuffer>;
|
|
89
90
|
|
|
90
91
|
declare const deriveKeypair: (seed: Uint8Array, derivationPath: string, curve: KeypairCurve) => Keypair;
|
|
91
92
|
declare const getPublicKeyFromSecret: (secretKey: Uint8Array, curve: KeypairCurve) => Uint8Array;
|
|
@@ -104,19 +105,27 @@ declare const isValidDerivationPath: (derivationPath: string, curve: KeypairCurv
|
|
|
104
105
|
* @param publicKey ML-KEM-768 encapsulation key bytes
|
|
105
106
|
* @param plaintext Data to encrypt (typically a signed extrinsic)
|
|
106
107
|
*/
|
|
107
|
-
declare const encryptKemAead: (keyHash: Uint8Array, publicKey: Uint8Array, plaintext: Uint8Array) => Promise<Uint8Array<ArrayBufferLike>>;
|
|
108
|
+
declare const encryptKemAead: (keyHash: Uint8Array, publicKey: Uint8Array, plaintext: Uint8Array) => Promise<Uint8Array<ArrayBufferLike> & Uint8Array<ArrayBuffer>>;
|
|
108
109
|
|
|
109
110
|
declare const blake3: {
|
|
110
|
-
(msg: _noble_hashes_utils.Input, opts?: Object | undefined): Uint8Array;
|
|
111
111
|
outputLen: number;
|
|
112
112
|
blockLen: number;
|
|
113
|
-
|
|
113
|
+
canXOF: boolean;
|
|
114
|
+
} & _noble_hashes_utils_js.HashInfo & {
|
|
115
|
+
(msg: _noble_hashes_utils_js.TArg<Uint8Array>, opts?: _noble_hashes_utils_js.TArg<_noble_hashes_blake3_js.Blake3Opts> | undefined): _noble_hashes_utils_js.TRet<Uint8Array>;
|
|
116
|
+
create(opts?: _noble_hashes_blake3_js.Blake3Opts | undefined): _noble_hashes_blake3_js._BLAKE3;
|
|
117
|
+
} & ((msg: _noble_hashes_utils_js.TArg<_noble_hashes_utils_js.TArg<Uint8Array<ArrayBufferLike>>>, opts?: _noble_hashes_utils_js.TArg<_noble_hashes_utils_js.TArg<_noble_hashes_blake3_js.Blake3Opts> | undefined>) => Uint8Array<ArrayBufferLike> & Uint8Array<ArrayBuffer>) & {
|
|
118
|
+
outputLen: number;
|
|
119
|
+
blockLen: number;
|
|
120
|
+
canXOF: boolean;
|
|
121
|
+
oid?: _noble_hashes_utils_js.TRet<Uint8Array> | undefined;
|
|
122
|
+
create: (opts?: _noble_hashes_blake3_js.Blake3Opts | undefined) => _noble_hashes_blake3_js._BLAKE3;
|
|
114
123
|
};
|
|
115
|
-
declare const blake2b256: (msg: Uint8Array) => Uint8Array<ArrayBufferLike>;
|
|
116
|
-
declare const blake2b512: (msg: Uint8Array) => Uint8Array<ArrayBufferLike>;
|
|
124
|
+
declare const blake2b256: (msg: Uint8Array) => Uint8Array<ArrayBufferLike> & Uint8Array<ArrayBuffer>;
|
|
125
|
+
declare const blake2b512: (msg: Uint8Array) => Uint8Array<ArrayBufferLike> & Uint8Array<ArrayBuffer>;
|
|
117
126
|
declare const getSafeHash: (bytes: Uint8Array) => string;
|
|
118
127
|
|
|
119
|
-
declare const mnemonicToEntropy: (mnemonic: string) => Uint8Array<ArrayBufferLike>;
|
|
128
|
+
declare const mnemonicToEntropy: (mnemonic: string) => Uint8Array<ArrayBufferLike> & Uint8Array<ArrayBuffer>;
|
|
120
129
|
declare const entropyToMnemonic: (entropy: Uint8Array) => string;
|
|
121
130
|
declare const entropyToSeed: (entropy: Uint8Array, curve: KeypairCurve, password?: string) => Promise<Uint8Array<ArrayBuffer>>;
|
|
122
131
|
declare const isValidMnemonic: (mnemonic: string) => boolean;
|
package/dist/index.js
CHANGED
|
@@ -159,8 +159,7 @@ function fromBase58Check(address) {
|
|
|
159
159
|
if (offset + 1 > buffer.length) {
|
|
160
160
|
throw new Error("Offset is outside the bounds of Uint8Array");
|
|
161
161
|
}
|
|
162
|
-
|
|
163
|
-
return buf.readUInt8(offset);
|
|
162
|
+
return buffer[offset];
|
|
164
163
|
}
|
|
165
164
|
const version = readUInt8(payload, 0);
|
|
166
165
|
const hash = payload.slice(1);
|
|
@@ -168,8 +167,8 @@ function fromBase58Check(address) {
|
|
|
168
167
|
}
|
|
169
168
|
|
|
170
169
|
// src/address/encoding/ethereum.ts
|
|
171
|
-
var import_sha3 = require("@noble/hashes/sha3");
|
|
172
|
-
var import_utils = require("@noble/hashes/utils");
|
|
170
|
+
var import_sha3 = require("@noble/hashes/sha3.js");
|
|
171
|
+
var import_utils = require("@noble/hashes/utils.js");
|
|
173
172
|
var encodeAddressEthereum = (publicKey) => {
|
|
174
173
|
if (publicKey[0] !== 4) throw new Error("Invalid public key format");
|
|
175
174
|
const publicKeyWithoutPrefix = publicKey.slice(1);
|
|
@@ -208,12 +207,12 @@ function isSolanaAddress(address) {
|
|
|
208
207
|
var import_base3 = require("@scure/base");
|
|
209
208
|
|
|
210
209
|
// src/hashing/index.ts
|
|
211
|
-
var
|
|
212
|
-
var import_blake3 = require("@noble/hashes/blake3");
|
|
210
|
+
var import_blake2 = require("@noble/hashes/blake2.js");
|
|
211
|
+
var import_blake3 = require("@noble/hashes/blake3.js");
|
|
213
212
|
var import_base2 = require("@scure/base");
|
|
214
213
|
var blake3 = import_blake3.blake3;
|
|
215
|
-
var blake2b256 = (msg) => (0,
|
|
216
|
-
var blake2b512 = (msg) => (0,
|
|
214
|
+
var blake2b256 = (msg) => (0, import_blake2.blake2b)(msg, { dkLen: 32 });
|
|
215
|
+
var blake2b512 = (msg) => (0, import_blake2.blake2b)(msg, { dkLen: 64 });
|
|
217
216
|
var getSafeHash = (bytes) => {
|
|
218
217
|
return import_base2.base58.encode((0, import_blake3.blake3)(bytes));
|
|
219
218
|
};
|
|
@@ -355,9 +354,9 @@ var isAddressValid = (address) => {
|
|
|
355
354
|
};
|
|
356
355
|
|
|
357
356
|
// src/derivation/deriveSolana.ts
|
|
358
|
-
var import_ed25519 = require("@noble/curves/ed25519");
|
|
359
|
-
var import_hmac = require("@noble/hashes/hmac");
|
|
360
|
-
var
|
|
357
|
+
var import_ed25519 = require("@noble/curves/ed25519.js");
|
|
358
|
+
var import_hmac = require("@noble/hashes/hmac.js");
|
|
359
|
+
var import_sha2 = require("@noble/hashes/sha2.js");
|
|
361
360
|
var parseDerivationPath = (path) => {
|
|
362
361
|
if (!path.startsWith("m/")) throw new Error("Path must start with 'm/'");
|
|
363
362
|
return path.split("/").slice(1).map((p) => {
|
|
@@ -366,7 +365,7 @@ var parseDerivationPath = (path) => {
|
|
|
366
365
|
});
|
|
367
366
|
};
|
|
368
367
|
var deriveSolana = (seed, derivationPath) => {
|
|
369
|
-
let I = (0, import_hmac.hmac)(
|
|
368
|
+
let I = (0, import_hmac.hmac)(import_sha2.sha512, new TextEncoder().encode("ed25519 seed"), seed);
|
|
370
369
|
let secretKey = I.slice(0, 32);
|
|
371
370
|
let chainCode = I.slice(32);
|
|
372
371
|
for (const index of parseDerivationPath(derivationPath)) {
|
|
@@ -382,7 +381,7 @@ var deriveSolana = (seed, derivationPath) => {
|
|
|
382
381
|
]),
|
|
383
382
|
1 + secretKey.length
|
|
384
383
|
);
|
|
385
|
-
I = (0, import_hmac.hmac)(
|
|
384
|
+
I = (0, import_hmac.hmac)(import_sha2.sha512, chainCode, data);
|
|
386
385
|
secretKey = I.slice(0, 32);
|
|
387
386
|
chainCode = I.slice(32);
|
|
388
387
|
}
|
|
@@ -403,15 +402,21 @@ var import_base5 = require("@scure/base");
|
|
|
403
402
|
|
|
404
403
|
// src/mnemonic/index.ts
|
|
405
404
|
var import_bip39 = require("@scure/bip39");
|
|
406
|
-
var import_english = require("@scure/bip39/wordlists/english");
|
|
405
|
+
var import_english = require("@scure/bip39/wordlists/english.js");
|
|
407
406
|
|
|
408
407
|
// src/utils/exports.ts
|
|
409
|
-
var import_ed255192 = require("@noble/curves/ed25519");
|
|
408
|
+
var import_ed255192 = require("@noble/curves/ed25519.js");
|
|
410
409
|
var import_base4 = require("@scure/base");
|
|
411
410
|
|
|
412
411
|
// src/utils/pbkdf2.ts
|
|
413
412
|
var pbkdf2 = async (hash, entropy, salt, iterations, outputLenBytes) => {
|
|
414
|
-
const keyMaterial = await crypto.subtle.importKey(
|
|
413
|
+
const keyMaterial = await crypto.subtle.importKey(
|
|
414
|
+
"raw",
|
|
415
|
+
entropy,
|
|
416
|
+
"PBKDF2",
|
|
417
|
+
false,
|
|
418
|
+
["deriveBits"]
|
|
419
|
+
);
|
|
415
420
|
const derivedBits = await crypto.subtle.deriveBits(
|
|
416
421
|
{ name: "PBKDF2", salt, iterations, hash },
|
|
417
422
|
keyMaterial,
|
|
@@ -508,7 +513,7 @@ var getDevSeed = async (curve) => {
|
|
|
508
513
|
};
|
|
509
514
|
|
|
510
515
|
// src/derivation/deriveEcdsa.ts
|
|
511
|
-
var import_secp256k1 = require("@noble/curves/secp256k1");
|
|
516
|
+
var import_secp256k1 = require("@noble/curves/secp256k1.js");
|
|
512
517
|
|
|
513
518
|
// src/derivation/common.ts
|
|
514
519
|
var import_scale_ts = require("scale-ts");
|
|
@@ -554,7 +559,7 @@ var getPublicKeyEcdsa = (secretKey) => {
|
|
|
554
559
|
};
|
|
555
560
|
|
|
556
561
|
// src/derivation/deriveEd25519.ts
|
|
557
|
-
var import_ed255193 = require("@noble/curves/ed25519");
|
|
562
|
+
var import_ed255193 = require("@noble/curves/ed25519.js");
|
|
558
563
|
var deriveEd25519 = (seed, derivationPath) => {
|
|
559
564
|
const secretKey = deriveSubstrateSecretKey(seed, derivationPath, "Ed25519HDKD");
|
|
560
565
|
const publicKey = getPublicKeyEd25519(secretKey);
|
|
@@ -580,7 +585,7 @@ var isUint8ArrayEq = (a, b) => (
|
|
|
580
585
|
);
|
|
581
586
|
|
|
582
587
|
// src/derivation/deriveEthereum.ts
|
|
583
|
-
var import_secp256k12 = require("@noble/curves/secp256k1");
|
|
588
|
+
var import_secp256k12 = require("@noble/curves/secp256k1.js");
|
|
584
589
|
var import_bip32 = require("@scure/bip32");
|
|
585
590
|
var deriveEthereum = (seed, derivationPath) => {
|
|
586
591
|
const hdkey = import_bip32.HDKey.fromMasterSeed(seed);
|
|
@@ -596,20 +601,17 @@ var deriveEthereum = (seed, derivationPath) => {
|
|
|
596
601
|
};
|
|
597
602
|
};
|
|
598
603
|
var getPublicKeyEthereum = (secretKey) => {
|
|
599
|
-
|
|
600
|
-
return import_secp256k12.secp256k1.getPublicKey(scalar, false);
|
|
604
|
+
return import_secp256k12.secp256k1.getPublicKey(secretKey, false);
|
|
601
605
|
};
|
|
602
606
|
|
|
603
607
|
// src/derivation/deriveSr25519.ts
|
|
604
|
-
var
|
|
605
|
-
var import_micro_sr25519 = require("micro-sr25519");
|
|
608
|
+
var import_sr25519 = require("@scure/sr25519");
|
|
606
609
|
var deriveSr25519 = (seed, derivationPath) => {
|
|
607
610
|
const derivations = parseSubstrateDerivations(derivationPath);
|
|
608
611
|
const secretKey = derivations.reduce((secretKey2, [type, chainCode]) => {
|
|
609
|
-
const deriveFn = type === "hard" ? import_micro_sr25519.HDKD.secretHard : import_micro_sr25519.HDKD.secretSoft;
|
|
610
612
|
const code = createChainCode(chainCode);
|
|
611
|
-
return
|
|
612
|
-
}, (0,
|
|
613
|
+
return type === "hard" ? import_sr25519.HDKD.secretHard(secretKey2, code) : import_sr25519.HDKD.secretSoft(secretKey2, code);
|
|
614
|
+
}, (0, import_sr25519.secretFromSeed)(seed));
|
|
613
615
|
const publicKey = getPublicKeySr25519(secretKey);
|
|
614
616
|
return {
|
|
615
617
|
type: "sr25519",
|
|
@@ -618,7 +620,7 @@ var deriveSr25519 = (seed, derivationPath) => {
|
|
|
618
620
|
address: addressFromPublicKey(publicKey, "ss58")
|
|
619
621
|
};
|
|
620
622
|
};
|
|
621
|
-
var getPublicKeySr25519 =
|
|
623
|
+
var getPublicKeySr25519 = import_sr25519.getPublicKey;
|
|
622
624
|
|
|
623
625
|
// src/derivation/utils.ts
|
|
624
626
|
var deriveKeypair = (seed, derivationPath, curve) => {
|
|
@@ -704,7 +706,7 @@ var isValidDerivationPath = async (derivationPath, curve) => {
|
|
|
704
706
|
|
|
705
707
|
// src/encryption/encryptKemAead.ts
|
|
706
708
|
var import_chacha = require("@noble/ciphers/chacha.js");
|
|
707
|
-
var
|
|
709
|
+
var import_utils3 = require("@noble/ciphers/utils.js");
|
|
708
710
|
var import_mlkem = require("mlkem");
|
|
709
711
|
var encryptKemAead = async (keyHash, publicKey, plaintext) => {
|
|
710
712
|
if (keyHash.length !== 16) {
|
|
@@ -720,7 +722,7 @@ var encryptKemAead = async (keyHash, publicKey, plaintext) => {
|
|
|
720
722
|
const aeadCt = aead.encrypt(plaintext);
|
|
721
723
|
const kemLen = new Uint8Array(2);
|
|
722
724
|
new DataView(kemLen.buffer).setUint16(0, kemCt.length, true);
|
|
723
|
-
return (0,
|
|
725
|
+
return (0, import_utils3.concatBytes)(keyHash, kemLen, kemCt, nonce, aeadCt);
|
|
724
726
|
};
|
|
725
727
|
|
|
726
728
|
// src/platform/index.ts
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/address/encoding/addressEncodingFromCurve.ts","../src/address/encoding/bitcoin.ts","../src/address/encoding/ethereum.ts","../src/address/encoding/solana.ts","../src/address/encoding/ss58.ts","../src/hashing/index.ts","../src/address/encoding/detectAddressEncoding.ts","../src/address/addressFromPublicKey.ts","../src/address/normalizeAddress.ts","../src/address/encodeAnyAddress.ts","../src/address/isAddressEqual.ts","../src/address/isAddressValid.ts","../src/derivation/deriveSolana.ts","../src/derivation/utils.ts","../src/mnemonic/index.ts","../src/utils/exports.ts","../src/utils/pbkdf2.ts","../src/derivation/deriveEcdsa.ts","../src/derivation/common.ts","../src/derivation/deriveEd25519.ts","../src/derivation/deriveEthereum.ts","../src/derivation/deriveSr25519.ts","../src/encryption/encryptKemAead.ts","../src/platform/index.ts"],"sourcesContent":["export * from \"./address\"\nexport * from \"./derivation\"\nexport * from \"./encryption\"\nexport * from \"./hashing\"\nexport * from \"./mnemonic\"\nexport * from \"./platform\"\nexport * from \"./types\"\nexport * from \"./utils\"\n","import type { AddressEncoding, KeypairCurve } from \"../../types\"\n\n/** NOTE: Try not to use this too much, it will need to change */\nexport const addressEncodingFromCurve = (curve: KeypairCurve): AddressEncoding => {\n switch (curve) {\n case \"sr25519\":\n case \"ed25519\":\n case \"ecdsa\":\n return \"ss58\"\n case \"bitcoin-ecdsa\":\n case \"bitcoin-ed25519\":\n // NOTE: Bitcoin has multiple address formats, so this isn't necessarily correct\n // The format MAY be bech32m, but it might also be bech32 or base58check.\n // bech32m is the most recent format.\n return \"bech32m\"\n case \"ethereum\":\n return \"ethereum\"\n case \"solana\":\n return \"base58solana\"\n }\n}\n","import { bech32, bech32m } from \"bech32\"\nimport bs58check from \"bs58check\"\n\nexport const isBitcoinAddress = (address: string) =>\n isBech32mAddress(address) || isBech32Address(address) || isBase58CheckAddress(address)\n\nexport function isBech32mAddress(address: string) {\n try {\n fromBech32m(address)\n } catch {\n return false\n }\n return true\n}\n\nexport function isBech32Address(address: string) {\n try {\n fromBech32(address)\n } catch {\n return false\n }\n return true\n}\n\nexport function isBase58CheckAddress(address: string) {\n try {\n fromBase58Check(address)\n } catch {\n return false\n }\n return true\n}\n\n/**\n * Converts a Bech32m encoded address to its corresponding data representation.\n * @param address - The Bech32m encoded address.\n * @returns An object containing the version, prefix, and data of the address.\n * @throws {TypeError} If the address uses the wrong encoding.\n */\nexport function fromBech32m(address: string) {\n const result = bech32m.decode(address)\n const version = result.words[0]\n if (version === 0) throw new TypeError(`${address} uses wrong encoding`)\n const data = bech32m.fromWords(result.words.slice(1))\n return {\n version,\n prefix: result.prefix,\n data: Uint8Array.from(data),\n }\n}\n\n/**\n * Converts a Bech32 encoded address to its corresponding data representation.\n * @param address - The Bech32 encoded address.\n * @returns An object containing the version, prefix, and data of the address.\n * @throws {TypeError} If the address uses the wrong encoding.\n */\nexport function fromBech32(address: string) {\n const result = bech32.decode(address)\n const version = result.words[0]\n if (version !== 0) throw new TypeError(`${address} uses wrong encoding`)\n const data = bech32.fromWords(result.words.slice(1))\n return {\n version,\n prefix: result.prefix,\n data: Uint8Array.from(data),\n }\n}\n\n/**\n * Decodes a base58check encoded Bitcoin address and returns the version and hash.\n *\n * @param address - The base58check encoded Bitcoin address to decode.\n * @returns An object containing the version and hash of the decoded address.\n * @throws {TypeError} If the address is too short or too long.\n */\nexport function fromBase58Check(address: string) {\n const payload = bs58check.decode(address)\n if (payload.length < 21) throw new TypeError(`${address} is too short`)\n if (payload.length > 21) throw new TypeError(`${address} is too long`)\n function readUInt8(buffer: Uint8Array, offset: number) {\n if (offset + 1 > buffer.length) {\n throw new Error(\"Offset is outside the bounds of Uint8Array\")\n }\n const buf = Buffer.from(buffer)\n return buf.readUInt8(offset)\n }\n const version = readUInt8(payload, 0)\n const hash = payload.slice(1)\n return { version, hash }\n}\n","import { keccak_256 } from \"@noble/hashes/sha3\"\nimport { bytesToHex } from \"@noble/hashes/utils\"\n\n/**\n * Encodes a public key using H160 encoding with Ethereum checksum.\n */\nexport const encodeAddressEthereum = (publicKey: Uint8Array): `0x${string}` => {\n // Ensure the public key is in uncompressed format (starts with 0x04)\n if (publicKey[0] !== 0x04) throw new Error(\"Invalid public key format\")\n\n // Remove the prefix (0x04)\n const publicKeyWithoutPrefix = publicKey.slice(1)\n\n // Apply Keccak-256 hashing to the public key\n const hash = keccak_256(publicKeyWithoutPrefix)\n\n // Take the last 20 bytes of the hash to get the Ethereum address\n const address = hash.slice(-20)\n\n // Apply checksum\n return checksumEthereumAddress(`0x${bytesToHex(address)}`)\n}\n\nexport const checksumEthereumAddress = (address: string): `0x${string}` => {\n const addr = address.toLowerCase().replace(/^0x/, \"\")\n const hash = keccak_256(new TextEncoder().encode(addr))\n const hashHex = bytesToHex(hash)\n\n const checksum = addr\n .split(\"\")\n .map((char, i) => (parseInt(hashHex[i], 16) >= 8 ? char.toUpperCase() : char))\n .join(\"\")\n\n return `0x${checksum}`\n}\n\nexport function isEthereumAddress(address: string): address is `0x${string}` {\n return /^0x[a-fA-F0-9]{40}$/.test(address)\n}\n\n// Note: public key cannot be retrieved from an address, because address is hashed from only the last 20 bytes of the pk\n","import { base58 } from \"@scure/base\"\n\nexport const encodeAddressSolana = (publicKey: Uint8Array): string => {\n if (publicKey.length !== 32)\n throw new Error(\"Public key must be 32 bytes long for Solana base58 encoding\")\n return base58.encode(publicKey)\n}\nexport function isSolanaAddress(address: string): boolean {\n try {\n const bytes = base58.decode(address)\n return bytes.length === 32\n } catch {\n return false\n }\n}\n","import { base58 } from \"@scure/base\"\n\nimport { blake2b256, blake2b512 } from \"../../hashing\"\n\n// Inspired from MIT licensed @polkadot-labs/hdkd-helpers\n// https://github.com/polkadot-labs/hdkd/blob/3ef6e02827212d934b59a4e566d8aa61d3ba7b27/packages/hdkd-helpers/src/accountId.ts#L3\n\nconst VALID_PUBLICKEY_LENGTHS = [32, 33]\nconst accountId = (publicKey: Uint8Array) => {\n if (!VALID_PUBLICKEY_LENGTHS.includes(publicKey.length)) throw new Error(\"Invalid publicKey\")\n return publicKey.length === 33 ? blake2b256(publicKey) : publicKey\n}\n\nconst SS58PRE = /* @__PURE__ */ new TextEncoder().encode(\"SS58PRE\")\nconst CHECKSUM_LENGTH = 2\n\nconst VALID_PAYLOAD_LENGTHS = [32, 33]\nconst ss58Encode = (payload: Uint8Array, prefix = 42) => {\n if (!VALID_PAYLOAD_LENGTHS.includes(payload.length)) throw new Error(\"Invalid payload\")\n\n const prefixBytes =\n prefix < 64\n ? Uint8Array.of(prefix)\n : Uint8Array.of(\n ((prefix & 0b0000_0000_1111_1100) >> 2) | 0b0100_0000,\n (prefix >> 8) | ((prefix & 0b0000_0000_0000_0011) << 6)\n )\n const checksum = blake2b512(Uint8Array.of(...SS58PRE, ...prefixBytes, ...payload)).subarray(\n 0,\n CHECKSUM_LENGTH\n )\n return base58.encode(Uint8Array.of(...prefixBytes, ...payload, ...checksum))\n}\n\nconst VALID_ADDRESS_LENGTHS = [35, 36, 37]\nexport const decodeSs58Address = (addressStr: string): [publicKey: Uint8Array, prefix: number] => {\n const address = base58.decode(addressStr)\n if (!VALID_ADDRESS_LENGTHS.includes(address.length)) throw new Error(\"Invalid address length\")\n\n const addressChecksum = address.subarray(address.length - CHECKSUM_LENGTH)\n const checksum = blake2b512(\n Uint8Array.of(...SS58PRE, ...address.subarray(0, address.length - CHECKSUM_LENGTH))\n ).subarray(0, CHECKSUM_LENGTH)\n if (addressChecksum[0] !== checksum[0] || addressChecksum[1] !== checksum[1])\n throw new Error(\"Invalid checksum\")\n\n const prefixLength = address[0]! & 0b0100_0000 ? 2 : 1\n const prefix: number =\n prefixLength === 1\n ? address[0]!\n : ((address[0]! & 0b0011_1111) << 2) | (address[1]! >> 6) | ((address[1]! & 0b0011_1111) << 8)\n const publicKey = address.slice(prefixLength, address.length - CHECKSUM_LENGTH)\n return [publicKey, prefix]\n}\n\nexport const encodeAddressSs58 = (publicKey: Uint8Array | string, prefix = 42) => {\n if (typeof publicKey === \"string\") [publicKey] = decodeSs58Address(publicKey)\n return ss58Encode(accountId(publicKey), prefix)\n}\n\nexport function isSs58Address(address: string): boolean {\n try {\n decodeSs58Address(address)\n return true\n } catch {\n return false\n }\n}\n","import { blake2b } from \"@noble/hashes/blake2b\"\nimport { blake3 as blake3Hasher } from \"@noble/hashes/blake3\"\nimport { base58 } from \"@scure/base\"\n\nexport const blake3 = blake3Hasher\n\nexport const blake2b256 = (msg: Uint8Array) => blake2b(msg, { dkLen: 32 })\nexport const blake2b512 = (msg: Uint8Array) => blake2b(msg, { dkLen: 64 })\n\nexport const getSafeHash = (bytes: Uint8Array) => {\n // cryptographically secure one way hash\n // outputs 44 characters without special characters\n return base58.encode(blake3Hasher(bytes))\n}\n","import type { AddressEncoding } from \"../../types\"\nimport { isBase58CheckAddress, isBech32Address, isBech32mAddress } from \"./bitcoin\"\nimport { isEthereumAddress } from \"./ethereum\"\nimport { isSolanaAddress } from \"./solana\"\nimport { isSs58Address } from \"./ss58\"\n\nconst CACHE = new Map<string, AddressEncoding>()\n\nconst detectAddressEncodingInner = (address: string): AddressEncoding => {\n if (isEthereumAddress(address)) return \"ethereum\"\n if (isSs58Address(address)) return \"ss58\"\n if (isSolanaAddress(address)) return \"base58solana\"\n if (isBech32mAddress(address)) return \"bech32m\"\n if (isBech32Address(address)) return \"bech32\"\n if (isBase58CheckAddress(address)) return \"base58check\"\n\n throw new Error(`Unknown address encoding`)\n}\nexport const detectAddressEncoding = (address: string): AddressEncoding => {\n if (!CACHE.has(address)) CACHE.set(address, detectAddressEncodingInner(address))\n return CACHE.get(address)!\n}\n","import type { AddressEncoding } from \"../types\"\nimport { encodeAddressEthereum, encodeAddressSolana, encodeAddressSs58 } from \"./encoding\"\n\nexport type EncodeAddressOptions = {\n ss58Prefix?: number\n}\n\nexport const addressFromPublicKey = (\n publicKey: Uint8Array,\n encoding: AddressEncoding,\n options?: EncodeAddressOptions\n): string => {\n switch (encoding) {\n case \"ss58\":\n return encodeAddressSs58(publicKey, options?.ss58Prefix)\n case \"ethereum\":\n return encodeAddressEthereum(publicKey)\n case \"base58solana\":\n return encodeAddressSolana(publicKey)\n case \"bech32m\":\n case \"bech32\":\n case \"base58check\":\n throw new Error(\"addressFromPublicKey is not implemented for Bitcoin\")\n }\n}\n","import {\n checksumEthereumAddress,\n decodeSs58Address,\n detectAddressEncoding,\n encodeAddressSs58,\n} from \"./encoding\"\n\nconst CACHE = new Map<string, string>()\n\n// Normalize an address in a way that it can be compared to other addresses that have also been normalized\nexport const normalizeAddress = (address: string) => {\n try {\n if (!CACHE.has(address)) CACHE.set(address, normalizeAnyAddress(address))\n return CACHE.get(address)!\n } catch (cause) {\n throw new Error(`Unable to normalize address: ${address}`, { cause })\n }\n}\n\nconst normalizeAnyAddress = (address: string) => {\n switch (detectAddressEncoding(address)) {\n case \"ethereum\":\n return checksumEthereumAddress(address)\n case \"bech32m\":\n case \"bech32\":\n case \"base58check\":\n case \"base58solana\":\n return address\n case \"ss58\": {\n const [pk] = decodeSs58Address(address)\n return encodeAddressSs58(pk, 42)\n }\n }\n}\n","import { decodeSs58Address, detectAddressEncoding, encodeAddressSs58 } from \"./encoding\"\nimport { normalizeAddress } from \"./normalizeAddress\"\n\ntype EncodeAddressOptions = {\n ss58Format?: number | undefined\n}\n\nexport const encodeAnyAddress = (address: string, options?: EncodeAddressOptions) => {\n // this leverages cache\n const encoding = detectAddressEncoding(address)\n\n // this does NOT leverage cache\n if (encoding === \"ss58\" && options?.ss58Format !== undefined) {\n const [publicKey] = decodeSs58Address(address)\n return encodeAddressSs58(publicKey, options?.ss58Format ?? 42)\n }\n\n // this leverages cache\n return normalizeAddress(address)\n}\n","import { normalizeAddress } from \"./normalizeAddress\"\n\nexport const isAddressEqual = (address1: string, address2: string) => {\n try {\n return normalizeAddress(address1) === normalizeAddress(address2)\n } catch {\n // if normalization fails, assume the addresses are not equal\n return false\n }\n}\n","import { detectAddressEncoding } from \"./encoding\"\n\nexport const isAddressValid = (address: string): boolean => {\n try {\n detectAddressEncoding(address)\n return true\n } catch {\n return false\n }\n}\n","import { ed25519 } from \"@noble/curves/ed25519\"\nimport { hmac } from \"@noble/hashes/hmac\"\nimport { sha512 } from \"@noble/hashes/sha512\"\nimport { addressFromPublicKey } from \"../address\"\nimport type { Keypair } from \"../types\"\n\n// Convert a path like \"m/44'/501'/0'/0'\" to an array of indexes\nconst parseDerivationPath = (path: string): number[] => {\n if (!path.startsWith(\"m/\")) throw new Error(\"Path must start with 'm/'\")\n return path\n .split(\"/\")\n .slice(1) // Remove 'm'\n .map((p) => {\n if (!p.endsWith(\"'\")) throw new Error(\"Only hardened derivation is supported\")\n return parseInt(p.slice(0, -1), 10) + 0x80000000 // Convert to hardened index\n })\n}\n\nexport const deriveSolana = (seed: Uint8Array, derivationPath: string): Keypair => {\n // Generate master private key using SLIP-0010 (HMAC-SHA512 with \"ed25519 seed\")\n let I = hmac(sha512, new TextEncoder().encode(\"ed25519 seed\"), seed)\n let secretKey = I.slice(0, 32)\n let chainCode = I.slice(32)\n\n // Iterate over the derivation path and apply hardened key derivation\n for (const index of parseDerivationPath(derivationPath)) {\n // HMAC-SHA512(Key = chainCode, Data = 0x00 || privateKey || index)\n const data = new Uint8Array(1 + secretKey.length + 4)\n data.set([0x00], 0)\n data.set(secretKey, 1)\n data.set(\n new Uint8Array([\n (index >> 24) & 0xff,\n (index >> 16) & 0xff,\n (index >> 8) & 0xff,\n index & 0xff,\n ]),\n 1 + secretKey.length\n )\n\n I = hmac(sha512, chainCode, data)\n secretKey = I.slice(0, 32)\n chainCode = I.slice(32)\n }\n\n const publicKey = getPublicKeySolana(secretKey)\n\n return {\n type: \"solana\",\n secretKey,\n publicKey,\n address: addressFromPublicKey(publicKey, \"base58solana\"),\n }\n}\n\nexport const getPublicKeySolana = (secretKey: Uint8Array) => {\n return ed25519.getPublicKey(secretKey)\n}\n","import { base58, hex } from \"@scure/base\"\n\nimport { entropyToSeed, getDevSeed, mnemonicToEntropy } from \"../mnemonic\"\nimport type { AccountPlatform, KeypairCurve } from \"../types\"\nimport { deriveEcdsa, getPublicKeyEcdsa } from \"./deriveEcdsa\"\nimport { deriveEd25519, getPublicKeyEd25519 } from \"./deriveEd25519\"\nimport { deriveEthereum, getPublicKeyEthereum } from \"./deriveEthereum\"\nimport { deriveSolana, getPublicKeySolana } from \"./deriveSolana\"\nimport { deriveSr25519, getPublicKeySr25519 } from \"./deriveSr25519\"\n\nexport const deriveKeypair = (seed: Uint8Array, derivationPath: string, curve: KeypairCurve) => {\n switch (curve) {\n case \"sr25519\":\n return deriveSr25519(seed, derivationPath)\n case \"ed25519\":\n return deriveEd25519(seed, derivationPath)\n case \"ecdsa\":\n return deriveEcdsa(seed, derivationPath)\n case \"bitcoin-ecdsa\":\n case \"bitcoin-ed25519\":\n throw new Error(\"deriveKeypair is not implemented for Bitcoin\")\n case \"ethereum\":\n return deriveEthereum(seed, derivationPath)\n case \"solana\":\n return deriveSolana(seed, derivationPath)\n }\n}\n\nexport const getPublicKeyFromSecret = (secretKey: Uint8Array, curve: KeypairCurve): Uint8Array => {\n switch (curve) {\n case \"ecdsa\":\n return getPublicKeyEcdsa(secretKey)\n case \"ethereum\":\n return getPublicKeyEthereum(secretKey)\n case \"sr25519\":\n return getPublicKeySr25519(secretKey)\n case \"ed25519\":\n return getPublicKeyEd25519(secretKey)\n case \"bitcoin-ecdsa\":\n case \"bitcoin-ed25519\":\n throw new Error(\"getPublicKeyFromSecret is not implemented for Bitcoin\")\n case \"solana\":\n return getPublicKeySolana(secretKey)\n }\n}\n\nexport const addressFromMnemonic = async (\n mnemonic: string,\n derivationPath: string,\n curve: KeypairCurve\n) => {\n const entropy = mnemonicToEntropy(mnemonic)\n const seed = await entropyToSeed(entropy, curve)\n const { address } = deriveKeypair(seed, derivationPath, curve)\n return address\n}\n\nexport const removeHexPrefix = (secretKey: string) => {\n if (secretKey.startsWith(\"0x\")) return secretKey.slice(2)\n return secretKey\n}\n\nexport const parseSecretKey = (secretKey: string, platform: AccountPlatform) => {\n switch (platform) {\n case \"ethereum\": {\n const privateKey = removeHexPrefix(secretKey)\n return hex.decode(privateKey)\n }\n case \"solana\": {\n const bytes = secretKey.startsWith(\"[\")\n ? // JSON bytes array (ex: solflare)\n Uint8Array.from(JSON.parse(secretKey))\n : // base58 encoded string (ex: phantom)\n base58.decode(secretKey)\n\n if (bytes.length === 64) {\n const privateKey = bytes.slice(0, 32)\n const publicKey = bytes.slice(32, 64)\n const computedPublicKey = getPublicKeySolana(privateKey)\n if (!publicKey.every((b, i) => b === computedPublicKey[i]))\n throw new Error(\"Invalid Solana secret key: public key does not match\")\n return privateKey\n } else if (bytes.length === 32) return bytes\n\n throw new Error(\"Invalid Solana secret key length\")\n }\n\n default:\n throw new Error(\"Not implemented\")\n }\n}\n\n// @dev: didn't find a reliable source of information on which characters are valid => assume it s valid if a keypair can be generated from it\nexport const isValidDerivationPath = async (derivationPath: string, curve: KeypairCurve) => {\n try {\n deriveKeypair(await getDevSeed(curve), derivationPath, curve)\n return true\n } catch {\n return false\n }\n}\n","import {\n entropyToMnemonic as entropyToMnemonicBip39,\n generateMnemonic as generateMnemonicBip39,\n mnemonicToEntropy as mnemonicToEntropyBip39,\n validateMnemonic,\n} from \"@scure/bip39\"\nimport { wordlist } from \"@scure/bip39/wordlists/english\"\n\nimport type { KeypairCurve } from \"../types\"\nimport { pbkdf2 } from \"../utils\"\n\nexport const mnemonicToEntropy = (mnemonic: string) => {\n return mnemonicToEntropyBip39(mnemonic, wordlist)\n}\n\nexport const entropyToMnemonic = (entropy: Uint8Array) => {\n return entropyToMnemonicBip39(entropy, wordlist)\n}\n\nconst entropyToSeedSubstrate = async (entropy: Uint8Array, password?: string) =>\n await pbkdf2(\n \"SHA-512\",\n entropy,\n mnemonicPasswordToSalt(password ?? \"\"),\n 2048, // 2048 iterations\n 32 // 32 bytes (32 * 8 == 256 bits)\n )\n\nconst entropyToSeedClassic = async (entropy: Uint8Array, password?: string) =>\n await pbkdf2(\n \"SHA-512\",\n encodeNormalized(entropyToMnemonic(entropy)),\n mnemonicPasswordToSalt(password ?? \"\"),\n 2048, // 2048 iterations\n 64 // 64 bytes (64 * 8 == 512 bits)\n )\n\nconst mnemonicPasswordToSalt = (password: string) => encodeNormalized(`mnemonic${password}`)\n\n/** Normalizes a UTF-8 string using `NFKD` form, then encodes it into bytes */\nconst encodeNormalized = (utf8: string): Uint8Array =>\n new TextEncoder().encode(utf8.normalize(\"NFKD\"))\n\ntype SeedDerivationType = \"substrate\" | \"classic\"\n\nconst getSeedDerivationType = (curve: KeypairCurve): SeedDerivationType => {\n switch (curve) {\n case \"sr25519\":\n case \"ed25519\":\n case \"ecdsa\":\n return \"substrate\"\n case \"ethereum\":\n case \"solana\":\n return \"classic\"\n case \"bitcoin-ecdsa\":\n case \"bitcoin-ed25519\":\n throw new Error(\"seed derivation is not implemented for Bitcoin\")\n }\n}\n\n// when deriving keys from a mnemonic, we usually dont want a password here.\n// a password provided here would be used as a 25th mnemonic word.\nexport const entropyToSeed = async (\n entropy: Uint8Array,\n curve: KeypairCurve,\n password?: string\n) => {\n const type = getSeedDerivationType(curve)\n\n switch (type) {\n case \"classic\":\n return await entropyToSeedClassic(entropy, password)\n case \"substrate\":\n return await entropyToSeedSubstrate(entropy, password)\n }\n}\n\nexport const isValidMnemonic = (mnemonic: string) => {\n return validateMnemonic(mnemonic, wordlist)\n}\n\nexport const generateMnemonic = (words: 12 | 24) => {\n switch (words) {\n case 12:\n return generateMnemonicBip39(wordlist, 128)\n case 24:\n return generateMnemonicBip39(wordlist, 256)\n }\n}\n\n// well-known mnemonic used by polkadot.js, can be checked on polkadot wiki\nexport const DEV_MNEMONIC_POLKADOT =\n \"bottom drive obey lake curtain smoke basket hold race lonely fit walk\"\n\n// well-known phrase used by hardhat and anvil\nexport const DEV_MNEMONIC_ETHEREUM = \"test test test test test test test test test test test junk\"\n\n// keep dev seeds in cache as we will reuse them to validate multiple derivation paths\nconst DEV_SEED_CACHE = new Map<SeedDerivationType, Uint8Array>()\n\nexport const getDevSeed = async (curve: KeypairCurve) => {\n const type = getSeedDerivationType(curve)\n\n if (!DEV_SEED_CACHE.has(type)) {\n switch (type) {\n case \"classic\": {\n const entropy = mnemonicToEntropy(DEV_MNEMONIC_ETHEREUM)\n const seed = await entropyToSeedClassic(entropy) // 80ms\n DEV_SEED_CACHE.set(type, seed)\n break\n }\n case \"substrate\": {\n const entropy = mnemonicToEntropy(DEV_MNEMONIC_POLKADOT)\n const seed = await entropyToSeedSubstrate(entropy) // 80ms\n DEV_SEED_CACHE.set(type, seed)\n break\n }\n default:\n throw new Error(\"Unsupported derivation type\")\n }\n }\n\n return DEV_SEED_CACHE.get(type)!\n}\n","export { ed25519 } from \"@noble/curves/ed25519\"\nexport { base58, base64, hex, utf8 } from \"@scure/base\"\n","export const pbkdf2 = async (\n hash: \"SHA-256\" | \"SHA-512\",\n entropy: Uint8Array,\n salt: Uint8Array,\n iterations: number,\n outputLenBytes: number\n) => {\n // NOTE: react-native-quick-crypto (our `global.crypto` polyfill on Talisman Mobile) doesn't support `crypto.subtle.deriveKey`.\n // But, we can work around this by using `crypto.subtle.deriveBits` and `crypto.subtle.importKey`, which when used together\n // can provide the same functionality as `crypto.subtle.deriveKey`.\n const keyMaterial = await crypto.subtle.importKey(\"raw\", entropy, \"PBKDF2\", false, [\"deriveBits\"])\n const derivedBits = await crypto.subtle.deriveBits(\n { name: \"PBKDF2\", salt, iterations, hash },\n keyMaterial,\n outputLenBytes * 8\n )\n return new Uint8Array(derivedBits)\n}\n","import { secp256k1 } from \"@noble/curves/secp256k1\"\nimport { addressFromPublicKey } from \"../address\"\nimport type { Keypair } from \"../types\"\nimport { deriveSubstrateSecretKey } from \"./common\"\n\nexport const deriveEcdsa = (seed: Uint8Array, derivationPath: string): Keypair => {\n const secretKey = deriveSubstrateSecretKey(seed, derivationPath, \"Secp256k1HDKD\")\n\n const publicKey = getPublicKeyEcdsa(secretKey)\n\n return {\n type: \"ecdsa\",\n secretKey,\n publicKey,\n address: addressFromPublicKey(publicKey, \"ss58\"),\n }\n}\n\nexport const getPublicKeyEcdsa = (secretKey: Uint8Array) => {\n return secp256k1.getPublicKey(secretKey)\n}\n","import { Bytes, str, Tuple, u32 } from \"scale-ts\"\n\nimport { blake2b256 } from \"../hashing\"\n\n// Inspired from MIT licensed @polkadot-labs/hdkd helpers\n// https://github.com/polkadot-labs/hdkd/blob/3ef6e02827212d934b59a4e566d8aa61d3ba7b27/packages/hdkd-helpers/src/parseDerivations.ts#L1\n\nconst DERIVATION_RE = /(\\/{1,2})(\\w+)/g\n\ntype DerivationDescriptor = [type: \"hard\" | \"soft\", code: string]\n\nexport const parseSubstrateDerivations = (derivationsStr: string): DerivationDescriptor[] => {\n const derivations = [] as DerivationDescriptor[]\n if (derivations)\n for (const [_, type, code] of derivationsStr.matchAll(DERIVATION_RE)) {\n derivations.push([type === \"//\" ? \"hard\" : \"soft\", code!])\n }\n return derivations\n}\n\nexport const createChainCode = (code: string) => {\n const chainCode = new Uint8Array(32)\n chainCode.set(Number.isNaN(+code) ? str.enc(code) : u32.enc(+code))\n return chainCode\n}\n\nconst derivationCodec = /* @__PURE__ */ Tuple(str, Bytes(32), Bytes(32))\nconst createSubstrateDeriveFn = (prefix: string) => (seed: Uint8Array, chainCode: Uint8Array) =>\n blake2b256(derivationCodec.enc([prefix, seed, chainCode]))\n\nexport const deriveSubstrateSecretKey = (\n seed: Uint8Array,\n derivationPath: string,\n prefix: string\n) => {\n const derivations = parseSubstrateDerivations(derivationPath)\n const derive = createSubstrateDeriveFn(prefix)\n\n return derivations.reduce((seed, [type, chainCode]) => {\n const code = createChainCode(chainCode)\n if (type === \"soft\") throw new Error(\"Soft derivations are not supported\")\n return derive(seed, code)\n }, seed)\n}\n","import { ed25519 } from \"@noble/curves/ed25519\"\nimport { addressFromPublicKey } from \"../address\"\nimport type { Keypair } from \"../types\"\nimport { deriveSubstrateSecretKey } from \"./common\"\n\nexport const deriveEd25519 = (seed: Uint8Array, derivationPath: string): Keypair => {\n const secretKey = deriveSubstrateSecretKey(seed, derivationPath, \"Ed25519HDKD\")\n\n const publicKey = getPublicKeyEd25519(secretKey)\n\n return {\n type: \"ed25519\",\n secretKey,\n publicKey,\n address: addressFromPublicKey(publicKey, \"ss58\"),\n }\n}\n\nexport const getPublicKeyEd25519 = (secretKey: Uint8Array) => {\n // When importing ed25519 polkadot-js accounts via json, which we do inside of `apps/extension/src/core/domains/keyring/getSecretKeyFromPjsJson.ts`,\n // the secretKey we produce is 64 bytes in length.\n //\n // When using the ed25519 curve to derive a publicKey for this 64 bytes privateKey, we should only take the first 32 bytes:\n // - https://github.com/paulmillr/noble-curves/issues/53#issuecomment-1577362759\n // - https://github.com/paulmillr/noble-curves/discussions/33#discussioncomment-5685971\n // - https://github.com/paulmillr/noble-curves/pull/54\n // - https://github.com/paulmillr/noble-curves/issues/88\n //\n // When you compare the ed25519 publicKey of a given account produced by this function to the publicKey produced by\n // polkadot-js, you will find that they are the same as eachother.\n if (secretKey.length === 64) {\n const [privateComponent, publicComponent] = [secretKey.slice(0, 32), secretKey.slice(32)]\n const publicKey = ed25519.getPublicKey(privateComponent)\n\n // NOTE: We only accept a 64 byte secretKey when the first 32 bytes successfully produce a public key which equals the second 32 bytes of the secretKey.\n //\n // In this scenario, we assume the creator of the secretKey has given us an array of bytes which equals `[...privateKey, ...publicKey]`.\n //\n // However, if the second 32 bytes **don't** match the publicKey produced by the first 32 bytes, we no longer know what's going on.\n //\n // In that case we pass the 64 bytes directly through to `@noble/curves/ed25519`, which we expect will throw the error: `private key of length 32 expected, got 64`.\n // But if there's some 64 byte key format for ed25519 we don't know about, or one is added in the future, `@noble/curves/ed25519` can handle that for us instead of throwing.\n if (!isUint8ArrayEq(publicComponent, publicKey)) return ed25519.getPublicKey(secretKey)\n\n return publicKey\n }\n\n return ed25519.getPublicKey(secretKey)\n}\n\n/** If a is identical to b, this function returns true, otherwise it returns false */\nconst isUint8ArrayEq = (a: Uint8Array, b: Uint8Array) =>\n // biome-ignore lint/complexity/noUselessTernary: legacy\n a.length !== b.length || a.some((v, i) => v !== b[i]) ? false : true\n","import { secp256k1 } from \"@noble/curves/secp256k1\"\nimport { HDKey } from \"@scure/bip32\"\nimport { addressFromPublicKey } from \"../address\"\nimport type { Keypair } from \"../types\"\n\nexport const deriveEthereum = (seed: Uint8Array, derivationPath: string): Keypair => {\n const hdkey = HDKey.fromMasterSeed(seed)\n\n const childKey = hdkey.derive(derivationPath)\n if (!childKey.privateKey) throw new Error(\"Invalid derivation path\")\n const secretKey = new Uint8Array(childKey.privateKey)\n\n const publicKey = getPublicKeyEthereum(secretKey)\n\n return {\n type: \"ethereum\",\n secretKey,\n publicKey,\n address: addressFromPublicKey(publicKey, \"ethereum\"),\n }\n}\n\nexport const getPublicKeyEthereum = (secretKey: Uint8Array) => {\n const scalar = secp256k1.utils.normPrivateKeyToScalar(secretKey)\n return secp256k1.getPublicKey(scalar, false)\n}\n","import { randomBytes } from \"@noble/hashes/utils\"\nimport { getPublicKey, HDKD, secretFromSeed } from \"micro-sr25519\"\nimport { addressFromPublicKey } from \"../address\"\nimport type { Keypair } from \"../types\"\nimport { createChainCode, parseSubstrateDerivations } from \"./common\"\n\nexport const deriveSr25519 = (seed: Uint8Array, derivationPath: string): Keypair => {\n const derivations = parseSubstrateDerivations(derivationPath)\n\n const secretKey = derivations.reduce((secretKey, [type, chainCode]) => {\n const deriveFn = type === \"hard\" ? HDKD.secretHard : HDKD.secretSoft\n const code = createChainCode(chainCode)\n return deriveFn(secretKey, code, randomBytes)\n }, secretFromSeed(seed))\n\n const publicKey = getPublicKeySr25519(secretKey)\n return {\n type: \"sr25519\",\n secretKey,\n publicKey,\n address: addressFromPublicKey(publicKey, \"ss58\"),\n }\n}\n\nexport const getPublicKeySr25519 = getPublicKey\n","import { xchacha20poly1305 } from \"@noble/ciphers/chacha.js\"\nimport { concatBytes } from \"@noble/ciphers/utils.js\"\nimport { MlKem768 } from \"mlkem\"\n\n/**\n * Encrypts plaintext using ML-KEM-768 + XChaCha20-Poly1305 (KEM-AEAD).\n *\n * Wire format (subtensor pallet-shield v2):\n * key_hash (16 bytes) || kem_len (2 bytes LE) || kem_ct (variable) || nonce (24 bytes) || aead_ct (variable)\n *\n * @param keyHash 16-byte xxhash128 of the public key (caller must compute, e.g. via Twox128)\n * @param publicKey ML-KEM-768 encapsulation key bytes\n * @param plaintext Data to encrypt (typically a signed extrinsic)\n */\nexport const encryptKemAead = async (\n keyHash: Uint8Array,\n publicKey: Uint8Array,\n plaintext: Uint8Array\n) => {\n if (keyHash.length !== 16) {\n throw new Error(`Expected 16-byte keyHash, got ${keyHash.length}`)\n }\n\n const kem = new MlKem768()\n const [kemCt, sharedSecret] = await kem.encap(publicKey)\n\n if (sharedSecret.length !== 32) {\n throw new Error(`Expected 32-byte shared secret, got ${sharedSecret.length}`)\n }\n\n const nonce = crypto.getRandomValues(new Uint8Array(24))\n\n const aead = xchacha20poly1305(sharedSecret, nonce)\n const aeadCt = aead.encrypt(plaintext)\n\n const kemLen = new Uint8Array(2)\n new DataView(kemLen.buffer).setUint16(0, kemCt.length, true)\n\n return concatBytes(keyHash, kemLen, kemCt, nonce, aeadCt)\n}\n","import { detectAddressEncoding } from \"../address\"\nimport type { AccountPlatform, AddressEncoding, KeypairCurve } from \"../types\"\n\nexport const getAccountPlatformFromCurve = (curve: KeypairCurve): AccountPlatform => {\n switch (curve) {\n case \"sr25519\":\n case \"ed25519\":\n case \"ecdsa\":\n return \"polkadot\"\n case \"ethereum\":\n return \"ethereum\"\n case \"bitcoin-ecdsa\":\n case \"bitcoin-ed25519\":\n return \"bitcoin\"\n case \"solana\":\n return \"solana\"\n }\n}\n\nexport const getAccountPlatformFromEncoding = (encoding: AddressEncoding): AccountPlatform => {\n switch (encoding) {\n case \"ss58\":\n return \"polkadot\"\n case \"ethereum\":\n return \"ethereum\"\n case \"bech32m\":\n case \"bech32\":\n case \"base58check\":\n return \"bitcoin\"\n case \"base58solana\":\n return \"solana\"\n }\n}\n\nexport const getAccountPlatformFromAddress = (address: string): AccountPlatform => {\n const encoding = detectAddressEncoding(address)\n return getAccountPlatformFromEncoding(encoding)\n}\n"],"mappings":"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","names":["bs58check","import_base","import_base","blake3Hasher","CACHE","import_base","import_ed25519","import_base","mnemonicToEntropyBip39","entropyToMnemonicBip39","utf8","generateMnemonicBip39","seed","import_ed25519","import_secp256k1","import_utils","secretKey","import_utils"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/address/encoding/addressEncodingFromCurve.ts","../src/address/encoding/bitcoin.ts","../src/address/encoding/ethereum.ts","../src/address/encoding/solana.ts","../src/address/encoding/ss58.ts","../src/hashing/index.ts","../src/address/encoding/detectAddressEncoding.ts","../src/address/addressFromPublicKey.ts","../src/address/normalizeAddress.ts","../src/address/encodeAnyAddress.ts","../src/address/isAddressEqual.ts","../src/address/isAddressValid.ts","../src/derivation/deriveSolana.ts","../src/derivation/utils.ts","../src/mnemonic/index.ts","../src/utils/exports.ts","../src/utils/pbkdf2.ts","../src/derivation/deriveEcdsa.ts","../src/derivation/common.ts","../src/derivation/deriveEd25519.ts","../src/derivation/deriveEthereum.ts","../src/derivation/deriveSr25519.ts","../src/encryption/encryptKemAead.ts","../src/platform/index.ts"],"sourcesContent":["export * from \"./address\"\nexport * from \"./derivation\"\nexport * from \"./encryption\"\nexport * from \"./hashing\"\nexport * from \"./mnemonic\"\nexport * from \"./platform\"\nexport * from \"./types\"\nexport * from \"./utils\"\n","import type { AddressEncoding, KeypairCurve } from \"../../types\"\n\n/** NOTE: Try not to use this too much, it will need to change */\nexport const addressEncodingFromCurve = (curve: KeypairCurve): AddressEncoding => {\n switch (curve) {\n case \"sr25519\":\n case \"ed25519\":\n case \"ecdsa\":\n return \"ss58\"\n case \"bitcoin-ecdsa\":\n case \"bitcoin-ed25519\":\n // NOTE: Bitcoin has multiple address formats, so this isn't necessarily correct\n // The format MAY be bech32m, but it might also be bech32 or base58check.\n // bech32m is the most recent format.\n return \"bech32m\"\n case \"ethereum\":\n return \"ethereum\"\n case \"solana\":\n return \"base58solana\"\n }\n}\n","import { bech32, bech32m } from \"bech32\"\nimport bs58check from \"bs58check\"\n\nexport const isBitcoinAddress = (address: string) =>\n isBech32mAddress(address) || isBech32Address(address) || isBase58CheckAddress(address)\n\nexport function isBech32mAddress(address: string) {\n try {\n fromBech32m(address)\n } catch {\n return false\n }\n return true\n}\n\nexport function isBech32Address(address: string) {\n try {\n fromBech32(address)\n } catch {\n return false\n }\n return true\n}\n\nexport function isBase58CheckAddress(address: string) {\n try {\n fromBase58Check(address)\n } catch {\n return false\n }\n return true\n}\n\n/**\n * Converts a Bech32m encoded address to its corresponding data representation.\n * @param address - The Bech32m encoded address.\n * @returns An object containing the version, prefix, and data of the address.\n * @throws {TypeError} If the address uses the wrong encoding.\n */\nexport function fromBech32m(address: string) {\n const result = bech32m.decode(address)\n const version = result.words[0]\n if (version === 0) throw new TypeError(`${address} uses wrong encoding`)\n const data = bech32m.fromWords(result.words.slice(1))\n return {\n version,\n prefix: result.prefix,\n data: Uint8Array.from(data),\n }\n}\n\n/**\n * Converts a Bech32 encoded address to its corresponding data representation.\n * @param address - The Bech32 encoded address.\n * @returns An object containing the version, prefix, and data of the address.\n * @throws {TypeError} If the address uses the wrong encoding.\n */\nexport function fromBech32(address: string) {\n const result = bech32.decode(address)\n const version = result.words[0]\n if (version !== 0) throw new TypeError(`${address} uses wrong encoding`)\n const data = bech32.fromWords(result.words.slice(1))\n return {\n version,\n prefix: result.prefix,\n data: Uint8Array.from(data),\n }\n}\n\n/**\n * Decodes a base58check encoded Bitcoin address and returns the version and hash.\n *\n * @param address - The base58check encoded Bitcoin address to decode.\n * @returns An object containing the version and hash of the decoded address.\n * @throws {TypeError} If the address is too short or too long.\n */\nexport function fromBase58Check(address: string) {\n const payload = bs58check.decode(address)\n if (payload.length < 21) throw new TypeError(`${address} is too short`)\n if (payload.length > 21) throw new TypeError(`${address} is too long`)\n function readUInt8(buffer: Uint8Array, offset: number) {\n if (offset + 1 > buffer.length) {\n throw new Error(\"Offset is outside the bounds of Uint8Array\")\n }\n return buffer[offset]\n }\n const version = readUInt8(payload, 0)\n const hash = payload.slice(1)\n return { version, hash }\n}\n","import { keccak_256 } from \"@noble/hashes/sha3.js\"\nimport { bytesToHex } from \"@noble/hashes/utils.js\"\n\n/**\n * Encodes a public key using H160 encoding with Ethereum checksum.\n */\nexport const encodeAddressEthereum = (publicKey: Uint8Array): `0x${string}` => {\n // Ensure the public key is in uncompressed format (starts with 0x04)\n if (publicKey[0] !== 0x04) throw new Error(\"Invalid public key format\")\n\n // Remove the prefix (0x04)\n const publicKeyWithoutPrefix = publicKey.slice(1)\n\n // Apply Keccak-256 hashing to the public key\n const hash = keccak_256(publicKeyWithoutPrefix)\n\n // Take the last 20 bytes of the hash to get the Ethereum address\n const address = hash.slice(-20)\n\n // Apply checksum\n return checksumEthereumAddress(`0x${bytesToHex(address)}`)\n}\n\nexport const checksumEthereumAddress = (address: string): `0x${string}` => {\n const addr = address.toLowerCase().replace(/^0x/, \"\")\n const hash = keccak_256(new TextEncoder().encode(addr))\n const hashHex = bytesToHex(hash)\n\n const checksum = addr\n .split(\"\")\n .map((char, i) => (parseInt(hashHex[i], 16) >= 8 ? char.toUpperCase() : char))\n .join(\"\")\n\n return `0x${checksum}`\n}\n\nexport function isEthereumAddress(address: string): address is `0x${string}` {\n return /^0x[a-fA-F0-9]{40}$/.test(address)\n}\n\n// Note: public key cannot be retrieved from an address, because address is hashed from only the last 20 bytes of the pk\n","import { base58 } from \"@scure/base\"\n\nexport const encodeAddressSolana = (publicKey: Uint8Array): string => {\n if (publicKey.length !== 32)\n throw new Error(\"Public key must be 32 bytes long for Solana base58 encoding\")\n return base58.encode(publicKey)\n}\nexport function isSolanaAddress(address: string): boolean {\n try {\n const bytes = base58.decode(address)\n return bytes.length === 32\n } catch {\n return false\n }\n}\n","import { base58 } from \"@scure/base\"\n\nimport { blake2b256, blake2b512 } from \"../../hashing\"\n\n// Inspired from MIT licensed @polkadot-labs/hdkd-helpers\n// https://github.com/polkadot-labs/hdkd/blob/3ef6e02827212d934b59a4e566d8aa61d3ba7b27/packages/hdkd-helpers/src/accountId.ts#L3\n\nconst VALID_PUBLICKEY_LENGTHS = [32, 33]\nconst accountId = (publicKey: Uint8Array) => {\n if (!VALID_PUBLICKEY_LENGTHS.includes(publicKey.length)) throw new Error(\"Invalid publicKey\")\n return publicKey.length === 33 ? blake2b256(publicKey) : publicKey\n}\n\nconst SS58PRE = /* @__PURE__ */ new TextEncoder().encode(\"SS58PRE\")\nconst CHECKSUM_LENGTH = 2\n\nconst VALID_PAYLOAD_LENGTHS = [32, 33]\nconst ss58Encode = (payload: Uint8Array, prefix = 42) => {\n if (!VALID_PAYLOAD_LENGTHS.includes(payload.length)) throw new Error(\"Invalid payload\")\n\n const prefixBytes =\n prefix < 64\n ? Uint8Array.of(prefix)\n : Uint8Array.of(\n ((prefix & 0b0000_0000_1111_1100) >> 2) | 0b0100_0000,\n (prefix >> 8) | ((prefix & 0b0000_0000_0000_0011) << 6)\n )\n const checksum = blake2b512(Uint8Array.of(...SS58PRE, ...prefixBytes, ...payload)).subarray(\n 0,\n CHECKSUM_LENGTH\n )\n return base58.encode(Uint8Array.of(...prefixBytes, ...payload, ...checksum))\n}\n\nconst VALID_ADDRESS_LENGTHS = [35, 36, 37]\nexport const decodeSs58Address = (addressStr: string): [publicKey: Uint8Array, prefix: number] => {\n const address = base58.decode(addressStr)\n if (!VALID_ADDRESS_LENGTHS.includes(address.length)) throw new Error(\"Invalid address length\")\n\n const addressChecksum = address.subarray(address.length - CHECKSUM_LENGTH)\n const checksum = blake2b512(\n Uint8Array.of(...SS58PRE, ...address.subarray(0, address.length - CHECKSUM_LENGTH))\n ).subarray(0, CHECKSUM_LENGTH)\n if (addressChecksum[0] !== checksum[0] || addressChecksum[1] !== checksum[1])\n throw new Error(\"Invalid checksum\")\n\n const prefixLength = address[0]! & 0b0100_0000 ? 2 : 1\n const prefix: number =\n prefixLength === 1\n ? address[0]!\n : ((address[0]! & 0b0011_1111) << 2) | (address[1]! >> 6) | ((address[1]! & 0b0011_1111) << 8)\n const publicKey = address.slice(prefixLength, address.length - CHECKSUM_LENGTH)\n return [publicKey, prefix]\n}\n\nexport const encodeAddressSs58 = (publicKey: Uint8Array | string, prefix = 42) => {\n if (typeof publicKey === \"string\") [publicKey] = decodeSs58Address(publicKey)\n return ss58Encode(accountId(publicKey), prefix)\n}\n\nexport function isSs58Address(address: string): boolean {\n try {\n decodeSs58Address(address)\n return true\n } catch {\n return false\n }\n}\n","import { blake2b } from \"@noble/hashes/blake2.js\"\nimport { blake3 as blake3Hasher } from \"@noble/hashes/blake3.js\"\nimport { base58 } from \"@scure/base\"\n\nexport const blake3 = blake3Hasher\n\nexport const blake2b256 = (msg: Uint8Array) => blake2b(msg, { dkLen: 32 })\nexport const blake2b512 = (msg: Uint8Array) => blake2b(msg, { dkLen: 64 })\n\nexport const getSafeHash = (bytes: Uint8Array) => {\n // cryptographically secure one way hash\n // outputs 44 characters without special characters\n return base58.encode(blake3Hasher(bytes))\n}\n","import type { AddressEncoding } from \"../../types\"\nimport { isBase58CheckAddress, isBech32Address, isBech32mAddress } from \"./bitcoin\"\nimport { isEthereumAddress } from \"./ethereum\"\nimport { isSolanaAddress } from \"./solana\"\nimport { isSs58Address } from \"./ss58\"\n\nconst CACHE = new Map<string, AddressEncoding>()\n\nconst detectAddressEncodingInner = (address: string): AddressEncoding => {\n if (isEthereumAddress(address)) return \"ethereum\"\n if (isSs58Address(address)) return \"ss58\"\n if (isSolanaAddress(address)) return \"base58solana\"\n if (isBech32mAddress(address)) return \"bech32m\"\n if (isBech32Address(address)) return \"bech32\"\n if (isBase58CheckAddress(address)) return \"base58check\"\n\n throw new Error(`Unknown address encoding`)\n}\nexport const detectAddressEncoding = (address: string): AddressEncoding => {\n if (!CACHE.has(address)) CACHE.set(address, detectAddressEncodingInner(address))\n return CACHE.get(address)!\n}\n","import type { AddressEncoding } from \"../types\"\nimport { encodeAddressEthereum, encodeAddressSolana, encodeAddressSs58 } from \"./encoding\"\n\nexport type EncodeAddressOptions = {\n ss58Prefix?: number\n}\n\nexport const addressFromPublicKey = (\n publicKey: Uint8Array,\n encoding: AddressEncoding,\n options?: EncodeAddressOptions\n): string => {\n switch (encoding) {\n case \"ss58\":\n return encodeAddressSs58(publicKey, options?.ss58Prefix)\n case \"ethereum\":\n return encodeAddressEthereum(publicKey)\n case \"base58solana\":\n return encodeAddressSolana(publicKey)\n case \"bech32m\":\n case \"bech32\":\n case \"base58check\":\n throw new Error(\"addressFromPublicKey is not implemented for Bitcoin\")\n }\n}\n","import {\n checksumEthereumAddress,\n decodeSs58Address,\n detectAddressEncoding,\n encodeAddressSs58,\n} from \"./encoding\"\n\nconst CACHE = new Map<string, string>()\n\n// Normalize an address in a way that it can be compared to other addresses that have also been normalized\nexport const normalizeAddress = (address: string) => {\n try {\n if (!CACHE.has(address)) CACHE.set(address, normalizeAnyAddress(address))\n return CACHE.get(address)!\n } catch (cause) {\n throw new Error(`Unable to normalize address: ${address}`, { cause })\n }\n}\n\nconst normalizeAnyAddress = (address: string) => {\n switch (detectAddressEncoding(address)) {\n case \"ethereum\":\n return checksumEthereumAddress(address)\n case \"bech32m\":\n case \"bech32\":\n case \"base58check\":\n case \"base58solana\":\n return address\n case \"ss58\": {\n const [pk] = decodeSs58Address(address)\n return encodeAddressSs58(pk, 42)\n }\n }\n}\n","import { decodeSs58Address, detectAddressEncoding, encodeAddressSs58 } from \"./encoding\"\nimport { normalizeAddress } from \"./normalizeAddress\"\n\ntype EncodeAddressOptions = {\n ss58Format?: number | undefined\n}\n\nexport const encodeAnyAddress = (address: string, options?: EncodeAddressOptions) => {\n // this leverages cache\n const encoding = detectAddressEncoding(address)\n\n // this does NOT leverage cache\n if (encoding === \"ss58\" && options?.ss58Format !== undefined) {\n const [publicKey] = decodeSs58Address(address)\n return encodeAddressSs58(publicKey, options?.ss58Format ?? 42)\n }\n\n // this leverages cache\n return normalizeAddress(address)\n}\n","import { normalizeAddress } from \"./normalizeAddress\"\n\nexport const isAddressEqual = (address1: string, address2: string) => {\n try {\n return normalizeAddress(address1) === normalizeAddress(address2)\n } catch {\n // if normalization fails, assume the addresses are not equal\n return false\n }\n}\n","import { detectAddressEncoding } from \"./encoding\"\n\nexport const isAddressValid = (address: string): boolean => {\n try {\n detectAddressEncoding(address)\n return true\n } catch {\n return false\n }\n}\n","import { ed25519 } from \"@noble/curves/ed25519.js\"\nimport { hmac } from \"@noble/hashes/hmac.js\"\nimport { sha512 } from \"@noble/hashes/sha2.js\"\nimport { addressFromPublicKey } from \"../address\"\nimport type { Keypair } from \"../types\"\n\n// Convert a path like \"m/44'/501'/0'/0'\" to an array of indexes\nconst parseDerivationPath = (path: string): number[] => {\n if (!path.startsWith(\"m/\")) throw new Error(\"Path must start with 'm/'\")\n return path\n .split(\"/\")\n .slice(1) // Remove 'm'\n .map((p) => {\n if (!p.endsWith(\"'\")) throw new Error(\"Only hardened derivation is supported\")\n return parseInt(p.slice(0, -1), 10) + 0x80000000 // Convert to hardened index\n })\n}\n\nexport const deriveSolana = (seed: Uint8Array, derivationPath: string): Keypair => {\n // Generate master private key using SLIP-0010 (HMAC-SHA512 with \"ed25519 seed\")\n let I = hmac(sha512, new TextEncoder().encode(\"ed25519 seed\"), seed)\n let secretKey = I.slice(0, 32)\n let chainCode = I.slice(32)\n\n // Iterate over the derivation path and apply hardened key derivation\n for (const index of parseDerivationPath(derivationPath)) {\n // HMAC-SHA512(Key = chainCode, Data = 0x00 || privateKey || index)\n const data = new Uint8Array(1 + secretKey.length + 4)\n data.set([0x00], 0)\n data.set(secretKey, 1)\n data.set(\n new Uint8Array([\n (index >> 24) & 0xff,\n (index >> 16) & 0xff,\n (index >> 8) & 0xff,\n index & 0xff,\n ]),\n 1 + secretKey.length\n )\n\n I = hmac(sha512, chainCode, data)\n secretKey = I.slice(0, 32)\n chainCode = I.slice(32)\n }\n\n const publicKey = getPublicKeySolana(secretKey)\n\n return {\n type: \"solana\",\n secretKey,\n publicKey,\n address: addressFromPublicKey(publicKey, \"base58solana\"),\n }\n}\n\nexport const getPublicKeySolana = (secretKey: Uint8Array) => {\n return ed25519.getPublicKey(secretKey)\n}\n","import { base58, hex } from \"@scure/base\"\n\nimport { entropyToSeed, getDevSeed, mnemonicToEntropy } from \"../mnemonic\"\nimport type { AccountPlatform, KeypairCurve } from \"../types\"\nimport { deriveEcdsa, getPublicKeyEcdsa } from \"./deriveEcdsa\"\nimport { deriveEd25519, getPublicKeyEd25519 } from \"./deriveEd25519\"\nimport { deriveEthereum, getPublicKeyEthereum } from \"./deriveEthereum\"\nimport { deriveSolana, getPublicKeySolana } from \"./deriveSolana\"\nimport { deriveSr25519, getPublicKeySr25519 } from \"./deriveSr25519\"\n\nexport const deriveKeypair = (seed: Uint8Array, derivationPath: string, curve: KeypairCurve) => {\n switch (curve) {\n case \"sr25519\":\n return deriveSr25519(seed, derivationPath)\n case \"ed25519\":\n return deriveEd25519(seed, derivationPath)\n case \"ecdsa\":\n return deriveEcdsa(seed, derivationPath)\n case \"bitcoin-ecdsa\":\n case \"bitcoin-ed25519\":\n throw new Error(\"deriveKeypair is not implemented for Bitcoin\")\n case \"ethereum\":\n return deriveEthereum(seed, derivationPath)\n case \"solana\":\n return deriveSolana(seed, derivationPath)\n }\n}\n\nexport const getPublicKeyFromSecret = (secretKey: Uint8Array, curve: KeypairCurve): Uint8Array => {\n switch (curve) {\n case \"ecdsa\":\n return getPublicKeyEcdsa(secretKey)\n case \"ethereum\":\n return getPublicKeyEthereum(secretKey)\n case \"sr25519\":\n return getPublicKeySr25519(secretKey)\n case \"ed25519\":\n return getPublicKeyEd25519(secretKey)\n case \"bitcoin-ecdsa\":\n case \"bitcoin-ed25519\":\n throw new Error(\"getPublicKeyFromSecret is not implemented for Bitcoin\")\n case \"solana\":\n return getPublicKeySolana(secretKey)\n }\n}\n\nexport const addressFromMnemonic = async (\n mnemonic: string,\n derivationPath: string,\n curve: KeypairCurve\n) => {\n const entropy = mnemonicToEntropy(mnemonic)\n const seed = await entropyToSeed(entropy, curve)\n const { address } = deriveKeypair(seed, derivationPath, curve)\n return address\n}\n\nexport const removeHexPrefix = (secretKey: string) => {\n if (secretKey.startsWith(\"0x\")) return secretKey.slice(2)\n return secretKey\n}\n\nexport const parseSecretKey = (secretKey: string, platform: AccountPlatform) => {\n switch (platform) {\n case \"ethereum\": {\n const privateKey = removeHexPrefix(secretKey)\n return hex.decode(privateKey)\n }\n case \"solana\": {\n const bytes = secretKey.startsWith(\"[\")\n ? // JSON bytes array (ex: solflare)\n Uint8Array.from(JSON.parse(secretKey))\n : // base58 encoded string (ex: phantom)\n base58.decode(secretKey)\n\n if (bytes.length === 64) {\n const privateKey = bytes.slice(0, 32)\n const publicKey = bytes.slice(32, 64)\n const computedPublicKey = getPublicKeySolana(privateKey)\n if (!publicKey.every((b, i) => b === computedPublicKey[i]))\n throw new Error(\"Invalid Solana secret key: public key does not match\")\n return privateKey\n } else if (bytes.length === 32) return bytes\n\n throw new Error(\"Invalid Solana secret key length\")\n }\n\n default:\n throw new Error(\"Not implemented\")\n }\n}\n\n// @dev: didn't find a reliable source of information on which characters are valid => assume it s valid if a keypair can be generated from it\nexport const isValidDerivationPath = async (derivationPath: string, curve: KeypairCurve) => {\n try {\n deriveKeypair(await getDevSeed(curve), derivationPath, curve)\n return true\n } catch {\n return false\n }\n}\n","import {\n entropyToMnemonic as entropyToMnemonicBip39,\n generateMnemonic as generateMnemonicBip39,\n mnemonicToEntropy as mnemonicToEntropyBip39,\n validateMnemonic,\n} from \"@scure/bip39\"\nimport { wordlist } from \"@scure/bip39/wordlists/english.js\"\n\nimport type { KeypairCurve } from \"../types\"\nimport { pbkdf2 } from \"../utils\"\n\nexport const mnemonicToEntropy = (mnemonic: string) => {\n return mnemonicToEntropyBip39(mnemonic, wordlist)\n}\n\nexport const entropyToMnemonic = (entropy: Uint8Array) => {\n return entropyToMnemonicBip39(entropy, wordlist)\n}\n\nconst entropyToSeedSubstrate = async (entropy: Uint8Array, password?: string) =>\n await pbkdf2(\n \"SHA-512\",\n entropy,\n mnemonicPasswordToSalt(password ?? \"\"),\n 2048, // 2048 iterations\n 32 // 32 bytes (32 * 8 == 256 bits)\n )\n\nconst entropyToSeedClassic = async (entropy: Uint8Array, password?: string) =>\n await pbkdf2(\n \"SHA-512\",\n encodeNormalized(entropyToMnemonic(entropy)),\n mnemonicPasswordToSalt(password ?? \"\"),\n 2048, // 2048 iterations\n 64 // 64 bytes (64 * 8 == 512 bits)\n )\n\nconst mnemonicPasswordToSalt = (password: string) => encodeNormalized(`mnemonic${password}`)\n\n/** Normalizes a UTF-8 string using `NFKD` form, then encodes it into bytes */\nconst encodeNormalized = (utf8: string): Uint8Array =>\n new TextEncoder().encode(utf8.normalize(\"NFKD\"))\n\ntype SeedDerivationType = \"substrate\" | \"classic\"\n\nconst getSeedDerivationType = (curve: KeypairCurve): SeedDerivationType => {\n switch (curve) {\n case \"sr25519\":\n case \"ed25519\":\n case \"ecdsa\":\n return \"substrate\"\n case \"ethereum\":\n case \"solana\":\n return \"classic\"\n case \"bitcoin-ecdsa\":\n case \"bitcoin-ed25519\":\n throw new Error(\"seed derivation is not implemented for Bitcoin\")\n }\n}\n\n// when deriving keys from a mnemonic, we usually dont want a password here.\n// a password provided here would be used as a 25th mnemonic word.\nexport const entropyToSeed = async (\n entropy: Uint8Array,\n curve: KeypairCurve,\n password?: string\n) => {\n const type = getSeedDerivationType(curve)\n\n switch (type) {\n case \"classic\":\n return await entropyToSeedClassic(entropy, password)\n case \"substrate\":\n return await entropyToSeedSubstrate(entropy, password)\n }\n}\n\nexport const isValidMnemonic = (mnemonic: string) => {\n return validateMnemonic(mnemonic, wordlist)\n}\n\nexport const generateMnemonic = (words: 12 | 24) => {\n switch (words) {\n case 12:\n return generateMnemonicBip39(wordlist, 128)\n case 24:\n return generateMnemonicBip39(wordlist, 256)\n }\n}\n\n// well-known mnemonic used by polkadot.js, can be checked on polkadot wiki\nexport const DEV_MNEMONIC_POLKADOT =\n \"bottom drive obey lake curtain smoke basket hold race lonely fit walk\"\n\n// well-known phrase used by hardhat and anvil\nexport const DEV_MNEMONIC_ETHEREUM = \"test test test test test test test test test test test junk\"\n\n// keep dev seeds in cache as we will reuse them to validate multiple derivation paths\nconst DEV_SEED_CACHE = new Map<SeedDerivationType, Uint8Array>()\n\nexport const getDevSeed = async (curve: KeypairCurve) => {\n const type = getSeedDerivationType(curve)\n\n if (!DEV_SEED_CACHE.has(type)) {\n switch (type) {\n case \"classic\": {\n const entropy = mnemonicToEntropy(DEV_MNEMONIC_ETHEREUM)\n const seed = await entropyToSeedClassic(entropy) // 80ms\n DEV_SEED_CACHE.set(type, seed)\n break\n }\n case \"substrate\": {\n const entropy = mnemonicToEntropy(DEV_MNEMONIC_POLKADOT)\n const seed = await entropyToSeedSubstrate(entropy) // 80ms\n DEV_SEED_CACHE.set(type, seed)\n break\n }\n default:\n throw new Error(\"Unsupported derivation type\")\n }\n }\n\n return DEV_SEED_CACHE.get(type)!\n}\n","export { ed25519 } from \"@noble/curves/ed25519.js\"\nexport { base58, base64, hex, utf8 } from \"@scure/base\"\n","export const pbkdf2 = async (\n hash: \"SHA-256\" | \"SHA-512\",\n entropy: Uint8Array,\n salt: Uint8Array,\n iterations: number,\n outputLenBytes: number\n) => {\n // NOTE: react-native-quick-crypto (our `global.crypto` polyfill on Talisman Mobile) doesn't support `crypto.subtle.deriveKey`.\n // But, we can work around this by using `crypto.subtle.deriveBits` and `crypto.subtle.importKey`, which when used together\n // can provide the same functionality as `crypto.subtle.deriveKey`.\n const keyMaterial = await crypto.subtle.importKey(\n \"raw\",\n entropy as Uint8Array<ArrayBuffer>,\n \"PBKDF2\",\n false,\n [\"deriveBits\"]\n )\n const derivedBits = await crypto.subtle.deriveBits(\n { name: \"PBKDF2\", salt: salt as Uint8Array<ArrayBuffer>, iterations, hash },\n keyMaterial,\n outputLenBytes * 8\n )\n return new Uint8Array(derivedBits)\n}\n","import { secp256k1 } from \"@noble/curves/secp256k1.js\"\nimport { addressFromPublicKey } from \"../address\"\nimport type { Keypair } from \"../types\"\nimport { deriveSubstrateSecretKey } from \"./common\"\n\nexport const deriveEcdsa = (seed: Uint8Array, derivationPath: string): Keypair => {\n const secretKey = deriveSubstrateSecretKey(seed, derivationPath, \"Secp256k1HDKD\")\n\n const publicKey = getPublicKeyEcdsa(secretKey)\n\n return {\n type: \"ecdsa\",\n secretKey,\n publicKey,\n address: addressFromPublicKey(publicKey, \"ss58\"),\n }\n}\n\nexport const getPublicKeyEcdsa = (secretKey: Uint8Array) => {\n return secp256k1.getPublicKey(secretKey)\n}\n","import { Bytes, str, Tuple, u32 } from \"scale-ts\"\n\nimport { blake2b256 } from \"../hashing\"\n\n// Inspired from MIT licensed @polkadot-labs/hdkd helpers\n// https://github.com/polkadot-labs/hdkd/blob/3ef6e02827212d934b59a4e566d8aa61d3ba7b27/packages/hdkd-helpers/src/parseDerivations.ts#L1\n\nconst DERIVATION_RE = /(\\/{1,2})(\\w+)/g\n\ntype DerivationDescriptor = [type: \"hard\" | \"soft\", code: string]\n\nexport const parseSubstrateDerivations = (derivationsStr: string): DerivationDescriptor[] => {\n const derivations = [] as DerivationDescriptor[]\n if (derivations)\n for (const [_, type, code] of derivationsStr.matchAll(DERIVATION_RE)) {\n derivations.push([type === \"//\" ? \"hard\" : \"soft\", code!])\n }\n return derivations\n}\n\nexport const createChainCode = (code: string) => {\n const chainCode = new Uint8Array(32)\n chainCode.set(Number.isNaN(+code) ? str.enc(code) : u32.enc(+code))\n return chainCode\n}\n\nconst derivationCodec = /* @__PURE__ */ Tuple(str, Bytes(32), Bytes(32))\nconst createSubstrateDeriveFn = (prefix: string) => (seed: Uint8Array, chainCode: Uint8Array) =>\n blake2b256(derivationCodec.enc([prefix, seed, chainCode]))\n\nexport const deriveSubstrateSecretKey = (\n seed: Uint8Array,\n derivationPath: string,\n prefix: string\n) => {\n const derivations = parseSubstrateDerivations(derivationPath)\n const derive = createSubstrateDeriveFn(prefix)\n\n return derivations.reduce((seed, [type, chainCode]) => {\n const code = createChainCode(chainCode)\n if (type === \"soft\") throw new Error(\"Soft derivations are not supported\")\n return derive(seed, code)\n }, seed)\n}\n","import { ed25519 } from \"@noble/curves/ed25519.js\"\nimport { addressFromPublicKey } from \"../address\"\nimport type { Keypair } from \"../types\"\nimport { deriveSubstrateSecretKey } from \"./common\"\n\nexport const deriveEd25519 = (seed: Uint8Array, derivationPath: string): Keypair => {\n const secretKey = deriveSubstrateSecretKey(seed, derivationPath, \"Ed25519HDKD\")\n\n const publicKey = getPublicKeyEd25519(secretKey)\n\n return {\n type: \"ed25519\",\n secretKey,\n publicKey,\n address: addressFromPublicKey(publicKey, \"ss58\"),\n }\n}\n\nexport const getPublicKeyEd25519 = (secretKey: Uint8Array) => {\n // When importing ed25519 polkadot-js accounts via json, which we do inside of `apps/extension/src/core/domains/keyring/getSecretKeyFromPjsJson.ts`,\n // the secretKey we produce is 64 bytes in length.\n //\n // When using the ed25519 curve to derive a publicKey for this 64 bytes privateKey, we should only take the first 32 bytes:\n // - https://github.com/paulmillr/noble-curves/issues/53#issuecomment-1577362759\n // - https://github.com/paulmillr/noble-curves/discussions/33#discussioncomment-5685971\n // - https://github.com/paulmillr/noble-curves/pull/54\n // - https://github.com/paulmillr/noble-curves/issues/88\n //\n // When you compare the ed25519 publicKey of a given account produced by this function to the publicKey produced by\n // polkadot-js, you will find that they are the same as eachother.\n if (secretKey.length === 64) {\n const [privateComponent, publicComponent] = [secretKey.slice(0, 32), secretKey.slice(32)]\n const publicKey = ed25519.getPublicKey(privateComponent)\n\n // NOTE: We only accept a 64 byte secretKey when the first 32 bytes successfully produce a public key which equals the second 32 bytes of the secretKey.\n //\n // In this scenario, we assume the creator of the secretKey has given us an array of bytes which equals `[...privateKey, ...publicKey]`.\n //\n // However, if the second 32 bytes **don't** match the publicKey produced by the first 32 bytes, we no longer know what's going on.\n //\n // In that case we pass the 64 bytes directly through to `@noble/curves/ed25519`, which we expect will throw the error: `private key of length 32 expected, got 64`.\n // But if there's some 64 byte key format for ed25519 we don't know about, or one is added in the future, `@noble/curves/ed25519` can handle that for us instead of throwing.\n if (!isUint8ArrayEq(publicComponent, publicKey)) return ed25519.getPublicKey(secretKey)\n\n return publicKey\n }\n\n return ed25519.getPublicKey(secretKey)\n}\n\n/** If a is identical to b, this function returns true, otherwise it returns false */\nconst isUint8ArrayEq = (a: Uint8Array, b: Uint8Array) =>\n // biome-ignore lint/complexity/noUselessTernary: legacy\n a.length !== b.length || a.some((v, i) => v !== b[i]) ? false : true\n","import { secp256k1 } from \"@noble/curves/secp256k1.js\"\nimport { HDKey } from \"@scure/bip32\"\nimport { addressFromPublicKey } from \"../address\"\nimport type { Keypair } from \"../types\"\n\nexport const deriveEthereum = (seed: Uint8Array, derivationPath: string): Keypair => {\n const hdkey = HDKey.fromMasterSeed(seed)\n\n const childKey = hdkey.derive(derivationPath)\n if (!childKey.privateKey) throw new Error(\"Invalid derivation path\")\n const secretKey = new Uint8Array(childKey.privateKey)\n\n const publicKey = getPublicKeyEthereum(secretKey)\n\n return {\n type: \"ethereum\",\n secretKey,\n publicKey,\n address: addressFromPublicKey(publicKey, \"ethereum\"),\n }\n}\n\nexport const getPublicKeyEthereum = (secretKey: Uint8Array) => {\n // noble v2 removed `utils.normPrivateKeyToScalar`; getPublicKey accepts the raw private-key\n // bytes directly and applies the same normalization internally → byte-identical pubkey.\n return secp256k1.getPublicKey(secretKey, false)\n}\n","import { getPublicKey, HDKD, secretFromSeed } from \"@scure/sr25519\"\nimport { addressFromPublicKey } from \"../address\"\nimport type { Keypair } from \"../types\"\nimport { createChainCode, parseSubstrateDerivations } from \"./common\"\n\nexport const deriveSr25519 = (seed: Uint8Array, derivationPath: string): Keypair => {\n const derivations = parseSubstrateDerivations(derivationPath)\n\n const secretKey = derivations.reduce<Uint8Array>((secretKey, [type, chainCode]) => {\n const code = createChainCode(chainCode)\n // @scure/sr25519's HDKD changed `secretSoft`'s 3rd arg from an RNG function (micro-sr25519)\n // to an optional 32-byte `random`; `secretHard` takes only (secretKey, chainCode). Omit the\n // random arg — HDKD derivation output is deterministic regardless of it.\n return type === \"hard\" ? HDKD.secretHard(secretKey, code) : HDKD.secretSoft(secretKey, code)\n }, secretFromSeed(seed))\n\n const publicKey = getPublicKeySr25519(secretKey)\n return {\n type: \"sr25519\",\n secretKey,\n publicKey,\n address: addressFromPublicKey(publicKey, \"ss58\"),\n }\n}\n\nexport const getPublicKeySr25519 = getPublicKey\n","import { xchacha20poly1305 } from \"@noble/ciphers/chacha.js\"\nimport { concatBytes } from \"@noble/ciphers/utils.js\"\nimport { MlKem768 } from \"mlkem\"\n\n/**\n * Encrypts plaintext using ML-KEM-768 + XChaCha20-Poly1305 (KEM-AEAD).\n *\n * Wire format (subtensor pallet-shield v2):\n * key_hash (16 bytes) || kem_len (2 bytes LE) || kem_ct (variable) || nonce (24 bytes) || aead_ct (variable)\n *\n * @param keyHash 16-byte xxhash128 of the public key (caller must compute, e.g. via Twox128)\n * @param publicKey ML-KEM-768 encapsulation key bytes\n * @param plaintext Data to encrypt (typically a signed extrinsic)\n */\nexport const encryptKemAead = async (\n keyHash: Uint8Array,\n publicKey: Uint8Array,\n plaintext: Uint8Array\n) => {\n if (keyHash.length !== 16) {\n throw new Error(`Expected 16-byte keyHash, got ${keyHash.length}`)\n }\n\n const kem = new MlKem768()\n const [kemCt, sharedSecret] = await kem.encap(publicKey)\n\n if (sharedSecret.length !== 32) {\n throw new Error(`Expected 32-byte shared secret, got ${sharedSecret.length}`)\n }\n\n const nonce = crypto.getRandomValues(new Uint8Array(24))\n\n const aead = xchacha20poly1305(sharedSecret, nonce)\n const aeadCt = aead.encrypt(plaintext)\n\n const kemLen = new Uint8Array(2)\n new DataView(kemLen.buffer).setUint16(0, kemCt.length, true)\n\n return concatBytes(keyHash, kemLen, kemCt, nonce, aeadCt)\n}\n","import { detectAddressEncoding } from \"../address\"\nimport type { AccountPlatform, AddressEncoding, KeypairCurve } from \"../types\"\n\nexport const getAccountPlatformFromCurve = (curve: KeypairCurve): AccountPlatform => {\n switch (curve) {\n case \"sr25519\":\n case \"ed25519\":\n case \"ecdsa\":\n return \"polkadot\"\n case \"ethereum\":\n return \"ethereum\"\n case \"bitcoin-ecdsa\":\n case \"bitcoin-ed25519\":\n return \"bitcoin\"\n case \"solana\":\n return \"solana\"\n }\n}\n\nexport const getAccountPlatformFromEncoding = (encoding: AddressEncoding): AccountPlatform => {\n switch (encoding) {\n case \"ss58\":\n return \"polkadot\"\n case \"ethereum\":\n return \"ethereum\"\n case \"bech32m\":\n case \"bech32\":\n case \"base58check\":\n return \"bitcoin\"\n case \"base58solana\":\n return \"solana\"\n }\n}\n\nexport const getAccountPlatformFromAddress = (address: string): AccountPlatform => {\n const encoding = detectAddressEncoding(address)\n return getAccountPlatformFromEncoding(encoding)\n}\n"],"mappings":"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","names":["bs58check","import_base","import_base","blake3Hasher","CACHE","import_base","import_ed25519","import_base","mnemonicToEntropyBip39","entropyToMnemonicBip39","utf8","generateMnemonicBip39","seed","import_ed25519","import_secp256k1","secretKey","import_utils"]}
|
package/dist/index.mjs
CHANGED
|
@@ -73,8 +73,7 @@ function fromBase58Check(address) {
|
|
|
73
73
|
if (offset + 1 > buffer.length) {
|
|
74
74
|
throw new Error("Offset is outside the bounds of Uint8Array");
|
|
75
75
|
}
|
|
76
|
-
|
|
77
|
-
return buf.readUInt8(offset);
|
|
76
|
+
return buffer[offset];
|
|
78
77
|
}
|
|
79
78
|
const version = readUInt8(payload, 0);
|
|
80
79
|
const hash = payload.slice(1);
|
|
@@ -82,8 +81,8 @@ function fromBase58Check(address) {
|
|
|
82
81
|
}
|
|
83
82
|
|
|
84
83
|
// src/address/encoding/ethereum.ts
|
|
85
|
-
import { keccak_256 } from "@noble/hashes/sha3";
|
|
86
|
-
import { bytesToHex } from "@noble/hashes/utils";
|
|
84
|
+
import { keccak_256 } from "@noble/hashes/sha3.js";
|
|
85
|
+
import { bytesToHex } from "@noble/hashes/utils.js";
|
|
87
86
|
var encodeAddressEthereum = (publicKey) => {
|
|
88
87
|
if (publicKey[0] !== 4) throw new Error("Invalid public key format");
|
|
89
88
|
const publicKeyWithoutPrefix = publicKey.slice(1);
|
|
@@ -122,8 +121,8 @@ function isSolanaAddress(address) {
|
|
|
122
121
|
import { base58 as base583 } from "@scure/base";
|
|
123
122
|
|
|
124
123
|
// src/hashing/index.ts
|
|
125
|
-
import { blake2b } from "@noble/hashes/
|
|
126
|
-
import { blake3 as blake3Hasher } from "@noble/hashes/blake3";
|
|
124
|
+
import { blake2b } from "@noble/hashes/blake2.js";
|
|
125
|
+
import { blake3 as blake3Hasher } from "@noble/hashes/blake3.js";
|
|
127
126
|
import { base58 as base582 } from "@scure/base";
|
|
128
127
|
var blake3 = blake3Hasher;
|
|
129
128
|
var blake2b256 = (msg) => blake2b(msg, { dkLen: 32 });
|
|
@@ -269,9 +268,9 @@ var isAddressValid = (address) => {
|
|
|
269
268
|
};
|
|
270
269
|
|
|
271
270
|
// src/derivation/deriveSolana.ts
|
|
272
|
-
import { ed25519 } from "@noble/curves/ed25519";
|
|
273
|
-
import { hmac } from "@noble/hashes/hmac";
|
|
274
|
-
import { sha512 } from "@noble/hashes/
|
|
271
|
+
import { ed25519 } from "@noble/curves/ed25519.js";
|
|
272
|
+
import { hmac } from "@noble/hashes/hmac.js";
|
|
273
|
+
import { sha512 } from "@noble/hashes/sha2.js";
|
|
275
274
|
var parseDerivationPath = (path) => {
|
|
276
275
|
if (!path.startsWith("m/")) throw new Error("Path must start with 'm/'");
|
|
277
276
|
return path.split("/").slice(1).map((p) => {
|
|
@@ -322,15 +321,21 @@ import {
|
|
|
322
321
|
mnemonicToEntropy as mnemonicToEntropyBip39,
|
|
323
322
|
validateMnemonic
|
|
324
323
|
} from "@scure/bip39";
|
|
325
|
-
import { wordlist } from "@scure/bip39/wordlists/english";
|
|
324
|
+
import { wordlist } from "@scure/bip39/wordlists/english.js";
|
|
326
325
|
|
|
327
326
|
// src/utils/exports.ts
|
|
328
|
-
import { ed25519 as ed255192 } from "@noble/curves/ed25519";
|
|
327
|
+
import { ed25519 as ed255192 } from "@noble/curves/ed25519.js";
|
|
329
328
|
import { base58 as base584, base64, hex, utf8 } from "@scure/base";
|
|
330
329
|
|
|
331
330
|
// src/utils/pbkdf2.ts
|
|
332
331
|
var pbkdf2 = async (hash, entropy, salt, iterations, outputLenBytes) => {
|
|
333
|
-
const keyMaterial = await crypto.subtle.importKey(
|
|
332
|
+
const keyMaterial = await crypto.subtle.importKey(
|
|
333
|
+
"raw",
|
|
334
|
+
entropy,
|
|
335
|
+
"PBKDF2",
|
|
336
|
+
false,
|
|
337
|
+
["deriveBits"]
|
|
338
|
+
);
|
|
334
339
|
const derivedBits = await crypto.subtle.deriveBits(
|
|
335
340
|
{ name: "PBKDF2", salt, iterations, hash },
|
|
336
341
|
keyMaterial,
|
|
@@ -427,7 +432,7 @@ var getDevSeed = async (curve) => {
|
|
|
427
432
|
};
|
|
428
433
|
|
|
429
434
|
// src/derivation/deriveEcdsa.ts
|
|
430
|
-
import { secp256k1 } from "@noble/curves/secp256k1";
|
|
435
|
+
import { secp256k1 } from "@noble/curves/secp256k1.js";
|
|
431
436
|
|
|
432
437
|
// src/derivation/common.ts
|
|
433
438
|
import { Bytes, str, Tuple, u32 } from "scale-ts";
|
|
@@ -473,7 +478,7 @@ var getPublicKeyEcdsa = (secretKey) => {
|
|
|
473
478
|
};
|
|
474
479
|
|
|
475
480
|
// src/derivation/deriveEd25519.ts
|
|
476
|
-
import { ed25519 as ed255193 } from "@noble/curves/ed25519";
|
|
481
|
+
import { ed25519 as ed255193 } from "@noble/curves/ed25519.js";
|
|
477
482
|
var deriveEd25519 = (seed, derivationPath) => {
|
|
478
483
|
const secretKey = deriveSubstrateSecretKey(seed, derivationPath, "Ed25519HDKD");
|
|
479
484
|
const publicKey = getPublicKeyEd25519(secretKey);
|
|
@@ -499,7 +504,7 @@ var isUint8ArrayEq = (a, b) => (
|
|
|
499
504
|
);
|
|
500
505
|
|
|
501
506
|
// src/derivation/deriveEthereum.ts
|
|
502
|
-
import { secp256k1 as secp256k12 } from "@noble/curves/secp256k1";
|
|
507
|
+
import { secp256k1 as secp256k12 } from "@noble/curves/secp256k1.js";
|
|
503
508
|
import { HDKey } from "@scure/bip32";
|
|
504
509
|
var deriveEthereum = (seed, derivationPath) => {
|
|
505
510
|
const hdkey = HDKey.fromMasterSeed(seed);
|
|
@@ -515,19 +520,16 @@ var deriveEthereum = (seed, derivationPath) => {
|
|
|
515
520
|
};
|
|
516
521
|
};
|
|
517
522
|
var getPublicKeyEthereum = (secretKey) => {
|
|
518
|
-
|
|
519
|
-
return secp256k12.getPublicKey(scalar, false);
|
|
523
|
+
return secp256k12.getPublicKey(secretKey, false);
|
|
520
524
|
};
|
|
521
525
|
|
|
522
526
|
// src/derivation/deriveSr25519.ts
|
|
523
|
-
import {
|
|
524
|
-
import { getPublicKey, HDKD, secretFromSeed } from "micro-sr25519";
|
|
527
|
+
import { getPublicKey, HDKD, secretFromSeed } from "@scure/sr25519";
|
|
525
528
|
var deriveSr25519 = (seed, derivationPath) => {
|
|
526
529
|
const derivations = parseSubstrateDerivations(derivationPath);
|
|
527
530
|
const secretKey = derivations.reduce((secretKey2, [type, chainCode]) => {
|
|
528
|
-
const deriveFn = type === "hard" ? HDKD.secretHard : HDKD.secretSoft;
|
|
529
531
|
const code = createChainCode(chainCode);
|
|
530
|
-
return
|
|
532
|
+
return type === "hard" ? HDKD.secretHard(secretKey2, code) : HDKD.secretSoft(secretKey2, code);
|
|
531
533
|
}, secretFromSeed(seed));
|
|
532
534
|
const publicKey = getPublicKeySr25519(secretKey);
|
|
533
535
|
return {
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/address/encoding/addressEncodingFromCurve.ts","../src/address/encoding/bitcoin.ts","../src/address/encoding/ethereum.ts","../src/address/encoding/solana.ts","../src/address/encoding/ss58.ts","../src/hashing/index.ts","../src/address/encoding/detectAddressEncoding.ts","../src/address/addressFromPublicKey.ts","../src/address/normalizeAddress.ts","../src/address/encodeAnyAddress.ts","../src/address/isAddressEqual.ts","../src/address/isAddressValid.ts","../src/derivation/deriveSolana.ts","../src/derivation/utils.ts","../src/mnemonic/index.ts","../src/utils/exports.ts","../src/utils/pbkdf2.ts","../src/derivation/deriveEcdsa.ts","../src/derivation/common.ts","../src/derivation/deriveEd25519.ts","../src/derivation/deriveEthereum.ts","../src/derivation/deriveSr25519.ts","../src/encryption/encryptKemAead.ts","../src/platform/index.ts"],"sourcesContent":["import type { AddressEncoding, KeypairCurve } from \"../../types\"\n\n/** NOTE: Try not to use this too much, it will need to change */\nexport const addressEncodingFromCurve = (curve: KeypairCurve): AddressEncoding => {\n switch (curve) {\n case \"sr25519\":\n case \"ed25519\":\n case \"ecdsa\":\n return \"ss58\"\n case \"bitcoin-ecdsa\":\n case \"bitcoin-ed25519\":\n // NOTE: Bitcoin has multiple address formats, so this isn't necessarily correct\n // The format MAY be bech32m, but it might also be bech32 or base58check.\n // bech32m is the most recent format.\n return \"bech32m\"\n case \"ethereum\":\n return \"ethereum\"\n case \"solana\":\n return \"base58solana\"\n }\n}\n","import { bech32, bech32m } from \"bech32\"\nimport bs58check from \"bs58check\"\n\nexport const isBitcoinAddress = (address: string) =>\n isBech32mAddress(address) || isBech32Address(address) || isBase58CheckAddress(address)\n\nexport function isBech32mAddress(address: string) {\n try {\n fromBech32m(address)\n } catch {\n return false\n }\n return true\n}\n\nexport function isBech32Address(address: string) {\n try {\n fromBech32(address)\n } catch {\n return false\n }\n return true\n}\n\nexport function isBase58CheckAddress(address: string) {\n try {\n fromBase58Check(address)\n } catch {\n return false\n }\n return true\n}\n\n/**\n * Converts a Bech32m encoded address to its corresponding data representation.\n * @param address - The Bech32m encoded address.\n * @returns An object containing the version, prefix, and data of the address.\n * @throws {TypeError} If the address uses the wrong encoding.\n */\nexport function fromBech32m(address: string) {\n const result = bech32m.decode(address)\n const version = result.words[0]\n if (version === 0) throw new TypeError(`${address} uses wrong encoding`)\n const data = bech32m.fromWords(result.words.slice(1))\n return {\n version,\n prefix: result.prefix,\n data: Uint8Array.from(data),\n }\n}\n\n/**\n * Converts a Bech32 encoded address to its corresponding data representation.\n * @param address - The Bech32 encoded address.\n * @returns An object containing the version, prefix, and data of the address.\n * @throws {TypeError} If the address uses the wrong encoding.\n */\nexport function fromBech32(address: string) {\n const result = bech32.decode(address)\n const version = result.words[0]\n if (version !== 0) throw new TypeError(`${address} uses wrong encoding`)\n const data = bech32.fromWords(result.words.slice(1))\n return {\n version,\n prefix: result.prefix,\n data: Uint8Array.from(data),\n }\n}\n\n/**\n * Decodes a base58check encoded Bitcoin address and returns the version and hash.\n *\n * @param address - The base58check encoded Bitcoin address to decode.\n * @returns An object containing the version and hash of the decoded address.\n * @throws {TypeError} If the address is too short or too long.\n */\nexport function fromBase58Check(address: string) {\n const payload = bs58check.decode(address)\n if (payload.length < 21) throw new TypeError(`${address} is too short`)\n if (payload.length > 21) throw new TypeError(`${address} is too long`)\n function readUInt8(buffer: Uint8Array, offset: number) {\n if (offset + 1 > buffer.length) {\n throw new Error(\"Offset is outside the bounds of Uint8Array\")\n }\n const buf = Buffer.from(buffer)\n return buf.readUInt8(offset)\n }\n const version = readUInt8(payload, 0)\n const hash = payload.slice(1)\n return { version, hash }\n}\n","import { keccak_256 } from \"@noble/hashes/sha3\"\nimport { bytesToHex } from \"@noble/hashes/utils\"\n\n/**\n * Encodes a public key using H160 encoding with Ethereum checksum.\n */\nexport const encodeAddressEthereum = (publicKey: Uint8Array): `0x${string}` => {\n // Ensure the public key is in uncompressed format (starts with 0x04)\n if (publicKey[0] !== 0x04) throw new Error(\"Invalid public key format\")\n\n // Remove the prefix (0x04)\n const publicKeyWithoutPrefix = publicKey.slice(1)\n\n // Apply Keccak-256 hashing to the public key\n const hash = keccak_256(publicKeyWithoutPrefix)\n\n // Take the last 20 bytes of the hash to get the Ethereum address\n const address = hash.slice(-20)\n\n // Apply checksum\n return checksumEthereumAddress(`0x${bytesToHex(address)}`)\n}\n\nexport const checksumEthereumAddress = (address: string): `0x${string}` => {\n const addr = address.toLowerCase().replace(/^0x/, \"\")\n const hash = keccak_256(new TextEncoder().encode(addr))\n const hashHex = bytesToHex(hash)\n\n const checksum = addr\n .split(\"\")\n .map((char, i) => (parseInt(hashHex[i], 16) >= 8 ? char.toUpperCase() : char))\n .join(\"\")\n\n return `0x${checksum}`\n}\n\nexport function isEthereumAddress(address: string): address is `0x${string}` {\n return /^0x[a-fA-F0-9]{40}$/.test(address)\n}\n\n// Note: public key cannot be retrieved from an address, because address is hashed from only the last 20 bytes of the pk\n","import { base58 } from \"@scure/base\"\n\nexport const encodeAddressSolana = (publicKey: Uint8Array): string => {\n if (publicKey.length !== 32)\n throw new Error(\"Public key must be 32 bytes long for Solana base58 encoding\")\n return base58.encode(publicKey)\n}\nexport function isSolanaAddress(address: string): boolean {\n try {\n const bytes = base58.decode(address)\n return bytes.length === 32\n } catch {\n return false\n }\n}\n","import { base58 } from \"@scure/base\"\n\nimport { blake2b256, blake2b512 } from \"../../hashing\"\n\n// Inspired from MIT licensed @polkadot-labs/hdkd-helpers\n// https://github.com/polkadot-labs/hdkd/blob/3ef6e02827212d934b59a4e566d8aa61d3ba7b27/packages/hdkd-helpers/src/accountId.ts#L3\n\nconst VALID_PUBLICKEY_LENGTHS = [32, 33]\nconst accountId = (publicKey: Uint8Array) => {\n if (!VALID_PUBLICKEY_LENGTHS.includes(publicKey.length)) throw new Error(\"Invalid publicKey\")\n return publicKey.length === 33 ? blake2b256(publicKey) : publicKey\n}\n\nconst SS58PRE = /* @__PURE__ */ new TextEncoder().encode(\"SS58PRE\")\nconst CHECKSUM_LENGTH = 2\n\nconst VALID_PAYLOAD_LENGTHS = [32, 33]\nconst ss58Encode = (payload: Uint8Array, prefix = 42) => {\n if (!VALID_PAYLOAD_LENGTHS.includes(payload.length)) throw new Error(\"Invalid payload\")\n\n const prefixBytes =\n prefix < 64\n ? Uint8Array.of(prefix)\n : Uint8Array.of(\n ((prefix & 0b0000_0000_1111_1100) >> 2) | 0b0100_0000,\n (prefix >> 8) | ((prefix & 0b0000_0000_0000_0011) << 6)\n )\n const checksum = blake2b512(Uint8Array.of(...SS58PRE, ...prefixBytes, ...payload)).subarray(\n 0,\n CHECKSUM_LENGTH\n )\n return base58.encode(Uint8Array.of(...prefixBytes, ...payload, ...checksum))\n}\n\nconst VALID_ADDRESS_LENGTHS = [35, 36, 37]\nexport const decodeSs58Address = (addressStr: string): [publicKey: Uint8Array, prefix: number] => {\n const address = base58.decode(addressStr)\n if (!VALID_ADDRESS_LENGTHS.includes(address.length)) throw new Error(\"Invalid address length\")\n\n const addressChecksum = address.subarray(address.length - CHECKSUM_LENGTH)\n const checksum = blake2b512(\n Uint8Array.of(...SS58PRE, ...address.subarray(0, address.length - CHECKSUM_LENGTH))\n ).subarray(0, CHECKSUM_LENGTH)\n if (addressChecksum[0] !== checksum[0] || addressChecksum[1] !== checksum[1])\n throw new Error(\"Invalid checksum\")\n\n const prefixLength = address[0]! & 0b0100_0000 ? 2 : 1\n const prefix: number =\n prefixLength === 1\n ? address[0]!\n : ((address[0]! & 0b0011_1111) << 2) | (address[1]! >> 6) | ((address[1]! & 0b0011_1111) << 8)\n const publicKey = address.slice(prefixLength, address.length - CHECKSUM_LENGTH)\n return [publicKey, prefix]\n}\n\nexport const encodeAddressSs58 = (publicKey: Uint8Array | string, prefix = 42) => {\n if (typeof publicKey === \"string\") [publicKey] = decodeSs58Address(publicKey)\n return ss58Encode(accountId(publicKey), prefix)\n}\n\nexport function isSs58Address(address: string): boolean {\n try {\n decodeSs58Address(address)\n return true\n } catch {\n return false\n }\n}\n","import { blake2b } from \"@noble/hashes/blake2b\"\nimport { blake3 as blake3Hasher } from \"@noble/hashes/blake3\"\nimport { base58 } from \"@scure/base\"\n\nexport const blake3 = blake3Hasher\n\nexport const blake2b256 = (msg: Uint8Array) => blake2b(msg, { dkLen: 32 })\nexport const blake2b512 = (msg: Uint8Array) => blake2b(msg, { dkLen: 64 })\n\nexport const getSafeHash = (bytes: Uint8Array) => {\n // cryptographically secure one way hash\n // outputs 44 characters without special characters\n return base58.encode(blake3Hasher(bytes))\n}\n","import type { AddressEncoding } from \"../../types\"\nimport { isBase58CheckAddress, isBech32Address, isBech32mAddress } from \"./bitcoin\"\nimport { isEthereumAddress } from \"./ethereum\"\nimport { isSolanaAddress } from \"./solana\"\nimport { isSs58Address } from \"./ss58\"\n\nconst CACHE = new Map<string, AddressEncoding>()\n\nconst detectAddressEncodingInner = (address: string): AddressEncoding => {\n if (isEthereumAddress(address)) return \"ethereum\"\n if (isSs58Address(address)) return \"ss58\"\n if (isSolanaAddress(address)) return \"base58solana\"\n if (isBech32mAddress(address)) return \"bech32m\"\n if (isBech32Address(address)) return \"bech32\"\n if (isBase58CheckAddress(address)) return \"base58check\"\n\n throw new Error(`Unknown address encoding`)\n}\nexport const detectAddressEncoding = (address: string): AddressEncoding => {\n if (!CACHE.has(address)) CACHE.set(address, detectAddressEncodingInner(address))\n return CACHE.get(address)!\n}\n","import type { AddressEncoding } from \"../types\"\nimport { encodeAddressEthereum, encodeAddressSolana, encodeAddressSs58 } from \"./encoding\"\n\nexport type EncodeAddressOptions = {\n ss58Prefix?: number\n}\n\nexport const addressFromPublicKey = (\n publicKey: Uint8Array,\n encoding: AddressEncoding,\n options?: EncodeAddressOptions\n): string => {\n switch (encoding) {\n case \"ss58\":\n return encodeAddressSs58(publicKey, options?.ss58Prefix)\n case \"ethereum\":\n return encodeAddressEthereum(publicKey)\n case \"base58solana\":\n return encodeAddressSolana(publicKey)\n case \"bech32m\":\n case \"bech32\":\n case \"base58check\":\n throw new Error(\"addressFromPublicKey is not implemented for Bitcoin\")\n }\n}\n","import {\n checksumEthereumAddress,\n decodeSs58Address,\n detectAddressEncoding,\n encodeAddressSs58,\n} from \"./encoding\"\n\nconst CACHE = new Map<string, string>()\n\n// Normalize an address in a way that it can be compared to other addresses that have also been normalized\nexport const normalizeAddress = (address: string) => {\n try {\n if (!CACHE.has(address)) CACHE.set(address, normalizeAnyAddress(address))\n return CACHE.get(address)!\n } catch (cause) {\n throw new Error(`Unable to normalize address: ${address}`, { cause })\n }\n}\n\nconst normalizeAnyAddress = (address: string) => {\n switch (detectAddressEncoding(address)) {\n case \"ethereum\":\n return checksumEthereumAddress(address)\n case \"bech32m\":\n case \"bech32\":\n case \"base58check\":\n case \"base58solana\":\n return address\n case \"ss58\": {\n const [pk] = decodeSs58Address(address)\n return encodeAddressSs58(pk, 42)\n }\n }\n}\n","import { decodeSs58Address, detectAddressEncoding, encodeAddressSs58 } from \"./encoding\"\nimport { normalizeAddress } from \"./normalizeAddress\"\n\ntype EncodeAddressOptions = {\n ss58Format?: number | undefined\n}\n\nexport const encodeAnyAddress = (address: string, options?: EncodeAddressOptions) => {\n // this leverages cache\n const encoding = detectAddressEncoding(address)\n\n // this does NOT leverage cache\n if (encoding === \"ss58\" && options?.ss58Format !== undefined) {\n const [publicKey] = decodeSs58Address(address)\n return encodeAddressSs58(publicKey, options?.ss58Format ?? 42)\n }\n\n // this leverages cache\n return normalizeAddress(address)\n}\n","import { normalizeAddress } from \"./normalizeAddress\"\n\nexport const isAddressEqual = (address1: string, address2: string) => {\n try {\n return normalizeAddress(address1) === normalizeAddress(address2)\n } catch {\n // if normalization fails, assume the addresses are not equal\n return false\n }\n}\n","import { detectAddressEncoding } from \"./encoding\"\n\nexport const isAddressValid = (address: string): boolean => {\n try {\n detectAddressEncoding(address)\n return true\n } catch {\n return false\n }\n}\n","import { ed25519 } from \"@noble/curves/ed25519\"\nimport { hmac } from \"@noble/hashes/hmac\"\nimport { sha512 } from \"@noble/hashes/sha512\"\nimport { addressFromPublicKey } from \"../address\"\nimport type { Keypair } from \"../types\"\n\n// Convert a path like \"m/44'/501'/0'/0'\" to an array of indexes\nconst parseDerivationPath = (path: string): number[] => {\n if (!path.startsWith(\"m/\")) throw new Error(\"Path must start with 'm/'\")\n return path\n .split(\"/\")\n .slice(1) // Remove 'm'\n .map((p) => {\n if (!p.endsWith(\"'\")) throw new Error(\"Only hardened derivation is supported\")\n return parseInt(p.slice(0, -1), 10) + 0x80000000 // Convert to hardened index\n })\n}\n\nexport const deriveSolana = (seed: Uint8Array, derivationPath: string): Keypair => {\n // Generate master private key using SLIP-0010 (HMAC-SHA512 with \"ed25519 seed\")\n let I = hmac(sha512, new TextEncoder().encode(\"ed25519 seed\"), seed)\n let secretKey = I.slice(0, 32)\n let chainCode = I.slice(32)\n\n // Iterate over the derivation path and apply hardened key derivation\n for (const index of parseDerivationPath(derivationPath)) {\n // HMAC-SHA512(Key = chainCode, Data = 0x00 || privateKey || index)\n const data = new Uint8Array(1 + secretKey.length + 4)\n data.set([0x00], 0)\n data.set(secretKey, 1)\n data.set(\n new Uint8Array([\n (index >> 24) & 0xff,\n (index >> 16) & 0xff,\n (index >> 8) & 0xff,\n index & 0xff,\n ]),\n 1 + secretKey.length\n )\n\n I = hmac(sha512, chainCode, data)\n secretKey = I.slice(0, 32)\n chainCode = I.slice(32)\n }\n\n const publicKey = getPublicKeySolana(secretKey)\n\n return {\n type: \"solana\",\n secretKey,\n publicKey,\n address: addressFromPublicKey(publicKey, \"base58solana\"),\n }\n}\n\nexport const getPublicKeySolana = (secretKey: Uint8Array) => {\n return ed25519.getPublicKey(secretKey)\n}\n","import { base58, hex } from \"@scure/base\"\n\nimport { entropyToSeed, getDevSeed, mnemonicToEntropy } from \"../mnemonic\"\nimport type { AccountPlatform, KeypairCurve } from \"../types\"\nimport { deriveEcdsa, getPublicKeyEcdsa } from \"./deriveEcdsa\"\nimport { deriveEd25519, getPublicKeyEd25519 } from \"./deriveEd25519\"\nimport { deriveEthereum, getPublicKeyEthereum } from \"./deriveEthereum\"\nimport { deriveSolana, getPublicKeySolana } from \"./deriveSolana\"\nimport { deriveSr25519, getPublicKeySr25519 } from \"./deriveSr25519\"\n\nexport const deriveKeypair = (seed: Uint8Array, derivationPath: string, curve: KeypairCurve) => {\n switch (curve) {\n case \"sr25519\":\n return deriveSr25519(seed, derivationPath)\n case \"ed25519\":\n return deriveEd25519(seed, derivationPath)\n case \"ecdsa\":\n return deriveEcdsa(seed, derivationPath)\n case \"bitcoin-ecdsa\":\n case \"bitcoin-ed25519\":\n throw new Error(\"deriveKeypair is not implemented for Bitcoin\")\n case \"ethereum\":\n return deriveEthereum(seed, derivationPath)\n case \"solana\":\n return deriveSolana(seed, derivationPath)\n }\n}\n\nexport const getPublicKeyFromSecret = (secretKey: Uint8Array, curve: KeypairCurve): Uint8Array => {\n switch (curve) {\n case \"ecdsa\":\n return getPublicKeyEcdsa(secretKey)\n case \"ethereum\":\n return getPublicKeyEthereum(secretKey)\n case \"sr25519\":\n return getPublicKeySr25519(secretKey)\n case \"ed25519\":\n return getPublicKeyEd25519(secretKey)\n case \"bitcoin-ecdsa\":\n case \"bitcoin-ed25519\":\n throw new Error(\"getPublicKeyFromSecret is not implemented for Bitcoin\")\n case \"solana\":\n return getPublicKeySolana(secretKey)\n }\n}\n\nexport const addressFromMnemonic = async (\n mnemonic: string,\n derivationPath: string,\n curve: KeypairCurve\n) => {\n const entropy = mnemonicToEntropy(mnemonic)\n const seed = await entropyToSeed(entropy, curve)\n const { address } = deriveKeypair(seed, derivationPath, curve)\n return address\n}\n\nexport const removeHexPrefix = (secretKey: string) => {\n if (secretKey.startsWith(\"0x\")) return secretKey.slice(2)\n return secretKey\n}\n\nexport const parseSecretKey = (secretKey: string, platform: AccountPlatform) => {\n switch (platform) {\n case \"ethereum\": {\n const privateKey = removeHexPrefix(secretKey)\n return hex.decode(privateKey)\n }\n case \"solana\": {\n const bytes = secretKey.startsWith(\"[\")\n ? // JSON bytes array (ex: solflare)\n Uint8Array.from(JSON.parse(secretKey))\n : // base58 encoded string (ex: phantom)\n base58.decode(secretKey)\n\n if (bytes.length === 64) {\n const privateKey = bytes.slice(0, 32)\n const publicKey = bytes.slice(32, 64)\n const computedPublicKey = getPublicKeySolana(privateKey)\n if (!publicKey.every((b, i) => b === computedPublicKey[i]))\n throw new Error(\"Invalid Solana secret key: public key does not match\")\n return privateKey\n } else if (bytes.length === 32) return bytes\n\n throw new Error(\"Invalid Solana secret key length\")\n }\n\n default:\n throw new Error(\"Not implemented\")\n }\n}\n\n// @dev: didn't find a reliable source of information on which characters are valid => assume it s valid if a keypair can be generated from it\nexport const isValidDerivationPath = async (derivationPath: string, curve: KeypairCurve) => {\n try {\n deriveKeypair(await getDevSeed(curve), derivationPath, curve)\n return true\n } catch {\n return false\n }\n}\n","import {\n entropyToMnemonic as entropyToMnemonicBip39,\n generateMnemonic as generateMnemonicBip39,\n mnemonicToEntropy as mnemonicToEntropyBip39,\n validateMnemonic,\n} from \"@scure/bip39\"\nimport { wordlist } from \"@scure/bip39/wordlists/english\"\n\nimport type { KeypairCurve } from \"../types\"\nimport { pbkdf2 } from \"../utils\"\n\nexport const mnemonicToEntropy = (mnemonic: string) => {\n return mnemonicToEntropyBip39(mnemonic, wordlist)\n}\n\nexport const entropyToMnemonic = (entropy: Uint8Array) => {\n return entropyToMnemonicBip39(entropy, wordlist)\n}\n\nconst entropyToSeedSubstrate = async (entropy: Uint8Array, password?: string) =>\n await pbkdf2(\n \"SHA-512\",\n entropy,\n mnemonicPasswordToSalt(password ?? \"\"),\n 2048, // 2048 iterations\n 32 // 32 bytes (32 * 8 == 256 bits)\n )\n\nconst entropyToSeedClassic = async (entropy: Uint8Array, password?: string) =>\n await pbkdf2(\n \"SHA-512\",\n encodeNormalized(entropyToMnemonic(entropy)),\n mnemonicPasswordToSalt(password ?? \"\"),\n 2048, // 2048 iterations\n 64 // 64 bytes (64 * 8 == 512 bits)\n )\n\nconst mnemonicPasswordToSalt = (password: string) => encodeNormalized(`mnemonic${password}`)\n\n/** Normalizes a UTF-8 string using `NFKD` form, then encodes it into bytes */\nconst encodeNormalized = (utf8: string): Uint8Array =>\n new TextEncoder().encode(utf8.normalize(\"NFKD\"))\n\ntype SeedDerivationType = \"substrate\" | \"classic\"\n\nconst getSeedDerivationType = (curve: KeypairCurve): SeedDerivationType => {\n switch (curve) {\n case \"sr25519\":\n case \"ed25519\":\n case \"ecdsa\":\n return \"substrate\"\n case \"ethereum\":\n case \"solana\":\n return \"classic\"\n case \"bitcoin-ecdsa\":\n case \"bitcoin-ed25519\":\n throw new Error(\"seed derivation is not implemented for Bitcoin\")\n }\n}\n\n// when deriving keys from a mnemonic, we usually dont want a password here.\n// a password provided here would be used as a 25th mnemonic word.\nexport const entropyToSeed = async (\n entropy: Uint8Array,\n curve: KeypairCurve,\n password?: string\n) => {\n const type = getSeedDerivationType(curve)\n\n switch (type) {\n case \"classic\":\n return await entropyToSeedClassic(entropy, password)\n case \"substrate\":\n return await entropyToSeedSubstrate(entropy, password)\n }\n}\n\nexport const isValidMnemonic = (mnemonic: string) => {\n return validateMnemonic(mnemonic, wordlist)\n}\n\nexport const generateMnemonic = (words: 12 | 24) => {\n switch (words) {\n case 12:\n return generateMnemonicBip39(wordlist, 128)\n case 24:\n return generateMnemonicBip39(wordlist, 256)\n }\n}\n\n// well-known mnemonic used by polkadot.js, can be checked on polkadot wiki\nexport const DEV_MNEMONIC_POLKADOT =\n \"bottom drive obey lake curtain smoke basket hold race lonely fit walk\"\n\n// well-known phrase used by hardhat and anvil\nexport const DEV_MNEMONIC_ETHEREUM = \"test test test test test test test test test test test junk\"\n\n// keep dev seeds in cache as we will reuse them to validate multiple derivation paths\nconst DEV_SEED_CACHE = new Map<SeedDerivationType, Uint8Array>()\n\nexport const getDevSeed = async (curve: KeypairCurve) => {\n const type = getSeedDerivationType(curve)\n\n if (!DEV_SEED_CACHE.has(type)) {\n switch (type) {\n case \"classic\": {\n const entropy = mnemonicToEntropy(DEV_MNEMONIC_ETHEREUM)\n const seed = await entropyToSeedClassic(entropy) // 80ms\n DEV_SEED_CACHE.set(type, seed)\n break\n }\n case \"substrate\": {\n const entropy = mnemonicToEntropy(DEV_MNEMONIC_POLKADOT)\n const seed = await entropyToSeedSubstrate(entropy) // 80ms\n DEV_SEED_CACHE.set(type, seed)\n break\n }\n default:\n throw new Error(\"Unsupported derivation type\")\n }\n }\n\n return DEV_SEED_CACHE.get(type)!\n}\n","export { ed25519 } from \"@noble/curves/ed25519\"\nexport { base58, base64, hex, utf8 } from \"@scure/base\"\n","export const pbkdf2 = async (\n hash: \"SHA-256\" | \"SHA-512\",\n entropy: Uint8Array,\n salt: Uint8Array,\n iterations: number,\n outputLenBytes: number\n) => {\n // NOTE: react-native-quick-crypto (our `global.crypto` polyfill on Talisman Mobile) doesn't support `crypto.subtle.deriveKey`.\n // But, we can work around this by using `crypto.subtle.deriveBits` and `crypto.subtle.importKey`, which when used together\n // can provide the same functionality as `crypto.subtle.deriveKey`.\n const keyMaterial = await crypto.subtle.importKey(\"raw\", entropy, \"PBKDF2\", false, [\"deriveBits\"])\n const derivedBits = await crypto.subtle.deriveBits(\n { name: \"PBKDF2\", salt, iterations, hash },\n keyMaterial,\n outputLenBytes * 8\n )\n return new Uint8Array(derivedBits)\n}\n","import { secp256k1 } from \"@noble/curves/secp256k1\"\nimport { addressFromPublicKey } from \"../address\"\nimport type { Keypair } from \"../types\"\nimport { deriveSubstrateSecretKey } from \"./common\"\n\nexport const deriveEcdsa = (seed: Uint8Array, derivationPath: string): Keypair => {\n const secretKey = deriveSubstrateSecretKey(seed, derivationPath, \"Secp256k1HDKD\")\n\n const publicKey = getPublicKeyEcdsa(secretKey)\n\n return {\n type: \"ecdsa\",\n secretKey,\n publicKey,\n address: addressFromPublicKey(publicKey, \"ss58\"),\n }\n}\n\nexport const getPublicKeyEcdsa = (secretKey: Uint8Array) => {\n return secp256k1.getPublicKey(secretKey)\n}\n","import { Bytes, str, Tuple, u32 } from \"scale-ts\"\n\nimport { blake2b256 } from \"../hashing\"\n\n// Inspired from MIT licensed @polkadot-labs/hdkd helpers\n// https://github.com/polkadot-labs/hdkd/blob/3ef6e02827212d934b59a4e566d8aa61d3ba7b27/packages/hdkd-helpers/src/parseDerivations.ts#L1\n\nconst DERIVATION_RE = /(\\/{1,2})(\\w+)/g\n\ntype DerivationDescriptor = [type: \"hard\" | \"soft\", code: string]\n\nexport const parseSubstrateDerivations = (derivationsStr: string): DerivationDescriptor[] => {\n const derivations = [] as DerivationDescriptor[]\n if (derivations)\n for (const [_, type, code] of derivationsStr.matchAll(DERIVATION_RE)) {\n derivations.push([type === \"//\" ? \"hard\" : \"soft\", code!])\n }\n return derivations\n}\n\nexport const createChainCode = (code: string) => {\n const chainCode = new Uint8Array(32)\n chainCode.set(Number.isNaN(+code) ? str.enc(code) : u32.enc(+code))\n return chainCode\n}\n\nconst derivationCodec = /* @__PURE__ */ Tuple(str, Bytes(32), Bytes(32))\nconst createSubstrateDeriveFn = (prefix: string) => (seed: Uint8Array, chainCode: Uint8Array) =>\n blake2b256(derivationCodec.enc([prefix, seed, chainCode]))\n\nexport const deriveSubstrateSecretKey = (\n seed: Uint8Array,\n derivationPath: string,\n prefix: string\n) => {\n const derivations = parseSubstrateDerivations(derivationPath)\n const derive = createSubstrateDeriveFn(prefix)\n\n return derivations.reduce((seed, [type, chainCode]) => {\n const code = createChainCode(chainCode)\n if (type === \"soft\") throw new Error(\"Soft derivations are not supported\")\n return derive(seed, code)\n }, seed)\n}\n","import { ed25519 } from \"@noble/curves/ed25519\"\nimport { addressFromPublicKey } from \"../address\"\nimport type { Keypair } from \"../types\"\nimport { deriveSubstrateSecretKey } from \"./common\"\n\nexport const deriveEd25519 = (seed: Uint8Array, derivationPath: string): Keypair => {\n const secretKey = deriveSubstrateSecretKey(seed, derivationPath, \"Ed25519HDKD\")\n\n const publicKey = getPublicKeyEd25519(secretKey)\n\n return {\n type: \"ed25519\",\n secretKey,\n publicKey,\n address: addressFromPublicKey(publicKey, \"ss58\"),\n }\n}\n\nexport const getPublicKeyEd25519 = (secretKey: Uint8Array) => {\n // When importing ed25519 polkadot-js accounts via json, which we do inside of `apps/extension/src/core/domains/keyring/getSecretKeyFromPjsJson.ts`,\n // the secretKey we produce is 64 bytes in length.\n //\n // When using the ed25519 curve to derive a publicKey for this 64 bytes privateKey, we should only take the first 32 bytes:\n // - https://github.com/paulmillr/noble-curves/issues/53#issuecomment-1577362759\n // - https://github.com/paulmillr/noble-curves/discussions/33#discussioncomment-5685971\n // - https://github.com/paulmillr/noble-curves/pull/54\n // - https://github.com/paulmillr/noble-curves/issues/88\n //\n // When you compare the ed25519 publicKey of a given account produced by this function to the publicKey produced by\n // polkadot-js, you will find that they are the same as eachother.\n if (secretKey.length === 64) {\n const [privateComponent, publicComponent] = [secretKey.slice(0, 32), secretKey.slice(32)]\n const publicKey = ed25519.getPublicKey(privateComponent)\n\n // NOTE: We only accept a 64 byte secretKey when the first 32 bytes successfully produce a public key which equals the second 32 bytes of the secretKey.\n //\n // In this scenario, we assume the creator of the secretKey has given us an array of bytes which equals `[...privateKey, ...publicKey]`.\n //\n // However, if the second 32 bytes **don't** match the publicKey produced by the first 32 bytes, we no longer know what's going on.\n //\n // In that case we pass the 64 bytes directly through to `@noble/curves/ed25519`, which we expect will throw the error: `private key of length 32 expected, got 64`.\n // But if there's some 64 byte key format for ed25519 we don't know about, or one is added in the future, `@noble/curves/ed25519` can handle that for us instead of throwing.\n if (!isUint8ArrayEq(publicComponent, publicKey)) return ed25519.getPublicKey(secretKey)\n\n return publicKey\n }\n\n return ed25519.getPublicKey(secretKey)\n}\n\n/** If a is identical to b, this function returns true, otherwise it returns false */\nconst isUint8ArrayEq = (a: Uint8Array, b: Uint8Array) =>\n // biome-ignore lint/complexity/noUselessTernary: legacy\n a.length !== b.length || a.some((v, i) => v !== b[i]) ? false : true\n","import { secp256k1 } from \"@noble/curves/secp256k1\"\nimport { HDKey } from \"@scure/bip32\"\nimport { addressFromPublicKey } from \"../address\"\nimport type { Keypair } from \"../types\"\n\nexport const deriveEthereum = (seed: Uint8Array, derivationPath: string): Keypair => {\n const hdkey = HDKey.fromMasterSeed(seed)\n\n const childKey = hdkey.derive(derivationPath)\n if (!childKey.privateKey) throw new Error(\"Invalid derivation path\")\n const secretKey = new Uint8Array(childKey.privateKey)\n\n const publicKey = getPublicKeyEthereum(secretKey)\n\n return {\n type: \"ethereum\",\n secretKey,\n publicKey,\n address: addressFromPublicKey(publicKey, \"ethereum\"),\n }\n}\n\nexport const getPublicKeyEthereum = (secretKey: Uint8Array) => {\n const scalar = secp256k1.utils.normPrivateKeyToScalar(secretKey)\n return secp256k1.getPublicKey(scalar, false)\n}\n","import { randomBytes } from \"@noble/hashes/utils\"\nimport { getPublicKey, HDKD, secretFromSeed } from \"micro-sr25519\"\nimport { addressFromPublicKey } from \"../address\"\nimport type { Keypair } from \"../types\"\nimport { createChainCode, parseSubstrateDerivations } from \"./common\"\n\nexport const deriveSr25519 = (seed: Uint8Array, derivationPath: string): Keypair => {\n const derivations = parseSubstrateDerivations(derivationPath)\n\n const secretKey = derivations.reduce((secretKey, [type, chainCode]) => {\n const deriveFn = type === \"hard\" ? HDKD.secretHard : HDKD.secretSoft\n const code = createChainCode(chainCode)\n return deriveFn(secretKey, code, randomBytes)\n }, secretFromSeed(seed))\n\n const publicKey = getPublicKeySr25519(secretKey)\n return {\n type: \"sr25519\",\n secretKey,\n publicKey,\n address: addressFromPublicKey(publicKey, \"ss58\"),\n }\n}\n\nexport const getPublicKeySr25519 = getPublicKey\n","import { xchacha20poly1305 } from \"@noble/ciphers/chacha.js\"\nimport { concatBytes } from \"@noble/ciphers/utils.js\"\nimport { MlKem768 } from \"mlkem\"\n\n/**\n * Encrypts plaintext using ML-KEM-768 + XChaCha20-Poly1305 (KEM-AEAD).\n *\n * Wire format (subtensor pallet-shield v2):\n * key_hash (16 bytes) || kem_len (2 bytes LE) || kem_ct (variable) || nonce (24 bytes) || aead_ct (variable)\n *\n * @param keyHash 16-byte xxhash128 of the public key (caller must compute, e.g. via Twox128)\n * @param publicKey ML-KEM-768 encapsulation key bytes\n * @param plaintext Data to encrypt (typically a signed extrinsic)\n */\nexport const encryptKemAead = async (\n keyHash: Uint8Array,\n publicKey: Uint8Array,\n plaintext: Uint8Array\n) => {\n if (keyHash.length !== 16) {\n throw new Error(`Expected 16-byte keyHash, got ${keyHash.length}`)\n }\n\n const kem = new MlKem768()\n const [kemCt, sharedSecret] = await kem.encap(publicKey)\n\n if (sharedSecret.length !== 32) {\n throw new Error(`Expected 32-byte shared secret, got ${sharedSecret.length}`)\n }\n\n const nonce = crypto.getRandomValues(new Uint8Array(24))\n\n const aead = xchacha20poly1305(sharedSecret, nonce)\n const aeadCt = aead.encrypt(plaintext)\n\n const kemLen = new Uint8Array(2)\n new DataView(kemLen.buffer).setUint16(0, kemCt.length, true)\n\n return concatBytes(keyHash, kemLen, kemCt, nonce, aeadCt)\n}\n","import { detectAddressEncoding } from \"../address\"\nimport type { AccountPlatform, AddressEncoding, KeypairCurve } from \"../types\"\n\nexport const getAccountPlatformFromCurve = (curve: KeypairCurve): AccountPlatform => {\n switch (curve) {\n case \"sr25519\":\n case \"ed25519\":\n case \"ecdsa\":\n return \"polkadot\"\n case \"ethereum\":\n return \"ethereum\"\n case \"bitcoin-ecdsa\":\n case \"bitcoin-ed25519\":\n return \"bitcoin\"\n case \"solana\":\n return \"solana\"\n }\n}\n\nexport const getAccountPlatformFromEncoding = (encoding: AddressEncoding): AccountPlatform => {\n switch (encoding) {\n case \"ss58\":\n return \"polkadot\"\n case \"ethereum\":\n return \"ethereum\"\n case \"bech32m\":\n case \"bech32\":\n case \"base58check\":\n return \"bitcoin\"\n case \"base58solana\":\n return \"solana\"\n }\n}\n\nexport const getAccountPlatformFromAddress = (address: string): AccountPlatform => {\n const encoding = detectAddressEncoding(address)\n return getAccountPlatformFromEncoding(encoding)\n}\n"],"mappings":"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","names":["base58","base58","base58","CACHE","base58","hex","ed25519","base58","utf8","seed","ed25519","ed25519","secp256k1","secp256k1","secretKey","hex","base58"]}
|
|
1
|
+
{"version":3,"sources":["../src/address/encoding/addressEncodingFromCurve.ts","../src/address/encoding/bitcoin.ts","../src/address/encoding/ethereum.ts","../src/address/encoding/solana.ts","../src/address/encoding/ss58.ts","../src/hashing/index.ts","../src/address/encoding/detectAddressEncoding.ts","../src/address/addressFromPublicKey.ts","../src/address/normalizeAddress.ts","../src/address/encodeAnyAddress.ts","../src/address/isAddressEqual.ts","../src/address/isAddressValid.ts","../src/derivation/deriveSolana.ts","../src/derivation/utils.ts","../src/mnemonic/index.ts","../src/utils/exports.ts","../src/utils/pbkdf2.ts","../src/derivation/deriveEcdsa.ts","../src/derivation/common.ts","../src/derivation/deriveEd25519.ts","../src/derivation/deriveEthereum.ts","../src/derivation/deriveSr25519.ts","../src/encryption/encryptKemAead.ts","../src/platform/index.ts"],"sourcesContent":["import type { AddressEncoding, KeypairCurve } from \"../../types\"\n\n/** NOTE: Try not to use this too much, it will need to change */\nexport const addressEncodingFromCurve = (curve: KeypairCurve): AddressEncoding => {\n switch (curve) {\n case \"sr25519\":\n case \"ed25519\":\n case \"ecdsa\":\n return \"ss58\"\n case \"bitcoin-ecdsa\":\n case \"bitcoin-ed25519\":\n // NOTE: Bitcoin has multiple address formats, so this isn't necessarily correct\n // The format MAY be bech32m, but it might also be bech32 or base58check.\n // bech32m is the most recent format.\n return \"bech32m\"\n case \"ethereum\":\n return \"ethereum\"\n case \"solana\":\n return \"base58solana\"\n }\n}\n","import { bech32, bech32m } from \"bech32\"\nimport bs58check from \"bs58check\"\n\nexport const isBitcoinAddress = (address: string) =>\n isBech32mAddress(address) || isBech32Address(address) || isBase58CheckAddress(address)\n\nexport function isBech32mAddress(address: string) {\n try {\n fromBech32m(address)\n } catch {\n return false\n }\n return true\n}\n\nexport function isBech32Address(address: string) {\n try {\n fromBech32(address)\n } catch {\n return false\n }\n return true\n}\n\nexport function isBase58CheckAddress(address: string) {\n try {\n fromBase58Check(address)\n } catch {\n return false\n }\n return true\n}\n\n/**\n * Converts a Bech32m encoded address to its corresponding data representation.\n * @param address - The Bech32m encoded address.\n * @returns An object containing the version, prefix, and data of the address.\n * @throws {TypeError} If the address uses the wrong encoding.\n */\nexport function fromBech32m(address: string) {\n const result = bech32m.decode(address)\n const version = result.words[0]\n if (version === 0) throw new TypeError(`${address} uses wrong encoding`)\n const data = bech32m.fromWords(result.words.slice(1))\n return {\n version,\n prefix: result.prefix,\n data: Uint8Array.from(data),\n }\n}\n\n/**\n * Converts a Bech32 encoded address to its corresponding data representation.\n * @param address - The Bech32 encoded address.\n * @returns An object containing the version, prefix, and data of the address.\n * @throws {TypeError} If the address uses the wrong encoding.\n */\nexport function fromBech32(address: string) {\n const result = bech32.decode(address)\n const version = result.words[0]\n if (version !== 0) throw new TypeError(`${address} uses wrong encoding`)\n const data = bech32.fromWords(result.words.slice(1))\n return {\n version,\n prefix: result.prefix,\n data: Uint8Array.from(data),\n }\n}\n\n/**\n * Decodes a base58check encoded Bitcoin address and returns the version and hash.\n *\n * @param address - The base58check encoded Bitcoin address to decode.\n * @returns An object containing the version and hash of the decoded address.\n * @throws {TypeError} If the address is too short or too long.\n */\nexport function fromBase58Check(address: string) {\n const payload = bs58check.decode(address)\n if (payload.length < 21) throw new TypeError(`${address} is too short`)\n if (payload.length > 21) throw new TypeError(`${address} is too long`)\n function readUInt8(buffer: Uint8Array, offset: number) {\n if (offset + 1 > buffer.length) {\n throw new Error(\"Offset is outside the bounds of Uint8Array\")\n }\n return buffer[offset]\n }\n const version = readUInt8(payload, 0)\n const hash = payload.slice(1)\n return { version, hash }\n}\n","import { keccak_256 } from \"@noble/hashes/sha3.js\"\nimport { bytesToHex } from \"@noble/hashes/utils.js\"\n\n/**\n * Encodes a public key using H160 encoding with Ethereum checksum.\n */\nexport const encodeAddressEthereum = (publicKey: Uint8Array): `0x${string}` => {\n // Ensure the public key is in uncompressed format (starts with 0x04)\n if (publicKey[0] !== 0x04) throw new Error(\"Invalid public key format\")\n\n // Remove the prefix (0x04)\n const publicKeyWithoutPrefix = publicKey.slice(1)\n\n // Apply Keccak-256 hashing to the public key\n const hash = keccak_256(publicKeyWithoutPrefix)\n\n // Take the last 20 bytes of the hash to get the Ethereum address\n const address = hash.slice(-20)\n\n // Apply checksum\n return checksumEthereumAddress(`0x${bytesToHex(address)}`)\n}\n\nexport const checksumEthereumAddress = (address: string): `0x${string}` => {\n const addr = address.toLowerCase().replace(/^0x/, \"\")\n const hash = keccak_256(new TextEncoder().encode(addr))\n const hashHex = bytesToHex(hash)\n\n const checksum = addr\n .split(\"\")\n .map((char, i) => (parseInt(hashHex[i], 16) >= 8 ? char.toUpperCase() : char))\n .join(\"\")\n\n return `0x${checksum}`\n}\n\nexport function isEthereumAddress(address: string): address is `0x${string}` {\n return /^0x[a-fA-F0-9]{40}$/.test(address)\n}\n\n// Note: public key cannot be retrieved from an address, because address is hashed from only the last 20 bytes of the pk\n","import { base58 } from \"@scure/base\"\n\nexport const encodeAddressSolana = (publicKey: Uint8Array): string => {\n if (publicKey.length !== 32)\n throw new Error(\"Public key must be 32 bytes long for Solana base58 encoding\")\n return base58.encode(publicKey)\n}\nexport function isSolanaAddress(address: string): boolean {\n try {\n const bytes = base58.decode(address)\n return bytes.length === 32\n } catch {\n return false\n }\n}\n","import { base58 } from \"@scure/base\"\n\nimport { blake2b256, blake2b512 } from \"../../hashing\"\n\n// Inspired from MIT licensed @polkadot-labs/hdkd-helpers\n// https://github.com/polkadot-labs/hdkd/blob/3ef6e02827212d934b59a4e566d8aa61d3ba7b27/packages/hdkd-helpers/src/accountId.ts#L3\n\nconst VALID_PUBLICKEY_LENGTHS = [32, 33]\nconst accountId = (publicKey: Uint8Array) => {\n if (!VALID_PUBLICKEY_LENGTHS.includes(publicKey.length)) throw new Error(\"Invalid publicKey\")\n return publicKey.length === 33 ? blake2b256(publicKey) : publicKey\n}\n\nconst SS58PRE = /* @__PURE__ */ new TextEncoder().encode(\"SS58PRE\")\nconst CHECKSUM_LENGTH = 2\n\nconst VALID_PAYLOAD_LENGTHS = [32, 33]\nconst ss58Encode = (payload: Uint8Array, prefix = 42) => {\n if (!VALID_PAYLOAD_LENGTHS.includes(payload.length)) throw new Error(\"Invalid payload\")\n\n const prefixBytes =\n prefix < 64\n ? Uint8Array.of(prefix)\n : Uint8Array.of(\n ((prefix & 0b0000_0000_1111_1100) >> 2) | 0b0100_0000,\n (prefix >> 8) | ((prefix & 0b0000_0000_0000_0011) << 6)\n )\n const checksum = blake2b512(Uint8Array.of(...SS58PRE, ...prefixBytes, ...payload)).subarray(\n 0,\n CHECKSUM_LENGTH\n )\n return base58.encode(Uint8Array.of(...prefixBytes, ...payload, ...checksum))\n}\n\nconst VALID_ADDRESS_LENGTHS = [35, 36, 37]\nexport const decodeSs58Address = (addressStr: string): [publicKey: Uint8Array, prefix: number] => {\n const address = base58.decode(addressStr)\n if (!VALID_ADDRESS_LENGTHS.includes(address.length)) throw new Error(\"Invalid address length\")\n\n const addressChecksum = address.subarray(address.length - CHECKSUM_LENGTH)\n const checksum = blake2b512(\n Uint8Array.of(...SS58PRE, ...address.subarray(0, address.length - CHECKSUM_LENGTH))\n ).subarray(0, CHECKSUM_LENGTH)\n if (addressChecksum[0] !== checksum[0] || addressChecksum[1] !== checksum[1])\n throw new Error(\"Invalid checksum\")\n\n const prefixLength = address[0]! & 0b0100_0000 ? 2 : 1\n const prefix: number =\n prefixLength === 1\n ? address[0]!\n : ((address[0]! & 0b0011_1111) << 2) | (address[1]! >> 6) | ((address[1]! & 0b0011_1111) << 8)\n const publicKey = address.slice(prefixLength, address.length - CHECKSUM_LENGTH)\n return [publicKey, prefix]\n}\n\nexport const encodeAddressSs58 = (publicKey: Uint8Array | string, prefix = 42) => {\n if (typeof publicKey === \"string\") [publicKey] = decodeSs58Address(publicKey)\n return ss58Encode(accountId(publicKey), prefix)\n}\n\nexport function isSs58Address(address: string): boolean {\n try {\n decodeSs58Address(address)\n return true\n } catch {\n return false\n }\n}\n","import { blake2b } from \"@noble/hashes/blake2.js\"\nimport { blake3 as blake3Hasher } from \"@noble/hashes/blake3.js\"\nimport { base58 } from \"@scure/base\"\n\nexport const blake3 = blake3Hasher\n\nexport const blake2b256 = (msg: Uint8Array) => blake2b(msg, { dkLen: 32 })\nexport const blake2b512 = (msg: Uint8Array) => blake2b(msg, { dkLen: 64 })\n\nexport const getSafeHash = (bytes: Uint8Array) => {\n // cryptographically secure one way hash\n // outputs 44 characters without special characters\n return base58.encode(blake3Hasher(bytes))\n}\n","import type { AddressEncoding } from \"../../types\"\nimport { isBase58CheckAddress, isBech32Address, isBech32mAddress } from \"./bitcoin\"\nimport { isEthereumAddress } from \"./ethereum\"\nimport { isSolanaAddress } from \"./solana\"\nimport { isSs58Address } from \"./ss58\"\n\nconst CACHE = new Map<string, AddressEncoding>()\n\nconst detectAddressEncodingInner = (address: string): AddressEncoding => {\n if (isEthereumAddress(address)) return \"ethereum\"\n if (isSs58Address(address)) return \"ss58\"\n if (isSolanaAddress(address)) return \"base58solana\"\n if (isBech32mAddress(address)) return \"bech32m\"\n if (isBech32Address(address)) return \"bech32\"\n if (isBase58CheckAddress(address)) return \"base58check\"\n\n throw new Error(`Unknown address encoding`)\n}\nexport const detectAddressEncoding = (address: string): AddressEncoding => {\n if (!CACHE.has(address)) CACHE.set(address, detectAddressEncodingInner(address))\n return CACHE.get(address)!\n}\n","import type { AddressEncoding } from \"../types\"\nimport { encodeAddressEthereum, encodeAddressSolana, encodeAddressSs58 } from \"./encoding\"\n\nexport type EncodeAddressOptions = {\n ss58Prefix?: number\n}\n\nexport const addressFromPublicKey = (\n publicKey: Uint8Array,\n encoding: AddressEncoding,\n options?: EncodeAddressOptions\n): string => {\n switch (encoding) {\n case \"ss58\":\n return encodeAddressSs58(publicKey, options?.ss58Prefix)\n case \"ethereum\":\n return encodeAddressEthereum(publicKey)\n case \"base58solana\":\n return encodeAddressSolana(publicKey)\n case \"bech32m\":\n case \"bech32\":\n case \"base58check\":\n throw new Error(\"addressFromPublicKey is not implemented for Bitcoin\")\n }\n}\n","import {\n checksumEthereumAddress,\n decodeSs58Address,\n detectAddressEncoding,\n encodeAddressSs58,\n} from \"./encoding\"\n\nconst CACHE = new Map<string, string>()\n\n// Normalize an address in a way that it can be compared to other addresses that have also been normalized\nexport const normalizeAddress = (address: string) => {\n try {\n if (!CACHE.has(address)) CACHE.set(address, normalizeAnyAddress(address))\n return CACHE.get(address)!\n } catch (cause) {\n throw new Error(`Unable to normalize address: ${address}`, { cause })\n }\n}\n\nconst normalizeAnyAddress = (address: string) => {\n switch (detectAddressEncoding(address)) {\n case \"ethereum\":\n return checksumEthereumAddress(address)\n case \"bech32m\":\n case \"bech32\":\n case \"base58check\":\n case \"base58solana\":\n return address\n case \"ss58\": {\n const [pk] = decodeSs58Address(address)\n return encodeAddressSs58(pk, 42)\n }\n }\n}\n","import { decodeSs58Address, detectAddressEncoding, encodeAddressSs58 } from \"./encoding\"\nimport { normalizeAddress } from \"./normalizeAddress\"\n\ntype EncodeAddressOptions = {\n ss58Format?: number | undefined\n}\n\nexport const encodeAnyAddress = (address: string, options?: EncodeAddressOptions) => {\n // this leverages cache\n const encoding = detectAddressEncoding(address)\n\n // this does NOT leverage cache\n if (encoding === \"ss58\" && options?.ss58Format !== undefined) {\n const [publicKey] = decodeSs58Address(address)\n return encodeAddressSs58(publicKey, options?.ss58Format ?? 42)\n }\n\n // this leverages cache\n return normalizeAddress(address)\n}\n","import { normalizeAddress } from \"./normalizeAddress\"\n\nexport const isAddressEqual = (address1: string, address2: string) => {\n try {\n return normalizeAddress(address1) === normalizeAddress(address2)\n } catch {\n // if normalization fails, assume the addresses are not equal\n return false\n }\n}\n","import { detectAddressEncoding } from \"./encoding\"\n\nexport const isAddressValid = (address: string): boolean => {\n try {\n detectAddressEncoding(address)\n return true\n } catch {\n return false\n }\n}\n","import { ed25519 } from \"@noble/curves/ed25519.js\"\nimport { hmac } from \"@noble/hashes/hmac.js\"\nimport { sha512 } from \"@noble/hashes/sha2.js\"\nimport { addressFromPublicKey } from \"../address\"\nimport type { Keypair } from \"../types\"\n\n// Convert a path like \"m/44'/501'/0'/0'\" to an array of indexes\nconst parseDerivationPath = (path: string): number[] => {\n if (!path.startsWith(\"m/\")) throw new Error(\"Path must start with 'm/'\")\n return path\n .split(\"/\")\n .slice(1) // Remove 'm'\n .map((p) => {\n if (!p.endsWith(\"'\")) throw new Error(\"Only hardened derivation is supported\")\n return parseInt(p.slice(0, -1), 10) + 0x80000000 // Convert to hardened index\n })\n}\n\nexport const deriveSolana = (seed: Uint8Array, derivationPath: string): Keypair => {\n // Generate master private key using SLIP-0010 (HMAC-SHA512 with \"ed25519 seed\")\n let I = hmac(sha512, new TextEncoder().encode(\"ed25519 seed\"), seed)\n let secretKey = I.slice(0, 32)\n let chainCode = I.slice(32)\n\n // Iterate over the derivation path and apply hardened key derivation\n for (const index of parseDerivationPath(derivationPath)) {\n // HMAC-SHA512(Key = chainCode, Data = 0x00 || privateKey || index)\n const data = new Uint8Array(1 + secretKey.length + 4)\n data.set([0x00], 0)\n data.set(secretKey, 1)\n data.set(\n new Uint8Array([\n (index >> 24) & 0xff,\n (index >> 16) & 0xff,\n (index >> 8) & 0xff,\n index & 0xff,\n ]),\n 1 + secretKey.length\n )\n\n I = hmac(sha512, chainCode, data)\n secretKey = I.slice(0, 32)\n chainCode = I.slice(32)\n }\n\n const publicKey = getPublicKeySolana(secretKey)\n\n return {\n type: \"solana\",\n secretKey,\n publicKey,\n address: addressFromPublicKey(publicKey, \"base58solana\"),\n }\n}\n\nexport const getPublicKeySolana = (secretKey: Uint8Array) => {\n return ed25519.getPublicKey(secretKey)\n}\n","import { base58, hex } from \"@scure/base\"\n\nimport { entropyToSeed, getDevSeed, mnemonicToEntropy } from \"../mnemonic\"\nimport type { AccountPlatform, KeypairCurve } from \"../types\"\nimport { deriveEcdsa, getPublicKeyEcdsa } from \"./deriveEcdsa\"\nimport { deriveEd25519, getPublicKeyEd25519 } from \"./deriveEd25519\"\nimport { deriveEthereum, getPublicKeyEthereum } from \"./deriveEthereum\"\nimport { deriveSolana, getPublicKeySolana } from \"./deriveSolana\"\nimport { deriveSr25519, getPublicKeySr25519 } from \"./deriveSr25519\"\n\nexport const deriveKeypair = (seed: Uint8Array, derivationPath: string, curve: KeypairCurve) => {\n switch (curve) {\n case \"sr25519\":\n return deriveSr25519(seed, derivationPath)\n case \"ed25519\":\n return deriveEd25519(seed, derivationPath)\n case \"ecdsa\":\n return deriveEcdsa(seed, derivationPath)\n case \"bitcoin-ecdsa\":\n case \"bitcoin-ed25519\":\n throw new Error(\"deriveKeypair is not implemented for Bitcoin\")\n case \"ethereum\":\n return deriveEthereum(seed, derivationPath)\n case \"solana\":\n return deriveSolana(seed, derivationPath)\n }\n}\n\nexport const getPublicKeyFromSecret = (secretKey: Uint8Array, curve: KeypairCurve): Uint8Array => {\n switch (curve) {\n case \"ecdsa\":\n return getPublicKeyEcdsa(secretKey)\n case \"ethereum\":\n return getPublicKeyEthereum(secretKey)\n case \"sr25519\":\n return getPublicKeySr25519(secretKey)\n case \"ed25519\":\n return getPublicKeyEd25519(secretKey)\n case \"bitcoin-ecdsa\":\n case \"bitcoin-ed25519\":\n throw new Error(\"getPublicKeyFromSecret is not implemented for Bitcoin\")\n case \"solana\":\n return getPublicKeySolana(secretKey)\n }\n}\n\nexport const addressFromMnemonic = async (\n mnemonic: string,\n derivationPath: string,\n curve: KeypairCurve\n) => {\n const entropy = mnemonicToEntropy(mnemonic)\n const seed = await entropyToSeed(entropy, curve)\n const { address } = deriveKeypair(seed, derivationPath, curve)\n return address\n}\n\nexport const removeHexPrefix = (secretKey: string) => {\n if (secretKey.startsWith(\"0x\")) return secretKey.slice(2)\n return secretKey\n}\n\nexport const parseSecretKey = (secretKey: string, platform: AccountPlatform) => {\n switch (platform) {\n case \"ethereum\": {\n const privateKey = removeHexPrefix(secretKey)\n return hex.decode(privateKey)\n }\n case \"solana\": {\n const bytes = secretKey.startsWith(\"[\")\n ? // JSON bytes array (ex: solflare)\n Uint8Array.from(JSON.parse(secretKey))\n : // base58 encoded string (ex: phantom)\n base58.decode(secretKey)\n\n if (bytes.length === 64) {\n const privateKey = bytes.slice(0, 32)\n const publicKey = bytes.slice(32, 64)\n const computedPublicKey = getPublicKeySolana(privateKey)\n if (!publicKey.every((b, i) => b === computedPublicKey[i]))\n throw new Error(\"Invalid Solana secret key: public key does not match\")\n return privateKey\n } else if (bytes.length === 32) return bytes\n\n throw new Error(\"Invalid Solana secret key length\")\n }\n\n default:\n throw new Error(\"Not implemented\")\n }\n}\n\n// @dev: didn't find a reliable source of information on which characters are valid => assume it s valid if a keypair can be generated from it\nexport const isValidDerivationPath = async (derivationPath: string, curve: KeypairCurve) => {\n try {\n deriveKeypair(await getDevSeed(curve), derivationPath, curve)\n return true\n } catch {\n return false\n }\n}\n","import {\n entropyToMnemonic as entropyToMnemonicBip39,\n generateMnemonic as generateMnemonicBip39,\n mnemonicToEntropy as mnemonicToEntropyBip39,\n validateMnemonic,\n} from \"@scure/bip39\"\nimport { wordlist } from \"@scure/bip39/wordlists/english.js\"\n\nimport type { KeypairCurve } from \"../types\"\nimport { pbkdf2 } from \"../utils\"\n\nexport const mnemonicToEntropy = (mnemonic: string) => {\n return mnemonicToEntropyBip39(mnemonic, wordlist)\n}\n\nexport const entropyToMnemonic = (entropy: Uint8Array) => {\n return entropyToMnemonicBip39(entropy, wordlist)\n}\n\nconst entropyToSeedSubstrate = async (entropy: Uint8Array, password?: string) =>\n await pbkdf2(\n \"SHA-512\",\n entropy,\n mnemonicPasswordToSalt(password ?? \"\"),\n 2048, // 2048 iterations\n 32 // 32 bytes (32 * 8 == 256 bits)\n )\n\nconst entropyToSeedClassic = async (entropy: Uint8Array, password?: string) =>\n await pbkdf2(\n \"SHA-512\",\n encodeNormalized(entropyToMnemonic(entropy)),\n mnemonicPasswordToSalt(password ?? \"\"),\n 2048, // 2048 iterations\n 64 // 64 bytes (64 * 8 == 512 bits)\n )\n\nconst mnemonicPasswordToSalt = (password: string) => encodeNormalized(`mnemonic${password}`)\n\n/** Normalizes a UTF-8 string using `NFKD` form, then encodes it into bytes */\nconst encodeNormalized = (utf8: string): Uint8Array =>\n new TextEncoder().encode(utf8.normalize(\"NFKD\"))\n\ntype SeedDerivationType = \"substrate\" | \"classic\"\n\nconst getSeedDerivationType = (curve: KeypairCurve): SeedDerivationType => {\n switch (curve) {\n case \"sr25519\":\n case \"ed25519\":\n case \"ecdsa\":\n return \"substrate\"\n case \"ethereum\":\n case \"solana\":\n return \"classic\"\n case \"bitcoin-ecdsa\":\n case \"bitcoin-ed25519\":\n throw new Error(\"seed derivation is not implemented for Bitcoin\")\n }\n}\n\n// when deriving keys from a mnemonic, we usually dont want a password here.\n// a password provided here would be used as a 25th mnemonic word.\nexport const entropyToSeed = async (\n entropy: Uint8Array,\n curve: KeypairCurve,\n password?: string\n) => {\n const type = getSeedDerivationType(curve)\n\n switch (type) {\n case \"classic\":\n return await entropyToSeedClassic(entropy, password)\n case \"substrate\":\n return await entropyToSeedSubstrate(entropy, password)\n }\n}\n\nexport const isValidMnemonic = (mnemonic: string) => {\n return validateMnemonic(mnemonic, wordlist)\n}\n\nexport const generateMnemonic = (words: 12 | 24) => {\n switch (words) {\n case 12:\n return generateMnemonicBip39(wordlist, 128)\n case 24:\n return generateMnemonicBip39(wordlist, 256)\n }\n}\n\n// well-known mnemonic used by polkadot.js, can be checked on polkadot wiki\nexport const DEV_MNEMONIC_POLKADOT =\n \"bottom drive obey lake curtain smoke basket hold race lonely fit walk\"\n\n// well-known phrase used by hardhat and anvil\nexport const DEV_MNEMONIC_ETHEREUM = \"test test test test test test test test test test test junk\"\n\n// keep dev seeds in cache as we will reuse them to validate multiple derivation paths\nconst DEV_SEED_CACHE = new Map<SeedDerivationType, Uint8Array>()\n\nexport const getDevSeed = async (curve: KeypairCurve) => {\n const type = getSeedDerivationType(curve)\n\n if (!DEV_SEED_CACHE.has(type)) {\n switch (type) {\n case \"classic\": {\n const entropy = mnemonicToEntropy(DEV_MNEMONIC_ETHEREUM)\n const seed = await entropyToSeedClassic(entropy) // 80ms\n DEV_SEED_CACHE.set(type, seed)\n break\n }\n case \"substrate\": {\n const entropy = mnemonicToEntropy(DEV_MNEMONIC_POLKADOT)\n const seed = await entropyToSeedSubstrate(entropy) // 80ms\n DEV_SEED_CACHE.set(type, seed)\n break\n }\n default:\n throw new Error(\"Unsupported derivation type\")\n }\n }\n\n return DEV_SEED_CACHE.get(type)!\n}\n","export { ed25519 } from \"@noble/curves/ed25519.js\"\nexport { base58, base64, hex, utf8 } from \"@scure/base\"\n","export const pbkdf2 = async (\n hash: \"SHA-256\" | \"SHA-512\",\n entropy: Uint8Array,\n salt: Uint8Array,\n iterations: number,\n outputLenBytes: number\n) => {\n // NOTE: react-native-quick-crypto (our `global.crypto` polyfill on Talisman Mobile) doesn't support `crypto.subtle.deriveKey`.\n // But, we can work around this by using `crypto.subtle.deriveBits` and `crypto.subtle.importKey`, which when used together\n // can provide the same functionality as `crypto.subtle.deriveKey`.\n const keyMaterial = await crypto.subtle.importKey(\n \"raw\",\n entropy as Uint8Array<ArrayBuffer>,\n \"PBKDF2\",\n false,\n [\"deriveBits\"]\n )\n const derivedBits = await crypto.subtle.deriveBits(\n { name: \"PBKDF2\", salt: salt as Uint8Array<ArrayBuffer>, iterations, hash },\n keyMaterial,\n outputLenBytes * 8\n )\n return new Uint8Array(derivedBits)\n}\n","import { secp256k1 } from \"@noble/curves/secp256k1.js\"\nimport { addressFromPublicKey } from \"../address\"\nimport type { Keypair } from \"../types\"\nimport { deriveSubstrateSecretKey } from \"./common\"\n\nexport const deriveEcdsa = (seed: Uint8Array, derivationPath: string): Keypair => {\n const secretKey = deriveSubstrateSecretKey(seed, derivationPath, \"Secp256k1HDKD\")\n\n const publicKey = getPublicKeyEcdsa(secretKey)\n\n return {\n type: \"ecdsa\",\n secretKey,\n publicKey,\n address: addressFromPublicKey(publicKey, \"ss58\"),\n }\n}\n\nexport const getPublicKeyEcdsa = (secretKey: Uint8Array) => {\n return secp256k1.getPublicKey(secretKey)\n}\n","import { Bytes, str, Tuple, u32 } from \"scale-ts\"\n\nimport { blake2b256 } from \"../hashing\"\n\n// Inspired from MIT licensed @polkadot-labs/hdkd helpers\n// https://github.com/polkadot-labs/hdkd/blob/3ef6e02827212d934b59a4e566d8aa61d3ba7b27/packages/hdkd-helpers/src/parseDerivations.ts#L1\n\nconst DERIVATION_RE = /(\\/{1,2})(\\w+)/g\n\ntype DerivationDescriptor = [type: \"hard\" | \"soft\", code: string]\n\nexport const parseSubstrateDerivations = (derivationsStr: string): DerivationDescriptor[] => {\n const derivations = [] as DerivationDescriptor[]\n if (derivations)\n for (const [_, type, code] of derivationsStr.matchAll(DERIVATION_RE)) {\n derivations.push([type === \"//\" ? \"hard\" : \"soft\", code!])\n }\n return derivations\n}\n\nexport const createChainCode = (code: string) => {\n const chainCode = new Uint8Array(32)\n chainCode.set(Number.isNaN(+code) ? str.enc(code) : u32.enc(+code))\n return chainCode\n}\n\nconst derivationCodec = /* @__PURE__ */ Tuple(str, Bytes(32), Bytes(32))\nconst createSubstrateDeriveFn = (prefix: string) => (seed: Uint8Array, chainCode: Uint8Array) =>\n blake2b256(derivationCodec.enc([prefix, seed, chainCode]))\n\nexport const deriveSubstrateSecretKey = (\n seed: Uint8Array,\n derivationPath: string,\n prefix: string\n) => {\n const derivations = parseSubstrateDerivations(derivationPath)\n const derive = createSubstrateDeriveFn(prefix)\n\n return derivations.reduce((seed, [type, chainCode]) => {\n const code = createChainCode(chainCode)\n if (type === \"soft\") throw new Error(\"Soft derivations are not supported\")\n return derive(seed, code)\n }, seed)\n}\n","import { ed25519 } from \"@noble/curves/ed25519.js\"\nimport { addressFromPublicKey } from \"../address\"\nimport type { Keypair } from \"../types\"\nimport { deriveSubstrateSecretKey } from \"./common\"\n\nexport const deriveEd25519 = (seed: Uint8Array, derivationPath: string): Keypair => {\n const secretKey = deriveSubstrateSecretKey(seed, derivationPath, \"Ed25519HDKD\")\n\n const publicKey = getPublicKeyEd25519(secretKey)\n\n return {\n type: \"ed25519\",\n secretKey,\n publicKey,\n address: addressFromPublicKey(publicKey, \"ss58\"),\n }\n}\n\nexport const getPublicKeyEd25519 = (secretKey: Uint8Array) => {\n // When importing ed25519 polkadot-js accounts via json, which we do inside of `apps/extension/src/core/domains/keyring/getSecretKeyFromPjsJson.ts`,\n // the secretKey we produce is 64 bytes in length.\n //\n // When using the ed25519 curve to derive a publicKey for this 64 bytes privateKey, we should only take the first 32 bytes:\n // - https://github.com/paulmillr/noble-curves/issues/53#issuecomment-1577362759\n // - https://github.com/paulmillr/noble-curves/discussions/33#discussioncomment-5685971\n // - https://github.com/paulmillr/noble-curves/pull/54\n // - https://github.com/paulmillr/noble-curves/issues/88\n //\n // When you compare the ed25519 publicKey of a given account produced by this function to the publicKey produced by\n // polkadot-js, you will find that they are the same as eachother.\n if (secretKey.length === 64) {\n const [privateComponent, publicComponent] = [secretKey.slice(0, 32), secretKey.slice(32)]\n const publicKey = ed25519.getPublicKey(privateComponent)\n\n // NOTE: We only accept a 64 byte secretKey when the first 32 bytes successfully produce a public key which equals the second 32 bytes of the secretKey.\n //\n // In this scenario, we assume the creator of the secretKey has given us an array of bytes which equals `[...privateKey, ...publicKey]`.\n //\n // However, if the second 32 bytes **don't** match the publicKey produced by the first 32 bytes, we no longer know what's going on.\n //\n // In that case we pass the 64 bytes directly through to `@noble/curves/ed25519`, which we expect will throw the error: `private key of length 32 expected, got 64`.\n // But if there's some 64 byte key format for ed25519 we don't know about, or one is added in the future, `@noble/curves/ed25519` can handle that for us instead of throwing.\n if (!isUint8ArrayEq(publicComponent, publicKey)) return ed25519.getPublicKey(secretKey)\n\n return publicKey\n }\n\n return ed25519.getPublicKey(secretKey)\n}\n\n/** If a is identical to b, this function returns true, otherwise it returns false */\nconst isUint8ArrayEq = (a: Uint8Array, b: Uint8Array) =>\n // biome-ignore lint/complexity/noUselessTernary: legacy\n a.length !== b.length || a.some((v, i) => v !== b[i]) ? false : true\n","import { secp256k1 } from \"@noble/curves/secp256k1.js\"\nimport { HDKey } from \"@scure/bip32\"\nimport { addressFromPublicKey } from \"../address\"\nimport type { Keypair } from \"../types\"\n\nexport const deriveEthereum = (seed: Uint8Array, derivationPath: string): Keypair => {\n const hdkey = HDKey.fromMasterSeed(seed)\n\n const childKey = hdkey.derive(derivationPath)\n if (!childKey.privateKey) throw new Error(\"Invalid derivation path\")\n const secretKey = new Uint8Array(childKey.privateKey)\n\n const publicKey = getPublicKeyEthereum(secretKey)\n\n return {\n type: \"ethereum\",\n secretKey,\n publicKey,\n address: addressFromPublicKey(publicKey, \"ethereum\"),\n }\n}\n\nexport const getPublicKeyEthereum = (secretKey: Uint8Array) => {\n // noble v2 removed `utils.normPrivateKeyToScalar`; getPublicKey accepts the raw private-key\n // bytes directly and applies the same normalization internally → byte-identical pubkey.\n return secp256k1.getPublicKey(secretKey, false)\n}\n","import { getPublicKey, HDKD, secretFromSeed } from \"@scure/sr25519\"\nimport { addressFromPublicKey } from \"../address\"\nimport type { Keypair } from \"../types\"\nimport { createChainCode, parseSubstrateDerivations } from \"./common\"\n\nexport const deriveSr25519 = (seed: Uint8Array, derivationPath: string): Keypair => {\n const derivations = parseSubstrateDerivations(derivationPath)\n\n const secretKey = derivations.reduce<Uint8Array>((secretKey, [type, chainCode]) => {\n const code = createChainCode(chainCode)\n // @scure/sr25519's HDKD changed `secretSoft`'s 3rd arg from an RNG function (micro-sr25519)\n // to an optional 32-byte `random`; `secretHard` takes only (secretKey, chainCode). Omit the\n // random arg — HDKD derivation output is deterministic regardless of it.\n return type === \"hard\" ? HDKD.secretHard(secretKey, code) : HDKD.secretSoft(secretKey, code)\n }, secretFromSeed(seed))\n\n const publicKey = getPublicKeySr25519(secretKey)\n return {\n type: \"sr25519\",\n secretKey,\n publicKey,\n address: addressFromPublicKey(publicKey, \"ss58\"),\n }\n}\n\nexport const getPublicKeySr25519 = getPublicKey\n","import { xchacha20poly1305 } from \"@noble/ciphers/chacha.js\"\nimport { concatBytes } from \"@noble/ciphers/utils.js\"\nimport { MlKem768 } from \"mlkem\"\n\n/**\n * Encrypts plaintext using ML-KEM-768 + XChaCha20-Poly1305 (KEM-AEAD).\n *\n * Wire format (subtensor pallet-shield v2):\n * key_hash (16 bytes) || kem_len (2 bytes LE) || kem_ct (variable) || nonce (24 bytes) || aead_ct (variable)\n *\n * @param keyHash 16-byte xxhash128 of the public key (caller must compute, e.g. via Twox128)\n * @param publicKey ML-KEM-768 encapsulation key bytes\n * @param plaintext Data to encrypt (typically a signed extrinsic)\n */\nexport const encryptKemAead = async (\n keyHash: Uint8Array,\n publicKey: Uint8Array,\n plaintext: Uint8Array\n) => {\n if (keyHash.length !== 16) {\n throw new Error(`Expected 16-byte keyHash, got ${keyHash.length}`)\n }\n\n const kem = new MlKem768()\n const [kemCt, sharedSecret] = await kem.encap(publicKey)\n\n if (sharedSecret.length !== 32) {\n throw new Error(`Expected 32-byte shared secret, got ${sharedSecret.length}`)\n }\n\n const nonce = crypto.getRandomValues(new Uint8Array(24))\n\n const aead = xchacha20poly1305(sharedSecret, nonce)\n const aeadCt = aead.encrypt(plaintext)\n\n const kemLen = new Uint8Array(2)\n new DataView(kemLen.buffer).setUint16(0, kemCt.length, true)\n\n return concatBytes(keyHash, kemLen, kemCt, nonce, aeadCt)\n}\n","import { detectAddressEncoding } from \"../address\"\nimport type { AccountPlatform, AddressEncoding, KeypairCurve } from \"../types\"\n\nexport const getAccountPlatformFromCurve = (curve: KeypairCurve): AccountPlatform => {\n switch (curve) {\n case \"sr25519\":\n case \"ed25519\":\n case \"ecdsa\":\n return \"polkadot\"\n case \"ethereum\":\n return \"ethereum\"\n case \"bitcoin-ecdsa\":\n case \"bitcoin-ed25519\":\n return \"bitcoin\"\n case \"solana\":\n return \"solana\"\n }\n}\n\nexport const getAccountPlatformFromEncoding = (encoding: AddressEncoding): AccountPlatform => {\n switch (encoding) {\n case \"ss58\":\n return \"polkadot\"\n case \"ethereum\":\n return \"ethereum\"\n case \"bech32m\":\n case \"bech32\":\n case \"base58check\":\n return \"bitcoin\"\n case \"base58solana\":\n return \"solana\"\n }\n}\n\nexport const getAccountPlatformFromAddress = (address: string): AccountPlatform => {\n const encoding = detectAddressEncoding(address)\n return getAccountPlatformFromEncoding(encoding)\n}\n"],"mappings":"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","names":["base58","base58","base58","CACHE","base58","hex","ed25519","base58","utf8","seed","ed25519","ed25519","secp256k1","secp256k1","secretKey","hex","base58"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@talismn/crypto",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.5",
|
|
4
4
|
"author": "Talisman",
|
|
5
5
|
"homepage": "https://talisman.xyz",
|
|
6
6
|
"license": "GPL-3.0-or-later",
|
|
@@ -21,20 +21,20 @@
|
|
|
21
21
|
"node": ">=20"
|
|
22
22
|
},
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"@noble/ciphers": "2.0
|
|
25
|
-
"@noble/curves": "
|
|
26
|
-
"@noble/hashes": "
|
|
27
|
-
"@scure/base": "
|
|
28
|
-
"@scure/bip32": "
|
|
29
|
-
"@scure/bip39": "
|
|
24
|
+
"@noble/ciphers": "2.2.0",
|
|
25
|
+
"@noble/curves": "2.2.0",
|
|
26
|
+
"@noble/hashes": "2.2.0",
|
|
27
|
+
"@scure/base": "2.2.0",
|
|
28
|
+
"@scure/bip32": "2.2.0",
|
|
29
|
+
"@scure/bip39": "2.2.0",
|
|
30
|
+
"@scure/sr25519": "2.2.0",
|
|
30
31
|
"bech32": "2.0.0",
|
|
31
32
|
"bs58check": "4.0.0",
|
|
32
|
-
"
|
|
33
|
-
"mlkem": "2.5.0",
|
|
33
|
+
"mlkem": "2.7.0",
|
|
34
34
|
"scale-ts": "1.6.1"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
37
|
-
"typescript": "^
|
|
37
|
+
"typescript": "^6.0.3",
|
|
38
38
|
"@talismn/tsconfig": "0.0.4"
|
|
39
39
|
},
|
|
40
40
|
"types": "./dist/index.d.ts",
|