
    c]]l                        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.                        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      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      Z% G d% d&e      Z&i ejN                  jP                   e       ejR                  jP                   e       ejT                  jP                   e       ejV                  jP                   e       ejX                  jP                   e       ejZ                  jP                   e        ej\                  jP                   e!       ej^                  jP                   e       ej`                  jP                   e"       ejb                  jP                   e$       ejd                  jP                   e$       ejf                  jP                   e%       ejh                  jP                   e       ejj                  jP                   e       ejl                  jP                   e       ejn                  jP                   e       ejp                  jP                   e       ejr                  jP                   e       ejt                  jP                   e       ejv                  jP                   e       ejx                  jP                   e       ejz                  jP                   e       ej|                  jP                   e       ej~                  jP                   e       ej                  jP                   e       ej                  jP                   e       i	ZBi ejR                  j                   e       ejT                  j                   e       ejV                  j                   e       ejX                  j                   e       ejZ                  j                   e        ej\                  j                   e!       ej^                  j                   e       ej`                  j                   e"       ej                  j                   e#       ejd                  j                   e$       ej                  j                   e#       ejb                  j                   e$       ejf                  j                   e%       ej                  j                   e&       ejh                  j                   e       ejj                  j                   e       ejl                  j                   e       ejn                  j                   e       ejp                  j                   e       ejr                  j                   e       ejt                  j                   e       ejv                  j                   e       ejx                  j                   e       ejz                  j                   e       ej|                  j                   e       ej~                  j                   e       ej                  j                   e       ej                  j                   e       iZG G d' d(e      ZH eHeBeG      ZIy))    N)debug)error)eoo)to_bytes)int2octoct2int	ints2octsnullstr2octsisOctetsType)char)tag)univ)usefulencode)flagsc                   >    e Zd ZdZdZ ee      Zd Zd Zd Z	ddZ
y)	AbstractItemEncoderT)r   r   c                     |\  }}}||z  }|r|t         j                  z  }|dk  r||z  fS |dz  f}|dz  }|rd|dz  z  f|z   }|dz  }|r|dz  f|z   S )N            )r   tagFormatConstructed)self	singleTagisConstructedtagClass	tagFormattagId
encodedTag	substrates           :/usr/lib/python3/dist-packages/pyasn1/codec/ber/encoder.py	encodeTagzAbstractItemEncoder.encodeTag!   s    %.")U	)
#222J2:%&& IaKE!UT\24y@	!  %')33    c                     |s| j                   ry|dk  r|fS d}|r|dz  f|z   }|dz  }|rt        |      }|dkD  rt        j                  d|z        d|z  f|z   S )N)r   r          ~   zLength octets overflow (%d))supportIndefLenModelenr   PyAsn1Error)r   lengthdefModer"   substrateLens        r#   encodeLengthz AbstractItemEncoder.encodeLength5   s    433D=7N I#d],y8	1  y>Lc!''(E(TUU<')I55r%   c                 ,    t        j                  d      )NzNot implemented)r   r-   r   valueasn1Spec	encodeFunoptionss        r#   encodeValuezAbstractItemEncoder.encodeValueI   s     122r%   Nc                 <   ||j                   }n|j                   }|s | j                  |||fi |\  }}}|S |j                  dd      }	t        }t	        |j
                        D ]\  \  }
}|	}|
sk	  | j                  |||fi |\  }}}t        rt        d|xr dxs dd	|d
|       |s|r|j                  dd      r|c S |sd}t        rt        d       | j                  |      }t        r8t        d|xr dxs dd|d
t        j                  t        |                   || j                  t!        |      |      z  }t        r6t        dt!        |      dt        j                  t        |                   r#t        |      |z   }|r4|| j"                  z  }E||z   }|rN|| j$                  z  }_ st        |      }|S # t        j                  $ r3 t        j                         }t        j                  d|d|d         w xY w)Nr/   TzError encoding z:    zencoded zconstructed  zvalue z into 
ifNotEmptyFz;overridden encoding mode into definitive for primitive typeztag z octets (tag + payload) into )tagSetr8   getr
   	enumerate	superTagsr   r-   sysexc_infoLOGr$   r   hexdumpr	   r1   r,   eooOctetsSubstrateeooIntegerSubstrate)r   r4   r5   r6   r7   r=   r"   r   isOctetsr/   idxr   defModeOverrideexcheaders                  r#   r   zAbstractItemEncoder.encodeL   s=   \\F__F 1A1A1Ax2.52.I}h ++i.	'(8(89 5	:NC%O C9I9I9Ix:6=:6I}h %8.>B>y  !]w{{<QV7W$$$&*OYZ^^I}=F!4n::u}}Yv->?A B d''IHHF	NEMM)F2C$DF G %f-	9	&!8!88I #Y.	&!9!99Ik5	:n !),I_ (( C,,.C++38#a&AC CCs   2GAH)NN)__name__
