-- Create table for Signed Prekeys CREATE TABLE IF NOT EXISTS public.signed_prekeys ( user_id UUID NOT NULL REFERENCES public.users(id) ON DELETE CASCADE, key_id INTEGER NOT NULL, public_key TEXT NOT NULL, signature TEXT NOT NULL, created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), PRIMARY KEY (user_id, key_id) ); -- Create table for One-Time Prekeys CREATE TABLE IF NOT EXISTS public.one_time_prekeys ( user_id UUID NOT NULL REFERENCES public.users(id) ON DELETE CASCADE, key_id INTEGER NOT NULL, public_key TEXT NOT NULL, created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), UNIQUE (user_id, key_id) ); CREATE INDEX IF NOT EXISTS idx_one_time_prekeys_user_created ON public.one_time_prekeys(user_id, created_at ASC); -- Create table for Secure Messages CREATE TABLE IF NOT EXISTS public.secure_messages ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), conversation_id UUID NOT NULL, sender_id UUID NOT NULL REFERENCES public.users(id), receiver_id UUID NOT NULL REFERENCES public.users(id), ciphertext TEXT NOT NULL, iv TEXT NOT NULL, key_version TEXT NOT NULL, created_at TIMESTAMPTZ NOT NULL DEFAULT NOW() ); CREATE INDEX IF NOT EXISTS idx_secure_messages_conv_created ON public.secure_messages(conversation_id, created_at DESC);