class OpenID::Consumer::DiffieHellmanSession

A superclass for implementing Diffie-Hellman association sessions.

Attributes

allowed_assoc_types[R]
hashfunc[R]
secret_size[R]
session_type[R]

Public Class Methods

new(dh=nil) click to toggle source
# File lib/openid/consumer/associationmanager.rb, line 18
def initialize(dh=nil)
  if dh.nil?
    dh = DiffieHellman.from_defaults
  end
  @dh = dh
end

Public Instance Methods

extract_secret(response) click to toggle source

Process the response from a successful association request and return the shared secret for this association

# File lib/openid/consumer/associationmanager.rb, line 39
def extract_secret(response)
  dh_server_public64 = response.get_arg(OPENID_NS, 'dh_server_public',
                                        NO_DEFAULT)
  enc_mac_key64 = response.get_arg(OPENID_NS, 'enc_mac_key', NO_DEFAULT)
  dh_server_public = CryptUtil.base64_to_num(dh_server_public64)
  enc_mac_key = Util.from_base64(enc_mac_key64)
  return @dh.xor_secret(self.class.hashfunc,
                        dh_server_public, enc_mac_key)
end
get_request() click to toggle source

Return the query parameters for requesting an association using this Diffie-Hellman association session

# File lib/openid/consumer/associationmanager.rb, line 27
def get_request
  args = {'dh_consumer_public' => CryptUtil.num_to_base64(@dh.public)}
  if (!@dh.using_default_values?)
    args['dh_modulus'] = CryptUtil.num_to_base64(@dh.modulus)
    args['dh_gen'] = CryptUtil.num_to_base64(@dh.generator)
  end

  return args
end