Esempio n. 1
0
int bn2mpz(mpz_t out, bn_t in)
{
	int size = bn_size_str(in, 10);
	char * temp = malloc(sizeof(char)*size);

	bn_write_str(temp, size, in, 10);
	mpz_set_str(out,temp, 10);

	free(temp);
	return 0;
}
Esempio n. 2
0
void fp_write_str(char *str, int len, const fp_t a, int radix) {
	bn_t t;

	bn_null(t);

	TRY {
		bn_new(t);

		fp_prime_back(t, a);

		bn_write_str(str, len, t, radix);
	} CATCH_ANY {
		THROW(ERR_CAUGHT);
	}
	FINALLY {
		bn_free(t);
	}
}
Esempio n. 3
0
//TODO:
status_t element_to_str(char *data, int len, element_t e)
{
    if(e->isInitialized == TRUE) {
    	int str_len = element_length(e) * 2;
		if(str_len > len) return ELEMENT_INVALID_ARG;
		memset(data, 0, len);
    	uint8_t tmp1[str_len+1];
		memset(tmp1, 0, str_len);

    	if(e->type == ZR) {
    		bn_write_str(data, str_len, e->bn, BASE);
    	}
    	else if(e->type == G1) {
			g1_write_str(e->g1, tmp1, str_len);

			int dist_y = FP_STR;
			snprintf(data, len, "[%s, %s]", tmp1, &(tmp1[dist_y]));
    	}
    	else if(e->type == G2) {
			g2_write_str(e->g2, tmp1, str_len);

			int len2 = FP_STR;
			int dist_x1 = len2, dist_y0 = len2 * 2, dist_y1 = len2 * 3;
			snprintf(data, len, "[%s, %s, %s, %s]", tmp1, &(tmp1[dist_x1]), &(tmp1[dist_y0]), &(tmp1[dist_y1]));
    	}
    	else if(e->type == GT) {
			gt_write_str(e->gt, tmp1, str_len);

    		int len2 = FP_STR;
    		int dist_x01 = len2, dist_x10 = len2 * 2, dist_x11 = len2 * 3,
    			dist_x20 = len2 * 4, dist_x21 = len2 * 5, dist_y00 = len2 * 6,
    			dist_y01 = len2 * 7, dist_y10 = len2 * 8, dist_y11 = len2 * 9,
    			dist_y20 = len2 * 10, dist_y21 = len2 * 11;
			 snprintf(data, len, "[%s, %s, %s, %s, %s, %s], [%s, %s, %s, %s, %s, %s]",
    		 			  tmp1, &(tmp1[dist_x01]), &(tmp1[dist_x10]), &(tmp1[dist_x11]),
    					  &(tmp1[dist_x20]), &(tmp1[dist_x21]),
    					  &(tmp1[dist_y00]), &(tmp1[dist_y01]), &(tmp1[dist_y10]), &(tmp1[dist_y11]),
    					  &(tmp1[dist_y20]), &(tmp1[dist_y21]));
    	}
    }
    return ELEMENT_OK;
}