Jämför commits

...

6 Incheckningar

Upphovsman SHA1 Meddelande Datum
31e53bb6ad Update 'README.md' 2017-11-20 16:58:12 +00:00
AJ ONeal
dea8d6b948 auto-update banner 2016-12-30 02:38:11 -07:00
AJ ONeal
275e43337e auto-update ad 2016-12-30 00:55:31 -07:00
AJ ONeal
9768a6e914 Update Readme.md 2016-11-25 10:46:48 -07:00
AJ ONeal
75ff2f0244 bump 2015-10-23 03:19:46 -07:00
AJ ONeal
8841322eff try/catch WebCrypto to forge 2015-10-23 03:19:41 -07:00
3 ändrade filer med 39 tillägg och 14 borttagningar

Visa fil

Visa fil

@ -1,7 +1,7 @@
{
"name": "botp",
"main": "index.js",
"version": "3.0.1",
"version": "3.0.2",
"homepage": "https://github.com/Daplie/botp",
"authors": [
"AJ ONeal <aj@daplie.com>",

Visa fil

@ -12,8 +12,19 @@ exports.sha1Hmac = function (key, bytes) {
var Unibabel = window.Unibabel;
if (window.crypto) {
return window.crypto.subtle.importKey(
function useForge() {
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"
, key
, { name: "HMAC"
@ -40,10 +51,10 @@ exports.sha1Hmac = function (key, bytes) {
["sign", "verify"] //can be any combination of "sign" and "verify"
)
*/
.then(function (key) {
return window.crypto.subtle.sign(
.then(function (cryptoKey) {
return (window.crypto.subtle||window.crypto.webkitSubtle).sign(
{ name: "HMAC" }
, key // from generateKey or importKey above
, cryptoKey // from generateKey or importKey above
, new Uint8Array(bytes) // ArrayBuffer of data you want to sign
)
.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', Unibabel.bufferToBinaryString(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 {
throw new Error("WebCrypto or forge.js is required to create a sha1 hmac");