12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- var BufferUtil = require('../utils/buffer')
- var Polynomial = require('./polynomial')
- var Buffer = require('buffer').Buffer
- function ReedSolomonEncoder (degree) {
- this.genPoly = undefined
- this.degree = degree
- if (this.degree) this.initialize(this.degree)
- }
- ReedSolomonEncoder.prototype.initialize = function initialize (degree) {
-
- this.degree = degree
- this.genPoly = Polynomial.generateECPolynomial(this.degree)
- }
- ReedSolomonEncoder.prototype.encode = function encode (data) {
- if (!this.genPoly) {
- throw new Error('Encoder not initialized')
- }
-
-
- var pad = BufferUtil.alloc(this.degree)
- var paddedData = Buffer.concat([data, pad], data.length + this.degree)
-
-
- var remainder = Polynomial.mod(paddedData, this.genPoly)
-
-
-
- var start = this.degree - remainder.length
- if (start > 0) {
- var buff = BufferUtil.alloc(this.degree)
- remainder.copy(buff, start)
- return buff
- }
- return remainder
- }
- module.exports = ReedSolomonEncoder
|