From 477fd5cebb328deb21baf442d3270e4d87bad1f7 Mon Sep 17 00:00:00 2001 From: Robert Lubos Date: Thu, 29 Mar 2018 17:52:14 +0200 Subject: [PATCH] [nrf52840] use single config for mbedtls build (#2643) --- examples/Makefile-nrf52840 | 13 +- examples/platforms/nrf52840/Makefile.am | 2 +- .../libraries/crypto/{hw => }/aes_alt.h | 27 +++- .../libraries/crypto/{hw => }/aes_alt_cc310.c | 0 .../libraries/crypto/{hw => }/cc310_mbedtls.c | 0 .../libraries/crypto/{hw => }/cc310_mbedtls.h | 0 .../libraries/crypto/{hw => }/ecp_alt.h | 0 .../libraries/crypto/{hw => }/ecp_alt_cc310.c | 0 .../crypto/{hw => }/ecp_curves_alt.c | 0 .../libraries/crypto/hw/sha256_alt.h | 130 ------------------ .../crypto/{hw => }/nrf52840-mbedtls-config.h | 4 +- .../libraries/crypto/{sw => }/sha256_alt.h | 32 +++-- .../crypto/{hw => }/sha256_alt_cc310.c | 1 - .../crypto/sw/nrf52840-mbedtls-config.h | 33 ----- third_party/mbedtls/Makefile.am | 14 +- 15 files changed, 60 insertions(+), 196 deletions(-) rename third_party/NordicSemiconductor/libraries/crypto/{hw => }/aes_alt.h (85%) rename third_party/NordicSemiconductor/libraries/crypto/{hw => }/aes_alt_cc310.c (100%) rename third_party/NordicSemiconductor/libraries/crypto/{hw => }/cc310_mbedtls.c (100%) rename third_party/NordicSemiconductor/libraries/crypto/{hw => }/cc310_mbedtls.h (100%) rename third_party/NordicSemiconductor/libraries/crypto/{hw => }/ecp_alt.h (100%) rename third_party/NordicSemiconductor/libraries/crypto/{hw => }/ecp_alt_cc310.c (100%) rename third_party/NordicSemiconductor/libraries/crypto/{hw => }/ecp_curves_alt.c (100%) delete mode 100644 third_party/NordicSemiconductor/libraries/crypto/hw/sha256_alt.h rename third_party/NordicSemiconductor/libraries/crypto/{hw => }/nrf52840-mbedtls-config.h (97%) rename third_party/NordicSemiconductor/libraries/crypto/{sw => }/sha256_alt.h (85%) rename third_party/NordicSemiconductor/libraries/crypto/{hw => }/sha256_alt_cc310.c (99%) delete mode 100644 third_party/NordicSemiconductor/libraries/crypto/sw/nrf52840-mbedtls-config.h diff --git a/examples/Makefile-nrf52840 b/examples/Makefile-nrf52840 index dee38d157..cb1d45391 100644 --- a/examples/Makefile-nrf52840 +++ b/examples/Makefile-nrf52840 @@ -69,18 +69,11 @@ NRF52840_MBEDTLS_CPPFLAGS += -DMBEDTLS_USER_CONFIG_FILE='\"nrf52840-mbedtls-conf NRF52840_MBEDTLS_CPPFLAGS += -I$(AbsTopSourceDir)/third_party/mbedtls NRF52840_MBEDTLS_CPPFLAGS += -I$(AbsTopSourceDir)/third_party/mbedtls/repo.patched/include NRF52840_MBEDTLS_CPPFLAGS += -I$(AbsTopSourceDir)/third_party/mbedtls/repo.patched/include/mbedtls - -ifeq ($(DISABLE_CC310), 1) -NRF52840_MBEDTLS_CPPFLAGS += -I$(AbsTopSourceDir)/third_party/NordicSemiconductor/libraries/crypto/sw -NRF52840_MBEDTLS_CPPFLAGS += -DDISABLE_CC310=1 -else -NRF52840_MBEDTLS_CPPFLAGS += -I$(AbsTopSourceDir)/third_party/NordicSemiconductor/libraries/crypto/hw +NRF52840_MBEDTLS_CPPFLAGS += -I$(AbsTopSourceDir)/third_party/NordicSemiconductor/libraries/crypto NRF52840_MBEDTLS_CPPFLAGS += -I$(AbsTopSourceDir)/third_party/NordicSemiconductor/libraries/nrf_cc310/include NRF52840_MBEDTLS_CPPFLAGS += -I$(AbsTopSourceDir)/third_party/NordicSemiconductor/nrfx/mdk NRF52840_MBEDTLS_CPPFLAGS += -I$(AbsTopSourceDir)/third_party/NordicSemiconductor/cmsis NRF52840_MBEDTLS_CPPFLAGS += -DNRF52840_XXAA -endif - CONFIG_FILE = OPENTHREAD_PROJECT_CORE_CONFIG_FILE='\"openthread-core-nrf52840-config.h\"' CONFIG_FILE_PATH = $(AbsTopSourceDir)/examples/platforms/nrf52840/ @@ -104,6 +97,10 @@ ifeq ($(USB),1) COMMONCFLAGS += -DUSB_CDC_AS_SERIAL_TRANSPORT=1 endif +ifeq ($(DISABLE_CC310), 1) +NRF52840_MBEDTLS_CPPFLAGS += -DDISABLE_CC310=1 +endif + ifeq ($(DISABLE_SPI),1) COMMONCFLAGS += -DSPIS_TRANSPORT_DISABLE=1 endif diff --git a/examples/platforms/nrf52840/Makefile.am b/examples/platforms/nrf52840/Makefile.am index 34c6c2212..97aec57b4 100644 --- a/examples/platforms/nrf52840/Makefile.am +++ b/examples/platforms/nrf52840/Makefile.am @@ -72,7 +72,7 @@ COMMONCPPFLAGS -I$(top_srcdir)/third_party/NordicSemiconductor/nrfx/mdk \ -I$(top_srcdir)/third_party/NordicSemiconductor/nrfx/soc \ -I$(top_srcdir)/third_party/NordicSemiconductor/segger_rtt \ - -I$(top_srcdir)/third_party/NordicSemiconductor/softdevice/headers \ + -I$(top_srcdir)/third_party/NordicSemiconductor/softdevice/s140/headers \ $(NULL) PLATFORM_COMMON_SOURCES = \ diff --git a/third_party/NordicSemiconductor/libraries/crypto/hw/aes_alt.h b/third_party/NordicSemiconductor/libraries/crypto/aes_alt.h similarity index 85% rename from third_party/NordicSemiconductor/libraries/crypto/hw/aes_alt.h rename to third_party/NordicSemiconductor/libraries/crypto/aes_alt.h index 19dde7ae3..19794e092 100644 --- a/third_party/NordicSemiconductor/libraries/crypto/hw/aes_alt.h +++ b/third_party/NordicSemiconductor/libraries/crypto/aes_alt.h @@ -61,18 +61,35 @@ extern "C" { #endif +#if defined(__CC_ARM) +#pragma anon_unions +#endif + /** * @brief AES context structure */ -typedef struct +typedef union { - SaSiAesUserContext_t user_context; ///< User context for CC310 AES. - uint8_t key_buffer[32]; ///< Buffer for an encryption key. - SaSiAesUserKeyData_t key; ///< CC310 AES key structure. - SaSiAesEncryptMode_t mode; ///< Current context operation mode (encrypt/decrypt). + struct + { + SaSiAesUserContext_t user_context; ///< User context for CC310 AES. + uint8_t key_buffer[32]; ///< Buffer for an encryption key. + SaSiAesUserKeyData_t key; ///< CC310 AES key structure. + SaSiAesEncryptMode_t mode; ///< Current context operation mode (encrypt/decrypt). + }; + struct + { + int nr; ///< number of rounds */ + uint32_t *rk; ///< AES round keys */ + uint32_t buf[68]; ///< unaligned data */ + }; } mbedtls_aes_context; +#if defined(__CC_ARM) +#pragma no_anon_unions +#endif + /** * @brief Initialize AES context * diff --git a/third_party/NordicSemiconductor/libraries/crypto/hw/aes_alt_cc310.c b/third_party/NordicSemiconductor/libraries/crypto/aes_alt_cc310.c similarity index 100% rename from third_party/NordicSemiconductor/libraries/crypto/hw/aes_alt_cc310.c rename to third_party/NordicSemiconductor/libraries/crypto/aes_alt_cc310.c diff --git a/third_party/NordicSemiconductor/libraries/crypto/hw/cc310_mbedtls.c b/third_party/NordicSemiconductor/libraries/crypto/cc310_mbedtls.c similarity index 100% rename from third_party/NordicSemiconductor/libraries/crypto/hw/cc310_mbedtls.c rename to third_party/NordicSemiconductor/libraries/crypto/cc310_mbedtls.c diff --git a/third_party/NordicSemiconductor/libraries/crypto/hw/cc310_mbedtls.h b/third_party/NordicSemiconductor/libraries/crypto/cc310_mbedtls.h similarity index 100% rename from third_party/NordicSemiconductor/libraries/crypto/hw/cc310_mbedtls.h rename to third_party/NordicSemiconductor/libraries/crypto/cc310_mbedtls.h diff --git a/third_party/NordicSemiconductor/libraries/crypto/hw/ecp_alt.h b/third_party/NordicSemiconductor/libraries/crypto/ecp_alt.h similarity index 100% rename from third_party/NordicSemiconductor/libraries/crypto/hw/ecp_alt.h rename to third_party/NordicSemiconductor/libraries/crypto/ecp_alt.h diff --git a/third_party/NordicSemiconductor/libraries/crypto/hw/ecp_alt_cc310.c b/third_party/NordicSemiconductor/libraries/crypto/ecp_alt_cc310.c similarity index 100% rename from third_party/NordicSemiconductor/libraries/crypto/hw/ecp_alt_cc310.c rename to third_party/NordicSemiconductor/libraries/crypto/ecp_alt_cc310.c diff --git a/third_party/NordicSemiconductor/libraries/crypto/hw/ecp_curves_alt.c b/third_party/NordicSemiconductor/libraries/crypto/ecp_curves_alt.c similarity index 100% rename from third_party/NordicSemiconductor/libraries/crypto/hw/ecp_curves_alt.c rename to third_party/NordicSemiconductor/libraries/crypto/ecp_curves_alt.c diff --git a/third_party/NordicSemiconductor/libraries/crypto/hw/sha256_alt.h b/third_party/NordicSemiconductor/libraries/crypto/hw/sha256_alt.h deleted file mode 100644 index fc9a28b3c..000000000 --- a/third_party/NordicSemiconductor/libraries/crypto/hw/sha256_alt.h +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Copyright (c) 2018, The OpenThread Authors. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the copyright holder nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved - * SPDX-License-Identifier: Apache-2.0 - * - * 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. - */ - -#ifndef MBEDTLS_SHA256_ALT_H -#define MBEDTLS_SHA256_ALT_H - -#if !defined(MBEDTLS_CONFIG_FILE) -#include "config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - -#include -#include - -#ifdef MBEDTLS_SHA256_ALT - -#include "crys_hash.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * @brief SHA-256 context structure - */ -typedef struct -{ - CRYS_HASHUserContext_t user_context; ///< User context for CC310 SHA256 - CRYS_HASH_OperationMode_t mode; ///< CC310 hash operation mode -} -mbedtls_sha256_context; - -/** - * @brief Initialize SHA-256 context - * - * @param[in,out] ctx SHA-256 context to be initialized - */ -void mbedtls_sha256_init(mbedtls_sha256_context * ctx); - -/** - * @brief Clear SHA-256 context - * - * @param[in,out] ctx SHA-256 context to be cleared - */ -void mbedtls_sha256_free(mbedtls_sha256_context * ctx); - -/** - * @brief Clone (the state of) a SHA-256 context - * - * @param[out] dst The destination context - * @param[in] src The context to be cloned - */ -void mbedtls_sha256_clone(mbedtls_sha256_context * dst, const mbedtls_sha256_context * src); - -/** - * @brief SHA-256 context setup - * - * @param[in,out] ctx context to be initialized - * @param[in] is224 0 = use SHA256, 1 = use SHA224 - */ -void mbedtls_sha256_starts(mbedtls_sha256_context * ctx, int is224); - -/** - * @brief SHA-256 process buffer - * - * @param[in,out] ctx SHA-256 context - * @param[in] input buffer holding the data - * @param[in] ilen length of the input data - */ -void mbedtls_sha256_update(mbedtls_sha256_context * ctx, const unsigned char * input, size_t ilen); - -/** - * @brief SHA-256 final digest - * - * @param[in,out] ctx SHA-256 context - * @param[out] output SHA-224/256 checksum result - */ -void mbedtls_sha256_finish(mbedtls_sha256_context * ctx, unsigned char output[32]); - -/* Internal use */ -void mbedtls_sha256_process(mbedtls_sha256_context * ctx, const unsigned char data[64]); - -#ifdef __cplusplus -} -#endif - -#endif /* MBEDTLS_SHA256_ALT */ - -#endif /* MBEDTLS_SHA256_ALT_H */ diff --git a/third_party/NordicSemiconductor/libraries/crypto/hw/nrf52840-mbedtls-config.h b/third_party/NordicSemiconductor/libraries/crypto/nrf52840-mbedtls-config.h similarity index 97% rename from third_party/NordicSemiconductor/libraries/crypto/hw/nrf52840-mbedtls-config.h rename to third_party/NordicSemiconductor/libraries/crypto/nrf52840-mbedtls-config.h index c6b7ef73c..9b9e18383 100644 --- a/third_party/NordicSemiconductor/libraries/crypto/hw/nrf52840-mbedtls-config.h +++ b/third_party/NordicSemiconductor/libraries/crypto/nrf52840-mbedtls-config.h @@ -26,9 +26,11 @@ * POSSIBILITY OF SUCH DAMAGE. */ -#define MBEDTLS_SHA256_ALT +#ifndef DISABLE_CC310 #define MBEDTLS_AES_ALT #define MBEDTLS_ECP_ALT +#define MBEDTLS_SHA256_ALT +#endif // DISABLE_CC310 #if defined(__ICCARM__) _Pragma("diag_suppress=Pe549") diff --git a/third_party/NordicSemiconductor/libraries/crypto/sw/sha256_alt.h b/third_party/NordicSemiconductor/libraries/crypto/sha256_alt.h similarity index 85% rename from third_party/NordicSemiconductor/libraries/crypto/sw/sha256_alt.h rename to third_party/NordicSemiconductor/libraries/crypto/sha256_alt.h index eba504528..d42560be3 100644 --- a/third_party/NordicSemiconductor/libraries/crypto/sw/sha256_alt.h +++ b/third_party/NordicSemiconductor/libraries/crypto/sha256_alt.h @@ -44,8 +44,19 @@ #ifndef MBEDTLS_SHA256_ALT_H #define MBEDTLS_SHA256_ALT_H +#if !defined(MBEDTLS_CONFIG_FILE) +#include "config.h" +#else +#include MBEDTLS_CONFIG_FILE +#endif + +#include +#include + #ifdef MBEDTLS_SHA256_ALT +#include "crys_hash.h" + #ifdef __cplusplus extern "C" { #endif @@ -53,20 +64,24 @@ extern "C" { #if defined(__CC_ARM) #pragma anon_unions #endif - + /** - * \brief SHA-256 context structure + * @brief SHA-256 context structure */ typedef union { struct { - uint32_t total[2]; /*!< number of bytes processed */ - uint32_t state[8]; /*!< intermediate digest state */ - unsigned char buffer[64]; /*!< data block being processed */ - int is224; /*!< 0 => SHA-256, else SHA-224 */ + CRYS_HASHUserContext_t user_context; ///< User context for CC310 SHA256 + CRYS_HASH_OperationMode_t mode; ///< CC310 hash operation mode + }; + struct + { + uint32_t total[2]; ///< number of bytes processed + uint32_t state[8]; ///< intermediate digest state + unsigned char buffer[64]; ///< data block being processed + int is224; ///< 0 => SHA-256, else SHA-224 }; - uint8_t reserved[256]; } mbedtls_sha256_context; @@ -131,7 +146,4 @@ void mbedtls_sha256_process(mbedtls_sha256_context *ctx, const unsigned char dat #endif /* MBEDTLS_SHA256_ALT */ -/* MBEDTLS_SHA256_ALT was used to redifine context structure. Undefine it now to enable default mbedTLS implementation. */ -#undef MBEDTLS_SHA256_ALT - #endif /* MBEDTLS_SHA256_ALT_H */ diff --git a/third_party/NordicSemiconductor/libraries/crypto/hw/sha256_alt_cc310.c b/third_party/NordicSemiconductor/libraries/crypto/sha256_alt_cc310.c similarity index 99% rename from third_party/NordicSemiconductor/libraries/crypto/hw/sha256_alt_cc310.c rename to third_party/NordicSemiconductor/libraries/crypto/sha256_alt_cc310.c index 962094cb7..c9861591c 100644 --- a/third_party/NordicSemiconductor/libraries/crypto/hw/sha256_alt_cc310.c +++ b/third_party/NordicSemiconductor/libraries/crypto/sha256_alt_cc310.c @@ -30,7 +30,6 @@ #include - #ifdef MBEDTLS_SHA256_ALT #include "cc310_mbedtls.h" diff --git a/third_party/NordicSemiconductor/libraries/crypto/sw/nrf52840-mbedtls-config.h b/third_party/NordicSemiconductor/libraries/crypto/sw/nrf52840-mbedtls-config.h deleted file mode 100644 index 2713e983e..000000000 --- a/third_party/NordicSemiconductor/libraries/crypto/sw/nrf52840-mbedtls-config.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (c) 2017, The OpenThread Authors. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the copyright holder nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#define MBEDTLS_SHA256_ALT - -#if defined(__ICCARM__) - _Pragma("diag_suppress=Pe549") -#endif diff --git a/third_party/mbedtls/Makefile.am b/third_party/mbedtls/Makefile.am index e12ae59fd..37a657028 100644 --- a/third_party/mbedtls/Makefile.am +++ b/third_party/mbedtls/Makefile.am @@ -60,10 +60,10 @@ libmbedcrypto_a_SOURCES += \ endif # OPENTHREAD_EXAMPLES_EFR32 if OPENTHREAD_EXAMPLES_NRF52840 -nodist_libmbedcrypto_a_SOURCES = \ - @top_builddir@/third_party/NordicSemiconductor/libraries/crypto/hw/aes_alt_cc310.c \ - @top_builddir@/third_party/NordicSemiconductor/libraries/crypto/hw/sha256_alt_cc310.c \ - @top_builddir@/third_party/NordicSemiconductor/libraries/crypto/hw/cc310_mbedtls.c \ +nodist_libmbedcrypto_a_SOURCES = \ + @top_builddir@/third_party/NordicSemiconductor/libraries/crypto/aes_alt_cc310.c \ + @top_builddir@/third_party/NordicSemiconductor/libraries/crypto/sha256_alt_cc310.c \ + @top_builddir@/third_party/NordicSemiconductor/libraries/crypto/cc310_mbedtls.c \ $(NULL) endif # OPENTHREAD_EXAMPLES_NRF52840 @@ -100,9 +100,9 @@ libmbedcrypto_a_SOURCES += \ endif # OPENTHREAD_EXAMPLES_EFR32 if OPENTHREAD_EXAMPLES_NRF52840 -nodist_libmbedcrypto_a_SOURCES += \ - @top_builddir@/third_party/NordicSemiconductor/libraries/crypto/hw/ecp_alt_cc310.c \ - @top_builddir@/third_party/NordicSemiconductor/libraries/crypto/hw/ecp_curves_alt.c \ +nodist_libmbedcrypto_a_SOURCES += \ + @top_builddir@/third_party/NordicSemiconductor/libraries/crypto/ecp_alt_cc310.c \ + @top_builddir@/third_party/NordicSemiconductor/libraries/crypto/ecp_curves_alt.c \ $(NULL) endif # OPENTHREAD_EXAMPLES_NRF52840