class CryptoToolchain::DiffieHellman::MITM
Attributes
peer_a[R]
peer_b[R]
Public Class Methods
new(debug: false, name: "MITM", p: NIST_P, g: NIST_G, peer_a: , peer_b: , pubkey: nil)
click to toggle source
Calls superclass method
# File lib/crypto_toolchain/diffie_hellman/mitm.rb, line 5 def initialize(debug: false, name: "MITM", p: NIST_P, g: NIST_G, peer_a: , peer_b: , pubkey: nil) @peer_a = peer_a @peer_b = peer_b @pubkey = pubkey super(debug: debug, name: name, p: p, g: g) [peer_a, peer_b].each do |peer| puts "Adding #{peer.name} to #{name} at startup" if debug add_address(peer) end end
Public Instance Methods
datum_response(msg)
click to toggle source
# File lib/crypto_toolchain/diffie_hellman/mitm.rb, line 36 def datum_response(msg) data = msg.decrypt(key: info_for(msg.peer).session_key) puts "#{name} got message containing #{data} from #{msg.peer.name}" if debug other = other_peer(msg.peer) encrypted = encrypted_message_for(other, message: data, initial: msg.initial) send_msg(other, encrypted) @received_messages << ReceivedMessage.new(from: msg.peer.name, contents: data) end
do_key_exchange()
click to toggle source
# File lib/crypto_toolchain/diffie_hellman/mitm.rb, line 20 def do_key_exchange msg = Messages::KeyExchange.new(peer: self, pubkey: pubkey, p: p, g: g, initial: true) [peer_a, peer_b].each do |peer| info_for(peer).update(p: p, g: g) send_msg(peer, msg) end end
key_exchange_response(msg)
click to toggle source
# File lib/crypto_toolchain/diffie_hellman/mitm.rb, line 28 def key_exchange_response(msg) info = info_for(msg.peer) info.update(pubkey: msg.pubkey) secret_override = invalid_pubkey? ? 0 : nil info.set_shared_secret(privkey, override: secret_override) puts "#{name} generated secret #{info.shared_secret} for #{msg.peer.name}" if debug end
other_peer(peer)
click to toggle source
# File lib/crypto_toolchain/diffie_hellman/mitm.rb, line 45 def other_peer(peer) peer == peer_a ? peer_b : peer_a end
peer_address_response(msg)
click to toggle source
# File lib/crypto_toolchain/diffie_hellman/mitm.rb, line 16 def peer_address_response(msg) send_msg other_peer(msg.peer), my_address_message(initial: msg.initial) end