
    h)                     X   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
 ddgZ	 d dlmZmZmZ d d	lmZmZmZ d d
lmZ d dlmZ dZej3                  ddg       erCe G d de             Ze G d de             Ze G d de             Z ej>                  e       yy# e$ r dZY Ow xY w)    )public)IPayloadCodec)EncodedPayload)_dumps)_loadsHAS_CRYPTOBOXr   )Base64Encoder
RawEncoder
HexEncoder)
PrivateKey	PublicKeyBox)random)
StringTrieTKeyKeyRingFc                       e Zd ZdZddZy)r   z
        Holds originator and responder keys for an URI.

        The originator is either a caller or a publisher. The responder is either a callee or subscriber.
        Nc                     |rt        |t              | _        nd | _        | j                  r.| j                  j                  | _        |'|| j                  k(  sJ t        |t              | _        |rt        |t              | _        nd | _        | j                  r.| j                  j                  | _        |'|| j                  k(  sJ t        |t              | _        | j                  r2| j                  r&t        | j                  | j                        | _	        nd | _	        | j                  r2| j                  r&t        | j                  | j                        | _
        nd | _
        | j                  s| j                  st        d      y y )NencoderzDinsufficient keys provided for at least originator or responder role)r   r	   originator_priv
public_keyoriginator_pubr   responder_privresponder_pubr   originator_boxresponder_box	Exception)selfr   r   r   r   s        S/var/www/Befach/backend/env/lib/python3.12/site-packages/autobahn/wamp/cryptobox.py__init__zKey.__init__>   sS   '1/='Y$'+$##&*&:&:&E&E#%-4CVCV1VWV&/&V# &0&W#&*#""%)%8%8%C%C"$,ASAS0STS%.}m%T" ##(:(:&)$*>*>@R@R&S#&*# ""t':':%()<)<d>Q>Q%R"%)"''4+=+= fgg ,>'    )NNNN__name__
__module____qualname____doc__r!    r"   r    r   r   6   s    	.	hr"   c                       e Zd ZdZddZy)SymKeyz3
        Holds a symmetric key for an URI.
        Nc                      y Nr(   )r   raws     r    r!   zSymKey.__init__s   s    r"   r,   r#   r(   r"   r    r*   r*   n   s    		r"   r*   c                       e Zd ZdZedd       Zed        Zed        Zed        Zed        Z	ddZ
edd	       Zed
        Zy)r   a	  
        A keyring holds (cryptobox) public-private key pairs for use with WAMP-cryptobox payload
        encryption. The keyring can be set on a WAMP session and then transparently will get used
        for encrypting and decrypting WAMP message payloads.
        Nc                     |$t        |t              st        |t        k(        sJ t	               | _        t        |      t        k(  rt        ||      }|| _        y)zj

            Create a new key ring to hold public and private keys mapped from an URI space.
            Nr   r   )
isinstancer   typestrr   _uri_to_key_default_key)r   default_keys     r    r!   zKeyRing.__init__~   sQ     &*[#*F${^aOaJbcb)|DK C'!+kZ +Dr"   c                     t        j                         }|j                  t              }|j                  j                  t              }|j                  d      |j                  d      fS )z
            Generate a new private key and return a pair with the base64 encodings
            of (priv_key, pub_key).
            r   ascii)r   generateencoder	   r   decoder   keypriv_keypub_keys       r    generate_keyzKeyRing.generate_key   sV     %%'Czz-z8Hnn++M+BG??7+W^^G-DDDr"   c                     t        j                         }|j                  t              }|j                  j                  t              }|j                  d      |j                  d      fS )z
            Generate a new private key and return a pair with the hex encodings
            of (priv_key, pub_key).
            r   r8   )r   r9   r:   r   r   r;   r<   s       r    generate_key_hexzKeyRing.generate_key_hex   sV     %%'Czz*z5Hnn++J+?G??7+W^^G-DDDr"   c                 ,   t        |      t        k(  sJ |$t        |t              st        |      t        k(  sJ t        |      t        k(  rt        ||      }|dk(  r|| _        y||| j
                  v r| j
                  |= yy|| j
                  |<   y)z8
            Add a key set for a given URI.
            Nr0    )r2   r3   r1   r   r5   r4   )r   urir=   s      r    set_keyzKeyRing.set_key   s    
 9#$#;*S#"6$s)s:JKJCyC#cBby$'!;d... ,,S1 / -0D$$S)r"   c                     t        |      t        k(  sJ || j                  v r| j                  |   j                          y | j                  |   j                          y r,   )r2   r3   r4   rotate)r   rE   s     r    
