class Security: | |
def __init__(self): | |
import os | |
env = os.environ | |
if env.has_key('PYTHON_KEYFILE'): | |
keyfile = env['PYTHON_KEYFILE'] | |
else: | |
keyfile = '.python_keyfile' | |
if env.has_key('HOME'): | |
keyfile = os.path.join(env['HOME'], keyfile) | |
if not os.path.exists(keyfile): | |
import sys | |
for dir in sys.path: | |
kf = os.path.join(dir, keyfile) | |
if os.path.exists(kf): | |
keyfile = kf | |
break | |
try: | |
self._key = eval(open(keyfile).readline()) | |
except IOError: | |
raise IOError, "python keyfile %s: cannot open" % keyfile | |
def _generate_challenge(self): | |
import whrandom | |
return whrandom.randint(100, 100000) | |
def _compare_challenge_response(self, challenge, response): | |
return self._encode_challenge(challenge) == response | |
def _encode_challenge(self, challenge): | |
p, m = self._key | |
return pow(long(challenge), p, m) |