class Net::NTLM::ChannelBinding
Attributes
acceptor_address_length[R]
acceptor_addrtype[R]
channel[R]
initiator_address_length[R]
initiator_addtype[R]
unique_prefix[R]
Public Class Methods
create(outer_channel)
click to toggle source
Creates a ChannelBinding used for Extended Protection Authentication @see blogs.msdn.com/b/openspecification/archive/2013/03/26/ntlm-and-channel-binding-hash-aka-exteneded-protection-for-authentication.aspx
@param outer_channel [OpenSSL::X509::Certificate] Server certificate securing
the outer TLS channel
@return [NTLM::ChannelBinding] A ChannelBinding holding a token that can be
embedded in a {Type3} message
# File lib/net/ntlm/channel_binding.rb, line 12 def self.create(outer_channel) new(outer_channel) end
new(outer_channel)
click to toggle source
@param outer_channel [OpenSSL::X509::Certificate] Server certificate securing
the outer TLS channel
# File lib/net/ntlm/channel_binding.rb, line 18 def initialize(outer_channel) @channel = outer_channel @unique_prefix = 'tls-server-end-point' @initiator_addtype = 0 @initiator_address_length = 0 @acceptor_addrtype = 0 @acceptor_address_length = 0 end
Public Instance Methods
application_data()
click to toggle source
# File lib/net/ntlm/channel_binding.rb, line 55 def application_data @application_data ||= begin data = unique_prefix data << ':' data << channel_hash.digest data end end
channel_binding_token()
click to toggle source
Returns a channel binding hash acceptable for use as a AV_PAIR MsvAvChannelBindings
field value as specified in the NTLM protocol
@return [String] MD5 hash of #gss_channel_bindings_struct
# File lib/net/ntlm/channel_binding.rb, line 35 def channel_binding_token @channel_binding_token ||= OpenSSL::Digest::MD5.new(gss_channel_bindings_struct).digest end
channel_hash()
click to toggle source
# File lib/net/ntlm/channel_binding.rb, line 51 def channel_hash @channel_hash ||= OpenSSL::Digest::SHA256.new(channel.to_der) end
gss_channel_bindings_struct()
click to toggle source
# File lib/net/ntlm/channel_binding.rb, line 39 def gss_channel_bindings_struct @gss_channel_bindings_struct ||= begin token = [initiator_addtype].pack('I') token << [initiator_address_length].pack('I') token << [acceptor_addrtype].pack('I') token << [acceptor_address_length].pack('I') token << [application_data.length].pack('I') token << application_data token end end