o
    5hF                     @   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r,d}nzt |d  d}W n   |d }Y |j||fS )zParse a SubjectPublicKeyInfo structure.

    It returns a triple with:
        * OID (string)
        * encoded public key (bytes)
        * Algorithm parameters (bytes or None)
       nr_elementsr   )   r   r
   N)r   decoder   r   valuelenr   )encodedspkialgoalgo_oidspkalgo_params r   m/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/Crypto/PublicKey/__init__.py_expand_subject_public_key_info   s   
r   c                 C   s@   |d u rt t| g}nt t| |g}t |t|g}| S )N)r   r   r   encode)r   
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 || S  tyE   tdd|d j}|d	vr>td
d}Y || S w )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)x509_certificatecertificatetbs_certificateindexversionr   r   r    _extract_subject_public_key_infoL   s    r)   N)	Crypto.Util.asn1r   r   r   r   r   r   r   r)   r   r   r   r   <module>   s   &