bn.c
上传用户:zbbssh
上传日期:2007-01-08
资源大小:196k
文件大小:3k
源码类别:

CA认证

开发平台:

C/C++

  1. /*
  2.  * bn.c - the high-level bignum interface
  3.  *
  4.  * Copyright (c) 1995  Colin Plumb.  All rights reserved.
  5.  * For licensing and other legal details, see the file legal.c.
  6.  */
  7. #include "bn.h"
  8. /* Functions */
  9. void
  10. bnBegin(struct BigNum *bn)
  11. {
  12. bn->ptr = 0;
  13. bn->size = 0;
  14. bn->allocated = 0;
  15. }
  16. void
  17. bnSwap(struct BigNum *a, struct BigNum *b)
  18. {
  19. void *p;
  20. unsigned t;
  21. p = a->ptr;
  22. a->ptr = b->ptr;
  23. b->ptr = p;
  24. t = a->size;
  25. a->size = b->size;
  26. b->size = t;
  27. t = a->allocated;
  28. a->allocated = b->allocated;
  29. b->allocated = t;
  30. }
  31. void (*bnEnd)(struct BigNum *bn);
  32. int (*bnPrealloc)(struct BigNum *bn, unsigned bits);
  33. int (*bnCopy)(struct BigNum *dest, struct BigNum const *src);
  34. void (*bnNorm)(struct BigNum *bn);
  35. void (*bnExtractBigBytes)(struct BigNum const *bn, unsigned char *dest,
  36. unsigned lsbyte, unsigned len);
  37. int (*bnInsertBigBytes)(struct BigNum *bn, unsigned char const *src,
  38. unsigned lsbyte, unsigned len);
  39. void (*bnExtractLittleBytes)(struct BigNum const *bn, unsigned char *dest,
  40. unsigned lsbyte, unsigned len);
  41. int (*bnInsertLittleBytes)(struct BigNum *bn, unsigned char const *src,
  42. unsigned lsbyte, unsigned len);
  43. unsigned (*bnLSWord)(struct BigNum const *src);
  44. unsigned (*bnBits)(struct BigNum const *src);
  45. int (*bnAdd)(struct BigNum *dest, struct BigNum const *src);
  46. int (*bnSub)(struct BigNum *dest, struct BigNum const *src);
  47. int (*bnSetQ)(struct BigNum *dest, unsigned src);
  48. int (*bnAddQ)(struct BigNum *dest, unsigned src);
  49. int (*bnSubQ)(struct BigNum *dest, unsigned src);
  50. int (*bnCmp)(struct BigNum const *a, struct BigNum const *b);
  51. int (*bnSquare)(struct BigNum *dest, struct BigNum const *src);
  52. int (*bnMul)(struct BigNum *dest, struct BigNum const *a,
  53. struct BigNum const *b);
  54. int (*bnMulQ)(struct BigNum *dest, struct BigNum const *a, unsigned b);
  55. int (*bnDivMod)(struct BigNum *q, struct BigNum *r, struct BigNum const *n,
  56. struct BigNum const *d);
  57. int (*bnMod)(struct BigNum *dest, struct BigNum const *src,
  58. struct BigNum const *d);
  59. unsigned (*bnModQ)(struct BigNum const *src, unsigned d);
  60. int (*bnExpMod)(struct BigNum *result, struct BigNum const *n,
  61. struct BigNum const *exp, struct BigNum const *mod);
  62. int (*bnDoubleExpMod)(struct BigNum *dest,
  63. struct BigNum const *n1, struct BigNum const *e1,
  64. struct BigNum const *n2, struct BigNum const *e2,
  65. struct BigNum const *mod);
  66. int (*bnTwoExpMod)(struct BigNum *n, struct BigNum const *exp,
  67. struct BigNum const *mod);
  68. int (*bnGcd)(struct BigNum *dest, struct BigNum const *a,
  69. struct BigNum const *b);
  70. int (*bnInv)(struct BigNum *dest, struct BigNum const *src,
  71. struct BigNum const *mod);
  72. int (*bnLShift)(struct BigNum *dest, unsigned amt);
  73. void (*bnRShift)(struct BigNum *dest, unsigned amt);
  74. unsigned (*bnMakeOdd)(struct BigNum *n);