ipints.m 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. IPints: module
  2. {
  3. PATH: con "$IPints";
  4. # infinite precision integers
  5. IPint: adt
  6. {
  7. x: int; # dummy for C compiler for runt.h
  8. # conversions
  9. iptob64: fn(i: self ref IPint): string;
  10. iptob64z: fn(i: self ref IPint): string;
  11. b64toip: fn(str: string): ref IPint;
  12. iptobytes: fn(i: self ref IPint): array of byte;
  13. iptobebytes: fn(i: self ref IPint): array of byte;
  14. bytestoip: fn(buf: array of byte): ref IPint;
  15. bebytestoip: fn(mag: array of byte): ref IPint;
  16. inttoip: fn(i: int): ref IPint;
  17. iptoint: fn(i: self ref IPint): int;
  18. iptostr: fn(i: self ref IPint, base: int): string;
  19. strtoip: fn(str: string, base: int): ref IPint;
  20. # create a random large integer
  21. random: fn(nbits: int): ref IPint;
  22. # operations
  23. bits: fn(i: self ref IPint): int;
  24. expmod: fn(base: self ref IPint, exp, mod: ref IPint): ref IPint;
  25. invert: fn(base: self ref IPint, mod: ref IPint): ref IPint;
  26. add: fn(i1: self ref IPint, i2: ref IPint): ref IPint;
  27. sub: fn(i1: self ref IPint, i2: ref IPint): ref IPint;
  28. neg: fn(i: self ref IPint): ref IPint;
  29. mul: fn(i1: self ref IPint, i2: ref IPint): ref IPint;
  30. div: fn(i1: self ref IPint, i2: ref IPint): (ref IPint, ref IPint);
  31. mod: fn(i1: self ref IPint, i2: ref IPint): ref IPint;
  32. eq: fn(i1: self ref IPint, i2: ref IPint): int;
  33. cmp: fn(i1: self ref IPint, i2: ref IPint): int;
  34. copy: fn(i: self ref IPint): ref IPint;
  35. # shifts
  36. shl: fn(i: self ref IPint, n: int): ref IPint;
  37. shr: fn(i: self ref IPint, n: int): ref IPint;
  38. # bitwise
  39. and: fn(i1: self ref IPint, i2: ref IPint): ref IPint;
  40. ori: fn(i1: self ref IPint, i2: ref IPint): ref IPint;
  41. xor: fn(i1: self ref IPint, i2: ref IPint): ref IPint;
  42. not: fn(i1: self ref IPint): ref IPint;
  43. };
  44. # primes
  45. probably_prime: fn(n: ref IPint, nrep: int): int;
  46. genprime: fn(nbits: int, nrep: int): ref IPint;
  47. genstrongprime: fn(nbits: int, nrep: int): ref IPint;
  48. gensafeprime: fn(nbits: int, nrep: int): (ref IPint, ref IPint);
  49. DSAprimes: fn(): (ref IPint, ref IPint, array of byte);
  50. };