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