UNPKG

hybrid-ecies

Version:

Hybrid EC encryption scheme that EC curve secp256k1, and chacha20-poly1305 or aes-256-gcm to encrypt data. The returned data is a packed Buffer with the public key, nonce/iv, tag, and encrypted data.

182 lines (138 loc) 4.94 kB
var assert = require('assert'); const {ECIES} = require('../lib/ecies'); const { isBuffer } = require('util'); let ec = new ECIES(); describe('ECIES', () => { let secKey = ec.createKeyPair(); describe('#createKeyPair()', () => { it('should return a buffer', () => { assert.ok(Buffer.isBuffer(secKey)); }); it('should be length of 32 bytes', () => { assert.equal(secKey.length, 32); }); }); let pubKey = ec.getPublicKey(secKey); let pubKeyComp = ec.getPublicKey(secKey, true); describe('#getPublicKey()', () => { it('should be a buffer', () => { assert.ok(Buffer.isBuffer(pubKey)); }); it('should be length of 65 bytes', () => { assert.equal(pubKey.length, 65); }); it('should be length of 33 bytes compressed', () => { assert.equal(pubKeyComp.length, 33); }); }); let tempKeys = ec.createKeyPair(); let sec1 = ec.getSecret(secKey, ec.getPublicKey(tempKeys)); let sec2 = ec.getSecret(tempKeys, ec.getPublicKey(secKey)); describe('#getSecret()', () => { it('should be a buffer', () => { assert.ok(Buffer,isBuffer(sec1)); }); it('should be length of 32 bytes', () => { assert.equal(sec1.length, 32); }); it('should be equal with keys interchanged', () => { assert.equal(sec1.toString('hex'),sec2.toString('hex')); }); }); let der = ec.getDER(secKey, 'Private'); let derPub = ec.getDER(ec.getPublicKey(secKey),'Public'); let derPubComp = ec.getDER(ec.getPublicKey(secKey, true),'Public'); describe('#publicJWK()', () => { it('should be a buffer', () => { assert.ok(isBuffer(der)); }) it('should equal 118 bytes', () => { assert.ok(der.length, 118); }) it('should equal 88 bytes', () => { assert.equal(derPub.length, 88); }) it('should equal 56 bytes', () => { assert.equal(derPubComp.length, 56); }) }); let pem = ec.getPEM(secKey,'RAW','Private'); let pemPub = ec.getPEM(ec.getPublicKey(secKey),'RAW', 'Public'); let pemPubComp = ec.getPEM(ec.getPublicKey(secKey, true),'RAW','Public'); describe('#getPEM()', () => { it('should be a string', () => { assert.equal(typeof(pem), 'string'); }); it('should be a string', () => { assert.equal(typeof(pemPub), 'string'); }); it('should be a string', () => { assert.equal(typeof(pemPubComp), 'string'); }); }); let jwkPub = ec.publicJWK(pubKey); describe('#publicJWK()', () => { it('should be a object', () => { assert.equal(typeof(jwkPri), 'object'); }); }); let jwkPri = ec.privateJWK(secKey); describe('#privateJWK()', () => { it('should be a object', () => { assert.equal(typeof(jwkPub), 'object'); }); }); let bufPri = ec.JWKtoBuffer(jwkPri); let bufPub = ec.JWKtoBuffer(jwkPub); let bufComp = ec.JWKtoBuffer(ec.publicJWK(ec.getPublicKey(secKey,'true'))); describe('#JWKtoBuffer()', () => { it('should be a buffer', () => { assert.equal(typeof(bufPri), 'object'); }); it('should be equal to private key', () => { assert.equal(secKey.toString('hex'),bufPri.toString('hex')); }); it('should be equal to public key', () => { assert.equal(pubKey.toString('hex'),bufPub.toString('hex')); }); it('should be equal to public compressed key', () => { assert.equal(ec.getPublicKey(secKey,'true').toString('hex'),bufComp.toString('hex')); }); }); let encPack = ec.encryptChaCha20(pubKey, 'Pass the test!'); describe('#encryptChaCha20()', () => { it('should be a buffer', () => { assert.ok(Buffer.isBuffer(encPack)); }); it('should be greater than 61 bytes', () => { assert.ok(encPack.length > 61); }); }); let dec = ec.decryptChaCha20(secKey, encPack); describe('#decryptChaCha20()', () => { it('should be a buffer', () => { assert.ok(Buffer.isBuffer(dec)); }); it('should equal encrypted data', () => { assert.equal(dec.toString('hex'), Buffer.from('Pass the test!').toString('hex')); }); }); let aesPack = ec.encryptAES256(pubKey,'Pass the test!'); describe('#encryptAES256()', () => { it('should be a buffer', () => { assert.ok(Buffer.isBuffer(aesPack)); }); it('should be greater than 65 bytes', () => { assert.ok(aesPack.length > 65); }); }); let aesData = ec.decryptAES256(secKey, aesPack); describe('#encryptAES256()', () => { it('should be a buffer', () => { assert.ok(Buffer.isBuffer(aesData)); }); it('should equal encrypted data', () => { assert.equal(aesData.toString('hex'), Buffer.from('Pass the test!').toString('hex')); }); }); });