# Rust SPKG 开发工具

独立Rust程序，仅打包、校验和生成公钥，不安装包、不提权、不执行生命周期脚本。支持 SPKG 1.0 原生 Manifest 与 1.1 官方平台模块。工具自身不安装或执行包；NAS 主后端复用校验库，在独立官方模块合同下管理 UI 载荷。

```sh
cargo build --release --locked --manifest-path tools/spkg/Cargo.toml
cargo test --locked --manifest-path tools/spkg/Cargo.toml
# 实际输出路径默认 tools/spkg/target/release/spkg；设置CARGO_TARGET_DIR时随之变化。
spkg manifest examples/packages/hello/manifest.json
spkg build examples/packages/hello /tmp/hello.spkg
spkg check /tmp/hello.spkg --allow-unsigned
```

`spkg` 指已构建程序路径或添加到PATH后的名称。源目录不允许额外README/软链接/未知顶层内容；输出必须在源目录外且不能覆盖现有文件。manifest符合Schema后仍检查实际文件、路径、架构entrypoint、端口权限及自依赖。检查不解包到磁盘。

## 签名

32字节Ed25519私钥种子和公钥各自存为64位十六进制文本，允许末尾换行。私钥文件权限设置0600，放在仓库之外，不能提交。工具不会自动创建受信任密钥或把包内公钥当作信任来源。

```sh
spkg public-key /private/developer-seed.txt > /private/developer-public.txt
spkg build examples/packages/hello /tmp/hello-signed.spkg --sign-key /private/developer-seed.txt
spkg check /tmp/hello-signed.spkg --trust-key /private/developer-public.txt
```

默认 `check` 拒绝未签名包；签名包没有外部受信任公钥也拒绝。`--allow-unsigned` 仅用于未签名开发包，输出 trusted=false；不绕过签名包的信任检查。输出JSON包括完整manifest、压缩段/完整包摘要、解压大小、trusted及installation_supported=false。失败退出1，不生成成功报告。

当前不提供索引签名/上传、执行沙箱、病毒扫描、依赖安装、安装/回滚；后续后台可以复用此库，但须在限制CPU/内存/时间的独立进程中处理不可信归档。不得把工具的格式校验结果解释为完整安全审核。
