class NTLM::Message::Challenge

MS-NLMP

2.2.1.2

Constants

ATTRIBUTES
DEFAULT_FLAGS
TYPE

Public Instance Methods

parse(string) click to toggle source
Calls superclass method NTLM::Message.parse
# File lib/ntlm/message.rb, line 258
def parse(string)
  super
  target_name, @flag, @challenge, target_info, version = string.unpack('x12a8Va8x8a8a8')
  @target_name = fetch_payload(target_name) if has_flag?(:REQUEST_TARGET)
  @target_info = fetch_payload(target_info) if has_flag?(:NEGOTIATE_TARGET_INFO)
  @version     = decode_version(version)  if has_flag?(:NEGOTIATE_VERSION)

  @target_name &&= decode_utf16(@target_name) if unicode?
  @target_info &&= decode_av_pair(@target_info)

  self
end
serialize() click to toggle source
# File lib/ntlm/message.rb, line 271
def serialize
  @buffer = ''
  @offset = 56  # (8 + 4) + 8 + 4 + (8 * 4)

  @challenge ||= OpenSSL::Random.random_bytes(8)

  if @target_name
    set(:REQUEST_TARGET)
    if unicode?
      target_name = append_payload(encode_utf16(@target_name))
    else
      target_name = append_payload(@target_name)
    end
  end

  if @target_info
    set(:NEGOTIATE_TARGET_INFO)
    target_info = append_payload(encode_av_pair(@target_info))
  end

  if @version
    set(:NEGOTIATE_VERSION)
    version = encode_version(@version)
  end

  [SSP_SIGNATURE, TYPE, target_name, @flag, @challenge, target_info, version].pack('a8Va8Va8x8a8a8') + @buffer
end