a
    kÄ#d}X  ã                   @   sR  d Z ddlmZ ddlmZ ddlZddlmZmZmZ ddlm	Z	 ddl
mZmZ ddlmZmZmZ dd	lmZmZmZ dd
lmZmZmZmZ ddlm  mZ ddlmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z) e)ròddl*m+Z+ zddlm,Z, W n< e-�y>   G dd„ deƒZ.G dd„ deƒZ,e.ƒ e,_/Y n0 G dd„ ded ƒZ0G dd„ deƒZ1G dd„ de1ƒZ2G dd„ de1ƒZ3G dd„ de3ƒZ4G dd„ deƒZ5G dd „ d eƒZ6e 7e6¡G d!d"„ d"ƒƒZ8G d#d$„ d$eƒZ9G d%d&„ d&eƒZ:e 7e:¡G d'd(„ d(ƒƒZ;G d)d*„ d*e;ƒZ<G d+d,„ d,e'ƒZ=e%d-ƒZ>e 7e=¡G d.d/„ d/e e> ƒƒZ?G d0d1„ d1e?e&e@e?e f  ƒZAG d2d3„ d3eAƒZBG d4d5„ d5eAƒZCG d6d7„ d7eCƒZDG d8d9„ d9e?eE ƒZFG d:d;„ d;eFƒZGG d<d=„ d=e?eH ƒZIG d>d?„ d?e?eH ƒZJG d@dA„ dAe?d ƒZKG dBdC„ dCe?eH ƒZLG dDdE„ dEeFƒZMG dFdG„ dGeJƒZNG dHdI„ dIeJƒZOG dJdK„ dKeJƒZPG dLdM„ dMeJƒZQG dNdO„ dOeJƒZRG dPdQ„ dQeJƒZSG dRdS„ dSeJƒZTG dTdU„ dUeJƒZUG dVdW„ dWeUƒZVG dXdY„ dYeJƒZWG dZd[„ d[eJƒZXG d\d]„ d]eJƒZYG d^d_„ d_e?e!e  ƒZZG d`da„ daeZƒZ[G dbdc„ dceJƒZ\G ddde„ deeFƒZ]G dfdg„ dgeFƒZ^G dhdi„ dieFƒZ_e8j`e	_adS )jz&
ASN.1 (Abstract Syntax Notation One)
é    )Úabsolute_import)Úprint_functionN)ÚdatetimeÚ	timedeltaÚtzinfo)Úconf)ÚScapy_ExceptionÚwarning)Ú	RandFieldÚRandIPÚGeneralizedTime)ÚEnum_metaclassÚEnumElementÚbinrepr)Ú	plain_strÚbytes_encodeÚchbÚorb)ÚAnyÚAnyStrÚDictÚGenericÚListÚOptionalÚTupleÚTypeÚTypeVarÚUnionÚ_Generic_metaclassÚcastÚTYPE_CHECKING)ÚBERcodec_Object)Útimezonec                   @   s(   e Zd Zd Zdd„ Zdd„ Zdd„ ZdS )ÚUTCc                 C   s   t dƒS )Nr   )r   ©ÚselfÚdt© r'   úF/var/www/html/gsl.tools/lib/python3.9/site-packages/scapy/asn1/asn1.pyÚ	utcoffset1   s    zUTC.utcoffsetc                 C   s   dS )Nr#   r'   r$   r'   r'   r(   Útzname4   s    z
UTC.tznamec                 C   s   d S ©Nr'   r$   r'   r'   r(   Údst7   s    zUTC.dstN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r)   r*   r,   r'   r'   r'   r(   r#   .   s   r#   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
r"   c                 C   s
   || _ d S r+   ©Údelta)r%   r2   r'   r'   r(   Ú__init__;   s    ztimezone.__init__c                 C   s   | j S r+   r1   r$   r'   r'   r(   r)   >   s    ztimezone.utcoffsetc                 C   s   d S r+   r'   r$   r'   r'   r(   r*   A   s    ztimezone.tznamec                 C   s   d S r+   r'   r$   r'   r'   r(   r,   D   s    ztimezone.dstN)r-   r.   r/   r3   r)   r*   r,   r'   r'   r'   r(   r"   :   s   r"   c                   @   s    e Zd Zddd„Zddd„ZdS )	ÚRandASN1ObjectNc                 C   s.   |r|| _ ndd„ t tj¡D ƒ| _ d| _d S )Nc                 S   s   g | ]}t |d ƒr|j‘qS ©Ú	_asn1_obj)Úhasattrr6   ©Ú.0Úxr'   r'   r(   Ú
<listcomp>P   s   
üz+RandASN1Object.__init__.<locals>.<listcomp>Z>ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789)ÚobjlistÚsixÚ
itervaluesÚASN1_Class_UNIVERSALÚ	__rdict__Úchars)r%   r<   r'   r'   r(   r3   K   s    ÿþzRandASN1Object.__init__r   c                    sü   t  ˆj¡}t|tƒr*|tt  dd¡ƒƒS t|tƒrFtƒ  	¡ }||ƒS t|t
ƒsZt|tƒrltƒ  	¡ }||ƒS t|tƒr¨tt  d¡d ƒ}|d ‡fdd„t|ƒD ƒ¡ƒS t|tƒrèˆ dk rètt  d	¡d ƒ}|‡ ‡fd
d„t|ƒD ƒƒS ttt  dd¡ƒƒS )Nr   iè  gš™™™™™©?é   Ú c                 3   s   | ]}t  ˆ j¡V  qd S r+   )ÚrandomÚchoicerA   ©r9   Ú_©r%   r'   r(   Ú	<genexpr>f   ó    z&RandASN1Object._fix.<locals>.<genexpr>é
   g{®Gáz´?c                    s$   g | ]}ˆj ˆjd � ˆ d ¡‘qS ))r<   rB   )Ú	__class__r<   Ú_fixrF   ©Únr%   r'   r(   r;   i   s   ÿz'RandASN1Object._fix.<locals>.<listcomp>)rD   rE   r<   Ú
