Changeset f63cbc2 in Klonkt for src/services/CircleFederation.js
- Timestamp:
- 06/16/2026 06:33:38 AM (3 months ago)
- Branches:
- main
- Children:
- 4fee228
- Parents:
- 1b4d5dd
- File:
-
- 1 edited
-
src/services/CircleFederation.js (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/services/CircleFederation.js
r1b4d5dd rf63cbc2 15 15 import db from '../config/database.js'; 16 16 import { getSetting, setSetting } from './SettingsService.js'; 17 18 // ── Protocol-versie (federatie) ─────────────────────────────── 19 // KLONKT_PROTO zit IN de ondertekende grondslag (zie signingInput): een instance 20 // die niet op deze proto draait kan onze getekende outbox NIET verifiëren, en wij 21 // de hare niet. Bijblijven is dus geen beleefde check die je wegpatcht, maar 22 // cryptografisch afgedwongen — de enige manier om mee te doen is dezelfde proto 23 // draaien (= de update). Bump KLONKT_PROTO bij elke release die federatie/security 24 // raakt, en koppel een securityfix aan elke bump → outdated = buiten + onveilig. 25 // MIN_PROTO = de laagste proto waarmee we nog federeren. 26 export const KLONKT_PROTO = 2; 27 export const MIN_PROTO = 2; 28 29 function signingInput(proto, body) { 30 return `klonkt/proto/${proto}\n${body}`; 31 } 17 32 18 33 // ── Sleutelbeheer ───────────────────────────────────────────── … … 37 52 } 38 53 39 /** Tekent een exacte body-string met de instance-privésleutel(Ed25519). */40 export function signBody(rawString ) {54 /** Tekent een body-string, gebonden aan de protocol-versie (Ed25519). */ 55 export function signBody(rawString, proto = KLONKT_PROTO) { 41 56 const key = crypto.createPrivateKey(getKeys().priv); 42 return crypto.sign(null, Buffer.from( rawString, 'utf8'), key).toString('base64');57 return crypto.sign(null, Buffer.from(signingInput(proto, rawString), 'utf8'), key).toString('base64'); 43 58 } 44 59 45 /** Verifieert een body tegen een SPKI-DER-base64 publieke sleutel (voor sync/tests). */ 46 export function verifyBody(rawString, sigB64, pubDerB64) { 60 /** Verifieert een body tegen een SPKI-DER-base64 publieke sleutel, voor de gegeven 61 * proto. Een mismatch in proto = mismatch in grondslag = ongeldige handtekening. */ 62 export function verifyBody(rawString, sigB64, pubDerB64, proto = KLONKT_PROTO) { 47 63 try { 48 64 const key = crypto.createPublicKey({ 49 65 key: Buffer.from(pubDerB64, 'base64'), format: 'der', type: 'spki', 50 66 }); 51 return crypto.verify(null, Buffer.from( rawString, 'utf8'), key, Buffer.from(sigB64, 'base64'));67 return crypto.verify(null, Buffer.from(signingInput(proto, rawString), 'utf8'), key, Buffer.from(sigB64, 'base64')); 52 68 } catch { 53 69 return false; … … 101 117 publicKeyBase64: getPublicKeyB64(), 102 118 }, 103 klonkt: { version: 1, allowCircle: allowsCircle(site) },119 klonkt: { version: 1, proto: KLONKT_PROTO, allowCircle: allowsCircle(site) }, 104 120 }; 105 121 } … … 111 127 const empty = { 112 128 '@context': 'https://www.w3.org/ns/activitystreams', 113 type: 'OrderedCollection', id, totalItems: 0, orderedItems: [], 129 type: 'OrderedCollection', id, totalItems: 0, orderedItems: [], klonkt: { proto: KLONKT_PROTO }, 114 130 }; 115 131 if (!allowsCircle(site)) return empty; … … 148 164 '@context': 'https://www.w3.org/ns/activitystreams', 149 165 type: 'OrderedCollection', id, totalItems: orderedItems.length, orderedItems, 166 klonkt: { proto: KLONKT_PROTO }, 150 167 }; 151 168 }
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)