From c440dfceff97526d2763383afd8da064faef3d0d Mon Sep 17 00:00:00 2001 From: Dmitry Eremin-Solenikov Date: Sun, 22 Apr 2018 10:18:17 +0300 Subject: linux-generic: random: split from crypto module While random and crypto might share some implementation details, in case of linux-generic and linux-DPDK it might be easier to split them to two different files. Signed-off-by: Dmitry Eremin-Solenikov Reviewed-by: Bill Fischofer Signed-off-by: Maxim Uvarov --- platform/linux-generic/Makefile.am | 1 + platform/linux-generic/odp_crypto.c | 42 ----------------------------- platform/linux-generic/odp_random.c | 54 +++++++++++++++++++++++++++++++++++++ 3 files changed, 55 insertions(+), 42 deletions(-) create mode 100644 platform/linux-generic/odp_random.c diff --git a/platform/linux-generic/Makefile.am b/platform/linux-generic/Makefile.am index 4f03eab15..7d1d55546 100644 --- a/platform/linux-generic/Makefile.am +++ b/platform/linux-generic/Makefile.am @@ -175,6 +175,7 @@ __LIB__libodp_linux_la_SOURCES = \ odp_queue_if.c \ odp_queue_lf.c \ odp_queue_scalable.c \ + odp_random.c \ odp_rwlock.c \ odp_rwlock_recursive.c \ odp_schedule_basic.c \ diff --git a/platform/linux-generic/odp_crypto.c b/platform/linux-generic/odp_crypto.c index 852f02125..aca822d8a 100644 --- a/platform/linux-generic/odp_crypto.c +++ b/platform/linux-generic/odp_crypto.c @@ -23,7 +23,6 @@ #include #include -#include #include #include #include @@ -1954,47 +1953,6 @@ int _odp_crypto_term_local(void) return 0; } -odp_random_kind_t odp_random_max_kind(void) -{ - return ODP_RANDOM_CRYPTO; -} - -int32_t odp_random_data(uint8_t *buf, uint32_t len, odp_random_kind_t kind) -{ - int rc; - - switch (kind) { - case ODP_RANDOM_BASIC: - case ODP_RANDOM_CRYPTO: - rc = RAND_bytes(buf, len); - return (1 == rc) ? (int)len /*success*/: -1 /*failure*/; - - case ODP_RANDOM_TRUE: - default: - return -1; - } -} - -int32_t odp_random_test_data(uint8_t *buf, uint32_t len, uint64_t *seed) -{ - union { - uint32_t rand_word; - uint8_t rand_byte[4]; - } u; - uint32_t i = 0, j; - uint32_t seed32 = (*seed) & 0xffffffff; - - while (i < len) { - u.rand_word = rand_r(&seed32); - - for (j = 0; j < 4 && i < len; j++, i++) - *buf++ = u.rand_byte[j]; - } - - *seed = seed32; - return len; -} - odp_crypto_compl_t odp_crypto_compl_from_event(odp_event_t ev) { /* This check not mandated by the API specification */ diff --git a/platform/linux-generic/odp_random.c b/platform/linux-generic/odp_random.c new file mode 100644 index 000000000..22894c473 --- /dev/null +++ b/platform/linux-generic/odp_random.c @@ -0,0 +1,54 @@ +/* Copyright (c) 2014-2018, Linaro Limited + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include "config.h" + +#include +#include +#include + +#include + +odp_random_kind_t odp_random_max_kind(void) +{ + return ODP_RANDOM_CRYPTO; +} + +int32_t odp_random_data(uint8_t *buf, uint32_t len, odp_random_kind_t kind) +{ + int rc; + + switch (kind) { + case ODP_RANDOM_BASIC: + case ODP_RANDOM_CRYPTO: + rc = RAND_bytes(buf, len); + return (1 == rc) ? (int)len /*success*/: -1 /*failure*/; + + case ODP_RANDOM_TRUE: + default: + return -1; + } +} + +int32_t odp_random_test_data(uint8_t *buf, uint32_t len, uint64_t *seed) +{ + union { + uint32_t rand_word; + uint8_t rand_byte[4]; + } u; + uint32_t i = 0, j; + uint32_t seed32 = (*seed) & 0xffffffff; + + while (i < len) { + u.rand_word = rand_r(&seed32); + + for (j = 0; j < 4 && i < len; j++, i++) + *buf++ = u.rand_byte[j]; + } + + *seed = seed32; + return len; +} -- cgit v1.2.3