OMBLOWFISH is a low-level OmniMark interface to the Blowfish cryptographic algorithm. The Blowfish encryption algorithm is described in [1] Bruce Schneier, ``Description of a New Variable-Length Key, 64-bit Block Cipher (Blowfish)'', Fast Software Encryption, Cambridge Security Workshop, p. 191--204, December 09--11, 1993.
The library provides functions for encoding and decoding 64-bit
quantities using an encryption key. These 64-bit quantities are
represented as OmniMark string
s with a length of eight characters. An
input string
longer than eight characters is rejected; an input string
shorter than eight characters is padded to a length of eight
characters using null
bytes.
A more convenient interface to the Blowfish algorithm is provided by the OMFFBLOWFISH library, which provides filter functions for encrypting and decrypting data in a streaming fashion. It, in turn, uses this library for its low-level implementation.
The OMBLOWFISH library provides three external functions and one external data type; it also provides one conversion function as a convenience.
state
is an external data type that represents the state of a
decryption or encryption calculation.
decode
is an external function that takes a 64-bit quantity and a
state
, and returns the decrypted value as a 64-bit quantity,
encased as a string
.
encode
is an external function that takes a 64-bit quantity and a
state
, and returns the encrypted value as a 64-bit quantity,
encased as a string
set-encryption-key
takes an encryption key as a string
and a
state, and initializes the state
using the encryption key.
The conversion function provided by OMBLOWFISH takes a string
and
returns a fully-initialized state
. This can be convenient when
initializing a local state
.
To use OMBLOWFISH in your OmniMark program, you must import it into
your program using a statement like this:
import "omblowfish.xmd" prefixed by blowfish.
This is a complete list of the OMBLOWFISH library external exceptions that may be
thrown back to the calling OmniMark program. These are all catchable using
the #external-exception
label.