/*
 *
 *    Copyright (c) 2013-2017 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 defines default compile-time configuration constants
 *      for Nest Weave.
 *
 *      Package integrators that wish to override these values should
 *      either use preprocessor definitions or create a project-
 *      specific WeaveProjectConfig.h header and then assert
 *      HAVE_WEAVEPROJECTCONFIG_H via the package configuration tool
 *      via --with-weave-project-includes=DIR where DIR is the
 *      directory that contains the header.
 *
 *  NOTE WELL: On some platforms, this header is included by C-language programs.
 *
 */

#ifndef WEAVE_CONFIG_H_
#define WEAVE_CONFIG_H_

#include <SystemLayer/SystemConfig.h>

/* COMING SOON: making the INET Layer optional entails making this inclusion optional. */
#include <InetLayer/InetConfig.h>

#if INET_CONFIG_ENABLE_TCP_ENDPOINT && INET_TCP_IDLE_CHECK_INTERVAL <= 0
#error "Weave SDK requires INET_TCP_IDLE_CHECK_INTERVAL > 0"
#endif // INET_CONFIG_ENABLE_TCP_ENDPOINT && INET_TCP_IDLE_CHECK_INTERVAL <= 0

#if HAVE_WEAVEPROJECTCONFIG_H
#include "WeaveProjectConfig.h"
#endif

/**
 *  @def WEAVE_CONFIG_PROVIDE_OBSOLESCENT_INTERFACES
 *
 *  @brief
 *    This boolean configuration option is (1) if the obsolescent interfaces
 *    of the Nest Weave layer are still available for transitional purposes.
 *
 */
#ifndef WEAVE_CONFIG_PROVIDE_OBSOLESCENT_INTERFACES
#define WEAVE_CONFIG_PROVIDE_OBSOLESCENT_INTERFACES         1
#endif //  WEAVE_CONFIG_PROVIDE_OBSOLESCENT_INTERFACES

// Profile-specific Configuration Headers

#include "WeaveBDXConfig.h"

#include "WeaveDMConfig.h"

#include "WeaveTimeConfig.h"

#include "WeaveTunnelConfig.h"

#include "WeaveEventLoggingConfig.h"

/**
 *  @def WEAVE_CONFIG_ERROR_TYPE
 *
 *  @brief
 *    This defines the data type used to represent errors for Weave.
 *
 */
#ifndef WEAVE_CONFIG_ERROR_TYPE
#include <stdint.h>

#define WEAVE_CONFIG_ERROR_TYPE                             int32_t
#endif // WEAVE_CONFIG_ERROR_TYPE

/**
 *  @def WEAVE_CONFIG_NO_ERROR
 *
 *  @brief
 *    This defines the Weave error code for no error or success.
 *
 */
#ifndef WEAVE_CONFIG_NO_ERROR
#define WEAVE_CONFIG_NO_ERROR                               0
#endif // WEAVE_CONFIG_NO_ERROR

/**
 *  @def WEAVE_CONFIG_ERROR_MIN
 *
 *  @brief
 *    This defines the base or minimum Weave error number range.
 *
 */
#ifndef WEAVE_CONFIG_ERROR_MIN
#define WEAVE_CONFIG_ERROR_MIN                              4000
#endif // WEAVE_CONFIG_ERROR_MIN

/**
 *  @def WEAVE_CONFIG_ERROR_MAX
 *
 *  @brief
 *    This defines the top or maximum Weave error number range.
 *
 */
#ifndef WEAVE_CONFIG_ERROR_MAX
#define WEAVE_CONFIG_ERROR_MAX                              4999
#endif // WEAVE_CONFIG_ERROR_MAX

/**
 *  @def _WEAVE_CONFIG_ERROR
 *
 *  @brief
 *    This defines a mapping function for Weave errors that allows
 *    mapping such errors into a platform- or system-specific manner.
 *
 */
#ifndef _WEAVE_CONFIG_ERROR
#define _WEAVE_CONFIG_ERROR(e)                              (WEAVE_ERROR_MIN + (e))
#endif // _WEAVE_CONFIG_ERROR

/**
 *  @def WEAVE_CONFIG_USE_OPENSSL_ECC
 *
 *  @brief
 *    Use the OpenSSL implementation of the elliptic curve primitives
 *    for Weave communication.
 *
 *    Note that this option is mutually exclusive with
 *    #WEAVE_CONFIG_USE_MICRO_ECC.
 */
#ifndef WEAVE_CONFIG_USE_OPENSSL_ECC
#define WEAVE_CONFIG_USE_OPENSSL_ECC                        1
#endif // WEAVE_CONFIG_USE_OPENSSL_ECC

/**
 *  @def WEAVE_CONFIG_USE_MICRO_ECC
 *
 *  @brief
 *    Use the Micro ECC implementation of the elliptic curve primitives
 *    for Weave communication.
 *
 *    Note that this option is mutually exclusive with
 *    #WEAVE_CONFIG_USE_OPENSSL_ECC.
 *
 */
#ifndef WEAVE_CONFIG_USE_MICRO_ECC
#define WEAVE_CONFIG_USE_MICRO_ECC                          0
#endif // WEAVE_CONFIG_USE_MICRO_ECC

#if WEAVE_CONFIG_USE_MICRO_ECC && WEAVE_CONFIG_USE_OPENSSL_ECC
#error "Please assert one of either WEAVE_CONFIG_USE_MICRO_ECC or WEAVE_CONFIG_USE_OPENSSL_ECC, but not both."
#endif // WEAVE_CONFIG_USE_MICRO_ECC && WEAVE_CONFIG_USE_OPENSSL_ECC

/**
 *  @name Weave Elliptic Curve Security Configuration
 *
 *  @brief
 *    The following definitions enable one or more of four potential
 *    elliptic curves:
 *
 *      * #WEAVE_CONFIG_SUPPORT_ELLIPTIC_CURVE_SECP160R1
 *      * #WEAVE_CONFIG_SUPPORT_ELLIPTIC_CURVE_SECP192R1
 *      * #WEAVE_CONFIG_SUPPORT_ELLIPTIC_CURVE_SECP224R1
 *      * #WEAVE_CONFIG_SUPPORT_ELLIPTIC_CURVE_SECP256R1
 *
 *  @{
 */

/**
 *  @def WEAVE_CONFIG_SUPPORT_ELLIPTIC_CURVE_SECP160R1
 *
 *  @brief
 *    Enable (1) or disable (0) support for the Standards for
 *    Efficient Cryptography Group (SECG) secp160r1 elliptic curve.
 *
 */
#ifndef WEAVE_CONFIG_SUPPORT_ELLIPTIC_CURVE_SECP160R1
#define WEAVE_CONFIG_SUPPORT_ELLIPTIC_CURVE_SECP160R1       0
#endif // WEAVE_CONFIG_SUPPORT_ELLIPTIC_CURVE_SECP160R1

/**
 *  @def WEAVE_CONFIG_SUPPORT_ELLIPTIC_CURVE_SECP192R1
 *
 *  @brief
 *    Enable (1) or disable (0) support for the Standards for
 *    Efficient Cryptography Group (SECG) secp192r1 elliptic curve.
 *
 */
#ifndef WEAVE_CONFIG_SUPPORT_ELLIPTIC_CURVE_SECP192R1
#define WEAVE_CONFIG_SUPPORT_ELLIPTIC_CURVE_SECP192R1       1
#endif // WEAVE_CONFIG_SUPPORT_ELLIPTIC_CURVE_SECP192R1

/**
 *  @def WEAVE_CONFIG_SUPPORT_ELLIPTIC_CURVE_SECP224R1
 *
 *  @brief
 *    Enable (1) or disable (0) support for the Standards for
 *    Efficient Cryptography Group (SECG) secp224r1 / National
 *    Institute of Standards (NIST) P-224 elliptic curve.
 *
 */
#ifndef WEAVE_CONFIG_SUPPORT_ELLIPTIC_CURVE_SECP224R1
#define WEAVE_CONFIG_SUPPORT_ELLIPTIC_CURVE_SECP224R1       1
#endif // WEAVE_CONFIG_SUPPORT_ELLIPTIC_CURVE_SECP224R1

/**
 *  @def WEAVE_CONFIG_SUPPORT_ELLIPTIC_CURVE_SECP256R1
 *
 *  @brief
 *    Enable (1) or disable (0) support for the Standards for
 *    Efficient Cryptography Group (SECG) secp256r1 / American
 *    National Standards Institute (ANSI) prime256v1 / National
 *    Institute of Standards (NIST) P-256 elliptic curve.
 *
 */
#ifndef WEAVE_CONFIG_SUPPORT_ELLIPTIC_CURVE_SECP256R1
#define WEAVE_CONFIG_SUPPORT_ELLIPTIC_CURVE_SECP256R1       1
#endif // WEAVE_CONFIG_SUPPORT_ELLIPTIC_CURVE_SECP256R1

/**
 *  @}
 */

/**
 *  @name Weave Password Authenticated Session Establishment (PASE) Configuration
 *
 *  @brief
 *    The following definitions define the configurations supported
 *    for Weave's Password Authenticated Session Establishment (PASE)
 *    protocol.
 *
 *    This protocol is used primarily for establishing a secure
 *    session for provisioning. Weave supports the following PASE
 *    configurations:
 *
 *    * #WEAVE_CONFIG_SUPPORT_PASE_CONFIG0_TEST_ONLY
 *    * #WEAVE_CONFIG_SUPPORT_PASE_CONFIG1
 *    * #WEAVE_CONFIG_SUPPORT_PASE_CONFIG2
 *    * #WEAVE_CONFIG_SUPPORT_PASE_CONFIG3
 *    * #WEAVE_CONFIG_SUPPORT_PASE_CONFIG4
 *    * #WEAVE_CONFIG_SUPPORT_PASE_CONFIG5
 *
 *    which are summarized in the table below:
 *
 *    | Configuration  |  J-PAKE Style   |   Curve   |  Test Only  | Notes                                |
 *    | :------------: | :-------------- | :-------: | :---------: | :----------------------------------- |
 *    | 0              | -               | -         | Y           | Test-only                            |
 *    | 1              | Finite Field    | -         | N           | Original Weave default configuration |
 *    | 2              | Elliptic Curve  | secp160r1 | N           |                                      |
 *    | 3              | Elliptic Curve  | secp192r1 | N           |                                      |
 *    | 4              | Elliptic Curve  | secp224r1 | N           | Future Weave default configuration   |
 *    | 5              | Elliptic Curve  | secp256r1 | N           |                                      |
 *
 *  @{
 *
 */

/**
 *  @def WEAVE_CONFIG_SUPPORT_PASE_CONFIG0_TEST_ONLY
 *
 *  @brief
 *    This Weave PASE configuration does not use the J-PAKE algorithm
 *    and sends deterministic messages over the communications
 *    channel. The size and structure of the messages are similar to
 *    #WEAVE_CONFIG_SUPPORT_PASE_CONFIG5.
 *
 *  @note The results of this configuration are insecure because the
 *        computational overhead of the cryptography has largely been
 *        disabled since the focus of this configuration is testing
 *        the overall PASE protocol exchange, independently of the
 *        cryptography.
 *
 */
#ifndef WEAVE_CONFIG_SUPPORT_PASE_CONFIG0_TEST_ONLY
#define WEAVE_CONFIG_SUPPORT_PASE_CONFIG0_TEST_ONLY         0
#endif // WEAVE_CONFIG_SUPPORT_PASE_CONFIG0_TEST_ONLY

