- Breaking change parameter names
l
totraces
for many functions. - Breaking remove unnecessary parameters from initializers (e.g. trace length where it can be inferred).
- Fix misc. SASCA bugs with PUB, additions, generic factors
- Add
scalib.preprocessing.Quantizer
for conversions of floating-point traces to int. - Support modular subtractions (generalized summation) in FactorGraph.
- Raise minimum supported python version to 3.9.
scalib.attacks.FactorGraph
:- Add
GENERIC
factors - Add clear beliefs flag for BP.
- Remove divisions in belief propagation (improves numerical robustness, fixes some NaN issues).
- Add
Support python 3.12 in releases.
- Add
scalib.modeling.RLDAClassifier
andscalib.metrics.RLDAInformationEstimator
. - Fix build dependences and run build in an isolated environment.
- Fix
Distribution
size bug in belief propagation computation (#102). - Do not include debug symbols in release builds (makes wheel much smaller).
Ttest
: do not crash on non-contiguous/fortran-order arrays- Improve examples and README
- Run CI on Mac Os and build wheels (x86_64 and arm64, but we test only x86_64). No AVX2 due to old runner in github CI.
- Add
scalib.tools.ContextExecutor
, as a solution toLookupError
inget_config()
. - Fix numerical underflow in
BPState
when multiple traces are used. - Fix missing import in
MultiLDA
. - Run
BPState
methods on the threadpool. - Make threadpool initalization lazy -- makes SCALib play more nicely with
ProcessPoolExecutor
.
- Add
vars
andfactors
methods on FactorGraph. - Add
fg
property on BPState. - Fix bug in belief propagation. Numerical instabilities could lead to negative probabilities for AND (and probably XOR and ADD) factors.
- Restructure and expand generated docs.
- Refactor doc generation.
- Change docs style.
- Fix bug in
rank_estimation
. - Improve documentation and README.
- Run rust tests.
- Better selection of default threadpool size.
Deprecate
SASCAGraph
in favor of the newFactorGraph
which provides:Overall much less restrictions on operations, including suport for:
- non-bijective tables
- multiple public operands
- NOT gate
A
sanity_check
feature: verify that the graph is compatible with known value assignment (useful for debugging a graph).Optimized bitwise AND:
O(nc*log(nc))
instead ofO(nc^2)
.
Re-design
scalib.config
to handle more configuration in a singleConfig
class. Breaking change toscalib.config
andscalib.config.threading
.Smarter behavior for progress bars, unified configuration for progress bar. Breaking change to
scalib.attack.SASCAGraph
.Add accessors for the internal state of the LDA.
Introduce the
scalib.ScalibError
exception and removescalib.metrics.SnrError
(Breaking change).Improve error reporting in case of LDA solving error.
Allow all computations to be interrupted with Ctrl-C.
Fix deadlock when there is an error in large SNR computations (i.e., when
n_vars*n_samples*n_traces > 2**33
).Allow LDA to behave like simple pooled gaussian templates (#22).
Refresh build system (Tox version 4, improved CI), build by default with native machine optimizations.
Not crash anymore on non x86-64 CPUs (no CI for those yet).
- Upgrade CI to 3.11.
- Update dependancies and add python 3.10 to CI (#49)
- Fix AVX2 not used when building rust dependencies.
- Fix docs not building
- SASCA: support modular ADD and MUL operations (#18)
- TTest: Performance improvement by using a mix of 2 passes and 1 pass algorithms
- MTTest: First implementation of multivariate T-test.
- Improved documentation and README.rst
- SNR: use pooled formulas for better correctness then there are few traces, saves RAM (up to 75% reduction) and improves perf (about 2x single-threaded).
- Bump python minimum version to 3.7
- Revamp multi-threading handling thanks to new scalib.threading module.
- AVX2: Wheels on PyPi are built with AVX2 feature.
- Release GC in SASCA's run_bp .
- Release GC in rank_accurary and rank_nbin.
- LDA.predict_proba is marked thread-safe.
- Hide by default the progress bar of SASCAGraph.run_bp (can be re-enable with the progress parameter).
- Solving minor issues in MultiLDA and LDAClassifier. Allowing multiple threads in predict_proba() and add a done flag to solve().
- Chunk SNR.fit_u to maintain similar performances with long traces and adding a progress bar
- Add max_nb_bin parameter to postprocessing.rank_accuracy (that was previously hard-coded).
- Rename num_threads parameter of modeling.MultiLDA to num_cpus.
- Fix rank estimation when there is only one key chunk.
- Improve performance of SNR.get_snr.
- Remove OpenBLAS and LAPACK, use Spectra and nalgebra instead.
- Use BLIS for matrix multiplications (Linux-only for now).
- Make modeling.LDAClassifier incremental (breaking change).
- Add modeling.MultiLDA.
- Fix "invalid instruction" bug for CI wheel on windows.
- Initial release, with the following features: * LDA and Gaussian templates modeling * SNR * T-test any order (for TLVA) * Soft Analytical Side-Channel Attack (SASCA) * Rank Estimation