diff options
author | Reto Buerki <reet@codelabs.ch> | 2012-08-24 12:16:17 +0200 |
---|---|---|
committer | Tobias Brunner <tobias@strongswan.org> | 2013-03-19 15:23:46 +0100 |
commit | 53232d58834efe53fda4b4fd80fc7c5440592c2d (patch) | |
tree | fc90d9169363af5c3e86e172c89bdb26fa34f3f2 | |
parent | d61cea752472a211166c88f1559c3677ae2ddcc0 (diff) | |
download | strongswan-53232d58834efe53fda4b4fd80fc7c5440592c2d.tar.bz2 strongswan-53232d58834efe53fda4b4fd80fc7c5440592c2d.tar.xz |
Implement sequence_to_chunk function
This function converts a given TKM variable-length byte sequence to
chunk.
-rw-r--r-- | src/charon-tkm/src/tkm/tkm_diffie_hellman.c | 7 | ||||
-rw-r--r-- | src/charon-tkm/src/tkm/tkm_utils.c | 24 | ||||
-rw-r--r-- | src/charon-tkm/src/tkm/tkm_utils.h | 33 | ||||
-rw-r--r-- | src/charon-tkm/tests/test_runner.c | 1 | ||||
-rw-r--r-- | src/charon-tkm/tests/test_runner.h | 1 | ||||
-rw-r--r-- | src/charon-tkm/tests/utils_tests.c | 45 |
6 files changed, 107 insertions, 4 deletions
diff --git a/src/charon-tkm/src/tkm/tkm_diffie_hellman.c b/src/charon-tkm/src/tkm/tkm_diffie_hellman.c index 9a38c1637..cef53464c 100644 --- a/src/charon-tkm/src/tkm/tkm_diffie_hellman.c +++ b/src/charon-tkm/src/tkm/tkm_diffie_hellman.c @@ -18,6 +18,7 @@ #include <tkm/constants.h> #include "tkm.h" +#include "tkm_utils.h" #include "tkm_diffie_hellman.h" #include <utils/debug.h> @@ -54,8 +55,7 @@ struct private_tkm_diffie_hellman_t { METHOD(diffie_hellman_t, get_my_public_value, void, private_tkm_diffie_hellman_t *this, chunk_t *value) { - *value = chunk_alloc(this->pubvalue.size); - memcpy(value->ptr, &this->pubvalue.data, value->len); + sequence_to_chunk(this->pubvalue.data, this->pubvalue.size, value); } METHOD(diffie_hellman_t, get_shared_secret, status_t, @@ -67,8 +67,7 @@ METHOD(diffie_hellman_t, get_shared_secret, status_t, return FAILED; } - *secret = chunk_alloc(shared_secret.size); - memcpy(secret->ptr, &shared_secret.data, secret->len); + sequence_to_chunk(&shared_secret.data[0], shared_secret.size, secret); return SUCCESS; } diff --git a/src/charon-tkm/src/tkm/tkm_utils.c b/src/charon-tkm/src/tkm/tkm_utils.c new file mode 100644 index 000000000..f520fb6f7 --- /dev/null +++ b/src/charon-tkm/src/tkm/tkm_utils.c @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2012 Reto Buerki + * Copyright (C) 2012 Adrian-Ken Rueegsegger + * Hochschule fuer Technik Rapperswil + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + */ + +#include "tkm_utils.h" + +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); +} diff --git a/src/charon-tkm/src/tkm/tkm_utils.h b/src/charon-tkm/src/tkm/tkm_utils.h new file mode 100644 index 000000000..9343837f6 --- /dev/null +++ b/src/charon-tkm/src/tkm/tkm_utils.h @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2012 Reto Buerki + * Copyright (C) 2012 Adrian-Ken Rueegsegger + * Hochschule fuer Technik Rapperswil + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + */ + +#ifndef TKM_UTILS_H_ +#define TKM_UTILS_H_ + +#include <utils/chunk.h> +#include <tkm/types.h> + +/** + * Convert byte sequence to chunk. + * + * @param first pointer to first byte of sequence + * @param len length of byte sequence + * @param chunk pointer to chunk struct + */ +void sequence_to_chunk(const byte_t * const first, const uint32_t len, + chunk_t * const chunk); + +#endif /** TKM_UTILS_H_ */ diff --git a/src/charon-tkm/tests/test_runner.c b/src/charon-tkm/tests/test_runner.c index e1190fb63..d29396c99 100644 --- a/src/charon-tkm/tests/test_runner.c +++ b/src/charon-tkm/tests/test_runner.c @@ -29,6 +29,7 @@ int main(void) Suite *s = suite_create("TKM tests"); suite_add_tcase(s, make_id_manager_tests()); suite_add_tcase(s, make_chunk_map_tests()); + suite_add_tcase(s, make_utility_tests()); suite_add_tcase(s, make_nonceg_tests()); suite_add_tcase(s, make_diffie_hellman_tests()); diff --git a/src/charon-tkm/tests/test_runner.h b/src/charon-tkm/tests/test_runner.h index 47ffd0c56..c3dee9820 100644 --- a/src/charon-tkm/tests/test_runner.h +++ b/src/charon-tkm/tests/test_runner.h @@ -21,6 +21,7 @@ TCase *make_id_manager_tests(void); TCase *make_chunk_map_tests(void); +TCase *make_utility_tests(void); TCase *make_nonceg_tests(void); TCase *make_diffie_hellman_tests(void); diff --git a/src/charon-tkm/tests/utils_tests.c b/src/charon-tkm/tests/utils_tests.c new file mode 100644 index 000000000..510ebd0b7 --- /dev/null +++ b/src/charon-tkm/tests/utils_tests.c @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2012 Reto Buerki + * Copyright (C) 2012 Adrian-Ken Rueegsegger + * Hochschule fuer Technik Rapperswil + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + */ + +#include <check.h> +#include <tkm/types.h> + +#include "tkm_utils.h" + +START_TEST(test_sequence_to_chunk) +{ + key_type key = {5, {0, 1, 2, 3, 4}}; + chunk_t chunk = chunk_empty; + + sequence_to_chunk(key.data, key.size, &chunk); + fail_if(chunk.len != key.size, "Chunk size mismatch"); + + uint32_t i; + for (i = 0; i < key.size; i++) + { + fail_if(chunk.ptr[i] != i, "Data mismatch"); + } + chunk_free(&chunk); +} +END_TEST + +TCase *make_utility_tests(void) +{ + TCase *tc = tcase_create("Utility tests"); + tcase_add_test(tc, test_sequence_to_chunk); + + return tc; +} |