code: public synchronized void verify(PublicKey key, String sigProvider)
              throws CRLException, NoSuchAlgorithmException, InvalidKeyException,
              NoSuchProviderException, SignatureException {
  
          if (sigProvider == null) {
              sigProvider = "";
          }
          if ((verifiedPublicKey != null) && verifiedPublicKey.equals(key)) {
              // this CRL has already been successfully verified using
              // this public key. Make sure providers match, too.
              if (sigProvider.equals(verifiedProvider)) {
                  return;
              }
          }
          if (signedCRL == null) {
              throw new CRLException("Uninitialized CRL");
          }
          Signature   sigVerf = null;
          if (sigProvider.length() == 0) {
              sigVerf = Signature.getInstance(sigAlgId.getName());
          } else {
              sigVerf = Signature.getInstance(sigAlgId.getName(), sigProvider);
          }
          sigVerf.initVerify(key);
  
          if (tbsCertList == null) {
              throw new CRLException("Uninitialized CRL");
          }
  
          sigVerf.update(tbsCertList, 0, tbsCertList.length);
  
          if (!sigVerf.verify(signature)) {
              throw new SignatureException("Signature does not match.");
          }
          verifiedPublicKey = key;
          verifiedProvider = sigProvider;
      }
docs: Verifies that this CRL was signed using the
  private key that corresponds to the given public key,
  and that the signature verification was computed by
  the given provider.
  
  @param key the PublicKey used to carry out the verification.
  @param sigProvider the name of the signature provider.
  
  @exception NoSuchAlgorithmException on unsupported signature
  algorithms.
  @exception InvalidKeyException on incorrect key.
  @exception NoSuchProviderException on incorrect provider.
  @exception SignatureException on signature errors.
  @exception CRLException on encoding errors.