
    _fAU                    4   d dl mZ d dlZd dlZd dlmZmZmZ d dlm	Z	 d dl
mZmZ d dlmZ d dlmZmZmZmZmZmZmZmZmZ d dlmZmZmZmZ ej        rd d	l m!Z! d/dZ"d0dZ#d1dZ$d2dZ%d3d#Z&d4d&Z'd5d+Z(d6d,Z) G d- d%e          Z* G d. d(e          Z+dS )7    )annotationsN)InvalidSignatureUnsupportedAlgorithm_Reasons)_calculate_digest_and_algorithm)hashesserialization)utils)	MGF1OAEPPSSAsymmetricPaddingPKCS1v15_Auto_DigestLength
_MaxLengthcalculate_max_pss_salt_length)RSAPrivateKeyRSAPrivateNumbersRSAPublicKeyRSAPublicNumbers)Backendbackendr   pssr   key)typing.Union[RSAPrivateKey, RSAPublicKey]hash_algorithmhashes.HashAlgorithmreturnintc                    |j         }t          |t                    rt          ||          S t          |t                    r|j        S t          |t                    r0t          |t                    rt          d          | j	        j
        S |S )Nz6PSS salt length can only be set to AUTO when verifying)_salt_length
isinstancer   r   r   digest_sizer   r   
ValueError_libRSA_PSS_SALTLEN_AUTO)r   r   r   r   salts        Z/var/www/html/env/lib/python3.11/site-packages/cryptography/hazmat/backends/openssl/rsa.py_get_rsa_pss_salt_lengthr*   *   s     D$
## ,S.AAA	D-	(	( 	))	D%	 	  c=)) 	H   |00    +typing.Union[_RSAPrivateKey, _RSAPublicKey]databytespaddingr   c                   t          |t                    st          d          t          |t                    r| j        j        }nt          |t                    rp| j        j        }t          |j        t                    st          dt          j                  |                     |          st          dt          j                  n"t          |j         dt          j                  t!          | ||||          S )Nz1Padding must be an instance of AsymmetricPadding.'Only MGF1 is supported by this backend.zPThis combination of padding and hash algorithm is not supported by this backend." is not supported by this backend.)r#   r   	TypeErrorr   r&   RSA_PKCS1_PADDINGr   RSA_PKCS1_OAEP_PADDING_mgfr   r   r   UNSUPPORTED_MGFrsa_padding_supportedUNSUPPORTED_PADDINGname_enc_dec_rsa_pkey_ctx)r   r   r-   r/   padding_enums        r)   _enc_dec_rsar=   @   s
    g011 MKLLL'8$$ 
|5	GT	"	" 
|:',-- 	&9(  
 ,,W55 	&-,  	 #|???(
 
 	

 !#t\7KKKr+   r<   c           	     L   t          |t                    r| j        j        }| j        j        }n| j        j        }| j        j        }| j                            |j        | j	        j
                  }|                     || j	        j
        k               | j	                            || j        j                  } ||          }|                     |dk               | j                            ||          }|                     |dk               | j                            |j                  }	|                     |	dk               t          |t                     r|                     |j        j                  }
| j                            ||
          }|                     |dk               |                     |j                  }| j                            ||          }|                     |dk               t          |t                     r|j        t/          |j                  dk    r| j                            t/          |j                            }|                     || j	        j
        k               | j	                            ||j        t/          |j                             | j                            ||t/          |j                            }|                     |dk               | j	                            d|	          }| j	                            d|	          } |||||t/          |                    }| j	                            |          d |d                  }| j                                         |dk    rt=          d          |S )N   r   size_t *unsigned char[]zEncryption/decryption failed.)r#   _RSAPublicKeyr&   EVP_PKEY_encrypt_initEVP_PKEY_encryptEVP_PKEY_decrypt_initEVP_PKEY_decryptEVP_PKEY_CTX_new	_evp_pkey_ffiNULLopenssl_assertgcEVP_PKEY_CTX_freeEVP_PKEY_CTX_set_rsa_paddingEVP_PKEY_sizer   _evp_md_non_null_from_algorithmr6   