issubclassÚASN1_INTEGERÚintÚgaussÚASN1_IPADDRESSr   rM   ÚASN1_GENERALIZED_TIMEÚASN1_UTC_TIMEr   ÚASN1_STRINGÚexpovariateÚjoinÚrangeÚASN1_SEQUENCE)r%   rO   ÚoÚzZz1Zz2r'   rN   r(   rM   Y   s$    




 ÿzRandASN1Object._fix)N)r   )r-   r.   r/   r3   rM   r'   r'   r'   r(   r4   J   s   
r4   zASN1_Object[Any]c                   @   s   e Zd ZdS )Ú
ASN1_ErrorN©r-   r.   r/   r'   r'   r'   r(   r^   r   s   r^   c                   @   s   e Zd ZdS )ÚASN1_Encoding_ErrorNr_   r'   r'   r'   r(   r`   v   s   r`   c                   @   s   e Zd ZdS )ÚASN1_Decoding_ErrorNr_   r'   r'   r'   r(   ra   z   s   ra   c                   @   s   e Zd ZdS )ÚASN1_BadTag_Decoding_ErrorNr_   r'   r'   r'   r(   rb   ~   s   rb   c                   @   s0   e Zd Zdd„ Zd
dd„Zddd„Zdd	„ ZdS )Ú	ASN1Codecc                 C   s
   || _ d S r+   ©Ú_stem)ÚclsÚstemr'   r'   r(   Úregister_stemƒ   s    zASN1Codec.register_stemNc                 C   s   | j j||d�S ©N)Úcontext)re   Údec©rf   Úsrj   r'   r'   r(   rk   ‡   s    zASN1Codec.decc                 C   s   | j j||d�S ri   )re   Úsafedecrl   r'   r'   r(   rn   ‹   s    zASN1Codec.safedecc                 C   s   | j S r+   rd   )rf   r'   r'   r(   Úget_stem�   s    zASN1Codec.get_stem)N)N)r-   r.   r/   rh   rk   rn   ro   r'   r'   r'   r(   rc   ‚   s   

