NAME
- keyring: IPint - `infinite' precision integer utility functions
SYNOPSIS
-
include "keyring.m" keyring:= load Keyring Keyring->PATH; IPint: adt { 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; iptobebytes: fn(i: self ref IPint): array of byte; bebytestoip: 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; random: fn(minbits, maxbits: int): ref IPint; copy: fn(i: self ref IPint): ref IPint; 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; shl: fn(i: self ref IPint, n: int): ref IPint; shr: fn(i: self ref IPint, n: int): ref IPint; and: fn(i1: self ref IPint, i2: ref IPint): ref IPint; ori: fn(i1: self ref IPint, i2: ref IPint): ref IPint; not: fn(i: self ref IPint): ref IPint; xor: fn(i1: self ref IPint, i2: ref IPint): ref IPint; }; DESCRIPTION
-
IPint
provides the following arbitrary-length integer manipulation functions required for cryptographic support in Limbo:
- i.iptob64()
- Returns a string that represents a large integer textually in base 64 for convenient transmission over a network connection.
- b64toip(str)
- Returns the
IPint
represented by the base-64 encoded
str.
- i.iptobytes()
- Returns an array of bytes representing a large integer. The representation includes both positive and negative numbers.
- bytestoip(buf)
- The inverse operation of
iptobytes.
- i.iptobebytes()
- Returns an array of bytes in big-endian format representing the magnitude of a large integer; used for instance to pass a value to
ssl(3).
Only non-negative numbers are represented.
- bebytestoip(buf)
- The inverse operation of
iptobebytes.
- inttoip(i)
- Creates a new large integer from integer
i.
- i.iptoint()
- Converts a large integer
i
to an
int;
returns 0 on error.
- i.iptostr(base)
- Converts a large integer to a string in base
base;
returns nil on error.
Only the bases 10, 16, 32, and 64 are
supported. Anything else defaults to 16.
- strtoip(str,base)
- Converts a string
str
representing a number in in base
base
to a large integer; returns nil on error.
Only the bases 10, 16, 32, and 64 are
supported.
- random(minbits,maxbits)
- Returns a large random number with length from
minbits
to
maxbits.
The largest number allowed in the current implementation is
2^8192-1 .
The seed for the generator is obtained by duelling clocks.
- i.copy()
- Returns a reference to the same value as
i.
- i.bits()
- Returns the number of bits of precision of
i.
- base.expmod(exp , mod)
- Returns
(base**exp) mod mod.
- i1.add(i2)
- Returns
(i1+i2).
- i1.sub(i2)
- Returns
(i1-i2).
- i1.mul(i2)
- Returns
i1*i2.
- i1.div(i2)
- Returns
(i1/i2,
i1modi2).
- i1.eq(i2)
- Returns 1 if
i1
and
i2
are equal; 0 otherwise.
- i1.cmp(i2)
- Compares two large integers, returning 1 if
i1
is larger,
-1 if
i2
is larger, and 0 if they are equal.
- i.shl(n)
- Returns
i<<n
- i.shr(n)
- Returns
i>>n
- i1.and(i2)
- Returns
i&n,
bitwise AND
- i1.ori(i2)
- Returns
i|n,
bitwise inclusive-OR
(it is
ori
because plain
or
is a Limbo keyword)
- i.not()
- Returns
~i,
bitwise ones-complement
- i1.xor(i2)
- Returns i^n, bitwise exclusive-OR
| KEYRING-IPINT(2) | Rev: Tue Jan 29 13:11:44 GMT 2008 |