public byte[] getPayLoad(SshCrypto crypto) { byte[] data = getData(); // packet length if (data != null) packet_length = data.length + 5; else packet_length = 5; packet_length_array[3] = (byte) (packet_length & 0xff); packet_length_array[2] = (byte) ((packet_length >> 8) & 0xff); packet_length_array[1] = (byte) ((packet_length >> 16) & 0xff); packet_length_array[0] = (byte) ((packet_length >> 24) & 0xff); // padding padding = new byte[(8 - (packet_length % 8))]; if (crypto == null) { for (int i = 0; i < padding.length; i++) padding[i] = 0; } else { for (int i = 0; i < padding.length; i++) padding[i] = SshIO.getNotZeroRandomByte(); } // Compute the crc of [ Padding, Packet type, Data ] block = new byte[packet_length + padding.length]; System.arraycopy(padding, 0, block, 0, padding.length); int offset = padding.length; block[offset++] = getType(); if (packet_length > 5) { System.arraycopy(data, 0, block, offset, data.length); offset += data.length; } long crc = crc32(block, offset); crc_array[3] = (byte) (crc & 0xff); crc_array[2] = (byte) ((crc >> 8) & 0xff); crc_array[1] = (byte) ((crc >> 16) & 0xff); crc_array[0] = (byte) ((crc >> 24) & 0xff); System.arraycopy(crc_array, 0, block, offset, 4); // encrypt if (crypto != null) block = crypto.encrypt(block); byte[] full = new byte[block.length + 4]; System.arraycopy(packet_length_array, 0, full, 0, 4); System.arraycopy(block, 0, full, 4, block.length); return full; }