public async Task <HttpStatusCode> PostDataAsync <T>(T data, string targetHost, string actorUrl, string inbox = null)
        {
            var usedInbox = $"/inbox";

            if (!string.IsNullOrWhiteSpace(inbox))
            {
                usedInbox = inbox;
            }

            var json = JsonConvert.SerializeObject(data);

            var date     = DateTime.UtcNow.ToUniversalTime();
            var httpDate = date.ToString("r");

            var digest = _cryptoService.ComputeSha256Hash(json);

            var signature = _cryptoService.SignAndGetSignatureHeader(date, actorUrl, targetHost, digest, usedInbox);

            var client             = _httpClientFactory.CreateClient();
            var httpRequestMessage = new HttpRequestMessage
            {
                Method     = HttpMethod.Post,
                RequestUri = new Uri($"https://{targetHost}{usedInbox}"),
                Headers    =
                {
                    { "Host",      targetHost          },
                    { "Date",      httpDate            },
                    { "Signature", signature           },
                    { "Digest",    $"SHA-256={digest}" }
                },
                Content = new StringContent(json, Encoding.UTF8, "application/ld+json")
            };

            var response = await client.SendAsync(httpRequestMessage);

            response.EnsureSuccessStatusCode();
            return(response.StatusCode);
        }