9 次重大发布
0.10.0 | 2022年12月29日 |
---|---|
0.9.0 | 2022年11月8日 |
0.8.0 | 2022年6月5日 |
0.6.0 | 2022年3月6日 |
0.2.0 | 2021年5月6日 |
#9 在 #拖拽
136 每月下载量
用于 2 crates
82KB
1.5K SLoC
tugger-code-signing
tugger-code-signing
是一个库包,实现了与代码签名相关的功能。
tugger-code-signing
是 Tugger 应用分发工具的一部分,但作为一个独立的库包存在,以便其他希望执行类似功能的工具可以重用代码。Tugger 是 PyOxidizer 项目的一部分,这个库包在该仓库中开发。
虽然这个库包是作为一个更大的项目的一部分进行开发的,但非常欢迎对其在主要用例之外的使用进行修改!
lib.rs
:
代码签名的跨平台接口。
这个库包实现了以平台无关的方式执行代码签名功能。它试图抽象平台差异,使用户不必关心他们运行在什么平台上或他们正在签名的实体类型。它根据底层库包的限制实现了不同程度的成功。
一般工作流程
[SigningCertificate] 表示一个代码签名证书(逻辑上是一个私钥和一个公钥 X.509 证书)。实例是通过引用支持位置中的一种代码签名证书构建的。
[SigningCertificate] 转换为 [Signer],这是一个范围稍广的实体。[Signer] 拥有 [SigningCertificate] 以外的附加属性,例如构成证书链的 [CapturedX509Certificate] 列表和使用的时间戳协议服务器 URL。
[SignableCandidate] 表示可以签名的不同潜在数据类型,例如文件系统路径或数据切片。
[Signer] 通过 Signer::resolve_signability 提供了一个具体的测试,以确定 [SignableCandidate] 是否可签名。该测试依赖于支持签名的 后端(例如 [apple_codesign] 和 [tugger_windows_codesign])中的启发式方法以及 [Signer] 的特定状态来确定实体是否可签名。可能会出现假阳性或假阴性:请报告错误!如果实体可签名,它将被转换为 [Signable] 实例。
要签署一个[可签署项],您需要获得一个[签署者]。您可以通过调用Signer::resolve_signer来完成此操作。此函数在内部执行可签署性检查,如果遇到不可签署的实体,则返回None
。因此,大多数有签署意图的消费者应该直接调用此函数,而不是调用Signer::resolve_signability,以避免潜在的高成本的双重可签署性测试。
[可签署签署者]与[签署者]和[可签署项]相关联,用于仅签署单个实体。[可签署签署者]实例保证能够签署[可签署项]。然而,签署操作支持通过[签署目标]指定将签署结果写入多种类型的目的地,并且并非每个目的地都受每个输入或签署后端支持。因此,在尝试签署之前,调用SignableSigner.destination_compatibility并验证是否支持将数据写入特定的[签署目标]是一个好主意!
您还可以进一步自定义[可签署签署者]实例以影响签署设置。有关可用的设置,请参阅其文档。对于高级用户,可以在[签署者]实例上注册回调函数,以允许自定义用于签署单个[可签署项]的低级签署原语。请参阅Signer::apple_settings_callback和Signer::windows_settings_callback。
最后,可以通过SignableSigner::sign执行签署操作。这隐藏了将不同的可签署实体映射到不同的签署后端的所有复杂性,并为您提供了相对干净的接口来尝试代码签署。如果签署成功,您将获得一个[签署输出],描述签署内容所在的位置。
依赖项
~72MB
~1.5M SLoC