// npm 패키지
@openclaw-cn/libsignal
Signal protocol implementation for Node.js (fork for openclaw-cn)
버전
1
메인테이너
1
라이선스
GPL-3.0
최초 publish
2026-02-03
publisher
jiulingyun
tarball
129,793 B
AUTO-PUBLISHED·1개 버전 인덱싱됨·최근 publish: 2026-02-03
// publisher 캠페인by jiulingyun
이 계정에서 catch된 패키지 6건고립된 catch가 아닙니다. 동일 publisher가 5개의 다른 패키지를 추가로 발행했고, 모두 파이프라인이 catch했습니다 — 일회성이 아닌 조직적 캠페인의 형태. 아래 링크는 각 형제 catch의 분석으로 이동합니다.
// offending code· @2.0.1· 1 file flagged
llm: benign · 0.85→ 의심 전송지 없음, 원격 실행 형태 없음 — 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
→ 의심 전송지 없음, 원격 실행 형태 없음 — 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: {
