o
    Zhdt                     @   s0  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#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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@i 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 ZHd-eIf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   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   ZtagFormatConstructed)self	singleTagisConstructedZtagClassZ	tagFormatZtagIdZ
encodedTag	substrate r   O/var/www/html/lang_env/lib/python3.10/site-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   Z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   s   
zAbstractItemEncoder.encodeValueNc                 K   s  |d u r|j }n|j }|s| j|||fi |\}}}|S |dd}	d}t|jD ]\}
}|	}|
sz| j|||fi |\}}}W n tjyX } z	td||f d }~ww trhtd|radpbd||f  |sv|rv|dd	rv|  S |sd}trtd
 | ||}trtd|rdpd|t	
t|f  || t||7 }trtdt|t	
t|f  |rt|| }|s|| j7 }q*|| }|s|| j7 }q*|st|}|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   sx   



zAbstractItemEncoder.encode)NN)__name__
__module____qualname__r   r3   r1   r2   r   r"   r(   r   r   r   r   r   r      s    r   c                   @      e Zd Zdd ZdS )EndOfOctetsEncoderc                 K      dS Nr)   FTr   r#   r   r   r   r(         zEndOfOctetsEncoder.encodeValueNr7   r8   r9   r(   r   r   r   r   r;          r;   c                   @      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   rC          rC   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 r*   )r   FF)rE   FFT)signedF)r/   supportCompactZeror   intr#   r   r   r   r(      s   zIntegerEncoder.encodeValueN)r7   r8   r9   r   rJ   r(   r   r   r   r   rH      s    rH   c                   @   r:   )BitStringEncoderc                 K   s  |d ur	| |}t|}|d r|d|d  > }n|}|dd}|r,t||d kr@| }tt|d | f| ddfS trHtd|  |jj}	|	rUt	|	|	}
nt	 }
|j |
d}d}d}||k r|}t
||d  |}||||| |fi |7 }||k sg|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alignedValuerM   r   rR   r,   stopstartr   r   r   r(      s2   
 
zBitStringEncoder.encodeValueNr@   r   r   r   r   rL      rA   rL   c                   @   r:   )OctetStringEncoderc                 K   s   |d u r	|  }nt|ts||  }n|}|dd}|r&t||kr+|ddfS tr3td|  |d u rO|jj}|rDt	
||}nt	
 }|j|d}nt|tsk|jj}|rat	
||}nt	
 }|j|d}d}	d}	 ||	|	|  }
|
s{n|||
|fi |7 }|	|7 }	qp|ddfS )NrM   r   FTrN   rO   r)   )rQ   
isinstancer1   rP   r-   r   r/   r,   rR   r   rS   )r   r$   r%   r&   r'   r   rM   rR   r,   poschunkr   r   r   r(      s@   




zOctetStringEncoder.encodeValueNr@   r   r   r   r   rW      s    rW   c                   @   rB   )NullEncoderFc                 K   r<   r=   r   r#   r   r   r   r(   #  r?   zNullEncoder.encodeValueNrF   r   r   r   r   r[      rG   r[   c                   @   rB   )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 d	}|D ]?}	d|	  krd
krn n||	f7 }q|	d
kr|	d
@ f}
|	dL }	|	rd|	d
@ B f|
 }
|	dL }	|	s||
7 }qtd|	|f |ddfS )Nr   rD   zShort OID %s'   (      P   z"Impossible first/second arcs at %sr   r   r   r   zNegative OID arc %s at %sF)rP   asTuple
IndexErrorr   r   )r   r$   r%   r&   r'   oidfirstsecondoctetssubOidresr   r   r   r(   *  sD   



z#ObjectIdentifierEncoder.encodeValueNrF   r   r   r   r   r\   '  rG   r\   c                   @   rB   )RelativeOIDEncoderFc                 K   s   |d ur	| |}d}| D ]?}d|  krdkr#n n||f7 }q|dkrF|d@ f}|dL }|rAd|d@ B f| }|dL }|s2||7 }qtd||f |ddfS )Nr   r   r   r   r   z"Negative RELATIVE-OID arc %s at %sF)rP   ra   r   r   )r   r$   r%   r&   r'   rf   rg   rh   r   r   r   r(   e  s    



