/* * Copyright (c) 2019 Nordic Semiconductor ASA * * SPDX-License-Identifier: Apache-2.0 */ #include #include #include #include #include #include "platform-zephyr.h" LOG_MODULE_REGISTER(net_otPlat_entropy, CONFIG_OPENTHREAD_L2_LOG_LEVEL); #if !defined(CONFIG_ENTROPY_HAS_DRIVER) #error OpenThread requires an entropy source for a TRNG #endif otError otPlatEntropyGet(uint8_t *aOutput, uint16_t aOutputLength) { /* static to obtain it once in a first call */ static const struct device *dev; int err; if ((aOutput == NULL) || (aOutputLength == 0)) { return OT_ERROR_INVALID_ARGS; } if (dev == NULL) { dev = device_get_binding(DT_CHOSEN_ZEPHYR_ENTROPY_LABEL); if (dev == NULL) { LOG_ERR("Failed to obtain entropy device"); return OT_ERROR_FAILED; } } err = entropy_get_entropy(dev, aOutput, aOutputLength); if (err != 0) { LOG_ERR("Failed to obtain entropy, err %d", err); return OT_ERROR_FAILED; } return OT_ERROR_NONE; }