yakmesh 2.8.2 → 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/CONTRIBUTING.md +42 -0
- package/Caddyfile +77 -0
- package/README.md +119 -29
- package/adapters/adapter-mlv-bible/README.md +124 -0
- package/adapters/adapter-mlv-bible/index.js +400 -0
- package/adapters/chat-mod-adapter.js +532 -0
- package/adapters/content-adapter.js +273 -0
- package/content/api.js +50 -41
- package/content/index.js +2 -2
- package/content/store.js +355 -173
- 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 +334 -74
- 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 +113 -1
- package/mesh/darshan.js +1718 -0
- package/mesh/gumba.js +1567 -0
- package/mesh/jhilke.js +651 -0
- package/mesh/katha.js +1012 -0
- package/mesh/nakpak-routing.js +8 -5
- package/mesh/network.js +724 -34
- package/mesh/pulse-sync.js +4 -1
- package/mesh/rate-limiter.js +127 -15
- 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/vani.js +1364 -0
- package/mesh/yurt.js +1340 -0
- 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/network-identity.js +16 -0
- package/oracle/packet-checksum.js +201 -0
- package/oracle/sst.js +579 -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 +28 -13
- 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-nav.js +194 -0
- package/scripts/update-docs-sidebar.cjs +164 -0
- package/security/crypto-config.js +4 -3
- package/security/dharma-moderation.js +517 -0
- 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 +373 -5
- package/security/namche-gateway.js +298 -69
- package/security/sakshi.js +460 -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/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
package/docs/jhilke.html
ADDED
|
@@ -0,0 +1,1312 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en" data-theme="jhilke">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<link rel="icon" href="favicon.ico" sizes="32x32">
|
|
7
|
+
<link rel="icon" href="icon.svg" type="image/svg+xml">
|
|
8
|
+
<link rel="apple-touch-icon" href="apple-touch-icon.png">
|
|
9
|
+
<title>JHILKE Protocol | YAKMESH Documentation</title>
|
|
10
|
+
<meta name="description" content="JHILKE - Just Hidden In-band Legitimate Key Exchange. Steganographic key lifecycle management for the Yakmesh mesh.">
|
|
11
|
+
<link rel="stylesheet" href="tailwind.min.css">
|
|
12
|
+
<link rel="stylesheet" href="prism-tomorrow.min.css" media="print" onload="this.media='all'">
|
|
13
|
+
<noscript><link rel="stylesheet" href="prism-tomorrow.min.css"></noscript>
|
|
14
|
+
<link rel="stylesheet" href="docs.css">
|
|
15
|
+
<style>
|
|
16
|
+
.theme-accent { color: #4ade80; }
|
|
17
|
+
.theme-accent-hover:hover { color: #22c55e; }
|
|
18
|
+
.theme-badge { background: rgba(34, 197, 94, 0.2); color: #4ade80; }
|
|
19
|
+
.theme-border { border-color: #22c55e; }
|
|
20
|
+
.theme-callout { background: rgba(34, 197, 94, 0.1); border-color: #16a34a; }
|
|
21
|
+
.active-link { background: rgba(34, 197, 94, 0.2) !important; color: #4ade80 !important; }
|
|
22
|
+
|
|
23
|
+
/* Firefly conservation callout */
|
|
24
|
+
.firefly-callout {
|
|
25
|
+
background: linear-gradient(135deg, rgba(163,230,53,0.08) 0%, rgba(34,197,94,0.05) 100%);
|
|
26
|
+
border: 1px solid rgba(163,230,53,0.2);
|
|
27
|
+
border-radius: 12px;
|
|
28
|
+
padding: 1.5rem;
|
|
29
|
+
margin: 2rem 0;
|
|
30
|
+
position: relative;
|
|
31
|
+
overflow: hidden;
|
|
32
|
+
}
|
|
33
|
+
.firefly-callout::before {
|
|
34
|
+
content: '';
|
|
35
|
+
position: absolute;
|
|
36
|
+
top: -50%; right: -20%;
|
|
37
|
+
width: 200px; height: 200px;
|
|
38
|
+
background: radial-gradient(circle, rgba(163,230,53,0.06) 0%, transparent 70%);
|
|
39
|
+
animation: firefly-pulse 4s ease-in-out infinite;
|
|
40
|
+
}
|
|
41
|
+
.firefly-callout::after {
|
|
42
|
+
content: '';
|
|
43
|
+
position: absolute;
|
|
44
|
+
bottom: -30%; left: 10%;
|
|
45
|
+
width: 150px; height: 150px;
|
|
46
|
+
background: radial-gradient(circle, rgba(250,204,21,0.04) 0%, transparent 70%);
|
|
47
|
+
animation: firefly-pulse 5.5s ease-in-out infinite;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/* Glowing section dividers */
|
|
51
|
+
.firefly-divider {
|
|
52
|
+
height: 1px;
|
|
53
|
+
background: linear-gradient(90deg, transparent, #4ade80, #a3e635, #4ade80, transparent);
|
|
54
|
+
opacity: 0.3;
|
|
55
|
+
margin: 3rem 0;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/* Reduce motion for accessibility */
|
|
59
|
+
@media (prefers-reduced-motion: reduce) {
|
|
60
|
+
.firefly-callout::before, .firefly-callout::after { animation: none; }
|
|
61
|
+
}
|
|
62
|
+
</style>
|
|
63
|
+
|
|
64
|
+
<!-- Open Graph -->
|
|
65
|
+
<meta property="og:type" content="article">
|
|
66
|
+
<meta property="og:site_name" content="Yakmesh Documentation">
|
|
67
|
+
<meta property="og:title" content="JHILKE — Yakmesh">
|
|
68
|
+
<meta property="og:description" content="JHILKE steganographic key lifecycle — bootstrap and rekey protocol for Yakmesh nodes.">
|
|
69
|
+
</head>
|
|
70
|
+
<body class="bg-mountain-900 text-white min-h-screen">
|
|
71
|
+
<!-- YAKMESH-ICON-SPRITE-START -->
|
|
72
|
+
<svg xmlns="http://www.w3.org/2000/svg" style="display:none">
|
|
73
|
+
<!--
|
|
74
|
+
Yakmesh Docs Icon Sprite Sheet
|
|
75
|
+
24×24 viewBox — stroke/fill set via .doc-icon CSS
|
|
76
|
+
Usage: <svg class="doc-icon"><use href="#icon-name"/></svg>
|
|
77
|
+
-->
|
|
78
|
+
|
|
79
|
+
<!-- ═══ GUIDES ═══ -->
|
|
80
|
+
|
|
81
|
+
<symbol id="icon-home" viewBox="0 0 24 24">
|
|
82
|
+
<path d="M3 9.5L12 3l9 6.5V20a1 1 0 01-1 1H4a1 1 0 01-1-1V9.5z"/>
|
|
83
|
+
<polyline points="9 22 9 12 15 12 15 22"/>
|
|
84
|
+
</symbol>
|
|
85
|
+
|
|
86
|
+
<symbol id="icon-rocket" viewBox="0 0 24 24">
|
|
87
|
+
<path d="M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 00-2.91-.09z"/>
|
|
88
|
+
<path d="M12 15l-3-3a22 22 0 012-3.95A12.88 12.88 0 0122 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 01-4 2z"/>
|
|
89
|
+
<path d="M9 12H4s.55-3.03 2-4c1.62-1.08 5 0 5 0"/>
|
|
90
|
+
<path d="M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5"/>
|
|
91
|
+
</symbol>
|
|
92
|
+
|
|
93
|
+
<symbol id="icon-book" viewBox="0 0 24 24">
|
|
94
|
+
<path d="M4 19.5A2.5 2.5 0 016.5 17H20"/>
|
|
95
|
+
<path d="M6.5 2H20v20H6.5A2.5 2.5 0 014 19.5v-15A2.5 2.5 0 016.5 2z"/>
|
|
96
|
+
<line x1="8" y1="7" x2="16" y2="7"/>
|
|
97
|
+
<line x1="8" y1="11" x2="13" y2="11"/>
|
|
98
|
+
</symbol>
|
|
99
|
+
|
|
100
|
+
<!-- ═══ PROTOCOL STACK ═══ -->
|
|
101
|
+
|
|
102
|
+
<!-- YAK:// — Content addressing (yak horns) -->
|
|
103
|
+
<symbol id="icon-yak" viewBox="0 0 24 24">
|
|
104
|
+
<path d="M4 4c1 3 3 5 5 6"/>
|
|
105
|
+
<path d="M20 4c-1 3-3 5-5 6"/>
|
|
106
|
+
<circle cx="12" cy="14" r="5"/>
|
|
107
|
+
<circle cx="10" cy="13" r="0.5" fill="currentColor"/>
|
|
108
|
+
<circle cx="14" cy="13" r="0.5" fill="currentColor"/>
|
|
109
|
+
<path d="M10 16c1 1 3 1 4 0"/>
|
|
110
|
+
</symbol>
|
|
111
|
+
|
|
112
|
+
<!-- ANNEX — Encrypted bridge -->
|
|
113
|
+
<symbol id="icon-annex" viewBox="0 0 24 24">
|
|
114
|
+
<path d="M4 18h3a4 4 0 004-4V8"/>
|
|
115
|
+
<path d="M20 18h-3a4 4 0 01-4-4V8"/>
|
|
116
|
+
<circle cx="7" cy="6" r="2"/>
|
|
117
|
+
<circle cx="17" cy="6" r="2"/>
|
|
118
|
+
<line x1="7" y1="8" x2="7" y2="18"/>
|
|
119
|
+
<line x1="17" y1="8" x2="17" y2="18"/>
|
|
120
|
+
</symbol>
|
|
121
|
+
|
|
122
|
+
<!-- JHILKE — Cricket / steganographic key lifecycle -->
|
|
123
|
+
<symbol id="icon-jhilke" viewBox="0 0 24 24">
|
|
124
|
+
<ellipse cx="12" cy="14" rx="4" ry="6"/>
|
|
125
|
+
<path d="M8 10c-2-3-4-6-3-8"/>
|
|
126
|
+
<path d="M16 10c2-3 4-6 3-8"/>
|
|
127
|
+
<line x1="10" y1="20" x2="8" y2="23"/>
|
|
128
|
+
<line x1="14" y1="20" x2="16" y2="23"/>
|
|
129
|
+
<path d="M9 12l-4 2"/>
|
|
130
|
+
<path d="M15 12l4 2"/>
|
|
131
|
+
</symbol>
|
|
132
|
+
|
|
133
|
+
<!-- NAKPAK — Onion layers / backpack -->
|
|
134
|
+
<symbol id="icon-nakpak" viewBox="0 0 24 24">
|
|
135
|
+
<circle cx="12" cy="12" r="10" opacity="0.3"/>
|
|
136
|
+
<circle cx="12" cy="12" r="7" opacity="0.5"/>
|
|
137
|
+
<circle cx="12" cy="12" r="4" opacity="0.8"/>
|
|
138
|
+
<circle cx="12" cy="12" r="1.5" fill="currentColor"/>
|
|
139
|
+
</symbol>
|
|
140
|
+
|
|
141
|
+
<!-- NAMCHE — Gateway door -->
|
|
142
|
+
<symbol id="icon-namche" viewBox="0 0 24 24">
|
|
143
|
+
<rect x="3" y="3" width="18" height="18" rx="2"/>
|
|
144
|
+
<path d="M9 3v18"/>
|
|
145
|
+
<path d="M15 3v18"/>
|
|
146
|
+
<line x1="3" y1="8" x2="9" y2="8"/>
|
|
147
|
+
<line x1="15" y1="8" x2="21" y2="8"/>
|
|
148
|
+
<circle cx="12" cy="14" r="1" fill="currentColor"/>
|
|
149
|
+
</symbol>
|
|
150
|
+
|
|
151
|
+
<!-- DOKO — Basket / certificate -->
|
|
152
|
+
<symbol id="icon-doko" viewBox="0 0 24 24">
|
|
153
|
+
<path d="M6 8l-2 12h16l-2-12"/>
|
|
154
|
+
<path d="M6 8c0-3 2.7-5 6-5s6 2 6 5"/>
|
|
155
|
+
<line x1="8" y1="10" x2="10" y2="18"/>
|
|
156
|
+
<line x1="16" y1="10" x2="14" y2="18"/>
|
|
157
|
+
<line x1="12" y1="10" x2="12" y2="18"/>
|
|
158
|
+
</symbol>
|
|
159
|
+
|
|
160
|
+
<!-- SHERPA — Mountain climber -->
|
|
161
|
+
<symbol id="icon-sherpa" viewBox="0 0 24 24">
|
|
162
|
+
<path d="M4 20L10 6l3 6 3-4 4 12"/>
|
|
163
|
+
<line x1="4" y1="20" x2="20" y2="20"/>
|
|
164
|
+
<circle cx="13" cy="4" r="1.5"/>
|
|
165
|
+
</symbol>
|
|
166
|
+
|
|
167
|
+
<!-- MANDALA — Network topology web -->
|
|
168
|
+
<symbol id="icon-mandala" viewBox="0 0 24 24">
|
|
169
|
+
<circle cx="12" cy="12" r="9"/>
|
|
170
|
+
<circle cx="12" cy="12" r="4.5"/>
|
|
171
|
+
<line x1="12" y1="3" x2="12" y2="21"/>
|
|
172
|
+
<line x1="3" y1="12" x2="21" y2="12"/>
|
|
173
|
+
<line x1="5.6" y1="5.6" x2="18.4" y2="18.4"/>
|
|
174
|
+
<line x1="18.4" y1="5.6" x2="5.6" y2="18.4"/>
|
|
175
|
+
</symbol>
|
|
176
|
+
|
|
177
|
+
<!-- MANTRA — Gossip / prayer wheel -->
|
|
178
|
+
<symbol id="icon-mantra" viewBox="0 0 24 24">
|
|
179
|
+
<circle cx="12" cy="10" r="7"/>
|
|
180
|
+
<path d="M12 3v14"/>
|
|
181
|
+
<path d="M8 7c2 1.5 6 1.5 8 0"/>
|
|
182
|
+
<path d="M8 13c2-1.5 6-1.5 8 0"/>
|
|
183
|
+
<line x1="12" y1="17" x2="12" y2="22"/>
|
|
184
|
+
<line x1="9" y1="22" x2="15" y2="22"/>
|
|
185
|
+
</symbol>
|
|
186
|
+
|
|
187
|
+
<!-- GUMBA — Temple / access control -->
|
|
188
|
+
<symbol id="icon-gumba" viewBox="0 0 24 24">
|
|
189
|
+
<path d="M12 2L3 9h18z"/>
|
|
190
|
+
<line x1="5" y1="9" x2="5" y2="19"/>
|
|
191
|
+
<line x1="9" y1="9" x2="9" y2="19"/>
|
|
192
|
+
<line x1="15" y1="9" x2="15" y2="19"/>
|
|
193
|
+
<line x1="19" y1="9" x2="19" y2="19"/>
|
|
194
|
+
<line x1="3" y1="19" x2="21" y2="19"/>
|
|
195
|
+
<line x1="3" y1="21" x2="21" y2="21"/>
|
|
196
|
+
</symbol>
|
|
197
|
+
|
|
198
|
+
<!-- YURT — Camp / room -->
|
|
199
|
+
<symbol id="icon-yurt" viewBox="0 0 24 24">
|
|
200
|
+
<path d="M3 20L12 4l9 16"/>
|
|
201
|
+
<line x1="3" y1="20" x2="21" y2="20"/>
|
|
202
|
+
<path d="M10 20v-5a2 2 0 014 0v5"/>
|
|
203
|
+
<path d="M6 14h12"/>
|
|
204
|
+
</symbol>
|
|
205
|
+
|
|
206
|
+
<!-- KATHA — Chat / story scroll -->
|
|
207
|
+
<symbol id="icon-katha" viewBox="0 0 24 24">
|
|
208
|
+
<path d="M21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z"/>
|
|
209
|
+
<line x1="8" y1="8" x2="16" y2="8"/>
|
|
210
|
+
<line x1="8" y1="12" x2="13" y2="12"/>
|
|
211
|
+
</symbol>
|
|
212
|
+
|
|
213
|
+
<!-- VANI — Voice / microphone -->
|
|
214
|
+
<symbol id="icon-vani" viewBox="0 0 24 24">
|
|
215
|
+
<rect x="9" y="2" width="6" height="11" rx="3"/>
|
|
216
|
+
<path d="M5 10a7 7 0 0014 0"/>
|
|
217
|
+
<line x1="12" y1="17" x2="12" y2="22"/>
|
|
218
|
+
<line x1="8" y1="22" x2="16" y2="22"/>
|
|
219
|
+
</symbol>
|
|
220
|
+
|
|
221
|
+
<!-- DARSHAN — Eye / viewing -->
|
|
222
|
+
<symbol id="icon-darshan" viewBox="0 0 24 24">
|
|
223
|
+
<path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8S1 12 1 12z"/>
|
|
224
|
+
<circle cx="12" cy="12" r="3"/>
|
|
225
|
+
</symbol>
|
|
226
|
+
|
|
227
|
+
<!-- STUPA — Tower / distributed storage -->
|
|
228
|
+
<symbol id="icon-stupa" viewBox="0 0 24 24">
|
|
229
|
+
<line x1="12" y1="2" x2="12" y2="5"/>
|
|
230
|
+
<path d="M10 5h4l1 3H9z"/>
|
|
231
|
+
<ellipse cx="12" cy="11" rx="5" ry="3"/>
|
|
232
|
+
<ellipse cx="12" cy="15" rx="6" ry="3"/>
|
|
233
|
+
<ellipse cx="12" cy="19" rx="7" ry="3"/>
|
|
234
|
+
</symbol>
|
|
235
|
+
|
|
236
|
+
<!-- LAMA — Crystal ball / consensus -->
|
|
237
|
+
<symbol id="icon-lama" viewBox="0 0 24 24">
|
|
238
|
+
<circle cx="12" cy="10" r="7"/>
|
|
239
|
+
<path d="M12 3c-1.5 2-2 5 0 7s4.5 2 6 0"/>
|
|
240
|
+
<path d="M7 19h10"/>
|
|
241
|
+
<path d="M9 22h6"/>
|
|
242
|
+
<line x1="9" y1="17" x2="9" y2="19"/>
|
|
243
|
+
<line x1="15" y1="17" x2="15" y2="19"/>
|
|
244
|
+
</symbol>
|
|
245
|
+
|
|
246
|
+
<!-- MANI — Prayer stone / time sync -->
|
|
247
|
+
<symbol id="icon-mani" viewBox="0 0 24 24">
|
|
248
|
+
<circle cx="12" cy="12" r="9"/>
|
|
249
|
+
<polyline points="12 6 12 12 16 14"/>
|
|
250
|
+
<circle cx="12" cy="12" r="1" fill="currentColor"/>
|
|
251
|
+
</symbol>
|
|
252
|
+
|
|
253
|
+
<!-- KARMA — Yin-yang / reputation -->
|
|
254
|
+
<symbol id="icon-karma" viewBox="0 0 24 24">
|
|
255
|
+
<circle cx="12" cy="12" r="9"/>
|
|
256
|
+
<path d="M12 3a4.5 4.5 0 010 9 4.5 4.5 0 000 9"/>
|
|
257
|
+
<circle cx="12" cy="7.5" r="1.5" fill="currentColor"/>
|
|
258
|
+
<circle cx="12" cy="16.5" r="1.5"/>
|
|
259
|
+
</symbol>
|
|
260
|
+
|
|
261
|
+
<!-- TATTVA — Quantum elements / atom -->
|
|
262
|
+
<symbol id="icon-tattva" viewBox="0 0 24 24">
|
|
263
|
+
<circle cx="12" cy="12" r="2.5" fill="currentColor" stroke="none"/>
|
|
264
|
+
<ellipse cx="12" cy="12" rx="10" ry="4"/>
|
|
265
|
+
<ellipse cx="12" cy="12" rx="10" ry="4" transform="rotate(60 12 12)"/>
|
|
266
|
+
<ellipse cx="12" cy="12" rx="10" ry="4" transform="rotate(120 12 12)"/>
|
|
267
|
+
</symbol>
|
|
268
|
+
|
|
269
|
+
<!-- TRIBHUJ — Triangle / balanced ternary -->
|
|
270
|
+
<symbol id="icon-tribhuj" viewBox="0 0 24 24">
|
|
271
|
+
<polygon points="12,3 21,20 3,20"/>
|
|
272
|
+
<line x1="12" y1="3" x2="12" y2="20"/>
|
|
273
|
+
<line x1="7.5" y1="11.5" x2="16.5" y2="11.5"/>
|
|
274
|
+
<circle cx="12" cy="14" r="1" fill="currentColor"/>
|
|
275
|
+
</symbol>
|
|
276
|
+
|
|
277
|
+
<!-- YPC-27 — Lock / cipher -->
|
|
278
|
+
<symbol id="icon-ypc27" viewBox="0 0 24 24">
|
|
279
|
+
<rect x="5" y="11" width="14" height="10" rx="2"/>
|
|
280
|
+
<path d="M8 11V7a4 4 0 118 0v4"/>
|
|
281
|
+
<circle cx="12" cy="16" r="1" fill="currentColor"/>
|
|
282
|
+
<line x1="12" y1="17" x2="12" y2="19"/>
|
|
283
|
+
</symbol>
|
|
284
|
+
|
|
285
|
+
<!-- SAKSHI — Witness / aperture eye -->
|
|
286
|
+
<symbol id="icon-sakshi" viewBox="0 0 24 24">
|
|
287
|
+
<circle cx="12" cy="12" r="9"/>
|
|
288
|
+
<path d="M12 3l3 9-3 9"/>
|
|
289
|
+
<path d="M12 3l-3 9 3 9"/>
|
|
290
|
+
<circle cx="12" cy="12" r="2.5"/>
|
|
291
|
+
<circle cx="12" cy="12" r="0.8" fill="currentColor"/>
|
|
292
|
+
</symbol>
|
|
293
|
+
|
|
294
|
+
<!-- PRAMAAN — Globe / geographic proof -->
|
|
295
|
+
<symbol id="icon-pramaan" viewBox="0 0 24 24">
|
|
296
|
+
<circle cx="12" cy="12" r="9"/>
|
|
297
|
+
<ellipse cx="12" cy="12" rx="4" ry="9"/>
|
|
298
|
+
<line x1="3" y1="9" x2="21" y2="9"/>
|
|
299
|
+
<line x1="3" y1="15" x2="21" y2="15"/>
|
|
300
|
+
<path d="M18 4l-2 2 1 3"/>
|
|
301
|
+
<path d="M6 18l2-1 3 1"/>
|
|
302
|
+
</symbol>
|
|
303
|
+
|
|
304
|
+
<!-- SURAKSHA — Shield / security -->
|
|
305
|
+
<symbol id="icon-suraksha" viewBox="0 0 24 24">
|
|
306
|
+
<path d="M12 2l8 4v6c0 5.5-3.8 10.7-8 12-4.2-1.3-8-6.5-8-12V6z"/>
|
|
307
|
+
<polyline points="9 12 11 14 15 10"/>
|
|
308
|
+
</symbol>
|
|
309
|
+
|
|
310
|
+
<!-- TIVRA — Lightning bolt / acceleration -->
|
|
311
|
+
<symbol id="icon-tivra" viewBox="0 0 24 24">
|
|
312
|
+
<polygon points="13,2 3,14 12,14 11,22 21,10 12,10"/>
|
|
313
|
+
</symbol>
|
|
314
|
+
|
|
315
|
+
<!-- PRAHARI — Satellite / sentinel -->
|
|
316
|
+
<symbol id="icon-prahari" viewBox="0 0 24 24">
|
|
317
|
+
<rect x="9" y="9" width="6" height="6" rx="1" transform="rotate(45 12 12)"/>
|
|
318
|
+
<line x1="12" y1="5" x2="12" y2="2"/>
|
|
319
|
+
<line x1="19" y1="12" x2="22" y2="12"/>
|
|
320
|
+
<line x1="12" y1="19" x2="12" y2="22"/>
|
|
321
|
+
<line x1="5" y1="12" x2="2" y2="12"/>
|
|
322
|
+
<path d="M7 7L5 5"/>
|
|
323
|
+
<path d="M17 7l2-2"/>
|
|
324
|
+
</symbol>
|
|
325
|
+
|
|
326
|
+
<!-- DHARMA — Balance scale / content moderation -->
|
|
327
|
+
<symbol id="icon-dharma" viewBox="0 0 24 24">
|
|
328
|
+
<line x1="12" y1="3" x2="12" y2="21"/>
|
|
329
|
+
<line x1="4" y1="7" x2="20" y2="7"/>
|
|
330
|
+
<path d="M4 7l2 7h0a3 3 0 006 0h0l2-7"/>
|
|
331
|
+
<path d="M14 7l2 7h0a3 3 0 006 0h0l2-7"/>
|
|
332
|
+
<line x1="10" y1="21" x2="14" y2="21"/>
|
|
333
|
+
</symbol>
|
|
334
|
+
|
|
335
|
+
<!-- SEVA — Helping hands / NPU sharing -->
|
|
336
|
+
<symbol id="icon-seva" viewBox="0 0 24 24">
|
|
337
|
+
<path d="M12 22c-4 0-8-2-8-6 0-2 1-3 3-4l5-3 5 3c2 1 3 2 3 4 0 4-4 6-8 6z"/>
|
|
338
|
+
<path d="M12 11V5"/>
|
|
339
|
+
<path d="M9 8l3-3 3 3"/>
|
|
340
|
+
<circle cx="12" cy="16" r="2"/>
|
|
341
|
+
</symbol>
|
|
342
|
+
|
|
343
|
+
<!-- ═══ APPLICATIONS ═══ -->
|
|
344
|
+
|
|
345
|
+
<!-- YakApp — Messenger -->
|
|
346
|
+
<symbol id="icon-yakapp" viewBox="0 0 24 24">
|
|
347
|
+
<path d="M21 11.5a8.38 8.38 0 01-.9 3.8 8.5 8.5 0 01-7.6 4.7 8.38 8.38 0 01-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 01-.9-3.8 8.5 8.5 0 014.7-7.6 8.38 8.38 0 013.8-.9h.5a8.48 8.48 0 018 8v.5z"/>
|
|
348
|
+
</symbol>
|
|
349
|
+
|
|
350
|
+
<!-- C2C — Core to Cosmos -->
|
|
351
|
+
<symbol id="icon-c2c" viewBox="0 0 24 24">
|
|
352
|
+
<circle cx="12" cy="12" r="3"/>
|
|
353
|
+
<circle cx="12" cy="12" r="9"/>
|
|
354
|
+
<path d="M12 3v3"/>
|
|
355
|
+
<path d="M12 18v3"/>
|
|
356
|
+
<path d="M3 12h3"/>
|
|
357
|
+
<path d="M18 12h3"/>
|
|
358
|
+
</symbol>
|
|
359
|
+
|
|
360
|
+
<!-- Studio — Creative suite -->
|
|
361
|
+
<symbol id="icon-studio" viewBox="0 0 24 24">
|
|
362
|
+
<circle cx="13.5" cy="6.5" r="2.5"/>
|
|
363
|
+
<path d="M6 21l4-10 3 5 4-7 4 12"/>
|
|
364
|
+
<rect x="2" y="2" width="20" height="20" rx="2"/>
|
|
365
|
+
</symbol>
|
|
366
|
+
|
|
367
|
+
|
|
368
|
+
<!-- ═══ REFERENCE ═══ -->
|
|
369
|
+
|
|
370
|
+
<!-- Quick Reference — Clipboard -->
|
|
371
|
+
<symbol id="icon-quickref" viewBox="0 0 24 24">
|
|
372
|
+
<path d="M16 4h2a2 2 0 012 2v14a2 2 0 01-2 2H6a2 2 0 01-2-2V6a2 2 0 012-2h2"/>
|
|
373
|
+
<rect x="8" y="2" width="8" height="4" rx="1"/>
|
|
374
|
+
<line x1="8" y1="10" x2="16" y2="10"/>
|
|
375
|
+
<line x1="8" y1="14" x2="16" y2="14"/>
|
|
376
|
+
<line x1="8" y1="18" x2="12" y2="18"/>
|
|
377
|
+
</symbol>
|
|
378
|
+
|
|
379
|
+
<!-- GRANTH — Docs bundle -->
|
|
380
|
+
<symbol id="icon-granth" viewBox="0 0 24 24">
|
|
381
|
+
<path d="M4 19.5A2.5 2.5 0 016.5 17H20"/>
|
|
382
|
+
<path d="M6.5 2H20v20H6.5A2.5 2.5 0 014 19.5v-15A2.5 2.5 0 016.5 2z"/>
|
|
383
|
+
<path d="M8 7h8"/>
|
|
384
|
+
<path d="M8 11h5"/>
|
|
385
|
+
<path d="M8 15h3"/>
|
|
386
|
+
</symbol>
|
|
387
|
+
|
|
388
|
+
<!-- API — Signal tower -->
|
|
389
|
+
<symbol id="icon-api" viewBox="0 0 24 24">
|
|
390
|
+
<line x1="12" y1="10" x2="12" y2="22"/>
|
|
391
|
+
<path d="M8 6a6 6 0 018 0"/>
|
|
392
|
+
<path d="M5 3a10 10 0 0114 0"/>
|
|
393
|
+
<circle cx="12" cy="10" r="2"/>
|
|
394
|
+
</symbol>
|
|
395
|
+
|
|
396
|
+
<!-- Adapters — Plug connector -->
|
|
397
|
+
<symbol id="icon-adapters" viewBox="0 0 24 24">
|
|
398
|
+
<path d="M6 3v4"/>
|
|
399
|
+
<path d="M10 3v4"/>
|
|
400
|
+
<path d="M4 7h8v3a4 4 0 01-8 0V7z"/>
|
|
401
|
+
<line x1="8" y1="14" x2="8" y2="17"/>
|
|
402
|
+
<path d="M14 10h4v3a2 2 0 01-4 0v-3z"/>
|
|
403
|
+
<line x1="16" y1="7" x2="16" y2="10"/>
|
|
404
|
+
<line x1="16" y1="13" x2="16" y2="17"/>
|
|
405
|
+
<line x1="8" y1="17" x2="16" y2="17"/>
|
|
406
|
+
<line x1="12" y1="17" x2="12" y2="21"/>
|
|
407
|
+
</symbol>
|
|
408
|
+
|
|
409
|
+
<!-- ═══ EXTRA (pages outside nav-order) ═══ -->
|
|
410
|
+
|
|
411
|
+
<!-- Terminal / CLI -->
|
|
412
|
+
<symbol id="icon-terminal" viewBox="0 0 24 24">
|
|
413
|
+
<rect x="2" y="3" width="20" height="18" rx="2"/>
|
|
414
|
+
<polyline points="7 9 10 12 7 15"/>
|
|
415
|
+
<line x1="13" y1="15" x2="17" y2="15"/>
|
|
416
|
+
</symbol>
|
|
417
|
+
|
|
418
|
+
<!-- Gear / Configuration -->
|
|
419
|
+
<symbol id="icon-gear" viewBox="0 0 24 24">
|
|
420
|
+
<circle cx="12" cy="12" r="3"/>
|
|
421
|
+
<path d="M19.4 15a1.65 1.65 0 00.33 1.82l.06.06a2 2 0 01-2.83 2.83l-.06-.06a1.65 1.65 0 00-1.82-.33 1.65 1.65 0 00-1 1.51V21a2 2 0 01-4 0v-.09A1.65 1.65 0 009 19.4a1.65 1.65 0 00-1.82.33l-.06.06a2 2 0 01-2.83-2.83l.06-.06A1.65 1.65 0 004.68 15a1.65 1.65 0 00-1.51-1H3a2 2 0 010-4h.09A1.65 1.65 0 004.6 9a1.65 1.65 0 00-.33-1.82l-.06-.06a2 2 0 012.83-2.83l.06.06A1.65 1.65 0 009 4.68a1.65 1.65 0 001-1.51V3a2 2 0 014 0v.09a1.65 1.65 0 001 1.51 1.65 1.65 0 001.82-.33l.06-.06a2 2 0 012.83 2.83l-.06.06A1.65 1.65 0 0019.4 9a1.65 1.65 0 001.51 1H21a2 2 0 010 4h-.09a1.65 1.65 0 00-1.51 1z"/>
|
|
422
|
+
</symbol>
|
|
423
|
+
|
|
424
|
+
<!-- Server / Web hosting -->
|
|
425
|
+
<symbol id="icon-server" viewBox="0 0 24 24">
|
|
426
|
+
<rect x="2" y="2" width="20" height="8" rx="2"/>
|
|
427
|
+
<rect x="2" y="14" width="20" height="8" rx="2"/>
|
|
428
|
+
<line x1="6" y1="6" x2="6.01" y2="6"/>
|
|
429
|
+
<line x1="6" y1="18" x2="6.01" y2="18"/>
|
|
430
|
+
</symbol>
|
|
431
|
+
|
|
432
|
+
<!-- ═══ CHROME / UI ═══ -->
|
|
433
|
+
|
|
434
|
+
<!-- Mountain peak — logo icon (replaces 🏔️) -->
|
|
435
|
+
<symbol id="icon-mountain" viewBox="0 0 24 24">
|
|
436
|
+
<path d="M8 21l4.5-9 3 5.5L19 12l3 9H2l6-9z"/>
|
|
437
|
+
<path d="M12 12l1.5-3L16 14"/>
|
|
438
|
+
</symbol>
|
|
439
|
+
|
|
440
|
+
<!-- Dashboard / bar chart (replaces 📊) -->
|
|
441
|
+
<symbol id="icon-dashboard" viewBox="0 0 24 24">
|
|
442
|
+
<line x1="18" y1="20" x2="18" y2="10"/>
|
|
443
|
+
<line x1="12" y1="20" x2="12" y2="4"/>
|
|
444
|
+
<line x1="6" y1="20" x2="6" y2="14"/>
|
|
445
|
+
<rect x="2" y="2" width="20" height="20" rx="2" stroke-opacity="0.4"/>
|
|
446
|
+
</symbol>
|
|
447
|
+
|
|
448
|
+
<!-- ═══ GENERIC / CONTENT ICONS ═══ -->
|
|
449
|
+
|
|
450
|
+
<!-- Lock / encrypted (replaces 🔐) -->
|
|
451
|
+
<symbol id="icon-lock" viewBox="0 0 24 24">
|
|
452
|
+
<rect x="3" y="11" width="18" height="11" rx="2"/>
|
|
453
|
+
<path d="M7 11V7a5 5 0 0110 0v4"/>
|
|
454
|
+
</symbol>
|
|
455
|
+
|
|
456
|
+
<!-- Signal / broadcast (replaces 📡) -->
|
|
457
|
+
<symbol id="icon-signal" viewBox="0 0 24 24">
|
|
458
|
+
<path d="M2 12a10 10 0 0118 0"/>
|
|
459
|
+
<path d="M5 12a7 7 0 0112 0"/>
|
|
460
|
+
<path d="M8 12a4 4 0 016 0"/>
|
|
461
|
+
<circle cx="11" cy="12" r="1"/>
|
|
462
|
+
</symbol>
|
|
463
|
+
|
|
464
|
+
<!-- Link / chain (replaces 🔗) -->
|
|
465
|
+
<symbol id="icon-link" viewBox="0 0 24 24">
|
|
466
|
+
<path d="M10 13a5 5 0 007.54.54l3-3a5 5 0 00-7.07-7.07l-1.72 1.71"/>
|
|
467
|
+
<path d="M14 11a5 5 0 00-7.54-.54l-3 3a5 5 0 007.07 7.07l1.71-1.71"/>
|
|
468
|
+
</symbol>
|
|
469
|
+
|
|
470
|
+
<!-- Globe / network (replaces 🌐) -->
|
|
471
|
+
<symbol id="icon-globe" viewBox="0 0 24 24">
|
|
472
|
+
<circle cx="12" cy="12" r="10"/>
|
|
473
|
+
<line x1="2" y1="12" x2="22" y2="12"/>
|
|
474
|
+
<path d="M12 2a15.3 15.3 0 014 10 15.3 15.3 0 01-4 10 15.3 15.3 0 01-4-10 15.3 15.3 0 014-10z"/>
|
|
475
|
+
</symbol>
|
|
476
|
+
|
|
477
|
+
<!-- Sync / refresh (replaces 🔄) -->
|
|
478
|
+
<symbol id="icon-sync" viewBox="0 0 24 24">
|
|
479
|
+
<polyline points="23 4 23 10 17 10"/>
|
|
480
|
+
<polyline points="1 20 1 14 7 14"/>
|
|
481
|
+
<path d="M3.51 9a9 9 0 0114.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0020.49 15"/>
|
|
482
|
+
</symbol>
|
|
483
|
+
|
|
484
|
+
<!-- Users / group (replaces 👥) -->
|
|
485
|
+
<symbol id="icon-users" viewBox="0 0 24 24">
|
|
486
|
+
<path d="M17 21v-2a4 4 0 00-4-4H5a4 4 0 00-4 4v2"/>
|
|
487
|
+
<circle cx="9" cy="7" r="4"/>
|
|
488
|
+
<path d="M23 21v-2a4 4 0 00-3-3.87"/>
|
|
489
|
+
<path d="M16 3.13a4 4 0 010 7.75"/>
|
|
490
|
+
</symbol>
|
|
491
|
+
|
|
492
|
+
<!-- Shield / protection (replaces 🛡) -->
|
|
493
|
+
<symbol id="icon-shield" viewBox="0 0 24 24">
|
|
494
|
+
<path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/>
|
|
495
|
+
</symbol>
|
|
496
|
+
|
|
497
|
+
<!-- Heartbeat / pulse (replaces 💓) -->
|
|
498
|
+
<symbol id="icon-heartbeat" viewBox="0 0 24 24">
|
|
499
|
+
<path d="M3 12h4l3-9 4 18 3-9h4"/>
|
|
500
|
+
</symbol>
|
|
501
|
+
|
|
502
|
+
<!-- Map pin / location (replaces 📍) -->
|
|
503
|
+
<symbol id="icon-pin" viewBox="0 0 24 24">
|
|
504
|
+
<path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0118 0z"/>
|
|
505
|
+
<circle cx="12" cy="10" r="3"/>
|
|
506
|
+
</symbol>
|
|
507
|
+
|
|
508
|
+
<!-- Traffic light / status (replaces 🚦) -->
|
|
509
|
+
<symbol id="icon-traffic" viewBox="0 0 24 24">
|
|
510
|
+
<rect x="7" y="2" width="10" height="20" rx="3"/>
|
|
511
|
+
<circle cx="12" cy="7" r="1.5"/>
|
|
512
|
+
<circle cx="12" cy="12" r="1.5"/>
|
|
513
|
+
<circle cx="12" cy="17" r="1.5"/>
|
|
514
|
+
</symbol>
|
|
515
|
+
|
|
516
|
+
<!-- Check circle (replaces ✅) -->
|
|
517
|
+
<symbol id="icon-check" viewBox="0 0 24 24">
|
|
518
|
+
<path d="M22 11.08V12a10 10 0 11-5.93-9.14"/>
|
|
519
|
+
<polyline points="22 4 12 14.01 9 11.01"/>
|
|
520
|
+
</symbol>
|
|
521
|
+
|
|
522
|
+
<!-- Megaphone / broadcast (replaces 📢) -->
|
|
523
|
+
<symbol id="icon-megaphone" viewBox="0 0 24 24">
|
|
524
|
+
<path d="M21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z"/>
|
|
525
|
+
</symbol>
|
|
526
|
+
|
|
527
|
+
<!-- Pen / signed (replaces ✍) -->
|
|
528
|
+
<symbol id="icon-pen" viewBox="0 0 24 24">
|
|
529
|
+
<path d="M12 20h9"/>
|
|
530
|
+
<path d="M16.5 3.5a2.121 2.121 0 013 3L7 19l-4 1 1-4L16.5 3.5z"/>
|
|
531
|
+
</symbol>
|
|
532
|
+
|
|
533
|
+
<!-- Warning / alert (replaces ⚠) -->
|
|
534
|
+
<symbol id="icon-warning" viewBox="0 0 24 24">
|
|
535
|
+
<path d="M10.29 3.86L1.82 18a2 2 0 001.71 3h16.94a2 2 0 001.71-3L13.71 3.86a2 2 0 00-3.42 0z"/>
|
|
536
|
+
<line x1="12" y1="9" x2="12" y2="13"/>
|
|
537
|
+
<line x1="12" y1="17" x2="12.01" y2="17"/>
|
|
538
|
+
</symbol>
|
|
539
|
+
|
|
540
|
+
<!-- Hourglass / timer (replaces ⏳) -->
|
|
541
|
+
<symbol id="icon-hourglass" viewBox="0 0 24 24">
|
|
542
|
+
<path d="M6 2h12v5l-4 4 4 4v5H6v-5l4-4-4-4V2z"/>
|
|
543
|
+
</symbol>
|
|
544
|
+
|
|
545
|
+
<!-- Scroll / document (replaces 📜) -->
|
|
546
|
+
<symbol id="icon-scroll" viewBox="0 0 24 24">
|
|
547
|
+
<path d="M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z"/>
|
|
548
|
+
<polyline points="14 2 14 8 20 8"/>
|
|
549
|
+
<line x1="16" y1="13" x2="8" y2="13"/>
|
|
550
|
+
<line x1="16" y1="17" x2="8" y2="17"/>
|
|
551
|
+
</symbol>
|
|
552
|
+
|
|
553
|
+
<!-- Bolt / lightning (replaces ⚡) -->
|
|
554
|
+
<symbol id="icon-bolt" viewBox="0 0 24 24">
|
|
555
|
+
<polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"/>
|
|
556
|
+
</symbol>
|
|
557
|
+
|
|
558
|
+
<!-- Target / crosshair (replaces 🎯) -->
|
|
559
|
+
<symbol id="icon-target" viewBox="0 0 24 24">
|
|
560
|
+
<circle cx="12" cy="12" r="10"/>
|
|
561
|
+
<circle cx="12" cy="12" r="6"/>
|
|
562
|
+
<circle cx="12" cy="12" r="2"/>
|
|
563
|
+
</symbol>
|
|
564
|
+
|
|
565
|
+
<!-- Handshake / trust (replaces 🤝) -->
|
|
566
|
+
<symbol id="icon-handshake" viewBox="0 0 24 24">
|
|
567
|
+
<path d="M11 17l-3.5-3.5a2.12 2.12 0 013-3L14 14"/>
|
|
568
|
+
<path d="M20.88 7.12l-3.17 3.17"/>
|
|
569
|
+
<path d="M3.12 7.12l3.17 3.17"/>
|
|
570
|
+
<path d="M2 12h4"/>
|
|
571
|
+
<path d="M18 12h4"/>
|
|
572
|
+
<path d="M7.76 4.25L12 2l4.24 2.25"/>
|
|
573
|
+
</symbol>
|
|
574
|
+
|
|
575
|
+
<!-- Leaf / organic (replaces 🌿) -->
|
|
576
|
+
<symbol id="icon-leaf" viewBox="0 0 24 24">
|
|
577
|
+
<path d="M17 8C8 10 5.9 16.17 3.82 21.34l1.89.66.95-2.3c.48.17.98.3 1.34.3C19 20 22 3 22 3c-1 0-8 0-10 2"/>
|
|
578
|
+
<path d="M7 15c2-2 5.5-3 9-3"/>
|
|
579
|
+
</symbol>
|
|
580
|
+
|
|
581
|
+
<!-- Satellite (replaces 🛰) -->
|
|
582
|
+
<symbol id="icon-satellite" viewBox="0 0 24 24">
|
|
583
|
+
<path d="M13 7L9 3 5 7l4 4"/>
|
|
584
|
+
<path d="M17 11l4 4-4 4-4-4"/>
|
|
585
|
+
<line x1="8" y1="11" x2="13" y2="16"/>
|
|
586
|
+
<line x1="3" y1="21" x2="3.01" y2="21"/>
|
|
587
|
+
<path d="M6 18a3 3 0 000 0"/>
|
|
588
|
+
<path d="M9 15a6 6 0 000 0"/>
|
|
589
|
+
</symbol>
|
|
590
|
+
|
|
591
|
+
<!-- Phone / mobile (replaces 📱) -->
|
|
592
|
+
<symbol id="icon-phone" viewBox="0 0 24 24">
|
|
593
|
+
<rect x="5" y="2" width="14" height="20" rx="2"/>
|
|
594
|
+
<line x1="12" y1="18" x2="12.01" y2="18"/>
|
|
595
|
+
</symbol>
|
|
596
|
+
|
|
597
|
+
<!-- Masks / theater (replaces 🎭) -->
|
|
598
|
+
<symbol id="icon-masks" viewBox="0 0 24 24">
|
|
599
|
+
<circle cx="12" cy="12" r="10"/>
|
|
600
|
+
<path d="M8 14s1.5 2 4 2 4-2 4-2"/>
|
|
601
|
+
<line x1="9" y1="9" x2="9.01" y2="9"/>
|
|
602
|
+
<line x1="15" y1="9" x2="15.01" y2="9"/>
|
|
603
|
+
</symbol>
|
|
604
|
+
|
|
605
|
+
<!-- Stars / cosmos (replaces 🌌) -->
|
|
606
|
+
<symbol id="icon-cosmos" viewBox="0 0 24 24">
|
|
607
|
+
<polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"/>
|
|
608
|
+
</symbol>
|
|
609
|
+
|
|
610
|
+
<!-- Gem / diamond (replaces 💎) -->
|
|
611
|
+
<symbol id="icon-gem" viewBox="0 0 24 24">
|
|
612
|
+
<polygon points="6 3 18 3 22 9 12 22 2 9 6 3"/>
|
|
613
|
+
<line x1="2" y1="9" x2="22" y2="9"/>
|
|
614
|
+
<line x1="12" y1="22" x2="8" y2="9"/>
|
|
615
|
+
<line x1="12" y1="22" x2="16" y2="9"/>
|
|
616
|
+
<line x1="8" y1="9" x2="10" y2="3"/>
|
|
617
|
+
<line x1="16" y1="9" x2="14" y2="3"/>
|
|
618
|
+
</symbol>
|
|
619
|
+
|
|
620
|
+
<!-- Search / magnifying glass (replaces 🔍) -->
|
|
621
|
+
<symbol id="icon-search" viewBox="0 0 24 24">
|
|
622
|
+
<circle cx="11" cy="11" r="8"/>
|
|
623
|
+
<line x1="21" y1="21" x2="16.65" y2="16.65"/>
|
|
624
|
+
</symbol>
|
|
625
|
+
|
|
626
|
+
</svg>
|
|
627
|
+
<!-- YAKMESH-ICON-SPRITE-END -->
|
|
628
|
+
<a href="#mainContent" class="skip-link">Skip to main content</a>
|
|
629
|
+
|
|
630
|
+
<nav class="docs-sidebar" id="sidebar">
|
|
631
|
+
<a href="index.html" class="sidebar-logo">
|
|
632
|
+
<span class="logo-icon"><svg class="doc-icon" aria-hidden="true"><use href="#icon-mountain"/></svg></span>
|
|
633
|
+
<span class="logo-text">Yakmesh</span>
|
|
634
|
+
</a>
|
|
635
|
+
<a href="/dashboard" class="sidebar-dashboard-link"><svg class="doc-icon" aria-hidden="true"><use href="#icon-dashboard"/></svg> <span>Dashboard</span></a>
|
|
636
|
+
<ul class="sidebar-nav">
|
|
637
|
+
<li class="sidebar-section"><span><svg class="doc-icon" aria-hidden="true"><use href="#icon-book"/></svg> Guides</span></li>
|
|
638
|
+
<li><a href="index.html"><svg class="doc-icon" aria-hidden="true"><use href="#icon-home"/></svg> <span>Overview</span></a></li>
|
|
639
|
+
<li><a href="getting-started.html"><svg class="doc-icon" aria-hidden="true"><use href="#icon-rocket"/></svg> <span>Getting Started</span></a></li>
|
|
640
|
+
<li><a href="tutorials.html"><svg class="doc-icon" aria-hidden="true"><use href="#icon-book"/></svg> <span>Tutorials</span></a></li>
|
|
641
|
+
<li class="sidebar-section"><span><svg class="doc-icon" aria-hidden="true"><use href="#icon-yak"/></svg> Protocol Stack</span></li>
|
|
642
|
+
<li><a href="yak-protocol.html"><svg class="doc-icon" aria-hidden="true"><use href="#icon-yak"/></svg> <span>YAK://</span></a></li>
|
|
643
|
+
<li><a href="annex.html"><svg class="doc-icon" aria-hidden="true"><use href="#icon-annex"/></svg> <span>ANNEX</span></a></li>
|
|
644
|
+
<li><a href="jhilke.html" class="active"><svg class="doc-icon" aria-hidden="true"><use href="#icon-jhilke"/></svg> <span>JHILKE</span></a></li>
|
|
645
|
+
<li><a href="nakpak.html"><svg class="doc-icon" aria-hidden="true"><use href="#icon-nakpak"/></svg> <span>NAKPAK</span></a></li>
|
|
646
|
+
<li><a href="namche.html"><svg class="doc-icon" aria-hidden="true"><use href="#icon-namche"/></svg> <span>NAMCHE</span></a></li>
|
|
647
|
+
<li><a href="doko.html"><svg class="doc-icon" aria-hidden="true"><use href="#icon-doko"/></svg> <span>DOKO</span></a></li>
|
|
648
|
+
<li><a href="sherpa.html"><svg class="doc-icon" aria-hidden="true"><use href="#icon-sherpa"/></svg> <span>SHERPA</span></a></li>
|
|
649
|
+
<li><a href="mandala.html"><svg class="doc-icon" aria-hidden="true"><use href="#icon-mandala"/></svg> <span>MANDALA</span></a></li>
|
|
650
|
+
<li><a href="mantra.html"><svg class="doc-icon" aria-hidden="true"><use href="#icon-mantra"/></svg> <span>MANTRA</span></a></li>
|
|
651
|
+
<li><a href="gumba.html"><svg class="doc-icon" aria-hidden="true"><use href="#icon-gumba"/></svg> <span>GUMBA</span></a></li>
|
|
652
|
+
<li><a href="yurt.html"><svg class="doc-icon" aria-hidden="true"><use href="#icon-yurt"/></svg> <span>YURT</span></a></li>
|
|
653
|
+
<li><a href="katha.html"><svg class="doc-icon" aria-hidden="true"><use href="#icon-katha"/></svg> <span>KATHA</span></a></li>
|
|
654
|
+
<li><a href="vani.html"><svg class="doc-icon" aria-hidden="true"><use href="#icon-vani"/></svg> <span>VANI</span></a></li>
|
|
655
|
+
<li><a href="darshan.html"><svg class="doc-icon" aria-hidden="true"><use href="#icon-darshan"/></svg> <span>DARSHAN</span></a></li>
|
|
656
|
+
<li><a href="stupa.html"><svg class="doc-icon" aria-hidden="true"><use href="#icon-stupa"/></svg> <span>STUPA</span></a></li>
|
|
657
|
+
<li><a href="lama.html"><svg class="doc-icon" aria-hidden="true"><use href="#icon-lama"/></svg> <span>LAMA</span></a></li>
|
|
658
|
+
<li><a href="mani.html"><svg class="doc-icon" aria-hidden="true"><use href="#icon-mani"/></svg> <span>MANI</span></a></li>
|
|
659
|
+
<li><a href="karma.html"><svg class="doc-icon" aria-hidden="true"><use href="#icon-karma"/></svg> <span>KARMA</span></a></li>
|
|
660
|
+
<li><a href="tattva.html"><svg class="doc-icon" aria-hidden="true"><use href="#icon-tattva"/></svg> <span>TATTVA</span></a></li>
|
|
661
|
+
<li><a href="tribhuj.html"><svg class="doc-icon" aria-hidden="true"><use href="#icon-tribhuj"/></svg> <span>TRIBHUJ</span></a></li>
|
|
662
|
+
<li><a href="ypc27.html"><svg class="doc-icon" aria-hidden="true"><use href="#icon-ypc27"/></svg> <span>YPC-27</span></a></li>
|
|
663
|
+
<li><a href="sakshi.html"><svg class="doc-icon" aria-hidden="true"><use href="#icon-sakshi"/></svg> <span>SAKSHI</span></a></li>
|
|
664
|
+
<li><a href="geo-proof.html"><svg class="doc-icon" aria-hidden="true"><use href="#icon-pramaan"/></svg> <span>PRAMAAN</span></a></li>
|
|
665
|
+
<li><a href="trust-security.html"><svg class="doc-icon" aria-hidden="true"><use href="#icon-suraksha"/></svg> <span>SURAKSHA</span></a></li>
|
|
666
|
+
<li><a href="tivra.html"><svg class="doc-icon" aria-hidden="true"><use href="#icon-tivra"/></svg> <span>TIVRA</span></a></li>
|
|
667
|
+
<li><a href="prahari.html"><svg class="doc-icon" aria-hidden="true"><use href="#icon-prahari"/></svg> <span>PRAHARI</span></a></li>
|
|
668
|
+
<li><a href="dharma.html"><svg class="doc-icon" aria-hidden="true"><use href="#icon-dharma"/></svg> <span>DHARMA</span></a></li>
|
|
669
|
+
<li><a href="seva.html"><svg class="doc-icon" aria-hidden="true"><use href="#icon-seva"/></svg> <span>SEVA</span></a></li>
|
|
670
|
+
<li><a href="docs-bundle.html"><svg class="doc-icon" aria-hidden="true"><use href="#icon-granth"/></svg> <span>GRANTH</span></a></li>
|
|
671
|
+
<li><a href="api.html"><svg class="doc-icon" aria-hidden="true"><use href="#icon-api"/></svg> <span>API</span></a></li>
|
|
672
|
+
<li><a href="adapters.html"><svg class="doc-icon" aria-hidden="true"><use href="#icon-adapters"/></svg> <span>Adapters</span></a></li>
|
|
673
|
+
<li class="sidebar-section"><span><svg class="doc-icon" aria-hidden="true"><use href="#icon-rocket"/></svg> Applications</span></li>
|
|
674
|
+
<li><a href="yakapp.html"><svg class="doc-icon" aria-hidden="true"><use href="#icon-yakapp"/></svg> <span>YakApp</span></a></li>
|
|
675
|
+
<li><a href="c2c.html"><svg class="doc-icon" aria-hidden="true"><use href="#icon-c2c"/></svg> <span>C2C</span></a></li>
|
|
676
|
+
<li><a href="studio.html"><svg class="doc-icon" aria-hidden="true"><use href="#icon-studio"/></svg> <span>Studio</span></a></li>
|
|
677
|
+
<li class="sidebar-section"><span><svg class="doc-icon" aria-hidden="true"><use href="#icon-gear"/></svg> Infrastructure</span></li>
|
|
678
|
+
<li><a href="cli.html"><svg class="doc-icon" aria-hidden="true"><use href="#icon-terminal"/></svg> <span>CLI</span></a></li>
|
|
679
|
+
<li><a href="configuration.html"><svg class="doc-icon" aria-hidden="true"><use href="#icon-gear"/></svg> <span>Configuration</span></a></li>
|
|
680
|
+
<li><a href="mesh.html"><svg class="doc-icon" aria-hidden="true"><use href="#icon-mandala"/></svg> <span>Mesh Network</span></a></li>
|
|
681
|
+
<li><a href="time-sources.html"><svg class="doc-icon" aria-hidden="true"><use href="#icon-mani"/></svg> <span>Time Sources</span></a></li>
|
|
682
|
+
<li><a href="webserver.html"><svg class="doc-icon" aria-hidden="true"><use href="#icon-server"/></svg> <span>Web Server</span></a></li>
|
|
683
|
+
<li><a href="advanced-systems.html"><svg class="doc-icon" aria-hidden="true"><use href="#icon-tivra"/></svg> <span>Advanced Systems</span></a></li>
|
|
684
|
+
<li class="sidebar-section"><span><svg class="doc-icon" aria-hidden="true"><use href="#icon-book"/></svg> Tutorials</span></li>
|
|
685
|
+
<li><a href="gumba-tutorial.html"><svg class="doc-icon" aria-hidden="true"><use href="#icon-gumba"/></svg> <span>GUMBA Tutorial</span></a></li>
|
|
686
|
+
<li class="sidebar-section"><span><svg class="doc-icon" aria-hidden="true"><use href="#icon-quickref"/></svg> Reference</span></li>
|
|
687
|
+
<li><a href="quick-reference.html"><svg class="doc-icon" aria-hidden="true"><use href="#icon-quickref"/></svg> <span>Quick Ref</span></a></li>
|
|
688
|
+
</ul>
|
|
689
|
+
</nav>
|
|
690
|
+
|
|
691
|
+
<button class="sidebar-toggle" id="sidebarToggle" title="Toggle sidebar">
|
|
692
|
+
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
|
693
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M11 19l-7-7 7-7m8 14l-7-7 7-7" />
|
|
694
|
+
</svg>
|
|
695
|
+
</button>
|
|
696
|
+
|
|
697
|
+
<div class="sidebar-overlay" id="sidebarOverlay"></div>
|
|
698
|
+
|
|
699
|
+
<main class="docs-main" id="mainContent">
|
|
700
|
+
<div class="docs-content">
|
|
701
|
+
<div class="flex items-center gap-3 mb-4">
|
|
702
|
+
<svg class="doc-icon hero-icon" aria-hidden="true"><use href="#icon-jhilke"/></svg>
|
|
703
|
+
<div>
|
|
704
|
+
<h1 class="text-4xl font-bold">JHILKE <span class="text-xl text-mountain-400">झिल्के</span></h1>
|
|
705
|
+
<p class="theme-accent">Just Hidden In-band Legitimate Key Exchange</p>
|
|
706
|
+
</div>
|
|
707
|
+
</div>
|
|
708
|
+
<p class="text-xl text-mountain-300 mb-4">Steganographic key lifecycle management for the Yakmesh mesh.</p>
|
|
709
|
+
<span class="inline-block text-xs theme-badge px-2 py-1 rounded mb-8">v1.0.0</span>
|
|
710
|
+
|
|
711
|
+
<div class="feature-box">
|
|
712
|
+
<h2>The Sound of Crickets</h2>
|
|
713
|
+
<p>
|
|
714
|
+
In Nepali, <strong>झिल्के (jhilke)</strong> describes the chirping of crickets in the Himalayan
|
|
715
|
+
night — a chorus only those who belong can hear. Outsiders perceive noise; insiders hear signals.
|
|
716
|
+
</p>
|
|
717
|
+
<p>
|
|
718
|
+
Like the <strong>D-Day cricket clickers</strong>, where Allied paratroopers used a simple
|
|
719
|
+
click-clack pattern to identify friend from foe in darkness. Like the <strong>Navajo
|
|
720
|
+
codetalkers</strong> whose language was unbreakable because it was meaningful only to those who grew up with it.
|
|
721
|
+
</p>
|
|
722
|
+
<p>
|
|
723
|
+
JHILKE hides its key management signals inside ordinary mesh entropy traffic.
|
|
724
|
+
To an observer, it's noise. To nodes sharing the same codebase — it's a conversation.
|
|
725
|
+
</p>
|
|
726
|
+
</div>
|
|
727
|
+
|
|
728
|
+
<div class="firefly-callout">
|
|
729
|
+
<h3 class="font-semibold text-lg mb-3" style="color:#a3e635"><svg class="doc-icon inline-icon" width="24" height="24" aria-hidden="true"><use href="#icon-bolt"/></svg> Why Fireflies?</h3>
|
|
730
|
+
<p class="text-mountain-300 mb-3">
|
|
731
|
+
Fireflies (<em>Lampyridae</em>) are nature's original steganographers. Each species
|
|
732
|
+
flashes a unique pattern — a <strong>species-specific dialect</strong> that only potential mates
|
|
733
|
+
of the same species can decode. To every other creature in the meadow, it's just random light.
|
|
734
|
+
Sound familiar?
|
|
735
|
+
</p>
|
|
736
|
+
<p class="text-mountain-300 mb-3">
|
|
737
|
+
JHILKE nodes do exactly what fireflies do: they embed signals in the noise of the night. The "dialect" is
|
|
738
|
+
derived from the shared codebase hash. Same code = same species = you understand the flash pattern.
|
|
739
|
+
Different code = different species = it's just entropy.
|
|
740
|
+
</p>
|
|
741
|
+
<p class="text-mountain-400 text-sm" style="position:relative;z-index:1">
|
|
742
|
+
<svg class="doc-icon inline-icon" width="24" height="24" aria-hidden="true"><use href="#icon-globe"/></svg> <em>Real fireflies are disappearing worldwide due to light pollution, habitat loss, and pesticides.
|
|
743
|
+
At least 2,000 species exist, with some already critically endangered. If you see fireflies near your home,
|
|
744
|
+
consider yourself lucky — and keep the lights low for them.</em>
|
|
745
|
+
</p>
|
|
746
|
+
</div>
|
|
747
|
+
|
|
748
|
+
<div class="firefly-divider"></div>
|
|
749
|
+
|
|
750
|
+
<h2 class="text-2xl font-bold mt-12 mb-6">Overview</h2>
|
|
751
|
+
|
|
752
|
+
<p class="text-mountain-300 mb-6">
|
|
753
|
+
JHILKE provides two critical functions that together eliminate all plaintext
|
|
754
|
+
cryptographic exchange on the Yakmesh network:
|
|
755
|
+
</p>
|
|
756
|
+
|
|
757
|
+
<div class="grid md:grid-cols-2 gap-4 mb-8">
|
|
758
|
+
<div class="p-4 bg-mountain-800 rounded-lg border border-mountain-700">
|
|
759
|
+
<div class="text-2xl mb-2"><svg class="doc-icon card-icon" width="24" height="24" aria-hidden="true"><use href="#icon-lock"/></svg></div>
|
|
760
|
+
<h3 class="font-semibold mb-1">Deterministic Bootstrap</h3>
|
|
761
|
+
<p class="text-mountain-400 text-sm">Both nodes independently derive the same initial encryption key from
|
|
762
|
+
the shared code hash. Traffic is encrypted from message #1 — no plaintext KEM exchange ever occurs.</p>
|
|
763
|
+
</div>
|
|
764
|
+
<div class="p-4 bg-mountain-800 rounded-lg border border-mountain-700">
|
|
765
|
+
<div class="text-2xl mb-2"><svg class="doc-icon card-icon" width="24" height="24" aria-hidden="true"><use href="#icon-leaf"/></svg></div>
|
|
766
|
+
<h4 class="font-semibold mb-1">Steganographic Rekey</h4>
|
|
767
|
+
<p class="text-mountain-400 text-sm">Ongoing key rotations are coordinated via hidden signals embedded in
|
|
768
|
+
mesh_entropy messages. No explicit REKEY messages — an observer sees only noise.</p>
|
|
769
|
+
</div>
|
|
770
|
+
<div class="p-4 bg-mountain-800 rounded-lg border border-mountain-700">
|
|
771
|
+
<div class="text-2xl mb-2"><svg class="doc-icon card-icon" width="24" height="24" aria-hidden="true"><use href="#icon-tribhuj"/></svg></div>
|
|
772
|
+
<h4 class="font-semibold mb-1">Ternary State Machine</h4>
|
|
773
|
+
<p class="text-mountain-400 text-sm">Three-phase coordination using TRIBHUJ trits: PREPARE (+1),
|
|
774
|
+
READY (0), SWITCH (-1). Both sides must agree before any key change occurs.</p>
|
|
775
|
+
</div>
|
|
776
|
+
<div class="p-4 bg-mountain-800 rounded-lg border border-mountain-700">
|
|
777
|
+
<div class="text-2xl mb-2"><svg class="doc-icon card-icon" width="24" height="24" aria-hidden="true"><use href="#icon-sync"/></svg></div>
|
|
778
|
+
<h4 class="font-semibold mb-1">SST Modulation</h4>
|
|
779
|
+
<p class="text-mountain-400 text-sm">Signal encoding is modulated by the Fibonacci 24-cycle (Sacred
|
|
780
|
+
Sequence Theory), adding rotational variety that makes pattern analysis impossible.</p>
|
|
781
|
+
</div>
|
|
782
|
+
</div>
|
|
783
|
+
|
|
784
|
+
<div class="firefly-divider"></div>
|
|
785
|
+
|
|
786
|
+
<h2 class="text-2xl font-bold mt-12 mb-6" id="problem">The Problem JHILKE Solves</h2>
|
|
787
|
+
|
|
788
|
+
<p class="text-mountain-300 mb-4">
|
|
789
|
+
Traditional key exchange protocols expose critical metadata to passive observers:
|
|
790
|
+
</p>
|
|
791
|
+
|
|
792
|
+
<div class="overflow-x-auto mb-8">
|
|
793
|
+
<table class="w-full text-sm">
|
|
794
|
+
<thead class="bg-mountain-800">
|
|
795
|
+
<tr>
|
|
796
|
+
<th class="px-4 py-2 text-left">Leaked Information</th>
|
|
797
|
+
<th class="px-4 py-2 text-left">Before JHILKE</th>
|
|
798
|
+
<th class="px-4 py-2 text-left">After JHILKE</th>
|
|
799
|
+
</tr>
|
|
800
|
+
</thead>
|
|
801
|
+
<tbody class="divide-y divide-mountain-700">
|
|
802
|
+
<tr>
|
|
803
|
+
<td class="px-4 py-2">KEM public keys</td>
|
|
804
|
+
<td class="px-4 py-2 text-red-400">Plaintext on wire</td>
|
|
805
|
+
<td class="px-4 py-2 text-green-400">Encrypted (bootstrap channel)</td>
|
|
806
|
+
</tr>
|
|
807
|
+
<tr>
|
|
808
|
+
<td class="px-4 py-2">KEM ciphertext</td>
|
|
809
|
+
<td class="px-4 py-2 text-red-400">Plaintext on wire</td>
|
|
810
|
+
<td class="px-4 py-2 text-green-400">Encrypted (bootstrap channel)</td>
|
|
811
|
+
</tr>
|
|
812
|
+
<tr>
|
|
813
|
+
<td class="px-4 py-2">Rekey timing</td>
|
|
814
|
+
<td class="px-4 py-2 text-red-400">Visible REKEY messages</td>
|
|
815
|
+
<td class="px-4 py-2 text-green-400">Hidden in entropy traffic</td>
|
|
816
|
+
</tr>
|
|
817
|
+
<tr>
|
|
818
|
+
<td class="px-4 py-2">Key rotation frequency</td>
|
|
819
|
+
<td class="px-4 py-2 text-red-400">Countable</td>
|
|
820
|
+
<td class="px-4 py-2 text-green-400">Indistinguishable from noise</td>
|
|
821
|
+
</tr>
|
|
822
|
+
<tr>
|
|
823
|
+
<td class="px-4 py-2">First message encryption</td>
|
|
824
|
+
<td class="px-4 py-2 text-red-400">Delayed until KEM completes</td>
|
|
825
|
+
<td class="px-4 py-2 text-green-400">Immediate (deterministic key)</td>
|
|
826
|
+
</tr>
|
|
827
|
+
</tbody>
|
|
828
|
+
</table>
|
|
829
|
+
</div>
|
|
830
|
+
|
|
831
|
+
<div class="firefly-divider"></div>
|
|
832
|
+
|
|
833
|
+
<h2 class="text-2xl font-bold mt-12 mb-6" id="bootstrap">Deterministic Bootstrap</h2>
|
|
834
|
+
|
|
835
|
+
<p class="text-mountain-300 mb-4">
|
|
836
|
+
When two nodes connect, they both independently compute the same initial symmetric key:
|
|
837
|
+
</p>
|
|
838
|
+
|
|
839
|
+
<pre class="code-block mb-6"><code class="language-javascript">// Both nodes independently derive the same bootstrap key
|
|
840
|
+
// Key = HKDF(SHA3-256, codeHash, sortedNodeIds, bootstrapInfo, 32)
|
|
841
|
+
|
|
842
|
+
import { JhilkeCoordinator } from './mesh/jhilke.js';
|
|
843
|
+
|
|
844
|
+
const jhilke = new JhilkeCoordinator({
|
|
845
|
+
codeHash: oracle.selfHash, // Validation Oracle code hash
|
|
846
|
+
nodeId: myNodeId,
|
|
847
|
+
annex: annexInstance,
|
|
848
|
+
mesh: meshInstance,
|
|
849
|
+
});
|
|
850
|
+
|
|
851
|
+
// Derive bootstrap key for a peer (deterministic — both nodes get same key)
|
|
852
|
+
const bootstrapKey = jhilke.deriveBootstrapKey(peerNodeId);
|
|
853
|
+
|
|
854
|
+
// Create ANNEX session using bootstrap key (no KEM exchange needed!)
|
|
855
|
+
annex.bootstrapSession(peerNodeId, bootstrapKey);
|
|
856
|
+
|
|
857
|
+
// Traffic is now encrypted from the very first message.
|
|
858
|
+
// KEM upgrade happens automatically through the encrypted channel.</code></pre>
|
|
859
|
+
|
|
860
|
+
<div class="theme-callout p-4 rounded-lg border mb-6">
|
|
861
|
+
<strong>Security Note:</strong> The bootstrap key is derived from the code hash + node IDs.
|
|
862
|
+
Anyone with the source code and both node IDs could theoretically compute it. This is by design —
|
|
863
|
+
the bootstrap key is a <em>temporary bridge</em> that protects the KEM exchange itself.
|
|
864
|
+
It's replaced by a proper ML-KEM-768 key within seconds.
|
|
865
|
+
</div>
|
|
866
|
+
|
|
867
|
+
<h3 class="text-lg font-bold mt-8 mb-4">Key Derivation</h3>
|
|
868
|
+
|
|
869
|
+
<pre class="code-block mb-6"><code class="language-javascript">// Salt includes both node IDs (sorted for order-independence)
|
|
870
|
+
const [first, second] = [nodeA, nodeB].sort();
|
|
871
|
+
const salt = `YAKMESH-JHILKE-BOOTSTRAP-2026:${first}:${second}`;
|
|
872
|
+
|
|
873
|
+
// HKDF derivation
|
|
874
|
+
const key = HKDF(
|
|
875
|
+
SHA3-256, // Hash function
|
|
876
|
+
codeHash, // Input key material (oracle hash)
|
|
877
|
+
salt, // Salt (sorted node IDs)
|
|
878
|
+
'yakmesh-jhilke-bootstrap-key-v1', // Info string (versioned)
|
|
879
|
+
32 // Output: 256-bit key
|
|
880
|
+
);</code></pre>
|
|
881
|
+
|
|
882
|
+
<div class="firefly-divider"></div>
|
|
883
|
+
|
|
884
|
+
<h2 class="text-2xl font-bold mt-12 mb-6" id="lifecycle">Encryption Lifecycle</h2>
|
|
885
|
+
|
|
886
|
+
<p class="text-mountain-300 mb-4">
|
|
887
|
+
JHILKE manages the complete ANNEX encryption lifecycle:
|
|
888
|
+
</p>
|
|
889
|
+
|
|
890
|
+
<div class="bg-mountain-800 border theme-border rounded-xl p-6 mb-8">
|
|
891
|
+
<ol class="space-y-4 text-mountain-300">
|
|
892
|
+
<li class="flex items-start gap-3">
|
|
893
|
+
<span class="theme-accent font-bold text-xl">1</span>
|
|
894
|
+
<div>
|
|
895
|
+
<strong class="text-white">Bootstrap</strong> — Both nodes derive deterministic key from shared code hash.
|
|
896
|
+
ANNEX session created with immediate encryption capability.
|
|
897
|
+
</div>
|
|
898
|
+
</li>
|
|
899
|
+
<li class="flex items-start gap-3">
|
|
900
|
+
<span class="theme-accent font-bold text-xl">2</span>
|
|
901
|
+
<div>
|
|
902
|
+
<strong class="text-white">KEM Upgrade</strong> — ML-KEM-768 key exchange happens <em>inside</em> the
|
|
903
|
+
bootstrap-encrypted channel. KEM public key + ciphertext never appear in plaintext.
|
|
904
|
+
</div>
|
|
905
|
+
</li>
|
|
906
|
+
<li class="flex items-start gap-3">
|
|
907
|
+
<span class="theme-accent font-bold text-xl">3</span>
|
|
908
|
+
<div>
|
|
909
|
+
<strong class="text-white">Steady State</strong> — ANNEX uses the KEM-derived key. JHILKE tick loop
|
|
910
|
+
monitors for rekey needs (every 5 minutes or 10,000 messages).
|
|
911
|
+
</div>
|
|
912
|
+
</li>
|
|
913
|
+
<li class="flex items-start gap-3">
|
|
914
|
+
<span class="theme-accent font-bold text-xl">4</span>
|
|
915
|
+
<div>
|
|
916
|
+
<strong class="text-white">Cricket Rekey</strong> — When rekey is needed, JHILKE coordinates both sides
|
|
917
|
+
via steganographic signals. Only after mutual confirmation does the actual KEM rekey occur.
|
|
918
|
+
</div>
|
|
919
|
+
</li>
|
|
920
|
+
</ol>
|
|
921
|
+
</div>
|
|
922
|
+
|
|
923
|
+
<div class="firefly-divider"></div>
|
|
924
|
+
|
|
925
|
+
<h2 class="text-2xl font-bold mt-12 mb-6" id="steganography">Steganographic Signals</h2>
|
|
926
|
+
|
|
927
|
+
<div class="firefly-callout">
|
|
928
|
+
<p class="text-mountain-300">
|
|
929
|
+
<strong style="color:#a3e635"><svg class="doc-icon inline-icon" width="24" height="24" aria-hidden="true"><use href="#icon-bolt"/></svg> The Firefly Flash Pattern:</strong>
|
|
930
|
+
Just as <em>Photinus pyralis</em> uses a specific J-shaped flash lasting exactly 0.5 seconds
|
|
931
|
+
followed by a 2-second pause, JHILKE nodes embed precisely-timed signals in the constant
|
|
932
|
+
stream of mesh entropy. The pattern is meaningful only to nodes sharing the same "species" —
|
|
933
|
+
the same codebase hash. Every other observer sees random light in the darkness.
|
|
934
|
+
</p>
|
|
935
|
+
</div>
|
|
936
|
+
|
|
937
|
+
<p class="text-mountain-300 mb-4">
|
|
938
|
+
JHILKE signals are hidden inside <code class="theme-accent">mesh_entropy</code> messages —
|
|
939
|
+
a normal part of mesh communication used for entropy exchange between peers:
|
|
940
|
+
</p>
|
|
941
|
+
|
|
942
|
+
<pre class="code-block mb-6"><code class="language-javascript">// What an observer sees on the wire:
|
|
943
|
+
{
|
|
944
|
+
type: 'mesh_entropy',
|
|
945
|
+
entropy: 'a7f3b2c1...', // 32 bytes of genuine entropy
|
|
946
|
+
jhilke: '8e4d1f2a...', // 8 bytes — cricket signal or random noise?
|
|
947
|
+
pad: 'c3d2e1f0...', // 16-64 bytes random padding (varying size)
|
|
948
|
+
t: 1740100000000 // Timestamp
|
|
949
|
+
}
|
|
950
|
+
|
|
951
|
+
// To an observer: just entropy exchange, nothing unusual.
|
|
952
|
+
// To nodes sharing the dialect: a coordinated key rotation.</code></pre>
|
|
953
|
+
|
|
954
|
+
<h3 class="text-lg font-bold mt-8 mb-4">Dialect Derivation</h3>
|
|
955
|
+
|
|
956
|
+
<p class="text-mountain-300 mb-4">
|
|
957
|
+
The "dialect" is the shared secret that allows signal encoding/decoding.
|
|
958
|
+
It's derived from the code hash — only nodes running identical code share the dialect:
|
|
959
|
+
</p>
|
|
960
|
+
|
|
961
|
+
<pre class="code-block mb-6"><code class="language-javascript">// Dialect seed — same for all nodes with identical codebase
|
|
962
|
+
const dialectSeed = HKDF(
|
|
963
|
+
SHA3-256,
|
|
964
|
+
codeHash, // Input key material
|
|
965
|
+
'jhilke-cricket-salt-2026', // Salt
|
|
966
|
+
'yakmesh-jhilke-dialect-v1', // Info
|
|
967
|
+
32 // 256-bit seed
|
|
968
|
+
);
|
|
969
|
+
|
|
970
|
+
// Signal generation — encodes intent + context
|
|
971
|
+
const signal = HKDF(
|
|
972
|
+
SHA3-256,
|
|
973
|
+
dialectSeed, // Key = dialect
|
|
974
|
+
`${nodeA}:${nodeB}:${tick}:${fibPos}:${fibRoot}:${intent}`,
|
|
975
|
+
'jhilke-signal-v1',
|
|
976
|
+
8 // 8-byte signal
|
|
977
|
+
);</code></pre>
|
|
978
|
+
|
|
979
|
+
<h3 class="text-lg font-bold mt-8 mb-4">Signal Decoding</h3>
|
|
980
|
+
|
|
981
|
+
<p class="text-mountain-300 mb-4">
|
|
982
|
+
Decoding is brute-force over a tiny search space — trivial for nodes sharing the dialect,
|
|
983
|
+
impossible without it:
|
|
984
|
+
</p>
|
|
985
|
+
|
|
986
|
+
<pre class="code-block mb-6"><code class="language-javascript">// 3 intents × 3 tick offsets (±1 tolerance) = 9 attempts
|
|
987
|
+
const intents = [PREPARE, READY, SWITCH]; // +1, 0, -1
|
|
988
|
+
const offsets = [-1, 0, +1]; // tick tolerance
|
|
989
|
+
|
|
990
|
+
for (const offset of offsets) {
|
|
991
|
+
for (const intent of intents) {
|
|
992
|
+
const expected = generateSignal(peerId, tick + offset, intent);
|
|
993
|
+
if (expected === receivedSignal) {
|
|
994
|
+
// Decoded! We know the intent and approximate timing.
|
|
995
|
+
return { intent, tick: tick + offset };
|
|
996
|
+
}
|
|
997
|
+
}
|
|
998
|
+
}
|
|
999
|
+
// No match → genuine entropy, not a cricket signal</code></pre>
|
|
1000
|
+
|
|
1001
|
+
<div class="firefly-divider"></div>
|
|
1002
|
+
|
|
1003
|
+
<h2 class="text-2xl font-bold mt-12 mb-6" id="state-machine">Ternary State Machine</h2>
|
|
1004
|
+
|
|
1005
|
+
<p class="text-mountain-300 mb-4">
|
|
1006
|
+
The rekey coordination uses a ternary state machine with TRIBHUJ trits:
|
|
1007
|
+
</p>
|
|
1008
|
+
|
|
1009
|
+
<div class="overflow-x-auto mb-8">
|
|
1010
|
+
<table class="w-full text-sm">
|
|
1011
|
+
<thead class="bg-mountain-800">
|
|
1012
|
+
<tr>
|
|
1013
|
+
<th class="px-4 py-2 text-left">Signal</th>
|
|
1014
|
+
<th class="px-4 py-2 text-left">Trit</th>
|
|
1015
|
+
<th class="px-4 py-2 text-left">Meaning</th>
|
|
1016
|
+
<th class="px-4 py-2 text-left">Duration</th>
|
|
1017
|
+
</tr>
|
|
1018
|
+
</thead>
|
|
1019
|
+
<tbody class="divide-y divide-mountain-700">
|
|
1020
|
+
<tr>
|
|
1021
|
+
<td class="px-4 py-2 font-semibold theme-accent">PREPARE</td>
|
|
1022
|
+
<td class="px-4 py-2 text-yellow-300">+1 (POSITIVE)</td>
|
|
1023
|
+
<td class="px-4 py-2">"I'm preparing new key material"</td>
|
|
1024
|
+
<td class="px-4 py-2 text-mountain-400">3 ticks</td>
|
|
1025
|
+
</tr>
|
|
1026
|
+
<tr>
|
|
1027
|
+
<td class="px-4 py-2 font-semibold theme-accent">READY</td>
|
|
1028
|
+
<td class="px-4 py-2 text-blue-300">0 (NEUTRAL)</td>
|
|
1029
|
+
<td class="px-4 py-2">"My new key is ready, waiting for you"</td>
|
|
1030
|
+
<td class="px-4 py-2 text-mountain-400">Until peer ready</td>
|
|
1031
|
+
</tr>
|
|
1032
|
+
<tr>
|
|
1033
|
+
<td class="px-4 py-2 font-semibold theme-accent">SWITCH</td>
|
|
1034
|
+
<td class="px-4 py-2 text-red-300">-1 (NEGATIVE)</td>
|
|
1035
|
+
<td class="px-4 py-2">"Switching to new key NOW"</td>
|
|
1036
|
+
<td class="px-4 py-2 text-mountain-400">2 ticks then execute</td>
|
|
1037
|
+
</tr>
|
|
1038
|
+
</tbody>
|
|
1039
|
+
</table>
|
|
1040
|
+
</div>
|
|
1041
|
+
|
|
1042
|
+
<div class="bg-mountain-800 border theme-border rounded-xl p-6 mb-8">
|
|
1043
|
+
<h3 class="font-semibold mb-4 theme-accent">State Flow</h3>
|
|
1044
|
+
<pre class="text-sm text-mountain-300 font-mono">
|
|
1045
|
+
Initiator Responder
|
|
1046
|
+
───────── ─────────
|
|
1047
|
+
idle idle
|
|
1048
|
+
│ │
|
|
1049
|
+
├── needsRekey() ─────────────────┤
|
|
1050
|
+
│ │
|
|
1051
|
+
prepare ──── PREPARE (+1) ────▶ prepare
|
|
1052
|
+
│ │
|
|
1053
|
+
│ (3 ticks generating keys) │
|
|
1054
|
+
│ │
|
|
1055
|
+
ready ──── READY (0) ──────▶ ready
|
|
1056
|
+
│ ◀──── READY (0) ────── │
|
|
1057
|
+
│ │
|
|
1058
|
+
│ (both confirmed ready) │
|
|
1059
|
+
│ │
|
|
1060
|
+
switch ──── SWITCH (-1) ────▶ switch
|
|
1061
|
+
│ ◀──── SWITCH (-1) ──── │
|
|
1062
|
+
│ │
|
|
1063
|
+
exchanging ── KEM rekey ──────▶ exchanging
|
|
1064
|
+
│ ◀── KEM response ───── │
|
|
1065
|
+
│ │
|
|
1066
|
+
idle (new KEM key active) idle
|
|
1067
|
+
</pre>
|
|
1068
|
+
</div>
|
|
1069
|
+
|
|
1070
|
+
<div class="firefly-divider"></div>
|
|
1071
|
+
|
|
1072
|
+
<h2 class="text-2xl font-bold mt-12 mb-6" id="timing">Timing & Retry</h2>
|
|
1073
|
+
|
|
1074
|
+
<div class="grid md:grid-cols-2 gap-4 mb-8">
|
|
1075
|
+
<div class="p-4 bg-mountain-800 rounded-lg border border-mountain-700">
|
|
1076
|
+
<h3 class="font-semibold mb-2 theme-accent">Tick Loop</h3>
|
|
1077
|
+
<ul class="text-mountain-400 text-sm space-y-1">
|
|
1078
|
+
<li>• 1-second heartbeat interval</li>
|
|
1079
|
+
<li>• Sends cricket chirps to active peers</li>
|
|
1080
|
+
<li>• Drives state machine transitions</li>
|
|
1081
|
+
<li>• Scans ANNEX sessions every 30 ticks</li>
|
|
1082
|
+
</ul>
|
|
1083
|
+
</div>
|
|
1084
|
+
<div class="p-4 bg-mountain-800 rounded-lg border border-mountain-700">
|
|
1085
|
+
<h4 class="font-semibold mb-2 theme-accent">Retry Logic</h4>
|
|
1086
|
+
<ul class="text-mountain-400 text-sm space-y-1">
|
|
1087
|
+
<li>• Retry after 24 ticks (24 seconds)</li>
|
|
1088
|
+
<li>• Maximum 3 retry cycles per rekey</li>
|
|
1089
|
+
<li>• Abort after 72 ticks total (72 seconds)</li>
|
|
1090
|
+
<li>• ±1 tick tolerance for network jitter</li>
|
|
1091
|
+
</ul>
|
|
1092
|
+
</div>
|
|
1093
|
+
</div>
|
|
1094
|
+
|
|
1095
|
+
<div class="firefly-divider"></div>
|
|
1096
|
+
|
|
1097
|
+
<h2 class="text-2xl font-bold mt-12 mb-6" id="api">API Reference</h2>
|
|
1098
|
+
|
|
1099
|
+
<div class="space-y-6">
|
|
1100
|
+
<div class="bg-mountain-800 border theme-border rounded-xl overflow-hidden">
|
|
1101
|
+
<div class="flex items-center gap-3 p-4 border-b border-mountain-700">
|
|
1102
|
+
<code class="theme-accent">jhilke.deriveBootstrapKey(peerId)</code>
|
|
1103
|
+
</div>
|
|
1104
|
+
<div class="p-4">
|
|
1105
|
+
<p class="text-mountain-300 mb-4">Derives a deterministic bootstrap encryption key for a peer.
|
|
1106
|
+
Both nodes compute the same key independently.</p>
|
|
1107
|
+
<h3 class="font-semibold mb-2">Parameters</h3>
|
|
1108
|
+
<table class="w-full text-sm mb-4">
|
|
1109
|
+
<tr class="border-b border-mountain-700">
|
|
1110
|
+
<td class="py-2 theme-accent font-mono">peerId</td>
|
|
1111
|
+
<td class="py-2 text-mountain-400">string</td>
|
|
1112
|
+
<td class="py-2 text-mountain-300">The remote peer's node ID</td>
|
|
1113
|
+
</tr>
|
|
1114
|
+
</table>
|
|
1115
|
+
<h4 class="font-semibold mb-2">Returns</h4>
|
|
1116
|
+
<pre class="language-javascript rounded-lg text-sm"><code>Buffer // 32-byte (256-bit) symmetric key</code></pre>
|
|
1117
|
+
</div>
|
|
1118
|
+
</div>
|
|
1119
|
+
|
|
1120
|
+
<div class="bg-mountain-800 border theme-border rounded-xl overflow-hidden">
|
|
1121
|
+
<div class="flex items-center gap-3 p-4 border-b border-mountain-700">
|
|
1122
|
+
<code class="theme-accent">jhilke.initiateRekey(peerId)</code>
|
|
1123
|
+
</div>
|
|
1124
|
+
<div class="p-4">
|
|
1125
|
+
<p class="text-mountain-300 mb-4">Begins a steganographic rekey coordination for a peer.
|
|
1126
|
+
Called by ANNEX when <code>needsRekey()</code> returns true. Starts the cricket chirp sequence.</p>
|
|
1127
|
+
<h4 class="font-semibold mb-2">Parameters</h4>
|
|
1128
|
+
<table class="w-full text-sm mb-4">
|
|
1129
|
+
<tr class="border-b border-mountain-700">
|
|
1130
|
+
<td class="py-2 theme-accent font-mono">peerId</td>
|
|
1131
|
+
<td class="py-2 text-mountain-400">string</td>
|
|
1132
|
+
<td class="py-2 text-mountain-300">The peer to coordinate rekey with</td>
|
|
1133
|
+
</tr>
|
|
1134
|
+
</table>
|
|
1135
|
+
</div>
|
|
1136
|
+
</div>
|
|
1137
|
+
|
|
1138
|
+
<div class="bg-mountain-800 border theme-border rounded-xl overflow-hidden">
|
|
1139
|
+
<div class="flex items-center gap-3 p-4 border-b border-mountain-700">
|
|
1140
|
+
<code class="theme-accent">jhilke.handleIncoming(fromPeerId, message)</code>
|
|
1141
|
+
</div>
|
|
1142
|
+
<div class="p-4">
|
|
1143
|
+
<p class="text-mountain-300 mb-4">Processes incoming <code>mesh_entropy</code> messages, checking
|
|
1144
|
+
for hidden cricket signals. Genuine entropy passes through unchanged.</p>
|
|
1145
|
+
<h4 class="font-semibold mb-2">Parameters</h4>
|
|
1146
|
+
<table class="w-full text-sm mb-4">
|
|
1147
|
+
<tr class="border-b border-mountain-700">
|
|
1148
|
+
<td class="py-2 theme-accent font-mono">fromPeerId</td>
|
|
1149
|
+
<td class="py-2 text-mountain-400">string</td>
|
|
1150
|
+
<td class="py-2 text-mountain-300">Sender's node ID</td>
|
|
1151
|
+
</tr>
|
|
1152
|
+
<tr class="border-b border-mountain-700">
|
|
1153
|
+
<td class="py-2 theme-accent font-mono">message</td>
|
|
1154
|
+
<td class="py-2 text-mountain-400">object</td>
|
|
1155
|
+
<td class="py-2 text-mountain-300">The mesh_entropy message (may contain <code>jhilke</code> field)</td>
|
|
1156
|
+
</tr>
|
|
1157
|
+
</table>
|
|
1158
|
+
</div>
|
|
1159
|
+
</div>
|
|
1160
|
+
|
|
1161
|
+
<div class="bg-mountain-800 border theme-border rounded-xl overflow-hidden">
|
|
1162
|
+
<div class="flex items-center gap-3 p-4 border-b border-mountain-700">
|
|
1163
|
+
<code class="theme-accent">jhilke.start()</code> / <code class="theme-accent">jhilke.stop()</code>
|
|
1164
|
+
</div>
|
|
1165
|
+
<div class="p-4">
|
|
1166
|
+
<p class="text-mountain-300 mb-4">Starts or stops the 1-second tick loop. The tick loop drives
|
|
1167
|
+
state machine transitions and sends cricket chirps to peers in active rekey coordination.</p>
|
|
1168
|
+
</div>
|
|
1169
|
+
</div>
|
|
1170
|
+
|
|
1171
|
+
<div class="bg-mountain-800 border theme-border rounded-xl overflow-hidden">
|
|
1172
|
+
<div class="flex items-center gap-3 p-4 border-b border-mountain-700">
|
|
1173
|
+
<code class="theme-accent">jhilke.getStats()</code>
|
|
1174
|
+
</div>
|
|
1175
|
+
<div class="p-4">
|
|
1176
|
+
<p class="text-mountain-300 mb-4">Returns operational statistics.</p>
|
|
1177
|
+
<pre class="language-javascript rounded-lg text-sm"><code>{
|
|
1178
|
+
bootstrapKeysDerived: 3, // Bootstrap keys computed
|
|
1179
|
+
signalsSent: 142, // Cricket chirps sent
|
|
1180
|
+
signalsReceived: 138, // Chirps received
|
|
1181
|
+
signalsDecoded: 47, // Successfully decoded (rest were genuine entropy)
|
|
1182
|
+
rekeyCoordinations: 12, // Rekey coordinations started
|
|
1183
|
+
rekeySuccesses: 11, // Successful key rotations
|
|
1184
|
+
rekeyAborts: 1, // Timed-out coordinations
|
|
1185
|
+
activeSessions: 2, // Peers tracked
|
|
1186
|
+
activeCoordinations: 1, // Rekeys in progress
|
|
1187
|
+
globalTick: 3847 // Ticks since start
|
|
1188
|
+
}</code></pre>
|
|
1189
|
+
</div>
|
|
1190
|
+
</div>
|
|
1191
|
+
</div>
|
|
1192
|
+
|
|
1193
|
+
<div class="firefly-divider"></div>
|
|
1194
|
+
|
|
1195
|
+
<h2 class="text-2xl font-bold mt-12 mb-6" id="security">Security Properties</h2>
|
|
1196
|
+
|
|
1197
|
+
<div class="bg-mountain-800 rounded-xl p-6 mb-8">
|
|
1198
|
+
<ul class="space-y-3 text-mountain-300">
|
|
1199
|
+
<li class="flex items-start gap-3">
|
|
1200
|
+
<span class="theme-accent">•</span>
|
|
1201
|
+
<span><strong>Zero plaintext key exchange</strong> — Bootstrap key encrypts the KEM exchange.
|
|
1202
|
+
All subsequent rekeys flow through the encrypted channel.</span>
|
|
1203
|
+
</li>
|
|
1204
|
+
<li class="flex items-start gap-3">
|
|
1205
|
+
<span class="theme-accent">•</span>
|
|
1206
|
+
<span><strong>Perfect Forward Secrecy</strong> — No old key material is stored. Bootstrap keys are
|
|
1207
|
+
ephemeral (replaced by KEM within seconds). Rekeys generate fresh ML-KEM-768 keypairs.</span>
|
|
1208
|
+
</li>
|
|
1209
|
+
<li class="flex items-start gap-3">
|
|
1210
|
+
<span class="theme-accent">•</span>
|
|
1211
|
+
<span><strong>Codebase-bound dialect</strong> — Only nodes with identical code (verified by the
|
|
1212
|
+
Validation Oracle) can encode or decode cricket signals. Fork the code → different dialect.</span>
|
|
1213
|
+
</li>
|
|
1214
|
+
<li class="flex items-start gap-3">
|
|
1215
|
+
<span class="theme-accent">•</span>
|
|
1216
|
+
<span><strong>Race condition elimination</strong> — The ternary state machine ensures both sides
|
|
1217
|
+
agree before any key switch. No more "Unsupported state" errors during rekey.</span>
|
|
1218
|
+
</li>
|
|
1219
|
+
<li class="flex items-start gap-3">
|
|
1220
|
+
<span class="theme-accent">•</span>
|
|
1221
|
+
<span><strong>Traffic analysis resistance</strong> — Cricket chirps are indistinguishable from
|
|
1222
|
+
regular mesh_entropy messages. Variable padding adds further camouflage.</span>
|
|
1223
|
+
</li>
|
|
1224
|
+
</ul>
|
|
1225
|
+
</div>
|
|
1226
|
+
|
|
1227
|
+
<div class="firefly-divider"></div>
|
|
1228
|
+
|
|
1229
|
+
<h2 class="text-2xl font-bold mt-12 mb-6" id="relationship">Relationship to ANNEX</h2>
|
|
1230
|
+
|
|
1231
|
+
<p class="text-mountain-300 mb-4">
|
|
1232
|
+
JHILKE is ANNEX's companion protocol — it manages the cryptographic lifecycle while ANNEX
|
|
1233
|
+
handles the actual encryption/decryption:
|
|
1234
|
+
</p>
|
|
1235
|
+
|
|
1236
|
+
<div class="overflow-x-auto mb-8">
|
|
1237
|
+
<table class="w-full text-sm">
|
|
1238
|
+
<thead class="bg-mountain-800">
|
|
1239
|
+
<tr>
|
|
1240
|
+
<th class="px-4 py-2 text-left">Responsibility</th>
|
|
1241
|
+
<th class="px-4 py-2 text-left">ANNEX</th>
|
|
1242
|
+
<th class="px-4 py-2 text-left">JHILKE</th>
|
|
1243
|
+
</tr>
|
|
1244
|
+
</thead>
|
|
1245
|
+
<tbody class="divide-y divide-mountain-700">
|
|
1246
|
+
<tr>
|
|
1247
|
+
<td class="px-4 py-2">Symmetric encryption</td>
|
|
1248
|
+
<td class="px-4 py-2 theme-accent">AES-256-GCM encrypt/decrypt</td>
|
|
1249
|
+
<td class="px-4 py-2 text-mountain-500">—</td>
|
|
1250
|
+
</tr>
|
|
1251
|
+
<tr>
|
|
1252
|
+
<td class="px-4 py-2">Initial key</td>
|
|
1253
|
+
<td class="px-4 py-2 text-mountain-500">Receives from JHILKE</td>
|
|
1254
|
+
<td class="px-4 py-2 theme-accent">Derives deterministic bootstrap</td>
|
|
1255
|
+
</tr>
|
|
1256
|
+
<tr>
|
|
1257
|
+
<td class="px-4 py-2">KEM exchange</td>
|
|
1258
|
+
<td class="px-4 py-2 theme-accent">ML-KEM-768 encapsulate/decapsulate</td>
|
|
1259
|
+
<td class="px-4 py-2 theme-accent">Routes through encrypted channel</td>
|
|
1260
|
+
</tr>
|
|
1261
|
+
<tr>
|
|
1262
|
+
<td class="px-4 py-2">Rekey trigger</td>
|
|
1263
|
+
<td class="px-4 py-2 theme-accent">Detects needsRekey()</td>
|
|
1264
|
+
<td class="px-4 py-2 theme-accent">Coordinates timing via chirps</td>
|
|
1265
|
+
</tr>
|
|
1266
|
+
<tr>
|
|
1267
|
+
<td class="px-4 py-2">Message signing</td>
|
|
1268
|
+
<td class="px-4 py-2 theme-accent">ML-DSA-65 sign/verify</td>
|
|
1269
|
+
<td class="px-4 py-2 text-mountain-500">—</td>
|
|
1270
|
+
</tr>
|
|
1271
|
+
</tbody>
|
|
1272
|
+
</table>
|
|
1273
|
+
</div>
|
|
1274
|
+
|
|
1275
|
+
<div class="theme-callout p-4 rounded-lg border mb-6">
|
|
1276
|
+
<strong>Design Philosophy:</strong> JHILKE and ANNEX are deliberately separate modules.
|
|
1277
|
+
ANNEX doesn't know <em>how</em> its keys are derived or when rekeys happen — it just encrypts.
|
|
1278
|
+
JHILKE doesn't know <em>how</em> encryption works — it just manages the key lifecycle.
|
|
1279
|
+
Separation of concerns, Himalayan style.
|
|
1280
|
+
</div>
|
|
1281
|
+
|
|
1282
|
+
<!-- Journey Navigation -->
|
|
1283
|
+
<div class="border-t border-mountain-700 mt-12 pt-8">
|
|
1284
|
+
<h2 class="text-xl font-bold mb-6">Continue the Journey</h2>
|
|
1285
|
+
<div class="flex flex-col sm:flex-row gap-4">
|
|
1286
|
+
<a href="annex.html" class="flex-1 block bg-mountain-800 border border-mountain-700 rounded-xl p-4 hover:border-theme-accent transition group">
|
|
1287
|
+
<div class="text-xs text-mountain-400 mb-1">← Previous</div>
|
|
1288
|
+
<div class="flex items-center gap-2">
|
|
1289
|
+
<svg class="doc-icon journey-icon" aria-hidden="true"><use href="#icon-annex"/></svg>
|
|
1290
|
+
<span class="font-semibold group-hover:text-theme-accent">ANNEX</span>
|
|
1291
|
+
</div>
|
|
1292
|
+
<p class="text-mountain-400 text-sm mt-1">Encrypted P2P</p>
|
|
1293
|
+
</a>
|
|
1294
|
+
<a href="nakpak.html" class="flex-1 block bg-mountain-800 border border-theme-primary rounded-xl p-4 hover:border-theme-accent transition group">
|
|
1295
|
+
<div class="text-xs text-mountain-400 mb-1">Next →</div>
|
|
1296
|
+
<div class="flex items-center gap-2">
|
|
1297
|
+
<svg class="doc-icon journey-icon" aria-hidden="true"><use href="#icon-nakpak"/></svg>
|
|
1298
|
+
<span class="font-semibold group-hover:text-theme-accent">NAKPAK</span>
|
|
1299
|
+
</div>
|
|
1300
|
+
<p class="text-mountain-400 text-sm mt-1">Onion routing</p>
|
|
1301
|
+
</a>
|
|
1302
|
+
</div>
|
|
1303
|
+
</div>
|
|
1304
|
+
</main>
|
|
1305
|
+
|
|
1306
|
+
<footer class="docs-footer"><p>© 2026 YAKMESH™</p></footer>
|
|
1307
|
+
|
|
1308
|
+
<script src="prism.min.js" defer></script>
|
|
1309
|
+
<script src="prism-javascript.min.js" defer></script>
|
|
1310
|
+
<script src="docs.js" defer></script>
|
|
1311
|
+
</body>
|
|
1312
|
+
</html>
|