U
    Z\                  8   @   s  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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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 i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j,j>e ej.j>e  ejAj>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 iZBG d%d& d&eZCeCe=eBZDd'S )(    )debug)error)eoo)to_bytes)int2octoct2int	ints2octsnullstr2octsisOctetsType)char)tag)univ)usefulencodec                   @   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   :/usr/lib/python3/dist-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   ZlengthdefModer   ZsubstrateLenr   r   r   encodeLength,   s    

z AbstractItemEncoder.encodeLengthc                 K   s   t dd S )NzNot implemented)r   r"   r   valueasn1Spec	encodeFunoptionsr   r   r   encodeValue;   s    zAbstractItemEncoder.encodeValueNc                 K   s   |d kr|j }n|j }|s6| j|||f|\}}}|S |dd}	t|jD ]\}
}|	}|
s| j|||f|\}}}|s|r|ddr|  S |sd}| ||}|| t||7 }|rt|| }|s|| j	7 }qL|| }|sL|| j
7 }qL|st|}|S )Nr#   T
ifNotEmptyF)tagSetr*   get	enumerateZ	superTagsr   r$   r!   r   eooOctetsSubstrateeooIntegerSubstrate)r   r&   r'   r(   r)   r,   r   r   ZisOctetsr#   idxr   ZdefModeOverrideheaderr   r   r   r   >   sN      
  
zAbstractItemEncoder.encode)NN)__name__
__module____qualname__r    r0   r   r/   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
   t ddfS NFTr	   r%   r   r   r   r*   u   s    zEndOfOctetsEncoder.encodeValueNr3   r4   r5   r*   r   r   r   r   r6   t   s   r6   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r3   r4   r5   r    r*   r   r   r   r   r:   y   s   r:   c                   @   s   e Zd ZdZdZdd ZdS )IntegerEncoderFc                 K   s,   |dkr| j rdS dS tt|ddddfS )Nr   )r   FF)r<   FFT)ZsignedF)supportCompactZeror   intr%   r   r   r   r*      s
    zIntegerEncoder.encodeValueN)r3   r4   r5   r    r?   r*   r   r   r   r   r>      s   r>   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 | | ddfS |jj}	|	rt|	|	}
nt }
|j |
d}d}t	}||k r|}t
||d  |}||||| |f|7 }q|ddfS )Nr   maxChunkSizer   FTr,   )cloner!   r-   asOctetsr   r,   baseTagr   TagSetr	   min)r   r&   r'   r(   r)   ZvalueLengthZalignedValuerB   r   rF   r,   stopstartr   r   r   r*      s,    
zBitStringEncoder.encodeValueNr9   r   r   r   r   rA      s   rA   c                   @   s   e Zd Zdd ZdS )OctetStringEncoderc                 K   s
  |d kr|  }nt|s*||  }n|}|dd}|rJt||krT|ddfS |d kr|jj}|rvt||}nt }|j|d}n6t|s|jj}|rt||}nt }|j|d}d}	t	}||	|	|  }
|
sq|||
|f|7 }|	|7 }	q|ddfS d S )NrB   r   FTrC   )
rE   r   rD   r-   r!   r,   rF   r   rG   r	   )r   r&   r'   r(   r)   r   rB   rF   r,   poschunkr   r   r   r*      s8    


zOctetStringEncoder.encodeValueNr9   r   r   r   r   rK      s   rK   c                   @   s   e Zd ZdZdd ZdS )NullEncoderFc                 K   s
   t ddfS r7   r8   r%   r   r   r   r*      s    zNullEncoder.encodeValueNr=   r   r   r   r   rN      s   rN   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)rD   ZasTuple
IndexErrorr   r"   )r   r&   r'   r(   r)   ZoidfirstsecondZoctetsZsubOidresr   r   r   r*      s@    



z#ObjectIdentifierEncoder.encodeValueNr=   r   r   r   r   rO      s   rO   c                   @   s0   e Zd ZdZdZedd Zdd Zdd Zd	S )
RealEncoderr   rR   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   rR            r;   )absr@   )mencbaseemsZ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||
 }||
 }	qt|||	|fS )NrR   r   r[   r;   infrZ   )
