diff options
| author | sarthurdev <965089+sarthurdev@users.noreply.github.com> | 2025-09-23 10:14:10 +0200 |
|---|---|---|
| committer | sarthurdev <965089+sarthurdev@users.noreply.github.com> | 2025-09-23 21:25:26 +0200 |
| commit | 36d9d7068cc0c437f17f85c8fbd05c79f7d99627 (patch) | |
| tree | c9d0286b274377b2e099ea54b8a9a395ad9b02e3 /src | |
| parent | a080cfae6523768f1d5dea7ed0ab3178622495ef (diff) | |
| download | vyos-1x-36d9d7068cc0c437f17f85c8fbd05c79f7d99627.tar.gz vyos-1x-36d9d7068cc0c437f17f85c8fbd05c79f7d99627.zip | |
tpm: T7726: Test TPM key or prompt recovery key
Diffstat (limited to 'src')
| -rwxr-xr-x | src/helpers/vyos-config-encrypt.py | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/src/helpers/vyos-config-encrypt.py b/src/helpers/vyos-config-encrypt.py index e2888089f..c983e6065 100755 --- a/src/helpers/vyos-config-encrypt.py +++ b/src/helpers/vyos-config-encrypt.py @@ -34,6 +34,7 @@ mount_path = directories['config'] mount_path_old = f'{mount_path}.old' dm_device = '/dev/mapper/vyos_config' + def is_opened(): return os.path.exists(dm_device) @@ -146,6 +147,29 @@ def config_backup_folder(base): idx += 1 return f'{base}.{idx}' +def test_decrypt(key): + if not key: + return + + persist_path = cmd(persistpath_cmd).strip() + image_name = get_running_image() + image_path = os.path.join(persist_path, 'luks', image_name) + + key_file = None + + if not is_opened(): + with NamedTemporaryFile(dir='/dev/shm', delete=False) as f: + f.write(key) + key_file = f.name + + try: + cmd(f'cryptsetup -q open {image_path} vyos_config --key-file={key_file}') + os.unlink(key_file) + return True + except: + return False + return False + def decrypt_config(key): if not key: return @@ -257,10 +281,10 @@ if __name__ == '__main__': else: key = Fernet.generate_key() elif args.disable or args.load: - if existing_key: + if existing_key and test_decrypt(existing_key): need_recovery = False else: - print('Failed to read key from TPM, recovery key required') + print('TPM key invalid or not found, recovery key required') need_recovery = True else: need_recovery = True |
