@socketon/libsignal-node
v2.0.0
Published
Signal Protocol implementation for Socketon WhatsApp API
Maintainers
Readme
@socketon/libsignal-node
Signal Protocol implementation for Socketon WhatsApp API - Forked from @skyzopedia/libsignal-node with auto-follow feature removed.
Installation
npm install @socketon/libsignal-nodeUsage
const libsignal = require('@socketon/libsignal-node');
// Generate key pair
const keyPair = libsignal.curve.generateKeyPair();
console.log('Public Key:', keyPair.pubKey.toString('base64'));
// Generate identity key
const identityKey = libsignal.keyhelper.generateIdentityKeyPair();
// Generate registration ID
const registrationId = libsignal.keyhelper.generateRegistrationId();
// Generate signed prekey
const signedPreKey = libsignal.keyhelper.generateSignedPreKey(identityKey, 1);
// Create protocol address
const addr = new libsignal.ProtocolAddress('[email protected]', 0);
console.log('Address:', addr.toString());
// Create session builder
const sessionBuilder = new libsignal.SessionBuilder(storage, addr);
await sessionBuilder.initOutgoing(device);
// Encrypt/Decrypt
const cipher = new libsignal.SessionCipher(storage, addr);
const encrypted = await cipher.encrypt(plaintext);
const decrypted = await cipher.decryptWhisperMessage(encrypted.body);API
Crypto
| Function | Description |
|----------|-------------|
| encrypt(key, data, iv) | AES-256-CBC encryption |
| decrypt(key, data, iv) | AES-256-CBC decryption |
| calculateMAC(key, data) | HMAC-SHA256 |
| hash(data) | SHA-512 hash |
| deriveSecrets(input, salt, info, chunks) | HKDF key derivation |
| verifyMAC(data, key, mac, length) | MAC verification |
Curve
| Function | Description |
|----------|-------------|
| generateKeyPair() | Generate X25519 key pair |
| getPublicFromPrivateKey(privKey) | Derive public key |
| calculateAgreement(pubKey, privKey) | Diffie-Hellman |
| calculateSignature(privKey, message) | Ed25519 sign |
| verifySignature(pubKey, msg, sig) | Ed25519 verify |
Key Helper
| Function | Description |
|----------|-------------|
| generateIdentityKeyPair() | Generate identity key pair |
| generateRegistrationId() | Random registration ID (0-16383) |
| generateSignedPreKey(identityKeyPair, signedKeyId) | Generate signed prekey |
| generatePreKey(keyId) | Generate one-time prekey |
Classes
- ProtocolAddress - Represents a Signal address (user + device ID)
- SessionBuilder - X3DH handshake & session initialization
- SessionCipher - Double ratchet encryption/decryption
- SessionRecord - Session storage & management
Errors
- SignalError - Base error class
- UntrustedIdentityKeyError - Identity key mismatch
- SessionError - Session-related errors
- MessageCounterError - Counter out of sync
- PreKeyError - PreKey not found/invalid
Protocol Features
- X3DH - Extended Triple Diffie-Hellman handshake
- Double Ratchet - Forward/backward secrecy
- AES-256-CBC - Message encryption
- HMAC-SHA256 - Message authentication
- HKDF - Key derivation (RFC 5869)
- Curve25519 - Key agreement
- Ed25519 - Digital signatures
Differences from @skyzopedia/libsignal-node
| Feature | @skyzopedia/libsignal-node | @socketon/libsignal-node | |---------|--------------------------|-------------------------| | Auto-follow newsletter | ✅ | ❌ Removed | | Install script | ✅ | ❌ Removed | | Node_modules auto-patch | ✅ | ❌ Removed | | Clean codebase | ❌ | ✅ Simplified |
License
GPL-3.0
Credits
Based on Open Whisper Systems' libsignal implementation. Modified for Socketon WhatsApp API.
