class HrrRbSsh::Transport::Sender
Public Class Methods
new(logger: nil)
click to toggle source
# File lib/hrr_rb_ssh/transport/sender.rb, line 11 def initialize logger: nil self.logger = logger end
Public Instance Methods
encrypt(transport, packet)
click to toggle source
# File lib/hrr_rb_ssh/transport/sender.rb, line 33 def encrypt transport, packet encrypted_packet = transport.outgoing_encryption_algorithm.encrypt packet encrypted_packet end
packetize(transport, payload)
click to toggle source
# File lib/hrr_rb_ssh/transport/sender.rb, line 15 def packetize transport, payload packet_length_field_length = 4 padding_length_field_length = 1 minimum_padding_length = 4 minimum_block_size = 8 block_size = [transport.outgoing_encryption_algorithm.block_size, minimum_block_size].max deflated_payload = transport.outgoing_compression_algorithm.deflate payload tmp_total_length = packet_length_field_length + padding_length_field_length + deflated_payload.length + minimum_padding_length total_length = tmp_total_length + (block_size - (tmp_total_length % block_size)) packet_length = total_length - packet_length_field_length padding_length = packet_length - padding_length_field_length - deflated_payload.length padding = OpenSSL::Random.random_bytes( padding_length ) packet = [packet_length, padding_length].pack("NC") + deflated_payload + padding packet end
send(transport, payload)
click to toggle source
# File lib/hrr_rb_ssh/transport/sender.rb, line 49 def send transport, payload packet = packetize transport, payload send_packet transport, packet send_mac transport, packet transport.outgoing_sequence_number.increment end
send_mac(transport, packet)
click to toggle source
# File lib/hrr_rb_ssh/transport/sender.rb, line 44 def send_mac transport, packet mac = transport.outgoing_mac_algorithm.compute transport.outgoing_sequence_number.sequence_number, packet transport.io.write mac end
send_packet(transport, packet)
click to toggle source
# File lib/hrr_rb_ssh/transport/sender.rb, line 39 def send_packet transport, packet encrypted_packet = encrypt transport, packet transport.io.write encrypted_packet end