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