// npm package
@openclaw-cn/libsignal
Signal protocol implementation for Node.js (fork for openclaw-cn)
versions
1
maintainers
1
license
GPL-3.0
first publish
2026-02-03
publisher
jiulingyun
tarball
129,793 B
AUTO-PUBLISHED·1 version indexed·latest published 2026-02-03
// publisher campaignby jiulingyun
6 caught packages from this accountThis is not an isolated catch. The same publisher has shipped 5 other packages that our pipeline flagged — the shape of a coordinated campaign, not a one-off. Each link below opens that sibling's analysis.
// offending code· @2.0.1· 1 file flagged
llm: benign · 0.85→ No suspicious destination, no remote-exec shape — 1 known-vendor host(s).
- @2.0.1··AUTO-PUBLISHED·publisher: jiulingyunheuristic 75/100static flags 1llm benign (0.85) via ollamafirst-version-of-packageosv-flagged:MAL-2026-3843base64-decode
→ No suspicious destination, no remote-exec shape — 1 known-vendor host(s).
// offending code· 1 file flaggedpatterns: 1
--- package/src/session_record.js (excerpt) --- // vim: ts=4:sw=4 const BaseKeyType = require('./base_key_type'); const CLOSED_SESSIONS_MAX = 40; const SESSION_RECORD_VERSION = 'v1'; function assertBuffer(value) { if (!Buffer.isBuffer(value)) { throw new TypeError("Buffer required"); } } class SessionEntry { constructor() { this._chains = {}; } toString() { const baseKey = this.indexInfo && this.indexInfo.baseKey && this.indexInfo.baseKey.toString('base64'); return `<SessionEntry [baseKey=${baseKey}]>`; } inspect() { return this.toString(); } addChain(key, value) { assertBuffer(key); const id = key.toString('base64'); if (this._chains.hasOwnProperty(id)) { throw new Error("Overwrite attempt"); } this._chains[id] = value; } getChain(key) { assertBuffer(key); return this._chains[key.toString('base64')]; } deleteChain(key) { assertBuffer(key); const id = key.toString('base64'); if (!this._chains.hasOwnProperty(id)) { throw new ReferenceError("Not Found"); } delete this._chains[id]; } *chains() { for (const [k, v] of Object.entries(this._chains)) { yield [Buffer.from(k, 'base64'), v]; } } serialize() { const data = { registrationId: this.registrationId, currentRatchet: { ephemeralKeyPair: {
