bn_mp_dr_is_modulus.c 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. #include <tommath.h>
  2. #ifdef BN_MP_DR_IS_MODULUS_C
  3. /* LibTomMath, multiple-precision integer library -- Tom St Denis
  4. *
  5. * LibTomMath is a library that provides multiple-precision
  6. * integer arithmetic as well as number theoretic functionality.
  7. *
  8. * The library was designed directly after the MPI library by
  9. * Michael Fromberger but has been written from scratch with
  10. * additional optimizations in place.
  11. *
  12. * The library is free for all purposes without any express
  13. * guarantee it works.
  14. *
  15. * Tom St Denis, tomstdenis@gmail.com, http://math.libtomcrypt.com
  16. */
  17. /* determines if a number is a valid DR modulus */
  18. int mp_dr_is_modulus(mp_int *a)
  19. {
  20. int ix;
  21. /* must be at least two digits */
  22. if (a->used < 2) {
  23. return 0;
  24. }
  25. /* must be of the form b**k - a [a <= b] so all
  26. * but the first digit must be equal to -1 (mod b).
  27. */
  28. for (ix = 1; ix < a->used; ix++) {
  29. if (a->dp[ix] != MP_MASK) {
  30. return 0;
  31. }
  32. }
  33. return 1;
  34. }
  35. #endif
  36. /* $Source: /cvs/libtom/libtommath/bn_mp_dr_is_modulus.c,v $ */
  37. /* $Revision: 1.3 $ */
  38. /* $Date: 2006/03/31 14:18:44 $ */