U
    n5{idt  ã                :   @   sä  d dl Z d dlZd dlmZ d dlmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZ d d	lmZ d d
lmZ ddgZejeejd�ZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG d d!„ d!eƒZG d"d#„ d#eƒZ G d$d%„ d%eƒZ!G d&d'„ d'eƒZ"G d(d)„ d)eƒZ#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ƒ ej-j%eƒ ej.j%eƒ ej/j%e!ƒ ej0j%e!ƒ ej1j%e"ƒ ej2j%eƒ ej3j%eƒ ej4j%eƒ ej5j%eƒ ej6j%eƒ ej7j%eƒ ej8j%eƒ ej9j%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Z@ej&jAeƒ ej'jAeƒ ej(jAeƒ ej)jAeƒ ej*jAeƒ ej+jAeƒ ej,jAeƒ ej-jAeƒ ej.jAeƒ ejBjAe ƒ ej0jAe!ƒ ejCjAe ƒ ej/jAe!ƒ ej1jAe"ƒ ejDjAe#ƒ ej2jAeƒ ej3jAeƒ ej4jAeƒ ej5jAeƒ ej6jAeƒ ej7jAeƒ ej8jAeƒ ej9jAeƒ ej:jAeƒ ej;jAeƒ ej<jAeƒ ej=jAeƒ ej>jAeƒ ej?jAeƒ iZEG d*d+„ d+eƒZFG d,d„ deƒZGeGƒ ZHeId-œd.d/„ZJdS )0é    N)Údebug)Úerror)Úeoo)Ú_MISSING)Úto_bytes)Úchar)Útag)Úuniv)ÚusefulÚEncoderÚencode)Úflagsc                   @   s>   e Zd ZdZdZeeƒZdd„ Zdd„ Zdd„ Z	dd
d„Z
d	S )ÚAbstractItemEncoderT)r   r   c                 C   sv   |\}}}||B }|r |t jO }|dk r2||B fS |d@ f}|dL }|rdd|d@ B f| }|dL }qD|dB f| S d S )Né   é   é   é€   )r   ZtagFormatConstructed)ÚselfÚ	singleTagÚisConstructedZtagClassZ	tagFormatZtagIdZ
encodedTagÚ	substrate© r   ú</tmp/pip-unpacked-wheel-k74m6cuf/pyasn1/codec/ber/encoder.pyÚ	encodeTag!   s    




zAbstractItemEncoder.encodeTagc                 C   sl   |s| j rdS |dk r|fS d}|r<|d@ f| }|dL }q t|ƒ}|dkrZt d| ¡‚d|B f| S d S )N)r   r   r   éÿ   é   é~   zLength octets overflow (%d))ÚsupportIndefLenModeÚlenr   ÚPyAsn1Error)r   ÚlengthÚdefModer   ZsubstrateLenr   r   r   ÚencodeLength5   s    

z AbstractItemEncoder.encodeLengthc                 K   s   t  d¡‚d S )NzNot implemented)r   r   ©r   ÚvalueÚasn1SpecÚ	encodeFunÚoptionsr   r   r   ÚencodeValueI   s    zAbstractItemEncoder.encodeValueNc                 K   sÊ  |d kr|j }n|j }|s6| j|||f|Ž\}}}|S | dd¡}	d}t|jƒD �]d\}
}|	}|
�s
z| j|||f|Ž\}}}W n6 tjk
r¶ } zt d||f ¡‚W 5 d }~X Y nX trÖtd|rÈdpÊd||f ƒ |sò|rò| dd	¡rò|  S |�s
d}t�r
td
ƒ |  ||¡}t�rDtd|�r,d�p.d|t	 
t|ƒ¡f ƒ ||  t|ƒ|¡7 }t�r|tdt|ƒt	 
t|ƒ¡f ƒ |�r t|ƒ| }|�s¶|| j7 }qP|| }|sP|| j7 }qP|�sÆt|ƒ}|S )Nr!   Tó    zError encoding %r: %szencoded %svalue %s into %szconstructed Ú Ú
ifNotEmptyFz;overridden encoding mode into definitive for primitive typezencoded %stag %s into %sz)encoded %s octets (tag + payload) into %s)ÚtagSetr(   ÚgetÚ	enumerateZ	superTagsr   r   ÚLOGr   r   ÚhexdumpÚbytesr"   r   ÚeooOctetsSubstrateÚeooIntegerSubstrate)r   r$   r%   r&   r'   r,   r   r   ZisOctetsr!   Úidxr   ZdefModeOverrideÚexcÚheaderr   r   r   r   L   s€      ÿÿ
  ÿÿ
ÿ
  ÿ þ ÿzAbstractItemEncoder.encode)NN)Ú__name__Ú
