o
    y‡jql  ã                   @   sü  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	m
Z
mZmZmZmZ d dlmZ d dlmZ d d	lmZ d d
lmZ 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&i 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ƒ ej@j(eƒ ejAj(eƒ i	¥ZBi ej)jCeƒ “ej*jCeƒ “ej+jCeƒ “ej,jCeƒ “ej-jCe ƒ “ej.jCe!ƒ “ej/jCeƒ “ej0jCe"ƒ “ejDjCe#ƒ “ej2jCe$ƒ “ejEjCe#ƒ “ej1jCe$ƒ “ej3jCe%ƒ “ejFjCe&ƒ “ej4jCeƒ “ej5jCeƒ “ej6jCeƒ “ej7jCeƒ ej8jCeƒ ej9jCeƒ ej:jCeƒ ej;jCeƒ ej<jCeƒ ej=jCeƒ ej>jCeƒ ej?jCeƒ ej@jCeƒ ejAjCeƒ i¥ZGG d'd(„ d(eƒZHeHeBeGƒZIdS ))é    N)Údebug)Úerror)Úeoo)Úto_bytes)Úint2octÚoct2intÚ	ints2octsÚnullÚstr2octsÚisOctetsType)Úchar)Útag)Úuniv)ÚusefulÚ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   st   |\}}}||B }|r|t jO }|dk r||B fS |d@ f}|dL }|r3d|d@ B f| }|dL }|s$|dB f| S )Né   é   é   é€   )r   ÚtagFormatConstructed)ÚselfÚ	singleTagÚisConstructedÚtagClassÚ	tagFormatÚtagIdÚ
encodedTagÚ	substrate© r    ú:/usr/lib/python3/dist-packages/pyasn1/codec/ber/encoder.pyÚ	encodeTag!   s   



þzAbstractItemEncoder.encodeTagc                 C   sj   |s| j rdS |dk r|fS d}|r|d@ f| }|dL }|st|ƒ}|dkr.t d| ¡‚d|B f| S )N)r   r   r    éÿ   é   é~   zLength octets overflow (%d))ÚsupportIndefLenModeÚlenr   ÚPyAsn1Error)r   ÚlengthÚdefModer   ÚsubstrateLenr    r    r!   ÚencodeLength5   s   
þz AbstractItemEncoder.encodeLengthc                 K   s
   t  d¡‚)NzNot implemented)r   r(   ©r   ÚvalueÚasn1SpecÚ	encodeFunÚoptionsr    r    r!   ÚencodeValueI   ó   
zAbstractItemEncoder.encodeValueNc              
   K   s´  |d u r|j }n|j }|s| j|||fi |¤Ž\}}}|S | dd¡}	t}t|jƒD ]§\}
}|	}|
s�z| j|||fi |¤Ž\}}}W n tjyY   t 	¡ }t d||d f ¡‚w t
rit
d|rbdpcd||f ƒ |sw|rw| dd	¡rw|  S |s�d}t
r�t
d
ƒ |  ||¡}t
r›t
d|r�dp�d|t t|ƒ¡f ƒ ||  t|ƒ|¡7 }t
r¶t
dt|ƒt t|ƒ¡f ƒ |rÆt|ƒ| }|sÅ|| j7 }q*|| }|sÑ|| j7 }q*|sØt|ƒ}|S )Nr*   TzError encoding %r: %sé   z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)ÚtagSetr2   Úgetr	   Ú	enumerateÚ	superTagsr   r(   ÚsysÚexc_infoÚLOGr"   r   Úhexdumpr   r,   r'   ÚeooOctetsSubstrateÚeooIntegerSubstrate)r   r.   r/   r0   r1   r7   r   r   ÚisOctetsr*   Úidxr   ÚdefModeOverrideÚexcÚheaderr    r    r!   r   L   sx   ÿÿÿÿÿþÿ
þÿ
€
€zAbstractItemEncoder.encode)NN)Ú__name__Ú
__module__Ú__qualname__r&   r@   r   r?   r"   r,   r2   r   r    r    r    r!   r      s    r   c                   @   ó   e Zd Zdd„ ZdS )ÚEndOfOctetsEncoderc                 K   ó
   t ddfS ©NFT©r	   r-   r    r    r!   r2   œ   r3   zEndOfOctetsEncoder.encodeValueN©rF   rG   rH   r2   r    r    r    r!   rJ   ›   ó    rJ   c                   @   ó   e Zd ZdZdd„ ZdS )ÚBooleanEncoderFc                 K   s   |rdpdddfS )N)r4   ©r   Fr    r-   r    r    r!   r2   £   s   zBooleanEncoder.encodeValueN©rF   rG   rH   r&   r2   r    r    r    r!   rQ       ó    rQ   c                   @   s   e Zd ZdZdZdd„ ZdS )ÚIntegerEncoderFc                 K   sF   |dkrt 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 r5   )r    FF)rR   FFT)ÚsignedF)r=   ÚsupportCompactZeror   Úintr-   r    r    r!   r2   «   s   ÿzIntegerEncoder.encodeValueN)rF   rG   rH   r&   rW   r2   r    r    r    r!   rU   §   s    rU   c                   @   rI   )ÚBitStringEncoderc                 K   s  |d ur	|  |¡}t|ƒ}|d r|d|d  > }n|}| dd¡}|r,t|ƒ|d kr?| ¡ }tt|ƒd | ƒ| ddfS trGtd| ƒ |jj}	|	rTt 	|	|	¡}
