带有 win32 低级别消息 API 的 CAdES 签名

CAdES signature with win32 low level message apis

本文关键字:API CAdES 签名 消息 win32 带有      更新时间:2023-10-16

我正在尝试使用低级消息函数来创建符合CAdES-BES的签名。

签名必须采用正确的 PKCS#7 格式,并存在四个签名属性。

前两个,类型和哈希是自动放置的,但加密库。

第三个是消息的时间。我能够使用CryptEncodeObject和szOID_RSA_signingTime "1.2.840.113549.1.9.5"。

第四个是签名证书,加密 API 不支持 OID,1.2.840.113549.1.9.16.2.47。

为了能够手动添加它,我必须知道CryptEncodeObject在内部是如何工作的,以及编码的结构类型:

SigningCertificateV2 ::=  SEQUENCE {
certs        SEQUENCE OF ESSCertIDv2,
policies     SEQUENCE OF PolicyInformation OPTIONAL
}

ESSCertIDv2 ::=  SEQUENCE {
hashAlgorithm           AlgorithmIdentifier
DEFAULT {algorithm id-sha256},
certHash                 Hash,
issuerSerial             IssuerSerial OPTIONAL
}
Hash ::= OCTET STRING
IssuerSerial ::= SEQUENCE {
issuer                   GeneralNames,
serialNumber             CertificateSerialNumber
}

在完成之前必须包含更多结构。

我可以尝试使用 ASN.1 编译器来构建整个东西,然后使用 DER 编码器对其进行编码,但有更简单的方法吗?

我做到了,你必须使用 ASN.1 编译器,然后使用 CMS 对签名属性进行编码。

https://www.codeproject.com/Articles/1256991/AdES-An-implementation-of-CAdES-for-Windows-in-Cpl