bn_mp_reduce_2k.c

来自「tommath库」· C语言 代码 · 共 59 行

C
59
字号
#include <tommath.h>#ifdef BN_MP_REDUCE_2K_C/* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org *//* reduces a modulo n where n is of the form 2**p - d */intmp_reduce_2k(mp_int *a, mp_int *n, mp_digit d){   mp_int q;   int    p, res;      if ((res = mp_init(&q)) != MP_OKAY) {      return res;   }      p = mp_count_bits(n);    top:   /* q = a/2**p, a = a mod 2**p */   if ((res = mp_div_2d(a, p, &q, a)) != MP_OKAY) {      goto ERR;   }      if (d != 1) {      /* q = q * d */      if ((res = mp_mul_d(&q, d, &q)) != MP_OKAY) {          goto ERR;      }   }      /* a = a + q */   if ((res = s_mp_add(a, &q, a)) != MP_OKAY) {      goto ERR;   }      if (mp_cmp_mag(a, n) != MP_LT) {      s_mp_sub(a, n, a);      goto top;   }   ERR:   mp_clear(&q);   return res;}#endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?