From: Reto Buerki Date: Fri, 24 Aug 2012 10:58:47 +0000 (+0200) Subject: Implement chunk_to_sequence function X-Git-Tag: 5.0.3rc1~39^2~82 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0327fac6b6f0c5ec127ab39de11fed0185e49fb7;p=thirdparty%2Fstrongswan.git Implement chunk_to_sequence function This function converts a given chunk to a variable-length byte sequence. --- diff --git a/src/charon-tkm/src/tkm/tkm_utils.c b/src/charon-tkm/src/tkm/tkm_utils.c index f520fb6f7e..e60db59063 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 9343837f60..c78ffd5490 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 510ebd0b79..acc93ecf95 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; }