fingerprint/src/Poly.i3


Copyright (C) 1994, Digital Equipment Corp.

INTERFACE Poly;
This module provides polynomials of degree [0..63] with coefficients in the field Z(2).

TYPE
  T      = ARRAY [0..1] OF Int32;
  Int32  = [-16_7fffffff-1 .. 16_7fffffff];
  Card32 = [0 .. LAST (Int32)];
  Byte   = BITS 8 FOR [0..255];
  Bytes  = ARRAY [0..7] OF Byte;

CONST
  ZERO = T{ 0, 0 };
  ONE  = T{ 0, FIRST (Int32) };
  X    = T{ 0, 16_40000000 };

PROCEDURE Sum     (READONLY p, q: T): T; (* returns (p+q) *)
PROCEDURE Product (READONLY p, q: T): T; (* returns (p * q MOD PolyBasis.P) *)
PROCEDURE TimesX  (READONLY p : T)  : T; (* returns (p * X^1) *)
PROCEDURE Power   (d: Card32)       : T; (* returns (x^d MOD PolyBasis.P) *)

PROCEDURE ComputeMod (READONLY init: T;  addr: ADDRESS;  len: INTEGER): T;
This procedure assumes that the 'len' bytes beginning at address 'addr' define a polynomial, A(x), of degree '(8*len)'. The procedure returns '(init*x^(8*len) + A(x)) MOD PolyBasis.P'

PROCEDURE ToBytes   (READONLY t: T;  VAR b: Bytes);
PROCEDURE FromBytes (READONLY b: Bytes;  VAR t: T);

END Poly.