nt 	¡ }
|j |
d�}d}t
}||k r„|}t||d  |ƒ}|||||… |fi |¤Ž7 }||k sf|ddfS )Nr$   ÚmaxChunkSizer   FTú#encoding into up to %s-octet chunks©r7   )Úcloner'   r8   ÚasOctetsr   r=   r7   ÚbaseTagr   ÚTagSetr	   Úmin)r   r.   r/   r0   r1   ÚvalueLengthÚalignedValuerZ   r   r_   r7   ÚstopÚstartr    r    r!   r2   ¼   s2   
ý
zBitStringEncoder.encodeValueNrN   r    r    r    r!   rY   »   rO   rY   c                   @   rI   )ÚOctetStringEncoderc                 K   s  |d u r	|  ¡ }nt|ƒs| |¡  ¡ }n|}| dd¡}|r%t|ƒ|kr*|ddfS tr2td| ƒ |d u rN|jj}|rCt 	||¡}nt 	¡ }|j|d�}nt|ƒsi|jj}|r_t 	||¡}nt 	¡ }|j|d�}d}	t
}	 ||	|	| … }
|
syn|||
|fi |¤Ž7 }|	|7 }	qn|ddfS )NrZ   r   FTr[   r\   )r^   r   r]   r8   r'   r=   r7   r_   r   r`   r	   )r   r.   r/   r0   r1   r   rZ   r_   r7   ÚposÚchunkr    r    r!   r2   æ   s@   

ú
zOctetStringEncoder.encodeValueNrN   r    r    r    r!   rf   ä   s    rf   c                   @   rP   )ÚNullEncoderFc                 K   rK   rL   rM   r-   r    r    r!   r2   $  r3   zNullEncoder.encodeValueNrS   r    r    r    r!   ri   !  rT   ri   c                   @   rP   )ÚObjectIdentifierEncoderFc                 K   sž  |d ur	|  |¡}| ¡ }z
|d }|d }W n ty&   t d|f ¡‚w d|  kr1dkrin n6|dkrC|d f|dd …  }n>|dkrQ|f|dd …  }n0|dkra|d f|dd …  }n t d|f ¡‚|dkry|d f|dd …  }nt d|f ¡‚g }|D ]B}	d|	  kr‘d	kr™n n| |	¡ q…|	d	kr¿|	d	@ g}
|	d
L }	|	r·|
 d|	d	@ B ¡ |	d
