U
    ÈZjF  ã                   @   s8   d dl mZmZmZmZmZ dd„ Zdd„ Zdd„ ZdS )	é    )ÚDerSequenceÚ
DerIntegerÚDerBitStringÚDerObjectIdÚDerNullc                 C   s’   t ƒ j| dd�}t ƒ j|d dd�}tƒ  |d ¡}tƒ  |d ¡j}t|ƒdkrXd}n.ztƒ  |d ¡ d}W n   |d }Y nX |j||fS )z¶Parse a SubjectPublicKeyInfo structure.

    It returns a triple with:
        * OID (string)
        * encoded public key (bytes)
        * Algorithm parameters (bytes or None)
    é   ©Znr_elementsr   )é   r   r	   N)r   Údecoder   r   ÚvalueÚlenr   )ÚencodedÚspkiÚalgoÚalgo_oidZspkZalgo_params© r   ú\/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/Crypto/PublicKey/__init__.pyÚ_expand_subject_public_key_info   s    r   c                 C   s@   |d krt t| ƒgƒ}nt t| ƒ|gƒ}t |t|ƒgƒ}| ¡ S )N)r   r   r   Úencode)r   Z
public_keyÚparamsÚ	algorithmr   r   r   r   Ú_create_subject_public_key_info?   s    ÿr   c                 C   sŠ   t ƒ j| dd�}t ƒ j|d tddƒd�}d}z|d d  d}W n> tk
r€   tdd� |d ¡j}|d	krxtd
ƒ‚d}Y nX || S )z:Extract subjectPublicKeyInfo from a DER X.509 certificate.é   r   r   é   é   é   r	   )Úexplicit)r   r   z#Incorrect X.509 certificate version)r   r
   ÚrangeÚ	TypeErrorr   r   Ú
ValueError)Zx509_certificateZcertificateZtbs_certificateÚindexÚversionr   r   r   Ú _extract_subject_public_key_infoL   s    ÿ
r"   N)	ZCrypto.Util.asn1r   r   r   r   r   r   r   r"   r   r   r   r   Ú<module>   s   &