Supported native webCrypto for SHA-1
This commit is contained in:
parent
69c0216841
commit
6c56c69fd2
@ -156,16 +156,6 @@ function bytesToArrayBuffer (b) {
|
||||
return (new Uint8Array(b)).buffer;
|
||||
}
|
||||
|
||||
function bufferConcat(buffer1, buffer2) {
|
||||
var l1 = buffer1.byteLength || buffer1.length,
|
||||
l2 = buffer2.byteLength || buffer2.length;
|
||||
var tmp = new Uint8Array(l1 + l2);
|
||||
tmp.set(buffer1 instanceof ArrayBuffer ? new Uint8Array(buffer1) : buffer1, 0);
|
||||
tmp.set(buffer2 instanceof ArrayBuffer ? new Uint8Array(buffer2) : buffer2, l1);
|
||||
|
||||
return tmp.buffer;
|
||||
}
|
||||
|
||||
function bytesFromArrayBuffer (buffer) {
|
||||
var len = buffer.byteLength,
|
||||
byteView = new Uint8Array(buffer),
|
||||
@ -178,6 +168,16 @@ function bytesFromArrayBuffer (buffer) {
|
||||
return bytes;
|
||||
}
|
||||
|
||||
function bufferConcat(buffer1, buffer2) {
|
||||
var l1 = buffer1.byteLength || buffer1.length,
|
||||
l2 = buffer2.byteLength || buffer2.length;
|
||||
var tmp = new Uint8Array(l1 + l2);
|
||||
tmp.set(buffer1 instanceof ArrayBuffer ? new Uint8Array(buffer1) : buffer1, 0);
|
||||
tmp.set(buffer2 instanceof ArrayBuffer ? new Uint8Array(buffer2) : buffer2, l1);
|
||||
|
||||
return tmp.buffer;
|
||||
}
|
||||
|
||||
function longToInts (sLong) {
|
||||
var divRem = bigStringInt(sLong).divideAndRemainder(bigint(0x100000000));
|
||||
|
||||
|
@ -486,7 +486,9 @@ angular.module('izhukov.utils', [])
|
||||
|
||||
var worker = window.Worker && new Worker('js/lib/crypto_worker.js') || false,
|
||||
taskID = 0,
|
||||
awaiting = {};
|
||||
awaiting = {},
|
||||
webCrypto = window.crypto && (window.crypto.subtle || window.crypto.webkitSubtle) || window.msCrypto && window.msCrypto.subtle,
|
||||
useSha1Crypto = webCrypto && webCrypto.digest !== undefined;
|
||||
|
||||
if (worker) {
|
||||
worker.onmessage = function (e) {
|
||||
@ -521,6 +523,22 @@ angular.module('izhukov.utils', [])
|
||||
|
||||
return {
|
||||
sha1Hash: function (bytes) {
|
||||
if (useSha1Crypto) {
|
||||
var deferred = $q.defer(),
|
||||
buffer = bytes instanceof ArrayBuffer
|
||||
? bytes
|
||||
: bytesToArrayBuffer(bytes);
|
||||
|
||||
webCrypto.digest({name: 'SHA-1'}, buffer).then(function (digest) {
|
||||
deferred.resolve(bytesFromArrayBuffer(digest));
|
||||
}, function (e) {
|
||||
console.error('Crypto digest error', e);
|
||||
useSha1Crypto = false;
|
||||
deferred.resolve(sha1Hash(bytes));
|
||||
});
|
||||
|
||||
return deferred.promise;
|
||||
}
|
||||
if (worker && false) { // due overhead for data transfer
|
||||
return performTaskWorker ('sha1-hash', {bytes: bytes});
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user