mirror of
https://github.com/strongswan/strongswan.git
synced 2025-10-07 00:01:49 -04:00
Implement chunk_to_sequence function
This function converts a given chunk to a variable-length byte sequence.
This commit is contained in:
parent
53232d5883
commit
0327fac6b6
@ -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);
|
||||
}
|
||||
|
@ -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_ */
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user