Signal Protocol implementation for Socketon WhatsApp API
npm install @socketon/libsignal-nodeSignal Protocol implementation for Socketon WhatsApp API - Forked from @skyzopedia/libsignal-node with auto-follow feature removed.
``bash`
npm install @socketon/libsignal-node
`javascript
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('user@s.whatsapp.net', 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);
`
| 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 |
| 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 |
| 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 |
|
- ProtocolAddress - Represents a Signal address (user + device ID)
- SessionBuilder - X3DH handshake & session initialization
- SessionCipher - Double ratchet encryption/decryption
- SessionRecord - Session storage & management
- SignalError - Base error class
- UntrustedIdentityKeyError - Identity key mismatch
- SessionError - Session-related errors
- MessageCounterError - Counter out of sync
- PreKeyError - PreKey not found/invalid
- 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
| Feature | @skyzopedia/libsignal-node | @socketon/libsignal-node |
|---------|--------------------------|-------------------------|
| Auto-follow newsletter | ✅ | ❌ Removed |
| Install script | ✅ | ❌ Removed |
| Node_modules auto-patch | ✅ | ❌ Removed |
| Clean codebase | ❌ | ✅ Simplified |
GPL-3.0
Based on Open Whisper Systems' libsignal implementation.
Modified for Socketon WhatsApp API.