Sign Message SDK

signMessage allows you to generate a signature on a message.

To sign a message a user / an account would need to have to have been register and authenticated by going through Register using SDK flow.

Once you have registered the user, you can choose one of the below 2 flows

Session-Based Authentication

In order to use this flow, you must Authenticating with SDK first to obtain a JWT. Here is a sample of how to use it

import { Passport } from "@0xpass/passport";
import { WebauthnSigner } from "@0xpass/webauthn-signer";
import { stringToHex } from "viem";
import { Passport } from "@0xpass/passport";
import { WebauthnSigner } from "@0xpass/webauthn-signer";

const signer = new WebauthnSigner({
      rpId: window.location.hostname,
      rpName: "rpName",
});

const passport = new Passport({
    scopeId: "insert_your_scope_id",
    signer: signer
});

const userInput {
   username: "insert_registered_username_here"
   userDisplayName: "insert_registered_user_display_name_here"
}

await passport.setupEncryption();
await passport.authenticate(userInput);

// Generate a signature
const signature = await passport.signMessage(stringToHex("hello world!"));
console.log(signature);

signMessage Parameters

signMessage Response

A successful response will return the following, a signature of the signed message by the authenticated account.

{
    "jsonrpc": "2.0",
    "result": "signature_here",
    "id": 1
}

Direct Passkey Authentication

Since you will be directly authenticating with Passkeys here, you don't need to go through authentication step. Here is a code sample:

import { Passport } from "@0xpass/passport";
import { WebauthnSigner } from "@0xpass/webauthn-signer";
import { stringToHex } from "viem";
import { Passport } from "@0xpass/passport";
import { WebauthnSigner } from "@0xpass/webauthn-signer";

const signer = new WebauthnSigner({
      rpId: window.location.hostname,
      rpName: "rpName",
});

const passport = new Passport({
    scope_id: "insert_your_scope_id",
    signer: signer
    allow_sessions: false
});

const userInput {
   username: "insert_registered_username_here"
   userDisplayName: "insert_registered_user_display_name_here"
}

await passport.setupEncryption();
//This step is different for direct authentication
passport.setUserData(userInput)

// Generate a signature
const signature = await passport.signMessage(stringToHex("hello world!"));
console.log(signature);

signMessage Parameters

signMessage Response

A successful response will return the following, a signature of the signed message by the authenticated account.

{
    "jsonrpc": "2.0",
    "result": "signature_here",
    "id": 1
}

Last updated