89 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			89 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * @package   FOF
 | |
|  * @copyright Copyright (c)2010-2022 Nicholas K. Dionysopoulos / Akeeba Ltd
 | |
|  * @license   GNU General Public License version 3, or later
 | |
|  */
 | |
| 
 | |
| namespace FOF40\Encrypt\AesAdapter;
 | |
| 
 | |
| defined('_JEXEC') || die();
 | |
| 
 | |
| /**
 | |
|  * Abstract AES encryption class
 | |
|  */
 | |
| abstract class AbstractAdapter
 | |
| {
 | |
| 	/**
 | |
| 	 * 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(string $key, int $size): ?string
 | |
| 	{
 | |
| 		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 $string, int $blockSize): string
 | |
| 	{
 | |
| 		$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);
 | |
| 	}
 | |
| }
 |