// Adapted from datamatrix-rs errorcode/mod.rs and galois.rs (MIT).

///|
fn gf_mul(a : Int, b : Int) -> Int {
  let mut x = a
  let mut y = b
  let mut r = 0
  while y != 0 {
    if (y & 1) != 0 {
      r = r ^ x
    }
    y = y >> 1
    x = x << 1
    if (x & 256) != 0 {
      x = x ^ 301
    }
  }
  r
}

///|
fn generator(n : Int) -> Array[Int] {
  let mut g = [1]
  let mut root = 1
  for _ in 0.. Array[Int] {
  let g = generator(s.ecc)
  let result = Array::make(s.blocks * s.ecc, 0)
  for block in 0..