home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / crypl200.zip / BNLIB / BN.C next >
Text File  |  1996-09-22  |  3KB  |  87 lines

  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.  
  8. #if defined( INC_ALL ) || defined( INC_CHILD )
  9.   #include "bn.h"
  10. #else
  11.   #include "bnlib/bn.h"
  12. #endif /* Compiler-specific includes */
  13.  
  14. /* Functions */
  15. void
  16. bnBegin(struct BigNum *bn)
  17. {
  18.     bn->ptr = 0;
  19.     bn->size = 0;
  20.     bn->allocated = 0;
  21. }
  22.  
  23. void
  24. bnSwap(struct BigNum *a, struct BigNum *b)
  25. {
  26.     void *p;
  27.     unsigned t;
  28.  
  29.     p = a->ptr;
  30.     a->ptr = b->ptr;
  31.     b->ptr = p;
  32.  
  33.     t = a->size;
  34.     a->size = b->size;
  35.     b->size = t;
  36.  
  37.     t = a->allocated;
  38.     a->allocated = b->allocated;
  39.     b->allocated = t;
  40. }
  41.  
  42. void (*bnEnd)(struct BigNum *bn);
  43. int (*bnPrealloc)(struct BigNum *bn, unsigned bits);
  44. int (*bnCopy)(struct BigNum *dest, struct BigNum const *src);
  45. void (*bnNorm)(struct BigNum *bn);
  46. void (*bnExtractBigBytes)(struct BigNum const *bn, unsigned char *dest,
  47.     unsigned lsbyte, unsigned len);
  48. int (*bnInsertBigBytes)(struct BigNum *bn, unsigned char const *src,
  49.     unsigned lsbyte, unsigned len);
  50. void (*bnExtractLittleBytes)(struct BigNum const *bn, unsigned char *dest,
  51.     unsigned lsbyte, unsigned len);
  52. int (*bnInsertLittleBytes)(struct BigNum *bn, unsigned char const *src,
  53.     unsigned lsbyte, unsigned len);
  54. unsigned (*bnLSWord)(struct BigNum const *src);
  55. unsigned (*bnBits)(struct BigNum const *src);
  56. int (*bnAdd)(struct BigNum *dest, struct BigNum const *src);
  57. int (*bnSub)(struct BigNum *dest, struct BigNum const *src);
  58. int (*bnCmpQ)(struct BigNum const *a, unsigned b);
  59. int (*bnSetQ)(struct BigNum *dest, unsigned src);
  60. int (*bnAddQ)(struct BigNum *dest, unsigned src);
  61. int (*bnSubQ)(struct BigNum *dest, unsigned src);
  62. int (*bnCmp)(struct BigNum const *a, struct BigNum const *b);
  63. int (*bnSquare)(struct BigNum *dest, struct BigNum const *src);
  64. int (*bnMul)(struct BigNum *dest, struct BigNum const *a,
  65.     struct BigNum const *b);
  66. int (*bnMulQ)(struct BigNum *dest, struct BigNum const *a, unsigned b);
  67. int (*bnDivMod)(struct BigNum *q, struct BigNum *r, struct BigNum const *n,
  68.     struct BigNum const *d);
  69. int (*bnMod)(struct BigNum *dest, struct BigNum const *src,
  70.     struct BigNum const *d);
  71. unsigned (*bnModQ)(struct BigNum const *src, unsigned d);
  72. int (*bnExpMod)(struct BigNum *result, struct BigNum const *n,
  73.     struct BigNum const *exp, struct BigNum const *mod);
  74. int (*bnDoubleExpMod)(struct BigNum *dest,
  75.     struct BigNum const *n1, struct BigNum const *e1,
  76.     struct BigNum const *n2, struct BigNum const *e2,
  77.     struct BigNum const *mod);
  78. int (*bnTwoExpMod)(struct BigNum *n, struct BigNum const *exp,
  79.     struct BigNum const *mod);
  80. int (*bnGcd)(struct BigNum *dest, struct BigNum const *a,
  81.     struct BigNum const *b);
  82. int (*bnInv)(struct BigNum *dest, struct BigNum const *src,
  83.     struct BigNum const *mod);
  84. int (*bnLShift)(struct BigNum *dest, unsigned amt);
  85. void (*bnRShift)(struct BigNum *dest, unsigned amt);
  86. unsigned (*bnMakeOdd)(struct BigNum *n);
  87.