UNPKG

8.51 kBSource Map (JSON)View Raw
1{"version":3,"sources":["../source/crypto.js"],"names":["convertIfArray","Array","webWorker","taskID","awaiting","webCrypto","window","crypto","subtle","webkitSubtle","msCrypto","useWebCrypto","digest","useSha1Crypto","useSha256Crypto","finalizeTask","result","deferred","resolve","isCryptoTask","workerEnable","Worker","require","tmpWorker","onmessage","e","data","console","info","onerror","error","stack","postMessage","performTaskWorker","task","params","embed","promise","sha1Hash","bytes","bytesTyped","name","then","immediate","sha256Hash","aesEncrypt","keyBytes","ivBytes","aesDecrypt","encryptedBytes","factorize","modPow","x","y","m","CryptoWorker"],"mappings":"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","file":"crypto.js","sourcesContent":["import { when, is, identity, has, both } from 'ramda'\r\nimport isNode from 'detect-node'\r\n\r\nimport blueDefer from './defer'\r\nimport smartTimeout from './smart-timeout'\r\nimport { convertToUint8Array, sha1HashSync, sha256HashSync,\r\n aesEncryptSync, aesDecryptSync, convertToByteArray, convertToArrayBuffer,\r\n pqPrimeFactorization, bytesModPow } from './bin'\r\n\r\nconst convertIfArray = when(is(Array), convertToUint8Array)\r\nlet webWorker = !isNode\r\nlet taskID = 0\r\nconst awaiting = {}\r\nconst webCrypto = isNode\r\n ? false\r\n //eslint-disable-next-line\r\n : window.crypto.subtle || window.crypto.webkitSubtle //TODO remove browser depends\r\n //eslint-disable-next-line\r\n || window.msCrypto && window.msCrypto.subtle\r\nconst useWebCrypto = webCrypto && !!webCrypto.digest\r\nlet useSha1Crypto = useWebCrypto\r\nlet useSha256Crypto = useWebCrypto\r\nconst finalizeTask = (taskID, result) => {\r\n const deferred = awaiting[taskID]\r\n if (deferred) {\r\n // console.log(rework_d_T(), 'CW done')\r\n deferred.resolve(result) //TODO Possibly, can be used as\r\n delete awaiting[taskID] //\r\n } // deferred = Promise.resolve()\r\n} // deferred.resolve( result )\r\n\r\nconst isCryptoTask = both(has('taskID'), has('result'))\r\n\r\n//eslint-disable-next-line\r\nconst workerEnable = !isNode && window.Worker\r\nif (workerEnable) {\r\n require('worker-loader!./worker.js')\r\n const tmpWorker = new Worker('./bundle/hash.worker.js')\r\n // tmpWorker.onmessage = function(event) {\r\n // console.info('CW tmpWorker.onmessage', event && event.data)\r\n // }\r\n tmpWorker.onmessage = e => {\r\n if (e.data === 'ready') {\r\n console.info('CW ready')\r\n } else if (!isCryptoTask(e.data)) {\r\n console.info('Not crypto task', e, e.data)\r\n return e\r\n } else\r\n return webWorker\r\n ? finalizeTask(e.data.taskID, e.data.result)\r\n : webWorker = tmpWorker\r\n }\r\n\r\n tmpWorker.onerror = function(error) {\r\n console.error('CW error', error, error.stack)\r\n webWorker = false\r\n }\r\n tmpWorker.postMessage('b')\r\n webWorker = tmpWorker\r\n}\r\n\r\nconst performTaskWorker = (task, params, embed) => {\r\n // console.log(rework_d_T(), 'CW start', task)\r\n const deferred = blueDefer()\r\n\r\n awaiting[taskID] = deferred\r\n\r\n params.task = task\r\n params.taskID = taskID\r\n ;(embed || webWorker).postMessage(params)\r\n\r\n taskID++\r\n\r\n return deferred.promise\r\n}\r\n\r\nconst sha1Hash = bytes => {\r\n if (useSha1Crypto) {\r\n // We don't use buffer since typedArray.subarray(...).buffer gives the whole buffer and not sliced one.\r\n // webCrypto.digest supports typed array\r\n const bytesTyped = convertIfArray(bytes)\r\n // console.log(rework_d_T(), 'Native sha1 start')\r\n return webCrypto.digest({ name: 'SHA-1' }, bytesTyped).then(digest =>\r\n // console.log(rework_d_T(), 'Native sha1 done')\r\n digest, e => {\r\n console.error('Crypto digest error', e)\r\n useSha1Crypto = false\r\n return sha1HashSync(bytes)\r\n })\r\n }\r\n return smartTimeout.immediate(sha1HashSync, bytes)\r\n}\r\n\r\nconst sha256Hash = bytes => {\r\n if (useSha256Crypto) {\r\n const bytesTyped = convertIfArray(bytes)\r\n // console.log(rework_d_T(), 'Native sha1 start')\r\n return webCrypto.digest({ name: 'SHA-256' }, bytesTyped)\r\n .then(identity\r\n // console.log(rework_d_T(), 'Native sha1 done')\r\n , e => {\r\n console.error('Crypto digest error', e)\r\n useSha256Crypto = false\r\n return sha256HashSync(bytes)\r\n })\r\n }\r\n return smartTimeout.immediate(sha256HashSync, bytes)\r\n}\r\n\r\nconst aesEncrypt = (bytes, keyBytes, ivBytes) =>\r\n smartTimeout.immediate(() => convertToArrayBuffer(aesEncryptSync(bytes, keyBytes, ivBytes)))\r\n\r\nconst aesDecrypt = (encryptedBytes, keyBytes, ivBytes) =>\r\n smartTimeout.immediate(() => convertToArrayBuffer(\r\n aesDecryptSync(encryptedBytes, keyBytes, ivBytes)))\r\n\r\nconst factorize = bytes => {\r\n bytes = convertToByteArray(bytes)\r\n return webWorker\r\n ? performTaskWorker('factorize', { bytes })\r\n : smartTimeout.immediate(pqPrimeFactorization, bytes)\r\n}\r\n\r\nconst modPow = (x, y, m) => webWorker\r\n ? performTaskWorker('mod-pow', {\r\n x,\r\n y,\r\n m\r\n })\r\n : smartTimeout.immediate(bytesModPow, x, y, m)\r\n\r\nexport const CryptoWorker = {\r\n sha1Hash,\r\n sha256Hash,\r\n aesEncrypt,\r\n aesDecrypt,\r\n factorize,\r\n modPow\r\n}\r\n\r\nexport default CryptoWorker"]}
\No newline at end of file