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.
Files changed (128) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/_cjs/core/P256.js +1 -1
  3. package/_cjs/core/P256.js.map +1 -1
  4. package/_cjs/core/WebAuthnP256.js +15 -256
  5. package/_cjs/core/WebAuthnP256.js.map +1 -1
  6. package/_cjs/core/WebCryptoP256.js +3 -1
  7. package/_cjs/core/WebCryptoP256.js.map +1 -1
  8. package/_cjs/core/internal/webauthn.js +5 -13
  9. package/_cjs/core/internal/webauthn.js.map +1 -1
  10. package/_cjs/index.docs.js +1 -0
  11. package/_cjs/index.docs.js.map +1 -1
  12. package/_cjs/tempo/KeyAuthorization.js +18 -3
  13. package/_cjs/tempo/KeyAuthorization.js.map +1 -1
  14. package/_cjs/tempo/SignatureEnvelope.js +26 -0
  15. package/_cjs/tempo/SignatureEnvelope.js.map +1 -1
  16. package/_cjs/tempo/TxEnvelopeTempo.js +5 -10
  17. package/_cjs/tempo/TxEnvelopeTempo.js.map +1 -1
  18. package/_cjs/version.js +1 -1
  19. package/_cjs/webauthn/Authentication.js +246 -0
  20. package/_cjs/webauthn/Authentication.js.map +1 -0
  21. package/_cjs/webauthn/Authenticator.js +55 -0
  22. package/_cjs/webauthn/Authenticator.js.map +1 -0
  23. package/_cjs/webauthn/Credential.js +53 -0
  24. package/_cjs/webauthn/Credential.js.map +1 -0
  25. package/_cjs/webauthn/Registration.js +349 -0
  26. package/_cjs/webauthn/Registration.js.map +1 -0
  27. package/_cjs/webauthn/Types.js +3 -0
  28. package/_cjs/webauthn/Types.js.map +1 -0
  29. package/_cjs/webauthn/index.js +9 -0
  30. package/_cjs/webauthn/index.js.map +1 -0
  31. package/_cjs/webauthn/internal/utils.js +53 -0
  32. package/_cjs/webauthn/internal/utils.js.map +1 -0
  33. package/_esm/core/P256.js +1 -1
  34. package/_esm/core/P256.js.map +1 -1
  35. package/_esm/core/WebAuthnP256.js +13 -261
  36. package/_esm/core/WebAuthnP256.js.map +1 -1
  37. package/_esm/core/WebCryptoP256.js +4 -1
  38. package/_esm/core/WebCryptoP256.js.map +1 -1
  39. package/_esm/core/internal/webauthn.js +5 -13
  40. package/_esm/core/internal/webauthn.js.map +1 -1
  41. package/_esm/erc8021/index.js +2 -2
  42. package/_esm/index.docs.js +1 -0
  43. package/_esm/index.docs.js.map +1 -1
  44. package/_esm/tempo/KeyAuthorization.js +66 -3
  45. package/_esm/tempo/KeyAuthorization.js.map +1 -1
  46. package/_esm/tempo/SignatureEnvelope.js +74 -0
  47. package/_esm/tempo/SignatureEnvelope.js.map +1 -1
  48. package/_esm/tempo/TransactionReceipt.js +1 -1
  49. package/_esm/tempo/TransactionRequest.js +1 -1
  50. package/_esm/tempo/TxEnvelopeTempo.js +5 -10
  51. package/_esm/tempo/TxEnvelopeTempo.js.map +1 -1
  52. package/_esm/version.js +1 -1
  53. package/_esm/webauthn/Authentication.js +453 -0
  54. package/_esm/webauthn/Authentication.js.map +1 -0
  55. package/_esm/webauthn/Authenticator.js +176 -0
  56. package/_esm/webauthn/Authenticator.js.map +1 -0
  57. package/_esm/webauthn/Credential.js +95 -0
  58. package/_esm/webauthn/Credential.js.map +1 -0
  59. package/_esm/webauthn/Registration.js +512 -0
  60. package/_esm/webauthn/Registration.js.map +1 -0
  61. package/_esm/webauthn/Types.js +2 -0
  62. package/_esm/webauthn/Types.js.map +1 -0
  63. package/_esm/webauthn/index.js +31 -0
  64. package/_esm/webauthn/index.js.map +1 -0
  65. package/_esm/webauthn/internal/utils.js +52 -0
  66. package/_esm/webauthn/internal/utils.js.map +1 -0
  67. package/_types/core/WebAuthnP256.d.ts +33 -208
  68. package/_types/core/WebAuthnP256.d.ts.map +1 -1
  69. package/_types/core/WebCryptoP256.d.ts +2 -0
  70. package/_types/core/WebCryptoP256.d.ts.map +1 -1
  71. package/_types/core/internal/webauthn.d.ts +2 -110
  72. package/_types/core/internal/webauthn.d.ts.map +1 -1
  73. package/_types/erc8021/index.d.ts +2 -2
  74. package/_types/index.docs.d.ts +1 -0
  75. package/_types/index.docs.d.ts.map +1 -1
  76. package/_types/tempo/KeyAuthorization.d.ts +57 -0
  77. package/_types/tempo/KeyAuthorization.d.ts.map +1 -1
  78. package/_types/tempo/SignatureEnvelope.d.ts +75 -0
  79. package/_types/tempo/SignatureEnvelope.d.ts.map +1 -1
  80. package/_types/tempo/Transaction.d.ts +2 -2
  81. package/_types/tempo/TransactionReceipt.d.ts +2 -2
  82. package/_types/tempo/TransactionRequest.d.ts +2 -2
  83. package/_types/tempo/TxEnvelopeTempo.d.ts.map +1 -1
  84. package/_types/version.d.ts +1 -1
  85. package/_types/webauthn/Authentication.d.ts +324 -0
  86. package/_types/webauthn/Authentication.d.ts.map +1 -0
  87. package/_types/webauthn/Authenticator.d.ts +182 -0
  88. package/_types/webauthn/Authenticator.d.ts.map +1 -0
  89. package/_types/webauthn/Credential.d.ts +77 -0
  90. package/_types/webauthn/Credential.d.ts.map +1 -0
  91. package/_types/webauthn/Registration.d.ts +308 -0
  92. package/_types/webauthn/Registration.d.ts.map +1 -0
  93. package/_types/webauthn/Types.d.ts +106 -0
  94. package/_types/webauthn/Types.d.ts.map +1 -0
  95. package/_types/webauthn/index.d.ts +33 -0
  96. package/_types/webauthn/index.d.ts.map +1 -0
  97. package/_types/webauthn/internal/utils.d.ts +17 -0
  98. package/_types/webauthn/internal/utils.d.ts.map +1 -0
  99. package/core/P256.ts +1 -1
  100. package/core/WebAuthnP256.ts +37 -582
  101. package/core/WebCryptoP256.ts +6 -1
  102. package/core/internal/webauthn.ts +6 -165
  103. package/erc8021/index.ts +2 -2
  104. package/index.docs.ts +1 -0
  105. package/package.json +31 -1
  106. package/tempo/KeyAuthorization.test.ts +139 -0
  107. package/tempo/KeyAuthorization.ts +82 -3
  108. package/tempo/SignatureEnvelope.test.ts +147 -0
  109. package/tempo/SignatureEnvelope.ts +113 -0
  110. package/tempo/Transaction.ts +2 -2
  111. package/tempo/TransactionReceipt.ts +2 -2
  112. package/tempo/TransactionRequest.ts +2 -2
  113. package/tempo/TxEnvelopeTempo.ts +5 -12
  114. package/tempo/e2e.test.ts +265 -0
  115. package/version.ts +1 -1
  116. package/webauthn/Authentication/package.json +6 -0
  117. package/webauthn/Authentication.ts +673 -0
  118. package/webauthn/Authenticator/package.json +6 -0
  119. package/webauthn/Authenticator.ts +259 -0
  120. package/webauthn/Credential/package.json +6 -0
  121. package/webauthn/Credential.ts +146 -0
  122. package/webauthn/Registration/package.json +6 -0
  123. package/webauthn/Registration.ts +805 -0
  124. package/webauthn/Types/package.json +6 -0
  125. package/webauthn/Types.ts +158 -0
  126. package/webauthn/index.ts +38 -0
  127. package/webauthn/internal/utils.ts +63 -0
  128. package/webauthn/package.json +6 -0