L }	|	s¨| t|
ƒ¡ q…t d|	|f ¡‚t|ƒddfS )Nr   r4   zShort OID %sé'   é(   é   éP   z"Impossible first/second arcs at %sr   r   r   zNegative OID arc %s at %sF)	r]   ÚasTupleÚ
IndexErrorr   r(   ÚappendÚextendÚreversedÚtuple)r   r.   r/   r0   r1   ÚoidÚfirstÚsecondÚoctetsÚsubOidÚresr    r    r!   r2   +  sD   
ÿ
þz#ObjectIdentifierEncoder.encodeValueNrS   r    r    r    r!   rj   (  rT   rj   c                   @   s0   e Zd ZdZdZedd„ ƒZdd„ Zdd„ Zd	S )
ÚRealEncoderr   rm   c                 C   s¼   d\}}| dk r
d}|dk rd}| |9 } |dkr-| dt |ƒd |  9 } t |ƒd | }n|dkrE| dt |ƒd |  9 } t |ƒd | }	 t| ƒ| krU| |9 } |d
8 }qE	 |t| ƒ||fS )N)r4   r4   r   éÿÿÿÿr$   rm   é   é   é   Tr4   )ÚabsrX   )ÚmÚencbaseÚeÚmsÚesr    r    r!   Ú_dropFloatingPointg  s&   zRealEncoder._dropFloatingPointc                 C   s  |\}}}g d¢}|j |v r|  ||j |¡S | j |v r#|  || j |¡S |||g}|||g}d}d}	tdƒ}tdƒD ]A}
|  ||
 ||
 ||
 ¡\}||
< ||
< ||
< t||
 ƒt|ƒk slt||
 ƒt|ƒkrz||
 |k rz||
 }t||
 ƒ}||
 }	q9tr‡td|	|||f ƒ |||	|fS )N)rm   r$   r~   r4   rm   Úinfr}   zMautomatically chosen REAL encoding base %s, sign %s, mantissa %s, exponent %s)Ú
binEncBaser†   ÚfloatÚranger€   rX   r=   )r   r.   r�   Úbrƒ   ÚencBaseÚmantissaÚexponentÚsignr‚   Úir    r    r!   Ú_chooseEncBaseƒ  s6   




ý4€
ÿzRealEncoder._chooseEncBasec                 K   sä  |d ur	|  |¡}|jrdS |jrdS |\}}}|stddfS |dkr;tr)tdƒ td||dkr2d	p3d
|f ƒddfS |dk�rkd}|  |¡\}	}}
}|	dk rS|dO }|
dkrl|d@ dkrk|dL }|d7 }|d@ dks]n5|
dkr‰|d@ dkr„|dL }|d7 }|d@ dksv|dO }n|d@ dkr�|dL }|d7 }|d@ dks�|dO }d}|d@ dkr·|dL }|d7 }|d@ dks©|dkrÀt d¡‚||d> O }t}|dksÐ|dkr×t	|d@ ƒ}n?|dvrët	|d@ ƒ| }|dL }|dvsÛ|dkrÿ|rÿt
|d ƒd@ rÿt	dƒ| }|dk�r|�rt
|d ƒd@ �st	dƒ| }t|ƒ}|dk�r$t d¡‚|dk�r*n |dk�r4|dO }n|dk�r>|dO }n|dO }t	|d@ ƒ| }t}|�r^t	|d@ ƒ| }|dL }|�sOt	|ƒ| | }|ddfS t d| ¡‚)N))é@   FF))éA   FFFTé
   z!encoding REAL into character formz%dE%s%dr   ú+r5   rm   r   r’   r4   r$   r   r}   r~   é   r   é    zScale factor overflowr|   r#   )r   r|   zReal exponent overflowzProhibited Real base %s)r]   Ú	isPlusInfÚ
