22 #ifdef BPU_CONF_ENCRYPTION
26 int ele, bit, i, bit_in_msg = 0;
64 #ifdef BPU_CONF_DECRYPTION
113 int iter = -1, max, bit, upc, upc_counts[cipher_text->
len], isSyndromZero = 0;
114 int flipped_bits = 0, flipped_bits_iter = 0;
127 for (bit = 0; bit < error_vec->
len; bit++) {
131 upc_counts[bit] = upc;
143 flipped_bits_iter = 0;
145 for (bit = 0; bit < error_vec->
len; bit++) {
146 if (upc_counts[bit] > 0 && upc_counts[bit] >= (max-delta)) {
147 flipped_bits++; flipped_bits_iter++;
172 return isSyndromZero;
178 int iter = -1, bit, upc, isSyndromZero = 0;
179 int flipped_bits = 0, flipped_bits_iter = 0;
189 flipped_bits_iter = 0;
191 for (bit = 0; bit < error_vec->
len; bit++) {
198 flipped_bits++; flipped_bits_iter++;
213 if (flipped_bits_iter < 1) {
228 return isSyndromZero;
236 for (i = 0; i < cipher_text->
len; i++) {
246 #ifdef BPU_CONF_KEY_GEN
255 int ret = 0, i, err = 0;
303 if (test_inv.
len != 1 || test_inv.
elements[0] != 1ul) {
414 int i, element, err = 0;
int BPU_gf2PolyIsZero(const BPU_T_GF2_Poly *a)
BPU_T_Qcmdpc_Spec * qcmdpc
#define BPU_gf2VecNull(v_pointer)
Null GF2 vector.
void BPU_gf2PolyMulMod(const BPU_T_GF2_Poly *a, const BPU_T_GF2_Poly *b, BPU_T_GF2_Poly *c, const BPU_T_GF2_Poly *m, int crop)
int BPU_gf2SparsePolyAndHW(const BPU_T_GF2_Poly *a, const BPU_T_GF2_Sparse_Poly *b)
BPU_T_GF2_Sparse_Poly * matrices
all cyclic matrices of matrix
void BPU_printGf2Poly(const BPU_T_GF2_Poly *v)
int BPU_mecsQcmdpcDecrypt(BPU_T_GF2_Vector *out, const BPU_T_GF2_Vector *in, const struct _BPU_T_Code_Ctx *ctx)
#define BPU_QCMDPC_PARAM_MAX_ITER
maximum count of iterations in decoding
void BPU_gf2PolyMulX(BPU_T_GF2_Poly *a)
void BPU_gf2SparseQcMatrixGetRow(BPU_T_GF2_Sparse_Poly *p, const BPU_T_GF2_Sparse_Qc_Matrix *m, int row_num)
#define BPU_gf2PolyGetBit(poly, bit)
BPU_T_GF2_QC_Matrix G
generator matrix
int BPU_gf2PolyInitRand(BPU_T_GF2_Poly *out, int l, int w, int set_deg)
void BPU_gf2PolyFree(BPU_T_GF2_Poly *p, int is_dyn)
uint32_t element_size
size of cyclic matrix
#define BPU_printWarning(fmt,...)
print warning message with filename, line
uint16_t n0
number of cyclic matrices
void BPU_gf2PolyShiftLeft(BPU_T_GF2_Poly *a, int shift_count)
int BPU_mecsQcmdpcTestGHmatrices(const BPU_T_GF2_QC_Matrix *G, const BPU_T_GF2_Sparse_Qc_Matrix *H)
void BPU_gf2QcMatrixFree(BPU_T_GF2_QC_Matrix *v, int is_dyn)
#define BPU_printError(fmt,...)
print error message with filename, line
void BPU_gf2SparseQcMatrixTransp(BPU_T_GF2_Sparse_Qc_Matrix *out, const BPU_T_GF2_Sparse_Qc_Matrix *in)
uint32_t n
cols of whole matrix
void BPU_gf2SparseQcMatrixFree(BPU_T_GF2_Sparse_Qc_Matrix *v, int is_dyn)
BPU_T_GF2 * elements
all element of matrix
#define BPU_printDebug(fmt,...)
print debug message with filename, line
BPU_T_GF2_Vector * e
Error vector.
uint16_t element_count
number of cyclic matrices
#define BPU_gf2VecSetBit(v_pointer, i, bit)
uint16_t w
weight of parity-check matrix row
int BPU_gf2QcMatrixToSparse(BPU_T_GF2_Sparse_Qc_Matrix *out, const BPU_T_GF2_QC_Matrix *in, const int wi[])
uint16_t elements_in_row
number of elements in one row
#define BPU_QCMDPC_MAX_B_VALUES
count of precalculated values for decode2 algorithm
int BPU_mecsQcmdpcDecode1(BPU_T_GF2_Vector *error_vec, const BPU_T_GF2_Vector *cipher_text, int delta, const struct _BPU_T_Code_Ctx *ctx)
void BPU_gf2SparsePolyAdd(BPU_T_GF2_Poly *out, const BPU_T_GF2_Sparse_Poly *in)
int BPU_mecsQcmdpcEncode(BPU_T_GF2_Vector *out, const BPU_T_GF2_Vector *in, const struct _BPU_T_Code_Ctx *ctx)
#define BPU_QCMDPC_PARAM_DELTA
starting param delta (threshold) for decode1 algorithm
int BPU_gf2PolyInv(BPU_T_GF2_Poly *out, const BPU_T_GF2_Poly *a, const BPU_T_GF2_Poly *m)
BPU_T_GF2_Sparse_Qc_Matrix H
parity-check matrix
uint16_t m
size of cyclic matrix
void BPU_gf2PolySetDeg(BPU_T_GF2_Poly *a, int deg)
int BPU_gf2PolyMalloc(BPU_T_GF2_Poly *p, int len)
void BPU_gf2PolyAdd(BPU_T_GF2_Poly *out, const BPU_T_GF2_Poly *in, int crop)
BPU_T_GF2_Poly * matrices
all cyclic matrices of matrix
void BPU_mecsQcmdpcCalcSyndrom(BPU_T_GF2_Vector *syndrom, const BPU_T_GF2_Vector *cipher_text, const struct _BPU_T_Code_Ctx *ctx)
void BPU_gf2SparsePolyFree(BPU_T_GF2_Sparse_Poly *p, int is_dyn)
int BPU_mecsQcmdpcDecode2(BPU_T_GF2_Vector *error_vec, const BPU_T_GF2_Vector *cipher_text, const struct _BPU_T_Code_Ctx *ctx)
#define BPU_QCMDPC_PARAM_DELTA_B
threshold for decode2
int BPU_gf2QcMatrixMalloc(BPU_T_GF2_QC_Matrix *v, int element_count, int element_size, int isVertical, int is_I_appended)
int BPU_mecsQcmdpcGenKeys(BPU_T_Code_Ctx *ctx)
#define BPU_gf2VecGetBit(v_pointer, i)
Check if is set bit at i-th position in vector.
void BPU_gf2PolyCopy(BPU_T_GF2_Poly *out, const BPU_T_GF2_Poly *in)
uint16_t code_len
Code len.
uint8_t element_bit_size
element size, is sizeof(BPU_T_GF2) i.e. 64 bits
BPU_T_UN_Code_Spec * code_spec
Code specific structure, like generator matrix, control matrix, gen. poly ...
uint32_t n
cols of whole matrix
void BPU_gf2QcMatrixTransp(BPU_T_GF2_QC_Matrix *out, const BPU_T_GF2_QC_Matrix *in)