node-gf
v1.1.7
Published
This is a native Node.js module (C/C++) that wraps James S. Plank's GF-Complete code
Downloads
7
Readme
node-gf
This is a native Node.js module (C/C++) that wraps James S. Plank's GF-Complete code
The main target of GF-complete is to enhance the multiplication of a region
of data (buffer) and a symbol of the Galois field. We introduce APIs to
facilitate the use of node-gf
library:
- Multiplication of a buffer with an array of symbols. Each result is stored or XORed to a buffer of destination array.
- Multiplication of a array of buffers with an matrix of symbols. Results are stored or XORed to another array of buffers.
- Same as the above case but the matrix of symbols are stored a-prior as a context. Only arrays of buffers are given for each operation. It is useful for encoding operations.
Moreover, multi-threads can be enable in such operations so that each multiplication of a buffer with a symbol is performed in a thread.
Prerequisite
GF-complete's source codes should be in the gf-complete
directory of the
project. You can get GF-complete from different sources. By default, we choose
the source codes from
Jerasure Library
that is retrieved when the package is installed.
API
Import library
const NodeGF = require('node-gf');
Initialization
const gf = new NodeGF(opts);
where [opts] is optional parameters for generating GF-complete
- [opts.gfDim] - Galois field dimension
- [opts.multType] - multiplication type
- [opts.divType] - division type
- [opts.regionType] - multiplication region type
- [opts.primPoly] - primitive polynomial
- [opts.arg1] - argument1
- [opts.arg2] - argument2
Available types of multiplication, division, region operations are the same as of the original GF-complete Library and shown as below.
node-gf
| origin GF-complete
---|---
Multiplication |
default
| GF_MULT_DEFAULT
shift
| GF_MULT_SHIFT
carray_free
| GF_MULT_CARRY_FREE
carry_free_gk
| GF_MULT_CARRY_FREE_GK
group
| GF_MULT_GROUP
bytwo_p
| GF_MULT_BYTWO_p
table
| GF_MULT_TABLE
log_table
| GF_MULT_LOG_TABLE
log_zero
| GF_MULT_LOG_ZERO
log_zero_ext
| GF_MULT_LOG_ZERO_EXT
split
| GF_MULT_SPLIT_TABLE
composite
| GF_MULT_COMPOSITE
||
Division |
default
| GF_DIVIDE_DEFAULT
matrix
| GF_DIVIDE_MATRIX
euclid
| GF_DIVIDE_EUCLID
||
Region |
default
| GF_REGION_DEFAULT
double
| GF_REGION_DOUBLE_TABLE
quad
| GF_REGION_QUAD_TABLE
lazy
| GF_REGION_LAZY
simd
| GF_REGION_SIMD
sse
| GF_REGION_SSE
noSimd
| GF_REGION_NOSIMD
noSse
| GF_REGION_NOSSE
altmap
| GF_REGION_ALTMAP
cauchy
| GF_REGION_CAUCHY
Note that not all combinations of multiplication/division/region types are correct. Please see manual for more details.
Without specific requirements, we recommend to generate GF-complete with the following options:
{
gfDim: 8,
multType: 'split',
divType: 'default',
regionType: 'default',
arg1: 4,
arg2: 8,
}
Addition
add(num1, num2)
Multiplication
multiply(num1, num2)
Division
divide(num1, num2)
Inversion
inverse(num)
Multiplication of a region with a GF symbol
multRegion(coef, src, dest, len, flag)
where
coef
: a GF symbolsrc
: the source bufferdest
: the destination bufferlen
: buffer length (bytes)flag
: operation flag indicating that the result: stored indest
(flag = 0) or XORed to actualdest
(flag = 1)
Multiplication of a region with an array of GF symbols
multRegionArr(coefs, src, dest, destsNb, len, flag, offset)
For multi-thread operations:
multRegionArrThreads(coefs, src, dest, destsNb, len, flag, offset)
where
coefs
: array of GF symbolssrc
: the source bufferdest
: the destination buffersdestsNb
: number of destination bufferslen
: buffer length (bytes)flag
: operation flag indicating that the result is stored indest
(flag = 0) or XORed to actualdest
(flag = 1)offset
: offset ofdest
(bytes)
Multiplication of an array of regions with a matrix of GF symbols
multRegionMatrix(coefs, rowsNb, colsNb, src, dest, len, offset)
For multi-thread operations:
multRegionMatrixThreads(coefs, rowsNb, colsNb, src, dest, len, offset)
where
coefs
: array ofrowsNb x colsNb
GF symbolsrowsNb
: number of input regionscolsNb
: number of output regionssrc
: the source buffersdest
: the destination bufferslen
: buffer length (bytes)offset
: offset ofdest
(bytes)
Multiplication of an array of regions with a given context
multRegionMatrixContext(contextId, src, dest, len, offset)
For multi-thread operations:
multRegionMatrixThreadsContext(contextId, src, dest, len, offset)
where
contextId
: identity of a contextsrc
: the source buffersdest
: the destination bufferslen
: buffer length (bytes) (optional)offset
: offset ofdest
(bytes) (optional)
A context identity is return from
initContext(coefs, rowsNb, colsNb, len)
where
coefs
: array ofrowsNb x colsNb
GF symbolsrowsNb
: number of input regionscolsNb
: number of output regionslen
: buffer length (bytes)
A context is deleted by
removeContext(contextId)
where
contextId
: identity of a context