void fp3_read_bin(fp3_t a, uint8_t *bin, int len) { if (len != 3 * FP_BYTES) { THROW(ERR_NO_BUFFER); } fp_read_bin(a[0], bin, FP_BYTES); fp_read_bin(a[1], bin + FP_BYTES, FP_BYTES); fp_read_bin(a[2], bin + 2 * FP_BYTES, FP_BYTES); }
status_t g1_read_bin(g1_t g, uint8_t *data, int data_len) { if(g == NULL) return ELEMENT_UNINITIALIZED; fp_read_bin(g->x, data, FP_BYTES); fp_read_bin(g->y, &(data[FP_BYTES + 1]), FP_BYTES); fp_zero(g->z); fp_set_dig(g->z, 1); return ELEMENT_OK; }
void fp2_read_bin(fp2_t a, uint8_t *bin, int len) { if (len != FP_BYTES + 1 && len != 2 * FP_BYTES) { THROW(ERR_NO_BUFFER); } if (len == FP_BYTES + 1) { fp_read_bin(a[0], bin, FP_BYTES); fp_set_bit(a[1], 0, bin[FP_BYTES]); fp2_upk(a, a); } if (len == 2 * FP_BYTES) { fp_read_bin(a[0], bin, FP_BYTES); fp_read_bin(a[1], bin + FP_BYTES, FP_BYTES); } }
void ed_read_bin(ed_t a, const uint8_t *bin, int len) { if (len == 1) { if (bin[0] == 0) { ed_set_infty(a); return; } else { THROW(ERR_NO_BUFFER); return; } } if (len != (FP_BYTES + 1) && len != (2 * FP_BYTES + 1)) { THROW(ERR_NO_BUFFER); return; } a->norm = 1; fp_set_dig(a->z, 1); fp_read_bin(a->y, bin + 1, FP_BYTES); if (len == FP_BYTES + 1) { switch(bin[0]) { case 2: fp_zero(a->x); break; case 3: fp_zero(a->x); fp_set_bit(a->x, 0, 1); break; default: THROW(ERR_NO_VALID); break; } ed_upk(a, a); } if (len == 2 * FP_BYTES + 1) { if (bin[0] == 4) { fp_read_bin(a->x, bin + FP_BYTES + 1, FP_BYTES); } else { THROW(ERR_NO_VALID); } } #if ED_ADD == EXTND ed_projc_to_extnd(a, a->x, a->y, a->z); #endif }
void ep_read_bin(ep_t a, const uint8_t *bin, int len) { if (len == 1) { if (bin[0] == 0) { ep_set_infty(a); return; } else { THROW(ERR_NO_BUFFER); return; } } if (len != (FP_BYTES + 1) && len != (2 * FP_BYTES + 1)) { THROW(ERR_NO_BUFFER); return; } a->norm = 1; fp_set_dig(a->z, 1); fp_read_bin(a->x, bin + 1, FP_BYTES); if (len == FP_BYTES + 1) { switch(bin[0]) { case 2: fp_zero(a->y); break; case 3: fp_zero(a->y); fp_set_bit(a->y, 0, 1); break; default: THROW(ERR_NO_VALID); break; } ep_upk(a, a); } if (len == 2 * FP_BYTES + 1) { if (bin[0] == 4) { fp_read_bin(a->y, bin + FP_BYTES + 1, FP_BYTES); } else { THROW(ERR_NO_VALID); } } }
status_t g2_read_bin(g2_t g, uint8_t *data, int data_len) { if(g == NULL) return ELEMENT_UNINITIALIZED; if(data_len < G2_LEN) return ELEMENT_INVALID_ARG_LEN; uint8_t *d = data; fp_read_bin(g->x[0], d, FP_BYTES); d = &(d[FP_BYTES + 1]); fp_read_bin(g->x[1], d, FP_BYTES); d = &(d[FP_BYTES + 1]); fp_read_bin(g->y[0], d, FP_BYTES); d = &(d[FP_BYTES + 1]); fp_read_bin(g->y[1], d, FP_BYTES); fp_zero(g->z[0]); fp_zero(g->z[1]); fp_set_dig(g->z[0], 1); return ELEMENT_OK; }