| 
									
										
										
										
											1995-06-21 00:55:59 +00:00
										 |  |  | class Security: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	def __init__(self): | 
					
						
							|  |  |  | 		import os | 
					
						
							|  |  |  | 		env = os.environ | 
					
						
							|  |  |  | 		if env.has_key('PYTHON_KEYFILE'): | 
					
						
							|  |  |  | 			keyfile = env['PYTHON_KEYFILE'] | 
					
						
							|  |  |  | 		else: | 
					
						
							|  |  |  | 			keyfile = '.python_keyfile' | 
					
						
							| 
									
										
										
										
											1995-06-21 02:08:55 +00:00
										 |  |  | 			if env.has_key('HOME'): | 
					
						
							|  |  |  | 				keyfile = os.path.join(env['HOME'], keyfile) | 
					
						
							| 
									
										
										
										
											1995-10-07 19:35:07 +00:00
										 |  |  | 			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 | 
					
						
							| 
									
										
										
										
											1995-06-21 00:55:59 +00:00
										 |  |  | 		try: | 
					
						
							|  |  |  | 			self._key = eval(open(keyfile).readline()) | 
					
						
							|  |  |  | 		except IOError: | 
					
						
							| 
									
										
										
										
											1995-10-07 19:35:07 +00:00
										 |  |  | 			raise IOError, "python keyfile %s: cannot open" % keyfile | 
					
						
							| 
									
										
										
										
											1995-06-21 00:55:59 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	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 | 
					
						
							| 
									
										
										
										
											1995-06-21 02:08:55 +00:00
										 |  |  | 		return pow(long(challenge), p, m) |