symbol Asset 1

RNP 0.10.0 released

20 Aug 2018

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

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

Originally stemmed from NetPGP, it has little in common with its ancestor now after a year of development—after a clean-up of legacy code, corrected compatibility issues with GnuPG and other implementations, improved performance and added cutting-edge features.

Feel free to use RNP in your software!

Getting started with RNP

If you’re deploying OpenPGP in a Ruby-based application, there are bindings (see RubyDoc [1]).

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

RNP’s 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 RNP’s README [2]).

Why RNP?

  • It’s a proper library, in contrast to GnuPG/GPGME [3]. Ruby bindings are available with Python & Go bindings in the works, and you can use it wherever you can call C++ code.

  • It’s 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.

  • Its development is active (with the help of Ribose) 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.