ox 0.14.9 → 0.14.11
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 +12 -0
- package/_cjs/core/Ed25519.js +18 -0
- package/_cjs/core/Ed25519.js.map +1 -1
- package/_cjs/version.js +1 -1
- package/_cjs/version.js.map +1 -1
- package/_cjs/webauthn/Credential.js +6 -0
- package/_cjs/webauthn/Credential.js.map +1 -1
- package/_esm/core/Ed25519.js +53 -1
- package/_esm/core/Ed25519.js.map +1 -1
- package/_esm/version.js +1 -1
- package/_esm/version.js.map +1 -1
- package/_esm/webauthn/Credential.js +9 -0
- package/_esm/webauthn/Credential.js.map +1 -1
- package/_types/core/Ed25519.d.ts +64 -0
- package/_types/core/Ed25519.d.ts.map +1 -1
- package/_types/version.d.ts +1 -1
- package/_types/version.d.ts.map +1 -1
- package/_types/webauthn/Credential.d.ts.map +1 -1
- package/core/Ed25519.ts +103 -1
- package/package.json +1 -1
- package/version.ts +1 -1
- package/webauthn/Credential.ts +15 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# ox
|
|
2
2
|
|
|
3
|
+
## 0.14.11
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#209](https://github.com/wevm/ox/pull/209) [`52d985e`](https://github.com/wevm/ox/commit/52d985e54ab063e4d835ad467da2bcf07fcbfb33) Thanks [@jxom](https://github.com/jxom)! - Fixed `Credential.serialize` to extract `authenticatorData` from the CBOR-encoded `attestationObject` when the browser/passkey provider doesn't expose it on the response object (e.g. Firefox + 1Password).
|
|
8
|
+
|
|
9
|
+
## 0.14.10
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- [#204](https://github.com/wevm/ox/pull/204) [`9aec6a9`](https://github.com/wevm/ox/commit/9aec6a94ba294c38ec937dc8522582e2f0a40ddc) Thanks [@jxom](https://github.com/jxom)! - Added `Ed25519.toX25519PublicKey` and `Ed25519.toX25519PrivateKey` for converting Ed25519 keys to X25519 keys. Useful for performing X25519 Diffie-Hellman key exchange using an Ed25519 signing key pair.
|
|
14
|
+
|
|
3
15
|
## 0.14.9
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
package/_cjs/core/Ed25519.js
CHANGED
|
@@ -6,6 +6,8 @@ exports.getPublicKey = getPublicKey;
|
|
|
6
6
|
exports.randomPrivateKey = randomPrivateKey;
|
|
7
7
|
exports.sign = sign;
|
|
8
8
|
exports.verify = verify;
|
|
9
|
+
exports.toX25519PublicKey = toX25519PublicKey;
|
|
10
|
+
exports.toX25519PrivateKey = toX25519PrivateKey;
|
|
9
11
|
const ed25519_1 = require("@noble/curves/ed25519");
|
|
10
12
|
const Bytes = require("./Bytes.js");
|
|
11
13
|
const Hex = require("./Hex.js");
|
|
@@ -50,4 +52,20 @@ function verify(options) {
|
|
|
50
52
|
const signatureBytes = Bytes.from(signature);
|
|
51
53
|
return ed25519_1.ed25519.verify(signatureBytes, payloadBytes, publicKeyBytes);
|
|
52
54
|
}
|
|
55
|
+
function toX25519PublicKey(options) {
|
|
56
|
+
const { as = 'Hex', publicKey } = options;
|
|
57
|
+
const publicKeyBytes = Bytes.from(publicKey);
|
|
58
|
+
const x25519PublicKeyBytes = (0, ed25519_1.edwardsToMontgomeryPub)(publicKeyBytes);
|
|
59
|
+
if (as === 'Hex')
|
|
60
|
+
return Hex.fromBytes(x25519PublicKeyBytes);
|
|
61
|
+
return x25519PublicKeyBytes;
|
|
62
|
+
}
|
|
63
|
+
function toX25519PrivateKey(options) {
|
|
64
|
+
const { as = 'Hex', privateKey } = options;
|
|
65
|
+
const privateKeyBytes = Bytes.from(privateKey);
|
|
66
|
+
const x25519PrivateKeyBytes = (0, ed25519_1.edwardsToMontgomeryPriv)(privateKeyBytes);
|
|
67
|
+
if (as === 'Hex')
|
|
68
|
+
return Hex.fromBytes(x25519PrivateKeyBytes);
|
|
69
|
+
return x25519PrivateKeyBytes;
|
|
70
|
+
}
|
|
53
71
|
//# sourceMappingURL=Ed25519.js.map
|
package/_cjs/core/Ed25519.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Ed25519.js","sourceRoot":"","sources":["../../core/Ed25519.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"Ed25519.js","sourceRoot":"","sources":["../../core/Ed25519.ts"],"names":[],"mappings":"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"}
|
package/_cjs/version.js
CHANGED
package/_cjs/version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../version.ts"],"names":[],"mappings":";;;AACa,QAAA,OAAO,GAAG,
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../version.ts"],"names":[],"mappings":";;;AACa,QAAA,OAAO,GAAG,SAAS,CAAA"}
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.serialize = serialize;
|
|
4
4
|
exports.deserialize = deserialize;
|
|
5
5
|
const Base64 = require("../core/Base64.js");
|
|
6
|
+
const Cbor = require("../core/Cbor.js");
|
|
6
7
|
const PublicKey = require("../core/PublicKey.js");
|
|
7
8
|
const utils_js_1 = require("./internal/utils.js");
|
|
8
9
|
function serialize(credential) {
|
|
@@ -20,6 +21,11 @@ function serialize(credential) {
|
|
|
20
21
|
if (value instanceof ArrayBuffer)
|
|
21
22
|
response[key] = Base64.fromBytes(new Uint8Array(value), utils_js_1.base64UrlOptions);
|
|
22
23
|
}
|
|
24
|
+
if (!response.authenticatorData) {
|
|
25
|
+
const attestation = Cbor.decode(new Uint8Array(attestationObject));
|
|
26
|
+
if (attestation.authData)
|
|
27
|
+
response.authenticatorData = Base64.fromBytes(attestation.authData, utils_js_1.base64UrlOptions);
|
|
28
|
+
}
|
|
23
29
|
return {
|
|
24
30
|
attestationObject: Base64.fromBytes(new Uint8Array(attestationObject), utils_js_1.base64UrlOptions),
|
|
25
31
|
clientDataJSON: Base64.fromBytes(new Uint8Array(clientDataJSON), utils_js_1.base64UrlOptions),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Credential.js","sourceRoot":"","sources":["../../webauthn/Credential.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"Credential.js","sourceRoot":"","sources":["../../webauthn/Credential.ts"],"names":[],"mappings":"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"}
|
package/_esm/core/Ed25519.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ed25519 } from '@noble/curves/ed25519';
|
|
1
|
+
import { ed25519, edwardsToMontgomeryPriv, edwardsToMontgomeryPub, } from '@noble/curves/ed25519';
|
|
2
2
|
import * as Bytes from './Bytes.js';
|
|
3
3
|
import * as Hex from './Hex.js';
|
|
4
4
|
/** Re-export of noble/curves Ed25519 utilities. */
|
|
@@ -118,4 +118,56 @@ export function verify(options) {
|
|
|
118
118
|
const signatureBytes = Bytes.from(signature);
|
|
119
119
|
return ed25519.verify(signatureBytes, payloadBytes, publicKeyBytes);
|
|
120
120
|
}
|
|
121
|
+
/**
|
|
122
|
+
* Converts an Ed25519 public key to an X25519 public key.
|
|
123
|
+
*
|
|
124
|
+
* This is useful for performing X25519 Diffie-Hellman key exchange
|
|
125
|
+
* using an Ed25519 signing key pair.
|
|
126
|
+
*
|
|
127
|
+
* @example
|
|
128
|
+
* ```ts twoslash
|
|
129
|
+
* import { Ed25519, X25519 } from 'ox'
|
|
130
|
+
*
|
|
131
|
+
* const { privateKey, publicKey } = Ed25519.createKeyPair()
|
|
132
|
+
*
|
|
133
|
+
* const x25519PublicKey = Ed25519.toX25519PublicKey({ publicKey })
|
|
134
|
+
* ```
|
|
135
|
+
*
|
|
136
|
+
* @param options - The options.
|
|
137
|
+
* @returns The X25519 public key.
|
|
138
|
+
*/
|
|
139
|
+
export function toX25519PublicKey(options) {
|
|
140
|
+
const { as = 'Hex', publicKey } = options;
|
|
141
|
+
const publicKeyBytes = Bytes.from(publicKey);
|
|
142
|
+
const x25519PublicKeyBytes = edwardsToMontgomeryPub(publicKeyBytes);
|
|
143
|
+
if (as === 'Hex')
|
|
144
|
+
return Hex.fromBytes(x25519PublicKeyBytes);
|
|
145
|
+
return x25519PublicKeyBytes;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Converts an Ed25519 private key to an X25519 private key.
|
|
149
|
+
*
|
|
150
|
+
* This is useful for performing X25519 Diffie-Hellman key exchange
|
|
151
|
+
* using an Ed25519 signing key pair.
|
|
152
|
+
*
|
|
153
|
+
* @example
|
|
154
|
+
* ```ts twoslash
|
|
155
|
+
* import { Ed25519, X25519 } from 'ox'
|
|
156
|
+
*
|
|
157
|
+
* const { privateKey, publicKey } = Ed25519.createKeyPair()
|
|
158
|
+
*
|
|
159
|
+
* const x25519PrivateKey = Ed25519.toX25519PrivateKey({ privateKey })
|
|
160
|
+
* ```
|
|
161
|
+
*
|
|
162
|
+
* @param options - The options.
|
|
163
|
+
* @returns The X25519 private key.
|
|
164
|
+
*/
|
|
165
|
+
export function toX25519PrivateKey(options) {
|
|
166
|
+
const { as = 'Hex', privateKey } = options;
|
|
167
|
+
const privateKeyBytes = Bytes.from(privateKey);
|
|
168
|
+
const x25519PrivateKeyBytes = edwardsToMontgomeryPriv(privateKeyBytes);
|
|
169
|
+
if (as === 'Hex')
|
|
170
|
+
return Hex.fromBytes(x25519PrivateKeyBytes);
|
|
171
|
+
return x25519PrivateKeyBytes;
|
|
172
|
+
}
|
|
121
173
|
//# sourceMappingURL=Ed25519.js.map
|
package/_esm/core/Ed25519.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Ed25519.js","sourceRoot":"","sources":["../../core/Ed25519.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"Ed25519.js","sourceRoot":"","sources":["../../core/Ed25519.ts"],"names":[],"mappings":"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"}
|
package/_esm/version.js
CHANGED
package/_esm/version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../version.ts"],"names":[],"mappings":"AAAA,gBAAgB;AAChB,MAAM,CAAC,MAAM,OAAO,GAAG,
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../version.ts"],"names":[],"mappings":"AAAA,gBAAgB;AAChB,MAAM,CAAC,MAAM,OAAO,GAAG,SAAS,CAAA"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as Base64 from '../core/Base64.js';
|
|
2
|
+
import * as Cbor from '../core/Cbor.js';
|
|
2
3
|
import * as PublicKey from '../core/PublicKey.js';
|
|
3
4
|
import { base64UrlOptions, bufferSourceToBytes, bytesToArrayBuffer, responseKeys, } from './internal/utils.js';
|
|
4
5
|
/**
|
|
@@ -38,6 +39,14 @@ export function serialize(credential) {
|
|
|
38
39
|
if (value instanceof ArrayBuffer)
|
|
39
40
|
response[key] = Base64.fromBytes(new Uint8Array(value), base64UrlOptions);
|
|
40
41
|
}
|
|
42
|
+
// Some browsers/passkey providers (e.g. Firefox + 1Password) don't expose
|
|
43
|
+
// `authenticatorData` on the response object. Fall back to extracting it
|
|
44
|
+
// from the CBOR-encoded `attestationObject` which always contains `authData`.
|
|
45
|
+
if (!response.authenticatorData) {
|
|
46
|
+
const attestation = Cbor.decode(new Uint8Array(attestationObject));
|
|
47
|
+
if (attestation.authData)
|
|
48
|
+
response.authenticatorData = Base64.fromBytes(attestation.authData, base64UrlOptions);
|
|
49
|
+
}
|
|
41
50
|
return {
|
|
42
51
|
attestationObject: Base64.fromBytes(new Uint8Array(attestationObject), base64UrlOptions),
|
|
43
52
|
clientDataJSON: Base64.fromBytes(new Uint8Array(clientDataJSON), base64UrlOptions),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Credential.js","sourceRoot":"","sources":["../../webauthn/Credential.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"Credential.js","sourceRoot":"","sources":["../../webauthn/Credential.ts"],"names":[],"mappings":"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"}
|
package/_types/core/Ed25519.d.ts
CHANGED
|
@@ -153,4 +153,68 @@ export declare namespace verify {
|
|
|
153
153
|
};
|
|
154
154
|
type ErrorType = Bytes.from.ErrorType | Errors.GlobalErrorType;
|
|
155
155
|
}
|
|
156
|
+
/**
|
|
157
|
+
* Converts an Ed25519 public key to an X25519 public key.
|
|
158
|
+
*
|
|
159
|
+
* This is useful for performing X25519 Diffie-Hellman key exchange
|
|
160
|
+
* using an Ed25519 signing key pair.
|
|
161
|
+
*
|
|
162
|
+
* @example
|
|
163
|
+
* ```ts twoslash
|
|
164
|
+
* import { Ed25519, X25519 } from 'ox'
|
|
165
|
+
*
|
|
166
|
+
* const { privateKey, publicKey } = Ed25519.createKeyPair()
|
|
167
|
+
*
|
|
168
|
+
* const x25519PublicKey = Ed25519.toX25519PublicKey({ publicKey })
|
|
169
|
+
* ```
|
|
170
|
+
*
|
|
171
|
+
* @param options - The options.
|
|
172
|
+
* @returns The X25519 public key.
|
|
173
|
+
*/
|
|
174
|
+
export declare function toX25519PublicKey<as extends 'Hex' | 'Bytes' = 'Hex'>(options: toX25519PublicKey.Options<as>): toX25519PublicKey.ReturnType<as>;
|
|
175
|
+
export declare namespace toX25519PublicKey {
|
|
176
|
+
type Options<as extends 'Hex' | 'Bytes' = 'Hex'> = {
|
|
177
|
+
/**
|
|
178
|
+
* Format of the returned public key.
|
|
179
|
+
* @default 'Hex'
|
|
180
|
+
*/
|
|
181
|
+
as?: as | 'Hex' | 'Bytes' | undefined;
|
|
182
|
+
/** Ed25519 public key to convert. */
|
|
183
|
+
publicKey: Hex.Hex | Bytes.Bytes;
|
|
184
|
+
};
|
|
185
|
+
type ReturnType<as extends 'Hex' | 'Bytes'> = (as extends 'Bytes' ? Bytes.Bytes : never) | (as extends 'Hex' ? Hex.Hex : never);
|
|
186
|
+
type ErrorType = Bytes.from.ErrorType | Hex.fromBytes.ErrorType | Errors.GlobalErrorType;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Converts an Ed25519 private key to an X25519 private key.
|
|
190
|
+
*
|
|
191
|
+
* This is useful for performing X25519 Diffie-Hellman key exchange
|
|
192
|
+
* using an Ed25519 signing key pair.
|
|
193
|
+
*
|
|
194
|
+
* @example
|
|
195
|
+
* ```ts twoslash
|
|
196
|
+
* import { Ed25519, X25519 } from 'ox'
|
|
197
|
+
*
|
|
198
|
+
* const { privateKey, publicKey } = Ed25519.createKeyPair()
|
|
199
|
+
*
|
|
200
|
+
* const x25519PrivateKey = Ed25519.toX25519PrivateKey({ privateKey })
|
|
201
|
+
* ```
|
|
202
|
+
*
|
|
203
|
+
* @param options - The options.
|
|
204
|
+
* @returns The X25519 private key.
|
|
205
|
+
*/
|
|
206
|
+
export declare function toX25519PrivateKey<as extends 'Hex' | 'Bytes' = 'Hex'>(options: toX25519PrivateKey.Options<as>): toX25519PrivateKey.ReturnType<as>;
|
|
207
|
+
export declare namespace toX25519PrivateKey {
|
|
208
|
+
type Options<as extends 'Hex' | 'Bytes' = 'Hex'> = {
|
|
209
|
+
/**
|
|
210
|
+
* Format of the returned private key.
|
|
211
|
+
* @default 'Hex'
|
|
212
|
+
*/
|
|
213
|
+
as?: as | 'Hex' | 'Bytes' | undefined;
|
|
214
|
+
/** Ed25519 private key to convert. */
|
|
215
|
+
privateKey: Hex.Hex | Bytes.Bytes;
|
|
216
|
+
};
|
|
217
|
+
type ReturnType<as extends 'Hex' | 'Bytes'> = (as extends 'Bytes' ? Bytes.Bytes : never) | (as extends 'Hex' ? Hex.Hex : never);
|
|
218
|
+
type ErrorType = Bytes.from.ErrorType | Hex.fromBytes.ErrorType | Errors.GlobalErrorType;
|
|
219
|
+
}
|
|
156
220
|
//# sourceMappingURL=Ed25519.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Ed25519.d.ts","sourceRoot":"","sources":["../../core/Ed25519.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Ed25519.d.ts","sourceRoot":"","sources":["../../core/Ed25519.ts"],"names":[],"mappings":"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"}
|
package/_types/version.d.ts
CHANGED
package/_types/version.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../version.ts"],"names":[],"mappings":"AAAA,gBAAgB;AAChB,eAAO,MAAM,OAAO,
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../version.ts"],"names":[],"mappings":"AAAA,gBAAgB;AAChB,eAAO,MAAM,OAAO,YAAY,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Credential.d.ts","sourceRoot":"","sources":["../../webauthn/Credential.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"Credential.d.ts","sourceRoot":"","sources":["../../webauthn/Credential.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAE3C,OAAO,KAAK,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAChD,OAAO,KAAK,KAAK,GAAG,MAAM,gBAAgB,CAAA;AAC1C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,KAAK,SAAS,MAAM,sBAAsB,CAAA;AAOjD,OAAO,KAAK,KAAK,KAAK,MAAM,YAAY,CAAA;AAExC,2CAA2C;AAC3C,MAAM,MAAM,UAAU,CAAC,UAAU,SAAS,OAAO,GAAG,KAAK,IAAI;IAC3D,iBAAiB,EAAE,UAAU,SAAS,IAAI,GAAG,MAAM,GAAG,WAAW,CAAA;IACjE,cAAc,EAAE,UAAU,SAAS,IAAI,GAAG,MAAM,GAAG,WAAW,CAAA;IAC9D,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,EAAE,UAAU,SAAS,IAAI,GAAG,GAAG,CAAC,GAAG,GAAG,SAAS,CAAC,SAAS,CAAA;IAClE,GAAG,EAAE,KAAK,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAA;CAC3C,CAAA;AAED,8CAA8C;AAC9C,MAAM,MAAM,YAAY,GAAG,OAAO,CAAC;IACjC,iBAAiB,EAAE,GAAG,CAAC,GAAG,CAAA;IAC1B,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACnC,cAAc,EAAE,MAAM,CAAA;IACtB,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC9B,wBAAwB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAC/C,CAAC,CAAA;AAEF;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,SAAS,CAAC,UAAU,EAAE,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,CAqDlE;AAED,MAAM,CAAC,OAAO,WAAW,SAAS,CAAC;IACjC,KAAK,SAAS,GACV,MAAM,CAAC,SAAS,CAAC,SAAS,GAC1B,SAAS,CAAC,KAAK,CAAC,SAAS,GACzB,MAAM,CAAC,eAAe,CAAA;CAC3B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,UAAU,CAAC,IAAI,CAAC,GAAG,UAAU,CAuBpE;AAED,MAAM,CAAC,OAAO,WAAW,WAAW,CAAC;IACnC,KAAK,SAAS,GACV,MAAM,CAAC,OAAO,CAAC,SAAS,GACxB,SAAS,CAAC,IAAI,CAAC,SAAS,GACxB,MAAM,CAAC,eAAe,CAAA;CAC3B"}
|
package/core/Ed25519.ts
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
ed25519,
|
|
3
|
+
edwardsToMontgomeryPriv,
|
|
4
|
+
edwardsToMontgomeryPub,
|
|
5
|
+
} from '@noble/curves/ed25519'
|
|
2
6
|
import * as Bytes from './Bytes.js'
|
|
3
7
|
import type * as Errors from './Errors.js'
|
|
4
8
|
import * as Hex from './Hex.js'
|
|
@@ -235,3 +239,101 @@ export declare namespace verify {
|
|
|
235
239
|
|
|
236
240
|
type ErrorType = Bytes.from.ErrorType | Errors.GlobalErrorType
|
|
237
241
|
}
|
|
242
|
+
|
|
243
|
+
/**
|
|
244
|
+
* Converts an Ed25519 public key to an X25519 public key.
|
|
245
|
+
*
|
|
246
|
+
* This is useful for performing X25519 Diffie-Hellman key exchange
|
|
247
|
+
* using an Ed25519 signing key pair.
|
|
248
|
+
*
|
|
249
|
+
* @example
|
|
250
|
+
* ```ts twoslash
|
|
251
|
+
* import { Ed25519, X25519 } from 'ox'
|
|
252
|
+
*
|
|
253
|
+
* const { privateKey, publicKey } = Ed25519.createKeyPair()
|
|
254
|
+
*
|
|
255
|
+
* const x25519PublicKey = Ed25519.toX25519PublicKey({ publicKey })
|
|
256
|
+
* ```
|
|
257
|
+
*
|
|
258
|
+
* @param options - The options.
|
|
259
|
+
* @returns The X25519 public key.
|
|
260
|
+
*/
|
|
261
|
+
export function toX25519PublicKey<as extends 'Hex' | 'Bytes' = 'Hex'>(
|
|
262
|
+
options: toX25519PublicKey.Options<as>,
|
|
263
|
+
): toX25519PublicKey.ReturnType<as> {
|
|
264
|
+
const { as = 'Hex', publicKey } = options
|
|
265
|
+
const publicKeyBytes = Bytes.from(publicKey)
|
|
266
|
+
const x25519PublicKeyBytes = edwardsToMontgomeryPub(publicKeyBytes)
|
|
267
|
+
if (as === 'Hex') return Hex.fromBytes(x25519PublicKeyBytes) as never
|
|
268
|
+
return x25519PublicKeyBytes as never
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
export declare namespace toX25519PublicKey {
|
|
272
|
+
type Options<as extends 'Hex' | 'Bytes' = 'Hex'> = {
|
|
273
|
+
/**
|
|
274
|
+
* Format of the returned public key.
|
|
275
|
+
* @default 'Hex'
|
|
276
|
+
*/
|
|
277
|
+
as?: as | 'Hex' | 'Bytes' | undefined
|
|
278
|
+
/** Ed25519 public key to convert. */
|
|
279
|
+
publicKey: Hex.Hex | Bytes.Bytes
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
type ReturnType<as extends 'Hex' | 'Bytes'> =
|
|
283
|
+
| (as extends 'Bytes' ? Bytes.Bytes : never)
|
|
284
|
+
| (as extends 'Hex' ? Hex.Hex : never)
|
|
285
|
+
|
|
286
|
+
type ErrorType =
|
|
287
|
+
| Bytes.from.ErrorType
|
|
288
|
+
| Hex.fromBytes.ErrorType
|
|
289
|
+
| Errors.GlobalErrorType
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
/**
|
|
293
|
+
* Converts an Ed25519 private key to an X25519 private key.
|
|
294
|
+
*
|
|
295
|
+
* This is useful for performing X25519 Diffie-Hellman key exchange
|
|
296
|
+
* using an Ed25519 signing key pair.
|
|
297
|
+
*
|
|
298
|
+
* @example
|
|
299
|
+
* ```ts twoslash
|
|
300
|
+
* import { Ed25519, X25519 } from 'ox'
|
|
301
|
+
*
|
|
302
|
+
* const { privateKey, publicKey } = Ed25519.createKeyPair()
|
|
303
|
+
*
|
|
304
|
+
* const x25519PrivateKey = Ed25519.toX25519PrivateKey({ privateKey })
|
|
305
|
+
* ```
|
|
306
|
+
*
|
|
307
|
+
* @param options - The options.
|
|
308
|
+
* @returns The X25519 private key.
|
|
309
|
+
*/
|
|
310
|
+
export function toX25519PrivateKey<as extends 'Hex' | 'Bytes' = 'Hex'>(
|
|
311
|
+
options: toX25519PrivateKey.Options<as>,
|
|
312
|
+
): toX25519PrivateKey.ReturnType<as> {
|
|
313
|
+
const { as = 'Hex', privateKey } = options
|
|
314
|
+
const privateKeyBytes = Bytes.from(privateKey)
|
|
315
|
+
const x25519PrivateKeyBytes = edwardsToMontgomeryPriv(privateKeyBytes)
|
|
316
|
+
if (as === 'Hex') return Hex.fromBytes(x25519PrivateKeyBytes) as never
|
|
317
|
+
return x25519PrivateKeyBytes as never
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
export declare namespace toX25519PrivateKey {
|
|
321
|
+
type Options<as extends 'Hex' | 'Bytes' = 'Hex'> = {
|
|
322
|
+
/**
|
|
323
|
+
* Format of the returned private key.
|
|
324
|
+
* @default 'Hex'
|
|
325
|
+
*/
|
|
326
|
+
as?: as | 'Hex' | 'Bytes' | undefined
|
|
327
|
+
/** Ed25519 private key to convert. */
|
|
328
|
+
privateKey: Hex.Hex | Bytes.Bytes
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
type ReturnType<as extends 'Hex' | 'Bytes'> =
|
|
332
|
+
| (as extends 'Bytes' ? Bytes.Bytes : never)
|
|
333
|
+
| (as extends 'Hex' ? Hex.Hex : never)
|
|
334
|
+
|
|
335
|
+
type ErrorType =
|
|
336
|
+
| Bytes.from.ErrorType
|
|
337
|
+
| Hex.fromBytes.ErrorType
|
|
338
|
+
| Errors.GlobalErrorType
|
|
339
|
+
}
|
package/package.json
CHANGED
package/version.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/** @internal */
|
|
2
|
-
export const version = '0.14.
|
|
2
|
+
export const version = '0.14.11'
|
package/webauthn/Credential.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as Base64 from '../core/Base64.js'
|
|
2
|
+
import * as Cbor from '../core/Cbor.js'
|
|
2
3
|
import type * as Errors from '../core/Errors.js'
|
|
3
4
|
import type * as Hex from '../core/Hex.js'
|
|
4
5
|
import type { Compute } from '../core/internal/types.js'
|
|
@@ -68,6 +69,20 @@ export function serialize(credential: Credential): Credential<true> {
|
|
|
68
69
|
response[key] = Base64.fromBytes(new Uint8Array(value), base64UrlOptions)
|
|
69
70
|
}
|
|
70
71
|
|
|
72
|
+
// Some browsers/passkey providers (e.g. Firefox + 1Password) don't expose
|
|
73
|
+
// `authenticatorData` on the response object. Fall back to extracting it
|
|
74
|
+
// from the CBOR-encoded `attestationObject` which always contains `authData`.
|
|
75
|
+
if (!response.authenticatorData) {
|
|
76
|
+
const attestation = Cbor.decode<{ authData: Uint8Array }>(
|
|
77
|
+
new Uint8Array(attestationObject),
|
|
78
|
+
)
|
|
79
|
+
if (attestation.authData)
|
|
80
|
+
response.authenticatorData = Base64.fromBytes(
|
|
81
|
+
attestation.authData,
|
|
82
|
+
base64UrlOptions,
|
|
83
|
+
)
|
|
84
|
+
}
|
|
85
|
+
|
|
71
86
|
return {
|
|
72
87
|
attestationObject: Base64.fromBytes(
|
|
73
88
|
new Uint8Array(attestationObject),
|