a
    db"                     @   s  d dl mZ d dlmZ d dlmZmZ d dlmZ d dlm	Z	 dgZ
G dd dejZG d	d
 d
ejZG dd deZG dd deejZG dd deejZG dd dejZG dd dejZG dd dejZG dd dejZej Zeejje ejje e	jje e	jje ejje ej j!e i ej" Z"e"ejj!e ejj!e e	jj!e e	jj!e ej#j!e ejj!e ej j!e ej$j!e i G dd dej%Z%e%ee"Z&dS )    )error)encoder)str2octsnull)univ)usefulencodec                   @   s   e Zd Zdd ZdS )BooleanEncoderc                 K   s   |dkrd}nd}|ddfS )Nr   )r   )   F )selfvalueasn1Spec	encodeFunoptions	substrater   r   i/home/tom/ab/renpy-build/tmp/install.linux-x86_64/lib/python3.9/site-packages/pyasn1/codec/cer/encoder.pyencodeValue   s    zBooleanEncoder.encodeValueN__name__
__module____qualname__r   r   r   r   r   r	      s   r	   c                   @   s   e Zd Zdd ZdS )RealEncoderc                 C   s   |\}}}|  |||S )N)Z_dropFloatingPoint)r   r   mber   r   r   _chooseEncBase   s    
zRealEncoder._chooseEncBaseN)r   r   r   r   r   r   r   r   r      s   r   c                   @   sD   e Zd Zed\Zed\Zed\Zed\ZdZdZ	dd Z
d	S )
TimeEncoderMixInZ+-,      c                 K   s   |d ur| |}| }| jt|  k r6| jk sFn td| | j|v sZ| j|v rhtd| |d | j	krtd| | j
|v rtd| |jdd tjj| |||fi |S )NzLength constraint violated: %rzMust be UTC time: %rz#Missing "Z" time zone specifier: %rz!Comma in fractions disallowed: %r  )ZmaxChunkSize)cloneZasOctets	minLengthlen	maxLengthr   PyAsn1Errorpluschar	minuscharzchar	commacharupdater   OctetStringEncoderr   )r   r   r   r   r   octetsr   r   r   r   )   s"    

zTimeEncoderMixIn.encodeValueN)r   r   r   r   r-   r+   r,   r.   r'   r)   r   r   r   r   r   r   !   s   



r   c                   @   s   e Zd ZdZdZdS )GeneralizedTimeEncoderr"   r#   Nr   r   r   r'   r)   r   r   r   r   r2   I   s   r2   c                   @   s   e Zd ZdZdZdS )UTCTimeEncoder
      Nr3   r   r   r   r   r4   N   s   r4   c                   @   s    e Zd Zedd Zdd ZdS )
SetEncoderc                 C   sH   | \}}|du r|}|j tjj kr>|js>|jr4|jS |jjS n|jS dS )z^Sort SET components by tag

        Sort regardless of the Choice value (static sort)
        N)typeIdr   ZChoicetagSetcomponentTypeZ	minTagSet)ZcomponentAndType	componentr   r   r   r   _componentSortKeyT   s    
zSetEncoder._componentSortKeyc              	   K   s  t }g }i }|d u r|  |j}t| D ]\\}	}
|rp||	 }|jrP|
jsPq.|jrb|
|jkrbq.||t	|
< nd |t	|
< |
|
|f q.nt|jjD ]\}	}z||j }
W n& ty   td|j|f Y n0 |jr|j|vrq|jr|
|jkrq||t	|
< |
|
||	 f qt|| jdD ]~\}}|t	| }|rR|j|jd |||fi |}|r|jr|j}|jr||s|||fi |}||7 }q*|ddfS )Nz#Component name "%s" not found in %rkey)
ifNotEmptyT)r   verifySizeSpecr:   	enumeratevaluesZ
isOptionalZisValueZisDefaultedZ
asn1Objectidappend
namedTypesnameKeyErrorr   r*   sortedr<   r/   ZopenTyper9   ZisSameTypeWith)r   r   r   r   r   r   compsZcompsMaprE   idxr;   Z	namedTypecompZcompTypechunkZwrapTyper   r   r   r   g   sL    zSetEncoder.encodeValueN)r   r   r   staticmethodr<   r   r   r   r   r   r7   S   s   
r7   c                   @   s   e Zd Zdd ZdS )SetOfEncoderc                    s    d u r|   n j  fdd|D }t|dkrtdttt|fdd|D }|jdd d d	d |D }t|}|d
d
fS )Nc                    s   g | ]}| fi qS r   r   .0x)r   r   r   r   r   
<listcomp>   s   z,SetOfEncoder.encodeValue.<locals>.<listcomp>    c                    s   g | ]}|  |fqS r   )ljustrO   )maxLenzeror   r   rR      s   c                 S   s   | d S )Nr   r   )rQ   r   r   r   <lambda>       z*SetOfEncoder.encodeValue.<locals>.<lambda>r=   c                 S   s   g | ]}|d  qS )rS   r   rO   r   r   r   rR      rY   T)	r@   r:   r(   r   maxmapsortr   join)r   r   r   r   r   
componentsZpaddedComponentsr   r   )r   r   rV   r   rW   r   r      s     

zSetOfEncoder.encodeValueNr   r   r   r   r   rN      s   rN   c                   @   s   e Zd ZdZdS )SequenceEncoderTN)r   r   r   ZomitEmptyOptionalsr   r   r   r   r_      s   r_   c                   @   s   e Zd Zdd ZdS )SequenceOfEncoderc                 K   sp   | ddrt|stddfS |d u r0|  n|j}t}t|D ]"\}}|||| |fi |7 }qB|ddfS )Nr?   FT)getr(   r   r@   r:   rA   )r   r   r   r   r   r   rJ   r;   r   r   r   r      s    

zSequenceOfEncoder.encodeValueNr   r   r   r   r   r`      s   r`   c                   @   s   e Zd ZdZdZdS )EncoderFr%   N)r   r   r   ZfixedDefLengthModeZfixedChunkSizer   r   r   r   rb      s   rb   N)'Zpyasn1r   Zpyasn1.codec.berr   Zpyasn1.compat.octetsr   r   Zpyasn1.typer   r   __all__ZIntegerEncoderr	   r   objectr   r0   r2   r4   r_   r7   r`   rN   ZtagMapcopyr/   Booleanr9   RealZGeneralizedTimeZUTCTimeZSetOfSequencer8   ZtypeMapSetZ
SequenceOfrb   r   r   r   r   r   <module>   sH   	(X
















1