/**
   * @param username
   * @param algorithm
   * @param encoded
   * @param service
   * @param sessionId
   * @param signature
   * @return
   * @throws IOException
   */
  public boolean verifyKeySignature(
      String username,
      String algorithm,
      byte[] encoded,
      String service,
      byte[] sessionId,
      byte[] signature)
      throws IOException {
    try {
      SshPublicKey key = getAuthorizedKey(username, algorithm, encoded);

      ByteArrayWriter data = new ByteArrayWriter();
      data.writeBinaryString(sessionId);
      data.write(SshMsgUserAuthRequest.SSH_MSG_USERAUTH_REQUEST);
      data.writeString(username);
      data.writeString(service);
      data.writeString("publickey");
      data.write(1);
      data.writeString(key.getAlgorithmName());
      data.writeBinaryString(key.getEncoded());

      if (key.verifySignature(signature, data.toByteArray())) {
        return true;
      }
    } catch (IOException ex) {
    }

    return false;
  }