def test_crypto_get_compact_deprecated_rsa(self, do_request):
        utils.silently_remove('./rsa-test.public_key.pem')
        utils.silently_remove('./rsa-test.private_key.pem')

        with open("./rsa-test.private_key.pem", 'wb') as f:
            f.write(oss2.to_bytes(private_key_compact))

        with open("./rsa-test.public_key.pem", 'wb') as f:
            f.write(oss2.to_bytes(public_key_compact))

        content = b'a' * 1024 * 1024
        encrypted_rsa_path = "tests/deprecated_encrypted_1MB_a_rsa"
        encrypted_meta_rsa_path = "tests/deprecated_encrypted_1MB_a_meta_rsa.json"

        with open(encrypted_rsa_path, 'rb') as f:
            encrypted_content = f.read()

        with open(encrypted_meta_rsa_path, 'r') as f:
            meta = json.loads(f.read())

        key = random_string(10)
        provider = oss2.LocalRsaProvider(dir='./', key='rsa-test')

        request_text, response_text = make_get_encrypted_object_compact_deprecated(
            key, encrypted_content, meta)

        req_info = unittests.common.mock_response(do_request, response_text)
        result = unittests.common.bucket(provider).get_object(key)

        self.assertRequest(req_info, request_text)
        self.assertEqual(result.read(), content)

        utils.silently_remove('./rsa-test.public_key.pem')
        utils.silently_remove('./rsa-test.private_key.pem')