rc   c                   @   s   e Zd ZeZdS )ÚASN1_Codecs_metaclassN)r-   r.   r/   rc   Úelement_classr'   r'   r'   r(   rp   ”   s   rp   c                   @   sf   e Zd ZeedƒZeedƒZeedƒZeedƒZeedƒZ	eedƒZ
eedƒZeedƒZeed	ƒZd
S )ÚASN1_CodecsrB   é   é   é   é   é   é   é   é	   N)r-   r.   r/   r   rc   ÚBERZDERZPERZCERZLWERZBACnetZOERZSERZXERr'   r'   r'   r(   rr   ˜   s   







rr   c                   @   s>   e Zd Zddd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ ZdS )ÚASN1TagNc                 C   s*   t  | ||¡ || _|d u r i }|| _d S r+   )r   r3   rj   Ú_codec)r%   ÚkeyÚvaluerj   Úcodecr'   r'   r(   r3   ¦   s
    zASN1Tag.__init__c                 C   s   |   | j| j| j| j¡S r+   )rL   Ú_keyÚ_valuerj   r}   rH   r'   r'   r(   Úclone´   s    zASN1Tag.clonec                 C   s
   || _ d S r+   r5   )r%   Zasn1objr'   r'   r(   Úregister_asn1_object¸   s    zASN1Tag.register_asn1_objectc                 C   s$   t | dƒr|  |¡S td|  ƒ‚d S )Nr6   z)%r does not have any assigned ASN1 object)r7   r6   r^   ©r%   Úvalr'   r'   r(   Úasn1_object¼   s    

zASN1Tag.asn1_objectc                 C   s   || j |< d S r+   )r}   )r%   Zcodecnumr€   r'   r'   r(   ÚregisterÂ   s    zASN1Tag.registerc                 C   s6   z| j | }W n" ty0   td|| f ƒ‚Y n0 |S )NzCodec %r not found for tag %r)r}   ÚKeyErrorr^   )r%   r€   Úcr'   r'   r(   Ú	get_codecÆ   s
    zASN1Tag.get_codec)NN)	r-   r.   r/   r3   rƒ   r„   r‡   rˆ   r‹   r'   r'   r'   r(   r|   ¥   s     ü
