
     hLT                        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
dedej         eef         de	j!        de"f
dZ#d	d
dej         d         de$dede$f
dZ%d	d
dej         d         de$de"dede$fdZ&d	d
dej         d         dedej'        e	j!                 de"f
dZ(d	d
dedej'        e	j!                 dej         d         dej)        ej*        ge"f         f
dZ+d	d
dede	j!        ddde$de$fdZ,d	d
dede	j!        ddd e$de$ddfd!Z-d	d
dedej'        e	j!                 ddd e$de$fd"Z. G d# de          Z/ G d$ de          Z0dS )%    N)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   psskeyhash_algorithmreturnc                     |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        d/var/www/html/Sam_Eipo/venv/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    )_RSAPrivateKey_RSAPublicKeydatapaddingc                    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_rsar9   >   s
    g011 MKLLL'8$$ 
|5	GT	"	" 
|:',-- 	&9(  
 ,,W55 	&-,  	 #|???(
 
 	

 !#t\7KKKr'   r8   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   r)   r"   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_algorithmr2   
_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*   r8   r+   initcryptpkey_ctxresbuf_sizemgf1_mdoaep_mdlabelptroutlenbufresbufs                   r%   r7   r7   b   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'   	algorithmc                    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   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"   rJ   rC   rF   r   r0   r   r2   r
   r   r   r3   r   HashAlgorithmr    r!   RSA_PKCS1_PSS_PADDINGr6   r5   )r   r   r+   rb   	pkey_sizer8   s         r%   _rsa_sig_determine_paddingrh      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'   )r)   r(   	init_funcc           	         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.)rh   r"   rB   rC   rD   rE   rF   rG   rH   _consume_errorsr!   rK   EVP_PKEY_CTX_set_signature_mdr   formatr6   r   UNSUPPORTED_HASHrI   r5   r   r   r   re    EVP_PKEY_CTX_set_rsa_pss_saltlenr&   r2   rL   rM   )r   r+   rb   r   ri   r8   rY   rZ   errorsevp_mdr\   s              r%   _rsa_sig_setuprr      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_keyr(   c           	      <   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;   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)rr   r"   EVP_PKEY_sign_initrD   rT   EVP_PKEY_signrE   rP   rF   rk   r!   rU   )
r   r+   rb   rs   r*   rY   buflenrZ   r`   rp   s
             r%   _rsa_sig_signrx   
  s    ' H \j))F
,
$
$',#VT3t99 C 3!8$$$
,

,fQi
8
8C
,
$
$XsFD#d))
L
LC
axx((**F
 
 	
 <s##AAA&&r'   
public_keyr)   	signaturec           	      $   t          | |||| j        j                  }| j                            ||t	          |          |t	          |                    }|                     |dk               |dk    r|                                  t          d S )Nr   )rr   r"   EVP_PKEY_verify_initEVP_PKEY_verifyrP   rF   rk   r   )r   r+   rb   ry   rz   r*   rY   rZ   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   r=   r<   r;   )rr   r"   EVP_PKEY_verify_recover_initrJ   rC   rF   rD   rT   EVP_PKEY_verify_recoverrP   rU   rV   r   )r   r+   rb   ry   rz   rY   maxlenr`   rw   rZ   ra   s              r%   _rsa_sig_recoverr   E  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 eed<   eed<   eed<   dddefdZdd
ZddZ	e
defd            ZdededefdZdefdZdefdZdej        dej        dej        defdZdededej        ej        ej        f         defdZd	S )r(   rC   
_rsa_cdata	_key_sizer   r   unsafe_skip_rsa_key_validationc                   |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_keyrk   r!   rD   rT   RSA_get0_factorsrF   rE   	BN_is_odd_backendr   rC   _blinded	threadingLock_blinding_lockRSA_get0_keyBN_num_bitsr   )selfr   	rsa_cdataevp_pkeyr   rZ   rp   pqp_oddq_oddns               r%   __init__z_RSAPrivateKey.__init__n  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   Nc                     | 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   rD   rE   rF   )r   rZ   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+   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   rP   r!   r9   r   )r   r   r+   key_size_bytess       r%   decryptz_RSAPrivateKey.decrypt  s[    -!+1S__,,KLLLDM4WEEEr'   c                 b   | j         j                            | j                  }| j                             || j         j        j        k               | j         j                            || j         j        j                  }| j         	                    |          }t          | j         ||          S r   )r   r"   RSAPublicKey_dupr   rF   rD   rE   rG   RSA_free_rsa_cdata_to_evp_pkeyr)   )r   ctxr   s      r%   ry   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'   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   rD   rT   r"   r   r   rF   rE   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'   encodingrm   encryption_algorithmc                 T    | j                             |||| | j        | j                  S r   )r   _private_key_bytesrC   r   )r   r   rm   r   s       r%   private_bytesz_RSAPrivateKey.private_bytes  s4     }// NO
 
 	
r'   r*   rb   c                     |                                   t          ||          \  }}t          | j        ||| |          S r   )r   r   rx   r   )r   r*   r+   rb   s       r%   signz_RSAPrivateKey.sign  sA     	9$	JJiT]GYdKKKr'   )r   N)__name__
__module____qualname__object__annotations__intboolr   r   r   propertyr   bytesr   r   r   ry   r   r   r   EncodingPrivateFormatKeySerializationEncryptionr   typingUnion
asym_utils	Prehashedr   re   r    r'   r%   r(   r(   i  s        NNN/>/> )-/> /> /> />b7 7 7 7
! 
! 
! 
! #    XF% F2C F F F F F;L ; ; ; ;!
!2 !
 !
 !
 !