__module____qualname__r+   rF   r	   rE   r$   r1   r8   r   r'   r%   r#   r   r      s1     !"#674(6(3Lr%   r   c                       e Zd Zd Zy)EndOfOctetsEncoderc                     t         ddfS NFTr
   r3   s        r#   r8   zEndOfOctetsEncoder.encodeValue       UD  r%   NrL   rM   rN   r8   r'   r%   r#   rP   rP      s    !r%   rP   c                       e Zd ZdZd Zy)BooleanEncoderFc                     |xr dxs dddfS )N)r:   r   Fr'   r3   s        r#   r8   zBooleanEncoder.encodeValue   s    ~%ue33r%   NrL   rM   rN   r+   r8   r'   r%   r#   rW   rW      s    4r%   rW   c                       e Zd ZdZdZd Zy)IntegerEncoderFc                     |dk(  r4t         r t        d| j                  xr dxs dz         | j                  ryyt        t        |      d      d	dfS )
Nr   z#encoding %spayload for zero INTEGERzno r;   )r'   FF)rY   FFT)signedF)rC   supportCompactZeror   intr3   s        r#   r8   zIntegerEncoder.encodeValue   sX    A:9++5; 
 &&')E
40%==r%   N)rL   rM   rN   r+   r_   r8   r'   r%   r#   r\   r\      s    >r%   r\   c                       e Zd Zd Zy)BitStringEncoderc                 X   ||j                  |      }t        |      }|dz  r|d|dz  z
  z  }n|}|j                  dd      }|rt        |      |dz  k  r0|j                         }t	        t        |      dz  |z
        |z   ddfS t
        rt        d|z         |j                  j                  }	|	rt        j                  |	|	      }
