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 +62 -0
- package/announcements/discord-v1.5.0.md +29 -0
- package/announcements/telegram-v1.5.0.md +9 -0
- package/announcements/x-v1.5.0.md +11 -0
- package/gossip/protocol.js +3 -3
- package/mesh/annex.js +1 -1
- package/mesh/echo-ranging.js +1 -1
- package/mesh/phantom-routing.js +1 -1
- package/mesh/temporal-encoder.js +1 -1
- package/oracle/network-identity.js +5 -5
- package/oracle/phase-epoch.js +6 -6
- package/package.json +3 -1
- package/yakbot/index.js +1 -1
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
|
package/gossip/protocol.js
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* - Bloom filters for efficient seen-message tracking
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
-
import {
|
|
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 =
|
|
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(
|
|
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('
|
|
298
|
+
return createHash('sha3-256')
|
|
299
299
|
.update(this.sharedSecret)
|
|
300
300
|
.update(ANNEX_CONFIG.keyDerivationSalt)
|
|
301
301
|
.update(this.sessionId)
|
package/mesh/echo-ranging.js
CHANGED
package/mesh/phantom-routing.js
CHANGED
package/mesh/temporal-encoder.js
CHANGED
|
@@ -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: '
|
|
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
|
-
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
-
|
|
254
|
+
sha3_256,
|
|
255
255
|
hexToBytes(codeHash),
|
|
256
256
|
utf8ToBytes('fingerprint-salt'),
|
|
257
257
|
utf8ToBytes(IDENTITY_CONFIG.fingerprintSalt),
|
package/oracle/phase-epoch.js
CHANGED
|
@@ -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
|
-
|
|
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(
|
|
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.
|
|
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": {
|