yakmesh 2.9.0 → 3.0.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/CHANGELOG.md +637 -0
- package/Caddyfile +77 -0
- package/README.md +119 -29
- package/content/api.js +50 -41
- package/content/index.js +1 -2
- package/content/store.js +323 -177
- package/dashboard/index.html +19 -3
- package/database/replication.js +117 -37
- package/docs/CRYPTO-AGILITY.md +204 -0
- package/docs/MTLS-RESEARCH.md +367 -0
- package/docs/NAMCHE-SPEC.md +681 -0
- package/docs/PEERQUANTA-YAKMESH-INTEGRATION.md +407 -0
- package/docs/PRECISION-DISCLOSURE.md +96 -0
- package/docs/README.md +76 -0
- package/docs/ROADMAP-2.4.0.md +447 -0
- package/docs/ROADMAP-2.5.0.md +244 -0
- package/docs/SECURITY-AUDIT-REPORT.md +306 -0
- package/docs/SST-INTEGRATION.md +712 -0
- package/docs/STEADYWATCH-IMPLEMENTATION.md +303 -0
- package/docs/TERNARY-AUDIT-REPORT.md +247 -0
- package/docs/TME-FAQ.md +221 -0
- package/docs/WHITEPAPER.md +623 -0
- package/docs/adapters.html +1001 -0
- package/docs/advanced-systems.html +1045 -0
- package/docs/annex.html +1046 -0
- package/docs/api.html +970 -0
- package/docs/business/response-templates.md +160 -0
- package/docs/c2c.html +1225 -0
- package/docs/cli.html +1332 -0
- package/docs/configuration.html +1248 -0
- package/docs/darshan.html +1085 -0
- package/docs/dharma.html +966 -0
- package/docs/docs-bundle.html +1075 -0
- package/docs/docs.css +3120 -0
- package/docs/docs.js +556 -0
- package/docs/doko.html +969 -0
- package/docs/geo-proof.html +858 -0
- package/docs/getting-started.html +840 -0
- package/docs/gumba-tutorial.html +1144 -0
- package/docs/gumba.html +1098 -0
- package/docs/index.html +914 -0
- package/docs/jhilke.html +1312 -0
- package/docs/karma.html +1100 -0
- package/docs/katha.html +1037 -0
- package/docs/lama.html +978 -0
- package/docs/mandala.html +1067 -0
- package/docs/mani.html +964 -0
- package/docs/mantra.html +967 -0
- package/docs/mesh.html +1409 -0
- package/docs/nakpak.html +869 -0
- package/docs/namche.html +928 -0
- package/docs/nav-order.json +53 -0
- package/docs/prahari.html +1043 -0
- package/docs/prism-bash.min.js +1 -0
- package/docs/prism-javascript.min.js +1 -0
- package/docs/prism-json.min.js +1 -0
- package/docs/prism-tomorrow.min.css +1 -0
- package/docs/prism.min.js +1 -0
- package/docs/privacy.html +699 -0
- package/docs/quick-reference.html +1181 -0
- package/docs/sakshi.html +1402 -0
- package/docs/sandboxing.md +386 -0
- package/docs/seva.html +911 -0
- package/docs/sherpa.html +871 -0
- package/docs/studio.html +860 -0
- package/docs/stupa.html +995 -0
- package/docs/tailwind.min.css +2 -0
- package/docs/tattva.html +1332 -0
- package/docs/terms.html +686 -0
- package/docs/time-server-deployment.md +166 -0
- package/docs/time-sources.html +1392 -0
- package/docs/tivra.html +1127 -0
- package/docs/trademark-policy.html +686 -0
- package/docs/tribhuj.html +1183 -0
- package/docs/trust-security.html +1029 -0
- package/docs/tutorials/backup-recovery.html +654 -0
- package/docs/tutorials/dashboard.html +604 -0
- package/docs/tutorials/domain-setup.html +605 -0
- package/docs/tutorials/host-website.html +456 -0
- package/docs/tutorials/mesh-network.html +505 -0
- package/docs/tutorials/mobile-access.html +445 -0
- package/docs/tutorials/privacy.html +467 -0
- package/docs/tutorials/raspberry-pi.html +600 -0
- package/docs/tutorials/security-basics.html +539 -0
- package/docs/tutorials/share-files.html +431 -0
- package/docs/tutorials/troubleshooting.html +637 -0
- package/docs/tutorials/trust-karma.html +419 -0
- package/docs/tutorials/yak-protocol.html +456 -0
- package/docs/tutorials.html +1034 -0
- package/docs/vani.html +1270 -0
- package/docs/webserver.html +809 -0
- package/docs/yak-protocol.html +940 -0
- package/docs/yak-timeserver-design.md +475 -0
- package/docs/yakapp.html +1015 -0
- package/docs/ypc27.html +1069 -0
- package/docs/yurt.html +1344 -0
- package/embedded-docs/bundle.js +274 -114
- package/gossip/protocol.js +247 -27
- package/identity/key-resolver.js +262 -0
- package/identity/machine-seed.js +632 -0
- package/identity/node-key.js +669 -368
- package/identity/tribhuj-ratchet.js +506 -0
- package/knowledge-base.js +37 -8
- package/launcher/yakmesh.bat +62 -0
- package/launcher/yakmesh.sh +70 -0
- package/mesh/annex.js +462 -108
- package/mesh/beacon-broadcast.js +4 -1
- package/mesh/darshan.js +17 -5
- package/mesh/gumba.js +47 -13
- package/mesh/jhilke.js +651 -0
- package/mesh/katha.js +5 -2
- package/mesh/nakpak-routing.js +8 -5
- package/mesh/network.js +724 -34
- package/mesh/pulse-sync.js +4 -1
- package/mesh/seva.js +526 -0
- package/mesh/sherpa-discovery.js +89 -8
- package/mesh/sybil-defense.js +19 -5
- package/mesh/temporal-encoder.js +4 -3
- package/mesh/yurt.js +72 -17
- package/models/entropy-sentinel.onnx +0 -0
- package/models/karma-trust.onnx +0 -0
- package/models/manifest.json +43 -0
- package/models/sakshi-anomaly.onnx +0 -0
- package/oracle/code-proof-protocol.js +7 -6
- package/oracle/codebase-lock.js +257 -28
- package/oracle/index.js +74 -15
- package/oracle/ma902-snmp.js +678 -0
- package/oracle/module-sealer.js +5 -3
- package/oracle/packet-checksum.js +201 -0
- package/oracle/ternary-144t.js +714 -0
- package/oracle/ternary-ml.js +481 -0
- package/oracle/time-api.js +239 -0
- package/oracle/time-source.js +137 -47
- package/oracle/validation-oracle-hardened.js +1111 -1071
- package/oracle/validation-oracle.js +4 -2
- package/oracle/ypc27.js +211 -0
- package/package.json +20 -3
- package/protocol/yak-handler.js +35 -9
- package/protocol/yak-protocol.js +6 -5
- package/reference/cpp/yakmesh_mceliece_shard.cpp +168 -0
- package/reference/cpp/yakmesh_ypc27.cpp +179 -0
- package/sbom.json +87 -0
- package/scripts/security-audit.mjs +264 -0
- package/scripts/update-docs-sidebar.cjs +164 -0
- package/security/crypto-config.js +4 -3
- package/security/dharma-moderation.js +4 -3
- package/security/doko-identity.js +193 -143
- package/security/domain-consensus.js +86 -85
- package/security/fs-hardening.js +620 -0
- package/security/hardware-attestation.js +5 -3
- package/security/hybrid-trust.js +227 -87
- package/security/karma-rate-limiter.js +692 -0
- package/security/khata-protocol.js +22 -21
- package/security/khata-trust-integration.js +277 -150
- package/security/memory-safety.js +635 -0
- package/security/mesh-auth.js +11 -10
- package/security/mesh-revocation.js +18 -5
- package/security/namche-gateway.js +298 -69
- package/security/sakshi.js +102 -3
- package/security/sangha.js +770 -0
- package/security/secure-config.js +473 -0
- package/security/silicon-parity.js +13 -10
- package/security/steadywatch.js +1142 -0
- package/security/strike-system.js +32 -3
- package/security/temporal-signing.js +488 -0
- package/security/trit-commitment.js +464 -0
- package/server/crypto/annex.js +247 -0
- package/server/darshan-api.js +343 -0
- package/server/index.js +3259 -362
- package/server/komm-api.js +668 -0
- package/utils/accel.js +2273 -0
- package/utils/ternary-id.js +79 -0
- package/utils/verify-worker.js +57 -0
- package/webserver/index.js +95 -5
- package/assets/yakmesh-logo.png +0 -0
- package/assets/yakmesh-logo.svg +0 -80
- package/assets/yakmesh-logo2.png +0 -0
- package/assets/yakmesh-logo2sm.png +0 -0
- package/assets/ymsm.png +0 -0
- package/scripts/update-docs-nav.cjs +0 -194
- package/update-docs-nav.cjs +0 -18
- package/update-nav.ps1 +0 -16
- package/website/assets/silhouettes/adapters.svg +0 -107
- package/website/assets/silhouettes/api-endpoints.svg +0 -115
- package/website/assets/silhouettes/atomic-clock.svg +0 -83
- package/website/assets/silhouettes/base-camp.svg +0 -81
- package/website/assets/silhouettes/bridge.svg +0 -69
- package/website/assets/silhouettes/docs-bundle.svg +0 -113
- package/website/assets/silhouettes/doko-basket.svg +0 -70
- package/website/assets/silhouettes/fortress.svg +0 -93
- package/website/assets/silhouettes/gateway.svg +0 -54
- package/website/assets/silhouettes/gears.svg +0 -93
- package/website/assets/silhouettes/globe-satellite.svg +0 -67
- package/website/assets/silhouettes/karma-wheel.svg +0 -137
- package/website/assets/silhouettes/lama-council.svg +0 -141
- package/website/assets/silhouettes/mandala-network.svg +0 -169
- package/website/assets/silhouettes/mani-stones.svg +0 -149
- package/website/assets/silhouettes/mantra-wheel.svg +0 -116
- package/website/assets/silhouettes/mesh-nodes.svg +0 -113
- package/website/assets/silhouettes/nakpak.svg +0 -56
- package/website/assets/silhouettes/peak-lightning.svg +0 -73
- package/website/assets/silhouettes/sherpa.svg +0 -69
- package/website/assets/silhouettes/stupa-tower.svg +0 -119
- package/website/assets/silhouettes/tattva-eye.svg +0 -78
- package/website/assets/silhouettes/terminal.svg +0 -74
- package/website/assets/silhouettes/webserver.svg +0 -145
- package/website/assets/silhouettes/yak.svg +0 -78
- package/website/assets/yakmesh-logo.png +0 -0
- package/website/assets/yakmesh-logo.webp +0 -0
- package/website/assets/yakmesh-logo128x140.webp +0 -0
- package/website/assets/yakmesh-logo2.png +0 -0
- package/website/assets/yakmesh-logo2.svg +0 -51
- package/website/assets/yakmesh-logo40x44.webp +0 -0
- package/website/assets/yakmesh.gif +0 -0
- package/website/assets/yakmesh.ico +0 -0
- package/website/assets/yakmesh.jpg +0 -0
- package/website/assets/yakmesh.pdf +0 -0
- package/website/assets/yakmesh.png +0 -0
- package/website/assets/yakmesh.svg +0 -70
- package/website/assets/yakmesh128.webp +0 -0
- package/website/assets/yakmesh32.png +0 -0
- package/website/assets/yakmesh32.svg +0 -65
- package/website/assets/yakmesh32o.ico +0 -2
- package/website/assets/yakmesh32o.svg +0 -65
- package/website/assets/yakmesh32o.svgz +0 -0
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
*/
|
|
18
18
|
|
|
19
19
|
import { YPC27Checksum, ypc27, bytesToTrits, tritsToBytes, seedFromPeerId, Poly27 } from './ypc27.js';
|
|
20
|
+
import { YPC27_SST } from './ypc27.js';
|
|
20
21
|
|
|
21
22
|
// =============================================================================
|
|
22
23
|
// PROTOCOL DOMAIN TAGS
|
|
@@ -327,6 +328,204 @@ export function unwrapWithChecksum(wrappedMessage, domain, nodeId = null) {
|
|
|
327
328
|
}
|
|
328
329
|
}
|
|
329
330
|
|
|
331
|
+
// =============================================================================
|
|
332
|
+
// BATCH CHECKSUM VERIFICATION ENGINE
|
|
333
|
+
// =============================================================================
|
|
334
|
+
|
|
335
|
+
/**
|
|
336
|
+
* BatchChecksumVerifier — Batched YPC-27 verification for high-throughput
|
|
337
|
+
* packet processing. Collects individual verify requests and processes them
|
|
338
|
+
* in a single flush, suitable for routing through the ComputeScheduler.
|
|
339
|
+
*
|
|
340
|
+
* Why batch?
|
|
341
|
+
* - YPC-27 verification involves Poly27 cyclic convolution (O(N²) per check)
|
|
342
|
+
* - Batching amortizes JS object creation overhead
|
|
343
|
+
* - The batch can be routed to GPU via ComputeScheduler for parallel execution
|
|
344
|
+
* - Under load, 50-100 packets/cycle is typical — perfect batch size
|
|
345
|
+
*
|
|
346
|
+
* Usage patterns:
|
|
347
|
+
*
|
|
348
|
+
* 1. Direct (no scheduler):
|
|
349
|
+
* const verifier = new BatchChecksumVerifier();
|
|
350
|
+
* const p1 = verifier.enqueue(data1, checksum1, PROTOCOL_DOMAIN.STUPA);
|
|
351
|
+
* const p2 = verifier.enqueue(data2, checksum2, PROTOCOL_DOMAIN.NAKPAK);
|
|
352
|
+
* // Auto-flushes after threshold or timer
|
|
353
|
+
*
|
|
354
|
+
* 2. Via ComputeScheduler (recommended for production):
|
|
355
|
+
* const result = await scheduler.submit({
|
|
356
|
+
* type: 'ypc27-batch-verify',
|
|
357
|
+
* priority: Priority.HIGH,
|
|
358
|
+
* affinity: Affinity.GPU_PREFERRED,
|
|
359
|
+
* executors: {
|
|
360
|
+
* gpu: () => verifier.flush(),
|
|
361
|
+
* cpu: () => verifier.flush(),
|
|
362
|
+
* }
|
|
363
|
+
* });
|
|
364
|
+
*/
|
|
365
|
+
export class BatchChecksumVerifier {
|
|
366
|
+
/**
|
|
367
|
+
* @param {Object} [options]
|
|
368
|
+
* @param {number} [options.minBatchSize=8] — Minimum items before auto-flush
|
|
369
|
+
* @param {number} [options.maxBatchSize=128] — Maximum items per flush
|
|
370
|
+
* @param {number} [options.flushInterval=5] — Ms before timer-triggered flush
|
|
371
|
+
* @param {boolean} [options.useSST=false] — Use YPC27_SST enhanced checksums
|
|
372
|
+
*/
|
|
373
|
+
constructor(options = {}) {
|
|
374
|
+
this.minBatchSize = options.minBatchSize ?? 8;
|
|
375
|
+
this.maxBatchSize = options.maxBatchSize ?? 128;
|
|
376
|
+
this.flushInterval = options.flushInterval ?? 5;
|
|
377
|
+
this.useSST = options.useSST ?? false;
|
|
378
|
+
|
|
379
|
+
/** @type {Array<{data: Buffer, checksum: Poly27, domain: string, nodeId: string|null, resolve: Function, reject: Function}>} */
|
|
380
|
+
this._queue = [];
|
|
381
|
+
this._timer = null;
|
|
382
|
+
|
|
383
|
+
// Telemetry
|
|
384
|
+
this._stats = {
|
|
385
|
+
totalEnqueued: 0,
|
|
386
|
+
totalFlushed: 0,
|
|
387
|
+
totalValid: 0,
|
|
388
|
+
totalInvalid: 0,
|
|
389
|
+
totalErrors: 0,
|
|
390
|
+
batchCount: 0,
|
|
391
|
+
avgBatchSize: 0,
|
|
392
|
+
lastFlushMs: 0,
|
|
393
|
+
};
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
/**
|
|
397
|
+
* Enqueue a checksum verification.
|
|
398
|
+
* Returns a promise that resolves with { valid: boolean, index: number }.
|
|
399
|
+
*
|
|
400
|
+
* @param {Object|string|Buffer|Uint8Array} data — Packet data to verify
|
|
401
|
+
* @param {Poly27|string} checksum — Expected checksum (Poly27 or wire format)
|
|
402
|
+
* @param {string} domain — Protocol domain from PROTOCOL_DOMAIN
|
|
403
|
+
* @param {string} [nodeId] — Optional node ID for seed derivation
|
|
404
|
+
* @returns {Promise<{valid: boolean, index: number}>}
|
|
405
|
+
*/
|
|
406
|
+
enqueue(data, checksum, domain, nodeId = null) {
|
|
407
|
+
return new Promise((resolve, reject) => {
|
|
408
|
+
const parsedChecksum = typeof checksum === 'string'
|
|
409
|
+
? checksumFromWire(checksum)
|
|
410
|
+
: checksum;
|
|
411
|
+
|
|
412
|
+
this._queue.push({
|
|
413
|
+
data,
|
|
414
|
+
checksum: parsedChecksum,
|
|
415
|
+
domain,
|
|
416
|
+
nodeId,
|
|
417
|
+
resolve,
|
|
418
|
+
reject,
|
|
419
|
+
});
|
|
420
|
+
|
|
421
|
+
this._stats.totalEnqueued++;
|
|
422
|
+
|
|
423
|
+
if (this._queue.length >= this.minBatchSize) {
|
|
424
|
+
this.flush();
|
|
425
|
+
} else if (!this._timer) {
|
|
426
|
+
this._timer = setTimeout(() => this.flush(), this.flushInterval);
|
|
427
|
+
}
|
|
428
|
+
});
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
/**
|
|
432
|
+
* Process all queued verifications in a single batch.
|
|
433
|
+
* This is the method to pass as an executor to ComputeScheduler.
|
|
434
|
+
*
|
|
435
|
+
* The batch verification leverages:
|
|
436
|
+
* - Shared seed derivation (reuse for same domain+nodeId pairs)
|
|
437
|
+
* - Pre-allocated typed arrays for trit conversion
|
|
438
|
+
* - Sequential Poly27 operations (GPU-parallelizable in future)
|
|
439
|
+
*
|
|
440
|
+
* @returns {{ verified: number, valid: number, invalid: number, errors: number, durationMs: number }}
|
|
441
|
+
*/
|
|
442
|
+
flush() {
|
|
443
|
+
if (this._timer) {
|
|
444
|
+
clearTimeout(this._timer);
|
|
445
|
+
this._timer = null;
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
if (this._queue.length === 0) {
|
|
449
|
+
return { verified: 0, valid: 0, invalid: 0, errors: 0, durationMs: 0 };
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
const batch = this._queue.splice(0, this.maxBatchSize);
|
|
453
|
+
const t0 = performance.now();
|
|
454
|
+
|
|
455
|
+
// Cache engines by domain+nodeId to avoid redundant seed derivation
|
|
456
|
+
const engineCache = new Map();
|
|
457
|
+
|
|
458
|
+
let valid = 0;
|
|
459
|
+
let invalid = 0;
|
|
460
|
+
let errors = 0;
|
|
461
|
+
|
|
462
|
+
for (let i = 0; i < batch.length; i++) {
|
|
463
|
+
const item = batch[i];
|
|
464
|
+
try {
|
|
465
|
+
const cacheKey = `${item.domain}:${item.nodeId || ''}`;
|
|
466
|
+
|
|
467
|
+
if (!engineCache.has(cacheKey)) {
|
|
468
|
+
engineCache.set(cacheKey, new PacketChecksum(item.domain, item.nodeId));
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
const engine = engineCache.get(cacheKey);
|
|
472
|
+
const isValid = engine.verify(item.data, item.checksum);
|
|
473
|
+
|
|
474
|
+
if (isValid) {
|
|
475
|
+
valid++;
|
|
476
|
+
this._stats.totalValid++;
|
|
477
|
+
} else {
|
|
478
|
+
invalid++;
|
|
479
|
+
this._stats.totalInvalid++;
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
item.resolve({ valid: isValid, index: i });
|
|
483
|
+
} catch (err) {
|
|
484
|
+
errors++;
|
|
485
|
+
this._stats.totalErrors++;
|
|
486
|
+
item.reject(err);
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
const durationMs = performance.now() - t0;
|
|
491
|
+
|
|
492
|
+
// Update telemetry
|
|
493
|
+
this._stats.totalFlushed += batch.length;
|
|
494
|
+
this._stats.batchCount++;
|
|
495
|
+
this._stats.avgBatchSize = this._stats.totalFlushed / this._stats.batchCount;
|
|
496
|
+
this._stats.lastFlushMs = durationMs;
|
|
497
|
+
|
|
498
|
+
return { verified: batch.length, valid, invalid, errors, durationMs };
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
/**
|
|
502
|
+
* Get verification statistics.
|
|
503
|
+
* @returns {Object}
|
|
504
|
+
*/
|
|
505
|
+
getStats() {
|
|
506
|
+
return {
|
|
507
|
+
...this._stats,
|
|
508
|
+
queueDepth: this._queue.length,
|
|
509
|
+
avgBatchSize: +this._stats.avgBatchSize.toFixed(1),
|
|
510
|
+
lastFlushMs: +this._stats.lastFlushMs.toFixed(2),
|
|
511
|
+
};
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
/**
|
|
515
|
+
* Drain queue and release timer.
|
|
516
|
+
*/
|
|
517
|
+
destroy() {
|
|
518
|
+
this.flush();
|
|
519
|
+
if (this._timer) {
|
|
520
|
+
clearTimeout(this._timer);
|
|
521
|
+
this._timer = null;
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
/** Singleton batch verifier for packet checksums */
|
|
527
|
+
export const batchChecksumVerifier = new BatchChecksumVerifier();
|
|
528
|
+
|
|
330
529
|
// =============================================================================
|
|
331
530
|
// EXPORTS
|
|
332
531
|
// =============================================================================
|
|
@@ -343,4 +542,6 @@ export default {
|
|
|
343
542
|
createMantraChecksum,
|
|
344
543
|
wrapWithChecksum,
|
|
345
544
|
unwrapWithChecksum,
|
|
545
|
+
BatchChecksumVerifier,
|
|
546
|
+
batchChecksumVerifier,
|
|
346
547
|
};
|