aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorReto Buerki <reet@codelabs.ch>2012-08-24 12:58:47 +0200
committerTobias Brunner <tobias@strongswan.org>2013-03-19 15:23:46 +0100
commit0327fac6b6f0c5ec127ab39de11fed0185e49fb7 (patch)
tree2e1ac4c964bd84ed2ec093773a5966ba5acfef55
parent53232d58834efe53fda4b4fd80fc7c5440592c2d (diff)
downloadstrongswan-0327fac6b6f0c5ec127ab39de11fed0185e49fb7.tar.bz2
strongswan-0327fac6b6f0c5ec127ab39de11fed0185e49fb7.tar.xz
Implement chunk_to_sequence function
This function converts a given chunk to a variable-length byte sequence.
-rw-r--r--src/charon-tkm/src/tkm/tkm_utils.c14
-rw-r--r--src/charon-tkm/src/tkm/tkm_utils.h8
-rw-r--r--src/charon-tkm/tests/utils_tests.c18
3 files changed, 40 insertions, 0 deletions
diff --git a/src/charon-tkm/src/tkm/tkm_utils.c b/src/charon-tkm/src/tkm/tkm_utils.c
index f520fb6f7..e60db5906 100644
--- a/src/charon-tkm/src/tkm/tkm_utils.c
+++ b/src/charon-tkm/src/tkm/tkm_utils.c
@@ -16,9 +16,23 @@
#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);
+}
diff --git a/src/charon-tkm/src/tkm/tkm_utils.h b/src/charon-tkm/src/tkm/tkm_utils.h
index 9343837f6..c78ffd549 100644
--- a/src/charon-tkm/src/tkm/tkm_utils.h
+++ b/src/charon-tkm/src/tkm/tkm_utils.h
@@ -30,4 +30,12 @@
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_ */
diff --git a/src/charon-tkm/tests/utils_tests.c b/src/charon-tkm/tests/utils_tests.c
index 510ebd0b7..acc93ecf9 100644
--- a/src/charon-tkm/tests/utils_tests.c
+++ b/src/charon-tkm/tests/utils_tests.c
@@ -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;
}