ut-codec
Version:
UT codec module.
686 lines (628 loc) • 22.4 kB
JavaScript
function test(bdd, PayshieldParser, assert, Validator) {
var encodeTestData = {
echo: {
data: {
$$: {
opcode: 'echo',
trace: 234
},
msgSize: '4',
macMessage: 'ping'
},
buf: new Buffer('000234B20004ping')
},
generateKey: {
data: {
$$: {
opcode: 'generateKey',
trace: 234
},
mode: '0',
keyType: '003',
keyScheme: 'U'
},
buf: new Buffer('000234A00003U')
},
generateKeyTmk: {
data: {},
buf: new Buffer('')
},
generateTpk: {
data: {
$$: {
opcode: 'generateTpk',
trace: 234
},
tmk: 'UB15E645AFC1A3F4444A48D58EE983BD3',
keyScheme: 'X',
keyScheme1: '0'
},
buf: new Buffer('000234HCUB15E645AFC1A3F4444A48D58EE983BD3;X00')
},
generateTak: {
data: {
$$: {
opcode: 'generateTak',
trace: 234
},
tmk: 'UB15E645AFC1A3F4444A48D58EE983BD3',
keyScheme: 'U',
keyScheme1: '0'
},
buf: new Buffer('000234HAUB15E645AFC1A3F4444A48D58EE983BD3;U00')
},
generateMac: {
data: {
$$: {
opcode: 'generateMac',
trace: 234
},
macMode: '0',
macInputFormat: '2',
macAlgorithm: '03',
macPaddingMethod: '0',
macKeyType: '003',
macKey: 'U78C6FD3889386436C41F3874A5DE1F48',
msgSize: 8,
macMessage: 'testtesttest'
},
buf: new Buffer('000234M602030003U78C6FD3889386436C41F3874A5DE1F480008testtest')
},
verifyMac: {
data: {
$$: {
opcode: 'verifyMac',
trace: 234
},
macMode: '0',
macInputFormat: '2',
macAlgorithm: '03',
macPaddingMethod: '0',
macKeyType: '003',
macKey: 'U78C6FD3889386436C41F3874A5DE1F48',
msgSize: 8,
macMessage: 'testtest',
mac: '341C677E'
},
buf: new Buffer('000234M802030003U78C6FD3889386436C41F3874A5DE1F480008testtest341C677E')
},
formKey: {
data: {
$$: {
opcode: 'formKey',
trace: 234
},
numberOfComponents: '2',
keyType: '003',
keyScheme: 'U',
keyComponent1: 'U78C6FD3889386436C41F3874A5DE1F48',
keyComponent2: 'U78C6FD3889386436C41F3874A5DE1F48'
},
buf: new Buffer('000234A42003UU78C6FD3889386436C41F3874A5DE1F48U78C6FD3889386436C41F3874A5DE1F48')
},
generateKeycheckvalue: {
data: {
$$: {
opcode: 'generateKeycheckvalue',
trace: 234
},
keyTypeCode: '02',
keyLengthFlag: '1',
keyA32: 'X614BCB4CE30FE4FF13C9CFDD180AA182'
},
buf: new Buffer('000234BU021X614BCB4CE30FE4FF13C9CFDD180AA182')
},
derivePinIbm: {
data: {
$$: {
opcode: 'derivePinIbm',
trace: 234
},
pvk: 'X614BCB4CE30FE4FF13C9CFDD180AA182',
offset: '0000FFFFFFFF',
checkLength: '4',
account: '123456789012',
decimalisationTable: '1234567812345678',
pinValidationData: '23456N543210'
},
buf: new Buffer('000234EEX614BCB4CE30FE4FF13C9CFDD180AA1820000FFFFFFFF04123456789012123456781234567823456N543210')
},
generatePin: {
data: {
$$: {
opcode: 'generatePin',
trace: 234
},
account: '123456789012',
checkLength: 4
},
buf: new Buffer('000234JA12345678901204')
},
generateOffsetIbm: {
data: {
$$: {
opcode: 'generateOffsetIbm',
trace: 234
},
keyType: '002',
keyA32: 'X614BCB4CE30FE4FF13C9CFDD180AA182',
pvk: 'X614BCB4CE30FE4FF13C9CFDD180AA182',
pinBlock: '0592789FFFEDCBA9',
pinBlockFormat: '01',
checkLength: 4,
account: '123456789012',
decimalisationTable: '1234567812345678',
pinValidationData: '23456N543210'
},
buf: new Buffer(
'000234BK002X614BCB4CE30FE4FF13C9CFDD180AA182X614BCB4CE30FE4FF13C9CFDD180AA1820592789FFFEDCBA90104123456789012123456781234567823456N543210'
)
},
verifyTermPinIbm: {
data: {
$$: {
opcode: 'verifyTermPinIbm',
trace: 234
},
tpk: 'X725D74BD3FDC0AA910EB213487423466',
pvk: 'X614BCB4CE30FE4FF13C9CFDD180AA182',
maximumPinLength: 12,
pinBlock: '0592789FFFEDCBA9',
pinBlockFormat: '01',
checkLength: 4,
account: '123456789012',
decimalisationTable: '1234567812345678',
pinValidationData: '23456N543210',
offset: 'FFFF34523421'
},
buf: new Buffer(
'000234DAX725D74BD3FDC0AA910EB213487423466X614BCB4CE30FE4FF13C9CFDD180AA182120592789FFFEDCBA90104123456789012123456781234567823456N543210FFFF34523421'
)
},
importKey: {
data: {
$$: {
opcode: 'importKey',
trace: 234
},
keyType: '001',
zmk: 'U71979DEB8587E2734F1E99D5DCAEF9AC',
keyA32: 'U482C4E722BB0CF1845E1E5BD16310119',
keyScheme: 'U'
},
buf: new Buffer('000234A6001U71979DEB8587E2734F1E99D5DCAEF9ACU482C4E722BB0CF1845E1E5BD16310119U')
},
translateTpkZpk: {
data: {
$$: {
opcode: 'translateTpkZpk',
trace: 234
},
sourceTpk: 'U8463435FC4B4DAA0C49025272C29B12C',
destinationZpk: 'U1EF828AA8F6B80EB83E19FBC373F3A85',
sourcePinBlock: '6428EB94035AF53B',
sourcePinBlockFormat: '01',
destinationPinBlockFormat: '01',
account: '550000025321'
},
buf: new Buffer('000234CAU8463435FC4B4DAA0C49025272C29B12CU1EF828AA8F6B80EB83E19FBC373F3A85126428EB94035AF53B0101550000025321')
},
printPin: {
data: {
$$: {
opcode: 'printPin',
trace: 234
},
documentType: 'A',
account: '123456789012',
pin: '0592789FFFEDCBA9',
printFields: '1'
},
buf: new Buffer('000234PEA1234567890120592789FFFEDCBA91')
},
printFormat: {
data: {
$$: {
opcode: 'printFormat',
trace: 234
},
printFields: '1'
},
buf: new Buffer('000234PA1')
},
translateTpkLmk: {
data: {
$$: {
opcode: 'translateTpkLmk',
trace: 234
},
sourceTpk: 'U8463435FC4B4DAA0C49025272C29B12C',
sourcePinBlock: '6428EB94035AF53B',
sourcePinBlockFormat: '01',
account: '550000025321'
},
buf: new Buffer('000234JCU8463435FC4B4DAA0C49025272C29B12C6428EB94035AF53B01550000025321')
},
translateZpkLmk: {
data: {
$$: {
opcode: 'translateZpkLmk',
trace: 234
},
sourceZpk: 'U1EF828AA8F6B80EB83E19FBC373F3A85',
sourcePinBlock: '91DDDA0A7C12CFAA',
sourcePinBlockFormat: '01',
account: '550000025321'
},
buf: new Buffer('000234JEU1EF828AA8F6B80EB83E19FBC373F3A8591DDDA0A7C12CFAA01550000025321')
},
generateOffsetIbmLmk: {
data: {
$$: {
opcode: 'generateOffsetIbmLmk',
trace: 234
},
pvk: 'X614BCB4CE30FE4FF13C9CFDD180AA182',
pin: '07692',
checkLength: 4,
account: '123456789012',
decimalisationTable: '1234567812345678',
pinValidationData: '23456N543210'
},
buf: new Buffer('000234DEX614BCB4CE30FE4FF13C9CFDD180AA1820769204123456789012123456781234567823456N543210')
}
};
var decodeTestData = {
echoResp: {
data: {
errorCode: '00',
macMessage: 'ping',
$$: {
trace: '000234',
mtid: 'discard',
opcode: 'echoResp'
}
},
buf: new Buffer('000234B300ping')
},
generateKeyResp: {
data: {
errorCode: '00',
keyA32: 'UD1D3196BE8CE804392F764CDC2ABD75E',
keyCheckValue: 'F232C4',
$$: {
trace: '000234',
mtid: 'response',
opcode: 'generateKeyResp'
}
},
buf: new Buffer('000234A100UD1D3196BE8CE804392F764CDC2ABD75EF232C4')
},
generateTpkResp: {
data: {
errorCode: '00',
tpk: 'X6F6FFAD40F6B6B72A5764A5DE9AB7FB5',
keyA32: '3E24796511C304FC99935DD4A24C9F1F',
$$: {
trace: '000234',
mtid: 'response',
opcode: 'generateTpkResp'
}
},
buf: new Buffer('000234HD00X6F6FFAD40F6B6B72A5764A5DE9AB7FB53E24796511C304FC99935DD4A24C9F1F')
},
generateTakResp: {
data: {
errorCode: '00',
tpk: 'UFC66FDA4146813DDD555649C8ED2C6DE',
keyA32: '86CD971D58CB0CF630C6796F56EBEDA4',
$$: {
trace: '000234',
mtid: 'response',
opcode: 'generateTakResp'
}
},
buf: new Buffer('000234HB00UFC66FDA4146813DDD555649C8ED2C6DE86CD971D58CB0CF630C6796F56EBEDA4')
},
generateMacResp: {
data: {
errorCode: '00',
mac: '0008341C677E',
$$: {
trace: '000234',
mtid: 'response',
opcode: 'generateMacResp'
}
},
buf: new Buffer('000234M7000008341C677E')
},
verifyMacResp: {
data: {
errorCode: '00',
$$: {
trace: '000234',
mtid: 'response',
opcode: 'verifyMacResp'
}
},
buf: new Buffer('000234M900')
},
formKeyResp: {
data: {
errorCode: '00',
keyA32: 'U5D3BF8844DC17252864ABBF21BF42999',
keyCheckValue: '000000',
$$: {
trace: '000234',
mtid: 'response',
opcode: 'formKeyResp'
}
},
buf: new Buffer('000234A500U5D3BF8844DC17252864ABBF21BF42999000000')
},
generateKeycheckvalueResp: {
data: {
errorCode: '00',
keyCheckValue16: '1519597E659476B0',
$$: {
trace: '000234',
mtid: 'response',
opcode: 'generateKeycheckvalueResp'
}
},
buf: new Buffer('000234BV001519597E659476B0')
},
derivePinIbmResp: {
data: {
errorCode: '00',
pin: '00034',
$$: {
trace: '000234',
mtid: 'response',
opcode: 'derivePinIbmResp'
}
},
buf: new Buffer('000234EF0000034')
},
generatePinResp: {
data: {
errorCode: '00',
pin: '03218',
$$: {
trace: '000234',
mtid: 'response',
opcode: 'generatePinResp'
}
},
buf: new Buffer('000234JB0003218')
},
generateOffsetIbmResp: {
data: {},
buf: new Buffer('')
},
verifyTermPinIbmResp: {
data: {
errorCode: '10',
rest: new Buffer(0),
$$: {
trace: '000234',
mtid: 'response',
opcode: 'verifyTermPinIbmResp'
}
},
buf: new Buffer('000234DB10')
},
importKeyResp: {
data: {
errorCode: '00',
keyA32: 'U0E07CDC0161A0DE3B5AA44DF227EC9DE',
keyCheckValue: 'ABDEBC',
$$: {
trace: '000234',
mtid: 'response',
opcode: 'importKeyResp'
}
},
buf: new Buffer('000234A700U0E07CDC0161A0DE3B5AA44DF227EC9DEABDEBC')
},
translateTpkZpkResp: {
data: {
errorCode: '00',
checkLength: '04',
destinationPinBlock: '91DDDA0A7C12CFAA',
pinBlockFormat: '01',
$$: {
trace: '000234',
mtid: 'response',
opcode: 'translateTpkZpkResp'
}
},
buf: new Buffer('000234CB000491DDDA0A7C12CFAA01')
},
printPinStart: {
data: {
errorCode: '00',
$$: {
trace: '000234',
mtid: 'notification',
opcode: 'printPinStart'
}
},
buf: new Buffer('000234PF00')
},
printPinResp: {
data: {
errorCode: '00',
$$: {
trace: '000234',
mtid: 'response',
opcode: 'printPinResp'
}
},
buf: new Buffer('000234PZ00')
},
printFormatResp: {
data: {
errorCode: '00',
$$: {
trace: '000234',
mtid: 'response',
opcode: 'printFormatResp'
}
},
buf: new Buffer('000234PB00')
},
translateTpkLmkResp: {
data: {
errorCode: '00',
pin: '01234',
$$: {
trace: '000234',
mtid: 'response',
opcode: 'translateTpkLmkResp'
}
},
buf: new Buffer('000234JD0001234')
},
translateZpkLmkResp: {
data: {
errorCode: '00',
pin: '01234',
$$: {
trace: '000234',
mtid: 'response',
opcode: 'translateZpkLmkResp'
}
},
buf: new Buffer('000234JF0001234')
},
generateOffsetIbmLmkResp: {
data: {
errorCode: '00',
offset: '7668FFFFFFFF',
$$: {
trace: '000234',
mtid: 'response',
opcode: 'generateOffsetIbmLmkResp'
}
},
buf: new Buffer('000234DF007668FFFFFFFF')
}
};
var log = function() {};
log.createLog = function(v) {
return {
info: function(v) {},
debug: function(v) {}
};
};
bdd.describe('payshield messages', function() {
var fieldFormat = {};
var messageFormat = {};
bdd.it(' ##Initial template parsing', function() {
var parser = new PayshieldParser({
headerFormat: '6/string-left-zero',
fieldFormat: fieldFormat,
messageFormat: messageFormat
}, log, null);
var defaultPvk = parser.commands.generateOffsetIbmLmk.pattern[0].size;
assert.equal(defaultPvk, 33, 'Default pvk size of opCode: generateOffsetIbmLmk NOT OK!');
});
var parser = new PayshieldParser({
headerFormat: '6/string-left-zero',
fieldFormat: fieldFormat,
messageFormat: messageFormat
}, log, null);
bdd.describe('#Testing [Encode] on every initialized operation codes', function() {
var commandArr = parser.commands;
var countt = 0;
for (var cmdName in commandArr) {
if (!encodeTestData[cmdName]) { // || (cmdName != 'generateKey' && cmdName != 'echo'))
// console.log(cmdName);
continue;
}
var testWithData = function(cmdName1) {
return function() {
if (cmdName1 === 'generateKeyTmk' || cmdName1 === 'generateOffsetIbm') {
assert.fail(cmdName1, cmdName1, 'Nqma test case za tazi komanda!', '=');
return;
}
var actualBuff = parser.encode(encodeTestData[cmdName1].data);
assert.deepEqual(actualBuff, encodeTestData[cmdName1].buf, 'invalid encoded buffer');
};
};
bdd.it('#operation code:' + cmdName, testWithData(cmdName));
countt++;
}
bdd.it('#Have parsed templates', function() {
assert.notEqual(countt, 0);
});
});
bdd.describe('#Testing [Decode] on every initialized operation codes', function() {
var commandArr = parser.commands;
for (var cmdName in commandArr) {
if (!decodeTestData[cmdName]) {
// console.log(cmdName);
continue;
}
var testWithData = function(cmdName1) {
return function() {
if (cmdName1 === 'generateKeyTmk' || cmdName1 === 'generateOffsetIbmResp') {
assert.fail(cmdName1, cmdName1, 'Nqma test case za tazi komanda!', '=');
return;
}
var actualData = parser.decode(decodeTestData[cmdName1].buf);
assert.deepEqual(actualData, decodeTestData[cmdName1].data, 'invalid decoded object');
};
};
bdd.it('#operation code:' + cmdName, testWithData(cmdName));
}
bdd.it('#Buffer with error code', function() {
var data = {
errorCode: '10',
rest: new Buffer(0),
$$: {
trace: '000234',
mtid: 'response',
opcode: 'importKeyResp'
}
};
var actualData = parser.decode(new Buffer('000234A710'));
assert.deepEqual(actualData, data, 'invalid decoded object');
});
});
bdd.describe('#Testing custom formats', function() {
bdd.it(' ##custom fieldFormat ', function() {
var fieldFormat = {
pvk: 16
};
var messageFormat = {};
var parser = new PayshieldParser({
headerFormat: '6/string-left-zero',
fieldFormat: fieldFormat,
messageFormat: messageFormat
}, log, null);
var commandArr = parser.commands;
var custPvk = commandArr.generateOffsetIbmLmk.pattern[0].size;
assert.equal(custPvk, 16, 'Custom pvk size of opCode: generateOffsetIbmLmk NOT OK!');
});
bdd.it(' ##custom messageFormat ', function() {
var fieldFormat = {};
var messageFormat = {
generateTpk: {
Code: 'zzz',
Pattern: 'tmk:21/string, ";", keyScheme:1/string, keyScheme1:1/string, "0"'
}
};
var parser = new PayshieldParser({
headerFormat: '6/string-left-zero',
fieldFormat: fieldFormat,
messageFormat: messageFormat
}, log, null);
assert.equal(parser.commands.generateTpk.code, 'zzz', 'Custom message code NOT OK!');
assert.equal(parser.commands.generateTpk.pattern[0].size, 21, 'Custom pattern NOT OK!');
});
});
});
};
test();