我正在尝试使用低级消息函数来创建符合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