Compare commits
	
		
			No commits in common. "master" and "v3.0.1" have entirely different histories.
		
	
	
		
	
		
@ -1,7 +1,7 @@
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  "name": "botp",
 | 
					  "name": "botp",
 | 
				
			||||||
  "main": "index.js",
 | 
					  "main": "index.js",
 | 
				
			||||||
  "version": "3.0.2",
 | 
					  "version": "3.0.1",
 | 
				
			||||||
  "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,19 +12,8 @@ exports.sha1Hmac = function (key, bytes) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  var Unibabel = window.Unibabel;
 | 
					  var Unibabel = window.Unibabel;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  function useForge() {
 | 
					  if (window.crypto) {
 | 
				
			||||||
    var forge = window.forge;
 | 
					    return window.crypto.subtle.importKey(
 | 
				
			||||||
    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"
 | 
				
			||||||
@ -51,10 +40,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 (cryptoKey) {
 | 
					    .then(function (key) {
 | 
				
			||||||
      return (window.crypto.subtle||window.crypto.webkitSubtle).sign(
 | 
					      return window.crypto.subtle.sign(
 | 
				
			||||||
        { name: "HMAC" }
 | 
					        { name: "HMAC" }
 | 
				
			||||||
      , cryptoKey  // from generateKey or importKey above
 | 
					      , key  // 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){
 | 
				
			||||||
@ -63,29 +52,15 @@ exports.sha1Hmac = function (key, bytes) {
 | 
				
			|||||||
      });
 | 
					      });
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					 | 
				
			||||||
  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) {
 | 
					  else if (window.forge) {
 | 
				
			||||||
    return 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);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  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