nt        j                         }
|j                  |
      }d}t        }||k  r*|}t        ||dz  z   |      }| |||| |fi |z  }||k  r*|ddfS )Nr)   maxChunkSizer   FT#encoding into up to %s-octet chunksr=   )cloner,   r>   asOctetsr   rC   r=   baseTagr   TagSetr
   min)r   r4   r5   r6   r7   valueLengthalignedValuerd   r"   ri   r=   stopstarts                r#   r8   zBitStringEncoder.encodeValue   sN   NN5)E%j? Qq%89L L{{>15s<0L14DD$--/I3y>A-;<yH%QUUU5DE,,&& ZZ1F ZZ\F#)))8	[ Eu|a//=D<d#;XQQQI [ 
 $$$r%   NrU   r'   r%   r#   rb   rb      s    %%r%   rb   c                       e Zd Zd Zy)OctetStringEncoderc                    ||j                         }n-t        |      s |j                  |      j                         }n|}|j                  dd      }|rt	        |      |k  r|ddfS t
        rt        d|z         |V|j                  j                  }|rt        j                  ||      }nt        j                         }|j                  |      }n`t        |      sU|j                  j                  }|rt        j                  ||      }nt        j                         }|j                  |      }d}	t        }	 ||	|	|z    }
|
sn| ||
|fi |z  }|	|z  }	|ddfS )Nrd   r   FTre   rf   )rh   r   rg   r>   r,   rC   r=   ri   r   rj   r
   )r   r4   r5   r6   r7   r"   rd   ri   r=   poschunks              r#   r8   zOctetStringEncoder.encodeValue   s`   (Ie$ u-668I I{{>15s9~=eT))5DE ll**G GW5 {{&{1He$oo--G GW5 ~~V~4H	#cL01E5(>g>>I<C  $$$r%   NrU   r'   r%   r#   rq   rq      s    8%r%   rq   c                       e Zd ZdZd Zy)NullEncoderFc                     t         ddfS rR   rS   r3   s        r#   r8   zNullEncoder.encodeValue$  rT   r%   NrZ   r'   r%   r#   rv   rv   !  s    !r%   rv   c                       e Zd ZdZd Zy)ObjectIdentifierEncoderFc                    ||j                  |      }|j                         }	 |d   }|d   }d|cxk  rdk  rNn nK|dk(  r|dz   f|dd  z   }nc|dk(  r
|f|dd  z   }nT|dk(  r|dz   f|dd  z   }nBt        j                  d|      |dk(  r|dz   f|dd  z   }nt        j                  d|      d	}|D ]]  }	d|	cxk  rd
k  r
n n||	fz  }|	d
kD  r'|	d
z  f}
|	dz  }	|	rd|	d
z  z  f|
z   }
|	dz  }	|	r||
z  }Dt        j                  d|	d|       |ddfS # t        $ r t        j                  d|      w xY w)Nr   r:   z
Short OID '   (      P   z Impossible first/second arcs at r'   r   r   r   zNegative OID arc z at F)rg   asTuple
IndexErrorr   r-   )r   r4   r5   r6   r7   oidfirstsecondoctetssubOidress              r#   r8   z#ObjectIdentifierEncoder.encodeValue+  s   NN5)Emmo	?FEVF
 "z{ns12w.!i#ab')!{ns12w.''PU(WXXaZB;.3qr7*C ##E$STT  	WFF!c!6)##}&16D=13c9CqLF 
 # ''vu(UVV%	W( ue##U  	?##e$=>>	?s   
