[求助]bingo工具链里“签名”代码位于哪?

各位大佬好,最近在对 bingo 工具链里的签名流程做改造:目标是保持本地 CMS 签名不变,仅把时间戳(TSA)改为走 开源社区版本的keyfactor/SignServer 签名服务(REST),后续也可能把 CMS 本体签名一起远程化。对 bingo 不太熟,代码入口和调用链还没完全梳清,想请教下改动建议

环境

  • Ubuntu 24.04 / OpenSSL 3.x
  • 已安装 libssl-devlibcurl4-openssl-dev
  • 本地工具:
    • tools/src/signer/ 目录下的 hpm_signer(生成 CMS 并加时间戳)、hpm_verify(校验 CMS)
    • cms_sign.c / cms_ver.c / public.h
  • 目标产物:uboot.bin.cms(对 uboot.bin 的 CMS 签名,含时间戳)

现状 & 我已做的改造

  1. 仅将 TSA 改为 SignServer
    cms_sign.c 里新增参数并接入 libcurl:
  • 新参数:--tsa-url/-U 指向 SignServer TSA Worker,例如
    https://<host>/signserver/process?workerId=3
  • 流程:仍旧先按签名值生成 TSQPOST 到 SignServer → 拿到 TSR → 注入 CMS unsignedAttrs
  • 没有改动“CMS 本体签名”的位置与方式(仍用本地 signer.pem)。
  1. 编译
gcc cms_sign.c -o hpm_signer $(pkg-config --cflags --libs libssl libcrypto libcurl) -ldl -pthread
gcc cms_ver.c  -o hpm_verify $(pkg-config --cflags --libs libssl libcrypto)      -ldl -pthread
  1. 使用示例(时间戳走 SignServer)
hpm_signer \
  -s /path/signer.pem \
  -i /path/uboot.bin \
  -o /path/uboot.bin.cms \
  -U "https://<host>/signserver/process?workerId=3" 

我现在的疑问

  1. bingo 调用签名的入口在哪?
  • 希望确认“uboot.bin → hpm_signer → *.cms → 后续打包”的完整调用链,避免只改了 signer 而漏掉其他环节(比如校验、打包、镜像命名等)。
  1. 仅改 TSA→SignServer 时还要动哪些点?

签名流程可以查看:

签名实现源码查看bingo PR 44

1 个赞

我去研究一下

谢谢,搞定了,临时在task.py,强制写死参数做了验证,云签名验证完了。