isMinusInfr	   r=   r
   r‘   r   r(   r   r   r'   )r   r.   r/   r0   r1   r�   r‹   rƒ   Úfor„   r‚   ÚsfÚeoÚnÚpor   r    r    r!   r2   ¤  s’   


$
þ€þ
þþ
þ"






þ
zRealEncoder.encodeValueN)	rF   rG   rH   r&   rˆ   Ústaticmethodr†   r‘   r2   r    r    r    r!   r{   c  s    
!r{   c                   @   rP   )ÚSequenceEncoderFc              	   K   sÎ  t }| d| j¡}trtd|rdpd ƒ |d u r·|j}|r |‚|j}t| ¡ ƒD ]Œ\}	}
|r^||	 }|jrC|
j	sCtrBtd|f ƒ q)|j
rU|
|jkrUtrTtd|f ƒ q)|r^|j|jd� |rª|jrª|j}|jtjjtjjfv r‚|||
|fi t||jd�¤Ž7 }q)||
|fi |¤Ž}| |
¡r•||7 }q)||||fi |¤Ž7 }tr©td	|f ƒ q)|||
|fi |¤Ž7 }q)n«t|jjƒD ]¤\}	}z||j }
W n tyÙ   t d
|j|f ¡‚w |jrì|j|vrìtrëtd|f ƒ q½|j
rþ|
|jkrþtrýtd|f ƒ q½|�r|j|jd� |j}|j�rV|jtjjtjjfv �r,|||
|fi t||jd�¤Ž7 }q½||
|fi |¤Ž}| |
¡�r@||7 }q½||||fi |¤Ž7 }t�rUtd	|f ƒ q½|||
|fi |¤Ž7 }q½|ddfS )NÚomitEmptyOptionalsz$%sencoding empty OPTIONAL componentsznot r5   z"not encoding OPTIONAL component %rz!not encoding DEFAULT component %r)r6   )ÚwrapTypeúwrapped with wrap type %rz#Component name "%s" not found in %rT)r	   r8   r¡   r=   ÚisInconsistentÚcomponentTyper9   ÚvaluesÚ
isOptionalÚisValueÚisDefaultedÚ
asn1ObjectÚupdateÚopenTypeÚtypeIdr   ÚSetOfÚ
SequenceOfÚdictÚisSameTypeWithÚ
namedTypesÚnameÚKeyErrorr   r(   )r   r.   r/   r0   r1   r   r¡   Úinconsistencyr²   rB   Ú	componentÚ	namedTyper¢   rh   ÚcomponentSpecr    r    r!   r2     s¤   ÿ
ÿ
ÿÿ
þ

€Ö.ÿÿÿÿ
þ
€
zSequenceEncoder.encodeValueN)rF   rG   rH   r¡   r2   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 u r|j }|r|‚n|j}g }| dd ¡}t|ƒD ]-\}}	||	|fi |¤Ž}
|d urC| |	¡sC||
|fi |¤Ž}
trCtd|f ƒ | |
¡ q|S )Nr¢   r£   )r¤   r¥   Úpopr9   r±   r=   rq   )r   r.   r/   r0   r1   rµ   Úchunksr¢   rB   r¶   rh   r    r    r!   Ú_encodeComponents…  s$   ÿÿz#SequenceOfEncoder._encodeComponentsc                 K   s&   | j |||fi |¤Ž}t |¡ddfS )NT)r¼   r	   Újoin)r   r.   r/   r0   r1   r»   r    r    r!   r2   ¢  s   ÿÿzSequenceOfEncoder.encodeValueN)rF   rG   rH   r¼   r2   r    r    r    r!   r¹   „  s    r¹   c                   @   rI   )ÚChoiceEncoderc                    s‚   |d u r	ˆ   ¡ }n,‡ fdd„|jjD ƒ}t|ƒdkr)t dt|ƒr#dp$dˆ f ¡‚|d }ˆ | }|| }|||fi |¤ŽddfS )	Nc                    s   g | ]
}|j ˆ v r|j ‘qS r    )r³   )Ú.0r·   ©r.   r    r!   Ú
<listcomp>®  s    
ÿz-ChoiceEncoder.encodeValue.<locals>.<listcomp>r4   z%s components for Choice at %rz	Multiple zNone r   T)ÚgetComponentr¥   r²   r'   r   r(   )r   r.   r/   r0   r1   r¶   Únamesr³   r    rÀ   r!   r2   ª  s   
zChoiceEncoder.encodeValueNrN   r    r    r    r!   r¾   ©  rO   r¾   c                   @   rI   )Ú
AnyEncoderc                 K   s<   |d u r	|  ¡ }nt|ƒs| |¡  ¡ }|| dd¡ dfS )Nr*   T)r^   r   r]   r8   r-   r    r    r!   r2   ¼  s
   
