Class: Cul::Handles::DH

Inherits:
Object
  • Object
show all
Includes:
Hdl
Defined in:
lib/cul/handles/session_request.rb

Constant Summary

Constants included from Hdl

Hdl::ENV_FLAG_COMPRESSED, Hdl::ENV_FLAG_ENCRYPTED, Hdl::ENV_FLAG_TRUNCATED, Hdl::INDEX_ADMIN_HANDLE, Hdl::INDEX_AUTH, Hdl::INDEX_MAINTAINER_HANDLE, Hdl::MSG_FLAG_AUTH, Hdl::MSG_FLAG_AUTH_INDEX, Hdl::MSG_FLAG_CACR, Hdl::MSG_FLAG_CACR_INDEX, Hdl::MSG_FLAG_CERT, Hdl::MSG_FLAG_CERT_INDEX, Hdl::MSG_FLAG_CONT, Hdl::MSG_FLAG_CONT_INDEX, Hdl::MSG_FLAG_ENCR, Hdl::MSG_FLAG_ENCR_INDEX, Hdl::MSG_FLAG_KPAL, Hdl::MSG_FLAG_KPAL_INDEX, Hdl::MSG_FLAG_PUBL, Hdl::MSG_FLAG_PUBL_INDEX, Hdl::MSG_FLAG_RECU, Hdl::MSG_FLAG_RECU_INDEX, Hdl::MSG_FLAG_RRDG, Hdl::MSG_FLAG_RRDG_INDEX, Hdl::OC_ADD_VALUE, Hdl::OC_CHALLENGE_RESPONSE, Hdl::OC_CREATE_HANDLE, Hdl::OC_DELETE_HANDLE, Hdl::OC_GET_SITEINFO, Hdl::OC_LIST_HANDLE, Hdl::OC_LIST_NA, Hdl::OC_MODIFY_VALUE, Hdl::OC_REMOVE_VALUE, Hdl::OC_RESERVED, Hdl::OC_RESOLUTION, Hdl::OC_SESSION_EXCHANGEKEY, Hdl::OC_SESSION_SETUP, Hdl::OC_SESSION_TERMINATE, Hdl::OC_VERIFY_RESPONSE, Hdl::PERM_ADD_ADMIN, Hdl::PERM_ADD_HANDLE, Hdl::PERM_ADD_NA, Hdl::PERM_ADD_VALUE, Hdl::PERM_ALL, Hdl::PERM_DELETE_HANDLE, Hdl::PERM_DELETE_NA, Hdl::PERM_LIST_HDLS, Hdl::PERM_MODIFY_ADMIN, Hdl::PERM_MODIFY_VALUE, Hdl::PERM_READ_VALUE, Hdl::PERM_REMOVE_ADMIN, Hdl::PERM_REMOVE_VALUE, Hdl::RC_ACCESS_DENIED, Hdl::RC_AUTHEN_FAILED, Hdl::RC_AUTHEN_NEEDED, Hdl::RC_AUTHEN_TIMEOUT, Hdl::RC_ERROR, Hdl::RC_EXPIRED_SITE_INFO, Hdl::RC_FORWARDED, Hdl::RC_HANDLE_ALREADY_EXIST, Hdl::RC_HANDLE_NOT_FOUND, Hdl::RC_INVALID_CREDENTIAL, Hdl::RC_INVALID_HANDLE, Hdl::RC_NA_DELEGATE, Hdl::RC_NOT_AUTHORIZED, Hdl::RC_NO_SESSION_KEY, Hdl::RC_OPERATION_DENIED, Hdl::RC_PROTOCOL_ERROR, Hdl::RC_QUEUED, Hdl::RC_RECUR_LIMIT_EXCEEDED, Hdl::RC_RESERVED, Hdl::RC_SERVER_BUSY, Hdl::RC_SERVER_NOT_RESP, Hdl::RC_SERVICE_REFERRAL, Hdl::RC_SESSION_FAILED, Hdl::RC_SESSION_KEY_INVALID, Hdl::RC_SESSION_NO_SUPPORT, Hdl::RC_SESSION_TIMEOUT, Hdl::RC_SUCCESS, Hdl::RC_TRYING, Hdl::RC_UNABLE_TO_AUTHEN, Hdl::RC_VALUE_ALREADY_EXIST, Hdl::RC_VALUE_INVALID, Hdl::RC_VALUE_NOT_FOUND

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Hdl

#asBytes, #calculateValueLen, #convert16t8, #decodeAdminData, #encodeAdminData, #fromBytes, #readByteArray, #readIntArray, #readProtocolString, #toProtocolString

Constructor Details

#initialize(prime, generator, maxrand) ⇒ DH

Returns a new instance of DH.



89
90
91
92
93
94
95
96
# File 'lib/cul/handles/session_request.rb', line 89

def initialize(prime, generator, maxrand)
  @prime = prime
  @generator = generator
  @maxrand = maxrand
  @publickey = 0 #public key
  @key = 0 #shared secret
  @private = 0 #private key
end

Instance Attribute Details

#generatorObject (readonly)

Returns the value of attribute generator.



72
73
74
# File 'lib/cul/handles/session_request.rb', line 72

def generator
  @generator
end

#maxrandObject (readonly)

Returns the value of attribute maxrand.



72
73
74
# File 'lib/cul/handles/session_request.rb', line 72

def maxrand
  @maxrand
end

#primeObject (readonly)

Returns the value of attribute prime.



72
73
74
# File 'lib/cul/handles/session_request.rb', line 72

def prime
  @prime
end

#publickeyObject (readonly)

Returns the value of attribute publickey.



72
73
74
# File 'lib/cul/handles/session_request.rb', line 72

def publickey
  @publickey
end

Class Method Details

.mod_exp(start, e, m) ⇒ Object

def DH.miller_rabin(a, n)

end
def DH.prime

end


79
80
81
82
83
84
85
86
87
88
# File 'lib/cul/handles/session_request.rb', line 79

def DH.mod_exp start, e, m
  result = 1
  b = start
  while e > 0
    result = (result * b) % m if e[0] == 1
    e = e >> 1
    b = (b*b) %m
  end
  return result
end

Instance Method Details

#encodeKeyParmsObject



111
112
113
114
115
116
117
118
119
120
121
122
123
# File 'lib/cul/handles/session_request.rb', line 111

def encodeKeyParms
  result = []
  publicBytes = asBytes(@publickey)
  result.concat(asBytes(publicBytes.length))
  result.concat(publicBytes)
  primeBytes = asBytes(@prime)
  result.concat(asBytes(primeBytes.length))
  result.concat(primeBytes)
  genBytes = asBytes(@generator)
  result.concat(asBytes(genBytes.length))
  result.concat(genBytes)
  result
end

#generate(tries = 16) ⇒ Object

shared key



97
98
99
100
101
102
103
# File 'lib/cul/handles/session_request.rb', line 97

def generate tries=16 # shared key
  tries.times do
    @private = rand(@maxrand)
    @publickey = DH.mod_exp(@generator, @private, @prime)
    return @publickey if self.valid?
  end
end

#secret(f) ⇒ Object

private key



104
105
106
107
# File 'lib/cul/handles/session_request.rb', line 104

def secret f # private key
  @key = DH.mod_exp(f,@private,@prime)
  @key
end

#valid?(_e = self.publickey) ⇒ Boolean

Returns:

  • (Boolean)


108
109
110
# File 'lib/cul/handles/session_request.rb', line 108

def valid? _e = self.publickey
  _e and _e.between?(2,self.prime-2) and _e != 0
end