#libsodium #nacl #crypto #加密解密

未维护 无 std sodiumoxide

Rust 的快速密码库(libsodium 绑定)

20 个版本

使用旧 Rust 2015

0.2.7 2021 年 6 月 24 日
0.2.6 2020 年 7 月 22 日
0.2.5 2019 年 10 月 12 日
0.2.2 2019 年 5 月 16 日
0.0.2 2015 年 3 月 26 日

#7 in #na-cl

Download history 27854/week @ 2024-04-04 22535/week @ 2024-04-11 25588/week @ 2024-04-18 24785/week @ 2024-04-25 22144/week @ 2024-05-02 20143/week @ 2024-05-09 19887/week @ 2024-05-16 18325/week @ 2024-05-23 16279/week @ 2024-05-30 15691/week @ 2024-06-06 15172/week @ 2024-06-13 15206/week @ 2024-06-20 16645/week @ 2024-06-27 13935/week @ 2024-07-04 16179/week @ 2024-07-11 13598/week @ 2024-07-18

62,477 每月下载量
用于 不到 129 crates

MIT/Apache

17MB
68K SLoC

C 33K SLoC // 0.0% comments Rust 11K SLoC // 0.0% comments Shell 9K SLoC // 0.2% comments M4 8K SLoC // 0.2% comments GNU Style Assembly 3K SLoC // 0.0% comments Visual Studio Project 3K SLoC Automake 864 SLoC Pan 574 SLoC Visual Studio Solution 347 SLoC Batch 160 SLoC // 0.0% comments Python 157 SLoC C# 34 SLoC Bitbake 21 SLoC VBScript 10 SLoC

sodiumoxide

|Crate|文档|Gitter| |:---:|:-----------:|:--------:|:-----:|:------:|:----:| |Crates.io|Docs|Gitter|

NaCl(发音为“salt”)是一个易于使用的高性能网络通信、加密、解密、签名等软件库。NaCl 的目标是提供构建更高级加密工具所需的所有核心操作。当然,已经存在其他库用于这些核心操作。NaCl 通过提高安全性、可用性和速度来推动技术进步。

Sodium 是 NaCl 的一个可移植、可交叉编译、可安装、可打包的分支(基于最新发布的上游版本 nacl-20110221),具有兼容的 API。

此包旨在提供一个类型安全且高效的 Rust 绑定,易于使用。由于 mem::MaybeUninit,需要 Rust >= 1.36.0。

基本用法

克隆

git clone https://github.com/sodiumoxide/sodiumoxide.git
cd sodiumoxide
git submodule update --init --recursive

构建

cargo build

测试

cargo test

文档

cargo doc

文档将在 target/doc/... 中生成

大多数文档来自 NaCl,在 API 之间有所不同时进行了少量修改。

AES AEAD 变体的支持

AES AEAD 变体 crypto_aead_aes256gcm 需要 x86 的 AESCLMUL 指令集扩展的硬件支持;您可以在 这里 了解为什么是这样。这些指令集扩展首次在 Intel Westmere(2010 年初)中提供,撰写本文时,x86 硬件对它们的支持几乎普遍。

Libsodium 提供了一个 API 用于运行时功能检测,并且不会阻止你在没有 AESCMUL 表达式的机器上调用 crypto_aead_aes256gcm。这样做会导致运行时 SIGILL(非法指令)。相比之下,sodiumoxide 提供了一个 API,在执行运行时检查之前,阻止使用 crypto_aead_aes256gcm_ 函数族。需要注意的是,当使用 AES 时,使用 sodiumoxide::init() 是强制性的;除非你调用 init,否则即使你的运行时硬件支持 AES,调用 aead::aes256gcm::Aes256Gcm::new() 也总会返回 Err(_)

依赖项

必须安装 C 编译器(ccclang 等)才能从源代码构建 libsodium。

扩展使用

此项目包含了一个 libsodium 的快照,并默认构建它,优先选择静态构建的固定版本的本地库。

虽然强烈建议使用默认方式与固定版本一起使用,但你可以以几种方式使用此 crate

  • 将其链接到系统上安装的库
  • 将其链接到你自己构建的预编译库

你可以通过设置环境变量来完成此操作。

