X-Git-Url: https://wagner.pp.ru/gitweb/?a=blobdiff_plain;f=ctypescrypto%2Fdigest.py;h=3589fc3fa1bc37a4d6e3d73e9a9586e1c432ab94;hb=9394b769c7573617630484e7a932f6542068a8b6;hp=8a9a74e1dbb4d0ddae411ffced1c4dced1298c08;hpb=287e8a5b1d7f5a8129619f733adbfc8b2de3e4c7;p=oss%2Fctypescrypto.git diff --git a/ctypescrypto/digest.py b/ctypescrypto/digest.py index 8a9a74e..3589fc3 100644 --- a/ctypescrypto/digest.py +++ b/ctypescrypto/digest.py @@ -97,7 +97,7 @@ class Digest(object): """ Initializes digest using given type. """ - self.ctx = libcrypto.EVP_MD_CTX_create() + self.ctx = self.newctx() if self.ctx is None: raise DigestError("Unable to create digest context") self.digest_out = None @@ -167,7 +167,7 @@ class Digest(object): """ try: if self.ctx is not None: - libcrypto.EVP_MD_CTX_destroy(self.ctx) + libcrypto.EVP_MD_CTX_free(self.ctx) del self.ctx except AttributeError: pass @@ -186,15 +186,22 @@ class Digest(object): # Declare function result and argument types libcrypto.EVP_get_digestbyname.restype = c_void_p libcrypto.EVP_get_digestbyname.argtypes = (c_char_p, ) -libcrypto.EVP_MD_CTX_create.restype = c_void_p +# These two functions are renamed in OpenSSL 1.1.0 +if hasattr(libcrypto,"EVP_MD_CTX_create"): + Digest.newctx = libcrypto.EVP_MD_CTX_create + Digest.freectx = libcrypto.EVP_MD_CTX_destroy +else: + Digest.newctx = libcrypto.EVP_MD_CTX_new + Digest.freectx = libcrypto.EVP_MD_CTX_free +Digest.newctx.restype = c_void_p +Digest.freectx.argtypes = (c_void_p, ) # libcrypto.EVP_MD_CTX_create has no arguments -libcrypto.EVP_DigestInit_ex.restupe = c_int +libcrypto.EVP_DigestInit_ex.restype = c_int libcrypto.EVP_DigestInit_ex.argtypes = (c_void_p, c_void_p, c_void_p) libcrypto.EVP_DigestUpdate.restype = c_int libcrypto.EVP_DigestUpdate.argtypes = (c_void_p, c_char_p, c_longlong) libcrypto.EVP_DigestFinal_ex.restype = c_int libcrypto.EVP_DigestFinal_ex.argtypes = (c_void_p, c_char_p, POINTER(c_long)) -libcrypto.EVP_MD_CTX_destroy.argtypes = (c_void_p, ) libcrypto.EVP_MD_CTX_copy.restype = c_int libcrypto.EVP_MD_CTX_copy.argtypes = (c_void_p, c_void_p) libcrypto.EVP_MD_type.argtypes = (c_void_p, )