chimera-mark2-core-release/core/fox/xcrypt.php

64 lines
1.8 KiB
PHP

<?php
namespace fox;
/**
*
* Class fox\xcrypt
*
* @copyright MX STAR LLC 2021
* @version 4.0.0
* @author Pavel Dmitriev
* @license GPLv3
*
*/
class xcrypt
{
static function encrypt($val, $key = null)
{
if (isset($key)) {
$ENC_KEY = substr(md5($key), 0, 24);
} else {
$ENC_KEY = substr(md5(config::get("masterSecret")), 0, 24);
}
$ivlen = openssl_cipher_iv_length($cipher = "AES-128-CBC");
$iv = openssl_random_pseudo_bytes($ivlen);
$ciphertext_raw = openssl_encrypt($val, $cipher, $ENC_KEY, OPENSSL_RAW_DATA, $iv);
$hmac = hash_hmac('sha256', $ciphertext_raw, $ENC_KEY, true);
$ciphertext = base64_encode($iv . $hmac . $ciphertext_raw);
return $ciphertext;
}
static function decrypt($val, $key = null)
{
if (isset($key)) {
$ENC_KEY = substr(md5($key), 0, 24);
} else {
$ENC_KEY = substr(md5(config::get("masterSecret")), 0, 24);
}
$c = base64_decode($val);
$ivlen = openssl_cipher_iv_length($cipher = "AES-128-CBC");
$iv = substr($c, 0, $ivlen);
$hmac = substr($c, $ivlen, $sha2len = 32);
$ciphertext_raw = substr($c, $ivlen + $sha2len);
$plaintext = openssl_decrypt($ciphertext_raw, $cipher, $ENC_KEY, OPENSSL_RAW_DATA, $iv);
$calcmac = hash_hmac('sha256', $ciphertext_raw, $ENC_KEY, true);
if ($hmac && hash_equals($hmac, $calcmac)) {
return $plaintext;
} else {
return null;
}
}
static function hash($val, $key = null)
{
if (isset($key)) {
$ENC_KEY = substr(md5($key), 0, 24);
} else {
$ENC_KEY = substr(md5(config::get("masterSecret")), 0, 24);
}
return hash_hmac('sha256', $val, $ENC_KEY, false);
}
}