Skip to main content

Signing Data

Overview​

Wallets, if supported, can sign some arbitrary data that can be verified via the algosdk.verifyBytes method.

Signing with the default wallet​

If you only want to sign data with the default wallet, you can simply call:

try {
const result = await window.algorand.signBytes({
data: new Uint8Array([...]),
});

console.log(result);
/*
{
id: 'awesome-wallet',
signature: [23, 54, 65 ...],
}
*/
} catch (error) {
// handle error
}
caution

If this operation is not supported, then a WalletOperationNotSupportedError will be thrown.

Signing with a specific wallet​

If you want to target a specific wallet to sign data, you can simply pass the ID of the wallet to the options object:

try {
const result = await window.algorand.signBytes({
data: new Uint8Array([...]),
id: 'another-awesome-wallet',
});

console.log(result);
/*
{
id: 'another-awesome-wallet',
signature: [23, 54, 65 ...],
}
*/
} catch (error) {
// handle error
}
caution

If the specified wallet does not exist, then a WalletDoesNotExistError will be thrown.

Signing with a specific account​

If you want to specify which account to use, you can pass the signer in the options object:

try {
const result = await window.algorand.signBytes({
data: new Uint8Array([...]),
signer: 'P3AIQVDJ2CTH54KSJE63YWB7IZGS4W4JGC53I6GK72BGZ5BXO2B2PS4M4U',
});

console.log(result);
/*
{
id: 'awesome-wallet',
signature: [23, 54, 65 ...],
}
*/
} catch (error) {
// handle error
}
caution

If the user has not authorized the specified signer or the signer does not exist in the wallet, then a UnauthorizedSignerError will be thrown.

Verifying the signature​

Once the data has been signed, you can use the algosdk.verifyBytes function to verify that the data has been signed using the private key.

const algosdk = require('algosdk);

const data = new Uint8Array([...]);
const signer = 'P3AIQVDJ2CTH54KSJE63YWB7IZGS4W4JGC53I6GK72BGZ5BXO2B2PS4M4U';
const result = await window.algorand.signBytes({
data,
signer,
});

if (!algosdk.verifyBytes(data, result.signature, signer)) {
throw new Error('invalid signature!!');
}

console.log('data has been verified!');