From 33c32904cf5e04901f87f90e2499634b8feecd3e Mon Sep 17 00:00:00 2001 From: Victor Wagner Date: Thu, 8 Nov 2018 10:40:34 +0300 Subject: [PATCH] Added detached property for cms.SignedData and made data property od detached signatures return None instead of throwing exception --- ctypescrypto/cms.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/ctypescrypto/cms.py b/ctypescrypto/cms.py index bace85a..6061cb2 100644 --- a/ctypescrypto/cms.py +++ b/ctypescrypto/cms.py @@ -216,10 +216,20 @@ def signers(self): return StackOfX509(ptr=signerlist, disposable=False) @property + def detached(self): + """ + True, if SignedData object represents detached signature, i.e. + just signature without data inside. + """ + return libcrypto.CMS_is_detached(self.ptr) != 0 + @property def data(self): """ Returns signed data if present in the message """ + # Check if signatire is detached + if self.detached: + return None bio = Membio() if not libcrypto.CMS_verify(self.ptr, None, None, None, bio.bio, Flags.NO_VERIFY): @@ -363,6 +373,8 @@ def decrypt(self, key, flags=0): libcrypto.CMS_get1_certs.restype = c_void_p libcrypto.CMS_get1_certs.argtypes = (c_void_p, ) libcrypto.CMS_sign.restype = c_void_p +libcrypto.CMS_is_detached.argtypes = (c_void_p,) +libcrypto.CMS_is_detached.restype = c_int libcrypto.CMS_sign.argtypes = (c_void_p, c_void_p, c_void_p, c_void_p, c_uint) libcrypto.CMS_add1_signer.restype = c_void_p libcrypto.CMS_add1_signer.argtypes = (c_void_p, c_void_p, c_void_p,