
    g>1                        % S r SSKJr  SSKJr  SSKJrJr  SSKJ	r	  SSK
Jr  SSKJrJr  SSKJrJr  SS	KJrJr  S
r\\S'   \R0                  r\\S'   \R4                  r\\S'   \R8                  r\\S'   \R<                  r\\S'   Sr  " S S\5      r! " S S\5      r" " S S\#5      r$ " S S\#5      r%\ " S S5      5       r& " S S5      r' " S S5      r(g) z%Group Key Distribution Service module    )Enum)total_ordering)OptionalTuple)hashes)_glue)gkdimisc)ndr_pack
ndr_unpack)NtTimeNtTimeDeltal    
uint64_maxL1_KEY_ITERATIONL2_KEY_ITERATIONKEY_CYCLE_DURATIONMAX_CLOCK_SKEW@   c                   v    \ rS rSrSrSrSrSrS\R                  4S jr
S\4S jr\S	\\   SS 4S
 j5       rSrg)	Algorithm+   SHA1SHA256SHA384SHA512returnc                 X   U [         R                  L a  [        R                  " 5       $ U [         R                  L a  [        R                  " 5       $ U [         R                  L a  [        R                  " 5       $ U [         R
                  L a  [        R
                  " 5       $ [        S5      e)Nzunknown hash algorithm {self})r   r   r   r   r   r   RuntimeErrorselfs    ,/usr/lib/python3/dist-packages/samba/gkdi.py	algorithmAlgorithm.algorithm1   st    9>>!;;= 9###==?"9###==?"9###==?":;;    c                     [        U 5      $ N)strr   s    r!   __repr__Algorithm.__repr__@   s    4yr$   	kdf_paramc                     U (       d  [         R                  $ [        [        R                  U 5      n[        UR
                  5      $ r&   )r   r   r   r	   KdfParametershash_algorithm)r*   kdf_parameterss     r!   from_kdf_parametersAlgorithm.from_kdf_parametersC   s4    ####D$6$6	B6677r$    N)__name__
__module____qualname____firstlineno__r   r   r   r   r   HashAlgorithmr"   r'   r(   staticmethodr   bytesr/   __static_attributes__r1   r$   r!   r   r   +   sZ    DFFF<6// <#  8x 8; 8 8r$   r   c                   Z    \ rS rSr\" 5       r\" 5       r\" 5       r\" 5       rS\	4S jr
Srg)GkidTypeL   r   c                     U [         R                  L a  gU [         R                  L a  gU [         R                  L a  gU [         R                  L a  g[        S5      e)Nza default GKIDzan L0 seed keyzan L1 seed keyzan L2 seed keyzunknown GKID type {self})r;   DEFAULTL0_SEED_KEYL1_SEED_KEYL2_SEED_KEYr   r   s    r!   descriptionGkidType.descriptionR   sR    8####8'''#8'''#8'''#566r$   r1   N)r2   r3   r4   r5   objectr>   r?   r@   rA   r'   rB   r9   r1   r$   r!   r;   r;   L   s*    hG(K(K(K7S 7r$   r;   c                       \ rS rSrSrg)InvalidDerivationb   r1   Nr2   r3   r4   r5   r9   r1   r$   r!   rF   rF   b       r$   rF   c                       \ rS rSrSrg)UndefinedStartTimef   r1   NrH   r1   r$   r!   rK   rK   f   rI   r$   rK   c                      \ rS rSr/ SQrSrS\S\S\SS4S	 jr\S\4S
 j5       r	\S\4S j5       r
\S\4S j5       rS\4S jrS\4S jrS\4S jrS"S jrS"S jrS\4S jrS\4S jrS\S\4S jrS\S\4S jrS\4S jr\S"S j5       r\S\SS 4S j5       r\S\S\SS 4S j5       r\S\SS 4S j5       rS\4S jr S"S jr!S"S jr"\S \#RH                  SS 4S! j5       r%Sr&g)#Gkidj   )_l0_idx_l1_idx_l2_idxil0_idxl1_idxl2_idxr   Nc                 d   SUs=::  a  [         R                  ::  d  O  [        SU S35      eSUs=::  a
  [        :  d  O  [        SU S35      eSUs=::  a
  [        :  d  O  [        SU S35      eUS:X  a  US:w  a  [        S5      eUS:X  a  US:w  a  [        S5      eXl        X l        X0l        g )Nz	L0 index  out of rangez	L1 index z	L2 index u:   invalid combination of negative and non‐negative indices)rN   
max_l0_idx
ValueErrorr   r   rP   rQ   rR   )r    rS   rT   rU   s       r!   __init__Gkid.__init__t   s    V.t.y>??V...y>??V...y>??R<FbLYZZR<FbLYZZr$   c                     U R                   $ r&   )rP   r   s    r!   rS   Gkid.l0_idx       ||r$   c                     U R                   $ r&   )rQ   r   s    r!   rT   Gkid.l1_idx   r_   r$   c                     U R                   $ r&   )rR   r   s    r!   rU   Gkid.l2_idx   r_   r$   c                     U R                   S:X  a  [        R                  $ U R                  S:X  a  [        R                  $ U R
                  S:X  a  [        R                  $ [        R                  $ NrW   )rS   r;   r>   rT   r?   rU   r@   rA   r   s    r!   	gkid_typeGkid.gkid_type   sV    ;;"###;;"''';;"'''###r$   c                 F    U R                   S:X  a  [        $ U R                   $ re   )rT   r   r   s    r!   wrapped_l1_idxGkid.wrapped_l1_idx       ;;"##{{r$   c                 F    U R                   S:X  a  [        $ U R                   $ re   )rU   r   r   s    r!   wrapped_l2_idxGkid.wrapped_l2_idx   rk   r$   c                 @   U R                  5       nU[        R                  La/  U[        R                  La  [	        SUR                  5        35      eU R                  S:X  a  [	        S5      e[        U R                  U R                  5       S-
  U R                  5      $ )Nz.Invalid attempt to derive an L1 seed key from r   z1No further derivation of L1 seed keys is possible   )rf   r;   r?   r@   rF   rB   rT   rN   rS   ri   rU   r    rf   s     r!   derive_l1_seed_keyGkid.derive_l1_seed_key   s    NN$	X111!5!55#))+,. 
 ;;!#$WXXDKK!4!4!6!:DKKHHr$   c                 @   U R                  5       nU[        R                  La/  U[        R                  La  [	        SUR                  5        35      eU R                  S:X  a  [	        S5      e[        U R                  U R                  U R                  5       S-
  5      $ )Nz&Attempt to derive an L2 seed key from r   z1No further derivation of L2 seed keys is possiblerp   )rf   r;   r@   rA   rF   rB   rU   rN   rS   rT   rm   rq   s     r!   derive_l2_seed_keyGkid.derive_l2_seed_key   s    NN$	X111!5!55#89N9N9P8QR  ;;!#$WXXDKKd.A.A.Ca.GHHr$   c                 V    SU R                    SU R                   SU R                   S3$ )NzGkid(, ))rS   rT   rU   r   s    r!   __str__Gkid.__str__   s)    t{{m2dkk]"T[[MCCr$   c           	          [        U 5      nUR                   S[        U R                  5       S[        U R                  5       S[        U R
                  5       S3$ N(rx   ry   )typer4   reprrS   rT   rU   r    clss     r!   r(   Gkid.__repr__   sX    4j $t{{"3!4BtDKK7H6I JT[[!"!%	
r$   otherc                     [        U[        5      (       d  [        $ U R                  U R                  U R
                  4UR                  UR                  UR
                  4:H  $ r&   )
isinstancerN   NotImplementedrS   rT   rU   r    r   s     r!   __eq__Gkid.__eq__   sO    %&&!!T[[$++6LLLLLL;
 
 	
r$   c                     [        U[        5      (       d  [        $ S[        S[        [        [        [        4   4S jnU" U 5      U" U5      :  $ )Ngkidr   c                     U R                   U R                  U R                  p2nU R                  5       [        R
                  La   U R                  5       nU R                  5       nXU4$ r&   )rS   rT   rU   rf   r;   r>   ri   rm   )r   rS   rT   rU   s       r!   as_tupleGkid.__lt__.<locals>.as_tuple   sY    %)[[$++t{{FF
 ~~x'7'77 ,,.,,.6))r$   )r   rN   r   r   int)r    r   r   s      r!   __lt__Gkid.__lt__   sH    %&&!!	*4 	*E#sC-$8 	* ~//r$   c                 Z    [        U R                  U R                  U R                  45      $ r&   )hashrS   rT   rU   r   s    r!   __hash__Gkid.__hash__   s     T[[$++t{{;<<r$   c                      [        SSS5      $ re   rN   r1   r$   r!   defaultGkid.default   s    BBr$   c                     [        U SS5      $ re   r   )rS   s    r!   l0_seed_keyGkid.l0_seed_key   s    FB##r$   c                     [        XS5      $ re   r   )rS   rT   s     r!   l1_seed_keyGkid.l1_seed_key   s    FB''r$   nt_timec                     U [         [        -  [        -  -  nU [         [        -  [        -  -  [        [        -  -  nU [        [        -  -  [        -  n[        XU5      $ r&   )r   r   r   rN   )r   l0l1l2s       r!   from_nt_timeGkid.from_nt_time  sj    ),<<?QQR"225GGI #557 	
 (+==>BTTBBr$   c                 ^   U R                  5       nU[        R                  La  [        UR	                  5        S35      e[        U R                  [        -  [        -  U R                  [        -  -   U R                  -   [        -  5      nSUs=::  a
  [        ::  d  O  [        SU S35      eU$ )Nz has no defined start timer   zstart time rX   )rf   r;   rA   rK   rB   r   rS   r   r   rT   rU   r   r   OverflowError)r    rf   
start_times      r!   start_nt_timeGkid.start_nt_time  s    NN$	H000$((*++EF  ..1AA++ 001++ !!

 J,*,+j\ GHHr$   c                 h    [         R                  [        U R                  5       [        -
  5      5      $ r&   rN   r   r   r   r   r   s    r!   previousGkid.previous$  '      (:(:(<?Q(Q!RSSr$   c                 h    [         R                  [        U R                  5       [        -   5      5      $ r&   r   r   s    r!   next	Gkid.next'  r   r$   envc                 X    [        U R                  U R                  U R                  5      $ r&   )rN   l0_indexl1_indexl2_index)r   s    r!   from_key_envelopeGkid.from_key_envelope*  s    CLL#,,==r$   )r   rN   )'r2   r3   r4   r5   	__slots__rY   r   r[   propertyrS   rT   rU   r;   rf   ri   rm   rr   ru   r'   rz   r(   rD   boolr   r   r   r7   r   r   r   r   r   r   r   r   r	   KeyEnveloper   r9   r1   r$   r!   rN   rN   j   s    2IJs C   (         
$8 
$  I ID D
# 

F 
t 
0F 0t 0*=# =     $C $F $ $ (C ( ( ( ( 	 f 	  	  	 v *TT >t// >F > >r$   rN   c                       \ rS rSr/ SQrS\\   S\\   S\S\S\	R                  SS	4S
 jrS\4S jrS\4S jrS\S\4S jrS\4S jrSrg	)SeedKeyPairi/  )l1_keyl2_keyr   r-   root_key_idr   r   r   r-   r   r   Nc                    Ub2  [        U5      [        :w  a  [        S[        U5       S[         S35      eUb2  [        U5      [        :w  a  [        S[        U5       S[         S35      eXl        X l        X0l        X@l        XPl        g )NzL1 key (
) must be  byteszL2 key ()	lenKEY_LEN_BYTESrZ   r   r   r   r   r-   r   )r    r   r   r   r-   r   s         r!   r[   SeedKeyPair.__init__2  s}     #f+">xV~ZfUVV#f+">xV~ZfUVV	,&r$   c                    U R                   c  S OU R                   R                  5       nU R                  c  S OU R                  R                  5       nSU SU SU R                   SU R                   SU R
                   S3$ )NzSeedKeyPair(L1Key(z	), L2Key(), rx   ry   )r   hexr   r   r   r-   )r    
l1_key_hex
l2_key_hexs      r!   rz   SeedKeyPair.__str__E  s|    ![[0Tdkkoo6G
![[0Tdkkoo6G
 !Ij\TYYK P  !D$7$7#8;	
r$   c                    [        U 5      nUR                   S[        U R                  5       S[        U R                  5       S[        U R
                  5       S[        U R                  5       S[        U R                  5       S3$ r}   )r   r4   r   r   r   r   r-   r   r   s     r!   r(   SeedKeyPair.__repr__N  s    4j $t{{"3!4BtDKK7H6I JTYY 4(;(;#<"= >T%%&'q*	
r$   r   c                    [        U[        5      (       d  [        $ U R                  U R                  U R
                  U R                  U R                  4UR                  UR                  UR
                  UR                  UR                  4:H  $ r&   )r   r   r   r   r   r   r-   r   r   s     r!   r   SeedKeyPair.__eq__V  s{    %--!! KKKKII
 LLLLJJ  

 	
r$   c           	          [        U R                  U R                  U R                  U R                  [        U R                  5      45      $ r&   )r   r   r   r   r-   r   r   r   s    r!   r   SeedKeyPair.__hash__h  s@    		##))*
 	
r$   )r   r-   r   r   r   )r2   r3   r4   r5   r   r   r8   rN   r   r
   GUIDr[   r'   rz   r(   rD   r   r   r   r   r9   r1   r$   r!   r   r   /  s    MI'' ' 	'
 "' YY' 
'&
 

# 

F 
t 
$	
# 	
r$   r   c            
           \ rS rSr/ SQrS\S\S\S\R                  SS4
S	 jr
S\4S
 jrS\4S jrS\S\4S jrS\4S jrSrg)GroupKeyit  )r   keyr-   r   r   r   r-   r   r   Nc                     Ub2  [        U5      [        :w  a  [        S[        U5       S[         S35      eXl        X l        X0l        X@l        g )NzKey (r   r   )r   r   rZ   r   r   r   r-   r   )r    r   r   r-   r   s        r!   r[   GroupKey.__init__w  sH     ?s3x=8uT#YKz-OPP	,&r$   c           	          SU R                   R                  5        SU R                   SU R                   SU R                   S3	$ )NzGroupKey(Key(r   rx   ry   )r   r   r   r-   r   r   s    r!   rz   GroupKey.__str__  sI    DHHLLN+3tyykD<O<O;P Q  !$	
r$   c                     [        U 5      nUR                   S[        U R                  5       S[        U R                  5       S[        U R
                  5       S[        U R                  5       S3
$ r}   )r   r4   r   r   r   r-   r   r   s     r!   r(   GroupKey.__repr__  sk    4j $txx.!1DO3D ET(()*"T$2B2B-C,DAG	
r$   r   c                     [        U[        5      (       d  [        $ U R                  U R                  U R
                  U R                  4UR                  UR                  UR
                  UR                  4:H  $ r&   )r   r   r   r   r   r-   r   r   s     r!   r   GroupKey.__eq__  se    %**!!$))T%8%8$:J:JKIIJJ  	P
 
 	
r$   c                     [        U R                  U R                  U R                  [	        U R
                  5      45      $ r&   )r   r   r   r-   r   r   r   s    r!   r   GroupKey.__hash__  s4    XXtyy$"5"5x@P@P7QR
 	
r$   )r   r-   r   r   )r2   r3   r4   r5   r   r8   rN   r   r
   r   r[   r'   rz   r(   rD   r   r   r   r   r9   r1   r$   r!   r   r   t  so    @I	'	' $	'6?	'NRii	'		'
 

# 
	
F 	
t 	

# 
r$   r   N))__doc__enumr   	functoolsr   typingr   r   cryptography.hazmat.primitivesr   sambar   samba.dcerpcr	   r
   	samba.ndrr   r   samba.nt_timer   r   r   r   __annotations__GKDI_L1_KEY_ITERATIONr   GKDI_L2_KEY_ITERATIONr   GKDI_KEY_CYCLE_DURATIONr   GKDI_MAX_CLOCK_SKEWr   r   r   r;   	ExceptionrF   rK   rN   r   r   r1   r$   r!   <module>r      s   & ,  $ " 1  # * - 
C 33 # 333 # 3"'"?"? K ?#77 78 8B7t 7,		 		 	 A> A> A>HB
 B
J)
 )
r$   