Closed k0st1x closed 1 year ago
Добрый день.
Для начала, в рамках паранойи, предлагаю убедиться, что это не внутренне исключение, которое перехватывает студия, ибо выставлена галка перехватывать все исключения.
Если поведение наблюдаете под отладчиком - и игнорировать данное исключение (нажимая f5 при его возникновении, или поставив галку на его дальнейший игнор в студии) или же запускать без отладчика - код завершается успешно для вызывающей функции?
@Fasjeit спасибо за уточнение. Я дополню. Действительно, то что я написал в изначальном тексте было про "GetDigestAlgorithm()" если я сделаю код
try {
signedCms.CheckSignature(true);
} catch(Exception e) { } // !!!
то приложение попадет в catch вот с таким исключением
Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: 'LibCore.Common.Reflection.Reflector' does not contain a definition for 'GetContent'
at CallSite.Target(Closure , CallSite , Object , ReadOnlyMemory`1 , Object )
at System.Dynamic.UpdateDelegates.UpdateAndExecute3[T0,T1,T2,TRet](CallSite site, T0 arg0, T1 arg1, T2 arg2)
at LibCore.Security.Cryptography.Pkcs.Detours.SignerInfoDetour.PrepareDigest(Boolean compatMode, SignerInfo instance)
at LibCore.Security.Cryptography.Pkcs.Detours.SignerInfoDetour.VerifySignature(GostCmsSignature signatureProcessor, X509Certificate2 certificate, Boolean compatMode, SignerInfo instance)
at LibCore.Security.Cryptography.Pkcs.Detours.SignerInfoDetour.Prefix(X509Certificate2Collection extraStore, X509Certificate2 certificate, Boolean verifySignatureOnly, SignerInfo __instance)
at System.Security.Cryptography.Pkcs.SignerInfo.Verify_Patch1(SignerInfo this, X509Certificate2Collection extraStore, X509Certificate2 certificate, Boolean verifySignatureOnly)
at System.Security.Cryptography.Pkcs.SignerInfo.CheckSignature(X509Certificate2Collection extraStore, Boolean verifySignatureOnly)
at System.Security.Cryptography.Pkcs.SignedCms.CheckSignatures(SignerInfoCollection signers, X509Certificate2Collection extraStore, Boolean verifySignatureOnly)
at System.Security.Cryptography.Pkcs.SignedCms.CheckSignature(X509Certificate2Collection extraStore, Boolean verifySignatureOnly)
at System.Security.Cryptography.Pkcs.SignedCms.CheckSignature(Boolean verifySignatureOnly)
Видно, что в итоге падение ругается на отсутствие метода "GetContent()".
Попробуйте исправленную сборку по ссылке.
https://file.cryptopro.ru/f/p4QDmnme9JlN7gmCZxVZvJMmW2qlkljs/LibCore.Windows.2023.4.8.1.nupkg
@Fasjeit спасибо за быстрый ответ. С новым пакетом ошибка в блоке catch отлавливается, но выглядит уже вот так:
Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: Cannot implicitly convert type 'LibCore.Common.Reflection.Reflector' to 'System.ReadOnlyMemory<byte>'
at CallSite.Target(Closure , CallSite , Object )
at System.Dynamic.UpdateDelegates.UpdateAndExecute1[T0,TRet](CallSite site, T0 arg0)
at LibCore.Security.Cryptography.Pkcs.Detours.SignerInfoDetour.PrepareDigest(Boolean compatMode, SignerInfo instance)
at LibCore.Security.Cryptography.Pkcs.Detours.SignerInfoDetour.VerifySignature(GostCmsSignature signatureProcessor, X509Certificate2 certificate, Boolean compatMode, SignerInfo instance)
at LibCore.Security.Cryptography.Pkcs.Detours.SignerInfoDetour.Prefix(X509Certificate2Collection extraStore, X509Certificate2 certificate, Boolean verifySignatureOnly, SignerInfo __instance)
at System.Security.Cryptography.Pkcs.SignerInfo.Verify_Patch1(SignerInfo this, X509Certificate2Collection extraStore, X509Certificate2 certificate, Boolean verifySignatureOnly)
at System.Security.Cryptography.Pkcs.SignerInfo.CheckSignature(X509Certificate2Collection extraStore, Boolean verifySignatureOnly)
at System.Security.Cryptography.Pkcs.SignedCms.CheckSignatures(SignerInfoCollection signers, X509Certificate2Collection extraStore, Boolean verifySignatureOnly)
at System.Security.Cryptography.Pkcs.SignedCms.CheckSignature(X509Certificate2Collection extraStore, Boolean verifySignatureOnly)
at System.Security.Cryptography.Pkcs.SignedCms.CheckSignature(Boolean verifySignatureOnly)
... и ещё одна сборка на пробу https://file.cryptopro.ru/f/QiKGNkvdD6V1sRmGm4I46ZzET6WwFxDO/LibCore.Windows.2023.4.10.1.nupkg
@Fasjeit Спасибо, теперь работает. Как можно получить билд для Linux?
Здравствуйте, хочу использовать механизм проверки подписи. Взял код из https://github.com/CryptoPro/libcore#readme
(под windows) получаю падение:
Помогите разорбраться с работоспособностью примера.
upd: Под отладчиком видно, что объект "instance" является типом "SignerInfo", которого нет публичного метода "GetDigestAlgorithm()".