Class: Cul::Handles::DH

Inherits:
Object
  • Object
show all
Includes:
Hdl
Defined in:
lib/cul/handles/dh.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.



22
23
24
25
26
27
28
29
# File 'lib/cul/handles/dh.rb', line 22

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.



5
6
7
# File 'lib/cul/handles/dh.rb', line 5

def generator
  @generator
end

#maxrandObject (readonly)

Returns the value of attribute maxrand.



5
6
7
# File 'lib/cul/handles/dh.rb', line 5

def maxrand
  @maxrand
end

#primeObject (readonly)

Returns the value of attribute prime.



5
6
7
# File 'lib/cul/handles/dh.rb', line 5

def prime
  @prime
end

#publickeyObject (readonly)

Returns the value of attribute publickey.



5
6
7
# File 'lib/cul/handles/dh.rb', line 5

def publickey
  @publickey
end

Class Method Details

.mod_exp(start, e, m) ⇒ Object

def DH.miller_rabin(a, n)

end
def DH.prime

end


12
13
14
15
16
17
18
19
20
21
# File 'lib/cul/handles/dh.rb', line 12

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



44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/cul/handles/dh.rb', line 44

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



30
31
32
33
34
35
36
# File 'lib/cul/handles/dh.rb', line 30

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



37
38
39
40
# File 'lib/cul/handles/dh.rb', line 37

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

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

Returns:

  • (Boolean)


41
42
43
# File 'lib/cul/handles/dh.rb', line 41

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