名称 描述 示例值 备注
SODIUM_LIB_DIR 在哪里可以找到预编译库 /usr/lib/x86_64-linux-gnu/ 该值应设置为包含 .so.a.la.dll.lib 的目录
SODIUM_SHARED 告诉 rustc 动态链接库 1 仅与 SODIUM_LIB_DIR 一起使用。我们只检查存在性
SODIUM_USE_PKG_CONFIG 告诉 build.rs 使用 pkg-config 寻找系统库 1 我们只检查存在性
SODIUM_DISABLE_PIE 使用 --disable-pie 构建 1 某些情况下可能需要使用 --disable-pie 配置构建 libsodium。仅在非 Windows 和从源代码构建 libsodium 时有用。我们只检查存在性

在 *nix 上的示例

使用 pkg-config

(Ubuntu: apt install pkg-config,OSX: brew install pkg-config 等)

export SODIUM_USE_PKG_CONFIG=1
cargo build

使用预编译库

请参阅 https://download.libsodium.org/doc/installation

export SODIUM_LIB_DIR=/home/user/libsodium-1.0.18/release/lib/
export SODIUM_SHARED=1
cargo build

可选功能

有几个 可选功能 可用

  • std(默认:启用)。当此功能被禁用时,sodiumoxide 使用 #![no_std] 构建。可能会丢失一些功能。

  • serde(默认:启用)。允许使用 serde 库 对密钥、身份验证标签等进行序列化和反序列化。

  • benchmarks(默认:禁用)。编译基准测试。需要 Rust 的夜间构建。

交叉编译

为 armv7-unknown-linux-gnueabihf 交叉编译

  1. 安装依赖和工具链
sudo apt update
sudo apt install build-essential gcc-arm-linux-gnueabihf libc6-armhf-cross libc6-dev-armhf-cross -y
rustup target add armv7-unknown-linux-gnueabihf
  1. 将以下内容添加到.cargo/config文件
[target.armv7-unknown-linux-gnueabihf]
linker = "arm-linux-gnueabihf-gcc"
  1. 通过运行以下命令进行构建
cargo build --release --target armv7-unknown-linux-gnueabihf

通过Docker跨平台编译armv7-unknown-linux-musleabihf

  1. cargo.config
[target.armv7-unknown-linux-musleabihf]
linker = "arm-buildroot-linux-musleabihf-gcc"
  1. Dockerfile
FROM rust:1.36.0

ENV TARGET="armv7-unknown-linux-musleabihf"

ARG TOOLCHAIN_ARM7="armv7-eabihf--musl--stable-2018.02-2"
ARG TC_ARM7_URL="https://toolchains.bootlin.com/downloads/releases/toolchains/armv7-eabihf/tarballs/${TOOLCHAIN_ARM7}.tar.bz2"

RUN rustup target add ${TARGET}
COPY cargo.config "${CARGO_HOME}/config"

WORKDIR /opt
RUN curl -o- ${TC_ARM7_URL} | tar -xjf -

ENV PATH="${PATH}:/opt/${TOOLCHAIN_ARM7}/bin"
ENV CC_armv7_unknown_linux_musleabihf=arm-buildroot-linux-musleabihf-gcc
ENV CXX_armv7_unknown_linux_musleabihf=arm-buildroot-linux-musleabihf-g++
ENV LD_armv7_unknown_linux_musleabihf=arm-buildroot-linux-musleabihf-ld

WORKDIR /work
RUN git clone https://github.com/sodiumoxide/sodiumoxide

WORKDIR /work/sodiumoxide
RUN cargo build --target=${TARGET}

为32位Linux进行交叉编译

  1. 安装依赖和工具链
sudo apt update
sudo apt install build-essential gcc-multilib -y
rustup target add i686-unknown-linux-gnu
  1. 通过运行以下命令进行构建
cargo build --release --target i686-unknown-linux-gnu

示例

待定

平台兼容性

Sodiumoxide已在以下系统上测试过

  • Linux: 是
  • Windows: 是(MSVC)
  • Mac OS: 是
  • IOS: 待定
  • Android: 是

加入我们

在问题跟踪器中提交问题

主git仓库

git clone https://github.com/sodiumoxide/sodiumoxide.git

许可协议

根据您的要求,许可协议为以下之一

任选其一。

贡献

通过阅读CONTRIBUTING.md文档,了解更多关于如何为此项目做出贡献的信息。

除非您明确表示,否则根据Apache-2.0许可证定义的,任何有意提交以包含在您的工作中的贡献,都将根据上述方式双许可,不附加任何额外的条款或条件。

行为准则

我们相信创建一个为开发者提供支持的平台,并制定了一般性的行为准则。请阅读并采纳它,以帮助我们实现并维持期望的社区标准。

依赖项