mirror of
				https://github.com/1disk/edp445.git
				synced 2024-08-14 22:47:02 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			51 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /**
 | |
|  * Module dependencies.
 | |
|  */
 | |
| 
 | |
| var crypto = require('crypto');
 | |
| 
 | |
| /**
 | |
|  * Sign the given `val` with `secret`.
 | |
|  *
 | |
|  * @param {String} val
 | |
|  * @param {String} secret
 | |
|  * @return {String}
 | |
|  * @api private
 | |
|  */
 | |
| 
 | |
| exports.sign = function(val, secret){
 | |
|   if ('string' != typeof val) throw new TypeError("Cookie value must be provided as a string.");
 | |
|   if ('string' != typeof secret) throw new TypeError("Secret string must be provided.");
 | |
|   return val + '.' + crypto
 | |
|     .createHmac('sha256', secret)
 | |
|     .update(val)
 | |
|     .digest('base64')
 | |
|     .replace(/\=+$/, '');
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * Unsign and decode the given `val` with `secret`,
 | |
|  * returning `false` if the signature is invalid.
 | |
|  *
 | |
|  * @param {String} val
 | |
|  * @param {String} secret
 | |
|  * @return {String|Boolean}
 | |
|  * @api private
 | |
|  */
 | |
| 
 | |
| exports.unsign = function(val, secret){
 | |
|   if ('string' != typeof val) throw new TypeError("Signed cookie string must be provided.");
 | |
|   if ('string' != typeof secret) throw new TypeError("Secret string must be provided.");
 | |
|   var str = val.slice(0, val.lastIndexOf('.'))
 | |
|     , mac = exports.sign(str, secret);
 | |
|   
 | |
|   return sha1(mac) == sha1(val) ? str : false;
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * Private
 | |
|  */
 | |
| 
 | |
| function sha1(str){
 | |
|   return crypto.createHash('sha1').update(str).digest('hex');
 | |
| }
 |