binEncBaserb   floatranger]   r@   )r   r&   r^   br`   ZencBaseZmantissaZ	exponentaZsignr_   ir   r   r   _chooseEncBaseE  s,    





4
zRealEncoder._chooseEncBasec                 K   s  |d k	r| |}|jrdS |jr&dS |\}}}|s>tddfS |dkrjtd||dkrXdpZd	|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r@|dL }|d7 }q|dkrTtd||d
> O }t}|dksx|dkrt|d@ }n|dkrt|d@ | }|dL }q|dkr|rt	|d d@ rtd| }|dkr|rt	|d d@ std| }t
|}|dkr$td|dkr0n@|d
krD|dO }n,|dkrX|d
O }n|dO }t|d@ | }t}|rt|d@ | }|dL }qtt|| | }|ddfS td| d S )N))@   FF))A   FFFT
   z%dE%s%dr   + rR   r   rj   r;   r   r   rZ   r[      r\       zScale factor overflowrY   r   )r   rY   zReal exponent overflowzProhibited Real base %s)rD   Z	isPlusInfZ
isMinusInfr	   r
   ri   r   r"   r   r   r!   )r   r&   r'   r(   r)   r^   rg   r`   Zfora   r_   ZsfZeonZpor   r   r   r   r*   ]  s    


$






""







zRealEncoder.encodeValueN)	r3   r4   r5   r    rd   staticmethodrb   ri   r*   r   r   r   r   rX   *  s   
rX   c                   @   s   e Zd ZdZdd ZdS )SequenceEncoderFc              	   K   s  t }|d kr|  |j}t| D ]\}}|rn|| }	|	jrH|jsHq&|	jrZ||	jkrZq&| j	rn|j
|	jd |||f|}
|r|	jr|	j}|jr||s||
|f|}
||
7 }q&nt|jjD ]\}}	z||	j }W n* tk
r   td|	j|f Y nX |	jr|	j|krq|	jr0||	jkr0q| j	rF|j
|	jd |||| f|}
|	jr|	j}|jr||s||
|f|}
||
7 }q|ddfS )N)r+   z#Component name "%s" not found in %rT)r	   verifySizeSpeccomponentTyper.   valuesZ
isOptionalZisValueZisDefaultedZ
asn1ObjectomitEmptyOptionalsupdateZopenTyper,   ZisSameTypeWith
namedTypesnameKeyErrorr   r"   )r   r&   r'   r(   r)   r   ry   r1   	component	namedTyperM   ZwrapTyper   r   r   r*     sJ    

zSequenceEncoder.encodeValueN)r3   r4   r5   rw   r*   r   r   r   r   rs     s   rs   c                   @   s   e Zd Zdd ZdS )SequenceOfEncoderc                 K   sN   |d kr|   n|j}t}t|D ]\}}|||| |f|7 }q$|ddfS )NT)rt   ru   r	   r.   )r   r&   r'   r(   r)   r   r1   r|   r   r   r   r*     s    
zSequenceOfEncoder.encodeValueNr9   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   )rz   ).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getComponentru   ry   r!   r   r"   )r   r&   r'   r(   r)   r|   namesrz   r   r   r   r*     s    
zChoiceEncoder.encodeValueNr9   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|s(||  }||dd dfS )Nr#   T)rE   r   rD   r-   r%   r   r   r   r*     s
    
zAnyEncoder.encodeValueNr9   r   r   r   r   r     s   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 kr|j }n|j }W n$ tk
r>   td|f Y nX tjtj@ rTtj}nd }|r|d|dd rrdptd|dd|d kr| p| |f  | j	d k	r|j
| j	d	 | jd k	r|j
| jd
 z&| j| }|r|d|jj|f  W n tk
r   |d kr|j}n|j}t|j|j}z| j| }W n( tk
rd   td||f Y nX |r|d|jj|f  Y nX |j||| f|}	|r|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inrn   rB   r   )r#   )rB   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)typeIdAttributeErrorr   r"   r   loggerZflagEncoderr-   ZprettyPrintTypefixedDefLengthModerx   fixedChunkSizer   	__class__r3   r{   r,   r   rG   rF   r   r   r!   Zhexdump)
r   r&   r'   r)   r   r   ZconcreteEncoderr,   Z
baseTagSetr   r   r   r   __call__d  sL    
8



zEncoder.__call__)N)r3   r4   r5   r   r   r   r   r   r   r   r   r   [  s   r   N)EZpyasn1r   r   Zpyasn1.codec.berr   Zpyasn1.compat.integerr   Zpyasn1.compat.octetsr   r   r   r	   r
   r   Zpyasn1.typer   r   r   r   __all__objectr   r6   r:   r>   rA   rK   rN   rO   rX   rs   r~   r   r   ZendOfOctetsr,   ZBooleanZIntegerZ	BitStringZOctetStringZNullZObjectIdentifierZ
EnumeratedZRealZ
SequenceOfZSetOfZChoiceZ
UTF8StringZNumericStringZPrintableStringZTeletexStringZVideotexStringZ	IA5StringZGraphicStringZVisibleStringZGeneralStringZUniversalStringZ	BMPStringZObjectDescriptorZGeneralizedTimeZUTCTimer   r   SetSequenceZAnyr   r   r   r   r   r   r   <module>   s   _%:5|F                          "                            #v