
    h\              	          d 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ZmZmZmZmZmZmZmZm Z m!Z!m"Z" dd
lm#Z# e"rddl$m%Z% 	 ddlm&Z& n6# e'$ r.  G d de          Z( G d de          Z& e(            e&_)        Y nw xY w G d ded                   Z* G d de          Z+ G d de+          Z, G d de+          Z- G d de-          Z. G d de          Z/ G d de          Z0 G d  d!e0"          Z1 G d# d$e          Z2 G d% d&e          Z3 G d' d(e3"          Z4 G d) d*e4          Z5 G d+ d,e6          Z7 e#d-          Z8 G d. d/ee8         e7"          Z9 G d0 d1e9e e:e9e         f                            Z; G d2 d3e;          Z< G d4 d5e;          Z= G d6 d7e=          Z> G d8 d9e9e?                   Z@ G d: d;e@          ZA G d< d=e9eB                   ZC G d> d?e9eB                   ZD G d@ dAe9d                   ZE G dB dCe9eB                   ZF G dD dEe@          ZG G dF dGeD          ZH G dH dIeD          ZI G dJ dKeD          ZJ G dL dMeD          ZK G dN dOeD          ZL G dP dQeD          ZM G dR dSeD          ZN G dT dUeD          ZO G dV dWeO          ZP G dX dYeD          ZQ G dZ d[eD          ZR G d\ d]eD          ZS G d^ d_e9ee                            ZT G d` daeT          ZU G db dceD          ZV G dd dee@          ZW G df dge@          ZX G dh die@          ZY G dj dke@          ZZe1j[        e_\        dS )lz&
ASN.1 (Abstract Syntax Notation One)
    N)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UnioncastTYPE_CHECKING)TypeVar)BERcodec_Object)timezonec                   $    e Zd Zd Zd Zd Zd ZdS )UTCc                      t          d          S )Nr   )r   selfdts     S/mounts/lovelace/software/anaconda3/lib/python3.11/site-packages/scapy/asn1/asn1.py	utcoffsetzUTC.utcoffset/   s    Q<<    c                     dS )Nr"    r$   s     r'   tznamez
UTC.tzname2   s    5r)   c                     d S Nr+   r$   s     r'   dstzUTC.dst5       4r)   N)__name__
__module____qualname____doc__r(   r,   r/   r+   r)   r'   r"   r"   ,   sF        		  	  	 	 	 		 	 	 	 	r)   r"   c                   &    e Zd Zd Zd Zd Zd ZdS )r    c                     || _         d S r.   delta)r%   r8   s     r'   __init__ztimezone.__init__9   s    DJJJr)   c                     | j         S r.   r7   r$   s     r'   r(   ztimezone.utcoffset<   s
    :r)   c                     d S r.   r+   r$   s     r'   r,   ztimezone.tzname?   r0   r)   c                     d S r.   r+   r$   s     r'   r/   ztimezone.dstB   r0   r)   N)r1   r2   r3   r9   r(   r,   r/   r+   r)   r'   r    r    8   sP        	 	 		 	 		 	 		 	 	 	 	r)   r    c                       e Zd ZddZddZdS )RandASN1ObjectNc                     |r|| _         n-d t          j                                        D             | _         d| _        d S )Nc                 <    g | ]}t          |d           |j        S 	_asn1_obj)hasattrrB   .0xs     r'   
<listcomp>z+RandASN1Object.__init__.<locals>.<listcomp>N   s:       1k**  r)   >ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789)objlistASN1_Class_UNIVERSAL	__rdict__valueschars)r%   rI   s     r'   r9   zRandASN1Object.__init__I   sP     	"DLL -7>>@@  DL
 V