/**
 *  @def WEAVE_CONFIG_SUPPORT_PASE_CONFIG1
 *
 *  @brief
 *    This Weave PASE configuration uses Finite Field J-PAKE and is
 *    the original, default Weave PASE configuration.
 *
 */
#ifndef WEAVE_CONFIG_SUPPORT_PASE_CONFIG1
#define WEAVE_CONFIG_SUPPORT_PASE_CONFIG1                   1
#endif // WEAVE_CONFIG_SUPPORT_PASE_CONFIG1

/**
 *  @def WEAVE_CONFIG_SUPPORT_PASE_CONFIG2
 *
 *  @brief
 *    This Weave PASE configuration uses Elliptic Curve J-PAKE with a
 *    SECG secp160r1 curve.
 *
 *    @note When this PASE configuration is enabled, the corresponding
 *          elliptic curve (i.e. #WEAVE_CONFIG_SUPPORT_ELLIPTIC_CURVE_SECP160R1)
 *          should also be enabled.
 *
 */
#ifndef WEAVE_CONFIG_SUPPORT_PASE_CONFIG2
#define WEAVE_CONFIG_SUPPORT_PASE_CONFIG2                   0
#endif // WEAVE_CONFIG_SUPPORT_PASE_CONFIG2

/**
 *  @def WEAVE_CONFIG_SUPPORT_PASE_CONFIG3
 *
 *  @brief
 *    This Weave PASE configuration uses Elliptic Curve J-PAKE with a
 *    SECG secp192r1 curve.
 *
 *    @note When this PASE configuration is enabled, the corresponding
 *          elliptic curve (i.e. #WEAVE_CONFIG_SUPPORT_ELLIPTIC_CURVE_SECP192R1)
 *          should also be enabled.
 *
 */
#ifndef WEAVE_CONFIG_SUPPORT_PASE_CONFIG3
#define WEAVE_CONFIG_SUPPORT_PASE_CONFIG3                   0
#endif // WEAVE_CONFIG_SUPPORT_PASE_CONFIG3

/**
 *  @def WEAVE_CONFIG_SUPPORT_PASE_CONFIG4
 *
 *  @brief
 *    This Weave PASE configuration uses Elliptic Curve J-PAKE with a
 *    SECG secp224r1 curve and will be the new, default Weave PASE
 *    configuration.
 *
 *    @note When this PASE configuration is enabled, the corresponding
 *          elliptic curve (i.e. #WEAVE_CONFIG_SUPPORT_ELLIPTIC_CURVE_SECP224R1)
 *          should also be enabled.
 *
 */
#ifndef WEAVE_CONFIG_SUPPORT_PASE_CONFIG4
#define WEAVE_CONFIG_SUPPORT_PASE_CONFIG4                   1
#endif // WEAVE_CONFIG_SUPPORT_PASE_CONFIG4

/**
 *  @def WEAVE_CONFIG_SUPPORT_PASE_CONFIG5
 *
 *  @brief
 *    This Weave PASE configuration uses Elliptic Curve J-PAKE with a
 *    SECG secp256r1 curve.
 *
 *    @note When this PASE configuration is enabled, the corresponding
 *          elliptic curve (i.e. #WEAVE_CONFIG_SUPPORT_ELLIPTIC_CURVE_SECP256R1)
 *          should also be enabled.
 *
 */
#ifndef WEAVE_CONFIG_SUPPORT_PASE_CONFIG5
#define WEAVE_CONFIG_SUPPORT_PASE_CONFIG5                   0
#endif // WEAVE_CONFIG_SUPPORT_PASE_CONFIG5

/**
 *  @}
 */

#if WEAVE_CONFIG_SUPPORT_PASE_CONFIG2 && !WEAVE_CONFIG_SUPPORT_ELLIPTIC_CURVE_SECP160R1
#error "Please assert WEAVE_CONFIG_SUPPORT_ELLIPTIC_CURVE_SECP160R1 when WEAVE_CONFIG_SUPPORT_PASE_CONFIG2 is asserted"
#endif // WEAVE_CONFIG_SUPPORT_PASE_CONFIG2 && !WEAVE_CONFIG_SUPPORT_ELLIPTIC_CURVE_SECP160R1

#if WEAVE_CONFIG_SUPPORT_PASE_CONFIG3 && !WEAVE_CONFIG_SUPPORT_ELLIPTIC_CURVE_SECP192R1
#error "Please assert WEAVE_CONFIG_SUPPORT_ELLIPTIC_CURVE_SECP192R1 when WEAVE_CONFIG_SUPPORT_PASE_CONFIG3 is asserted"
#endif // WEAVE_CONFIG_SUPPORT_PASE_CONFIG3 && !WEAVE_CONFIG_SUPPORT_ELLIPTIC_CURVE_SECP192R1

#if WEAVE_CONFIG_SUPPORT_PASE_CONFIG4 && !WEAVE_CONFIG_SUPPORT_ELLIPTIC_CURVE_SECP224R1
#error "Please assert WEAVE_CONFIG_SUPPORT_ELLIPTIC_CURVE_SECP224R1 when WEAVE_CONFIG_SUPPORT_PASE_CONFIG4 is asserted"
#endif // WEAVE_CONFIG_SUPPORT_PASE_CONFIG4 && !WEAVE_CONFIG_SUPPORT_ELLIPTIC_CURVE_SECP224R1

#if WEAVE_CONFIG_SUPPORT_PASE_CONFIG5 && !WEAVE_CONFIG_SUPPORT_ELLIPTIC_CURVE_SECP256R1
#error "Please assert WEAVE_CONFIG_SUPPORT_ELLIPTIC_CURVE_SECP256R1 when WEAVE_CONFIG_SUPPORT_PASE_CONFIG5 is asserted"
#endif // WEAVE_CONFIG_SUPPORT_PASE_CONFIG5 && !WEAVE_CONFIG_SUPPORT_ELLIPTIC_CURVE_SECP256R1

/**
 *  @def WEAVE_CONFIG_PASE_MESSAGE_PAYLOAD_ALIGNMENT
 *
 *  @brief
 *    Align payload on 4-byte boundary for PASE messages.
 *    Currently, payload alignment is required only when micro-ecc
 *    library is used and it is compiled with ARM assembly.
 *    If implementation guarantees that payload is always 4-byte
 *    aligned this option should stay deasserted to save code size.
 *
 */
#ifndef WEAVE_CONFIG_PASE_MESSAGE_PAYLOAD_ALIGNMENT
#if WEAVE_CONFIG_USE_MICRO_ECC
#define WEAVE_CONFIG_PASE_MESSAGE_PAYLOAD_ALIGNMENT         1
#else
#define WEAVE_CONFIG_PASE_MESSAGE_PAYLOAD_ALIGNMENT         0
#endif // WEAVE_CONFIG_USE_MICRO_ECC
#endif // WEAVE_CONFIG_PASE_MESSAGE_PAYLOAD_ALIGNMENT


/**
 *  @name Weave Security Manager Memory Management Configuration
 *
 *  @brief
 *    The following definitions enable one of three potential Weave
 *    Security Manager memory-management options:
 *
 *      * #WEAVE_CONFIG_SECURITY_MGR_MEMORY_MGMT_PLATFORM
 *      * #WEAVE_CONFIG_SECURITY_MGR_MEMORY_MGMT_SIMPLE
 *      * #WEAVE_CONFIG_SECURITY_MGR_MEMORY_MGMT_MALLOC
 *
 *    Note that these options are mutually exclusive and only one
 *    of these options should be set.
 *
 *  @{
 */

/**
 *  @def WEAVE_CONFIG_SECURITY_MGR_MEMORY_MGMT_PLATFORM
 *
 *  @brief
 *    Enable (1) or disable (0) support for platform-specific
 *    implementation of Weave Security Manager memory-management
 *    functions.
 *
 *  @note This configuration is mutual exclusive with
 *        #WEAVE_CONFIG_SECURITY_MGR_MEMORY_MGMT_SIMPLE and
 *        #WEAVE_CONFIG_SECURITY_MGR_MEMORY_MGMT_MALLOC.
 *
 */
#ifndef WEAVE_CONFIG_SECURITY_MGR_MEMORY_MGMT_PLATFORM
#define WEAVE_CONFIG_SECURITY_MGR_MEMORY_MGMT_PLATFORM      0
#endif // WEAVE_CONFIG_SECURITY_MGR_MEMORY_MGMT_PLATFORM

/**
 *  @def WEAVE_CONFIG_SECURITY_MGR_MEMORY_MGMT_SIMPLE
 *
 *  @brief
 *    Enable (1) or disable (0) support for a Weave-provided
 *    implementation of Weave Security Manager memory-management
 *    functions based on temporary network buffer allocation /
 *    release.
 *
 *  @note This configuration is mutual exclusive with
 *        #WEAVE_CONFIG_SECURITY_MGR_MEMORY_MGMT_PLATFORM and
 *        #WEAVE_CONFIG_SECURITY_MGR_MEMORY_MGMT_MALLOC.
 *
 */
#ifndef WEAVE_CONFIG_SECURITY_MGR_MEMORY_MGMT_SIMPLE
#define WEAVE_CONFIG_SECURITY_MGR_MEMORY_MGMT_SIMPLE        0
#endif // WEAVE_CONFIG_SECURITY_MGR_MEMORY_MGMT_SIMPLE

/**
 *  @def WEAVE_CONFIG_SECURITY_MGR_MEMORY_MGMT_MALLOC
 *
 *  @brief
 *    Enable (1) or disable (0) support for a Weave-provided
 *    implementation of Weave Security Manager memory-management
 *    functions based on the C Standard Library malloc / free
 *    functions.
 *
 *  @note This configuration is mutual exclusive with
 *        #WEAVE_CONFIG_SECURITY_MGR_MEMORY_MGMT_PLATFORM and
 *        #WEAVE_CONFIG_SECURITY_MGR_MEMORY_MGMT_SIMPLE.
 *
 */
#ifndef WEAVE_CONFIG_SECURITY_MGR_MEMORY_MGMT_MALLOC
#define WEAVE_CONFIG_SECURITY_MGR_MEMORY_MGMT_MALLOC        1
#endif // WEAVE_CONFIG_SECURITY_MGR_MEMORY_MGMT_MALLOC

/**
 *  @}
 */

#if ((WEAVE_CONFIG_SECURITY_MGR_MEMORY_MGMT_PLATFORM + WEAVE_CONFIG_SECURITY_MGR_MEMORY_MGMT_SIMPLE + WEAVE_CONFIG_SECURITY_MGR_MEMORY_MGMT_MALLOC) != 1)
#error "Please assert exactly one of WEAVE_CONFIG_SECURITY_MGR_MEMORY_MGMT_PLATFORM, WEAVE_CONFIG_SECURITY_MGR_MEMORY_MGMT_SIMPLE, or WEAVE_CONFIG_SECURITY_MGR_MEMORY_MGMT_MALLOC."
#endif // ((WEAVE_CONFIG_SECURITY_MGR_MEMORY_MGMT_PLATFORM + WEAVE_CONFIG_SECURITY_MGR_MEMORY_MGMT_SIMPLE + WEAVE_CONFIG_SECURITY_MGR_MEMORY_MGMT_MALLOC) != 1)

/**
 *  @def WEAVE_CONFIG_SIMPLE_ALLOCATOR_USE_SMALL_BUFFERS
 *
 *  @brief
 *    Enable (1) or disable (0) simple memory allocator support
 *    for small size network buffers. When enabled, this configuration
 *    requires 4 network buffers with minimum available payload size of
 *    600 bytes.
 *
 *  @note This configuration is only relevant when
 *        #WEAVE_CONFIG_SECURITY_MGR_MEMORY_MGMT_SIMPLE is set and
 *        ignored otherwise.
 *
 */