D "D=NrZ   r'   r%   r#   ry   ry   (  s    5$r%   ry   c                   0    e Zd ZdZdZed        Zd Zd Zy)RealEncoderr   r}   c                 <   d\  }}| dk  rd}|dk  rd}| |z  } |dk(  r)| dt        |      dz  |z  z  z  } t        |      dz  |z  }n-|dk(  r(| dt        |      dz  |z  z  z  } t        |      dz  |z  }	 t        |       | k7  r| |z  } |d	z  }	 |t        |       ||fS )
N)r:   r:   r   r)   r}            r:   )absr`   )mencbaseemsess        r#   _dropFloatingPointzRealEncoder._dropFloatingPointg  s    Bq5Bq5B	Ra<s1vzB''AA!b A]s1vzB''AA!b A1v{WQ3q67A%%r%   c           
      Z   |\  }}}g d}|j                   |v r| j                  ||j                   |      S | j                   |v r| j                  || j                   |      S |||g}|||g}d}d}	t        d      }t        d      D ]  }
| j                  ||
   ||
   ||
         \  }||
<   ||
<   ||
<   t	        ||
         t	        |      k  s$t	        ||
         t	        |      k(  sb||
   |k  sk||
   }t        ||
         }||
   }	 t        rt        d|	d|d|d	|       |||	|fS )
N)r}   r)   r   r:   r}   infr   z(automatically chosen REAL encoding base z, sign z, mantissa z, exponent )
binEncBaser   floatranger   r`   rC   )r   r4   r   br   encBasemantissaexponentsignr   is              r#   _chooseEncBasezRealEncoder._chooseEncBase  s\   1aw&**1e.>.>BB__'**1dooqAA q!9q!9%Lq 		%A !33HQKXVW[YTa[QZa[8A;#a&(S!-=Q-GHUVKZ[OQK$!!*		% !($16 7 Q""r%   c                    ||j                  |      }|j                  ry|j                  ry|\  }}}|s	t        ddfS |dk(  r0t        rt	        d       t        d||dk(  xr d	xs d
|fz        ddfS |dk(  rd}| j                  |      \  }	}}
}|	dk  r|dz  }|
dk(  r|dz  dk(  rZ|dz  }|dz  }|dz  dk(  rnF|
dk(  r!|dz  dk(  r|dz  }|dz  }|dz  dk(  r|dz  }n |dz  dk(  r|dz  }|dz  }|dz  dk(  r|dz  }d}|dz  dk(  r|dz  }|dz  }|dz  dk(  r|dkD  rt        j                  d      ||dz  z  }t        }|dk(  s|dk(  rt        |dz        }nk|dvrt        |dz        |z   }|dz  }|dvr|dk(  r!|rt        |d         dz  rt        d      |z   }|dk(  r!|rt        |d         dz  st        d      |z   }t        |      }|dkD  rt        j                  d      |dk(  rn,|dk(  r|dz  }n!|dk(  r|dz  }n|dz  }t        |dz        |z   }t        }|rt        |dz        |z   }|dz  }|rt        |      |z   |z   }|ddfS t        j                  d|z        )N))@   FF))A   FFFT
   z!encoding REAL into character formz%dE%s%dr   +r;   r}   r   r   r:   r)   r   r   r      r       zScale factor overflowr   r(   )r   r   zReal exponent overflowzProhibited Real base %s)rg   	isPlusInf
isMinusInfr
   rC   r   r   r   r-   r   r   r,   )r   r4   r5   r6   r7   r   r   r   for   r   sfeonpor"   s                   r#   r8   zRealEncoder.encodeValue  s%   NN5)E??((1a$$778MQQ30D"a,HHI5RVVV!VB $ 3 3E :B7AAvd
 !|#gl!GAFA #gl A#gl!GAFA #gl d
 #gl!GAFA #gl d
Bc'Q,aa c'Q, Av''(?@@"'MBBAvbQX& w& T*R/B!GA w& 6bWRU^d%: bB7r72a5>D+@ +BBA4x''(@AAAvaaaa aQX&+BQX&+a   b(2-IeT)) ##$=$ABBr%   N)	rL   rM   rN   r+   r   staticmethodr   r   r8   r'   r%   r#   r   r   c  s,    J& &6#BcCr%   r   c                       e Zd ZdZd Zy)SequenceEncoderFc           
      (   t         }|j                  d| j                        }t        rt        d|xr dxs dz         ||j                  }|r||j
                  }t        |j                               D ]Z  \  }	}
|r||	   }|j                  r!|
j                  st        rt        d|       ;|j                  r$|
|j                  k(  rt        rt        d|       k|r|j                  |j                         |rj                  r|j                  }|j                  t        j                   j                  t        j"                  j                  fv r$| ||
|fi t%        ||j
                        z  } ||
|fi |}|j'                  |
      r||z  })| |||fi |z  }t        s>t        d	|       N| ||
|fi |z  }] nt        |j
                  j(                        D ]c  \  }	}	 ||j*                     }
|j                  r#|j*                  |vrt        rt        d|       F|j                  r$|
|j                  k(  rt        rt        d|       v|r|j                  |j                         |j                  }|j                  r|j                  t        j                   j                  t        j"                  j                  fv r$| ||
|fi t%        ||j
                        z  } ||
|fi |}|j'                  |
      r||z  }2| |||fi |z  }t        sGt        d	|       W| ||
