
    |                         d Z ddlmZ ddlmZ ddlmZ ddlmZ ddlZddlZddlZddl	Z	ddl
mZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ  G d de      Zy)z!Unit tests for encryption_helper.    )absolute_import)print_function)division)unicode_literalsN)CommandException)GsUtilUnitTestCase)SetBotoConfigForTest)#Base64Sha256FromBase64EncryptionKey)CryptoKeyWrapperFromKey)FindMatchingCSEKInBotoConfigc                   (    e Zd ZdZd Zd Zd Zd Zy)TestEncryptionHelperz+Unit tests for encryption helper functions.c           	      j   g }g }t        dd      D ]f  }	 |j                  t        j                  t	        j
                  d            j                  d             |j                  dd|z  ||dz
     f       h t        |      5  | j                  t        t        |d         t        j                               | j                  t        t        |d         t        j                               | j                  t        t        |d	         t        j                               d
d
d
       t!        |      }|j#                          t        |      5  | j                  t        t        |d         t        j                               | j                  t        t        |d         t        j                               d
d
d
       y
# t        $ rJ |j                  t        j                  t	        j
                  d            j                  d             Y w xY w# 1 sw Y   xY w# 1 sw Y   y
xY w)z?Tests a config file with the maximum number of decryption keys.   f          
GSUtilzdecryption_key%sr   c   d   N)rangeappendbase64encodebytesosurandomrstripAttributeErrorencodestringr	   assertIsNotNoner   r
   botoconfigassertIsNonelistpop)selfkeysboto_101_key_configiboto_100_key_configs        5platform/gsutil/gslib/tests/test_encryption_helper.pytestMaxDecryptionKeysz*TestEncryptionHelper.testMaxDecryptionKeys&   s   D1c]GF&&rzz"~6==eDE   '!+T!a%[
9;  
1	2

&1$q':DKKIJ 
&1$r(;T[[JK 
&1$s)<dkkKL 
3 23	1	2

&1$q':DKKIJ 
&1$r(;T[[JK	 
3	2'  GF''

27>>uEFG
 
3	2 
3	2s-   AGB HA+H)AHHH&)H2c           	         g }t        d      D ]I  }	 |j                  t        j                  t	        j
                  d            j                  d             K dd|d   fdd|d   fdd	|d
   fg}t        |      5  | j                  t        t        |d         t        j                               | j                  t        t        |d         t        j                               | j                  t        t        |d
         t        j                               ddd       y# t        $ rJ |j                  t        j                  t	        j
                  d            j                  d             Y iw xY w# 1 sw Y   yxY w)zATests a config file with non-sequential decryption key numbering.   r   r   r   decryption_key4   decryption_key1r   decryption_key2r   N)r   r   r   r   r   r   r   r   r   r	   r#   r   r
   r!   r"   r    )r&   r'   _boto_configs       r+   testNonSequentialDecryptionKeysz4TestEncryptionHelper.testNonSequentialDecryptionKeysI   sW   D1XGF&&rzz"~6==eDE  /a9/a9/a9;K 
k	* 
&1$q':DKKIJ 
&1$q':DKKIJ 
&1$q':DKKIJ 
+	*  GF''

27>>uEFG 
+	*s    AD%<B E;%AE87E8;Fc                     d}| j                  t              5 }t        |       d d d        | j                  dj                  j
                         y # 1 sw Y   0xY w)Nz,aP7KbmxLqDw1SWHeKvlfKOVgNRNNZc8L2sFz8ybLN===z>Configured encryption_key or decryption_key looked like a CSEKassertRaisesr   r   assertIn	exceptionreasonr&   invalid_keycms      r+   "testInvalidCSEKConfigurationRaisesz7TestEncryptionHelper.testInvalidCSEKConfigurationRaisesc   sJ    @K			+	,k* 
-MMH
 
-	,   AAc                     d}| j                  t              5 }t        |       d d d        | j                  dj                  j
                         y # 1 sw Y   0xY w)Nzmprojects/my-project/locations/some-location/keyRings/keyring/cryptoKeyWHOOPS-INVALID-RESOURCE-PORTION/somekeyz>Configured encryption_key or decryption_key looked like a CMEKr7   r<   s      r+   "testInvalidCMEKConfigurationRaisesz7TestEncryptionHelper.testInvalidCMEKConfigurationRaisesk   sQ    	;  
		+	,k* 
-MMH
 
-	,r@   N)__name__
__module____qualname____doc__r,   r5   r?   rB        r+   r   r   #   s    3!KFJ4rH   r   )rF   
__future__r   r   r   r   r   r   sixr!   gslib.exceptionr   "gslib.tests.testcase.unit_testcaser   gslib.tests.utilr	   gslib.utils.encryption_helperr
   r   r   r   rG   rH   r+   <module>rO      sC    ( & %  '  	 
  , A 1 M A FP- PrH   