]> wagner.pp.ru Git - oss/ctypescrypto.git/commitdiff
Fixed incompatibility with OpenSSL 1.1-pre for digest, cipher and MAC modules. Change...
authorVictor Wagner <vitus@wagner.pp.ru>
Sat, 6 Feb 2016 14:51:44 +0000 (17:51 +0300)
committerVictor Wagner <vitus@wagner.pp.ru>
Sat, 6 Feb 2016 14:51:44 +0000 (17:51 +0300)
ctypescrypto/cipher.py
ctypescrypto/digest.py
ctypescrypto/mac.py
tests/testoids.py

index d4035c1a34a8a5ec909578491b19a7cc5670138b..b4a00cfac932426bb4f3e788bb52eabf73e4b03e 100644 (file)
@@ -229,7 +229,7 @@ class Cipher(object):
         """
         try:
             if self.ctx is not None:
-                libcrypto.EVP_CIPHER_CTX_cleanup(self.ctx)
+                self.__ctxcleanup(self.ctx)
                 libcrypto.EVP_CIPHER_CTX_free(self.ctx)
                 del self.ctx
         except AttributeError:
@@ -241,7 +241,14 @@ class Cipher(object):
 # Used C function block_size
 #
 libcrypto.EVP_CIPHER_block_size.argtypes = (c_void_p, )
-libcrypto.EVP_CIPHER_CTX_cleanup.argtypes = (c_void_p, )
+
+#Function EVP_CIPHER_CTX_cleanup renamed to EVP_CIPHER_CTX_reset
+# in the OpenSSL 1.1.0
+if hasattr(libcrypto,"EVP_CIPHER_CTX_cleanup"):
+    Cipher.__ctxcleanup = libcrypto.EVP_CIPHER_CTX_cleanup.argtypes 
+else:
+    Cipher.__ctxcleanup = libcrypto.EVP_CIPHER_CTX_reset
+Cipher.__ctxcleanup.argtypes  = (c_void_p, )
 libcrypto.EVP_CIPHER_CTX_free.argtypes = (c_void_p, )
 libcrypto.EVP_CIPHER_CTX_new.restype = c_void_p
 libcrypto.EVP_CIPHER_CTX_set_padding.argtypes = (c_void_p, c_int)
index 8a9a74e1dbb4d0ddae411ffced1c4dced1298c08..3589fc3fa1bc37a4d6e3d73e9a9586e1c432ab94 100644 (file)
@@ -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, )
index 0a96cb063436175ef24ba89106aacf5626aa9174..370eeb5c09247deda3b22d541621e7277807a7f8 100644 (file)
@@ -56,7 +56,7 @@ class MAC(Digest):
         if self.key is None:
             raise DigestError("EVP_PKEY_new_mac_key")
         pctx=c_void_p()
-        self.ctx = libcrypto.EVP_MD_CTX_create()
+        self.ctx = self.newctx()
         if self.ctx == 0:
             raise DigestError("Unable to create digest context")
         if libcrypto.EVP_DigestSignInit(self.ctx,pointer(pctx),d,None,self.key) <= 0:
index 981b1bd89f8d399919b8a5645761d43ca558abc9..66a6c7f1dd5346c9349800974369844cf78d1014 100644 (file)
@@ -57,8 +57,8 @@ class TestCustom(unittest.TestCase):
         x=Oid(sn)
         self.assertEqual(o,x)
     def testCleanup(self):
-        d='1.2.643.100.3'
-        sn="SNILS"
+        d='1.2.643.100.9'
+        sn="SNILX"
         long_name="Russian Pension security number"
         o=create(d,sn,long_name)
         cleanup()