__module__Ú__qualname__r   r3   r1   r2   r   r"   r(   r   r   r   r   r   r      s   r   c                   @   s   e Zd Zdd„ ZdS )ÚEndOfOctetsEncoderc                 K   s   dS ©N©r)   FTr   r#   r   r   r   r(   ›   s    zEndOfOctetsEncoder.encodeValueN©r7   r8   r9   r(   r   r   r   r   r:   š   s   r:   c                   @   s   e Zd ZdZdd„ ZdS )ÚBooleanEncoderFc                 K   s   |rdp
dddfS )N)é   ©r   Fr   r#   r   r   r   r(   ¢   s    zBooleanEncoder.encodeValueN©r7   r8   r9   r   r(   r   r   r   r   r>   Ÿ   s   r>   c                   @   s   e Zd ZdZdZdd„ ZdS )ÚIntegerEncoderFc                 K   sF   |dkr0t r"t d| jrdpd ƒ | jr,dS dS tt|ƒdd�d	dfS )
Nr   z#encoding %spayload for zero INTEGERzno r*   )r   FF)r@   FFT)ÚsignedF)r/   ÚsupportCompactZeror   Úintr#   r   r   r   r(   ª   s    ÿzIntegerEncoder.encodeValueN)r7   r8   r9   r   rD   r(   r   r   r   r   rB   ¦   s   rB   c                   @   s   e Zd Zdd„ ZdS )ÚBitStringEncoderc                 K   s  |d k	r|  |¡}t|ƒ}|d r4|d|d  > }n|}| dd¡}|rXt|ƒ|d kr€| ¡ }tt|ƒd | fƒ| ddfS tr�td| ƒ |jj}	|	rªt 	|	|	¡}
nt 	¡ }
|j |
d�}d}d}||k �r|}t
||d  |ƒ}|||||… |f|Ž7 }qÆ|ddfS )	Nr   ÚmaxChunkSizer   FTú#encoding into up to %s-octet chunks©r,   r)   )Úcloner   r-   ÚasOctetsr1   r/   r,   ÚbaseTagr   ÚTagSetÚmin)r   r$   r%   r&   r'   ZvalueLengthZalignedValuerG   r   rL   r,   ÚstopÚstartr   r   r   r(   »   s0    
 
zBitStringEncoder.encodeValueNr=   r   r   r   r   rF   º   s   rF   c                   @   s   e Zd Zdd„ ZdS )ÚOctetStringEncoderc                 K   s  |d kr|  ¡ }nt|tƒs,| |¡  ¡ }n|}| dd¡}|rLt|ƒ|krV|ddfS trftd| ƒ |d krž|jj}|rˆt	 
||¡}nt	 
¡ }|j|d�}n8t|tƒsÖ|jj}|rÂt	 
||¡}nt	 
¡ }|j|d�}d}	d}||	|	| … }
|
sö�q|||
|f|Ž7 }|	|7 }	qÞ|ddfS )NrG   r   FTrH   rI   r)   )rK   Ú
isinstancer1   rJ   r-   r   r/   r,   rL   r   rM   )r   r$   r%   r&   r'   r   rG   rL   r,   ÚposÚchunkr   r   r   r(   å   s<    




zOctetStringEncoder.encodeValueNr=   r   r   r   r   rQ   ã   s   rQ   c                   @   s   e Zd ZdZdd„ ZdS )ÚNullEncoderFc                 K   s   dS r;   r   r#   r   r   r   r(   #  s    zNullEncoder.encodeValueNrA   r   r   r   r   rU      s   rU   c                   @   s   e Zd ZdZdd„ ZdS )ÚObjectIdentifierEncoderFc                 K   s¨  |d k	r|  |¡}| ¡ }z|d }|d }W n$ tk
rR   t d|f ¡‚Y nX d|  krhdkrÚn nn|dkrŒ|d f|dd …  }nL|dkr¨|f|dd …  }n0|dkrÈ|d f|dd …  }nt d|f ¡‚n0|dkrú|d f|dd …  }nt d|f ¡‚d	}|D ]Š}	d|	  k�r.d
k�r>n n||	f7 }n\|	d
k�rˆ|	d
@ f}
|	dL }	|	�r~d|	d
@ B f|
 }
