
     jX                     z   S SK r S SK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Jr  S SKJrJrJr  S SKJrJr  S SKJrJrJrJr  S S	KJrJr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'  SSK(J)r)J*r*  SSK+J,r,J-r-J.r.J/r/J0r0  SSK1J2r2  Sq3S r4 " S S\25      r5 " S S\25      r6 " S S\25      r7 " S S\25      r8g)    N)InvalidSignature
InvalidTag)default_backend)Binding)hasheshmacserialization)ecpaddingrsa)decode_dss_signatureencode_dss_signature)Cipheraead
algorithmsmodes)InvalidUnwrapaes_key_unwrapaes_key_wrap)PKCS7)load_pem_private_keyload_pem_public_key)int_to_bytes)load_pem_x509_certificate   )
ALGORITHMS)JWEErrorJWKError)base64_to_longbase64url_decodebase64url_encodeensure_binarylong_to_base64   )Keyc                     [         c
  [        5       q [         R                  R                  SU 5      n[         R                  R                  X5        [         R                  R                  X5      SS nU$ )a'  
Get random bytes

Currently, Cryptography returns OS random bytes. If you want OpenSSL
generated random bytes, you'll have to switch the RAND engine after
initializing the OpenSSL backend
Args:
    num_bytes (int): Number of random bytes to generate and return
Returns:
    bytes: Random bytes
Nzchar[])_bindingr   ffinewlib
RAND_bytesbuffer)	num_bytesbuf
rand_bytess      l/home/ubuntu/second-brain/public-api/venv/lib/python3.13/site-packages/jose/backends/cryptography_backend.pyget_random_bytesr1      sX     9
,,

8Y
/CLLC+$$S4Q7J    c                       \ rS rSr\R
                  r\R                  r\R                  r\4S jr	S r
S rS rS rS rS rS	 rS
 rS rS rSrg)CryptographyECKey0   c                    U[         R                  ;  a  [        SU-  5      e[         R                  U R                  [         R
                  U R                  [         R                  U R                  0R                  U5      U l
        X l        X0l        [        US5      (       d  [        US5      (       a  Xl        g [        US5      (       a  UR                  5       R!                  S5      n[#        U[$        5      (       a  U R'                  U5      U l        g [#        U[(        5      (       a  UR+                  S5      n[#        U[,        5      (       a"    [/        XR                  5       5      nXl        g [        SU-  5      e! [0         a    [3        US U R                  5       S9n N:f = f! [4         a  n[        U5      eS nAff = f)N*hash_alg: %s is not a valid hash algorithmpublic_bytesprivate_bytesto_pemutf-8passwordbackendz%Unable to parse an ECKey from key: %s)r   ECr   ES256SHA256ES384SHA384ES512SHA512gethash_alg
_algorithmcryptography_backendhasattrprepared_keyr:   decode
isinstancedict_process_jwkstrencodebytesr   
ValueErrorr   	Exceptionselfkey	algorithmrI   es        r0   __init__CryptographyECKey.__init__5   s   JMM)G)STT dkkdkkdkk
 #i.	 	
 $$8!3''73+H+H #3!!**,%%g.Cc4   $ 1 1# 6Dc3**W%Cc5!!"h-c3L3L3NOC !$>DEE " h.sT4KdKdKfgCh "qk!"s0   F #F)&F, (F))F, ,
G6GGc                   ^ TR                  S5      S:X  d  [        STR                  S5      -  5      e[        U4S jS 5       5      (       d  [        S5      e[        TR                  S5      5      n[        TR                  S5      5      n[        R
                  [        R                  [        R                  S	.TS
      n[        R                  " X#U" 5       5      nST;   aO  [        TR                  S5      5      n[        R                  " Xe5      nUR                  U R                  5       5      $ UR                  U R                  5       5      $ )Nktyr?   z0Incorrect key type. Expected: 'EC', Received: %sc              3   ,   >#    U  H	  oT;   v   M     g 7fN .0kjwk_dicts     r0   	<genexpr>1CryptographyECKey._process_jwk.<locals>.<genexpr>f   s     <*;Q=*;   )xycrvz Mandatory parameters are missingrh   ri   )P-256P-384P-521rj   d)rF   r   allr   r
   	SECP256R1	SECP384R1	SECP521R1EllipticCurvePublicNumbersEllipticCurvePrivateNumbersprivate_keyrI   
public_key)rV   rd   rh   ri   curvepublicrn   privates    `      r0   rO   CryptographyECKey._process_jwkb   s   ||E"d*MPXP\P\]bPccdd<*;<<<=>>8<<,-8<<,-\\\\\\
 5/	 ..qUW=(?x||C01A44Q?G&&t'@'@'BCC$$T%>%>%@AAr2   c                 n    [        [        R                  " U R                  R                  S-  5      5      $ )zDetermine the correct serialization length for an encoded signature component.

This is the number of bytes required to encode the maximum key value.
g       @)intmathceilrK   key_sizerV   s    r0   _sig_component_length'CryptographyECKey._sig_component_length{   s)    
 499T..77#=>??r2   c                 j    [        U5      u  p#U R                  5       n[        X$5      [        X45      -   $ )z4Convert signature from DER encoding to RAW encoding.)r   r   r   )rV   der_signaturerscomponent_lengths        r0   _der_to_rawCryptographyECKey._der_to_raw   s2    #M2557A0<3TTTr2   c                     U R                  5       n[        U5      [        SU-  5      :w  a  [        S5      eUSU nXS n[        R	                  US5      n[        R	                  US5      n[        XV5      $ )z4Convert signature from RAW encoding to DER encoding.r   zInvalid signatureNbig)r   lenr|   rS   
from_bytesr   )rV   raw_signaturer   r_bytess_bytesr   r   s          r0   _raw_to_derCryptographyECKey._raw_to_der   sy    557}Q)9%9!::011 1!12 12NN7E*NN7E*#A))r2   c                    U R                   R                  S-  U R                  R                  R                  :  aE  [        SU R                  R                  R                  SU R                   R                  -  4-  5      eU R                  R                  U[        R                  " U R                  5       5      5      nU R                  U5      $ )N   z1this curve (%s) is too short for your digest (%d))rG   digest_sizerK   rw   r   	TypeErrornamesignr
   ECDSAr   )rV   msg	signatures      r0   r   CryptographyECKey.sign   s    ==$$q(4+<+<+B+B+K+KK'*.*;*;*A*A*F*FDMMLeLeHe)fg  %%**30IJ		**r2   c                      U R                  U5      nU R                  R                  X1[        R                  " U R                  5       5      5        g! [         a     gf = f)NTF)r   rK   verifyr
   r   rG   rT   )rV   r   sigr   s       r0   r   CryptographyECKey.verify   sQ    	((-I$$YRXXdmmo5NO 		s   AA 
AAc                 .    [        U R                  S5      $ Nr8   rJ   rK   r   s    r0   	is_publicCryptographyECKey.is_public       t((.99r2   c                     U R                  5       (       a  U $ U R                  U R                  R                  5       U R                  5      $ r_   r   	__class__rK   rv   rH   r   s    r0   rv   CryptographyECKey.public_key   8    >>K~~d//::<dooNNr2   c                    U R                  5       (       aL  U R                  R                  [        R                  R
                  [        R                  R                  S9nU$ U R                  R                  [        R                  R
                  [        R                  R                  [        R                  " 5       S9nU$ )Nencodingformatr   r   encryption_algorithm)r   rK   r8   r	   EncodingPEMPublicFormatSubjectPublicKeyInfor9   PrivateFormatTraditionalOpenSSLNoEncryption)rV   pems     r0   r:   CryptographyECKey.to_pem   s    >>##00&//33M<V<V<k<k 1 C J--"++// ..AA!.!;!;!= . 

 
r2   c           	         U R                  5       (       d  U R                  R                  5       nOU R                  nSSSS.U R                  R                  R                     nU R                  R                  R
                  S-   S-  nU R                  SU[        UR                  5       R                  US9R                  S	5      [        UR                  5       R                  US9R                  S	5      S
.nU R                  5       (       d?  U R                  R                  5       R                  n[        XSS9R                  S	5      US'   U$ )Nrk   rl   rm   )	secp256r1	secp384r1	secp521r1   r   r?   )sizeASCII)algr]   rj   rh   ri   rn   )r   rK   rv   rw   r   r   rH   r#   public_numbersrh   rL   ri   private_numbersprivate_value)rV   rv   rj   r   datar   s         r0   to_dictCryptographyECKey.to_dict   s&   ~~**557J**J !  
 


!
!
&
&	( %%++44q8Q> ??
 9 9 ; = =HMTTU\]
 9 9 ; = =HMTTU\]
 ~~ --==?MMM&}DKKGTDIr2   )rH   rI   rG   rK   N)__name__
__module____qualname____firstlineno__r   rA   rC   rE   r   rZ   rO   r   r   r   r   r   r   rv   r:   r   __static_attributes__r`   r2   r0   r4   r4   0   s]    ]]F]]F]]F<K +FZB2@U
*+:O
r2   r4   c                      \ rS rSr\R
                  r\R                  r\R                  r\R                  " 5       r
\R                  " \R                  " \R                  " 5       5      \R                  " 5       S5      r\R                  " \R                  " \R
                  " 5       5      \R
                  " 5       S5      r\4S jrS rS rS rS rS rS	 rSS
 jrS rS rS rSrg)CryptographyRSAKey   Nc                 R   U[         R                  ;  a  [        SU-  5      e[         R                  U R                  [         R
                  U R                  [         R                  U R                  0R                  U5      U l
        X l        [         R                  U R                  [         R                  U R                  [         R                  U R                  0R                  U5      U l        X0l        [#        US5      (       a  [#        US5      (       a  Xl        g ['        U[(        5      (       a  U R+                  U5      U l        g ['        U[,        5      (       a  UR/                  S5      n['        U[0        5      (       aI   UR3                  S5      (       a  U R5                  U5        g  [7        XR!                  5       5      U l        g [        SU-  5      e! [8         a!    [;        US U R!                  5       S9U l         g f = f! [<         a  n[        U5      eS nAff = f)Nr7   r8   r   r;      -----BEGIN CERTIFICATE-----r<   z'Unable to parse an RSA_JWK from key: %s)r   RSAr   RS256rA   RS384rC   RS512rE   rF   rG   rH   RSA1_5RSA_OAEPRSA_OAEP_256r   rI   rJ   rK   rM   rN   rO   rP   rQ   rR   
startswith_process_certr   rS   r   rT   rU   s        r0   rZ   CryptographyRSAKey.__init__   s   JNN*G)STT dkkdkkdkk
 #i.	 	
 $ t{{##T%6%6
 #i.	 	 %9! 3''GC9I,J,J #c4   $ 1 1# 6Dc3**W%Cc5!!
">>"@AA&&s+v(;CAZAZA\(]D%
 @3FGG " v(<S4Y]YrYrYt(uD% 	v "qk!"s6   'H 1G (H	H H		H 
H&H!!H&c           	        ^ TR                  S5      S:X  d  [        STR                  S5      -  5      e[        TR                  SS5      5      n[        TR                  S5      5      n[        R                  " X#5      nST;  a  UR                  U R                  5       5      $ [        TR                  S5      5      n/ SQn[        U4S	 jU 5       5      (       al  [        U4S
 jU 5       5      (       d  [        S5      e[        TS   5      n[        TS   5      n[        TS   5      n	[        TS   5      n
[        TS   5      nO[[        R                  " X2U5      u  px[        R                  " XW5      n	[        R                  " XX5      n
[        R                  " Xx5      n[        R                  " XxXYXU5      nUR                  U R                  5       5      $ )Nr]   r   z1Incorrect key type. Expected: 'RSA', Received: %srY      nrn   )pqdpdqqic              3   ,   >#    U  H	  oT;   v   M     g 7fr_   r`   ra   s     r0   re   2CryptographyRSAKey._process_jwk.<locals>.<genexpr>"  s     7,Q=,rg   c              3   ,   >#    U  H	  oT;   v   M     g 7fr_   r`   ra   s     r0   re   r   $  s     ?,Q=,rg   z2Precomputed private key parameters are incomplete.r   r   r   r   r   )rF   r   r   r   RSAPublicNumbersrv   rI   anyro   rsa_recover_prime_factorsrsa_crt_dmp1rsa_crt_dmq1rsa_crt_iqmpRSAPrivateNumbersru   )rV   rd   rY   r   rx   rn   extra_paramsr   r   r   r   r   ry   s    `           r0   rO   CryptographyRSAKey._process_jwk  s   ||E"e+NQYQ]Q]^cQddee8<<S128<<,-%%a+h$$T%>%>%@AA x||C01A7L7,777?,??? ##WXX"8C=1"8C=1#HTN3#HTN3#HTN3 44Q1=%%a+%%a+%%a+++A!HG&&t'@'@'BCCr2   c                 `    [        XR                  5       5      nUR                  5       U l        g r_   )r   rI   rv   rK   )rV   rW   s     r0   r    CryptographyRSAKey._process_cert;  s$    '-F-F-HINN,r2   c                      U R                   R                  U[        R                  " 5       U R	                  5       5      nU$ ! [
         a  n[        U5      eS nAff = fr_   )rK   r   r   PKCS1v15rG   rT   r   )rV   r   r   rY   s       r0   r   CryptographyRSAKey.sign?  sT    	))..sG4D4D4FXI   	1+	s   >A 
AAAc                    U R                  5       (       d  [        R                  " S5         U R                  5       R                  R                  X![        R                  " 5       U R                  5       5        g! [         a     gf = f)NzKAttempting to verify a message with a private key. This is not recommended.TF)
r   warningswarnrv   rK   r   r   r   rG   r   )rV   r   r   s      r0   r   CryptographyRSAKey.verifyF  sh    ~~MMjk	OO**11#G<L<L<NPTP]P]P_` 		s   AA: :
BBc                 .    [        U R                  S5      $ r   r   r   s    r0   r   CryptographyRSAKey.is_publicP  r   r2   c                     U R                  5       (       a  U $ U R                  U R                  R                  5       U R                  5      $ r_   r   r   s    r0   rv   CryptographyRSAKey.public_keyS  r   r2   c                 `   U R                  5       (       a  US:X  a  [        R                  R                  nO/US:X  a  [        R                  R                  nO[        SU-  5      eU R                  R                  [        R                  R                  US9nU$ US:X  a  [        R                  R                  nO/US:X  a  [        R                  R                  nO[        SU-  5      eU R                  R                  [        R                  R                  U[        R                  " 5       S9$ )NPKCS8PKCS1zInvalid format specified: %rr   r   )r   r	   r   r   r   rS   rK   r8   r   r   r   r   r   r9   r   )rV   
pem_formatfmtr   s       r0   r:   CryptographyRSAKey.to_pemX  s    >>W$#00EEw&#0066 !?*!LMM##00-:P:P:T:T]`0aCJ --33C7"--@@C;jHII  .."++//R_RlRlRn / 
 	
r2   c                 t   U R                  5       (       d  U R                  R                  5       nOU R                  nU R                  S[	        UR                  5       R                  5      R                  S5      [	        UR                  5       R                  5      R                  S5      S.nU R                  5       (       Gdt  UR                  [	        U R                  R                  5       R                  5      R                  S5      [	        U R                  R                  5       R                  5      R                  S5      [	        U R                  R                  5       R                  5      R                  S5      [	        U R                  R                  5       R                  5      R                  S5      [	        U R                  R                  5       R                  5      R                  S5      [	        U R                  R                  5       R                   5      R                  S5      S.5        U$ )Nr   r   )r   r]   r   rY   )rn   r   r   r   r   r   )r   rK   rv   rH   r#   r   r   rL   rY   updater   rn   r   r   dmp1dmq1iqmp)rV   rv   r   s      r0   r   CryptographyRSAKey.to_dictn  s   ~~**557J**J ??
 9 9 ; = =>EEgN
 9 9 ; = =>EEgN	
 ~~KK'(9(9(I(I(K(M(MNUUV]^'(9(9(I(I(K(M(MNUUV]^'(9(9(I(I(K(M(MNUUV]^():):)J)J)L)Q)QRYYZab():):)J)J)L)Q)QRYYZab():):)J)J)L)Q)QRYYZab	 r2   c                      U R                   R                  XR                  5      nU$ ! [         a  n[	        U5      eS nAff = fr_   )rK   encryptr   rT   r   )rV   key_datawrapped_keyrY   s       r0   wrap_keyCryptographyRSAKey.wrap_key  sE    	++33HllKK   	1+	s   %) 
A>Ac                      U R                   R                  XR                  5      nU$ ! [         a  n[	        U5      eS nAff = fr_   )rK   decryptr   rT   r   )rV   r  unwrapped_keyrY   s       r0   
unwrap_keyCryptographyRSAKey.unwrap_key  sA    	 --55k<<PM   	1+	s   &) 
A>A)rH   rI   rG   r   rK   )r   )r   r   r   r   r   rA   rC   rE   r   r   r   OAEPMGF1SHA1r   r   r   rZ   rO   r   r   r   r   rv   r:   r   r  r  r   r`   r2   r0   r   r      s    ]]F]]F]]FF||GLL7MH<<V]]_ =v}}PTUL<K -H^'DR-:O

,6r2   r   c                   @   \ rS rSr\R
                  \R                  \R                  \R                  4r	\R                  \R                  \R                  \R                  4r\R                  \R                   \R"                  \R$                  \R&                  4r\R*                  4r\R.                  4r\R                  \R                  \R"                  4r\R
                  \R6                  \R                  \R6                  \R                  \R6                  \R$                  \R8                  \R*                  \R8                  \R.                  \R8                  \R                  \R8                  \R                  \R8                  \R&                  \R8                  \R                  \R6                  \R                  \R6                  \R                   \R6                  \R                  S\R                  S\R"                  S0rS rS rS
S jr SS jr!S r"S r#S	r$g)CryptographyAESKeyi  Nc                    U[         R                  ;  a  [        SU-  5      eU[         R                  R	                  [         R
                  5      ;  a  [        SU-  5      eX l        U R                  R                  U R                  5      U l	        X R                  ;   a  [        U5      S:w  a  [        SU 35      eX R                  ;   a  [        U5      S:w  a  [        SU 35      eX R                  ;   a  [        U5      S:w  a  [        SU 35      eX R                  ;   a  [        U5      S	:w  a  [        S
U 35      eX R                  ;   a  [        U5      S:w  a  [        SU 35      eXl        g )Nz%s is not a valid AES algorithmz%s is not a supported algorithm   zKey must be 128 bit for alg    zKey must be 192 bit for alg     zKey must be 256 bit for alg r5   zKey must be 384 bit for alg @   zKey must be 512 bit for alg )r   AESr   	SUPPORTEDunion
AES_PSEUDOrH   MODESrF   _modeKEY_128r   KEY_192KEY_256KEY_384KEY_512_key)rV   rW   rX   s      r0   rZ   CryptographyAESKey.__init__  s4   JNN*<yHIIJ0066z7L7LMM<yHII#ZZ^^DOO4
$SR9)EFF,,&3s8r>9)EFF,,&3s8r>9)EFF,,&3s8r>9)EFF,,&3s8r>9)EFF	r2   c                 L    U R                   S[        U R                  5      S.nU$ )Noctr   r]   rc   )rH   r!   r*  )rV   r   s     r0   r   CryptographyAESKey.to_dict  s!    u;KDII;VWr2   c                    [        U5      n [        [        R                  R                  S-  5      nU R                  U5      nUR                  S:X  aI  [        R                  " U R                  5      nUR                  X1U5      nUS [        U5      S-
   nUSS  nO[        [        R                  " U R                  5      U[        5       S9nUR                  5       n	[        [        R                  R                  5      R!                  5       n
U
R#                  U5      nXR%                  5       -  nU	R#                  U5      U	R%                  5       -   nS nX7U4$ ! [&         a  n[)        U5      eS nAff = f)Nr   GCMr  ir>   )r"   r1   r   r  
block_sizer$  r   r   AESGCMr*  r  r   r   r   	encryptorr   padderr  finalizerT   r   )rV   
plain_textaadivmodeciphercipher_text_and_tagcipher_textauth_tagr5  r6  padded_datarY   s                r0   r  CryptographyAESKey.encrypt  s8   ":.
	!*..";";q"@AB::b>DyyE!TYY/&,nnRS&I#12QC8K4Lr4QR.st4
tyy 94IZ[",,.	z~~889@@B$mmJ700'..{;i>P>P>RRH,, 	1+	s   EE 
E4$E//E4c                    [        U5      n [        U5      nU R                  U5      nUR                  S:X  aG  Uc  [        S5      e[        R
                  " U R                  5      nX-   n UR                  X'U5      nU$ [        [        R                  " U R                  5      U[        5       S9nUR                  5       n	U	R                  U5      n
XR!                  5       -  n
[#        [        R                  R$                  5      R'                  5       nUR                  U
5      nXR!                  5       -  nU$ ! [         a    [        S5      ef = f! [(         a  n[        U5      eS nAff = f)Nr1  ztag cannot be NonezInvalid JWE Auth Tagr2  )r"   r$  r   rS   r   r4  r*  r  r   r   r   r   r  r   	decryptorr  r7  r   r3  unpadderrT   )rV   r>  r:  r9  tagr;  r<  r=  r8  rC  padded_plain_textrD  rY   s                r0   r  CryptographyAESKey.decrypt  sI   #K0	r"B::b>DyyE!;$%9::TYY/&1&7#;!'!MJ   
tyy 94IZ[",,.	$-$4$4[$A!!%7%7%99! !:!:;DDF%__->?
//11
 " ;"#9::;  	1+	s7   AE ,D: >E  B9E :EE 
E-E((E-c                 Z    [        U5      n[        U R                  U[        5       5      nU$ r_   )r"   r   r*  r   )rV   r  r>  s      r0   r  CryptographyAESKey.wrap_key  s'     *"499h8IJr2   c                     [        U5      n [        U R                  U[        5       5      nU$ ! [         a  n[        U5      eS nAff = fr_   )r"   r   r*  r   r   r   )rV   r  r8  causes       r0   r  CryptographyAESKey.unwrap_key
  sJ    #K0	"'		;@QRJ   	"5/!	"s   . 
AAA)rH   r*  r$  r_   )NNN)%r   r   r   r   r   A128GCM	A128GCMKWA128KWA128CBCr%  A192GCM	A192GCMKWA192KWA192CBCr&  A256GCM	A256GCMKWA256KWA128CBC_HS256A256CBCr'  A192CBC_HS384r(  A256CBC_HS512r)  AES_KW_ALGSr   r1  CBCr#  rZ   r   r  r  r  r  r   r`   r2   r0   r  r    s   !!:#7#79J9JJL^L^_G!!:#7#79J9JJL^L^_G  G '')G'')G$$j&7&79J9JKK 	EIIEIIEII  %))  %))  %))EIIEIIEIIeiieiieii444E$,,6
r2   r  c                       \ rS rSrSr\R                  \R                  " 5       \R                  \R                  " 5       \R                  \R                  " 5       0rS rS rS rS rS rSrg	)
CryptographyHMACKeyi  zZ
Performs signing and verification operations using HMAC
and the specified hash function.
c                   ^ U[         R                  ;  a  [        SU-  5      eX l        U R                  R                  U5      U l        [        T[        5      (       a  U R                  T5      U l
        g [        T[        5      (       d   [        T[        5      (       d  [        S5      e[        T[        5      (       a  TR                  S5      m/ SQn[        U4S jU 5       5      (       a  [        S5      eTU l
        g )Nr7   z+Expecting a string- or bytes-formatted key.r;   )s   -----BEGIN PUBLIC KEY-----s   -----BEGIN RSA PUBLIC KEY-----r   s   ssh-rsac              3   ,   >#    U  H	  oT;   v   M     g 7fr_   r`   )rb   string_valuerW   s     r0   re   /CryptographyHMACKey.__init__.<locals>.<genexpr>2  s     G|s"rg   zdThe specified key is an asymmetric key or x509 certificate and should not be used as an HMAC secret.)r   HMACr   rH   ALG_MAPrF   	_hash_algrM   rN   rO   rK   rP   rR   rQ   r   )rV   rW   rX   invalid_stringss    `  r0   rZ   CryptographyHMACKey.__init__  s    JOO+G)STT#)))4c4   $ 1 1# 6D#s##JsE,B,BHIIc3**W%C
 GGGG9 
  r2   c                     UR                  S5      S:X  d  [        SUR                  S5      -  5      eUR                  S5      nUR                  S5      n[        U5      n[	        U5      nU$ )Nr]   r-  z1Incorrect key type. Expected: 'oct', Received: %src   r;   )rF   r   rQ   rR   r    )rV   rd   rc   s      r0   rO    CryptographyHMACKey._process_jwk:  se    ||E"e+NQYQ]Q]^cQddeeLLHHW!HQr2   c                 f    U R                   S[        U R                  5      R                  S5      S.$ )Nr-  r   r.  )rH   r!   rK   rL   r   s    r0   r   CryptographyHMACKey.to_dictE  s/    ??!$"3"34;;GD
 	
r2   c                     [        U5      n[        R                  " U R                  U R                  [        5       S9nUR                  U5        UR                  5       nU$ )Nr2  )r"   r   rd  rK   rf  r   r  r7  )rV   r   hr   s       r0   r   CryptographyHMACKey.signL  sG    C IId''ARS	JJL	r2   c                    [        U5      n[        U5      n[        R                  " U R                  U R                  [        5       S9nUR                  U5         UR                  U5        SnU$ ! [         a    Sn U$ f = f)Nr2  TF)	r"   r   rd  rK   rf  r   r  r   r   )rV   r   r   rn  verifieds        r0   r   CryptographyHMACKey.verifyS  sw    C C IId''ARS		HHSMH    	H	s   A0 0B ?B )rH   rf  rK   N)r   r   r   r   __doc__r   HS256r   rA   HS384rC   HS512rE   re  rZ   rO   r   r   r   r   r`   r2   r0   r_  r_    s]    
 *2B2BFMMOU_UeUegmgtgtgvwG >	

r2   r_  )9r}   r   cryptography.exceptionsr   r   cryptography.hazmat.backendsr   ,cryptography.hazmat.bindings.openssl.bindingr   cryptography.hazmat.primitivesr   r   r	   )cryptography.hazmat.primitives.asymmetricr
   r   r   /cryptography.hazmat.primitives.asymmetric.utilsr   r   &cryptography.hazmat.primitives.ciphersr   r   r   r   &cryptography.hazmat.primitives.keywrapr   r   r   &cryptography.hazmat.primitives.paddingr   ,cryptography.hazmat.primitives.serializationr   r   cryptography.utilsr   cryptography.x509r   	constantsr   
exceptionsr   r   utilsr   r    r!   r"   r#   baser%   r'   r1   r4   r   r  r_  r`   r2   r0   <module>r     s      @ 8 @ F F F F f R R ^ ^ 8 b + 7 " + e e .g gT| |~w wtJ# Jr2   