Exemplo n.º 1
0
 // TODO add 'insertXXX' methods to the Buffer class
 protected Buffer insertCharacter(Buffer org, int c) {
   int remaining = org.capacity();
   int readPos = org.rpos();
   // see if can accommodate the character in the original buffer
   if ((remaining > 0) && (readPos > 0)) {
     int writePos = org.wpos();
     org.wpos(readPos - 1);
     org.putByte((byte) c);
     org.wpos(writePos);
     org.rpos(readPos - 1);
     return org;
   } else {
     Buffer buf = new ByteArrayBuffer(org.available() + Byte.SIZE, false);
     buf.putByte((byte) c);
     buf.putBuffer(org);
     return buf;
   }
 }
Exemplo n.º 2
0
  @Override
  public Boolean doAuth(Buffer buffer, boolean init) throws Exception {
    ValidateUtils.checkTrue(init, "Instance not initialized");
    boolean hasSig = buffer.getBoolean();
    String alg = buffer.getString();

    int oldLim = buffer.wpos();
    int oldPos = buffer.rpos();
    int len = buffer.getInt();
    buffer.wpos(buffer.rpos() + len);
    PublicKey key = buffer.getRawPublicKey();
    ServerFactoryManager manager = session.getFactoryManager();
    Signature verif =
        ValidateUtils.checkNotNull(
            NamedFactory.Utils.create(manager.getSignatureFactories(), alg),
            "No verifier located for algorithm=%s",
            alg);
    verif.initVerifier(key);
    buffer.wpos(oldLim);

    byte[] sig = hasSig ? buffer.getBytes() : null;

    PublickeyAuthenticator authenticator =
        ValidateUtils.checkNotNull(
            manager.getPublickeyAuthenticator(), "No PublickeyAuthenticator configured");
    if (!authenticator.authenticate(username, key, session)) {
      return Boolean.FALSE;
    }

    if (!hasSig) {
      Buffer buf = session.createBuffer(SshConstants.SSH_MSG_USERAUTH_PK_OK);
      buf.putString(alg);
      buf.putRawBytes(buffer.array(), oldPos, 4 + len);
      session.writePacket(buf);
      return null;
    } else {
      Buffer buf = new ByteArrayBuffer();
      buf.putBytes(session.getKex().getH());
      buf.putByte(SshConstants.SSH_MSG_USERAUTH_REQUEST);
      buf.putString(username);
      buf.putString(service);
      buf.putString(UserAuthPublicKeyFactory.NAME);
      buf.putBoolean(true);
      buf.putString(alg);
      buffer.rpos(oldPos);
      buffer.wpos(oldPos + 4 + len);
      buf.putBuffer(buffer);
      verif.update(buf.array(), buf.rpos(), buf.available());
      if (!verif.verify(sig)) {
        throw new Exception("Key verification failed");
      }
      return Boolean.TRUE;
    }
  }
Exemplo n.º 3
0
    @Override
    protected void process(int cmd, Buffer req, Buffer rep) throws Exception {
      switch (cmd) {
        case SSH_AGENTC_REQUEST_RSA_IDENTITIES:
          // stop causing ssh-add -l to log errors
          rep.putByte(SSH_AGENT_RSA_IDENTITIES_ANSWER);
          rep.putInt(0);
          break;

        default:
          super.process(cmd, req, rep);
          break;
      }
    }
Exemplo n.º 4
0
 public synchronized void write(int c) {
   buffer.putByte((byte) c);
 }