Utilities/PasswordChecker.py

branch
Py2 comp.
changeset 3057
10516539f238
parent 2525
8b507a9a2d40
parent 2997
7f0ef975da9e
child 3060
5883ce99ee12
diff -r 9986ec0e559a -r 10516539f238 Utilities/PasswordChecker.py
--- a/Utilities/PasswordChecker.py	Tue Oct 15 22:03:54 2013 +0200
+++ b/Utilities/PasswordChecker.py	Fri Oct 18 23:00:41 2013 +0200
@@ -4,7 +4,7 @@
 #
 
 """
-Module implementing a checker for password strength
+Module implementing a checker for password strength.
 """
 
 from __future__ import unicode_literals    # __IGNORE_WARNING__
@@ -86,8 +86,10 @@
         # long enough. we will skip the redudancy penalty if this
         # number is not exceeded (meaning redundancy < this number)
         self.redundancy = {
-            "value": 1,         # 1 means, not double characters, default to start
-            "permitted": 2.0,   # 2 means, in average every character can occur twice
+            "value": 1,         # 1 means, not double characters,
+                                # default to start
+            "permitted": 2.0,   # 2 means, in average every character
+                                # can occur twice
             "status": self.Status_Failed,
             "rating": 0,
         }
@@ -318,9 +320,10 @@
             # calculate a redundancy number
             self.redundancy["value"] = len(password) / len(uniqueCharacters)
         
-        # Check for sequential alpha string patterns (forward and reverse) but only,
-        # if the string has already a length to check for, does not make sense to check
-        # the password "ab" for the sequential data "abc"
+        # Check for sequential alpha string patterns (forward and reverse)
+        # but only, if the string has already a length to check for, does
+        # not make sense to check the password "ab" for the sequential data
+        # "abc"
         lowercasedPassword = password.lower()
         
         if self.passwordLength["count"] >= self.sequentialLetters["length"]:
@@ -350,8 +353,10 @@
         patternsMatched = []
         if self.passwordLength["count"] >= self.keyboardPatterns["length"]:
             for pattern in self.keyboardPatterns["data"]:
-                for index in range(len(pattern) - self.keyboardPatterns["length"] + 1):
-                    fwd = pattern[index:index + self.keyboardPatterns["length"]]
+                for index in range(
+                        len(pattern) - self.keyboardPatterns["length"] + 1):
+                    fwd = pattern[index:index + 
+                                  self.keyboardPatterns["length"]]
                     rev = self.__strReverse(fwd)
                     if lowercasedPassword.find(fwd) != -1:
                         if fwd not in patternsMatched:
@@ -366,7 +371,8 @@
         if self.passwordLength["count"] >= self.repeatedSequences["length"]:
             for index in range(len(lowercasedPassword) - \
                                self.repeatedSequences["length"] + 1):
-                fwd = lowercasedPassword[index:index + self.repeatedSequences["length"]]
+                fwd = lowercasedPassword[
+                    index:index + self.repeatedSequences["length"]]
                 if lowercasedPassword.find(
                    fwd, index + self.repeatedSequences["length"]) != -1:
                     self.repeatedSequences["count"] += 1
@@ -375,21 +381,24 @@
         if self.passwordLength["count"] >= self.mirroredSequences["length"]:
             for index in range(len(lowercasedPassword) - \
                                self.mirroredSequences["length"] + 1):
-                fwd = lowercasedPassword[index:index + self.mirroredSequences["length"]]
+                fwd = lowercasedPassword[
+                    index:index + self.mirroredSequences["length"]]
                 rev = self.__strReverse(fwd)
                 if lowercasedPassword.find(
                    fwd, index + self.mirroredSequences["length"]) != -1:
                     self.mirroredSequences["count"] += 1
         
         # Initial score based on length
-        self.score["count"] = self.passwordLength["count"] * self.passwordLength["factor"]
+        self.score["count"] = self.passwordLength["count"] * \
+            self.passwordLength["factor"]
         
         # passwordLength
         # credit additional length or punish "under" length
         if self.passwordLength["count"] >= self.passwordLength["minimum"]:
             # credit additional characters over minimum
             self.passwordLength["rating"] = self.passwordLength["bonus"] + \
-                (self.passwordLength["count"] - self.passwordLength["minimum"]) * \
+                (self.passwordLength["count"] - 
+                 self.passwordLength["minimum"]) * \
                 self.passwordLength["factor"]
         else:
             self.passwordLength["rating"] = self.passwordLength["penalty"]
@@ -398,7 +407,8 @@
         # recommendedPasswordLength
         # Credit reaching the recommended password length or put a
         # penalty on it
