feat(overlay): 内容块级寻址 + 实例逐步拉起 + 骨干选路 + 组密钥加密(序24–㉛ 累积同步)
代码
- 内容分发块级寻址:新增 src/net/relay/content/{chunker,store,runtime,source,peer,crypto}.ts
- 组密钥(C 档)确定性加密:AES-256-GCM,块 id β′ = sha256(密文) 前 32 hex;双 epoch 过渡窗口
- 实例生命周期:三处 teardown() 不再杀实例(local/remote/leased-spawner);启动认领 + TCP 探活判孤儿
- 骨干选路:jitter 选路 + endpoint-target;relay client/server/wire/identity/directory/rendezvous/switcher 调整
- 工作台 src/web/server.ts、src/worker/relay-tunnel.ts 装配与候选链观测
脚本与测试
- scripts/overlay-{probe,keyring,jitter}.cjs 更新
- 探针新增 OBS-21(每连接候选数)/ OBS-22(teardown 静态守卫 + 认领面)/ OBS-23(组密钥加密)
- 新增 test/{orchestrator-teardown,orchestrator-rehydrate,overlay-content,overlay-jitter}.test.mjs;relay 两例更新
文档
- 新增交接单:覆盖网络-序24-内容分发块级寻址 / 序25-实例逐步拉起 / 序26-骨干稳定选路与加密
- INDEX.md、交接单/README.md、skills/dsh-auto-handoff-chain/SKILL.md 同步
验收(零回归,2026-09-18 08:0x 复核)
- npm test 201 tests / 200 pass / 0 fail / 1 skipped
- overlay-failover-drill --scene all --table 12 PASS / 0 SKIP / 0 FAIL
- overlay-probe --table 23 PASS / 0 SKIP / 0 FAIL (rc=0)
This commit is contained in:
1 parent
04776af4b1
commit
09ce76f3af
38 files changed
+9133
-211
No files matched your search
@@ -321,6 +321,34 @@ function signPayload(payload: string, privateKeyPem: string): string {
|
||||
return cryptoSign(null, Buffer.from(payload, 'utf8'), key).toString('base64')
|
||||
}
|
||||
|
||||
/**
|
||||
* **既有验签实现的唯一出口**(序㉘ · 单 B **纯扩展**)。
|
||||
*
|
||||
* 为什么要有它:内容面的「组密钥凭据」`(network, group, epoch, keyId)` 必须走**同一条**
|
||||
* 信任链(同一批受信签名者、同一套"不可验 = 不接受"判据)。⛔ 不允许在 `content/crypto.ts`
|
||||
* 里再写一份 `crypto.verify` —— 那会造出**两套验签实现**,日后必然分叉。
|
||||
*
|
||||
* ⚠️ 本地函数**语义一行未改**(只是把既有 `verifySigned` 暴露出去):返回值仍是
|
||||
* `'ok'` 或**具名** `IdentityReason`(⛔ 不吞错、⛔ 不合并原因)。
|
||||
*/
|
||||
export function verifySignedPayload(
|
||||
payload: string,
|
||||
sig: unknown,
|
||||
trustedKeys: readonly string[],
|
||||
): IdentityReason | 'ok' {
|
||||
return verifySigned(payload, sig, trustedKeys)
|
||||
}
|
||||
|
||||
/**
|
||||
* **既有签发实现的唯一出口**(与上面的 `verifySignedPayload` 成对;序㉘ · 单 B **纯扩展**)。
|
||||
*
|
||||
* 用途:组密钥凭据的**签发**要走同一把签名者钥匙、同一套规范载荷(`*Payload()`)——
|
||||
* ⛔ 不许在 CLI 里另写一份 `crypto.sign`。⚠️ 仍然**强制 `ed25519`**(`signPayload` 内校验)。
|
||||
*/
|
||||
export function signPayloadWith(privateKeyPem: string, payload: string): string {
|
||||
return signPayload(payload, privateKeyPem)
|
||||
}
|
||||
|
||||
/** 验一份签名者集合(是否被**根**授权)。 */
|
||||
export function verifySignerSet(raw: unknown, sig: unknown, trustedRootKeys: readonly string[]): IdentityVerdict<SignerSet> {
|
||||
const doc = parseSignerSet(raw)
|
||||
|
||||
Reference in new issue
Block a user