|fi |z  }f |ddfS # t,        $ r& t/        j0                  d
|j*                  d|      w xY w)NomitEmptyOptionalsz$%sencoding empty OPTIONAL componentsznot r;   z not encoding OPTIONAL component znot encoding DEFAULT component )r<   )wrapTypewrapped with wrap type zComponent name "z" not found in T)r
   r>   r   rC   isInconsistentcomponentTyper?   values
isOptionalisValueisDefaulted
asn1ObjectupdateopenTypetypeIdr   SetOf
SequenceOfdictisSameTypeWith
namedTypesnameKeyErrorr   r-   )r   r4   r5   r6   r7   r"   r   inconsistencyr   rH   	component	namedTyper   rt   componentSpecs                  r#   r8   zSequenceEncoder.encodeValue  s   	$[[ $"9"9; 6&167R9 : !00M##,,J"+ELLN"; *KY *3I ++I4E4E	 ST  ,,i>R>R1Ry RS ))2F2FG )"4"4(33H JJ--t/E/E+G G "Y )8&R"&w9O9O"P&R R	
 !*)X I I#229=%.I &5()Ng)NNI" #8$M N 9h!J'!JJIU*K\ #,H,B,B,M,M"N /PY0 %inn 5I ''INN%,GIOP((Y):N:N-N9NO%NNi.B.BNC ) 4 4 %%$++ JJ--t/E/E0G G "Y )=&W"&w9T9T"U&W W	
 !*)] Ng N(77	B%.I &5-)S7)SSI" #=$R S 9m!Ow!OOI_/Pb $$$Y   0++!-/ 0 00s   >M""/NN)rL   rM   rN   r   r8   r'   r%   r#   r   r   
  s    r%r%   r   c                       e Zd Zd Zd Zy)SequenceOfEncoderc                 (   ||j                   }|r||j                  }g }|j                  dd       }t        |      D ]Q  \  }}	 ||	|fi |}
|/|j	                  |	      s ||
|fi |}
t
        rt        d|       |j                  |
       S |S )Nr   r   )r   r   popr?   r   rC   append)r   r4   r5   r6   r7   r   chunksr   rH   r   rt   s              r#   _encodeComponentsz#SequenceOfEncoder._encodeComponents  s    !00M##  --H;;z40'. 	!NCi=W=E$ //	:!%=W=xABMM% 	! r%   c                 \     | j                   |||fi |}t        j                  |      ddfS )NT)r   r
   join)r   r4   r5   r6   r7   r   s         r#   r8   zSequenceOfEncoder.encodeValue  s;    '''8Y3*13 yy $,,r%   N)rL   rM   rN   r   r8   r'   r%   r#   r   r     s    :-r%   r   c                       e Zd Zd Zy)ChoiceEncoderc                 R   ||j                         }n|j                  j                  D cg c]  }|j                  |v r|j                   }}t	        |      dk7  r+t        j                  t	        |      xr dxs dd|      |d   }||   }||   } |||fi |ddfS c c}w )Nr:   z	Multiple zNone z components for Choice at r   T)getComponentr   r   r   r,   r   r-   )	r   r4   r5   r6   r7   r   r   namesr   s	            r#   r8   zChoiceEncoder.encodeValue  s    **,I5=5K5K5V5V 1	!%/ ^^ 1E 15zQ''CPUJLf[fLqjqLqsx(yzz8DdI~HH88$DD1s   !B$NrU   r'   r%   r#   r   r     s    Er%   r   c                       e Zd Zd Zy)
