a
    db\                  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   i/home/tom/ab/renpy-build/tmp/install.linux-x86_64/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   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 u r|j }n|j }|s:| j|||fi |\}}}|S |dd}	t|jD ]\}
}|	}|
s| j|||fi |\}}}|s|r|ddr|  S |sd}| ||}|| t||7 }|rt|| }|s|| j	7 }qP|| }|sP|| j
7 }qP|st|}|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   >   sF    zAbstractItemEncoder.encode)NN)__name__
__module____qualname__r    r1   r   r0   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r4   r5   r6   r+   r   r   r   r   r7   t   s   r7   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r4   r5   r6   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)signedF)supportCompactZeror   intr&   r   r   r   r+      s
    zIntegerEncoder.encodeValueN)r4   r5   r6   r    rA   r+   r   r   r   r   r?      s   r?   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 |jj}	|	rt|	|	}
nt }
|j |
d}d}t	}||k r|}t
||d  |}||||| |fi |7 }q|ddfS )Nr   maxChunkSizer   FTr-   )cloner!   r.   asOctetsr   r-   baseTagr   TagSetr	   min)r   r'   r(   r)   r*   ZvalueLengthZalignedValuerD   r   rH   r-   stopstartr   r   r   r+      s,    
 zBitStringEncoder.encodeValueNr:   r   r   r   r   rC      s   rC   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 |d u r|jj}|rvt||}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 d S )NrD   r   FTrE   )
rG   r   rF   r.   r!   r-   rH   r   rI   r	   )r   r'   r(   r)   r*   r   rD   rH   r-   poschunkr   r   r   r+      s8    


zOctetStringEncoder.encodeValueNr:   r   r   r   r   rM      s   rM   c                   @   s   e Zd ZdZdd ZdS )NullEncoderFc                 K   s
   t ddfS r8   r9   r&   r   r   r   r+      s    zNullEncoder.encodeValueNr>   r   r   r   r   rP      s   rP   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)rF   ZasTuple
IndexErrorr   r"   )r   r'   r(   r)   r*   oidfirstsecondoctetsZsubOidresr   r   r   r+      s@    



z#ObjectIdentifierEncoder.encodeValueNr>   r   r   r   r   rQ      s   rQ   c                   @   s0   e Zd ZdZdZedd Zdd Zdd Zd	S )
RealEncoderr   rT   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   rT            r<   )absrB   )mencbaseemsesr   r   r   _dropFloatingPoint.  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||
 }||
 }	qr|||	|fS )N)rT   r   r_   r<   rT   infr^   )
binEncBaserg   floatrangera   rB   )r   r'   rb   brd   ZencBaseZmantissaZ	exponentasignrc   ir   r   r   _chooseEncBaseE  s,    




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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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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   + rT   r   rp   r<   r   r   r^   r_      r`       zScale factor overflowr]   r   )r   r]   zReal exponent overflowzProhibited Real base %s)rF   Z	isPlusInfZ
isMinusInfr	   r
   ro   r   r"   r   r   r!   )r   r'   r(   r)   r*   rb   rl   rd   fore   rc   ZsfeonZpor   r   r   r   r+   ]  s    


$






""







zRealEncoder.encodeValueN)	r4   r5   r6   r    ri   staticmethodrg   ro   r+   r   r   r   r   r\   *  s   
r\   c                   @   s   e Zd ZdZdd ZdS )SequenceEncoderFc              	   K   s  t }|d u r|  |j}t| D ]\}}|rn|| }	|	jrH|jsHq&|	jrZ||	jkrZq&| j	rn|j
|	jd |||fi |}
|r|	jr|	j}|jr||s||
|fi |}
||
7 }q&nt|jjD ]\}}	z||	j }W n( ty   td|	j|f Y n0 |	jr |	j|vr q|	jr6||	jkr6q| j	rL|j
|	jd |||| fi |}
|	jr|	j}|jr||s||
|fi |}
||
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   r   r2   	component	namedTyperO   ZwrapTyper   r   r   r+     sJ    

zSequenceEncoder.encodeValueN)r4   r5   r6   r   r+   r   r   r   r   r{     s   r{   c                   @   s   e Zd Zdd ZdS )SequenceOfEncoderc                 K   sR   |d u r|   n|j}t}t|D ]"\}}|||| |fi |7 }q$|ddfS )NT)r|   r}   r	   r/   )r   r'   r(   r)   r*   r   r2   r   r   r   r   r+     s    
zSequenceOfEncoder.encodeValueNr:   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.encodeValueNr:   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)rG   r   rF   r.   r&   r   r   r   r+     s
    
zAnyEncoder.encodeValueNr:   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 u r|j }n|j }W n" ty<   td|f Y n0 tjtj@ rRtj}nd }|r|d|dd rpdprd|dd|d u r| p| |f  | j	d ur|j
| j	d	 | jd ur|j
| jd
 z&| j| }|r|d|jj|f  W n ty~   |d u r|j}n|j}t|j|j}z| j| }W n& ty^   td||f Y n0 |rz|d|jj|f  Y n0 |j||| fi |}	|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inrt   rD   r   )r$   )rD   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fixedDefLengthModer   fixedChunkSizer   	__class__r4   r   r-   r   rI   rH   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)r4   r5   r6   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   r7   r;   r?   rC   rM   rP   rQ   r\   r{   r   r   r   ZendOfOctetsr-   BooleanZIntegerZ	BitStringZOctetStringZNullZObjectIdentifierZ
EnumeratedRealZ
SequenceOfZSetOfZ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    _%:5|F

























"



























#v