コード例 #1
0
ファイル: relic_fpx_util.c プロジェクト: Gesine/relic
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);
}
コード例 #2
0
ファイル: relic_ep2_util.c プロジェクト: Arash-Afshar/relic
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);
		}
	}
}
コード例 #3
0
ファイル: relic_fpx_util.c プロジェクト: Gesine/relic
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);
	}
}