r|   c                   @   s   e Zd ZeZdd„ ZdS )ÚASN1_Class_metaclassc           	      C   sÒ   |D ]8}t  |j¡D ]&\}}||vrt|tƒr| ¡ ||< qqi }t  |¡D ]@\}}t|tƒrzt||ƒ}|||< |||< qLt|tƒrL|||< qL||d< tdt 	| |||¡ƒ}t  
|j¡D ]}t|tƒr¸||_q¸|S )Nr@   zType[ASN1_Class])r=   Ú	iteritemsÚ__dict__Ú
isinstancer|   rƒ   rR   r   ÚtypeÚ__new__r>   rj   )	rf   ÚnameÚbasesÚdctÚbÚkÚvZrdictZnclsr'   r'   r(   r‘   Ó   s(    




ÿ
zASN1_Class_metaclass.__new__N)r-   r.   r/   r|   rq   r‘   r'   r'   r'   r(   rŒ   Ï   s   rŒ   c                   @   s   e Zd ZdS )Ú
ASN1_ClassNr_   r'   r'   r'   r(   r˜   ñ   s   r˜   c                   @   sx  e Zd ZdZeedƒZeedƒZeedƒZeedƒZ	eedƒZ
eedƒZeedƒZeed	ƒZeed
ƒZeedƒZeedƒZeedƒZeedƒZeedƒZeedƒZeedƒZeedƒZeedƒZeedƒZeedƒZeedƒZeedƒZeedƒZeedƒZeedƒZeedƒZeedƒZ eedƒZ!eedƒZ"eedƒZ#eed ƒZ$eed!ƒZ%eed"ƒZ&eed#ƒZ'eed$ƒZ(eed%ƒZ)d&S )'r?   Z	UNIVERSALéýÿÿÿéþÿÿÿéÿÿÿÿr   rB   rs   rt   ru   rv   rw   rx   ry   rz   rK   é   é   é   é0   é1   é   é   é   é   é   é   é   é   é   é   é   é   é   é@   éA   éB   éC   N)*r-   r.   r/   r’   r   r|   ÚERRORÚRAWÚNONEÚANYÚBOOLEANÚINTEGERÚ
BIT_STRINGÚSTRINGÚNULLÚOIDZOBJECT_DESCRIPTORZEXTERNALZREALÚ
ENUMERATEDZEMBEDDED_PDFÚUTF8_STRINGZRELATIVE_OIDÚSEQUENCEÚSETÚNUMERIC_STRINGÚPRINTABLE_STRINGÚ
T61_STRINGÚVIDEOTEX_STRINGÚ
IA5_STRINGÚUTC_TIMEÚGENERALIZED_TIMEZGRAPHIC_STRINGÚISO646_STRINGÚGENERAL_STRINGÚUNIVERSAL_STRINGZCHAR_STRINGÚ
BMP_STRINGÚ	IPADDRESSÚ	COUNTER32ÚGAUGE32Ú
TIME_TICKSr'   r'   r'   r(   r?   ö   sJ   


































r?   c                       s   e Zd Z‡ fdd„Z‡  ZS )ÚASN1_Object_metaclassc                    sR   t dtt| ƒ | |||¡ƒ}z|j |¡ W n  tyL   td|j ƒ Y n0 |S )NzType[ASN1_Object[Any]]zError registering %r)r   ÚsuperrÏ   r‘   Útagr„   Ú	Exceptionr	   )rf   r’   r“   r”   rŠ   ©rL   r'   r(   r‘   !  s    þzASN1_Object_metaclass.__new__)r-   r.   r/   r‘   Ú__classcell__r'   r'   rÓ   r(   rÏ      s   rÏ   Ú_Kc                   @   s†   e Zd ZejZdd„ Zdd„ Zdd„ Zdd„ Z	d	d
„ Z
ddd„Zd dd„Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )!ÚASN1_Objectc                 C   s
   || _ d S r+   )r†   r…   r'   r'   r(   r3   9  s    zASN1_Object.__init__c                 C   s   | j  |¡ | j¡S r+   )rÑ   r‹   Úencr†   ©r%   r€   r'   r'   r(   r×   =  s    zASN1_Object.encc                 C   s   d| j  d| jj¡| jf S ©Nz<%s[%r]>r’   )rŽ   ÚgetrL   r-   r†   rH   r'   r'   r(   Ú__repr__A  s    zASN1_Object.__repr__c                 C   s   t |  tj¡ƒS r+   )r   r×   r   ÚASN1_default_codecrH   r'   r'   r(   Ú__str__E  s    zASN1_Object.__str__c                 C   s   |   tj¡S r+   )r×   r   rÜ   rH   r'   r'   r(   Ú	__bytes__I  s    zASN1_Object.__bytes__r   c                 C   s   d| t | ƒ d S )Nú  Ú
)Úrepr©r%   Úlvlr'   r'   r(   ÚstrshowM  s    zASN1_Object.strshowc                 C   s   t |  |¡ƒ d S r+   )Úprinträ   râ   r'   r'   r(   ÚshowQ  s    zASN1_Object.showc                 C   s   t | j|kƒS r+   ©Úboolr†   ©r%   Úotherr'   r'   r(   Ú__eq__U  s    zASN1_Object.__eq__c                 C   s   t | j|k ƒS r+   rç   ré   r'   r'   r(   Ú__lt__Y  s    zASN1_Object.__lt__c                 C   s   t | j|kƒS r+   rç   ré   r'   r'   r(   Ú__le__]  s    zASN1_Object.__le__c                 C   s   t | j|kƒS r+   rç   ré   r'   r'   r(   Ú__gt__a  s    zASN1_Object.__gt__c                 C   s   t | j|kƒS r+   rç   ré   r'   r'   r(   Ú__ge__e  s    zASN1_Object.__ge__c                 C   s   t | j|kƒS r+   rç   ré   r'   r'   r(   Ú__ne__i  s    zASN1_Object.__ne__c                 C   s   d| j jt| jƒf S )Nz%s(%s))rL   r-   rá   r†   rH   r'   r'   r(   Úcommandm  s    zASN1_Object.commandN)r   )r   )r-   r.   r/   r?   rµ   rÑ   r3   r×   rÛ   rÝ   rÞ   rä   ræ   rë   rì   rí   rî   rï   rð   rñ   r'   r'   r'   r(   rÖ   5  s   

rÖ   c                   @   s   e Zd ZdS )Ú_ASN1_ERRORNr_   r'   r'   r'   r(   rò   x  s   rò   c                   @   s,   e Zd ZejZddd„Zdd„ Zdd„ ZdS )	ÚASN1_DECODING_ERRORNc                 C   s   t  | |¡ || _d S r+   )rÖ   r3   Úexc)r%   r†   rô   r'   r'   r(   r3     s    zASN1_DECODING_ERROR.__init__c                 C   s0   d| j  d| jj¡| j| jr(| jjd p*df S )Nz<%s[%r]{{%r}}>r’   r   rC   )rŽ   rÚ   rL   r-   r†   rô   ÚargsrH   r'   r'   r(   rÛ   „  s
    ýzASN1_DECODING_ERROR.__repr__c                 C   s   t | jtƒr| j |¡S | jS r+   ©r�   r†   rÖ   r×   rØ   r'   r'   r(   r×   Œ  s    zASN1_DECODING_ERROR.enc)N)	r-   r.   r/   r?   r²   rÑ   r3   rÛ   r×   r'   r'   r'   r(   ró   |  s   
