diff options
author | Reto Buerki <reet@codelabs.ch> | 2012-08-24 12:58:47 +0200 |
---|---|---|
committer | Tobias Brunner <tobias@strongswan.org> | 2013-03-19 15:23:46 +0100 |
commit | 0327fac6b6f0c5ec127ab39de11fed0185e49fb7 (patch) | |
tree | 2e1ac4c964bd84ed2ec093773a5966ba5acfef55 /src | |
parent | 53232d58834efe53fda4b4fd80fc7c5440592c2d (diff) | |
download | strongswan-0327fac6b6f0c5ec127ab39de11fed0185e49fb7.tar.bz2 strongswan-0327fac6b6f0c5ec127ab39de11fed0185e49fb7.tar.xz |
Implement chunk_to_sequence function
This function converts a given chunk to a variable-length byte sequence.
Diffstat (limited to 'src')
-rw-r--r-- | src/charon-tkm/src/tkm/tkm_utils.c | 14 | ||||
-rw-r--r-- | src/charon-tkm/src/tkm/tkm_utils.h | 8 | ||||
-rw-r--r-- | src/charon-tkm/tests/utils_tests.c | 18 |
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; } |