Blame view

node_modules/cookie-signature/index.js 1.2 KB
6a9ffbcc   liuqimichale   地图点击事件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
  /**
   * 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');
  }