1CREATE TABLE ssh_keys (
2 id TEXT PRIMARY KEY CHECK (length(id) = 36),
3 user_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
4 fingerprint TEXT NOT NULL UNIQUE
5 CHECK (
6 length(fingerprint) = 50
7 AND substr(fingerprint, 1, 7) = 'SHA256:'
8 AND substr(fingerprint, 8) NOT GLOB '*[^A-Za-z0-9+/]*'
9 ),
10 key_type TEXT NOT NULL
11 CHECK (key_type IN (
12 'ssh-ed25519',
13 'ecdsa-sha2-nistp256',
14 'ecdsa-sha2-nistp384',
15 'ecdsa-sha2-nistp521',
16 'ssh-rsa',
17 'sk-ssh-ed25519@openssh.com',
18 'sk-ecdsa-sha2-nistp256@openssh.com'
19 )),
20 key_data BLOB NOT NULL CHECK (length(key_data) > 0),
21 label TEXT NOT NULL CHECK (length(CAST(label AS BLOB)) <= 128),
22 added_at INTEGER NOT NULL
23) STRICT;
24
25CREATE INDEX ssh_keys_user_id_idx ON ssh_keys(user_id, added_at, id);