Pure-MoonBit PAdES/CMS PDF signing and verification
当前是 0.1 开发版,功能可用但还不适合直接用于有法律效力的正式签署。
| 能力 | 状态 |
|---|---|
| 签名算法 | RSA PKCS#1 v1.5、ECDSA P-256,SHA-256 |
| 签名格式 | PAdES B-B(ETSI.CAdES.detached),CMS SignedData |
| 验签 | 检查字节范围、摘要、签名;文件被改一个字节就失败 |
| 命令行 | sign / verify / info |
| 互操作 | 生成的签名能被 OpenSSL 验证(CI 每次都跑) |
| 平台 | Linux / macOS / Windows(CI 三平台跑测试) |
moon run cmd/mkpdf -- blank.pdf
openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem \
-days 365 -nodes -subj "/CN=MoonSign Demo"
moon run cmd/moonsign -- sign blank.pdf --key key.pem --cert cert.pem --out signed.pdf
moon run cmd/moonsign -- verify signed.pdf --cert cert.pem
moon run cmd/moonsign -- info signed.pdfSigned: signed.pdf
Field: Signature1
Digest: SHA-256Signature 1: Signature1
subfilter: ETSI.CAdES.detached
Result: VALID
The document has not changed since signing.let signed = @pades.sign_pdf(
pdf_bytes,
@pades.SigningKey::Rsa(modulus, private_exponent),
certificate,
extra_certificates,
{
field_name: "Signature1",
contents_chars: 16384,
signing_time: None,
hash: @crypto.Hash::Sha256,
},
)
let ok = @pades.verify_pdf(signed, certificate)der/ DER / ASN.1 基础编码(CMS、证书都靠它)
x509/ 证书解析、公钥提取
crypto/ 摘要、RSA、ECDSA(基于 mooncry)
cms/ CMS SignedData 的构造、解析、验签
pdf/ 在 PDF 里放签名域、写 ByteRange、填签名
pades/ 对外入口:sign_pdf / verify_pdf
pem/ 读 PEM 格式的私钥和证书
cmd/ 命令行程序Install
Download zipPure-MoonBit PAdES/CMS PDF signing and verification