# Blowfish and Blowfish2 Encryption Algorithm [![Build Status](https://github.com/avinal/blowfish/actions/workflows/cmake.yml/badge.svg)](https://github.com/avinal/blowfish/actions/workflows/cmake.yml) Blowfish is a symmetric block cipher that can be used as a drop-in replacement for DES or IDEA. It takes a variable-length key, from 32 bits to 448 bits, making it ideal for both domestic and exportable use. Blowfish was designed in 1993 by Bruce Schneier as a fast, free alternative to existing encryption algorithms. Since then it has been analyzed considerably, and it is slowly gaining acceptance as a strong encryption algorithm. Blowfish is not patented and license-free, and is available free for all uses. Blowfish 2 was released in 2005. It has exactly the same design but has twice as many S tables and uses 64-bit integers instead of 32-bit integers. It no longer works on 64-bit blocks but on 128-bit blocks like AES. 128-bit block, 64 rounds, key up to 4224 bits. ## About this project This is a C++ implementation of the encryption algorithm. ## How to use this in your project? 1. You may fork it and use it like any other source file in your project. You only need [blowfish.hpp](include/blowfish/blowfish.hpp) and [blowfish.cpp](src/blowfish.cpp) files. Just modify the header as per your convenience. 2. If you are using CMake, the work is lot easier. You can add this as a git submodule. It isolates your project from this dependency. ```bash # In your project root type these commands git submodule add https://github.com/avinal/blowfish # considering this addition is your only change git commit -m "blowfish submodule added" git push origin main ``` Add this to your CMakeLists.txt as well. ## Building This library has no dependencies on any other code. Just a C++ compiler should be enough to build this. Although this library is supposed to be used under some other project, sometimes you may need to build this. Here are the prerequisites: - [CMake](https://cmake.org/download/) - [G++](https://gcc.gnu.org/) or [Clang](https://clang.llvm.org/) - [Make](https://www.gnu.org/software/make/) or [Ninja Build](https://ninja-build.org/) or any other CMake compatible generator. Here is how I install them on Fedora: ```shell sudo dnf install clang cmake g++ make ninja-build ``` Configure CMake, enabled debug for development purposes: ```shell cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Debug ``` Build using configured generator: ```shell cmake --build build --config Debug ``` ## References - [Description of a new variable-length key, 64-bit block cipher (Blowfish)](https://link.springer.com/chapter/10.1007/3-540-58108-1_24) - [The Blowfish Encryption Algorithm](https://www.schneier.com/academic/blowfish/) - [The Blowfish 2 C Implementation](https://github.com/erwanmilon/blowfish2/)