#ifndef WEAVE_CONFIG_SIMPLE_ALLOCATOR_USE_SMALL_BUFFERS
#define WEAVE_CONFIG_SIMPLE_ALLOCATOR_USE_SMALL_BUFFERS     0
#endif // WEAVE_CONFIG_SIMPLE_ALLOCATOR_USE_SMALL_BUFFERS

/**
 *  @name Weave Security Manager Time-Consuming Crypto Alerts.
 *
 *  @brief
 *    The following definitions enable one of two potential Weave
 *    Security Manager time-consuming crypto alerts implementations:
 *
 *      * #WEAVE_CONFIG_SECURITY_MGR_TIME_ALERTS_DUMMY
 *      * #WEAVE_CONFIG_SECURITY_MGR_TIME_ALERTS_PLATFORM
 *
 *    Note that these options are mutually exclusive and only one
 *    of these options should be set.
 *
 *  @{
 */

/**
 *  @def WEAVE_CONFIG_SECURITY_MGR_TIME_ALERTS_DUMMY
 *
 *  @brief
 *    Enable (1) or disable (0) support for Weave-provided dummy
 *    implementation of Weave security manager time-consuming
 *    crypto alerts functions.
 *
 *  @note This configuration is mutual exclusive with
 *        #WEAVE_CONFIG_SECURITY_MGR_TIME_ALERTS_PLATFORM.
 *
 */
#ifndef WEAVE_CONFIG_SECURITY_MGR_TIME_ALERTS_DUMMY
#define WEAVE_CONFIG_SECURITY_MGR_TIME_ALERTS_DUMMY         1
#endif // WEAVE_CONFIG_SECURITY_MGR_TIME_ALERTS_DUMMY

/**
 *  @def WEAVE_CONFIG_SECURITY_MGR_TIME_ALERTS_PLATFORM
 *
 *  @brief
 *    Enable (1) or disable (0) support for a platform-specific
 *    implementation of Weave security manager time-consuming
 *    crypto alerts functions.
 *
 *  @note This configuration is mutual exclusive with
 *        #WEAVE_CONFIG_SECURITY_MGR_TIME_ALERTS_DUMMY.
 *
 */
#ifndef WEAVE_CONFIG_SECURITY_MGR_TIME_ALERTS_PLATFORM
#define WEAVE_CONFIG_SECURITY_MGR_TIME_ALERTS_PLATFORM      0
#endif // WEAVE_CONFIG_SECURITY_MGR_TIME_ALERTS_PLATFORM

/**
 *  @}
 */

#if ((WEAVE_CONFIG_SECURITY_MGR_TIME_ALERTS_DUMMY + WEAVE_CONFIG_SECURITY_MGR_TIME_ALERTS_PLATFORM) != 1)
#error "Please assert exactly one of WEAVE_CONFIG_SECURITY_MGR_TIME_ALERTS_DUMMY or WEAVE_CONFIG_SECURITY_MGR_TIME_ALERTS_PLATFORM."
#endif // ((WEAVE_CONFIG_SECURITY_MGR_TIME_ALERTS_DUMMY + WEAVE_CONFIG_SECURITY_MGR_TIME_ALERTS_PLATFORM) != 1)

/**
 *  @name Weave Random Number Generator (RNG) Implementation Configuration
 *
 *  @brief
 *    The following definitions enable one of three potential Weave
 *    RNG implementation options:
 *
 *      * #WEAVE_CONFIG_RNG_IMPLEMENTATION_PLATFORM
 *      * #WEAVE_CONFIG_RNG_IMPLEMENTATION_NESTDRBG
 *      * #WEAVE_CONFIG_RNG_IMPLEMENTATION_OPENSSL
 *
 *    Note that these options are mutually exclusive and only one of
 *    these options should be set.
 *
 *  @{
 */

/**
 *  @def WEAVE_CONFIG_RNG_IMPLEMENTATION_PLATFORM
 *
 *  @brief
 *    Enable (1) or disable (0) support for platform-specific
 *    implementation of the Weave Random Number Generator.
 *
 *  @note This configuration is mutual exclusive with
 *        #WEAVE_CONFIG_RNG_IMPLEMENTATION_NESTDRBG and
 *        #WEAVE_CONFIG_RNG_IMPLEMENTATION_OPENSSL.
 *
 */
#ifndef WEAVE_CONFIG_RNG_IMPLEMENTATION_PLATFORM
#define WEAVE_CONFIG_RNG_IMPLEMENTATION_PLATFORM            0
#endif // WEAVE_CONFIG_RNG_IMPLEMENTATION_PLATFORM

/**
 *  @def WEAVE_CONFIG_RNG_IMPLEMENTATION_NESTDRBG
 *
 *  @brief
 *    Enable (1) or disable (0) support for a Weave-provided
 *    implementation of the Weave Random Number Generator.
 *    This implementation is based on AES-CTR DRBG as
 *    specified in the NIST SP800-90A document.
 *
 *  @note This configuration is mutual exclusive with
 *        #WEAVE_CONFIG_RNG_IMPLEMENTATION_PLATFORM and
 *        #WEAVE_CONFIG_RNG_IMPLEMENTATION_OPENSSL.
 *
 */
#ifndef WEAVE_CONFIG_RNG_IMPLEMENTATION_NESTDRBG
#define WEAVE_CONFIG_RNG_IMPLEMENTATION_NESTDRBG            0
#endif // WEAVE_CONFIG_RNG_IMPLEMENTATION_NESTDRBG

/**
 *  @def WEAVE_CONFIG_RNG_IMPLEMENTATION_OPENSSL
 *
 *  @brief
 *    Enable (1) or disable (0) support for a standard OpenSSL
 *    implementation of the Weave Random Number Generator.
 *
 *  @note This configuration is mutual exclusive with
 *        #WEAVE_CONFIG_RNG_IMPLEMENTATION_PLATFORM and
 *        #WEAVE_CONFIG_RNG_IMPLEMENTATION_NESTDRBG.
 *
 */
#ifndef WEAVE_CONFIG_RNG_IMPLEMENTATION_OPENSSL
#define WEAVE_CONFIG_RNG_IMPLEMENTATION_OPENSSL             1
#endif // WEAVE_CONFIG_RNG_IMPLEMENTATION_OPENSSL

/**
 *  @}
 */

#if ((WEAVE_CONFIG_RNG_IMPLEMENTATION_PLATFORM + WEAVE_CONFIG_RNG_IMPLEMENTATION_NESTDRBG + WEAVE_CONFIG_RNG_IMPLEMENTATION_OPENSSL) != 1)
#error "Please assert exactly one of WEAVE_CONFIG_RNG_IMPLEMENTATION_PLATFORM, WEAVE_CONFIG_RNG_IMPLEMENTATION_NESTDRBG, or WEAVE_CONFIG_RNG_IMPLEMENTATION_OPENSSL."
#endif // ((WEAVE_CONFIG_RNG_IMPLEMENTATION_PLATFORM + WEAVE_CONFIG_RNG_IMPLEMENTATION_NESTDRBG + WEAVE_CONFIG_RNG_IMPLEMENTATION_OPENSSL) != 1)


/**
 *  @def WEAVE_CONFIG_DEV_RANDOM_DRBG_SEED
 *
 *  @brief
 *    Enable (1) or disable (0) a function for seeding the DRBG with
 *    entropy from the /dev/(u)random device.
 *
 *  @note When enabled along with #WEAVE_CONFIG_RNG_IMPLEMENTATION_NESTDRBG
 *        this function becomes the default seeding function for the DRBG if
 *        another isn't specified at initialization time.
 *
 */
#ifndef WEAVE_CONFIG_DEV_RANDOM_DRBG_SEED
#define WEAVE_CONFIG_DEV_RANDOM_DRBG_SEED              0
#endif // WEAVE_CONFIG_DEV_RANDOM_DRBG_SEED

/**
 *  @def WEAVE_CONFIG_DEV_RANDOM_DEVICE_NAME
 *
 *  @brief
 *    The device name used by the dev random entropy function.
 *
 *  @note Only meaningful when #WEAVE_CONFIG_DEV_RANDOM_DRBG_SEED is enabled.
 *
 */
#ifndef WEAVE_CONFIG_DEV_RANDOM_DEVICE_NAME
#define WEAVE_CONFIG_DEV_RANDOM_DEVICE_NAME                 "/dev/urandom"
#endif // WEAVE_CONFIG_DEV_RANDOM_DEVICE_NAME



/**
 *  @name Weave AES Block Cipher Algorithm Implementation Configuration.
 *
 *  @brief
 *    The following definitions enable one of the potential Weave
 *    AES implementation options:
 *
 *      * #WEAVE_CONFIG_AES_IMPLEMENTATION_PLATFORM
 *      * #WEAVE_CONFIG_AES_IMPLEMENTATION_OPENSSL
 *
 *    Note that these options are mutually exclusive and only one of
 *    these options should be set.
 *
 *  @{
 */

/**
 *  @def WEAVE_CONFIG_AES_IMPLEMENTATION_PLATFORM
 *
 *  @brief
 *    Enable (1) or disable (0) support for platform-specific
 *    implementation of the Weave AES functions.
 *
 *  @note This configuration is mutual exclusive with
 *        #WEAVE_CONFIG_AES_IMPLEMENTATION_OPENSSL and
 *        #WEAVE_CONFIG_AES_IMPLEMENTATION_AESNI
 *
 */
#ifndef WEAVE_CONFIG_AES_IMPLEMENTATION_PLATFORM
#define WEAVE_CONFIG_AES_IMPLEMENTATION_PLATFORM            0
#endif // WEAVE_CONFIG_AES_IMPLEMENTATION_PLATFORM

/**
 *  @def WEAVE_CONFIG_AES_IMPLEMENTATION_OPENSSL
 *
 *  @brief
 *    Enable (1) or disable (0) support for the OpenSSL
 *    implementation of the Weave AES functions.
 *
 *  @note This configuration is mutual exclusive with
 *        #WEAVE_CONFIG_AES_IMPLEMENTATION_PLATFORM and
 *        #WEAVE_CONFIG_AES_IMPLEMENTATION_AESNI
 *
 */
#ifndef WEAVE_CONFIG_AES_IMPLEMENTATION_OPENSSL
#define WEAVE_CONFIG_AES_IMPLEMENTATION_OPENSSL             1
#endif // WEAVE_CONFIG_AES_IMPLEMENTATION_OPENSSL

/**
 *  @def WEAVE_CONFIG_AES_IMPLEMENTATION_AESNI
 *
 *  @brief
 *    Enable (1) or disable (0) support for an implementation
 *    of the Weave AES functions using Intel AES-NI intrinsics.
 *
 *  @note This configuration is mutual exclusive with
 *        #WEAVE_CONFIG_AES_IMPLEMENTATION_PLATFORM and
 *        #WEAVE_CONFIG_AES_IMPLEMENTATION_OPENSSL
 *
 */
#ifndef WEAVE_CONFIG_AES_IMPLEMENTATION_AESNI
#define WEAVE_CONFIG_AES_IMPLEMENTATION_AESNI              0
#endif // WEAVE_CONFIG_AES_IMPLEMENTATION_AESNI

/**
 *  @}
 */

