public static function getKeyDataFromString(string $data) : string
{
$versionTag = Util::safeSubstr($data, 0, Halite::VERSION_TAG_LEN);
$keyData = Util::safeSubstr($data, Halite::VERSION_TAG_LEN, -\Sodium\CRYPTO_GENERICHASH_BYTES_MAX);
$checksum = Util::safeSubstr($data, -\Sodium\CRYPTO_GENERICHASH_BYTES_MAX, \Sodium\CRYPTO_GENERICHASH_BYTES_MAX);
$calc = \Sodium\crypto_generichash($versionTag . $keyData, '', \Sodium\CRYPTO_GENERICHASH_BYTES_MAX);
if (!\hash_equals($calc, $checksum)) {
throw new Alerts\InvalidKey('Checksum validation fail');
}
\Sodium\memzero($data);
\Sodium\memzero($versionTag);
\Sodium\memzero($calc);
\Sodium\memzero($checksum);
return $keyData;
}