The 'jsrsasign' (RSA-Sign JavaScript Library) is an opensource free pure JavaScript cryptographic library supports RSA/RSAPSS/ECDSA/DSA signing/validation, ASN.1, PKCS#1/5/8 private/public key, X.509 certificate, CRL, CMS SignedData, TimeStamp and CAdES and JSON Web Signature(JWS)/Token(JWT)/Key(JWK).
Public page is http://kjur.github.com/jsrsasign .
Here is the difference between bundled 'Crypto' module and this 'jsrsasign' module.
- Crypto module
- fast
- works only on Node.js
- OpenSSL based
- lacking ASN.1 functionality
- provides symmetric ciphers
- lacking RSAPSS signing
- jsrsasign module
- slow
- implemented in pure JavaScript
- works on both Node.js(server) and browsers(client)
- provides ASN.1 parsing/generation functionality
- lacking symmetric ciphers
- provides RSAPSS signing
- also provides support for JSON Web Signatures (JWS) and JSON Web Token (JWT)
- CryptoJS: for symmetric cipher, hash, mac, PBKDF (BSD License)
- BitCoinJS: for ECDSA (MIT License)
- OpenPGP.js: for DSA (LGPL License)
- Tom Wu's jsbn: for BigInteger, RSA encryption and EC (BSD License)
- Yahoo YUI: for class inheritance (BSD License)
- json-sans-eval: secure JSON parser (Apache License)
Most of the classes and methods defined in jsrsasign and jsjws are available in this jsrsasign npm module.
After loading the module,
> var r = require('jsrsasign');
You can refer name spaces, classes, methods and functions by following variables:
- r.BigInteger - BigInteger class
- r.RSAKey - RSAKey class
- r.ECDSA - KJUR.crypto.ECDSA class
- r.DSA - KJUR.crypto.DSA class
- r.Signature - KJUR.crypto.Signature class
- r.MessageDigest - KJUR.crypto.MessageDigest class
- r.Mac - KJUR.crypto.Mac class
- r.KEYUTIL - KEYUTIL class
- r.ASN1HEX - ASN1HEX class
- r.crypto - KJUR.crypto name space
- r.asn1 - KJUR.asn1 name space
- r.jws - KJUR.jws name space
Please see API reference in the above links.
Loading encrypted PKCS#5 private key:
> var fs = require('fs');
> var pem = fs.readFileSync('z1.prv.p5e.pem', 'binary');
> var prvKey = a.KEYUTIL.getKey(pem, 'passwd');
Sign string 'aaa' with the loaded private key:
> var sig = new a.Signature({alg: 'SHA1withRSA'});
> sig.init(prvKey);
> sig.updateString('aaa');
> var sigVal = sig.sign();
> sigVal
'd764dcacb...'