headers = $headers; $this->requests = $requests; $this->requestHash = $requestHash; } /** * @return array */ public function getHeaders(): array { return $this->headers; } /** * @return RpcRequest[] */ public function getRequests(): array { return $this->requests; } public function getHash(): string { return $this->requestHash; } public function getClientName(): string { return $this->headers[StandardHeaders::CLIENT_NAME->value]; } public function getClientVersion(): string { return $this->headers[StandardHeaders::CLIENT_VERSION->value]; } public function getSessionUuid(): ?string { if(!isset($this->headers[StandardHeaders::SESSION_UUID->value])) { return null; } return $this->headers[StandardHeaders::SESSION_UUID->value]; } public function getFromPeer(): ?PeerAddress { if(!isset($this->headers[StandardHeaders::FROM_PEER->value])) { return null; } return PeerAddress::fromAddress($this->headers[StandardHeaders::FROM_PEER->value]); } public function getSignature(): ?string { if(!isset($this->headers[StandardHeaders::SIGNATURE->value])) { return null; } return $this->headers[StandardHeaders::SIGNATURE->value]; } /** * @return bool * @throws DatabaseOperationException */ public function verifySignature(): bool { $signature = $this->getSignature(); $sessionUuid = $this->getSessionUuid(); if($signature == null || $sessionUuid == null) { return false; } try { $session = SessionManager::getSession($sessionUuid); } catch(StandardException $e) { if($e->getStandardError() == StandardError::SESSION_NOT_FOUND) { return false; } throw new RuntimeException($e); } try { return Cryptography::verifyContent($this->getHash(), $signature, $session->getPublicKey()); } catch(CryptographyException $e) { return false; } } }