@layerzerolabs/lz-foundation 3.0.3 → 3.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +18 -0
- package/dist/index.cjs +32 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.mts +30 -1
- package/dist/index.d.ts +30 -1
- package/dist/index.mjs +31 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +5 -5
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
# @layerzerolabs/lz-foundation
|
|
2
2
|
|
|
3
|
+
## 3.0.5
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 1136853: endpoint: mainnet worldchain
|
|
8
|
+
- Updated dependencies [1136853]
|
|
9
|
+
- @layerzerolabs/lz-definitions@3.0.5
|
|
10
|
+
- @layerzerolabs/lz-utilities@3.0.5
|
|
11
|
+
|
|
12
|
+
## 3.0.4
|
|
13
|
+
|
|
14
|
+
### Patch Changes
|
|
15
|
+
|
|
16
|
+
- 4b060b6: testnets
|
|
17
|
+
- Updated dependencies [4b060b6]
|
|
18
|
+
- @layerzerolabs/lz-definitions@3.0.4
|
|
19
|
+
- @layerzerolabs/lz-utilities@3.0.4
|
|
20
|
+
|
|
3
21
|
## 3.0.3
|
|
4
22
|
|
|
5
23
|
### Patch Changes
|
package/dist/index.cjs
CHANGED
|
@@ -139,6 +139,38 @@ async function signHash3(hash, privateKey, algorithm) {
|
|
|
139
139
|
}
|
|
140
140
|
}
|
|
141
141
|
|
|
142
|
+
// src/signer.ts
|
|
143
|
+
var Secp256k1Signer = class _Secp256k1Signer {
|
|
144
|
+
constructor(privateKey) {
|
|
145
|
+
this.privateKey = privateKey;
|
|
146
|
+
}
|
|
147
|
+
static from(privatekey) {
|
|
148
|
+
return new _Secp256k1Signer(privatekey);
|
|
149
|
+
}
|
|
150
|
+
async getPublicKey() {
|
|
151
|
+
return secp256k1_exports.getPublicKey(this.privateKey);
|
|
152
|
+
}
|
|
153
|
+
async signHash(hash) {
|
|
154
|
+
return secp256k1_exports.signHash(hash, this.privateKey);
|
|
155
|
+
}
|
|
156
|
+
};
|
|
157
|
+
var Ed25519Signer = class _Ed25519Signer {
|
|
158
|
+
constructor(privateKey) {
|
|
159
|
+
this.privateKey = privateKey;
|
|
160
|
+
}
|
|
161
|
+
static from(privateKey) {
|
|
162
|
+
return new _Ed25519Signer(privateKey);
|
|
163
|
+
}
|
|
164
|
+
async signHash(hash) {
|
|
165
|
+
return ed25519_exports.signHash(hash, this.privateKey);
|
|
166
|
+
}
|
|
167
|
+
async getPublicKey() {
|
|
168
|
+
return ed25519_exports.getPublicKey(this.privateKey);
|
|
169
|
+
}
|
|
170
|
+
};
|
|
171
|
+
|
|
172
|
+
exports.Ed25519Signer = Ed25519Signer;
|
|
173
|
+
exports.Secp256k1Signer = Secp256k1Signer;
|
|
142
174
|
exports.SignAlgorithm = SignAlgorithm;
|
|
143
175
|
exports.blake2b = blake2b;
|
|
144
176
|
exports.ed25519 = ed25519_exports;
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/hash/index.ts","../src/sign/constant.ts","../src/sign/ed25519.ts","../src/sign/internal.ts","../src/sign/secp256k1.ts","../src/sign/index.ts"],"names":["SignAlgorithm","getPublicKey","signHash"],"mappings":";;;;;;;AAAA,SAAS,WAAW,gBAAgB;AACpC,SAAS,UAAU,eAAe;AAClC,SAAS,YAAY,iBAAiB;AAE/B,SAAS,WAAW,SAA0C;AACjE,SAAO,WAAW,OAAO;AAC7B;AAEO,SAAS,QAAQ,SAA0C;AAC9D,SAAO,SAAS,OAAO;AAC3B;AAEO,SAAS,SAAS,SAA0C;AAC/D,SAAO,UAAU,OAAO;AAC5B;AAEO,SAAS,SAAS,SAA0C;AAC/D,SAAO,QAAQ,OAAO;AAC1B;;;AClBO,IAAK,gBAAL,kBAAKA,mBAAL;AACH,EAAAA,8BAAA;AACA,EAAAA,8BAAA;AACA,EAAAA,8BAAA;AAHQ,SAAAA;AAAA,GAAA;;;ACAZ;AAAA;AAAA,sBAAAC;AAAA,EAAA;AAAA;AAAA,YAAY,aAAa;;;ACMlB,SAAS,oBAAoB,YAA+D;AAC/F,MAAI,OAAO,eAAe,UAAU;AAChC,WAAO,WAAW,QAAQ,OAAO,EAAE;AAAA,EACvC,WAAW,OAAO,eAAe,UAAU;AACvC,WAAO,WAAW,SAAS,EAAE,EAAE,SAAS,IAAI,GAAG;AAAA,EACnD,OAAO;AACH,WAAO;AAAA,EACX;AACJ;;;ADJA,eAAsB,SAAS,MAAkB,YAA+D;AAC5G,MAAI,KAAK,WAAW,IAAI;AACpB,UAAM,IAAI,MAAM,4BAA4B;AAAA,EAChD;AAEA,eAAa,oBAAoB,UAAU;AAC3C,QAAM,SAAS,MAAc,qBAAa,UAAU;AACpD,QAAM,YAAY,MAAc,aAAK,MAAM,UAAU;AACrD,QAAM,UAAU,MAAc,eAAO,WAAW,MAAM,MAAM;AAC5D,MAAI,CAAC,SAAS;AACV,UAAM,IAAI,MAAM,mBAAmB;AAAA,EACvC;AAEA,SAAO;AACX;AAEA,eAAsBA,cAAa,YAA+D;AAC9F,eAAa,oBAAoB,UAAU;AAC3C,SAAe,qBAAa,UAAU;AAC1C;;;AE7BA;AAAA;AAAA,sBAAAA;AAAA,EAAA,gBAAAC;AAAA;AAAA,YAAY,eAAe;AAU3B,eAAsBA,UAAS,MAAkB,YAA+D;AAC5G,MAAI,KAAK,WAAW,IAAI;AACpB,UAAM,IAAI,MAAM,4BAA4B;AAAA,EAChD;AAEA,eAAa,oBAAoB,UAAU;AAC3C,QAAM,SAAmB,uBAAa,YAAY,KAAK;AAGvD,QAAM,CAAC,WAAW,UAAU,IAAI,MAAgB,eAAK,MAAM,YAAY;AAAA;AAAA,IAEnE,WAAW;AAAA;AAAA,IAEX,WAAW;AAAA;AAAA,IAEX,KAAK;AAAA;AAAA,IAEL,cAAc;AAAA,EAClB,CAAC;AAED,QAAM,UAAoB,iBAAO,WAAW,MAAM,QAAQ,EAAE,QAAQ,KAAK,CAAC;AAC1E,MAAI,CAAC,SAAS;AACV,UAAM,IAAI,MAAM,mBAAmB;AAAA,EACvC;AAEA,SAAO,WAAW,KAAK,CAAC,GAAG,WAAW,UAAU,CAAC;AACrD;AAEA,eAAsBD,cAAa,YAA+D;AAC9F,eAAa,oBAAoB,UAAU;AAC3C,SAAO,QAAQ,QAAkB,uBAAa,YAAY,KAAK,CAAC;AACpE;;;ACnCA,eAAsBC,UAClB,MACA,YACA,WACmB;AACnB,MAAI,KAAK,WAAW,IAAI;AACpB,UAAM,IAAI,MAAM,4BAA4B;AAAA,EAChD;AAIA,QAAM,UACF,OAAO,eAAe,WAAW,WAAW,QAAQ,OAAO,EAAE,IAAI,OAAO,KAAK,UAAU,EAAE,SAAS,KAAK;AAC3G,UAAQ,WAAW;AAAA,IACf;AACI,aAAiBA,UAAS,MAAM,OAAO;AACvC;AAAA,IACJ;AACI,aAAe,SAAS,MAAM,OAAO;AACrC;AAAA,IACJ;AACI,YAAM,IAAI,MAAM,0BAA0B,SAAS,EAAE;AAAA,EAC7D;AACJ","sourcesContent":["import { blake2b as _blake2b } from '@noble/hashes/blake2b'\nimport { sha256 as _sha256 } from '@noble/hashes/sha256'\nimport { sha3_256 as _sha3_256 } from '@noble/hashes/sha3'\n\nexport function keccak_256(message: Uint8Array | string): Uint8Array {\n return keccak_256(message)\n}\n\nexport function blake2b(message: Uint8Array | string): Uint8Array {\n return _blake2b(message)\n}\n\nexport function sha3_256(message: Uint8Array | string): Uint8Array {\n return _sha3_256(message)\n}\n\nexport function sha2_256(message: Uint8Array | string): Uint8Array {\n return _sha256(message)\n}\n","export enum SignAlgorithm {\n NATIVE,\n SECP256K1,\n ED25519,\n}\n","import * as ed25519 from '@noble/ed25519'\n\nimport { normalizePrivateKey } from './internal'\n\n/**\n * Sign a hash using ed25519\n * @param hash - 32 bytes long\n * @param privateKey - private key in hex format\n * @returns\n */\nexport async function signHash(hash: Uint8Array, privateKey: string | Uint8Array | bigint): Promise<Uint8Array> {\n if (hash.length !== 32) {\n throw new Error('Hash must be 32 bytes long')\n }\n\n privateKey = normalizePrivateKey(privateKey)\n const pubKey = await ed25519.getPublicKey(privateKey)\n const signature = await ed25519.sign(hash, privateKey)\n const isValid = await ed25519.verify(signature, hash, pubKey)\n if (!isValid) {\n throw new Error('Invalid signature')\n }\n\n return signature\n}\n\nexport async function getPublicKey(privateKey: string | Uint8Array | bigint): Promise<Uint8Array> {\n privateKey = normalizePrivateKey(privateKey)\n return ed25519.getPublicKey(privateKey)\n}\n","/**\n * Normalize the private key to a string or Uint8Array\n * - getPublicKey accepts bigint but sign does not, in ed25519\n * - a string privateKey should not have a 0x prefix, in ed25519\n * @param privateKey\n */\nexport function normalizePrivateKey(privateKey: string | Uint8Array | bigint): string | Uint8Array {\n if (typeof privateKey === 'string') {\n return privateKey.replace(/^0x/, '')\n } else if (typeof privateKey === 'bigint') {\n return privateKey.toString(16).padStart(64, '0') // the private key is 32 bytes for ed25519 and secp256k1\n } else {\n return privateKey\n }\n}\n","import * as secp256k1 from '@noble/secp256k1'\n\nimport { normalizePrivateKey } from './internal'\n\n/**\n * Sign a hash using secp256k1\n * @param hash - 32 bytes long\n * @param privateKey - private key in hex format\n * @returns\n */\nexport async function signHash(hash: Uint8Array, privateKey: string | Uint8Array | bigint): Promise<Uint8Array> {\n if (hash.length !== 32) {\n throw new Error('Hash must be 32 bytes long')\n }\n\n privateKey = normalizePrivateKey(privateKey)\n const pubKey = secp256k1.getPublicKey(privateKey, false)\n\n // refer to: https://github.com/paulmillr/noble-secp256k1/tree/1.7.1#signmsghash-privatekey\n const [signature, recoveryId] = await secp256k1.sign(hash, privateKey, {\n // recovered - true indicates the recovered bit should be included in the result\n recovered: true,\n // canonical - true makes signatures compatible with libsecp256k1, false makes signatures compatible with openssl\n canonical: true,\n // der - whether the returned signature should be in DER format. If false, it would be in Compact format (32-byte r + 32-byte s)\n der: false,\n // extraEntropy - When true, it would automatically be filled with 32 bytes of cryptographically secure entropy. Strongly recommended to pass true to improve security:\n extraEntropy: undefined,\n })\n\n const isValid = secp256k1.verify(signature, hash, pubKey, { strict: true })\n if (!isValid) {\n throw new Error('Invalid signature')\n }\n\n return Uint8Array.from([...signature, recoveryId])\n}\n\nexport async function getPublicKey(privateKey: string | Uint8Array | bigint): Promise<Uint8Array> {\n privateKey = normalizePrivateKey(privateKey)\n return Promise.resolve(secp256k1.getPublicKey(privateKey, false))\n}\n","import { SignAlgorithm } from './constant'\nexport * from './keypair'\nexport * from './constant'\nimport * as ed25519 from './ed25519'\nimport * as secp256k1 from './secp256k1'\n\nexport async function signHash(\n hash: Uint8Array,\n privateKey: string | Uint8Array,\n algorithm: SignAlgorithm\n): Promise<Uint8Array> {\n if (hash.length !== 32) {\n throw new Error('Hash must be 32 bytes long')\n }\n\n // privKey should be a hex string without 0x prefix\n // refer to: https://github.com/paulmillr/noble-secp256k1/blob/5ed251242bf065aeb22a54bb42eee1f67e7c77ce/index.ts#L130\n const privKey =\n typeof privateKey === 'string' ? privateKey.replace(/^0x/, '') : Buffer.from(privateKey).toString('hex')\n switch (algorithm) {\n case SignAlgorithm.SECP256K1:\n return secp256k1.signHash(hash, privKey)\n break\n case SignAlgorithm.ED25519:\n return ed25519.signHash(hash, privKey)\n break\n default:\n throw new Error(`Unsupported algorithm: ${algorithm}`)\n }\n}\n\nexport { secp256k1, ed25519 }\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/hash/index.ts","../src/sign/constant.ts","../src/sign/ed25519.ts","../src/sign/internal.ts","../src/sign/secp256k1.ts","../src/sign/index.ts","../src/signer.ts"],"names":["SignAlgorithm","getPublicKey","signHash"],"mappings":"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","sourcesContent":["import { blake2b as _blake2b } from '@noble/hashes/blake2b'\nimport { sha256 as _sha256 } from '@noble/hashes/sha256'\nimport { sha3_256 as _sha3_256 } from '@noble/hashes/sha3'\n\nexport function keccak_256(message: Uint8Array | string): Uint8Array {\n return keccak_256(message)\n}\n\nexport function blake2b(message: Uint8Array | string): Uint8Array {\n return _blake2b(message)\n}\n\nexport function sha3_256(message: Uint8Array | string): Uint8Array {\n return _sha3_256(message)\n}\n\nexport function sha2_256(message: Uint8Array | string): Uint8Array {\n return _sha256(message)\n}\n","export enum SignAlgorithm {\n NATIVE,\n SECP256K1,\n ED25519,\n}\n","import * as ed25519 from '@noble/ed25519'\n\nimport { normalizePrivateKey } from './internal'\n\n/**\n * Sign a hash using ed25519\n * @param hash - 32 bytes long\n * @param privateKey - private key in hex format\n * @returns\n */\nexport async function signHash(hash: Uint8Array, privateKey: string | Uint8Array | bigint): Promise<Uint8Array> {\n if (hash.length !== 32) {\n throw new Error('Hash must be 32 bytes long')\n }\n\n privateKey = normalizePrivateKey(privateKey)\n const pubKey = await ed25519.getPublicKey(privateKey)\n const signature = await ed25519.sign(hash, privateKey)\n const isValid = await ed25519.verify(signature, hash, pubKey)\n if (!isValid) {\n throw new Error('Invalid signature')\n }\n\n return signature\n}\n\nexport async function getPublicKey(privateKey: string | Uint8Array | bigint): Promise<Uint8Array> {\n privateKey = normalizePrivateKey(privateKey)\n return ed25519.getPublicKey(privateKey)\n}\n","/**\n * Normalize the private key to a string or Uint8Array\n * - getPublicKey accepts bigint but sign does not, in ed25519\n * - a string privateKey should not have a 0x prefix, in ed25519\n * @param privateKey\n */\nexport function normalizePrivateKey(privateKey: string | Uint8Array | bigint): string | Uint8Array {\n if (typeof privateKey === 'string') {\n return privateKey.replace(/^0x/, '')\n } else if (typeof privateKey === 'bigint') {\n return privateKey.toString(16).padStart(64, '0') // the private key is 32 bytes for ed25519 and secp256k1\n } else {\n return privateKey\n }\n}\n","import * as secp256k1 from '@noble/secp256k1'\n\nimport { normalizePrivateKey } from './internal'\n\n/**\n * Sign a hash using secp256k1\n * @param hash - 32 bytes long\n * @param privateKey - private key in hex format\n * @returns\n */\nexport async function signHash(hash: Uint8Array, privateKey: string | Uint8Array | bigint): Promise<Uint8Array> {\n if (hash.length !== 32) {\n throw new Error('Hash must be 32 bytes long')\n }\n\n privateKey = normalizePrivateKey(privateKey)\n const pubKey = secp256k1.getPublicKey(privateKey, false)\n\n // refer to: https://github.com/paulmillr/noble-secp256k1/tree/1.7.1#signmsghash-privatekey\n const [signature, recoveryId] = await secp256k1.sign(hash, privateKey, {\n // recovered - true indicates the recovered bit should be included in the result\n recovered: true,\n // canonical - true makes signatures compatible with libsecp256k1, false makes signatures compatible with openssl\n canonical: true,\n // der - whether the returned signature should be in DER format. If false, it would be in Compact format (32-byte r + 32-byte s)\n der: false,\n // extraEntropy - When true, it would automatically be filled with 32 bytes of cryptographically secure entropy. Strongly recommended to pass true to improve security:\n extraEntropy: undefined,\n })\n\n const isValid = secp256k1.verify(signature, hash, pubKey, { strict: true })\n if (!isValid) {\n throw new Error('Invalid signature')\n }\n\n return Uint8Array.from([...signature, recoveryId])\n}\n\nexport async function getPublicKey(privateKey: string | Uint8Array | bigint): Promise<Uint8Array> {\n privateKey = normalizePrivateKey(privateKey)\n return Promise.resolve(secp256k1.getPublicKey(privateKey, false))\n}\n","import { SignAlgorithm } from './constant'\nexport * from './keypair'\nexport * from './constant'\nimport * as ed25519 from './ed25519'\nimport * as secp256k1 from './secp256k1'\n\nexport async function signHash(\n hash: Uint8Array,\n privateKey: string | Uint8Array,\n algorithm: SignAlgorithm\n): Promise<Uint8Array> {\n if (hash.length !== 32) {\n throw new Error('Hash must be 32 bytes long')\n }\n\n // privKey should be a hex string without 0x prefix\n // refer to: https://github.com/paulmillr/noble-secp256k1/blob/5ed251242bf065aeb22a54bb42eee1f67e7c77ce/index.ts#L130\n const privKey =\n typeof privateKey === 'string' ? privateKey.replace(/^0x/, '') : Buffer.from(privateKey).toString('hex')\n switch (algorithm) {\n case SignAlgorithm.SECP256K1:\n return secp256k1.signHash(hash, privKey)\n break\n case SignAlgorithm.ED25519:\n return ed25519.signHash(hash, privKey)\n break\n default:\n throw new Error(`Unsupported algorithm: ${algorithm}`)\n }\n}\n\nexport { secp256k1, ed25519 }\n","import { ed25519, secp256k1 } from './sign'\n/**\n * Interface for signing a hash.\n */\nexport interface HashSigner {\n /**\n * signHash signs a hash\n * @param hash - 32 bytes long\n */\n signHash(hash: Uint8Array): Promise<Uint8Array>\n\n /**\n * publicKey returns the public key of the signer\n */\n getPublicKey(): Promise<Uint8Array>\n}\n\nexport class Secp256k1Signer implements HashSigner {\n private constructor(private readonly privateKey: Uint8Array) {}\n\n static from(privatekey: Uint8Array): Secp256k1Signer {\n return new Secp256k1Signer(privatekey)\n }\n\n async getPublicKey(): Promise<Uint8Array> {\n return secp256k1.getPublicKey(this.privateKey)\n }\n\n async signHash(hash: Uint8Array): Promise<Uint8Array> {\n return secp256k1.signHash(hash, this.privateKey)\n }\n}\n\nexport class Ed25519Signer implements HashSigner {\n private constructor(private readonly privateKey: Uint8Array) {}\n\n static from(privateKey: Uint8Array): Ed25519Signer {\n return new Ed25519Signer(privateKey)\n }\n\n async signHash(hash: Uint8Array): Promise<Uint8Array> {\n return ed25519.signHash(hash, this.privateKey)\n }\n\n async getPublicKey(): Promise<Uint8Array> {\n return ed25519.getPublicKey(this.privateKey)\n }\n}\n"]}
|
package/dist/index.d.mts
CHANGED
|
@@ -43,4 +43,33 @@ declare namespace secp256k1 {
|
|
|
43
43
|
|
|
44
44
|
declare function signHash(hash: Uint8Array, privateKey: string | Uint8Array, algorithm: SignAlgorithm): Promise<Uint8Array>;
|
|
45
45
|
|
|
46
|
-
|
|
46
|
+
/**
|
|
47
|
+
* Interface for signing a hash.
|
|
48
|
+
*/
|
|
49
|
+
interface HashSigner {
|
|
50
|
+
/**
|
|
51
|
+
* signHash signs a hash
|
|
52
|
+
* @param hash - 32 bytes long
|
|
53
|
+
*/
|
|
54
|
+
signHash(hash: Uint8Array): Promise<Uint8Array>;
|
|
55
|
+
/**
|
|
56
|
+
* publicKey returns the public key of the signer
|
|
57
|
+
*/
|
|
58
|
+
getPublicKey(): Promise<Uint8Array>;
|
|
59
|
+
}
|
|
60
|
+
declare class Secp256k1Signer implements HashSigner {
|
|
61
|
+
private readonly privateKey;
|
|
62
|
+
private constructor();
|
|
63
|
+
static from(privatekey: Uint8Array): Secp256k1Signer;
|
|
64
|
+
getPublicKey(): Promise<Uint8Array>;
|
|
65
|
+
signHash(hash: Uint8Array): Promise<Uint8Array>;
|
|
66
|
+
}
|
|
67
|
+
declare class Ed25519Signer implements HashSigner {
|
|
68
|
+
private readonly privateKey;
|
|
69
|
+
private constructor();
|
|
70
|
+
static from(privateKey: Uint8Array): Ed25519Signer;
|
|
71
|
+
signHash(hash: Uint8Array): Promise<Uint8Array>;
|
|
72
|
+
getPublicKey(): Promise<Uint8Array>;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
export { Ed25519Signer, type HashSigner, type KeyPair, Secp256k1Signer, SignAlgorithm, blake2b, ed25519, keccak_256, secp256k1, sha2_256, sha3_256, signHash };
|
package/dist/index.d.ts
CHANGED
|
@@ -43,4 +43,33 @@ declare namespace secp256k1 {
|
|
|
43
43
|
|
|
44
44
|
declare function signHash(hash: Uint8Array, privateKey: string | Uint8Array, algorithm: SignAlgorithm): Promise<Uint8Array>;
|
|
45
45
|
|
|
46
|
-
|
|
46
|
+
/**
|
|
47
|
+
* Interface for signing a hash.
|
|
48
|
+
*/
|
|
49
|
+
interface HashSigner {
|
|
50
|
+
/**
|
|
51
|
+
* signHash signs a hash
|
|
52
|
+
* @param hash - 32 bytes long
|
|
53
|
+
*/
|
|
54
|
+
signHash(hash: Uint8Array): Promise<Uint8Array>;
|
|
55
|
+
/**
|
|
56
|
+
* publicKey returns the public key of the signer
|
|
57
|
+
*/
|
|
58
|
+
getPublicKey(): Promise<Uint8Array>;
|
|
59
|
+
}
|
|
60
|
+
declare class Secp256k1Signer implements HashSigner {
|
|
61
|
+
private readonly privateKey;
|
|
62
|
+
private constructor();
|
|
63
|
+
static from(privatekey: Uint8Array): Secp256k1Signer;
|
|
64
|
+
getPublicKey(): Promise<Uint8Array>;
|
|
65
|
+
signHash(hash: Uint8Array): Promise<Uint8Array>;
|
|
66
|
+
}
|
|
67
|
+
declare class Ed25519Signer implements HashSigner {
|
|
68
|
+
private readonly privateKey;
|
|
69
|
+
private constructor();
|
|
70
|
+
static from(privateKey: Uint8Array): Ed25519Signer;
|
|
71
|
+
signHash(hash: Uint8Array): Promise<Uint8Array>;
|
|
72
|
+
getPublicKey(): Promise<Uint8Array>;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
export { Ed25519Signer, type HashSigner, type KeyPair, Secp256k1Signer, SignAlgorithm, blake2b, ed25519, keccak_256, secp256k1, sha2_256, sha3_256, signHash };
|
package/dist/index.mjs
CHANGED
|
@@ -116,6 +116,36 @@ async function signHash3(hash, privateKey, algorithm) {
|
|
|
116
116
|
}
|
|
117
117
|
}
|
|
118
118
|
|
|
119
|
-
|
|
119
|
+
// src/signer.ts
|
|
120
|
+
var Secp256k1Signer = class _Secp256k1Signer {
|
|
121
|
+
constructor(privateKey) {
|
|
122
|
+
this.privateKey = privateKey;
|
|
123
|
+
}
|
|
124
|
+
static from(privatekey) {
|
|
125
|
+
return new _Secp256k1Signer(privatekey);
|
|
126
|
+
}
|
|
127
|
+
async getPublicKey() {
|
|
128
|
+
return secp256k1_exports.getPublicKey(this.privateKey);
|
|
129
|
+
}
|
|
130
|
+
async signHash(hash) {
|
|
131
|
+
return secp256k1_exports.signHash(hash, this.privateKey);
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
var Ed25519Signer = class _Ed25519Signer {
|
|
135
|
+
constructor(privateKey) {
|
|
136
|
+
this.privateKey = privateKey;
|
|
137
|
+
}
|
|
138
|
+
static from(privateKey) {
|
|
139
|
+
return new _Ed25519Signer(privateKey);
|
|
140
|
+
}
|
|
141
|
+
async signHash(hash) {
|
|
142
|
+
return ed25519_exports.signHash(hash, this.privateKey);
|
|
143
|
+
}
|
|
144
|
+
async getPublicKey() {
|
|
145
|
+
return ed25519_exports.getPublicKey(this.privateKey);
|
|
146
|
+
}
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
export { Ed25519Signer, Secp256k1Signer, SignAlgorithm, blake2b, ed25519_exports as ed25519, keccak_256, secp256k1_exports as secp256k1, sha2_256, sha3_256, signHash3 as signHash };
|
|
120
150
|
//# sourceMappingURL=out.js.map
|
|
121
151
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/hash/index.ts","../src/sign/constant.ts","../src/sign/ed25519.ts","../src/sign/internal.ts","../src/sign/secp256k1.ts","../src/sign/index.ts"],"names":["SignAlgorithm","getPublicKey","signHash"],"mappings":";;;;;;;AAAA,SAAS,WAAW,gBAAgB;AACpC,SAAS,UAAU,eAAe;AAClC,SAAS,YAAY,iBAAiB;AAE/B,SAAS,WAAW,SAA0C;AACjE,SAAO,WAAW,OAAO;AAC7B;AAEO,SAAS,QAAQ,SAA0C;AAC9D,SAAO,SAAS,OAAO;AAC3B;AAEO,SAAS,SAAS,SAA0C;AAC/D,SAAO,UAAU,OAAO;AAC5B;AAEO,SAAS,SAAS,SAA0C;AAC/D,SAAO,QAAQ,OAAO;AAC1B;;;AClBO,IAAK,gBAAL,kBAAKA,mBAAL;AACH,EAAAA,8BAAA;AACA,EAAAA,8BAAA;AACA,EAAAA,8BAAA;AAHQ,SAAAA;AAAA,GAAA;;;ACAZ;AAAA;AAAA,sBAAAC;AAAA,EAAA;AAAA;AAAA,YAAY,aAAa;;;ACMlB,SAAS,oBAAoB,YAA+D;AAC/F,MAAI,OAAO,eAAe,UAAU;AAChC,WAAO,WAAW,QAAQ,OAAO,EAAE;AAAA,EACvC,WAAW,OAAO,eAAe,UAAU;AACvC,WAAO,WAAW,SAAS,EAAE,EAAE,SAAS,IAAI,GAAG;AAAA,EACnD,OAAO;AACH,WAAO;AAAA,EACX;AACJ;;;ADJA,eAAsB,SAAS,MAAkB,YAA+D;AAC5G,MAAI,KAAK,WAAW,IAAI;AACpB,UAAM,IAAI,MAAM,4BAA4B;AAAA,EAChD;AAEA,eAAa,oBAAoB,UAAU;AAC3C,QAAM,SAAS,MAAc,qBAAa,UAAU;AACpD,QAAM,YAAY,MAAc,aAAK,MAAM,UAAU;AACrD,QAAM,UAAU,MAAc,eAAO,WAAW,MAAM,MAAM;AAC5D,MAAI,CAAC,SAAS;AACV,UAAM,IAAI,MAAM,mBAAmB;AAAA,EACvC;AAEA,SAAO;AACX;AAEA,eAAsBA,cAAa,YAA+D;AAC9F,eAAa,oBAAoB,UAAU;AAC3C,SAAe,qBAAa,UAAU;AAC1C;;;AE7BA;AAAA;AAAA,sBAAAA;AAAA,EAAA,gBAAAC;AAAA;AAAA,YAAY,eAAe;AAU3B,eAAsBA,UAAS,MAAkB,YAA+D;AAC5G,MAAI,KAAK,WAAW,IAAI;AACpB,UAAM,IAAI,MAAM,4BAA4B;AAAA,EAChD;AAEA,eAAa,oBAAoB,UAAU;AAC3C,QAAM,SAAmB,uBAAa,YAAY,KAAK;AAGvD,QAAM,CAAC,WAAW,UAAU,IAAI,MAAgB,eAAK,MAAM,YAAY;AAAA;AAAA,IAEnE,WAAW;AAAA;AAAA,IAEX,WAAW;AAAA;AAAA,IAEX,KAAK;AAAA;AAAA,IAEL,cAAc;AAAA,EAClB,CAAC;AAED,QAAM,UAAoB,iBAAO,WAAW,MAAM,QAAQ,EAAE,QAAQ,KAAK,CAAC;AAC1E,MAAI,CAAC,SAAS;AACV,UAAM,IAAI,MAAM,mBAAmB;AAAA,EACvC;AAEA,SAAO,WAAW,KAAK,CAAC,GAAG,WAAW,UAAU,CAAC;AACrD;AAEA,eAAsBD,cAAa,YAA+D;AAC9F,eAAa,oBAAoB,UAAU;AAC3C,SAAO,QAAQ,QAAkB,uBAAa,YAAY,KAAK,CAAC;AACpE;;;ACnCA,eAAsBC,UAClB,MACA,YACA,WACmB;AACnB,MAAI,KAAK,WAAW,IAAI;AACpB,UAAM,IAAI,MAAM,4BAA4B;AAAA,EAChD;AAIA,QAAM,UACF,OAAO,eAAe,WAAW,WAAW,QAAQ,OAAO,EAAE,IAAI,OAAO,KAAK,UAAU,EAAE,SAAS,KAAK;AAC3G,UAAQ,WAAW;AAAA,IACf;AACI,aAAiBA,UAAS,MAAM,OAAO;AACvC;AAAA,IACJ;AACI,aAAe,SAAS,MAAM,OAAO;AACrC;AAAA,IACJ;AACI,YAAM,IAAI,MAAM,0BAA0B,SAAS,EAAE;AAAA,EAC7D;AACJ","sourcesContent":["import { blake2b as _blake2b } from '@noble/hashes/blake2b'\nimport { sha256 as _sha256 } from '@noble/hashes/sha256'\nimport { sha3_256 as _sha3_256 } from '@noble/hashes/sha3'\n\nexport function keccak_256(message: Uint8Array | string): Uint8Array {\n return keccak_256(message)\n}\n\nexport function blake2b(message: Uint8Array | string): Uint8Array {\n return _blake2b(message)\n}\n\nexport function sha3_256(message: Uint8Array | string): Uint8Array {\n return _sha3_256(message)\n}\n\nexport function sha2_256(message: Uint8Array | string): Uint8Array {\n return _sha256(message)\n}\n","export enum SignAlgorithm {\n NATIVE,\n SECP256K1,\n ED25519,\n}\n","import * as ed25519 from '@noble/ed25519'\n\nimport { normalizePrivateKey } from './internal'\n\n/**\n * Sign a hash using ed25519\n * @param hash - 32 bytes long\n * @param privateKey - private key in hex format\n * @returns\n */\nexport async function signHash(hash: Uint8Array, privateKey: string | Uint8Array | bigint): Promise<Uint8Array> {\n if (hash.length !== 32) {\n throw new Error('Hash must be 32 bytes long')\n }\n\n privateKey = normalizePrivateKey(privateKey)\n const pubKey = await ed25519.getPublicKey(privateKey)\n const signature = await ed25519.sign(hash, privateKey)\n const isValid = await ed25519.verify(signature, hash, pubKey)\n if (!isValid) {\n throw new Error('Invalid signature')\n }\n\n return signature\n}\n\nexport async function getPublicKey(privateKey: string | Uint8Array | bigint): Promise<Uint8Array> {\n privateKey = normalizePrivateKey(privateKey)\n return ed25519.getPublicKey(privateKey)\n}\n","/**\n * Normalize the private key to a string or Uint8Array\n * - getPublicKey accepts bigint but sign does not, in ed25519\n * - a string privateKey should not have a 0x prefix, in ed25519\n * @param privateKey\n */\nexport function normalizePrivateKey(privateKey: string | Uint8Array | bigint): string | Uint8Array {\n if (typeof privateKey === 'string') {\n return privateKey.replace(/^0x/, '')\n } else if (typeof privateKey === 'bigint') {\n return privateKey.toString(16).padStart(64, '0') // the private key is 32 bytes for ed25519 and secp256k1\n } else {\n return privateKey\n }\n}\n","import * as secp256k1 from '@noble/secp256k1'\n\nimport { normalizePrivateKey } from './internal'\n\n/**\n * Sign a hash using secp256k1\n * @param hash - 32 bytes long\n * @param privateKey - private key in hex format\n * @returns\n */\nexport async function signHash(hash: Uint8Array, privateKey: string | Uint8Array | bigint): Promise<Uint8Array> {\n if (hash.length !== 32) {\n throw new Error('Hash must be 32 bytes long')\n }\n\n privateKey = normalizePrivateKey(privateKey)\n const pubKey = secp256k1.getPublicKey(privateKey, false)\n\n // refer to: https://github.com/paulmillr/noble-secp256k1/tree/1.7.1#signmsghash-privatekey\n const [signature, recoveryId] = await secp256k1.sign(hash, privateKey, {\n // recovered - true indicates the recovered bit should be included in the result\n recovered: true,\n // canonical - true makes signatures compatible with libsecp256k1, false makes signatures compatible with openssl\n canonical: true,\n // der - whether the returned signature should be in DER format. If false, it would be in Compact format (32-byte r + 32-byte s)\n der: false,\n // extraEntropy - When true, it would automatically be filled with 32 bytes of cryptographically secure entropy. Strongly recommended to pass true to improve security:\n extraEntropy: undefined,\n })\n\n const isValid = secp256k1.verify(signature, hash, pubKey, { strict: true })\n if (!isValid) {\n throw new Error('Invalid signature')\n }\n\n return Uint8Array.from([...signature, recoveryId])\n}\n\nexport async function getPublicKey(privateKey: string | Uint8Array | bigint): Promise<Uint8Array> {\n privateKey = normalizePrivateKey(privateKey)\n return Promise.resolve(secp256k1.getPublicKey(privateKey, false))\n}\n","import { SignAlgorithm } from './constant'\nexport * from './keypair'\nexport * from './constant'\nimport * as ed25519 from './ed25519'\nimport * as secp256k1 from './secp256k1'\n\nexport async function signHash(\n hash: Uint8Array,\n privateKey: string | Uint8Array,\n algorithm: SignAlgorithm\n): Promise<Uint8Array> {\n if (hash.length !== 32) {\n throw new Error('Hash must be 32 bytes long')\n }\n\n // privKey should be a hex string without 0x prefix\n // refer to: https://github.com/paulmillr/noble-secp256k1/blob/5ed251242bf065aeb22a54bb42eee1f67e7c77ce/index.ts#L130\n const privKey =\n typeof privateKey === 'string' ? privateKey.replace(/^0x/, '') : Buffer.from(privateKey).toString('hex')\n switch (algorithm) {\n case SignAlgorithm.SECP256K1:\n return secp256k1.signHash(hash, privKey)\n break\n case SignAlgorithm.ED25519:\n return ed25519.signHash(hash, privKey)\n break\n default:\n throw new Error(`Unsupported algorithm: ${algorithm}`)\n }\n}\n\nexport { secp256k1, ed25519 }\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/hash/index.ts","../src/sign/constant.ts","../src/sign/ed25519.ts","../src/sign/internal.ts","../src/sign/secp256k1.ts","../src/sign/index.ts","../src/signer.ts"],"names":["SignAlgorithm","getPublicKey","signHash"],"mappings":"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","sourcesContent":["import { blake2b as _blake2b } from '@noble/hashes/blake2b'\nimport { sha256 as _sha256 } from '@noble/hashes/sha256'\nimport { sha3_256 as _sha3_256 } from '@noble/hashes/sha3'\n\nexport function keccak_256(message: Uint8Array | string): Uint8Array {\n return keccak_256(message)\n}\n\nexport function blake2b(message: Uint8Array | string): Uint8Array {\n return _blake2b(message)\n}\n\nexport function sha3_256(message: Uint8Array | string): Uint8Array {\n return _sha3_256(message)\n}\n\nexport function sha2_256(message: Uint8Array | string): Uint8Array {\n return _sha256(message)\n}\n","export enum SignAlgorithm {\n NATIVE,\n SECP256K1,\n ED25519,\n}\n","import * as ed25519 from '@noble/ed25519'\n\nimport { normalizePrivateKey } from './internal'\n\n/**\n * Sign a hash using ed25519\n * @param hash - 32 bytes long\n * @param privateKey - private key in hex format\n * @returns\n */\nexport async function signHash(hash: Uint8Array, privateKey: string | Uint8Array | bigint): Promise<Uint8Array> {\n if (hash.length !== 32) {\n throw new Error('Hash must be 32 bytes long')\n }\n\n privateKey = normalizePrivateKey(privateKey)\n const pubKey = await ed25519.getPublicKey(privateKey)\n const signature = await ed25519.sign(hash, privateKey)\n const isValid = await ed25519.verify(signature, hash, pubKey)\n if (!isValid) {\n throw new Error('Invalid signature')\n }\n\n return signature\n}\n\nexport async function getPublicKey(privateKey: string | Uint8Array | bigint): Promise<Uint8Array> {\n privateKey = normalizePrivateKey(privateKey)\n return ed25519.getPublicKey(privateKey)\n}\n","/**\n * Normalize the private key to a string or Uint8Array\n * - getPublicKey accepts bigint but sign does not, in ed25519\n * - a string privateKey should not have a 0x prefix, in ed25519\n * @param privateKey\n */\nexport function normalizePrivateKey(privateKey: string | Uint8Array | bigint): string | Uint8Array {\n if (typeof privateKey === 'string') {\n return privateKey.replace(/^0x/, '')\n } else if (typeof privateKey === 'bigint') {\n return privateKey.toString(16).padStart(64, '0') // the private key is 32 bytes for ed25519 and secp256k1\n } else {\n return privateKey\n }\n}\n","import * as secp256k1 from '@noble/secp256k1'\n\nimport { normalizePrivateKey } from './internal'\n\n/**\n * Sign a hash using secp256k1\n * @param hash - 32 bytes long\n * @param privateKey - private key in hex format\n * @returns\n */\nexport async function signHash(hash: Uint8Array, privateKey: string | Uint8Array | bigint): Promise<Uint8Array> {\n if (hash.length !== 32) {\n throw new Error('Hash must be 32 bytes long')\n }\n\n privateKey = normalizePrivateKey(privateKey)\n const pubKey = secp256k1.getPublicKey(privateKey, false)\n\n // refer to: https://github.com/paulmillr/noble-secp256k1/tree/1.7.1#signmsghash-privatekey\n const [signature, recoveryId] = await secp256k1.sign(hash, privateKey, {\n // recovered - true indicates the recovered bit should be included in the result\n recovered: true,\n // canonical - true makes signatures compatible with libsecp256k1, false makes signatures compatible with openssl\n canonical: true,\n // der - whether the returned signature should be in DER format. If false, it would be in Compact format (32-byte r + 32-byte s)\n der: false,\n // extraEntropy - When true, it would automatically be filled with 32 bytes of cryptographically secure entropy. Strongly recommended to pass true to improve security:\n extraEntropy: undefined,\n })\n\n const isValid = secp256k1.verify(signature, hash, pubKey, { strict: true })\n if (!isValid) {\n throw new Error('Invalid signature')\n }\n\n return Uint8Array.from([...signature, recoveryId])\n}\n\nexport async function getPublicKey(privateKey: string | Uint8Array | bigint): Promise<Uint8Array> {\n privateKey = normalizePrivateKey(privateKey)\n return Promise.resolve(secp256k1.getPublicKey(privateKey, false))\n}\n","import { SignAlgorithm } from './constant'\nexport * from './keypair'\nexport * from './constant'\nimport * as ed25519 from './ed25519'\nimport * as secp256k1 from './secp256k1'\n\nexport async function signHash(\n hash: Uint8Array,\n privateKey: string | Uint8Array,\n algorithm: SignAlgorithm\n): Promise<Uint8Array> {\n if (hash.length !== 32) {\n throw new Error('Hash must be 32 bytes long')\n }\n\n // privKey should be a hex string without 0x prefix\n // refer to: https://github.com/paulmillr/noble-secp256k1/blob/5ed251242bf065aeb22a54bb42eee1f67e7c77ce/index.ts#L130\n const privKey =\n typeof privateKey === 'string' ? privateKey.replace(/^0x/, '') : Buffer.from(privateKey).toString('hex')\n switch (algorithm) {\n case SignAlgorithm.SECP256K1:\n return secp256k1.signHash(hash, privKey)\n break\n case SignAlgorithm.ED25519:\n return ed25519.signHash(hash, privKey)\n break\n default:\n throw new Error(`Unsupported algorithm: ${algorithm}`)\n }\n}\n\nexport { secp256k1, ed25519 }\n","import { ed25519, secp256k1 } from './sign'\n/**\n * Interface for signing a hash.\n */\nexport interface HashSigner {\n /**\n * signHash signs a hash\n * @param hash - 32 bytes long\n */\n signHash(hash: Uint8Array): Promise<Uint8Array>\n\n /**\n * publicKey returns the public key of the signer\n */\n getPublicKey(): Promise<Uint8Array>\n}\n\nexport class Secp256k1Signer implements HashSigner {\n private constructor(private readonly privateKey: Uint8Array) {}\n\n static from(privatekey: Uint8Array): Secp256k1Signer {\n return new Secp256k1Signer(privatekey)\n }\n\n async getPublicKey(): Promise<Uint8Array> {\n return secp256k1.getPublicKey(this.privateKey)\n }\n\n async signHash(hash: Uint8Array): Promise<Uint8Array> {\n return secp256k1.signHash(hash, this.privateKey)\n }\n}\n\nexport class Ed25519Signer implements HashSigner {\n private constructor(private readonly privateKey: Uint8Array) {}\n\n static from(privateKey: Uint8Array): Ed25519Signer {\n return new Ed25519Signer(privateKey)\n }\n\n async signHash(hash: Uint8Array): Promise<Uint8Array> {\n return ed25519.signHash(hash, this.privateKey)\n }\n\n async getPublicKey(): Promise<Uint8Array> {\n return ed25519.getPublicKey(this.privateKey)\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@layerzerolabs/lz-foundation",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.5",
|
|
4
4
|
"description": "LayerZero Core Library",
|
|
5
5
|
"license": "BUSL-1.1",
|
|
6
6
|
"exports": {
|
|
@@ -23,16 +23,16 @@
|
|
|
23
23
|
"clean-prebuild": "rimraf dist"
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"@layerzerolabs/lz-definitions": "^3.0.
|
|
27
|
-
"@layerzerolabs/lz-utilities": "^3.0.
|
|
26
|
+
"@layerzerolabs/lz-definitions": "^3.0.5",
|
|
27
|
+
"@layerzerolabs/lz-utilities": "^3.0.5",
|
|
28
28
|
"@noble/ed25519": "^1.7.1",
|
|
29
29
|
"@noble/hashes": "^1.3.2",
|
|
30
30
|
"@noble/secp256k1": "^1.7.1"
|
|
31
31
|
},
|
|
32
32
|
"devDependencies": {
|
|
33
33
|
"@jest/globals": "^29.7.0",
|
|
34
|
-
"@layerzerolabs/tsup-config-next": "^3.0.
|
|
35
|
-
"@layerzerolabs/typescript-config-next": "^3.0.
|
|
34
|
+
"@layerzerolabs/tsup-config-next": "^3.0.5",
|
|
35
|
+
"@layerzerolabs/typescript-config-next": "^3.0.5",
|
|
36
36
|
"@types/jest": "^29.5.10",
|
|
37
37
|
"jest": "^29.7.0",
|
|
38
38
|
"rimraf": "^5.0.5",
|