MCPcopy Create free account
hub / github.com/arkworks-rs/poly-commit / encode

Method encode

poly-commit/src/linear_codes/multilinear_brakedown/mod.rs:56–84  ·  view source on GitHub ↗
(msg: &[F], pp: &Self::LinCodePCParams)

Source from the content-addressed store, hash-verified

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()

Callers

nothing calls this directly

Calls 4

naive_reed_solomonFunction · 0.85
lenMethod · 0.80
iterMethod · 0.80
row_mulMethod · 0.45

Tested by

no test coverage detected