yakmesh 1.5.0 → 1.6.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 CHANGED
@@ -2,6 +2,68 @@
2
2
 
3
3
  All notable changes to YAKMESH will be documented in this file.
4
4
 
5
+ ## [1.6.0] - 2026-01-17
6
+
7
+ ### 🔐 NIST Level 5 (Paranoid Mode) & Cryptographic Unification
8
+
9
+ This release adds support for NIST Level 5 security and unifies all hash operations to SHA3-256.
10
+
11
+ #### New Features
12
+
13
+ ##### NIST Level 5 Support
14
+ - Configurable security levels: Level 3 (default) or Level 5 (paranoid)
15
+ - **Level 5 Algorithms:**
16
+ - ML-DSA-87 (Dilithium5) for signatures - 256-bit classical security
17
+ - ML-KEM-1024 (Kyber1024) for key encapsulation - 256-bit classical security
18
+ - New `security/crypto-config.js` module for centralized crypto configuration
19
+ - Runtime switchable via `setSecurityLevel(SecurityLevel.LEVEL_5)`
20
+
21
+ ##### Crypto Agility Documentation
22
+ - New `docs/CRYPTO-AGILITY.md` formalizes algorithm upgrade procedures
23
+ - Version negotiation protocol for future algorithm transitions
24
+ - Monitoring list for future algorithm candidates (X-Wing, SLH-DSA, etc.)
25
+
26
+ ##### Post-Quantum Test Suite
27
+ - Comprehensive cryptographic tests in `oracle/tests/crypto.test.js`
28
+ - Tests for ML-DSA-65/87, ML-KEM-768/1024
29
+ - Performance benchmarks for Level 3 vs Level 5 overhead
30
+ - Run with `npm run test:crypto`
31
+
32
+ #### Changed
33
+
34
+ ##### Unified SHA3-256 Hashing
35
+ All hash operations now use SHA3-256 for post-quantum consistency:
36
+ - `oracle/network-identity.js` - HKDF now uses SHA3-256
37
+ - `oracle/phase-epoch.js` - Phase derivation uses SHA3-256
38
+ - `gossip/protocol.js` - Bloom filters and message IDs use SHA3-256
39
+ - `mesh/temporal-encoder.js` - Temporal hashes use SHA3-256
40
+ - `mesh/phantom-routing.js` - Key derivation uses SHA3-256
41
+ - `mesh/annex.js` - Session key derivation uses SHA3-256
42
+ - `mesh/echo-ranging.js` - Probe key derivation uses SHA3-256
43
+
44
+ ### Added
45
+ - `security/crypto-config.js` - Centralized crypto configuration module
46
+ - `docs/CRYPTO-AGILITY.md` - Algorithm upgrade path documentation
47
+ - `oracle/tests/crypto.test.js` - PQ cryptography test suite
48
+ - `npm run test:crypto` script for running crypto tests
49
+
50
+ ### Technical Details
51
+ - SHA3-256 provides 128-bit post-quantum security (Grover resistance)
52
+ - All symmetric keys derived from PQ-safe shared secrets
53
+ - No vulnerable classical asymmetric crypto in codebase
54
+
55
+ ---
56
+
57
+ ## [1.5.1] - 2026-01-17
58
+
59
+ ### 🔧 Maintenance Release
60
+ - Port fallback system for WebSocket and HTTP servers
61
+ - Process management script (`scripts/start.sh`)
62
+ - Discord webhook integration for releases
63
+ - Minor documentation updates
64
+
65
+ ---
66
+
5
67
  ## [1.5.0] - 2026-01-17
6
68
 
7
69
  ### 🔧 Critical Fix: Network Identity Unification
@@ -0,0 +1,29 @@
1
+ # Yakmesh v1.5.1
2
+
3
+ **🦬 Yakmesh v1.5.1 Released**
4
+
5
+ ## 🔧 Fixes & Improvements
6
+
7
+ ### Identity Initialization Fix
8
+ Fixed oracle initialization order so node identity correctly derives from codebase hash as originally designed.
9
+
10
+ ### Automatic Port Fallback
11
+ Nodes now automatically find the next available port if default ports (3000, 9001) are occupied - no more crashes on busy systems.
12
+
13
+ ### Process Management Script
14
+ New `scripts/start.sh` for proper background process management:
15
+ ```bash
16
+ ./scripts/start.sh start # Start in background
17
+ ./scripts/start.sh stop # Clean shutdown
18
+ ./scripts/start.sh restart # Stop + start
19
+ ./scripts/start.sh status # Check if running
20
+ ./scripts/start.sh logs # View logs
21
+ ```
22
+
23
+ ## 📦 Install/Upgrade
24
+ ```bash
25
+ npm install yakmesh@1.5.1
26
+ ```
27
+
28
+ ---
29
+ 🔗 https://yakmesh.dev | 💬 Discord: https://discord.gg/8mSPfbJB8N
@@ -0,0 +1,9 @@
1
+ 🦬 Yakmesh v1.5.1
2
+
3
+ • Fixed identity initialization order
4
+ • Auto port fallback when ports busy
5
+ • Process management script for deployments
6
+
7
+ npm install yakmesh@1.5.1
8
+
9
+ https://yakmesh.dev
@@ -0,0 +1,11 @@
1
+ 🦬 Yakmesh v1.5.1
2
+
3
+ • Fixed identity initialization order
4
+ • Auto port fallback when ports busy
5
+ • Process management script for deployments
6
+
7
+ npm install yakmesh@1.5.1
8
+
9
+ https://yakmesh.dev
10
+
11
+ #PostQuantum #P2P #DecentralizedWeb #OpenSource
@@ -8,7 +8,7 @@
8
8
  * - Bloom filters for efficient seen-message tracking