#if ((WEAVE_CONFIG_AES_IMPLEMENTATION_PLATFORM + WEAVE_CONFIG_AES_IMPLEMENTATION_OPENSSL + WEAVE_CONFIG_AES_IMPLEMENTATION_AESNI) != 1)
#error "Please assert exactly one of WEAVE_CONFIG_AES_IMPLEMENTATION_PLATFORM, WEAVE_CONFIG_AES_IMPLEMENTATION_OPENSSL or WEAVE_CONFIG_AES_IMPLEMENTATION_AESNI."
#endif // ((WEAVE_CONFIG_AES_IMPLEMENTATION_PLATFORM + WEAVE_CONFIG_AES_IMPLEMENTATION_OPENSSL + WEAVE_CONFIG_AES_IMPLEMENTATION_AESNI) != 1)

/**
 *  @def WEAVE_CONFIG_AES_USE_EXPANDED_KEY
 *
 *  @brief
 *    Defines whether AES key is used in its expanded (1) or native (0) form.
 *
 *  @note OpenSSL AES implementation uses its own AES key declaration
 *        and this configuration option is ignored when
 *        #WEAVE_CONFIG_AES_IMPLEMENTATION_OPENSSL is set.
 *
 */
#ifndef WEAVE_CONFIG_AES_USE_EXPANDED_KEY
#define WEAVE_CONFIG_AES_USE_EXPANDED_KEY                   0
#endif // WEAVE_CONFIG_AES_USE_EXPANDED_KEY


/**
 *  @name Weave SHA1 and SHA256 Hash Algorithms Implementation Configuration.
 *
 *  @brief
 *    The following definitions enable one of three potential Weave
 *    hash implementation options:
 *
 *      * #WEAVE_CONFIG_HASH_IMPLEMENTATION_PLATFORM
 *      * #WEAVE_CONFIG_HASH_IMPLEMENTATION_MINCRYPT
 *      * #WEAVE_CONFIG_HASH_IMPLEMENTATION_OPENSSL
 *
 *    Note that these options are mutually exclusive and only one of
 *    these options should be set.
 *
 *  @{
 */

/**
 *  @def WEAVE_CONFIG_HASH_IMPLEMENTATION_PLATFORM
 *
 *  @brief
 *    Enable (1) or disable (0) support for platform-specific
 *    implementation of the Weave SHA1 and SHA256 hashes.
 *
 *  @note This configuration is mutual exclusive with
 *        #WEAVE_CONFIG_HASH_IMPLEMENTATION_MINCRYPT and
 *        #WEAVE_CONFIG_HASH_IMPLEMENTATION_OPENSSL.
 *
 */
#ifndef WEAVE_CONFIG_HASH_IMPLEMENTATION_PLATFORM
#define WEAVE_CONFIG_HASH_IMPLEMENTATION_PLATFORM           0
#endif // WEAVE_CONFIG_HASH_IMPLEMENTATION_PLATFORM

/**
 *  @def WEAVE_CONFIG_HASH_IMPLEMENTATION_MINCRYPT
 *
 *  @brief
 *    Enable (1) or disable (0) support for a Weave-provided
 *    implementation of the Weave SHA1 and SHA256 hash functions.
 *    This implementation is using sha1 and sha256 engines from
 *    mincrypt library of Android core.
 *
 *  @note This configuration is mutual exclusive with
 *        #WEAVE_CONFIG_HASH_IMPLEMENTATION_PLATFORM and
 *        #WEAVE_CONFIG_HASH_IMPLEMENTATION_OPENSSL.
 *
 */
#ifndef WEAVE_CONFIG_HASH_IMPLEMENTATION_MINCRYPT
#define WEAVE_CONFIG_HASH_IMPLEMENTATION_MINCRYPT           0
#endif // WEAVE_CONFIG_HASH_IMPLEMENTATION_MINCRYPT

/**
 *  @def WEAVE_CONFIG_HASH_IMPLEMENTATION_OPENSSL
 *
 *  @brief
 *    Enable (1) or disable (0) support for the OpenSSL
 *    implementation of the Weave SHA1 and SHA256 hash functions.
 *
 *  @note This configuration is mutual exclusive with
 *        #WEAVE_CONFIG_HASH_IMPLEMENTATION_PLATFORM and
 *        #WEAVE_CONFIG_HASH_IMPLEMENTATION_MINCRYPT.
 *
 */
#ifndef WEAVE_CONFIG_HASH_IMPLEMENTATION_OPENSSL
#define WEAVE_CONFIG_HASH_IMPLEMENTATION_OPENSSL            1
#endif // WEAVE_CONFIG_HASH_IMPLEMENTATION_OPENSSL

/**
 *  @}
 */

#if ((WEAVE_CONFIG_HASH_IMPLEMENTATION_PLATFORM + WEAVE_CONFIG_HASH_IMPLEMENTATION_MINCRYPT + WEAVE_CONFIG_HASH_IMPLEMENTATION_OPENSSL) != 1)
#error "Please assert exactly one of WEAVE_CONFIG_HASH_IMPLEMENTATION_PLATFORM, WEAVE_CONFIG_HASH_IMPLEMENTATION_MINCRYPT, or WEAVE_CONFIG_HASH_IMPLEMENTATION_OPENSSL."
#endif // ((WEAVE_CONFIG_HASH_IMPLEMENTATION_PLATFORM + WEAVE_CONFIG_HASH_IMPLEMENTATION_MINCRYPT + WEAVE_CONFIG_HASH_IMPLEMENTATION_OPENSSL) != 1)


/**
 *  @name Weave key export protocol configuration.
 *
 *  @brief
 *    The following definitions define the configurations supported
 *    for Weave's key export protocol.
 *
 *    This protocol is used to export secret key material from Weave device.
 *    Weave supports the following protocol configurations:
 *
 *    * #WEAVE_CONFIG_SUPPORT_KEY_EXPORT_CONFIG1
 *    * #WEAVE_CONFIG_SUPPORT_KEY_EXPORT_CONFIG2
 *
 *    which are summarized in the table below:
 *
 *    | Configuration  |   Curve   | Notes                   |
 *    | :------------: | :-------: | :---------------------- |
 *    | 1              | secp224r1 | Default configuration   |
 *    | 2              | secp256r1 |                         |
 *
 *  @{
 *
 */

/**
 *  @def WEAVE_CONFIG_SUPPORT_KEY_EXPORT_CONFIG1
 *
 *  @brief
 *    This Weave key export protocol configuration uses secp224r1
 *    Elliptic Curve.
 *
 */
#ifndef WEAVE_CONFIG_SUPPORT_KEY_EXPORT_CONFIG1
#define WEAVE_CONFIG_SUPPORT_KEY_EXPORT_CONFIG1            1
#endif // WEAVE_CONFIG_SUPPORT_KEY_EXPORT_CONFIG1

/**
 *  @def WEAVE_CONFIG_SUPPORT_KEY_EXPORT_CONFIG2
 *
 *  @brief
 *    This Weave key export protocol configuration uses secp256r1
 *    Elliptic Curve.
 *
 */
#ifndef WEAVE_CONFIG_SUPPORT_KEY_EXPORT_CONFIG2
#define WEAVE_CONFIG_SUPPORT_KEY_EXPORT_CONFIG2            1
#endif // WEAVE_CONFIG_SUPPORT_KEY_EXPORT_CONFIG2

/**
 *  @}
 */


/**
 *  @def WEAVE_CONFIG_ALLOW_NON_STANDARD_ELLIPTIC_CURVES
 *
 *  @brief
 *    Allow the use of elliptic curves beyond the standard ones
 *    supported by Weave.
 *
 */
#ifndef WEAVE_CONFIG_ALLOW_NON_STANDARD_ELLIPTIC_CURVES
#define WEAVE_CONFIG_ALLOW_NON_STANDARD_ELLIPTIC_CURVES     0
#endif // WEAVE_CONFIG_ALLOW_NON_STANDARD_ELLIPTIC_CURVES

/**
 *  @def WEAVE_CONFIG_MAX_EC_BITS
 *
 *  @brief
 *    The maximum size elliptic curve supported, in bits.
 *
 */
#ifndef WEAVE_CONFIG_MAX_EC_BITS
#define WEAVE_CONFIG_MAX_EC_BITS                            256
#endif // WEAVE_CONFIG_MAX_EC_BITS

/**
 *  @def WEAVE_CONFIG_MAX_PEER_NODES
 *
 *  @brief
 *    Maximum number of peer nodes that the local node can communicate
 *    with.
 *
 */
#ifndef WEAVE_CONFIG_MAX_PEER_NODES
#define WEAVE_CONFIG_MAX_PEER_NODES                         128
#endif // WEAVE_CONFIG_MAX_PEER_NODES

/**
 *  @def WEAVE_CONFIG_MAX_CONNECTIONS
 *
 *  @brief
 *    Maximum number of simultaneously active connections.
 *
 */
#ifndef WEAVE_CONFIG_MAX_CONNECTIONS
#define WEAVE_CONFIG_MAX_CONNECTIONS                        INET_CONFIG_NUM_TCP_ENDPOINTS
#endif // WEAVE_CONFIG_MAX_CONNECTIONS

/**
 *  @def WEAVE_CONFIG_MAX_TUNNELS
 *
 *  @brief
 *    Maximum number of simultaneously active connection tunnels.
 *
 */
#ifndef WEAVE_CONFIG_MAX_TUNNELS
#define WEAVE_CONFIG_MAX_TUNNELS                            1
#endif // WEAVE_CONFIG_MAX_TUNNELS

/**
 *  @def WEAVE_CONFIG_MAX_SESSION_KEYS
 *
 *  @brief
 *    Maximum number of simultaneously active session keys.
 *
 */
#ifndef WEAVE_CONFIG_MAX_SESSION_KEYS
#define WEAVE_CONFIG_MAX_SESSION_KEYS                       WEAVE_CONFIG_MAX_CONNECTIONS
#endif // WEAVE_CONFIG_MAX_SESSION_KEYS

/**
 *  @def WEAVE_CONFIG_MAX_APPLICATION_EPOCH_KEYS
 *
 *  @brief
 *    Maximum number of simultaneously supported application epoch keys.
 *    This define should be set to the maximum number of epoch keys
 *    that can be simultaneously provisioned on Weave node by Weave
 *    service. The maximum supported value is 8, however, in most cases
 *    only two such keys will exist on device at any given point in time.
 *
 */
#ifndef WEAVE_CONFIG_MAX_APPLICATION_EPOCH_KEYS
#define WEAVE_CONFIG_MAX_APPLICATION_EPOCH_KEYS             4
#endif // WEAVE_CONFIG_MAX_APPLICATION_EPOCH_KEYS

/**
 *  @def WEAVE_CONFIG_MAX_APPLICATION_GROUPS
 *
 *  @brief
 *    Maximum number of simultaneously supported application groups.
 *    This define should be set to the number of Weave application
 *    groups, in which associated Weave node has membership.
 *
 */
#ifndef WEAVE_CONFIG_MAX_APPLICATION_GROUPS
#define WEAVE_CONFIG_MAX_APPLICATION_GROUPS                 8
#endif // WEAVE_CONFIG_MAX_APPLICATION_GROUPS

/**
 *  @def WEAVE_CONFIG_USE_APP_GROUP_KEYS_FOR_MSG_ENC
 *
 *  @brief
 *    Enable (1) or disable (0) support for the application group keys
 *    used for Weave message encryption.
 *
 */
#ifndef WEAVE_CONFIG_USE_APP_GROUP_KEYS_FOR_MSG_ENC
#define WEAVE_CONFIG_USE_APP_GROUP_KEYS_FOR_MSG_ENC         1
#endif // WEAVE_CONFIG_USE_APP_GROUP_KEYS_FOR_MSG_ENC

