
    nhV                     |   d dl Z d dlZd dlmZmZ d dlmZ d dlmZm	Z	m
Z
 d dlmZmZmZ d dlmZmZ d dlmZmZmZm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# ddl$m%Z% ddl&m'Z'm(Z( ddl)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0 ddl1m2Z2 ddl3m4Z4 dZ5 G d de4      Z6 G d de4      Z7 G d de4      Z8 G d de4      Z9y)    N)InvalidSignature
InvalidTag)default_backend)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is_pem_format
is_ssh_keylong_to_base64   )get_random_bytes)Keyc                       e Zd Zej                  Zej
                  Zej                  ZefdZd Z	d Z
d Zd Zd Zd Zd Zd	 Zd
 Zd Zy)CryptographyECKeyc                 ^   |t         j                  vrt        d|z        t         j                  | j                  t         j
                  | j                  t         j                  | j                  ij                  |      | _
        || _        || _        t        |d      st        |d      r|| _        y t        |d      r|j                         j!                  d      }t#        |t$              r| j'                  |      | _        y t#        |t(              r|j+                  d      }t#        |t,              r$	 	 t/        || j                               }|| _        y t        d|z        # t0        $ r t3        |d | j                               }Y =w xY w# t4        $ r}t        |      d }~ww xY w)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	algorithmr=   es        t/var/www/pru.catia.catastroantioquia-mas.com/tasa/lib/python3.12/site-packages/jose/backends/cryptography_backend.py__init__zCryptographyECKey.__init__&   sw   JMM)G)STT dkkdkkdkk
 #i.	 	
 $$8!3'73+H #D3!**,%%g.Cc4  $ 1 1# 6Dc3**W%Cc5!"h-c43L3L3NOC !$D>DEE " h.sT4KdKdKfgCh "qk!"s0   8E( (%FF FF 	F,F''F,c                    j                  d      dk(  st        dj                  d      z        t        fddD              st        d      t        j                  d            }t        j                  d            }t        j
                  t        j                  t        j                  d	d
      }t	        j                  || |             }dv rOt        j                  d            }t	        j                  ||      }|j                  | j                               S |j                  | j                               S )Nktyr3   z0Incorrect key type. Expected: 'EC', Received: %sc              3   &   K   | ]  }|v  
 y wN .0kjwk_dicts     rN   	<genexpr>z1CryptographyECKey._process_jwk.<locals>.<genexpr>W   s     <Q1=<   )xycrvz Mandatory parameters are missingr[   r\   )P-256P-384P-521r]   d)r:   r   allr   r	   	SECP256R1	SECP384R1	SECP521R1EllipticCurvePublicNumbersEllipticCurvePrivateNumbersprivate_keyr=   
