a
    !c                     @   s:  d dl mZ d dl mZ d dl mZ d dlmZ d dlZd dlZd dl	Zd dl
Zd dlZd dlZd dlZd dlZzd dlmZ d dlmZ W n: ey   d dlZG dd	 d	eZG d
d deZY n0 dZedZdd Zdd Zdd Zdd Zdd Zdd Zejdd Zdd Z d"ddZ!G d d! d!eZ"dS )#    )print_function)absolute_import)unicode_literals)_N)Context)Datac                   @   sV   e Zd Zdd Zdd Zdd Zedd Zejd	d Zd
d Z	dd Z
dd ZdS )r   c                 C   s   t  | jd< d S )Nctx)gpgmer   __dict__self r   ./usr/lib/python3.9/site-packages/dnf/crypto.py__init__*   s    zContext.__init__c                 C   s   | S Nr   r   r   r   r   	__enter__-   s    zContext.__enter__c                 C   s   d S r   r   r   typevaluetbr   r   r   __exit__0   s    zContext.__exit__c                 C   s   | j jS r   r   armorr   r   r   r   r   3   s    zContext.armorc                 C   s   || j _d S r   r   )r   r   r   r   r   r   7   s    c                 C   s$   t |trt|}| j| d S r   )
isinstanceZ
basestringioBytesIOr   import_)r   key_for   r   r   	op_import;   s    

zContext.op_importc                 C   s   | j || d S r   )r   Zexport)r   patternmodeZkeydatar   r   r   	op_export@   s    zContext.op_exportc                 C   s   t | j|S r   )getattrr   r   namer   r   r   __getattr__C   s    zContext.__getattr__N)__name__
__module____qualname__r   r   r   propertyr   setterr   r!   r%   r   r   r   r   r   )   s   

r   c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )r   c                 C   s   t  | jd< d S )Nbuf)r   r   r
   r   r   r   r   r   H   s    zData.__init__c                 C   s   | S r   r   r   r   r   r   r   K   s    zData.__enter__c                 C   s   d S r   r   r   r   r   r   r   N   s    zData.__exit__c                 C   s
   | j  S r   )r+   getvaluer   r   r   r   readQ   s    z	Data.readc                 C   s   t | j|S r   )r"   r+   r#   r   r   r   r%   T   s    zData.__getattr__N)r&   r'   r(   r   r   r   r-   r%   r   r   r   r   r   G   s
   r   Z	GNUPGHOMEdnfc                 C   s   t jdd | jD S )Nc                 s   s   | ]}|j r|V  qd S r   )Zcan_sign).0subkeyr   r   r   	<genexpr>]       z*_extract_signing_subkey.<locals>.<genexpr>)r.   utilfirstZsubkeys)keyr   r   r   _extract_signing_subkey\   s    r6   c                    s(    fddt dt dD }d|S )Nc                 3   s   | ]} ||d   V  qdS )   Nr   )r/   ifpr_hexr   r   r1   a   r2   z)_printable_fingerprint.<locals>.<genexpr>r   r7    )rangelenjoin)r:   segmentsr   r9   r   _printable_fingerprint`   s    r@   c                 C   s   | j }t|}| jD ]t}t|| D ]d}|j}||v rJttd| j| q"| j	
|sXq"tjjj|j|j|dd ttd| j| q"qd S )Nzrepo %s: 0x%s already importedF)gpgdirZmake_ro_copyzrepo %s: imported key 0x%s.)Z_pubring_dirkeyids_from_pubringZgpgkeyretrieveid_loggerdebugr   idZ_key_importZ_confirmr.   ZyumZmiscZimport_key_to_pubringraw_keyshort_id)reporA   Z
known_keyskeyurlkeyinfokeyidr   r   r   import_repo_keyse   s    

rN   c              	   C   s   t j| sg S t| v t P}g }| D ] }t|}|d ur.||j q.|W  d    W  d    S 1 sv0    Y  W d    n1 s0    Y  d S r   )	ospathexistspubring_dirr   keylistr6   appendrM   )rA   r   Zkeyidskr0   r   r   r   rB   v   s    rB   c                 C   s8   t d| j| jt| j| jddf }td| d S )NzLImporting GPG key 0x%s:
 Userid     : "%s"
 Fingerprint: %s
 From       : %szfile:// z%s)	r   rI   useridr@   fingerprinturlreplacerE   critical)rL   msgr   r   r   log_key_import   s    r]   c                 C   s8   t |  |tjjjkr&ttd nttd d S )Nz0Verified using DNS record with DNSSEC signature.zNOT verified using DNS record.)r]   r.   ZdnssecZValidityZVALIDrE   r[   r   )rL   Z
dns_resultr   r   r   log_dns_key_import   s    r^   c              	   c   sb   t jtd }| t jt< z&d V  W |d u r4t jt= q^|t jt< n|d u rRt jt= n
|t jt< 0 d S r   )rO   environgetGPG_HOME_ENV)rR   Zorigr   r   r   rR      s    


rR   c                 C   s  t  }g }t| t }||  | D ]&}t|}|d u rFq0|t|| q0d|_	|D ]R}t
 8}||jd| |dtj | |_W d    qb1 s0    Y  qbW d    n1 s0    Y  W d    n1 s0    Y  tj| |S )NTr   )tempfileZmkdtemprR   r   r   rS   r6   rT   Keyr   r   r!   rD   seekrO   SEEK_SETr-   rH   r.   r3   Zrm_rf)r   Zpb_dirkeyinfosr   r5   r0   infoZsinkr   r   r   rawkey2infos   s"    
frh   c                 C   sj   |  drttd|j|  tjj| |d}t|}W d    n1 sL0    Y  |D ]
}| |_	qZ|S )Nzhttp:z.retrieving repo key for %s unencrypted from %s)rJ   )

startswithrE   Zwarningr   rG   r.   r3   Z_urlopenrh   rY   )rK   rJ   Zhandlerf   rL   r   r   r   rC      s    
&rC   c                   @   s,   e Zd Zdd Zedd Zedd ZdS )rc   c                 C   s6   |j | _|j| _d | _|j| _d | _|jd j| _	d S )Nr   )
rM   rD   ZfprrX   rH   Z	timestamprY   ZuidsZuidrW   )r   r5   r0   r   r   r   r      s    zKey.__init__c                 C   s&   t jjrdnd}| jdd  d|S )N0   0i   )r.   ZpycompZPY3rD   rjust)r   Zrjr   r   r   rI      s    zKey.short_idc                 C   s
   | j  S r   )rI   lowerr   r   r   r   rpm_id   s    z
Key.rpm_idN)r&   r'   r(   r   r)   rI   ro   r   r   r   r   rc      s
   
rc   )N)#Z
__future__r   r   r   Zdnf.i18nr   
contextlibZ
dnf.pycompr.   Zdnf.utilZdnf.yum.miscr   ZloggingrO   rb   Zgpgr   r   ImportErrorr	   objectra   Z	getLoggerrE   r6   r@   rN   rB   r]   r^   contextmanagerrR   rh   rC   rc   r   r   r   r   <module>   s>   



