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