include "keyring.m" keyring:= load Keyring Keyring->PATH; #infinite precision integers IPint: adt { x: int; #conversions iptob64: fn(i: self ref IPint): string; b64toip: fn(str: string) : ref IPint; iptobytes: fn(i: self ref IPint): array of byte; bytestoip: fn(buf: array of byte): ref IPint; inttoip: fn(i: int): ref IPint; iptoint: fn(i: self ref IPint): int; iptostr: fn(i: self ref IPint, base: int): string; strtoip: fn(str: string, base: int): ref IPint; # create a random large integer # using the accelerated generator random: fn(minbits, maxbits: int): ref IPint; #operations bits: fn(i: self ref IPint): int; expmod: fn(base: self ref IPint, exp, mod: ref IPint):ref IPint; add: fn(i1: self ref IPint, i2: ref IPint): ref IPint; sub: fn(i1: self ref IPint, i2: ref IPint): ref IPint; neg: fn(i: self ref IPint): ref IPint; mul: fn(i1: self ref IPint, i2: ref IPint): ref IPint; div: fn(i1: self ref IPint, i2: ref IPint): (ref IPint, ref IPint); eq: fn(i1: self ref IPint, i2: ref IPint): int; cmp: fn(i1: self ref IPint, i2: ref IPint): int; };
iptob64: fn(i: self ref IPint): string;
## returns base 64 string; nil on error.The iptob64 function converts a large integer to a base 64 string for convenient transmission over a network connection.
b64toip: fn(str: string): ref IPint;
## returns nil on error.The b64toip function performs the inverse operation of iptob64.
iptobytes: fn(i: self ref IPint): array of byte;
## returns nil on error.The iptobytes function converts a large integer to an array of bytes for faster communication to the kernel ssl device.
bytestoip: fn(buf: array of byte): ref IPint;
## returns nil on error.The bytestoip function performs the inverse operation of iptobytes.
inttoip: fn(i: int): ref IPint;
## returns nil on error.The inttoip function creates a new large integer from an int.
iptoint: fn(i: self ref IPint): int;
## returns converted integer; 0 on error.The iptoint function converts a large integer to an int.
iptostr: fn(i: self ref IPint, base: int): string;
## returns nil on error.The iptostr function converts a large integer to a string in base base.
strtoip: fn(str: string, base: int): ref IPint;
## returns nil on error.The strtoip function converts a string in base base to a large integer.
random: fn(minbits, maxbits: int): ref IPint;
## returns nil on error.The random function generates large random numbers with a range of minbits to maxbits. The maximum number allowed in the current implementation is 228192-1. The seed for the generator is obtained by dueling clocks. IPint types are manipulated during security protocols.
bits: fn(i: self ref IPint): intThe bits function returns the number of bits of precision in IPint.
expmod: fn(base: self ref IPint, exp, mod: ref IPint):
ref IPint;
## returns nil on error.The expmod function returns baseexp mod mod.
add: fn(i1: self ref IPint, i2: ref IPint): ref IPint;
## returns nil on error.The add function returns the sum of i1 and i2.
sub: fn(i1: self ref IPint, i2: ref IPint): ref IPint;
## returns nil on error.The sub function returns the difference of i1 and i2.
mul: fn(i1: self ref IPint, i2: ref IPint): ref IPint;
## returns nil on error.The mul function returns the product of i1 and i2.
div: fn(i1: self ref IPint, i2: ref IPint):
(ref IPint, ref IPint);
## returns (nil, nil) on error.The div function returns a tuple that represents the (quotient, remainder) of i1 divided by i2.
eq: fn(i1: self ref IPint, i2: ref IPint): int;
## returns 1 for equality; 0 otherwise.The eq function is a simple comparison of two IPints, which returns 1 if the two are equal, 0 otherwise.
cmp: fn(i1: self ref IPint, i2: ref IPint): int;The cmp function compares two large integers, returning 1 if i1 is larger and -1 if i2 is larger.