Skip to content

Commit

Permalink
feat: add blowfish2 128 bit implementation
Browse files Browse the repository at this point in the history
- regular blowfish only uses 64 bits
- blowfish2 uses 128 bits like AES

Signed-off-by: Avinal Kumar <[email protected]>
  • Loading branch information
avinal committed Sep 5, 2024
1 parent b6931e3 commit 9d93ea6
Show file tree
Hide file tree
Showing 7 changed files with 945 additions and 30 deletions.
21 changes: 16 additions & 5 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,16 @@ message (STATUS "CMake version: ${CMAKE_VERSION}")
message (STATUS "Project version: ${PROJECT_VERSION}")

set(BLOWFISH_SRC ${PROJECT_SOURCE_DIR}/src/blowfish.cc)
source_group(src FILES ${BLOWFISH_SRC})
set(BLOWFISH2_SRC ${PROJECT_SOURCE_DIR}/src/blowfish2.cc)
source_group(src FILES ${BLOWFISH_SRC} ${BLOWFISH2_SRC})

set(BLOWFISH_TEST ${PROJECT_SOURCE_DIR}/tests/Main.cpp)
source_group(tests FILES ${BLOWFISH_TEST})
set(BLOWFISH2_TEST ${PROJECT_SOURCE_DIR}/tests/Main2.cpp)
source_group(tests FILES ${BLOWFISH_TEST} ${BLOWFISH2_TEST})

set(BLOWFISH_INC ${PROJECT_SOURCE_DIR}/include/blowfish/blowfish.h)
source_group(include FILES ${BLOWFISH_INC})
set(BLOWFISH2_INC ${PROJECT_SOURCE_DIR}/include/blowfish/blowfish2.h)
source_group(include FILES ${BLOWFISH_INC} ${BLOWFISH2_INC})

set(BLOWFISH_DOC
README.md
Expand All @@ -37,6 +40,14 @@ set(BLOWFISH_SCRIPTS
source_group(scripts FILES ${BLOWFISH_SCRIPTS})

add_library(blowfish ${BLOWFISH_SRC} ${BLOWFISH_INC} ${BLOWFISH_SCRIPTS} ${BLOWFISH_DOC})
add_executable(bf_test ${BLOWFISH_TEST} ${BLOWFISH_SRC} ${BLOWFISH_INC} )
target_include_directories(bf_test PUBLIC ${PROJECT_SOURCE_DIR}/include)
add_library(blowfish2 ${BLOWFISH2_SRC} ${BLOWFISH2_INC} ${BLOWFISH_SCRIPTS} ${BLOWFISH_DOC})

target_include_directories(blowfish PUBLIC ${PROJECT_SOURCE_DIR}/include)
target_include_directories(blowfish2 PUBLIC ${PROJECT_SOURCE_DIR}/include)

add_executable(bf_test ${BLOWFISH_TEST} ${BLOWFISH_SRC} ${BLOWFISH_INC})
add_executable(bf2_test ${BLOWFISH2_TEST} ${BLOWFISH2_SRC} ${BLOWFISH2_INC})

target_include_directories(bf_test PUBLIC ${PROJECT_SOURCE_DIR}/include)
target_include_directories(bf2_test PUBLIC ${PROJECT_SOURCE_DIR}/include)

14 changes: 6 additions & 8 deletions include/blowfish/blowfish.h
Original file line number Diff line number Diff line change
@@ -1,19 +1,17 @@
/*
* @file blowfish.hpp
* @author Avinal Kumar
* @since February 15, 2021
*
* Blowfish Algorithm Header File
*/
// SPDX-FileCopyrightText: 2024 Avinal Kumar [email protected]
// SPDX-License-Identifier: MIT

// Original Blowfish Algorithm copyright:
// SPDX-FileCopyrightText: 1997 Paul Kocher

#include <algorithm>
#include <array>
#include <cstdint>
#include <string>

#define MAXKEYBYTES 56 // 448 bits max
#define N 16


#if !defined(BLOWFISH_BLOWFISH_H_)
#define BLOWFISH_BLOWFISH_H_

Expand Down
35 changes: 35 additions & 0 deletions include/blowfish/blowfish2.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
// SPDX-FileCopyrightText: 2024 Avinal Kumar [email protected]
// SPDX-License-Identifier: MIT

// Original Blowfish 2 Algorithm copyright:
// SPDX-FileCopyrightText: 2005 Alexander Pukall

#include <algorithm>
#include <array>
#include <cstdint>
#include <string>

#define MAXKEYBYTES 56 // 4224 bits max
#define N 64

#if !defined(BLOWFISH_BLOWFISH2_H_)
#define BLOWFISH_BLOWFISH2_H_

class Blowfish2 {
private:
std::array<uint64_t, N + 2> PArray;
std::array<std::array<uint64_t, 256>, 8> Sboxes;
uint64_t F(uint64_t x);

public:
Blowfish2() {}
Blowfish2(std::string const &key);
Blowfish2(Blowfish2 const &) = delete;

void initialize(std::string const &key);

void encrypt(uint64_t &xl, uint64_t &xr);
void decrypt(uint64_t &xl, uint64_t &xr);
};

#endif // BLOWFISH_BLOWFISH2_H_
13 changes: 5 additions & 8 deletions src/blowfish.cc
Original file line number Diff line number Diff line change
@@ -1,11 +1,8 @@
/**
* /mnt/z/my_git/blowfish/include/blowfish.cpp
* @file blowfish.cpp
* @author Avinal Kumar
* @since February 16, 2021
*
* Blowfish Implementation
*/
// SPDX-FileCopyrightText: 2024 Avinal Kumar [email protected]
// SPDX-License-Identifier: MIT

// Original Blowfish Algorithm copyright:
// SPDX-FileCopyrightText: 1997 Paul Kocher

#include <blowfish/blowfish.h>

Expand Down
Loading

0 comments on commit 9d93ea6

Please sign in to comment.