private static function getRSAESOAEP(RSAKey $key, $c, Hash $hash)
{
$c = self::convertOctetStringToInteger($c);
$m = self::getRSADP($key, $c);
Assertion::isInstanceOf($m, BigInteger::class);
$em = self::convertIntegerToOctetString($m, $key->getModulusLength());
$lHash = $hash->hash('');
$maskedSeed = mb_substr($em, 1, $hash->getLength(), '8bit');
$maskedDB = mb_substr($em, $hash->getLength() + 1, null, '8bit');
$seedMask = self::getMGF1($maskedDB, $hash->getLength(), $hash);
$seed = $maskedSeed ^ $seedMask;
$dbMask = self::getMGF1($seed, $key->getModulusLength() - $hash->getLength() - 1, $hash);
$db = $maskedDB ^ $dbMask;
$lHash2 = mb_substr($db, 0, $hash->getLength(), '8bit');
$m = mb_substr($db, $hash->getLength(), null, '8bit');
Assertion::eq($lHash, $lHash2);
$m = ltrim($m, chr(0));
Assertion::eq(ord($m[0]), 1);
return mb_substr($m, 1, null, '8bit');
}