102 if ( empty($secret) ) {
103 throw new Exception(
'You must provide a secret key');
105 $this->_secret = $secret;
106 if ( $config !== null && !is_array($config) ) {
107 throw new Exception(
'Config must be an array');
109 if ( is_array($config) ) {
110 if ( isset($config[
'high_confidentiality']) ) {
111 $this->_highConfidentiality = $config[
'high_confidentiality'];
113 if ( isset($config[
'mcrypt_algorithm']) ) {
114 $this->_algorithm = $config[
'mcrypt_algorithm'];
116 if ( isset($config[
'mcrypt_mode']) ) {
117 $this->_mode = $config[
'mcrypt_mode'];
119 if ( isset($config[
'enable_ssl']) ) {
120 $this->_ssl = $config[
'enable_ssl'];
123 if ( extension_loaded(
'mcrypt') ) {
124 $this->_cryptModule = mcrypt_module_open($this->_algorithm,
'', $this->_mode,
'');
125 if ( $this->_cryptModule ===
false ) {
126 throw new Exception(
'Error while loading mcrypt module');
147 $this->_highConfidentiality = (bool)$enable;
170 $this->_ssl = (bool)$enable;
192 return isset($this->_cookies[$cookiename]) ? $this->_cookies[$cookiename] : null;
207 public function setCookie( $cookiename, $value, $username, $expire = 0,
$path =
'/', $domain =
'', $secure =
false, $httponly = null ) {
208 $secureValue = extension_loaded(
'mcrypt') ? $this->
_secureCookieValue($value, $username, $expire) : $value;
221 public function deleteCookie( $name,
$path =
'/', $domain =
'', $secure =
false, $httponly = null ) {
223 $this->_cookies[$name] =
new Slim_Http_Cookie($name,
'', $expire,
$path, $domain, $secure, $httponly);
239 if ( extension_loaded(
'mcrypt') ) {
240 $cookieValues = explode(
'|',
$_COOKIE[$cookiename]);
241 if ( (count($cookieValues) === 4) && ($cookieValues[1] == 0 || $cookieValues[1] >= time()) ) {
242 $key = hash_hmac(
'sha1', $cookieValues[0] . $cookieValues[1], $this->_secret);
243 $cookieData = base64_decode($cookieValues[2]);
245 $data = $this->
_decrypt($cookieData, $key, md5($cookieValues[1]));
249 if ( $this->_ssl && isset($_SERVER[
'SSL_SESSION_ID']) ) {
250 $verifKey = hash_hmac(
'sha1', $cookieValues[0] . $cookieValues[1] . $data . $_SERVER[
'SSL_SESSION_ID'], $key);
252 $verifKey = hash_hmac(
'sha1', $cookieValues[0] . $cookieValues[1] . $data, $key);
254 if ( $verifKey == $cookieValues[3] ) {
262 if ( $deleteIfInvalid ) {
279 public function setClassicCookie( $cookiename, $value, $expire = 0,
$path =
'/', $domain =
'', $secure =
false, $httponly = null ) {
281 if ( $httponly === null ) {
282 $this->_cookies[$cookiename] =
new Slim_Http_Cookie($cookiename, $value, $expire,
$path, $domain, $secure);
285 $this->_cookies[$cookiename] =
new Slim_Http_Cookie($cookiename, $value, $expire,
$path, $domain, $secure, $httponly);
297 return isset(
$_COOKIE[$cookiename]);
316 if ( is_string($expire) ) {
317 $expire = strtotime($expire);
319 $key = hash_hmac(
'sha1', $username . $expire, $this->_secret);
321 $encryptedValue = base64_encode($this->
_encrypt($value, $key, md5($expire)));
323 $encryptedValue = base64_encode($value);
325 if ( $this->_ssl && isset($_SERVER[
'SSL_SESSION_ID']) ) {
326 $verifKey = hash_hmac(
'sha1', $username . $expire . $value . $_SERVER[
'SSL_SESSION_ID'], $key);
328 $verifKey = hash_hmac(
'sha1', $username . $expire . $value, $key);
330 $result = array($username, $expire, $encryptedValue, $verifKey);
345 mcrypt_generic_init($this->_cryptModule, $key, $iv);
346 $res = @mcrypt_generic($this->_cryptModule, $data);
347 mcrypt_generic_deinit($this->_cryptModule);
362 mcrypt_generic_init($this->_cryptModule, $key, $iv);
363 $decryptedData = mdecrypt_generic($this->_cryptModule, $data);
364 $res = str_replace(
"\x0",
'', $decryptedData);
365 mcrypt_generic_deinit($this->_cryptModule);
378 $ivSize = mcrypt_enc_get_iv_size($this->_cryptModule);
379 if ( strlen($iv) > $ivSize ) {
380 $iv = substr($iv, 0, $ivSize);
394 $keySize = mcrypt_enc_get_key_size($this->_cryptModule);
395 if ( strlen($key) > $keySize ) {
396 $key = substr($key, 0, $keySize);