AnyEncoderc                     ||j                         }n*t        |      s|j                  |      j                         }||j                  dd       dfS )Nr/   T)rh   r   rg   r>   r3   s        r#   r8   zAnyEncoder.encodeValue  sN    NN$Ee$NN5)224E'++i66<<r%   NrU   r'   r%   r#   r   r     s    =r%   r   c                   &    e Zd ZdZdZi fdZddZy)EncoderNc                      || _         || _        y N)_Encoder__tagMap_Encoder__typeMap)r   tagMaptypeMaps      r#   __init__zEncoder.__init__  s     r%   c           
         	 ||j                   }n|j                   }t        rft	        d|j                  dd       xr dxs dd|j                  d	d
      d|d u xr |j                         xs |j                         d|       | j                  |j                  | j                         | j                  |j                  | j                         	 | j                  |   }t        r%t	        d|j                  j                  d|        |j&                  ||| fi |}t        r1t	        d|dt)        |      dt+        j,                  |      d       |S # t        $ r t        j                  d|d      w xY w# t        $ r ||j                  }n|j                  }t        j                   |j"                  |j"                        }	 | j$                  |   }n)# t        $ r t        j                  d|d|d      w xY wt        r%t	        d|j                  j                  d|       Y *w xY w)NzValue z4 is not ASN.1 type instance and "asn1Spec" not givenzencoder called in r/   Tinr;   zdef mode, chunk size rd   r   z
 for type z	, value:
)r/   )rd   zusing value codec z chosen by type ID zNo encoder for z ()z chosen by tagSet zcodec z built z octets of substrate: z
encoder completed)r   AttributeErrorr   r-   rC   r>   prettyPrintTypefixedDefLengthModer   fixedChunkSizer   	__class__rL   r   r=   r   rj   ri   r   r   r,   r   rD   )	r   r4   r5   r7   r   concreteEncoderr=   
baseTagSetr"   s	            r#   __call__zEncoder.__call__  ss   	K! 07It0L,L,UQU,[Y[,[]d]h]hiwyz]{  ~F  JN  ~N  ~j  SX  Sh  Sh  Sj  ~H  nv  nF  nF  nH  ~H  JOP Q "".NN4#:#:N;*NN(;(;N<	o"nnV4O?C\C\CeCegmno( +O**5(DLGL	Racfgpcqsx  tA  tA  BK  tL  M  NY  	K##BG%J K K	K*  	o! FNNFNNCJT"&--
"; T''E6(RSST /B[B[BdBdflmn!	os6   E" :F "#FAH?G'&H?'&H.H?>H?r   )rL   rM   rN   r   r   r   r   r'   r%   r#   r   r   	  s    N (* !3r%   r   )JrA   pyasn1r   r   pyasn1.codec.berr   pyasn1.compat.integerr   pyasn1.compat.octetsr   r   r	   r
   r   r   pyasn1.typer   r   r   r   __all__registerLoggeerL   DEBUG_ENCODERrC   objectr   rP   rW   r\   rb   rq   rv   ry   r   r   r   r   r   endOfOctetsr=   BooleanInteger	BitStringOctetStringNullObjectIdentifier
EnumeratedRealr   r   Choice
UTF8StringNumericStringPrintableStringTeletexStringVideotexString	IA5StringGraphicStringVisibleStringGeneralStringUniversalString	BMPStringObjectDescriptorGeneralizedTimeUTCTimer   r   SetSequenceAnyr   r   r   r'   r%   r#   <module>r     s=        *: :    *e85+>+>?& D!, !
4( 4>( >(&%* &%R:%, :%z!% !8$1 8$vdC% dCNw%) w%t"-+ "-JE' E$=# =
OO.0
LL)
 	LL)
 	NN+-	

 	/1
 	IIkm
 	  "9";
 	OON,
 	IIkm
 	OO-/
 	JJ(*
 	KK
 	OO.0
  	13!
" 	!3!5#
$ 	13%
& 	 2 4'
( 	NN-/131313!3!5NN-/
""$6$8
!!#5#7
NN-/;
B LL) LL)  	NN+-  	/1	 
 	IIkm  	  "9";  	OON,  	IIkm  	HHOO_&  	JJ(*  	MM/+  	OO-/  	KK  	HHOOZ\ " 	OO.0# $ 	13% & 	!3!5' ( 	13 2 4NN-/131313!3!5NN-/
""$6$8
!!#5#7
NN-/? F<f <b 
	!r%   