/**
 *  @def WEAVE_CONFIG_MAX_CACHED_MSG_ENC_APP_KEYS
 *
 *  @brief
 *    Maximum number of simultaneously cached Weave message encryption
 *    application keys.
 *    Caching these keys speeds up message encoding/decoding processes
 *    and eliminates the need to retrieve constituent key material from
 *    the platform memory every time we derive these keys.
 *    This define can be set equal to the number of application groups
 *    (#WEAVE_CONFIG_MAX_APPLICATION_GROUPS) supported by the Weave node
 *    such that exactly one key can be cached for each application group.
 *    It might be a good idea to allocate few more entries in the key
 *    cache for the corner cases, where application group is having
 *    simultaneous conversations using an 'old' and a 'new' epoch key.
 *
 *  @note This configuration is only relevant when
 *        #WEAVE_CONFIG_USE_APP_GROUP_KEYS_FOR_MSG_ENC is set and
 *        ignored otherwise.
 *
 */
#ifndef WEAVE_CONFIG_MAX_CACHED_MSG_ENC_APP_KEYS
#define WEAVE_CONFIG_MAX_CACHED_MSG_ENC_APP_KEYS            (WEAVE_CONFIG_MAX_APPLICATION_GROUPS + 1)
#endif // WEAVE_CONFIG_MAX_CACHED_MSG_ENC_APP_KEYS

#if !(WEAVE_CONFIG_MAX_CACHED_MSG_ENC_APP_KEYS > 0 && WEAVE_CONFIG_MAX_CACHED_MSG_ENC_APP_KEYS < 256)
#error "Please set WEAVE_CONFIG_MAX_CACHED_MSG_ENC_APP_KEYS to a value greater than zero and smaller than 256."
#endif // !(WEAVE_CONFIG_MAX_CACHED_MSG_ENC_APP_KEYS > 0 && WEAVE_CONFIG_MAX_CACHED_MSG_ENC_APP_KEYS < 256)

/**
 *  @name Weave Encrypted Passcode Configuration
 *
 *  @brief
 *    The following definitions enable (1) or disable (0) supported for
 *    Weave encrypted passcode configurations. Each configuration
 *    uniquely specifies how Weave passcode was encrypted, authenticated,
 *    and structured. Weave supports the following passcode
 *    configurations:
 *
 *    * #WEAVE_CONFIG_SUPPORT_PASSCODE_CONFIG1_TEST_ONLY
 *    * #WEAVE_CONFIG_SUPPORT_PASSCODE_CONFIG2
 *
 *    which are summarized in the table below:
 *
 *    | Configuration | Encryption | Authentication | Fingerprint | Notes                 |
 *    | :-----------: | :--------: | :------------: | :---------: | :-------------------- |
 *    | 1             | -          | SHA1 Hash      | SHA1 Hash   | Test-only             |
 *    | 2             | AES128-ECB | SHA1 HMAC      | SHA1 HMAC   | Default configuration |
 *
 *  @{
 *
 */

/**
 *  @def WEAVE_CONFIG_SUPPORT_PASSCODE_CONFIG1_TEST_ONLY
 *
 *  @brief
 *    This Weave passcode configuration does not encrypt the passcode
 *    and doesn't use secret keys to authenticate and uniquely identify
 *    (fingerprint) the passcode.
 *
 *  @note For this configuration the computational overhead of the
 *        cryptography has largely been disabled since the focus
 *        of this configuration is testing the overall passcode
 *        encryption/decryption protocol, independently of the
 *        cryptography.
 *
 */
#ifndef WEAVE_CONFIG_SUPPORT_PASSCODE_CONFIG1_TEST_ONLY
#define WEAVE_CONFIG_SUPPORT_PASSCODE_CONFIG1_TEST_ONLY     0
#endif // WEAVE_CONFIG_SUPPORT_PASSCODE_CONFIG1_TEST_ONLY

/**
 *  @def WEAVE_CONFIG_SUPPORT_PASSCODE_CONFIG2
 *
 *  @brief
 *    This Weave passcode configuration uses AES128 algorithm in ECB
 *    mode to encrypt passcodes. It also uses SHA1 Hash-based Message
 *    Authentication Code (HMAC) to authenticate and uniquely identify
 *    (fingerprint) the passcode.
 *
 */
#ifndef WEAVE_CONFIG_SUPPORT_PASSCODE_CONFIG2
#define WEAVE_CONFIG_SUPPORT_PASSCODE_CONFIG2               1
#endif // WEAVE_CONFIG_SUPPORT_PASSCODE_CONFIG2

/**
 *  @}
 */

/**
 *  @def WEAVE_CONFIG_DEFAULT_SECURITY_SESSION_ESTABLISHMENT_TIMEOUT
 *
 *  @brief
 *    The default amount of time, in milliseconds, after which an in-progess
 *    session establishment will fail due to a timeout.
 *
 */
#ifndef WEAVE_CONFIG_DEFAULT_SECURITY_SESSION_ESTABLISHMENT_TIMEOUT
#define WEAVE_CONFIG_DEFAULT_SECURITY_SESSION_ESTABLISHMENT_TIMEOUT  30000
#endif // WEAVE_CONFIG_DEFAULT_SECURITY_SESSION_ESTABLISHMENT_TIMEOUT

/**
 *  @def WEAVE_CONFIG_DEFAULT_SECURITY_SESSION_IDLE_TIMEOUT
 *
 *  @brief
 *    The default minimum amount of time, in milliseconds, that an unreserved and idle
 *    security session will be allowed to exist before being destroyed.  In practice,
 *    unreserved idle sessions can exist for up to twice this value.
 *
 */
#ifndef WEAVE_CONFIG_DEFAULT_SECURITY_SESSION_IDLE_TIMEOUT
#define WEAVE_CONFIG_DEFAULT_SECURITY_SESSION_IDLE_TIMEOUT           15000
#endif // WEAVE_CONFIG_DEFAULT_SECURITY_SESSION_IDLE_TIMEOUT

/**
 *  @def WEAVE_CONFIG_NUM_MESSAGE_BUFS
 *
 *  @brief
 *    Total number of message buffers. Only used for the BSD sockets
 *    configuration.
 *
 */
#ifndef WEAVE_CONFIG_NUM_MESSAGE_BUFS
#define WEAVE_CONFIG_NUM_MESSAGE_BUFS                       16
#endif // WEAVE_CONFIG_NUM_MESSAGE_BUFS

/**
 *  @def WEAVE_CONFIG_MAX_UNSOLICITED_MESSAGE_HANDLERS
 *
 *  @brief
 *    Maximum number of simultaneously active unsolicited message
 *    handlers.
 *
 */
#ifndef WEAVE_CONFIG_MAX_UNSOLICITED_MESSAGE_HANDLERS
#define WEAVE_CONFIG_MAX_UNSOLICITED_MESSAGE_HANDLERS       32
#endif // WEAVE_CONFIG_MAX_UNSOLICITED_MESSAGE_HANDLERS

/**
 *  @def WEAVE_CONFIG_MAX_EXCHANGE_CONTEXTS
 *
 *  @brief
 *    Maximum number of simultaneously active exchange contexts.
 *
 */
#ifndef WEAVE_CONFIG_MAX_EXCHANGE_CONTEXTS
#define WEAVE_CONFIG_MAX_EXCHANGE_CONTEXTS                  16
#endif // WEAVE_CONFIG_MAX_EXCHANGE_CONTEXTS

/**
 *  @def WEAVE_CONFIG_MAX_BINDINGS
 *
 *  @brief
 *    Maximum number of simultaneously active bindings per WeaveExchangeManager
 *    The new single source TimeSync client takes one binding.
 *    Every WDM one-way subscription takes one binding. Mutual subscription counts as two one-way subscriptions.
 *    A reserved slot is needed to take an incoming subscription request.
 *    For a device with 2 mutual subscriptions, and one single source time sync client, it needs 2 x 2 + 1 = 5 bindings at least.
 *    At least six is needed if it still wants to take new WDM subscriptions under this load.
 */
#ifndef WEAVE_CONFIG_MAX_BINDINGS
#define WEAVE_CONFIG_MAX_BINDINGS                           6
#endif // WEAVE_CONFIG_MAX_BINDINGS

/**
 *  @def WEAVE_CONFIG_MAX_INTERFACES
 *
 *  @brief
 *    Maximum number of network interfaces.
 *
 */
#ifndef WEAVE_CONFIG_MAX_INTERFACES
#define WEAVE_CONFIG_MAX_INTERFACES                         20
#endif // WEAVE_CONFIG_MAX_INTERFACES

/**
 *  @def WEAVE_CONFIG_MAX_LOCAL_ADDR_UDP_ENDPOINTS
 *
 *  @brief
 *    Maximum number of UDP endpoints used for sending / receiving
 *    messages from specific local IPv6 addresses.
 *
 */
#ifndef WEAVE_CONFIG_MAX_LOCAL_ADDR_UDP_ENDPOINTS
#define WEAVE_CONFIG_MAX_LOCAL_ADDR_UDP_ENDPOINTS           32
#endif // WEAVE_CONFIG_MAX_LOCAL_ADDR_UDP_ENDPOINTS

/**
 *  @def WEAVE_CONFIG_CONNECT_IP_ADDRS
 *
 *  @brief
 *    Maximum number of IP addresses tried when connecting to a
 *    hostname.
 *
 */
#ifndef WEAVE_CONFIG_CONNECT_IP_ADDRS
#define WEAVE_CONFIG_CONNECT_IP_ADDRS                       4
#endif // WEAVE_CONFIG_CONNECT_IP_ADDRS

/**
 *  @def WEAVE_CONFIG_DEFAULT_UDP_MTU_SIZE
 *
 *  @brief
 *    The default MTU size for an IPv6 datagram carrying UDP. This is useful
 *    for senders who want to send UDP Weave messages that fit within a single
 *    IPv6 datagram.
 *
 *    1280 is the guaranteed minimum IPv6 MTU.
 *
 */
#ifndef WEAVE_CONFIG_DEFAULT_UDP_MTU_SIZE
#define WEAVE_CONFIG_DEFAULT_UDP_MTU_SIZE                   1280
#endif // WEAVE_CONFIG_DEFAULT_UDP_MTU_SIZE

/**
 *  @def WEAVE_HEADER_RESERVE_SIZE
 *
 *  @brief
 *    The number of bytes to reserve in a network packet buffer to contain the
 *    Weave message and exchange headers.
 *
 *    This number was calculated as follows:
 *
 *      Weave Message Header:
 *
 *          2 -- Frame Length
 *          2 -- Message Header
 *          4 -- Message Id
 *          8 -- Source Node Id
 *          8 -- Destination Node Id
 *          2 -- Key Id
 *
 *      Weave Exchange Header:
 *
 *          1 -- Application Version
 *          1 -- Message Type
 *          2 -- Exchange Id
 *          4 -- Profile Id
 *          4 -- Acknowleged Message Id
 *
 *    @note A number of these fields are optional or not presently used.
 *          So most headers will be considerably smaller than this.
 *
 */
#ifndef WEAVE_HEADER_RESERVE_SIZE
#define WEAVE_HEADER_RESERVE_SIZE                           38
#endif // WEAVE_HEADER_RESERVE_SIZE

/**
 *  @def WEAVE_TRAILER_RESERVE_SIZE
 *
 *  @brief
 *    <TBD>
 *
 */
#ifndef WEAVE_TRAILER_RESERVE_SIZE
#define WEAVE_TRAILER_RESERVE_SIZE                          20
#endif // WEAVE_TRAILER_RESERVE_SIZE

