Skip to content

Commit 5228a7e

Browse files
committed
.
1 parent 8daf16a commit 5228a7e

4 files changed

Lines changed: 18 additions & 40 deletions

File tree

CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@ add_library(dbps_common_lib STATIC
129129
)
130130
target_include_directories(dbps_common_lib PUBLIC
131131
src/common
132+
src/server
132133
${CMAKE_BINARY_DIR}/_deps/crow-src/include
133134
${CMAKE_BINARY_DIR}/_deps/cppcodec-src
134135
)

src/common/value_encryption_utils.cpp

Lines changed: 10 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -230,21 +230,16 @@ inline void append_f64_le(std::vector<uint8_t>& out, double v) {
230230
}
231231
} // anon
232232

233-
//TODO: we need a better name.
233+
// TODO: find better name?
234234
std::vector<uint8_t> EncryptTypedListValues(
235-
const std::vector<TypedListValues>& elements,
235+
const TypedListValues& elements,
236236
const std::vector<uint8_t>& key) {
237237
std::vector<EncryptedValue> encrypted_elements;
238-
if (elements.empty()) {
239-
return ConcatenateEncryptedValues(encrypted_elements);
240-
}
241238

242-
// Determine the concrete vector/element type from the first entry
243-
std::visit([&](const auto& first_vec) {
244-
typedef std::decay_t<decltype(first_vec)> VecT;
239+
std::visit([&](const auto& vec) {
240+
typedef std::decay_t<decltype(vec)> VecT;
245241
typedef typename VecT::value_type ElemT;
246242

247-
// Serializer for a single element
248243
auto serialize = [&](const ElemT& elem) -> std::vector<uint8_t> {
249244
std::vector<uint8_t> serialized;
250245
if constexpr (std::is_same<ElemT, int32_t>::value) {
@@ -269,20 +264,12 @@ std::vector<uint8_t> EncryptTypedListValues(
269264
return serialized;
270265
};
271266

272-
// Process all entries, assuming homogeneous type across elements
273-
for (size_t i = 0; i < elements.size(); ++i) {
274-
const TypedListValues& v = elements[i];
275-
if (!std::holds_alternative<VecT>(v)) {
276-
throw std::runtime_error("EncryptTypedListValues: heterogeneous TypedListValues not supported");
277-
}
278-
const VecT& vec = std::get<VecT>(v);
279-
for (size_t j = 0; j < vec.size(); ++j) {
280-
const ElemT& elem = vec[j];
281-
std::vector<uint8_t> bytes = serialize(elem);
282-
encrypted_elements.push_back(EncryptValue(bytes, key));
283-
}
267+
for (size_t i = 0; i < vec.size(); ++i) {
268+
const ElemT& elem = vec[i];
269+
std::vector<uint8_t> bytes = serialize(elem);
270+
encrypted_elements.push_back(EncryptValue(bytes, key));
284271
}
285-
}, elements.front());
272+
}, elements);
286273

287274
return ConcatenateEncryptedValues(encrypted_elements);
288275
}
@@ -433,7 +420,7 @@ TypedListValues DecryptTypedListValues(
433420
}
434421

435422
std::vector<uint8_t> EncryptTypedListValuesWithLevelBytes(
436-
const std::vector<TypedListValues>& elements,
423+
const TypedListValues& elements,
437424
const std::vector<uint8_t>& level_bytes,
438425
const std::vector<uint8_t>& key) {
439426

@@ -463,7 +450,5 @@ std::pair<TypedListValues, std::vector<uint8_t> > DecryptTypedListValuesWithLeve
463450
TypedListValues values = DecryptTypedListValues(encrypted_values_blob, datatype, key);
464451
return std::make_pair(values, level_bytes);
465452
}
466-
467-
468453

469454
} // namespace dbps::value_encryption_utils

src/common/value_encryption_utils.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -105,17 +105,17 @@ std::vector<std::vector<uint8_t> > ParseBuffersWithLength(const std::vector<uint
105105
* @param key Byte-array key for XOR encryption (cycled per byte)
106106
* @return Concatenated binary blob of encrypted, length-prefixed element payloads
107107
*/
108+
// Single TypedListValues input
108109
std::vector<uint8_t> EncryptTypedListValues(
109-
const std::vector<TypedListValues>& elements,
110+
const TypedListValues& elements,
110111
const std::vector<uint8_t>& key);
111-
112112
/**
113113
* Variant of EncryptTypedListValues that also prefixes the resulting encrypted values
114114
* alongside provided level bytes using ConcatenateBuffersWithLength:
115115
* buffers = [encrypted_values_blob, level_bytes]
116116
*/
117117
std::vector<uint8_t> EncryptTypedListValuesWithLevelBytes(
118-
const std::vector<TypedListValues>& elements,
118+
const TypedListValues& elements,
119119
const std::vector<uint8_t>& level_bytes,
120120
const std::vector<uint8_t>& key);
121121

src/common/value_encryption_utils_test.cpp

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -209,11 +209,8 @@ static std::vector<uint8_t> serialize_i32_le(int32_t v) {
209209
}
210210

211211
TEST(ValueEncryptionUtilsTest, EncryptTypedListValuesWithLevelBytesRoundTrip) {
212-
// Homogeneous TypedListValues: all int32_t vectors
213-
std::vector<TypedListValues> elements;
214-
elements.push_back(std::vector<int32_t>{10, -20, 30});
215-
elements.push_back(std::vector<int32_t>{}); // empty chunk
216-
elements.push_back(std::vector<int32_t>{-1});
212+
// Homogeneous TypedListValues: single int32_t vector
213+
TypedListValues elements = std::vector<int32_t>{10, -20, 30, -1};
217214

218215
std::vector<uint8_t> level_bytes;
219216
level_bytes.push_back(0xAA);
@@ -243,7 +240,6 @@ TEST(ValueEncryptionUtilsTest, EncryptTypedListValuesWithLevelBytesRoundTrip) {
243240
expected_serialized.push_back(serialize_i32_le(10));
244241
expected_serialized.push_back(serialize_i32_le(-20));
245242
expected_serialized.push_back(serialize_i32_le(30));
246-
// empty chunk contributes 0 elements
247243
expected_serialized.push_back(serialize_i32_le(-1));
248244

249245
ASSERT_EQ(encrypted_values.size(), expected_serialized.size());
@@ -254,12 +250,8 @@ TEST(ValueEncryptionUtilsTest, EncryptTypedListValuesWithLevelBytesRoundTrip) {
254250
}
255251

256252
TEST(ValueEncryptionUtilsTest, DecryptTypedListValuesWithLevelBytesRoundTrip) {
257-
// Build inputs
258-
std::vector<TypedListValues> elements;
259-
elements.push_back(std::vector<int32_t>{1, 2, 3});
260-
261-
//TODO: this should not be supported - revise - we intend to only support homogeneous typed lists.
262-
elements.push_back(std::vector<int32_t>{-7});
253+
// Build inputs (single list)
254+
TypedListValues elements = std::vector<int32_t>{1, 2, 3, -7};
263255

264256
std::vector<uint8_t> level_bytes;
265257
level_bytes.push_back(0x10);

0 commit comments

Comments
 (0)