r)   r   c                     t          j         j                  }t          |t                    r+ |t          t          j        dd                              S t          |t                    r) |t                      	                                          S t          |t                    st          |t                    r) |t                      	                                          S t          |t                    r[t          t          j        d          dz             } |d                     fdt!          |          D                                 S t          |t"                    rOdk     rIt          t          j        d          dz             } | fd	t!          |          D                       S t	          t          t          j        dd                              S )
Nr   i  g?    c              3   J   K   | ]}t          j        j                  V  d S r.   )randomchoicerM   )rE   _r%   s     r'   	<genexpr>z&RandASN1Object._fix.<locals>.<genexpr>`   s/      JJ1V]4:66JJJJJJr)   
   g{Gz?c                 r    g | ]3}                     j                                       dz             4S ))rI   rO   )	__class__rI   _fix)rE   rT   nr%   s     r'   rG   z'RandASN1Object._fix.<locals>.<listcomp>c   sK     * * * nnT\n::??AFF * * *r)   )rR   rS   rI   
issubclassASN1_INTEGERintgaussASN1_IPADDRESSr
   rY   ASN1_GENERALIZED_TIMEASN1_UTC_TIMEr   ASN1_STRINGexpovariatejoinrangeASN1_SEQUENCE)r%   rZ   oz1z2s   ``   r'   rY   zRandASN1Object._fixU   s   M$,''a&& 	+1Sa..//000>** 
	+1VXX]]__%%%011 	+Z=5Q5Q 	+1_&&++--...;'' 	+V'--122B1RWWJJJJb		JJJJJKKK=)) 	+q2vvV'--122B1 * * * * *$Ryy* * * + + +CQ 5 566777r)   r.   r   )r1   r2   r3   r9   rY   r+   r)   r'   r>   r>   H   s@        
V 
V 
V 
V8 8 8 8 8 8r)   r>   zASN1_Object[Any]c                       e Zd ZdS )
ASN1_ErrorNr1   r2   r3   r+   r)   r'   rl   rl   l           Dr)   rl   c                       e Zd ZdS )ASN1_Encoding_ErrorNrm   r+   r)   r'   rp   rp   p   rn   r)   rp   c                       e Zd ZdS )ASN1_Decoding_ErrorNrm   r+   r)   r'   rr   rr   t   rn   r)   rr   c                       e Zd ZdS )ASN1_BadTag_Decoding_ErrorNrm   r+   r)   r'   rt   rt   x   rn   r)   rt   c                   *    e Zd Zd ZddZddZd ZdS )	ASN1Codecc                     || _         d S r.   _stem)clsstems     r'   register_stemzASN1Codec.register_stem}   s    			r)   Nc                 :    | j                             ||          S N)context)ry   decrz   sr   s      r'   r   zASN1Codec.dec   s    y}}Q}000r)   c                 :    | j                             ||          S r~   )ry   safedecr   s      r'   r   zASN1Codec.safedec   s    y  G 444r)   c                     | j         S r.   rx   )rz   s    r'   get_stemzASN1Codec.get_stem   s
    yr)   r.   )r1   r2   r3   r|   r   r   r   r+   r)   r'   rv   rv   |   sZ          1 1 1 15 5 5 5    r)   rv   c                       e Zd ZeZdS )ASN1_Codecs_metaclassN)r1   r2   r3   rv   element_classr+   r)   r'   r   r      s        MMMr)   r   c                       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_CodecsrO                        	   N)r1   r2   r3   r   rv   BERDERPERCERLWERBACnetOERSERXERr+   r)   r'   r   r      s        
$y!

C
$y!

C
$y!

C
$y!

C4	1DT)QF
$y!

C
$y!

C
$y!

