Как воспроизвести команду signtool.exe /p7 /p7co "OID" в C# /C ++?C++

Программы на C++. Форум разработчиков
Anonymous
Как воспроизвести команду signtool.exe /p7 /p7co "OID" в C# /C ++?

Сообщение Anonymous »

Я хочу повторить следующую signtool.exe Команда:

Код: Выделить всё

SignTool.exe sign /v /n "certCN" /p7 . /p7co "OID" /fd certHash
< /code>
Это моя попытка в .net < /p>
private static void SignFileBlob(string filePath,
X509Certificate2 signingCertificate,
string? contentOid = null)
{
byte[] fileContent = File.ReadAllBytes(filePath);
string contentTypeOid = contentOid ?? "1.2.840.113549.1.7.1";
ContentInfo contentInfo = new(new Oid(contentTypeOid), fileContent);
SignedCms signedCms = new(contentInfo, false);
CmsSigner signer = new(signingCertificate);
string hashOid = GetHashOidFromCertSignatureAlgorithm(signingCertificate);
signer.DigestAlgorithm = new Oid(hashOid);
signer.IncludeOption = X509IncludeOption.EndCertOnly;
signedCms.ComputeSignature(signer, false);
byte[] signedBytes = signedCms.Encode();
File.Delete(filePath);
File.WriteAllBytes(filePath, signedBytes);
}
К сожалению, он использует CMS V3, в то время как эта команда signtool.exe использует CMS V1. Мне нужна 100% идентичная подпись, повторяемая в C#, C ++ или Rust, любой из этих языков в порядке, я просто не хочу использовать какую -либо стороннюю библиотеку, такую ​​как Bouncy Castle, OpenSSL и т. Д. Моя единственная проблема с этим методом заключается в том, что она не использует CMS V1, и я не знаю, как заставить его использовать его. Я не знаю о каких -либо других различиях между моим кодом .NET по сравнению с методами signtool.exe использует. У меня тоже есть файл PFX. Сертификат был сгенерирован через CNG, вот точный код.>

Подробнее здесь: https://stackoverflow.com/questions/796 ... oid-in-c-c

Вернуться в «C++»