public PacketKexDHInit(BigInteger e) {
   this.e = e;
   TypesWriter tw = new TypesWriter();
   tw.writeByte(Packets.SSH_MSG_KEXDH_INIT);
   tw.writeMPInt(e);
   payload = tw.getBytes();
 }
Пример #2
0
 public byte[] getPayload() {
   if (payload == null) {
     TypesWriter tw = new TypesWriter();
     tw.writeByte(Packets.SSH_MSG_NEWKEYS);
     payload = tw.getBytes();
   }
   return payload;
 }
Пример #3
0
 public byte[] getPayload() {
   if (payload == null) {
     TypesWriter tw = new TypesWriter();
     tw.writeByte(Packets.SSH_MSG_IGNORE);
     tw.writeString(body, 0, body.length);
     payload = tw.getBytes();
   }
   return payload;
 }
 public PacketUserauthFailure(Set<String> authThatCanContinue, boolean partialSuccess) {
   this.authThatCanContinue = authThatCanContinue;
   this.partialSuccess = partialSuccess;
   TypesWriter tw = new TypesWriter();
   tw.writeByte(Packets.SSH_MSG_USERAUTH_FAILURE);
   tw.writeNameList(authThatCanContinue.toArray(new String[authThatCanContinue.size()]));
   tw.writeBoolean(partialSuccess);
   payload = tw.getBytes();
 }
Пример #5
0
 public byte[] getPayload() {
   if (payload == null) {
     TypesWriter tw = new TypesWriter();
     tw.writeByte(Packets.SSH_MSG_DISCONNECT);
     tw.writeUINT32(reason);
     tw.writeString(desc);
     tw.writeString(lang);
     payload = tw.getBytes();
   }
   return payload;
 }
Пример #6
0
  public boolean authenticatePublicKey(
      String user, char[] PEMPrivateKey, String password, SecureRandom rnd) throws IOException {
    try {
      initialize(user);

      if (methodPossible("publickey") == false)
        throw new IOException(
            "Authentication method publickey not supported by the server at this stage.");

      Object key = PEMDecoder.decode(PEMPrivateKey, password);

      if (key instanceof DSAPrivateKey) {
        DSAPrivateKey pk = (DSAPrivateKey) key;

        byte[] pk_enc = DSASHA1Verify.encodeSSHDSAPublicKey(pk.getPublicKey());

        TypesWriter tw = new TypesWriter();

        byte[] H = tm.getSessionIdentifier();

        tw.writeString(H, 0, H.length);
        tw.writeByte(Packets.SSH_MSG_USERAUTH_REQUEST);
        tw.writeString(user);
        tw.writeString("ssh-connection");
        tw.writeString("publickey");
        tw.writeBoolean(true);
        tw.writeString("ssh-dss");
        tw.writeString(pk_enc, 0, pk_enc.length);

        byte[] msg = tw.getBytes();

        DSASignature ds = DSASHA1Verify.generateSignature(msg, pk, rnd);

        byte[] ds_enc = DSASHA1Verify.encodeSSHDSASignature(ds);

        PacketUserauthRequestPublicKey ua =
            new PacketUserauthRequestPublicKey("ssh-connection", user, "ssh-dss", pk_enc, ds_enc);
        tm.sendMessage(ua.getPayload());
      } else if (key instanceof RSAPrivateKey) {
        RSAPrivateKey pk = (RSAPrivateKey) key;

        byte[] pk_enc = RSASHA1Verify.encodeSSHRSAPublicKey(pk.getPublicKey());

        TypesWriter tw = new TypesWriter();
        {
          byte[] H = tm.getSessionIdentifier();

          tw.writeString(H, 0, H.length);
          tw.writeByte(Packets.SSH_MSG_USERAUTH_REQUEST);
          tw.writeString(user);
          tw.writeString("ssh-connection");
          tw.writeString("publickey");
          tw.writeBoolean(true);
          tw.writeString("ssh-rsa");
          tw.writeString(pk_enc, 0, pk_enc.length);
        }

        byte[] msg = tw.getBytes();

        RSASignature ds = RSASHA1Verify.generateSignature(msg, pk);

        byte[] rsa_sig_enc = RSASHA1Verify.encodeSSHRSASignature(ds);

        PacketUserauthRequestPublicKey ua =
            new PacketUserauthRequestPublicKey(
                "ssh-connection", user, "ssh-rsa", pk_enc, rsa_sig_enc);
        tm.sendMessage(ua.getPayload());
      } else {
        throw new IOException("Unknown private key type returned by the PEM decoder.");
      }

      byte[] ar = getNextMessage();

      if (ar[0] == Packets.SSH_MSG_USERAUTH_SUCCESS) {
        authenticated = true;
        tm.removeMessageHandler(this, 0, 255);
        return true;
      }

      if (ar[0] == Packets.SSH_MSG_USERAUTH_FAILURE) {
        PacketUserauthFailure puf = new PacketUserauthFailure(ar, 0, ar.length);

        remainingMethods = puf.getAuthThatCanContinue();
        isPartialSuccess = puf.isPartialSuccess();

        return false;
      }

      throw new IOException("Unexpected SSH message (type " + ar[0] + ")");

    } catch (IOException e) {
      tm.close(e, false);
      throw (IOException) new IOException("Publickey authentication failed.").initCause(e);
    }
  }