CCCr)   r   )	metaclassc                   8    e Zd Z	 	 ddZd Zd Zd Zd Zd ZdS )	ASN1TagNc                 V    t          j        | ||           || _        |i }|| _        d S r.   )r   r9   r   _codec)r%   keyvaluer   codecs        r'   r9   zASN1Tag.__init__   s5     	T3...=Er)   c                 Z    |                      | j        | j        | j        | j                  S r.   )rX   _key_valuer   r   r%   s    r'   clonezASN1Tag.clone   s"    ~~didlDKPPPr)   c                     || _         d S r.   rA   )r%   asn1objs     r'   register_asn1_objectzASN1Tag.register_asn1_object   s     r)   c                 p    t          | d          r|                     |          S t          d| z            )NrB   z)%r does not have any assigned ASN1 object)rC   rB   rl   r%   vals     r'   asn1_objectzASN1Tag.asn1_object   s:    4%% 	'>>#&&&DtKLLLr)   c                     || j         |<   d S r.   )r   )r%   codecnumr   s      r'   registerzASN1Tag.register   s     %Hr)   c                 j    	 | j         |         }n## t          $ r t          d|d|           w xY w|S )NzCodec z not found for tag )r   KeyErrorrl   )r%   r   cs      r'   	get_codeczASN1Tag.get_codec   sU    	NE"AA 	N 	N 	N*ttLMMM	Ns     0)NN)	r1   r2   r3   r9   r   r   r   r   r   r+   r)   r'   r   r      s         	   Q Q Q! ! !M M M& & &    r)   r   c                       e Zd ZeZd ZdS )ASN1_Class_metaclassc           	      J   |D ]Q}|j                                         D ]5\  }}||vr,t          |t                    r|                                ||<   6Ri }|                                D ]O\  }}t          |t
                    rt          ||          }|||<   |||<   5t          |t                    r|||<   P||d<   t          dt                              | |||                    }|j         	                                D ]}t          |t                    r||_
        |S )NrK   zType[ASN1_Class])__dict__items
isinstancer   r   r]   r   type__new__rL   r   )	rz   namebasesdctbkvrdictnclss	            r'   r   zASN1_Class_metaclass.__new__   s@     	' 	'A
((** ' '1C<<Jq'$:$:<WWYYCF' IIKK 	 	DAq!S!! AqMMAaAw'' a K&LLdE3779 9%%'' 	! 	!A!W%% ! 	r)   N)r1   r2   r3   r   r   r   r+   r)   r'   r   r      s(        M    r)   r   c                       e Zd ZdS )
ASN1_ClassNrm   r+   r)   r'   r   r      rn   r)   r   c                      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) eed&          Z*d'S )(rJ   	UNIVERSALr   rO   r   r   r   r   r   r   r   r   rV            0   1                                          @   A   F   B   C   N)+r1   r2   r3   r   r   r   ERRORRAWNONEANYBOOLEANINTEGER
BIT_STRINGSTRINGNULLOIDOBJECT_DESCRIPTOREXTERNALREAL
ENUMERATEDEMBEDDED_PDFUTF8_STRINGRELATIVE_OIDSEQUENCESETNUMERIC_STRINGPRINTABLE_STRING
T61_STRINGVIDEOTEX_STRING
IA5_STRINGUTC_TIMEGENERALIZED_TIMEGRAPHIC_STRINGISO646_STRINGGENERAL_STRINGUNIVERSAL_STRINGCHAR_STRING
BMP_STRING	IPADDRESS	COUNTER32	COUNTER64GAUGE32
TIME_TICKSr+   r)   r'   rJ   rJ      s       D D"E
$w

C4D
$w

Cd7AGd7AGgq!!JT'1F4D
$w

CWa((tGQH4Dgr""J4$$L$w##K4$$LtGY''H
$w	
"
"CT'2&&NtGR((gr""Jd7B''Ogr""JtGR  HtGR((T'2&&ND"%%MT'2&&NtGR(($w##Kgr""JWh''IWh''IWh''Id7H%%Ggx((JJJr)   rJ   c                        e Zd Z fdZ xZS )ASN1_Object_metaclassc           	          t          dt          t          |                               | |||                    }	 |j                            |           n'# t          $ r t          d|j        z             Y nw xY w|S )NzType[ASN1_Object[Any]]zError registering %r)r   superr  r   tagr   	Exceptionr   )rz   r   r   r   r   rX   s        r'   r   zASN1_Object_metaclass.__new__  s     $'--55c4LL
 
	4E&&q)))) 	4 	4 	4*QU233333	4s   A !A;:A;)r1   r2   r3   r   __classcell__rX   s   @r'   r  r    s8                r)   r  _Kc                   v    e Zd Zej        Zd Zd Zd Zd Z	d Z
