diff --git a/CHANGELOG.md b/CHANGELOG.md index 02828dc..2c897d3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# [1.2.0](https://github.com/iris-gateway/IRIS-library-js/compare/v1.1.5...v1.2.0) (2021-04-08) + + +### Features + +* use WebCrypto API instead of node crypto ([f6573be](https://github.com/iris-gateway/IRIS-library-js/commit/f6573be6cec7fee6d002d7d0bed7e95e57d8715c)), closes [#4](https://github.com/iris-gateway/IRIS-library-js/issues/4) + ## [1.1.5](https://github.com/iris-gateway/IRIS-library-js/compare/v1.1.4...v1.1.5) (2021-03-27) diff --git a/dist/index.test.js b/dist/index.test.js index 9ec6533..5d0e8ac 100644 --- a/dist/index.test.js +++ b/dist/index.test.js @@ -1,8 +1,15 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const axios_1 = require("axios"); -const crypto = require("crypto"); +const webcrypto_1 = require("@peculiar/webcrypto"); +const util_1 = require("./lib/util"); +const md5 = require("md5"); +const crypto = new webcrypto_1.Crypto(); const _1 = require("."); +if (typeof TextEncoder === 'undefined') { + global.TextEncoder = require('util').TextEncoder; + global.TextDecoder = require('util').TextDecoder; +} jest.mock('axios'); const mockedAxios = axios_1.default; describe('index', () => { @@ -25,34 +32,29 @@ describe('index', () => { }, }, }; - beforeAll((done) => { + beforeAll(async (done) => { mockedAxios.create.mockImplementation(() => { return mockedAxios; }); - crypto.generateKeyPair('rsa', { - modulusLength: 4096, - publicKeyEncoding: { - type: 'spki', - format: 'pem', - }, - privateKeyEncoding: { - type: 'pkcs8', - format: 'pem', - cipher: 'aes-256-cbc', - passphrase: 'top secret', - }, - }, (err, pub, priv) => { - publicKey = pub; - privateKey = priv; - dataRequest = { - healthDepartment: 'Test Health Department', - key: Buffer.from(publicKey, 'utf-8').toString('base64'), - keyReferenz: 'random-string-keyref', - start: '2011-10-05T14:48:00.000Z', - end: '2021-10-05T14:48:00.000Z', - }; - done(err); - }); + const keys = await crypto.subtle.generateKey({ + name: 'RSA-OAEP', + hash: 'SHA-256', + publicExponent: new Uint8Array([1, 0, 1]), + modulusLength: 2048, + }, true, ['encrypt', 'decrypt']); + const exported = await crypto.subtle.exportKey('spki', keys.publicKey); + const exportedAsString = util_1.ab2str(exported); + const exportedAsBase64 = window.btoa(exportedAsString); + publicKey = `-----BEGIN PUBLIC KEY-----\n${exportedAsBase64}\n-----END PUBLIC KEY-----`; + privateKey = keys.privateKey; + dataRequest = { + healthDepartment: 'Test Health Department', + key: window.btoa(publicKey), + keyReferenz: 'random-string-keyref', + start: '2011-10-05T14:48:00.000Z', + end: '2021-10-05T14:48:00.000Z', + }; + done(); }); it('provides the Iris class', () => { expect(new _1.default({})).toBeDefined(); @@ -81,13 +83,20 @@ describe('index', () => { nonce: expect.any(String), }); const submittedData = mockedAxios.post.mock.calls[0][1]; - expect(submittedData.checkCode[0]).toEqual(crypto.createHash('md5').update('hansmller').digest('base64')); - expect(submittedData.checkCode[1]).toEqual(crypto.createHash('md5').update('19630105').digest('base64')); - const symmetricKey = crypto.privateDecrypt({ key: privateKey, passphrase: 'top secret' }, Buffer.from(submittedData.secret, 'base64')); - const decipher = crypto.createDecipheriv('AES-256-CBC', symmetricKey, Buffer.from(submittedData.nonce, 'base64')); - let receivedPlaintext = decipher.update(submittedData.encryptedData, 'base64', 'utf8'); - receivedPlaintext += decipher.final(); - expect(JSON.parse(receivedPlaintext)).toEqual(submission); + expect(submittedData.checkCode[0]).toEqual(md5('hansmller')); + expect(submittedData.checkCode[1]).toEqual(md5('19630105')); + const symmetricKeyData = await crypto.subtle.decrypt({ + name: 'RSA-OAEP', + }, privateKey, // RSA private key + Buffer.from(submittedData.secret, 'base64')); + const symmetricKey = await crypto.subtle.importKey('raw', symmetricKeyData, 'AES-GCM', true, ['decrypt']); + const decryptedData = util_1.pack(await crypto.subtle.decrypt({ + name: 'AES-GCM', + iv: Buffer.from(submittedData.nonce, 'base64'), + }, symmetricKey, // AES key + Buffer.from(submittedData.encryptedData, 'base64'))); + const result = util_1.decode(new Uint8Array(util_1.unpack(decryptedData))); + expect(JSON.parse(result)).toEqual(submission); }); }); //# sourceMappingURL=index.test.js.map \ No newline at end of file diff --git a/dist/index.test.js.map b/dist/index.test.js.map index cd9a59f..0b33b04 100644 --- a/dist/index.test.js.map +++ b/dist/index.test.js.map @@ -1 +1 @@ -{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/lib/Iris.js b/dist/lib/Iris.js index 4fb2974..c34f6a1 100644 --- a/dist/lib/Iris.js +++ b/dist/lib/Iris.js @@ -55,7 +55,7 @@ class Iris { throw new Error("Code could not be found in key map. Did you perform 'getDataRequest' before?"); } const keys = this.codeKeyMap.get(code); - const { dataToTransport, keyToTransport, nonce } = crypto_1.encryptData(keys.key, data); + const { dataToTransport, keyToTransport, nonce } = await crypto_1.encryptData(keys.key, data); const response = await this.axiosInstance.post(`/data-submissions/${code}/contacts_events`, { checkCode: [util_1.getNameCheckHash(user.firstName, user.lastName), util_1.getBirthDateCheckHash(user.birthDate)].filter((c) => !!c), secret: keyToTransport, diff --git a/dist/lib/Iris.js.map b/dist/lib/Iris.js.map index 7552d5b..f940b5f 100644 --- a/dist/lib/Iris.js.map +++ b/dist/lib/Iris.js.map @@ -1 +1 @@ -{"version":3,"file":"Iris.js","sourceRoot":"","sources":["../../src/lib/Iris.ts"],"names":[],"mappings":";;AAAA,iCAA6C;AAE7C,qCAAuC;AACvC,iCAAiE;AAWjE,MAAM,cAAc,GAAgB;IAClC,OAAO,EAAE,EAAE;CACZ,CAAC;AAEF,MAAqB,IAAI;IAIvB;;;;OAIG;IACH,YAAY,OAA6B;QACvC,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAgB,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;QACjE,IAAI,CAAC,aAAa,GAAG,eAAK,CAAC,MAAM,CAAC;YAChC,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,cAAc,CAAC,IAAc;QACjC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAC;QACxE,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;YAC3B,OAAO,CAAC,KAAK,CAAC,2CAA2C,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC1E,MAAM,IAAI,KAAK,CAAC,mCAAmC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;SACvE;QACD,MAAM,WAAW,GAAG,QAAQ,CAAC,IAA0B,CAAC;QACxD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE;YACxB,GAAG,EAAE,WAAW,CAAC,GAAG;YACpB,WAAW,EAAE,WAAW,CAAC,WAAW;SACrC,CAAC,CAAC;QACH,OAAO;YACL,gBAAgB,EAAE,WAAW,CAAC,gBAAgB;YAC9C,KAAK,EAAE,WAAW,CAAC,KAAK;YACxB,GAAG,EAAE,WAAW,CAAC,GAAG;YACpB,cAAc,EAAE,WAAW,CAAC,cAAc;SAC3C,CAAC;IACJ,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,kBAAkB,CAAC,IAAc,EAAE,IAAwB,EAAE,IAAkB;QACnF,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YAC9B,MAAM,IAAI,KAAK,CAAC,8EAA8E,CAAC,CAAC;SACjG;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,EAAE,eAAe,EAAE,cAAc,EAAE,KAAK,EAAE,GAAG,oBAAW,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC/E,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,qBAAqB,IAAI,kBAAkB,EAAE;YAC1F,SAAS,EAAE,CAAC,uBAAgB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,4BAAqB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CACxG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CACX;YACD,MAAM,EAAE,cAAc;YACtB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,aAAa,EAAE,eAAe;YAC9B,KAAK;SAC6B,CAAC,CAAC;QACtC,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;YAC3B,OAAO,CAAC,KAAK,CAAC,2CAA2C,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC1E,MAAM,IAAI,KAAK,CAAC,mCAAmC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;SACvE;QACD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;CACF;AAtED,uBAsEC"} \ No newline at end of file +{"version":3,"file":"Iris.js","sourceRoot":"","sources":["../../src/lib/Iris.ts"],"names":[],"mappings":";;AAAA,iCAA6C;AAE7C,qCAAuC;AACvC,iCAAiE;AAWjE,MAAM,cAAc,GAAgB;IAClC,OAAO,EAAE,EAAE;CACZ,CAAC;AAEF,MAAqB,IAAI;IAIvB;;;;OAIG;IACH,YAAY,OAA6B;QACvC,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAgB,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;QACjE,IAAI,CAAC,aAAa,GAAG,eAAK,CAAC,MAAM,CAAC;YAChC,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,cAAc,CAAC,IAAc;QACjC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAC;QACxE,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;YAC3B,OAAO,CAAC,KAAK,CAAC,2CAA2C,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC1E,MAAM,IAAI,KAAK,CAAC,mCAAmC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;SACvE;QACD,MAAM,WAAW,GAAG,QAAQ,CAAC,IAA0B,CAAC;QACxD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE;YACxB,GAAG,EAAE,WAAW,CAAC,GAAG;YACpB,WAAW,EAAE,WAAW,CAAC,WAAW;SACrC,CAAC,CAAC;QACH,OAAO;YACL,gBAAgB,EAAE,WAAW,CAAC,gBAAgB;YAC9C,KAAK,EAAE,WAAW,CAAC,KAAK;YACxB,GAAG,EAAE,WAAW,CAAC,GAAG;YACpB,cAAc,EAAE,WAAW,CAAC,cAAc;SAC3C,CAAC;IACJ,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,kBAAkB,CAAC,IAAc,EAAE,IAAwB,EAAE,IAAkB;QACnF,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YAC9B,MAAM,IAAI,KAAK,CAAC,8EAA8E,CAAC,CAAC;SACjG;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,EAAE,eAAe,EAAE,cAAc,EAAE,KAAK,EAAE,GAAG,MAAM,oBAAW,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACrF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,qBAAqB,IAAI,kBAAkB,EAAE;YAC1F,SAAS,EAAE,CAAC,uBAAgB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,4BAAqB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CACxG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CACX;YACD,MAAM,EAAE,cAAc;YACtB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,aAAa,EAAE,eAAe;YAC9B,KAAK;SAC6B,CAAC,CAAC;QACtC,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;YAC3B,OAAO,CAAC,KAAK,CAAC,2CAA2C,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC1E,MAAM,IAAI,KAAK,CAAC,mCAAmC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;SACvE;QACD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;CACF;AAtED,uBAsEC"} \ No newline at end of file diff --git a/dist/lib/crypto.d.ts b/dist/lib/crypto.d.ts index 9dc7796..87c55aa 100644 --- a/dist/lib/crypto.d.ts +++ b/dist/lib/crypto.d.ts @@ -1,5 +1,5 @@ -export declare function encryptData(keyOfHealthDepartment: string, data: any): { +export declare function encryptData(keyOfHealthDepartment: string, data: any): Promise<{ dataToTransport: string; keyToTransport: string; nonce: string; -}; +}>; diff --git a/dist/lib/crypto.js b/dist/lib/crypto.js index 6e09326..ab83866 100644 --- a/dist/lib/crypto.js +++ b/dist/lib/crypto.js @@ -1,18 +1,43 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.encryptData = void 0; -const crypto = require("crypto"); -function encryptData(keyOfHealthDepartment, data) { - const nonce = crypto.randomBytes(16); - const key = crypto.randomBytes(32); - const cipher = crypto.createCipheriv('AES-256-CBC', key, nonce); +const webcrypto_1 = require("@peculiar/webcrypto"); +const util_1 = require("./util"); +const crypto = new webcrypto_1.Crypto(); +async function importRsaKey(pemBase64Encoded) { + const pem = window.atob(pemBase64Encoded); + // fetch the part of the PEM string between header and footer + const pemHeader = '-----BEGIN PUBLIC KEY-----'; + const pemFooter = '-----END PUBLIC KEY-----'; + const pemContents = pem.substring(pemHeader.length, pem.length - pemFooter.length); + // base64 decode the string to get the binary data + const binaryDerString = window.atob(pemContents); + // convert from a binary string to an ArrayBuffer + const binaryDer = util_1.str2ab(binaryDerString); + return crypto.subtle.importKey('spki', binaryDer, { + name: 'RSA-OAEP', + hash: 'SHA-256', + }, true, ['encrypt']); +} +async function encryptData(keyOfHealthDepartment, data) { + const nonce = crypto.getRandomValues(new Uint8Array(16)); + const key = await crypto.subtle.generateKey({ + name: 'AES-GCM', + length: 256, + }, true, ['encrypt']); + const publicKey = await importRsaKey(keyOfHealthDepartment); const dataString = JSON.stringify(data); - const encryptedData = Buffer.concat([cipher.update(dataString, 'utf8'), cipher.final()]); - const encryptedKey = crypto.publicEncrypt({ key: Buffer.from(keyOfHealthDepartment, 'base64') }, key); + const encryptedData = await crypto.subtle.encrypt({ + name: 'AES-GCM', + iv: nonce, + }, key, util_1.encode(dataString)); + const encryptedKey = await crypto.subtle.encrypt({ + name: 'RSA-OAEP', + }, publicKey, await crypto.subtle.exportKey('raw', key)); return { - dataToTransport: encryptedData.toString('base64'), - keyToTransport: encryptedKey.toString('base64'), - nonce: nonce.toString('base64'), + dataToTransport: util_1.pack(encryptedData), + keyToTransport: util_1.pack(encryptedKey), + nonce: util_1.pack(nonce), }; } exports.encryptData = encryptData; diff --git a/dist/lib/crypto.js.map b/dist/lib/crypto.js.map index 9cd1e68..f76c9db 100644 --- a/dist/lib/crypto.js.map +++ b/dist/lib/crypto.js.map @@ -1 +1 @@ -{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/lib/crypto.ts"],"names":[],"mappings":";;;AAAA,iCAAiC;AAEjC,SAAgB,WAAW,CACzB,qBAA6B,EAC7B,IAAI;IAEJ,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACrC,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACnC,MAAM,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC,aAAa,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;IAChE,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACzF,MAAM,YAAY,GAAG,MAAM,CAAC,aAAa,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IACtG,OAAO;QACL,eAAe,EAAE,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACjD,cAAc,EAAE,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC/C,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;KAChC,CAAC;AACJ,CAAC;AAfD,kCAeC"} \ No newline at end of file +{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/lib/crypto.ts"],"names":[],"mappings":";;;AAAA,mDAA6C;AAC7C,iCAA8C;AAE9C,MAAM,MAAM,GAAG,IAAI,kBAAM,EAAE,CAAC;AAE5B,KAAK,UAAU,YAAY,CAAC,gBAAwB;IAClD,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC1C,6DAA6D;IAC7D,MAAM,SAAS,GAAG,4BAA4B,CAAC;IAC/C,MAAM,SAAS,GAAG,0BAA0B,CAAC;IAC7C,MAAM,WAAW,GAAG,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IACnF,kDAAkD;IAClD,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACjD,iDAAiD;IACjD,MAAM,SAAS,GAAG,aAAM,CAAC,eAAe,CAAC,CAAC;IAE1C,OAAO,MAAM,CAAC,MAAM,CAAC,SAAS,CAC5B,MAAM,EACN,SAAS,EACT;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,SAAS;KAChB,EACD,IAAI,EACJ,CAAC,SAAS,CAAC,CACZ,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,WAAW,CAC/B,qBAA6B,EAC7B,IAAI;IAEJ,MAAM,KAAK,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;IACzD,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,WAAW,CACzC;QACE,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,GAAG;KACZ,EACD,IAAI,EACJ,CAAC,SAAS,CAAC,CACZ,CAAC;IACF,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,qBAAqB,CAAC,CAAC;IAE5D,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CAC/C;QACE,IAAI,EAAE,SAAS;QACf,EAAE,EAAE,KAAK;KACV,EACD,GAAG,EACH,aAAM,CAAC,UAAU,CAAC,CACnB,CAAC;IAEF,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CAC9C;QACE,IAAI,EAAE,UAAU;KACjB,EACD,SAAS,EACT,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,CAC1C,CAAC;IACF,OAAO;QACL,eAAe,EAAE,WAAI,CAAC,aAAa,CAAC;QACpC,cAAc,EAAE,WAAI,CAAC,YAAY,CAAC;QAClC,KAAK,EAAE,WAAI,CAAC,KAAK,CAAC;KACnB,CAAC;AACJ,CAAC;AArCD,kCAqCC"} \ No newline at end of file diff --git a/dist/lib/util.d.ts b/dist/lib/util.d.ts index 76db3eb..a72dcb2 100644 --- a/dist/lib/util.d.ts +++ b/dist/lib/util.d.ts @@ -1,2 +1,8 @@ export declare function getNameCheckHash(firstName: string, lastName: string): string; export declare function getBirthDateCheckHash(birthDate?: string): string | undefined; +export declare function encode(data: string): Uint8Array; +export declare function decode(data: Uint8Array): string; +export declare function str2ab(str: string): ArrayBuffer; +export declare function ab2str(buf: ArrayBuffer): string; +export declare function pack(buffer: ArrayBuffer): string; +export declare function unpack(packed: string): ArrayBuffer; diff --git a/dist/lib/util.js b/dist/lib/util.js index c4139af..7544612 100644 --- a/dist/lib/util.js +++ b/dist/lib/util.js @@ -1,10 +1,10 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.getBirthDateCheckHash = exports.getNameCheckHash = void 0; -const crypto = require("crypto"); +exports.unpack = exports.pack = exports.ab2str = exports.str2ab = exports.decode = exports.encode = exports.getBirthDateCheckHash = exports.getNameCheckHash = void 0; +const md5 = require("md5"); function getNameCheckHash(firstName, lastName) { const str = `${firstName.trim()}${lastName.trim()}`.toLowerCase().replace(/\W/g, ''); - return crypto.createHash('md5').update(str).digest('base64'); + return md5(str); } exports.getNameCheckHash = getNameCheckHash; function getBirthDateCheckHash(birthDate) { @@ -12,8 +12,41 @@ function getBirthDateCheckHash(birthDate) { return undefined; } const date = new Date(birthDate); - const str = `${date.getFullYear()}${(date.getMonth() + 1).toString().padStart(2, '0')}${date.getDate().toString().padStart(2, '0')}`; - return crypto.createHash('md5').update(str).digest('base64'); + const str = `${date.getFullYear()}${(date.getMonth() + 1) + .toString() + .padStart(2, '0')}${date.getDate().toString().padStart(2, '0')}`; + return md5(str); } exports.getBirthDateCheckHash = getBirthDateCheckHash; +function encode(data) { + const encoder = new TextEncoder(); + return encoder.encode(data); +} +exports.encode = encode; +function decode(data) { + const decoder = new TextDecoder('utf8'); + return decoder.decode(data); +} +exports.decode = decode; +function str2ab(str) { + const buf = new ArrayBuffer(str.length); + const bufView = new Uint8Array(buf); + for (let i = 0, strLen = str.length; i < strLen; i++) { + bufView[i] = str.charCodeAt(i); + } + return buf; +} +exports.str2ab = str2ab; +function ab2str(buf) { + return String.fromCharCode.apply(null, new Uint8Array(buf)); +} +exports.ab2str = ab2str; +function pack(buffer) { + return window.btoa(ab2str(buffer)); +} +exports.pack = pack; +function unpack(packed) { + return str2ab(window.atob(packed)); +} +exports.unpack = unpack; //# sourceMappingURL=util.js.map \ No newline at end of file diff --git a/dist/lib/util.js.map b/dist/lib/util.js.map index 5ffbdc7..70f05d9 100644 --- a/dist/lib/util.js.map +++ b/dist/lib/util.js.map @@ -1 +1 @@ -{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/lib/util.ts"],"names":[],"mappings":";;;AAAA,iCAAiC;AAEjC,SAAgB,gBAAgB,CAAC,SAAiB,EAAE,QAAgB;IAClE,MAAM,GAAG,GAAG,GAAG,SAAS,CAAC,IAAI,EAAE,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACrF,OAAO,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC/D,CAAC;AAHD,4CAGC;AACD,SAAgB,qBAAqB,CAAC,SAAkB;IACtD,IAAI,CAAC,SAAS,EAAE;QACd,OAAO,SAAS,CAAC;KAClB;IACD,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;IACjC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAA;IACpI,OAAO,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC/D,CAAC;AAPD,sDAOC"} \ No newline at end of file +{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/lib/util.ts"],"names":[],"mappings":";;;AAAA,2BAA2B;AAE3B,SAAgB,gBAAgB,CAAC,SAAiB,EAAE,QAAgB;IAClE,MAAM,GAAG,GAAG,GAAG,SAAS,CAAC,IAAI,EAAE,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACrF,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;AAClB,CAAC;AAHD,4CAGC;AACD,SAAgB,qBAAqB,CAAC,SAAkB;IACtD,IAAI,CAAC,SAAS,EAAE;QACd,OAAO,SAAS,CAAC;KAClB;IACD,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;IACjC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;SACtD,QAAQ,EAAE;SACV,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;IACnE,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;AAClB,CAAC;AATD,sDASC;AAED,SAAgB,MAAM,CAAC,IAAY;IACjC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC;AAHD,wBAGC;AAED,SAAgB,MAAM,CAAC,IAAgB;IACrC,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;IACxC,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC;AAHD,wBAGC;AAED,SAAgB,MAAM,CAAC,GAAW;IAChC,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;IACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;QACpD,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;KAChC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAPD,wBAOC;AAED,SAAgB,MAAM,CAAC,GAAgB;IACrC,OAAO,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9D,CAAC;AAFD,wBAEC;AAED,SAAgB,IAAI,CAAC,MAAmB;IACtC,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;AACrC,CAAC;AAFD,oBAEC;AAED,SAAgB,MAAM,CAAC,MAAc;IACnC,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACrC,CAAC;AAFD,wBAEC"} \ No newline at end of file diff --git a/package.json b/package.json index 6eba1c4..dad54cb 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ "type": "git", "url": "https://github.com/iris-gateway/IRIS-library-js.git" }, - "version": "1.1.5", + "version": "1.2.0", "dependencies": { "@peculiar/webcrypto": "^1.1.6", "axios": "^0.21.1",