]> git.ipfire.org Git - thirdparty/strongswan.git/commitdiff
Implement chunk_to_sequence function
authorReto Buerki <reet@codelabs.ch>
Fri, 24 Aug 2012 10:58:47 +0000 (12:58 +0200)
committerTobias Brunner <tobias@strongswan.org>
Tue, 19 Mar 2013 14:23:46 +0000 (15:23 +0100)
This function converts a given chunk to a variable-length byte sequence.

src/charon-tkm/src/tkm/tkm_utils.c
src/charon-tkm/src/tkm/tkm_utils.h
src/charon-tkm/tests/utils_tests.c

index f520fb6f7ea5d6771bce9769a8f622dd4fba322a..e60db5906395438981b2e966f785e6cf1d2bf86c 100644 (file)
 
 #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);
+}
index 9343837f60f18fe983660b94d47127c458f3c356..c78ffd5490a9076a275ccced4d5572f5f1727ca0 100644 (file)
 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_ */
index 510ebd0b795804e2dcf0ef89cf637297fc20829a..acc93ecf9536f13caba7057d4a0a29cece814f61 100644 (file)
@@ -36,10 +36,28 @@ START_TEST(test_sequence_to_chunk)
 }
 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;
 }