1414END
1515$$;
1616
17+
18+ -- Should include a kind field
19+ DROP FUNCTION IF EXISTS _cs_encrypted_check_k(jsonb);
20+ CREATE FUNCTION _cs_encrypted_check_k (val jsonb)
21+ RETURNS boolean
22+ AS $$
23+ BEGIN
24+ IF (val- >> ' k' = ANY(' {ct, sv}' )) THEN
25+ RETURN true;
26+ END IF;
27+ RAISE ' Invalid kind (%) in Encrypted column. Kind should be one of {ct, sv}' , val;
28+ END;
29+ $$ LANGUAGE plpgsql;
30+
31+
1732--
1833-- CT payload should include a c field
1934--
@@ -26,12 +41,13 @@ AS $$
2641 IF (val ? ' c' ) THEN
2742 RETURN true;
2843 END IF;
29- RAISE ' Encrypted kind (k) of "ct" missing data field (c): %' , val;
44+ RAISE ' Encrypted column kind (k) of "ct" missing data field (c): %' , val;
3045 END IF;
3146 RETURN true;
3247 END;
3348$$ LANGUAGE plpgsql;
3449
50+
3551--
3652-- SV payload should include an sv field
3753--
4460 IF (val ? ' sv' ) THEN
4561 RETURN true;
4662 END IF;
47- RAISE ' Encrypted kind (k) of "sv" missing data field (sv): %' , val;
63+ RAISE ' Encrypted column kind (k) of "sv" missing data field (sv): %' , val;
4864 END IF;
4965 RETURN true;
5066 END;
6076 IF NOT val ? ' p' THEN
6177 RETURN true;
6278 END IF;
63- RAISE ' Encrypted includes plaintext (p) field: %' , val;
79+ RAISE ' Encrypted column includes plaintext (p) field: %' , val;
6480 END;
6581$$ LANGUAGE plpgsql;
6682
7389 IF val ? ' i' THEN
7490 RETURN true;
7591 END IF;
76- RAISE ' Encrypted missing ident (i) field: %' , val;
92+ RAISE ' Encrypted column missing ident (i) field: %' , val;
7793 END;
7894$$ LANGUAGE plpgsql;
7995
86102 IF (val- > ' i' ?& array[' t' , ' c' ]) THEN
87103 RETURN true;
88104 END IF;
89- RAISE ' Encrypted ident (i) missing table (t) or column (c) fields: %' , val;
105+ RAISE ' Encrypted column ident (i) missing table (t) or column (c) fields: %' , val;
90106 END;
91107$$ LANGUAGE plpgsql;
92108
99115 IF (val ? ' v' ) THEN
100116 RETURN true;
101117 END IF;
102- RAISE ' Encrypted missing version (v) field: %' , val;
118+ RAISE ' Encrypted column missing version (v) field: %' , val;
103119 END;
104120$$ LANGUAGE plpgsql;
105121
@@ -113,6 +129,7 @@ BEGIN ATOMIC
113129 RETURN (
114130 _cs_encrypted_check_v(val) AND
115131 _cs_encrypted_check_i(val) AND
132+ _cs_encrypted_check_k(val) AND
116133 _cs_encrypted_check_k_ct(val) AND
117134 _cs_encrypted_check_k_sv(val) AND
118135 _cs_encrypted_check_p(val)
0 commit comments