ró   c                   @   s   e Zd ZejZdd„ ZdS )Ú
ASN1_forcec                 C   s   t | jtƒr| j |¡S | jS r+   rö   rØ   r'   r'   r(   r×   –  s    zASN1_force.encN)r-   r.   r/   r?   r³   rÑ   r×   r'   r'   r'   r(   r÷   “  s   r÷   c                   @   s   e Zd ZdS )ÚASN1_BADTAGNr_   r'   r'   r'   r(   rø   �  s   rø   c                   @   s   e Zd ZejZdd„ ZdS )rQ   c                 C   sš   t | jƒ}|d dkr"|d d… }t|ƒdkrJ|d d… d |dd …  }t| jƒ}t|ƒdkr||d d… d |dd …  }|d	| j d
| jj¡|f  S )Nr›   ÚLr¥   r�   ú...éöÿÿÿr£   rK   z	 <%s[%s]>r’   )Úhexr†   Úlenrá   rŽ   rÚ   rL   r-   )r%   ÚhÚrr'   r'   r(   rÛ   ¤  s    

zASN1_INTEGER.__repr__N)r-   r.   r/   r?   r·   rÑ   rÛ   r'   r'   r'   r(   rQ   ¡  s   rQ   c                   @   s   e Zd ZejZdd„ ZdS )ÚASN1_BOOLEANc                 C   s   d| j dk t | ¡f S )Nú%s %sr   )r†   rÖ   rÛ   rH   r'   r'   r(   rÛ   ¶  s    zASN1_BOOLEAN.__repr__N)r-   r.   r/   r?   r¶   rÑ   rÛ   r'   r'   r'   r(   r   ²  s   r   c                   @   s0   e Zd ZdZejZd
dd„Zdd„ Zdd„ Z	d	S )ÚASN1_BIT_STRINGz¥
     ASN1_BIT_STRING values are bit strings like "011101".
     A zero-bit padded readable string is provided nonetheless,
     which is stored in val_readable
    Fc                 C   s"   |st t|ƒ| _nt t|ƒ| _d S r+   )r   Ústrr†   ÚbytesÚval_readable)r%   r†   Úreadabler'   r'   r(   r3   Ã  s    zASN1_BIT_STRING.__init__c                 C   s^  |dkrht |ttfƒr,d dd„ |D ƒ¡}ntdƒ d}t | d|¡ t | |t|ƒ¡ t | dd	¡ nò|dk�r8t|ƒ}t |tƒrüt	d
