diff options
Diffstat (limited to 'source/storage/Vault.mc')
| -rw-r--r-- | source/storage/Vault.mc | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/source/storage/Vault.mc b/source/storage/Vault.mc index 46c8de2..88054e0 100644 --- a/source/storage/Vault.mc +++ b/source/storage/Vault.mc @@ -31,6 +31,9 @@ class Vault { var lockout as Lockout; // The "Erase locked entries after 10 wrong PINs" setting (off by default). var eraseAfterFailures as Boolean = false; + // The "Encrypt names" setting: new entries keep their names in the + // encrypted part (existing ones are converted by AboutScan). + var encryptNames as Boolean = false; private var _store as Persist.Backend; private var _meta as Dictionary<Application.Storage.KeyType, Application.Storage.ValueType>; @@ -126,6 +129,7 @@ class Vault { throw new VaultError(VaultError.LIMIT, "at most " + MAX_ENTRIES + " entries"); } entry.id = newId(); + entry.namesEncrypted = encryptNames; entry.fingerprint = keyManager.fingerprint(entry); if (entry.created == 0) { entry.created = Clock.nowUnix(0); @@ -156,6 +160,21 @@ class Vault { _store.deleteValue("x." + entry.id); // the cached matrix may be stale } + // Re-seal an entry with or without encrypted names ("Encrypt names"). + // Nothing else changes, so the barcode cache stays. Throws NOT_FOUND, + // LOCKED, DAMAGED or FULL. + function setNamesEncrypted(id as String, encrypted as Boolean) as Void { + var entry = open(id); + entry.namesEncrypted = encrypted; + try { + write("e." + id, seal(entry)); + } catch (e instanceof VaultError) { + entry.wipeSecrets(); + throw e; + } + entry.wipeSecrets(); + } + // ---- Encoded barcode cache (README 12.2) ----------------------------- // Store an encoded matrix for a code entry, sealed with the entry's own |
