diff --git a/lib/ext/mbedcrypto/0007-Add-LMS-implementation.patch b/lib/ext/mbedcrypto/0007-Add-LMS-implementation.patch
new file mode 100644
index 0000000..ae3b950
--- /dev/null
+++ b/lib/ext/mbedcrypto/0007-Add-LMS-implementation.patch
@@ -0,0 +1,2446 @@
+From 9bbe4b0c89e2f92f8e661955b91d06c80cde7b77 Mon Sep 17 00:00:00 2001
+From: Raef Coles <raef.coles@arm.com>
+Date: Wed, 21 Jul 2021 12:42:15 +0100
+Subject: [PATCH 7/8] Add LMS implementation
+
+Also an LM-OTS implementation as one is required for LMS.
+
+Signed-off-by: Raef Coles <raef.coles@arm.com>
+---
+ ChangeLog.d/LMS.txt                    |  12 +
+ include/mbedtls/check_config.h         |  10 +
+ include/mbedtls/error.h                |   2 +
+ include/mbedtls/lmots.h                | 303 +++++++++++
+ include/mbedtls/lms.h                  | 271 ++++++++++
+ include/mbedtls/mbedtls_config.h       |  28 +
+ library/CMakeLists.txt                 |   2 +
+ library/Makefile                       |   2 +
+ library/lmots.c                        | 684 +++++++++++++++++++++++
+ library/lms.c                          | 718 +++++++++++++++++++++++++
+ scripts/generate_errors.pl             |   2 +-
+ tests/suites/test_suite_lmots.data     |  29 +
+ tests/suites/test_suite_lmots.function | 108 ++++
+ tests/suites/test_suite_lms.data       |  32 ++
+ tests/suites/test_suite_lms.function   |  85 +++
+ 15 files changed, 2287 insertions(+), 1 deletion(-)
+ create mode 100644 ChangeLog.d/LMS.txt
+ create mode 100644 include/mbedtls/lmots.h
+ create mode 100644 include/mbedtls/lms.h
+ create mode 100644 library/lmots.c
+ create mode 100644 library/lms.c
+ create mode 100644 tests/suites/test_suite_lmots.data
+ create mode 100644 tests/suites/test_suite_lmots.function
+ create mode 100644 tests/suites/test_suite_lms.data
+ create mode 100644 tests/suites/test_suite_lms.function
+
+diff --git a/ChangeLog.d/LMS.txt b/ChangeLog.d/LMS.txt
+new file mode 100644
+index 00000000..0f09f018
+--- /dev/null
++++ b/ChangeLog.d/LMS.txt
+@@ -0,0 +1,12 @@
++Features
++    * Add the LMS post-quantum-safe stateful-hash asymmetric signature scheme
++      as defined in RFC8554 and NIST.SP.200-208. This currently only supports
++      one parameter set (LMS_SHA256_M32_H10), meaning that each private key can
++      be used to sign 1024 messages. As such, it is not intended for use in TLS,
++      but instead for verification of assets transmitted over an insecure
++      channel, particularly firmware images. This is one of the signature
++      schemes recommended by the IETF draft SUIT standard for IOT firmware
++      upgrades (RFC9019).
++    * Add the LM-OTS post-quantum-safe one-time signature scheme, which is
++      required for LMS. This can be used independently, but each key can only be
++      used to sign one message so is impractical for most circumstances.
+diff --git a/include/mbedtls/check_config.h b/include/mbedtls/check_config.h
+index ce97f6a3..96a89a63 100644
+--- a/include/mbedtls/check_config.h
++++ b/include/mbedtls/check_config.h
+@@ -291,6 +291,16 @@
+ #error "!MBEDTLS_SSL_KEEP_PEER_CERTIFICATE requires MBEDTLS_SHA512_C, MBEDTLS_SHA256_C or MBEDTLS_SHA1_C"
+ #endif
+ 
++#if defined(MBEDTLS_LMOTS_C) &&                                       \
++    ( !defined(MBEDTLS_MD_C) )
++#error "MBEDTLS_LMOTS_C requires MBEDTLS_MD_C"
++#endif
++
++#if defined(MBEDTLS_LMS_C) &&                                          \
++    ( !defined(MBEDTLS_LMOTS_C) || !defined(MBEDTLS_MD_C) )
++#error "MBEDTLS_LMS_C requires MBEDTLS_LMOTS_C and MBEDTLS_MD_C"
++#endif
++
+ #if defined(MBEDTLS_MEMORY_BUFFER_ALLOC_C) &&                          \
+     ( !defined(MBEDTLS_PLATFORM_C) || !defined(MBEDTLS_PLATFORM_MEMORY) )
+ #error "MBEDTLS_MEMORY_BUFFER_ALLOC_C defined, but not all prerequisites"
+diff --git a/include/mbedtls/error.h b/include/mbedtls/error.h
+index 8b2b9ea5..73d61dbc 100644
+--- a/include/mbedtls/error.h
++++ b/include/mbedtls/error.h
+@@ -82,6 +82,8 @@
+  * POLY1305  3                  0x0057-0x005B
+  * CHACHAPOLY 2 0x0054-0x0056
+  * PLATFORM  2  0x0070-0x0072
++ * LMOTS     2  0x0076-0x0078
++ * LMS       2  0x0011-0x0017
+  *
+  * High-level module nr (3 bits - 0x0...-0x7...)
+  * Name      ID  Nr of Errors
+diff --git a/include/mbedtls/lmots.h b/include/mbedtls/lmots.h
+new file mode 100644
+index 00000000..c98f3bfd
+--- /dev/null
++++ b/include/mbedtls/lmots.h
+@@ -0,0 +1,303 @@
++/**
++ * \file lmots.h
++ *
++ * \brief This file provides an API for the LM-OTS post-quantum-safe one-time
++ *        public-key signature scheme.
++ */
++/*
++ *  Copyright The Mbed TLS Contributors
++ *  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_LMOTS_H
++#define MBEDTLS_LMOTS_H
++
++#include "mbedtls/private_access.h"
++
++#include <stdint.h>
++#include <stddef.h>
++
++#define MBEDTLS_ERR_LMOTS_BAD_INPUT_DATA -0x0076 /**< Bad data has been input to an LMOTS function */
++#define MBEDTLS_ERR_LMOTS_VERIFY_FAILED  -0x0078 /**< LMOTS signature verification failed */
++
++#define MBEDTLS_LMOTS_N_HASH_LEN            (32)
++#define MBEDTLS_LMOTS_P_SIG_SYMBOL_LEN      (34)
++#define MBEDTLS_LMOTS_TYPE_LEN              (4)
++#define MBEDTLS_LMOTS_C_RANDOM_VALUE_LEN    (MBEDTLS_LMOTS_N_HASH_LEN)
++#define MBEDTLS_LMOTS_I_KEY_ID_LEN          (16)
++#define MBEDTLS_LMOTS_Q_LEAF_ID_LEN         (4)
++
++#define MBEDTLS_LMOTS_SIG_LEN (MBEDTLS_LMOTS_TYPE_LEN + MBEDTLS_LMOTS_C_RANDOM_VALUE_LEN + \
++                               (MBEDTLS_LMOTS_P_SIG_SYMBOL_LEN * MBEDTLS_LMOTS_N_HASH_LEN))
++
++#define MBEDTLS_LMOTS_PUBKEY_LEN (MBEDTLS_LMOTS_TYPE_LEN + MBEDTLS_LMOTS_I_KEY_ID_LEN + \
++                                  MBEDTLS_LMOTS_Q_LEAF_ID_LEN + MBEDTLS_LMOTS_N_HASH_LEN)
++
++#define MBEDTLS_LMOTS_SIG_TYPE_OFFSET      (0)
++#define MBEDTLS_LMOTS_SIG_C_RANDOM_OFFSET  (MBEDTLS_LMOTS_SIG_TYPE_OFFSET     + MBEDTLS_LMOTS_TYPE_LEN)
++#define MBEDTLS_LMOTS_SIG_SIGNATURE_OFFSET (MBEDTLS_LMOTS_SIG_C_RANDOM_OFFSET + MBEDTLS_LMOTS_C_RANDOM_VALUE_LEN)
++
++#define MBEDTLS_LMOTS_PUBKEY_TYPE_OFFSET      (0)
++#define MBEDTLS_LMOTS_PUBKEY_I_KEY_ID_OFFSET  (MBEDTLS_LMOTS_PUBKEY_TYPE_OFFSET      + MBEDTLS_LMOTS_TYPE_LEN)
++#define MBEDTLS_LMOTS_PUBKEY_Q_LEAF_ID_OFFSET (MBEDTLS_LMOTS_PUBKEY_I_KEY_ID_OFFSET  + MBEDTLS_LMOTS_I_KEY_ID_LEN)
++#define MBEDTLS_LMOTS_PUBKEY_KEY_HASH_OFFSET  (MBEDTLS_LMOTS_PUBKEY_Q_LEAF_ID_OFFSET + MBEDTLS_LMOTS_Q_LEAF_ID_LEN)
++
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++/* https://www.iana.org/assignments/leighton-micali-signatures/leighton-micali-signatures.xhtml
++ * We are only implementing a subset of the types, particularly n32_w8, for the sake of simplicty.
++ */
++typedef enum {
++    MBEDTLS_LMOTS_SHA256_N32_W8 = 4
++} mbedtls_lmots_algorithm_type_t;
++
++
++typedef struct {
++    unsigned char MBEDTLS_PRIVATE(have_privkey); /*!< Whether the context contains a private key.
++                                                     Boolean values only. */
++    unsigned char MBEDTLS_PRIVATE(have_pubkey); /*!< Whether the context contains a public key.
++                                                     Boolean values only. */
++    unsigned char MBEDTLS_PRIVATE(I_key_identifier[MBEDTLS_LMOTS_I_KEY_ID_LEN]); /*!< The key
++                                                     identifier. */
++    unsigned int MBEDTLS_PRIVATE(q_leaf_identifier); /*!< Which leaf of the LMS key this is.
++                                                     0 if the key is not part of an LMS key. */
++    unsigned char MBEDTLS_PRIVATE(q_leaf_identifier_bytes)[MBEDTLS_LMOTS_Q_LEAF_ID_LEN];/*!< The
++                                                     leaf identifier in network bytes form. */
++    mbedtls_lmots_algorithm_type_t MBEDTLS_PRIVATE(type); /*!< The LM-OTS key type identifier as
++                                                     per IANA. Only SHA256_N32_W8 is currently
++                                                     supported. */
++    unsigned char MBEDTLS_PRIVATE(priv_key[MBEDTLS_LMOTS_P_SIG_SYMBOL_LEN][32]); /*!< The private
++                                                     key, one hash output per byte of the encoded
++                                                     symbol string P (32 bytes of hash output +
++                                                     2 bytes of checksum). */
++    unsigned char MBEDTLS_PRIVATE(pub_key[32]); /*!< The public key, in the form of a SHA256
++                                                     output. */
++} mbedtls_lmots_context;
++
++
++/**
++ * \brief                    This function initializes an LMOTS context
++ *
++ * \param ctx                The uninitialized LMOTS context that will then be
++ *                           initialized.
++ */
++void mbedtls_lmots_init( mbedtls_lmots_context *ctx );
++
++/**
++ * \brief                    This function uninitializes an LMOTS context
++ *
++ * \param ctx                The initialized LMOTS context that will then be
++ *                           uninitialized.
++ */
++void mbedtls_lmots_free( mbedtls_lmots_context *ctx );
++
++/**
++ * \brief                    This function sets the type of an LMOTS context
++ *
++ * \note                     The parameter set in the context will then be used
++ *                           for keygen operations etc.
++ *
++ * \param ctx                The initialized LMOTS context.
++ * \param type               The type that will be set in the context.
++ */
++int mbedtls_lmots_set_algorithm_type( mbedtls_lmots_context *ctx,
++                                      mbedtls_lmots_algorithm_type_t type );
++
++/**
++ * \brief                    This function creates a candidate public key from
++ *                           an LMOTS signature. This can then be compared to
++ *                           the real public key to determine the validity of
++ *                           the signature.
++ *
++ * \note                     This function is exposed publicly to be used in LMS
++ *                           signature verification, it is expected that
++ *                           mbedtls_lmots_verify will be used for LMOTS
++ *                           signature verification.
++ *
++ * \param I_key_identifier   The key identifier of the key, as a 16 byte
++ *                           bytestring.
++ * \param q_leaf_identifier  The leaf identifier of key. If this LMOTS key is
++ *                           not being used as part of an LMS key, this should
++ *                           be set to 0.
++ * \param msg                The buffer from which the message will be read.
++ * \param msg_len            The size of the message that will be read.
++ * \param sig                The buff from which the signature will be read.
++ *                           MBEDTLS_LMOTS_SIG_LEN bytes will be read from this.
++ * \param out                The buffer where the candidate public key will be
++ *                           stored. Must be at least #MBEDTLS_LMOTS_N_HASH_LEN
++ *                           bytes in size.
++ *
++ * \return         \c 0 on success.
++ * \return         A non-zero error code on failure.
++ */
++int mbedtls_lmots_generate_pub_key_candidate( const unsigned char I_key_identifier[MBEDTLS_LMOTS_I_KEY_ID_LEN],
++                                              const unsigned char q_leaf_identifier[MBEDTLS_LMOTS_Q_LEAF_ID_LEN],
++                                              const unsigned char  *msg,
++                                              size_t msg_len,
++                                              const unsigned char *sig,
++                                              unsigned char *out );
++
++/**
++ * \brief                    This function creates a LMOTS signature, using a
++ *                           LMOTS context that contains a private key.
++ *
++ * \note                     Before this function is called, the context must
++ *                           have been initialized and must contain a private
++ *                           key.
++ *
++ * \note                     LMOTS private keys can only be used once, otherwise
++ *                           attackers may be able to create forged signatures.
++ *                           If the signing operation is successful, the private
++ *                           key in the context will be erased, and no further
++ *                           signing will be possible until another private key
++ *                           is loaded
++ *
++ * \param ctx                The initialized LMOTS context from which the
++ *                           private key will be read.
++ * \param f_rng              The RNG function to be used for signature
++ *                           generation.
++ * \param p_rng              The RNG context to be passed to f_rng
++ * \param msg                The buffer from which the message will be read.
++ * \param msg_len            The size of the message that will be read.
++ * \param sig                The buf into which the signature will be stored.
++ *                           Must be at least #MBEDTLS_LMOTS_SIG_LEN in size.
++ *
++ * \return         \c 0 on success.
++ * \return         A non-zero error code on failure.
++ */
++int mbedtls_lmots_sign( mbedtls_lmots_context *ctx,
++                        int (*f_rng)(void *, unsigned char *, size_t),
++                        void *p_rng, const unsigned char *msg, size_t msg_len,
++                        unsigned char *sig );
++
++/**
++ * \brief                    This function verifies a LMOTS signature, using a
++ *                           LMOTS context that contains a public key.
++ *
++ * \note                     Before this function is called, the context must
++ *                           have been initialized and must contain a public key
++ *                           (either by import or generation).
++ *
++ * \param ctx                The initialized LMOTS context from which the public
++ *                           key will be read.
++ * \param msg                The buffer from which the message will be read.
++ * \param msg_len            The size of the message that will be read.
++ * \param sig                The buf from which the signature will be read.
++ *                           #MBEDTLS_LMOTS_SIG_LEN bytes will be read from
++ *                           this.
++ *
++ * \return         \c 0 on successful verification.
++ * \return         A non-zero error code on failure.
++ */
++int mbedtls_lmots_verify( mbedtls_lmots_context *ctx, const unsigned char *msg,
++                          size_t msg_len, const unsigned char *sig );
++
++/**
++ * \brief                    This function imports an LMOTS public key into a
++ *                           LMOTS context.
++ *
++ * \note                     Before this function is called, the context must
++ *                           have been initialized.
++ *
++ * \note                     See IETF RFC8554 for details of the encoding of
++ *                           this public key.
++ *
++ * \param ctx                The initialized LMOTS context store the key in.
++ * \param key                The buffer from which the key will be read.
++ *                           #MBEDTLS_LMOTS_PUBKEY_LEN bytes will be read from
++ *                           this.
++ *
++ * \return         \c 0 on success.
++ * \return         A non-zero error code on failure.
++ */
++int mbedtls_lmots_import_pubkey( mbedtls_lmots_context *ctx,
++                                 const unsigned char *key );
++
++/**
++ * \brief                    This function exports an LMOTS public key from a
++ *                           LMOTS context that already contains a public key.
++ *
++ * \note                     Before this function is called, the context must
++ *                           have been initialized and the context must contain
++ *                           a public key.
++ *
++ * \note                     See IETF RFC8554 for details of the encoding of
++ *                           this public key.
++ *
++ * \param ctx                The initialized LMOTS context that contains the
++ *                           publc key.
++ * \param key                The buffer into which the key will be output. Must
++ *                           be at least #MBEDTLS_LMOTS_PUBKEY_LEN in size.
++ *
++ * \return         \c 0 on success.
++ * \return         A non-zero error code on failure.
++ */
++int mbedtls_lmots_export_pubkey( mbedtls_lmots_context *ctx,
++                                 unsigned char *key );
++
++/**
++ * \brief                    This function generates an LMOTS public key from a
++ *                           LMOTS context that already contains a private key.
++ *
++ * \note                     Before this function is called, the context must
++ *                           have been initialized and the context must contain
++ *                           a private key.
++ *
++ * \param ctx                The initialized LMOTS context to generate the key
++ *                           from and store it into.
++ *
++ * \return         \c 0 on success.
++ * \return         A non-zero error code on failure.
++ */
++int mbedtls_lmots_gen_pubkey( mbedtls_lmots_context *ctx );
++
++/**
++ * \brief                    This function generates an LMOTS private key, and
++ *                           stores in into an LMOTS context.
++ *
++ * \note                     Before this function is called, the context must
++ *                           have been initialized and the type of the LMOTS
++ *                           context set using mbedtls_lmots_set_algorithm_type
++ *
++ * \note                     The seed must have at least 256 bits of entropy.
++ *
++ * \param ctx                The initialized LMOTS context to generate the key
++ *                           into.
++ * \param I_key_identifier   The key identifier of the key, as a 16 byte
++ *                           bytestring.
++ * \param q_leaf_identifier  The leaf identifier of key. If this LMOTS key is
++ *                           not being used as part of an LMS key, this should
++ *                           be set to 0.
++ * \param seed               The seed used to deterministically generate the
++ *                           key.
++ * \param seed_len           The length of the seed.
++ *
++ * \return         \c 0 on success.
++ * \return         A non-zero error code on failure.
++ */
++int mbedtls_lmots_gen_privkey( mbedtls_lmots_context *ctx,
++                               const unsigned char I_key_identifier[MBEDTLS_LMOTS_I_KEY_ID_LEN],
++                               unsigned int q_leaf_identifier,
++                               const unsigned char *seed,
++                               size_t seed_len );
++
++#ifdef __cplusplus
++}
++#endif
++
++#endif /* MBEDTLS_LMOTS_H */
+diff --git a/include/mbedtls/lms.h b/include/mbedtls/lms.h
+new file mode 100644
+index 00000000..77559e24
+--- /dev/null
++++ b/include/mbedtls/lms.h
+@@ -0,0 +1,271 @@
++/**
++ * \file lms.h
++ *
++ * \brief This file provides an API for the LMS post-quantum-safe stateful-hash
++ *        public-key signature scheme.
++ */
++/*
++ *  Copyright The Mbed TLS Contributors
++ *  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_LMS_H
++#define MBEDTLS_LMS_H
++
++#include <stdint.h>
++#include <stddef.h>
++
++#include "mbedtls/private_access.h"
++#include "mbedtls/lmots.h"
++
++#define MBEDTLS_ERR_LMS_BAD_INPUT_DATA   -0x0011 /**< Bad data has been input to an LMS function */
++#define MBEDTLS_ERR_LMS_OUT_OF_PRIV_KEYS -0x0013 /**< Specified LMS key has utilised all of its private keys */
++#define MBEDTLS_ERR_LMS_VERIFY_FAILED    -0x0015 /**< LMS signature verification failed */
++#define MBEDTLS_ERR_LMS_ALLOC_FAILED     -0x0017 /**< LMS failed to allocate space for a private key */
++
++#define MBEDTLS_LMS_TYPE_LEN            (4)
++#define MBEDTLS_LMS_H_TREE_HEIGHT       (10)
++#define MBEDTLS_LMS_M_NODE_BYTES        (32)
++
++#define MBEDTLS_LMS_SIG_LEN (MBEDTLS_LMOTS_Q_LEAF_ID_LEN + MBEDTLS_LMOTS_SIG_LEN + \
++                             MBEDTLS_LMS_TYPE_LEN + MBEDTLS_LMS_H_TREE_HEIGHT * MBEDTLS_LMS_M_NODE_BYTES)
++
++#define MBEDTLS_LMS_PUBKEY_LEN (MBEDTLS_LMS_TYPE_LEN + MBEDTLS_LMOTS_TYPE_LEN + \
++                                MBEDTLS_LMOTS_I_KEY_ID_LEN + MBEDTLS_LMS_M_NODE_BYTES)
++
++#define MBEDTLS_LMS_SIG_Q_LEAF_ID_OFFSET    (0)
++#define MBEDTLS_LMS_SIG_OTS_SIG_OFFSET      (MBEDTLS_LMS_SIG_Q_LEAF_ID_OFFSET + MBEDTLS_LMOTS_Q_LEAF_ID_LEN)
++#define MBEDTLS_LMS_SIG_TYPE_OFFSET         (MBEDTLS_LMS_SIG_OTS_SIG_OFFSET   + MBEDTLS_LMOTS_SIG_LEN)
++#define MBEDTLS_LMS_SIG_PATH_OFFSET         (MBEDTLS_LMS_SIG_TYPE_OFFSET      + MBEDTLS_LMS_TYPE_LEN)
++
++#define MBEDTLS_LMS_PUBKEY_TYPE_OFFSET      (0)
++#define MBEDTLS_LMS_PUBKEY_OTSTYPE_OFFSET   (MBEDTLS_LMS_PUBKEY_TYPE_OFFSET     + MBEDTLS_LMS_TYPE_LEN)
++#define MBEDTLS_LMS_PUBKEY_I_KEY_ID_OFFSET  (MBEDTLS_LMS_PUBKEY_OTSTYPE_OFFSET  + MBEDTLS_LMOTS_TYPE_LEN)
++#define MBEDTLS_LMS_PUBKEY_ROOT_NODE_OFFSET (MBEDTLS_LMS_PUBKEY_I_KEY_ID_OFFSET + MBEDTLS_LMOTS_I_KEY_ID_LEN)
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++/* https://www.iana.org/assignments/leighton-micali-signatures/leighton-micali-signatures.xhtml
++ * We are only implementing a subset of the types, particularly H10, for the sake of simplicty.
++ */
++typedef enum {
++    MBEDTLS_LMS_SHA256_M32_H10 = 0x6,
++} mbedtls_lms_algorithm_type_t;
++
++
++typedef struct {
++    unsigned char MBEDTLS_PRIVATE(have_privkey); /*!< Whether the context contains a private key.
++                                                     Boolean values only. */
++    unsigned char MBEDTLS_PRIVATE(have_pubkey); /*!< Whether the context contains a public key.
++                                                     Boolean values only. */
++    unsigned char MBEDTLS_PRIVATE(I_key_identifier)[MBEDTLS_LMOTS_I_KEY_ID_LEN]; /*!< The key
++                                                     identifier. */
++    mbedtls_lms_algorithm_type_t MBEDTLS_PRIVATE(type); /*!< The LMS key type identifier as per
++                                                     IANA. Only SHA256_M32_H10 is currently
++                                                     supported. */
++    mbedtls_lmots_algorithm_type_t MBEDTLS_PRIVATE(otstype); /*!< The LM-OTS key type identifier as
++                                                     per IANA. Only SHA256_N32_W8 is currently
++                                                     supported. */
++    unsigned int MBEDTLS_PRIVATE(q_next_usable_key); /*!< The index of the next OTS key that has not
++                                                     been used. */
++    mbedtls_lmots_context *MBEDTLS_PRIVATE(priv_keys); /*!< The private key material. One OTS key
++                                                     for each leaf node in the merkle tree. */
++    unsigned char MBEDTLS_PRIVATE(T_1_pub_key)[MBEDTLS_LMS_M_NODE_BYTES]; /*!< The public key, in
++                                                     the form of the merkle tree root node. */
++} mbedtls_lms_context;
++
++
++/**
++ * \brief                    This function initializes an LMS context
++ *
++ * \param ctx                The uninitialized LMS context that will then be
++ *                           initialized.
++ */
++void mbedtls_lms_init( mbedtls_lms_context *ctx );
++
++/**
++ * \brief                    This function uninitializes an LMS context
++ *
++ * \param ctx                The initialized LMS context that will then be
++ *                           uninitialized.
++ */
++void mbedtls_lms_free( mbedtls_lms_context *ctx );
++
++/**
++ * \brief                    This function sets the type of an LMS context
++ *
++ * \note                     The parameter set in the context will then be used
++ *                           for keygen operations etc.
++ *
++ * \param ctx                The initialized LMS context.
++ * \param type               The type that will be set in the context.
++ * \param otstype            The type of the LMOTS implementation used by this
++ *                           context.
++ */
++int mbedtls_lms_set_algorithm_type( mbedtls_lms_context *ctx,
++                                    mbedtls_lms_algorithm_type_t type,
++                                    mbedtls_lmots_algorithm_type_t otstype);
++
++/**
++ * \brief                    This function creates a LMS signature, using a
++ *                           LMOTS context that contains a private key.
++ *
++ * \note                     This function is intended for _testing purposes
++ *                           only_, due to complexities around updating stateful
++ *                           keys.
++ *
++ * \note                     Before this function is called, the context must
++ *                           have been initialized and must contain a private
++ *                           key.
++ *
++ * \note                     Each of the LMOTS private keys inside a LMS private
++ *                           key can only be used once. If they are reused, then
++ *                           attackers may be able to forge signatures with that
++ *                           key. This is all handled transparently, but it is
++ *                           important to not perform copy operations on LMS
++ *                           contexts that contain private key material.
++ *
++ * \param ctx                The initialized LMS context from which the
++ *                           private key will be read.
++ * \param f_rng              The RNG function to be used for signature
++ *                           generation.
++ * \param p_rng              The RNG context to be passed to f_rng
++ * \param msg                The buffer from which the message will be read.
++ * \param msg_len            The size of the message that will be read.
++ * \param sig                The buf into which the signature will be stored.
++ *                           Must be at least #MBEDTLS_LMOTS_SIG_LEN in size.
++ *
++ * \return         \c 0 on success.
++ * \return         A non-zero error code on failure.
++ */
++int mbedtls_lms_sign( mbedtls_lms_context *ctx,
++                      int (*f_rng)(void *, unsigned char *, size_t),
++                      void* p_rng, unsigned char *msg, unsigned int msg_len,
++                      unsigned char *sig);
++
++/**
++ * \brief                    This function verifies a LMS signature, using a
++ *                           LMS context that contains a public key.
++ *
++ * \note                     Before this function is called, the context must
++ *                           have been initialized and must contain a public key
++ *                           (either by import or generation).
++ *
++ * \param ctx                The initialized LMS context from which the public
++ *                           key will be read.
++ * \param msg                The buffer from which the message will be read.
++ * \param msg_len            The size of the message that will be read.
++ * \param sig                The buf from which the signature will be read.
++ *                           #MBEDTLS_LMS_SIG_LEN bytes will be read from
++ *                           this.
++ *
++ * \return         \c 0 on successful verification.
++ * \return         A non-zero error code on failure.
++ */
++int mbedtls_lms_verify( const mbedtls_lms_context *ctx,
++                        const unsigned char *msg, unsigned int msg_len,
++                        const unsigned char *sig );
++
++/**
++ * \brief                    This function imports an LMOTS public key into a
++ *                           LMS context.
++ *
++ * \note                     Before this function is called, the context must
++ *                           have been initialized.
++ *
++ * \note                     See IETF RFC8554 for details of the encoding of
++ *                           this public key.
++ *
++ * \param ctx                The initialized LMS context store the key in.
++ * \param key                The buffer from which the key will be read.
++ *                           #MBEDTLS_LMS_PUBKEY_LEN bytes will be read from
++ *                           this.
++ *
++ * \return         \c 0 on success.
++ * \return         A non-zero error code on failure.
++ */
++int mbedtls_lms_import_pubkey( mbedtls_lms_context *ctx,
++                               const unsigned char *key );
++
++/**
++ * \brief                    This function exports an LMOTS public key from a
++ *                           LMS context that already contains a public key.
++ *
++ * \note                     Before this function is called, the context must
++ *                           have been initialized and the context must contain
++ *                           a public key.
++ *
++ * \note                     See IETF RFC8554 for details of the encoding of
++ *                           this public key.
++ *
++ * \param ctx                The initialized LMS context that contains the
++ *                           publc key.
++ * \param key                The buffer into which the key will be output. Must
++ *                           be at least #MBEDTLS_LMS_PUBKEY_LEN in size.
++ *
++ * \return         \c 0 on success.
++ * \return         A non-zero error code on failure.
++ */
++int mbedtls_lms_export_pubkey( mbedtls_lms_context *ctx,
++                               unsigned char *key );
++
++/**
++ * \brief                    This function generates an LMS public key from a
++ *                           LMS context that already contains a private key.
++ *
++ * \note                     Before this function is called, the context must
++ *                           have been initialized and the context must contain
++ *                           a private key.
++ *
++ * \param ctx                The initialized LMS context to generate the key
++ *                           from and store it into.
++ *
++ * \return         \c 0 on success.
++ * \return         A non-zero error code on failure.
++ */
++int mbedtls_lms_gen_pubkey( mbedtls_lms_context *ctx );
++
++/**
++ * \brief                    This function generates an LMS private key, and
++ *                           stores in into an LMS context.
++ *
++ * \note                     Before this function is called, the context must
++ *                           have been initialized and the type of the LMS
++ *                           context set using mbedtls_lmots_set_algorithm_type
++ *
++ * \note                     The seed must have at least 256 bits of entropy.
++ *
++ * \param ctx                The initialized LMOTS context to generate the key
++ *                           into.
++ * \param f_rng              The RNG function to be used to generate the key ID.
++ * \param p_rng              The RNG context to be passed to f_rng
++ * \param seed               The seed used to deterministically generate the
++ *                           key.
++ * \param seed_len           The length of the seed.
++ *
++ * \return         \c 0 on success.
++ * \return         A non-zero error code on failure.
++ */
++int mbedtls_lms_gen_privkey( mbedtls_lms_context *ctx,
++                             int (*f_rng)(void *, unsigned char *, size_t),
++                             void* p_rng, unsigned char *seed,
++                             size_t seed_len );
++
++#ifdef __cplusplus
++}
++#endif
++
++#endif /* MBEDTLS_LMS_H */
+diff --git a/include/mbedtls/mbedtls_config.h b/include/mbedtls/mbedtls_config.h
+index 0558ee00..3c886ebd 100644
+--- a/include/mbedtls/mbedtls_config.h
++++ b/include/mbedtls/mbedtls_config.h
+@@ -2361,6 +2361,34 @@
+  */
+ #define MBEDTLS_HMAC_DRBG_C
+ 
++/**
++ * \def MBEDTLS_LMOTS_C
++ *
++ * Enable the LMOTS one-time asymmetric hash signature algorithm.
++ *
++ * Module:  library/lm_ots.c
++ * Caller:
++ *
++ * Requires: MBEDTLS_SHA256_C
++ *
++ * Uncomment to enable the LMOTS signature algorithm.
++ */
++#define MBEDTLS_LMOTS_C
++
++/**
++ * \def MBEDTLS_LMS_C
++ *
++ * Enable the LMS stateful-hash asymmetric signature algorithm.
++ *
++ * Module:  library/lms.c
++ * Caller:
++ *
++ * Requires: MBEDTLS_LMS_C
++ *
++ * Uncomment to enable the LMS signature algorithm.
++ */
++#define MBEDTLS_LMS_C
++
+ /**
+  * \def MBEDTLS_NIST_KW_C
+  *
+diff --git a/library/CMakeLists.txt b/library/CMakeLists.txt
+index 07599f5d..aea6c2e7 100644
+--- a/library/CMakeLists.txt
++++ b/library/CMakeLists.txt
+@@ -40,6 +40,8 @@ set(src_crypto
+     gcm.c
+     hkdf.c
+     hmac_drbg.c
++    lmots.c
++    lms.c
+     md.c
+     md5.c
+     memory_buffer_alloc.c
+diff --git a/library/Makefile b/library/Makefile
+index 5c23aebf..cca9556c 100644
+--- a/library/Makefile
++++ b/library/Makefile
+@@ -105,6 +105,8 @@ OBJS_CRYPTO= \
+ 	     gcm.o \
+ 	     hkdf.o \
+ 	     hmac_drbg.o \
++	     lmots.o \
++	     lms.o \
+ 	     md.o \
+ 	     md5.o \
+ 	     memory_buffer_alloc.o \
+diff --git a/library/lmots.c b/library/lmots.c
+new file mode 100644
+index 00000000..7319d29b
+--- /dev/null
++++ b/library/lmots.c
+@@ -0,0 +1,684 @@
++/*
++ * The LM-OTS one-time public-key signature scheme
++ *
++ * Copyright The Mbed TLS Contributors
++ *  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.
++ */
++
++/*
++ *  The following sources were referenced in the design of this implementation
++ *  of the LM-OTS algorithm:
++ *
++ *  [1] IETF RFC8554
++ *      D. McGrew, M. Curcio, S.Fluhrer
++ *      https://datatracker.ietf.org/doc/html/rfc8554
++ *
++ *  [2] NIST Special Publication 800-208
++ *      David A. Cooper et. al.
++ *      https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-208.pdf
++ */
++
++#include "common.h"
++
++#ifdef MBEDTLS_LMOTS_C
++
++#include <string.h>
++
++#include "mbedtls/lmots.h"
++#include "mbedtls/md.h"
++#include "mbedtls/platform_util.h"
++#include "mbedtls/error.h"
++
++#define W_SYMBOL_BIT_LEN      (8)
++#define CHECKSUM_LEN          (2)
++#define I_SYMBOL_IDX_LEN      (2)
++#define J_HASH_IDX_LEN        (1)
++#define D_CONST_LEN           (2)
++
++#define SYMBOL_MAX_VAL        ((1 << W_SYMBOL_BIT_LEN) - 1)
++
++#define D_PBLC_CONSTANT       (0x8080)
++#define D_MESG_CONSTANT       (0x8181)
++
++static void val_to_network_bytes(unsigned int val, size_t len, unsigned char *bytes)
++{
++    size_t idx;
++
++    for (idx = 0; idx < len; idx++) {
++        bytes[idx] = (val >> ((len - 1 - idx) * 8)) & 0xFF;
++    }
++}
++
++static unsigned int network_bytes_to_val(size_t len, const unsigned char *bytes)
++{
++    size_t idx;
++    unsigned int val = 0;
++
++    for (idx = 0; idx < len; idx++) {
++        val |= ((unsigned int)bytes[idx]) << (8 * (len - 1 - idx));
++    }
++
++    return val;
++}
++
++static unsigned short lmots_checksum_generate( const unsigned char* digest )
++{
++    size_t idx;
++    unsigned short sum = 0;
++
++    for ( idx = 0; idx < MBEDTLS_LMOTS_N_HASH_LEN; idx++ )
++    {
++        sum += ( 1 << W_SYMBOL_BIT_LEN ) - 1 - digest[idx];
++    }
++
++    return sum;
++}
++
++static int create_symbol_array( const unsigned char I_key_identifier[MBEDTLS_LMOTS_I_KEY_ID_LEN],
++                                const unsigned char q_leaf_identifier[MBEDTLS_LMOTS_Q_LEAF_ID_LEN],
++                                const unsigned char *msg,
++                                size_t msg_len,
++                                const unsigned char C_random_value[MBEDTLS_LMOTS_C_RANDOM_VALUE_LEN],
++                                unsigned char out[MBEDTLS_LMOTS_P_SIG_SYMBOL_LEN] )
++{
++    mbedtls_md_context_t hash_ctx;
++    unsigned char D_MESG_BYTES[D_CONST_LEN];
++    unsigned short checksum;
++    int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
++
++    mbedtls_md_init( &hash_ctx );
++    ret = mbedtls_md_setup( &hash_ctx, mbedtls_md_info_from_type( MBEDTLS_MD_SHA256 ), 0 );
++    if( ret )
++    {
++        goto out;
++    }
++    ret = mbedtls_md_starts( &hash_ctx );
++    if ( ret )
++    {
++        goto out;
++    }
++
++    ret = mbedtls_md_update( &hash_ctx, I_key_identifier, MBEDTLS_LMOTS_I_KEY_ID_LEN );
++    if ( ret )
++    {
++        goto out;
++    }
++
++    ret = mbedtls_md_update( &hash_ctx, q_leaf_identifier, MBEDTLS_LMOTS_Q_LEAF_ID_LEN );
++    if ( ret )
++    {
++        goto out;
++    }
++
++    val_to_network_bytes( D_MESG_CONSTANT, D_CONST_LEN, D_MESG_BYTES );
++    ret = mbedtls_md_update( &hash_ctx, D_MESG_BYTES, sizeof( D_MESG_BYTES ) );
++    if ( ret )
++    {
++        goto out;
++    }
++
++    ret = mbedtls_md_update( &hash_ctx, C_random_value, MBEDTLS_LMOTS_C_RANDOM_VALUE_LEN );
++    if ( ret )
++    {
++        goto out;
++    }
++
++    ret = mbedtls_md_update( &hash_ctx, msg, msg_len );
++    if ( ret )
++    {
++        goto out;
++    }
++
++    ret = mbedtls_md_finish( &hash_ctx, out );
++    if ( ret )
++    {
++        goto out;
++    }
++
++    checksum = lmots_checksum_generate( out );
++    val_to_network_bytes( checksum, CHECKSUM_LEN, out + MBEDTLS_LMOTS_N_HASH_LEN );
++
++out:
++    mbedtls_md_free( &hash_ctx );
++
++    return( ret );
++}
++
++static int hash_symbol_array( const unsigned char I_key_identifier[MBEDTLS_LMOTS_I_KEY_ID_LEN],
++                              const unsigned char q_leaf_identifier[MBEDTLS_LMOTS_Q_LEAF_ID_LEN],
++                              const unsigned char x_symbol_array[MBEDTLS_LMOTS_P_SIG_SYMBOL_LEN][32],
++                              const unsigned char hash_idx_min_values[MBEDTLS_LMOTS_P_SIG_SYMBOL_LEN],
++                              const unsigned char hash_idx_max_values[MBEDTLS_LMOTS_P_SIG_SYMBOL_LEN],
++                              unsigned char output[MBEDTLS_LMOTS_P_SIG_SYMBOL_LEN][32] )
++{
++    unsigned char i_symbol_idx;
++    unsigned char j_hash_idx;
++    unsigned char i_symbol_idx_bytes[I_SYMBOL_IDX_LEN];
++    unsigned char j_hash_idx_bytes[1];
++    unsigned short j_hash_idx_min;
++    unsigned short j_hash_idx_max;
++    mbedtls_md_context_t hash_ctx;
++    unsigned char tmp_hash[32];
++    int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
++
++    for ( i_symbol_idx = 0; i_symbol_idx < MBEDTLS_LMOTS_P_SIG_SYMBOL_LEN; i_symbol_idx++ )
++    {
++
++        memcpy( tmp_hash, &x_symbol_array[i_symbol_idx], MBEDTLS_LMOTS_N_HASH_LEN );
++
++        j_hash_idx_min = hash_idx_min_values != NULL ? hash_idx_min_values[i_symbol_idx] : 0;
++        j_hash_idx_max = hash_idx_max_values != NULL ? hash_idx_max_values[i_symbol_idx] : SYMBOL_MAX_VAL;
++
++        for ( j_hash_idx = (unsigned char)j_hash_idx_min; j_hash_idx < j_hash_idx_max; j_hash_idx++ )
++        {
++            mbedtls_md_init( &hash_ctx );
++            ret = mbedtls_md_setup( &hash_ctx, mbedtls_md_info_from_type( MBEDTLS_MD_SHA256 ), 0 );
++            if( ret )
++            {
++                goto out;
++            }
++            ret = mbedtls_md_starts( &hash_ctx );
++            if ( ret )
++            {
++                goto out;
++            }
++
++            ret = mbedtls_md_update( &hash_ctx, I_key_identifier, MBEDTLS_LMOTS_I_KEY_ID_LEN );
++            if ( ret )
++            {
++                goto out;
++            }
++
++            ret = mbedtls_md_update( &hash_ctx, q_leaf_identifier, MBEDTLS_LMOTS_Q_LEAF_ID_LEN );
++            if ( ret )
++            {
++                goto out;
++            }
++
++            val_to_network_bytes( i_symbol_idx, I_SYMBOL_IDX_LEN, i_symbol_idx_bytes );
++            ret = mbedtls_md_update( &hash_ctx, i_symbol_idx_bytes, I_SYMBOL_IDX_LEN );
++            if ( ret )
++            {
++                goto out;
++            }
++
++            val_to_network_bytes( j_hash_idx, J_HASH_IDX_LEN, j_hash_idx_bytes );
++            ret = mbedtls_md_update( &hash_ctx, j_hash_idx_bytes, J_HASH_IDX_LEN );
++            if ( ret )
++            {
++                goto out;
++            }
++
++            ret = mbedtls_md_update( &hash_ctx, tmp_hash, MBEDTLS_LMOTS_N_HASH_LEN );
++            if ( ret )
++            {
++                goto out;
++            }
++
++            ret = mbedtls_md_finish( &hash_ctx, tmp_hash );
++            if ( ret )
++            {
++                goto out;
++            }
++
++            mbedtls_md_free( &hash_ctx );
++        }
++
++        memcpy( &output[i_symbol_idx], tmp_hash, MBEDTLS_LMOTS_N_HASH_LEN );
++    }
++
++out:
++    if( ret )
++    {
++        mbedtls_md_free( &hash_ctx );
++        return( ret );
++    }
++
++    return ret;
++}
++
++static int public_key_from_hashed_symbol_array( const unsigned char I_key_identifier[MBEDTLS_LMOTS_I_KEY_ID_LEN],
++                                                const unsigned char q_leaf_identifier[MBEDTLS_LMOTS_Q_LEAF_ID_LEN],
++                                                const unsigned char  y_hashed_symbols[MBEDTLS_LMOTS_P_SIG_SYMBOL_LEN][32],
++                                                unsigned char *pub_key )
++{
++    unsigned char D_PBLC_bytes[D_CONST_LEN];
++    mbedtls_md_context_t hash_ctx;
++    int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
++
++    mbedtls_md_init( &hash_ctx );
++    ret = mbedtls_md_setup( &hash_ctx, mbedtls_md_info_from_type( MBEDTLS_MD_SHA256 ), 0 );
++    if( ret )
++    {
++        goto out;
++    }
++    ret = mbedtls_md_starts( &hash_ctx );
++    if ( ret )
++    {
++        goto out;
++    }
++
++    ret = mbedtls_md_update( &hash_ctx, I_key_identifier,
++                             MBEDTLS_LMOTS_I_KEY_ID_LEN );
++    if ( ret )
++    {
++        goto out;
++    }
++
++    ret = mbedtls_md_update( &hash_ctx, q_leaf_identifier,
++                             MBEDTLS_LMOTS_Q_LEAF_ID_LEN );
++    if ( ret )
++    {
++        goto out;
++    }
++
++    val_to_network_bytes( D_PBLC_CONSTANT, D_CONST_LEN, D_PBLC_bytes );
++    ret = mbedtls_md_update( &hash_ctx, D_PBLC_bytes, D_CONST_LEN );
++    if ( ret )
++    {
++        goto out;
++    }
++
++    ret = mbedtls_md_update( &hash_ctx, ( unsigned char * )y_hashed_symbols,
++                             MBEDTLS_LMOTS_P_SIG_SYMBOL_LEN * MBEDTLS_LMOTS_N_HASH_LEN );
++    if ( ret )
++    {
++        goto out;
++    }
++
++    ret = mbedtls_md_finish( &hash_ctx, pub_key );
++
++out:
++    mbedtls_md_free( &hash_ctx );
++    return( ret );
++}
++
++void mbedtls_lmots_init( mbedtls_lmots_context *ctx )
++{
++    if( ctx == NULL ) {
++        return;
++    }
++
++    mbedtls_platform_zeroize( ctx, sizeof( mbedtls_lmots_context  ) ) ;
++}
++
++void mbedtls_lmots_free( mbedtls_lmots_context *ctx )
++{
++    if( ctx == NULL )
++    {
++        return;
++    }
++
++    mbedtls_platform_zeroize( ctx, sizeof( mbedtls_lmots_context  ) ) ;
++}
++
++int mbedtls_lmots_set_algorithm_type( mbedtls_lmots_context *ctx,
++                                      mbedtls_lmots_algorithm_type_t type )
++{
++    if( ctx == NULL )
++    {
++        return( MBEDTLS_ERR_LMOTS_BAD_INPUT_DATA );
++    }
++
++    ctx->MBEDTLS_PRIVATE(type) = type;
++
++    return( 0 );
++}
++
++int mbedtls_lmots_generate_pub_key_candidate( const unsigned char I_key_identifier[MBEDTLS_LMOTS_I_KEY_ID_LEN],
++                                              const unsigned char q_leaf_identifier[MBEDTLS_LMOTS_Q_LEAF_ID_LEN],
++                                              const unsigned char  *msg,
++                                              size_t msg_len,
++                                              const unsigned char *sig,
++                                              unsigned char *out )
++{
++    unsigned char tmp_symbol_array[MBEDTLS_LMOTS_P_SIG_SYMBOL_LEN];
++    unsigned char y_hashed_symbols[MBEDTLS_LMOTS_P_SIG_SYMBOL_LEN][32];
++    int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
++
++    if (I_key_identifier == NULL || msg == NULL || sig == NULL || out == NULL)
++    {
++        return( MBEDTLS_ERR_LMOTS_BAD_INPUT_DATA );
++    }
++
++    ret = create_symbol_array( I_key_identifier, q_leaf_identifier, msg, msg_len,
++                               sig + MBEDTLS_LMOTS_SIG_C_RANDOM_OFFSET, tmp_symbol_array );
++    if ( ret )
++    {
++        return ( ret );
++    }
++
++    ret = hash_symbol_array( I_key_identifier, q_leaf_identifier,
++                             ( const unsigned char( *)[32] )(sig + MBEDTLS_LMOTS_SIG_SIGNATURE_OFFSET),
++                             tmp_symbol_array, NULL, y_hashed_symbols );
++    if ( ret )
++    {
++        return ( ret );
++    }
++
++    ret = public_key_from_hashed_symbol_array( I_key_identifier, q_leaf_identifier,
++                                               ( const unsigned char( *)[32] )y_hashed_symbols,
++                                               out );
++    if ( ret )
++    {
++        return ( ret );
++    }
++
++    return( 0 );
++}
++
++int mbedtls_lmots_sign( mbedtls_lmots_context *ctx,
++                        int (*f_rng)(void *, unsigned char *, size_t),
++                        void *p_rng, const unsigned char *msg, size_t msg_len,
++                        unsigned char *sig )
++{
++    unsigned char tmp_symbol_array[MBEDTLS_LMOTS_P_SIG_SYMBOL_LEN];
++    unsigned char tmp_sig[MBEDTLS_LMOTS_P_SIG_SYMBOL_LEN][MBEDTLS_LMOTS_N_HASH_LEN];
++    int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
++
++    if( ctx == NULL || f_rng == NULL || p_rng == NULL || msg == NULL || sig == NULL)
++    {
++        return( MBEDTLS_ERR_LMOTS_BAD_INPUT_DATA );
++    }
++
++    /* Check that a private key is loaded */
++    if ( !ctx->MBEDTLS_PRIVATE(have_privkey) )
++    {
++        return( MBEDTLS_ERR_LMOTS_BAD_INPUT_DATA );
++    }
++
++    ret = f_rng( p_rng, sig + MBEDTLS_LMOTS_SIG_C_RANDOM_OFFSET, MBEDTLS_LMOTS_N_HASH_LEN );
++    if ( ret )
++    {
++        return( ret );
++    }
++
++    ret = create_symbol_array( ctx->MBEDTLS_PRIVATE(I_key_identifier),
++                               ctx->MBEDTLS_PRIVATE(q_leaf_identifier_bytes),
++                               msg, msg_len, sig + MBEDTLS_LMOTS_SIG_C_RANDOM_OFFSET,
++                               tmp_symbol_array );
++    if ( ret )
++    {
++        return( ret );
++    }
++
++    ret = hash_symbol_array( ctx->MBEDTLS_PRIVATE(I_key_identifier),
++                             ctx->MBEDTLS_PRIVATE(q_leaf_identifier_bytes),
++                             ( const unsigned char( *)[32] )(ctx->MBEDTLS_PRIVATE(priv_key)),
++                             NULL, tmp_symbol_array, tmp_sig );
++    if ( ret )
++    {
++        return( ret );
++    }
++
++    val_to_network_bytes( ctx->MBEDTLS_PRIVATE(type), MBEDTLS_LMOTS_TYPE_LEN,
++                          sig + MBEDTLS_LMOTS_SIG_TYPE_OFFSET );
++
++    /* We've got a valid signature now, so it's time to make sure the private
++     * key can't be reused.
++     */
++    ctx->MBEDTLS_PRIVATE(have_privkey) = 0;
++    mbedtls_platform_zeroize(ctx->MBEDTLS_PRIVATE(priv_key),
++                             sizeof(ctx->MBEDTLS_PRIVATE(priv_key)));
++
++    memcpy(sig + MBEDTLS_LMOTS_SIG_SIGNATURE_OFFSET, tmp_sig,
++           MBEDTLS_LMOTS_P_SIG_SYMBOL_LEN * MBEDTLS_LMOTS_N_HASH_LEN);
++
++    return( 0 );
++}
++
++int mbedtls_lmots_verify( mbedtls_lmots_context *ctx, const unsigned char *msg,
++                          size_t msg_len, const unsigned char *sig )
++{
++    unsigned char Kc_public_key_candidate[32];
++    int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
++
++    if( ctx == NULL || msg == NULL || sig == NULL)
++    {
++        return( MBEDTLS_ERR_LMOTS_BAD_INPUT_DATA );
++    }
++
++    if ( !ctx->MBEDTLS_PRIVATE(have_pubkey) )
++    {
++        return( MBEDTLS_ERR_LMOTS_BAD_INPUT_DATA );
++    }
++
++    if( ctx->MBEDTLS_PRIVATE(type ) != MBEDTLS_LMOTS_SHA256_N32_W8 )
++    {
++        return( MBEDTLS_ERR_LMOTS_BAD_INPUT_DATA );
++    }
++
++    if ( network_bytes_to_val( MBEDTLS_LMOTS_TYPE_LEN,
++                               sig + MBEDTLS_LMOTS_SIG_TYPE_OFFSET ) != MBEDTLS_LMOTS_SHA256_N32_W8 )
++    {
++        return( MBEDTLS_ERR_LMOTS_VERIFY_FAILED );
++    }
++
++    ret = mbedtls_lmots_generate_pub_key_candidate( ctx->MBEDTLS_PRIVATE(I_key_identifier),
++                                                    ctx->MBEDTLS_PRIVATE(q_leaf_identifier_bytes),
++                                                    msg, msg_len, sig,
++                                                    Kc_public_key_candidate );
++    if ( ret )
++    {
++        return( ret );
++    }
++
++    if ( memcmp( &Kc_public_key_candidate, ctx->MBEDTLS_PRIVATE(pub_key),
++                 sizeof( ctx->MBEDTLS_PRIVATE(pub_key) ) ) )
++    {
++        return( MBEDTLS_ERR_LMOTS_VERIFY_FAILED );
++    }
++
++    return( 0 );
++}
++
++int mbedtls_lmots_import_pubkey( mbedtls_lmots_context *ctx,
++                                 const unsigned char *key )
++{
++    if ( ctx == NULL || key == NULL)
++    {
++        return( MBEDTLS_ERR_LMOTS_BAD_INPUT_DATA );
++    }
++
++    ctx->MBEDTLS_PRIVATE(type) = network_bytes_to_val( MBEDTLS_LMOTS_TYPE_LEN,
++                                                       key + MBEDTLS_LMOTS_SIG_TYPE_OFFSET );
++
++    memcpy( ctx->MBEDTLS_PRIVATE(I_key_identifier), key + MBEDTLS_LMOTS_PUBKEY_I_KEY_ID_OFFSET,
++            MBEDTLS_LMOTS_I_KEY_ID_LEN );
++
++    memcpy( ctx->MBEDTLS_PRIVATE(q_leaf_identifier_bytes), key + MBEDTLS_LMOTS_PUBKEY_Q_LEAF_ID_OFFSET,
++            MBEDTLS_LMOTS_Q_LEAF_ID_LEN );
++    ctx->MBEDTLS_PRIVATE(q_leaf_identifier) = network_bytes_to_val( MBEDTLS_LMOTS_Q_LEAF_ID_LEN,
++                                                                    ctx->MBEDTLS_PRIVATE(q_leaf_identifier_bytes) );
++
++    memcpy( ctx->MBEDTLS_PRIVATE(pub_key), key + MBEDTLS_LMOTS_PUBKEY_KEY_HASH_OFFSET, MBEDTLS_LMOTS_N_HASH_LEN );
++
++    ctx->MBEDTLS_PRIVATE(have_pubkey) = 1;
++
++    return( 0 );
++}
++
++int mbedtls_lmots_export_pubkey( mbedtls_lmots_context *ctx,
++                                 unsigned char *key )
++{
++    if ( ctx == NULL || key == NULL)
++    {
++        return( MBEDTLS_ERR_LMOTS_BAD_INPUT_DATA );
++    }
++
++    if ( ! ctx->MBEDTLS_PRIVATE(have_pubkey) )
++    {
++        return( MBEDTLS_ERR_LMOTS_BAD_INPUT_DATA );
++    }
++
++    val_to_network_bytes( ctx->MBEDTLS_PRIVATE(type), MBEDTLS_LMOTS_TYPE_LEN,
++                          key + MBEDTLS_LMOTS_SIG_TYPE_OFFSET );
++
++    memcpy( key + MBEDTLS_LMOTS_PUBKEY_I_KEY_ID_OFFSET, ctx->MBEDTLS_PRIVATE(I_key_identifier),
++            MBEDTLS_LMOTS_I_KEY_ID_LEN );
++
++    memcpy( key + MBEDTLS_LMOTS_PUBKEY_Q_LEAF_ID_OFFSET, ctx->MBEDTLS_PRIVATE(q_leaf_identifier_bytes),
++            MBEDTLS_LMOTS_Q_LEAF_ID_LEN );
++
++    memcpy( key + MBEDTLS_LMOTS_PUBKEY_KEY_HASH_OFFSET, ctx->MBEDTLS_PRIVATE(pub_key),
++            MBEDTLS_LMOTS_N_HASH_LEN );
++
++    return( 0 );
++}
++
++
++int mbedtls_lmots_gen_pubkey( mbedtls_lmots_context *ctx )
++{
++    unsigned char y_hashed_symbols[MBEDTLS_LMOTS_P_SIG_SYMBOL_LEN][32];
++    int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
++
++    if( ctx == NULL )
++    {
++        return( MBEDTLS_ERR_LMOTS_BAD_INPUT_DATA );
++    }
++
++    /* Check that a private key is loaded */
++    if ( !ctx->MBEDTLS_PRIVATE(have_privkey) )
++    {
++        return( MBEDTLS_ERR_LMOTS_BAD_INPUT_DATA );
++    }
++
++    ret = hash_symbol_array( ctx->MBEDTLS_PRIVATE(I_key_identifier),
++                             ctx->MBEDTLS_PRIVATE(q_leaf_identifier_bytes),
++                             ( const unsigned char( *)[32] )(ctx->MBEDTLS_PRIVATE(priv_key)),
++                             NULL, NULL, y_hashed_symbols );
++    if ( ret )
++    {
++        return( ret );
++    }
++
++    ret = public_key_from_hashed_symbol_array( ctx->MBEDTLS_PRIVATE(I_key_identifier),
++                                               ctx->MBEDTLS_PRIVATE(q_leaf_identifier_bytes),
++                                               ( const unsigned char( *)[32] )y_hashed_symbols,
++                                               ctx->MBEDTLS_PRIVATE(pub_key) );
++    if ( ret )
++    {
++        return( ret );
++    }
++
++    ctx->MBEDTLS_PRIVATE(have_pubkey = 1);
++
++    return( ret );
++}
++
++int mbedtls_lmots_gen_privkey( mbedtls_lmots_context *ctx,
++                               const unsigned char I_key_identifier[MBEDTLS_LMOTS_I_KEY_ID_LEN],
++                               unsigned int q_leaf_identifier,
++                               const unsigned char *seed,
++                               size_t seed_len )
++{
++    mbedtls_md_context_t hash_ctx;
++    unsigned int i_symbol_idx;
++    unsigned char i_symbol_idx_bytes[2];
++    unsigned char const_bytes[1];
++    int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
++
++    if( ctx == NULL || I_key_identifier == NULL || seed == NULL)
++    {
++        return( MBEDTLS_ERR_LMOTS_BAD_INPUT_DATA );
++    }
++
++    if ( ctx->MBEDTLS_PRIVATE(have_privkey) )
++    {
++        return( MBEDTLS_ERR_LMOTS_BAD_INPUT_DATA );
++    }
++
++    if ( ctx->MBEDTLS_PRIVATE(type) != MBEDTLS_LMOTS_SHA256_N32_W8 ) {
++        return( MBEDTLS_ERR_LMOTS_BAD_INPUT_DATA );
++    }
++
++    memcpy( ctx->MBEDTLS_PRIVATE(I_key_identifier), I_key_identifier,
++            sizeof( ctx->MBEDTLS_PRIVATE(I_key_identifier) ) );
++
++    ctx->MBEDTLS_PRIVATE(q_leaf_identifier) = q_leaf_identifier;
++
++    val_to_network_bytes( ctx->MBEDTLS_PRIVATE(q_leaf_identifier), MBEDTLS_LMOTS_Q_LEAF_ID_LEN,
++                          ctx->MBEDTLS_PRIVATE(q_leaf_identifier_bytes) );
++
++    val_to_network_bytes( 0xFF, sizeof( const_bytes ), const_bytes );
++
++    for ( i_symbol_idx = 0; i_symbol_idx < MBEDTLS_LMOTS_P_SIG_SYMBOL_LEN; i_symbol_idx++ )
++    {
++        mbedtls_md_init( &hash_ctx );
++        ret = mbedtls_md_setup( &hash_ctx, mbedtls_md_info_from_type( MBEDTLS_MD_SHA256 ), 0 );
++        if( ret )
++        {
++            goto out;
++        }
++        ret = mbedtls_md_starts( &hash_ctx );
++        if ( ret )
++        {
++            goto out;
++        }
++
++        ret = mbedtls_md_update( &hash_ctx, ctx->MBEDTLS_PRIVATE(I_key_identifier),
++                                 sizeof( ctx->MBEDTLS_PRIVATE(I_key_identifier) ) );
++        if ( ret ) {
++            goto out;
++        }
++
++        ret = mbedtls_md_update( &hash_ctx, ctx->MBEDTLS_PRIVATE(q_leaf_identifier_bytes),
++                                 sizeof( ctx->MBEDTLS_PRIVATE(q_leaf_identifier_bytes) ) );
++        if ( ret )
++        {
++            goto out;
++        }
++
++        val_to_network_bytes( i_symbol_idx, I_SYMBOL_IDX_LEN, i_symbol_idx_bytes );
++        ret = mbedtls_md_update( &hash_ctx, i_symbol_idx_bytes, I_SYMBOL_IDX_LEN );
++        if ( ret )
++        {
++            goto out;
++        }
++
++        ret = mbedtls_md_update( &hash_ctx, const_bytes, sizeof( const_bytes) );
++        if ( ret )
++        {
++            goto out;
++        }
++
++        ret = mbedtls_md_update( &hash_ctx, seed, seed_len );
++        if ( ret )
++        {
++            goto out;
++        }
++
++        ret = mbedtls_md_finish( &hash_ctx, ctx->MBEDTLS_PRIVATE(priv_key)[i_symbol_idx] );
++        if ( ret )
++        {
++            goto out;
++        }
++
++        mbedtls_md_free( &hash_ctx);
++    }
++
++    ctx->MBEDTLS_PRIVATE(have_privkey) = 1;
++
++out:
++    if( ret )
++    {
++        mbedtls_md_free( &hash_ctx );
++        return( ret );
++    }
++
++    return ret;
++}
++
++#endif /* MBEDTLS_LMOTS_C */
+diff --git a/library/lms.c b/library/lms.c
+new file mode 100644
+index 00000000..e1ac7b93
+--- /dev/null
++++ b/library/lms.c
+@@ -0,0 +1,718 @@
++/*
++ *  The LMS stateful-hash public-key signature scheme
++ *
++ *  Copyright The Mbed TLS Contributors
++ *  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.
++ */
++
++/*
++ *  The following sources were referenced in the design of this implementation
++ *  of the LMS algorithm:
++ *
++ *  [1] IETF RFC8554
++ *      D. McGrew, M. Curcio, S.Fluhrer
++ *      https://datatracker.ietf.org/doc/html/rfc8554
++ *
++ *  [2] NIST Special Publication 800-208
++ *      David A. Cooper et. al.
++ *      https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-208.pdf
++ */
++
++#include "common.h"
++
++#ifdef MBEDTLS_LMS_C
++
++#include <string.h>
++
++#include "mbedtls/lms.h"
++#include "mbedtls/lmots.h"
++#include "mbedtls/md.h"
++#include "mbedtls/error.h"
++#include "mbedtls/platform_util.h"
++
++#if defined(MBEDTLS_PLATFORM_C)
++#include "mbedtls/platform.h"
++#else
++#include <stdlib.h>
++#include <stdio.h>
++#define mbedtls_printf printf
++#define mbedtls_calloc calloc
++#define mbedtls_free   free
++#endif
++
++#define MERKLE_TREE_NODE_AM (1 << (MBEDTLS_LMS_H_TREE_HEIGHT + 1))
++#define MERKLE_TREE_LEAF_AM (1 << MBEDTLS_LMS_H_TREE_HEIGHT)
++#define MERKLE_TREE_INTR_AM (1 << MBEDTLS_LMS_H_TREE_HEIGHT)
++
++#define D_CONST_LEN           (2)
++
++#define D_LEAF_CONSTANT     (0x8282)
++#define D_INTR_CONSTANT     (0x8383)
++
++static void val_to_network_bytes(unsigned int val, size_t len, unsigned char *bytes)
++{
++    size_t idx;
++
++    for (idx = 0; idx < len; idx++) {
++        bytes[idx] = (val >> ((len - 1 - idx) * 8)) & 0xFF;
++    }
++}
++
++static unsigned int network_bytes_to_val(size_t len, const unsigned char *bytes)
++{
++    size_t idx;
++    unsigned int val = 0;
++
++    for (idx = 0; idx < len; idx++) {
++        val |= ((unsigned int)bytes[idx]) << (8 * (len - 1 - idx));
++    }
++
++    return val;
++}
++
++static int create_merkle_leaf_node( const mbedtls_lms_context *ctx,
++                                    unsigned char pub_key[MBEDTLS_LMOTS_N_HASH_LEN],
++                                    unsigned int r_node_idx,
++                                    unsigned char out[32] )
++{
++    mbedtls_md_context_t hash_ctx;
++    unsigned char D_LEAF_bytes[D_CONST_LEN];
++    unsigned char r_node_idx_bytes[4];
++    int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
++
++    mbedtls_md_init( &hash_ctx );
++    ret = mbedtls_md_setup( &hash_ctx, mbedtls_md_info_from_type( MBEDTLS_MD_SHA256 ), 0 );
++    if( ret )
++    {
++        goto out;
++    }
++    ret = mbedtls_md_starts( &hash_ctx );
++    if( ret )
++    {
++        goto out;
++    }
++
++    ret = mbedtls_md_update( &hash_ctx,
++                             ctx->MBEDTLS_PRIVATE(I_key_identifier),
++                             MBEDTLS_LMOTS_I_KEY_ID_LEN );
++    if( ret )
++    {
++        goto out;
++    }
++
++    val_to_network_bytes( r_node_idx, 4, r_node_idx_bytes );
++    ret = mbedtls_md_update( &hash_ctx, r_node_idx_bytes, 4 );
++    if( ret )
++    {
++        goto out;
++    }
++
++    val_to_network_bytes( D_LEAF_CONSTANT, D_CONST_LEN, D_LEAF_bytes );
++    ret = mbedtls_md_update( &hash_ctx, D_LEAF_bytes, D_CONST_LEN );
++    if( ret )
++    {
++        goto out;
++    }
++
++    ret = mbedtls_md_update( &hash_ctx, pub_key, MBEDTLS_LMOTS_N_HASH_LEN );
++    if( ret )
++    {
++        goto out;
++    }
++
++    ret = mbedtls_md_finish( &hash_ctx, out );
++    if( ret )
++    {
++        goto out;
++    }
++
++out:
++    mbedtls_md_free( &hash_ctx );
++
++    return( ret );
++}
++
++static int create_merkle_intr_node( const mbedtls_lms_context *ctx,
++                                    const unsigned char left_node[32],
++                                    const unsigned char rght_node[32],
++                                    unsigned int r_node_idx,
++                                    unsigned char out[32] )
++{
++    mbedtls_md_context_t hash_ctx;
++    unsigned char D_INTR_bytes[D_CONST_LEN];
++    unsigned char r_node_idx_bytes[4];
++    int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
++
++    mbedtls_md_init( &hash_ctx );
++    ret = mbedtls_md_setup( &hash_ctx, mbedtls_md_info_from_type( MBEDTLS_MD_SHA256 ), 0 );
++    if( ret )
++    {
++        goto out;
++    }
++    ret = mbedtls_md_starts( &hash_ctx );
++    if( ret )
++    {
++        goto out;
++    }
++
++    ret = mbedtls_md_update( &hash_ctx, ctx->MBEDTLS_PRIVATE(I_key_identifier),
++                             MBEDTLS_LMOTS_I_KEY_ID_LEN );
++    if( ret )
++    {
++        goto out;
++    }
++
++    val_to_network_bytes( r_node_idx, 4, r_node_idx_bytes );
++    ret = mbedtls_md_update( &hash_ctx, r_node_idx_bytes, 4 );
++    if( ret )
++    {
++        goto out;
++    }
++
++    val_to_network_bytes( D_INTR_CONSTANT, D_CONST_LEN, D_INTR_bytes );
++    ret = mbedtls_md_update( &hash_ctx, D_INTR_bytes, D_CONST_LEN );
++    if( ret )
++    {
++        goto out;
++    }
++
++    ret = mbedtls_md_update( &hash_ctx, left_node, MBEDTLS_LMOTS_N_HASH_LEN );
++    if( ret )
++    {
++        goto out;
++    }
++
++    ret = mbedtls_md_update( &hash_ctx, rght_node, MBEDTLS_LMOTS_N_HASH_LEN );
++    if( ret )
++    {
++        goto out;
++    }
++
++    ret = mbedtls_md_finish( &hash_ctx, out );
++    if( ret )
++    {
++        goto out;
++    }
++
++out:
++    mbedtls_md_free( &hash_ctx );
++
++    return ret;
++}
++
++static int generate_merkle_tree( mbedtls_lms_context *ctx,
++                                 unsigned char tree[MERKLE_TREE_NODE_AM][32] )
++{
++    unsigned int priv_key_idx;
++    unsigned int r_node_idx;
++    int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
++
++    /* First create the leaf nodes, in ascending order */
++    for( priv_key_idx = 0; priv_key_idx < MERKLE_TREE_INTR_AM; priv_key_idx++ )
++    {
++        r_node_idx = MERKLE_TREE_INTR_AM + priv_key_idx;
++
++        ret = create_merkle_leaf_node( ctx, ctx->MBEDTLS_PRIVATE(priv_keys)[priv_key_idx].pub_key,
++                                       r_node_idx, tree[r_node_idx] );
++        if( ret )
++        {
++            return( ret );
++        }
++    }
++
++    /* Then the internal nodes, in reverse order so that we can guarantee the
++     * parent has been created */
++    for( r_node_idx = MERKLE_TREE_INTR_AM - 1; r_node_idx > 0; r_node_idx-- )
++    {
++        ret = create_merkle_intr_node( ctx, tree[(r_node_idx * 2)],
++                                       tree[(r_node_idx * 2 + 1)],
++                                       r_node_idx, tree[r_node_idx] );
++        if( ret )
++        {
++            return( ret );
++        }
++    }
++
++    return( 0 );
++}
++
++static int get_merkle_path( mbedtls_lms_context *ctx,
++                            unsigned int leaf_node_id, unsigned char path[MBEDTLS_LMS_H_TREE_HEIGHT][32] )
++{
++    unsigned char tree[MERKLE_TREE_NODE_AM][32];
++    unsigned int curr_node_id = leaf_node_id;
++    unsigned int parent_node_id;
++    unsigned char sibling_relative_id;
++    unsigned int adjacent_node_id;
++    unsigned int height;
++    int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
++
++    ret = generate_merkle_tree( ctx, tree);
++    if( ret )
++    {
++        return( ret );
++    }
++
++    for( height = 0; height < MBEDTLS_LMS_H_TREE_HEIGHT; height++ )
++    {
++        parent_node_id = ( curr_node_id / 2 );
++
++        /* 0 if the node is a left child, 1 if the node is a right child */
++        sibling_relative_id = curr_node_id & 1;
++
++        adjacent_node_id = ( parent_node_id * 2 ) + ( 1 - sibling_relative_id );
++
++        memcpy( &path[height], &tree[adjacent_node_id], MBEDTLS_LMOTS_N_HASH_LEN );
++
++        curr_node_id = parent_node_id;
++    }
++
++    return( 0 );
++}
++
++void mbedtls_lms_init( mbedtls_lms_context *ctx )
++{
++    if( ctx == NULL )
++    {
++        return;
++    }
++
++    mbedtls_platform_zeroize( ctx, sizeof( mbedtls_lms_context ) ) ;
++}
++
++void mbedtls_lms_free( mbedtls_lms_context *ctx )
++{
++    unsigned int idx;
++
++    if( ctx == NULL )
++    {
++        return;
++    }
++
++    if( ctx->MBEDTLS_PRIVATE(have_privkey) )
++    {
++        for( idx = 0; idx < MERKLE_TREE_LEAF_AM; idx++ )
++        {
++            mbedtls_lmots_free( &ctx->MBEDTLS_PRIVATE(priv_keys)[idx] );
++        }
++
++        mbedtls_free( ctx->MBEDTLS_PRIVATE(priv_keys) );
++    }
++
++    mbedtls_platform_zeroize( ctx, sizeof( mbedtls_lms_context ) );
++}
++
++int mbedtls_lms_set_algorithm_type( mbedtls_lms_context *ctx,
++                                    mbedtls_lms_algorithm_type_t type,
++                                    mbedtls_lmots_algorithm_type_t otstype )
++{
++    if( ctx == NULL )
++    {
++        return( MBEDTLS_ERR_LMS_BAD_INPUT_DATA );
++    }
++
++    ctx->MBEDTLS_PRIVATE(type) = type;
++    ctx->MBEDTLS_PRIVATE(otstype) = otstype;
++
++    return( 0 );
++}
++
++int mbedtls_lms_sign( mbedtls_lms_context *ctx,
++                      int ( *f_rng)(void *, unsigned char *, size_t),
++                      void* p_rng, unsigned char *msg, unsigned int msg_len,
++                      unsigned char *sig )
++{
++    unsigned int q_leaf_identifier;
++    int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
++
++    if( ctx == NULL )
++    {
++        return( MBEDTLS_ERR_LMS_BAD_INPUT_DATA );
++    }
++
++    if( ! ctx->MBEDTLS_PRIVATE(have_privkey) )
++    {
++        return( MBEDTLS_ERR_LMS_BAD_INPUT_DATA );
++    }
++
++    if( msg == NULL )
++    {
++        return( MBEDTLS_ERR_LMS_BAD_INPUT_DATA );
++    }
++
++    if( sig == NULL )
++    {
++        return( MBEDTLS_ERR_LMS_BAD_INPUT_DATA );
++    }
++
++
++    if( ctx->MBEDTLS_PRIVATE(type) != MBEDTLS_LMS_SHA256_M32_H10 )
++    {
++        return( MBEDTLS_ERR_LMS_BAD_INPUT_DATA );
++    }
++
++    if( ctx->MBEDTLS_PRIVATE(otstype) != MBEDTLS_LMOTS_SHA256_N32_W8 )
++    {
++        return( MBEDTLS_ERR_LMS_BAD_INPUT_DATA );
++    }
++
++
++    if( ctx->MBEDTLS_PRIVATE(q_next_usable_key) >= MERKLE_TREE_LEAF_AM )
++    {
++        return( MBEDTLS_ERR_LMS_OUT_OF_PRIV_KEYS );
++    }
++
++
++    q_leaf_identifier = ctx->MBEDTLS_PRIVATE(q_next_usable_key);
++    /* This new value must _always_ be written back to the disk before the
++     * signature is returned.
++     */
++    ctx->MBEDTLS_PRIVATE(q_next_usable_key) += 1;
++
++    ret = mbedtls_lmots_sign( &ctx->MBEDTLS_PRIVATE(priv_keys)[q_leaf_identifier],
++                              f_rng, p_rng, msg, msg_len,
++                              sig + MBEDTLS_LMS_SIG_OTS_SIG_OFFSET );
++    if( ret )
++    {
++        return( ret );
++    }
++
++    val_to_network_bytes( ctx->MBEDTLS_PRIVATE(type), MBEDTLS_LMS_TYPE_LEN,
++                          sig + MBEDTLS_LMS_SIG_TYPE_OFFSET );
++    val_to_network_bytes( q_leaf_identifier, MBEDTLS_LMOTS_Q_LEAF_ID_LEN,
++                          sig + MBEDTLS_LMS_SIG_Q_LEAF_ID_OFFSET);
++
++    ret = get_merkle_path( ctx, MERKLE_TREE_INTR_AM + q_leaf_identifier,
++                           ( unsigned char( * )[32] )( sig + MBEDTLS_LMS_SIG_PATH_OFFSET ) );
++    if( ret )
++    {
++        return( ret );
++    }
++
++    return( 0 );
++}
++
++int mbedtls_lms_verify( const mbedtls_lms_context *ctx,
++                        const unsigned char *msg, unsigned int msg_len,
++                        const unsigned char *sig )
++{
++    unsigned int q_leaf_identifier;
++    unsigned char Kc_candidate_ots_pub_key[MBEDTLS_LMOTS_N_HASH_LEN];
++    unsigned char Tc_candidate_root_node[32];
++    unsigned int height;
++    unsigned int curr_node_id;
++    unsigned int parent_node_id;
++    const unsigned char* left_node;
++    const unsigned char* rght_node;
++    int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
++
++    if( ctx == NULL )
++    {
++        return( MBEDTLS_ERR_LMS_BAD_INPUT_DATA );
++    }
++
++    if( ! ctx->MBEDTLS_PRIVATE(have_pubkey) )
++    {
++        return( MBEDTLS_ERR_LMS_BAD_INPUT_DATA );
++    }
++
++    if( msg == NULL)
++    {
++        return( MBEDTLS_ERR_LMS_BAD_INPUT_DATA );
++    }
++
++    if( sig == NULL)
++    {
++        return( MBEDTLS_ERR_LMS_BAD_INPUT_DATA );
++    }
++
++    if( ctx->MBEDTLS_PRIVATE(type) != MBEDTLS_LMS_SHA256_M32_H10 )
++    {
++        return( MBEDTLS_ERR_LMS_BAD_INPUT_DATA );
++    }
++
++    if( ctx->MBEDTLS_PRIVATE(otstype) != MBEDTLS_LMOTS_SHA256_N32_W8 )
++    {
++        return( MBEDTLS_ERR_LMS_BAD_INPUT_DATA );
++    }
++
++
++    if( network_bytes_to_val( MBEDTLS_LMS_TYPE_LEN,
++                              sig + MBEDTLS_LMS_SIG_TYPE_OFFSET) != MBEDTLS_LMS_SHA256_M32_H10 )
++    {
++        return( MBEDTLS_ERR_LMS_VERIFY_FAILED );
++    }
++
++    if( network_bytes_to_val( MBEDTLS_LMOTS_TYPE_LEN,
++                              sig + MBEDTLS_LMS_SIG_OTS_SIG_OFFSET + MBEDTLS_LMOTS_SIG_TYPE_OFFSET)
++        != MBEDTLS_LMOTS_SHA256_N32_W8 )
++    {
++        return( MBEDTLS_ERR_LMS_VERIFY_FAILED );
++    }
++
++
++    q_leaf_identifier = network_bytes_to_val( MBEDTLS_LMOTS_Q_LEAF_ID_LEN,
++                                              sig + MBEDTLS_LMS_SIG_Q_LEAF_ID_OFFSET );
++
++    if( q_leaf_identifier >= MERKLE_TREE_LEAF_AM )
++    {
++        return( MBEDTLS_ERR_LMS_VERIFY_FAILED );
++    }
++
++    ret = mbedtls_lmots_generate_pub_key_candidate( ctx->MBEDTLS_PRIVATE(I_key_identifier),
++                                                    sig + MBEDTLS_LMS_SIG_Q_LEAF_ID_OFFSET,
++                                                    msg, msg_len,
++                                                    sig + MBEDTLS_LMS_SIG_OTS_SIG_OFFSET,
++                                                    Kc_candidate_ots_pub_key );
++    if( ret )
++    {
++        return( ret );
++    }
++
++    create_merkle_leaf_node( ctx, Kc_candidate_ots_pub_key,
++                             MERKLE_TREE_INTR_AM + q_leaf_identifier,
++                             Tc_candidate_root_node );
++
++    curr_node_id = MERKLE_TREE_INTR_AM + q_leaf_identifier;
++
++    for( height = 0; height < MBEDTLS_LMS_H_TREE_HEIGHT; height++ )
++    {
++        parent_node_id = curr_node_id / 2;
++
++        /* Left/right node ordering matters for the hash */
++        if( curr_node_id & 1 )
++        {
++            left_node = ( ( const unsigned char( * )[32] )( sig + MBEDTLS_LMS_SIG_PATH_OFFSET ) )[height];
++            rght_node = Tc_candidate_root_node;
++        }
++        else
++        {
++            left_node = Tc_candidate_root_node;
++            rght_node = ( ( const unsigned char( * )[32] )( sig + MBEDTLS_LMS_SIG_PATH_OFFSET ) )[height];
++        }
++
++        create_merkle_intr_node( ctx, left_node, rght_node, parent_node_id,
++                                 Tc_candidate_root_node);
++
++        curr_node_id /= 2;
++    }
++
++    if( memcmp( Tc_candidate_root_node, ctx->MBEDTLS_PRIVATE(T_1_pub_key),
++                MBEDTLS_LMOTS_N_HASH_LEN) )
++    {
++        return( MBEDTLS_ERR_LMS_VERIFY_FAILED );
++    }
++
++    return( 0 );
++}
++
++int mbedtls_lms_import_pubkey( mbedtls_lms_context *ctx,
++                               const unsigned char *key )
++{
++    mbedtls_lms_algorithm_type_t type;
++    mbedtls_lmots_algorithm_type_t otstype;
++
++    if( ctx == NULL )
++    {
++        return( MBEDTLS_ERR_LMS_BAD_INPUT_DATA );
++    }
++
++    if( key == NULL )
++    {
++        return( MBEDTLS_ERR_LMS_BAD_INPUT_DATA );
++    }
++
++    type = network_bytes_to_val( MBEDTLS_LMS_TYPE_LEN, key + MBEDTLS_LMS_PUBKEY_TYPE_OFFSET );
++    if( type != MBEDTLS_LMS_SHA256_M32_H10 )
++    {
++        return( MBEDTLS_ERR_LMS_BAD_INPUT_DATA );
++    }
++    ctx->MBEDTLS_PRIVATE(type) = type;
++
++    otstype = network_bytes_to_val( MBEDTLS_LMOTS_TYPE_LEN,
++                                    key + MBEDTLS_LMS_PUBKEY_OTSTYPE_OFFSET );
++    if( otstype != MBEDTLS_LMOTS_SHA256_N32_W8 )
++    {
++        return( MBEDTLS_ERR_LMS_BAD_INPUT_DATA );
++    }
++    ctx->MBEDTLS_PRIVATE(otstype) = otstype;
++
++    memcpy( ctx->MBEDTLS_PRIVATE(I_key_identifier), key + MBEDTLS_LMS_PUBKEY_I_KEY_ID_OFFSET,
++            MBEDTLS_LMOTS_I_KEY_ID_LEN );
++    memcpy( ctx->MBEDTLS_PRIVATE(T_1_pub_key), key + MBEDTLS_LMS_PUBKEY_ROOT_NODE_OFFSET,
++            MBEDTLS_LMOTS_N_HASH_LEN );
++
++    ctx->MBEDTLS_PRIVATE(have_pubkey) = 1;
++
++    return( 0 );
++}
++
++int mbedtls_lms_export_pubkey( mbedtls_lms_context *ctx,
++                               unsigned char *key )
++{
++    if( ctx == NULL )
++    {
++        return( MBEDTLS_ERR_LMS_BAD_INPUT_DATA );
++    }
++
++    if( key == NULL )
++    {
++        return( MBEDTLS_ERR_LMS_BAD_INPUT_DATA );
++    }
++
++    if( ! ctx->MBEDTLS_PRIVATE(have_pubkey) )
++    {
++        return( MBEDTLS_ERR_LMS_BAD_INPUT_DATA );
++    }
++
++    val_to_network_bytes( ctx->MBEDTLS_PRIVATE(type),
++                          MBEDTLS_LMS_TYPE_LEN, key + MBEDTLS_LMS_PUBKEY_TYPE_OFFSET );
++    val_to_network_bytes( ctx->MBEDTLS_PRIVATE(otstype),
++                          MBEDTLS_LMOTS_TYPE_LEN, key + MBEDTLS_LMS_PUBKEY_OTSTYPE_OFFSET );
++    memcpy( key + MBEDTLS_LMS_PUBKEY_I_KEY_ID_OFFSET,
++            ctx->MBEDTLS_PRIVATE(I_key_identifier),
++            MBEDTLS_LMOTS_I_KEY_ID_LEN );
++    memcpy( key + MBEDTLS_LMS_PUBKEY_ROOT_NODE_OFFSET,
++            ctx->MBEDTLS_PRIVATE(T_1_pub_key),
++            MBEDTLS_LMOTS_N_HASH_LEN );
++
++    return( 0 );
++}
++
++int mbedtls_lms_gen_pubkey( mbedtls_lms_context *ctx )
++{
++    unsigned char tree[MERKLE_TREE_NODE_AM][32];
++    unsigned int idx;
++    int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
++
++    if( ctx == NULL )
++    {
++        return( MBEDTLS_ERR_LMS_BAD_INPUT_DATA );
++    }
++
++    if( ! ctx->MBEDTLS_PRIVATE( have_privkey ) )
++    {
++        return( MBEDTLS_ERR_LMS_BAD_INPUT_DATA );
++    }
++
++    if( ctx->MBEDTLS_PRIVATE(type) != MBEDTLS_LMS_SHA256_M32_H10 )
++    {
++        return( MBEDTLS_ERR_LMS_BAD_INPUT_DATA );
++    }
++
++    if( ctx->MBEDTLS_PRIVATE(otstype) != MBEDTLS_LMOTS_SHA256_N32_W8 )
++    {
++        return( MBEDTLS_ERR_LMS_BAD_INPUT_DATA );
++    }
++
++    for( idx = 0; idx < MERKLE_TREE_LEAF_AM; idx++ )
++    {
++        ret = mbedtls_lmots_gen_pubkey( &ctx->MBEDTLS_PRIVATE(priv_keys)[idx] );
++        if( ret )
++        {
++            return( ret );
++        }
++    }
++
++    ret = generate_merkle_tree( ctx, tree);
++    if( ret )
++    {
++        return( ret );
++    }
++
++    /* Root node is always at position 1, due to 1-based indexing */
++    memcpy( ctx->MBEDTLS_PRIVATE(T_1_pub_key), &tree[1], MBEDTLS_LMOTS_N_HASH_LEN );
++
++    ctx->MBEDTLS_PRIVATE(have_pubkey) = 1;
++
++    return( 0 );
++}
++
++int mbedtls_lms_gen_privkey( mbedtls_lms_context *ctx,
++                             int ( *f_rng)(void *, unsigned char *, size_t),
++                             void* p_rng, unsigned char *seed,
++                             size_t seed_len )
++{
++    unsigned int idx;
++    int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
++
++    if( ctx == NULL )
++    {
++        return( MBEDTLS_ERR_LMS_BAD_INPUT_DATA );
++    }
++
++    if( ctx->MBEDTLS_PRIVATE(type) != MBEDTLS_LMS_SHA256_M32_H10 )
++    {
++        return( MBEDTLS_ERR_LMS_BAD_INPUT_DATA );
++    }
++
++    if( ctx->MBEDTLS_PRIVATE(otstype) != MBEDTLS_LMOTS_SHA256_N32_W8 )
++    {
++        return( MBEDTLS_ERR_LMS_BAD_INPUT_DATA );
++    }
++
++    if( ctx->MBEDTLS_PRIVATE(have_privkey) )
++    {
++        return( MBEDTLS_ERR_LMS_BAD_INPUT_DATA );
++    }
++
++    f_rng( p_rng, ctx->MBEDTLS_PRIVATE(I_key_identifier),
++           sizeof( ctx->MBEDTLS_PRIVATE(I_key_identifier) ) );
++
++    ctx->MBEDTLS_PRIVATE(priv_keys) = mbedtls_calloc( MERKLE_TREE_LEAF_AM,
++                                                      sizeof( mbedtls_lmots_context));
++    if( ctx->MBEDTLS_PRIVATE(priv_keys) == NULL )
++    {
++        ret = MBEDTLS_ERR_LMS_ALLOC_FAILED;
++        goto out;
++    }
++
++    for( idx = 0; idx < MERKLE_TREE_LEAF_AM; idx++ )
++    {
++        mbedtls_lmots_init( &ctx->MBEDTLS_PRIVATE(priv_keys)[idx] );
++        ret = mbedtls_lmots_set_algorithm_type( &ctx->MBEDTLS_PRIVATE(priv_keys)[idx],
++                                                ctx->MBEDTLS_PRIVATE(otstype) );
++        if( ret)
++        {
++            goto out;
++        }
++    }
++
++
++    for( idx = 0; idx < MERKLE_TREE_LEAF_AM; idx++ )
++    {
++        ret = mbedtls_lmots_gen_privkey( &ctx->MBEDTLS_PRIVATE(priv_keys)[idx],
++                                         ctx->MBEDTLS_PRIVATE(I_key_identifier),
++                                         idx, seed, seed_len );
++        if( ret)
++        {
++            goto out;
++        }
++    }
++
++    ctx->MBEDTLS_PRIVATE(q_next_usable_key) = 0;
++    ctx->MBEDTLS_PRIVATE(have_privkey) = 1;
++
++out:
++    if( ret )
++    {
++        mbedtls_free( ctx->MBEDTLS_PRIVATE(priv_keys) );
++        return( ret );
++    }
++
++    return( 0 );
++}
++
++#endif /* MBEDTLS_LMS_C */
+diff --git a/scripts/generate_errors.pl b/scripts/generate_errors.pl
+index 0a03f02e..d333f659 100755
+--- a/scripts/generate_errors.pl
++++ b/scripts/generate_errors.pl
+@@ -47,7 +47,7 @@ my $error_format_file = $data_dir.'/error.fmt';
+ 
+ my @low_level_modules = qw( AES ARIA ASN1 BASE64 BIGNUM
+                             CAMELLIA CCM CHACHA20 CHACHAPOLY CMAC CTR_DRBG DES
+-                            ENTROPY ERROR GCM HKDF HMAC_DRBG MD5
++                            ENTROPY ERROR GCM HKDF HMAC_DRBG LMS LMOTS MD5
+                             NET OID PADLOCK PBKDF2 PLATFORM POLY1305 RIPEMD160
+                             SHA1 SHA256 SHA512 THREADING );
+ my @high_level_modules = qw( CIPHER DHM ECP MD
+diff --git a/tests/suites/test_suite_lmots.data b/tests/suites/test_suite_lmots.data
+new file mode 100644
+index 00000000..ed192bf7
+--- /dev/null
++++ b/tests/suites/test_suite_lmots.data
+@@ -0,0 +1,29 @@
++LMOTS sign-verify test #1
++lmots_sign_verify_test:"c41ba177a0ca1ec31dfb2e145237e65b"
++
++LMOTS sign-verify test #2
++lmots_sign_verify_test:"55a6647a581004306792b653a561d9f3"
++
++LMOTS hash-sigs interop test #1
++lmots_verify_test:"C80B24A82D52963AB241C84DCF0EEE55BB24F9F0":"00000004DB3B6B24FD191CE8894AE3C4E2CE2DE0C3F5D508691A9162F37704E07838488466CCD746E55BC8E3055C7A4D4DA2E10775DAFA2E8E5FEFB1CEB25973BC3323B61DE5E2EA7DCFF15DA482320F958023CA2E718C69B977019E8F2FCD47151388E2E5E11170AFE93BDEB508362B3A317835A9DDEB18F0CDCCC0731902DB3D37F441C93A490DE53962A915AB5060A1C157D61DDF061F272362AB7FD9EE95AE48D3448F204C81A3F260792784E1BFB49871A27C09CC549A406520F0B40BC74CAAD082EAAB12C994B8495B8C80E96384FF2222255BE6C4EE5AF439534E616F9C0B53E951F69D59BD0506C0C0366A679A8329ACF6E2D1D4E4EF49D35375A8EA46FCF3C9B2F8E033C242EC61B796E43B901407077A2AF3F0AABD2D0CB9004F10D91B57C2D5E8BA7BA9268FF94962CC102F55B5120D7D2F7A3BE281BA01D78895ADA2F05B77967EDA0E1EDEAFBB9BBC3D68DCBF682FBC70467FA2BEE5DE65F54247C4BE5BEF41F5108B6CD09E7698E3AAEA04B60746EDD0E2623B66B092DDA21EFA5A0D36805D101D805CC06F0E818B46059B3984C8B8A526C4239F66ED34B8CA57E178DC5E7B8D2BE029114B4CE466E2B5A081729B3F3A3F3845DDE177062F201C09125ED3CC381AF35EAD795440C421A136F941F09F3E4BA9E0203CBA875AF477AB0246342700F323E65DC327D27966377D871FD9C58BEC8797DEF35E1D0751A554719828B87332F601884EBFECB63A8D4F390785B3826BFA384BE502D2322C919ABD12A486C2AB124DCB7B74DE91241A30EF0388411E52145A88971C6C0A4E7C4F23EDD8D6008065A3D108C6B1EC5219BB0DFDBD37EE3A7A8DD37E3563A5777838FCA61E9E744813F39CF70B5A0F50E1BD4FF8733A3BDA76D2135969809D91A9786F22DC2ACBA4E0164C411019EC77A0BD253A42AC7528FC7C0DA1711FBD6C23825207060463080F9E04B7D819C8B150C22B8BA87C6277696EC409369C48AC0E3233DE52D31EF6D2207D2B57DFC2D0C43BE8212EAE6CB1BACBC2D3568E5527A14065D5F1F56AAE2AFB5FB1CEFFC228A30692BD030C71F4872DB54F2632CD919DA61576CF58D1EBE3D7988183A9C789EB74A3D7F6BBEBAC035A43397BF684C9E1130B252940DBA4454311A6A3D54D9386D48E1D5A3E70944EDF725AEDC5440CD610F79AB05A43C917FFC15213295EB8CB8432B6554A47C2AD419ADD52E0F5E0BD7A1E0F873257E69F8647F3A07093387B7A64C4812CDBEE536E45D531F89653AC5F14A4715CFF40692346FE6CBF2F9B92D9F1101C379AFD5E6154605059C1DA463B407E79C139396623DC7F15EEFCE424C8E214C6A645EF002F90A230D8F62177CBCF2A688D4F822B119835AD3D3A619F46230257A5AD59CB0924B2584DBA96AADE0A2487E7409EE5993A4F0E3DC46C10B96595CDD17D72C35EF4A52C5906655B0AE649B5DE03B7D46F3839E808761EE05E9300050647593C048669A952324B0188ED225AD11BED3FD94E44E134FB9D6DAD53CC34ECF62695E30637C4528C450D62174E2F8ABA2C09F134412EF889C24B36224BE4259B363A9D8EB89BAEE16BE1898D46":"000000048440BBD3F47A167DD2D0E446DBCEA774000000138686E25BC07C69B43A2D3B7165DFF85C134177C876EA47D96FEF069BC96A981A":0
++
++LMOTS hash-sigs interop test #2
++lmots_verify_test:"85A77D026E8C704B14EF665DEB0A648350FA8859":"00000004BEEF900CA9A14982E011A5A94503D566288932AD4B9CB85D1551C766A56F788B0D223FBA0E1AD722BE48365B4CE5DA21051B3A79EAD8C1046944192EE51E162DE1E9AE9B13DD8FA90867A17666CB8967F7CD7F4F5383703CCFF555EEBDC8123AF3C4E39D0A5D61725B6A7F23CE587D256C08D31510BCD895106CD524B432A9211CDCBDF5ADDAD5F1D76D428A76DF2556FFA8AB546CFAAA7F2FE86164B976FDA2940498DB0D1A2DE29972FFD55D83E7CA3318DBAC31670565A1E5F59E36342F887E0EF7855AD93CA5F1951307D79EEA375168BC35A3A0B053AEBDB4D7157AD929B0D7DE9FC1E8C32C9A2D679843CBC77560EEDA5959D0AC8407648344C6952649A303E7B6FCC2EE979E1B2786B898A01E2918894DB4E37A0ED79A30260A45959B4BB3016F081181190CB740376389827B2D56DF7EC00871DC9A198B74C7C6086C940A845D54198F2D5DD7A47F97A192F33A85AAA1304A3251B82AC33C5E7B3BA20D2A9BD49BBEE0B2DA2338E578E6F139BB7596DC3BD89E86CB393C42765B9FE85457116906C3F9A8499CF5E539A5CCB3F6D1F36CA209DE6942F807E579AF0EBF072EA110A812C9E420647CE7C8B2BDBB5F56C5B3B7EA80A53C3574F4ED32E4708DFEED60280ABBE2021B3791B0CB09C1F0731353234A6A327CDDFD4E3E2D9DD5A16FCDE3EEF09C67065BD702C07B53A005D3FE7D23FFD77D40E49C82165EB104343A166E808A3CAEDE1A43AE3A82E1788B49C565CF88A2AB8E2FD37657D53E3679D7A818D864F55144011AB498A4A985C46342F3562FD80ECB86497C3DBB759006E5FFFDC01CAA15C69B716174EDCB6E9870CF391003D3826451D1BEFDCC84C093428EE01DAF883190F5D2542B36A7DE44A453AECD5E93B768ACEE75076BE3D73A66F17CFD8E4A49B1F61CE9446815A86FF5FB0EA070A751893C85360C038A161D3DD4D2C66F440E7265153AB346EF620156605C028DD9636FAE0C9A20DF09303ECC5E57A6424505530F70D25F1C95FE51CBD82C2AD0015EB9AD5379CEC463FA0331A14DD971B7C2311FC45979C531653E7252884BAB7C49F8CD652BDF6FDFA76984445C63B54ED22B4A8A267D091381BE7B9B7608133968BA46106BF42B9091F78C085E674D1F70FB91C68D07733F6412B1583DD2F37C6ECAD6BCCE1A1C7D0A7CA80677F679A5AFE08D15427E5C78CE6EB9AA90F51F40343DC9FD1316DCEB2C1EF8EA217B714B0DE1AEECE04D19D0D7757481EDA6E8C51BE85B7B24720E8D62B8AEC56C1A1B9D278B874AACC0B492CF44ED4E7B1200C82323C1AFA0FC776E92B227E8979E3A92EAB05FCF18A43AE648397088F4991F73ECE22C03B3F42F51C0C0FE0DF37919D048FB473F7AB0E33310B9782DE56384BD888CE5E2A644E20A52DD47F710DB0D3169991E29E716ABFD84CA4850080B6C252CB96CD8979189819E532DF56ECB172F773919733BF4D442901EBFB656EBFED4C6D83FAFF288279779499091C94432ECDF83188048AB596D65BC48FA708D485F9CDC50C8B470DFE22157E8F5EE366722A04E8CE7B861573E5FC97D34055BB50B562738F803B202F7F8":"00000004DE9CE10EA7125AC6399B6B3C7EE24224000000161D61E675F3EA19C5B95DA4EE2E35BA061B39E7639F3989F8AE4B0696B3F87E4E":0
++
++LMOTS hash-sigs interop test #3
++lmots_verify_test:"C32F83EFBFD87F386A6C0850CBB93A75F2506A35":"00000004BD2D174BEBEEF1CAF06E4BF1088DE2AAB17C0528579BD4E1C4A1ED583C36BDACA49798373961B605EAEFAEFC0B4BC39C7AD30572CD29BEBE9AEE503CA2D8BF8C31C8A1B71CF67A18EE01A8A878699F22A1AEE32731E51E3EAD3775EFD8339E263C5A4544559506BA5502B9AEF59217ABC24923EC5E28D18BA18B0D964DB277007A76B8075B39F48CDA92148C9BAE1C7E5421CA753FA2D6BEAE8F49977E4E5B6F38D35BA28A526A53061E57BB92DA0EBBD4AE01AE9FADBED74F503DC39FA2E10C20B47DFB3DFBE25EC35618D2307D21716B10F8FB5095B42C289D1847E5D6F9988C6763D288667D3B658A4F3613E084DAE8B78E0B295A6ED28E88C676995AA5EB1533CDF8EB6F95A5E5117F06B1759495A9CB6E40FBF1F97FF73FDCBFD315C48DA631AB0425CA0633817C46F25E84AEEA37DD77310EE56815E83F862EF14E15FC1246243AA02F40EA32567237D5ADC2944BD63CF55FA4F0DE251B3F5C067D9EC396D5E20F9CEF2C555D89DA721D91D6D607653B97636AB10B74F39FA984D23A3D276EFF5F49C336274A66AC491EDE34686C6CFC17F5312FD3E3E5749A2E472011FA391A5ACF09D918B01704B447FD5E3EA6BB726A3475775DFE6A98CE5473CDEDB630EA4D604BAF36A8B8A8E567F05929E8A74970AA742FBC945021017E464E753D5AC497925AA4AECA0CBF562B2E39F891E177FD8E4E61A698B099D21F13EFD0DE5357A1970314D8E3AA1D2A84D3BCF75A7876C16F585322CC4C613FE3AC8FEA5F258FC9C7200765E9209378C362AFC1A478A117D913CE2BEFEB51103E48D0802618C50918005F1AA4228B67BA1A1B001A91A032019A135B8AEEE3D0158A602C8DCCE5A6580DECC16204E410CBB15FCF36704BB2ECB826A229E45C454B4A5DFC12796E636B300C624DB4E6EAB424B17A18A5A5F52399F247A1507A5985D06F90889FE381129148AF8447B392D4EC0775D91502B48D9F212FCE3F81639901C462F752E27FBEEC9E2B7F8CCD16053FB839E8ADF8CD3E8FF8AF3B3E884F4F524C2026BD3B337B7058B53CFC7596F9C813FFD746B8AC0012C60E96140934B4EED1D8602E57A1A6EBC01FCFD66053AF9614FAF0D0F7320D50D440F2A3148A0DAEF5E2FA31F854D56045065AFAA52A60DC3321E2D7C104FF505057D55CD94C53C31C14DB0DAA4D55C4065CD9BCD78E1B8532A680F7DC3544021346CC59ADEC061DDA1B7606BAF28AD87C39AB8AF3D03E981EFFE50B4D5347175517EF212E61F02B594A96492091AC82625D334504EF19BEEE52E01B111D43313F35EC69C88EF38926071506AB3A5B372DD6F2B901AC1E12E61CCB3ACD3D0777A7A10F137126DAD0D1970D369A067C3A1F19D9CB8756D7130B7EB0C08CF725EB2ADFAD61204195CE14F3C99A88A9B8FA2FDCBD612DF9266614DEA073C9EDABE07B3793048167D4DA49B305AE27974D48A296871350DE036CAA348D2F9A9CB19DC094E5904E25DDCF5657227DCD2A4E620121FBDA032A58836EDC14F3A7C4E51319A60F91F941CC61757498B769799394574C9D198426AC3499F0D0BA1770AD6BAA0D3716333F785A9D7D":"00000004DA66203A7E7BCA2362DB3C8E897A84B10000000D1BD4EE08FAA341C2CE018BD12776E1B8E6B8B2C1EEDAE6BD0998E52F089936FE":0
++
++LMOTS hash-sigs interop negative test (altered random value)
++lmots_verify_test:"C80B24A82D52963AB241C84DCF0EEE55BB24F9F0":"00000004CB3B6B24FD191CE8894AE3C4E2CE2DE0C3F5D508691A9162F37704E07838488466CCD746E55BC8E3055C7A4D4DA2E10775DAFA2E8E5FEFB1CEB25973BC3323B61DE5E2EA7DCFF15DA482320F958023CA2E718C69B977019E8F2FCD47151388E2E5E11170AFE93BDEB508362B3A317835A9DDEB18F0CDCCC0731902DB3D37F441C93A490DE53962A915AB5060A1C157D61DDF061F272362AB7FD9EE95AE48D3448F204C81A3F260792784E1BFB49871A27C09CC549A406520F0B40BC74CAAD082EAAB12C994B8495B8C80E96384FF2222255BE6C4EE5AF439534E616F9C0B53E951F69D59BD0506C0C0366A679A8329ACF6E2D1D4E4EF49D35375A8EA46FCF3C9B2F8E033C242EC61B796E43B901407077A2AF3F0AABD2D0CB9004F10D91B57C2D5E8BA7BA9268FF94962CC102F55B5120D7D2F7A3BE281BA01D78895ADA2F05B77967EDA0E1EDEAFBB9BBC3D68DCBF682FBC70467FA2BEE5DE65F54247C4BE5BEF41F5108B6CD09E7698E3AAEA04B60746EDD0E2623B66B092DDA21EFA5A0D36805D101D805CC06F0E818B46059B3984C8B8A526C4239F66ED34B8CA57E178DC5E7B8D2BE029114B4CE466E2B5A081729B3F3A3F3845DDE177062F201C09125ED3CC381AF35EAD795440C421A136F941F09F3E4BA9E0203CBA875AF477AB0246342700F323E65DC327D27966377D871FD9C58BEC8797DEF35E1D0751A554719828B87332F601884EBFECB63A8D4F390785B3826BFA384BE502D2322C919ABD12A486C2AB124DCB7B74DE91241A30EF0388411E52145A88971C6C0A4E7C4F23EDD8D6008065A3D108C6B1EC5219BB0DFDBD37EE3A7A8DD37E3563A5777838FCA61E9E744813F39CF70B5A0F50E1BD4FF8733A3BDA76D2135969809D91A9786F22DC2ACBA4E0164C411019EC77A0BD253A42AC7528FC7C0DA1711FBD6C23825207060463080F9E04B7D819C8B150C22B8BA87C6277696EC409369C48AC0E3233DE52D31EF6D2207D2B57DFC2D0C43BE8212EAE6CB1BACBC2D3568E5527A14065D5F1F56AAE2AFB5FB1CEFFC228A30692BD030C71F4872DB54F2632CD919DA61576CF58D1EBE3D7988183A9C789EB74A3D7F6BBEBAC035A43397BF684C9E1130B252940DBA4454311A6A3D54D9386D48E1D5A3E70944EDF725AEDC5440CD610F79AB05A43C917FFC15213295EB8CB8432B6554A47C2AD419ADD52E0F5E0BD7A1E0F873257E69F8647F3A07093387B7A64C4812CDBEE536E45D531F89653AC5F14A4715CFF40692346FE6CBF2F9B92D9F1101C379AFD5E6154605059C1DA463B407E79C139396623DC7F15EEFCE424C8E214C6A645EF002F90A230D8F62177CBCF2A688D4F822B119835AD3D3A619F46230257A5AD59CB0924B2584DBA96AADE0A2487E7409EE5993A4F0E3DC46C10B96595CDD17D72C35EF4A52C5906655B0AE649B5DE03B7D46F3839E808761EE05E9300050647593C048669A952324B0188ED225AD11BED3FD94E44E134FB9D6DAD53CC34ECF62695E30637C4528C450D62174E2F8ABA2C09F134412EF889C24B36224BE4259B363A9D8EB89BAEE16BE1898D46":"000000048440BBD3F47A167DD2D0E446DBCEA774000000138686E25BC07C69B43A2D3B7165DFF85C134177C876EA47D96FEF069BC96A981A":MBEDTLS_ERR_LMOTS_VERIFY_FAILED
++
++LMOTS negative test (invalid type) #1
++lmots_verify_test:"0000000000000000000000000000000000000000":"0000000500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000":"0000000500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000":MBEDTLS_ERR_LMOTS_BAD_INPUT_DATA
++
++LMOTS negative test (invalid type) #2
++lmots_verify_test:"0000000000000000000000000000000000000000":"0000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000":"0000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000":MBEDTLS_ERR_LMOTS_BAD_INPUT_DATA
++
++LMOTS key import / export test
++lmots_import_export_test:"000000048440BBD3F47A167DD2D0E446DBCEA774000000138686E25BC07C69B43A2D3B7165DFF85C134177C876EA47D96FEF069BC96A981A"
++
++LMOTS key reuse test
++lmots_reuse_test:"cfcd1e81193e310c9d931d1b00818d14"
+diff --git a/tests/suites/test_suite_lmots.function b/tests/suites/test_suite_lmots.function
+new file mode 100644
+index 00000000..6de94d12
+--- /dev/null
++++ b/tests/suites/test_suite_lmots.function
+@@ -0,0 +1,108 @@
++/* BEGIN_HEADER */
++#include "mbedtls/lmots.h"
++#include "mbedtls/entropy.h"
++#include "mbedtls/ctr_drbg.h"
++
++/* END_HEADER */
++
++/* BEGIN_DEPENDENCIES
++ * depends_on:MBEDTLS_LMOTS_C:MBEDTLS_SHA256_C:MBEDTLS_CTR_DRBG_C
++ * END_DEPENDENCIES
++ */
++
++/* BEGIN_CASE */
++void lmots_sign_verify_test ( data_t * msg )
++{
++    mbedtls_lmots_context ctx;
++    unsigned char sig[MBEDTLS_LMOTS_SIG_LEN];
++    mbedtls_entropy_context entropy_ctx;
++    mbedtls_ctr_drbg_context drbg_ctx;
++    uint8_t seed[16];
++
++    mbedtls_entropy_init( &entropy_ctx );
++    mbedtls_ctr_drbg_init( &drbg_ctx );
++    mbedtls_lmots_init( &ctx );
++
++    TEST_ASSERT( mbedtls_ctr_drbg_seed( &drbg_ctx, mbedtls_entropy_func,
++                 &entropy_ctx, (uint8_t*)"", 0 ) == 0 );
++    TEST_ASSERT( mbedtls_ctr_drbg_random( &drbg_ctx, seed, sizeof( seed ) ) == 0 );
++
++    TEST_ASSERT( mbedtls_lmots_set_algorithm_type(&ctx, MBEDTLS_LMOTS_SHA256_N32_W8) == 0 );
++    TEST_ASSERT( mbedtls_lmots_gen_privkey(&ctx, (uint8_t[16]){0}, 0x12, seed, sizeof( seed ) ) == 0 );
++    TEST_ASSERT( mbedtls_lmots_gen_pubkey(&ctx) == 0 );
++    TEST_ASSERT( mbedtls_lmots_sign(&ctx, mbedtls_ctr_drbg_random, &drbg_ctx, msg->x, msg->len, sig ) == 0 );
++    TEST_ASSERT( mbedtls_lmots_verify(&ctx, msg->x, msg->len, sig) == 0 );
++
++exit:
++    mbedtls_entropy_free( &entropy_ctx );
++    mbedtls_ctr_drbg_free( &drbg_ctx );
++    mbedtls_lmots_free( &ctx );
++}
++/* END_CASE */
++
++/* BEGIN_CASE */
++void lmots_verify_test ( data_t * msg, data_t * sig, data_t * pub_key,
++                          int expected_rc )
++{
++    mbedtls_lmots_context ctx;
++
++    mbedtls_lmots_init( &ctx );
++
++    mbedtls_lmots_import_pubkey( &ctx, pub_key->x );
++
++    TEST_ASSERT(mbedtls_lmots_verify( &ctx, msg->x, msg->len, sig->x ) == expected_rc );
++
++exit:
++    mbedtls_lmots_free( &ctx );
++}
++/* END_CASE */
++
++/* BEGIN_CASE */
++void lmots_import_export_test (  data_t * pub_key )
++{
++    mbedtls_lmots_context ctx;
++    uint8_t exported_pub_key[MBEDTLS_LMOTS_PUBKEY_LEN];
++
++    mbedtls_lmots_init( &ctx );
++    TEST_ASSERT( mbedtls_lmots_import_pubkey( &ctx, pub_key->x ) == 0 );
++    TEST_ASSERT( mbedtls_lmots_export_pubkey( &ctx, exported_pub_key ) == 0 );
++
++    TEST_ASSERT( memcmp( pub_key->x, exported_pub_key, MBEDTLS_LMOTS_PUBKEY_LEN ) == 0 );
++
++exit:
++    mbedtls_lmots_free( &ctx );
++}
++/* END_CASE */
++
++/* BEGIN_CASE */
++void lmots_reuse_test ( data_t * msg )
++{
++    mbedtls_lmots_context ctx;
++    unsigned char sig[MBEDTLS_LMOTS_SIG_LEN];
++    mbedtls_entropy_context entropy_ctx;
++    mbedtls_ctr_drbg_context drbg_ctx;
++    uint8_t seed[16];
++
++    mbedtls_entropy_init( &entropy_ctx );
++    mbedtls_ctr_drbg_init( &drbg_ctx );
++    TEST_ASSERT( mbedtls_ctr_drbg_seed(&drbg_ctx, mbedtls_entropy_func,
++                 &entropy_ctx, (uint8_t*)"", 0 ) == 0 );
++
++    mbedtls_ctr_drbg_random( &drbg_ctx, seed, sizeof( seed ) );
++
++    mbedtls_lmots_init( &ctx );
++    TEST_ASSERT( mbedtls_lmots_set_algorithm_type( &ctx, MBEDTLS_LMOTS_SHA256_N32_W8 ) == 0 );
++    TEST_ASSERT( mbedtls_lmots_gen_privkey(&ctx, (uint8_t[16]){0}, 0x12, seed, sizeof( seed ) ) == 0 );
++    TEST_ASSERT( mbedtls_lmots_sign(&ctx, mbedtls_ctr_drbg_random, &drbg_ctx, msg->x, msg->len, sig ) == 0 );
++
++    /* Running another sign operation should fail, since the key should now have
++     * been erased.
++     */
++    TEST_ASSERT( mbedtls_lmots_sign(&ctx, mbedtls_ctr_drbg_random, &drbg_ctx, msg->x, msg->len, sig ) != 0 );
++
++exit:
++    mbedtls_entropy_free( &entropy_ctx );
++    mbedtls_ctr_drbg_free( &drbg_ctx );
++    mbedtls_lmots_free( &ctx );
++}
++/* END_CASE */
+diff --git a/tests/suites/test_suite_lms.data b/tests/suites/test_suite_lms.data
+new file mode 100644
+index 00000000..b17fddc1
+--- /dev/null
++++ b/tests/suites/test_suite_lms.data
+@@ -0,0 +1,32 @@
++LMS sign-verify test
++lms_sign_verify_test:"c41ba177a0ca1ec31dfb2e145237e65b"
++
++LMS hash-sigs interop test #1
++lms_verify_test:"D5557C719EBB0DBECF563E5CDB16568BB11CD779":"0000000000000004C167A9AC495BD4EA34CD8EE5AAA2A656D518C33612FD87171421BFC3977CFA99765C6D496499C72A1DE21360DA57EB96BC83DB8AA92E560054C7805B04E336162FB4C411B509F76959F2458B0E53CF830E0145CCD439D494259EA4818CA68924A7E8B9DD36D6A9C7849B72F9338ED6C80A3E70B717E8E65B991B2FF9D8B49820E8ABC9E2ECC17DB38E855DA75D84DF9885C7F9DFB4ABC209CFF1D37D66595371D688A203CB89168945200C39169F784B19665CE1FB47D58BFA734C3E0E7E31D1206A033C6D8E25B7E45CA779A5FDE00C6B1CAC44884F2B52A380E1F6D8753549F7F4948A95AEA83703CF3AA108FA4F735AFC0DA1A03C378033D8B5959E7BE05D3C5070E709181AC09EFEC04128ABD7E8F37304FAD4B66373D4A83CFC1EF632DF6DB95577C2C6101CBDC807109ED8AE831FFB73DBC80942C58F334663B980F982C74B943BF7C57147250AADE595310387E3BB1A2705E9EC73DE7FABDA5EC0B1141A18798215B9A70F8D688357C833ED869059A2AA3360155EF84426288198D0FBB78223816B17093684C48942ED18FCD351C34E108E5B71D1CE39E318B5D991B650C46A91112E013E1180F2054C7A22429CAB31512BA34EA3AD9B68C5001EB70C993297CCF11914ECAF059922DAEE7D90ACE2567495ADA066E7DA1679CA45DAC1990B17184E7BE2E6A0F26AD77F19855D074F5B37372277484CE30B80A0540173C1B310C3E7B683A487B5D0676218EA1F65FEA444C493FC535E948EAB62252DCC90516BB45B60D4253DB6979FE342DC5CA1B86B01B2D8EBA79B0BC7B6984535616B792BB45F3C0E20B506E0694E1D5BA28FE96D34FE2BE354777D090404DD3508E9F7918FF5593ADB468478CA8A1F6AF752CC76F401E373B71471D9D70F455C8A73E4E7B6714394B1DD0E2A816AF3D5149835DAE477A70DEE0BDAC22F99A04BFB7C2D4AD53079C326F620DFD3F7CED4AB7F2E291507AA046331050F9E2205C52B36CBAEE817C5C3B1FBCDE61C54C8CB7B67E0570FA44728EC8FD091D5CEDC19C6B99840F7A0E49086F707E959D34B30E255B67BBAA24FADE532BF3D21825626E114BD8213170B0C2F01733D4ED420D01EE3ACD5F84DACE674AE7127DB0A80ACE252CAD9ADADDAFAB27281AFD6DDD72DB5AF878326C45D7DB1EFF8BC40895A3473A52461D076881310AD9937307217B5C0448B509EF9BA075936CC09E11B8838D3A6BC5EF9FAEA85A3EC87EEFDF2E38CD9732730085375A4FFC4E0A213B0E1FC3DE2D37F1EDACC3030F617F3459A03BFCF776A05FD3B7FD135782F6D6E7C5E92B56A1316525B26D3AE1CEA3C0C7CF3AA7B1E72B7599A31B50837D79A7AB61B9A9E2B7AABD2D605C97E302EB4B66C0588C24147955EA0892A54D42843568FE0863E7EFEAE336D302E672EA62689B4DAA02DD5BC99D93886EC7F411C53CE1CAEAB59FBC0B06E0E294F1900F8C626C6FF520AE2323DA797CDC120DBC19F7FEBA0E13429508C5B838A0F8B9B28A069C5DD40E2F6CC2C95FC6ACE7E1351516817BD2DC1AE08D498AD2B0BD1D8374942FF31FC6A4689C592244C919C3561E73DD4986FA500000006BBF34F6EE152B64FCDD1CB6848D2DA761798707060431761006E2EBD9312851F4F3DF3C46E10F643DDD58CB3D9F4D371F655EE26271F2DDE84A14CAA6A077DD96AF83849DE6CA8F2F3248902CBF49630C18C3EE3123D951CE9162D0E742B899AF9E5DA8D28A41C7CADF0194CDB09418BF48BF322F8C5E9563524196FA8AB785B43C4EA41A36148028D2F4C7356CDEEB09532CD7F2C80FC36589FF7A9954100C8697AEB014997C3088C242B4F70D26CE7F7E77384A9CF536EC5C5329E08BD6C1D65EFEFC1389A42D16FFB43A0E1D7661220E92A4A59703FB28410E73A677E803D4441929DFD7269E6F77AE8CA8C70B67B250A8728291EA5D4E3F03D505639408C88156DCBECC137142FA3585C09D99B84D8C380A5D29CE2ADA10A25F7CF939FE23288551F37FE2B7233BF97C0F5726B972E087BCBA095957CCD794794A4F50027":"00000006000000046B0927585C8547228D495361D73B970C287A2254BF8F1B170E55ACC9520A56CE5D2C711B6617718B49247D28CCC6D11D":0
++
++LMS hash-sigs interop test #2
++lms_verify_test:"DA16BE0B8FB691248486ACAFD531BE6EE4C362E0":"000000000000000484FCD0D791D175A0F86D64B2E8949F793CA9FFDC0347DE125DDB2F895BB9D2B43740B9B326B24F934D67586812BE6F3FB57E76FB12FBAD60A685F22A82C95C84AFAE63F47BB3CD951D483F61F5626B2B5FB6FDCA0CF02293EFDE1EB0AF6712D635678E825099E95435B43EF83C49C6589054D0905D82D597FB11A721D2232AD168FD179724539699C21163D5ADEB52290CB711C368572FF8BB95AA61DF2AD128307E768E73D3CF2BAFEAC8B6CD165BDD0316D2663D1ED61A15FB974082FC66A55E13ABA4FD084970EF6A59B0DFA1E934BF0E056C86E9B4C5B94CF863AB9F23BE2DB6A140A9CAA8DB31C83B21BDBDCD07304A52EB8501869D86BFDB68A376D94F847EED7E4CAB6A6EEC063945AE4DAF657D5509249E7FE430F5A13B188C4DD311F01746CE28F4F6540041EF6ADB299F712F591C83B0C12C1FB3E4A878C63217E25E08C004571FFC69E9C684E46F4D36C36409EBF3EB15F32A187176F4D177E0FE0E71ADFD4DA4AD2D57A0256B29AD5DAA6867AED20CC862AF5729D030514D41BB8D74551D8E925322C81A357A586227BBC885AB683BF835E9333A056AFEE96F2AD0FF6D6E235A9E2BC342ACBCF0B8EACC95E7B74215F6C65F12829433301F004EE1D9CFD16A4A1D092F48E99AEAE9E1FA4619ECE5E05F5C19F33C4C94A774EB8955409E3CFA73D8807CAA7C55FE45E980C7E7626AAA193F18A3AA7E525FFA6466D728FA25563DD383D855A0B6F8C011AC8C79C853CBED3A016DC26EF6E90B3E78119E465B9962A42B6AC168C1CDC9DB860D740B0C797303E2A62445FA618B5EB417BD4385C15BC548FEDF4D4842CA43F95188FFF63EB5D4AC85DAE618FDFB6CF5969EA0A3A52F73A4AC4957BC4EBCFEF593923EC79196021B25ED8D7558E4AF41ED74941585AC575CF1971D4F4C7C9E9516276734FF9FAFC7DE661F3090F71C98962789B31EA0FE406E2EF02F6F16B1708258C7559B8E05E27D647AD472805C865299FE30A5FE451DA7F2C493A37AA1655D492EC891B9AF559E12104CDD2EEB2E54138A1FB5A403AA32CEEB3946471A299604FA2DD3CA3E9567D01A3CEE5D09A1C2768B521C0C6142AF297CA5BFB3878B32D37D415542C15F655CB051240F3BA8FCE0E38449A0D7010A9B56BA2283E3A2047215813ED2090F7BDF16A40ADE32AB4E669684E6DEB6A94633E6643F29D10914F5A361C964CA9145514D4B80B45F3276EB0C649622034E71925FA038EB35E64C71CBDB11E91D779339516A351BD2A722CB60C2CBF145689B2E3F6FAEB74C3B58283929F70023503A96FED6A5D7D8A9E495FE1D85E0FCEC555F86747347D2FB5219FF65EFD144A5E1E88C63BE4259C42F6899C103536D75E0526508649E2836CACB94E88BD954B88EAC26F17B27BF62546C5C7573E2BC9EF4B65B8AE4951AF532F968FF050E504CC236DC48379E4390079DE451DCE710F9674D753C85B9FF7E7B09ED051EDD14C33AAFC8A188AE06234DFB61FE5A75C7A760B5286E1D6993BCEA0AB8A2C1D632145BD6A9F109ABB04E0B102D50DCB8C607AD6BA8C5FA5B21663E5A40194CA5DC2294BE10044E8D96AA0000000694ABC63BC5B27730C5223943C8341461474033BE3A221AFFDE66242AF14510CC656480CBDFC0B35205C89258A18BF6C29C4708CB2572DE15EE5DD481BC47060254954B5C5DD881AE6B358F7CDAB6F117235AAAC625B2750DB72BA4A96D7DFAA889BE780416E1CB264A413C6713710102D1D433BC6D0A47BF08AA74FD613D292A867261181BBD73557EE3AEB0F63579B71E58E97BAC1AACA3F34646350A13BB7ACE0AB3B062C41518768ABF3D32FB2F6A5E5C7F6B8B04C943D25A82F03F977755D74FD717A4B7E7674B03B577405210E23A2FE050E036DB0730359366A9436AD2CBCCE3E649F9E40023B2C12D9F5AA824319EAF571FD4842E573BB100BE9715D7B71F75521640D9B69B889349A283D62350D3A37264C89930F40603A5458B124EA850BA59024A46A8F325C9A9776817D739692FFAEA2758249888BF79D66FD496":"00000006000000043FC8322D04908C7C06C0D8B7A0CE24FA3AC253393CF9A56CF760294A06E75223E38C9E5329DDC493D8B51B1A4BBE41F8":0
++
++LMS hash-sigs interop test #3
++lms_verify_test:"331D543362A163390508127AFB9894B8C18C6E0A":"0000000000000004F5378439E9C229550D40B725FD56BE48DB785093E62BD29B723C61FABEDCFD486EFA120445339DE2A21A8C7465073ACBFD6DE3E50F395AAC20E0BCB23B088C416199F80B540AA81B2C0B12B7785152263522E8F79AEBE3B28315CC834AEB68475CADBC724DB6B7B7F594A7F9DA2505F5F44DAA7EEF70B72665A250C1F61A19F3FA4CBF389BEB9B31DC327882D7983EEED46DA8E00AEBEF85AE179EBF6D8CC7F720E9F963C4D30DD4015DAA27993D0780AFD7A45688422B1444AD866FEFE12EBD94B4D313517708A6E652D6206A8B263E234685D8133C2258EF6CA9E9C6FFD6D153598B13B59576897DC4F77C71609427866A347AE62B5C3BACB0A2E44B60F2CCB4989B0C57F3E785CDCF22B1FC8C3460A163FF2BE7A578E82429BA823F392A13C11A5639A42453972D2185E81809EF0666F8F01F575FBD9A46135F45651AA814D9BA84F774A9E9303FD55038CA41A21484BA9C38E69BCE4E37052971690ED3EEC4ED9AD41B0AEAE4DCC913443B9FA5418FB75DC1725FA989BA8DB5D9E221804FC7F36F3135C8B93AFF66DF89408CFD50993D308E51DF00540F380C0AD06266B80F646B917BA58384B55658EAD2D453766C4843FCDD934E8352A6DF6A081A15BDE07BF67E977E72BFE1AC37F411111A0A4D101A2CCF95EBEC7FCFC82B45DBA88939B0831987AE4D15C05A2E08F713BB0B6BB0E2436B7F9C83D2D869432465DEB9185913DE215937EFB4A52DA50BEF88688F5AB4397A04B14CDBFA5BFD948CD6EA1122D9D3C2927DE9D066297AA2C6FE8E478EC0F41459287EF9B8A1A56164C72AE3DCE5E914E8BC3C3821E0ADD6D1C9048D71BD71F71F3A6E04E63687298DE5A3704ADA82AA369CCD7F342F79E988A7BE066CA55944E0E3712F472891761E5617DC048C69AA4C250AA1560D6591FC0E7492027BEED67310E3482B1487E41DEA5E070894A5FB93FF4462D1F60C4B1CA7C15275EEA2B3790ED12EA930FD7F7F07D60807E4AAB73D1F889DABF2E687A487F331AC17D8DE24E8448E672F87424F0D1A73721A1A987519D0E3BB91D15D012B1FCDB6E23EEA17E93869C5199984CE8A068CA96C3096273F8B23160A79EE0C208D9B70ED5E23CB3586DFD33E02D06F1C646250BD664C27D2BB9614FF5F043A6FEE1A235DA10DCAADB19205CB839BD616BB36B738AA28E1D4F767BD8BAB6C2F84887C7B2E16CF6E07AF90C1FCB6E6E5A4CC894072AF4393C63F7119FF694BF0A043AF5F0825557A99C40BABBDA97D5648687D493367812743335A8AD7696562538C8BA5DED182C4DC818E7E9F630B29A9534E2583E0F4B5862D4E4DB250A350BAF360EF133838FE55AA683E253746A704654EF692F4F818F5A172AB0B84673D0AF77CC1DF189AA5BB013E833D1B0943918768AC6A83E6BFB306D3C3786BD2C87129BFEA1C380A84C4983D262184427284BF3DEB9B4C58FB1899B07B9F60B4402618168B1445653E8E48CD92C048684302A6F5C217F110D6699707BA42316CB31FE8F4DA6B82243CF1264751225594AF1BB670339A9189163DB9E985A99BCF83A3039AF3E65BBCD8364745356B29D761853E00000006CDE5B63B9763DA3EABCFFDA517688BDEC2AE9213E6B0FD7003D95458798AE9449DE4F1135E093B39F597A34B14AAB7F596E25BA469533442F54C14921ABCC5D04A05486CD16C8564E6A19C11BEDA574A9800107DCEAD013A7E6A32966B5BBE9FDFDB0184FE0707209B6D9EC43066899717E487E5FDEE02061EA5069B2D6C9C87D6BEB1310F1B9E723AE372DB7BE9EF6657F51FD0DE62464D3B37755095829F625EA76F5FD7FCD5829863F963FCD7F9FFFF3729688D025DF7952B067C62198E4C6CE06E960B0BAC6ADBC9459D9AC0BE1BAD46F95A121BBBE6953BAA10252419E2AB6BCA1B0AA1FA64DF728160B4FB7A62499C24D269FF59977649064C5986D615E6952EA0DA5B1C04C443BC27A63D391D5BFAE824F0161791E65896DC100EAF80037FD800A5079337554BD990E0D0A1A4C4C45741E72FB3E840665F2881D2CCC5":"000000060000000461F2DF219685CF313043780A57C18071725490AB8D53B676D484238BA8C373572407938CC578045649964958C0A872FA":0
++
++LMS hash-sigs interop negative test (altered random value)
++lms_verify_test:"D5557C719EBB0DBECF563E5CDB16568BB11CD779":"0000000000000004B167A9AC495BD4EA34CD8EE5AAA2A656D518C33612FD87171421BFC3977CFA99765C6D496499C72A1DE21360DA57EB96BC83DB8AA92E560054C7805B04E336162FB4C411B509F76959F2458B0E53CF830E0145CCD439D494259EA4818CA68924A7E8B9DD36D6A9C7849B72F9338ED6C80A3E70B717E8E65B991B2FF9D8B49820E8ABC9E2ECC17DB38E855DA75D84DF9885C7F9DFB4ABC209CFF1D37D66595371D688A203CB89168945200C39169F784B19665CE1FB47D58BFA734C3E0E7E31D1206A033C6D8E25B7E45CA779A5FDE00C6B1CAC44884F2B52A380E1F6D8753549F7F4948A95AEA83703CF3AA108FA4F735AFC0DA1A03C378033D8B5959E7BE05D3C5070E709181AC09EFEC04128ABD7E8F37304FAD4B66373D4A83CFC1EF632DF6DB95577C2C6101CBDC807109ED8AE831FFB73DBC80942C58F334663B980F982C74B943BF7C57147250AADE595310387E3BB1A2705E9EC73DE7FABDA5EC0B1141A18798215B9A70F8D688357C833ED869059A2AA3360155EF84426288198D0FBB78223816B17093684C48942ED18FCD351C34E108E5B71D1CE39E318B5D991B650C46A91112E013E1180F2054C7A22429CAB31512BA34EA3AD9B68C5001EB70C993297CCF11914ECAF059922DAEE7D90ACE2567495ADA066E7DA1679CA45DAC1990B17184E7BE2E6A0F26AD77F19855D074F5B37372277484CE30B80A0540173C1B310C3E7B683A487B5D0676218EA1F65FEA444C493FC535E948EAB62252DCC90516BB45B60D4253DB6979FE342DC5CA1B86B01B2D8EBA79B0BC7B6984535616B792BB45F3C0E20B506E0694E1D5BA28FE96D34FE2BE354777D090404DD3508E9F7918FF5593ADB468478CA8A1F6AF752CC76F401E373B71471D9D70F455C8A73E4E7B6714394B1DD0E2A816AF3D5149835DAE477A70DEE0BDAC22F99A04BFB7C2D4AD53079C326F620DFD3F7CED4AB7F2E291507AA046331050F9E2205C52B36CBAEE817C5C3B1FBCDE61C54C8CB7B67E0570FA44728EC8FD091D5CEDC19C6B99840F7A0E49086F707E959D34B30E255B67BBAA24FADE532BF3D21825626E114BD8213170B0C2F01733D4ED420D01EE3ACD5F84DACE674AE7127DB0A80ACE252CAD9ADADDAFAB27281AFD6DDD72DB5AF878326C45D7DB1EFF8BC40895A3473A52461D076881310AD9937307217B5C0448B509EF9BA075936CC09E11B8838D3A6BC5EF9FAEA85A3EC87EEFDF2E38CD9732730085375A4FFC4E0A213B0E1FC3DE2D37F1EDACC3030F617F3459A03BFCF776A05FD3B7FD135782F6D6E7C5E92B56A1316525B26D3AE1CEA3C0C7CF3AA7B1E72B7599A31B50837D79A7AB61B9A9E2B7AABD2D605C97E302EB4B66C0588C24147955EA0892A54D42843568FE0863E7EFEAE336D302E672EA62689B4DAA02DD5BC99D93886EC7F411C53CE1CAEAB59FBC0B06E0E294F1900F8C626C6FF520AE2323DA797CDC120DBC19F7FEBA0E13429508C5B838A0F8B9B28A069C5DD40E2F6CC2C95FC6ACE7E1351516817BD2DC1AE08D498AD2B0BD1D8374942FF31FC6A4689C592244C919C3561E73DD4986FA500000006BBF34F6EE152B64FCDD1CB6848D2DA761798707060431761006E2EBD9312851F4F3DF3C46E10F643DDD58CB3D9F4D371F655EE26271F2DDE84A14CAA6A077DD96AF83849DE6CA8F2F3248902CBF49630C18C3EE3123D951CE9162D0E742B899AF9E5DA8D28A41C7CADF0194CDB09418BF48BF322F8C5E9563524196FA8AB785B43C4EA41A36148028D2F4C7356CDEEB09532CD7F2C80FC36589FF7A9954100C8697AEB014997C3088C242B4F70D26CE7F7E77384A9CF536EC5C5329E08BD6C1D65EFEFC1389A42D16FFB43A0E1D7661220E92A4A59703FB28410E73A677E803D4441929DFD7269E6F77AE8CA8C70B67B250A8728291EA5D4E3F03D505639408C88156DCBECC137142FA3585C09D99B84D8C380A5D29CE2ADA10A25F7CF939FE23288551F37FE2B7233BF97C0F5726B972E087BCBA095957CCD794794A4F50027":"00000006000000046B0927585C8547228D495361D73B970C287A2254BF8F1B170E55ACC9520A56CE5D2C711B6617718B49247D28CCC6D11D":MBEDTLS_ERR_LMS_VERIFY_FAILED
++
++LMS negative test (invalid lms type) #1
++lms_verify_test:"0000000000000000000000000000000000000000":"000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000":"0000000700000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000":MBEDTLS_ERR_LMS_BAD_INPUT_DATA
++
++LMS negative test (invalid lms type) #2
++lms_verify_test:"0000000000000000000000000000000000000000":"000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000":"0000000500000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000":MBEDTLS_ERR_LMS_BAD_INPUT_DATA
++
++LMS negative test (invalid lm_ots type) #1
++lms_verify_test:"0000000000000000000000000000000000000000":"000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000":"0000000600000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000":MBEDTLS_ERR_LMS_BAD_INPUT_DATA
++
++LMS negative test (invalid lm_ots type) #2
++lms_verify_test:"0000000000000000000000000000000000000000":"000000000000000500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000":"0000000600000005000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000":MBEDTLS_ERR_LMS_BAD_INPUT_DATA
++
++LMS negative test (invalid leaf ID)
++lms_verify_test:"0000000000000000000000000000000000000000":"000004000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000":"0000000600000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000":MBEDTLS_ERR_LMS_VERIFY_FAILED
++
++LMS import/export test
++lms_import_export_test:"00000006000000046B0927585C8547228D495361D73B970C287A2254BF8F1B170E55ACC9520A56CE5D2C711B6617718B49247D28CCC6D11D"
+diff --git a/tests/suites/test_suite_lms.function b/tests/suites/test_suite_lms.function
+new file mode 100644
+index 00000000..b19d074f
+--- /dev/null
++++ b/tests/suites/test_suite_lms.function
+@@ -0,0 +1,85 @@
++/* BEGIN_HEADER */
++#include "mbedtls/lms.h"
++#include "mbedtls/entropy.h"
++#include "mbedtls/ctr_drbg.h"
++
++/* END_HEADER */
++
++/* BEGIN_DEPENDENCIES
++ * depends_on:MBEDTLS_LMS_C:MBEDTLS_SHA256_C:MBEDTLS_CTR_DRBG_C
++ * END_DEPENDENCIES
++ */
++
++/* BEGIN_CASE */
++void lms_sign_verify_test ( data_t * msg )
++{
++    mbedtls_lms_context ctx;
++    unsigned char sig[MBEDTLS_LMS_SIG_LEN];
++    mbedtls_entropy_context entropy_ctx;
++    mbedtls_ctr_drbg_context drbg_ctx;
++    uint8_t seed[16];
++    int rc;
++
++    mbedtls_entropy_init( &entropy_ctx );
++    mbedtls_ctr_drbg_init( &drbg_ctx );
++    mbedtls_lms_init( &ctx );
++
++    TEST_ASSERT( mbedtls_ctr_drbg_seed( &drbg_ctx, mbedtls_entropy_func,
++                 &entropy_ctx, ( uint8_t* )"", 0 ) == 0 );
++    TEST_ASSERT( mbedtls_ctr_drbg_random( &drbg_ctx, seed, sizeof( seed ) ) == 0 );
++
++    TEST_ASSERT( mbedtls_lms_set_algorithm_type( &ctx, MBEDTLS_LMS_SHA256_M32_H10, MBEDTLS_LMOTS_SHA256_N32_W8 ) == 0 );
++
++    /* Allocation failure isn't a test failure, since it likely just means there's not enough memory to run the test */
++    rc = mbedtls_lms_gen_privkey( &ctx, mbedtls_ctr_drbg_random, &drbg_ctx, seed, sizeof( seed ) );
++    TEST_ASSUME( rc != MBEDTLS_ERR_LMS_ALLOC_FAILED );
++    TEST_ASSERT( rc == 0 );
++
++    TEST_ASSERT( mbedtls_lms_gen_pubkey( &ctx) == 0 );
++
++    TEST_ASSERT( mbedtls_lms_sign( &ctx, mbedtls_ctr_drbg_random, &drbg_ctx, msg->x, msg->len, sig ) == 0 );
++
++    TEST_ASSERT( mbedtls_lms_verify( &ctx, msg->x, msg->len, sig) == 0 );
++
++exit:
++    mbedtls_entropy_free( &entropy_ctx );
++    mbedtls_ctr_drbg_free( &drbg_ctx );
++    mbedtls_lms_free( &ctx );
++}
++/* END_CASE */
++
++/* BEGIN_CASE */
++void lms_verify_test ( data_t * msg, data_t * sig, data_t * pub_key,
++                          int expected_rc )
++{
++    mbedtls_lms_context ctx;
++
++    mbedtls_lms_init( &ctx);
++
++    mbedtls_lms_import_pubkey( &ctx, pub_key->x );
++
++    TEST_ASSERT( mbedtls_lms_verify( &ctx, msg->x, msg->len, sig->x ) == expected_rc );
++
++exit:
++    mbedtls_lms_free( &ctx );
++}
++/* END_CASE */
++
++/* BEGIN_CASE */
++void lms_import_export_test (  data_t * pub_key )
++{
++    mbedtls_lms_context ctx;
++    uint8_t exported_pub_key[MBEDTLS_LMS_PUBKEY_LEN];
++
++    mbedtls_lms_init(&ctx);
++    TEST_ASSERT( mbedtls_lms_import_pubkey( &ctx, pub_key->x ) == 0 );
++    TEST_ASSERT( mbedtls_lms_export_pubkey( &ctx, exported_pub_key) == 0 );
++
++    ASSERT_COMPARE( pub_key->x, MBEDTLS_LMS_PUBKEY_LEN,
++                    exported_pub_key, MBEDTLS_LMS_PUBKEY_LEN );
++
++exit:
++    mbedtls_lms_free( &ctx );
++}
++/* END_CASE */
++
+-- 
+2.17.1
+
