/** * @param Jose $jose * @param string $key * @param string|null $algorithm * @return string * @throws \InvalidArgumentException */ public function encode(Jose $jose, $key, $algorithm = null) { $algorithm = $algorithm ? $algorithm : $this->getDefaultAlgorithm(); if (false == Algorithm::isValid($algorithm)) { throw new \InvalidArgumentException(sprintf("Invalid algorithm '%s'", $algorithm)); } $jose->headerSet(JwsHeader::ALGORITHM, $algorithm); $signing_input = $jose->getSigningInput(); $signature = $this->sign($signing_input, $key, $algorithm); $signatureB64 = UrlSafeB64Encoder::encode($signature); return $signing_input . '.' . $signatureB64; }