• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /barrelfish-2018-10-04/lib/tommath/mtest/

Lines Matching refs:mp

160 mp_err   s_mp_grow(mp_int *mp, mp_size min);   /* increase allocated size */
161 mp_err s_mp_pad(mp_int *mp, mp_size min); /* left pad with zeroes */
163 void s_mp_clamp(mp_int *mp); /* clip leading zeroes */
167 mp_err s_mp_lshd(mp_int *mp, mp_size p); /* left-shift by p digits */
168 void s_mp_rshd(mp_int *mp, mp_size p); /* right-shift by p digits */
169 void s_mp_div_2d(mp_int *mp, mp_digit d); /* divide by 2^d in place */
170 void s_mp_mod_2d(mp_int *mp, mp_digit d); /* modulo 2^d in place */
171 mp_err s_mp_mul_2d(mp_int *mp, mp_digit d); /* multiply by 2^d in place*/
172 void s_mp_div_2(mp_int *mp); /* divide by 2 in place */
173 mp_err s_mp_mul_2(mp_int *mp); /* multiply by 2 in place */
175 mp_err s_mp_add_d(mp_int *mp, mp_digit d); /* unsigned digit addition */
176 mp_err s_mp_sub_d(mp_int *mp, mp_digit d); /* unsigned digit subtract */
177 mp_err s_mp_mul_d(mp_int *mp, mp_digit d); /* unsigned digit multiply */
178 mp_err s_mp_div_d(mp_int *mp, mp_digit d, mp_digit *r);
227 /* {{{ mp_init(mp) */
230 mp_init(mp)
236 mp_err mp_init(mp_int *mp)
238 return mp_init_size(mp, s_mp_defprec);
244 /* {{{ mp_init_array(mp[], count) */
246 mp_err mp_init_array(mp_int mp[], int count)
251 ARGCHK(mp !=NULL && count > 0, MP_BADARG);
254 if((res = mp_init(&mp[pos])) != MP_OKAY)
262 mp_clear(&mp[pos]);
270 /* {{{ mp_init_size(mp, prec) */
273 mp_init_size(mp, prec)
280 mp_err mp_init_size(mp_int *mp, mp_size prec)
282 ARGCHK(mp != NULL && prec > 0, MP_BADARG);
284 if((DIGITS(mp) = s_mp_alloc(prec, sizeof(mp_digit))) == NULL)
287 SIGN(mp) = MP_ZPOS;
288 USED(mp) = 1;
289 ALLOC(mp) = prec;
297 /* {{{ mp_init_copy(mp, from) */
300 mp_init_copy(mp, from)
302 Initialize mp as an exact copy of from. Returns MP_OKAY if
307 mp_err mp_init_copy(mp_int *mp, mp_int *from)
309 ARGCHK(mp != NULL && from != NULL, MP_BADARG);
311 if(mp == from)
314 if((DIGITS(mp) = s_mp_alloc(USED(from), sizeof(mp_digit))) == NULL)
317 s_mp_copy(DIGITS(from), DIGITS(mp), USED(from));
318 USED(mp) = USED(from);
319 ALLOC(mp) = USED(from);
320 SIGN(mp) = SIGN(from);
412 /* {{{ mp_clear(mp) */
415 mp_clear(mp)
422 void mp_clear(mp_int *mp)
424 if(mp == NULL)
427 if(DIGITS(mp) != NULL) {
429 s_mp_setz(DIGITS(mp), ALLOC(mp));
431 s_mp_free(DIGITS(mp));
432 DIGITS(mp) = NULL;
435 USED(mp) = 0;
436 ALLOC(mp) = 0;
442 /* {{{ mp_clear_array(mp[], count) */
444 void mp_clear_array(mp_int mp[], int count)
446 ARGCHK(mp != NULL && count > 0, MP_BADARG);
449 mp_clear(&mp[count]);
455 /* {{{ mp_zero(mp) */
458 mp_zero(mp)
460 Set mp to zero. Does not change the allocated size of the structure,
463 void mp_zero(mp_int *mp)
465 if(mp == NULL)
468 s_mp_setz(DIGITS(mp), ALLOC(mp));
469 USED(mp) = 1;
470 SIGN(mp) = MP_ZPOS;
476 /* {{{ mp_set(mp, d) */
478 void mp_set(mp_int *mp, mp_digit d)
480 if(mp == NULL)
483 mp_zero(mp);
484 DIGIT(mp, 0) = d;
490 /* {{{ mp_set_int(mp, z) */
492 mp_err mp_set_int(mp_int *mp, long z)
498 ARGCHK(mp != NULL, MP_BADARG);
500 mp_zero(mp);
506 if((res = s_mp_mul_2d(mp, CHAR_BIT)) != MP_OKAY)
509 res = s_mp_add_d(mp,
517 SIGN(mp) = MP_NEG;
2224 /* {{{ mp_print(mp, ofp) */
2228 mp_print(mp, ofp)
2234 void mp_print(mp_int *mp, FILE *ofp)
2238 if(mp == NULL || ofp == NULL)
2241 fputc((SIGN(mp) == MP_NEG) ? '-' : '+', ofp);
2243 for(ix = USED(mp) - 1; ix >= 0; ix--) {
2244 fprintf(ofp, DIGIT_FMT, DIGIT(mp, ix));
2256 /* {{{ mp_read_signed_bin(mp, str, len) */
2259 mp_read_signed_bin(mp, str, len)
2264 mp_err mp_read_signed_bin(mp_int *mp, unsigned char *str, int len)
2268 ARGCHK(mp != NULL && str != NULL && len > 0, MP_BADARG);
2270 if((res = mp_read_unsigned_bin(mp, str + 1, len - 1)) == MP_OKAY) {
2273 SIGN(mp) = MP_NEG;
2275 SIGN(mp) = MP_ZPOS;
2284 /* {{{ mp_signed_bin_size(mp) */
2286 int mp_signed_bin_size(mp_int *mp)
2288 ARGCHK(mp != NULL, 0);
2290 return mp_unsigned_bin_size(mp) + 1;
2296 /* {{{ mp_to_signed_bin(mp, str) */
2298 mp_err mp_to_signed_bin(mp_int *mp, unsigned char *str)
2300 ARGCHK(mp != NULL && str != NULL, MP_BADARG);
2302 /* Caller responsible for allocating enough memory (use mp_raw_size(mp)) */
2303 str[0] = (char)SIGN(mp);
2305 return mp_to_unsigned_bin(mp, str + 1);
2311 /* {{{ mp_read_unsigned_bin(mp, str, len) */
2314 mp_read_unsigned_bin(mp, str, len)
2319 mp_err mp_read_unsigned_bin(mp_int *mp, unsigned char *str, int len)
2324 ARGCHK(mp != NULL && str != NULL && len > 0, MP_BADARG);
2326 mp_zero(mp);
2329 if((res = s_mp_mul_2d(mp, CHAR_BIT)) != MP_OKAY)
2332 if((res = mp_add_d(mp, str[ix], mp)) != MP_OKAY)
2342 /* {{{ mp_unsigned_bin_size(mp) */
2344 int mp_unsigned_bin_size(mp_int *mp)
2349 ARGCHK(mp != NULL, 0);
2352 if(USED(mp) == 1 && DIGIT(mp, 0) == 0)
2355 count = (USED(mp) - 1) * sizeof(mp_digit);
2356 topdig = DIGIT(mp, USED(mp) - 1);
2369 /* {{{ mp_to_unsigned_bin(mp, str) */
2371 mp_err mp_to_unsigned_bin(mp_int *mp, unsigned char *str)
2376 ARGCHK(mp != NULL && str != NULL, MP_BADARG);
2378 dp = DIGITS(mp);
2379 end = dp + USED(mp) - 1;
2425 /* {{{ mp_count_bits(mp) */
2427 int mp_count_bits(mp_int *mp)
2432 ARGCHK(mp != NULL, MP_BADARG);
2434 len = DIGIT_BIT * (USED(mp) - 1);
2435 d = DIGIT(mp, USED(mp) - 1);
2448 /* {{{ mp_read_radix(mp, str, radix) */
2451 mp_read_radix(mp, str, radix)
2453 Read an integer from the given string, and set mp to the resulting
2459 mp_err mp_read_radix(mp_int *mp, unsigned char *str, int radix)
2465 ARGCHK(mp != NULL && str != NULL && radix >= 2 && radix <= MAX_RADIX,
2468 mp_zero(mp);
2487 if((res = s_mp_mul_d(mp, radix)) != MP_OKAY)
2489 if((res = s_mp_add_d(mp, val)) != MP_OKAY)
2494 if(s_mp_cmp_d(mp, 0) == MP_EQ)
2495 SIGN(mp) = MP_ZPOS;
2497 SIGN(mp) = sig;
2505 /* {{{ mp_radix_size(mp, radix) */
2507 int mp_radix_size(mp_int *mp, int radix)
2510 ARGCHK(mp != NULL, 0);
2512 len = s_mp_outlen(mp_count_bits(mp), radix) + 1; /* for NUL terminator */
2514 if(mp_cmp_z(mp) < 0)
2542 /* {{{ mp_toradix(mp, str, radix) */
2544 mp_err mp_toradix(mp_int *mp, unsigned char *str, int radix)
2548 ARGCHK(mp != NULL && str != NULL, MP_BADARG);
2551 if(mp_cmp_z(mp) == MP_EQ) {
2561 if((res = mp_init_copy(&tmp, mp)) != MP_OKAY)
2651 /* {{{ s_mp_grow(mp, min) */
2653 /* Make sure there are at least 'min' digits allocated to mp */
2654 mp_err s_mp_grow(mp_int *mp, mp_size min)
2656 if(min > ALLOC(mp)) {
2665 s_mp_copy(DIGITS(mp), tmp, USED(mp));
2668 s_mp_setz(DIGITS(mp), ALLOC(mp));
2670 s_mp_free(DIGITS(mp));
2671 DIGITS(mp) = tmp;
2672 ALLOC(mp) = min;
2681 /* {{{ s_mp_pad(mp, min) */
2683 /* Make sure the used size of mp is at least 'min', growing if needed */
2684 mp_err s_mp_pad(mp_int *mp, mp_size min)
2686 if(min > USED(mp)) {
2690 if(min > ALLOC(mp) && (res = s_mp_grow(mp, min)) != MP_OKAY)
2694 USED(mp) = min;
2770 /* {{{ s_mp_clamp(mp) */
2773 void s_mp_clamp(mp_int *mp)
2775 mp_size du = USED(mp);
2776 mp_digit *zp = DIGITS(mp) + du - 1;
2781 USED(mp) = du;
2807 /* {{{ s_mp_lshd(mp, p) */
2810 Shift mp leftward by p digits, growing if needed, and zero-filling
2815 mp_err s_mp_lshd(mp_int *mp, mp_size p)
2825 if((res = s_mp_pad(mp, USED(mp) + p)) != MP_OKAY)
2828 pos = USED(mp) - 1;
2829 dp = DIGITS(mp);
2845 /* {{{ s_mp_rshd(mp, p) */
2848 Shift mp rightward by p digits. Maintains the invariant that
2853 void s_mp_rshd(mp_int *mp, mp_size p)
2862 if(p >= USED(mp)) {
2863 s_mp_setz(DIGITS(mp), ALLOC(mp));
2864 USED(mp) = 1;
2865 SIGN(mp) = MP_ZPOS;
2870 dp = DIGITS(mp);
2871 for(ix = p; ix < USED(mp); ix++)
2876 while(ix < USED(mp))
2880 s_mp_clamp(mp);
2886 /* {{{ s_mp_div_2(mp) */
2889 void s_mp_div_2(mp_int *mp)
2891 s_mp_div_2d(mp, 1);
2897 /* {{{ s_mp_mul_2(mp) */
2899 mp_err s_mp_mul_2(mp_int *mp)
2902 mp_digit kin = 0, kout, *dp = DIGITS(mp);
2906 for(ix = 0; ix < USED(mp); ix++) {
2915 if(ix >= ALLOC(mp)) {
2916 if((res = s_mp_grow(mp, ALLOC(mp) + 1)) != MP_OKAY)
2918 dp = DIGITS(mp);
2922 USED(mp) += 1;
2931 /* {{{ s_mp_mod_2d(mp, d) */
2938 void s_mp_mod_2d(mp_int *mp, mp_digit d)
2942 mp_digit dmask, *dp = DIGITS(mp);
2944 if(ndig >= USED(mp))
2952 for(ix = ndig + 1; ix < USED(mp); ix++)
2955 s_mp_clamp(mp);
2961 /* {{{ s_mp_mul_2d(mp, d) */
2968 mp_err s_mp_mul_2d(mp_int *mp, mp_digit d)
2975 if((res = s_mp_lshd(mp, d / DIGIT_BIT)) != MP_OKAY)
2978 dp = DIGITS(mp); used = USED(mp);
2986 if((res = s_mp_grow(mp, used + 1)) != MP_OKAY)
2988 dp = DIGITS(mp);
3004 USED(mp) += 1;
3007 s_mp_clamp(mp);
3014 /* {{{ s_mp_div_2d(mp, d) */
3021 void s_mp_div_2d(mp_int *mp, mp_digit d)
3024 mp_digit save, next, mask, *dp = DIGITS(mp);
3026 s_mp_rshd(mp, d / DIGIT_BIT);
3032 for(ix = USED(mp) - 1; ix >= 0; ix--) {
3038 s_mp_clamp(mp);
3085 /* {{{ s_mp_add_d(mp, d) */
3087 /* Add d to |mp| in place */
3088 mp_err s_mp_add_d(mp_int *mp, mp_digit d) /* unsigned digit addition */
3091 mp_size ix = 1, used = USED(mp);
3092 mp_digit *dp = DIGITS(mp);
3108 if((res = s_mp_pad(mp, USED(mp) + 1)) != MP_OKAY)
3111 DIGIT(mp, ix) = k;
3120 /* {{{ s_mp_sub_d(mp, d) */
3122 /* Subtract d from |mp| in place, assumes |mp| > d */
3123 mp_err s_mp_sub_d(mp_int *mp, mp_digit d) /* unsigned digit subtract */
3126 mp_size ix = 1, used = USED(mp);
3127 mp_digit *dp = DIGITS(mp);
3143 s_mp_clamp(mp);
3203 /* {{{ s_mp_div_d(mp, d, r) */
3206 s_mp_div_d(mp, d, r)
3208 Compute the quotient mp = mp / d and remainder r = mp mod d, for a
3212 mp_err s_mp_div_d(mp_int *mp, mp_digit d, mp_digit *r)
3217 mp_digit *dp = DIGITS(mp), *qp;
3224 if((res = mp_init_size(&quot, USED(mp))) != MP_OKAY)
3227 USED(&quot) = USED(mp); /* so clamping will work below */
3231 for(ix = USED(mp) - 1; ix >= 0; ix--) {
3249 mp_exch(&quot, mp);