lib

Core libraries for Radroots
git clone https://radroots.dev/git/lib.git
Log | Files | Refs | README

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;