private_store_v1.sql (4150B)
1 CREATE TABLE IF NOT EXISTS private_metadata ( 2 singleton INTEGER PRIMARY KEY CHECK(singleton = 1), 3 schema_version INTEGER NOT NULL CHECK(schema_version = 1), 4 profile_id BLOB NOT NULL CHECK(length(profile_id) = 16), 5 runtime_contract_hash BLOB NOT NULL CHECK(length(runtime_contract_hash) = 32), 6 key_version INTEGER NOT NULL CHECK(key_version > 0), 7 sqlite_source_id TEXT NOT NULL, 8 created_at_ms INTEGER NOT NULL, 9 updated_at_ms INTEGER NOT NULL 10 ) STRICT; 11 12 CREATE TABLE IF NOT EXISTS wrapped_profile_key ( 13 key_version INTEGER PRIMARY KEY CHECK(key_version > 0), 14 credential_backend TEXT NOT NULL, 15 wrapped_key BLOB NOT NULL, 16 nonce BLOB NOT NULL CHECK(length(nonce) = 24), 17 created_at_ms INTEGER NOT NULL, 18 retired_at_ms INTEGER 19 ) STRICT; 20 21 CREATE TABLE IF NOT EXISTS wrapped_signing_secret ( 22 account_id BLOB PRIMARY KEY CHECK(length(account_id) = 16), 23 public_key BLOB NOT NULL UNIQUE CHECK(length(public_key) = 32), 24 key_version INTEGER NOT NULL REFERENCES wrapped_profile_key(key_version), 25 ciphertext BLOB NOT NULL, 26 nonce BLOB NOT NULL CHECK(length(nonce) = 24), 27 created_at_ms INTEGER NOT NULL, 28 updated_at_ms INTEGER NOT NULL 29 ) STRICT; 30 31 CREATE TABLE IF NOT EXISTS private_farm_location ( 32 farm_kind INTEGER NOT NULL CHECK(farm_kind = 30340), 33 owner_pubkey BLOB NOT NULL CHECK(length(owner_pubkey) = 32), 34 farm_d_tag TEXT NOT NULL, 35 key_version INTEGER NOT NULL REFERENCES wrapped_profile_key(key_version), 36 ciphertext BLOB NOT NULL, 37 nonce BLOB NOT NULL CHECK(length(nonce) = 24), 38 created_at_ms INTEGER NOT NULL, 39 updated_at_ms INTEGER NOT NULL, 40 PRIMARY KEY(farm_kind, owner_pubkey, farm_d_tag) 41 ) STRICT, WITHOUT ROWID; 42 43 CREATE TABLE IF NOT EXISTS private_trade_artifacts ( 44 artifact_id TEXT PRIMARY KEY NOT NULL, 45 trade_id TEXT NOT NULL CHECK(length(trade_id) = 32), 46 candidate_id TEXT CHECK(candidate_id IS NULL OR length(candidate_id) = 64), 47 artifact_kind TEXT NOT NULL CHECK(artifact_kind IN ('binding_terms','message','contact_bundle','delivery_instruction')), 48 schema_id TEXT NOT NULL, 49 ciphertext_commitment TEXT NOT NULL CHECK(length(ciphertext_commitment) = 64), 50 key_version INTEGER NOT NULL REFERENCES wrapped_profile_key(key_version), 51 ciphertext BLOB NOT NULL, 52 encryption_metadata BLOB NOT NULL, 53 retention_class TEXT NOT NULL, 54 created_at_ms INTEGER NOT NULL, 55 expires_at_ms INTEGER, 56 deleted_at_ms INTEGER, 57 UNIQUE(artifact_kind, ciphertext_commitment) 58 ) STRICT; 59 60 CREATE INDEX IF NOT EXISTS private_trade_artifacts_trade_idx 61 ON private_trade_artifacts(trade_id, candidate_id, artifact_kind, deleted_at_ms); 62 63 CREATE INDEX IF NOT EXISTS private_trade_artifacts_expiry_idx 64 ON private_trade_artifacts(expires_at_ms, artifact_id) 65 WHERE expires_at_ms IS NOT NULL AND deleted_at_ms IS NULL; 66 67 CREATE TABLE IF NOT EXISTS cursor_hmac_key ( 68 key_id BLOB PRIMARY KEY CHECK(length(key_id) = 16), 69 key_version INTEGER NOT NULL REFERENCES wrapped_profile_key(key_version), 70 ciphertext BLOB NOT NULL, 71 nonce BLOB NOT NULL CHECK(length(nonce) = 24), 72 created_at_ms INTEGER NOT NULL, 73 retired_at_ms INTEGER 74 ) STRICT; 75 76 CREATE TABLE IF NOT EXISTS nip46_session_private ( 77 session_id BLOB PRIMARY KEY CHECK(length(session_id) = 16), 78 user_pubkey BLOB NOT NULL CHECK(length(user_pubkey) = 32), 79 remote_signer_pubkey BLOB NOT NULL CHECK(length(remote_signer_pubkey) = 32), 80 client_pubkey BLOB NOT NULL CHECK(length(client_pubkey) = 32), 81 key_version INTEGER NOT NULL REFERENCES wrapped_profile_key(key_version), 82 ciphertext BLOB NOT NULL, 83 nonce BLOB NOT NULL CHECK(length(nonce) = 24), 84 expires_at_ms INTEGER NOT NULL, 85 status TEXT NOT NULL CHECK(status IN ('active','expired','revoked')), 86 created_at_ms INTEGER NOT NULL, 87 updated_at_ms INTEGER NOT NULL 88 ) STRICT; 89 90 CREATE TABLE IF NOT EXISTS key_rotation_progress ( 91 singleton INTEGER PRIMARY KEY CHECK(singleton = 1), 92 from_key_version INTEGER NOT NULL, 93 to_key_version INTEGER NOT NULL, 94 table_name TEXT NOT NULL, 95 last_primary_key BLOB, 96 state TEXT NOT NULL CHECK(state IN ('running','verifying','complete','failed')), 97 started_at_ms INTEGER NOT NULL, 98 updated_at_ms INTEGER NOT NULL, 99 error_code TEXT 100 ) STRICT;