a
    !fo                  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	 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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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! ejBj*e! ejCj*e! iZDej+jEe ej,jEe ej-jEe  ej.jEe! ej/jEe" ej0jEe# ej1jEe ej2jEe$ ejFjEe% ej4jEe& ejGjEe% ej3jEe& ej5jEe' ejHjEe( ej6jEe! ej7jEe! ej8jEe! ej9jEe! ej:jEe! ej;jEe! ej<jEe! ej=jEe! ej>jEe! ej?jEe! ej@jEe! ejAjEe! ejBjEe! ejCjEe! iZIeDZJeIZKG d)d* d*eZLG d+d deZMeM ZNdS ),    N)debug)error)eoo)_MISSING)to_bytes)int2octoct2int	ints2octsnullstr2octsisOctetsType)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   Y/var/www/html/python-backend/venv/lib/python3.9/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   encodeLength6   s    

z AbstractItemEncoder.encodeLengthc                 K   s   t dd S )NzNot implemented)r   r%   r   valueasn1Spec	encodeFunoptionsr   r   r   encodeValueJ   s    zAbstractItemEncoder.encodeValueNc              
   K   s  |d u r|j }n|j }|s:| j|||fi |\}}}|S |dd}	t}t|jD ]d\}
}|	}|
sz | j|||fi |\}}}W n2 tjy   t	 }td||d f Y n0 t
rt
d|rdpd||f  |s|r|dd	r|  S |sd}t
rt
d
 | ||}t
rHt
d|r0dp2d|tt|f  || t||7 }t
rt
dt|tt|f  |rt|| }|s|| j7 }qT|| }|sT|| j7 }qT|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-   r2   r   r   ZisOctetsr'   idxr   ZdefModeOverrideexcheaderr   r   r   r   M   sr    
zAbstractItemEncoder.encode)NN)__name__
__module____qualname__r#   r:   r	   r9   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   rA      s   rA   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   rE      s   rE   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 r0   )r   FF)rF   FFT)signedF)r7   supportCompactZeror   intr)   r   r   r   r.      s    zIntegerEncoder.encodeValueN)r>   r?   r@   r#   rJ   r.   r   r   r   r   rH      s   rH   c                   @   s   e Zd Zdd ZdS )BitStringEncoderc                 K   s  |d u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i |7 }q|ddfS )Nr!   maxChunkSizer   FT#encoding into up to %s-octet chunksr2   )cloner$   r3   asOctetsr   r7   r2   baseTagr   TagSetr
   min)r   r*   r+   r,   r-   ZvalueLengthZalignedValuerM   r   rR   r2   stopstartr   r   r   r.      s0    

 zBitStringEncoder.encodeValueNrD   r   r   r   r   rL      s   rL   c                   @   s   e Zd Zdd ZdS )OctetStringEncoderc                 K   s  |d u r|  }nt|s*||  }n|}|dd}|rJt||krT|ddfS trdtd|  |d u r|jj}|rt	||}nt	 }|j|d}n6t|s|jj}|rt	||}nt	 }|j|d}d}	t
}||	|	|  }
|
sq|||
|fi |7 }|	|7 }	q|ddfS )NrM   r   FTrN   rO   )rQ   r   rP   r3   r$   r7   r2   rR   r   rS   r
   )r   r*   r+   r,   r-   r   rM   rR   r2   poschunkr   r   r   r.      s<    


zOctetStringEncoder.encodeValueNrD   r   r   r   r   rW      s   rW   c                   @   s   e Zd ZdZdd ZdS )NullEncoderFc                 K   s
   t ddfS rB   rC   r)   r   r   r   r.   %  s    zNullEncoder.encodeValueNrG   r   r   r   r   rZ   "  s   rZ   c                   @   s   e Zd ZdZdd ZdS )ObjectIdentifierEncoderFc                 K   s  |d ur| |}| }z|d }|d }W n" tyP   td|f Y n0 d|  krfd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 }	qX||
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)rP   ZasTuple
IndexErrorr   r%   )r   r*   r+   r,   r-   oidfirstsecondoctetsZsubOidresr   r   r   r.   ,  s@    



z#ObjectIdentifierEncoder.encodeValueNrG   r   r   r   r   r[   )  s   r[   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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/   )absrK   )mencbaseemsesr   r   r   _dropFloatingPointh  s$    zRealEncoder._dropFloatingPointc                 C   s  |\}}}g d}|j |v r,| ||j |S | j |v rF| || j |S |||g}|||g}d}d}	td}tdD ]}
| ||
 ||
 ||
 \}||
