Compare commits
	
		
			6 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 31e53bb6ad | |||
|  | dea8d6b948 | ||
|  | 275e43337e | ||
|  | 9768a6e914 | ||
|  | 75ff2f0244 | ||
|  | 8841322eff | 
| @ -1,7 +1,7 @@ | |||||||
| { | { | ||||||
|   "name": "botp", |   "name": "botp", | ||||||
|   "main": "index.js", |   "main": "index.js", | ||||||
|   "version": "3.0.1", |   "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', 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 { |   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