
    +hAU                       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"	 	 	 	 	 	 	 	 	 	 ddZ#	 	 	 	 	 	 	 	 	 	 	 	 ddZ$	 	 	 	 	 	 	 	 	 	 ddZ%	 	 	 	 	 	 	 	 	 	 ddZ&	 	 	 	 	 	 	 	 	 	 	 	 ddZ'	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZ(	 	 	 	 	 	 	 	 	 	 	 	 ddZ) G d de      Z* G d de      Z+y)    )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)Backendc                   |j                   }t        |t              rt        ||      S t        |t              r|j
                  S t        |t              r1t        |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)backendpsskeyhash_algorithmsalts        [/var/www/html/venv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/rsa.py_get_rsa_pss_salt_lengthr&   *   sw     D$
#,S.AA	D-	()))	D%	 c=)H  ||000    c                   t        |t              st        d      t        |t              r| j                  j
                  }nt        |t              ru| j                  j                  }t        |j                  t              st        dt        j                        | j                  |      sAt        dt        j                        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"   datapaddingpadding_enums        r%   _enc_dec_rsar7   @   s     g01KLL'8$||55	GT	"||::',,-&9(( 
 ,,W5&-,,  #||n>?((
 	

 !#t\7KKr'   c           	        t        |t              r-| j                  j                  }| j                  j                  }n,| j                  j
                  }| j                  j                  }| j                  j                  |j                  | j                  j                        }| j                  || j                  j                  k7         | j                  j                  || j                  j                        } ||      }| j                  |dk(         | j                  j                  ||      }| j                  |dkD         | j                  j                  |j                        }	| j                  |	dkD         t        |t               r| j#                  |j$                  j&                        }
| j                  j)                  ||
      }| j                  |dkD         | j#                  |j&                        }| j                  j+                  ||      }| j                  |dkD         t        |t               r|j,                  t/        |j,                        dkD  r| j                  j1                  t/        |j,                              }| j                  || j                  j                  k7         | j                  j3                  ||j,                  t/        |j,                               | j                  j5                  ||t/        |j,                              }| j                  |dk(         | j                  j7                  d|	      }| j                  j7                  d|	      } |||||t/        |            }| j                  j9                  |      d |d    }| j                  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_algorithmr.   
_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"   r4   r6   r5   initcryptpkey_ctxresbuf_sizemgf1_mdoaep_mdlabelptroutlenbufresbufs                   r%   r3   r3   d   s    #}%||11--||11--||,,S]]GLL<M<MNH8w||'8'889||x)G)GHH
x.C3!8$
,,
3
3Hl
KC37#||))#--8H8a<('4 99LL##
 ll77'JsQw'99':L:LMll77'JsQw' 	7D!NN&!# <<..s7>>/BCx7<<+<+<<=Xw~~s7>>7JKll;;hGNN 3
 	sax(\\j(3F
,,

,h
7C #vtSY
7C\\  %kq	2FLL  "
ax899Mr'   c                   t        |t              st        d      | j                  j	                  |j
                        }| j                  |dkD         t        |t              r| j                  j                  }|S t        |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&                  }|S t        |j(                   dt        j*                        )Nz'Expected provider of AsymmetricPadding.r   r)   z*Expected instance of hashes.HashAlgorithm.   zDDigest too large for key size. Use a larger key or different digest.r*   )r   r   r+   r   rI   rB   rE   r   r,   r   r.   r   r   r   r/   r   HashAlgorithmr   r   RSA_PKCS1_PSS_PADDINGr2   r1   )r    r"   r5   	algorithm	pkey_sizer6   s         r%   _rsa_sig_determine_paddingrg      s#    g01ABB**3==9I9q=)'8$||556 5 
GS	!',,-&9((  )V%9%9:HII y,,,q014+ 
 ||99  #||n>?((
 	
r'   c           	        t        | |||      }| j                  j                  |j                  | j                  j
                        }| j                  || j                  j
                  k7         | j                  j                  || j                  j                        } ||      }|dk7  r| j                         }t        d|      |u| j                  |      }	| j                  j                  ||	      }|dk  rC| j                          t        dj                  |j                        t         j"                        | j                  j%                  ||      }|dk  rC| j                          t        dj                  |j                        t         j&                        t)        |t*              rt)        |t,        j.                        sJ | j                  j1                  |t3        | |||            }| j                  |dkD         | j                  |j4                  j6                        }