Ejemplo n.º 2
0
    def setUp(self):
        oss2.defaults.connect_timeout = self.default_connect_timeout
        oss2.defaults.multipart_threshold = self.default_multipart_num_threads
        oss2.defaults.multipart_num_threads = random.randint(1, 5)

        oss2.defaults.multiget_threshold = self.default_multiget_threshold
        oss2.defaults.multiget_part_size = self.default_multiget_part_size
        oss2.defaults.multiget_num_threads = random.randint(1, 5)

        global OSS_AUTH_VERSION
        OSS_AUTH_VERSION = os.getenv('OSS_TEST_AUTH_VERSION')
        
        self.bucket = oss2.Bucket(oss2.make_auth(OSS_ID, OSS_SECRET, OSS_AUTH_VERSION), OSS_ENDPOINT, OSS_BUCKET)

        try:
            self.bucket.create_bucket()
        except:
            pass

        self.rsa_crypto_bucket = oss2.CryptoBucket(oss2.make_auth(OSS_ID, OSS_SECRET, OSS_AUTH_VERSION), OSS_ENDPOINT, OSS_BUCKET,
                                             crypto_provider=oss2.LocalRsaProvider())

        self.kms_crypto_bucket = oss2.CryptoBucket(oss2.make_auth(OSS_ID, OSS_SECRET, OSS_AUTH_VERSION), OSS_ENDPOINT, OSS_BUCKET,
                                             crypto_provider=oss2.AliKMSProvider(OSS_ID, OSS_SECRET, OSS_REGION, OSS_CMK))

        self.key_list = []
        self.temp_files = []
    def test_crypto_put_from_file(self, do_request):
        size = 512 * 2 - 1
        content = unittests.common.random_bytes(size)
        filename = self.make_tempfile(content)

        request_text, response_text = make_put_encrypted_object(content)
        req_info = unittests.common.mock_response(do_request, response_text)

        with patch.object(oss2.utils,
                          'random_aes256_key',
                          return_value=unittests.common.fixed_aes_key,
                          autospect=True):
            with patch.object(oss2.utils,
                              'random_counter',
                              return_value=unittests.common.fixed_aes_start,
                              autospect=True):
                result = unittests.common.bucket(
                    oss2.LocalRsaProvider(
                        key='oss-test')).put_object_from_file(
                            'sjbhlsgsbecvlpbf.txt', filename)

                self.assertRequest(req_info, request_text)
                self.assertEqual(result.request_id, '566B6BE93A7B8CFD53D4BAA3')
                self.assertEqual(result.etag,
                                 'D80CF0E5BE2436514894D64B2BCFB2AE')
    def test_crypto_put_bytes(self, do_request):
        content = unittests.common.random_bytes(1024 * 1024 - 1)

        request_text, response_text = make_put_encrypted_object(content)
        req_info = unittests.common.mock_response(do_request, response_text)

        with patch.object(oss2.utils,
                          'random_aes256_key',
                          return_value=unittests.common.fixed_aes_key,
                          autospect=True):
            with patch.object(oss2.utils,
                              'random_counter',
                              return_value=unittests.common.fixed_aes_start,
                              autospect=True):

                unittests.common.bucket(
                    oss2.LocalRsaProvider(key='oss-test')).put_object(
                        'sjbhlsgsbecvlpbf.txt',
                        content,
                        headers={
                            'content-md5': oss2.utils.md5_string(content),
                            'content-length': str(len(content))
                        })

                self.assertRequest(req_info, request_text)
    def test_crypto_get_with_incomplete_crypto_meta(self, do_request):
        content = unittests.common.random_bytes(1023)

        request_text, response_text = make_get_encrypted_object(
            content, missing_alg=True)

        req_info = unittests.common.mock_response(do_request, response_text)

        self.assertRaises(
            oss2.exceptions.InconsistentError,
            unittests.common.bucket(
                oss2.LocalRsaProvider(key='oss-test')).get_object,
            'sjbhlsgsbecvlpbf')
    def test_crypto_get_with_progress(self, do_request):
        content = unittests.common.random_bytes(1024 * 1024 + 1)

        request_text, response_text = make_get_encrypted_object(content)
        req_info = unittests.common.mock_response(do_request, response_text)

        self.previous = -1
        result = unittests.common.bucket(
            oss2.LocalRsaProvider(key='oss-test')).get_object(
                'sjbhlsgsbecvlpbf', progress_callback=self.progress_callback)

        self.assertRequest(req_info, request_text)

        content_read = unittests.common.read_file(result)

        self.assertEqual(self.previous, len(content))
        self.assertEqual(len(content_read), len(content))
        self.assertEqual(content_read, content)
    def test_crypto_operation_exception(self, do_request):
        content = unittests.common.random_bytes(1024 * 1024 + 1)

        request_text, response_text = make_get_encrypted_object(
            content, oss2.api._make_range_string((1024, 2047)))
        req_info = unittests.common.mock_response(do_request, response_text)

        bucket = unittests.common.bucket(oss2.LocalRsaProvider(key='oss-test'))

        key = 'sjbhlsgsbecvlpbf'

        self.assertRaises(oss2.exceptions.ClientError, bucket.get_object, key,
                          {'range': 'bytes=1024-2047'})

        self.assertRaises(
            oss2.exceptions.ClientError, oss2.CryptoBucket,
            oss2.Auth('fake-access-key-id', 'fake-access-key-secret'),
            'http://oss-cn-hangzhou.aliyuncs.com', '123', None)
    def test_crypto_get_to_file(self, do_request):
        content = unittests.common.random_bytes(1023)

        request_text, response_text = make_get_encrypted_object(content)
        req_info = unittests.common.mock_response(do_request, response_text)

        filename = self.tempname()

        result = unittests.common.bucket(oss2.LocalRsaProvider(
            key='oss-test')).get_object_to_file('sjbhlsgsbecvlpbf', filename)

        self.assertRequest(req_info, request_text)

        self.assertEqual(result.request_id, '566B6BE93A7B8CFD53D4BAA3')
        self.assertEqual(result.content_length, len(content))
        self.assertEqual(os.path.getsize(filename), len(content))

        with open(filename, 'rb') as f:
            self.assertEqual(content, oss2.to_bytes(f.read()))
    def test_crypto_get_to_file_with_progress(self, do_request):
        size = 1024 * 1024 + 1
        content = unittests.common.random_bytes(size)

        request_text, response_text = make_get_encrypted_object(content)
        req_info = unittests.common.mock_response(do_request, response_text)

        filename = self.tempname()

        self.previous = -1
        unittests.common.bucket(
            oss2.LocalRsaProvider(key='oss-test')).get_object_to_file(
                'sjbhlsgsbecvlpbf',
                filename,
                progress_callback=self.progress_callback)

        self.assertRequest(req_info, request_text)

        self.assertEqual(self.previous, size)
        self.assertEqual(os.path.getsize(filename), size)
        with open(filename, 'rb') as f:
            self.assertEqual(oss2.to_bytes(content), f.read())
    def test_crypto_get(self, do_request):
        content = unittests.common.random_bytes(1023)

        request_text, response_text = make_get_encrypted_object(content)

        req_info = unittests.common.mock_response(do_request, response_text)

        result = unittests.common.bucket(oss2.LocalRsaProvider(
            key='oss-test')).get_object('sjbhlsgsbecvlpbf')

        result1 = unittests.common.bucket().get_object('sjbhlsgsbecvlpbf',
                                                       byte_range=(None, None))

        self.assertRequest(req_info, request_text)

        self.assertNotEqual(result1.read(), content)
        self.assertEqual(result.read(), content)
        self.assertEqual(
            int(result.headers['x-oss-meta-unencrypted-content-length']),
            len(content))
        self.assertEqual(result.status, 200)
        self.assertEqual(result.request_id, '566B6BE93A7B8CFD53D4BAA3')
        self.assertEqual(result.object_type, 'Normal')
        self.assertEqual(result.content_type, 'text/plain')
        self.assertEqual(result.etag, 'D80CF0E5BE2436514894D64B2BCFB2AE')
        self.assertEqual(result.last_modified, 1449880553)
        self.assertEqual(
            result.headers['x-oss-meta-oss-crypto-key'],
            'BPNkLSi+htvzrU/d52S9SVHmDFYwKZoepPGRBZ8flm/Wh8oXaRSyVx9vsrQR2aNfy2m5DuNpkIcRP8GUmO7g/RBpl7kU/xJiYjZSjY0dMDjjSB2K0iuX0iHjACFqYsGq7jqYQnSzL03kYPP1Nu8XJFCAax/KLRr8lf0eAPoDLgqo/rIqyI8RkSPgJO29X4Dm2XBayShmvjR5O/TF95N8ql3g+iit4JQovPmlFvu6RFtp8FJpDbS41+VVP7s6c4yfyZoio9VfYJKSKhEZBvlCo44PbY9MFUUH4rYvrwJXCgWmVbfo35gzSF1fRXsaYhB8OIBTJlHxeFUUr/lZv0kuNw=='
        )
        self.assertEqual(
            result.headers['x-oss-meta-oss-crypto-start'],
            'HkRvX7uxN+ASy8eu2mNVayUqElwhde+cp9zw1F4ywBku7sgsphksItRHFySxAwesbAsy7U0cMcQvBt0hHIXIVDJl47GXubbGk/oHuwv58Rry/POdjJ+hbFOoTS0is5GNfyNw7ZjmgxuQ54Yv9gzYCxMpyZ1g35miKi8slikyzkFnkrOQSCHm3T7BF+hDylYQVvrPximdvW6UmHYZWXMzwx4gD43YvXlpfiafqXnkY7lBliIYmP0Ty6a7kwpeKHdkvwIa6wER+Cv0+qiq+KPJFf+iJ+9hx+Z6HWCyV6S+blQqK4ZNbKHApAkQJHAeQb5Cf4SZAQehU8ewwxwzxYn5bw=='
        )
        self.assertEqual(result.headers['x-oss-meta-oss-cek-alg'],
                         'AES/GCM/NoPadding')
    def test_crypto_put_bytes_with_progress(self, do_request):
        self.previous = -1

        content = unittests.common.random_bytes(1024 * 1024 - 1)

        request_text, response_text = make_put_encrypted_object(content)
        req_info = unittests.common.mock_response(do_request, response_text)

        with patch.object(oss2.utils,
                          'random_aes256_key',
                          return_value=unittests.common.fixed_aes_key,
                          autospect=True):
            with patch.object(oss2.utils,
                              'random_counter',
                              return_value=unittests.common.fixed_aes_start,
                              autospect=True):

                unittests.common.bucket(
                    oss2.LocalRsaProvider(key='oss-test')).put_object(
                        'sjbhlsgsbecvlpbf.txt',
                        content,
                        progress_callback=self.progress_callback)
                self.assertRequest(req_info, request_text)
                self.assertEqual(self.previous, len(content))