a !c@s:ddlmZddlmZddlmZddlmZddlZddlZddl Zddl Zddl Z ddl Z ddl Z ddlZzddlmZddlmZWn:eyddlZGdd d eZGd d d eZYn0d Ze d ZddZddZddZddZddZddZejddZddZ d"ddZ!Gd d!d!eZ"dS)#)print_function)absolute_import)unicode_literals)_N)Context)Datac@sVeZdZddZddZddZeddZejd dZd d Z d d Z ddZ dS)rcCst|jd<dS)Nctx)gpgmer__dict__selfr ./usr/lib/python3.9/site-packages/dnf/crypto.py__init__*szContext.__init__cCs|SNr r r r r __enter__-szContext.__enter__cCsdSrr r typevaluetbr r r__exit__0szContext.__exit__cCs|jjSrrarmorr r r rr3sz Context.armorcCs ||j_dSrr)r rr r rr7scCs$t|trt|}|j|dSr) isinstanceZ basestringioBytesIOrimport_)r key_for r r op_import;s  zContext.op_importcCs|j||dSr)rZexport)r patternmodeZkeydatar r r op_export@szContext.op_exportcCs t|j|Sr)getattrrr namer r r __getattr__CszContext.__getattr__N) __name__ __module__ __qualname__rrrpropertyrsetterrr!r%r r r rr)s  rc@s4eZdZddZddZddZddZd d Zd S) rcCst|jd<dS)Nbuf)rrr r r r rrHsz Data.__init__cCs|Srr r r r rrKszData.__enter__cCsdSrr rr r rrNsz Data.__exit__cCs |jSr)r+getvaluer r r rreadQsz Data.readcCs t|j|Sr)r"r+r#r r rr%TszData.__getattr__N)r&r'r(rrrr-r%r r r rrGs rZ GNUPGHOMEdnfcCstjdd|jDS)Ncss|]}|jr|VqdSr)Zcan_sign).0subkeyr r r ]z*_extract_signing_subkey..)r.utilfirstZsubkeys)keyr r r_extract_signing_subkey\sr6cs(fddtdtdD}d|S)Nc3s|]}||dVqdS)Nr )r/ifpr_hexr rr1ar2z)_printable_fingerprint..rr7 )rangelenjoin)r:segmentsr r9r_printable_fingerprint`sr@cCs|j}t|}|jD]t}t||D]d}|j}||vrJttd|j|q"|j |sXq"t j j j|j|j|ddttd|j|q"qdS)Nzrepo %s: 0x%s already importedF)gpgdirZ make_ro_copyzrepo %s: imported key 0x%s.)Z _pubring_dirkeyids_from_pubringZgpgkeyretrieveid_loggerdebugridZ _key_importZ_confirmr.ZyumZmiscZimport_key_to_pubringraw_keyshort_id)reporAZ known_keyskeyurlkeyinfokeyidr r rimport_repo_keyses   rNc Cstj|sgSt|vtP}g}|D] }t|}|dur.||jq.|WdWdS1sv0YWdn1s0YdSr) ospathexists pubring_dirrkeylistr6appendrM)rArZkeyidskr0r r rrBvs  rBcCs8td|j|jt|j|jddf}td|dS)NzLImporting GPG key 0x%s: Userid : "%s" Fingerprint: %s From : %szfile://z%s) rrIuseridr@ fingerprinturlreplacerEcritical)rLmsgr r rlog_key_imports r]cCs8t||tjjjkr&ttdnttddS)Nz0Verified using DNS record with DNSSEC signature.zNOT verified using DNS record.)r]r.ZdnssecZValidityZVALIDrEr[r)rLZ dns_resultr r rlog_dns_key_importsr^c csbtjtd}|tjt<z&dVW|dur4tjt=q^|tjt<n|durRtjt=n |tjt<0dSr)rOenvironget GPG_HOME_ENV)rRZorigr r rrRs    rRc Cst}g}t|t}|||D]&}t|}|durFq0|t||q0d|_ |D]R}t 8}| |j d|| dtj||_Wdqb1s0YqbWdn1s0YWdn1s0Ytj||S)NTr)tempfileZmkdtemprRrrrSr6rTKeyrrr!rDseekrOSEEK_SETr-rHr.r3Zrm_rf)rZpb_dirkeyinfosrr5r0infoZsinkr r r rawkey2infoss"  f rhcCsj|drttd|j|tjj||d}t|}Wdn1sL0Y|D] }||_ qZ|S)Nzhttp:z.retrieving repo key for %s unencrypted from %s)rJ) startswithrEZwarningrrGr.r3Z_urlopenrhrY)rKrJZhandlerfrLr r rrCs &rCc@s,eZdZddZeddZeddZdS)rccCs6|j|_|j|_d|_|j|_d|_|jdj|_ dS)Nr) rMrDZfprrXrHZ timestamprYZuidsuidrW)r r5r0r r rrs z Key.__init__cCs&tjjr dnd}|jddd|S)N00i)r.ZpycompZPY3rDrjust)r Zrjr r rrIsz Key.short_idcCs |jSr)rIlowerr r r rrpm_idsz Key.rpm_idN)r&r'r(rr)rIrpr r r rrcs  rc)N)#Z __future__rrrZdnf.i18nr contextlibZ dnf.pycompr.Zdnf.utilZ dnf.yum.miscrZloggingrOrbZgpgrr ImportErrorr objectraZ getLoggerrEr6r@rNrBr]r^contextmanagerrRrhrCrcr r r rs>