Skip to content

Commit 84d50fc

Browse files
committed
update payload and queries
1 parent 87753a3 commit 84d50fc

File tree

4 files changed

+56
-66
lines changed

4 files changed

+56
-66
lines changed

languages/go/goeql/goeql.go

Lines changed: 38 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -29,44 +29,10 @@ type EncryptedColumn struct {
2929
P string `json:"p"`
3030
I TableColumn `json:"i"`
3131
V int `json:"v"`
32+
Q any `json:"q"`
3233
}
3334

3435
// EncryptedText is a string value to be encrypted
35-
// def for_match(value)
36-
// for_query(value, "match")
37-
// end
38-
39-
// def for_ore(value)
40-
// for_query(value, "ore")
41-
// end
42-
43-
// def for_unique(value)
44-
// for_query(value, "unique")
45-
// end
46-
47-
// def for_ste_vec(value)
48-
// for_query(value, "ste_vec")
49-
// end
50-
51-
// def for_query(value, for_query)
52-
// eql_payload(value, for_query).to_json()
53-
// end
54-
55-
// def eql_payload(value, for_query)
56-
// {
57-
// k: "pt",
58-
// p: serialize_plaintext_value(value),
59-
// i: {
60-
// t: table,
61-
// c: column
62-
// },
63-
// v: 1,
64-
// q: for_query,
65-
// }
66-
// end
67-
//
68-
// Creating custom types for encrypted fields to enable creating methods for
69-
// serialization/deserialization of these types.
7036
type EncryptedText string
7137

7238
// EncryptedJsonb is a jsonb value to be encrypted
@@ -80,7 +46,7 @@ type EncryptedBool bool
8046