/**
 *  @def WEAVE_PORT
 *
 *  @brief
 *    Weave TCP/UDP port for secured Weave traffic.
 *
 */
#ifndef WEAVE_PORT
#define WEAVE_PORT                                          11095
#endif // WEAVE_PORT

/**
 *  @def WEAVE_UNSECURED_PORT
 *
 *  @brief
 *    Weave TCP/UDP port for unsecured Weave traffic.
 *
 */
#ifndef WEAVE_UNSECURED_PORT
#define WEAVE_UNSECURED_PORT                                11096
#endif // WEAVE_UNSECURED_PORT

/**
 *  @def WEAVE_CONFIG_SECURITY_TEST_MODE
 *
 *  @brief
 *    Enable various features that make it easier to debug secure Weave communication.
 *
 *  @note
 *    WARNING: This option makes it possible to circumvent basic weave security functionality,
 *    including message encryption. Because of this it SHOULD NEVER BE ENABLED IN PRODUCTION BUILDS.
 */
#ifndef WEAVE_CONFIG_SECURITY_TEST_MODE
#define WEAVE_CONFIG_SECURITY_TEST_MODE                     0
#endif // WEAVE_CONFIG_SECURITY_TEST_MODE

/**
 *  @def WEAVE_CONFIG_ENABLE_DNS_RESOLVER
 *
 *  @brief
 *    Enable support for resolving hostnames with a DNS resolver.
 */
#ifndef WEAVE_CONFIG_ENABLE_DNS_RESOLVER
#define WEAVE_CONFIG_ENABLE_DNS_RESOLVER                    (INET_CONFIG_ENABLE_DNS_RESOLVER)
#endif // WEAVE_CONFIG_ENABLE_DNS_RESOLVER

/**
 *  @def WEAVE_CONFIG_RESOLVE_IPADDR_LITERAL
 *
 *  @brief
 *    Enable support for resolving hostnames as literal IP addresses without a DNS resolver.
 *
 *    For historical reasons, the default is \c TRUE where \c WEAVE_SYSTEM_CONFIG_USE_SOCKETS=1,
 *    and \c FALSE otherwise. The exception in the LwIP-only case was originally made to facilitate
 *    integration and change management with existing development lines. The default may
 *    change in the future to \c TRUE in all cases.
 */
#ifndef WEAVE_CONFIG_RESOLVE_IPADDR_LITERAL
#define WEAVE_CONFIG_RESOLVE_IPADDR_LITERAL                 (WEAVE_SYSTEM_CONFIG_USE_SOCKETS)
#endif // WEAVE_CONFIG_RESOLVE_IPADDR_LITERAL

/**
 *  @def WEAVE_CONFIG_ENABLE_TARGETED_LISTEN
 *
 *  @brief
 *    Enable support for listening on particular addresses/interfaces.
 *
 *    This allows testing multiple instances of the Weave stack
 *    running on a single host.
 *
 */
#ifndef WEAVE_CONFIG_ENABLE_TARGETED_LISTEN
#define WEAVE_CONFIG_ENABLE_TARGETED_LISTEN                 (!WEAVE_SYSTEM_CONFIG_USE_LWIP)
#endif // WEAVE_CONFIG_ENABLE_TARGETED_LISTEN

/**
 *  @def WEAVE_CONFIG_ENABLE_UNSECURED_TCP_LISTEN
 *
 *  @brief
 *    Enable support for receiving TCP connections over an unsecured
 *    network layer (for example, from a device that is provisionally joined
 *    to a 6LowPAN network but does not possess the 802.15.4 network
 *    keys).
 *
 */
#ifndef WEAVE_CONFIG_ENABLE_UNSECURED_TCP_LISTEN
#define WEAVE_CONFIG_ENABLE_UNSECURED_TCP_LISTEN            0
#endif // WEAVE_CONFIG_ENABLE_UNSECURED_TCP_LISTEN

/**
 *  @def WEAVE_CONFIG_DEBUG_CERT_VALIDATION
 *
 *  @brief
 *    Enable support for debugging output from certificate validation.
 *
 */
#ifndef WEAVE_CONFIG_DEBUG_CERT_VALIDATION
#define WEAVE_CONFIG_DEBUG_CERT_VALIDATION                  1
#endif // WEAVE_CONFIG_DEBUG_CERT_VALIDATION

/**
 *  @def WEAVE_CONFIG_ENABLE_PASE_INITIATOR
 *
 *  @brief
 *    Enable support for initiating PASE sessions.
 *
 */
#ifndef WEAVE_CONFIG_ENABLE_PASE_INITIATOR
#define WEAVE_CONFIG_ENABLE_PASE_INITIATOR                  1
#endif // WEAVE_CONFIG_ENABLE_PASE_INITIATOR

/**
 *  @def WEAVE_CONFIG_ENABLE_PASE_RESPONDER
 *
 *  @brief
 *    Enable support for responding to PASE sessions initiated by
 *    other nodes.
 *
 */
#ifndef WEAVE_CONFIG_ENABLE_PASE_RESPONDER
#define WEAVE_CONFIG_ENABLE_PASE_RESPONDER                  1
#endif // WEAVE_CONFIG_ENABLE_PASE_RESPONDER

/**
 *  @def WEAVE_CONFIG_ENABLE_CASE_INITIATOR
 *
 *  @brief
 *    Enable support for initiating CASE sessions.
 *
 */
#ifndef WEAVE_CONFIG_ENABLE_CASE_INITIATOR
#define WEAVE_CONFIG_ENABLE_CASE_INITIATOR                  1
#endif // WEAVE_CONFIG_ENABLE_CASE_INITIATOR

/**
 *  @def WEAVE_CONFIG_ENABLE_CASE_RESPONDER
 *
 *  @brief
 *    Enable support for responding to CASE sessions initiated by other nodes.
 *
 */
#ifndef WEAVE_CONFIG_ENABLE_CASE_RESPONDER
#define WEAVE_CONFIG_ENABLE_CASE_RESPONDER                  1
#endif // WEAVE_CONFIG_ENABLE_CASE_RESPONDER

/**
 *  @def WEAVE_CONFIG_SUPPORT_CASE_CONFIG1
 *
 *  @brief
 *    Enable use of CASE protocol configuration 1.
 *
 *  @note CASE config 1 uses SHA-1 for message signatures, which is deprecated.
 *
 */
#ifndef WEAVE_CONFIG_SUPPORT_CASE_CONFIG1
#define WEAVE_CONFIG_SUPPORT_CASE_CONFIG1                   1
#endif // WEAVE_CONFIG_SUPPORT_CASE_CONFIG1

/**
 *  @def WEAVE_CONFIG_DEFAULT_CASE_CURVE_ID
 *
 *  @brief
 *    Default ECDH curve to be used when initiating a CASE session, if not overridden by the application.
 *
 */
#ifndef WEAVE_CONFIG_DEFAULT_CASE_CURVE_ID
#if WEAVE_CONFIG_SUPPORT_ELLIPTIC_CURVE_SECP224R1
#define WEAVE_CONFIG_DEFAULT_CASE_CURVE_ID                  (nl::Weave::Profiles::Security::kWeaveCurveId_secp224r1)
#elif WEAVE_CONFIG_SUPPORT_ELLIPTIC_CURVE_SECP256R1
#define WEAVE_CONFIG_DEFAULT_CASE_CURVE_ID                  (nl::Weave::Profiles::Security::kWeaveCurveId_prime256v1)
#elif WEAVE_CONFIG_SUPPORT_ELLIPTIC_CURVE_SECP192R1
#define WEAVE_CONFIG_DEFAULT_CASE_CURVE_ID                  (nl::Weave::Profiles::Security::kWeaveCurveId_prime192v1)
#else
#define WEAVE_CONFIG_DEFAULT_CASE_CURVE_ID                  (nl::Weave::Profiles::Security::kWeaveCurveId_secp160r1)
#endif
#endif // WEAVE_CONFIG_DEFAULT_CASE_CURVE_ID

/**
 *  @def WEAVE_CONFIG_DEFAULT_CASE_ALLOWED_CURVES
 *
 *  @brief
 *    Default set of ECDH curves allowed to be used in a CASE session (initiating or responding), if not overridden by the application.
 *
 */
#ifndef WEAVE_CONFIG_DEFAULT_CASE_ALLOWED_CURVES
#if WEAVE_CONFIG_SUPPORT_ELLIPTIC_CURVE_SECP224R1 || WEAVE_CONFIG_SUPPORT_ELLIPTIC_CURVE_SECP256R1
#define WEAVE_CONFIG_DEFAULT_CASE_ALLOWED_CURVES            (nl::Weave::Profiles::Security::kWeaveCurveSet_secp224r1|nl::Weave::Profiles::Security::kWeaveCurveSet_prime256v1)
#else
#define WEAVE_CONFIG_DEFAULT_CASE_ALLOWED_CURVES            (nl::Weave::Profiles::Security::kWeaveCurveSet_All)
#endif
#endif // WEAVE_CONFIG_DEFAULT_CASE_ALLOWED_CURVES

/**
 *  @def WEAVE_CONFIG_MAX_SHARED_SESSIONS_END_NODES
 *
 *  @brief
 *    The maximum number of end nodes simultaneously supported
 *    for all active shared sessions.
 *
 */
#ifndef WEAVE_CONFIG_MAX_SHARED_SESSIONS_END_NODES
#define WEAVE_CONFIG_MAX_SHARED_SESSIONS_END_NODES          10
#endif // WEAVE_CONFIG_MAX_SHARED_SESSIONS_END_NODES

/**
 *  @def WEAVE_CONFIG_MAX_END_NODES_PER_SHARED_SESSION
 *
 *  @brief
 *    The maximum number of end nodes simultaneously supported
 *    per active shared session.
 *
 */
#ifndef WEAVE_CONFIG_MAX_END_NODES_PER_SHARED_SESSION
#define WEAVE_CONFIG_MAX_END_NODES_PER_SHARED_SESSION       10
#endif // WEAVE_CONFIG_MAX_END_NODES_PER_SHARED_SESSION

/**
 *  @def WEAVE_CONFIG_ENABLE_TAKE_INITIATOR
 *
 *  @brief
 *    Enable support for initiating TAKE sessions.
 *
 */
#ifndef WEAVE_CONFIG_ENABLE_TAKE_INITIATOR
#define WEAVE_CONFIG_ENABLE_TAKE_INITIATOR                  0
#endif // WEAVE_CONFIG_ENABLE_TAKE_INITIATOR

/**
 *  @def WEAVE_CONFIG_ENABLE_TAKE_RESPONDER
 *
 *  @brief
 *    Enable support for responding to TAKE sessions initiated by other nodes.
 *
 */
#ifndef WEAVE_CONFIG_ENABLE_TAKE_RESPONDER
#define WEAVE_CONFIG_ENABLE_TAKE_RESPONDER                  0
#endif // WEAVE_CONFIG_ENABLE_TAKE_RESPONDER

/**
 *  @def WEAVE_CONFIG_ENABLE_KEY_EXPORT_INITIATOR
 *
 *  @brief
 *    Enable support for initiating key export request.
 *
 */
#ifndef WEAVE_CONFIG_ENABLE_KEY_EXPORT_INITIATOR
#define WEAVE_CONFIG_ENABLE_KEY_EXPORT_INITIATOR            1
#endif // WEAVE_CONFIG_ENABLE_KEY_EXPORT_INITIATOR

/**
 *  @def WEAVE_CONFIG_ENABLE_KEY_EXPORT_RESPONDER
 *
 *  @brief
 *    Enable support for responding to key export request initiated by other nodes.
 *
 */
