Compare commits
	
		
			8 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 31e53bb6ad | |||
| 
						 | 
					dea8d6b948 | ||
| 
						 | 
					275e43337e | ||
| 
						 | 
					9768a6e914 | ||
| 
						 | 
					75ff2f0244 | ||
| 
						 | 
					8841322eff | ||
| 
						 | 
					d02fd1bbf3 | ||
| 
						 | 
					4161310ed2 | 
@ -1,7 +1,7 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "botp",
 | 
			
		||||
  "main": "index.js",
 | 
			
		||||
  "version": "3.0.0",
 | 
			
		||||
  "version": "3.0.2",
 | 
			
		||||
  "homepage": "https://github.com/Daplie/botp",
 | 
			
		||||
  "authors": [
 | 
			
		||||
    "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;
 | 
			
		||||
 | 
			
		||||
  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', 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");
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user