ox 0.8.0 → 0.8.2
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 +20 -0
- package/Ed25519/package.json +6 -0
- package/X25519/package.json +6 -0
- package/_cjs/core/Bls.js +10 -0
- package/_cjs/core/Bls.js.map +1 -1
- package/_cjs/core/Ed25519.js +53 -0
- package/_cjs/core/Ed25519.js.map +1 -0
- package/_cjs/core/Keystore.js +65 -5
- package/_cjs/core/Keystore.js.map +1 -1
- package/_cjs/core/P256.js +23 -0
- package/_cjs/core/P256.js.map +1 -1
- package/_cjs/core/Secp256k1.js +20 -0
- package/_cjs/core/Secp256k1.js.map +1 -1
- package/_cjs/core/WebCryptoP256.js +31 -0
- package/_cjs/core/WebCryptoP256.js.map +1 -1
- package/_cjs/core/X25519.js +45 -0
- package/_cjs/core/X25519.js.map +1 -0
- package/_cjs/index.js +4 -2
- package/_cjs/index.js.map +1 -1
- package/_cjs/version.js +1 -1
- package/_esm/core/Bls.js +109 -0
- package/_esm/core/Bls.js.map +1 -1
- package/_esm/core/Ed25519.js +121 -0
- package/_esm/core/Ed25519.js.map +1 -0
- package/_esm/core/Keystore.js +107 -9
- package/_esm/core/Keystore.js.map +1 -1
- package/_esm/core/P256.js +54 -2
- package/_esm/core/P256.js.map +1 -1
- package/_esm/core/Secp256k1.js +50 -0
- package/_esm/core/Secp256k1.js.map +1 -1
- package/_esm/core/WebCryptoP256.js +72 -0
- package/_esm/core/WebCryptoP256.js.map +1 -1
- package/_esm/core/X25519.js +97 -0
- package/_esm/core/X25519.js.map +1 -0
- package/_esm/index.js +85 -4
- package/_esm/index.js.map +1 -1
- package/_esm/version.js +1 -1
- package/_types/core/Bls.d.ts +124 -0
- package/_types/core/Bls.d.ts.map +1 -1
- package/_types/core/Ed25519.d.ts +156 -0
- package/_types/core/Ed25519.d.ts.map +1 -0
- package/_types/core/Keystore.d.ts +66 -8
- package/_types/core/Keystore.d.ts.map +1 -1
- package/_types/core/P256.d.ts +68 -2
- package/_types/core/P256.d.ts.map +1 -1
- package/_types/core/Secp256k1.d.ts +67 -0
- package/_types/core/Secp256k1.d.ts.map +1 -1
- package/_types/core/WebCryptoP256.d.ts +76 -1
- package/_types/core/WebCryptoP256.d.ts.map +1 -1
- package/_types/core/X25519.d.ts +127 -0
- package/_types/core/X25519.d.ts.map +1 -0
- package/_types/index.d.ts +85 -4
- package/_types/index.d.ts.map +1 -1
- package/_types/version.d.ts +1 -1
- package/core/Bls.ts +150 -0
- package/core/Ed25519.ts +237 -0
- package/core/Keystore.ts +141 -12
- package/core/P256.ts +114 -2
- package/core/Secp256k1.ts +110 -0
- package/core/WebCryptoP256.ts +141 -1
- package/core/X25519.ts +202 -0
- package/index.ts +87 -4
- package/package.json +11 -1
- package/version.ts +1 -1
package/_esm/core/Bls.js
CHANGED
|
@@ -13,6 +13,115 @@ export function aggregate(points) {
|
|
|
13
13
|
z: point.pz,
|
|
14
14
|
};
|
|
15
15
|
}
|
|
16
|
+
/**
|
|
17
|
+
* Creates a new BLS12-381 key pair consisting of a private key and its corresponding public key.
|
|
18
|
+
*
|
|
19
|
+
* - G1 Point (Default):
|
|
20
|
+
* - short (48 bytes)
|
|
21
|
+
* - computes longer G2 Signatures (96 bytes)
|
|
22
|
+
* - G2 Point:
|
|
23
|
+
* - long (96 bytes)
|
|
24
|
+
* - computes short G1 Signatures (48 bytes)
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ### Short G1 Public Keys (Default)
|
|
28
|
+
*
|
|
29
|
+
* ```ts twoslash
|
|
30
|
+
* import { Bls } from 'ox'
|
|
31
|
+
*
|
|
32
|
+
* const { publicKey } = Bls.createKeyPair()
|
|
33
|
+
* // ^?
|
|
34
|
+
*
|
|
35
|
+
*
|
|
36
|
+
*
|
|
37
|
+
*
|
|
38
|
+
*
|
|
39
|
+
*
|
|
40
|
+
*
|
|
41
|
+
* ```
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* ### Long G2 Public Keys
|
|
45
|
+
*
|
|
46
|
+
* A G2 Public Key can be derived as a G2 point (96 bytes) using `size: 'long-key:short-sig'`.
|
|
47
|
+
*
|
|
48
|
+
* This will allow you to compute G1 Signatures (48 bytes) with {@link ox#Bls.(sign:function)}.
|
|
49
|
+
*
|
|
50
|
+
* ```ts twoslash
|
|
51
|
+
* import { Bls } from 'ox'
|
|
52
|
+
*
|
|
53
|
+
* const { publicKey } = Bls.createKeyPair({
|
|
54
|
+
* size: 'long-key:short-sig',
|
|
55
|
+
* })
|
|
56
|
+
*
|
|
57
|
+
* publicKey
|
|
58
|
+
* // ^?
|
|
59
|
+
*
|
|
60
|
+
*
|
|
61
|
+
*
|
|
62
|
+
*
|
|
63
|
+
*
|
|
64
|
+
*
|
|
65
|
+
*
|
|
66
|
+
*
|
|
67
|
+
*
|
|
68
|
+
*
|
|
69
|
+
*
|
|
70
|
+
*
|
|
71
|
+
*
|
|
72
|
+
*
|
|
73
|
+
*
|
|
74
|
+
*
|
|
75
|
+
* ```
|
|
76
|
+
*
|
|
77
|
+
* ### Serializing
|
|
78
|
+
*
|
|
79
|
+
* Public Keys can be serialized to hex or bytes using {@link ox#BlsPoint.(toHex:function)} or {@link ox#BlsPoint.(toBytes:function)}:
|
|
80
|
+
*
|
|
81
|
+
* ```ts twoslash
|
|
82
|
+
* import { Bls, BlsPoint } from 'ox'
|
|
83
|
+
*
|
|
84
|
+
* const { publicKey } = Bls.createKeyPair()
|
|
85
|
+
*
|
|
86
|
+
* const publicKeyHex = BlsPoint.toHex(publicKey)
|
|
87
|
+
* // ^?
|
|
88
|
+
*
|
|
89
|
+
*
|
|
90
|
+
* const publicKeyBytes = BlsPoint.toBytes(publicKey)
|
|
91
|
+
* // ^?
|
|
92
|
+
*
|
|
93
|
+
* ```
|
|
94
|
+
*
|
|
95
|
+
* They can also be deserialized from hex or bytes using {@link ox#BlsPoint.(fromHex:function)} or {@link ox#BlsPoint.(fromBytes:function)}:
|
|
96
|
+
*
|
|
97
|
+
* ```ts twoslash
|
|
98
|
+
* import { Bls, BlsPoint } from 'ox'
|
|
99
|
+
*
|
|
100
|
+
* const publicKeyHex = '0x...'
|
|
101
|
+
*
|
|
102
|
+
* const publicKey = BlsPoint.fromHex(publicKeyHex, 'G1')
|
|
103
|
+
* // ^?
|
|
104
|
+
*
|
|
105
|
+
*
|
|
106
|
+
*
|
|
107
|
+
*
|
|
108
|
+
*
|
|
109
|
+
*
|
|
110
|
+
*
|
|
111
|
+
* ```
|
|
112
|
+
*
|
|
113
|
+
* @param options - The options to generate the key pair.
|
|
114
|
+
* @returns The generated key pair containing both private and public keys.
|
|
115
|
+
*/
|
|
116
|
+
export function createKeyPair(options = {}) {
|
|
117
|
+
const { as = 'Hex', size = 'short-key:long-sig' } = options;
|
|
118
|
+
const privateKey = randomPrivateKey({ as });
|
|
119
|
+
const publicKey = getPublicKey({ privateKey, size });
|
|
120
|
+
return {
|
|
121
|
+
privateKey: privateKey,
|
|
122
|
+
publicKey: publicKey,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
16
125
|
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
17
126
|
export function getPublicKey(options) {
|
|
18
127
|
const { privateKey, size = 'short-key:long-sig' } = options;
|
package/_esm/core/Bls.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Bls.js","sourceRoot":"","sources":["../../core/Bls.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,IAAI,GAAG,EAAE,MAAM,yBAAyB,CAAA;AAG1D,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AAEnC,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;AAK/B,qDAAqD;AACrD,MAAM,CAAC,MAAM,KAAK,GAAG,GAAG,CAAA;AAuCxB,+CAA+C;AAC/C,MAAM,UAAU,SAAS,CACvB,MAAoC;IAEpC,MAAM,KAAK,GAAG,OAAO,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAA;IAChE,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CACzB,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CACb,GAAG,CAAC,GAAG,CAAC,IAAK,KAAa,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EACxE,KAAK,CAAC,eAAe,CAAC,IAAI,CAC3B,CAAA;IACD,OAAO;QACL,CAAC,EAAE,KAAK,CAAC,EAAE;QACX,CAAC,EAAE,KAAK,CAAC,EAAE;QACX,CAAC,EAAE,KAAK,CAAC,EAAE;KACZ,CAAA;AACH,CAAC;
|
|
1
|
+
{"version":3,"file":"Bls.js","sourceRoot":"","sources":["../../core/Bls.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { ed25519 } from '@noble/curves/ed25519';
|
|
2
|
+
import * as Bytes from './Bytes.js';
|
|
3
|
+
import * as Hex from './Hex.js';
|
|
4
|
+
/** Re-export of noble/curves Ed25519 utilities. */
|
|
5
|
+
export const noble = ed25519;
|
|
6
|
+
/**
|
|
7
|
+
* Creates a new Ed25519 key pair consisting of a private key and its corresponding public key.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```ts twoslash
|
|
11
|
+
* import { Ed25519 } from 'ox'
|
|
12
|
+
*
|
|
13
|
+
* const { privateKey, publicKey } = Ed25519.createKeyPair()
|
|
14
|
+
* ```
|
|
15
|
+
*
|
|
16
|
+
* @param options - The options to generate the key pair.
|
|
17
|
+
* @returns The generated key pair containing both private and public keys.
|
|
18
|
+
*/
|
|
19
|
+
export function createKeyPair(options = {}) {
|
|
20
|
+
const { as = 'Hex' } = options;
|
|
21
|
+
const privateKey = randomPrivateKey({ as });
|
|
22
|
+
const publicKey = getPublicKey({ privateKey, as });
|
|
23
|
+
return {
|
|
24
|
+
privateKey: privateKey,
|
|
25
|
+
publicKey: publicKey,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Computes the Ed25519 public key from a provided private key.
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```ts twoslash
|
|
33
|
+
* import { Ed25519 } from 'ox'
|
|
34
|
+
*
|
|
35
|
+
* const publicKey = Ed25519.getPublicKey({ privateKey: '0x...' })
|
|
36
|
+
* ```
|
|
37
|
+
*
|
|
38
|
+
* @param options - The options to compute the public key.
|
|
39
|
+
* @returns The computed public key.
|
|
40
|
+
*/
|
|
41
|
+
export function getPublicKey(options) {
|
|
42
|
+
const { as = 'Hex', privateKey } = options;
|
|
43
|
+
const privateKeyBytes = Bytes.from(privateKey);
|
|
44
|
+
const publicKeyBytes = ed25519.getPublicKey(privateKeyBytes);
|
|
45
|
+
if (as === 'Hex')
|
|
46
|
+
return Hex.fromBytes(publicKeyBytes);
|
|
47
|
+
return publicKeyBytes;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Generates a random Ed25519 private key.
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* ```ts twoslash
|
|
54
|
+
* import { Ed25519 } from 'ox'
|
|
55
|
+
*
|
|
56
|
+
* const privateKey = Ed25519.randomPrivateKey()
|
|
57
|
+
* ```
|
|
58
|
+
*
|
|
59
|
+
* @param options - The options to generate the private key.
|
|
60
|
+
* @returns The generated private key.
|
|
61
|
+
*/
|
|
62
|
+
export function randomPrivateKey(options = {}) {
|
|
63
|
+
const { as = 'Hex' } = options;
|
|
64
|
+
const bytes = ed25519.utils.randomPrivateKey();
|
|
65
|
+
if (as === 'Hex')
|
|
66
|
+
return Hex.fromBytes(bytes);
|
|
67
|
+
return bytes;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Signs the payload with the provided private key and returns an Ed25519 signature.
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* ```ts twoslash
|
|
74
|
+
* import { Ed25519 } from 'ox'
|
|
75
|
+
*
|
|
76
|
+
* const signature = Ed25519.sign({ // [!code focus]
|
|
77
|
+
* payload: '0xdeadbeef', // [!code focus]
|
|
78
|
+
* privateKey: '0x...' // [!code focus]
|
|
79
|
+
* }) // [!code focus]
|
|
80
|
+
* ```
|
|
81
|
+
*
|
|
82
|
+
* @param options - The signing options.
|
|
83
|
+
* @returns The Ed25519 signature.
|
|
84
|
+
*/
|
|
85
|
+
export function sign(options) {
|
|
86
|
+
const { as = 'Hex', payload, privateKey } = options;
|
|
87
|
+
const payloadBytes = Bytes.from(payload);
|
|
88
|
+
const privateKeyBytes = Bytes.from(privateKey);
|
|
89
|
+
const signatureBytes = ed25519.sign(payloadBytes, privateKeyBytes);
|
|
90
|
+
if (as === 'Hex')
|
|
91
|
+
return Hex.fromBytes(signatureBytes);
|
|
92
|
+
return signatureBytes;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Verifies a payload was signed by the provided public key.
|
|
96
|
+
*
|
|
97
|
+
* @example
|
|
98
|
+
* ```ts twoslash
|
|
99
|
+
* import { Ed25519 } from 'ox'
|
|
100
|
+
*
|
|
101
|
+
* const { privateKey, publicKey } = Ed25519.createKeyPair()
|
|
102
|
+
* const signature = Ed25519.sign({ payload: '0xdeadbeef', privateKey })
|
|
103
|
+
*
|
|
104
|
+
* const verified = Ed25519.verify({ // [!code focus]
|
|
105
|
+
* publicKey, // [!code focus]
|
|
106
|
+
* payload: '0xdeadbeef', // [!code focus]
|
|
107
|
+
* signature, // [!code focus]
|
|
108
|
+
* }) // [!code focus]
|
|
109
|
+
* ```
|
|
110
|
+
*
|
|
111
|
+
* @param options - The verification options.
|
|
112
|
+
* @returns Whether the payload was signed by the provided public key.
|
|
113
|
+
*/
|
|
114
|
+
export function verify(options) {
|
|
115
|
+
const { payload, publicKey, signature } = options;
|
|
116
|
+
const payloadBytes = Bytes.from(payload);
|
|
117
|
+
const publicKeyBytes = Bytes.from(publicKey);
|
|
118
|
+
const signatureBytes = Bytes.from(signature);
|
|
119
|
+
return ed25519.verify(signatureBytes, payloadBytes, publicKeyBytes);
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=Ed25519.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Ed25519.js","sourceRoot":"","sources":["../../core/Ed25519.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAC/C,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AAEnC,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;AAE/B,mDAAmD;AACnD,MAAM,CAAC,MAAM,KAAK,GAAG,OAAO,CAAA;AAE5B;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,aAAa,CAC3B,UAAqC,EAAE;IAEvC,MAAM,EAAE,EAAE,GAAG,KAAK,EAAE,GAAG,OAAO,CAAA;IAC9B,MAAM,UAAU,GAAG,gBAAgB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;IAC3C,MAAM,SAAS,GAAG,YAAY,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAA;IAElD,OAAO;QACL,UAAU,EAAE,UAAmB;QAC/B,SAAS,EAAE,SAAkB;KAC9B,CAAA;AACH,CAAC;AA2BD;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,YAAY,CAC1B,OAAiC;IAEjC,MAAM,EAAE,EAAE,GAAG,KAAK,EAAE,UAAU,EAAE,GAAG,OAAO,CAAA;IAC1C,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IAC9C,MAAM,cAAc,GAAG,OAAO,CAAC,YAAY,CAAC,eAAe,CAAC,CAAA;IAC5D,IAAI,EAAE,KAAK,KAAK;QAAE,OAAO,GAAG,CAAC,SAAS,CAAC,cAAc,CAAU,CAAA;IAC/D,OAAO,cAAuB,CAAA;AAChC,CAAC;AAyBD;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,gBAAgB,CAC9B,UAAwC,EAAE;IAE1C,MAAM,EAAE,EAAE,GAAG,KAAK,EAAE,GAAG,OAAO,CAAA;IAC9B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAA;IAC9C,IAAI,EAAE,KAAK,KAAK;QAAE,OAAO,GAAG,CAAC,SAAS,CAAC,KAAK,CAAU,CAAA;IACtD,OAAO,KAAc,CAAA;AACvB,CAAC;AAkBD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,IAAI,CAClB,OAAyB;IAEzB,MAAM,EAAE,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,OAAO,CAAA;IACnD,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACxC,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IAC9C,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,eAAe,CAAC,CAAA;IAClE,IAAI,EAAE,KAAK,KAAK;QAAE,OAAO,GAAG,CAAC,SAAS,CAAC,cAAc,CAAU,CAAA;IAC/D,OAAO,cAAuB,CAAA;AAChC,CAAC;AA6BD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,MAAM,CAAC,OAAuB;IAC5C,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,OAAO,CAAA;IACjD,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACxC,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAC5C,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAC5C,OAAO,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,YAAY,EAAE,cAAc,CAAC,CAAA;AACrE,CAAC"}
|
package/_esm/core/Keystore.js
CHANGED
|
@@ -20,11 +20,11 @@ import * as Hash from './Hash.js';
|
|
|
20
20
|
* // JSON keystore.
|
|
21
21
|
* const keystore = { crypto: { ... }, id: '...', version: 3 }
|
|
22
22
|
*
|
|
23
|
-
* //
|
|
24
|
-
* const key =
|
|
23
|
+
* // Derive the key using your password.
|
|
24
|
+
* const key = Keystore.toKey(keystore, { password: 'hunter2' })
|
|
25
25
|
*
|
|
26
26
|
* // Decrypt the private key.
|
|
27
|
-
* const privateKey =
|
|
27
|
+
* const privateKey = Keystore.decrypt(keystore, key)
|
|
28
28
|
* // @log: "0x..."
|
|
29
29
|
* ```
|
|
30
30
|
*
|
|
@@ -33,7 +33,7 @@ import * as Hash from './Hash.js';
|
|
|
33
33
|
* @param options - Decryption options.
|
|
34
34
|
* @returns Decrypted private key.
|
|
35
35
|
*/
|
|
36
|
-
export
|
|
36
|
+
export function decrypt(keystore, key, options = {}) {
|
|
37
37
|
const { as = 'Hex' } = options;
|
|
38
38
|
const key_ = Bytes.from(typeof key === 'function' ? key() : key);
|
|
39
39
|
const encKey = Bytes.slice(key_, 0, 16);
|
|
@@ -66,7 +66,7 @@ export async function decrypt(keystore, key, options = {}) {
|
|
|
66
66
|
* const [key, opts] = Keystore.pbkdf2({ password: 'testpassword' })
|
|
67
67
|
*
|
|
68
68
|
* // Encrypt the private key.
|
|
69
|
-
* const encrypted =
|
|
69
|
+
* const encrypted = Keystore.encrypt(privateKey, key, opts)
|
|
70
70
|
* // @log: {
|
|
71
71
|
* // @log: "crypto": {
|
|
72
72
|
* // @log: "cipher": "aes-128-ctr",
|
|
@@ -93,7 +93,7 @@ export async function decrypt(keystore, key, options = {}) {
|
|
|
93
93
|
* @param options - Encryption options.
|
|
94
94
|
* @returns Encrypted keystore.
|
|
95
95
|
*/
|
|
96
|
-
export
|
|
96
|
+
export function encrypt(privateKey, key, options) {
|
|
97
97
|
const { id = crypto.randomUUID(), kdf, kdfparams, iv } = options;
|
|
98
98
|
const key_ = Bytes.from(typeof key === 'function' ? key() : key);
|
|
99
99
|
const value_ = Bytes.from(privateKey);
|
|
@@ -187,9 +187,7 @@ export async function pbkdf2Async(options) {
|
|
|
187
187
|
* @returns Scrypt key.
|
|
188
188
|
*/
|
|
189
189
|
export function scrypt(options) {
|
|
190
|
-
const { iv, n = 262_144, password } = options;
|
|
191
|
-
const p = 8;
|
|
192
|
-
const r = 1;
|
|
190
|
+
const { iv, n = 262_144, password, p = 8, r = 1 } = options;
|
|
193
191
|
const salt = options.salt ? Bytes.from(options.salt) : Bytes.random(32);
|
|
194
192
|
const key = Bytes.toHex(scrypt_noble(password, salt, { N: n, dkLen: 32, r, p }));
|
|
195
193
|
return defineKey(() => key, {
|
|
@@ -235,6 +233,106 @@ export async function scryptAsync(options) {
|
|
|
235
233
|
kdf: 'scrypt',
|
|
236
234
|
});
|
|
237
235
|
}
|
|
236
|
+
/**
|
|
237
|
+
* Extracts a Key from a JSON Keystore to use for decryption.
|
|
238
|
+
*
|
|
239
|
+
* @example
|
|
240
|
+
* ```ts twoslash
|
|
241
|
+
* // @noErrors
|
|
242
|
+
* import { Keystore } from 'ox'
|
|
243
|
+
*
|
|
244
|
+
* // JSON keystore.
|
|
245
|
+
* const keystore = { crypto: { ... }, id: '...', version: 3 }
|
|
246
|
+
*
|
|
247
|
+
* const key = Keystore.toKey(keystore, { password: 'hunter2' }) // [!code focus]
|
|
248
|
+
*
|
|
249
|
+
* const decrypted = Keystore.decrypt(keystore, key)
|
|
250
|
+
* ```
|
|
251
|
+
*
|
|
252
|
+
* @param keystore - JSON Keystore
|
|
253
|
+
* @param options - Options
|
|
254
|
+
* @returns Key
|
|
255
|
+
*/
|
|
256
|
+
export function toKey(keystore, options) {
|
|
257
|
+
const { crypto } = keystore;
|
|
258
|
+
const { password } = options;
|
|
259
|
+
const { cipherparams, kdf, kdfparams } = crypto;
|
|
260
|
+
const { iv } = cipherparams;
|
|
261
|
+
const { c, n, p, r, salt } = kdfparams;
|
|
262
|
+
const [key] = (() => {
|
|
263
|
+
switch (kdf) {
|
|
264
|
+
case 'scrypt':
|
|
265
|
+
return scrypt({
|
|
266
|
+
iv: Bytes.from(`0x${iv}`),
|
|
267
|
+
n,
|
|
268
|
+
p,
|
|
269
|
+
r,
|
|
270
|
+
salt: Bytes.from(`0x${salt}`),
|
|
271
|
+
password,
|
|
272
|
+
});
|
|
273
|
+
case 'pbkdf2':
|
|
274
|
+
return pbkdf2({
|
|
275
|
+
iv: Bytes.from(`0x${iv}`),
|
|
276
|
+
iterations: c,
|
|
277
|
+
password,
|
|
278
|
+
salt: Bytes.from(`0x${salt}`),
|
|
279
|
+
});
|
|
280
|
+
default:
|
|
281
|
+
throw new Error('unsupported kdf');
|
|
282
|
+
}
|
|
283
|
+
})();
|
|
284
|
+
return key;
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Extracts a Key asynchronously from a JSON Keystore to use for decryption.
|
|
288
|
+
*
|
|
289
|
+
* @example
|
|
290
|
+
* ```ts twoslash
|
|
291
|
+
* // @noErrors
|
|
292
|
+
* import { Keystore } from 'ox'
|
|
293
|
+
*
|
|
294
|
+
* // JSON keystore.
|
|
295
|
+
* const keystore = { crypto: { ... }, id: '...', version: 3 }
|
|
296
|
+
*
|
|
297
|
+
* const key = await Keystore.toKeyAsync(keystore, { password: 'hunter2' }) // [!code focus]
|
|
298
|
+
*
|
|
299
|
+
* const decrypted = Keystore.decrypt(keystore, key)
|
|
300
|
+
* ```
|
|
301
|
+
*
|
|
302
|
+
* @param keystore - JSON Keystore
|
|
303
|
+
* @param options - Options
|
|
304
|
+
* @returns Key
|
|
305
|
+
*/
|
|
306
|
+
export async function toKeyAsync(keystore, options) {
|
|
307
|
+
const { crypto } = keystore;
|
|
308
|
+
const { password } = options;
|
|
309
|
+
const { cipherparams, kdf, kdfparams } = crypto;
|
|
310
|
+
const { iv } = cipherparams;
|
|
311
|
+
const { c, n, p, r, salt } = kdfparams;
|
|
312
|
+
const [key] = await (async () => {
|
|
313
|
+
switch (kdf) {
|
|
314
|
+
case 'scrypt':
|
|
315
|
+
return await scryptAsync({
|
|
316
|
+
iv: Bytes.from(`0x${iv}`),
|
|
317
|
+
n,
|
|
318
|
+
p,
|
|
319
|
+
r,
|
|
320
|
+
salt: Bytes.from(`0x${salt}`),
|
|
321
|
+
password,
|
|
322
|
+
});
|
|
323
|
+
case 'pbkdf2':
|
|
324
|
+
return await pbkdf2({
|
|
325
|
+
iv: Bytes.from(`0x${iv}`),
|
|
326
|
+
iterations: c,
|
|
327
|
+
password,
|
|
328
|
+
salt: Bytes.from(`0x${salt}`),
|
|
329
|
+
});
|
|
330
|
+
default:
|
|
331
|
+
throw new Error('unsupported kdf');
|
|
332
|
+
}
|
|
333
|
+
})();
|
|
334
|
+
return key;
|
|
335
|
+
}
|
|
238
336
|
///////////////////////////////////////////////////////////////////////////
|
|
239
337
|
/** @internal */
|
|
240
338
|
function defineKey(key, options) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Keystore.js","sourceRoot":"","sources":["../../core/Keystore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAA;AACxC,OAAO,EACL,WAAW,IAAI,iBAAiB,EAChC,MAAM,IAAI,YAAY,GACvB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EACL,WAAW,IAAI,iBAAiB,EAChC,MAAM,IAAI,YAAY,GACvB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAC3C,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AAEnC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"Keystore.js","sourceRoot":"","sources":["../../core/Keystore.ts"],"names":[],"mappings":"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"}
|
package/_esm/core/P256.js
CHANGED
|
@@ -5,6 +5,28 @@ import * as PublicKey from './PublicKey.js';
|
|
|
5
5
|
import * as Entropy from './internal/entropy.js';
|
|
6
6
|
/** Re-export of noble/curves P256 utilities. */
|
|
7
7
|
export const noble = secp256r1;
|
|
8
|
+
/**
|
|
9
|
+
* Creates a new P256 ECDSA key pair consisting of a private key and its corresponding public key.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```ts twoslash
|
|
13
|
+
* import { P256 } from 'ox'
|
|
14
|
+
*
|
|
15
|
+
* const { privateKey, publicKey } = P256.createKeyPair()
|
|
16
|
+
* ```
|
|
17
|
+
*
|
|
18
|
+
* @param options - The options to generate the key pair.
|
|
19
|
+
* @returns The generated key pair containing both private and public keys.
|
|
20
|
+
*/
|
|
21
|
+
export function createKeyPair(options = {}) {
|
|
22
|
+
const { as = 'Hex' } = options;
|
|
23
|
+
const privateKey = randomPrivateKey({ as });
|
|
24
|
+
const publicKey = getPublicKey({ privateKey });
|
|
25
|
+
return {
|
|
26
|
+
privateKey: privateKey,
|
|
27
|
+
publicKey,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
8
30
|
/**
|
|
9
31
|
* Computes the P256 ECDSA public key from a provided private key.
|
|
10
32
|
*
|
|
@@ -25,6 +47,37 @@ export function getPublicKey(options) {
|
|
|
25
47
|
: Hex.fromBytes(privateKey).slice(2));
|
|
26
48
|
return PublicKey.from(point);
|
|
27
49
|
}
|
|
50
|
+
/**
|
|
51
|
+
* Computes a shared secret using ECDH (Elliptic Curve Diffie-Hellman) between a private key and a public key.
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* ```ts twoslash
|
|
55
|
+
* import { P256 } from 'ox'
|
|
56
|
+
*
|
|
57
|
+
* const { privateKey: privateKeyA } = P256.createKeyPair()
|
|
58
|
+
* const { publicKey: publicKeyB } = P256.createKeyPair()
|
|
59
|
+
*
|
|
60
|
+
* const sharedSecret = P256.getSharedSecret({
|
|
61
|
+
* privateKey: privateKeyA,
|
|
62
|
+
* publicKey: publicKeyB
|
|
63
|
+
* })
|
|
64
|
+
* ```
|
|
65
|
+
*
|
|
66
|
+
* @param options - The options to compute the shared secret.
|
|
67
|
+
* @returns The computed shared secret.
|
|
68
|
+
*/
|
|
69
|
+
export function getSharedSecret(options) {
|
|
70
|
+
const { as = 'Hex', privateKey, publicKey } = options;
|
|
71
|
+
const point = secp256r1.ProjectivePoint.fromHex(PublicKey.toHex(publicKey).slice(2));
|
|
72
|
+
const privateKeyHex = typeof privateKey === 'string'
|
|
73
|
+
? privateKey.slice(2)
|
|
74
|
+
: Hex.fromBytes(privateKey).slice(2);
|
|
75
|
+
const sharedPoint = point.multiply(secp256r1.utils.normPrivateKeyToScalar(privateKeyHex));
|
|
76
|
+
const sharedSecret = sharedPoint.toRawBytes(true); // compressed format
|
|
77
|
+
if (as === 'Hex')
|
|
78
|
+
return Hex.fromBytes(sharedSecret);
|
|
79
|
+
return sharedSecret;
|
|
80
|
+
}
|
|
28
81
|
/**
|
|
29
82
|
* Generates a random P256 ECDSA private key.
|
|
30
83
|
*
|
|
@@ -110,8 +163,7 @@ export function sign(options) {
|
|
|
110
163
|
* ```ts twoslash
|
|
111
164
|
* import { P256 } from 'ox'
|
|
112
165
|
*
|
|
113
|
-
* const privateKey = P256.
|
|
114
|
-
* const publicKey = P256.getPublicKey({ privateKey })
|
|
166
|
+
* const { privateKey, publicKey } = P256.createKeyPair()
|
|
115
167
|
* const signature = P256.sign({ payload: '0xdeadbeef', privateKey })
|
|
116
168
|
*
|
|
117
169
|
* const verified = P256.verify({ // [!code focus]
|
package/_esm/core/P256.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"P256.js","sourceRoot":"","sources":["../../core/P256.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAC9C,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AAEnC,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;AAC/B,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAE3C,OAAO,KAAK,OAAO,MAAM,uBAAuB,CAAA;AAEhD,gDAAgD;AAChD,MAAM,CAAC,MAAM,KAAK,GAAG,SAAS,CAAA;AAE9B;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,YAAY,CAC1B,OAA6B;IAE7B,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAA;IAC9B,MAAM,KAAK,GAAG,SAAS,CAAC,eAAe,CAAC,cAAc,CACpD,OAAO,UAAU,KAAK,QAAQ;QAC5B,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;QACrB,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CACvC,CAAA;IACD,OAAO,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AAC9B,CAAC;AAaD;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,gBAAgB,CAC9B,UAAwC,EAAE;IAE1C,MAAM,EAAE,EAAE,GAAG,KAAK,EAAE,GAAG,OAAO,CAAA;IAC9B,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAA;IAChD,IAAI,EAAE,KAAK,KAAK;QAAE,OAAO,GAAG,CAAC,SAAS,CAAC,KAAK,CAAU,CAAA;IACtD,OAAO,KAAc,CAAA;AACvB,CAAC;AAkBD;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,gBAAgB,CAC9B,OAAiC;IAEjC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,OAAO,CAAA;IACtC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,SAAS,CAAA;IACnC,MAAM,UAAU,GAAG,IAAI,SAAS,CAAC,SAAS,CACxC,MAAM,CAAC,CAAC,CAAC,EACT,MAAM,CAAC,CAAC,CAAC,CACV,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;IACzB,MAAM,QAAQ,GACZ,OAAO,YAAY,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAA;IAClE,MAAM,KAAK,GAAG,UAAU,CAAC,gBAAgB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;IAChE,OAAO,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AAC9B,CAAC;AAgBD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,IAAI,CAAC,OAAqB;IACxC,MAAM,EACJ,YAAY,GAAG,OAAO,CAAC,YAAY,EACnC,IAAI,EACJ,OAAO,EACP,UAAU,GACX,GAAG,OAAO,CAAA;IACX,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAC,IAAI,CACvC,OAAO,YAAY,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAChE,UAAU,YAAY,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EACzE;QACE,YAAY,EACV,OAAO,YAAY,KAAK,SAAS;YAC/B,CAAC,CAAC,YAAY;YACd,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QACrC,IAAI,EAAE,IAAI;QACV,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACnC,CACF,CAAA;IACD,OAAO;QACL,CAAC;QACD,CAAC;QACD,OAAO,EAAE,QAAQ;KAClB,CAAA;AACH,CAAC;AA0BD
|
|
1
|
+
{"version":3,"file":"P256.js","sourceRoot":"","sources":["../../core/P256.ts"],"names":[],"mappings":"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"}
|
package/_esm/core/Secp256k1.js
CHANGED
|
@@ -6,6 +6,28 @@ import * as PublicKey from './PublicKey.js';
|
|
|
6
6
|
import * as Entropy from './internal/entropy.js';
|
|
7
7
|
/** Re-export of noble/curves secp256k1 utilities. */
|
|
8
8
|
export const noble = secp256k1;
|
|
9
|
+
/**
|
|
10
|
+
* Creates a new secp256k1 ECDSA key pair consisting of a private key and its corresponding public key.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```ts twoslash
|
|
14
|
+
* import { Secp256k1 } from 'ox'
|
|
15
|
+
*
|
|
16
|
+
* const { privateKey, publicKey } = Secp256k1.createKeyPair()
|
|
17
|
+
* ```
|
|
18
|
+
*
|
|
19
|
+
* @param options - The options to generate the key pair.
|
|
20
|
+
* @returns The generated key pair containing both private and public keys.
|
|
21
|
+
*/
|
|
22
|
+
export function createKeyPair(options = {}) {
|
|
23
|
+
const { as = 'Hex' } = options;
|
|
24
|
+
const privateKey = randomPrivateKey({ as });
|
|
25
|
+
const publicKey = getPublicKey({ privateKey });
|
|
26
|
+
return {
|
|
27
|
+
privateKey: privateKey,
|
|
28
|
+
publicKey,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
9
31
|
/**
|
|
10
32
|
* Computes the secp256k1 ECDSA public key from a provided private key.
|
|
11
33
|
*
|
|
@@ -24,6 +46,34 @@ export function getPublicKey(options) {
|
|
|
24
46
|
const point = secp256k1.ProjectivePoint.fromPrivateKey(Hex.from(privateKey).slice(2));
|
|
25
47
|
return PublicKey.from(point);
|
|
26
48
|
}
|
|
49
|
+
/**
|
|
50
|
+
* Computes a shared secret using ECDH (Elliptic Curve Diffie-Hellman) between a private key and a public key.
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* ```ts twoslash
|
|
54
|
+
* import { Secp256k1 } from 'ox'
|
|
55
|
+
*
|
|
56
|
+
* const { privateKey: privateKeyA } = Secp256k1.createKeyPair()
|
|
57
|
+
* const { publicKey: publicKeyB } = Secp256k1.createKeyPair()
|
|
58
|
+
*
|
|
59
|
+
* const sharedSecret = Secp256k1.getSharedSecret({
|
|
60
|
+
* privateKey: privateKeyA,
|
|
61
|
+
* publicKey: publicKeyB
|
|
62
|
+
* })
|
|
63
|
+
* ```
|
|
64
|
+
*
|
|
65
|
+
* @param options - The options to compute the shared secret.
|
|
66
|
+
* @returns The computed shared secret.
|
|
67
|
+
*/
|
|
68
|
+
export function getSharedSecret(options) {
|
|
69
|
+
const { as = 'Hex', privateKey, publicKey } = options;
|
|
70
|
+
const point = secp256k1.ProjectivePoint.fromHex(PublicKey.toHex(publicKey).slice(2));
|
|
71
|
+
const sharedPoint = point.multiply(secp256k1.utils.normPrivateKeyToScalar(Hex.from(privateKey).slice(2)));
|
|
72
|
+
const sharedSecret = sharedPoint.toRawBytes(true); // compressed format
|
|
73
|
+
if (as === 'Hex')
|
|
74
|
+
return Hex.fromBytes(sharedSecret);
|
|
75
|
+
return sharedSecret;
|
|
76
|
+
}
|
|
27
77
|
/**
|
|
28
78
|
* Generates a random ECDSA private key on the secp256k1 curve.
|
|
29
79
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Secp256k1.js","sourceRoot":"","sources":["../../core/Secp256k1.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Secp256k1.js","sourceRoot":"","sources":["../../core/Secp256k1.ts"],"names":[],"mappings":"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"}
|