Я пытаюсь использовать функции сообщений низкого уровня для создания подписи, совместимой с CAdES-BES.
Подпись должна быть в надлежащем формате PKCS # 7 вместе с четырьмя имеющимися подписанными атрибутами.
Первые два, type и hash, ставятся автоматически, кроме крипто-библиотеки.
Третий — это время сообщения. Я смог поставить это с помощью CryptEncodeObject и szOID_RSA_signingTime
«1.2.840.113549.1.9.5».
Четвертый сертификат — это подписывающий сертификат, OID которого не поддерживается крипто API, 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
Других решений пока нет …