mbedTLS-FCA 3.5.5

mbedTLS-FCA 3.5.5

BaconTimes 维护。



  • 作者:
  • bacon

Mbed TLS 的 README

配置

Mbed TLS 应能在大多数系统上直接构建。部分平台特定的选项可在完全文档化的配置文件 include/mbedtls/config.h 中找到,这也是选择功能的地方。此文件可手动编辑,或使用 Perl 脚本 scripts/config.pl 以更程序化的方式进行编辑(使用 --help 获取使用说明)。

编译器选项可通过使用传统的环境变量设置,如 CCCFLAGS,在 Make 和 CMake 构建系统下(见下文)进行设置。

编译

Mbed TLS 版本中当前使用了三个活跃的构建系统

  • GNU Make
  • CMake
  • Microsoft Visual Studio (Microsoft Visual Studio 2010 或更高版本)

用于开发的 主要系统是 CMake 和 GNU Make。这些系统始终完整且最新。其他系统应反映 CMake 和 Make 构建系统中的所有变更,尽管某些功能可能不会自动移植到那里。

Make 和 CMake 构建系统会创建三个库:libmbedcrypto、libmbedx509 和 libmbedtls。请注意,libmbedtls 依赖于 libmbedx509 和 libmbedcrypto,而 libmbedx509 依赖于 libmbedcrypto。因此,某些连接器会期望旗帜按特定顺序排列,例如 GNU 连接器需要 -lmbedtls -lmbedx509 -lmbedcrypto。此外,当使用 dlopen() 加载共享库时,您需要先加载 libmbedcrypto,然后是 libmbedx509,之后才能加载 libmbedtls。

Make

我们要求使用 GNU Make。要构建库和示例程序,只要有 GNU Make 和 C 编译器就足够了。某些更高级的构建目标可能需要一些 Unix/Linux 工具。

我们有意在使用 makefile 时仅使用最少的功能,以尽可能保持它们简单且独立于不同的工具链,使用户更容易在不同平台之间移动。需要更多功能的用户建议使用 CMake。

要使用 GNU Make 从源代码编译,只需在命令行中输入

make

要运行测试,请输入

make check

测试需要 Perl 来构建和运行。如果您未安装 Perl,则可以用以下命令跳过构建测试

make no_test

您仍然可以使用

programs/test/selftest

要为 Windows 平台编译,如果目标是 Windows 但构建环境是类 Unix(例如交叉编译或从 MSYS shell 编译),则应使用 WINDOWS_BUILD=1;如果构建环境是 Windows shell(例如使用 mingw32-make),则应使用 WINDOWS=1(在这种情况下,某些目标将不可用)。

在您的环境中设置变量 SHARED 将构建共享库和静态库。设置 DEBUG 将提供调试构建。您可以通过在环境中设置或在 make 命令行中设置来覆盖 CFLAGSLDFLAGS;可以独立使用 WARNING_CFLAGS 覆盖编译器警告选项。某些特定目录的选项(例如,-I 指令)仍然保留。

请注意,设置 CFLAGS 将覆盖其默认值 -O2,设置 WARNING_CFLAGS 将覆盖其默认值(以 -Wall -W 开头),所以如果您只想将一些警告选项添加到默认选项中,可以通过设置 CFLAGS=-O2 -Werror 等。当您想在默认内容中去除某些内容时(例如,因为您的编译器不接受 -Wall 作为选项),设置 WARNING_CFLAGS 是有用的。无法从命令行覆盖特定目录的选项。

根据您的平台,您可能会遇到一些问题。请检查 library/programs/tests/ 中的 Makefiles,以查看为特定平台手动添加或删除的选项。您还可以查看 Mbed TLS 知识库 中的有关您平台或问题的文章。

如果您还有其他的事情要做,请告诉我们,这样我们就可以将它添加到 Mbed TLS 知识库

CMake

为了在使用 CMake 在单独的目录中(强烈推荐)构建源代码,请输入命令行:

mkdir /path/to/build_dir && cd /path/to/build_dir
cmake /path/to/mbedtls_source
make

要运行测试,请输入

make test

测试套件需要 Perl 来构建。如果您没有安装 Perl,您将需要禁用测试套件,如下所示:

cmake -DENABLE_TESTING=Off /path/to/mbedtls_source

如果您已禁用测试套件但保持程序开启,您仍然可以使用以下方式运行一组更小的测试:

programs/test/selftest

要为构建共享库配置 CMake,请使用:

cmake -DUSE_SHARED_MBEDTLS_LIBRARY=On /path/to/mbedtls_source

CMake 建筑系统中提供了许多不同的构建模式。其中大多数对 gcc 和 clang 可用,尽管一些是对编译器特定的。

  • 发布。这会生成没有在二进制文件中包含任何不必要信息的默认代码。
  • 调试。这会生成调试信息并禁用代码优化。
  • 覆盖。这除了生成调试信息外,还生成了代码覆盖率信息。
  • ASan。这使用 AddressSanitizer 仪器代码以检查内存错误。(这包括 LeakSanitizer,在最新的 gcc 和 clang 版本中。)(在最新版本的 clang 中,此模式还会使用 UndefinedSanitizer 仪器代码以检查未定义的行为。)
  • ASanDbg。与 ASan 相同但速度较慢,具有调试信息和更好的堆栈跟踪。
  • MemSan。这使用 MemorySanitizer 仪器代码以检查未初始化的内存读取。实验性,需要 Linux/x86_64 的最新 clang。
  • MemSanDbg。与 MemSan 相同但速度较慢,具有调试信息、更好的堆栈跟踪和源跟踪。
  • 检查。这激活了依赖于优化的编译器警告,并将所有警告视为错误。

