blob: ffdbe2d6d4cf8e485a723e7f922ac1010b0c420b [file] [log] [blame]
Guido van Rossum37a29111995-06-21 00:55:59 +00001class Security:
2
Tim Peterse6ddc8b2004-07-18 05:56:09 +00003 def __init__(self):
4 import os
5 env = os.environ
Collin Winter6f2df4d2007-07-17 20:59:35 +00006 if 'PYTHON_KEYFILE' in env:
Tim Peterse6ddc8b2004-07-18 05:56:09 +00007 keyfile = env['PYTHON_KEYFILE']
8 else:
9 keyfile = '.python_keyfile'
Collin Winter6f2df4d2007-07-17 20:59:35 +000010 if 'HOME' in env:
Tim Peterse6ddc8b2004-07-18 05:56:09 +000011 keyfile = os.path.join(env['HOME'], keyfile)
12 if not os.path.exists(keyfile):
13 import sys
14 for dir in sys.path:
15 kf = os.path.join(dir, keyfile)
16 if os.path.exists(kf):
17 keyfile = kf
18 break
19 try:
20 self._key = eval(open(keyfile).readline())
21 except IOError:
Collin Winter6f2df4d2007-07-17 20:59:35 +000022 raise IOError("python keyfile %s: cannot open" % keyfile)
Guido van Rossum37a29111995-06-21 00:55:59 +000023
Tim Peterse6ddc8b2004-07-18 05:56:09 +000024 def _generate_challenge(self):
25 import random
26 return random.randint(100, 100000)
Guido van Rossum37a29111995-06-21 00:55:59 +000027
Tim Peterse6ddc8b2004-07-18 05:56:09 +000028 def _compare_challenge_response(self, challenge, response):
29 return self._encode_challenge(challenge) == response
Guido van Rossum37a29111995-06-21 00:55:59 +000030
Tim Peterse6ddc8b2004-07-18 05:56:09 +000031 def _encode_challenge(self, challenge):
32 p, m = self._key
Collin Winter6f2df4d2007-07-17 20:59:35 +000033 return pow(int(challenge), p, m)