* Creates message digest using given algorithm. * @protected * @param {string} name Algorithm name * @param {Uint8Array} message Message bytes * @return {Promise}
(name, message)
| 97 | * @return {Promise} |
| 98 | */ |
| 99 | createDigest (name, message) { |
| 100 | const algorithm = algorithms.find(algorithm => algorithm.name === name) |
| 101 | |
| 102 | switch (name) { |
| 103 | case 'md5': |
| 104 | return new Promise(resolve => resolve(md5(message))) |
| 105 | } |
| 106 | |
| 107 | if (EnvUtil.isNode()) { |
| 108 | // Create message digest using Node Crypto async |
| 109 | return new Promise((resolve, reject) => { |
| 110 | const resultBuffer = |
| 111 | nodeCrypto.createHash(algorithm.nodeAlgorithm) |
| 112 | .update(global.Buffer.from(message)) |
| 113 | .digest() |
| 114 | resolve(new Uint8Array(resultBuffer)) |
| 115 | }) |
| 116 | } else { |
| 117 | // Get crypto subtle instance |
| 118 | const crypto = window.crypto || window.msCrypto |
| 119 | const cryptoSubtle = crypto.subtle || crypto.webkitSubtle |
| 120 | |
| 121 | // Create message digest using Web Crypto Api |
| 122 | let result = cryptoSubtle.digest(algorithm.browserAlgorithm, message) |
| 123 | |
| 124 | // IE11 exception |
| 125 | if (result.oncomplete !== undefined) { |
| 126 | // Wrap IE11 CryptoOperation object in a promise |
| 127 | result = new Promise((resolve, reject) => { |
| 128 | result.oncomplete = resolve.bind(this, result.result) |
| 129 | result.onerror = reject |
| 130 | }) |
| 131 | } |
| 132 | |
| 133 | return result.then(buffer => new Uint8Array(buffer)) |
| 134 | } |
| 135 | } |
| 136 | |
| 137 | /** |
| 138 | * Returns algorithm objects available in the current environment. |
no test coverage detected