This function converts a given chunk to a variable-length byte sequence.
#include "tkm_utils.h"
+/* Generic variable-length sequence */
+struct sequence_type {
+ uint32_t size;
+ byte_t data[];
+};
+typedef struct sequence_type sequence_type;
+
void sequence_to_chunk(const byte_t * const first, const uint32_t len,
chunk_t * const chunk)
{
*chunk = chunk_alloc(len);
memcpy(chunk->ptr, first, len);
}
+
+void chunk_to_sequence(const chunk_t * const chunk, void *sequence)
+{
+ sequence_type *seq = sequence;
+ seq->size = chunk->len;
+ memcpy(seq->data, chunk->ptr, seq->size);
+}
void sequence_to_chunk(const byte_t * const first, const uint32_t len,
chunk_t * const chunk);
+/**
+ * Convert chunk to variable-length byte sequence.
+ *
+ * @param chunk pointer to chunk struct
+ * @param sequence pointer to variable-length sequence
+ */
+void chunk_to_sequence(const chunk_t * const chunk, void *sequence);
+
#endif /** TKM_UTILS_H_ */
}
END_TEST
+START_TEST(test_chunk_to_sequence)
+{
+ chunk_t chunk = chunk_from_thing("ABCDEFGH");
+ key_type key;
+
+ chunk_to_sequence(&chunk, &key);
+ fail_if(key.size != chunk.len, "Seq size mismatch");
+
+ uint32_t i;
+ for (i = 0; i < key.size - 1; i++)
+ {
+ fail_if(key.data[i] != 65 + i, "Data mismatch (1)");
+ }
+ fail_if(key.data[key.size - 1] != 0, "Data mismatch (2)");
+}
+END_TEST
+
TCase *make_utility_tests(void)
{
TCase *tc = tcase_create("Utility tests");
tcase_add_test(tc, test_sequence_to_chunk);
+ tcase_add_test(tc, test_chunk_to_sequence);
return tc;
}