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
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
+ 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