UNPKG

ebclient.js

Version:

Client library for using EnigmaBridge crypto services

131 lines (119 loc) 8.75 kB
"use strict"; var expect = require("chai").expect; var eb = require("../lib/enigma"); var rnd = eb.misc.sjcl.random; // For more info: // https://mochajs.org/ describe("EB client units", function() { /** * Install fix seeded random number generator. */ beforeEach(function(){ var FixRandom = function(seed){ this.seed = seed; }; FixRandom.prototype = { gen: function(){ var x = Math.sin(this.seed++) * 10000; return Math.floor(4294967296 * (x - Math.floor(x))); }, randomWords: function (nwords, paranoia) { var out=[]; for(var i=0; i<nwords; i++){ out.push(this.gen()); } return out; }, setDefaultParanoia: function (paranoia, allowZeroParanoia){}, addEntropy: function (data, estimatedEntropy, source) {}, isReady: function (paranoia) {return 1;}, getProgress: function (paranoia) {return 1.0;}, startCollectors: function () {}, stopCollectors: function () {}, addEventListener: function (name, callback) {}, removeEventListener: function (name, cb) {} }; eb.misc.sjcl.random = new FixRandom(314); }); describe("misc", function() { it("rand-fix", function() { var w = eb.misc.sjcl.random.randomWords(4, 0); expect(eb.misc.inputToHex(w)).to.equal("12291ae8552842a6df9c6df165dbca23"); }); }); describe("crypto", function() { it("cbc-mac-test01", function() { var macKeyBits = eb.misc.inputToBits("0123456789aabbccddeeff0011223344"); var aesMac = new eb.misc.sjcl.cipher.aes(macKeyBits); var hmac = new eb.misc.sjcl.misc.hmac_cbc(aesMac, 16, eb.padding.pkcs7); var hmacData = hmac.mac(eb.misc.inputToBits("0000111122223333444455556666777788889999aaaabbbbccccddddeeeeffff")); expect(eb.misc.inputToHex(hmacData)).to.equal("54e552ceb4665f8d65f467e5c84e6316"); }); it("padding-pkcs7", function() { for(var i=0; i<10; i++){ var ln = 8*(1 + Math.abs(rnd.randomWords(1)[0] % 64)); var input = eb.misc.getRandomBits(ln); var out = eb.padding.pkcs7.unpad(eb.padding.pkcs7.pad(input)); expect(eb.misc.inputToHex(out)).to.equal(eb.misc.inputToHex(input)); } }); it("padding-pkcs15", function() { for(var i=0; i<10; i++){ var ln = 8*(1 + Math.abs(rnd.randomWords(1)[0] % 120)); var mode = 1 + Math.abs(rnd.randomWords(1)[0] % 2); var input = eb.misc.getRandomBits(ln); var out = eb.padding.pkcs15.unpad(eb.padding.pkcs15.pad(input, 1024, mode)); expect(eb.misc.inputToHex(out)).to.equal(eb.misc.inputToHex(input)); } }); }); describe("ProcessData", function(){ it("request-builder", function(){ var input = eb.misc.inputToBits("6bc1bee22e409f96e93d7e117393172a"); var aesKey = eb.misc.inputToBits("e134567890123456789012345678901234567890123456789012345678901234"); var macKey = eb.misc.inputToBits("e224262820223456789012345678901234567890123456789012345678901234"); var bb = new eb.comm.processDataRequestBodyBuilder(); bb.aesKey = aesKey; bb.macKey = macKey; bb.userObjectId = 0xee01; bb.nonce = eb.misc.inputToBits("da3903ed1894e307"); var block = bb.build([], input); expect(block).to.equal("Packet0_PLAINAES_0000a83d7c7200e54ab8c47b81931a675bcf8ebcb9c68aa7b8519e49aefd1bfb3525b55f531fe5b2d7ab30ed4fdd2c13bd52"); }); }); describe("CreateUO", function(){ it("template-filler", function(){ var appKey = eb.misc.inputToBits("97ea4f23b43d64acc69316db58c180f4"); var commAeskey = eb.misc.inputToBits("80895c2291b54eeb447aefdba4ef5b03dce3003c72f1c451f722c519aa5a1377"); var commMackey = eb.misc.inputToBits("51f80524e521a3f32ce4bc9c45df3ac37217482843fd196a457ef12a574479a0"); var tpl = {"objectid":"0000226a","encryptionoffset":424,"flagoffset":104,"policyoffset":184,"scriptoffset":280, "template":"01134301010000226a00300004041a00170035002300fdd00000000000000000010db0001001000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000160001001000000000000000000000000000000000", "templatehs":"d2011301134301010000226a00300004041a00170035002300fdd00000000000000000010db0001001000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000160001001000000000000000000000000000000000d1002dd10101ffff38000d00023101b801003202c801003303c801003404d801003505d801003606e801003708180080", "importkeys":[{"id":"527b8855d3544fb87a8d2a372e551421165d05ad699475c62517c24dce0a7023","type":"rsa2048","key":"810003010001820100e1e06b76f97bcd827c98cc3b41a85040ccdc61cf725814fdb9e95f53062912e939b13cf1ce27d07b4478577a209cffdbdea2902919c087088f85d5ed1d0b0cdcefd823b649714f699531d9b81008af635ea9796782fe3c403c0e5de215587806f30e16094da0160589e9801cbaf40e63fd2d72cb85cb7fc19a377b0fa92e7d908e6a69aabc4c5ba22d32e5587e0ed812b4c162668498fde5540893c1c0884151609393d8cccdee3eeb88ae91243216b2269273f9a523b95ccfe5b1f9e54fd24f7377a2abd7c6439ec46097c4701e58c24933022d438b77673c300ea681e473d24618f979403da679dd5c3ce0b74c16a95c9647407c2cdc113b927544ecd8c695"}], "keyoffsets":[ {"offset":1768,"length":256,"tlvtype":1,"type":"billing"}, {"offset":2072,"length":128,"tlvtype":1,"type":"app"}, {"offset":440,"length":256,"type":"commk"}, {"offset":712,"length":256,"type":"comenc"}, {"offset":968,"length":256,"type":"commac"}, {"offset":1240,"length":256,"type":"comnextenc"}, {"offset":1496,"length":256,"type":"comnextmac"}],"authorization":"" }; // Fix seeding, paranoia to zero. eb.misc.sjcl.random.setDefaultParanoia(0, "Setting paranoia=0 will ruin your security; use it only for testing"); var builder = new eb.comm.createUO.templateFiller({template: tpl}); var keys = { comenc:{ key:commAeskey}, commac:{ key:commMackey}, comnextenc:{ key:eb.misc.getZeroBits(256)}, conextmac:{ key:eb.misc.getZeroBits(258)}, app:{ key:appKey} }; var buildReq = builder.build({keys: keys}); expect(eb.misc.inputToHex(buildReq.uo)).to.equal("a101003998cfc55a52639be8654e63dbcca2d6638d3ebfafa37fbe5febe11d6dbc43ed415dff7bde21ef30f59cef80d0fe3634fe316b0dffbf2f2139bd1d833eee28ec6dc2cf39e803ea6286cfd192ea4a3eea9c186b0cc5c4a17be06dcb2594ede99a662d577f7d6fd68e11e95ccd5f41ab2d28b654a50efa634cadac077457936245dfc2941faa4c8f583e65842a8afa73c005c61f541814bda8a71b40a4241f4e7b4bb9c9660f3f2d2c007e7c10181a5d4bef4619bbe96abd22c9a9673f767870f5abb5b04db302302f6eb37f48560ea4c87f0002d469cdbbcd903717ac37c8e35abd6c8ac81c0c6701d7dade86a681fb6758fffb4dc15a1d283c7d4b68e76e9b6ea2013001134301010000226a00300004040200170035002300fdd00000000000000000010db00010010000000000000000000000000000006c063d46dd808616a5979af881ae2a757fdd36bebe89c2f58b6134fdde9a39ec8f037489dfa2da943c55c8862afd7e8a60377058c5f8c8cb220fa26e80a95aee65580b65511decde8a7b7e142445e10382c0b9a97e1de28e49b2f8d6e9c7607546c0e0db474de07787a43f65c0305fcb619e86eb713b9df4e790486ded39317dc2dd28aab3b4d9e2e54a24d3312b99e7044273384d76ffa5b3b589e1c20423293997b1c6fd918d927c11eb33fbf0a85b7641deecf21491a4348986ceb69b4560833c40ba81ff2f39078387c9954dc3803c0dac2f69476c52509e33459111b0db0b0b0b0b0b0b0b0b0b0b0b5ef81fd00a8f6f2368b9428a621f9067"); }); }); });