| 216 | self._base_stream = None |
| 217 | |
| 218 | def set_stream(self, stream, for_encrypt): |
| 219 | self.in_buffer = memoryview(bytearray(10240)) |
| 220 | self.in_buffer_pos = 0 |
| 221 | self.out_buffer = memoryview(bytearray(10240)) |
| 222 | self.out_buffer_pos = 0 |
| 223 | self.is_encrypt = for_encrypt |
| 224 | self.bytes_read = 0 |
| 225 | if stream: |
| 226 | self.is_eof = False |
| 227 | if self.is_gcm: |
| 228 | if self.is_encrypt: |
| 229 | nonce = get_random_bytes(12) |
| 230 | self.out_buffer[self.out_buffer_pos:self.out_buffer_pos + len(nonce)] = nonce |
| 231 | self.out_buffer_pos += len(nonce) |
| 232 | else: |
| 233 | nonce = stream.read(12) |
| 234 | self.bytes_read += len(nonce) |
| 235 | cipher = Cipher(AES(self.key), GCM(nonce), backend=_CRYPTO_BACKEND) |
| 236 | else: |
| 237 | if self.is_encrypt: |
| 238 | iv = get_random_bytes(16) |
| 239 | self.out_buffer[self.out_buffer_pos:self.out_buffer_pos + len(iv)] = iv |
| 240 | self.out_buffer_pos += len(iv) |
| 241 | else: |
| 242 | iv = stream.read(16) |
| 243 | self.bytes_read += len(iv) |
| 244 | cipher = Cipher(AES(self.key), CBC(iv), backend=_CRYPTO_BACKEND) |
| 245 | self.crypter = cipher.encryptor() if self.is_encrypt else cipher.decryptor() |
| 246 | self._base_stream = stream |
| 247 | else: |
| 248 | self.is_eof = True |
| 249 | return self |
| 250 | |
| 251 | def closed(self): |
| 252 | return self._base_stream is not None |