
    \Ah*                     X   S SK r S SKrS SKrS SK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  S SKJr  S SKJrJr  S SKJrJr  \R0                  R3                  \R4                  5        \ R6                  " S	5      r\ R6                  " S
5      rSrS rSr S r!SS jr"S r# " S S\5      r$g)    N)PyAsn1Error)DecryptionError)rsa_private_key_pkcs1_to_pkcs8rsa_private_key_pkcs8_to_pkcs1rsa_public_key_pkcs1_to_pkcs8)Key)
ALGORITHMS)JWEErrorJWKError)base64_to_longlong_to_base64,308204BD020100300D06092A864886F70D010101050030z1.2.840.113549.1.1.1c                 0    U(       a  XU-  pU(       a  M  U $ )zCalculate the Greatest Common Divisor of a and b.

Unless b==0, the result will have the same sign as b (so that when
b is divided by it, the result comes out positive).
 )abs     `C:\Users\julio\Documents\inmobiliaria_backend\env\Lib\site-packages\jose/backends/rsa_backend.py_gcdr   &   s     q51 !H    i  c                    X!-  S-
  nUnUS-  S:X  a  US-  nUS-  S:X  a  M  SnSnU(       dr  U[         :  ah  UnXs:  aI  [        XgU 5      nUS:w  a+  XS-
  :w  a#  [        USU 5      S:X  a  [        US-   U 5      n	SnOUS-  nXs:  a  MI  US-  nU(       d  U[         :  a  Mh  U(       d  [        S5      e[	        U W	5      u  pUS:X  d   e[        X4SS9u  pX4$ )z
Compute factors p and q from the private exponent d. We assume that n has
no more than two factors. This function is adapted from code in PyCrypto.
      r   FTz2Unable to compute factors p and q from exponent d.)reverse)_MAX_RECOVERY_ATTEMPTSpowr   
ValueErrordivmodsorted)nedktottspottedr   kcandpqrs               r   _rsa_recover_prime_factorsr+   7   s    519D 	A
a%1*F a%1* G	A!44hqQ<DqyT!e_T1aA1E 1%FA h 	
Q !44 MNN!Q<DA6M61&$'DA6Mr   c                 X    [        U [        R                  5      nUR                  U5      $ N)RSAKeyr	   RS256to_pem)pemfmtkeys      r   pem_to_spkir4   b   s"    
j&&
'C::c?r   c                 ~    U R                  [        [        -   5      (       d  [        S5      eU [	        [        5      S $ )zLegacy RSA private key PKCS8-to-PKCS1 conversion.

.. warning::

    This is incorrect parsing and only works because the legacy PKCS1-to-PKCS8
    encoding was also incorrect.
zInvalid private key encodingN)
startswithLEGACY_INVALID_PKCS8_RSA_HEADERASN1_SEQUENCE_IDr   len)	pkcs8_keys    r   "_legacy_private_key_pkcs8_to_pkcs1r;   g   s<      ?BR RSS788S89;<<r   c                   `    \ rS rSrSrSrS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)r.   x   zSHA-256zSHA-384zSHA-512c                 $   U[         R                  ;  a  [        SU-  5      eU[         R                  ;   a"  U[         R                  :w  a  [        SU-  5      e[         R
                  U R                  [         R                  U R                  [         R                  U R                  0R                  U5      U l        X l        [        U[        5      (       a  U R!                  U5      U l        g [        U[$        R&                  [$        R(                  45      (       a  Xl        g [        U[*        5      (       a  UR-                  S5      n[        U[.        5      (       a&   [$        R&                  R1                  U5      U l        g [        SU-  5      e! [2         a     [$        R&                  R5                  U5      U l         g ! [2         a     [$        R(                  R1                  U5      U l         O! [2         a     [6        R8                  " US5      n [;        U5      nO! [<         a    [?        U5      n Of = f[$        R(                  R1                  USS9U l           g ! [2         a  n[        U5      eS nAff = ff = ff = f g f = f)Nz*hash_alg: %s is not a valid hash algorithmz+alg: %s is not supported by the RSA backendzutf-8s   PRIVATE KEYDERformatz'Unable to parse an RSA_JWK from key: %s) r	   RSAr   RSA_KWRSA1_5r/   SHA256RS384SHA384RS512SHA512gethash_alg
_algorithm
isinstancedict_process_jwk_prepared_keypyrsa	PublicKey
PrivateKeystrencodebytes
load_pkcs1r   load_pkcs1_openssl_pem	pyrsa_pemload_pemr   r   r;   )selfr3   	algorithmder	pkcs1_keyr!   s         r   __init__RSAKey.__init__}   s:   JNN*G)STT
)))i:;L;L.LH9TUU dkkdkkdkk
 #i.	 	
 $c4  !%!2!23!7DcEOOU-=-=>??!$c3**W%Cc5!!.%*__%?%?%D"( @3FGG)  ..).)O)OPS)TD&" ! " ..-2-=-=-H-H-M*% .."+"4"4S."ICT,J3,O	#. T -Os,S		T
 271A1A1L1LY_d1L1eD.   * ."*1+-...* '.s   !$F 
J$G
J	$G64J6
JI'H%$I'%H=	:I'<H=	=&I'#J	$J'
J	1I<	<J	JJ		JJc                 j  ^ TR                  S5      S:X  d  [        STR                  S5      -  5      e[        TR                  S5      5      n[        TR                  S5      5      nST;  a  [        R                  " X#S9$ [        TR                  S5      5      n/ SQn[        U4S	 jU 5       5      (       aW  [        U4S
 jU 5       5      (       d  [        S5      e[        TS   5      n[        TS   5      n[        R                  " X#XFUS9$ [        X2U5      u  pg[        R                  " X2XFUS9$ )NktyrB   z1Incorrect key type. Expected: 'RSA', Received: %sr!   r    r"   )r!   r    )r(   r)   dpdqqic              3   ,   >#    U  H	  oT;   v   M     g 7fr-   r   .0r&   jwk_dicts     r   	<genexpr>&RSAKey._process_jwk.<locals>.<genexpr>   s     7,Q=,   c              3   ,   >#    U  H	  oT;   v   M     g 7fr-   r   rg   s     r   rj   rk      s     ?,Q=,rl   z2Precomputed private key parameters are incomplete.r(   r)   )r!   r    r"   r(   r)   )r    r!   r"   r(   r)   )	rJ   r   r   rQ   rR   anyallrS   r+   )r[   ri   r!   r    r"   extra_paramsr(   r)   s    `      r   rO   RSAKey._process_jwk   s   ||E"e+NQYQ]Q]^cQddee8<<,-8<<,-h??Q,,x||C01A7L7,777?,??? ##WXX"8C=1"8C=1''!Aa@@1!:''!Aa@@r   c                 X    [         R                  " XR                  U R                  5      $ r-   )rQ   signrP   rK   )r[   msgs     r   rs   RSAKey.sign   s    zz#114==AAr   c                     U R                  5       (       d  [        R                  " S5         [        R                  " XU R
                  5        g! [        R                  R                   a     gf = f)NzKAttempting to verify a message with a private key. This is not recommended.TF)	is_publicwarningswarnrQ   verifyrP   pkcs1VerificationError)r[   rt   sigs      r   rz   RSAKey.verify   sT    ~~MMjk	LL4#5#56{{,, 		s   !A A0/A0c                 J    [        U R                  [        R                  5      $ r-   )rM   rP   rQ   rR   r[   s    r   rw   RSAKey.is_public   s    $,,eoo>>r   c                    [        U R                  [        R                  5      (       a  U $ U R	                  [        R                  " U R                  R
                  U R                  R                  S9U R                  5      $ )N)r    r!   )rM   rP   rQ   rR   	__class__r    r!   rL   r   s    r   
public_keyRSAKey.public_key   sY    d((%//::K~~eoo0B0B0D0DHZHZH\H\]_c_n_noor   c                 :   [        U R                  [        R                  5      (       am  U R                  R	                  SS9nUS:X  a"  [        U5      n[        R                  " USS9nU$ US:X  a  [        R                  " USS9nU$ [        SU< 35      eUS:X  a;  U R                  R	                  SS9n[        U5      n[        R                  " US	S9nU$ US:X  a0  U R                  R	                  SS9n[        R                  " US
S9nU$ [        SU< 35      e)Nr?   r@   PKCS8zPRIVATE KEY)
pem_markerPKCS1zRSA PRIVATE KEYzInvalid pem format specified: z
PUBLIC KEYzRSA PUBLIC KEY)
rM   rP   rQ   rS   
save_pkcs1r   rY   save_pemr   r   )r[   
pem_formatr]   	pkcs8_derr1   	pkcs1_ders         r   r0   RSAKey.to_pem   s.   d((%*:*:;;$$//u/=CW$:3?	((}M 
 w&((9JK 
 !#A*!PQQW$ ..999G	9)D	((|L 
 w&((3353A((9IJ 
 !#A*!PQQr   c           
         U R                  5       (       d  U R                  5       R                  nOU R                  nU R                  S[	        UR
                  5      R                  S5      [	        UR                  5      R                  S5      S.nU R                  5       (       Gd   UR                  [	        U R                  R                  5      R                  S5      [	        U R                  R                  5      R                  S5      [	        U R                  R                  5      R                  S5      [	        U R                  R                  5      R                  S5      [	        U R                  R                  5      R                  S5      [	        U R                  R                  5      R                  S5      S.5        U$ )NrB   ASCII)algrb   r    r!   )r"   r(   r)   rc   rd   re   )rw   r   rP   rL   r   r    decoder!   updater"   r(   r)   exp1exp2coef)r[   r   datas      r   to_dictRSAKey.to_dict   sN   ~~*88J++J ??
-44W=
-44W=	
 ~~KK'(:(:(<(<=DDWM'(:(:(<(<=DDWM'(:(:(<(<=DDWM(););)@)@AHHQ(););)@)@AHHQ(););)@)@AHHQ	 r   c                     U R                  5       (       d  [        R                  " S5        [        R                  " XR
                  5      nU$ )NzLAttempting to encrypt a message with a private key. This is not recommended.)rw   rx   ry   rQ   encryptrP   )r[   key_datawrapped_keys      r   wrap_keyRSAKey.wrap_key  s6    ~~MMklmmH.@.@Ar   c                      [         R                  " XR                  5      nU$ ! [         a  n[	        U5      eS nAff = fr-   )rQ   decryptrP   r   r
   )r[   r   unwrapped_keyr!   s       r   
unwrap_keyRSAKey.unwrap_key  s?    	!MM+7I7IJM   	1+	s    $ 
>9>)rL   rP   rK   Nr   )__name__
__module____qualname____firstlineno__rE   rG   rI   r_   rO   rs   rz   rw   r   r0   r   r   r   __static_attributes__r   r   r   r.   r.   x   sH    FFF0HdA8B?p
,6r   r.   r   )%binasciirx   rsarQ   rsa.pemr1   rY   pyasn1.errorr   r   jose.backends._asn1r   r   r   jose.backends.baser   jose.constantsr	   jose.exceptionsr
   r   
jose.utilsr   r   	SUPPORTEDremoveRSA_OAEP	unhexlifyr7   r8   RSA_ENCRYPTION_ASN1_OIDr   r   r+   r4   r;   r.   r   r   r   <module>r      s        $  
 # % . 5 
    J// 0"*"4"4#  %%d+ 0   (V
="cS cr   