public_key)rJ   rX   r[   r\   curvepublicra   privates    `      rN   rC   zCryptographyECKey._process_jwkS   s   ||E"d*MPXP\P\]bPccdd<*;<<=>>8<<,-8<<,-\\\\\\
 5/	 ..q!UW=(?x||C01A44Q?G&&t'@'@'BCC$$T%>%>%@AA    c                 l    t        t        j                  | j                  j                  dz              S )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ceilr?   key_sizerJ   s    rN   _sig_component_lengthz'CryptographyECKey._sig_component_lengthl   s)    
 499T..77#=>??rm   c                 p    t        |      \  }}| j                         }t        ||      t        ||      z   S )z4Convert signature from DER encoding to RAW encoding.)r   rt   r   )rJ   der_signaturerscomponent_lengths        rN   _der_to_rawzCryptographyECKey._der_to_raws   s:    #M21557A/0<CS3TTTrm   c                     | j                         }t        |      t        d|z        k7  rt        d      |d| }||d }t        j	                  |d      }t        j	                  |d      }t        ||      S )z4Convert signature from RAW encoding to DER encoding.r   zInvalid signatureNbig)rt   lenro   rG   
from_bytesr   )rJ   raw_signaturery   r_bytess_bytesrw   rx   s          rN   _raw_to_derzCryptographyECKey._raw_to_dery   s~    557}Q)9%9!::011 1!12 0 12NN7E*NN7E*#Aq))rm   c                    | j                   j                  dz  | j                  j                  j                  kD  rEt        d| j                  j                  j                  d| j                   j                  z  fz        | j                  j                  |t        j                  | j                                     }| j                  |      S )N   z1this curve (%s) is too short for your digest (%d))r;   digest_sizer?   rj   rr   	TypeErrornamesignr	   ECDSArz   )rJ   msg	signatures      rN   r   zCryptographyECKey.sign   s    ==$$q(4+<+<+B+B+K+KK'*.*;*;*A*A*F*FDMMLeLeHe)fg  %%**30IJ		**rm   c                     	 | j                  |      }| j                  j                  ||t        j                  | j                                      y# t        $ r Y yw xY w)NTF)r   r?   verifyr	   r   r;   rH   )rJ   r   sigr   s       rN   r   zCryptographyECKey.verify   sS    	((-I$$YRXXdmmo5NO 		s   AA 	AAc                 .    t        | j                  d      S Nr,   r>   r?   rs   s    rN   	is_publiczCryptographyECKey.is_public       t((.99rm   c                     | j                         r| S | j                  | j                  j                         | j                        S rS   r   	__class__r?   ri   r<   rs   s    rN   ri   zCryptographyECKey.public_key   5    >>K~~d//::<dooNNrm   c                    | j                         rO| j                  j                  t        j                  j
                  t        j                  j                        }|S | j                  j                  t        j                  j
                  t        j                  j                  t        j                               }|S )Nencodingformatr   r   encryption_algorithm)r   r?   r,   r   EncodingPEMPublicFormatSubjectPublicKeyInfor-   PrivateFormatTraditionalOpenSSLNoEncryption)rJ   pems     rN   r.   zCryptographyECKey.to_pem   s    >>##00&//33M<V<V<k<k 1 C J--"++// ..AA!.!;!;!= . 

 
rm   c                    | j                         s| j                  j                         }n| j                  }dddd| j                  j                  j                     }| j                  j                  j
                  dz   dz  }| j                  d|t        |j                         j                  |      j                  d	      t        |j                         j                  |      j                  d	      d
}| j                         sC| j                  j                         j                  }t        ||      j                  d	      |d<   |S )Nr^   r_   r`   )	secp256r1	secp384r1	secp521r1   r   r3   )sizeASCII)algrQ   r]   r[   r\   ra   )r   r?   ri   rj   r   rr   r<   r$   public_numbersr[   r@   r\   private_numbersprivate_value)rJ   ri   r]   rr   datar   s         rN   to_dictz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&}8DKKGTDIrm   N)__name__
__module____qualname__r   r5   r7   r9   r   rO   rC   rt   rz   r   r   r   r   ri   r.   r   rT   rm   rN   r)   r)   !   s]    ]]F]]F]]F<K +FZB2@U
*+:O
rm   r)   c                      e Zd Zej                  Zej
                  Zej                  Z ej                         Z	 ej                   ej                   ej                                ej                         d      Z ej                   ej                   ej                                ej                         d      ZefdZd Zd Zd Zd Zd Zd Zdd	Zd
 Zd Zd Zy)CryptographyRSAKeyNc                 4   |t         j                  vrt        d|z        t         j                  | j                  t         j
                  | j                  t         j                  | j                  ij                  |      | _
        || _        t         j                  | j                  t         j                  | j                  t         j                  | j                  ij                  |      | _        || _        t#        |d      rt#        |d      st#        |d      r|| _        y t'        |t(              r| j+                  |      | _        y t'        |t,              r|j/                  d      }t'        |t0              rE	 |j3                  d      r| j5                  |       y 	 t7        || j!                               | _        y t        d|z        # t8        $ r$ t;        |d | j!                               | _        Y y w xY w# t<        $ r}t        |      d }~ww xY w)	Nr+   r,   r   r-   r/   s   -----BEGIN CERTIFICATE-----r0   z'Unable to parse an RSA_JWK from key: %s)r   RSAr   RS256r5   RS384r7   RS512r9   r:   r;   r<   RSA1_5RSA_OAEPRSA_OAEP_256r
   r=   r>   r?   rA   rB   rC   rD   rE   rF   
startswith_process_certr   rG   r   rH   rI   s        rN   rO   zCryptographyRSAKey.__init__   s   JNN*G)STT dkkdkkdkk
 #i.	 	
 $ t{{##T%6%6
 #i.	 	 %9! C(WS:J-KPWX[]lPm #Dc4  $ 1 1# 6Dc3**W%Cc5!
">>"@A&&s+v(;CAZAZA\(]D%
 @3FGG " v(<S4Y]YrYrYt(uD% 	v "qk!"s6   <"G>  G *G;8G> :G;;G> >	HHHc           	         j                  d      dk(  st        dj                  d      z        t        j                  dd            }t        j                  d            }t        j                  ||      }dvr|j                  | j                               S t        j                  d            }g d}t        fd	|D              rft        fd
