xref: /inferno-os/module/ipints.m (revision 7de2b42d50e3c05cc143e7b51284009b5e185581)
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