282 """ |
282 """ |
283 # how long is the password? |
283 # how long is the password? |
284 self.passwordLength["count"] = len(password) |
284 self.passwordLength["count"] = len(password) |
285 self.recommendedPasswordLength["count"] = len(password) |
285 self.recommendedPasswordLength["count"] = len(password) |
286 |
286 |
287 # Loop through password to check for Symbol, Numeric, Lowercase |
287 # Loop through password to check for Symbol, Numeric, Lowercase |
288 # and Uppercase pattern matches |
288 # and Uppercase pattern matches |
289 for index in range(len(password)): |
289 for index in range(len(password)): |
290 if self.uppercaseRe.match(password[index]): |
290 if self.uppercaseRe.match(password[index]): |
291 self.uppercaseLetters["count"] += 1 |
291 self.uppercaseLetters["count"] += 1 |
292 elif self.lowercaseRe.match(password[index]): |
292 elif self.lowercaseRe.match(password[index]): |
309 for index2 in range(index1 + 1, len(password)): |
309 for index2 in range(index1 + 1, len(password)): |
310 if password[index1] == password[index2]: |
310 if password[index1] == password[index2]: |
311 found = True |
311 found = True |
312 break |
312 break |
313 if not found: |
313 if not found: |
314 uniqueCharacters.append(password[index1] ) |
314 uniqueCharacters.append(password[index1]) |
315 |
315 |
316 # calculate a redundancy number |
316 # calculate a redundancy number |
317 self.redundancy["value"] = len(password) / len(uniqueCharacters) |
317 self.redundancy["value"] = len(password) / len(uniqueCharacters) |
318 |
318 |
319 # Check for sequential alpha string patterns (forward and reverse) but only, |
319 # Check for sequential alpha string patterns (forward and reverse) but only, |
320 # if the string has already a length to check for, does not make sense to check |
320 # if the string has already a length to check for, does not make sense to check |
321 # the password "ab" for the sequential data "abc" |
321 # the password "ab" for the sequential data "abc" |
322 lowercasedPassword = password.lower(); |
322 lowercasedPassword = password.lower() |
323 |
323 |
324 if self.passwordLength["count"] >= self.sequentialLetters["length"]: |
324 if self.passwordLength["count"] >= self.sequentialLetters["length"]: |
325 for index in range(len(self.sequentialLetters["data"]) - \ |
325 for index in range(len(self.sequentialLetters["data"]) - \ |
326 self.sequentialLetters["length"] + 1): |
326 self.sequentialLetters["length"] + 1): |
327 fwd = self.sequentialLetters["data"][ |
327 fwd = self.sequentialLetters["data"][ |
346 |
346 |
347 # Check common keyboard patterns |
347 # Check common keyboard patterns |
348 patternsMatched = [] |
348 patternsMatched = [] |
349 if self.passwordLength["count"] >= self.keyboardPatterns["length"]: |
349 if self.passwordLength["count"] >= self.keyboardPatterns["length"]: |
350 for pattern in self.keyboardPatterns["data"]: |
350 for pattern in self.keyboardPatterns["data"]: |
351 for index in range(len(pattern)- self.keyboardPatterns["length"] + 1): |
351 for index in range(len(pattern) - self.keyboardPatterns["length"] + 1): |
352 fwd = pattern[index:index + self.keyboardPatterns["length"]] |
352 fwd = pattern[index:index + self.keyboardPatterns["length"]] |
353 rev = self.__strReverse(fwd) |
353 rev = self.__strReverse(fwd) |
354 if lowercasedPassword.find(fwd) != -1: |
354 if lowercasedPassword.find(fwd) != -1: |
355 if fwd not in patternsMatched: |
355 if fwd not in patternsMatched: |
356 self.keyboardPatterns["count"] += 1 |
356 self.keyboardPatterns["count"] += 1 |
392 else: |
392 else: |
393 self.passwordLength["rating"] = self.passwordLength["penalty"] |
393 self.passwordLength["rating"] = self.passwordLength["penalty"] |
394 self.score["count"] += self.passwordLength["rating"] |
394 self.score["count"] += self.passwordLength["rating"] |
395 |
395 |
396 # recommendedPasswordLength |
396 # recommendedPasswordLength |
397 # Credit reaching the recommended password length or put a |
397 # Credit reaching the recommended password length or put a |
398 # penalty on it |
398 # penalty on it |
399 if self.passwordLength["count"] >= self.recommendedPasswordLength["minimum"]: |
399 if self.passwordLength["count"] >= self.recommendedPasswordLength["minimum"]: |
400 self.recommendedPasswordLength["rating"] = \ |
400 self.recommendedPasswordLength["rating"] = \ |
401 self.recommendedPasswordLength["bonus"] + \ |
401 self.recommendedPasswordLength["bonus"] + \ |
402 (self.passwordLength["count"] - \ |
402 (self.passwordLength["count"] - \ |