8147
// Serialize turns a EncryptedText value into a jsonb payload for CipherStash Proxy
8248
func (et EncryptedText) Serialize(table string, column string) ([]byte, error) {
83-
val, err := ToEncryptedColumn(string(et), table, column)
49+
val, err := ToEncryptedColumn(string(et), table, column, nil)
8450
if err != nil {
8551
return nil, fmt.Errorf("error serializing: %v", err)
8652
}
@@ -103,7 +69,7 @@ func (et *EncryptedText) Deserialize(data []byte) (EncryptedText, error) {
10369

10470
// Serialize turns a EncryptedJsonb value into a jsonb payload for CipherStash Proxy
10571
func (ej EncryptedJsonb) Serialize(table string, column string) ([]byte, error) {
106-
val, err := ToEncryptedColumn(map[string]any(ej), table, column)
72+
val, err := ToEncryptedColumn(map[string]any(ej), table, column, nil)
10773
if err != nil {
10874
return nil, fmt.Errorf("error serializing: %v", err)
10975
}
@@ -131,7 +97,7 @@ func (ej *EncryptedJsonb) Deserialize(data []byte) (EncryptedJsonb, error) {
13197

13298
// Serialize turns a EncryptedInt value into a jsonb payload for CipherStash Proxy
13399
func (et EncryptedInt) Serialize(table string, column string) ([]byte, error) {
134-
val, err := ToEncryptedColumn(int(et), table, column)
100+
val, err := ToEncryptedColumn(int(et), table, column, nil)
135101
if err != nil {
136102
return nil, fmt.Errorf("error serializing: %v", err)
137103
}
@@ -158,7 +124,7 @@ func (et *EncryptedInt) Deserialize(data []byte) (EncryptedInt, error) {
158124

159125
// Serialize turns a EncryptedBool value into a jsonb payload for CipherStash Proxy
160126
func (eb EncryptedBool) Serialize(table string, column string) ([]byte, error) {
161-
val, err := ToEncryptedColumn(bool(eb), table, column)
127+
val, err := ToEncryptedColumn(bool(eb), table, column, nil)
162128
if err != nil {
163129
return nil, fmt.Errorf("error serializing: %v", err)
164130
}
@@ -184,9 +150,22 @@ func (eb *EncryptedBool) Deserialize(data []byte) (EncryptedBool, error) {
184150
return false, fmt.Errorf("invalid format: missing 'p' field")
185151
}
186152

153+
func SerializeMatchQuery(value any, table string, column string) ([]byte, error) {
154+
return SerializeQuery(value, table, column, "match")
155+
}
156+
func SerializeOreQuery(value any, table string, column string) ([]byte, error) {
157+
return SerializeQuery(value, table, column, "ore")
158+
}
159+
func SerializeUniqueQuery(value any, table string, column string) ([]byte, error) {
160+
return SerializeQuery(value, table, column, "unique")
161+
}
162+
func SerializeJsonbQuery(value any, table string, column string) ([]byte, error) {
163+
return SerializeQuery(value, table, column, "ste_vec")
164+
}
165+
187166
// SerializeQuery produces a jsonb payload used by EQL query functions to perform search operations like equality checks, range queries, and unique constraints.
188-
func SerializeQuery(value any, table string, column string) ([]byte, error) {
189-
query, err := ToEncryptedColumn(value, table, column)
167+
func SerializeQuery(value any, table string, column string, queryType any) ([]byte, error) {
168+
query, err := ToEncryptedColumn(value, table, column, queryType)
190169
if err != nil {
191170
return nil, fmt.Errorf("error converting to EncryptedColumn: %v", err)
192171
}
@@ -200,15 +179,26 @@ func SerializeQuery(value any, table string, column string) ([]byte, error) {
200179
}
201180

202181
// ToEncryptedColumn converts a plaintext value to a string, and returns the EncryptedColumn struct for inserting into a database.
203-
func ToEncryptedColumn(value any, table string, column string) (EncryptedColumn, error) {
204-
str, err := convertToString(value)
205-
if err != nil {
206-
return EncryptedColumn{}, fmt.Errorf("error: %v", err)
207-
}
182+
func ToEncryptedColumn(value any, table string, column string, queryType any) (EncryptedColumn, error) {
183+
if queryType == nil {
184+
str, err := convertToString(value)
185+
if err != nil {
186+
return EncryptedColumn{}, fmt.Errorf("error: %v", err)
187+
}
208188

209-
data := EncryptedColumn{K: "pt", P: str, I: TableColumn{T: table, C: column}, V: 1}
189+
data := EncryptedColumn{K: "pt", P: str, I: TableColumn{T: table, C: column}, V: 1, Q: nil}
210190

211-
return data, nil
191+
return data, nil
192+
} else {
193+
str, err := convertToString(value)
194+
if err != nil {
195+
return EncryptedColumn{}, fmt.Errorf("error: %v", err)
196+
}
197+
198+
data := EncryptedColumn{K: "pt", P: str, I: TableColumn{T: table, C: column}, V: 1, Q: queryType}
199+
200+
return data, nil
201+
}
212202
}
213203

214204
func convertToString(value any) (string, error) {

languages/go/goeql/goeql_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,7 @@ func TestSerializeQuery(t *testing.T) {
225225
}
226226

227227
for _, tt := range tests {
228-
serializedData, err := SerializeQuery(tt.value, tt.table, tt.column)
228+
serializedData, err := SerializeQuery(tt.value, tt.table, tt.column, nil)
229229
if err != nil {
230230
t.Fatalf("SerializeQuery returned error: %v", err)
231231
}
@@ -257,7 +257,7 @@ func TestToEncryptedColumn(t *testing.T) {
257257
}
258258

259259
for _, tt := range tests {
260-
ec, err := ToEncryptedColumn(tt.value, tt.table, tt.column)
260+
ec, err := ToEncryptedColumn(tt.value, tt.table, tt.column, nil)
261261
if err != nil {
262262
t.Fatalf("ToEncryptedColumn returned error: %v", err)
263263
}

languages/go/xorm/e2e_test.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ func TestMatchQueryLongString(t *testing.T) {
104104

105105
assert.Equal(t, int64(2), inserted, "Expected to insert 2 rows")
106106

107-
query, err := goeql.SerializeQuery("this", "examples", "encrypted_text_field")
107+
query, err := goeql.SerializeMatchQuery("this", "examples", "encrypted_text_field")
108108
if err != nil {
109109
log.Fatalf("Error marshaling encrypted_text_field query: %v", err)
110110
}
@@ -157,7 +157,7 @@ func TestMatchQueryEmail(t *testing.T) {
157157

158158
assert.Equal(t, int64(2), inserted, "Expected to insert 2 rows")
159159

160-
query, err := goeql.SerializeQuery("test", "examples", "encrypted_text_field")
160+
query, err := goeql.SerializeMatchQuery("test", "examples", "encrypted_text_field")
161161
if err != nil {
162162
log.Fatalf("Error marshaling encrypted_text_field query: %v", err)
163163
}
@@ -218,7 +218,7 @@ func TestJsonbQuerySimple(t *testing.T) {
218218
},
219219
}
220220

221-
query, errTwo := goeql.SerializeQuery(jsonbQuery, "examples", "encrypted_jsonb_field")
221+
query, errTwo := goeql.SerializeJsonbQuery(jsonbQuery, "examples", "encrypted_jsonb_field")
222222
if errTwo != nil {
223223
log.Fatalf("Error marshaling encrypted_jsonb_field: %v", errTwo)
224224
}
@@ -284,7 +284,7 @@ func TestJsonbQueryNested(t *testing.T) {
284284
},
285285
}
286286

287-
query, errTwo := goeql.SerializeQuery(jsonbQuery, "examples", "encrypted_jsonb_field")
287+
query, errTwo := goeql.SerializeJsonbQuery(jsonbQuery, "examples", "encrypted_jsonb_field")
288288
if errTwo != nil {
289289
log.Fatalf("Error marshaling encrypted_jsonb_field: %v", errTwo)
290290
}
@@ -331,7 +331,7 @@ func TestOreStringRangeQuery(t *testing.T) {
331331
assert.Equal(t, int64(2), inserted, "Expected to insert 2 rows")
332332

333333
// Query
334-
query, errQuery := goeql.SerializeQuery("tree", "examples", "encrypted_text_field")
334+
query, errQuery := goeql.SerializeOreQuery("tree", "examples", "encrypted_text_field")
335335
if errQuery != nil {
336336
log.Fatalf("err: %v", errQuery)
337337
}
@@ -378,7 +378,7 @@ func TestOreIntRangeQuery(t *testing.T) {
378378
assert.Equal(t, int64(2), inserted, "Expected to insert 2 rows")
379379

380380
// Query
381-
query, errQuery := goeql.SerializeQuery(32, "examples", "encrypted_int_field")
381+
query, errQuery := goeql.SerializeOreQuery(32, "examples", "encrypted_int_field")
382382
if errQuery != nil {
383383
log.Fatalf("err: %v", errQuery)
384384
}
@@ -434,7 +434,7 @@ func TestOreBoolRangeQuery(t *testing.T) {
434434
assert.Equal(t, int64(3), inserted, "Expected to insert 3 rows")
435435

436436
// Query
437-
query, errQuery := goeql.SerializeQuery(false, "examples", "encrypted_bool_field")
437+
query, errQuery := goeql.SerializeOreQuery(false, "examples", "encrypted_bool_field")
438438
if errQuery != nil {
439439
log.Fatalf("err: %v", errQuery)
440440
}
@@ -490,7 +490,7 @@ func TestUniqueStringQuery(t *testing.T) {
490490
assert.Equal(t, int64(3), inserted, "Expected to insert 3 rows")
491491

492492
// Query
493-
query, errQuery := goeql.SerializeQuery("testing two", "examples", "encrypted_text_field")
493+
query, errQuery := goeql.SerializeUniqueQuery("testing two", "examples", "encrypted_text_field")
494494
if errQuery != nil {
495495
log.Fatalf("err: %v", errQuery)
496496
}

languages/go/xorm/example_queries.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ func MatchQueryLongString(engine *xorm.Engine) {
6060
fmt.Printf("Example one inserted: %+v\n", newExample)
6161
fmt.Println("")
6262

63-
query, err := goeql.SerializeQuery("this", "examples", "encrypted_text_field")
63+
query, err := goeql.SerializeMatchQuery("this", "examples", "encrypted_text_field")
6464
if err != nil {
6565
log.Fatalf("Error marshaling encrypted_text_field: %v", err)
6666
}
@@ -93,7 +93,7 @@ func MatchQueryEmail(engine *xorm.Engine) {
9393
fmt.Printf("Example two inserted!: %+v\n", newExampleTwo)
9494
fmt.Println("")
9595

96-
query, errTwo := goeql.SerializeQuery("some", "examples", "encrypted_text_field")
96+
query, errTwo := goeql.SerializeMatchQuery("some", "examples", "encrypted_text_field")
9797
if errTwo != nil {
9898
log.Fatalf("Error marshaling encrypted_text_field: %v", errTwo)
9999
}
@@ -141,7 +141,7 @@ func JsonbQuerySimple(engine *xorm.Engine) {
141141
},
142142
}
143143

144-
query, errTwo := goeql.SerializeQuery(jsonbQuery, "examples", "encrypted_jsonb_field")
144+
query, errTwo := goeql.SerializeJsonbQuery(jsonbQuery, "examples", "encrypted_jsonb_field")
145145
if errTwo != nil {
146146
log.Fatalf("Error marshaling encrypted_jsonb_field: %v", errTwo)
147147
}
@@ -201,7 +201,7 @@ func JsonbQueryDeepNested(engine *xorm.Engine) {
201201
},
202202
}
203203

204-
jsonbQuery, errQuery := goeql.SerializeQuery(query, "examples", "encrypted_jsonb_field")
204+
jsonbQuery, errQuery := goeql.SerializeJsonbQuery(query, "examples", "encrypted_jsonb_field")
205205
if errQuery != nil {
206206
log.Fatalf("err: %v", errQuery)
207207
}
@@ -238,7 +238,7 @@ func OreStringRangeQuery(engine *xorm.Engine) {
238238
fmt.Println("Examples inserted!")
239239

240240
// Query
241-
query, errQuery := goeql.SerializeQuery("tree", "examples", "encrypted_text_field")
241+
query, errQuery := goeql.SerializeOreQuery("tree", "examples", "encrypted_text_field")
242242
if errQuery != nil {
243243
log.Fatalf("err: %v", errQuery)
244244
}
@@ -276,7 +276,7 @@ func OreIntRangeQuery(engine *xorm.Engine) {
276276
fmt.Println("Examples inserted!", example1)
277277
fmt.Println("Examples inserted!", example2)
278278

279-
serializedOreIntQuery, errQuery := goeql.SerializeQuery(32, "examples", "encrypted_int_field")
279+
serializedOreIntQuery, errQuery := goeql.SerializeOreQuery(32, "examples", "encrypted_int_field")
280280
if errQuery != nil {
281281
log.Fatalf("err: %v", errQuery)
282282
}
@@ -322,7 +322,7 @@ func OreBoolQuery(engine *xorm.Engine) {
322322
fmt.Println("Example3 inserted!", example3)
323323

324324
// Query
325-
query, errQuery := goeql.SerializeQuery(false, "examples", "encrypted_bool_field")
325+
query, errQuery := goeql.SerializeOreQuery(false, "examples", "encrypted_bool_field")
326326
if errQuery != nil {
327327
log.Fatalf("err: %v", errQuery)
328328
}
@@ -364,7 +364,7 @@ func UniqueStringQuery(engine *xorm.Engine) {
364364
fmt.Println("Example3 inserted!", example3)
365365

366366
var allExamples []Example
367-
query, errQuery := goeql.SerializeQuery("test two", "examples", "encrypted_text_field")
367+
query, errQuery := goeql.SerializeUniqueQuery("test two", "examples", "encrypted_text_field")
368368
if errQuery != nil {
369369
log.Fatalf("err: %v", errQuery)
370370
}

0 commit comments

Comments
 (0)