zRelativeOIDEncoder.encodeValueNrF   r   r   r   r   ri   b  rG   ri   c                   @   s0   e Zd ZdZdZedd Zdd Zdd Zd	S )
RealEncoderFr_   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)rD   rD   r   r   r_            TrD   )absrK   )mencbaseemsesr   r   r   _dropFloatingPoint  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rtd|	|||f  |||	|fS )N)r_   r   rm   rD   r_   infrl   zMautomatically chosen REAL encoding base %s, sign %s, mantissa %s, exponent %s)
binEncBaseru   floatrangero   rK   r/   )r   r$   rp   brr   ZencBaseZmantissaexponentsignrq   ir   r   r   _chooseEncBase  s6   




4
zRealEncoder._chooseEncBasec                 K   s  |d ur	| |}|jrdS |jrdS |\}}}|sdS |dkr6tr&td d||dkr.dp/d	|f d
dfS |dkrgd}| |\}	}}
}|	dk rN|dO }|
dkrg|d@ dkrf|dL }|d7 }|d@ dksXn5|
dkr|d@ dkr|dL }|d7 }|d@ dksq|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rtd||d> O }d	}|dks|dkrt|d@ f}n<|dvrt|d@ f| }|dL }|dvs|dkr|r|d d@ rtd| }|dkr|r|d d@ std| }t|}|dkrtd|dkr#n!|dkr-|dO }n|dkr7|dO }n|dO }t|d@ f| }d	}|rYt|d@ f| }|dL }|sIt|f| | }|d
dfS td| )N))@   FF))A   FFr>   
   z!encoding REAL into character forms   %dE%s%dr      +r)   FTr_   r   r   rD   r   r   rl   rm      rn       zScale factor overflowrk   r   )r   rk   rE   )r   zReal exponent overflowzProhibited Real base %s)	rP   Z	isPlusInfZ
isMinusInfr/   r~   r   r   r1   r   )r   r$   r%   r&   r'   rp   rz   rr   fors   rq   Zsfeonpor   r   r   r   r(     s   

 










zRealEncoder.encodeValueN)	r7   r8   r9   r   rw   staticmethodru   r~   r(   r   r   r   r   rj     s    
!rj   c                   @   rB   )SequenceEncoderFc              	   K   s  d}| d| j}trtd|rdpd  |d u r|j}|r)td|jj d|j}t	|
 D ]\}	}
|rg||	 }|jrL|
jsLtrKtd|f  q2|jr^|
|jkr^tr]td	|f  q2|rg|j|jd
 |r|jr|j}|jtjjtjjfv r|||
|fi t||jd7 }q2||
|fi |}||
r||7 }q2||||fi |7 }trtd|f  q2|||
|fi |7 }q2nt	|jjD ]\}	}z||j }
W n ty   td|j|f w |jr|j|vrtrtd|f  q|jr
|
|jkr
tr	td	|f  q|r|j|jd
 |j}|jrb|jtjjtjjfv r8|||
|fi t||jd7 }q||
|fi |}||
rL||7 }q||||fi |7 }tratd|f  q|||
|fi |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   rZ   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 u r|j }|rtd|jj dn|j}g }|dd }t|D ]-\}}	||	|fi |}
|d urL||	sL||
|fi |}
t	rLt	d|f  |
|
 q$|S )Nr   r   r   r   )r   r   r   r   r7   r   popr.   r   r/   append)r   r$   r%   r&   r'   r   chunksr   r4   r   rZ   r   r   r   _encodeComponents  s(   z#SequenceOfEncoder._encodeComponentsc                 K   s&   | j |||fi |}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                   @   r:   )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>rD   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     rA   r   c                   @   r:   )
AnyEncoderc                 K   s>   |d u r	|  }nt|ts||  }||dd dfS )Nr!   T)rQ   rX   r1   rP   r-   r#   r   r   r   r(     s
   

zAnyEncoder.encodeValueNr@   r   r   r   r   r     rA   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   s2   |t ur|n| j| _|t ur|| _d S | 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 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rtd|jj|f  Y nw |j||| fi |}trt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*   rM   r   )r!   )rM   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   rS   rR   r   r   r   r   r0   )	r   r$   r%   r'   r   ZconcreteEncoderr,   Z
baseTagSetr   r   r   r   __call__8  sj   





zSingleItemEncoder.__call__r   )
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 d||d|| _d S )Nr   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__r   )r7   r8   r9   r   r   r   r   r   r   r   r   r   r   t  s    attrc                 C   s>   ddd |  }rt|  d| dt t | S t| )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;   rC   rH   rL   rW   r[   r\   ri   rj   r   r   r   r   ZendOfOctetsr,   Boolean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@