secure-fl 2026.3.17.dev1__tar.gz → 2026.3.17.dev2__tar.gz

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.
Files changed (61) hide show
  1. {secure_fl-2026.3.17.dev1 → secure_fl-2026.3.17.dev2}/.gitignore +1 -1
  2. {secure_fl-2026.3.17.dev1 → secure_fl-2026.3.17.dev2}/PKG-INFO +1 -1
  3. secure_fl-2026.3.17.dev2/src/secure_fl/.build_number +1 -0
  4. secure_fl-2026.3.17.dev2/src/secure_fl/proofs/server/aggregation.circom +55 -0
  5. secure_fl-2026.3.17.dev1/src/secure_fl/.build_number +0 -1
  6. {secure_fl-2026.3.17.dev1 → secure_fl-2026.3.17.dev2}/LICENSE +0 -0
  7. {secure_fl-2026.3.17.dev1 → secure_fl-2026.3.17.dev2}/README.md +0 -0
  8. {secure_fl-2026.3.17.dev1 → secure_fl-2026.3.17.dev2}/docs/research paper/README.md +0 -0
  9. {secure_fl-2026.3.17.dev1 → secure_fl-2026.3.17.dev2}/experiments/README.md +0 -0
  10. {secure_fl-2026.3.17.dev1 → secure_fl-2026.3.17.dev2}/pyproject.toml +0 -0
  11. {secure_fl-2026.3.17.dev1 → secure_fl-2026.3.17.dev2}/src/secure_fl/__init__.py +0 -0
  12. {secure_fl-2026.3.17.dev1 → secure_fl-2026.3.17.dev2}/src/secure_fl/__main__.py +0 -0
  13. {secure_fl-2026.3.17.dev1 → secure_fl-2026.3.17.dev2}/src/secure_fl/benchmarks/__init__.py +0 -0
  14. {secure_fl-2026.3.17.dev1 → secure_fl-2026.3.17.dev2}/src/secure_fl/benchmarks/defaults.py +0 -0
  15. {secure_fl-2026.3.17.dev1 → secure_fl-2026.3.17.dev2}/src/secure_fl/benchmarks/execution.py +0 -0
  16. {secure_fl-2026.3.17.dev1 → secure_fl-2026.3.17.dev2}/src/secure_fl/benchmarks/pipeline.py +0 -0
  17. {secure_fl-2026.3.17.dev1 → secure_fl-2026.3.17.dev2}/src/secure_fl/benchmarks/reporting.py +0 -0
  18. {secure_fl-2026.3.17.dev1 → secure_fl-2026.3.17.dev2}/src/secure_fl/cli/__init__.py +0 -0
  19. {secure_fl-2026.3.17.dev1 → secure_fl-2026.3.17.dev2}/src/secure_fl/cli/__main__.py +0 -0
  20. {secure_fl-2026.3.17.dev1 → secure_fl-2026.3.17.dev2}/src/secure_fl/cli/handlers.py +0 -0
  21. {secure_fl-2026.3.17.dev1 → secure_fl-2026.3.17.dev2}/src/secure_fl/cli/main.py +0 -0
  22. {secure_fl-2026.3.17.dev1 → secure_fl-2026.3.17.dev2}/src/secure_fl/cli/setup.py +0 -0
  23. {secure_fl-2026.3.17.dev1 → secure_fl-2026.3.17.dev2}/src/secure_fl/cli/zkp_check.py +0 -0
  24. {secure_fl-2026.3.17.dev1 → secure_fl-2026.3.17.dev2}/src/secure_fl/core/__init__.py +0 -0
  25. {secure_fl-2026.3.17.dev1 → secure_fl-2026.3.17.dev2}/src/secure_fl/core/_version.py +0 -0
  26. {secure_fl-2026.3.17.dev1 → secure_fl-2026.3.17.dev2}/src/secure_fl/core/config.py +0 -0
  27. {secure_fl-2026.3.17.dev1 → secure_fl-2026.3.17.dev2}/src/secure_fl/core/exceptions.py +0 -0
  28. {secure_fl-2026.3.17.dev1 → secure_fl-2026.3.17.dev2}/src/secure_fl/core/types.py +0 -0
  29. {secure_fl-2026.3.17.dev1 → secure_fl-2026.3.17.dev2}/src/secure_fl/data/__init__.py +0 -0
  30. {secure_fl-2026.3.17.dev1 → secure_fl-2026.3.17.dev2}/src/secure_fl/data/benchmark_data.py +0 -0
  31. {secure_fl-2026.3.17.dev1 → secure_fl-2026.3.17.dev2}/src/secure_fl/federation/__init__.py +0 -0
  32. {secure_fl-2026.3.17.dev1 → secure_fl-2026.3.17.dev2}/src/secure_fl/federation/aggregation.py +0 -0
  33. {secure_fl-2026.3.17.dev1 → secure_fl-2026.3.17.dev2}/src/secure_fl/federation/client.py +0 -0
  34. {secure_fl-2026.3.17.dev1 → secure_fl-2026.3.17.dev2}/src/secure_fl/federation/client_runtime.py +0 -0
  35. {secure_fl-2026.3.17.dev1 → secure_fl-2026.3.17.dev2}/src/secure_fl/federation/client_utils.py +0 -0
  36. {secure_fl-2026.3.17.dev1 → secure_fl-2026.3.17.dev2}/src/secure_fl/federation/server.py +0 -0
  37. {secure_fl-2026.3.17.dev1 → secure_fl-2026.3.17.dev2}/src/secure_fl/federation/server_runtime.py +0 -0
  38. {secure_fl-2026.3.17.dev1 → secure_fl-2026.3.17.dev2}/src/secure_fl/federation/stability_monitor.py +0 -0
  39. {secure_fl-2026.3.17.dev1 → secure_fl-2026.3.17.dev2}/src/secure_fl/models/__init__.py +0 -0
  40. {secure_fl-2026.3.17.dev1 → secure_fl-2026.3.17.dev2}/src/secure_fl/models/factory.py +0 -0
  41. {secure_fl-2026.3.17.dev1 → secure_fl-2026.3.17.dev2}/src/secure_fl/models/mnist_cnn.py +0 -0
  42. {secure_fl-2026.3.17.dev1 → secure_fl-2026.3.17.dev2}/src/secure_fl/models/simple.py +0 -0
  43. {secure_fl-2026.3.17.dev1 → secure_fl-2026.3.17.dev2}/src/secure_fl/proofs/__init__.py +0 -0
  44. {secure_fl-2026.3.17.dev1 → secure_fl-2026.3.17.dev2}/src/secure_fl/proofs/client_circuits/__init__.py +0 -0
  45. {secure_fl-2026.3.17.dev1 → secure_fl-2026.3.17.dev2}/src/secure_fl/proofs/client_circuits/delta_bound.py +0 -0
  46. {secure_fl-2026.3.17.dev1 → secure_fl-2026.3.17.dev2}/src/secure_fl/proofs/client_circuits/sgd_full_trace.cairo +0 -0
  47. {secure_fl-2026.3.17.dev1 → secure_fl-2026.3.17.dev2}/src/secure_fl/proofs/server/pot12_final.ptau +0 -0
  48. {secure_fl-2026.3.17.dev1 → secure_fl-2026.3.17.dev2}/src/secure_fl/proofs/server/test.txt +0 -0
  49. {secure_fl-2026.3.17.dev1 → secure_fl-2026.3.17.dev2}/src/secure_fl/py.typed +0 -0
  50. {secure_fl-2026.3.17.dev1 → secure_fl-2026.3.17.dev2}/src/secure_fl/utils/__init__.py +0 -0
  51. {secure_fl-2026.3.17.dev1 → secure_fl-2026.3.17.dev2}/src/secure_fl/utils/helpers.py +0 -0
  52. {secure_fl-2026.3.17.dev1 → secure_fl-2026.3.17.dev2}/src/secure_fl/utils/logging_config.py +0 -0
  53. {secure_fl-2026.3.17.dev1 → secure_fl-2026.3.17.dev2}/src/secure_fl/zkp/__init__.py +0 -0
  54. {secure_fl-2026.3.17.dev1 → secure_fl-2026.3.17.dev2}/src/secure_fl/zkp/base.py +0 -0
  55. {secure_fl-2026.3.17.dev1 → secure_fl-2026.3.17.dev2}/src/secure_fl/zkp/client_proof_manager.py +0 -0
  56. {secure_fl-2026.3.17.dev1 → secure_fl-2026.3.17.dev2}/src/secure_fl/zkp/proof_manager.py +0 -0
  57. {secure_fl-2026.3.17.dev1 → secure_fl-2026.3.17.dev2}/src/secure_fl/zkp/proof_schema.py +0 -0
  58. {secure_fl-2026.3.17.dev1 → secure_fl-2026.3.17.dev2}/src/secure_fl/zkp/quantization.py +0 -0
  59. {secure_fl-2026.3.17.dev1 → secure_fl-2026.3.17.dev2}/src/secure_fl/zkp/server_proof_manager.py +0 -0
  60. {secure_fl-2026.3.17.dev1 → secure_fl-2026.3.17.dev2}/src/secure_fl/zkp/server_setup.py +0 -0
  61. {secure_fl-2026.3.17.dev1 → secure_fl-2026.3.17.dev2}/src/secure_fl/zkp/server_snark_io.py +0 -0
