npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

msrcrypto

v1.5.8

Published

MSR JavaScript Cryptography Library

Downloads

524,653

Readme

This library has been modified from the original. A list of changes is available in the commit history.

Included Scripts:

msrcrypto.js 		: Full library
msrcrypto.min.js	: Full library in minified form
msrcrypto.aes.js	: AES-CBC and SHA-256 only
msrcrypto.aes.min.js	: AES-CBC and SHA-256 only in minified form

Changes with version 1.4.1

Includes bug fixes to the elliptic curve module, to:
	* avoid erroneous calculations that could theoretically leak private data 
	* correct the NIST p-521 curve definition
	* avoid rare failures in ECDSA when using the curves NUMSP512D1 and NUMSP512T1.

Changes with version 1.4

The API has been updated to support the latest Web Crypto Api spec and be compatible with the
implementation on the latest browsers.

Promises are now supported and the IE11 based events are removed. Crypto calls are now in the 
form:

// NEW STYLE with Promises
    msrCrypto.subtle.encrypt(<parameters>).then(
    function(encryptionResult) {

	... do something here with the result

    },
    function(error) {

	... handle error

    }
    );


This will break code that uses the pre-1.4 calling conventions:

// OLD STYLE with events (before version 1.4)
var cryptoOperation =  msrCrypto.subtle.encrypt(<parameters>);

cryptoOperation.onComplete = 
    function(encryptionResult) {

	... do something here with the result

    };

cryptoOperation.onError = 
    function(encryptionResult) {

	... handle error

    };

Samples:

msrCrypto\samples\MsrCryptoHMACSample.html : sample page that performs HMAC signing.
msrCrypto\samples\MsrCryptoRsaSample.html  : sample page that performs RSA-OAEP encrypt/decrypt.

API Documentation:

Microsoft Edge browser has a native Web Crypto API implementation. The msrCrypto API mirrors
that API. A link to the Microsoft Edge API has been included. Code written to run on the Microsoft 
Edge API should also run with the msrCrypto API.

Browser compatibility:

msrCrypto.js is compatible with IE8 and up; latest versions of Chrome, Safari, Opera

Known issues: IE8: 'Catch' is a reserved keyword, so using Promises.catch() function will throw and error. To use the catch function use the promise'catch' form.

IE8/9: IE8 & IE9 do not support typed arrays (ArrayBuffer, UInt8Array, etc...). You must use regular Arrays for inputting data into msrCrypto when using IE8/9. Results will be returned as regular Arrays as well. For IE10 and up, results will be returned as an ArrayBuffer.

		IE8 & IE9 do not support web workers. Web workers allow separate threads of
		execution in JavaScript. msrCrypto will use web workers, when available, to 
		perform its crypto work. When web workers are not available, msrCrypto will 
		perform its work synchronously in the main thread.

Bundling & web workers:

msrCrypto uses web workers when available. Web workers use separate threads of 
execution to perform work in parallel with the main thread. Web workers are instantiated 
by calling 'new Worker(pathToJavaScriptFile);' The caller has to provide a valid path at the time
of web worker creation. The worker will then be created and run the code from the script.
For msrCrypto to create a new web worker, it determines its own path at load time and passes
that path to the new Worker() call. For example: new Worker('..\scripts\msrCrypto.js');

If you bundle msrCrypto into a larger JavaScript bundle, web workers will most likely fail.
msrCrypto will determine its path and call new Worker('..\scripts\bundleOfScript.js').
The web worker environment does not have access to the browser DOM and several other
generally available global item. Therefore, the other JavaScript in your bundle will 
most likely cause an error in the web worker and cause the web worker to quietly fail.

Do not bundle msrCrypto.js to ensure web workers will function. If you must bundle, you 
will need to ensure the bundled code will not cause errors in the restricted web worker 
environment.

If you cannot avoid bundling and cannot create a web worker friendly bundle, you can
force msrCrypto to run in synchronous mode. Synchronous mode does not use web workers
and performs the crypto operations within the main thread. Depending on the crypto 
operations, you may notice severe slowdowns.

To force synchronous mode set the following property:
msrCrypto.subtle.forceSync = true;

The bundling of the scripts might require the installation of Bundler & Minifier extension:
https://marketplace.visualstudio.com/items?itemName=MadsKristensen.BundlerMinifier

Native Crypto API:

As of now, Chrome, Firefox, Opera, IE11 and Microsoft Edge provide access to native crypto API 
conforming to the W3C web crypto standard.

msrCrypto does not check for this API nor does it pass crypto calls through to the native
API. You should use the native API when available. To check for and use the native API do 
the following:
var crypto = window.msCrypto | window.crypto | msrCrypto;

Now use crypto.subtle for your encryption calls.

IE11's web crypto implementation is a bit different from the newer browsers. The main 
difference is that it uses events to return the results of api calls. The other browsers
and msrCrypto uses Promises (as described in the W3C web crypto api spec.)

You will have to ensure your code can handle the IE11 event conventions if you want
your code to use the IE11 native web crypto calls.

Random number generator (PRNG):

Many of msrCrypto's crypto algorithms require random numbers. Random numbers for cryptography
need to be obtained from a cryptographically secure random number generator. This is not 
available on older browsers (IE10, IE9, & IE8). 

msrCrypto has its own secure random number generator written in JavaScript (PRNG). However, the PRNG 
needs to be initialized with some bytes of random entropy. It is important that this entropy is 
obtained from a secure random source - such as from a crypto api on the server.

Once the entropy is obtained initialize the PRNG before calling any functions:
	window.msrCrypto.initPrng(randomArrayOf48Bytes);

Supported Algorithms:

msrCrypto supports the following algorithms:

	Encryption/Decryption:
		RSA-OAEP, RSA-PKCSv1.15, AES-CBC, AES-GCM

	Signature/Verify
		RSA-PSS, RSA-PKCSv1.15, HMAC, ECDSA

	Hash
		SHA-1, SHA-224, SHA-256, SHA-384, SHA-512

	Derive Key/Bits
		Concat-KDF, ECDH 

	Supported ECC curves:
		P-256, P-384, P-521, BN-254, NUMSP256D1, NUMSP256T1, NUMSP384D1, NUMSP384T1

	KeyWrap
		AES-GCM