aboutsummaryrefslogtreecommitdiff
path: root/source/storage/Vault.mc
diff options
context:
space:
mode:
Diffstat (limited to 'source/storage/Vault.mc')
-rw-r--r--source/storage/Vault.mc19
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