Class: HrrRbSsh::Transport::Sender
- Inherits:
-
Object
- Object
- HrrRbSsh::Transport::Sender
- Defined in:
- lib/hrr_rb_ssh/transport/sender.rb
Instance Method Summary collapse
- #encrypt(transport, packet) ⇒ Object
-
#initialize ⇒ Sender
constructor
A new instance of Sender.
- #packetize(transport, payload) ⇒ Object
- #send(transport, payload) ⇒ Object
- #send_mac(transport, packet) ⇒ Object
- #send_packet(transport, packet) ⇒ Object
Constructor Details
Instance Method Details
#encrypt(transport, packet) ⇒ Object
31 32 33 34 35 |
# File 'lib/hrr_rb_ssh/transport/sender.rb', line 31 def encrypt transport, packet encrypted_packet = transport.outgoing_encryption_algorithm.encrypt packet encrypted_packet end |
#packetize(transport, payload) ⇒ Object
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/hrr_rb_ssh/transport/sender.rb', line 13 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) ⇒ Object
47 48 49 50 51 52 53 54 |
# File 'lib/hrr_rb_ssh/transport/sender.rb', line 47 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) ⇒ Object
42 43 44 45 |
# File 'lib/hrr_rb_ssh/transport/sender.rb', line 42 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) ⇒ Object
37 38 39 40 |
# File 'lib/hrr_rb_ssh/transport/sender.rb', line 37 def send_packet transport, packet encrypted_packet = encrypt transport, packet transport.io.write encrypted_packet end |