Cyfer - A cryptographic library

      Cyfer is a portable low-level cryptographic library with support for several programming languages. Cyfer provides implementations of many message digest (hash), block and stream cipher, and public-key algorithms.

      The library is extremely modular, providing easy way to add or modify algorithm implementations, or even separating the particular algorithm from the library physically (suitable for embedded environments).

      The generic API provides a consistent way to use the library algorithms, and allows for algorithm selection at either the compile time or at runtime, so the application which uses Cyfer can be completely unaware of the algorithm specifics.

      Cyfer is a low-level library. It deals only with various algorithms, and completely avoids the problems of data representation. This is most evident in public-key sections - cyfer completely avoids the existing Public Key Infrastructure (PKI) standards. If you need this functionality, use the excellent and free OpenSSL, or some similar library.

      The library design concept emphasises on simplicity and elegance (of both the algorithm implementations (if possible:) and the support library code), not maximizing performance or minimizing memory footprint. The algorithm implementations are straightforward, so they can be used for educational purposes.

      Cyfer is portable to any platform with sane C development environment, the only requirement being the availability of the GMP (GNU Multiple Precision arithmetic) library. As the GMP is used only for public-key cryptography, hash or symmetric cipher components should work everywhere.

      Cyfer was developed as a part of my student project for "Operating Systems 2 : Computer Security" course at Faculty of Electrical Engineering and Computer Science (FER) in Zagreb, Croatia, but continues on as an independent open soruce project under the BSD license.

Newsflash:

[2005-11-24] A bug in examples code
A bug was found in the encdec() function in the examples/pk.c code. The function doesn't clean up properly, leaving open files. If these files are reopened, the position indicator doesn't rewind and they seem empty. The fix is to put line fclose(in); fclose(out); at the end of the function.
[2004-09-26] Cyfer 0.6.0 - first public release
After an approximately ten months of (sometimes fast, sometimes freezed) development, this is the first public release of Cyfer. Finally :) This version provides support for 9 message digest algorithms, 12 symmetric ciphers and 4 public-key algorithms, and language bindings for C, C++, Java, Python, PHP, Perl and C# languages.

Copyright © 2004. by Senko Rasic