/** * Initialize by signing the payload with given algorithm. * * @param string $payload JWS Payload * @param SignatureAlgorithm $algo Signature algorithm * @param Header|null $header Desired header. Algorithm specific * parameters are added automatically. * @throws \RuntimeException If signature computation fails * @return self */ public static function sign($payload, SignatureAlgorithm $algo, Header $header = null) { if (!isset($header)) { $header = new Header(); } $header = $header->withParameters(...$algo->headerParameters()); // ensure that if b64 parameter is used, it's marked critical if ($header->hasB64Payload()) { if (!$header->hasCritical()) { $crit = new CriticalParameter(JWTParameter::P_B64); } else { $crit = $header->critical()->withParamName(JWTParameter::P_B64); } $header = $header->withParameters($crit); } $signature_input = self::_generateSignatureInput($payload, $header); $signature = $algo->computeSignature($signature_input); return new self($header, $payload, $signature_input, $signature); }
/** * * @see \JWX\JWS\SignatureAlgorithm::headerParameters() * @return JWTParameter[] */ public function headerParameters() { return array_merge(parent::headerParameters(), array(AlgorithmParameter::fromAlgorithm($this))); }