# File lib/net/ssh/transport/packet_stream.rb, line 118
118:     def enqueue_packet(payload)
119:       # try to compress the packet
120:       payload = client.compress(payload)
121: 
122:       # the length of the packet, minus the padding
123:       actual_length = 4 + payload.length + 1
124: 
125:       # compute the padding length
126:       padding_length = client.block_size - (actual_length % client.block_size)
127:       padding_length += client.block_size if padding_length < 4
128: 
129:       # compute the packet length (sans the length field itself)
130:       packet_length = payload.length + padding_length + 1
131: 
132:       if packet_length < 16
133:         padding_length += client.block_size
134:         packet_length = payload.length + padding_length + 1
135:       end
136: 
137:       padding = Array.new(padding_length) { rand(256) }.pack("C*")
138: 
139:       unencrypted_data = [packet_length, padding_length, payload, padding].pack("NCA*A*")
140:       mac = client.hmac.digest([client.sequence_number, unencrypted_data].pack("NA*"))
141: 
142:       encrypted_data = client.update_cipher(unencrypted_data) << client.final_cipher
143:       message = encrypted_data + mac
144: 
145:       debug { "queueing packet nr #{client.sequence_number} type #{payload.getbyte(0)} len #{packet_length}" }
146:       enqueue(message)
147: 
148:       client.increment(packet_length)
149: 
150:       self
151:     end