U
    6d]l                  8   @   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&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ZBe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   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-8_i3bgru/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}	t}t|jD ]b\}
}|	}|
sz| j|||f|\}}}W n4 tjk
r   t	 }td||d f Y nX t
rt
d|rdpd||f  |s|r|dd	r|  S |sd}t
rt
d
 | ||}t
rBt
d|r*dp,d|tt|f  || t||7 }t
rzt
dt|tt|f  |rt|| }|s|| j7 }qP|| }|sP|| j7 }qP|st|}|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)tagSetr,   getr	   	enumerateZ	superTagsr   r#   sysexc_infoLOGr   r   hexdumpr   r&   r"   eooOctetsSubstrateeooIntegerSubstrate)r   r(   r)   r*   r+   r0   r   r   ZisOctetsr%   idxr   ZdefModeOverrideexcheaderr   r   r   r   L   s      
  

    zAbstractItemEncoder.encode)NN)__name__
__module____qualname__r!   r8   r   r7   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,      s    zEndOfOctetsEncoder.encodeValueNr<   r=   r>   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-   r   Fr   r'   r   r   r   r,      s    zBooleanEncoder.encodeValueNr<   r=   r>   r!   r,   r   r   r   r   rC      s   rC   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)rD   FFT)signedF)r5   supportCompactZeror   intr'   r   r   r   r,      s    zIntegerEncoder.encodeValueN)r<   r=   r>   r!   rH   r,   r   r   r   r   rF      s   rF   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 trtd|  |jj}	|	rt	|	|	}
nt	 }
|j |
d}d}t
}||k r|}t||d  |}||||| |f|7 }q|ddfS )Nr   maxChunkSizer   FT#encoding into up to %s-octet chunksr0   )cloner"   r1   asOctetsr   r5   r0   baseTagr   TagSetr	   min)r   r(   r)   r*   r+   ZvalueLengthZalignedValuerK   r   rP   r0   stopstartr   r   r   r,      s0    
zBitStringEncoder.encodeValueNrB   r   r   r   r   rJ      s   rJ   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 trdtd|  |d kr|jj}|rt	||}nt	 }|j|d}n6t|s|jj}|rt	||}nt	 }|j|d}d}	t
}||	|	|  }
|
sq|||
|f|7 }|	|7 }	q|ddfS )NrK   r   FTrL   rM   )rO   r   rN   r1   r"   r5   r0   rP   r   rQ   r	   )r   r(   r)   r*   r+   r   rK   rP   r0   poschunkr   r   r   r,      s<    


zOctetStringEncoder.encodeValueNrB   r   r   r   r   rU      s   rU   c                   @   s   e Zd ZdZdd ZdS )NullEncoderFc                 K   s
   t ddfS r@   rA   r'   r   r   r   r,   $  s    zNullEncoder.encodeValueNrE   r   r   r   r   rX   !  s   rX   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)rN   ZasTuple
IndexErrorr   r#   )r   r(   r)   r*   r+   oidfirstsecondoctetsZsubOidresr   r   r   r,   +  s@    



z#ObjectIdentifierEncoder.encodeValueNrE   r   r   r   r   rY   (  s   rY   c                   @   s0   e Zd ZdZdZedd Zdd Zdd Zd	S )
RealEncoderr   r\   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   r\            r-   )absrI   )mencbaseemsesr   r   r   _dropFloatingPointg  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 )Nr\   r   rg   r-   infrf   zMautomatically chosen REAL encoding base %s, sign %s, mantissa %s, exponent %s)
binEncBasero   floatrangeri   rI   r5   )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 |\}}}|s>tddfS |dkrvtrRtd td||dkrdd	pfd
|f ddfS |dkrd}| |\}	}}
}|	dk r|dO }|
dkr|d@ dkr|dL }|d7 }qn\|
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rP|dL }|d7 }q.|dkrdtd||d> O }t}|dks|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r4td|dkr@n@|dkrT|dO }n,|dkrh|dO }n|dO }t	|d@ | }t}|rt	|d@ | }|dL }qt	|| | }|ddfS td| d S )N))@   FF))A   FFFT
   z!encoding REAL into character formz%dE%s%dr   +r.   r\   r   ry   r-   r   r   rf   rg      rh       zScale factor overflowre   r   )r   re   zReal exponent overflowzProhibited Real base %s)rN   Z	isPlusInfZ