d„ |D ƒƒr¢tdƒ d S t
|ƒd d	kr¸d	}ndt
|ƒd  }|d|  }tt|ƒgd Ž }d dd„ |D ƒ¡}ntdƒ d}d	}t | d|¡ t | ||¡ t | d|¡ n"|dk�rLtdƒ nt | ||¡ d S )Nr  rC   c                 s   s    | ]}t t|ƒƒ d ¡V  qdS )ry   N)r   r   Úzfillr8   r'   r'   r(   rI   Î  rJ   z.ASN1_BIT_STRING.__setattr__.<locals>.<genexpr>zInvalid val: should be bytesz<invalid val_readable>r†   Úunused_bitsr   c                 s   s   | ]}|d vr|V  qdS ))Ú0Ú1Nr'   )r9   rŠ   r'   r'   r(   rI   Ø  rJ   z3Invalid operation: 'val' is not a valid bit string.ry   r	  rJ   c                 s   s"   | ]}t td  |¡dƒƒV  qdS )rC   rs   N)r   rR   rY   r8   r'   r'   r(   rI   â  rJ   zInvalid val: should be strs   <invalid val>z:Invalid operation: unused_bits rewriting is not supported.)r�   r  r  rY   r	   ÚobjectÚ__setattr__r   r   Úanyrý   ÚzipÚiter)r%   r’   r   r†   r  Zpadded_valueZ	bytes_arrr  r'   r'   r(   r  Ê  s:    



zASN1_BIT_STRING.__setattr__c                 C   sŒ   | j }t|ƒdkr.|d d… d |dd …  }| j}t|ƒdkr\|d d… d |dd …  }d| j d| jj¡||| j| jd	kr„d
ndf S )Né   rK   s   ...rû   r£   rú   z<%s[%s]=%r (%d unused bit%s)>r’   rB   rm   rC   )r  rý   r†   rŽ   rÚ   rL   r-   r  )r%   rm   r—   r'   r'   r(   rÛ   ð  s    ûzASN1_BIT_STRING.__repr__N)F)
r-   r.   r/   r0   r?   r¸   rÑ   r3   r  rÛ   r'   r'   r'   r(   r  »  s
   