_algorithmEVP_PKEY_CTX_set_rsa_mgf1_mdEVP_PKEY_CTX_set_rsa_oaep_md_labellenOPENSSL_mallocmemmove EVP_PKEY_CTX_set0_rsa_oaep_labelnewbufferERR_clear_errorr%   )r   r   r-   r<   r/   initcryptpkey_ctxresbuf_sizemgf1_mdoaep_mdlabelptroutlenbufresbufs                   r)   r;   r;   d   s7    #}%% .|1-|1-|,,S]GL<MNNH8w|'88999|x)GHHH
$x..C3!8$$$
,
3
3Hl
K
KC37###|))#-88H8a<((('4   (99L#
 
 l77'JJsQw'''99':LMMl77'JJsQw''' 	7D!!)N&!## <..s7>/B/BCCx7<+<<===Xw~s7>7J7JKKKl;;hGN 3 3
 
 	sax(((\j(33F
,

,h
7
7C %#vtSYY
7
7C\  %%kq	k2FL  """
axx8999Mr+   	algorithm%typing.Optional[hashes.HashAlgorithm]c                   t          |t                    st          d          | j                            |j                  }|                     |dk               t          |t                    r| j        j        }nt          |t                    rt          |j
        t                    st          dt          j                  t          |t          j                  st          d          ||j        z
  dz
  dk     rt%          d          | j        j        }n"t          |j         dt          j                  |S )Nz'Expected provider of AsymmetricPadding.r   r1   z*Expected instance of hashes.HashAlgorithm.   zDDigest too large for key size. Use a larger key or different digest.r2   )r#   r   r3   r&   rO   rH   rK   r   r4   r   r6   r   r   r   r7   r   HashAlgorithmr$   r%   RSA_PKCS1_PSS_PADDINGr:   r9   )r   r   r/   rg   	pkey_sizer<   s         r)   _rsa_sig_determine_paddingrn      sI    g011 CABBB**3=99I9q=)))'8$$ 
|5	GS	!	! 
',-- 	&9(   )V%9:: 	JHIII y,,q0144+  
 |9"|???(
 
 	

 r+   +typing.Union[_RSAPublicKey, _RSAPrivateKey]	init_func"typing.Callable[[typing.Any], int]c           	        t          | |||          }| j                            |j        | j        j                  }|                     || j        j        k               | j                            || j        j                  } ||          }|dk    r$| 	                                }t          d|          |||                     |          }	| j                            ||	          }|dk    rF| 	                                 t          d                    |j                  t           j                  | j                            ||          }|dk    rF| 	                                 t          d                    |j                  t           j                  t)          |t*                    rt)          |t,          j                  sJ | j                            |t3          | |||                    }|                     |dk               |                     |j        j                  }
| j                            ||
          }|                     |dk               |S )Nr?   z#Unable to sign/verify with this keyr   z4{} is not supported by this backend for RSA signing.z4{} is not supported for the RSA signature operation.)rn   r&   rG   rH   rI   rJ   rK   rL   rM   _consume_errorsr%   rP   EVP_PKEY_CTX_set_signature_mdr   formatr:   r   UNSUPPORTED_HASHrN   r9   r#   r   r   rk    EVP_PKEY_CTX_set_rsa_pss_saltlenr*   r6   rQ   rR   )r   r/   rg   r   rp   r<   r^   r_   errorsevp_mdra   s              r)   _rsa_sig_setuprz      sO    .gsGYOOL|,,S]GL<MNNH8w|'88999|x)GHHH
)H

C
axx((**>GGG88CCl886JJ!88##%%%&FMMN  )	   ,
3
3Hl
K
KC
axx!!!"BII  (	
 
 	
 '3 ()V%9:::::l;;$WgsIFF
 
 	sQw'''99L#
 
 l77'JJsQw'''Or+   private_key_RSAPrivateKeyc           	     <   t          | |||| j        j                  }| j                            d          }| j                            || j        j        ||t          |                    }|                     |dk               | j                            d|d                   }| j                            ||||t          |                    }|dk    r$| 	                                }	t          d|	          | j                            |          d d          S )Nr@   r?   rA   r   zuDigest or salt length too long for key size. Use a larger key or shorter salt length if you are specifying a PSS salt)rz   r&   EVP_PKEY_sign_initrI   rY   EVP_PKEY_signrJ   rU   rK   rs   r%   rZ   )
