Ryan Heywood ec8a5c893f | ||
---|---|---|
.. | ||
docker/arm-linux-androidabi | ||
docs | ||
src | ||
.cargo_vcs_info.json | ||
.gitignore | ||
.gitlab-ci.yml | ||
Cargo.toml | ||
Cargo.toml.orig | ||
Cross.toml | ||
LICENSE-GPL2 | ||
LICENSE-GPL3 | ||
LICENSE-LGPL3 | ||
README.md | ||
bindgen-wrapper.h | ||
build.rs | ||
cv448-stubs.rs | ||
ocb-stubs.rs |
README.md
nettle-sys
Low-level Rust bindings for the Nettle cryptographic library.
The documentation can be found here.
Building
To build the Nettle bindings, you need a few libraries and support packages. Notably, you need the Nettle cryptographic library version 3.4.1 or up. Some cryptographic algorithms are only available if build against newer versions of Nettle, see optional features.
Please see below for OS-specific commands to install the needed libraries.
Debian
$ sudo apt install clang llvm pkg-config nettle-dev
Arch Linux
$ sudo pacman -S clang pkg-config nettle --needed
Fedora
$ sudo dnf install clang pkg-config nettle-devel
macOS (Mojave), using MacPorts
$ sudo port install nettle pkgconfig
Windows
MSYS2
You can install the needed libraries with the following command:
$ pacman -S mingw-w64-x86_64-{clang,pkg-config,nettle} libnettle-devel
Optional features
Some cryptographic algorithms are only available if build against newer versions of Nettle. Support for each feature is detected at build time.
In case the automatic detection does not work for some reason, the optional algorithms can be enabled or disabled by setting the given environment variable.
Setting such a variable to 1
, y
, yes
, enable
, or true
enables a feature. Any other value disables it.
Algorithm | Required Nettle version | Environment variable |
---|---|---|
cv448, ed448 | >= 3.6 | NETTLE_HAVE_CV448 |
OCB | >= 3.9 | NETTLE_HAVE_OCB |
Cross compilation
nettle-sys
can be cross compiled using cross
and a custom Docker container. First, build the container and install cross
:
cargo install cross
docker -t nettle-sys/<toolchain>:1 docker/<toolchain>
Then, you can cross compile the project:
cross --target <toolchain> -v
The build artifacts will be placed in target/debug/<toolchain>
.
Static linking
By default, nettle-sys
is dynamically linked to its dependencies.
By defining the NETTLE_STATIC
environment variable during the build, it can
also be statically link to its dependencies:
env NETTLE_STATIC=yes cargo build
This is particularly useful to produce standalone binaries that can be easily distributed.
Pregenerate bindings.rs
By default, nettle-sys
invokes bindgen
to generate bindings for
Nettle. In some build environments, this might not work due to
bindgen
depending on libllvm
. In this case, the bindings.rs
may
be pregenerated, and used by setting:
env NETTLE_PREGENERATED_BINDINGS=/path/to/bindings.rs cargo build
Note: bindings.rs
is specific to target architecture, operating
system, and Nettle version.
License
This project is licensed under either of
- GNU General Public License, Version 2.0, (LICENSE-GPL2 or https://www.gnu.org/licenses/old-licenses/gpl-2.0.html)
- GNU General Public License, Version 3.0, (LICENSE-GPL3 or https://www.gnu.org/licenses/gpl.html)
- GNU Lesser General Public License, Version 3.0, (LICENSE-LGPL3 or https://www.gnu.org/licenses/lgpl.html)
at your option.