acdp-wasm — ACDP 网络大会验证核心
这个 浏览器/ 边缘 aCP 约束家庭成员
(单位:千美元)bindings/acdp-py, (中文(简体) ), bindings/acdp-node) (中文(简体) ). 纯洁的, 离线
加密验证器:它允许消费者制作一个晶体开发方案的背景和
独立实现真正的核查 判决 - 生产商
签名 content_hash,登记收据(RFC-ACDP-0010),a
区划头收据(RFC-ACDP-0011),一个透明记录的检查站
纳入/一致性证明(RFC-ACDP-0012),生命周期事件
(RFC-ACDP-0013)钥匙吊销(RFC-ACDP-0014)和证人
共同签署+法定人数(RFC-ACDP-0015) - 不信任任何服务器
已经做到了这是控制台的客户端核查核心
判决需要消耗.
它是一个独立的货物包(它自己的 [workspace]这取决于
伞 acdp 带有 default-features = false这样
reqwest 编号 : tokio 编号 : rustls 永不输入 .wasm 二进制. 见
docs/research/wasm-target.md (历史)设计原理。 这个
软件包以相同的版本发布 acdp 箱; 哪个协议
每个释放工具都记录在 spec 中
版本矩阵。 。 。 .
仅 wasm32-unknown-unknown (浏览器 / 捆绑器 / 节点通过被包装) 是
(a) 建立和测试.
设计( 与 Python / 节点绑定的规则相同)
- JSON跨越边界. 每次导出都使用 JSON 字符串和
返回 JSON 字符串 - a 判决对象 (单位:千美元)
{"valid": true, ...}编号 :{"valid": false, "code"?, "error"}用于核查结果,或a 构造器/解器的结果字符串。 错误 东道主 投入 丢出一个JsError; 失败 核查 实值{"valid": false}, (中文(简体) ), 从不扔. - Rust的加密,主机的HTTP. 没有网络通话.
did:web决议和所有运输停留在联署材料中fetch文档 / 接收/身体,通过JSON英寸.did:key完全核实 离线并不需要主机帮助——最高值浏览器路径. - 没有重新执行密码 . 每张支票都一样
acdp核心本地库 Python 和节点绑定使用。 0.3/0.4号 判决逻辑( e)src/v030.rs, (中文(简体) ),src/v040.rs页:1 逐字记录, 字节相同 从其他束缚.
导出表面
am-bindgen出口(JS/TypeScript中的骆驼案):
| 导出 | RFC (RFC ) (法语) | 目的 |
|---|---|---|
verifyContentHash | 0001第5.7节 | 重计算 sha256(JCS(producer_content)) |
verifySignatureEd25519 编号 : verifySignatureP256 | 0001第5.8节 | aSCII的签字 "sha256:<hex>" 字符串 |
verifyCtxIdBinding | 0006 第4.1节 第7步 | 绑定送达者 ctx_id ——见 校验取回的正文 |
verifyBodyOffline 编号 : verifyPublishRequestOffline | 0002 个 | 满 did:key 上下文验证( 无分辨率) |
fingerprintEd25519 编号 : verifyReceipt(receiptJson, bodyJson, registryPublicKeyB64, expectedCtxId, recomputedBodyHash, producerKeyFingerprint) | 0010 (英语) | 登记册-接收核查——见 核实登记收据 下级 |
verifyLineageHeadReceipt | 0011 (英语) | 区划头收据 |
verifyLogCheckpoint 编号 : verifyLogInclusion 编号 : verifyLogConsistency 编号 : buildLogLeaf 编号 : merkleLeafHash 编号 : merkleNodeHash 编号 : merkleRootHash | 0012 (英语) | 透明度日志 |
verifyLifecycleEvent | 0013 (英语) | 生命周期事件 |
parseKeyRevocation 编号 : classifyUnderRevocation | 0014 (英语) | 密钥撤销 |
buildWitnessCosignature 编号 : verifyWitnessCosignature 编号 : evaluateWitnessQuorum | 0015 (英语) | 证人签名+法定人数 |
resolveDidKey | —— 说 | 离线 did:key • 公用钥匙 |
canonicalPreimage 编号 : explainHashMismatch | —— 说 | hash-潜水诊断 |
安装
发布到 npm 为 @agentcontextdistributionprotocol/acdp-wasm 联合国
在 GitHub 动作上签名的 公共范围软件包,所以控制台
而其他消费者则依赖它
npm install @agentcontextdistributionprotocol/acdp-wasm
import init, { verifyContentHash, verifySignatureEd25519, verifyCtxIdBinding }
from "@agentcontextdistributionprotocol/acdp-wasm";
await init();
const verdict = JSON.parse(verifyContentHash(bodyJson, body.content_hash));
if (verdict.valid) { /* the hash the consumer recomputed itself checks out */ }
// Bind the served ctx_id to the one requested (RFC-ACDP-0006 §4.1 step 7).
// See "Verifying a retrieved body" below for why this is a separate call.
const binding = JSON.parse(verifyCtxIdBinding(bodyJson, requestedCtxId));
if (binding.valid) { /* the ctx_id you got back is the one you asked for */ }
校验取回的正文
ctx_id 登记并列入RFC-ACDP-0001§5.7排除条款
设定,所以它被剥去之前 content_hash 两者都是计算出来的
重新计算上面, 或制作人的签名覆盖它。 没有
明确比较,登记处可为任何其他有效签字机构服务
由同一生产商根据 ctx_id 您想要的 URL, 以及每个
上面的检查还是会过去的. verifyCtxIdBinding(bodyJson, expectedCtxId)
缩小这一差距: bodyJson 携带 已服务 身份证明, expectedCtxId
这是你的要求。 喜欢 verifyContentHash,一个畸形 已服务
ctx_id 是一个 {"valid": false, ...} 判决,不是扔,而是扔
错误 expectedCtxId 参数丢出一个 JsError。 。 。 .
核实登记收据
verifyReceipt (RFC-ACDP-0010 第8节) bodyJson 作为
所需经费 第二个论点——它约束收据 lineage_id, (中文(简体) ),
origin_registry,以及 created_at (第8节)
步骤 3 :
const verdict = JSON.parse(verifyReceipt(
receiptJson, bodyJson, registryPublicKeyB64,
expectedCtxId, recomputedBodyHash, producerKeyFingerprint,
));
一个畸形 bodyJson 丢出一个 JsError (主机输入);机身/接收
不匹配是一个 {"valid": false, ...} 判决(核查结果),不
a 抛出——与 verifyContentHash 编号 : verifyCtxIdBinding。 。 。 .
两张支票仍然保留HOST的义务, 因为两者都不需要
机构:对服务机构有约束力的机构receipt.registry_did 必须是平等的
你们实际获得的权力)和重算(永远不要)
{\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}相信 {\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}你通过的身体已经散了.
软件包由 wasm-pack --target web: 您的无害环境管理模块
初始化为 await init()这是箱子的目标
它在浏览器和浏览器中清空地装入
下一个客户端组件(webpack 5解决 new URL(..., import.meta.url)
是资产 web 目标发射——无 experiments.asyncWebAssembly
网页包覆盖,其中 bundler 目标要求).
构建
rustup target add wasm32-unknown-unknown
# Raw wasm (regression build-check):
cargo build --target wasm32-unknown-unknown # verify-only default
# Browser package (.js / .wasm / .d.ts) with wasm-pack. `--scope` makes
# wasm-pack emit the package name `@agentcontextdistributionprotocol/acdp-wasm`
# (the same rename the release workflow performs):
wasm-pack build --target web --out-dir pkg --scope agentcontextdistributionprotocol
从浏览器( 本地、 未公布的构建) 导入 :
import init, { verifyContentHash, verifySignatureEd25519, verifyCtxIdBinding } from "./pkg/acdp_wasm.js";
await init();
const verdict = JSON.parse(verifyContentHash(bodyJson, body.content_hash));
if (verdict.valid) { /* the hash the consumer recomputed itself checks out */ }
const binding = JSON.parse(verifyCtxIdBinding(bodyJson, requestedCtxId));
if (binding.valid) { /* the ctx_id you got back is the one you asked for */ }
黄金函数均等
tests/golden.rs 是一个 本地语言 cargo test {\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}那会运行着峡谷
sig-001 (内容散列+Ed25519签名)和 wit-001 (证人)
共同签名薄荷 + 验证) 光谱固定通过相同的纯度 core
函数导出为站点, 并显示字节复制
被钉住的黄金值—— 不变的 acdp-py 编号 : acdp-node
套接字针。 它通过 ACDP_SPEC_DIR 和优雅地跳过
缺席时:
ACDP_SPEC_DIR=../../../agentcontextdistributionprotocol cargo test
tests/wasm.rs 是一个 wasm-bindgen-test 真正的发动机烟雾测试
输出包装( 内置 sig- 001 常数, 不需要固定装置) :
wasm-pack test --node
随机——对研究备忘录的更正
docs/research/wasm-target.md 第4节预测a 仅验证 建造会
需求 没有 getrandom 后端 任何目标。 保持不变
运行时间 - 没有出口核查(或确定性Ed25519)
证人薄荷)抽取随机. 没错 没有 暂停 编译时间
页:1 wasm32-unknown-unknown: 核心箱拉动 getrandom 0.4
无条件从两个地方, 它发出一个硬
compile_error! 除非后端有线,否则:
acdp-crypto密钥生成( r)getrandom::SysRng,用于rand_core0.10,无OsRng(二) 与uuid页:1 (非可选择的依赖性)acdp-primitives) (中文(简体) ).
后端是阴茎 wasm_js 特性 联 合 国
getrandom_wasm 别名在 Cargo.toml),加 (中文(简体) )
--cfg getrandom_backend="wasm_js" 内 .cargo/config.toml,这是
惰性为0.4.3并保持前向相容性. uuid 额外
需要自己的钱 js 特性 为它的v4 RNG shim. (较旧的直线
getrandom 0.2 a. 依赖 js 特性,用于前者
rand_core 0.6 编号 : OsRng 路径, 已删除; 这里没有
绑定的图表使用0.2 。 )
两者都接通了这里, 目标为 wasm32 仅限 (见
Cargo.toml 财务报告和审定财务报表 .cargo/config.toml),故为本地人 cargo test 实值
无所未有. crypto.getRandomValues (单位:千美元) wasm_js 后端)为 CSPRNG
RFC-ACDP-0001 (中文(简体) ). §5.10 浏览器的名称, 所以选择是 spec-bloods
——但在核实路径上从未引用过;它只是用来链接的.
一个未来 producer 特性(保留,尚未接线)将暴露新鲜
密钥生成( r)SigningKey::generate,唯一一个 SysRng 电话)
运行时随机抽取的图.
安全说明
- 这个文物是 校验者, 不是取取器。 。 。 .
RegistryClient, (中文(简体) ),CrossRegistryResolver,以及did:web分辨率不移动到相机; 该主机拥有 HTTP 和 RFC-ACDP-0006 §7 / RFC-ACDP-0008 SSRF 辩护。 传取出的文件作为JSON. - 浏览器标签不是 HSM 。 核查没有秘密,但
未来
producer/ 键根表面会把签名种子放入相机 线性内存(RFC-ACDP-0001§5.10).