Class: Net::NTLM::Message::Type2

### Home Classes Methods

### In Files

- lib/net/ntlm.rb
- lib/net/ntlm_http.rb

### Parent

Object

### Methods

- ::parse
- #parse
- #response

### Files

- README

### Class/Module Index

Quicksearch

- Net
- Net::HTTP
- Net::HTTPHeader
- Net::HTTPRequest
- Net::NTLM
- Net::NTLM::Field
- Net::NTLM::FieldSet
- Net::NTLM::Int16LE
- Net::NTLM::Int32LE
- Net::NTLM::Int64LE
- Net::NTLM::Message
- Net::NTLM::Message::Type1
- Net::NTLM::Message::Type2
- Net::NTLM::Message::Type3
- Net::NTLM::SecurityBuffer
- Net::NTLM::String

No matching classes.

# Net::NTLM::Message::Type2

### Public Class Methods

parse(str) click to toggle source

    # File lib/net/ntlm.rb, line 647
    def parse(str)
      t = new
      t.parse(str)
      t
    end

### Public Instance Methods

parse(str) click to toggle source

    # File lib/net/ntlm.rb, line 654
    def parse(str)
      super(str)
      if has_flag?(:TARGET_INFO)
        enable(:context)
        enable(:target_info)
        super(str)
      end
      if ( (len = data_edge - head_size) > 0)
        self.padding = "\00"" * len
        super(str)
      end
    end

response(arg, opt = {}) click to toggle source

    # File lib/net/ntlm.rb, line 667
    def response(arg, opt = {})
      usr = arg[:user]
      pwd = arg[:password]
      if usr.nil? or pwd.nil?
        raise ArgumentError, "user and password have to be supplied"
      end

      if opt[:workstation]
        ws = opt[:workstation]
      else
        ws = ""
      end

      if opt[:client_challenge]
        cc  = opt[:client_challenge]
      else
        cc = rand(MAX64)
      end
      cc = NTLM::pack_int64le(cc) if cc.is_a?(Integer)
      opt[:client_challenge] = cc

      if has_flag?(:OEM) and opt[:unicode]
        usr = NTLM::decode_utf16le(usr)
        pwd = NTLM::decode_utf16le(pwd)
        ws  = NTLM::decode_utf16le(ws)
        opt[:unicode] = false
      end

      if has_flag?(:UNICODE) and !opt[:unicode]
        usr = NTLM::encode_utf16le(usr)
        pwd = NTLM::encode_utf16le(pwd)
        ws  = NTLM::encode_utf16le(ws)
        opt[:unicode] = true
      end

      tgt = self.target_name
      ti = self.target_info

      chal = self[:challenge].serialize

      if opt[:ntlmv2]
        ar = {:ntlmv2_hash => NTLM::ntlmv2_hash(usr, pwd, tgt, opt), :challenge => chal, :target_info => ti}
        lm_res = NTLM::lmv2_response(ar, opt)
        ntlm_res = NTLM::ntlmv2_response(ar, opt)
      elsif has_flag?(:NTLM2_KEY)
        ar = {:ntlm_hash => NTLM::ntlm_hash(pwd, opt), :challenge => chal}
        lm_res, ntlm_res = NTLM::ntlm2_session(ar, opt)
      else
        lm_res = NTLM::lm_response(pwd, chal)
        ntlm_res = NTLM::ntlm_response(pwd, chal)
      end

      Type3.create({
            :lm_response => lm_res,
            :ntlm_response => ntlm_res,
            :domain => tgt,
        :user => usr,
        :workstation => ws,
        :flag => self.flag
      })
    end

[Validate]

Generated with the Darkfish Rdoc Generator 2.