From: Reto Buerki Date: Fri, 24 Aug 2012 10:16:17 +0000 (+0200) Subject: Implement sequence_to_chunk function X-Git-Tag: 5.0.3rc1~39^2~83 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=53232d58834efe53fda4b4fd80fc7c5440592c2d;p=thirdparty%2Fstrongswan.git Implement sequence_to_chunk function This function converts a given TKM variable-length byte sequence to chunk. --- diff --git a/src/charon-tkm/src/tkm/tkm_diffie_hellman.c b/src/charon-tkm/src/tkm/tkm_diffie_hellman.c index 9a38c1637a..cef53464c7 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 #include "tkm.h" +#include "tkm_utils.h" #include "tkm_diffie_hellman.h" #include @@ -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 0000000000..f520fb6f7e --- /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 . + * + * 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 0000000000..9343837f60 --- /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 . + * + * 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 +#include + +/** + * 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 e1190fb63f..d29396c99d 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 47ffd0c568..c3dee9820d 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 0000000000..510ebd0b79 --- /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 . + * + * 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 +#include + +#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; +}