mal / forsake

For RSA sake! Native node bindings for rsautl functions

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Forsake

For RSA sake! Exposes openssl rsautl funtions via a C addon rather than shelling out.

Linux Build Status Windows Build status NPM version

Installation

$ npm install forsake

⚠️ on Windows, either a 32-bit or 64-bit separately-compiled OpenSSL library is required. One can be obtained from slproweb.

API

n.b. all keys are Buffer instances

var forsake = require('forsake');

// sign
var a = forsake.sign('this string', private_key);

// with passphrase
var protected_pkey = { key: private_key, passphrase: 'hello' };
var b = forsake.sign('this string', protected_pkey);

// with padding
var c = forsake.sign('this string', pkey, forsake.RSA_X931_PADDING);

// errors
try {
    forsake.sign('this string', public_key);
} catch (e) {
    e.toString(); //=> "RsaError: Unable to load private key"
    e.failures;   //=> [ 'error:0906D06C:PEM routines:PEM_read_bio:no start line' ]
}

Notes

  • The API for encrypt, decrypt, sign and verify is identical
  • All errors are of type RsaError which is exposed by forsake
  • RsaError.failures contains SSL error strings, which can help identify problems

Keys

The examples below show all possible types of supported key arguments:

var buffer_from_file = fs.readFileSync('id_rsa');
var utf8_string = "-----BEGIN PUBLIC KEY-----\nblah\n-----END PUBLIC KEY-----";
var protected_buffer = { key: buf_from_file, passphrase: 'opensesame' };
var protected_utf8 = { key: utf8_string, passphrase: 'Alohomora' };

Padding

Forsake exposes the following padding constants:

  • RSA_NO_PADDING
  • RSA_PKCS1_OAEP_PADDING
  • RSA_PKCS1_PADDING
  • RSA_SSLV23_PADDING
  • RSA_X931_PADDING

Support

Forsake is able to read PKCS#8, PKCS#1 and X.509 public keys, and PKCS#8 private keys. Passphrases can be used with private keys and the standard padding options are also available.

License

ISC

About

For RSA sake! Native node bindings for rsautl functions


Languages

Language:JavaScript 49.7%Language:C++ 40.1%Language:Python 7.4%Language:C 2.8%