|
17 | 17 | # |
18 | 18 |
|
19 | 19 | import base64 |
| 20 | +import threading |
20 | 21 | import urllib.parse |
21 | 22 | from enum import Enum |
22 | 23 | from threading import Lock |
@@ -230,26 +231,32 @@ class Dek: |
230 | 231 | key_material_bytes: Optional[bytes] = _attrs_field(init=False, eq=False, order=False, default=None) |
231 | 232 | ts: Optional[int] = _attrs_field(default=None) |
232 | 233 | deleted: Optional[bool] = _attrs_field(default=None) |
| 234 | + _lock: threading.Lock = _attrs_field(factory=threading.Lock, init=False, eq=False, order=False) |
233 | 235 |
|
234 | 236 | def get_encrypted_key_material_bytes(self) -> Optional[bytes]: |
235 | 237 | if self.encrypted_key_material is None: |
236 | 238 | return None |
237 | 239 | if self.encrypted_key_material_bytes is None: |
238 | | - self.encrypted_key_material_bytes = base64.b64decode(self.encrypted_key_material) |
| 240 | + with self._lock: |
| 241 | + if self.encrypted_key_material_bytes is None: |
| 242 | + self.encrypted_key_material_bytes = base64.b64decode(self.encrypted_key_material) |
239 | 243 | return self.encrypted_key_material_bytes |
240 | 244 |
|
241 | 245 | def get_key_material_bytes(self) -> Optional[bytes]: |
242 | 246 | if self.key_material is None: |
243 | 247 | return None |
244 | 248 | if self.key_material_bytes is None: |
245 | | - self.key_material_bytes = base64.b64decode(self.key_material) |
| 249 | + with self._lock: |
| 250 | + if self.key_material_bytes is None: |
| 251 | + self.key_material_bytes = base64.b64decode(self.key_material) |
246 | 252 | return self.key_material_bytes |
247 | 253 |
|
248 | 254 | def set_key_material(self, key_material_bytes: bytes): |
249 | | - if key_material_bytes is None: |
250 | | - self.key_material = None |
251 | | - else: |
252 | | - self.key_material = base64.b64encode(key_material_bytes).decode("utf-8") |
| 255 | + with self._lock: |
| 256 | + if key_material_bytes is None: |
| 257 | + self.key_material = None |
| 258 | + else: |
| 259 | + self.key_material = base64.b64encode(key_material_bytes).decode("utf-8") |
253 | 260 |
|
254 | 261 | def to_dict(self) -> Dict[str, Any]: |
255 | 262 | kek_name = self.kek_name |
|
0 commit comments