symbol Asset 1

RNP 0.10.0 released

Author’s picture Ronald Tse on 20 Aug 2018

Meet RNP, an RFC 4880-compliant OpenPGP library written in C++.

RNP was born at Ribose and is continuously maintained under its initiative.

Originally stemmed from NetPGP, it now shares little in common with its ancestor after a year of active development. A thorough rewrite of legacy code, resolving compatibility issues with GnuPG and other implementations, with improved performance and added cutting-edge features.

RNP also differs from other implementations — it is offered under a BSD 3-clause license, which means it is compatible for embedded distribution within GPL, MPL, MIT and most other open-source licenses, as well as being included in commercial binary distributions.

Feel free to use RNP in your software!

Getting started with RNP

If you are deploying OpenPGP in a Ruby-based application, there are bindings (see ruby-rnp RubyDocs).

Since RNP written in C++, you can call it from Objective-C code, or with ctypes under Python.

The RNP binaries rnp and rnpkeys can be installed via Homebrew or YUM, with Debian packages coming next. You can use the binaries similarly to GnuPG’s command-line tools (see supported flags and use cases in the README).

Why RNP?

  • It is a proper library, in contrast to GnuPG/GPGME (see GnuPG is not a library (2013)).

  • Ruby bindings are available with Python & Go bindings in the works, and you can use it wherever you can call C++ code.

  • Implemented in C++ and offers constant memory footprint with large amounts of data.

  • It offers comprehensive cipher support, including (uniquely) the SM algorithm family — a desirable feature if you deploy cryptography in mainland Chinese market.

  • Active development and focused on adding cutting-edge features.

Which algorithms does RNP support?

The following ciphers, encryption modes and hash functions are supported:

  • Symmetric: IDEA, Triple DES, CAST5, Blowfish, AES-128, AES-192, AES-256, Twofish, Camellia-128, Camellia-192, Camellia-256, SM4

  • Symmetric encryption modes: CFB, AEAD-EAX, AEAD-OCB

  • Hash: MD5, SHA1, RIPEMD160, SHA-256, SHA-384, SHA-512, SHA-224, SM3

  • Asymmetric: RSA, ElGamal, DSA, so-called DSA2 (i.e. DSA with keys larger then 1024 bits), ECDSA/ECDH (with some subset of curves which later on will be expanded), EdDSA, SM2.