(msg: &[F], pp: &Self::LinCodePCParams)
| 54 | } |
| 55 | |
| 56 | fn encode(msg: &[F], pp: &Self::LinCodePCParams) -> Result<Vec<F>, Error> { |
| 57 | if msg.len() != pp.m { |
| 58 | return Err(Error::EncodingError); |
| 59 | } |
| 60 | let cw_len = pp.m_ext; |
| 61 | let mut cw = Vec::with_capacity(cw_len); |
| 62 | cw.extend_from_slice(msg); |
| 63 | |
| 64 | // Multiply by matrices A |
| 65 | for (i, &s) in pp.start.iter().enumerate() { |
| 66 | let mut src = pp.a_mats[i].row_mul(&cw[s - pp.a_dims[i].0..s]); |
| 67 | cw.append(&mut src); |
| 68 | } |
| 69 | |
| 70 | // later we don't necessarily mutate in order, so we need the full vec now. |
| 71 | cw.resize(cw_len, F::zero()); |
| 72 | // RS encode the last one |
| 73 | let rss = *pp.start.last().unwrap_or(&0); |
| 74 | let rsie = rss + pp.a_dims.last().unwrap_or(&(0, pp.m, 0)).1; |
| 75 | let rsoe = *pp.end.last().unwrap_or(&cw_len); |
| 76 | naive_reed_solomon(&mut cw, rss, rsie, rsoe); |
| 77 | |
| 78 | // Come back |
| 79 | for (i, (&s, &e)) in pp.start.iter().zip(&pp.end).enumerate() { |
| 80 | let src = &pp.b_mats[i].row_mul(&cw[s..e]); |
| 81 | cw[e..e + pp.b_dims[i].1].copy_from_slice(src); |
| 82 | } |
| 83 | Ok(cw.to_vec()) |
| 84 | } |
| 85 | |
| 86 | fn poly_to_vec(polynomial: &P) -> Vec<F> { |
| 87 | polynomial.to_evaluations() |
nothing calls this directly
no test coverage detected