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 guff-sharefiles

GPL-2.0-or-later OR LGPL-2.0-or-later

216 lines


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.


A crate for working with Cauchy and Vandermonde matrices

A small collection of routines for creating matrices that can be used to implement erasure (error-correction) 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
  • guff-matrix : 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.


~11K SLoC