in net/JetBrains.SignatureVerifier/src/Crypt/AuthenticodeSignatureVerifier.cs [98:127]
public async Task<VerifySignatureResult> VerifyAsync(
SignatureData signatureData,
[NotNull] ComputeHashInfo computeHashInfo,
[NotNull] Stream stream,
[NotNull] SignatureVerificationParams signatureVerificationParams,
[NotNull] FileIntegrityVerificationParams fileIntegrityVerificationParams)
{
if (computeHashInfo == null) throw new ArgumentNullException(nameof(computeHashInfo));
if (stream == null) throw new ArgumentNullException(nameof(stream));
if (signatureVerificationParams == null) throw new ArgumentNullException(nameof(signatureVerificationParams));
if (fileIntegrityVerificationParams == null) throw new ArgumentNullException(nameof(fileIntegrityVerificationParams));
var signedMessage = SignedMessage.CreateInstance(signatureData);
var signatureVerificationResult = await _signedMessageVerifier.VerifySignatureAsync(signedMessage, signatureVerificationParams);
if (!signatureVerificationResult.IsValid)
{
_logger?.Warning("Authenticode signature verification failed: certificates or attributes validation failed");
return signatureVerificationResult;
}
var fileIntegrityVerificationResult = VerifyFileIntegrity(signedMessage, computeHashInfo, stream, fileIntegrityVerificationParams);
if (!fileIntegrityVerificationResult.IsValid)
_logger?.Warning("Authenticode signature verification failed: file integrity verification failed");
else
_logger?.Info("Authenticode signature verification successfully passed");
return fileIntegrityVerificationResult;
}