@@ -1,15 +1,7 @@
1
- import * as Base64 from './Base64.js';
2
- import * as Bytes from './Bytes.js';
3
- import * as Cbor from './Cbor.js';
4
- import * as CoseKey from './CoseKey.js';
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
- const { createFn = window.navigator.credentials.create.bind(window.navigator.credentials), ...rest } = options;
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 function getAuthenticatorData(options = {}) {
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 function getClientDataJSON(options) {
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 function getAttestationObject(options) {
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 function getCredentialCreationOptions(options) {
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 function getCredentialRequestOptions(options) {
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 function getSignPayload(options) {
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
- const { getFn = window.navigator.credentials.get.bind(window.navigator.credentials), ...rest } = options;
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
- const { challenge, hash = true, metadata, publicKey, signature } = options;
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":"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"}
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 Hex from '../Hex.js';
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 r_start = bytes[4] === 0 ? 5 : 4;
12
- const r_end = r_start + 32;
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 CredentialCreationFailedError();
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 CredentialCreationFailedError();
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":"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"}
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"}
@@ -13,7 +13,7 @@
13
13
  *
14
14
  * const dataSuffix2 = Attribution.toDataSuffix({
15
15
  * codes: ['baseapp', 'morpho'],
16
- * codeRegistryAddress: '0x...'
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'], codeRegistryAddress: '0x...' }
29
+ * // @log: { codes: ['baseapp', 'morpho'], codeRegistry: { address: '0x...', chainId: 1 } }
30
30
  * ```
31
31
  *
32
32
  * @category ERC-8021
@@ -7,5 +7,6 @@ export * from './erc6492/index.js';
7
7
  export * from './erc7821/index.js';
8
8
  export * from './erc8010/index.js';
9
9
  export * from './erc8021/index.js';
10
+ export * from './webauthn/index.js';
10
11
  export * from './tempo/index.js';
11
12
  //# sourceMappingURL=index.docs.js.map
@@ -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
- typeof expiry === 'number' ? numberToHex(expiry) : undefined,
421
- limits?.map((limit) => [limit.token, bigintToHex(limit.limit)]) ??
422
- undefined,
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":"AAEA,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAA;AACvC,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAA;AAErC,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAA;AACrC,OAAO,KAAK,iBAAiB,MAAM,wBAAwB,CAAA;AA4G3D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmIG;AACH,MAAM,UAAU,IAAI,CAIlB,aAA+C,EAC/C,UAAmC,EAAE;IAErC,IAAI,OAAO,aAAa,CAAC,MAAM,KAAK,QAAQ;QAC1C,OAAO,OAAO,CAAC,aAAoB,CAAU,CAAA;IAC/C,IAAI,OAAO,CAAC,SAAS;QACnB,OAAO;YACL,GAAG,aAAa;YAChB,SAAS,EAAE,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;SAC5C,CAAA;IACZ,OAAO,aAAsB,CAAA;AAC/B,CAAC;AA6BD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,UAAU,OAAO,CAAC,aAAkB;IACxC,MAAM,EAAE,OAAO,GAAG,KAAK,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,aAAa,CAAA;IAC7E,MAAM,SAAS,GAAG,iBAAiB,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAA;IACpE,OAAO;QACL,OAAO,EAAE,KAAK;QACd,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC;QACtD,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;QACtB,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC9B,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;SAC3B,CAAC,CAAC;QACH,SAAS;QACT,IAAI,EAAE,OAAO;KACd,CAAA;AACH,CAAC;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,MAAM,UAAU,SAAS,CACvB,KAAY;IAEZ,MAAM,CAAC,aAAa,EAAE,mBAAmB,CAAC,GAAG,KAAK,CAAA;IAClD,MAAM,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,aAAa,CAAA;IACnE,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE;QACpB,QAAQ,WAAW,EAAE,CAAC;YACpB,KAAK,IAAI,CAAC;YACV,KAAK,MAAM;gBACT,OAAO,WAAW,CAAA;YACpB,KAAK,MAAM;gBACT,OAAO,MAAM,CAAA;YACf,KAAK,MAAM;gBACT,OAAO,UAAU,CAAA;YACnB;gBACE,MAAM,IAAI,KAAK,CAAC,qBAAqB,WAAW,EAAE,CAAC,CAAA;QACvD,CAAC;IACH,CAAC,CAAC,EAAE,CAAA;IACJ,MAAM,IAAI,GAAqB;QAC7B,OAAO,EAAE,KAAK;QACd,MAAM,EAAE,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;QACvE,IAAI,EAAE,OAAO;QACb,GAAG,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,GAAG,CAAC,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzE,GAAG,CAAC,OAAO,MAAM,KAAK,WAAW;YAC/B,CAAC,CAAC;gBACE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;oBACtC,KAAK;oBACL,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC;iBAC1B,CAAC,CAAC;aACJ;YACH,CAAC,CAAC,EAAE,CAAC;KACR,CAAA;IACD,IAAI,mBAAmB;QACrB,IAAI,CAAC,SAAS,GAAG,iBAAiB,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAA;IACrE,OAAO,IAAI,CAAC,IAAI,CAAU,CAAA;AAC5B,CAAC;AAUD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,UAAU,cAAc,CAAC,aAA+B;IAC5D,OAAO,IAAI,CAAC,aAAa,CAAC,CAAA;AAC5B,CAAC;AAMD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,UAAU,IAAI,CAAC,aAA+B;IAClD,MAAM,CAAC,kBAAkB,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,CAAA;IACnD,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAA;IAClD,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;AACnC,CAAC;AAWD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,UAAU,KAAK,CAAC,aAAqB;IACzC,MAAM,EACJ,OAAO,EACP,OAAO,GAAG,EAAE,EACZ,MAAM,EACN,MAAM,EACN,IAAI,EACJ,SAAS,GACV,GAAG,aAAa,CAAA;IAEjB,OAAO;QACL,OAAO,EAAE,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC;QACxD,MAAM,EAAE,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI;QAClE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;YACzC,KAAK;YACL,KAAK,EAAE,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC;SAC7B,CAAC,CAAC;QACH,KAAK,EAAE,OAAO;QACd,SAAS,EAAE,iBAAiB,CAAC,KAAK,CAAC,SAAS,CAAC;QAC7C,OAAO,EAAE,IAAI;KACd,CAAA;AACH,CAAC;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,UAAU,OAAO,CACrB,aAA4B;IAE5B,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,aAAa,CAAA;IAC/D,MAAM,SAAS,GAAG,aAAa,CAAC,SAAS;QACvC,CAAC,CAAC,iBAAiB,CAAC,SAAS,CAAC,aAAa,CAAC,SAAS,CAAC;QACtD,CAAC,CAAC,SAAS,CAAA;IACb,MAAM,IAAI,GAAG,CAAC,GAAG,EAAE;QACjB,QAAQ,aAAa,CAAC,IAAI,EAAE,CAAC;YAC3B,KAAK,WAAW;gBACd,OAAO,IAAI,CAAA;YACb,KAAK,MAAM;gBACT,OAAO,MAAM,CAAA;YACf,KAAK,UAAU;gBACb,OAAO,MAAM,CAAA;YACf;gBACE,MAAM,IAAI,KAAK,CAAC,qBAAqB,aAAa,CAAC,IAAI,EAAE,CAAC,CAAA;QAC9D,CAAC;IACH,CAAC,CAAC,EAAE,CAAA;IACJ,MAAM,kBAAkB,GAAG;QACzB,WAAW,CAAC,OAAO,CAAC;QACpB,IAAI;QACJ,OAAO;QACP,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;QAC5D,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;YAC7D,SAAS;KACZ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IACjB,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAU,CAAA;AACzE,CAAC;AASD,SAAS,WAAW,CAAC,KAAa;IAChC,OAAO,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;AACpD,CAAC;AAED,SAAS,WAAW,CAAC,KAAa;IAChC,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;AACnD,CAAC;AAED,SAAS,WAAW,CAAC,GAAY;IAC/B,OAAO,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;AACxC,CAAC;AAED,SAAS,WAAW,CAAC,GAAY;IAC/B,OAAO,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;AAC7C,CAAC"}
1
+ {"version":3,"file":"KeyAuthorization.js","sourceRoot":"","sources":["../../tempo/KeyAuthorization.ts"],"names":[],"mappings":"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"}