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