buffer.putPublicKey(key.getPublic());
Signature verif = NamedFactory.Utils.create(session.getFactoryManager().getSignatureFactories(), (key.getPublic() instanceof RSAPublicKey) ? KeyPairProvider.SSH_RSA : KeyPairProvider.SSH_DSS);
verif.init(key.getPublic(), key.getPrivate());
Buffer bs = new Buffer();
bs.putString(session.getKex().getH());
bs.putCommand(SshConstants.Message.SSH_MSG_USERAUTH_REQUEST);
bs.putString(username);
bs.putString(service);
bs.putString("publickey");
bs.putByte((byte) 1);
bs.putString((key.getPublic() instanceof RSAPublicKey) ? KeyPairProvider.SSH_RSA : KeyPairProvider.SSH_DSS);
bs.putPublicKey(key.getPublic());
verif.update(bs.array(), bs.rpos(), bs.available());
bs = new Buffer();
bs.putString((key.getPublic() instanceof RSAPublicKey) ? KeyPairProvider.SSH_RSA : KeyPairProvider.SSH_DSS);
bs.putBytes(verif.sign());
buffer.putBytes(bs.array(), bs.rpos(), bs.available());
session.writePacket(buffer);
return Result.Continued;
} catch (IOException e) {
throw e;