|	dL }	�qZ||
7 }nt d|	|f ¡‚�q|ddfS )Nr   r?   zShort OID %sé'   é(   é   éP   z"Impossible first/second arcs at %sr   r   r   r   zNegative OID arc %s at %sF)rJ   ÚasTupleÚ
IndexErrorr   r   )r   r$   r%   r&   r'   ÚoidÚfirstÚsecondÚoctetsÚsubOidÚresr   r   r   r(   *  s@    



z#ObjectIdentifierEncoder.encodeValueNrA   r   r   r   r   rV   '  s   rV   c                   @   s   e Zd ZdZdd„ ZdS )ÚRelativeOIDEncoderFc                 K   s¨   |d k	r|  |¡}d}| ¡ D ]~}d|  kr6dkrFn n||f7 }q|dkrŠ|d@ f}|dL }|r€d|d@ B f| }|dL }q`||7 }qt d||f ¡‚q|ddfS )Nr   r   r   r   r   z"Negative RELATIVE-OID arc %s at %sF)rJ   r[   r   r   )r   r$   r%   r&   r'   r`   ra   rb   r   r   r   r(   e  s    



zRelativeOIDEncoder.encodeValueNrA   r   r   r   r   rc   b  s   rc   c                   @   s0   e Zd ZdZdZedd„ ƒZdd„ Zdd„ Zd	S )
ÚRealEncoderFrY   c                 C   s¼   d\}}| dk rd}|dk r d}| |9 } |dkrZ| dt |ƒd |  9 } t |ƒd | }n0|dkrŠ| dt |ƒd |  9 } t |ƒd | }t| ƒ| kr¬| |9 } |d	8 }qŠq¬qŠ|t| ƒ||fS )
N)r?   r?   r   éÿÿÿÿr   rY   é   é   é   r?   )ÚabsrE   )ÚmÚencbaseÚeÚmsÚesr   r   r   Ú_dropFloatingPoint‡  s$    zRealEncoder._dropFloatingPointc                 C   s  |\}}}dddg}|j |kr.|  ||j |¡S | j |krH|  || j |¡S |||g}|||g}d}d}	tdƒ}tdƒD ]‚}
|  ||
 ||
 ||
 ¡\}||
< ||
< ||
< t||
 ƒt|ƒk sÚt||
 ƒt|ƒkrt||
 |k rt||
 }t||
 ƒ}||
 }	qtt�rtd|	|||f ƒ |||	|fS )NrY   r   rg   r?   Úinfrf   zMautomatically chosen REAL encoding base %s, sign %s, mantissa %s, exponent %s)Ú
binEncBasero   ÚfloatÚrangeri   rE   r/   )r   r$   rj   Úbrl   ZencBaseZmantissaÚexponentÚsignrk   Úir   r   r   Ú_chooseEncBase£  s4    





ý4

ÿzRealEncoder._chooseEncBasec                 K   sÆ  |d k	r|  |¡}|jrdS |jr&dS |\}}}|s8dS |dkrltrLtdƒ d||dkr\dp^d	|f d
dfS |dk�r´d}|  |¡\}	}}
}|	dk rœ|dO }|
dkrÄ|d@ dkrÂ|dL }|d7 }q¤nX|
dkrô|d@ dkrê|dL }|d7 }qÌ|dO }n(|d@ dk�r|dL }|d7 }qô|dO }d}|d@ dk�rB|dL }|d7 }�q |dk�rVt d¡‚||d> O }d	}|dk�sz|dk�rŠt|d@ fƒ}n||dk�r²t|d@ fƒ| }|dL }�qŠ|dk�rÜ|�rÜ|d d@ �rÜtdƒ| }|dk�r|�r|d d@ �stdƒ| }t|ƒ}|dk�r"t d¡‚|dk�r.nB|dk�rB|dO }n.|dk�rV|dO }n|dO }t|d@ fƒ| }d	}|�r˜t|d@ fƒ| }|dL }�qtt|fƒ| | }|d
dfS t d| ¡‚d S )N))é@   FF))éA   FFr<   é
   z!encoding REAL into character forms   %dE%s%dr   ó   +r)   FTrY   r   ry   r?   r   r   rf   rg   é   rh   é    zScale factor overflowre   r   )r   re   r@   )r   zReal exponent overflowzProhibited Real base %s)	rJ   Z	isPlusInfZ
isMinusInfr/   rx   r   r   r1   r   )r   r$   r%   r&   r'   rj   rt   rl   Úform   rk   ZsfÚeoÚnZpor   r   r   r   r(   Ä  s„    

 