ddZddZd	 Zd
 Zd Zd Zd Zd ZddZdS )ASN1_Objectc                     || _         d S r.   )r   r   s     r'   r9   zASN1_Object.__init__1  s    r)   c                 f    | j                             |                              | j                  S r.   )r  r   encr   r%   r   s     r'   r  zASN1_Object.enc5  s(    x!!%((,,TX666r)   c                 d    d| j                             d| j        j                  d| j        dS N<r   []>)r   getrX   r1   r   r   s    r'   __repr__zASN1_Object.__repr__9  s6     !]..vt~7NOOOOQUQYQYQYZZr)   c                 Z    t          |                     t          j                            S r.   )r   r  r   ASN1_default_codecr   s    r'   __str__zASN1_Object.__str__=  s    $"9::;;;r)   c                 @    |                      t          j                  S r.   )r  r   r"  r   s    r'   	__bytes__zASN1_Object.__bytes__A  s    xx/000r)   r   c                 2    d|z  t          |           z   dz   S )N  
)reprr%   lvls     r'   strshowzASN1_Object.strshowE  s    s
d4jj(4//r)   c                 J    t          |                     |                     d S r.   )printr,  r*  s     r'   showzASN1_Object.showI  s"    dll3     r)   c                 2    t          | j        |k              S r.   boolr   r%   others     r'   __eq__zASN1_Object.__eq__M      DH%&&&r)   c                 2    t          | j        |k               S r.   r1  r3  s     r'   __lt__zASN1_Object.__lt__Q      DHu$%%%r)   c                 2    t          | j        |k              S r.   r1  r3  s     r'   __le__zASN1_Object.__le__U  r6  r)   c                 2    t          | j        |k              S r.   r1  r3  s     r'   __gt__zASN1_Object.__gt__Y  r9  r)   c                 2    t          | j        |k              S r.   r1  r3  s     r'   __ge__zASN1_Object.__ge__]  r6  r)   c                 2    t          | j        |k              S r.   r1  r3  s     r'   __ne__zASN1_Object.__ne__a  r6  r)   Fc                    |rZt          | j        t                    r| j                            dd          }nt	          | j                  }| j        j        |dS | j        j        dt	          | j                  dS )Nzutf-8backslashreplace)errors)r   r   ())r   r   bytesdecoder)  rX   r1   )r%   jsonr   s      r'   commandzASN1_Object.commande  s{     	H$(E** %hoog6HoII48nn N3cBBB#~666TXGGr)   Nrj   F)r1   r2   r3   rJ   r   r  r9   r  r   r#  r%  r,  r/  r5  r8  r;  r=  r?  rA  rJ  r+   r)   r'   r  r  .  s       

"C  7 7 7[ [ [< < <1 1 10 0 0 0! ! ! !' ' '& & &' ' '& & &' ' '' ' '	H 	H 	H 	H 	H 	Hr)   r  c                       e Zd ZdS )_ASN1_ERRORNrm   r+   r)   r'   rM  rM  w  rn   r)   rM  c                   0    e Zd Zej        ZddZd Zd ZdS )ASN1_DECODING_ERRORNc                 J    t                               | |           || _        d S r.   )r  r9   exc)r%   r   rQ  s      r'   r9   zASN1_DECODING_ERROR.__init__~  s#    T3'''r)   c                     d| j                             d| j        j                  d| j        d| j        r| j        j        d         pddS )Nr  r   r  z]{{r   rP   z}}>)r   r  rX   r1   r   rQ  argsr   s    r'   r   zASN1_DECODING_ERROR.__repr__  sW      Mfdn&=>>>>HHHH)q)/R//
 	
r)   c                 x    t          | j        t                    r| j                            |          S | j        S r.   r   r   r  r  r  s     r'   r  zASN1_DECODING_ERROR.enc  1    dh,, 	'8<<&&&xr)   r.   )	r1   r2   r3   rJ   r   r  r9   r   r  r+   r)   r'   rO  rO  {  sN        

$C   

 
 
    r)   rO  c                   "    e Zd Zej        Zd ZdS )
ASN1_forcec                 x    t          | j        t                    r| j                            |          S | j        S r.   rU  r  s     r'   r  zASN1_force.enc  rV  r)   N)r1   r2   r3   rJ   r   r  r  r+   r)   r'   rX  rX    s+        

