Botan is a crypto library written in C++. It provides a variety of cryptographic algorithms, including common ones such as AES, MD5, SHA, HMAC, RSA, Diffie-Hellman, DSA, and ECDSA, as well as many others that are more obscure or specialized. It also offers SSL/TLS (client and server), X.509v3 certificates and CRLs, and PKCS #10 certificate requests. A message processing system that uses a filter/pipeline metaphor allows for many common cryptographic tasks to be completed with just a few lines of code. Assembly and SIMD optimizations for common CPUs offers speedups for critical algorithms like AES and SHA-1.
SIMD Viterbi Decoder provides library functions to decode certain popular error correction codes. This version supports two codes: a rate 1/2, constraint length 7 (r=1/2, k=7) code, and an r=1/2, k=9 code. Four implementations of each decoder are provided. One is in portable C and should run in any GNU C environment. The other three use the IA32 SIMD (single instruction, multiple data) instruction sets: MMX, SSE, and SSE2. The SSE version of the k=7 decoder executes at ~9 megabits/sec on a 1GHz Pentium-III.
DSP implements several low-level digital signal processing (DSP) primitives accelerated, when available, by the Intel/AMD SIMD instruction sets MMX/SSE/SSE2. Portable C versions are provided for compatibility on non-IA32 machines. Routines are provided to compute 16-bit integer dot products (FIR filtering, correlation); sum-of-squares (signal energy measurement), and peak sample detection (for automatic gain control, etc.).
Libecc is a C++ elliptic curve cryptography library that supports fixed-size keys for maximum speed. The goal of this project is to become the first free Open Source library providing the means to generate safe elliptic curves, and to provide an important source of information for anyone with general interest in ECC.
Matjito is a pluggable library for the rapid computation of mathematical expressions in C++ programs. Its accepts either an expression string with information about the mapping of symbols to variables and functions or an n-ary tree representing the expression. It features an x86 JIT that allows expressions to be computed very quickly, and is comparable or even better than code generated by optimizing C compilers. It can be used on non-x86 CPUs in a slower interpreting mode.