libtom/libtomcrypt
GitHub: libtom/libtomcrypt
一个模块化、可移植的 C 语言密码学工具库,为开发者提供全面的加密算法与哈希函数实现。
Stars: 1783 | Forks: 494
# libtomcrypt
以前 git 仓库中包含 `doc/crypt.pdf` 作为详细文档。
这已经改变了,现在该文件只能从相应版本的 tarball 中获取,
或者从页面 https://github.com/libtom/libtomcrypt/releases 获取。
## 项目状态
### Travis CI
master: [](https://github.com/libtom/libtomcrypt/actions/workflows/main.yml?query=branch%3Amaster+++) [](https://coveralls.io/r/libtom/libtomcrypt)
develop: [](https://github.com/libtom/libtomcrypt/actions/workflows/main.yml?query=branch%3Adevelop+++) [](https://coveralls.io/r/libtom/libtomcrypt)
### AppVeyor
master: [](https://ci.appveyor.com/project/libtom/libtomcrypt/branch/master)
develop: [](https://ci.appveyor.com/project/libtom/libtomcrypt/branch/develop)
### Coverity
[](https://scan.coverity.com/projects/487)
### ABI 实验室
API/ABI 变更:[点此查看](https://abi-laboratory.pro/tracker/timeline/libtomcrypt/)
## 提交补丁
如果你想提交补丁,请从 develop 分支切出。
如果包含测试和文档,补丁的合并会更快。
请在单独的 commit 中更新 makefile。要更新它们,只需运行 `updatemakes.sh` 脚本。
如果你有更大的内容要提交,请事先与我们联系。
然后我们可以授予你此仓库的写入权限,这样你就可以基于此仓库发起你的 PR
并且我们可以更容易地遵循我们正在使用的 rebase-before-merge(变基后合并)方式(甚至我们自己来进行 rebase)。
### 审查
我们使用 Pull Request 审查来确保代码与现有的代码库保持一致。
请查看[这里](https://help.github.com/articles/approving-a-pull-request-with-required-reviews/) 以了解相关方法。
## 分支
请注意,除了 _master_ 和 _develop_ 之外的所有分支 __可能__ 并且 __将会__ 被 force-push、rebase 和/或删除!
如果你想依赖这样一个 _不稳定_ 的分支,请创建你自己的此仓库的 fork,以确保不会对你造成破坏。
## 配置选项
默认情况下,库会以(取决于你的需求或多或少)最优的方式构建其整个功能集(`katja` 除外)。
如果你想精简库的功能,有许多可用的配置选项。
请查看 `src/headers/tomcrypt_custom.h` 了解所有可用的配置选项。
以下列表是可用选项中的一小部分,但也是最常需要的配置开关。
| Flag | Behavior |
| ---- | -------- |
| `LTC_NO_TEST` | 从库中删除所有算法自测 |
| `LTC_NO_FILE` | 删除所有需要预定义 `FILE` 数据类型的 API 函数(通常对嵌入式目标很有用) |
| `GMP_DESC` | 启用 [gmp](https://gmplib.org/) 作为 MPI 提供者 *\*1* |
| `LTM_DESC` | 启用 [libtommath](http://www.libtom.net/) 作为 MPI 提供者 *\*1* |
| `TFM_DESC` | 启用 [tomsfastmath](http://www.libtom.net/) 作为 MPI 提供者 *\*1* *\*2* |
| `USE_GMP` | 构建二进制文件时使用 `gmp` 作为 MPI 提供者 *\*3* |
| `USE_LTM` | 构建二进制文件时使用 `libtommath` 作为 MPI 提供者 *\*3* |
| `USE_TFM` | 构建二进制文件时使用 `tomsfastmath` 作为 MPI 提供者 *\*3* |
*\*1* 可以同时针对所有 MPI 提供者构建库,并在启动时选择要使用的数学库。
*\*2* 请注意,`tomsfastmath` 具有固定 MPI 最大大小的限制。
*\*3* 同一时间只支持一个,且仅在构建二进制文件时需要,在构建库本身时不需要。
## 构建库
提供了几个 `makefile`。请选择最适合你的一个。
| makefile | 用例 |
| -------- | -------- |
| `makefile` | 构建静态库(需要 GNU Make) |
| `makefile.shared` | 构建共享(及静态)库(需要 GNU Make) |
| `makefile.unix` | 用于不常见的 UNIX 平台,或者如果你没有 GNU Make |
| `makefile.mingw` | 用于在 MS Windows 上使用 mingw 编译器 |
| `makefile.msvc` | 用于在 MS Windows 上使用 MSVC 编译器 |
| `libtomcrypt_VS2008.sln` | 一个用于 MS Windows 的 VisualStudio 2008 项目 |
### Make 目标
`makefile` 提供了几个构建目标(不包括 VS 项目)。
以下列表并不声称是完整的,或者说并不保证在所有 `makefile` 变体中都可用。
| target | 应用 |
| ------ | ----------- |
| *空目标*/未指定 | 参见 `library` |
| `library` | 仅构建库 |
| `hashsum` | 构建 `hashsum` 二进制文件,类似于 [`shasum`](https://linux.die.net/man/1/shasum),但支持库中包含的所有哈希算法 *\*4* |
| `crypt` | 构建 `crypt` 二进制文件,实现类似于 [`crypt`](https://linux.die.net/man/3/crypt) 的功能 *\*4* |
| `sizes` | 构建 `sizes` 二进制文件,在调用时打印所有内部数据大小 *\*4* |
| `constants` | 构建 `constants` 二进制文件,在调用时打印所有内部常量 *\*4* |
| `openssl-enc` | 构建 `openssl-enc` 二进制文件,或多或少与 [`openssl enc`](https://linux.die.net/man/1/enc) 兼容 *\*4* *\*5* |
| `test` | 构建 `test` 二进制文件,运行所有算法自测及一些扩展测试 *\*4* |
| `timing` | 构建 `timing` 二进制文件,可用于测量算法和模式的耗时 *\*4* |
| `bins` | 构建 `hashsum` *\*4* |
| `all_test` | 构建 `test`、`hashsum`、`crypt`、`small`、`tv_gen`、`sizes` 和 `constants` *\*4* |
| `docs` | 构建开发者文档 `doc/crypt.pdf` |
| `install` | 安装 `library` 和头文件 *\*7* *\*8* |
| `install_bins` | 安装由 `bins` 目标创建的二进制文件 *\*7* *\*8* |
| `install_docs` | 安装由 `docs` 目标创建的文档 *\*7* *\*8* |
| `install_test` | 安装由 `test` 目标创建的测试应用 *\*7* *\*8* |
| `install_all` | 安装所有内容(即 `library`、`bins`、`docs` 和 `test`) *\*8* |
| `uninstall` | 卸载 `library` 和头文件 |
*\*4* 也会构建 `library`
*\*5* 在某些配置下构建会出错,因此默认不构建
*\*7* 在安装前也会构建必要的构建产物
*\*8* 另请参阅本文件的“安装”章节
### 示例
你想将库构建为静态库
```
make
```
你想将库构建为共享库
```
make -f makefile.shared
```
你的系统上已安装 `libtommath`,并希望构建静态库和 `test` 二进制文件以运行自测。
```
make CFLAGS="-DUSE_LTM -DLTM_DESC" EXTRALIBS="-ltommath" test
```
你的系统上已安装 `tomsfastmath`,并希望构建共享库和所有二进制文件
```
make -f makefile.shared CFLAGS="-DUSE_TFM -DTFM_DESC" EXTRALIBS="-ltfm" all demos
```
你的系统上已安装 `gmp`、`libtommath` 和 `tomsfastmath`,并希望构建静态库和 `timing` 二进制文件以测量针对 `gmp` 的耗时。
```
make CFLAGS="-DUSE_GMP -DGMP_DESC -DLTM_DESC -DTFM_DESC" EXTRALIBS="-lgmp" timing
```
如果你的 `libtommath` 位于非标准位置:
```
make CFLAGS="-DUSE_LTM -DLTM_DESC -I/opt/devel/ltm" EXTRALIBS="/opt/devel/ltm/libtommath.a" all
```
你想启用 AES-NI 支持:
```
make CFLAGS=-DLTC_AES_NI
```
## 安装
存在几个上述表格中描述的 _install_ make 目标。
这些目标支持标准方式(参见 [[GNU]]、[[FreeBSD]])
通过以下变量集来修改安装路径:
```
DESTDIR
PREFIX
LIBPATH
INCPATH
DATAPATH
BINPATH
```
整个变量集仅在 `makefile`、`makefile.shared` 和 `makefile.unix` 中受支持。
如果你必须使用其他 makefile 之一,请检查该文件以了解支持哪些变量。
### 示例
你想将静态库安装到默认路径
```
make install
```
你想将共享库安装到特定路径并从该路径使用它
```
make -f makefile.shared PREFIX=/opt/special/path
```
请查看开发者文档、[[GNU]] 或 [[FreeBSD]] 以获取所有变量的详细说明。
## CMake 支持
本项目提供对 CMake 构建系统的支持。
```
git clone https://github.com/libtom/libtomcrypt.git
mkdir -p libtomcrypt/build
cd libtomcrypt/build
cmake ..
make -j$(nproc)
```
有关使用 CMake 构建的更多细节,可以在开发者文档中找到。
标签:Bash脚本, Gophish, 公钥加密, 加密工具包, 哈希函数, 安全意识培训, 客户端加密, 密码学, 开发库, 手动系统调用