| 95 | |
| 96 | |
| 97 | class BlobEncryptionSamples(): |
| 98 | def __init__(self, account): |
| 99 | self.account = account |
| 100 | |
| 101 | def run_all_samples(self): |
| 102 | |
| 103 | self.block_blob_service = self.account.create_block_blob_service() |
| 104 | self.page_blob_service = self.account.create_page_blob_service() |
| 105 | self.service_dict = {'block_blob': self.block_blob_service, |
| 106 | 'page_blob': self.page_blob_service} |
| 107 | self.put_encrypted_blob() |
| 108 | self.get_encrypted_blob() |
| 109 | self.get_encrypted_blob_key_encryption_key() |
| 110 | self.require_encryption() |
| 111 | self.alternate_key_algorithms() |
| 112 | |
| 113 | def _get_resource_reference(self, prefix): |
| 114 | return '{}{}'.format(prefix, str(uuid.uuid4()).replace('-', '')) |
| 115 | |
| 116 | def _get_blob_reference(self, prefix='blob'): |
| 117 | return self._get_resource_reference(prefix) |
| 118 | |
| 119 | def _create_encrypted_blob(self, container_name, type, prefix='blob'): |
| 120 | blob_name = self._get_resource_reference(prefix) |
| 121 | self.service_dict[type].create_blob_from_text(container_name, blob_name, u'hello world') |
| 122 | return blob_name |
| 123 | |
| 124 | def _create_container(self, prefix='container'): |
| 125 | container_name = self._get_resource_reference(prefix) |
| 126 | self.block_blob_service.create_container(container_name) |
| 127 | return container_name |
| 128 | |
| 129 | def _get_random_bytes(self, size): |
| 130 | rand = random.Random() |
| 131 | result = bytearray(size) |
| 132 | for i in range(size): |
| 133 | result[i] = rand.randint(0, 255) |
| 134 | return bytes(result) |
| 135 | |
| 136 | def put_encrypted_blob(self): |
| 137 | container_name = self._create_container() |
| 138 | block_blob_name = self._get_blob_reference(prefix='block_blob') |
| 139 | page_blob_name = self._get_blob_reference(prefix='page_blob') |
| 140 | |
| 141 | # KeyWrapper implements the key encryption key interface outlined |
| 142 | # in the create_blob_from_* documentation on each service. Setting |
| 143 | # this property will tell the service to encrypt the blob. Blob encryption |
| 144 | # is supported only for uploading whole blobs and only at the time of creation. |
| 145 | kek = KeyWrapper('key1') |
| 146 | for service in self.service_dict.values(): |
| 147 | service.key_encryption_key = kek |
| 148 | |
| 149 | self.block_blob_service.create_blob_from_text(container_name, block_blob_name, u'Foo') |
| 150 | self.page_blob_service.create_blob_from_bytes(container_name, page_blob_name, b'Foo.' * 128) |
| 151 | |
| 152 | # Even when encrypting, uploading large blobs will still automatically |
| 153 | # chunk the data and parallelize the upload with max_connections |
| 154 | # defaulting to 2. |
no outgoing calls