U
    gJ                     @   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 )zParse 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   A/tmp/pip-unpacked-wheel-_q8s9isk/Cryptodome/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Cryptodome.Util.asn1r   r   r   r   r   r   r   r"   r   r   r   r   <module>   s   &