isMinusInfr	   r5   r
   rx   r   r#   r   r   r"   )r   r(   r)   r*   r+   rj   rt   rl   form   rk   ZsfeonZpor   r   r   r   r,     s    


$






""







zRealEncoder.encodeValueN)	r<   r=   r>   r!   rq   staticmethodro   rx   r,   r   r   r   r   rd   c  s   
!rd   c                   @   s   e Zd ZdZdd ZdS )SequenceEncoderFc              	   K   s  t }|d| j}tr*td|r"dp$d  |d krn|j}|rB||j}t| D ]\}	}
|r||	 }|jr|
j	strTtd|f  qT|j
r|
|jkrtrTtd|f  qT|r|j|jd |rV|jrV|j}|jtjjtjjfkr
|||
|ft||jd7 }nJ||
|f|}||
r.||7 }n&||||f|7 }trhtd	|f  qT|||
|f|7 }qTnbt|jjD ]R\}	}z||j }
W n* tk
r   td
|j|f Y nX |jr|j|krtrztd|f  qz|j
r|
|jkrtrztd|f  qz|r*|j|jd |j}|jr|jtjjtjjfkrn|||
|ft||jd7 }nJ||
|f|}||
r||7 }n&||||f|7 }trtd	|f  n|||
|f|7 }qz|ddfS )NomitEmptyOptionalsz$%sencoding empty OPTIONAL componentsznot r.   z"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	   r1   r   r5   isInconsistentcomponentTyper2   valuesZ
isOptionalZisValueZisDefaultedZ
asn1ObjectupdateZopenTypetypeIdr   SetOf
SequenceOfdictisSameTypeWith
namedTypesnameKeyErrorr   r#   )r   r(   r)   r*   r+   r   r   inconsistencyr   r9   	component	namedTyper   rW   ZcomponentSpecr   r   r   r,     s     

  
   
zSequenceEncoder.encodeValueN)r<   r=   r>   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 }|r|n|j}g }|dd }t|D ]R\}}	||	|f|}
|d k	r~||	s~||
|f|}
tr~td|f  ||
 q6|S )Nr   r   )r   r   popr2   r   r5   append)r   r(   r)   r*   r+   r   chunksr   r9   r   rW   r   r   r   _encodeComponents  s"    z#SequenceOfEncoder._encodeComponentsc                 K   s"   | j |||f|}t|ddfS )NT)r   r	   join)r   r(   r)   r*   r+   r   r   r   r   r,     s      zSequenceOfEncoder.encodeValueN)r<   r=   r>   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.encodeValueNrB   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)rO   r   rN   r1   r'   r   r   r   r,     s
    
zAnyEncoder.encodeValueNrB   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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.   rK   r   )r%   )rK   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#   r5   r1   ZprettyPrintTypefixedDefLengthModer   fixedChunkSizer   	__class__r<   r   r0   r   rQ   rP   r   r   r"   r   r6   )	r   r(   r)   r+   r   ZconcreteEncoderr0   Z
baseTagSetr   r   r   r   __call__  sF    
8


zEncoder.__call__)N)r<   r=   r>   r   r   r   r   r   r   r   r   r   	  s   r   )Jr3   Z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__ZregisterLoggeer<   ZDEBUG_ENCODERr5   objectr   r?   rC   rF   rJ   rU   rX   rY   rd   r   r   r   r   ZendOfOctetsr0   BooleanZIntegerZ	BitStringZOctetStringZNullZObjectIdentifierZ
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   r   r   r   <module>   s    )=; (z%                          "                            #q