private function getKeyManagementMode(Object\JWEInterface $jwe)
{
$mode = null;
$recipients = $jwe->getRecipients();
foreach ($recipients as $recipient) {
$complete_headers = array_merge($jwe->getSharedProtectedHeaders(), $jwe->getSharedHeaders(), $recipient->getHeaders());
Assertion::keyExists($complete_headers, 'alg', 'Parameter "alg" is missing.');
$key_encryption_algorithm = $this->getJWAManager()->getAlgorithm($complete_headers['alg']);
Assertion::isInstanceOf($key_encryption_algorithm, Algorithm\KeyEncryptionAlgorithmInterface::class, sprintf('The key encryption algorithm "%s" is not supported or not a key encryption algorithm instance.', $complete_headers['alg']));
if (null === $mode) {
$mode = $key_encryption_algorithm->getKeyManagementMode();
} else {
Assertion::true($this->areKeyManagementModesCompatible($mode, $key_encryption_algorithm->getKeyManagementMode()), 'Foreign key management mode forbidden.');
}
}
return $mode;
}