F
(
 +
 ,F	

 

 
 
 
LL #L <
 4f6J JK	L
 
L L L L L Lr'   c            
          e Zd ZU eed<   eed<   eed<   ddZedefd            Zd	e	d
e
de	fdZdefdZdej        dej        de	fdZde	de	d
e
dej        ej        ej        f         ddf
dZde	d
e
dej        ej                 de	fdZdS )r)   rC   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   rC   rD   rT   r"   r   rE   rF   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'   	plaintextr+   c                 0    t          | j        | ||          S r   )r9   r   )r   r   r+   s      r%   encryptz_RSAPublicKey.encrypt  s    DM4GDDDr'   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   rD   rT   r"   r   r   rE   rF   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   rm   c                 R    | j                             ||| | j        | j                  S r   )r   _public_key_bytesrC   r   )r   r   rm   s      r%   public_bytesz_RSAPublicKey.public_bytes*  s-    
 }..fdDNDO
 
 	
r'   rz   r*   rb   Nc                 ^    t          ||          \  }}t          | j        ||| ||           d S r   )r   r~   r   )r   rz   r*   r+   rb   s        r%   verifyz_RSAPublicKey.verify3  sB     :$	JJiM7ItY	
 	
 	
 	
 	
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   r   r   r/   r   r   )r   rz   r+   rb   s       r%   recover_data_from_signaturez)_RSAPublicKey.recover_data_from_signature?  sR     i!566 	F    M7ItY
 
 	
r'   )r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   PublicFormatr   r   r   r   r   r   re   r   Optionalr   r   r'   r%   r)   r)     s        NNN> > > > #    XE E1B Eu E E E E
 0 
 
 
 

(
 *
 
	
 
 
 




 

 #	


 <
 4f6J JK

 


 

 

 



 #
 ?6#78	

 

 
 
 
 
 
r'   )1r   r   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   re   r   r&   r   r9   r7   r   rh   CallableAnyrr   rx   r~   r   r(   r)   r   r'   r%   <module>r      s  
              
      A @ @ @ @ @ @ @ I I I I I I
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
            
 EDDDDDD	 
m\1	2 (	
 	   ,!L!L	7	8!L !L 	!L
 !L !L !L !LH@@	7	8@ @ 	@
 @ @ @ @ @F))	7	8) ) v34	)
 	) ) ) )`222 v342 
7	8	2
 
|S012 2 2 2j''' #' "	'
 ' ' ' ' '@ #  	
   
   6!!! v34!  	!
 ! ! ! ! !HVL VL VL VL VL] VL VL VLrJ
 J
 J
 J
 J
L J
 J
 J
 J
 J
r'   