Blowfish (OMBLOWFISH)

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 strings 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 a data type that represents the state of a decryption or encryption calculation.
  • decode is a 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 a 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.

Usage Note

To use OMBLOWFISH, you must import it into your program using an import declaration such as:

  import "omblowfish.xmd" prefixed by blowfish.

OMBLOWFISH Generated Exceptions

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.

  • OMBLOWFISH_001: Unable to allocate encryption state.
  • OMBLOWFISH_101: The Blowfish state is not initialized.
  • OMBLOWFISH_102: The length of the input string cannot exceed eight characters.
  • OMBLOWFISH_103: The length of the input string cannot be zero.