@svrnsec/pulse 0.8.0 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/SECURITY.md +91 -86
- package/dist/pulse.cjs +56 -0
- package/dist/pulse.cjs.map +1 -1
- package/dist/pulse.esm.js +56 -1
- package/dist/pulse.esm.js.map +1 -1
- package/index.d.ts +54 -0
- package/package.json +5 -1
- package/src/errors.js +54 -0
- package/src/index.js +3 -0
package/dist/pulse.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pulse.cjs","sources":["../src/analysis/jitter.js","../src/collector/adaptive.js","../src/collector/entropy.js","../src/collector/bio.js","../node_modules/@noble/hashes/esm/utils.js","../node_modules/@noble/hashes/esm/_md.js","../node_modules/@noble/hashes/esm/_u64.js","../node_modules/@noble/hashes/esm/_blake.js","../node_modules/@noble/hashes/esm/blake2.js","../node_modules/@noble/hashes/esm/blake3.js","../src/proof/fingerprint.js","../src/collector/canvas.js","../src/analysis/audio.js","../src/collector/gpu.js","../src/collector/dram.js","../src/collector/sabTimer.js","../src/collector/enf.js","../src/analysis/llm.js","../src/update-notifier.js","../src/analysis/heuristic.js","../src/analysis/coherence.js","../src/analysis/provider.js","../src/fingerprint.js","../src/proof/validator.js","../src/terminal.js","../src/index.js","../pkg/pulse_core.js"],"sourcesContent":["/**\r\n * @svrnsec/pulse — Statistical Jitter Analysis\r\n *\r\n * Analyses the timing distribution from the entropy probe to classify\r\n * the host as a real consumer device or a sanitised datacenter VM.\r\n *\r\n * Core insight:\r\n * Real hardware → thermal throttling, OS context switches, DRAM refresh\r\n * cycles create a characteristic \"noisy\" but physically\r\n * plausible timing distribution.\r\n * Datacenter VM → hypervisor scheduler presents a nearly-flat execution\r\n * curve; thermal feedback is absent; timer may be\r\n * quantised to the host's scheduler quantum.\r\n */\r\n\r\n// ---------------------------------------------------------------------------\r\n// Public API\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Full statistical analysis of a timing vector.\r\n *\r\n * @param {number[]} timings - per-iteration millisecond deltas from WASM probe\r\n * @param {object} [opts]\r\n * @param {object} [opts.autocorrelations] - pre-computed { lag1 … lag10 }\r\n * @returns {JitterAnalysis}\r\n */\r\nexport function classifyJitter(timings, opts = {}) {\r\n if (!timings || timings.length < 10) {\r\n return _insufficientData();\r\n }\r\n\r\n const stats = computeStats(timings);\r\n const autocorr = opts.autocorrelations ?? _computeLocalAutocorr(timings);\r\n const hurst = computeHurst(timings);\r\n const quantEnt = detectQuantizationEntropy(timings);\r\n const thermal = detectThermalSignature(timings);\r\n const outlierRate = _outlierRate(timings, stats);\r\n\r\n // ── Scoring rubric ───────────────────────────────────────────────────────\r\n // Each criterion contributes 0–1 to a weighted sum.\r\n // Weights sum to 1.0; final score is in [0, 1].\r\n // 1.0 = almost certainly a real consumer device + real silicon\r\n // 0.0 = almost certainly a sanitised VM / AI instance\r\n\r\n const components = {};\r\n const flags = [];\r\n\r\n // 1. Coefficient of Variation (weight 0.25)\r\n // Real hardware: CV ∈ [0.04, 0.35]\r\n // VM: CV often < 0.02 (\"too flat\") or > 0.5 (scheduler bursts)\r\n let cvScore = 0;\r\n if (stats.cv >= 0.04 && stats.cv <= 0.35) {\r\n cvScore = 1.0;\r\n } else if (stats.cv >= 0.02 && stats.cv < 0.04) {\r\n cvScore = (stats.cv - 0.02) / 0.02; // linear ramp up\r\n flags.push('LOW_CV_BORDERLINE');\r\n } else if (stats.cv > 0.35 && stats.cv < 0.5) {\r\n cvScore = 1.0 - (stats.cv - 0.35) / 0.15; // ramp down\r\n flags.push('HIGH_CV_POSSIBLE_SCHEDULER_BURST');\r\n } else if (stats.cv < 0.02) {\r\n cvScore = 0;\r\n flags.push('CV_TOO_FLAT_VM_INDICATOR');\r\n } else {\r\n cvScore = 0.2;\r\n flags.push('CV_TOO_HIGH_SCHEDULER_BURST');\r\n }\r\n components.cv = { score: cvScore, weight: 0.25, value: stats.cv };\r\n\r\n // 2. Autocorrelation profile (weight 0.20)\r\n // Real thermal noise → all lags near 0 (i.i.d. / Brownian)\r\n // VM hypervisor scheduler → positive autocorr (periodic steal-time bursts)\r\n // We use the maximum absolute autocorrelation across all measured lags\r\n // to catch both lag-1 and longer-period scheduler artifacts.\r\n const acVals = Object.values(autocorr).filter(v => v != null);\r\n const maxAbsAC = acVals.length ? Math.max(...acVals.map(Math.abs)) : 0;\r\n const meanAbsAC = acVals.length ? acVals.reduce((s, v) => s + Math.abs(v), 0) / acVals.length : 0;\r\n const acStat = (maxAbsAC + meanAbsAC) / 2; // blend: worst + average\r\n\r\n let ac1Score = 0;\r\n if (acStat < 0.12) {\r\n ac1Score = 1.0;\r\n } else if (acStat < 0.28) {\r\n ac1Score = 1.0 - (acStat - 0.12) / 0.16;\r\n flags.push('MODERATE_AUTOCORR_POSSIBLE_SCHEDULER');\r\n } else {\r\n ac1Score = 0;\r\n flags.push('HIGH_AUTOCORR_VM_SCHEDULER_DETECTED');\r\n }\r\n components.autocorr = { score: ac1Score, weight: 0.20, value: acStat };\r\n\r\n // 3. Quantization Entropy (weight 0.20)\r\n // High entropy → timings are spread, not clustered on fixed boundaries\r\n // Low entropy → values cluster on integer-ms ticks (legacy VM timer)\r\n //\r\n // Scale:\r\n // QE ≥ 4.5 → 1.00 (strongly physical)\r\n // QE 3.0–4.5 → 0.00–1.00 (linear ramp, healthy range)\r\n // QE 2.0–3.0 → 0.00–0.20 (borderline; still gives partial credit so one\r\n // weak metric doesn't zero-out the whole score)\r\n // QE < 2.0 → 0.00 (clearly synthetic/quantised timer)\r\n let qeScore = 0;\r\n if (quantEnt >= 4.5) {\r\n qeScore = 1.0;\r\n } else if (quantEnt >= 3.0) {\r\n qeScore = (quantEnt - 3.0) / 1.5; // 0.00 → 1.00\r\n } else if (quantEnt >= 2.0) {\r\n // Partial credit — not obviously VM but not clearly physical.\r\n // Lets other strong signals (CV, autocorr, Hurst) still carry the device\r\n // over the physical threshold instead of being zeroed by a single weak metric.\r\n qeScore = ((quantEnt - 2.0) / 1.0) * 0.20; // 0.00 → 0.20\r\n flags.push('LOW_QUANTIZATION_ENTROPY_BORDERLINE');\r\n } else {\r\n qeScore = 0;\r\n flags.push('LOW_QUANTIZATION_ENTROPY_SYNTHETIC_TIMER');\r\n }\r\n components.quantization = { score: qeScore, weight: 0.20, value: quantEnt };\r\n\r\n // 4. Hurst Exponent (weight 0.15)\r\n // Genuine white thermal noise → H ≈ 0.5\r\n // VM scheduler periodicity → H > 0.7 (persistent / self-similar)\r\n // Synthetic / replayed → H near 0 or 1\r\n let hurstScore = 0;\r\n const hurstDev = Math.abs(hurst - 0.5);\r\n if (hurstDev < 0.10) {\r\n hurstScore = 1.0;\r\n } else if (hurstDev < 0.25) {\r\n hurstScore = 1.0 - (hurstDev - 0.10) / 0.15;\r\n if (hurst > 0.7) flags.push('HIGH_HURST_VM_SCHEDULER_PERIODICITY');\r\n } else {\r\n hurstScore = 0;\r\n if (hurst > 0.7) flags.push('VERY_HIGH_HURST_VM');\r\n else if (hurst < 0.3) flags.push('VERY_LOW_HURST_ANTIPERSISTENT');\r\n }\r\n components.hurst = { score: hurstScore, weight: 0.15, value: hurst };\r\n\r\n // 5. Thermal signature (weight 0.10)\r\n // Real CPU under sustained load → upward drift or sawtooth (fan cycling)\r\n // VM: flat timing regardless of simulated load (no thermal feedback loop)\r\n let thermalScore = 0;\r\n if (thermal.pattern === 'rising' || thermal.pattern === 'sawtooth') {\r\n thermalScore = 1.0;\r\n } else if (Math.abs(thermal.slope) > 5e-5) {\r\n thermalScore = 0.5; // some drift present\r\n flags.push('WEAK_THERMAL_SIGNATURE');\r\n } else {\r\n thermalScore = 0;\r\n flags.push('FLAT_THERMAL_PROFILE_VM_INDICATOR');\r\n }\r\n components.thermal = { score: thermalScore, weight: 0.10, value: thermal.slope };\r\n\r\n // 6. Outlier rate (weight 0.10)\r\n // Context switches on real OS → occasional timing spikes (> 3σ)\r\n // VMs: far fewer OS-level interruptions visible to guest\r\n let outlierScore = 0;\r\n if (outlierRate >= 0.02 && outlierRate <= 0.15) {\r\n outlierScore = 1.0;\r\n } else if (outlierRate > 0 && outlierRate < 0.02) {\r\n outlierScore = outlierRate / 0.02;\r\n flags.push('FEW_OUTLIERS_POSSIBLY_VM');\r\n } else if (outlierRate > 0.15) {\r\n outlierScore = Math.max(0, 1.0 - (outlierRate - 0.15) / 0.15);\r\n flags.push('EXCESSIVE_OUTLIERS_UNSTABLE');\r\n }\r\n components.outliers = { score: outlierScore, weight: 0.10, value: outlierRate };\r\n\r\n // ── Weighted aggregate ────────────────────────────────────────────────────\r\n const score = Object.values(components)\r\n .reduce((sum, c) => sum + c.score * c.weight, 0);\r\n\r\n return {\r\n score: Math.max(0, Math.min(1, score)),\r\n flags,\r\n components,\r\n stats,\r\n autocorrelations: autocorr,\r\n hurstExponent: hurst,\r\n quantizationEntropy: quantEnt,\r\n thermalSignature: thermal,\r\n outlierRate,\r\n };\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// computeStats\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Descriptive statistics for a timing vector.\r\n * @param {number[]} arr\r\n * @returns {TimingStats}\r\n */\r\nexport function computeStats(arr) {\r\n const sorted = [...arr].sort((a, b) => a - b);\r\n const n = arr.length;\r\n const mean = arr.reduce((s, v) => s + v, 0) / n;\r\n const varr = arr.reduce((s, v) => s + (v - mean) ** 2, 0) / (n - 1);\r\n const std = Math.sqrt(varr);\r\n\r\n const pct = (p) => {\r\n const idx = (p / 100) * (n - 1);\r\n const lo = Math.floor(idx);\r\n const hi = Math.ceil(idx);\r\n return sorted[lo] + (sorted[hi] - sorted[lo]) * (idx - lo);\r\n };\r\n\r\n // Skewness (Fisher-Pearson)\r\n const skew = n < 3 ? 0 :\r\n arr.reduce((s, v) => s + ((v - mean) / std) ** 3, 0) *\r\n (n / ((n - 1) * (n - 2)));\r\n\r\n // Excess kurtosis\r\n const kurt = n < 4 ? 0 :\r\n (arr.reduce((s, v) => s + ((v - mean) / std) ** 4, 0) *\r\n (n * (n + 1)) / ((n - 1) * (n - 2) * (n - 3))) -\r\n (3 * (n - 1) ** 2) / ((n - 2) * (n - 3));\r\n\r\n return {\r\n n, mean, std,\r\n cv: std / mean,\r\n min: sorted[0],\r\n max: sorted[n - 1],\r\n p5: pct(5),\r\n p25: pct(25),\r\n p50: pct(50),\r\n p75: pct(75),\r\n p95: pct(95),\r\n p99: pct(99),\r\n skewness: skew,\r\n kurtosis: kurt,\r\n };\r\n}\r\n\r\n/**\r\n * @typedef {object} TimingStats\r\n * @property {number} n\r\n * @property {number} mean\r\n * @property {number} std\r\n * @property {number} cv\r\n * @property {number} min\r\n * @property {number} max\r\n * @property {number} p5\r\n * @property {number} p25\r\n * @property {number} p50\r\n * @property {number} p75\r\n * @property {number} p95\r\n * @property {number} p99\r\n * @property {number} skewness\r\n * @property {number} kurtosis\r\n */\r\n\r\n// ---------------------------------------------------------------------------\r\n// computeHurst\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Estimates the Hurst exponent via Rescaled Range (R/S) analysis.\r\n * Covers 4 sub-series sizes (n/4, n/3, n/2, n) to get a log-log slope.\r\n *\r\n * H ≈ 0.5 → random walk (Brownian, thermal noise)\r\n * H > 0.5 → persistent (VM hypervisor periodicity)\r\n * H < 0.5 → anti-persistent\r\n *\r\n * @param {number[]} arr\r\n * @returns {number}\r\n */\r\nexport function computeHurst(arr) {\r\n const n = arr.length;\r\n if (n < 16) return 0.5; // not enough data\r\n\r\n const sizes = [\r\n Math.floor(n / 4),\r\n Math.floor(n / 3),\r\n Math.floor(n / 2),\r\n n,\r\n ].filter(s => s >= 8);\r\n\r\n const points = sizes.map(s => {\r\n const rs = _rescaledRange(arr.slice(0, s));\r\n return [Math.log(s), Math.log(rs)];\r\n });\r\n\r\n // Ordinary least squares on log-log\r\n const xMean = points.reduce((s, p) => s + p[0], 0) / points.length;\r\n const yMean = points.reduce((s, p) => s + p[1], 0) / points.length;\r\n let num = 0, den = 0;\r\n for (const [x, y] of points) {\r\n num += (x - xMean) * (y - yMean);\r\n den += (x - xMean) ** 2;\r\n }\r\n const H = den === 0 ? 0.5 : num / den;\r\n return Math.max(0, Math.min(1, H));\r\n}\r\n\r\nfunction _rescaledRange(arr) {\r\n const n = arr.length;\r\n const mean = arr.reduce((s, v) => s + v, 0) / n;\r\n const dev = arr.map(v => v - mean);\r\n\r\n // Cumulative deviation\r\n const cum = [];\r\n let acc = 0;\r\n for (const d of dev) { acc += d; cum.push(acc); }\r\n\r\n const R = Math.max(...cum) - Math.min(...cum);\r\n const S = Math.sqrt(arr.reduce((s, v) => s + (v - mean) ** 2, 0) / n);\r\n return S === 0 ? 1 : R / S;\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// detectQuantizationEntropy\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Computes Shannon entropy of a histogram of timing values.\r\n * Low entropy (< 3 bits) indicates clustered / quantised timings (VM timer).\r\n *\r\n * @param {number[]} arr\r\n * @param {number} [binWidthMs=0.2]\r\n * @returns {number} entropy in bits\r\n */\r\nexport function detectQuantizationEntropy(arr, binWidthMs = 0.2) {\r\n if (!arr.length) return 0;\r\n const bins = new Map();\r\n for (const v of arr) {\r\n const bin = Math.round(v / binWidthMs);\r\n bins.set(bin, (bins.get(bin) ?? 0) + 1);\r\n }\r\n const n = arr.length;\r\n let H = 0;\r\n for (const count of bins.values()) {\r\n const p = count / n;\r\n H -= p * Math.log2(p);\r\n }\r\n return H;\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// detectThermalSignature\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Analyses whether the timing series shows a thermal throttle pattern:\r\n * a rising trend (CPU heating up) or sawtooth (fan intervention).\r\n *\r\n * @param {number[]} arr\r\n * @returns {{ slope: number, pattern: 'rising'|'falling'|'sawtooth'|'flat', r2: number }}\r\n */\r\nexport function detectThermalSignature(arr) {\r\n const n = arr.length;\r\n if (n < 10) return { slope: 0, pattern: 'flat', r2: 0 };\r\n\r\n // Linear regression (timing vs sample index)\r\n const xMean = (n - 1) / 2;\r\n const yMean = arr.reduce((s, v) => s + v, 0) / n;\r\n let num = 0, den = 0;\r\n for (let i = 0; i < n; i++) {\r\n num += (i - xMean) * (arr[i] - yMean);\r\n den += (i - xMean) ** 2;\r\n }\r\n const slope = den === 0 ? 0 : num / den;\r\n\r\n // R² of linear fit\r\n const ss_res = arr.reduce((s, v, i) => {\r\n const pred = yMean + slope * (i - xMean);\r\n return s + (v - pred) ** 2;\r\n }, 0);\r\n const ss_tot = arr.reduce((s, v) => s + (v - yMean) ** 2, 0);\r\n const r2 = ss_tot === 0 ? 0 : 1 - ss_res / ss_tot;\r\n\r\n // Sawtooth detection: look for a drop > 2σ after a rising segment\r\n const std = Math.sqrt(arr.reduce((s, v) => s + (v - yMean) ** 2, 0) / n);\r\n let sawtoothCount = 0;\r\n for (let i = 1; i < n; i++) {\r\n if (arr[i - 1] - arr[i] > 2 * std) sawtoothCount++;\r\n }\r\n\r\n let pattern;\r\n if (sawtoothCount >= 2) pattern = 'sawtooth';\r\n else if (slope > 5e-5) pattern = 'rising';\r\n else if (slope < -5e-5) pattern = 'falling';\r\n else pattern = 'flat';\r\n\r\n return { slope, pattern, r2, sawtoothCount };\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Internal helpers\r\n// ---------------------------------------------------------------------------\r\n\r\nfunction _outlierRate(arr, stats) {\r\n const threshold = stats.mean + 3 * stats.std;\r\n return arr.filter(v => v > threshold).length / arr.length;\r\n}\r\n\r\nfunction _computeLocalAutocorr(arr) {\r\n const autocorr = {};\r\n for (const lag of [1, 2, 3, 5, 10]) {\r\n autocorr[`lag${lag}`] = _pearsonAC(arr, lag);\r\n }\r\n return autocorr;\r\n}\r\n\r\nfunction _pearsonAC(arr, lag) {\r\n const n = arr.length;\r\n if (lag >= n) return 0;\r\n const valid = n - lag;\r\n const mean = arr.reduce((s, v) => s + v, 0) / n;\r\n let num = 0, da = 0, db = 0;\r\n for (let i = 0; i < valid; i++) {\r\n const a = arr[i] - mean;\r\n const b = arr[i + lag] - mean;\r\n num += a * b;\r\n da += a * a;\r\n db += b * b;\r\n }\r\n const denom = Math.sqrt(da * db);\r\n return denom < 1e-14 ? 0 : num / denom;\r\n}\r\n\r\nfunction _insufficientData() {\r\n return {\r\n score: 0,\r\n flags: ['INSUFFICIENT_DATA'],\r\n components: {},\r\n stats: null,\r\n autocorrelations: {},\r\n hurstExponent: 0.5,\r\n quantizationEntropy: 0,\r\n thermalSignature: { slope: 0, pattern: 'flat', r2: 0 },\r\n outlierRate: 0,\r\n };\r\n}\r\n\r\n/**\r\n * @typedef {object} JitterAnalysis\r\n * @property {number} score - [0,1], 1 = real hardware\r\n * @property {string[]} flags - diagnostic flags\r\n * @property {object} components - per-criterion scores and weights\r\n * @property {TimingStats} stats\r\n * @property {object} autocorrelations\r\n * @property {number} hurstExponent\r\n * @property {number} quantizationEntropy\r\n * @property {object} thermalSignature\r\n * @property {number} outlierRate\r\n */\r\n","/**\r\n * @svrnsec/pulse — Adaptive Entropy Probe\r\n *\r\n * Runs the WASM probe in batches and stops early once the signal is decisive.\r\n *\r\n * Why this works:\r\n * A KVM VM with QE=1.27 and lag-1 autocorr=0.67 is unambiguously a VM after\r\n * just 50 iterations. Running 200 iterations confirms what was already obvious\r\n * at 50 — it adds no new information but wastes 3 seconds of user time.\r\n *\r\n * Conversely, a physical device with healthy entropy needs more data to\r\n * rule out edge cases, so it runs longer.\r\n *\r\n * Speed profile:\r\n * Obvious VM (QE < 1.5, lag1 > 0.60) → stops at 50 iters → ~0.9s (75% faster)\r\n * Clear HW (QE > 3.5, lag1 < 0.10) → stops at ~100 iters → ~1.8s (50% faster)\r\n * Ambiguous (borderline metrics) → runs full 200 iters → ~3.5s (same)\r\n */\r\n\r\nimport { detectQuantizationEntropy } from '../analysis/jitter.js';\r\n\r\n// ---------------------------------------------------------------------------\r\n// Quick classifier (cheap, runs after every batch)\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Fast signal-quality check. No Hurst, no thermal analysis — just the three\r\n * metrics that converge quickest: QE, CV, and lag-1 autocorrelation.\r\n *\r\n * @param {number[]} timings\r\n * @returns {{ vmConf: number, hwConf: number, qe: number, cv: number, lag1: number }}\r\n */\r\nexport function quickSignal(timings) {\r\n const n = timings.length;\r\n const mean = timings.reduce((s, v) => s + v, 0) / n;\r\n const variance = timings.reduce((s, v) => s + (v - mean) ** 2, 0) / n;\r\n const cv = mean > 0 ? Math.sqrt(variance) / mean : 0;\r\n const qe = detectQuantizationEntropy(timings);\r\n\r\n // Pearson autocorrelation at lag-1 (O(n), fits in a single pass)\r\n let num = 0, da = 0, db = 0;\r\n for (let i = 0; i < n - 1; i++) {\r\n const a = timings[i] - mean;\r\n const b = timings[i + 1] - mean;\r\n num += a * b;\r\n da += a * a;\r\n db += b * b;\r\n }\r\n const lag1 = Math.sqrt(da * db) < 1e-14 ? 0 : num / Math.sqrt(da * db);\r\n\r\n // VM confidence: each factor independently identifies the hypervisor footprint\r\n const vmConf = Math.min(1,\r\n (qe < 1.50 ? 0.40 : qe < 2.00 ? 0.20 : 0.0) +\r\n (lag1 > 0.60 ? 0.35 : lag1 > 0.40 ? 0.18 : 0.0) +\r\n (cv < 0.04 ? 0.25 : cv < 0.07 ? 0.10 : 0.0)\r\n );\r\n\r\n // HW confidence: must see all three positive signals together\r\n const hwConf = Math.min(1,\r\n (qe > 3.50 ? 0.38 : qe > 3.00 ? 0.22 : 0.0) +\r\n (Math.abs(lag1) < 0.10 ? 0.32 : Math.abs(lag1) < 0.20 ? 0.15 : 0.0) +\r\n (cv > 0.10 ? 0.30 : cv > 0.07 ? 0.14 : 0.0)\r\n );\r\n\r\n return { vmConf, hwConf, qe, cv, lag1 };\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// collectEntropyAdaptive\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * @param {object} opts\r\n * @param {number} [opts.minIterations=50] - never stop before this\r\n * @param {number} [opts.maxIterations=200] - hard cap\r\n * @param {number} [opts.batchSize=25] - WASM call granularity\r\n * @param {number} [opts.vmThreshold=0.85] - stop early if VM confidence ≥ this\r\n * @param {number} [opts.hwThreshold=0.80] - stop early if HW confidence ≥ this\r\n * @param {number} [opts.hwMinIterations=75] - physical needs more data to confirm\r\n * @param {number} [opts.matrixSize=64]\r\n * @param {Function} [opts.onBatch] - called after each batch with interim signal\r\n * @param {string} [opts.wasmPath]\r\n * @param {Function} wasmModule - pre-initialised WASM module\r\n * @returns {Promise<AdaptiveEntropyResult>}\r\n */\r\nexport async function collectEntropyAdaptive(wasmModule, opts = {}) {\r\n const {\r\n minIterations = 50,\r\n maxIterations = 200,\r\n batchSize = 25,\r\n vmThreshold = 0.85,\r\n hwThreshold = 0.80,\r\n hwMinIterations = 75,\r\n matrixSize = 64,\r\n onBatch,\r\n } = opts;\r\n\r\n const wasm = wasmModule;\r\n const allTimings = [];\r\n const batches = []; // per-batch timing snapshots\r\n let stoppedAt = null; // { reason, iterations, vmConf, hwConf }\r\n let checksum = 0;\r\n\r\n const t_start = Date.now();\r\n\r\n while (allTimings.length < maxIterations) {\r\n const n = Math.min(batchSize, maxIterations - allTimings.length);\r\n const result = wasm.run_entropy_probe(n, matrixSize);\r\n const chunk = Array.from(result.timings);\r\n\r\n allTimings.push(...chunk);\r\n checksum += result.checksum;\r\n\r\n const sig = quickSignal(allTimings);\r\n batches.push({ iterations: allTimings.length, ...sig });\r\n\r\n // Fire progress callback with live signal so callers can stream to UI\r\n if (typeof onBatch === 'function') {\r\n try {\r\n onBatch({\r\n iterations: allTimings.length,\r\n maxIterations,\r\n pct: Math.round(allTimings.length / maxIterations * 100),\r\n vmConf: sig.vmConf,\r\n hwConf: sig.hwConf,\r\n qe: sig.qe,\r\n cv: sig.cv,\r\n lag1: sig.lag1,\r\n // Thresholds: 0.70 — high enough that a legitimate device won't be\r\n // shown a false early verdict from a noisy first batch.\r\n // 'borderline' surfaces when one axis is moderate but not decisive.\r\n earlyVerdict: sig.vmConf > 0.70 ? 'vm'\r\n : sig.hwConf > 0.70 ? 'physical'\r\n : (sig.vmConf > 0.45 || sig.hwConf > 0.45) ? 'borderline'\r\n : 'uncertain',\r\n });\r\n } catch (e) { if (typeof process !== 'undefined' && process.env?.NODE_ENV !== 'production') console.error('[pulse] onBatch error:', e); }\r\n }\r\n\r\n // ── Early-exit checks ──────────────────────────────────────────────────\r\n if (allTimings.length < minIterations) continue;\r\n\r\n if (sig.vmConf >= vmThreshold) {\r\n stoppedAt = { reason: 'VM_SIGNAL_DECISIVE', vmConf: sig.vmConf, hwConf: sig.hwConf };\r\n break;\r\n }\r\n\r\n if (allTimings.length >= hwMinIterations && sig.hwConf >= hwThreshold) {\r\n stoppedAt = { reason: 'PHYSICAL_SIGNAL_DECISIVE', vmConf: sig.vmConf, hwConf: sig.hwConf };\r\n break;\r\n }\r\n }\r\n\r\n const elapsed = Date.now() - t_start;\r\n const iterationsRan = allTimings.length;\r\n const iterationsSaved = maxIterations - iterationsRan;\r\n const speedupFactor = maxIterations / iterationsRan;\r\n\r\n // ── Resolution probe using cached WASM call ────────────────────────────\r\n const resResult = wasm.run_entropy_probe(1, 4); // tiny probe for resolution\r\n const resProbe = Array.from(resResult.resolution_probe ?? []);\r\n\r\n const resDeltas = [];\r\n for (let i = 1; i < resProbe.length; i++) {\r\n const d = resProbe[i] - resProbe[i - 1];\r\n if (d > 0) resDeltas.push(d);\r\n }\r\n\r\n return {\r\n timings: allTimings,\r\n iterations: iterationsRan,\r\n maxIterations,\r\n checksum: checksum.toString(),\r\n resolutionProbe: resProbe,\r\n timerGranularityMs: resDeltas.length\r\n ? resDeltas.reduce((a, b) => Math.min(a, b), Infinity)\r\n : null,\r\n earlyExit: stoppedAt ? {\r\n ...stoppedAt,\r\n iterationsSaved,\r\n timeSavedMs: Math.round(iterationsSaved * (elapsed / iterationsRan)),\r\n speedupFactor: +speedupFactor.toFixed(2),\r\n } : null,\r\n batches,\r\n elapsedMs: elapsed,\r\n collectedAt: t_start,\r\n matrixSize,\r\n phased: false, // adaptive replaces phased for speed\r\n };\r\n}\r\n\r\n/**\r\n * @typedef {object} AdaptiveEntropyResult\r\n * @property {number[]} timings\r\n * @property {number} iterations - how many actually ran\r\n * @property {number} maxIterations - cap that was set\r\n * @property {object|null} earlyExit - null if ran to completion\r\n * @property {object[]} batches - per-batch signal snapshots\r\n * @property {number} elapsedMs\r\n */\r\n","/**\r\n * @svrnsec/pulse — Entropy Collector\r\n *\r\n * Bridges the Rust/WASM matrix-multiply probe into JavaScript.\r\n * The WASM module is lazily initialised once and cached for subsequent calls.\r\n */\r\n\r\nimport { collectEntropyAdaptive } from './adaptive.js';\r\n\r\n// ---------------------------------------------------------------------------\r\n// WASM loader (lazy singleton)\r\n// ---------------------------------------------------------------------------\r\nlet _wasmModule = null;\r\nlet _initPromise = null;\r\n\r\n/**\r\n * Initialise (or return the cached) WASM module.\r\n * Works in browsers (via fetch), in Electron (Node.js context), and in\r\n * Jest/Vitest via a manual WASM path override.\r\n *\r\n * @param {string} [wasmPath] – override path/URL to the .wasm binary\r\n */\r\nasync function initWasm(wasmPath) {\r\n if (_wasmModule) return _wasmModule;\r\n if (_initPromise) return _initPromise;\r\n\r\n _initPromise = (async () => {\r\n // Dynamic import so bundlers can tree-shake this for server-only builds.\r\n const { default: init, run_entropy_probe, run_memory_probe, compute_autocorrelation } =\r\n await import('../../pkg/pulse_core.js');\r\n\r\n const url = wasmPath ?? new URL('../../pkg/pulse_core_bg.wasm', import.meta.url).href;\r\n await init(url);\r\n\r\n _wasmModule = { run_entropy_probe, run_memory_probe, compute_autocorrelation };\r\n return _wasmModule;\r\n })();\r\n\r\n return _initPromise;\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// collectEntropy\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Run the WASM entropy probe and return raw timing data.\r\n *\r\n * @param {object} opts\r\n * @param {number} [opts.iterations=200] - number of matrix-multiply rounds\r\n * @param {number} [opts.matrixSize=64] - N for the N×N matrices\r\n * @param {number} [opts.memSizeKb=512] - size of the memory bandwidth probe\r\n * @param {number} [opts.memIterations=50]\r\n * @param {boolean} [opts.phased=true] - run cold/load/hot phases for entropy-jitter ratio\r\n * @param {string} [opts.wasmPath] - optional custom WASM binary path\r\n *\r\n * @returns {Promise<EntropyResult>}\r\n */\r\nexport async function collectEntropy(opts = {}) {\r\n const {\r\n iterations = 200,\r\n matrixSize = 64,\r\n memSizeKb = 512,\r\n memIterations = 50,\r\n phased = true,\r\n adaptive = false,\r\n adaptiveThreshold = 0.85,\r\n onBatch,\r\n wasmPath,\r\n } = opts;\r\n\r\n const wasm = await initWasm(wasmPath);\r\n const t_start = Date.now();\r\n\r\n let phases = null;\r\n let timings, resolutionProbe, checksum, timerGranularityMs;\r\n let _adaptiveInfo = null;\r\n\r\n // ── Adaptive mode: smart early exit, fastest for obvious VMs ──────────\r\n if (adaptive) {\r\n const r = await collectEntropyAdaptive(wasm, {\r\n minIterations: 50,\r\n maxIterations: iterations,\r\n batchSize: 25,\r\n vmThreshold: adaptiveThreshold,\r\n hwThreshold: 0.80,\r\n hwMinIterations: 75,\r\n matrixSize,\r\n onBatch,\r\n });\r\n timings = r.timings;\r\n resolutionProbe = r.resolutionProbe ?? [];\r\n checksum = r.checksum;\r\n timerGranularityMs = r.timerGranularityMs;\r\n _adaptiveInfo = { earlyExit: r.earlyExit, batches: r.batches, elapsedMs: r.elapsedMs };\r\n\r\n // ── Phased collection: cold → load → hot ──────────────────────────────\r\n // Each phase runs a separate WASM probe. On real hardware, sustained load\r\n // increases thermal noise so Phase 3 (hot) entropy is measurably higher\r\n // than Phase 1 (cold). A VM's hypervisor clock is insensitive to guest\r\n // thermal state, so all three phases return nearly identical entropy.\r\n } else if (phased && iterations >= 60) {\r\n const coldN = Math.floor(iterations * 0.25); // ~25% cold\r\n const loadN = Math.floor(iterations * 0.50); // ~50% sustained load\r\n const hotN = iterations - coldN - loadN; // ~25% hot\r\n\r\n const cold = wasm.run_entropy_probe(coldN, matrixSize);\r\n const load = wasm.run_entropy_probe(loadN, matrixSize);\r\n const hot = wasm.run_entropy_probe(hotN, matrixSize);\r\n\r\n const coldTimings = Array.from(cold.timings);\r\n const loadTimings = Array.from(load.timings);\r\n const hotTimings = Array.from(hot.timings);\r\n\r\n timings = [...coldTimings, ...loadTimings, ...hotTimings];\r\n resolutionProbe = Array.from(cold.resolution_probe);\r\n checksum = (cold.checksum + load.checksum + hot.checksum).toString();\r\n\r\n const { detectQuantizationEntropy } = await import('../analysis/jitter.js');\r\n const coldQE = detectQuantizationEntropy(coldTimings);\r\n const hotQE = detectQuantizationEntropy(hotTimings);\r\n\r\n phases = {\r\n cold: { n: coldN, timings: coldTimings, qe: coldQE, mean: _mean(coldTimings) },\r\n load: { n: loadN, timings: loadTimings, qe: detectQuantizationEntropy(loadTimings), mean: _mean(loadTimings) },\r\n hot: { n: hotN, timings: hotTimings, qe: hotQE, mean: _mean(hotTimings) },\r\n // The key signal: entropy growth under load.\r\n // Real silicon: hotQE / coldQE typically 1.05 – 1.40\r\n // VM: hotQE / coldQE typically 0.95 – 1.05 (flat)\r\n entropyJitterRatio: coldQE > 0 ? hotQE / coldQE : 1.0,\r\n };\r\n } else {\r\n // Single-phase fallback (fewer iterations or phased disabled)\r\n const result = wasm.run_entropy_probe(iterations, matrixSize);\r\n timings = Array.from(result.timings);\r\n resolutionProbe = Array.from(result.resolution_probe);\r\n checksum = result.checksum.toString();\r\n }\r\n\r\n // ── Timer resolution (non-adaptive path only — adaptive computes its own) ─\r\n if (!adaptive) {\r\n const resDeltas = [];\r\n for (let i = 1; i < resolutionProbe.length; i++) {\r\n const d = resolutionProbe[i] - resolutionProbe[i - 1];\r\n if (d > 0) resDeltas.push(d);\r\n }\r\n timerGranularityMs = resDeltas.length\r\n ? resDeltas.reduce((a, b) => Math.min(a, b), Infinity)\r\n : null;\r\n }\r\n\r\n // ── Autocorrelation at diagnostic lags ────────────────────────────────\r\n // Extended lags catch long-period steal-time rhythms (Xen: ~150 iters)\r\n const lags = [1, 2, 3, 5, 10, 25, 50];\r\n const autocorrelations = {};\r\n for (const lag of lags) {\r\n if (lag < timings.length) {\r\n autocorrelations[`lag${lag}`] = wasm.compute_autocorrelation(timings, lag);\r\n }\r\n }\r\n\r\n // ── Secondary probe: memory bandwidth jitter ───────────────────────────\r\n const memTimings = Array.from(wasm.run_memory_probe(memSizeKb, memIterations));\r\n\r\n return {\r\n timings,\r\n resolutionProbe,\r\n timerGranularityMs,\r\n autocorrelations,\r\n memTimings,\r\n phases,\r\n checksum,\r\n collectedAt: t_start,\r\n iterations: timings.length, // actual count (adaptive may differ from requested)\r\n matrixSize,\r\n adaptive: _adaptiveInfo, // null in non-adaptive mode\r\n };\r\n}\r\n\r\nfunction _mean(arr) {\r\n return arr.length ? arr.reduce((s, v) => s + v, 0) / arr.length : 0;\r\n}\r\n\r\n/**\r\n * @typedef {object} EntropyResult\r\n * @property {number[]} timings - per-iteration wall-clock deltas (ms)\r\n * @property {number[]} resolutionProbe - raw successive perf.now() readings\r\n * @property {number|null} timerGranularityMs - effective timer resolution\r\n * @property {object} autocorrelations - { lag1, lag2, lag3, lag5, lag10 }\r\n * @property {number[]} memTimings - memory-probe timings (ms)\r\n * @property {string} checksum - proof the computation ran\r\n * @property {number} collectedAt - Date.now() at probe start\r\n * @property {number} iterations\r\n * @property {number} matrixSize\r\n */\r\n","/**\r\n * @svrnsec/pulse — Bio-Binding Layer\r\n *\r\n * Captures mouse-movement micro-stutters and keystroke-cadence dynamics\r\n * WHILE the hardware entropy probe is running. Computes the\r\n * \"Interference Coefficient\": how much human input jitters hardware timing.\r\n *\r\n * PRIVACY NOTE: Only timing deltas are retained. No key labels, no raw\r\n * (x, y) coordinates, no content of any kind is stored or transmitted.\r\n */\r\n\r\n// ---------------------------------------------------------------------------\r\n// Internal state\r\n// ---------------------------------------------------------------------------\r\nconst MAX_EVENTS = 500; // rolling buffer cap\r\nconst MAX_KEY_STATES = 50; // cap on simultaneous tracked key states\r\n\r\n// ---------------------------------------------------------------------------\r\n// BioCollector class\r\n// ---------------------------------------------------------------------------\r\nexport class BioCollector {\r\n constructor() {\r\n this._mouseEvents = []; // { t: DOMHighResTimeStamp, dx, dy }\r\n this._keyEvents = []; // { t, type: 'down'|'up', dwell: ms|null }\r\n this._lastKey = {}; // keyCode → { downAt: t }\r\n this._lastMouse = null; // { t, x, y }\r\n this._startTime = null;\r\n this._active = false;\r\n\r\n // Bound handlers (needed for removeEventListener)\r\n this._onMouseMove = this._onMouseMove.bind(this);\r\n this._onKeyDown = this._onKeyDown.bind(this);\r\n this._onKeyUp = this._onKeyUp.bind(this);\r\n }\r\n\r\n // ── Lifecycle ────────────────────────────────────────────────────────────\r\n\r\n start() {\r\n if (this._active) return;\r\n this._active = true;\r\n this._startTime = performance.now();\r\n\r\n if (typeof window !== 'undefined') {\r\n window.addEventListener('pointermove', this._onMouseMove, { passive: true });\r\n window.addEventListener('keydown', this._onKeyDown, { passive: true });\r\n window.addEventListener('keyup', this._onKeyUp, { passive: true });\r\n }\r\n }\r\n\r\n stop() {\r\n if (!this._active) return;\r\n this._active = false;\r\n\r\n if (typeof window !== 'undefined') {\r\n window.removeEventListener('pointermove', this._onMouseMove);\r\n window.removeEventListener('keydown', this._onKeyDown);\r\n window.removeEventListener('keyup', this._onKeyUp);\r\n }\r\n\r\n this._lastMouse = null;\r\n }\r\n\r\n // ── Event handlers ────────────────────────────────────────────────────────\r\n\r\n _onMouseMove(e) {\r\n if (!this._active) return;\r\n const t = e.timeStamp ?? performance.now();\r\n const cur = { t, x: e.clientX, y: e.clientY };\r\n\r\n if (this._lastMouse) {\r\n const dt = t - this._lastMouse.t;\r\n const dx = cur.x - this._lastMouse.x;\r\n const dy = cur.y - this._lastMouse.y;\r\n // Only store the delta, not absolute position (privacy)\r\n if (this._mouseEvents.length < MAX_EVENTS) {\r\n this._mouseEvents.push({ t, dt, dx, dy,\r\n pressure: e.pressure ?? 0,\r\n pointerType: e.pointerType ?? 'mouse' });\r\n }\r\n }\r\n this._lastMouse = cur;\r\n }\r\n\r\n _onKeyDown(e) {\r\n if (!this._active) return;\r\n const t = e.timeStamp ?? performance.now();\r\n // Store timestamp keyed by code (NOT key label)\r\n this._lastKey[e.code] = { downAt: t };\r\n // Prevent unbounded growth if keys are held without keyup\r\n if (Object.keys(this._lastKey).length > MAX_KEY_STATES) {\r\n const oldest = Object.entries(this._lastKey)\r\n .sort((a, b) => a[1].downAt - b[1].downAt)[0];\r\n if (oldest) delete this._lastKey[oldest[0]];\r\n }\r\n }\r\n\r\n _onKeyUp(e) {\r\n if (!this._active) return;\r\n const t = e.timeStamp ?? performance.now();\r\n const rec = this._lastKey[e.code];\r\n const dwell = rec ? (t - rec.downAt) : null;\r\n delete this._lastKey[e.code];\r\n\r\n if (this._keyEvents.length < MAX_EVENTS) {\r\n // Only dwell time; key identity NOT stored.\r\n this._keyEvents.push({ t, dwell });\r\n }\r\n }\r\n\r\n // ── snapshot ─────────────────────────────────────────────────────────────\r\n\r\n /**\r\n * Returns a privacy-preserving statistical snapshot of collected bio signals.\r\n * Raw events are summarised; nothing identifiable is included in the output.\r\n *\r\n * @param {number[]} computationTimings - entropy probe timing array\r\n * @returns {BioSnapshot}\r\n */\r\n snapshot(computationTimings = []) {\r\n const now = performance.now();\r\n const durationMs = this._startTime != null ? (now - this._startTime) : 0;\r\n\r\n // ── Mouse statistics ────────────────────────────────────────────────\r\n const iei = this._mouseEvents.map(e => e.dt);\r\n const velocities = this._mouseEvents.map(e =>\r\n e.dt > 0 ? Math.hypot(e.dx, e.dy) / e.dt : 0\r\n );\r\n const pressure = this._mouseEvents.map(e => e.pressure);\r\n const angJerk = _computeAngularJerk(this._mouseEvents);\r\n\r\n const mouseStats = {\r\n sampleCount: iei.length,\r\n ieiMean: _mean(iei),\r\n ieiCV: _cv(iei),\r\n velocityP50: _percentile(velocities, 50),\r\n velocityP95: _percentile(velocities, 95),\r\n angularJerkMean: _mean(angJerk),\r\n pressureVariance: _variance(pressure),\r\n };\r\n\r\n // ── Keyboard statistics ───────────────────────────────────────────────\r\n const dwellTimes = this._keyEvents.filter(e => e.dwell != null).map(e => e.dwell);\r\n const iki = [];\r\n for (let i = 1; i < this._keyEvents.length; i++) {\r\n iki.push(this._keyEvents[i].t - this._keyEvents[i - 1].t);\r\n }\r\n\r\n const keyStats = {\r\n sampleCount: dwellTimes.length,\r\n dwellMean: _mean(dwellTimes),\r\n dwellCV: _cv(dwellTimes),\r\n ikiMean: _mean(iki),\r\n ikiCV: _cv(iki),\r\n };\r\n\r\n // ── Interference Coefficient ──────────────────────────────────────────\r\n // Cross-correlate input event density with computation timing deviations.\r\n // A real human on real hardware creates measurable CPU-scheduling pressure\r\n // that perturbs the entropy probe's timing.\r\n const interferenceCoefficient = _computeInterference(\r\n this._mouseEvents,\r\n this._keyEvents,\r\n computationTimings,\r\n );\r\n\r\n return {\r\n mouse: mouseStats,\r\n keyboard: keyStats,\r\n interferenceCoefficient,\r\n durationMs,\r\n hasActivity: iei.length > 5 || dwellTimes.length > 2,\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * @typedef {object} BioSnapshot\r\n * @property {object} mouse\r\n * @property {object} keyboard\r\n * @property {number} interferenceCoefficient – [−1, 1]; higher = more human\r\n * @property {number} durationMs\r\n * @property {boolean} hasActivity\r\n */\r\n\r\n// ---------------------------------------------------------------------------\r\n// Statistical helpers (private)\r\n// ---------------------------------------------------------------------------\r\n\r\nfunction _mean(arr) {\r\n if (!arr.length) return 0;\r\n return arr.reduce((a, b) => a + b, 0) / arr.length;\r\n}\r\n\r\nfunction _variance(arr) {\r\n if (arr.length < 2) return 0;\r\n const m = _mean(arr);\r\n return arr.reduce((s, v) => s + (v - m) ** 2, 0) / (arr.length - 1);\r\n}\r\n\r\nfunction _cv(arr) {\r\n if (!arr.length) return 0;\r\n const m = _mean(arr);\r\n if (m === 0) return 0;\r\n return Math.sqrt(_variance(arr)) / Math.abs(m);\r\n}\r\n\r\nfunction _percentile(sorted, p) {\r\n const arr = [...sorted].sort((a, b) => a - b);\r\n if (!arr.length) return 0;\r\n const idx = (p / 100) * (arr.length - 1);\r\n const lo = Math.floor(idx);\r\n const hi = Math.ceil(idx);\r\n return arr[lo] + (arr[hi] - arr[lo]) * (idx - lo);\r\n}\r\n\r\n/** Angular jerk: second derivative of movement direction (radians / s²) */\r\nfunction _computeAngularJerk(events) {\r\n if (events.length < 3) return [];\r\n const angles = [];\r\n for (let i = 0; i < events.length; i++) {\r\n const { dx, dy } = events[i];\r\n angles.push(Math.atan2(dy, dx));\r\n }\r\n const d1 = [];\r\n for (let i = 1; i < angles.length; i++) {\r\n const dt = events[i].dt || 1;\r\n d1.push((angles[i] - angles[i - 1]) / dt);\r\n }\r\n const d2 = [];\r\n for (let i = 1; i < d1.length; i++) {\r\n const dt = events[i].dt || 1;\r\n d2.push(Math.abs((d1[i] - d1[i - 1]) / dt));\r\n }\r\n return d2;\r\n}\r\n\r\n/**\r\n * Interference Coefficient\r\n *\r\n * For each computation sample, check whether an input event occurred within\r\n * ±16 ms (one animation frame). Build two parallel series:\r\n * X[i] = 1 if input near sample i, else 0\r\n * Y[i] = deviation of timing[i] from mean timing\r\n * Return the Pearson correlation between X and Y.\r\n * A real human on real hardware produces positive correlation (input events\r\n * cause measurable CPU scheduling perturbations).\r\n */\r\nfunction _computeInterference(mouseEvents, keyEvents, timings) {\r\n if (!timings.length) return 0;\r\n\r\n const allInputTimes = [\r\n ...mouseEvents.map(e => e.t),\r\n ...keyEvents.map(e => e.t),\r\n ].sort((a, b) => a - b);\r\n\r\n if (!allInputTimes.length) return 0;\r\n\r\n const WINDOW_MS = 16;\r\n const meanTiming = _mean(timings);\r\n\r\n // Note: timing alignment is approximate; probe start timestamp would improve accuracy\r\n // We need absolute timestamps for the probe samples.\r\n // We don't have them directly – use relative index spacing as a proxy.\r\n // The entropy probe runs for ~(mean * n) ms starting at collectedAt.\r\n // This is a statistical approximation; the exact alignment improves\r\n // when callers pass `collectedAt` from the entropy result.\r\n // For now we distribute samples evenly across the collection window.\r\n const first = allInputTimes[0];\r\n const last = allInputTimes[allInputTimes.length - 1];\r\n const span = Math.max(last - first, 1);\r\n\r\n const X = timings.map((_, i) => {\r\n const tSample = first + (i / timings.length) * span;\r\n return allInputTimes.some(t => Math.abs(t - tSample) < WINDOW_MS) ? 1 : 0;\r\n });\r\n\r\n const Y = timings.map(t => t - meanTiming);\r\n\r\n return _pearson(X, Y);\r\n}\r\n\r\nfunction _pearson(X, Y) {\r\n const n = X.length;\r\n if (n < 2) return 0;\r\n const mx = _mean(X);\r\n const my = _mean(Y);\r\n let num = 0, da = 0, db = 0;\r\n for (let i = 0; i < n; i++) {\r\n const a = X[i] - mx;\r\n const b = Y[i] - my;\r\n num += a * b;\r\n da += a * a;\r\n db += b * b;\r\n }\r\n const denom = Math.sqrt(da * db);\r\n return denom < 1e-14 ? 0 : num / denom;\r\n}\r\n","/**\n * Utilities for hex, bytes, CSPRNG.\n * @module\n */\n/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// node.js versions earlier than v19 don't declare it in global scope.\n// For node.js, package.json#exports field mapping rewrites import\n// from `crypto` to `cryptoNode`, which imports native module.\n// Makes the utils un-importable in browsers without a bundler.\n// Once node.js 18 is deprecated (2025-04-30), we can just drop the import.\nimport { crypto } from '@noble/hashes/crypto';\n/** Checks if something is Uint8Array. Be careful: nodejs Buffer will return true. */\nexport function isBytes(a) {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n/** Asserts something is positive integer. */\nexport function anumber(n) {\n if (!Number.isSafeInteger(n) || n < 0)\n throw new Error('positive integer expected, got ' + n);\n}\n/** Asserts something is Uint8Array. */\nexport function abytes(b, ...lengths) {\n if (!isBytes(b))\n throw new Error('Uint8Array expected');\n if (lengths.length > 0 && !lengths.includes(b.length))\n throw new Error('Uint8Array expected of length ' + lengths + ', got length=' + b.length);\n}\n/** Asserts something is hash */\nexport function ahash(h) {\n if (typeof h !== 'function' || typeof h.create !== 'function')\n throw new Error('Hash should be wrapped by utils.createHasher');\n anumber(h.outputLen);\n anumber(h.blockLen);\n}\n/** Asserts a hash instance has not been destroyed / finished */\nexport function aexists(instance, checkFinished = true) {\n if (instance.destroyed)\n throw new Error('Hash instance has been destroyed');\n if (checkFinished && instance.finished)\n throw new Error('Hash#digest() has already been called');\n}\n/** Asserts output is properly-sized byte array */\nexport function aoutput(out, instance) {\n abytes(out);\n const min = instance.outputLen;\n if (out.length < min) {\n throw new Error('digestInto() expects output buffer of length at least ' + min);\n }\n}\n/** Cast u8 / u16 / u32 to u8. */\nexport function u8(arr) {\n return new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n/** Cast u8 / u16 / u32 to u32. */\nexport function u32(arr) {\n return new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n}\n/** Zeroize a byte array. Warning: JS provides no guarantees. */\nexport function clean(...arrays) {\n for (let i = 0; i < arrays.length; i++) {\n arrays[i].fill(0);\n }\n}\n/** Create DataView of an array for easy byte-level manipulation. */\nexport function createView(arr) {\n return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n/** The rotate right (circular right shift) operation for uint32 */\nexport function rotr(word, shift) {\n return (word << (32 - shift)) | (word >>> shift);\n}\n/** The rotate left (circular left shift) operation for uint32 */\nexport function rotl(word, shift) {\n return (word << shift) | ((word >>> (32 - shift)) >>> 0);\n}\n/** Is current platform little-endian? Most are. Big-Endian platform: IBM */\nexport const isLE = /* @__PURE__ */ (() => new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44)();\n/** The byte swap operation for uint32 */\nexport function byteSwap(word) {\n return (((word << 24) & 0xff000000) |\n ((word << 8) & 0xff0000) |\n ((word >>> 8) & 0xff00) |\n ((word >>> 24) & 0xff));\n}\n/** Conditionally byte swap if on a big-endian platform */\nexport const swap8IfBE = isLE\n ? (n) => n\n : (n) => byteSwap(n);\n/** @deprecated */\nexport const byteSwapIfBE = swap8IfBE;\n/** In place byte swap for Uint32Array */\nexport function byteSwap32(arr) {\n for (let i = 0; i < arr.length; i++) {\n arr[i] = byteSwap(arr[i]);\n }\n return arr;\n}\nexport const swap32IfBE = isLE\n ? (u) => u\n : byteSwap32;\n// Built-in hex conversion https://caniuse.com/mdn-javascript_builtins_uint8array_fromhex\nconst hasHexBuiltin = /* @__PURE__ */ (() => \n// @ts-ignore\ntypeof Uint8Array.from([]).toHex === 'function' && typeof Uint8Array.fromHex === 'function')();\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, '0'));\n/**\n * Convert byte array to hex string. Uses built-in function, when available.\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes) {\n abytes(bytes);\n // @ts-ignore\n if (hasHexBuiltin)\n return bytes.toHex();\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += hexes[bytes[i]];\n }\n return hex;\n}\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 };\nfunction asciiToBase16(ch) {\n if (ch >= asciis._0 && ch <= asciis._9)\n return ch - asciis._0; // '2' => 50-48\n if (ch >= asciis.A && ch <= asciis.F)\n return ch - (asciis.A - 10); // 'B' => 66-(65-10)\n if (ch >= asciis.a && ch <= asciis.f)\n return ch - (asciis.a - 10); // 'b' => 98-(97-10)\n return;\n}\n/**\n * Convert hex string to byte array. Uses built-in function, when available.\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex) {\n if (typeof hex !== 'string')\n throw new Error('hex string expected, got ' + typeof hex);\n // @ts-ignore\n if (hasHexBuiltin)\n return Uint8Array.fromHex(hex);\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2)\n throw new Error('hex string expected, got unpadded hex of length ' + hl);\n const array = new Uint8Array(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n const n1 = asciiToBase16(hex.charCodeAt(hi));\n const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n if (n1 === undefined || n2 === undefined) {\n const char = hex[hi] + hex[hi + 1];\n throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n }\n array[ai] = n1 * 16 + n2; // multiply first octet, e.g. 'a3' => 10*16+3 => 160 + 3 => 163\n }\n return array;\n}\n/**\n * There is no setImmediate in browser and setTimeout is slow.\n * Call of async fn will return Promise, which will be fullfiled only on\n * next scheduler queue processing step and this is exactly what we need.\n */\nexport const nextTick = async () => { };\n/** Returns control to thread each 'tick' ms to avoid blocking. */\nexport async function asyncLoop(iters, tick, cb) {\n let ts = Date.now();\n for (let i = 0; i < iters; i++) {\n cb(i);\n // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n const diff = Date.now() - ts;\n if (diff >= 0 && diff < tick)\n continue;\n await nextTick();\n ts += diff;\n }\n}\n/**\n * Converts string to bytes using UTF8 encoding.\n * @example utf8ToBytes('abc') // Uint8Array.from([97, 98, 99])\n */\nexport function utf8ToBytes(str) {\n if (typeof str !== 'string')\n throw new Error('string expected');\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n/**\n * Converts bytes to string using UTF8 encoding.\n * @example bytesToUtf8(Uint8Array.from([97, 98, 99])) // 'abc'\n */\nexport function bytesToUtf8(bytes) {\n return new TextDecoder().decode(bytes);\n}\n/**\n * Normalizes (non-hex) string or Uint8Array to Uint8Array.\n * Warning: when Uint8Array is passed, it would NOT get copied.\n * Keep in mind for future mutable operations.\n */\nexport function toBytes(data) {\n if (typeof data === 'string')\n data = utf8ToBytes(data);\n abytes(data);\n return data;\n}\n/**\n * Helper for KDFs: consumes uint8array or string.\n * When string is passed, does utf8 decoding, using TextDecoder.\n */\nexport function kdfInputToBytes(data) {\n if (typeof data === 'string')\n data = utf8ToBytes(data);\n abytes(data);\n return data;\n}\n/** Copies several Uint8Arrays into one. */\nexport function concatBytes(...arrays) {\n let sum = 0;\n for (let i = 0; i < arrays.length; i++) {\n const a = arrays[i];\n abytes(a);\n sum += a.length;\n }\n const res = new Uint8Array(sum);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const a = arrays[i];\n res.set(a, pad);\n pad += a.length;\n }\n return res;\n}\nexport function checkOpts(defaults, opts) {\n if (opts !== undefined && {}.toString.call(opts) !== '[object Object]')\n throw new Error('options should be object or undefined');\n const merged = Object.assign(defaults, opts);\n return merged;\n}\n/** For runtime check if class implements interface */\nexport class Hash {\n}\n/** Wraps hash function, creating an interface on top of it */\nexport function createHasher(hashCons) {\n const hashC = (msg) => hashCons().update(toBytes(msg)).digest();\n const tmp = hashCons();\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = () => hashCons();\n return hashC;\n}\nexport function createOptHasher(hashCons) {\n const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({});\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n return hashC;\n}\nexport function createXOFer(hashCons) {\n const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({});\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n return hashC;\n}\nexport const wrapConstructor = createHasher;\nexport const wrapConstructorWithOpts = createOptHasher;\nexport const wrapXOFConstructorWithOpts = createXOFer;\n/** Cryptographically secure PRNG. Uses internal OS-level `crypto.getRandomValues`. */\nexport function randomBytes(bytesLength = 32) {\n if (crypto && typeof crypto.getRandomValues === 'function') {\n return crypto.getRandomValues(new Uint8Array(bytesLength));\n }\n // Legacy Node.js compatibility\n if (crypto && typeof crypto.randomBytes === 'function') {\n return Uint8Array.from(crypto.randomBytes(bytesLength));\n }\n throw new Error('crypto.getRandomValues must be defined');\n}\n//# sourceMappingURL=utils.js.map","/**\n * Internal Merkle-Damgard hash utils.\n * @module\n */\nimport { Hash, abytes, aexists, aoutput, clean, createView, toBytes } from \"./utils.js\";\n/** Polyfill for Safari 14. https://caniuse.com/mdn-javascript_builtins_dataview_setbiguint64 */\nexport function setBigUint64(view, byteOffset, value, isLE) {\n if (typeof view.setBigUint64 === 'function')\n return view.setBigUint64(byteOffset, value, isLE);\n const _32n = BigInt(32);\n const _u32_max = BigInt(0xffffffff);\n const wh = Number((value >> _32n) & _u32_max);\n const wl = Number(value & _u32_max);\n const h = isLE ? 4 : 0;\n const l = isLE ? 0 : 4;\n view.setUint32(byteOffset + h, wh, isLE);\n view.setUint32(byteOffset + l, wl, isLE);\n}\n/** Choice: a ? b : c */\nexport function Chi(a, b, c) {\n return (a & b) ^ (~a & c);\n}\n/** Majority function, true if any two inputs is true. */\nexport function Maj(a, b, c) {\n return (a & b) ^ (a & c) ^ (b & c);\n}\n/**\n * Merkle-Damgard hash construction base class.\n * Could be used to create MD5, RIPEMD, SHA1, SHA2.\n */\nexport class HashMD extends Hash {\n constructor(blockLen, outputLen, padOffset, isLE) {\n super();\n this.finished = false;\n this.length = 0;\n this.pos = 0;\n this.destroyed = false;\n this.blockLen = blockLen;\n this.outputLen = outputLen;\n this.padOffset = padOffset;\n this.isLE = isLE;\n this.buffer = new Uint8Array(blockLen);\n this.view = createView(this.buffer);\n }\n update(data) {\n aexists(this);\n data = toBytes(data);\n abytes(data);\n const { view, buffer, blockLen } = this;\n const len = data.length;\n for (let pos = 0; pos < len;) {\n const take = Math.min(blockLen - this.pos, len - pos);\n // Fast path: we have at least one block in input, cast it to view and process\n if (take === blockLen) {\n const dataView = createView(data);\n for (; blockLen <= len - pos; pos += blockLen)\n this.process(dataView, pos);\n continue;\n }\n buffer.set(data.subarray(pos, pos + take), this.pos);\n this.pos += take;\n pos += take;\n if (this.pos === blockLen) {\n this.process(view, 0);\n this.pos = 0;\n }\n }\n this.length += data.length;\n this.roundClean();\n return this;\n }\n digestInto(out) {\n aexists(this);\n aoutput(out, this);\n this.finished = true;\n // Padding\n // We can avoid allocation of buffer for padding completely if it\n // was previously not allocated here. But it won't change performance.\n const { buffer, view, blockLen, isLE } = this;\n let { pos } = this;\n // append the bit '1' to the message\n buffer[pos++] = 0b10000000;\n clean(this.buffer.subarray(pos));\n // we have less than padOffset left in buffer, so we cannot put length in\n // current block, need process it and pad again\n if (this.padOffset > blockLen - pos) {\n this.process(view, 0);\n pos = 0;\n }\n // Pad until full block byte with zeros\n for (let i = pos; i < blockLen; i++)\n buffer[i] = 0;\n // Note: sha512 requires length to be 128bit integer, but length in JS will overflow before that\n // You need to write around 2 exabytes (u64_max / 8 / (1024**6)) for this to happen.\n // So we just write lowest 64 bits of that value.\n setBigUint64(view, blockLen - 8, BigInt(this.length * 8), isLE);\n this.process(view, 0);\n const oview = createView(out);\n const len = this.outputLen;\n // NOTE: we do division by 4 later, which should be fused in single op with modulo by JIT\n if (len % 4)\n throw new Error('_sha2: outputLen should be aligned to 32bit');\n const outLen = len / 4;\n const state = this.get();\n if (outLen > state.length)\n throw new Error('_sha2: outputLen bigger than state');\n for (let i = 0; i < outLen; i++)\n oview.setUint32(4 * i, state[i], isLE);\n }\n digest() {\n const { buffer, outputLen } = this;\n this.digestInto(buffer);\n const res = buffer.slice(0, outputLen);\n this.destroy();\n return res;\n }\n _cloneInto(to) {\n to || (to = new this.constructor());\n to.set(...this.get());\n const { blockLen, buffer, length, finished, destroyed, pos } = this;\n to.destroyed = destroyed;\n to.finished = finished;\n to.length = length;\n to.pos = pos;\n if (length % blockLen)\n to.buffer.set(buffer);\n return to;\n }\n clone() {\n return this._cloneInto();\n }\n}\n/**\n * Initial SHA-2 state: fractional parts of square roots of first 16 primes 2..53.\n * Check out `test/misc/sha2-gen-iv.js` for recomputation guide.\n */\n/** Initial SHA256 state. Bits 0..32 of frac part of sqrt of primes 2..19 */\nexport const SHA256_IV = /* @__PURE__ */ Uint32Array.from([\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19,\n]);\n/** Initial SHA224 state. Bits 32..64 of frac part of sqrt of primes 23..53 */\nexport const SHA224_IV = /* @__PURE__ */ Uint32Array.from([\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4,\n]);\n/** Initial SHA384 state. Bits 0..64 of frac part of sqrt of primes 23..53 */\nexport const SHA384_IV = /* @__PURE__ */ Uint32Array.from([\n 0xcbbb9d5d, 0xc1059ed8, 0x629a292a, 0x367cd507, 0x9159015a, 0x3070dd17, 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31, 0x8eb44a87, 0x68581511, 0xdb0c2e0d, 0x64f98fa7, 0x47b5481d, 0xbefa4fa4,\n]);\n/** Initial SHA512 state. Bits 0..64 of frac part of sqrt of primes 2..19 */\nexport const SHA512_IV = /* @__PURE__ */ Uint32Array.from([\n 0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179,\n]);\n//# sourceMappingURL=_md.js.map","/**\n * Internal helpers for u64. BigUint64Array is too slow as per 2025, so we implement it using Uint32Array.\n * @todo re-check https://issues.chromium.org/issues/42212588\n * @module\n */\nconst U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);\nconst _32n = /* @__PURE__ */ BigInt(32);\nfunction fromBig(n, le = false) {\n if (le)\n return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) };\n return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };\n}\nfunction split(lst, le = false) {\n const len = lst.length;\n let Ah = new Uint32Array(len);\n let Al = new Uint32Array(len);\n for (let i = 0; i < len; i++) {\n const { h, l } = fromBig(lst[i], le);\n [Ah[i], Al[i]] = [h, l];\n }\n return [Ah, Al];\n}\nconst toBig = (h, l) => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);\n// for Shift in [0, 32)\nconst shrSH = (h, _l, s) => h >>> s;\nconst shrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in [1, 32)\nconst rotrSH = (h, l, s) => (h >>> s) | (l << (32 - s));\nconst rotrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotrBH = (h, l, s) => (h << (64 - s)) | (l >>> (s - 32));\nconst rotrBL = (h, l, s) => (h >>> (s - 32)) | (l << (64 - s));\n// Right rotate for shift===32 (just swaps l&h)\nconst rotr32H = (_h, l) => l;\nconst rotr32L = (h, _l) => h;\n// Left rotate for Shift in [1, 32)\nconst rotlSH = (h, l, s) => (h << s) | (l >>> (32 - s));\nconst rotlSL = (h, l, s) => (l << s) | (h >>> (32 - s));\n// Left rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotlBH = (h, l, s) => (l << (s - 32)) | (h >>> (64 - s));\nconst rotlBL = (h, l, s) => (h << (s - 32)) | (l >>> (64 - s));\n// JS uses 32-bit signed integers for bitwise operations which means we cannot\n// simple take carry out of low bit sum by shift, we need to use division.\nfunction add(Ah, Al, Bh, Bl) {\n const l = (Al >>> 0) + (Bl >>> 0);\n return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };\n}\n// Addition with more than 2 elements\nconst add3L = (Al, Bl, Cl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nconst add3H = (low, Ah, Bh, Ch) => (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\nconst add4L = (Al, Bl, Cl, Dl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nconst add4H = (low, Ah, Bh, Ch, Dh) => (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\nconst add5L = (Al, Bl, Cl, Dl, El) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\nconst add5H = (low, Ah, Bh, Ch, Dh, Eh) => (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\n// prettier-ignore\nexport { add, add3H, add3L, add4H, add4L, add5H, add5L, fromBig, rotlBH, rotlBL, rotlSH, rotlSL, rotr32H, rotr32L, rotrBH, rotrBL, rotrSH, rotrSL, shrSH, shrSL, split, toBig };\n// prettier-ignore\nconst u64 = {\n fromBig, split, toBig,\n shrSH, shrSL,\n rotrSH, rotrSL, rotrBH, rotrBL,\n rotr32H, rotr32L,\n rotlSH, rotlSL, rotlBH, rotlBL,\n add, add3L, add3H, add4L, add4H, add5H, add5L,\n};\nexport default u64;\n//# sourceMappingURL=_u64.js.map","/**\n * Internal helpers for blake hash.\n * @module\n */\nimport { rotr } from \"./utils.js\";\n/**\n * Internal blake variable.\n * For BLAKE2b, the two extra permutations for rounds 10 and 11 are SIGMA[10..11] = SIGMA[0..1].\n */\n// prettier-ignore\nexport const BSIGMA = /* @__PURE__ */ Uint8Array.from([\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3,\n 11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4,\n 7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8,\n 9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13,\n 2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9,\n 12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11,\n 13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10,\n 6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5,\n 10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13, 0,\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3,\n // Blake1, unused in others\n 11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4,\n 7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8,\n 9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13,\n 2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9,\n]);\n// Mixing function G splitted in two halfs\nexport function G1s(a, b, c, d, x) {\n a = (a + b + x) | 0;\n d = rotr(d ^ a, 16);\n c = (c + d) | 0;\n b = rotr(b ^ c, 12);\n return { a, b, c, d };\n}\nexport function G2s(a, b, c, d, x) {\n a = (a + b + x) | 0;\n d = rotr(d ^ a, 8);\n c = (c + d) | 0;\n b = rotr(b ^ c, 7);\n return { a, b, c, d };\n}\n//# sourceMappingURL=_blake.js.map","/**\n * blake2b (64-bit) & blake2s (8 to 32-bit) hash functions.\n * b could have been faster, but there is no fast u64 in js, so s is 1.5x faster.\n * @module\n */\nimport { BSIGMA, G1s, G2s } from \"./_blake.js\";\nimport { SHA256_IV } from \"./_md.js\";\nimport * as u64 from \"./_u64.js\";\n// prettier-ignore\nimport { abytes, aexists, anumber, aoutput, clean, createOptHasher, Hash, swap32IfBE, swap8IfBE, toBytes, u32 } from \"./utils.js\";\n// Same as SHA512_IV, but swapped endianness: LE instead of BE. iv[1] is iv[0], etc.\nconst B2B_IV = /* @__PURE__ */ Uint32Array.from([\n 0xf3bcc908, 0x6a09e667, 0x84caa73b, 0xbb67ae85, 0xfe94f82b, 0x3c6ef372, 0x5f1d36f1, 0xa54ff53a,\n 0xade682d1, 0x510e527f, 0x2b3e6c1f, 0x9b05688c, 0xfb41bd6b, 0x1f83d9ab, 0x137e2179, 0x5be0cd19,\n]);\n// Temporary buffer\nconst BBUF = /* @__PURE__ */ new Uint32Array(32);\n// Mixing function G splitted in two halfs\nfunction G1b(a, b, c, d, msg, x) {\n // NOTE: V is LE here\n const Xl = msg[x], Xh = msg[x + 1]; // prettier-ignore\n let Al = BBUF[2 * a], Ah = BBUF[2 * a + 1]; // prettier-ignore\n let Bl = BBUF[2 * b], Bh = BBUF[2 * b + 1]; // prettier-ignore\n let Cl = BBUF[2 * c], Ch = BBUF[2 * c + 1]; // prettier-ignore\n let Dl = BBUF[2 * d], Dh = BBUF[2 * d + 1]; // prettier-ignore\n // v[a] = (v[a] + v[b] + x) | 0;\n let ll = u64.add3L(Al, Bl, Xl);\n Ah = u64.add3H(ll, Ah, Bh, Xh);\n Al = ll | 0;\n // v[d] = rotr(v[d] ^ v[a], 32)\n ({ Dh, Dl } = { Dh: Dh ^ Ah, Dl: Dl ^ Al });\n ({ Dh, Dl } = { Dh: u64.rotr32H(Dh, Dl), Dl: u64.rotr32L(Dh, Dl) });\n // v[c] = (v[c] + v[d]) | 0;\n ({ h: Ch, l: Cl } = u64.add(Ch, Cl, Dh, Dl));\n // v[b] = rotr(v[b] ^ v[c], 24)\n ({ Bh, Bl } = { Bh: Bh ^ Ch, Bl: Bl ^ Cl });\n ({ Bh, Bl } = { Bh: u64.rotrSH(Bh, Bl, 24), Bl: u64.rotrSL(Bh, Bl, 24) });\n (BBUF[2 * a] = Al), (BBUF[2 * a + 1] = Ah);\n (BBUF[2 * b] = Bl), (BBUF[2 * b + 1] = Bh);\n (BBUF[2 * c] = Cl), (BBUF[2 * c + 1] = Ch);\n (BBUF[2 * d] = Dl), (BBUF[2 * d + 1] = Dh);\n}\nfunction G2b(a, b, c, d, msg, x) {\n // NOTE: V is LE here\n const Xl = msg[x], Xh = msg[x + 1]; // prettier-ignore\n let Al = BBUF[2 * a], Ah = BBUF[2 * a + 1]; // prettier-ignore\n let Bl = BBUF[2 * b], Bh = BBUF[2 * b + 1]; // prettier-ignore\n let Cl = BBUF[2 * c], Ch = BBUF[2 * c + 1]; // prettier-ignore\n let Dl = BBUF[2 * d], Dh = BBUF[2 * d + 1]; // prettier-ignore\n // v[a] = (v[a] + v[b] + x) | 0;\n let ll = u64.add3L(Al, Bl, Xl);\n Ah = u64.add3H(ll, Ah, Bh, Xh);\n Al = ll | 0;\n // v[d] = rotr(v[d] ^ v[a], 16)\n ({ Dh, Dl } = { Dh: Dh ^ Ah, Dl: Dl ^ Al });\n ({ Dh, Dl } = { Dh: u64.rotrSH(Dh, Dl, 16), Dl: u64.rotrSL(Dh, Dl, 16) });\n // v[c] = (v[c] + v[d]) | 0;\n ({ h: Ch, l: Cl } = u64.add(Ch, Cl, Dh, Dl));\n // v[b] = rotr(v[b] ^ v[c], 63)\n ({ Bh, Bl } = { Bh: Bh ^ Ch, Bl: Bl ^ Cl });\n ({ Bh, Bl } = { Bh: u64.rotrBH(Bh, Bl, 63), Bl: u64.rotrBL(Bh, Bl, 63) });\n (BBUF[2 * a] = Al), (BBUF[2 * a + 1] = Ah);\n (BBUF[2 * b] = Bl), (BBUF[2 * b + 1] = Bh);\n (BBUF[2 * c] = Cl), (BBUF[2 * c + 1] = Ch);\n (BBUF[2 * d] = Dl), (BBUF[2 * d + 1] = Dh);\n}\nfunction checkBlake2Opts(outputLen, opts = {}, keyLen, saltLen, persLen) {\n anumber(keyLen);\n if (outputLen < 0 || outputLen > keyLen)\n throw new Error('outputLen bigger than keyLen');\n const { key, salt, personalization } = opts;\n if (key !== undefined && (key.length < 1 || key.length > keyLen))\n throw new Error('key length must be undefined or 1..' + keyLen);\n if (salt !== undefined && salt.length !== saltLen)\n throw new Error('salt must be undefined or ' + saltLen);\n if (personalization !== undefined && personalization.length !== persLen)\n throw new Error('personalization must be undefined or ' + persLen);\n}\n/** Class, from which others are subclassed. */\nexport class BLAKE2 extends Hash {\n constructor(blockLen, outputLen) {\n super();\n this.finished = false;\n this.destroyed = false;\n this.length = 0;\n this.pos = 0;\n anumber(blockLen);\n anumber(outputLen);\n this.blockLen = blockLen;\n this.outputLen = outputLen;\n this.buffer = new Uint8Array(blockLen);\n this.buffer32 = u32(this.buffer);\n }\n update(data) {\n aexists(this);\n data = toBytes(data);\n abytes(data);\n // Main difference with other hashes: there is flag for last block,\n // so we cannot process current block before we know that there\n // is the next one. This significantly complicates logic and reduces ability\n // to do zero-copy processing\n const { blockLen, buffer, buffer32 } = this;\n const len = data.length;\n const offset = data.byteOffset;\n const buf = data.buffer;\n for (let pos = 0; pos < len;) {\n // If buffer is full and we still have input (don't process last block, same as blake2s)\n if (this.pos === blockLen) {\n swap32IfBE(buffer32);\n this.compress(buffer32, 0, false);\n swap32IfBE(buffer32);\n this.pos = 0;\n }\n const take = Math.min(blockLen - this.pos, len - pos);\n const dataOffset = offset + pos;\n // full block && aligned to 4 bytes && not last in input\n if (take === blockLen && !(dataOffset % 4) && pos + take < len) {\n const data32 = new Uint32Array(buf, dataOffset, Math.floor((len - pos) / 4));\n swap32IfBE(data32);\n for (let pos32 = 0; pos + blockLen < len; pos32 += buffer32.length, pos += blockLen) {\n this.length += blockLen;\n this.compress(data32, pos32, false);\n }\n swap32IfBE(data32);\n continue;\n }\n buffer.set(data.subarray(pos, pos + take), this.pos);\n this.pos += take;\n this.length += take;\n pos += take;\n }\n return this;\n }\n digestInto(out) {\n aexists(this);\n aoutput(out, this);\n const { pos, buffer32 } = this;\n this.finished = true;\n // Padding\n clean(this.buffer.subarray(pos));\n swap32IfBE(buffer32);\n this.compress(buffer32, 0, true);\n swap32IfBE(buffer32);\n const out32 = u32(out);\n this.get().forEach((v, i) => (out32[i] = swap8IfBE(v)));\n }\n digest() {\n const { buffer, outputLen } = this;\n this.digestInto(buffer);\n const res = buffer.slice(0, outputLen);\n this.destroy();\n return res;\n }\n _cloneInto(to) {\n const { buffer, length, finished, destroyed, outputLen, pos } = this;\n to || (to = new this.constructor({ dkLen: outputLen }));\n to.set(...this.get());\n to.buffer.set(buffer);\n to.destroyed = destroyed;\n to.finished = finished;\n to.length = length;\n to.pos = pos;\n // @ts-ignore\n to.outputLen = outputLen;\n return to;\n }\n clone() {\n return this._cloneInto();\n }\n}\nexport class BLAKE2b extends BLAKE2 {\n constructor(opts = {}) {\n const olen = opts.dkLen === undefined ? 64 : opts.dkLen;\n super(128, olen);\n // Same as SHA-512, but LE\n this.v0l = B2B_IV[0] | 0;\n this.v0h = B2B_IV[1] | 0;\n this.v1l = B2B_IV[2] | 0;\n this.v1h = B2B_IV[3] | 0;\n this.v2l = B2B_IV[4] | 0;\n this.v2h = B2B_IV[5] | 0;\n this.v3l = B2B_IV[6] | 0;\n this.v3h = B2B_IV[7] | 0;\n this.v4l = B2B_IV[8] | 0;\n this.v4h = B2B_IV[9] | 0;\n this.v5l = B2B_IV[10] | 0;\n this.v5h = B2B_IV[11] | 0;\n this.v6l = B2B_IV[12] | 0;\n this.v6h = B2B_IV[13] | 0;\n this.v7l = B2B_IV[14] | 0;\n this.v7h = B2B_IV[15] | 0;\n checkBlake2Opts(olen, opts, 64, 16, 16);\n let { key, personalization, salt } = opts;\n let keyLength = 0;\n if (key !== undefined) {\n key = toBytes(key);\n keyLength = key.length;\n }\n this.v0l ^= this.outputLen | (keyLength << 8) | (0x01 << 16) | (0x01 << 24);\n if (salt !== undefined) {\n salt = toBytes(salt);\n const slt = u32(salt);\n this.v4l ^= swap8IfBE(slt[0]);\n this.v4h ^= swap8IfBE(slt[1]);\n this.v5l ^= swap8IfBE(slt[2]);\n this.v5h ^= swap8IfBE(slt[3]);\n }\n if (personalization !== undefined) {\n personalization = toBytes(personalization);\n const pers = u32(personalization);\n this.v6l ^= swap8IfBE(pers[0]);\n this.v6h ^= swap8IfBE(pers[1]);\n this.v7l ^= swap8IfBE(pers[2]);\n this.v7h ^= swap8IfBE(pers[3]);\n }\n if (key !== undefined) {\n // Pad to blockLen and update\n const tmp = new Uint8Array(this.blockLen);\n tmp.set(key);\n this.update(tmp);\n }\n }\n // prettier-ignore\n get() {\n let { v0l, v0h, v1l, v1h, v2l, v2h, v3l, v3h, v4l, v4h, v5l, v5h, v6l, v6h, v7l, v7h } = this;\n return [v0l, v0h, v1l, v1h, v2l, v2h, v3l, v3h, v4l, v4h, v5l, v5h, v6l, v6h, v7l, v7h];\n }\n // prettier-ignore\n set(v0l, v0h, v1l, v1h, v2l, v2h, v3l, v3h, v4l, v4h, v5l, v5h, v6l, v6h, v7l, v7h) {\n this.v0l = v0l | 0;\n this.v0h = v0h | 0;\n this.v1l = v1l | 0;\n this.v1h = v1h | 0;\n this.v2l = v2l | 0;\n this.v2h = v2h | 0;\n this.v3l = v3l | 0;\n this.v3h = v3h | 0;\n this.v4l = v4l | 0;\n this.v4h = v4h | 0;\n this.v5l = v5l | 0;\n this.v5h = v5h | 0;\n this.v6l = v6l | 0;\n this.v6h = v6h | 0;\n this.v7l = v7l | 0;\n this.v7h = v7h | 0;\n }\n compress(msg, offset, isLast) {\n this.get().forEach((v, i) => (BBUF[i] = v)); // First half from state.\n BBUF.set(B2B_IV, 16); // Second half from IV.\n let { h, l } = u64.fromBig(BigInt(this.length));\n BBUF[24] = B2B_IV[8] ^ l; // Low word of the offset.\n BBUF[25] = B2B_IV[9] ^ h; // High word.\n // Invert all bits for last block\n if (isLast) {\n BBUF[28] = ~BBUF[28];\n BBUF[29] = ~BBUF[29];\n }\n let j = 0;\n const s = BSIGMA;\n for (let i = 0; i < 12; i++) {\n G1b(0, 4, 8, 12, msg, offset + 2 * s[j++]);\n G2b(0, 4, 8, 12, msg, offset + 2 * s[j++]);\n G1b(1, 5, 9, 13, msg, offset + 2 * s[j++]);\n G2b(1, 5, 9, 13, msg, offset + 2 * s[j++]);\n G1b(2, 6, 10, 14, msg, offset + 2 * s[j++]);\n G2b(2, 6, 10, 14, msg, offset + 2 * s[j++]);\n G1b(3, 7, 11, 15, msg, offset + 2 * s[j++]);\n G2b(3, 7, 11, 15, msg, offset + 2 * s[j++]);\n G1b(0, 5, 10, 15, msg, offset + 2 * s[j++]);\n G2b(0, 5, 10, 15, msg, offset + 2 * s[j++]);\n G1b(1, 6, 11, 12, msg, offset + 2 * s[j++]);\n G2b(1, 6, 11, 12, msg, offset + 2 * s[j++]);\n G1b(2, 7, 8, 13, msg, offset + 2 * s[j++]);\n G2b(2, 7, 8, 13, msg, offset + 2 * s[j++]);\n G1b(3, 4, 9, 14, msg, offset + 2 * s[j++]);\n G2b(3, 4, 9, 14, msg, offset + 2 * s[j++]);\n }\n this.v0l ^= BBUF[0] ^ BBUF[16];\n this.v0h ^= BBUF[1] ^ BBUF[17];\n this.v1l ^= BBUF[2] ^ BBUF[18];\n this.v1h ^= BBUF[3] ^ BBUF[19];\n this.v2l ^= BBUF[4] ^ BBUF[20];\n this.v2h ^= BBUF[5] ^ BBUF[21];\n this.v3l ^= BBUF[6] ^ BBUF[22];\n this.v3h ^= BBUF[7] ^ BBUF[23];\n this.v4l ^= BBUF[8] ^ BBUF[24];\n this.v4h ^= BBUF[9] ^ BBUF[25];\n this.v5l ^= BBUF[10] ^ BBUF[26];\n this.v5h ^= BBUF[11] ^ BBUF[27];\n this.v6l ^= BBUF[12] ^ BBUF[28];\n this.v6h ^= BBUF[13] ^ BBUF[29];\n this.v7l ^= BBUF[14] ^ BBUF[30];\n this.v7h ^= BBUF[15] ^ BBUF[31];\n clean(BBUF);\n }\n destroy() {\n this.destroyed = true;\n clean(this.buffer32);\n this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n }\n}\n/**\n * Blake2b hash function. 64-bit. 1.5x slower than blake2s in JS.\n * @param msg - message that would be hashed\n * @param opts - dkLen output length, key for MAC mode, salt, personalization\n */\nexport const blake2b = /* @__PURE__ */ createOptHasher((opts) => new BLAKE2b(opts));\n// prettier-ignore\nexport function compress(s, offset, msg, rounds, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) {\n let j = 0;\n for (let i = 0; i < rounds; i++) {\n ({ a: v0, b: v4, c: v8, d: v12 } = G1s(v0, v4, v8, v12, msg[offset + s[j++]]));\n ({ a: v0, b: v4, c: v8, d: v12 } = G2s(v0, v4, v8, v12, msg[offset + s[j++]]));\n ({ a: v1, b: v5, c: v9, d: v13 } = G1s(v1, v5, v9, v13, msg[offset + s[j++]]));\n ({ a: v1, b: v5, c: v9, d: v13 } = G2s(v1, v5, v9, v13, msg[offset + s[j++]]));\n ({ a: v2, b: v6, c: v10, d: v14 } = G1s(v2, v6, v10, v14, msg[offset + s[j++]]));\n ({ a: v2, b: v6, c: v10, d: v14 } = G2s(v2, v6, v10, v14, msg[offset + s[j++]]));\n ({ a: v3, b: v7, c: v11, d: v15 } = G1s(v3, v7, v11, v15, msg[offset + s[j++]]));\n ({ a: v3, b: v7, c: v11, d: v15 } = G2s(v3, v7, v11, v15, msg[offset + s[j++]]));\n ({ a: v0, b: v5, c: v10, d: v15 } = G1s(v0, v5, v10, v15, msg[offset + s[j++]]));\n ({ a: v0, b: v5, c: v10, d: v15 } = G2s(v0, v5, v10, v15, msg[offset + s[j++]]));\n ({ a: v1, b: v6, c: v11, d: v12 } = G1s(v1, v6, v11, v12, msg[offset + s[j++]]));\n ({ a: v1, b: v6, c: v11, d: v12 } = G2s(v1, v6, v11, v12, msg[offset + s[j++]]));\n ({ a: v2, b: v7, c: v8, d: v13 } = G1s(v2, v7, v8, v13, msg[offset + s[j++]]));\n ({ a: v2, b: v7, c: v8, d: v13 } = G2s(v2, v7, v8, v13, msg[offset + s[j++]]));\n ({ a: v3, b: v4, c: v9, d: v14 } = G1s(v3, v4, v9, v14, msg[offset + s[j++]]));\n ({ a: v3, b: v4, c: v9, d: v14 } = G2s(v3, v4, v9, v14, msg[offset + s[j++]]));\n }\n return { v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15 };\n}\nconst B2S_IV = SHA256_IV;\nexport class BLAKE2s extends BLAKE2 {\n constructor(opts = {}) {\n const olen = opts.dkLen === undefined ? 32 : opts.dkLen;\n super(64, olen);\n // Internal state, same as SHA-256\n this.v0 = B2S_IV[0] | 0;\n this.v1 = B2S_IV[1] | 0;\n this.v2 = B2S_IV[2] | 0;\n this.v3 = B2S_IV[3] | 0;\n this.v4 = B2S_IV[4] | 0;\n this.v5 = B2S_IV[5] | 0;\n this.v6 = B2S_IV[6] | 0;\n this.v7 = B2S_IV[7] | 0;\n checkBlake2Opts(olen, opts, 32, 8, 8);\n let { key, personalization, salt } = opts;\n let keyLength = 0;\n if (key !== undefined) {\n key = toBytes(key);\n keyLength = key.length;\n }\n this.v0 ^= this.outputLen | (keyLength << 8) | (0x01 << 16) | (0x01 << 24);\n if (salt !== undefined) {\n salt = toBytes(salt);\n const slt = u32(salt);\n this.v4 ^= swap8IfBE(slt[0]);\n this.v5 ^= swap8IfBE(slt[1]);\n }\n if (personalization !== undefined) {\n personalization = toBytes(personalization);\n const pers = u32(personalization);\n this.v6 ^= swap8IfBE(pers[0]);\n this.v7 ^= swap8IfBE(pers[1]);\n }\n if (key !== undefined) {\n // Pad to blockLen and update\n abytes(key);\n const tmp = new Uint8Array(this.blockLen);\n tmp.set(key);\n this.update(tmp);\n }\n }\n get() {\n const { v0, v1, v2, v3, v4, v5, v6, v7 } = this;\n return [v0, v1, v2, v3, v4, v5, v6, v7];\n }\n // prettier-ignore\n set(v0, v1, v2, v3, v4, v5, v6, v7) {\n this.v0 = v0 | 0;\n this.v1 = v1 | 0;\n this.v2 = v2 | 0;\n this.v3 = v3 | 0;\n this.v4 = v4 | 0;\n this.v5 = v5 | 0;\n this.v6 = v6 | 0;\n this.v7 = v7 | 0;\n }\n compress(msg, offset, isLast) {\n const { h, l } = u64.fromBig(BigInt(this.length));\n // prettier-ignore\n const { v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15 } = compress(BSIGMA, offset, msg, 10, this.v0, this.v1, this.v2, this.v3, this.v4, this.v5, this.v6, this.v7, B2S_IV[0], B2S_IV[1], B2S_IV[2], B2S_IV[3], l ^ B2S_IV[4], h ^ B2S_IV[5], isLast ? ~B2S_IV[6] : B2S_IV[6], B2S_IV[7]);\n this.v0 ^= v0 ^ v8;\n this.v1 ^= v1 ^ v9;\n this.v2 ^= v2 ^ v10;\n this.v3 ^= v3 ^ v11;\n this.v4 ^= v4 ^ v12;\n this.v5 ^= v5 ^ v13;\n this.v6 ^= v6 ^ v14;\n this.v7 ^= v7 ^ v15;\n }\n destroy() {\n this.destroyed = true;\n clean(this.buffer32);\n this.set(0, 0, 0, 0, 0, 0, 0, 0);\n }\n}\n/**\n * Blake2s hash function. Focuses on 8-bit to 32-bit platforms. 1.5x faster than blake2b in JS.\n * @param msg - message that would be hashed\n * @param opts - dkLen output length, key for MAC mode, salt, personalization\n */\nexport const blake2s = /* @__PURE__ */ createOptHasher((opts) => new BLAKE2s(opts));\n//# sourceMappingURL=blake2.js.map","/**\n * Blake3 fast hash is Blake2 with reduced security (round count). Can also be used as MAC & KDF.\n *\n * It is advertised as \"the fastest cryptographic hash\". However, it isn't true in JS.\n * Why is this so slow? While it should be 6x faster than blake2b, perf diff is only 20%:\n *\n * * There is only 30% reduction in number of rounds from blake2s\n * * Speed-up comes from tree structure, which is parallelized using SIMD & threading.\n * These features are not present in JS, so we only get overhead from trees.\n * * Parallelization only happens on 1024-byte chunks: there is no benefit for small inputs.\n * * It is still possible to make it faster using: a) loop unrolling b) web workers c) wasm\n * @module\n */\nimport { SHA256_IV } from \"./_md.js\";\nimport { fromBig } from \"./_u64.js\";\nimport { BLAKE2, compress } from \"./blake2.js\";\n// prettier-ignore\nimport { abytes, aexists, anumber, aoutput, clean, createXOFer, swap32IfBE, toBytes, u32, u8 } from \"./utils.js\";\n// Flag bitset\nconst B3_Flags = {\n CHUNK_START: 0b1,\n CHUNK_END: 0b10,\n PARENT: 0b100,\n ROOT: 0b1000,\n KEYED_HASH: 0b10000,\n DERIVE_KEY_CONTEXT: 0b100000,\n DERIVE_KEY_MATERIAL: 0b1000000,\n};\nconst B3_IV = SHA256_IV.slice();\nconst B3_SIGMA = /* @__PURE__ */ (() => {\n const Id = Array.from({ length: 16 }, (_, i) => i);\n const permute = (arr) => [2, 6, 3, 10, 7, 0, 4, 13, 1, 11, 12, 5, 9, 14, 15, 8].map((i) => arr[i]);\n const res = [];\n for (let i = 0, v = Id; i < 7; i++, v = permute(v))\n res.push(...v);\n return Uint8Array.from(res);\n})();\n/** Blake3 hash. Can be used as MAC and KDF. */\nexport class BLAKE3 extends BLAKE2 {\n constructor(opts = {}, flags = 0) {\n super(64, opts.dkLen === undefined ? 32 : opts.dkLen);\n this.chunkPos = 0; // Position of current block in chunk\n this.chunksDone = 0; // How many chunks we already have\n this.flags = 0 | 0;\n this.stack = [];\n // Output\n this.posOut = 0;\n this.bufferOut32 = new Uint32Array(16);\n this.chunkOut = 0; // index of output chunk\n this.enableXOF = true;\n const { key, context } = opts;\n const hasContext = context !== undefined;\n if (key !== undefined) {\n if (hasContext)\n throw new Error('Only \"key\" or \"context\" can be specified at same time');\n const k = toBytes(key).slice();\n abytes(k, 32);\n this.IV = u32(k);\n swap32IfBE(this.IV);\n this.flags = flags | B3_Flags.KEYED_HASH;\n }\n else if (hasContext) {\n const ctx = toBytes(context);\n const contextKey = new BLAKE3({ dkLen: 32 }, B3_Flags.DERIVE_KEY_CONTEXT)\n .update(ctx)\n .digest();\n this.IV = u32(contextKey);\n swap32IfBE(this.IV);\n this.flags = flags | B3_Flags.DERIVE_KEY_MATERIAL;\n }\n else {\n this.IV = B3_IV.slice();\n this.flags = flags;\n }\n this.state = this.IV.slice();\n this.bufferOut = u8(this.bufferOut32);\n }\n // Unused\n get() {\n return [];\n }\n set() { }\n b2Compress(counter, flags, buf, bufPos = 0) {\n const { state: s, pos } = this;\n const { h, l } = fromBig(BigInt(counter), true);\n // prettier-ignore\n const { v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15 } = compress(B3_SIGMA, bufPos, buf, 7, s[0], s[1], s[2], s[3], s[4], s[5], s[6], s[7], B3_IV[0], B3_IV[1], B3_IV[2], B3_IV[3], h, l, pos, flags);\n s[0] = v0 ^ v8;\n s[1] = v1 ^ v9;\n s[2] = v2 ^ v10;\n s[3] = v3 ^ v11;\n s[4] = v4 ^ v12;\n s[5] = v5 ^ v13;\n s[6] = v6 ^ v14;\n s[7] = v7 ^ v15;\n }\n compress(buf, bufPos = 0, isLast = false) {\n // Compress last block\n let flags = this.flags;\n if (!this.chunkPos)\n flags |= B3_Flags.CHUNK_START;\n if (this.chunkPos === 15 || isLast)\n flags |= B3_Flags.CHUNK_END;\n if (!isLast)\n this.pos = this.blockLen;\n this.b2Compress(this.chunksDone, flags, buf, bufPos);\n this.chunkPos += 1;\n // If current block is last in chunk (16 blocks), then compress chunks\n if (this.chunkPos === 16 || isLast) {\n let chunk = this.state;\n this.state = this.IV.slice();\n // If not the last one, compress only when there are trailing zeros in chunk counter\n // chunks used as binary tree where current stack is path. Zero means current leaf is finished and can be compressed.\n // 1 (001) - leaf not finished (just push current chunk to stack)\n // 2 (010) - leaf finished at depth=1 (merge with last elm on stack and push back)\n // 3 (011) - last leaf not finished\n // 4 (100) - leafs finished at depth=1 and depth=2\n for (let last, chunks = this.chunksDone + 1; isLast || !(chunks & 1); chunks >>= 1) {\n if (!(last = this.stack.pop()))\n break;\n this.buffer32.set(last, 0);\n this.buffer32.set(chunk, 8);\n this.pos = this.blockLen;\n this.b2Compress(0, this.flags | B3_Flags.PARENT, this.buffer32, 0);\n chunk = this.state;\n this.state = this.IV.slice();\n }\n this.chunksDone++;\n this.chunkPos = 0;\n this.stack.push(chunk);\n }\n this.pos = 0;\n }\n _cloneInto(to) {\n to = super._cloneInto(to);\n const { IV, flags, state, chunkPos, posOut, chunkOut, stack, chunksDone } = this;\n to.state.set(state.slice());\n to.stack = stack.map((i) => Uint32Array.from(i));\n to.IV.set(IV);\n to.flags = flags;\n to.chunkPos = chunkPos;\n to.chunksDone = chunksDone;\n to.posOut = posOut;\n to.chunkOut = chunkOut;\n to.enableXOF = this.enableXOF;\n to.bufferOut32.set(this.bufferOut32);\n return to;\n }\n destroy() {\n this.destroyed = true;\n clean(this.state, this.buffer32, this.IV, this.bufferOut32);\n clean(...this.stack);\n }\n // Same as b2Compress, but doesn't modify state and returns 16 u32 array (instead of 8)\n b2CompressOut() {\n const { state: s, pos, flags, buffer32, bufferOut32: out32 } = this;\n const { h, l } = fromBig(BigInt(this.chunkOut++));\n swap32IfBE(buffer32);\n // prettier-ignore\n const { v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15 } = compress(B3_SIGMA, 0, buffer32, 7, s[0], s[1], s[2], s[3], s[4], s[5], s[6], s[7], B3_IV[0], B3_IV[1], B3_IV[2], B3_IV[3], l, h, pos, flags);\n out32[0] = v0 ^ v8;\n out32[1] = v1 ^ v9;\n out32[2] = v2 ^ v10;\n out32[3] = v3 ^ v11;\n out32[4] = v4 ^ v12;\n out32[5] = v5 ^ v13;\n out32[6] = v6 ^ v14;\n out32[7] = v7 ^ v15;\n out32[8] = s[0] ^ v8;\n out32[9] = s[1] ^ v9;\n out32[10] = s[2] ^ v10;\n out32[11] = s[3] ^ v11;\n out32[12] = s[4] ^ v12;\n out32[13] = s[5] ^ v13;\n out32[14] = s[6] ^ v14;\n out32[15] = s[7] ^ v15;\n swap32IfBE(buffer32);\n swap32IfBE(out32);\n this.posOut = 0;\n }\n finish() {\n if (this.finished)\n return;\n this.finished = true;\n // Padding\n clean(this.buffer.subarray(this.pos));\n // Process last chunk\n let flags = this.flags | B3_Flags.ROOT;\n if (this.stack.length) {\n flags |= B3_Flags.PARENT;\n swap32IfBE(this.buffer32);\n this.compress(this.buffer32, 0, true);\n swap32IfBE(this.buffer32);\n this.chunksDone = 0;\n this.pos = this.blockLen;\n }\n else {\n flags |= (!this.chunkPos ? B3_Flags.CHUNK_START : 0) | B3_Flags.CHUNK_END;\n }\n this.flags = flags;\n this.b2CompressOut();\n }\n writeInto(out) {\n aexists(this, false);\n abytes(out);\n this.finish();\n const { blockLen, bufferOut } = this;\n for (let pos = 0, len = out.length; pos < len;) {\n if (this.posOut >= blockLen)\n this.b2CompressOut();\n const take = Math.min(blockLen - this.posOut, len - pos);\n out.set(bufferOut.subarray(this.posOut, this.posOut + take), pos);\n this.posOut += take;\n pos += take;\n }\n return out;\n }\n xofInto(out) {\n if (!this.enableXOF)\n throw new Error('XOF is not possible after digest call');\n return this.writeInto(out);\n }\n xof(bytes) {\n anumber(bytes);\n return this.xofInto(new Uint8Array(bytes));\n }\n digestInto(out) {\n aoutput(out, this);\n if (this.finished)\n throw new Error('digest() was already called');\n this.enableXOF = false;\n this.writeInto(out);\n this.destroy();\n return out;\n }\n digest() {\n return this.digestInto(new Uint8Array(this.outputLen));\n }\n}\n/**\n * BLAKE3 hash function. Can be used as MAC and KDF.\n * @param msg - message that would be hashed\n * @param opts - `dkLen` for output length, `key` for MAC mode, `context` for KDF mode\n * @example\n * const data = new Uint8Array(32);\n * const hash = blake3(data);\n * const mac = blake3(data, { key: new Uint8Array(32) });\n * const kdf = blake3(data, { context: 'application name' });\n */\nexport const blake3 = /* @__PURE__ */ createXOFer((opts) => new BLAKE3(opts));\n//# sourceMappingURL=blake3.js.map","/**\r\n * @svrnsec/pulse — Hardware Fingerprint & Proof Builder\r\n *\r\n * Assembles all collected signals into a canonical ProofPayload, then\r\n * produces a BLAKE3 commitment: BLAKE3(canonicalJSON(payload)).\r\n *\r\n * The commitment is what gets sent to the server. The server recomputes\r\n * the hash from the payload to detect tampering. Raw timing arrays and\r\n * pixel buffers are NOT included — only statistical summaries.\r\n *\r\n * Zero-Knowledge property: the server learns only that the device passes\r\n * statistical thresholds. It never sees raw hardware telemetry.\r\n */\r\n\r\nimport { blake3 } from '@noble/hashes/blake3';\r\nimport { bytesToHex } from '@noble/hashes/utils';\r\n\r\n// ---------------------------------------------------------------------------\r\n// BLAKE3 helpers (re-exported for use by canvas.js etc.)\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Compute BLAKE3 of a Uint8Array and return hex string.\r\n * @param {Uint8Array} data\r\n * @returns {string}\r\n */\r\nexport function blake3Hex(data) {\r\n return bytesToHex(blake3(data));\r\n}\r\n\r\n/**\r\n * Compute BLAKE3 of a UTF-8 string and return hex string.\r\n * @param {string} str\r\n * @returns {string}\r\n */\r\nexport function blake3HexStr(str) {\r\n return blake3Hex(new TextEncoder().encode(str));\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// buildProof\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Assembles a ProofPayload from all collected signals.\r\n * This is the canonical structure that gets hashed into the commitment.\r\n *\r\n * @param {object} p\r\n * @param {import('../collector/entropy.js').EntropyResult} p.entropy\r\n * @param {import('../analysis/jitter.js').JitterAnalysis} p.jitter\r\n * @param {import('../collector/bio.js').BioSnapshot} p.bio\r\n * @param {import('../collector/canvas.js').CanvasFingerprint} p.canvas\r\n * @param {import('../analysis/audio.js').AudioJitter} p.audio\r\n * @param {string} p.nonce – server-issued challenge nonce (hex)\r\n * @returns {ProofPayload}\r\n */\r\nexport function buildProof({ entropy, jitter, bio, canvas, audio, enf, gpu, dram, llm, nonce }) {\r\n if (!nonce || typeof nonce !== 'string') {\r\n throw new Error('@svrnsec/pulse: nonce is required for anti-replay protection');\r\n }\r\n\r\n // Hash the raw timing arrays IN-BROWSER so we can prove their integrity\r\n // without transmitting the raw data.\r\n const timingsHash = blake3HexStr(JSON.stringify(entropy.timings));\r\n const memHash = blake3HexStr(JSON.stringify(entropy.memTimings));\r\n\r\n const payload = {\r\n version: 1,\r\n timestamp: entropy.collectedAt,\r\n nonce,\r\n\r\n signals: {\r\n // ── Entropy probe ───────────────────────────────────────────────────\r\n entropy: {\r\n timingsMean: _round(jitter.stats?.mean, 4),\r\n timingsCV: _round(jitter.stats?.cv, 4),\r\n timingsP50: _round(jitter.stats?.p50, 4),\r\n timingsP95: _round(jitter.stats?.p95, 4),\r\n timingsSkewness: _round(jitter.stats?.skewness, 4),\r\n timingsKurtosis: _round(jitter.stats?.kurtosis, 4),\r\n autocorr_lag1: _round(jitter.autocorrelations?.lag1, 4),\r\n autocorr_lag2: _round(jitter.autocorrelations?.lag2, 4),\r\n autocorr_lag5: _round(jitter.autocorrelations?.lag5, 4),\r\n autocorr_lag10: _round(jitter.autocorrelations?.lag10, 4),\r\n hurstExponent: _round(jitter.hurstExponent, 4),\r\n quantizationEntropy: _round(jitter.quantizationEntropy, 4),\r\n thermalDrift: _round(jitter.thermalSignature?.slope, 8),\r\n thermalPattern: jitter.thermalSignature?.pattern ?? 'unknown',\r\n outlierRate: _round(jitter.outlierRate, 4),\r\n timerGranularityMs: _round(entropy.timerGranularityMs, 6),\r\n checksum: entropy.checksum, // proves computation ran\r\n timingsHash, // proves timing array integrity\r\n memTimingsHash: memHash,\r\n iterations: entropy.iterations,\r\n matrixSize: entropy.matrixSize,\r\n },\r\n\r\n // ── Bio signals ─────────────────────────────────────────────────────\r\n bio: {\r\n mouseSampleCount: bio.mouse.sampleCount,\r\n mouseIEIMean: _round(bio.mouse.ieiMean, 3),\r\n mouseIEICV: _round(bio.mouse.ieiCV, 4),\r\n mouseVelocityP50: _round(bio.mouse.velocityP50, 3),\r\n mouseVelocityP95: _round(bio.mouse.velocityP95, 3),\r\n mouseAngularJerkMean: _round(bio.mouse.angularJerkMean, 4),\r\n pressureVariance: _round(bio.mouse.pressureVariance, 6),\r\n keyboardSampleCount: bio.keyboard.sampleCount,\r\n keyboardDwellMean: _round(bio.keyboard.dwellMean, 3),\r\n keyboardDwellCV: _round(bio.keyboard.dwellCV, 4),\r\n keyboardIKIMean: _round(bio.keyboard.ikiMean, 3),\r\n keyboardIKICV: _round(bio.keyboard.ikiCV, 4),\r\n interferenceCoefficient: _round(bio.interferenceCoefficient, 4),\r\n hasActivity: bio.hasActivity,\r\n durationMs: _round(bio.durationMs, 1),\r\n },\r\n\r\n // ── Canvas fingerprint ───────────────────────────────────────────────\r\n canvas: {\r\n webglRenderer: canvas.webglRenderer,\r\n webglVendor: canvas.webglVendor,\r\n webglVersion: canvas.webglVersion,\r\n webglPixelHash: canvas.webglPixelHash,\r\n canvas2dHash: canvas.canvas2dHash,\r\n extensionCount: canvas.extensionCount,\r\n isSoftwareRenderer: canvas.isSoftwareRenderer,\r\n available: canvas.available,\r\n },\r\n\r\n // ── Audio jitter ─────────────────────────────────────────────────────\r\n audio: {\r\n available: audio.available,\r\n workletAvailable: audio.workletAvailable,\r\n callbackJitterCV: _round(audio.callbackJitterCV, 4),\r\n noiseFloorMean: _round(audio.noiseFloorMean, 6),\r\n noiseFloorStd: _round(audio.noiseFloorStd, 6),\r\n sampleRate: audio.sampleRate,\r\n callbackCount: audio.callbackCount,\r\n jitterMeanMs: _round(audio.jitterMeanMs, 4),\r\n jitterP95Ms: _round(audio.jitterP95Ms, 4),\r\n },\r\n\r\n // ── Electrical Network Frequency ─────────────────────────────────────\r\n enf: enf ? {\r\n available: enf.enfAvailable,\r\n ripplePresent: enf.ripplePresent,\r\n gridFrequency: enf.gridFrequency,\r\n gridRegion: enf.gridRegion,\r\n ripplePower: _round(enf.ripplePower, 4),\r\n enfDeviation: _round(enf.enfDeviation, 3),\r\n snr50hz: _round(enf.snr50hz, 2),\r\n snr60hz: _round(enf.snr60hz, 2),\r\n sampleRateHz: _round(enf.sampleRateHz, 1),\r\n verdict: enf.verdict,\r\n isVmIndicator: enf.isVmIndicator,\r\n capturedAt: enf.temporalAnchor?.capturedAt ?? null,\r\n } : null,\r\n\r\n // ── WebGPU thermal variance ───────────────────────────────────────────\r\n gpu: gpu ? {\r\n available: gpu.gpuPresent,\r\n isSoftware: gpu.isSoftware,\r\n vendorString: gpu.vendorString,\r\n dispatchCV: _round(gpu.dispatchCV, 4),\r\n thermalGrowth: _round(gpu.thermalGrowth, 4),\r\n verdict: gpu.verdict,\r\n } : null,\r\n\r\n // ── DRAM refresh cycle ────────────────────────────────────────────────\r\n dram: dram ? {\r\n refreshPresent: dram.refreshPresent,\r\n refreshPeriodMs: _round(dram.refreshPeriodMs, 2),\r\n peakPower: _round(dram.peakPower, 4),\r\n verdict: dram.verdict,\r\n } : null,\r\n\r\n // ── LLM / AI agent behavioral fingerprint ────────────────────────────\r\n llm: llm ? {\r\n aiConf: _round(llm.aiConf, 3),\r\n thinkTimePattern: llm.thinkTimePattern,\r\n correctionRate: _round(llm.correctionRate, 3),\r\n rhythmicity: _round(llm.rhythmicity, 3),\r\n pauseDistribution: llm.pauseDistribution,\r\n verdict: llm.verdict,\r\n matchedModel: llm.matchedModel ?? null,\r\n } : null,\r\n },\r\n\r\n // Top-level classification summary — all signal layers combined\r\n classification: {\r\n jitterScore: _round(jitter.score, 4),\r\n flags: jitter.flags ?? [],\r\n enfVerdict: enf?.verdict ?? 'unavailable',\r\n gpuVerdict: gpu?.verdict ?? 'unavailable',\r\n dramVerdict: dram?.verdict ?? 'unavailable',\r\n llmVerdict: llm?.verdict ?? 'unavailable',\r\n // Combined VM confidence: any hard signal raises this\r\n vmIndicators: [\r\n enf?.isVmIndicator ? 'enf_no_grid' : null,\r\n gpu?.isSoftware ? 'gpu_software' : null,\r\n dram?.verdict === 'virtual' ? 'dram_no_refresh' : null,\r\n llm?.aiConf > 0.7 ? 'llm_agent' : null,\r\n ].filter(Boolean),\r\n },\r\n };\r\n\r\n return payload;\r\n}\r\n\r\n/**\r\n * @typedef {object} ProofPayload\r\n * @property {number} version\r\n * @property {number} timestamp\r\n * @property {string} nonce\r\n * @property {object} signals\r\n * @property {object} classification\r\n */\r\n\r\n// ---------------------------------------------------------------------------\r\n// buildCommitment\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Hashes a ProofPayload into a BLAKE3 commitment.\r\n * Uses a deterministic canonical JSON serialiser (sorted keys) to ensure\r\n * byte-identical output across JS engines.\r\n *\r\n * @param {ProofPayload} payload\r\n * @returns {{ payload: ProofPayload, hash: string }}\r\n */\r\nexport function buildCommitment(payload) {\r\n const canonical = canonicalJson(payload);\r\n const hash = blake3HexStr(canonical);\r\n return { payload, hash };\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// canonicalJson\r\n//\r\n// JSON.stringify with sorted keys — ensures the hash is engine-independent.\r\n// Numbers are serialised with fixed precision to avoid cross-platform float\r\n// formatting differences.\r\n// ---------------------------------------------------------------------------\r\n\r\nexport function canonicalJson(obj) {\r\n return JSON.stringify(obj, _replacer, 0);\r\n}\r\n\r\nfunction _replacer(key, value) {\r\n // Sort object keys deterministically\r\n if (value !== null && typeof value === 'object' && !Array.isArray(value)) {\r\n const sorted = {};\r\n for (const k of Object.keys(value).sort()) {\r\n sorted[k] = value[k];\r\n }\r\n return sorted;\r\n }\r\n return value;\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Internal utilities\r\n// ---------------------------------------------------------------------------\r\n\r\nfunction _round(v, decimals) {\r\n if (v == null || !isFinite(v)) return null;\r\n const factor = 10 ** decimals;\r\n return Math.round(v * factor) / factor;\r\n}\r\n","/**\r\n * @svrnsec/pulse — GPU Canvas Fingerprint\r\n *\r\n * Collects device-class signals from WebGL and 2D Canvas rendering.\r\n * The exact pixel values of GPU-rendered scenes are vendor/driver-specific\r\n * due to floating-point rounding in shader execution. Virtual machines\r\n * expose software renderers (LLVMpipe, SwiftShader, Microsoft Basic Render\r\n * Driver) whose strings and output pixels are well-known and enumerable.\r\n *\r\n * NO persistent identifier is generated – only a content hash is retained.\r\n */\r\n\r\nimport { blake3Hex } from '../proof/fingerprint.js';\r\n\r\n// ---------------------------------------------------------------------------\r\n// Known software-renderer substrings (VM / headless environment indicators)\r\n// ---------------------------------------------------------------------------\r\nconst SOFTWARE_RENDERER_PATTERNS = [\r\n 'llvmpipe', 'swiftshader', 'softpipe', 'mesa offscreen',\r\n 'microsoft basic render', 'vmware svga', 'virtualbox',\r\n 'parallels', 'google swiftshader',\r\n // Note: 'angle (' is intentionally excluded — Chrome on Windows uses ANGLE\r\n // for all real hardware GPUs. Software ANGLE is handled by regex in gpu.js.\r\n];\r\n\r\n// ---------------------------------------------------------------------------\r\n// collectCanvasFingerprint\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * @returns {Promise<CanvasFingerprint>}\r\n */\r\nexport async function collectCanvasFingerprint() {\r\n const result = {\r\n webglRenderer: null,\r\n webglVendor: null,\r\n webglVersion: null,\r\n webglPixelHash: null,\r\n canvas2dHash: null,\r\n extensionCount: 0,\r\n extensions: [],\r\n isSoftwareRenderer: false,\r\n available: false,\r\n };\r\n\r\n if (typeof document === 'undefined' && typeof OffscreenCanvas === 'undefined') {\r\n // Node.js / server-side with no DOM – skip gracefully.\r\n return result;\r\n }\r\n\r\n // ── WebGL fingerprint ────────────────────────────────────────────────────\r\n try {\r\n const canvas = _createCanvas(512, 512);\r\n let gl = canvas.getContext('webgl2') || canvas.getContext('webgl');\r\n\r\n if (gl) {\r\n result.webglVersion = gl instanceof WebGL2RenderingContext ? 2 : 1;\r\n result.available = true;\r\n\r\n // Renderer info\r\n const dbgInfo = gl.getExtension('WEBGL_debug_renderer_info');\r\n if (dbgInfo) {\r\n result.webglRenderer = gl.getParameter(dbgInfo.UNMASKED_RENDERER_WEBGL);\r\n result.webglVendor = gl.getParameter(dbgInfo.UNMASKED_VENDOR_WEBGL);\r\n }\r\n\r\n // Extension list (fingerprints driver capabilities)\r\n const exts = gl.getSupportedExtensions() ?? [];\r\n result.extensions = exts;\r\n result.extensionCount = exts.length;\r\n\r\n // Software-renderer detection\r\n const rendererLc = (result.webglRenderer ?? '').toLowerCase();\r\n result.isSoftwareRenderer = SOFTWARE_RENDERER_PATTERNS.some(p =>\r\n rendererLc.includes(p)\r\n );\r\n\r\n // ── Render a Mandelbrot fragment scene ───────────────────────────────\r\n // Floating-point precision differences in the GPU's shader ALU cause\r\n // per-pixel rounding variations that are stable per device but differ\r\n // across GPU vendors, driver versions, and software renderers.\r\n const pixels = _renderMandelbrot(gl, canvas);\r\n result.webglPixelHash = pixels ? blake3Hex(pixels) : null;\r\n\r\n gl.getExtension('WEBGL_lose_context')?.loseContext();\r\n }\r\n } catch (_) {\r\n // WebGL blocked (privacy settings, etc.) – continue with 2D canvas.\r\n }\r\n\r\n // ── 2D Canvas fingerprint ────────────────────────────────────────────────\r\n try {\r\n const c2 = _createCanvas(200, 50);\r\n const ctx2 = c2.getContext('2d');\r\n\r\n if (ctx2) {\r\n // Text rendering differences: font hinting, subpixel AA, emoji rasterisation\r\n ctx2.textBaseline = 'top';\r\n ctx2.font = '14px Arial, sans-serif';\r\n ctx2.fillStyle = 'rgba(102,204,0,0.7)';\r\n ctx2.fillText('Cwm fjordbank glyphs vext quiz 🎯', 2, 5);\r\n\r\n // Shadow compositing (driver-specific blur kernel)\r\n ctx2.shadowBlur = 10;\r\n ctx2.shadowColor = 'blue';\r\n ctx2.fillStyle = 'rgba(255,0,255,0.5)';\r\n ctx2.fillRect(100, 25, 80, 20);\r\n\r\n // Bezier curve (Bézier precision varies per 2D canvas implementation)\r\n ctx2.beginPath();\r\n ctx2.moveTo(10, 40);\r\n ctx2.bezierCurveTo(30, 0, 70, 80, 160, 30);\r\n ctx2.strokeStyle = 'rgba(0,0,255,0.8)';\r\n ctx2.lineWidth = 1.5;\r\n ctx2.stroke();\r\n\r\n const dataUrl = c2.toDataURL('image/png');\r\n // Hash the data URL (not storing raw image data)\r\n const enc = new TextEncoder().encode(dataUrl);\r\n result.canvas2dHash = blake3Hex(enc);\r\n\r\n result.available = true;\r\n }\r\n } catch (_) {\r\n // 2D canvas blocked.\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * @typedef {object} CanvasFingerprint\r\n * @property {string|null} webglRenderer\r\n * @property {string|null} webglVendor\r\n * @property {1|2|null} webglVersion\r\n * @property {string|null} webglPixelHash\r\n * @property {string|null} canvas2dHash\r\n * @property {number} extensionCount\r\n * @property {string[]} extensions\r\n * @property {boolean} isSoftwareRenderer\r\n * @property {boolean} available\r\n */\r\n\r\n// ---------------------------------------------------------------------------\r\n// Internal helpers\r\n// ---------------------------------------------------------------------------\r\n\r\nfunction _createCanvas(w, h) {\r\n if (typeof OffscreenCanvas !== 'undefined') {\r\n return new OffscreenCanvas(w, h);\r\n }\r\n const c = document.createElement('canvas');\r\n c.width = w;\r\n c.height = h;\r\n return c;\r\n}\r\n\r\n/**\r\n * Render a Mandelbrot set fragment using WebGL and read back pixels.\r\n * The number of iterations is fixed (100) so that rounding differences in\r\n * the smooth-colouring formula are the primary source of per-GPU variation.\r\n *\r\n * @param {WebGLRenderingContext} gl\r\n * @param {HTMLCanvasElement|OffscreenCanvas} canvas\r\n * @returns {Uint8Array|null}\r\n */\r\nfunction _renderMandelbrot(gl, canvas) {\r\n const W = canvas.width;\r\n const H = canvas.height;\r\n\r\n // Vertex shader – full-screen quad\r\n const vsSource = `\r\n attribute vec4 a_pos;\r\n void main() { gl_Position = a_pos; }\r\n `;\r\n\r\n // Fragment shader – Mandelbrot with smooth colouring\r\n // Floating-point precision in the escape-radius and log() calls differs\r\n // between GPU vendors / drivers, producing per-device pixel signatures.\r\n const fsSource = `\r\n precision highp float;\r\n uniform vec2 u_res;\r\n void main() {\r\n vec2 uv = (gl_FragCoord.xy / u_res - 0.5) * 3.5;\r\n uv.x -= 0.5;\r\n vec2 c = uv;\r\n vec2 z = vec2(0.0);\r\n float n = 0.0;\r\n for (int i = 0; i < 100; i++) {\r\n if (dot(z, z) > 4.0) break;\r\n z = vec2(z.x*z.x - z.y*z.y, 2.0*z.x*z.y) + c;\r\n n += 1.0;\r\n }\r\n float smooth_n = n - log2(log2(dot(z,z))) + 4.0;\r\n float t = smooth_n / 100.0;\r\n gl_FragColor = vec4(0.5 + 0.5*cos(6.28318*t + vec3(0.0, 0.4, 0.7)), 1.0);\r\n }\r\n `;\r\n\r\n const vs = _compileShader(gl, gl.VERTEX_SHADER, vsSource);\r\n const fs = _compileShader(gl, gl.FRAGMENT_SHADER, fsSource);\r\n if (!vs || !fs) return null;\r\n\r\n const prog = gl.createProgram();\r\n gl.attachShader(prog, vs);\r\n gl.attachShader(prog, fs);\r\n gl.linkProgram(prog);\r\n if (!gl.getProgramParameter(prog, gl.LINK_STATUS)) return null;\r\n\r\n gl.useProgram(prog);\r\n\r\n // Full-screen quad\r\n const buf = gl.createBuffer();\r\n gl.bindBuffer(gl.ARRAY_BUFFER, buf);\r\n gl.bufferData(gl.ARRAY_BUFFER,\r\n new Float32Array([-1,-1, 1,-1, -1,1, 1,1]), gl.STATIC_DRAW);\r\n const loc = gl.getAttribLocation(prog, 'a_pos');\r\n gl.enableVertexAttribArray(loc);\r\n gl.vertexAttribPointer(loc, 2, gl.FLOAT, false, 0, 0);\r\n\r\n const resLoc = gl.getUniformLocation(prog, 'u_res');\r\n gl.uniform2f(resLoc, W, H);\r\n\r\n gl.viewport(0, 0, W, H);\r\n gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\r\n\r\n // Read back a 64×64 centre crop (reduces data without losing discriminating power)\r\n const x0 = Math.floor((W - 64) / 2);\r\n const y0 = Math.floor((H - 64) / 2);\r\n const pixels = new Uint8Array(64 * 64 * 4);\r\n gl.readPixels(x0, y0, 64, 64, gl.RGBA, gl.UNSIGNED_BYTE, pixels);\r\n\r\n // Cleanup GPU resources\r\n gl.deleteBuffer(buf);\r\n gl.deleteProgram(prog);\r\n gl.deleteShader(vs);\r\n gl.deleteShader(fs);\r\n\r\n return pixels;\r\n}\r\n\r\nfunction _compileShader(gl, type, source) {\r\n const s = gl.createShader(type);\r\n gl.shaderSource(s, source);\r\n gl.compileShader(s);\r\n return gl.getShaderParameter(s, gl.COMPILE_STATUS) ? s : null;\r\n}\r\n","/**\r\n * @svrnsec/pulse — AudioContext Oscillator Jitter\r\n *\r\n * Measures the scheduling jitter of the browser's audio pipeline.\r\n * Real audio hardware callbacks are driven by a hardware interrupt (IRQ)\r\n * from the sound card; the timing reflects the actual interrupt latency\r\n * of the physical device. VM audio drivers (if present at all) are\r\n * emulated and show either unrealistically low jitter or burst-mode\r\n * scheduling artefacts that are statistically distinguishable.\r\n */\r\n\r\n/**\r\n * @param {object} [opts]\r\n * @param {number} [opts.durationMs=2000] - how long to collect audio callbacks\r\n * @param {number} [opts.bufferSize=256] - ScriptProcessorNode buffer size\r\n * @returns {Promise<AudioJitter>}\r\n */\r\nexport async function collectAudioJitter(opts = {}) {\r\n const { durationMs = 2000, bufferSize = 256 } = opts;\r\n\r\n const base = {\r\n available: false,\r\n workletAvailable: false,\r\n callbackJitterCV: 0,\r\n noiseFloorMean: 0,\r\n sampleRate: 0,\r\n callbackCount: 0,\r\n jitterTimings: [],\r\n };\r\n\r\n if (typeof AudioContext === 'undefined' && typeof webkitAudioContext === 'undefined') {\r\n return base; // Node.js / server environment\r\n }\r\n\r\n let ctx;\r\n try {\r\n ctx = new (window.AudioContext || window.webkitAudioContext)();\r\n } catch (_) {\r\n return base;\r\n }\r\n\r\n // Some browsers require a user gesture before AudioContext can run.\r\n if (ctx.state === 'suspended') {\r\n try {\r\n await ctx.resume();\r\n } catch (_) {\r\n await ctx.close().catch(() => {});\r\n return base;\r\n }\r\n }\r\n\r\n const sampleRate = ctx.sampleRate;\r\n const expectedInterval = (bufferSize / sampleRate) * 1000; // ms per callback\r\n\r\n const jitterTimings = []; // absolute AudioContext.currentTime at each callback\r\n const callbackDeltas = [];\r\n\r\n const result = await new Promise((resolve) => {\r\n // ── AudioWorklet (preferred — runs on dedicated real-time thread) ──────\r\n const useWorklet = typeof AudioWorkletNode !== 'undefined';\r\n base.workletAvailable = useWorklet;\r\n\r\n if (useWorklet) {\r\n // Inline worklet: send currentTime back via MessagePort every buffer\r\n const workletCode = `\r\n class PulseProbe extends AudioWorkletProcessor {\r\n process(inputs, outputs) {\r\n this.port.postMessage({ t: currentTime });\r\n // Pass-through silence\r\n for (const out of outputs)\r\n for (const ch of out) ch.fill(0);\r\n return true;\r\n }\r\n }\r\n registerProcessor('pulse-probe', PulseProbe);\r\n `;\r\n const blob = new Blob([workletCode], { type: 'application/javascript' });\r\n const blobUrl = URL.createObjectURL(blob);\r\n\r\n ctx.audioWorklet.addModule(blobUrl).then(() => {\r\n const node = new AudioWorkletNode(ctx, 'pulse-probe');\r\n node.port.onmessage = (e) => {\r\n jitterTimings.push(e.data.t * 1000); // convert to ms\r\n };\r\n node.connect(ctx.destination);\r\n\r\n setTimeout(async () => {\r\n node.disconnect();\r\n URL.revokeObjectURL(blobUrl);\r\n resolve(node);\r\n }, durationMs);\r\n }).catch(() => {\r\n URL.revokeObjectURL(blobUrl);\r\n _fallbackScriptProcessor(ctx, bufferSize, durationMs, jitterTimings, resolve);\r\n });\r\n\r\n } else {\r\n _fallbackScriptProcessor(ctx, bufferSize, durationMs, jitterTimings, resolve);\r\n }\r\n });\r\n\r\n // ── Compute deltas between successive callback times ────────────────────\r\n for (let i = 1; i < jitterTimings.length; i++) {\r\n callbackDeltas.push(jitterTimings[i] - jitterTimings[i - 1]);\r\n }\r\n\r\n // ── Noise floor via AnalyserNode ─────────────────────────────────────────\r\n // Feed a silent oscillator through an analyser; the FFT magnitude at silence\r\n // reveals the hardware's thermal noise floor (varies per ADC/DAC chipset).\r\n const noiseFloor = await _measureNoiseFloor(ctx);\r\n\r\n await ctx.close().catch(() => {});\r\n\r\n // ── Statistics ────────────────────────────────────────────────────────────\r\n const mean = callbackDeltas.length\r\n ? callbackDeltas.reduce((s, v) => s + v, 0) / callbackDeltas.length\r\n : 0;\r\n const variance = callbackDeltas.length > 1\r\n ? callbackDeltas.reduce((s, v) => s + (v - mean) ** 2, 0) / (callbackDeltas.length - 1)\r\n : 0;\r\n const jitterCV = mean > 0 ? Math.sqrt(variance) / mean : 0;\r\n\r\n return {\r\n available: true,\r\n workletAvailable: base.workletAvailable,\r\n callbackJitterCV: jitterCV,\r\n noiseFloorMean: noiseFloor.mean,\r\n noiseFloorStd: noiseFloor.std,\r\n sampleRate,\r\n callbackCount: jitterTimings.length,\r\n expectedIntervalMs: expectedInterval,\r\n // Only include summary stats, not raw timings (privacy / size)\r\n jitterMeanMs: mean,\r\n jitterP95Ms: _percentile(callbackDeltas, 95),\r\n };\r\n}\r\n\r\n/**\r\n * @typedef {object} AudioJitter\r\n * @property {boolean} available\r\n * @property {boolean} workletAvailable\r\n * @property {number} callbackJitterCV\r\n * @property {number} noiseFloorMean\r\n * @property {number} sampleRate\r\n * @property {number} callbackCount\r\n */\r\n\r\n// ---------------------------------------------------------------------------\r\n// Internal helpers\r\n// ---------------------------------------------------------------------------\r\n\r\nfunction _fallbackScriptProcessor(ctx, bufferSize, durationMs, jitterTimings, resolve) {\r\n // ScriptProcessorNode is deprecated but universally supported.\r\n const proc = ctx.createScriptProcessor(bufferSize, 1, 1);\r\n proc.onaudioprocess = () => {\r\n jitterTimings.push(ctx.currentTime * 1000);\r\n };\r\n // Connect to keep the graph alive\r\n const osc = ctx.createOscillator();\r\n osc.frequency.value = 1; // sub-audible\r\n osc.connect(proc);\r\n proc.connect(ctx.destination);\r\n osc.start();\r\n\r\n setTimeout(() => {\r\n osc.stop();\r\n osc.disconnect();\r\n proc.disconnect();\r\n resolve(proc);\r\n }, durationMs);\r\n}\r\n\r\nasync function _measureNoiseFloor(ctx) {\r\n try {\r\n const analyser = ctx.createAnalyser();\r\n analyser.fftSize = 256;\r\n analyser.connect(ctx.destination);\r\n\r\n // Silent source\r\n const buf = ctx.createBuffer(1, ctx.sampleRate * 0.1, ctx.sampleRate);\r\n const src = ctx.createBufferSource();\r\n src.buffer = buf;\r\n src.connect(analyser);\r\n src.start();\r\n\r\n await new Promise(r => setTimeout(r, 150));\r\n\r\n const data = new Float32Array(analyser.frequencyBinCount);\r\n analyser.getFloatFrequencyData(data);\r\n analyser.disconnect();\r\n\r\n // Limit to 32 bins to keep the payload small\r\n const trimmed = Array.from(data.slice(0, 32)).map(v =>\r\n isFinite(v) ? Math.pow(10, v / 20) : 0 // dB → linear\r\n );\r\n const mean = trimmed.reduce((s, v) => s + v, 0) / trimmed.length;\r\n const std = Math.sqrt(\r\n trimmed.reduce((s, v) => s + (v - mean) ** 2, 0) / trimmed.length\r\n );\r\n return { mean, std };\r\n } catch (_) {\r\n return { mean: 0, std: 0 };\r\n }\r\n}\r\n\r\nfunction _percentile(arr, p) {\r\n if (!arr.length) return 0;\r\n const sorted = [...arr].sort((a, b) => a - b);\r\n const idx = (p / 100) * (sorted.length - 1);\r\n const lo = Math.floor(idx);\r\n const hi = Math.ceil(idx);\r\n return sorted[lo] + (sorted[hi] - sorted[lo]) * (idx - lo);\r\n}\r\n","/**\r\n * @svrnsec/pulse — WebGPU Thermal Variance Probe\r\n *\r\n * Runs a compute shader on the GPU and measures dispatch timing variance.\r\n *\r\n * Why this works\r\n * ──────────────\r\n * Real consumer GPUs (GTX 1650, RX 6600, M2 GPU) have thermal noise in shader\r\n * execution timing that increases under sustained load — the same thermodynamic\r\n * principle as the CPU probe but in silicon designed for parallel throughput.\r\n *\r\n * Cloud VMs with software GPU emulation (SwiftShader, llvmpipe, Mesa's softpipe)\r\n * execute shaders on the CPU and produce near-deterministic timing — flat CV,\r\n * no thermal growth across phases, no dispatch jitter.\r\n *\r\n * VMs with GPU passthrough (rare in practice, requires dedicated hardware) pass\r\n * this check — which is correct, they have real GPU silicon.\r\n *\r\n * Signals\r\n * ───────\r\n * gpuPresent false = WebGPU absent = software renderer = high VM probability\r\n * isSoftware true = SwiftShader/llvmpipe detected by adapter info\r\n * dispatchCV coefficient of variation across dispatch timings\r\n * thermalGrowth (hotDispatchMean - coldDispatchMean) / coldDispatchMean\r\n * vendorString GPU vendor from adapter info (Intel, NVIDIA, AMD, Apple, etc.)\r\n */\r\n\r\n/* ─── WebGPU availability ────────────────────────────────────────────────── */\r\n\r\nfunction isWebGPUAvailable() {\r\n return typeof navigator !== 'undefined' && 'gpu' in navigator;\r\n}\r\n\r\n/* ─── Software renderer detection ───────────────────────────────────────── */\r\n\r\nconst SOFTWARE_RENDERER_PATTERNS = [\r\n /swiftshader/i,\r\n /llvmpipe/i,\r\n /softpipe/i,\r\n /microsoft basic render/i,\r\n /angle \\(.*software/i,\r\n /cpu/i,\r\n];\r\n\r\nfunction detectSoftwareRenderer(adapterInfo) {\r\n const desc = [\r\n adapterInfo?.vendor ?? '',\r\n adapterInfo?.device ?? '',\r\n adapterInfo?.description ?? '',\r\n adapterInfo?.architecture ?? '',\r\n ].join(' ');\r\n\r\n return SOFTWARE_RENDERER_PATTERNS.some(p => p.test(desc));\r\n}\r\n\r\n/* ─── Compute shader ─────────────────────────────────────────────────────── */\r\n\r\n// A compute workload that is trivially parallelisable but forces the GPU to\r\n// actually execute — matrix-multiply on 64 × 64 tiles across 256 workgroups.\r\n// Light enough that it doesn't block UI; heavy enough to generate thermal signal.\r\nconst SHADER_SRC = /* wgsl */ `\r\n struct Matrix {\r\n values: array<f32, 4096>, // 64x64\r\n };\r\n\r\n @group(0) @binding(0) var<storage, read> matA : Matrix;\r\n @group(0) @binding(1) var<storage, read> matB : Matrix;\r\n @group(0) @binding(2) var<storage, read_write> matC : Matrix;\r\n\r\n @compute @workgroup_size(8, 8)\r\n fn main(@builtin(global_invocation_id) gid: vec3<u32>) {\r\n let row = gid.x;\r\n let col = gid.y;\r\n if (row >= 64u || col >= 64u) { return; }\r\n\r\n var acc: f32 = 0.0;\r\n for (var k = 0u; k < 64u; k++) {\r\n acc += matA.values[row * 64u + k] * matB.values[k * 64u + col];\r\n }\r\n matC.values[row * 64u + col] = acc;\r\n }\r\n`;\r\n\r\n/* ─── collectGpuEntropy ─────────────────────────────────────────────────── */\r\n\r\n/**\r\n * @param {object} [opts]\r\n * @param {number} [opts.iterations=60] – dispatch rounds per phase\r\n * @param {boolean} [opts.phased=true] – cold / load / hot phases\r\n * @param {number} [opts.timeoutMs=8000] – hard abort if GPU stalls\r\n * @returns {Promise<GpuEntropyResult>}\r\n */\r\nexport async function collectGpuEntropy(opts = {}) {\r\n const { iterations = 60, phased = true, timeoutMs = 8000 } = opts;\r\n\r\n if (!isWebGPUAvailable()) {\r\n return _noGpu('WebGPU not available in this environment');\r\n }\r\n\r\n let adapter, device;\r\n try {\r\n adapter = await Promise.race([\r\n navigator.gpu.requestAdapter({ powerPreference: 'high-performance' }),\r\n _timeout(timeoutMs, 'requestAdapter timed out'),\r\n ]);\r\n if (!adapter) return _noGpu('No WebGPU adapter found');\r\n\r\n device = await Promise.race([\r\n adapter.requestDevice(),\r\n _timeout(timeoutMs, 'requestDevice timed out'),\r\n ]);\r\n } catch (err) {\r\n return _noGpu(`WebGPU init failed: ${err.message}`);\r\n }\r\n\r\n const adapterInfo = adapter.info ?? {};\r\n const isSoftware = detectSoftwareRenderer(adapterInfo);\r\n\r\n device.lost.then(info => console.warn('[pulse] GPU device lost:', info.message));\r\n\r\n // Compile the shader module once\r\n const shaderModule = device.createShaderModule({ code: SHADER_SRC });\r\n\r\n // Create persistent GPU buffers (64×64 float32 = 16 KB each)\r\n const bufSize = 4096 * 4; // 4096 floats × 4 bytes\r\n const bufA = _createBuffer(device, bufSize, GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST);\r\n const bufB = _createBuffer(device, bufSize, GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST);\r\n const bufC = _createBuffer(device, bufSize, GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC);\r\n\r\n try {\r\n // Seed with random data\r\n const matData = new Float32Array(4096).map(() => Math.random());\r\n device.queue.writeBuffer(bufA, 0, matData);\r\n device.queue.writeBuffer(bufB, 0, matData);\r\n\r\n const pipeline = device.createComputePipeline({\r\n layout: 'auto',\r\n compute: { module: shaderModule, entryPoint: 'main' },\r\n });\r\n\r\n const bindGroup = device.createBindGroup({\r\n layout: pipeline.getBindGroupLayout(0),\r\n entries: [\r\n { binding: 0, resource: { buffer: bufA } },\r\n { binding: 1, resource: { buffer: bufB } },\r\n { binding: 2, resource: { buffer: bufC } },\r\n ],\r\n });\r\n\r\n // ── Probe ──────────────────────────────────────────────────────────────\r\n async function runPhase(n) {\r\n const timings = [];\r\n for (let i = 0; i < n; i++) {\r\n const t0 = performance.now();\r\n const encoder = device.createCommandEncoder();\r\n const pass = encoder.beginComputePass();\r\n pass.setPipeline(pipeline);\r\n pass.setBindGroup(0, bindGroup);\r\n pass.dispatchWorkgroups(8, 8); // 64 workgroups total\r\n pass.end();\r\n device.queue.submit([encoder.finish()]);\r\n await device.queue.onSubmittedWorkDone();\r\n const t1 = performance.now();\r\n timings.push(t1 - t0);\r\n }\r\n return timings;\r\n }\r\n\r\n let coldTimings, loadTimings, hotTimings;\r\n\r\n if (phased) {\r\n coldTimings = await runPhase(Math.floor(iterations * 0.25));\r\n loadTimings = await runPhase(Math.floor(iterations * 0.50));\r\n hotTimings = await runPhase(iterations - coldTimings.length - loadTimings.length);\r\n } else {\r\n coldTimings = await runPhase(iterations);\r\n loadTimings = [];\r\n hotTimings = [];\r\n }\r\n\r\n const allTimings = [...coldTimings, ...loadTimings, ...hotTimings];\r\n const mean = _mean(allTimings);\r\n const cv = mean > 0 ? _std(allTimings) / mean : 0;\r\n\r\n const coldMean = _mean(coldTimings);\r\n const hotMean = _mean(hotTimings.length ? hotTimings : coldTimings);\r\n const thermalGrowth = coldMean > 0 ? (hotMean - coldMean) / coldMean : 0;\r\n\r\n return {\r\n gpuPresent: true,\r\n isSoftware,\r\n vendor: adapterInfo.vendor ?? 'unknown',\r\n architecture: adapterInfo.architecture ?? 'unknown',\r\n timings: allTimings,\r\n dispatchCV: cv,\r\n thermalGrowth,\r\n coldMean,\r\n hotMean,\r\n // Heuristic: real GPU → thermalGrowth > 0.02 and CV > 0.04\r\n // Software renderer → thermalGrowth ≈ 0, CV < 0.02\r\n verdict: isSoftware ? 'software_renderer'\r\n : thermalGrowth > 0.02 && cv > 0.04 ? 'real_gpu'\r\n : thermalGrowth < 0 && cv < 0.02 ? 'virtual_gpu'\r\n : 'ambiguous',\r\n };\r\n } finally {\r\n bufA.destroy(); bufB.destroy(); bufC.destroy();\r\n device.destroy();\r\n }\r\n}\r\n\r\n/* ─── helpers ────────────────────────────────────────────────────────────── */\r\n\r\nfunction _noGpu(reason) {\r\n return { gpuPresent: false, isSoftware: false, vendor: null,\r\n architecture: null, timings: [], dispatchCV: 0,\r\n thermalGrowth: 0, coldMean: 0, hotMean: 0,\r\n verdict: 'no_gpu', reason };\r\n}\r\n\r\nfunction _createBuffer(device, size, usage) {\r\n return device.createBuffer({ size, usage });\r\n}\r\n\r\nfunction _mean(arr) {\r\n return arr.length ? arr.reduce((s, v) => s + v, 0) / arr.length : 0;\r\n}\r\n\r\nfunction _std(arr) {\r\n const m = _mean(arr);\r\n return Math.sqrt(arr.reduce((s, v) => s + (v - m) ** 2, 0) / arr.length);\r\n}\r\n\r\nfunction _timeout(ms, msg) {\r\n return new Promise((_, reject) => setTimeout(() => reject(new Error(msg)), ms));\r\n}\r\n\r\n/**\r\n * @typedef {object} GpuEntropyResult\r\n * @property {boolean} gpuPresent\r\n * @property {boolean} isSoftware\r\n * @property {string|null} vendor\r\n * @property {string|null} architecture\r\n * @property {number[]} timings\r\n * @property {number} dispatchCV\r\n * @property {number} thermalGrowth\r\n * @property {string} verdict 'real_gpu' | 'virtual_gpu' | 'software_renderer' | 'no_gpu' | 'ambiguous'\r\n */\r\n","/**\r\n * @svrnsec/pulse — DRAM Refresh Cycle Detector\r\n *\r\n * DDR4 DRAM refreshes every 7.8 ms (tREFI per JEDEC JESD79-4). During a\r\n * refresh, the memory controller stalls all access requests for ~350 ns.\r\n * In a tight sequential memory access loop this appears as a periodic\r\n * slowdown — detectable as a ~128Hz peak in the autocorrelation of access\r\n * timings.\r\n *\r\n * Virtual machines do not have physical DRAM. The hypervisor's memory\r\n * subsystem does not reproduce the refresh cycle because:\r\n * 1. The guest never touches real DRAM directly — there is always a\r\n * hypervisor-controlled indirection layer.\r\n * 2. EPT/NPT (Extended/Nested Page Tables) absorb the timing.\r\n * 3. The hypervisor's memory balloon driver further smooths access latency.\r\n *\r\n * What we detect\r\n * ──────────────\r\n * refreshPeriodMs estimated DRAM refresh period (should be ~7.8ms on real DDR4)\r\n * refreshPresent true if the ~7.8ms periodicity is statistically significant\r\n * peakLag autocorrelation lag with the highest power (units: sample index)\r\n * peakPower autocorrelation power at peakLag (0–1)\r\n * verdict 'dram' | 'virtual' | 'ambiguous'\r\n *\r\n * Calibration\r\n * ───────────\r\n * We allocate a buffer large enough to exceed all CPU caches (typically\r\n * L3 = 8–32 MB on consumer parts). Sequential reads then go to DRAM, not\r\n * cache. The refresh stall is only visible when we're actually hitting DRAM —\r\n * a cache-resident access loop shows no refresh signal.\r\n *\r\n * Buffer size: 64 MB — comfortably above L3 on all tested platforms.\r\n * Sampling interval: ~1 ms per iteration (chosen to resolve 7.8ms at ≥8 pts).\r\n * Total probe time: ~400 ms — well within the fingerprint collection window.\r\n */\r\n\r\nconst DRAM_REFRESH_MS = 7.8; // JEDEC DDR4 nominal\r\nconst DRAM_REFRESH_SLACK = 1.5; // ±1.5 ms acceptable range for real hardware\r\nconst BUFFER_MB = 64; // must exceed L3 cache\r\nconst PROBE_ITERATIONS = 400; // ~400 ms total\r\n\r\n/* ─── collectDramTimings ─────────────────────────────────────────────────── */\r\n\r\n/**\r\n * @param {object} [opts]\r\n * @param {number} [opts.iterations=400]\r\n * @param {number} [opts.bufferMb=64]\r\n * @returns {{ timings: number[], refreshPeriodMs: number|null,\r\n * refreshPresent: boolean, peakLag: number, peakPower: number,\r\n * verdict: string }}\r\n */\r\nexport function collectDramTimings(opts = {}) {\r\n const {\r\n iterations = PROBE_ITERATIONS,\r\n bufferMb = BUFFER_MB,\r\n } = opts;\r\n\r\n // ── Allocate cache-busting buffer ────────────────────────────────────────\r\n const nElements = (bufferMb * 1024 * 1024) / 8; // 64-bit doubles\r\n let buf;\r\n\r\n try {\r\n buf = new Float64Array(nElements);\r\n // Touch every cache line to ensure OS actually maps the pages\r\n const stride = 64 / 8; // 64-byte cache lines, 8 bytes per element\r\n for (let i = 0; i < nElements; i += stride) buf[i] = i;\r\n } catch {\r\n // Allocation failure (memory constrained) — cannot run this probe\r\n return _noSignal('buffer allocation failed');\r\n }\r\n\r\n // ── Sequential access loop ───────────────────────────────────────────────\r\n // Each iteration does a full sequential pass over `passElements` worth of\r\n // the buffer. Pass size is tuned so each iteration takes ~1 ms wall-clock,\r\n // giving us enough resolution to see the 7.8 ms refresh cycle.\r\n //\r\n // We start with a small pass and auto-calibrate to hit the 1 ms target.\r\n const passElements = _calibratePassSize(buf);\r\n\r\n const timings = new Float64Array(iterations);\r\n let checksum = 0;\r\n\r\n for (let iter = 0; iter < iterations; iter++) {\r\n const t0 = performance.now();\r\n for (let i = 0; i < passElements; i++) checksum += buf[i];\r\n timings[iter] = performance.now() - t0;\r\n }\r\n\r\n // Prevent dead-code elimination\r\n if (checksum === 0) buf[0] = 1;\r\n\r\n // ── Autocorrelation over timings ─────────────────────────────────────────\r\n // The refresh stall appears as elevated autocorrelation at lag ≈ 7.8 / Δt\r\n // where Δt is the mean iteration time in ms.\r\n const meanIterMs = _mean(timings);\r\n if (meanIterMs <= 0) return _noSignal('zero mean iteration time');\r\n\r\n const targetLag = Math.round(DRAM_REFRESH_MS / meanIterMs);\r\n const maxLag = Math.min(Math.round(50 / meanIterMs), iterations >> 1);\r\n\r\n const ac = _autocorr(Array.from(timings), maxLag);\r\n\r\n // Find the peak in the range [targetLag ± slack]\r\n const slackLags = Math.round(DRAM_REFRESH_SLACK / meanIterMs);\r\n const lagLo = Math.max(1, targetLag - slackLags);\r\n const lagHi = Math.min(maxLag, targetLag + slackLags);\r\n\r\n let peakPower = -Infinity;\r\n let peakLag = targetLag;\r\n for (let l = lagLo; l <= lagHi; l++) {\r\n if (ac[l - 1] > peakPower) {\r\n peakPower = ac[l - 1];\r\n peakLag = l;\r\n }\r\n }\r\n\r\n // Baseline: average autocorrelation outside the refresh window\r\n const baseline = _mean(\r\n Array.from({ length: maxLag }, (_, i) => ac[i])\r\n .filter((_, i) => i + 1 < lagLo || i + 1 > lagHi)\r\n );\r\n\r\n const snr = baseline > 0 ? peakPower / baseline : 0;\r\n const refreshPresent = peakPower > 0.15 && snr > 1.8;\r\n const refreshPeriodMs = refreshPresent ? peakLag * meanIterMs : null;\r\n\r\n const verdict =\r\n refreshPresent && refreshPeriodMs !== null &&\r\n Math.abs(refreshPeriodMs - DRAM_REFRESH_MS) < DRAM_REFRESH_SLACK\r\n ? 'dram'\r\n : peakPower < 0.05\r\n ? 'virtual'\r\n : 'ambiguous';\r\n\r\n return {\r\n timings: Array.from(timings),\r\n refreshPeriodMs,\r\n refreshPresent,\r\n peakLag,\r\n peakPower: +peakPower.toFixed(4),\r\n snr: +snr.toFixed(2),\r\n meanIterMs: +meanIterMs.toFixed(3),\r\n verdict,\r\n };\r\n}\r\n\r\n/* ─── helpers ────────────────────────────────────────────────────────────── */\r\n\r\nfunction _noSignal(reason) {\r\n return {\r\n timings: [], refreshPeriodMs: null, refreshPresent: false,\r\n peakLag: 0, peakPower: 0, snr: 0, meanIterMs: 0,\r\n verdict: 'ambiguous', reason,\r\n };\r\n}\r\n\r\n/**\r\n * Run a quick calibration pass to find how many elements to read per\r\n * iteration so each iteration takes approximately 1 ms.\r\n */\r\nfunction _calibratePassSize(buf) {\r\n const target = 1.0; // ms\r\n let n = Math.min(100_000, buf.length);\r\n let elapsed = 0;\r\n let dummy = 0;\r\n\r\n // Warm up\r\n for (let i = 0; i < n; i++) dummy += buf[i];\r\n\r\n // Measure\r\n const t0 = performance.now();\r\n for (let i = 0; i < n; i++) dummy += buf[i];\r\n elapsed = performance.now() - t0;\r\n if (dummy === 0) buf[0] = 1; // prevent DCE\r\n\r\n if (elapsed <= 0) return n;\r\n return Math.max(1, Math.min(buf.length, Math.round(n * (target / elapsed))));\r\n}\r\n\r\nfunction _mean(arr) {\r\n if (!arr.length) return 0;\r\n return arr.reduce((s, v) => s + v, 0) / arr.length;\r\n}\r\n\r\nfunction _autocorr(data, maxLag) {\r\n const n = data.length;\r\n const mean = _mean(data);\r\n let v = 0;\r\n for (let i = 0; i < n; i++) v += (data[i] - mean) ** 2;\r\n v /= n;\r\n\r\n const result = new Float64Array(maxLag);\r\n if (v < 1e-14) return result;\r\n\r\n for (let lag = 1; lag <= maxLag; lag++) {\r\n let cov = 0;\r\n for (let i = 0; i < n - lag; i++) {\r\n cov += (data[i] - mean) * (data[i + lag] - mean);\r\n }\r\n result[lag - 1] = cov / ((n - lag) * v);\r\n }\r\n return result;\r\n}\r\n","/**\r\n * @svrnsec/pulse — SharedArrayBuffer Microsecond Timer\r\n *\r\n * Bypasses browser timer clamping (Brave 100µs cap, Firefox 20µs cap, Safari\r\n * 1ms cap) using Atomics.wait() which is exempt from clamping because it maps\r\n * directly to OS-level futex/semaphore primitives.\r\n *\r\n * Requirements\r\n * ────────────\r\n * The page must be served with Cross-Origin Isolation headers:\r\n * Cross-Origin-Opener-Policy: same-origin\r\n * Cross-Origin-Embedder-Policy: require-corp\r\n *\r\n * These are mandatory for security (Spectre mitigations) and are already\r\n * required by WebGPU, WebAssembly threads, and SharedArrayBuffer in all\r\n * modern browsers.\r\n *\r\n * What we measure\r\n * ───────────────\r\n * resolution the true timer resolution (pre-clamp) in microseconds\r\n * isClamped true if performance.now() is artificially reduced\r\n * clampAmount how much performance.now() was rounded (µs)\r\n * highResTimings entropy probe timings at true microsecond resolution\r\n *\r\n * Why this matters\r\n * ────────────────\r\n * With 1ms clamping, a VM's flat distribution and a real device's noisy\r\n * distribution can look similar — both get quantized to the same step.\r\n * At 1µs resolution, the difference between EJR=1.01 and EJR=1.24 is\r\n * unmistakable. This upgrade alone materially improves detection accuracy\r\n * on Brave and Firefox where timer clamping was previously a confound.\r\n */\r\n\r\n/* ─── availability ───────────────────────────────────────────────────────── */\r\n\r\nexport function isSabAvailable() {\r\n return (\r\n typeof SharedArrayBuffer !== 'undefined' &&\r\n typeof Atomics !== 'undefined' &&\r\n typeof Atomics.wait === 'function' &&\r\n typeof crossOriginIsolated !== 'undefined' && crossOriginIsolated === true // COOP+COEP headers\r\n );\r\n}\r\n\r\n/* ─── Atomics-based high-resolution clock ───────────────────────────────── */\r\n\r\nfunction _createSab() {\r\n if (!isSabAvailable()) return null;\r\n const sab = new SharedArrayBuffer(4);\r\n return new Int32Array(sab);\r\n}\r\n\r\n/**\r\n * Wait exactly `us` microseconds using Atomics.wait().\r\n * Returns wall-clock elapsed in milliseconds.\r\n * Much more accurate than setTimeout(fn, 0) or performance.now() loops.\r\n *\r\n * @param {number} us – microseconds to wait\r\n * @param {Int32Array} i32 – shared int32 view\r\n * @returns {number} actual elapsed ms\r\n */\r\nfunction _atomicsWait(us, i32) {\r\n const t0 = performance.now();\r\n Atomics.wait(i32, 0, 0, us / 1000); // Atomics.wait timeout is in ms\r\n return performance.now() - t0;\r\n}\r\n\r\n/* ─── measureClamp ───────────────────────────────────────────────────────── */\r\n\r\n/**\r\n * Determine the true timer resolution by comparing a series of\r\n * sub-millisecond Atomics.wait() calls against performance.now() deltas.\r\n *\r\n * @returns {{ isClamped: boolean, clampAmountUs: number, resolutionUs: number }}\r\n */\r\nexport function measureClamp() {\r\n if (!isSabAvailable()) {\r\n return { isClamped: false, clampAmountUs: 0, resolutionUs: 1000 };\r\n }\r\n\r\n // Measure the minimum non-zero performance.now() delta\r\n const performanceDeltas = [];\r\n for (let i = 0; i < 100; i++) {\r\n const t0 = performance.now();\r\n let t1 = t0;\r\n let attempts = 0;\r\n while (t1 === t0 && attempts++ < 10000) t1 = performance.now();\r\n performanceDeltas.push((t1 - t0) * 1000); // convert to µs\r\n }\r\n performanceDeltas.sort((a, b) => a - b);\r\n const perfResolutionUs = performanceDeltas[Math.floor(performanceDeltas.length * 0.1)]; // 10th percentile\r\n\r\n // Measure actual OS timer resolution via Atomics.wait\r\n const i32 = _createSab();\r\n if (!i32) return { isClamped: false, clampAmountUs: 0, resolutionUs: 1000 };\r\n const atomicsDeltas = [];\r\n for (let i = 0; i < 20; i++) {\r\n const elapsedMs = _atomicsWait(100, i32); // wait 100µs\r\n atomicsDeltas.push(Math.abs(elapsedMs * 1000 - 100)); // error from target\r\n }\r\n const atomicsErrorUs = atomicsDeltas.reduce((s, v) => s + v, 0) / atomicsDeltas.length;\r\n const trueResolutionUs = Math.max(1, atomicsErrorUs);\r\n\r\n const isClamped = perfResolutionUs > trueResolutionUs * 5;\r\n const clampAmountUs = isClamped ? perfResolutionUs - trueResolutionUs : 0;\r\n\r\n return { isClamped, clampAmountUs, resolutionUs: perfResolutionUs };\r\n}\r\n\r\n/* ─── collectHighResTimings ──────────────────────────────────────────────── */\r\n\r\n/**\r\n * Collect entropy probe timings at Atomics-level resolution.\r\n * Falls back to performance.now() if SAB is unavailable.\r\n *\r\n * The probe itself is identical to the WASM matrix probe — CPU work unit\r\n * timed with the highest available clock. The difference: on a clamped\r\n * browser this replaces quantized 100µs buckets with true µs measurements.\r\n *\r\n * @param {object} opts\r\n * @param {number} [opts.iterations=200]\r\n * @param {number} [opts.matrixSize=32] – smaller than WASM probe (no SIMD here)\r\n * @returns {{ timings: number[], usingAtomics: boolean, resolutionUs: number }}\r\n */\r\nexport function collectHighResTimings(opts = {}) {\r\n const { iterations = 200, matrixSize = 32 } = opts;\r\n\r\n const usingAtomics = isSabAvailable();\r\n const clampInfo = usingAtomics ? measureClamp() : { resolutionUs: 1000 };\r\n\r\n // Simple matrix multiply work unit (JS — no WASM needed for the clock probe)\r\n const N = matrixSize;\r\n const A = new Float64Array(N * N).map(() => Math.random());\r\n const B = new Float64Array(N * N).map(() => Math.random());\r\n const C = new Float64Array(N * N);\r\n\r\n const timings = new Array(iterations);\r\n const _i32 = usingAtomics ? _createSab() : null;\r\n\r\n for (let iter = 0; iter < iterations; iter++) {\r\n C.fill(0);\r\n\r\n if (usingAtomics && _i32) {\r\n // ── Atomics path: start timing, do work, read Atomics-calibrated time ──\r\n // We use a sliding window approach: measure with Atomics.wait(0) which\r\n // returns immediately but the OS schedules give us a high-res timestamp\r\n // via the before/after pattern on the shared memory notification.\r\n\r\n const tAtomicsBefore = _getAtomicsTs(_i32);\r\n for (let i = 0; i < N; i++) {\r\n for (let k = 0; k < N; k++) {\r\n const aik = A[i * N + k];\r\n for (let j = 0; j < N; j++) C[i * N + j] += aik * B[k * N + j];\r\n }\r\n }\r\n const tAtomicsAfter = _getAtomicsTs(_i32);\r\n timings[iter] = (tAtomicsAfter - tAtomicsBefore) * 1000; // µs → ms\r\n\r\n } else {\r\n // ── Standard path: use performance.now() ──\r\n const t0 = performance.now();\r\n for (let i = 0; i < N; i++) {\r\n for (let k = 0; k < N; k++) {\r\n const aik = A[i * N + k];\r\n for (let j = 0; j < N; j++) C[i * N + j] += aik * B[k * N + j];\r\n }\r\n }\r\n timings[iter] = performance.now() - t0;\r\n }\r\n }\r\n\r\n return {\r\n timings,\r\n usingAtomics,\r\n resolutionUs: clampInfo.resolutionUs,\r\n isClamped: clampInfo.isClamped ?? false,\r\n clampAmountUs: clampInfo.clampAmountUs ?? 0,\r\n };\r\n}\r\n\r\n/* ─── internal Atomics timestamp ─────────────────────────────────────────── */\r\n\r\n// Use a write to shared memory + memory fence as a timestamp anchor.\r\n// This forces the CPU to flush its store buffer, giving a hardware-ordered\r\n// time reference that survives compiler reordering.\r\nfunction _getAtomicsTs(i32) {\r\n Atomics.store(i32, 0, Atomics.load(i32, 0) + 1);\r\n return performance.now();\r\n}\r\n","/**\r\n * @svrnsec/pulse — Electrical Network Frequency (ENF) Detection\r\n *\r\n * ┌─────────────────────────────────────────────────────────────────────────┐\r\n * │ WHAT THIS IS │\r\n * │ │\r\n * │ Power grids operate at a nominal frequency — 60 Hz in the Americas, │\r\n * │ 50 Hz in Europe, Asia, Africa, and Australia. This frequency is not │\r\n * │ perfectly stable. It deviates by ±0.05 Hz in real time as generators │\r\n * │ spin up and down to match load. These deviations are unique, logged │\r\n * │ by grid operators, and have been used in forensics since 2010 to │\r\n * │ timestamp recordings to within seconds. │\r\n * │ │\r\n * │ We are the first to measure it from a browser. │\r\n * └─────────────────────────────────────────────────────────────────────────┘\r\n *\r\n * Signal path\r\n * ───────────\r\n * AC mains (50/60 Hz)\r\n * → ATX power supply (full-wave rectified → 100/120 Hz ripple on DC rail)\r\n * → Voltage Regulator Module (VRM) on motherboard\r\n * → CPU Vcore (supply voltage to processor dies)\r\n * → Transistor switching speed (slightly modulated by Vcore)\r\n * → Matrix multiply loop timing (measurably longer when Vcore dips)\r\n * → Our microsecond-resolution timing probe\r\n *\r\n * The ripple amplitude at the timing layer is ~10–100 ns — invisible to\r\n * performance.now() at 1 ms resolution, clearly visible with Atomics-based\r\n * microsecond timing. This is why this module depends on sabTimer.js.\r\n *\r\n * What we detect\r\n * ──────────────\r\n * gridFrequency 50.0 or 60.0 Hz (nominal), ±0.5 Hz measured\r\n * gridRegion 'americas' (60 Hz) | 'emea_apac' (50 Hz) | 'unknown'\r\n * ripplePresent true if the 100/120 Hz harmonic is statistically significant\r\n * ripplePower power of the dominant grid harmonic (0–1)\r\n * enfDeviation precise measured frequency – nominal (Hz) — temporal fingerprint\r\n * temporalHash BLAKE3 of (enfDeviation + timestamp) — attestation anchor\r\n *\r\n * What this proves\r\n * ───────────────\r\n * 1. The device is connected to a real AC power grid (rules out cloud VMs,\r\n * UPS-backed datacenter servers, and battery-only devices off-grid)\r\n * 2. The geographic grid region (50 Hz vs 60 Hz — no IP, no location API)\r\n * 3. A temporal fingerprint that can be cross-referenced against public ENF\r\n * logs (e.g., www.gridwatch.templar.linux.org.uk) to verify the session\r\n * timestamp is authentic\r\n *\r\n * Why VMs fail\r\n * ────────────\r\n * Datacenter power is conditioned, filtered, and UPS-backed. Grid frequency\r\n * deviations are removed before they reach the server. Cloud VMs receive\r\n * perfectly regulated power — the ENF signal does not exist in their timing\r\n * measurements. This is a physical property of datacenter infrastructure,\r\n * not a software configuration that can be patched or spoofed.\r\n *\r\n * A VM attempting to inject synthetic ENF ripple into its virtual clock\r\n * would need to:\r\n * 1. Know the real-time ENF of the target grid region (requires live API)\r\n * 2. Modulate the virtual TSC at sub-microsecond precision\r\n * 3. Match the precise VRM transfer function of the target motherboard\r\n * This is not a realistic attack surface.\r\n *\r\n * Battery devices\r\n * ───────────────\r\n * Laptops on battery have no AC ripple. The module detects this via absence\r\n * of both 100 Hz and 120 Hz signal, combined with very low ripple variance.\r\n * This is handled by the 'battery_or_conditioned' verdict — treated as\r\n * inconclusive rather than VM (real laptops exist).\r\n *\r\n * Required: crossOriginIsolated = true (COOP + COEP headers)\r\n * The SAB microsecond timer is required for ENF detection. On browsers where\r\n * it is unavailable, the module returns { enfAvailable: false }.\r\n */\r\n\r\nimport { isSabAvailable, collectHighResTimings } from './sabTimer.js';\r\n\r\n// ── Grid frequency constants ──────────────────────────────────────────────────\r\nconst GRID_60HZ_NOMINAL = 60.0; // Americas, parts of Japan & Korea\r\nconst GRID_50HZ_NOMINAL = 50.0; // EMEA, APAC, most of Asia\r\nconst RIPPLE_60HZ = 120.0; // Full-wave rectified: 2 × 60 Hz\r\nconst RIPPLE_50HZ = 100.0; // Full-wave rectified: 2 × 50 Hz\r\nconst RIPPLE_SLACK_HZ = 2.0; // ±2 Hz around nominal (accounts for VRM response)\r\nconst MIN_RIPPLE_POWER = 0.04; // Minimum power ratio to declare ripple present\r\nconst SNR_THRESHOLD = 2.0; // Signal-to-noise ratio for confident detection\r\n\r\n// ── Probe parameters ──────────────────────────────────────────────────────────\r\n// We need enough samples at sufficient rate to resolve 100–120 Hz.\r\n// Nyquist: sample_rate > 240 Hz (need >2× the highest target frequency).\r\n// With ~1 ms per iteration, 100 Hz ≈ 10 samples per cycle — adequate.\r\n// We want at least 20 full cycles → 200 iterations minimum.\r\nconst PROBE_ITERATIONS = 512; // power of 2 for clean FFT\r\nconst PROBE_MATRIX_SIZE = 16; // small matrix → ~1 ms/iter → ~500 Hz sample rate\r\n\r\n/* ─── collectEnfTimings ─────────────────────────────────────────────────────── */\r\n\r\n/**\r\n * @param {object} [opts]\r\n * @param {number} [opts.iterations=512]\r\n * @returns {Promise<EnfResult>}\r\n */\r\nexport async function collectEnfTimings(opts = {}) {\r\n const { iterations = PROBE_ITERATIONS } = opts;\r\n\r\n if (!isSabAvailable()) {\r\n return _noEnf('SharedArrayBuffer not available — COOP+COEP headers required');\r\n }\r\n\r\n // Collect high-resolution CPU timing series\r\n const { timings, resolutionUs } = collectHighResTimings({\r\n iterations,\r\n matrixSize: PROBE_MATRIX_SIZE,\r\n });\r\n\r\n if (timings.length < 128) {\r\n return _noEnf('insufficient timing samples');\r\n }\r\n\r\n // Estimate the sample rate from actual timing\r\n const meanIterMs = timings.reduce((s, v) => s + v, 0) / timings.length;\r\n const sampleRateHz = meanIterMs > 0 ? 1000 / meanIterMs : 0;\r\n\r\n if (sampleRateHz < 60) {\r\n return _noEnf(`sample rate too low for ENF detection: ${sampleRateHz.toFixed(0)} Hz`);\r\n }\r\n\r\n // ── Power Spectral Density ────────────────────────────────────────────────\r\n const n = timings.length;\r\n const psd = _computePsd(timings, sampleRateHz);\r\n\r\n // Find the dominant frequency peak\r\n const peakIdx = psd.powers.reduce((best, v, i) => i > 0 && v > psd.powers[best] ? i : best, 1);\r\n const peakFreq = psd.freqs[peakIdx];\r\n\r\n // Power in 100 Hz window vs 120 Hz window\r\n const power100 = _bandPower(psd, RIPPLE_50HZ, RIPPLE_SLACK_HZ);\r\n const power120 = _bandPower(psd, RIPPLE_60HZ, RIPPLE_SLACK_HZ);\r\n const baseline = _baselinePower(psd, [\r\n [RIPPLE_50HZ - RIPPLE_SLACK_HZ, RIPPLE_50HZ + RIPPLE_SLACK_HZ],\r\n [RIPPLE_60HZ - RIPPLE_SLACK_HZ, RIPPLE_60HZ + RIPPLE_SLACK_HZ],\r\n ]);\r\n\r\n const snr100 = baseline > 0 ? power100 / baseline : 0;\r\n const snr120 = baseline > 0 ? power120 / baseline : 0;\r\n\r\n // ── Verdict ───────────────────────────────────────────────────────────────\r\n const has100 = power100 > MIN_RIPPLE_POWER && snr100 > SNR_THRESHOLD;\r\n const has120 = power120 > MIN_RIPPLE_POWER && snr120 > SNR_THRESHOLD;\r\n\r\n let gridFrequency = null;\r\n let gridRegion = 'unknown';\r\n let ripplePower = 0;\r\n let nominalHz = null;\r\n\r\n if (has120 && power120 >= power100) {\r\n gridFrequency = GRID_60HZ_NOMINAL;\r\n gridRegion = 'americas';\r\n ripplePower = power120;\r\n nominalHz = RIPPLE_60HZ;\r\n } else if (has100) {\r\n gridFrequency = GRID_50HZ_NOMINAL;\r\n gridRegion = 'emea_apac';\r\n ripplePower = power100;\r\n nominalHz = RIPPLE_50HZ;\r\n }\r\n\r\n const ripplePresent = has100 || has120;\r\n\r\n // ── ENF deviation (temporal fingerprint) ─────────────────────────────────\r\n // The precise ripple frequency deviates from nominal by ±0.1 Hz in real time.\r\n // We measure the peak frequency in the ripple band to extract this deviation.\r\n let enfDeviation = null;\r\n if (ripplePresent && nominalHz !== null) {\r\n const preciseRippleFreq = _precisePeakFreq(psd, nominalHz, RIPPLE_SLACK_HZ);\r\n enfDeviation = +(preciseRippleFreq - nominalHz).toFixed(3); // Hz deviation from nominal\r\n }\r\n\r\n // ── Verdict ───────────────────────────────────────────────────────────────\r\n const verdict =\r\n !ripplePresent ? 'no_grid_signal' // VM, UPS, or battery\r\n : gridRegion === 'americas' ? 'grid_60hz'\r\n : gridRegion === 'emea_apac' ? 'grid_50hz'\r\n : 'grid_detected_region_unknown';\r\n\r\n const isVmIndicator = !ripplePresent && sampleRateHz > 100;\r\n // High sample rate + no ripple = conditioned power (datacenter)\r\n\r\n return {\r\n enfAvailable: true,\r\n ripplePresent,\r\n gridFrequency,\r\n gridRegion,\r\n ripplePower: +ripplePower.toFixed(4),\r\n snr50hz: +snr100.toFixed(2),\r\n snr60hz: +snr120.toFixed(2),\r\n enfDeviation,\r\n sampleRateHz: +sampleRateHz.toFixed(1),\r\n resolutionUs,\r\n verdict,\r\n isVmIndicator,\r\n // For cross-referencing against public ENF databases (forensic timestamp)\r\n temporalAnchor: enfDeviation !== null ? {\r\n nominalHz,\r\n measuredRippleHz: +(nominalHz + enfDeviation).toFixed(4),\r\n capturedAt: Date.now(),\r\n // Matches format used by ENF forensic databases:\r\n // https://www.enf.cc | UK National Grid ESO data\r\n gridHz: gridFrequency,\r\n } : null,\r\n };\r\n}\r\n\r\n/* ─── Power Spectral Density (Welch-inspired DFT) ───────────────────────── */\r\n\r\nfunction _computePsd(signal, sampleRateHz) {\r\n const n = signal.length;\r\n const mean = signal.reduce((s, v) => s + v, 0) / n;\r\n\r\n // Remove DC offset and apply Hann window\r\n const windowed = signal.map((v, i) => {\r\n const w = 0.5 * (1 - Math.cos((2 * Math.PI * i) / (n - 1))); // Hann\r\n return (v - mean) * w;\r\n });\r\n\r\n // DFT up to Nyquist — only need up to ~200 Hz so we cap bins\r\n const maxFreq = Math.min(200, sampleRateHz / 2);\r\n const maxBin = Math.floor(maxFreq * n / sampleRateHz);\r\n\r\n const powers = new Float64Array(maxBin);\r\n const freqs = new Float64Array(maxBin);\r\n\r\n for (let k = 1; k < maxBin; k++) {\r\n let re = 0, im = 0;\r\n for (let t = 0; t < n; t++) {\r\n const angle = (2 * Math.PI * k * t) / n;\r\n re += windowed[t] * Math.cos(angle);\r\n im -= windowed[t] * Math.sin(angle);\r\n }\r\n powers[k] = (re * re + im * im) / (n * n);\r\n freqs[k] = (k * sampleRateHz) / n;\r\n }\r\n\r\n // Normalise powers so they sum to 1 (makes thresholds sample-count-independent)\r\n const total = powers.reduce((s, v) => s + v, 0);\r\n if (total > 0) for (let i = 0; i < powers.length; i++) powers[i] /= total;\r\n\r\n return { powers, freqs };\r\n}\r\n\r\nfunction _bandPower(psd, centerHz, halfwidthHz) {\r\n let power = 0;\r\n for (let i = 0; i < psd.freqs.length; i++) {\r\n if (Math.abs(psd.freqs[i] - centerHz) <= halfwidthHz) {\r\n power += psd.powers[i];\r\n }\r\n }\r\n return power;\r\n}\r\n\r\nfunction _baselinePower(psd, excludeBands) {\r\n let sum = 0, count = 0;\r\n for (let i = 0; i < psd.freqs.length; i++) {\r\n const f = psd.freqs[i];\r\n const excluded = excludeBands.some(([lo, hi]) => f >= lo && f <= hi);\r\n if (!excluded && f > 10 && f < 200) { sum += psd.powers[i]; count++; }\r\n }\r\n return count > 0 ? sum / count : 0;\r\n}\r\n\r\nfunction _precisePeakFreq(psd, centerHz, halfwidthHz) {\r\n // Quadratic interpolation around the peak bin for sub-bin precision\r\n let peakBin = 0, peakPow = -Infinity;\r\n for (let i = 0; i < psd.freqs.length; i++) {\r\n if (Math.abs(psd.freqs[i] - centerHz) <= halfwidthHz && psd.powers[i] > peakPow) {\r\n peakPow = psd.powers[i]; peakBin = i;\r\n }\r\n }\r\n if (peakBin <= 0 || peakBin >= psd.powers.length - 1) return psd.freqs[peakBin];\r\n\r\n // Quadratic peak interpolation (Jacobsen method)\r\n const alpha = psd.powers[peakBin - 1];\r\n const beta = psd.powers[peakBin];\r\n const gamma = psd.powers[peakBin + 1];\r\n const denom = alpha - 2 * beta + gamma;\r\n if (Math.abs(denom) < 1e-14) return psd.freqs[peakBin];\r\n const deltaBin = 0.5 * (alpha - gamma) / denom;\r\n const binWidth = psd.freqs[1] - psd.freqs[0];\r\n return psd.freqs[peakBin] + deltaBin * binWidth;\r\n}\r\n\r\nfunction _noEnf(reason) {\r\n return {\r\n enfAvailable: false, ripplePresent: false, gridFrequency: null,\r\n gridRegion: 'unknown', ripplePower: 0, snr50hz: 0, snr60hz: 0,\r\n enfDeviation: null, sampleRateHz: 0, resolutionUs: 0,\r\n verdict: 'unavailable', isVmIndicator: false, temporalAnchor: null, reason,\r\n };\r\n}\r\n\r\n/**\r\n * @typedef {object} EnfResult\r\n * @property {boolean} enfAvailable\r\n * @property {boolean} ripplePresent false = VM / datacenter / battery\r\n * @property {number|null} gridFrequency 50 or 60 Hz\r\n * @property {string} gridRegion 'americas' | 'emea_apac' | 'unknown'\r\n * @property {number} ripplePower normalised PSD power at grid harmonic\r\n * @property {number|null} enfDeviation Hz deviation from nominal (temporal fingerprint)\r\n * @property {string} verdict\r\n * @property {boolean} isVmIndicator true if signal absence + high sample rate\r\n * @property {object|null} temporalAnchor forensic timestamp anchor\r\n */\r\n","/**\r\n * @svrnsec/pulse — LLM / AI Agent Behavioral Fingerprint\r\n *\r\n * Detects automation driven by large language models, headless browsers\r\n * controlled by AI agents (AutoGPT, CrewAI, browser-use, Playwright+LLM,\r\n * Selenium+GPT-4), and synthetic user emulators.\r\n *\r\n * Why LLMs are detectable at the behavioral layer\r\n * ───────────────────────────────────────────────\r\n * A human interacting with a browser produces a signal shaped by:\r\n * – Motor control noise (Fitts' Law, signal-dependent noise in arm movement)\r\n * – Cognitive processing time (fixation → decision → motor initiation)\r\n * – Error and correction cycles (overshooting, backspacing, re-reading)\r\n * – Physiological rhythms (micro-tremor at 8–12 Hz, respiration at 0.2–0.3 Hz)\r\n *\r\n * An LLM agent produces:\r\n * – Think-time spikes at multiples of the model's token generation latency\r\n * (GPT-4 Turbo: ~50ms/token; Claude 3: ~30ms/token)\r\n * – Mouse paths generated by a trajectory model (no signal-dependent noise)\r\n * – Keystrokes at WPM limited by the agent's typing function, not human anatomy\r\n * – Absent micro-corrections (humans correct 7–12% of keystrokes; agents: 0%)\r\n *\r\n * Signals\r\n * ───────\r\n * thinkTimePattern peak in inter-event timing at known LLM token latencies\r\n * mousePathSmoothness human paths are fractal; LLM paths are piecewise linear\r\n * correctionRate keystrokes followed by Backspace (human: 7–12%, LLM: <1%)\r\n * pauseDistribution human pauses are Pareto-distributed; LLM pauses are uniform\r\n * rhythmicity presence of physiological tremor (8–12 Hz) in pointer data\r\n * eventGapCV coefficient of variation of inter-event gaps\r\n *\r\n * Scoring\r\n * ───────\r\n * Each signal contributes a weight to an overall `aiConf` score (0–1).\r\n * A score above 0.70 indicates likely AI agent. Above 0.85 is high confidence.\r\n * The score is designed to be combined with the physics layer — AI agents running\r\n * on real hardware (a human's machine being remote-controlled) will pass the\r\n * physics check but fail the behavioral check.\r\n */\r\n\r\n// ── Known LLM token latency ranges (ms per token, observed empirically) ──────\r\n// These appear as periodic peaks in inter-event timing when the LLM is\r\n// \"thinking\" between actions.\r\nconst LLM_LATENCY_RANGES = [\r\n { name: 'gpt-4-turbo', minMs: 40, maxMs: 80 },\r\n { name: 'gpt-4o', minMs: 20, maxMs: 50 },\r\n { name: 'claude-3-sonnet', minMs: 25, maxMs: 60 },\r\n { name: 'claude-3-opus', minMs: 50, maxMs: 120 },\r\n { name: 'gemini-1.5-pro', minMs: 30, maxMs: 70 },\r\n { name: 'llama-3-70b', minMs: 15, maxMs: 45 },\r\n];\r\n\r\n// ── Human physiological constants ─────────────────────────────────────────────\r\nconst HUMAN_TREMOR_HZ_LO = 8; // micro-tremor band low (Hz)\r\nconst HUMAN_TREMOR_HZ_HI = 12; // micro-tremor band high (Hz)\r\nconst HUMAN_CORRECTION_MIN = 0.05; // minimum human backspace rate\r\nconst HUMAN_CORRECTION_MAX = 0.18; // maximum human backspace rate\r\n\r\n/* ─── Public API ─────────────────────────────────────────────────────────── */\r\n\r\n/**\r\n * Analyse collected behavioral signals for AI agent indicators.\r\n *\r\n * @param {object} signals\r\n * @param {Array<{t:number, x:number, y:number}>} [signals.mouseEvents] – {t ms, x, y}\r\n * @param {Array<{t:number, key:string}>} [signals.keyEvents] – {t ms, key}\r\n * @param {Array<number>} [signals.interEventGaps] – ms between any UI events\r\n * @returns {LlmFingerprint}\r\n */\r\nexport function detectLlmAgent(signals = {}) {\r\n const {\r\n mouseEvents = [],\r\n keyEvents = [],\r\n interEventGaps = [],\r\n } = signals;\r\n\r\n const checks = [];\r\n\r\n // ── 1. Think-time pattern ────────────────────────────────────────────────\r\n if (interEventGaps.length >= 20) {\r\n const thinkCheck = _analyseThinkTime(interEventGaps);\r\n checks.push(thinkCheck);\r\n }\r\n\r\n // ── 2. Mouse path smoothness ─────────────────────────────────────────────\r\n if (mouseEvents.length >= 30) {\r\n const pathCheck = _analyseMousePath(mouseEvents);\r\n checks.push(pathCheck);\r\n }\r\n\r\n // ── 3. Keystroke correction rate ─────────────────────────────────────────\r\n if (keyEvents.length >= 15) {\r\n const corrCheck = _analyseCorrectionRate(keyEvents);\r\n checks.push(corrCheck);\r\n }\r\n\r\n // ── 4. Physiological tremor ───────────────────────────────────────────────\r\n if (mouseEvents.length >= 50) {\r\n const tremorCheck = _analyseTremor(mouseEvents);\r\n checks.push(tremorCheck);\r\n }\r\n\r\n // ── 5. Inter-event gap distribution ──────────────────────────────────────\r\n if (interEventGaps.length >= 30) {\r\n const gapCheck = _analyseGapDistribution(interEventGaps);\r\n checks.push(gapCheck);\r\n }\r\n\r\n if (!checks.length) {\r\n return { aiConf: 0, humanConf: 0, checks: [], verdict: 'insufficient_data',\r\n dataPoints: { mouseEvents: mouseEvents.length,\r\n keyEvents: keyEvents.length,\r\n gaps: interEventGaps.length } };\r\n }\r\n\r\n // Weighted average — weight by how many data points each check had\r\n const totalWeight = checks.reduce((s, c) => s + c.weight, 0);\r\n const aiConf = checks.reduce((s, c) => s + c.aiScore * c.weight, 0) / totalWeight;\r\n const humanConf = checks.reduce((s, c) => s + c.humanScore * c.weight, 0) / totalWeight;\r\n\r\n const verdict =\r\n aiConf > 0.85 ? 'ai_agent_high_confidence'\r\n : aiConf > 0.70 ? 'ai_agent_likely'\r\n : humanConf > 0.75 ? 'human_likely'\r\n : 'ambiguous';\r\n\r\n return {\r\n aiConf: +aiConf.toFixed(3),\r\n humanConf: +humanConf.toFixed(3),\r\n checks,\r\n verdict,\r\n dataPoints: {\r\n mouseEvents: mouseEvents.length,\r\n keyEvents: keyEvents.length,\r\n gaps: interEventGaps.length,\r\n },\r\n };\r\n}\r\n\r\n/* ─── Signal collectors (attach to the live DOM) ─────────────────────────── */\r\n\r\n/**\r\n * Create a collector that listens to DOM events and returns a snapshot\r\n * of raw signals. Call `.stop()` when done collecting.\r\n *\r\n * @param {object} [opts]\r\n * @param {EventTarget} [opts.target=window]\r\n * @param {number} [opts.maxEvents=2000]\r\n * @returns {{ stop: () => LlmSignals, isCollecting: boolean }}\r\n */\r\nexport function createBehaviorCollector(opts = {}) {\r\n const { target = globalThis, maxEvents = 2000 } = opts;\r\n\r\n const mouseEvents = [];\r\n const keyEvents = [];\r\n const interEventGaps = [];\r\n let lastEventTs = null;\r\n let collecting = true;\r\n\r\n const onMouse = (e) => {\r\n if (!collecting || mouseEvents.length >= maxEvents) return;\r\n mouseEvents.push({ t: e.timeStamp, x: e.clientX, y: e.clientY });\r\n _recordGap(e.timeStamp);\r\n };\r\n\r\n const onKey = (e) => {\r\n if (!collecting || keyEvents.length >= maxEvents) return;\r\n keyEvents.push({ t: e.timeStamp, key: e.key });\r\n _recordGap(e.timeStamp);\r\n };\r\n\r\n const onClick = (e) => _recordGap(e.timeStamp);\r\n const onScroll = () => _recordGap(performance.now());\r\n\r\n function _recordGap(ts) {\r\n if (lastEventTs !== null && ts > lastEventTs) {\r\n interEventGaps.push(ts - lastEventTs);\r\n }\r\n lastEventTs = ts;\r\n }\r\n\r\n if (typeof target.addEventListener === 'function') {\r\n target.addEventListener('mousemove', onMouse, { passive: true });\r\n target.addEventListener('keydown', onKey, { passive: true });\r\n target.addEventListener('click', onClick, { passive: true });\r\n target.addEventListener('scroll', onScroll, { passive: true });\r\n }\r\n\r\n return {\r\n get isCollecting() { return collecting; },\r\n stop() {\r\n collecting = false;\r\n if (typeof target.removeEventListener === 'function') {\r\n target.removeEventListener('mousemove', onMouse);\r\n target.removeEventListener('keydown', onKey);\r\n target.removeEventListener('click', onClick);\r\n target.removeEventListener('scroll', onScroll);\r\n }\r\n return { mouseEvents: [...mouseEvents],\r\n keyEvents: [...keyEvents],\r\n interEventGaps: [...interEventGaps] };\r\n },\r\n };\r\n}\r\n\r\n/* ─── Internal checks ────────────────────────────────────────────────────── */\r\n\r\nfunction _analyseThinkTime(gaps) {\r\n // Look for peaks in gap histogram that align with known LLM latency ranges\r\n const histogram = _histogram(gaps, 200); // 200 bins over the gap range\r\n\r\n let matchScore = 0;\r\n const matched = [];\r\n\r\n for (const llm of LLM_LATENCY_RANGES) {\r\n const binPower = _histogramPowerInRange(histogram, llm.minMs, llm.maxMs);\r\n if (binPower > 0.15) { // >15% of all gaps fall in this LLM's latency range\r\n matchScore = Math.max(matchScore, binPower);\r\n matched.push(llm.name);\r\n }\r\n }\r\n\r\n // Human think times follow a Pareto distribution: many short, exponentially\r\n // fewer long pauses. A spike at a fixed latency range is anomalous.\r\n const cv = _cv(gaps);\r\n const isPareto = cv > 1.0; // Pareto CV is always > 1\r\n\r\n return {\r\n name: 'think_time',\r\n aiScore: matchScore > 0.20 ? Math.min(1, matchScore * 3) : 0,\r\n humanScore: isPareto && matchScore < 0.10 ? 0.8 : 0.2,\r\n weight: Math.min(gaps.length / 50, 1),\r\n detail: { matchedLlms: matched, peakBinPower: matchScore, isPareto },\r\n };\r\n}\r\n\r\nfunction _analyseMousePath(events) {\r\n // Compute path curvature at each triplet of points\r\n // Human paths are fractal (self-similar at multiple scales); AI paths are\r\n // smooth cubic splines or straight lines with programmatic waypoints.\r\n const curvatures = [];\r\n for (let i = 1; i < events.length - 1; i++) {\r\n const p0 = events[i - 1];\r\n const p1 = events[i];\r\n const p2 = events[i + 1];\r\n\r\n const d01 = Math.hypot(p1.x - p0.x, p1.y - p0.y);\r\n const d12 = Math.hypot(p2.x - p1.x, p2.y - p1.y);\r\n const d02 = Math.hypot(p2.x - p0.x, p2.y - p0.y);\r\n\r\n // Curvature = deviation from straight line (0 = straight, 1 = sharp turn)\r\n if (d01 + d12 > 0) {\r\n curvatures.push(1 - (d02 / (d01 + d12)));\r\n }\r\n }\r\n\r\n if (!curvatures.length) return { name: 'mouse_path', aiScore: 0, humanScore: 0.5, weight: 0.1, detail: {} };\r\n\r\n const meanCurv = _mean(curvatures);\r\n const cvCurv = _cv(curvatures);\r\n\r\n // Human: moderate mean curvature (0.05–0.25), high CV (varying turns)\r\n // AI agent: very low mean curvature (near-straight lines), low CV (consistent)\r\n const isTooSmooth = meanCurv < 0.02 && cvCurv < 0.3;\r\n const isTooRegular = cvCurv < 0.2 && meanCurv > 0 && meanCurv < 0.05;\r\n\r\n // Velocity profile: human acceleration follows a bell curve (min jerk model)\r\n // AI: piecewise constant velocity (linear interpolation between waypoints)\r\n const speeds = [];\r\n for (let i = 1; i < events.length; i++) {\r\n const dt = events[i].t - events[i - 1].t;\r\n const ds = Math.hypot(events[i].x - events[i - 1].x, events[i].y - events[i - 1].y);\r\n if (dt > 0) speeds.push(ds / dt);\r\n }\r\n const speedCV = _cv(speeds);\r\n\r\n // Human speed is highly variable (CV > 0.5); AI speed is consistent (CV < 0.3)\r\n const aiScore = (\r\n (isTooSmooth ? 0.40 : 0) +\r\n (isTooRegular ? 0.30 : 0) +\r\n (speedCV < 0.25 ? 0.30 : speedCV < 0.40 ? 0.15 : 0)\r\n );\r\n\r\n return {\r\n name: 'mouse_path',\r\n aiScore: Math.min(1, aiScore),\r\n humanScore: aiScore < 0.2 ? 0.8 : 0.2,\r\n weight: Math.min(events.length / 100, 1),\r\n detail: { meanCurvature: +meanCurv.toFixed(4), curvatureCV: +cvCurv.toFixed(3), speedCV: +speedCV.toFixed(3) },\r\n };\r\n}\r\n\r\nfunction _analyseCorrectionRate(keyEvents) {\r\n const total = keyEvents.length;\r\n const backspaces = keyEvents.filter(e => e.key === 'Backspace').length;\r\n const rate = backspaces / total;\r\n\r\n // Human: 5–18% correction rate (typos, editing)\r\n // AI agent: <1% (generates correct text directly from LLM output)\r\n const isTooClean = rate < HUMAN_CORRECTION_MIN;\r\n const isHuman = rate >= HUMAN_CORRECTION_MIN && rate <= HUMAN_CORRECTION_MAX;\r\n\r\n return {\r\n name: 'correction_rate',\r\n aiScore: isTooClean ? 0.75 : 0,\r\n humanScore: isHuman ? 0.85 : 0.2,\r\n weight: Math.min(total / 30, 1),\r\n detail: { correctionRate: +rate.toFixed(3), backspaces, total },\r\n };\r\n}\r\n\r\nfunction _analyseTremor(mouseEvents) {\r\n // Extract velocity time series and look for 8–12 Hz component\r\n // Human hands exhibit involuntary micro-tremor in this band.\r\n if (mouseEvents.length < 50) return { name: 'tremor', aiScore: 0, humanScore: 0.5, weight: 0.1, detail: {} };\r\n\r\n const dt = (mouseEvents[mouseEvents.length - 1].t - mouseEvents[0].t) / (mouseEvents.length - 1);\r\n const sampleHz = dt > 0 ? 1000 / dt : 0;\r\n\r\n if (sampleHz < 30) {\r\n // Not enough temporal resolution to detect 8–12 Hz\r\n return { name: 'tremor', aiScore: 0, humanScore: 0.5, weight: 0.1, detail: { reason: 'low_sample_rate' } };\r\n }\r\n\r\n // Compute x-velocity series\r\n const vx = [];\r\n for (let i = 1; i < mouseEvents.length; i++) {\r\n const dtt = mouseEvents[i].t - mouseEvents[i - 1].t;\r\n vx.push(dtt > 0 ? (mouseEvents[i].x - mouseEvents[i - 1].x) / dtt : 0);\r\n }\r\n\r\n // Rough power estimation in the tremor band using DFT on a windowed segment\r\n const n = Math.min(vx.length, 256);\r\n const segment = vx.slice(0, n);\r\n const tremorPower = _bandPower(segment, sampleHz, HUMAN_TREMOR_HZ_LO, HUMAN_TREMOR_HZ_HI);\r\n const totalPower = _bandPower(segment, sampleHz, 0, sampleHz / 2);\r\n const tremorRatio = totalPower > 0 ? tremorPower / totalPower : 0;\r\n\r\n // Human: some tremor power present (ratio > 0.03)\r\n // AI: tremor band is silent (ratio ≈ 0)\r\n const hasTremor = tremorRatio > 0.03;\r\n\r\n return {\r\n name: 'tremor',\r\n aiScore: hasTremor ? 0 : 0.55,\r\n humanScore: hasTremor ? 0.75 : 0.1,\r\n weight: 0.6,\r\n detail: { tremorRatio: +tremorRatio.toFixed(4), sampleHz: +sampleHz.toFixed(1), hasTremor },\r\n };\r\n}\r\n\r\nfunction _analyseGapDistribution(gaps) {\r\n // Human inter-event gaps follow a heavy-tailed Pareto/lognormal distribution.\r\n // AI agents produce gaps that cluster around fixed latencies (think-time = API call)\r\n // making the distribution multimodal with low overall entropy.\r\n const cv = _cv(gaps);\r\n const skew = _skewness(gaps);\r\n const entropy = _shannonEntropy(gaps, 50);\r\n\r\n // Human: high CV (>0.8), right-skewed (skew > 1), decent entropy (>3 bits)\r\n // AI: moderate CV, low skew, low entropy (gaps cluster at API latency values)\r\n const humanScore = (\r\n (cv > 0.8 ? 0.35 : cv > 0.5 ? 0.15 : 0) +\r\n (skew > 1.0 ? 0.35 : skew > 0.5 ? 0.15 : 0) +\r\n (entropy > 3.5 ? 0.30 : entropy > 2.5 ? 0.15 : 0)\r\n );\r\n\r\n const aiScore = (\r\n (cv < 0.4 ? 0.40 : 0) +\r\n (skew < 0.3 ? 0.30 : 0) +\r\n (entropy < 2.0 ? 0.30 : 0)\r\n );\r\n\r\n return {\r\n name: 'gap_distribution',\r\n aiScore: Math.min(1, aiScore),\r\n humanScore: Math.min(1, humanScore),\r\n weight: Math.min(gaps.length / 60, 1),\r\n detail: { cv: +cv.toFixed(3), skewness: +skew.toFixed(3), entropyBits: +entropy.toFixed(2) },\r\n };\r\n}\r\n\r\n/* ─── Math helpers ───────────────────────────────────────────────────────── */\r\n\r\nfunction _mean(arr) {\r\n return arr.length ? arr.reduce((s, v) => s + v, 0) / arr.length : 0;\r\n}\r\n\r\nfunction _std(arr) {\r\n if (arr.length < 2) return 0;\r\n const m = _mean(arr);\r\n return Math.sqrt(arr.reduce((s, v) => s + (v - m) ** 2, 0) / (arr.length - 1));\r\n}\r\n\r\nfunction _cv(arr) {\r\n const m = _mean(arr);\r\n return m > 0 ? _std(arr) / m : 0;\r\n}\r\n\r\nfunction _skewness(arr) {\r\n const m = _mean(arr);\r\n const s = _std(arr);\r\n if (s === 0) return 0;\r\n const n = arr.length;\r\n return arr.reduce((sum, v) => sum + ((v - m) / s) ** 3, 0) / n;\r\n}\r\n\r\nfunction _shannonEntropy(values, bins) {\r\n if (!values.length) return 0;\r\n const min = Math.min(...values);\r\n const max = Math.max(...values);\r\n if (max === min) return 0;\r\n const width = (max - min) / bins;\r\n const counts = new Array(bins).fill(0);\r\n for (const v of values) {\r\n const b = Math.min(bins - 1, Math.floor((v - min) / width));\r\n counts[b]++;\r\n }\r\n const n = values.length;\r\n return -counts.reduce((s, c) => {\r\n if (c === 0) return s;\r\n const p = c / n;\r\n return s + p * Math.log2(p);\r\n }, 0);\r\n}\r\n\r\nfunction _histogram(values, bins) {\r\n if (!values.length) return { bins: [], min: 0, max: 0, binWidth: 0 };\r\n const min = Math.min(...values);\r\n const max = Math.max(...values) + 1e-9;\r\n const binWidth = (max - min) / bins;\r\n const counts = new Array(bins).fill(0);\r\n for (const v of values) counts[Math.floor((v - min) / binWidth)]++;\r\n return { bins: counts, min, max, binWidth };\r\n}\r\n\r\nfunction _histogramPowerInRange(hist, lo, hi) {\r\n const total = hist.bins.reduce((s, c) => s + c, 0);\r\n if (!total) return 0;\r\n let power = 0;\r\n for (let i = 0; i < hist.bins.length; i++) {\r\n const center = hist.min + (i + 0.5) * hist.binWidth;\r\n if (center >= lo && center <= hi) power += hist.bins[i];\r\n }\r\n return power / total;\r\n}\r\n\r\n// Discrete Fourier Transform power in a frequency band (O(n²) DFT — n ≤ 256)\r\nfunction _bandPower(signal, sampleHz, fLo, fHi) {\r\n const n = signal.length;\r\n let power = 0;\r\n for (let k = 0; k < n / 2; k++) {\r\n const freq = (k * sampleHz) / n;\r\n if (freq < fLo || freq > fHi) continue;\r\n let re = 0, im = 0;\r\n for (let t = 0; t < n; t++) {\r\n const angle = (2 * Math.PI * k * t) / n;\r\n re += signal[t] * Math.cos(angle);\r\n im -= signal[t] * Math.sin(angle);\r\n }\r\n power += (re * re + im * im) / (n * n);\r\n }\r\n return power;\r\n}\r\n\r\n/**\r\n * @typedef {object} LlmFingerprint\r\n * @property {number} aiConf 0–1 AI agent confidence\r\n * @property {number} humanConf 0–1 human confidence\r\n * @property {object[]} checks per-signal breakdown\r\n * @property {string} verdict\r\n * @property {object} dataPoints\r\n */\r\n","/**\r\n * @svrnsec/pulse — Update Notifier\r\n *\r\n * Checks the npm registry for a newer version and prints a styled terminal\r\n * notice when one is available. Non-blocking — the check runs in the\r\n * background and only displays if a newer version is found before the\r\n * process exits.\r\n *\r\n * Zero dependencies. Pure Node.js https module.\r\n * Silent in browser environments and when stdout is not a TTY.\r\n */\r\n\r\nimport { createRequire } from 'module';\r\n\r\n/* ─── version from package.json ─────────────────────────────────────────── */\r\n\r\nlet _currentVersion = '0.0.0';\r\ntry {\r\n const require = createRequire(import.meta.url);\r\n _currentVersion = require('../package.json').version;\r\n} catch {}\r\n\r\nexport const CURRENT_VERSION = _currentVersion;\r\n\r\n/* ─── ANSI helpers ───────────────────────────────────────────────────────── */\r\n\r\nconst isTTY = () =>\r\n typeof process !== 'undefined' &&\r\n process.stdout?.isTTY === true &&\r\n process.env?.NO_COLOR == null &&\r\n process.env?.PULSE_NO_UPDATE == null;\r\n\r\nconst isNode = () => typeof process !== 'undefined' && typeof window === 'undefined';\r\n\r\nconst C = {\r\n reset: '\\x1b[0m',\r\n bold: '\\x1b[1m',\r\n dim: '\\x1b[2m',\r\n // foreground\r\n black: '\\x1b[30m',\r\n red: '\\x1b[31m',\r\n green: '\\x1b[32m',\r\n yellow: '\\x1b[33m',\r\n blue: '\\x1b[34m',\r\n magenta: '\\x1b[35m',\r\n cyan: '\\x1b[36m',\r\n white: '\\x1b[37m',\r\n // bright foreground\r\n bgray: '\\x1b[90m',\r\n bred: '\\x1b[91m',\r\n bgreen: '\\x1b[92m',\r\n byellow: '\\x1b[93m',\r\n bblue: '\\x1b[94m',\r\n bmagenta: '\\x1b[95m',\r\n bcyan: '\\x1b[96m',\r\n bwhite: '\\x1b[97m',\r\n // background\r\n bgBlack: '\\x1b[40m',\r\n bgYellow: '\\x1b[43m',\r\n bgBlue: '\\x1b[44m',\r\n bgCyan: '\\x1b[46m',\r\n};\r\n\r\nconst c = isTTY;\r\nconst ft = (code, s) => c() ? `${code}${s}${C.reset}` : s;\r\n\r\n/* ─── box renderer ───────────────────────────────────────────────────────── */\r\n\r\n/**\r\n * Render a bordered notification box to stderr.\r\n * Uses box-drawing characters and ANSI colors when the terminal supports them.\r\n */\r\nfunction _box(lines, opts = {}) {\r\n const { borderColor = C.yellow, titleColor = C.bwhite } = opts;\r\n const pad = 2;\r\n const width = Math.max(...lines.map(l => _visLen(l))) + pad * 2;\r\n const hr = '─'.repeat(width);\r\n const bc = (s) => c() ? `${borderColor}${s}${C.reset}` : s;\r\n\r\n const out = [\r\n bc(`╭${hr}╮`),\r\n ...lines.map(l => {\r\n const vis = _visLen(l);\r\n const fill = ' '.repeat(Math.max(0, width - vis - pad * 2));\r\n return bc('│') + ' '.repeat(pad) + (c() ? l : _stripAnsi(l)) + fill + ' '.repeat(pad) + bc('│');\r\n }),\r\n bc(`╰${hr}╯`),\r\n ];\r\n\r\n process.stderr.write('\\n' + out.join('\\n') + '\\n\\n');\r\n}\r\n\r\n/* ─── version comparison ─────────────────────────────────────────────────── */\r\n\r\nfunction _semverGt(a, b) {\r\n const [aVer] = a.split('-');\r\n const [bVer] = b.split('-');\r\n const pa = aVer.split('.').map(Number);\r\n const pb = bVer.split('.').map(Number);\r\n for (let i = 0; i < 3; i++) {\r\n const da = pa[i] ?? 0, db = pb[i] ?? 0;\r\n if (da > db) return true;\r\n if (da < db) return false;\r\n }\r\n return false;\r\n}\r\n\r\n/* ─── registry fetch ─────────────────────────────────────────────────────── */\r\n\r\nasync function _fetchLatest(pkg) {\r\n return new Promise((resolve) => {\r\n let resolved = false;\r\n const done = (v) => { if (!resolved) { resolved = true; resolve(v); } };\r\n\r\n const timeout = setTimeout(() => done(null), 3_000);\r\n\r\n try {\r\n const https = _require('https');\r\n const req = https.get(\r\n `https://registry.npmjs.org/${encodeURIComponent(pkg)}/latest`,\r\n { headers: { 'Accept': 'application/json', 'User-Agent': `${pkg}/${_currentVersion}` } },\r\n (res) => {\r\n let body = '';\r\n res.setEncoding('utf8');\r\n res.on('data', d => body += d);\r\n res.on('end', () => {\r\n clearTimeout(timeout);\r\n try { done(JSON.parse(body).version ?? null); } catch { done(null); }\r\n });\r\n }\r\n );\r\n req.on('error', () => { clearTimeout(timeout); done(null); });\r\n req.end();\r\n } catch {\r\n clearTimeout(timeout);\r\n done(null);\r\n }\r\n });\r\n}\r\n\r\n// Lazy require for Node.js https module (avoids bundler issues)\r\nfunction _require(m) {\r\n return createRequire(import.meta.url)(m);\r\n}\r\n\r\n/* ─── checkForUpdate ─────────────────────────────────────────────────────── */\r\n\r\n/**\r\n * Check npm for a newer version of @svrnsec/pulse.\r\n * Call once at process startup — the result is shown before process exit\r\n * (or immediately if already resolved).\r\n *\r\n * @param {object} [opts]\r\n * @param {boolean} [opts.silent=false] suppress output even when update exists\r\n * @param {string} [opts.pkg='@svrnsec/pulse']\r\n * @returns {Promise<{ current: string, latest: string|null, updateAvailable: boolean }>}\r\n */\r\nexport async function checkForUpdate(opts = {}) {\r\n const { silent = false, pkg = '@svrnsec/pulse' } = opts;\r\n\r\n if (!isNode()) return { current: _currentVersion, latest: null, updateAvailable: false };\r\n\r\n const latest = await _fetchLatest(pkg);\r\n const updateAvailable = latest != null && _semverGt(latest, _currentVersion);\r\n\r\n if (updateAvailable && !silent && isTTY()) {\r\n _showUpdateBox(_currentVersion, latest, pkg);\r\n }\r\n\r\n return { current: _currentVersion, latest, updateAvailable };\r\n}\r\n\r\n/* ─── notifyOnExit ───────────────────────────────────────────────────────── */\r\n\r\nlet _notifyRegistered = false;\r\n\r\n/**\r\n * Register a one-time process 'exit' listener that prints the update notice\r\n * after your application's own output has finished. This is the least\r\n * intrusive way to show the notification.\r\n *\r\n * Called automatically by the package initialiser — you do not need to call\r\n * this manually unless you want to control the timing.\r\n *\r\n * @param {object} [opts]\r\n * @param {string} [opts.pkg='@svrnsec/pulse']\r\n */\r\nexport function notifyOnExit(opts = {}) {\r\n if (!isNode() || _notifyRegistered) return;\r\n _notifyRegistered = true;\r\n\r\n const pkg = opts.pkg ?? '@svrnsec/pulse';\r\n let _latest = null;\r\n\r\n // Start the background check immediately\r\n _fetchLatest(pkg).then(v => { _latest = v; }).catch(() => {});\r\n\r\n // Show the box just before the process exits (after all user output)\r\n process.on('exit', () => {\r\n if (_latest && _semverGt(_latest, _currentVersion) && isTTY()) {\r\n _showUpdateBox(_currentVersion, _latest, pkg);\r\n }\r\n });\r\n}\r\n\r\n/* ─── banner ─────────────────────────────────────────────────────────────── */\r\n\r\n/**\r\n * Print the @svrnsec/pulse ASCII banner to stderr.\r\n * Called once at package initialisation in Node.js environments.\r\n */\r\nexport function printBanner() {\r\n if (!isNode() || !isTTY()) return;\r\n\r\n const v = ft(C.bgray, `v${_currentVersion}`);\r\n const tag = ft(C.bmagenta + C.bold, 'SVRN');\r\n const pkg = ft(C.bwhite + C.bold, ':PULSE');\r\n\r\n process.stderr.write(\r\n '\\n' +\r\n ft(C.bgray, ' ┌─────────────────────────────────────┐') + '\\n' +\r\n ft(C.bgray, ' │') + ` ${tag}${pkg} ` + ft(C.bgray, '─ Physical Turing Test │') + '\\n' +\r\n ft(C.bgray, ' │') + ` ${ft(C.bgray, 'Hardware-Biological Symmetry Protocol')} ` + ft(C.bgray, '│') + '\\n' +\r\n ft(C.bgray, ' │') + ` ${ft(C.bcyan, 'npm i @svrnsec/pulse')} ${' '.repeat(16)}${v} ` + ft(C.bgray, '│') + '\\n' +\r\n ft(C.bgray, ' └─────────────────────────────────────┘') + '\\n\\n'\r\n );\r\n}\r\n\r\n/* ─── _showUpdateBox ─────────────────────────────────────────────────────── */\r\n\r\nfunction _showUpdateBox(current, latest, pkg) {\r\n const arrow = ft(C.bgray, '→');\r\n const oldV = ft(C.bred, current);\r\n const newV = ft(C.bgreen + C.bold, latest);\r\n const cmd = ft(C.bcyan + C.bold, `npm i ${pkg}@latest`);\r\n const notice = ft(C.byellow + C.bold, ' UPDATE AVAILABLE ');\r\n\r\n _box([\r\n notice,\r\n '',\r\n ` ${oldV} ${arrow} ${newV}`,\r\n '',\r\n ` Run: ${cmd}`,\r\n '',\r\n ft(C.bgray, ` Changelog: https://github.com/ayronny14-alt/Svrn-Pulse-Security/releases`),\r\n ], { borderColor: C.byellow });\r\n}\r\n\r\n/* ─── ANSI utilities ─────────────────────────────────────────────────────── */\r\n\r\n// Measure visible length of string (strip ANSI escape codes)\r\nfunction _visLen(s) {\r\n return _stripAnsi(s).length;\r\n}\r\n\r\nfunction _stripAnsi(s) {\r\n // eslint-disable-next-line no-control-regex\r\n return s.replace(/\\x1b\\[[0-9;]*m/g, '');\r\n}\r\n","/**\r\n * @svrnsec/pulse — Cross-Metric Heuristic Engine\r\n *\r\n * Instead of checking individual thresholds in isolation, this module looks\r\n * at the *relationships* between metrics. A sophisticated adversary can spoof\r\n * any single number. Spoofing six metrics so they remain mutually consistent\r\n * with physical laws is exponentially harder.\r\n *\r\n * Three core insights drive this engine:\r\n *\r\n * 1. Entropy-Jitter Coherence\r\n * Real silicon gets noisier as it heats up. Under sustained load, the\r\n * Quantization Entropy of the timing distribution grows because thermal\r\n * fluctuations add variance. A VM's hypervisor clock doesn't care about\r\n * guest temperature — its entropy is flat across all load phases.\r\n *\r\n * 2. Hurst-Autocorrelation Coherence\r\n * Genuine Brownian noise has Hurst ≈ 0.5 and near-zero autocorrelation\r\n * at all lags. These two values are physically linked. If they diverge —\r\n * high autocorrelation but Hurst near 0.5, or vice versa — the timings\r\n * were generated, not measured.\r\n *\r\n * 3. CV-Entropy Coherence\r\n * High variance (CV) must come from somewhere. On real hardware, high CV\r\n * means the timing distribution is spread out, which also means high\r\n * entropy. A VM that inflates CV without inflating entropy (e.g. by\r\n * adding synthetic outliers at fixed offsets) produces a coherence gap.\r\n */\r\n\r\nimport { detectQuantizationEntropy } from './jitter.js';\r\n\r\n// ---------------------------------------------------------------------------\r\n// runHeuristicEngine\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * @param {object} p\r\n * @param {import('./jitter.js').JitterAnalysis} p.jitter\r\n * @param {object|null} p.phases - from entropy collector\r\n * @param {object} p.autocorrelations\r\n * @returns {HeuristicReport}\r\n */\r\nexport function runHeuristicEngine({ jitter, phases, autocorrelations }) {\r\n const findings = [];\r\n const bonuses = [];\r\n let penalty = 0; // accumulated penalty [0, 1]\r\n let bonus = 0; // accumulated bonus [0, 1]\r\n let hardOverride = null; // 'vm' | null — bypasses score entirely when set\r\n\r\n const stats = jitter.stats;\r\n if (!stats) return _empty();\r\n\r\n // ── 1. Entropy-Jitter Ratio (phases required) ────────────────────────────\r\n let entropyJitterRatio = null;\r\n let entropyJitterScore = 0.5; // neutral if no phased data\r\n\r\n if (phases) {\r\n entropyJitterRatio = phases.entropyJitterRatio;\r\n\r\n const coldQE = phases.cold?.qe ?? null;\r\n const hotQE = phases.hot?.qe ?? null;\r\n\r\n // ── HARD KILL: Phase trajectory mathematical contradiction ──────────────\r\n //\r\n // EJR is defined as: entropyJitterRatio = hot_QE / cold_QE\r\n //\r\n // Before trusting any EJR value, verify it is internally consistent with\r\n // the QE measurements it purports to summarise. Two forgery vectors exist:\r\n //\r\n // Attack A — EJR field overwritten independently:\r\n // Attacker sets entropyJitterRatio = 1.15 to claim thermal growth,\r\n // but leaves cold_QE = 3.50, hot_QE = 3.00 unchanged.\r\n // Computed EJR = 3.00 / 3.50 = 0.857.\r\n // Discrepancy 1.15 − 0.857 = 0.293 >> 0.005 tolerance → HARD KILL.\r\n //\r\n // Attack B — QE values also faked but left inconsistent:\r\n // Attacker overwrites both QE fields carelessly: cold_QE = 3.5,\r\n // hot_QE = 3.0, but EJR = 1.15 is still written.\r\n // cold_QE ≥ hot_QE with EJR ≥ 1.08 is a mathematical impossibility —\r\n // if hot ≤ cold then hot/cold ≤ 1.0, which can never be ≥ 1.08.\r\n //\r\n // Tolerance of 0.005 accounts for floating-point rounding in the entropy\r\n // collector (detectQuantizationEntropy uses discrete histogram bins).\r\n //\r\n // When HARD KILL fires:\r\n // • hardOverride = 'vm' — fingerprint.js short-circuits isSynthetic\r\n // • entropyJitterScore = 0.0 — no EJR contribution to stage-2 bonus\r\n // • penalty += 1.0 — overwhelms the physical floor cap\r\n // • No further EJR evaluation runs (the data cannot be trusted)\r\n // • The physical floor protection is explicitly bypassed (see aggregate)\r\n\r\n if (coldQE !== null && hotQE !== null) {\r\n const computedEJR = coldQE > 0 ? hotQE / coldQE : null;\r\n const fieldTampered = computedEJR !== null &&\r\n Math.abs(entropyJitterRatio - computedEJR) > 0.005;\r\n const qeContradicts = entropyJitterRatio >= 1.08 && coldQE >= hotQE;\r\n\r\n if (fieldTampered || qeContradicts) {\r\n hardOverride = 'vm';\r\n entropyJitterScore = 0.0;\r\n findings.push({\r\n id: 'EJR_PHASE_HARD_KILL',\r\n label: fieldTampered\r\n ? 'HARD KILL: stored EJR is inconsistent with cold/hot QE values — phase data tampered'\r\n : 'HARD KILL: EJR ≥ 1.08 claims entropy growth but cold_QE ≥ hot_QE — physically impossible',\r\n detail: `ejr_stored=${entropyJitterRatio.toFixed(4)} ` +\r\n `ejr_computed=${computedEJR?.toFixed(4) ?? 'n/a'} ` +\r\n `cold_QE=${coldQE.toFixed(4)} hot_QE=${hotQE.toFixed(4)} ` +\r\n `delta=${computedEJR != null ? Math.abs(entropyJitterRatio - computedEJR).toFixed(4) : 'n/a'}`,\r\n severity: 'critical',\r\n penalty: 1.0,\r\n });\r\n penalty += 1.0;\r\n\r\n } else {\r\n // QE values confirmed consistent — proceed with normal EJR evaluation.\r\n _evaluateEJR(entropyJitterRatio, coldQE, hotQE, findings, bonuses,\r\n (p) => { penalty += p; }, (b) => { bonus += b; },\r\n (s) => { entropyJitterScore = s; });\r\n }\r\n\r\n } else {\r\n // QE values unavailable — evaluate EJR ratio in isolation.\r\n _evaluateEJR(entropyJitterRatio, null, null, findings, bonuses,\r\n (p) => { penalty += p; }, (b) => { bonus += b; },\r\n (s) => { entropyJitterScore = s; });\r\n }\r\n\r\n // Phase mean drift: real CPU heats up → iterations get slower.\r\n // Only apply if hard kill wasn't already triggered.\r\n if (!hardOverride) {\r\n const coldToHotDrift = (phases.hot?.mean ?? 0) - (phases.cold?.mean ?? 0);\r\n if (coldToHotDrift > 0.05) {\r\n bonuses.push({\r\n id: 'THERMAL_DRIFT_CONFIRMED',\r\n label: 'CPU mean timing increased from cold to hot phase (thermal drift)',\r\n detail: `cold=${phases.cold.mean.toFixed(3)}ms hot=${phases.hot.mean.toFixed(3)}ms Δ=${coldToHotDrift.toFixed(3)}ms`,\r\n value: 0.08,\r\n });\r\n bonus += 0.08;\r\n }\r\n }\r\n }\r\n\r\n // ── 2. Hurst-Autocorrelation Coherence ───────────────────────────────────\r\n const h = jitter.hurstExponent ?? 0.5;\r\n const ac1 = Math.abs(autocorrelations?.lag1 ?? 0);\r\n const ac5 = Math.abs(autocorrelations?.lag5 ?? 0);\r\n const ac50 = Math.abs(autocorrelations?.lag50 ?? 0);\r\n\r\n // Physical law: Brownian noise (H≈0.5) must have low autocorrelation.\r\n // Divergence between these two means the data wasn't generated by physics.\r\n const hurstExpectedAC = Math.abs(2 * h - 1); // theoretical max |autocorr| for given H\r\n const actualAC = (ac1 + ac5) / 2;\r\n const acHurstDivergence = Math.abs(actualAC - hurstExpectedAC);\r\n\r\n if (acHurstDivergence > 0.35) {\r\n findings.push({\r\n id: 'HURST_AUTOCORR_INCOHERENT',\r\n label: 'Hurst exponent and autocorrelation are physically inconsistent',\r\n detail: `H=${h.toFixed(3)} expected_AC≈${hurstExpectedAC.toFixed(3)} actual_AC=${actualAC.toFixed(3)} divergence=${acHurstDivergence.toFixed(3)}`,\r\n severity: 'high',\r\n penalty: 0.12,\r\n });\r\n penalty += 0.12;\r\n } else if (h > 0.45 && h < 0.55 && ac1 < 0.15) {\r\n // Ideal Brownian + low autocorr — physically coherent\r\n bonuses.push({\r\n id: 'BROWNIAN_COHERENCE_CONFIRMED',\r\n label: 'Hurst ≈ 0.5 and autocorrelation near zero — genuine Brownian noise',\r\n detail: `H=${h.toFixed(3)} lag1_AC=${ac1.toFixed(3)}`,\r\n value: 0.10,\r\n });\r\n bonus += 0.10;\r\n }\r\n\r\n // ── 3. CV-Entropy Coherence ───────────────────────────────────────────────\r\n // High CV should correlate with high QE. If CV is high but QE is low,\r\n // the variance was added artificially (fixed-offset outliers, synthetic spikes).\r\n const cv = stats.cv;\r\n const qe = jitter.quantizationEntropy;\r\n\r\n // Expected QE given CV, assuming roughly normal distribution\r\n // Normal dist with σ/μ = CV: entropy ≈ log2(σ * sqrt(2πe)) + log2(n/binWidth)\r\n // We use a simplified linear proxy calibrated against real benchmarks.\r\n const expectedQE = Math.max(0, 1.5 + cv * 16); // empirical: CV=0.15 → QE≈3.9\r\n const qeDivergence = expectedQE - qe; // positive = QE lower than expected\r\n\r\n if (qeDivergence > 1.8 && cv > 0.05) {\r\n // High variance but low entropy: synthetic outliers at fixed offsets\r\n findings.push({\r\n id: 'CV_ENTROPY_INCOHERENT',\r\n label: 'High CV but low entropy — variance appears synthetic (fixed-offset outliers)',\r\n detail: `CV=${cv.toFixed(4)} QE=${qe.toFixed(3)} bits expected_QE≈${expectedQE.toFixed(3)} gap=${qeDivergence.toFixed(3)}`,\r\n severity: 'high',\r\n penalty: 0.10,\r\n });\r\n penalty += 0.10;\r\n } else if (qeDivergence < 0.5 && cv > 0.08) {\r\n // CV and QE are coherent — timings come from a real distribution\r\n bonuses.push({\r\n id: 'CV_ENTROPY_COHERENT',\r\n label: 'Variance and entropy are physically coherent',\r\n detail: `CV=${cv.toFixed(4)} QE=${qe.toFixed(3)} expected≈${expectedQE.toFixed(3)}`,\r\n value: 0.06,\r\n });\r\n bonus += 0.06;\r\n }\r\n\r\n // ── 4. Steal-time periodicity (the \"Picket Fence\" detector) ─────────────\r\n // VM steal-time bursts create a periodic signal in the autocorrelation.\r\n // If lag-50 autocorrelation is significantly higher than lag-5,\r\n // the scheduler quantum is approximately 50× the mean iteration time.\r\n const picketFence = _detectPicketFence(autocorrelations);\r\n if (picketFence.detected) {\r\n findings.push({\r\n id: 'PICKET_FENCE_DETECTED',\r\n label: `\"Picket Fence\" steal-time rhythm detected at lag ${picketFence.dominantLag}`,\r\n detail: picketFence.detail,\r\n severity: 'high',\r\n penalty: 0.08,\r\n });\r\n penalty += 0.08;\r\n }\r\n\r\n // ── 5. Skewness-Kurtosis coherence ───────────────────────────────────────\r\n // Real hardware timing is right-skewed (occasional slow outliers from OS preemption).\r\n // VMs that add synthetic outliers at fixed offsets produce wrong skew/kurtosis.\r\n const skew = stats.skewness ?? 0;\r\n const kurt = stats.kurtosis ?? 0;\r\n\r\n if (skew > 0.3 && kurt > 0) {\r\n // Right-skewed, leptokurtic — consistent with OS preemption on real hardware\r\n bonuses.push({\r\n id: 'NATURAL_SKEW_CONFIRMED',\r\n label: 'Right-skewed distribution with positive kurtosis — OS preemption pattern',\r\n detail: `skew=${skew.toFixed(3)} kurtosis=${kurt.toFixed(3)}`,\r\n value: 0.06,\r\n });\r\n bonus += 0.06;\r\n } else if (skew < 0 && Math.abs(kurt) > 1) {\r\n // Negative skew with high kurtosis: inconsistent with physical timing noise\r\n findings.push({\r\n id: 'SKEW_KURTOSIS_ANOMALY',\r\n label: 'Left-skewed distribution — inconsistent with natural hardware timing',\r\n detail: `skew=${skew.toFixed(3)} kurtosis=${kurt.toFixed(3)}`,\r\n severity: 'medium',\r\n penalty: 0.06,\r\n });\r\n penalty += 0.06;\r\n }\r\n\r\n // ── Physical floor protection (anti-compounding) ──────────────────────────\r\n // When the three PRIMARY timing metrics are clearly consistent with real\r\n // silicon, cap the penalty so that marginal secondary signals (weak Picket\r\n // Fence, mild EJR, slight skew anomaly) cannot compound into a rejection.\r\n //\r\n // Why: a modern i7 laptop running heavy browser extensions may show:\r\n // EJR = 1.01 → -0.10 penalty (just under the 1.02 threshold)\r\n // lag50 = 0.31 → picket fence → -0.08 penalty (background process rhythm)\r\n // slight negative skew → -0.06 penalty\r\n // total: -0.24, drops score from 0.73 → 0.49 → wrongly flagged as synthetic\r\n //\r\n // Solution: if ≥ 2 of the 3 primary metrics are unambiguously physical,\r\n // treat the device as \"probably physical with some noise\" and limit the\r\n // penalty to 0.22 (enough to lower confidence but not enough to reject).\r\n const clearQE = jitter.quantizationEntropy > 3.2;\r\n const clearCV = stats.cv >= 0.05 && stats.cv <= 0.30;\r\n const clearLag1 = Math.abs(autocorrelations?.lag1 ?? 1) < 0.22;\r\n const clearPhysicalCount = [clearQE, clearCV, clearLag1].filter(Boolean).length;\r\n\r\n // Also check: if at least one metric is a HARD VM indicator (QE < 2.0 or\r\n // lag1 > 0.65), override the floor — the floor is for borderline noise, not\r\n // for devices that are clearly VMs on at least one axis.\r\n const hardVmSignal =\r\n jitter.quantizationEntropy < 2.0 ||\r\n Math.abs(autocorrelations?.lag1 ?? 0) > 0.65;\r\n\r\n const penaltyCap = (!hardVmSignal && clearPhysicalCount >= 2)\r\n ? 0.22 // physical floor: cap compounding for clearly physical devices\r\n : 0.60; // default: full penalty range for ambiguous or VM-like signals\r\n\r\n // HARD KILL overrides the physical floor protection entirely.\r\n // The floor was designed to protect legitimate hardware with multiple\r\n // marginal-but-honest signals — it must never shelter a forged proof.\r\n const totalPenalty = hardOverride === 'vm'\r\n ? Math.min(1.0, penalty) // hard kill: uncapped, overwhelms all bonuses\r\n : Math.min(penaltyCap, penalty); // normal: apply floor protection\r\n\r\n // When a hard kill is active, strip all bonuses — they were earned on\r\n // data that has been proved untrustworthy.\r\n const totalBonus = hardOverride === 'vm' ? 0 : Math.min(0.35, bonus);\r\n\r\n return {\r\n penalty: totalPenalty,\r\n bonus: totalBonus,\r\n netAdjustment: totalBonus - totalPenalty,\r\n findings,\r\n bonuses: hardOverride === 'vm' ? [] : bonuses,\r\n entropyJitterRatio,\r\n entropyJitterScore,\r\n picketFence,\r\n hardOverride,\r\n coherenceFlags: findings.map(f => f.id),\r\n };\r\n}\r\n\r\n/**\r\n * @typedef {object} HeuristicReport\r\n * @property {number} penalty - total score penalty [0, 1.0]\r\n * @property {number} bonus - total score bonus [0, 0.35]\r\n * @property {number} netAdjustment - bonus - penalty\r\n * @property {object[]} findings - detected anomalies\r\n * @property {object[]} bonuses - confirmed physical properties\r\n * @property {number|null} entropyJitterRatio\r\n * @property {'vm'|null} hardOverride - set when a mathematical impossibility is detected\r\n * @property {object} picketFence\r\n * @property {string[]} coherenceFlags\r\n */\r\n\r\n// ---------------------------------------------------------------------------\r\n// EJR evaluation helper (extracted so it can run with or without QE values)\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Applies the normal EJR classification logic (called only after the hard-kill\r\n * check passes, meaning the EJR value has been verified as consistent).\r\n */\r\nfunction _evaluateEJR(ejr, coldQE, hotQE, findings, bonuses, addPenalty, addBonus, setScore) {\r\n const qeDetail = coldQE != null\r\n ? `cold_QE=${coldQE.toFixed(3)} hot_QE=${hotQE.toFixed(3)}`\r\n : '';\r\n\r\n if (ejr >= 1.08) {\r\n setScore(1.0);\r\n bonuses.push({\r\n id: 'ENTROPY_GROWS_WITH_LOAD',\r\n label: 'Entropy grew under load — thermal feedback confirmed',\r\n detail: `ratio=${ejr.toFixed(3)} ${qeDetail}`,\r\n value: 0.12,\r\n });\r\n addBonus(0.12);\r\n\r\n } else if (ejr >= 1.02) {\r\n setScore(0.7);\r\n findings.push({\r\n id: 'ENTROPY_MILD_GROWTH',\r\n label: 'Weak entropy growth under load',\r\n detail: `ratio=${ejr.toFixed(3)} ${qeDetail}`,\r\n severity: 'info',\r\n penalty: 0,\r\n });\r\n\r\n } else if (ejr > 0.95) {\r\n // Flat entropy — hypervisor clock unresponsive to guest load\r\n setScore(0.2);\r\n findings.push({\r\n id: 'ENTROPY_FLAT_UNDER_LOAD',\r\n label: 'Entropy did not grow under load — hypervisor clock suspected',\r\n detail: `ratio=${ejr.toFixed(3)} (expected ≥ 1.08 for real hardware) ${qeDetail}`,\r\n severity: 'high',\r\n penalty: 0.10,\r\n });\r\n addPenalty(0.10);\r\n\r\n } else {\r\n // Entropy DECREASED — hypervisor clock rounding became more aggressive\r\n setScore(0.0);\r\n findings.push({\r\n id: 'ENTROPY_DECREASES_UNDER_LOAD',\r\n label: 'Entropy shrank under load — hypervisor clock-rounding confirmed',\r\n detail: `ratio=${ejr.toFixed(3)} (clock rounding more aggressive at high load) ${qeDetail}`,\r\n severity: 'critical',\r\n penalty: 0.18,\r\n });\r\n addPenalty(0.18);\r\n }\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Picket Fence detector\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Detects periodic steal-time bursts by finding the lag with the highest\r\n * autocorrelation beyond lag-5. A strong periodic peak indicates the\r\n * hypervisor is scheduling the guest on a fixed quantum.\r\n *\r\n * Named \"Picket Fence\" because of how the timing histogram looks: dense\r\n * clusters at fixed intervals with empty space between them — like fence posts.\r\n */\r\nfunction _detectPicketFence(autocorrelations) {\r\n const longLags = [10, 25, 50].map(l => ({\r\n lag: l,\r\n ac: Math.abs(autocorrelations?.[`lag${l}`] ?? 0),\r\n }));\r\n\r\n const shortBaseline = (Math.abs(autocorrelations?.lag5 ?? 0) +\r\n Math.abs(autocorrelations?.lag3 ?? 0)) / 2;\r\n\r\n const peak = longLags.reduce((best, cur) =>\r\n cur.ac > best.ac ? cur : best, { lag: 0, ac: 0 });\r\n\r\n // \"Picket fence\" condition: a long-lag autocorr significantly exceeds baseline\r\n if (peak.ac > 0.30 && peak.ac > shortBaseline + 0.20) {\r\n return {\r\n detected: true,\r\n dominantLag: peak.lag,\r\n peakAC: peak.ac,\r\n baseline: shortBaseline,\r\n detail: `lag${peak.lag}_AC=${peak.ac.toFixed(3)} baseline_AC=${shortBaseline.toFixed(3)} ` +\r\n `estimated_quantum≈${(peak.lag * 5).toFixed(0)}ms (at 5ms/iter)`,\r\n };\r\n }\r\n\r\n return { detected: false, dominantLag: null, peakAC: peak.ac, baseline: shortBaseline, detail: '' };\r\n}\r\n\r\nfunction _empty() {\r\n return {\r\n penalty: 0, bonus: 0, netAdjustment: 0,\r\n findings: [], bonuses: [],\r\n entropyJitterRatio: null, entropyJitterScore: 0.5,\r\n hardOverride: null,\r\n picketFence: { detected: false },\r\n coherenceFlags: [],\r\n };\r\n}\r\n","/**\r\n * @svrnsec/pulse — Zero-Latency Second-Stage Coherence Analysis\r\n *\r\n * Runs entirely on data already collected by the entropy probe, bio\r\n * collector, canvas fingerprinter, and audio analyser.\r\n * Adds approximately 1–3 ms of CPU time. Zero WASM, zero network.\r\n *\r\n * Architecture:\r\n * Stage 1 — classifyJitter() → rawScore [0, 1]\r\n * Stage 2 — runHeuristicEngine() → netAdjustment (physics coherence)\r\n * Stage 3 — runCoherenceAnalysis() → THIS MODULE\r\n * ↳ small score refinement [-0.15, +0.18]\r\n * ↳ dynamic threshold [0.55, 0.67]\r\n * ↳ hard override 'vm' | null\r\n *\r\n * Why a third stage?\r\n * Stage 1 checks individual metrics in isolation.\r\n * Stage 2 checks pairwise relationships between metrics.\r\n * Stage 3 checks STRUCTURAL properties of the entire time-series and\r\n * signal evolution that require the full dataset to evaluate — and that\r\n * a sophisticated attacker cannot spoof without also spoofing every\r\n * other correlated signal simultaneously.\r\n *\r\n * The six checks cover orthogonal signal dimensions so they are hard to\r\n * spoof together even if one is individually defeated:\r\n *\r\n * 1. Timing distinctness — frequency domain (quantization density)\r\n * 2. AC decay shape — temporal domain (Brownian vs harmonic)\r\n * 3. Chunk CV stability — stationarity axis (thermal non-stationarity)\r\n * 4. Level-dependent noise — noise model axis (multiplicative vs additive)\r\n * 5. Batch convergence — measurement stability (adaptive mode)\r\n * 6. Phase trajectory — EJR monotonicity (thermal sequence integrity)\r\n *\r\n * Dynamic threshold:\r\n * The evidence weight reflects how much data was actually collected.\r\n * An early-exit proof with 50 iterations and no bio activity has far less\r\n * support than a 200-iteration proof with bio, audio, and phased data.\r\n * The threshold rises automatically as evidence decreases:\r\n * Full evidence → threshold 0.55 (standard)\r\n * Minimal proof → threshold 0.67 (conservative gate)\r\n * This prevents low-evidence proofs from passing the same bar as full ones.\r\n */\r\n\r\n// ---------------------------------------------------------------------------\r\n// runCoherenceAnalysis\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * @param {object} p\r\n * @param {number[]} p.timings — raw timing array (already collected)\r\n * @param {object} p.jitter — JitterAnalysis from classifyJitter()\r\n * @param {object|null} p.phases — phased entropy result (optional)\r\n * @param {object[]|null} p.batches — adaptive batch snapshots (optional)\r\n * @param {object} p.bio — bio snapshot\r\n * @param {object} p.canvas — canvas fingerprint\r\n * @param {object} p.audio — audio jitter result\r\n * @returns {CoherenceReport}\r\n */\r\nexport function runCoherenceAnalysis({ timings, jitter, phases, batches, bio, canvas, audio }) {\r\n if (!timings || timings.length < 10) {\r\n // Insufficient data — return a conservative threshold and no adjustments.\r\n return _empty(0.64);\r\n }\r\n\r\n const checks = []; // anomalies found (each may carry a penalty)\r\n const bonuses = []; // physical properties confirmed (each carries a bonus)\r\n let penalty = 0;\r\n let bonus = 0;\r\n let hardOverride = null; // 'vm' | null\r\n\r\n const n = timings.length;\r\n const ac = jitter.autocorrelations ?? {};\r\n\r\n // ── Check 1: Timing Distinctness Ratio ──────────────────────────────────────\r\n // VM quantized timers repeat the same integer-millisecond values.\r\n // Real silicon at sub-ms resolution produces mostly unique values.\r\n //\r\n // Bin width: 0.2 ms (matches detectQuantizationEntropy for consistency).\r\n // Normalized by sample count → iteration-count-independent.\r\n //\r\n // distinctRatio > 0.65 → sub-ms resolution confirmed → physical bonus\r\n // distinctRatio < 0.30 → heavy quantization → VM penalty\r\n // distinctRatio < 0.45 at n ≥ 100 → mild VM penalty\r\n {\r\n const bins = new Set(timings.map(t => Math.round(t / 0.2)));\r\n const distinctRatio = bins.size / n;\r\n\r\n if (n >= 50) {\r\n if (distinctRatio > 0.65) {\r\n bonuses.push({\r\n id: 'HIGH_TIMING_DISTINCTNESS',\r\n label: 'Timer produces mostly unique values — sub-ms resolution confirmed',\r\n detail: `ratio=${distinctRatio.toFixed(3)} (${bins.size}/${n} distinct 0.2ms bins)`,\r\n value: 0.06,\r\n });\r\n bonus += 0.06;\r\n\r\n } else if (distinctRatio < 0.30) {\r\n // Severely quantized — VM with integer-ms timer emulation\r\n checks.push({\r\n id: 'LOW_TIMING_DISTINCTNESS',\r\n label: 'Heavy timer quantization — integer-ms VM timer suspected',\r\n detail: `ratio=${distinctRatio.toFixed(3)} (only ${bins.size}/${n} distinct 0.2ms bins)`,\r\n severity: 'high',\r\n penalty: 0.12,\r\n });\r\n penalty += 0.12;\r\n\r\n } else if (distinctRatio < 0.45 && n >= 100) {\r\n // At 100+ iterations we expect more spread; below 0.45 is suspicious\r\n checks.push({\r\n id: 'BORDERLINE_TIMING_DISTINCTNESS',\r\n label: 'Below-expected timer resolution — coarse-grained timer suspected',\r\n detail: `ratio=${distinctRatio.toFixed(3)} at n=${n}`,\r\n severity: 'medium',\r\n penalty: 0.05,\r\n });\r\n penalty += 0.05;\r\n }\r\n }\r\n }\r\n\r\n // ── Check 2: Autocorrelation Decay Shape ────────────────────────────────────\r\n // Genuine Brownian noise decays monotonically: lag1 > lag2 > lag5 > lag10 > …\r\n // VM scheduler rhythms create harmonic revivals: lag25 or lag50 elevated\r\n // above lag10 because steal-time bursts recur at the scheduler quantum period.\r\n //\r\n // This is structurally orthogonal to the Picket Fence detector (stage 2),\r\n // which checks absolute magnitude — this checks the SHAPE of the decay curve.\r\n {\r\n const l1 = Math.abs(ac.lag1 ?? 0);\r\n const l2 = Math.abs(ac.lag2 ?? 0);\r\n const l3 = Math.abs(ac.lag3 ?? 0);\r\n const l5 = Math.abs(ac.lag5 ?? 0);\r\n const l10 = Math.abs(ac.lag10 ?? 0);\r\n const l25 = Math.abs(ac.lag25 ?? 0);\r\n const l50 = Math.abs(ac.lag50 ?? 0);\r\n\r\n // Strict Brownian decay: each successive lag is no higher than the previous\r\n // (+0.03 tolerance for estimation noise)\r\n const isBrownianDecay =\r\n l1 < 0.20 &&\r\n l2 <= l1 + 0.03 &&\r\n l5 <= l2 + 0.03 &&\r\n l10 <= l5 + 0.03 &&\r\n l25 <= l10 + 0.05 &&\r\n l50 <= l10 + 0.05;\r\n\r\n // Harmonic revival: a long lag significantly exceeds medium lags\r\n // (scheduler quantum footprint)\r\n const revival25 = l25 > l5 + 0.12 && l25 > 0.18;\r\n const revival50 = l50 > l5 + 0.12 && l50 > 0.18;\r\n\r\n if (isBrownianDecay && l1 < 0.15) {\r\n bonuses.push({\r\n id: 'BROWNIAN_DECAY_SHAPE',\r\n label: 'AC decays monotonically at all measured lags — genuine Brownian noise structure',\r\n detail: `lag1=${l1.toFixed(3)} lag3=${l3.toFixed(3)} lag5=${l5.toFixed(3)} lag10=${l10.toFixed(3)} lag50=${l50.toFixed(3)}`,\r\n value: 0.09,\r\n });\r\n bonus += 0.09;\r\n }\r\n\r\n if (revival25 || revival50) {\r\n const peakLag = revival25 ? 25 : 50;\r\n const peakVal = revival25 ? l25 : l50;\r\n checks.push({\r\n id: 'HARMONIC_AUTOCORR_REVIVAL',\r\n label: `Long-lag AC revival at lag ${peakLag} — VM scheduler harmonic footprint`,\r\n detail: `lag5=${l5.toFixed(3)} lag${peakLag}=${peakVal.toFixed(3)} Δ=${(peakVal - l5).toFixed(3)}`,\r\n severity: 'high',\r\n penalty: 0.10,\r\n });\r\n penalty += 0.10;\r\n }\r\n }\r\n\r\n // ── Check 3: Chunk CV Stability (temporal stationarity test) ─────────────────\r\n // Split the timing series into 4 equal windows and compute CV per window.\r\n // Real hardware: CV varies across chunks — CPU temperature changes, workload\r\n // varies, OS scheduling fluctuates — making the process non-stationary.\r\n // VM hypervisor: CV is nearly identical in every chunk because the hypervisor's\r\n // scheduling behaviour is constant — a stationary process.\r\n //\r\n // Metric: CV of the 4 chunk CVs (CV-of-CVs).\r\n // > 0.15 → non-stationary noise → physical bonus\r\n // < 0.06 → suspiciously constant → VM penalty\r\n if (n >= 40) {\r\n const chunkSize = Math.floor(n / 4);\r\n const chunkCVs = [];\r\n\r\n for (let c = 0; c < 4; c++) {\r\n const chunk = timings.slice(c * chunkSize, (c + 1) * chunkSize);\r\n const m = chunk.reduce((a, b) => a + b, 0) / chunk.length;\r\n const s = Math.sqrt(chunk.reduce((acc, v) => acc + (v - m) ** 2, 0) / chunk.length);\r\n if (m > 0) chunkCVs.push(s / m);\r\n }\r\n\r\n if (chunkCVs.length === 4) {\r\n const cvMean = chunkCVs.reduce((a, b) => a + b, 0) / 4;\r\n const cvStd = Math.sqrt(chunkCVs.reduce((s, v) => s + (v - cvMean) ** 2, 0) / 4);\r\n const cvOfCVs = cvMean > 1e-9 ? cvStd / cvMean : 0;\r\n\r\n if (cvOfCVs > 0.15) {\r\n bonuses.push({\r\n id: 'TEMPORAL_NON_STATIONARITY',\r\n label: 'Noise level varies across time windows — thermal non-stationarity confirmed',\r\n detail: `CV-of-CVs=${cvOfCVs.toFixed(3)} windows=[${chunkCVs.map(v => v.toFixed(3)).join(', ')}]`,\r\n value: 0.07,\r\n });\r\n bonus += 0.07;\r\n\r\n } else if (cvOfCVs < 0.06 && cvMean > 0.01) {\r\n checks.push({\r\n id: 'STATIONARY_NOISE_PROCESS',\r\n label: 'Noise level constant across all time windows — hypervisor stationarity suspected',\r\n detail: `CV-of-CVs=${cvOfCVs.toFixed(3)} windows=[${chunkCVs.map(v => v.toFixed(3)).join(', ')}]`,\r\n severity: 'high',\r\n penalty: 0.09,\r\n });\r\n penalty += 0.09;\r\n }\r\n }\r\n }\r\n\r\n // ── Check 4: Level-Dependent Volatility (noise model test) ──────────────────\r\n // Thermal noise is multiplicative: the physical process that adds jitter\r\n // (electron thermal motion, gate capacitance variation) scales with the\r\n // operating conditions that also drive longer execution times.\r\n // Consequence: larger timing values tend to have more incremental variance.\r\n // This produces a positive Pearson correlation between:\r\n // — timing[i] (level — how long that iteration took)\r\n // — |timing[i+1]-timing[i]| (volatility — how much it changed)\r\n //\r\n // VM hypervisor noise is additive: a constant scheduling jitter is applied\r\n // regardless of the iteration's timing level → near-zero correlation.\r\n //\r\n // r > 0.15 → multiplicative noise → physical bonus\r\n // r < 0.04 at n ≥ 80 → additive noise → VM penalty\r\n if (n >= 30) {\r\n const levels = timings.slice(0, n - 1);\r\n const deltas = timings.slice(1).map((v, i) => Math.abs(v - timings[i]));\r\n const lMean = levels.reduce((a, b) => a + b, 0) / levels.length;\r\n const dMean = deltas.reduce((a, b) => a + b, 0) / deltas.length;\r\n\r\n let cov = 0, lVar = 0, dVar = 0;\r\n for (let i = 0; i < levels.length; i++) {\r\n const ld = levels[i] - lMean;\r\n const dd = deltas[i] - dMean;\r\n cov += ld * dd;\r\n lVar += ld * ld;\r\n dVar += dd * dd;\r\n }\r\n const denom = Math.sqrt(lVar * dVar);\r\n const levelVolCorr = denom < 1e-14 ? 0 : cov / denom;\r\n\r\n if (levelVolCorr > 0.15) {\r\n bonuses.push({\r\n id: 'MULTIPLICATIVE_NOISE_MODEL',\r\n label: 'Timing variance scales with level — multiplicative thermal noise confirmed',\r\n detail: `level-volatility r=${levelVolCorr.toFixed(3)} (expected >0.15 for real silicon)`,\r\n value: 0.07,\r\n });\r\n bonus += 0.07;\r\n\r\n } else if (levelVolCorr < 0.04 && n >= 80) {\r\n // Enough samples to trust the estimate; near-zero = additive hypervisor noise\r\n checks.push({\r\n id: 'ADDITIVE_NOISE_MODEL',\r\n label: 'Timing variance independent of level — additive hypervisor noise suspected',\r\n detail: `level-volatility r=${levelVolCorr.toFixed(3)} (expected >0.15 for real silicon)`,\r\n severity: 'medium',\r\n penalty: 0.07,\r\n });\r\n penalty += 0.07;\r\n }\r\n }\r\n\r\n // ── Check 5: Batch Convergence Variance (adaptive mode only) ─────────────────\r\n // In adaptive mode each batch of 25 iterations produces a vmConf estimate.\r\n // Real hardware: these estimates wander batch-to-batch because the underlying\r\n // physical source is genuinely stochastic.\r\n // VM hypervisor: estimates lock in immediately — deterministic scheduling means\r\n // each batch produces essentially the same picture.\r\n //\r\n // Most diagnostic in the ambiguous zone (vmConf 0.25–0.70) where stability\r\n // is suspicious. A clearly obvious VM (vmConf 0.90 every batch) is expected\r\n // to be stable. A borderline device (vmConf 0.45 across 6 identical batches)\r\n // is exhibiting VM-like stability despite claiming ambiguity.\r\n //\r\n // Uses only batches collected after iteration 75 to avoid early-sample noise.\r\n if (batches && batches.length >= 4) {\r\n const stableBatches = batches.filter(b => b.iterations >= 75);\r\n\r\n if (stableBatches.length >= 3) {\r\n const vmConfs = stableBatches.map(b => b.vmConf);\r\n const hwConfs = stableBatches.map(b => b.hwConf);\r\n const vmMean = vmConfs.reduce((a, b) => a + b, 0) / vmConfs.length;\r\n const hwMean = hwConfs.reduce((a, b) => a + b, 0) / hwConfs.length;\r\n const vmStd = Math.sqrt(\r\n vmConfs.reduce((s, v) => s + (v - vmMean) ** 2, 0) / vmConfs.length\r\n );\r\n\r\n // Only meaningful in the ambiguous zone\r\n const isAmbiguous = vmMean > 0.25 && vmMean < 0.70 && hwMean < 0.55;\r\n\r\n if (isAmbiguous) {\r\n if (vmStd > 0.06) {\r\n bonuses.push({\r\n id: 'SIGNAL_FLUCTUATES_STOCHASTICALLY',\r\n label: 'Batch-by-batch signal variance confirms genuine stochastic noise source',\r\n detail: `vmConf σ=${vmStd.toFixed(3)} across ${stableBatches.length} stable batches (μ=${vmMean.toFixed(3)})`,\r\n value: 0.05,\r\n });\r\n bonus += 0.05;\r\n\r\n } else if (vmStd < 0.025 && stableBatches.length >= 4) {\r\n checks.push({\r\n id: 'SIGNAL_DETERMINISTICALLY_STABLE',\r\n label: 'Signal locked-in immediately — deterministic hypervisor suspected',\r\n detail: `vmConf σ=${vmStd.toFixed(3)} across ${stableBatches.length} stable batches (μ=${vmMean.toFixed(3)})`,\r\n severity: 'medium',\r\n penalty: 0.06,\r\n });\r\n penalty += 0.06;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // ── Check 6: Phase Entropy Trajectory ────────────────────────────────────────\r\n // The EJR (hot_QE / cold_QE) captures the endpoint ratio, but misses the\r\n // intermediate trajectory. We additionally verify monotonic growth:\r\n // cold_QE < load_QE < hot_QE\r\n //\r\n // If all three phases are available, monotonic growth is a strong bonus.\r\n // Non-monotonic trajectory (entropy dropped then recovered) is suspicious.\r\n //\r\n // HARD OVERRIDE: if EJR ≥ 1.08 (claims entropy grew from cold to hot)\r\n // but cold_QE ≥ hot_QE (entropy provably didn't grow), the proof is\r\n // mathematically self-contradictory → forgery attempt.\r\n if (phases) {\r\n const coldQE = phases.cold?.qe ?? null;\r\n const loadQE = phases.load?.qe ?? null;\r\n const hotQE = phases.hot?.qe ?? null;\r\n const ejr = phases.entropyJitterRatio ?? null;\r\n\r\n // Mathematical contradiction: EJR = hot_QE / cold_QE, so EJR ≥ 1.08\r\n // implies hot_QE ≥ 1.08 × cold_QE > cold_QE. Violation = tampered proof.\r\n if (ejr !== null && ejr >= 1.08 && coldQE !== null && hotQE !== null) {\r\n if (coldQE >= hotQE) {\r\n hardOverride = 'vm';\r\n checks.push({\r\n id: 'EJR_QE_CONTRADICTION',\r\n label: 'HARD OVERRIDE: EJR claims entropy growth but cold_QE ≥ hot_QE — mathematically impossible',\r\n detail: `ejr=${ejr.toFixed(4)} cold_QE=${coldQE.toFixed(3)} hot_QE=${hotQE.toFixed(3)} (ejr=hot/cold requires hot>cold)`,\r\n severity: 'critical',\r\n penalty: 0.60, // overwhelms any bonus\r\n });\r\n penalty += 0.60;\r\n }\r\n }\r\n\r\n // Monotonic trajectory check (requires all three phases)\r\n if (!hardOverride && coldQE !== null && loadQE !== null && hotQE !== null) {\r\n if (coldQE < loadQE && loadQE < hotQE) {\r\n bonuses.push({\r\n id: 'MONOTONIC_ENTROPY_TRAJECTORY',\r\n label: 'QE increased continuously cold→load→hot — unbroken thermal feedback confirmed',\r\n detail: `${coldQE.toFixed(3)} → ${loadQE.toFixed(3)} → ${hotQE.toFixed(3)}`,\r\n value: 0.09,\r\n });\r\n bonus += 0.09;\r\n\r\n } else if (coldQE >= loadQE || loadQE >= hotQE) {\r\n // Entropy stalled or reversed mid-run — unusual for real silicon\r\n checks.push({\r\n id: 'NON_MONOTONIC_ENTROPY_TRAJECTORY',\r\n label: 'Entropy did not increase monotonically across load phases',\r\n detail: `cold=${coldQE.toFixed(3)} load=${loadQE.toFixed(3)} hot=${hotQE.toFixed(3)}`,\r\n severity: 'medium',\r\n penalty: 0.06,\r\n });\r\n penalty += 0.06;\r\n }\r\n }\r\n }\r\n\r\n // ── Dynamic threshold ─────────────────────────────────────────────────────────\r\n // A proof built from more evidence earns a more permissive (lower) passing bar.\r\n // Weights:\r\n // iterations (0→200): up to 0.65 of the evidence score\r\n // phased collection: +0.15 (gold standard of thermal measurement)\r\n // bio activity: +0.10 (human presence confirmed)\r\n // audio available: +0.05 (additional timing channel)\r\n // canvas available: +0.05 (hardware renderer identified)\r\n //\r\n // dynamicThreshold = 0.55 + (1 − evidenceWeight) × 0.12\r\n // Full evidence → 0.55 (standard gate)\r\n // Minimal proof → 0.67 (tightened gate for low-evidence submissions)\r\n const iterFraction = Math.min(1.0, n / 200);\r\n const phasedBonus = phases ? 0.15 : 0.0;\r\n const bioBonus = bio?.hasActivity ? 0.10 : 0.0;\r\n const audioBonus = audio?.available ? 0.05 : 0.0;\r\n const canvasBonus = canvas?.available ? 0.05 : 0.0;\r\n\r\n const evidenceWeight = Math.min(1.0,\r\n iterFraction * 0.65 + phasedBonus + bioBonus + audioBonus + canvasBonus\r\n );\r\n\r\n const dynamicThreshold = +(0.55 + (1 - evidenceWeight) * 0.12).toFixed(4);\r\n\r\n // ── Stage-3 caps ─────────────────────────────────────────────────────────────\r\n // Stage 3 is a REFINEMENT, not the primary classifier. The caps are smaller\r\n // than stage 2 to prevent triple-compounding across all three stages on\r\n // legitimate hardware with multiple marginal-but-not-damning signals.\r\n const totalPenalty = Math.min(0.15, penalty); // hard floor: stage 3 can't reject alone\r\n const totalBonus = Math.min(0.18, bonus);\r\n\r\n return {\r\n penalty: totalPenalty,\r\n bonus: totalBonus,\r\n netAdjustment: +(totalBonus - totalPenalty).toFixed(4),\r\n checks,\r\n bonuses,\r\n hardOverride, // 'vm' | null\r\n dynamicThreshold, // [0.55, 0.67]\r\n evidenceWeight: +evidenceWeight.toFixed(4),\r\n coherenceFlags: checks.map(c => c.id),\r\n physicalFlags: bonuses.map(b => b.id),\r\n };\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// computeServerDynamicThreshold\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Server-side recomputation of the dynamic threshold.\r\n * The server NEVER trusts the client's dynamicThreshold value; it recomputes\r\n * from known payload fields.\r\n *\r\n * @param {object} payload - validated ProofPayload\r\n * @returns {number} - minimum passing score for this proof [0.50, 0.62]\r\n */\r\nexport function computeServerDynamicThreshold(payload) {\r\n const entropy = payload?.signals?.entropy;\r\n const bio = payload?.signals?.bio;\r\n const audio = payload?.signals?.audio;\r\n const canvas = payload?.signals?.canvas;\r\n\r\n const n = entropy?.iterations ?? 0;\r\n const hasPhases = payload?.heuristic?.entropyJitterRatio != null;\r\n const hasBio = bio?.hasActivity === true;\r\n const hasAudio = audio?.available === true;\r\n const hasCanvas = canvas?.available === true;\r\n\r\n const iterFraction = Math.min(1.0, n / 200);\r\n const evidenceWeight = Math.min(1.0,\r\n iterFraction * 0.65 +\r\n (hasPhases ? 0.15 : 0) +\r\n (hasBio ? 0.10 : 0) +\r\n (hasAudio ? 0.05 : 0) +\r\n (hasCanvas ? 0.05 : 0)\r\n );\r\n\r\n // Server threshold: [0.50, 0.62]\r\n // Slightly more lenient than client [0.55, 0.67] because the server already\r\n // applies minJitterScore as an independent check. The dynamic component\r\n // adds an ADDITIONAL evidence-proportional tightening on top.\r\n return +(0.50 + (1 - evidenceWeight) * 0.12).toFixed(4);\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Internal helpers\r\n// ---------------------------------------------------------------------------\r\n\r\nfunction _empty(threshold) {\r\n return {\r\n penalty: 0, bonus: 0, netAdjustment: 0,\r\n checks: [], bonuses: [],\r\n hardOverride: null,\r\n dynamicThreshold: threshold,\r\n evidenceWeight: 0,\r\n coherenceFlags: [],\r\n physicalFlags: [],\r\n };\r\n}\r\n\r\n/**\r\n * @typedef {object} CoherenceReport\r\n * @property {number} penalty - total score penalty [0, 0.15]\r\n * @property {number} bonus - total score bonus [0, 0.18]\r\n * @property {number} netAdjustment - bonus − penalty [-0.15, +0.18]\r\n * @property {object[]} checks - anomalies found (with penalty values)\r\n * @property {object[]} bonuses - physical properties confirmed\r\n * @property {'vm'|null} hardOverride - overrides score when set\r\n * @property {number} dynamicThreshold - computed passing threshold [0.55, 0.67]\r\n * @property {number} evidenceWeight - how much evidence was collected [0, 1]\r\n * @property {string[]} coherenceFlags - check IDs for logging\r\n * @property {string[]} physicalFlags - bonus IDs for logging\r\n */\r\n","/**\r\n * @svrnsec/pulse — Hypervisor & Cloud Provider Fingerprinter\r\n *\r\n * Each hypervisor has a distinct \"steal-time rhythm\" — a characteristic\r\n * pattern in how it schedules guest vCPUs on host physical cores.\r\n * This creates detectable signatures in the timing autocorrelation profile.\r\n *\r\n * Think of it like a heartbeat EKG:\r\n * KVM → regular 50-iteration bursts (~250ms quantum at 5ms/iter)\r\n * Xen → longer 150-iteration bursts (~750ms credit scheduler quantum)\r\n * VMware → irregular bursts, memory balloon noise\r\n * Hyper-V → 78-iteration bursts (~390ms at 5ms/iter, 15.6ms quantum)\r\n * Nitro → almost none — SR-IOV passthrough is nearly invisible\r\n * Physical → no rhythm at all\r\n *\r\n * Canvas renderer strings give a second, independent signal that we cross-\r\n * reference to increase confidence in the provider classification.\r\n */\r\n\r\n// ---------------------------------------------------------------------------\r\n// Provider profile database\r\n// ---------------------------------------------------------------------------\r\n// Each profile is calibrated from real benchmark data.\r\n// Fields: lag1_range, lag50_range, qe_range, cv_range, renderer_hints\r\n\r\nconst PROVIDER_PROFILES = [\r\n {\r\n id: 'physical',\r\n label: 'Physical Hardware',\r\n profile: 'analog-fog',\r\n confidence: 0, // set dynamically\r\n match: ({ lag1, lag50, qe, cv, entropyJitterRatio, isSoftwareRenderer }) =>\r\n !isSoftwareRenderer &&\r\n Math.abs(lag1) < 0.20 &&\r\n Math.abs(lag50) < 0.15 &&\r\n qe > 3.0 &&\r\n cv > 0.06 &&\r\n (entropyJitterRatio === null || entropyJitterRatio >= 1.02),\r\n },\r\n {\r\n id: 'kvm-generic',\r\n label: 'KVM Hypervisor (generic)',\r\n profile: 'picket-fence',\r\n match: ({ lag1, lag50, qe, cv }) =>\r\n lag1 > 0.40 && qe < 2.5 && cv < 0.15 && Math.abs(lag50) > 0.25,\r\n providerHints: ['digitalocean', 'linode', 'vultr', 'hetzner', 'ovh'],\r\n },\r\n {\r\n id: 'kvm-digitalocean',\r\n label: 'DigitalOcean Droplet (KVM)',\r\n profile: 'picket-fence',\r\n match: ({ lag1, lag50, qe, cv, rendererHints }) =>\r\n lag1 > 0.55 && qe < 2.0 && cv < 0.12 &&\r\n (rendererHints.some(r => ['llvmpipe', 'virtio', 'qxl'].includes(r)) ||\r\n lag50 > 0.30),\r\n },\r\n {\r\n id: 'kvm-aws-ec2-xen',\r\n label: 'AWS EC2 (Xen/older generation)',\r\n profile: 'picket-fence',\r\n // Xen credit scheduler has longer period (~150 iters)\r\n match: ({ lag1, lag25, lag50, qe, cv }) =>\r\n qe < 2.2 && cv < 0.13 &&\r\n lag25 > 0.20 && lag50 > 0.20 &&\r\n lag1 < 0.50, // lag-1 less pronounced than KVM\r\n },\r\n {\r\n id: 'nitro-aws',\r\n label: 'AWS EC2 Nitro (near-baremetal)',\r\n profile: 'near-physical',\r\n // Nitro uses SR-IOV and dedicated hardware — steal-time is very low.\r\n // Looks almost physical but canvas renderer gives it away.\r\n match: ({ lag1, lag50, qe, cv, isSoftwareRenderer, rendererHints }) =>\r\n qe > 2.5 && cv > 0.05 &&\r\n lag1 < 0.25 && lag50 < 0.20 &&\r\n (isSoftwareRenderer ||\r\n rendererHints.some(r => r.includes('nvidia t4') || r.includes('nvidia a10'))),\r\n },\r\n {\r\n id: 'vmware-esxi',\r\n label: 'VMware ESXi',\r\n profile: 'burst-scheduler',\r\n // VMware balloon driver creates irregular memory pressure bursts\r\n match: ({ lag1, lag50, qe, cv, rendererHints }) =>\r\n qe < 2.5 &&\r\n (rendererHints.some(r => r.includes('vmware')) ||\r\n (lag1 > 0.30 && lag50 < lag1 * 0.7 && cv < 0.14)),\r\n },\r\n {\r\n id: 'hyperv',\r\n label: 'Microsoft Hyper-V',\r\n profile: 'picket-fence',\r\n // 15.6ms scheduler quantum → burst every ~78 iters\r\n match: ({ lag1, lag25, qe, cv, rendererHints }) =>\r\n qe < 2.3 &&\r\n (rendererHints.some(r => r.includes('microsoft basic render') || r.includes('warp')) ||\r\n (lag25 > 0.25 && lag1 > 0.35 && cv < 0.12)),\r\n },\r\n {\r\n id: 'gcp-kvm',\r\n label: 'Google Cloud (KVM)',\r\n profile: 'picket-fence',\r\n match: ({ lag1, lag50, qe, cv, rendererHints }) =>\r\n qe < 2.3 && lag1 > 0.45 &&\r\n (rendererHints.some(r => r.includes('swiftshader') || r.includes('google')) ||\r\n (lag50 > 0.28 && cv < 0.11)),\r\n },\r\n {\r\n id: 'gh200-datacenter',\r\n label: 'NVIDIA GH200 / HPC Datacenter',\r\n profile: 'hypervisor-flat',\r\n // Even with massive compute, still trapped by hypervisor clock.\r\n // GH200 shows near-zero Hurst (extreme quantization) + very high lag-1.\r\n match: ({ lag1, qe, hurst, cv, rendererHints }) =>\r\n (rendererHints.some(r => r.includes('gh200') || r.includes('grace hopper') ||\r\n r.includes('nvidia a100') || r.includes('nvidia h100')) ||\r\n (hurst < 0.10 && lag1 > 0.60 && qe < 1.8 && cv < 0.10)),\r\n },\r\n {\r\n id: 'generic-vm',\r\n label: 'Virtual Machine (unclassified)',\r\n profile: 'picket-fence',\r\n match: ({ lag1, qe, cv, isSoftwareRenderer }) =>\r\n isSoftwareRenderer ||\r\n (qe < 2.0 && lag1 > 0.35) ||\r\n (cv < 0.02),\r\n },\r\n];\r\n\r\n// ---------------------------------------------------------------------------\r\n// detectProvider\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Classifies the host environment based on timing + canvas signals.\r\n *\r\n * @param {object} p\r\n * @param {import('./jitter.js').JitterAnalysis} p.jitter\r\n * @param {object} p.autocorrelations - extended lags including lag25, lag50\r\n * @param {import('../collector/canvas.js').CanvasFingerprint} p.canvas\r\n * @param {object|null} p.phases\r\n * @returns {ProviderResult}\r\n */\r\nexport function detectProvider({ jitter, autocorrelations, canvas, phases }) {\r\n const rendererHints = _rendererHints(canvas?.webglRenderer, canvas?.webglVendor);\r\n\r\n const signals = {\r\n lag1: Math.abs(autocorrelations?.lag1 ?? 0),\r\n lag25: Math.abs(autocorrelations?.lag25 ?? 0),\r\n lag50: Math.abs(autocorrelations?.lag50 ?? 0),\r\n qe: jitter.quantizationEntropy,\r\n cv: jitter.stats?.cv ?? 0,\r\n hurst: jitter.hurstExponent ?? 0.5,\r\n isSoftwareRenderer: canvas?.isSoftwareRenderer ?? false,\r\n rendererHints,\r\n entropyJitterRatio: phases?.entropyJitterRatio ?? null,\r\n };\r\n\r\n // Score each profile and pick the best match\r\n const scored = PROVIDER_PROFILES\r\n .filter(p => {\r\n try { return p.match(signals); }\r\n catch { return false; }\r\n })\r\n .map(p => ({\r\n ...p,\r\n // Physical hardware is the last resort; give it lower priority when\r\n // other profiles match so we don't misclassify VMs.\r\n priority: p.id === 'physical' ? 0 : 1,\r\n }))\r\n .sort((a, b) => b.priority - a.priority);\r\n\r\n const best = scored[0] ?? { id: 'unknown', label: 'Unknown', profile: 'unknown' };\r\n\r\n // Confidence: how many \"VM indicator\" thresholds the signals cross\r\n const vmIndicatorCount = [\r\n signals.qe < 2.5,\r\n signals.lag1 > 0.35,\r\n signals.lag50 > 0.20,\r\n signals.cv < 0.04,\r\n signals.isSoftwareRenderer,\r\n signals.hurst < 0.15,\r\n phases?.entropyJitterRatio != null && phases.entropyJitterRatio < 1.02,\r\n ].filter(Boolean).length;\r\n\r\n const isPhysical = best.id === 'physical';\r\n const confidence = isPhysical\r\n ? Math.max(20, 95 - vmIndicatorCount * 15)\r\n : Math.min(95, 40 + vmIndicatorCount * 12);\r\n\r\n return {\r\n providerId: best.id,\r\n providerLabel: best.label,\r\n profile: best.profile,\r\n confidence,\r\n isVirtualized: best.id !== 'physical',\r\n signals,\r\n alternatives: scored.slice(1, 3).map(p => ({ id: p.id, label: p.label })),\r\n rendererHints,\r\n schedulerQuantumMs: _estimateQuantum(signals),\r\n };\r\n}\r\n\r\n/**\r\n * @typedef {object} ProviderResult\r\n * @property {string} providerId\r\n * @property {string} providerLabel\r\n * @property {string} profile 'analog-fog' | 'picket-fence' | 'burst-scheduler' | 'near-physical' | 'hypervisor-flat' | 'unknown'\r\n * @property {number} confidence 0–100\r\n * @property {boolean} isVirtualized\r\n * @property {object} signals\r\n * @property {object[]} alternatives\r\n * @property {string[]} rendererHints\r\n * @property {number|null} schedulerQuantumMs\r\n */\r\n\r\n// ---------------------------------------------------------------------------\r\n// Internal helpers\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Extract lowercase hint tokens from WebGL renderer string for pattern matching.\r\n */\r\nfunction _rendererHints(renderer = '', vendor = '') {\r\n return `${renderer} ${vendor}`.toLowerCase()\r\n .split(/[\\s\\/(),]+/)\r\n .filter(t => t.length > 2);\r\n}\r\n\r\n/**\r\n * Estimate the hypervisor's scheduler quantum from the dominant autocorrelation lag.\r\n * Returns null if the device appears to be physical.\r\n */\r\nfunction _estimateQuantum({ lag1, lag25, lag50, qe }) {\r\n if (qe > 3.2) return null; // likely physical\r\n\r\n // Find the dominant lag (highest absolute autocorrelation beyond lag-5)\r\n const lags = [\r\n { lag: 50, ac: lag50 },\r\n { lag: 25, ac: lag25 },\r\n ];\r\n const peak = lags.reduce((b, c) => c.ac > b.ac ? c : b, { lag: 0, ac: 0 });\r\n\r\n if (peak.ac < 0.20) return null;\r\n\r\n // Quantum (ms) ≈ dominant_lag × estimated_iteration_time (≈5ms)\r\n return peak.lag * 5;\r\n}\r\n","/**\r\n * @svrnsec/pulse — High-Level Fingerprint Class\r\n *\r\n * The developer-facing API. Instead of forcing devs to understand Hurst\r\n * Exponents and Quantization Entropy, they get a Fingerprint object with\r\n * plain-language properties and one critical boolean: isSynthetic.\r\n *\r\n * Usage:\r\n *\r\n * import { Fingerprint } from '@svrnsec/pulse';\r\n *\r\n * const fp = await Fingerprint.collect({ nonce });\r\n *\r\n * if (fp.isSynthetic) {\r\n * console.log(`Blocked: ${fp.providerLabel} detected (${fp.confidence}% confidence)`);\r\n * console.log(`Profile: ${fp.profile}`); // 'picket-fence'\r\n * console.log(`Reason: ${fp.topFlag}`); // 'LOW_QE + HIGH_LAG1_AUTOCORR'\r\n * } else {\r\n * console.log(`Verified: ${fp.hardwareId()}`);\r\n * console.log(`Score: ${fp.score}`); // 0.0 – 1.0\r\n * }\r\n *\r\n * // Always send to server for final validation:\r\n * const { payload, hash } = fp.toCommitment();\r\n */\r\n\r\nimport { collectEntropy } from './collector/entropy.js';\r\nimport { BioCollector } from './collector/bio.js';\r\nimport { collectCanvasFingerprint } from './collector/canvas.js';\r\nimport { collectAudioJitter } from './analysis/audio.js';\r\nimport { classifyJitter } from './analysis/jitter.js';\r\nimport { runHeuristicEngine } from './analysis/heuristic.js';\r\nimport { runCoherenceAnalysis } from './analysis/coherence.js';\r\nimport { detectProvider } from './analysis/provider.js';\r\nimport { buildProof, buildCommitment, blake3HexStr } from './proof/fingerprint.js';\r\n\r\n// ---------------------------------------------------------------------------\r\n// Fingerprint class\r\n// ---------------------------------------------------------------------------\r\n\r\nexport class Fingerprint {\r\n /** @private */\r\n constructor(raw) {\r\n this._raw = raw; // full internal data\r\n this._commitment = null; // lazy-built on first toCommitment() call\r\n }\r\n\r\n // ── Static factory ────────────────────────────────────────────────────────\r\n\r\n /**\r\n * Collect all hardware signals and return a Fingerprint instance.\r\n *\r\n * @param {object} opts\r\n * @param {string} opts.nonce - server-issued challenge nonce (required)\r\n * @param {number} [opts.iterations=200]\r\n * @param {number} [opts.bioWindowMs=3000]\r\n * @param {boolean} [opts.phased=true] - run cold/load/hot phases\r\n * @param {Function} [opts.onProgress] - (stage: string) => void\r\n * @param {string} [opts.wasmPath]\r\n * @returns {Promise<Fingerprint>}\r\n */\r\n static async collect(opts = {}) {\r\n const {\r\n nonce,\r\n iterations = 200,\r\n bioWindowMs = 3000,\r\n phased = true,\r\n adaptive = true,\r\n adaptiveThreshold = 0.85,\r\n onProgress,\r\n wasmPath,\r\n } = opts;\r\n\r\n if (!nonce) throw new Error('Fingerprint.collect() requires opts.nonce');\r\n\r\n const emit = (stage, meta) => { try { onProgress?.(stage, meta); } catch {} };\r\n\r\n emit('start');\r\n\r\n // ── Parallel collection ────────────────────────────────────────────────\r\n const bio = new BioCollector();\r\n bio.start();\r\n\r\n const [entropy, canvas, audio] = await Promise.all([\r\n collectEntropy({\r\n iterations, phased, adaptive, adaptiveThreshold, wasmPath,\r\n onBatch: (meta) => emit('entropy_batch', meta),\r\n }).then(r => { emit('entropy_done'); return r; }),\r\n collectCanvasFingerprint()\r\n .then(r => { emit('canvas_done'); return r; }),\r\n collectAudioJitter({ durationMs: Math.min(bioWindowMs, 2000) })\r\n .then(r => { emit('audio_done'); return r; }),\r\n ]);\r\n\r\n // Wait out the bio window\r\n const elapsed = Date.now() - entropy.collectedAt;\r\n const remain = Math.max(0, bioWindowMs - elapsed);\r\n if (remain > 0) await new Promise(r => setTimeout(r, remain));\r\n\r\n bio.stop();\r\n const bioSnapshot = bio.snapshot(entropy.timings);\r\n emit('bio_done');\r\n\r\n // ── Analysis pipeline ─────────────────────────────────────────────────\r\n const jitter = classifyJitter(entropy.timings, { autocorrelations: entropy.autocorrelations });\r\n const heuristic = runHeuristicEngine({ jitter, phases: entropy.phases, autocorrelations: entropy.autocorrelations });\r\n const provider = detectProvider({ jitter, autocorrelations: entropy.autocorrelations, canvas, phases: entropy.phases });\r\n\r\n // ── Three-stage scoring pipeline ──────────────────────────────────────\r\n // Stage 1: base jitter score from timing distribution analysis\r\n const rawScore = jitter.score;\r\n // Stage 2: heuristic cross-metric coherence adjustment\r\n const adjScore = Math.max(0, Math.min(1, rawScore + heuristic.netAdjustment));\r\n // Stage 3: zero-latency structural coherence analysis on already-collected data\r\n const coherence = runCoherenceAnalysis({\r\n timings: entropy.timings,\r\n jitter,\r\n phases: entropy.phases ?? null,\r\n batches: entropy.batches ?? null,\r\n bio: bioSnapshot,\r\n canvas,\r\n audio,\r\n });\r\n // Final score: stage-2 adjusted score refined by stage-3 coherence\r\n const finalScore = Math.max(0, Math.min(1, adjScore + coherence.netAdjustment));\r\n\r\n emit('analysis_done');\r\n\r\n // ── Build commitment ──────────────────────────────────────────────────\r\n const payload = buildProof({ entropy, jitter, bio: bioSnapshot, canvas, audio, nonce });\r\n // Inject heuristic + provider into proof payload for server-side reference\r\n payload.heuristic = {\r\n penalty: heuristic.penalty,\r\n bonus: heuristic.bonus,\r\n entropyJitterRatio: heuristic.entropyJitterRatio,\r\n picketFence: heuristic.picketFence.detected,\r\n coherenceFlags: heuristic.coherenceFlags,\r\n hardOverride: heuristic.hardOverride, // 'vm' | null\r\n };\r\n payload.provider = {\r\n id: provider.providerId,\r\n label: provider.providerLabel,\r\n profile: provider.profile,\r\n confidence: provider.confidence,\r\n schedulerQuantum: provider.schedulerQuantumMs,\r\n };\r\n // Stage-3 coherence summary (server uses these for logging + dynamic threshold)\r\n payload.coherence = {\r\n netAdjustment: coherence.netAdjustment,\r\n dynamicThreshold: coherence.dynamicThreshold,\r\n evidenceWeight: coherence.evidenceWeight,\r\n coherenceFlags: coherence.coherenceFlags,\r\n physicalFlags: coherence.physicalFlags,\r\n hardOverride: coherence.hardOverride,\r\n };\r\n payload.classification.adjustedScore = _round(adjScore, 4);\r\n payload.classification.finalScore = _round(finalScore, 4);\r\n payload.classification.dynamicThreshold = coherence.dynamicThreshold;\r\n\r\n const commitment = buildCommitment(payload);\r\n emit('complete');\r\n\r\n return new Fingerprint({\r\n entropy, canvas, audio,\r\n bioSnapshot, jitter, heuristic, coherence, provider,\r\n rawScore, adjScore, finalScore,\r\n nonce, commitment,\r\n });\r\n }\r\n\r\n // ── Primary API ────────────────────────────────────────────────────────────\r\n\r\n /**\r\n * True if the device is likely a VM, AI inference endpoint, or sanitised\r\n * cloud environment. Uses the adjusted score (base + heuristic bonuses/penalties).\r\n * @type {boolean}\r\n */\r\n get isSynthetic() {\r\n // Stage-2 hard kill: EJR/QE mathematical contradiction detected in the\r\n // heuristic engine before any bonuses could accumulate.\r\n if (this._raw.heuristic.hardOverride === 'vm') return true;\r\n // Stage-3 hard kill: EJR/QE contradiction or phase forgery detected in\r\n // the coherence analyser (second line of defence).\r\n if (this._raw.coherence.hardOverride === 'vm') return true;\r\n // Normal path: final score vs dynamic threshold.\r\n return this._raw.finalScore < this._raw.coherence.dynamicThreshold;\r\n }\r\n\r\n /**\r\n * Confidence in the isSynthetic verdict, 0–100.\r\n * @type {number}\r\n */\r\n get confidence() {\r\n const s = this._raw.finalScore;\r\n const t = this._raw.coherence.dynamicThreshold;\r\n // Map distance from threshold to confidence percentage.\r\n // At the threshold: 0% confident. Far above/below: approaching 100%.\r\n const distance = Math.abs(s - t);\r\n return Math.min(100, Math.round(distance * 500));\r\n }\r\n\r\n /**\r\n * Normalised score [0.0, 1.0]. Higher = more physical.\r\n * This is the FINAL score after all three analysis stages.\r\n * @type {number}\r\n */\r\n get score() {\r\n return _round(this._raw.finalScore, 4);\r\n }\r\n\r\n /**\r\n * The dynamic passing threshold for this proof [0.55, 0.67].\r\n * Reflects how much evidence was collected — a full-evidence proof has a\r\n * lower (more permissive) threshold; a minimal-evidence proof has a higher\r\n * (more conservative) threshold.\r\n * @type {number}\r\n */\r\n get threshold() {\r\n return this._raw.coherence.dynamicThreshold;\r\n }\r\n\r\n /**\r\n * How much evidence was collected [0, 1].\r\n * 1.0 = 200 iterations + phased + bio + audio + canvas\r\n * 0.0 = minimal proof\r\n * @type {number}\r\n */\r\n get evidenceWeight() {\r\n return this._raw.coherence.evidenceWeight;\r\n }\r\n\r\n /**\r\n * Human-readable confidence tier.\r\n * @type {'high'|'medium'|'low'|'uncertain'}\r\n */\r\n get tier() {\r\n const c = this.confidence;\r\n if (c >= 70) return 'high';\r\n if (c >= 40) return 'medium';\r\n if (c >= 20) return 'low';\r\n return 'uncertain';\r\n }\r\n\r\n /**\r\n * Detected timing profile name.\r\n * 'analog-fog' → real hardware, natural Brownian noise\r\n * 'picket-fence' → VM steal-time bursts at regular intervals\r\n * 'burst-scheduler' → irregular VM scheduling (VMware-style)\r\n * 'hypervisor-flat' → flat timing, hypervisor completely irons out noise\r\n * 'near-physical' → hard to classify (Nitro, GPU passthrough)\r\n * 'unknown'\r\n * @type {string}\r\n */\r\n get profile() {\r\n return this._raw.provider.profile;\r\n }\r\n\r\n /**\r\n * Detected cloud provider / hypervisor.\r\n * @type {string} e.g. 'kvm-digitalocean', 'nitro-aws', 'physical', 'generic-vm'\r\n */\r\n get providerId() {\r\n return this._raw.provider.providerId;\r\n }\r\n\r\n /**\r\n * Human-readable provider label.\r\n * @type {string} e.g. 'DigitalOcean Droplet (KVM)', 'Physical Hardware'\r\n */\r\n get providerLabel() {\r\n return this._raw.provider.providerLabel;\r\n }\r\n\r\n /**\r\n * Estimated hypervisor scheduler quantum in milliseconds.\r\n * Null if the device appears to be physical.\r\n * @type {number|null}\r\n */\r\n get schedulerQuantumMs() {\r\n return this._raw.provider.schedulerQuantumMs;\r\n }\r\n\r\n /**\r\n * Entropy-Jitter Ratio — the key signal distinguishing real silicon from VMs.\r\n * Values ≥ 1.08 confirm thermal feedback (real hardware).\r\n * Values near 1.0 indicate a hypervisor clock (VM).\r\n * Null if phased collection was not run.\r\n * @type {number|null}\r\n */\r\n get entropyJitterRatio() {\r\n return this._raw.heuristic.entropyJitterRatio;\r\n }\r\n\r\n /**\r\n * The most diagnostic flag from the heuristic engine.\r\n * @type {string}\r\n */\r\n get topFlag() {\r\n const flags = [\r\n ...this._raw.heuristic.findings.map(f => f.id),\r\n ...this._raw.jitter.flags,\r\n ];\r\n return flags[0] ?? 'NONE';\r\n }\r\n\r\n /**\r\n * All flags from both the base classifier and heuristic engine.\r\n * @type {string[]}\r\n */\r\n get flags() {\r\n return [\r\n ...this._raw.heuristic.coherenceFlags,\r\n ...this._raw.jitter.flags,\r\n ];\r\n }\r\n\r\n /**\r\n * Summary of heuristic findings with human-readable labels.\r\n * @type {Array<{id, label, severity, detail}>}\r\n */\r\n get findings() {\r\n return this._raw.heuristic.findings;\r\n }\r\n\r\n /**\r\n * Confirmed physical properties (positive evidence for real hardware).\r\n * @type {Array<{id, label, detail}>}\r\n */\r\n get physicalEvidence() {\r\n return this._raw.heuristic.bonuses;\r\n }\r\n\r\n // ── Hardware ID ────────────────────────────────────────────────────────────\r\n\r\n /**\r\n * A stable, privacy-preserving hardware identifier derived from the GPU\r\n * canvas fingerprint, audio sample rate, and WebGL extension set.\r\n *\r\n * Properties:\r\n * - Stable: same device → same ID across sessions\r\n * - Not uniquely identifying: changes if GPU or driver changes\r\n * - Not reversible: BLAKE3 hash, cannot recover original signals\r\n * - Not a tracking cookie: no PII, no cross-origin data\r\n *\r\n * @returns {string} 32-character hex ID (128-bit collision resistance)\r\n */\r\n hardwareId() {\r\n const { canvas, audio } = this._raw;\r\n const components = [\r\n canvas?.webglRenderer ?? '',\r\n canvas?.webglVendor ?? '',\r\n canvas?.extensionCount?.toString() ?? '',\r\n audio?.sampleRate?.toString() ?? '',\r\n canvas?.webglVersion?.toString() ?? '',\r\n ].join('|');\r\n return blake3HexStr(components).slice(0, 32);\r\n }\r\n\r\n // ── Diagnostic data ────────────────────────────────────────────────────────\r\n\r\n /**\r\n * Key metrics summary — useful for logging and debugging.\r\n * @returns {object}\r\n */\r\n metrics() {\r\n const { jitter, heuristic, coherence, provider } = this._raw;\r\n return {\r\n // ── Final verdict ──────────────────────────────────────────────────\r\n score: this.score, // final (stage 3)\r\n threshold: this.threshold, // dynamic passing bar\r\n evidenceWeight: this.evidenceWeight,\r\n isSynthetic: this.isSynthetic,\r\n // ── Score pipeline breakdown ───────────────────────────────────────\r\n rawScore: _round(this._raw.rawScore, 4), // stage 1\r\n adjustedScore: _round(this._raw.adjScore, 4), // stage 2\r\n finalScore: _round(this._raw.finalScore, 4), // stage 3\r\n heuristicAdjustment: _round(heuristic.netAdjustment, 4),\r\n coherenceAdjustment: _round(coherence.netAdjustment, 4),\r\n // ── Timing signals ─────────────────────────────────────────────────\r\n cv: _round(jitter.stats?.cv, 4),\r\n hurstExponent: _round(jitter.hurstExponent, 4),\r\n quantizationEntropy: _round(jitter.quantizationEntropy, 4),\r\n autocorrLag1: _round(jitter.autocorrelations?.lag1, 4),\r\n autocorrLag50: _round(this._raw.entropy.autocorrelations?.lag50, 4),\r\n outlierRate: _round(jitter.outlierRate, 4),\r\n thermalPattern: jitter.thermalSignature?.pattern,\r\n entropyJitterRatio: _round(heuristic.entropyJitterRatio, 4),\r\n picketFence: heuristic.picketFence.detected,\r\n // ── Coherence signals ──────────────────────────────────────────────\r\n coherenceFlags: coherence.coherenceFlags,\r\n physicalFlags: coherence.physicalFlags,\r\n hardOverride: coherence.hardOverride,\r\n // ── Provider ───────────────────────────────────────────────────────\r\n provider: provider.providerLabel,\r\n providerConfidence: provider.confidence,\r\n schedulerQuantumMs: provider.schedulerQuantumMs,\r\n // ── Hardware ───────────────────────────────────────────────────────\r\n webglRenderer: this._raw.canvas?.webglRenderer,\r\n isSoftwareRenderer: this._raw.canvas?.isSoftwareRenderer,\r\n hardwareId: this.hardwareId(),\r\n };\r\n }\r\n\r\n /**\r\n * Full diagnostic report for debugging / integration testing.\r\n * @returns {object}\r\n */\r\n report() {\r\n const { coherence } = this._raw;\r\n return {\r\n verdict: {\r\n isSynthetic: this.isSynthetic,\r\n score: this.score,\r\n threshold: this.threshold,\r\n confidence: this.confidence,\r\n tier: this.tier,\r\n profile: this.profile,\r\n provider: this.providerLabel,\r\n topFlag: this.topFlag,\r\n hardOverride: coherence.hardOverride,\r\n evidenceWeight: this.evidenceWeight,\r\n },\r\n pipeline: {\r\n rawScore: _round(this._raw.rawScore, 4),\r\n adjustedScore: _round(this._raw.adjScore, 4),\r\n finalScore: _round(this._raw.finalScore, 4),\r\n heuristicAdjustment: _round(this._raw.heuristic.netAdjustment, 4),\r\n coherenceAdjustment: _round(coherence.netAdjustment, 4),\r\n dynamicThreshold: coherence.dynamicThreshold,\r\n },\r\n metrics: this.metrics(),\r\n findings: this.findings,\r\n physicalEvidence: this.physicalEvidence,\r\n coherenceChecks: coherence.checks,\r\n coherenceBonuses: coherence.bonuses,\r\n phases: this._raw.entropy.phases ? {\r\n cold: { qe: _round(this._raw.entropy.phases.cold.qe, 4), mean: _round(this._raw.entropy.phases.cold.mean, 4) },\r\n hot: { qe: _round(this._raw.entropy.phases.hot.qe, 4), mean: _round(this._raw.entropy.phases.hot.mean, 4) },\r\n entropyJitterRatio: _round(this._raw.entropy.phases.entropyJitterRatio, 4),\r\n } : null,\r\n };\r\n }\r\n\r\n // ── Proof commitment ───────────────────────────────────────────────────────\r\n\r\n /**\r\n * Returns the BLAKE3 commitment to send to the server for validation.\r\n * @returns {{ payload: object, hash: string }}\r\n */\r\n toCommitment() {\r\n return this._raw.commitment;\r\n }\r\n\r\n // ── String representations ─────────────────────────────────────────────────\r\n\r\n toString() {\r\n const icon = this.isSynthetic ? '🚩' : '✅';\r\n const verb = this.isSynthetic ? 'Synthetic' : 'Physical';\r\n return `${icon} ${verb} | ${this.providerLabel} | score=${this.score} | conf=${this.confidence}% | profile=${this.profile}`;\r\n }\r\n\r\n toJSON() {\r\n return this.report();\r\n }\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Internal helpers\r\n// ---------------------------------------------------------------------------\r\n\r\nfunction _round(v, d) {\r\n if (v == null || !isFinite(v)) return null;\r\n const f = 10 ** d;\r\n return Math.round(v * f) / f;\r\n}\r\n","/**\n * @svrnsec/pulse — Server-Side Validator\n *\n * Verifies a ProofPayload + BLAKE3 commitment received from the client.\n * This module is for NODE.JS / SERVER use only.\n */\n\nimport { blake3 } from '@noble/hashes/blake3';\nimport { bytesToHex } from '@noble/hashes/utils';\nimport { randomFillSync, timingSafeEqual } from 'node:crypto';\nimport { canonicalJson } from './fingerprint.js';\nimport { computeServerDynamicThreshold } from '../analysis/coherence.js';\n\n// ---------------------------------------------------------------------------\n// Known software / virtual renderer patterns\n// ---------------------------------------------------------------------------\nconst VM_RENDERER_BLOCKLIST = [\n 'llvmpipe', 'swiftshader', 'softpipe', 'mesa offscreen',\n 'microsoft basic render', 'vmware svga', 'vmware', 'virtualbox',\n 'parallels', 'chromium swiftshader', 'google swiftshader',\n 'cirrussm', 'qxl', 'virtio', 'bochs',\n 'nvidia t4', 'nvidia a10g', 'nvidia a100', 'nvidia h100',\n 'nvidia h200', 'nvidia b100', 'nvidia b200', 'nvidia gh200',\n 'amd instinct', 'amd mi300', 'amd mi250', 'amd mi200',\n 'aws inferentia', 'aws trainium', 'google tpu',\n];\n\n// ANGLE with software backend — match only software variants, not real hardware through ANGLE\nconst VM_RENDERER_REGEX = [\n /angle\\s*\\(.*software/i,\n];\n\n// ---------------------------------------------------------------------------\n// Recursive prototype pollution guard\n// ---------------------------------------------------------------------------\nfunction _checkProtoPollution(obj, depth = 0) {\n if (depth > 10 || obj === null || typeof obj !== 'object') return false;\n if (Array.isArray(obj)) {\n for (const item of obj) {\n if (_checkProtoPollution(item, depth + 1)) return true;\n }\n return false;\n }\n if (\n Object.prototype.hasOwnProperty.call(obj, '__proto__') ||\n Object.prototype.hasOwnProperty.call(obj, 'constructor') ||\n Object.prototype.hasOwnProperty.call(obj, 'prototype')\n ) {\n return true;\n }\n for (const key of Object.keys(obj)) {\n if (typeof obj[key] === 'object' && obj[key] !== null) {\n if (_checkProtoPollution(obj[key], depth + 1)) return true;\n }\n }\n return false;\n}\n\n// ---------------------------------------------------------------------------\n// validateProof\n// ---------------------------------------------------------------------------\n\n/**\n * @param {import('./fingerprint.js').ProofPayload} payload\n * @param {string} receivedHash\n * @param {object} [opts]\n * @param {number} [opts.minJitterScore=0.55]\n * @param {number} [opts.maxAgeMs=300_000]\n * @param {number} [opts.clockSkewMs=30_000]\n * @param {boolean} [opts.requireBio=false]\n * @param {boolean} [opts.blockSoftwareRenderer=true]\n * @param {Function} [opts.checkNonce]\n * @returns {Promise<ValidationResult>}\n */\nexport async function validateProof(payload, receivedHash, opts = {}) {\n const {\n minJitterScore = 0.55,\n maxAgeMs = 300_000,\n clockSkewMs = 30_000,\n requireBio = false,\n blockSoftwareRenderer = true,\n checkNonce = null,\n } = opts;\n\n const reasons = [];\n const riskFlags = [];\n let valid = true;\n\n // ── 0. Strict payload structure validation ────────────────────────────────\n if (!payload || typeof payload !== 'object' || Array.isArray(payload)) {\n return _reject(['INVALID_PAYLOAD_STRUCTURE']);\n }\n\n // Recursive prototype pollution guard — checks all nested objects\n if (_checkProtoPollution(payload)) {\n return _reject(['PROTOTYPE_POLLUTION_ATTEMPT']);\n }\n\n // Required top-level fields\n const REQUIRED_TOP = ['version', 'timestamp', 'nonce', 'signals', 'classification'];\n for (const field of REQUIRED_TOP) {\n if (!(field in payload)) {\n return _reject([`MISSING_REQUIRED_FIELD:${field}`]);\n }\n }\n\n // Type assertions\n if (typeof payload.version !== 'number') return _reject(['INVALID_TYPE:version']);\n if (typeof payload.timestamp !== 'number') return _reject(['INVALID_TYPE:timestamp']);\n if (typeof payload.nonce !== 'string') return _reject(['INVALID_TYPE:nonce']);\n if (typeof payload.signals !== 'object' || Array.isArray(payload.signals)) {\n return _reject(['INVALID_TYPE:signals']);\n }\n if (typeof payload.classification !== 'object' || Array.isArray(payload.classification)) {\n return _reject(['INVALID_TYPE:classification']);\n }\n\n const TS_MIN = 1_577_836_800_000;\n const TS_MAX = 4_102_444_800_000;\n if (payload.timestamp < TS_MIN || payload.timestamp > TS_MAX) {\n return _reject(['TIMESTAMP_OUT_OF_RANGE']);\n }\n\n if (payload.version !== 1) {\n return _reject(['UNSUPPORTED_PROOF_VERSION']);\n }\n\n // ── 1. Hash integrity (timing-safe comparison) ────────────────────────────\n if (typeof receivedHash !== 'string' || !/^[0-9a-f]{64}$/.test(receivedHash)) {\n return _reject(['INVALID_HASH_FORMAT']);\n }\n const canonical = canonicalJson(payload);\n const enc = new TextEncoder().encode(canonical);\n const computed = bytesToHex(blake3(enc));\n\n try {\n const computedBuf = Buffer.from(computed, 'hex');\n const receivedBuf = Buffer.from(receivedHash, 'hex');\n if (computedBuf.length !== receivedBuf.length || !timingSafeEqual(computedBuf, receivedBuf)) {\n return _reject(['HASH_MISMATCH_PAYLOAD_TAMPERED']);\n }\n } catch {\n return _reject(['HASH_MISMATCH_PAYLOAD_TAMPERED']);\n }\n\n // ── 2. Timestamp recency ──────────────────────────────────────────────────\n const now = Date.now();\n const age = now - payload.timestamp;\n if (age > maxAgeMs) {\n valid = false;\n reasons.push(`PROOF_EXPIRED: age=${Math.round(age / 1000)}s, max=${maxAgeMs / 1000}s`);\n }\n if (payload.timestamp > now + clockSkewMs) {\n valid = false;\n reasons.push('PROOF_FROM_FUTURE');\n }\n\n // ── 3. Nonce freshness ────────────────────────────────────────────────────\n let nonceChecked = false;\n if (checkNonce) {\n nonceChecked = true;\n const nonceOk = await checkNonce(payload.nonce);\n if (!nonceOk) {\n valid = false;\n reasons.push('NONCE_INVALID_OR_REPLAYED');\n }\n } else {\n riskFlags.push('NONCE_FRESHNESS_NOT_CHECKED');\n }\n\n // ── 4. Jitter score ───────────────────────────────────────────────────────\n const jitterScore = payload.classification?.jitterScore ?? 0;\n if (jitterScore < minJitterScore) {\n valid = false;\n reasons.push(`JITTER_SCORE_TOO_LOW: ${jitterScore} < ${minJitterScore}`);\n }\n\n // ── 4b. Dynamic threshold — server recomputes from raw signals, not client finalScore\n const serverDynamicMin = computeServerDynamicThreshold(payload);\n if (jitterScore < serverDynamicMin) {\n valid = false;\n reasons.push(\n `DYNAMIC_THRESHOLD_NOT_MET: jitterScore=${jitterScore} < ` +\n `serverMin=${serverDynamicMin} (evidenceWeight=${\n _computeEvidenceWeight(payload).toFixed(3)\n })`\n );\n }\n\n // Surface diagnostic flags from the client's classifier\n for (const flag of (payload.classification?.flags ?? [])) {\n if (flag.includes('VM') || flag.includes('FLAT') || flag.includes('SYNTHETIC')) {\n riskFlags.push(`CLIENT_FLAG:${flag}`);\n }\n }\n\n // Hard override from heuristic engine (stage 2)\n if (payload.heuristic?.hardOverride === 'vm') {\n valid = false;\n reasons.push(\n `HEURISTIC_HARD_OVERRIDE: stage-2 EJR/QE mathematical contradiction — ` +\n `${(payload.heuristic.coherenceFlags ?? []).join(', ')}`\n );\n }\n\n // Hard override from coherence stage (stage 3)\n if (payload.coherence?.hardOverride === 'vm') {\n valid = false;\n reasons.push(\n `COHERENCE_HARD_OVERRIDE: stage-3 analysis detected a mathematical ` +\n `impossibility — ${(payload.coherence.coherenceFlags ?? []).join(', ')}`\n );\n }\n\n // Surface all coherence flags for risk tracking\n for (const flag of (payload.heuristic?.coherenceFlags ?? [])) {\n riskFlags.push(`HEURISTIC:${flag}`);\n }\n for (const flag of (payload.coherence?.coherenceFlags ?? [])) {\n riskFlags.push(`COHERENCE:${flag}`);\n }\n\n // ── 5. Canvas / WebGL renderer check ──────────────────────────────────────\n const canvas = payload.signals?.canvas;\n if (canvas) {\n if (canvas.isSoftwareRenderer && blockSoftwareRenderer) {\n valid = false;\n reasons.push(`SOFTWARE_RENDERER_DETECTED: ${canvas.webglRenderer}`);\n }\n const rendererLc = (canvas.webglRenderer ?? '').toLowerCase();\n // Check substring patterns\n for (const pattern of VM_RENDERER_BLOCKLIST) {\n if (rendererLc.includes(pattern)) {\n valid = false;\n reasons.push(`BLOCKLISTED_RENDERER: ${canvas.webglRenderer}`);\n riskFlags.push(`RENDERER_MATCH:${pattern}`);\n break;\n }\n }\n // Check regex patterns (e.g. ANGLE software)\n for (const re of VM_RENDERER_REGEX) {\n if (re.test(rendererLc)) {\n valid = false;\n reasons.push(`BLOCKLISTED_RENDERER: ${canvas.webglRenderer}`);\n riskFlags.push('RENDERER_MATCH:angle_software');\n break;\n }\n }\n if (!canvas.available) {\n riskFlags.push('CANVAS_UNAVAILABLE');\n }\n }\n\n // ── 6. Bio activity ───────────────────────────────────────────────────────\n const bio = payload.signals?.bio;\n if (bio) {\n if (requireBio && !bio.hasActivity) {\n valid = false;\n reasons.push('NO_BIO_ACTIVITY_DETECTED');\n }\n if (bio.mouseSampleCount === 0 && bio.keyboardSampleCount === 0) {\n riskFlags.push('ZERO_BIO_SAMPLES');\n }\n if (bio.interferenceCoefficient < -0.3) {\n riskFlags.push('NEGATIVE_INTERFERENCE_COEFFICIENT');\n }\n }\n\n // ── 7. Internal consistency checks ────────────────────────────────────────\n const entropy = payload.signals?.entropy;\n if (entropy) {\n if (entropy.timingsCV < 0.01 && jitterScore > 0.7) {\n riskFlags.push('INCONSISTENCY:LOW_CV_BUT_HIGH_SCORE');\n }\n if (entropy.timerGranularityMs === 0) {\n riskFlags.push('SUSPICIOUS_ZERO_TIMER_GRANULARITY');\n }\n if (entropy.thermalPattern === 'flat' && jitterScore > 0.8) {\n riskFlags.push('INCONSISTENCY:FLAT_THERMAL_BUT_HIGH_SCORE');\n }\n if (entropy.hurstExponent != null) {\n if (entropy.hurstExponent < 0.2 || entropy.hurstExponent > 0.85) {\n riskFlags.push(`EXTREME_HURST:${entropy.hurstExponent}`);\n }\n }\n }\n\n // ── 7b. Cross-signal physics forgery detection ────────────────────────────\n if (entropy) {\n const cv = entropy.timingsCV ?? null;\n const qe = entropy.quantizationEntropy ?? null;\n const lag1 = entropy.autocorr_lag1 ?? null;\n\n if (cv !== null && cv < 0.015 && jitterScore > 0.65) {\n valid = false;\n reasons.push(\n `FORGED_SIGNAL:CV_SCORE_IMPOSSIBLE cv=${cv.toFixed(5)} is hypervisor-flat ` +\n `but jitterScore=${jitterScore.toFixed(3)} claims physical hardware`\n );\n }\n\n if (lag1 !== null && lag1 > 0.70 && jitterScore > 0.70) {\n valid = false;\n reasons.push(\n `FORGED_SIGNAL:AUTOCORR_SCORE_IMPOSSIBLE lag1=${lag1.toFixed(3)} is VM-level ` +\n `but jitterScore=${jitterScore.toFixed(3)} claims physical hardware`\n );\n }\n\n if (qe !== null && qe < 2.0 && jitterScore > 0.65) {\n valid = false;\n reasons.push(\n `FORGED_SIGNAL:QE_SCORE_IMPOSSIBLE qe=${qe.toFixed(3)} bits is VM-level ` +\n `but jitterScore=${jitterScore.toFixed(3)} claims physical hardware`\n );\n }\n }\n\n // ── 8. Audio signal check ─────────────────────────────────────────────────\n const audio = payload.signals?.audio;\n if (audio?.available) {\n if (audio.callbackJitterCV < 0.001) {\n riskFlags.push('AUDIO_JITTER_TOO_FLAT');\n }\n }\n\n // ── Confidence rating ─────────────────────────────────────────────────────\n let confidence;\n if (!valid) {\n confidence = 'rejected';\n } else if (!nonceChecked) {\n // Without nonce verification, confidence cannot be higher than 'low'\n confidence = 'low';\n } else if (riskFlags.length === 0 && jitterScore >= 0.75) {\n confidence = 'high';\n } else if (riskFlags.length <= 2 && jitterScore >= 0.60) {\n confidence = 'medium';\n } else {\n confidence = 'low';\n }\n\n return {\n valid,\n score: jitterScore,\n confidence,\n reasons,\n riskFlags,\n meta: {\n receivedAt: now,\n proofAge: age,\n jitterScore,\n canvasRenderer: canvas?.webglRenderer ?? null,\n bioActivity: bio?.hasActivity ?? false,\n },\n };\n}\n\n/** @typedef {object} ValidationResult */\n\n// ---------------------------------------------------------------------------\n// generateNonce\n// ---------------------------------------------------------------------------\n\nexport function generateNonce() {\n let buf;\n if (typeof globalThis.crypto?.getRandomValues === 'function') {\n buf = new Uint8Array(32);\n globalThis.crypto.getRandomValues(buf);\n } else {\n buf = new Uint8Array(32);\n randomFillSync(buf);\n }\n return bytesToHex(buf);\n}\n\n// ---------------------------------------------------------------------------\n// Internal helpers\n// ---------------------------------------------------------------------------\n\nfunction _reject(reasons) {\n return {\n valid: false,\n score: 0,\n confidence: 'rejected',\n reasons,\n riskFlags: [],\n meta: {},\n };\n}\n\nfunction _computeEvidenceWeight(payload) {\n const n = payload?.signals?.entropy?.iterations ?? 0;\n const hasPhases = payload?.heuristic?.entropyJitterRatio != null;\n const hasBio = payload?.signals?.bio?.hasActivity === true;\n const hasAudio = payload?.signals?.audio?.available === true;\n const hasCanvas = payload?.signals?.canvas?.available === true;\n return Math.min(1.0,\n Math.min(1.0, n / 200) * 0.65 +\n (hasPhases ? 0.15 : 0) +\n (hasBio ? 0.10 : 0) +\n (hasAudio ? 0.05 : 0) +\n (hasCanvas ? 0.05 : 0)\n );\n}\n","/**\r\n * @svrnsec/pulse — Terminal Result Renderer\r\n *\r\n * Pretty-prints probe results to the terminal for Node.js server usage.\r\n * Used by middleware and the CLI so developers see clean, actionable output\r\n * during integration and debugging — not raw JSON.\r\n *\r\n * Zero dependencies. Pure ANSI escape codes.\r\n * Automatically disabled when stdout is not a TTY or NO_COLOR is set.\r\n */\r\n\r\n/* ─── TTY guard ──────────────────────────────────────────────────────────── */\r\n\r\nconst isTTY = () =>\r\n typeof process !== 'undefined' &&\r\n process.stderr?.isTTY === true &&\r\n process.env?.NO_COLOR == null;\r\n\r\nconst c = isTTY;\r\n\r\n/* ─── ANSI color palette ─────────────────────────────────────────────────── */\r\n\r\nconst A = {\r\n reset: '\\x1b[0m',\r\n bold: '\\x1b[1m',\r\n dim: '\\x1b[2m',\r\n // foreground — normal\r\n red: '\\x1b[31m',\r\n green: '\\x1b[32m',\r\n yellow: '\\x1b[33m',\r\n blue: '\\x1b[34m',\r\n magenta: '\\x1b[35m',\r\n cyan: '\\x1b[36m',\r\n white: '\\x1b[37m',\r\n gray: '\\x1b[90m',\r\n // foreground — bright\r\n bred: '\\x1b[91m',\r\n bgreen: '\\x1b[92m',\r\n byellow: '\\x1b[93m',\r\n bblue: '\\x1b[94m',\r\n bmagenta:'\\x1b[95m',\r\n bcyan: '\\x1b[96m',\r\n bwhite: '\\x1b[97m',\r\n};\r\n\r\nconst paint = (code, s) => c() ? `${code}${s}${A.reset}` : s;\r\nconst dim = (s) => paint(A.dim, s);\r\nconst bold = (s) => paint(A.bold, s);\r\nconst gray = (s) => paint(A.gray, s);\r\nconst cyan = (s) => paint(A.cyan, s);\r\nconst green = (s) => paint(A.bgreen, s);\r\nconst red = (s) => paint(A.bred, s);\r\nconst yel = (s) => paint(A.byellow, s);\r\nconst mag = (s) => paint(A.bmagenta,s);\r\nconst wh = (s) => paint(A.bwhite, s);\r\n\r\nfunction stripAnsi(s) {\r\n // eslint-disable-next-line no-control-regex\r\n return s.replace(/\\x1b\\[[0-9;]*m/g, '');\r\n}\r\nconst visLen = (s) => stripAnsi(s).length;\r\n\r\n/* ─── bar renderer ───────────────────────────────────────────────────────── */\r\n\r\n/**\r\n * Render a horizontal progress / confidence bar.\r\n * @param {number} pct 0–1\r\n * @param {number} width character width of the bar\r\n * @param {string} fillCode ANSI color code for filled blocks\r\n */\r\nfunction bar(pct, width = 20, fillCode = A.bgreen) {\r\n const filled = Math.round(Math.min(1, Math.max(0, pct)) * width);\r\n const empty = width - filled;\r\n const fill = c() ? `${fillCode}${'█'.repeat(filled)}${A.reset}` : '█'.repeat(filled);\r\n const void_ = gray('░'.repeat(empty));\r\n return fill + void_;\r\n}\r\n\r\n/* ─── verdict badge ──────────────────────────────────────────────────────── */\r\n\r\nfunction verdictBadge(result) {\r\n if (!result) return gray(' PENDING ');\r\n const { valid, score, confidence } = result;\r\n\r\n if (valid && confidence === 'high') return green(' ✓ PASS ');\r\n if (valid && confidence === 'medium') return yel(' ⚠ PASS ');\r\n if (!valid && score < 0.3) return red(' ✗ BLOCKED ');\r\n return yel(' ⚠ REVIEW ');\r\n}\r\n\r\n/* ─── renderProbeResult ──────────────────────────────────────────────────── */\r\n\r\n/**\r\n * Print a formatted probe result card to stderr.\r\n *\r\n * @param {object} opts\r\n * @param {object} opts.payload - ProofPayload from pulse()\r\n * @param {string} opts.hash - BLAKE3 hex commitment\r\n * @param {object} [opts.result] - ValidationResult (server-side verify)\r\n * @param {object} [opts.enf] - EnfResult if available\r\n * @param {object} [opts.gpu] - GpuEntropyResult if available\r\n * @param {object} [opts.dram] - DramResult if available\r\n * @param {object} [opts.llm] - LlmResult if available\r\n * @param {number} [opts.elapsedMs] - total probe time\r\n */\r\nexport function renderProbeResult({ payload, hash, result, enf, gpu, dram, llm, elapsedMs }) {\r\n if (!c()) return;\r\n\r\n const W = 54;\r\n const hr = gray('─'.repeat(W));\r\n const vbar = gray('│');\r\n\r\n const row = (label, value, valueColor = A.bwhite) => {\r\n const lbl = gray(label.padEnd(24));\r\n const val = c() ? `${valueColor}${value}${A.reset}` : String(value);\r\n const line = ` ${lbl}${val}`;\r\n const pad = ' '.repeat(Math.max(0, W - visLen(line) - 2));\r\n process.stderr.write(`${vbar}${line}${pad} ${vbar}\\n`);\r\n };\r\n\r\n const blank = () => {\r\n process.stderr.write(`${vbar}${' '.repeat(W + 2)}${vbar}\\n`);\r\n };\r\n\r\n const section = (title) => {\r\n const t = ` ${bold(title)}`;\r\n const pad = ' '.repeat(Math.max(0, W - visLen(t) - 2));\r\n process.stderr.write(`${vbar}${t}${pad} ${vbar}\\n`);\r\n };\r\n\r\n const badge = verdictBadge(result);\r\n const hashShort = hash ? hash.slice(0, 16) + '…' : 'pending';\r\n const elapsed = elapsedMs ? `${(elapsedMs / 1000).toFixed(2)}s` : '—';\r\n\r\n const sigs = payload?.signals ?? {};\r\n const cls = payload?.classification ?? {};\r\n const jScore = cls.jitterScore ?? 0;\r\n\r\n // ── Physics signals ──────────────────────────────────────────────────────\r\n const qe = sigs.entropy?.quantizationEntropy ?? 0;\r\n const hurst = sigs.entropy?.hurstExponent ?? 0;\r\n const cv = sigs.entropy?.timingsCV ?? 0;\r\n const ejrClass = qe >= 1.08 ? A.bgreen : qe >= 0.95 ? A.byellow : A.bred;\r\n const hwConf = result?.confidence === 'high' ? 1.0 : result?.confidence === 'medium' ? 0.65 : 0.3;\r\n const vmConf = 1 - hwConf;\r\n\r\n // ── ENF signals ──────────────────────────────────────────────────────────\r\n const enfRegion = enf?.gridRegion === 'americas' ? '60 Hz Americas'\r\n : enf?.gridRegion === 'emea_apac' ? '50 Hz EMEA/APAC'\r\n : enf?.enfAvailable === false ? 'unavailable'\r\n : '—';\r\n const enfColor = enf?.ripplePresent ? A.bgreen : enf?.enfAvailable === false ? A.gray : A.byellow;\r\n\r\n // ── GPU signals ──────────────────────────────────────────────────────────\r\n const gpuStr = gpu?.gpuPresent\r\n ? (gpu.isSoftware ? red('Software renderer') : green(gpu.vendorString ?? 'GPU detected'))\r\n : gray('unavailable');\r\n\r\n // ── DRAM signals ─────────────────────────────────────────────────────────\r\n const dramStr = dram?.refreshPresent\r\n ? green(`${(dram.refreshPeriodMs ?? 0).toFixed(1)} ms (DDR4 JEDEC ✓)`)\r\n : dram ? red('No refresh cycle (VM)') : gray('unavailable');\r\n\r\n // ── LLM signals ──────────────────────────────────────────────────────────\r\n const llmStr = llm\r\n ? (llm.aiConf > 0.7 ? red(`AI agent ${(llm.aiConf * 100).toFixed(0)}%`) : green(`Human ${((1 - llm.aiConf) * 100).toFixed(0)}%`))\r\n : gray('no bio data');\r\n\r\n // ── Render ───────────────────────────────────────────────────────────────\r\n const topTitle = ` ${mag('SVRN')}${wh(':PULSE')} ${badge}`;\r\n const topPad = ' '.repeat(Math.max(0, W - visLen(topTitle) - 2));\r\n const topBorder = gray('╭' + '─'.repeat(W + 2) + '╮');\r\n const botBorder = gray('╰' + '─'.repeat(W + 2) + '╯');\r\n\r\n process.stderr.write('\\n');\r\n process.stderr.write(topBorder + '\\n');\r\n process.stderr.write(`${vbar}${topTitle}${topPad} ${vbar}\\n`);\r\n process.stderr.write(gray('├' + '─'.repeat(W + 2) + '┤') + '\\n');\r\n blank();\r\n\r\n section('PHYSICS LAYER');\r\n blank();\r\n row('Jitter score', (jScore * 100).toFixed(1) + '%', jScore > 0.7 ? A.bgreen : jScore > 0.45 ? A.byellow : A.bred);\r\n row('QE (entropy)', qe.toFixed(3), ejrClass);\r\n row('Hurst exponent', hurst.toFixed(4), Math.abs(hurst - 0.5) < 0.1 ? A.bgreen : A.byellow);\r\n row('Timing CV', cv.toFixed(4), cv > 0.08 ? A.bgreen : A.byellow);\r\n row('Timer granularity',`${((sigs.entropy?.timerGranularityMs ?? 0) * 1000).toFixed(1)} µs`, A.bcyan);\r\n blank();\r\n\r\n const hwBar = bar(hwConf, 18, A.bgreen);\r\n const vmBar = bar(vmConf, 18, A.bred);\r\n row('HW confidence', hwBar + ' ' + (hwConf * 100).toFixed(0) + '%');\r\n row('VM confidence', vmBar + ' ' + (vmConf * 100).toFixed(0) + '%');\r\n\r\n blank();\r\n process.stderr.write(gray('├' + '─'.repeat(W + 2) + '┤') + '\\n');\r\n blank();\r\n\r\n section('SIGNAL LAYERS');\r\n blank();\r\n row('Grid (ENF)', enfRegion, enfColor);\r\n process.stderr.write(`${vbar} ${gray('GPU (thermal)')}${' '.repeat(10)}${gpuStr} ${vbar}\\n`);\r\n process.stderr.write(`${vbar} ${gray('DRAM refresh')} ${' '.repeat(11)}${dramStr} ${vbar}\\n`);\r\n process.stderr.write(`${vbar} ${gray('Behavioral (LLM)')}${' '.repeat(7)}${llmStr} ${vbar}\\n`);\r\n\r\n blank();\r\n process.stderr.write(gray('├' + '─'.repeat(W + 2) + '┤') + '\\n');\r\n blank();\r\n\r\n section('PROOF');\r\n blank();\r\n row('BLAKE3', hashShort, A.bcyan);\r\n row('Nonce', (payload?.nonce ?? '').slice(0, 16) + '…', A.gray);\r\n row('Elapsed', elapsed, A.gray);\r\n if (result) {\r\n row('Server verdict', result.valid ? 'valid' : 'rejected', result.valid ? A.bgreen : A.bred);\r\n row('Score', ((result.score ?? 0) * 100).toFixed(1) + '%', A.bwhite);\r\n if ((result.riskFlags ?? []).length > 0) {\r\n blank();\r\n row('Risk flags', result.riskFlags.join(', '), A.byellow);\r\n }\r\n }\r\n blank();\r\n process.stderr.write(botBorder + '\\n\\n');\r\n}\r\n\r\n/* ─── renderError ────────────────────────────────────────────────────────── */\r\n\r\n/**\r\n * Print a formatted error card for pulse() failures.\r\n * @param {Error|string} err\r\n */\r\nexport function renderError(err) {\r\n if (!c()) return;\r\n const msg = err?.message ?? String(err);\r\n const W = 54;\r\n const vbar = gray('│');\r\n\r\n process.stderr.write('\\n');\r\n process.stderr.write(red('╭' + '─'.repeat(W + 2) + '╮') + '\\n');\r\n process.stderr.write(`${red('│')} ${red('✗')} ${bold('SVRN:PULSE — probe failed')}${' '.repeat(Math.max(0, W - 28))} ${red('│')}\\n`);\r\n process.stderr.write(red('├' + '─'.repeat(W + 2) + '┤') + '\\n');\r\n process.stderr.write(`${vbar} ${gray(msg.slice(0, W - 2).padEnd(W))} ${vbar}\\n`);\r\n process.stderr.write(red('╰' + '─'.repeat(W + 2) + '╯') + '\\n\\n');\r\n}\r\n\r\n/* ─── renderUpdateBanner ─────────────────────────────────────────────────── */\r\n\r\n/**\r\n * Render a simple one-line update available hint inline (used by middleware).\r\n * @param {string} latest\r\n */\r\nexport function renderInlineUpdateHint(latest) {\r\n if (!c()) return;\r\n process.stderr.write(\r\n gray(' ╴╴╴ ') +\r\n yel('update available ') +\r\n gray(latest) +\r\n ' ' + cyan('npm i @svrnsec/pulse@latest') +\r\n gray(' ╴╴╴') +\r\n '\\n'\r\n );\r\n}\r\n","/**\r\n * @svrnsec/pulse\r\n *\r\n * Physical Turing Test — distinguishes a real consumer device with a human\r\n * operator from a sanitised Datacenter VM / AI Instance.\r\n *\r\n * Usage (client-side):\r\n *\r\n * import { pulse } from '@svrnsec/pulse';\r\n *\r\n * // 1. Get a server-issued nonce (prevents replay attacks)\r\n * const { nonce } = await fetch('/api/pulse-challenge').then(r => r.json());\r\n *\r\n * // 2. Run the probe (takes ~3-5 seconds)\r\n * const { payload, hash } = await pulse({ nonce });\r\n *\r\n * // 3. Send to your server\r\n * const verdict = await fetch('/api/pulse-verify', {\r\n * method: 'POST',\r\n * body: JSON.stringify({ payload, hash }),\r\n * }).then(r => r.json());\r\n *\r\n * Usage (server-side):\r\n *\r\n * import { validateProof, generateNonce } from '@svrnsec/pulse/validator';\r\n *\r\n * // Challenge endpoint\r\n * app.get('/api/pulse-challenge', (req, res) => {\r\n * const nonce = generateNonce();\r\n * await redis.set(`pulse:nonce:${nonce}`, '1', 'EX', 300); // 5-min TTL\r\n * res.json({ nonce });\r\n * });\r\n *\r\n * // Verify endpoint\r\n * app.post('/api/pulse-verify', async (req, res) => {\r\n * const { payload, hash } = req.body;\r\n * const result = await validateProof(payload, hash, {\r\n * checkNonce: async (n) => {\r\n * const ok = await redis.del(`pulse:nonce:${n}`);\r\n * return ok === 1; // true only if nonce existed and was consumed\r\n * },\r\n * });\r\n * res.json(result);\r\n * });\r\n */\r\n\r\nimport { collectEntropy } from './collector/entropy.js';\r\nimport { BioCollector } from './collector/bio.js';\r\nimport { collectCanvasFingerprint } from './collector/canvas.js';\r\nimport { collectAudioJitter } from './analysis/audio.js';\r\nimport { classifyJitter } from './analysis/jitter.js';\r\nimport { buildProof, buildCommitment } from './proof/fingerprint.js';\r\nimport { collectGpuEntropy } from './collector/gpu.js';\r\nimport { collectDramTimings } from './collector/dram.js';\r\nimport { collectEnfTimings } from './collector/enf.js';\r\nimport { detectLlmAgent } from './analysis/llm.js';\r\nimport { notifyOnExit } from './update-notifier.js';\r\n\r\n// Register background update check — fires once at process startup.\r\n// Shows a styled notification box after the process exits if a newer version\r\n// is available. No-op in browser environments and non-TTY outputs.\r\nnotifyOnExit();\r\n\r\n// ---------------------------------------------------------------------------\r\n// Hosted API mode — pulse({ apiKey }) with zero server setup\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Run pulse() against the sovereign hosted API.\r\n * Fetches nonce, runs probe locally (WASM still on device), submits proof.\r\n *\r\n * @param {object} opts — same as pulse(), plus apiKey + apiUrl\r\n * @returns {Promise<{ payload, hash, result }>}\r\n */\r\nasync function _pulseHosted(opts) {\r\n const {\r\n apiKey,\r\n apiUrl = 'https://api.sovereign.dev',\r\n iterations = 200,\r\n matrixSize = 64,\r\n bioWindowMs = 3_000,\r\n phased = true,\r\n adaptive = true,\r\n adaptiveThreshold = 0.85,\r\n requireBio = false,\r\n wasmPath,\r\n onProgress,\r\n verifyOptions = {},\r\n } = opts;\r\n\r\n // 1. Fetch nonce from hosted challenge endpoint\r\n const challengeRes = await fetch(`${apiUrl}/v1/challenge`, {\r\n headers: { 'Authorization': `Bearer ${apiKey}` },\r\n });\r\n if (!challengeRes.ok) {\r\n const body = await challengeRes.json().catch(() => ({}));\r\n throw new Error(`[pulse] Challenge failed (${challengeRes.status}): ${body.message ?? 'unknown error'}`);\r\n }\r\n const { nonce } = await challengeRes.json();\r\n\r\n // 2. Run the local probe (WASM, bio, canvas, audio — all on device)\r\n const commitment = await _runProbe({\r\n nonce, iterations, matrixSize, bioWindowMs,\r\n phased, adaptive, adaptiveThreshold, requireBio,\r\n wasmPath, onProgress,\r\n });\r\n\r\n // 3. Submit proof to hosted verify endpoint\r\n const verifyRes = await fetch(`${apiUrl}/v1/verify`, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${apiKey}`,\r\n },\r\n body: JSON.stringify({\r\n payload: commitment.payload,\r\n hash: commitment.hash,\r\n options: verifyOptions,\r\n }),\r\n });\r\n\r\n const result = await verifyRes.json();\r\n\r\n // Return commitment + server result for convenience\r\n return { ...commitment, result };\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// pulse() — main entry point\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Run the full @svrnsec/pulse probe and return a signed commitment.\r\n *\r\n * Two modes:\r\n * - pulse({ nonce }) — self-hosted (you manage the nonce server)\r\n * - pulse({ apiKey }) — hosted API (zero server setup required)\r\n *\r\n * @param {PulseOptions} opts\r\n * @returns {Promise<PulseCommitment>}\r\n */\r\nexport async function pulse(opts = {}) {\r\n // ── Hosted API mode ────────────────────────────────────────────────────────\r\n if (opts.apiKey) {\r\n return _pulseHosted(opts);\r\n }\r\n\r\n // ── Self-hosted mode ───────────────────────────────────────────────────────\r\n const { nonce } = opts;\r\n if (!nonce || typeof nonce !== 'string') {\r\n throw new Error(\r\n '@svrnsec/pulse: opts.nonce is required (self-hosted), or pass opts.apiKey for zero-config hosted mode.'\r\n );\r\n }\r\n\r\n return _runProbe(opts);\r\n}\r\n\r\n/**\r\n * Internal probe runner — shared between self-hosted and hosted API modes.\r\n * @private\r\n */\r\nasync function _runProbe(opts) {\r\n const {\r\n nonce,\r\n timeout = 8_000,\r\n iterations = 200,\r\n matrixSize = 64,\r\n bioWindowMs = 3_000,\r\n phased = true,\r\n adaptive = true,\r\n adaptiveThreshold = 0.85,\r\n requireBio = false,\r\n wasmPath,\r\n onProgress,\r\n } = opts;\r\n\r\n _emit(onProgress, 'start');\r\n\r\n // ── Phase 1: Start bio collector immediately (collects events over time) ──\r\n const bio = new BioCollector();\r\n bio.start();\r\n\r\n // ── Phase 2: Parallel collection ──────────────────────────────────────────\r\n const raceTimeout = new Promise((_, reject) =>\r\n setTimeout(() => reject(new Error('pulse() timed out')), timeout)\r\n );\r\n\r\n let entropyResult, canvasResult, audioResult;\r\n\r\n try {\r\n [entropyResult, canvasResult, audioResult] = await Promise.race([\r\n Promise.all([\r\n collectEntropy({\r\n iterations, matrixSize, phased, adaptive, adaptiveThreshold, wasmPath,\r\n onBatch: (meta) => _emit(onProgress, 'entropy_batch', meta),\r\n }).then(r => { _emit(onProgress, 'entropy_done'); return r; }),\r\n collectCanvasFingerprint()\r\n .then(r => { _emit(onProgress, 'canvas_done'); return r; }),\r\n collectAudioJitter({ durationMs: Math.min(bioWindowMs, 2_000) })\r\n .then(r => { _emit(onProgress, 'audio_done'); return r; }),\r\n ]),\r\n raceTimeout,\r\n ]);\r\n } catch (err) {\r\n bio.stop();\r\n throw err;\r\n }\r\n\r\n // ── Phase 3: Bio snapshot ─────────────────────────────────────────────────\r\n const bioElapsed = Date.now() - entropyResult.collectedAt;\r\n const bioRemain = Math.max(0, bioWindowMs - bioElapsed);\r\n if (bioRemain > 0) await _sleep(bioRemain);\r\n\r\n bio.stop();\r\n const bioSnapshot = bio.snapshot(entropyResult.timings);\r\n\r\n if (requireBio && !bioSnapshot.hasActivity) {\r\n throw new Error('@svrnsec/pulse: no bio activity detected (requireBio=true)');\r\n }\r\n\r\n _emit(onProgress, 'bio_done');\r\n\r\n // ── Phase 4: Extended signal collection (non-blocking, best-effort) ───────\r\n // ENF, GPU, DRAM, and LLM detectors run in parallel after the core probe.\r\n // Each gracefully returns a null/unavailable result if the environment does\r\n // not support it (e.g. no WebGPU, no SharedArrayBuffer, no bio events).\r\n const [enfResult, gpuResult, dramResult, llmResult] = await Promise.all([\r\n collectEnfTimings().catch(() => null),\r\n collectGpuEntropy().catch(() => null),\r\n Promise.resolve(collectDramTimings()).catch(() => null),\r\n Promise.resolve(detectLlmAgent(bioSnapshot)).catch(() => null),\r\n ]);\r\n\r\n _emit(onProgress, 'extended_done', {\r\n enf: enfResult?.verdict,\r\n gpu: gpuResult?.verdict,\r\n dram: dramResult?.verdict,\r\n llm: llmResult?.aiConf,\r\n });\r\n\r\n // ── Phase 5: Jitter analysis ───────────────────────────────────────────────\r\n const jitterAnalysis = classifyJitter(entropyResult.timings, {\r\n autocorrelations: entropyResult.autocorrelations,\r\n });\r\n\r\n _emit(onProgress, 'analysis_done');\r\n\r\n // ── Phase 6: Build proof & commitment ─────────────────────────────────────\r\n const payload = buildProof({\r\n entropy: entropyResult,\r\n jitter: jitterAnalysis,\r\n bio: bioSnapshot,\r\n canvas: canvasResult,\r\n audio: audioResult,\r\n enf: enfResult,\r\n gpu: gpuResult,\r\n dram: dramResult,\r\n llm: llmResult,\r\n nonce,\r\n });\r\n\r\n const commitment = buildCommitment(payload);\r\n\r\n _emit(onProgress, 'complete', {\r\n score: jitterAnalysis.score,\r\n confidence: _scoreToLabel(jitterAnalysis.score),\r\n flags: jitterAnalysis.flags,\r\n enf: enfResult?.verdict,\r\n gpu: gpuResult?.verdict,\r\n dram: dramResult?.verdict,\r\n llmConf: llmResult?.aiConf ?? null,\r\n });\r\n\r\n return { ...commitment, extended: { enf: enfResult, gpu: gpuResult, dram: dramResult, llm: llmResult } };\r\n}\r\n\r\n/**\r\n * @typedef {object} PulseOptions\r\n * @property {string} nonce - server-issued challenge nonce (required)\r\n * @property {number} [timeout=6000] - max ms before throwing\r\n * @property {number} [iterations=200]\r\n * @property {number} [matrixSize=64]\r\n * @property {number} [bioWindowMs=3000]\r\n * @property {boolean} [requireBio=false]\r\n * @property {string} [wasmPath] - custom WASM binary URL/path\r\n * @property {Function} [onProgress] - callback(stage, meta?) for progress events\r\n */\r\n\r\n/**\r\n * @typedef {object} PulseCommitment\r\n * @property {import('./proof/fingerprint.js').ProofPayload} payload\r\n * @property {string} hash - hex BLAKE3 commitment\r\n */\r\n\r\n// ---------------------------------------------------------------------------\r\n// Re-exports for convenience\r\n// ---------------------------------------------------------------------------\r\n\r\n// High-level developer API (the easiest way to use this package)\r\nexport { Fingerprint } from './fingerprint.js';\r\n\r\n// Analysis modules for advanced / custom integrations\r\nexport { runHeuristicEngine } from './analysis/heuristic.js';\r\nexport { detectProvider } from './analysis/provider.js';\r\n\r\n// Server-side validation\r\nexport { generateNonce } from './proof/validator.js';\r\nexport { validateProof } from './proof/validator.js';\r\n\r\n// Extended signal collectors (also available as named sub-path exports)\r\nexport { collectGpuEntropy } from './collector/gpu.js';\r\nexport { collectDramTimings } from './collector/dram.js';\r\nexport { collectEnfTimings } from './collector/enf.js';\r\nexport { detectLlmAgent } from './analysis/llm.js';\r\n\r\n// Terminal utilities — pretty probe results in Node.js server contexts\r\nexport { renderProbeResult, renderError, renderInlineUpdateHint } from './terminal.js';\r\n\r\n// Version introspection\r\nexport { CURRENT_VERSION, checkForUpdate } from './update-notifier.js';\r\n\r\n// ---------------------------------------------------------------------------\r\n// Internal helpers\r\n// ---------------------------------------------------------------------------\r\n\r\nfunction _sleep(ms) {\r\n return new Promise(r => setTimeout(r, ms));\r\n}\r\n\r\nfunction _emit(fn, stage, meta = {}) {\r\n if (typeof fn === 'function') {\r\n try { fn(stage, meta); } catch (_) {}\r\n }\r\n}\r\n\r\nfunction _scoreToLabel(score) {\r\n if (score >= 0.75) return 'high';\r\n if (score >= 0.55) return 'medium';\r\n if (score >= 0.35) return 'low';\r\n return 'rejected';\r\n}\r\n","/**\r\n * pulse_core — pure-JavaScript probe engine\r\n *\r\n * This module ships the entropy probe as portable JS so the package works\r\n * out-of-the-box without a Rust toolchain. When a compiled .wasm binary is\r\n * present (dropped in via `build.sh`) this file is replaced by the wasm-pack\r\n * output and the native engine runs instead.\r\n *\r\n * Physics model\r\n * ─────────────\r\n * Real silicon: DRAM refresh cycles, branch-predictor misses, and L3-cache\r\n * evictions inject sub-microsecond noise into any tight compute loop.\r\n * Hypervisors virtualise the TSC and smooth those interrupts out, leaving\r\n * a near-flat timing distribution that our QE/EJR checks catch.\r\n *\r\n * The JS loop below is a faithful port of the Rust matrix-multiply probe:\r\n * same work unit (N×N DGEMM-style loop), same checksum accumulation to\r\n * prevent dead-code elimination, same resolution micro-probe.\r\n */\r\n\r\n/* ─── clock ─────────────────────────────────────────────────────────────── */\r\n\r\nconst _now = (typeof performance !== 'undefined' && typeof performance.now === 'function')\r\n ? () => performance.now()\r\n : (() => {\r\n // Node.js fallback: process.hrtime.bigint() → milliseconds\r\n const _hr = process.hrtime.bigint;\r\n return () => Number(_hr()) / 1_000_000;\r\n })();\r\n\r\n/* ─── init (no-op for the JS engine) ───────────────────────────────────── */\r\n\r\n/**\r\n * Initialise the engine. When a real .wasm binary is supplied the wasm-pack\r\n * glue calls WebAssembly.instantiateStreaming here. The JS engine is already\r\n * \"compiled\", so we return immediately.\r\n *\r\n * @param {string|URL|Request|BufferSource|WebAssembly.Module} [_source]\r\n * @returns {Promise<void>}\r\n */\r\nexport default async function init(_source) {\r\n // JS engine is ready synchronously — nothing to stream or compile.\r\n}\r\n\r\n/* ─── run_entropy_probe ─────────────────────────────────────────────────── */\r\n\r\n/**\r\n * Run N iterations of a matrix-multiply work unit and record wall-clock time\r\n * per iteration. The distribution of those times is what the heuristic\r\n * engine analyses.\r\n *\r\n * @param {number} iterations – number of timing samples to collect\r\n * @param {number} matrixSize – N for the N×N multiply (default 64)\r\n * @returns {{ timings: Float64Array, checksum: number, resolution_probe: Float64Array }}\r\n */\r\nexport function run_entropy_probe(iterations, matrixSize = 64) {\r\n const N = matrixSize | 0;\r\n\r\n // Persistent working matrices — allocated once per probe to avoid GC noise.\r\n const A = new Float64Array(N * N);\r\n const B = new Float64Array(N * N);\r\n const C = new Float64Array(N * N);\r\n\r\n // Seed matrices with pseudo-random data (deterministic per call for\r\n // reproducibility, but different each run due to xorshift seeding from time).\r\n // Zero-seed protection: xorshift has 0 as a fixed point, so we fall back to 0xdeadbeef if _now() truncates to 0\r\n let seed = (_now() * 1e6) | 0 || 0xdeadbeef;\r\n const xr = () => { seed ^= seed << 13; seed ^= seed >> 17; seed ^= seed << 5; return (seed >>> 0) / 4294967296; };\r\n for (let i = 0; i < N * N; i++) { A[i] = xr(); B[i] = xr(); }\r\n\r\n const timings = new Float64Array(iterations);\r\n const resolution_probe = new Float64Array(32);\r\n let checksum = 0;\r\n\r\n for (let iter = 0; iter < iterations; iter++) {\r\n // Zero accumulator each round (realistic cache pressure).\r\n C.fill(0);\r\n\r\n const t0 = _now();\r\n\r\n // N×N matrix multiply: C = A · B (ikj loop order for cache friendliness)\r\n for (let i = 0; i < N; i++) {\r\n const rowA = i * N;\r\n const rowC = i * N;\r\n for (let k = 0; k < N; k++) {\r\n const aik = A[rowA + k];\r\n const rowBk = k * N;\r\n for (let j = 0; j < N; j++) {\r\n C[rowC + j] += aik * B[rowBk + j];\r\n }\r\n }\r\n }\r\n\r\n const t1 = _now();\r\n timings[iter] = t1 - t0;\r\n\r\n // Accumulate one element so the compiler cannot eliminate the work.\r\n checksum += C[0];\r\n }\r\n\r\n // Resolution micro-probe: fire 32 back-to-back timestamps.\r\n // The minimum non-zero delta reveals timer granularity.\r\n for (let i = 0; i < resolution_probe.length; i++) {\r\n resolution_probe[i] = _now();\r\n }\r\n\r\n return { timings, checksum, resolution_probe };\r\n}\r\n\r\n/* ─── run_memory_probe ──────────────────────────────────────────────────── */\r\n\r\n/**\r\n * Sequential read/write bandwidth probe over a large buffer.\r\n * Memory latency variance is a secondary signal (NUMA, DRAM refresh).\r\n *\r\n * @param {number} memSizeKb – buffer size in kibibytes\r\n * @param {number} memIterations\r\n * @returns {{ timings: Float64Array, checksum: number }}\r\n */\r\nexport function run_memory_probe(memSizeKb = 512, memIterations = 50) {\r\n const len = (memSizeKb * 1024 / 8) | 0; // 64-bit elements\r\n const buf = new Float64Array(len);\r\n const timings = new Float64Array(memIterations);\r\n let checksum = 0;\r\n\r\n // Warm-up pass (fills TLB, avoids first-access bias)\r\n for (let i = 0; i < len; i++) buf[i] = i;\r\n\r\n for (let iter = 0; iter < memIterations; iter++) {\r\n const t0 = _now();\r\n // Sequential read-modify-write\r\n for (let i = 0; i < len; i++) buf[i] = buf[i] * 1.0000001;\r\n const t1 = _now();\r\n\r\n timings[iter] = t1 - t0;\r\n checksum += buf[0];\r\n }\r\n\r\n return { timings, checksum };\r\n}\r\n\r\n/* ─── compute_autocorrelation ───────────────────────────────────────────── */\r\n\r\n/**\r\n * Pearson autocorrelation for lags 1..maxLag.\r\n * O(n·maxLag) — kept cheap by the adaptive early-exit cap.\r\n *\r\n * @param {ArrayLike<number>} data\r\n * @param {number} maxLag\r\n * @returns {Float64Array} length = maxLag, index 0 = lag-1\r\n */\r\nexport function compute_autocorrelation(data, maxLag) {\r\n const n = data.length;\r\n let mean = 0;\r\n for (let i = 0; i < n; i++) mean += data[i];\r\n mean /= n;\r\n\r\n let variance = 0;\r\n for (let i = 0; i < n; i++) variance += (data[i] - mean) ** 2;\r\n variance /= n;\r\n\r\n const result = new Float64Array(maxLag);\r\n if (variance < 1e-14) return result; // degenerate — all identical\r\n\r\n for (let lag = 1; lag <= maxLag; lag++) {\r\n let cov = 0;\r\n for (let i = 0; i < n - lag; i++) {\r\n cov += (data[i] - mean) * (data[i + lag] - mean);\r\n }\r\n result[lag - 1] = cov / ((n - lag) * variance);\r\n }\r\n\r\n return result;\r\n}\r\n"],"names":["_mean","_cv","_percentile","_round","SOFTWARE_RENDERER_PATTERNS","_std","PROBE_ITERATIONS","_bandPower","require","createRequire","isTTY","c","_empty","timingSafeEqual","randomFillSync"],"mappings":"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AAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACvF,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACvF,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACvF,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACvF,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACvF,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACvF,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACvF,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACvF,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACrF,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACrF,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACrF,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,EAAE,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EAAE,CAAC;AAC3B;;AC5LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA,MAAM,iBAAiB,KAAK,IAAI,CAAC;AACjC,MAAM,iBAAiB,KAAK,IAAI,CAAC;AACjC,MAAM,WAAW,WAAW,KAAK,CAAC;AAClC,MAAM,WAAW,WAAW,KAAK,CAAC;AAClC,MAAM,eAAe,OAAO,GAAG,CAAC;AAChC,MAAM,gBAAgB,MAAM,IAAI,CAAC;AACjC,MAAM,aAAa,SAAS,GAAG,CAAC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,gBAAgB,MAAM,GAAG,CAAC;AAChC,MAAM,iBAAiB,KAAK,EAAE,CAAC;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAe,iBAAiB,CAAC,IAAI,GAAG,EAAE,EAAE;AACnD,EAAE,MAAM,EAAE,UAAU,GAAG,gBAAgB,EAAE,GAAG,IAAI,CAAC;AACjD;AACA,EAAE,IAAI,CAAC,cAAc,EAAE,EAAE;AACzB,IAAI,OAAO,MAAM,CAAC,8DAA8D,CAAC,CAAC;AAClF,EAAE,CAAC;AACH;AACA;AACA,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,qBAAqB,CAAC;AAC1D,IAAI,UAAU;AACd,IAAI,UAAU,EAAE,iBAAiB;AACjC,GAAG,CAAC,CAAC;AACL;AACA,EAAE,IAAI,OAAO,CAAC,MAAM,GAAG,GAAG,EAAE;AAC5B,IAAI,OAAO,MAAM,CAAC,6BAA6B,CAAC,CAAC;AACjD,EAAE,CAA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","x_google_ignoreList":[4,5,6,7,8,9]}
|
|
1
|
+
{"version":3,"file":"pulse.cjs","sources":["../src/analysis/jitter.js","../src/collector/adaptive.js","../src/collector/entropy.js","../src/collector/bio.js","../node_modules/@noble/hashes/esm/utils.js","../node_modules/@noble/hashes/esm/_md.js","../node_modules/@noble/hashes/esm/_u64.js","../node_modules/@noble/hashes/esm/_blake.js","../node_modules/@noble/hashes/esm/blake2.js","../node_modules/@noble/hashes/esm/blake3.js","../src/proof/fingerprint.js","../src/collector/canvas.js","../src/analysis/audio.js","../src/collector/gpu.js","../src/collector/dram.js","../src/collector/sabTimer.js","../src/collector/enf.js","../src/analysis/llm.js","../src/update-notifier.js","../src/analysis/heuristic.js","../src/analysis/coherence.js","../src/analysis/provider.js","../src/fingerprint.js","../src/proof/validator.js","../src/terminal.js","../src/errors.js","../src/index.js","../pkg/pulse_core.js"],"sourcesContent":["/**\r\n * @svrnsec/pulse — Statistical Jitter Analysis\r\n *\r\n * Analyses the timing distribution from the entropy probe to classify\r\n * the host as a real consumer device or a sanitised datacenter VM.\r\n *\r\n * Core insight:\r\n * Real hardware → thermal throttling, OS context switches, DRAM refresh\r\n * cycles create a characteristic \"noisy\" but physically\r\n * plausible timing distribution.\r\n * Datacenter VM → hypervisor scheduler presents a nearly-flat execution\r\n * curve; thermal feedback is absent; timer may be\r\n * quantised to the host's scheduler quantum.\r\n */\r\n\r\n// ---------------------------------------------------------------------------\r\n// Public API\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Full statistical analysis of a timing vector.\r\n *\r\n * @param {number[]} timings - per-iteration millisecond deltas from WASM probe\r\n * @param {object} [opts]\r\n * @param {object} [opts.autocorrelations] - pre-computed { lag1 … lag10 }\r\n * @returns {JitterAnalysis}\r\n */\r\nexport function classifyJitter(timings, opts = {}) {\r\n if (!timings || timings.length < 10) {\r\n return _insufficientData();\r\n }\r\n\r\n const stats = computeStats(timings);\r\n const autocorr = opts.autocorrelations ?? _computeLocalAutocorr(timings);\r\n const hurst = computeHurst(timings);\r\n const quantEnt = detectQuantizationEntropy(timings);\r\n const thermal = detectThermalSignature(timings);\r\n const outlierRate = _outlierRate(timings, stats);\r\n\r\n // ── Scoring rubric ───────────────────────────────────────────────────────\r\n // Each criterion contributes 0–1 to a weighted sum.\r\n // Weights sum to 1.0; final score is in [0, 1].\r\n // 1.0 = almost certainly a real consumer device + real silicon\r\n // 0.0 = almost certainly a sanitised VM / AI instance\r\n\r\n const components = {};\r\n const flags = [];\r\n\r\n // 1. Coefficient of Variation (weight 0.25)\r\n // Real hardware: CV ∈ [0.04, 0.35]\r\n // VM: CV often < 0.02 (\"too flat\") or > 0.5 (scheduler bursts)\r\n let cvScore = 0;\r\n if (stats.cv >= 0.04 && stats.cv <= 0.35) {\r\n cvScore = 1.0;\r\n } else if (stats.cv >= 0.02 && stats.cv < 0.04) {\r\n cvScore = (stats.cv - 0.02) / 0.02; // linear ramp up\r\n flags.push('LOW_CV_BORDERLINE');\r\n } else if (stats.cv > 0.35 && stats.cv < 0.5) {\r\n cvScore = 1.0 - (stats.cv - 0.35) / 0.15; // ramp down\r\n flags.push('HIGH_CV_POSSIBLE_SCHEDULER_BURST');\r\n } else if (stats.cv < 0.02) {\r\n cvScore = 0;\r\n flags.push('CV_TOO_FLAT_VM_INDICATOR');\r\n } else {\r\n cvScore = 0.2;\r\n flags.push('CV_TOO_HIGH_SCHEDULER_BURST');\r\n }\r\n components.cv = { score: cvScore, weight: 0.25, value: stats.cv };\r\n\r\n // 2. Autocorrelation profile (weight 0.20)\r\n // Real thermal noise → all lags near 0 (i.i.d. / Brownian)\r\n // VM hypervisor scheduler → positive autocorr (periodic steal-time bursts)\r\n // We use the maximum absolute autocorrelation across all measured lags\r\n // to catch both lag-1 and longer-period scheduler artifacts.\r\n const acVals = Object.values(autocorr).filter(v => v != null);\r\n const maxAbsAC = acVals.length ? Math.max(...acVals.map(Math.abs)) : 0;\r\n const meanAbsAC = acVals.length ? acVals.reduce((s, v) => s + Math.abs(v), 0) / acVals.length : 0;\r\n const acStat = (maxAbsAC + meanAbsAC) / 2; // blend: worst + average\r\n\r\n let ac1Score = 0;\r\n if (acStat < 0.12) {\r\n ac1Score = 1.0;\r\n } else if (acStat < 0.28) {\r\n ac1Score = 1.0 - (acStat - 0.12) / 0.16;\r\n flags.push('MODERATE_AUTOCORR_POSSIBLE_SCHEDULER');\r\n } else {\r\n ac1Score = 0;\r\n flags.push('HIGH_AUTOCORR_VM_SCHEDULER_DETECTED');\r\n }\r\n components.autocorr = { score: ac1Score, weight: 0.20, value: acStat };\r\n\r\n // 3. Quantization Entropy (weight 0.20)\r\n // High entropy → timings are spread, not clustered on fixed boundaries\r\n // Low entropy → values cluster on integer-ms ticks (legacy VM timer)\r\n //\r\n // Scale:\r\n // QE ≥ 4.5 → 1.00 (strongly physical)\r\n // QE 3.0–4.5 → 0.00–1.00 (linear ramp, healthy range)\r\n // QE 2.0–3.0 → 0.00–0.20 (borderline; still gives partial credit so one\r\n // weak metric doesn't zero-out the whole score)\r\n // QE < 2.0 → 0.00 (clearly synthetic/quantised timer)\r\n let qeScore = 0;\r\n if (quantEnt >= 4.5) {\r\n qeScore = 1.0;\r\n } else if (quantEnt >= 3.0) {\r\n qeScore = (quantEnt - 3.0) / 1.5; // 0.00 → 1.00\r\n } else if (quantEnt >= 2.0) {\r\n // Partial credit — not obviously VM but not clearly physical.\r\n // Lets other strong signals (CV, autocorr, Hurst) still carry the device\r\n // over the physical threshold instead of being zeroed by a single weak metric.\r\n qeScore = ((quantEnt - 2.0) / 1.0) * 0.20; // 0.00 → 0.20\r\n flags.push('LOW_QUANTIZATION_ENTROPY_BORDERLINE');\r\n } else {\r\n qeScore = 0;\r\n flags.push('LOW_QUANTIZATION_ENTROPY_SYNTHETIC_TIMER');\r\n }\r\n components.quantization = { score: qeScore, weight: 0.20, value: quantEnt };\r\n\r\n // 4. Hurst Exponent (weight 0.15)\r\n // Genuine white thermal noise → H ≈ 0.5\r\n // VM scheduler periodicity → H > 0.7 (persistent / self-similar)\r\n // Synthetic / replayed → H near 0 or 1\r\n let hurstScore = 0;\r\n const hurstDev = Math.abs(hurst - 0.5);\r\n if (hurstDev < 0.10) {\r\n hurstScore = 1.0;\r\n } else if (hurstDev < 0.25) {\r\n hurstScore = 1.0 - (hurstDev - 0.10) / 0.15;\r\n if (hurst > 0.7) flags.push('HIGH_HURST_VM_SCHEDULER_PERIODICITY');\r\n } else {\r\n hurstScore = 0;\r\n if (hurst > 0.7) flags.push('VERY_HIGH_HURST_VM');\r\n else if (hurst < 0.3) flags.push('VERY_LOW_HURST_ANTIPERSISTENT');\r\n }\r\n components.hurst = { score: hurstScore, weight: 0.15, value: hurst };\r\n\r\n // 5. Thermal signature (weight 0.10)\r\n // Real CPU under sustained load → upward drift or sawtooth (fan cycling)\r\n // VM: flat timing regardless of simulated load (no thermal feedback loop)\r\n let thermalScore = 0;\r\n if (thermal.pattern === 'rising' || thermal.pattern === 'sawtooth') {\r\n thermalScore = 1.0;\r\n } else if (Math.abs(thermal.slope) > 5e-5) {\r\n thermalScore = 0.5; // some drift present\r\n flags.push('WEAK_THERMAL_SIGNATURE');\r\n } else {\r\n thermalScore = 0;\r\n flags.push('FLAT_THERMAL_PROFILE_VM_INDICATOR');\r\n }\r\n components.thermal = { score: thermalScore, weight: 0.10, value: thermal.slope };\r\n\r\n // 6. Outlier rate (weight 0.10)\r\n // Context switches on real OS → occasional timing spikes (> 3σ)\r\n // VMs: far fewer OS-level interruptions visible to guest\r\n let outlierScore = 0;\r\n if (outlierRate >= 0.02 && outlierRate <= 0.15) {\r\n outlierScore = 1.0;\r\n } else if (outlierRate > 0 && outlierRate < 0.02) {\r\n outlierScore = outlierRate / 0.02;\r\n flags.push('FEW_OUTLIERS_POSSIBLY_VM');\r\n } else if (outlierRate > 0.15) {\r\n outlierScore = Math.max(0, 1.0 - (outlierRate - 0.15) / 0.15);\r\n flags.push('EXCESSIVE_OUTLIERS_UNSTABLE');\r\n }\r\n components.outliers = { score: outlierScore, weight: 0.10, value: outlierRate };\r\n\r\n // ── Weighted aggregate ────────────────────────────────────────────────────\r\n const score = Object.values(components)\r\n .reduce((sum, c) => sum + c.score * c.weight, 0);\r\n\r\n return {\r\n score: Math.max(0, Math.min(1, score)),\r\n flags,\r\n components,\r\n stats,\r\n autocorrelations: autocorr,\r\n hurstExponent: hurst,\r\n quantizationEntropy: quantEnt,\r\n thermalSignature: thermal,\r\n outlierRate,\r\n };\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// computeStats\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Descriptive statistics for a timing vector.\r\n * @param {number[]} arr\r\n * @returns {TimingStats}\r\n */\r\nexport function computeStats(arr) {\r\n const sorted = [...arr].sort((a, b) => a - b);\r\n const n = arr.length;\r\n const mean = arr.reduce((s, v) => s + v, 0) / n;\r\n const varr = arr.reduce((s, v) => s + (v - mean) ** 2, 0) / (n - 1);\r\n const std = Math.sqrt(varr);\r\n\r\n const pct = (p) => {\r\n const idx = (p / 100) * (n - 1);\r\n const lo = Math.floor(idx);\r\n const hi = Math.ceil(idx);\r\n return sorted[lo] + (sorted[hi] - sorted[lo]) * (idx - lo);\r\n };\r\n\r\n // Skewness (Fisher-Pearson)\r\n const skew = n < 3 ? 0 :\r\n arr.reduce((s, v) => s + ((v - mean) / std) ** 3, 0) *\r\n (n / ((n - 1) * (n - 2)));\r\n\r\n // Excess kurtosis\r\n const kurt = n < 4 ? 0 :\r\n (arr.reduce((s, v) => s + ((v - mean) / std) ** 4, 0) *\r\n (n * (n + 1)) / ((n - 1) * (n - 2) * (n - 3))) -\r\n (3 * (n - 1) ** 2) / ((n - 2) * (n - 3));\r\n\r\n return {\r\n n, mean, std,\r\n cv: std / mean,\r\n min: sorted[0],\r\n max: sorted[n - 1],\r\n p5: pct(5),\r\n p25: pct(25),\r\n p50: pct(50),\r\n p75: pct(75),\r\n p95: pct(95),\r\n p99: pct(99),\r\n skewness: skew,\r\n kurtosis: kurt,\r\n };\r\n}\r\n\r\n/**\r\n * @typedef {object} TimingStats\r\n * @property {number} n\r\n * @property {number} mean\r\n * @property {number} std\r\n * @property {number} cv\r\n * @property {number} min\r\n * @property {number} max\r\n * @property {number} p5\r\n * @property {number} p25\r\n * @property {number} p50\r\n * @property {number} p75\r\n * @property {number} p95\r\n * @property {number} p99\r\n * @property {number} skewness\r\n * @property {number} kurtosis\r\n */\r\n\r\n// ---------------------------------------------------------------------------\r\n// computeHurst\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Estimates the Hurst exponent via Rescaled Range (R/S) analysis.\r\n * Covers 4 sub-series sizes (n/4, n/3, n/2, n) to get a log-log slope.\r\n *\r\n * H ≈ 0.5 → random walk (Brownian, thermal noise)\r\n * H > 0.5 → persistent (VM hypervisor periodicity)\r\n * H < 0.5 → anti-persistent\r\n *\r\n * @param {number[]} arr\r\n * @returns {number}\r\n */\r\nexport function computeHurst(arr) {\r\n const n = arr.length;\r\n if (n < 16) return 0.5; // not enough data\r\n\r\n const sizes = [\r\n Math.floor(n / 4),\r\n Math.floor(n / 3),\r\n Math.floor(n / 2),\r\n n,\r\n ].filter(s => s >= 8);\r\n\r\n const points = sizes.map(s => {\r\n const rs = _rescaledRange(arr.slice(0, s));\r\n return [Math.log(s), Math.log(rs)];\r\n });\r\n\r\n // Ordinary least squares on log-log\r\n const xMean = points.reduce((s, p) => s + p[0], 0) / points.length;\r\n const yMean = points.reduce((s, p) => s + p[1], 0) / points.length;\r\n let num = 0, den = 0;\r\n for (const [x, y] of points) {\r\n num += (x - xMean) * (y - yMean);\r\n den += (x - xMean) ** 2;\r\n }\r\n const H = den === 0 ? 0.5 : num / den;\r\n return Math.max(0, Math.min(1, H));\r\n}\r\n\r\nfunction _rescaledRange(arr) {\r\n const n = arr.length;\r\n const mean = arr.reduce((s, v) => s + v, 0) / n;\r\n const dev = arr.map(v => v - mean);\r\n\r\n // Cumulative deviation\r\n const cum = [];\r\n let acc = 0;\r\n for (const d of dev) { acc += d; cum.push(acc); }\r\n\r\n const R = Math.max(...cum) - Math.min(...cum);\r\n const S = Math.sqrt(arr.reduce((s, v) => s + (v - mean) ** 2, 0) / n);\r\n return S === 0 ? 1 : R / S;\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// detectQuantizationEntropy\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Computes Shannon entropy of a histogram of timing values.\r\n * Low entropy (< 3 bits) indicates clustered / quantised timings (VM timer).\r\n *\r\n * @param {number[]} arr\r\n * @param {number} [binWidthMs=0.2]\r\n * @returns {number} entropy in bits\r\n */\r\nexport function detectQuantizationEntropy(arr, binWidthMs = 0.2) {\r\n if (!arr.length) return 0;\r\n const bins = new Map();\r\n for (const v of arr) {\r\n const bin = Math.round(v / binWidthMs);\r\n bins.set(bin, (bins.get(bin) ?? 0) + 1);\r\n }\r\n const n = arr.length;\r\n let H = 0;\r\n for (const count of bins.values()) {\r\n const p = count / n;\r\n H -= p * Math.log2(p);\r\n }\r\n return H;\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// detectThermalSignature\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Analyses whether the timing series shows a thermal throttle pattern:\r\n * a rising trend (CPU heating up) or sawtooth (fan intervention).\r\n *\r\n * @param {number[]} arr\r\n * @returns {{ slope: number, pattern: 'rising'|'falling'|'sawtooth'|'flat', r2: number }}\r\n */\r\nexport function detectThermalSignature(arr) {\r\n const n = arr.length;\r\n if (n < 10) return { slope: 0, pattern: 'flat', r2: 0 };\r\n\r\n // Linear regression (timing vs sample index)\r\n const xMean = (n - 1) / 2;\r\n const yMean = arr.reduce((s, v) => s + v, 0) / n;\r\n let num = 0, den = 0;\r\n for (let i = 0; i < n; i++) {\r\n num += (i - xMean) * (arr[i] - yMean);\r\n den += (i - xMean) ** 2;\r\n }\r\n const slope = den === 0 ? 0 : num / den;\r\n\r\n // R² of linear fit\r\n const ss_res = arr.reduce((s, v, i) => {\r\n const pred = yMean + slope * (i - xMean);\r\n return s + (v - pred) ** 2;\r\n }, 0);\r\n const ss_tot = arr.reduce((s, v) => s + (v - yMean) ** 2, 0);\r\n const r2 = ss_tot === 0 ? 0 : 1 - ss_res / ss_tot;\r\n\r\n // Sawtooth detection: look for a drop > 2σ after a rising segment\r\n const std = Math.sqrt(arr.reduce((s, v) => s + (v - yMean) ** 2, 0) / n);\r\n let sawtoothCount = 0;\r\n for (let i = 1; i < n; i++) {\r\n if (arr[i - 1] - arr[i] > 2 * std) sawtoothCount++;\r\n }\r\n\r\n let pattern;\r\n if (sawtoothCount >= 2) pattern = 'sawtooth';\r\n else if (slope > 5e-5) pattern = 'rising';\r\n else if (slope < -5e-5) pattern = 'falling';\r\n else pattern = 'flat';\r\n\r\n return { slope, pattern, r2, sawtoothCount };\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Internal helpers\r\n// ---------------------------------------------------------------------------\r\n\r\nfunction _outlierRate(arr, stats) {\r\n const threshold = stats.mean + 3 * stats.std;\r\n return arr.filter(v => v > threshold).length / arr.length;\r\n}\r\n\r\nfunction _computeLocalAutocorr(arr) {\r\n const autocorr = {};\r\n for (const lag of [1, 2, 3, 5, 10]) {\r\n autocorr[`lag${lag}`] = _pearsonAC(arr, lag);\r\n }\r\n return autocorr;\r\n}\r\n\r\nfunction _pearsonAC(arr, lag) {\r\n const n = arr.length;\r\n if (lag >= n) return 0;\r\n const valid = n - lag;\r\n const mean = arr.reduce((s, v) => s + v, 0) / n;\r\n let num = 0, da = 0, db = 0;\r\n for (let i = 0; i < valid; i++) {\r\n const a = arr[i] - mean;\r\n const b = arr[i + lag] - mean;\r\n num += a * b;\r\n da += a * a;\r\n db += b * b;\r\n }\r\n const denom = Math.sqrt(da * db);\r\n return denom < 1e-14 ? 0 : num / denom;\r\n}\r\n\r\nfunction _insufficientData() {\r\n return {\r\n score: 0,\r\n flags: ['INSUFFICIENT_DATA'],\r\n components: {},\r\n stats: null,\r\n autocorrelations: {},\r\n hurstExponent: 0.5,\r\n quantizationEntropy: 0,\r\n thermalSignature: { slope: 0, pattern: 'flat', r2: 0 },\r\n outlierRate: 0,\r\n };\r\n}\r\n\r\n/**\r\n * @typedef {object} JitterAnalysis\r\n * @property {number} score - [0,1], 1 = real hardware\r\n * @property {string[]} flags - diagnostic flags\r\n * @property {object} components - per-criterion scores and weights\r\n * @property {TimingStats} stats\r\n * @property {object} autocorrelations\r\n * @property {number} hurstExponent\r\n * @property {number} quantizationEntropy\r\n * @property {object} thermalSignature\r\n * @property {number} outlierRate\r\n */\r\n","/**\r\n * @svrnsec/pulse — Adaptive Entropy Probe\r\n *\r\n * Runs the WASM probe in batches and stops early once the signal is decisive.\r\n *\r\n * Why this works:\r\n * A KVM VM with QE=1.27 and lag-1 autocorr=0.67 is unambiguously a VM after\r\n * just 50 iterations. Running 200 iterations confirms what was already obvious\r\n * at 50 — it adds no new information but wastes 3 seconds of user time.\r\n *\r\n * Conversely, a physical device with healthy entropy needs more data to\r\n * rule out edge cases, so it runs longer.\r\n *\r\n * Speed profile:\r\n * Obvious VM (QE < 1.5, lag1 > 0.60) → stops at 50 iters → ~0.9s (75% faster)\r\n * Clear HW (QE > 3.5, lag1 < 0.10) → stops at ~100 iters → ~1.8s (50% faster)\r\n * Ambiguous (borderline metrics) → runs full 200 iters → ~3.5s (same)\r\n */\r\n\r\nimport { detectQuantizationEntropy } from '../analysis/jitter.js';\r\n\r\n// ---------------------------------------------------------------------------\r\n// Quick classifier (cheap, runs after every batch)\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Fast signal-quality check. No Hurst, no thermal analysis — just the three\r\n * metrics that converge quickest: QE, CV, and lag-1 autocorrelation.\r\n *\r\n * @param {number[]} timings\r\n * @returns {{ vmConf: number, hwConf: number, qe: number, cv: number, lag1: number }}\r\n */\r\nexport function quickSignal(timings) {\r\n const n = timings.length;\r\n const mean = timings.reduce((s, v) => s + v, 0) / n;\r\n const variance = timings.reduce((s, v) => s + (v - mean) ** 2, 0) / n;\r\n const cv = mean > 0 ? Math.sqrt(variance) / mean : 0;\r\n const qe = detectQuantizationEntropy(timings);\r\n\r\n // Pearson autocorrelation at lag-1 (O(n), fits in a single pass)\r\n let num = 0, da = 0, db = 0;\r\n for (let i = 0; i < n - 1; i++) {\r\n const a = timings[i] - mean;\r\n const b = timings[i + 1] - mean;\r\n num += a * b;\r\n da += a * a;\r\n db += b * b;\r\n }\r\n const lag1 = Math.sqrt(da * db) < 1e-14 ? 0 : num / Math.sqrt(da * db);\r\n\r\n // VM confidence: each factor independently identifies the hypervisor footprint\r\n const vmConf = Math.min(1,\r\n (qe < 1.50 ? 0.40 : qe < 2.00 ? 0.20 : 0.0) +\r\n (lag1 > 0.60 ? 0.35 : lag1 > 0.40 ? 0.18 : 0.0) +\r\n (cv < 0.04 ? 0.25 : cv < 0.07 ? 0.10 : 0.0)\r\n );\r\n\r\n // HW confidence: must see all three positive signals together\r\n const hwConf = Math.min(1,\r\n (qe > 3.50 ? 0.38 : qe > 3.00 ? 0.22 : 0.0) +\r\n (Math.abs(lag1) < 0.10 ? 0.32 : Math.abs(lag1) < 0.20 ? 0.15 : 0.0) +\r\n (cv > 0.10 ? 0.30 : cv > 0.07 ? 0.14 : 0.0)\r\n );\r\n\r\n return { vmConf, hwConf, qe, cv, lag1 };\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// collectEntropyAdaptive\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * @param {object} opts\r\n * @param {number} [opts.minIterations=50] - never stop before this\r\n * @param {number} [opts.maxIterations=200] - hard cap\r\n * @param {number} [opts.batchSize=25] - WASM call granularity\r\n * @param {number} [opts.vmThreshold=0.85] - stop early if VM confidence ≥ this\r\n * @param {number} [opts.hwThreshold=0.80] - stop early if HW confidence ≥ this\r\n * @param {number} [opts.hwMinIterations=75] - physical needs more data to confirm\r\n * @param {number} [opts.matrixSize=64]\r\n * @param {Function} [opts.onBatch] - called after each batch with interim signal\r\n * @param {string} [opts.wasmPath]\r\n * @param {Function} wasmModule - pre-initialised WASM module\r\n * @returns {Promise<AdaptiveEntropyResult>}\r\n */\r\nexport async function collectEntropyAdaptive(wasmModule, opts = {}) {\r\n const {\r\n minIterations = 50,\r\n maxIterations = 200,\r\n batchSize = 25,\r\n vmThreshold = 0.85,\r\n hwThreshold = 0.80,\r\n hwMinIterations = 75,\r\n matrixSize = 64,\r\n onBatch,\r\n } = opts;\r\n\r\n const wasm = wasmModule;\r\n const allTimings = [];\r\n const batches = []; // per-batch timing snapshots\r\n let stoppedAt = null; // { reason, iterations, vmConf, hwConf }\r\n let checksum = 0;\r\n\r\n const t_start = Date.now();\r\n\r\n while (allTimings.length < maxIterations) {\r\n const n = Math.min(batchSize, maxIterations - allTimings.length);\r\n const result = wasm.run_entropy_probe(n, matrixSize);\r\n const chunk = Array.from(result.timings);\r\n\r\n allTimings.push(...chunk);\r\n checksum += result.checksum;\r\n\r\n const sig = quickSignal(allTimings);\r\n batches.push({ iterations: allTimings.length, ...sig });\r\n\r\n // Fire progress callback with live signal so callers can stream to UI\r\n if (typeof onBatch === 'function') {\r\n try {\r\n onBatch({\r\n iterations: allTimings.length,\r\n maxIterations,\r\n pct: Math.round(allTimings.length / maxIterations * 100),\r\n vmConf: sig.vmConf,\r\n hwConf: sig.hwConf,\r\n qe: sig.qe,\r\n cv: sig.cv,\r\n lag1: sig.lag1,\r\n // Thresholds: 0.70 — high enough that a legitimate device won't be\r\n // shown a false early verdict from a noisy first batch.\r\n // 'borderline' surfaces when one axis is moderate but not decisive.\r\n earlyVerdict: sig.vmConf > 0.70 ? 'vm'\r\n : sig.hwConf > 0.70 ? 'physical'\r\n : (sig.vmConf > 0.45 || sig.hwConf > 0.45) ? 'borderline'\r\n : 'uncertain',\r\n });\r\n } catch (e) { if (typeof process !== 'undefined' && process.env?.NODE_ENV !== 'production') console.error('[pulse] onBatch error:', e); }\r\n }\r\n\r\n // ── Early-exit checks ──────────────────────────────────────────────────\r\n if (allTimings.length < minIterations) continue;\r\n\r\n if (sig.vmConf >= vmThreshold) {\r\n stoppedAt = { reason: 'VM_SIGNAL_DECISIVE', vmConf: sig.vmConf, hwConf: sig.hwConf };\r\n break;\r\n }\r\n\r\n if (allTimings.length >= hwMinIterations && sig.hwConf >= hwThreshold) {\r\n stoppedAt = { reason: 'PHYSICAL_SIGNAL_DECISIVE', vmConf: sig.vmConf, hwConf: sig.hwConf };\r\n break;\r\n }\r\n }\r\n\r\n const elapsed = Date.now() - t_start;\r\n const iterationsRan = allTimings.length;\r\n const iterationsSaved = maxIterations - iterationsRan;\r\n const speedupFactor = maxIterations / iterationsRan;\r\n\r\n // ── Resolution probe using cached WASM call ────────────────────────────\r\n const resResult = wasm.run_entropy_probe(1, 4); // tiny probe for resolution\r\n const resProbe = Array.from(resResult.resolution_probe ?? []);\r\n\r\n const resDeltas = [];\r\n for (let i = 1; i < resProbe.length; i++) {\r\n const d = resProbe[i] - resProbe[i - 1];\r\n if (d > 0) resDeltas.push(d);\r\n }\r\n\r\n return {\r\n timings: allTimings,\r\n iterations: iterationsRan,\r\n maxIterations,\r\n checksum: checksum.toString(),\r\n resolutionProbe: resProbe,\r\n timerGranularityMs: resDeltas.length\r\n ? resDeltas.reduce((a, b) => Math.min(a, b), Infinity)\r\n : null,\r\n earlyExit: stoppedAt ? {\r\n ...stoppedAt,\r\n iterationsSaved,\r\n timeSavedMs: Math.round(iterationsSaved * (elapsed / iterationsRan)),\r\n speedupFactor: +speedupFactor.toFixed(2),\r\n } : null,\r\n batches,\r\n elapsedMs: elapsed,\r\n collectedAt: t_start,\r\n matrixSize,\r\n phased: false, // adaptive replaces phased for speed\r\n };\r\n}\r\n\r\n/**\r\n * @typedef {object} AdaptiveEntropyResult\r\n * @property {number[]} timings\r\n * @property {number} iterations - how many actually ran\r\n * @property {number} maxIterations - cap that was set\r\n * @property {object|null} earlyExit - null if ran to completion\r\n * @property {object[]} batches - per-batch signal snapshots\r\n * @property {number} elapsedMs\r\n */\r\n","/**\r\n * @svrnsec/pulse — Entropy Collector\r\n *\r\n * Bridges the Rust/WASM matrix-multiply probe into JavaScript.\r\n * The WASM module is lazily initialised once and cached for subsequent calls.\r\n */\r\n\r\nimport { collectEntropyAdaptive } from './adaptive.js';\r\n\r\n// ---------------------------------------------------------------------------\r\n// WASM loader (lazy singleton)\r\n// ---------------------------------------------------------------------------\r\nlet _wasmModule = null;\r\nlet _initPromise = null;\r\n\r\n/**\r\n * Initialise (or return the cached) WASM module.\r\n * Works in browsers (via fetch), in Electron (Node.js context), and in\r\n * Jest/Vitest via a manual WASM path override.\r\n *\r\n * @param {string} [wasmPath] – override path/URL to the .wasm binary\r\n */\r\nasync function initWasm(wasmPath) {\r\n if (_wasmModule) return _wasmModule;\r\n if (_initPromise) return _initPromise;\r\n\r\n _initPromise = (async () => {\r\n // Dynamic import so bundlers can tree-shake this for server-only builds.\r\n const { default: init, run_entropy_probe, run_memory_probe, compute_autocorrelation } =\r\n await import('../../pkg/pulse_core.js');\r\n\r\n const url = wasmPath ?? new URL('../../pkg/pulse_core_bg.wasm', import.meta.url).href;\r\n await init(url);\r\n\r\n _wasmModule = { run_entropy_probe, run_memory_probe, compute_autocorrelation };\r\n return _wasmModule;\r\n })();\r\n\r\n return _initPromise;\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// collectEntropy\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Run the WASM entropy probe and return raw timing data.\r\n *\r\n * @param {object} opts\r\n * @param {number} [opts.iterations=200] - number of matrix-multiply rounds\r\n * @param {number} [opts.matrixSize=64] - N for the N×N matrices\r\n * @param {number} [opts.memSizeKb=512] - size of the memory bandwidth probe\r\n * @param {number} [opts.memIterations=50]\r\n * @param {boolean} [opts.phased=true] - run cold/load/hot phases for entropy-jitter ratio\r\n * @param {string} [opts.wasmPath] - optional custom WASM binary path\r\n *\r\n * @returns {Promise<EntropyResult>}\r\n */\r\nexport async function collectEntropy(opts = {}) {\r\n const {\r\n iterations = 200,\r\n matrixSize = 64,\r\n memSizeKb = 512,\r\n memIterations = 50,\r\n phased = true,\r\n adaptive = false,\r\n adaptiveThreshold = 0.85,\r\n onBatch,\r\n wasmPath,\r\n } = opts;\r\n\r\n const wasm = await initWasm(wasmPath);\r\n const t_start = Date.now();\r\n\r\n let phases = null;\r\n let timings, resolutionProbe, checksum, timerGranularityMs;\r\n let _adaptiveInfo = null;\r\n\r\n // ── Adaptive mode: smart early exit, fastest for obvious VMs ──────────\r\n if (adaptive) {\r\n const r = await collectEntropyAdaptive(wasm, {\r\n minIterations: 50,\r\n maxIterations: iterations,\r\n batchSize: 25,\r\n vmThreshold: adaptiveThreshold,\r\n hwThreshold: 0.80,\r\n hwMinIterations: 75,\r\n matrixSize,\r\n onBatch,\r\n });\r\n timings = r.timings;\r\n resolutionProbe = r.resolutionProbe ?? [];\r\n checksum = r.checksum;\r\n timerGranularityMs = r.timerGranularityMs;\r\n _adaptiveInfo = { earlyExit: r.earlyExit, batches: r.batches, elapsedMs: r.elapsedMs };\r\n\r\n // ── Phased collection: cold → load → hot ──────────────────────────────\r\n // Each phase runs a separate WASM probe. On real hardware, sustained load\r\n // increases thermal noise so Phase 3 (hot) entropy is measurably higher\r\n // than Phase 1 (cold). A VM's hypervisor clock is insensitive to guest\r\n // thermal state, so all three phases return nearly identical entropy.\r\n } else if (phased && iterations >= 60) {\r\n const coldN = Math.floor(iterations * 0.25); // ~25% cold\r\n const loadN = Math.floor(iterations * 0.50); // ~50% sustained load\r\n const hotN = iterations - coldN - loadN; // ~25% hot\r\n\r\n const cold = wasm.run_entropy_probe(coldN, matrixSize);\r\n const load = wasm.run_entropy_probe(loadN, matrixSize);\r\n const hot = wasm.run_entropy_probe(hotN, matrixSize);\r\n\r\n const coldTimings = Array.from(cold.timings);\r\n const loadTimings = Array.from(load.timings);\r\n const hotTimings = Array.from(hot.timings);\r\n\r\n timings = [...coldTimings, ...loadTimings, ...hotTimings];\r\n resolutionProbe = Array.from(cold.resolution_probe);\r\n checksum = (cold.checksum + load.checksum + hot.checksum).toString();\r\n\r\n const { detectQuantizationEntropy } = await import('../analysis/jitter.js');\r\n const coldQE = detectQuantizationEntropy(coldTimings);\r\n const hotQE = detectQuantizationEntropy(hotTimings);\r\n\r\n phases = {\r\n cold: { n: coldN, timings: coldTimings, qe: coldQE, mean: _mean(coldTimings) },\r\n load: { n: loadN, timings: loadTimings, qe: detectQuantizationEntropy(loadTimings), mean: _mean(loadTimings) },\r\n hot: { n: hotN, timings: hotTimings, qe: hotQE, mean: _mean(hotTimings) },\r\n // The key signal: entropy growth under load.\r\n // Real silicon: hotQE / coldQE typically 1.05 – 1.40\r\n // VM: hotQE / coldQE typically 0.95 – 1.05 (flat)\r\n entropyJitterRatio: coldQE > 0 ? hotQE / coldQE : 1.0,\r\n };\r\n } else {\r\n // Single-phase fallback (fewer iterations or phased disabled)\r\n const result = wasm.run_entropy_probe(iterations, matrixSize);\r\n timings = Array.from(result.timings);\r\n resolutionProbe = Array.from(result.resolution_probe);\r\n checksum = result.checksum.toString();\r\n }\r\n\r\n // ── Timer resolution (non-adaptive path only — adaptive computes its own) ─\r\n if (!adaptive) {\r\n const resDeltas = [];\r\n for (let i = 1; i < resolutionProbe.length; i++) {\r\n const d = resolutionProbe[i] - resolutionProbe[i - 1];\r\n if (d > 0) resDeltas.push(d);\r\n }\r\n timerGranularityMs = resDeltas.length\r\n ? resDeltas.reduce((a, b) => Math.min(a, b), Infinity)\r\n : null;\r\n }\r\n\r\n // ── Autocorrelation at diagnostic lags ────────────────────────────────\r\n // Extended lags catch long-period steal-time rhythms (Xen: ~150 iters)\r\n const lags = [1, 2, 3, 5, 10, 25, 50];\r\n const autocorrelations = {};\r\n for (const lag of lags) {\r\n if (lag < timings.length) {\r\n autocorrelations[`lag${lag}`] = wasm.compute_autocorrelation(timings, lag);\r\n }\r\n }\r\n\r\n // ── Secondary probe: memory bandwidth jitter ───────────────────────────\r\n const memTimings = Array.from(wasm.run_memory_probe(memSizeKb, memIterations));\r\n\r\n return {\r\n timings,\r\n resolutionProbe,\r\n timerGranularityMs,\r\n autocorrelations,\r\n memTimings,\r\n phases,\r\n checksum,\r\n collectedAt: t_start,\r\n iterations: timings.length, // actual count (adaptive may differ from requested)\r\n matrixSize,\r\n adaptive: _adaptiveInfo, // null in non-adaptive mode\r\n };\r\n}\r\n\r\nfunction _mean(arr) {\r\n return arr.length ? arr.reduce((s, v) => s + v, 0) / arr.length : 0;\r\n}\r\n\r\n/**\r\n * @typedef {object} EntropyResult\r\n * @property {number[]} timings - per-iteration wall-clock deltas (ms)\r\n * @property {number[]} resolutionProbe - raw successive perf.now() readings\r\n * @property {number|null} timerGranularityMs - effective timer resolution\r\n * @property {object} autocorrelations - { lag1, lag2, lag3, lag5, lag10 }\r\n * @property {number[]} memTimings - memory-probe timings (ms)\r\n * @property {string} checksum - proof the computation ran\r\n * @property {number} collectedAt - Date.now() at probe start\r\n * @property {number} iterations\r\n * @property {number} matrixSize\r\n */\r\n","/**\r\n * @svrnsec/pulse — Bio-Binding Layer\r\n *\r\n * Captures mouse-movement micro-stutters and keystroke-cadence dynamics\r\n * WHILE the hardware entropy probe is running. Computes the\r\n * \"Interference Coefficient\": how much human input jitters hardware timing.\r\n *\r\n * PRIVACY NOTE: Only timing deltas are retained. No key labels, no raw\r\n * (x, y) coordinates, no content of any kind is stored or transmitted.\r\n */\r\n\r\n// ---------------------------------------------------------------------------\r\n// Internal state\r\n// ---------------------------------------------------------------------------\r\nconst MAX_EVENTS = 500; // rolling buffer cap\r\nconst MAX_KEY_STATES = 50; // cap on simultaneous tracked key states\r\n\r\n// ---------------------------------------------------------------------------\r\n// BioCollector class\r\n// ---------------------------------------------------------------------------\r\nexport class BioCollector {\r\n constructor() {\r\n this._mouseEvents = []; // { t: DOMHighResTimeStamp, dx, dy }\r\n this._keyEvents = []; // { t, type: 'down'|'up', dwell: ms|null }\r\n this._lastKey = {}; // keyCode → { downAt: t }\r\n this._lastMouse = null; // { t, x, y }\r\n this._startTime = null;\r\n this._active = false;\r\n\r\n // Bound handlers (needed for removeEventListener)\r\n this._onMouseMove = this._onMouseMove.bind(this);\r\n this._onKeyDown = this._onKeyDown.bind(this);\r\n this._onKeyUp = this._onKeyUp.bind(this);\r\n }\r\n\r\n // ── Lifecycle ────────────────────────────────────────────────────────────\r\n\r\n start() {\r\n if (this._active) return;\r\n this._active = true;\r\n this._startTime = performance.now();\r\n\r\n if (typeof window !== 'undefined') {\r\n window.addEventListener('pointermove', this._onMouseMove, { passive: true });\r\n window.addEventListener('keydown', this._onKeyDown, { passive: true });\r\n window.addEventListener('keyup', this._onKeyUp, { passive: true });\r\n }\r\n }\r\n\r\n stop() {\r\n if (!this._active) return;\r\n this._active = false;\r\n\r\n if (typeof window !== 'undefined') {\r\n window.removeEventListener('pointermove', this._onMouseMove);\r\n window.removeEventListener('keydown', this._onKeyDown);\r\n window.removeEventListener('keyup', this._onKeyUp);\r\n }\r\n\r\n this._lastMouse = null;\r\n }\r\n\r\n // ── Event handlers ────────────────────────────────────────────────────────\r\n\r\n _onMouseMove(e) {\r\n if (!this._active) return;\r\n const t = e.timeStamp ?? performance.now();\r\n const cur = { t, x: e.clientX, y: e.clientY };\r\n\r\n if (this._lastMouse) {\r\n const dt = t - this._lastMouse.t;\r\n const dx = cur.x - this._lastMouse.x;\r\n const dy = cur.y - this._lastMouse.y;\r\n // Only store the delta, not absolute position (privacy)\r\n if (this._mouseEvents.length < MAX_EVENTS) {\r\n this._mouseEvents.push({ t, dt, dx, dy,\r\n pressure: e.pressure ?? 0,\r\n pointerType: e.pointerType ?? 'mouse' });\r\n }\r\n }\r\n this._lastMouse = cur;\r\n }\r\n\r\n _onKeyDown(e) {\r\n if (!this._active) return;\r\n const t = e.timeStamp ?? performance.now();\r\n // Store timestamp keyed by code (NOT key label)\r\n this._lastKey[e.code] = { downAt: t };\r\n // Prevent unbounded growth if keys are held without keyup\r\n if (Object.keys(this._lastKey).length > MAX_KEY_STATES) {\r\n const oldest = Object.entries(this._lastKey)\r\n .sort((a, b) => a[1].downAt - b[1].downAt)[0];\r\n if (oldest) delete this._lastKey[oldest[0]];\r\n }\r\n }\r\n\r\n _onKeyUp(e) {\r\n if (!this._active) return;\r\n const t = e.timeStamp ?? performance.now();\r\n const rec = this._lastKey[e.code];\r\n const dwell = rec ? (t - rec.downAt) : null;\r\n delete this._lastKey[e.code];\r\n\r\n if (this._keyEvents.length < MAX_EVENTS) {\r\n // Only dwell time; key identity NOT stored.\r\n this._keyEvents.push({ t, dwell });\r\n }\r\n }\r\n\r\n // ── snapshot ─────────────────────────────────────────────────────────────\r\n\r\n /**\r\n * Returns a privacy-preserving statistical snapshot of collected bio signals.\r\n * Raw events are summarised; nothing identifiable is included in the output.\r\n *\r\n * @param {number[]} computationTimings - entropy probe timing array\r\n * @returns {BioSnapshot}\r\n */\r\n snapshot(computationTimings = []) {\r\n const now = performance.now();\r\n const durationMs = this._startTime != null ? (now - this._startTime) : 0;\r\n\r\n // ── Mouse statistics ────────────────────────────────────────────────\r\n const iei = this._mouseEvents.map(e => e.dt);\r\n const velocities = this._mouseEvents.map(e =>\r\n e.dt > 0 ? Math.hypot(e.dx, e.dy) / e.dt : 0\r\n );\r\n const pressure = this._mouseEvents.map(e => e.pressure);\r\n const angJerk = _computeAngularJerk(this._mouseEvents);\r\n\r\n const mouseStats = {\r\n sampleCount: iei.length,\r\n ieiMean: _mean(iei),\r\n ieiCV: _cv(iei),\r\n velocityP50: _percentile(velocities, 50),\r\n velocityP95: _percentile(velocities, 95),\r\n angularJerkMean: _mean(angJerk),\r\n pressureVariance: _variance(pressure),\r\n };\r\n\r\n // ── Keyboard statistics ───────────────────────────────────────────────\r\n const dwellTimes = this._keyEvents.filter(e => e.dwell != null).map(e => e.dwell);\r\n const iki = [];\r\n for (let i = 1; i < this._keyEvents.length; i++) {\r\n iki.push(this._keyEvents[i].t - this._keyEvents[i - 1].t);\r\n }\r\n\r\n const keyStats = {\r\n sampleCount: dwellTimes.length,\r\n dwellMean: _mean(dwellTimes),\r\n dwellCV: _cv(dwellTimes),\r\n ikiMean: _mean(iki),\r\n ikiCV: _cv(iki),\r\n };\r\n\r\n // ── Interference Coefficient ──────────────────────────────────────────\r\n // Cross-correlate input event density with computation timing deviations.\r\n // A real human on real hardware creates measurable CPU-scheduling pressure\r\n // that perturbs the entropy probe's timing.\r\n const interferenceCoefficient = _computeInterference(\r\n this._mouseEvents,\r\n this._keyEvents,\r\n computationTimings,\r\n );\r\n\r\n return {\r\n mouse: mouseStats,\r\n keyboard: keyStats,\r\n interferenceCoefficient,\r\n durationMs,\r\n hasActivity: iei.length > 5 || dwellTimes.length > 2,\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * @typedef {object} BioSnapshot\r\n * @property {object} mouse\r\n * @property {object} keyboard\r\n * @property {number} interferenceCoefficient – [−1, 1]; higher = more human\r\n * @property {number} durationMs\r\n * @property {boolean} hasActivity\r\n */\r\n\r\n// ---------------------------------------------------------------------------\r\n// Statistical helpers (private)\r\n// ---------------------------------------------------------------------------\r\n\r\nfunction _mean(arr) {\r\n if (!arr.length) return 0;\r\n return arr.reduce((a, b) => a + b, 0) / arr.length;\r\n}\r\n\r\nfunction _variance(arr) {\r\n if (arr.length < 2) return 0;\r\n const m = _mean(arr);\r\n return arr.reduce((s, v) => s + (v - m) ** 2, 0) / (arr.length - 1);\r\n}\r\n\r\nfunction _cv(arr) {\r\n if (!arr.length) return 0;\r\n const m = _mean(arr);\r\n if (m === 0) return 0;\r\n return Math.sqrt(_variance(arr)) / Math.abs(m);\r\n}\r\n\r\nfunction _percentile(sorted, p) {\r\n const arr = [...sorted].sort((a, b) => a - b);\r\n if (!arr.length) return 0;\r\n const idx = (p / 100) * (arr.length - 1);\r\n const lo = Math.floor(idx);\r\n const hi = Math.ceil(idx);\r\n return arr[lo] + (arr[hi] - arr[lo]) * (idx - lo);\r\n}\r\n\r\n/** Angular jerk: second derivative of movement direction (radians / s²) */\r\nfunction _computeAngularJerk(events) {\r\n if (events.length < 3) return [];\r\n const angles = [];\r\n for (let i = 0; i < events.length; i++) {\r\n const { dx, dy } = events[i];\r\n angles.push(Math.atan2(dy, dx));\r\n }\r\n const d1 = [];\r\n for (let i = 1; i < angles.length; i++) {\r\n const dt = events[i].dt || 1;\r\n d1.push((angles[i] - angles[i - 1]) / dt);\r\n }\r\n const d2 = [];\r\n for (let i = 1; i < d1.length; i++) {\r\n const dt = events[i].dt || 1;\r\n d2.push(Math.abs((d1[i] - d1[i - 1]) / dt));\r\n }\r\n return d2;\r\n}\r\n\r\n/**\r\n * Interference Coefficient\r\n *\r\n * For each computation sample, check whether an input event occurred within\r\n * ±16 ms (one animation frame). Build two parallel series:\r\n * X[i] = 1 if input near sample i, else 0\r\n * Y[i] = deviation of timing[i] from mean timing\r\n * Return the Pearson correlation between X and Y.\r\n * A real human on real hardware produces positive correlation (input events\r\n * cause measurable CPU scheduling perturbations).\r\n */\r\nfunction _computeInterference(mouseEvents, keyEvents, timings) {\r\n if (!timings.length) return 0;\r\n\r\n const allInputTimes = [\r\n ...mouseEvents.map(e => e.t),\r\n ...keyEvents.map(e => e.t),\r\n ].sort((a, b) => a - b);\r\n\r\n if (!allInputTimes.length) return 0;\r\n\r\n const WINDOW_MS = 16;\r\n const meanTiming = _mean(timings);\r\n\r\n // Note: timing alignment is approximate; probe start timestamp would improve accuracy\r\n // We need absolute timestamps for the probe samples.\r\n // We don't have them directly – use relative index spacing as a proxy.\r\n // The entropy probe runs for ~(mean * n) ms starting at collectedAt.\r\n // This is a statistical approximation; the exact alignment improves\r\n // when callers pass `collectedAt` from the entropy result.\r\n // For now we distribute samples evenly across the collection window.\r\n const first = allInputTimes[0];\r\n const last = allInputTimes[allInputTimes.length - 1];\r\n const span = Math.max(last - first, 1);\r\n\r\n const X = timings.map((_, i) => {\r\n const tSample = first + (i / timings.length) * span;\r\n return allInputTimes.some(t => Math.abs(t - tSample) < WINDOW_MS) ? 1 : 0;\r\n });\r\n\r\n const Y = timings.map(t => t - meanTiming);\r\n\r\n return _pearson(X, Y);\r\n}\r\n\r\nfunction _pearson(X, Y) {\r\n const n = X.length;\r\n if (n < 2) return 0;\r\n const mx = _mean(X);\r\n const my = _mean(Y);\r\n let num = 0, da = 0, db = 0;\r\n for (let i = 0; i < n; i++) {\r\n const a = X[i] - mx;\r\n const b = Y[i] - my;\r\n num += a * b;\r\n da += a * a;\r\n db += b * b;\r\n }\r\n const denom = Math.sqrt(da * db);\r\n return denom < 1e-14 ? 0 : num / denom;\r\n}\r\n","/**\n * Utilities for hex, bytes, CSPRNG.\n * @module\n */\n/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// node.js versions earlier than v19 don't declare it in global scope.\n// For node.js, package.json#exports field mapping rewrites import\n// from `crypto` to `cryptoNode`, which imports native module.\n// Makes the utils un-importable in browsers without a bundler.\n// Once node.js 18 is deprecated (2025-04-30), we can just drop the import.\nimport { crypto } from '@noble/hashes/crypto';\n/** Checks if something is Uint8Array. Be careful: nodejs Buffer will return true. */\nexport function isBytes(a) {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n/** Asserts something is positive integer. */\nexport function anumber(n) {\n if (!Number.isSafeInteger(n) || n < 0)\n throw new Error('positive integer expected, got ' + n);\n}\n/** Asserts something is Uint8Array. */\nexport function abytes(b, ...lengths) {\n if (!isBytes(b))\n throw new Error('Uint8Array expected');\n if (lengths.length > 0 && !lengths.includes(b.length))\n throw new Error('Uint8Array expected of length ' + lengths + ', got length=' + b.length);\n}\n/** Asserts something is hash */\nexport function ahash(h) {\n if (typeof h !== 'function' || typeof h.create !== 'function')\n throw new Error('Hash should be wrapped by utils.createHasher');\n anumber(h.outputLen);\n anumber(h.blockLen);\n}\n/** Asserts a hash instance has not been destroyed / finished */\nexport function aexists(instance, checkFinished = true) {\n if (instance.destroyed)\n throw new Error('Hash instance has been destroyed');\n if (checkFinished && instance.finished)\n throw new Error('Hash#digest() has already been called');\n}\n/** Asserts output is properly-sized byte array */\nexport function aoutput(out, instance) {\n abytes(out);\n const min = instance.outputLen;\n if (out.length < min) {\n throw new Error('digestInto() expects output buffer of length at least ' + min);\n }\n}\n/** Cast u8 / u16 / u32 to u8. */\nexport function u8(arr) {\n return new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n/** Cast u8 / u16 / u32 to u32. */\nexport function u32(arr) {\n return new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n}\n/** Zeroize a byte array. Warning: JS provides no guarantees. */\nexport function clean(...arrays) {\n for (let i = 0; i < arrays.length; i++) {\n arrays[i].fill(0);\n }\n}\n/** Create DataView of an array for easy byte-level manipulation. */\nexport function createView(arr) {\n return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n/** The rotate right (circular right shift) operation for uint32 */\nexport function rotr(word, shift) {\n return (word << (32 - shift)) | (word >>> shift);\n}\n/** The rotate left (circular left shift) operation for uint32 */\nexport function rotl(word, shift) {\n return (word << shift) | ((word >>> (32 - shift)) >>> 0);\n}\n/** Is current platform little-endian? Most are. Big-Endian platform: IBM */\nexport const isLE = /* @__PURE__ */ (() => new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44)();\n/** The byte swap operation for uint32 */\nexport function byteSwap(word) {\n return (((word << 24) & 0xff000000) |\n ((word << 8) & 0xff0000) |\n ((word >>> 8) & 0xff00) |\n ((word >>> 24) & 0xff));\n}\n/** Conditionally byte swap if on a big-endian platform */\nexport const swap8IfBE = isLE\n ? (n) => n\n : (n) => byteSwap(n);\n/** @deprecated */\nexport const byteSwapIfBE = swap8IfBE;\n/** In place byte swap for Uint32Array */\nexport function byteSwap32(arr) {\n for (let i = 0; i < arr.length; i++) {\n arr[i] = byteSwap(arr[i]);\n }\n return arr;\n}\nexport const swap32IfBE = isLE\n ? (u) => u\n : byteSwap32;\n// Built-in hex conversion https://caniuse.com/mdn-javascript_builtins_uint8array_fromhex\nconst hasHexBuiltin = /* @__PURE__ */ (() => \n// @ts-ignore\ntypeof Uint8Array.from([]).toHex === 'function' && typeof Uint8Array.fromHex === 'function')();\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, '0'));\n/**\n * Convert byte array to hex string. Uses built-in function, when available.\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes) {\n abytes(bytes);\n // @ts-ignore\n if (hasHexBuiltin)\n return bytes.toHex();\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += hexes[bytes[i]];\n }\n return hex;\n}\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 };\nfunction asciiToBase16(ch) {\n if (ch >= asciis._0 && ch <= asciis._9)\n return ch - asciis._0; // '2' => 50-48\n if (ch >= asciis.A && ch <= asciis.F)\n return ch - (asciis.A - 10); // 'B' => 66-(65-10)\n if (ch >= asciis.a && ch <= asciis.f)\n return ch - (asciis.a - 10); // 'b' => 98-(97-10)\n return;\n}\n/**\n * Convert hex string to byte array. Uses built-in function, when available.\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex) {\n if (typeof hex !== 'string')\n throw new Error('hex string expected, got ' + typeof hex);\n // @ts-ignore\n if (hasHexBuiltin)\n return Uint8Array.fromHex(hex);\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2)\n throw new Error('hex string expected, got unpadded hex of length ' + hl);\n const array = new Uint8Array(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n const n1 = asciiToBase16(hex.charCodeAt(hi));\n const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n if (n1 === undefined || n2 === undefined) {\n const char = hex[hi] + hex[hi + 1];\n throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n }\n array[ai] = n1 * 16 + n2; // multiply first octet, e.g. 'a3' => 10*16+3 => 160 + 3 => 163\n }\n return array;\n}\n/**\n * There is no setImmediate in browser and setTimeout is slow.\n * Call of async fn will return Promise, which will be fullfiled only on\n * next scheduler queue processing step and this is exactly what we need.\n */\nexport const nextTick = async () => { };\n/** Returns control to thread each 'tick' ms to avoid blocking. */\nexport async function asyncLoop(iters, tick, cb) {\n let ts = Date.now();\n for (let i = 0; i < iters; i++) {\n cb(i);\n // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n const diff = Date.now() - ts;\n if (diff >= 0 && diff < tick)\n continue;\n await nextTick();\n ts += diff;\n }\n}\n/**\n * Converts string to bytes using UTF8 encoding.\n * @example utf8ToBytes('abc') // Uint8Array.from([97, 98, 99])\n */\nexport function utf8ToBytes(str) {\n if (typeof str !== 'string')\n throw new Error('string expected');\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n/**\n * Converts bytes to string using UTF8 encoding.\n * @example bytesToUtf8(Uint8Array.from([97, 98, 99])) // 'abc'\n */\nexport function bytesToUtf8(bytes) {\n return new TextDecoder().decode(bytes);\n}\n/**\n * Normalizes (non-hex) string or Uint8Array to Uint8Array.\n * Warning: when Uint8Array is passed, it would NOT get copied.\n * Keep in mind for future mutable operations.\n */\nexport function toBytes(data) {\n if (typeof data === 'string')\n data = utf8ToBytes(data);\n abytes(data);\n return data;\n}\n/**\n * Helper for KDFs: consumes uint8array or string.\n * When string is passed, does utf8 decoding, using TextDecoder.\n */\nexport function kdfInputToBytes(data) {\n if (typeof data === 'string')\n data = utf8ToBytes(data);\n abytes(data);\n return data;\n}\n/** Copies several Uint8Arrays into one. */\nexport function concatBytes(...arrays) {\n let sum = 0;\n for (let i = 0; i < arrays.length; i++) {\n const a = arrays[i];\n abytes(a);\n sum += a.length;\n }\n const res = new Uint8Array(sum);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const a = arrays[i];\n res.set(a, pad);\n pad += a.length;\n }\n return res;\n}\nexport function checkOpts(defaults, opts) {\n if (opts !== undefined && {}.toString.call(opts) !== '[object Object]')\n throw new Error('options should be object or undefined');\n const merged = Object.assign(defaults, opts);\n return merged;\n}\n/** For runtime check if class implements interface */\nexport class Hash {\n}\n/** Wraps hash function, creating an interface on top of it */\nexport function createHasher(hashCons) {\n const hashC = (msg) => hashCons().update(toBytes(msg)).digest();\n const tmp = hashCons();\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = () => hashCons();\n return hashC;\n}\nexport function createOptHasher(hashCons) {\n const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({});\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n return hashC;\n}\nexport function createXOFer(hashCons) {\n const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({});\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n return hashC;\n}\nexport const wrapConstructor = createHasher;\nexport const wrapConstructorWithOpts = createOptHasher;\nexport const wrapXOFConstructorWithOpts = createXOFer;\n/** Cryptographically secure PRNG. Uses internal OS-level `crypto.getRandomValues`. */\nexport function randomBytes(bytesLength = 32) {\n if (crypto && typeof crypto.getRandomValues === 'function') {\n return crypto.getRandomValues(new Uint8Array(bytesLength));\n }\n // Legacy Node.js compatibility\n if (crypto && typeof crypto.randomBytes === 'function') {\n return Uint8Array.from(crypto.randomBytes(bytesLength));\n }\n throw new Error('crypto.getRandomValues must be defined');\n}\n//# sourceMappingURL=utils.js.map","/**\n * Internal Merkle-Damgard hash utils.\n * @module\n */\nimport { Hash, abytes, aexists, aoutput, clean, createView, toBytes } from \"./utils.js\";\n/** Polyfill for Safari 14. https://caniuse.com/mdn-javascript_builtins_dataview_setbiguint64 */\nexport function setBigUint64(view, byteOffset, value, isLE) {\n if (typeof view.setBigUint64 === 'function')\n return view.setBigUint64(byteOffset, value, isLE);\n const _32n = BigInt(32);\n const _u32_max = BigInt(0xffffffff);\n const wh = Number((value >> _32n) & _u32_max);\n const wl = Number(value & _u32_max);\n const h = isLE ? 4 : 0;\n const l = isLE ? 0 : 4;\n view.setUint32(byteOffset + h, wh, isLE);\n view.setUint32(byteOffset + l, wl, isLE);\n}\n/** Choice: a ? b : c */\nexport function Chi(a, b, c) {\n return (a & b) ^ (~a & c);\n}\n/** Majority function, true if any two inputs is true. */\nexport function Maj(a, b, c) {\n return (a & b) ^ (a & c) ^ (b & c);\n}\n/**\n * Merkle-Damgard hash construction base class.\n * Could be used to create MD5, RIPEMD, SHA1, SHA2.\n */\nexport class HashMD extends Hash {\n constructor(blockLen, outputLen, padOffset, isLE) {\n super();\n this.finished = false;\n this.length = 0;\n this.pos = 0;\n this.destroyed = false;\n this.blockLen = blockLen;\n this.outputLen = outputLen;\n this.padOffset = padOffset;\n this.isLE = isLE;\n this.buffer = new Uint8Array(blockLen);\n this.view = createView(this.buffer);\n }\n update(data) {\n aexists(this);\n data = toBytes(data);\n abytes(data);\n const { view, buffer, blockLen } = this;\n const len = data.length;\n for (let pos = 0; pos < len;) {\n const take = Math.min(blockLen - this.pos, len - pos);\n // Fast path: we have at least one block in input, cast it to view and process\n if (take === blockLen) {\n const dataView = createView(data);\n for (; blockLen <= len - pos; pos += blockLen)\n this.process(dataView, pos);\n continue;\n }\n buffer.set(data.subarray(pos, pos + take), this.pos);\n this.pos += take;\n pos += take;\n if (this.pos === blockLen) {\n this.process(view, 0);\n this.pos = 0;\n }\n }\n this.length += data.length;\n this.roundClean();\n return this;\n }\n digestInto(out) {\n aexists(this);\n aoutput(out, this);\n this.finished = true;\n // Padding\n // We can avoid allocation of buffer for padding completely if it\n // was previously not allocated here. But it won't change performance.\n const { buffer, view, blockLen, isLE } = this;\n let { pos } = this;\n // append the bit '1' to the message\n buffer[pos++] = 0b10000000;\n clean(this.buffer.subarray(pos));\n // we have less than padOffset left in buffer, so we cannot put length in\n // current block, need process it and pad again\n if (this.padOffset > blockLen - pos) {\n this.process(view, 0);\n pos = 0;\n }\n // Pad until full block byte with zeros\n for (let i = pos; i < blockLen; i++)\n buffer[i] = 0;\n // Note: sha512 requires length to be 128bit integer, but length in JS will overflow before that\n // You need to write around 2 exabytes (u64_max / 8 / (1024**6)) for this to happen.\n // So we just write lowest 64 bits of that value.\n setBigUint64(view, blockLen - 8, BigInt(this.length * 8), isLE);\n this.process(view, 0);\n const oview = createView(out);\n const len = this.outputLen;\n // NOTE: we do division by 4 later, which should be fused in single op with modulo by JIT\n if (len % 4)\n throw new Error('_sha2: outputLen should be aligned to 32bit');\n const outLen = len / 4;\n const state = this.get();\n if (outLen > state.length)\n throw new Error('_sha2: outputLen bigger than state');\n for (let i = 0; i < outLen; i++)\n oview.setUint32(4 * i, state[i], isLE);\n }\n digest() {\n const { buffer, outputLen } = this;\n this.digestInto(buffer);\n const res = buffer.slice(0, outputLen);\n this.destroy();\n return res;\n }\n _cloneInto(to) {\n to || (to = new this.constructor());\n to.set(...this.get());\n const { blockLen, buffer, length, finished, destroyed, pos } = this;\n to.destroyed = destroyed;\n to.finished = finished;\n to.length = length;\n to.pos = pos;\n if (length % blockLen)\n to.buffer.set(buffer);\n return to;\n }\n clone() {\n return this._cloneInto();\n }\n}\n/**\n * Initial SHA-2 state: fractional parts of square roots of first 16 primes 2..53.\n * Check out `test/misc/sha2-gen-iv.js` for recomputation guide.\n */\n/** Initial SHA256 state. Bits 0..32 of frac part of sqrt of primes 2..19 */\nexport const SHA256_IV = /* @__PURE__ */ Uint32Array.from([\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19,\n]);\n/** Initial SHA224 state. Bits 32..64 of frac part of sqrt of primes 23..53 */\nexport const SHA224_IV = /* @__PURE__ */ Uint32Array.from([\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4,\n]);\n/** Initial SHA384 state. Bits 0..64 of frac part of sqrt of primes 23..53 */\nexport const SHA384_IV = /* @__PURE__ */ Uint32Array.from([\n 0xcbbb9d5d, 0xc1059ed8, 0x629a292a, 0x367cd507, 0x9159015a, 0x3070dd17, 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31, 0x8eb44a87, 0x68581511, 0xdb0c2e0d, 0x64f98fa7, 0x47b5481d, 0xbefa4fa4,\n]);\n/** Initial SHA512 state. Bits 0..64 of frac part of sqrt of primes 2..19 */\nexport const SHA512_IV = /* @__PURE__ */ Uint32Array.from([\n 0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179,\n]);\n//# sourceMappingURL=_md.js.map","/**\n * Internal helpers for u64. BigUint64Array is too slow as per 2025, so we implement it using Uint32Array.\n * @todo re-check https://issues.chromium.org/issues/42212588\n * @module\n */\nconst U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);\nconst _32n = /* @__PURE__ */ BigInt(32);\nfunction fromBig(n, le = false) {\n if (le)\n return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) };\n return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };\n}\nfunction split(lst, le = false) {\n const len = lst.length;\n let Ah = new Uint32Array(len);\n let Al = new Uint32Array(len);\n for (let i = 0; i < len; i++) {\n const { h, l } = fromBig(lst[i], le);\n [Ah[i], Al[i]] = [h, l];\n }\n return [Ah, Al];\n}\nconst toBig = (h, l) => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);\n// for Shift in [0, 32)\nconst shrSH = (h, _l, s) => h >>> s;\nconst shrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in [1, 32)\nconst rotrSH = (h, l, s) => (h >>> s) | (l << (32 - s));\nconst rotrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotrBH = (h, l, s) => (h << (64 - s)) | (l >>> (s - 32));\nconst rotrBL = (h, l, s) => (h >>> (s - 32)) | (l << (64 - s));\n// Right rotate for shift===32 (just swaps l&h)\nconst rotr32H = (_h, l) => l;\nconst rotr32L = (h, _l) => h;\n// Left rotate for Shift in [1, 32)\nconst rotlSH = (h, l, s) => (h << s) | (l >>> (32 - s));\nconst rotlSL = (h, l, s) => (l << s) | (h >>> (32 - s));\n// Left rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotlBH = (h, l, s) => (l << (s - 32)) | (h >>> (64 - s));\nconst rotlBL = (h, l, s) => (h << (s - 32)) | (l >>> (64 - s));\n// JS uses 32-bit signed integers for bitwise operations which means we cannot\n// simple take carry out of low bit sum by shift, we need to use division.\nfunction add(Ah, Al, Bh, Bl) {\n const l = (Al >>> 0) + (Bl >>> 0);\n return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };\n}\n// Addition with more than 2 elements\nconst add3L = (Al, Bl, Cl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nconst add3H = (low, Ah, Bh, Ch) => (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\nconst add4L = (Al, Bl, Cl, Dl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nconst add4H = (low, Ah, Bh, Ch, Dh) => (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\nconst add5L = (Al, Bl, Cl, Dl, El) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\nconst add5H = (low, Ah, Bh, Ch, Dh, Eh) => (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\n// prettier-ignore\nexport { add, add3H, add3L, add4H, add4L, add5H, add5L, fromBig, rotlBH, rotlBL, rotlSH, rotlSL, rotr32H, rotr32L, rotrBH, rotrBL, rotrSH, rotrSL, shrSH, shrSL, split, toBig };\n// prettier-ignore\nconst u64 = {\n fromBig, split, toBig,\n shrSH, shrSL,\n rotrSH, rotrSL, rotrBH, rotrBL,\n rotr32H, rotr32L,\n rotlSH, rotlSL, rotlBH, rotlBL,\n add, add3L, add3H, add4L, add4H, add5H, add5L,\n};\nexport default u64;\n//# sourceMappingURL=_u64.js.map","/**\n * Internal helpers for blake hash.\n * @module\n */\nimport { rotr } from \"./utils.js\";\n/**\n * Internal blake variable.\n * For BLAKE2b, the two extra permutations for rounds 10 and 11 are SIGMA[10..11] = SIGMA[0..1].\n */\n// prettier-ignore\nexport const BSIGMA = /* @__PURE__ */ Uint8Array.from([\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3,\n 11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4,\n 7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8,\n 9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13,\n 2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9,\n 12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11,\n 13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10,\n 6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5,\n 10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13, 0,\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3,\n // Blake1, unused in others\n 11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4,\n 7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8,\n 9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13,\n 2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9,\n]);\n// Mixing function G splitted in two halfs\nexport function G1s(a, b, c, d, x) {\n a = (a + b + x) | 0;\n d = rotr(d ^ a, 16);\n c = (c + d) | 0;\n b = rotr(b ^ c, 12);\n return { a, b, c, d };\n}\nexport function G2s(a, b, c, d, x) {\n a = (a + b + x) | 0;\n d = rotr(d ^ a, 8);\n c = (c + d) | 0;\n b = rotr(b ^ c, 7);\n return { a, b, c, d };\n}\n//# sourceMappingURL=_blake.js.map","/**\n * blake2b (64-bit) & blake2s (8 to 32-bit) hash functions.\n * b could have been faster, but there is no fast u64 in js, so s is 1.5x faster.\n * @module\n */\nimport { BSIGMA, G1s, G2s } from \"./_blake.js\";\nimport { SHA256_IV } from \"./_md.js\";\nimport * as u64 from \"./_u64.js\";\n// prettier-ignore\nimport { abytes, aexists, anumber, aoutput, clean, createOptHasher, Hash, swap32IfBE, swap8IfBE, toBytes, u32 } from \"./utils.js\";\n// Same as SHA512_IV, but swapped endianness: LE instead of BE. iv[1] is iv[0], etc.\nconst B2B_IV = /* @__PURE__ */ Uint32Array.from([\n 0xf3bcc908, 0x6a09e667, 0x84caa73b, 0xbb67ae85, 0xfe94f82b, 0x3c6ef372, 0x5f1d36f1, 0xa54ff53a,\n 0xade682d1, 0x510e527f, 0x2b3e6c1f, 0x9b05688c, 0xfb41bd6b, 0x1f83d9ab, 0x137e2179, 0x5be0cd19,\n]);\n// Temporary buffer\nconst BBUF = /* @__PURE__ */ new Uint32Array(32);\n// Mixing function G splitted in two halfs\nfunction G1b(a, b, c, d, msg, x) {\n // NOTE: V is LE here\n const Xl = msg[x], Xh = msg[x + 1]; // prettier-ignore\n let Al = BBUF[2 * a], Ah = BBUF[2 * a + 1]; // prettier-ignore\n let Bl = BBUF[2 * b], Bh = BBUF[2 * b + 1]; // prettier-ignore\n let Cl = BBUF[2 * c], Ch = BBUF[2 * c + 1]; // prettier-ignore\n let Dl = BBUF[2 * d], Dh = BBUF[2 * d + 1]; // prettier-ignore\n // v[a] = (v[a] + v[b] + x) | 0;\n let ll = u64.add3L(Al, Bl, Xl);\n Ah = u64.add3H(ll, Ah, Bh, Xh);\n Al = ll | 0;\n // v[d] = rotr(v[d] ^ v[a], 32)\n ({ Dh, Dl } = { Dh: Dh ^ Ah, Dl: Dl ^ Al });\n ({ Dh, Dl } = { Dh: u64.rotr32H(Dh, Dl), Dl: u64.rotr32L(Dh, Dl) });\n // v[c] = (v[c] + v[d]) | 0;\n ({ h: Ch, l: Cl } = u64.add(Ch, Cl, Dh, Dl));\n // v[b] = rotr(v[b] ^ v[c], 24)\n ({ Bh, Bl } = { Bh: Bh ^ Ch, Bl: Bl ^ Cl });\n ({ Bh, Bl } = { Bh: u64.rotrSH(Bh, Bl, 24), Bl: u64.rotrSL(Bh, Bl, 24) });\n (BBUF[2 * a] = Al), (BBUF[2 * a + 1] = Ah);\n (BBUF[2 * b] = Bl), (BBUF[2 * b + 1] = Bh);\n (BBUF[2 * c] = Cl), (BBUF[2 * c + 1] = Ch);\n (BBUF[2 * d] = Dl), (BBUF[2 * d + 1] = Dh);\n}\nfunction G2b(a, b, c, d, msg, x) {\n // NOTE: V is LE here\n const Xl = msg[x], Xh = msg[x + 1]; // prettier-ignore\n let Al = BBUF[2 * a], Ah = BBUF[2 * a + 1]; // prettier-ignore\n let Bl = BBUF[2 * b], Bh = BBUF[2 * b + 1]; // prettier-ignore\n let Cl = BBUF[2 * c], Ch = BBUF[2 * c + 1]; // prettier-ignore\n let Dl = BBUF[2 * d], Dh = BBUF[2 * d + 1]; // prettier-ignore\n // v[a] = (v[a] + v[b] + x) | 0;\n let ll = u64.add3L(Al, Bl, Xl);\n Ah = u64.add3H(ll, Ah, Bh, Xh);\n Al = ll | 0;\n // v[d] = rotr(v[d] ^ v[a], 16)\n ({ Dh, Dl } = { Dh: Dh ^ Ah, Dl: Dl ^ Al });\n ({ Dh, Dl } = { Dh: u64.rotrSH(Dh, Dl, 16), Dl: u64.rotrSL(Dh, Dl, 16) });\n // v[c] = (v[c] + v[d]) | 0;\n ({ h: Ch, l: Cl } = u64.add(Ch, Cl, Dh, Dl));\n // v[b] = rotr(v[b] ^ v[c], 63)\n ({ Bh, Bl } = { Bh: Bh ^ Ch, Bl: Bl ^ Cl });\n ({ Bh, Bl } = { Bh: u64.rotrBH(Bh, Bl, 63), Bl: u64.rotrBL(Bh, Bl, 63) });\n (BBUF[2 * a] = Al), (BBUF[2 * a + 1] = Ah);\n (BBUF[2 * b] = Bl), (BBUF[2 * b + 1] = Bh);\n (BBUF[2 * c] = Cl), (BBUF[2 * c + 1] = Ch);\n (BBUF[2 * d] = Dl), (BBUF[2 * d + 1] = Dh);\n}\nfunction checkBlake2Opts(outputLen, opts = {}, keyLen, saltLen, persLen) {\n anumber(keyLen);\n if (outputLen < 0 || outputLen > keyLen)\n throw new Error('outputLen bigger than keyLen');\n const { key, salt, personalization } = opts;\n if (key !== undefined && (key.length < 1 || key.length > keyLen))\n throw new Error('key length must be undefined or 1..' + keyLen);\n if (salt !== undefined && salt.length !== saltLen)\n throw new Error('salt must be undefined or ' + saltLen);\n if (personalization !== undefined && personalization.length !== persLen)\n throw new Error('personalization must be undefined or ' + persLen);\n}\n/** Class, from which others are subclassed. */\nexport class BLAKE2 extends Hash {\n constructor(blockLen, outputLen) {\n super();\n this.finished = false;\n this.destroyed = false;\n this.length = 0;\n this.pos = 0;\n anumber(blockLen);\n anumber(outputLen);\n this.blockLen = blockLen;\n this.outputLen = outputLen;\n this.buffer = new Uint8Array(blockLen);\n this.buffer32 = u32(this.buffer);\n }\n update(data) {\n aexists(this);\n data = toBytes(data);\n abytes(data);\n // Main difference with other hashes: there is flag for last block,\n // so we cannot process current block before we know that there\n // is the next one. This significantly complicates logic and reduces ability\n // to do zero-copy processing\n const { blockLen, buffer, buffer32 } = this;\n const len = data.length;\n const offset = data.byteOffset;\n const buf = data.buffer;\n for (let pos = 0; pos < len;) {\n // If buffer is full and we still have input (don't process last block, same as blake2s)\n if (this.pos === blockLen) {\n swap32IfBE(buffer32);\n this.compress(buffer32, 0, false);\n swap32IfBE(buffer32);\n this.pos = 0;\n }\n const take = Math.min(blockLen - this.pos, len - pos);\n const dataOffset = offset + pos;\n // full block && aligned to 4 bytes && not last in input\n if (take === blockLen && !(dataOffset % 4) && pos + take < len) {\n const data32 = new Uint32Array(buf, dataOffset, Math.floor((len - pos) / 4));\n swap32IfBE(data32);\n for (let pos32 = 0; pos + blockLen < len; pos32 += buffer32.length, pos += blockLen) {\n this.length += blockLen;\n this.compress(data32, pos32, false);\n }\n swap32IfBE(data32);\n continue;\n }\n buffer.set(data.subarray(pos, pos + take), this.pos);\n this.pos += take;\n this.length += take;\n pos += take;\n }\n return this;\n }\n digestInto(out) {\n aexists(this);\n aoutput(out, this);\n const { pos, buffer32 } = this;\n this.finished = true;\n // Padding\n clean(this.buffer.subarray(pos));\n swap32IfBE(buffer32);\n this.compress(buffer32, 0, true);\n swap32IfBE(buffer32);\n const out32 = u32(out);\n this.get().forEach((v, i) => (out32[i] = swap8IfBE(v)));\n }\n digest() {\n const { buffer, outputLen } = this;\n this.digestInto(buffer);\n const res = buffer.slice(0, outputLen);\n this.destroy();\n return res;\n }\n _cloneInto(to) {\n const { buffer, length, finished, destroyed, outputLen, pos } = this;\n to || (to = new this.constructor({ dkLen: outputLen }));\n to.set(...this.get());\n to.buffer.set(buffer);\n to.destroyed = destroyed;\n to.finished = finished;\n to.length = length;\n to.pos = pos;\n // @ts-ignore\n to.outputLen = outputLen;\n return to;\n }\n clone() {\n return this._cloneInto();\n }\n}\nexport class BLAKE2b extends BLAKE2 {\n constructor(opts = {}) {\n const olen = opts.dkLen === undefined ? 64 : opts.dkLen;\n super(128, olen);\n // Same as SHA-512, but LE\n this.v0l = B2B_IV[0] | 0;\n this.v0h = B2B_IV[1] | 0;\n this.v1l = B2B_IV[2] | 0;\n this.v1h = B2B_IV[3] | 0;\n this.v2l = B2B_IV[4] | 0;\n this.v2h = B2B_IV[5] | 0;\n this.v3l = B2B_IV[6] | 0;\n this.v3h = B2B_IV[7] | 0;\n this.v4l = B2B_IV[8] | 0;\n this.v4h = B2B_IV[9] | 0;\n this.v5l = B2B_IV[10] | 0;\n this.v5h = B2B_IV[11] | 0;\n this.v6l = B2B_IV[12] | 0;\n this.v6h = B2B_IV[13] | 0;\n this.v7l = B2B_IV[14] | 0;\n this.v7h = B2B_IV[15] | 0;\n checkBlake2Opts(olen, opts, 64, 16, 16);\n let { key, personalization, salt } = opts;\n let keyLength = 0;\n if (key !== undefined) {\n key = toBytes(key);\n keyLength = key.length;\n }\n this.v0l ^= this.outputLen | (keyLength << 8) | (0x01 << 16) | (0x01 << 24);\n if (salt !== undefined) {\n salt = toBytes(salt);\n const slt = u32(salt);\n this.v4l ^= swap8IfBE(slt[0]);\n this.v4h ^= swap8IfBE(slt[1]);\n this.v5l ^= swap8IfBE(slt[2]);\n this.v5h ^= swap8IfBE(slt[3]);\n }\n if (personalization !== undefined) {\n personalization = toBytes(personalization);\n const pers = u32(personalization);\n this.v6l ^= swap8IfBE(pers[0]);\n this.v6h ^= swap8IfBE(pers[1]);\n this.v7l ^= swap8IfBE(pers[2]);\n this.v7h ^= swap8IfBE(pers[3]);\n }\n if (key !== undefined) {\n // Pad to blockLen and update\n const tmp = new Uint8Array(this.blockLen);\n tmp.set(key);\n this.update(tmp);\n }\n }\n // prettier-ignore\n get() {\n let { v0l, v0h, v1l, v1h, v2l, v2h, v3l, v3h, v4l, v4h, v5l, v5h, v6l, v6h, v7l, v7h } = this;\n return [v0l, v0h, v1l, v1h, v2l, v2h, v3l, v3h, v4l, v4h, v5l, v5h, v6l, v6h, v7l, v7h];\n }\n // prettier-ignore\n set(v0l, v0h, v1l, v1h, v2l, v2h, v3l, v3h, v4l, v4h, v5l, v5h, v6l, v6h, v7l, v7h) {\n this.v0l = v0l | 0;\n this.v0h = v0h | 0;\n this.v1l = v1l | 0;\n this.v1h = v1h | 0;\n this.v2l = v2l | 0;\n this.v2h = v2h | 0;\n this.v3l = v3l | 0;\n this.v3h = v3h | 0;\n this.v4l = v4l | 0;\n this.v4h = v4h | 0;\n this.v5l = v5l | 0;\n this.v5h = v5h | 0;\n this.v6l = v6l | 0;\n this.v6h = v6h | 0;\n this.v7l = v7l | 0;\n this.v7h = v7h | 0;\n }\n compress(msg, offset, isLast) {\n this.get().forEach((v, i) => (BBUF[i] = v)); // First half from state.\n BBUF.set(B2B_IV, 16); // Second half from IV.\n let { h, l } = u64.fromBig(BigInt(this.length));\n BBUF[24] = B2B_IV[8] ^ l; // Low word of the offset.\n BBUF[25] = B2B_IV[9] ^ h; // High word.\n // Invert all bits for last block\n if (isLast) {\n BBUF[28] = ~BBUF[28];\n BBUF[29] = ~BBUF[29];\n }\n let j = 0;\n const s = BSIGMA;\n for (let i = 0; i < 12; i++) {\n G1b(0, 4, 8, 12, msg, offset + 2 * s[j++]);\n G2b(0, 4, 8, 12, msg, offset + 2 * s[j++]);\n G1b(1, 5, 9, 13, msg, offset + 2 * s[j++]);\n G2b(1, 5, 9, 13, msg, offset + 2 * s[j++]);\n G1b(2, 6, 10, 14, msg, offset + 2 * s[j++]);\n G2b(2, 6, 10, 14, msg, offset + 2 * s[j++]);\n G1b(3, 7, 11, 15, msg, offset + 2 * s[j++]);\n G2b(3, 7, 11, 15, msg, offset + 2 * s[j++]);\n G1b(0, 5, 10, 15, msg, offset + 2 * s[j++]);\n G2b(0, 5, 10, 15, msg, offset + 2 * s[j++]);\n G1b(1, 6, 11, 12, msg, offset + 2 * s[j++]);\n G2b(1, 6, 11, 12, msg, offset + 2 * s[j++]);\n G1b(2, 7, 8, 13, msg, offset + 2 * s[j++]);\n G2b(2, 7, 8, 13, msg, offset + 2 * s[j++]);\n G1b(3, 4, 9, 14, msg, offset + 2 * s[j++]);\n G2b(3, 4, 9, 14, msg, offset + 2 * s[j++]);\n }\n this.v0l ^= BBUF[0] ^ BBUF[16];\n this.v0h ^= BBUF[1] ^ BBUF[17];\n this.v1l ^= BBUF[2] ^ BBUF[18];\n this.v1h ^= BBUF[3] ^ BBUF[19];\n this.v2l ^= BBUF[4] ^ BBUF[20];\n this.v2h ^= BBUF[5] ^ BBUF[21];\n this.v3l ^= BBUF[6] ^ BBUF[22];\n this.v3h ^= BBUF[7] ^ BBUF[23];\n this.v4l ^= BBUF[8] ^ BBUF[24];\n this.v4h ^= BBUF[9] ^ BBUF[25];\n this.v5l ^= BBUF[10] ^ BBUF[26];\n this.v5h ^= BBUF[11] ^ BBUF[27];\n this.v6l ^= BBUF[12] ^ BBUF[28];\n this.v6h ^= BBUF[13] ^ BBUF[29];\n this.v7l ^= BBUF[14] ^ BBUF[30];\n this.v7h ^= BBUF[15] ^ BBUF[31];\n clean(BBUF);\n }\n destroy() {\n this.destroyed = true;\n clean(this.buffer32);\n this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n }\n}\n/**\n * Blake2b hash function. 64-bit. 1.5x slower than blake2s in JS.\n * @param msg - message that would be hashed\n * @param opts - dkLen output length, key for MAC mode, salt, personalization\n */\nexport const blake2b = /* @__PURE__ */ createOptHasher((opts) => new BLAKE2b(opts));\n// prettier-ignore\nexport function compress(s, offset, msg, rounds, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) {\n let j = 0;\n for (let i = 0; i < rounds; i++) {\n ({ a: v0, b: v4, c: v8, d: v12 } = G1s(v0, v4, v8, v12, msg[offset + s[j++]]));\n ({ a: v0, b: v4, c: v8, d: v12 } = G2s(v0, v4, v8, v12, msg[offset + s[j++]]));\n ({ a: v1, b: v5, c: v9, d: v13 } = G1s(v1, v5, v9, v13, msg[offset + s[j++]]));\n ({ a: v1, b: v5, c: v9, d: v13 } = G2s(v1, v5, v9, v13, msg[offset + s[j++]]));\n ({ a: v2, b: v6, c: v10, d: v14 } = G1s(v2, v6, v10, v14, msg[offset + s[j++]]));\n ({ a: v2, b: v6, c: v10, d: v14 } = G2s(v2, v6, v10, v14, msg[offset + s[j++]]));\n ({ a: v3, b: v7, c: v11, d: v15 } = G1s(v3, v7, v11, v15, msg[offset + s[j++]]));\n ({ a: v3, b: v7, c: v11, d: v15 } = G2s(v3, v7, v11, v15, msg[offset + s[j++]]));\n ({ a: v0, b: v5, c: v10, d: v15 } = G1s(v0, v5, v10, v15, msg[offset + s[j++]]));\n ({ a: v0, b: v5, c: v10, d: v15 } = G2s(v0, v5, v10, v15, msg[offset + s[j++]]));\n ({ a: v1, b: v6, c: v11, d: v12 } = G1s(v1, v6, v11, v12, msg[offset + s[j++]]));\n ({ a: v1, b: v6, c: v11, d: v12 } = G2s(v1, v6, v11, v12, msg[offset + s[j++]]));\n ({ a: v2, b: v7, c: v8, d: v13 } = G1s(v2, v7, v8, v13, msg[offset + s[j++]]));\n ({ a: v2, b: v7, c: v8, d: v13 } = G2s(v2, v7, v8, v13, msg[offset + s[j++]]));\n ({ a: v3, b: v4, c: v9, d: v14 } = G1s(v3, v4, v9, v14, msg[offset + s[j++]]));\n ({ a: v3, b: v4, c: v9, d: v14 } = G2s(v3, v4, v9, v14, msg[offset + s[j++]]));\n }\n return { v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15 };\n}\nconst B2S_IV = SHA256_IV;\nexport class BLAKE2s extends BLAKE2 {\n constructor(opts = {}) {\n const olen = opts.dkLen === undefined ? 32 : opts.dkLen;\n super(64, olen);\n // Internal state, same as SHA-256\n this.v0 = B2S_IV[0] | 0;\n this.v1 = B2S_IV[1] | 0;\n this.v2 = B2S_IV[2] | 0;\n this.v3 = B2S_IV[3] | 0;\n this.v4 = B2S_IV[4] | 0;\n this.v5 = B2S_IV[5] | 0;\n this.v6 = B2S_IV[6] | 0;\n this.v7 = B2S_IV[7] | 0;\n checkBlake2Opts(olen, opts, 32, 8, 8);\n let { key, personalization, salt } = opts;\n let keyLength = 0;\n if (key !== undefined) {\n key = toBytes(key);\n keyLength = key.length;\n }\n this.v0 ^= this.outputLen | (keyLength << 8) | (0x01 << 16) | (0x01 << 24);\n if (salt !== undefined) {\n salt = toBytes(salt);\n const slt = u32(salt);\n this.v4 ^= swap8IfBE(slt[0]);\n this.v5 ^= swap8IfBE(slt[1]);\n }\n if (personalization !== undefined) {\n personalization = toBytes(personalization);\n const pers = u32(personalization);\n this.v6 ^= swap8IfBE(pers[0]);\n this.v7 ^= swap8IfBE(pers[1]);\n }\n if (key !== undefined) {\n // Pad to blockLen and update\n abytes(key);\n const tmp = new Uint8Array(this.blockLen);\n tmp.set(key);\n this.update(tmp);\n }\n }\n get() {\n const { v0, v1, v2, v3, v4, v5, v6, v7 } = this;\n return [v0, v1, v2, v3, v4, v5, v6, v7];\n }\n // prettier-ignore\n set(v0, v1, v2, v3, v4, v5, v6, v7) {\n this.v0 = v0 | 0;\n this.v1 = v1 | 0;\n this.v2 = v2 | 0;\n this.v3 = v3 | 0;\n this.v4 = v4 | 0;\n this.v5 = v5 | 0;\n this.v6 = v6 | 0;\n this.v7 = v7 | 0;\n }\n compress(msg, offset, isLast) {\n const { h, l } = u64.fromBig(BigInt(this.length));\n // prettier-ignore\n const { v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15 } = compress(BSIGMA, offset, msg, 10, this.v0, this.v1, this.v2, this.v3, this.v4, this.v5, this.v6, this.v7, B2S_IV[0], B2S_IV[1], B2S_IV[2], B2S_IV[3], l ^ B2S_IV[4], h ^ B2S_IV[5], isLast ? ~B2S_IV[6] : B2S_IV[6], B2S_IV[7]);\n this.v0 ^= v0 ^ v8;\n this.v1 ^= v1 ^ v9;\n this.v2 ^= v2 ^ v10;\n this.v3 ^= v3 ^ v11;\n this.v4 ^= v4 ^ v12;\n this.v5 ^= v5 ^ v13;\n this.v6 ^= v6 ^ v14;\n this.v7 ^= v7 ^ v15;\n }\n destroy() {\n this.destroyed = true;\n clean(this.buffer32);\n this.set(0, 0, 0, 0, 0, 0, 0, 0);\n }\n}\n/**\n * Blake2s hash function. Focuses on 8-bit to 32-bit platforms. 1.5x faster than blake2b in JS.\n * @param msg - message that would be hashed\n * @param opts - dkLen output length, key for MAC mode, salt, personalization\n */\nexport const blake2s = /* @__PURE__ */ createOptHasher((opts) => new BLAKE2s(opts));\n//# sourceMappingURL=blake2.js.map","/**\n * Blake3 fast hash is Blake2 with reduced security (round count). Can also be used as MAC & KDF.\n *\n * It is advertised as \"the fastest cryptographic hash\". However, it isn't true in JS.\n * Why is this so slow? While it should be 6x faster than blake2b, perf diff is only 20%:\n *\n * * There is only 30% reduction in number of rounds from blake2s\n * * Speed-up comes from tree structure, which is parallelized using SIMD & threading.\n * These features are not present in JS, so we only get overhead from trees.\n * * Parallelization only happens on 1024-byte chunks: there is no benefit for small inputs.\n * * It is still possible to make it faster using: a) loop unrolling b) web workers c) wasm\n * @module\n */\nimport { SHA256_IV } from \"./_md.js\";\nimport { fromBig } from \"./_u64.js\";\nimport { BLAKE2, compress } from \"./blake2.js\";\n// prettier-ignore\nimport { abytes, aexists, anumber, aoutput, clean, createXOFer, swap32IfBE, toBytes, u32, u8 } from \"./utils.js\";\n// Flag bitset\nconst B3_Flags = {\n CHUNK_START: 0b1,\n CHUNK_END: 0b10,\n PARENT: 0b100,\n ROOT: 0b1000,\n KEYED_HASH: 0b10000,\n DERIVE_KEY_CONTEXT: 0b100000,\n DERIVE_KEY_MATERIAL: 0b1000000,\n};\nconst B3_IV = SHA256_IV.slice();\nconst B3_SIGMA = /* @__PURE__ */ (() => {\n const Id = Array.from({ length: 16 }, (_, i) => i);\n const permute = (arr) => [2, 6, 3, 10, 7, 0, 4, 13, 1, 11, 12, 5, 9, 14, 15, 8].map((i) => arr[i]);\n const res = [];\n for (let i = 0, v = Id; i < 7; i++, v = permute(v))\n res.push(...v);\n return Uint8Array.from(res);\n})();\n/** Blake3 hash. Can be used as MAC and KDF. */\nexport class BLAKE3 extends BLAKE2 {\n constructor(opts = {}, flags = 0) {\n super(64, opts.dkLen === undefined ? 32 : opts.dkLen);\n this.chunkPos = 0; // Position of current block in chunk\n this.chunksDone = 0; // How many chunks we already have\n this.flags = 0 | 0;\n this.stack = [];\n // Output\n this.posOut = 0;\n this.bufferOut32 = new Uint32Array(16);\n this.chunkOut = 0; // index of output chunk\n this.enableXOF = true;\n const { key, context } = opts;\n const hasContext = context !== undefined;\n if (key !== undefined) {\n if (hasContext)\n throw new Error('Only \"key\" or \"context\" can be specified at same time');\n const k = toBytes(key).slice();\n abytes(k, 32);\n this.IV = u32(k);\n swap32IfBE(this.IV);\n this.flags = flags | B3_Flags.KEYED_HASH;\n }\n else if (hasContext) {\n const ctx = toBytes(context);\n const contextKey = new BLAKE3({ dkLen: 32 }, B3_Flags.DERIVE_KEY_CONTEXT)\n .update(ctx)\n .digest();\n this.IV = u32(contextKey);\n swap32IfBE(this.IV);\n this.flags = flags | B3_Flags.DERIVE_KEY_MATERIAL;\n }\n else {\n this.IV = B3_IV.slice();\n this.flags = flags;\n }\n this.state = this.IV.slice();\n this.bufferOut = u8(this.bufferOut32);\n }\n // Unused\n get() {\n return [];\n }\n set() { }\n b2Compress(counter, flags, buf, bufPos = 0) {\n const { state: s, pos } = this;\n const { h, l } = fromBig(BigInt(counter), true);\n // prettier-ignore\n const { v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15 } = compress(B3_SIGMA, bufPos, buf, 7, s[0], s[1], s[2], s[3], s[4], s[5], s[6], s[7], B3_IV[0], B3_IV[1], B3_IV[2], B3_IV[3], h, l, pos, flags);\n s[0] = v0 ^ v8;\n s[1] = v1 ^ v9;\n s[2] = v2 ^ v10;\n s[3] = v3 ^ v11;\n s[4] = v4 ^ v12;\n s[5] = v5 ^ v13;\n s[6] = v6 ^ v14;\n s[7] = v7 ^ v15;\n }\n compress(buf, bufPos = 0, isLast = false) {\n // Compress last block\n let flags = this.flags;\n if (!this.chunkPos)\n flags |= B3_Flags.CHUNK_START;\n if (this.chunkPos === 15 || isLast)\n flags |= B3_Flags.CHUNK_END;\n if (!isLast)\n this.pos = this.blockLen;\n this.b2Compress(this.chunksDone, flags, buf, bufPos);\n this.chunkPos += 1;\n // If current block is last in chunk (16 blocks), then compress chunks\n if (this.chunkPos === 16 || isLast) {\n let chunk = this.state;\n this.state = this.IV.slice();\n // If not the last one, compress only when there are trailing zeros in chunk counter\n // chunks used as binary tree where current stack is path. Zero means current leaf is finished and can be compressed.\n // 1 (001) - leaf not finished (just push current chunk to stack)\n // 2 (010) - leaf finished at depth=1 (merge with last elm on stack and push back)\n // 3 (011) - last leaf not finished\n // 4 (100) - leafs finished at depth=1 and depth=2\n for (let last, chunks = this.chunksDone + 1; isLast || !(chunks & 1); chunks >>= 1) {\n if (!(last = this.stack.pop()))\n break;\n this.buffer32.set(last, 0);\n this.buffer32.set(chunk, 8);\n this.pos = this.blockLen;\n this.b2Compress(0, this.flags | B3_Flags.PARENT, this.buffer32, 0);\n chunk = this.state;\n this.state = this.IV.slice();\n }\n this.chunksDone++;\n this.chunkPos = 0;\n this.stack.push(chunk);\n }\n this.pos = 0;\n }\n _cloneInto(to) {\n to = super._cloneInto(to);\n const { IV, flags, state, chunkPos, posOut, chunkOut, stack, chunksDone } = this;\n to.state.set(state.slice());\n to.stack = stack.map((i) => Uint32Array.from(i));\n to.IV.set(IV);\n to.flags = flags;\n to.chunkPos = chunkPos;\n to.chunksDone = chunksDone;\n to.posOut = posOut;\n to.chunkOut = chunkOut;\n to.enableXOF = this.enableXOF;\n to.bufferOut32.set(this.bufferOut32);\n return to;\n }\n destroy() {\n this.destroyed = true;\n clean(this.state, this.buffer32, this.IV, this.bufferOut32);\n clean(...this.stack);\n }\n // Same as b2Compress, but doesn't modify state and returns 16 u32 array (instead of 8)\n b2CompressOut() {\n const { state: s, pos, flags, buffer32, bufferOut32: out32 } = this;\n const { h, l } = fromBig(BigInt(this.chunkOut++));\n swap32IfBE(buffer32);\n // prettier-ignore\n const { v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15 } = compress(B3_SIGMA, 0, buffer32, 7, s[0], s[1], s[2], s[3], s[4], s[5], s[6], s[7], B3_IV[0], B3_IV[1], B3_IV[2], B3_IV[3], l, h, pos, flags);\n out32[0] = v0 ^ v8;\n out32[1] = v1 ^ v9;\n out32[2] = v2 ^ v10;\n out32[3] = v3 ^ v11;\n out32[4] = v4 ^ v12;\n out32[5] = v5 ^ v13;\n out32[6] = v6 ^ v14;\n out32[7] = v7 ^ v15;\n out32[8] = s[0] ^ v8;\n out32[9] = s[1] ^ v9;\n out32[10] = s[2] ^ v10;\n out32[11] = s[3] ^ v11;\n out32[12] = s[4] ^ v12;\n out32[13] = s[5] ^ v13;\n out32[14] = s[6] ^ v14;\n out32[15] = s[7] ^ v15;\n swap32IfBE(buffer32);\n swap32IfBE(out32);\n this.posOut = 0;\n }\n finish() {\n if (this.finished)\n return;\n this.finished = true;\n // Padding\n clean(this.buffer.subarray(this.pos));\n // Process last chunk\n let flags = this.flags | B3_Flags.ROOT;\n if (this.stack.length) {\n flags |= B3_Flags.PARENT;\n swap32IfBE(this.buffer32);\n this.compress(this.buffer32, 0, true);\n swap32IfBE(this.buffer32);\n this.chunksDone = 0;\n this.pos = this.blockLen;\n }\n else {\n flags |= (!this.chunkPos ? B3_Flags.CHUNK_START : 0) | B3_Flags.CHUNK_END;\n }\n this.flags = flags;\n this.b2CompressOut();\n }\n writeInto(out) {\n aexists(this, false);\n abytes(out);\n this.finish();\n const { blockLen, bufferOut } = this;\n for (let pos = 0, len = out.length; pos < len;) {\n if (this.posOut >= blockLen)\n this.b2CompressOut();\n const take = Math.min(blockLen - this.posOut, len - pos);\n out.set(bufferOut.subarray(this.posOut, this.posOut + take), pos);\n this.posOut += take;\n pos += take;\n }\n return out;\n }\n xofInto(out) {\n if (!this.enableXOF)\n throw new Error('XOF is not possible after digest call');\n return this.writeInto(out);\n }\n xof(bytes) {\n anumber(bytes);\n return this.xofInto(new Uint8Array(bytes));\n }\n digestInto(out) {\n aoutput(out, this);\n if (this.finished)\n throw new Error('digest() was already called');\n this.enableXOF = false;\n this.writeInto(out);\n this.destroy();\n return out;\n }\n digest() {\n return this.digestInto(new Uint8Array(this.outputLen));\n }\n}\n/**\n * BLAKE3 hash function. Can be used as MAC and KDF.\n * @param msg - message that would be hashed\n * @param opts - `dkLen` for output length, `key` for MAC mode, `context` for KDF mode\n * @example\n * const data = new Uint8Array(32);\n * const hash = blake3(data);\n * const mac = blake3(data, { key: new Uint8Array(32) });\n * const kdf = blake3(data, { context: 'application name' });\n */\nexport const blake3 = /* @__PURE__ */ createXOFer((opts) => new BLAKE3(opts));\n//# sourceMappingURL=blake3.js.map","/**\r\n * @svrnsec/pulse — Hardware Fingerprint & Proof Builder\r\n *\r\n * Assembles all collected signals into a canonical ProofPayload, then\r\n * produces a BLAKE3 commitment: BLAKE3(canonicalJSON(payload)).\r\n *\r\n * The commitment is what gets sent to the server. The server recomputes\r\n * the hash from the payload to detect tampering. Raw timing arrays and\r\n * pixel buffers are NOT included — only statistical summaries.\r\n *\r\n * Zero-Knowledge property: the server learns only that the device passes\r\n * statistical thresholds. It never sees raw hardware telemetry.\r\n */\r\n\r\nimport { blake3 } from '@noble/hashes/blake3';\r\nimport { bytesToHex } from '@noble/hashes/utils';\r\n\r\n// ---------------------------------------------------------------------------\r\n// BLAKE3 helpers (re-exported for use by canvas.js etc.)\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Compute BLAKE3 of a Uint8Array and return hex string.\r\n * @param {Uint8Array} data\r\n * @returns {string}\r\n */\r\nexport function blake3Hex(data) {\r\n return bytesToHex(blake3(data));\r\n}\r\n\r\n/**\r\n * Compute BLAKE3 of a UTF-8 string and return hex string.\r\n * @param {string} str\r\n * @returns {string}\r\n */\r\nexport function blake3HexStr(str) {\r\n return blake3Hex(new TextEncoder().encode(str));\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// buildProof\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Assembles a ProofPayload from all collected signals.\r\n * This is the canonical structure that gets hashed into the commitment.\r\n *\r\n * @param {object} p\r\n * @param {import('../collector/entropy.js').EntropyResult} p.entropy\r\n * @param {import('../analysis/jitter.js').JitterAnalysis} p.jitter\r\n * @param {import('../collector/bio.js').BioSnapshot} p.bio\r\n * @param {import('../collector/canvas.js').CanvasFingerprint} p.canvas\r\n * @param {import('../analysis/audio.js').AudioJitter} p.audio\r\n * @param {string} p.nonce – server-issued challenge nonce (hex)\r\n * @returns {ProofPayload}\r\n */\r\nexport function buildProof({ entropy, jitter, bio, canvas, audio, enf, gpu, dram, llm, nonce }) {\r\n if (!nonce || typeof nonce !== 'string') {\r\n throw new Error('@svrnsec/pulse: nonce is required for anti-replay protection');\r\n }\r\n\r\n // Hash the raw timing arrays IN-BROWSER so we can prove their integrity\r\n // without transmitting the raw data.\r\n const timingsHash = blake3HexStr(JSON.stringify(entropy.timings));\r\n const memHash = blake3HexStr(JSON.stringify(entropy.memTimings));\r\n\r\n const payload = {\r\n version: 1,\r\n timestamp: entropy.collectedAt,\r\n nonce,\r\n\r\n signals: {\r\n // ── Entropy probe ───────────────────────────────────────────────────\r\n entropy: {\r\n timingsMean: _round(jitter.stats?.mean, 4),\r\n timingsCV: _round(jitter.stats?.cv, 4),\r\n timingsP50: _round(jitter.stats?.p50, 4),\r\n timingsP95: _round(jitter.stats?.p95, 4),\r\n timingsSkewness: _round(jitter.stats?.skewness, 4),\r\n timingsKurtosis: _round(jitter.stats?.kurtosis, 4),\r\n autocorr_lag1: _round(jitter.autocorrelations?.lag1, 4),\r\n autocorr_lag2: _round(jitter.autocorrelations?.lag2, 4),\r\n autocorr_lag5: _round(jitter.autocorrelations?.lag5, 4),\r\n autocorr_lag10: _round(jitter.autocorrelations?.lag10, 4),\r\n hurstExponent: _round(jitter.hurstExponent, 4),\r\n quantizationEntropy: _round(jitter.quantizationEntropy, 4),\r\n thermalDrift: _round(jitter.thermalSignature?.slope, 8),\r\n thermalPattern: jitter.thermalSignature?.pattern ?? 'unknown',\r\n outlierRate: _round(jitter.outlierRate, 4),\r\n timerGranularityMs: _round(entropy.timerGranularityMs, 6),\r\n checksum: entropy.checksum, // proves computation ran\r\n timingsHash, // proves timing array integrity\r\n memTimingsHash: memHash,\r\n iterations: entropy.iterations,\r\n matrixSize: entropy.matrixSize,\r\n },\r\n\r\n // ── Bio signals ─────────────────────────────────────────────────────\r\n bio: {\r\n mouseSampleCount: bio.mouse.sampleCount,\r\n mouseIEIMean: _round(bio.mouse.ieiMean, 3),\r\n mouseIEICV: _round(bio.mouse.ieiCV, 4),\r\n mouseVelocityP50: _round(bio.mouse.velocityP50, 3),\r\n mouseVelocityP95: _round(bio.mouse.velocityP95, 3),\r\n mouseAngularJerkMean: _round(bio.mouse.angularJerkMean, 4),\r\n pressureVariance: _round(bio.mouse.pressureVariance, 6),\r\n keyboardSampleCount: bio.keyboard.sampleCount,\r\n keyboardDwellMean: _round(bio.keyboard.dwellMean, 3),\r\n keyboardDwellCV: _round(bio.keyboard.dwellCV, 4),\r\n keyboardIKIMean: _round(bio.keyboard.ikiMean, 3),\r\n keyboardIKICV: _round(bio.keyboard.ikiCV, 4),\r\n interferenceCoefficient: _round(bio.interferenceCoefficient, 4),\r\n hasActivity: bio.hasActivity,\r\n durationMs: _round(bio.durationMs, 1),\r\n },\r\n\r\n // ── Canvas fingerprint ───────────────────────────────────────────────\r\n canvas: {\r\n webglRenderer: canvas.webglRenderer,\r\n webglVendor: canvas.webglVendor,\r\n webglVersion: canvas.webglVersion,\r\n webglPixelHash: canvas.webglPixelHash,\r\n canvas2dHash: canvas.canvas2dHash,\r\n extensionCount: canvas.extensionCount,\r\n isSoftwareRenderer: canvas.isSoftwareRenderer,\r\n available: canvas.available,\r\n },\r\n\r\n // ── Audio jitter ─────────────────────────────────────────────────────\r\n audio: {\r\n available: audio.available,\r\n workletAvailable: audio.workletAvailable,\r\n callbackJitterCV: _round(audio.callbackJitterCV, 4),\r\n noiseFloorMean: _round(audio.noiseFloorMean, 6),\r\n noiseFloorStd: _round(audio.noiseFloorStd, 6),\r\n sampleRate: audio.sampleRate,\r\n callbackCount: audio.callbackCount,\r\n jitterMeanMs: _round(audio.jitterMeanMs, 4),\r\n jitterP95Ms: _round(audio.jitterP95Ms, 4),\r\n },\r\n\r\n // ── Electrical Network Frequency ─────────────────────────────────────\r\n enf: enf ? {\r\n available: enf.enfAvailable,\r\n ripplePresent: enf.ripplePresent,\r\n gridFrequency: enf.gridFrequency,\r\n gridRegion: enf.gridRegion,\r\n ripplePower: _round(enf.ripplePower, 4),\r\n enfDeviation: _round(enf.enfDeviation, 3),\r\n snr50hz: _round(enf.snr50hz, 2),\r\n snr60hz: _round(enf.snr60hz, 2),\r\n sampleRateHz: _round(enf.sampleRateHz, 1),\r\n verdict: enf.verdict,\r\n isVmIndicator: enf.isVmIndicator,\r\n capturedAt: enf.temporalAnchor?.capturedAt ?? null,\r\n } : null,\r\n\r\n // ── WebGPU thermal variance ───────────────────────────────────────────\r\n gpu: gpu ? {\r\n available: gpu.gpuPresent,\r\n isSoftware: gpu.isSoftware,\r\n vendorString: gpu.vendorString,\r\n dispatchCV: _round(gpu.dispatchCV, 4),\r\n thermalGrowth: _round(gpu.thermalGrowth, 4),\r\n verdict: gpu.verdict,\r\n } : null,\r\n\r\n // ── DRAM refresh cycle ────────────────────────────────────────────────\r\n dram: dram ? {\r\n refreshPresent: dram.refreshPresent,\r\n refreshPeriodMs: _round(dram.refreshPeriodMs, 2),\r\n peakPower: _round(dram.peakPower, 4),\r\n verdict: dram.verdict,\r\n } : null,\r\n\r\n // ── LLM / AI agent behavioral fingerprint ────────────────────────────\r\n llm: llm ? {\r\n aiConf: _round(llm.aiConf, 3),\r\n thinkTimePattern: llm.thinkTimePattern,\r\n correctionRate: _round(llm.correctionRate, 3),\r\n rhythmicity: _round(llm.rhythmicity, 3),\r\n pauseDistribution: llm.pauseDistribution,\r\n verdict: llm.verdict,\r\n matchedModel: llm.matchedModel ?? null,\r\n } : null,\r\n },\r\n\r\n // Top-level classification summary — all signal layers combined\r\n classification: {\r\n jitterScore: _round(jitter.score, 4),\r\n flags: jitter.flags ?? [],\r\n enfVerdict: enf?.verdict ?? 'unavailable',\r\n gpuVerdict: gpu?.verdict ?? 'unavailable',\r\n dramVerdict: dram?.verdict ?? 'unavailable',\r\n llmVerdict: llm?.verdict ?? 'unavailable',\r\n // Combined VM confidence: any hard signal raises this\r\n vmIndicators: [\r\n enf?.isVmIndicator ? 'enf_no_grid' : null,\r\n gpu?.isSoftware ? 'gpu_software' : null,\r\n dram?.verdict === 'virtual' ? 'dram_no_refresh' : null,\r\n llm?.aiConf > 0.7 ? 'llm_agent' : null,\r\n ].filter(Boolean),\r\n },\r\n };\r\n\r\n return payload;\r\n}\r\n\r\n/**\r\n * @typedef {object} ProofPayload\r\n * @property {number} version\r\n * @property {number} timestamp\r\n * @property {string} nonce\r\n * @property {object} signals\r\n * @property {object} classification\r\n */\r\n\r\n// ---------------------------------------------------------------------------\r\n// buildCommitment\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Hashes a ProofPayload into a BLAKE3 commitment.\r\n * Uses a deterministic canonical JSON serialiser (sorted keys) to ensure\r\n * byte-identical output across JS engines.\r\n *\r\n * @param {ProofPayload} payload\r\n * @returns {{ payload: ProofPayload, hash: string }}\r\n */\r\nexport function buildCommitment(payload) {\r\n const canonical = canonicalJson(payload);\r\n const hash = blake3HexStr(canonical);\r\n return { payload, hash };\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// canonicalJson\r\n//\r\n// JSON.stringify with sorted keys — ensures the hash is engine-independent.\r\n// Numbers are serialised with fixed precision to avoid cross-platform float\r\n// formatting differences.\r\n// ---------------------------------------------------------------------------\r\n\r\nexport function canonicalJson(obj) {\r\n return JSON.stringify(obj, _replacer, 0);\r\n}\r\n\r\nfunction _replacer(key, value) {\r\n // Sort object keys deterministically\r\n if (value !== null && typeof value === 'object' && !Array.isArray(value)) {\r\n const sorted = {};\r\n for (const k of Object.keys(value).sort()) {\r\n sorted[k] = value[k];\r\n }\r\n return sorted;\r\n }\r\n return value;\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Internal utilities\r\n// ---------------------------------------------------------------------------\r\n\r\nfunction _round(v, decimals) {\r\n if (v == null || !isFinite(v)) return null;\r\n const factor = 10 ** decimals;\r\n return Math.round(v * factor) / factor;\r\n}\r\n","/**\r\n * @svrnsec/pulse — GPU Canvas Fingerprint\r\n *\r\n * Collects device-class signals from WebGL and 2D Canvas rendering.\r\n * The exact pixel values of GPU-rendered scenes are vendor/driver-specific\r\n * due to floating-point rounding in shader execution. Virtual machines\r\n * expose software renderers (LLVMpipe, SwiftShader, Microsoft Basic Render\r\n * Driver) whose strings and output pixels are well-known and enumerable.\r\n *\r\n * NO persistent identifier is generated – only a content hash is retained.\r\n */\r\n\r\nimport { blake3Hex } from '../proof/fingerprint.js';\r\n\r\n// ---------------------------------------------------------------------------\r\n// Known software-renderer substrings (VM / headless environment indicators)\r\n// ---------------------------------------------------------------------------\r\nconst SOFTWARE_RENDERER_PATTERNS = [\r\n 'llvmpipe', 'swiftshader', 'softpipe', 'mesa offscreen',\r\n 'microsoft basic render', 'vmware svga', 'virtualbox',\r\n 'parallels', 'google swiftshader',\r\n // Note: 'angle (' is intentionally excluded — Chrome on Windows uses ANGLE\r\n // for all real hardware GPUs. Software ANGLE is handled by regex in gpu.js.\r\n];\r\n\r\n// ---------------------------------------------------------------------------\r\n// collectCanvasFingerprint\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * @returns {Promise<CanvasFingerprint>}\r\n */\r\nexport async function collectCanvasFingerprint() {\r\n const result = {\r\n webglRenderer: null,\r\n webglVendor: null,\r\n webglVersion: null,\r\n webglPixelHash: null,\r\n canvas2dHash: null,\r\n extensionCount: 0,\r\n extensions: [],\r\n isSoftwareRenderer: false,\r\n available: false,\r\n };\r\n\r\n if (typeof document === 'undefined' && typeof OffscreenCanvas === 'undefined') {\r\n // Node.js / server-side with no DOM – skip gracefully.\r\n return result;\r\n }\r\n\r\n // ── WebGL fingerprint ────────────────────────────────────────────────────\r\n try {\r\n const canvas = _createCanvas(512, 512);\r\n let gl = canvas.getContext('webgl2') || canvas.getContext('webgl');\r\n\r\n if (gl) {\r\n result.webglVersion = gl instanceof WebGL2RenderingContext ? 2 : 1;\r\n result.available = true;\r\n\r\n // Renderer info\r\n const dbgInfo = gl.getExtension('WEBGL_debug_renderer_info');\r\n if (dbgInfo) {\r\n result.webglRenderer = gl.getParameter(dbgInfo.UNMASKED_RENDERER_WEBGL);\r\n result.webglVendor = gl.getParameter(dbgInfo.UNMASKED_VENDOR_WEBGL);\r\n }\r\n\r\n // Extension list (fingerprints driver capabilities)\r\n const exts = gl.getSupportedExtensions() ?? [];\r\n result.extensions = exts;\r\n result.extensionCount = exts.length;\r\n\r\n // Software-renderer detection\r\n const rendererLc = (result.webglRenderer ?? '').toLowerCase();\r\n result.isSoftwareRenderer = SOFTWARE_RENDERER_PATTERNS.some(p =>\r\n rendererLc.includes(p)\r\n );\r\n\r\n // ── Render a Mandelbrot fragment scene ───────────────────────────────\r\n // Floating-point precision differences in the GPU's shader ALU cause\r\n // per-pixel rounding variations that are stable per device but differ\r\n // across GPU vendors, driver versions, and software renderers.\r\n const pixels = _renderMandelbrot(gl, canvas);\r\n result.webglPixelHash = pixels ? blake3Hex(pixels) : null;\r\n\r\n gl.getExtension('WEBGL_lose_context')?.loseContext();\r\n }\r\n } catch (_) {\r\n // WebGL blocked (privacy settings, etc.) – continue with 2D canvas.\r\n }\r\n\r\n // ── 2D Canvas fingerprint ────────────────────────────────────────────────\r\n try {\r\n const c2 = _createCanvas(200, 50);\r\n const ctx2 = c2.getContext('2d');\r\n\r\n if (ctx2) {\r\n // Text rendering differences: font hinting, subpixel AA, emoji rasterisation\r\n ctx2.textBaseline = 'top';\r\n ctx2.font = '14px Arial, sans-serif';\r\n ctx2.fillStyle = 'rgba(102,204,0,0.7)';\r\n ctx2.fillText('Cwm fjordbank glyphs vext quiz 🎯', 2, 5);\r\n\r\n // Shadow compositing (driver-specific blur kernel)\r\n ctx2.shadowBlur = 10;\r\n ctx2.shadowColor = 'blue';\r\n ctx2.fillStyle = 'rgba(255,0,255,0.5)';\r\n ctx2.fillRect(100, 25, 80, 20);\r\n\r\n // Bezier curve (Bézier precision varies per 2D canvas implementation)\r\n ctx2.beginPath();\r\n ctx2.moveTo(10, 40);\r\n ctx2.bezierCurveTo(30, 0, 70, 80, 160, 30);\r\n ctx2.strokeStyle = 'rgba(0,0,255,0.8)';\r\n ctx2.lineWidth = 1.5;\r\n ctx2.stroke();\r\n\r\n const dataUrl = c2.toDataURL('image/png');\r\n // Hash the data URL (not storing raw image data)\r\n const enc = new TextEncoder().encode(dataUrl);\r\n result.canvas2dHash = blake3Hex(enc);\r\n\r\n result.available = true;\r\n }\r\n } catch (_) {\r\n // 2D canvas blocked.\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * @typedef {object} CanvasFingerprint\r\n * @property {string|null} webglRenderer\r\n * @property {string|null} webglVendor\r\n * @property {1|2|null} webglVersion\r\n * @property {string|null} webglPixelHash\r\n * @property {string|null} canvas2dHash\r\n * @property {number} extensionCount\r\n * @property {string[]} extensions\r\n * @property {boolean} isSoftwareRenderer\r\n * @property {boolean} available\r\n */\r\n\r\n// ---------------------------------------------------------------------------\r\n// Internal helpers\r\n// ---------------------------------------------------------------------------\r\n\r\nfunction _createCanvas(w, h) {\r\n if (typeof OffscreenCanvas !== 'undefined') {\r\n return new OffscreenCanvas(w, h);\r\n }\r\n const c = document.createElement('canvas');\r\n c.width = w;\r\n c.height = h;\r\n return c;\r\n}\r\n\r\n/**\r\n * Render a Mandelbrot set fragment using WebGL and read back pixels.\r\n * The number of iterations is fixed (100) so that rounding differences in\r\n * the smooth-colouring formula are the primary source of per-GPU variation.\r\n *\r\n * @param {WebGLRenderingContext} gl\r\n * @param {HTMLCanvasElement|OffscreenCanvas} canvas\r\n * @returns {Uint8Array|null}\r\n */\r\nfunction _renderMandelbrot(gl, canvas) {\r\n const W = canvas.width;\r\n const H = canvas.height;\r\n\r\n // Vertex shader – full-screen quad\r\n const vsSource = `\r\n attribute vec4 a_pos;\r\n void main() { gl_Position = a_pos; }\r\n `;\r\n\r\n // Fragment shader – Mandelbrot with smooth colouring\r\n // Floating-point precision in the escape-radius and log() calls differs\r\n // between GPU vendors / drivers, producing per-device pixel signatures.\r\n const fsSource = `\r\n precision highp float;\r\n uniform vec2 u_res;\r\n void main() {\r\n vec2 uv = (gl_FragCoord.xy / u_res - 0.5) * 3.5;\r\n uv.x -= 0.5;\r\n vec2 c = uv;\r\n vec2 z = vec2(0.0);\r\n float n = 0.0;\r\n for (int i = 0; i < 100; i++) {\r\n if (dot(z, z) > 4.0) break;\r\n z = vec2(z.x*z.x - z.y*z.y, 2.0*z.x*z.y) + c;\r\n n += 1.0;\r\n }\r\n float smooth_n = n - log2(log2(dot(z,z))) + 4.0;\r\n float t = smooth_n / 100.0;\r\n gl_FragColor = vec4(0.5 + 0.5*cos(6.28318*t + vec3(0.0, 0.4, 0.7)), 1.0);\r\n }\r\n `;\r\n\r\n const vs = _compileShader(gl, gl.VERTEX_SHADER, vsSource);\r\n const fs = _compileShader(gl, gl.FRAGMENT_SHADER, fsSource);\r\n if (!vs || !fs) return null;\r\n\r\n const prog = gl.createProgram();\r\n gl.attachShader(prog, vs);\r\n gl.attachShader(prog, fs);\r\n gl.linkProgram(prog);\r\n if (!gl.getProgramParameter(prog, gl.LINK_STATUS)) return null;\r\n\r\n gl.useProgram(prog);\r\n\r\n // Full-screen quad\r\n const buf = gl.createBuffer();\r\n gl.bindBuffer(gl.ARRAY_BUFFER, buf);\r\n gl.bufferData(gl.ARRAY_BUFFER,\r\n new Float32Array([-1,-1, 1,-1, -1,1, 1,1]), gl.STATIC_DRAW);\r\n const loc = gl.getAttribLocation(prog, 'a_pos');\r\n gl.enableVertexAttribArray(loc);\r\n gl.vertexAttribPointer(loc, 2, gl.FLOAT, false, 0, 0);\r\n\r\n const resLoc = gl.getUniformLocation(prog, 'u_res');\r\n gl.uniform2f(resLoc, W, H);\r\n\r\n gl.viewport(0, 0, W, H);\r\n gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\r\n\r\n // Read back a 64×64 centre crop (reduces data without losing discriminating power)\r\n const x0 = Math.floor((W - 64) / 2);\r\n const y0 = Math.floor((H - 64) / 2);\r\n const pixels = new Uint8Array(64 * 64 * 4);\r\n gl.readPixels(x0, y0, 64, 64, gl.RGBA, gl.UNSIGNED_BYTE, pixels);\r\n\r\n // Cleanup GPU resources\r\n gl.deleteBuffer(buf);\r\n gl.deleteProgram(prog);\r\n gl.deleteShader(vs);\r\n gl.deleteShader(fs);\r\n\r\n return pixels;\r\n}\r\n\r\nfunction _compileShader(gl, type, source) {\r\n const s = gl.createShader(type);\r\n gl.shaderSource(s, source);\r\n gl.compileShader(s);\r\n return gl.getShaderParameter(s, gl.COMPILE_STATUS) ? s : null;\r\n}\r\n","/**\r\n * @svrnsec/pulse — AudioContext Oscillator Jitter\r\n *\r\n * Measures the scheduling jitter of the browser's audio pipeline.\r\n * Real audio hardware callbacks are driven by a hardware interrupt (IRQ)\r\n * from the sound card; the timing reflects the actual interrupt latency\r\n * of the physical device. VM audio drivers (if present at all) are\r\n * emulated and show either unrealistically low jitter or burst-mode\r\n * scheduling artefacts that are statistically distinguishable.\r\n */\r\n\r\n/**\r\n * @param {object} [opts]\r\n * @param {number} [opts.durationMs=2000] - how long to collect audio callbacks\r\n * @param {number} [opts.bufferSize=256] - ScriptProcessorNode buffer size\r\n * @returns {Promise<AudioJitter>}\r\n */\r\nexport async function collectAudioJitter(opts = {}) {\r\n const { durationMs = 2000, bufferSize = 256 } = opts;\r\n\r\n const base = {\r\n available: false,\r\n workletAvailable: false,\r\n callbackJitterCV: 0,\r\n noiseFloorMean: 0,\r\n sampleRate: 0,\r\n callbackCount: 0,\r\n jitterTimings: [],\r\n };\r\n\r\n if (typeof AudioContext === 'undefined' && typeof webkitAudioContext === 'undefined') {\r\n return base; // Node.js / server environment\r\n }\r\n\r\n let ctx;\r\n try {\r\n ctx = new (window.AudioContext || window.webkitAudioContext)();\r\n } catch (_) {\r\n return base;\r\n }\r\n\r\n // Some browsers require a user gesture before AudioContext can run.\r\n if (ctx.state === 'suspended') {\r\n try {\r\n await ctx.resume();\r\n } catch (_) {\r\n await ctx.close().catch(() => {});\r\n return base;\r\n }\r\n }\r\n\r\n const sampleRate = ctx.sampleRate;\r\n const expectedInterval = (bufferSize / sampleRate) * 1000; // ms per callback\r\n\r\n const jitterTimings = []; // absolute AudioContext.currentTime at each callback\r\n const callbackDeltas = [];\r\n\r\n const result = await new Promise((resolve) => {\r\n // ── AudioWorklet (preferred — runs on dedicated real-time thread) ──────\r\n const useWorklet = typeof AudioWorkletNode !== 'undefined';\r\n base.workletAvailable = useWorklet;\r\n\r\n if (useWorklet) {\r\n // Inline worklet: send currentTime back via MessagePort every buffer\r\n const workletCode = `\r\n class PulseProbe extends AudioWorkletProcessor {\r\n process(inputs, outputs) {\r\n this.port.postMessage({ t: currentTime });\r\n // Pass-through silence\r\n for (const out of outputs)\r\n for (const ch of out) ch.fill(0);\r\n return true;\r\n }\r\n }\r\n registerProcessor('pulse-probe', PulseProbe);\r\n `;\r\n const blob = new Blob([workletCode], { type: 'application/javascript' });\r\n const blobUrl = URL.createObjectURL(blob);\r\n\r\n ctx.audioWorklet.addModule(blobUrl).then(() => {\r\n const node = new AudioWorkletNode(ctx, 'pulse-probe');\r\n node.port.onmessage = (e) => {\r\n jitterTimings.push(e.data.t * 1000); // convert to ms\r\n };\r\n node.connect(ctx.destination);\r\n\r\n setTimeout(async () => {\r\n node.disconnect();\r\n URL.revokeObjectURL(blobUrl);\r\n resolve(node);\r\n }, durationMs);\r\n }).catch(() => {\r\n URL.revokeObjectURL(blobUrl);\r\n _fallbackScriptProcessor(ctx, bufferSize, durationMs, jitterTimings, resolve);\r\n });\r\n\r\n } else {\r\n _fallbackScriptProcessor(ctx, bufferSize, durationMs, jitterTimings, resolve);\r\n }\r\n });\r\n\r\n // ── Compute deltas between successive callback times ────────────────────\r\n for (let i = 1; i < jitterTimings.length; i++) {\r\n callbackDeltas.push(jitterTimings[i] - jitterTimings[i - 1]);\r\n }\r\n\r\n // ── Noise floor via AnalyserNode ─────────────────────────────────────────\r\n // Feed a silent oscillator through an analyser; the FFT magnitude at silence\r\n // reveals the hardware's thermal noise floor (varies per ADC/DAC chipset).\r\n const noiseFloor = await _measureNoiseFloor(ctx);\r\n\r\n await ctx.close().catch(() => {});\r\n\r\n // ── Statistics ────────────────────────────────────────────────────────────\r\n const mean = callbackDeltas.length\r\n ? callbackDeltas.reduce((s, v) => s + v, 0) / callbackDeltas.length\r\n : 0;\r\n const variance = callbackDeltas.length > 1\r\n ? callbackDeltas.reduce((s, v) => s + (v - mean) ** 2, 0) / (callbackDeltas.length - 1)\r\n : 0;\r\n const jitterCV = mean > 0 ? Math.sqrt(variance) / mean : 0;\r\n\r\n return {\r\n available: true,\r\n workletAvailable: base.workletAvailable,\r\n callbackJitterCV: jitterCV,\r\n noiseFloorMean: noiseFloor.mean,\r\n noiseFloorStd: noiseFloor.std,\r\n sampleRate,\r\n callbackCount: jitterTimings.length,\r\n expectedIntervalMs: expectedInterval,\r\n // Only include summary stats, not raw timings (privacy / size)\r\n jitterMeanMs: mean,\r\n jitterP95Ms: _percentile(callbackDeltas, 95),\r\n };\r\n}\r\n\r\n/**\r\n * @typedef {object} AudioJitter\r\n * @property {boolean} available\r\n * @property {boolean} workletAvailable\r\n * @property {number} callbackJitterCV\r\n * @property {number} noiseFloorMean\r\n * @property {number} sampleRate\r\n * @property {number} callbackCount\r\n */\r\n\r\n// ---------------------------------------------------------------------------\r\n// Internal helpers\r\n// ---------------------------------------------------------------------------\r\n\r\nfunction _fallbackScriptProcessor(ctx, bufferSize, durationMs, jitterTimings, resolve) {\r\n // ScriptProcessorNode is deprecated but universally supported.\r\n const proc = ctx.createScriptProcessor(bufferSize, 1, 1);\r\n proc.onaudioprocess = () => {\r\n jitterTimings.push(ctx.currentTime * 1000);\r\n };\r\n // Connect to keep the graph alive\r\n const osc = ctx.createOscillator();\r\n osc.frequency.value = 1; // sub-audible\r\n osc.connect(proc);\r\n proc.connect(ctx.destination);\r\n osc.start();\r\n\r\n setTimeout(() => {\r\n osc.stop();\r\n osc.disconnect();\r\n proc.disconnect();\r\n resolve(proc);\r\n }, durationMs);\r\n}\r\n\r\nasync function _measureNoiseFloor(ctx) {\r\n try {\r\n const analyser = ctx.createAnalyser();\r\n analyser.fftSize = 256;\r\n analyser.connect(ctx.destination);\r\n\r\n // Silent source\r\n const buf = ctx.createBuffer(1, ctx.sampleRate * 0.1, ctx.sampleRate);\r\n const src = ctx.createBufferSource();\r\n src.buffer = buf;\r\n src.connect(analyser);\r\n src.start();\r\n\r\n await new Promise(r => setTimeout(r, 150));\r\n\r\n const data = new Float32Array(analyser.frequencyBinCount);\r\n analyser.getFloatFrequencyData(data);\r\n analyser.disconnect();\r\n\r\n // Limit to 32 bins to keep the payload small\r\n const trimmed = Array.from(data.slice(0, 32)).map(v =>\r\n isFinite(v) ? Math.pow(10, v / 20) : 0 // dB → linear\r\n );\r\n const mean = trimmed.reduce((s, v) => s + v, 0) / trimmed.length;\r\n const std = Math.sqrt(\r\n trimmed.reduce((s, v) => s + (v - mean) ** 2, 0) / trimmed.length\r\n );\r\n return { mean, std };\r\n } catch (_) {\r\n return { mean: 0, std: 0 };\r\n }\r\n}\r\n\r\nfunction _percentile(arr, p) {\r\n if (!arr.length) return 0;\r\n const sorted = [...arr].sort((a, b) => a - b);\r\n const idx = (p / 100) * (sorted.length - 1);\r\n const lo = Math.floor(idx);\r\n const hi = Math.ceil(idx);\r\n return sorted[lo] + (sorted[hi] - sorted[lo]) * (idx - lo);\r\n}\r\n","/**\r\n * @svrnsec/pulse — WebGPU Thermal Variance Probe\r\n *\r\n * Runs a compute shader on the GPU and measures dispatch timing variance.\r\n *\r\n * Why this works\r\n * ──────────────\r\n * Real consumer GPUs (GTX 1650, RX 6600, M2 GPU) have thermal noise in shader\r\n * execution timing that increases under sustained load — the same thermodynamic\r\n * principle as the CPU probe but in silicon designed for parallel throughput.\r\n *\r\n * Cloud VMs with software GPU emulation (SwiftShader, llvmpipe, Mesa's softpipe)\r\n * execute shaders on the CPU and produce near-deterministic timing — flat CV,\r\n * no thermal growth across phases, no dispatch jitter.\r\n *\r\n * VMs with GPU passthrough (rare in practice, requires dedicated hardware) pass\r\n * this check — which is correct, they have real GPU silicon.\r\n *\r\n * Signals\r\n * ───────\r\n * gpuPresent false = WebGPU absent = software renderer = high VM probability\r\n * isSoftware true = SwiftShader/llvmpipe detected by adapter info\r\n * dispatchCV coefficient of variation across dispatch timings\r\n * thermalGrowth (hotDispatchMean - coldDispatchMean) / coldDispatchMean\r\n * vendorString GPU vendor from adapter info (Intel, NVIDIA, AMD, Apple, etc.)\r\n */\r\n\r\n/* ─── WebGPU availability ────────────────────────────────────────────────── */\r\n\r\nfunction isWebGPUAvailable() {\r\n return typeof navigator !== 'undefined' && 'gpu' in navigator;\r\n}\r\n\r\n/* ─── Software renderer detection ───────────────────────────────────────── */\r\n\r\nconst SOFTWARE_RENDERER_PATTERNS = [\r\n /swiftshader/i,\r\n /llvmpipe/i,\r\n /softpipe/i,\r\n /microsoft basic render/i,\r\n /angle \\(.*software/i,\r\n /cpu/i,\r\n];\r\n\r\nfunction detectSoftwareRenderer(adapterInfo) {\r\n const desc = [\r\n adapterInfo?.vendor ?? '',\r\n adapterInfo?.device ?? '',\r\n adapterInfo?.description ?? '',\r\n adapterInfo?.architecture ?? '',\r\n ].join(' ');\r\n\r\n return SOFTWARE_RENDERER_PATTERNS.some(p => p.test(desc));\r\n}\r\n\r\n/* ─── Compute shader ─────────────────────────────────────────────────────── */\r\n\r\n// A compute workload that is trivially parallelisable but forces the GPU to\r\n// actually execute — matrix-multiply on 64 × 64 tiles across 256 workgroups.\r\n// Light enough that it doesn't block UI; heavy enough to generate thermal signal.\r\nconst SHADER_SRC = /* wgsl */ `\r\n struct Matrix {\r\n values: array<f32, 4096>, // 64x64\r\n };\r\n\r\n @group(0) @binding(0) var<storage, read> matA : Matrix;\r\n @group(0) @binding(1) var<storage, read> matB : Matrix;\r\n @group(0) @binding(2) var<storage, read_write> matC : Matrix;\r\n\r\n @compute @workgroup_size(8, 8)\r\n fn main(@builtin(global_invocation_id) gid: vec3<u32>) {\r\n let row = gid.x;\r\n let col = gid.y;\r\n if (row >= 64u || col >= 64u) { return; }\r\n\r\n var acc: f32 = 0.0;\r\n for (var k = 0u; k < 64u; k++) {\r\n acc += matA.values[row * 64u + k] * matB.values[k * 64u + col];\r\n }\r\n matC.values[row * 64u + col] = acc;\r\n }\r\n`;\r\n\r\n/* ─── collectGpuEntropy ─────────────────────────────────────────────────── */\r\n\r\n/**\r\n * @param {object} [opts]\r\n * @param {number} [opts.iterations=60] – dispatch rounds per phase\r\n * @param {boolean} [opts.phased=true] – cold / load / hot phases\r\n * @param {number} [opts.timeoutMs=8000] – hard abort if GPU stalls\r\n * @returns {Promise<GpuEntropyResult>}\r\n */\r\nexport async function collectGpuEntropy(opts = {}) {\r\n const { iterations = 60, phased = true, timeoutMs = 8000 } = opts;\r\n\r\n if (!isWebGPUAvailable()) {\r\n return _noGpu('WebGPU not available in this environment');\r\n }\r\n\r\n let adapter, device;\r\n try {\r\n adapter = await Promise.race([\r\n navigator.gpu.requestAdapter({ powerPreference: 'high-performance' }),\r\n _timeout(timeoutMs, 'requestAdapter timed out'),\r\n ]);\r\n if (!adapter) return _noGpu('No WebGPU adapter found');\r\n\r\n device = await Promise.race([\r\n adapter.requestDevice(),\r\n _timeout(timeoutMs, 'requestDevice timed out'),\r\n ]);\r\n } catch (err) {\r\n return _noGpu(`WebGPU init failed: ${err.message}`);\r\n }\r\n\r\n const adapterInfo = adapter.info ?? {};\r\n const isSoftware = detectSoftwareRenderer(adapterInfo);\r\n\r\n device.lost.then(info => console.warn('[pulse] GPU device lost:', info.message));\r\n\r\n // Compile the shader module once\r\n const shaderModule = device.createShaderModule({ code: SHADER_SRC });\r\n\r\n // Create persistent GPU buffers (64×64 float32 = 16 KB each)\r\n const bufSize = 4096 * 4; // 4096 floats × 4 bytes\r\n const bufA = _createBuffer(device, bufSize, GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST);\r\n const bufB = _createBuffer(device, bufSize, GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST);\r\n const bufC = _createBuffer(device, bufSize, GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC);\r\n\r\n try {\r\n // Seed with random data\r\n const matData = new Float32Array(4096).map(() => Math.random());\r\n device.queue.writeBuffer(bufA, 0, matData);\r\n device.queue.writeBuffer(bufB, 0, matData);\r\n\r\n const pipeline = device.createComputePipeline({\r\n layout: 'auto',\r\n compute: { module: shaderModule, entryPoint: 'main' },\r\n });\r\n\r\n const bindGroup = device.createBindGroup({\r\n layout: pipeline.getBindGroupLayout(0),\r\n entries: [\r\n { binding: 0, resource: { buffer: bufA } },\r\n { binding: 1, resource: { buffer: bufB } },\r\n { binding: 2, resource: { buffer: bufC } },\r\n ],\r\n });\r\n\r\n // ── Probe ──────────────────────────────────────────────────────────────\r\n async function runPhase(n) {\r\n const timings = [];\r\n for (let i = 0; i < n; i++) {\r\n const t0 = performance.now();\r\n const encoder = device.createCommandEncoder();\r\n const pass = encoder.beginComputePass();\r\n pass.setPipeline(pipeline);\r\n pass.setBindGroup(0, bindGroup);\r\n pass.dispatchWorkgroups(8, 8); // 64 workgroups total\r\n pass.end();\r\n device.queue.submit([encoder.finish()]);\r\n await device.queue.onSubmittedWorkDone();\r\n const t1 = performance.now();\r\n timings.push(t1 - t0);\r\n }\r\n return timings;\r\n }\r\n\r\n let coldTimings, loadTimings, hotTimings;\r\n\r\n if (phased) {\r\n coldTimings = await runPhase(Math.floor(iterations * 0.25));\r\n loadTimings = await runPhase(Math.floor(iterations * 0.50));\r\n hotTimings = await runPhase(iterations - coldTimings.length - loadTimings.length);\r\n } else {\r\n coldTimings = await runPhase(iterations);\r\n loadTimings = [];\r\n hotTimings = [];\r\n }\r\n\r\n const allTimings = [...coldTimings, ...loadTimings, ...hotTimings];\r\n const mean = _mean(allTimings);\r\n const cv = mean > 0 ? _std(allTimings) / mean : 0;\r\n\r\n const coldMean = _mean(coldTimings);\r\n const hotMean = _mean(hotTimings.length ? hotTimings : coldTimings);\r\n const thermalGrowth = coldMean > 0 ? (hotMean - coldMean) / coldMean : 0;\r\n\r\n return {\r\n gpuPresent: true,\r\n isSoftware,\r\n vendor: adapterInfo.vendor ?? 'unknown',\r\n architecture: adapterInfo.architecture ?? 'unknown',\r\n timings: allTimings,\r\n dispatchCV: cv,\r\n thermalGrowth,\r\n coldMean,\r\n hotMean,\r\n // Heuristic: real GPU → thermalGrowth > 0.02 and CV > 0.04\r\n // Software renderer → thermalGrowth ≈ 0, CV < 0.02\r\n verdict: isSoftware ? 'software_renderer'\r\n : thermalGrowth > 0.02 && cv > 0.04 ? 'real_gpu'\r\n : thermalGrowth < 0 && cv < 0.02 ? 'virtual_gpu'\r\n : 'ambiguous',\r\n };\r\n } finally {\r\n bufA.destroy(); bufB.destroy(); bufC.destroy();\r\n device.destroy();\r\n }\r\n}\r\n\r\n/* ─── helpers ────────────────────────────────────────────────────────────── */\r\n\r\nfunction _noGpu(reason) {\r\n return { gpuPresent: false, isSoftware: false, vendor: null,\r\n architecture: null, timings: [], dispatchCV: 0,\r\n thermalGrowth: 0, coldMean: 0, hotMean: 0,\r\n verdict: 'no_gpu', reason };\r\n}\r\n\r\nfunction _createBuffer(device, size, usage) {\r\n return device.createBuffer({ size, usage });\r\n}\r\n\r\nfunction _mean(arr) {\r\n return arr.length ? arr.reduce((s, v) => s + v, 0) / arr.length : 0;\r\n}\r\n\r\nfunction _std(arr) {\r\n const m = _mean(arr);\r\n return Math.sqrt(arr.reduce((s, v) => s + (v - m) ** 2, 0) / arr.length);\r\n}\r\n\r\nfunction _timeout(ms, msg) {\r\n return new Promise((_, reject) => setTimeout(() => reject(new Error(msg)), ms));\r\n}\r\n\r\n/**\r\n * @typedef {object} GpuEntropyResult\r\n * @property {boolean} gpuPresent\r\n * @property {boolean} isSoftware\r\n * @property {string|null} vendor\r\n * @property {string|null} architecture\r\n * @property {number[]} timings\r\n * @property {number} dispatchCV\r\n * @property {number} thermalGrowth\r\n * @property {string} verdict 'real_gpu' | 'virtual_gpu' | 'software_renderer' | 'no_gpu' | 'ambiguous'\r\n */\r\n","/**\r\n * @svrnsec/pulse — DRAM Refresh Cycle Detector\r\n *\r\n * DDR4 DRAM refreshes every 7.8 ms (tREFI per JEDEC JESD79-4). During a\r\n * refresh, the memory controller stalls all access requests for ~350 ns.\r\n * In a tight sequential memory access loop this appears as a periodic\r\n * slowdown — detectable as a ~128Hz peak in the autocorrelation of access\r\n * timings.\r\n *\r\n * Virtual machines do not have physical DRAM. The hypervisor's memory\r\n * subsystem does not reproduce the refresh cycle because:\r\n * 1. The guest never touches real DRAM directly — there is always a\r\n * hypervisor-controlled indirection layer.\r\n * 2. EPT/NPT (Extended/Nested Page Tables) absorb the timing.\r\n * 3. The hypervisor's memory balloon driver further smooths access latency.\r\n *\r\n * What we detect\r\n * ──────────────\r\n * refreshPeriodMs estimated DRAM refresh period (should be ~7.8ms on real DDR4)\r\n * refreshPresent true if the ~7.8ms periodicity is statistically significant\r\n * peakLag autocorrelation lag with the highest power (units: sample index)\r\n * peakPower autocorrelation power at peakLag (0–1)\r\n * verdict 'dram' | 'virtual' | 'ambiguous'\r\n *\r\n * Calibration\r\n * ───────────\r\n * We allocate a buffer large enough to exceed all CPU caches (typically\r\n * L3 = 8–32 MB on consumer parts). Sequential reads then go to DRAM, not\r\n * cache. The refresh stall is only visible when we're actually hitting DRAM —\r\n * a cache-resident access loop shows no refresh signal.\r\n *\r\n * Buffer size: 64 MB — comfortably above L3 on all tested platforms.\r\n * Sampling interval: ~1 ms per iteration (chosen to resolve 7.8ms at ≥8 pts).\r\n * Total probe time: ~400 ms — well within the fingerprint collection window.\r\n */\r\n\r\nconst DRAM_REFRESH_MS = 7.8; // JEDEC DDR4 nominal\r\nconst DRAM_REFRESH_SLACK = 1.5; // ±1.5 ms acceptable range for real hardware\r\nconst BUFFER_MB = 64; // must exceed L3 cache\r\nconst PROBE_ITERATIONS = 400; // ~400 ms total\r\n\r\n/* ─── collectDramTimings ─────────────────────────────────────────────────── */\r\n\r\n/**\r\n * @param {object} [opts]\r\n * @param {number} [opts.iterations=400]\r\n * @param {number} [opts.bufferMb=64]\r\n * @returns {{ timings: number[], refreshPeriodMs: number|null,\r\n * refreshPresent: boolean, peakLag: number, peakPower: number,\r\n * verdict: string }}\r\n */\r\nexport function collectDramTimings(opts = {}) {\r\n const {\r\n iterations = PROBE_ITERATIONS,\r\n bufferMb = BUFFER_MB,\r\n } = opts;\r\n\r\n // ── Allocate cache-busting buffer ────────────────────────────────────────\r\n const nElements = (bufferMb * 1024 * 1024) / 8; // 64-bit doubles\r\n let buf;\r\n\r\n try {\r\n buf = new Float64Array(nElements);\r\n // Touch every cache line to ensure OS actually maps the pages\r\n const stride = 64 / 8; // 64-byte cache lines, 8 bytes per element\r\n for (let i = 0; i < nElements; i += stride) buf[i] = i;\r\n } catch {\r\n // Allocation failure (memory constrained) — cannot run this probe\r\n return _noSignal('buffer allocation failed');\r\n }\r\n\r\n // ── Sequential access loop ───────────────────────────────────────────────\r\n // Each iteration does a full sequential pass over `passElements` worth of\r\n // the buffer. Pass size is tuned so each iteration takes ~1 ms wall-clock,\r\n // giving us enough resolution to see the 7.8 ms refresh cycle.\r\n //\r\n // We start with a small pass and auto-calibrate to hit the 1 ms target.\r\n const passElements = _calibratePassSize(buf);\r\n\r\n const timings = new Float64Array(iterations);\r\n let checksum = 0;\r\n\r\n for (let iter = 0; iter < iterations; iter++) {\r\n const t0 = performance.now();\r\n for (let i = 0; i < passElements; i++) checksum += buf[i];\r\n timings[iter] = performance.now() - t0;\r\n }\r\n\r\n // Prevent dead-code elimination\r\n if (checksum === 0) buf[0] = 1;\r\n\r\n // ── Autocorrelation over timings ─────────────────────────────────────────\r\n // The refresh stall appears as elevated autocorrelation at lag ≈ 7.8 / Δt\r\n // where Δt is the mean iteration time in ms.\r\n const meanIterMs = _mean(timings);\r\n if (meanIterMs <= 0) return _noSignal('zero mean iteration time');\r\n\r\n const targetLag = Math.round(DRAM_REFRESH_MS / meanIterMs);\r\n const maxLag = Math.min(Math.round(50 / meanIterMs), iterations >> 1);\r\n\r\n const ac = _autocorr(Array.from(timings), maxLag);\r\n\r\n // Find the peak in the range [targetLag ± slack]\r\n const slackLags = Math.round(DRAM_REFRESH_SLACK / meanIterMs);\r\n const lagLo = Math.max(1, targetLag - slackLags);\r\n const lagHi = Math.min(maxLag, targetLag + slackLags);\r\n\r\n let peakPower = -Infinity;\r\n let peakLag = targetLag;\r\n for (let l = lagLo; l <= lagHi; l++) {\r\n if (ac[l - 1] > peakPower) {\r\n peakPower = ac[l - 1];\r\n peakLag = l;\r\n }\r\n }\r\n\r\n // Baseline: average autocorrelation outside the refresh window\r\n const baseline = _mean(\r\n Array.from({ length: maxLag }, (_, i) => ac[i])\r\n .filter((_, i) => i + 1 < lagLo || i + 1 > lagHi)\r\n );\r\n\r\n const snr = baseline > 0 ? peakPower / baseline : 0;\r\n const refreshPresent = peakPower > 0.15 && snr > 1.8;\r\n const refreshPeriodMs = refreshPresent ? peakLag * meanIterMs : null;\r\n\r\n const verdict =\r\n refreshPresent && refreshPeriodMs !== null &&\r\n Math.abs(refreshPeriodMs - DRAM_REFRESH_MS) < DRAM_REFRESH_SLACK\r\n ? 'dram'\r\n : peakPower < 0.05\r\n ? 'virtual'\r\n : 'ambiguous';\r\n\r\n return {\r\n timings: Array.from(timings),\r\n refreshPeriodMs,\r\n refreshPresent,\r\n peakLag,\r\n peakPower: +peakPower.toFixed(4),\r\n snr: +snr.toFixed(2),\r\n meanIterMs: +meanIterMs.toFixed(3),\r\n verdict,\r\n };\r\n}\r\n\r\n/* ─── helpers ────────────────────────────────────────────────────────────── */\r\n\r\nfunction _noSignal(reason) {\r\n return {\r\n timings: [], refreshPeriodMs: null, refreshPresent: false,\r\n peakLag: 0, peakPower: 0, snr: 0, meanIterMs: 0,\r\n verdict: 'ambiguous', reason,\r\n };\r\n}\r\n\r\n/**\r\n * Run a quick calibration pass to find how many elements to read per\r\n * iteration so each iteration takes approximately 1 ms.\r\n */\r\nfunction _calibratePassSize(buf) {\r\n const target = 1.0; // ms\r\n let n = Math.min(100_000, buf.length);\r\n let elapsed = 0;\r\n let dummy = 0;\r\n\r\n // Warm up\r\n for (let i = 0; i < n; i++) dummy += buf[i];\r\n\r\n // Measure\r\n const t0 = performance.now();\r\n for (let i = 0; i < n; i++) dummy += buf[i];\r\n elapsed = performance.now() - t0;\r\n if (dummy === 0) buf[0] = 1; // prevent DCE\r\n\r\n if (elapsed <= 0) return n;\r\n return Math.max(1, Math.min(buf.length, Math.round(n * (target / elapsed))));\r\n}\r\n\r\nfunction _mean(arr) {\r\n if (!arr.length) return 0;\r\n return arr.reduce((s, v) => s + v, 0) / arr.length;\r\n}\r\n\r\nfunction _autocorr(data, maxLag) {\r\n const n = data.length;\r\n const mean = _mean(data);\r\n let v = 0;\r\n for (let i = 0; i < n; i++) v += (data[i] - mean) ** 2;\r\n v /= n;\r\n\r\n const result = new Float64Array(maxLag);\r\n if (v < 1e-14) return result;\r\n\r\n for (let lag = 1; lag <= maxLag; lag++) {\r\n let cov = 0;\r\n for (let i = 0; i < n - lag; i++) {\r\n cov += (data[i] - mean) * (data[i + lag] - mean);\r\n }\r\n result[lag - 1] = cov / ((n - lag) * v);\r\n }\r\n return result;\r\n}\r\n","/**\r\n * @svrnsec/pulse — SharedArrayBuffer Microsecond Timer\r\n *\r\n * Bypasses browser timer clamping (Brave 100µs cap, Firefox 20µs cap, Safari\r\n * 1ms cap) using Atomics.wait() which is exempt from clamping because it maps\r\n * directly to OS-level futex/semaphore primitives.\r\n *\r\n * Requirements\r\n * ────────────\r\n * The page must be served with Cross-Origin Isolation headers:\r\n * Cross-Origin-Opener-Policy: same-origin\r\n * Cross-Origin-Embedder-Policy: require-corp\r\n *\r\n * These are mandatory for security (Spectre mitigations) and are already\r\n * required by WebGPU, WebAssembly threads, and SharedArrayBuffer in all\r\n * modern browsers.\r\n *\r\n * What we measure\r\n * ───────────────\r\n * resolution the true timer resolution (pre-clamp) in microseconds\r\n * isClamped true if performance.now() is artificially reduced\r\n * clampAmount how much performance.now() was rounded (µs)\r\n * highResTimings entropy probe timings at true microsecond resolution\r\n *\r\n * Why this matters\r\n * ────────────────\r\n * With 1ms clamping, a VM's flat distribution and a real device's noisy\r\n * distribution can look similar — both get quantized to the same step.\r\n * At 1µs resolution, the difference between EJR=1.01 and EJR=1.24 is\r\n * unmistakable. This upgrade alone materially improves detection accuracy\r\n * on Brave and Firefox where timer clamping was previously a confound.\r\n */\r\n\r\n/* ─── availability ───────────────────────────────────────────────────────── */\r\n\r\nexport function isSabAvailable() {\r\n return (\r\n typeof SharedArrayBuffer !== 'undefined' &&\r\n typeof Atomics !== 'undefined' &&\r\n typeof Atomics.wait === 'function' &&\r\n typeof crossOriginIsolated !== 'undefined' && crossOriginIsolated === true // COOP+COEP headers\r\n );\r\n}\r\n\r\n/* ─── Atomics-based high-resolution clock ───────────────────────────────── */\r\n\r\nfunction _createSab() {\r\n if (!isSabAvailable()) return null;\r\n const sab = new SharedArrayBuffer(4);\r\n return new Int32Array(sab);\r\n}\r\n\r\n/**\r\n * Wait exactly `us` microseconds using Atomics.wait().\r\n * Returns wall-clock elapsed in milliseconds.\r\n * Much more accurate than setTimeout(fn, 0) or performance.now() loops.\r\n *\r\n * @param {number} us – microseconds to wait\r\n * @param {Int32Array} i32 – shared int32 view\r\n * @returns {number} actual elapsed ms\r\n */\r\nfunction _atomicsWait(us, i32) {\r\n const t0 = performance.now();\r\n Atomics.wait(i32, 0, 0, us / 1000); // Atomics.wait timeout is in ms\r\n return performance.now() - t0;\r\n}\r\n\r\n/* ─── measureClamp ───────────────────────────────────────────────────────── */\r\n\r\n/**\r\n * Determine the true timer resolution by comparing a series of\r\n * sub-millisecond Atomics.wait() calls against performance.now() deltas.\r\n *\r\n * @returns {{ isClamped: boolean, clampAmountUs: number, resolutionUs: number }}\r\n */\r\nexport function measureClamp() {\r\n if (!isSabAvailable()) {\r\n return { isClamped: false, clampAmountUs: 0, resolutionUs: 1000 };\r\n }\r\n\r\n // Measure the minimum non-zero performance.now() delta\r\n const performanceDeltas = [];\r\n for (let i = 0; i < 100; i++) {\r\n const t0 = performance.now();\r\n let t1 = t0;\r\n let attempts = 0;\r\n while (t1 === t0 && attempts++ < 10000) t1 = performance.now();\r\n performanceDeltas.push((t1 - t0) * 1000); // convert to µs\r\n }\r\n performanceDeltas.sort((a, b) => a - b);\r\n const perfResolutionUs = performanceDeltas[Math.floor(performanceDeltas.length * 0.1)]; // 10th percentile\r\n\r\n // Measure actual OS timer resolution via Atomics.wait\r\n const i32 = _createSab();\r\n if (!i32) return { isClamped: false, clampAmountUs: 0, resolutionUs: 1000 };\r\n const atomicsDeltas = [];\r\n for (let i = 0; i < 20; i++) {\r\n const elapsedMs = _atomicsWait(100, i32); // wait 100µs\r\n atomicsDeltas.push(Math.abs(elapsedMs * 1000 - 100)); // error from target\r\n }\r\n const atomicsErrorUs = atomicsDeltas.reduce((s, v) => s + v, 0) / atomicsDeltas.length;\r\n const trueResolutionUs = Math.max(1, atomicsErrorUs);\r\n\r\n const isClamped = perfResolutionUs > trueResolutionUs * 5;\r\n const clampAmountUs = isClamped ? perfResolutionUs - trueResolutionUs : 0;\r\n\r\n return { isClamped, clampAmountUs, resolutionUs: perfResolutionUs };\r\n}\r\n\r\n/* ─── collectHighResTimings ──────────────────────────────────────────────── */\r\n\r\n/**\r\n * Collect entropy probe timings at Atomics-level resolution.\r\n * Falls back to performance.now() if SAB is unavailable.\r\n *\r\n * The probe itself is identical to the WASM matrix probe — CPU work unit\r\n * timed with the highest available clock. The difference: on a clamped\r\n * browser this replaces quantized 100µs buckets with true µs measurements.\r\n *\r\n * @param {object} opts\r\n * @param {number} [opts.iterations=200]\r\n * @param {number} [opts.matrixSize=32] – smaller than WASM probe (no SIMD here)\r\n * @returns {{ timings: number[], usingAtomics: boolean, resolutionUs: number }}\r\n */\r\nexport function collectHighResTimings(opts = {}) {\r\n const { iterations = 200, matrixSize = 32 } = opts;\r\n\r\n const usingAtomics = isSabAvailable();\r\n const clampInfo = usingAtomics ? measureClamp() : { resolutionUs: 1000 };\r\n\r\n // Simple matrix multiply work unit (JS — no WASM needed for the clock probe)\r\n const N = matrixSize;\r\n const A = new Float64Array(N * N).map(() => Math.random());\r\n const B = new Float64Array(N * N).map(() => Math.random());\r\n const C = new Float64Array(N * N);\r\n\r\n const timings = new Array(iterations);\r\n const _i32 = usingAtomics ? _createSab() : null;\r\n\r\n for (let iter = 0; iter < iterations; iter++) {\r\n C.fill(0);\r\n\r\n if (usingAtomics && _i32) {\r\n // ── Atomics path: start timing, do work, read Atomics-calibrated time ──\r\n // We use a sliding window approach: measure with Atomics.wait(0) which\r\n // returns immediately but the OS schedules give us a high-res timestamp\r\n // via the before/after pattern on the shared memory notification.\r\n\r\n const tAtomicsBefore = _getAtomicsTs(_i32);\r\n for (let i = 0; i < N; i++) {\r\n for (let k = 0; k < N; k++) {\r\n const aik = A[i * N + k];\r\n for (let j = 0; j < N; j++) C[i * N + j] += aik * B[k * N + j];\r\n }\r\n }\r\n const tAtomicsAfter = _getAtomicsTs(_i32);\r\n timings[iter] = (tAtomicsAfter - tAtomicsBefore) * 1000; // µs → ms\r\n\r\n } else {\r\n // ── Standard path: use performance.now() ──\r\n const t0 = performance.now();\r\n for (let i = 0; i < N; i++) {\r\n for (let k = 0; k < N; k++) {\r\n const aik = A[i * N + k];\r\n for (let j = 0; j < N; j++) C[i * N + j] += aik * B[k * N + j];\r\n }\r\n }\r\n timings[iter] = performance.now() - t0;\r\n }\r\n }\r\n\r\n return {\r\n timings,\r\n usingAtomics,\r\n resolutionUs: clampInfo.resolutionUs,\r\n isClamped: clampInfo.isClamped ?? false,\r\n clampAmountUs: clampInfo.clampAmountUs ?? 0,\r\n };\r\n}\r\n\r\n/* ─── internal Atomics timestamp ─────────────────────────────────────────── */\r\n\r\n// Use a write to shared memory + memory fence as a timestamp anchor.\r\n// This forces the CPU to flush its store buffer, giving a hardware-ordered\r\n// time reference that survives compiler reordering.\r\nfunction _getAtomicsTs(i32) {\r\n Atomics.store(i32, 0, Atomics.load(i32, 0) + 1);\r\n return performance.now();\r\n}\r\n","/**\r\n * @svrnsec/pulse — Electrical Network Frequency (ENF) Detection\r\n *\r\n * ┌─────────────────────────────────────────────────────────────────────────┐\r\n * │ WHAT THIS IS │\r\n * │ │\r\n * │ Power grids operate at a nominal frequency — 60 Hz in the Americas, │\r\n * │ 50 Hz in Europe, Asia, Africa, and Australia. This frequency is not │\r\n * │ perfectly stable. It deviates by ±0.05 Hz in real time as generators │\r\n * │ spin up and down to match load. These deviations are unique, logged │\r\n * │ by grid operators, and have been used in forensics since 2010 to │\r\n * │ timestamp recordings to within seconds. │\r\n * │ │\r\n * │ We are the first to measure it from a browser. │\r\n * └─────────────────────────────────────────────────────────────────────────┘\r\n *\r\n * Signal path\r\n * ───────────\r\n * AC mains (50/60 Hz)\r\n * → ATX power supply (full-wave rectified → 100/120 Hz ripple on DC rail)\r\n * → Voltage Regulator Module (VRM) on motherboard\r\n * → CPU Vcore (supply voltage to processor dies)\r\n * → Transistor switching speed (slightly modulated by Vcore)\r\n * → Matrix multiply loop timing (measurably longer when Vcore dips)\r\n * → Our microsecond-resolution timing probe\r\n *\r\n * The ripple amplitude at the timing layer is ~10–100 ns — invisible to\r\n * performance.now() at 1 ms resolution, clearly visible with Atomics-based\r\n * microsecond timing. This is why this module depends on sabTimer.js.\r\n *\r\n * What we detect\r\n * ──────────────\r\n * gridFrequency 50.0 or 60.0 Hz (nominal), ±0.5 Hz measured\r\n * gridRegion 'americas' (60 Hz) | 'emea_apac' (50 Hz) | 'unknown'\r\n * ripplePresent true if the 100/120 Hz harmonic is statistically significant\r\n * ripplePower power of the dominant grid harmonic (0–1)\r\n * enfDeviation precise measured frequency – nominal (Hz) — temporal fingerprint\r\n * temporalHash BLAKE3 of (enfDeviation + timestamp) — attestation anchor\r\n *\r\n * What this proves\r\n * ───────────────\r\n * 1. The device is connected to a real AC power grid (rules out cloud VMs,\r\n * UPS-backed datacenter servers, and battery-only devices off-grid)\r\n * 2. The geographic grid region (50 Hz vs 60 Hz — no IP, no location API)\r\n * 3. A temporal fingerprint that can be cross-referenced against public ENF\r\n * logs (e.g., www.gridwatch.templar.linux.org.uk) to verify the session\r\n * timestamp is authentic\r\n *\r\n * Why VMs fail\r\n * ────────────\r\n * Datacenter power is conditioned, filtered, and UPS-backed. Grid frequency\r\n * deviations are removed before they reach the server. Cloud VMs receive\r\n * perfectly regulated power — the ENF signal does not exist in their timing\r\n * measurements. This is a physical property of datacenter infrastructure,\r\n * not a software configuration that can be patched or spoofed.\r\n *\r\n * A VM attempting to inject synthetic ENF ripple into its virtual clock\r\n * would need to:\r\n * 1. Know the real-time ENF of the target grid region (requires live API)\r\n * 2. Modulate the virtual TSC at sub-microsecond precision\r\n * 3. Match the precise VRM transfer function of the target motherboard\r\n * This is not a realistic attack surface.\r\n *\r\n * Battery devices\r\n * ───────────────\r\n * Laptops on battery have no AC ripple. The module detects this via absence\r\n * of both 100 Hz and 120 Hz signal, combined with very low ripple variance.\r\n * This is handled by the 'battery_or_conditioned' verdict — treated as\r\n * inconclusive rather than VM (real laptops exist).\r\n *\r\n * Required: crossOriginIsolated = true (COOP + COEP headers)\r\n * The SAB microsecond timer is required for ENF detection. On browsers where\r\n * it is unavailable, the module returns { enfAvailable: false }.\r\n */\r\n\r\nimport { isSabAvailable, collectHighResTimings } from './sabTimer.js';\r\n\r\n// ── Grid frequency constants ──────────────────────────────────────────────────\r\nconst GRID_60HZ_NOMINAL = 60.0; // Americas, parts of Japan & Korea\r\nconst GRID_50HZ_NOMINAL = 50.0; // EMEA, APAC, most of Asia\r\nconst RIPPLE_60HZ = 120.0; // Full-wave rectified: 2 × 60 Hz\r\nconst RIPPLE_50HZ = 100.0; // Full-wave rectified: 2 × 50 Hz\r\nconst RIPPLE_SLACK_HZ = 2.0; // ±2 Hz around nominal (accounts for VRM response)\r\nconst MIN_RIPPLE_POWER = 0.04; // Minimum power ratio to declare ripple present\r\nconst SNR_THRESHOLD = 2.0; // Signal-to-noise ratio for confident detection\r\n\r\n// ── Probe parameters ──────────────────────────────────────────────────────────\r\n// We need enough samples at sufficient rate to resolve 100–120 Hz.\r\n// Nyquist: sample_rate > 240 Hz (need >2× the highest target frequency).\r\n// With ~1 ms per iteration, 100 Hz ≈ 10 samples per cycle — adequate.\r\n// We want at least 20 full cycles → 200 iterations minimum.\r\nconst PROBE_ITERATIONS = 512; // power of 2 for clean FFT\r\nconst PROBE_MATRIX_SIZE = 16; // small matrix → ~1 ms/iter → ~500 Hz sample rate\r\n\r\n/* ─── collectEnfTimings ─────────────────────────────────────────────────────── */\r\n\r\n/**\r\n * @param {object} [opts]\r\n * @param {number} [opts.iterations=512]\r\n * @returns {Promise<EnfResult>}\r\n */\r\nexport async function collectEnfTimings(opts = {}) {\r\n const { iterations = PROBE_ITERATIONS } = opts;\r\n\r\n if (!isSabAvailable()) {\r\n return _noEnf('SharedArrayBuffer not available — COOP+COEP headers required');\r\n }\r\n\r\n // Collect high-resolution CPU timing series\r\n const { timings, resolutionUs } = collectHighResTimings({\r\n iterations,\r\n matrixSize: PROBE_MATRIX_SIZE,\r\n });\r\n\r\n if (timings.length < 128) {\r\n return _noEnf('insufficient timing samples');\r\n }\r\n\r\n // Estimate the sample rate from actual timing\r\n const meanIterMs = timings.reduce((s, v) => s + v, 0) / timings.length;\r\n const sampleRateHz = meanIterMs > 0 ? 1000 / meanIterMs : 0;\r\n\r\n if (sampleRateHz < 60) {\r\n return _noEnf(`sample rate too low for ENF detection: ${sampleRateHz.toFixed(0)} Hz`);\r\n }\r\n\r\n // ── Power Spectral Density ────────────────────────────────────────────────\r\n const n = timings.length;\r\n const psd = _computePsd(timings, sampleRateHz);\r\n\r\n // Find the dominant frequency peak\r\n const peakIdx = psd.powers.reduce((best, v, i) => i > 0 && v > psd.powers[best] ? i : best, 1);\r\n const peakFreq = psd.freqs[peakIdx];\r\n\r\n // Power in 100 Hz window vs 120 Hz window\r\n const power100 = _bandPower(psd, RIPPLE_50HZ, RIPPLE_SLACK_HZ);\r\n const power120 = _bandPower(psd, RIPPLE_60HZ, RIPPLE_SLACK_HZ);\r\n const baseline = _baselinePower(psd, [\r\n [RIPPLE_50HZ - RIPPLE_SLACK_HZ, RIPPLE_50HZ + RIPPLE_SLACK_HZ],\r\n [RIPPLE_60HZ - RIPPLE_SLACK_HZ, RIPPLE_60HZ + RIPPLE_SLACK_HZ],\r\n ]);\r\n\r\n const snr100 = baseline > 0 ? power100 / baseline : 0;\r\n const snr120 = baseline > 0 ? power120 / baseline : 0;\r\n\r\n // ── Verdict ───────────────────────────────────────────────────────────────\r\n const has100 = power100 > MIN_RIPPLE_POWER && snr100 > SNR_THRESHOLD;\r\n const has120 = power120 > MIN_RIPPLE_POWER && snr120 > SNR_THRESHOLD;\r\n\r\n let gridFrequency = null;\r\n let gridRegion = 'unknown';\r\n let ripplePower = 0;\r\n let nominalHz = null;\r\n\r\n if (has120 && power120 >= power100) {\r\n gridFrequency = GRID_60HZ_NOMINAL;\r\n gridRegion = 'americas';\r\n ripplePower = power120;\r\n nominalHz = RIPPLE_60HZ;\r\n } else if (has100) {\r\n gridFrequency = GRID_50HZ_NOMINAL;\r\n gridRegion = 'emea_apac';\r\n ripplePower = power100;\r\n nominalHz = RIPPLE_50HZ;\r\n }\r\n\r\n const ripplePresent = has100 || has120;\r\n\r\n // ── ENF deviation (temporal fingerprint) ─────────────────────────────────\r\n // The precise ripple frequency deviates from nominal by ±0.1 Hz in real time.\r\n // We measure the peak frequency in the ripple band to extract this deviation.\r\n let enfDeviation = null;\r\n if (ripplePresent && nominalHz !== null) {\r\n const preciseRippleFreq = _precisePeakFreq(psd, nominalHz, RIPPLE_SLACK_HZ);\r\n enfDeviation = +(preciseRippleFreq - nominalHz).toFixed(3); // Hz deviation from nominal\r\n }\r\n\r\n // ── Verdict ───────────────────────────────────────────────────────────────\r\n const verdict =\r\n !ripplePresent ? 'no_grid_signal' // VM, UPS, or battery\r\n : gridRegion === 'americas' ? 'grid_60hz'\r\n : gridRegion === 'emea_apac' ? 'grid_50hz'\r\n : 'grid_detected_region_unknown';\r\n\r\n const isVmIndicator = !ripplePresent && sampleRateHz > 100;\r\n // High sample rate + no ripple = conditioned power (datacenter)\r\n\r\n return {\r\n enfAvailable: true,\r\n ripplePresent,\r\n gridFrequency,\r\n gridRegion,\r\n ripplePower: +ripplePower.toFixed(4),\r\n snr50hz: +snr100.toFixed(2),\r\n snr60hz: +snr120.toFixed(2),\r\n enfDeviation,\r\n sampleRateHz: +sampleRateHz.toFixed(1),\r\n resolutionUs,\r\n verdict,\r\n isVmIndicator,\r\n // For cross-referencing against public ENF databases (forensic timestamp)\r\n temporalAnchor: enfDeviation !== null ? {\r\n nominalHz,\r\n measuredRippleHz: +(nominalHz + enfDeviation).toFixed(4),\r\n capturedAt: Date.now(),\r\n // Matches format used by ENF forensic databases:\r\n // https://www.enf.cc | UK National Grid ESO data\r\n gridHz: gridFrequency,\r\n } : null,\r\n };\r\n}\r\n\r\n/* ─── Power Spectral Density (Welch-inspired DFT) ───────────────────────── */\r\n\r\nfunction _computePsd(signal, sampleRateHz) {\r\n const n = signal.length;\r\n const mean = signal.reduce((s, v) => s + v, 0) / n;\r\n\r\n // Remove DC offset and apply Hann window\r\n const windowed = signal.map((v, i) => {\r\n const w = 0.5 * (1 - Math.cos((2 * Math.PI * i) / (n - 1))); // Hann\r\n return (v - mean) * w;\r\n });\r\n\r\n // DFT up to Nyquist — only need up to ~200 Hz so we cap bins\r\n const maxFreq = Math.min(200, sampleRateHz / 2);\r\n const maxBin = Math.floor(maxFreq * n / sampleRateHz);\r\n\r\n const powers = new Float64Array(maxBin);\r\n const freqs = new Float64Array(maxBin);\r\n\r\n for (let k = 1; k < maxBin; k++) {\r\n let re = 0, im = 0;\r\n for (let t = 0; t < n; t++) {\r\n const angle = (2 * Math.PI * k * t) / n;\r\n re += windowed[t] * Math.cos(angle);\r\n im -= windowed[t] * Math.sin(angle);\r\n }\r\n powers[k] = (re * re + im * im) / (n * n);\r\n freqs[k] = (k * sampleRateHz) / n;\r\n }\r\n\r\n // Normalise powers so they sum to 1 (makes thresholds sample-count-independent)\r\n const total = powers.reduce((s, v) => s + v, 0);\r\n if (total > 0) for (let i = 0; i < powers.length; i++) powers[i] /= total;\r\n\r\n return { powers, freqs };\r\n}\r\n\r\nfunction _bandPower(psd, centerHz, halfwidthHz) {\r\n let power = 0;\r\n for (let i = 0; i < psd.freqs.length; i++) {\r\n if (Math.abs(psd.freqs[i] - centerHz) <= halfwidthHz) {\r\n power += psd.powers[i];\r\n }\r\n }\r\n return power;\r\n}\r\n\r\nfunction _baselinePower(psd, excludeBands) {\r\n let sum = 0, count = 0;\r\n for (let i = 0; i < psd.freqs.length; i++) {\r\n const f = psd.freqs[i];\r\n const excluded = excludeBands.some(([lo, hi]) => f >= lo && f <= hi);\r\n if (!excluded && f > 10 && f < 200) { sum += psd.powers[i]; count++; }\r\n }\r\n return count > 0 ? sum / count : 0;\r\n}\r\n\r\nfunction _precisePeakFreq(psd, centerHz, halfwidthHz) {\r\n // Quadratic interpolation around the peak bin for sub-bin precision\r\n let peakBin = 0, peakPow = -Infinity;\r\n for (let i = 0; i < psd.freqs.length; i++) {\r\n if (Math.abs(psd.freqs[i] - centerHz) <= halfwidthHz && psd.powers[i] > peakPow) {\r\n peakPow = psd.powers[i]; peakBin = i;\r\n }\r\n }\r\n if (peakBin <= 0 || peakBin >= psd.powers.length - 1) return psd.freqs[peakBin];\r\n\r\n // Quadratic peak interpolation (Jacobsen method)\r\n const alpha = psd.powers[peakBin - 1];\r\n const beta = psd.powers[peakBin];\r\n const gamma = psd.powers[peakBin + 1];\r\n const denom = alpha - 2 * beta + gamma;\r\n if (Math.abs(denom) < 1e-14) return psd.freqs[peakBin];\r\n const deltaBin = 0.5 * (alpha - gamma) / denom;\r\n const binWidth = psd.freqs[1] - psd.freqs[0];\r\n return psd.freqs[peakBin] + deltaBin * binWidth;\r\n}\r\n\r\nfunction _noEnf(reason) {\r\n return {\r\n enfAvailable: false, ripplePresent: false, gridFrequency: null,\r\n gridRegion: 'unknown', ripplePower: 0, snr50hz: 0, snr60hz: 0,\r\n enfDeviation: null, sampleRateHz: 0, resolutionUs: 0,\r\n verdict: 'unavailable', isVmIndicator: false, temporalAnchor: null, reason,\r\n };\r\n}\r\n\r\n/**\r\n * @typedef {object} EnfResult\r\n * @property {boolean} enfAvailable\r\n * @property {boolean} ripplePresent false = VM / datacenter / battery\r\n * @property {number|null} gridFrequency 50 or 60 Hz\r\n * @property {string} gridRegion 'americas' | 'emea_apac' | 'unknown'\r\n * @property {number} ripplePower normalised PSD power at grid harmonic\r\n * @property {number|null} enfDeviation Hz deviation from nominal (temporal fingerprint)\r\n * @property {string} verdict\r\n * @property {boolean} isVmIndicator true if signal absence + high sample rate\r\n * @property {object|null} temporalAnchor forensic timestamp anchor\r\n */\r\n","/**\r\n * @svrnsec/pulse — LLM / AI Agent Behavioral Fingerprint\r\n *\r\n * Detects automation driven by large language models, headless browsers\r\n * controlled by AI agents (AutoGPT, CrewAI, browser-use, Playwright+LLM,\r\n * Selenium+GPT-4), and synthetic user emulators.\r\n *\r\n * Why LLMs are detectable at the behavioral layer\r\n * ───────────────────────────────────────────────\r\n * A human interacting with a browser produces a signal shaped by:\r\n * – Motor control noise (Fitts' Law, signal-dependent noise in arm movement)\r\n * – Cognitive processing time (fixation → decision → motor initiation)\r\n * – Error and correction cycles (overshooting, backspacing, re-reading)\r\n * – Physiological rhythms (micro-tremor at 8–12 Hz, respiration at 0.2–0.3 Hz)\r\n *\r\n * An LLM agent produces:\r\n * – Think-time spikes at multiples of the model's token generation latency\r\n * (GPT-4 Turbo: ~50ms/token; Claude 3: ~30ms/token)\r\n * – Mouse paths generated by a trajectory model (no signal-dependent noise)\r\n * – Keystrokes at WPM limited by the agent's typing function, not human anatomy\r\n * – Absent micro-corrections (humans correct 7–12% of keystrokes; agents: 0%)\r\n *\r\n * Signals\r\n * ───────\r\n * thinkTimePattern peak in inter-event timing at known LLM token latencies\r\n * mousePathSmoothness human paths are fractal; LLM paths are piecewise linear\r\n * correctionRate keystrokes followed by Backspace (human: 7–12%, LLM: <1%)\r\n * pauseDistribution human pauses are Pareto-distributed; LLM pauses are uniform\r\n * rhythmicity presence of physiological tremor (8–12 Hz) in pointer data\r\n * eventGapCV coefficient of variation of inter-event gaps\r\n *\r\n * Scoring\r\n * ───────\r\n * Each signal contributes a weight to an overall `aiConf` score (0–1).\r\n * A score above 0.70 indicates likely AI agent. Above 0.85 is high confidence.\r\n * The score is designed to be combined with the physics layer — AI agents running\r\n * on real hardware (a human's machine being remote-controlled) will pass the\r\n * physics check but fail the behavioral check.\r\n */\r\n\r\n// ── Known LLM token latency ranges (ms per token, observed empirically) ──────\r\n// These appear as periodic peaks in inter-event timing when the LLM is\r\n// \"thinking\" between actions.\r\nconst LLM_LATENCY_RANGES = [\r\n { name: 'gpt-4-turbo', minMs: 40, maxMs: 80 },\r\n { name: 'gpt-4o', minMs: 20, maxMs: 50 },\r\n { name: 'claude-3-sonnet', minMs: 25, maxMs: 60 },\r\n { name: 'claude-3-opus', minMs: 50, maxMs: 120 },\r\n { name: 'gemini-1.5-pro', minMs: 30, maxMs: 70 },\r\n { name: 'llama-3-70b', minMs: 15, maxMs: 45 },\r\n];\r\n\r\n// ── Human physiological constants ─────────────────────────────────────────────\r\nconst HUMAN_TREMOR_HZ_LO = 8; // micro-tremor band low (Hz)\r\nconst HUMAN_TREMOR_HZ_HI = 12; // micro-tremor band high (Hz)\r\nconst HUMAN_CORRECTION_MIN = 0.05; // minimum human backspace rate\r\nconst HUMAN_CORRECTION_MAX = 0.18; // maximum human backspace rate\r\n\r\n/* ─── Public API ─────────────────────────────────────────────────────────── */\r\n\r\n/**\r\n * Analyse collected behavioral signals for AI agent indicators.\r\n *\r\n * @param {object} signals\r\n * @param {Array<{t:number, x:number, y:number}>} [signals.mouseEvents] – {t ms, x, y}\r\n * @param {Array<{t:number, key:string}>} [signals.keyEvents] – {t ms, key}\r\n * @param {Array<number>} [signals.interEventGaps] – ms between any UI events\r\n * @returns {LlmFingerprint}\r\n */\r\nexport function detectLlmAgent(signals = {}) {\r\n const {\r\n mouseEvents = [],\r\n keyEvents = [],\r\n interEventGaps = [],\r\n } = signals;\r\n\r\n const checks = [];\r\n\r\n // ── 1. Think-time pattern ────────────────────────────────────────────────\r\n if (interEventGaps.length >= 20) {\r\n const thinkCheck = _analyseThinkTime(interEventGaps);\r\n checks.push(thinkCheck);\r\n }\r\n\r\n // ── 2. Mouse path smoothness ─────────────────────────────────────────────\r\n if (mouseEvents.length >= 30) {\r\n const pathCheck = _analyseMousePath(mouseEvents);\r\n checks.push(pathCheck);\r\n }\r\n\r\n // ── 3. Keystroke correction rate ─────────────────────────────────────────\r\n if (keyEvents.length >= 15) {\r\n const corrCheck = _analyseCorrectionRate(keyEvents);\r\n checks.push(corrCheck);\r\n }\r\n\r\n // ── 4. Physiological tremor ───────────────────────────────────────────────\r\n if (mouseEvents.length >= 50) {\r\n const tremorCheck = _analyseTremor(mouseEvents);\r\n checks.push(tremorCheck);\r\n }\r\n\r\n // ── 5. Inter-event gap distribution ──────────────────────────────────────\r\n if (interEventGaps.length >= 30) {\r\n const gapCheck = _analyseGapDistribution(interEventGaps);\r\n checks.push(gapCheck);\r\n }\r\n\r\n if (!checks.length) {\r\n return { aiConf: 0, humanConf: 0, checks: [], verdict: 'insufficient_data',\r\n dataPoints: { mouseEvents: mouseEvents.length,\r\n keyEvents: keyEvents.length,\r\n gaps: interEventGaps.length } };\r\n }\r\n\r\n // Weighted average — weight by how many data points each check had\r\n const totalWeight = checks.reduce((s, c) => s + c.weight, 0);\r\n const aiConf = checks.reduce((s, c) => s + c.aiScore * c.weight, 0) / totalWeight;\r\n const humanConf = checks.reduce((s, c) => s + c.humanScore * c.weight, 0) / totalWeight;\r\n\r\n const verdict =\r\n aiConf > 0.85 ? 'ai_agent_high_confidence'\r\n : aiConf > 0.70 ? 'ai_agent_likely'\r\n : humanConf > 0.75 ? 'human_likely'\r\n : 'ambiguous';\r\n\r\n return {\r\n aiConf: +aiConf.toFixed(3),\r\n humanConf: +humanConf.toFixed(3),\r\n checks,\r\n verdict,\r\n dataPoints: {\r\n mouseEvents: mouseEvents.length,\r\n keyEvents: keyEvents.length,\r\n gaps: interEventGaps.length,\r\n },\r\n };\r\n}\r\n\r\n/* ─── Signal collectors (attach to the live DOM) ─────────────────────────── */\r\n\r\n/**\r\n * Create a collector that listens to DOM events and returns a snapshot\r\n * of raw signals. Call `.stop()` when done collecting.\r\n *\r\n * @param {object} [opts]\r\n * @param {EventTarget} [opts.target=window]\r\n * @param {number} [opts.maxEvents=2000]\r\n * @returns {{ stop: () => LlmSignals, isCollecting: boolean }}\r\n */\r\nexport function createBehaviorCollector(opts = {}) {\r\n const { target = globalThis, maxEvents = 2000 } = opts;\r\n\r\n const mouseEvents = [];\r\n const keyEvents = [];\r\n const interEventGaps = [];\r\n let lastEventTs = null;\r\n let collecting = true;\r\n\r\n const onMouse = (e) => {\r\n if (!collecting || mouseEvents.length >= maxEvents) return;\r\n mouseEvents.push({ t: e.timeStamp, x: e.clientX, y: e.clientY });\r\n _recordGap(e.timeStamp);\r\n };\r\n\r\n const onKey = (e) => {\r\n if (!collecting || keyEvents.length >= maxEvents) return;\r\n keyEvents.push({ t: e.timeStamp, key: e.key });\r\n _recordGap(e.timeStamp);\r\n };\r\n\r\n const onClick = (e) => _recordGap(e.timeStamp);\r\n const onScroll = () => _recordGap(performance.now());\r\n\r\n function _recordGap(ts) {\r\n if (lastEventTs !== null && ts > lastEventTs) {\r\n interEventGaps.push(ts - lastEventTs);\r\n }\r\n lastEventTs = ts;\r\n }\r\n\r\n if (typeof target.addEventListener === 'function') {\r\n target.addEventListener('mousemove', onMouse, { passive: true });\r\n target.addEventListener('keydown', onKey, { passive: true });\r\n target.addEventListener('click', onClick, { passive: true });\r\n target.addEventListener('scroll', onScroll, { passive: true });\r\n }\r\n\r\n return {\r\n get isCollecting() { return collecting; },\r\n stop() {\r\n collecting = false;\r\n if (typeof target.removeEventListener === 'function') {\r\n target.removeEventListener('mousemove', onMouse);\r\n target.removeEventListener('keydown', onKey);\r\n target.removeEventListener('click', onClick);\r\n target.removeEventListener('scroll', onScroll);\r\n }\r\n return { mouseEvents: [...mouseEvents],\r\n keyEvents: [...keyEvents],\r\n interEventGaps: [...interEventGaps] };\r\n },\r\n };\r\n}\r\n\r\n/* ─── Internal checks ────────────────────────────────────────────────────── */\r\n\r\nfunction _analyseThinkTime(gaps) {\r\n // Look for peaks in gap histogram that align with known LLM latency ranges\r\n const histogram = _histogram(gaps, 200); // 200 bins over the gap range\r\n\r\n let matchScore = 0;\r\n const matched = [];\r\n\r\n for (const llm of LLM_LATENCY_RANGES) {\r\n const binPower = _histogramPowerInRange(histogram, llm.minMs, llm.maxMs);\r\n if (binPower > 0.15) { // >15% of all gaps fall in this LLM's latency range\r\n matchScore = Math.max(matchScore, binPower);\r\n matched.push(llm.name);\r\n }\r\n }\r\n\r\n // Human think times follow a Pareto distribution: many short, exponentially\r\n // fewer long pauses. A spike at a fixed latency range is anomalous.\r\n const cv = _cv(gaps);\r\n const isPareto = cv > 1.0; // Pareto CV is always > 1\r\n\r\n return {\r\n name: 'think_time',\r\n aiScore: matchScore > 0.20 ? Math.min(1, matchScore * 3) : 0,\r\n humanScore: isPareto && matchScore < 0.10 ? 0.8 : 0.2,\r\n weight: Math.min(gaps.length / 50, 1),\r\n detail: { matchedLlms: matched, peakBinPower: matchScore, isPareto },\r\n };\r\n}\r\n\r\nfunction _analyseMousePath(events) {\r\n // Compute path curvature at each triplet of points\r\n // Human paths are fractal (self-similar at multiple scales); AI paths are\r\n // smooth cubic splines or straight lines with programmatic waypoints.\r\n const curvatures = [];\r\n for (let i = 1; i < events.length - 1; i++) {\r\n const p0 = events[i - 1];\r\n const p1 = events[i];\r\n const p2 = events[i + 1];\r\n\r\n const d01 = Math.hypot(p1.x - p0.x, p1.y - p0.y);\r\n const d12 = Math.hypot(p2.x - p1.x, p2.y - p1.y);\r\n const d02 = Math.hypot(p2.x - p0.x, p2.y - p0.y);\r\n\r\n // Curvature = deviation from straight line (0 = straight, 1 = sharp turn)\r\n if (d01 + d12 > 0) {\r\n curvatures.push(1 - (d02 / (d01 + d12)));\r\n }\r\n }\r\n\r\n if (!curvatures.length) return { name: 'mouse_path', aiScore: 0, humanScore: 0.5, weight: 0.1, detail: {} };\r\n\r\n const meanCurv = _mean(curvatures);\r\n const cvCurv = _cv(curvatures);\r\n\r\n // Human: moderate mean curvature (0.05–0.25), high CV (varying turns)\r\n // AI agent: very low mean curvature (near-straight lines), low CV (consistent)\r\n const isTooSmooth = meanCurv < 0.02 && cvCurv < 0.3;\r\n const isTooRegular = cvCurv < 0.2 && meanCurv > 0 && meanCurv < 0.05;\r\n\r\n // Velocity profile: human acceleration follows a bell curve (min jerk model)\r\n // AI: piecewise constant velocity (linear interpolation between waypoints)\r\n const speeds = [];\r\n for (let i = 1; i < events.length; i++) {\r\n const dt = events[i].t - events[i - 1].t;\r\n const ds = Math.hypot(events[i].x - events[i - 1].x, events[i].y - events[i - 1].y);\r\n if (dt > 0) speeds.push(ds / dt);\r\n }\r\n const speedCV = _cv(speeds);\r\n\r\n // Human speed is highly variable (CV > 0.5); AI speed is consistent (CV < 0.3)\r\n const aiScore = (\r\n (isTooSmooth ? 0.40 : 0) +\r\n (isTooRegular ? 0.30 : 0) +\r\n (speedCV < 0.25 ? 0.30 : speedCV < 0.40 ? 0.15 : 0)\r\n );\r\n\r\n return {\r\n name: 'mouse_path',\r\n aiScore: Math.min(1, aiScore),\r\n humanScore: aiScore < 0.2 ? 0.8 : 0.2,\r\n weight: Math.min(events.length / 100, 1),\r\n detail: { meanCurvature: +meanCurv.toFixed(4), curvatureCV: +cvCurv.toFixed(3), speedCV: +speedCV.toFixed(3) },\r\n };\r\n}\r\n\r\nfunction _analyseCorrectionRate(keyEvents) {\r\n const total = keyEvents.length;\r\n const backspaces = keyEvents.filter(e => e.key === 'Backspace').length;\r\n const rate = backspaces / total;\r\n\r\n // Human: 5–18% correction rate (typos, editing)\r\n // AI agent: <1% (generates correct text directly from LLM output)\r\n const isTooClean = rate < HUMAN_CORRECTION_MIN;\r\n const isHuman = rate >= HUMAN_CORRECTION_MIN && rate <= HUMAN_CORRECTION_MAX;\r\n\r\n return {\r\n name: 'correction_rate',\r\n aiScore: isTooClean ? 0.75 : 0,\r\n humanScore: isHuman ? 0.85 : 0.2,\r\n weight: Math.min(total / 30, 1),\r\n detail: { correctionRate: +rate.toFixed(3), backspaces, total },\r\n };\r\n}\r\n\r\nfunction _analyseTremor(mouseEvents) {\r\n // Extract velocity time series and look for 8–12 Hz component\r\n // Human hands exhibit involuntary micro-tremor in this band.\r\n if (mouseEvents.length < 50) return { name: 'tremor', aiScore: 0, humanScore: 0.5, weight: 0.1, detail: {} };\r\n\r\n const dt = (mouseEvents[mouseEvents.length - 1].t - mouseEvents[0].t) / (mouseEvents.length - 1);\r\n const sampleHz = dt > 0 ? 1000 / dt : 0;\r\n\r\n if (sampleHz < 30) {\r\n // Not enough temporal resolution to detect 8–12 Hz\r\n return { name: 'tremor', aiScore: 0, humanScore: 0.5, weight: 0.1, detail: { reason: 'low_sample_rate' } };\r\n }\r\n\r\n // Compute x-velocity series\r\n const vx = [];\r\n for (let i = 1; i < mouseEvents.length; i++) {\r\n const dtt = mouseEvents[i].t - mouseEvents[i - 1].t;\r\n vx.push(dtt > 0 ? (mouseEvents[i].x - mouseEvents[i - 1].x) / dtt : 0);\r\n }\r\n\r\n // Rough power estimation in the tremor band using DFT on a windowed segment\r\n const n = Math.min(vx.length, 256);\r\n const segment = vx.slice(0, n);\r\n const tremorPower = _bandPower(segment, sampleHz, HUMAN_TREMOR_HZ_LO, HUMAN_TREMOR_HZ_HI);\r\n const totalPower = _bandPower(segment, sampleHz, 0, sampleHz / 2);\r\n const tremorRatio = totalPower > 0 ? tremorPower / totalPower : 0;\r\n\r\n // Human: some tremor power present (ratio > 0.03)\r\n // AI: tremor band is silent (ratio ≈ 0)\r\n const hasTremor = tremorRatio > 0.03;\r\n\r\n return {\r\n name: 'tremor',\r\n aiScore: hasTremor ? 0 : 0.55,\r\n humanScore: hasTremor ? 0.75 : 0.1,\r\n weight: 0.6,\r\n detail: { tremorRatio: +tremorRatio.toFixed(4), sampleHz: +sampleHz.toFixed(1), hasTremor },\r\n };\r\n}\r\n\r\nfunction _analyseGapDistribution(gaps) {\r\n // Human inter-event gaps follow a heavy-tailed Pareto/lognormal distribution.\r\n // AI agents produce gaps that cluster around fixed latencies (think-time = API call)\r\n // making the distribution multimodal with low overall entropy.\r\n const cv = _cv(gaps);\r\n const skew = _skewness(gaps);\r\n const entropy = _shannonEntropy(gaps, 50);\r\n\r\n // Human: high CV (>0.8), right-skewed (skew > 1), decent entropy (>3 bits)\r\n // AI: moderate CV, low skew, low entropy (gaps cluster at API latency values)\r\n const humanScore = (\r\n (cv > 0.8 ? 0.35 : cv > 0.5 ? 0.15 : 0) +\r\n (skew > 1.0 ? 0.35 : skew > 0.5 ? 0.15 : 0) +\r\n (entropy > 3.5 ? 0.30 : entropy > 2.5 ? 0.15 : 0)\r\n );\r\n\r\n const aiScore = (\r\n (cv < 0.4 ? 0.40 : 0) +\r\n (skew < 0.3 ? 0.30 : 0) +\r\n (entropy < 2.0 ? 0.30 : 0)\r\n );\r\n\r\n return {\r\n name: 'gap_distribution',\r\n aiScore: Math.min(1, aiScore),\r\n humanScore: Math.min(1, humanScore),\r\n weight: Math.min(gaps.length / 60, 1),\r\n detail: { cv: +cv.toFixed(3), skewness: +skew.toFixed(3), entropyBits: +entropy.toFixed(2) },\r\n };\r\n}\r\n\r\n/* ─── Math helpers ───────────────────────────────────────────────────────── */\r\n\r\nfunction _mean(arr) {\r\n return arr.length ? arr.reduce((s, v) => s + v, 0) / arr.length : 0;\r\n}\r\n\r\nfunction _std(arr) {\r\n if (arr.length < 2) return 0;\r\n const m = _mean(arr);\r\n return Math.sqrt(arr.reduce((s, v) => s + (v - m) ** 2, 0) / (arr.length - 1));\r\n}\r\n\r\nfunction _cv(arr) {\r\n const m = _mean(arr);\r\n return m > 0 ? _std(arr) / m : 0;\r\n}\r\n\r\nfunction _skewness(arr) {\r\n const m = _mean(arr);\r\n const s = _std(arr);\r\n if (s === 0) return 0;\r\n const n = arr.length;\r\n return arr.reduce((sum, v) => sum + ((v - m) / s) ** 3, 0) / n;\r\n}\r\n\r\nfunction _shannonEntropy(values, bins) {\r\n if (!values.length) return 0;\r\n const min = Math.min(...values);\r\n const max = Math.max(...values);\r\n if (max === min) return 0;\r\n const width = (max - min) / bins;\r\n const counts = new Array(bins).fill(0);\r\n for (const v of values) {\r\n const b = Math.min(bins - 1, Math.floor((v - min) / width));\r\n counts[b]++;\r\n }\r\n const n = values.length;\r\n return -counts.reduce((s, c) => {\r\n if (c === 0) return s;\r\n const p = c / n;\r\n return s + p * Math.log2(p);\r\n }, 0);\r\n}\r\n\r\nfunction _histogram(values, bins) {\r\n if (!values.length) return { bins: [], min: 0, max: 0, binWidth: 0 };\r\n const min = Math.min(...values);\r\n const max = Math.max(...values) + 1e-9;\r\n const binWidth = (max - min) / bins;\r\n const counts = new Array(bins).fill(0);\r\n for (const v of values) counts[Math.floor((v - min) / binWidth)]++;\r\n return { bins: counts, min, max, binWidth };\r\n}\r\n\r\nfunction _histogramPowerInRange(hist, lo, hi) {\r\n const total = hist.bins.reduce((s, c) => s + c, 0);\r\n if (!total) return 0;\r\n let power = 0;\r\n for (let i = 0; i < hist.bins.length; i++) {\r\n const center = hist.min + (i + 0.5) * hist.binWidth;\r\n if (center >= lo && center <= hi) power += hist.bins[i];\r\n }\r\n return power / total;\r\n}\r\n\r\n// Discrete Fourier Transform power in a frequency band (O(n²) DFT — n ≤ 256)\r\nfunction _bandPower(signal, sampleHz, fLo, fHi) {\r\n const n = signal.length;\r\n let power = 0;\r\n for (let k = 0; k < n / 2; k++) {\r\n const freq = (k * sampleHz) / n;\r\n if (freq < fLo || freq > fHi) continue;\r\n let re = 0, im = 0;\r\n for (let t = 0; t < n; t++) {\r\n const angle = (2 * Math.PI * k * t) / n;\r\n re += signal[t] * Math.cos(angle);\r\n im -= signal[t] * Math.sin(angle);\r\n }\r\n power += (re * re + im * im) / (n * n);\r\n }\r\n return power;\r\n}\r\n\r\n/**\r\n * @typedef {object} LlmFingerprint\r\n * @property {number} aiConf 0–1 AI agent confidence\r\n * @property {number} humanConf 0–1 human confidence\r\n * @property {object[]} checks per-signal breakdown\r\n * @property {string} verdict\r\n * @property {object} dataPoints\r\n */\r\n","/**\r\n * @svrnsec/pulse — Update Notifier\r\n *\r\n * Checks the npm registry for a newer version and prints a styled terminal\r\n * notice when one is available. Non-blocking — the check runs in the\r\n * background and only displays if a newer version is found before the\r\n * process exits.\r\n *\r\n * Zero dependencies. Pure Node.js https module.\r\n * Silent in browser environments and when stdout is not a TTY.\r\n */\r\n\r\nimport { createRequire } from 'module';\r\n\r\n/* ─── version from package.json ─────────────────────────────────────────── */\r\n\r\nlet _currentVersion = '0.0.0';\r\ntry {\r\n const require = createRequire(import.meta.url);\r\n _currentVersion = require('../package.json').version;\r\n} catch {}\r\n\r\nexport const CURRENT_VERSION = _currentVersion;\r\n\r\n/* ─── ANSI helpers ───────────────────────────────────────────────────────── */\r\n\r\nconst isTTY = () =>\r\n typeof process !== 'undefined' &&\r\n process.stdout?.isTTY === true &&\r\n process.env?.NO_COLOR == null &&\r\n process.env?.PULSE_NO_UPDATE == null;\r\n\r\nconst isNode = () => typeof process !== 'undefined' && typeof window === 'undefined';\r\n\r\nconst C = {\r\n reset: '\\x1b[0m',\r\n bold: '\\x1b[1m',\r\n dim: '\\x1b[2m',\r\n // foreground\r\n black: '\\x1b[30m',\r\n red: '\\x1b[31m',\r\n green: '\\x1b[32m',\r\n yellow: '\\x1b[33m',\r\n blue: '\\x1b[34m',\r\n magenta: '\\x1b[35m',\r\n cyan: '\\x1b[36m',\r\n white: '\\x1b[37m',\r\n // bright foreground\r\n bgray: '\\x1b[90m',\r\n bred: '\\x1b[91m',\r\n bgreen: '\\x1b[92m',\r\n byellow: '\\x1b[93m',\r\n bblue: '\\x1b[94m',\r\n bmagenta: '\\x1b[95m',\r\n bcyan: '\\x1b[96m',\r\n bwhite: '\\x1b[97m',\r\n // background\r\n bgBlack: '\\x1b[40m',\r\n bgYellow: '\\x1b[43m',\r\n bgBlue: '\\x1b[44m',\r\n bgCyan: '\\x1b[46m',\r\n};\r\n\r\nconst c = isTTY;\r\nconst ft = (code, s) => c() ? `${code}${s}${C.reset}` : s;\r\n\r\n/* ─── box renderer ───────────────────────────────────────────────────────── */\r\n\r\n/**\r\n * Render a bordered notification box to stderr.\r\n * Uses box-drawing characters and ANSI colors when the terminal supports them.\r\n */\r\nfunction _box(lines, opts = {}) {\r\n const { borderColor = C.yellow, titleColor = C.bwhite } = opts;\r\n const pad = 2;\r\n const width = Math.max(...lines.map(l => _visLen(l))) + pad * 2;\r\n const hr = '─'.repeat(width);\r\n const bc = (s) => c() ? `${borderColor}${s}${C.reset}` : s;\r\n\r\n const out = [\r\n bc(`╭${hr}╮`),\r\n ...lines.map(l => {\r\n const vis = _visLen(l);\r\n const fill = ' '.repeat(Math.max(0, width - vis - pad * 2));\r\n return bc('│') + ' '.repeat(pad) + (c() ? l : _stripAnsi(l)) + fill + ' '.repeat(pad) + bc('│');\r\n }),\r\n bc(`╰${hr}╯`),\r\n ];\r\n\r\n process.stderr.write('\\n' + out.join('\\n') + '\\n\\n');\r\n}\r\n\r\n/* ─── version comparison ─────────────────────────────────────────────────── */\r\n\r\nfunction _semverGt(a, b) {\r\n const [aVer] = a.split('-');\r\n const [bVer] = b.split('-');\r\n const pa = aVer.split('.').map(Number);\r\n const pb = bVer.split('.').map(Number);\r\n for (let i = 0; i < 3; i++) {\r\n const da = pa[i] ?? 0, db = pb[i] ?? 0;\r\n if (da > db) return true;\r\n if (da < db) return false;\r\n }\r\n return false;\r\n}\r\n\r\n/* ─── registry fetch ─────────────────────────────────────────────────────── */\r\n\r\nasync function _fetchLatest(pkg) {\r\n return new Promise((resolve) => {\r\n let resolved = false;\r\n const done = (v) => { if (!resolved) { resolved = true; resolve(v); } };\r\n\r\n const timeout = setTimeout(() => done(null), 3_000);\r\n\r\n try {\r\n const https = _require('https');\r\n const req = https.get(\r\n `https://registry.npmjs.org/${encodeURIComponent(pkg)}/latest`,\r\n { headers: { 'Accept': 'application/json', 'User-Agent': `${pkg}/${_currentVersion}` } },\r\n (res) => {\r\n let body = '';\r\n res.setEncoding('utf8');\r\n res.on('data', d => body += d);\r\n res.on('end', () => {\r\n clearTimeout(timeout);\r\n try { done(JSON.parse(body).version ?? null); } catch { done(null); }\r\n });\r\n }\r\n );\r\n req.on('error', () => { clearTimeout(timeout); done(null); });\r\n req.end();\r\n } catch {\r\n clearTimeout(timeout);\r\n done(null);\r\n }\r\n });\r\n}\r\n\r\n// Lazy require for Node.js https module (avoids bundler issues)\r\nfunction _require(m) {\r\n return createRequire(import.meta.url)(m);\r\n}\r\n\r\n/* ─── checkForUpdate ─────────────────────────────────────────────────────── */\r\n\r\n/**\r\n * Check npm for a newer version of @svrnsec/pulse.\r\n * Call once at process startup — the result is shown before process exit\r\n * (or immediately if already resolved).\r\n *\r\n * @param {object} [opts]\r\n * @param {boolean} [opts.silent=false] suppress output even when update exists\r\n * @param {string} [opts.pkg='@svrnsec/pulse']\r\n * @returns {Promise<{ current: string, latest: string|null, updateAvailable: boolean }>}\r\n */\r\nexport async function checkForUpdate(opts = {}) {\r\n const { silent = false, pkg = '@svrnsec/pulse' } = opts;\r\n\r\n if (!isNode()) return { current: _currentVersion, latest: null, updateAvailable: false };\r\n\r\n const latest = await _fetchLatest(pkg);\r\n const updateAvailable = latest != null && _semverGt(latest, _currentVersion);\r\n\r\n if (updateAvailable && !silent && isTTY()) {\r\n _showUpdateBox(_currentVersion, latest, pkg);\r\n }\r\n\r\n return { current: _currentVersion, latest, updateAvailable };\r\n}\r\n\r\n/* ─── notifyOnExit ───────────────────────────────────────────────────────── */\r\n\r\nlet _notifyRegistered = false;\r\n\r\n/**\r\n * Register a one-time process 'exit' listener that prints the update notice\r\n * after your application's own output has finished. This is the least\r\n * intrusive way to show the notification.\r\n *\r\n * Called automatically by the package initialiser — you do not need to call\r\n * this manually unless you want to control the timing.\r\n *\r\n * @param {object} [opts]\r\n * @param {string} [opts.pkg='@svrnsec/pulse']\r\n */\r\nexport function notifyOnExit(opts = {}) {\r\n if (!isNode() || _notifyRegistered) return;\r\n _notifyRegistered = true;\r\n\r\n const pkg = opts.pkg ?? '@svrnsec/pulse';\r\n let _latest = null;\r\n\r\n // Start the background check immediately\r\n _fetchLatest(pkg).then(v => { _latest = v; }).catch(() => {});\r\n\r\n // Show the box just before the process exits (after all user output)\r\n process.on('exit', () => {\r\n if (_latest && _semverGt(_latest, _currentVersion) && isTTY()) {\r\n _showUpdateBox(_currentVersion, _latest, pkg);\r\n }\r\n });\r\n}\r\n\r\n/* ─── banner ─────────────────────────────────────────────────────────────── */\r\n\r\n/**\r\n * Print the @svrnsec/pulse ASCII banner to stderr.\r\n * Called once at package initialisation in Node.js environments.\r\n */\r\nexport function printBanner() {\r\n if (!isNode() || !isTTY()) return;\r\n\r\n const v = ft(C.bgray, `v${_currentVersion}`);\r\n const tag = ft(C.bmagenta + C.bold, 'SVRN');\r\n const pkg = ft(C.bwhite + C.bold, ':PULSE');\r\n\r\n process.stderr.write(\r\n '\\n' +\r\n ft(C.bgray, ' ┌─────────────────────────────────────┐') + '\\n' +\r\n ft(C.bgray, ' │') + ` ${tag}${pkg} ` + ft(C.bgray, '─ Physical Turing Test │') + '\\n' +\r\n ft(C.bgray, ' │') + ` ${ft(C.bgray, 'Hardware-Biological Symmetry Protocol')} ` + ft(C.bgray, '│') + '\\n' +\r\n ft(C.bgray, ' │') + ` ${ft(C.bcyan, 'npm i @svrnsec/pulse')} ${' '.repeat(16)}${v} ` + ft(C.bgray, '│') + '\\n' +\r\n ft(C.bgray, ' └─────────────────────────────────────┘') + '\\n\\n'\r\n );\r\n}\r\n\r\n/* ─── _showUpdateBox ─────────────────────────────────────────────────────── */\r\n\r\nfunction _showUpdateBox(current, latest, pkg) {\r\n const arrow = ft(C.bgray, '→');\r\n const oldV = ft(C.bred, current);\r\n const newV = ft(C.bgreen + C.bold, latest);\r\n const cmd = ft(C.bcyan + C.bold, `npm i ${pkg}@latest`);\r\n const notice = ft(C.byellow + C.bold, ' UPDATE AVAILABLE ');\r\n\r\n _box([\r\n notice,\r\n '',\r\n ` ${oldV} ${arrow} ${newV}`,\r\n '',\r\n ` Run: ${cmd}`,\r\n '',\r\n ft(C.bgray, ` Changelog: https://github.com/ayronny14-alt/Svrn-Pulse-Security/releases`),\r\n ], { borderColor: C.byellow });\r\n}\r\n\r\n/* ─── ANSI utilities ─────────────────────────────────────────────────────── */\r\n\r\n// Measure visible length of string (strip ANSI escape codes)\r\nfunction _visLen(s) {\r\n return _stripAnsi(s).length;\r\n}\r\n\r\nfunction _stripAnsi(s) {\r\n // eslint-disable-next-line no-control-regex\r\n return s.replace(/\\x1b\\[[0-9;]*m/g, '');\r\n}\r\n","/**\r\n * @svrnsec/pulse — Cross-Metric Heuristic Engine\r\n *\r\n * Instead of checking individual thresholds in isolation, this module looks\r\n * at the *relationships* between metrics. A sophisticated adversary can spoof\r\n * any single number. Spoofing six metrics so they remain mutually consistent\r\n * with physical laws is exponentially harder.\r\n *\r\n * Three core insights drive this engine:\r\n *\r\n * 1. Entropy-Jitter Coherence\r\n * Real silicon gets noisier as it heats up. Under sustained load, the\r\n * Quantization Entropy of the timing distribution grows because thermal\r\n * fluctuations add variance. A VM's hypervisor clock doesn't care about\r\n * guest temperature — its entropy is flat across all load phases.\r\n *\r\n * 2. Hurst-Autocorrelation Coherence\r\n * Genuine Brownian noise has Hurst ≈ 0.5 and near-zero autocorrelation\r\n * at all lags. These two values are physically linked. If they diverge —\r\n * high autocorrelation but Hurst near 0.5, or vice versa — the timings\r\n * were generated, not measured.\r\n *\r\n * 3. CV-Entropy Coherence\r\n * High variance (CV) must come from somewhere. On real hardware, high CV\r\n * means the timing distribution is spread out, which also means high\r\n * entropy. A VM that inflates CV without inflating entropy (e.g. by\r\n * adding synthetic outliers at fixed offsets) produces a coherence gap.\r\n */\r\n\r\nimport { detectQuantizationEntropy } from './jitter.js';\r\n\r\n// ---------------------------------------------------------------------------\r\n// runHeuristicEngine\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * @param {object} p\r\n * @param {import('./jitter.js').JitterAnalysis} p.jitter\r\n * @param {object|null} p.phases - from entropy collector\r\n * @param {object} p.autocorrelations\r\n * @returns {HeuristicReport}\r\n */\r\nexport function runHeuristicEngine({ jitter, phases, autocorrelations }) {\r\n const findings = [];\r\n const bonuses = [];\r\n let penalty = 0; // accumulated penalty [0, 1]\r\n let bonus = 0; // accumulated bonus [0, 1]\r\n let hardOverride = null; // 'vm' | null — bypasses score entirely when set\r\n\r\n const stats = jitter.stats;\r\n if (!stats) return _empty();\r\n\r\n // ── 1. Entropy-Jitter Ratio (phases required) ────────────────────────────\r\n let entropyJitterRatio = null;\r\n let entropyJitterScore = 0.5; // neutral if no phased data\r\n\r\n if (phases) {\r\n entropyJitterRatio = phases.entropyJitterRatio;\r\n\r\n const coldQE = phases.cold?.qe ?? null;\r\n const hotQE = phases.hot?.qe ?? null;\r\n\r\n // ── HARD KILL: Phase trajectory mathematical contradiction ──────────────\r\n //\r\n // EJR is defined as: entropyJitterRatio = hot_QE / cold_QE\r\n //\r\n // Before trusting any EJR value, verify it is internally consistent with\r\n // the QE measurements it purports to summarise. Two forgery vectors exist:\r\n //\r\n // Attack A — EJR field overwritten independently:\r\n // Attacker sets entropyJitterRatio = 1.15 to claim thermal growth,\r\n // but leaves cold_QE = 3.50, hot_QE = 3.00 unchanged.\r\n // Computed EJR = 3.00 / 3.50 = 0.857.\r\n // Discrepancy 1.15 − 0.857 = 0.293 >> 0.005 tolerance → HARD KILL.\r\n //\r\n // Attack B — QE values also faked but left inconsistent:\r\n // Attacker overwrites both QE fields carelessly: cold_QE = 3.5,\r\n // hot_QE = 3.0, but EJR = 1.15 is still written.\r\n // cold_QE ≥ hot_QE with EJR ≥ 1.08 is a mathematical impossibility —\r\n // if hot ≤ cold then hot/cold ≤ 1.0, which can never be ≥ 1.08.\r\n //\r\n // Tolerance of 0.005 accounts for floating-point rounding in the entropy\r\n // collector (detectQuantizationEntropy uses discrete histogram bins).\r\n //\r\n // When HARD KILL fires:\r\n // • hardOverride = 'vm' — fingerprint.js short-circuits isSynthetic\r\n // • entropyJitterScore = 0.0 — no EJR contribution to stage-2 bonus\r\n // • penalty += 1.0 — overwhelms the physical floor cap\r\n // • No further EJR evaluation runs (the data cannot be trusted)\r\n // • The physical floor protection is explicitly bypassed (see aggregate)\r\n\r\n if (coldQE !== null && hotQE !== null) {\r\n const computedEJR = coldQE > 0 ? hotQE / coldQE : null;\r\n const fieldTampered = computedEJR !== null &&\r\n Math.abs(entropyJitterRatio - computedEJR) > 0.005;\r\n const qeContradicts = entropyJitterRatio >= 1.08 && coldQE >= hotQE;\r\n\r\n if (fieldTampered || qeContradicts) {\r\n hardOverride = 'vm';\r\n entropyJitterScore = 0.0;\r\n findings.push({\r\n id: 'EJR_PHASE_HARD_KILL',\r\n label: fieldTampered\r\n ? 'HARD KILL: stored EJR is inconsistent with cold/hot QE values — phase data tampered'\r\n : 'HARD KILL: EJR ≥ 1.08 claims entropy growth but cold_QE ≥ hot_QE — physically impossible',\r\n detail: `ejr_stored=${entropyJitterRatio.toFixed(4)} ` +\r\n `ejr_computed=${computedEJR?.toFixed(4) ?? 'n/a'} ` +\r\n `cold_QE=${coldQE.toFixed(4)} hot_QE=${hotQE.toFixed(4)} ` +\r\n `delta=${computedEJR != null ? Math.abs(entropyJitterRatio - computedEJR).toFixed(4) : 'n/a'}`,\r\n severity: 'critical',\r\n penalty: 1.0,\r\n });\r\n penalty += 1.0;\r\n\r\n } else {\r\n // QE values confirmed consistent — proceed with normal EJR evaluation.\r\n _evaluateEJR(entropyJitterRatio, coldQE, hotQE, findings, bonuses,\r\n (p) => { penalty += p; }, (b) => { bonus += b; },\r\n (s) => { entropyJitterScore = s; });\r\n }\r\n\r\n } else {\r\n // QE values unavailable — evaluate EJR ratio in isolation.\r\n _evaluateEJR(entropyJitterRatio, null, null, findings, bonuses,\r\n (p) => { penalty += p; }, (b) => { bonus += b; },\r\n (s) => { entropyJitterScore = s; });\r\n }\r\n\r\n // Phase mean drift: real CPU heats up → iterations get slower.\r\n // Only apply if hard kill wasn't already triggered.\r\n if (!hardOverride) {\r\n const coldToHotDrift = (phases.hot?.mean ?? 0) - (phases.cold?.mean ?? 0);\r\n if (coldToHotDrift > 0.05) {\r\n bonuses.push({\r\n id: 'THERMAL_DRIFT_CONFIRMED',\r\n label: 'CPU mean timing increased from cold to hot phase (thermal drift)',\r\n detail: `cold=${phases.cold.mean.toFixed(3)}ms hot=${phases.hot.mean.toFixed(3)}ms Δ=${coldToHotDrift.toFixed(3)}ms`,\r\n value: 0.08,\r\n });\r\n bonus += 0.08;\r\n }\r\n }\r\n }\r\n\r\n // ── 2. Hurst-Autocorrelation Coherence ───────────────────────────────────\r\n const h = jitter.hurstExponent ?? 0.5;\r\n const ac1 = Math.abs(autocorrelations?.lag1 ?? 0);\r\n const ac5 = Math.abs(autocorrelations?.lag5 ?? 0);\r\n const ac50 = Math.abs(autocorrelations?.lag50 ?? 0);\r\n\r\n // Physical law: Brownian noise (H≈0.5) must have low autocorrelation.\r\n // Divergence between these two means the data wasn't generated by physics.\r\n const hurstExpectedAC = Math.abs(2 * h - 1); // theoretical max |autocorr| for given H\r\n const actualAC = (ac1 + ac5) / 2;\r\n const acHurstDivergence = Math.abs(actualAC - hurstExpectedAC);\r\n\r\n if (acHurstDivergence > 0.35) {\r\n findings.push({\r\n id: 'HURST_AUTOCORR_INCOHERENT',\r\n label: 'Hurst exponent and autocorrelation are physically inconsistent',\r\n detail: `H=${h.toFixed(3)} expected_AC≈${hurstExpectedAC.toFixed(3)} actual_AC=${actualAC.toFixed(3)} divergence=${acHurstDivergence.toFixed(3)}`,\r\n severity: 'high',\r\n penalty: 0.12,\r\n });\r\n penalty += 0.12;\r\n } else if (h > 0.45 && h < 0.55 && ac1 < 0.15) {\r\n // Ideal Brownian + low autocorr — physically coherent\r\n bonuses.push({\r\n id: 'BROWNIAN_COHERENCE_CONFIRMED',\r\n label: 'Hurst ≈ 0.5 and autocorrelation near zero — genuine Brownian noise',\r\n detail: `H=${h.toFixed(3)} lag1_AC=${ac1.toFixed(3)}`,\r\n value: 0.10,\r\n });\r\n bonus += 0.10;\r\n }\r\n\r\n // ── 3. CV-Entropy Coherence ───────────────────────────────────────────────\r\n // High CV should correlate with high QE. If CV is high but QE is low,\r\n // the variance was added artificially (fixed-offset outliers, synthetic spikes).\r\n const cv = stats.cv;\r\n const qe = jitter.quantizationEntropy;\r\n\r\n // Expected QE given CV, assuming roughly normal distribution\r\n // Normal dist with σ/μ = CV: entropy ≈ log2(σ * sqrt(2πe)) + log2(n/binWidth)\r\n // We use a simplified linear proxy calibrated against real benchmarks.\r\n const expectedQE = Math.max(0, 1.5 + cv * 16); // empirical: CV=0.15 → QE≈3.9\r\n const qeDivergence = expectedQE - qe; // positive = QE lower than expected\r\n\r\n if (qeDivergence > 1.8 && cv > 0.05) {\r\n // High variance but low entropy: synthetic outliers at fixed offsets\r\n findings.push({\r\n id: 'CV_ENTROPY_INCOHERENT',\r\n label: 'High CV but low entropy — variance appears synthetic (fixed-offset outliers)',\r\n detail: `CV=${cv.toFixed(4)} QE=${qe.toFixed(3)} bits expected_QE≈${expectedQE.toFixed(3)} gap=${qeDivergence.toFixed(3)}`,\r\n severity: 'high',\r\n penalty: 0.10,\r\n });\r\n penalty += 0.10;\r\n } else if (qeDivergence < 0.5 && cv > 0.08) {\r\n // CV and QE are coherent — timings come from a real distribution\r\n bonuses.push({\r\n id: 'CV_ENTROPY_COHERENT',\r\n label: 'Variance and entropy are physically coherent',\r\n detail: `CV=${cv.toFixed(4)} QE=${qe.toFixed(3)} expected≈${expectedQE.toFixed(3)}`,\r\n value: 0.06,\r\n });\r\n bonus += 0.06;\r\n }\r\n\r\n // ── 4. Steal-time periodicity (the \"Picket Fence\" detector) ─────────────\r\n // VM steal-time bursts create a periodic signal in the autocorrelation.\r\n // If lag-50 autocorrelation is significantly higher than lag-5,\r\n // the scheduler quantum is approximately 50× the mean iteration time.\r\n const picketFence = _detectPicketFence(autocorrelations);\r\n if (picketFence.detected) {\r\n findings.push({\r\n id: 'PICKET_FENCE_DETECTED',\r\n label: `\"Picket Fence\" steal-time rhythm detected at lag ${picketFence.dominantLag}`,\r\n detail: picketFence.detail,\r\n severity: 'high',\r\n penalty: 0.08,\r\n });\r\n penalty += 0.08;\r\n }\r\n\r\n // ── 5. Skewness-Kurtosis coherence ───────────────────────────────────────\r\n // Real hardware timing is right-skewed (occasional slow outliers from OS preemption).\r\n // VMs that add synthetic outliers at fixed offsets produce wrong skew/kurtosis.\r\n const skew = stats.skewness ?? 0;\r\n const kurt = stats.kurtosis ?? 0;\r\n\r\n if (skew > 0.3 && kurt > 0) {\r\n // Right-skewed, leptokurtic — consistent with OS preemption on real hardware\r\n bonuses.push({\r\n id: 'NATURAL_SKEW_CONFIRMED',\r\n label: 'Right-skewed distribution with positive kurtosis — OS preemption pattern',\r\n detail: `skew=${skew.toFixed(3)} kurtosis=${kurt.toFixed(3)}`,\r\n value: 0.06,\r\n });\r\n bonus += 0.06;\r\n } else if (skew < 0 && Math.abs(kurt) > 1) {\r\n // Negative skew with high kurtosis: inconsistent with physical timing noise\r\n findings.push({\r\n id: 'SKEW_KURTOSIS_ANOMALY',\r\n label: 'Left-skewed distribution — inconsistent with natural hardware timing',\r\n detail: `skew=${skew.toFixed(3)} kurtosis=${kurt.toFixed(3)}`,\r\n severity: 'medium',\r\n penalty: 0.06,\r\n });\r\n penalty += 0.06;\r\n }\r\n\r\n // ── Physical floor protection (anti-compounding) ──────────────────────────\r\n // When the three PRIMARY timing metrics are clearly consistent with real\r\n // silicon, cap the penalty so that marginal secondary signals (weak Picket\r\n // Fence, mild EJR, slight skew anomaly) cannot compound into a rejection.\r\n //\r\n // Why: a modern i7 laptop running heavy browser extensions may show:\r\n // EJR = 1.01 → -0.10 penalty (just under the 1.02 threshold)\r\n // lag50 = 0.31 → picket fence → -0.08 penalty (background process rhythm)\r\n // slight negative skew → -0.06 penalty\r\n // total: -0.24, drops score from 0.73 → 0.49 → wrongly flagged as synthetic\r\n //\r\n // Solution: if ≥ 2 of the 3 primary metrics are unambiguously physical,\r\n // treat the device as \"probably physical with some noise\" and limit the\r\n // penalty to 0.22 (enough to lower confidence but not enough to reject).\r\n const clearQE = jitter.quantizationEntropy > 3.2;\r\n const clearCV = stats.cv >= 0.05 && stats.cv <= 0.30;\r\n const clearLag1 = Math.abs(autocorrelations?.lag1 ?? 1) < 0.22;\r\n const clearPhysicalCount = [clearQE, clearCV, clearLag1].filter(Boolean).length;\r\n\r\n // Also check: if at least one metric is a HARD VM indicator (QE < 2.0 or\r\n // lag1 > 0.65), override the floor — the floor is for borderline noise, not\r\n // for devices that are clearly VMs on at least one axis.\r\n const hardVmSignal =\r\n jitter.quantizationEntropy < 2.0 ||\r\n Math.abs(autocorrelations?.lag1 ?? 0) > 0.65;\r\n\r\n const penaltyCap = (!hardVmSignal && clearPhysicalCount >= 2)\r\n ? 0.22 // physical floor: cap compounding for clearly physical devices\r\n : 0.60; // default: full penalty range for ambiguous or VM-like signals\r\n\r\n // HARD KILL overrides the physical floor protection entirely.\r\n // The floor was designed to protect legitimate hardware with multiple\r\n // marginal-but-honest signals — it must never shelter a forged proof.\r\n const totalPenalty = hardOverride === 'vm'\r\n ? Math.min(1.0, penalty) // hard kill: uncapped, overwhelms all bonuses\r\n : Math.min(penaltyCap, penalty); // normal: apply floor protection\r\n\r\n // When a hard kill is active, strip all bonuses — they were earned on\r\n // data that has been proved untrustworthy.\r\n const totalBonus = hardOverride === 'vm' ? 0 : Math.min(0.35, bonus);\r\n\r\n return {\r\n penalty: totalPenalty,\r\n bonus: totalBonus,\r\n netAdjustment: totalBonus - totalPenalty,\r\n findings,\r\n bonuses: hardOverride === 'vm' ? [] : bonuses,\r\n entropyJitterRatio,\r\n entropyJitterScore,\r\n picketFence,\r\n hardOverride,\r\n coherenceFlags: findings.map(f => f.id),\r\n };\r\n}\r\n\r\n/**\r\n * @typedef {object} HeuristicReport\r\n * @property {number} penalty - total score penalty [0, 1.0]\r\n * @property {number} bonus - total score bonus [0, 0.35]\r\n * @property {number} netAdjustment - bonus - penalty\r\n * @property {object[]} findings - detected anomalies\r\n * @property {object[]} bonuses - confirmed physical properties\r\n * @property {number|null} entropyJitterRatio\r\n * @property {'vm'|null} hardOverride - set when a mathematical impossibility is detected\r\n * @property {object} picketFence\r\n * @property {string[]} coherenceFlags\r\n */\r\n\r\n// ---------------------------------------------------------------------------\r\n// EJR evaluation helper (extracted so it can run with or without QE values)\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Applies the normal EJR classification logic (called only after the hard-kill\r\n * check passes, meaning the EJR value has been verified as consistent).\r\n */\r\nfunction _evaluateEJR(ejr, coldQE, hotQE, findings, bonuses, addPenalty, addBonus, setScore) {\r\n const qeDetail = coldQE != null\r\n ? `cold_QE=${coldQE.toFixed(3)} hot_QE=${hotQE.toFixed(3)}`\r\n : '';\r\n\r\n if (ejr >= 1.08) {\r\n setScore(1.0);\r\n bonuses.push({\r\n id: 'ENTROPY_GROWS_WITH_LOAD',\r\n label: 'Entropy grew under load — thermal feedback confirmed',\r\n detail: `ratio=${ejr.toFixed(3)} ${qeDetail}`,\r\n value: 0.12,\r\n });\r\n addBonus(0.12);\r\n\r\n } else if (ejr >= 1.02) {\r\n setScore(0.7);\r\n findings.push({\r\n id: 'ENTROPY_MILD_GROWTH',\r\n label: 'Weak entropy growth under load',\r\n detail: `ratio=${ejr.toFixed(3)} ${qeDetail}`,\r\n severity: 'info',\r\n penalty: 0,\r\n });\r\n\r\n } else if (ejr > 0.95) {\r\n // Flat entropy — hypervisor clock unresponsive to guest load\r\n setScore(0.2);\r\n findings.push({\r\n id: 'ENTROPY_FLAT_UNDER_LOAD',\r\n label: 'Entropy did not grow under load — hypervisor clock suspected',\r\n detail: `ratio=${ejr.toFixed(3)} (expected ≥ 1.08 for real hardware) ${qeDetail}`,\r\n severity: 'high',\r\n penalty: 0.10,\r\n });\r\n addPenalty(0.10);\r\n\r\n } else {\r\n // Entropy DECREASED — hypervisor clock rounding became more aggressive\r\n setScore(0.0);\r\n findings.push({\r\n id: 'ENTROPY_DECREASES_UNDER_LOAD',\r\n label: 'Entropy shrank under load — hypervisor clock-rounding confirmed',\r\n detail: `ratio=${ejr.toFixed(3)} (clock rounding more aggressive at high load) ${qeDetail}`,\r\n severity: 'critical',\r\n penalty: 0.18,\r\n });\r\n addPenalty(0.18);\r\n }\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Picket Fence detector\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Detects periodic steal-time bursts by finding the lag with the highest\r\n * autocorrelation beyond lag-5. A strong periodic peak indicates the\r\n * hypervisor is scheduling the guest on a fixed quantum.\r\n *\r\n * Named \"Picket Fence\" because of how the timing histogram looks: dense\r\n * clusters at fixed intervals with empty space between them — like fence posts.\r\n */\r\nfunction _detectPicketFence(autocorrelations) {\r\n const longLags = [10, 25, 50].map(l => ({\r\n lag: l,\r\n ac: Math.abs(autocorrelations?.[`lag${l}`] ?? 0),\r\n }));\r\n\r\n const shortBaseline = (Math.abs(autocorrelations?.lag5 ?? 0) +\r\n Math.abs(autocorrelations?.lag3 ?? 0)) / 2;\r\n\r\n const peak = longLags.reduce((best, cur) =>\r\n cur.ac > best.ac ? cur : best, { lag: 0, ac: 0 });\r\n\r\n // \"Picket fence\" condition: a long-lag autocorr significantly exceeds baseline\r\n if (peak.ac > 0.30 && peak.ac > shortBaseline + 0.20) {\r\n return {\r\n detected: true,\r\n dominantLag: peak.lag,\r\n peakAC: peak.ac,\r\n baseline: shortBaseline,\r\n detail: `lag${peak.lag}_AC=${peak.ac.toFixed(3)} baseline_AC=${shortBaseline.toFixed(3)} ` +\r\n `estimated_quantum≈${(peak.lag * 5).toFixed(0)}ms (at 5ms/iter)`,\r\n };\r\n }\r\n\r\n return { detected: false, dominantLag: null, peakAC: peak.ac, baseline: shortBaseline, detail: '' };\r\n}\r\n\r\nfunction _empty() {\r\n return {\r\n penalty: 0, bonus: 0, netAdjustment: 0,\r\n findings: [], bonuses: [],\r\n entropyJitterRatio: null, entropyJitterScore: 0.5,\r\n hardOverride: null,\r\n picketFence: { detected: false },\r\n coherenceFlags: [],\r\n };\r\n}\r\n","/**\r\n * @svrnsec/pulse — Zero-Latency Second-Stage Coherence Analysis\r\n *\r\n * Runs entirely on data already collected by the entropy probe, bio\r\n * collector, canvas fingerprinter, and audio analyser.\r\n * Adds approximately 1–3 ms of CPU time. Zero WASM, zero network.\r\n *\r\n * Architecture:\r\n * Stage 1 — classifyJitter() → rawScore [0, 1]\r\n * Stage 2 — runHeuristicEngine() → netAdjustment (physics coherence)\r\n * Stage 3 — runCoherenceAnalysis() → THIS MODULE\r\n * ↳ small score refinement [-0.15, +0.18]\r\n * ↳ dynamic threshold [0.55, 0.67]\r\n * ↳ hard override 'vm' | null\r\n *\r\n * Why a third stage?\r\n * Stage 1 checks individual metrics in isolation.\r\n * Stage 2 checks pairwise relationships between metrics.\r\n * Stage 3 checks STRUCTURAL properties of the entire time-series and\r\n * signal evolution that require the full dataset to evaluate — and that\r\n * a sophisticated attacker cannot spoof without also spoofing every\r\n * other correlated signal simultaneously.\r\n *\r\n * The six checks cover orthogonal signal dimensions so they are hard to\r\n * spoof together even if one is individually defeated:\r\n *\r\n * 1. Timing distinctness — frequency domain (quantization density)\r\n * 2. AC decay shape — temporal domain (Brownian vs harmonic)\r\n * 3. Chunk CV stability — stationarity axis (thermal non-stationarity)\r\n * 4. Level-dependent noise — noise model axis (multiplicative vs additive)\r\n * 5. Batch convergence — measurement stability (adaptive mode)\r\n * 6. Phase trajectory — EJR monotonicity (thermal sequence integrity)\r\n *\r\n * Dynamic threshold:\r\n * The evidence weight reflects how much data was actually collected.\r\n * An early-exit proof with 50 iterations and no bio activity has far less\r\n * support than a 200-iteration proof with bio, audio, and phased data.\r\n * The threshold rises automatically as evidence decreases:\r\n * Full evidence → threshold 0.55 (standard)\r\n * Minimal proof → threshold 0.67 (conservative gate)\r\n * This prevents low-evidence proofs from passing the same bar as full ones.\r\n */\r\n\r\n// ---------------------------------------------------------------------------\r\n// runCoherenceAnalysis\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * @param {object} p\r\n * @param {number[]} p.timings — raw timing array (already collected)\r\n * @param {object} p.jitter — JitterAnalysis from classifyJitter()\r\n * @param {object|null} p.phases — phased entropy result (optional)\r\n * @param {object[]|null} p.batches — adaptive batch snapshots (optional)\r\n * @param {object} p.bio — bio snapshot\r\n * @param {object} p.canvas — canvas fingerprint\r\n * @param {object} p.audio — audio jitter result\r\n * @returns {CoherenceReport}\r\n */\r\nexport function runCoherenceAnalysis({ timings, jitter, phases, batches, bio, canvas, audio }) {\r\n if (!timings || timings.length < 10) {\r\n // Insufficient data — return a conservative threshold and no adjustments.\r\n return _empty(0.64);\r\n }\r\n\r\n const checks = []; // anomalies found (each may carry a penalty)\r\n const bonuses = []; // physical properties confirmed (each carries a bonus)\r\n let penalty = 0;\r\n let bonus = 0;\r\n let hardOverride = null; // 'vm' | null\r\n\r\n const n = timings.length;\r\n const ac = jitter.autocorrelations ?? {};\r\n\r\n // ── Check 1: Timing Distinctness Ratio ──────────────────────────────────────\r\n // VM quantized timers repeat the same integer-millisecond values.\r\n // Real silicon at sub-ms resolution produces mostly unique values.\r\n //\r\n // Bin width: 0.2 ms (matches detectQuantizationEntropy for consistency).\r\n // Normalized by sample count → iteration-count-independent.\r\n //\r\n // distinctRatio > 0.65 → sub-ms resolution confirmed → physical bonus\r\n // distinctRatio < 0.30 → heavy quantization → VM penalty\r\n // distinctRatio < 0.45 at n ≥ 100 → mild VM penalty\r\n {\r\n const bins = new Set(timings.map(t => Math.round(t / 0.2)));\r\n const distinctRatio = bins.size / n;\r\n\r\n if (n >= 50) {\r\n if (distinctRatio > 0.65) {\r\n bonuses.push({\r\n id: 'HIGH_TIMING_DISTINCTNESS',\r\n label: 'Timer produces mostly unique values — sub-ms resolution confirmed',\r\n detail: `ratio=${distinctRatio.toFixed(3)} (${bins.size}/${n} distinct 0.2ms bins)`,\r\n value: 0.06,\r\n });\r\n bonus += 0.06;\r\n\r\n } else if (distinctRatio < 0.30) {\r\n // Severely quantized — VM with integer-ms timer emulation\r\n checks.push({\r\n id: 'LOW_TIMING_DISTINCTNESS',\r\n label: 'Heavy timer quantization — integer-ms VM timer suspected',\r\n detail: `ratio=${distinctRatio.toFixed(3)} (only ${bins.size}/${n} distinct 0.2ms bins)`,\r\n severity: 'high',\r\n penalty: 0.12,\r\n });\r\n penalty += 0.12;\r\n\r\n } else if (distinctRatio < 0.45 && n >= 100) {\r\n // At 100+ iterations we expect more spread; below 0.45 is suspicious\r\n checks.push({\r\n id: 'BORDERLINE_TIMING_DISTINCTNESS',\r\n label: 'Below-expected timer resolution — coarse-grained timer suspected',\r\n detail: `ratio=${distinctRatio.toFixed(3)} at n=${n}`,\r\n severity: 'medium',\r\n penalty: 0.05,\r\n });\r\n penalty += 0.05;\r\n }\r\n }\r\n }\r\n\r\n // ── Check 2: Autocorrelation Decay Shape ────────────────────────────────────\r\n // Genuine Brownian noise decays monotonically: lag1 > lag2 > lag5 > lag10 > …\r\n // VM scheduler rhythms create harmonic revivals: lag25 or lag50 elevated\r\n // above lag10 because steal-time bursts recur at the scheduler quantum period.\r\n //\r\n // This is structurally orthogonal to the Picket Fence detector (stage 2),\r\n // which checks absolute magnitude — this checks the SHAPE of the decay curve.\r\n {\r\n const l1 = Math.abs(ac.lag1 ?? 0);\r\n const l2 = Math.abs(ac.lag2 ?? 0);\r\n const l3 = Math.abs(ac.lag3 ?? 0);\r\n const l5 = Math.abs(ac.lag5 ?? 0);\r\n const l10 = Math.abs(ac.lag10 ?? 0);\r\n const l25 = Math.abs(ac.lag25 ?? 0);\r\n const l50 = Math.abs(ac.lag50 ?? 0);\r\n\r\n // Strict Brownian decay: each successive lag is no higher than the previous\r\n // (+0.03 tolerance for estimation noise)\r\n const isBrownianDecay =\r\n l1 < 0.20 &&\r\n l2 <= l1 + 0.03 &&\r\n l5 <= l2 + 0.03 &&\r\n l10 <= l5 + 0.03 &&\r\n l25 <= l10 + 0.05 &&\r\n l50 <= l10 + 0.05;\r\n\r\n // Harmonic revival: a long lag significantly exceeds medium lags\r\n // (scheduler quantum footprint)\r\n const revival25 = l25 > l5 + 0.12 && l25 > 0.18;\r\n const revival50 = l50 > l5 + 0.12 && l50 > 0.18;\r\n\r\n if (isBrownianDecay && l1 < 0.15) {\r\n bonuses.push({\r\n id: 'BROWNIAN_DECAY_SHAPE',\r\n label: 'AC decays monotonically at all measured lags — genuine Brownian noise structure',\r\n detail: `lag1=${l1.toFixed(3)} lag3=${l3.toFixed(3)} lag5=${l5.toFixed(3)} lag10=${l10.toFixed(3)} lag50=${l50.toFixed(3)}`,\r\n value: 0.09,\r\n });\r\n bonus += 0.09;\r\n }\r\n\r\n if (revival25 || revival50) {\r\n const peakLag = revival25 ? 25 : 50;\r\n const peakVal = revival25 ? l25 : l50;\r\n checks.push({\r\n id: 'HARMONIC_AUTOCORR_REVIVAL',\r\n label: `Long-lag AC revival at lag ${peakLag} — VM scheduler harmonic footprint`,\r\n detail: `lag5=${l5.toFixed(3)} lag${peakLag}=${peakVal.toFixed(3)} Δ=${(peakVal - l5).toFixed(3)}`,\r\n severity: 'high',\r\n penalty: 0.10,\r\n });\r\n penalty += 0.10;\r\n }\r\n }\r\n\r\n // ── Check 3: Chunk CV Stability (temporal stationarity test) ─────────────────\r\n // Split the timing series into 4 equal windows and compute CV per window.\r\n // Real hardware: CV varies across chunks — CPU temperature changes, workload\r\n // varies, OS scheduling fluctuates — making the process non-stationary.\r\n // VM hypervisor: CV is nearly identical in every chunk because the hypervisor's\r\n // scheduling behaviour is constant — a stationary process.\r\n //\r\n // Metric: CV of the 4 chunk CVs (CV-of-CVs).\r\n // > 0.15 → non-stationary noise → physical bonus\r\n // < 0.06 → suspiciously constant → VM penalty\r\n if (n >= 40) {\r\n const chunkSize = Math.floor(n / 4);\r\n const chunkCVs = [];\r\n\r\n for (let c = 0; c < 4; c++) {\r\n const chunk = timings.slice(c * chunkSize, (c + 1) * chunkSize);\r\n const m = chunk.reduce((a, b) => a + b, 0) / chunk.length;\r\n const s = Math.sqrt(chunk.reduce((acc, v) => acc + (v - m) ** 2, 0) / chunk.length);\r\n if (m > 0) chunkCVs.push(s / m);\r\n }\r\n\r\n if (chunkCVs.length === 4) {\r\n const cvMean = chunkCVs.reduce((a, b) => a + b, 0) / 4;\r\n const cvStd = Math.sqrt(chunkCVs.reduce((s, v) => s + (v - cvMean) ** 2, 0) / 4);\r\n const cvOfCVs = cvMean > 1e-9 ? cvStd / cvMean : 0;\r\n\r\n if (cvOfCVs > 0.15) {\r\n bonuses.push({\r\n id: 'TEMPORAL_NON_STATIONARITY',\r\n label: 'Noise level varies across time windows — thermal non-stationarity confirmed',\r\n detail: `CV-of-CVs=${cvOfCVs.toFixed(3)} windows=[${chunkCVs.map(v => v.toFixed(3)).join(', ')}]`,\r\n value: 0.07,\r\n });\r\n bonus += 0.07;\r\n\r\n } else if (cvOfCVs < 0.06 && cvMean > 0.01) {\r\n checks.push({\r\n id: 'STATIONARY_NOISE_PROCESS',\r\n label: 'Noise level constant across all time windows — hypervisor stationarity suspected',\r\n detail: `CV-of-CVs=${cvOfCVs.toFixed(3)} windows=[${chunkCVs.map(v => v.toFixed(3)).join(', ')}]`,\r\n severity: 'high',\r\n penalty: 0.09,\r\n });\r\n penalty += 0.09;\r\n }\r\n }\r\n }\r\n\r\n // ── Check 4: Level-Dependent Volatility (noise model test) ──────────────────\r\n // Thermal noise is multiplicative: the physical process that adds jitter\r\n // (electron thermal motion, gate capacitance variation) scales with the\r\n // operating conditions that also drive longer execution times.\r\n // Consequence: larger timing values tend to have more incremental variance.\r\n // This produces a positive Pearson correlation between:\r\n // — timing[i] (level — how long that iteration took)\r\n // — |timing[i+1]-timing[i]| (volatility — how much it changed)\r\n //\r\n // VM hypervisor noise is additive: a constant scheduling jitter is applied\r\n // regardless of the iteration's timing level → near-zero correlation.\r\n //\r\n // r > 0.15 → multiplicative noise → physical bonus\r\n // r < 0.04 at n ≥ 80 → additive noise → VM penalty\r\n if (n >= 30) {\r\n const levels = timings.slice(0, n - 1);\r\n const deltas = timings.slice(1).map((v, i) => Math.abs(v - timings[i]));\r\n const lMean = levels.reduce((a, b) => a + b, 0) / levels.length;\r\n const dMean = deltas.reduce((a, b) => a + b, 0) / deltas.length;\r\n\r\n let cov = 0, lVar = 0, dVar = 0;\r\n for (let i = 0; i < levels.length; i++) {\r\n const ld = levels[i] - lMean;\r\n const dd = deltas[i] - dMean;\r\n cov += ld * dd;\r\n lVar += ld * ld;\r\n dVar += dd * dd;\r\n }\r\n const denom = Math.sqrt(lVar * dVar);\r\n const levelVolCorr = denom < 1e-14 ? 0 : cov / denom;\r\n\r\n if (levelVolCorr > 0.15) {\r\n bonuses.push({\r\n id: 'MULTIPLICATIVE_NOISE_MODEL',\r\n label: 'Timing variance scales with level — multiplicative thermal noise confirmed',\r\n detail: `level-volatility r=${levelVolCorr.toFixed(3)} (expected >0.15 for real silicon)`,\r\n value: 0.07,\r\n });\r\n bonus += 0.07;\r\n\r\n } else if (levelVolCorr < 0.04 && n >= 80) {\r\n // Enough samples to trust the estimate; near-zero = additive hypervisor noise\r\n checks.push({\r\n id: 'ADDITIVE_NOISE_MODEL',\r\n label: 'Timing variance independent of level — additive hypervisor noise suspected',\r\n detail: `level-volatility r=${levelVolCorr.toFixed(3)} (expected >0.15 for real silicon)`,\r\n severity: 'medium',\r\n penalty: 0.07,\r\n });\r\n penalty += 0.07;\r\n }\r\n }\r\n\r\n // ── Check 5: Batch Convergence Variance (adaptive mode only) ─────────────────\r\n // In adaptive mode each batch of 25 iterations produces a vmConf estimate.\r\n // Real hardware: these estimates wander batch-to-batch because the underlying\r\n // physical source is genuinely stochastic.\r\n // VM hypervisor: estimates lock in immediately — deterministic scheduling means\r\n // each batch produces essentially the same picture.\r\n //\r\n // Most diagnostic in the ambiguous zone (vmConf 0.25–0.70) where stability\r\n // is suspicious. A clearly obvious VM (vmConf 0.90 every batch) is expected\r\n // to be stable. A borderline device (vmConf 0.45 across 6 identical batches)\r\n // is exhibiting VM-like stability despite claiming ambiguity.\r\n //\r\n // Uses only batches collected after iteration 75 to avoid early-sample noise.\r\n if (batches && batches.length >= 4) {\r\n const stableBatches = batches.filter(b => b.iterations >= 75);\r\n\r\n if (stableBatches.length >= 3) {\r\n const vmConfs = stableBatches.map(b => b.vmConf);\r\n const hwConfs = stableBatches.map(b => b.hwConf);\r\n const vmMean = vmConfs.reduce((a, b) => a + b, 0) / vmConfs.length;\r\n const hwMean = hwConfs.reduce((a, b) => a + b, 0) / hwConfs.length;\r\n const vmStd = Math.sqrt(\r\n vmConfs.reduce((s, v) => s + (v - vmMean) ** 2, 0) / vmConfs.length\r\n );\r\n\r\n // Only meaningful in the ambiguous zone\r\n const isAmbiguous = vmMean > 0.25 && vmMean < 0.70 && hwMean < 0.55;\r\n\r\n if (isAmbiguous) {\r\n if (vmStd > 0.06) {\r\n bonuses.push({\r\n id: 'SIGNAL_FLUCTUATES_STOCHASTICALLY',\r\n label: 'Batch-by-batch signal variance confirms genuine stochastic noise source',\r\n detail: `vmConf σ=${vmStd.toFixed(3)} across ${stableBatches.length} stable batches (μ=${vmMean.toFixed(3)})`,\r\n value: 0.05,\r\n });\r\n bonus += 0.05;\r\n\r\n } else if (vmStd < 0.025 && stableBatches.length >= 4) {\r\n checks.push({\r\n id: 'SIGNAL_DETERMINISTICALLY_STABLE',\r\n label: 'Signal locked-in immediately — deterministic hypervisor suspected',\r\n detail: `vmConf σ=${vmStd.toFixed(3)} across ${stableBatches.length} stable batches (μ=${vmMean.toFixed(3)})`,\r\n severity: 'medium',\r\n penalty: 0.06,\r\n });\r\n penalty += 0.06;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // ── Check 6: Phase Entropy Trajectory ────────────────────────────────────────\r\n // The EJR (hot_QE / cold_QE) captures the endpoint ratio, but misses the\r\n // intermediate trajectory. We additionally verify monotonic growth:\r\n // cold_QE < load_QE < hot_QE\r\n //\r\n // If all three phases are available, monotonic growth is a strong bonus.\r\n // Non-monotonic trajectory (entropy dropped then recovered) is suspicious.\r\n //\r\n // HARD OVERRIDE: if EJR ≥ 1.08 (claims entropy grew from cold to hot)\r\n // but cold_QE ≥ hot_QE (entropy provably didn't grow), the proof is\r\n // mathematically self-contradictory → forgery attempt.\r\n if (phases) {\r\n const coldQE = phases.cold?.qe ?? null;\r\n const loadQE = phases.load?.qe ?? null;\r\n const hotQE = phases.hot?.qe ?? null;\r\n const ejr = phases.entropyJitterRatio ?? null;\r\n\r\n // Mathematical contradiction: EJR = hot_QE / cold_QE, so EJR ≥ 1.08\r\n // implies hot_QE ≥ 1.08 × cold_QE > cold_QE. Violation = tampered proof.\r\n if (ejr !== null && ejr >= 1.08 && coldQE !== null && hotQE !== null) {\r\n if (coldQE >= hotQE) {\r\n hardOverride = 'vm';\r\n checks.push({\r\n id: 'EJR_QE_CONTRADICTION',\r\n label: 'HARD OVERRIDE: EJR claims entropy growth but cold_QE ≥ hot_QE — mathematically impossible',\r\n detail: `ejr=${ejr.toFixed(4)} cold_QE=${coldQE.toFixed(3)} hot_QE=${hotQE.toFixed(3)} (ejr=hot/cold requires hot>cold)`,\r\n severity: 'critical',\r\n penalty: 0.60, // overwhelms any bonus\r\n });\r\n penalty += 0.60;\r\n }\r\n }\r\n\r\n // Monotonic trajectory check (requires all three phases)\r\n if (!hardOverride && coldQE !== null && loadQE !== null && hotQE !== null) {\r\n if (coldQE < loadQE && loadQE < hotQE) {\r\n bonuses.push({\r\n id: 'MONOTONIC_ENTROPY_TRAJECTORY',\r\n label: 'QE increased continuously cold→load→hot — unbroken thermal feedback confirmed',\r\n detail: `${coldQE.toFixed(3)} → ${loadQE.toFixed(3)} → ${hotQE.toFixed(3)}`,\r\n value: 0.09,\r\n });\r\n bonus += 0.09;\r\n\r\n } else if (coldQE >= loadQE || loadQE >= hotQE) {\r\n // Entropy stalled or reversed mid-run — unusual for real silicon\r\n checks.push({\r\n id: 'NON_MONOTONIC_ENTROPY_TRAJECTORY',\r\n label: 'Entropy did not increase monotonically across load phases',\r\n detail: `cold=${coldQE.toFixed(3)} load=${loadQE.toFixed(3)} hot=${hotQE.toFixed(3)}`,\r\n severity: 'medium',\r\n penalty: 0.06,\r\n });\r\n penalty += 0.06;\r\n }\r\n }\r\n }\r\n\r\n // ── Dynamic threshold ─────────────────────────────────────────────────────────\r\n // A proof built from more evidence earns a more permissive (lower) passing bar.\r\n // Weights:\r\n // iterations (0→200): up to 0.65 of the evidence score\r\n // phased collection: +0.15 (gold standard of thermal measurement)\r\n // bio activity: +0.10 (human presence confirmed)\r\n // audio available: +0.05 (additional timing channel)\r\n // canvas available: +0.05 (hardware renderer identified)\r\n //\r\n // dynamicThreshold = 0.55 + (1 − evidenceWeight) × 0.12\r\n // Full evidence → 0.55 (standard gate)\r\n // Minimal proof → 0.67 (tightened gate for low-evidence submissions)\r\n const iterFraction = Math.min(1.0, n / 200);\r\n const phasedBonus = phases ? 0.15 : 0.0;\r\n const bioBonus = bio?.hasActivity ? 0.10 : 0.0;\r\n const audioBonus = audio?.available ? 0.05 : 0.0;\r\n const canvasBonus = canvas?.available ? 0.05 : 0.0;\r\n\r\n const evidenceWeight = Math.min(1.0,\r\n iterFraction * 0.65 + phasedBonus + bioBonus + audioBonus + canvasBonus\r\n );\r\n\r\n const dynamicThreshold = +(0.55 + (1 - evidenceWeight) * 0.12).toFixed(4);\r\n\r\n // ── Stage-3 caps ─────────────────────────────────────────────────────────────\r\n // Stage 3 is a REFINEMENT, not the primary classifier. The caps are smaller\r\n // than stage 2 to prevent triple-compounding across all three stages on\r\n // legitimate hardware with multiple marginal-but-not-damning signals.\r\n const totalPenalty = Math.min(0.15, penalty); // hard floor: stage 3 can't reject alone\r\n const totalBonus = Math.min(0.18, bonus);\r\n\r\n return {\r\n penalty: totalPenalty,\r\n bonus: totalBonus,\r\n netAdjustment: +(totalBonus - totalPenalty).toFixed(4),\r\n checks,\r\n bonuses,\r\n hardOverride, // 'vm' | null\r\n dynamicThreshold, // [0.55, 0.67]\r\n evidenceWeight: +evidenceWeight.toFixed(4),\r\n coherenceFlags: checks.map(c => c.id),\r\n physicalFlags: bonuses.map(b => b.id),\r\n };\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// computeServerDynamicThreshold\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Server-side recomputation of the dynamic threshold.\r\n * The server NEVER trusts the client's dynamicThreshold value; it recomputes\r\n * from known payload fields.\r\n *\r\n * @param {object} payload - validated ProofPayload\r\n * @returns {number} - minimum passing score for this proof [0.50, 0.62]\r\n */\r\nexport function computeServerDynamicThreshold(payload) {\r\n const entropy = payload?.signals?.entropy;\r\n const bio = payload?.signals?.bio;\r\n const audio = payload?.signals?.audio;\r\n const canvas = payload?.signals?.canvas;\r\n\r\n const n = entropy?.iterations ?? 0;\r\n const hasPhases = payload?.heuristic?.entropyJitterRatio != null;\r\n const hasBio = bio?.hasActivity === true;\r\n const hasAudio = audio?.available === true;\r\n const hasCanvas = canvas?.available === true;\r\n\r\n const iterFraction = Math.min(1.0, n / 200);\r\n const evidenceWeight = Math.min(1.0,\r\n iterFraction * 0.65 +\r\n (hasPhases ? 0.15 : 0) +\r\n (hasBio ? 0.10 : 0) +\r\n (hasAudio ? 0.05 : 0) +\r\n (hasCanvas ? 0.05 : 0)\r\n );\r\n\r\n // Server threshold: [0.50, 0.62]\r\n // Slightly more lenient than client [0.55, 0.67] because the server already\r\n // applies minJitterScore as an independent check. The dynamic component\r\n // adds an ADDITIONAL evidence-proportional tightening on top.\r\n return +(0.50 + (1 - evidenceWeight) * 0.12).toFixed(4);\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Internal helpers\r\n// ---------------------------------------------------------------------------\r\n\r\nfunction _empty(threshold) {\r\n return {\r\n penalty: 0, bonus: 0, netAdjustment: 0,\r\n checks: [], bonuses: [],\r\n hardOverride: null,\r\n dynamicThreshold: threshold,\r\n evidenceWeight: 0,\r\n coherenceFlags: [],\r\n physicalFlags: [],\r\n };\r\n}\r\n\r\n/**\r\n * @typedef {object} CoherenceReport\r\n * @property {number} penalty - total score penalty [0, 0.15]\r\n * @property {number} bonus - total score bonus [0, 0.18]\r\n * @property {number} netAdjustment - bonus − penalty [-0.15, +0.18]\r\n * @property {object[]} checks - anomalies found (with penalty values)\r\n * @property {object[]} bonuses - physical properties confirmed\r\n * @property {'vm'|null} hardOverride - overrides score when set\r\n * @property {number} dynamicThreshold - computed passing threshold [0.55, 0.67]\r\n * @property {number} evidenceWeight - how much evidence was collected [0, 1]\r\n * @property {string[]} coherenceFlags - check IDs for logging\r\n * @property {string[]} physicalFlags - bonus IDs for logging\r\n */\r\n","/**\r\n * @svrnsec/pulse — Hypervisor & Cloud Provider Fingerprinter\r\n *\r\n * Each hypervisor has a distinct \"steal-time rhythm\" — a characteristic\r\n * pattern in how it schedules guest vCPUs on host physical cores.\r\n * This creates detectable signatures in the timing autocorrelation profile.\r\n *\r\n * Think of it like a heartbeat EKG:\r\n * KVM → regular 50-iteration bursts (~250ms quantum at 5ms/iter)\r\n * Xen → longer 150-iteration bursts (~750ms credit scheduler quantum)\r\n * VMware → irregular bursts, memory balloon noise\r\n * Hyper-V → 78-iteration bursts (~390ms at 5ms/iter, 15.6ms quantum)\r\n * Nitro → almost none — SR-IOV passthrough is nearly invisible\r\n * Physical → no rhythm at all\r\n *\r\n * Canvas renderer strings give a second, independent signal that we cross-\r\n * reference to increase confidence in the provider classification.\r\n */\r\n\r\n// ---------------------------------------------------------------------------\r\n// Provider profile database\r\n// ---------------------------------------------------------------------------\r\n// Each profile is calibrated from real benchmark data.\r\n// Fields: lag1_range, lag50_range, qe_range, cv_range, renderer_hints\r\n\r\nconst PROVIDER_PROFILES = [\r\n {\r\n id: 'physical',\r\n label: 'Physical Hardware',\r\n profile: 'analog-fog',\r\n confidence: 0, // set dynamically\r\n match: ({ lag1, lag50, qe, cv, entropyJitterRatio, isSoftwareRenderer }) =>\r\n !isSoftwareRenderer &&\r\n Math.abs(lag1) < 0.20 &&\r\n Math.abs(lag50) < 0.15 &&\r\n qe > 3.0 &&\r\n cv > 0.06 &&\r\n (entropyJitterRatio === null || entropyJitterRatio >= 1.02),\r\n },\r\n {\r\n id: 'kvm-generic',\r\n label: 'KVM Hypervisor (generic)',\r\n profile: 'picket-fence',\r\n match: ({ lag1, lag50, qe, cv }) =>\r\n lag1 > 0.40 && qe < 2.5 && cv < 0.15 && Math.abs(lag50) > 0.25,\r\n providerHints: ['digitalocean', 'linode', 'vultr', 'hetzner', 'ovh'],\r\n },\r\n {\r\n id: 'kvm-digitalocean',\r\n label: 'DigitalOcean Droplet (KVM)',\r\n profile: 'picket-fence',\r\n match: ({ lag1, lag50, qe, cv, rendererHints }) =>\r\n lag1 > 0.55 && qe < 2.0 && cv < 0.12 &&\r\n (rendererHints.some(r => ['llvmpipe', 'virtio', 'qxl'].includes(r)) ||\r\n lag50 > 0.30),\r\n },\r\n {\r\n id: 'kvm-aws-ec2-xen',\r\n label: 'AWS EC2 (Xen/older generation)',\r\n profile: 'picket-fence',\r\n // Xen credit scheduler has longer period (~150 iters)\r\n match: ({ lag1, lag25, lag50, qe, cv }) =>\r\n qe < 2.2 && cv < 0.13 &&\r\n lag25 > 0.20 && lag50 > 0.20 &&\r\n lag1 < 0.50, // lag-1 less pronounced than KVM\r\n },\r\n {\r\n id: 'nitro-aws',\r\n label: 'AWS EC2 Nitro (near-baremetal)',\r\n profile: 'near-physical',\r\n // Nitro uses SR-IOV and dedicated hardware — steal-time is very low.\r\n // Looks almost physical but canvas renderer gives it away.\r\n match: ({ lag1, lag50, qe, cv, isSoftwareRenderer, rendererHints }) =>\r\n qe > 2.5 && cv > 0.05 &&\r\n lag1 < 0.25 && lag50 < 0.20 &&\r\n (isSoftwareRenderer ||\r\n rendererHints.some(r => r.includes('nvidia t4') || r.includes('nvidia a10'))),\r\n },\r\n {\r\n id: 'vmware-esxi',\r\n label: 'VMware ESXi',\r\n profile: 'burst-scheduler',\r\n // VMware balloon driver creates irregular memory pressure bursts\r\n match: ({ lag1, lag50, qe, cv, rendererHints }) =>\r\n qe < 2.5 &&\r\n (rendererHints.some(r => r.includes('vmware')) ||\r\n (lag1 > 0.30 && lag50 < lag1 * 0.7 && cv < 0.14)),\r\n },\r\n {\r\n id: 'hyperv',\r\n label: 'Microsoft Hyper-V',\r\n profile: 'picket-fence',\r\n // 15.6ms scheduler quantum → burst every ~78 iters\r\n match: ({ lag1, lag25, qe, cv, rendererHints }) =>\r\n qe < 2.3 &&\r\n (rendererHints.some(r => r.includes('microsoft basic render') || r.includes('warp')) ||\r\n (lag25 > 0.25 && lag1 > 0.35 && cv < 0.12)),\r\n },\r\n {\r\n id: 'gcp-kvm',\r\n label: 'Google Cloud (KVM)',\r\n profile: 'picket-fence',\r\n match: ({ lag1, lag50, qe, cv, rendererHints }) =>\r\n qe < 2.3 && lag1 > 0.45 &&\r\n (rendererHints.some(r => r.includes('swiftshader') || r.includes('google')) ||\r\n (lag50 > 0.28 && cv < 0.11)),\r\n },\r\n {\r\n id: 'gh200-datacenter',\r\n label: 'NVIDIA GH200 / HPC Datacenter',\r\n profile: 'hypervisor-flat',\r\n // Even with massive compute, still trapped by hypervisor clock.\r\n // GH200 shows near-zero Hurst (extreme quantization) + very high lag-1.\r\n match: ({ lag1, qe, hurst, cv, rendererHints }) =>\r\n (rendererHints.some(r => r.includes('gh200') || r.includes('grace hopper') ||\r\n r.includes('nvidia a100') || r.includes('nvidia h100')) ||\r\n (hurst < 0.10 && lag1 > 0.60 && qe < 1.8 && cv < 0.10)),\r\n },\r\n {\r\n id: 'generic-vm',\r\n label: 'Virtual Machine (unclassified)',\r\n profile: 'picket-fence',\r\n match: ({ lag1, qe, cv, isSoftwareRenderer }) =>\r\n isSoftwareRenderer ||\r\n (qe < 2.0 && lag1 > 0.35) ||\r\n (cv < 0.02),\r\n },\r\n];\r\n\r\n// ---------------------------------------------------------------------------\r\n// detectProvider\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Classifies the host environment based on timing + canvas signals.\r\n *\r\n * @param {object} p\r\n * @param {import('./jitter.js').JitterAnalysis} p.jitter\r\n * @param {object} p.autocorrelations - extended lags including lag25, lag50\r\n * @param {import('../collector/canvas.js').CanvasFingerprint} p.canvas\r\n * @param {object|null} p.phases\r\n * @returns {ProviderResult}\r\n */\r\nexport function detectProvider({ jitter, autocorrelations, canvas, phases }) {\r\n const rendererHints = _rendererHints(canvas?.webglRenderer, canvas?.webglVendor);\r\n\r\n const signals = {\r\n lag1: Math.abs(autocorrelations?.lag1 ?? 0),\r\n lag25: Math.abs(autocorrelations?.lag25 ?? 0),\r\n lag50: Math.abs(autocorrelations?.lag50 ?? 0),\r\n qe: jitter.quantizationEntropy,\r\n cv: jitter.stats?.cv ?? 0,\r\n hurst: jitter.hurstExponent ?? 0.5,\r\n isSoftwareRenderer: canvas?.isSoftwareRenderer ?? false,\r\n rendererHints,\r\n entropyJitterRatio: phases?.entropyJitterRatio ?? null,\r\n };\r\n\r\n // Score each profile and pick the best match\r\n const scored = PROVIDER_PROFILES\r\n .filter(p => {\r\n try { return p.match(signals); }\r\n catch { return false; }\r\n })\r\n .map(p => ({\r\n ...p,\r\n // Physical hardware is the last resort; give it lower priority when\r\n // other profiles match so we don't misclassify VMs.\r\n priority: p.id === 'physical' ? 0 : 1,\r\n }))\r\n .sort((a, b) => b.priority - a.priority);\r\n\r\n const best = scored[0] ?? { id: 'unknown', label: 'Unknown', profile: 'unknown' };\r\n\r\n // Confidence: how many \"VM indicator\" thresholds the signals cross\r\n const vmIndicatorCount = [\r\n signals.qe < 2.5,\r\n signals.lag1 > 0.35,\r\n signals.lag50 > 0.20,\r\n signals.cv < 0.04,\r\n signals.isSoftwareRenderer,\r\n signals.hurst < 0.15,\r\n phases?.entropyJitterRatio != null && phases.entropyJitterRatio < 1.02,\r\n ].filter(Boolean).length;\r\n\r\n const isPhysical = best.id === 'physical';\r\n const confidence = isPhysical\r\n ? Math.max(20, 95 - vmIndicatorCount * 15)\r\n : Math.min(95, 40 + vmIndicatorCount * 12);\r\n\r\n return {\r\n providerId: best.id,\r\n providerLabel: best.label,\r\n profile: best.profile,\r\n confidence,\r\n isVirtualized: best.id !== 'physical',\r\n signals,\r\n alternatives: scored.slice(1, 3).map(p => ({ id: p.id, label: p.label })),\r\n rendererHints,\r\n schedulerQuantumMs: _estimateQuantum(signals),\r\n };\r\n}\r\n\r\n/**\r\n * @typedef {object} ProviderResult\r\n * @property {string} providerId\r\n * @property {string} providerLabel\r\n * @property {string} profile 'analog-fog' | 'picket-fence' | 'burst-scheduler' | 'near-physical' | 'hypervisor-flat' | 'unknown'\r\n * @property {number} confidence 0–100\r\n * @property {boolean} isVirtualized\r\n * @property {object} signals\r\n * @property {object[]} alternatives\r\n * @property {string[]} rendererHints\r\n * @property {number|null} schedulerQuantumMs\r\n */\r\n\r\n// ---------------------------------------------------------------------------\r\n// Internal helpers\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Extract lowercase hint tokens from WebGL renderer string for pattern matching.\r\n */\r\nfunction _rendererHints(renderer = '', vendor = '') {\r\n return `${renderer} ${vendor}`.toLowerCase()\r\n .split(/[\\s\\/(),]+/)\r\n .filter(t => t.length > 2);\r\n}\r\n\r\n/**\r\n * Estimate the hypervisor's scheduler quantum from the dominant autocorrelation lag.\r\n * Returns null if the device appears to be physical.\r\n */\r\nfunction _estimateQuantum({ lag1, lag25, lag50, qe }) {\r\n if (qe > 3.2) return null; // likely physical\r\n\r\n // Find the dominant lag (highest absolute autocorrelation beyond lag-5)\r\n const lags = [\r\n { lag: 50, ac: lag50 },\r\n { lag: 25, ac: lag25 },\r\n ];\r\n const peak = lags.reduce((b, c) => c.ac > b.ac ? c : b, { lag: 0, ac: 0 });\r\n\r\n if (peak.ac < 0.20) return null;\r\n\r\n // Quantum (ms) ≈ dominant_lag × estimated_iteration_time (≈5ms)\r\n return peak.lag * 5;\r\n}\r\n","/**\r\n * @svrnsec/pulse — High-Level Fingerprint Class\r\n *\r\n * The developer-facing API. Instead of forcing devs to understand Hurst\r\n * Exponents and Quantization Entropy, they get a Fingerprint object with\r\n * plain-language properties and one critical boolean: isSynthetic.\r\n *\r\n * Usage:\r\n *\r\n * import { Fingerprint } from '@svrnsec/pulse';\r\n *\r\n * const fp = await Fingerprint.collect({ nonce });\r\n *\r\n * if (fp.isSynthetic) {\r\n * console.log(`Blocked: ${fp.providerLabel} detected (${fp.confidence}% confidence)`);\r\n * console.log(`Profile: ${fp.profile}`); // 'picket-fence'\r\n * console.log(`Reason: ${fp.topFlag}`); // 'LOW_QE + HIGH_LAG1_AUTOCORR'\r\n * } else {\r\n * console.log(`Verified: ${fp.hardwareId()}`);\r\n * console.log(`Score: ${fp.score}`); // 0.0 – 1.0\r\n * }\r\n *\r\n * // Always send to server for final validation:\r\n * const { payload, hash } = fp.toCommitment();\r\n */\r\n\r\nimport { collectEntropy } from './collector/entropy.js';\r\nimport { BioCollector } from './collector/bio.js';\r\nimport { collectCanvasFingerprint } from './collector/canvas.js';\r\nimport { collectAudioJitter } from './analysis/audio.js';\r\nimport { classifyJitter } from './analysis/jitter.js';\r\nimport { runHeuristicEngine } from './analysis/heuristic.js';\r\nimport { runCoherenceAnalysis } from './analysis/coherence.js';\r\nimport { detectProvider } from './analysis/provider.js';\r\nimport { buildProof, buildCommitment, blake3HexStr } from './proof/fingerprint.js';\r\n\r\n// ---------------------------------------------------------------------------\r\n// Fingerprint class\r\n// ---------------------------------------------------------------------------\r\n\r\nexport class Fingerprint {\r\n /** @private */\r\n constructor(raw) {\r\n this._raw = raw; // full internal data\r\n this._commitment = null; // lazy-built on first toCommitment() call\r\n }\r\n\r\n // ── Static factory ────────────────────────────────────────────────────────\r\n\r\n /**\r\n * Collect all hardware signals and return a Fingerprint instance.\r\n *\r\n * @param {object} opts\r\n * @param {string} opts.nonce - server-issued challenge nonce (required)\r\n * @param {number} [opts.iterations=200]\r\n * @param {number} [opts.bioWindowMs=3000]\r\n * @param {boolean} [opts.phased=true] - run cold/load/hot phases\r\n * @param {Function} [opts.onProgress] - (stage: string) => void\r\n * @param {string} [opts.wasmPath]\r\n * @returns {Promise<Fingerprint>}\r\n */\r\n static async collect(opts = {}) {\r\n const {\r\n nonce,\r\n iterations = 200,\r\n bioWindowMs = 3000,\r\n phased = true,\r\n adaptive = true,\r\n adaptiveThreshold = 0.85,\r\n onProgress,\r\n wasmPath,\r\n } = opts;\r\n\r\n if (!nonce) throw new Error('Fingerprint.collect() requires opts.nonce');\r\n\r\n const emit = (stage, meta) => { try { onProgress?.(stage, meta); } catch {} };\r\n\r\n emit('start');\r\n\r\n // ── Parallel collection ────────────────────────────────────────────────\r\n const bio = new BioCollector();\r\n bio.start();\r\n\r\n const [entropy, canvas, audio] = await Promise.all([\r\n collectEntropy({\r\n iterations, phased, adaptive, adaptiveThreshold, wasmPath,\r\n onBatch: (meta) => emit('entropy_batch', meta),\r\n }).then(r => { emit('entropy_done'); return r; }),\r\n collectCanvasFingerprint()\r\n .then(r => { emit('canvas_done'); return r; }),\r\n collectAudioJitter({ durationMs: Math.min(bioWindowMs, 2000) })\r\n .then(r => { emit('audio_done'); return r; }),\r\n ]);\r\n\r\n // Wait out the bio window\r\n const elapsed = Date.now() - entropy.collectedAt;\r\n const remain = Math.max(0, bioWindowMs - elapsed);\r\n if (remain > 0) await new Promise(r => setTimeout(r, remain));\r\n\r\n bio.stop();\r\n const bioSnapshot = bio.snapshot(entropy.timings);\r\n emit('bio_done');\r\n\r\n // ── Analysis pipeline ─────────────────────────────────────────────────\r\n const jitter = classifyJitter(entropy.timings, { autocorrelations: entropy.autocorrelations });\r\n const heuristic = runHeuristicEngine({ jitter, phases: entropy.phases, autocorrelations: entropy.autocorrelations });\r\n const provider = detectProvider({ jitter, autocorrelations: entropy.autocorrelations, canvas, phases: entropy.phases });\r\n\r\n // ── Three-stage scoring pipeline ──────────────────────────────────────\r\n // Stage 1: base jitter score from timing distribution analysis\r\n const rawScore = jitter.score;\r\n // Stage 2: heuristic cross-metric coherence adjustment\r\n const adjScore = Math.max(0, Math.min(1, rawScore + heuristic.netAdjustment));\r\n // Stage 3: zero-latency structural coherence analysis on already-collected data\r\n const coherence = runCoherenceAnalysis({\r\n timings: entropy.timings,\r\n jitter,\r\n phases: entropy.phases ?? null,\r\n batches: entropy.batches ?? null,\r\n bio: bioSnapshot,\r\n canvas,\r\n audio,\r\n });\r\n // Final score: stage-2 adjusted score refined by stage-3 coherence\r\n const finalScore = Math.max(0, Math.min(1, adjScore + coherence.netAdjustment));\r\n\r\n emit('analysis_done');\r\n\r\n // ── Build commitment ──────────────────────────────────────────────────\r\n const payload = buildProof({ entropy, jitter, bio: bioSnapshot, canvas, audio, nonce });\r\n // Inject heuristic + provider into proof payload for server-side reference\r\n payload.heuristic = {\r\n penalty: heuristic.penalty,\r\n bonus: heuristic.bonus,\r\n entropyJitterRatio: heuristic.entropyJitterRatio,\r\n picketFence: heuristic.picketFence.detected,\r\n coherenceFlags: heuristic.coherenceFlags,\r\n hardOverride: heuristic.hardOverride, // 'vm' | null\r\n };\r\n payload.provider = {\r\n id: provider.providerId,\r\n label: provider.providerLabel,\r\n profile: provider.profile,\r\n confidence: provider.confidence,\r\n schedulerQuantum: provider.schedulerQuantumMs,\r\n };\r\n // Stage-3 coherence summary (server uses these for logging + dynamic threshold)\r\n payload.coherence = {\r\n netAdjustment: coherence.netAdjustment,\r\n dynamicThreshold: coherence.dynamicThreshold,\r\n evidenceWeight: coherence.evidenceWeight,\r\n coherenceFlags: coherence.coherenceFlags,\r\n physicalFlags: coherence.physicalFlags,\r\n hardOverride: coherence.hardOverride,\r\n };\r\n payload.classification.adjustedScore = _round(adjScore, 4);\r\n payload.classification.finalScore = _round(finalScore, 4);\r\n payload.classification.dynamicThreshold = coherence.dynamicThreshold;\r\n\r\n const commitment = buildCommitment(payload);\r\n emit('complete');\r\n\r\n return new Fingerprint({\r\n entropy, canvas, audio,\r\n bioSnapshot, jitter, heuristic, coherence, provider,\r\n rawScore, adjScore, finalScore,\r\n nonce, commitment,\r\n });\r\n }\r\n\r\n // ── Primary API ────────────────────────────────────────────────────────────\r\n\r\n /**\r\n * True if the device is likely a VM, AI inference endpoint, or sanitised\r\n * cloud environment. Uses the adjusted score (base + heuristic bonuses/penalties).\r\n * @type {boolean}\r\n */\r\n get isSynthetic() {\r\n // Stage-2 hard kill: EJR/QE mathematical contradiction detected in the\r\n // heuristic engine before any bonuses could accumulate.\r\n if (this._raw.heuristic.hardOverride === 'vm') return true;\r\n // Stage-3 hard kill: EJR/QE contradiction or phase forgery detected in\r\n // the coherence analyser (second line of defence).\r\n if (this._raw.coherence.hardOverride === 'vm') return true;\r\n // Normal path: final score vs dynamic threshold.\r\n return this._raw.finalScore < this._raw.coherence.dynamicThreshold;\r\n }\r\n\r\n /**\r\n * Confidence in the isSynthetic verdict, 0–100.\r\n * @type {number}\r\n */\r\n get confidence() {\r\n const s = this._raw.finalScore;\r\n const t = this._raw.coherence.dynamicThreshold;\r\n // Map distance from threshold to confidence percentage.\r\n // At the threshold: 0% confident. Far above/below: approaching 100%.\r\n const distance = Math.abs(s - t);\r\n return Math.min(100, Math.round(distance * 500));\r\n }\r\n\r\n /**\r\n * Normalised score [0.0, 1.0]. Higher = more physical.\r\n * This is the FINAL score after all three analysis stages.\r\n * @type {number}\r\n */\r\n get score() {\r\n return _round(this._raw.finalScore, 4);\r\n }\r\n\r\n /**\r\n * The dynamic passing threshold for this proof [0.55, 0.67].\r\n * Reflects how much evidence was collected — a full-evidence proof has a\r\n * lower (more permissive) threshold; a minimal-evidence proof has a higher\r\n * (more conservative) threshold.\r\n * @type {number}\r\n */\r\n get threshold() {\r\n return this._raw.coherence.dynamicThreshold;\r\n }\r\n\r\n /**\r\n * How much evidence was collected [0, 1].\r\n * 1.0 = 200 iterations + phased + bio + audio + canvas\r\n * 0.0 = minimal proof\r\n * @type {number}\r\n */\r\n get evidenceWeight() {\r\n return this._raw.coherence.evidenceWeight;\r\n }\r\n\r\n /**\r\n * Human-readable confidence tier.\r\n * @type {'high'|'medium'|'low'|'uncertain'}\r\n */\r\n get tier() {\r\n const c = this.confidence;\r\n if (c >= 70) return 'high';\r\n if (c >= 40) return 'medium';\r\n if (c >= 20) return 'low';\r\n return 'uncertain';\r\n }\r\n\r\n /**\r\n * Detected timing profile name.\r\n * 'analog-fog' → real hardware, natural Brownian noise\r\n * 'picket-fence' → VM steal-time bursts at regular intervals\r\n * 'burst-scheduler' → irregular VM scheduling (VMware-style)\r\n * 'hypervisor-flat' → flat timing, hypervisor completely irons out noise\r\n * 'near-physical' → hard to classify (Nitro, GPU passthrough)\r\n * 'unknown'\r\n * @type {string}\r\n */\r\n get profile() {\r\n return this._raw.provider.profile;\r\n }\r\n\r\n /**\r\n * Detected cloud provider / hypervisor.\r\n * @type {string} e.g. 'kvm-digitalocean', 'nitro-aws', 'physical', 'generic-vm'\r\n */\r\n get providerId() {\r\n return this._raw.provider.providerId;\r\n }\r\n\r\n /**\r\n * Human-readable provider label.\r\n * @type {string} e.g. 'DigitalOcean Droplet (KVM)', 'Physical Hardware'\r\n */\r\n get providerLabel() {\r\n return this._raw.provider.providerLabel;\r\n }\r\n\r\n /**\r\n * Estimated hypervisor scheduler quantum in milliseconds.\r\n * Null if the device appears to be physical.\r\n * @type {number|null}\r\n */\r\n get schedulerQuantumMs() {\r\n return this._raw.provider.schedulerQuantumMs;\r\n }\r\n\r\n /**\r\n * Entropy-Jitter Ratio — the key signal distinguishing real silicon from VMs.\r\n * Values ≥ 1.08 confirm thermal feedback (real hardware).\r\n * Values near 1.0 indicate a hypervisor clock (VM).\r\n * Null if phased collection was not run.\r\n * @type {number|null}\r\n */\r\n get entropyJitterRatio() {\r\n return this._raw.heuristic.entropyJitterRatio;\r\n }\r\n\r\n /**\r\n * The most diagnostic flag from the heuristic engine.\r\n * @type {string}\r\n */\r\n get topFlag() {\r\n const flags = [\r\n ...this._raw.heuristic.findings.map(f => f.id),\r\n ...this._raw.jitter.flags,\r\n ];\r\n return flags[0] ?? 'NONE';\r\n }\r\n\r\n /**\r\n * All flags from both the base classifier and heuristic engine.\r\n * @type {string[]}\r\n */\r\n get flags() {\r\n return [\r\n ...this._raw.heuristic.coherenceFlags,\r\n ...this._raw.jitter.flags,\r\n ];\r\n }\r\n\r\n /**\r\n * Summary of heuristic findings with human-readable labels.\r\n * @type {Array<{id, label, severity, detail}>}\r\n */\r\n get findings() {\r\n return this._raw.heuristic.findings;\r\n }\r\n\r\n /**\r\n * Confirmed physical properties (positive evidence for real hardware).\r\n * @type {Array<{id, label, detail}>}\r\n */\r\n get physicalEvidence() {\r\n return this._raw.heuristic.bonuses;\r\n }\r\n\r\n // ── Hardware ID ────────────────────────────────────────────────────────────\r\n\r\n /**\r\n * A stable, privacy-preserving hardware identifier derived from the GPU\r\n * canvas fingerprint, audio sample rate, and WebGL extension set.\r\n *\r\n * Properties:\r\n * - Stable: same device → same ID across sessions\r\n * - Not uniquely identifying: changes if GPU or driver changes\r\n * - Not reversible: BLAKE3 hash, cannot recover original signals\r\n * - Not a tracking cookie: no PII, no cross-origin data\r\n *\r\n * @returns {string} 32-character hex ID (128-bit collision resistance)\r\n */\r\n hardwareId() {\r\n const { canvas, audio } = this._raw;\r\n const components = [\r\n canvas?.webglRenderer ?? '',\r\n canvas?.webglVendor ?? '',\r\n canvas?.extensionCount?.toString() ?? '',\r\n audio?.sampleRate?.toString() ?? '',\r\n canvas?.webglVersion?.toString() ?? '',\r\n ].join('|');\r\n return blake3HexStr(components).slice(0, 32);\r\n }\r\n\r\n // ── Diagnostic data ────────────────────────────────────────────────────────\r\n\r\n /**\r\n * Key metrics summary — useful for logging and debugging.\r\n * @returns {object}\r\n */\r\n metrics() {\r\n const { jitter, heuristic, coherence, provider } = this._raw;\r\n return {\r\n // ── Final verdict ──────────────────────────────────────────────────\r\n score: this.score, // final (stage 3)\r\n threshold: this.threshold, // dynamic passing bar\r\n evidenceWeight: this.evidenceWeight,\r\n isSynthetic: this.isSynthetic,\r\n // ── Score pipeline breakdown ───────────────────────────────────────\r\n rawScore: _round(this._raw.rawScore, 4), // stage 1\r\n adjustedScore: _round(this._raw.adjScore, 4), // stage 2\r\n finalScore: _round(this._raw.finalScore, 4), // stage 3\r\n heuristicAdjustment: _round(heuristic.netAdjustment, 4),\r\n coherenceAdjustment: _round(coherence.netAdjustment, 4),\r\n // ── Timing signals ─────────────────────────────────────────────────\r\n cv: _round(jitter.stats?.cv, 4),\r\n hurstExponent: _round(jitter.hurstExponent, 4),\r\n quantizationEntropy: _round(jitter.quantizationEntropy, 4),\r\n autocorrLag1: _round(jitter.autocorrelations?.lag1, 4),\r\n autocorrLag50: _round(this._raw.entropy.autocorrelations?.lag50, 4),\r\n outlierRate: _round(jitter.outlierRate, 4),\r\n thermalPattern: jitter.thermalSignature?.pattern,\r\n entropyJitterRatio: _round(heuristic.entropyJitterRatio, 4),\r\n picketFence: heuristic.picketFence.detected,\r\n // ── Coherence signals ──────────────────────────────────────────────\r\n coherenceFlags: coherence.coherenceFlags,\r\n physicalFlags: coherence.physicalFlags,\r\n hardOverride: coherence.hardOverride,\r\n // ── Provider ───────────────────────────────────────────────────────\r\n provider: provider.providerLabel,\r\n providerConfidence: provider.confidence,\r\n schedulerQuantumMs: provider.schedulerQuantumMs,\r\n // ── Hardware ───────────────────────────────────────────────────────\r\n webglRenderer: this._raw.canvas?.webglRenderer,\r\n isSoftwareRenderer: this._raw.canvas?.isSoftwareRenderer,\r\n hardwareId: this.hardwareId(),\r\n };\r\n }\r\n\r\n /**\r\n * Full diagnostic report for debugging / integration testing.\r\n * @returns {object}\r\n */\r\n report() {\r\n const { coherence } = this._raw;\r\n return {\r\n verdict: {\r\n isSynthetic: this.isSynthetic,\r\n score: this.score,\r\n threshold: this.threshold,\r\n confidence: this.confidence,\r\n tier: this.tier,\r\n profile: this.profile,\r\n provider: this.providerLabel,\r\n topFlag: this.topFlag,\r\n hardOverride: coherence.hardOverride,\r\n evidenceWeight: this.evidenceWeight,\r\n },\r\n pipeline: {\r\n rawScore: _round(this._raw.rawScore, 4),\r\n adjustedScore: _round(this._raw.adjScore, 4),\r\n finalScore: _round(this._raw.finalScore, 4),\r\n heuristicAdjustment: _round(this._raw.heuristic.netAdjustment, 4),\r\n coherenceAdjustment: _round(coherence.netAdjustment, 4),\r\n dynamicThreshold: coherence.dynamicThreshold,\r\n },\r\n metrics: this.metrics(),\r\n findings: this.findings,\r\n physicalEvidence: this.physicalEvidence,\r\n coherenceChecks: coherence.checks,\r\n coherenceBonuses: coherence.bonuses,\r\n phases: this._raw.entropy.phases ? {\r\n cold: { qe: _round(this._raw.entropy.phases.cold.qe, 4), mean: _round(this._raw.entropy.phases.cold.mean, 4) },\r\n hot: { qe: _round(this._raw.entropy.phases.hot.qe, 4), mean: _round(this._raw.entropy.phases.hot.mean, 4) },\r\n entropyJitterRatio: _round(this._raw.entropy.phases.entropyJitterRatio, 4),\r\n } : null,\r\n };\r\n }\r\n\r\n // ── Proof commitment ───────────────────────────────────────────────────────\r\n\r\n /**\r\n * Returns the BLAKE3 commitment to send to the server for validation.\r\n * @returns {{ payload: object, hash: string }}\r\n */\r\n toCommitment() {\r\n return this._raw.commitment;\r\n }\r\n\r\n // ── String representations ─────────────────────────────────────────────────\r\n\r\n toString() {\r\n const icon = this.isSynthetic ? '🚩' : '✅';\r\n const verb = this.isSynthetic ? 'Synthetic' : 'Physical';\r\n return `${icon} ${verb} | ${this.providerLabel} | score=${this.score} | conf=${this.confidence}% | profile=${this.profile}`;\r\n }\r\n\r\n toJSON() {\r\n return this.report();\r\n }\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Internal helpers\r\n// ---------------------------------------------------------------------------\r\n\r\nfunction _round(v, d) {\r\n if (v == null || !isFinite(v)) return null;\r\n const f = 10 ** d;\r\n return Math.round(v * f) / f;\r\n}\r\n","/**\n * @svrnsec/pulse — Server-Side Validator\n *\n * Verifies a ProofPayload + BLAKE3 commitment received from the client.\n * This module is for NODE.JS / SERVER use only.\n */\n\nimport { blake3 } from '@noble/hashes/blake3';\nimport { bytesToHex } from '@noble/hashes/utils';\nimport { randomFillSync, timingSafeEqual } from 'node:crypto';\nimport { canonicalJson } from './fingerprint.js';\nimport { computeServerDynamicThreshold } from '../analysis/coherence.js';\n\n// ---------------------------------------------------------------------------\n// Known software / virtual renderer patterns\n// ---------------------------------------------------------------------------\nconst VM_RENDERER_BLOCKLIST = [\n 'llvmpipe', 'swiftshader', 'softpipe', 'mesa offscreen',\n 'microsoft basic render', 'vmware svga', 'vmware', 'virtualbox',\n 'parallels', 'chromium swiftshader', 'google swiftshader',\n 'cirrussm', 'qxl', 'virtio', 'bochs',\n 'nvidia t4', 'nvidia a10g', 'nvidia a100', 'nvidia h100',\n 'nvidia h200', 'nvidia b100', 'nvidia b200', 'nvidia gh200',\n 'amd instinct', 'amd mi300', 'amd mi250', 'amd mi200',\n 'aws inferentia', 'aws trainium', 'google tpu',\n];\n\n// ANGLE with software backend — match only software variants, not real hardware through ANGLE\nconst VM_RENDERER_REGEX = [\n /angle\\s*\\(.*software/i,\n];\n\n// ---------------------------------------------------------------------------\n// Recursive prototype pollution guard\n// ---------------------------------------------------------------------------\nfunction _checkProtoPollution(obj, depth = 0) {\n if (depth > 10 || obj === null || typeof obj !== 'object') return false;\n if (Array.isArray(obj)) {\n for (const item of obj) {\n if (_checkProtoPollution(item, depth + 1)) return true;\n }\n return false;\n }\n if (\n Object.prototype.hasOwnProperty.call(obj, '__proto__') ||\n Object.prototype.hasOwnProperty.call(obj, 'constructor') ||\n Object.prototype.hasOwnProperty.call(obj, 'prototype')\n ) {\n return true;\n }\n for (const key of Object.keys(obj)) {\n if (typeof obj[key] === 'object' && obj[key] !== null) {\n if (_checkProtoPollution(obj[key], depth + 1)) return true;\n }\n }\n return false;\n}\n\n// ---------------------------------------------------------------------------\n// validateProof\n// ---------------------------------------------------------------------------\n\n/**\n * @param {import('./fingerprint.js').ProofPayload} payload\n * @param {string} receivedHash\n * @param {object} [opts]\n * @param {number} [opts.minJitterScore=0.55]\n * @param {number} [opts.maxAgeMs=300_000]\n * @param {number} [opts.clockSkewMs=30_000]\n * @param {boolean} [opts.requireBio=false]\n * @param {boolean} [opts.blockSoftwareRenderer=true]\n * @param {Function} [opts.checkNonce]\n * @returns {Promise<ValidationResult>}\n */\nexport async function validateProof(payload, receivedHash, opts = {}) {\n const {\n minJitterScore = 0.55,\n maxAgeMs = 300_000,\n clockSkewMs = 30_000,\n requireBio = false,\n blockSoftwareRenderer = true,\n checkNonce = null,\n } = opts;\n\n const reasons = [];\n const riskFlags = [];\n let valid = true;\n\n // ── 0. Strict payload structure validation ────────────────────────────────\n if (!payload || typeof payload !== 'object' || Array.isArray(payload)) {\n return _reject(['INVALID_PAYLOAD_STRUCTURE']);\n }\n\n // Recursive prototype pollution guard — checks all nested objects\n if (_checkProtoPollution(payload)) {\n return _reject(['PROTOTYPE_POLLUTION_ATTEMPT']);\n }\n\n // Required top-level fields\n const REQUIRED_TOP = ['version', 'timestamp', 'nonce', 'signals', 'classification'];\n for (const field of REQUIRED_TOP) {\n if (!(field in payload)) {\n return _reject([`MISSING_REQUIRED_FIELD:${field}`]);\n }\n }\n\n // Type assertions\n if (typeof payload.version !== 'number') return _reject(['INVALID_TYPE:version']);\n if (typeof payload.timestamp !== 'number') return _reject(['INVALID_TYPE:timestamp']);\n if (typeof payload.nonce !== 'string') return _reject(['INVALID_TYPE:nonce']);\n if (typeof payload.signals !== 'object' || Array.isArray(payload.signals)) {\n return _reject(['INVALID_TYPE:signals']);\n }\n if (typeof payload.classification !== 'object' || Array.isArray(payload.classification)) {\n return _reject(['INVALID_TYPE:classification']);\n }\n\n const TS_MIN = 1_577_836_800_000;\n const TS_MAX = 4_102_444_800_000;\n if (payload.timestamp < TS_MIN || payload.timestamp > TS_MAX) {\n return _reject(['TIMESTAMP_OUT_OF_RANGE']);\n }\n\n if (payload.version !== 1) {\n return _reject(['UNSUPPORTED_PROOF_VERSION']);\n }\n\n // ── 1. Hash integrity (timing-safe comparison) ────────────────────────────\n if (typeof receivedHash !== 'string' || !/^[0-9a-f]{64}$/.test(receivedHash)) {\n return _reject(['INVALID_HASH_FORMAT']);\n }\n const canonical = canonicalJson(payload);\n const enc = new TextEncoder().encode(canonical);\n const computed = bytesToHex(blake3(enc));\n\n try {\n const computedBuf = Buffer.from(computed, 'hex');\n const receivedBuf = Buffer.from(receivedHash, 'hex');\n if (computedBuf.length !== receivedBuf.length || !timingSafeEqual(computedBuf, receivedBuf)) {\n return _reject(['HASH_MISMATCH_PAYLOAD_TAMPERED']);\n }\n } catch {\n return _reject(['HASH_MISMATCH_PAYLOAD_TAMPERED']);\n }\n\n // ── 2. Timestamp recency ──────────────────────────────────────────────────\n const now = Date.now();\n const age = now - payload.timestamp;\n if (age > maxAgeMs) {\n valid = false;\n reasons.push(`PROOF_EXPIRED: age=${Math.round(age / 1000)}s, max=${maxAgeMs / 1000}s`);\n }\n if (payload.timestamp > now + clockSkewMs) {\n valid = false;\n reasons.push('PROOF_FROM_FUTURE');\n }\n\n // ── 3. Nonce freshness ────────────────────────────────────────────────────\n let nonceChecked = false;\n if (checkNonce) {\n nonceChecked = true;\n const nonceOk = await checkNonce(payload.nonce);\n if (!nonceOk) {\n valid = false;\n reasons.push('NONCE_INVALID_OR_REPLAYED');\n }\n } else {\n riskFlags.push('NONCE_FRESHNESS_NOT_CHECKED');\n }\n\n // ── 4. Jitter score ───────────────────────────────────────────────────────\n const jitterScore = payload.classification?.jitterScore ?? 0;\n if (jitterScore < minJitterScore) {\n valid = false;\n reasons.push(`JITTER_SCORE_TOO_LOW: ${jitterScore} < ${minJitterScore}`);\n }\n\n // ── 4b. Dynamic threshold — server recomputes from raw signals, not client finalScore\n const serverDynamicMin = computeServerDynamicThreshold(payload);\n if (jitterScore < serverDynamicMin) {\n valid = false;\n reasons.push(\n `DYNAMIC_THRESHOLD_NOT_MET: jitterScore=${jitterScore} < ` +\n `serverMin=${serverDynamicMin} (evidenceWeight=${\n _computeEvidenceWeight(payload).toFixed(3)\n })`\n );\n }\n\n // Surface diagnostic flags from the client's classifier\n for (const flag of (payload.classification?.flags ?? [])) {\n if (flag.includes('VM') || flag.includes('FLAT') || flag.includes('SYNTHETIC')) {\n riskFlags.push(`CLIENT_FLAG:${flag}`);\n }\n }\n\n // Hard override from heuristic engine (stage 2)\n if (payload.heuristic?.hardOverride === 'vm') {\n valid = false;\n reasons.push(\n `HEURISTIC_HARD_OVERRIDE: stage-2 EJR/QE mathematical contradiction — ` +\n `${(payload.heuristic.coherenceFlags ?? []).join(', ')}`\n );\n }\n\n // Hard override from coherence stage (stage 3)\n if (payload.coherence?.hardOverride === 'vm') {\n valid = false;\n reasons.push(\n `COHERENCE_HARD_OVERRIDE: stage-3 analysis detected a mathematical ` +\n `impossibility — ${(payload.coherence.coherenceFlags ?? []).join(', ')}`\n );\n }\n\n // Surface all coherence flags for risk tracking\n for (const flag of (payload.heuristic?.coherenceFlags ?? [])) {\n riskFlags.push(`HEURISTIC:${flag}`);\n }\n for (const flag of (payload.coherence?.coherenceFlags ?? [])) {\n riskFlags.push(`COHERENCE:${flag}`);\n }\n\n // ── 5. Canvas / WebGL renderer check ──────────────────────────────────────\n const canvas = payload.signals?.canvas;\n if (canvas) {\n if (canvas.isSoftwareRenderer && blockSoftwareRenderer) {\n valid = false;\n reasons.push(`SOFTWARE_RENDERER_DETECTED: ${canvas.webglRenderer}`);\n }\n const rendererLc = (canvas.webglRenderer ?? '').toLowerCase();\n // Check substring patterns\n for (const pattern of VM_RENDERER_BLOCKLIST) {\n if (rendererLc.includes(pattern)) {\n valid = false;\n reasons.push(`BLOCKLISTED_RENDERER: ${canvas.webglRenderer}`);\n riskFlags.push(`RENDERER_MATCH:${pattern}`);\n break;\n }\n }\n // Check regex patterns (e.g. ANGLE software)\n for (const re of VM_RENDERER_REGEX) {\n if (re.test(rendererLc)) {\n valid = false;\n reasons.push(`BLOCKLISTED_RENDERER: ${canvas.webglRenderer}`);\n riskFlags.push('RENDERER_MATCH:angle_software');\n break;\n }\n }\n if (!canvas.available) {\n riskFlags.push('CANVAS_UNAVAILABLE');\n }\n }\n\n // ── 6. Bio activity ───────────────────────────────────────────────────────\n const bio = payload.signals?.bio;\n if (bio) {\n if (requireBio && !bio.hasActivity) {\n valid = false;\n reasons.push('NO_BIO_ACTIVITY_DETECTED');\n }\n if (bio.mouseSampleCount === 0 && bio.keyboardSampleCount === 0) {\n riskFlags.push('ZERO_BIO_SAMPLES');\n }\n if (bio.interferenceCoefficient < -0.3) {\n riskFlags.push('NEGATIVE_INTERFERENCE_COEFFICIENT');\n }\n }\n\n // ── 7. Internal consistency checks ────────────────────────────────────────\n const entropy = payload.signals?.entropy;\n if (entropy) {\n if (entropy.timingsCV < 0.01 && jitterScore > 0.7) {\n riskFlags.push('INCONSISTENCY:LOW_CV_BUT_HIGH_SCORE');\n }\n if (entropy.timerGranularityMs === 0) {\n riskFlags.push('SUSPICIOUS_ZERO_TIMER_GRANULARITY');\n }\n if (entropy.thermalPattern === 'flat' && jitterScore > 0.8) {\n riskFlags.push('INCONSISTENCY:FLAT_THERMAL_BUT_HIGH_SCORE');\n }\n if (entropy.hurstExponent != null) {\n if (entropy.hurstExponent < 0.2 || entropy.hurstExponent > 0.85) {\n riskFlags.push(`EXTREME_HURST:${entropy.hurstExponent}`);\n }\n }\n }\n\n // ── 7b. Cross-signal physics forgery detection ────────────────────────────\n if (entropy) {\n const cv = entropy.timingsCV ?? null;\n const qe = entropy.quantizationEntropy ?? null;\n const lag1 = entropy.autocorr_lag1 ?? null;\n\n if (cv !== null && cv < 0.015 && jitterScore > 0.65) {\n valid = false;\n reasons.push(\n `FORGED_SIGNAL:CV_SCORE_IMPOSSIBLE cv=${cv.toFixed(5)} is hypervisor-flat ` +\n `but jitterScore=${jitterScore.toFixed(3)} claims physical hardware`\n );\n }\n\n if (lag1 !== null && lag1 > 0.70 && jitterScore > 0.70) {\n valid = false;\n reasons.push(\n `FORGED_SIGNAL:AUTOCORR_SCORE_IMPOSSIBLE lag1=${lag1.toFixed(3)} is VM-level ` +\n `but jitterScore=${jitterScore.toFixed(3)} claims physical hardware`\n );\n }\n\n if (qe !== null && qe < 2.0 && jitterScore > 0.65) {\n valid = false;\n reasons.push(\n `FORGED_SIGNAL:QE_SCORE_IMPOSSIBLE qe=${qe.toFixed(3)} bits is VM-level ` +\n `but jitterScore=${jitterScore.toFixed(3)} claims physical hardware`\n );\n }\n }\n\n // ── 8. Audio signal check ─────────────────────────────────────────────────\n const audio = payload.signals?.audio;\n if (audio?.available) {\n if (audio.callbackJitterCV < 0.001) {\n riskFlags.push('AUDIO_JITTER_TOO_FLAT');\n }\n }\n\n // ── Confidence rating ─────────────────────────────────────────────────────\n let confidence;\n if (!valid) {\n confidence = 'rejected';\n } else if (!nonceChecked) {\n // Without nonce verification, confidence cannot be higher than 'low'\n confidence = 'low';\n } else if (riskFlags.length === 0 && jitterScore >= 0.75) {\n confidence = 'high';\n } else if (riskFlags.length <= 2 && jitterScore >= 0.60) {\n confidence = 'medium';\n } else {\n confidence = 'low';\n }\n\n return {\n valid,\n score: jitterScore,\n confidence,\n reasons,\n riskFlags,\n meta: {\n receivedAt: now,\n proofAge: age,\n jitterScore,\n canvasRenderer: canvas?.webglRenderer ?? null,\n bioActivity: bio?.hasActivity ?? false,\n },\n };\n}\n\n/** @typedef {object} ValidationResult */\n\n// ---------------------------------------------------------------------------\n// generateNonce\n// ---------------------------------------------------------------------------\n\nexport function generateNonce() {\n let buf;\n if (typeof globalThis.crypto?.getRandomValues === 'function') {\n buf = new Uint8Array(32);\n globalThis.crypto.getRandomValues(buf);\n } else {\n buf = new Uint8Array(32);\n randomFillSync(buf);\n }\n return bytesToHex(buf);\n}\n\n// ---------------------------------------------------------------------------\n// Internal helpers\n// ---------------------------------------------------------------------------\n\nfunction _reject(reasons) {\n return {\n valid: false,\n score: 0,\n confidence: 'rejected',\n reasons,\n riskFlags: [],\n meta: {},\n };\n}\n\nfunction _computeEvidenceWeight(payload) {\n const n = payload?.signals?.entropy?.iterations ?? 0;\n const hasPhases = payload?.heuristic?.entropyJitterRatio != null;\n const hasBio = payload?.signals?.bio?.hasActivity === true;\n const hasAudio = payload?.signals?.audio?.available === true;\n const hasCanvas = payload?.signals?.canvas?.available === true;\n return Math.min(1.0,\n Math.min(1.0, n / 200) * 0.65 +\n (hasPhases ? 0.15 : 0) +\n (hasBio ? 0.10 : 0) +\n (hasAudio ? 0.05 : 0) +\n (hasCanvas ? 0.05 : 0)\n );\n}\n","/**\r\n * @svrnsec/pulse — Terminal Result Renderer\r\n *\r\n * Pretty-prints probe results to the terminal for Node.js server usage.\r\n * Used by middleware and the CLI so developers see clean, actionable output\r\n * during integration and debugging — not raw JSON.\r\n *\r\n * Zero dependencies. Pure ANSI escape codes.\r\n * Automatically disabled when stdout is not a TTY or NO_COLOR is set.\r\n */\r\n\r\n/* ─── TTY guard ──────────────────────────────────────────────────────────── */\r\n\r\nconst isTTY = () =>\r\n typeof process !== 'undefined' &&\r\n process.stderr?.isTTY === true &&\r\n process.env?.NO_COLOR == null;\r\n\r\nconst c = isTTY;\r\n\r\n/* ─── ANSI color palette ─────────────────────────────────────────────────── */\r\n\r\nconst A = {\r\n reset: '\\x1b[0m',\r\n bold: '\\x1b[1m',\r\n dim: '\\x1b[2m',\r\n // foreground — normal\r\n red: '\\x1b[31m',\r\n green: '\\x1b[32m',\r\n yellow: '\\x1b[33m',\r\n blue: '\\x1b[34m',\r\n magenta: '\\x1b[35m',\r\n cyan: '\\x1b[36m',\r\n white: '\\x1b[37m',\r\n gray: '\\x1b[90m',\r\n // foreground — bright\r\n bred: '\\x1b[91m',\r\n bgreen: '\\x1b[92m',\r\n byellow: '\\x1b[93m',\r\n bblue: '\\x1b[94m',\r\n bmagenta:'\\x1b[95m',\r\n bcyan: '\\x1b[96m',\r\n bwhite: '\\x1b[97m',\r\n};\r\n\r\nconst paint = (code, s) => c() ? `${code}${s}${A.reset}` : s;\r\nconst dim = (s) => paint(A.dim, s);\r\nconst bold = (s) => paint(A.bold, s);\r\nconst gray = (s) => paint(A.gray, s);\r\nconst cyan = (s) => paint(A.cyan, s);\r\nconst green = (s) => paint(A.bgreen, s);\r\nconst red = (s) => paint(A.bred, s);\r\nconst yel = (s) => paint(A.byellow, s);\r\nconst mag = (s) => paint(A.bmagenta,s);\r\nconst wh = (s) => paint(A.bwhite, s);\r\n\r\nfunction stripAnsi(s) {\r\n // eslint-disable-next-line no-control-regex\r\n return s.replace(/\\x1b\\[[0-9;]*m/g, '');\r\n}\r\nconst visLen = (s) => stripAnsi(s).length;\r\n\r\n/* ─── bar renderer ───────────────────────────────────────────────────────── */\r\n\r\n/**\r\n * Render a horizontal progress / confidence bar.\r\n * @param {number} pct 0–1\r\n * @param {number} width character width of the bar\r\n * @param {string} fillCode ANSI color code for filled blocks\r\n */\r\nfunction bar(pct, width = 20, fillCode = A.bgreen) {\r\n const filled = Math.round(Math.min(1, Math.max(0, pct)) * width);\r\n const empty = width - filled;\r\n const fill = c() ? `${fillCode}${'█'.repeat(filled)}${A.reset}` : '█'.repeat(filled);\r\n const void_ = gray('░'.repeat(empty));\r\n return fill + void_;\r\n}\r\n\r\n/* ─── verdict badge ──────────────────────────────────────────────────────── */\r\n\r\nfunction verdictBadge(result) {\r\n if (!result) return gray(' PENDING ');\r\n const { valid, score, confidence } = result;\r\n\r\n if (valid && confidence === 'high') return green(' ✓ PASS ');\r\n if (valid && confidence === 'medium') return yel(' ⚠ PASS ');\r\n if (!valid && score < 0.3) return red(' ✗ BLOCKED ');\r\n return yel(' ⚠ REVIEW ');\r\n}\r\n\r\n/* ─── renderProbeResult ──────────────────────────────────────────────────── */\r\n\r\n/**\r\n * Print a formatted probe result card to stderr.\r\n *\r\n * @param {object} opts\r\n * @param {object} opts.payload - ProofPayload from pulse()\r\n * @param {string} opts.hash - BLAKE3 hex commitment\r\n * @param {object} [opts.result] - ValidationResult (server-side verify)\r\n * @param {object} [opts.enf] - EnfResult if available\r\n * @param {object} [opts.gpu] - GpuEntropyResult if available\r\n * @param {object} [opts.dram] - DramResult if available\r\n * @param {object} [opts.llm] - LlmResult if available\r\n * @param {number} [opts.elapsedMs] - total probe time\r\n */\r\nexport function renderProbeResult({ payload, hash, result, enf, gpu, dram, llm, elapsedMs }) {\r\n if (!c()) return;\r\n\r\n const W = 54;\r\n const hr = gray('─'.repeat(W));\r\n const vbar = gray('│');\r\n\r\n const row = (label, value, valueColor = A.bwhite) => {\r\n const lbl = gray(label.padEnd(24));\r\n const val = c() ? `${valueColor}${value}${A.reset}` : String(value);\r\n const line = ` ${lbl}${val}`;\r\n const pad = ' '.repeat(Math.max(0, W - visLen(line) - 2));\r\n process.stderr.write(`${vbar}${line}${pad} ${vbar}\\n`);\r\n };\r\n\r\n const blank = () => {\r\n process.stderr.write(`${vbar}${' '.repeat(W + 2)}${vbar}\\n`);\r\n };\r\n\r\n const section = (title) => {\r\n const t = ` ${bold(title)}`;\r\n const pad = ' '.repeat(Math.max(0, W - visLen(t) - 2));\r\n process.stderr.write(`${vbar}${t}${pad} ${vbar}\\n`);\r\n };\r\n\r\n const badge = verdictBadge(result);\r\n const hashShort = hash ? hash.slice(0, 16) + '…' : 'pending';\r\n const elapsed = elapsedMs ? `${(elapsedMs / 1000).toFixed(2)}s` : '—';\r\n\r\n const sigs = payload?.signals ?? {};\r\n const cls = payload?.classification ?? {};\r\n const jScore = cls.jitterScore ?? 0;\r\n\r\n // ── Physics signals ──────────────────────────────────────────────────────\r\n const qe = sigs.entropy?.quantizationEntropy ?? 0;\r\n const hurst = sigs.entropy?.hurstExponent ?? 0;\r\n const cv = sigs.entropy?.timingsCV ?? 0;\r\n const ejrClass = qe >= 1.08 ? A.bgreen : qe >= 0.95 ? A.byellow : A.bred;\r\n const hwConf = result?.confidence === 'high' ? 1.0 : result?.confidence === 'medium' ? 0.65 : 0.3;\r\n const vmConf = 1 - hwConf;\r\n\r\n // ── ENF signals ──────────────────────────────────────────────────────────\r\n const enfRegion = enf?.gridRegion === 'americas' ? '60 Hz Americas'\r\n : enf?.gridRegion === 'emea_apac' ? '50 Hz EMEA/APAC'\r\n : enf?.enfAvailable === false ? 'unavailable'\r\n : '—';\r\n const enfColor = enf?.ripplePresent ? A.bgreen : enf?.enfAvailable === false ? A.gray : A.byellow;\r\n\r\n // ── GPU signals ──────────────────────────────────────────────────────────\r\n const gpuStr = gpu?.gpuPresent\r\n ? (gpu.isSoftware ? red('Software renderer') : green(gpu.vendorString ?? 'GPU detected'))\r\n : gray('unavailable');\r\n\r\n // ── DRAM signals ─────────────────────────────────────────────────────────\r\n const dramStr = dram?.refreshPresent\r\n ? green(`${(dram.refreshPeriodMs ?? 0).toFixed(1)} ms (DDR4 JEDEC ✓)`)\r\n : dram ? red('No refresh cycle (VM)') : gray('unavailable');\r\n\r\n // ── LLM signals ──────────────────────────────────────────────────────────\r\n const llmStr = llm\r\n ? (llm.aiConf > 0.7 ? red(`AI agent ${(llm.aiConf * 100).toFixed(0)}%`) : green(`Human ${((1 - llm.aiConf) * 100).toFixed(0)}%`))\r\n : gray('no bio data');\r\n\r\n // ── Render ───────────────────────────────────────────────────────────────\r\n const topTitle = ` ${mag('SVRN')}${wh(':PULSE')} ${badge}`;\r\n const topPad = ' '.repeat(Math.max(0, W - visLen(topTitle) - 2));\r\n const topBorder = gray('╭' + '─'.repeat(W + 2) + '╮');\r\n const botBorder = gray('╰' + '─'.repeat(W + 2) + '╯');\r\n\r\n process.stderr.write('\\n');\r\n process.stderr.write(topBorder + '\\n');\r\n process.stderr.write(`${vbar}${topTitle}${topPad} ${vbar}\\n`);\r\n process.stderr.write(gray('├' + '─'.repeat(W + 2) + '┤') + '\\n');\r\n blank();\r\n\r\n section('PHYSICS LAYER');\r\n blank();\r\n row('Jitter score', (jScore * 100).toFixed(1) + '%', jScore > 0.7 ? A.bgreen : jScore > 0.45 ? A.byellow : A.bred);\r\n row('QE (entropy)', qe.toFixed(3), ejrClass);\r\n row('Hurst exponent', hurst.toFixed(4), Math.abs(hurst - 0.5) < 0.1 ? A.bgreen : A.byellow);\r\n row('Timing CV', cv.toFixed(4), cv > 0.08 ? A.bgreen : A.byellow);\r\n row('Timer granularity',`${((sigs.entropy?.timerGranularityMs ?? 0) * 1000).toFixed(1)} µs`, A.bcyan);\r\n blank();\r\n\r\n const hwBar = bar(hwConf, 18, A.bgreen);\r\n const vmBar = bar(vmConf, 18, A.bred);\r\n row('HW confidence', hwBar + ' ' + (hwConf * 100).toFixed(0) + '%');\r\n row('VM confidence', vmBar + ' ' + (vmConf * 100).toFixed(0) + '%');\r\n\r\n blank();\r\n process.stderr.write(gray('├' + '─'.repeat(W + 2) + '┤') + '\\n');\r\n blank();\r\n\r\n section('SIGNAL LAYERS');\r\n blank();\r\n row('Grid (ENF)', enfRegion, enfColor);\r\n process.stderr.write(`${vbar} ${gray('GPU (thermal)')}${' '.repeat(10)}${gpuStr} ${vbar}\\n`);\r\n process.stderr.write(`${vbar} ${gray('DRAM refresh')} ${' '.repeat(11)}${dramStr} ${vbar}\\n`);\r\n process.stderr.write(`${vbar} ${gray('Behavioral (LLM)')}${' '.repeat(7)}${llmStr} ${vbar}\\n`);\r\n\r\n blank();\r\n process.stderr.write(gray('├' + '─'.repeat(W + 2) + '┤') + '\\n');\r\n blank();\r\n\r\n section('PROOF');\r\n blank();\r\n row('BLAKE3', hashShort, A.bcyan);\r\n row('Nonce', (payload?.nonce ?? '').slice(0, 16) + '…', A.gray);\r\n row('Elapsed', elapsed, A.gray);\r\n if (result) {\r\n row('Server verdict', result.valid ? 'valid' : 'rejected', result.valid ? A.bgreen : A.bred);\r\n row('Score', ((result.score ?? 0) * 100).toFixed(1) + '%', A.bwhite);\r\n if ((result.riskFlags ?? []).length > 0) {\r\n blank();\r\n row('Risk flags', result.riskFlags.join(', '), A.byellow);\r\n }\r\n }\r\n blank();\r\n process.stderr.write(botBorder + '\\n\\n');\r\n}\r\n\r\n/* ─── renderError ────────────────────────────────────────────────────────── */\r\n\r\n/**\r\n * Print a formatted error card for pulse() failures.\r\n * @param {Error|string} err\r\n */\r\nexport function renderError(err) {\r\n if (!c()) return;\r\n const msg = err?.message ?? String(err);\r\n const W = 54;\r\n const vbar = gray('│');\r\n\r\n process.stderr.write('\\n');\r\n process.stderr.write(red('╭' + '─'.repeat(W + 2) + '╮') + '\\n');\r\n process.stderr.write(`${red('│')} ${red('✗')} ${bold('SVRN:PULSE — probe failed')}${' '.repeat(Math.max(0, W - 28))} ${red('│')}\\n`);\r\n process.stderr.write(red('├' + '─'.repeat(W + 2) + '┤') + '\\n');\r\n process.stderr.write(`${vbar} ${gray(msg.slice(0, W - 2).padEnd(W))} ${vbar}\\n`);\r\n process.stderr.write(red('╰' + '─'.repeat(W + 2) + '╯') + '\\n\\n');\r\n}\r\n\r\n/* ─── renderUpdateBanner ─────────────────────────────────────────────────── */\r\n\r\n/**\r\n * Render a simple one-line update available hint inline (used by middleware).\r\n * @param {string} latest\r\n */\r\nexport function renderInlineUpdateHint(latest) {\r\n if (!c()) return;\r\n process.stderr.write(\r\n gray(' ╴╴╴ ') +\r\n yel('update available ') +\r\n gray(latest) +\r\n ' ' + cyan('npm i @svrnsec/pulse@latest') +\r\n gray(' ╴╴╴') +\r\n '\\n'\r\n );\r\n}\r\n","/**\n * @svrnsec/pulse — Structured Error Codes\n *\n * Use these constants instead of string matching for type-safe error handling.\n */\nexport const PulseErrorCode = Object.freeze({\n // Structural\n INVALID_PAYLOAD_STRUCTURE: 'INVALID_PAYLOAD_STRUCTURE',\n PROTOTYPE_POLLUTION_ATTEMPT: 'PROTOTYPE_POLLUTION_ATTEMPT',\n MISSING_REQUIRED_FIELD: 'MISSING_REQUIRED_FIELD',\n INVALID_TYPE: 'INVALID_TYPE',\n TIMESTAMP_OUT_OF_RANGE: 'TIMESTAMP_OUT_OF_RANGE',\n UNSUPPORTED_PROOF_VERSION: 'UNSUPPORTED_PROOF_VERSION',\n\n // Hash integrity\n INVALID_HASH_FORMAT: 'INVALID_HASH_FORMAT',\n HASH_MISMATCH_PAYLOAD_TAMPERED: 'HASH_MISMATCH_PAYLOAD_TAMPERED',\n\n // Timestamp / freshness\n PROOF_EXPIRED: 'PROOF_EXPIRED',\n PROOF_FROM_FUTURE: 'PROOF_FROM_FUTURE',\n NONCE_INVALID_OR_REPLAYED: 'NONCE_INVALID_OR_REPLAYED',\n\n // Jitter / scoring\n JITTER_SCORE_TOO_LOW: 'JITTER_SCORE_TOO_LOW',\n DYNAMIC_THRESHOLD_NOT_MET: 'DYNAMIC_THRESHOLD_NOT_MET',\n\n // Heuristic / coherence overrides\n HEURISTIC_HARD_OVERRIDE: 'HEURISTIC_HARD_OVERRIDE',\n COHERENCE_HARD_OVERRIDE: 'COHERENCE_HARD_OVERRIDE',\n\n // Renderer\n SOFTWARE_RENDERER_DETECTED: 'SOFTWARE_RENDERER_DETECTED',\n BLOCKLISTED_RENDERER: 'BLOCKLISTED_RENDERER',\n\n // Bio activity\n NO_BIO_ACTIVITY_DETECTED: 'NO_BIO_ACTIVITY_DETECTED',\n\n // Cross-signal forgery detection\n FORGED_SIGNAL_CV_SCORE_IMPOSSIBLE: 'FORGED_SIGNAL:CV_SCORE_IMPOSSIBLE',\n FORGED_SIGNAL_AUTOCORR_SCORE_IMPOSSIBLE: 'FORGED_SIGNAL:AUTOCORR_SCORE_IMPOSSIBLE',\n FORGED_SIGNAL_QE_SCORE_IMPOSSIBLE: 'FORGED_SIGNAL:QE_SCORE_IMPOSSIBLE',\n\n // Risk flags (informational, not rejection reasons)\n NONCE_FRESHNESS_NOT_CHECKED: 'NONCE_FRESHNESS_NOT_CHECKED',\n CANVAS_UNAVAILABLE: 'CANVAS_UNAVAILABLE',\n ZERO_BIO_SAMPLES: 'ZERO_BIO_SAMPLES',\n NEGATIVE_INTERFERENCE_COEFFICIENT: 'NEGATIVE_INTERFERENCE_COEFFICIENT',\n INCONSISTENCY_LOW_CV_BUT_HIGH_SCORE: 'INCONSISTENCY:LOW_CV_BUT_HIGH_SCORE',\n SUSPICIOUS_ZERO_TIMER_GRANULARITY: 'SUSPICIOUS_ZERO_TIMER_GRANULARITY',\n INCONSISTENCY_FLAT_THERMAL_BUT_HIGH_SCORE: 'INCONSISTENCY:FLAT_THERMAL_BUT_HIGH_SCORE',\n EXTREME_HURST: 'EXTREME_HURST',\n AUDIO_JITTER_TOO_FLAT: 'AUDIO_JITTER_TOO_FLAT',\n});\n","/**\r\n * @svrnsec/pulse\r\n *\r\n * Physical Turing Test — distinguishes a real consumer device with a human\r\n * operator from a sanitised Datacenter VM / AI Instance.\r\n *\r\n * Usage (client-side):\r\n *\r\n * import { pulse } from '@svrnsec/pulse';\r\n *\r\n * // 1. Get a server-issued nonce (prevents replay attacks)\r\n * const { nonce } = await fetch('/api/pulse-challenge').then(r => r.json());\r\n *\r\n * // 2. Run the probe (takes ~3-5 seconds)\r\n * const { payload, hash } = await pulse({ nonce });\r\n *\r\n * // 3. Send to your server\r\n * const verdict = await fetch('/api/pulse-verify', {\r\n * method: 'POST',\r\n * body: JSON.stringify({ payload, hash }),\r\n * }).then(r => r.json());\r\n *\r\n * Usage (server-side):\r\n *\r\n * import { validateProof, generateNonce } from '@svrnsec/pulse/validator';\r\n *\r\n * // Challenge endpoint\r\n * app.get('/api/pulse-challenge', (req, res) => {\r\n * const nonce = generateNonce();\r\n * await redis.set(`pulse:nonce:${nonce}`, '1', 'EX', 300); // 5-min TTL\r\n * res.json({ nonce });\r\n * });\r\n *\r\n * // Verify endpoint\r\n * app.post('/api/pulse-verify', async (req, res) => {\r\n * const { payload, hash } = req.body;\r\n * const result = await validateProof(payload, hash, {\r\n * checkNonce: async (n) => {\r\n * const ok = await redis.del(`pulse:nonce:${n}`);\r\n * return ok === 1; // true only if nonce existed and was consumed\r\n * },\r\n * });\r\n * res.json(result);\r\n * });\r\n */\r\n\r\nimport { collectEntropy } from './collector/entropy.js';\r\nimport { BioCollector } from './collector/bio.js';\r\nimport { collectCanvasFingerprint } from './collector/canvas.js';\r\nimport { collectAudioJitter } from './analysis/audio.js';\r\nimport { classifyJitter } from './analysis/jitter.js';\r\nimport { buildProof, buildCommitment } from './proof/fingerprint.js';\r\nimport { collectGpuEntropy } from './collector/gpu.js';\r\nimport { collectDramTimings } from './collector/dram.js';\r\nimport { collectEnfTimings } from './collector/enf.js';\r\nimport { detectLlmAgent } from './analysis/llm.js';\r\nimport { notifyOnExit } from './update-notifier.js';\r\n\r\n// Register background update check — fires once at process startup.\r\n// Shows a styled notification box after the process exits if a newer version\r\n// is available. No-op in browser environments and non-TTY outputs.\r\nnotifyOnExit();\r\n\r\n// ---------------------------------------------------------------------------\r\n// Hosted API mode — pulse({ apiKey }) with zero server setup\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Run pulse() against the sovereign hosted API.\r\n * Fetches nonce, runs probe locally (WASM still on device), submits proof.\r\n *\r\n * @param {object} opts — same as pulse(), plus apiKey + apiUrl\r\n * @returns {Promise<{ payload, hash, result }>}\r\n */\r\nasync function _pulseHosted(opts) {\r\n const {\r\n apiKey,\r\n apiUrl = 'https://api.sovereign.dev',\r\n iterations = 200,\r\n matrixSize = 64,\r\n bioWindowMs = 3_000,\r\n phased = true,\r\n adaptive = true,\r\n adaptiveThreshold = 0.85,\r\n requireBio = false,\r\n wasmPath,\r\n onProgress,\r\n verifyOptions = {},\r\n } = opts;\r\n\r\n // 1. Fetch nonce from hosted challenge endpoint\r\n const challengeRes = await fetch(`${apiUrl}/v1/challenge`, {\r\n headers: { 'Authorization': `Bearer ${apiKey}` },\r\n });\r\n if (!challengeRes.ok) {\r\n const body = await challengeRes.json().catch(() => ({}));\r\n throw new Error(`[pulse] Challenge failed (${challengeRes.status}): ${body.message ?? 'unknown error'}`);\r\n }\r\n const { nonce } = await challengeRes.json();\r\n\r\n // 2. Run the local probe (WASM, bio, canvas, audio — all on device)\r\n const commitment = await _runProbe({\r\n nonce, iterations, matrixSize, bioWindowMs,\r\n phased, adaptive, adaptiveThreshold, requireBio,\r\n wasmPath, onProgress,\r\n });\r\n\r\n // 3. Submit proof to hosted verify endpoint\r\n const verifyRes = await fetch(`${apiUrl}/v1/verify`, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${apiKey}`,\r\n },\r\n body: JSON.stringify({\r\n payload: commitment.payload,\r\n hash: commitment.hash,\r\n options: verifyOptions,\r\n }),\r\n });\r\n\r\n const result = await verifyRes.json();\r\n\r\n // Return commitment + server result for convenience\r\n return { ...commitment, result };\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// pulse() — main entry point\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Run the full @svrnsec/pulse probe and return a signed commitment.\r\n *\r\n * Two modes:\r\n * - pulse({ nonce }) — self-hosted (you manage the nonce server)\r\n * - pulse({ apiKey }) — hosted API (zero server setup required)\r\n *\r\n * @param {PulseOptions} opts\r\n * @returns {Promise<PulseCommitment>}\r\n */\r\nexport async function pulse(opts = {}) {\r\n // ── Hosted API mode ────────────────────────────────────────────────────────\r\n if (opts.apiKey) {\r\n return _pulseHosted(opts);\r\n }\r\n\r\n // ── Self-hosted mode ───────────────────────────────────────────────────────\r\n const { nonce } = opts;\r\n if (!nonce || typeof nonce !== 'string') {\r\n throw new Error(\r\n '@svrnsec/pulse: opts.nonce is required (self-hosted), or pass opts.apiKey for zero-config hosted mode.'\r\n );\r\n }\r\n\r\n return _runProbe(opts);\r\n}\r\n\r\n/**\r\n * Internal probe runner — shared between self-hosted and hosted API modes.\r\n * @private\r\n */\r\nasync function _runProbe(opts) {\r\n const {\r\n nonce,\r\n timeout = 8_000,\r\n iterations = 200,\r\n matrixSize = 64,\r\n bioWindowMs = 3_000,\r\n phased = true,\r\n adaptive = true,\r\n adaptiveThreshold = 0.85,\r\n requireBio = false,\r\n wasmPath,\r\n onProgress,\r\n } = opts;\r\n\r\n _emit(onProgress, 'start');\r\n\r\n // ── Phase 1: Start bio collector immediately (collects events over time) ──\r\n const bio = new BioCollector();\r\n bio.start();\r\n\r\n // ── Phase 2: Parallel collection ──────────────────────────────────────────\r\n const raceTimeout = new Promise((_, reject) =>\r\n setTimeout(() => reject(new Error('pulse() timed out')), timeout)\r\n );\r\n\r\n let entropyResult, canvasResult, audioResult;\r\n\r\n try {\r\n [entropyResult, canvasResult, audioResult] = await Promise.race([\r\n Promise.all([\r\n collectEntropy({\r\n iterations, matrixSize, phased, adaptive, adaptiveThreshold, wasmPath,\r\n onBatch: (meta) => _emit(onProgress, 'entropy_batch', meta),\r\n }).then(r => { _emit(onProgress, 'entropy_done'); return r; }),\r\n collectCanvasFingerprint()\r\n .then(r => { _emit(onProgress, 'canvas_done'); return r; }),\r\n collectAudioJitter({ durationMs: Math.min(bioWindowMs, 2_000) })\r\n .then(r => { _emit(onProgress, 'audio_done'); return r; }),\r\n ]),\r\n raceTimeout,\r\n ]);\r\n } catch (err) {\r\n bio.stop();\r\n throw err;\r\n }\r\n\r\n // ── Phase 3: Bio snapshot ─────────────────────────────────────────────────\r\n const bioElapsed = Date.now() - entropyResult.collectedAt;\r\n const bioRemain = Math.max(0, bioWindowMs - bioElapsed);\r\n if (bioRemain > 0) await _sleep(bioRemain);\r\n\r\n bio.stop();\r\n const bioSnapshot = bio.snapshot(entropyResult.timings);\r\n\r\n if (requireBio && !bioSnapshot.hasActivity) {\r\n throw new Error('@svrnsec/pulse: no bio activity detected (requireBio=true)');\r\n }\r\n\r\n _emit(onProgress, 'bio_done');\r\n\r\n // ── Phase 4: Extended signal collection (non-blocking, best-effort) ───────\r\n // ENF, GPU, DRAM, and LLM detectors run in parallel after the core probe.\r\n // Each gracefully returns a null/unavailable result if the environment does\r\n // not support it (e.g. no WebGPU, no SharedArrayBuffer, no bio events).\r\n const [enfResult, gpuResult, dramResult, llmResult] = await Promise.all([\r\n collectEnfTimings().catch(() => null),\r\n collectGpuEntropy().catch(() => null),\r\n Promise.resolve(collectDramTimings()).catch(() => null),\r\n Promise.resolve(detectLlmAgent(bioSnapshot)).catch(() => null),\r\n ]);\r\n\r\n _emit(onProgress, 'extended_done', {\r\n enf: enfResult?.verdict,\r\n gpu: gpuResult?.verdict,\r\n dram: dramResult?.verdict,\r\n llm: llmResult?.aiConf,\r\n });\r\n\r\n // ── Phase 5: Jitter analysis ───────────────────────────────────────────────\r\n const jitterAnalysis = classifyJitter(entropyResult.timings, {\r\n autocorrelations: entropyResult.autocorrelations,\r\n });\r\n\r\n _emit(onProgress, 'analysis_done');\r\n\r\n // ── Phase 6: Build proof & commitment ─────────────────────────────────────\r\n const payload = buildProof({\r\n entropy: entropyResult,\r\n jitter: jitterAnalysis,\r\n bio: bioSnapshot,\r\n canvas: canvasResult,\r\n audio: audioResult,\r\n enf: enfResult,\r\n gpu: gpuResult,\r\n dram: dramResult,\r\n llm: llmResult,\r\n nonce,\r\n });\r\n\r\n const commitment = buildCommitment(payload);\r\n\r\n _emit(onProgress, 'complete', {\r\n score: jitterAnalysis.score,\r\n confidence: _scoreToLabel(jitterAnalysis.score),\r\n flags: jitterAnalysis.flags,\r\n enf: enfResult?.verdict,\r\n gpu: gpuResult?.verdict,\r\n dram: dramResult?.verdict,\r\n llmConf: llmResult?.aiConf ?? null,\r\n });\r\n\r\n return { ...commitment, extended: { enf: enfResult, gpu: gpuResult, dram: dramResult, llm: llmResult } };\r\n}\r\n\r\n/**\r\n * @typedef {object} PulseOptions\r\n * @property {string} nonce - server-issued challenge nonce (required)\r\n * @property {number} [timeout=6000] - max ms before throwing\r\n * @property {number} [iterations=200]\r\n * @property {number} [matrixSize=64]\r\n * @property {number} [bioWindowMs=3000]\r\n * @property {boolean} [requireBio=false]\r\n * @property {string} [wasmPath] - custom WASM binary URL/path\r\n * @property {Function} [onProgress] - callback(stage, meta?) for progress events\r\n */\r\n\r\n/**\r\n * @typedef {object} PulseCommitment\r\n * @property {import('./proof/fingerprint.js').ProofPayload} payload\r\n * @property {string} hash - hex BLAKE3 commitment\r\n */\r\n\r\n// ---------------------------------------------------------------------------\r\n// Re-exports for convenience\r\n// ---------------------------------------------------------------------------\r\n\r\n// High-level developer API (the easiest way to use this package)\r\nexport { Fingerprint } from './fingerprint.js';\r\n\r\n// Analysis modules for advanced / custom integrations\r\nexport { runHeuristicEngine } from './analysis/heuristic.js';\r\nexport { detectProvider } from './analysis/provider.js';\r\n\r\n// Server-side validation\r\nexport { generateNonce } from './proof/validator.js';\r\nexport { validateProof } from './proof/validator.js';\r\n\r\n// Extended signal collectors (also available as named sub-path exports)\r\nexport { collectGpuEntropy } from './collector/gpu.js';\r\nexport { collectDramTimings } from './collector/dram.js';\r\nexport { collectEnfTimings } from './collector/enf.js';\r\nexport { detectLlmAgent } from './analysis/llm.js';\r\n\r\n// Terminal utilities — pretty probe results in Node.js server contexts\r\nexport { renderProbeResult, renderError, renderInlineUpdateHint } from './terminal.js';\r\n\r\n// Structured error codes\r\nexport { PulseErrorCode } from './errors.js';\r\n\r\n// Version introspection\r\nexport { CURRENT_VERSION, checkForUpdate } from './update-notifier.js';\r\n\r\n// ---------------------------------------------------------------------------\r\n// Internal helpers\r\n// ---------------------------------------------------------------------------\r\n\r\nfunction _sleep(ms) {\r\n return new Promise(r => setTimeout(r, ms));\r\n}\r\n\r\nfunction _emit(fn, stage, meta = {}) {\r\n if (typeof fn === 'function') {\r\n try { fn(stage, meta); } catch (_) {}\r\n }\r\n}\r\n\r\nfunction _scoreToLabel(score) {\r\n if (score >= 0.75) return 'high';\r\n if (score >= 0.55) return 'medium';\r\n if (score >= 0.35) return 'low';\r\n return 'rejected';\r\n}\r\n","/**\r\n * pulse_core — pure-JavaScript probe engine\r\n *\r\n * This module ships the entropy probe as portable JS so the package works\r\n * out-of-the-box without a Rust toolchain. When a compiled .wasm binary is\r\n * present (dropped in via `build.sh`) this file is replaced by the wasm-pack\r\n * output and the native engine runs instead.\r\n *\r\n * Physics model\r\n * ─────────────\r\n * Real silicon: DRAM refresh cycles, branch-predictor misses, and L3-cache\r\n * evictions inject sub-microsecond noise into any tight compute loop.\r\n * Hypervisors virtualise the TSC and smooth those interrupts out, leaving\r\n * a near-flat timing distribution that our QE/EJR checks catch.\r\n *\r\n * The JS loop below is a faithful port of the Rust matrix-multiply probe:\r\n * same work unit (N×N DGEMM-style loop), same checksum accumulation to\r\n * prevent dead-code elimination, same resolution micro-probe.\r\n */\r\n\r\n/* ─── clock ─────────────────────────────────────────────────────────────── */\r\n\r\nconst _now = (typeof performance !== 'undefined' && typeof performance.now === 'function')\r\n ? () => performance.now()\r\n : (() => {\r\n // Node.js fallback: process.hrtime.bigint() → milliseconds\r\n const _hr = process.hrtime.bigint;\r\n return () => Number(_hr()) / 1_000_000;\r\n })();\r\n\r\n/* ─── init (no-op for the JS engine) ───────────────────────────────────── */\r\n\r\n/**\r\n * Initialise the engine. When a real .wasm binary is supplied the wasm-pack\r\n * glue calls WebAssembly.instantiateStreaming here. The JS engine is already\r\n * \"compiled\", so we return immediately.\r\n *\r\n * @param {string|URL|Request|BufferSource|WebAssembly.Module} [_source]\r\n * @returns {Promise<void>}\r\n */\r\nexport default async function init(_source) {\r\n // JS engine is ready synchronously — nothing to stream or compile.\r\n}\r\n\r\n/* ─── run_entropy_probe ─────────────────────────────────────────────────── */\r\n\r\n/**\r\n * Run N iterations of a matrix-multiply work unit and record wall-clock time\r\n * per iteration. The distribution of those times is what the heuristic\r\n * engine analyses.\r\n *\r\n * @param {number} iterations – number of timing samples to collect\r\n * @param {number} matrixSize – N for the N×N multiply (default 64)\r\n * @returns {{ timings: Float64Array, checksum: number, resolution_probe: Float64Array }}\r\n */\r\nexport function run_entropy_probe(iterations, matrixSize = 64) {\r\n const N = matrixSize | 0;\r\n\r\n // Persistent working matrices — allocated once per probe to avoid GC noise.\r\n const A = new Float64Array(N * N);\r\n const B = new Float64Array(N * N);\r\n const C = new Float64Array(N * N);\r\n\r\n // Seed matrices with pseudo-random data (deterministic per call for\r\n // reproducibility, but different each run due to xorshift seeding from time).\r\n // Zero-seed protection: xorshift has 0 as a fixed point, so we fall back to 0xdeadbeef if _now() truncates to 0\r\n let seed = (_now() * 1e6) | 0 || 0xdeadbeef;\r\n const xr = () => { seed ^= seed << 13; seed ^= seed >> 17; seed ^= seed << 5; return (seed >>> 0) / 4294967296; };\r\n for (let i = 0; i < N * N; i++) { A[i] = xr(); B[i] = xr(); }\r\n\r\n const timings = new Float64Array(iterations);\r\n const resolution_probe = new Float64Array(32);\r\n let checksum = 0;\r\n\r\n for (let iter = 0; iter < iterations; iter++) {\r\n // Zero accumulator each round (realistic cache pressure).\r\n C.fill(0);\r\n\r\n const t0 = _now();\r\n\r\n // N×N matrix multiply: C = A · B (ikj loop order for cache friendliness)\r\n for (let i = 0; i < N; i++) {\r\n const rowA = i * N;\r\n const rowC = i * N;\r\n for (let k = 0; k < N; k++) {\r\n const aik = A[rowA + k];\r\n const rowBk = k * N;\r\n for (let j = 0; j < N; j++) {\r\n C[rowC + j] += aik * B[rowBk + j];\r\n }\r\n }\r\n }\r\n\r\n const t1 = _now();\r\n timings[iter] = t1 - t0;\r\n\r\n // Accumulate one element so the compiler cannot eliminate the work.\r\n checksum += C[0];\r\n }\r\n\r\n // Resolution micro-probe: fire 32 back-to-back timestamps.\r\n // The minimum non-zero delta reveals timer granularity.\r\n for (let i = 0; i < resolution_probe.length; i++) {\r\n resolution_probe[i] = _now();\r\n }\r\n\r\n return { timings, checksum, resolution_probe };\r\n}\r\n\r\n/* ─── run_memory_probe ──────────────────────────────────────────────────── */\r\n\r\n/**\r\n * Sequential read/write bandwidth probe over a large buffer.\r\n * Memory latency variance is a secondary signal (NUMA, DRAM refresh).\r\n *\r\n * @param {number} memSizeKb – buffer size in kibibytes\r\n * @param {number} memIterations\r\n * @returns {{ timings: Float64Array, checksum: number }}\r\n */\r\nexport function run_memory_probe(memSizeKb = 512, memIterations = 50) {\r\n const len = (memSizeKb * 1024 / 8) | 0; // 64-bit elements\r\n const buf = new Float64Array(len);\r\n const timings = new Float64Array(memIterations);\r\n let checksum = 0;\r\n\r\n // Warm-up pass (fills TLB, avoids first-access bias)\r\n for (let i = 0; i < len; i++) buf[i] = i;\r\n\r\n for (let iter = 0; iter < memIterations; iter++) {\r\n const t0 = _now();\r\n // Sequential read-modify-write\r\n for (let i = 0; i < len; i++) buf[i] = buf[i] * 1.0000001;\r\n const t1 = _now();\r\n\r\n timings[iter] = t1 - t0;\r\n checksum += buf[0];\r\n }\r\n\r\n return { timings, checksum };\r\n}\r\n\r\n/* ─── compute_autocorrelation ───────────────────────────────────────────── */\r\n\r\n/**\r\n * Pearson autocorrelation for lags 1..maxLag.\r\n * O(n·maxLag) — kept cheap by the adaptive early-exit cap.\r\n *\r\n * @param {ArrayLike<number>} data\r\n * @param {number} maxLag\r\n * @returns {Float64Array} length = maxLag, index 0 = lag-1\r\n */\r\nexport function compute_autocorrelation(data, maxLag) {\r\n const n = data.length;\r\n let mean = 0;\r\n for (let i = 0; i < n; i++) mean += data[i];\r\n mean /= n;\r\n\r\n let variance = 0;\r\n for (let i = 0; i < n; i++) variance += (data[i] - mean) ** 2;\r\n variance /= n;\r\n\r\n const result = new Float64Array(maxLag);\r\n if (variance < 1e-14) return result; // degenerate — all identical\r\n\r\n for (let lag = 1; lag <= maxLag; lag++) {\r\n let cov = 0;\r\n for (let i = 0; i < n - lag; i++) {\r\n cov += (data[i] - mean) * (data[i + lag] - mean);\r\n }\r\n result[lag - 1] = cov / ((n - lag) * variance);\r\n }\r\n\r\n return result;\r\n}\r\n"],"names":["_mean","_cv","_percentile","_round","SOFTWARE_RENDERER_PATTERNS","_std","PROBE_ITERATIONS","_bandPower","require","createRequire","isTTY","c","_empty","timingSafeEqual","randomFillSync"],"mappings":"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AAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACvF,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACvF,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACvF,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACvF,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACvF,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACvF,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACvF,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACvF,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACrF,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACrF,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACrF,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,EAAE,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EAAE,CAAC;AAC3B;;AC5LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA,MAAM,iBAAiB,KAAK,IAAI,CAAC;AACjC,MAAM,iBAAiB,KAAK,IAAI,CAAC;AACjC,MAAM,WAAW,WAAW,KAAK,CAAC;AAClC,MAAM,WAAW,WAAW,KAAK,CAAC;AAClC,MAAM,eAAe,OAAO,GAAG,CAAC;AAChC,MAAM,gBAAgB,MAAM,IAAI,CAAC;AACjC,MAAM,aAAa,SAAS,GAAG,CAAC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,gBAAgB,MAAM,GAAG,CAAC;AAChC,MAAM,iBAAiB,KAAK,EAAE,CAAC;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAe,iBAAiB,CAAC,IAAI,GAAG,EAAE,EAAE;AACnD,EAAE,MAAM,EAAE,UAAU,GAAG,gBAAgB,EAAE,GAAG,IAAI,CAAC;AACjD;AACA,EAAE,IAAI,CAAC,cAAc,EAAE,EAAE;AACzB,IAAI,OAAO,MAAM,CAAC,8DAA8D,CAAC,CAAC;AAClF,EAAE,CAAC;AACH;AACA;AACA,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,qBAAqB,CAAC;AAC1D,IAAI,UAAU;AACd,IAAI,UAAU,EAAE,iBAAiB;AACjC,GAAG,CAAC,CAAC;AACL;AACA,EAAE,IAAI,OAAO,CAAC,MAAM,GAAG,GAAG,EAAE;AAC5B,IAAI,OAAO,MAAM,CAAC,6BAA6B,CAAC,CAAC;AACjD,EAAE,CAA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","x_google_ignoreList":[4,5,6,7,8,9]}
|