RNP 0.10.0 released
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.