From 043a664cca41920c6d779da15ef39cc814ce999e Mon Sep 17 00:00:00 2001 From: Lu Wang Date: Wed, 14 Sep 2016 09:38:45 +0800 Subject: [PATCH] Use Openthread Hardware Entropy Collector (#484) * create new file named as hardware_entropy.c for mbedtls to use OT hardware entropy source --- examples/platforms/posix/random.c | 2 +- third_party/mbedtls/Makefile.am | 1 + third_party/mbedtls/hardware_entropy.c | 44 ++++++++++++++++++++++++++ third_party/mbedtls/mbedtls-config.h | 4 +-- 4 files changed, 48 insertions(+), 3 deletions(-) create mode 100644 third_party/mbedtls/hardware_entropy.c diff --git a/examples/platforms/posix/random.c b/examples/platforms/posix/random.c index cb05eed50..09dce589a 100644 --- a/examples/platforms/posix/random.c +++ b/examples/platforms/posix/random.c @@ -69,7 +69,7 @@ uint32_t otPlatRandomGet(void) return mlcg; } -ThreadError otPlatSecureRandomGet(uint16_t aInputLength, uint8_t *aOutput, uint16_t *aOutputLength) +ThreadError otPlatRandomSecureGet(uint16_t aInputLength, uint8_t *aOutput, uint16_t *aOutputLength) { ThreadError error = kThreadError_None; diff --git a/third_party/mbedtls/Makefile.am b/third_party/mbedtls/Makefile.am index bf38f6432..f72f48f96 100644 --- a/third_party/mbedtls/Makefile.am +++ b/third_party/mbedtls/Makefile.am @@ -42,6 +42,7 @@ libmbedcrypto_a_CPPFLAGS = \ $(NULL) libmbedcrypto_a_SOURCES = \ + hardware_entropy.c \ repo/library/aes.c \ repo/library/md.c \ repo/library/md_wrap.c \ diff --git a/third_party/mbedtls/hardware_entropy.c b/third_party/mbedtls/hardware_entropy.c new file mode 100644 index 000000000..6cc17d539 --- /dev/null +++ b/third_party/mbedtls/hardware_entropy.c @@ -0,0 +1,44 @@ +/* + * Copyright 2016 Nest Labs Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @file + * This file implements to use hardware entropy source. + * uncomment MBEDTLS_ENTROPY_HARDWARE_ALT in mbedtls/mbedtls_config.h to use this. + */ + +#include + +#include +#include + +#include "mbedtls/entropy.h" + +int mbedtls_hardware_poll(void *data, unsigned char *output, size_t len, size_t *olen) +{ + ThreadError error; + + (void)data; + + error = otPlatRandomSecureGet((uint16_t)len, (uint8_t *)output, (uint16_t *)olen); + + if (error != kThreadError_None) + { + return MBEDTLS_ERR_ENTROPY_SOURCE_FAILED; + } + + return 0; +} diff --git a/third_party/mbedtls/mbedtls-config.h b/third_party/mbedtls/mbedtls-config.h index 495c2d90c..bd2965617 100644 --- a/third_party/mbedtls/mbedtls-config.h +++ b/third_party/mbedtls/mbedtls-config.h @@ -294,7 +294,7 @@ * * Uncomment to use your own hardware entropy collector. */ -//#define MBEDTLS_ENTROPY_HARDWARE_ALT +#define MBEDTLS_ENTROPY_HARDWARE_ALT /** * \def MBEDTLS_AES_ROM_TABLES @@ -786,7 +786,7 @@ * * Uncomment this macro to disable the built-in platform entropy functions. */ -//#define MBEDTLS_NO_PLATFORM_ENTROPY +#define MBEDTLS_NO_PLATFORM_ENTROPY /** * \def MBEDTLS_ENTROPY_FORCE_SHA256