she_encrypt
Version:
Cryptographic function for ciphering SHE commands args (M1-M3/M4-M5)
331 lines (267 loc) • 13.3 kB
JavaScript
/**
* 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 -*-
*/