@@ -116,7 +116,7 @@ datasets/
116
116
  # ZKP artifacts
117
117
  *.r1cs
118
118
  *.wtns
119
- *.circom
119
+ # *.circom
120
120
  output/
121
121
  witness/
122
122
  circuit.wasm
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: secure-fl
3
- Version: 2026.3.17.dev1
3
+ Version: 2026.3.17.dev2
4
4
  Summary: Dual-Verifiable Framework for Federated Learning using Zero-Knowledge Proofs
5
5
  Project-URL: Homepage, https://github.com/krishantt/secure-fl
6
6
  Project-URL: Bug Reports, https://github.com/krishantt/secure-fl/issues
@@ -0,0 +1 @@
1
+ 2026.03.17:2
@@ -0,0 +1,55 @@
1
+ pragma circom 2.0.0;
2
+ // Federated Learning Aggregation Circuit
3
+
4
+ template FedJSCMAggregation(n_clients, param_size) {
5
+ signal input client_deltas[n_clients][param_size];
6
+ signal input old_momentum[param_size];
7
+ signal input client_weights[n_clients];
8
+ signal input active_clients[n_clients];
9
+ signal input momentum_coeff;
10
+ signal input old_params[param_size];
11
+
12
+ signal output new_params[param_size];
13
+ signal output new_momentum[param_size];
14
+
15
+ // Intermediate signals for weighted sum
16
+ signal weighted_sum[param_size];
17
+ signal partial_sums[n_clients][param_size];
18
+
19
+ var SCALE = 1000000;
20
+
21
+ // Enforce active_clients as binary and zero-contribution for inactive slots.
22
+ for (var j = 0; j < n_clients; j++) {
23
+ active_clients[j] * (active_clients[j] - 1) === 0;
24
+ client_weights[j] * (1 - active_clients[j]) === 0;
25
+ for (var i = 0; i < param_size; i++) {
26
+ client_deltas[j][i] * (1 - active_clients[j]) === 0;
27
+ }
28
+ }
29
+
30
+ // Calculate weighted deltas
31
+ for (var i = 0; i < param_size; i++) {
32
+ for (var j = 0; j < n_clients; j++) {
33
+ partial_sums[j][i] <== client_weights[j] * client_deltas[j][i] / SCALE;
34
+ }
35
+ }
36
+
37
+ // Sum the weighted deltas
38
+ for (var i = 0; i < param_size; i++) {
39
+ var sum = 0;
40
+ for (var j = 0; j < n_clients; j++) {
41
+ sum += partial_sums[j][i];
42
+ }
43
+ weighted_sum[i] <== sum;
44
+ }
45
+
46
+ // Compute momentum and new params
47
+ signal momentum_term[param_size];
48
+ for (var i = 0; i < param_size; i++) {
49
+ momentum_term[i] <== momentum_coeff * old_momentum[i] / SCALE;
50
+ new_momentum[i] <== momentum_term[i] + weighted_sum[i];
51
+ new_params[i] <== old_params[i] + new_momentum[i];
52
+ }
53
+ }
54
+
55
+ component main = FedJSCMAggregation(8, 50);
@@ -1 +0,0 @@
1
- 2026.03.17:1