o
    e3                     @   s:   d dl mZmZmZmZmZ dd Zd	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   ?/usr/lib/python3/dist-packages/Cryptodome/PublicKey/__init__.py_expand_subject_public_key_info   s   
r   Nc                 C   s2   |d u rt  }ttt| |gt|g}| S N)r   r   r   r   encode)r   
secret_keyparamsr   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_infoM   s    r)   r   )	Cryptodome.Util.asn1r   r   r   r   r   r   r   r)   r   r   r   r   <module>   s   
&