private bool VerifyDigest()

in net/JetBrains.SignatureVerifier/src/Crypt/BC/SignerInformation.cs [580:640]


    private bool VerifyDigest(
      byte[] digest,
      AsymmetricKeyParameter key,
      byte[] signature)
    {
      string algorithm = Helper.GetEncryptionAlgName(this.EncryptionAlgOid);

      try
      {
        if (algorithm.Equals("RSA"))
        {
          IBufferedCipher c = CmsEnvelopedHelper.Instance.CreateAsymmetricCipher("RSA/ECB/PKCS1Padding");

          c.Init(false, key);

          byte[] decrypt = c.DoFinal(signature);

          DigestInfo digInfo = DerDecode(decrypt);

          if (!digInfo.DigestAlgorithm.Algorithm.Equals(digestAlgorithm.Algorithm))
          {
            return false;
          }

          if (!IsNull(digInfo.DigestAlgorithm.Parameters))
          {
            return false;
          }

          byte[] sigHash = digInfo.GetDigest();

          return Arrays.FixedTimeEquals(digest, sigHash);
        }
        else if (algorithm.Equals("DSA"))
        {
          ISigner sig = SignerUtilities.GetSigner("NONEwithDSA");

          sig.Init(false, key);

          sig.BlockUpdate(digest, 0, digest.Length);

          return sig.VerifySignature(signature);
        }
        else
        {
          throw new CmsException("algorithm: " + algorithm + " not supported in base signatures.");
        }
      }
      catch (SecurityUtilityException e)
      {
        throw e;
      }
      catch (GeneralSecurityException e)
      {
        throw new CmsException("Exception processing signature: " + e, e);
      }
      catch (IOException e)
      {
        throw new CmsException("Exception decoding signature: " + e, e);
      }
    }