"C    r)   rX  c                       e Zd ZdS )ASN1_BADTAGNrm   r+   r)   r'   r[  r[    rn   r)   r[  c                   "    e Zd Zej        Zd ZdS )r\   c                    t          | j                  }|d         dk    r
|d d         }t          |          dk    r|d d         dz   |dd          z   }t          | j                  }t          |          dk    r|d d         dz   |dd          z   }|d	| j                            d
| j        j                  d|dz   S )Nr   Lr   r   ...r   rV   z <r   r  r  )hexr   lenr)  r   r  rX   r1   )r%   hrs      r'   r   zASN1_INTEGER.__repr__  s    MMR5C<<#2#Aq66B;;#2#344(ANNq66B;;#2#344(Aq$-"3"3FDN<S"T"T"T"TVWVWVWXXXr)   N)r1   r2   r3   rJ   r   r  r   r+   r)   r'   r\   r\     s0        

&CY Y Y Y Yr)   r\   c                   "    e Zd Zej        Zd ZdS )ASN1_BOOLEANc                 T    | j         dk     dt                              |           S )Nr    )r   r  r   r   s    r'   r   zASN1_BOOLEAN.__repr__  s-    #x1}---{/C/CD/I/I/IJJr)   N)r1   r2   r3   rJ   r   r  r   r+   r)   r'   rf  rf    s0        

&CK K K K Kr)   rf  c                   :    e Zd ZdZej        ZddZd Zd Z	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                 v    |st          t          |          | _        d S t          t          |          | _        d S r.   )r   strr   rG  val_readable)r%   r   readables      r'   r9   zASN1_BIT_STRING.__init__  s5     	1C~~DHHH $UC 0 0Dr)   c                 4   |dk    rt          |t          t          f          r d                    d |D                       }nt	          d           d}t
                              | d|           t
                              | |t          |                     t
                              | dd           d S |dk    r't          |          }t          |t                    rt          d	 |D                       rt	          d
           d S t          |          dz  dk    rd}ndt          |          dz  z
  }|d|z  z   }t          t          |          gdz   }d                    d |D                       }nt	          d           d}d}t
                              | d|           t
                              | ||           t
                              | d|           d S |dk    rt	          d           d S t
                              | ||           d S )Nrm  rP   c              3   t   K   | ]3}t          t          |                                        d           V  4dS )r   N)r   r   zfillrD   s     r'   rU   z.ASN1_BIT_STRING.__setattr__.<locals>.<genexpr>  s<      FF1gc!ffoo33A66FFFFFFr)   zInvalid val: should be bytesz<invalid val_readable>r   unused_bitsr   c              3   "   K   | ]
}|d v|V  dS )01Nr+   )rE   r   s     r'   rU   z.ASN1_BIT_STRING.__setattr__.<locals>.<genexpr>  s,      ??Q1J+>+>q+>+>+>+>??r)   z3Invalid operation: 'val' is not a valid bit string.r   ru  r)   c              3   v   K   | ]4}t          t          d                     |          d                    V  5dS )rP   r   N)r   r]   rd   rD   s     r'   rU   z.ASN1_BIT_STRING.__setattr__.<locals>.<genexpr>  s>      +W+WCBGGAJJ0B0B,C,C+W+W+W+W+W+Wr)   zInvalid val: should be strs   <invalid val>z:Invalid operation: unused_bits rewriting is not supported.)r   rl  rG  rd   r   object__setattr__r   r   anyrb  zipiter)r%   r   r   r   rr  padded_value	bytes_arrrm  s           r'   ry  zASN1_BIT_STRING.__setattr__  s9   >!!%#u.. /ggFFFFFFF6777.tUC000tT<+>+>???t]A66666U]]e$$E%%%  ??%????? 
XQRRRF5zzA~**&'&'3u::>&:#(C+,=#>L #d<&8&8%9A%= >I#&88+W+WY+W+W+W#W#WLL4555/t^\BBBtT5111t]K@@@@@]"" ( ) ) ) ) ) tT511111r)   c                    t          |          }|dv sJ t          | j                  |k     r(| xj        d|t          | j                  z
  z  z  c_        | j        d|         |z   | j        |dz   d         z   | _        dS )z?
        Sets bit 'i' to value 'val' (starting from 0)
        rt  ru  NrO   )rl  rb  r   )r%   ir   s      r'   setzASN1_BIT_STRING.set  s    
 #hhj    tx==1HHq3tx==011HH8BQB<#%Q(88r)   c                 H   | j         }t          |          dk    r|d d         dz   |dd          z   }| j        }t          |          dk    r|d d         dz   |dd          z   }d| j                            d| j        j                  ||| j        | j        d	k    rd
