/**
  * Initialize the signer.
  *
  * @param forSigning Whether to initialize signer for the sign operation.
  * @param params BC cipher parameters.
  */
 protected void init(final boolean forSigning, final CipherParameters params) {
   if (forSigning && randomProvider != null) {
     signer.init(forSigning, new ParametersWithRandom(params, randomProvider));
   } else {
     signer.init(forSigning, params);
   }
 }
 /** {@inheritDoc} */
 public boolean verify(final InputStream in, final byte[] signature)
     throws CryptException, IOException {
   final BigInteger[] sig = decode(signature);
   return signer.verifySignature(digest.digest(in), sig[0], sig[1]);
 }
 /** {@inheritDoc} */
 public byte[] sign(final InputStream in) throws CryptException, IOException {
   final BigInteger[] out = signer.generateSignature(digest.digest(in));
   return encode(out[0], out[1]);
 }
 /** {@inheritDoc} */
 public boolean verify(final byte[] data, final byte[] signature) throws CryptException {
   final BigInteger[] sig = decode(signature);
   return signer.verifySignature(digest.digest(data), sig[0], sig[1]);
 }
 /** {@inheritDoc} */
 public byte[] sign(final byte[] data) throws CryptException {
   final BigInteger[] out = signer.generateSignature(digest.digest(data));
   return encode(out[0], out[1]);
 }