@mentaproject/signer-react-native 0.0.15 → 0.0.18

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/dist/signer.d.ts CHANGED
@@ -194,6 +194,7 @@ export declare class ReactNativePasskeySigner {
194
194
  * Internal method to sign a challenge with the passkey.
195
195
  *
196
196
  * @param challenge - The Base64URL-encoded challenge
197
+ * @param chainId - Optional chain ID for RIP7212 precompile detection
197
198
  * @returns The encoded signature
198
199
  */
199
200
  private signWithPasskey;
@@ -201,6 +202,88 @@ export declare class ReactNativePasskeySigner {
201
202
  * Converts a hex string to Uint8Array.
202
203
  */
203
204
  private hexToBytes;
205
+ /**
206
+ * Internal method to sign a challenge and return raw WebAuthn components.
207
+ * This is used by toWebAuthnAccount() where the caller handles encoding.
208
+ *
209
+ * @param challenge - The Base64URL-encoded challenge
210
+ * @returns Raw WebAuthn signature components
211
+ */
212
+ private signRaw;
213
+ /**
214
+ * Creates a viem-compatible WebAuthnAccount.
215
+ *
216
+ * This returns an object compatible with viem's WebAuthnAccount interface,
217
+ * which can be used directly with permissionless's toKernelSmartAccount.
218
+ *
219
+ * @example
220
+ * ```typescript
221
+ * const webAuthnAccount = signer.toWebAuthnAccount();
222
+ *
223
+ * const kernel = await toKernelSmartAccount({
224
+ * owners: [webAuthnAccount],
225
+ * client: publicClient,
226
+ * version: "0.3.3",
227
+ * });
228
+ * ```
229
+ */
230
+ toWebAuthnAccount(): {
231
+ id: string;
232
+ publicKey: Hex;
233
+ sign: (params: {
234
+ hash: Hex;
235
+ }) => Promise<{
236
+ signature: Hex;
237
+ webauthn: {
238
+ authenticatorData: Hex;
239
+ clientDataJSON: string;
240
+ typeIndex: number;
241
+ };
242
+ raw: {
243
+ id: string;
244
+ response: {
245
+ authenticatorData: Hex;
246
+ clientDataJSON: string;
247
+ signature: Hex;
248
+ };
249
+ };
250
+ }>;
251
+ signMessage: (params: {
252
+ message: SignableMessage;
253
+ }) => Promise<{
254
+ signature: Hex;
255
+ webauthn: {
256
+ authenticatorData: Hex;
257
+ clientDataJSON: string;
258
+ typeIndex: number;
259
+ };
260
+ raw: {
261
+ id: string;
262
+ response: {
263
+ authenticatorData: Hex;
264
+ clientDataJSON: string;
265
+ signature: Hex;
266
+ };
267
+ };
268
+ }>;
269
+ signTypedData: <T>(typedData: T) => Promise<{
270
+ signature: Hex;
271
+ webauthn: {
272
+ authenticatorData: Hex;
273
+ clientDataJSON: string;
274
+ typeIndex: number;
275
+ };
276
+ raw: {
277
+ id: string;
278
+ response: {
279
+ authenticatorData: Hex;
280
+ clientDataJSON: string;
281
+ signature: Hex;
282
+ };
283
+ };
284
+ }>;
285
+ type: "webAuthn";
286
+ };
204
287
  }
205
288
  /**
206
289
  * Type guard to check if a value is a valid PasskeyCredential.
@@ -1 +1 @@
1
- {"version":3,"file":"signer.d.ts","sourceRoot":"","sources":["../src/signer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"signer.d.ts","sourceRoot":"","sources":["../src/signer.ts"],"names":[],"mappings":"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"}
package/dist/signer.js CHANGED
@@ -331,28 +331,36 @@ export class ReactNativePasskeySigner {
331
331
  * without relying on @simplewebauthn/browser.
332
332
  */
333
333
  get signMessageCallback() {
334
- return async (message, _rpId, _chainId, _allowCredentials) => {
335
- // Convert message to bytes for the challenge
336
- let messageBytes;
334
+ return async (message, _rpId, chainId, _allowCredentials) => {
335
+ // Match ZeroDev's behavior: extract message content and treat as hex
336
+ let messageContent;
337
337
  if (typeof message === "string") {
338
- const encoder = new TextEncoder();
339
- messageBytes = encoder.encode(message);
338
+ // message is a string (treated as hex by ZeroDev)
339
+ messageContent = message;
340
340
  }
341
- else if ("raw" in message) {
342
- if (typeof message.raw === "string") {
343
- messageBytes = this.hexToBytes(message.raw);
344
- }
345
- else {
346
- messageBytes = message.raw;
347
- }
341
+ else if ("raw" in message && typeof message.raw === "string") {
342
+ // message.raw is a Hex string
343
+ messageContent = message.raw;
344
+ }
345
+ else if ("raw" in message && message.raw instanceof Uint8Array) {
346
+ // message.raw is a ByteArray - convert to hex string
347
+ messageContent = Array.from(message.raw)
348
+ .map((b) => b.toString(16).padStart(2, "0"))
349
+ .join("");
348
350
  }
349
351
  else {
350
- throw new PasskeySignerError("Invalid message format");
352
+ throw new PasskeySignerError("Unsupported message format");
351
353
  }
354
+ // Remove 0x prefix if present (matches ZeroDev behavior)
355
+ const formattedMessage = messageContent.startsWith("0x")
356
+ ? messageContent.slice(2)
357
+ : messageContent;
358
+ // Convert hex string to bytes
359
+ const messageBytes = this.hexToBytes(`0x${formattedMessage}`);
352
360
  // Create challenge from message bytes
353
361
  const challenge = bytesToBase64Url(messageBytes);
354
- // Sign with passkey
355
- return this.signWithPasskey(challenge);
362
+ // Sign with passkey, using the chainId for proper RIP7212 detection
363
+ return this.signWithPasskey(challenge, chainId);
356
364
  };
357
365
  }
358
366
  /**
@@ -382,9 +390,10 @@ export class ReactNativePasskeySigner {
382
390
  * Internal method to sign a challenge with the passkey.
383
391
  *
384
392
  * @param challenge - The Base64URL-encoded challenge
393
+ * @param chainId - Optional chain ID for RIP7212 precompile detection
385
394
  * @returns The encoded signature
386
395
  */
387
- async signWithPasskey(challenge) {
396
+ async signWithPasskey(challenge, chainId) {
388
397
  try {
389
398
  // Create assertion options
390
399
  const options = createAssertionOptions(challenge, this.config.rpId, this.credentialId, this.config.userVerification, this.config.timeout);
@@ -397,7 +406,9 @@ export class ReactNativePasskeySigner {
397
406
  signature: result.response.signature,
398
407
  });
399
408
  // Encode the signature according to the configured format
400
- return encodeWebAuthnSignature(webAuthnSignature, this.config.signatureFormat);
409
+ // Use provided chainId, or fall back to config chainId, or default to Sepolia
410
+ const effectiveChainId = chainId ?? this.config.chainId ?? 11155111;
411
+ return encodeWebAuthnSignature(webAuthnSignature, this.config.signatureFormat, effectiveChainId);
401
412
  }
402
413
  catch (error) {
403
414
  if (error instanceof SignatureError) {
@@ -417,6 +428,126 @@ export class ReactNativePasskeySigner {
417
428
  }
418
429
  return bytes;
419
430
  }
431
+ /**
432
+ * Internal method to sign a challenge and return raw WebAuthn components.
433
+ * This is used by toWebAuthnAccount() where the caller handles encoding.
434
+ *
435
+ * @param challenge - The Base64URL-encoded challenge
436
+ * @returns Raw WebAuthn signature components
437
+ */
438
+ async signRaw(challenge) {
439
+ // Create assertion options
440
+ const options = createAssertionOptions(challenge, this.config.rpId, this.credentialId, this.config.userVerification, this.config.timeout);
441
+ // Call native passkey assertion
442
+ const result = await Passkey.get(options);
443
+ // Parse the assertion response
444
+ const webAuthnSignature = parseWebAuthnAssertion({
445
+ authenticatorData: result.response.authenticatorData,
446
+ clientDataJSON: result.response.clientDataJSON,
447
+ signature: result.response.signature,
448
+ });
449
+ return {
450
+ authenticatorData: webAuthnSignature.authenticatorData,
451
+ clientDataJSON: webAuthnSignature.clientDataJSON,
452
+ r: webAuthnSignature.r,
453
+ s: webAuthnSignature.s,
454
+ typeIndex: webAuthnSignature.responseTypeLocation,
455
+ };
456
+ }
457
+ /**
458
+ * Creates a viem-compatible WebAuthnAccount.
459
+ *
460
+ * This returns an object compatible with viem's WebAuthnAccount interface,
461
+ * which can be used directly with permissionless's toKernelSmartAccount.
462
+ *
463
+ * @example
464
+ * ```typescript
465
+ * const webAuthnAccount = signer.toWebAuthnAccount();
466
+ *
467
+ * const kernel = await toKernelSmartAccount({
468
+ * owners: [webAuthnAccount],
469
+ * client: publicClient,
470
+ * version: "0.3.3",
471
+ * });
472
+ * ```
473
+ */
474
+ toWebAuthnAccount() {
475
+ const self = this;
476
+ const signWithHash = async (hash) => {
477
+ // Convert hash to challenge (base64url encoded)
478
+ const messageBytes = self.hexToBytes(hash);
479
+ const challenge = bytesToBase64Url(messageBytes);
480
+ try {
481
+ const rawResult = await self.signRaw(challenge);
482
+ // Combine r and s into a single signature (64 bytes)
483
+ const rClean = rawResult.r.startsWith("0x")
484
+ ? rawResult.r.slice(2)
485
+ : rawResult.r;
486
+ const sClean = rawResult.s.startsWith("0x")
487
+ ? rawResult.s.slice(2)
488
+ : rawResult.s;
489
+ const signature = `0x${rClean}${sClean}`;
490
+ return {
491
+ signature,
492
+ webauthn: {
493
+ authenticatorData: rawResult.authenticatorData,
494
+ clientDataJSON: rawResult.clientDataJSON,
495
+ typeIndex: rawResult.typeIndex,
496
+ },
497
+ raw: {
498
+ id: self.credentialId,
499
+ response: {
500
+ authenticatorData: rawResult.authenticatorData,
501
+ clientDataJSON: rawResult.clientDataJSON,
502
+ signature,
503
+ },
504
+ },
505
+ };
506
+ }
507
+ catch (error) {
508
+ if (error instanceof SignatureError) {
509
+ throw new PasskeySignerError(`Signature parsing failed: ${error.message}`, error);
510
+ }
511
+ throw new PasskeySignerError(`Passkey signing failed: ${error instanceof Error ? error.message : "Unknown error"}`, error);
512
+ }
513
+ };
514
+ return {
515
+ id: this.credentialId,
516
+ publicKey: this.publicKey,
517
+ type: "webAuthn",
518
+ async sign({ hash }) {
519
+ return signWithHash(hash);
520
+ },
521
+ async signMessage({ message }) {
522
+ // For WebAuthn, the message is typically already a hash
523
+ // permissionless wraps the message hash before calling this
524
+ let hash;
525
+ if (typeof message === "string") {
526
+ // Hash the string message
527
+ hash = keccak256(new TextEncoder().encode(message));
528
+ }
529
+ else if ("raw" in message) {
530
+ if (typeof message.raw === "string") {
531
+ hash = message.raw;
532
+ }
533
+ else {
534
+ hash = `0x${Array.from(message.raw)
535
+ .map((b) => b.toString(16).padStart(2, "0"))
536
+ .join("")}`;
537
+ }
538
+ }
539
+ else {
540
+ throw new PasskeySignerError("Invalid message format");
541
+ }
542
+ return signWithHash(hash);
543
+ },
544
+ async signTypedData(typedData) {
545
+ // Hash the typed data
546
+ const hash = hashTypedData(typedData);
547
+ return signWithHash(hash);
548
+ },
549
+ };
550
+ }
420
551
  }
421
552
  /**
422
553
  * Type guard to check if a value is a valid PasskeyCredential.
@@ -1 +1 @@
1
- {"version":3,"file":"signer.js","sourceRoot":"","sources":["../src/signer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"signer.js","sourceRoot":"","sources":["../src/signer.ts"],"names":[],"mappings":"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"}
@@ -113,5 +113,7 @@ export type SignatureEncodingFormat = "kernel" | "rhinestone" | "raw";
113
113
  export interface ReactNativePasskeySignerConfig extends PasskeyConfig {
114
114
  /** The format to use when encoding signatures */
115
115
  signatureFormat?: SignatureEncodingFormat;
116
+ /** Chain ID for RIP7212 precompile detection (default: 11155111 - Sepolia) */
117
+ chainId?: number;
116
118
  }
117
119
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,MAAM,CAAC;AAEzE;;GAEG;AACH,MAAM,MAAM,wBAAwB,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE5D;;;GAGG;AACH,MAAM,WAAW,kBAAkB,CACjC,OAAO,SAAS,wBAAwB,GAAG,wBAAwB;IAEnE,oCAAoC;IACpC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAEzB,8FAA8F;IAC9F,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC;IAExB;;;OAGG;IACH,WAAW,EAAE,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,eAAe,CAAA;KAAE,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;IAEpE;;;OAGG;IACH,aAAa,EAAE,CACb,KAAK,CAAC,UAAU,SAAS,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5D,YAAY,SAAS,MAAM,UAAU,GAAG,cAAc,GAAG,MAAM,UAAU,EAEzE,SAAS,EAAE,mBAAmB,CAAC,UAAU,EAAE,YAAY,CAAC,KACrD,OAAO,CAAC,GAAG,CAAC,CAAC;IAElB;;;OAGG;IACH,UAAU,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;CACpC;AAED;;;GAGG;AACH,MAAM,MAAM,eAAe,GACvB,MAAM,GACN;IACE,GAAG,EAAE,GAAG,GAAG,UAAU,CAAC;CACvB,CAAC;AAEN;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,gDAAgD;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,yCAAyC;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,yDAAyD;IACzD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oCAAoC;IACpC,gBAAgB,CAAC,EAAE,UAAU,GAAG,WAAW,GAAG,aAAa,CAAC;CAC7D;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,gDAAgD;IAChD,CAAC,EAAE,GAAG,CAAC;IACP,gDAAgD;IAChD,CAAC,EAAE,GAAG,CAAC;CACR;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,4CAA4C;IAC5C,YAAY,EAAE,MAAM,CAAC;IACrB,mCAAmC;IACnC,eAAe,EAAE,GAAG,CAAC;IACrB,iCAAiC;IACjC,SAAS,EAAE,aAAa,CAAC;IACzB,sDAAsD;IACtD,YAAY,EAAE,GAAG,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,4BAA4B;IAC5B,QAAQ,EAAE,GAAG,CAAC;IACd,iBAAiB;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,mBAAmB;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,6BAA6B;IAC7B,GAAG,EAAE,GAAG,CAAC;CACV;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,6BAA6B;IAC7B,iBAAiB,EAAE,GAAG,CAAC;IACvB,8BAA8B;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,kDAAkD;IAClD,CAAC,EAAE,GAAG,CAAC;IACP,kDAAkD;IAClD,CAAC,EAAE,GAAG,CAAC;IACP,2CAA2C;IAC3C,iBAAiB,EAAE,MAAM,CAAC;IAC1B,+CAA+C;IAC/C,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAED;;;GAGG;AACH,MAAM,MAAM,uBAAuB,GAC/B,QAAQ,GACR,YAAY,GACZ,KAAK,CAAC;AAEV;;GAEG;AACH,MAAM,WAAW,8BAA+B,SAAQ,aAAa;IACnE,iDAAiD;IACjD,eAAe,CAAC,EAAE,uBAAuB,CAAC;CAC3C"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,MAAM,CAAC;AAEzE;;GAEG;AACH,MAAM,MAAM,wBAAwB,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE5D;;;GAGG;AACH,MAAM,WAAW,kBAAkB,CACjC,OAAO,SAAS,wBAAwB,GAAG,wBAAwB;IAEnE,oCAAoC;IACpC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAEzB,8FAA8F;IAC9F,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC;IAExB;;;OAGG;IACH,WAAW,EAAE,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,eAAe,CAAA;KAAE,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;IAEpE;;;OAGG;IACH,aAAa,EAAE,CACb,KAAK,CAAC,UAAU,SAAS,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5D,YAAY,SAAS,MAAM,UAAU,GAAG,cAAc,GAAG,MAAM,UAAU,EAEzE,SAAS,EAAE,mBAAmB,CAAC,UAAU,EAAE,YAAY,CAAC,KACrD,OAAO,CAAC,GAAG,CAAC,CAAC;IAElB;;;OAGG;IACH,UAAU,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;CACpC;AAED;;;GAGG;AACH,MAAM,MAAM,eAAe,GACvB,MAAM,GACN;IACE,GAAG,EAAE,GAAG,GAAG,UAAU,CAAC;CACvB,CAAC;AAEN;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,gDAAgD;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,yCAAyC;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,yDAAyD;IACzD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oCAAoC;IACpC,gBAAgB,CAAC,EAAE,UAAU,GAAG,WAAW,GAAG,aAAa,CAAC;CAC7D;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,gDAAgD;IAChD,CAAC,EAAE,GAAG,CAAC;IACP,gDAAgD;IAChD,CAAC,EAAE,GAAG,CAAC;CACR;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,4CAA4C;IAC5C,YAAY,EAAE,MAAM,CAAC;IACrB,mCAAmC;IACnC,eAAe,EAAE,GAAG,CAAC;IACrB,iCAAiC;IACjC,SAAS,EAAE,aAAa,CAAC;IACzB,sDAAsD;IACtD,YAAY,EAAE,GAAG,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,4BAA4B;IAC5B,QAAQ,EAAE,GAAG,CAAC;IACd,iBAAiB;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,mBAAmB;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,6BAA6B;IAC7B,GAAG,EAAE,GAAG,CAAC;CACV;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,6BAA6B;IAC7B,iBAAiB,EAAE,GAAG,CAAC;IACvB,8BAA8B;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,kDAAkD;IAClD,CAAC,EAAE,GAAG,CAAC;IACP,kDAAkD;IAClD,CAAC,EAAE,GAAG,CAAC;IACP,2CAA2C;IAC3C,iBAAiB,EAAE,MAAM,CAAC;IAC1B,+CAA+C;IAC/C,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAED;;;GAGG;AACH,MAAM,MAAM,uBAAuB,GAC/B,QAAQ,GACR,YAAY,GACZ,KAAK,CAAC;AAEV;;GAEG;AACH,MAAM,WAAW,8BAA+B,SAAQ,aAAa;IACnE,iDAAiD;IACjD,eAAe,CAAC,EAAE,uBAAuB,CAAC;IAC1C,8EAA8E;IAC9E,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB"}
@@ -45,12 +45,15 @@ export declare function parseDERSignature(signatureB64: string): {
45
45
  */
46
46
  export declare function normalizeSignatureS(s: Hex): Hex;
47
47
  /**
48
- * Finds the position of a substring in a JSON string.
49
- * Used to locate the challenge and type fields in clientDataJSON.
48
+ * Finds the position of a JSON field in clientDataJSON.
49
+ * This matches ZeroDev's findQuoteIndices behavior exactly.
50
+ *
51
+ * For "type" field: uses lastIndexOf to find '"type":"webauthn.get"'
52
+ * For "challenge" field: uses indexOf to find '"challenge"'
50
53
  *
51
54
  * @param json - The JSON string to search
52
55
  * @param key - The key to find (e.g., "challenge", "type")
53
- * @returns The byte offset of the key's value
56
+ * @returns The byte offset BEFORE the opening quote of the key
54
57
  */
55
58
  export declare function findJsonFieldPosition(json: string, key: string): number;
56
59
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"passkey.d.ts","sourceRoot":"","sources":["../../src/utils/passkey.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAElE;AAED,OAAO,EAAE,KAAK,GAAG,EAAkC,MAAM,MAAM,CAAC;AAChE,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,uBAAuB,EACxB,MAAM,mBAAmB,CAAC;AAS3B;;GAEG;AACH,qBAAa,cAAe,SAAQ,KAAK;gBAC3B,OAAO,EAAE,MAAM;CAI5B;AAED;;;;;GAKG;AACH,wBAAgB,mCAAmC,CACjD,oBAAoB,EAAE,MAAM,GAC3B,iBAAiB,CAyBnB;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG;IAAE,CAAC,EAAE,GAAG,CAAC;IAAC,CAAC,EAAE,GAAG,CAAA;CAAE,CAwD1E;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,GAAG,GAAG,GAAG,CAgB/C;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAWvE;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE;IAChD,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,iBAAiB,CA2BpB;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,iBAAiB,EAC5B,MAAM,GAAE,uBAAkC,EAC1C,OAAO,GAAE,MAAiB,GACzB,GAAG,CAWL;AAiFD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,GAAG,GAAG,MAAM,CAExD;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,GAAG,CAa7D;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,EACpB,gBAAgB,GAAE,UAAU,GAAG,WAAW,GAAG,aAA0B,EACvE,OAAO,SAAQ,GACd;IACD,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,YAAY,CAAA;KAAE,CAAC,CAAC;IAC5D,gBAAgB,EAAE,UAAU,GAAG,WAAW,GAAG,aAAa,CAAC;IAC3D,OAAO,EAAE,MAAM,CAAC;CACjB,CAaA"}
1
+ {"version":3,"file":"passkey.d.ts","sourceRoot":"","sources":["../../src/utils/passkey.ts"],"names":[],"mappings":"AAYA;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAElE;AAED,OAAO,EAAE,KAAK,GAAG,EAAkC,MAAM,MAAM,CAAC;AAChE,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,uBAAuB,EACxB,MAAM,mBAAmB,CAAC;AAS3B;;GAEG;AACH,qBAAa,cAAe,SAAQ,KAAK;gBAC3B,OAAO,EAAE,MAAM;CAI5B;AAED;;;;;GAKG;AACH,wBAAgB,mCAAmC,CACjD,oBAAoB,EAAE,MAAM,GAC3B,iBAAiB,CAyBnB;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG;IAAE,CAAC,EAAE,GAAG,CAAC;IAAC,CAAC,EAAE,GAAG,CAAA;CAAE,CAwD1E;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,GAAG,GAAG,GAAG,CAgB/C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAkCvE;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE;IAChD,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,iBAAiB,CA2BpB;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,iBAAiB,EAC5B,MAAM,GAAE,uBAAkC,EAC1C,OAAO,GAAE,MAAiB,GACzB,GAAG,CAWL;AAoFD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,GAAG,GAAG,MAAM,CAExD;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,GAAG,CAa7D;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,EACpB,gBAAgB,GAAE,UAAU,GAAG,WAAW,GAAG,aAA0B,EACvE,OAAO,SAAQ,GACd;IACD,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,YAAY,CAAA;KAAE,CAAC,CAAC;IAC5D,gBAAgB,EAAE,UAAU,GAAG,WAAW,GAAG,aAAa,CAAC;IAC3D,OAAO,EAAE,MAAM,CAAC;CACjB,CAaA"}
@@ -1,7 +1,14 @@
1
1
  /**
2
2
  * List of networks that support RIP-7212 (P256 precompile).
3
3
  */
4
- const RIP7212_SUPPORTED_NETWORKS = [1, 10, 56, 97, 130, 137, 143, 183, 185, 204, 233, 324, 360, 747, 901, 919, 1301, 1315, 1424, 1514, 1894, 2741, 3343, 5000, 5003, 6343, 7000, 8008, 8333, 8453, 8765, 10143, 17000, 28802, 33111, 33139, 34443, 42161, 42170, 42220, 43111, 43113, 43114, 57073, 59141, 59144, 60808, 80002, 80888, 84532, 98866, 98867, 421614, 534351, 534352, 656476, 743111, 747474, 763373, 11155111, 11155420, 666666666, 88153591557];
4
+ const RIP7212_SUPPORTED_NETWORKS = [
5
+ 1, 10, 56, 97, 130, 137, 143, 183, 185, 204, 233, 324, 360, 747, 901, 919,
6
+ 1301, 1315, 1424, 1514, 1894, 2741, 3343, 5000, 5003, 6343, 7000, 8008, 8333,
7
+ 8453, 8765, 10143, 17000, 28802, 33111, 33139, 34443, 42161, 42170, 42220,
8
+ 43111, 43113, 43114, 57073, 59141, 59144, 60808, 80002, 80888, 84532, 98866,
9
+ 98867, 421614, 534351, 534352, 656476, 743111, 747474, 763373, 11155111,
10
+ 11155420, 666666666, 88153591557,
11
+ ];
5
12
  /**
6
13
  * Checks if a network supports RIP-7212 (P256 precompile).
7
14
  */
@@ -117,22 +124,44 @@ export function normalizeSignatureS(s) {
117
124
  return padHex(s, 32);
118
125
  }
119
126
  /**
120
- * Finds the position of a substring in a JSON string.
121
- * Used to locate the challenge and type fields in clientDataJSON.
127
+ * Finds the position of a JSON field in clientDataJSON.
128
+ * This matches ZeroDev's findQuoteIndices behavior exactly.
129
+ *
130
+ * For "type" field: uses lastIndexOf to find '"type":"webauthn.get"'
131
+ * For "challenge" field: uses indexOf to find '"challenge"'
122
132
  *
123
133
  * @param json - The JSON string to search
124
134
  * @param key - The key to find (e.g., "challenge", "type")
125
- * @returns The byte offset of the key's value
135
+ * @returns The byte offset BEFORE the opening quote of the key
126
136
  */
127
137
  export function findJsonFieldPosition(json, key) {
128
- // Find the key with quotes: "key":"
129
- const searchPattern = `"${key}":"`;
130
- const position = json.indexOf(searchPattern);
131
- if (position === -1) {
132
- throw new SignatureError(`Field "${key}" not found in clientDataJSON`);
138
+ if (key === "type") {
139
+ // Match ZeroDev's behavior: find '"type":"webauthn.get"' using lastIndexOf
140
+ const typePattern = '"type":"webauthn.get"';
141
+ const position = json.lastIndexOf(typePattern);
142
+ if (position === -1) {
143
+ throw new SignatureError(`Field "type":"webauthn.get" not found in clientDataJSON`);
144
+ }
145
+ return position;
146
+ }
147
+ else if (key === "challenge") {
148
+ // Match ZeroDev's behavior: find '"challenge' using indexOf
149
+ const challengePattern = `"${key}`;
150
+ const position = json.indexOf(challengePattern);
151
+ if (position === -1) {
152
+ throw new SignatureError(`Field "${key}" not found in clientDataJSON`);
153
+ }
154
+ return position;
155
+ }
156
+ else {
157
+ // Generic fallback for other keys
158
+ const searchPattern = `"${key}"`;
159
+ const position = json.indexOf(searchPattern);
160
+ if (position === -1) {
161
+ throw new SignatureError(`Field "${key}" not found in clientDataJSON`);
162
+ }
163
+ return position;
133
164
  }
134
- // Return position after the opening quote of the value
135
- return position + searchPattern.length;
136
165
  }
137
166
  /**
138
167
  * Parses a WebAuthn assertion response into its components.
@@ -1 +1 @@
1
- {"version":3,"file":"passkey.js","sourceRoot":"","sources":["../../src/utils/passkey.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"passkey.js","sourceRoot":"","sources":["../../src/utils/passkey.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mentaproject/signer-react-native",
3
- "version": "0.0.15",
3
+ "version": "0.0.18",
4
4
  "description": "React Native Passkey signer for Menta wallet - implements SmartAccountSigner via WebAuthn",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
package/src/signer.ts CHANGED
@@ -429,30 +429,40 @@ export class ReactNativePasskeySigner {
429
429
  message: SignableMessage,
430
430
  rpId: string,
431
431
  chainId: number,
432
- allowCredentials?: Array<{ id: string; type: "public-key" }>
432
+ allowCredentials?: Array<{ id: string; type: "public-key" }>,
433
433
  ) => Promise<Hex> {
434
- return async (message, _rpId, _chainId, _allowCredentials) => {
435
- // Convert message to bytes for the challenge
436
- let messageBytes: Uint8Array;
434
+ return async (message, _rpId, chainId, _allowCredentials) => {
435
+ // Match ZeroDev's behavior: extract message content and treat as hex
436
+ let messageContent: string;
437
437
 
438
438
  if (typeof message === "string") {
439
- const encoder = new TextEncoder();
440
- messageBytes = encoder.encode(message);
441
- } else if ("raw" in message) {
442
- if (typeof message.raw === "string") {
443
- messageBytes = this.hexToBytes(message.raw as Hex);
444
- } else {
445
- messageBytes = message.raw;
446
- }
439
+ // message is a string (treated as hex by ZeroDev)
440
+ messageContent = message;
441
+ } else if ("raw" in message && typeof message.raw === "string") {
442
+ // message.raw is a Hex string
443
+ messageContent = message.raw;
444
+ } else if ("raw" in message && message.raw instanceof Uint8Array) {
445
+ // message.raw is a ByteArray - convert to hex string
446
+ messageContent = Array.from(message.raw)
447
+ .map((b) => b.toString(16).padStart(2, "0"))
448
+ .join("");
447
449
  } else {
448
- throw new PasskeySignerError("Invalid message format");
450
+ throw new PasskeySignerError("Unsupported message format");
449
451
  }
450
452
 
453
+ // Remove 0x prefix if present (matches ZeroDev behavior)
454
+ const formattedMessage = messageContent.startsWith("0x")
455
+ ? messageContent.slice(2)
456
+ : messageContent;
457
+
458
+ // Convert hex string to bytes
459
+ const messageBytes = this.hexToBytes(`0x${formattedMessage}` as Hex);
460
+
451
461
  // Create challenge from message bytes
452
462
  const challenge = bytesToBase64Url(messageBytes);
453
463
 
454
- // Sign with passkey
455
- return this.signWithPasskey(challenge);
464
+ // Sign with passkey, using the chainId for proper RIP7212 detection
465
+ return this.signWithPasskey(challenge, chainId);
456
466
  };
457
467
  }
458
468
 
@@ -487,9 +497,13 @@ export class ReactNativePasskeySigner {
487
497
  * Internal method to sign a challenge with the passkey.
488
498
  *
489
499
  * @param challenge - The Base64URL-encoded challenge
500
+ * @param chainId - Optional chain ID for RIP7212 precompile detection
490
501
  * @returns The encoded signature
491
502
  */
492
- private async signWithPasskey(challenge: string): Promise<Hex> {
503
+ private async signWithPasskey(
504
+ challenge: string,
505
+ chainId?: number,
506
+ ): Promise<Hex> {
493
507
  try {
494
508
  // Create assertion options
495
509
  const options = createAssertionOptions(
@@ -511,9 +525,12 @@ export class ReactNativePasskeySigner {
511
525
  });
512
526
 
513
527
  // Encode the signature according to the configured format
528
+ // Use provided chainId, or fall back to config chainId, or default to Sepolia
529
+ const effectiveChainId = chainId ?? this.config.chainId ?? 11155111;
514
530
  return encodeWebAuthnSignature(
515
531
  webAuthnSignature,
516
532
  this.config.signatureFormat,
533
+ effectiveChainId,
517
534
  );
518
535
  } catch (error) {
519
536
  if (error instanceof SignatureError) {
@@ -540,6 +557,205 @@ export class ReactNativePasskeySigner {
540
557
  }
541
558
  return bytes;
542
559
  }
560
+
561
+ /**
562
+ * Internal method to sign a challenge and return raw WebAuthn components.
563
+ * This is used by toWebAuthnAccount() where the caller handles encoding.
564
+ *
565
+ * @param challenge - The Base64URL-encoded challenge
566
+ * @returns Raw WebAuthn signature components
567
+ */
568
+ private async signRaw(challenge: string): Promise<{
569
+ authenticatorData: Hex;
570
+ clientDataJSON: string;
571
+ r: Hex;
572
+ s: Hex;
573
+ typeIndex: number;
574
+ }> {
575
+ // Create assertion options
576
+ const options = createAssertionOptions(
577
+ challenge,
578
+ this.config.rpId,
579
+ this.credentialId,
580
+ this.config.userVerification,
581
+ this.config.timeout,
582
+ );
583
+
584
+ // Call native passkey assertion
585
+ const result = await Passkey.get(options);
586
+
587
+ // Parse the assertion response
588
+ const webAuthnSignature = parseWebAuthnAssertion({
589
+ authenticatorData: result.response.authenticatorData,
590
+ clientDataJSON: result.response.clientDataJSON,
591
+ signature: result.response.signature,
592
+ });
593
+
594
+ return {
595
+ authenticatorData: webAuthnSignature.authenticatorData,
596
+ clientDataJSON: webAuthnSignature.clientDataJSON,
597
+ r: webAuthnSignature.r,
598
+ s: webAuthnSignature.s,
599
+ typeIndex: webAuthnSignature.responseTypeLocation,
600
+ };
601
+ }
602
+
603
+ /**
604
+ * Creates a viem-compatible WebAuthnAccount.
605
+ *
606
+ * This returns an object compatible with viem's WebAuthnAccount interface,
607
+ * which can be used directly with permissionless's toKernelSmartAccount.
608
+ *
609
+ * @example
610
+ * ```typescript
611
+ * const webAuthnAccount = signer.toWebAuthnAccount();
612
+ *
613
+ * const kernel = await toKernelSmartAccount({
614
+ * owners: [webAuthnAccount],
615
+ * client: publicClient,
616
+ * version: "0.3.3",
617
+ * });
618
+ * ```
619
+ */
620
+ public toWebAuthnAccount(): {
621
+ id: string;
622
+ publicKey: Hex;
623
+ sign: (params: { hash: Hex }) => Promise<{
624
+ signature: Hex;
625
+ webauthn: {
626
+ authenticatorData: Hex;
627
+ clientDataJSON: string;
628
+ typeIndex: number;
629
+ };
630
+ raw: {
631
+ id: string;
632
+ response: {
633
+ authenticatorData: Hex;
634
+ clientDataJSON: string;
635
+ signature: Hex;
636
+ };
637
+ };
638
+ }>;
639
+ signMessage: (params: { message: SignableMessage }) => Promise<{
640
+ signature: Hex;
641
+ webauthn: {
642
+ authenticatorData: Hex;
643
+ clientDataJSON: string;
644
+ typeIndex: number;
645
+ };
646
+ raw: {
647
+ id: string;
648
+ response: {
649
+ authenticatorData: Hex;
650
+ clientDataJSON: string;
651
+ signature: Hex;
652
+ };
653
+ };
654
+ }>;
655
+ signTypedData: <T>(typedData: T) => Promise<{
656
+ signature: Hex;
657
+ webauthn: {
658
+ authenticatorData: Hex;
659
+ clientDataJSON: string;
660
+ typeIndex: number;
661
+ };
662
+ raw: {
663
+ id: string;
664
+ response: {
665
+ authenticatorData: Hex;
666
+ clientDataJSON: string;
667
+ signature: Hex;
668
+ };
669
+ };
670
+ }>;
671
+ type: "webAuthn";
672
+ } {
673
+ const self = this;
674
+
675
+ const signWithHash = async (hash: Hex) => {
676
+ // Convert hash to challenge (base64url encoded)
677
+ const messageBytes = self.hexToBytes(hash);
678
+ const challenge = bytesToBase64Url(messageBytes);
679
+
680
+ try {
681
+ const rawResult = await self.signRaw(challenge);
682
+
683
+ // Combine r and s into a single signature (64 bytes)
684
+ const rClean = rawResult.r.startsWith("0x")
685
+ ? rawResult.r.slice(2)
686
+ : rawResult.r;
687
+ const sClean = rawResult.s.startsWith("0x")
688
+ ? rawResult.s.slice(2)
689
+ : rawResult.s;
690
+ const signature = `0x${rClean}${sClean}` as Hex;
691
+
692
+ return {
693
+ signature,
694
+ webauthn: {
695
+ authenticatorData: rawResult.authenticatorData,
696
+ clientDataJSON: rawResult.clientDataJSON,
697
+ typeIndex: rawResult.typeIndex,
698
+ },
699
+ raw: {
700
+ id: self.credentialId,
701
+ response: {
702
+ authenticatorData: rawResult.authenticatorData,
703
+ clientDataJSON: rawResult.clientDataJSON,
704
+ signature,
705
+ },
706
+ },
707
+ };
708
+ } catch (error) {
709
+ if (error instanceof SignatureError) {
710
+ throw new PasskeySignerError(
711
+ `Signature parsing failed: ${error.message}`,
712
+ error,
713
+ );
714
+ }
715
+ throw new PasskeySignerError(
716
+ `Passkey signing failed: ${error instanceof Error ? error.message : "Unknown error"}`,
717
+ error,
718
+ );
719
+ }
720
+ };
721
+
722
+ return {
723
+ id: this.credentialId,
724
+ publicKey: this.publicKey,
725
+ type: "webAuthn" as const,
726
+
727
+ async sign({ hash }: { hash: Hex }) {
728
+ return signWithHash(hash);
729
+ },
730
+
731
+ async signMessage({ message }: { message: SignableMessage }) {
732
+ // For WebAuthn, the message is typically already a hash
733
+ // permissionless wraps the message hash before calling this
734
+ let hash: Hex;
735
+ if (typeof message === "string") {
736
+ // Hash the string message
737
+ hash = keccak256(new TextEncoder().encode(message));
738
+ } else if ("raw" in message) {
739
+ if (typeof message.raw === "string") {
740
+ hash = message.raw as Hex;
741
+ } else {
742
+ hash = `0x${Array.from(message.raw)
743
+ .map((b) => b.toString(16).padStart(2, "0"))
744
+ .join("")}` as Hex;
745
+ }
746
+ } else {
747
+ throw new PasskeySignerError("Invalid message format");
748
+ }
749
+ return signWithHash(hash);
750
+ },
751
+
752
+ async signTypedData(typedData) {
753
+ // Hash the typed data
754
+ const hash = hashTypedData(typedData as TypedDataDefinition);
755
+ return signWithHash(hash);
756
+ },
757
+ };
758
+ }
543
759
  }
544
760
 
545
761
  /**
@@ -32,7 +32,7 @@ export interface SmartAccountSigner<
32
32
  const TTypedData extends TypedData | Record<string, unknown>,
33
33
  TPrimaryType extends keyof TTypedData | "EIP712Domain" = keyof TTypedData,
34
34
  >(
35
- typedData: TypedDataDefinition<TTypedData, TPrimaryType>
35
+ typedData: TypedDataDefinition<TTypedData, TPrimaryType>,
36
36
  ) => Promise<Hex>;
37
37
 
38
38
  /**
@@ -137,4 +137,6 @@ export type SignatureEncodingFormat =
137
137
  export interface ReactNativePasskeySignerConfig extends PasskeyConfig {
138
138
  /** The format to use when encoding signatures */
139
139
  signatureFormat?: SignatureEncodingFormat;
140
+ /** Chain ID for RIP7212 precompile detection (default: 11155111 - Sepolia) */
141
+ chainId?: number;
140
142
  }
@@ -1,7 +1,14 @@
1
1
  /**
2
2
  * List of networks that support RIP-7212 (P256 precompile).
3
3
  */
4
- const RIP7212_SUPPORTED_NETWORKS = [1,10,56,97,130,137,143,183,185,204,233,324,360,747,901,919,1301,1315,1424,1514,1894,2741,3343,5000,5003,6343,7000,8008,8333,8453,8765,10143,17000,28802,33111,33139,34443,42161,42170,42220,43111,43113,43114,57073,59141,59144,60808,80002,80888,84532,98866,98867,421614,534351,534352,656476,743111,747474,763373,11155111,11155420,666666666,88153591557];
4
+ const RIP7212_SUPPORTED_NETWORKS = [
5
+ 1, 10, 56, 97, 130, 137, 143, 183, 185, 204, 233, 324, 360, 747, 901, 919,
6
+ 1301, 1315, 1424, 1514, 1894, 2741, 3343, 5000, 5003, 6343, 7000, 8008, 8333,
7
+ 8453, 8765, 10143, 17000, 28802, 33111, 33139, 34443, 42161, 42170, 42220,
8
+ 43111, 43113, 43114, 57073, 59141, 59144, 60808, 80002, 80888, 84532, 98866,
9
+ 98867, 421614, 534351, 534352, 656476, 743111, 747474, 763373, 11155111,
10
+ 11155420, 666666666, 88153591557,
11
+ ];
5
12
 
6
13
  /**
7
14
  * Checks if a network supports RIP-7212 (P256 precompile).
@@ -41,13 +48,13 @@ export class SignatureError extends Error {
41
48
  * @returns Parsed authenticator data structure
42
49
  */
43
50
  export function parseAuthenticatorDataFromAssertion(
44
- authenticatorDataB64: string
51
+ authenticatorDataB64: string,
45
52
  ): AuthenticatorData {
46
53
  const bytes = base64UrlToBytes(authenticatorDataB64);
47
54
 
48
55
  if (bytes.length < 37) {
49
56
  throw new SignatureError(
50
- "Authenticator data too short: minimum 37 bytes required"
57
+ "Authenticator data too short: minimum 37 bytes required",
51
58
  );
52
59
  }
53
60
 
@@ -88,7 +95,7 @@ export function parseDERSignature(signatureB64: string): { r: Hex; s: Hex } {
88
95
  // Verify it's a SEQUENCE
89
96
  if (bytes[0] !== 0x30) {
90
97
  throw new SignatureError(
91
- `Invalid DER signature: expected SEQUENCE (0x30), got 0x${bytes[0].toString(16)}`
98
+ `Invalid DER signature: expected SEQUENCE (0x30), got 0x${bytes[0].toString(16)}`,
92
99
  );
93
100
  }
94
101
 
@@ -97,7 +104,7 @@ export function parseDERSignature(signatureB64: string): { r: Hex; s: Hex } {
97
104
  // Parse R
98
105
  if (bytes[offset] !== 0x02) {
99
106
  throw new SignatureError(
100
- `Invalid DER signature: expected INTEGER (0x02) for R, got 0x${bytes[offset].toString(16)}`
107
+ `Invalid DER signature: expected INTEGER (0x02) for R, got 0x${bytes[offset].toString(16)}`,
101
108
  );
102
109
  }
103
110
  offset++;
@@ -111,7 +118,7 @@ export function parseDERSignature(signatureB64: string): { r: Hex; s: Hex } {
111
118
  // Parse S
112
119
  if (bytes[offset] !== 0x02) {
113
120
  throw new SignatureError(
114
- `Invalid DER signature: expected INTEGER (0x02) for S, got 0x${bytes[offset].toString(16)}`
121
+ `Invalid DER signature: expected INTEGER (0x02) for S, got 0x${bytes[offset].toString(16)}`,
115
122
  );
116
123
  }
117
124
  offset++;
@@ -155,7 +162,7 @@ export function normalizeSignatureS(s: Hex): Hex {
155
162
 
156
163
  // P-256 curve order
157
164
  const n = BigInt(
158
- "0xffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551"
165
+ "0xffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
159
166
  );
160
167
  const halfN = n / 2n;
161
168
 
@@ -168,24 +175,50 @@ export function normalizeSignatureS(s: Hex): Hex {
168
175
  }
169
176
 
170
177
  /**
171
- * Finds the position of a substring in a JSON string.
172
- * Used to locate the challenge and type fields in clientDataJSON.
178
+ * Finds the position of a JSON field in clientDataJSON.
179
+ * This matches ZeroDev's findQuoteIndices behavior exactly.
180
+ *
181
+ * For "type" field: uses lastIndexOf to find '"type":"webauthn.get"'
182
+ * For "challenge" field: uses indexOf to find '"challenge"'
173
183
  *
174
184
  * @param json - The JSON string to search
175
185
  * @param key - The key to find (e.g., "challenge", "type")
176
- * @returns The byte offset of the key's value
186
+ * @returns The byte offset BEFORE the opening quote of the key
177
187
  */
178
188
  export function findJsonFieldPosition(json: string, key: string): number {
179
- // Find the key with quotes: "key":"
180
- const searchPattern = `"${key}":"`;
181
- const position = json.indexOf(searchPattern);
182
-
183
- if (position === -1) {
184
- throw new SignatureError(`Field "${key}" not found in clientDataJSON`);
189
+ if (key === "type") {
190
+ // Match ZeroDev's behavior: find '"type":"webauthn.get"' using lastIndexOf
191
+ const typePattern = '"type":"webauthn.get"';
192
+ const position = json.lastIndexOf(typePattern);
193
+
194
+ if (position === -1) {
195
+ throw new SignatureError(
196
+ `Field "type":"webauthn.get" not found in clientDataJSON`,
197
+ );
198
+ }
199
+
200
+ return position;
201
+ } else if (key === "challenge") {
202
+ // Match ZeroDev's behavior: find '"challenge' using indexOf
203
+ const challengePattern = `"${key}`;
204
+ const position = json.indexOf(challengePattern);
205
+
206
+ if (position === -1) {
207
+ throw new SignatureError(`Field "${key}" not found in clientDataJSON`);
208
+ }
209
+
210
+ return position;
211
+ } else {
212
+ // Generic fallback for other keys
213
+ const searchPattern = `"${key}"`;
214
+ const position = json.indexOf(searchPattern);
215
+
216
+ if (position === -1) {
217
+ throw new SignatureError(`Field "${key}" not found in clientDataJSON`);
218
+ }
219
+
220
+ return position;
185
221
  }
186
-
187
- // Return position after the opening quote of the value
188
- return position + searchPattern.length;
189
222
  }
190
223
 
191
224
  /**
@@ -238,7 +271,7 @@ export function parseWebAuthnAssertion(assertion: {
238
271
  export function encodeWebAuthnSignature(
239
272
  signature: WebAuthnSignature,
240
273
  format: SignatureEncodingFormat = "kernel",
241
- chainId: number = 11155111
274
+ chainId: number = 11155111,
242
275
  ): Hex {
243
276
  switch (format) {
244
277
  case "kernel":
@@ -264,18 +297,21 @@ export function encodeWebAuthnSignature(
264
297
  * bool usePrecompile
265
298
  * )
266
299
  */
267
- function encodeKernelSignature(signature: WebAuthnSignature, chainId: number): Hex {
300
+ function encodeKernelSignature(
301
+ signature: WebAuthnSignature,
302
+ chainId: number,
303
+ ): Hex {
268
304
  // Find responseTypeLocation (position after "type":" in the JSON)
269
305
  const responseTypeIndex = signature.responseTypeLocation;
270
306
 
271
307
  return encodeAbiParameters(
272
308
  [
273
- { type: "bytes" }, // authenticatorData
274
- { type: "string" }, // clientDataJSON
275
- { type: "uint256" }, // responseTypeLocation
276
- { type: "uint256" }, // r
277
- { type: "uint256" }, // s
278
- { type: "bool" }, // usePrecompiled
309
+ { type: "bytes" }, // authenticatorData
310
+ { type: "string" }, // clientDataJSON
311
+ { type: "uint256" }, // responseTypeLocation
312
+ { type: "uint256" }, // r
313
+ { type: "uint256" }, // s
314
+ { type: "bool" }, // usePrecompiled
279
315
  ],
280
316
  [
281
317
  signature.authenticatorData,
@@ -284,7 +320,7 @@ function encodeKernelSignature(signature: WebAuthnSignature, chainId: number): H
284
320
  BigInt(signature.r),
285
321
  BigInt(signature.s),
286
322
  isRIP7212SupportedNetwork(chainId),
287
- ]
323
+ ],
288
324
  );
289
325
  }
290
326
 
@@ -303,15 +339,15 @@ function encodeRhinestoneSignature(signature: WebAuthnSignature): Hex {
303
339
 
304
340
  return encodeAbiParameters(
305
341
  [
306
- { type: "bytes" }, // authenticatorData
307
- { type: "bytes" }, // clientDataJSON as bytes
342
+ { type: "bytes" }, // authenticatorData
343
+ { type: "bytes" }, // clientDataJSON as bytes
308
344
  { type: "uint256[2]" }, // [r, s]
309
345
  ],
310
346
  [
311
347
  signature.authenticatorData,
312
348
  bytesToHex(clientDataBytes),
313
349
  [BigInt(signature.r), BigInt(signature.s)],
314
- ]
350
+ ],
315
351
  );
316
352
  }
317
353
 
@@ -379,7 +415,7 @@ export function createAssertionOptions(
379
415
  rpId: string,
380
416
  credentialId: string,
381
417
  userVerification: "required" | "preferred" | "discouraged" = "required",
382
- timeout = 60000
418
+ timeout = 60000,
383
419
  ): {
384
420
  rpId: string;
385
421
  challenge: string;