| name | create-bap-identity |
| description | This skill should be used when the user asks to "create BAP identity", "new BAP", "Type42 identity", "Legacy BAP identity", "generate BAP", "set up BAP identity", "initialize BAP", or needs to create Bitcoin Attestation Protocol identities using the bap CLI. |
Create BAP Identity
Create and manage BAP (Bitcoin Attestation Protocol) identities using the bsv-bap library.
Installation
bun add bsv-bap @bsv/sdk
Creating an Identity
import { BAP } from "bsv-bap";
import { PrivateKey } from "@bsv/sdk";
const privateKey = PrivateKey.fromRandom();
const bap = new BAP({ rootPk: privateKey.toWif() });
const identity = bap.newId("Alice Smith");
console.log("Identity Key:", identity.getIdentityKey());
console.log("Root Address:", identity.rootAddress);
console.log("Signing Address:", identity.getCurrentAddress());
Key Derivation
BAP uses Type42 (BRC-42) key derivation with BRC-43 invoice numbers:
| Purpose | Invoice Number | Security Level |
|---|
| Signing key | 1-bap-identity | 1 (public protocol) |
| Friend encryption | 2-friend-{sha256(friendBapId)} | 2 (user-approved) |
Signing Messages
import { Utils } from "@bsv/sdk";
const { toArray } = Utils;
const message = toArray("Hello World", "utf8");
const { address, signature } = identity.signMessage(message);
const isValid = bap.verifySignature("Hello World", address, signature);
Friend Encryption
Derive friend-specific encryption keys for private communication:
const friendPubKey = identity.getEncryptionPublicKeyWithSeed(friendBapId);
const ciphertext = identity.encryptWithSeed("secret message", friendBapId);
const plaintext = identity.decryptWithSeed(ciphertext, friendBapId);
Export/Import
const backup = bap.exportForBackup("My Identity");
const bap2 = new BAP({ rootPk: backup.rootPk });
bap2.importIds(backup.ids);
CLI Option
For quick operations, the bsv-bap package includes a CLI:
npm install -g bsv-bap
bap create --name "Alice"
bap sign "Hello World"
bap verify "msg" "sig" "addr"
bap info
bap friend-pubkey <bapId>
bap encrypt <data> <bapId>
bap decrypt <text> <bapId>
bap export
bap import <file>
Next Steps
After creating an identity:
- Sign messages for authentication
- Share encryption pubkeys in friend requests
- Publish identity to blockchain for on-chain reputation
- Integrate with Sigma Identity for OAuth (
@sigma-auth/better-auth-plugin)
Related Skills
key-derivation - Type42 and BRC-43 key derivation patterns
message-signing - BSM, BRC-77, and Sigma signing protocols
encrypt-decrypt-backup - bitcoin-backup CLI for .bep encrypted backups