From bb4111a0fbe67f0c0125f15762039ea16009a8d9 Mon Sep 17 00:00:00 2001
From: Paul Andrey <paul.andrey@inria.fr>
Date: Mon, 10 Jun 2024 13:58:52 +0200
Subject: [PATCH] Fix SecAgg not being setup prior to Fairness setup.

---
 declearn/main/_client.py | 4 ++++
 declearn/main/_server.py | 4 ++++
 2 files changed, 8 insertions(+)

diff --git a/declearn/main/_client.py b/declearn/main/_client.py
index cbe48c2..14ae680 100644
--- a/declearn/main/_client.py
+++ b/declearn/main/_client.py
@@ -454,6 +454,10 @@ class FederatedClient:
         and should never be called in another context.
         """
         assert self.trainmanager is not None
+        # When SecAgg is to be used, setup controllers first.
+        if self.secagg is not None:
+            received = await self.netwk.recv_message()
+            await self.setup_secagg(received)
         # Await and deserialize a FairnessSetupQuery.
         received = await self.netwk.recv_message()
         query = await verify_server_message_validity(
diff --git a/declearn/main/_server.py b/declearn/main/_server.py
index 1286103..11f157a 100644
--- a/declearn/main/_server.py
+++ b/declearn/main/_server.py
@@ -355,6 +355,10 @@ class FederatedServer:
             await self._initialize_dpsgd(config)
         # If fairness-aware federated learning is configured, set it up.
         if self.fairness is not None:
+            # When SecAgg is to be used, setup controllers first.
+            if self.secagg is not None:
+                await self.setup_secagg()
+            # Call the setup routine of the held fairness controller.
             self.aggrg = await self.fairness.setup_fairness(
                 netwk=self.netwk, aggregator=self.aggrg, secagg=self._decrypter
             )
-- 
GitLab