void fp6_read_bin(fp6_t a, uint8_t *bin, int len) { if (len != 6 * FP_BYTES) { THROW(ERR_NO_BUFFER); } fp2_read_bin(a[0], bin, 2 * FP_BYTES); fp2_read_bin(a[1], bin + 2 * FP_BYTES, 2 * FP_BYTES); fp2_read_bin(a[2], bin + 4 * FP_BYTES, 2 * FP_BYTES); }
void ep2_read_bin(ep2_t a, uint8_t *bin, int len) { if (len == 1) { if (bin[0] == 0) { ep2_set_infty(a); return; } else { THROW(ERR_NO_BUFFER); return; } } if (len != (2 * FP_BYTES + 1) && len != (4 * FP_BYTES + 1)) { THROW(ERR_NO_BUFFER); return; } a->norm = 1; fp_set_dig(a->z[0], 1); fp_zero(a->z[1]); fp2_read_bin(a->x, bin + 1, 2 * FP_BYTES); if (len == 2 * FP_BYTES + 1) { switch(bin[0]) { case 2: fp2_zero(a->y); break; case 3: fp2_zero(a->y); fp_set_bit(a->y[0], 0, 1); fp_zero(a->y[1]); break; default: THROW(ERR_NO_VALID); break; } ep2_upk(a, a); } if (len == 4 * FP_BYTES + 1) { if (bin[0] == 4) { fp2_read_bin(a->y, bin + 2 * FP_BYTES + 1, 2 * FP_BYTES); } else { THROW(ERR_NO_VALID); } } }
void fp12_read_bin(fp12_t a, uint8_t *bin, int len) { if (len != 8 * FP_BYTES && len != 12 * FP_BYTES) { THROW(ERR_NO_BUFFER); } if (len == 8 * FP_BYTES) { fp2_zero(a[0][0]); fp2_read_bin(a[0][1], bin, 2 * FP_BYTES); fp2_read_bin(a[0][2], bin + 2 * FP_BYTES, 2 * FP_BYTES); fp2_read_bin(a[1][0], bin + 4 * FP_BYTES, 2 * FP_BYTES); fp2_zero(a[1][1]); fp2_read_bin(a[1][2], bin + 6 * FP_BYTES, 2 * FP_BYTES); fp12_back_cyc(a, a); } if (len == 12 * FP_BYTES) { fp6_read_bin(a[0], bin, 6 * FP_BYTES); fp6_read_bin(a[1], bin + 6 * FP_BYTES, 6 * FP_BYTES); } }