#ifndef WEAVE_CONFIG_ENABLE_KEY_EXPORT_RESPONDER
#define WEAVE_CONFIG_ENABLE_KEY_EXPORT_RESPONDER            1
#endif // WEAVE_CONFIG_ENABLE_KEY_EXPORT_RESPONDER

/**
 *  @def WEAVE_CONFIG_REQUIRE_AUTH
 *
 *  @brief
 *    Enable (1) or disable (0) support for client requests via an
 *    authenticated session.
 *
 *    This broadly controls whether or not a number of Weave servers
 *    require client requests to be sent via an authenticated session
 *    and provides a default configuration value to these related
 *    definitions:
 *
 *      * #WEAVE_CONFIG_REQUIRE_AUTH_DEVICE_CONTROL
 *      * #WEAVE_CONFIG_REQUIRE_AUTH_FABRIC_PROV
 *      * #WEAVE_CONFIG_REQUIRE_AUTH_NETWORK_PROV
 *      * #WEAVE_CONFIG_REQUIRE_AUTH_SERVICE_PROV
 *
 *    @note These configurations shall be deasserted for development
 *          and testing purposes only. No Weave-enabled device shall
 *          be certified without these asserted.
 *
 */
#ifndef WEAVE_CONFIG_REQUIRE_AUTH
#define WEAVE_CONFIG_REQUIRE_AUTH                           1
#endif // WEAVE_CONFIG_REQUIRE_AUTH

/**
 *  @def WEAVE_CONFIG_REQUIRE_AUTH_DEVICE_CONTROL
 *
 *  @brief
 *    Enable (1) or disable (0) support for client requests to the
 *    Weave Device Control server via an authenticated session. See
 *    also #WEAVE_CONFIG_REQUIRE_AUTH.
 *
 *    @note This configuration shall be deasserted for development
 *          and testing purposes only. No Weave-enabled device shall
 *          be certified without this asserted.
 *
 */
#ifndef WEAVE_CONFIG_REQUIRE_AUTH_DEVICE_CONTROL
#define WEAVE_CONFIG_REQUIRE_AUTH_DEVICE_CONTROL            WEAVE_CONFIG_REQUIRE_AUTH
#endif // WEAVE_CONFIG_REQUIRE_AUTH_DEVICE_CONTROL

/**
 *  @def WEAVE_CONFIG_REQUIRE_AUTH_FABRIC_PROV
 *
 *  @brief
 *    Enable (1) or disable (0) support for client requests to the
 *    Weave Fabric Provisioning server via an authenticated
 *    session. See also #WEAVE_CONFIG_REQUIRE_AUTH.
 *
 *    @note This configuration shall be deasserted for development
 *          and testing purposes only. No Weave-enabled device shall
 *          be certified without this asserted.
 *
 */
#ifndef WEAVE_CONFIG_REQUIRE_AUTH_FABRIC_PROV
#define WEAVE_CONFIG_REQUIRE_AUTH_FABRIC_PROV               WEAVE_CONFIG_REQUIRE_AUTH
#endif // WEAVE_CONFIG_REQUIRE_AUTH_FABRIC_PROV

/**
 *  @def WEAVE_CONFIG_REQUIRE_AUTH_NETWORK_PROV
 *
 *  @brief
 *    Enable (1) or disable (0) support for client requests to the
 *    Weave Network Provisioning server via an authenticated
 *    session. See also #WEAVE_CONFIG_REQUIRE_AUTH.
 *
 *    @note This configuration shall be deasserted for development
 *          and testing purposes only. No Weave-enabled device shall
 *          be certified without this asserted.
 *
 */
#ifndef WEAVE_CONFIG_REQUIRE_AUTH_NETWORK_PROV
#define WEAVE_CONFIG_REQUIRE_AUTH_NETWORK_PROV              WEAVE_CONFIG_REQUIRE_AUTH
#endif // WEAVE_CONFIG_REQUIRE_AUTH_NETWORK_PROV

/**
 *  @def WEAVE_CONFIG_REQUIRE_AUTH_SERVICE_PROV
 *
 *  @brief
 *    Enable (1) or disable (0) support for client requests to the
 *    Weave Service Provisioning server via an authenticated
 *    session. See also #WEAVE_CONFIG_REQUIRE_AUTH.
 *
 *    @note This configuration shall be deasserted for development
 *          and testing purposes only. No Weave-enabled device shall
 *          be certified without this asserted.
 *
 */
#ifndef WEAVE_CONFIG_REQUIRE_AUTH_SERVICE_PROV
#define WEAVE_CONFIG_REQUIRE_AUTH_SERVICE_PROV              WEAVE_CONFIG_REQUIRE_AUTH
#endif // WEAVE_CONFIG_REQUIRE_AUTH_SERVICE_PROV

/**
 *  @def WEAVE_CONFIG_ENABLE_PROVISIONING_BUNDLE_SUPPORT
 *
 *  @brief
 *    Enable (1) or disable (0) support for the handling of Weave
 *    Provisioning Bundles.
 *
 *    Weave Provisioning Bundles are a Weave TLV payload containing
 *    the Weave certificate, corresponding private key, and pairing
 *    code / entry key that a Weave device would have otherwise
 *    received at its time of manufacture.
 *
 *    Enable this if your family of device needs to support in-field
 *    provisioning (IFP). IFP for Weave devices is neither generally
 *    supported nor recommended.
 *
 */
#ifndef WEAVE_CONFIG_ENABLE_PROVISIONING_BUNDLE_SUPPORT
#define WEAVE_CONFIG_ENABLE_PROVISIONING_BUNDLE_SUPPORT     1
#endif // WEAVE_CONFIG_ENABLE_PROVISIONING_BUNDLE_SUPPORT

/**
 *  @def WEAVE_ERROR_LOGGING
 *
 *  @brief
 *    If asserted (1), enable logging of all messages in the
 *    @ref kLogCategory_Error category.
 *
 */
#ifndef WEAVE_ERROR_LOGGING
#define WEAVE_ERROR_LOGGING                                 1
#endif // WEAVE_ERROR_LOGGING

/**
 *  @def WEAVE_PROGRESS_LOGGING
 *
 *  @brief
 *    If asserted (1), enable logging of all messages in the
 *    @ref kLogCategory_Progress category.
 *
 */
#ifndef WEAVE_PROGRESS_LOGGING
#define WEAVE_PROGRESS_LOGGING                              1
#endif // WEAVE_PROGRESS_LOGGING

/**
 *  @def WEAVE_DETAIL_LOGGING
 *
 *  @brief
 *    If asserted (1), enable logging of all messages in the
 *    @ref kLogCategory_Detail category.
 *
 */
#ifndef WEAVE_DETAIL_LOGGING
#define WEAVE_DETAIL_LOGGING                                1
#endif // WEAVE_DETAIL_LOGGING

/**
 *  @def WEAVE_RETAIN_LOGGING
 *
 *  @brief
 *    If asserted (1), enable logging of all messages in the
 *    @ref kLogCategory_Retain category.
 *    If not defined by the application, by default WEAVE_RETAIN_LOGGING is
 *    remapped to WEAVE_PROGRESS_LOGGING
 *
 */


/**
 *  @def WEAVE_CONFIG_ENABLE_FUNCT_ERROR_LOGGING
 *
 *  @brief
 *    If asserted (1), enable logging of errors at function exit via the
 *    WeaveLogFunctError() macro.
 */
#ifndef WEAVE_CONFIG_ENABLE_FUNCT_ERROR_LOGGING
#define WEAVE_CONFIG_ENABLE_FUNCT_ERROR_LOGGING 0
#endif // WEAVE_CONFIG_ENABLE_FUNCT_ERROR_LOGGING


/**
 *  @def WEAVE_CONFIG_ENABLE_CONDITION_LOGGING
 *
 *  @brief
 *    If asserted (1), enable logging of failed conditions via the
 *    WeaveLogIfFalse() macro.
 */
#ifndef WEAVE_CONFIG_ENABLE_CONDITION_LOGGING
#define WEAVE_CONFIG_ENABLE_CONDITION_LOGGING 0
#endif // WEAVE_CONFIG_ENABLE_CONDITION_LOGGING


/**
 *  @def WEAVE_CONFIG_ENABLE_SERVICE_DIRECTORY
 *
 *  @brief
 *    If set to (1), use of the ServiceDirectory implementation
 *    is enabled. Default value is (1) or enabled.
 *
 *  @note
 *    Enabling this profile allows applications using Weave to
 *    request a connection to a particular Weave service using
 *    a predefined service endpoint. It is relevant for
 *    applications that run on devices that interact with the
 *    Service over a direct TCP/IPv4 connection rather than those
 *    that use the Weave Tunnel through a gateway device. For
 *    devices of the latter category, the Service Directory
 *    profile can be disabled via this compilation switch.
 *
 */
#ifndef WEAVE_CONFIG_ENABLE_SERVICE_DIRECTORY
#define WEAVE_CONFIG_ENABLE_SERVICE_DIRECTORY               1
#endif // WEAVE_CONFIG_ENABLE_SERVICE_DIRECTORY

/**
 *  @def WEAVE_CONFIG_SERVICE_DIR_CONNECT_TIMEOUT_MSECS
 *
 *  @brief
 *    This is the default timeout for the connect call to the
 *    directory server to wait for success or being notified
 *    of an error.
 *
 */
#ifndef WEAVE_CONFIG_SERVICE_DIR_CONNECT_TIMEOUT_MSECS
#define WEAVE_CONFIG_SERVICE_DIR_CONNECT_TIMEOUT_MSECS      (10000)
#endif // WEAVE_CONFIG_SERVICE_DIR_CONNECT_TIMEOUT_MSECS

/**
 *  @def WEAVE_CONFIG_MSG_COUNTER_SYNC_RESP_TIMEOUT
 *
 *  @brief
 *    The amount of time (in milliseconds) which a peer is given
 *    to respond to a message counter synchronization request.
 *    Depending on when the request is sent, peers may
 *    actually have up to twice this time.
 *
 */
#ifndef WEAVE_CONFIG_MSG_COUNTER_SYNC_RESP_TIMEOUT
#define WEAVE_CONFIG_MSG_COUNTER_SYNC_RESP_TIMEOUT          2000
#endif // WEAVE_CONFIG_MSG_COUNTER_SYNC_RESP_TIMEOUT

/**
 *  @def WEAVE_CONFIG_TEST
 *
 *  @brief
 *    If asserted (1), enable APIs that help implement
 *    unit and integration tests.
 *
 */
#ifndef WEAVE_CONFIG_TEST
#define WEAVE_CONFIG_TEST                                0
#endif // WEAVE_CONFIG_TEST

/**
 *  @def WEAVE_CONFIG_SHORT_ERROR_STR
 *
 *  @brief
 *    If asserted (1), produce shorter error strings that only carry a
 *    minimum of information.
 *
 */
#ifndef WEAVE_CONFIG_SHORT_ERROR_STR
#define WEAVE_CONFIG_SHORT_ERROR_STR                     0
#endif // WEAVE_CONFIG_SHORT_ERROR_STR

/**
 *  @def WEAVE_CONFIG_BLE_PKT_RESERVED_SIZE
 *
 *  @brief
 *    The number of bytes that Weave should reserve at the front of
 *    every outgoing BLE packet for the sake of the underlying BLE
 *    stack.
 *
 */
#ifndef WEAVE_CONFIG_BLE_PKT_RESERVED_SIZE
#define WEAVE_CONFIG_BLE_PKT_RESERVED_SIZE               0
#endif // WEAVE_CONFIG_BLE_PKT_RESERVED_SIZE

