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; }
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); } }
//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; }