2 * fec.c -- forward error correction based on Vandermonde matrices
4 * (C) 1997-98 Luigi Rizzo (luigi@iet.unipi.it)
6 * Portions derived from code by Phil Karn (karn@ka9q.ampr.org),
7 * Robert Morelos-Zaragoza (robert@spectra.eng.hawaii.edu) and Hari
8 * Thirumoorthy (harit@spectra.eng.hawaii.edu), Aug 1995
10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions
14 * 1. Redistributions of source code must retain the above copyright
15 * notice, this list of conditions and the following disclaimer.
16 * 2. Redistributions in binary form must reproduce the above
17 * copyright notice, this list of conditions and the following
18 * disclaimer in the documentation and/or other materials
19 * provided with the distribution.
21 * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND
22 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
23 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
24 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS
25 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
26 * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
27 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
28 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
30 * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
31 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
35 #define FEC_MAGIC 0xFECC0DEC
36 #define FEC_HEADER_SIZE 32
40 int fec_new(int k, int n, struct fec_parms **parms);
41 void fec_free(struct fec_parms *p);
42 void fec_encode(struct fec_parms *parms, const unsigned char * const *src,
43 unsigned char *dst, int idx, int sz);
44 int fec_decode(struct fec_parms *parms, unsigned char **data, int *idx,