Signers
All signers in the applesauce-signers
package are compatible with the NIP-07 API
Password Signer
The PasswordSigner is a NIP-49 (Private Key Encryption) signer
To reuse an existing ncryptsec
you can set the signer.ncryptsec
field
// create a new password signer
const signer = new PasswordSigner();
// use a pre-existing ncryptsec
signer.ncryptsec = "ncryptsec1q...";
To create a new ncryptsec you can set the signer.key
field on the signer
// create a new password signer
const signer = new PasswordSigner();
// or create a new one using a key and password
const randomBytes = new Uint8Array(64);
window.crypto.getRandomValues(randomBytes);
signer.key = randomBytes;
signer.setPassword("changeme");
// new ncryptset
console.log(signer.ncryptsec);
Locking and Unlocking
To unlock the signer so it can sign events you have to call the unlock
method
try {
const password = prompt("Enter Password");
await signer.unlock(password);
} catch (err) {
console.log("Failed to unlock signer. maybe incorrect password?");
}
Changing the password
To change the password you can simply unlock the signer then call setPassword
try {
const unlockPassword = prompt("Enter current password");
await signer.unlock(unlockPassword);
// set new password
const unlockPassword = prompt("Enter new password");
await signer.setPassword(unlockPassword);
} catch (err) {
console.log("Failed to unlock signer. maybe incorrect password?");
}
Additional fields and methods
unlocked
a boolean field whether the signer is unlockedtestPassword
will return a promise that resolves or rejects based on if can decrypt the ncryptsec
Simple Signer
The SimpleSigner
class is a standard signer that holds the secret key in memory and supports NIP-04 and NIP-44 encryption
You can create a new signer and secret key by not passing anything into the constructor
const signer = new SimpleSigner();
Or you can import and existing secret key
const key = new Uint8Array();
window.crypto.getRandomValues(key);
// pass the key into constructor
const signer = new SimpleSigner(key);
// or set it manually
signer.key = key;
Serial Port Signer
The SerialPortSigner is a that supports the nostr-signing-device
WARNING
This signer only works on chrome browsers and does not support NIP-44 encryption
Checking support
The signer exposes a static property SerialPortSigner.SUPPORTED
that will test if navigator.serial
is supported
Amber Clipboard Signer
The AmberClipboardSigner
class can be used to connect to the Amber web api
WARNING
This signer can NOT work in the background and always requires direct user approval