mirror of
https://github.com/PR0M3TH3AN/SeedPass.git
synced 2025-09-08 23:38:49 +00:00
75 lines
2.1 KiB
Python
75 lines
2.1 KiB
Python
from pathlib import Path
|
|
from tempfile import TemporaryDirectory
|
|
|
|
import pytest
|
|
import sys
|
|
from helpers import create_vault, TEST_SEED, TEST_PASSWORD
|
|
|
|
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
|
|
|
from password_manager.encryption import EncryptionManager
|
|
from password_manager.vault import Vault
|
|
from utils.key_derivation import derive_index_key, derive_key_from_password
|
|
|
|
SEED = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about"
|
|
PASSWORD = "passw0rd"
|
|
|
|
|
|
def setup_vault(tmp: Path) -> Vault:
|
|
seed_key = derive_key_from_password(PASSWORD)
|
|
seed_mgr = EncryptionManager(seed_key, tmp)
|
|
seed_mgr.encrypt_parent_seed(SEED)
|
|
|
|
key = derive_index_key(SEED)
|
|
enc_mgr = EncryptionManager(key, tmp)
|
|
return Vault(enc_mgr, tmp)
|
|
|
|
|
|
def test_index_export_import_round_trip():
|
|
with TemporaryDirectory() as td:
|
|
tmp = Path(td)
|
|
vault = setup_vault(tmp)
|
|
|
|
original = {
|
|
"schema_version": 4,
|
|
"entries": {
|
|
"0": {
|
|
"label": "example",
|
|
"type": "password",
|
|
"notes": "",
|
|
"custom_fields": [],
|
|
"origin": "",
|
|
"tags": [],
|
|
}
|
|
},
|
|
}
|
|
vault.save_index(original)
|
|
|
|
encrypted = vault.get_encrypted_index()
|
|
assert isinstance(encrypted, bytes)
|
|
|
|
vault.save_index(
|
|
{
|
|
"schema_version": 4,
|
|
"entries": {
|
|
"0": {
|
|
"label": "changed",
|
|
"type": "password",
|
|
"notes": "",
|
|
"custom_fields": [],
|
|
"origin": "",
|
|
"tags": [],
|
|
}
|
|
},
|
|
}
|
|
)
|
|
assert vault.decrypt_and_save_index_from_nostr(encrypted)
|
|
|
|
loaded = vault.load_index()
|
|
assert loaded["entries"] == original["entries"]
|
|
|
|
|
|
def test_get_encrypted_index_missing_file(tmp_path):
|
|
vault, enc_mgr = create_vault(tmp_path, TEST_SEED, TEST_PASSWORD)
|
|
assert vault.get_encrypted_index() is None
|