Beispiel #1
0
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);
}
Beispiel #2
0
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;
}
Beispiel #3
0
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
}
Beispiel #5
0
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);
		}
	}
}
Beispiel #6
0
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;
}