325 # not make sense to check the password "ab" for the sequential data |
325 # not make sense to check the password "ab" for the sequential data |
326 # "abc" |
326 # "abc" |
327 lowercasedPassword = password.lower() |
327 lowercasedPassword = password.lower() |
328 |
328 |
329 if self.passwordLength["count"] >= self.sequentialLetters["length"]: |
329 if self.passwordLength["count"] >= self.sequentialLetters["length"]: |
330 for index in range(len(self.sequentialLetters["data"]) - \ |
330 for index in range(len(self.sequentialLetters["data"]) - |
331 self.sequentialLetters["length"] + 1): |
331 self.sequentialLetters["length"] + 1): |
332 fwd = self.sequentialLetters["data"][ |
332 fwd = self.sequentialLetters["data"][ |
333 index:index + self.sequentialLetters["length"]] |
333 index:index + self.sequentialLetters["length"]] |
334 rev = self.__strReverse(fwd) |
334 rev = self.__strReverse(fwd) |
335 if lowercasedPassword.find(fwd) != -1: |
335 if lowercasedPassword.find(fwd) != -1: |
337 if lowercasedPassword.find(rev) != -1: |
337 if lowercasedPassword.find(rev) != -1: |
338 self.sequentialLetters["count"] += 1 |
338 self.sequentialLetters["count"] += 1 |
339 |
339 |
340 # Check for sequential numeric string patterns (forward and reverse) |
340 # Check for sequential numeric string patterns (forward and reverse) |
341 if self.passwordLength["count"] >= self.sequentialNumerics["length"]: |
341 if self.passwordLength["count"] >= self.sequentialNumerics["length"]: |
342 for index in range(len(self.sequentialNumerics["data"]) - \ |
342 for index in range(len(self.sequentialNumerics["data"]) - |
343 self.sequentialNumerics["length"] + 1): |
343 self.sequentialNumerics["length"] + 1): |
344 fwd = self.sequentialNumerics["data"][ |
344 fwd = self.sequentialNumerics["data"][ |
345 index:index + self.sequentialNumerics["length"]] |
345 index:index + self.sequentialNumerics["length"]] |
346 rev = self.__strReverse(fwd) |
346 rev = self.__strReverse(fwd) |
347 if lowercasedPassword.find(fwd) != -1: |
347 if lowercasedPassword.find(fwd) != -1: |
353 patternsMatched = [] |
353 patternsMatched = [] |
354 if self.passwordLength["count"] >= self.keyboardPatterns["length"]: |
354 if self.passwordLength["count"] >= self.keyboardPatterns["length"]: |
355 for pattern in self.keyboardPatterns["data"]: |
355 for pattern in self.keyboardPatterns["data"]: |
356 for index in range( |
356 for index in range( |
357 len(pattern) - self.keyboardPatterns["length"] + 1): |
357 len(pattern) - self.keyboardPatterns["length"] + 1): |
358 fwd = pattern[index:index + |
358 fwd = pattern[index:index + |
359 self.keyboardPatterns["length"]] |
359 self.keyboardPatterns["length"]] |
360 rev = self.__strReverse(fwd) |
360 rev = self.__strReverse(fwd) |
361 if lowercasedPassword.find(fwd) != -1: |
361 if lowercasedPassword.find(fwd) != -1: |
362 if fwd not in patternsMatched: |
362 if fwd not in patternsMatched: |
363 self.keyboardPatterns["count"] += 1 |
363 self.keyboardPatterns["count"] += 1 |
367 self.keyboardPatterns["count"] += 1 |
367 self.keyboardPatterns["count"] += 1 |
368 patternsMatched.append(rev) |
368 patternsMatched.append(rev) |
369 |
369 |
370 # Try to find repeated sequences of characters. |
370 # Try to find repeated sequences of characters. |
371 if self.passwordLength["count"] >= self.repeatedSequences["length"]: |
371 if self.passwordLength["count"] >= self.repeatedSequences["length"]: |
372 for index in range(len(lowercasedPassword) - \ |
372 for index in range(len(lowercasedPassword) - |
373 self.repeatedSequences["length"] + 1): |
373 self.repeatedSequences["length"] + 1): |
374 fwd = lowercasedPassword[ |
374 fwd = lowercasedPassword[ |
375 index:index + self.repeatedSequences["length"]] |
375 index:index + self.repeatedSequences["length"]] |
376 if lowercasedPassword.find( |
376 if lowercasedPassword.find( |
377 fwd, index + self.repeatedSequences["length"]) != -1: |
377 fwd, index + self.repeatedSequences["length"]) != -1: |
378 self.repeatedSequences["count"] += 1 |
378 self.repeatedSequences["count"] += 1 |
379 |
379 |
380 # Try to find mirrored sequences of characters. |
380 # Try to find mirrored sequences of characters. |
381 if self.passwordLength["count"] >= self.mirroredSequences["length"]: |
381 if self.passwordLength["count"] >= self.mirroredSequences["length"]: |
382 for index in range(len(lowercasedPassword) - \ |
382 for index in range(len(lowercasedPassword) - |
383 self.mirroredSequences["length"] + 1): |
383 self.mirroredSequences["length"] + 1): |
384 fwd = lowercasedPassword[ |
384 fwd = lowercasedPassword[ |
385 index:index + self.mirroredSequences["length"]] |
385 index:index + self.mirroredSequences["length"]] |
386 rev = self.__strReverse(fwd) |
386 rev = self.__strReverse(fwd) |
387 if lowercasedPassword.find( |
387 if lowercasedPassword.find( |
395 # passwordLength |
395 # passwordLength |
396 # credit additional length or punish "under" length |
396 # credit additional length or punish "under" length |
397 if self.passwordLength["count"] >= self.passwordLength["minimum"]: |
397 if self.passwordLength["count"] >= self.passwordLength["minimum"]: |
398 # credit additional characters over minimum |
398 # credit additional characters over minimum |
399 self.passwordLength["rating"] = self.passwordLength["bonus"] + \ |
399 self.passwordLength["rating"] = self.passwordLength["bonus"] + \ |
400 (self.passwordLength["count"] - |
400 (self.passwordLength["count"] - |
401 self.passwordLength["minimum"]) * \ |
401 self.passwordLength["minimum"]) * \ |
402 self.passwordLength["factor"] |
402 self.passwordLength["factor"] |
403 else: |
403 else: |
404 self.passwordLength["rating"] = self.passwordLength["penalty"] |
404 self.passwordLength["rating"] = self.passwordLength["penalty"] |
405 self.score["count"] += self.passwordLength["rating"] |
405 self.score["count"] += self.passwordLength["rating"] |
409 # penalty on it |
409 # penalty on it |
410 if self.passwordLength["count"] >= \ |
410 if self.passwordLength["count"] >= \ |
411 self.recommendedPasswordLength["minimum"]: |
411 self.recommendedPasswordLength["minimum"]: |
412 self.recommendedPasswordLength["rating"] = \ |
412 self.recommendedPasswordLength["rating"] = \ |
413 self.recommendedPasswordLength["bonus"] + \ |
413 self.recommendedPasswordLength["bonus"] + \ |
414 (self.passwordLength["count"] - \ |
414 (self.passwordLength["count"] - |
415 self.recommendedPasswordLength["minimum"]) * \ |
415 self.recommendedPasswordLength["minimum"]) * \ |
416 self.recommendedPasswordLength["factor"] |
416 self.recommendedPasswordLength["factor"] |
417 else: |
417 else: |
418 self.recommendedPasswordLength["rating"] = \ |
418 self.recommendedPasswordLength["rating"] = \ |
419 self.recommendedPasswordLength["penalty"] |
419 self.recommendedPasswordLength["penalty"] |
550 # requirement met |
550 # requirement met |
551 self.basicRequirements["count"] += 1 |
551 self.basicRequirements["count"] += 1 |
552 |
552 |
553 # judge the requirement status |
553 # judge the requirement status |
554 self.basicRequirements["status"] = self.__determineStatus( |
554 self.basicRequirements["status"] = self.__determineStatus( |
555 self.basicRequirements["count"] - |
555 self.basicRequirements["count"] - |
556 self.basicRequirements["minimum"]) |
556 self.basicRequirements["minimum"]) |
557 if self.basicRequirements["status"] != self.Status_Failed: |
557 if self.basicRequirements["status"] != self.Status_Failed: |
558 self.basicRequirements["rating"] = \ |
558 self.basicRequirements["rating"] = \ |
559 self.basicRequirements["bonus"] + \ |
559 self.basicRequirements["bonus"] + \ |
560 self.basicRequirements["factor"] * \ |
560 self.basicRequirements["factor"] * \ |
564 self.basicRequirements["penalty"] |
564 self.basicRequirements["penalty"] |
565 self.score["count"] += self.basicRequirements["rating"] |
565 self.score["count"] += self.basicRequirements["rating"] |
566 |
566 |
567 # beyond basic requirements |
567 # beyond basic requirements |
568 self.recommendedPasswordLength["status"] = self.__determineStatus( |
568 self.recommendedPasswordLength["status"] = self.__determineStatus( |
569 self.recommendedPasswordLength["count"] - \ |
569 self.recommendedPasswordLength["count"] - |
570 self.recommendedPasswordLength["minimum"]) |
570 self.recommendedPasswordLength["minimum"]) |
571 self.middleNumerics["status"] = self.__determineStatus( |
571 self.middleNumerics["status"] = self.__determineStatus( |
572 self.middleNumerics["count"] - \ |
572 self.middleNumerics["count"] - |
573 self.middleNumerics["minimum"]) |
573 self.middleNumerics["minimum"]) |
574 self.middleSymbols["status"] = self.__determineStatus( |
574 self.middleSymbols["status"] = self.__determineStatus( |
575 self.middleSymbols["count"] - \ |
575 self.middleSymbols["count"] - |
576 self.middleSymbols["minimum"]) |
576 self.middleSymbols["minimum"]) |
577 self.sequentialLetters["status"] = self.__determineBinaryStatus( |
577 self.sequentialLetters["status"] = self.__determineBinaryStatus( |
578 self.sequentialLetters["count"]) |
578 self.sequentialLetters["count"]) |
579 self.sequentialNumerics["status"] = self.__determineBinaryStatus( |
579 self.sequentialNumerics["status"] = self.__determineBinaryStatus( |
580 self.sequentialNumerics["count"]) |
580 self.sequentialNumerics["count"]) |
581 self.keyboardPatterns["status"] = self.__determineBinaryStatus( |
581 self.keyboardPatterns["status"] = self.__determineBinaryStatus( |