def encode(self, U): k = U.shape[1] V = np.zeros((len(U), len(self.pm)), int) V[:,:k] = U for i in range(len(V)): V[i] = gf.polyadd(V[i], gf.polydiv(V[i], self.g, self.pm)[1]) return V
def encode(self, U): k = U.shape[1] n = self.pm.shape[0] result = np.empty((U.shape[0], n), int) for i, u in enumerate(U): result[i] = np.hstack((u, np.zeros(n - k))) result[i] = gf.polyadd(result[i], gf.polydiv(result[i], self.g, self.pm)[1]) return result
def encode(self, U): mesg_cnt, k = U.shape x_m = np.zeros(self.m + 1).astype('int') x_m[0] = 1 V = np.zeros((mesg_cnt, self.n)).astype('int') for i in range(mesg_cnt): u = U[i, :] x_m_prod_u = gf.polyprod(x_m, u, self.pm) div, mod = gf.polydivmod(x_m_prod_u, self.g, self.pm) v = gf.polyadd(x_m_prod_u, mod) ind = self.n - v.shape[0] V[i, ind:] = gf.polyadd(x_m_prod_u, mod) return V
def _encode(self, u): assert self.n - (self.g.shape[0] - 1) == u.shape[0] x_power = np.zeros_like(self.g, dtype=np.int) x_power[0] = 1 x_power_u = gf.polyprod(x_power, u, self.pm) _, mod = gf.polydivmod(x_power_u, self.g, self.pm) result = gf.polyadd(x_power_u, mod) result = np.concatenate( [np.zeros([self.n - result.shape[0]], dtype=np.int), result]) return result
def encode(self, U): n = self.pm.shape[0] m = self.g.shape[0] - 1 x = np.zeros(m + 1, dtype=np.int64) x[0] = 1 res = np.zeros((U.shape[0], U.shape[1] + m), dtype=np.int64) for i in range(U.shape[0]): u = U[i] code = gf.polyprod(x, u, self.pm) _, mod = gf.polydivmod(code, self.g, self.pm) code = gf.polyadd(code, mod) len_code = code.shape[0] res[i][-len_code:] = code return res
def encode(self, U): # res = x^m * u(x) - (x^m * u(x)) mod g(x) # |________| |________| # ^ ^ # | | # s + s mod g(x) message_number, k = U.shape m = self.g.size - 1 x_m = np.zeros(m + 1, dtype=int) x_m[0] = 1 res = np.zeros((message_number, k + m), dtype=int) for i in range(message_number): s = gf.polyprod(x_m, U[i, :], self.pm) mod = gf.polydiv(s, self.g, self.pm)[1] tmp = gf.polyadd(s, mod) res[i, -tmp.size:] = tmp.copy() return res