/// <summary>
 /// Validates if xmldocument contains a valid signature
 /// </summary>
 /// <param name="xmlDocument">Xmldocument to verify</param>
 /// <returns>true/false</returns>
 public async Task <bool> IsValidSignature(XmlDocument xmlDocument)
 {
     logger.LogTrace(string.Format("SE.GOV.MM.Integration.Infrastructure.MessageService: entering IsValidSignature"));
     try
     {
         var signingHandler = new SigningHandler();
         var isValid        = signingHandler.IsValidSignature(xmlDocument);
         logger.LogTrace(string.Format("SE.GOV.MM.Integration.Infrastructure.MessageService: leaving IsValidSignature"));
         return(isValid);
     }
     catch (Exception ex)
     {
         logger.LogError(ex, ex.Message);
         throw ex;
     }
 }
        private async Task <DeliveryResult> handleDistributeSecure(SignedDelivery SignedDelivery, string endpointAdressAuthority, string endpointAdressRecipient, X509Certificate2 x509Certificate)
        {
            logger.LogTrace(string.Format("SE.GOV.MM.Integration.Infrastructure.MessageService: entering handleDistributeSecure"));

            // Initilize messageHandler
            var messageHandler = new MessageHandler(logger);

            //Check if valid Sender
            var senders = await GetSenders(endpointAdressAuthority, x509Certificate);

            if (!senders.Select(x => x.Id).Contains(SignedDelivery.Delivery.Header.Sender.Id))
            {
                var errorMessage = $"SE.GOV.MM.Integration.Infrastructure.MessageService: not valid SenderId={SignedDelivery.Delivery.Header.Sender.Id} in metod handleDistributeSecure";
                logger.LogWarning(errorMessage);
                throw new Exception(errorMessage);
            }

            // Initiate serializeHelper
            var serializehelper = new SerializeHelper(logger);

            // SerializeToXmlDocument
            string defaultNamespace     = DefaultNamespace.v3.AsString(EnumFormat.Description);
            var    xmlDocSignedDelivery = serializehelper.SerializeToXmlDocumentV3(SignedDelivery, defaultNamespace);

            // Initiate signingHandler
            var signingHandler = new SigningHandler(x509Certificate);

            // Check if signed by Sender, otherwize sign SignedDelivery
            if (!signingHandler.IsMessageSigned(xmlDocSignedDelivery))
            {
                signingHandler.SignXmlDocument(xmlDocSignedDelivery, TagName.Delivery.AsString(EnumFormat.Description));
                SignedDelivery = serializehelper.DeserializeXmlToSignedDeliveryV3(xmlDocSignedDelivery, defaultNamespace);
            }

            // Create signed sealeddelivery
            var SealedDelivery = CreateSealadDelivery();

            SealedDelivery.SignedDelivery = SignedDelivery;
            var xmlDocSealedDelivery = serializehelper.SerializeToXmlDocumentV3(SealedDelivery, defaultNamespace);

            signingHandler.SignXmlDocument(xmlDocSealedDelivery, TagName.Seal.AsString(EnumFormat.Description));
            SealedDelivery = serializehelper.DeserializeXmlToSealedDeliveryV3(xmlDocSealedDelivery, defaultNamespace);

            // Verify that Receiver is reachable
            var isReachable = await handleIsUserReachableInFaRV3(
                SignedDelivery.Delivery.Header.Recipient,
                SignedDelivery.Delivery.Header.Sender.Id,
                endpointAdressRecipient, x509Certificate);

            // Send to Operator
            if (isReachable == null || isReachable.Count() == 0)
            {
                throw new Exception($"SE.GOV.MM.Integration.Infrastructure.MessageService: Recipient is not reachable {SignedDelivery.Delivery.Header.Recipient}");
            }
            if (!isReachable[0].SenderAccepted)
            {
                throw new Exception($"SE.GOV.MM.Integration.Infrastructure.MessageService: Recipient '{SignedDelivery.Delivery.Header.Recipient}' " +
                                    $"does not accept delivery from supplier '{SignedDelivery.Delivery.Header.Sender.Id}' ");
            }
            if (isReachable[0]?.AccountStatus?.ServiceSupplier == null && isReachable[0]?.AccountStatus?.ServiceSupplier?.UIAdress == null)
            {
                throw new Exception($"SE.GOV.MM.Integration.Infrastructure.MessageService: Recipient does not have an account in FaR {SignedDelivery.Delivery.Header.Recipient}");
            }

            var baseAdressServiceSupplier = isReachable[0].AccountStatus.ServiceSupplier.ServiceAdress;

            logger.LogTrace(string.Format("SE.GOV.MM.Integration.Infrastructure.MessageService: leaving handleDistributeSecure"));
            return(await messageHandler.SendMessageToMailBoxOperator(SealedDelivery, x509Certificate, baseAdressServiceSupplier));
        }