private boolean checkForIdentification(Buffer.PlainBuffer lineBuffer) throws Buffer.BufferException { if (lineBuffer.available() < 4) { return false; } byte[] buf = new byte[4]; lineBuffer.readRawBytes(buf); // Reset lineBuffer.rpos(0); return Arrays.equals(EXPECTED_START_BYTES, buf); } }
if (buf.rpos() > win.getMaxPacketSize() && buf.available() == 0) { buf.clear();
.putBytes(f) .putMPInt(dh.getK()); digest.update(buf.array(), buf.rpos(), buf.available()); H = digest.digest();
.putMPInt(f) .putMPInt(dh.getK()); sha1.update(buf.array(), buf.rpos(), buf.available()); H = sha1.digest();
.putBytes(f) .putMPInt(dh.getK()); digest.update(buf.array(), buf.rpos(), buf.available()); H = digest.digest();
private boolean parseGexReply(SSHPacket buffer) throws Buffer.BufferException, GeneralSecurityException, TransportException { byte[] K_S = buffer.readBytes(); byte[] f = buffer.readBytes(); byte[] sig = buffer.readBytes(); hostKey = new Buffer.PlainBuffer(K_S).readPublicKey(); dh.computeK(f); BigInteger k = dh.getK(); final Buffer.PlainBuffer buf = initializedBuffer() .putString(K_S) .putUInt32(minBits) .putUInt32(preferredBits) .putUInt32(maxBits) .putMPInt(((DH) dh).getP()) .putMPInt(((DH) dh).getG()) .putBytes(dh.getE()) .putBytes(f) .putMPInt(k); digest.update(buf.array(), buf.rpos(), buf.available()); H = digest.digest(); Signature signature = Factory.Named.Util.create(trans.getConfig().getSignatureFactories(), KeyType.fromKey(hostKey).toString()); signature.initVerify(hostKey); signature.update(H, 0, H.length); if (!signature.verify(sig)) throw new TransportException(DisconnectReason.KEY_EXCHANGE_FAILED, "KeyExchange signature verification failed"); return true; }
if (buf.rpos() > win.getMaxPacketSize() && buf.available() == 0) { buf.clear();
@Override public int read(byte[] b, int off, int len) throws IOException { synchronized (buf) { for (; ; ) { if (buf.available() > 0) break; if (eof) if (error != null) throw error; else return -1; try { buf.wait(); } catch (InterruptedException e) { throw (IOException) new InterruptedIOException().initCause(e); } } if (len > buf.available()) len = buf.available(); buf.readRawBytes(b, off, len); if (buf.rpos() > win.getMaxPacketSize() && buf.available() == 0) buf.clear(); } if (!chan.getAutoExpand()) checkWindow(); return len; }
public String parseIdentificationString() throws IOException { for (;;) { Buffer.PlainBuffer lineBuffer = new Buffer.PlainBuffer(); int lineStartPos = buffer.rpos(); for (;;) { if (buffer.available() == 0) { buffer.rpos(lineStartPos); return ""; } byte b = buffer.readByte(); lineBuffer.putByte(b); if (b == '\n') { if (checkForIdentification(lineBuffer)) { return readIdentification(lineBuffer); } else { logHeaderLine(lineBuffer); } break; } } } }
private String getKeyString() { final Buffer.PlainBuffer buf = new Buffer.PlainBuffer().putPublicKey(key); return Base64.encodeBytes(buf.array(), buf.rpos(), buf.available()); }
private String getKeyString(PublicKey pk) { final Buffer.PlainBuffer buf = new Buffer.PlainBuffer().putPublicKey(pk); return Base64.encodeBytes(buf.array(), buf.rpos(), buf.available()); }
private boolean checkForIdentification(Buffer.PlainBuffer lineBuffer) throws Buffer.BufferException { if (lineBuffer.available() < 4) { return false; } byte[] buf = new byte[4]; lineBuffer.readRawBytes(buf); // Reset lineBuffer.rpos(0); return Arrays.equals(EXPECTED_START_BYTES, buf); } }
private boolean parseGexReply(SSHPacket buffer) throws Buffer.BufferException, GeneralSecurityException, TransportException { byte[] K_S = buffer.readBytes(); byte[] f = buffer.readBytes(); byte[] sig = buffer.readBytes(); hostKey = new Buffer.PlainBuffer(K_S).readPublicKey(); dh.computeK(f); BigInteger k = dh.getK(); final Buffer.PlainBuffer buf = initializedBuffer() .putString(K_S) .putUInt32(minBits) .putUInt32(preferredBits) .putUInt32(maxBits) .putMPInt(((DH) dh).getP()) .putMPInt(((DH) dh).getG()) .putBytes(dh.getE()) .putBytes(f) .putMPInt(k); digest.update(buf.array(), buf.rpos(), buf.available()); H = digest.digest(); Signature signature = Factory.Named.Util.create(trans.getConfig().getSignatureFactories(), KeyType.fromKey(hostKey).toString()); signature.initVerify(hostKey); signature.update(H, 0, H.length); if (!signature.verify(sig)) throw new TransportException(DisconnectReason.KEY_EXCHANGE_FAILED, "KeyExchange signature verification failed"); return true; }
public String parseIdentificationString() throws IOException { for (;;) { Buffer.PlainBuffer lineBuffer = new Buffer.PlainBuffer(); int lineStartPos = buffer.rpos(); for (;;) { if (buffer.available() == 0) { buffer.rpos(lineStartPos); return ""; } byte b = buffer.readByte(); lineBuffer.putByte(b); if (b == '\n') { if (checkForIdentification(lineBuffer)) { return readIdentification(lineBuffer); } else { logHeaderLine(lineBuffer); } break; } } } }
private String getKeyString(PublicKey pk) { final Buffer.PlainBuffer buf = new Buffer.PlainBuffer().putPublicKey(pk); return Base64.encodeBytes(buf.array(), buf.rpos(), buf.available()); }
@Test public void testPosition() throws UnsupportedEncodingException, Buffer.BufferException { assertEquals(5, posBuf.wpos()); assertEquals(0, posBuf.rpos()); assertEquals(5, posBuf.available()); // read some bytes byte b = posBuf.readByte(); assertEquals(b, (byte) 'H'); assertEquals(1, posBuf.rpos()); assertEquals(4, posBuf.available()); }