3
vQh%                 @   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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j Zej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"j Z"e"j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 eZ%e"Z&G dd dej'Z'G dd dej(Z(e( Z)dS )    )error)encoder)str2octsnull)univ)usefulEncoder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      F)r   )r    )selfvalueasn1Spec	encodeFunoptions	substrater   r   :/tmp/pip-build-2nz6shyl/pyasn1/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   |\}}}| j |||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               @   sL   e Zd ZedZe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+-,.0      c             K   sr  |d k	r|j |}|j }| j|ks.| j|kr<tjd| |d | jkrXtjd| | j|krptjd| | j|krd}t	|}t
|j| jd t|d }x2|| | jkr|| | jkr||= d}|d8 }qW |d7 }|t|k r|| | jkr||d = d}|r|j |}| jt|  k o:| jk n  sPtjd| |jd	d
 tjj| |||f|S )NzMust be UTC time: %r   z#Missing "Z" time zone specifier: %rz!Comma in fractions disallowed: %rF   TzLength constraint violated: %ri  )ZmaxChunkSize)cloneZ	asNumbers	PLUS_CHAR
MINUS_CHARr   PyAsn1ErrorZ_CHAR
COMMA_CHARDOT_CHARlistminindexlen	ZERO_CHAR
MIN_LENGTH
MAX_LENGTHupdater   OctetStringEncoderr   )r   r   r   r   r   numbersZ
isModifiedZsearchIndexr   r   r   r   ,   s<    



$zTimeEncoderMixIn.encodeValueN)r   r   r   ordr-   r*   r+   r.   r/   r4   r5   r6   r   r   r   r   r   r   !   s   r   c               @   s   e Zd ZdZdZdS )GeneralizedTimeEncoderr$      N)r   r   r   r5   r6   r   r   r   r   r;   f   s   r;   c               @   s   e Zd ZdZdZdS )UTCTimeEncoder
      N)r   r   r   r5   r6   r   r   r   r   r=   k   s   r=   c               @   s   e Zd Zdd ZdS )SetOfEncoderc                sv   | j |||f|}t|dkrftdttt|  fdd|D }|jdd d dd |D }tj|d	d	fS )
Nr&    c                s   g | ]}|j  |fqS r   )ljust).0x)maxLenzeror   r   
<listcomp>z   s    z,SetOfEncoder.encodeValue.<locals>.<listcomp>c             S   s   | d S )Nr   r   )rD   r   r   r   <lambda>|   s    z*SetOfEncoder.encodeValue.<locals>.<lambda>)keyc             S   s   g | ]}|d  qS )r&   r   )rC   rD   r   r   r   rG   ~   s    T)_encodeComponentsr3   r   maxmapsortr   join)r   r   r   r   r   chunksZpaddedChunksr   )rE   rF   r   r   q   s    zSetOfEncoder.encodeValueN)r   r   r   r   r   r   r   r   r@   p   s   r@   c               @   s   e Zd Zdd ZdS )SequenceOfEncoderc             K   sB   |j ddr t| r tddfS | j|||f|}tj|ddfS )N
ifNotEmptyFT)getr3   r   rJ   rN   )r   r   r   r   r   rO   r   r   r   r      s
    
zSequenceOfEncoder.encodeValueN)r   r   r   r   r   r   r   r   rP      s   rP   c               @   s    e Zd Zedd Zdd ZdS )
SetEncoderc             C   sJ   | \}}|dkr|}|j tjj kr@|j r@|jr6|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   _componentSortKey   s    
zSetEncoder._componentSortKeyc             K   s  t }g }i }|d kr|j}|r"||j}	xnt|j D ]^\}
}|	rz|	|
 }|jrZ|j rZq6|jrl||jkrlq6||t	|< nd |t	|< |j
||f q6W nxt|jjD ]\}
}y||j }W n( tk
r   tjd|j|f Y nX |jr|j|krq|jr||jkrq||t	|< |j
|||
 f qW xt|| jdD ]x\}}|t	| }|rj|j|jd |||f|}|r|jr|j}|jr|j| r|||f|}||7 }qBW |ddfS )Nz#Component name "%s" not found in %r)rI   )rQ   T)r   ZisInconsistentrV   	enumeratevaluesZ
isOptionalZisValueZisDefaultedZ
asn1Objectidappend
namedTypesnameKeyErrorr   r,   sortedrX   r7   ZopenTyperU   ZisSameTypeWith)r   r   r   r   r   r   compsZcompsMapZinconsistencyr]   idxrW   Z	namedTypecompZcompTypechunkZwrapTyper   r   r   r      sP    zSetEncoder.encodeValueN)r   r   r   staticmethodrX   r   r   r   r   r   rS      s   rS   c               @   s   e Zd ZdZdS )SequenceEncoderTN)r   r   r   ZomitEmptyOptionalsr   r   r   r   rf      s   rf   c               @   s   e Zd ZdZdZeZeZdS )SingleItemEncoderFi  N)r   r   r   ZfixedDefLengthModeZfixedChunkSizeTAG_MAPTYPE_MAPr   r   r   r   rg     s   rg   c               @   s   e Zd ZeZdS )r   N)r   r   r   rg   ZSINGLE_ITEM_ENCODERr   r   r   r   r     s   N)*Zpyasn1r   Zpyasn1.codec.berr   Zpyasn1.compat.octetsr   r   Zpyasn1.typer   r   __all__ZIntegerEncoderr
   r   objectr   r8   r;   r=   rP   r@   rf   rS   rh   copyr7   BooleanrU   RealZGeneralizedTimeZUTCTimeZSetOfSequencerT   ri   SetZ
SequenceOfZtagMapZtypeMaprg   r   r	   r   r   r   r   <module>   sJ   	EZ













1