o
    ýÞh•  ã                	   @   sŽ   d Z ddlZddlZejeef Zdedejeef fdd„Zdeded	edej	e fd
d„Z
dededefdd„Zdededefdd„ZdS )z0Functions that load and write PEM-encoded files.é    NÚ
pem_markerÚreturnc                 C   s,   t | tƒs
|  d¡} d|  d d|  d fS )z:
    Returns the start and end PEM markers, as bytes.
    Úasciis   -----BEGIN s   -----s	   -----END )Ú
isinstanceÚbytesÚencode)r   © r   úG/var/www/html/premium_crap/venv/lib/python3.10/site-packages/rsa/pem.pyÚ_markers   s
   



þr
   ÚcontentsÚ	pem_startÚpem_endc                 c   s–   � d}d}|   ¡ D ]/}| ¡ }|sq	||kr#|rtd| ƒ‚d}d}q	|s&q	|r0||kr0d} n	d|v r5q	|V  q	|sAtd| ƒ‚|rItd| ƒ‚dS )z7Generator over PEM lines between pem_start and pem_end.FzSeen start marker "%r" twiceTó   :zNo PEM start marker "%r" foundzNo PEM end marker "%r" foundN)Ú
splitlinesÚstripÚ
ValueError)r   r   r   Úin_pem_partÚseen_pem_startÚliner   r   r	   Ú
_pem_lines&   s4   €ÿr   c                 C   sJ   t | tƒs
|  d¡} t|ƒ\}}dd„ t| ||ƒD ƒ}d |¡}t |¡S )aÑ  Loads a PEM file.

    :param contents: the contents of the file to interpret
    :param pem_marker: the marker of the PEM content, such as 'RSA PRIVATE KEY'
        when your file has '-----BEGIN RSA PRIVATE KEY-----' and
        '-----END RSA PRIVATE KEY-----' markers.

    :return: the base64-decoded content between the start and end markers.

    @raise ValueError: when the content is invalid, for example when the start
        marker cannot be found.

    r   c                 S   s   g | ]}|‘qS r   r   )Ú.0r   r   r   r	   Ú
<listcomp>g   s    zload_pem.<locals>.<listcomp>ó    )r   r   r   r
   r   ÚjoinÚbase64Ústandard_b64decode)r   r   r   r   Ú	pem_linesÚpemr   r   r	   Úload_pemS   s   



r   c                 C   sr   t |ƒ\}}t | ¡ dd¡}|g}tdt|ƒdƒD ]}|||d … }| |¡ q| |¡ | d¡ d |¡S )aj  Saves a PEM file.

    :param contents: the contents to encode in PEM format
    :param pem_marker: the marker of the PEM content, such as 'RSA PRIVATE KEY'
        when your file has '-----BEGIN RSA PRIVATE KEY-----' and
        '-----END RSA PRIVATE KEY-----' markers.

    :return: the base64-encoded content between the start and end markers, as bytes.

    ó   
r   r   é@   )r
   r   Ústandard_b64encodeÚreplaceÚrangeÚlenÚappendr   )r   r   r   r   Úb64r   Úblock_startÚblockr   r   r	   Úsave_pemn   s   


r)   )Ú__doc__r   ÚtypingÚUnionÚstrr   Ú	FlexiTextÚTupler
   ÚIteratorr   r   r)   r   r   r   r	   Ú<module>   s    -