3 releases
0.1.3  Jul 24, 2021 

0.1.2  Jul 21, 2021 
0.1.0  Jul 20, 2021 
#1533 in Math
31 downloads per month
Used in guffsharefiles
35KB
216 lines
guffida
Information Dispersal Algorithm in Rust
This crate name is a placeholder.
It will include functionality for doing IDA (Information Dispersal Algorithm) transforms on data.
It is a port/rewrite of my old Perl module Crypt::IDA
, which is
available from CPAN or from my
gnetraid
repository on
github.
lib.rs
:
A crate for working with Cauchy and Vandermonde matrices
A small collection of routines for creating matrices that can be used to implement erasure (errorcorrection) schemes or threshold schemes using Galois fields.
Note that this crate only provides data for insertion into a matrix. For the missing functionality, see:
 guff : basic operations over finite fields, including vector operations
 guffmatrix : full set of matrix types and operations
Using finite field matrix operations for threshold schemes
A "threshold scheme" is a mathematical method for securely splitting a secret into a number of "shares" such that:

if a set number (the "threshold") of shares are combined, the original secret can be recovered

if fewer shares than the threshold are combined, no information about the secret is revealed
Module Focus
This module focuses in particular on Michael O. Rabin's "Information Dispersal Algorithm" (IDA). In it, splitting a secret is achieved by:

creating a transform matrix that has the required threshold property

placing the secret into an input matrix, padding it if needed

calculating transform x input to get an output matrix

reading off each share as a row of the transform matrix and the corresponding row of the output matrix
To reconstruct the secret:

take the supplied transform matrix rows and put them into a square matrix

calculate the inverse of the matrix

form a new input matrix from the corresponding output data rows

calculate inverse x input

read the secret back from the output matrix
More details of the algorithm can be found later.
Dependencies
~550KB
~11K SLoC