comparison roundup/password.py @ 4683:2f66d44616ad

windows: Fix failing password tests due to missing crypt module
author anatoly techtonik <techtonik@gmail.com>
date Wed, 28 Nov 2012 02:56:33 +0300
parents 6e3e4f24c753
children efdce3d32698
comparison
equal deleted inserted replaced
4682:0c2cad65ebba 4683:2f66d44616ad
43 """decode using variant of base64""" 43 """decode using variant of base64"""
44 off = len(data) % 4 44 off = len(data) % 4
45 if off == 0: 45 if off == 0:
46 return b64decode(data, "./") 46 return b64decode(data, "./")
47 elif off == 1: 47 elif off == 1:
48 raise ValueError("invalid bas64 input") 48 raise ValueError("Invalid base64 input")
49 elif off == 2: 49 elif off == 2:
50 return b64decode(data + "==", "./") 50 return b64decode(data + "==", "./")
51 else: 51 else:
52 return b64decode(data + "=", "./") 52 return b64decode(data + "=", "./")
53 53
160 salt = random.choice(saltchars) + random.choice(saltchars) 160 salt = random.choice(saltchars) + random.choice(saltchars)
161 s = crypt.crypt(plaintext, salt) 161 s = crypt.crypt(plaintext, salt)
162 elif scheme == 'plaintext': 162 elif scheme == 'plaintext':
163 s = plaintext 163 s = plaintext
164 else: 164 else:
165 raise PasswordValueError, 'unknown encryption scheme %r'%scheme 165 raise PasswordValueError, 'Unknown encryption scheme %r'%scheme
166 return s 166 return s
167 167
168 def generatePassword(length=8): 168 def generatePassword(length=8):
169 chars = string.letters+string.digits 169 chars = string.letters+string.digits
170 return ''.join([random.choice(chars) for x in range(length)]) 170 return ''.join([random.choice(chars) for x in range(length)])
273 self.plaintext = None 273 self.plaintext = None
274 else: 274 else:
275 # currently plaintext - encrypt 275 # currently plaintext - encrypt
276 self.setPassword(encrypted, scheme, config=config) 276 self.setPassword(encrypted, scheme, config=config)
277 if strict and self.scheme not in self.known_schemes: 277 if strict and self.scheme not in self.known_schemes:
278 raise PasswordValueError, "unknown encryption scheme: %r" % (self.scheme,) 278 raise PasswordValueError, "Unknown encryption scheme: %r" % (self.scheme,)
279 279
280 def setPassword(self, plaintext, scheme=None, config=None): 280 def setPassword(self, plaintext, scheme=None, config=None):
281 """Sets encrypts plaintext.""" 281 """Sets encrypts plaintext."""
282 if scheme is None: 282 if scheme is None:
283 scheme = self.default_scheme 283 scheme = self.default_scheme
305 assert p != 'not sekrit' 305 assert p != 'not sekrit'
306 assert 'sekrit' == p 306 assert 'sekrit' == p
307 assert 'not sekrit' != p 307 assert 'not sekrit' != p
308 308
309 # crypt 309 # crypt
310 p = Password('sekrit', 'crypt') 310 if crypt: # not available on Windows
311 assert p == 'sekrit' 311 p = Password('sekrit', 'crypt')
312 assert p != 'not sekrit' 312 assert p == 'sekrit'
313 assert 'sekrit' == p 313 assert p != 'not sekrit'
314 assert 'not sekrit' != p 314 assert 'sekrit' == p
315 assert 'not sekrit' != p
315 316
316 # PBKDF2 - low level function 317 # PBKDF2 - low level function
317 from binascii import unhexlify 318 from binascii import unhexlify
318 k = pbkdf2("password", "ATHENA.MIT.EDUraeburn", 1200, 32) 319 k = pbkdf2("password", "ATHENA.MIT.EDUraeburn", 1200, 32)
319 assert k == unhexlify("5c08eb61fdf71e4e4ec3cf6ba1f5512ba7e52ddbc5e5142f708a31e2e62b1e13") 320 assert k == unhexlify("5c08eb61fdf71e4e4ec3cf6ba1f5512ba7e52ddbc5e5142f708a31e2e62b1e13")

Roundup Issue Tracker: http://roundup-tracker.org/