9
9
  */
10
10
 
11
- import { sha256 } from '@noble/hashes/sha2.js';
11
+ import { sha3_256 } from '@noble/hashes/sha3.js';
12
12
  import { bytesToHex } from '@noble/hashes/utils.js';
13
13
 
14
14
  // Message types for gossip protocol
@@ -40,7 +40,7 @@ class BloomFilter {
40
40
 
41
41
  _hash(value, seed) {
42
42
  const data = `${seed}:${value}`;
43
- const hash = sha256(new TextEncoder().encode(data));
43
+ const hash = sha3_256(new TextEncoder().encode(data));
44
44
  return new DataView(hash.buffer).getUint32(0, true) % this.size;
45
45
  }
46
46
 
@@ -448,7 +448,7 @@ export class GossipProtocol {
448
448
  */
449
449
  _generateMessageId(topic, data) {
450
450
  const payload = JSON.stringify({ topic, data, origin: this.identity.identity.nodeId, ts: Date.now() });
451
- return bytesToHex(sha256(new TextEncoder().encode(payload))).slice(0, 32);
451
+ return bytesToHex(sha3_256(new TextEncoder().encode(payload))).slice(0, 32);
452
452
  }
453
453
 
454
454
  /**
package/mesh/annex.js CHANGED
@@ -295,7 +295,7 @@ class AnnexSession {
295
295
  * Derive symmetric encryption key from shared secret
296
296
  */
297
297
  _deriveEncryptionKey() {
298
- return createHash('sha256')
298
+ return createHash('sha3-256')
299
299
  .update(this.sharedSecret)
300
300
  .update(ANNEX_CONFIG.keyDerivationSalt)
301
301
  .update(this.sessionId)
@@ -128,7 +128,7 @@ class EchoProbe {
128
128
  }
129
129
 
130
130
  _deriveKey(secret, context) {
131
- return createHash('sha256')
131
+ return createHash('sha3-256')
132
132
  .update(secret)
133
133
  .update(context)
134
134
  .digest();
@@ -164,7 +164,7 @@ class PhantomLayer {
164
164
  }
165
165
 
166
166
  _deriveEncryptionKey(sharedSecret) {
167
- return createHash('sha256')
167
+ return createHash('sha3-256')
168
168
  .update(sharedSecret)
169
169
  .update(PHANTOM_CONFIG.keyDerivationSalt)
170
170
  .update(Buffer.from([this.hopIndex]))
@@ -27,7 +27,7 @@ const TME_CONFIG = {
27
27
  maxSlicesPerStream: 256,
28
28
  reconstructionWindowNs: 500_000_000,
29
29
  timingToleranceNs: 5_000_000,
30
- hashAlgorithm: 'sha256',
30
+ hashAlgorithm: 'sha3-256', // Post-quantum consistent hashing
31
31
  temporalHashLength: 32,
32
32
  minSlicesForReconstruction: 0.6,
33
33
  maxMissingConsecutive: 3,
@@ -21,7 +21,7 @@
21
21
 
22
22
  import { sha3_256 } from '@noble/hashes/sha3.js';
23
23
  import { hkdf } from '@noble/hashes/hkdf.js';
24
- import { sha256 } from '@noble/hashes/sha2.js';
24
+ // Using sha3_256 for all hashing operations for post-quantum consistency
25
25
  import { bytesToHex, hexToBytes, utf8ToBytes } from '@noble/hashes/utils.js';
26
26
 
27
27
  // Phase modulation for rotating security
@@ -144,7 +144,7 @@ export function deriveNetworkName(codeHash, wordCount = 3) {
144
144
  const salt = utf8ToBytes('quantum-mesh-salt-2025');
145
145
 
146
146
  // Derive enough bytes for word indices (1 byte per word)
147
- const derived = hkdf(sha256, hashBytes, salt, info, wordCount);
147
+ const derived = hkdf(sha3_256, hashBytes, salt, info, wordCount);
148
148
 
149
149
  // Map each byte to a word (256 words = 8 bits = 1 byte per word)
150
150
  const words = [];
@@ -170,7 +170,7 @@ export function deriveNetworkId(codeHash) {
170
170
  const info = utf8ToBytes(IDENTITY_CONFIG.shortIdSalt);
171
171
  const salt = utf8ToBytes('mesh-id-salt-2025');
172
172
 
173
- const derived = hkdf(sha256, hashBytes, salt, info, 4);
173
+ const derived = hkdf(sha3_256, hashBytes, salt, info, 4);
174
174
 
175
175
  // Base58-like encoding (no 0, O, I, l to avoid confusion)
176
176
  const alphabet = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';
@@ -196,7 +196,7 @@ export function deriveVerificationPhrase(codeHash) {
196
196
  const salt = utf8ToBytes('verify-phrase-salt-2025');
197
197
 
198
198
  // Derive 5 bytes for a 5-word phrase
199
- const derived = hkdf(sha256, hashBytes, salt, info, 5);
199
+ const derived = hkdf(sha3_256, hashBytes, salt, info, 5);
200
200
 
201
201
  const templates = [
202
202
  'The {0} {1} reflects the {2} {3}',
@@ -251,7 +251,7 @@ export class NetworkIdentity {
251
251
  // Stable fingerprint - one-way derivation for comparison
252
252
  // NOT the same as the code hash, NEVER changes
253
253
  const fpBytes = hkdf(
254
- sha256,
254
+ sha3_256,
255
255
  hexToBytes(codeHash),
256
256
  utf8ToBytes('fingerprint-salt'),
257
257
  utf8ToBytes(IDENTITY_CONFIG.fingerprintSalt),
@@ -23,7 +23,7 @@
23
23
  import { sha3_256 } from '@noble/hashes/sha3.js';
24
24
  import { bytesToHex, utf8ToBytes } from '@noble/hashes/utils.js';
25
25
  import { hkdf } from '@noble/hashes/hkdf.js';
26
- import { sha256 } from '@noble/hashes/sha2.js';
26
+ // Using sha3_256 for all hashing operations for post-quantum consistency
27
27
 
28
28
  // ============================================================
29
29
  // CONFIGURATION
@@ -245,7 +245,7 @@ export function derivePhaseModulated(inputKey, baseSalt, baseInfo, outputLength,
245
245
  const salt = modulateSalt(baseSalt, epoch);
246
246
  const info = modulateInfo(baseInfo, epoch);
247
247
 
248
- return hkdf(sha256, inputKey, salt, info, outputLength);
248
+ return hkdf(sha3_256, inputKey, salt, info, outputLength);
249
249
  }
250
250
 
251
251
  /**
@@ -477,9 +477,9 @@ export default {
477
477
  getPhaseStatus,
478
478
  formatPhaseId,
479
479
  };
480
-
481
-
482
-
480
+
481
+
482
+
483
483
 
484
484
  // Alias for backward compatibility
485
- export { setPhaseConfig as setTimeSourceConfig };
485
+ export { setPhaseConfig as setTimeSourceConfig };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "yakmesh",
3
- "version": "1.5.0",
3
+ "version": "1.6.0",
4
4
  "description": "YAKMESH: Yielding Atomic Kernel Modular Encryption Secured Hub - Post-quantum secure P2P mesh network for the 2026 threat landscape",
5
5
  "type": "module",
6
6
  "main": "server/index.js",
@@ -17,6 +17,7 @@
17
17
  "./oracle/code-proof": "./oracle/code-proof-protocol.js",
18
18
  "./oracle/module-sealer": "./oracle/module-sealer.js",
19
19
  "./oracle/codebase-lock": "./oracle/codebase-lock.js",
20
+ "./security/crypto-config": "./security/crypto-config.js",
20
21
  "./mesh/network": "./mesh/network.js",
21
22
  "./mesh/rate-limiter": "./mesh/rate-limiter.js",
22
23
  "./mesh/message-validator": "./mesh/message-validator.js",
@@ -36,6 +37,7 @@
36
37
  "test": "node --test oracle/tests/*.test.js",
37
38
  "test:time": "node --test oracle/tests/time-source.test.js",
38
39
  "test:phase": "node --test oracle/tests/phase-epoch.test.js",
40
+ "test:crypto": "node --test oracle/tests/crypto.test.js",
39
41
  "test:all": "node test-novel-systems.mjs"
40
42
  },
41
43
  "dependencies": {
package/yakbot/index.js CHANGED
@@ -26,7 +26,7 @@ const config = {
26
26
  geminiKey: process.env.GEMINI_API_KEY,
27
27
 
28
28
  // Current version
29
- version: '1.5.0',
29
+ version: '1.6.0',
30
30
 
31
31
  // Official YAKMESH nodes for health checks
32
32
  officialNodes: [