r   r/   rg   r{   r-   r^   buflenr_   re   rx   s
             r)   _rsa_sig_signr     s    ' H \j))F
,
$
$',#VT3t99 C 3!8$$$
,

,fQi
8
8C
,
$
$XsFD#d))
L
LC
axx((**F
 
 	
 <s##AAA&&r+   
public_keyrB   	signatureNonec           	     $   t          | |||| j        j                  }| j                            ||t	          |          |t	          |                    }|                     |dk               |dk    r|                                  t          d S )Nr   )rz   r&   EVP_PKEY_verify_initEVP_PKEY_verifyrU   rK   rs   r   )r   r/   rg   r   r   r-   r^   r_   s           r)   _rsa_sig_verifyr   ,  s     ) H ,
&
&)S^^T3t99 C 3!8$$$
axx!!! xr+   c           	        t          | |||| j        j                  }| j                            |j                  }|                     |dk               | j                            d|          }| j                            d|          }| j                            ||||t          |                    }	| j        
                    |          d |d                  }
| j                                         |	dk    rt          |
S )Nr   rA   r@   r?   )rz   r&   EVP_PKEY_verify_recover_initrO   rH   rK   rI   rY   EVP_PKEY_verify_recoverrU   rZ   r[   r   )r   r/   rg   r   r   r^   maxlenre   r   r_   rf   s              r)   _rsa_sig_recoverr   G  s     1 H \''
(<==F6A:&&&
,

,f
5
5C\j&11F
,
.
.#vy#i.. C \  %%kq	k2FL  """ axxMr+   c                      e Zd ZU ded<   ded<   ded<   d%d
Zd&dZd&dZed'd            Zd(dZ	d)dZ
d*dZd+dZd,d#Zd$S )-r|   objectrH   
_rsa_cdatar    	_key_sizer   r   unsafe_skip_rsa_key_validationboolc                  |sV|j                             |          }|dk    r$|                                }t          d|          |j                            d          }|j                            d          }|j                             |||           |                    |d         |j        j        k               |                    |d         |j        j        k               |j         	                    |d                   }	|j         	                    |d                   }
|	dk    s|
dk    r$|                                }t          d|          || _
        || _        || _        d| _        t          j                    | _        | j
        j                            d          }| j
        j                             | j        || j
        j        j        | j
        j        j                   | j
                            |d         | j
        j        j        k               | j
        j                             |d                   | _        d S )Nr?   zInvalid private key	BIGNUM **r   F)r&   RSA_check_keyrs   r%   rI   rY   RSA_get0_factorsrK   rJ   	BN_is_odd_backendr   rH   _blinded	threadingLock_blinding_lockRSA_get0_keyBN_num_bitsr   )selfr   	rsa_cdataevp_pkeyr   r_   rx   pqp_oddq_oddns               r)   __init__z_RSAPrivateKey.__init__p  s    . 	@,,,Y77Caxx 0022 !6???   --A  --AL)))Q:::""1Q47<+<#<===""1Q47<+<#<===L**1Q400EL**1Q400EzzUaZZ 0022 !6???#!'n..M"";//''OM#M#		
 	
 	
 	$$QqTT]-?-D%DEEE+77!==r+   r   r   c                    | j         s6| j        5  |                                  d d d            d S # 1 swxY w Y   d S d S N)r   r   _non_threadsafe_enable_blindingr   s    r)   _enable_blindingz_RSAPrivateKey._enable_blinding  s     } 	7$ 7 7446667 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7	7 	7s   155c                    | j         s[| j        j                            | j        | j        j        j                  }| j                            |dk               d| _         d S d S )Nr?   T)r   r   r&   RSA_blinding_onr   rI   rJ   rK   )r   r_   s     r)   r   z._RSAPrivateKey._non_threadsafe_enable_blinding  sh    
 } 	!-$44!3!8 C M((222 DMMM	! 	!r+   c                    | j         S r   r   r   s    r)   key_sizez_RSAPrivateKey.key_size  
    ~r+   
ciphertextr.   r/   r   c                    |                                   | j        dz   dz  }|t          |          k    rt          d          t	          | j        | ||          S )N      z,Ciphertext length must be equal to key size.)r   r   rU   r%   r=   r   )r   r   r/   key_size_bytess       r)   decryptz_RSAPrivateKey.decrypt  s[    -!+1S__,,KLLLDM4WEEEr+   r   c                b   | j         j                            | j                  }| j                             || j         j        j        k               | j         j                            || j         j        j                  }| j         	                    |          }t          | j         ||          S r   )r   r&   RSAPublicKey_dupr   rK   rI   rJ   rL   RSA_free_rsa_cdata_to_evp_pkeyrB   )r   ctxr   s      r)   r   z_RSAPrivateKey.public_key  s    m 11$/BB$$SDM,>,C%CDDDm ##C);)DEE=77<<T]C:::r+   r   c                4   | j         j                            d          }| j         j                            d          }| j         j                            d          }| j         j                            d          }| j         j                            d          }| j         j                            d          }| j         j                            d          }| j         j                            d          }| j         j                            | j        |||           | j                             |d         | j         j        j        k               | j                             |d         | j         j        j        k               | j                             |d         | j         j        j        k               | j         j                            | j        ||           | j                             |d         | j         j        j        k               | j                             |d         | j         j        j        k               | j         j        	                    | j        |||           | j                             |d         | j         j        j        k               | j                             |d         | j         j        j        k               | j                             |d         | j         j        j        k               t          | j                             |d                   | j                             |d                   | j                             |d                   | j                             |d                   | j                             |d                   | j                             |d                   t          | j                             |d                   | j                             |d                                       S )Nr   r   er   )r   r   ddmp1dmq1iqmppublic_numbers)r   rI   rY   r&   r   r   rK   rJ   r   RSA_get0_crt_paramsr   
_bn_to_intr   )	r   r   r   r   r   r   r   r   r   s	            r)   private_numbersz_RSAPrivateKey.private_numbers  sE   M"";//M"";//M"";//M"";//M"";//}!%%k22}!%%k22}!%%k22''AqAAA$$QqTT]-?-D%DEEE$$QqTT]-?-D%DEEE$$QqTT]-?-D%DEEE++DOQBBB$$QqTT]-?-D%DEEE$$QqTT]-?-D%DEEE..OT4	
 	
 	
 	$$T!W0B0G%GHHH$$T!W0B0G%GHHH$$T!W0B0G%GHHH m&&qt,,m&&qt,,m&&qt,,))$q'22))$q'22))$q'22+-**1Q400-**1Q400  
 
 
 	
