U
    "FZhdt                  :   @   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   _/home/aprabhat/apps/x.techxrdev.in/venv/lib/python3.8/site-packages/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rtd|rdpd||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  |rt|| }|s|| j7 }qP|| }|sP|| j7 }qP|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   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rtd|  |jj}	|	rt	|	|	}
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}|rt	
||}nt	
 }|j|d}n8t|ts|jj}|rt	
||}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rn 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 }|rd|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 }qqq|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 st||
 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rd}| |\}	}}
}|	dk r|dO }|
dkr|d@ dkr|dL }|d7 }qnX|
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rt|d@ f}n||dkrt|d@ f| }|dL }q|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.nB|dkrB|dO }n.|dkrV|dO }n|dO }t|d@ f| }d	}|rt|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n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strftd|f  qf|jr|
|jkrt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rtrtd|f  q|jr(|
|jkr(trt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rt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	rt	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rt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rt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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*   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,   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@