ox 0.12.4 → 0.13.1
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 +21 -0
- package/_cjs/core/P256.js +1 -1
- package/_cjs/core/P256.js.map +1 -1
- package/_cjs/core/WebAuthnP256.js +15 -256
- package/_cjs/core/WebAuthnP256.js.map +1 -1
- package/_cjs/core/WebCryptoP256.js +3 -1
- package/_cjs/core/WebCryptoP256.js.map +1 -1
- package/_cjs/core/internal/webauthn.js +5 -13
- package/_cjs/core/internal/webauthn.js.map +1 -1
- package/_cjs/index.docs.js +1 -0
- package/_cjs/index.docs.js.map +1 -1
- package/_cjs/tempo/KeyAuthorization.js +18 -3
- package/_cjs/tempo/KeyAuthorization.js.map +1 -1
- package/_cjs/tempo/SignatureEnvelope.js +26 -0
- package/_cjs/tempo/SignatureEnvelope.js.map +1 -1
- package/_cjs/tempo/TxEnvelopeTempo.js +5 -10
- package/_cjs/tempo/TxEnvelopeTempo.js.map +1 -1
- package/_cjs/version.js +1 -1
- package/_cjs/webauthn/Authentication.js +246 -0
- package/_cjs/webauthn/Authentication.js.map +1 -0
- package/_cjs/webauthn/Authenticator.js +55 -0
- package/_cjs/webauthn/Authenticator.js.map +1 -0
- package/_cjs/webauthn/Credential.js +53 -0
- package/_cjs/webauthn/Credential.js.map +1 -0
- package/_cjs/webauthn/Registration.js +349 -0
- package/_cjs/webauthn/Registration.js.map +1 -0
- package/_cjs/webauthn/Types.js +3 -0
- package/_cjs/webauthn/Types.js.map +1 -0
- package/_cjs/webauthn/index.js +9 -0
- package/_cjs/webauthn/index.js.map +1 -0
- package/_cjs/webauthn/internal/utils.js +53 -0
- package/_cjs/webauthn/internal/utils.js.map +1 -0
- package/_esm/core/P256.js +1 -1
- package/_esm/core/P256.js.map +1 -1
- package/_esm/core/WebAuthnP256.js +13 -261
- package/_esm/core/WebAuthnP256.js.map +1 -1
- package/_esm/core/WebCryptoP256.js +4 -1
- package/_esm/core/WebCryptoP256.js.map +1 -1
- package/_esm/core/internal/webauthn.js +5 -13
- package/_esm/core/internal/webauthn.js.map +1 -1
- package/_esm/erc8021/index.js +2 -2
- package/_esm/index.docs.js +1 -0
- package/_esm/index.docs.js.map +1 -1
- package/_esm/tempo/KeyAuthorization.js +66 -3
- package/_esm/tempo/KeyAuthorization.js.map +1 -1
- package/_esm/tempo/SignatureEnvelope.js +74 -0
- package/_esm/tempo/SignatureEnvelope.js.map +1 -1
- package/_esm/tempo/TransactionReceipt.js +1 -1
- package/_esm/tempo/TransactionRequest.js +1 -1
- package/_esm/tempo/TxEnvelopeTempo.js +5 -10
- package/_esm/tempo/TxEnvelopeTempo.js.map +1 -1
- package/_esm/version.js +1 -1
- package/_esm/webauthn/Authentication.js +453 -0
- package/_esm/webauthn/Authentication.js.map +1 -0
- package/_esm/webauthn/Authenticator.js +176 -0
- package/_esm/webauthn/Authenticator.js.map +1 -0
- package/_esm/webauthn/Credential.js +95 -0
- package/_esm/webauthn/Credential.js.map +1 -0
- package/_esm/webauthn/Registration.js +512 -0
- package/_esm/webauthn/Registration.js.map +1 -0
- package/_esm/webauthn/Types.js +2 -0
- package/_esm/webauthn/Types.js.map +1 -0
- package/_esm/webauthn/index.js +31 -0
- package/_esm/webauthn/index.js.map +1 -0
- package/_esm/webauthn/internal/utils.js +52 -0
- package/_esm/webauthn/internal/utils.js.map +1 -0
- package/_types/core/WebAuthnP256.d.ts +33 -208
- package/_types/core/WebAuthnP256.d.ts.map +1 -1
- package/_types/core/WebCryptoP256.d.ts +2 -0
- package/_types/core/WebCryptoP256.d.ts.map +1 -1
- package/_types/core/internal/webauthn.d.ts +2 -110
- package/_types/core/internal/webauthn.d.ts.map +1 -1
- package/_types/erc8021/index.d.ts +2 -2
- package/_types/index.docs.d.ts +1 -0
- package/_types/index.docs.d.ts.map +1 -1
- package/_types/tempo/KeyAuthorization.d.ts +57 -0
- package/_types/tempo/KeyAuthorization.d.ts.map +1 -1
- package/_types/tempo/SignatureEnvelope.d.ts +75 -0
- package/_types/tempo/SignatureEnvelope.d.ts.map +1 -1
- package/_types/tempo/Transaction.d.ts +2 -2
- package/_types/tempo/TransactionReceipt.d.ts +2 -2
- package/_types/tempo/TransactionRequest.d.ts +2 -2
- package/_types/tempo/TxEnvelopeTempo.d.ts.map +1 -1
- package/_types/version.d.ts +1 -1
- package/_types/webauthn/Authentication.d.ts +324 -0
- package/_types/webauthn/Authentication.d.ts.map +1 -0
- package/_types/webauthn/Authenticator.d.ts +182 -0
- package/_types/webauthn/Authenticator.d.ts.map +1 -0
- package/_types/webauthn/Credential.d.ts +77 -0
- package/_types/webauthn/Credential.d.ts.map +1 -0
- package/_types/webauthn/Registration.d.ts +308 -0
- package/_types/webauthn/Registration.d.ts.map +1 -0
- package/_types/webauthn/Types.d.ts +106 -0
- package/_types/webauthn/Types.d.ts.map +1 -0
- package/_types/webauthn/index.d.ts +33 -0
- package/_types/webauthn/index.d.ts.map +1 -0
- package/_types/webauthn/internal/utils.d.ts +17 -0
- package/_types/webauthn/internal/utils.d.ts.map +1 -0
- package/core/P256.ts +1 -1
- package/core/WebAuthnP256.ts +37 -582
- package/core/WebCryptoP256.ts +6 -1
- package/core/internal/webauthn.ts +6 -165
- package/erc8021/index.ts +2 -2
- package/index.docs.ts +1 -0
- package/package.json +31 -1
- package/tempo/KeyAuthorization.test.ts +139 -0
- package/tempo/KeyAuthorization.ts +82 -3
- package/tempo/SignatureEnvelope.test.ts +147 -0
- package/tempo/SignatureEnvelope.ts +113 -0
- package/tempo/Transaction.ts +2 -2
- package/tempo/TransactionReceipt.ts +2 -2
- package/tempo/TransactionRequest.ts +2 -2
- package/tempo/TxEnvelopeTempo.ts +5 -12
- package/tempo/e2e.test.ts +265 -0
- package/version.ts +1 -1
- package/webauthn/Authentication/package.json +6 -0
- package/webauthn/Authentication.ts +673 -0
- package/webauthn/Authenticator/package.json +6 -0
- package/webauthn/Authenticator.ts +259 -0
- package/webauthn/Credential/package.json +6 -0
- package/webauthn/Credential.ts +146 -0
- package/webauthn/Registration/package.json +6 -0
- package/webauthn/Registration.ts +805 -0
- package/webauthn/Types/package.json +6 -0
- package/webauthn/Types.ts +158 -0
- package/webauthn/index.ts +38 -0
- package/webauthn/internal/utils.ts +63 -0
- package/webauthn/package.json +6 -0
|
@@ -1,15 +1,7 @@
|
|
|
1
|
-
import * as
|
|
2
|
-
import * as
|
|
3
|
-
import * as
|
|
4
|
-
|
|
5
|
-
import * as Errors from './Errors.js';
|
|
6
|
-
import * as Hash from './Hash.js';
|
|
7
|
-
import * as Hex from './Hex.js';
|
|
8
|
-
import * as internal from './internal/webauthn.js';
|
|
9
|
-
import * as P256 from './P256.js';
|
|
10
|
-
export const createChallenge = Uint8Array.from([
|
|
11
|
-
105, 171, 180, 181, 160, 222, 75, 198, 42, 42, 32, 31, 141, 37, 186, 233,
|
|
12
|
-
]);
|
|
1
|
+
import * as Authentication from '../webauthn/Authentication.js';
|
|
2
|
+
import * as Authenticator from '../webauthn/Authenticator.js';
|
|
3
|
+
import * as Registration from '../webauthn/Registration.js';
|
|
4
|
+
export const createChallenge = Registration.createChallenge;
|
|
13
5
|
/**
|
|
14
6
|
* Creates a new WebAuthn P256 Credential, which can be stored and later used for signing.
|
|
15
7
|
*
|
|
@@ -34,25 +26,7 @@ export const createChallenge = Uint8Array.from([
|
|
|
34
26
|
* @returns A WebAuthn P256 credential.
|
|
35
27
|
*/
|
|
36
28
|
export async function createCredential(options) {
|
|
37
|
-
|
|
38
|
-
const creationOptions = getCredentialCreationOptions(rest);
|
|
39
|
-
try {
|
|
40
|
-
const credential = (await createFn(creationOptions));
|
|
41
|
-
if (!credential)
|
|
42
|
-
throw new CredentialCreationFailedError();
|
|
43
|
-
const response = credential.response;
|
|
44
|
-
const publicKey = await internal.parseCredentialPublicKey(response);
|
|
45
|
-
return {
|
|
46
|
-
id: credential.id,
|
|
47
|
-
publicKey,
|
|
48
|
-
raw: credential,
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
catch (error) {
|
|
52
|
-
throw new CredentialCreationFailedError({
|
|
53
|
-
cause: error,
|
|
54
|
-
});
|
|
55
|
-
}
|
|
29
|
+
return Registration.create(options);
|
|
56
30
|
}
|
|
57
31
|
/**
|
|
58
32
|
* Gets the authenticator data which contains information about the
|
|
@@ -101,23 +75,7 @@ export async function createCredential(options) {
|
|
|
101
75
|
* @param options - Options to construct the authenticator data.
|
|
102
76
|
* @returns The authenticator data.
|
|
103
77
|
*/
|
|
104
|
-
export
|
|
105
|
-
const { credential, flag = 5, rpId = window.location.hostname, signCount = 0, } = options;
|
|
106
|
-
const rpIdHash = Hash.sha256(Hex.fromString(rpId));
|
|
107
|
-
const flag_bytes = Hex.fromNumber(flag, { size: 1 });
|
|
108
|
-
const signCount_bytes = Hex.fromNumber(signCount, { size: 4 });
|
|
109
|
-
const base = Hex.concat(rpIdHash, flag_bytes, signCount_bytes);
|
|
110
|
-
if (!credential)
|
|
111
|
-
return base;
|
|
112
|
-
// AAGUID (16 bytes of zeros)
|
|
113
|
-
const aaguid = Hex.fromBytes(new Uint8Array(16));
|
|
114
|
-
// Credential ID
|
|
115
|
-
const credentialId = Hex.fromBytes(credential.id);
|
|
116
|
-
const credIdLen = Hex.fromNumber(credential.id.length, { size: 2 });
|
|
117
|
-
// COSE public key
|
|
118
|
-
const coseKey = CoseKey.fromPublicKey(credential.publicKey);
|
|
119
|
-
return Hex.concat(base, aaguid, credIdLen, credentialId, coseKey);
|
|
120
|
-
}
|
|
78
|
+
export const getAuthenticatorData = Authenticator.getAuthenticatorData;
|
|
121
79
|
/**
|
|
122
80
|
* Constructs the Client Data in stringified JSON format which represents client data that
|
|
123
81
|
* was passed to `credentials.get()` in {@link ox#WebAuthnP256.(sign:function)}.
|
|
@@ -145,16 +103,7 @@ export function getAuthenticatorData(options = {}) {
|
|
|
145
103
|
* @param options - Options to construct the client data.
|
|
146
104
|
* @returns The client data.
|
|
147
105
|
*/
|
|
148
|
-
export
|
|
149
|
-
const { challenge, crossOrigin = false, extraClientData, origin = window.location.origin, type = 'webauthn.get', } = options;
|
|
150
|
-
return JSON.stringify({
|
|
151
|
-
type,
|
|
152
|
-
challenge: Base64.fromHex(challenge, { url: true, pad: false }),
|
|
153
|
-
origin,
|
|
154
|
-
crossOrigin,
|
|
155
|
-
...extraClientData,
|
|
156
|
-
});
|
|
157
|
-
}
|
|
106
|
+
export const getClientDataJSON = Authenticator.getClientDataJSON;
|
|
158
107
|
/**
|
|
159
108
|
* Constructs a CBOR-encoded attestation object for testing WebAuthn registration
|
|
160
109
|
* verification. Combines the authenticator data with an attestation statement.
|
|
@@ -184,14 +133,7 @@ export function getClientDataJSON(options) {
|
|
|
184
133
|
* @param options - Options to construct the attestation object.
|
|
185
134
|
* @returns The CBOR-encoded attestation object as a Hex string.
|
|
186
135
|
*/
|
|
187
|
-
export
|
|
188
|
-
const { attStmt = {}, authData, fmt = 'none' } = options;
|
|
189
|
-
return Cbor.encode({
|
|
190
|
-
fmt,
|
|
191
|
-
attStmt,
|
|
192
|
-
authData: Hex.toBytes(authData),
|
|
193
|
-
});
|
|
194
|
-
}
|
|
136
|
+
export const getAttestationObject = Authenticator.getAttestationObject;
|
|
195
137
|
/**
|
|
196
138
|
* Returns the creation options for a P256 WebAuthn Credential to be used with
|
|
197
139
|
* the Web Authentication API.
|
|
@@ -208,45 +150,7 @@ export function getAttestationObject(options) {
|
|
|
208
150
|
* @param options - Options.
|
|
209
151
|
* @returns The credential creation options.
|
|
210
152
|
*/
|
|
211
|
-
export
|
|
212
|
-
const { attestation = 'none', authenticatorSelection = {
|
|
213
|
-
residentKey: 'preferred',
|
|
214
|
-
requireResidentKey: false,
|
|
215
|
-
userVerification: 'required',
|
|
216
|
-
}, challenge = createChallenge, excludeCredentialIds, extensions, name: name_, rp = {
|
|
217
|
-
id: window.location.hostname,
|
|
218
|
-
name: window.document.title,
|
|
219
|
-
}, user, } = options;
|
|
220
|
-
const name = (user?.name ?? name_);
|
|
221
|
-
return {
|
|
222
|
-
publicKey: {
|
|
223
|
-
attestation,
|
|
224
|
-
authenticatorSelection,
|
|
225
|
-
challenge: typeof challenge === 'string' ? Bytes.fromHex(challenge) : challenge,
|
|
226
|
-
...(excludeCredentialIds
|
|
227
|
-
? {
|
|
228
|
-
excludeCredentials: excludeCredentialIds?.map((id) => ({
|
|
229
|
-
id: Base64.toBytes(id),
|
|
230
|
-
type: 'public-key',
|
|
231
|
-
})),
|
|
232
|
-
}
|
|
233
|
-
: {}),
|
|
234
|
-
pubKeyCredParams: [
|
|
235
|
-
{
|
|
236
|
-
type: 'public-key',
|
|
237
|
-
alg: -7, // p256
|
|
238
|
-
},
|
|
239
|
-
],
|
|
240
|
-
...(extensions && { extensions }),
|
|
241
|
-
rp,
|
|
242
|
-
user: {
|
|
243
|
-
id: user?.id ?? Hash.keccak256(Bytes.fromString(name), { as: 'Bytes' }),
|
|
244
|
-
name,
|
|
245
|
-
displayName: user?.displayName ?? name,
|
|
246
|
-
},
|
|
247
|
-
},
|
|
248
|
-
};
|
|
249
|
-
}
|
|
153
|
+
export const getCredentialCreationOptions = Registration.getOptions;
|
|
250
154
|
/**
|
|
251
155
|
* Returns the request options to sign a challenge with the Web Authentication API.
|
|
252
156
|
*
|
|
@@ -264,32 +168,7 @@ export function getCredentialCreationOptions(options) {
|
|
|
264
168
|
* @param options - Options.
|
|
265
169
|
* @returns The credential request options.
|
|
266
170
|
*/
|
|
267
|
-
export
|
|
268
|
-
const { credentialId, challenge, extensions, rpId = window.location.hostname, userVerification = 'required', } = options;
|
|
269
|
-
return {
|
|
270
|
-
publicKey: {
|
|
271
|
-
...(credentialId
|
|
272
|
-
? {
|
|
273
|
-
allowCredentials: Array.isArray(credentialId)
|
|
274
|
-
? credentialId.map((id) => ({
|
|
275
|
-
id: Base64.toBytes(id),
|
|
276
|
-
type: 'public-key',
|
|
277
|
-
}))
|
|
278
|
-
: [
|
|
279
|
-
{
|
|
280
|
-
id: Base64.toBytes(credentialId),
|
|
281
|
-
type: 'public-key',
|
|
282
|
-
},
|
|
283
|
-
],
|
|
284
|
-
}
|
|
285
|
-
: {}),
|
|
286
|
-
challenge: Bytes.fromHex(challenge),
|
|
287
|
-
...(extensions && { extensions }),
|
|
288
|
-
rpId,
|
|
289
|
-
userVerification,
|
|
290
|
-
},
|
|
291
|
-
};
|
|
292
|
-
}
|
|
171
|
+
export const getCredentialRequestOptions = Authentication.getOptions;
|
|
293
172
|
/**
|
|
294
173
|
* Constructs the final digest that was signed and computed by the authenticator. This payload includes
|
|
295
174
|
* the cryptographic `challenge`, as well as authenticator metadata (`authenticatorData` + `clientDataJSON`).
|
|
@@ -333,32 +212,7 @@ export function getCredentialRequestOptions(options) {
|
|
|
333
212
|
* @param options - Options to construct the signing payload.
|
|
334
213
|
* @returns The signing payload.
|
|
335
214
|
*/
|
|
336
|
-
export
|
|
337
|
-
const { challenge, crossOrigin, extraClientData, flag, origin, rpId, signCount, userVerification = 'required', } = options;
|
|
338
|
-
const authenticatorData = getAuthenticatorData({
|
|
339
|
-
flag,
|
|
340
|
-
rpId,
|
|
341
|
-
signCount,
|
|
342
|
-
});
|
|
343
|
-
const clientDataJSON = getClientDataJSON({
|
|
344
|
-
challenge,
|
|
345
|
-
crossOrigin,
|
|
346
|
-
extraClientData,
|
|
347
|
-
origin,
|
|
348
|
-
});
|
|
349
|
-
const clientDataJSONHash = Hash.sha256(Hex.fromString(clientDataJSON));
|
|
350
|
-
const challengeIndex = clientDataJSON.indexOf('"challenge"');
|
|
351
|
-
const typeIndex = clientDataJSON.indexOf('"type"');
|
|
352
|
-
const metadata = {
|
|
353
|
-
authenticatorData,
|
|
354
|
-
clientDataJSON,
|
|
355
|
-
challengeIndex,
|
|
356
|
-
typeIndex,
|
|
357
|
-
userVerificationRequired: userVerification === 'required',
|
|
358
|
-
};
|
|
359
|
-
const payload = Hex.concat(authenticatorData, clientDataJSONHash);
|
|
360
|
-
return { metadata, payload };
|
|
361
|
-
}
|
|
215
|
+
export const getSignPayload = Authentication.getSignPayload;
|
|
362
216
|
/**
|
|
363
217
|
* Signs a challenge using a stored WebAuthn P256 Credential. If no Credential is provided,
|
|
364
218
|
* a prompt will be displayed for the user to select an existing Credential
|
|
@@ -392,34 +246,7 @@ export function getSignPayload(options) {
|
|
|
392
246
|
* @returns The signature.
|
|
393
247
|
*/
|
|
394
248
|
export async function sign(options) {
|
|
395
|
-
|
|
396
|
-
const requestOptions = getCredentialRequestOptions(rest);
|
|
397
|
-
try {
|
|
398
|
-
const credential = (await getFn(requestOptions));
|
|
399
|
-
if (!credential)
|
|
400
|
-
throw new CredentialRequestFailedError();
|
|
401
|
-
const response = credential.response;
|
|
402
|
-
const clientDataJSON = String.fromCharCode(...new Uint8Array(response.clientDataJSON));
|
|
403
|
-
const challengeIndex = clientDataJSON.indexOf('"challenge"');
|
|
404
|
-
const typeIndex = clientDataJSON.indexOf('"type"');
|
|
405
|
-
const signature = internal.parseAsn1Signature(new Uint8Array(response.signature));
|
|
406
|
-
return {
|
|
407
|
-
metadata: {
|
|
408
|
-
authenticatorData: Hex.fromBytes(new Uint8Array(response.authenticatorData)),
|
|
409
|
-
clientDataJSON,
|
|
410
|
-
challengeIndex,
|
|
411
|
-
typeIndex,
|
|
412
|
-
userVerificationRequired: requestOptions.publicKey.userVerification === 'required',
|
|
413
|
-
},
|
|
414
|
-
signature,
|
|
415
|
-
raw: credential,
|
|
416
|
-
};
|
|
417
|
-
}
|
|
418
|
-
catch (error) {
|
|
419
|
-
throw new CredentialRequestFailedError({
|
|
420
|
-
cause: error,
|
|
421
|
-
});
|
|
422
|
-
}
|
|
249
|
+
return Authentication.sign(options);
|
|
423
250
|
}
|
|
424
251
|
/**
|
|
425
252
|
* Verifies a signature using the Credential's public key and the challenge which was signed.
|
|
@@ -450,81 +277,6 @@ export async function sign(options) {
|
|
|
450
277
|
* @returns Whether the signature is valid.
|
|
451
278
|
*/
|
|
452
279
|
export function verify(options) {
|
|
453
|
-
|
|
454
|
-
const { authenticatorData, challengeIndex, clientDataJSON, typeIndex, userVerificationRequired, } = metadata;
|
|
455
|
-
const authenticatorDataBytes = Bytes.fromHex(authenticatorData);
|
|
456
|
-
// Check length of `authenticatorData`.
|
|
457
|
-
if (authenticatorDataBytes.length < 37)
|
|
458
|
-
return false;
|
|
459
|
-
const flag = authenticatorDataBytes[32];
|
|
460
|
-
// Verify that the UP bit of the flags in authData is set.
|
|
461
|
-
if ((flag & 0x01) !== 0x01)
|
|
462
|
-
return false;
|
|
463
|
-
// If user verification was determined to be required, verify that
|
|
464
|
-
// the UV bit of the flags in authData is set. Otherwise, ignore the
|
|
465
|
-
// value of the UV flag.
|
|
466
|
-
if (userVerificationRequired && (flag & 0x04) !== 0x04)
|
|
467
|
-
return false;
|
|
468
|
-
// If the BE bit of the flags in authData is not set, verify that
|
|
469
|
-
// the BS bit is not set.
|
|
470
|
-
if ((flag & 0x08) !== 0x08 && (flag & 0x10) === 0x10)
|
|
471
|
-
return false;
|
|
472
|
-
// Check that response is for an authentication assertion (if typeIndex is provided)
|
|
473
|
-
if (typeIndex !== undefined) {
|
|
474
|
-
const type = '"type":"webauthn.get"';
|
|
475
|
-
if (type !==
|
|
476
|
-
clientDataJSON.slice(Number(typeIndex), Number(typeIndex) + type.length))
|
|
477
|
-
return false;
|
|
478
|
-
}
|
|
479
|
-
// Extract and validate the challenge from clientDataJSON
|
|
480
|
-
const challengeMatch = challengeIndex !== undefined
|
|
481
|
-
? clientDataJSON
|
|
482
|
-
.slice(Number(challengeIndex))
|
|
483
|
-
.match(/^"challenge":"(.*?)"/)
|
|
484
|
-
: clientDataJSON.match(/"challenge":"(.*?)"/);
|
|
485
|
-
if (!challengeMatch)
|
|
486
|
-
return false;
|
|
487
|
-
// Validate the challenge in the clientDataJSON.
|
|
488
|
-
const [_, challenge_extracted] = challengeMatch;
|
|
489
|
-
if (Hex.fromBytes(Base64.toBytes(challenge_extracted)) !== challenge)
|
|
490
|
-
return false;
|
|
491
|
-
const clientDataJSONHash = Hash.sha256(Bytes.fromString(clientDataJSON), {
|
|
492
|
-
as: 'Bytes',
|
|
493
|
-
});
|
|
494
|
-
const payload = Bytes.concat(authenticatorDataBytes, clientDataJSONHash);
|
|
495
|
-
return P256.verify({
|
|
496
|
-
hash,
|
|
497
|
-
payload,
|
|
498
|
-
publicKey,
|
|
499
|
-
signature,
|
|
500
|
-
});
|
|
501
|
-
}
|
|
502
|
-
/** Thrown when a WebAuthn P256 credential creation fails. */
|
|
503
|
-
export class CredentialCreationFailedError extends Errors.BaseError {
|
|
504
|
-
constructor({ cause } = {}) {
|
|
505
|
-
super('Failed to create credential.', {
|
|
506
|
-
cause,
|
|
507
|
-
});
|
|
508
|
-
Object.defineProperty(this, "name", {
|
|
509
|
-
enumerable: true,
|
|
510
|
-
configurable: true,
|
|
511
|
-
writable: true,
|
|
512
|
-
value: 'WebAuthnP256.CredentialCreationFailedError'
|
|
513
|
-
});
|
|
514
|
-
}
|
|
515
|
-
}
|
|
516
|
-
/** Thrown when a WebAuthn P256 credential request fails. */
|
|
517
|
-
export class CredentialRequestFailedError extends Errors.BaseError {
|
|
518
|
-
constructor({ cause } = {}) {
|
|
519
|
-
super('Failed to request credential.', {
|
|
520
|
-
cause,
|
|
521
|
-
});
|
|
522
|
-
Object.defineProperty(this, "name", {
|
|
523
|
-
enumerable: true,
|
|
524
|
-
configurable: true,
|
|
525
|
-
writable: true,
|
|
526
|
-
value: 'WebAuthnP256.CredentialRequestFailedError'
|
|
527
|
-
});
|
|
528
|
-
}
|
|
280
|
+
return Authentication.verify(options);
|
|
529
281
|
}
|
|
530
282
|
//# sourceMappingURL=WebAuthnP256.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebAuthnP256.js","sourceRoot":"","sources":["../../core/WebAuthnP256.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"WebAuthnP256.js","sourceRoot":"","sources":["../../core/WebAuthnP256.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,cAAc,MAAM,+BAA+B,CAAA;AAC/D,OAAO,KAAK,aAAa,MAAM,8BAA8B,CAAA;AAE7D,OAAO,KAAK,YAAY,MAAM,6BAA6B,CAAA;AAQ3D,MAAM,CAAC,MAAM,eAAe,GAAG,YAAY,CAAC,eAAe,CAAA;AAE3D;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAAiC;IAEjC,OAAO,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;AACrC,CAAC;AAOD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,aAAa,CAAC,oBAAoB,CAAA;AAQtE;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,aAAa,CAAC,iBAAiB,CAAA;AAQhE;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,aAAa,CAAC,oBAAoB,CAAA;AAQtE;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,YAAY,CAAC,UAAU,CAAA;AAQnE;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,cAAc,CAAC,UAAU,CAAA;AAOpE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,cAAc,CAAC,cAAc,CAAA;AAU3D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,OAAqB;IAC9C,OAAO,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AACrC,CAAC;AAUD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,UAAU,MAAM,CAAC,OAAuB;IAC5C,OAAO,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;AACvC,CAAC"}
|
|
@@ -169,7 +169,10 @@ export async function sign(options) {
|
|
|
169
169
|
* @returns Whether the payload was signed by the provided public key.
|
|
170
170
|
*/
|
|
171
171
|
export async function verify(options) {
|
|
172
|
-
const { payload, signature } = options;
|
|
172
|
+
const { lowS = true, payload, signature } = options;
|
|
173
|
+
// Reject high-S signatures if lowS is enabled.
|
|
174
|
+
if (lowS && signature.s > p256.CURVE.n / 2n)
|
|
175
|
+
return false;
|
|
173
176
|
const publicKey = await globalThis.crypto.subtle.importKey('raw', PublicKey.toBytes(options.publicKey), { name: 'ECDSA', namedCurve: 'P-256' }, true, ['verify']);
|
|
174
177
|
return await globalThis.crypto.subtle.verify({
|
|
175
178
|
name: 'ECDSA',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebCryptoP256.js","sourceRoot":"","sources":["../../core/WebCryptoP256.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"WebCryptoP256.js","sourceRoot":"","sources":["../../core/WebCryptoP256.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,22 +1,14 @@
|
|
|
1
1
|
import { p256 } from '@noble/curves/p256';
|
|
2
|
-
import * as
|
|
2
|
+
import * as Registration from '../../webauthn/Registration.js';
|
|
3
3
|
import * as PublicKey from '../PublicKey.js';
|
|
4
|
-
import { CredentialCreationFailedError } from '../WebAuthnP256.js';
|
|
5
4
|
/**
|
|
6
5
|
* Parses an ASN.1 signature into a r and s value.
|
|
7
6
|
*
|
|
8
7
|
* @internal
|
|
9
8
|
*/
|
|
10
9
|
export function parseAsn1Signature(bytes) {
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
const s_start = bytes[r_end + 2] === 0 ? r_end + 3 : r_end + 2;
|
|
14
|
-
const r = BigInt(Hex.fromBytes(bytes.slice(r_start, r_end)));
|
|
15
|
-
const s = BigInt(Hex.fromBytes(bytes.slice(s_start)));
|
|
16
|
-
return {
|
|
17
|
-
r,
|
|
18
|
-
s: s > p256.CURVE.n / 2n ? p256.CURVE.n - s : s,
|
|
19
|
-
};
|
|
10
|
+
const sig = p256.Signature.fromDER(bytes).normalizeS();
|
|
11
|
+
return { r: sig.r, s: sig.s };
|
|
20
12
|
}
|
|
21
13
|
/**
|
|
22
14
|
* Parses a public key into x and y coordinates from the public key
|
|
@@ -28,7 +20,7 @@ export async function parseCredentialPublicKey(response) {
|
|
|
28
20
|
try {
|
|
29
21
|
const publicKeyBuffer = response.getPublicKey();
|
|
30
22
|
if (!publicKeyBuffer)
|
|
31
|
-
throw new
|
|
23
|
+
throw new Registration.CreateFailedError();
|
|
32
24
|
// Converting `publicKeyBuffer` throws when credential is created by 1Password Firefox Add-on
|
|
33
25
|
const publicKeyBytes = new Uint8Array(publicKeyBuffer);
|
|
34
26
|
const cryptoKey = await crypto.subtle.importKey('spki', new Uint8Array(publicKeyBytes), {
|
|
@@ -53,7 +45,7 @@ export async function parseCredentialPublicKey(response) {
|
|
|
53
45
|
for (let i = 0; i < data.length - coordinate.length; i++)
|
|
54
46
|
if (coordinate.every((byte, j) => data[i + j] === byte))
|
|
55
47
|
return i + coordinate.length;
|
|
56
|
-
throw new
|
|
48
|
+
throw new Registration.CreateFailedError();
|
|
57
49
|
};
|
|
58
50
|
const xStart = findStart(0x21);
|
|
59
51
|
const yStart = findStart(0x22);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webauthn.js","sourceRoot":"","sources":["../../../core/internal/webauthn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"webauthn.js","sourceRoot":"","sources":["../../../core/internal/webauthn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;AACzC,OAAO,KAAK,YAAY,MAAM,gCAAgC,CAAA;AAE9D,OAAO,KAAK,SAAS,MAAM,iBAAiB,CAAA;AAE5C;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAiB;IAClD,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,CAAA;IACtD,OAAO,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAA;AAC/B,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,QAA0C;IAE1C,IAAI,CAAC;QACH,MAAM,eAAe,GAAG,QAAQ,CAAC,YAAY,EAAE,CAAA;QAC/C,IAAI,CAAC,eAAe;YAAE,MAAM,IAAI,YAAY,CAAC,iBAAiB,EAAE,CAAA;QAEhE,6FAA6F;QAC7F,MAAM,cAAc,GAAG,IAAI,UAAU,CAAC,eAAe,CAAC,CAAA;QACtD,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,CAC7C,MAAM,EACN,IAAI,UAAU,CAAC,cAAc,CAAC,EAC9B;YACE,IAAI,EAAE,OAAO;YACb,UAAU,EAAE,OAAO;YACnB,IAAI,EAAE,SAAS;SAChB,EACD,IAAI,EACJ,CAAC,QAAQ,CAAC,CACX,CAAA;QACD,MAAM,SAAS,GAAG,IAAI,UAAU,CAC9B,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,CAChD,CAAA;QACD,OAAO,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAClC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,0FAA0F;QAC1F,mEAAmE;QACnE,gFAAgF;QAChF,IAAK,KAAe,CAAC,OAAO,KAAK,oCAAoC;YACnE,MAAM,KAAK,CAAA;QAEb,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAA;QACvD,MAAM,gBAAgB,GAAG,IAAI,CAAA;QAC7B,MAAM,UAAU,GAAG,IAAI,CAAA;QAEvB,MAAM,SAAS,GAAG,CAAC,GAAW,EAAE,EAAE;YAChC,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,CAAC,GAAG,EAAE,UAAU,EAAE,gBAAgB,CAAC,CAAC,CAAA;YACtE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE;gBACtD,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC;oBACrD,OAAO,CAAC,GAAG,UAAU,CAAC,MAAM,CAAA;YAChC,MAAM,IAAI,YAAY,CAAC,iBAAiB,EAAE,CAAA;QAC5C,CAAC,CAAA;QAED,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAA;QAC9B,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAA;QAE9B,OAAO,SAAS,CAAC,IAAI,CACnB,IAAI,UAAU,CAAC;YACb,IAAI;YACJ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,CAAC;YAChD,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,CAAC;SACjD,CAAC,CACH,CAAA;IACH,CAAC;AACH,CAAC"}
|
package/_esm/erc8021/index.js
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
*
|
|
14
14
|
* const dataSuffix2 = Attribution.toDataSuffix({
|
|
15
15
|
* codes: ['baseapp', 'morpho'],
|
|
16
|
-
*
|
|
16
|
+
* codeRegistry: { address: '0x0000000000000000000000000000000000000000', chainId: 1 },
|
|
17
17
|
* })
|
|
18
18
|
* ```
|
|
19
19
|
*
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
* const attribution = Attribution.fromData('0x...')
|
|
27
27
|
*
|
|
28
28
|
* console.log(attribution)
|
|
29
|
-
* // @log: { codes: ['baseapp', 'morpho'],
|
|
29
|
+
* // @log: { codes: ['baseapp', 'morpho'], codeRegistry: { address: '0x...', chainId: 1 } }
|
|
30
30
|
* ```
|
|
31
31
|
*
|
|
32
32
|
* @category ERC-8021
|
package/_esm/index.docs.js
CHANGED
package/_esm/index.docs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.docs.js","sourceRoot":"","sources":["../index.docs.ts"],"names":[],"mappings":"AAAA,cAAc;AACd,2FAA2F;AAC3F,gDAAgD;AAChD,cAAc,YAAY,CAAA;AAC1B,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.docs.js","sourceRoot":"","sources":["../index.docs.ts"],"names":[],"mappings":"AAAA,cAAc;AACd,2FAA2F;AAC3F,gDAAgD;AAChD,cAAc,YAAY,CAAA;AAC1B,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAClC,cAAc,qBAAqB,CAAA;AACnC,cAAc,kBAAkB,CAAA"}
|
|
@@ -293,6 +293,35 @@ export function fromTuple(tuple) {
|
|
|
293
293
|
export function getSignPayload(authorization) {
|
|
294
294
|
return hash(authorization);
|
|
295
295
|
}
|
|
296
|
+
/**
|
|
297
|
+
* Deserializes an RLP-encoded {@link ox#KeyAuthorization.KeyAuthorization}.
|
|
298
|
+
*
|
|
299
|
+
* @example
|
|
300
|
+
* ```ts twoslash
|
|
301
|
+
* import { KeyAuthorization } from 'ox/tempo'
|
|
302
|
+
* import { Value } from 'ox'
|
|
303
|
+
*
|
|
304
|
+
* const authorization = KeyAuthorization.from({
|
|
305
|
+
* expiry: 1234567890,
|
|
306
|
+
* address: '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c',
|
|
307
|
+
* type: 'secp256k1',
|
|
308
|
+
* limits: [{
|
|
309
|
+
* token: '0x20c0000000000000000000000000000000000001',
|
|
310
|
+
* limit: Value.from('10', 6)
|
|
311
|
+
* }],
|
|
312
|
+
* })
|
|
313
|
+
*
|
|
314
|
+
* const serialized = KeyAuthorization.serialize(authorization)
|
|
315
|
+
* const deserialized = KeyAuthorization.deserialize(serialized) // [!code focus]
|
|
316
|
+
* ```
|
|
317
|
+
*
|
|
318
|
+
* @param serialized - The RLP-encoded Key Authorization.
|
|
319
|
+
* @returns The {@link ox#KeyAuthorization.KeyAuthorization}.
|
|
320
|
+
*/
|
|
321
|
+
export function deserialize(serialized) {
|
|
322
|
+
const tuple = Rlp.toHex(serialized);
|
|
323
|
+
return fromTuple(tuple);
|
|
324
|
+
}
|
|
296
325
|
/**
|
|
297
326
|
* Computes the hash for an {@link ox#KeyAuthorization.KeyAuthorization}.
|
|
298
327
|
*
|
|
@@ -322,6 +351,34 @@ export function hash(authorization) {
|
|
|
322
351
|
const serialized = Rlp.fromHex(authorizationTuple);
|
|
323
352
|
return Hash.keccak256(serialized);
|
|
324
353
|
}
|
|
354
|
+
/**
|
|
355
|
+
* Serializes a {@link ox#KeyAuthorization.KeyAuthorization} to RLP-encoded hex.
|
|
356
|
+
*
|
|
357
|
+
* @example
|
|
358
|
+
* ```ts twoslash
|
|
359
|
+
* import { KeyAuthorization } from 'ox/tempo'
|
|
360
|
+
* import { Value } from 'ox'
|
|
361
|
+
*
|
|
362
|
+
* const authorization = KeyAuthorization.from({
|
|
363
|
+
* expiry: 1234567890,
|
|
364
|
+
* address: '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c',
|
|
365
|
+
* type: 'secp256k1',
|
|
366
|
+
* limits: [{
|
|
367
|
+
* token: '0x20c0000000000000000000000000000000000001',
|
|
368
|
+
* limit: Value.from('10', 6)
|
|
369
|
+
* }],
|
|
370
|
+
* })
|
|
371
|
+
*
|
|
372
|
+
* const serialized = KeyAuthorization.serialize(authorization) // [!code focus]
|
|
373
|
+
* ```
|
|
374
|
+
*
|
|
375
|
+
* @param authorization - The {@link ox#KeyAuthorization.KeyAuthorization}.
|
|
376
|
+
* @returns The RLP-encoded Key Authorization.
|
|
377
|
+
*/
|
|
378
|
+
export function serialize(authorization) {
|
|
379
|
+
const tuple = toTuple(authorization);
|
|
380
|
+
return Rlp.fromHex(tuple);
|
|
381
|
+
}
|
|
325
382
|
/**
|
|
326
383
|
* Converts an {@link ox#KeyAuthorization.KeyAuthorization} to an {@link ox#KeyAuthorization.Rpc}.
|
|
327
384
|
*
|
|
@@ -413,13 +470,19 @@ export function toTuple(authorization) {
|
|
|
413
470
|
throw new Error(`Invalid key type: ${authorization.type}`);
|
|
414
471
|
}
|
|
415
472
|
})();
|
|
473
|
+
const limitsValue = limits?.map((limit) => [
|
|
474
|
+
limit.token,
|
|
475
|
+
bigintToHex(limit.limit),
|
|
476
|
+
]);
|
|
416
477
|
const authorizationTuple = [
|
|
417
478
|
bigintToHex(chainId),
|
|
418
479
|
type,
|
|
419
480
|
address,
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
481
|
+
// expiry is required in the tuple when limits are present
|
|
482
|
+
typeof expiry === 'number' || limitsValue
|
|
483
|
+
? numberToHex(expiry ?? 0)
|
|
484
|
+
: undefined,
|
|
485
|
+
limitsValue,
|
|
423
486
|
].filter(Boolean);
|
|
424
487
|
return [authorizationTuple, ...(signature ? [signature] : [])];
|
|
425
488
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KeyAuthorization.js","sourceRoot":"","sources":["../../tempo/KeyAuthorization.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"KeyAuthorization.js","sourceRoot":"","sources":["../../tempo/KeyAuthorization.ts"],"names":[],"mappings":"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"}
|