|D              st        d      t        d         }t        d         }t        d         }	t        d         }
t        d         }n\t        j                  |||      \  }}t        j                  ||      }	t        j                  ||      }
t        j                  ||      }t        j                  ||||	|
||      }|j                  | j                               S )NrQ   r   z1Incorrect key type. Expected: 'RSA', Received: %srM      nra   )pqdpdqqic              3   &   K   | ]  }|v  
 y wrS   rT   rU   s     rN   rY   z2CryptographyRSAKey._process_jwk.<locals>.<genexpr>  s     7Q1=7rZ   c              3   &   K   | ]  }|v  
 y wrS   rT   rU   s     rN   rY   z2CryptographyRSAKey._process_jwk.<locals>.<genexpr>  s     ?Q1=?rZ   z2Precomputed private key parameters are incomplete.r   r   r   r   r   )r:   r   r   r   RSAPublicNumbersri   r=   anyrb   rsa_recover_prime_factorsrsa_crt_dmp1rsa_crt_dmq1rsa_crt_iqmpRSAPrivateNumbersrh   )rJ   rX   rM   r   rk   ra   extra_paramsr   r   r   r   r   rl   s    `           rN   rC   z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?,?? ##WXX"8C=1"8C=1#HTN3#HTN3#HTN3 44Q1=1%%a+%%a+%%a+++Aq!RRHG&&t'@'@'BCCrm   c                 b    t        || j                               }|j                         | _        y rS   )r   r=   ri   r?   )rJ   rK   s     rN   r   z CryptographyRSAKey._process_cert,  s&    'T-F-F-HINN,rm   c                     	 | j                   j                  |t        j                         | j	                               }|S # t
        $ r}t        |      d }~ww xY wrS   )r?   r   r
   PKCS1v15r;   rH   r   )rJ   r   r   rM   s       rN   r   zCryptographyRSAKey.sign0  sT    	))..sG4D4D4FXI   	1+	s   =A 	A
AAc                    | j                         st        j                  d       	 | j                         j                  j                  ||t        j                         | j                                y# t        $ r Y yw xY w)NzKAttempting to verify a message with a private key. This is not recommended.TF)
r   warningswarnri   r?   r   r
   r   r;   r   )rJ   r   r   s      rN   r   zCryptographyRSAKey.verify7  sg    ~~MMjk	OO**11#sG<L<L<NPTP]P]P_` 		s   AA4 4	B ?B c                 .    t        | j                  d      S r   r   rs   s    rN   r   zCryptographyRSAKey.is_publicA  r   rm   c                     | j                         r| S | j                  | j                  j                         | j                        S rS   r   rs   s    rN   ri   zCryptographyRSAKey.public_keyD  r   rm   c                 X   | j                         r|dk(  rt        j                  j                  }n.|dk(  rt        j                  j                  }nt        d|z        | j                  j                  t        j                  j                  |      }|S |dk(  rt        j                  j                  }n.|dk(  rt        j                  j                  }nt        d|z        | j                  j                  t        j                  j                  |t        j                               S )NPKCS8PKCS1zInvalid format specified: %rr   r   )r   r   r   r   r   rG   r?   r,   r   r   r   r   r   r-   r   )rJ   
pem_formatfmtr   s       rN   r.   zCryptographyRSAKey.to_pemI  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 / 
 	
