Git Product home page Git Product logo

sequoia's Introduction

Sequoia PGP

Sequoia is a cool new OpenPGP implementation. It consists of several crates, providing both a low-level and a high-level API for dealing with OpenPGP data.

Low-level API

The low-level API can be found in the 'openpgp' crate. This crate aims to provide a complete implementation of OpenPGP as defined by RFC 4880 as well as several extensions (e.g., RFC 6637, which describes ECC cryptography for OpenPGP, and RFC 4880bis, the draft of the next OpenPGP standard). This includes support for unbuffered message processing.

The 'openpgp' crate tries hard to avoid dictating how OpenPGP should be used. This doesn't mean that we don't have opinions about how OpenPGP should be used in a number of common scenarios (for instance, message validation). But, in this crate, we refrain from expressing those opinions; we expose an opinionated, high-level interface in the sequoia-core and related crates. In our opinion, you should generally use those crates instead of this one.

High-level API

The high-level API can be found in the 'sequoia' crate, which conveniently includes all the other crates. The high-level API include a public key store, and network access routines.

Please note that as of this writing the high-level API is very incomplete.

Foreign Function Interface

Sequoia provides a C API for use in languages other than Rust. The glue code for the low-level interface can be found in the 'sequoia-openpgp-ffi' crate, glue for the high-level interface in the 'sequoia-ffi' crate.

Project status

The low-level API is quite feature-complete and can be used encrypt, decrypt, sign, and verify messages. It can create, inspect, and manipulate OpenPGP data on a very low-level.

The high-level API is effectively non-existent, though there is some functionality related to key servers and key stores.

The foreign function interface provides a C API for some of Sequoia's low- and high-level interfaces, but it is incomplete.

There is a command-line frontend 'sq' that exposes most of Sequoia's functionality in a convenient way.

There is a mostly feature-complete command-line verification tool for detached messages called 'sqv'.

LICENSE

Sequoia is licensed under the GNU General Public License version 3 or any later version. See the file LICENSE.txt or visit https://www.gnu.org/licenses/gpl-3.0.html for details.

Building Sequoia

If you want to use Sequoia from Rust, you can simply register the dependency in your Cargo.toml file as with any other project. Note that we depend on a number of C libraries, which must be present along with their development packages.

Besides being a Rust crate, we also provide a C API, and bindings to other languages. We also consider the needs of packagers in times where distribution support for packaging Rust projects is not yet mature enough to handle a project like Sequoia. Therefore, we provide a Makefile to simplify building, testing, and installing Sequoia.

To build Sequoia, simply execute make. To run the test suites, execute make test (or use the check alias). To install Sequoia, use make install. The latter target honors PREFIX and DESTDIR. Finally, to return your source tree to its pristine state, run make clean.

To build Sequoia, you need at least Rust 1.32.0 and a few libraries. Please see below for OS-specific notes.

Debian

You can install the needed libraries with the following command:

$ sudo apt install git rustc cargo clang make pkg-config nettle-dev libssl-dev capnproto libsqlite3-dev

Notes:

  • You need at least rustc version 1.32.0. The version in Debian 9 (Debian Stable as of 2018) is too old. The version from testing works fine.
  • The version of Nettle in Debian 9 (Debian Stable as of 2018), is too old. Instead, you need at least version 3.4, which is available from Debian testing.

Arch Linux

You can install the needed libraries with the following command:

$ sudo pacman -S git cargo clang make pkg-config nettle openssl capnproto sqlite3 --needed

macOS (Mojave), using MacPorts

You can install the needed libraries with the following command:

$ sudo port install cargo rustc capnproto nettle pkgconfig

Windows

Please make sure to preserve line-endings when cloning the Sequoia repository. The relevant git option is core.autocrlf which must be set to false.

Bindings

Python

The FFI crate contains Python bindings. To disable building, testing, and installing the Python bindings, use make PYTHON=disable.

To build the Python bindings, you will need the Python headers, setuptools, cffi, and pytest for Python3.

Debian

$ sudo apt install python3-dev python3-setuptools python3-cffi python3-pytest

macOS (Mojave), using MacPorts

$ sudo port install py37-setuptools

Getting help

Sequoia's documentation is hosted here: https://docs.sequoia-pgp.org/

You can join our mailing list by sending a mail to [email protected].

You can talk to us using IRC on freenode in #sequoia.

sequoia's People

Contributors

teythoon avatar nwalfield avatar duesee avatar azul avatar r10s avatar doronbehar avatar helbaroudy avatar byron avatar muelli avatar wiktor-k avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.