r+   encodingserialization.Encodingru   serialization.PrivateFormatencryption_algorithm(serialization.KeySerializationEncryptionc                T    | j                             |||| | j        | j                  S r   )r   _private_key_bytesrH   r   )r   r   ru   r   s       r)   private_bytesz_RSAPrivateKey.private_bytes  s4     }// NO
 
 	
r+   r-   rg   8typing.Union[asym_utils.Prehashed, hashes.HashAlgorithm]c                    |                                   t          ||          \  }}t          | j        ||| |          S r   )r   r   r   r   )r   r-   r/   rg   s       r)   signz_RSAPrivateKey.sign  sA     	9$	JJiT]GYdKKKr+   N)r   r   r   r   )r   r   r   r    )r   r.   r/   r   r   r.   )r   r   )r   r   )r   r   ru   r   r   r   r   r.   )r-   r.   r/   r   rg   r   r   r.   )__name__
__module____qualname____annotations__r   r   r   propertyr   r   r   r   r   r    r+   r)   r|   r|   k  s        NNN/> /> /> />b7 7 7 7
! 
! 
! 
!    XF F F F; ; ; ;!
 !
 !
 !
F
 
 
 
L L L L L Lr+   c                  ~    e Zd ZU ded<   ded<   ded<   d#dZed$d
            Zd%dZd&dZd'dZ	d(dZ
d)dZd*d!Zd"S )+rB   r   rH   r   r    r   r   r   c                   || _         || _        || _        | j         j                            d          }| j         j                            | j        || j         j        j        | j         j        j                   | j                             |d         | j         j        j        k               | j         j        	                    |d                   | _
        d S )Nr   r   )r   r   rH   rI   rY   r&   r   rJ   rK   r   r   )r   r   r   r   r   s        r)   r   z_RSAPublicKey.__init__	  s    #!M"";//''OM#M#		
 	
 	
 	$$QqTT]-?-D%DEEE+77!==r+   r   c                    | j         S r   r   r   s    r)   r   z_RSAPublicKey.key_size  r   r+   otherr   c                    t          |t                    st          S | j        j                            | j        |j                  dk    S )Nr?   )r#   rB   NotImplementedr   r&   EVP_PKEY_cmprH   )r   r   s     r)   __eq__z_RSAPublicKey.__eq__  sE    %// 	"!! M++DNEOLL	
