diff options
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; } |