/**
 *  @def WEAVE_CONFIG_ENABLE_SECURITY_DEBUG_FUNCS
 *
 *  @brief
 *    Enable (1) or disable (0) support for utility functions for
 *    decoding and outputing information related to Weave security.
 *
 */
#ifndef WEAVE_CONFIG_ENABLE_SECURITY_DEBUG_FUNCS
#define WEAVE_CONFIG_ENABLE_SECURITY_DEBUG_FUNCS         1
#endif // WEAVE_CONFIG_ENABLE_SECURITY_DEBUG_FUNCS

/**
 *  @def WEAVE_CONFIG_IsPlatformErrorNonCritical(err)
 *
 *  This macro checks if a platform generated error is critical and
 *  needs to be reported to the application/caller. The criticality
 *  of an error (in the context of that platform) is determined by how
 *  it impacts the logic flow, i.e., whether or not the current flow
 *  can continue despite the error or it needs to be reported back
 *  resulting in a potential stoppage.
 *
 *  @note
 *  This is a default set of platform errors which are configured as
 *  non-critical from the context of that platform. Any new error that
 *  the platforms deem as non-critical could be added by overriding
 *  this default macro definition after careful thought towards its
 *  implication in the logic flow in that platform.
 *
 *  @param[in]    err    The #WEAVE_ERROR being checked for criticality.
 *
 *  @return    true if the error is non-critical; false otherwise.
 *
 */
#ifndef WEAVE_CONFIG_IsPlatformErrorNonCritical
#if WEAVE_SYSTEM_CONFIG_USE_LWIP
#define _WEAVE_CONFIG_IsPlatformLwIPErrorNonCritical(CODE)         \
    ((CODE) == nl::Weave::System::MapErrorLwIP(ERR_RTE)         || \
     (CODE) == nl::Weave::System::MapErrorLwIP(ERR_MEM))
#else // !WEAVE_SYSTEM_CONFIG_USE_LWIP
#define _WEAVE_CONFIG_IsPlatformLwIPErrorNonCritical(CODE)  0
#endif // !WEAVE_SYSTEM_CONFIG_USE_LWIP

#if WEAVE_SYSTEM_CONFIG_USE_SOCKETS
#define _WEAVE_CONFIG_IsPlatformPOSIXErrorNonCritical(CODE)        \
    ((CODE) == nl::Weave::System::MapErrorPOSIX(EHOSTUNREACH)   || \
     (CODE) == nl::Weave::System::MapErrorPOSIX(ENETUNREACH)    || \
     (CODE) == nl::Weave::System::MapErrorPOSIX(EADDRNOTAVAIL)  || \
     (CODE) == nl::Weave::System::MapErrorPOSIX(EPIPE))
#else // !WEAVE_SYSTEM_CONFIG_USE_SOCKETS
#define _WEAVE_CONFIG_IsPlatformPOSIXErrorNonCritical(CODE)  0
#endif // !WEAVE_SYSTEM_CONFIG_USE_SOCKETS

#define WEAVE_CONFIG_IsPlatformErrorNonCritical(CODE)              \
    (_WEAVE_CONFIG_IsPlatformPOSIXErrorNonCritical(CODE)        || \
     _WEAVE_CONFIG_IsPlatformLwIPErrorNonCritical(CODE))
#endif // WEAVE_CONFIG_IsPlatformErrorNonCritical

/**
 *  @def WEAVE_CONFIG_WILL_OVERRIDE_PLATFORM_MATH_FUNCS
 *
 *  @brief
 *    Enable (1) or disable (0) replacing math functions
 *    which may not be available in the standard/intrinsic library,
 *    and hence require special support from the platform.
 *
 */
#ifndef WEAVE_CONFIG_WILL_OVERRIDE_PLATFORM_MATH_FUNCS
#define WEAVE_CONFIG_WILL_OVERRIDE_PLATFORM_MATH_FUNCS   0
#endif // WEAVE_CONFIG_WILL_OVERRIDE_PLATFORM_MATH_FUNCS

/**
 * @def WEAVE_CONFIG_SERIALIZATION_USE_MALLOC
 *
 * @brief If turned on, then schema event serialization and
 *   deserialization will use the stdlib implementations of malloc,
 *   free, and realloc by default (if no other implementations have
 *   been provided).  We will fail at compile time if the stdlib
 *   implementations are not present.
 */
#ifndef WEAVE_CONFIG_SERIALIZATION_USE_MALLOC
#define WEAVE_CONFIG_SERIALIZATION_USE_MALLOC 0
#endif

/**
 * @def WEAVE_CONFIG_SERIALIZATION_DEBUG_LOGGING
 *
 * @brief Enable debug logging for the serialization/deserialization APIs.
 */
#ifndef WEAVE_CONFIG_SERIALIZATION_DEBUG_LOGGING
#define WEAVE_CONFIG_SERIALIZATION_DEBUG_LOGGING 0
#endif

/**
 * @def WEAVE_CONFIG_SERIALIZATION_ENABLE_DESERIALIZATION
 *
 * @brief Enable deserialization as well as serialization APIs.  We
 *   make deserialization configurable because it requires some extra
 *   memory that a highly resource-constrained platform could preserve
 *   if it doesn't consume WDM events or otherwise has no need to
 *   deserialize.
 */
#ifndef WEAVE_CONFIG_SERIALIZATION_ENABLE_DESERIALIZATION
#define WEAVE_CONFIG_SERIALIZATION_ENABLE_DESERIALIZATION 1
#endif

/**
 * @def WEAVE_CONFIG_SERIALIZATION_LOG_FLOATS
 *
 * @brief Enable debug logging of floats and doubles for the
 *   serialization/deserialization APIs.  Not all platforms
 *   support these types, and may not compile if there are
 *   any references to them.  Only matters if
 *   WEAVE_CONFIG_SERIALIZATION_DEBUG_LOGGING is enabled.
 */
#ifndef WEAVE_CONFIG_SERIALIZATION_LOG_FLOATS
#define WEAVE_CONFIG_SERIALIZATION_LOG_FLOATS 1
#endif

/**
 * @def WEAVE_CONFIG_PERSISTED_STORAGE_KEY_TYPE
 *
 * @brief
 *   The data type used to represent the key of a persistedly-stored
 *   key/value pair.
 */
#ifndef WEAVE_CONFIG_PERSISTED_STORAGE_KEY_TYPE
#define WEAVE_CONFIG_PERSISTED_STORAGE_KEY_TYPE const char *
#endif

/**
 *  @def WEAVE_CONFIG_PERSISTED_STORAGE_ENC_MSG_CNTR_ID
 *
 *  @brief
 *    The group key message counter persisted storage Id.
 *
 */
#ifndef WEAVE_CONFIG_PERSISTED_STORAGE_ENC_MSG_CNTR_ID
#define WEAVE_CONFIG_PERSISTED_STORAGE_ENC_MSG_CNTR_ID      "EncMsgCntr"
#endif // WEAVE_CONFIG_PERSISTED_STORAGE_ENC_MSG_CNTR_ID

/**
 *  @def WEAVE_CONFIG_PERSISTED_STORAGE_ENC_MSG_CNTR_EPOCH
 *
 *  @brief
 *    The group key message counter persisted storage epoch.
 *
 */
#ifndef WEAVE_CONFIG_PERSISTED_STORAGE_ENC_MSG_CNTR_EPOCH
#define WEAVE_CONFIG_PERSISTED_STORAGE_ENC_MSG_CNTR_EPOCH   0x1000
#endif // WEAVE_CONFIG_PERSISTED_STORAGE_ENC_MSG_CNTR_EPOCH

/**
 * @def WEAVE_CONFIG_PERSISTED_STORAGE_MAX_KEY_LENGTH
 *
 * @brief The maximum length of the key in a key/value pair
 *   stored in the platform's persistent storage.
 */
#ifndef WEAVE_CONFIG_PERSISTED_STORAGE_MAX_KEY_LENGTH
#define WEAVE_CONFIG_PERSISTED_STORAGE_MAX_KEY_LENGTH 16
#endif

/**
 * @def WEAVE_CONFIG_PERSISTED_STORAGE_MAX_VALUE_LENGTH
 *
 * @brief The maximum length of the value in a key/value pair
 *   stored in the platform's persistent storage.
 */
#ifndef WEAVE_CONFIG_PERSISTED_STORAGE_MAX_VALUE_LENGTH
#define WEAVE_CONFIG_PERSISTED_STORAGE_MAX_VALUE_LENGTH 256
#endif

/**
 * @def WEAVE_CONFIG_PERSISTED_COUNTER_DEBUG_LOGGING
 *
 * @brief Enable debug logging for the PersistedCounter API.
 */
#ifndef WEAVE_CONFIG_PERSISTED_COUNTER_DEBUG_LOGGING
#define WEAVE_CONFIG_PERSISTED_COUNTER_DEBUG_LOGGING 0
#endif

/**
 * @def WEAVE_CONFIG_EVENT_LOGGING_VERBOSE_DEBUG_LOGS
 *
 * @brief Enable verbose debug logging for the EventLogging API.
 * This setting is incompatible with platforms that route console
 * logs into event logging, as it would result in circular logic.
 */
#ifndef WEAVE_CONFIG_EVENT_LOGGING_VERBOSE_DEBUG_LOGS
#define WEAVE_CONFIG_EVENT_LOGGING_VERBOSE_DEBUG_LOGS 1
#endif

/**
 * @def WEAVE_CONFIG_ENABLE_ARG_PARSER
 *
 * @brief Enable support functions for parsing command-line arguments
 */
#ifndef WEAVE_CONFIG_ENABLE_ARG_PARSER
#define WEAVE_CONFIG_ENABLE_ARG_PARSER 0
#endif

/**
 * @def WEAVE_CONFIG_ENABLE_ARG_PARSER_SANTIY_CHECK
 *
 * @brief Enable santiy checking of command-line argument definitions.
 */
#ifndef WEAVE_CONFIG_ENABLE_ARG_PARSER_SANTIY_CHECK
#define WEAVE_CONFIG_ENABLE_ARG_PARSER_SANTIY_CHECK 1
#endif

/**
 * @def WEAVE_CONFIG_SERVICE_PROV_RESPONSE_TIMEOUT
 *
 * @brief
 *    The amount of time (in milliseconds) which the service is given
 *    to respond to a pair device to account request.
 */
#ifndef WEAVE_CONFIG_SERVICE_PROV_RESPONSE_TIMEOUT
#define WEAVE_CONFIG_SERVICE_PROV_RESPONSE_TIMEOUT 60000
#endif

/**
 * @def WEAVE_NON_PRODUCTION_MARKER
 *
 * @brief Defines the name of a mark symbol whose presence signals that the Weave code
 * includes development/testing features that should never be used in production contexts.
 */
#ifndef WEAVE_NON_PRODUCTION_MARKER
#if (WEAVE_CONFIG_SECURITY_TEST_MODE || \
     WEAVE_CONFIG_SUPPORT_PASE_CONFIG0_TEST_ONLY || \
     WEAVE_CONFIG_SUPPORT_PASSCODE_CONFIG1_TEST_ONLY || \
     (!WEAVE_CONFIG_REQUIRE_AUTH))
#define WEAVE_NON_PRODUCTION_MARKER WARNING__DO_NOT_SHIP__CONTAINS_NON_PRODUCTION_WEAVE_CODE
#endif
#endif

#ifdef WEAVE_NON_PRODUCTION_MARKER
extern const char WEAVE_NON_PRODUCTION_MARKER[];
#endif

#endif /* WEAVE_CONFIG_H_ */
