export/securedrop_export/disk/volume.py (33 lines of code) (raw):
from enum import Enum
class EncryptionScheme(Enum):
"""
Supported encryption schemes.
"""
UNKNOWN = 0
LUKS = 1
VERACRYPT = 2
class Volume:
"""
A volume on a removable device.
Volumes have a device name ("/dev/sdX") and an encryption scheme.
"""
def __init__(
self,
device_name: str,
encryption: EncryptionScheme,
):
self.device_name = device_name
self.encryption = encryption
@property
def encryption(self):
return self._encryption
@encryption.setter
def encryption(self, scheme: EncryptionScheme):
if scheme:
self._encryption = scheme
else:
self._encryption = EncryptionScheme.UNKNOWN
class MountedVolume(Volume):
"""
An unlocked and mounted Volume.
Device name (from Volume) and unlocked name
are full paths (/dev/sdX, /dev/dm-X, /dev/mapper/idx).
"""
def __init__(
self,
device_name: str,
unlocked_name: str,
encryption: EncryptionScheme,
mountpoint: str,
):
super().__init__(device_name=device_name, encryption=encryption)
self.unlocked_name = unlocked_name
self.mountpoint = mountpoint