]> www.wagner.pp.ru Git - oss/ctypescrypto.git/blobdiff - ctypescrypto/digest.py
Fixes some style. Improved tests coverage for bio,oid,digest and cipher. Prepare...
[oss/ctypescrypto.git] / ctypescrypto / digest.py
index 2963e7034b19eac01bad510ff7ad389e65f0cb1c..30d77c5a57b35f19d2f0aa501f010581ae4740dc 100644 (file)
@@ -41,13 +41,29 @@ class DigestType(object):
        """\r
        def __init__(self,      digest_name):\r
                """\r
-                       Finds digest by its name\r
+                       Finds digest by its name. You can pass Oid object instead of\r
+                       name.\r
+\r
+                       Special case is when None is passed as name. In this case\r
+                       unitialized digest is created, and can be initalized later\r
+                       by setting its digest attribute to pointer to EVP_MD\r
                """\r
-               self.digest_name = digest_name\r
-               self.digest = libcrypto.EVP_get_digestbyname(self.digest_name)\r
+               if digest_name is None:\r
+                       return \r
+               if isinstance(digest_name,Oid):\r
+                       self.digest_name=digest_name.longname()\r
+                       self.digest=libcrypto.EVP_get_digestbyname(self.digest_name)\r
+               else:\r
+                       self.digest_name = str(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
 \r
+       @property\r
+       def name(self):\r
+               if not hasattr(self,'digest_name'):\r
+                       self.digest_name=Oid(libcrypto.EVP_MD_type(self.digest)).longname()\r
+               return self.digest_name\r
        def __del__(self):\r
                pass\r
        def digest_size(self):\r
@@ -69,7 +85,7 @@ class Digest(object):
                """\r
                self._clean_ctx()\r
                self.ctx = libcrypto.EVP_MD_CTX_create()\r
-               if self.ctx == 0:\r
+               if self.ctx is None:\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
@@ -92,11 +108,11 @@ class Digest(object):
                """\r
                if self.digest_finalized:\r
                        raise DigestError("No updates allowed")\r
-               if type(data) != type(""):\r
+               if not isinstance(data,str):\r
                        raise TypeError("A string is expected")\r
                if length is None:\r
-                       length=len(data)\r
-               elif length> len(data):\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