ndfz  S )N   rV   s   ...r`  r   r_  z<%s[%s]=%r (%d unused bit%s)>r   rO   r   rP   )rm  rb  r   r   r  rX   r1   rr  )r%   r   r   s      r'   r   zASN1_BIT_STRING.__repr__  s    q66B;;#2#!CDD')AHq66B;;#2#344(A.Mfdn&=>>#a''CCR2
 
 	
r)   NrK  )r1   r2   r3   r4   rJ   r   r  r9   ry  r  r   r+   r)   r'   rj  rj    sj         
 
)C1 1 1 1$2 $2 $2L	9 	9 	9
 
 
 
 
r)   rj  c                       e Zd Zej        ZdS )rb   N)r1   r2   r3   rJ   r   r  r+   r)   r'   rb   rb     s        

%CCCr)   rb   c                   "    e Zd Zej        Zd ZdS )	ASN1_NULLc                 6    t                               |           S r.   )r  r   r   s    r'   r   zASN1_NULL.__repr__  s    ##D)))r)   N)r1   r2   r3   rJ   r   r  r   r+   r)   r'   r  r    s+        

#C* * * * *r)   r  c                   (    e Zd Zej        Zd Zd ZdS )ASN1_OIDc                     t          |          }t          j                            |          }t                              | |           t          j                            |          | _        d S r.   )r   r   mib_oidr  r9   _oidnameoidnamer   s     r'   r9   zASN1_OID.__init__  sQ    nnhmmC  T3'''x((--r)   c                 d    d| j                             d| j        j                  d| j        dS r  )r   r  rX   r1   r  r   s    r'   r   zASN1_OID.__repr__!  s6     !]..vt~7NOOOOQUQ]Q]Q]^^r)   N)r1   r2   r3   rJ   r   r  r9   r   r+   r)   r'   r  r    s?        

"C. . ._ _ _ _ _r)   r  c                       e Zd Zej        ZdS )ASN1_ENUMERATEDN)r1   r2   r3   rJ   r   r  r+   r)   r'   r  r  &          

)CCCr)   r  c                       e Zd Zej        ZdS )ASN1_UTF8_STRINGN)r1   r2   r3   rJ   r   r  r+   r)   r'   r  r  *  s        

*CCCr)   r  c                       e Zd Zej        ZdS )ASN1_NUMERIC_STRINGN)r1   r2   r3   rJ   r   r  r+   r)   r'   r  r  .          

-CCCr)   r  c                       e Zd Zej        ZdS )ASN1_PRINTABLE_STRINGN)r1   r2   r3   rJ   r   r  r+   r)   r'   r  r  2          

/CCCr)   r  c                       e Zd Zej        ZdS )ASN1_T61_STRINGN)r1   r2   r3   rJ   r   r  r+   r)   r'   r  r  6  r  r)   r  c                       e Zd Zej        ZdS )ASN1_VIDEOTEX_STRINGN)r1   r2   r3   rJ   r   r  r+   r)   r'   r  r  :  s        

.CCCr)   r  c                       e Zd Zej        ZdS )ASN1_IA5_STRINGN)r1   r2   r3   rJ   r   r  r+   r)   r'   r  r  >  r  r)   r  c                       e Zd Zej        ZdS )ASN1_GENERAL_STRINGN)r1   r2   r3   rJ   r  r  r+   r)   r'   r  r  B  r  r)   r  c                   D     e Zd ZdZej        ZdZ fdZd Z	 fdZ
 xZS )r`   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                     t          |t                    r|                     d|           d S t          t          |                               |           d S )Nr   )r   r   ry  r  r`   r9   )r%   r   rX   s     r'   r9   zASN1_GENERALIZED_TIME.__init__Z  sV    c8$$ 	=Z-----'..77<<<<<r)   c                    t          |t                    rt          |          }|dk    rdddd}d }	 |d         dk    r|d d         |dd          }}nF|d         d	v r|d d         |dd          }}n't          | t                    rt	                      |d
}}t          | t                    r7t          |          dk    r$d|t          |          dz            dd          z   }n=|d         dk    r|t          |          dz
           dz   }n|t          |                   }t          j        ||          }|dk    r!|                    t          j
                  }ns|rq|d         dk    rdnd}t          j        |dd          d          }t          |j        |z  |j        |z            }	|                    t          |	                    }n# t          $ r d }Y nw xY wd }
|J| j        j        j        dd          }|                                                    dd          }|d|d}
n|                    d          }
|j        r |
|                    d          d d         z  }
|j        t          j
        k    r|
|                    d          z  }
n9|j        2|j                            |          |
|                    d          z  }
t.                              | d |
           t.                              | d!|           t.                              | ||           d S |d k    rt3          d"           d S |d!k    rt.                              | ||           t          |t                    rt          | t                    rdnd#}|j        r!|                    |d$z             d d%         }n|                    |d&z             }|j        t          j
        k    r|dz   }n||                    d'          z   }t.                              | d|           d S t.                              | dd            d S t.                              | ||           d S )(Nr   z%Y%m%d%Hz
%Y%m%d%H%Mz%Y%m%d%H%M%S)rV   r      r   Z)+-rP   rV   z%yr   .r   z.%f)r   r   r  rO   z%H%M)hoursminutesr   rT   rh  z
 [invalid ]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   rG  r   ra   
ValueErrorrb  r   strptimereplacer    utcr   hourminuter  r  rB   r1   lowerstrftimemicrosecondr   r(   rb   ry  r.  )r%   r   r   formatsr&   rl  ofsfmtsignr8   r  _namyfmts                r'   ry  z!ASN1_GENERALIZED_TIME.__setattr__a  s   eU## 	%e$$E5== " G
 B9##$SbSz5:CC2Y*,,$SbSz5:CCm44 )$,,&$bCdM22 ,s3xx2~~SA!6qrr!::CCW^^!#c((Q,/%7CC!#c((+C&sC00#::8<88BB <!$Q322AD"+CGV<<C%CHtO.1j4.?A A AE8E??;;B    Kzx)21226zz||++C553855$$$? kk*=>>> :2;;u#5#5bqb#99K9,,2;;v#6#66KKY*y**2..:#r{{5'9'99##D-EEE##D*b999##D$66666]""NOOOOOZ##D$666%** ;)$>>HttD$ >..)?@@"ECC..)<==C<8<//)CCt 4 44C''eS99999''eT:::::##D$66666s   FG G$#G$c                 f    | j         dt          t          |                                           S )Nrh  )r  r  r`   r   )r%   rX   s    r'   r   zASN1_GENERALIZED_TIME.__repr__  s8     '..77999
 	
