sable-he-research 0.2.0__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.
- sable_he_research-0.2.0/LICENSE +21 -0
- sable_he_research-0.2.0/MANIFEST.in +11 -0
- sable_he_research-0.2.0/PKG-INFO +197 -0
- sable_he_research-0.2.0/README.md +154 -0
- sable_he_research-0.2.0/RELEASE_NOTES_v0.2_FL.md +33 -0
- sable_he_research-0.2.0/RELEASE_NOTES_v0.4_C3_SEEDED.md +20 -0
- sable_he_research-0.2.0/RELEASE_NOTES_v0.6_C4_PROJECTIVE.md +30 -0
- sable_he_research-0.2.0/RELEASE_NOTES_v0.7_C5_ARITHMETIC.md +23 -0
- sable_he_research-0.2.0/RELEASE_NOTES_v0.7_C5_OPERATIONS.md +47 -0
- sable_he_research-0.2.0/RELEASE_NOTES_v0.7_C5_OPS_BASELINES.md +29 -0
- sable_he_research-0.2.0/RELEASE_NOTES_v0.8_C6_RELATIONS.md +16 -0
- sable_he_research-0.2.0/RELEASE_NOTES_v0.9_C7_FINAL.md +22 -0
- sable_he_research-0.2.0/RELEASE_NOTES_v0.9_C7_READY.md +25 -0
- sable_he_research-0.2.0/RELEASE_NOTES_v1.0_C8_READINESS.md +28 -0
- sable_he_research-0.2.0/SECURITY.md +37 -0
- sable_he_research-0.2.0/VERSION +1 -0
- sable_he_research-0.2.0/docs/API_REFERENCE.md +137 -0
- sable_he_research-0.2.0/docs/BUILD_AND_TEST_REPORT_v0.2.0.md +40 -0
- sable_he_research-0.2.0/docs/CLI_REFERENCE.md +107 -0
- sable_he_research-0.2.0/docs/FL_AGGREGATION.md +144 -0
- sable_he_research-0.2.0/docs/FL_AGGREGATION_GUIDE.md +143 -0
- sable_he_research-0.2.0/docs/GITHUB_PYPI_RELEASE_GUIDE.md +95 -0
- sable_he_research-0.2.0/docs/PUBLIC_RELEASE_GUIDE.md +86 -0
- sable_he_research-0.2.0/docs/TENSOR_ADAPTERS.md +54 -0
- sable_he_research-0.2.0/docs/USER_GUIDE.md +249 -0
- sable_he_research-0.2.0/docs/api/API_REFERENCE.md +63 -0
- sable_he_research-0.2.0/docs/api/OPERATIONS.md +23 -0
- sable_he_research-0.2.0/docs/arithmetic_microbench_c4_toy_clean.csv +18 -0
- sable_he_research-0.2.0/docs/arithmetic_microbench_c4_toy_clean.json +223 -0
- sable_he_research-0.2.0/docs/arithmetic_microbench_c4_toy_clean.txt +17 -0
- sable_he_research-0.2.0/docs/attack_candidate_depth1_rough.txt +25 -0
- sable_he_research-0.2.0/docs/attack_estimator_model.md +48 -0
- sable_he_research-0.2.0/docs/attack_estimator_notes.md +46 -0
- sable_he_research-0.2.0/docs/attack_estimator_output.txt +27 -0
- sable_he_research-0.2.0/docs/attack_estimator_prototype_medium_output.txt +38 -0
- sable_he_research-0.2.0/docs/attack_prototype_medium_output.txt +25 -0
- sable_he_research-0.2.0/docs/attack_sweep_output.txt +240 -0
- sable_he_research-0.2.0/docs/baseline_benchmark_plan.md +25 -0
- sable_he_research-0.2.0/docs/baseline_model.csv +5 -0
- sable_he_research-0.2.0/docs/baseline_model_output.txt +4 -0
- sable_he_research-0.2.0/docs/baseline_model_table.csv +5 -0
- sable_he_research-0.2.0/docs/baseline_proxy_output.txt +75 -0
- sable_he_research-0.2.0/docs/bench_boolean_and.csv +11 -0
- sable_he_research-0.2.0/docs/bench_boolean_and.json +224 -0
- sable_he_research-0.2.0/docs/bench_boolean_and_output.txt +40 -0
- sable_he_research-0.2.0/docs/bench_boolean_xor.csv +4 -0
- sable_he_research-0.2.0/docs/bench_boolean_xor.json +98 -0
- sable_he_research-0.2.0/docs/bench_boolean_xor_output.txt +40 -0
- sable_he_research-0.2.0/docs/benchmark_proxy_output.json +61 -0
- sable_he_research-0.2.0/docs/benchmark_proxy_output.txt +61 -0
- sable_he_research-0.2.0/docs/benchmarking_protocol.md +54 -0
- sable_he_research-0.2.0/docs/boolean_benchmark_and_output.txt +40 -0
- sable_he_research-0.2.0/docs/c2_attack_surface_design_smallq.json +346 -0
- sable_he_research-0.2.0/docs/c2_attack_surface_design_smallq.txt +39 -0
- sable_he_research-0.2.0/docs/c2_attack_surface_toy_noisy.json +205 -0
- sable_he_research-0.2.0/docs/c2_attack_surface_toy_noisy.txt +42 -0
- sable_he_research-0.2.0/docs/c2_block_dictionary_correctness.txt +4 -0
- sable_he_research-0.2.0/docs/c2_block_dictionary_design.md +109 -0
- sable_he_research-0.2.0/docs/c2_estimator_design_smallq.txt +37 -0
- sable_he_research-0.2.0/docs/c2_estimator_design_smallq_depth2.txt +37 -0
- sable_he_research-0.2.0/docs/c2_estimator_toy_noisy.txt +37 -0
- sable_he_research-0.2.0/docs/c3_seeded_and_surface_report.md +58 -0
- sable_he_research-0.2.0/docs/c3_seeded_correctness_output.txt +4 -0
- sable_he_research-0.2.0/docs/c3_seeded_dictionary_design.md +27 -0
- sable_he_research-0.2.0/docs/c3_seeded_estimator_design_smallq_depth2.txt +36 -0
- sable_he_research-0.2.0/docs/c3_seeded_estimator_output.txt +73 -0
- sable_he_research-0.2.0/docs/c3_seeded_estimator_toy_noisy.txt +35 -0
- sable_he_research-0.2.0/docs/c4_compaction_correctness_output.json +65 -0
- sable_he_research-0.2.0/docs/c4_coverage_output.json +25 -0
- sable_he_research-0.2.0/docs/c4_projective_design.md +17 -0
- sable_he_research-0.2.0/docs/c4_v123_comparison_output.json +42 -0
- sable_he_research-0.2.0/docs/c5_arithmetic_scope_and_benchmarks.md +48 -0
- sable_he_research-0.2.0/docs/c5_arithmetic_suite_output.csv +101 -0
- sable_he_research-0.2.0/docs/c5_arithmetic_suite_output.json +2455 -0
- sable_he_research-0.2.0/docs/c5_arithmetic_suite_output.txt +811 -0
- sable_he_research-0.2.0/docs/c5_arithmetic_suite_stdout.txt +811 -0
- sable_he_research-0.2.0/docs/c5_arithmetic_validation_report.md +71 -0
- sable_he_research-0.2.0/docs/c5_attack_estimator_output.json +113 -0
- sable_he_research-0.2.0/docs/c5_attack_surface_c4_toy_noisy.json +113 -0
- sable_he_research-0.2.0/docs/c5_attack_surface_c4_toy_noisy.txt +22 -0
- sable_he_research-0.2.0/docs/c5_attack_surface_design_smallq.json +1733 -0
- sable_he_research-0.2.0/docs/c5_attack_surface_design_smallq.txt +26 -0
- sable_he_research-0.2.0/docs/c5_baseline_comparison.csv +21 -0
- sable_he_research-0.2.0/docs/c5_baseline_comparison.json +392 -0
- sable_he_research-0.2.0/docs/c5_baseline_comparison_output.json +392 -0
- sable_he_research-0.2.0/docs/c5_baseline_comparison_stdout.txt +392 -0
- sable_he_research-0.2.0/docs/c5_baseline_test.csv +5 -0
- sable_he_research-0.2.0/docs/c5_baseline_test.json +88 -0
- sable_he_research-0.2.0/docs/c5_final_summary.md +53 -0
- sable_he_research-0.2.0/docs/c5_operations_and_benchmarks_report.md +60 -0
- sable_he_research-0.2.0/docs/c5_surface_output.json +21 -0
- sable_he_research-0.2.0/docs/c5_surface_stdout.txt +21 -0
- sable_he_research-0.2.0/docs/c6_parameter_grid_stdout.txt +1 -0
- sable_he_research-0.2.0/docs/c6_relation_attack_model.md +65 -0
- sable_he_research-0.2.0/docs/c6_relation_estimator_stdout.txt +148 -0
- sable_he_research-0.2.0/docs/c6_validation_report.md +65 -0
- sable_he_research-0.2.0/docs/c7_arithmetic_suite_output.csv +61 -0
- sable_he_research-0.2.0/docs/c7_arithmetic_suite_output.json +1779 -0
- sable_he_research-0.2.0/docs/c7_arithmetic_suite_stdout.txt +671 -0
- sable_he_research-0.2.0/docs/c7_baseline_comparison.csv +21 -0
- sable_he_research-0.2.0/docs/c7_baseline_comparison.json +454 -0
- sable_he_research-0.2.0/docs/c7_baseline_comparison_output.csv +21 -0
- sable_he_research-0.2.0/docs/c7_baseline_comparison_output.json +454 -0
- sable_he_research-0.2.0/docs/c7_baseline_comparison_stdout.txt +454 -0
- sable_he_research-0.2.0/docs/c7_basis_screen_output.json +95 -0
- sable_he_research-0.2.0/docs/c7_basis_screen_stdout.txt +95 -0
- sable_he_research-0.2.0/docs/c7_final_readiness_report.md +56 -0
- sable_he_research-0.2.0/docs/c7_final_summary.md +40 -0
- sable_he_research-0.2.0/docs/c7_readiness_output.json +130 -0
- sable_he_research-0.2.0/docs/c7_readiness_stdout.txt +130 -0
- sable_he_research-0.2.0/docs/c7_relation_estimator_block1.json +303 -0
- sable_he_research-0.2.0/docs/c7_relation_estimator_block3.json +223 -0
- sable_he_research-0.2.0/docs/c7_relation_estimator_coordinate.json +183 -0
- sable_he_research-0.2.0/docs/c7_relation_estimator_screened.json +213 -0
- sable_he_research-0.2.0/docs/c7_relation_resistant_design.md +25 -0
- sable_he_research-0.2.0/docs/c7_relation_screen_output.json +138 -0
- sable_he_research-0.2.0/docs/c7_relation_screen_stderr.txt +29 -0
- sable_he_research-0.2.0/docs/c7_relation_screen_stdout.txt +48 -0
- sable_he_research-0.2.0/docs/c7_screened_stdout.txt +64 -0
- sable_he_research-0.2.0/docs/c8_artifact_manifest.txt +16 -0
- sable_he_research-0.2.0/docs/c8_final_readiness_statement.md +23 -0
- sable_he_research-0.2.0/docs/compliance/c8_certification_strategy.md +46 -0
- sable_he_research-0.2.0/docs/compliance/c8_status_matrix.md +16 -0
- sable_he_research-0.2.0/docs/compliance/c8_why_not_production_or_certified.md +70 -0
- sable_he_research-0.2.0/docs/correctness_output.txt +10 -0
- sable_he_research-0.2.0/docs/cryptanalysis_checklist.md +39 -0
- sable_he_research-0.2.0/docs/depth_sweep_output.txt +32 -0
- sable_he_research-0.2.0/docs/estimator_candidate_depth1_rough.txt +18 -0
- sable_he_research-0.2.0/docs/estimator_output.txt +19 -0
- sable_he_research-0.2.0/docs/existing_methods_comparison_notes.md +21 -0
- sable_he_research-0.2.0/docs/fl/AGGREGATION_METHODS.md +32 -0
- sable_he_research-0.2.0/docs/fl/FEDERATED_LEARNING_GUIDE.md +114 -0
- sable_he_research-0.2.0/docs/fl/GITHUB_AND_PYPI_PUBLISHING.md +77 -0
- sable_he_research-0.2.0/docs/fl/SECURITY_AND_SCOPE.md +19 -0
- sable_he_research-0.2.0/docs/fl/TENSOR_ADAPTERS.md +40 -0
- sable_he_research-0.2.0/docs/generated/attack_sweep.csv +69 -0
- sable_he_research-0.2.0/docs/generated/benchmark_proxy.csv +4 -0
- sable_he_research-0.2.0/docs/generated/c3_qary_surface_sweep.csv +7 -0
- sable_he_research-0.2.0/docs/generated/c5_arithmetic_suite.csv +61 -0
- sable_he_research-0.2.0/docs/generated/c5_baseline_comparison.csv +21 -0
- sable_he_research-0.2.0/docs/generated/c6_parameter_grid.csv +37 -0
- sable_he_research-0.2.0/docs/generated/c6_relation_c2_design_smallq.json +1754 -0
- sable_he_research-0.2.0/docs/generated/c6_relation_c2_design_smallq.txt +47 -0
- sable_he_research-0.2.0/docs/generated/c6_relation_c4_projective_toy_noisy.json +294 -0
- sable_he_research-0.2.0/docs/generated/c6_relation_c4_projective_toy_noisy.txt +45 -0
- sable_he_research-0.2.0/docs/generated/c6_relation_prototype_medium.json +2528 -0
- sable_he_research-0.2.0/docs/generated/c6_relation_prototype_medium.txt +47 -0
- sable_he_research-0.2.0/docs/generated/c6_relation_summary.json +4578 -0
- sable_he_research-0.2.0/docs/generated/c7_screened.json +64 -0
- sable_he_research-0.2.0/docs/generated/c7_screened.txt +64 -0
- sable_he_research-0.2.0/docs/generated/c7_screened_standard_noisy.json +64 -0
- sable_he_research-0.2.0/docs/generated/c7_screened_standard_noisy.txt +64 -0
- sable_he_research-0.2.0/docs/generated/c8_gate_status.json +35 -0
- sable_he_research-0.2.0/docs/generated/c8_gate_status.txt +6 -0
- sable_he_research-0.2.0/docs/generated/c8_gate_status_pretty.json +35 -0
- sable_he_research-0.2.0/docs/generated/c8_pytest_output.txt +3 -0
- sable_he_research-0.2.0/docs/generated/operation_benchmarks_v07.csv +13 -0
- sable_he_research-0.2.0/docs/generated/operation_support_matrix.csv +14 -0
- sable_he_research-0.2.0/docs/generated/pip_package_pytest_collect.txt +34 -0
- sable_he_research-0.2.0/docs/generated/pip_package_validation_summary.txt +4 -0
- sable_he_research-0.2.0/docs/generated/security_sweep.csv +13 -0
- sable_he_research-0.2.0/docs/microbench_toy_clean.csv +0 -0
- sable_he_research-0.2.0/docs/next_step_summary.md +13 -0
- sable_he_research-0.2.0/docs/operation_benchmarks_v07.json +822 -0
- sable_he_research-0.2.0/docs/operation_benchmarks_v07_output.json +197 -0
- sable_he_research-0.2.0/docs/operation_support_matrix.csv +14 -0
- sable_he_research-0.2.0/docs/operation_support_matrix.json +106 -0
- sable_he_research-0.2.0/docs/operation_support_matrix.md +15 -0
- sable_he_research-0.2.0/docs/operation_support_matrix_output.md +15 -0
- sable_he_research-0.2.0/docs/parameter_sweep_output.txt +180 -0
- sable_he_research-0.2.0/docs/performance_comparison_existing_methods.md +30 -0
- sable_he_research-0.2.0/docs/pip/API_GUIDE.md +74 -0
- sable_he_research-0.2.0/docs/pip/BENCHMARKING.md +45 -0
- sable_he_research-0.2.0/docs/pip/BUILD_AND_TEST_REPORT.md +34 -0
- sable_he_research-0.2.0/docs/pip/CLI_GUIDE.md +49 -0
- sable_he_research-0.2.0/docs/pip/DEVELOPMENT.md +44 -0
- sable_he_research-0.2.0/docs/pip/FL_AGGREGATION.md +38 -0
- sable_he_research-0.2.0/docs/pip/INSTALLATION.md +77 -0
- sable_he_research-0.2.0/docs/pip/OPERATIONS.md +43 -0
- sable_he_research-0.2.0/docs/pip/PACKAGE_GUIDE.md +106 -0
- sable_he_research-0.2.0/docs/pip/QUICKSTART.md +72 -0
- sable_he_research-0.2.0/docs/pip/SECURITY_AND_LIMITATIONS.md +42 -0
- sable_he_research-0.2.0/docs/qary_lpn_surface_estimator.md +16 -0
- sable_he_research-0.2.0/docs/references.md +25 -0
- sable_he_research-0.2.0/docs/security/SECURITY_STATUS.md +28 -0
- sable_he_research-0.2.0/docs/security/THREAT_MODEL.md +12 -0
- sable_he_research-0.2.0/docs/security/c8_production_hardening_requirements.md +45 -0
- sable_he_research-0.2.0/docs/security_estimator_prototype_medium.txt +58 -0
- sable_he_research-0.2.0/docs/security_estimator_toy_noisy.txt +59 -0
- sable_he_research-0.2.0/docs/security_feasibility_grid.csv +13 -0
- sable_he_research-0.2.0/docs/security_sweep_output.csv +13 -0
- sable_he_research-0.2.0/docs/standardization/c8_submission_package_checklist.md +41 -0
- sable_he_research-0.2.0/docs/test_output.txt +2 -0
- sable_he_research-0.2.0/docs/test_output_c2.txt +2 -0
- sable_he_research-0.2.0/docs/test_output_c3_seeded.txt +2 -0
- sable_he_research-0.2.0/docs/test_output_c4_projective.txt +2 -0
- sable_he_research-0.2.0/docs/test_output_c5.txt +3 -0
- sable_he_research-0.2.0/docs/test_output_c6.txt +3 -0
- sable_he_research-0.2.0/docs/test_output_c7.txt +3 -0
- sable_he_research-0.2.0/docs/test_output_c7_final.txt +3 -0
- sable_he_research-0.2.0/docs/test_output_v2.txt +2 -0
- sable_he_research-0.2.0/docs/tutorials/ARITHMETIC_TUTORIAL.md +31 -0
- sable_he_research-0.2.0/docs/tutorials/BOOLEAN_TUTORIAL.md +27 -0
- sable_he_research-0.2.0/docs/tutorials/QUICKSTART.md +64 -0
- sable_he_research-0.2.0/docs/user/CLI.md +63 -0
- sable_he_research-0.2.0/docs/user/INSTALLATION.md +44 -0
- sable_he_research-0.2.0/docs/user/QUICKSTART.md +55 -0
- sable_he_research-0.2.0/docs/validation_plan.md +43 -0
- sable_he_research-0.2.0/docs/validation_report.md +85 -0
- sable_he_research-0.2.0/docs/validation_report_c2.md +70 -0
- sable_he_research-0.2.0/docs/validation_report_c4.md +29 -0
- sable_he_research-0.2.0/examples/01_quickstart_mul.py +29 -0
- sable_he_research-0.2.0/examples/02_arithmetic_suite.py +37 -0
- sable_he_research-0.2.0/examples/03_boolean_gates.py +36 -0
- sable_he_research-0.2.0/examples/04_estimators.py +16 -0
- sable_he_research-0.2.0/examples/05_fedavg.py +29 -0
- sable_he_research-0.2.0/examples/05_fedavg_arrays.py +20 -0
- sable_he_research-0.2.0/examples/06_fedavg_model_tree.py +17 -0
- sable_he_research-0.2.0/examples/06_fl_methods.py +25 -0
- sable_he_research-0.2.0/examples/07_plain_robust_aggregation.py +18 -0
- sable_he_research-0.2.0/examples/README.md +12 -0
- sable_he_research-0.2.0/examples/arithmetic_demo.py +25 -0
- sable_he_research-0.2.0/examples/arithmetic_operations.py +35 -0
- sable_he_research-0.2.0/examples/boolean_gates.py +30 -0
- sable_he_research-0.2.0/examples/estimator_demo.py +13 -0
- sable_he_research-0.2.0/examples/fl_fedavg.py +24 -0
- sable_he_research-0.2.0/examples/fl_numpy_keras_weights.py +23 -0
- sable_he_research-0.2.0/examples/parameter_estimate.py +7 -0
- sable_he_research-0.2.0/examples/quickstart.py +30 -0
- sable_he_research-0.2.0/examples/quickstart_multiply.py +18 -0
- sable_he_research-0.2.0/paper/sable_he_latex/README.md +37 -0
- sable_he_research-0.2.0/paper/sable_he_latex/appendices/a_pseudocode.tex +104 -0
- sable_he_research-0.2.0/paper/sable_he_latex/appendices/b_piling_up.tex +36 -0
- sable_he_research-0.2.0/paper/sable_he_latex/appendices/c_reviewer_checklist.tex +42 -0
- sable_he_research-0.2.0/paper/sable_he_latex/appendices/d_attack_screening.tex +75 -0
- sable_he_research-0.2.0/paper/sable_he_latex/appendices/e_c2_block_dictionary.tex +48 -0
- sable_he_research-0.2.0/paper/sable_he_latex/appendices/f_c3_seeded_dictionary.tex +70 -0
- sable_he_research-0.2.0/paper/sable_he_latex/appendices/g_c2_public_surface.tex +57 -0
- sable_he_research-0.2.0/paper/sable_he_latex/appendices/h_c4_projective_basis.tex +109 -0
- sable_he_research-0.2.0/paper/sable_he_latex/appendices/i_c5_arithmetic_operations.tex +42 -0
- sable_he_research-0.2.0/paper/sable_he_latex/appendices/j_c5_attack_surface.tex +32 -0
- sable_he_research-0.2.0/paper/sable_he_latex/appendices/j_c5_baselines_surface.tex +30 -0
- sable_he_research-0.2.0/paper/sable_he_latex/appendices/k_c6_relation_surface.tex +101 -0
- sable_he_research-0.2.0/paper/sable_he_latex/appendices/l_c7_relation_resistant.tex +132 -0
- sable_he_research-0.2.0/paper/sable_he_latex/macros.tex +74 -0
- sable_he_research-0.2.0/paper/sable_he_latex/main.pdf +0 -0
- sable_he_research-0.2.0/paper/sable_he_latex/main.tex +47 -0
- sable_he_research-0.2.0/paper/sable_he_latex/manual_references.tex +158 -0
- sable_he_research-0.2.0/paper/sable_he_latex/references.bib +300 -0
- sable_he_research-0.2.0/paper/sable_he_latex/references_manual.tex +171 -0
- sable_he_research-0.2.0/paper/sable_he_latex/sable-he-c4-projective.pdf +0 -0
- sable_he_research-0.2.0/paper/sable_he_latex/sable-he-c5-arithmetic-baselines.pdf +0 -0
- sable_he_research-0.2.0/paper/sable_he_latex/sable-he-c5-arithmetic.pdf +0 -0
- sable_he_research-0.2.0/paper/sable_he_latex/sable-he-c5-operations.pdf +0 -0
- sable_he_research-0.2.0/paper/sable_he_latex/sable-he-c6-relations.pdf +0 -0
- sable_he_research-0.2.0/paper/sable_he_latex/sable-he-c7-final.pdf +0 -0
- sable_he_research-0.2.0/paper/sable_he_latex/sable-he-c7-ready.pdf +0 -0
- sable_he_research-0.2.0/paper/sable_he_latex/sections/01_introduction.tex +66 -0
- sable_he_research-0.2.0/paper/sable_he_latex/sections/02_preliminaries.tex +84 -0
- sable_he_research-0.2.0/paper/sable_he_latex/sections/03_design_overview.tex +78 -0
- sable_he_research-0.2.0/paper/sable_he_latex/sections/04_core_primitives.tex +151 -0
- sable_he_research-0.2.0/paper/sable_he_latex/sections/05_full_construction.tex +141 -0
- sable_he_research-0.2.0/paper/sable_he_latex/sections/06_correctness.tex +172 -0
- sable_he_research-0.2.0/paper/sable_he_latex/sections/07_security.tex +90 -0
- sable_he_research-0.2.0/paper/sable_he_latex/sections/08_efficiency_parameters.tex +101 -0
- sable_he_research-0.2.0/paper/sable_he_latex/sections/09_validation.tex +80 -0
- sable_he_research-0.2.0/paper/sable_he_latex/sections/10_limitations_future.tex +62 -0
- sable_he_research-0.2.0/pyproject.toml +53 -0
- sable_he_research-0.2.0/setup.cfg +4 -0
- sable_he_research-0.2.0/setup.py +3 -0
- sable_he_research-0.2.0/src/sable/__init__.py +149 -0
- sable_he_research-0.2.0/src/sable/additive_basis.py +333 -0
- sable_he_research-0.2.0/src/sable/arithmetic.py +349 -0
- sable_he_research-0.2.0/src/sable/attack.py +88 -0
- sable_he_research-0.2.0/src/sable/attack_estimator.py +521 -0
- sable_he_research-0.2.0/src/sable/attacks.py +354 -0
- sable_he_research-0.2.0/src/sable/baseline.py +113 -0
- sable_he_research-0.2.0/src/sable/baselines.py +153 -0
- sable_he_research-0.2.0/src/sable/c2_attack_surface.py +339 -0
- sable_he_research-0.2.0/src/sable/c2clpn.py +444 -0
- sable_he_research-0.2.0/src/sable/c4_estimator.py +89 -0
- sable_he_research-0.2.0/src/sable/c5_attack_estimator.py +200 -0
- sable_he_research-0.2.0/src/sable/c5_c4_surface.py +144 -0
- sable_he_research-0.2.0/src/sable/c5_surface.py +132 -0
- sable_he_research-0.2.0/src/sable/c6_relation_estimator.py +392 -0
- sable_he_research-0.2.0/src/sable/c7_basis.py +266 -0
- sable_he_research-0.2.0/src/sable/c7_relation_estimator.py +371 -0
- sable_he_research-0.2.0/src/sable/c7_relation_resistant.py +397 -0
- sable_he_research-0.2.0/src/sable/c7_relation_screen.py +240 -0
- sable_he_research-0.2.0/src/sable/c7_screened_basis.py +563 -0
- sable_he_research-0.2.0/src/sable/cli.py +425 -0
- sable_he_research-0.2.0/src/sable/clpn.py +111 -0
- sable_he_research-0.2.0/src/sable/clpn_c2.py +180 -0
- sable_he_research-0.2.0/src/sable/clpn_c3_seeded.py +119 -0
- sable_he_research-0.2.0/src/sable/clpn_c4_basis.py +265 -0
- sable_he_research-0.2.0/src/sable/clpn_c7_screened.py +92 -0
- sable_he_research-0.2.0/src/sable/clpn_seeded.py +152 -0
- sable_he_research-0.2.0/src/sable/codes.py +96 -0
- sable_he_research-0.2.0/src/sable/crt.py +41 -0
- sable_he_research-0.2.0/src/sable/estimator.py +151 -0
- sable_he_research-0.2.0/src/sable/estimator_c2.py +265 -0
- sable_he_research-0.2.0/src/sable/estimator_seeded.py +151 -0
- sable_he_research-0.2.0/src/sable/field.py +121 -0
- sable_he_research-0.2.0/src/sable/fl.py +799 -0
- sable_he_research-0.2.0/src/sable/gsw.py +90 -0
- sable_he_research-0.2.0/src/sable/operation_profiles.py +124 -0
- sable_he_research-0.2.0/src/sable/operation_support.py +49 -0
- sable_he_research-0.2.0/src/sable/operations.py +260 -0
- sable_he_research-0.2.0/src/sable/params.py +315 -0
- sable_he_research-0.2.0/src/sable/py.typed +0 -0
- sable_he_research-0.2.0/src/sable/qary_lpn_estimator.py +157 -0
- sable_he_research-0.2.0/src/sable/regev.py +38 -0
- sable_he_research-0.2.0/src/sable/sable.py +354 -0
- sable_he_research-0.2.0/src/sable/sable_c2.py +18 -0
- sable_he_research-0.2.0/src/sable/sable_crt.py +40 -0
- sable_he_research-0.2.0/src/sable/security_estimator.py +472 -0
- sable_he_research-0.2.0/src/sable/sparse.py +166 -0
- sable_he_research-0.2.0/src/sable/version.py +4 -0
- sable_he_research-0.2.0/src/sable_he_research.egg-info/PKG-INFO +197 -0
- sable_he_research-0.2.0/src/sable_he_research.egg-info/SOURCES.txt +357 -0
- sable_he_research-0.2.0/src/sable_he_research.egg-info/dependency_links.txt +1 -0
- sable_he_research-0.2.0/src/sable_he_research.egg-info/entry_points.txt +4 -0
- sable_he_research-0.2.0/src/sable_he_research.egg-info/requires.txt +28 -0
- sable_he_research-0.2.0/src/sable_he_research.egg-info/top_level.txt +1 -0
- sable_he_research-0.2.0/tests/test_additive_basis_c4.py +26 -0
- sable_he_research-0.2.0/tests/test_arithmetic_operations.py +63 -0
- sable_he_research-0.2.0/tests/test_arithmetic_ops_c5.py +64 -0
- sable_he_research-0.2.0/tests/test_attack_estimator.py +29 -0
- sable_he_research-0.2.0/tests/test_attacks.py +23 -0
- sable_he_research-0.2.0/tests/test_baseline.py +8 -0
- sable_he_research-0.2.0/tests/test_block_dictionary_c2.py +20 -0
- sable_he_research-0.2.0/tests/test_c2_attack_surface.py +20 -0
- sable_he_research-0.2.0/tests/test_c2_end_to_end.py +27 -0
- sable_he_research-0.2.0/tests/test_c4_compactor.py +45 -0
- sable_he_research-0.2.0/tests/test_c4_estimator.py +18 -0
- sable_he_research-0.2.0/tests/test_c5_attack_estimator.py +32 -0
- sable_he_research-0.2.0/tests/test_c5_c4_surface.py +16 -0
- sable_he_research-0.2.0/tests/test_c5_surface.py +13 -0
- sable_he_research-0.2.0/tests/test_c6_relation_estimator.py +48 -0
- sable_he_research-0.2.0/tests/test_c7_relation_resistant.py +102 -0
- sable_he_research-0.2.0/tests/test_cli_package.py +32 -0
- sable_he_research-0.2.0/tests/test_clpn.py +17 -0
- sable_he_research-0.2.0/tests/test_clpn_c2.py +27 -0
- sable_he_research-0.2.0/tests/test_clpn_seeded.py +46 -0
- sable_he_research-0.2.0/tests/test_codes_c2.py +25 -0
- sable_he_research-0.2.0/tests/test_crt_c2.py +23 -0
- sable_he_research-0.2.0/tests/test_end_to_end.py +33 -0
- sable_he_research-0.2.0/tests/test_estimator_c2.py +18 -0
- sable_he_research-0.2.0/tests/test_estimator_seeded.py +23 -0
- sable_he_research-0.2.0/tests/test_field.py +16 -0
- sable_he_research-0.2.0/tests/test_fl_aggregation.py +57 -0
- sable_he_research-0.2.0/tests/test_gsw.py +13 -0
- sable_he_research-0.2.0/tests/test_operation_profiles.py +24 -0
- sable_he_research-0.2.0/tests/test_operations_arithmetic_c5.py +96 -0
- sable_he_research-0.2.0/tests/test_regev.py +13 -0
- sable_he_research-0.2.0/tests/test_sable_c2.py +26 -0
- sable_he_research-0.2.0/tests/test_security_estimator.py +17 -0
- sable_he_research-0.2.0/tests/test_seeded_block_dictionary_c2.py +45 -0
- sable_he_research-0.2.0/vectors/sable_c7_toy_clean_kat.json +83 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 SABLE-HE research draft contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
include README.md
|
|
2
|
+
include SECURITY.md
|
|
3
|
+
include LICENSE
|
|
4
|
+
include VERSION
|
|
5
|
+
include RELEASE_NOTES*.md
|
|
6
|
+
recursive-include docs *.md *.txt *.json *.csv
|
|
7
|
+
recursive-include examples *.py *.md
|
|
8
|
+
recursive-include vectors *.json
|
|
9
|
+
recursive-include paper *.tex *.bib *.md *.pdf *.sty
|
|
10
|
+
recursive-exclude * __pycache__
|
|
11
|
+
recursive-exclude * *.py[co]
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: sable-he-research
|
|
3
|
+
Version: 0.2.0
|
|
4
|
+
Summary: Federated-learning aggregation and research toolkit for SABLE-HE, a code/LPN-based leveled homomorphic-encryption candidate.
|
|
5
|
+
Author: SABLE-HE research draft contributors
|
|
6
|
+
Maintainer: SABLE-HE research draft contributors
|
|
7
|
+
License-Expression: MIT
|
|
8
|
+
Keywords: homomorphic encryption,post-quantum cryptography,LPN,code-based cryptography,research prototype,federated learning,secure aggregation,FedAvg
|
|
9
|
+
Classifier: Development Status :: 4 - Beta
|
|
10
|
+
Classifier: Intended Audience :: Science/Research
|
|
11
|
+
Classifier: Programming Language :: Python :: 3
|
|
12
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
16
|
+
Classifier: Topic :: Security :: Cryptography
|
|
17
|
+
Classifier: Topic :: Scientific/Engineering :: Mathematics
|
|
18
|
+
Classifier: Typing :: Typed
|
|
19
|
+
Requires-Python: >=3.10
|
|
20
|
+
Description-Content-Type: text/markdown
|
|
21
|
+
License-File: LICENSE
|
|
22
|
+
Provides-Extra: dev
|
|
23
|
+
Requires-Dist: pytest>=7; extra == "dev"
|
|
24
|
+
Requires-Dist: build>=1.2; extra == "dev"
|
|
25
|
+
Requires-Dist: twine>=5; extra == "dev"
|
|
26
|
+
Provides-Extra: numpy
|
|
27
|
+
Requires-Dist: numpy>=1.24; extra == "numpy"
|
|
28
|
+
Provides-Extra: fl
|
|
29
|
+
Requires-Dist: numpy>=1.24; extra == "fl"
|
|
30
|
+
Provides-Extra: tensorflow
|
|
31
|
+
Requires-Dist: tensorflow>=2.15; extra == "tensorflow"
|
|
32
|
+
Provides-Extra: keras
|
|
33
|
+
Requires-Dist: keras>=3.0; extra == "keras"
|
|
34
|
+
Provides-Extra: torch
|
|
35
|
+
Requires-Dist: torch>=2.0; extra == "torch"
|
|
36
|
+
Provides-Extra: all
|
|
37
|
+
Requires-Dist: numpy>=1.24; extra == "all"
|
|
38
|
+
Requires-Dist: tensorflow>=2.15; extra == "all"
|
|
39
|
+
Requires-Dist: keras>=3.0; extra == "all"
|
|
40
|
+
Requires-Dist: torch>=2.0; extra == "all"
|
|
41
|
+
Provides-Extra: docs
|
|
42
|
+
Dynamic: license-file
|
|
43
|
+
|
|
44
|
+
# SABLE-HE
|
|
45
|
+
|
|
46
|
+
SABLE-HE is a Python research-preview package for code/LPN-based homomorphic arithmetic and federated-learning aggregation experiments.
|
|
47
|
+
|
|
48
|
+
The package includes:
|
|
49
|
+
|
|
50
|
+
- C7 relation-resistant compaction APIs for SABLE-HE experiments;
|
|
51
|
+
- arithmetic operations over the native prime-field message space;
|
|
52
|
+
- encrypted FL aggregation helpers for `sum`, `mean`, `weighted_sum`, `weighted_average`, `FedAvg`, and `FedSGD`;
|
|
53
|
+
- plaintext/decryptor-side robust FL aggregation helpers for coordinate min/max, median, trimmed mean, geometric median, norm-clipped mean, Krum, and Multi-Krum;
|
|
54
|
+
- adapters for Python lists, NumPy arrays, TensorFlow tensors, Keras `get_weights()` lists/models, and Torch tensors when those optional libraries are installed;
|
|
55
|
+
- CLI demos, estimators, tests, and documentation.
|
|
56
|
+
|
|
57
|
+
> Security note: this package is a research-preview implementation. It does not ship externally certified security parameters. Use it for research, education, validation, and reproducible experiments unless and until your chosen parameter sets and implementation have been independently reviewed.
|
|
58
|
+
|
|
59
|
+
## Install
|
|
60
|
+
|
|
61
|
+
From a local wheel:
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
python -m pip install dist/sable_he_research-0.2.0-py3-none-any.whl
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
From source:
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
python -m pip install .
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
With NumPy adapters:
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
python -m pip install .[numpy]
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
For local development:
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
python -m pip install -e .[dev,numpy]
|
|
83
|
+
python -m pytest -q
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## Quick encrypted FedAvg example
|
|
87
|
+
|
|
88
|
+
```python
|
|
89
|
+
from sable import PRESETS, keygen_c7
|
|
90
|
+
from sable.fl import EncryptedFLAggregator, PlainFLAggregator
|
|
91
|
+
|
|
92
|
+
params = PRESETS["fl_demo_clean"]
|
|
93
|
+
kp = keygen_c7(params, seed=123, mode="coordinate")
|
|
94
|
+
|
|
95
|
+
agg = EncryptedFLAggregator(kp, scale=1000, seed=9000)
|
|
96
|
+
|
|
97
|
+
client_weights = [
|
|
98
|
+
[0.12, -0.34, 1.20],
|
|
99
|
+
[0.10, -0.30, 1.25],
|
|
100
|
+
[0.20, -0.40, 1.10],
|
|
101
|
+
]
|
|
102
|
+
sample_counts = [80, 20, 100]
|
|
103
|
+
|
|
104
|
+
encrypted_clients = [
|
|
105
|
+
agg.encrypt_model(weights, seed=1000 + i)
|
|
106
|
+
for i, weights in enumerate(client_weights)
|
|
107
|
+
]
|
|
108
|
+
|
|
109
|
+
server_result = agg.fedavg(encrypted_clients, sample_counts)
|
|
110
|
+
final_weights = agg.decrypt_model(server_result)
|
|
111
|
+
|
|
112
|
+
print(final_weights) # [0.158, -0.366, 1.155]
|
|
113
|
+
|
|
114
|
+
reference = PlainFLAggregator().fedavg(client_weights, sample_counts)
|
|
115
|
+
print(reference)
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## NumPy / Keras-style model weights
|
|
119
|
+
|
|
120
|
+
```python
|
|
121
|
+
import numpy as np
|
|
122
|
+
from sable import PRESETS, keygen_c7
|
|
123
|
+
from sable.fl import EncryptedFLAggregator
|
|
124
|
+
|
|
125
|
+
params = PRESETS["fl_demo_clean"]
|
|
126
|
+
kp = keygen_c7(params, seed=123, mode="coordinate")
|
|
127
|
+
agg = EncryptedFLAggregator(kp, scale=1000)
|
|
128
|
+
|
|
129
|
+
client_a = [np.array([1.0, 2.0]), np.array([[3.0], [4.0]])]
|
|
130
|
+
client_b = [np.array([2.0, 4.0]), np.array([[6.0], [8.0]])]
|
|
131
|
+
|
|
132
|
+
enc_a = agg.encrypt_model(client_a, seed=11)
|
|
133
|
+
enc_b = agg.encrypt_model(client_b, seed=22)
|
|
134
|
+
|
|
135
|
+
enc_avg = agg.fedavg([enc_a, enc_b], [1, 3])
|
|
136
|
+
weights = agg.decrypt_model(enc_avg)
|
|
137
|
+
|
|
138
|
+
print(weights[0]) # [1.75, 3.50]
|
|
139
|
+
print(weights[1]) # [[5.25], [7.00]]
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
For a Keras model, pass either `model.get_weights()` or the model itself to `encrypt_model`. To put decrypted weights back into a model, call `model.set_weights(weights)` or use `sable.fl.assign_model_weights(model, weights)`.
|
|
143
|
+
|
|
144
|
+
## CLI
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
sable-he --version
|
|
148
|
+
sable-he fl-capabilities
|
|
149
|
+
sable-he fl-demo --json
|
|
150
|
+
sable-he demo --operation add --x 12 --y 20
|
|
151
|
+
sable-he estimate --preset fl_demo_clean --depth 1
|
|
152
|
+
sable-he readiness
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
## FL method support
|
|
156
|
+
|
|
157
|
+
Encrypted-native methods:
|
|
158
|
+
|
|
159
|
+
- `sum`
|
|
160
|
+
- `mean`
|
|
161
|
+
- `weighted_sum`
|
|
162
|
+
- `weighted_average`
|
|
163
|
+
- `fedavg`
|
|
164
|
+
- `fedsgd`
|
|
165
|
+
|
|
166
|
+
Plain/decryptor-side methods:
|
|
167
|
+
|
|
168
|
+
- `coordinate_min`
|
|
169
|
+
- `coordinate_max`
|
|
170
|
+
- `coordinate_median`
|
|
171
|
+
- `trimmed_mean`
|
|
172
|
+
- `norm_clipped_mean`
|
|
173
|
+
- `geometric_median`
|
|
174
|
+
- `krum`
|
|
175
|
+
- `multi_krum`
|
|
176
|
+
|
|
177
|
+
Min/max/median/trimmed/Krum need comparison, sorting, norms, or pairwise distances. They are therefore available as plaintext tensor operations or after decryptor-side decryption, not as silent encrypted operations.
|
|
178
|
+
|
|
179
|
+
## Documentation
|
|
180
|
+
|
|
181
|
+
Start here:
|
|
182
|
+
|
|
183
|
+
- `docs/FL_AGGREGATION.md` — detailed encrypted FedAvg and FL aggregation guide.
|
|
184
|
+
- `docs/API_REFERENCE.md` — API overview.
|
|
185
|
+
- `docs/CLI_REFERENCE.md` — command-line usage.
|
|
186
|
+
- `docs/GITHUB_PYPI_RELEASE_GUIDE.md` — how to publish to GitHub and PyPI.
|
|
187
|
+
- `SECURITY.md` — security status and reporting policy.
|
|
188
|
+
|
|
189
|
+
## Repository layout
|
|
190
|
+
|
|
191
|
+
```text
|
|
192
|
+
src/sable/ package source
|
|
193
|
+
tests/ pytest suite
|
|
194
|
+
examples/ runnable examples
|
|
195
|
+
docs/ user and release documentation
|
|
196
|
+
benchmarks/ benchmark/proxy scripts
|
|
197
|
+
```
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
# SABLE-HE
|
|
2
|
+
|
|
3
|
+
SABLE-HE is a Python research-preview package for code/LPN-based homomorphic arithmetic and federated-learning aggregation experiments.
|
|
4
|
+
|
|
5
|
+
The package includes:
|
|
6
|
+
|
|
7
|
+
- C7 relation-resistant compaction APIs for SABLE-HE experiments;
|
|
8
|
+
- arithmetic operations over the native prime-field message space;
|
|
9
|
+
- encrypted FL aggregation helpers for `sum`, `mean`, `weighted_sum`, `weighted_average`, `FedAvg`, and `FedSGD`;
|
|
10
|
+
- plaintext/decryptor-side robust FL aggregation helpers for coordinate min/max, median, trimmed mean, geometric median, norm-clipped mean, Krum, and Multi-Krum;
|
|
11
|
+
- adapters for Python lists, NumPy arrays, TensorFlow tensors, Keras `get_weights()` lists/models, and Torch tensors when those optional libraries are installed;
|
|
12
|
+
- CLI demos, estimators, tests, and documentation.
|
|
13
|
+
|
|
14
|
+
> Security note: this package is a research-preview implementation. It does not ship externally certified security parameters. Use it for research, education, validation, and reproducible experiments unless and until your chosen parameter sets and implementation have been independently reviewed.
|
|
15
|
+
|
|
16
|
+
## Install
|
|
17
|
+
|
|
18
|
+
From a local wheel:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
python -m pip install dist/sable_he_research-0.2.0-py3-none-any.whl
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
From source:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
python -m pip install .
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
With NumPy adapters:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
python -m pip install .[numpy]
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
For local development:
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
python -m pip install -e .[dev,numpy]
|
|
40
|
+
python -m pytest -q
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Quick encrypted FedAvg example
|
|
44
|
+
|
|
45
|
+
```python
|
|
46
|
+
from sable import PRESETS, keygen_c7
|
|
47
|
+
from sable.fl import EncryptedFLAggregator, PlainFLAggregator
|
|
48
|
+
|
|
49
|
+
params = PRESETS["fl_demo_clean"]
|
|
50
|
+
kp = keygen_c7(params, seed=123, mode="coordinate")
|
|
51
|
+
|
|
52
|
+
agg = EncryptedFLAggregator(kp, scale=1000, seed=9000)
|
|
53
|
+
|
|
54
|
+
client_weights = [
|
|
55
|
+
[0.12, -0.34, 1.20],
|
|
56
|
+
[0.10, -0.30, 1.25],
|
|
57
|
+
[0.20, -0.40, 1.10],
|
|
58
|
+
]
|
|
59
|
+
sample_counts = [80, 20, 100]
|
|
60
|
+
|
|
61
|
+
encrypted_clients = [
|
|
62
|
+
agg.encrypt_model(weights, seed=1000 + i)
|
|
63
|
+
for i, weights in enumerate(client_weights)
|
|
64
|
+
]
|
|
65
|
+
|
|
66
|
+
server_result = agg.fedavg(encrypted_clients, sample_counts)
|
|
67
|
+
final_weights = agg.decrypt_model(server_result)
|
|
68
|
+
|
|
69
|
+
print(final_weights) # [0.158, -0.366, 1.155]
|
|
70
|
+
|
|
71
|
+
reference = PlainFLAggregator().fedavg(client_weights, sample_counts)
|
|
72
|
+
print(reference)
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## NumPy / Keras-style model weights
|
|
76
|
+
|
|
77
|
+
```python
|
|
78
|
+
import numpy as np
|
|
79
|
+
from sable import PRESETS, keygen_c7
|
|
80
|
+
from sable.fl import EncryptedFLAggregator
|
|
81
|
+
|
|
82
|
+
params = PRESETS["fl_demo_clean"]
|
|
83
|
+
kp = keygen_c7(params, seed=123, mode="coordinate")
|
|
84
|
+
agg = EncryptedFLAggregator(kp, scale=1000)
|
|
85
|
+
|
|
86
|
+
client_a = [np.array([1.0, 2.0]), np.array([[3.0], [4.0]])]
|
|
87
|
+
client_b = [np.array([2.0, 4.0]), np.array([[6.0], [8.0]])]
|
|
88
|
+
|
|
89
|
+
enc_a = agg.encrypt_model(client_a, seed=11)
|
|
90
|
+
enc_b = agg.encrypt_model(client_b, seed=22)
|
|
91
|
+
|
|
92
|
+
enc_avg = agg.fedavg([enc_a, enc_b], [1, 3])
|
|
93
|
+
weights = agg.decrypt_model(enc_avg)
|
|
94
|
+
|
|
95
|
+
print(weights[0]) # [1.75, 3.50]
|
|
96
|
+
print(weights[1]) # [[5.25], [7.00]]
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
For a Keras model, pass either `model.get_weights()` or the model itself to `encrypt_model`. To put decrypted weights back into a model, call `model.set_weights(weights)` or use `sable.fl.assign_model_weights(model, weights)`.
|
|
100
|
+
|
|
101
|
+
## CLI
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
sable-he --version
|
|
105
|
+
sable-he fl-capabilities
|
|
106
|
+
sable-he fl-demo --json
|
|
107
|
+
sable-he demo --operation add --x 12 --y 20
|
|
108
|
+
sable-he estimate --preset fl_demo_clean --depth 1
|
|
109
|
+
sable-he readiness
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
## FL method support
|
|
113
|
+
|
|
114
|
+
Encrypted-native methods:
|
|
115
|
+
|
|
116
|
+
- `sum`
|
|
117
|
+
- `mean`
|
|
118
|
+
- `weighted_sum`
|
|
119
|
+
- `weighted_average`
|
|
120
|
+
- `fedavg`
|
|
121
|
+
- `fedsgd`
|
|
122
|
+
|
|
123
|
+
Plain/decryptor-side methods:
|
|
124
|
+
|
|
125
|
+
- `coordinate_min`
|
|
126
|
+
- `coordinate_max`
|
|
127
|
+
- `coordinate_median`
|
|
128
|
+
- `trimmed_mean`
|
|
129
|
+
- `norm_clipped_mean`
|
|
130
|
+
- `geometric_median`
|
|
131
|
+
- `krum`
|
|
132
|
+
- `multi_krum`
|
|
133
|
+
|
|
134
|
+
Min/max/median/trimmed/Krum need comparison, sorting, norms, or pairwise distances. They are therefore available as plaintext tensor operations or after decryptor-side decryption, not as silent encrypted operations.
|
|
135
|
+
|
|
136
|
+
## Documentation
|
|
137
|
+
|
|
138
|
+
Start here:
|
|
139
|
+
|
|
140
|
+
- `docs/FL_AGGREGATION.md` — detailed encrypted FedAvg and FL aggregation guide.
|
|
141
|
+
- `docs/API_REFERENCE.md` — API overview.
|
|
142
|
+
- `docs/CLI_REFERENCE.md` — command-line usage.
|
|
143
|
+
- `docs/GITHUB_PYPI_RELEASE_GUIDE.md` — how to publish to GitHub and PyPI.
|
|
144
|
+
- `SECURITY.md` — security status and reporting policy.
|
|
145
|
+
|
|
146
|
+
## Repository layout
|
|
147
|
+
|
|
148
|
+
```text
|
|
149
|
+
src/sable/ package source
|
|
150
|
+
tests/ pytest suite
|
|
151
|
+
examples/ runnable examples
|
|
152
|
+
docs/ user and release documentation
|
|
153
|
+
benchmarks/ benchmark/proxy scripts
|
|
154
|
+
```
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# SABLE-HE v0.2.0 — Federated-learning aggregation API
|
|
2
|
+
|
|
3
|
+
## Added
|
|
4
|
+
|
|
5
|
+
- `sable.fl` public FL aggregation module.
|
|
6
|
+
- Encrypted-native FL methods:
|
|
7
|
+
- sum
|
|
8
|
+
- mean
|
|
9
|
+
- weighted sum
|
|
10
|
+
- weighted average
|
|
11
|
+
- FedAvg
|
|
12
|
+
- FedSGD
|
|
13
|
+
- Plain/decryptor-side robust FL methods:
|
|
14
|
+
- coordinate min
|
|
15
|
+
- coordinate max
|
|
16
|
+
- coordinate median
|
|
17
|
+
- trimmed mean
|
|
18
|
+
- norm-clipped mean
|
|
19
|
+
- geometric median
|
|
20
|
+
- Krum
|
|
21
|
+
- Multi-Krum
|
|
22
|
+
- Python list, NumPy, TensorFlow, Keras, and Torch tensor/model adapters.
|
|
23
|
+
- CLI commands:
|
|
24
|
+
- `sable-he fl-demo`
|
|
25
|
+
- `sable-he fl-capabilities`
|
|
26
|
+
- `sable-he fl-methods`
|
|
27
|
+
- `fl_demo_clean` preset for reproducible fixed-point FL examples.
|
|
28
|
+
- Detailed FL and GitHub/PyPI release documentation.
|
|
29
|
+
|
|
30
|
+
## Notes
|
|
31
|
+
|
|
32
|
+
- Encrypted min/max/median/trimmed/Krum are not advertised as native encrypted operations because they require comparison/sorting/distance circuits.
|
|
33
|
+
- The package remains a research-preview implementation without externally certified security parameters.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# SABLE-HE validation v0.4 - C3 seeded block-dictionary compaction
|
|
2
|
+
|
|
3
|
+
This release builds on the C2 block-dictionary compactor and adds a seeded
|
|
4
|
+
CLPN storage model. The evaluator still receives the same public LPN sample
|
|
5
|
+
surface, but the random CLPN matrices are derived from public seeds rather than
|
|
6
|
+
stored densely. The public `b` vectors remain explicit.
|
|
7
|
+
|
|
8
|
+
Main additions:
|
|
9
|
+
|
|
10
|
+
- `sable.clpn_seeded`: seeded linearly homomorphic q-ary LPN ciphertexts.
|
|
11
|
+
- `sable.clpn_c3_seeded`: seeded block-dictionary C2/C3 compaction keys.
|
|
12
|
+
- `sable.qary_lpn_estimator`: dedicated sparse/q-ary-LPN public-sample screen.
|
|
13
|
+
- `sable.estimator_seeded`: size, correctness, and attack-surface estimator
|
|
14
|
+
for the seeded C3 compactor.
|
|
15
|
+
- End-to-end tests for seeded compaction.
|
|
16
|
+
- Paper Appendix F describing the C3 seeded storage model.
|
|
17
|
+
|
|
18
|
+
Security status: research validation only. Seeded storage reduces materialized
|
|
19
|
+
key size but does not reduce the number of public LPN samples available to an
|
|
20
|
+
attacker.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# SABLE-HE v0.6: C4 projective additive-basis compaction
|
|
2
|
+
|
|
3
|
+
This release adds C4 projective additive-basis compaction.
|
|
4
|
+
|
|
5
|
+
## New files
|
|
6
|
+
|
|
7
|
+
- `src/sable/additive_basis.py`
|
|
8
|
+
- `src/sable/clpn_c4_basis.py`
|
|
9
|
+
- `src/sable/c4_estimator.py`
|
|
10
|
+
- `tests/test_additive_basis_c4.py`
|
|
11
|
+
- `tests/test_c4_compactor.py`
|
|
12
|
+
- `tests/test_c4_estimator.py`
|
|
13
|
+
- `experiments/run_c4_coverage.py`
|
|
14
|
+
- `experiments/run_c4_compaction_correctness.py`
|
|
15
|
+
- `experiments/run_c4_v123_comparison.py`
|
|
16
|
+
- `docs/c4_projective_design.md`
|
|
17
|
+
- `docs/validation_report_c4.md`
|
|
18
|
+
- `paper/sable_he_latex/appendices/h_c4_projective_basis.tex`
|
|
19
|
+
|
|
20
|
+
## Validation
|
|
21
|
+
|
|
22
|
+
`59 passed` under pytest.
|
|
23
|
+
|
|
24
|
+
## Main result
|
|
25
|
+
|
|
26
|
+
For a block of width `b` over `F_q`, C4 uses `(q^b - 1)/(q - 1)` projective entries instead of the C2/C3 full dictionary size `q^b - 1`, while preserving one CLPN compaction term per active block.
|
|
27
|
+
|
|
28
|
+
## Status
|
|
29
|
+
|
|
30
|
+
Research validation prototype only. Parameters are not certified secure.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# SABLE-HE v0.7 C5 arithmetic validation and C4 surface screen
|
|
2
|
+
|
|
3
|
+
## Added
|
|
4
|
+
|
|
5
|
+
- High-level arithmetic API: `src/sable/operations.py`.
|
|
6
|
+
- C5 C4-projective public-surface estimator: `src/sable/c5_attack_estimator.py`.
|
|
7
|
+
- Operation support matrix: `src/sable/operation_support.py`.
|
|
8
|
+
- Arithmetic correctness tests for addition, subtraction, negation, scalar/plain operations, multiplication, square, powers, nonzero inverse/division, polynomial evaluation, and Boolean gates.
|
|
9
|
+
- Microbenchmark script: `benchmarks/benchmark_arithmetic.py`.
|
|
10
|
+
- Operation comparison outputs and C5 attack-surface outputs under `docs/`.
|
|
11
|
+
- Paper appendices for C5 arithmetic and public-surface screening.
|
|
12
|
+
|
|
13
|
+
## Important result
|
|
14
|
+
|
|
15
|
+
We are not working only on multiplication. Multiplication is the main nonlinear primitive, but the expanded GSW representation supports the whole bounded-depth arithmetic circuit model over `F_q`.
|
|
16
|
+
|
|
17
|
+
## Main limitation
|
|
18
|
+
|
|
19
|
+
Division and comparisons are not native. Division is only represented as nonzero finite-field inversion by exponentiation, which is expensive and unsuitable as a core primitive.
|
|
20
|
+
|
|
21
|
+
## Validation
|
|
22
|
+
|
|
23
|
+
The v0.7 package passes the expanded test suite and includes pure-Python toy microbenchmarks. External optimized libraries were not installed, so only support/proxy comparisons are included for OpenFHE, SEAL, and TFHE-rs.
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# SABLE-HE v0.7: C5 operation coverage, public-surface diagnostics, and baseline proxies
|
|
2
|
+
|
|
3
|
+
This release extends the C4 projective-compaction validation package in three ways.
|
|
4
|
+
|
|
5
|
+
## 1. Arithmetic operation coverage
|
|
6
|
+
|
|
7
|
+
SABLE's native plaintext domain is the prime field F_q. The expanded GSW-style representation now exposes a public arithmetic layer for:
|
|
8
|
+
|
|
9
|
+
- public constants: gamma * I_N;
|
|
10
|
+
- zero and one;
|
|
11
|
+
- addition and subtraction;
|
|
12
|
+
- negation;
|
|
13
|
+
- public scalar multiplication;
|
|
14
|
+
- public constant addition/subtraction;
|
|
15
|
+
- encrypted multiplication;
|
|
16
|
+
- square and public powers;
|
|
17
|
+
- affine combinations and public-coefficient dot products;
|
|
18
|
+
- low-degree polynomial evaluation;
|
|
19
|
+
- Boolean gates on bits embedded as 0/1 in F_q: AND, OR, XOR, NOT, NAND, NOR, XNOR, implication.
|
|
20
|
+
|
|
21
|
+
Nonzero field inversion and division can be expressed by Fermat exponentiation, but this is expensive and undefined at zero. Integer comparison/order is not native.
|
|
22
|
+
|
|
23
|
+
## 2. C5 C4 public-surface diagnostics
|
|
24
|
+
|
|
25
|
+
The package adds C5 diagnostics for C4 projective compaction. C4 reduces public entries relative to C2/C3 full dictionaries, but projective blocks of width at least two have many low-weight linear relations. The C5 screen quantifies public CLPN rows, dense public field elements, projective relation surfaces, and rough compaction noise bounds.
|
|
26
|
+
|
|
27
|
+
These screens are red-flag diagnostics only. They do not certify sparse-LPN or q-ary-LPN security.
|
|
28
|
+
|
|
29
|
+
## 3. Baseline comparison proxies
|
|
30
|
+
|
|
31
|
+
The package now separates:
|
|
32
|
+
|
|
33
|
+
- measured pure-Python SABLE prototype timings on toy parameters;
|
|
34
|
+
- symbolic operation-count proxies for TFHE/FHEW, BFV/BGV, and CKKS-style baselines;
|
|
35
|
+
- operation support matrix describing which family best matches each workload.
|
|
36
|
+
|
|
37
|
+
The current validation environment does not run optimized OpenFHE, SEAL, or TFHE-rs wall-clock benchmarks. Do not interpret the pure-Python SABLE timings as speed comparisons against optimized libraries.
|
|
38
|
+
|
|
39
|
+
## Validation
|
|
40
|
+
|
|
41
|
+
The v0.7 test suite passes:
|
|
42
|
+
|
|
43
|
+
```text
|
|
44
|
+
83 passed
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Generated validation outputs are in `docs/` and `docs/generated/`.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# SABLE-HE v0.7 C5 arithmetic and baseline package
|
|
2
|
+
|
|
3
|
+
This release adds the C5 validation layer.
|
|
4
|
+
|
|
5
|
+
## Added
|
|
6
|
+
|
|
7
|
+
- Full public arithmetic interface for expanded SABLE ciphertexts:
|
|
8
|
+
addition, subtraction, negation, public scalar multiplication, public
|
|
9
|
+
constants, multiplication, squaring, powers, affine combinations, dot
|
|
10
|
+
products, polynomial evaluation, products, quadratic forms, and Boolean
|
|
11
|
+
gates encoded over F_q.
|
|
12
|
+
- End-to-end C4 compaction tests for the arithmetic operation suite.
|
|
13
|
+
- C5 operation-count/proxy comparison against TFHE/FHEW-style Boolean
|
|
14
|
+
evaluation, BFV/BGV exact arithmetic, and CKKS approximate arithmetic.
|
|
15
|
+
- C5 public-surface diagnostic for C4 projective compaction.
|
|
16
|
+
|
|
17
|
+
## Main conclusion
|
|
18
|
+
|
|
19
|
+
SABLE is a low-degree arithmetic HE candidate, not merely a multiplication
|
|
20
|
+
demo. Multiplication is the nonlinear bottleneck. Once public constants and
|
|
21
|
+
linear operations are included, the construction evaluates arbitrary bounded
|
|
22
|
+
low-degree polynomial circuits over F_q.
|
|
23
|
+
|
|
24
|
+
## Important caveat
|
|
25
|
+
|
|
26
|
+
The Python timings are validation-prototype timings only. They should not be
|
|
27
|
+
compared directly with optimized OpenFHE, SEAL, Concrete, TFHE-rs, or similar
|
|
28
|
+
libraries. The included comparison table is a workload/proxy table for fair
|
|
29
|
+
future benchmarking.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Release notes: v0.8 C6 relation-surface estimator
|
|
2
|
+
|
|
3
|
+
C6 adds a dedicated estimator for C4 projective public relations.
|
|
4
|
+
|
|
5
|
+
Highlights:
|
|
6
|
+
|
|
7
|
+
- counts projective points, projective lines, and weight-3 relation triples;
|
|
8
|
+
- separates raw relation rows from rank-capped relation rows;
|
|
9
|
+
- screens row-difference CLPN samples and relation-derived known-zero samples;
|
|
10
|
+
- runs a compact parameter grid over block size and CLPN noise;
|
|
11
|
+
- updates the manuscript with Appendix K.
|
|
12
|
+
|
|
13
|
+
Main result: the full C4 projective basis should not be used as the main
|
|
14
|
+
security candidate for block width at least two without a new relation-resistant
|
|
15
|
+
argument. It is algebraically useful but exposes abundant low-weight public
|
|
16
|
+
relations.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# SABLE-HE v0.9 C7 Final Validation
|
|
2
|
+
|
|
3
|
+
This release is the final research-prototype checkpoint in the current sequence.
|
|
4
|
+
|
|
5
|
+
## Main change
|
|
6
|
+
|
|
7
|
+
C7 replaces full projective C4 compaction as the main security candidate. C6 showed that full projective blocks contain many weight-3 public relations. C7 therefore makes coordinate relation-resistant compaction the default and keeps screened-random additive masks as an experimental optimization.
|
|
8
|
+
|
|
9
|
+
## What is validated
|
|
10
|
+
|
|
11
|
+
- All prior C2/C3/C4/C5/C6 tests remain in the package.
|
|
12
|
+
- C7 coordinate compaction is implemented in `src/sable/c7_relation_resistant.py`.
|
|
13
|
+
- C7 arithmetic validation covers addition, subtraction, negation, scalar multiplication, constants, multiplication, squaring, affine combinations, dot products, polynomial evaluation, balanced products, quadratic forms, and Boolean gates encoded over `F_q`.
|
|
14
|
+
- Baseline comparison remains an operation-count/proxy comparison, not an optimized-library wall-clock claim.
|
|
15
|
+
|
|
16
|
+
## Test result
|
|
17
|
+
|
|
18
|
+
`95 passed`
|
|
19
|
+
|
|
20
|
+
## Final status
|
|
21
|
+
|
|
22
|
+
Ready to pause as a research prototype and manuscript package. Not ready for production, standards claims, or certified concrete security.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Release notes: v0.9 C7 READY
|
|
2
|
+
|
|
3
|
+
This release makes C7 the conservative default research candidate.
|
|
4
|
+
|
|
5
|
+
## Added
|
|
6
|
+
|
|
7
|
+
- `src/sable/c7_relation_resistant.py`
|
|
8
|
+
- `experiments/run_c7_arithmetic_suite.py`
|
|
9
|
+
- `experiments/run_c7_basis_screen.py`
|
|
10
|
+
- `experiments/run_c7_compare_baselines.py`
|
|
11
|
+
- `experiments/run_c7_readiness.py`
|
|
12
|
+
- `tests/test_c7_relation_resistant.py`
|
|
13
|
+
- `docs/c7_relation_resistant_design.md`
|
|
14
|
+
- `docs/c7_final_readiness_report.md`
|
|
15
|
+
- C7 appendix in the LaTeX manuscript
|
|
16
|
+
|
|
17
|
+
## Validation
|
|
18
|
+
|
|
19
|
+
- Full pytest suite: 95 passed.
|
|
20
|
+
- C7 arithmetic suite: 20 operation families, 60 toy-clean trials, 0 failures.
|
|
21
|
+
- Baseline comparison: operation-count/proxy comparison against TFHE/FHEW, BFV/BGV, and CKKS-style families.
|
|
22
|
+
|
|
23
|
+
## Research status
|
|
24
|
+
|
|
25
|
+
Ready as a research prototype and manuscript package. Not ready for production deployment or certified security claims.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Release notes: v1.0-C8 readiness package
|
|
2
|
+
|
|
3
|
+
C8 does not claim production or certification status. It packages SABLE-HE-C7
|
|
4
|
+
for the next professional review stage: independent cryptanalysis,
|
|
5
|
+
implementation hardening, parameter validation, and standardization preparation.
|
|
6
|
+
|
|
7
|
+
Added:
|
|
8
|
+
|
|
9
|
+
- `SECURITY.md` vulnerability-reporting and safe-use notice.
|
|
10
|
+
- C8 production/certification/standardization status matrix.
|
|
11
|
+
- C8 certification strategy.
|
|
12
|
+
- C8 production-hardening requirements.
|
|
13
|
+
- C8 standardization-submission checklist.
|
|
14
|
+
- C8 readiness-gate tool.
|
|
15
|
+
- Toy deterministic KAT-vector generator and generated vector.
|
|
16
|
+
- CI workflow template.
|
|
17
|
+
|
|
18
|
+
Validation target:
|
|
19
|
+
|
|
20
|
+
- research artifact: green;
|
|
21
|
+
- internal validation: green;
|
|
22
|
+
- audit package: green;
|
|
23
|
+
- production cryptography: red;
|
|
24
|
+
- certified parameters: red;
|
|
25
|
+
- standardization-ready: amber.
|
|
26
|
+
|
|
27
|
+
This strict status is intentional. It prevents unsupported security claims while
|
|
28
|
+
making the project ready for the next evidence-gathering phase.
|