Ejemplo n.º 1
0
void fp12_write_bin(uint8_t *bin, int len, fp12_t a, int pack) {
	fp12_t t;

	fp12_null(t);

	TRY {
		fp12_new(t);

		if (pack) {
			if (len != 8 * FP_BYTES) {
				THROW(ERR_NO_BUFFER);
			}
			fp12_pck(t, a);
			fp2_write_bin(bin, 2 * FP_BYTES, a[0][1], 0);
			fp2_write_bin(bin + 2 * FP_BYTES, 2 * FP_BYTES, a[0][2], 0);
			fp2_write_bin(bin + 4 * FP_BYTES, 2 * FP_BYTES, a[1][0], 0);
			fp2_write_bin(bin + 6 * FP_BYTES, 2 * FP_BYTES, a[1][2], 0);
		} else {
			if (len != 12 * FP_BYTES) {
				THROW(ERR_NO_BUFFER);
			}
			fp6_write_bin(bin, 6 * FP_BYTES, a[0]);
			fp6_write_bin(bin + 6 * FP_BYTES, 6 * FP_BYTES, a[1]);
		}
	} CATCH_ANY {
		THROW(ERR_CAUGHT);
	} FINALLY {
		fp12_free(t);
	}
}
Ejemplo n.º 2
0
void fp6_write_bin(uint8_t *bin, int len, fp6_t a) {
	if (len != 6 * FP_BYTES) {
		THROW(ERR_NO_BUFFER);
	}
	fp2_write_bin(bin, 2 * FP_BYTES, a[0], 0);
	fp2_write_bin(bin + 2 * FP_BYTES, 2 * FP_BYTES, a[1], 0);
	fp2_write_bin(bin + 4 * FP_BYTES, 2 * FP_BYTES, a[2], 0);
}
Ejemplo n.º 3
0
void ep2_write_bin(uint8_t *bin, int len, ep2_t a, int pack) {
	ep2_t t;

	ep2_null(t);

	if (ep2_is_infty(a)) {
		if (len != 1) {
			THROW(ERR_NO_BUFFER);
		} else {
			bin[0] = 0;
			return;
		}
	}

	TRY {
		ep2_new(t);

		ep2_norm(t, a);

		if (pack) {
			if (len < 2 * FP_BYTES + 1) {
				THROW(ERR_NO_BUFFER);	
			} else {
				ep2_pck(t, t);
				bin[0] = 2 | fp_get_bit(t->y[0], 0);
				fp2_write_bin(bin + 1, 2 * FP_BYTES, t->x, 0);
			}
		} else {
			if (len < 4 * FP_BYTES + 1) {
				THROW(ERR_NO_BUFFER);
			} else {
				bin[0] = 4;
				fp2_write_bin(bin + 1, 2 * FP_BYTES, t->x, 0);
				fp2_write_bin(bin + 2 * FP_BYTES + 1, 2 * FP_BYTES, t->y, 0);
			}
		}
	} CATCH_ANY {
		THROW(ERR_CAUGHT);
	} FINALLY {
		ep2_free(t);
	}
}