�
�~�e� � �R � d dl Z d dlZd dlZd dlmZ d dlmZ G d� de� Zdd�Zy)� N)�glob)�getProcessOutputAndValuec � � e Zd ZdZy)�InvalidGPGSignaturez:Raised when the gpg signature for a given file is invalid.N)�__name__�
__module__�__qualname__�__doc__� � �3/usr/lib/python3/dist-packages/landscape/lib/gpg.pyr r s � �Dr r c �l ��
� �
fd�}�fd�}t j � �
t t j t t
|� d�� t
|� d�� z � D �cg c] }d|f�� c}� � }dd�
dd f|z d
|| fz }t �|�� } | j |� | j |� | S c c}w )a� Verify the GPG signature of a file.
@param filename: Path to the file to verify the signature against.
@param signature: Path to signature to use.
@param gpg: Optionally, path to the GPG binary to use.
@param apt_dir: Optionally, path to apt trusted keyring.
@return: a C{Deferred} resulting in C{True} if the signature is
valid, C{False} otherwise.
c �2 �� t j �� | S )N)�shutil�rmtree)�ignored�gpg_homes �r
�remove_gpg_homez#gpg_verify.<locals>.remove_gpg_home s �� ��
�
�h���r c
� �� | \ }}}|j d� |j d� }}|dk7 rt �� d|� d|� d|d�d�� �y )N�asciir z failed (out='z', err='z ', code='�dz'))�decoder )�args�out�err�code�gpgs �r
�check_gpg_exit_codez'gpg_verify.<locals>.check_gpg_exit_code sb �� ����S�$� �:�:�g�&��
�
�7�(;�S���1�9�%��%�~�c�U�(�3�%�y��a���K��
� r z/trusted.gpgz/trusted.gpg.d/*.gpgz --keyringz--no-optionsz --homedirz--no-default-keyringz--ignore-time-conflictz--verify)r )
�tempfile�mkdtemp�tuple� itertools�chain�sortedr r �addBoth�addCallback)�filename� signaturer �apt_dirr r �keyring�keyringsr �resultr s ` @r
�
gpg_verifyr-
s� �� ��� ���!�H����� &��G�9�L�1�2��g�Y�&:�;�<�=� ��� �g�&��
�
�H�
���"�$�
� � � �y�(�
+� ,� � &�c��
5�F�
�N�N�?�#�
���*�+��M��1s �B1)z/usr/bin/gpgz/etc/apt) r" |