)Ej%6dZddlZddlmZddlmZmZmZddlm Z ddl m Z m Z m Z mZddlmZerdd lmZdd lmZdd lmZdd lmZdd lmZGddZdddededdddeddedddefdZdee dfdefdZ!dZ"e!d Z#dS)!a= Module dedicated to document signature generation. The contents of this module are internal to fpdf2, and not part of the public API. They may change at any time without prior warning or any deprecation period, in non-backward-compatible ways. Usage documentation at: N)timezone) TYPE_CHECKINGAnyOptional)patch)NamePDFDatebuild_obj_dictcreate_dictionary_string) buffer_subst)datetime)PrivateKeyTypes) Certificate)signer)StandardSecurityHandlerc eZdZ d deedeedeedeeddf dZ d ded d eedefd ZdS) SignatureN contact_infolocationmreasonreturnctd|_td|_td|_||_ ||_ ||_ ||_ t|_ dtzdz|_ dS)NSigz Adobe.PPKLitezadbe.pkcs7.detached<>) r typefilter sub_filterrrrr _SIGNATURE_BYTERANGE_PLACEHOLDER byte_range_SIGNATURE_CONTENTS_PLACEHOLDERcontents)selfrrrrs ;C:\PYTHON\MyICR_Suite\python\Lib\site-packages\fpdf/sign.py__init__zSignature.__init__ svKK ?++ 455(p  ? $:==C _security_handlerr_obj_idcxtfdtD||}t|S)Nc2i|]}|t|S)getattr).0keyr%s r& z'Signature.serialize..;s% : : :S'$$$ : : :r()r)r*)r dirpdf_dict)r%r)r*obj_dicts` r& serializezSignature.serialize5sL " : : : :D : : :/    !!!r()NNNN)NN) __name__ __module__ __qualname__rstrr r'intr5r-r(r&rrs'+"&# $ DDsmD3-D G  D  D  DDDD.BF!% " "#$=> "# " " " " " " "r(rrbufferr0rcertr extra_certshashalgo sign_timerrc td}||}|t|z} d|dz | dzt|| z dz f} t |t d| z}t j|} | |d| d| || ddGfdd} td | |j } | d||||d | }t|d}t|t|ksJ| ||dS) z Perform PDF signing based on the content of the buffer, performing substitutions on it. The signing operation does not alter the buffer size latin1rrz[%010d %010d %010d %010d]Nc4eZdZededdffd ZdS)#sign_content..mock_datetimetzrrcBtjS)N) astimezonerutc)rEr?s r&nowz'sign_content..mock_datetime.nowes'' 55 5r(N)r6r7r8 staticmethodrrI)r?sr& mock_datetimerDdsK  6C 6J 6 6 6 6 6  6 6 6r(rKzendesive.signer.datetimeT)dataur0r< othercertsr>attrs signed_value)r#encodefindlenr r!hashlibnewupdatersigndigest_pkcs11_alignedreplace)rr;r0r<r=r>r?sig_placeholder start_index end_index content_range content_hashrKrVr$s ` r& sign_contentr_Bs 6<>/8Q 7 77r(data.cpdd|D}|ddt|z zzS)Nc3K|]}|dV dS)02xNr-)r/is r& z"_pkcs11_aligned..{s&00a!zz000000r(0i@)joinrR)r`data_strs r&rXrXzs=ww00400000H cVc(mm34 44r(z-[0000000000 0000000000 0000000000 0000000000])r)$__doc__rSrrtypingrrr unittest.mockrsyntaxr r r r r3utilr /cryptography.hazmat.primitives.asymmetric.typesrcryptography.x509rendesiver encryptionrr bytearraylistr9r_tupler:rXr!r#r-r(r&rvs//////////WWWWWWWWWWWW4!!!!!!OOOOOO------333333 " " " " " " " "F58 58 58 # $58  58 m$ 58  585858585858p5%S/5c5555 $S "1/$"7"7r(