aboutsummaryrefslogtreecommitdiff
path: root/lib/mbedtls-2.27.0/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'lib/mbedtls-2.27.0/scripts')
-rwxr-xr-xlib/mbedtls-2.27.0/scripts/abi_check.py446
-rwxr-xr-xlib/mbedtls-2.27.0/scripts/apidoc_full.sh40
-rwxr-xr-xlib/mbedtls-2.27.0/scripts/assemble_changelog.py523
-rwxr-xr-xlib/mbedtls-2.27.0/scripts/bump_version.sh154
-rwxr-xr-xlib/mbedtls-2.27.0/scripts/config.pl25
-rwxr-xr-xlib/mbedtls-2.27.0/scripts/config.py536
-rw-r--r--lib/mbedtls-2.27.0/scripts/data_files/error.fmt169
-rw-r--r--lib/mbedtls-2.27.0/scripts/data_files/query_config.fmt139
-rw-r--r--lib/mbedtls-2.27.0/scripts/data_files/rename-1.3-2.0.txt2174
-rw-r--r--lib/mbedtls-2.27.0/scripts/data_files/version_features.fmt54
-rw-r--r--lib/mbedtls-2.27.0/scripts/data_files/vs2010-app-template.vcxproj171
-rw-r--r--lib/mbedtls-2.27.0/scripts/data_files/vs2010-main-template.vcxproj156
-rw-r--r--lib/mbedtls-2.27.0/scripts/data_files/vs2010-sln-template.sln28
-rw-r--r--lib/mbedtls-2.27.0/scripts/data_files/vs6-app-template.dsp101
-rw-r--r--lib/mbedtls-2.27.0/scripts/data_files/vs6-main-template.dsp94
-rw-r--r--lib/mbedtls-2.27.0/scripts/data_files/vs6-workspace-template.dsw18
-rwxr-xr-xlib/mbedtls-2.27.0/scripts/ecc-heap.sh89
-rw-r--r--lib/mbedtls-2.27.0/scripts/find-mem-leak.cocci20
-rwxr-xr-xlib/mbedtls-2.27.0/scripts/footprint.sh120
-rwxr-xr-xlib/mbedtls-2.27.0/scripts/generate_errors.pl228
-rwxr-xr-xlib/mbedtls-2.27.0/scripts/generate_features.pl88
-rwxr-xr-xlib/mbedtls-2.27.0/scripts/generate_psa_constants.py344
-rwxr-xr-xlib/mbedtls-2.27.0/scripts/generate_query_config.pl90
-rwxr-xr-xlib/mbedtls-2.27.0/scripts/generate_visualc_files.pl299
-rwxr-xr-xlib/mbedtls-2.27.0/scripts/massif_max.pl48
-rw-r--r--lib/mbedtls-2.27.0/scripts/mbedtls_dev/asymmetric_key_data.py166
-rw-r--r--lib/mbedtls-2.27.0/scripts/mbedtls_dev/c_build_helper.py138
-rw-r--r--lib/mbedtls-2.27.0/scripts/mbedtls_dev/crypto_knowledge.py153
-rw-r--r--lib/mbedtls-2.27.0/scripts/mbedtls_dev/macro_collector.py512
-rw-r--r--lib/mbedtls-2.27.0/scripts/mbedtls_dev/psa_storage.py203
-rw-r--r--lib/mbedtls-2.27.0/scripts/mbedtls_dev/test_case.py102
-rw-r--r--lib/mbedtls-2.27.0/scripts/mbedtls_dev/typing_util.py39
-rwxr-xr-xlib/mbedtls-2.27.0/scripts/memory.sh141
-rwxr-xr-xlib/mbedtls-2.27.0/scripts/output_env.sh192
-rwxr-xr-xlib/mbedtls-2.27.0/scripts/rename.pl133
-rw-r--r--lib/mbedtls-2.27.0/scripts/rm-calloc-cast.cocci7
-rwxr-xr-xlib/mbedtls-2.27.0/scripts/tmp_ignore_makefiles.sh59
-rw-r--r--lib/mbedtls-2.27.0/scripts/windows_msbuild.bat20
38 files changed, 8019 insertions, 0 deletions
diff --git a/lib/mbedtls-2.27.0/scripts/abi_check.py b/lib/mbedtls-2.27.0/scripts/abi_check.py
new file mode 100755
index 0000000..3cfd95a
--- /dev/null
+++ b/lib/mbedtls-2.27.0/scripts/abi_check.py
@@ -0,0 +1,446 @@
+#!/usr/bin/env python3
+"""
+Purpose
+
+This script is a small wrapper around the abi-compliance-checker and
+abi-dumper tools, applying them to compare the ABI and API of the library
+files from two different Git revisions within an Mbed TLS repository.
+The results of the comparison are either formatted as HTML and stored at
+a configurable location, or are given as a brief list of problems.
+Returns 0 on success, 1 on ABI/API non-compliance, and 2 if there is an error
+while running the script. Note: must be run from Mbed TLS root.
+"""
+
+# 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.
+
+import os
+import sys
+import traceback
+import shutil
+import subprocess
+import argparse
+import logging
+import tempfile
+import fnmatch
+from types import SimpleNamespace
+
+import xml.etree.ElementTree as ET
+
+
+class AbiChecker:
+ """API and ABI checker."""
+
+ def __init__(self, old_version, new_version, configuration):
+ """Instantiate the API/ABI checker.
+
+ old_version: RepoVersion containing details to compare against
+ new_version: RepoVersion containing details to check
+ configuration.report_dir: directory for output files
+ configuration.keep_all_reports: if false, delete old reports
+ configuration.brief: if true, output shorter report to stdout
+ configuration.skip_file: path to file containing symbols and types to skip
+ """
+ self.repo_path = "."
+ self.log = None
+ self.verbose = configuration.verbose
+ self._setup_logger()
+ self.report_dir = os.path.abspath(configuration.report_dir)
+ self.keep_all_reports = configuration.keep_all_reports
+ self.can_remove_report_dir = not (os.path.exists(self.report_dir) or
+ self.keep_all_reports)
+ self.old_version = old_version
+ self.new_version = new_version
+ self.skip_file = configuration.skip_file
+ self.brief = configuration.brief
+ self.git_command = "git"
+ self.make_command = "make"
+
+ @staticmethod
+ def check_repo_path():
+ if not all(os.path.isdir(d) for d in ["include", "library", "tests"]):
+ raise Exception("Must be run from Mbed TLS root")
+
+ def _setup_logger(self):
+ self.log = logging.getLogger()
+ if self.verbose:
+ self.log.setLevel(logging.DEBUG)
+ else:
+ self.log.setLevel(logging.INFO)
+ self.log.addHandler(logging.StreamHandler())
+
+ @staticmethod
+ def check_abi_tools_are_installed():
+ for command in ["abi-dumper", "abi-compliance-checker"]:
+ if not shutil.which(command):
+ raise Exception("{} not installed, aborting".format(command))
+
+ def _get_clean_worktree_for_git_revision(self, version):
+ """Make a separate worktree with version.revision checked out.
+ Do not modify the current worktree."""
+ git_worktree_path = tempfile.mkdtemp()
+ if version.repository:
+ self.log.debug(
+ "Checking out git worktree for revision {} from {}".format(
+ version.revision, version.repository
+ )
+ )
+ fetch_output = subprocess.check_output(
+ [self.git_command, "fetch",
+ version.repository, version.revision],
+ cwd=self.repo_path,
+ stderr=subprocess.STDOUT
+ )
+ self.log.debug(fetch_output.decode("utf-8"))
+ worktree_rev = "FETCH_HEAD"
+ else:
+ self.log.debug("Checking out git worktree for revision {}".format(
+ version.revision
+ ))
+ worktree_rev = version.revision
+ worktree_output = subprocess.check_output(
+ [self.git_command, "worktree", "add", "--detach",
+ git_worktree_path, worktree_rev],
+ cwd=self.repo_path,
+ stderr=subprocess.STDOUT
+ )
+ self.log.debug(worktree_output.decode("utf-8"))
+ version.commit = subprocess.check_output(
+ [self.git_command, "rev-parse", "HEAD"],
+ cwd=git_worktree_path,
+ stderr=subprocess.STDOUT
+ ).decode("ascii").rstrip()
+ self.log.debug("Commit is {}".format(version.commit))
+ return git_worktree_path
+
+ def _update_git_submodules(self, git_worktree_path, version):
+ """If the crypto submodule is present, initialize it.
+ if version.crypto_revision exists, update it to that revision,
+ otherwise update it to the default revision"""
+ update_output = subprocess.check_output(
+ [self.git_command, "submodule", "update", "--init", '--recursive'],
+ cwd=git_worktree_path,
+ stderr=subprocess.STDOUT
+ )
+ self.log.debug(update_output.decode("utf-8"))
+ if not (os.path.exists(os.path.join(git_worktree_path, "crypto"))
+ and version.crypto_revision):
+ return
+
+ if version.crypto_repository:
+ fetch_output = subprocess.check_output(
+ [self.git_command, "fetch", version.crypto_repository,
+ version.crypto_revision],
+ cwd=os.path.join(git_worktree_path, "crypto"),
+ stderr=subprocess.STDOUT
+ )
+ self.log.debug(fetch_output.decode("utf-8"))
+ crypto_rev = "FETCH_HEAD"
+ else:
+ crypto_rev = version.crypto_revision
+
+ checkout_output = subprocess.check_output(
+ [self.git_command, "checkout", crypto_rev],
+ cwd=os.path.join(git_worktree_path, "crypto"),
+ stderr=subprocess.STDOUT
+ )
+ self.log.debug(checkout_output.decode("utf-8"))
+
+ def _build_shared_libraries(self, git_worktree_path, version):
+ """Build the shared libraries in the specified worktree."""
+ my_environment = os.environ.copy()
+ my_environment["CFLAGS"] = "-g -Og"
+ my_environment["SHARED"] = "1"
+ if os.path.exists(os.path.join(git_worktree_path, "crypto")):
+ my_environment["USE_CRYPTO_SUBMODULE"] = "1"
+ make_output = subprocess.check_output(
+ [self.make_command, "lib"],
+ env=my_environment,
+ cwd=git_worktree_path,
+ stderr=subprocess.STDOUT
+ )
+ self.log.debug(make_output.decode("utf-8"))
+ for root, _dirs, files in os.walk(git_worktree_path):
+ for file in fnmatch.filter(files, "*.so"):
+ version.modules[os.path.splitext(file)[0]] = (
+ os.path.join(root, file)
+ )
+
+ @staticmethod
+ def _pretty_revision(version):
+ if version.revision == version.commit:
+ return version.revision
+ else:
+ return "{} ({})".format(version.revision, version.commit)
+
+ def _get_abi_dumps_from_shared_libraries(self, version):
+ """Generate the ABI dumps for the specified git revision.
+ The shared libraries must have been built and the module paths
+ present in version.modules."""
+ for mbed_module, module_path in version.modules.items():
+ output_path = os.path.join(
+ self.report_dir, "{}-{}-{}.dump".format(
+ mbed_module, version.revision, version.version
+ )
+ )
+ abi_dump_command = [
+ "abi-dumper",
+ module_path,
+ "-o", output_path,
+ "-lver", self._pretty_revision(version),
+ ]
+ abi_dump_output = subprocess.check_output(
+ abi_dump_command,
+ stderr=subprocess.STDOUT
+ )
+ self.log.debug(abi_dump_output.decode("utf-8"))
+ version.abi_dumps[mbed_module] = output_path
+
+ def _cleanup_worktree(self, git_worktree_path):
+ """Remove the specified git worktree."""
+ shutil.rmtree(git_worktree_path)
+ worktree_output = subprocess.check_output(
+ [self.git_command, "worktree", "prune"],
+ cwd=self.repo_path,
+ stderr=subprocess.STDOUT
+ )
+ self.log.debug(worktree_output.decode("utf-8"))
+
+ def _get_abi_dump_for_ref(self, version):
+ """Generate the ABI dumps for the specified git revision."""
+ git_worktree_path = self._get_clean_worktree_for_git_revision(version)
+ self._update_git_submodules(git_worktree_path, version)
+ self._build_shared_libraries(git_worktree_path, version)
+ self._get_abi_dumps_from_shared_libraries(version)
+ self._cleanup_worktree(git_worktree_path)
+
+ def _remove_children_with_tag(self, parent, tag):
+ children = parent.getchildren()
+ for child in children:
+ if child.tag == tag:
+ parent.remove(child)
+ else:
+ self._remove_children_with_tag(child, tag)
+
+ def _remove_extra_detail_from_report(self, report_root):
+ for tag in ['test_info', 'test_results', 'problem_summary',
+ 'added_symbols', 'affected']:
+ self._remove_children_with_tag(report_root, tag)
+
+ for report in report_root:
+ for problems in report.getchildren()[:]:
+ if not problems.getchildren():
+ report.remove(problems)
+
+ def _abi_compliance_command(self, mbed_module, output_path):
+ """Build the command to run to analyze the library mbed_module.
+ The report will be placed in output_path."""
+ abi_compliance_command = [
+ "abi-compliance-checker",
+ "-l", mbed_module,
+ "-old", self.old_version.abi_dumps[mbed_module],
+ "-new", self.new_version.abi_dumps[mbed_module],
+ "-strict",
+ "-report-path", output_path,
+ ]
+ if self.skip_file:
+ abi_compliance_command += ["-skip-symbols", self.skip_file,
+ "-skip-types", self.skip_file]
+ if self.brief:
+ abi_compliance_command += ["-report-format", "xml",
+ "-stdout"]
+ return abi_compliance_command
+
+ def _is_library_compatible(self, mbed_module, compatibility_report):
+ """Test if the library mbed_module has remained compatible.
+ Append a message regarding compatibility to compatibility_report."""
+ output_path = os.path.join(
+ self.report_dir, "{}-{}-{}.html".format(
+ mbed_module, self.old_version.revision,
+ self.new_version.revision
+ )
+ )
+ try:
+ subprocess.check_output(
+ self._abi_compliance_command(mbed_module, output_path),
+ stderr=subprocess.STDOUT
+ )
+ except subprocess.CalledProcessError as err:
+ if err.returncode != 1:
+ raise err
+ if self.brief:
+ self.log.info(
+ "Compatibility issues found for {}".format(mbed_module)
+ )
+ report_root = ET.fromstring(err.output.decode("utf-8"))
+ self._remove_extra_detail_from_report(report_root)
+ self.log.info(ET.tostring(report_root).decode("utf-8"))
+ else:
+ self.can_remove_report_dir = False
+ compatibility_report.append(
+ "Compatibility issues found for {}, "
+ "for details see {}".format(mbed_module, output_path)
+ )
+ return False
+ compatibility_report.append(
+ "No compatibility issues for {}".format(mbed_module)
+ )
+ if not (self.keep_all_reports or self.brief):
+ os.remove(output_path)
+ return True
+
+ def get_abi_compatibility_report(self):
+ """Generate a report of the differences between the reference ABI
+ and the new ABI. ABI dumps from self.old_version and self.new_version
+ must be available."""
+ compatibility_report = ["Checking evolution from {} to {}".format(
+ self._pretty_revision(self.old_version),
+ self._pretty_revision(self.new_version)
+ )]
+ compliance_return_code = 0
+ shared_modules = list(set(self.old_version.modules.keys()) &
+ set(self.new_version.modules.keys()))
+ for mbed_module in shared_modules:
+ if not self._is_library_compatible(mbed_module,
+ compatibility_report):
+ compliance_return_code = 1
+ for version in [self.old_version, self.new_version]:
+ for mbed_module, mbed_module_dump in version.abi_dumps.items():
+ os.remove(mbed_module_dump)
+ if self.can_remove_report_dir:
+ os.rmdir(self.report_dir)
+ self.log.info("\n".join(compatibility_report))
+ return compliance_return_code
+
+ def check_for_abi_changes(self):
+ """Generate a report of ABI differences
+ between self.old_rev and self.new_rev."""
+ self.check_repo_path()
+ self.check_abi_tools_are_installed()
+ self._get_abi_dump_for_ref(self.old_version)
+ self._get_abi_dump_for_ref(self.new_version)
+ return self.get_abi_compatibility_report()
+
+
+def run_main():
+ try:
+ parser = argparse.ArgumentParser(
+ description=(
+ """This script is a small wrapper around the
+ abi-compliance-checker and abi-dumper tools, applying them
+ to compare the ABI and API of the library files from two
+ different Git revisions within an Mbed TLS repository.
+ The results of the comparison are either formatted as HTML and
+ stored at a configurable location, or are given as a brief list
+ of problems. Returns 0 on success, 1 on ABI/API non-compliance,
+ and 2 if there is an error while running the script.
+ Note: must be run from Mbed TLS root."""
+ )
+ )
+ parser.add_argument(
+ "-v", "--verbose", action="store_true",
+ help="set verbosity level",
+ )
+ parser.add_argument(
+ "-r", "--report-dir", type=str, default="reports",
+ help="directory where reports are stored, default is reports",
+ )
+ parser.add_argument(
+ "-k", "--keep-all-reports", action="store_true",
+ help="keep all reports, even if there are no compatibility issues",
+ )
+ parser.add_argument(
+ "-o", "--old-rev", type=str, help="revision for old version.",
+ required=True,
+ )
+ parser.add_argument(
+ "-or", "--old-repo", type=str, help="repository for old version."
+ )
+ parser.add_argument(
+ "-oc", "--old-crypto-rev", type=str,
+ help="revision for old crypto submodule."
+ )
+ parser.add_argument(
+ "-ocr", "--old-crypto-repo", type=str,
+ help="repository for old crypto submodule."
+ )
+ parser.add_argument(
+ "-n", "--new-rev", type=str, help="revision for new version",
+ required=True,
+ )
+ parser.add_argument(
+ "-nr", "--new-repo", type=str, help="repository for new version."
+ )
+ parser.add_argument(
+ "-nc", "--new-crypto-rev", type=str,
+ help="revision for new crypto version"
+ )
+ parser.add_argument(
+ "-ncr", "--new-crypto-repo", type=str,
+ help="repository for new crypto submodule."
+ )
+ parser.add_argument(
+ "-s", "--skip-file", type=str,
+ help=("path to file containing symbols and types to skip "
+ "(typically \"-s identifiers\" after running "
+ "\"tests/scripts/list-identifiers.sh --internal\")")
+ )
+ parser.add_argument(
+ "-b", "--brief", action="store_true",
+ help="output only the list of issues to stdout, instead of a full report",
+ )
+ abi_args = parser.parse_args()
+ if os.path.isfile(abi_args.report_dir):
+ print("Error: {} is not a directory".format(abi_args.report_dir))
+ parser.exit()
+ old_version = SimpleNamespace(
+ version="old",
+ repository=abi_args.old_repo,
+ revision=abi_args.old_rev,
+ commit=None,
+ crypto_repository=abi_args.old_crypto_repo,
+ crypto_revision=abi_args.old_crypto_rev,
+ abi_dumps={},
+ modules={}
+ )
+ new_version = SimpleNamespace(
+ version="new",
+ repository=abi_args.new_repo,
+ revision=abi_args.new_rev,
+ commit=None,
+ crypto_repository=abi_args.new_crypto_repo,
+ crypto_revision=abi_args.new_crypto_rev,
+ abi_dumps={},
+ modules={}
+ )
+ configuration = SimpleNamespace(
+ verbose=abi_args.verbose,
+ report_dir=abi_args.report_dir,
+ keep_all_reports=abi_args.keep_all_reports,
+ brief=abi_args.brief,
+ skip_file=abi_args.skip_file
+ )
+ abi_check = AbiChecker(old_version, new_version, configuration)
+ return_code = abi_check.check_for_abi_changes()
+ sys.exit(return_code)
+ except Exception: # pylint: disable=broad-except
+ # Print the backtrace and exit explicitly so as to exit with
+ # status 2, not 1.
+ traceback.print_exc()
+ sys.exit(2)
+
+
+if __name__ == "__main__":
+ run_main()
diff --git a/lib/mbedtls-2.27.0/scripts/apidoc_full.sh b/lib/mbedtls-2.27.0/scripts/apidoc_full.sh
new file mode 100755
index 0000000..03bbb64
--- /dev/null
+++ b/lib/mbedtls-2.27.0/scripts/apidoc_full.sh
@@ -0,0 +1,40 @@
+#!/bin/sh
+
+# Generate doxygen documentation with a full config.h (this ensures that every
+# available flag is documented, and avoids warnings about documentation
+# without a corresponding #define).
+#
+# /!\ This must not be a Makefile target, as it would create a race condition
+# when multiple targets are invoked in the same parallel build.
+#
+# 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.
+
+set -eu
+
+CONFIG_H='include/mbedtls/config.h'
+
+if [ -r $CONFIG_H ]; then :; else
+ echo "$CONFIG_H not found" >&2
+ exit 1
+fi
+
+CONFIG_BAK=${CONFIG_H}.bak
+cp -p $CONFIG_H $CONFIG_BAK
+
+scripts/config.py realfull
+make apidoc
+
+mv $CONFIG_BAK $CONFIG_H
diff --git a/lib/mbedtls-2.27.0/scripts/assemble_changelog.py b/lib/mbedtls-2.27.0/scripts/assemble_changelog.py
new file mode 100755
index 0000000..56d6c37
--- /dev/null
+++ b/lib/mbedtls-2.27.0/scripts/assemble_changelog.py
@@ -0,0 +1,523 @@
+#!/usr/bin/env python3
+
+"""Assemble Mbed TLS change log entries into the change log file.
+
+Add changelog entries to the first level-2 section.
+Create a new level-2 section for unreleased changes if needed.
+Remove the input files unless --keep-entries is specified.
+
+In each level-3 section, entries are sorted in chronological order
+(oldest first). From oldest to newest:
+* Merged entry files are sorted according to their merge date (date of
+ the merge commit that brought the commit that created the file into
+ the target branch).
+* Committed but unmerged entry files are sorted according to the date
+ of the commit that adds them.
+* Uncommitted entry files are sorted according to their modification time.
+
+You must run this program from within a git working directory.
+"""
+
+# 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.
+
+import argparse
+from collections import OrderedDict, namedtuple
+import datetime
+import functools
+import glob
+import os
+import re
+import subprocess
+import sys
+
+class InputFormatError(Exception):
+ def __init__(self, filename, line_number, message, *args, **kwargs):
+ message = '{}:{}: {}'.format(filename, line_number,
+ message.format(*args, **kwargs))
+ super().__init__(message)
+
+class CategoryParseError(Exception):
+ def __init__(self, line_offset, error_message):
+ self.line_offset = line_offset
+ self.error_message = error_message
+ super().__init__('{}: {}'.format(line_offset, error_message))
+
+class LostContent(Exception):
+ def __init__(self, filename, line):
+ message = ('Lost content from {}: "{}"'.format(filename, line))
+ super().__init__(message)
+
+# The category names we use in the changelog.
+# If you edit this, update ChangeLog.d/README.md.
+STANDARD_CATEGORIES = (
+ b'API changes',
+ b'Default behavior changes',
+ b'Requirement changes',
+ b'New deprecations',
+ b'Removals',
+ b'Features',
+ b'Security',
+ b'Bugfix',
+ b'Changes',
+)
+
+# The maximum line length for an entry
+MAX_LINE_LENGTH = 80
+
+CategoryContent = namedtuple('CategoryContent', [
+ 'name', 'title_line', # Title text and line number of the title
+ 'body', 'body_line', # Body text and starting line number of the body
+])
+
+class ChangelogFormat:
+ """Virtual class documenting how to write a changelog format class."""
+
+ @classmethod
+ def extract_top_version(cls, changelog_file_content):
+ """Split out the top version section.
+
+ If the top version is already released, create a new top
+ version section for an unreleased version.
+
+ Return ``(header, top_version_title, top_version_body, trailer)``
+ where the "top version" is the existing top version section if it's
+ for unreleased changes, and a newly created section otherwise.
+ To assemble the changelog after modifying top_version_body,
+ concatenate the four pieces.
+ """
+ raise NotImplementedError
+
+ @classmethod
+ def version_title_text(cls, version_title):
+ """Return the text of a formatted version section title."""
+ raise NotImplementedError
+
+ @classmethod
+ def split_categories(cls, version_body):
+ """Split a changelog version section body into categories.
+
+ Return a list of `CategoryContent` the name is category title
+ without any formatting.
+ """
+ raise NotImplementedError
+
+ @classmethod
+ def format_category(cls, title, body):
+ """Construct the text of a category section from its title and body."""
+ raise NotImplementedError
+
+class TextChangelogFormat(ChangelogFormat):
+ """The traditional Mbed TLS changelog format."""
+
+ _unreleased_version_text = b'= mbed TLS x.x.x branch released xxxx-xx-xx'
+ @classmethod
+ def is_released_version(cls, title):
+ # Look for an incomplete release date
+ return not re.search(br'[0-9x]{4}-[0-9x]{2}-[0-9x]?x', title)
+
+ _top_version_re = re.compile(br'(?:\A|\n)(=[^\n]*\n+)(.*?\n)(?:=|$)',
+ re.DOTALL)
+ @classmethod
+ def extract_top_version(cls, changelog_file_content):
+ """A version section starts with a line starting with '='."""
+ m = re.search(cls._top_version_re, changelog_file_content)
+ top_version_start = m.start(1)
+ top_version_end = m.end(2)
+ top_version_title = m.group(1)
+ top_version_body = m.group(2)
+ if cls.is_released_version(top_version_title):
+ top_version_end = top_version_start
+ top_version_title = cls._unreleased_version_text + b'\n\n'
+ top_version_body = b''
+ return (changelog_file_content[:top_version_start],
+ top_version_title, top_version_body,
+ changelog_file_content[top_version_end:])
+
+ @classmethod
+ def version_title_text(cls, version_title):
+ return re.sub(br'\n.*', version_title, re.DOTALL)
+
+ _category_title_re = re.compile(br'(^\w.*)\n+', re.MULTILINE)
+ @classmethod
+ def split_categories(cls, version_body):
+ """A category title is a line with the title in column 0."""
+ if not version_body:
+ return []
+ title_matches = list(re.finditer(cls._category_title_re, version_body))
+ if not title_matches or title_matches[0].start() != 0:
+ # There is junk before the first category.
+ raise CategoryParseError(0, 'Junk found where category expected')
+ title_starts = [m.start(1) for m in title_matches]
+ body_starts = [m.end(0) for m in title_matches]
+ body_ends = title_starts[1:] + [len(version_body)]
+ bodies = [version_body[body_start:body_end].rstrip(b'\n') + b'\n'
+ for (body_start, body_end) in zip(body_starts, body_ends)]
+ title_lines = [version_body[:pos].count(b'\n') for pos in title_starts]
+ body_lines = [version_body[:pos].count(b'\n') for pos in body_starts]
+ return [CategoryContent(title_match.group(1), title_line,
+ body, body_line)
+ for title_match, title_line, body, body_line
+ in zip(title_matches, title_lines, bodies, body_lines)]
+
+ @classmethod
+ def format_category(cls, title, body):
+ # `split_categories` ensures that each body ends with a newline.
+ # Make sure that there is additionally a blank line between categories.
+ if not body.endswith(b'\n\n'):
+ body += b'\n'
+ return title + b'\n' + body
+
+class ChangeLog:
+ """An Mbed TLS changelog.
+
+ A changelog file consists of some header text followed by one or
+ more version sections. The version sections are in reverse
+ chronological order. Each version section consists of a title and a body.
+
+ The body of a version section consists of zero or more category
+ subsections. Each category subsection consists of a title and a body.
+
+ A changelog entry file has the same format as the body of a version section.
+
+ A `ChangelogFormat` object defines the concrete syntax of the changelog.
+ Entry files must have the same format as the changelog file.
+ """
+
+ # Only accept dotted version numbers (e.g. "3.1", not "3").
+ # Refuse ".x" in a version number where x is a letter: this indicates
+ # a version that is not yet released. Something like "3.1a" is accepted.
+ _version_number_re = re.compile(br'[0-9]+\.[0-9A-Za-z.]+')
+ _incomplete_version_number_re = re.compile(br'.*\.[A-Za-z]')
+ _only_url_re = re.compile(br'^\s*\w+://\S+\s*$')
+ _has_url_re = re.compile(br'.*://.*')
+
+ def add_categories_from_text(self, filename, line_offset,
+ text, allow_unknown_category):
+ """Parse a version section or entry file."""
+ try:
+ categories = self.format.split_categories(text)
+ except CategoryParseError as e:
+ raise InputFormatError(filename, line_offset + e.line_offset,
+ e.error_message)
+ for category in categories:
+ if not allow_unknown_category and \
+ category.name not in self.categories:
+ raise InputFormatError(filename,
+ line_offset + category.title_line,
+ 'Unknown category: "{}"',
+ category.name.decode('utf8'))
+
+ body_split = category.body.splitlines()
+
+ for line_number, line in enumerate(body_split, 1):
+ if not self._only_url_re.match(line) and \
+ len(line) > MAX_LINE_LENGTH:
+ long_url_msg = '. URL exceeding length limit must be alone in its line.' \
+ if self._has_url_re.match(line) else ""
+ raise InputFormatError(filename,
+ category.body_line + line_number,
+ 'Line is longer than allowed: '
+ 'Length {} (Max {}){}',
+ len(line), MAX_LINE_LENGTH,
+ long_url_msg)
+
+ self.categories[category.name] += category.body
+
+ def __init__(self, input_stream, changelog_format):
+ """Create a changelog object.
+
+ Populate the changelog object from the content of the file
+ input_stream.
+ """
+ self.format = changelog_format
+ whole_file = input_stream.read()
+ (self.header,
+ self.top_version_title, top_version_body,
+ self.trailer) = self.format.extract_top_version(whole_file)
+ # Split the top version section into categories.
+ self.categories = OrderedDict()
+ for category in STANDARD_CATEGORIES:
+ self.categories[category] = b''
+ offset = (self.header + self.top_version_title).count(b'\n') + 1
+ self.add_categories_from_text(input_stream.name, offset,
+ top_version_body, True)
+
+ def add_file(self, input_stream):
+ """Add changelog entries from a file.
+ """
+ self.add_categories_from_text(input_stream.name, 1,
+ input_stream.read(), False)
+
+ def write(self, filename):
+ """Write the changelog to the specified file.
+ """
+ with open(filename, 'wb') as out:
+ out.write(self.header)
+ out.write(self.top_version_title)
+ for title, body in self.categories.items():
+ if not body:
+ continue
+ out.write(self.format.format_category(title, body))
+ out.write(self.trailer)
+
+
+@functools.total_ordering
+class EntryFileSortKey:
+ """This classes defines an ordering on changelog entry files: older < newer.
+
+ * Merged entry files are sorted according to their merge date (date of
+ the merge commit that brought the commit that created the file into
+ the target branch).
+ * Committed but unmerged entry files are sorted according to the date
+ of the commit that adds them.
+ * Uncommitted entry files are sorted according to their modification time.
+
+ This class assumes that the file is in a git working directory with
+ the target branch checked out.
+ """
+
+ # Categories of files. A lower number is considered older.
+ MERGED = 0
+ COMMITTED = 1
+ LOCAL = 2
+
+ @staticmethod
+ def creation_hash(filename):
+ """Return the git commit id at which the given file was created.
+
+ Return None if the file was never checked into git.
+ """
+ hashes = subprocess.check_output(['git', 'log', '--format=%H',
+ '--follow',
+ '--', filename])
+ m = re.search(b'(.+)$', hashes)
+ if not m:
+ # The git output is empty. This means that the file was
+ # never checked in.
+ return None
+ # The last commit in the log is the oldest one, which is when the
+ # file was created.
+ return m.group(0)
+
+ @staticmethod
+ def list_merges(some_hash, target, *options):
+ """List merge commits from some_hash to target.
+
+ Pass options to git to select which commits are included.
+ """
+ text = subprocess.check_output(['git', 'rev-list',
+ '--merges', *options,
+ b'..'.join([some_hash, target])])
+ return text.rstrip(b'\n').split(b'\n')
+
+ @classmethod
+ def merge_hash(cls, some_hash):
+ """Return the git commit id at which the given commit was merged.
+
+ Return None if the given commit was never merged.
+ """
+ target = b'HEAD'
+ # List the merges from some_hash to the target in two ways.
+ # The ancestry list is the ones that are both descendants of
+ # some_hash and ancestors of the target.
+ ancestry = frozenset(cls.list_merges(some_hash, target,
+ '--ancestry-path'))
+ # The first_parents list only contains merges that are directly
+ # on the target branch. We want it in reverse order (oldest first).
+ first_parents = cls.list_merges(some_hash, target,
+ '--first-parent', '--reverse')
+ # Look for the oldest merge commit that's both on the direct path
+ # and directly on the target branch. That's the place where some_hash
+ # was merged on the target branch. See
+ # https://stackoverflow.com/questions/8475448/find-merge-commit-which-include-a-specific-commit
+ for commit in first_parents:
+ if commit in ancestry:
+ return commit
+ return None
+
+ @staticmethod
+ def commit_timestamp(commit_id):
+ """Return the timestamp of the given commit."""
+ text = subprocess.check_output(['git', 'show', '-s',
+ '--format=%ct',
+ commit_id])
+ return datetime.datetime.utcfromtimestamp(int(text))
+
+ @staticmethod
+ def file_timestamp(filename):
+ """Return the modification timestamp of the given file."""
+ mtime = os.stat(filename).st_mtime
+ return datetime.datetime.fromtimestamp(mtime)
+
+ def __init__(self, filename):
+ """Determine position of the file in the changelog entry order.
+
+ This constructor returns an object that can be used with comparison
+ operators, with `sort` and `sorted`, etc. Older entries are sorted
+ before newer entries.
+ """
+ self.filename = filename
+ creation_hash = self.creation_hash(filename)
+ if not creation_hash:
+ self.category = self.LOCAL
+ self.datetime = self.file_timestamp(filename)
+ return
+ merge_hash = self.merge_hash(creation_hash)
+ if not merge_hash:
+ self.category = self.COMMITTED
+ self.datetime = self.commit_timestamp(creation_hash)
+ return
+ self.category = self.MERGED
+ self.datetime = self.commit_timestamp(merge_hash)
+
+ def sort_key(self):
+ """"Return a concrete sort key for this entry file sort key object.
+
+ ``ts1 < ts2`` is implemented as ``ts1.sort_key() < ts2.sort_key()``.
+ """
+ return (self.category, self.datetime, self.filename)
+
+ def __eq__(self, other):
+ return self.sort_key() == other.sort_key()
+
+ def __lt__(self, other):
+ return self.sort_key() < other.sort_key()
+
+
+def check_output(generated_output_file, main_input_file, merged_files):
+ """Make sanity checks on the generated output.
+
+ The intent of these sanity checks is to have reasonable confidence
+ that no content has been lost.
+
+ The sanity check is that every line that is present in an input file
+ is also present in an output file. This is not perfect but good enough
+ for now.
+ """
+ generated_output = set(open(generated_output_file, 'rb'))
+ for line in open(main_input_file, 'rb'):
+ if line not in generated_output:
+ raise LostContent('original file', line)
+ for merged_file in merged_files:
+ for line in open(merged_file, 'rb'):
+ if line not in generated_output:
+ raise LostContent(merged_file, line)
+
+def finish_output(changelog, output_file, input_file, merged_files):
+ """Write the changelog to the output file.
+
+ The input file and the list of merged files are used only for sanity
+ checks on the output.
+ """
+ if os.path.exists(output_file) and not os.path.isfile(output_file):
+ # The output is a non-regular file (e.g. pipe). Write to it directly.
+ output_temp = output_file
+ else:
+ # The output is a regular file. Write to a temporary file,
+ # then move it into place atomically.
+ output_temp = output_file + '.tmp'
+ changelog.write(output_temp)
+ check_output(output_temp, input_file, merged_files)
+ if output_temp != output_file:
+ os.rename(output_temp, output_file)
+
+def remove_merged_entries(files_to_remove):
+ for filename in files_to_remove:
+ os.remove(filename)
+
+def list_files_to_merge(options):
+ """List the entry files to merge, oldest first.
+
+ "Oldest" is defined by `EntryFileSortKey`.
+ """
+ files_to_merge = glob.glob(os.path.join(options.dir, '*.txt'))
+ files_to_merge.sort(key=EntryFileSortKey)
+ return files_to_merge
+
+def merge_entries(options):
+ """Merge changelog entries into the changelog file.
+
+ Read the changelog file from options.input.
+ Read entries to merge from the directory options.dir.
+ Write the new changelog to options.output.
+ Remove the merged entries if options.keep_entries is false.
+ """
+ with open(options.input, 'rb') as input_file:
+ changelog = ChangeLog(input_file, TextChangelogFormat)
+ files_to_merge = list_files_to_merge(options)
+ if not files_to_merge:
+ sys.stderr.write('There are no pending changelog entries.\n')
+ return
+ for filename in files_to_merge:
+ with open(filename, 'rb') as input_file:
+ changelog.add_file(input_file)
+ finish_output(changelog, options.output, options.input, files_to_merge)
+ if not options.keep_entries:
+ remove_merged_entries(files_to_merge)
+
+def show_file_timestamps(options):
+ """List the files to merge and their timestamp.
+
+ This is only intended for debugging purposes.
+ """
+ files = list_files_to_merge(options)
+ for filename in files:
+ ts = EntryFileSortKey(filename)
+ print(ts.category, ts.datetime, filename)
+
+def set_defaults(options):
+ """Add default values for missing options."""
+ output_file = getattr(options, 'output', None)
+ if output_file is None:
+ options.output = options.input
+ if getattr(options, 'keep_entries', None) is None:
+ options.keep_entries = (output_file is not None)
+
+def main():
+ """Command line entry point."""
+ parser = argparse.ArgumentParser(description=__doc__)
+ parser.add_argument('--dir', '-d', metavar='DIR',
+ default='ChangeLog.d',
+ help='Directory to read entries from'
+ ' (default: ChangeLog.d)')
+ parser.add_argument('--input', '-i', metavar='FILE',
+ default='ChangeLog',
+ help='Existing changelog file to read from and augment'
+ ' (default: ChangeLog)')
+ parser.add_argument('--keep-entries',
+ action='store_true', dest='keep_entries', default=None,
+ help='Keep the files containing entries'
+ ' (default: remove them if --output/-o is not specified)')
+ parser.add_argument('--no-keep-entries',
+ action='store_false', dest='keep_entries',
+ help='Remove the files containing entries after they are merged'
+ ' (default: remove them if --output/-o is not specified)')
+ parser.add_argument('--output', '-o', metavar='FILE',
+ help='Output changelog file'
+ ' (default: overwrite the input)')
+ parser.add_argument('--list-files-only',
+ action='store_true',
+ help=('Only list the files that would be processed '
+ '(with some debugging information)'))
+ options = parser.parse_args()
+ set_defaults(options)
+ if options.list_files_only:
+ show_file_timestamps(options)
+ return
+ merge_entries(options)
+
+if __name__ == '__main__':
+ main()
diff --git a/lib/mbedtls-2.27.0/scripts/bump_version.sh b/lib/mbedtls-2.27.0/scripts/bump_version.sh
new file mode 100755
index 0000000..df629e9
--- /dev/null
+++ b/lib/mbedtls-2.27.0/scripts/bump_version.sh
@@ -0,0 +1,154 @@
+#!/bin/bash
+#
+# 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.
+#
+# Purpose
+#
+# Sets the version numbers in the source code to those given.
+#
+# Usage: bump_version.sh [ --version <version> ] [ --so-crypto <version>]
+# [ --so-x509 <version> ] [ --so-tls <version> ]
+# [ -v | --verbose ] [ -h | --help ]
+#
+
+VERSION=""
+SOVERSION=""
+
+# Parse arguments
+#
+until [ -z "$1" ]
+do
+ case "$1" in
+ --version)
+ # Version to use
+ shift
+ VERSION=$1
+ ;;
+ --so-crypto)
+ shift
+ SO_CRYPTO=$1
+ ;;
+ --so-x509)
+ shift
+ SO_X509=$1
+ ;;
+ --so-tls)
+ shift
+ SO_TLS=$1
+ ;;
+ -v|--verbose)
+ # Be verbose
+ VERBOSE="1"
+ ;;
+ -h|--help)
+ # print help
+ echo "Usage: $0"
+ echo -e " -h|--help\t\tPrint this help."
+ echo -e " --version <version>\tVersion to bump to."
+ echo -e " --so-crypto <version>\tSO version to bump libmbedcrypto to."
+ echo -e " --so-x509 <version>\tSO version to bump libmbedx509 to."
+ echo -e " --so-tls <version>\tSO version to bump libmbedtls to."
+ echo -e " -v|--verbose\t\tVerbose."
+ exit 1
+ ;;
+ *)
+ # print error
+ echo "Unknown argument: '$1'"
+ exit 1
+ ;;
+ esac
+ shift
+done
+
+if [ "X" = "X$VERSION" ];
+then
+ echo "No version specified. Unable to continue."
+ exit 1
+fi
+
+[ $VERBOSE ] && echo "Bumping VERSION in library/CMakeLists.txt"
+sed -e "s/ VERSION [0-9.]\{1,\}/ VERSION $VERSION/g" < library/CMakeLists.txt > tmp
+mv tmp library/CMakeLists.txt
+
+if [ "X" != "X$SO_CRYPTO" ];
+then
+ [ $VERBOSE ] && echo "Bumping SOVERSION for libmbedcrypto in library/CMakeLists.txt"
+ sed -e "/mbedcrypto/ s/ SOVERSION [0-9]\{1,\}/ SOVERSION $SO_CRYPTO/g" < library/CMakeLists.txt > tmp
+ mv tmp library/CMakeLists.txt
+
+ [ $VERBOSE ] && echo "Bumping SOVERSION for libmbedcrypto in library/Makefile"
+ sed -e "s/SOEXT_CRYPTO=so.[0-9]\{1,\}/SOEXT_CRYPTO=so.$SO_CRYPTO/g" < library/Makefile > tmp
+ mv tmp library/Makefile
+fi
+
+if [ "X" != "X$SO_X509" ];
+then
+ [ $VERBOSE ] && echo "Bumping SOVERSION for libmbedx509 in library/CMakeLists.txt"
+ sed -e "/mbedx509/ s/ SOVERSION [0-9]\{1,\}/ SOVERSION $SO_X509/g" < library/CMakeLists.txt > tmp
+ mv tmp library/CMakeLists.txt
+
+ [ $VERBOSE ] && echo "Bumping SOVERSION for libmbedx509 in library/Makefile"
+ sed -e "s/SOEXT_X509=so.[0-9]\{1,\}/SOEXT_X509=so.$SO_X509/g" < library/Makefile > tmp
+ mv tmp library/Makefile
+fi
+
+if [ "X" != "X$SO_TLS" ];
+then
+ [ $VERBOSE ] && echo "Bumping SOVERSION for libmbedtls in library/CMakeLists.txt"
+ sed -e "/mbedtls/ s/ SOVERSION [0-9]\{1,\}/ SOVERSION $SO_TLS/g" < library/CMakeLists.txt > tmp
+ mv tmp library/CMakeLists.txt
+
+ [ $VERBOSE ] && echo "Bumping SOVERSION for libmbedtls in library/Makefile"
+ sed -e "s/SOEXT_TLS=so.[0-9]\{1,\}/SOEXT_TLS=so.$SO_TLS/g" < library/Makefile > tmp
+ mv tmp library/Makefile
+fi
+
+[ $VERBOSE ] && echo "Bumping VERSION in include/mbedtls/version.h"
+read MAJOR MINOR PATCH <<<$(IFS="."; echo $VERSION)
+VERSION_NR="$( printf "0x%02X%02X%02X00" $MAJOR $MINOR $PATCH )"
+cat include/mbedtls/version.h | \
+ sed -e "s/_VERSION_MAJOR .\{1,\}/_VERSION_MAJOR $MAJOR/" | \
+ sed -e "s/_VERSION_MINOR .\{1,\}/_VERSION_MINOR $MINOR/" | \
+ sed -e "s/_VERSION_PATCH .\{1,\}/_VERSION_PATCH $PATCH/" | \
+ sed -e "s/_VERSION_NUMBER .\{1,\}/_VERSION_NUMBER $VERSION_NR/" | \
+ sed -e "s/_VERSION_STRING .\{1,\}/_VERSION_STRING \"$VERSION\"/" | \
+ sed -e "s/_VERSION_STRING_FULL .\{1,\}/_VERSION_STRING_FULL \"mbed TLS $VERSION\"/" \
+ > tmp
+mv tmp include/mbedtls/version.h
+
+[ $VERBOSE ] && echo "Bumping version in tests/suites/test_suite_version.data"
+sed -e "s/version:\".\{1,\}/version:\"$VERSION\"/g" < tests/suites/test_suite_version.data > tmp
+mv tmp tests/suites/test_suite_version.data
+
+[ $VERBOSE ] && echo "Bumping PROJECT_NAME in doxygen/mbedtls.doxyfile and doxygen/input/doc_mainpage.h"
+for i in doxygen/mbedtls.doxyfile doxygen/input/doc_mainpage.h;
+do
+ sed -e "s/mbed TLS v[0-9\.]\{1,\}/mbed TLS v$VERSION/g" < $i > tmp
+ mv tmp $i
+done
+
+[ $VERBOSE ] && echo "Re-generating library/error.c"
+scripts/generate_errors.pl
+
+[ $VERBOSE ] && echo "Re-generating programs/test/query_config.c"
+scripts/generate_query_config.pl
+
+[ $VERBOSE ] && echo "Re-generating library/version_features.c"
+scripts/generate_features.pl
+
+[ $VERBOSE ] && echo "Re-generating visualc files"
+scripts/generate_visualc_files.pl
+
diff --git a/lib/mbedtls-2.27.0/scripts/config.pl b/lib/mbedtls-2.27.0/scripts/config.pl
new file mode 100755
index 0000000..5dd89d2
--- /dev/null
+++ b/lib/mbedtls-2.27.0/scripts/config.pl
@@ -0,0 +1,25 @@
+#!/usr/bin/env perl
+# Backward compatibility redirection
+
+## 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.
+
+my $py = $0;
+$py =~ s/\.pl$/.py/ or die "Unable to determine the name of the Python script";
+exec 'python3', $py, @ARGV;
+print STDERR "$0: python3: $!. Trying python instead.\n";
+exec 'python', $py, @ARGV;
+print STDERR "$0: python: $!\n";
+exit 127;
diff --git a/lib/mbedtls-2.27.0/scripts/config.py b/lib/mbedtls-2.27.0/scripts/config.py
new file mode 100755
index 0000000..01f570e
--- /dev/null
+++ b/lib/mbedtls-2.27.0/scripts/config.py
@@ -0,0 +1,536 @@
+#!/usr/bin/env python3
+
+"""Mbed TLS configuration file manipulation library and tool
+
+Basic usage, to read the Mbed TLS or Mbed Crypto configuration:
+ config = ConfigFile()
+ if 'MBEDTLS_RSA_C' in config: print('RSA is enabled')
+"""
+
+## 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.
+
+import os
+import re
+
+class Setting:
+ """Representation of one Mbed TLS config.h setting.
+
+ Fields:
+ * name: the symbol name ('MBEDTLS_xxx').
+ * value: the value of the macro. The empty string for a plain #define
+ with no value.
+ * active: True if name is defined, False if a #define for name is
+ present in config.h but commented out.
+ * section: the name of the section that contains this symbol.
+ """
+ # pylint: disable=too-few-public-methods
+ def __init__(self, active, name, value='', section=None):
+ self.active = active
+ self.name = name
+ self.value = value
+ self.section = section
+
+class Config:
+ """Representation of the Mbed TLS configuration.
+
+ In the documentation of this class, a symbol is said to be *active*
+ if there is a #define for it that is not commented out, and *known*
+ if there is a #define for it whether commented out or not.
+
+ This class supports the following protocols:
+ * `name in config` is `True` if the symbol `name` is active, `False`
+ otherwise (whether `name` is inactive or not known).
+ * `config[name]` is the value of the macro `name`. If `name` is inactive,
+ raise `KeyError` (even if `name` is known).
+ * `config[name] = value` sets the value associated to `name`. `name`
+ must be known, but does not need to be set. This does not cause
+ name to become set.
+ """
+
+ def __init__(self):
+ self.settings = {}
+
+ def __contains__(self, name):
+ """True if the given symbol is active (i.e. set).
+
+ False if the given symbol is not set, even if a definition
+ is present but commented out.
+ """
+ return name in self.settings and self.settings[name].active
+
+ def all(self, *names):
+ """True if all the elements of names are active (i.e. set)."""
+ return all(self.__contains__(name) for name in names)
+
+ def any(self, *names):
+ """True if at least one symbol in names are active (i.e. set)."""
+ return any(self.__contains__(name) for name in names)
+
+ def known(self, name):
+ """True if a #define for name is present, whether it's commented out or not."""
+ return name in self.settings
+
+ def __getitem__(self, name):
+ """Get the value of name, i.e. what the preprocessor symbol expands to.
+
+ If name is not known, raise KeyError. name does not need to be active.
+ """
+ return self.settings[name].value
+
+ def get(self, name, default=None):
+ """Get the value of name. If name is inactive (not set), return default.
+
+ If a #define for name is present and not commented out, return
+ its expansion, even if this is the empty string.
+
+ If a #define for name is present but commented out, return default.
+ """
+ if name in self.settings:
+ return self.settings[name].value
+ else:
+ return default
+
+ def __setitem__(self, name, value):
+ """If name is known, set its value.
+
+ If name is not known, raise KeyError.
+ """
+ self.settings[name].value = value
+
+ def set(self, name, value=None):
+ """Set name to the given value and make it active.
+
+ If value is None and name is already known, don't change its value.
+ If value is None and name is not known, set its value to the empty
+ string.
+ """
+ if name in self.settings:
+ if value is not None:
+ self.settings[name].value = value
+ self.settings[name].active = True
+ else:
+ self.settings[name] = Setting(True, name, value=value)
+
+ def unset(self, name):
+ """Make name unset (inactive).
+
+ name remains known if it was known before.
+ """
+ if name not in self.settings:
+ return
+ self.settings[name].active = False
+
+ def adapt(self, adapter):
+ """Run adapter on each known symbol and (de)activate it accordingly.
+
+ `adapter` must be a function that returns a boolean. It is called as
+ `adapter(name, active, section)` for each setting, where `active` is
+ `True` if `name` is set and `False` if `name` is known but unset,
+ and `section` is the name of the section containing `name`. If
+ `adapter` returns `True`, then set `name` (i.e. make it active),
+ otherwise unset `name` (i.e. make it known but inactive).
+ """
+ for setting in self.settings.values():
+ setting.active = adapter(setting.name, setting.active,
+ setting.section)
+
+def is_full_section(section):
+ """Is this section affected by "config.py full" and friends?"""
+ return section.endswith('support') or section.endswith('modules')
+
+def realfull_adapter(_name, active, section):
+ """Activate all symbols found in the system and feature sections."""
+ if not is_full_section(section):
+ return active
+ return True
+
+# The goal of the full configuration is to have everything that can be tested
+# together. This includes deprecated or insecure options. It excludes:
+# * Options that require additional build dependencies or unusual hardware.
+# * Options that make testing less effective.
+# * Options that are incompatible with other options, or more generally that
+# interact with other parts of the code in such a way that a bulk enabling
+# is not a good way to test them.
+# * Options that remove features.
+EXCLUDE_FROM_FULL = frozenset([
+ #pylint: disable=line-too-long
+ 'MBEDTLS_CTR_DRBG_USE_128_BIT_KEY', # interacts with ENTROPY_FORCE_SHA256
+ 'MBEDTLS_DEPRECATED_REMOVED', # conflicts with deprecated options
+ 'MBEDTLS_DEPRECATED_WARNING', # conflicts with deprecated options
+ 'MBEDTLS_ECDH_VARIANT_EVEREST_ENABLED', # influences the use of ECDH in TLS
+ 'MBEDTLS_ECP_NO_FALLBACK', # removes internal ECP implementation
+ 'MBEDTLS_ECP_NO_INTERNAL_RNG', # removes a feature
+ 'MBEDTLS_ECP_RESTARTABLE', # incompatible with USE_PSA_CRYPTO
+ 'MBEDTLS_ENTROPY_FORCE_SHA256', # interacts with CTR_DRBG_128_BIT_KEY
+ 'MBEDTLS_HAVE_SSE2', # hardware dependency
+ 'MBEDTLS_MEMORY_BACKTRACE', # depends on MEMORY_BUFFER_ALLOC_C
+ 'MBEDTLS_MEMORY_BUFFER_ALLOC_C', # makes sanitizers (e.g. ASan) less effective
+ 'MBEDTLS_MEMORY_DEBUG', # depends on MEMORY_BUFFER_ALLOC_C
+ 'MBEDTLS_NO_64BIT_MULTIPLICATION', # influences anything that uses bignum
+ 'MBEDTLS_NO_DEFAULT_ENTROPY_SOURCES', # removes a feature
+ 'MBEDTLS_NO_PLATFORM_ENTROPY', # removes a feature
+ 'MBEDTLS_NO_UDBL_DIVISION', # influences anything that uses bignum
+ 'MBEDTLS_PKCS11_C', # build dependency (libpkcs11-helper)
+ 'MBEDTLS_PLATFORM_NO_STD_FUNCTIONS', # removes a feature
+ 'MBEDTLS_PSA_CRYPTO_CONFIG', # toggles old/new style PSA config
+ 'MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG', # behavior change + build dependency
+ 'MBEDTLS_PSA_CRYPTO_KEY_ID_ENCODES_OWNER', # incompatible with USE_PSA_CRYPTO
+ 'MBEDTLS_PSA_CRYPTO_SPM', # platform dependency (PSA SPM)
+ 'MBEDTLS_PSA_INJECT_ENTROPY', # build dependency (hook functions)
+ 'MBEDTLS_REMOVE_3DES_CIPHERSUITES', # removes a feature
+ 'MBEDTLS_REMOVE_ARC4_CIPHERSUITES', # removes a feature
+ 'MBEDTLS_RSA_NO_CRT', # influences the use of RSA in X.509 and TLS
+ 'MBEDTLS_SHA512_NO_SHA384', # removes a feature
+ 'MBEDTLS_SSL_HW_RECORD_ACCEL', # build dependency (hook functions)
+ 'MBEDTLS_TEST_CONSTANT_FLOW_MEMSAN', # build dependency (clang+memsan)
+ 'MBEDTLS_TEST_CONSTANT_FLOW_VALGRIND', # build dependency (valgrind headers)
+ 'MBEDTLS_TEST_NULL_ENTROPY', # removes a feature
+ 'MBEDTLS_X509_ALLOW_UNSUPPORTED_CRITICAL_EXTENSION', # influences the use of X.509 in TLS
+ 'MBEDTLS_ZLIB_SUPPORT', # build dependency (libz)
+])
+
+def is_seamless_alt(name):
+ """Whether the xxx_ALT symbol should be included in the full configuration.
+
+ Include alternative implementations of platform functions, which are
+ configurable function pointers that default to the built-in function.
+ This way we test that the function pointers exist and build correctly
+ without changing the behavior, and tests can verify that the function
+ pointers are used by modifying those pointers.
+
+ Exclude alternative implementations of library functions since they require
+ an implementation of the relevant functions and an xxx_alt.h header.
+ """
+ if name == 'MBEDTLS_PLATFORM_SETUP_TEARDOWN_ALT':
+ # Similar to non-platform xxx_ALT, requires platform_alt.h
+ return False
+ return name.startswith('MBEDTLS_PLATFORM_')
+
+def include_in_full(name):
+ """Rules for symbols in the "full" configuration."""
+ if name in EXCLUDE_FROM_FULL:
+ return False
+ if name.endswith('_ALT'):
+ return is_seamless_alt(name)
+ return True
+
+def full_adapter(name, active, section):
+ """Config adapter for "full"."""
+ if not is_full_section(section):
+ return active
+ return include_in_full(name)
+
+# The baremetal configuration excludes options that require a library or
+# operating system feature that is typically not present on bare metal
+# systems. Features that are excluded from "full" won't be in "baremetal"
+# either (unless explicitly turned on in baremetal_adapter) so they don't
+# need to be repeated here.
+EXCLUDE_FROM_BAREMETAL = frozenset([
+ #pylint: disable=line-too-long
+ 'MBEDTLS_ENTROPY_NV_SEED', # requires a filesystem and FS_IO or alternate NV seed hooks
+ 'MBEDTLS_FS_IO', # requires a filesystem
+ 'MBEDTLS_HAVEGE_C', # requires a clock
+ 'MBEDTLS_HAVE_TIME', # requires a clock
+ 'MBEDTLS_HAVE_TIME_DATE', # requires a clock
+ 'MBEDTLS_NET_C', # requires POSIX-like networking
+ 'MBEDTLS_PLATFORM_FPRINTF_ALT', # requires FILE* from stdio.h
+ 'MBEDTLS_PLATFORM_NV_SEED_ALT', # requires a filesystem and ENTROPY_NV_SEED
+ 'MBEDTLS_PLATFORM_TIME_ALT', # requires a clock and HAVE_TIME
+ 'MBEDTLS_PSA_CRYPTO_SE_C', # requires a filesystem and PSA_CRYPTO_STORAGE_C
+ 'MBEDTLS_PSA_CRYPTO_STORAGE_C', # requires a filesystem
+ 'MBEDTLS_PSA_ITS_FILE_C', # requires a filesystem
+ 'MBEDTLS_THREADING_C', # requires a threading interface
+ 'MBEDTLS_THREADING_PTHREAD', # requires pthread
+ 'MBEDTLS_TIMING_C', # requires a clock
+])
+
+def keep_in_baremetal(name):
+ """Rules for symbols in the "baremetal" configuration."""
+ if name in EXCLUDE_FROM_BAREMETAL:
+ return False
+ return True
+
+def baremetal_adapter(name, active, section):
+ """Config adapter for "baremetal"."""
+ if not is_full_section(section):
+ return active
+ if name == 'MBEDTLS_NO_PLATFORM_ENTROPY':
+ # No OS-provided entropy source
+ return True
+ return include_in_full(name) and keep_in_baremetal(name)
+
+def include_in_crypto(name):
+ """Rules for symbols in a crypto configuration."""
+ if name.startswith('MBEDTLS_X509_') or \
+ name.startswith('MBEDTLS_SSL_') or \
+ name.startswith('MBEDTLS_KEY_EXCHANGE_'):
+ return False
+ if name in [
+ 'MBEDTLS_CERTS_C', # part of libmbedx509
+ 'MBEDTLS_DEBUG_C', # part of libmbedtls
+ 'MBEDTLS_NET_C', # part of libmbedtls
+ 'MBEDTLS_PKCS11_C', # part of libmbedx509
+ ]:
+ return False
+ return True
+
+def crypto_adapter(adapter):
+ """Modify an adapter to disable non-crypto symbols.
+
+ ``crypto_adapter(adapter)(name, active, section)`` is like
+ ``adapter(name, active, section)``, but unsets all X.509 and TLS symbols.
+ """
+ def continuation(name, active, section):
+ if not include_in_crypto(name):
+ return False
+ if adapter is None:
+ return active
+ return adapter(name, active, section)
+ return continuation
+
+DEPRECATED = frozenset([
+ 'MBEDTLS_SSL_PROTO_SSL3',
+ 'MBEDTLS_SSL_SRV_SUPPORT_SSLV2_CLIENT_HELLO',
+])
+
+def no_deprecated_adapter(adapter):
+ """Modify an adapter to disable deprecated symbols.
+
+ ``no_deprecated_adapter(adapter)(name, active, section)`` is like
+ ``adapter(name, active, section)``, but unsets all deprecated symbols
+ and sets ``MBEDTLS_DEPRECATED_REMOVED``.
+ """
+ def continuation(name, active, section):
+ if name == 'MBEDTLS_DEPRECATED_REMOVED':
+ return True
+ if name in DEPRECATED:
+ return False
+ if adapter is None:
+ return active
+ return adapter(name, active, section)
+ return continuation
+
+class ConfigFile(Config):
+ """Representation of the Mbed TLS configuration read for a file.
+
+ See the documentation of the `Config` class for methods to query
+ and modify the configuration.
+ """
+
+ _path_in_tree = 'include/mbedtls/config.h'
+ default_path = [_path_in_tree,
+ os.path.join(os.path.dirname(__file__),
+ os.pardir,
+ _path_in_tree),
+ os.path.join(os.path.dirname(os.path.abspath(os.path.dirname(__file__))),
+ _path_in_tree)]
+
+ def __init__(self, filename=None):
+ """Read the Mbed TLS configuration file."""
+ if filename is None:
+ for candidate in self.default_path:
+ if os.path.lexists(candidate):
+ filename = candidate
+ break
+ else:
+ raise Exception('Mbed TLS configuration file not found',
+ self.default_path)
+ super().__init__()
+ self.filename = filename
+ self.current_section = 'header'
+ with open(filename, 'r', encoding='utf-8') as file:
+ self.templates = [self._parse_line(line) for line in file]
+ self.current_section = None
+
+ def set(self, name, value=None):
+ if name not in self.settings:
+ self.templates.append((name, '', '#define ' + name + ' '))
+ super().set(name, value)
+
+ _define_line_regexp = (r'(?P<indentation>\s*)' +
+ r'(?P<commented_out>(//\s*)?)' +
+ r'(?P<define>#\s*define\s+)' +
+ r'(?P<name>\w+)' +
+ r'(?P<arguments>(?:\((?:\w|\s|,)*\))?)' +
+ r'(?P<separator>\s*)' +
+ r'(?P<value>.*)')
+ _section_line_regexp = (r'\s*/?\*+\s*[\\@]name\s+SECTION:\s*' +
+ r'(?P<section>.*)[ */]*')
+ _config_line_regexp = re.compile(r'|'.join([_define_line_regexp,
+ _section_line_regexp]))
+ def _parse_line(self, line):
+ """Parse a line in config.h and return the corresponding template."""
+ line = line.rstrip('\r\n')
+ m = re.match(self._config_line_regexp, line)
+ if m is None:
+ return line
+ elif m.group('section'):
+ self.current_section = m.group('section')
+ return line
+ else:
+ active = not m.group('commented_out')
+ name = m.group('name')
+ value = m.group('value')
+ template = (name,
+ m.group('indentation'),
+ m.group('define') + name +
+ m.group('arguments') + m.group('separator'))
+ self.settings[name] = Setting(active, name, value,
+ self.current_section)
+ return template
+
+ def _format_template(self, name, indent, middle):
+ """Build a line for config.h for the given setting.
+
+ The line has the form "<indent>#define <name> <value>"
+ where <middle> is "#define <name> ".
+ """
+ setting = self.settings[name]
+ value = setting.value
+ if value is None:
+ value = ''
+ # Normally the whitespace to separte the symbol name from the
+ # value is part of middle, and there's no whitespace for a symbol
+ # with no value. But if a symbol has been changed from having a
+ # value to not having one, the whitespace is wrong, so fix it.
+ if value:
+ if middle[-1] not in '\t ':
+ middle += ' '
+ else:
+ middle = middle.rstrip()
+ return ''.join([indent,
+ '' if setting.active else '//',
+ middle,
+ value]).rstrip()
+
+ def write_to_stream(self, output):
+ """Write the whole configuration to output."""
+ for template in self.templates:
+ if isinstance(template, str):
+ line = template
+ else:
+ line = self._format_template(*template)
+ output.write(line + '\n')
+
+ def write(self, filename=None):
+ """Write the whole configuration to the file it was read from.
+
+ If filename is specified, write to this file instead.
+ """
+ if filename is None:
+ filename = self.filename
+ with open(filename, 'w', encoding='utf-8') as output:
+ self.write_to_stream(output)
+
+if __name__ == '__main__':
+ def main():
+ """Command line config.h manipulation tool."""
+ parser = argparse.ArgumentParser(description="""
+ Mbed TLS and Mbed Crypto configuration file manipulation tool.
+ """)
+ parser.add_argument('--file', '-f',
+ help="""File to read (and modify if requested).
+ Default: {}.
+ """.format(ConfigFile.default_path))
+ parser.add_argument('--force', '-o',
+ action='store_true',
+ help="""For the set command, if SYMBOL is not
+ present, add a definition for it.""")
+ parser.add_argument('--write', '-w', metavar='FILE',
+ help="""File to write to instead of the input file.""")
+ subparsers = parser.add_subparsers(dest='command',
+ title='Commands')
+ parser_get = subparsers.add_parser('get',
+ help="""Find the value of SYMBOL
+ and print it. Exit with
+ status 0 if a #define for SYMBOL is
+ found, 1 otherwise.
+ """)
+ parser_get.add_argument('symbol', metavar='SYMBOL')
+ parser_set = subparsers.add_parser('set',
+ help="""Set SYMBOL to VALUE.
+ If VALUE is omitted, just uncomment
+ the #define for SYMBOL.
+ Error out of a line defining
+ SYMBOL (commented or not) is not
+ found, unless --force is passed.
+ """)
+ parser_set.add_argument('symbol', metavar='SYMBOL')
+ parser_set.add_argument('value', metavar='VALUE', nargs='?',
+ default='')
+ parser_unset = subparsers.add_parser('unset',
+ help="""Comment out the #define
+ for SYMBOL. Do nothing if none
+ is present.""")
+ parser_unset.add_argument('symbol', metavar='SYMBOL')
+
+ def add_adapter(name, function, description):
+ subparser = subparsers.add_parser(name, help=description)
+ subparser.set_defaults(adapter=function)
+ add_adapter('baremetal', baremetal_adapter,
+ """Like full, but exclude features that require platform
+ features such as file input-output.""")
+ add_adapter('full', full_adapter,
+ """Uncomment most features.
+ Exclude alternative implementations and platform support
+ options, as well as some options that are awkward to test.
+ """)
+ add_adapter('full_no_deprecated', no_deprecated_adapter(full_adapter),
+ """Uncomment most non-deprecated features.
+ Like "full", but without deprecated features.
+ """)
+ add_adapter('realfull', realfull_adapter,
+ """Uncomment all boolean #defines.
+ Suitable for generating documentation, but not for building.""")
+ add_adapter('crypto', crypto_adapter(None),
+ """Only include crypto features. Exclude X.509 and TLS.""")
+ add_adapter('crypto_baremetal', crypto_adapter(baremetal_adapter),
+ """Like baremetal, but with only crypto features,
+ excluding X.509 and TLS.""")
+ add_adapter('crypto_full', crypto_adapter(full_adapter),
+ """Like full, but with only crypto features,
+ excluding X.509 and TLS.""")
+
+ args = parser.parse_args()
+ config = ConfigFile(args.file)
+ if args.command is None:
+ parser.print_help()
+ return 1
+ elif args.command == 'get':
+ if args.symbol in config:
+ value = config[args.symbol]
+ if value:
+ sys.stdout.write(value + '\n')
+ return 0 if args.symbol in config else 1
+ elif args.command == 'set':
+ if not args.force and args.symbol not in config.settings:
+ sys.stderr.write("A #define for the symbol {} "
+ "was not found in {}\n"
+ .format(args.symbol, config.filename))
+ return 1
+ config.set(args.symbol, value=args.value)
+ elif args.command == 'unset':
+ config.unset(args.symbol)
+ else:
+ config.adapt(args.adapter)
+ config.write(args.write)
+ return 0
+
+ # Import modules only used by main only if main is defined and called.
+ # pylint: disable=wrong-import-position
+ import argparse
+ import sys
+ sys.exit(main())
diff --git a/lib/mbedtls-2.27.0/scripts/data_files/error.fmt b/lib/mbedtls-2.27.0/scripts/data_files/error.fmt
new file mode 100644
index 0000000..3be94bd
--- /dev/null
+++ b/lib/mbedtls-2.27.0/scripts/data_files/error.fmt
@@ -0,0 +1,169 @@
+/*
+ * Error message information
+ *
+ * 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.
+ */
+
+#include "common.h"
+
+#include "mbedtls/error.h"
+
+#if defined(MBEDTLS_ERROR_C) || defined(MBEDTLS_ERROR_STRERROR_DUMMY)
+
+#if defined(MBEDTLS_ERROR_C)
+
+#if defined(MBEDTLS_PLATFORM_C)
+#include "mbedtls/platform.h"
+#else
+#define mbedtls_snprintf snprintf
+#endif
+
+#include <stdio.h>
+#include <string.h>
+
+HEADER_INCLUDED
+
+const char * mbedtls_high_level_strerr( int error_code )
+{
+ int high_level_error_code;
+
+ if( error_code < 0 )
+ error_code = -error_code;
+
+ /* Extract the high-level part from the error code. */
+ high_level_error_code = error_code & 0xFF80;
+
+ switch( high_level_error_code )
+ {
+ /* Begin Auto-Generated Code. */
+HIGH_LEVEL_CODE_CHECKS
+ /* End Auto-Generated Code. */
+
+ default:
+ break;
+ }
+
+ return( NULL );
+}
+
+const char * mbedtls_low_level_strerr( int error_code )
+{
+ int low_level_error_code;
+
+ if( error_code < 0 )
+ error_code = -error_code;
+
+ /* Extract the low-level part from the error code. */
+ low_level_error_code = error_code & ~0xFF80;
+
+ switch( low_level_error_code )
+ {
+ /* Begin Auto-Generated Code. */
+LOW_LEVEL_CODE_CHECKS
+ /* End Auto-Generated Code. */
+
+ default:
+ break;
+ }
+
+ return( NULL );
+}
+
+void mbedtls_strerror( int ret, char *buf, size_t buflen )
+{
+ size_t len;
+ int use_ret;
+ const char * high_level_error_description = NULL;
+ const char * low_level_error_description = NULL;
+
+ if( buflen == 0 )
+ return;
+
+ memset( buf, 0x00, buflen );
+
+ if( ret < 0 )
+ ret = -ret;
+
+ if( ret & 0xFF80 )
+ {
+ use_ret = ret & 0xFF80;
+
+ // Translate high level error code.
+ high_level_error_description = mbedtls_high_level_strerr( ret );
+
+ if( high_level_error_description == NULL )
+ mbedtls_snprintf( buf, buflen, "UNKNOWN ERROR CODE (%04X)", (unsigned int) use_ret );
+ else
+ mbedtls_snprintf( buf, buflen, "%s", high_level_error_description );
+
+#if defined(MBEDTLS_SSL_TLS_C)
+ // Early return in case of a fatal error - do not try to translate low
+ // level code.
+ if(use_ret == -(MBEDTLS_ERR_SSL_FATAL_ALERT_MESSAGE))
+ return;
+#endif /* MBEDTLS_SSL_TLS_C */
+ }
+
+ use_ret = ret & ~0xFF80;
+
+ if( use_ret == 0 )
+ return;
+
+ // If high level code is present, make a concatenation between both
+ // error strings.
+ //
+ len = strlen( buf );
+
+ if( len > 0 )
+ {
+ if( buflen - len < 5 )
+ return;
+
+ mbedtls_snprintf( buf + len, buflen - len, " : " );
+
+ buf += len + 3;
+ buflen -= len + 3;
+ }
+
+ // Translate low level error code.
+ low_level_error_description = mbedtls_low_level_strerr( ret );
+
+ if( low_level_error_description == NULL )
+ mbedtls_snprintf( buf, buflen, "UNKNOWN ERROR CODE (%04X)", (unsigned int) use_ret );
+ else
+ mbedtls_snprintf( buf, buflen, "%s", low_level_error_description );
+}
+
+#else /* MBEDTLS_ERROR_C */
+
+/*
+ * Provide an non-function in case MBEDTLS_ERROR_C is not defined
+ */
+void mbedtls_strerror( int ret, char *buf, size_t buflen )
+{
+ ((void) ret);
+
+ if( buflen > 0 )
+ buf[0] = '\0';
+}
+
+#endif /* MBEDTLS_ERROR_C */
+
+#if defined(MBEDTLS_TEST_HOOKS)
+void (*mbedtls_test_hook_error_add)( int, int, const char *, int );
+#endif
+
+#endif /* MBEDTLS_ERROR_C || MBEDTLS_ERROR_STRERROR_DUMMY */
diff --git a/lib/mbedtls-2.27.0/scripts/data_files/query_config.fmt b/lib/mbedtls-2.27.0/scripts/data_files/query_config.fmt
new file mode 100644
index 0000000..be541cb
--- /dev/null
+++ b/lib/mbedtls-2.27.0/scripts/data_files/query_config.fmt
@@ -0,0 +1,139 @@
+/*
+ * Query Mbed TLS compile time configurations from config.h
+ *
+ * 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.
+ */
+
+#if !defined(MBEDTLS_CONFIG_FILE)
+#include "mbedtls/config.h"
+#else
+#include MBEDTLS_CONFIG_FILE
+#endif
+
+#include "query_config.h"
+
+#if defined(MBEDTLS_PLATFORM_C)
+#include "mbedtls/platform.h"
+#else
+#include <stdio.h>
+#define mbedtls_printf printf
+#endif /* MBEDTLS_PLATFORM_C */
+
+/*
+ * Include all the headers with public APIs in case they define a macro to its
+ * default value when that configuration is not set in the config.h.
+ */
+#include "mbedtls/aes.h"
+#include "mbedtls/aesni.h"
+#include "mbedtls/arc4.h"
+#include "mbedtls/aria.h"
+#include "mbedtls/asn1.h"
+#include "mbedtls/asn1write.h"
+#include "mbedtls/base64.h"
+#include "mbedtls/bignum.h"
+#include "mbedtls/blowfish.h"
+#include "mbedtls/camellia.h"
+#include "mbedtls/ccm.h"
+#include "mbedtls/certs.h"
+#include "mbedtls/chacha20.h"
+#include "mbedtls/chachapoly.h"
+#include "mbedtls/cipher.h"
+#include "mbedtls/cmac.h"
+#include "mbedtls/ctr_drbg.h"
+#include "mbedtls/debug.h"
+#include "mbedtls/des.h"
+#include "mbedtls/dhm.h"
+#include "mbedtls/ecdh.h"
+#include "mbedtls/ecdsa.h"
+#include "mbedtls/ecjpake.h"
+#include "mbedtls/ecp.h"
+#include "mbedtls/entropy.h"
+#include "mbedtls/entropy_poll.h"
+#include "mbedtls/error.h"
+#include "mbedtls/gcm.h"
+#include "mbedtls/havege.h"
+#include "mbedtls/hkdf.h"
+#include "mbedtls/hmac_drbg.h"
+#include "mbedtls/md.h"
+#include "mbedtls/md2.h"
+#include "mbedtls/md4.h"
+#include "mbedtls/md5.h"
+#include "mbedtls/memory_buffer_alloc.h"
+#include "mbedtls/net_sockets.h"
+#include "mbedtls/nist_kw.h"
+#include "mbedtls/oid.h"
+#include "mbedtls/padlock.h"
+#include "mbedtls/pem.h"
+#include "mbedtls/pk.h"
+#include "mbedtls/pkcs11.h"
+#include "mbedtls/pkcs12.h"
+#include "mbedtls/pkcs5.h"
+#include "mbedtls/platform_time.h"
+#include "mbedtls/platform_util.h"
+#include "mbedtls/poly1305.h"
+#include "mbedtls/ripemd160.h"
+#include "mbedtls/rsa.h"
+#include "mbedtls/sha1.h"
+#include "mbedtls/sha256.h"
+#include "mbedtls/sha512.h"
+#include "mbedtls/ssl.h"
+#include "mbedtls/ssl_cache.h"
+#include "mbedtls/ssl_ciphersuites.h"
+#include "mbedtls/ssl_cookie.h"
+#include "mbedtls/ssl_internal.h"
+#include "mbedtls/ssl_ticket.h"
+#include "mbedtls/threading.h"
+#include "mbedtls/timing.h"
+#include "mbedtls/version.h"
+#include "mbedtls/x509.h"
+#include "mbedtls/x509_crl.h"
+#include "mbedtls/x509_crt.h"
+#include "mbedtls/x509_csr.h"
+#include "mbedtls/xtea.h"
+
+#include <string.h>
+
+/*
+ * Helper macros to convert a macro or its expansion into a string
+ * WARNING: This does not work for expanding function-like macros. However,
+ * Mbed TLS does not currently have configuration options used in this fashion.
+ */
+#define MACRO_EXPANSION_TO_STR(macro) MACRO_NAME_TO_STR(macro)
+#define MACRO_NAME_TO_STR(macro) \
+ mbedtls_printf( "%s", strlen( #macro "" ) > 0 ? #macro "\n" : "" )
+
+#if defined(_MSC_VER)
+/*
+ * Visual Studio throws the warning 4003 because many Mbed TLS feature macros
+ * are defined empty. This means that from the preprocessor's point of view
+ * the macro MBEDTLS_EXPANSION_TO_STR is being invoked without arguments as
+ * some macros expand to nothing. We suppress that specific warning to get a
+ * clean build and to ensure that tests treating warnings as errors do not
+ * fail.
+ */
+#pragma warning(push)
+#pragma warning(disable:4003)
+#endif /* _MSC_VER */
+
+int query_config( const char *config )
+{
+CHECK_CONFIG /* If the symbol is not found, return an error */
+ return( 1 );
+}
+
+#if defined(_MSC_VER)
+#pragma warning(pop)
+#endif /* _MSC_VER */
diff --git a/lib/mbedtls-2.27.0/scripts/data_files/rename-1.3-2.0.txt b/lib/mbedtls-2.27.0/scripts/data_files/rename-1.3-2.0.txt
new file mode 100644
index 0000000..e599ac5
--- /dev/null
+++ b/lib/mbedtls-2.27.0/scripts/data_files/rename-1.3-2.0.txt
@@ -0,0 +1,2174 @@
+AES_DECRYPT MBEDTLS_AES_DECRYPT
+AES_ENCRYPT MBEDTLS_AES_ENCRYPT
+ASN1_BIT_STRING MBEDTLS_ASN1_BIT_STRING
+ASN1_BMP_STRING MBEDTLS_ASN1_BMP_STRING
+ASN1_BOOLEAN MBEDTLS_ASN1_BOOLEAN
+ASN1_CHK_ADD MBEDTLS_ASN1_CHK_ADD
+ASN1_CONSTRUCTED MBEDTLS_ASN1_CONSTRUCTED
+ASN1_CONTEXT_SPECIFIC MBEDTLS_ASN1_CONTEXT_SPECIFIC
+ASN1_GENERALIZED_TIME MBEDTLS_ASN1_GENERALIZED_TIME
+ASN1_IA5_STRING MBEDTLS_ASN1_IA5_STRING
+ASN1_INTEGER MBEDTLS_ASN1_INTEGER
+ASN1_NULL MBEDTLS_ASN1_NULL
+ASN1_OCTET_STRING MBEDTLS_ASN1_OCTET_STRING
+ASN1_OID MBEDTLS_ASN1_OID
+ASN1_PRIMITIVE MBEDTLS_ASN1_PRIMITIVE
+ASN1_PRINTABLE_STRING MBEDTLS_ASN1_PRINTABLE_STRING
+ASN1_SEQUENCE MBEDTLS_ASN1_SEQUENCE
+ASN1_SET MBEDTLS_ASN1_SET
+ASN1_T61_STRING MBEDTLS_ASN1_T61_STRING
+ASN1_UNIVERSAL_STRING MBEDTLS_ASN1_UNIVERSAL_STRING
+ASN1_UTC_TIME MBEDTLS_ASN1_UTC_TIME
+ASN1_UTF8_STRING MBEDTLS_ASN1_UTF8_STRING
+BADCERT_CN_MISMATCH MBEDTLS_X509_BADCERT_CN_MISMATCH
+BADCERT_EXPIRED MBEDTLS_X509_BADCERT_EXPIRED
+BADCERT_EXT_KEY_USAGE MBEDTLS_X509_BADCERT_EXT_KEY_USAGE
+BADCERT_FUTURE MBEDTLS_X509_BADCERT_FUTURE
+BADCERT_KEY_USAGE MBEDTLS_X509_BADCERT_KEY_USAGE
+BADCERT_MISSING MBEDTLS_X509_BADCERT_MISSING
+BADCERT_NOT_TRUSTED MBEDTLS_X509_BADCERT_NOT_TRUSTED
+BADCERT_NS_CERT_TYPE MBEDTLS_X509_BADCERT_NS_CERT_TYPE
+BADCERT_OTHER MBEDTLS_X509_BADCERT_OTHER
+BADCERT_REVOKED MBEDTLS_X509_BADCERT_REVOKED
+BADCERT_SKIP_VERIFY MBEDTLS_X509_BADCERT_SKIP_VERIFY
+BADCRL_EXPIRED MBEDTLS_X509_BADCRL_EXPIRED
+BADCRL_FUTURE MBEDTLS_X509_BADCRL_FUTURE
+BADCRL_NOT_TRUSTED MBEDTLS_X509_BADCRL_NOT_TRUSTED
+BLOWFISH_BLOCKSIZE MBEDTLS_BLOWFISH_BLOCKSIZE
+BLOWFISH_DECRYPT MBEDTLS_BLOWFISH_DECRYPT
+BLOWFISH_ENCRYPT MBEDTLS_BLOWFISH_ENCRYPT
+BLOWFISH_MAX_KEY MBEDTLS_BLOWFISH_MAX_KEY_BITS
+BLOWFISH_MIN_KEY MBEDTLS_BLOWFISH_MIN_KEY_BITS
+BLOWFISH_ROUNDS MBEDTLS_BLOWFISH_ROUNDS
+CAMELLIA_DECRYPT MBEDTLS_CAMELLIA_DECRYPT
+CAMELLIA_ENCRYPT MBEDTLS_CAMELLIA_ENCRYPT
+COLLECT_SIZE MBEDTLS_HAVEGE_COLLECT_SIZE
+CTR_DRBG_BLOCKSIZE MBEDTLS_CTR_DRBG_BLOCKSIZE
+CTR_DRBG_ENTROPY_LEN MBEDTLS_CTR_DRBG_ENTROPY_LEN
+CTR_DRBG_KEYBITS MBEDTLS_CTR_DRBG_KEYBITS
+CTR_DRBG_KEYSIZE MBEDTLS_CTR_DRBG_KEYSIZE
+CTR_DRBG_MAX_INPUT MBEDTLS_CTR_DRBG_MAX_INPUT
+CTR_DRBG_MAX_REQUEST MBEDTLS_CTR_DRBG_MAX_REQUEST
+CTR_DRBG_MAX_SEED_INPUT MBEDTLS_CTR_DRBG_MAX_SEED_INPUT
+CTR_DRBG_PR_OFF MBEDTLS_CTR_DRBG_PR_OFF
+CTR_DRBG_PR_ON MBEDTLS_CTR_DRBG_PR_ON
+CTR_DRBG_RESEED_INTERVAL MBEDTLS_CTR_DRBG_RESEED_INTERVAL
+CTR_DRBG_SEEDLEN MBEDTLS_CTR_DRBG_SEEDLEN
+DEPRECATED MBEDTLS_DEPRECATED
+DES_DECRYPT MBEDTLS_DES_DECRYPT
+DES_ENCRYPT MBEDTLS_DES_ENCRYPT
+DES_KEY_SIZE MBEDTLS_DES_KEY_SIZE
+ENTROPY_BLOCK_SIZE MBEDTLS_ENTROPY_BLOCK_SIZE
+ENTROPY_MAX_GATHER MBEDTLS_ENTROPY_MAX_GATHER
+ENTROPY_MAX_SEED_SIZE MBEDTLS_ENTROPY_MAX_SEED_SIZE
+ENTROPY_MAX_SOURCES MBEDTLS_ENTROPY_MAX_SOURCES
+ENTROPY_MIN_HARDCLOCK MBEDTLS_ENTROPY_MIN_HARDCLOCK
+ENTROPY_MIN_HAVEGE MBEDTLS_ENTROPY_MIN_HAVEGE
+ENTROPY_MIN_PLATFORM MBEDTLS_ENTROPY_MIN_PLATFORM
+ENTROPY_SOURCE_MANUAL MBEDTLS_ENTROPY_SOURCE_MANUAL
+EXT_AUTHORITY_KEY_IDENTIFIER MBEDTLS_X509_EXT_AUTHORITY_KEY_IDENTIFIER
+EXT_BASIC_CONSTRAINTS MBEDTLS_X509_EXT_BASIC_CONSTRAINTS
+EXT_CERTIFICATE_POLICIES MBEDTLS_X509_EXT_CERTIFICATE_POLICIES
+EXT_CRL_DISTRIBUTION_POINTS MBEDTLS_X509_EXT_CRL_DISTRIBUTION_POINTS
+EXT_EXTENDED_KEY_USAGE MBEDTLS_X509_EXT_EXTENDED_KEY_USAGE
+EXT_FRESHEST_CRL MBEDTLS_X509_EXT_FRESHEST_CRL
+EXT_INIHIBIT_ANYPOLICY MBEDTLS_X509_EXT_INIHIBIT_ANYPOLICY
+EXT_ISSUER_ALT_NAME MBEDTLS_X509_EXT_ISSUER_ALT_NAME
+EXT_KEY_USAGE MBEDTLS_X509_EXT_KEY_USAGE
+EXT_NAME_CONSTRAINTS MBEDTLS_X509_EXT_NAME_CONSTRAINTS
+EXT_NS_CERT_TYPE MBEDTLS_X509_EXT_NS_CERT_TYPE
+EXT_POLICY_CONSTRAINTS MBEDTLS_X509_EXT_POLICY_CONSTRAINTS
+EXT_POLICY_MAPPINGS MBEDTLS_X509_EXT_POLICY_MAPPINGS
+EXT_SUBJECT_ALT_NAME MBEDTLS_X509_EXT_SUBJECT_ALT_NAME
+EXT_SUBJECT_DIRECTORY_ATTRS MBEDTLS_X509_EXT_SUBJECT_DIRECTORY_ATTRS
+EXT_SUBJECT_KEY_IDENTIFIER MBEDTLS_X509_EXT_SUBJECT_KEY_IDENTIFIER
+GCM_DECRYPT MBEDTLS_GCM_DECRYPT
+GCM_ENCRYPT MBEDTLS_GCM_ENCRYPT
+KU_CRL_SIGN MBEDTLS_X509_KU_CRL_SIGN
+KU_DATA_ENCIPHERMENT MBEDTLS_X509_KU_DATA_ENCIPHERMENT
+KU_DIGITAL_SIGNATURE MBEDTLS_X509_KU_DIGITAL_SIGNATURE
+KU_KEY_AGREEMENT MBEDTLS_X509_KU_KEY_AGREEMENT
+KU_KEY_CERT_SIGN MBEDTLS_X509_KU_KEY_CERT_SIGN
+KU_KEY_ENCIPHERMENT MBEDTLS_X509_KU_KEY_ENCIPHERMENT
+KU_NON_REPUDIATION MBEDTLS_X509_KU_NON_REPUDIATION
+LN_2_DIV_LN_10_SCALE100 MBEDTLS_LN_2_DIV_LN_10_SCALE100
+MD_CONTEXT_T_INIT MBEDTLS_MD_CONTEXT_T_INIT
+MEMORY_VERIFY_ALLOC MBEDTLS_MEMORY_VERIFY_ALLOC
+MEMORY_VERIFY_ALWAYS MBEDTLS_MEMORY_VERIFY_ALWAYS
+MEMORY_VERIFY_FREE MBEDTLS_MEMORY_VERIFY_FREE
+MEMORY_VERIFY_NONE MBEDTLS_MEMORY_VERIFY_NONE
+MPI_CHK MBEDTLS_MPI_CHK
+NET_PROTO_TCP MBEDTLS_NET_PROTO_TCP
+NET_PROTO_UDP MBEDTLS_NET_PROTO_UDP
+NS_CERT_TYPE_EMAIL MBEDTLS_X509_NS_CERT_TYPE_EMAIL
+NS_CERT_TYPE_EMAIL_CA MBEDTLS_X509_NS_CERT_TYPE_EMAIL_CA
+NS_CERT_TYPE_OBJECT_SIGNING MBEDTLS_X509_NS_CERT_TYPE_OBJECT_SIGNING
+NS_CERT_TYPE_OBJECT_SIGNING_CA MBEDTLS_X509_NS_CERT_TYPE_OBJECT_SIGNING_CA
+NS_CERT_TYPE_RESERVED MBEDTLS_X509_NS_CERT_TYPE_RESERVED
+NS_CERT_TYPE_SSL_CA MBEDTLS_X509_NS_CERT_TYPE_SSL_CA
+NS_CERT_TYPE_SSL_CLIENT MBEDTLS_X509_NS_CERT_TYPE_SSL_CLIENT
+NS_CERT_TYPE_SSL_SERVER MBEDTLS_X509_NS_CERT_TYPE_SSL_SERVER
+OID_ANSI_X9_62 MBEDTLS_OID_ANSI_X9_62
+OID_ANSI_X9_62_FIELD_TYPE MBEDTLS_OID_ANSI_X9_62_FIELD_TYPE
+OID_ANSI_X9_62_PRIME_FIELD MBEDTLS_OID_ANSI_X9_62_PRIME_FIELD
+OID_ANSI_X9_62_SIG MBEDTLS_OID_ANSI_X9_62_SIG
+OID_ANSI_X9_62_SIG_SHA2 MBEDTLS_OID_ANSI_X9_62_SIG_SHA2
+OID_ANY_EXTENDED_KEY_USAGE MBEDTLS_OID_ANY_EXTENDED_KEY_USAGE
+OID_AT MBEDTLS_OID_AT
+OID_AT_CN MBEDTLS_OID_AT_CN
+OID_AT_COUNTRY MBEDTLS_OID_AT_COUNTRY
+OID_AT_DN_QUALIFIER MBEDTLS_OID_AT_DN_QUALIFIER
+OID_AT_GENERATION_QUALIFIER MBEDTLS_OID_AT_GENERATION_QUALIFIER
+OID_AT_GIVEN_NAME MBEDTLS_OID_AT_GIVEN_NAME
+OID_AT_INITIALS MBEDTLS_OID_AT_INITIALS
+OID_AT_LOCALITY MBEDTLS_OID_AT_LOCALITY
+OID_AT_ORGANIZATION MBEDTLS_OID_AT_ORGANIZATION
+OID_AT_ORG_UNIT MBEDTLS_OID_AT_ORG_UNIT
+OID_AT_POSTAL_ADDRESS MBEDTLS_OID_AT_POSTAL_ADDRESS
+OID_AT_POSTAL_CODE MBEDTLS_OID_AT_POSTAL_CODE
+OID_AT_PSEUDONYM MBEDTLS_OID_AT_PSEUDONYM
+OID_AT_SERIAL_NUMBER MBEDTLS_OID_AT_SERIAL_NUMBER
+OID_AT_STATE MBEDTLS_OID_AT_STATE
+OID_AT_SUR_NAME MBEDTLS_OID_AT_SUR_NAME
+OID_AT_TITLE MBEDTLS_OID_AT_TITLE
+OID_AT_UNIQUE_IDENTIFIER MBEDTLS_OID_AT_UNIQUE_IDENTIFIER
+OID_AUTHORITY_KEY_IDENTIFIER MBEDTLS_OID_AUTHORITY_KEY_IDENTIFIER
+OID_BASIC_CONSTRAINTS MBEDTLS_OID_BASIC_CONSTRAINTS
+OID_CERTICOM MBEDTLS_OID_CERTICOM
+OID_CERTIFICATE_POLICIES MBEDTLS_OID_CERTIFICATE_POLICIES
+OID_CLIENT_AUTH MBEDTLS_OID_CLIENT_AUTH
+OID_CMP MBEDTLS_OID_CMP
+OID_CODE_SIGNING MBEDTLS_OID_CODE_SIGNING
+OID_COUNTRY_US MBEDTLS_OID_COUNTRY_US
+OID_CRL_DISTRIBUTION_POINTS MBEDTLS_OID_CRL_DISTRIBUTION_POINTS
+OID_CRL_NUMBER MBEDTLS_OID_CRL_NUMBER
+OID_DES_CBC MBEDTLS_OID_DES_CBC
+OID_DES_EDE3_CBC MBEDTLS_OID_DES_EDE3_CBC
+OID_DIGEST_ALG_MD2 MBEDTLS_OID_DIGEST_ALG_MD2
+OID_DIGEST_ALG_MD4 MBEDTLS_OID_DIGEST_ALG_MD4
+OID_DIGEST_ALG_MD5 MBEDTLS_OID_DIGEST_ALG_MD5
+OID_DIGEST_ALG_SHA1 MBEDTLS_OID_DIGEST_ALG_SHA1
+OID_DIGEST_ALG_SHA224 MBEDTLS_OID_DIGEST_ALG_SHA224
+OID_DIGEST_ALG_SHA256 MBEDTLS_OID_DIGEST_ALG_SHA256
+OID_DIGEST_ALG_SHA384 MBEDTLS_OID_DIGEST_ALG_SHA384
+OID_DIGEST_ALG_SHA512 MBEDTLS_OID_DIGEST_ALG_SHA512
+OID_DOMAIN_COMPONENT MBEDTLS_OID_DOMAIN_COMPONENT
+OID_ECDSA_SHA1 MBEDTLS_OID_ECDSA_SHA1
+OID_ECDSA_SHA224 MBEDTLS_OID_ECDSA_SHA224
+OID_ECDSA_SHA256 MBEDTLS_OID_ECDSA_SHA256
+OID_ECDSA_SHA384 MBEDTLS_OID_ECDSA_SHA384
+OID_ECDSA_SHA512 MBEDTLS_OID_ECDSA_SHA512
+OID_EC_ALG_ECDH MBEDTLS_OID_EC_ALG_ECDH
+OID_EC_ALG_UNRESTRICTED MBEDTLS_OID_EC_ALG_UNRESTRICTED
+OID_EC_BRAINPOOL_V1 MBEDTLS_OID_EC_BRAINPOOL_V1
+OID_EC_GRP_BP256R1 MBEDTLS_OID_EC_GRP_BP256R1
+OID_EC_GRP_BP384R1 MBEDTLS_OID_EC_GRP_BP384R1
+OID_EC_GRP_BP512R1 MBEDTLS_OID_EC_GRP_BP512R1
+OID_EC_GRP_SECP192K1 MBEDTLS_OID_EC_GRP_SECP192K1
+OID_EC_GRP_SECP192R1 MBEDTLS_OID_EC_GRP_SECP192R1
+OID_EC_GRP_SECP224K1 MBEDTLS_OID_EC_GRP_SECP224K1
+OID_EC_GRP_SECP224R1 MBEDTLS_OID_EC_GRP_SECP224R1
+OID_EC_GRP_SECP256K1 MBEDTLS_OID_EC_GRP_SECP256K1
+OID_EC_GRP_SECP256R1 MBEDTLS_OID_EC_GRP_SECP256R1
+OID_EC_GRP_SECP384R1 MBEDTLS_OID_EC_GRP_SECP384R1
+OID_EC_GRP_SECP521R1 MBEDTLS_OID_EC_GRP_SECP521R1
+OID_EMAIL_PROTECTION MBEDTLS_OID_EMAIL_PROTECTION
+OID_EXTENDED_KEY_USAGE MBEDTLS_OID_EXTENDED_KEY_USAGE
+OID_FRESHEST_CRL MBEDTLS_OID_FRESHEST_CRL
+OID_GOV MBEDTLS_OID_GOV
+OID_HMAC_SHA1 MBEDTLS_OID_HMAC_SHA1
+OID_ID_CE MBEDTLS_OID_ID_CE
+OID_INIHIBIT_ANYPOLICY MBEDTLS_OID_INIHIBIT_ANYPOLICY
+OID_ISO_CCITT_DS MBEDTLS_OID_ISO_CCITT_DS
+OID_ISO_IDENTIFIED_ORG MBEDTLS_OID_ISO_IDENTIFIED_ORG
+OID_ISO_ITU_COUNTRY MBEDTLS_OID_ISO_ITU_COUNTRY
+OID_ISO_ITU_US_ORG MBEDTLS_OID_ISO_ITU_US_ORG
+OID_ISO_MEMBER_BODIES MBEDTLS_OID_ISO_MEMBER_BODIES
+OID_ISSUER_ALT_NAME MBEDTLS_OID_ISSUER_ALT_NAME
+OID_KEY_USAGE MBEDTLS_OID_KEY_USAGE
+OID_KP MBEDTLS_OID_KP
+OID_MGF1 MBEDTLS_OID_MGF1
+OID_NAME_CONSTRAINTS MBEDTLS_OID_NAME_CONSTRAINTS
+OID_NETSCAPE MBEDTLS_OID_NETSCAPE
+OID_NS_BASE_URL MBEDTLS_OID_NS_BASE_URL
+OID_NS_CA_POLICY_URL MBEDTLS_OID_NS_CA_POLICY_URL
+OID_NS_CA_REVOCATION_URL MBEDTLS_OID_NS_CA_REVOCATION_URL
+OID_NS_CERT MBEDTLS_OID_NS_CERT
+OID_NS_CERT_SEQUENCE MBEDTLS_OID_NS_CERT_SEQUENCE
+OID_NS_CERT_TYPE MBEDTLS_OID_NS_CERT_TYPE
+OID_NS_COMMENT MBEDTLS_OID_NS_COMMENT
+OID_NS_DATA_TYPE MBEDTLS_OID_NS_DATA_TYPE
+OID_NS_RENEWAL_URL MBEDTLS_OID_NS_RENEWAL_URL
+OID_NS_REVOCATION_URL MBEDTLS_OID_NS_REVOCATION_URL
+OID_NS_SSL_SERVER_NAME MBEDTLS_OID_NS_SSL_SERVER_NAME
+OID_OCSP_SIGNING MBEDTLS_OID_OCSP_SIGNING
+OID_OIW_SECSIG MBEDTLS_OID_OIW_SECSIG
+OID_OIW_SECSIG_ALG MBEDTLS_OID_OIW_SECSIG_ALG
+OID_OIW_SECSIG_SHA1 MBEDTLS_OID_OIW_SECSIG_SHA1
+OID_ORGANIZATION MBEDTLS_OID_ORGANIZATION
+OID_ORG_ANSI_X9_62 MBEDTLS_OID_ORG_ANSI_X9_62
+OID_ORG_CERTICOM MBEDTLS_OID_ORG_CERTICOM
+OID_ORG_DOD MBEDTLS_OID_ORG_DOD
+OID_ORG_GOV MBEDTLS_OID_ORG_GOV
+OID_ORG_NETSCAPE MBEDTLS_OID_ORG_NETSCAPE
+OID_ORG_OIW MBEDTLS_OID_ORG_OIW
+OID_ORG_RSA_DATA_SECURITY MBEDTLS_OID_ORG_RSA_DATA_SECURITY
+OID_ORG_TELETRUST MBEDTLS_OID_ORG_TELETRUST
+OID_PKCS MBEDTLS_OID_PKCS
+OID_PKCS1 MBEDTLS_OID_PKCS1
+OID_PKCS12 MBEDTLS_OID_PKCS12
+OID_PKCS12_PBE MBEDTLS_OID_PKCS12_PBE
+OID_PKCS12_PBE_SHA1_DES2_EDE_CBC MBEDTLS_OID_PKCS12_PBE_SHA1_DES2_EDE_CBC
+OID_PKCS12_PBE_SHA1_DES3_EDE_CBC MBEDTLS_OID_PKCS12_PBE_SHA1_DES3_EDE_CBC
+OID_PKCS12_PBE_SHA1_RC2_128_CBC MBEDTLS_OID_PKCS12_PBE_SHA1_RC2_128_CBC
+OID_PKCS12_PBE_SHA1_RC2_40_CBC MBEDTLS_OID_PKCS12_PBE_SHA1_RC2_40_CBC
+OID_PKCS12_PBE_SHA1_RC4_128 MBEDTLS_OID_PKCS12_PBE_SHA1_RC4_128
+OID_PKCS12_PBE_SHA1_RC4_40 MBEDTLS_OID_PKCS12_PBE_SHA1_RC4_40
+OID_PKCS1_MD2 MBEDTLS_OID_PKCS1_MD2
+OID_PKCS1_MD4 MBEDTLS_OID_PKCS1_MD4
+OID_PKCS1_MD5 MBEDTLS_OID_PKCS1_MD5
+OID_PKCS1_RSA MBEDTLS_OID_PKCS1_RSA
+OID_PKCS1_SHA1 MBEDTLS_OID_PKCS1_SHA1
+OID_PKCS1_SHA224 MBEDTLS_OID_PKCS1_SHA224
+OID_PKCS1_SHA256 MBEDTLS_OID_PKCS1_SHA256
+OID_PKCS1_SHA384 MBEDTLS_OID_PKCS1_SHA384
+OID_PKCS1_SHA512 MBEDTLS_OID_PKCS1_SHA512
+OID_PKCS5 MBEDTLS_OID_PKCS5
+OID_PKCS5_PBES2 MBEDTLS_OID_PKCS5_PBES2
+OID_PKCS5_PBE_MD2_DES_CBC MBEDTLS_OID_PKCS5_PBE_MD2_DES_CBC
+OID_PKCS5_PBE_MD2_RC2_CBC MBEDTLS_OID_PKCS5_PBE_MD2_RC2_CBC
+OID_PKCS5_PBE_MD5_DES_CBC MBEDTLS_OID_PKCS5_PBE_MD5_DES_CBC
+OID_PKCS5_PBE_MD5_RC2_CBC MBEDTLS_OID_PKCS5_PBE_MD5_RC2_CBC
+OID_PKCS5_PBE_SHA1_DES_CBC MBEDTLS_OID_PKCS5_PBE_SHA1_DES_CBC
+OID_PKCS5_PBE_SHA1_RC2_CBC MBEDTLS_OID_PKCS5_PBE_SHA1_RC2_CBC
+OID_PKCS5_PBKDF2 MBEDTLS_OID_PKCS5_PBKDF2
+OID_PKCS5_PBMAC1 MBEDTLS_OID_PKCS5_PBMAC1
+OID_PKCS9 MBEDTLS_OID_PKCS9
+OID_PKCS9_CSR_EXT_REQ MBEDTLS_OID_PKCS9_CSR_EXT_REQ
+OID_PKCS9_EMAIL MBEDTLS_OID_PKCS9_EMAIL
+OID_PKIX MBEDTLS_OID_PKIX
+OID_POLICY_CONSTRAINTS MBEDTLS_OID_POLICY_CONSTRAINTS
+OID_POLICY_MAPPINGS MBEDTLS_OID_POLICY_MAPPINGS
+OID_PRIVATE_KEY_USAGE_PERIOD MBEDTLS_OID_PRIVATE_KEY_USAGE_PERIOD
+OID_RSASSA_PSS MBEDTLS_OID_RSASSA_PSS
+OID_RSA_COMPANY MBEDTLS_OID_RSA_COMPANY
+OID_RSA_SHA_OBS MBEDTLS_OID_RSA_SHA_OBS
+OID_SERVER_AUTH MBEDTLS_OID_SERVER_AUTH
+OID_SIZE MBEDTLS_OID_SIZE
+OID_SUBJECT_ALT_NAME MBEDTLS_OID_SUBJECT_ALT_NAME
+OID_SUBJECT_DIRECTORY_ATTRS MBEDTLS_OID_SUBJECT_DIRECTORY_ATTRS
+OID_SUBJECT_KEY_IDENTIFIER MBEDTLS_OID_SUBJECT_KEY_IDENTIFIER
+OID_TELETRUST MBEDTLS_OID_TELETRUST
+OID_TIME_STAMPING MBEDTLS_OID_TIME_STAMPING
+PADLOCK_ACE MBEDTLS_PADLOCK_ACE
+PADLOCK_ALIGN16 MBEDTLS_PADLOCK_ALIGN16
+PADLOCK_PHE MBEDTLS_PADLOCK_PHE
+PADLOCK_PMM MBEDTLS_PADLOCK_PMM
+PADLOCK_RNG MBEDTLS_PADLOCK_RNG
+PKCS12_DERIVE_IV MBEDTLS_PKCS12_DERIVE_IV
+PKCS12_DERIVE_KEY MBEDTLS_PKCS12_DERIVE_KEY
+PKCS12_DERIVE_MAC_KEY MBEDTLS_PKCS12_DERIVE_MAC_KEY
+PKCS12_PBE_DECRYPT MBEDTLS_PKCS12_PBE_DECRYPT
+PKCS12_PBE_ENCRYPT MBEDTLS_PKCS12_PBE_ENCRYPT
+PKCS5_DECRYPT MBEDTLS_PKCS5_DECRYPT
+PKCS5_ENCRYPT MBEDTLS_PKCS5_ENCRYPT
+POLARSSL_AESNI_AES MBEDTLS_AESNI_AES
+POLARSSL_AESNI_C MBEDTLS_AESNI_C
+POLARSSL_AESNI_CLMUL MBEDTLS_AESNI_CLMUL
+POLARSSL_AESNI_H MBEDTLS_AESNI_H
+POLARSSL_AES_ALT MBEDTLS_AES_ALT
+POLARSSL_AES_C MBEDTLS_AES_C
+POLARSSL_AES_H MBEDTLS_AES_H
+POLARSSL_AES_ROM_TABLES MBEDTLS_AES_ROM_TABLES
+POLARSSL_ARC4_ALT MBEDTLS_ARC4_ALT
+POLARSSL_ARC4_C MBEDTLS_ARC4_C
+POLARSSL_ARC4_H MBEDTLS_ARC4_H
+POLARSSL_ASN1_H MBEDTLS_ASN1_H
+POLARSSL_ASN1_PARSE_C MBEDTLS_ASN1_PARSE_C
+POLARSSL_ASN1_WRITE_C MBEDTLS_ASN1_WRITE_C
+POLARSSL_ASN1_WRITE_H MBEDTLS_ASN1_WRITE_H
+POLARSSL_BASE64_C MBEDTLS_BASE64_C
+POLARSSL_BASE64_H MBEDTLS_BASE64_H
+POLARSSL_BIGNUM_C MBEDTLS_BIGNUM_C
+POLARSSL_BIGNUM_H MBEDTLS_BIGNUM_H
+POLARSSL_BLOWFISH_ALT MBEDTLS_BLOWFISH_ALT
+POLARSSL_BLOWFISH_C MBEDTLS_BLOWFISH_C
+POLARSSL_BLOWFISH_H MBEDTLS_BLOWFISH_H
+POLARSSL_BN_MUL_H MBEDTLS_BN_MUL_H
+POLARSSL_CAMELLIA_ALT MBEDTLS_CAMELLIA_ALT
+POLARSSL_CAMELLIA_C MBEDTLS_CAMELLIA_C
+POLARSSL_CAMELLIA_H MBEDTLS_CAMELLIA_H
+POLARSSL_CAMELLIA_SMALL_MEMORY MBEDTLS_CAMELLIA_SMALL_MEMORY
+POLARSSL_CCM_C MBEDTLS_CCM_C
+POLARSSL_CCM_H MBEDTLS_CCM_H
+POLARSSL_CERTS_C MBEDTLS_CERTS_C
+POLARSSL_CERTS_H MBEDTLS_CERTS_H
+POLARSSL_CHECK_CONFIG_H MBEDTLS_CHECK_CONFIG_H
+POLARSSL_CIPHERSUITE_NODTLS MBEDTLS_CIPHERSUITE_NODTLS
+POLARSSL_CIPHERSUITE_SHORT_TAG MBEDTLS_CIPHERSUITE_SHORT_TAG
+POLARSSL_CIPHERSUITE_WEAK MBEDTLS_CIPHERSUITE_WEAK
+POLARSSL_CIPHER_AES_128_CBC MBEDTLS_CIPHER_AES_128_CBC
+POLARSSL_CIPHER_AES_128_CCM MBEDTLS_CIPHER_AES_128_CCM
+POLARSSL_CIPHER_AES_128_CFB128 MBEDTLS_CIPHER_AES_128_CFB128
+POLARSSL_CIPHER_AES_128_CTR MBEDTLS_CIPHER_AES_128_CTR
+POLARSSL_CIPHER_AES_128_ECB MBEDTLS_CIPHER_AES_128_ECB
+POLARSSL_CIPHER_AES_128_GCM MBEDTLS_CIPHER_AES_128_GCM
+POLARSSL_CIPHER_AES_192_CBC MBEDTLS_CIPHER_AES_192_CBC
+POLARSSL_CIPHER_AES_192_CCM MBEDTLS_CIPHER_AES_192_CCM
+POLARSSL_CIPHER_AES_192_CFB128 MBEDTLS_CIPHER_AES_192_CFB128
+POLARSSL_CIPHER_AES_192_CTR MBEDTLS_CIPHER_AES_192_CTR
+POLARSSL_CIPHER_AES_192_ECB MBEDTLS_CIPHER_AES_192_ECB
+POLARSSL_CIPHER_AES_192_GCM MBEDTLS_CIPHER_AES_192_GCM
+POLARSSL_CIPHER_AES_256_CBC MBEDTLS_CIPHER_AES_256_CBC
+POLARSSL_CIPHER_AES_256_CCM MBEDTLS_CIPHER_AES_256_CCM
+POLARSSL_CIPHER_AES_256_CFB128 MBEDTLS_CIPHER_AES_256_CFB128
+POLARSSL_CIPHER_AES_256_CTR MBEDTLS_CIPHER_AES_256_CTR
+POLARSSL_CIPHER_AES_256_ECB MBEDTLS_CIPHER_AES_256_ECB
+POLARSSL_CIPHER_AES_256_GCM MBEDTLS_CIPHER_AES_256_GCM
+POLARSSL_CIPHER_ARC4_128 MBEDTLS_CIPHER_ARC4_128
+POLARSSL_CIPHER_BLOWFISH_CBC MBEDTLS_CIPHER_BLOWFISH_CBC
+POLARSSL_CIPHER_BLOWFISH_CFB64 MBEDTLS_CIPHER_BLOWFISH_CFB64
+POLARSSL_CIPHER_BLOWFISH_CTR MBEDTLS_CIPHER_BLOWFISH_CTR
+POLARSSL_CIPHER_BLOWFISH_ECB MBEDTLS_CIPHER_BLOWFISH_ECB
+POLARSSL_CIPHER_C MBEDTLS_CIPHER_C
+POLARSSL_CIPHER_CAMELLIA_128_CBC MBEDTLS_CIPHER_CAMELLIA_128_CBC
+POLARSSL_CIPHER_CAMELLIA_128_CCM MBEDTLS_CIPHER_CAMELLIA_128_CCM
+POLARSSL_CIPHER_CAMELLIA_128_CFB128 MBEDTLS_CIPHER_CAMELLIA_128_CFB128
+POLARSSL_CIPHER_CAMELLIA_128_CTR MBEDTLS_CIPHER_CAMELLIA_128_CTR
+POLARSSL_CIPHER_CAMELLIA_128_ECB MBEDTLS_CIPHER_CAMELLIA_128_ECB
+POLARSSL_CIPHER_CAMELLIA_128_GCM MBEDTLS_CIPHER_CAMELLIA_128_GCM
+POLARSSL_CIPHER_CAMELLIA_192_CBC MBEDTLS_CIPHER_CAMELLIA_192_CBC
+POLARSSL_CIPHER_CAMELLIA_192_CCM MBEDTLS_CIPHER_CAMELLIA_192_CCM
+POLARSSL_CIPHER_CAMELLIA_192_CFB128 MBEDTLS_CIPHER_CAMELLIA_192_CFB128
+POLARSSL_CIPHER_CAMELLIA_192_CTR MBEDTLS_CIPHER_CAMELLIA_192_CTR
+POLARSSL_CIPHER_CAMELLIA_192_ECB MBEDTLS_CIPHER_CAMELLIA_192_ECB
+POLARSSL_CIPHER_CAMELLIA_192_GCM MBEDTLS_CIPHER_CAMELLIA_192_GCM
+POLARSSL_CIPHER_CAMELLIA_256_CBC MBEDTLS_CIPHER_CAMELLIA_256_CBC
+POLARSSL_CIPHER_CAMELLIA_256_CCM MBEDTLS_CIPHER_CAMELLIA_256_CCM
+POLARSSL_CIPHER_CAMELLIA_256_CFB128 MBEDTLS_CIPHER_CAMELLIA_256_CFB128
+POLARSSL_CIPHER_CAMELLIA_256_CTR MBEDTLS_CIPHER_CAMELLIA_256_CTR
+POLARSSL_CIPHER_CAMELLIA_256_ECB MBEDTLS_CIPHER_CAMELLIA_256_ECB
+POLARSSL_CIPHER_CAMELLIA_256_GCM MBEDTLS_CIPHER_CAMELLIA_256_GCM
+POLARSSL_CIPHER_DES_CBC MBEDTLS_CIPHER_DES_CBC
+POLARSSL_CIPHER_DES_ECB MBEDTLS_CIPHER_DES_ECB
+POLARSSL_CIPHER_DES_EDE3_CBC MBEDTLS_CIPHER_DES_EDE3_CBC
+POLARSSL_CIPHER_DES_EDE3_ECB MBEDTLS_CIPHER_DES_EDE3_ECB
+POLARSSL_CIPHER_DES_EDE_CBC MBEDTLS_CIPHER_DES_EDE_CBC
+POLARSSL_CIPHER_DES_EDE_ECB MBEDTLS_CIPHER_DES_EDE_ECB
+POLARSSL_CIPHER_H MBEDTLS_CIPHER_H
+POLARSSL_CIPHER_ID_3DES MBEDTLS_CIPHER_ID_3DES
+POLARSSL_CIPHER_ID_AES MBEDTLS_CIPHER_ID_AES
+POLARSSL_CIPHER_ID_ARC4 MBEDTLS_CIPHER_ID_ARC4
+POLARSSL_CIPHER_ID_BLOWFISH MBEDTLS_CIPHER_ID_BLOWFISH
+POLARSSL_CIPHER_ID_CAMELLIA MBEDTLS_CIPHER_ID_CAMELLIA
+POLARSSL_CIPHER_ID_DES MBEDTLS_CIPHER_ID_DES
+POLARSSL_CIPHER_ID_NONE MBEDTLS_CIPHER_ID_NONE
+POLARSSL_CIPHER_ID_NULL MBEDTLS_CIPHER_ID_NULL
+POLARSSL_CIPHER_MODE_AEAD MBEDTLS_CIPHER_MODE_AEAD
+POLARSSL_CIPHER_MODE_CBC MBEDTLS_CIPHER_MODE_CBC
+POLARSSL_CIPHER_MODE_CFB MBEDTLS_CIPHER_MODE_CFB
+POLARSSL_CIPHER_MODE_CTR MBEDTLS_CIPHER_MODE_CTR
+POLARSSL_CIPHER_MODE_STREAM MBEDTLS_CIPHER_MODE_STREAM
+POLARSSL_CIPHER_MODE_WITH_PADDING MBEDTLS_CIPHER_MODE_WITH_PADDING
+POLARSSL_CIPHER_NONE MBEDTLS_CIPHER_NONE
+POLARSSL_CIPHER_NULL MBEDTLS_CIPHER_NULL
+POLARSSL_CIPHER_NULL_CIPHER MBEDTLS_CIPHER_NULL_CIPHER
+POLARSSL_CIPHER_PADDING_ONE_AND_ZEROS MBEDTLS_CIPHER_PADDING_ONE_AND_ZEROS
+POLARSSL_CIPHER_PADDING_PKCS7 MBEDTLS_CIPHER_PADDING_PKCS7
+POLARSSL_CIPHER_PADDING_ZEROS MBEDTLS_CIPHER_PADDING_ZEROS
+POLARSSL_CIPHER_PADDING_ZEROS_AND_LEN MBEDTLS_CIPHER_PADDING_ZEROS_AND_LEN
+POLARSSL_CIPHER_VARIABLE_IV_LEN MBEDTLS_CIPHER_VARIABLE_IV_LEN
+POLARSSL_CIPHER_VARIABLE_KEY_LEN MBEDTLS_CIPHER_VARIABLE_KEY_LEN
+POLARSSL_CIPHER_WRAP_H MBEDTLS_CIPHER_WRAP_H
+POLARSSL_CONFIG_FILE MBEDTLS_CONFIG_FILE
+POLARSSL_CONFIG_H MBEDTLS_CONFIG_H
+POLARSSL_CTR_DRBG_C MBEDTLS_CTR_DRBG_C
+POLARSSL_CTR_DRBG_H MBEDTLS_CTR_DRBG_H
+POLARSSL_DEBUG_C MBEDTLS_DEBUG_C
+POLARSSL_DEBUG_DFL_MODE MBEDTLS_DEBUG_DFL_MODE
+POLARSSL_DEBUG_H MBEDTLS_DEBUG_H
+POLARSSL_DEBUG_LOG_FULL MBEDTLS_DEBUG_LOG_FULL
+POLARSSL_DEBUG_LOG_RAW MBEDTLS_DEBUG_LOG_RAW
+POLARSSL_DECRYPT MBEDTLS_DECRYPT
+POLARSSL_DEPRECATED_REMOVED MBEDTLS_DEPRECATED_REMOVED
+POLARSSL_DEPRECATED_WARNING MBEDTLS_DEPRECATED_WARNING
+POLARSSL_DES_ALT MBEDTLS_DES_ALT
+POLARSSL_DES_C MBEDTLS_DES_C
+POLARSSL_DES_H MBEDTLS_DES_H
+POLARSSL_DHM_C MBEDTLS_DHM_C
+POLARSSL_DHM_H MBEDTLS_DHM_H
+POLARSSL_DHM_RFC2409_MODP_1024_G MBEDTLS_DHM_RFC2409_MODP_1024_G
+POLARSSL_DHM_RFC2409_MODP_1024_P MBEDTLS_DHM_RFC2409_MODP_1024_P
+POLARSSL_DHM_RFC3526_MODP_2048_G MBEDTLS_DHM_RFC3526_MODP_2048_G
+POLARSSL_DHM_RFC3526_MODP_2048_P MBEDTLS_DHM_RFC3526_MODP_2048_P
+POLARSSL_DHM_RFC3526_MODP_3072_G MBEDTLS_DHM_RFC3526_MODP_3072_G
+POLARSSL_DHM_RFC3526_MODP_3072_P MBEDTLS_DHM_RFC3526_MODP_3072_P
+POLARSSL_DHM_RFC5114_MODP_1024_G MBEDTLS_DHM_RFC5114_MODP_1024_G
+POLARSSL_DHM_RFC5114_MODP_1024_P MBEDTLS_DHM_RFC5114_MODP_1024_P
+POLARSSL_DHM_RFC5114_MODP_2048_G MBEDTLS_DHM_RFC5114_MODP_2048_G
+POLARSSL_DHM_RFC5114_MODP_2048_P MBEDTLS_DHM_RFC5114_MODP_2048_P
+POLARSSL_ECDH_C MBEDTLS_ECDH_C
+POLARSSL_ECDH_H MBEDTLS_ECDH_H
+POLARSSL_ECDH_OURS MBEDTLS_ECDH_OURS
+POLARSSL_ECDH_THEIRS MBEDTLS_ECDH_THEIRS
+POLARSSL_ECDSA_C MBEDTLS_ECDSA_C
+POLARSSL_ECDSA_DETERMINISTIC MBEDTLS_ECDSA_DETERMINISTIC
+POLARSSL_ECDSA_H MBEDTLS_ECDSA_H
+POLARSSL_ECP_C MBEDTLS_ECP_C
+POLARSSL_ECP_DP_BP256R1 MBEDTLS_ECP_DP_BP256R1
+POLARSSL_ECP_DP_BP256R1_ENABLED MBEDTLS_ECP_DP_BP256R1_ENABLED
+POLARSSL_ECP_DP_BP384R1 MBEDTLS_ECP_DP_BP384R1
+POLARSSL_ECP_DP_BP384R1_ENABLED MBEDTLS_ECP_DP_BP384R1_ENABLED
+POLARSSL_ECP_DP_BP512R1 MBEDTLS_ECP_DP_BP512R1
+POLARSSL_ECP_DP_BP512R1_ENABLED MBEDTLS_ECP_DP_BP512R1_ENABLED
+POLARSSL_ECP_DP_M255 MBEDTLS_ECP_DP_CURVE25519
+POLARSSL_ECP_DP_M255_ENABLED MBEDTLS_ECP_DP_CURVE25519_ENABLED
+POLARSSL_ECP_DP_MAX MBEDTLS_ECP_DP_MAX
+POLARSSL_ECP_DP_NONE MBEDTLS_ECP_DP_NONE
+POLARSSL_ECP_DP_SECP192K1 MBEDTLS_ECP_DP_SECP192K1
+POLARSSL_ECP_DP_SECP192K1_ENABLED MBEDTLS_ECP_DP_SECP192K1_ENABLED
+POLARSSL_ECP_DP_SECP192R1 MBEDTLS_ECP_DP_SECP192R1
+POLARSSL_ECP_DP_SECP192R1_ENABLED MBEDTLS_ECP_DP_SECP192R1_ENABLED
+POLARSSL_ECP_DP_SECP224K1 MBEDTLS_ECP_DP_SECP224K1
+POLARSSL_ECP_DP_SECP224K1_ENABLED MBEDTLS_ECP_DP_SECP224K1_ENABLED
+POLARSSL_ECP_DP_SECP224R1 MBEDTLS_ECP_DP_SECP224R1
+POLARSSL_ECP_DP_SECP224R1_ENABLED MBEDTLS_ECP_DP_SECP224R1_ENABLED
+POLARSSL_ECP_DP_SECP256K1 MBEDTLS_ECP_DP_SECP256K1
+POLARSSL_ECP_DP_SECP256K1_ENABLED MBEDTLS_ECP_DP_SECP256K1_ENABLED
+POLARSSL_ECP_DP_SECP256R1 MBEDTLS_ECP_DP_SECP256R1
+POLARSSL_ECP_DP_SECP256R1_ENABLED MBEDTLS_ECP_DP_SECP256R1_ENABLED
+POLARSSL_ECP_DP_SECP384R1 MBEDTLS_ECP_DP_SECP384R1
+POLARSSL_ECP_DP_SECP384R1_ENABLED MBEDTLS_ECP_DP_SECP384R1_ENABLED
+POLARSSL_ECP_DP_SECP521R1 MBEDTLS_ECP_DP_SECP521R1
+POLARSSL_ECP_DP_SECP521R1_ENABLED MBEDTLS_ECP_DP_SECP521R1_ENABLED
+POLARSSL_ECP_FIXED_POINT_OPTIM MBEDTLS_ECP_FIXED_POINT_OPTIM
+POLARSSL_ECP_H MBEDTLS_ECP_H
+POLARSSL_ECP_MAX_BITS MBEDTLS_ECP_MAX_BITS
+POLARSSL_ECP_MAX_BYTES MBEDTLS_ECP_MAX_BYTES
+POLARSSL_ECP_MAX_PT_LEN MBEDTLS_ECP_MAX_PT_LEN
+POLARSSL_ECP_NIST_OPTIM MBEDTLS_ECP_NIST_OPTIM
+POLARSSL_ECP_PF_COMPRESSED MBEDTLS_ECP_PF_COMPRESSED
+POLARSSL_ECP_PF_UNCOMPRESSED MBEDTLS_ECP_PF_UNCOMPRESSED
+POLARSSL_ECP_TLS_NAMED_CURVE MBEDTLS_ECP_TLS_NAMED_CURVE
+POLARSSL_ECP_WINDOW_SIZE MBEDTLS_ECP_WINDOW_SIZE
+POLARSSL_ENABLE_WEAK_CIPHERSUITES MBEDTLS_ENABLE_WEAK_CIPHERSUITES
+POLARSSL_ENCRYPT MBEDTLS_ENCRYPT
+POLARSSL_ENTROPY_C MBEDTLS_ENTROPY_C
+POLARSSL_ENTROPY_FORCE_SHA256 MBEDTLS_ENTROPY_FORCE_SHA256
+POLARSSL_ENTROPY_H MBEDTLS_ENTROPY_H
+POLARSSL_ENTROPY_POLL_H MBEDTLS_ENTROPY_POLL_H
+POLARSSL_ENTROPY_SHA256_ACCUMULATOR MBEDTLS_ENTROPY_SHA256_ACCUMULATOR
+POLARSSL_ENTROPY_SHA512_ACCUMULATOR MBEDTLS_ENTROPY_SHA512_ACCUMULATOR
+POLARSSL_ERROR_C MBEDTLS_ERROR_C
+POLARSSL_ERROR_H MBEDTLS_ERROR_H
+POLARSSL_ERROR_STRERROR_BC MBEDTLS_ERROR_STRERROR_BC
+POLARSSL_ERROR_STRERROR_DUMMY MBEDTLS_ERROR_STRERROR_DUMMY
+POLARSSL_ERR_AES_INVALID_INPUT_LENGTH MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH
+POLARSSL_ERR_AES_INVALID_KEY_LENGTH MBEDTLS_ERR_AES_INVALID_KEY_LENGTH
+POLARSSL_ERR_ASN1_BUF_TOO_SMALL MBEDTLS_ERR_ASN1_BUF_TOO_SMALL
+POLARSSL_ERR_ASN1_INVALID_DATA MBEDTLS_ERR_ASN1_INVALID_DATA
+POLARSSL_ERR_ASN1_INVALID_LENGTH MBEDTLS_ERR_ASN1_INVALID_LENGTH
+POLARSSL_ERR_ASN1_LENGTH_MISMATCH MBEDTLS_ERR_ASN1_LENGTH_MISMATCH
+POLARSSL_ERR_ASN1_MALLOC_FAILED MBEDTLS_ERR_ASN1_ALLOC_FAILED
+POLARSSL_ERR_ASN1_OUT_OF_DATA MBEDTLS_ERR_ASN1_OUT_OF_DATA
+POLARSSL_ERR_ASN1_UNEXPECTED_TAG MBEDTLS_ERR_ASN1_UNEXPECTED_TAG
+POLARSSL_ERR_BASE64_BUFFER_TOO_SMALL MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL
+POLARSSL_ERR_BASE64_INVALID_CHARACTER MBEDTLS_ERR_BASE64_INVALID_CHARACTER
+POLARSSL_ERR_BLOWFISH_INVALID_INPUT_LENGTH MBEDTLS_ERR_BLOWFISH_INVALID_INPUT_LENGTH
+POLARSSL_ERR_BLOWFISH_INVALID_KEY_LENGTH MBEDTLS_ERR_BLOWFISH_INVALID_KEY_LENGTH
+POLARSSL_ERR_CAMELLIA_INVALID_INPUT_LENGTH MBEDTLS_ERR_CAMELLIA_INVALID_INPUT_LENGTH
+POLARSSL_ERR_CAMELLIA_INVALID_KEY_LENGTH MBEDTLS_ERR_CAMELLIA_INVALID_KEY_LENGTH
+POLARSSL_ERR_CCM_AUTH_FAILED MBEDTLS_ERR_CCM_AUTH_FAILED
+POLARSSL_ERR_CCM_BAD_INPUT MBEDTLS_ERR_CCM_BAD_INPUT
+POLARSSL_ERR_CIPHER_ALLOC_FAILED MBEDTLS_ERR_CIPHER_ALLOC_FAILED
+POLARSSL_ERR_CIPHER_AUTH_FAILED MBEDTLS_ERR_CIPHER_AUTH_FAILED
+POLARSSL_ERR_CIPHER_BAD_INPUT_DATA MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA
+POLARSSL_ERR_CIPHER_FEATURE_UNAVAILABLE MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE
+POLARSSL_ERR_CIPHER_FULL_BLOCK_EXPECTED MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED
+POLARSSL_ERR_CIPHER_INVALID_PADDING MBEDTLS_ERR_CIPHER_INVALID_PADDING
+POLARSSL_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED MBEDTLS_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED
+POLARSSL_ERR_CTR_DRBG_FILE_IO_ERROR MBEDTLS_ERR_CTR_DRBG_FILE_IO_ERROR
+POLARSSL_ERR_CTR_DRBG_INPUT_TOO_BIG MBEDTLS_ERR_CTR_DRBG_INPUT_TOO_BIG
+POLARSSL_ERR_CTR_DRBG_REQUEST_TOO_BIG MBEDTLS_ERR_CTR_DRBG_REQUEST_TOO_BIG
+POLARSSL_ERR_DES_INVALID_INPUT_LENGTH MBEDTLS_ERR_DES_INVALID_INPUT_LENGTH
+POLARSSL_ERR_DHM_BAD_INPUT_DATA MBEDTLS_ERR_DHM_BAD_INPUT_DATA
+POLARSSL_ERR_DHM_CALC_SECRET_FAILED MBEDTLS_ERR_DHM_CALC_SECRET_FAILED
+POLARSSL_ERR_DHM_FILE_IO_ERROR MBEDTLS_ERR_DHM_FILE_IO_ERROR
+POLARSSL_ERR_DHM_INVALID_FORMAT MBEDTLS_ERR_DHM_INVALID_FORMAT
+POLARSSL_ERR_DHM_MAKE_PARAMS_FAILED MBEDTLS_ERR_DHM_MAKE_PARAMS_FAILED
+POLARSSL_ERR_DHM_MAKE_PUBLIC_FAILED MBEDTLS_ERR_DHM_MAKE_PUBLIC_FAILED
+POLARSSL_ERR_DHM_MALLOC_FAILED MBEDTLS_ERR_DHM_ALLOC_FAILED
+POLARSSL_ERR_DHM_READ_PARAMS_FAILED MBEDTLS_ERR_DHM_READ_PARAMS_FAILED
+POLARSSL_ERR_DHM_READ_PUBLIC_FAILED MBEDTLS_ERR_DHM_READ_PUBLIC_FAILED
+POLARSSL_ERR_ECP_BAD_INPUT_DATA MBEDTLS_ERR_ECP_BAD_INPUT_DATA
+POLARSSL_ERR_ECP_BUFFER_TOO_SMALL MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL
+POLARSSL_ERR_ECP_FEATURE_UNAVAILABLE MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE
+POLARSSL_ERR_ECP_INVALID_KEY MBEDTLS_ERR_ECP_INVALID_KEY
+POLARSSL_ERR_ECP_MALLOC_FAILED MBEDTLS_ERR_ECP_ALLOC_FAILED
+POLARSSL_ERR_ECP_RANDOM_FAILED MBEDTLS_ERR_ECP_RANDOM_FAILED
+POLARSSL_ERR_ECP_SIG_LEN_MISMATCH MBEDTLS_ERR_ECP_SIG_LEN_MISMATCH
+POLARSSL_ERR_ECP_VERIFY_FAILED MBEDTLS_ERR_ECP_VERIFY_FAILED
+POLARSSL_ERR_ENTROPY_FILE_IO_ERROR MBEDTLS_ERR_ENTROPY_FILE_IO_ERROR
+POLARSSL_ERR_ENTROPY_MAX_SOURCES MBEDTLS_ERR_ENTROPY_MAX_SOURCES
+POLARSSL_ERR_ENTROPY_NO_SOURCES_DEFINED MBEDTLS_ERR_ENTROPY_NO_SOURCES_DEFINED
+POLARSSL_ERR_ENTROPY_SOURCE_FAILED MBEDTLS_ERR_ENTROPY_SOURCE_FAILED
+POLARSSL_ERR_GCM_AUTH_FAILED MBEDTLS_ERR_GCM_AUTH_FAILED
+POLARSSL_ERR_GCM_BAD_INPUT MBEDTLS_ERR_GCM_BAD_INPUT
+POLARSSL_ERR_HMAC_DRBG_ENTROPY_SOURCE_FAILED MBEDTLS_ERR_HMAC_DRBG_ENTROPY_SOURCE_FAILED
+POLARSSL_ERR_HMAC_DRBG_FILE_IO_ERROR MBEDTLS_ERR_HMAC_DRBG_FILE_IO_ERROR
+POLARSSL_ERR_HMAC_DRBG_INPUT_TOO_BIG MBEDTLS_ERR_HMAC_DRBG_INPUT_TOO_BIG
+POLARSSL_ERR_HMAC_DRBG_REQUEST_TOO_BIG MBEDTLS_ERR_HMAC_DRBG_REQUEST_TOO_BIG
+POLARSSL_ERR_MD2_FILE_IO_ERROR MBEDTLS_ERR_MD2_FILE_IO_ERROR
+POLARSSL_ERR_MD4_FILE_IO_ERROR MBEDTLS_ERR_MD4_FILE_IO_ERROR
+POLARSSL_ERR_MD5_FILE_IO_ERROR MBEDTLS_ERR_MD5_FILE_IO_ERROR
+POLARSSL_ERR_MD_ALLOC_FAILED MBEDTLS_ERR_MD_ALLOC_FAILED
+POLARSSL_ERR_MD_BAD_INPUT_DATA MBEDTLS_ERR_MD_BAD_INPUT_DATA
+POLARSSL_ERR_MD_FEATURE_UNAVAILABLE MBEDTLS_ERR_MD_FEATURE_UNAVAILABLE
+POLARSSL_ERR_MD_FILE_IO_ERROR MBEDTLS_ERR_MD_FILE_IO_ERROR
+POLARSSL_ERR_MPI_BAD_INPUT_DATA MBEDTLS_ERR_MPI_BAD_INPUT_DATA
+POLARSSL_ERR_MPI_BUFFER_TOO_SMALL MBEDTLS_ERR_MPI_BUFFER_TOO_SMALL
+POLARSSL_ERR_MPI_DIVISION_BY_ZERO MBEDTLS_ERR_MPI_DIVISION_BY_ZERO
+POLARSSL_ERR_MPI_FILE_IO_ERROR MBEDTLS_ERR_MPI_FILE_IO_ERROR
+POLARSSL_ERR_MPI_INVALID_CHARACTER MBEDTLS_ERR_MPI_INVALID_CHARACTER
+POLARSSL_ERR_MPI_MALLOC_FAILED MBEDTLS_ERR_MPI_ALLOC_FAILED
+POLARSSL_ERR_MPI_NEGATIVE_VALUE MBEDTLS_ERR_MPI_NEGATIVE_VALUE
+POLARSSL_ERR_MPI_NOT_ACCEPTABLE MBEDTLS_ERR_MPI_NOT_ACCEPTABLE
+POLARSSL_ERR_NET_ACCEPT_FAILED MBEDTLS_ERR_NET_ACCEPT_FAILED
+POLARSSL_ERR_NET_BIND_FAILED MBEDTLS_ERR_NET_BIND_FAILED
+POLARSSL_ERR_NET_CONNECT_FAILED MBEDTLS_ERR_NET_CONNECT_FAILED
+POLARSSL_ERR_NET_CONN_RESET MBEDTLS_ERR_NET_CONN_RESET
+POLARSSL_ERR_NET_LISTEN_FAILED MBEDTLS_ERR_NET_LISTEN_FAILED
+POLARSSL_ERR_NET_RECV_FAILED MBEDTLS_ERR_NET_RECV_FAILED
+POLARSSL_ERR_NET_SEND_FAILED MBEDTLS_ERR_NET_SEND_FAILED
+POLARSSL_ERR_NET_SOCKET_FAILED MBEDTLS_ERR_NET_SOCKET_FAILED
+POLARSSL_ERR_NET_TIMEOUT MBEDTLS_ERR_SSL_TIMEOUT
+POLARSSL_ERR_NET_UNKNOWN_HOST MBEDTLS_ERR_NET_UNKNOWN_HOST
+POLARSSL_ERR_NET_WANT_READ MBEDTLS_ERR_SSL_WANT_READ
+POLARSSL_ERR_NET_WANT_WRITE MBEDTLS_ERR_SSL_WANT_WRITE
+POLARSSL_ERR_OID_BUF_TOO_SMALL MBEDTLS_ERR_OID_BUF_TOO_SMALL
+POLARSSL_ERR_OID_NOT_FOUND MBEDTLS_ERR_OID_NOT_FOUND
+POLARSSL_ERR_PADLOCK_DATA_MISALIGNED MBEDTLS_ERR_PADLOCK_DATA_MISALIGNED
+POLARSSL_ERR_PBKDF2_BAD_INPUT_DATA MBEDTLS_ERR_PBKDF2_BAD_INPUT_DATA
+POLARSSL_ERR_PEM_BAD_INPUT_DATA MBEDTLS_ERR_PEM_BAD_INPUT_DATA
+POLARSSL_ERR_PEM_FEATURE_UNAVAILABLE MBEDTLS_ERR_PEM_FEATURE_UNAVAILABLE
+POLARSSL_ERR_PEM_INVALID_DATA MBEDTLS_ERR_PEM_INVALID_DATA
+POLARSSL_ERR_PEM_INVALID_ENC_IV MBEDTLS_ERR_PEM_INVALID_ENC_IV
+POLARSSL_ERR_PEM_MALLOC_FAILED MBEDTLS_ERR_PEM_ALLOC_FAILED
+POLARSSL_ERR_PEM_NO_HEADER_FOOTER_PRESENT MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT
+POLARSSL_ERR_PEM_PASSWORD_MISMATCH MBEDTLS_ERR_PEM_PASSWORD_MISMATCH
+POLARSSL_ERR_PEM_PASSWORD_REQUIRED MBEDTLS_ERR_PEM_PASSWORD_REQUIRED
+POLARSSL_ERR_PEM_UNKNOWN_ENC_ALG MBEDTLS_ERR_PEM_UNKNOWN_ENC_ALG
+POLARSSL_ERR_PKCS12_BAD_INPUT_DATA MBEDTLS_ERR_PKCS12_BAD_INPUT_DATA
+POLARSSL_ERR_PKCS12_FEATURE_UNAVAILABLE MBEDTLS_ERR_PKCS12_FEATURE_UNAVAILABLE
+POLARSSL_ERR_PKCS12_PASSWORD_MISMATCH MBEDTLS_ERR_PKCS12_PASSWORD_MISMATCH
+POLARSSL_ERR_PKCS12_PBE_INVALID_FORMAT MBEDTLS_ERR_PKCS12_PBE_INVALID_FORMAT
+POLARSSL_ERR_PKCS5_BAD_INPUT_DATA MBEDTLS_ERR_PKCS5_BAD_INPUT_DATA
+POLARSSL_ERR_PKCS5_FEATURE_UNAVAILABLE MBEDTLS_ERR_PKCS5_FEATURE_UNAVAILABLE
+POLARSSL_ERR_PKCS5_INVALID_FORMAT MBEDTLS_ERR_PKCS5_INVALID_FORMAT
+POLARSSL_ERR_PKCS5_PASSWORD_MISMATCH MBEDTLS_ERR_PKCS5_PASSWORD_MISMATCH
+POLARSSL_ERR_PK_BAD_INPUT_DATA MBEDTLS_ERR_PK_BAD_INPUT_DATA
+POLARSSL_ERR_PK_FEATURE_UNAVAILABLE MBEDTLS_ERR_PK_FEATURE_UNAVAILABLE
+POLARSSL_ERR_PK_FILE_IO_ERROR MBEDTLS_ERR_PK_FILE_IO_ERROR
+POLARSSL_ERR_PK_INVALID_ALG MBEDTLS_ERR_PK_INVALID_ALG
+POLARSSL_ERR_PK_INVALID_PUBKEY MBEDTLS_ERR_PK_INVALID_PUBKEY
+POLARSSL_ERR_PK_KEY_INVALID_FORMAT MBEDTLS_ERR_PK_KEY_INVALID_FORMAT
+POLARSSL_ERR_PK_KEY_INVALID_VERSION MBEDTLS_ERR_PK_KEY_INVALID_VERSION
+POLARSSL_ERR_PK_MALLOC_FAILED MBEDTLS_ERR_PK_ALLOC_FAILED
+POLARSSL_ERR_PK_PASSWORD_MISMATCH MBEDTLS_ERR_PK_PASSWORD_MISMATCH
+POLARSSL_ERR_PK_PASSWORD_REQUIRED MBEDTLS_ERR_PK_PASSWORD_REQUIRED
+POLARSSL_ERR_PK_SIG_LEN_MISMATCH MBEDTLS_ERR_PK_SIG_LEN_MISMATCH
+POLARSSL_ERR_PK_TYPE_MISMATCH MBEDTLS_ERR_PK_TYPE_MISMATCH
+POLARSSL_ERR_PK_UNKNOWN_NAMED_CURVE MBEDTLS_ERR_PK_UNKNOWN_NAMED_CURVE
+POLARSSL_ERR_PK_UNKNOWN_PK_ALG MBEDTLS_ERR_PK_UNKNOWN_PK_ALG
+POLARSSL_ERR_RIPEMD160_FILE_IO_ERROR MBEDTLS_ERR_RIPEMD160_FILE_IO_ERROR
+POLARSSL_ERR_RSA_BAD_INPUT_DATA MBEDTLS_ERR_RSA_BAD_INPUT_DATA
+POLARSSL_ERR_RSA_INVALID_PADDING MBEDTLS_ERR_RSA_INVALID_PADDING
+POLARSSL_ERR_RSA_KEY_CHECK_FAILED MBEDTLS_ERR_RSA_KEY_CHECK_FAILED
+POLARSSL_ERR_RSA_KEY_GEN_FAILED MBEDTLS_ERR_RSA_KEY_GEN_FAILED
+POLARSSL_ERR_RSA_OUTPUT_TOO_LARGE MBEDTLS_ERR_RSA_OUTPUT_TOO_LARGE
+POLARSSL_ERR_RSA_PRIVATE_FAILED MBEDTLS_ERR_RSA_PRIVATE_FAILED
+POLARSSL_ERR_RSA_PUBLIC_FAILED MBEDTLS_ERR_RSA_PUBLIC_FAILED
+POLARSSL_ERR_RSA_RNG_FAILED MBEDTLS_ERR_RSA_RNG_FAILED
+POLARSSL_ERR_RSA_VERIFY_FAILED MBEDTLS_ERR_RSA_VERIFY_FAILED
+POLARSSL_ERR_SHA1_FILE_IO_ERROR MBEDTLS_ERR_SHA1_FILE_IO_ERROR
+POLARSSL_ERR_SHA256_FILE_IO_ERROR MBEDTLS_ERR_SHA256_FILE_IO_ERROR
+POLARSSL_ERR_SHA512_FILE_IO_ERROR MBEDTLS_ERR_SHA512_FILE_IO_ERROR
+POLARSSL_ERR_SSL_BAD_HS_CERTIFICATE MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE
+POLARSSL_ERR_SSL_BAD_HS_CERTIFICATE_REQUEST MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_REQUEST
+POLARSSL_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY
+POLARSSL_ERR_SSL_BAD_HS_CHANGE_CIPHER_SPEC MBEDTLS_ERR_SSL_BAD_HS_CHANGE_CIPHER_SPEC
+POLARSSL_ERR_SSL_BAD_HS_CLIENT_HELLO MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO
+POLARSSL_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE
+POLARSSL_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE_CS MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE_CS
+POLARSSL_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE_RP MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE_RP
+POLARSSL_ERR_SSL_BAD_HS_FINISHED MBEDTLS_ERR_SSL_BAD_HS_FINISHED
+POLARSSL_ERR_SSL_BAD_HS_NEW_SESSION_TICKET MBEDTLS_ERR_SSL_BAD_HS_NEW_SESSION_TICKET
+POLARSSL_ERR_SSL_BAD_HS_PROTOCOL_VERSION MBEDTLS_ERR_SSL_BAD_HS_PROTOCOL_VERSION
+POLARSSL_ERR_SSL_BAD_HS_SERVER_HELLO MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO
+POLARSSL_ERR_SSL_BAD_HS_SERVER_HELLO_DONE MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO_DONE
+POLARSSL_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE
+POLARSSL_ERR_SSL_BAD_INPUT_DATA MBEDTLS_ERR_SSL_BAD_INPUT_DATA
+POLARSSL_ERR_SSL_BUFFER_TOO_SMALL MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL
+POLARSSL_ERR_SSL_CA_CHAIN_REQUIRED MBEDTLS_ERR_SSL_CA_CHAIN_REQUIRED
+POLARSSL_ERR_SSL_CERTIFICATE_REQUIRED MBEDTLS_ERR_SSL_CERTIFICATE_REQUIRED
+POLARSSL_ERR_SSL_CERTIFICATE_TOO_LARGE MBEDTLS_ERR_SSL_CERTIFICATE_TOO_LARGE
+POLARSSL_ERR_SSL_COMPRESSION_FAILED MBEDTLS_ERR_SSL_COMPRESSION_FAILED
+POLARSSL_ERR_SSL_CONN_EOF MBEDTLS_ERR_SSL_CONN_EOF
+POLARSSL_ERR_SSL_COUNTER_WRAPPING MBEDTLS_ERR_SSL_COUNTER_WRAPPING
+POLARSSL_ERR_SSL_FATAL_ALERT_MESSAGE MBEDTLS_ERR_SSL_FATAL_ALERT_MESSAGE
+POLARSSL_ERR_SSL_FEATURE_UNAVAILABLE MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE
+POLARSSL_ERR_SSL_HELLO_VERIFY_REQUIRED MBEDTLS_ERR_SSL_HELLO_VERIFY_REQUIRED
+POLARSSL_ERR_SSL_HW_ACCEL_FAILED MBEDTLS_ERR_SSL_HW_ACCEL_FAILED
+POLARSSL_ERR_SSL_HW_ACCEL_FALLTHROUGH MBEDTLS_ERR_SSL_HW_ACCEL_FALLTHROUGH
+POLARSSL_ERR_SSL_INTERNAL_ERROR MBEDTLS_ERR_SSL_INTERNAL_ERROR
+POLARSSL_ERR_SSL_INVALID_MAC MBEDTLS_ERR_SSL_INVALID_MAC
+POLARSSL_ERR_SSL_INVALID_RECORD MBEDTLS_ERR_SSL_INVALID_RECORD
+POLARSSL_ERR_SSL_MALLOC_FAILED MBEDTLS_ERR_SSL_ALLOC_FAILED
+POLARSSL_ERR_SSL_NO_CIPHER_CHOSEN MBEDTLS_ERR_SSL_NO_CIPHER_CHOSEN
+POLARSSL_ERR_SSL_NO_CLIENT_CERTIFICATE MBEDTLS_ERR_SSL_NO_CLIENT_CERTIFICATE
+POLARSSL_ERR_SSL_NO_RNG MBEDTLS_ERR_SSL_NO_RNG
+POLARSSL_ERR_SSL_NO_USABLE_CIPHERSUITE MBEDTLS_ERR_SSL_NO_USABLE_CIPHERSUITE
+POLARSSL_ERR_SSL_PEER_CLOSE_NOTIFY MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY
+POLARSSL_ERR_SSL_PEER_VERIFY_FAILED MBEDTLS_ERR_SSL_PEER_VERIFY_FAILED
+POLARSSL_ERR_SSL_PK_TYPE_MISMATCH MBEDTLS_ERR_SSL_PK_TYPE_MISMATCH
+POLARSSL_ERR_SSL_PRIVATE_KEY_REQUIRED MBEDTLS_ERR_SSL_PRIVATE_KEY_REQUIRED
+POLARSSL_ERR_SSL_SESSION_TICKET_EXPIRED MBEDTLS_ERR_SSL_SESSION_TICKET_EXPIRED
+POLARSSL_ERR_SSL_UNEXPECTED_MESSAGE MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE
+POLARSSL_ERR_SSL_UNKNOWN_CIPHER MBEDTLS_ERR_SSL_UNKNOWN_CIPHER
+POLARSSL_ERR_SSL_UNKNOWN_IDENTITY MBEDTLS_ERR_SSL_UNKNOWN_IDENTITY
+POLARSSL_ERR_SSL_WAITING_SERVER_HELLO_RENEGO MBEDTLS_ERR_SSL_WAITING_SERVER_HELLO_RENEGO
+POLARSSL_ERR_THREADING_BAD_INPUT_DATA MBEDTLS_ERR_THREADING_BAD_INPUT_DATA
+POLARSSL_ERR_THREADING_FEATURE_UNAVAILABLE MBEDTLS_ERR_THREADING_FEATURE_UNAVAILABLE
+POLARSSL_ERR_THREADING_MUTEX_ERROR MBEDTLS_ERR_THREADING_MUTEX_ERROR
+POLARSSL_ERR_X509_BAD_INPUT_DATA MBEDTLS_ERR_X509_BAD_INPUT_DATA
+POLARSSL_ERR_X509_CERT_UNKNOWN_FORMAT MBEDTLS_ERR_X509_CERT_UNKNOWN_FORMAT
+POLARSSL_ERR_X509_CERT_VERIFY_FAILED MBEDTLS_ERR_X509_CERT_VERIFY_FAILED
+POLARSSL_ERR_X509_FEATURE_UNAVAILABLE MBEDTLS_ERR_X509_FEATURE_UNAVAILABLE
+POLARSSL_ERR_X509_FILE_IO_ERROR MBEDTLS_ERR_X509_FILE_IO_ERROR
+POLARSSL_ERR_X509_INVALID_ALG MBEDTLS_ERR_X509_INVALID_ALG
+POLARSSL_ERR_X509_INVALID_DATE MBEDTLS_ERR_X509_INVALID_DATE
+POLARSSL_ERR_X509_INVALID_EXTENSIONS MBEDTLS_ERR_X509_INVALID_EXTENSIONS
+POLARSSL_ERR_X509_INVALID_FORMAT MBEDTLS_ERR_X509_INVALID_FORMAT
+POLARSSL_ERR_X509_INVALID_NAME MBEDTLS_ERR_X509_INVALID_NAME
+POLARSSL_ERR_X509_INVALID_SERIAL MBEDTLS_ERR_X509_INVALID_SERIAL
+POLARSSL_ERR_X509_INVALID_SIGNATURE MBEDTLS_ERR_X509_INVALID_SIGNATURE
+POLARSSL_ERR_X509_INVALID_VERSION MBEDTLS_ERR_X509_INVALID_VERSION
+POLARSSL_ERR_X509_MALLOC_FAILED MBEDTLS_ERR_X509_ALLOC_FAILED
+POLARSSL_ERR_X509_SIG_MISMATCH MBEDTLS_ERR_X509_SIG_MISMATCH
+POLARSSL_ERR_X509_UNKNOWN_OID MBEDTLS_ERR_X509_UNKNOWN_OID
+POLARSSL_ERR_X509_UNKNOWN_SIG_ALG MBEDTLS_ERR_X509_UNKNOWN_SIG_ALG
+POLARSSL_ERR_X509_UNKNOWN_VERSION MBEDTLS_ERR_X509_UNKNOWN_VERSION
+POLARSSL_ERR_XTEA_INVALID_INPUT_LENGTH MBEDTLS_ERR_XTEA_INVALID_INPUT_LENGTH
+POLARSSL_FS_IO MBEDTLS_FS_IO
+POLARSSL_GCM_C MBEDTLS_GCM_C
+POLARSSL_GCM_H MBEDTLS_GCM_H
+POLARSSL_GENPRIME MBEDTLS_GENPRIME
+POLARSSL_HAVEGE_C MBEDTLS_HAVEGE_C
+POLARSSL_HAVEGE_H MBEDTLS_HAVEGE_H
+POLARSSL_HAVE_ASM MBEDTLS_HAVE_ASM
+POLARSSL_HAVE_INT16 MBEDTLS_HAVE_INT16
+POLARSSL_HAVE_INT32 MBEDTLS_HAVE_INT32
+POLARSSL_HAVE_INT64 MBEDTLS_HAVE_INT64
+POLARSSL_HAVE_INT8 MBEDTLS_HAVE_INT8
+POLARSSL_HAVE_IPV6 MBEDTLS_HAVE_IPV6
+POLARSSL_HAVE_LONGLONG MBEDTLS_HAVE_LONGLONG
+POLARSSL_HAVE_SSE2 MBEDTLS_HAVE_SSE2
+POLARSSL_HAVE_TIME MBEDTLS_HAVE_TIME
+POLARSSL_HAVE_UDBL MBEDTLS_HAVE_UDBL
+POLARSSL_HAVE_X86 MBEDTLS_HAVE_X86
+POLARSSL_HAVE_X86_64 MBEDTLS_HAVE_X86_64
+POLARSSL_HMAC_DRBG_C MBEDTLS_HMAC_DRBG_C
+POLARSSL_HMAC_DRBG_H MBEDTLS_HMAC_DRBG_H
+POLARSSL_HMAC_DRBG_MAX_INPUT MBEDTLS_HMAC_DRBG_MAX_INPUT
+POLARSSL_HMAC_DRBG_MAX_REQUEST MBEDTLS_HMAC_DRBG_MAX_REQUEST
+POLARSSL_HMAC_DRBG_MAX_SEED_INPUT MBEDTLS_HMAC_DRBG_MAX_SEED_INPUT
+POLARSSL_HMAC_DRBG_PR_OFF MBEDTLS_HMAC_DRBG_PR_OFF
+POLARSSL_HMAC_DRBG_PR_ON MBEDTLS_HMAC_DRBG_PR_ON
+POLARSSL_HMAC_DRBG_RESEED_INTERVAL MBEDTLS_HMAC_DRBG_RESEED_INTERVAL
+POLARSSL_KEY_EXCHANGE_DHE_PSK MBEDTLS_KEY_EXCHANGE_DHE_PSK
+POLARSSL_KEY_EXCHANGE_DHE_PSK_ENABLED MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED
+POLARSSL_KEY_EXCHANGE_DHE_RSA MBEDTLS_KEY_EXCHANGE_DHE_RSA
+POLARSSL_KEY_EXCHANGE_DHE_RSA_ENABLED MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED
+POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA
+POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED
+POLARSSL_KEY_EXCHANGE_ECDHE_PSK MBEDTLS_KEY_EXCHANGE_ECDHE_PSK
+POLARSSL_KEY_EXCHANGE_ECDHE_PSK_ENABLED MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED
+POLARSSL_KEY_EXCHANGE_ECDHE_RSA MBEDTLS_KEY_EXCHANGE_ECDHE_RSA
+POLARSSL_KEY_EXCHANGE_ECDHE_RSA_ENABLED MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED
+POLARSSL_KEY_EXCHANGE_ECDH_ECDSA MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA
+POLARSSL_KEY_EXCHANGE_ECDH_ECDSA_ENABLED MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED
+POLARSSL_KEY_EXCHANGE_ECDH_RSA MBEDTLS_KEY_EXCHANGE_ECDH_RSA
+POLARSSL_KEY_EXCHANGE_ECDH_RSA_ENABLED MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED
+POLARSSL_KEY_EXCHANGE_NONE MBEDTLS_KEY_EXCHANGE_NONE
+POLARSSL_KEY_EXCHANGE_PSK MBEDTLS_KEY_EXCHANGE_PSK
+POLARSSL_KEY_EXCHANGE_PSK_ENABLED MBEDTLS_KEY_EXCHANGE_PSK_ENABLED
+POLARSSL_KEY_EXCHANGE_RSA MBEDTLS_KEY_EXCHANGE_RSA
+POLARSSL_KEY_EXCHANGE_RSA_ENABLED MBEDTLS_KEY_EXCHANGE_RSA_ENABLED
+POLARSSL_KEY_EXCHANGE_RSA_PSK MBEDTLS_KEY_EXCHANGE_RSA_PSK
+POLARSSL_KEY_EXCHANGE_RSA_PSK_ENABLED MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED
+POLARSSL_KEY_EXCHANGE__SOME__ECDHE_ENABLED MBEDTLS_KEY_EXCHANGE_SOME_ECDHE_ENABLED
+POLARSSL_KEY_EXCHANGE__SOME__PSK_ENABLED MBEDTLS_KEY_EXCHANGE_SOME_PSK_ENABLED
+POLARSSL_KEY_EXCHANGE__WITH_CERT__ENABLED MBEDTLS_KEY_EXCHANGE_WITH_CERT_ENABLED
+POLARSSL_KEY_LENGTH_DES MBEDTLS_KEY_LENGTH_DES
+POLARSSL_KEY_LENGTH_DES_EDE MBEDTLS_KEY_LENGTH_DES_EDE
+POLARSSL_KEY_LENGTH_DES_EDE3 MBEDTLS_KEY_LENGTH_DES_EDE3
+POLARSSL_KEY_LENGTH_NONE MBEDTLS_KEY_LENGTH_NONE
+POLARSSL_MAX_BLOCK_LENGTH MBEDTLS_MAX_BLOCK_LENGTH
+POLARSSL_MAX_IV_LENGTH MBEDTLS_MAX_IV_LENGTH
+POLARSSL_MD2_ALT MBEDTLS_MD2_ALT
+POLARSSL_MD2_C MBEDTLS_MD2_C
+POLARSSL_MD2_H MBEDTLS_MD2_H
+POLARSSL_MD4_ALT MBEDTLS_MD4_ALT
+POLARSSL_MD4_C MBEDTLS_MD4_C
+POLARSSL_MD4_H MBEDTLS_MD4_H
+POLARSSL_MD5_ALT MBEDTLS_MD5_ALT
+POLARSSL_MD5_C MBEDTLS_MD5_C
+POLARSSL_MD5_H MBEDTLS_MD5_H
+POLARSSL_MD_C MBEDTLS_MD_C
+POLARSSL_MD_H MBEDTLS_MD_H
+POLARSSL_MD_MAX_SIZE MBEDTLS_MD_MAX_SIZE
+POLARSSL_MD_MD2 MBEDTLS_MD_MD2
+POLARSSL_MD_MD4 MBEDTLS_MD_MD4
+POLARSSL_MD_MD5 MBEDTLS_MD_MD5
+POLARSSL_MD_NONE MBEDTLS_MD_NONE
+POLARSSL_MD_RIPEMD160 MBEDTLS_MD_RIPEMD160
+POLARSSL_MD_SHA1 MBEDTLS_MD_SHA1
+POLARSSL_MD_SHA224 MBEDTLS_MD_SHA224
+POLARSSL_MD_SHA256 MBEDTLS_MD_SHA256
+POLARSSL_MD_SHA384 MBEDTLS_MD_SHA384
+POLARSSL_MD_SHA512 MBEDTLS_MD_SHA512
+POLARSSL_MD_WRAP_H MBEDTLS_MD_WRAP_H
+POLARSSL_MEMORY_ALIGN_MULTIPLE MBEDTLS_MEMORY_ALIGN_MULTIPLE
+POLARSSL_MEMORY_BACKTRACE MBEDTLS_MEMORY_BACKTRACE
+POLARSSL_MEMORY_BUFFER_ALLOC_C MBEDTLS_MEMORY_BUFFER_ALLOC_C
+POLARSSL_MEMORY_BUFFER_ALLOC_H MBEDTLS_MEMORY_BUFFER_ALLOC_H
+POLARSSL_MEMORY_C MBEDTLS_MEMORY_C
+POLARSSL_MEMORY_DEBUG MBEDTLS_MEMORY_DEBUG
+POLARSSL_MEMORY_H MBEDTLS_MEMORY_H
+POLARSSL_MODE_CBC MBEDTLS_MODE_CBC
+POLARSSL_MODE_CCM MBEDTLS_MODE_CCM
+POLARSSL_MODE_CFB MBEDTLS_MODE_CFB
+POLARSSL_MODE_CTR MBEDTLS_MODE_CTR
+POLARSSL_MODE_ECB MBEDTLS_MODE_ECB
+POLARSSL_MODE_GCM MBEDTLS_MODE_GCM
+POLARSSL_MODE_NONE MBEDTLS_MODE_NONE
+POLARSSL_MODE_OFB MBEDTLS_MODE_OFB
+POLARSSL_MODE_STREAM MBEDTLS_MODE_STREAM
+POLARSSL_MPI_MAX_BITS MBEDTLS_MPI_MAX_BITS
+POLARSSL_MPI_MAX_BITS_SCALE100 MBEDTLS_MPI_MAX_BITS_SCALE100
+POLARSSL_MPI_MAX_LIMBS MBEDTLS_MPI_MAX_LIMBS
+POLARSSL_MPI_MAX_SIZE MBEDTLS_MPI_MAX_SIZE
+POLARSSL_MPI_RW_BUFFER_SIZE MBEDTLS_MPI_RW_BUFFER_SIZE
+POLARSSL_MPI_WINDOW_SIZE MBEDTLS_MPI_WINDOW_SIZE
+POLARSSL_NET_C MBEDTLS_NET_C
+POLARSSL_NET_H MBEDTLS_NET_H
+POLARSSL_NET_LISTEN_BACKLOG MBEDTLS_NET_LISTEN_BACKLOG
+POLARSSL_NO_DEFAULT_ENTROPY_SOURCES MBEDTLS_NO_DEFAULT_ENTROPY_SOURCES
+POLARSSL_NO_PLATFORM_ENTROPY MBEDTLS_NO_PLATFORM_ENTROPY
+POLARSSL_OID_C MBEDTLS_OID_C
+POLARSSL_OID_H MBEDTLS_OID_H
+POLARSSL_OPERATION_NONE MBEDTLS_OPERATION_NONE
+POLARSSL_PADDING_NONE MBEDTLS_PADDING_NONE
+POLARSSL_PADDING_ONE_AND_ZEROS MBEDTLS_PADDING_ONE_AND_ZEROS
+POLARSSL_PADDING_PKCS7 MBEDTLS_PADDING_PKCS7
+POLARSSL_PADDING_ZEROS MBEDTLS_PADDING_ZEROS
+POLARSSL_PADDING_ZEROS_AND_LEN MBEDTLS_PADDING_ZEROS_AND_LEN
+POLARSSL_PADLOCK_C MBEDTLS_PADLOCK_C
+POLARSSL_PADLOCK_H MBEDTLS_PADLOCK_H
+POLARSSL_PBKDF2_C MBEDTLS_PBKDF2_C
+POLARSSL_PBKDF2_H MBEDTLS_PBKDF2_H
+POLARSSL_PEM_H MBEDTLS_PEM_H
+POLARSSL_PEM_PARSE_C MBEDTLS_PEM_PARSE_C
+POLARSSL_PEM_WRITE_C MBEDTLS_PEM_WRITE_C
+POLARSSL_PKCS11_C MBEDTLS_PKCS11_C
+POLARSSL_PKCS11_H MBEDTLS_PKCS11_H
+POLARSSL_PKCS12_C MBEDTLS_PKCS12_C
+POLARSSL_PKCS12_H MBEDTLS_PKCS12_H
+POLARSSL_PKCS1_V15 MBEDTLS_PKCS1_V15
+POLARSSL_PKCS1_V21 MBEDTLS_PKCS1_V21
+POLARSSL_PKCS5_C MBEDTLS_PKCS5_C
+POLARSSL_PKCS5_H MBEDTLS_PKCS5_H
+POLARSSL_PK_C MBEDTLS_PK_C
+POLARSSL_PK_DEBUG_ECP MBEDTLS_PK_DEBUG_ECP
+POLARSSL_PK_DEBUG_MAX_ITEMS MBEDTLS_PK_DEBUG_MAX_ITEMS
+POLARSSL_PK_DEBUG_MPI MBEDTLS_PK_DEBUG_MPI
+POLARSSL_PK_DEBUG_NONE MBEDTLS_PK_DEBUG_NONE
+POLARSSL_PK_ECDSA MBEDTLS_PK_ECDSA
+POLARSSL_PK_ECKEY MBEDTLS_PK_ECKEY
+POLARSSL_PK_ECKEY_DH MBEDTLS_PK_ECKEY_DH
+POLARSSL_PK_H MBEDTLS_PK_H
+POLARSSL_PK_NONE MBEDTLS_PK_NONE
+POLARSSL_PK_PARSE_C MBEDTLS_PK_PARSE_C
+POLARSSL_PK_PARSE_EC_EXTENDED MBEDTLS_PK_PARSE_EC_EXTENDED
+POLARSSL_PK_RSA MBEDTLS_PK_RSA
+POLARSSL_PK_RSASSA_PSS MBEDTLS_PK_RSASSA_PSS
+POLARSSL_PK_RSA_ALT MBEDTLS_PK_RSA_ALT
+POLARSSL_PK_WRAP_H MBEDTLS_PK_WRAP_H
+POLARSSL_PK_WRITE_C MBEDTLS_PK_WRITE_C
+POLARSSL_PLATFORM_C MBEDTLS_PLATFORM_C
+POLARSSL_PLATFORM_EXIT_ALT MBEDTLS_PLATFORM_EXIT_ALT
+POLARSSL_PLATFORM_EXIT_MACRO MBEDTLS_PLATFORM_EXIT_MACRO
+POLARSSL_PLATFORM_FPRINTF_ALT MBEDTLS_PLATFORM_FPRINTF_ALT
+POLARSSL_PLATFORM_FPRINTF_MACRO MBEDTLS_PLATFORM_FPRINTF_MACRO
+POLARSSL_PLATFORM_FREE_MACRO MBEDTLS_PLATFORM_FREE_MACRO
+POLARSSL_PLATFORM_H MBEDTLS_PLATFORM_H
+POLARSSL_PLATFORM_MALLOC_MACRO MBEDTLS_PLATFORM_ALLOC_MACRO
+POLARSSL_PLATFORM_MEMORY MBEDTLS_PLATFORM_MEMORY
+POLARSSL_PLATFORM_NO_STD_FUNCTIONS MBEDTLS_PLATFORM_NO_STD_FUNCTIONS
+POLARSSL_PLATFORM_PRINTF_ALT MBEDTLS_PLATFORM_PRINTF_ALT
+POLARSSL_PLATFORM_PRINTF_MACRO MBEDTLS_PLATFORM_PRINTF_MACRO
+POLARSSL_PLATFORM_SNPRINTF_ALT MBEDTLS_PLATFORM_SNPRINTF_ALT
+POLARSSL_PLATFORM_SNPRINTF_MACRO MBEDTLS_PLATFORM_SNPRINTF_MACRO
+POLARSSL_PLATFORM_STD_EXIT MBEDTLS_PLATFORM_STD_EXIT
+POLARSSL_PLATFORM_STD_FPRINTF MBEDTLS_PLATFORM_STD_FPRINTF
+POLARSSL_PLATFORM_STD_FREE MBEDTLS_PLATFORM_STD_FREE
+POLARSSL_PLATFORM_STD_MALLOC MBEDTLS_PLATFORM_STD_CALLOC
+POLARSSL_PLATFORM_STD_MEM_HDR MBEDTLS_PLATFORM_STD_MEM_HDR
+POLARSSL_PLATFORM_STD_PRINTF MBEDTLS_PLATFORM_STD_PRINTF
+POLARSSL_PLATFORM_STD_SNPRINTF MBEDTLS_PLATFORM_STD_SNPRINTF
+POLARSSL_PREMASTER_SIZE MBEDTLS_PREMASTER_SIZE
+POLARSSL_PSK_MAX_LEN MBEDTLS_PSK_MAX_LEN
+POLARSSL_REMOVE_ARC4_CIPHERSUITES MBEDTLS_REMOVE_ARC4_CIPHERSUITES
+POLARSSL_RIPEMD160_ALT MBEDTLS_RIPEMD160_ALT
+POLARSSL_RIPEMD160_C MBEDTLS_RIPEMD160_C
+POLARSSL_RIPEMD160_H MBEDTLS_RIPEMD160_H
+POLARSSL_RSA_C MBEDTLS_RSA_C
+POLARSSL_RSA_H MBEDTLS_RSA_H
+POLARSSL_RSA_NO_CRT MBEDTLS_RSA_NO_CRT
+POLARSSL_SELF_TEST MBEDTLS_SELF_TEST
+POLARSSL_SHA1_ALT MBEDTLS_SHA1_ALT
+POLARSSL_SHA1_C MBEDTLS_SHA1_C
+POLARSSL_SHA1_H MBEDTLS_SHA1_H
+POLARSSL_SHA256_ALT MBEDTLS_SHA256_ALT
+POLARSSL_SHA256_C MBEDTLS_SHA256_C
+POLARSSL_SHA256_H MBEDTLS_SHA256_H
+POLARSSL_SHA512_ALT MBEDTLS_SHA512_ALT
+POLARSSL_SHA512_C MBEDTLS_SHA512_C
+POLARSSL_SHA512_H MBEDTLS_SHA512_H
+POLARSSL_SSL_AEAD_RANDOM_IV MBEDTLS_SSL_AEAD_RANDOM_IV
+POLARSSL_SSL_ALERT_MESSAGES MBEDTLS_SSL_ALERT_MESSAGES
+POLARSSL_SSL_ALPN MBEDTLS_SSL_ALPN
+POLARSSL_SSL_CACHE_C MBEDTLS_SSL_CACHE_C
+POLARSSL_SSL_CACHE_H MBEDTLS_SSL_CACHE_H
+POLARSSL_SSL_CBC_RECORD_SPLITTING MBEDTLS_SSL_CBC_RECORD_SPLITTING
+POLARSSL_SSL_CIPHERSUITES_H MBEDTLS_SSL_CIPHERSUITES_H
+POLARSSL_SSL_CLI_C MBEDTLS_SSL_CLI_C
+POLARSSL_SSL_COOKIE_C MBEDTLS_SSL_COOKIE_C
+POLARSSL_SSL_COOKIE_H MBEDTLS_SSL_COOKIE_H
+POLARSSL_SSL_COOKIE_TIMEOUT MBEDTLS_SSL_COOKIE_TIMEOUT
+POLARSSL_SSL_DEBUG_ALL MBEDTLS_SSL_DEBUG_ALL
+POLARSSL_SSL_DISABLE_RENEGOTIATION MBEDTLS_SSL_DISABLE_RENEGOTIATION
+POLARSSL_SSL_DTLS_ANTI_REPLAY MBEDTLS_SSL_DTLS_ANTI_REPLAY
+POLARSSL_SSL_DTLS_BADMAC_LIMIT MBEDTLS_SSL_DTLS_BADMAC_LIMIT
+POLARSSL_SSL_DTLS_HELLO_VERIFY MBEDTLS_SSL_DTLS_HELLO_VERIFY
+POLARSSL_SSL_ENCRYPT_THEN_MAC MBEDTLS_SSL_ENCRYPT_THEN_MAC
+POLARSSL_SSL_EXTENDED_MASTER_SECRET MBEDTLS_SSL_EXTENDED_MASTER_SECRET
+POLARSSL_SSL_FALLBACK_SCSV MBEDTLS_SSL_FALLBACK_SCSV
+POLARSSL_SSL_H MBEDTLS_SSL_H
+POLARSSL_SSL_HW_RECORD_ACCEL MBEDTLS_SSL_HW_RECORD_ACCEL
+POLARSSL_SSL_MAX_FRAGMENT_LENGTH MBEDTLS_SSL_MAX_FRAGMENT_LENGTH
+POLARSSL_SSL_PROTO_DTLS MBEDTLS_SSL_PROTO_DTLS
+POLARSSL_SSL_PROTO_SSL3 MBEDTLS_SSL_PROTO_SSL3
+POLARSSL_SSL_PROTO_TLS1 MBEDTLS_SSL_PROTO_TLS1
+POLARSSL_SSL_PROTO_TLS1_1 MBEDTLS_SSL_PROTO_TLS1_1
+POLARSSL_SSL_PROTO_TLS1_2 MBEDTLS_SSL_PROTO_TLS1_2
+POLARSSL_SSL_RENEGOTIATION MBEDTLS_SSL_RENEGOTIATION
+POLARSSL_SSL_SERVER_NAME_INDICATION MBEDTLS_SSL_SERVER_NAME_INDICATION
+POLARSSL_SSL_SESSION_TICKETS MBEDTLS_SSL_SESSION_TICKETS
+POLARSSL_SSL_SRV_C MBEDTLS_SSL_SRV_C
+POLARSSL_SSL_SRV_RESPECT_CLIENT_PREFERENCE MBEDTLS_SSL_SRV_RESPECT_CLIENT_PREFERENCE
+POLARSSL_SSL_SRV_SUPPORT_SSLV2_CLIENT_HELLO MBEDTLS_SSL_SRV_SUPPORT_SSLV2_CLIENT_HELLO
+POLARSSL_SSL_TLS_C MBEDTLS_SSL_TLS_C
+POLARSSL_SSL_TRUNCATED_HMAC MBEDTLS_SSL_TRUNCATED_HMAC
+POLARSSL_THREADING_ALT MBEDTLS_THREADING_ALT
+POLARSSL_THREADING_C MBEDTLS_THREADING_C
+POLARSSL_THREADING_H MBEDTLS_THREADING_H
+POLARSSL_THREADING_IMPL MBEDTLS_THREADING_IMPL
+POLARSSL_THREADING_PTHREAD MBEDTLS_THREADING_PTHREAD
+POLARSSL_TIMING_ALT MBEDTLS_TIMING_ALT
+POLARSSL_TIMING_C MBEDTLS_TIMING_C
+POLARSSL_TIMING_H MBEDTLS_TIMING_H
+POLARSSL_VERSION_C MBEDTLS_VERSION_C
+POLARSSL_VERSION_FEATURES MBEDTLS_VERSION_FEATURES
+POLARSSL_VERSION_H MBEDTLS_VERSION_H
+POLARSSL_VERSION_MAJOR MBEDTLS_VERSION_MAJOR
+POLARSSL_VERSION_MINOR MBEDTLS_VERSION_MINOR
+POLARSSL_VERSION_NUMBER MBEDTLS_VERSION_NUMBER
+POLARSSL_VERSION_PATCH MBEDTLS_VERSION_PATCH
+POLARSSL_VERSION_STRING MBEDTLS_VERSION_STRING
+POLARSSL_VERSION_STRING_FULL MBEDTLS_VERSION_STRING_FULL
+POLARSSL_X509_ALLOW_EXTENSIONS_NON_V3 MBEDTLS_X509_ALLOW_EXTENSIONS_NON_V3
+POLARSSL_X509_ALLOW_UNSUPPORTED_CRITICAL_EXTENSION MBEDTLS_X509_ALLOW_UNSUPPORTED_CRITICAL_EXTENSION
+POLARSSL_X509_CHECK_EXTENDED_KEY_USAGE MBEDTLS_X509_CHECK_EXTENDED_KEY_USAGE
+POLARSSL_X509_CHECK_KEY_USAGE MBEDTLS_X509_CHECK_KEY_USAGE
+POLARSSL_X509_CREATE_C MBEDTLS_X509_CREATE_C
+POLARSSL_X509_CRL_H MBEDTLS_X509_CRL_H
+POLARSSL_X509_CRL_PARSE_C MBEDTLS_X509_CRL_PARSE_C
+POLARSSL_X509_CRT_H MBEDTLS_X509_CRT_H
+POLARSSL_X509_CRT_PARSE_C MBEDTLS_X509_CRT_PARSE_C
+POLARSSL_X509_CRT_WRITE_C MBEDTLS_X509_CRT_WRITE_C
+POLARSSL_X509_CSR_H MBEDTLS_X509_CSR_H
+POLARSSL_X509_CSR_PARSE_C MBEDTLS_X509_CSR_PARSE_C
+POLARSSL_X509_CSR_WRITE_C MBEDTLS_X509_CSR_WRITE_C
+POLARSSL_X509_H MBEDTLS_X509_H
+POLARSSL_X509_MAX_INTERMEDIATE_CA MBEDTLS_X509_MAX_INTERMEDIATE_CA
+POLARSSL_X509_RSASSA_PSS_SUPPORT MBEDTLS_X509_RSASSA_PSS_SUPPORT
+POLARSSL_X509_USE_C MBEDTLS_X509_USE_C
+POLARSSL_XTEA_ALT MBEDTLS_XTEA_ALT
+POLARSSL_XTEA_C MBEDTLS_XTEA_C
+POLARSSL_XTEA_H MBEDTLS_XTEA_H
+POLARSSL_ZLIB_SUPPORT MBEDTLS_ZLIB_SUPPORT
+RSA_CRYPT MBEDTLS_RSA_CRYPT
+RSA_PKCS_V15 MBEDTLS_RSA_PKCS_V15
+RSA_PKCS_V21 MBEDTLS_RSA_PKCS_V21
+RSA_PRIVATE MBEDTLS_RSA_PRIVATE
+RSA_PUBLIC MBEDTLS_RSA_PUBLIC
+RSA_SALT_LEN_ANY MBEDTLS_RSA_SALT_LEN_ANY
+RSA_SIGN MBEDTLS_RSA_SIGN
+SSL_ALERT_LEVEL_FATAL MBEDTLS_SSL_ALERT_LEVEL_FATAL
+SSL_ALERT_LEVEL_WARNING MBEDTLS_SSL_ALERT_LEVEL_WARNING
+SSL_ALERT_MSG_ACCESS_DENIED MBEDTLS_SSL_ALERT_MSG_ACCESS_DENIED
+SSL_ALERT_MSG_BAD_CERT MBEDTLS_SSL_ALERT_MSG_BAD_CERT
+SSL_ALERT_MSG_BAD_RECORD_MAC MBEDTLS_SSL_ALERT_MSG_BAD_RECORD_MAC
+SSL_ALERT_MSG_CERT_EXPIRED MBEDTLS_SSL_ALERT_MSG_CERT_EXPIRED
+SSL_ALERT_MSG_CERT_REVOKED MBEDTLS_SSL_ALERT_MSG_CERT_REVOKED
+SSL_ALERT_MSG_CERT_UNKNOWN MBEDTLS_SSL_ALERT_MSG_CERT_UNKNOWN
+SSL_ALERT_MSG_CLOSE_NOTIFY MBEDTLS_SSL_ALERT_MSG_CLOSE_NOTIFY
+SSL_ALERT_MSG_DECODE_ERROR MBEDTLS_SSL_ALERT_MSG_DECODE_ERROR
+SSL_ALERT_MSG_DECOMPRESSION_FAILURE MBEDTLS_SSL_ALERT_MSG_DECOMPRESSION_FAILURE
+SSL_ALERT_MSG_DECRYPTION_FAILED MBEDTLS_SSL_ALERT_MSG_DECRYPTION_FAILED
+SSL_ALERT_MSG_DECRYPT_ERROR MBEDTLS_SSL_ALERT_MSG_DECRYPT_ERROR
+SSL_ALERT_MSG_EXPORT_RESTRICTION MBEDTLS_SSL_ALERT_MSG_EXPORT_RESTRICTION
+SSL_ALERT_MSG_HANDSHAKE_FAILURE MBEDTLS_SSL_ALERT_MSG_HANDSHAKE_FAILURE
+SSL_ALERT_MSG_ILLEGAL_PARAMETER MBEDTLS_SSL_ALERT_MSG_ILLEGAL_PARAMETER
+SSL_ALERT_MSG_INAPROPRIATE_FALLBACK MBEDTLS_SSL_ALERT_MSG_INAPROPRIATE_FALLBACK
+SSL_ALERT_MSG_INSUFFICIENT_SECURITY MBEDTLS_SSL_ALERT_MSG_INSUFFICIENT_SECURITY
+SSL_ALERT_MSG_INTERNAL_ERROR MBEDTLS_SSL_ALERT_MSG_INTERNAL_ERROR
+SSL_ALERT_MSG_NO_APPLICATION_PROTOCOL MBEDTLS_SSL_ALERT_MSG_NO_APPLICATION_PROTOCOL
+SSL_ALERT_MSG_NO_CERT MBEDTLS_SSL_ALERT_MSG_NO_CERT
+SSL_ALERT_MSG_NO_RENEGOTIATION MBEDTLS_SSL_ALERT_MSG_NO_RENEGOTIATION
+SSL_ALERT_MSG_PROTOCOL_VERSION MBEDTLS_SSL_ALERT_MSG_PROTOCOL_VERSION
+SSL_ALERT_MSG_RECORD_OVERFLOW MBEDTLS_SSL_ALERT_MSG_RECORD_OVERFLOW
+SSL_ALERT_MSG_UNEXPECTED_MESSAGE MBEDTLS_SSL_ALERT_MSG_UNEXPECTED_MESSAGE
+SSL_ALERT_MSG_UNKNOWN_CA MBEDTLS_SSL_ALERT_MSG_UNKNOWN_CA
+SSL_ALERT_MSG_UNKNOWN_PSK_IDENTITY MBEDTLS_SSL_ALERT_MSG_UNKNOWN_PSK_IDENTITY
+SSL_ALERT_MSG_UNRECOGNIZED_NAME MBEDTLS_SSL_ALERT_MSG_UNRECOGNIZED_NAME
+SSL_ALERT_MSG_UNSUPPORTED_CERT MBEDTLS_SSL_ALERT_MSG_UNSUPPORTED_CERT
+SSL_ALERT_MSG_UNSUPPORTED_EXT MBEDTLS_SSL_ALERT_MSG_UNSUPPORTED_EXT
+SSL_ALERT_MSG_USER_CANCELED MBEDTLS_SSL_ALERT_MSG_USER_CANCELED
+SSL_ANTI_REPLAY_DISABLED MBEDTLS_SSL_ANTI_REPLAY_DISABLED
+SSL_ANTI_REPLAY_ENABLED MBEDTLS_SSL_ANTI_REPLAY_ENABLED
+SSL_ARC4_DISABLED MBEDTLS_SSL_ARC4_DISABLED
+SSL_ARC4_ENABLED MBEDTLS_SSL_ARC4_ENABLED
+SSL_BUFFER_LEN MBEDTLS_SSL_BUFFER_LEN
+SSL_CACHE_DEFAULT_MAX_ENTRIES MBEDTLS_SSL_CACHE_DEFAULT_MAX_ENTRIES
+SSL_CACHE_DEFAULT_TIMEOUT MBEDTLS_SSL_CACHE_DEFAULT_TIMEOUT
+SSL_CBC_RECORD_SPLITTING_DISABLED MBEDTLS_SSL_CBC_RECORD_SPLITTING_DISABLED
+SSL_CBC_RECORD_SPLITTING_ENABLED MBEDTLS_SSL_CBC_RECORD_SPLITTING_ENABLED
+SSL_CERTIFICATE_REQUEST MBEDTLS_SSL_CERTIFICATE_REQUEST
+SSL_CERTIFICATE_VERIFY MBEDTLS_SSL_CERTIFICATE_VERIFY
+SSL_CERT_TYPE_ECDSA_SIGN MBEDTLS_SSL_CERT_TYPE_ECDSA_SIGN
+SSL_CERT_TYPE_RSA_SIGN MBEDTLS_SSL_CERT_TYPE_RSA_SIGN
+SSL_CHANNEL_INBOUND MBEDTLS_SSL_CHANNEL_INBOUND
+SSL_CHANNEL_OUTBOUND MBEDTLS_SSL_CHANNEL_OUTBOUND
+SSL_CIPHERSUITES MBEDTLS_SSL_CIPHERSUITES
+SSL_CLIENT_CERTIFICATE MBEDTLS_SSL_CLIENT_CERTIFICATE
+SSL_CLIENT_CHANGE_CIPHER_SPEC MBEDTLS_SSL_CLIENT_CHANGE_CIPHER_SPEC
+SSL_CLIENT_FINISHED MBEDTLS_SSL_CLIENT_FINISHED
+SSL_CLIENT_HELLO MBEDTLS_SSL_CLIENT_HELLO
+SSL_CLIENT_KEY_EXCHANGE MBEDTLS_SSL_CLIENT_KEY_EXCHANGE
+SSL_COMPRESSION_ADD MBEDTLS_SSL_COMPRESSION_ADD
+SSL_COMPRESS_DEFLATE MBEDTLS_SSL_COMPRESS_DEFLATE
+SSL_COMPRESS_NULL MBEDTLS_SSL_COMPRESS_NULL
+SSL_DEBUG_BUF MBEDTLS_SSL_DEBUG_BUF
+SSL_DEBUG_CRT MBEDTLS_SSL_DEBUG_CRT
+SSL_DEBUG_ECP MBEDTLS_SSL_DEBUG_ECP
+SSL_DEBUG_MPI MBEDTLS_SSL_DEBUG_MPI
+SSL_DEBUG_MSG MBEDTLS_SSL_DEBUG_MSG
+SSL_DEBUG_RET MBEDTLS_SSL_DEBUG_RET
+SSL_DEFAULT_TICKET_LIFETIME MBEDTLS_SSL_DEFAULT_TICKET_LIFETIME
+SSL_DTLS_TIMEOUT_DFL_MAX MBEDTLS_SSL_DTLS_TIMEOUT_DFL_MAX
+SSL_DTLS_TIMEOUT_DFL_MIN MBEDTLS_SSL_DTLS_TIMEOUT_DFL_MIN
+SSL_EMPTY_RENEGOTIATION_INFO MBEDTLS_SSL_EMPTY_RENEGOTIATION_INFO
+SSL_ETM_DISABLED MBEDTLS_SSL_ETM_DISABLED
+SSL_ETM_ENABLED MBEDTLS_SSL_ETM_ENABLED
+SSL_EXTENDED_MS_DISABLED MBEDTLS_SSL_EXTENDED_MS_DISABLED
+SSL_EXTENDED_MS_ENABLED MBEDTLS_SSL_EXTENDED_MS_ENABLED
+SSL_FALLBACK_SCSV MBEDTLS_SSL_FALLBACK_SCSV
+SSL_FLUSH_BUFFERS MBEDTLS_SSL_FLUSH_BUFFERS
+SSL_HANDSHAKE_OVER MBEDTLS_SSL_HANDSHAKE_OVER
+SSL_HANDSHAKE_WRAPUP MBEDTLS_SSL_HANDSHAKE_WRAPUP
+SSL_HASH_MD5 MBEDTLS_SSL_HASH_MD5
+SSL_HASH_NONE MBEDTLS_SSL_HASH_NONE
+SSL_HASH_SHA1 MBEDTLS_SSL_HASH_SHA1
+SSL_HASH_SHA224 MBEDTLS_SSL_HASH_SHA224
+SSL_HASH_SHA256 MBEDTLS_SSL_HASH_SHA256
+SSL_HASH_SHA384 MBEDTLS_SSL_HASH_SHA384
+SSL_HASH_SHA512 MBEDTLS_SSL_HASH_SHA512
+SSL_HELLO_REQUEST MBEDTLS_SSL_HELLO_REQUEST
+SSL_HS_CERTIFICATE MBEDTLS_SSL_HS_CERTIFICATE
+SSL_HS_CERTIFICATE_REQUEST MBEDTLS_SSL_HS_CERTIFICATE_REQUEST
+SSL_HS_CERTIFICATE_VERIFY MBEDTLS_SSL_HS_CERTIFICATE_VERIFY
+SSL_HS_CLIENT_HELLO MBEDTLS_SSL_HS_CLIENT_HELLO
+SSL_HS_CLIENT_KEY_EXCHANGE MBEDTLS_SSL_HS_CLIENT_KEY_EXCHANGE
+SSL_HS_FINISHED MBEDTLS_SSL_HS_FINISHED
+SSL_HS_HELLO_REQUEST MBEDTLS_SSL_HS_HELLO_REQUEST
+SSL_HS_HELLO_VERIFY_REQUEST MBEDTLS_SSL_HS_HELLO_VERIFY_REQUEST
+SSL_HS_NEW_SESSION_TICKET MBEDTLS_SSL_HS_NEW_SESSION_TICKET
+SSL_HS_SERVER_HELLO MBEDTLS_SSL_HS_SERVER_HELLO
+SSL_HS_SERVER_HELLO_DONE MBEDTLS_SSL_HS_SERVER_HELLO_DONE
+SSL_HS_SERVER_KEY_EXCHANGE MBEDTLS_SSL_HS_SERVER_KEY_EXCHANGE
+SSL_INITIAL_HANDSHAKE MBEDTLS_SSL_INITIAL_HANDSHAKE
+SSL_IS_CLIENT MBEDTLS_SSL_IS_CLIENT
+SSL_IS_FALLBACK MBEDTLS_SSL_IS_FALLBACK
+SSL_IS_NOT_FALLBACK MBEDTLS_SSL_IS_NOT_FALLBACK
+SSL_IS_SERVER MBEDTLS_SSL_IS_SERVER
+SSL_LEGACY_ALLOW_RENEGOTIATION MBEDTLS_SSL_LEGACY_ALLOW_RENEGOTIATION
+SSL_LEGACY_BREAK_HANDSHAKE MBEDTLS_SSL_LEGACY_BREAK_HANDSHAKE
+SSL_LEGACY_NO_RENEGOTIATION MBEDTLS_SSL_LEGACY_NO_RENEGOTIATION
+SSL_LEGACY_RENEGOTIATION MBEDTLS_SSL_LEGACY_RENEGOTIATION
+SSL_MAC_ADD MBEDTLS_SSL_MAC_ADD
+SSL_MAJOR_VERSION_3 MBEDTLS_SSL_MAJOR_VERSION_3
+SSL_MAX_CONTENT_LEN MBEDTLS_SSL_MAX_CONTENT_LEN
+SSL_MAX_FRAG_LEN_1024 MBEDTLS_SSL_MAX_FRAG_LEN_1024
+SSL_MAX_FRAG_LEN_2048 MBEDTLS_SSL_MAX_FRAG_LEN_2048
+SSL_MAX_FRAG_LEN_4096 MBEDTLS_SSL_MAX_FRAG_LEN_4096
+SSL_MAX_FRAG_LEN_512 MBEDTLS_SSL_MAX_FRAG_LEN_512
+SSL_MAX_FRAG_LEN_INVALID MBEDTLS_SSL_MAX_FRAG_LEN_INVALID
+SSL_MAX_FRAG_LEN_NONE MBEDTLS_SSL_MAX_FRAG_LEN_NONE
+SSL_MAX_MAJOR_VERSION MBEDTLS_SSL_MAX_MAJOR_VERSION
+SSL_MAX_MINOR_VERSION MBEDTLS_SSL_MAX_MINOR_VERSION
+SSL_MINOR_VERSION_0 MBEDTLS_SSL_MINOR_VERSION_0
+SSL_MINOR_VERSION_1 MBEDTLS_SSL_MINOR_VERSION_1
+SSL_MINOR_VERSION_2 MBEDTLS_SSL_MINOR_VERSION_2
+SSL_MINOR_VERSION_3 MBEDTLS_SSL_MINOR_VERSION_3
+SSL_MIN_MAJOR_VERSION MBEDTLS_SSL_MIN_MAJOR_VERSION
+SSL_MIN_MINOR_VERSION MBEDTLS_SSL_MIN_MINOR_VERSION
+SSL_MSG_ALERT MBEDTLS_SSL_MSG_ALERT
+SSL_MSG_APPLICATION_DATA MBEDTLS_SSL_MSG_APPLICATION_DATA
+SSL_MSG_CHANGE_CIPHER_SPEC MBEDTLS_SSL_MSG_CHANGE_CIPHER_SPEC
+SSL_MSG_HANDSHAKE MBEDTLS_SSL_MSG_HANDSHAKE
+SSL_PADDING_ADD MBEDTLS_SSL_PADDING_ADD
+SSL_RENEGOTIATION MBEDTLS_SSL_RENEGOTIATION
+SSL_RENEGOTIATION_DISABLED MBEDTLS_SSL_RENEGOTIATION_DISABLED
+SSL_RENEGOTIATION_DONE MBEDTLS_SSL_RENEGOTIATION_DONE
+SSL_RENEGOTIATION_ENABLED MBEDTLS_SSL_RENEGOTIATION_ENABLED
+SSL_RENEGOTIATION_NOT_ENFORCED MBEDTLS_SSL_RENEGOTIATION_NOT_ENFORCED
+SSL_RENEGOTIATION_PENDING MBEDTLS_SSL_RENEGOTIATION_PENDING
+SSL_RENEGO_MAX_RECORDS_DEFAULT MBEDTLS_SSL_RENEGO_MAX_RECORDS_DEFAULT
+SSL_RETRANS_FINISHED MBEDTLS_SSL_RETRANS_FINISHED
+SSL_RETRANS_PREPARING MBEDTLS_SSL_RETRANS_PREPARING
+SSL_RETRANS_SENDING MBEDTLS_SSL_RETRANS_SENDING
+SSL_RETRANS_WAITING MBEDTLS_SSL_RETRANS_WAITING
+SSL_SECURE_RENEGOTIATION MBEDTLS_SSL_SECURE_RENEGOTIATION
+SSL_SERVER_CERTIFICATE MBEDTLS_SSL_SERVER_CERTIFICATE
+SSL_SERVER_CHANGE_CIPHER_SPEC MBEDTLS_SSL_SERVER_CHANGE_CIPHER_SPEC
+SSL_SERVER_FINISHED MBEDTLS_SSL_SERVER_FINISHED
+SSL_SERVER_HELLO MBEDTLS_SSL_SERVER_HELLO
+SSL_SERVER_HELLO_DONE MBEDTLS_SSL_SERVER_HELLO_DONE
+SSL_SERVER_HELLO_VERIFY_REQUEST_SENT MBEDTLS_SSL_SERVER_HELLO_VERIFY_REQUEST_SENT
+SSL_SERVER_KEY_EXCHANGE MBEDTLS_SSL_SERVER_KEY_EXCHANGE
+SSL_SERVER_NEW_SESSION_TICKET MBEDTLS_SSL_SERVER_NEW_SESSION_TICKET
+SSL_SESSION_TICKETS_DISABLED MBEDTLS_SSL_SESSION_TICKETS_DISABLED
+SSL_SESSION_TICKETS_ENABLED MBEDTLS_SSL_SESSION_TICKETS_ENABLED
+SSL_SIG_ANON MBEDTLS_SSL_SIG_ANON
+SSL_SIG_ECDSA MBEDTLS_SSL_SIG_ECDSA
+SSL_SIG_RSA MBEDTLS_SSL_SIG_RSA
+SSL_TRANSPORT_DATAGRAM MBEDTLS_SSL_TRANSPORT_DATAGRAM
+SSL_TRANSPORT_STREAM MBEDTLS_SSL_TRANSPORT_STREAM
+SSL_TRUNCATED_HMAC_LEN MBEDTLS_SSL_TRUNCATED_HMAC_LEN
+SSL_TRUNC_HMAC_DISABLED MBEDTLS_SSL_TRUNC_HMAC_DISABLED
+SSL_TRUNC_HMAC_ENABLED MBEDTLS_SSL_TRUNC_HMAC_ENABLED
+SSL_VERIFY_DATA_MAX_LEN MBEDTLS_SSL_VERIFY_DATA_MAX_LEN
+SSL_VERIFY_NONE MBEDTLS_SSL_VERIFY_NONE
+SSL_VERIFY_OPTIONAL MBEDTLS_SSL_VERIFY_OPTIONAL
+SSL_VERIFY_REQUIRED MBEDTLS_SSL_VERIFY_REQUIRED
+TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA MBEDTLS_TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA
+TLS_DHE_PSK_WITH_AES_128_CBC_SHA MBEDTLS_TLS_DHE_PSK_WITH_AES_128_CBC_SHA
+TLS_DHE_PSK_WITH_AES_128_CBC_SHA256 MBEDTLS_TLS_DHE_PSK_WITH_AES_128_CBC_SHA256
+TLS_DHE_PSK_WITH_AES_128_CCM MBEDTLS_TLS_DHE_PSK_WITH_AES_128_CCM
+TLS_DHE_PSK_WITH_AES_128_CCM_8 MBEDTLS_TLS_DHE_PSK_WITH_AES_128_CCM_8
+TLS_DHE_PSK_WITH_AES_128_GCM_SHA256 MBEDTLS_TLS_DHE_PSK_WITH_AES_128_GCM_SHA256
+TLS_DHE_PSK_WITH_AES_256_CBC_SHA MBEDTLS_TLS_DHE_PSK_WITH_AES_256_CBC_SHA
+TLS_DHE_PSK_WITH_AES_256_CBC_SHA384 MBEDTLS_TLS_DHE_PSK_WITH_AES_256_CBC_SHA384
+TLS_DHE_PSK_WITH_AES_256_CCM MBEDTLS_TLS_DHE_PSK_WITH_AES_256_CCM
+TLS_DHE_PSK_WITH_AES_256_CCM_8 MBEDTLS_TLS_DHE_PSK_WITH_AES_256_CCM_8
+TLS_DHE_PSK_WITH_AES_256_GCM_SHA384 MBEDTLS_TLS_DHE_PSK_WITH_AES_256_GCM_SHA384
+TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256
+TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256 MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256
+TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384
+TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384 MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384
+TLS_DHE_PSK_WITH_NULL_SHA MBEDTLS_TLS_DHE_PSK_WITH_NULL_SHA
+TLS_DHE_PSK_WITH_NULL_SHA256 MBEDTLS_TLS_DHE_PSK_WITH_NULL_SHA256
+TLS_DHE_PSK_WITH_NULL_SHA384 MBEDTLS_TLS_DHE_PSK_WITH_NULL_SHA384
+TLS_DHE_PSK_WITH_RC4_128_SHA MBEDTLS_TLS_DHE_PSK_WITH_RC4_128_SHA
+TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA MBEDTLS_TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA
+TLS_DHE_RSA_WITH_AES_128_CBC_SHA MBEDTLS_TLS_DHE_RSA_WITH_AES_128_CBC_SHA
+TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 MBEDTLS_TLS_DHE_RSA_WITH_AES_128_CBC_SHA256
+TLS_DHE_RSA_WITH_AES_128_CCM MBEDTLS_TLS_DHE_RSA_WITH_AES_128_CCM
+TLS_DHE_RSA_WITH_AES_128_CCM_8 MBEDTLS_TLS_DHE_RSA_WITH_AES_128_CCM_8
+TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 MBEDTLS_TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
+TLS_DHE_RSA_WITH_AES_256_CBC_SHA MBEDTLS_TLS_DHE_RSA_WITH_AES_256_CBC_SHA
+TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 MBEDTLS_TLS_DHE_RSA_WITH_AES_256_CBC_SHA256
+TLS_DHE_RSA_WITH_AES_256_CCM MBEDTLS_TLS_DHE_RSA_WITH_AES_256_CCM
+TLS_DHE_RSA_WITH_AES_256_CCM_8 MBEDTLS_TLS_DHE_RSA_WITH_AES_256_CCM_8
+TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 MBEDTLS_TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
+TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA
+TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256
+TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256 MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256
+TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA
+TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256
+TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384 MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384
+TLS_DHE_RSA_WITH_DES_CBC_SHA MBEDTLS_TLS_DHE_RSA_WITH_DES_CBC_SHA
+TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA MBEDTLS_TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA
+TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
+TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
+TLS_ECDHE_ECDSA_WITH_AES_128_CCM MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_CCM
+TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8 MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8
+TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
+TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
+TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
+TLS_ECDHE_ECDSA_WITH_AES_256_CCM MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_CCM
+TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8 MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8
+TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
+TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256
+TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256
+TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384
+TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384
+TLS_ECDHE_ECDSA_WITH_NULL_SHA MBEDTLS_TLS_ECDHE_ECDSA_WITH_NULL_SHA
+TLS_ECDHE_ECDSA_WITH_RC4_128_SHA MBEDTLS_TLS_ECDHE_ECDSA_WITH_RC4_128_SHA
+TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA MBEDTLS_TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA
+TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA MBEDTLS_TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA
+TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256 MBEDTLS_TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256
+TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA MBEDTLS_TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA
+TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384 MBEDTLS_TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384
+TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 MBEDTLS_TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256
+TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 MBEDTLS_TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384
+TLS_ECDHE_PSK_WITH_NULL_SHA MBEDTLS_TLS_ECDHE_PSK_WITH_NULL_SHA
+TLS_ECDHE_PSK_WITH_NULL_SHA256 MBEDTLS_TLS_ECDHE_PSK_WITH_NULL_SHA256
+TLS_ECDHE_PSK_WITH_NULL_SHA384 MBEDTLS_TLS_ECDHE_PSK_WITH_NULL_SHA384
+TLS_ECDHE_PSK_WITH_RC4_128_SHA MBEDTLS_TLS_ECDHE_PSK_WITH_RC4_128_SHA
+TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA MBEDTLS_TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA
+TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA MBEDTLS_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
+TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 MBEDTLS_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
+TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 MBEDTLS_TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
+TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA MBEDTLS_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
+TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 MBEDTLS_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
+TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 MBEDTLS_TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
+TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256
+TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256 MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256
+TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384 MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384
+TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384 MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384
+TLS_ECDHE_RSA_WITH_NULL_SHA MBEDTLS_TLS_ECDHE_RSA_WITH_NULL_SHA
+TLS_ECDHE_RSA_WITH_RC4_128_SHA MBEDTLS_TLS_ECDHE_RSA_WITH_RC4_128_SHA
+TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA MBEDTLS_TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA
+TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA
+TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256
+TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256
+TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA
+TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384
+TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384
+TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256
+TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256
+TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384
+TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384
+TLS_ECDH_ECDSA_WITH_NULL_SHA MBEDTLS_TLS_ECDH_ECDSA_WITH_NULL_SHA
+TLS_ECDH_ECDSA_WITH_RC4_128_SHA MBEDTLS_TLS_ECDH_ECDSA_WITH_RC4_128_SHA
+TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA MBEDTLS_TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA
+TLS_ECDH_RSA_WITH_AES_128_CBC_SHA MBEDTLS_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA
+TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256 MBEDTLS_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256
+TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256 MBEDTLS_TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256
+TLS_ECDH_RSA_WITH_AES_256_CBC_SHA MBEDTLS_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA
+TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384 MBEDTLS_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384
+TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384 MBEDTLS_TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384
+TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256 MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256
+TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256 MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256
+TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384 MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384
+TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384 MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384
+TLS_ECDH_RSA_WITH_NULL_SHA MBEDTLS_TLS_ECDH_RSA_WITH_NULL_SHA
+TLS_ECDH_RSA_WITH_RC4_128_SHA MBEDTLS_TLS_ECDH_RSA_WITH_RC4_128_SHA
+TLS_EXT_ALPN MBEDTLS_TLS_EXT_ALPN
+TLS_EXT_ENCRYPT_THEN_MAC MBEDTLS_TLS_EXT_ENCRYPT_THEN_MAC
+TLS_EXT_EXTENDED_MASTER_SECRET MBEDTLS_TLS_EXT_EXTENDED_MASTER_SECRET
+TLS_EXT_MAX_FRAGMENT_LENGTH MBEDTLS_TLS_EXT_MAX_FRAGMENT_LENGTH
+TLS_EXT_RENEGOTIATION_INFO MBEDTLS_TLS_EXT_RENEGOTIATION_INFO
+TLS_EXT_SERVERNAME MBEDTLS_TLS_EXT_SERVERNAME
+TLS_EXT_SERVERNAME_HOSTNAME MBEDTLS_TLS_EXT_SERVERNAME_HOSTNAME
+TLS_EXT_SESSION_TICKET MBEDTLS_TLS_EXT_SESSION_TICKET
+TLS_EXT_SIG_ALG MBEDTLS_TLS_EXT_SIG_ALG
+TLS_EXT_SUPPORTED_ELLIPTIC_CURVES MBEDTLS_TLS_EXT_SUPPORTED_ELLIPTIC_CURVES
+TLS_EXT_SUPPORTED_POINT_FORMATS MBEDTLS_TLS_EXT_SUPPORTED_POINT_FORMATS
+TLS_EXT_SUPPORTED_POINT_FORMATS_PRESENT MBEDTLS_TLS_EXT_SUPPORTED_POINT_FORMATS_PRESENT
+TLS_EXT_TRUNCATED_HMAC MBEDTLS_TLS_EXT_TRUNCATED_HMAC
+TLS_PSK_WITH_3DES_EDE_CBC_SHA MBEDTLS_TLS_PSK_WITH_3DES_EDE_CBC_SHA
+TLS_PSK_WITH_AES_128_CBC_SHA MBEDTLS_TLS_PSK_WITH_AES_128_CBC_SHA
+TLS_PSK_WITH_AES_128_CBC_SHA256 MBEDTLS_TLS_PSK_WITH_AES_128_CBC_SHA256
+TLS_PSK_WITH_AES_128_CCM MBEDTLS_TLS_PSK_WITH_AES_128_CCM
+TLS_PSK_WITH_AES_128_CCM_8 MBEDTLS_TLS_PSK_WITH_AES_128_CCM_8
+TLS_PSK_WITH_AES_128_GCM_SHA256 MBEDTLS_TLS_PSK_WITH_AES_128_GCM_SHA256
+TLS_PSK_WITH_AES_256_CBC_SHA MBEDTLS_TLS_PSK_WITH_AES_256_CBC_SHA
+TLS_PSK_WITH_AES_256_CBC_SHA384 MBEDTLS_TLS_PSK_WITH_AES_256_CBC_SHA384
+TLS_PSK_WITH_AES_256_CCM MBEDTLS_TLS_PSK_WITH_AES_256_CCM
+TLS_PSK_WITH_AES_256_CCM_8 MBEDTLS_TLS_PSK_WITH_AES_256_CCM_8
+TLS_PSK_WITH_AES_256_GCM_SHA384 MBEDTLS_TLS_PSK_WITH_AES_256_GCM_SHA384
+TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256 MBEDTLS_TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256
+TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256 MBEDTLS_TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256
+TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384 MBEDTLS_TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384
+TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384 MBEDTLS_TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384
+TLS_PSK_WITH_NULL_SHA MBEDTLS_TLS_PSK_WITH_NULL_SHA
+TLS_PSK_WITH_NULL_SHA256 MBEDTLS_TLS_PSK_WITH_NULL_SHA256
+TLS_PSK_WITH_NULL_SHA384 MBEDTLS_TLS_PSK_WITH_NULL_SHA384
+TLS_PSK_WITH_RC4_128_SHA MBEDTLS_TLS_PSK_WITH_RC4_128_SHA
+TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA MBEDTLS_TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA
+TLS_RSA_PSK_WITH_AES_128_CBC_SHA MBEDTLS_TLS_RSA_PSK_WITH_AES_128_CBC_SHA
+TLS_RSA_PSK_WITH_AES_128_CBC_SHA256 MBEDTLS_TLS_RSA_PSK_WITH_AES_128_CBC_SHA256
+TLS_RSA_PSK_WITH_AES_128_GCM_SHA256 MBEDTLS_TLS_RSA_PSK_WITH_AES_128_GCM_SHA256
+TLS_RSA_PSK_WITH_AES_256_CBC_SHA MBEDTLS_TLS_RSA_PSK_WITH_AES_256_CBC_SHA
+TLS_RSA_PSK_WITH_AES_256_CBC_SHA384 MBEDTLS_TLS_RSA_PSK_WITH_AES_256_CBC_SHA384
+TLS_RSA_PSK_WITH_AES_256_GCM_SHA384 MBEDTLS_TLS_RSA_PSK_WITH_AES_256_GCM_SHA384
+TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256 MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256
+TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256 MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256
+TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384 MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384
+TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384 MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384
+TLS_RSA_PSK_WITH_NULL_SHA MBEDTLS_TLS_RSA_PSK_WITH_NULL_SHA
+TLS_RSA_PSK_WITH_NULL_SHA256 MBEDTLS_TLS_RSA_PSK_WITH_NULL_SHA256
+TLS_RSA_PSK_WITH_NULL_SHA384 MBEDTLS_TLS_RSA_PSK_WITH_NULL_SHA384
+TLS_RSA_PSK_WITH_RC4_128_SHA MBEDTLS_TLS_RSA_PSK_WITH_RC4_128_SHA
+TLS_RSA_WITH_3DES_EDE_CBC_SHA MBEDTLS_TLS_RSA_WITH_3DES_EDE_CBC_SHA
+TLS_RSA_WITH_AES_128_CBC_SHA MBEDTLS_TLS_RSA_WITH_AES_128_CBC_SHA
+TLS_RSA_WITH_AES_128_CBC_SHA256 MBEDTLS_TLS_RSA_WITH_AES_128_CBC_SHA256
+TLS_RSA_WITH_AES_128_CCM MBEDTLS_TLS_RSA_WITH_AES_128_CCM
+TLS_RSA_WITH_AES_128_CCM_8 MBEDTLS_TLS_RSA_WITH_AES_128_CCM_8
+TLS_RSA_WITH_AES_128_GCM_SHA256 MBEDTLS_TLS_RSA_WITH_AES_128_GCM_SHA256
+TLS_RSA_WITH_AES_256_CBC_SHA MBEDTLS_TLS_RSA_WITH_AES_256_CBC_SHA
+TLS_RSA_WITH_AES_256_CBC_SHA256 MBEDTLS_TLS_RSA_WITH_AES_256_CBC_SHA256
+TLS_RSA_WITH_AES_256_CCM MBEDTLS_TLS_RSA_WITH_AES_256_CCM
+TLS_RSA_WITH_AES_256_CCM_8 MBEDTLS_TLS_RSA_WITH_AES_256_CCM_8
+TLS_RSA_WITH_AES_256_GCM_SHA384 MBEDTLS_TLS_RSA_WITH_AES_256_GCM_SHA384
+TLS_RSA_WITH_CAMELLIA_128_CBC_SHA MBEDTLS_TLS_RSA_WITH_CAMELLIA_128_CBC_SHA
+TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256 MBEDTLS_TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256
+TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256 MBEDTLS_TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256
+TLS_RSA_WITH_CAMELLIA_256_CBC_SHA MBEDTLS_TLS_RSA_WITH_CAMELLIA_256_CBC_SHA
+TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256 MBEDTLS_TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256
+TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384 MBEDTLS_TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384
+TLS_RSA_WITH_DES_CBC_SHA MBEDTLS_TLS_RSA_WITH_DES_CBC_SHA
+TLS_RSA_WITH_NULL_MD5 MBEDTLS_TLS_RSA_WITH_NULL_MD5
+TLS_RSA_WITH_NULL_SHA MBEDTLS_TLS_RSA_WITH_NULL_SHA
+TLS_RSA_WITH_NULL_SHA256 MBEDTLS_TLS_RSA_WITH_NULL_SHA256
+TLS_RSA_WITH_RC4_128_MD5 MBEDTLS_TLS_RSA_WITH_RC4_128_MD5
+TLS_RSA_WITH_RC4_128_SHA MBEDTLS_TLS_RSA_WITH_RC4_128_SHA
+X509_CRT_VERSION_1 MBEDTLS_X509_CRT_VERSION_1
+X509_CRT_VERSION_2 MBEDTLS_X509_CRT_VERSION_2
+X509_CRT_VERSION_3 MBEDTLS_X509_CRT_VERSION_3
+X509_FORMAT_DER MBEDTLS_X509_FORMAT_DER
+X509_FORMAT_PEM MBEDTLS_X509_FORMAT_PEM
+X509_MAX_DN_NAME_SIZE MBEDTLS_X509_MAX_DN_NAME_SIZE
+X509_RFC5280_MAX_SERIAL_LEN MBEDTLS_X509_RFC5280_MAX_SERIAL_LEN
+X509_RFC5280_UTC_TIME_LEN MBEDTLS_X509_RFC5280_UTC_TIME_LEN
+XTEA_DECRYPT MBEDTLS_XTEA_DECRYPT
+XTEA_ENCRYPT MBEDTLS_XTEA_ENCRYPT
+_asn1_bitstring mbedtls_asn1_bitstring
+_asn1_buf mbedtls_asn1_buf
+_asn1_named_data mbedtls_asn1_named_data
+_asn1_sequence mbedtls_asn1_sequence
+_ssl_cache_context mbedtls_ssl_cache_context
+_ssl_cache_entry mbedtls_ssl_cache_entry
+_ssl_ciphersuite_t mbedtls_ssl_ciphersuite_t
+_ssl_context mbedtls_ssl_context
+_ssl_flight_item mbedtls_ssl_flight_item
+_ssl_handshake_params mbedtls_ssl_handshake_params
+_ssl_key_cert mbedtls_ssl_key_cert
+_ssl_premaster_secret mbedtls_ssl_premaster_secret
+_ssl_session mbedtls_ssl_session
+_ssl_ticket_keys mbedtls_ssl_ticket_keys
+_ssl_transform mbedtls_ssl_transform
+_x509_crl mbedtls_x509_crl
+_x509_crl_entry mbedtls_x509_crl_entry
+_x509_crt mbedtls_x509_crt
+_x509_csr mbedtls_x509_csr
+_x509_time mbedtls_x509_time
+_x509write_cert mbedtls_x509write_cert
+_x509write_csr mbedtls_x509write_csr
+aes_context mbedtls_aes_context
+aes_crypt_cbc mbedtls_aes_crypt_cbc
+aes_crypt_cfb128 mbedtls_aes_crypt_cfb128
+aes_crypt_cfb8 mbedtls_aes_crypt_cfb8
+aes_crypt_ctr mbedtls_aes_crypt_ctr
+aes_crypt_ecb mbedtls_aes_crypt_ecb
+aes_free mbedtls_aes_free
+aes_init mbedtls_aes_init
+aes_self_test mbedtls_aes_self_test
+aes_setkey_dec mbedtls_aes_setkey_dec
+aes_setkey_enc mbedtls_aes_setkey_enc
+aesni_crypt_ecb mbedtls_aesni_crypt_ecb
+aesni_gcm_mult mbedtls_aesni_gcm_mult
+aesni_inverse_key mbedtls_aesni_inverse_key
+aesni_setkey_enc mbedtls_aesni_setkey_enc
+aesni_supports mbedtls_aesni_has_support
+alarmed mbedtls_timing_alarmed
+arc4_context mbedtls_arc4_context
+arc4_crypt mbedtls_arc4_crypt
+arc4_free mbedtls_arc4_free
+arc4_init mbedtls_arc4_init
+arc4_self_test mbedtls_arc4_self_test
+arc4_setup mbedtls_arc4_setup
+asn1_bitstring mbedtls_asn1_bitstring
+asn1_buf mbedtls_asn1_buf
+asn1_find_named_data mbedtls_asn1_find_named_data
+asn1_free_named_data mbedtls_asn1_free_named_data
+asn1_free_named_data_list mbedtls_asn1_free_named_data_list
+asn1_get_alg mbedtls_asn1_get_alg
+asn1_get_alg_null mbedtls_asn1_get_alg_null
+asn1_get_bitstring mbedtls_asn1_get_bitstring
+asn1_get_bitstring_null mbedtls_asn1_get_bitstring_null
+asn1_get_bool mbedtls_asn1_get_bool
+asn1_get_int mbedtls_asn1_get_int
+asn1_get_len mbedtls_asn1_get_len
+asn1_get_mpi mbedtls_asn1_get_mpi
+asn1_get_sequence_of mbedtls_asn1_get_sequence_of
+asn1_get_tag mbedtls_asn1_get_tag
+asn1_named_data mbedtls_asn1_named_data
+asn1_sequence mbedtls_asn1_sequence
+asn1_store_named_data mbedtls_asn1_store_named_data
+asn1_write_algorithm_identifier mbedtls_asn1_write_algorithm_identifier
+asn1_write_bitstring mbedtls_asn1_write_bitstring
+asn1_write_bool mbedtls_asn1_write_bool
+asn1_write_ia5_string mbedtls_asn1_write_ia5_string
+asn1_write_int mbedtls_asn1_write_int
+asn1_write_len mbedtls_asn1_write_len
+asn1_write_mpi mbedtls_asn1_write_mpi
+asn1_write_null mbedtls_asn1_write_null
+asn1_write_octet_string mbedtls_asn1_write_octet_string
+asn1_write_oid mbedtls_asn1_write_oid
+asn1_write_printable_string mbedtls_asn1_write_printable_string
+asn1_write_raw_buffer mbedtls_asn1_write_raw_buffer
+asn1_write_tag mbedtls_asn1_write_tag
+base64_decode mbedtls_base64_decode
+base64_encode mbedtls_base64_encode
+base64_self_test mbedtls_base64_self_test
+blowfish_context mbedtls_blowfish_context
+blowfish_crypt_cbc mbedtls_blowfish_crypt_cbc
+blowfish_crypt_cfb64 mbedtls_blowfish_crypt_cfb64
+blowfish_crypt_ctr mbedtls_blowfish_crypt_ctr
+blowfish_crypt_ecb mbedtls_blowfish_crypt_ecb
+blowfish_free mbedtls_blowfish_free
+blowfish_init mbedtls_blowfish_init
+blowfish_setkey mbedtls_blowfish_setkey
+camellia_context mbedtls_camellia_context
+camellia_crypt_cbc mbedtls_camellia_crypt_cbc
+camellia_crypt_cfb128 mbedtls_camellia_crypt_cfb128
+camellia_crypt_ctr mbedtls_camellia_crypt_ctr
+camellia_crypt_ecb mbedtls_camellia_crypt_ecb
+camellia_free mbedtls_camellia_free
+camellia_init mbedtls_camellia_init
+camellia_self_test mbedtls_camellia_self_test
+camellia_setkey_dec mbedtls_camellia_setkey_dec
+camellia_setkey_enc mbedtls_camellia_setkey_enc
+ccm_auth_decrypt mbedtls_ccm_auth_decrypt
+ccm_context mbedtls_ccm_context
+ccm_encrypt_and_tag mbedtls_ccm_encrypt_and_tag
+ccm_free mbedtls_ccm_free
+ccm_init mbedtls_ccm_init
+ccm_self_test mbedtls_ccm_self_test
+cipher_auth_decrypt mbedtls_cipher_auth_decrypt
+cipher_auth_encrypt mbedtls_cipher_auth_encrypt
+cipher_base_t mbedtls_cipher_base_t
+cipher_check_tag mbedtls_cipher_check_tag
+cipher_context_t mbedtls_cipher_context_t
+cipher_crypt mbedtls_cipher_crypt
+cipher_definition_t mbedtls_cipher_definition_t
+cipher_definitions mbedtls_cipher_definitions
+cipher_finish mbedtls_cipher_finish
+cipher_free mbedtls_cipher_free
+cipher_free_ctx mbedtls_cipher_free_ctx
+cipher_get_block_size mbedtls_cipher_get_block_size
+cipher_get_cipher_mode mbedtls_cipher_get_cipher_mode
+cipher_get_iv_size mbedtls_cipher_get_iv_size
+cipher_get_key_size mbedtls_cipher_get_key_bitlen
+cipher_get_name mbedtls_cipher_get_name
+cipher_get_operation mbedtls_cipher_get_operation
+cipher_get_type mbedtls_cipher_get_type
+cipher_id_t mbedtls_cipher_id_t
+cipher_info_from_string mbedtls_cipher_info_from_string
+cipher_info_from_type mbedtls_cipher_info_from_type
+cipher_info_from_values mbedtls_cipher_info_from_values
+cipher_info_t mbedtls_cipher_info_t
+cipher_init mbedtls_cipher_init
+cipher_init_ctx mbedtls_cipher_setup
+cipher_list mbedtls_cipher_list
+cipher_mode_t mbedtls_cipher_mode_t
+cipher_padding_t mbedtls_cipher_padding_t
+cipher_reset mbedtls_cipher_reset
+cipher_self_test mbedtls_cipher_self_test
+cipher_set_iv mbedtls_cipher_set_iv
+cipher_set_padding_mode mbedtls_cipher_set_padding_mode
+cipher_setkey mbedtls_cipher_setkey
+cipher_type_t mbedtls_cipher_type_t
+cipher_update mbedtls_cipher_update
+cipher_update_ad mbedtls_cipher_update_ad
+cipher_write_tag mbedtls_cipher_write_tag
+ctr_drbg_context mbedtls_ctr_drbg_context
+ctr_drbg_free mbedtls_ctr_drbg_free
+ctr_drbg_init mbedtls_ctr_drbg_init
+ctr_drbg_init_entropy_len mbedtls_ctr_drbg_init_entropy_len
+ctr_drbg_random mbedtls_ctr_drbg_random
+ctr_drbg_random_with_add mbedtls_ctr_drbg_random_with_add
+ctr_drbg_reseed mbedtls_ctr_drbg_reseed
+ctr_drbg_self_test mbedtls_ctr_drbg_self_test
+ctr_drbg_set_entropy_len mbedtls_ctr_drbg_set_entropy_len
+ctr_drbg_set_prediction_resistance mbedtls_ctr_drbg_set_prediction_resistance
+ctr_drbg_set_reseed_interval mbedtls_ctr_drbg_set_reseed_interval
+ctr_drbg_update mbedtls_ctr_drbg_update
+ctr_drbg_update_seed_file mbedtls_ctr_drbg_update_seed_file
+ctr_drbg_write_seed_file mbedtls_ctr_drbg_write_seed_file
+debug_fmt mbedtls_debug_fmt
+debug_print_buf mbedtls_debug_print_buf
+debug_print_crt mbedtls_debug_print_crt
+debug_print_ecp mbedtls_debug_print_ecp
+debug_print_mpi mbedtls_debug_print_mpi
+debug_print_msg mbedtls_debug_print_msg
+debug_print_ret mbedtls_debug_print_ret
+debug_set_log_mode mbedtls_debug_set_log_mode
+debug_set_threshold mbedtls_debug_set_threshold
+des3_context mbedtls_des3_context
+des3_crypt_cbc mbedtls_des3_crypt_cbc
+des3_crypt_ecb mbedtls_des3_crypt_ecb
+des3_free mbedtls_des3_free
+des3_init mbedtls_des3_init
+des3_set2key_dec mbedtls_des3_set2key_dec
+des3_set2key_enc mbedtls_des3_set2key_enc
+des3_set3key_dec mbedtls_des3_set3key_dec
+des3_set3key_enc mbedtls_des3_set3key_enc
+des_context mbedtls_des_context
+des_crypt_cbc mbedtls_des_crypt_cbc
+des_crypt_ecb mbedtls_des_crypt_ecb
+des_free mbedtls_des_free
+des_init mbedtls_des_init
+des_key_check_key_parity mbedtls_des_key_check_key_parity
+des_key_check_weak mbedtls_des_key_check_weak
+des_key_set_parity mbedtls_des_key_set_parity
+des_self_test mbedtls_des_self_test
+des_setkey_dec mbedtls_des_setkey_dec
+des_setkey_enc mbedtls_des_setkey_enc
+dhm_calc_secret mbedtls_dhm_calc_secret
+dhm_context mbedtls_dhm_context
+dhm_free mbedtls_dhm_free
+dhm_init mbedtls_dhm_init
+dhm_make_params mbedtls_dhm_make_params
+dhm_make_public mbedtls_dhm_make_public
+dhm_parse_dhm mbedtls_dhm_parse_dhm
+dhm_parse_dhmfile mbedtls_dhm_parse_dhmfile
+dhm_read_params mbedtls_dhm_read_params
+dhm_read_public mbedtls_dhm_read_public
+dhm_self_test mbedtls_dhm_self_test
+ecdh_calc_secret mbedtls_ecdh_calc_secret
+ecdh_compute_shared mbedtls_ecdh_compute_shared
+ecdh_context mbedtls_ecdh_context
+ecdh_free mbedtls_ecdh_free
+ecdh_gen_public mbedtls_ecdh_gen_public
+ecdh_get_params mbedtls_ecdh_get_params
+ecdh_init mbedtls_ecdh_init
+ecdh_make_params mbedtls_ecdh_make_params
+ecdh_make_public mbedtls_ecdh_make_public
+ecdh_read_params mbedtls_ecdh_read_params
+ecdh_read_public mbedtls_ecdh_read_public
+ecdh_self_test mbedtls_ecdh_self_test
+ecdh_side mbedtls_ecdh_side
+ecdsa_context mbedtls_ecdsa_context
+ecdsa_free mbedtls_ecdsa_free
+ecdsa_from_keypair mbedtls_ecdsa_from_keypair
+ecdsa_genkey mbedtls_ecdsa_genkey
+ecdsa_info mbedtls_ecdsa_info
+ecdsa_init mbedtls_ecdsa_init
+ecdsa_read_signature mbedtls_ecdsa_read_signature
+ecdsa_self_test mbedtls_ecdsa_self_test
+ecdsa_sign mbedtls_ecdsa_sign
+ecdsa_sign_det mbedtls_ecdsa_sign_det
+ecdsa_verify mbedtls_ecdsa_verify
+ecdsa_write_signature mbedtls_ecdsa_write_signature
+ecdsa_write_signature_det mbedtls_ecdsa_write_signature_det
+eckey_info mbedtls_eckey_info
+eckeydh_info mbedtls_eckeydh_info
+ecp_add mbedtls_ecp_add
+ecp_check_privkey mbedtls_ecp_check_privkey
+ecp_check_pub_priv mbedtls_ecp_check_pub_priv
+ecp_check_pubkey mbedtls_ecp_check_pubkey
+ecp_copy mbedtls_ecp_copy
+ecp_curve_info mbedtls_ecp_curve_info
+ecp_curve_info_from_grp_id mbedtls_ecp_curve_info_from_grp_id
+ecp_curve_info_from_name mbedtls_ecp_curve_info_from_name
+ecp_curve_info_from_tls_id mbedtls_ecp_curve_info_from_tls_id
+ecp_curve_list mbedtls_ecp_curve_list
+ecp_gen_key mbedtls_ecp_gen_key
+ecp_gen_keypair mbedtls_ecp_gen_keypair
+ecp_group mbedtls_ecp_group
+ecp_group_copy mbedtls_ecp_group_copy
+ecp_group_free mbedtls_ecp_group_free
+ecp_group_id mbedtls_ecp_group_id
+ecp_group_init mbedtls_ecp_group_init
+ecp_group_read_string mbedtls_ecp_group_read_string
+ecp_grp_id_list mbedtls_ecp_grp_id_list
+ecp_is_zero mbedtls_ecp_is_zero
+ecp_keypair mbedtls_ecp_keypair
+ecp_keypair_free mbedtls_ecp_keypair_free
+ecp_keypair_init mbedtls_ecp_keypair_init
+ecp_mul mbedtls_ecp_mul
+ecp_point mbedtls_ecp_point
+ecp_point_free mbedtls_ecp_point_free
+ecp_point_init mbedtls_ecp_point_init
+ecp_point_read_binary mbedtls_ecp_point_read_binary
+ecp_point_read_string mbedtls_ecp_point_read_string
+ecp_point_write_binary mbedtls_ecp_point_write_binary
+ecp_self_test mbedtls_ecp_self_test
+ecp_set_zero mbedtls_ecp_set_zero
+ecp_sub mbedtls_ecp_sub
+ecp_tls_read_group mbedtls_ecp_tls_read_group
+ecp_tls_read_point mbedtls_ecp_tls_read_point
+ecp_tls_write_group mbedtls_ecp_tls_write_group
+ecp_tls_write_point mbedtls_ecp_tls_write_point
+ecp_use_known_dp mbedtls_ecp_group_load
+entropy_add_source mbedtls_entropy_add_source
+entropy_context mbedtls_entropy_context
+entropy_free mbedtls_entropy_free
+entropy_func mbedtls_entropy_func
+entropy_gather mbedtls_entropy_gather
+entropy_init mbedtls_entropy_init
+entropy_self_test mbedtls_entropy_self_test
+entropy_update_manual mbedtls_entropy_update_manual
+entropy_update_seed_file mbedtls_entropy_update_seed_file
+entropy_write_seed_file mbedtls_entropy_write_seed_file
+error_strerror mbedtls_strerror
+f_source_ptr mbedtls_entropy_f_source_ptr
+gcm_auth_decrypt mbedtls_gcm_auth_decrypt
+gcm_context mbedtls_gcm_context
+gcm_crypt_and_tag mbedtls_gcm_crypt_and_tag
+gcm_finish mbedtls_gcm_finish
+gcm_free mbedtls_gcm_free
+gcm_init mbedtls_gcm_init
+gcm_self_test mbedtls_gcm_self_test
+gcm_starts mbedtls_gcm_starts
+gcm_update mbedtls_gcm_update
+get_timer mbedtls_timing_get_timer
+hardclock mbedtls_timing_hardclock
+hardclock_poll mbedtls_hardclock_poll
+havege_free mbedtls_havege_free
+havege_init mbedtls_havege_init
+havege_poll mbedtls_havege_poll
+havege_random mbedtls_havege_random
+havege_state mbedtls_havege_state
+hmac_drbg_context mbedtls_hmac_drbg_context
+hmac_drbg_free mbedtls_hmac_drbg_free
+hmac_drbg_init mbedtls_hmac_drbg_init
+hmac_drbg_init_buf mbedtls_hmac_drbg_init_buf
+hmac_drbg_random mbedtls_hmac_drbg_random
+hmac_drbg_random_with_add mbedtls_hmac_drbg_random_with_add
+hmac_drbg_reseed mbedtls_hmac_drbg_reseed
+hmac_drbg_self_test mbedtls_hmac_drbg_self_test
+hmac_drbg_set_entropy_len mbedtls_hmac_drbg_set_entropy_len
+hmac_drbg_set_prediction_resistance mbedtls_hmac_drbg_set_prediction_resistance
+hmac_drbg_set_reseed_interval mbedtls_hmac_drbg_set_reseed_interval
+hmac_drbg_update mbedtls_hmac_drbg_update
+hmac_drbg_update_seed_file mbedtls_hmac_drbg_update_seed_file
+hmac_drbg_write_seed_file mbedtls_hmac_drbg_write_seed_file
+hr_time mbedtls_timing_hr_time
+key_exchange_type_t mbedtls_key_exchange_type_t
+m_sleep mbedtls_timing_m_sleep
+md mbedtls_md
+md2 mbedtls_md2
+md2_context mbedtls_md2_context
+md2_file mbedtls_md2_file
+md2_finish mbedtls_md2_finish
+md2_free mbedtls_md2_free
+md2_hmac mbedtls_md2_hmac
+md2_hmac_finish mbedtls_md2_hmac_finish
+md2_hmac_reset mbedtls_md2_hmac_reset
+md2_hmac_starts mbedtls_md2_hmac_starts
+md2_hmac_update mbedtls_md2_hmac_update
+md2_info mbedtls_md2_info
+md2_init mbedtls_md2_init
+md2_process mbedtls_md2_process
+md2_self_test mbedtls_md2_self_test
+md2_starts mbedtls_md2_starts
+md2_update mbedtls_md2_update
+md4 mbedtls_md4
+md4_context mbedtls_md4_context
+md4_file mbedtls_md4_file
+md4_finish mbedtls_md4_finish
+md4_free mbedtls_md4_free
+md4_hmac mbedtls_md4_hmac
+md4_hmac_finish mbedtls_md4_hmac_finish
+md4_hmac_reset mbedtls_md4_hmac_reset
+md4_hmac_starts mbedtls_md4_hmac_starts
+md4_hmac_update mbedtls_md4_hmac_update
+md4_info mbedtls_md4_info
+md4_init mbedtls_md4_init
+md4_process mbedtls_md4_process
+md4_self_test mbedtls_md4_self_test
+md4_starts mbedtls_md4_starts
+md4_update mbedtls_md4_update
+md5 mbedtls_md5
+md5_context mbedtls_md5_context
+md5_file mbedtls_md5_file
+md5_finish mbedtls_md5_finish
+md5_free mbedtls_md5_free
+md5_hmac mbedtls_md5_hmac
+md5_hmac_finish mbedtls_md5_hmac_finish
+md5_hmac_reset mbedtls_md5_hmac_reset
+md5_hmac_starts mbedtls_md5_hmac_starts
+md5_hmac_update mbedtls_md5_hmac_update
+md5_info mbedtls_md5_info
+md5_init mbedtls_md5_init
+md5_process mbedtls_md5_process
+md5_self_test mbedtls_md5_self_test
+md5_starts mbedtls_md5_starts
+md5_update mbedtls_md5_update
+md_context_t mbedtls_md_context_t
+md_file mbedtls_md_file
+md_finish mbedtls_md_finish
+md_free mbedtls_md_free
+md_free_ctx mbedtls_md_free_ctx
+md_get_name mbedtls_md_get_name
+md_get_size mbedtls_md_get_size
+md_get_type mbedtls_md_get_type
+md_hmac mbedtls_md_hmac
+md_hmac_finish mbedtls_md_hmac_finish
+md_hmac_reset mbedtls_md_hmac_reset
+md_hmac_starts mbedtls_md_hmac_starts
+md_hmac_update mbedtls_md_hmac_update
+md_info_from_string mbedtls_md_info_from_string
+md_info_from_type mbedtls_md_info_from_type
+md_info_t mbedtls_md_info_t
+md_init mbedtls_md_init
+md_init_ctx mbedtls_md_init_ctx
+md_list mbedtls_md_list
+md_process mbedtls_md_process
+md_starts mbedtls_md_starts
+md_type_t mbedtls_md_type_t
+md_update mbedtls_md_update
+memory_buffer_alloc_cur_get mbedtls_memory_buffer_alloc_cur_get
+memory_buffer_alloc_free mbedtls_memory_buffer_alloc_free
+memory_buffer_alloc_init mbedtls_memory_buffer_alloc_init
+memory_buffer_alloc_max_get mbedtls_memory_buffer_alloc_max_get
+memory_buffer_alloc_max_reset mbedtls_memory_buffer_alloc_max_reset
+memory_buffer_alloc_self_test mbedtls_memory_buffer_alloc_self_test
+memory_buffer_alloc_status mbedtls_memory_buffer_alloc_status
+memory_buffer_alloc_verify mbedtls_memory_buffer_alloc_verify
+memory_buffer_set_verify mbedtls_memory_buffer_set_verify
+memory_set_own mbedtls_memory_set_own
+mpi mbedtls_mpi
+mpi_add_abs mbedtls_mpi_add_abs
+mpi_add_int mbedtls_mpi_add_int
+mpi_add_mpi mbedtls_mpi_add_mpi
+mpi_cmp_abs mbedtls_mpi_cmp_abs
+mpi_cmp_int mbedtls_mpi_cmp_int
+mpi_cmp_mpi mbedtls_mpi_cmp_mpi
+mpi_copy mbedtls_mpi_copy
+mpi_div_int mbedtls_mpi_div_int
+mpi_div_mpi mbedtls_mpi_div_mpi
+mpi_exp_mod mbedtls_mpi_exp_mod
+mpi_fill_random mbedtls_mpi_fill_random
+mpi_free mbedtls_mpi_free
+mpi_gcd mbedtls_mpi_gcd
+mpi_gen_prime mbedtls_mpi_gen_prime
+mpi_get_bit mbedtls_mpi_get_bit
+mpi_grow mbedtls_mpi_grow
+mpi_init mbedtls_mpi_init
+mpi_inv_mod mbedtls_mpi_inv_mod
+mpi_is_prime mbedtls_mpi_is_prime
+mpi_lsb mbedtls_mpi_lsb
+mpi_lset mbedtls_mpi_lset
+mpi_mod_int mbedtls_mpi_mod_int
+mpi_mod_mpi mbedtls_mpi_mod_mpi
+mpi_msb mbedtls_mpi_bitlen
+mpi_mul_int mbedtls_mpi_mul_int
+mpi_mul_mpi mbedtls_mpi_mul_mpi
+mpi_read_binary mbedtls_mpi_read_binary
+mpi_read_file mbedtls_mpi_read_file
+mpi_read_string mbedtls_mpi_read_string
+mpi_safe_cond_assign mbedtls_mpi_safe_cond_assign
+mpi_safe_cond_swap mbedtls_mpi_safe_cond_swap
+mpi_self_test mbedtls_mpi_self_test
+mpi_set_bit mbedtls_mpi_set_bit
+mpi_shift_l mbedtls_mpi_shift_l
+mpi_shift_r mbedtls_mpi_shift_r
+mpi_shrink mbedtls_mpi_shrink
+mpi_size mbedtls_mpi_size
+mpi_sub_abs mbedtls_mpi_sub_abs
+mpi_sub_int mbedtls_mpi_sub_int
+mpi_sub_mpi mbedtls_mpi_sub_mpi
+mpi_swap mbedtls_mpi_swap
+mpi_write_binary mbedtls_mpi_write_binary
+mpi_write_file mbedtls_mpi_write_file
+mpi_write_string mbedtls_mpi_write_string
+net_accept mbedtls_net_accept
+net_bind mbedtls_net_bind
+net_close mbedtls_net_free
+net_connect mbedtls_net_connect
+net_recv mbedtls_net_recv
+net_recv_timeout mbedtls_net_recv_timeout
+net_send mbedtls_net_send
+net_set_block mbedtls_net_set_block
+net_set_nonblock mbedtls_net_set_nonblock
+net_usleep mbedtls_net_usleep
+oid_descriptor_t mbedtls_oid_descriptor_t
+oid_get_attr_short_name mbedtls_oid_get_attr_short_name
+oid_get_cipher_alg mbedtls_oid_get_cipher_alg
+oid_get_ec_grp mbedtls_oid_get_ec_grp
+oid_get_extended_key_usage mbedtls_oid_get_extended_key_usage
+oid_get_md_alg mbedtls_oid_get_md_alg
+oid_get_numeric_string mbedtls_oid_get_numeric_string
+oid_get_oid_by_ec_grp mbedtls_oid_get_oid_by_ec_grp
+oid_get_oid_by_md mbedtls_oid_get_oid_by_md
+oid_get_oid_by_pk_alg mbedtls_oid_get_oid_by_pk_alg
+oid_get_oid_by_sig_alg mbedtls_oid_get_oid_by_sig_alg
+oid_get_pk_alg mbedtls_oid_get_pk_alg
+oid_get_pkcs12_pbe_alg mbedtls_oid_get_pkcs12_pbe_alg
+oid_get_sig_alg mbedtls_oid_get_sig_alg
+oid_get_sig_alg_desc mbedtls_oid_get_sig_alg_desc
+oid_get_x509_ext_type mbedtls_oid_get_x509_ext_type
+operation_t mbedtls_operation_t
+padlock_supports mbedtls_padlock_has_support
+padlock_xcryptcbc mbedtls_padlock_xcryptcbc
+padlock_xcryptecb mbedtls_padlock_xcryptecb
+pem_context mbedtls_pem_context
+pem_free mbedtls_pem_free
+pem_init mbedtls_pem_init
+pem_read_buffer mbedtls_pem_read_buffer
+pem_write_buffer mbedtls_pem_write_buffer
+pk_can_do mbedtls_pk_can_do
+pk_check_pair mbedtls_pk_check_pair
+pk_context mbedtls_pk_context
+pk_debug mbedtls_pk_debug
+pk_debug_item mbedtls_pk_debug_item
+pk_debug_type mbedtls_pk_debug_type
+pk_decrypt mbedtls_pk_decrypt
+pk_ec mbedtls_pk_ec
+pk_encrypt mbedtls_pk_encrypt
+pk_free mbedtls_pk_free
+pk_get_len mbedtls_pk_get_len
+pk_get_name mbedtls_pk_get_name
+pk_get_size mbedtls_pk_get_bitlen
+pk_get_type mbedtls_pk_get_type
+pk_info_from_type mbedtls_pk_info_from_type
+pk_info_t mbedtls_pk_info_t
+pk_init mbedtls_pk_init
+pk_init_ctx mbedtls_pk_setup
+pk_init_ctx_rsa_alt mbedtls_pk_setup_rsa_alt
+pk_load_file mbedtls_pk_load_file
+pk_parse_key mbedtls_pk_parse_key
+pk_parse_keyfile mbedtls_pk_parse_keyfile
+pk_parse_public_key mbedtls_pk_parse_public_key
+pk_parse_public_keyfile mbedtls_pk_parse_public_keyfile
+pk_parse_subpubkey mbedtls_pk_parse_subpubkey
+pk_rsa mbedtls_pk_rsa
+pk_rsa_alt_decrypt_func mbedtls_pk_rsa_alt_decrypt_func
+pk_rsa_alt_key_len_func mbedtls_pk_rsa_alt_key_len_func
+pk_rsa_alt_sign_func mbedtls_pk_rsa_alt_sign_func
+pk_rsassa_pss_options mbedtls_pk_rsassa_pss_options
+pk_sign mbedtls_pk_sign
+pk_type_t mbedtls_pk_type_t
+pk_verify mbedtls_pk_verify
+pk_verify_ext mbedtls_pk_verify_ext
+pk_write_key_der mbedtls_pk_write_key_der
+pk_write_key_pem mbedtls_pk_write_key_pem
+pk_write_pubkey mbedtls_pk_write_pubkey
+pk_write_pubkey_der mbedtls_pk_write_pubkey_der
+pk_write_pubkey_pem mbedtls_pk_write_pubkey_pem
+pkcs11_context mbedtls_pkcs11_context
+pkcs11_decrypt mbedtls_pkcs11_decrypt
+pkcs11_priv_key_free mbedtls_pkcs11_priv_key_free
+pkcs11_priv_key_init mbedtls_pkcs11_priv_key_bind
+pkcs11_sign mbedtls_pkcs11_sign
+pkcs11_x509_cert_init mbedtls_pkcs11_x509_cert_bind
+pkcs12_derivation mbedtls_pkcs12_derivation
+pkcs12_pbe mbedtls_pkcs12_pbe
+pkcs12_pbe_sha1_rc4_128 mbedtls_pkcs12_pbe_sha1_rc4_128
+pkcs5_pbes2 mbedtls_pkcs5_pbes2
+pkcs5_pbkdf2_hmac mbedtls_pkcs5_pbkdf2_hmac
+pkcs5_self_test mbedtls_pkcs5_self_test
+platform_entropy_poll mbedtls_platform_entropy_poll
+platform_set_exit mbedtls_platform_set_exit
+platform_set_fprintf mbedtls_platform_set_fprintf
+platform_set_malloc_free mbedtls_platform_set_malloc_free
+platform_set_printf mbedtls_platform_set_printf
+platform_set_snprintf mbedtls_platform_set_snprintf
+polarssl_exit mbedtls_exit
+polarssl_fprintf mbedtls_fprintf
+polarssl_free mbedtls_free
+polarssl_malloc mbedtls_malloc
+polarssl_mutex_free mbedtls_mutex_free
+polarssl_mutex_init mbedtls_mutex_init
+polarssl_mutex_lock mbedtls_mutex_lock
+polarssl_mutex_unlock mbedtls_mutex_unlock
+polarssl_printf mbedtls_printf
+polarssl_snprintf mbedtls_snprintf
+polarssl_strerror mbedtls_strerror
+ripemd160 mbedtls_ripemd160
+ripemd160_context mbedtls_ripemd160_context
+ripemd160_file mbedtls_ripemd160_file
+ripemd160_finish mbedtls_ripemd160_finish
+ripemd160_free mbedtls_ripemd160_free
+ripemd160_hmac mbedtls_ripemd160_hmac
+ripemd160_hmac_finish mbedtls_ripemd160_hmac_finish
+ripemd160_hmac_reset mbedtls_ripemd160_hmac_reset
+ripemd160_hmac_starts mbedtls_ripemd160_hmac_starts
+ripemd160_hmac_update mbedtls_ripemd160_hmac_update
+ripemd160_info mbedtls_ripemd160_info
+ripemd160_init mbedtls_ripemd160_init
+ripemd160_process mbedtls_ripemd160_process
+ripemd160_self_test mbedtls_ripemd160_self_test
+ripemd160_starts mbedtls_ripemd160_starts
+ripemd160_update mbedtls_ripemd160_update
+rsa_alt_context mbedtls_rsa_alt_context
+rsa_alt_info mbedtls_rsa_alt_info
+rsa_check_privkey mbedtls_rsa_check_privkey
+rsa_check_pub_priv mbedtls_rsa_check_pub_priv
+rsa_check_pubkey mbedtls_rsa_check_pubkey
+rsa_context mbedtls_rsa_context
+rsa_copy mbedtls_rsa_copy
+rsa_decrypt_func mbedtls_rsa_decrypt_func
+rsa_free mbedtls_rsa_free
+rsa_gen_key mbedtls_rsa_gen_key
+rsa_info mbedtls_rsa_info
+rsa_init mbedtls_rsa_init
+rsa_key_len_func mbedtls_rsa_key_len_func
+rsa_pkcs1_decrypt mbedtls_rsa_pkcs1_decrypt
+rsa_pkcs1_encrypt mbedtls_rsa_pkcs1_encrypt
+rsa_pkcs1_sign mbedtls_rsa_pkcs1_sign
+rsa_pkcs1_verify mbedtls_rsa_pkcs1_verify
+rsa_private mbedtls_rsa_private
+rsa_public mbedtls_rsa_public
+rsa_rsaes_oaep_decrypt mbedtls_rsa_rsaes_oaep_decrypt
+rsa_rsaes_oaep_encrypt mbedtls_rsa_rsaes_oaep_encrypt
+rsa_rsaes_pkcs1_v15_decrypt mbedtls_rsa_rsaes_pkcs1_v15_decrypt
+rsa_rsaes_pkcs1_v15_encrypt mbedtls_rsa_rsaes_pkcs1_v15_encrypt
+rsa_rsassa_pkcs1_v15_sign mbedtls_rsa_rsassa_pkcs1_v15_sign
+rsa_rsassa_pkcs1_v15_verify mbedtls_rsa_rsassa_pkcs1_v15_verify
+rsa_rsassa_pss_sign mbedtls_rsa_rsassa_pss_sign
+rsa_rsassa_pss_verify mbedtls_rsa_rsassa_pss_verify
+rsa_rsassa_pss_verify_ext mbedtls_rsa_rsassa_pss_verify_ext
+rsa_self_test mbedtls_rsa_self_test
+rsa_set_padding mbedtls_rsa_set_padding
+rsa_sign_func mbedtls_rsa_sign_func
+safer_memcmp mbedtls_ssl_safer_memcmp
+set_alarm mbedtls_set_alarm
+sha1 mbedtls_sha1
+sha1_context mbedtls_sha1_context
+sha1_file mbedtls_sha1_file
+sha1_finish mbedtls_sha1_finish
+sha1_free mbedtls_sha1_free
+sha1_hmac mbedtls_sha1_hmac
+sha1_hmac_finish mbedtls_sha1_hmac_finish
+sha1_hmac_reset mbedtls_sha1_hmac_reset
+sha1_hmac_starts mbedtls_sha1_hmac_starts
+sha1_hmac_update mbedtls_sha1_hmac_update
+sha1_info mbedtls_sha1_info
+sha1_init mbedtls_sha1_init
+sha1_process mbedtls_sha1_process
+sha1_self_test mbedtls_sha1_self_test
+sha1_starts mbedtls_sha1_starts
+sha1_update mbedtls_sha1_update
+sha224_info mbedtls_sha224_info
+sha256 mbedtls_sha256
+sha256_context mbedtls_sha256_context
+sha256_file mbedtls_sha256_file
+sha256_finish mbedtls_sha256_finish
+sha256_free mbedtls_sha256_free
+sha256_hmac mbedtls_sha256_hmac
+sha256_hmac_finish mbedtls_sha256_hmac_finish
+sha256_hmac_reset mbedtls_sha256_hmac_reset
+sha256_hmac_starts mbedtls_sha256_hmac_starts
+sha256_hmac_update mbedtls_sha256_hmac_update
+sha256_info mbedtls_sha256_info
+sha256_init mbedtls_sha256_init
+sha256_process mbedtls_sha256_process
+sha256_self_test mbedtls_sha256_self_test
+sha256_starts mbedtls_sha256_starts
+sha256_update mbedtls_sha256_update
+sha384_info mbedtls_sha384_info
+sha512 mbedtls_sha512
+sha512_context mbedtls_sha512_context
+sha512_file mbedtls_sha512_file
+sha512_finish mbedtls_sha512_finish
+sha512_free mbedtls_sha512_free
+sha512_hmac mbedtls_sha512_hmac
+sha512_hmac_finish mbedtls_sha512_hmac_finish
+sha512_hmac_reset mbedtls_sha512_hmac_reset
+sha512_hmac_starts mbedtls_sha512_hmac_starts
+sha512_hmac_update mbedtls_sha512_hmac_update
+sha512_info mbedtls_sha512_info
+sha512_init mbedtls_sha512_init
+sha512_process mbedtls_sha512_process
+sha512_self_test mbedtls_sha512_self_test
+sha512_starts mbedtls_sha512_starts
+sha512_update mbedtls_sha512_update
+source_state mbedtls_entropy_source_state
+ssl_cache_context mbedtls_ssl_cache_context
+ssl_cache_entry mbedtls_ssl_cache_entry
+ssl_cache_free mbedtls_ssl_cache_free
+ssl_cache_get mbedtls_ssl_cache_get
+ssl_cache_init mbedtls_ssl_cache_init
+ssl_cache_set mbedtls_ssl_cache_set
+ssl_cache_set_max_entries mbedtls_ssl_cache_set_max_entries
+ssl_cache_set_timeout mbedtls_ssl_cache_set_timeout
+ssl_check_cert_usage mbedtls_ssl_check_cert_usage
+ssl_ciphersuite_from_id mbedtls_ssl_ciphersuite_from_id
+ssl_ciphersuite_from_string mbedtls_ssl_ciphersuite_from_string
+ssl_ciphersuite_t mbedtls_ssl_ciphersuite_t
+ssl_ciphersuite_uses_ec mbedtls_ssl_ciphersuite_uses_ec
+ssl_ciphersuite_uses_psk mbedtls_ssl_ciphersuite_uses_psk
+ssl_close_notify mbedtls_ssl_close_notify
+ssl_context mbedtls_ssl_context
+ssl_cookie_check mbedtls_ssl_cookie_check
+ssl_cookie_check_t mbedtls_ssl_cookie_check_t
+ssl_cookie_ctx mbedtls_ssl_cookie_ctx
+ssl_cookie_free mbedtls_ssl_cookie_free
+ssl_cookie_init mbedtls_ssl_cookie_init
+ssl_cookie_set_timeout mbedtls_ssl_cookie_set_timeout
+ssl_cookie_setup mbedtls_ssl_cookie_setup
+ssl_cookie_write mbedtls_ssl_cookie_write
+ssl_cookie_write_t mbedtls_ssl_cookie_write_t
+ssl_curve_is_acceptable mbedtls_ssl_curve_is_acceptable
+ssl_derive_keys mbedtls_ssl_derive_keys
+ssl_dtls_replay_check mbedtls_ssl_dtls_replay_check
+ssl_dtls_replay_update mbedtls_ssl_dtls_replay_update
+ssl_fetch_input mbedtls_ssl_fetch_input
+ssl_flight_item mbedtls_ssl_flight_item
+ssl_flush_output mbedtls_ssl_flush_output
+ssl_free mbedtls_ssl_free
+ssl_get_alpn_protocol mbedtls_ssl_get_alpn_protocol
+ssl_get_bytes_avail mbedtls_ssl_get_bytes_avail
+ssl_get_ciphersuite mbedtls_ssl_get_ciphersuite
+ssl_get_ciphersuite_id mbedtls_ssl_get_ciphersuite_id
+ssl_get_ciphersuite_name mbedtls_ssl_get_ciphersuite_name
+ssl_get_ciphersuite_sig_pk_alg mbedtls_ssl_get_ciphersuite_sig_pk_alg
+ssl_get_peer_cert mbedtls_ssl_get_peer_cert
+ssl_get_record_expansion mbedtls_ssl_get_record_expansion
+ssl_get_session mbedtls_ssl_get_session
+ssl_get_verify_result mbedtls_ssl_get_verify_result
+ssl_get_version mbedtls_ssl_get_version
+ssl_handshake mbedtls_ssl_handshake
+ssl_handshake_client_step mbedtls_ssl_handshake_client_step
+ssl_handshake_free mbedtls_ssl_handshake_free
+ssl_handshake_params mbedtls_ssl_handshake_params
+ssl_handshake_server_step mbedtls_ssl_handshake_server_step
+ssl_handshake_step mbedtls_ssl_handshake_step
+ssl_handshake_wrapup mbedtls_ssl_handshake_wrapup
+ssl_hdr_len mbedtls_ssl_hdr_len
+ssl_hs_hdr_len mbedtls_ssl_hs_hdr_len
+ssl_hw_record_activate mbedtls_ssl_hw_record_activate
+ssl_hw_record_finish mbedtls_ssl_hw_record_finish
+ssl_hw_record_init mbedtls_ssl_hw_record_init
+ssl_hw_record_read mbedtls_ssl_hw_record_read
+ssl_hw_record_reset mbedtls_ssl_hw_record_reset
+ssl_hw_record_write mbedtls_ssl_hw_record_write
+ssl_init mbedtls_ssl_init
+ssl_key_cert mbedtls_ssl_key_cert
+ssl_legacy_renegotiation mbedtls_ssl_conf_legacy_renegotiation
+ssl_list_ciphersuites mbedtls_ssl_list_ciphersuites
+ssl_md_alg_from_hash mbedtls_ssl_md_alg_from_hash
+ssl_optimize_checksum mbedtls_ssl_optimize_checksum
+ssl_own_cert mbedtls_ssl_own_cert
+ssl_own_key mbedtls_ssl_own_key
+ssl_parse_certificate mbedtls_ssl_parse_certificate
+ssl_parse_change_cipher_spec mbedtls_ssl_parse_change_cipher_spec
+ssl_parse_finished mbedtls_ssl_parse_finished
+ssl_pk_alg_from_sig mbedtls_ssl_pk_alg_from_sig
+ssl_pkcs11_decrypt mbedtls_ssl_pkcs11_decrypt
+ssl_pkcs11_key_len mbedtls_ssl_pkcs11_key_len
+ssl_pkcs11_sign mbedtls_ssl_pkcs11_sign
+ssl_psk_derive_premaster mbedtls_ssl_psk_derive_premaster
+ssl_read mbedtls_ssl_read
+ssl_read_record mbedtls_ssl_read_record
+ssl_read_version mbedtls_ssl_read_version
+ssl_recv_flight_completed mbedtls_ssl_recv_flight_completed
+ssl_renegotiate mbedtls_ssl_renegotiate
+ssl_resend mbedtls_ssl_resend
+ssl_reset_checksum mbedtls_ssl_reset_checksum
+ssl_send_alert_message mbedtls_ssl_send_alert_message
+ssl_send_fatal_handshake_failure mbedtls_ssl_send_fatal_handshake_failure
+ssl_send_flight_completed mbedtls_ssl_send_flight_completed
+ssl_session mbedtls_ssl_session
+ssl_session_free mbedtls_ssl_session_free
+ssl_session_init mbedtls_ssl_session_init
+ssl_session_reset mbedtls_ssl_session_reset
+ssl_set_alpn_protocols mbedtls_ssl_conf_alpn_protocols
+ssl_set_arc4_support mbedtls_ssl_conf_arc4_support
+ssl_set_authmode mbedtls_ssl_conf_authmode
+ssl_set_bio mbedtls_ssl_set_bio
+ssl_set_ca_chain mbedtls_ssl_conf_ca_chain
+ssl_set_cbc_record_splitting mbedtls_ssl_conf_cbc_record_splitting
+ssl_set_ciphersuites mbedtls_ssl_conf_ciphersuites
+ssl_set_ciphersuites_for_version mbedtls_ssl_conf_ciphersuites_for_version
+ssl_set_client_transport_id mbedtls_ssl_set_client_transport_id
+ssl_set_curves mbedtls_ssl_conf_curves
+ssl_set_dbg mbedtls_ssl_conf_dbg
+ssl_set_dh_param mbedtls_ssl_conf_dh_param
+ssl_set_dh_param_ctx mbedtls_ssl_conf_dh_param_ctx
+ssl_set_dtls_anti_replay mbedtls_ssl_conf_dtls_anti_replay
+ssl_set_dtls_badmac_limit mbedtls_ssl_conf_dtls_badmac_limit
+ssl_set_dtls_cookies mbedtls_ssl_conf_dtls_cookies
+ssl_set_encrypt_then_mac mbedtls_ssl_conf_encrypt_then_mac
+ssl_set_endpoint mbedtls_ssl_conf_endpoint
+ssl_set_extended_master_secret mbedtls_ssl_conf_extended_master_secret
+ssl_set_fallback mbedtls_ssl_conf_fallback
+ssl_set_handshake_timeout mbedtls_ssl_conf_handshake_timeout
+ssl_set_hostname mbedtls_ssl_set_hostname
+ssl_set_max_frag_len mbedtls_ssl_conf_max_frag_len
+ssl_set_max_version mbedtls_ssl_conf_max_version
+ssl_set_min_version mbedtls_ssl_conf_min_version
+ssl_set_own_cert mbedtls_ssl_conf_own_cert
+ssl_set_own_cert_alt mbedtls_ssl_set_own_cert_alt
+ssl_set_own_cert_rsa mbedtls_ssl_set_own_cert_rsa
+ssl_set_psk mbedtls_ssl_conf_psk
+ssl_set_psk_cb mbedtls_ssl_conf_psk_cb
+ssl_set_renegotiation mbedtls_ssl_conf_renegotiation
+ssl_set_renegotiation_enforced mbedtls_ssl_conf_renegotiation_enforced
+ssl_set_renegotiation_period mbedtls_ssl_conf_renegotiation_period
+ssl_set_rng mbedtls_ssl_conf_rng
+ssl_set_session mbedtls_ssl_set_session
+ssl_set_session_cache mbedtls_ssl_conf_session_cache
+ssl_set_session_ticket_lifetime mbedtls_ssl_conf_session_ticket_lifetime
+ssl_set_session_tickets mbedtls_ssl_conf_session_tickets
+ssl_set_sni mbedtls_ssl_conf_sni
+ssl_set_transport mbedtls_ssl_conf_transport
+ssl_set_truncated_hmac mbedtls_ssl_conf_truncated_hmac
+ssl_set_verify mbedtls_ssl_conf_verify
+ssl_sig_from_pk mbedtls_ssl_sig_from_pk
+ssl_states mbedtls_ssl_states
+ssl_ticket_keys mbedtls_ssl_ticket_keys
+ssl_transform mbedtls_ssl_transform
+ssl_transform_free mbedtls_ssl_transform_free
+ssl_write mbedtls_ssl_write
+ssl_write_certificate mbedtls_ssl_write_certificate
+ssl_write_change_cipher_spec mbedtls_ssl_write_change_cipher_spec
+ssl_write_finished mbedtls_ssl_write_finished
+ssl_write_record mbedtls_ssl_write_record
+ssl_write_version mbedtls_ssl_write_version
+supported_ciphers mbedtls_cipher_supported
+t_sint mbedtls_mpi_sint
+t_udbl mbedtls_t_udbl
+t_uint mbedtls_mpi_uint
+test_ca_crt mbedtls_test_ca_crt
+test_ca_crt_ec mbedtls_test_ca_crt_ec
+test_ca_crt_rsa mbedtls_test_ca_crt_rsa
+test_ca_key mbedtls_test_ca_key
+test_ca_key_ec mbedtls_test_ca_key_ec
+test_ca_key_rsa mbedtls_test_ca_key_rsa
+test_ca_list mbedtls_test_cas_pem
+test_ca_pwd mbedtls_test_ca_pwd
+test_ca_pwd_ec mbedtls_test_ca_pwd_ec
+test_ca_pwd_rsa mbedtls_test_ca_pwd_rsa
+test_cli_crt mbedtls_test_cli_crt
+test_cli_crt_ec mbedtls_test_cli_crt_ec
+test_cli_crt_rsa mbedtls_test_cli_crt_rsa
+test_cli_key mbedtls_test_cli_key
+test_cli_key_ec mbedtls_test_cli_key_ec
+test_cli_key_rsa mbedtls_test_cli_key_rsa
+test_dhm_params mbedtls_test_dhm_params
+test_srv_crt mbedtls_test_srv_crt
+test_srv_crt_ec mbedtls_test_srv_crt_ec
+test_srv_crt_rsa mbedtls_test_srv_crt_rsa
+test_srv_key mbedtls_test_srv_key
+test_srv_key_ec mbedtls_test_srv_key_ec
+test_srv_key_rsa mbedtls_test_srv_key_rsa
+threading_mutex_t mbedtls_threading_mutex_t
+threading_set_alt mbedtls_threading_set_alt
+timing_self_test mbedtls_timing_self_test
+version_check_feature mbedtls_version_check_feature
+version_get_number mbedtls_version_get_number
+version_get_string mbedtls_version_get_string
+version_get_string_full mbedtls_version_get_string_full
+x509_bitstring mbedtls_x509_bitstring
+x509_buf mbedtls_x509_buf
+x509_crl mbedtls_x509_crl
+x509_crl_entry mbedtls_x509_crl_entry
+x509_crl_free mbedtls_x509_crl_free
+x509_crl_info mbedtls_x509_crl_info
+x509_crl_init mbedtls_x509_crl_init
+x509_crl_parse mbedtls_x509_crl_parse
+x509_crl_parse_der mbedtls_x509_crl_parse_der
+x509_crl_parse_file mbedtls_x509_crl_parse_file
+x509_crt mbedtls_x509_crt
+x509_crt_check_extended_key_usage mbedtls_x509_crt_check_extended_key_usage
+x509_crt_check_key_usage mbedtls_x509_crt_check_key_usage
+x509_crt_free mbedtls_x509_crt_free
+x509_crt_info mbedtls_x509_crt_info
+x509_crt_init mbedtls_x509_crt_init
+x509_crt_parse mbedtls_x509_crt_parse
+x509_crt_parse_der mbedtls_x509_crt_parse_der
+x509_crt_parse_file mbedtls_x509_crt_parse_file
+x509_crt_parse_path mbedtls_x509_crt_parse_path
+x509_crt_revoked mbedtls_x509_crt_is_revoked
+x509_crt_verify mbedtls_x509_crt_verify
+x509_crt_verify_info mbedtls_x509_crt_verify_info
+x509_csr mbedtls_x509_csr
+x509_csr_free mbedtls_x509_csr_free
+x509_csr_info mbedtls_x509_csr_info
+x509_csr_init mbedtls_x509_csr_init
+x509_csr_parse mbedtls_x509_csr_parse
+x509_csr_parse_der mbedtls_x509_csr_parse_der
+x509_csr_parse_file mbedtls_x509_csr_parse_file
+x509_dn_gets mbedtls_x509_dn_gets
+x509_get_alg mbedtls_x509_get_alg
+x509_get_alg_null mbedtls_x509_get_alg_null
+x509_get_ext mbedtls_x509_get_ext
+x509_get_name mbedtls_x509_get_name
+x509_get_rsassa_pss_params mbedtls_x509_get_rsassa_pss_params
+x509_get_serial mbedtls_x509_get_serial
+x509_get_sig mbedtls_x509_get_sig
+x509_get_sig_alg mbedtls_x509_get_sig_alg
+x509_get_time mbedtls_x509_get_time
+x509_key_size_helper mbedtls_x509_key_size_helper
+x509_name mbedtls_x509_name
+x509_oid_get_description mbedtls_x509_oid_get_description
+x509_oid_get_numeric_string mbedtls_x509_oid_get_numeric_string
+x509_self_test mbedtls_x509_self_test
+x509_sequence mbedtls_x509_sequence
+x509_serial_gets mbedtls_x509_serial_gets
+x509_set_extension mbedtls_x509_set_extension
+x509_sig_alg_gets mbedtls_x509_sig_alg_gets
+x509_string_to_names mbedtls_x509_string_to_names
+x509_time mbedtls_x509_time
+x509_time_expired mbedtls_x509_time_is_past
+x509_time_future mbedtls_x509_time_is_future
+x509_write_extensions mbedtls_x509_write_extensions
+x509_write_names mbedtls_x509_write_names
+x509_write_sig mbedtls_x509_write_sig
+x509write_cert mbedtls_x509write_cert
+x509write_crt_der mbedtls_x509write_crt_der
+x509write_crt_free mbedtls_x509write_crt_free
+x509write_crt_init mbedtls_x509write_crt_init
+x509write_crt_pem mbedtls_x509write_crt_pem
+x509write_crt_set_authority_key_identifier mbedtls_x509write_crt_set_authority_key_identifier
+x509write_crt_set_basic_constraints mbedtls_x509write_crt_set_basic_constraints
+x509write_crt_set_extension mbedtls_x509write_crt_set_extension
+x509write_crt_set_issuer_key mbedtls_x509write_crt_set_issuer_key
+x509write_crt_set_issuer_name mbedtls_x509write_crt_set_issuer_name
+x509write_crt_set_key_usage mbedtls_x509write_crt_set_key_usage
+x509write_crt_set_md_alg mbedtls_x509write_crt_set_md_alg
+x509write_crt_set_ns_cert_type mbedtls_x509write_crt_set_ns_cert_type
+x509write_crt_set_serial mbedtls_x509write_crt_set_serial
+x509write_crt_set_subject_key mbedtls_x509write_crt_set_subject_key
+x509write_crt_set_subject_key_identifier mbedtls_x509write_crt_set_subject_key_identifier
+x509write_crt_set_subject_name mbedtls_x509write_crt_set_subject_name
+x509write_crt_set_validity mbedtls_x509write_crt_set_validity
+x509write_crt_set_version mbedtls_x509write_crt_set_version
+x509write_csr mbedtls_x509write_csr
+x509write_csr_der mbedtls_x509write_csr_der
+x509write_csr_free mbedtls_x509write_csr_free
+x509write_csr_init mbedtls_x509write_csr_init
+x509write_csr_pem mbedtls_x509write_csr_pem
+x509write_csr_set_extension mbedtls_x509write_csr_set_extension
+x509write_csr_set_key mbedtls_x509write_csr_set_key
+x509write_csr_set_key_usage mbedtls_x509write_csr_set_key_usage
+x509write_csr_set_md_alg mbedtls_x509write_csr_set_md_alg
+x509write_csr_set_ns_cert_type mbedtls_x509write_csr_set_ns_cert_type
+x509write_csr_set_subject_name mbedtls_x509write_csr_set_subject_name
+xtea_context mbedtls_xtea_context
+xtea_crypt_cbc mbedtls_xtea_crypt_cbc
+xtea_crypt_ecb mbedtls_xtea_crypt_ecb
+xtea_free mbedtls_xtea_free
+xtea_init mbedtls_xtea_init
+xtea_self_test mbedtls_xtea_self_test
+xtea_setup mbedtls_xtea_setup
diff --git a/lib/mbedtls-2.27.0/scripts/data_files/version_features.fmt b/lib/mbedtls-2.27.0/scripts/data_files/version_features.fmt
new file mode 100644
index 0000000..d4bf774
--- /dev/null
+++ b/lib/mbedtls-2.27.0/scripts/data_files/version_features.fmt
@@ -0,0 +1,54 @@
+/*
+ * Version feature information
+ *
+ * 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.
+ */
+
+#include "common.h"
+
+#if defined(MBEDTLS_VERSION_C)
+
+#include "mbedtls/version.h"
+
+#include <string.h>
+
+static const char * const features[] = {
+#if defined(MBEDTLS_VERSION_FEATURES)
+FEATURE_DEFINES
+#endif /* MBEDTLS_VERSION_FEATURES */
+ NULL
+};
+
+int mbedtls_version_check_feature( const char *feature )
+{
+ const char * const *idx = features;
+
+ if( *idx == NULL )
+ return( -2 );
+
+ if( feature == NULL )
+ return( -1 );
+
+ while( *idx != NULL )
+ {
+ if( !strcmp( *idx, feature ) )
+ return( 0 );
+ idx++;
+ }
+ return( -1 );
+}
+
+#endif /* MBEDTLS_VERSION_C */
diff --git a/lib/mbedtls-2.27.0/scripts/data_files/vs2010-app-template.vcxproj b/lib/mbedtls-2.27.0/scripts/data_files/vs2010-app-template.vcxproj
new file mode 100644
index 0000000..039fd09
--- /dev/null
+++ b/lib/mbedtls-2.27.0/scripts/data_files/vs2010-app-template.vcxproj
@@ -0,0 +1,171 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <ItemGroup>
+ <SOURCES>
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="mbedTLS.vcxproj">
+ <Project>{46cf2d25-6a36-4189-b59c-e4815388e554}</Project>
+ <LinkLibraryDependencies>true</LinkLibraryDependencies>
+ </ProjectReference>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid><GUID></ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ <RootNamespace><APPNAME></RootNamespace>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <LinkIncremental>true</LinkIncremental>
+ <IntDir>$(Configuration)\$(TargetName)\</IntDir>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <LinkIncremental>true</LinkIncremental>
+ <IntDir>$(Configuration)\$(TargetName)\</IntDir>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <LinkIncremental>false</LinkIncremental>
+ <IntDir>$(Configuration)\$(TargetName)\</IntDir>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <LinkIncremental>false</LinkIncremental>
+ <IntDir>$(Configuration)\$(TargetName)\</IntDir>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>
+INCLUDE_DIRECTORIES
+ </AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <AdditionalLibraryDirectories>Debug</AdditionalLibraryDirectories>
+ </Link>
+ <ProjectReference>
+ <LinkLibraryDependencies>false</LinkLibraryDependencies>
+ </ProjectReference>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>
+INCLUDE_DIRECTORIES
+ </AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <AdditionalLibraryDirectories>Debug</AdditionalLibraryDirectories>
+ </Link>
+ <ProjectReference>
+ <LinkLibraryDependencies>false</LinkLibraryDependencies>
+ </ProjectReference>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>
+INCLUDE_DIRECTORIES
+ </AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ <AdditionalLibraryDirectories>Release</AdditionalLibraryDirectories>
+ <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>
+INCLUDE_DIRECTORIES
+ </AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ <AdditionalLibraryDirectories>Release</AdditionalLibraryDirectories>
+ <AdditionalDependencies>%(AdditionalDependencies);</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
diff --git a/lib/mbedtls-2.27.0/scripts/data_files/vs2010-main-template.vcxproj b/lib/mbedtls-2.27.0/scripts/data_files/vs2010-main-template.vcxproj
new file mode 100644
index 0000000..c0f3a3c
--- /dev/null
+++ b/lib/mbedtls-2.27.0/scripts/data_files/vs2010-main-template.vcxproj
@@ -0,0 +1,156 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{46CF2D25-6A36-4189-B59C-E4815388E554}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ <RootNamespace>mbedTLS</RootNamespace>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <LinkIncremental>true</LinkIncremental>
+ <IntDir>$(Configuration)\$(TargetName)\</IntDir>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <LinkIncremental>true</LinkIncremental>
+ <IntDir>$(Configuration)\$(TargetName)\</IntDir>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <LinkIncremental>false</LinkIncremental>
+ <IntDir>$(Configuration)\$(TargetName)\</IntDir>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <LinkIncremental>false</LinkIncremental>
+ <IntDir>$(Configuration)\$(TargetName)\</IntDir>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>_USRDLL;MBEDTLS_EXPORTS;KRML_VERIFIED_UINT128;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>
+INCLUDE_DIRECTORIES
+ </AdditionalIncludeDirectories>
+ <CompileAs>CompileAsC</CompileAs>
+ </ClCompile>
+ <Link>
+ <SubSystem>Windows</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>_USRDLL;MBEDTLS_EXPORTS;KRML_VERIFIED_UINT128;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>
+INCLUDE_DIRECTORIES
+ </AdditionalIncludeDirectories>
+ <CompileAs>CompileAsC</CompileAs>
+ </ClCompile>
+ <Link>
+ <SubSystem>Windows</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>NDEBUG;_USRDLL;MBEDTLS_EXPORTS;KRML_VERIFIED_UINT128;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>
+INCLUDE_DIRECTORIES
+ </AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <SubSystem>Windows</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>WIN64;NDEBUG;_WINDOWS;_USRDLL;MBEDTLS_EXPORTS;KRML_VERIFIED_UINT128;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>
+INCLUDE_DIRECTORIES
+ </AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <SubSystem>Windows</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+HEADER_ENTRIES
+ </ItemGroup>
+ <ItemGroup>
+SOURCE_ENTRIES
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
diff --git a/lib/mbedtls-2.27.0/scripts/data_files/vs2010-sln-template.sln b/lib/mbedtls-2.27.0/scripts/data_files/vs2010-sln-template.sln
new file mode 100644
index 0000000..fc65a0b
--- /dev/null
+++ b/lib/mbedtls-2.27.0/scripts/data_files/vs2010-sln-template.sln
@@ -0,0 +1,28 @@
+
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual C++ Express 2010
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mbedTLS", "mbedTLS.vcxproj", "{46CF2D25-6A36-4189-B59C-E4815388E554}"
+EndProject
+APP_ENTRIES
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {46CF2D25-6A36-4189-B59C-E4815388E554}.Debug|Win32.ActiveCfg = Debug|Win32
+ {46CF2D25-6A36-4189-B59C-E4815388E554}.Debug|Win32.Build.0 = Debug|Win32
+ {46CF2D25-6A36-4189-B59C-E4815388E554}.Debug|x64.ActiveCfg = Debug|x64
+ {46CF2D25-6A36-4189-B59C-E4815388E554}.Debug|x64.Build.0 = Debug|x64
+ {46CF2D25-6A36-4189-B59C-E4815388E554}.Release|Win32.ActiveCfg = Release|Win32
+ {46CF2D25-6A36-4189-B59C-E4815388E554}.Release|Win32.Build.0 = Release|Win32
+ {46CF2D25-6A36-4189-B59C-E4815388E554}.Release|x64.ActiveCfg = Release|x64
+ {46CF2D25-6A36-4189-B59C-E4815388E554}.Release|x64.Build.0 = Release|x64
+CONF_ENTRIES
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/lib/mbedtls-2.27.0/scripts/data_files/vs6-app-template.dsp b/lib/mbedtls-2.27.0/scripts/data_files/vs6-app-template.dsp
new file mode 100644
index 0000000..87dbea2
--- /dev/null
+++ b/lib/mbedtls-2.27.0/scripts/data_files/vs6-app-template.dsp
@@ -0,0 +1,101 @@
+# Microsoft Developer Studio Project File - Name="<APPNAME>" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=<APPNAME> - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "<APPNAME>.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "<APPNAME>.mak" CFG="<APPNAME> - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "<APPNAME> - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "<APPNAME> - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "<APPNAME> - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir ""
+# PROP BASE Intermediate_Dir "temp"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir ""
+# PROP Intermediate_Dir "temp"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x40c /d "NDEBUG"
+# ADD RSC /l 0x40c /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+
+!ELSEIF "$(CFG)" == "<APPNAME> - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir ""
+# PROP BASE Intermediate_Dir "temp"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir ""
+# PROP Intermediate_Dir "temp"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x40c /d "_DEBUG"
+# ADD RSC /l 0x40c /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+
+!ENDIF
+
+# Begin Target
+
+# Name "<APPNAME> - Win32 Release"
+# Name "<APPNAME> - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\programs\<PATHNAME>.c
+# ADD CPP /I "../../include"
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/lib/mbedtls-2.27.0/scripts/data_files/vs6-main-template.dsp b/lib/mbedtls-2.27.0/scripts/data_files/vs6-main-template.dsp
new file mode 100644
index 0000000..89d3fc7
--- /dev/null
+++ b/lib/mbedtls-2.27.0/scripts/data_files/vs6-main-template.dsp
@@ -0,0 +1,94 @@
+# Microsoft Developer Studio Project File - Name="mbedtls" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=mbedtls - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "mbedtls.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "mbedtls.mak" CFG="mbedtls - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "mbedtls - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "mbedtls - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "mbedtls - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir ""
+# PROP BASE Intermediate_Dir "temp"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir ""
+# PROP Intermediate_Dir "temp"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../../include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD BASE RSC /l 0x40c /d "NDEBUG"
+# ADD RSC /l 0x40c /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "mbedtls - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir ""
+# PROP BASE Intermediate_Dir "temp"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir ""
+# PROP Intermediate_Dir "temp"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /GX /Z7 /Od /I "../../include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x40c /d "_DEBUG"
+# ADD RSC /l 0x40c /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ENDIF
+
+# Begin Target
+
+# Name "mbedtls - Win32 Release"
+# Name "mbedtls - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+SOURCE_ENTRIES
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+HEADER_ENTRIES
+# End Group
+# End Target
+# End Project
diff --git a/lib/mbedtls-2.27.0/scripts/data_files/vs6-workspace-template.dsw b/lib/mbedtls-2.27.0/scripts/data_files/vs6-workspace-template.dsw
new file mode 100644
index 0000000..ef90098
--- /dev/null
+++ b/lib/mbedtls-2.27.0/scripts/data_files/vs6-workspace-template.dsw
@@ -0,0 +1,18 @@
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+APP_ENTRIES
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
diff --git a/lib/mbedtls-2.27.0/scripts/ecc-heap.sh b/lib/mbedtls-2.27.0/scripts/ecc-heap.sh
new file mode 100755
index 0000000..8d1beee
--- /dev/null
+++ b/lib/mbedtls-2.27.0/scripts/ecc-heap.sh
@@ -0,0 +1,89 @@
+#!/bin/sh
+
+# Measure heap usage (and performance) of ECC operations with various values of
+# the relevant tunable compile-time parameters.
+#
+# Usage (preferably on a 32-bit platform):
+# cmake -D CMAKE_BUILD_TYPE=Release .
+# scripts/ecc-heap.sh | tee ecc-heap.log
+#
+# 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.
+
+set -eu
+
+CONFIG_H='include/mbedtls/config.h'
+
+if [ -r $CONFIG_H ]; then :; else
+ echo "$CONFIG_H not found" >&2
+ exit 1
+fi
+
+if grep -i cmake Makefile >/dev/null; then :; else
+ echo "Needs Cmake" >&2
+ exit 1
+fi
+
+if git status | grep -F $CONFIG_H >/dev/null 2>&1; then
+ echo "config.h not clean" >&2
+ exit 1
+fi
+
+CONFIG_BAK=${CONFIG_H}.bak
+cp $CONFIG_H $CONFIG_BAK
+
+cat << EOF >$CONFIG_H
+#define MBEDTLS_PLATFORM_C
+#define MBEDTLS_PLATFORM_MEMORY
+#define MBEDTLS_MEMORY_BUFFER_ALLOC_C
+#define MBEDTLS_MEMORY_DEBUG
+
+#define MBEDTLS_TIMING_C
+
+#define MBEDTLS_BIGNUM_C
+#define MBEDTLS_ECP_C
+#define MBEDTLS_ASN1_PARSE_C
+#define MBEDTLS_ASN1_WRITE_C
+#define MBEDTLS_ECDSA_C
+#define MBEDTLS_ECDH_C
+
+#define MBEDTLS_ECP_DP_SECP192R1_ENABLED
+#define MBEDTLS_ECP_DP_SECP224R1_ENABLED
+#define MBEDTLS_ECP_DP_SECP256R1_ENABLED
+#define MBEDTLS_ECP_DP_SECP384R1_ENABLED
+#define MBEDTLS_ECP_DP_SECP521R1_ENABLED
+#define MBEDTLS_ECP_DP_CURVE25519_ENABLED
+
+#include "check_config.h"
+
+//#define MBEDTLS_ECP_WINDOW_SIZE 6
+//#define MBEDTLS_ECP_FIXED_POINT_OPTIM 1
+EOF
+
+for F in 0 1; do
+ for W in 2 3 4 5 6; do
+ scripts/config.py set MBEDTLS_ECP_WINDOW_SIZE $W
+ scripts/config.py set MBEDTLS_ECP_FIXED_POINT_OPTIM $F
+ make benchmark >/dev/null 2>&1
+ echo "fixed point optim = $F, max window size = $W"
+ echo "--------------------------------------------"
+ programs/test/benchmark
+ done
+done
+
+# cleanup
+
+mv $CONFIG_BAK $CONFIG_H
+make clean
diff --git a/lib/mbedtls-2.27.0/scripts/find-mem-leak.cocci b/lib/mbedtls-2.27.0/scripts/find-mem-leak.cocci
new file mode 100644
index 0000000..8179e2b
--- /dev/null
+++ b/lib/mbedtls-2.27.0/scripts/find-mem-leak.cocci
@@ -0,0 +1,20 @@
+@@
+expression x, y;
+statement S;
+@@
+ x = mbedtls_calloc(...);
+ y = mbedtls_calloc(...);
+ ...
+* if (x == NULL || y == NULL)
+ S
+
+@@
+expression x, y;
+statement S;
+@@
+ if (
+* (x = mbedtls_calloc(...)) == NULL
+ ||
+* (y = mbedtls_calloc(...)) == NULL
+ )
+ S
diff --git a/lib/mbedtls-2.27.0/scripts/footprint.sh b/lib/mbedtls-2.27.0/scripts/footprint.sh
new file mode 100755
index 0000000..4d7be7a
--- /dev/null
+++ b/lib/mbedtls-2.27.0/scripts/footprint.sh
@@ -0,0 +1,120 @@
+#!/bin/sh
+#
+# 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.
+#
+# Purpose
+#
+# This script determines ROM size (or code size) for the standard mbed TLS
+# configurations, when built for a Cortex M3/M4 target.
+#
+# Configurations included:
+# default include/mbedtls/config.h
+# thread configs/config-thread.h
+# suite-b configs/config-suite-b.h
+# psk configs/config-ccm-psk-tls1_2.h
+#
+# Usage: footprint.sh
+#
+set -eu
+
+CONFIG_H='include/mbedtls/config.h'
+
+if [ -r $CONFIG_H ]; then :; else
+ echo "$CONFIG_H not found" >&2
+ echo "This script needs to be run from the root of" >&2
+ echo "a git checkout or uncompressed tarball" >&2
+ exit 1
+fi
+
+if grep -i cmake Makefile >/dev/null; then
+ echo "Not compatible with CMake" >&2
+ exit 1
+fi
+
+if which arm-none-eabi-gcc >/dev/null 2>&1; then :; else
+ echo "You need the ARM-GCC toolchain in your path" >&2
+ echo "See https://launchpad.net/gcc-arm-embedded/" >&2
+ exit 1
+fi
+
+ARMGCC_FLAGS='-Os -march=armv7-m -mthumb'
+OUTFILE='00-footprint-summary.txt'
+
+log()
+{
+ echo "$@"
+ echo "$@" >> "$OUTFILE"
+}
+
+doit()
+{
+ NAME="$1"
+ FILE="$2"
+
+ log ""
+ log "$NAME ($FILE):"
+
+ cp $CONFIG_H ${CONFIG_H}.bak
+ if [ "$FILE" != $CONFIG_H ]; then
+ cp "$FILE" $CONFIG_H
+ fi
+
+ {
+ scripts/config.py unset MBEDTLS_NET_C || true
+ scripts/config.py unset MBEDTLS_TIMING_C || true
+ scripts/config.py unset MBEDTLS_FS_IO || true
+ scripts/config.py --force set MBEDTLS_NO_PLATFORM_ENTROPY || true
+ } >/dev/null 2>&1
+
+ make clean >/dev/null
+ CC=arm-none-eabi-gcc AR=arm-none-eabi-ar LD=arm-none-eabi-ld \
+ CFLAGS="$ARMGCC_FLAGS" make lib >/dev/null
+
+ OUT="size-${NAME}.txt"
+ arm-none-eabi-size -t library/libmbed*.a > "$OUT"
+ log "$( head -n1 "$OUT" )"
+ log "$( tail -n1 "$OUT" )"
+
+ cp ${CONFIG_H}.bak $CONFIG_H
+}
+
+# truncate the file just this time
+echo "(generated by $0)" > "$OUTFILE"
+echo "" >> "$OUTFILE"
+
+log "Footprint of standard configurations (minus net_sockets.c, timing.c, fs_io)"
+log "for bare-metal ARM Cortex-M3/M4 microcontrollers."
+
+VERSION_H="include/mbedtls/version.h"
+MBEDTLS_VERSION=$( sed -n 's/.*VERSION_STRING *"\(.*\)"/\1/p' $VERSION_H )
+if git rev-parse HEAD >/dev/null; then
+ GIT_HEAD=$( git rev-parse HEAD | head -c 10 )
+ GIT_VERSION=" (git head: $GIT_HEAD)"
+else
+ GIT_VERSION=""
+fi
+
+log ""
+log "mbed TLS $MBEDTLS_VERSION$GIT_VERSION"
+log "$( arm-none-eabi-gcc --version | head -n1 )"
+log "CFLAGS=$ARMGCC_FLAGS"
+
+doit default include/mbedtls/config.h
+doit thread configs/config-thread.h
+doit suite-b configs/config-suite-b.h
+doit psk configs/config-ccm-psk-tls1_2.h
+
+zip mbedtls-footprint.zip "$OUTFILE" size-*.txt >/dev/null
diff --git a/lib/mbedtls-2.27.0/scripts/generate_errors.pl b/lib/mbedtls-2.27.0/scripts/generate_errors.pl
new file mode 100755
index 0000000..ed17a0d
--- /dev/null
+++ b/lib/mbedtls-2.27.0/scripts/generate_errors.pl
@@ -0,0 +1,228 @@
+#!/usr/bin/env perl
+
+# Generate error.c
+#
+# Usage: ./generate_errors.pl or scripts/generate_errors.pl without arguments,
+# or generate_errors.pl include_dir data_dir error_file
+#
+# 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.
+
+use strict;
+
+my ($include_dir, $data_dir, $error_file);
+
+if( @ARGV ) {
+ die "Invalid number of arguments" if scalar @ARGV != 3;
+ ($include_dir, $data_dir, $error_file) = @ARGV;
+
+ -d $include_dir or die "No such directory: $include_dir\n";
+ -d $data_dir or die "No such directory: $data_dir\n";
+} else {
+ $include_dir = 'include/mbedtls';
+ $data_dir = 'scripts/data_files';
+ $error_file = 'library/error.c';
+
+ unless( -d $include_dir && -d $data_dir ) {
+ chdir '..' or die;
+ -d $include_dir && -d $data_dir
+ or die "Without arguments, must be run from root or scripts\n"
+ }
+}
+
+my $error_format_file = $data_dir.'/error.fmt';
+
+my @low_level_modules = qw( AES ARC4 ARIA ASN1 BASE64 BIGNUM BLOWFISH
+ CAMELLIA CCM CHACHA20 CHACHAPOLY CMAC CTR_DRBG DES
+ ENTROPY ERROR GCM HKDF HMAC_DRBG MD2 MD4 MD5
+ NET OID PADLOCK PBKDF2 PLATFORM POLY1305 RIPEMD160
+ SHA1 SHA256 SHA512 THREADING XTEA );
+my @high_level_modules = qw( CIPHER DHM ECP MD
+ PEM PK PKCS12 PKCS5
+ RSA SSL X509 );
+
+my $line_separator = $/;
+undef $/;
+
+open(FORMAT_FILE, "$error_format_file") or die "Opening error format file '$error_format_file': $!";
+my $error_format = <FORMAT_FILE>;
+close(FORMAT_FILE);
+
+$/ = $line_separator;
+
+my @files = <$include_dir/*.h>;
+my @necessary_include_files;
+my @matches;
+foreach my $file (@files) {
+ open(FILE, "$file");
+ my @grep_res = grep(/^\s*#define\s+MBEDTLS_ERR_\w+\s+\-0x[0-9A-Fa-f]+/, <FILE>);
+ push(@matches, @grep_res);
+ close FILE;
+ my $include_name = $file;
+ $include_name =~ s!.*/!!;
+ push @necessary_include_files, $include_name if @grep_res;
+}
+
+my $ll_old_define = "";
+my $hl_old_define = "";
+
+my $ll_code_check = "";
+my $hl_code_check = "";
+
+my $headers = "";
+my %included_headers;
+
+my %error_codes_seen;
+
+foreach my $line (@matches)
+{
+ next if ($line =~ /compat-1.2.h/);
+ my ($error_name, $error_code) = $line =~ /(MBEDTLS_ERR_\w+)\s+\-(0x\w+)/;
+ my ($description) = $line =~ /\/\*\*< (.*?)\.? \*\//;
+
+ die "Duplicated error code: $error_code ($error_name)\n"
+ if( $error_codes_seen{$error_code}++ );
+
+ $description =~ s/\\/\\\\/g;
+ if ($description eq "") {
+ $description = "DESCRIPTION MISSING";
+ warn "Missing description for $error_name\n";
+ }
+
+ my ($module_name) = $error_name =~ /^MBEDTLS_ERR_([^_]+)/;
+
+ # Fix faulty ones
+ $module_name = "BIGNUM" if ($module_name eq "MPI");
+ $module_name = "CTR_DRBG" if ($module_name eq "CTR");
+ $module_name = "HMAC_DRBG" if ($module_name eq "HMAC");
+
+ my $define_name = $module_name;
+ $define_name = "X509_USE,X509_CREATE" if ($define_name eq "X509");
+ $define_name = "ASN1_PARSE" if ($define_name eq "ASN1");
+ $define_name = "SSL_TLS" if ($define_name eq "SSL");
+ $define_name = "PEM_PARSE,PEM_WRITE" if ($define_name eq "PEM");
+
+ my $include_name = $module_name;
+ $include_name =~ tr/A-Z/a-z/;
+
+ # Fix faulty ones
+ $include_name = "net_sockets" if ($module_name eq "NET");
+
+ $included_headers{"${include_name}.h"} = $module_name;
+
+ my $found_ll = grep $_ eq $module_name, @low_level_modules;
+ my $found_hl = grep $_ eq $module_name, @high_level_modules;
+ if (!$found_ll && !$found_hl)
+ {
+ printf("Error: Do not know how to handle: $module_name\n");
+ exit 1;
+ }
+
+ my $code_check;
+ my $old_define;
+ my $white_space;
+ my $first;
+
+ if ($found_ll)
+ {
+ $code_check = \$ll_code_check;
+ $old_define = \$ll_old_define;
+ $white_space = ' ';
+ }
+ else
+ {
+ $code_check = \$hl_code_check;
+ $old_define = \$hl_old_define;
+ $white_space = ' ';
+ }
+
+ if ($define_name ne ${$old_define})
+ {
+ if (${$old_define} ne "")
+ {
+ ${$code_check} .= "#endif /* ";
+ $first = 0;
+ foreach my $dep (split(/,/, ${$old_define}))
+ {
+ ${$code_check} .= " || " if ($first++);
+ ${$code_check} .= "MBEDTLS_${dep}_C";
+ }
+ ${$code_check} .= " */\n\n";
+ }
+
+ ${$code_check} .= "#if ";
+ $headers .= "#if " if ($include_name ne "");
+ $first = 0;
+ foreach my $dep (split(/,/, ${define_name}))
+ {
+ ${$code_check} .= " || " if ($first);
+ $headers .= " || " if ($first++);
+
+ ${$code_check} .= "defined(MBEDTLS_${dep}_C)";
+ $headers .= "defined(MBEDTLS_${dep}_C)" if
+ ($include_name ne "");
+ }
+ ${$code_check} .= "\n";
+ $headers .= "\n#include \"mbedtls/${include_name}.h\"\n".
+ "#endif\n\n" if ($include_name ne "");
+ ${$old_define} = $define_name;
+ }
+
+ ${$code_check} .= "${white_space}case -($error_name):\n".
+ "${white_space} return( \"$module_name - $description\" );\n"
+};
+
+if ($ll_old_define ne "")
+{
+ $ll_code_check .= "#endif /* ";
+ my $first = 0;
+ foreach my $dep (split(/,/, $ll_old_define))
+ {
+ $ll_code_check .= " || " if ($first++);
+ $ll_code_check .= "MBEDTLS_${dep}_C";
+ }
+ $ll_code_check .= " */\n";
+}
+if ($hl_old_define ne "")
+{
+ $hl_code_check .= "#endif /* ";
+ my $first = 0;
+ foreach my $dep (split(/,/, $hl_old_define))
+ {
+ $hl_code_check .= " || " if ($first++);
+ $hl_code_check .= "MBEDTLS_${dep}_C";
+ }
+ $hl_code_check .= " */\n";
+}
+
+$error_format =~ s/HEADER_INCLUDED\n/$headers/g;
+$error_format =~ s/LOW_LEVEL_CODE_CHECKS\n/$ll_code_check/g;
+$error_format =~ s/HIGH_LEVEL_CODE_CHECKS\n/$hl_code_check/g;
+
+open(ERROR_FILE, ">$error_file") or die "Opening destination file '$error_file': $!";
+print ERROR_FILE $error_format;
+close(ERROR_FILE);
+
+my $errors = 0;
+for my $include_name (@necessary_include_files)
+{
+ if (not $included_headers{$include_name})
+ {
+ print STDERR "The header file \"$include_name\" defines error codes but has not been included!\n";
+ ++$errors;
+ }
+}
+
+exit !!$errors;
diff --git a/lib/mbedtls-2.27.0/scripts/generate_features.pl b/lib/mbedtls-2.27.0/scripts/generate_features.pl
new file mode 100755
index 0000000..74a9527
--- /dev/null
+++ b/lib/mbedtls-2.27.0/scripts/generate_features.pl
@@ -0,0 +1,88 @@
+#!/usr/bin/env perl
+#
+# 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.
+
+use strict;
+
+my ($include_dir, $data_dir, $feature_file);
+
+if( @ARGV ) {
+ die "Invalid number of arguments" if scalar @ARGV != 3;
+ ($include_dir, $data_dir, $feature_file) = @ARGV;
+
+ -d $include_dir or die "No such directory: $include_dir\n";
+ -d $data_dir or die "No such directory: $data_dir\n";
+} else {
+ $include_dir = 'include/mbedtls';
+ $data_dir = 'scripts/data_files';
+ $feature_file = 'library/version_features.c';
+
+ unless( -d $include_dir && -d $data_dir ) {
+ chdir '..' or die;
+ -d $include_dir && -d $data_dir
+ or die "Without arguments, must be run from root or scripts\n"
+ }
+}
+
+my $feature_format_file = $data_dir.'/version_features.fmt';
+
+my @sections = ( "System support", "mbed TLS modules",
+ "mbed TLS feature support" );
+
+my $line_separator = $/;
+undef $/;
+
+open(FORMAT_FILE, "$feature_format_file") or die "Opening feature format file '$feature_format_file': $!";
+my $feature_format = <FORMAT_FILE>;
+close(FORMAT_FILE);
+
+$/ = $line_separator;
+
+open(CONFIG_H, "$include_dir/config.h") || die("Failure when opening config.h: $!");
+
+my $feature_defines = "";
+my $in_section = 0;
+
+while (my $line = <CONFIG_H>)
+{
+ next if ($in_section && $line !~ /#define/ && $line !~ /SECTION/);
+ next if (!$in_section && $line !~ /SECTION/);
+
+ if ($in_section) {
+ if ($line =~ /SECTION/) {
+ $in_section = 0;
+ next;
+ }
+
+ my ($define) = $line =~ /#define (\w+)/;
+ $feature_defines .= "#if defined(${define})\n";
+ $feature_defines .= " \"${define}\",\n";
+ $feature_defines .= "#endif /* ${define} */\n";
+ }
+
+ if (!$in_section) {
+ my ($section_name) = $line =~ /SECTION: ([\w ]+)/;
+ my $found_section = grep $_ eq $section_name, @sections;
+
+ $in_section = 1 if ($found_section);
+ }
+};
+
+$feature_format =~ s/FEATURE_DEFINES\n/$feature_defines/g;
+
+open(ERROR_FILE, ">$feature_file") or die "Opening destination file '$feature_file': $!";
+print ERROR_FILE $feature_format;
+close(ERROR_FILE);
diff --git a/lib/mbedtls-2.27.0/scripts/generate_psa_constants.py b/lib/mbedtls-2.27.0/scripts/generate_psa_constants.py
new file mode 100755
index 0000000..71afd02
--- /dev/null
+++ b/lib/mbedtls-2.27.0/scripts/generate_psa_constants.py
@@ -0,0 +1,344 @@
+#!/usr/bin/env python3
+
+"""Generate psa_constant_names_generated.c
+which is included by programs/psa/psa_constant_names.c.
+The code generated by this module is only meant to be used in the context
+of that program.
+
+An argument passed to this script will modify the output directory where the
+file is written:
+* by default (no arguments passed): writes to programs/psa/
+* OUTPUT_FILE_DIR passed: writes to OUTPUT_FILE_DIR/
+"""
+
+# 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.
+
+import os
+import sys
+
+from mbedtls_dev import macro_collector
+
+OUTPUT_TEMPLATE = '''\
+/* Automatically generated by generate_psa_constant.py. DO NOT EDIT. */
+
+static const char *psa_strerror(psa_status_t status)
+{
+ switch (status) {
+ %(status_cases)s
+ default: return NULL;
+ }
+}
+
+static const char *psa_ecc_family_name(psa_ecc_family_t curve)
+{
+ switch (curve) {
+ %(ecc_curve_cases)s
+ default: return NULL;
+ }
+}
+
+static const char *psa_dh_family_name(psa_dh_family_t group)
+{
+ switch (group) {
+ %(dh_group_cases)s
+ default: return NULL;
+ }
+}
+
+static const char *psa_hash_algorithm_name(psa_algorithm_t hash_alg)
+{
+ switch (hash_alg) {
+ %(hash_algorithm_cases)s
+ default: return NULL;
+ }
+}
+
+static const char *psa_ka_algorithm_name(psa_algorithm_t ka_alg)
+{
+ switch (ka_alg) {
+ %(ka_algorithm_cases)s
+ default: return NULL;
+ }
+}
+
+static int psa_snprint_key_type(char *buffer, size_t buffer_size,
+ psa_key_type_t type)
+{
+ size_t required_size = 0;
+ switch (type) {
+ %(key_type_cases)s
+ default:
+ %(key_type_code)s{
+ return snprintf(buffer, buffer_size,
+ "0x%%04x", (unsigned) type);
+ }
+ break;
+ }
+ buffer[0] = 0;
+ return (int) required_size;
+}
+
+#define NO_LENGTH_MODIFIER 0xfffffffflu
+static int psa_snprint_algorithm(char *buffer, size_t buffer_size,
+ psa_algorithm_t alg)
+{
+ size_t required_size = 0;
+ psa_algorithm_t core_alg = alg;
+ unsigned long length_modifier = NO_LENGTH_MODIFIER;
+ if (PSA_ALG_IS_MAC(alg)) {
+ core_alg = PSA_ALG_TRUNCATED_MAC(alg, 0);
+ if (alg & PSA_ALG_MAC_AT_LEAST_THIS_LENGTH_FLAG) {
+ append(&buffer, buffer_size, &required_size,
+ "PSA_ALG_AT_LEAST_THIS_LENGTH_MAC(", 33);
+ length_modifier = PSA_MAC_TRUNCATED_LENGTH(alg);
+ } else if (core_alg != alg) {
+ append(&buffer, buffer_size, &required_size,
+ "PSA_ALG_TRUNCATED_MAC(", 22);
+ length_modifier = PSA_MAC_TRUNCATED_LENGTH(alg);
+ }
+ } else if (PSA_ALG_IS_AEAD(alg)) {
+ core_alg = PSA_ALG_AEAD_WITH_DEFAULT_LENGTH_TAG(alg);
+ if (core_alg == 0) {
+ /* For unknown AEAD algorithms, there is no "default tag length". */
+ core_alg = alg;
+ } else if (alg & PSA_ALG_AEAD_AT_LEAST_THIS_LENGTH_FLAG) {
+ append(&buffer, buffer_size, &required_size,
+ "PSA_ALG_AEAD_WITH_AT_LEAST_THIS_LENGTH_TAG(", 43);
+ length_modifier = PSA_ALG_AEAD_GET_TAG_LENGTH(alg);
+ } else if (core_alg != alg) {
+ append(&buffer, buffer_size, &required_size,
+ "PSA_ALG_AEAD_WITH_SHORTENED_TAG(", 32);
+ length_modifier = PSA_ALG_AEAD_GET_TAG_LENGTH(alg);
+ }
+ } else if (PSA_ALG_IS_KEY_AGREEMENT(alg) &&
+ !PSA_ALG_IS_RAW_KEY_AGREEMENT(alg)) {
+ core_alg = PSA_ALG_KEY_AGREEMENT_GET_KDF(alg);
+ append(&buffer, buffer_size, &required_size,
+ "PSA_ALG_KEY_AGREEMENT(", 22);
+ append_with_alg(&buffer, buffer_size, &required_size,
+ psa_ka_algorithm_name,
+ PSA_ALG_KEY_AGREEMENT_GET_BASE(alg));
+ append(&buffer, buffer_size, &required_size, ", ", 2);
+ }
+ switch (core_alg) {
+ %(algorithm_cases)s
+ default:
+ %(algorithm_code)s{
+ append_integer(&buffer, buffer_size, &required_size,
+ "0x%%08lx", (unsigned long) core_alg);
+ }
+ break;
+ }
+ if (core_alg != alg) {
+ if (length_modifier != NO_LENGTH_MODIFIER) {
+ append(&buffer, buffer_size, &required_size, ", ", 2);
+ append_integer(&buffer, buffer_size, &required_size,
+ "%%lu", length_modifier);
+ }
+ append(&buffer, buffer_size, &required_size, ")", 1);
+ }
+ buffer[0] = 0;
+ return (int) required_size;
+}
+
+static int psa_snprint_key_usage(char *buffer, size_t buffer_size,
+ psa_key_usage_t usage)
+{
+ size_t required_size = 0;
+ if (usage == 0) {
+ if (buffer_size > 1) {
+ buffer[0] = '0';
+ buffer[1] = 0;
+ } else if (buffer_size == 1) {
+ buffer[0] = 0;
+ }
+ return 1;
+ }
+%(key_usage_code)s
+ if (usage != 0) {
+ if (required_size != 0) {
+ append(&buffer, buffer_size, &required_size, " | ", 3);
+ }
+ append_integer(&buffer, buffer_size, &required_size,
+ "0x%%08lx", (unsigned long) usage);
+ } else {
+ buffer[0] = 0;
+ }
+ return (int) required_size;
+}
+
+/* End of automatically generated file. */
+'''
+
+KEY_TYPE_FROM_CURVE_TEMPLATE = '''if (%(tester)s(type)) {
+ append_with_curve(&buffer, buffer_size, &required_size,
+ "%(builder)s", %(builder_length)s,
+ PSA_KEY_TYPE_ECC_GET_FAMILY(type));
+ } else '''
+
+KEY_TYPE_FROM_GROUP_TEMPLATE = '''if (%(tester)s(type)) {
+ append_with_group(&buffer, buffer_size, &required_size,
+ "%(builder)s", %(builder_length)s,
+ PSA_KEY_TYPE_DH_GET_FAMILY(type));
+ } else '''
+
+ALGORITHM_FROM_HASH_TEMPLATE = '''if (%(tester)s(core_alg)) {
+ append(&buffer, buffer_size, &required_size,
+ "%(builder)s(", %(builder_length)s + 1);
+ append_with_alg(&buffer, buffer_size, &required_size,
+ psa_hash_algorithm_name,
+ PSA_ALG_GET_HASH(core_alg));
+ append(&buffer, buffer_size, &required_size, ")", 1);
+ } else '''
+
+BIT_TEST_TEMPLATE = '''\
+ if (%(var)s & %(flag)s) {
+ if (required_size != 0) {
+ append(&buffer, buffer_size, &required_size, " | ", 3);
+ }
+ append(&buffer, buffer_size, &required_size, "%(flag)s", %(length)d);
+ %(var)s ^= %(flag)s;
+ }\
+'''
+
+class CaseBuilder(macro_collector.PSAMacroCollector):
+ """Collect PSA crypto macro definitions and write value recognition functions.
+
+ 1. Call `read_file` on the input header file(s).
+ 2. Call `write_file` to write ``psa_constant_names_generated.c``.
+ """
+
+ def __init__(self):
+ super().__init__(include_intermediate=True)
+
+ @staticmethod
+ def _make_return_case(name):
+ return 'case %(name)s: return "%(name)s";' % {'name': name}
+
+ @staticmethod
+ def _make_append_case(name):
+ template = ('case %(name)s: '
+ 'append(&buffer, buffer_size, &required_size, "%(name)s", %(length)d); '
+ 'break;')
+ return template % {'name': name, 'length': len(name)}
+
+ @staticmethod
+ def _make_bit_test(var, flag):
+ return BIT_TEST_TEMPLATE % {'var': var,
+ 'flag': flag,
+ 'length': len(flag)}
+
+ def _make_status_cases(self):
+ return '\n '.join(map(self._make_return_case,
+ sorted(self.statuses)))
+
+ def _make_ecc_curve_cases(self):
+ return '\n '.join(map(self._make_return_case,
+ sorted(self.ecc_curves)))
+
+ def _make_dh_group_cases(self):
+ return '\n '.join(map(self._make_return_case,
+ sorted(self.dh_groups)))
+
+ def _make_key_type_cases(self):
+ return '\n '.join(map(self._make_append_case,
+ sorted(self.key_types)))
+
+ @staticmethod
+ def _make_key_type_from_curve_code(builder, tester):
+ return KEY_TYPE_FROM_CURVE_TEMPLATE % {'builder': builder,
+ 'builder_length': len(builder),
+ 'tester': tester}
+
+ @staticmethod
+ def _make_key_type_from_group_code(builder, tester):
+ return KEY_TYPE_FROM_GROUP_TEMPLATE % {'builder': builder,
+ 'builder_length': len(builder),
+ 'tester': tester}
+
+ def _make_ecc_key_type_code(self):
+ d = self.key_types_from_curve
+ make = self._make_key_type_from_curve_code
+ return ''.join([make(k, d[k]) for k in sorted(d.keys())])
+
+ def _make_dh_key_type_code(self):
+ d = self.key_types_from_group
+ make = self._make_key_type_from_group_code
+ return ''.join([make(k, d[k]) for k in sorted(d.keys())])
+
+ def _make_hash_algorithm_cases(self):
+ return '\n '.join(map(self._make_return_case,
+ sorted(self.hash_algorithms)))
+
+ def _make_ka_algorithm_cases(self):
+ return '\n '.join(map(self._make_return_case,
+ sorted(self.ka_algorithms)))
+
+ def _make_algorithm_cases(self):
+ return '\n '.join(map(self._make_append_case,
+ sorted(self.algorithms)))
+
+ @staticmethod
+ def _make_algorithm_from_hash_code(builder, tester):
+ return ALGORITHM_FROM_HASH_TEMPLATE % {'builder': builder,
+ 'builder_length': len(builder),
+ 'tester': tester}
+
+ def _make_algorithm_code(self):
+ d = self.algorithms_from_hash
+ make = self._make_algorithm_from_hash_code
+ return ''.join([make(k, d[k]) for k in sorted(d.keys())])
+
+ def _make_key_usage_code(self):
+ return '\n'.join([self._make_bit_test('usage', bit)
+ for bit in sorted(self.key_usage_flags)])
+
+ def write_file(self, output_file):
+ """Generate the pretty-printer function code from the gathered
+ constant definitions.
+ """
+ data = {}
+ data['status_cases'] = self._make_status_cases()
+ data['ecc_curve_cases'] = self._make_ecc_curve_cases()
+ data['dh_group_cases'] = self._make_dh_group_cases()
+ data['key_type_cases'] = self._make_key_type_cases()
+ data['key_type_code'] = (self._make_ecc_key_type_code() +
+ self._make_dh_key_type_code())
+ data['hash_algorithm_cases'] = self._make_hash_algorithm_cases()
+ data['ka_algorithm_cases'] = self._make_ka_algorithm_cases()
+ data['algorithm_cases'] = self._make_algorithm_cases()
+ data['algorithm_code'] = self._make_algorithm_code()
+ data['key_usage_code'] = self._make_key_usage_code()
+ output_file.write(OUTPUT_TEMPLATE % data)
+
+def generate_psa_constants(header_file_names, output_file_name):
+ collector = CaseBuilder()
+ for header_file_name in header_file_names:
+ with open(header_file_name, 'rb') as header_file:
+ collector.read_file(header_file)
+ temp_file_name = output_file_name + '.tmp'
+ with open(temp_file_name, 'w') as output_file:
+ collector.write_file(output_file)
+ os.replace(temp_file_name, output_file_name)
+
+if __name__ == '__main__':
+ if not os.path.isdir('programs') and os.path.isdir('../programs'):
+ os.chdir('..')
+ # Allow to change the directory where psa_constant_names_generated.c is written to.
+ OUTPUT_FILE_DIR = sys.argv[1] if len(sys.argv) == 2 else "programs/psa"
+ generate_psa_constants(['include/psa/crypto_values.h',
+ 'include/psa/crypto_extra.h'],
+ OUTPUT_FILE_DIR + '/psa_constant_names_generated.c')
diff --git a/lib/mbedtls-2.27.0/scripts/generate_query_config.pl b/lib/mbedtls-2.27.0/scripts/generate_query_config.pl
new file mode 100755
index 0000000..3cef101
--- /dev/null
+++ b/lib/mbedtls-2.27.0/scripts/generate_query_config.pl
@@ -0,0 +1,90 @@
+#! /usr/bin/env perl
+
+# Generate query_config.c
+#
+# The file query_config.c contains a C function that can be used to check if
+# a configuration macro is defined and to retrieve its expansion in string
+# form (if any). This facilitates querying the compile time configuration of
+# the library, for example, for testing.
+#
+# The query_config.c is generated from the current configuration at
+# include/mbedtls/config.h. The idea is that the config.h contains ALL the
+# compile time configurations available in Mbed TLS (commented or uncommented).
+# This script extracts the configuration macros from the config.h and this
+# information is used to automatically generate the body of the query_config()
+# function by using the template in scripts/data_files/query_config.fmt.
+#
+# Usage: ./scripts/generate_query_config.pl without arguments
+#
+# 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.
+
+use strict;
+
+my $config_file = "./include/mbedtls/config.h";
+
+my $query_config_format_file = "./scripts/data_files/query_config.fmt";
+my $query_config_file = "./programs/test/query_config.c";
+
+# Excluded macros from the generated query_config.c. For example, macros that
+# have commas or function-like macros cannot be transformed into strings easily
+# using the preprocessor, so they should be excluded or the preprocessor will
+# throw errors.
+my @excluded = qw(
+MBEDTLS_SSL_CIPHERSUITES
+MBEDTLS_PARAM_FAILED
+);
+my $excluded_re = join '|', @excluded;
+
+open(CONFIG_FILE, "$config_file") or die "Opening config file '$config_file': $!";
+
+# This variable will contain the string to replace in the CHECK_CONFIG of the
+# format file
+my $config_check = "";
+
+while (my $line = <CONFIG_FILE>) {
+ if ($line =~ /^(\/\/)?\s*#\s*define\s+(MBEDTLS_\w+).*/) {
+ my $name = $2;
+
+ # Skip over the macro that prevents multiple inclusion
+ next if "MBEDTLS_CONFIG_H" eq $name;
+
+ # Skip over the macro if it is in the ecluded list
+ next if $name =~ /$excluded_re/;
+
+ $config_check .= "#if defined($name)\n";
+ $config_check .= " if( strcmp( \"$name\", config ) == 0 )\n";
+ $config_check .= " {\n";
+ $config_check .= " MACRO_EXPANSION_TO_STR( $name );\n";
+ $config_check .= " return( 0 );\n";
+ $config_check .= " }\n";
+ $config_check .= "#endif /* $name */\n";
+ $config_check .= "\n";
+ }
+}
+
+# Read the full format file into a string
+local $/;
+open(FORMAT_FILE, "$query_config_format_file") or die "Opening query config format file '$query_config_format_file': $!";
+my $query_config_format = <FORMAT_FILE>;
+close(FORMAT_FILE);
+
+# Replace the body of the query_config() function with the code we just wrote
+$query_config_format =~ s/CHECK_CONFIG/$config_check/g;
+
+# Rewrite the query_config.c file
+open(QUERY_CONFIG_FILE, ">$query_config_file") or die "Opening destination file '$query_config_file': $!";
+print QUERY_CONFIG_FILE $query_config_format;
+close(QUERY_CONFIG_FILE);
diff --git a/lib/mbedtls-2.27.0/scripts/generate_visualc_files.pl b/lib/mbedtls-2.27.0/scripts/generate_visualc_files.pl
new file mode 100755
index 0000000..d11041c
--- /dev/null
+++ b/lib/mbedtls-2.27.0/scripts/generate_visualc_files.pl
@@ -0,0 +1,299 @@
+#!/usr/bin/env perl
+
+# Generate main file, individual apps and solution files for MS Visual Studio
+# 2010
+#
+# Must be run from mbedTLS root or scripts directory.
+# Takes no argument.
+#
+# 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.
+
+use warnings;
+use strict;
+use Digest::MD5 'md5_hex';
+
+my $vsx_dir = "visualc/VS2010";
+my $vsx_ext = "vcxproj";
+my $vsx_app_tpl_file = "scripts/data_files/vs2010-app-template.$vsx_ext";
+my $vsx_main_tpl_file = "scripts/data_files/vs2010-main-template.$vsx_ext";
+my $vsx_main_file = "$vsx_dir/mbedTLS.$vsx_ext";
+my $vsx_sln_tpl_file = "scripts/data_files/vs2010-sln-template.sln";
+my $vsx_sln_file = "$vsx_dir/mbedTLS.sln";
+
+my $programs_dir = 'programs';
+my $mbedtls_header_dir = 'include/mbedtls';
+my $psa_header_dir = 'include/psa';
+my $source_dir = 'library';
+my $test_source_dir = 'tests/src';
+my $test_header_dir = 'tests/include/test';
+my $test_drivers_header_dir = 'tests/include/test/drivers';
+my $test_drivers_source_dir = 'tests/src/drivers';
+
+my @thirdparty_header_dirs = qw(
+ 3rdparty/everest/include/everest
+);
+my @thirdparty_source_dirs = qw(
+ 3rdparty/everest/library
+ 3rdparty/everest/library/kremlib
+ 3rdparty/everest/library/legacy
+);
+
+# Directories to add to the include path.
+# Order matters in case there are files with the same name in more than
+# one directory: the compiler will use the first match.
+my @include_directories = qw(
+ include
+ 3rdparty/everest/include/
+ 3rdparty/everest/include/everest
+ 3rdparty/everest/include/everest/vs2010
+ 3rdparty/everest/include/everest/kremlib
+ tests/include
+);
+my $include_directories = join(';', map {"../../$_"} @include_directories);
+
+# Directories to add to the include path when building the library, but not
+# when building tests or applications.
+my @library_include_directories = qw(
+ library
+);
+my $library_include_directories =
+ join(';', map {"../../$_"} (@library_include_directories,
+ @include_directories));
+
+my @excluded_files = qw(
+ 3rdparty/everest/library/Hacl_Curve25519.c
+);
+my %excluded_files = ();
+foreach (@excluded_files) { $excluded_files{$_} = 1 }
+
+# Need windows line endings!
+my $vsx_hdr_tpl = <<EOT;
+ <ClInclude Include="..\\..\\{NAME}" />\r
+EOT
+my $vsx_src_tpl = <<EOT;
+ <ClCompile Include="..\\..\\{NAME}" />\r
+EOT
+
+my $vsx_sln_app_entry_tpl = <<EOT;
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "{APPNAME}", "{APPNAME}.vcxproj", "{GUID}"\r
+ ProjectSection(ProjectDependencies) = postProject\r
+ {46CF2D25-6A36-4189-B59C-E4815388E554} = {46CF2D25-6A36-4189-B59C-E4815388E554}\r
+ EndProjectSection\r
+EndProject\r
+EOT
+
+my $vsx_sln_conf_entry_tpl = <<EOT;
+ {GUID}.Debug|Win32.ActiveCfg = Debug|Win32\r
+ {GUID}.Debug|Win32.Build.0 = Debug|Win32\r
+ {GUID}.Debug|x64.ActiveCfg = Debug|x64\r
+ {GUID}.Debug|x64.Build.0 = Debug|x64\r
+ {GUID}.Release|Win32.ActiveCfg = Release|Win32\r
+ {GUID}.Release|Win32.Build.0 = Release|Win32\r
+ {GUID}.Release|x64.ActiveCfg = Release|x64\r
+ {GUID}.Release|x64.Build.0 = Release|x64\r
+EOT
+
+exit( main() );
+
+sub check_dirs {
+ foreach my $d (@thirdparty_header_dirs, @thirdparty_source_dirs) {
+ if (not (-d $d)) { return 0; }
+ }
+ return -d $vsx_dir
+ && -d $mbedtls_header_dir
+ && -d $psa_header_dir
+ && -d $source_dir
+ && -d $test_source_dir
+ && -d $test_drivers_source_dir
+ && -d $test_header_dir
+ && -d $test_drivers_header_dir
+ && -d $programs_dir;
+}
+
+sub slurp_file {
+ my ($filename) = @_;
+
+ local $/ = undef;
+ open my $fh, '<', $filename or die "Could not read $filename\n";
+ my $content = <$fh>;
+ close $fh;
+
+ return $content;
+}
+
+sub content_to_file {
+ my ($content, $filename) = @_;
+
+ open my $fh, '>', $filename or die "Could not write to $filename\n";
+ print $fh $content;
+ close $fh;
+}
+
+sub gen_app_guid {
+ my ($path) = @_;
+
+ my $guid = md5_hex( "mbedTLS:$path" );
+ $guid =~ s/(.{8})(.{4})(.{4})(.{4})(.{12})/\U{$1-$2-$3-$4-$5}/;
+
+ return $guid;
+}
+
+sub gen_app {
+ my ($path, $template, $dir, $ext) = @_;
+
+ my $guid = gen_app_guid( $path );
+ $path =~ s!/!\\!g;
+ (my $appname = $path) =~ s/.*\\//;
+
+ my $srcs = "<ClCompile Include=\"..\\..\\programs\\$path.c\" \/>";
+ if( $appname eq "ssl_client2" or $appname eq "ssl_server2" or
+ $appname eq "query_compile_time_config" ) {
+ $srcs .= "\r\n <ClCompile Include=\"..\\..\\programs\\test\\query_config.c\" \/>";
+ }
+ if( $appname eq "ssl_client2" or $appname eq "ssl_server2" ) {
+ $srcs .= "\r\n <ClCompile Include=\"..\\..\\programs\\ssl\\ssl_test_lib.c\" \/>";
+ }
+
+ my $content = $template;
+ $content =~ s/<SOURCES>/$srcs/g;
+ $content =~ s/<APPNAME>/$appname/g;
+ $content =~ s/<GUID>/$guid/g;
+ $content =~ s/INCLUDE_DIRECTORIES\r\n/$include_directories/g;
+
+ content_to_file( $content, "$dir/$appname.$ext" );
+}
+
+sub get_app_list {
+ my $app_list = `cd $programs_dir && make list`;
+ die "make list failed: $!\n" if $?;
+
+ return split /\s+/, $app_list;
+}
+
+sub gen_app_files {
+ my @app_list = @_;
+
+ my $vsx_tpl = slurp_file( $vsx_app_tpl_file );
+
+ for my $app ( @app_list ) {
+ gen_app( $app, $vsx_tpl, $vsx_dir, $vsx_ext );
+ }
+}
+
+sub gen_entry_list {
+ my ($tpl, @names) = @_;
+
+ my $entries;
+ for my $name (@names) {
+ (my $entry = $tpl) =~ s/{NAME}/$name/g;
+ $entries .= $entry;
+ }
+
+ return $entries;
+}
+
+sub gen_main_file {
+ my ($headers, $sources,
+ $hdr_tpl, $src_tpl,
+ $main_tpl, $main_out) = @_;
+
+ my $header_entries = gen_entry_list( $hdr_tpl, @$headers );
+ my $source_entries = gen_entry_list( $src_tpl, @$sources );
+
+ my $out = slurp_file( $main_tpl );
+ $out =~ s/SOURCE_ENTRIES\r\n/$source_entries/m;
+ $out =~ s/HEADER_ENTRIES\r\n/$header_entries/m;
+ $out =~ s/INCLUDE_DIRECTORIES\r\n/$library_include_directories/g;
+
+ content_to_file( $out, $main_out );
+}
+
+sub gen_vsx_solution {
+ my (@app_names) = @_;
+
+ my ($app_entries, $conf_entries);
+ for my $path (@app_names) {
+ my $guid = gen_app_guid( $path );
+ (my $appname = $path) =~ s!.*/!!;
+
+ my $app_entry = $vsx_sln_app_entry_tpl;
+ $app_entry =~ s/{APPNAME}/$appname/g;
+ $app_entry =~ s/{GUID}/$guid/g;
+
+ $app_entries .= $app_entry;
+
+ my $conf_entry = $vsx_sln_conf_entry_tpl;
+ $conf_entry =~ s/{GUID}/$guid/g;
+
+ $conf_entries .= $conf_entry;
+ }
+
+ my $out = slurp_file( $vsx_sln_tpl_file );
+ $out =~ s/APP_ENTRIES\r\n/$app_entries/m;
+ $out =~ s/CONF_ENTRIES\r\n/$conf_entries/m;
+
+ content_to_file( $out, $vsx_sln_file );
+}
+
+sub del_vsx_files {
+ unlink glob "'$vsx_dir/*.$vsx_ext'";
+ unlink $vsx_main_file;
+ unlink $vsx_sln_file;
+}
+
+sub main {
+ if( ! check_dirs() ) {
+ chdir '..' or die;
+ check_dirs or die "Must but run from mbedTLS root or scripts dir\n";
+ }
+
+ # Remove old files to ensure that, for example, project files from deleted
+ # apps are not kept
+ del_vsx_files();
+
+ my @app_list = get_app_list();
+ my @header_dirs = (
+ $mbedtls_header_dir,
+ $psa_header_dir,
+ $test_header_dir,
+ $test_drivers_header_dir,
+ $source_dir,
+ @thirdparty_header_dirs,
+ );
+ my @headers = (map { <$_/*.h> } @header_dirs);
+ my @source_dirs = (
+ $source_dir,
+ $test_source_dir,
+ $test_drivers_source_dir,
+ @thirdparty_source_dirs,
+ );
+ my @sources = (map { <$_/*.c> } @source_dirs);
+
+ @headers = grep { ! $excluded_files{$_} } @headers;
+ @sources = grep { ! $excluded_files{$_} } @sources;
+ map { s!/!\\!g } @headers;
+ map { s!/!\\!g } @sources;
+
+ gen_app_files( @app_list );
+
+ gen_main_file( \@headers, \@sources,
+ $vsx_hdr_tpl, $vsx_src_tpl,
+ $vsx_main_tpl_file, $vsx_main_file );
+
+ gen_vsx_solution( @app_list );
+
+ return 0;
+}
diff --git a/lib/mbedtls-2.27.0/scripts/massif_max.pl b/lib/mbedtls-2.27.0/scripts/massif_max.pl
new file mode 100755
index 0000000..eaf56ae
--- /dev/null
+++ b/lib/mbedtls-2.27.0/scripts/massif_max.pl
@@ -0,0 +1,48 @@
+#!/usr/bin/env perl
+
+# Parse a massif.out.xxx file and output peak total memory usage
+#
+# 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.
+
+use warnings;
+use strict;
+
+use utf8;
+use open qw(:std utf8);
+
+die unless @ARGV == 1;
+
+my @snaps;
+open my $fh, '<', $ARGV[0] or die;
+{ local $/ = 'snapshot='; @snaps = <$fh>; }
+close $fh or die;
+
+my ($max, $max_heap, $max_he, $max_stack) = (0, 0, 0, 0);
+for (@snaps)
+{
+ my ($heap, $heap_extra, $stack) = m{
+ mem_heap_B=(\d+)\n
+ mem_heap_extra_B=(\d+)\n
+ mem_stacks_B=(\d+)
+ }xm;
+ next unless defined $heap;
+ my $total = $heap + $heap_extra + $stack;
+ if( $total > $max ) {
+ ($max, $max_heap, $max_he, $max_stack) = ($total, $heap, $heap_extra, $stack);
+ }
+}
+
+printf "$max (heap $max_heap+$max_he, stack $max_stack)\n";
diff --git a/lib/mbedtls-2.27.0/scripts/mbedtls_dev/asymmetric_key_data.py b/lib/mbedtls-2.27.0/scripts/mbedtls_dev/asymmetric_key_data.py
new file mode 100644
index 0000000..6fd6223
--- /dev/null
+++ b/lib/mbedtls-2.27.0/scripts/mbedtls_dev/asymmetric_key_data.py
@@ -0,0 +1,166 @@
+"""Sample key material for asymmetric key types.
+
+Meant for use in crypto_knowledge.py.
+"""
+
+# 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.
+
+import binascii
+import re
+from typing import Dict
+
+STR_TRANS_REMOVE_BLANKS = str.maketrans('', '', ' \t\n\r')
+
+def unhexlify(text: str) -> bytes:
+ return binascii.unhexlify(text.translate(STR_TRANS_REMOVE_BLANKS))
+
+def construct_asymmetric_key_data(src) -> Dict[str, Dict[int, bytes]]:
+ """Split key pairs into separate table entries and convert hex to bytes.
+
+ Input format: src[abbreviated_type][size] = (private_key_hex, public_key_hex)
+ Output format: dst['PSA_KEY_TYPE_xxx'][size] = key_bytes
+ """
+ dst = {} #type: Dict[str, Dict[int, bytes]]
+ for typ in src:
+ private = 'PSA_KEY_TYPE_' + re.sub(r'(\(|\Z)', r'_KEY_PAIR\1', typ, 1)
+ public = 'PSA_KEY_TYPE_' + re.sub(r'(\(|\Z)', r'_PUBLIC_KEY\1', typ, 1)
+ dst[private] = {}
+ dst[public] = {}
+ for size in src[typ]:
+ dst[private][size] = unhexlify(src[typ][size][0])
+ dst[public][size] = unhexlify(src[typ][size][1])
+ return dst
+
+## These are valid keys that don't try to exercise any edge cases. They're
+## either test vectors from some specification, or randomly generated. All
+## pairs consist of a private key and its public key.
+#pylint: disable=line-too-long
+ASYMMETRIC_KEY_DATA = construct_asymmetric_key_data({
+ 'ECC(PSA_ECC_FAMILY_SECP_K1)': {
+ 192: ("297ac1722ccac7589ecb240dc719842538ca974beb79f228",
+ "0426b7bb38da649ac2138fc050c6548b32553dab68afebc36105d325b75538c12323cb0764789ecb992671beb2b6bef2f5"),
+ 224: ("0024122bf020fa113f6c0ac978dfbd41f749257a9468febdbe0dc9f7e8",
+ "042cc7335f4b76042bed44ef45959a62aa215f7a5ff0c8111b8c44ed654ee71c1918326ad485b2d599fe2a6eab096ee26d977334d2bac6d61d"),
+ 256: ("7fa06fa02d0e911b9a47fdc17d2d962ca01e2f31d60c6212d0ed7e3bba23a7b9",
+ "045c39154579efd667adc73a81015a797d2c8682cdfbd3c3553c4a185d481cdc50e42a0e1cbc3ca29a32a645e927f54beaed14c9dbbf8279d725f5495ca924b24d"),
+ },
+ 'ECC(PSA_ECC_FAMILY_SECP_R1)': {
+ 225: ("872f203b3ad35b7f2ecc803c3a0e1e0b1ed61cc1afe71b189cd4c995",
+ "046f00eadaa949fee3e9e1c7fa1247eecec86a0dce46418b9bd3117b981d4bd0ae7a990de912f9d060d6cb531a42d22e394ac29e81804bf160"),
+ 256: ("49c9a8c18c4b885638c431cf1df1c994131609b580d4fd43a0cab17db2f13eee",
+ "047772656f814b399279d5e1f1781fac6f099a3c5ca1b0e35351834b08b65e0b572590cdaf8f769361bcf34acfc11e5e074e8426bdde04be6e653945449617de45"),
+ 384: ("3f5d8d9be280b5696cc5cc9f94cf8af7e6b61dd6592b2ab2b3a4c607450417ec327dcdcaed7c10053d719a0574f0a76a",
+ "04d9c662b50ba29ca47990450e043aeaf4f0c69b15676d112f622a71c93059af999691c5680d2b44d111579db12f4a413a2ed5c45fcfb67b5b63e00b91ebe59d09a6b1ac2c0c4282aa12317ed5914f999bc488bb132e8342cc36f2ca5e3379c747"),
+ 521: ("01b1b6ad07bb79e7320da59860ea28e055284f6058f279de666e06d435d2af7bda28d99fa47b7dd0963e16b0073078ee8b8a38d966a582f46d19ff95df3ad9685aae",
+ "04001de142d54f69eb038ee4b7af9d3ca07736fd9cf719eb354d69879ee7f3c136fb0fbf9f08f86be5fa128ec1a051d3e6c643e85ada8ffacf3663c260bd2c844b6f5600cee8e48a9e65d09cadd89f235dee05f3b8a646be715f1f67d5b434e0ff23a1fc07ef7740193e40eeff6f3bcdfd765aa9155033524fe4f205f5444e292c4c2f6ac1"),
+ },
+ 'ECC(PSA_ECC_FAMILY_SECP_R2)': {
+ 160: ("00bf539a1cdda0d7f71a50a3f98aec0a2e8e4ced1e",
+ "049570d541398665adb5cfa16f5af73b3196926bbd4b876bdb80f8eab20d0f540c22f4de9c140f6d7b"),
+ },
+ 'ECC(PSA_ECC_FAMILY_SECT_K1)': {
+ 163: ("03ebc8fcded2d6ab72ec0f75bdb4fd080481273e71",
+ "0406f88f90b4b65950f06ce433afdb097e320f433dc2062b8a65db8fafd3c110f46bc45663fbf021ee7eb9"),
+ 233: ("41f08485ce587b06061c087e76e247c359de2ba9927ee013b2f1ed9ca8",
+ "0401e9d7189189f773bd8f71be2c10774ba18842434dfa9312595ea545104400f45a9d5675647513ba75b079fe66a29daac2ec86a6a5d4e75c5f290c1f"),
+ 239: ("1a8069ce2c2c8bdd7087f2a6ab49588797e6294e979495602ab9650b9c61",
+ "04068d76b9f4508762c2379db9ee8b87ad8d86d9535132ffba3b5680440cfa28eb133d4232faf1c9aba96af11aefe634a551440800d5f8185105d3072d"),
+ 283: ("006d627885dd48b9ec6facb5b3865377d755b75a5d51440e45211c1f600e15eff8a881a0",
+ "0405f48374debceaadb46ba385fd92048fcc5b9af1a1c90408bf94a68b9378df1cbfdfb6fb026a96bea06d8f181bf10c020adbcc88b6ecff96bdc564a9649c247cede601c4be63afc3"),
+ 409: ("3ff5e74d932fa77db139b7c948c81e4069c72c24845574064beea8976b70267f1c6f9a503e3892ea1dcbb71fcea423faa370a8",
+ "04012c587f69f68b308ba6dcb238797f4e22290ca939ae806604e2b5ab4d9caef5a74a98fd87c4f88d292dd39d92e556e16c6ecc3c019a105826eef507cd9a04119f54d5d850b3720b3792d5d03410e9105610f7e4b420166ed45604a7a1f229d80975ba6be2060e8b"),
+ 571: ("005008c97b4a161c0db1bac6452c72846d57337aa92d8ecb4a66eb01d2f29555ffb61a5317225dcc8ca6917d91789e227efc0bfe9eeda7ee21998cd11c3c9885056b0e55b4f75d51",
+ "04050172a7fd7adf98e4e2ed2742faa5cd12731a15fb0dbbdf75b1c3cc771a4369af6f2fa00e802735650881735759ea9c79961ded18e0daa0ac59afb1d513b5bbda9962e435f454fc020b4afe1445c2302ada07d295ec2580f8849b2dfa7f956b09b4cbe4c88d3b1c217049f75d3900d36df0fa12689256b58dd2ef784ebbeb0564600cf47a841485f8cf897a68accd5a"),
+ },
+ 'ECC(PSA_ECC_FAMILY_SECT_R1)': {
+ 163: ("009b05dc82d46d64a04a22e6e5ca70ca1231e68c50",
+ "0400465eeb9e7258b11e33c02266bfe834b20bcb118700772796ee4704ec67651bd447e3011959a79a04cb"),
+ 233: ("00e5e42834e3c78758088b905deea975f28dc20ef6173e481f96e88afe7f",
+ "0400cd68c8af4430c92ec7a7048becfdf00a6bae8d1b4c37286f2d336f2a0e017eca3748f4ad6d435c85867aa014eea1bd6d9d005bbd8319cab629001d"),
+ 283: ("004cecad915f6f3c9bbbd92d1eb101eda23f16c7dad60a57c87c7e1fd2b29b22f6d666ad",
+ "04052f9ff887254c2d1440ba9e30f13e2185ba53c373b2c410dae21cf8c167f796c08134f601cbc4c570bffbc2433082cf4d9eb5ba173ecb8caec15d66a02673f60807b2daa729b765"),
+ 409: ("00c22422d265721a3ae2b3b2baeb77bee50416e19877af97b5fc1c700a0a88916ecb9050135883accb5e64edc77a3703f4f67a64",
+ "0401aa25466b1d291846db365957b25431591e50d9c109fe2106e93bb369775896925b15a7bfec397406ab4fe6f6b1a13bf8fdcb9300fa5500a813228676b0a6c572ed96b0f4aec7e87832e7e20f17ca98ecdfd36f59c82bddb8665f1f357a73900e827885ec9e1f22"),
+ 571: ("026ac1cdf92a13a1b8d282da9725847908745138f5c6706b52d164e3675fcfbf86fc3e6ab2de732193267db029dd35a0599a94a118f480231cfc6ccca2ebfc1d8f54176e0f5656a1",
+ "040708f3403ee9948114855c17572152a08f8054d486defef5f29cbffcfb7cfd9280746a1ac5f751a6ad902ec1e0525120e9be56f03437af196fbe60ee7856e3542ab2cf87880632d80290e39b1a2bd03c6bbf6225511c567bd2ff41d2325dc58346f2b60b1feee4dc8b2af2296c2dc52b153e0556b5d24152b07f690c3fa24e4d1d19efbdeb1037833a733654d2366c74"),
+ },
+ 'ECC(PSA_ECC_FAMILY_SECT_R2)': {
+ 163: ("0210b482a458b4822d0cb21daa96819a67c8062d34",
+ "0403692601144c32a6cfa369ae20ae5d43c1c764678c037bafe80c6fd2e42b7ced96171d9c5367fd3dca6f"),
+ },
+ 'ECC(PSA_ECC_FAMILY_BRAINPOOL_P_R1)': {
+ 160: ("69502c4fdaf48d4fa617bdd24498b0406d0eeaac",
+ "04d4b9186816358e2f9c59cf70748cb70641b22fbab65473db4b4e22a361ed7e3de7e8a8ddc4130c5c"),
+ 192: ("1688a2c5fbf4a3c851d76a98c3ec88f445a97996283db59f",
+ "043fdd168c179ff5363dd71dcd58de9617caad791ae0c37328be9ca0bfc79cebabf6a95d1c52df5b5f3c8b1a2441cf6c88"),
+ 224: ("a69835dafeb5da5ab89c59860dddebcfd80b529a99f59b880882923c",
+ "045fbea378fc8583b3837e3f21a457c31eaf20a54e18eb11d104b3adc47f9d1c97eb9ea4ac21740d70d88514b98bf0bc31addac1d19c4ab3cc"),
+ 256: ("2161d6f2db76526fa62c16f356a80f01f32f776784b36aa99799a8b7662080ff",
+ "04768c8cae4abca6306db0ed81b0c4a6215c378066ec6d616c146e13f1c7df809b96ab6911c27d8a02339f0926840e55236d3d1efbe2669d090e4c4c660fada91d"),
+ 320: ("61b8daa7a6e5aa9fccf1ef504220b2e5a5b8c6dc7475d16d3172d7db0b2778414e4f6e8fa2032ead",
+ "049caed8fb4742956cc2ad12a9a1c995e21759ef26a07bc2054136d3d2f28bb331a70e26c4c687275ab1f434be7871e115d2350c0c5f61d4d06d2bcdb67f5cb63fdb794e5947c87dc6849a58694e37e6cd"),
+ 384: ("3dd92e750d90d7d39fc1885cd8ad12ea9441f22b9334b4d965202adb1448ce24c5808a85dd9afc229af0a3124f755bcb",
+ "04719f9d093a627e0d350385c661cebf00c61923566fe9006a3107af1d871bc6bb68985fd722ea32be316f8e783b7cd1957785f66cfc0cb195dd5c99a8e7abaa848553a584dfd2b48e76d445fe00dd8be59096d877d4696d23b4bc8db14724e66a"),
+ 512: ("372c9778f69f726cbca3f4a268f16b4d617d10280d79a6a029cd51879fe1012934dfe5395455337df6906dc7d6d2eea4dbb2065c0228f73b3ed716480e7d71d2",
+ "0438b7ec92b61c5c6c7fbc28a4ec759d48fcd4e2e374defd5c4968a54dbef7510e517886fbfc38ea39aa529359d70a7156c35d3cbac7ce776bdb251dd64bce71234424ee7049eed072f0dbc4d79996e175d557e263763ae97095c081e73e7db2e38adc3d4c9a0487b1ede876dc1fca61c902e9a1d8722b8612928f18a24845591a"),
+ },
+ 'ECC(PSA_ECC_FAMILY_MONTGOMERY)': {
+ 255: ("70076d0a7318a57d3c16c17251b26645df4c2f87ebc0992ab177fba51db92c6a",
+ "8520f0098930a754748b7ddcb43ef75a0dbf3a0d26381af4eba4a98eaa9b4e6a"),
+ 448: ("e4e49f52686f9ee3b638528f721f1596196ffd0a1cddb64c3f216f06541805cfeb1a286dc78018095cdfec050e8007b5f4908962ba20d6c1",
+ "c0d3a5a2b416a573dc9909f92f134ac01323ab8f8e36804e578588ba2d09fe7c3e737f771ca112825b548a0ffded6d6a2fd09a3e77dec30e"),
+ },
+ 'ECC(PSA_ECC_FAMILY_TWISTED_EDWARDS)': {
+ 255: ("9d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60",
+ "d75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a"),
+ 448: ("6c82a562cb808d10d632be89c8513ebf6c929f34ddfa8c9f63c9960ef6e348a3528c8a3fcc2f044e39a3fc5b94492f8f032e7549a20098f95b",
+ "5fd7449b59b461fd2ce787ec616ad46a1da1342485a70e1f8a0ea75d80e96778edf124769b46c7061bd6783df1e50f6cd1fa1abeafe8256180"),
+ },
+ 'RSA': {
+ 1024: ("""
+3082025e
+ 020100
+ 02818100af057d396ee84fb75fdbb5c2b13c7fe5a654aa8aa2470b541ee1feb0b12d25c79711531249e1129628042dbbb6c120d1443524ef4c0e6e1d8956eeb2077af12349ddeee54483bc06c2c61948cd02b202e796aebd94d3a7cbf859c2c1819c324cb82b9cd34ede263a2abffe4733f077869e8660f7d6834da53d690ef7985f6bc3
+ 0203010001
+ 02818100874bf0ffc2f2a71d14671ddd0171c954d7fdbf50281e4f6d99ea0e1ebcf82faa58e7b595ffb293d1abe17f110b37c48cc0f36c37e84d876621d327f64bbe08457d3ec4098ba2fa0a319fba411c2841ed7be83196a8cdf9daa5d00694bc335fc4c32217fe0488bce9cb7202e59468b1ead119000477db2ca797fac19eda3f58c1
+ 024100e2ab760841bb9d30a81d222de1eb7381d82214407f1b975cbbfe4e1a9467fd98adbd78f607836ca5be1928b9d160d97fd45c12d6b52e2c9871a174c66b488113
+ 024100c5ab27602159ae7d6f20c3c2ee851e46dc112e689e28d5fcbbf990a99ef8a90b8bb44fd36467e7fc1789ceb663abda338652c3c73f111774902e840565927091
+ 024100b6cdbd354f7df579a63b48b3643e353b84898777b48b15f94e0bfc0567a6ae5911d57ad6409cf7647bf96264e9bd87eb95e263b7110b9a1f9f94acced0fafa4d
+ 024071195eec37e8d257decfc672b07ae639f10cbb9b0c739d0c809968d644a94e3fd6ed9287077a14583f379058f76a8aecd43c62dc8c0f41766650d725275ac4a1
+ 024100bb32d133edc2e048d463388b7be9cb4be29f4b6250be603e70e3647501c97ddde20a4e71be95fd5e71784e25aca4baf25be5738aae59bbfe1c997781447a2b24
+""", """
+ 308189
+ 02818100af057d396ee84fb75fdbb5c2b13c7fe5a654aa8aa2470b541ee1feb0b12d25c79711531249e1129628042dbbb6c120d1443524ef4c0e6e1d8956eeb2077af12349ddeee54483bc06c2c61948cd02b202e796aebd94d3a7cbf859c2c1819c324cb82b9cd34ede263a2abffe4733f077869e8660f7d6834da53d690ef7985f6bc3
+ 0203010001
+"""),
+ 1536: ("""
+3082037b
+ 020100
+ 0281c100c870feb6ca6b1d2bd9f2dd99e20f1fe2d7e5192de662229dbe162bd1ba66336a7182903ca0b72796cd441c83d24bcdc3e9a2f5e4399c8a043f1c3ddf04754a66d4cfe7b3671a37dd31a9b4c13bfe06ee90f9d94ddaa06de67a52ac863e68f756736ceb014405a6160579640f831dddccc34ad0b05070e3f9954a58d1815813e1b83bcadba814789c87f1ef2ba5d738b793ec456a67360eea1b5faf1c7cc7bf24f3b2a9d0f8958b1096e0f0c335f8888d0c63a51c3c0337214fa3f5efdf6dcc35
+ 0203010001
+ 0281c06d2d670047973a87752a9d5bc14f3dae00acb01f593aa0e24cf4a49f932931de4bbfb332e2d38083da80bc0b6d538edba479f7f77d0deffb4a28e6e67ff6273585bb4cd862535c946605ab0809d65f0e38f76e4ec2c3d9b8cd6e14bcf667943892cd4b34cc6420a439abbf3d7d35ef73976dd6f9cbde35a51fa5213f0107f83e3425835d16d3c9146fc9e36ce75a09bb66cdff21dd5a776899f1cb07e282cca27be46510e9c799f0d8db275a6be085d9f3f803218ee3384265bfb1a3640e8ca1
+ 026100e6848c31d466fffefc547e3a3b0d3785de6f78b0dd12610843512e495611a0675509b1650b27415009838dd8e68eec6e7530553b637d602424643b33e8bc5b762e1799bc79d56b13251d36d4f201da2182416ce13574e88278ff04467ad602d9
+ 026100de994fdf181f02be2bf9e5f5e4e517a94993b827d1eaf609033e3a6a6f2396ae7c44e9eb594cf1044cb3ad32ea258f0c82963b27bb650ed200cde82cb993374be34be5b1c7ead5446a2b82a4486e8c1810a0b01551609fb0841d474bada802bd
+ 026076ddae751b73a959d0bfb8ff49e7fcd378e9be30652ecefe35c82cb8003bc29cc60ae3809909baf20c95db9516fe680865417111d8b193dbcf30281f1249de57c858bf1ba32f5bb1599800e8398a9ef25c7a642c95261da6f9c17670e97265b1
+ 0260732482b837d5f2a9443e23c1aa0106d83e82f6c3424673b5fdc3769c0f992d1c5c93991c7038e882fcda04414df4d7a5f4f698ead87851ce37344b60b72d7b70f9c60cae8566e7a257f8e1bef0e89df6e4c2f9d24d21d9f8889e4c7eccf91751
+ 026009050d94493da8f00a4ddbe9c800afe3d44b43f78a48941a79b2814a1f0b81a18a8b2347642a03b27998f5a18de9abc9ae0e54ab8294feac66dc87e854cce6f7278ac2710cb5878b592ffeb1f4f0a1853e4e8d1d0561b6efcc831a296cf7eeaf
+""", """
+3081c9
+ 0281c100c870feb6ca6b1d2bd9f2dd99e20f1fe2d7e5192de662229dbe162bd1ba66336a7182903ca0b72796cd441c83d24bcdc3e9a2f5e4399c8a043f1c3ddf04754a66d4cfe7b3671a37dd31a9b4c13bfe06ee90f9d94ddaa06de67a52ac863e68f756736ceb014405a6160579640f831dddccc34ad0b05070e3f9954a58d1815813e1b83bcadba814789c87f1ef2ba5d738b793ec456a67360eea1b5faf1c7cc7bf24f3b2a9d0f8958b1096e0f0c335f8888d0c63a51c3c0337214fa3f5efdf6dcc35
+ 0203010001
+"""),
+ },
+})
diff --git a/lib/mbedtls-2.27.0/scripts/mbedtls_dev/c_build_helper.py b/lib/mbedtls-2.27.0/scripts/mbedtls_dev/c_build_helper.py
new file mode 100644
index 0000000..5c587a1
--- /dev/null
+++ b/lib/mbedtls-2.27.0/scripts/mbedtls_dev/c_build_helper.py
@@ -0,0 +1,138 @@
+"""Generate and run C code.
+"""
+
+# 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.
+
+import os
+import platform
+import subprocess
+import sys
+import tempfile
+
+def remove_file_if_exists(filename):
+ """Remove the specified file, ignoring errors."""
+ if not filename:
+ return
+ try:
+ os.remove(filename)
+ except OSError:
+ pass
+
+def create_c_file(file_label):
+ """Create a temporary C file.
+
+ * ``file_label``: a string that will be included in the file name.
+
+ Return ```(c_file, c_name, exe_name)``` where ``c_file`` is a Python
+ stream open for writing to the file, ``c_name`` is the name of the file
+ and ``exe_name`` is the name of the executable that will be produced
+ by compiling the file.
+ """
+ c_fd, c_name = tempfile.mkstemp(prefix='tmp-{}-'.format(file_label),
+ suffix='.c')
+ exe_suffix = '.exe' if platform.system() == 'Windows' else ''
+ exe_name = c_name[:-2] + exe_suffix
+ remove_file_if_exists(exe_name)
+ c_file = os.fdopen(c_fd, 'w', encoding='ascii')
+ return c_file, c_name, exe_name
+
+def generate_c_printf_expressions(c_file, cast_to, printf_format, expressions):
+ """Generate C instructions to print the value of ``expressions``.
+
+ Write the code with ``c_file``'s ``write`` method.
+
+ Each expression is cast to the type ``cast_to`` and printed with the
+ printf format ``printf_format``.
+ """
+ for expr in expressions:
+ c_file.write(' printf("{}\\n", ({}) {});\n'
+ .format(printf_format, cast_to, expr))
+
+def generate_c_file(c_file,
+ caller, header,
+ main_generator):
+ """Generate a temporary C source file.
+
+ * ``c_file`` is an open stream on the C source file.
+ * ``caller``: an informational string written in a comment at the top
+ of the file.
+ * ``header``: extra code to insert before any function in the generated
+ C file.
+ * ``main_generator``: a function called with ``c_file`` as its sole argument
+ to generate the body of the ``main()`` function.
+ """
+ c_file.write('/* Generated by {} */'
+ .format(caller))
+ c_file.write('''
+#include <stdio.h>
+''')
+ c_file.write(header)
+ c_file.write('''
+int main(void)
+{
+''')
+ main_generator(c_file)
+ c_file.write(''' return 0;
+}
+''')
+
+def get_c_expression_values(
+ cast_to, printf_format,
+ expressions,
+ caller=__name__, file_label='',
+ header='', include_path=None,
+ keep_c=False,
+): # pylint: disable=too-many-arguments
+ """Generate and run a program to print out numerical values for expressions.
+
+ * ``cast_to``: a C type.
+ * ``printf_format``: a printf format suitable for the type ``cast_to``.
+ * ``header``: extra code to insert before any function in the generated
+ C file.
+ * ``expressions``: a list of C language expressions that have the type
+ ``cast_to``.
+ * ``include_path``: a list of directories containing header files.
+ * ``keep_c``: if true, keep the temporary C file (presumably for debugging
+ purposes).
+
+ Return the list of values of the ``expressions``.
+ """
+ if include_path is None:
+ include_path = []
+ c_name = None
+ exe_name = None
+ try:
+ c_file, c_name, exe_name = create_c_file(file_label)
+ generate_c_file(
+ c_file, caller, header,
+ lambda c_file: generate_c_printf_expressions(c_file,
+ cast_to, printf_format,
+ expressions)
+ )
+ c_file.close()
+ cc = os.getenv('CC', 'cc')
+ subprocess.check_call([cc] +
+ ['-I' + dir for dir in include_path] +
+ ['-o', exe_name, c_name])
+ if keep_c:
+ sys.stderr.write('List of {} tests kept at {}\n'
+ .format(caller, c_name))
+ else:
+ os.remove(c_name)
+ output = subprocess.check_output([exe_name])
+ return output.decode('ascii').strip().split('\n')
+ finally:
+ remove_file_if_exists(exe_name)
diff --git a/lib/mbedtls-2.27.0/scripts/mbedtls_dev/crypto_knowledge.py b/lib/mbedtls-2.27.0/scripts/mbedtls_dev/crypto_knowledge.py
new file mode 100644
index 0000000..7214adb
--- /dev/null
+++ b/lib/mbedtls-2.27.0/scripts/mbedtls_dev/crypto_knowledge.py
@@ -0,0 +1,153 @@
+"""Knowledge about cryptographic mechanisms implemented in Mbed TLS.
+
+This module is entirely based on the PSA API.
+"""
+
+# 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.
+
+import re
+from typing import Dict, Iterable, Optional, Pattern, Tuple
+
+from mbedtls_dev.asymmetric_key_data import ASYMMETRIC_KEY_DATA
+
+class KeyType:
+ """Knowledge about a PSA key type."""
+
+ def __init__(self, name: str, params: Optional[Iterable[str]] = None):
+ """Analyze a key type.
+
+ The key type must be specified in PSA syntax. In its simplest form,
+ `name` is a string 'PSA_KEY_TYPE_xxx' which is the name of a PSA key
+ type macro. For key types that take arguments, the arguments can
+ be passed either through the optional argument `params` or by
+ passing an expression of the form 'PSA_KEY_TYPE_xxx(param1, ...)'
+ in `name` as a string.
+ """
+
+ self.name = name.strip()
+ """The key type macro name (``PSA_KEY_TYPE_xxx``).
+
+ For key types constructed from a macro with arguments, this is the
+ name of the macro, and the arguments are in `self.params`.
+ """
+ if params is None:
+ if '(' in self.name:
+ m = re.match(r'(\w+)\s*\((.*)\)\Z', self.name)
+ assert m is not None
+ self.name = m.group(1)
+ params = m.group(2).split(',')
+ self.params = (None if params is None else
+ [param.strip() for param in params])
+ """The parameters of the key type, if there are any.
+
+ None if the key type is a macro without arguments.
+ """
+ assert re.match(r'PSA_KEY_TYPE_\w+\Z', self.name)
+
+ self.expression = self.name
+ """A C expression whose value is the key type encoding."""
+ if self.params is not None:
+ self.expression += '(' + ', '.join(self.params) + ')'
+
+ self.private_type = re.sub(r'_PUBLIC_KEY\Z', r'_KEY_PAIR', self.name)
+ """The key type macro name for the corresponding key pair type.
+
+ For everything other than a public key type, this is the same as
+ `self.name`.
+ """
+
+ ECC_KEY_SIZES = {
+ 'PSA_ECC_FAMILY_SECP_K1': (192, 224, 256),
+ 'PSA_ECC_FAMILY_SECP_R1': (225, 256, 384, 521),
+ 'PSA_ECC_FAMILY_SECP_R2': (160,),
+ 'PSA_ECC_FAMILY_SECT_K1': (163, 233, 239, 283, 409, 571),
+ 'PSA_ECC_FAMILY_SECT_R1': (163, 233, 283, 409, 571),
+ 'PSA_ECC_FAMILY_SECT_R2': (163,),
+ 'PSA_ECC_FAMILY_BRAINPOOL_P_R1': (160, 192, 224, 256, 320, 384, 512),
+ 'PSA_ECC_FAMILY_MONTGOMERY': (255, 448),
+ 'PSA_ECC_FAMILY_TWISTED_EDWARDS': (255, 448),
+ }
+ KEY_TYPE_SIZES = {
+ 'PSA_KEY_TYPE_AES': (128, 192, 256), # exhaustive
+ 'PSA_KEY_TYPE_ARC4': (8, 128, 2048), # extremes + sensible
+ 'PSA_KEY_TYPE_ARIA': (128, 192, 256), # exhaustive
+ 'PSA_KEY_TYPE_CAMELLIA': (128, 192, 256), # exhaustive
+ 'PSA_KEY_TYPE_CHACHA20': (256,), # exhaustive
+ 'PSA_KEY_TYPE_DERIVE': (120, 128), # sample
+ 'PSA_KEY_TYPE_DES': (64, 128, 192), # exhaustive
+ 'PSA_KEY_TYPE_HMAC': (128, 160, 224, 256, 384, 512), # standard size for each supported hash
+ 'PSA_KEY_TYPE_RAW_DATA': (8, 40, 128), # sample
+ 'PSA_KEY_TYPE_RSA_KEY_PAIR': (1024, 1536), # small sample
+ }
+ def sizes_to_test(self) -> Tuple[int, ...]:
+ """Return a tuple of key sizes to test.
+
+ For key types that only allow a single size, or only a small set of
+ sizes, these are all the possible sizes. For key types that allow a
+ wide range of sizes, these are a representative sample of sizes,
+ excluding large sizes for which a typical resource-constrained platform
+ may run out of memory.
+ """
+ if self.private_type == 'PSA_KEY_TYPE_ECC_KEY_PAIR':
+ assert self.params is not None
+ return self.ECC_KEY_SIZES[self.params[0]]
+ return self.KEY_TYPE_SIZES[self.private_type]
+
+ # "48657265006973206b6579a064617461"
+ DATA_BLOCK = b'Here\000is key\240data'
+ def key_material(self, bits: int) -> bytes:
+ """Return a byte string containing suitable key material with the given bit length.
+
+ Use the PSA export representation. The resulting byte string is one that
+ can be obtained with the following code:
+ ```
+ psa_set_key_type(&attributes, `self.expression`);
+ psa_set_key_bits(&attributes, `bits`);
+ psa_set_key_usage_flags(&attributes, PSA_KEY_USAGE_EXPORT);
+ psa_generate_key(&attributes, &id);
+ psa_export_key(id, `material`, ...);
+ ```
+ """
+ if self.expression in ASYMMETRIC_KEY_DATA:
+ if bits not in ASYMMETRIC_KEY_DATA[self.expression]:
+ raise ValueError('No key data for {}-bit {}'
+ .format(bits, self.expression))
+ return ASYMMETRIC_KEY_DATA[self.expression][bits]
+ if bits % 8 != 0:
+ raise ValueError('Non-integer number of bytes: {} bits for {}'
+ .format(bits, self.expression))
+ length = bits // 8
+ if self.name == 'PSA_KEY_TYPE_DES':
+ # "644573206b457901644573206b457902644573206b457904"
+ des3 = b'dEs kEy\001dEs kEy\002dEs kEy\004'
+ return des3[:length]
+ return b''.join([self.DATA_BLOCK] * (length // len(self.DATA_BLOCK)) +
+ [self.DATA_BLOCK[:length % len(self.DATA_BLOCK)]])
+
+ KEY_TYPE_FOR_SIGNATURE = {
+ 'PSA_KEY_USAGE_SIGN_HASH': re.compile('.*KEY_PAIR'),
+ 'PSA_KEY_USAGE_VERIFY_HASH': re.compile('.*KEY.*')
+ } #type: Dict[str, Pattern]
+ """Use a regexp to determine key types for which signature is possible
+ when using the actual usage flag.
+ """
+ def is_valid_for_signature(self, usage: str) -> bool:
+ """Determine if the key type is compatible with the specified
+ signitute type.
+
+ """
+ # This is just temporaly solution for the implicit usage flags.
+ return re.match(self.KEY_TYPE_FOR_SIGNATURE[usage], self.name) is not None
diff --git a/lib/mbedtls-2.27.0/scripts/mbedtls_dev/macro_collector.py b/lib/mbedtls-2.27.0/scripts/mbedtls_dev/macro_collector.py
new file mode 100644
index 0000000..f8d6155
--- /dev/null
+++ b/lib/mbedtls-2.27.0/scripts/mbedtls_dev/macro_collector.py
@@ -0,0 +1,512 @@
+"""Collect macro definitions from header files.
+"""
+
+# 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.
+
+import itertools
+import re
+from typing import Dict, Iterable, Iterator, List, Optional, Pattern, Set, Tuple, Union
+
+
+class ReadFileLineException(Exception):
+ def __init__(self, filename: str, line_number: Union[int, str]) -> None:
+ message = 'in {} at {}'.format(filename, line_number)
+ super(ReadFileLineException, self).__init__(message)
+ self.filename = filename
+ self.line_number = line_number
+
+
+class read_file_lines:
+ # Dear Pylint, conventionally, a context manager class name is lowercase.
+ # pylint: disable=invalid-name,too-few-public-methods
+ """Context manager to read a text file line by line.
+
+ ```
+ with read_file_lines(filename) as lines:
+ for line in lines:
+ process(line)
+ ```
+ is equivalent to
+ ```
+ with open(filename, 'r') as input_file:
+ for line in input_file:
+ process(line)
+ ```
+ except that if process(line) raises an exception, then the read_file_lines
+ snippet annotates the exception with the file name and line number.
+ """
+ def __init__(self, filename: str, binary: bool = False) -> None:
+ self.filename = filename
+ self.line_number = 'entry' #type: Union[int, str]
+ self.generator = None #type: Optional[Iterable[Tuple[int, str]]]
+ self.binary = binary
+ def __enter__(self) -> 'read_file_lines':
+ self.generator = enumerate(open(self.filename,
+ 'rb' if self.binary else 'r'))
+ return self
+ def __iter__(self) -> Iterator[str]:
+ assert self.generator is not None
+ for line_number, content in self.generator:
+ self.line_number = line_number
+ yield content
+ self.line_number = 'exit'
+ def __exit__(self, exc_type, exc_value, exc_traceback) -> None:
+ if exc_type is not None:
+ raise ReadFileLineException(self.filename, self.line_number) \
+ from exc_value
+
+
+class PSAMacroEnumerator:
+ """Information about constructors of various PSA Crypto types.
+
+ This includes macro names as well as information about their arguments
+ when applicable.
+
+ This class only provides ways to enumerate expressions that evaluate to
+ values of the covered types. Derived classes are expected to populate
+ the set of known constructors of each kind, as well as populate
+ `self.arguments_for` for arguments that are not of a kind that is
+ enumerated here.
+ """
+ #pylint: disable=too-many-instance-attributes
+
+ def __init__(self) -> None:
+ """Set up an empty set of known constructor macros.
+ """
+ self.statuses = set() #type: Set[str]
+ self.lifetimes = set() #type: Set[str]
+ self.locations = set() #type: Set[str]
+ self.persistence_levels = set() #type: Set[str]
+ self.algorithms = set() #type: Set[str]
+ self.ecc_curves = set() #type: Set[str]
+ self.dh_groups = set() #type: Set[str]
+ self.key_types = set() #type: Set[str]
+ self.key_usage_flags = set() #type: Set[str]
+ self.hash_algorithms = set() #type: Set[str]
+ self.mac_algorithms = set() #type: Set[str]
+ self.ka_algorithms = set() #type: Set[str]
+ self.kdf_algorithms = set() #type: Set[str]
+ self.aead_algorithms = set() #type: Set[str]
+ self.sign_algorithms = set() #type: Set[str]
+ # macro name -> list of argument names
+ self.argspecs = {} #type: Dict[str, List[str]]
+ # argument name -> list of values
+ self.arguments_for = {
+ 'mac_length': [],
+ 'min_mac_length': [],
+ 'tag_length': [],
+ 'min_tag_length': [],
+ } #type: Dict[str, List[str]]
+ # Whether to include intermediate macros in enumerations. Intermediate
+ # macros serve as category headers and are not valid values of their
+ # type. See `is_internal_name`.
+ # Always false in this class, may be set to true in derived classes.
+ self.include_intermediate = False
+
+ def is_internal_name(self, name: str) -> bool:
+ """Whether this is an internal macro. Internal macros will be skipped."""
+ if not self.include_intermediate:
+ if name.endswith('_BASE') or name.endswith('_NONE'):
+ return True
+ if '_CATEGORY_' in name:
+ return True
+ return name.endswith('_FLAG') or name.endswith('_MASK')
+
+ def gather_arguments(self) -> None:
+ """Populate the list of values for macro arguments.
+
+ Call this after parsing all the inputs.
+ """
+ self.arguments_for['hash_alg'] = sorted(self.hash_algorithms)
+ self.arguments_for['mac_alg'] = sorted(self.mac_algorithms)
+ self.arguments_for['ka_alg'] = sorted(self.ka_algorithms)
+ self.arguments_for['kdf_alg'] = sorted(self.kdf_algorithms)
+ self.arguments_for['aead_alg'] = sorted(self.aead_algorithms)
+ self.arguments_for['sign_alg'] = sorted(self.sign_algorithms)
+ self.arguments_for['curve'] = sorted(self.ecc_curves)
+ self.arguments_for['group'] = sorted(self.dh_groups)
+ self.arguments_for['persistence'] = sorted(self.persistence_levels)
+ self.arguments_for['location'] = sorted(self.locations)
+ self.arguments_for['lifetime'] = sorted(self.lifetimes)
+
+ @staticmethod
+ def _format_arguments(name: str, arguments: Iterable[str]) -> str:
+ """Format a macro call with arguments.
+
+ The resulting format is consistent with
+ `InputsForTest.normalize_argument`.
+ """
+ return name + '(' + ', '.join(arguments) + ')'
+
+ _argument_split_re = re.compile(r' *, *')
+ @classmethod
+ def _argument_split(cls, arguments: str) -> List[str]:
+ return re.split(cls._argument_split_re, arguments)
+
+ def distribute_arguments(self, name: str) -> Iterator[str]:
+ """Generate macro calls with each tested argument set.
+
+ If name is a macro without arguments, just yield "name".
+ If name is a macro with arguments, yield a series of
+ "name(arg1,...,argN)" where each argument takes each possible
+ value at least once.
+ """
+ try:
+ if name not in self.argspecs:
+ yield name
+ return
+ argspec = self.argspecs[name]
+ if argspec == []:
+ yield name + '()'
+ return
+ argument_lists = [self.arguments_for[arg] for arg in argspec]
+ arguments = [values[0] for values in argument_lists]
+ yield self._format_arguments(name, arguments)
+ # Dear Pylint, enumerate won't work here since we're modifying
+ # the array.
+ # pylint: disable=consider-using-enumerate
+ for i in range(len(arguments)):
+ for value in argument_lists[i][1:]:
+ arguments[i] = value
+ yield self._format_arguments(name, arguments)
+ arguments[i] = argument_lists[0][0]
+ except BaseException as e:
+ raise Exception('distribute_arguments({})'.format(name)) from e
+
+ def distribute_arguments_without_duplicates(
+ self, seen: Set[str], name: str
+ ) -> Iterator[str]:
+ """Same as `distribute_arguments`, but don't repeat seen results."""
+ for result in self.distribute_arguments(name):
+ if result not in seen:
+ seen.add(result)
+ yield result
+
+ def generate_expressions(self, names: Iterable[str]) -> Iterator[str]:
+ """Generate expressions covering values constructed from the given names.
+
+ `names` can be any iterable collection of macro names.
+
+ For example:
+ * ``generate_expressions(['PSA_ALG_CMAC', 'PSA_ALG_HMAC'])``
+ generates ``'PSA_ALG_CMAC'`` as well as ``'PSA_ALG_HMAC(h)'`` for
+ every known hash algorithm ``h``.
+ * ``macros.generate_expressions(macros.key_types)`` generates all
+ key types.
+ """
+ seen = set() #type: Set[str]
+ return itertools.chain(*(
+ self.distribute_arguments_without_duplicates(seen, name)
+ for name in names
+ ))
+
+
+class PSAMacroCollector(PSAMacroEnumerator):
+ """Collect PSA crypto macro definitions from C header files.
+ """
+
+ def __init__(self, include_intermediate: bool = False) -> None:
+ """Set up an object to collect PSA macro definitions.
+
+ Call the read_file method of the constructed object on each header file.
+
+ * include_intermediate: if true, include intermediate macros such as
+ PSA_XXX_BASE that do not designate semantic values.
+ """
+ super().__init__()
+ self.include_intermediate = include_intermediate
+ self.key_types_from_curve = {} #type: Dict[str, str]
+ self.key_types_from_group = {} #type: Dict[str, str]
+ self.algorithms_from_hash = {} #type: Dict[str, str]
+
+ def record_algorithm_subtype(self, name: str, expansion: str) -> None:
+ """Record the subtype of an algorithm constructor.
+
+ Given a ``PSA_ALG_xxx`` macro name and its expansion, if the algorithm
+ is of a subtype that is tracked in its own set, add it to the relevant
+ set.
+ """
+ # This code is very ad hoc and fragile. It should be replaced by
+ # something more robust.
+ if re.match(r'MAC(?:_|\Z)', name):
+ self.mac_algorithms.add(name)
+ elif re.match(r'KDF(?:_|\Z)', name):
+ self.kdf_algorithms.add(name)
+ elif re.search(r'0x020000[0-9A-Fa-f]{2}', expansion):
+ self.hash_algorithms.add(name)
+ elif re.search(r'0x03[0-9A-Fa-f]{6}', expansion):
+ self.mac_algorithms.add(name)
+ elif re.search(r'0x05[0-9A-Fa-f]{6}', expansion):
+ self.aead_algorithms.add(name)
+ elif re.search(r'0x09[0-9A-Fa-f]{2}0000', expansion):
+ self.ka_algorithms.add(name)
+ elif re.search(r'0x08[0-9A-Fa-f]{6}', expansion):
+ self.kdf_algorithms.add(name)
+
+ # "#define" followed by a macro name with either no parameters
+ # or a single parameter and a non-empty expansion.
+ # Grab the macro name in group 1, the parameter name if any in group 2
+ # and the expansion in group 3.
+ _define_directive_re = re.compile(r'\s*#\s*define\s+(\w+)' +
+ r'(?:\s+|\((\w+)\)\s*)' +
+ r'(.+)')
+ _deprecated_definition_re = re.compile(r'\s*MBEDTLS_DEPRECATED')
+
+ def read_line(self, line):
+ """Parse a C header line and record the PSA identifier it defines if any.
+ This function analyzes lines that start with "#define PSA_"
+ (up to non-significant whitespace) and skips all non-matching lines.
+ """
+ # pylint: disable=too-many-branches
+ m = re.match(self._define_directive_re, line)
+ if not m:
+ return
+ name, parameter, expansion = m.groups()
+ expansion = re.sub(r'/\*.*?\*/|//.*', r' ', expansion)
+ if parameter:
+ self.argspecs[name] = [parameter]
+ if re.match(self._deprecated_definition_re, expansion):
+ # Skip deprecated values, which are assumed to be
+ # backward compatibility aliases that share
+ # numerical values with non-deprecated values.
+ return
+ if self.is_internal_name(name):
+ # Macro only to build actual values
+ return
+ elif (name.startswith('PSA_ERROR_') or name == 'PSA_SUCCESS') \
+ and not parameter:
+ self.statuses.add(name)
+ elif name.startswith('PSA_KEY_TYPE_') and not parameter:
+ self.key_types.add(name)
+ elif name.startswith('PSA_KEY_TYPE_') and parameter == 'curve':
+ self.key_types_from_curve[name] = name[:13] + 'IS_' + name[13:]
+ elif name.startswith('PSA_KEY_TYPE_') and parameter == 'group':
+ self.key_types_from_group[name] = name[:13] + 'IS_' + name[13:]
+ elif name.startswith('PSA_ECC_FAMILY_') and not parameter:
+ self.ecc_curves.add(name)
+ elif name.startswith('PSA_DH_FAMILY_') and not parameter:
+ self.dh_groups.add(name)
+ elif name.startswith('PSA_ALG_') and not parameter:
+ if name in ['PSA_ALG_ECDSA_BASE',
+ 'PSA_ALG_RSA_PKCS1V15_SIGN_BASE']:
+ # Ad hoc skipping of duplicate names for some numerical values
+ return
+ self.algorithms.add(name)
+ self.record_algorithm_subtype(name, expansion)
+ elif name.startswith('PSA_ALG_') and parameter == 'hash_alg':
+ if name in ['PSA_ALG_DSA', 'PSA_ALG_ECDSA']:
+ # A naming irregularity
+ tester = name[:8] + 'IS_RANDOMIZED_' + name[8:]
+ else:
+ tester = name[:8] + 'IS_' + name[8:]
+ self.algorithms_from_hash[name] = tester
+ elif name.startswith('PSA_KEY_USAGE_') and not parameter:
+ self.key_usage_flags.add(name)
+ else:
+ # Other macro without parameter
+ return
+
+ _nonascii_re = re.compile(rb'[^\x00-\x7f]+')
+ _continued_line_re = re.compile(rb'\\\r?\n\Z')
+ def read_file(self, header_file):
+ for line in header_file:
+ m = re.search(self._continued_line_re, line)
+ while m:
+ cont = next(header_file)
+ line = line[:m.start(0)] + cont
+ m = re.search(self._continued_line_re, line)
+ line = re.sub(self._nonascii_re, rb'', line).decode('ascii')
+ self.read_line(line)
+
+
+class InputsForTest(PSAMacroEnumerator):
+ # pylint: disable=too-many-instance-attributes
+ """Accumulate information about macros to test.
+enumerate
+ This includes macro names as well as information about their arguments
+ when applicable.
+ """
+
+ def __init__(self) -> None:
+ super().__init__()
+ self.all_declared = set() #type: Set[str]
+ # Identifier prefixes
+ self.table_by_prefix = {
+ 'ERROR': self.statuses,
+ 'ALG': self.algorithms,
+ 'ECC_CURVE': self.ecc_curves,
+ 'DH_GROUP': self.dh_groups,
+ 'KEY_LIFETIME': self.lifetimes,
+ 'KEY_LOCATION': self.locations,
+ 'KEY_PERSISTENCE': self.persistence_levels,
+ 'KEY_TYPE': self.key_types,
+ 'KEY_USAGE': self.key_usage_flags,
+ } #type: Dict[str, Set[str]]
+ # Test functions
+ self.table_by_test_function = {
+ # Any function ending in _algorithm also gets added to
+ # self.algorithms.
+ 'key_type': [self.key_types],
+ 'block_cipher_key_type': [self.key_types],
+ 'stream_cipher_key_type': [self.key_types],
+ 'ecc_key_family': [self.ecc_curves],
+ 'ecc_key_types': [self.ecc_curves],
+ 'dh_key_family': [self.dh_groups],
+ 'dh_key_types': [self.dh_groups],
+ 'hash_algorithm': [self.hash_algorithms],
+ 'mac_algorithm': [self.mac_algorithms],
+ 'cipher_algorithm': [],
+ 'hmac_algorithm': [self.mac_algorithms, self.sign_algorithms],
+ 'aead_algorithm': [self.aead_algorithms],
+ 'key_derivation_algorithm': [self.kdf_algorithms],
+ 'key_agreement_algorithm': [self.ka_algorithms],
+ 'asymmetric_signature_algorithm': [self.sign_algorithms],
+ 'asymmetric_signature_wildcard': [self.algorithms],
+ 'asymmetric_encryption_algorithm': [],
+ 'other_algorithm': [],
+ 'lifetime': [self.lifetimes],
+ } #type: Dict[str, List[Set[str]]]
+ self.arguments_for['mac_length'] += ['1', '63']
+ self.arguments_for['min_mac_length'] += ['1', '63']
+ self.arguments_for['tag_length'] += ['1', '63']
+ self.arguments_for['min_tag_length'] += ['1', '63']
+
+ def add_numerical_values(self) -> None:
+ """Add numerical values that are not supported to the known identifiers."""
+ # Sets of names per type
+ self.algorithms.add('0xffffffff')
+ self.ecc_curves.add('0xff')
+ self.dh_groups.add('0xff')
+ self.key_types.add('0xffff')
+ self.key_usage_flags.add('0x80000000')
+
+ # Hard-coded values for unknown algorithms
+ #
+ # These have to have values that are correct for their respective
+ # PSA_ALG_IS_xxx macros, but are also not currently assigned and are
+ # not likely to be assigned in the near future.
+ self.hash_algorithms.add('0x020000fe') # 0x020000ff is PSA_ALG_ANY_HASH
+ self.mac_algorithms.add('0x03007fff')
+ self.ka_algorithms.add('0x09fc0000')
+ self.kdf_algorithms.add('0x080000ff')
+ # For AEAD algorithms, the only variability is over the tag length,
+ # and this only applies to known algorithms, so don't test an
+ # unknown algorithm.
+
+ def get_names(self, type_word: str) -> Set[str]:
+ """Return the set of known names of values of the given type."""
+ return {
+ 'status': self.statuses,
+ 'algorithm': self.algorithms,
+ 'ecc_curve': self.ecc_curves,
+ 'dh_group': self.dh_groups,
+ 'key_type': self.key_types,
+ 'key_usage': self.key_usage_flags,
+ }[type_word]
+
+ # Regex for interesting header lines.
+ # Groups: 1=macro name, 2=type, 3=argument list (optional).
+ _header_line_re = \
+ re.compile(r'#define +' +
+ r'(PSA_((?:(?:DH|ECC|KEY)_)?[A-Z]+)_\w+)' +
+ r'(?:\(([^\n()]*)\))?')
+ # Regex of macro names to exclude.
+ _excluded_name_re = re.compile(r'_(?:GET|IS|OF)_|_(?:BASE|FLAG|MASK)\Z')
+ # Additional excluded macros.
+ _excluded_names = set([
+ # Macros that provide an alternative way to build the same
+ # algorithm as another macro.
+ 'PSA_ALG_AEAD_WITH_DEFAULT_LENGTH_TAG',
+ 'PSA_ALG_FULL_LENGTH_MAC',
+ # Auxiliary macro whose name doesn't fit the usual patterns for
+ # auxiliary macros.
+ 'PSA_ALG_AEAD_WITH_DEFAULT_LENGTH_TAG_CASE',
+ ])
+ def parse_header_line(self, line: str) -> None:
+ """Parse a C header line, looking for "#define PSA_xxx"."""
+ m = re.match(self._header_line_re, line)
+ if not m:
+ return
+ name = m.group(1)
+ self.all_declared.add(name)
+ if re.search(self._excluded_name_re, name) or \
+ name in self._excluded_names or \
+ self.is_internal_name(name):
+ return
+ dest = self.table_by_prefix.get(m.group(2))
+ if dest is None:
+ return
+ dest.add(name)
+ if m.group(3):
+ self.argspecs[name] = self._argument_split(m.group(3))
+
+ _nonascii_re = re.compile(rb'[^\x00-\x7f]+') #type: Pattern
+ def parse_header(self, filename: str) -> None:
+ """Parse a C header file, looking for "#define PSA_xxx"."""
+ with read_file_lines(filename, binary=True) as lines:
+ for line in lines:
+ line = re.sub(self._nonascii_re, rb'', line).decode('ascii')
+ self.parse_header_line(line)
+
+ _macro_identifier_re = re.compile(r'[A-Z]\w+')
+ def generate_undeclared_names(self, expr: str) -> Iterable[str]:
+ for name in re.findall(self._macro_identifier_re, expr):
+ if name not in self.all_declared:
+ yield name
+
+ def accept_test_case_line(self, function: str, argument: str) -> bool:
+ #pylint: disable=unused-argument
+ undeclared = list(self.generate_undeclared_names(argument))
+ if undeclared:
+ raise Exception('Undeclared names in test case', undeclared)
+ return True
+
+ @staticmethod
+ def normalize_argument(argument: str) -> str:
+ """Normalize whitespace in the given C expression.
+
+ The result uses the same whitespace as
+ ` PSAMacroEnumerator.distribute_arguments`.
+ """
+ return re.sub(r',', r', ', re.sub(r' +', r'', argument))
+
+ def add_test_case_line(self, function: str, argument: str) -> None:
+ """Parse a test case data line, looking for algorithm metadata tests."""
+ sets = []
+ if function.endswith('_algorithm'):
+ sets.append(self.algorithms)
+ if function == 'key_agreement_algorithm' and \
+ argument.startswith('PSA_ALG_KEY_AGREEMENT('):
+ # We only want *raw* key agreement algorithms as such, so
+ # exclude ones that are already chained with a KDF.
+ # Keep the expression as one to test as an algorithm.
+ function = 'other_algorithm'
+ sets += self.table_by_test_function[function]
+ if self.accept_test_case_line(function, argument):
+ for s in sets:
+ s.add(self.normalize_argument(argument))
+
+ # Regex matching a *.data line containing a test function call and
+ # its arguments. The actual definition is partly positional, but this
+ # regex is good enough in practice.
+ _test_case_line_re = re.compile(r'(?!depends_on:)(\w+):([^\n :][^:\n]*)')
+ def parse_test_cases(self, filename: str) -> None:
+ """Parse a test case file (*.data), looking for algorithm metadata tests."""
+ with read_file_lines(filename) as lines:
+ for line in lines:
+ m = re.match(self._test_case_line_re, line)
+ if m:
+ self.add_test_case_line(m.group(1), m.group(2))
diff --git a/lib/mbedtls-2.27.0/scripts/mbedtls_dev/psa_storage.py b/lib/mbedtls-2.27.0/scripts/mbedtls_dev/psa_storage.py
new file mode 100644
index 0000000..45f0380
--- /dev/null
+++ b/lib/mbedtls-2.27.0/scripts/mbedtls_dev/psa_storage.py
@@ -0,0 +1,203 @@
+"""Knowledge about the PSA key store as implemented in Mbed TLS.
+"""
+
+# 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.
+
+import re
+import struct
+from typing import Dict, List, Optional, Set, Union
+import unittest
+
+from mbedtls_dev import c_build_helper
+
+
+class Expr:
+ """Representation of a C expression with a known or knowable numerical value."""
+
+ def __init__(self, content: Union[int, str]):
+ if isinstance(content, int):
+ digits = 8 if content > 0xffff else 4
+ self.string = '{0:#0{1}x}'.format(content, digits + 2)
+ self.value_if_known = content #type: Optional[int]
+ else:
+ self.string = content
+ self.unknown_values.add(self.normalize(content))
+ self.value_if_known = None
+
+ value_cache = {} #type: Dict[str, int]
+ """Cache of known values of expressions."""
+
+ unknown_values = set() #type: Set[str]
+ """Expressions whose values are not present in `value_cache` yet."""
+
+ def update_cache(self) -> None:
+ """Update `value_cache` for expressions registered in `unknown_values`."""
+ expressions = sorted(self.unknown_values)
+ values = c_build_helper.get_c_expression_values(
+ 'unsigned long', '%lu',
+ expressions,
+ header="""
+ #include <psa/crypto.h>
+ """,
+ include_path=['include']) #type: List[str]
+ for e, v in zip(expressions, values):
+ self.value_cache[e] = int(v, 0)
+ self.unknown_values.clear()
+
+ @staticmethod
+ def normalize(string: str) -> str:
+ """Put the given C expression in a canonical form.
+
+ This function is only intended to give correct results for the
+ relatively simple kind of C expression typically used with this
+ module.
+ """
+ return re.sub(r'\s+', r'', string)
+
+ def value(self) -> int:
+ """Return the numerical value of the expression."""
+ if self.value_if_known is None:
+ if re.match(r'([0-9]+|0x[0-9a-f]+)\Z', self.string, re.I):
+ return int(self.string, 0)
+ normalized = self.normalize(self.string)
+ if normalized not in self.value_cache:
+ self.update_cache()
+ self.value_if_known = self.value_cache[normalized]
+ return self.value_if_known
+
+Exprable = Union[str, int, Expr]
+"""Something that can be converted to a C expression with a known numerical value."""
+
+def as_expr(thing: Exprable) -> Expr:
+ """Return an `Expr` object for `thing`.
+
+ If `thing` is already an `Expr` object, return it. Otherwise build a new
+ `Expr` object from `thing`. `thing` can be an integer or a string that
+ contains a C expression.
+ """
+ if isinstance(thing, Expr):
+ return thing
+ else:
+ return Expr(thing)
+
+
+class Key:
+ """Representation of a PSA crypto key object and its storage encoding.
+ """
+
+ LATEST_VERSION = 0
+ """The latest version of the storage format."""
+
+ def __init__(self, *,
+ version: Optional[int] = None,
+ id: Optional[int] = None, #pylint: disable=redefined-builtin
+ lifetime: Exprable = 'PSA_KEY_LIFETIME_PERSISTENT',
+ type: Exprable, #pylint: disable=redefined-builtin
+ bits: int,
+ usage: Exprable, alg: Exprable, alg2: Exprable,
+ material: bytes #pylint: disable=used-before-assignment
+ ) -> None:
+ self.version = self.LATEST_VERSION if version is None else version
+ self.id = id #pylint: disable=invalid-name #type: Optional[int]
+ self.lifetime = as_expr(lifetime) #type: Expr
+ self.type = as_expr(type) #type: Expr
+ self.bits = bits #type: int
+ self.usage = as_expr(usage) #type: Expr
+ self.alg = as_expr(alg) #type: Expr
+ self.alg2 = as_expr(alg2) #type: Expr
+ self.material = material #type: bytes
+
+ MAGIC = b'PSA\000KEY\000'
+
+ @staticmethod
+ def pack(
+ fmt: str,
+ *args: Union[int, Expr]
+ ) -> bytes: #pylint: disable=used-before-assignment
+ """Pack the given arguments into a byte string according to the given format.
+
+ This function is similar to `struct.pack`, but with the following differences:
+ * All integer values are encoded with standard sizes and in
+ little-endian representation. `fmt` must not include an endianness
+ prefix.
+ * Arguments can be `Expr` objects instead of integers.
+ * Only integer-valued elements are supported.
+ """
+ return struct.pack('<' + fmt, # little-endian, standard sizes
+ *[arg.value() if isinstance(arg, Expr) else arg
+ for arg in args])
+
+ def bytes(self) -> bytes:
+ """Return the representation of the key in storage as a byte array.
+
+ This is the content of the PSA storage file. When PSA storage is
+ implemented over stdio files, this does not include any wrapping made
+ by the PSA-storage-over-stdio-file implementation.
+ """
+ header = self.MAGIC + self.pack('L', self.version)
+ if self.version == 0:
+ attributes = self.pack('LHHLLL',
+ self.lifetime, self.type, self.bits,
+ self.usage, self.alg, self.alg2)
+ material = self.pack('L', len(self.material)) + self.material
+ else:
+ raise NotImplementedError
+ return header + attributes + material
+
+ def hex(self) -> str:
+ """Return the representation of the key as a hexadecimal string.
+
+ This is the hexadecimal representation of `self.bytes`.
+ """
+ return self.bytes().hex()
+
+ def location_value(self) -> int:
+ """The numerical value of the location encoded in the key's lifetime."""
+ return self.lifetime.value() >> 8
+
+
+class TestKey(unittest.TestCase):
+ # pylint: disable=line-too-long
+ """A few smoke tests for the functionality of the `Key` class."""
+
+ def test_numerical(self):
+ key = Key(version=0,
+ id=1, lifetime=0x00000001,
+ type=0x2400, bits=128,
+ usage=0x00000300, alg=0x05500200, alg2=0x04c01000,
+ material=b'@ABCDEFGHIJKLMNO')
+ expected_hex = '505341004b45590000000000010000000024800000030000000250050010c00410000000404142434445464748494a4b4c4d4e4f'
+ self.assertEqual(key.bytes(), bytes.fromhex(expected_hex))
+ self.assertEqual(key.hex(), expected_hex)
+
+ def test_names(self):
+ length = 0xfff8 // 8 # PSA_MAX_KEY_BITS in bytes
+ key = Key(version=0,
+ id=1, lifetime='PSA_KEY_LIFETIME_PERSISTENT',
+ type='PSA_KEY_TYPE_RAW_DATA', bits=length*8,
+ usage=0, alg=0, alg2=0,
+ material=b'\x00' * length)
+ expected_hex = '505341004b45590000000000010000000110f8ff000000000000000000000000ff1f0000' + '00' * length
+ self.assertEqual(key.bytes(), bytes.fromhex(expected_hex))
+ self.assertEqual(key.hex(), expected_hex)
+
+ def test_defaults(self):
+ key = Key(type=0x1001, bits=8,
+ usage=0, alg=0, alg2=0,
+ material=b'\x2a')
+ expected_hex = '505341004b455900000000000100000001100800000000000000000000000000010000002a'
+ self.assertEqual(key.bytes(), bytes.fromhex(expected_hex))
+ self.assertEqual(key.hex(), expected_hex)
diff --git a/lib/mbedtls-2.27.0/scripts/mbedtls_dev/test_case.py b/lib/mbedtls-2.27.0/scripts/mbedtls_dev/test_case.py
new file mode 100644
index 0000000..d01e143
--- /dev/null
+++ b/lib/mbedtls-2.27.0/scripts/mbedtls_dev/test_case.py
@@ -0,0 +1,102 @@
+"""Library for generating Mbed TLS test data.
+"""
+
+# 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.
+
+import binascii
+import os
+import sys
+from typing import Iterable, List, Optional
+
+from mbedtls_dev import typing_util
+
+def hex_string(data: bytes) -> str:
+ return '"' + binascii.hexlify(data).decode('ascii') + '"'
+
+
+class MissingDescription(Exception):
+ pass
+
+class MissingFunction(Exception):
+ pass
+
+class TestCase:
+ """An Mbed TLS test case."""
+
+ def __init__(self, description: Optional[str] = None):
+ self.comments = [] #type: List[str]
+ self.description = description #type: Optional[str]
+ self.dependencies = [] #type: List[str]
+ self.function = None #type: Optional[str]
+ self.arguments = [] #type: List[str]
+
+ def add_comment(self, *lines: str) -> None:
+ self.comments += lines
+
+ def set_description(self, description: str) -> None:
+ self.description = description
+
+ def set_dependencies(self, dependencies: List[str]) -> None:
+ self.dependencies = dependencies
+
+ def set_function(self, function: str) -> None:
+ self.function = function
+
+ def set_arguments(self, arguments: List[str]) -> None:
+ self.arguments = arguments
+
+ def check_completeness(self) -> None:
+ if self.description is None:
+ raise MissingDescription
+ if self.function is None:
+ raise MissingFunction
+
+ def write(self, out: typing_util.Writable) -> None:
+ """Write the .data file paragraph for this test case.
+
+ The output starts and ends with a single newline character. If the
+ surrounding code writes lines (consisting of non-newline characters
+ and a final newline), you will end up with a blank line before, but
+ not after the test case.
+ """
+ self.check_completeness()
+ assert self.description is not None # guide mypy
+ assert self.function is not None # guide mypy
+ out.write('\n')
+ for line in self.comments:
+ out.write('# ' + line + '\n')
+ out.write(self.description + '\n')
+ if self.dependencies:
+ out.write('depends_on:' + ':'.join(self.dependencies) + '\n')
+ out.write(self.function + ':' + ':'.join(self.arguments) + '\n')
+
+
+
+def write_data_file(filename: str,
+ test_cases: Iterable[TestCase],
+ caller: Optional[str] = None) -> None:
+ """Write the test cases to the specified file.
+
+ If the file already exists, it is overwritten.
+ """
+ if caller is None:
+ caller = os.path.basename(sys.argv[0])
+ with open(filename, 'w') as out:
+ out.write('# Automatically generated by {}. Do not edit!\n'
+ .format(caller))
+ for tc in test_cases:
+ tc.write(out)
+ out.write('\n# End of automatically generated file.\n')
diff --git a/lib/mbedtls-2.27.0/scripts/mbedtls_dev/typing_util.py b/lib/mbedtls-2.27.0/scripts/mbedtls_dev/typing_util.py
new file mode 100644
index 0000000..4c34449
--- /dev/null
+++ b/lib/mbedtls-2.27.0/scripts/mbedtls_dev/typing_util.py
@@ -0,0 +1,39 @@
+"""Auxiliary definitions used in type annotations.
+"""
+
+# 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.
+
+from typing import Any
+
+# The typing_extensions module is necessary for type annotations that are
+# checked with mypy. It is only used for type annotations or to define
+# things that are themselves only used for type annotations. It is not
+# available on a default Python installation. Therefore, try loading
+# what we need from it for the sake of mypy (which depends on, or comes
+# with, typing_extensions), and if not define substitutes that lack the
+# static type information but are good enough at runtime.
+try:
+ from typing_extensions import Protocol #pylint: disable=import-error
+except ImportError:
+ class Protocol: #type: ignore
+ #pylint: disable=too-few-public-methods
+ pass
+
+class Writable(Protocol):
+ """Abstract class for typing hints."""
+ # pylint: disable=no-self-use,too-few-public-methods,unused-argument
+ def write(self, text: str) -> Any:
+ ...
diff --git a/lib/mbedtls-2.27.0/scripts/memory.sh b/lib/mbedtls-2.27.0/scripts/memory.sh
new file mode 100755
index 0000000..9c3882d
--- /dev/null
+++ b/lib/mbedtls-2.27.0/scripts/memory.sh
@@ -0,0 +1,141 @@
+#!/bin/sh
+
+# Measure memory usage of a minimal client using a small configuration
+# Currently hardwired to ccm-psk and suite-b, may be expanded later
+#
+# Use different build options for measuring executable size and memory usage,
+# since for memory we want debug information.
+#
+# 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.
+
+set -eu
+
+CONFIG_H='include/mbedtls/config.h'
+
+CLIENT='mini_client'
+
+CFLAGS_EXEC='-fno-asynchronous-unwind-tables -Wl,--gc-section -ffunction-sections -fdata-sections'
+CFLAGS_MEM=-g3
+
+if [ -r $CONFIG_H ]; then :; else
+ echo "$CONFIG_H not found" >&2
+ exit 1
+fi
+
+if grep -i cmake Makefile >/dev/null; then
+ echo "Not compatible with CMake" >&2
+ exit 1
+fi
+
+if [ $( uname ) != Linux ]; then
+ echo "Only work on Linux" >&2
+ exit 1
+fi
+
+if git status | grep -F $CONFIG_H >/dev/null 2>&1; then
+ echo "config.h not clean" >&2
+ exit 1
+fi
+
+# make measurements with one configuration
+# usage: do_config <name> <unset-list> <server-args>
+do_config()
+{
+ NAME=$1
+ UNSET_LIST=$2
+ SERVER_ARGS=$3
+
+ echo ""
+ echo "config-$NAME:"
+ cp configs/config-$NAME.h $CONFIG_H
+ scripts/config.py unset MBEDTLS_SSL_SRV_C
+
+ for FLAG in $UNSET_LIST; do
+ scripts/config.py unset $FLAG
+ done
+
+ grep -F SSL_MAX_CONTENT_LEN $CONFIG_H || echo 'SSL_MAX_CONTENT_LEN=16384'
+
+ printf " Executable size... "
+
+ make clean
+ CFLAGS=$CFLAGS_EXEC make OFLAGS=-Os lib >/dev/null 2>&1
+ cd programs
+ CFLAGS=$CFLAGS_EXEC make OFLAGS=-Os ssl/$CLIENT >/dev/null
+ strip ssl/$CLIENT
+ stat -c '%s' ssl/$CLIENT
+ cd ..
+
+ printf " Peak ram usage... "
+
+ make clean
+ CFLAGS=$CFLAGS_MEM make OFLAGS=-Os lib >/dev/null 2>&1
+ cd programs
+ CFLAGS=$CFLAGS_MEM make OFLAGS=-Os ssl/$CLIENT >/dev/null
+ cd ..
+
+ ./ssl_server2 $SERVER_ARGS >/dev/null &
+ SRV_PID=$!
+ sleep 1;
+
+ if valgrind --tool=massif --stacks=yes programs/ssl/$CLIENT >/dev/null 2>&1
+ then
+ FAILED=0
+ else
+ echo "client failed" >&2
+ FAILED=1
+ fi
+
+ kill $SRV_PID
+ wait $SRV_PID
+
+ scripts/massif_max.pl massif.out.*
+ mv massif.out.* massif-$NAME.$$
+}
+
+# preparation
+
+CONFIG_BAK=${CONFIG_H}.bak
+cp $CONFIG_H $CONFIG_BAK
+
+rm -f massif.out.*
+
+printf "building server... "
+
+make clean
+make lib >/dev/null 2>&1
+(cd programs && make ssl/ssl_server2) >/dev/null
+cp programs/ssl/ssl_server2 .
+
+echo "done"
+
+# actual measurements
+
+do_config "ccm-psk-tls1_2" \
+ "" \
+ "psk=000102030405060708090A0B0C0D0E0F"
+
+do_config "suite-b" \
+ "MBEDTLS_BASE64_C MBEDTLS_PEM_PARSE_C MBEDTLS_CERTS_C" \
+ ""
+
+# cleanup
+
+mv $CONFIG_BAK $CONFIG_H
+make clean
+rm ssl_server2
+
+exit $FAILED
diff --git a/lib/mbedtls-2.27.0/scripts/output_env.sh b/lib/mbedtls-2.27.0/scripts/output_env.sh
new file mode 100755
index 0000000..1d9e0fa
--- /dev/null
+++ b/lib/mbedtls-2.27.0/scripts/output_env.sh
@@ -0,0 +1,192 @@
+#! /usr/bin/env sh
+
+# output_env.sh
+#
+# 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.
+#
+# Purpose
+#
+# To print out all the relevant information about the development environment.
+#
+# This includes:
+# - architecture of the system
+# - type and version of the operating system
+# - version of make and cmake
+# - version of armcc, clang, gcc-arm and gcc compilers
+# - version of libc, clang, asan and valgrind if installed
+# - version of gnuTLS and OpenSSL
+
+print_version()
+{
+ BIN="$1"
+ shift
+ ARGS="$1"
+ shift
+ VARIANT="$1"
+ shift
+
+ if [ -n "$VARIANT" ]; then
+ VARIANT=" ($VARIANT)"
+ fi
+
+ if ! type "$BIN" > /dev/null 2>&1; then
+ echo " * ${BIN##*/}$VARIANT: Not found."
+ return 0
+ fi
+
+ BIN=`which "$BIN"`
+ VERSION_STR=`$BIN $ARGS 2>&1`
+
+ # Apply all filters
+ while [ $# -gt 0 ]; do
+ FILTER="$1"
+ shift
+ VERSION_STR=`echo "$VERSION_STR" | $FILTER`
+ done
+
+ if [ -z "$VERSION_STR" ]; then
+ VERSION_STR="Version could not be determined."
+ fi
+
+ echo " * ${BIN##*/}$VARIANT: ${BIN} : ${VERSION_STR} "
+}
+
+echo "** Platform:"
+echo
+
+if [ `uname -s` = "Linux" ]; then
+ echo "Linux variant"
+ lsb_release -d -c
+else
+ echo "Unknown Unix variant"
+fi
+
+echo
+
+print_version "uname" "-a" ""
+
+echo
+echo
+echo "** Tool Versions:"
+echo
+
+print_version "make" "--version" "" "head -n 1"
+echo
+
+print_version "cmake" "--version" "" "head -n 1"
+echo
+
+if [ "${RUN_ARMCC:-1}" -ne 0 ]; then
+ : "${ARMC5_CC:=armcc}"
+ print_version "$ARMC5_CC" "--vsn" "" "head -n 2"
+ echo
+
+ : "${ARMC6_CC:=armclang}"
+ print_version "$ARMC6_CC" "--vsn" "" "head -n 2"
+ echo
+fi
+
+print_version "arm-none-eabi-gcc" "--version" "" "head -n 1"
+echo
+
+print_version "gcc" "--version" "" "head -n 1"
+echo
+
+print_version "clang" "--version" "" "head -n 2"
+echo
+
+print_version "ldd" "--version" "" "head -n 1"
+echo
+
+print_version "valgrind" "--version" ""
+echo
+
+print_version "gdb" "--version" "" "head -n 1"
+echo
+
+print_version "perl" "--version" "" "head -n 2" "grep ."
+echo
+
+print_version "python" "--version" "" "head -n 1"
+echo
+
+print_version "python3" "--version" "" "head -n 1"
+echo
+
+# Find the installed version of Pylint. Installed as a distro package this can
+# be pylint3 and as a PEP egg, pylint. In test scripts We prefer pylint over
+# pylint3
+if type pylint >/dev/null 2>/dev/null; then
+ print_version "pylint" "--version" "" "sed /^.*config/d" "grep pylint"
+elif type pylint3 >/dev/null 2>/dev/null; then
+ print_version "pylint3" "--version" "" "sed /^.*config/d" "grep pylint"
+else
+ echo " * pylint or pylint3: Not found."
+fi
+echo
+
+: ${OPENSSL:=openssl}
+print_version "$OPENSSL" "version" "default"
+echo
+
+if [ -n "${OPENSSL_LEGACY+set}" ]; then
+ print_version "$OPENSSL_LEGACY" "version" "legacy"
+else
+ echo " * openssl (legacy): Not configured."
+fi
+echo
+
+if [ -n "${OPENSSL_NEXT+set}" ]; then
+ print_version "$OPENSSL_NEXT" "version" "next"
+else
+ echo " * openssl (next): Not configured."
+fi
+echo
+
+: ${GNUTLS_CLI:=gnutls-cli}
+print_version "$GNUTLS_CLI" "--version" "default" "head -n 1"
+echo
+
+: ${GNUTLS_SERV:=gnutls-serv}
+print_version "$GNUTLS_SERV" "--version" "default" "head -n 1"
+echo
+
+if [ -n "${GNUTLS_LEGACY_CLI+set}" ]; then
+ print_version "$GNUTLS_LEGACY_CLI" "--version" "legacy" "head -n 1"
+else
+ echo " * gnutls-cli (legacy): Not configured."
+fi
+echo
+
+if [ -n "${GNUTLS_LEGACY_SERV+set}" ]; then
+ print_version "$GNUTLS_LEGACY_SERV" "--version" "legacy" "head -n 1"
+else
+ echo " * gnutls-serv (legacy): Not configured."
+fi
+echo
+
+echo " * Installed asan versions:"
+if type dpkg-query >/dev/null 2>/dev/null; then
+ if ! dpkg-query -f '${Status} ${Package}: ${Version}\n' -W 'libasan*' |
+ awk '$3 == "installed" && $4 !~ /-/ {print $4, $5}' |
+ grep .
+ then
+ echo " No asan versions installed."
+ fi
+else
+ echo " Unable to determine the asan version without dpkg."
+fi
+echo
diff --git a/lib/mbedtls-2.27.0/scripts/rename.pl b/lib/mbedtls-2.27.0/scripts/rename.pl
new file mode 100755
index 0000000..9ea5f09
--- /dev/null
+++ b/lib/mbedtls-2.27.0/scripts/rename.pl
@@ -0,0 +1,133 @@
+#!/usr/bin/env perl
+#
+# 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.
+#
+# Purpose
+#
+# This script migrates application source code from the mbed TLS 1.3 API to the
+# mbed TLS 2.0 API.
+#
+# The script processes the given source code and renames identifiers - functions
+# types, enums etc, as
+#
+# Usage: rename.pl [-f datafile] [-s] [--] [filenames...]
+#
+
+use warnings;
+use strict;
+
+use utf8;
+use Path::Class;
+use open qw(:std utf8);
+
+my $usage = "Usage: $0 [-f datafile] [-s] [--] [filenames...]\n";
+
+(my $datafile = $0) =~ s/rename.pl$/data_files\/rename-1.3-2.0.txt/;
+my $do_strings = 0;
+
+while( @ARGV && $ARGV[0] =~ /^-/ ) {
+ my $opt = shift;
+ if( $opt eq '--' ) {
+ last;
+ } elsif( $opt eq '-f' ) {
+ $datafile = shift;
+ } elsif( $opt eq '-s' ) {
+ $do_strings = 1; shift;
+ } else {
+ die $usage;
+ }
+}
+
+my %subst;
+open my $nfh, '<', $datafile or die "Could not read $datafile\n";
+my $ident = qr/[_A-Za-z][_A-Za-z0-9]*/;
+while( my $line = <$nfh> ) {
+ chomp $line;
+ my ( $old, $new ) = ( $line =~ /^($ident)\s+($ident)$/ );
+ if( ! $old || ! $new ) {
+ die "$0: $datafile:$.: bad input '$line'\n";
+ }
+ $subst{$old} = $new;
+}
+close $nfh or die;
+
+my $string = qr/"(?:\\.|[^\\"])*"/;
+my $space = qr/\s+/;
+my $idnum = qr/[a-zA-Z0-9_]+/;
+my $symbols = qr/[-!#\$%&'()*+,.\/:;<=>?@[\\\]^_`{|}~]+|"/;
+
+my $lib_include_dir = dir($0)->parent->parent->subdir('include', 'mbedtls');
+my $lib_source_dir = dir($0)->parent->parent->subdir('library');
+
+# if we replace inside strings, we don't consider them a token
+my $token = $do_strings ? qr/$space|$idnum|$symbols/
+ : qr/$string|$space|$idnum|$symbols/;
+
+my %warnings;
+
+# If no files were passed, exit...
+if ( not defined($ARGV[0]) ){ die $usage; }
+
+while( my $filename = shift )
+{
+ print STDERR "$filename... ";
+
+ if( dir($filename)->parent eq $lib_include_dir ||
+ dir($filename)->parent eq $lib_source_dir )
+ {
+ die "Script cannot be executed on the mbed TLS library itself.";
+ }
+
+ if( -d $filename ) { print STDERR "skip (directory)\n"; next }
+
+ open my $rfh, '<', $filename or die;
+ my @lines = <$rfh>;
+ close $rfh or die;
+
+ my @out;
+ for my $line (@lines) {
+ if( $line =~ /#include/ ) {
+ $line =~ s/polarssl/mbedtls/;
+ $line =~ s/POLARSSL/MBEDTLS/;
+ push( @out, $line );
+ next;
+ }
+
+ my @words = ($line =~ /$token/g);
+ my $checkline = join '', @words;
+ if( $checkline eq $line ) {
+ my @new = map { exists $subst{$_} ? $subst{$_} : $_ } @words;
+ push( @out, join '', @new );
+ } else {
+ $warnings{$filename} = [] unless $warnings{$filename};
+ push @{ $warnings{$filename} }, $line;
+ push( @out, $line );
+ }
+ }
+
+ open my $wfh, '>', $filename or die;
+ print $wfh $_ for @out;
+ close $wfh or die;
+ print STDERR "done\n";
+}
+
+if( %warnings ) {
+ print "\nWarning: lines skipped due to unexpected characters:\n";
+ for my $filename (sort keys %warnings) {
+ print "in $filename:\n";
+ print for @{ $warnings{$filename} };
+ }
+}
diff --git a/lib/mbedtls-2.27.0/scripts/rm-calloc-cast.cocci b/lib/mbedtls-2.27.0/scripts/rm-calloc-cast.cocci
new file mode 100644
index 0000000..89481c0
--- /dev/null
+++ b/lib/mbedtls-2.27.0/scripts/rm-calloc-cast.cocci
@@ -0,0 +1,7 @@
+@rm_calloc_cast@
+expression x, n, m;
+type T;
+@@
+ x =
+- (T *)
+ mbedtls_calloc(n, m)
diff --git a/lib/mbedtls-2.27.0/scripts/tmp_ignore_makefiles.sh b/lib/mbedtls-2.27.0/scripts/tmp_ignore_makefiles.sh
new file mode 100755
index 0000000..558970f
--- /dev/null
+++ b/lib/mbedtls-2.27.0/scripts/tmp_ignore_makefiles.sh
@@ -0,0 +1,59 @@
+#!/bin/bash
+
+# Temporarily (de)ignore Makefiles generated by CMake to allow easier
+# git development
+#
+# 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.
+
+IGNORE=""
+
+# Parse arguments
+#
+until [ -z "$1" ]
+do
+ case "$1" in
+ -u|--undo)
+ IGNORE="0"
+ ;;
+ -v|--verbose)
+ # Be verbose
+ VERBOSE="1"
+ ;;
+ -h|--help)
+ # print help
+ echo "Usage: $0"
+ echo -e " -h|--help\t\tPrint this help."
+ echo -e " -u|--undo\t\tRemove ignores and continue tracking."
+ echo -e " -v|--verbose\t\tVerbose."
+ exit 1
+ ;;
+ *)
+ # print error
+ echo "Unknown argument: '$1'"
+ exit 1
+ ;;
+ esac
+ shift
+done
+
+if [ "X" = "X$IGNORE" ];
+then
+ [ $VERBOSE ] && echo "Ignoring Makefiles"
+ git update-index --assume-unchanged Makefile library/Makefile programs/Makefile tests/Makefile
+else
+ [ $VERBOSE ] && echo "Tracking Makefiles"
+ git update-index --no-assume-unchanged Makefile library/Makefile programs/Makefile tests/Makefile
+fi
diff --git a/lib/mbedtls-2.27.0/scripts/windows_msbuild.bat b/lib/mbedtls-2.27.0/scripts/windows_msbuild.bat
new file mode 100644
index 0000000..e419931
--- /dev/null
+++ b/lib/mbedtls-2.27.0/scripts/windows_msbuild.bat
@@ -0,0 +1,20 @@
+@rem Build and test Mbed TLS with Visual Studio using msbuild.
+@rem Usage: windows_msbuild [RETARGET]
+@rem RETARGET: version of Visual Studio to emulate
+@rem https://docs.microsoft.com/en-us/cpp/build/how-to-modify-the-target-framework-and-platform-toolset
+
+@rem These parameters are hard-coded for now.
+set "arch=x64" & @rem "x86" or "x64"
+set "cfg=Release" & @rem "Debug" or "Release"
+set "vcvarsall=C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvarsall.bat"
+
+if not "%~1"=="" set "retarget=,PlatformToolset=%1"
+
+@rem If the %USERPROFILE%\Source directory exists, then running
+@rem vcvarsall.bat will silently change the directory to that directory.
+@rem Setting the VSCMD_START_DIR environment variable causes it to change
+@rem to that directory instead.
+set "VSCMD_START_DIR=%~dp0\..\visualc\VS2010"
+
+"%vcvarsall%" x64 && ^
+msbuild /t:Rebuild /p:Configuration=%cfg%%retarget% /m mbedTLS.sln