zAnyEncoder.encodeValueNrN   r    r    r    r!   rÄ   »  rO   rÄ   c                   @   s*   e Zd ZdZdZi fdd„Zddd„ZdS )ÚEncoderNc                 C   s   || _ || _d S ©N)Ú_Encoder__tagMapÚ_Encoder__typeMap)r   ÚtagMapÚtypeMapr    r    r!   Ú__init__  s   
zEncoder.__init__c           	      K   s’  z|d u r	|j }n|j }W n ty   t d|f ¡‚w tr@td| dd¡ r*dp+d| dd¡|d u r8| ¡ p;| ¡ |f ƒ | jd urL|j| jd	� | j	d urX|j| j	d
� z| j
| }trjtd|jj|f ƒ W n@ ty«   |d u rz|j}n|j}t |j|j¡}z| j| }W n tyœ   t d||f ¡‚w tr©td|jj|f ƒ Y nw |j||| fi |¤Ž}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Úinr5   rZ   r   )r*   )rZ   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=   r8   ÚprettyPrintTypeÚfixedDefLengthModer«   ÚfixedChunkSizerÈ   Ú	__class__rF   r´   r7   r   r`   r_   rÇ   r   r'   r   r>   )	r   r.   r/   r1   r­   ÚconcreteEncoderr7   Ú
baseTagSetr   r    r    r!   Ú__call__  sR   €ÿÿ8ÿ


€ÿ€ðzEncoder.__call__rÆ   )rF   rG   rH   rÏ   rÐ   rË   rÔ   r    r    r    r!   rÅ   	  s
    rÅ   )Jr;   Úpyasn1r   r   Úpyasn1.codec.berr   Úpyasn1.compat.integerr   Úpyasn1.compat.octetsr   r   r   r	   r
   r   Úpyasn1.typer   r   r   r   Ú__all__ÚregisterLoggeerF   ÚDEBUG_ENCODERr=   Úobjectr   rJ   rQ   rU   rY   rf   ri   rj   r{   r    r¹   r¾   rÄ   ÚendOfOctetsr7   ÚBooleanÚIntegerÚ	BitStringÚOctetStringÚNullÚObjectIdentifierÚ
EnumeratedÚRealr¯   r®   ÚChoiceÚ
UTF8StringÚNumericStringÚPrintableStringÚTeletexStringÚVideotexStringÚ	IA5StringÚGraphicStringÚVisibleStringÚGeneralStringÚUniversalStringÚ	BMPStringÚObjectDescriptorÚGeneralizedTimeÚUTCTimerÉ   r­   ÚSetÚSequenceÚAnyrÊ   rÅ   r   r    r    r    r!   Ú<module>   sò     )=; (z%

ÿ
þ
ý
ü
û
ú
ù
ø
	÷
õ
ô
ó
ñ
ð
ï
î
í








ã!
ÿ
þ
ý
ü
û
ú
ù
ø

ö
õ
ô
ó
ò
ñ
ï
î
í










á#q