signer = $signer; $this->signingKey = $signingKey; $this->verificationKey = $verificationKey; $this->parser = new Parser($decoder ?: new Decoder()); $this->validator = new Validation\Validator(); $this->builderFactory = static function () use($encoder) { return new Builder($encoder ?: new Encoder()); }; } /** @return self */ public static function forAsymmetricSigner(Signer $signer, Key $signingKey, Key $verificationKey, Encoder $encoder = null, Decoder $decoder = null) { return new self($signer, $signingKey, $verificationKey, $encoder, $decoder); } /** @return self */ public static function forSymmetricSigner(Signer $signer, Key $key, Encoder $encoder = null, Decoder $decoder = null) { return new self($signer, $key, $key, $encoder, $decoder); } /** @return self */ public static function forUnsecuredSigner(Encoder $encoder = null, Decoder $decoder = null) { $key = InMemory::plainText(''); return new self(new None(), $key, $key, $encoder, $decoder); } /** @param callable(): Builder $builderFactory */ public function setBuilderFactory(callable $builderFactory) { if (!$builderFactory instanceof Closure) { $builderFactory = static function () use($builderFactory) { return $builderFactory(); }; } $this->builderFactory = $builderFactory; } /** @return Builder */ public function builder() { $factory = $this->builderFactory; return $factory(); } /** @return Parser */ public function parser() { return $this->parser; } public function setParser(Parser $parser) { $this->parser = $parser; } /** @return Signer */ public function signer() { return $this->signer; } /** @return Key */ public function signingKey() { return $this->signingKey; } /** @return Key */ public function verificationKey() { return $this->verificationKey; } /** @return Validator */ public function validator() { return $this->validator; } public function setValidator(Validator $validator) { $this->validator = $validator; } /** @return Constraint[] */ public function validationConstraints() { return $this->validationConstraints; } public function setValidationConstraints(Constraint ...$validationConstraints) { $this->validationConstraints = $validationConstraints; } }