&r  c                   @   s   e Zd ZejZdS )rW   N)r-   r.   r/   r?   r¹   rÑ   r'   r'   r'   r(   rW     s   rW   c                   @   s   e Zd ZejZdd„ ZdS )Ú	ASN1_NULLc                 C   s
   t  | ¡S r+   )rÖ   rÛ   rH   r'   r'   r(   rÛ     s    zASN1_NULL.__repr__N)r-   r.   r/   r?   rº   rÑ   rÛ   r'   r'   r'   r(   r    s   r  c                   @   s"   e Zd ZejZdd„ Zdd„ ZdS )ÚASN1_OIDc                 C   s2   t |ƒ}tj |¡}t | |¡ tj |¡| _d S r+   )r   r   ZmibZ_oidrÖ   r3   Z_oidnameÚoidnamer…   r'   r'   r(   r3     s    zASN1_OID.__init__c                 C   s   d| j  d| jj¡| jf S rÙ   )rŽ   rÚ   rL   r-   r  rH   r'   r'   r(   rÛ     s    zASN1_OID.__repr__N)r-   r.   r/   r?   r»   rÑ   r3   rÛ   r'   r'   r'   r(   r    s   r  c                   @   s   e Zd ZejZdS )ÚASN1_ENUMERATEDN)r-   r.   r/   r?   r¼   rÑ   r'   r'   r'   r(   r    s   r  c                   @   s   e Zd ZejZdS )ÚASN1_UTF8_STRINGN)r-   r.   r/   r?   r½   rÑ   r'   r'   r'   r(   r     s   r  c                   @   s   e Zd ZejZdS )ÚASN1_NUMERIC_STRINGN)r-   r.   r/   r?   rÀ   rÑ   r'   r'   r'   r(   r  $  s   r  c                   @   s   e Zd ZejZdS )ÚASN1_PRINTABLE_STRINGN)r-   r.   r/   r?   rÁ   rÑ   r'   r'   r'   r(   r  (  s   r  c                   @   s   e Zd ZejZdS )ÚASN1_T61_STRINGN)r-   r.   r/   r?   rÂ   rÑ   r'   r'   r'   r(   r  ,  s   r  c                   @   s   e Zd ZejZdS )ÚASN1_VIDEOTEX_STRINGN)r-   r.   r/   r?   rÃ   rÑ   r'   r'   r'   r(   r  0  s   r  c                   @   s   e Zd ZejZdS )ÚASN1_IA5_STRINGN)r-   r.   r/   r?   rÄ   rÑ   r'   r'   r'   r(   r  4  s   r  c                   @   s   e Zd ZejZdS )ÚASN1_GENERAL_STRINGN)r-   r.   r/   r?   rÈ   rÑ   r'   r'   r'   r(   r  8  s   r  c                       s>   e Zd ZdZejZdZ‡ fdd„Zdd„ Z	‡ fdd„Z
‡  ZS )	rU   a©  
    Improved version of ASN1_GENERALIZED_TIME, properly handling time zones and
    all string representation formats defined by ASN.1. These are:

    1. Local time only:                        YYYYMMDDHH[MM[SS[.fff]]]
    2. Universal time (UTC time) only:         YYYYMMDDHH[MM[SS[.fff]]]Z
    3. Difference between local and UTC times: YYYYMMDDHH[MM[SS[.fff]]]+-HHMM

    It also handles ASN1_UTC_TIME, which allows:

    1. Universal time (UTC time) only:         YYMMDDHHMM[SS[.fff]]Z
    2. Difference between local and UTC times: YYMMDDHHMM[SS[.fff]]+-HHMM

    Note the differences: Year is only two digits, minutes are not optional and
    there is no milliseconds.
    Nc                    s,   t |tƒr|  d|¡ ntt| ƒ |¡ d S )Nr   )r�   r   r  rÐ   rU   r3   r…   rÓ   r'   r(   r3   P  s    
zASN1_GENERALIZED_TIME.__init__c                 C   sF  t |tƒrt|ƒ}|dk�rtddddœ}d }�zP|d dkrX|d d… |dd …  }}nD|d d	v r€|d d… |dd …  }}nt | tƒr’tƒ ‚n
|d
 }}t | tƒrÐt|ƒdkrÐd|t|ƒd  dd …  }n.|d dkrò|t|ƒd  d }n|t|ƒ }t ||¡}|dk�r$|jt	j
d�}nX|�r||d dk�r<dnd}t |dd … d¡}t|j| |j| d�}	|jt	|	ƒd�}W n t�y–   d }Y n0 d }
|d u �rÖ| jjjdd … }| ¡  dd¡}d||f }
nr| d¡}
|j�rþ|
| d¡d d… 7 }
|jt	j
k�r|
| d¡7 }
n,|jd u�rH|j |¡d u�rH|
| d¡7 }
t | d|
¡ t | d |¡ t | ||¡ nÎ|dk�rˆtd!ƒ nº|d k�r4t | ||¡ t |tƒ�r$t | tƒ�r¼dnd"}|j�rà| |d# ¡d d$… }n| |d% ¡}|jt	j
k�r|d }n|| d&¡ }t | d|¡ nt | dd ¡ nt | ||¡ d S )'Nr†   z%Y%m%d%Hz
%Y%m%d%H%Mz%Y%m%d%H%M%S)rK   r�   é   r›   ÚZéûÿÿÿ)ú+ú-rC   rK   z%yrs   éüÿÿÿÚ.ru   z.%f)r   r   r   rB   z%H%M)ÚhoursÚminutesrv   rG   ú z%s [invalid %s]z%Y-%m-%d %H:%M:%Sz UTCz %zÚpretty_timer   z:Invalid operation: pretty_time rewriting is not supported.z%Yz%m%d%H%M%S.%fr™   z
%m%d%H%M%Sz%z)r�   r  r   rV   Ú
ValueErrorrý   r   ÚstrptimeÚreplacer"   Úutcr   ÚhourÚminuterÒ   rÑ   r6   r-   ÚlowerÚstrftimeÚmicrosecondr   r)   rW   r  rå   )r%   r’   r   Úformatsr&   r  ZofsÚfmtÚsignr2   r&  Z_namZyfmtr'   r'   r(   r  W  s€    

