public function encrypt($data, array $params = NULL)
{
if (($params = $this->_get_params($params)) === FALSE) {
return FALSE;
}
isset($params['key']) or $params['key'] = $this->hkdf($this->_key, 'sha512', NULL, self::strlen($this->_key), 'encryption');
if (($data = $this->{'_' . $this->_driver . '_encrypt'}($data, $params)) === FALSE) {
return FALSE;
}
$params['base64'] && ($data = base64_encode($data));
if (isset($params['hmac_digest'])) {
isset($params['hmac_key']) or $params['hmac_key'] = $this->hkdf($this->_key, 'sha512', NULL, NULL, 'authentication');
return hash_hmac($params['hmac_digest'], $data, $params['hmac_key'], !$params['base64']) . $data;
}
return $data;
}