|
|
|
|
|
|
|
|
|
var crypto = require('crypto'); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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(/\=+$/, ''); |
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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; |
|
}; |
|
|
|
|
|
|
|
|
|
|
|
function sha1(str){ |
|
return crypto.createHash('sha1').update(str).digest('hex'); |
|
} |
|
|