在 CMake 中切换构建模式很简单。对于调试模式,在命令行中输入:

cmake -D CMAKE_BUILD_TYPE=Debug /path/to/mbedtls_source

要列出其他 CMake 选项,请使用:

cmake -LH

注意,使用 CMake 后,您无法调整编译器或其标志的初始调用之后。这意味着 CC=your_cc makemake CC=your_cc不会 工作(与 CFLAGS 和其他变量类似)。这些变量需要在首次调用 cmake 时进行调整,例如

CC=your_cc cmake /path/to/mbedtls_source

如果您已调用 cmake 并且想更改这些设置,您需要删除构建目录并重新创建它。

请注意,可以就地构建;但是,这将覆盖提供的 Makefiles(如果您想防止 git status 将它们显示为已修改,请参阅 scripts/tmp_ignore_makefiles.sh)。为此,从 Mbed TLS 源目录中,使用以下命令:

cmake .
make

如果您之后要更改 CCCFLAGS,您将需要删除 CMake 缓存。这可以使用以下命令完成,使用 GNU find:

find . -iname '*cmake*' -not -name CMakeLists.txt -exec rm -rf {} +

现在您可以做出所需更改

CC=your_cc cmake .
make

关于变量,还需注意,当调用cmake时设置CFLAGS,您的CFLAGS值并不会覆盖cmake提供的所有内容(如上所示,取决于构建模式),它只是附加到其后。

Microsoft Visual Studio

Microsoft Visual Studio的构建文件是为Visual Studio 2010生成的。

解决方案文件mbedTLS.sln包含了构建库和所有程序所需的所有基本项目。测试目录中的文件不会生成和编译,因为这些需要Perl环境。然而,在programs/test/中的自测程序仍然可用。

示例程序

我们在programs/目录中包含了大量不同功能和应用的示例程序。[查看更多](https://tls.mbed.org/kb/development/mbedtls-coding-standards)。大多数程序只关注单一的功能或使用场景,所以当复制代码的一部分时请留意这一点。

测试

Mbed TLS在tests/中包含了一个复杂的测试套件,最初需要Perl生成测试文件(例如test\_suite\_mpi.c)。这些文件是从一个功能文件(例如suites/test\_suite\_mpi.function)和一个数据文件(例如suites/test\_suite\_mpi.data)生成的。功能文件包含测试函数,而数据文件则包含测试案例,这些测试案例将作为参数传递给测试函数。

对于安装了Unix shell和OpenSSL(以及可选的GnuTLS)的计算机,还有额外的测试脚本可用。

  • tests/ssl-opt.sh运行了针对各种TLS选项(重协商、恢复等)的集成测试,并测试了这些选项与其他实现之间的互操作性。
  • tests/compat.sh测试了所有加密套件与其他实现之间的互操作性。
  • tests/scripts/test-ref-configs.pl测试了各种简化的配置构建。
  • tests/scripts/key-exchanges.pl测试了仅启用单个密钥交换的配置构建。
  • tests/scripts/all.sh运行了上述测试的组合,以及更多测试,使用各种构建选项(例如ASan、完整的config.h等)。

配置

我们在configs/目录中提供了一些非标准配置,这些配置针对特定的用例。您可以在configs/README.txt中了解更多信息。

移植Mbed TLS

Mbed TLS可以被移植到许多不同的架构、操作系统和平台。在开始移植之前,您可能会发现以下知识库文章非常有用:

参与贡献

我们感谢社区提供的错误报告和贡献。为了能够整合贡献,我们有一些要求需要满足。

  • 所有贡献,无论大小,都需要接受一份贡献者许可协议(CLA)。这是因为源代码可能会受到版权法的保护,我们需要您的同意来分享版权所有权。
  • 我们希望贡献能够符合我们的编码规范,并在提交之前进行充分测试。
  • 与任何开源项目一样,贡献将由项目团队和社区进行审查,可能需要一些修改才能被接受。

要接受贡献者许可协议(CLA),个人贡献者可以通过创建一个Mbed账户,在此处点击接受在线协议来完成操作。对于来自公司或不愿创建Mbed账户的贡献,可以找到一份不同的协议此处。此协议应签字并按照指示返回给Arm。

提交贡献

  1. 检查未解决的问题开始关于一个功能想法或错误的讨论
  2. 从GitHub上分叉Mbed TLS仓库开始您的修改。一般来说,您应该以“开发”分支为基础。
  3. 编写一个测试用例来展示错误已被修复或功能按预期工作。
  4. 提交一个pull请求并不断催促,直到它被合并并发布。贡献可能需要进行一些修改,所以请与我们合作以便您的修改被接受。我们会把您的名字列入ChangeLog :)