| j                  j9                  ||
      }| j                  |dkD         |S )Nr9   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.)rg   r   rA   rB   rC   rD   rE   rF   rG   _consume_errorsr   rJ   EVP_PKEY_CTX_set_signature_mdr   formatr2   r   UNSUPPORTED_HASHrH   r1   r   r   r   rc    EVP_PKEY_CTX_set_rsa_pss_saltlenr&   r.   rK   rL   )r    r5   re   r"   	init_funcr6   rX   rY   errorsevp_mdr[   s              r%   _rsa_sig_setuprq      s    .gsGYOL||,,S]]GLL<M<MNH8w||'8'889||x)G)GHH
H
C
ax((*>GG88Cll886J!8##%&FMMNN ))	  ,,
3
3Hl
KC
ax!"BII ((	
 	
 '3)V%9%9:::ll;;$WgsIF
 	sQw'99LL##
 ll77'JsQw'Or'   _RSAPrivateKeyc           	     *   t        | |||| j                  j                        }| j                  j	                  d      }| j                  j                  || j                  j                  ||t        |            }| j                  |dk(         | j                  j	                  d|d         }| j                  j                  ||||t        |            }|dk7  r| j                         }	t        d|	      | j                  j                  |      d d  S )Nr:   r9   r;   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)rq   r   EVP_PKEY_sign_initrC   rS   EVP_PKEY_signrD   rO   rE   ri   r   rT   )
r    r5   re   private_keyr4   rX   buflenrY   r_   ro   s
             r%   _rsa_sig_signrx     s     ''H \\j)F
,,
$
$',,##VT3t9C 3!8$
,,

,fQi
8C
,,
$
$XsFD#d)
LC
ax((*F
 	
 <<s#A&&r'   r<   c           	     
   t        | |||| j                  j                        }| j                  j                  ||t	        |      |t	        |            }| j                  |dk\         |dk(  r| j                          t        y )Nr   )rq   r   EVP_PKEY_verify_initEVP_PKEY_verifyrO   rE   ri   r   )r    r5   re   
public_key	signaturer4   rX   rY   s           r%   _rsa_sig_verifyr~   ,  s     ))H ,,
&
&)S^T3t9C 3!8$
ax! r'   c           	     
   t        | |||| j                  j                        }| j                  j                  |j                        }| j                  |dkD         | j                  j                  d|      }| j                  j                  d|      }| j                  j                  ||||t        |            }	| j                  j                  |      d |d    }
