reed solomon 256 encoder logic

encoder available from calculated values via galoisfield256.

encoder

calculated generators, encoder

1. declare mul
const mul=(a,b)=>a&&b?gf.exp[gf.log[a]+gf.log[b]]:0

calculated generators

2. declare call
,c=(generators=>v=>generators[vs.indexOf(v)])((()=>{
    const generators=Array(vs.length)
    for(let i=0;i<vs.length;i++){
        generators[i]=new Uint8Array(1+vs[i])
        generators[i][0]=1
        for(let y=0;y<vs[i];y++)for(let x=1+y;x;x--)generators[i][x]^=mul(generators[i][x-1],gf.exp[y])
    }
    return generators
})())

encoder

3. declare generator, length
const generator=c(v),l=vs.length

4. add length
vs.addLength(v)

5. loop
for(let y=0;y<l;y++)for(let x=1;x<generator.length;x++)

6. set values
vs[x+y]^=mul(generator[x],vs[y])

7. return
return vs.slice(l)