r)   )r1   r2   r3   r4   rJ   r   r  r  r9   ry  r   r  r  s   @r'   r`   r`   F  s}           
/CK= = = = =O7 O7 O7b
 
 
 
 
 
 
 
 
r)   r`   c                       e Zd Zej        ZdS )ra   N)r1   r2   r3   rJ   r   r  r+   r)   r'   ra   ra     s        

'CCCr)   ra   c                       e Zd Zej        ZdS )ASN1_ISO646_STRINGN)r1   r2   r3   rJ   r  r  r+   r)   r'   r  r    s        

,CCCr)   r  c                       e Zd Zej        ZdS )ASN1_UNIVERSAL_STRINGN)r1   r2   r3   rJ   r  r  r+   r)   r'   r  r    r  r)   r  c                   (    e Zd Zej        Zd Zd ZdS )ASN1_BMP_STRINGc                     |dk    rHt          |t                    r|                    d          }t                              | ||           d S t                              | ||           d S )Nr   utf-16be)r   rl  encoderx  ry  )r%   r   r   s      r'   ry  zASN1_BMP_STRING.__setattr__  sj    5==%%% 1Z00tT511111tT511111r)   c                     d| j                             d| j        j                  d| j                            d          dS )Nr  r   r  r  r  )r   r  rX   r1   r   rH  r   s    r'   r   zASN1_BMP_STRING.__repr__  sG      Mfdn&=>>>>HOOJ''''
 	
r)   N)r1   r2   r3   rJ   r  r  ry  r   r+   r)   r'   r  r    s:        

)C2 2 2
 
 
 
 
r)   r  c                   $    e Zd Zej        ZddZdS )rf   r   c                     d|z  d| j         j        z  z   dz   }| j        D ]}||                    |dz             z  }|S )Nr'  z# %s:r(  rO   )r+  )rX   r1   r   r,  )r%   r+  r   rg   s       r'   r,  zASN1_SEQUENCE.strshow  sS    CZGdn&==>E 	( 	(AsQw'''AAr)   Nrj   )r1   r2   r3   rJ   r   r  r,  r+   r)   r'   rf   rf     s0        

'C     r)   rf   c                       e Zd Zej        ZdS )ASN1_SETN)r1   r2   r3   rJ   r   r  r+   r)   r'   r  r    s        

"CCCr)   r  c                       e Zd Zej        ZdS )r_   N)r1   r2   r3   rJ   r  r  r+   r)   r'   r_   r_             

(CCCr)   r_   c                       e Zd Zej        ZdS )ASN1_COUNTER32N)r1   r2   r3   rJ   r  r  r+   r)   r'   r  r    r  r)   r  c                       e Zd Zej        ZdS )ASN1_COUNTER64N)r1   r2   r3   rJ   r  r  r+   r)   r'   r  r    r  r)   r  c                       e Zd Zej        ZdS )ASN1_GAUGE32N)r1   r2   r3   rJ   r	  r  r+   r)   r'   r  r    s        

&CCCr)   r  c                       e Zd Zej        ZdS )ASN1_TIME_TICKSN)r1   r2   r3   rJ   r
  r  r+   r)   r'   r  r    r  r)   r  )]r4   rR   r   r   r   scapy.configr   scapy.errorr   r   scapy.volatiler	   r
   r   scapy.utilsr   r   r   scapy.compatr   r   r   r   typingr   r   r   r   r   r   r   r   r   r   r   r   scapy.asn1.berr   r    ImportErrorr"   r  r>   rl   rp   rr   rt   rv   r   r   r   r   r   rJ   r   r  r  r  rG  rM  rO  rX  r[  r]   r\   rf  rl  rj  rb   r  r  r  r  r  r  r  r  r  r  r`   ra   r  r  r  rf   r  r_   r  r  r  r  r   r"  r+   r)   r'   <module>r     s

     0 0 0 0 0 0 0 0 0 0       0 0 0 0 0 0 0 0 = = = = = = = = = = < < < < < < < < < < : : : : : : : : : : : :                                /......!!!!!!!   
 
 
 
 
