71 lines
1.5 KiB
Plaintext
71 lines
1.5 KiB
Plaintext
/**
|
|
* Trims or zero-pads a key / IV
|
|
*
|
|
* @param string $key The key or IV to treat
|
|
* @param int $size The block size of the currently used algorithm
|
|
*
|
|
* @return null|string Null if $key is null, treated string of $size byte length otherwise
|
|
*/
|
|
public function resizeKey($key, $size)
|
|
{
|
|
if (empty($key))
|
|
{
|
|
return null;
|
|
}
|
|
|
|
$keyLength = strlen($key);
|
|
|
|
if (function_exists('mb_strlen'))
|
|
{
|
|
$keyLength = mb_strlen($key, 'ASCII');
|
|
}
|
|
|
|
if ($keyLength == $size)
|
|
{
|
|
return $key;
|
|
}
|
|
|
|
if ($keyLength > $size)
|
|
{
|
|
if (function_exists('mb_substr'))
|
|
{
|
|
return mb_substr($key, 0, $size, 'ASCII');
|
|
}
|
|
|
|
return substr($key, 0, $size);
|
|
}
|
|
|
|
return $key . str_repeat("\0", ($size - $keyLength));
|
|
}
|
|
|
|
/**
|
|
* Returns null bytes to append to the string so that it's zero padded to the specified block size
|
|
*
|
|
* @param string $string The binary string which will be zero padded
|
|
* @param int $blockSize The block size
|
|
*
|
|
* @return string The zero bytes to append to the string to zero pad it to $blockSize
|
|
*/
|
|
protected function getZeroPadding($string, $blockSize)
|
|
{
|
|
$stringSize = strlen($string);
|
|
|
|
if (function_exists('mb_strlen'))
|
|
{
|
|
$stringSize = mb_strlen($string, 'ASCII');
|
|
}
|
|
|
|
if ($stringSize == $blockSize)
|
|
{
|
|
return '';
|
|
}
|
|
|
|
if ($stringSize < $blockSize)
|
|
{
|
|
return str_repeat("\0", $blockSize - $stringSize);
|
|
}
|
|
|
|
$paddingBytes = $stringSize % $blockSize;
|
|
|
|
return str_repeat("\0", $blockSize - $paddingBytes);
|
|
} |