private static function encodeEMSAPSS($m, $emBits, Hash $hash)
{
$emLen = $emBits + 1 >> 3;
$sLen = $hash->getLength();
$mHash = $hash->hash($m);
Assertion::greaterThan($emLen, $hash->getLength() + $sLen + 2);
$salt = random_bytes($sLen);
$m2 = "" . $mHash . $salt;
$h = $hash->hash($m2);
$ps = str_repeat(chr(0), $emLen - $sLen - $hash->getLength() - 2);
$db = $ps . chr(1) . $salt;
$dbMask = self::getMGF1($h, $emLen - $hash->getLength() - 1, $hash);
$maskedDB = $db ^ $dbMask;
$maskedDB[0] = ~chr(0xff << ($emBits & 7)) & $maskedDB[0];
$em = $maskedDB . $h . chr(0xbc);
return $em;
}