zRealEncoder.encodeValueN)	r7   r8   r9   r   rq   Ústaticmethodro   rx   r(   r   r   r   r   rd   ƒ  s   
!rd   c                   @   s   e Zd ZdZdd„ ZdS )ÚSequenceEncoderFc              	   K   sì  d}|  d| j¡}tr*td|r"dp$d ƒ |d k�r€|j}|rTt d|jj› d�¡‚|j}t	| 
¡ ƒD �]\}	}
|rÒ||	 }|jrœ|
jsœtrftd|f ƒ qf|jrÀ|
|jkrÀtrftd	|f ƒ qf|rÒ|j|jd
� |�rh|j�rh|j}|jtjjtjjfk�r|||
|ft||jd�Ž7 }nJ||
|f|Ž}| |
¡�r@||7 }n&||||f|Ž7 }t�rztd|f ƒ qf|||
|f|Ž7 }qf�nbt	|jjƒD �]R\}	}z||j }
W n* tk
�rÎ   t d|j|f ¡‚Y nX |j�rü|j|k�rüt�rŒtd|f ƒ �qŒ|j�r(|
|jk�r(t�rŒtd	|f ƒ �qŒ|�r<|j|jd
� |j}|j�rÌ|jtjjtjjfk�r€|||
|ft||jd�Ž7 }nJ||
|f|Ž}| |
¡�r¤||7 }n&||||f|Ž7 }t�rÞtd|f ƒ n|||
|f|Ž7 }�qŒ|ddfS )Nr)   ÚomitEmptyOptionalsz$%sencoding empty OPTIONAL componentsznot r*   úASN.1 object ú is inconsistentz"not encoding OPTIONAL component %rz!not encoding DEFAULT component %r)r+   )ÚwrapTypeúwrapped with wrap type %rz#Component name "%s" not found in %rT)r-   r„   r/   ÚisInconsistentr   r   Ú	__class__r7   ÚcomponentTyper.   ÚvaluesZ
isOptionalZisValueZisDefaultedZ
asn1ObjectÚupdateZopenTypeÚtypeIdr	   ÚSetOfÚ
SequenceOfÚdictÚisSameTypeWithÚ
namedTypesÚnameÚKeyError)r   r$   r%   r&   r'   r   r„   Úinconsistencyr“   r4   Ú	componentÚ	namedTyper‡   rT   ZcomponentSpecr   r   r   r(   /  s¬     ÿ
ÿ
ÿ ÿ ÿþ
 ÿ ÿ ÿþ
zSequenceEncoder.encodeValueN)r7   r8   r9   r„   r(   r   r   r   r   rƒ   *  s   rƒ   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚSequenceOfEncoderc                 K   s    |d kr*|j }|r0t d|jj› d�¡‚n|j}g }| dd ¡}t|ƒD ]R\}}	||	|f|Ž}
|d k	r�| |	¡s�||
|f|Ž}
t	r�t	d|f ƒ | 
|
¡ qH|S )Nr…   r†   r‡   rˆ   )r‰   r   r   rŠ   r7   r‹   Úpopr.   r’   r/   Úappend)r   r$   r%   r&   r'   r–   Úchunksr‡   r4   r—   rT   r   r   r   Ú_encodeComponents¦  s&    ÿÿz#SequenceOfEncoder._encodeComponentsc                 K   s"   | j |||f|Ž}d |¡ddfS )Nr)   T)r�   Újoin)r   r$   r%   r&   r'   rœ   r   r   r   r(   Ä  s      ÿÿzSequenceOfEncoder.encodeValueN)r7   r8   r9   r�   r(   r   r   r   r   r™   ¥  s   r™   c                   @   s   e Zd Zdd„ ZdS )ÚChoiceEncoderc                    s~   |d krˆ   ¡ }nX‡ fdd„|jjD ƒ}t|ƒdkrRt dt|ƒrFdpHdˆ f ¡‚|d }ˆ | }|| }|||f|ŽddfS )	Nc                    s   g | ]}|j ˆ kr|j ‘qS r   )r”   )Ú.0r˜   ©r$   r   r   Ú
<listcomp>Ð  s    
ÿz-ChoiceEncoder.encodeValue.<locals>.<listcomp>r?   z%s components for Choice at %rz	Multiple zNone r   T)ZgetComponentr‹   r“   r   r   r   )r   r$   r%   r&   r'   r—   Únamesr”   r   r¡   r   r(   Ì  s    
zChoiceEncoder.encodeValueNr=   r   r   r   r   rŸ   Ë  s   rŸ   c                   @   s   e Zd Zdd„ ZdS )Ú
AnyEncoderc                 K   s>   |d kr|  ¡ }nt|tƒs*| |¡  ¡ }|| dd¡ dfS )Nr!   T)rK   rR   r1   rJ   r-   r#   r   r   r   r(   Þ  s
    

