Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ (2) — Inferno 3rd Edition

Media Vault

Software Library

Restoration Projects

Artifacts Sought

KEYRING-IPINT(2)

NAME

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;
  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; };

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.

strtoip(str,base)
Converts a string str representing a number in in base base to a large integer; returns nil on error. 

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.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. 

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026