Socket
Socket
Sign inDemoInstall

msrcrypto

Package Overview
Dependencies
0
Maintainers
1
Versions
12
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    msrcrypto

MSR JavaScript Cryptography Library


Version published
Weekly downloads
66K
increased by4.14%
Maintainers
1
Install size
1.13 MB
Created
Weekly downloads
 

Readme

Source

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

Keywords

FAQs

Last updated on 30 Jan 2020

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc