Добавил:
korayakov
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Документация по криптоалгоритмам / RC5 / rc5
.h#ifndef _RC5_DEFINED
#define _RC5_DEFINED
/* The RC5 blocksize */
#define RC5_BLOCKSIZE 4
/* The default and maximum (sane) number of RC5 rounds */
#define RC5_DEFAULT_ROUNDS 12
#define RC5_MAX_ROUNDS 32
/* The maximum RC5 expanded key size: 256 bytes. Note that sizeof( LONG )
may not equal 4, so the total size may in fact be more than 256 bytes,
however the total information content is only 256 bytes */
#define MASK32(x) x
#define RC5_EXPANDED_KEYSIZE_LONG 16
#define RC5_EXPANDED_KEYSIZE ( RC5_EXPANDED_KEYSIZE_LONG * sizeof( LONG ) )
#define mgetLLong(memPtr) \
( ( ( LONG ) memPtr[ 0 ] ) | ( ( LONG ) memPtr[ 1 ] << 8 ) | \
( ( LONG ) memPtr[ 2 ] << 16 ) | ( ( LONG ) memPtr[ 3 ] << 24) ); \
memPtr += 4
#define mputLLong(memPtr,data) \
memPtr[ 0 ] = ( BYTE ) ( ( data ) & 0xFF ); \
memPtr[ 1 ] = ( BYTE ) ( ( ( data ) >> 8 ) & 0xFF ); \
memPtr[ 2 ] = ( BYTE ) ( ( ( data ) >> 16 ) & 0xFF ); \
memPtr[ 3 ] = ( BYTE ) ( ( ( data ) >> 24 ) & 0xFF ); \
memPtr += 4
/* A structure to hold the RC5 key */
typedef unsigned long LONG;
typedef char BYTE;
typedef struct {
LONG S[ RC5_EXPANDED_KEYSIZE_LONG ]; /* S-box */
int noRounds; /* Number of rounds */
} RC5_KEY;
/* Prototypes for functions in RC5.C */
void rc5encrypt( RC5_KEY *key, BYTE *data );
void rc5decrypt( RC5_KEY *key, BYTE *data );
void rc5keyInit( RC5_KEY *key, BYTE *userKey, int userKeyLength );
#endif /* _RC5_DEFINED */