Я пытаюсь создать файл, содержащий блок pkcs 7.В этом контейнере мне нужен мой открытый ключ и информация о подписавшем (без подписанных данных !!!).Я уже попробовал несколько альтернатив без какой-либо удачи.Это мой код:
Сначала информация о подписи:
List<X509Certificate> certs = new List<X509Certificate> { cert };
IX509Store x509Certs = X509StoreFactory.Create(
"CERTIFICATE/COLLECTION",
new X509CollectionStoreParameters(certs));
var ias = new IssuerAndSerialNumber(cert.IssuerDN, cert.SerialNumber);
SignerIdentifier sid = new SignerIdentifier(ias);
AlgorithmIdentifier algoDigId = new AlgorithmIdentifierCmsSignedGenerator.DigestSha1);
AlgorithmIdentifier algoCryptId = new AlgorithmIdentifier(CmsSignedGenerator.EncryptionRsa);
SignerInfo si = new SignerInfo(sid, algoDigId, null, algoCryptId,
new DerOctetString(contentSignature), null);
Байт contentSignature [] содержит подписанный дайджест для некоторой информации.
Теперь, когда я пытаюсьсоздать SignedData, все идет не так
var signedContent = new ContentInfo(CmsObjectIdentifiers.Data, DerNull.Instance);
CmsSignedData csd = new CmsSignedData(signedContent);
Я не пытаюсь отправить информацию, это только для обмена ключами и проверки.Я считаю, что это правильный сценарий, но почему-то это не работает.
Спасибо за вашу помощь.
ОБНОВЛЕНИЕ:
больше контекста.
Япытается подписать JAR из исполняемого файла .Net.Я в значительной степени выполнил остальную часть процесса, но jarsigner создает файл pkcs7 с:
ContentInfo, установленным для типа Data и без содержимого.Пока что создание нового ContentInfo (CmsObjectIdentifiers.Data, null) просто вызывает исключение при добавлении информации о содержимом в CmsData
При добавлении SignerInfo эта SignerInfo включает подпись, ранее полученную изсодержание JAR.