UNPKG

she_encrypt

Version:

Cryptographic function for ciphering SHE commands args (M1-M3/M4-M5)

331 lines (267 loc) 13.3 kB
#!/usr/bin/env node /** * test.js * */ // Use an IIFE (Immediate Invocation Function Evaluation) for namespace isolation ((root) => { "use strict"; /*jslint indent: 2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */ /*global document, window, escape, unescape, module, require, Uint32Array */ const SHE = require('./SHE_encrypt.js'); /** * TSHE001:KDF_ENC * */ test('TSHE001:KDF_ENC', () => { var bufferKey = Buffer.from('7c374d4a3f39547b556893861d251195', 'hex'); var she = new SHE(true, bufferKey, bufferKey, 0); expect(she.KDF_ENC(bufferKey).toString('hex')).toBe('3fd8715cc353ebf1b0b57fe229a383c1'); } ); /** * TSHE002:KDF_MAC * */ test('TSHE002:KDF_MAC', () => { var bufferKey = Buffer.from('7c374d4a3f39547b556893861d251195', 'hex'); var she = new SHE(true, bufferKey, bufferKey, 0); expect(she.KDF_MAC(bufferKey).toString('hex')).toBe('142843e901ac0f8bb83a02d29dfdf362'); } ); /** * TSHE003:SHE_encrypt+build_Mx * */ test('TSHE003:SHE_encrypt+build_Mx', () => { var cid = 4; var key = "7000153f00a988f111199ed9f320451b"; var provkey = "02810357f029adaa8a7d97078f512662"; var she = new SHE(true, Buffer.from(key, 'hex'), Buffer.from(provkey, 'hex'), cid); expect(she.M1.toString('hex')).toBe("00000000000000000000000000000041"); expect(she.M2.toString('hex')).toBe("fe4dfe5d6e14b32a7f1bbf455cf0c6215f34ec9058f3f07b9f63c175b6a50760"); expect(she.M3.toString('hex')).toBe("5e46542f86e3c2dcbc387f8867124b68"); expect(she.M4.toString('hex')).toBe("000000000000000000000000000000417ec73bcbde0fdbf77de839676077abad"); expect(she.M5.toString('hex')).toBe("892a8a4465d8b438654adddff3a01184"); var m1 = she.M1_K_MAC; var m2dec = she.build_M2(cid, Buffer.from(provkey, 'hex'), true); var m2enc = she.encrypt_M2(m2dec, Buffer.from(key, 'hex')); var m3 = she.build_M3(m1, m2enc, key); var m4 = she.build_M4(true, cid, provkey); var m5 = she.build_M5(m4, provkey) expect(m1.toString('hex')).toBe("00000000000000000000000000000041"); expect(m2dec.toString('hex')).toBe("0000004100000000000000000000000002810357f029adaa8a7d97078f512662"); expect(m2enc.toString('hex')).toBe("fe4dfe5d6e14b32a7f1bbf455cf0c6215f34ec9058f3f07b9f63c175b6a50760"); expect(m3.toString('hex')).toBe("5e46542f86e3c2dcbc387f8867124b68"); expect(m4.toString('hex')).toBe("000000000000000000000000000000417ec73bcbde0fdbf77de839676077abad"); expect(m5.toString('hex')).toBe("892a8a4465d8b438654adddff3a01184"); } ); /** * TSHE004:SHE_encrypt * */ test('TSHE004:SHE_encrypt', () => { var cid = 38; var key = "d0153f7000099e9f7d97320451aa8a07"; var provkey = "0208f118f512810357f9ad82662ba911"; var she = new SHE(true, Buffer.from(key, 'hex'), Buffer.from(provkey, 'hex'), cid); expect(she.M1.toString('hex')).toBe("00000000000000000000000000000041"); expect(she.M2.toString('hex')).toBe("51be7d1d16197eee33fcc27a208ae8bd32619773811ce3a408d0f5b0ce082855"); expect(she.M3.toString('hex')).toBe("401988e597dedb713e56c54834e51c16"); expect(she.M4.toString('hex')).toBe("0000000000000000000000000000004186e722577b0debbc1bd7fa3cfbeffd69"); expect(she.M5.toString('hex')).toBe("90741f8021e26ddbaf0d28543add1883"); } ); /** * TSHE005:KeyConfirmation * */ test('TSHE005:KeyConfirmation', () => { var key = "10357F020289AD8F512662BA988F1111"; var provkey = "0208f118f512810357f9ad82662ba911"; var she = new SHE(true, Buffer.from(key, 'hex'), Buffer.from(provkey, 'hex'), 0x0); expect(she.keyConfirmation(key).toString('hex')).toBe("a7659e5856410babebde81ba58369b59"); expect(she.keyConfirmation(Buffer.from(key, 'hex').toString('hex'))).toBe("a7659e5856410babebde81ba58369b59"); } ); /** * TSHE006:SHE_encrypt * */ test('TSHE006:SHE_encrypt samuel', () => { var cid = '2014E3B'; var key = "10357F020289AD8F512662BA988F1111"; var provkey = "10357F020289AD8F512662BA988F1111"; var she = new SHE(false, Buffer.from(key, 'hex'), Buffer.from(provkey, 'hex'), cid); expect(she.M1.toString('hex')).toBe("00000000000000000000000000000011"); expect(she.M2.toString('hex')).toBe("b4a1fd8e1a9739e65cf0bc320425df6aee053213fe2665dbf86ef0f9c273fac2"); expect(she.M3.toString('hex')).toBe("e115df0bc091de154ff16e67f52bfd0b"); expect(she.M4.toString('hex')).toBe("000000000000000000000000000000119b5b319b90f78b49d320e8e27bec55cc"); expect(she.M5.toString('hex')).toBe("102c3fa407491a9187f8cb93252d9d65"); } ); /** * TSHE007:SHE_encrypt * */ test('TSHE007:SHE_encrypt samuel', () => { var cid = '2014E3B'; var key = "10357F020289AD8F512662BA988F1111"; var provkey = "10357F020289AD8F512662BA988F1111"; var she = new SHE(true, Buffer.from(key, 'hex'), Buffer.from(provkey, 'hex'), cid); expect(she.M1.toString('hex')).toBe("00000000000000000000000000000041"); expect(she.M2.toString('hex')).toBe("9214a9cdf1c33b150a874ae07d8ccbf49a02ed8e1bac7dc67dc783a540294e6d"); expect(she.M3.toString('hex')).toBe("0e0e988cb5c153061f4dceffd6f1efe7"); expect(she.M4.toString('hex')).toBe("000000000000000000000000000000419b5b319b90f78b49d320e8e27bec55cc"); expect(she.M5.toString('hex')).toBe("744b7b283a59150fe73560c30ffdbc66"); } ); /** * TSHE008:SHE_encrypt * */ test('TSHE008:SHE_encrypt samuel', () => { var cid = '200004C'; var key = "0153F7000099ED9F320451AA8A7D9707"; var provkey = "10357F020289AD8F512662BA988F1111"; var she = new SHE(false, Buffer.from(key, 'hex'), Buffer.from(provkey, 'hex'), cid); expect(she.M1.toString('hex')).toBe("00000000000000000000000000000011"); expect(she.M2.toString('hex')).toBe("760cb7a076de11c6904170847b9563fe56f731c90b3ebf33afadb93291bd5a8b"); expect(she.M3.toString('hex')).toBe("766a62306c5429811a8eeff756f81c4c"); expect(she.M4.toString('hex')).toBe("000000000000000000000000000000116cbd441cb364965bb0eac217a56f007d"); expect(she.M5.toString('hex')).toBe("bf847e4ae0eec6d31e52f122fa722783"); } ); /** * TSHE009:SHE_encrypt * */ test('TSHE009:SHE_encrypt samuel', () => { var cid = '200004D'; var key = "0153F7000099ED9F320451AA8A7D9707"; var provkey = "10357F020289AD8F512662BA988F1111"; var she = new SHE(false, Buffer.from(key, 'hex'), Buffer.from(provkey, 'hex'), cid); expect(she.M1.toString('hex')).toBe("00000000000000000000000000000011"); expect(she.M2.toString('hex')).toBe("760cb7a076de11c6904170847b9563fe56f731c90b3ebf33afadb93291bd5a8b"); expect(she.M3.toString('hex')).toBe("766a62306c5429811a8eeff756f81c4c"); expect(she.M4.toString('hex')).toBe("000000000000000000000000000000116cbd441cb364965bb0eac217a56f007d"); expect(she.M5.toString('hex')).toBe("bf847e4ae0eec6d31e52f122fa722783"); } ); /** * TSHE010:SHE_encrypt * */ test('TSHE010:SHE_encrypt Kmaster', () => { var cid = '200104D'; var key = "0153F7000099ED9F320451AA8A7D9707"; var provkey = "10357F020289AD8F512662BA988F1111"; var she = new SHE(false, Buffer.from(key, 'hex'), Buffer.from(provkey, 'hex'), cid); expect(she.M1.toString('hex')).toBe("00000000000000000000000000000011"); expect(she.M2.toString('hex')).toBe("da4271a6a48891255fb9f165f9d906025925e14f28033038d9e48437a2c7d4f3"); expect(she.M3.toString('hex')).toBe("c84c419885afd3597b58ebafc581a640"); expect(she.M4.toString('hex')).toBe("00000000000000000000000000000011f08a6712944a75b03f6ab1a3c0169392"); expect(she.M5.toString('hex')).toBe("9501e76fc16ac98ba0baac19c356bf45"); } ); /** * TSHE011:SHE_encrypt * */ test('TSHE011:SHE_encrypt Kmac', () => { var cid = '200104E'; var key = "0153F7000099ED9F320451AA8A7D9707"; var provkey = "10357F020289AD8F512662BA988F1111"; var she = new SHE(true, Buffer.from(key, 'hex'), Buffer.from(provkey, 'hex'), cid); expect(she.M1.toString('hex')).toBe("00000000000000000000000000000041"); expect(she.M2.toString('hex')).toBe("78fedfd746f557833b196d439015f37007541d0855c718dc55e58ac14a7b333f"); expect(she.M3.toString('hex')).toBe("de7555097300f95f791dcfb0df1d4336"); expect(she.M4.toString('hex')).toBe("00000000000000000000000000000041f08a6712944a75b03f6ab1a3c0169392"); expect(she.M5.toString('hex')).toBe("ac2abe617e287ab27b84bc5ebdcf3dc5"); } ); /** * TSHE012:SHE_encrypt * */ test('TSHE012:SHE_encrypt Kmac ch 2', () => { var cid = '200104E'; var key = "0153F7000099ED9F320451AA8A7D9707"; var provkey = "10357F020289AD8F512662BA988F1111"; var she = new SHE(true, Buffer.from(key, 'hex'), Buffer.from(provkey, 'hex'), cid, 2); expect(she.M1.toString('hex')).toBe("00000000000000000000000000000051"); expect(she.M2.toString('hex')).toBe("78fedfd746f557833b196d439015f37007541d0855c718dc55e58ac14a7b333f"); expect(she.M3.toString('hex')).toBe("7c246ba5df69a5d461f0981b98245f6b"); expect(she.M4.toString('hex')).toBe("00000000000000000000000000000051f08a6712944a75b03f6ab1a3c0169392"); expect(she.M5.toString('hex')).toBe("480cd2d2ea3f14a906752c0dbbe6f0e7"); } ); /** * TSHE013:SHE_encrypt * */ test('TSHE013:SHE_encrypt Kmac ch 3', () => { var cid = '200104E'; var key = "0153F7000099ED9F320451AA8A7D9707"; var provkey = "10357F020289AD8F512662BA988F1111"; var she = new SHE(true, Buffer.from(key, 'hex'), Buffer.from(provkey, 'hex'), cid, 3); expect(she.M1.toString('hex')).toBe("00000000000000000000000000000061"); expect(she.M2.toString('hex')).toBe("78fedfd746f557833b196d439015f37007541d0855c718dc55e58ac14a7b333f"); expect(she.M3.toString('hex')).toBe("cbde6e8abb2f8bd9504803bcd8b9eb12"); expect(she.M4.toString('hex')).toBe("00000000000000000000000000000061f08a6712944a75b03f6ab1a3c0169392"); expect(she.M5.toString('hex')).toBe("57158bb0e94a3d1f6edc4cfdc752285a"); } ); /** * TSHE014:SHE_encrypt * */ test('TSHE014:SHE_encrypt Kmac ch 4', () => { var cid = '200104E'; var key = "0153F7000099ED9F320451AA8A7D9707"; var provkey = "10357F020289AD8F512662BA988F1111"; var she = new SHE(true, Buffer.from(key, 'hex'), Buffer.from(provkey, 'hex'), cid, 4); expect(she.M1.toString('hex')).toBe("00000000000000000000000000000071"); expect(she.M2.toString('hex')).toBe("78fedfd746f557833b196d439015f37007541d0855c718dc55e58ac14a7b333f"); expect(she.M3.toString('hex')).toBe("834978f1c77d6daf00c0820d49614604"); expect(she.M4.toString('hex')).toBe("00000000000000000000000000000071f08a6712944a75b03f6ab1a3c0169392"); expect(she.M5.toString('hex')).toBe("a2cc4f875bb11d9bc2135950cbb13f55"); } ); /** * TSHE015:SHE_encrypt * */ test('TSHE015:SHE_encrypt Kmac ch 5', () => { var cid = '200104E'; var key = "0153F7000099ED9F320451AA8A7D9707"; var provkey = "10357F020289AD8F512662BA988F1111"; var she = new SHE(true, Buffer.from(key, 'hex'), Buffer.from(provkey, 'hex'), cid, 5); expect(she.M1.toString('hex')).toBe("00000000000000000000000000000081"); expect(she.M2.toString('hex')).toBe("78fedfd746f557833b196d439015f37007541d0855c718dc55e58ac14a7b333f"); expect(she.M3.toString('hex')).toBe("f0e9bbfb92332fe46b148766323b730d"); expect(she.M4.toString('hex')).toBe("00000000000000000000000000000081f08a6712944a75b03f6ab1a3c0169392"); expect(she.M5.toString('hex')).toBe("169b0c8707b685f0ca260c05d8958617"); } ); })(this); /* * vim: et:ts=4:sw=4:sts=4 * -*- mode: JavaScript; coding: utf-8-unix; tab-width: 4 -*- */