in net/JetBrains.SignatureVerifier/src/Crypt/SignerInfoVerifier.cs [180:225]
private async Task<VerifySignatureResult> verifyTimeStampAsync(
SignatureVerificationParams signatureVerificationParams)
{
var tst = TimeStampToken;
if (tst == null)
return VerifySignatureResult.Valid;
var tstCerts = tst.GetCertificates();
var tstCertsList = tstCerts.EnumerateMatches(tst.SignerID).ToList();
if (tstCertsList.Count < 1)
return new VerifySignatureResult(VerifySignatureStatus.InvalidTimestamp)
{ Message = Messages.signer_cert_not_found };
var tstCert = tstCertsList[0];
try
{
tst.Validate(tstCert);
if (signatureVerificationParams.BuildChain)
try
{
var tstCmsSignedData = tst.ToCmsSignedData();
var certs = tstCmsSignedData.GetCertificates();
return await buildCertificateChainAsync(tstCert, certs, signatureVerificationParams);
}
catch (PkixCertPathBuilderException ex)
{
return VerifySignatureResult.InvalidChain(ex.FlatMessages());
}
}
catch (TspException ex)
{
return new VerifySignatureResult(VerifySignatureStatus.InvalidTimestamp)
{ Message = ex.FlatMessages() };
}
catch (CertificateExpiredException ex)
{
return new VerifySignatureResult(VerifySignatureStatus.InvalidTimestamp)
{ Message = ex.FlatMessages() };
}
return VerifySignatureResult.Valid;
}