CTC Library
The CTC library is collection of PGP compatible C routines developed by
Ian
Miller and
Mr.
Tines. The library provides all the cryptographic, compression and
file formatting functions necessary to write PGP compatible applications.
General Design Aims
This library was developed with the following aims:-
-
allowing inter-operability with PGP.
-
Machine and compiler independence.
-
Extensibility; especially with respect to allow different cryptographic
algorithms.
-
Minimium of licencing and patent restrictions on use.
-
Modularity
-
Ease of auditing.
Inevitably the extension to use different algorithms has required
extension
to the original file format accomodate them.
Library Structure
The library consists of a number of separate modules. Typically each module
consists of a single source file <name>.c and a single header
file <name>.h. The header file defines the entry points that
are externally callable. The modules are of three types:-
Application Callable Modules
These are modules with support interfaces that may be called by applications.
Applications writers should, if at all possible, limit themselves to calling
the entry points of these modules. The following modules are application
callable:-
-
armour: Providing ASCII-armour coding and decoding.
-
bignums: Providing multiple precision positive
integer arithmetic.
-
keyhash: Providing key management.
-
ctc: Providing high level encryption and decryption
functions.
It is expected that most applications will directly call only ctc
and keyhash.
Internal Modules
These are modules that are used internally within the CTC library. The
interfaces to these modules are liable to change with warning at future
releases. The direct calling of these modules by applications should be
avoided if possible.
This class of module includes the Cipher-Control modules, these are
the modules that control which algorithms are executed at run-time. Anyone
wishing to extend the library to support further algorithms will need to
make modifications to one of these modules. The Cipher-Control modules
are:-
-
cipher: Controlling symmetric encryption algorithms
-
digest: Controlling message digest algorithms
Future releases may have further control modules to handle PKE algorithms.
Machine Dependent Modules
These are modules that need to be provided by the application. In some
instances there is a standard C implementation of these modules, which
is provided with the library but this implementation will not necessarily
be suitable in all circumstances. The machine dependent modules are:-
-
callbacks: Providing use interaction and condition
reporting functions.
-
port_io: Providing file access
-
rawrand: Providing true random number generation
-
usrbreak: Providing user interrupt detection
webmaster@bifroest.demon.co.uk