class CryptoToolbox::Oracles::PaddingOracle::TcpOracle

Public Class Methods

new() click to toggle source
# File lib/crypto-toolbox/oracles/padding_oracle/tcp_oracle.rb, line 6
def initialize
  require "socket"

  @hostname  = '54.165.60.84'
  @port      = 80
  @socket    = nil
end

Public Instance Methods

connect() click to toggle source
# File lib/crypto-toolbox/oracles/padding_oracle/tcp_oracle.rb, line 13
def connect
  @socket = TCPSocket.open(@hostname,@port)
end
disconnect() click to toggle source
# File lib/crypto-toolbox/oracles/padding_oracle/tcp_oracle.rb, line 17
def disconnect
  if @socket
    @socket.close
  end
end
valid_padding?(input,block_amount) click to toggle source
# File lib/crypto-toolbox/oracles/padding_oracle/tcp_oracle.rb, line 23
def valid_padding?(input,block_amount)
  ! send_msg(input, block_amount).zero?
end

Private Instance Methods

connected?() click to toggle source
# File lib/crypto-toolbox/oracles/padding_oracle/tcp_oracle.rb, line 36
def connected?
  !!@socket
end
send_msg(input,block_amount) click to toggle source
# File lib/crypto-toolbox/oracles/padding_oracle/tcp_oracle.rb, line 28
def send_msg(input,block_amount)
  connect unless connected?

  msg = ([block_amount] + input + [0]).map(&:chr).join
  sleep 0.01
  @socket.write(msg)
  @socket.read(2).to_i
end