#libsodium #nacl #encryption-decryption #networking #crypto

no-std kuska-sodiumoxide

为 Rust 提供快速加密库(libsodium 绑定),具有 ed25519 到 curve25519 的转换功能

1 个不稳定版本

使用旧的 Rust 2015

0.2.5-0 2020年12月4日

#899加密

Download history 61/week @ 2024-03-11 101/week @ 2024-03-18 133/week @ 2024-03-25 183/week @ 2024-04-01 138/week @ 2024-04-08 72/week @ 2024-04-15 104/week @ 2024-04-22 82/week @ 2024-04-29 88/week @ 2024-05-06 84/week @ 2024-05-13 89/week @ 2024-05-20 92/week @ 2024-05-27 92/week @ 2024-06-03 61/week @ 2024-06-10 78/week @ 2024-06-17 72/week @ 2024-06-24

307 每月下载次数
14 软件包中使用 (7 个直接使用)

MIT/Apache

2MB
6.5K SLoC

kuska-sodiumoxide

sodiumoxide 分支而来

分支的更改日志

  • 添加 ed25519 到 curve25519 的转换

软件包 文档 Linux/OS X Windows 覆盖率 Gitter
Crates.io Docs TravisCI AppveyorCI Coverage Status Gitter

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

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

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

基本用法

构建

cargo build

测试

cargo test

文档

cargo doc

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

大多数文档来自 NaCl,API 在 C 和 Rust 版本之间有所不同时进行了一些修改。

依赖项

C 编译器(ccclang,...)必须安装,以便从源代码构建 libsodium。

扩展用法

默认情况下,此项目会下载并构建 libsodium,优先使用静态构建的本地库的固定版本。

虽然强烈建议使用默认的固定版本方式,但您可能有几种使用此软件包的方式

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

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

名称 描述 示例值 备注
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 或 vcpkg 寻找系统库 1 我们只检查是否存在
SODIUM_DISABLE_PIE 使用 --disable-pie 编译 1 某些情况下可能需要使用 --disable-pie 配置的 libsodium 库进行编译。仅适用于 Windows 以及从源码构建 libsodium 的情况。我们只检查是否存在
VCPKGRS_DYNAMIC 指导 vcpkg 寻找 libsodium 1 仅适用于 Windows,与 SODIUM_USE_PKG_CONFIG 一起使用。更多信息:[https://docs.rs/vcpkg/](https://docs.rs/vcpkg/)

在 *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](https://download.libsodium.org/doc/installation)。

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

在 Windows 上的示例

使用 vcpkg

查看[https://github.com/Microsoft/vcpkg](https://github.com/Microsoft/vcpkg)。

C:\Users\user\dev\vcpkg\vcpkg.exe install libsodium --triplet x64-windows
set SODIUM_USE_PKG_CONFIG=1
set VCPKGRS_DYNAMIC=1
cargo build

可选功能

提供了一些可选功能

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

  • 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.30.1

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

示例

TBD

平台兼容性

Sodiumoxide 已在以下平台上进行了测试

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

加入我们

在问题跟踪器中提交错误

主 git 仓库

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

许可证

根据您的选择,许可协议为

贡献

通过CONTRIBUTING.md 文档了解如何为该项目做出贡献。

除非您明确说明,否则任何旨在包含在作品中的贡献,根据 Apache-2.0 许可证的定义,都应以上述方式双重许可,而无需任何额外的条款或条件。

行为准则

我们相信为开发者创造一个有利的社区,并制定了一般 行为准则。请阅读并采用它,以帮助我们实现并维持预期的社区标准。

依赖项

~16MB
~75K SLoC