Blowfish вне OpenSSL(C++)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by _nic, 10 Jul 2011.

  1. _nic

    _nic Elder - Старейшина

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    Кому нибудь встречалась реализация сего алгоритма на плюсах,вне этой чрез мерно жирной либы?
     
  2. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    А погуглить ну никак не дано.
    http://www.schneier.com/blowfish-download.html
     
  3. altblitz

    altblitz Elder - Старейшина

    Joined:
    5 Jun 2009
    Messages:
    3,691
    Likes Received:
    3,145
    Reputations:
    236
    сурсы GnuPG же.

    и к чему на жирном и неповоротливом ++ ?

    в GnuPG - на правильном cross-platform C.

    PS. первый раз будет сложно разбиратся в структуре проекта.
    оно стоит того,
    ибо код вылизан и транспарентен.
    что ещё нужно для security ?
     
  4. _nic

    _nic Elder - Старейшина

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    Это все конечно очень хорошо, но плюсовые варианты оттудого несовместимы со VS студией :mad:
     
  5. Ins3t

    Ins3t Харьковчанин

    Joined:
    18 Jul 2009
    Messages:
    939
    Likes Received:
    429
    Reputations:
    139
    _nic

    только что собрал тот который 5й сверху(C++ (author unknown) ). хз какая там у тебя несовместимость да еще и со студией.

    некоторые хэдеры пришлось поправить, да. строку одну раскоментить, ага.

    altblitz

    бугага
     
    #5 Ins3t, 14 Jul 2011
    Last edited: 14 Jul 2011
  6. _nic

    _nic Elder - Старейшина

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    И где тут совместимость если в С++ билдере ничего править ВООБЩЕ не нада? А "by Jim Conger" вообще злостно конфликтует с windef.h Неиначе как происки злобных красноглазиков :(
     
    #6 _nic, 14 Jul 2011
    Last edited: 14 Jul 2011
  7. Ins3t

    Ins3t Харьковчанин

    Joined:
    18 Jul 2009
    Messages:
    939
    Likes Received:
    429
    Reputations:
    139
    это значит, что твой борланд - древний гуан*.

    поясняю:

    1.

    Code:
    #include <iostream.h>
    старый стандарт, с чего бы VC++ должен его поддерживать(если это, конечно, не древняя версия)?

    2.

    Code:
     //#define BIG_ENDIAN
     //#define LITTLE_ENDIAN
    
    
    #ifdef BIG_ENDIAN
    struct WordByte
    {
    	unsigned int zero:8;
    	unsigned int one:8;
    	unsigned int two:8;
    	unsigned int three:8;
    };
    #endif
    
    #ifdef LITTLE_ENDIAN
    struct WordByte
    {
    	unsigned int three:8;
    	unsigned int two:8;
    	unsigned int one:8;
    	unsigned int zero:8;
    };
    #endif
    
    union Word
    {
    	unsigned int word;
    	WordByte byte;
    };
    
    два дефайна закоменчены - следовательно структуры WordByte не существует, а мы ее пытаемся использовать -> ошибка компиляции.


    а за это я ничего не говорил, поскольку даже не качал его.

    UPD:

    Только что скомпилил C++ by Jim Conger (note)

    после небольших исправлений дефектов форматирования(куски коментов на новую строку перелезли) все прекрасно скомпилировалось.

    так что либо вы компилируете не то же, что и я, либо, пардон, у вас руки не с того места растут.
     
    #7 Ins3t, 14 Jul 2011
    Last edited: 14 Jul 2011
    1 person likes this.
  8. _nic

    _nic Elder - Старейшина

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    Заинклюдь Windows.h в blowfish.cpp :)
     
  9. Ins3t

    Ins3t Харьковчанин

    Joined:
    18 Jul 2009
    Messages:
    939
    Likes Received:
    429
    Reputations:
    139
    ага, заинклюдил. получил эррор. но ведь проблема очевидна. мы подключаем windows.h, он где то там подключает windef.h, в которых есть следующие тайпдефы:

    Code:
    typedef unsigned char       BYTE;
    typedef unsigned short      WORD;
    
    все бы хорошо, но в нашем(а точнее Jim's Conger) коде определены такие дефайны(blowfish.h):
    Code:
    #define WORD  	unsigned short
    #define BYTE  	unsigned char
    
    ну и с чего бы компилятору не ругаться?

    Решается проблема очень просто:
    подключаем windows.h(в файл blowfish.cpp) перед
    Code:
    #include "blowfish.h"
    #include "blowfish.h2"
    и немножко правим дефайны(в файле blowfish.h):

    меняем

    Code:
    #define WORD  	unsigned short
    #define BYTE  	unsigned char
    
    на

    Code:
    #ifndef WORD
       #define WORD  unsigned short
    #endif
    
    #ifndef BYTE
       #define BYTE  unsigned char
    #endif
    и все будет собираться.