rotate_keyzKeyRing.rotate_key   sP    9#$#d&&&  %,,.  %,,.r"   c                     	 |r| j                   |   }n| j                   j                  |      }|r|j                  S |j
                  S # t        $ r | j                  r| j                  }nY y Y @w xY wr,   )r4   longest_prefix_valueKeyErrorr5   r   r   )r   is_originatingrE   match_exactr=   s        r    _get_boxzKeyRing._get_box   sz    	 **3/C**??DC )))(((   $$++C  s   -A	 	"A0/A0c                    t        |      t        k(  sJ t        |      t        k(  sJ |t        |      t        t        fv sJ |t        |      t
        k(  sJ | j                  ||      }|sy|||d}t        t        j                        }t        |      j                  d      }|j                  ||t              }	t        |	      }
d}t        |
dd|      S )z
            Encrypt the given WAMP URI, args and kwargs into an EncodedPayload instance, or None
            if the URI should not be encrypted.
            N)rE   argskwargsutf8r   	cryptoboxjson)enc_key)r2   boolr3   listtupledictrO   r   r   
NONCE_SIZE_json_dumpsr:   encryptr
   bytesr   )r   rM   rE   rQ   rR   boxpayloadnoncepayload_serpayload_encrpayload_bytespayload_keys               r    r:   zKeyRing.encode   s     '4/0/9#$#<4:$#>?>>T&\T%9:9--4C   G
 3>>*E%g.55f=K;;{E:;NL
 ",/MK!-fkZZr"   c                     t        |      t        k(  sJ t        |t              sJ |j                  dk(  sJ | j                  ||      }|st        d      |j                  |j                  t              }|j                  dk7  r$t        dj                  |j                              t        |j                  d            }|j                  dd      }|j                  d	d      }|j                  d
d      }|||fS )zm
            Decrypt the given WAMP URI and EncodedPayload into a tuple ``(uri, args, kwargs)``.
            rT   z/received encrypted payload, but can't find key!r   rU   zIreceived encrypted payload, but don't know how to process serializer '{}'rS   rE   NrQ   rR   )r2   r3   r1   r   enc_algorO   r   decryptr`   r
   enc_serializerformat_json_loadsr;   get)	r   rM   rE   encoded_payloadr_   rb   r`   rQ   rR   s	            r    r;   zKeyRing.decode   s   
 9#$#o~>?>"++{:;:--4C QRR++o&=&=z+RK--7 k r r  tC  tR  tR  !S  T  T!+"4"4V"<=G++eT*C;;vt,D[[40Ff$$r"   r,   )F)NN)r$   r%   r&   r'   r   r!   r@   rB   rF   rI   rO   r:   r;   r(   r"   r    r   r   v   s    	 
		, 
		, 
	E 
	E 
	E 
	E 
	0 
	0" 
	/ 
	/	)" 
!	[ 
!	[F 
	% 
	%r"   N) autobahn.utilr   autobahn.wamp.interfacesr   autobahn.wamp.typesr   autobahn.wamp.serializerr   r\   r   rk   __all__nacl.encodingr	   r
   r   nacl.publicr   r   r   
nacl.utilsr   pytrier   r   extendImportErrorobjectr   r*   r   registerr(   r"   r    <module>r{      s   8 ! 2 . : : 

'CC66!! MNNE9%& 5hf 5h 5hn    Q%& Q% Q%j M7#q   Ms    B B)(B)