zAnyEncoder.encodeValueNr=   r   r   r   r   r¤   Ý  s   r¤   c                   @   s4   e Zd ZdZdZeZeZeefdd„Zddd„Z	dS )ÚSingleItemEncoderNc                 K   s,   |t k	r|n| j| _|t k	r |n| j| _d S )N)r   ÚTAG_MAPÚ_tagMapÚTYPE_MAPÚ_typeMap)r   ÚtagMapÚtypeMapZignoredr   r   r   Ú__init__4  s    zSingleItemEncoder.__init__c           	      K   s¤  z|d kr|j }n|j }W n$ tk
r>   t d|f ¡‚Y nX tr†td| dd¡ rZdp\d| dd¡|d krv| ¡ p|| ¡ |f ƒ | jd k	rž|j| jd	� | j	d k	r¶|j| j	d
� z&| j
| }trÚtd|jj|f ƒ W nŽ tk
�rj   |d krþ|j}n|j}t |j|j¡}z| j| }W n( tk
�rJ   t d||f ¡‚Y nX t�rftd|jj|f ƒ Y nX |j||| f|Ž}t�r td|t|ƒt |¡f ƒ |S )Nz<Value %r is not ASN.1 type instance and "asn1Spec" not givenzBencoder called in %sdef mode, chunk size %s for type %s, value:
%sr!   TÚinr*   rG   r   )r!   )rG   z)using value codec %s chosen by type ID %szNo encoder for %r (%s)z(using value codec %s chosen by tagSet %sz;codec %s built %s octets of substrate: %s
encoder completed)rŽ   ÚAttributeErrorr   r   r/   r-   ZprettyPrintTypeÚfixedDefLengthModer�   ÚfixedChunkSizer©   rŠ   r7   r•   r,   r   rM   rL   r§   r   r   r   r0   )	r   r$   r%   r'   rŽ   ZconcreteEncoderr,   Z
baseTagSetr   r   r   r   Ú__call__8  s`    
ÿ
 ýÿ



ÿ

ÿÿÿzSingleItemEncoder.__call__)N)
r7   r8   r9   r¯   r°   r¦   r¨   r   r¬   r±   r   r   r   r   r¥   -  s   r¥   c                   @   s(   e Zd ZeZeefdd„Zddd„ZdS )r   c                 K   s   | j f ||dœ|—Ž| _d S )N©rª   r«   )ÚSINGLE_ITEM_ENCODERÚ_singleItemEncoder)r   rª   r«   r'   r   r   r   r¬   w  s     ÿÿzEncoder.__init__Nc                 K   s   | j |fd|i|—ŽS )Nr%   )r´   )r   ZpyObjectr%   r'   r   r   r   r±   |  s    ÿÿÿzEncoder.__call__)N)r7   r8   r9   r¥   r³   r   r¬   r±   r   r   r   r   r   t  s   )Úattrc                 C   sB   dddœ  | ¡ }r6t | › d|› d�t¡ tƒ | S t| ƒ‚d S )Nr¦   r¨   r²   z is deprecated. Please use z	 instead.)r-   ÚwarningsÚwarnÚDeprecationWarningÚglobalsr®   )rµ   ZnewAttrr   r   r   Ú__getattr__¶  s    
rº   )KÚsysr¶   Zpyasn1r   r   Zpyasn1.codec.berr   Zpyasn1.compatr   Zpyasn1.compat.integerr   Zpyasn1.typer   r   r	   r
   Ú__all__ZregisterLoggeer7   ZDEBUG_ENCODERr/   Úobjectr   r:   r>   rB   rF   rQ   rU   rV   rc   rd   rƒ   r™   rŸ   r¤   ZendOfOctetsr,   ÚBooleanZIntegerZ	BitStringZOctetStringZNullZObjectIdentifierZRelativeOIDZ
EnumeratedÚRealr�   r�   ZChoiceZ
UTF8StringZNumericStringZPrintableStringZTeletexStringZVideotexStringZ	IA5StringZGraphicStringZVisibleStringZGeneralStringZUniversalStringZ	BMPStringZObjectDescriptorZGeneralizedTimeZUTCTimer¦   rŽ   ÚSetÚSequenceÚAnyr¨   r¥   r   r   Ústrrº   r   r   r   r   Ú<module>   s$   )=;! ({&                           â#                             à$G@