
    jn                     p    d dl Z d dlZd dl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  G d d      Zy)	    N)AESGCM)OAEPMGF1)RSAPublicNumbers)SHA1)default_backendc            	           e Zd ZdZdZdZddedededdfd	Zd
edefdZ	dede
fdZd Zdede
fdZdedede
de
fdZde
fdZdede
fdZd
ede
fdZy)	CseAmazon         jwk_nkey_idprovider_idreturnNc                 .    || _         || _        || _        y )N)_CseAmazon__jwkN_CseAmazon__keyId_CseAmazon__providerId)selfr   r   r   s       1C:\Users\Sxnti\OneDrive\Desktop\amz\amazon\cse.py__init__zCseAmazon.__init__   s    '    passwordc                 &   	 | j                  |      }| j                  |      }d|t        j                  |      j                  d      t        j                  |      j                  d      dS # t        $ r}dt        |      dcY d }~S d }~ww xY w)NTutf-8)statuspayloadencryptedPasswordencryptedPasswordCheckF)r   description)_CseAmazon__encryptMessagebase64	b64encodedecode	Exceptionstr)r   r   enc1enc2errors        r   encryptzCseAmazon.encrypt   s    
	@((2D((2D#%+%5%5d%;%B%B7%K*0*:*:4*@*G*G*P	   	@#CJ??	@s   A,A/ /	B8BBBsc                 \    t        j                  |ddt        |      dz  z
  dz  z  z         S )N=   )r#   urlsafe_b64decodelen)r   r,   s     r   __b64UrlDecodezCseAmazon.__b64UrlDecode!   s.    ''CAA
Na3G,H(HIIr   c                     t         j                  | j                  | j                        d      }t         j                  | j                  d      d      }t	        ||      j                  t                     S )NbigAQAB)int
from_bytes_CseAmazon__b64UrlDecoder   r   
public_keyr   )r   nes      r   __importPublicKeyzCseAmazon.__importPublicKey$   sW    NN4..t{{;UCNN4..v6>1%001BCCr   contextc           	         |st        j                  dd      S t        |j                               }t        j                  dt	        |            }|D ]o  \  }}|j                  d      |j                  d      }}|t        j                  dt	        |            |z   t        j                  dt	        |            z   |z   z  }q |S )N>Hr   r   )structpacksorteditemsr1   encode)r   r=   rC   resultkeyvaluekbvbs           r   __serializeEncryptionContextz&CseAmazon.__serializeEncryptionContext)   s    ;;tQ''w}}'T3u:.JCZZ(%,,w*?Bfkk$B025D#b'8RRUWWWF   r   encrypted_keyc                    |j                  d      }|j                  d      }t        j                  dt        |            |z   t        j                  dt        |            z   |z   t        j                  dt        |            z   |z   S )Nr   r?   )rD   r@   rA   r1   )r   r   r   rK   pbrH   s         r   __serializeEncryptedDataKeyz%CseAmazon.__serializeEncryptedDataKey3   s|    (]]7#KKc"g&+KKc"g&')+,KKc-0124AB	
r   c                     t        d      S )N   )bytes)r   s    r   __buildHeaderIvzCseAmazon.__buildHeaderIv<   s    Ryr   seqc                 \    t        j                  dd      t        j                  d|      z   S )Nz>Qr   >I)r@   rA   )r   rS   s     r   __buildFrameIvzCseAmazon.__buildFrameIv?   s#    {{4#fkk$&<<<r   c           	      p   t        j                  d      }t        j                  d      }| j                         }|j                  |t	        t        t                     t               d             }| j                  | j                  | j                  |      }t               }|j                  | j                         |j                  | j                         |j                  t        j                   d| j"                               |j                  |       |j                  | j%                  i              |j                  t        j                   dd             |j                  |       |j                  d       |j                  t        j                   dd             |j                  d	       |j                  t        j                   dt'        |      dz                t)        |      }t+        |      }	| j-                         }
|	j                  |
d
|      }|j/                  d      }| j1                  d      }t        j                   dd      }t        j                   dd      }t        j                   dt'        |            }|	j                  ||d
      }||
z   |z   |z   |z   |z   |z   |z   S )N   )	algorithm)mgfrY   labelr?   r      rU   r   rP   r   r   l    )osurandom_CseAmazon__importPublicKeyr+   r   r   r   %_CseAmazon__serializeEncryptedDataKeyr   r   	bytearrayappend_CseAmazon__VERSION_CseAmazon__TYPEextendr@   rA   _CseAmazon__ALGORITHM_ID&_CseAmazon__serializeEncryptionContextr1   rQ   r   _CseAmazon__buildHeaderIvrD   _CseAmazon__buildFrameIv)r   r   
message_iddata_keyr9   encrypted_data_keyedk_serializedheader
raw_headeraesgcm	header_ivheader_auth_tagpassword_bytesframe_ivfinal_frame_markerseq_num_bytescontent_len_bytesencrypted_contents                     r   __encryptMessagezCseAmazon.__encryptMessageB   s9   ZZ^
::b>++-
'//TDF+tvTJ

 99t||-?
 dnn%dkk"fkk$(;(;<=j!d77;<fkk$*+n%afkk$*+bfkk$H(9:;6]
!((*	 ..CD!1&&q)#[[z:D!,"KKc..AB"NN8^SI   	
   		
r   )zsi:md5)__name__
__module____qualname__rf   rc   rd   r'   r   dictr+   rQ   r8   r_   rg   r`   rh   r6   ri   r"    r   r   r
   r
   	   s    NIF(c (3 (S (PT (
@ @ @J J JD
D U 
s 
C 
X] 
bg 
 =# =% =3
 3
 3
r   r
   )r#   r]   r@   +cryptography.hazmat.primitives.ciphers.aeadr   1cryptography.hazmat.primitives.asymmetric.paddingr   r   -cryptography.hazmat.primitives.asymmetric.rsar   %cryptography.hazmat.primitives.hashesr   cryptography.hazmat.backendsr   r
   r~   r   r   <module>r      s&      > H J 6 8l
 l
r   