
    8'h)                     l   d dl mZ 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 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j9                  ddg       erCe G d de             Ze G d de             Z e G d de             Z! ejD                  e!       yy# e$ r dZY Ow xY w)    )absolute_importN)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/html/trade_iq/venv/lib/python3.12/site-packages/autobahn/wamp/cryptobox.py__init__zKey.__init__A   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   9   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__v   s    r#   r-   r$   r)   r#   r!   r+   r+   q   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        j                  k(        sJ t               | _        t        |      t        j                  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six	text_typer   _uri_to_key_default_key)r    default_keys     r!   r"   zKeyRing.__init__   s[     &*[#*F${^a^k^kOkJlml)|DK CMM1!+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   r:   )r   r;   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                 h   t        |      t        j                  k(  sJ |.t        |t              st        |      t        j                  k(  sJ t        |      t        j                  k(  rt	        ||      }|dk(  r|| _        y||| j                  v r| j                  |= yy|| j                  |<   y)z8
            Add a key set for a given URI.
            Nr1    )r3   r4   r5   r2   r   r7   r6   )r    urir?   s      r!   set_keyzKeyRing.set_key   s    
 9-.-;*S#"6$s)s}}:TUTCyCMM)#cBcz$'!;d... ,,S1 / -0D$$S)r#   c                     t        |      t        j                  k(  sJ || j                  v r| j                  |   j	                          y | j                  |   j	                          y r-   )r3   r4   r5   r6   rotate)r    rG   s     r!   
rotate_keyzKeyRing.rotate_key   sT    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-   )r6   longest_prefix_valueKeyErrorr7   r   r   )r    is_originatingrG   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        j                  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)rG   argskwargsutf8r   	cryptoboxjson)enc_key)r3   boolr4   r5   listtupledictrQ   r   r   
NONCE_SIZE_json_dumpsr<   encryptr   bytesr   )r    rO   rG   rS   rT   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!-wP[\\r#   c                    t        |      t        j                  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)``.
            rV   z/received encrypted payload, but can't find key!r   rW   zIreceived encrypted payload, but don't know how to process serializer '{}'rU   rG   NrS   rT   )r3   r4   r5   r2   r   enc_algorQ   r   decryptrb   r   enc_serializerformat_json_loadsr=   get)	r    rO   rG   encoded_payloadra   rd   rb   rS   rT   s	            r!   r=   zKeyRing.decode   s   
 9-.-o~>?>"++|;<;--4C QRR++o&=&=z+RK--8 k r r  tC  tR  tR  !S  T  T!+"4"4V"<=G++fd+C;;w-D[[D1Ff$$r#   r-   )F)NN)r%   r&   r'   r(   r   r"   rB   rD   rH   rK   rQ   r<   r=   r)   r#   r!   r   r   y   s    	 
		, 
		, 
	E 
	E 
	E 
	E 
	0 
	0" 
	/ 
	/	)" 
!	] 
!	]F 
	% 
	%r#   )#
__future__r   r4   autobahn.utilr   autobahn.wamp.interfacesr   autobahn.wamp.typesr   autobahn.wamp.serializerr   r^   r   rm   __all__nacl.encodingr
   r   r   nacl.publicr   r   r   
nacl.utilsr   pytrier   r	   extendImportErrorobjectr   r+   r   registerr)   r#   r!   <module>r~      s   6 ' 
   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) )B32B3