/**
   * initialise the signer for signing or verification.
   *
   * @param forSigning true if for signing, false otherwise
   * @param parameters necessary parameters.
   */
  public void init(boolean forSigning, CipherParameters parameters) {
    this.forSigning = forSigning;
    AsymmetricKeyParameter k;

    if (parameters instanceof ParametersWithRandom) {
      k = (AsymmetricKeyParameter) ((ParametersWithRandom) parameters).getParameters();
    } else {
      k = (AsymmetricKeyParameter) parameters;
    }

    if (forSigning && !k.isPrivate()) {
      throw new IllegalArgumentException("signing requires private key");
    }

    if (!forSigning && k.isPrivate()) {
      throw new IllegalArgumentException("verification requires public key");
    }

    reset();

    rsaEngine.init(forSigning, parameters);
  }