Skip to content

Instantly share code, notes, and snippets.

@lexmihaylov
Last active January 2, 2018 03:29
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save lexmihaylov/84cf4677c6dce574c4a4 to your computer and use it in GitHub Desktop.
Save lexmihaylov/84cf4677c6dce574c4a4 to your computer and use it in GitHub Desktop.
Hashing using the native crypto api and native promise api
function arrayBufferToStringAsync( /*ArrayBuffer*/ buffer) {
var reader = new FileReader();
return readAsync(reader, 'Text', new Blob([buffer])).then(function() {
return new Promise(function(resolve, reject) {
resolve(reader.result);
});
});
};
function arrayBufferToHexAsync( /*ArrayBuffer*/ buffer) {
return new Promise(function(success, error) {
arrayBufferToStringAsync(buffer).then(function(string) {
var hex = '';
for (var i = 0; i < string.length; i++) {
var char = ('000' + string.charCodeAt(i).toString(16)).slice(-4);
hex += char;
}
success(hex);
}).catch(error);
});
};
function readAsync( /* FileReader */ reader, as, data, encoding) {
return new Promise(function(resolve, reject) {
reader.onloadend = resolve;
reader.onerror = reject;
reader['readAs' + as](data, encoding);
});
};
var blob = new Blob(['Hello World']);
var reader = new FileReader();
readAsync(reader, 'ArrayBuffer', blob).then(function() {
var result = reader.result;
return crypto.subtle.digest("SHA-1", result);
}).then(function(hash) {
return arrayBufferToHexAsync(hash);
}).then(function(hexHash) {
console.log(hexHash);
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment