fix : removed chacha20
This commit is contained in:
parent
0c5ec83b25
commit
8eec5a731a
|
|
@ -333,6 +333,8 @@ class DeviceHandler:
|
|||
info(f'luks2 formatting mapper dev: {luks_handler.mapper_dev}')
|
||||
self.format(fs_type, luks_handler.mapper_dev)
|
||||
|
||||
udev_sync()
|
||||
|
||||
info(f'luks2 locking device: {dev_path}')
|
||||
luks_handler.lock()
|
||||
|
||||
|
|
@ -626,4 +628,4 @@ class DeviceHandler:
|
|||
self._wipe(block_device.device_info.path)
|
||||
|
||||
|
||||
device_handler = DeviceHandler()
|
||||
device_handler = DeviceHandler()
|
||||
|
|
@ -460,7 +460,6 @@ async def select_encryption_cipher(preset: str | None = None) -> str | None:
|
|||
'aes-cbc-essiv:sha256',
|
||||
'serpent-xts-plain64',
|
||||
'twofish-xts-plain64',
|
||||
'chacha20-random', # AEAD, requires --integrity poly1305, LUKS2 only
|
||||
]
|
||||
|
||||
if not preset:
|
||||
|
|
@ -483,4 +482,4 @@ async def select_encryption_cipher(preset: str | None = None) -> str | None:
|
|||
case ResultType.Skip:
|
||||
return preset
|
||||
case ResultType.Selection:
|
||||
return result.get_value()
|
||||
return result.get_value()
|
||||
|
|
@ -163,6 +163,18 @@ class Luks2:
|
|||
if not self.mapper_name:
|
||||
raise ValueError('mapper name missing')
|
||||
|
||||
# If a mapper device with this name already exists (e.g. left over from a
|
||||
# previous failed run), close it before trying to open a new one.
|
||||
# cryptsetup open returns exit code 5 / "Device already exists" otherwise.
|
||||
if self.is_unlocked():
|
||||
debug(f'Mapper {self.mapper_name} already open, closing before re-opening')
|
||||
try:
|
||||
SysCommand(f'cryptsetup close {self.mapper_name}')
|
||||
except SysCallError as close_err:
|
||||
raise DiskError(
|
||||
f'Could not close existing mapper "{self.mapper_name}" before unlock: {close_err}'
|
||||
)
|
||||
|
||||
key_file_arg, passphrase = self._get_passphrase_args(key_file)
|
||||
|
||||
cmd = [
|
||||
|
|
@ -187,6 +199,7 @@ class Luks2:
|
|||
raise DiskError(f'Failed to open luks2 device: {self.luks_dev_path}')
|
||||
|
||||
def lock(self) -> None:
|
||||
import time
|
||||
umount(self.luks_dev_path)
|
||||
|
||||
# Get crypt-information about the device by doing a reverse lookup starting with the partition path
|
||||
|
|
@ -195,14 +208,43 @@ class Luks2:
|
|||
|
||||
# For each child (sub-partition/sub-device)
|
||||
for child in lsblk_info.children:
|
||||
# Unmount the child location
|
||||
for mountpoint in child.mountpoints:
|
||||
debug(f'Unmounting {mountpoint}')
|
||||
umount(mountpoint, recursive=True)
|
||||
|
||||
# Wait for udev to finish processing events so the kernel drops
|
||||
# any lingering reference on the mapper device before we close it.
|
||||
try:
|
||||
run(['udevadm', 'settle', '--timeout=5'])
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
# And close it if possible.
|
||||
debug(f'Closing crypt device {child.name}')
|
||||
SysCommand(f'cryptsetup close {child.name}')
|
||||
|
||||
mapper_dev = Path(f'/dev/mapper/{child.name}')
|
||||
try:
|
||||
SysCommand(f'cryptsetup close {child.name}')
|
||||
except SysCallError as err:
|
||||
debug(f'cryptsetup close failed ({err}), retrying with --deferred')
|
||||
try:
|
||||
SysCommand(f'cryptsetup close --deferred {child.name}')
|
||||
debug(f'cryptsetup close --deferred issued for {child.name}')
|
||||
except SysCallError as deferred_err:
|
||||
raise DiskError(
|
||||
f'Could not close luks2 device "{child.name}": {deferred_err}'
|
||||
) from deferred_err
|
||||
|
||||
# Wait until the mapper device node actually disappears before returning.
|
||||
# Subsequent commands (wipefs, mkfs, etc.) will fail with "Device busy"
|
||||
# if we return while the node still exists.
|
||||
for _ in range(15):
|
||||
if not mapper_dev.exists():
|
||||
break
|
||||
debug(f'Waiting for {mapper_dev} to disappear...')
|
||||
time.sleep(1)
|
||||
else:
|
||||
raise DiskError(f'Mapper device {mapper_dev} did not disappear after close')
|
||||
|
||||
def create_keyfile(self, target_path: Path, override: bool = False) -> None:
|
||||
"""
|
||||
|
|
@ -286,4 +328,4 @@ def unlock_luks2_dev(
|
|||
if not luks_handler.is_unlocked():
|
||||
luks_handler.unlock()
|
||||
|
||||
return luks_handler
|
||||
return luks_handler
|
||||
|
|
@ -1469,7 +1469,6 @@ DEFAULT_CIPHER = 'aes-xts-plain64'
|
|||
# block-cipher + chainmode + ivmode strings (e.g. aes-xts-plain64).
|
||||
# Mapping: cipher value used in --cipher -> required --integrity value
|
||||
AEAD_CIPHERS: dict[str, str] = {
|
||||
'chacha20-random': 'poly1305',
|
||||
'aes-gcm-random': 'aead',
|
||||
}
|
||||
|
||||
|
|
@ -1686,4 +1685,4 @@ class LsblkInfo(BaseModel):
|
|||
|
||||
@classmethod
|
||||
def fields(cls) -> list[str]:
|
||||
return [field.alias or name for name, field in cls.model_fields.items() if name != 'children']
|
||||
return [field.alias or name for name, field in cls.model_fields.items() if name != 'children']
|
||||
Loading…
Reference in New Issue