/** ********************************************************************* * @file rc5.h * @author petrucio@inf.ufsc.br ********************************************************************/ #ifndef PET_RC5_H #define PET_RC5_H /*** * Includes ***********************************/ #include "rc5_defs.h" /** ********************************************************************* * RC5 * Algoritmo de cryptografia de bloco simetrico, altamente * parametrizavel e eficiente, criado por Ron Rivest (RSA Inc). * Para maiores informacoes sobre o RC5, visite: * http://www.dei.isep.ipp.pt/~andre/normas/rc5.htm * * Parametros de funcionamento do RC5: * - tamanho da chave -> depende da chave usada em setkey * - tamanho da palavra -> palavra do sistema por defines, compile time * - numero de rodadas -> definido pelo metodo setRounds ********************************************************************/ class RC5 { public: /*** * RC5 Types: Block, Key, XKey ***********************************/ struct Block { WORD word0; WORD word1; Block(void) {}; Block(const UCHAR *data); Block(UCHAR **data); void extract(UCHAR *output); }; struct Key { UCHAR *bytes; UCHAR nbytes; // numero de bytes na chave (b) UCHAR nwords; // numero de words na chave -> ceil(8*key_bytes/word_bits) Key(const UCHAR *data, int size); }; struct XKey { WORD *words; UCHAR nwords; // numero de words na chave expandida -> 2*(key_bytes+1) (t) XKey(const Key &key); }; /*** * C & D ***********************************/ RC5(void); /*** * Methods ***********************************/ void setKey(const Key &key); void setRounds(UCHAR rounds); Block encrypt(const Block &block); Block decrypt(const Block &block); private: /*** * Attributes ***********************************/ XKey *xkey; // Global Expanded Key UCHAR rounds; // Numero de rodadas (r) }; #endif // PET_RC5_H