rm   c                 `   | j                         s| j                  j                         }n| j                  }| j                  dt	        |j                         j                        j                  d      t	        |j                         j                        j                  d      d}| j                         st|j                  t	        | j                  j                         j                        j                  d      t	        | j                  j                         j                        j                  d      t	        | j                  j                         j                        j                  d      t	        | j                  j                         j                        j                  d      t	        | j                  j                         j                        j                  d      t	        | j                  j                         j                         j                  d      d       |S )Nr   r   )r   rQ   r   rM   )ra   r   r   r   r   r   )r   r?   ri   r<   r$   r   r   r@   rM   updater   ra   r   r   dmp1dmq1iqmp)rJ   ri   r   s      rN   r   zCryptographyRSAKey.to_dict_  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	 rm   c                     	 | j                   j                  || j                        }|S # t        $ r}t	        |      d }~ww xY wrS   )r?   encryptr
   rH   r   )rJ   key_datawrapped_keyrM   s       rN   wrap_keyzCryptographyRSAKey.wrap_keyz  sG    	++33HdllKK   	1+	s   &* 	A>Ac                     	 | j                   j                  || j                        }|S # t        $ r}t	        |      d }~ww xY wrS   )r?   decryptr
   rH   r   )rJ   r   unwrapped_keyrM   s       rN   
unwrap_keyzCryptographyRSAKey.unwrap_key  sC    	 --55k4<<PM   	1+	s   '* 	A>A)r   )r   r   r   r   r5   r7   r9   r
   r   r   OAEPMGF1SHA1r   r   r   rO   rC   r   r   r   r   ri   r.   r   r   r   rT   rm   rN   r   r      s    ]]F]]F]]FWFw||LGLL7MH7<<]V]]_ =}v}}PTUL<K -H^'DR-:O

,6rm   r   c                   l   e Zd Zej                  ej
                  ej                  ej                  fZej                  ej                  ej                  ej                  fZej                  ej                  ej                   ej"                  ej$                  fZej(                  fZej,                  fZej                  ej                  ej                   fZej                  ej4                  ej                  ej4                  ej                  ej4                  ej"                  ej6                  ej(                  ej6                  ej,                  ej6                  ej                  ej6                  ej                  ej6                  ej$                  ej6                  ej
                  ej4                  ej                  ej4                  ej                  ej4                  ej                  dej                  dej                   diZej<                  j>                  dz  ddZ d Z!d Z"ddZ#ddZ$d	 Z%d
 Z&y)CryptographyAESKeyNr      )CBCGCMc                    |t         j                  vrt        d|z        |t         j                  j	                  t         j
                        vrt        d|z        || _        | j                  j                  | j                        | _	        || j                  v rt        |      dk7  rt        d|       || j                  v rt        |      dk7  rt        d|       || j                  v rt        |      dk7  rt        d|       || j                  v rt        |      d	k7  rt        d
|       || j                  v rt        |      dk7  rt        d|       || _        y )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 0   zKey must be 384 bit for alg @   zKey must be 512 bit for alg )r   AESr   	SUPPORTEDunion
AES_PSEUDOr<   MODESr:   _modeKEY_128r}   KEY_192KEY_256KEY_384KEY_512_keyrJ   rK   rL   s      rN   rO   zCryptographyAESKey.__init__  sB   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	rm   c                 L    | j                   dt        | j                        d}|S )Noctr   rQ   rW   )r<   r    r  )rJ   r   s     rN   r   zCryptographyAESKey.to_dict  s!    u;KDII;VWrm   c                 L   t        |      }	 | j                  j                  | j                  j                  t
        j                  j                        }t        |      }| j                  |      }|j                  dk(  rIt        j                  | j                        }|j                  |||      }|d t        |      dz
   }|dd  }	nt        t        j                  | j                        |t                     }|j!                         }
t#        t
        j                  j                        j%                         }|j'                  |      }||j)                         z  }|
j'                  |      |
j)                         z   }d }	|||	fS # t*        $ r}t-        |      d }~ww xY w)Nr   r   ir2   )r!   IV_BYTE_LENGTH_MODE_MAPr:   r  r   r   r   
block_sizer&   r   AESGCMr  r   r}   r   r   	encryptorr   padderr   finalizerH   r   )rJ   
plain_textaadiv_byte_lengthivmodeciphercipher_text_and_tagcipher_textauth_tagr  r  padded_datarM   s                 rN   r   zCryptographyAESKey.encrypt  sY   ":.
	!99==djjooz~~OhOhiN!.1B::b>DyyE!TYY/&,nnRS&I#12QC8K4Lr4QR.st4
tyy 94IZ[",,.	z~~889@@B$mmJ7v00'..{;i>P>P>RR{H,, 	1+	s   E<F
 
	F#FF#c                    t        |      }	 t        |      }| j                  |      }|j                  dk(  rG|t        d      t	        j
                  | j                        }||z   }	 |j                  |||      }|S t        t        j                  | j                        |t                     }|j                         }	|	j                  |      }
|
|	j!                         z  }
t#        t        j                  j$                        j'                         }|j                  |
      }||j!                         z  }|S # t        $ r t        d      w xY w# t(        $ r}t        |      d }~ww xY w)Nr   ztag cannot be NonezInvalid JWE Auth Tagr  )r!   r  r   rG   r   r  r  r   r   r   r   r   r   r   	decryptorr   r  r   r  unpadderrH   )rJ   r  r  r  tagr  r  r  r  r   padded_plain_textr!  rM   s                rN   r   zCryptographyAESKey.decrypt  sR   #K0	r"B::b>DyyE!;$%9::TYY/&1C&7#;!'4G!MJ   
tyy 94IZ[",,.	$-$4$4[$A!!Y%7%7%99! !:!:;DDF%__->?
h//11
 " ;"#9::;  	1+	s7   AE *D= =E ?B=E =EE 	E.E))E.c                 Z    t        |      }t        | j                  |t                     }|S rS   )r!   r   r  r   )rJ   r   r  s      rN   r   zCryptographyAESKey.wrap_key  s'     *"499h8IJrm   c                     t        |      }	 t        | j                  |t                     }|S # t        $ r}t        |      d }~ww xY wrS   )r!   r   r  r   r   r   )rJ   r   r  causes       rN   r   zCryptographyAESKey.unwrap_key  sJ    #K0	"'		;@QRJ   	"5/!	"s   . 	AAArS   )NNN)'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   r   r   r  r   r   r  r  rO   r   r   r   r   r   rT   rm   rN   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$ '1nn&?&?1&DWU,.6
rm   r   c                       e Zd ZdZej
                   ej                         ej                   ej                         ej                   ej                         iZd Zd Zd Zd Zd Zy)CryptographyHMACKeyzf
    Performs signing and verification operations using HMAC
    and the specified hash function.
    c                    |t         j                  vrt        d|z        || _        | j                  j                  |      | _        t        |t              r| j                  |      | _
        y t        |t              st        |t              st        d      t        |t              r|j                  d      }t        |      st        |      rt        d      || _
        y )Nr+   z+Expecting a string- or bytes-formatted key.r/   zdThe specified key is an asymmetric key or x509 certificate and should not be used as an HMAC secret.)r   HMACr   r<   ALG_MAPr:   	_hash_algrA   rB   rC   r?   rD   rF   rE   r"   r#   r	  s      rN   rO   zCryptographyHMACKey.__init__  s    JOO+G)STT#)))4c4  $ 1 1# 6D#s#JsE,BHIIc3**W%CC9 
  rm   c                     |j                  d      dk(  st        d|j                  d      z        |j                  d      }|j                  d      }t        |      }t	        |      }|S )NrQ   r  z1Incorrect key type. Expected: 'oct', Received: %srW   r/   )r:   r   rE   rF   r   )rJ   rX   rW   s      rN   rC   z CryptographyHMACKey._process_jwk'  se    ||E"e+NQYQ]Q]^cQddeeLLHHW!HQrm   c                 f    | j                   dt        | j                        j                  d      dS )Nr  r   r  )r<   r    r?   r@   rs   s    rN   r   zCryptographyHMACKey.to_dict2  s/    ??!$"3"34;;GD
 	
rm   c                     t        |      }t        j                  | j                  | j                  t                     }|j                  |       |j                         }|S )Nr  )r!   r   r:  r?   r<  r   r   r  )rJ   r   hr   s       rN   r   zCryptographyHMACKey.sign9  sG    C IId''ARS	JJL	rm   c                    t        |      }t        |      }t        j                  | j                  | j                  t                     }|j                  |       	 |j                  |       d}|S # t        $ r d}Y |S w xY w)Nr  TF)	r!   r   r:  r?   r<  r   r   r   r   )rJ   r   r   r@  verifieds        rN   r   zCryptographyHMACKey.verify@  sw    C C IId''ARS		HHSMH    	H	s   A2 2B BN)r   r   r   __doc__r   HS256r   r5   HS384r7   HS512r9   r;  rO   rC   r   r   r   rT   rm   rN   r8  r8    sd    
 *2B2BMFMMOU_UeUegtgmgtgtgvwG 0	

rm   r8  ):rp   r   cryptography.exceptionsr   r   cryptography.hazmat.backendsr   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"   r#   r$    r&   baser'   _bindingr)   r   r   r8  rT   rm   rN   <module>rX     s      @ 8 F F F F f R R ^ ^ 8 b + 7 " +    g gT| |~z zzC# Crm   