-        if self.passwordLength["count"] >= self.recommendedPasswordLength["minimum"]:
+        if self.passwordLength["count"] >= \
+                self.recommendedPasswordLength["minimum"]:
             self.recommendedPasswordLength["rating"] = \
                 self.recommendedPasswordLength["bonus"] + \
                 (self.passwordLength["count"] - \
@@ -412,8 +422,10 @@
         # lowercaseLetters
         # Honor or punish the lowercase letter use
         if self.lowercaseLetters["count"] > 0:
-            self.lowercaseLetters["rating"] = self.lowercaseLetters["bonus"] + \
-                self.lowercaseLetters["count"] * self.lowercaseLetters["factor"]
+            self.lowercaseLetters["rating"] = \
+                self.lowercaseLetters["bonus"] + \
+                self.lowercaseLetters["count"] * \
+                self.lowercaseLetters["factor"]
         else:
             self.lowercaseLetters["rating"] = self.lowercaseLetters["penalty"]
         self.score["count"] += self.lowercaseLetters["rating"]
@@ -421,8 +433,10 @@
         # uppercaseLetters
         # Honor or punish the lowercase letter use
         if self.uppercaseLetters["count"] > 0:
-            self.uppercaseLetters["rating"] = self.uppercaseLetters["bonus"] + \
-                self.uppercaseLetters["count"] * self.uppercaseLetters["factor"]
+            self.uppercaseLetters["rating"] = \
+                self.uppercaseLetters["bonus"] + \
+                self.uppercaseLetters["count"] * \
+                self.uppercaseLetters["factor"]
         else:
             self.uppercaseLetters["rating"] = self.uppercaseLetters["penalty"]
         self.score["count"] += self.uppercaseLetters["rating"]
@@ -466,26 +480,34 @@
         # sequentialLetters
         # Honor or punish the sequential letter use
         if self.sequentialLetters["count"] == 0:
-            self.sequentialLetters["rating"] = self.sequentialLetters["bonus"] + \
-                self.sequentialLetters["count"] * self.sequentialLetters["factor"]
+            self.sequentialLetters["rating"] = \
+                self.sequentialLetters["bonus"] + \
+                self.sequentialLetters["count"] * \
+                self.sequentialLetters["factor"]
         else:
-            self.sequentialLetters["rating"] = self.sequentialLetters["penalty"]
+            self.sequentialLetters["rating"] = \
+                self.sequentialLetters["penalty"]
         self.score["count"] += self.sequentialLetters["rating"]
         
         # sequentialNumerics
         # Honor or punish the sequential numerics use
         if self.sequentialNumerics["count"] == 0:
-            self.sequentialNumerics["rating"] = self.sequentialNumerics["bonus"] + \
-                self.sequentialNumerics["count"] * self.sequentialNumerics["factor"]
+            self.sequentialNumerics["rating"] = \
+                self.sequentialNumerics["bonus"] + \
+                self.sequentialNumerics["count"] * \
+                self.sequentialNumerics["factor"]
         else:
-            self.sequentialNumerics["rating"] = self.sequentialNumerics["penalty"]
+            self.sequentialNumerics["rating"] = \
+                self.sequentialNumerics["penalty"]
         self.score["count"] += self.sequentialNumerics["rating"]
         
         # keyboardPatterns
         # Honor or punish the keyboard patterns use
         if self.keyboardPatterns["count"] == 0:
-            self.keyboardPatterns["rating"] = self.keyboardPatterns["bonus"] + \
-                self.keyboardPatterns["count"] * self.keyboardPatterns["factor"]
+            self.keyboardPatterns["rating"] = \
+                self.keyboardPatterns["bonus"] + \
+                self.keyboardPatterns["count"] * \
+                self.keyboardPatterns["factor"]
         else:
             self.keyboardPatterns["rating"] = self.keyboardPatterns["penalty"]
         self.score["count"] += self.keyboardPatterns["rating"]
@@ -530,13 +552,16 @@
         
         # judge the requirement status
         self.basicRequirements["status"] = self.__determineStatus(
-            self.basicRequirements["count"] - self.basicRequirements["minimum"])
+            self.basicRequirements["count"] - 
+            self.basicRequirements["minimum"])
         if self.basicRequirements["status"] != self.Status_Failed:
             self.basicRequirements["rating"] = \
                 self.basicRequirements["bonus"] + \
-                self.basicRequirements["factor"] * self.basicRequirements["count"]
+                self.basicRequirements["factor"] * \
+                self.basicRequirements["count"]
         else:
-            self.basicRequirements["rating"] = self.basicRequirements["penalty"]
+            self.basicRequirements["rating"] = \
+                self.basicRequirements["penalty"]
         self.score["count"] += self.basicRequirements["rating"]
         
         # beyond basic requirements
@@ -565,18 +590,22 @@
             # repeatedSequences
             # Honor or punish the use of repeated sequences
             if self.repeatedSequences["count"] == 0:
-                self.repeatedSequences["rating"] = self.repeatedSequences["bonus"]
+                self.repeatedSequences["rating"] = \
+                    self.repeatedSequences["bonus"]
             else:
-                self.repeatedSequences["rating"] = self.repeatedSequences["penalty"] + \
+                self.repeatedSequences["rating"] = \
+                    self.repeatedSequences["penalty"] + \
                     self.repeatedSequences["count"] * \
                     self.repeatedSequences["factor"]
             
             # mirroredSequences
             # Honor or punish the use of mirrored sequences
             if self.mirroredSequences["count"] == 0:
-                self.mirroredSequences["rating"] = self.mirroredSequences["bonus"]
+                self.mirroredSequences["rating"] = \
+                    self.mirroredSequences["bonus"]
             else:
-                self.mirroredSequences["rating"] = self.mirroredSequences["penalty"] + \
+                self.mirroredSequences["rating"] = \
+                    self.mirroredSequences["penalty"] + \
                     self.mirroredSequences["count"] * \
                     self.mirroredSequences["factor"]
         
@@ -586,7 +615,8 @@
         # apply the redundancy
         # is the password length requirement fulfilled?
         if self.recommendedPasswordLength["status"] != self.Status_Exceeded:
-            # full penalty, because password is not long enough, only for a positive score
+            # full penalty, because password is not long enough, only for
+            # a positive score
             if self.score["count"] > 0:
                 self.score["count"] *= 1.0 / self.redundancy["value"]
         

eric ide

mercurial