ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
SigningSerializer.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
22
30
37{
41 private const SEPARATOR = '<<>>';
42
43 public function __construct(
44 private KeyRotatingSigner $signer,
45 private Serializer $serializer,
46 private Compression $compression,
47 private Transport $transport
48 ) {
49 }
50
51 public function sign(Payload $payload, Salt $salt): string
52 {
53 // serialize payload
54 $serialized_payload = $this->serializer->serializePayload($payload->get());
55 $serialized_validity = $this->serializer->serializeValidity($payload->until());
56 $signable_payload = $serialized_payload . self::SEPARATOR . $serialized_validity;
57
58 // sign payload
59 $signature = $this->signer->sign($signable_payload, $salt);
60
61 $signed_payload = $signable_payload . self::SEPARATOR . $signature;
62
63 $compressed_payload = $this->compression->compress($signed_payload);
64
65 $prepare_for_transport = $this->transport->prepareForTransport($compressed_payload);
66
67 return $prepare_for_transport;
68 }
69
70 public function verify(string $data, Salt $salt): ?Payload
71 {
72 // decompress payload
73 try {
74 $decompressed_payload = $this->compression->decompress(
75 $this->transport->readFromTransport($data)
76 );
77 } catch (\Throwable) {
78 return null;
79 }
80
81 $split_data = explode(self::SEPARATOR, $decompressed_payload);
82 $serialized_payload = $split_data[0] ?? '';
83 $validity = $split_data[1] ?? '';
84 $signature = $split_data[2] ?? '';
85
86 $payload_with_validity = $serialized_payload . self::SEPARATOR . $validity;
87
88 if ($this->signer->verify($payload_with_validity, $signature, (int) $validity, $salt) === false) {
89 return null;
90 }
91
92 return new StructuredPayload($this->serializer->unserializePayload($serialized_payload));
93 }
94}
The salt is combined with the secret key to derive a unique key for distinguishing different contexts...
Definition: Salt.php:38
__construct(private KeyRotatingSigner $signer, private Serializer $serializer, private Compression $compression, private Transport $transport)
if(count($parts) !=3) $payload
Definition: ltitoken.php:67