f 
 
 
    6    355HLLL7<8 8 8 8 8Y12 8 8 8H	 	 	 	 	 	 	 		 	 	 	 	* 	 	 		 	 	 	 	* 	 	 		 	 	 	 	!4 	 	 	       $    N   	 	 	 	 	1 	 	 	 	' ' ' ' 'k ' ' 'T    >   D	 	 	 	 	/ 	 	 	 	() () () () (): () () ()V    D   $ WT]]@H @H @H @H @H'"+)> @H @H @H @HR	 	 	 	 	+eE;s+;$;<= 	 	 	    +   .       	 	 	 	 	* 	 	 	Y Y Y Y Y;s# Y Y Y"K K K K K< K K KN
 N
 N
 N
 N
k#& N
 N
 N
b& & & & &+c" & & &* * * * *D! * * *_ _ _ _ _{3 _ _ _* * * * *l * * *+ + + + +{ + + +. . . . .+ . . .0 0 0 0 0K 0 0 0* * * * *k * * */ / / / /; / / /* * * * *k * * *. . . . .+ . . .q
 q
 q
 q
 q
K q
 q
 q
h( ( ( ( () ( ( (- - - - - - - -0 0 0 0 0K 0 0 0
 
 
 
 
k 
 
 
(    KS	*   # # # # #} # # #) ) ) ) )[ ) ) )) ) ) ) )\ ) ) )) ) ) ) )\ ) ) )' ' ' ' '< ' ' '* * * * *l * * * &/   s   (A/ /0B"!B"