JSPM

  • Created
  • Published
  • Downloads 1216
  • Score
    100M100P100Q105988F
  • License MIT

Elliptic curve cryptography library (NodeJS, Browser and Pure JS)

Package Exports

  • eccrypto-js

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (eccrypto-js) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

eccrypto-js npm version

Elliptic curve cryptography library (NodeJS, Browser and Pure JS)

Description

This library is a port from eccrypto it makes use of native libraries on NodeJS and Browser enviroments with pure javascript fallbacks.

Usage

RandomBytes

import * as eccryptoJS from 'eccrypto-js';

const length = 32;
const key = eccryptoJS.randomBytes(length);

// key.length === length

AES

import * as eccryptoJS from 'eccrypto-js';

const key = eccryptoJS.randomBytes(32);
const iv = eccryptoJS.randomBytes(16);

const str = 'test message to encrypt';
const msg = eccryptoJS.utf8ToBuffer(str);

const ciphertext = await eccryptoJS.aesCbcEncrypt(iv, key, msg);

const decrypted = await eccryptoJS.aesCbcDecrypt(iv, key, ciphertext);

// decrypted.toString() === str

HMAC

import * as eccryptoJS from 'eccrypto-js';

const key = eccryptoJS.randomBytes(32);
const iv = eccryptoJS.randomBytes(16);

const macKey = eccryptoJS.concatBuffers(iv, key);
const dataToMac = eccryptoJS.concatBuffers(iv, key, msg);

const mac = await eccryptoJS.hmacSha256Sign(macKey, dataToMac);

const result = await eccryptoJS.hmacSha256Verify(macKey, dataToMac, mac);

// result will return true if match

SHA2

import * as eccryptoJS from 'eccrypto-js';

// SHA256
const str = 'test message to hash';
const msg = eccryptoJS.utf8ToBuffer(str);
const hash = await eccryptoJS.sha256(str);

// SHA512
const str = 'test message to hash';
const msg = eccryptoJS.utf8ToBuffer(str);
const hash = await eccryptoJS.sha512(str);

SHA3

import * as eccryptoJS from 'eccrypto-js';

// SHA3
const str = 'test message to hash';
const msg = eccryptoJS.utf8ToBuffer(str);
const hash = await eccryptoJS.sha3(str);

// KECCAK256
const str = 'test message to hash';
const msg = eccryptoJS.utf8ToBuffer(str);
const hash = await eccryptoJS.keccak256(str);

ECDSA

import * as eccryptoJS from 'eccrypto-js';

const keyPair = eccryptoJS.generateKeyPair();

const str = 'test message to hash';
const msg = eccryptoJS.utf8ToBuffer(str);
const hash = await eccryptoJS.sha256(str);

const sig = await eccryptoJS.sign(keyPair.privateKey, hash);

await eccryptoJS.verify(keyPair.publicKey, msg, sig);

// verify will throw if signature is BAD

ECDH

import * as eccryptoJS from 'eccrypto-js';

const keyPairA = eccryptoJS.generateKeyPair();
const keyPairB = eccryptoJS.generateKeyPair();

const sharedKey1 = await eccryptoJS.derive(
  keyPairA.privateKey,
  keyPairB.publicKey
);

const sharedKey2 = await eccryptoJS.derive(
  keyPairB.privateKey,
  keyPairA.publicKey
);

// sharedKey1.toString('hex') === sharedKey2.toString('hex')

ECIES

import * as eccryptoJS from 'eccrypto-js';

const keyPair = eccryptoJS.generateKeyPair();

const str = 'test message to encrypt';
const msg = eccryptoJS.utf8ToBuffer(str);

const encrypted = await eccryptoJS.encrypt(keyPairB.publicKey, msg);

const decrypted = await eccryptoJS.decrypt(keyPairB.privateKey, encrypted);

// decrypted.toString() === str

PBKDF2

import * as eccryptoJS from 'eccrypto-js';

const password = 'password';
const buffer = eccryptoJS.utf8ToBuffer(str);

const key = await eccryptoJS.pbkdf2(buffer);

// key.length === 32

React-Native Support

This library is intended for use in a Browser or NodeJS environment, however it is possible to use in a React-Native environment if NodeJS modules are polyfilled with react-native-crypto, read more here.

License

MIT License