具有Win32低级消息API的CAdES签名

时间:2018-08-11 14:21:56

标签: c++ cryptography asn.1

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

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

前两个类型和哈希值会自动添加,但会自动添加密码库。

第三个是消息的时间。我能够使用CryptEncodeObject和szOID_RSA_signingTime来放置它 “ 1.2.840.113549.1.9.5”。

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

要能够手动添加此代码,我必须知道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编码器对其进行编码,但是有没有更简单的方法?

1 个答案:

答案 0 :(得分:0)

我做到了,您必须使用ASN.1编译器,然后使用CMS编码已签名的属性。

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