Class: HrrRbSsh::Transport::Sender
- Inherits:
-
Object
- Object
- HrrRbSsh::Transport::Sender
show all
- Includes:
- Loggable
- Defined in:
- lib/hrr_rb_ssh/transport/sender.rb
Instance Attribute Summary
Attributes included from Loggable
#log_key, #logger
Instance Method Summary
collapse
Methods included from Loggable
#log_debug, #log_error, #log_fatal, #log_info, #log_warn
Constructor Details
#initialize(logger: nil) ⇒ Sender
Returns a new instance of Sender.
11
12
13
|
# File 'lib/hrr_rb_ssh/transport/sender.rb', line 11
def initialize logger: nil
self.logger = logger
end
|
Instance Method Details
#encrypt(transport, packet) ⇒ Object
33
34
35
36
37
|
# 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) ⇒ Object
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
# 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) ⇒ Object
49
50
51
52
53
54
55
56
|
# 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) ⇒ Object
44
45
46
47
|
# 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) ⇒ Object
39
40
41
42
|
# 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
|