]> www.wagner.pp.ru Git - oss/ctypescrypto.git/blobdiff - ctypescrypto/digest.py
Fixed syntax of exceptions to python3 compatibility
[oss/ctypescrypto.git] / ctypescrypto / digest.py
index df4e58071a13c98e96b05e56710e86141407bd5b..5eeeaee68757614285fb8580484b32e0f0fc2913 100644 (file)
@@ -45,7 +45,7 @@ class DigestType:
                self.digest_name = digest_name\r
                self.digest = libcrypto.EVP_get_digestbyname(self.digest_name)\r
                if self.digest is None:\r
-                       raise DigestError, "Unknown digest: %s" % self.digest_name\r
+                       raise DigestError("Unknown digest: %s" % self.digest_name)\r
 \r
        def __del__(self):\r
                pass\r
@@ -69,11 +69,11 @@ class Digest:
                self._clean_ctx()\r
                self.ctx = libcrypto.EVP_MD_CTX_create()\r
                if self.ctx == 0:\r
-                       raise DigestError, "Unable to create digest context"\r
+                       raise DigestError("Unable to create digest context")\r
                result = libcrypto.EVP_DigestInit_ex(self.ctx, digest_type.digest, None)\r
                if result == 0:\r
                        self._clean_ctx()\r
-                       raise DigestError, "Unable to initialize digest"\r
+                       raise DigestError("Unable to initialize digest")\r
                self.digest_type = digest_type\r
                self.digest_size = self.digest_type.digest_size()\r
                self.block_size = self.digest_type.block_size()\r
@@ -81,15 +81,23 @@ class Digest:
        def __del__(self):\r
                self._clean_ctx()\r
 \r
-       def update(self, data):\r
+       def update(self, data, length=None):\r
                """\r
-                       Hashes given byte string as data\r
+                       Hashes given byte string \r
+\r
+                       @param data - string to hash\r
+                       @param length - if not specifed, entire string is hashed,\r
+                                       otherwise only first length bytes\r
                """\r
                if self.digest_finalized:\r
-                       raise DigestError, "No updates allowed"\r
+                       raise DigestError("No updates allowed")\r
                if type(data) != type(""):\r
-                       raise TypeError, "A string is expected"\r
-               result = libcrypto.EVP_DigestUpdate(self.ctx, c_char_p(data), len(data))\r
+                       raise TypeError("A string is expected")\r
+               if length is None:\r
+                       length=len(data)\r
+               elif length> len(data):\r
+                       raise ValueError("Specified length is greater than length of data")\r
+               result = libcrypto.EVP_DigestUpdate(self.ctx, c_char_p(data), length)\r
                if result != 1:\r
                        raise DigestError, "Unable to update digest"\r
                \r
@@ -106,7 +114,7 @@ class Digest:
                length = c_long(0)\r
                result = libcrypto.EVP_DigestFinal_ex(self.ctx, self.digest_out, byref(length))\r
                if result != 1 :\r
-                       raise DigestError, "Unable to finalize digest"\r
+                       raise DigestError("Unable to finalize digest")\r
                self.digest_finalized = True\r
                return self.digest_out.raw[:self.digest_size]\r
        def copy(self):\r