Compare commits
8 Commits
Author | SHA1 | Date | |
---|---|---|---|
31e53bb6ad | |||
|
dea8d6b948 | ||
|
275e43337e | ||
|
9768a6e914 | ||
|
75ff2f0244 | ||
|
8841322eff | ||
|
d02fd1bbf3 | ||
|
4161310ed2 |
@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "botp",
|
"name": "botp",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"version": "3.0.0",
|
"version": "3.0.2",
|
||||||
"homepage": "https://github.com/Daplie/botp",
|
"homepage": "https://github.com/Daplie/botp",
|
||||||
"authors": [
|
"authors": [
|
||||||
"AJ ONeal <aj@daplie.com>",
|
"AJ ONeal <aj@daplie.com>",
|
||||||
|
51
sha1-hmac.js
51
sha1-hmac.js
@ -12,8 +12,19 @@ exports.sha1Hmac = function (key, bytes) {
|
|||||||
|
|
||||||
var Unibabel = window.Unibabel;
|
var Unibabel = window.Unibabel;
|
||||||
|
|
||||||
if (window.crypto) {
|
function useForge() {
|
||||||
return window.crypto.subtle.importKey(
|
var forge = window.forge;
|
||||||
|
var hmac = forge.hmac.create();
|
||||||
|
var digest;
|
||||||
|
hmac.start('sha1', Unibabel.bufferToBinaryString(key));
|
||||||
|
hmac.update(Unibabel.bufferToBinaryString(bytes));
|
||||||
|
digest = hmac.digest().toHex();
|
||||||
|
|
||||||
|
return window.Promise.resolve(digest);
|
||||||
|
}
|
||||||
|
|
||||||
|
function useWebCrypto() {
|
||||||
|
return (window.crypto.subtle||window.crypto.webkitSubtle).importKey(
|
||||||
"raw"
|
"raw"
|
||||||
, key
|
, key
|
||||||
, { name: "HMAC"
|
, { name: "HMAC"
|
||||||
@ -40,10 +51,10 @@ exports.sha1Hmac = function (key, bytes) {
|
|||||||
["sign", "verify"] //can be any combination of "sign" and "verify"
|
["sign", "verify"] //can be any combination of "sign" and "verify"
|
||||||
)
|
)
|
||||||
*/
|
*/
|
||||||
.then(function (key) {
|
.then(function (cryptoKey) {
|
||||||
return window.crypto.subtle.sign(
|
return (window.crypto.subtle||window.crypto.webkitSubtle).sign(
|
||||||
{ name: "HMAC" }
|
{ name: "HMAC" }
|
||||||
, key // from generateKey or importKey above
|
, cryptoKey // from generateKey or importKey above
|
||||||
, new Uint8Array(bytes) // ArrayBuffer of data you want to sign
|
, new Uint8Array(bytes) // ArrayBuffer of data you want to sign
|
||||||
)
|
)
|
||||||
.then(function(signature){
|
.then(function(signature){
|
||||||
@ -52,15 +63,29 @@ exports.sha1Hmac = function (key, bytes) {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
else if (window.forge) {
|
|
||||||
var forge = window.forge;
|
|
||||||
var hmac = forge.hmac.create();
|
|
||||||
var digest;
|
|
||||||
hmac.start('sha1', key);
|
|
||||||
hmac.update(Unibabel.bufferToBinaryString(bytes));
|
|
||||||
digest = hmac.digest().toHex();
|
|
||||||
|
|
||||||
return window.Promise.resolve(digest);
|
if (window.crypto) {
|
||||||
|
// WebCrypto is so unreliable right now... ugh...
|
||||||
|
try {
|
||||||
|
return useWebCrypto().then(function (result) {
|
||||||
|
return result;
|
||||||
|
}, function (err) {
|
||||||
|
console.warn(err);
|
||||||
|
console.warn(err.stack);
|
||||||
|
console.warn("WebCrypto failed, trying forge.js");
|
||||||
|
|
||||||
|
return useForge();
|
||||||
|
});
|
||||||
|
} catch(e) {
|
||||||
|
console.warn(e);
|
||||||
|
console.warn(e.stack);
|
||||||
|
console.warn("WebCrypto threw exception, trying forge.js");
|
||||||
|
|
||||||
|
return useForge();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (window.forge) {
|
||||||
|
return useForge();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
throw new Error("WebCrypto or forge.js is required to create a sha1 hmac");
|
throw new Error("WebCrypto or forge.js is required to create a sha1 hmac");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user