flwr-nightly 1.23.0.dev20251006__py3-none-any.whl → 1.23.0.dev20251007__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- flwr/client/grpc_rere_client/client_interceptor.py +1 -4
- flwr/client/grpc_rere_client/connection.py +1 -3
- flwr/client/mod/secure_aggregation/secaggplus_mod.py +7 -5
- flwr/common/secure_aggregation/crypto/symmetric_encryption.py +1 -89
- flwr/server/app.py +1 -3
- flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +1 -4
- flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +4 -2
- flwr/supercore/primitives/__init__.py +15 -0
- flwr/supercore/primitives/asymmetric.py +109 -0
- {flwr_nightly-1.23.0.dev20251006.dist-info → flwr_nightly-1.23.0.dev20251007.dist-info}/METADATA +1 -1
- {flwr_nightly-1.23.0.dev20251006.dist-info → flwr_nightly-1.23.0.dev20251007.dist-info}/RECORD +13 -11
- {flwr_nightly-1.23.0.dev20251006.dist-info → flwr_nightly-1.23.0.dev20251007.dist-info}/WHEEL +0 -0
- {flwr_nightly-1.23.0.dev20251006.dist-info → flwr_nightly-1.23.0.dev20251007.dist-info}/entry_points.txt +0 -0
@@ -23,10 +23,7 @@ from google.protobuf.message import Message as GrpcMessage
|
|
23
23
|
|
24
24
|
from flwr.common import now
|
25
25
|
from flwr.common.constant import PUBLIC_KEY_HEADER, SIGNATURE_HEADER, TIMESTAMP_HEADER
|
26
|
-
from flwr.
|
27
|
-
public_key_to_bytes,
|
28
|
-
sign_message,
|
29
|
-
)
|
26
|
+
from flwr.supercore.primitives.asymmetric import public_key_to_bytes, sign_message
|
30
27
|
|
31
28
|
|
32
29
|
class AuthenticateClientInterceptor(grpc.UnaryUnaryClientInterceptor): # type: ignore
|
@@ -36,9 +36,6 @@ from flwr.common.inflatable_protobuf_utils import (
|
|
36
36
|
from flwr.common.logger import log
|
37
37
|
from flwr.common.message import Message, remove_content_from_message
|
38
38
|
from flwr.common.retry_invoker import RetryInvoker, _wrap_stub
|
39
|
-
from flwr.common.secure_aggregation.crypto.symmetric_encryption import (
|
40
|
-
generate_key_pairs,
|
41
|
-
)
|
42
39
|
from flwr.common.serde import message_from_proto, message_to_proto, run_from_proto
|
43
40
|
from flwr.common.typing import Fab, Run
|
44
41
|
from flwr.proto.fab_pb2 import GetFabRequest, GetFabResponse # pylint: disable=E0611
|
@@ -58,6 +55,7 @@ from flwr.proto.heartbeat_pb2 import ( # pylint: disable=E0611
|
|
58
55
|
from flwr.proto.message_pb2 import ObjectTree # pylint: disable=E0611
|
59
56
|
from flwr.proto.node_pb2 import Node # pylint: disable=E0611
|
60
57
|
from flwr.proto.run_pb2 import GetRunRequest, GetRunResponse # pylint: disable=E0611
|
58
|
+
from flwr.supercore.primitives.asymmetric import generate_key_pairs
|
61
59
|
|
62
60
|
from .client_interceptor import AuthenticateClientInterceptor
|
63
61
|
from .grpc_adapter import GrpcAdapter
|
@@ -35,14 +35,9 @@ from flwr.common.constant import MessageType
|
|
35
35
|
from flwr.common.logger import log
|
36
36
|
from flwr.common.secure_aggregation.crypto.shamir import create_shares
|
37
37
|
from flwr.common.secure_aggregation.crypto.symmetric_encryption import (
|
38
|
-
bytes_to_private_key,
|
39
|
-
bytes_to_public_key,
|
40
38
|
decrypt,
|
41
39
|
encrypt,
|
42
|
-
generate_key_pairs,
|
43
40
|
generate_shared_key,
|
44
|
-
private_key_to_bytes,
|
45
|
-
public_key_to_bytes,
|
46
41
|
)
|
47
42
|
from flwr.common.secure_aggregation.ndarrays_arithmetic import (
|
48
43
|
factor_combine,
|
@@ -64,6 +59,13 @@ from flwr.common.secure_aggregation.secaggplus_utils import (
|
|
64
59
|
share_keys_plaintext_separate,
|
65
60
|
)
|
66
61
|
from flwr.common.typing import ConfigRecordValues
|
62
|
+
from flwr.supercore.primitives.asymmetric import (
|
63
|
+
bytes_to_private_key,
|
64
|
+
bytes_to_public_key,
|
65
|
+
generate_key_pairs,
|
66
|
+
private_key_to_bytes,
|
67
|
+
public_key_to_bytes,
|
68
|
+
)
|
67
69
|
|
68
70
|
|
69
71
|
@dataclass
|
@@ -16,57 +16,14 @@
|
|
16
16
|
|
17
17
|
|
18
18
|
import base64
|
19
|
-
from typing import cast
|
20
19
|
|
21
20
|
from cryptography.exceptions import InvalidSignature
|
22
21
|
from cryptography.fernet import Fernet
|
23
|
-
from cryptography.hazmat.primitives import hashes, hmac
|
22
|
+
from cryptography.hazmat.primitives import hashes, hmac
|
24
23
|
from cryptography.hazmat.primitives.asymmetric import ec
|
25
24
|
from cryptography.hazmat.primitives.kdf.hkdf import HKDF
|
26
25
|
|
27
26
|
|
28
|
-
def generate_key_pairs() -> (
|
29
|
-
tuple[ec.EllipticCurvePrivateKey, ec.EllipticCurvePublicKey]
|
30
|
-
):
|
31
|
-
"""Generate private and public key pairs with Cryptography."""
|
32
|
-
private_key = ec.generate_private_key(ec.SECP384R1())
|
33
|
-
public_key = private_key.public_key()
|
34
|
-
return private_key, public_key
|
35
|
-
|
36
|
-
|
37
|
-
def private_key_to_bytes(private_key: ec.EllipticCurvePrivateKey) -> bytes:
|
38
|
-
"""Serialize private key to bytes."""
|
39
|
-
return private_key.private_bytes(
|
40
|
-
encoding=serialization.Encoding.PEM,
|
41
|
-
format=serialization.PrivateFormat.PKCS8,
|
42
|
-
encryption_algorithm=serialization.NoEncryption(),
|
43
|
-
)
|
44
|
-
|
45
|
-
|
46
|
-
def bytes_to_private_key(private_key_bytes: bytes) -> ec.EllipticCurvePrivateKey:
|
47
|
-
"""Deserialize private key from bytes."""
|
48
|
-
return cast(
|
49
|
-
ec.EllipticCurvePrivateKey,
|
50
|
-
serialization.load_pem_private_key(data=private_key_bytes, password=None),
|
51
|
-
)
|
52
|
-
|
53
|
-
|
54
|
-
def public_key_to_bytes(public_key: ec.EllipticCurvePublicKey) -> bytes:
|
55
|
-
"""Serialize public key to bytes."""
|
56
|
-
return public_key.public_bytes(
|
57
|
-
encoding=serialization.Encoding.PEM,
|
58
|
-
format=serialization.PublicFormat.SubjectPublicKeyInfo,
|
59
|
-
)
|
60
|
-
|
61
|
-
|
62
|
-
def bytes_to_public_key(public_key_bytes: bytes) -> ec.EllipticCurvePublicKey:
|
63
|
-
"""Deserialize public key from bytes."""
|
64
|
-
return cast(
|
65
|
-
ec.EllipticCurvePublicKey,
|
66
|
-
serialization.load_pem_public_key(data=public_key_bytes),
|
67
|
-
)
|
68
|
-
|
69
|
-
|
70
27
|
def generate_shared_key(
|
71
28
|
private_key: ec.EllipticCurvePrivateKey, public_key: ec.EllipticCurvePublicKey
|
72
29
|
) -> bytes:
|
@@ -117,48 +74,3 @@ def verify_hmac(key: bytes, message: bytes, hmac_value: bytes) -> bool:
|
|
117
74
|
return True
|
118
75
|
except InvalidSignature:
|
119
76
|
return False
|
120
|
-
|
121
|
-
|
122
|
-
def sign_message(private_key: ec.EllipticCurvePrivateKey, message: bytes) -> bytes:
|
123
|
-
"""Sign a message using the provided EC private key.
|
124
|
-
|
125
|
-
Parameters
|
126
|
-
----------
|
127
|
-
private_key : ec.EllipticCurvePrivateKey
|
128
|
-
The EC private key to sign the message with.
|
129
|
-
message : bytes
|
130
|
-
The message to be signed.
|
131
|
-
|
132
|
-
Returns
|
133
|
-
-------
|
134
|
-
bytes
|
135
|
-
The signature of the message.
|
136
|
-
"""
|
137
|
-
signature = private_key.sign(message, ec.ECDSA(hashes.SHA256()))
|
138
|
-
return signature
|
139
|
-
|
140
|
-
|
141
|
-
def verify_signature(
|
142
|
-
public_key: ec.EllipticCurvePublicKey, message: bytes, signature: bytes
|
143
|
-
) -> bool:
|
144
|
-
"""Verify a signature against a message using the provided EC public key.
|
145
|
-
|
146
|
-
Parameters
|
147
|
-
----------
|
148
|
-
public_key : ec.EllipticCurvePublicKey
|
149
|
-
The EC public key to verify the signature.
|
150
|
-
message : bytes
|
151
|
-
The original message.
|
152
|
-
signature : bytes
|
153
|
-
The signature to verify.
|
154
|
-
|
155
|
-
Returns
|
156
|
-
-------
|
157
|
-
bool
|
158
|
-
True if the signature is valid, False otherwise.
|
159
|
-
"""
|
160
|
-
try:
|
161
|
-
public_key.verify(signature, message, ec.ECDSA(hashes.SHA256()))
|
162
|
-
return True
|
163
|
-
except InvalidSignature:
|
164
|
-
return False
|
flwr/server/app.py
CHANGED
@@ -59,9 +59,6 @@ from flwr.common.event_log_plugin import EventLogWriterPlugin
|
|
59
59
|
from flwr.common.exit import ExitCode, flwr_exit, register_signal_handlers
|
60
60
|
from flwr.common.grpc import generic_create_grpc_server
|
61
61
|
from flwr.common.logger import log
|
62
|
-
from flwr.common.secure_aggregation.crypto.symmetric_encryption import (
|
63
|
-
public_key_to_bytes,
|
64
|
-
)
|
65
62
|
from flwr.proto.fleet_pb2_grpc import ( # pylint: disable=E0611
|
66
63
|
add_FleetServicer_to_server,
|
67
64
|
)
|
@@ -70,6 +67,7 @@ from flwr.server.fleet_event_log_interceptor import FleetEventLogInterceptor
|
|
70
67
|
from flwr.supercore.ffs import FfsFactory
|
71
68
|
from flwr.supercore.grpc_health import add_args_health, run_health_server_grpc_no_tls
|
72
69
|
from flwr.supercore.object_store import ObjectStoreFactory
|
70
|
+
from flwr.supercore.primitives.asymmetric import public_key_to_bytes
|
73
71
|
from flwr.superlink.artifact_provider import ArtifactProvider
|
74
72
|
from flwr.superlink.auth_plugin import ControlAuthnPlugin, ControlAuthzPlugin
|
75
73
|
from flwr.superlink.servicer.control import run_control_api_grpc
|
@@ -29,15 +29,12 @@ from flwr.common.constant import (
|
|
29
29
|
TIMESTAMP_HEADER,
|
30
30
|
TIMESTAMP_TOLERANCE,
|
31
31
|
)
|
32
|
-
from flwr.common.secure_aggregation.crypto.symmetric_encryption import (
|
33
|
-
bytes_to_public_key,
|
34
|
-
verify_signature,
|
35
|
-
)
|
36
32
|
from flwr.proto.fleet_pb2 import ( # pylint: disable=E0611
|
37
33
|
CreateNodeRequest,
|
38
34
|
CreateNodeResponse,
|
39
35
|
)
|
40
36
|
from flwr.server.superlink.linkstate import LinkStateFactory
|
37
|
+
from flwr.supercore.primitives.asymmetric import bytes_to_public_key, verify_signature
|
41
38
|
|
42
39
|
MIN_TIMESTAMP_DIFF = -SYSTEM_TIME_TOLERANCE
|
43
40
|
MAX_TIMESTAMP_DIFF = TIMESTAMP_TOLERANCE + SYSTEM_TIME_TOLERANCE
|
@@ -35,8 +35,6 @@ from flwr.common import (
|
|
35
35
|
)
|
36
36
|
from flwr.common.secure_aggregation.crypto.shamir import combine_shares
|
37
37
|
from flwr.common.secure_aggregation.crypto.symmetric_encryption import (
|
38
|
-
bytes_to_private_key,
|
39
|
-
bytes_to_public_key,
|
40
38
|
generate_shared_key,
|
41
39
|
)
|
42
40
|
from flwr.common.secure_aggregation.ndarrays_arithmetic import (
|
@@ -56,6 +54,10 @@ from flwr.common.secure_aggregation.secaggplus_utils import pseudo_rand_gen
|
|
56
54
|
from flwr.server.client_proxy import ClientProxy
|
57
55
|
from flwr.server.compat.legacy_context import LegacyContext
|
58
56
|
from flwr.server.grid import Grid
|
57
|
+
from flwr.supercore.primitives.asymmetric import (
|
58
|
+
bytes_to_private_key,
|
59
|
+
bytes_to_public_key,
|
60
|
+
)
|
59
61
|
|
60
62
|
from ..constant import MAIN_CONFIGS_RECORD, MAIN_PARAMS_RECORD
|
61
63
|
from ..constant import Key as WorkflowKey
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# Copyright 2025 Flower Labs GmbH. All Rights Reserved.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
# ==============================================================================
|
15
|
+
"""Cryptographic primitives for the Flower infrastructure."""
|
@@ -0,0 +1,109 @@
|
|
1
|
+
# Copyright 2025 Flower Labs GmbH. All Rights Reserved.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
# ==============================================================================
|
15
|
+
"""Asymmetric cryptography utilities."""
|
16
|
+
|
17
|
+
|
18
|
+
from typing import cast
|
19
|
+
|
20
|
+
from cryptography.exceptions import InvalidSignature
|
21
|
+
from cryptography.hazmat.primitives import hashes, serialization
|
22
|
+
from cryptography.hazmat.primitives.asymmetric import ec
|
23
|
+
|
24
|
+
|
25
|
+
def generate_key_pairs() -> (
|
26
|
+
tuple[ec.EllipticCurvePrivateKey, ec.EllipticCurvePublicKey]
|
27
|
+
):
|
28
|
+
"""Generate private and public key pairs with Cryptography."""
|
29
|
+
private_key = ec.generate_private_key(ec.SECP384R1())
|
30
|
+
public_key = private_key.public_key()
|
31
|
+
return private_key, public_key
|
32
|
+
|
33
|
+
|
34
|
+
def private_key_to_bytes(private_key: ec.EllipticCurvePrivateKey) -> bytes:
|
35
|
+
"""Serialize private key to bytes."""
|
36
|
+
return private_key.private_bytes(
|
37
|
+
encoding=serialization.Encoding.PEM,
|
38
|
+
format=serialization.PrivateFormat.PKCS8,
|
39
|
+
encryption_algorithm=serialization.NoEncryption(),
|
40
|
+
)
|
41
|
+
|
42
|
+
|
43
|
+
def bytes_to_private_key(private_key_bytes: bytes) -> ec.EllipticCurvePrivateKey:
|
44
|
+
"""Deserialize private key from bytes."""
|
45
|
+
return cast(
|
46
|
+
ec.EllipticCurvePrivateKey,
|
47
|
+
serialization.load_pem_private_key(data=private_key_bytes, password=None),
|
48
|
+
)
|
49
|
+
|
50
|
+
|
51
|
+
def public_key_to_bytes(public_key: ec.EllipticCurvePublicKey) -> bytes:
|
52
|
+
"""Serialize public key to bytes."""
|
53
|
+
return public_key.public_bytes(
|
54
|
+
encoding=serialization.Encoding.PEM,
|
55
|
+
format=serialization.PublicFormat.SubjectPublicKeyInfo,
|
56
|
+
)
|
57
|
+
|
58
|
+
|
59
|
+
def bytes_to_public_key(public_key_bytes: bytes) -> ec.EllipticCurvePublicKey:
|
60
|
+
"""Deserialize public key from bytes."""
|
61
|
+
return cast(
|
62
|
+
ec.EllipticCurvePublicKey,
|
63
|
+
serialization.load_pem_public_key(data=public_key_bytes),
|
64
|
+
)
|
65
|
+
|
66
|
+
|
67
|
+
def sign_message(private_key: ec.EllipticCurvePrivateKey, message: bytes) -> bytes:
|
68
|
+
"""Sign a message using the provided EC private key.
|
69
|
+
|
70
|
+
Parameters
|
71
|
+
----------
|
72
|
+
private_key : ec.EllipticCurvePrivateKey
|
73
|
+
The EC private key to sign the message with.
|
74
|
+
message : bytes
|
75
|
+
The message to be signed.
|
76
|
+
|
77
|
+
Returns
|
78
|
+
-------
|
79
|
+
bytes
|
80
|
+
The signature of the message.
|
81
|
+
"""
|
82
|
+
signature = private_key.sign(message, ec.ECDSA(hashes.SHA256()))
|
83
|
+
return signature
|
84
|
+
|
85
|
+
|
86
|
+
def verify_signature(
|
87
|
+
public_key: ec.EllipticCurvePublicKey, message: bytes, signature: bytes
|
88
|
+
) -> bool:
|
89
|
+
"""Verify a signature against a message using the provided EC public key.
|
90
|
+
|
91
|
+
Parameters
|
92
|
+
----------
|
93
|
+
public_key : ec.EllipticCurvePublicKey
|
94
|
+
The EC public key to verify the signature.
|
95
|
+
message : bytes
|
96
|
+
The original message.
|
97
|
+
signature : bytes
|
98
|
+
The signature to verify.
|
99
|
+
|
100
|
+
Returns
|
101
|
+
-------
|
102
|
+
bool
|
103
|
+
True if the signature is valid, False otherwise.
|
104
|
+
"""
|
105
|
+
try:
|
106
|
+
public_key.verify(signature, message, ec.ECDSA(hashes.SHA256()))
|
107
|
+
return True
|
108
|
+
except InvalidSignature:
|
109
|
+
return False
|
{flwr_nightly-1.23.0.dev20251006.dist-info → flwr_nightly-1.23.0.dev20251007.dist-info}/METADATA
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.3
|
2
2
|
Name: flwr-nightly
|
3
|
-
Version: 1.23.0.
|
3
|
+
Version: 1.23.0.dev20251007
|
4
4
|
Summary: Flower: A Friendly Federated AI Framework
|
5
5
|
License: Apache-2.0
|
6
6
|
Keywords: Artificial Intelligence,Federated AI,Federated Analytics,Federated Evaluation,Federated Learning,Flower,Machine Learning
|
{flwr_nightly-1.23.0.dev20251006.dist-info → flwr_nightly-1.23.0.dev20251007.dist-info}/RECORD
RENAMED
@@ -97,8 +97,8 @@ flwr/client/dpfedavg_numpy_client.py,sha256=3hul067cT2E9jBhzp7bFnFAZ_D2nWcIUEdHY
|
|
97
97
|
flwr/client/grpc_adapter_client/__init__.py,sha256=RQWP5mFPROLHKgombiRvPXVWSoVrQ81wvZm0-lOuuBA,742
|
98
98
|
flwr/client/grpc_adapter_client/connection.py,sha256=JGv02EjSOAG1E5BRUD4lwXc1LLiYJ0OhInvp31qx1cU,4404
|
99
99
|
flwr/client/grpc_rere_client/__init__.py,sha256=i7iS0Lt8B7q0E2L72e4F_YrKm6ClRKnd71PNA6PW2O0,752
|
100
|
-
flwr/client/grpc_rere_client/client_interceptor.py,sha256=
|
101
|
-
flwr/client/grpc_rere_client/connection.py,sha256=
|
100
|
+
flwr/client/grpc_rere_client/client_interceptor.py,sha256=65MAcKpA7Sv2FRYGgyCQosnZlh7cSIlPn2lMqh-cqZw,2416
|
101
|
+
flwr/client/grpc_rere_client/connection.py,sha256=OSRsZxeDoGE2avTStQMTV4z2o5ezO-nBrwy6qvCs430,12977
|
102
102
|
flwr/client/grpc_rere_client/grpc_adapter.py,sha256=dLGB5GriszAmtgvuFGuz_F7rIwpzLfDxhJ7T3Un-Ce0,6694
|
103
103
|
flwr/client/message_handler/__init__.py,sha256=0lyljDVqre3WljiZbPcwCCf8GiIaSVI_yo_ylEyPwSE,719
|
104
104
|
flwr/client/message_handler/message_handler.py,sha256=X9SXX6et97Lw9_DGD93HKsEBGNjXClcFgc_5aLK0oiU,6541
|
@@ -108,7 +108,7 @@ flwr/client/mod/comms_mods.py,sha256=ehp0AF-nGXxQOtm4G5Ts_7RTP04x5Y8PmA1Myfrjuro
|
|
108
108
|
flwr/client/mod/localdp_mod.py,sha256=GzVQrydejUfFDgnIIEIwrUU2DgvhN990LUnoydm9Tpo,5008
|
109
109
|
flwr/client/mod/secure_aggregation/__init__.py,sha256=k8HYXvqu3pd_V3eZ0_5wwH52o-C6XJCPbT4n4anYyWY,849
|
110
110
|
flwr/client/mod/secure_aggregation/secagg_mod.py,sha256=y54DvpM2-DWUiEYqgwZ0DssC1VVRCJEfGgST7O3OcwM,1095
|
111
|
-
flwr/client/mod/secure_aggregation/secaggplus_mod.py,sha256=
|
111
|
+
flwr/client/mod/secure_aggregation/secaggplus_mod.py,sha256=Ib-HlhZOXB6-hAWGZ0IpbK7mIr1A5j2qpc8IRu-MxLU,19714
|
112
112
|
flwr/client/mod/utils.py,sha256=FUgD2TfcWqSeF6jUKZ4i6Ke56U4Nrv85AeVb93s6R9g,1201
|
113
113
|
flwr/client/numpy_client.py,sha256=Qq6ghsIAop2slKqAfgiI5NiHJ4LIxGmrik3Ror4_XVc,9581
|
114
114
|
flwr/client/rest_client/__init__.py,sha256=MBiuK62hj439m9rtwSwI184Hth6Tt5GbmpNMyl3zkZY,735
|
@@ -163,7 +163,7 @@ flwr/common/retry_invoker.py,sha256=uQeDcgoTgmFwhJ0mkDE2eNz2acF9eShaqMOO5boGrPQ,
|
|
163
163
|
flwr/common/secure_aggregation/__init__.py,sha256=MgW6uHGhyFLBAYQqa1Vzs5n2Gc0d4yEw1_NmerFir70,731
|
164
164
|
flwr/common/secure_aggregation/crypto/__init__.py,sha256=5E4q4-Fw0CNz4tLah_QHj7m_rDeM4ucHcFlPWB_Na3Q,738
|
165
165
|
flwr/common/secure_aggregation/crypto/shamir.py,sha256=N8pPa5cEksowNoAqfFm5SP3IuxuVi9GGMa3JOtPniQY,3954
|
166
|
-
flwr/common/secure_aggregation/crypto/symmetric_encryption.py,sha256=
|
166
|
+
flwr/common/secure_aggregation/crypto/symmetric_encryption.py,sha256=fc8h7ST3mSq4d0u89vAdcxSsfspdsmOpQRba0VBn3zg,2718
|
167
167
|
flwr/common/secure_aggregation/ndarrays_arithmetic.py,sha256=TrggOlizlny3V2KS7-3mpDr33En8UmW9oJcxcS_6oh0,3013
|
168
168
|
flwr/common/secure_aggregation/quantization.py,sha256=ssFZpiRyj9ltIh0Ai3vGkDqWFO4SoqgoD1mDU9XqMEM,2400
|
169
169
|
flwr/common/secure_aggregation/secaggplus_constants.py,sha256=dGYhWOBMMDJcQH4_tQNC8-Efqm-ecEUNN9ANz59UnCk,2182
|
@@ -249,7 +249,7 @@ flwr/proto/transport_pb2_grpc.py,sha256=vLN3EHtx2aEEMCO4f1Upu-l27BPzd3-5pV-u8wPc
|
|
249
249
|
flwr/proto/transport_pb2_grpc.pyi,sha256=AGXf8RiIiW2J5IKMlm_3qT3AzcDa4F3P5IqUjve_esA,766
|
250
250
|
flwr/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
251
251
|
flwr/server/__init__.py,sha256=LQQHiuL2jy7TpNaKastRdGsexlxSt5ZWAQNVqitDnrY,1598
|
252
|
-
flwr/server/app.py,sha256=
|
252
|
+
flwr/server/app.py,sha256=Axmw-BnqK3Tv2ObDDuMrdQTAFOfEWcxehKhzeAXtBNY,30667
|
253
253
|
flwr/server/client_manager.py,sha256=5jCGavVli7XdupvWWo7ru3PdFTlRU8IGvHFSSoUVLRs,6227
|
254
254
|
flwr/server/client_proxy.py,sha256=sv0E9AldBYOvc3pusqFh-GnyreeMfsXQ1cuTtxTq_wY,2399
|
255
255
|
flwr/server/compat/__init__.py,sha256=0IsttWvY15qO98_1GyzVC-vR1e_ZPXOdu2qUlOkYMPE,886
|
@@ -306,7 +306,7 @@ flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py,sha256=iSf0mbBAlig7G6
|
|
306
306
|
flwr/server/superlink/fleet/grpc_bidi/grpc_server.py,sha256=OsS-6GgCIzMMZDVu5Y-OKjynHVUrpdc_5OrtuB-IbU0,5174
|
307
307
|
flwr/server/superlink/fleet/grpc_rere/__init__.py,sha256=ahDJJ1e-lDxBpeBMgPk7YZt2wB38_QltcpOC0gLbpFs,758
|
308
308
|
flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py,sha256=X7-z4oReIH5ghMfmMXML3SSpa2bhRsuIvt2OZs82BUk,8675
|
309
|
-
flwr/server/superlink/fleet/grpc_rere/server_interceptor.py,sha256=
|
309
|
+
flwr/server/superlink/fleet/grpc_rere/server_interceptor.py,sha256=Kr0CY2CObzvbUU1HB1aZa2CDwrD-oZYCt-O4eoZtvxE,6810
|
310
310
|
flwr/server/superlink/fleet/message_handler/__init__.py,sha256=fHsRV0KvJ8HtgSA4_YBsEzuhJLjO8p6xx4aCY2oE1p4,731
|
311
311
|
flwr/server/superlink/fleet/message_handler/message_handler.py,sha256=3Wg20bFo1tZfkzTQUerPVSHXyOuUqNuitEib3W_Dy-U,8691
|
312
312
|
flwr/server/superlink/fleet/rest_rere/__init__.py,sha256=Lzc93nA7tDqoy-zRUaPG316oqFiZX1HUCL5ELaXY_xw,735
|
@@ -338,7 +338,7 @@ flwr/server/workflow/constant.py,sha256=4t2MTvOJUlByJfuD9yZjl8Xn5SwBJQDBi15Dphzt
|
|
338
338
|
flwr/server/workflow/default_workflows.py,sha256=RlD26dXbSksY-23f3ZspnN1YU1DOhDYOchMTEQvqFrM,13900
|
339
339
|
flwr/server/workflow/secure_aggregation/__init__.py,sha256=vGkycLb65CxdaMkKsANxQE6AS4urfZKvwcS3r1Vln_c,880
|
340
340
|
flwr/server/workflow/secure_aggregation/secagg_workflow.py,sha256=b_pKk7gmbahwyj0ftOOLXvu-AMtRHEc82N9PJTEO8dc,5839
|
341
|
-
flwr/server/workflow/secure_aggregation/secaggplus_workflow.py,sha256=
|
341
|
+
flwr/server/workflow/secure_aggregation/secaggplus_workflow.py,sha256=SqAIIOsETxay-SCwGnhOUO3dkxanQaqdZD2Ex7M-wvE,29513
|
342
342
|
flwr/serverapp/__init__.py,sha256=ZujKNXULwhWYQhFnxOOT5Wi9MRq2JCWFhAAj7ouiQ78,884
|
343
343
|
flwr/serverapp/exception.py,sha256=5cuH-2AafvihzosWDdDjuMmHdDqZ1XxHvCqZXNBVklw,1334
|
344
344
|
flwr/serverapp/strategy/__init__.py,sha256=dezK2TKSffjjBVXW18ATRxJLTuQ7I2M1dPuNi5y-_6c,1968
|
@@ -392,6 +392,8 @@ flwr/supercore/object_store/in_memory_object_store.py,sha256=CGY43syxDGrUPcdOzRH
|
|
392
392
|
flwr/supercore/object_store/object_store.py,sha256=J-rI3X7ET-F6dqOyM-UfHKCCQtPJ_EnYW62H_1txts0,5252
|
393
393
|
flwr/supercore/object_store/object_store_factory.py,sha256=QVwE2ywi7vsj2iKfvWWnNw3N_I7Rz91NUt2RpcbJ7iM,1527
|
394
394
|
flwr/supercore/object_store/utils.py,sha256=DcPbrb9PenloAPoQRiKiXX9DrDfpXcSyY0cZpgn4PeQ,1680
|
395
|
+
flwr/supercore/primitives/__init__.py,sha256=Tx8GOjnmMo8Y74RsDGrMpfr-E0Nl8dcUDF784_ge6F8,745
|
396
|
+
flwr/supercore/primitives/asymmetric.py,sha256=g5NnE_4nnHjqOFCtSi3hVy2CdgQ_G9gcfbOtx-Kmkm0,3502
|
395
397
|
flwr/supercore/superexec/__init__.py,sha256=XKX208hZ6a9gZ4KT9kMqfpCtp_8VGxekzKFfHSu2esQ,707
|
396
398
|
flwr/supercore/superexec/plugin/__init__.py,sha256=GNwq8uNdE8RB7ywEFRAvKjLFzgS3YXgz39-HBGsemWw,1035
|
397
399
|
flwr/supercore/superexec/plugin/base_exec_plugin.py,sha256=fL-Ufc9Dp56OhWOzNSJUc7HumbkuSDYqZKwde2opG4g,2074
|
@@ -428,7 +430,7 @@ flwr/supernode/servicer/__init__.py,sha256=lucTzre5WPK7G1YLCfaqg3rbFWdNSb7ZTt-ca
|
|
428
430
|
flwr/supernode/servicer/clientappio/__init__.py,sha256=7Oy62Y_oijqF7Dxi6tpcUQyOpLc_QpIRZ83NvwmB0Yg,813
|
429
431
|
flwr/supernode/servicer/clientappio/clientappio_servicer.py,sha256=nIHRu38EWK-rpNOkcgBRAAKwYQQWFeCwu0lkO7OPZGQ,10239
|
430
432
|
flwr/supernode/start_client_internal.py,sha256=Y9S1-QlO2WP6eo4JvWzIpfaCoh2aoE7bjEYyxNNnlyg,20777
|
431
|
-
flwr_nightly-1.23.0.
|
432
|
-
flwr_nightly-1.23.0.
|
433
|
-
flwr_nightly-1.23.0.
|
434
|
-
flwr_nightly-1.23.0.
|
433
|
+
flwr_nightly-1.23.0.dev20251007.dist-info/METADATA,sha256=BTnTS1rjPnKyvChtLD-tLZYUSZbQdqpXxZOVL-ghaE4,14559
|
434
|
+
flwr_nightly-1.23.0.dev20251007.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
435
|
+
flwr_nightly-1.23.0.dev20251007.dist-info/entry_points.txt,sha256=hxHD2ixb_vJFDOlZV-zB4Ao32_BQlL34ftsDh1GXv14,420
|
436
|
+
flwr_nightly-1.23.0.dev20251007.dist-info/RECORD,,
|
{flwr_nightly-1.23.0.dev20251006.dist-info → flwr_nightly-1.23.0.dev20251007.dist-info}/WHEEL
RENAMED
File without changes
|
File without changes
|