ý



ÿ






z!ASN1_GENERALIZED_TIME.__setattr__c                    s   d| j tt| ƒ ¡ f S )Nr  )r&  rÐ   rU   rÛ   rH   rÓ   r'   r(   rÛ   ¨  s    þzASN1_GENERALIZED_TIME.__repr__)r-   r.   r/   r0   r?   rÆ   rÑ   r&  r3   r  rÛ   rÔ   r'   r'   rÓ   r(   rU   <  s   QrU   c                   @   s   e Zd ZejZdS )rV   N)r-   r.   r/   r?   rÅ   rÑ   r'   r'   r'   r(   rV   °  s   rV   c                   @   s   e Zd ZejZdS )ÚASN1_ISO646_STRINGN)r-   r.   r/   r?   rÇ   rÑ   r'   r'   r'   r(   r3  ´  s   r3  c                   @   s   e Zd ZejZdS )ÚASN1_UNIVERSAL_STRINGN)r-   r.   r/   r?   rÉ   rÑ   r'   r'   r'   r(   r4  ¸  s   r4  c                   @   s   e Zd ZejZdS )ÚASN1_BMP_STRINGN)r-   r.   r/   r?   rÊ   rÑ   r'   r'   r'   r(   r5  ¼  s   r5  c                   @   s   e Zd ZejZddd„ZdS )r[   r   c                 C   s<   d| d| j j  d }| jD ]}||j|d d�7 }q|S )Nrß   z# %s:rà   rB   )rã   )rL   r-   r†   rä   )r%   rã   rm   r\   r'   r'   r(   rä   Ã  s    
zASN1_SEQUENCE.strshowN)r   )r-   r.   r/   r?   r¾   rÑ   rä   r'   r'   r'   r(   r[   À  s   r[   c                   @   s   e Zd ZejZdS )ÚASN1_SETN)r-   r.   r/   r?   r¿   rÑ   r'   r'   r'   r(   r6  Ë  s   r6  c                   @   s   e Zd ZejZdS )rT   N)r-   r.   r/   r?   rË   rÑ   r'   r'   r'   r(   rT   Ï  s   rT   c                   @   s   e Zd ZejZdS )ÚASN1_COUNTER32N)r-   r.   r/   r?   rÌ   rÑ   r'   r'   r'   r(   r7  Ó  s   r7  c                   @   s   e Zd ZejZdS )ÚASN1_GAUGE32N)r-   r.   r/   r?   rÍ   rÑ   r'   r'   r'   r(   r8  ×  s   r8  c                   @   s   e Zd ZejZdS )ÚASN1_TIME_TICKSN)r-   r.   r/   r?   rÎ   rÑ   r'   r'   r'   r(   r9  Û  s   r9  )br0   Ú
__future__r   r   rD   r   r   r   Zscapy.configr   Zscapy.errorr   r	   Zscapy.volatiler
   r   r   Zscapy.utilsr   r   r   Zscapy.compatr   r   r   r   Zscapy.libs.sixZlibsr=   r   r   r   r   r   r   r   r   r   r   r   r   r    Zscapy.asn1.berr!   r"   ÚImportErrorr#   r*  r4   r^   r`   ra   rb   rc   rp   Úadd_metaclassrr   r|   rŒ   r˜   r?   rÏ   rÕ   rÖ   r  rò   ró   r÷   rø   rR   rQ   r   r  r  rW   r  r  r  r  r  r  r  r  r  r  rU   rV   r3  r4  r5  r[   r6  rT   r7  r8  r9  r{   rÜ   r'   r'   r'   r(   Ú<module>   s†   <(*"*B 
	Ft