| j                  j                          |	dk7  rt        |
S )Nr   r;   r:   r9   )rq   r   EVP_PKEY_verify_recover_initrI   rB   rE   rC   rS   EVP_PKEY_verify_recoverrO   rT   rU   r   )r    r5   re   r|   r}   rX   maxlenr_   rw   rY   r`   s              r%   _rsa_sig_recoverr   G  s     11H \\''
(<(<=F6A:&
,,

,f
5C\\j&1F
,,
.
.#vy#i.C \\  %kq	2FLL  " ax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y)rr   objectrB   
_rsa_cdataint	_key_sizec                   |sG|j                   j                  |      }|dk7  r|j                         }t        d|      |j                  j                  d      }|j                  j                  d      }|j                   j                  |||       |j                  |d   |j                  j                  k7         |j                  |d   |j                  j                  k7         |j                   j                  |d         }	|j                   j                  |d         }
|	dk7  s|
dk7  r|j                         }t        d|      || _
        || _        || _        d| _        t        j                         | _        | j                  j                  j                  d      }| j                  j                   j#                  | j                  || j                  j                  j                  | j                  j                  j                         | j                  j                  |d   | j                  j                  j                  k7         | j                  j                   j%                  |d         | _        y )Nr9   zInvalid private key	BIGNUM **r   F)r   RSA_check_keyri   r   rC   rS   RSA_get0_factorsrE   rD   	BN_is_odd_backendr   rB   _blinded	threadingLock_blinding_lockRSA_get0_keyBN_num_bitsr   )selfr    	rsa_cdataevp_pkeyunsafe_skip_rsa_key_validationrY   ro   pqp_oddq_oddns               r%   __init__z_RSAPrivateKey.__init__p  s    .,,,,Y7Cax 002 !6??   -A  -ALL)))Q:""1Q47<<+<+<#<=""1Q47<<+<+<#<=LL**1Q40ELL**1Q40EzUaZ 002 !6??#!'nn.MM"";/''OOMM##MM##		
 	$$QqTT]]-?-?-D-D%DE++77!=r'   c                    | j                   s&| j                  5  | j                          d d d        y y # 1 sw Y   y xY wN)r   r   _non_threadsafe_enable_blindingr   s    r%   _enable_blindingz_RSAPrivateKey._enable_blinding  s?     }}$$ 74467 7 7 7s   4=c                   | j                   st| j                  j                  j                  | j                  | j                  j
                  j                        }| j                  j                  |dk(         d| _         y y )Nr9   T)r   r   r   RSA_blinding_onr   rC   rD   rE   )r   rY   s     r%   r   z._RSAPrivateKey._non_threadsafe_enable_blinding  sb    
 }}--$$44!3!3!8!8C MM((2 DM r'   c                    | j                   S r   r   r   s    r%   key_sizez_RSAPrivateKey.key_size      ~~r'   c                    | j                          | j                  dz   dz  }|t        |      k7  rt        d      t	        | j
                  | ||      S )N      z,Ciphertext length must be equal to key size.)r   r   rO   r   r7   r   )r   
ciphertextr5   key_size_bytess       r%   decryptz_RSAPrivateKey.decrypt  sN    --!+1S_,KLLDMM4WEEr'   c                   | j                   j                  j                  | j                        }| j                   j	                  || j                   j
                  j                  k7         | j                   j
                  j                  || j                   j                  j                        }| j                   j                  |      }t        | j                   ||      S r   )r   r   RSAPublicKey_dupr   rE   rC   rD   rF   RSA_free_rsa_cdata_to_evp_pkeyr<   )r   ctxr   s      r%   r|   z_RSAPrivateKey.public_key  s    mm  11$//B$$SDMM,>,>,C,C%CDmm  ##C););)D)DE==77<T]]C::r'   c                f	   | j                   j                  j                  d      }| j                   j                  j                  d      }| j                   j                  j                  d      }| j                   j                  j                  d      }| j                   j                  j                  d      }| j                   j                  j                  d      }| j                   j                  j                  d      }| j                   j                  j                  d      }| j                   j                  j	                  | j
                  |||       | j                   j                  |d   | j                   j                  j                  k7         | j                   j                  |d   | j                   j                  j                  k7         | j                   j                  |d   | j                   j                  j                  k7         | j                   j                  j                  | j
                  ||       | j                   j                  |d   | j                   j                  j                  k7         | j                   j                  |d   | j                   j                  j                  k7         | j                   j                  j                  | j
                  |||       | j                   j                  |d   | j                   j                  j                  k7         | j                   j                  |d   | j                   j                  j                  k7         | j                   j                  |d   | j                   j                  j                  k7         t        | j                   j                  |d         | j                   j                  |d         | j                   j                  |d         | j                   j                  |d         | j                   j                  |d         | j                   j                  |d         t        | j                   j                  |d         | j                   j                  |d                     S )Nr   r   er   )r   r   ddmp1dmq1iqmppublic_numbers)r   rC   rS   r   r   r   rE   rD   r   RSA_get0_crt_paramsr   
_bn_to_intr   )	r   r   r   r   r   r   r   r   r   s	            r%   private_numbersz_RSAPrivateKey.private_numbers  sX   MM"";/MM"";/MM"";/MM"";/MM"";/}}!!%%k2}}!!%%k2}}!!%%k2''AqA$$QqTT]]-?-?-D-D%DE$$QqTT]]-?-?-D-D%DE$$QqTT]]-?-?-D-D%DE++DOOQB$$QqTT]]-?-?-D-D%DE$$QqTT]]-?-?-D-D%DE..OOT4	
 	$$T!W0B0B0G0G%GH$$T!W0B0B0G0G%GH$$T!W0B0B0G0G%GH mm&&qt,mm&&qt,mm&&qt,))$q'2))$q'2))$q'2+--**1Q40--**1Q40
 	
r'   c                j    | j                   j                  |||| | j                  | j                        S r   )r   _private_key_bytesrB   r   )r   encodingrk   encryption_algorithms       r%   private_bytesz_RSAPrivateKey.private_bytes  s5     }}// NNOO
 	
r'   c                r    | j                          t        ||      \  }}t        | j                  ||| |      S r   )r   r   rx   r   )r   r4   r5   re   s       r%   signz_RSAPrivateKey.sign  s7     	9$	JiT]]GYdKKr'   N)r    r   r   bool)returnNoner   r   )r   bytesr5   r   r   r   )r   r   )r   r   )r   serialization.Encodingrk   zserialization.PrivateFormatr   z(serialization.KeySerializationEncryptionr   r   )r4   r   r5   r   re   8typing.Union[asym_utils.Prehashed, hashes.HashAlgorithm]r   r   )__name__
__module____qualname____annotations__r   r   r   propertyr   r   r|   r   r   r    r'   r%   rr   rr   k  s    N/>/> )-/>b7
!  F;!
F
(
 ,
 G	

 

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y)r<   r   rB   r   r   r   c                ,   || _         || _        || _        | j                   j                  j	                  d      }| j                   j
                  j                  | j                  || j                   j                  j                  | j                   j                  j                         | j                   j                  |d   | j                   j                  j                  k7         | j                   j
                  j                  |d         | _
        y )Nr   r   )r   r   rB   rC   rS   r   r   rD   rE   r   r   )r   r    r   r   r   s        r%   r   z_RSAPublicKey.__init__	  s    #!MM"";/''OOMM##MM##		
 	$$QqTT]]-?-?-D-D%DE++77!=r'   c                    | j                   S r   r   r   s    r%   r   z_RSAPublicKey.key_size  r   r'   c                    t        |t              st        S | j                  j                  j                  | j                  |j                        dk(  S )Nr9   )r   r<   NotImplementedr   r   EVP_PKEY_cmprB   )r   others     r%   __eq__z_RSAPublicKey.__eq__  sC    %/!! MM++DNNEOOL	
r'   c                2    t        | j                  | ||      S r   )r7   r   )r   	plaintextr5   s      r%   encryptz_RSAPublicKey.encrypt%  s    DMM4GDDr'   c                   | j                   j                  j                  d      }| j                   j                  j                  d      }| j                   j                  j	                  | j
                  ||| j                   j                  j                         | j                   j                  |d   | j                   j                  j                  k7         | j                   j                  |d   | j                   j                  j                  k7         t        | j                   j                  |d         | j                   j                  |d               S )Nr   r   r   )
r   rC   rS   r   r   r   rD   rE   r   r   )r   r   r   s      r%   r   z_RSAPublicKey.public_numbers(  s    MM"";/MM"";/''OOQ4==#5#5#:#:	
 	$$QqTT]]-?-?-D-D%DE$$QqTT]]-?-?-D-D%DEmm&&qt,mm&&qt,
 	
r'   c                h    | j                   j                  ||| | j                  | j                        S r   )r   _public_key_bytesrB   r   )r   r   rk   s      r%   public_bytesz_RSAPublicKey.public_bytes5  s.    
 }}..fdDNNDOO
 	
r'   c                V    t        ||      \  }}t        | j                  ||| ||       y r   )r   r~   r   )r   r}   r4   r5   re   s        r%   verifyz_RSAPublicKey.verify>  s-     :$	JiMM7ItY	
r'   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	Prehashedr+   r   r   )r   r}   r5   re   s       r%   recover_data_from_signaturez)_RSAPublicKey.recover_data_from_signatureJ  sE     i!5!56F   MM7ItY
 	
r'   N)r    r   r   )r   r   r   r   )r   r   r5   r   r   r   )r   r   )r   r   rk   zserialization.PublicFormatr   r   )
r}   r   r4   r   r5   r   re   r   r   r   )r}   r   r5   r   re   %typing.Optional[hashes.HashAlgorithm]r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r'   r%   r<   r<     s    N>  
E

(
 +
 
	




 

 #	


 L

 




 #
 9	

 

r'   )
r    r   r!   r   r"   z)typing.Union[RSAPrivateKey, RSAPublicKey]r#   hashes.HashAlgorithmr   r   )
r    r   r"   +typing.Union[_RSAPrivateKey, _RSAPublicKey]r4   r   r5   r   r   r   )r    r   r"   r   r4   r   r6   r   r5   r   r   r   )
r    r   r"   r   r5   r   re   r   r   r   )
r    r   r5   r   re   r   r"   z+typing.Union[_RSAPublicKey, _RSAPrivateKey]rn   z"typing.Callable[[typing.Any], int])r    r   r5   r   re   r   rv   rr   r4   r   r   r   )r    r   r5   r   re   r   r|   r<   r}   r   r4   r   r   r   )r    r   r5   r   re   r   r|   r<   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&   r7   r3   rg   rq   rx   r~   r   rr   r<   r   r'   r%   <module>r      sK  
 #   
 A I
 
 
  
D	 
3 )	
 	,!L!L	4!L !L 	!L
 !LH@@	4@ @ 	@
 @ @F))	4) ) 5	)
 	)`222 52 
5	2
 22j''' $'  	'
 ' '@ $ 	
   
6!!! 5! 	!
 ! !HVL] VLrS
L S
r'   