r+   	plaintextr.   r/   r   c                0    t          | j        | ||          S r   )r=   r   )r   r   r/   s      r)   encryptz_RSAPublicKey.encrypt%  s    DM4GDDDr+   r   c                P   | j         j                            d          }| j         j                            d          }| j         j                            | j        ||| j         j        j                   | j                             |d         | j         j        j        k               | j                             |d         | j         j        j        k               t          | j         	                    |d                   | j         	                    |d                             S )Nr   r   r   )
r   rI   rY   r&   r   r   rJ   rK   r   r   )r   r   r   s      r)   r   z_RSAPublicKey.public_numbers(  s    M"";//M"";//''OQ4=#5#:	
 	
 	
 	$$QqTT]-?-D%DEEE$$QqTT]-?-D%DEEEm&&qt,,m&&qt,,
 
 
 	
r+   r   r   ru   serialization.PublicFormatc                R    | j                             ||| | j        | j                  S r   )r   _public_key_bytesrH   r   )r   r   ru   s      r)   public_bytesz_RSAPublicKey.public_bytes5  s-    
 }..fdDNDO
 
 	
r+   r   r-   rg   r   r   c                ^    t          ||          \  }}t          | j        ||| ||           d S r   )r   r   r   )r   r   r-   r/   rg   s        r)   verifyz_RSAPublicKey.verify>  sB     :$	JJiM7ItY	
 	
 	
 	
 	
r+   rh   c                    t          |t          j                  rt          d          t	          | j        ||| |          S )NzoPrehashed is only supported in the sign and verify methods. It cannot be used with recover_data_from_signature.)r#   
asym_utils	Prehashedr3   r   r   )r   r   r/   rg   s       r)   recover_data_from_signaturez)_RSAPublicKey.recover_data_from_signatureJ  sR     i!566 	F    M7ItY
 
 	
r+   N)r   r   r   )r   r   r   r   )r   r.   r/   r   r   r.   )r   r   )r   r   ru   r   r   r.   )
r   r.   r-   r.   r/   r   rg   r   r   r   )r   r.   r/   r   rg   rh   r   r.   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r+   r)   rB   rB     s         NNN> > > >    X
 
 
 
E E E E
 
 
 

 
 
 


 

 

 


 
 
 
 
 
r+   )
r   r   r   r   r   r   r   r   r   r    )
r   r   r   r,   r-   r.   r/   r   r   r.   )r   r   r   r,   r-   r.   r<   r    r/   r   r   r.   )
r   r   r   r,   r/   r   rg   rh   r   r    )
r   r   r/   r   rg   rh   r   ro   rp   rq   )r   r   r/   r   rg   r   r{   r|   r-   r.   r   r.   )r   r   r/   r   rg   r   r   rB   r   r.   r-   r.   r   r   )r   r   r/   r   rg   rh   r   rB   r   r.   r   r.   ),
__future__r   r   typingcryptography.exceptionsr   r   r   *cryptography.hazmat.backends.openssl.utilsr   cryptography.hazmat.primitivesr   r	   )cryptography.hazmat.primitives.asymmetricr
   r   1cryptography.hazmat.primitives.asymmetric.paddingr   r   r   r   r   r   r   r   r   -cryptography.hazmat.primitives.asymmetric.rsar   r   r   r   TYPE_CHECKING,cryptography.hazmat.backends.openssl.backendr   r*   r=   r;   rn   rz   r   r   r   r|   rB   r   r+   r)   <module>r      s  
 # " " " " "              
      A @ @ @ @ @ @ @ I I I I I I
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
            
 EDDDDDD   ,!L !L !L !LH@ @ @ @F) ) ) )`2 2 2 2j' ' ' '@   6! ! ! !HVL VL VL VL VL] VL VL VLrS
 S
 S
 S
 S
L S
 S
 S
 S
 S
r+   