AppThreat/cdx-proto

GitHub: AppThreat/cdx-proto

基于 Protocol Buffers 实现 CycloneDX SBOM 序列化与反序列化的运行时库,解决多版本 JSON 与二进制格式间的高效转换问题。

Stars: 0 | Forks: 0

# cdx-proto 使用 protocol buffers 序列化/反序列化 CycloneDX BOM 的运行时库。该项目是使用 [protoc-gen-es](https://github.com/bufbuild/protobuf-es) 从官方 [proto](https://github.com/CycloneDX/specification/blob/master/schema/bom-1.5.proto) 规范生成的。 ## 2.0.0 版本亮点 - 特定版本的子路径导出:`@appthreat/cdx-proto/v1.5`、`v1.6` 和 `v1.7` - 用于 schema 选择和 BOM 编码/解码工作流的辅助 API - 更精简的 npm 包内容,不再发布生成的 `docs/` ## 示例用法 ``` import { createBom, decodeBomBinary, encodeBomBinary, encodeBomJson, getBomSchema, parseBomJson, } from "@appthreat/cdx-proto"; import { BomSchema as BomSchema16 } from "@appthreat/cdx-proto/v1.6"; import { fromJson } from "@bufbuild/protobuf"; // Use version-specific entrypoints when you only need one schema version. const bom16 = fromJson(BomSchema16, { specVersion: "1.6", version: 1, }); // Or use the helper API to auto-select schemas and encode/decode BOMs. const bom = createBom("1.7", { version: 1, serialNumber: "urn:uuid:11111111-1111-1111-1111-111111111111", }); const binary = encodeBomBinary(bom, { writeUnknownFields: true, }); const decoded = decodeBomBinary("1.7", binary, { readUnknownFields: true, }); const json = encodeBomJson(decoded, { alwaysEmitImplicit: true, }); const parsed = parseBomJson({ specVersion: "1.6", version: 1, }); const schema = getBomSchema(parsed.specVersion); ``` ### 辅助 API - `getBomSchema(specVersion)` 返回 CycloneDX `1.5`、`1.6` 或 `1.7` 对应的 `BomSchema`。 - `createBom(specVersion, init)` 创建一个 BOM 消息并自动设置 `specVersion`。 - `parseBomJson(json)` 和 `parseBomJsonString(json)` 从 `specVersion` / `spec_version` 自动检测 schema。 - `decodeBomBinary(specVersion, bytes)` 在已知 schema 版本时解码 protobuf BOM。 - `encodeBomBinary(bom)`、`encodeBomJson(bom)` 和 `encodeBomJsonString(bom)` 从 BOM 本身选择正确的 schema。 ### 规范化 JSON 保证 辅助层旨在与规范化 CycloneDX JSON 而非 protobuf 风格的 JSON 配合使用。 - `parseBomJson()` 和 `decodeBomJson()` 接受规范的 CycloneDX 输入,例如: - 根字段,如 `bomFormat` 和 `specVersion` - 带连字符的别名,如 `bom-ref`、`mime-type` 和 `x-trust-boundary` - 规范的哈希内容字段,如 `hashes[].content` - 规范的 standards/declarations 对象,而不是 protobuf 列表包装器 - 未定义的对象属性和未定义的数组条目在 protobuf 解析之前会被清除,因此调用者可以直接传递普通的 JavaScript 对象,而无需先手动剥离 `undefined` 值。 - `encodeBomJson()` 和 `encodeBomJsonString()` 在输出时恢复规范的 CycloneDX JSON,包括: - `bomFormat: "CycloneDX"` - BOM 的 `specVersion` - 规范的枚举值,而不是 protobuf 枚举名称,例如 `CLASSIFICATION_*`、`HASH_ALG_*` 或 `EXTERNAL_REFERENCE_TYPE_*` - `definitions` 和 `declarations` 的规范对象结构 - `parseBomBinary()` 会自动检测嵌入的支持的 schema 版本(`1.5`、`1.6` 或 `1.7`),并且可以与 `encodeBomJson()` 配合使用,将 protobuf BOM 重新读取为规范的 CycloneDX JSON。 简而言之:如果你向辅助 API 提供规范的 CycloneDX JSON,在经过二进制或消息的往返处理后,你应该能返回规范的 CycloneDX JSON。 ### 特定版本的导入 使用子路径导出来避免加载你不需要的 schema 版本: ``` import { BomSchema as BomSchema15 } from "@appthreat/cdx-proto/v1.5"; import { BomSchema as BomSchema16 } from "@appthreat/cdx-proto/v1.6"; import { BomSchema as BomSchema17 } from "@appthreat/cdx-proto/v1.7"; ``` ## 许可证 Apache-2.0
标签:bufbuild, CMS安全, CycloneDX, GPT, JavaScript, MITM代理, npm包, Protobuf, Protocol Buffers, SBOM, TypeScript, 反序列化, 安全合规, 安全插件, 序列化, 数据可视化, 数据序列化, 数据转换, 漏洞管理, 硬件无关, 编码, 网络代理, 自动化攻击, 解码, 跌倒检测, 软件物料清单, 运行时库