< ||
< ||
< t||
 t|k st||
 t|krr||
 |k rr||
 }t||
 }||
 }	qrtrtd|	|||f  |||	|fS )N)r^   r!   ri   r/   r^   infrh   zMautomatically chosen REAL encoding base %s, sign %s, mantissa %s, exponent %s)
binEncBaserq   floatrangerk   rK   r7   )r   r*   rl   brn   ZencBaseZmantissaexponentsignrm   ir   r   r   _chooseEncBase  s4    




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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v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   +r0   r^   r   r{   r/   r!   r   rh   ri      rj       zScale factor overflowrg   r    )r   rg   zReal exponent overflowzProhibited Real base %s)rP   Z	isPlusInfZ
isMinusInfr
   r7   r   rz   r   r%   r   r   r$   )r   r*   r+   r,   r-   rl   rv   rn   foro   rm   Zsfeonpor   r   r   r   r.     s    


$






""







zRealEncoder.encodeValueN)	r>   r?   r@   r#   rs   staticmethodrq   rz   r.   r   r   r   r   rf   d  s   
!rf   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 u r~|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 |rb|jrb|j}|jtjjtjjfv r|||
|fi t||jd7 }nR||
|fi |}||
r6||7 }n*||||fi |7 }trxtd	|f  qT|||
|fi |7 }qTnpt|jjD ]`\}	}z||j }
W n( ty   td
|j|f Y n0 |jr|j|vrtrtd|f  q|j
r$|
|jkr$trtd|f  q|r8|j|jd |j}|jr|jtjjtjjfv r|||
|fi t||jd7 }nR||
|fi |}||
r||7 }n*||||fi |7 }trtd	|f  n|||
|fi |7 }q|ddfS )NomitEmptyOptionalsz$%sencoding empty OPTIONAL componentsznot r0   z"not encoding OPTIONAL component %rz!not encoding DEFAULT component %r)r1   )wrapTypewrapped with wrap type %rz#Component name "%s" not found in %rT)r
   r3   r   r7   isInconsistentcomponentTyper4   valuesZ
isOptionalZisValueZisDefaultedZ
asn1ObjectupdateZopenTypetypeIdr   SetOf
SequenceOfdictisSameTypeWith
namedTypesnameKeyErrorr   r%   )r   r*   r+   r,   r-   r   r   inconsistencyr   r;   	component	namedTyper   rY   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 u r|j }|r|n|j}g }|dd }t|D ]Z\}}	||	|fi |}
|d ur||	s||
|fi |}
trtd|f  ||
 q6|S )Nr   r   )r   r   popr4   r   r7   append)r   r*   r+   r,   r-   r   chunksr   r;   r   rY   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+   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 u r   }nX fdd|jjD }t|dkrRtdt|rFdpHd 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>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.encodeValueNrD   r   r   r   r   r     s   r   c                   @   s   e Zd Zdd ZdS )
AnyEncoderc                 K   s<   |d u r|  }nt|s(||  }||dd dfS )Nr'   T)rQ   r   rP   r3   r)   r   r   r   r.     s
    
zAnyEncoder.encodeValueNrD   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 ur|n| j| _|t ur |n| j| _d S )N)r   TAG_MAP_tagMapTYPE_MAP_typeMap)r   tagMaptypeMapZignoredr   r   r   __init__  s    zSingleItemEncoder.__init__c           	      K   s  z|d u r|j }n|j }W n" ty<   td|f Y n0 trtd|dd rXdpZd|dd|d u rt| pz| |f  | jd ur|j| jd	 | j	d ur|j| j	d
 z&| j
| }trtd|jj|f  W n tyd   |d u r|j}n|j}t|j|j}z| j| }W n& tyD   td||f Y n0 tr`td|jj|f  Y n0 |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inr0   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%   r7   r3   ZprettyPrintTypefixedDefLengthModer   fixedChunkSizer   	__class__r>   r   r2   r   rS   rR   r   r   r$   r   r8   )	r   r*   r+   r-   r   ZconcreteEncoderr2   Z
baseTagSetr   r   r   r   __call__  s^    







zSingleItemEncoder.__call__)N)
r>   r?   r@   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   X  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)r>   r?   r@   r   r   r   r   r   r   r   r   r   r   U  s   )Or5   Zpyasn1r   r   Zpyasn1.codec.berr   Zpyasn1.compatr   Zpyasn1.compat.integerr   Zpyasn1.compat.octetsr   r   r	   r
   r   r   Zpyasn1.typer   r   r   r   __all__ZregisterLoggeer>   ZDEBUG_ENCODERr7   objectr   rA   rE   rH   rL   rW   rZ   r[   rf   r   r   r   r   ZendOfOctetsr2   Boolean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   r   r   r   <module>   s     )=; (z%

























"



























#G@