X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=lib%2Fsilccrypt%2Frc5.c;h=3e93da32c49c1b95aa5f5d27372043853f377d82;hb=9f20f0382b6229eca740925a73f96294f6dcedc6;hp=34afc43fac0064b0dd8448ab8050330378f4939e;hpb=2dc218143c7859f7529396dc121ae08e2fd78da0;p=crypto.git diff --git a/lib/silccrypt/rc5.c b/lib/silccrypt/rc5.c index 34afc43f..3e93da32 100644 --- a/lib/silccrypt/rc5.c +++ b/lib/silccrypt/rc5.c @@ -30,27 +30,27 @@ */ /* - * Based on RC5 reference code and on description of Bruce Schneier's + * Based on RC5 reference code and on description of Bruce Schneier's * Applied Cryptography. * - * This implementation has a word size of 32 bits, a rounds of 16 and + * This implementation has a word size of 32 bits, a rounds of 16 and * variable key length from 128 and 192 up to 256 bits. * */ -#include "silcincludes.h" +#include "silccrypto.h" #include "rc5_internal.h" #include "rc5.h" -/* +/* * SILC Crypto API for RC5 */ /* Sets the key for the cipher. */ -SILC_CIPHER_API_SET_KEY(rc5) +SILC_CIPHER_API_SET_KEY(rc5_cbc) { - uint32 k[8]; + SilcUInt32 k[8]; SILC_GET_WORD_KEY(key, k, keylen); rc5_set_key((RC5Context *)context, k, keylen); @@ -58,27 +58,35 @@ SILC_CIPHER_API_SET_KEY(rc5) return TRUE; } -/* Sets the string as a new key for the cipher. The string is first - hashed and then used as a new key. */ +/* Sets IV for the cipher. */ -SILC_CIPHER_API_SET_KEY_WITH_STRING(rc5) +SILC_CIPHER_API_SET_IV(rc5_cbc) { - return 1; + } -/* Returns the size of the cipher context. */ +/* Initialize */ -SILC_CIPHER_API_CONTEXT_LEN(rc5) +SILC_CIPHER_API_INIT(rc5_cbc) { - return sizeof(RC5Context); + return silc_calloc(1, sizeof(RC5Context)); +} + +/* Initialize */ + +SILC_CIPHER_API_UNINIT(rc5_cbc) +{ + RC5Context *rc5 = context; + memset(rc5, 0, sizeof(*rc5)); + silc_free(rc5); } /* Encrypts with the cipher in CBC mode. Source and destination buffers maybe one and same. */ -SILC_CIPHER_API_ENCRYPT_CBC(rc5) +SILC_CIPHER_API_ENCRYPT(rc5_cbc) { - uint32 tiv[4]; + SilcUInt32 tiv[4]; int i; SILC_CBC_GET_IV(tiv, iv); @@ -101,9 +109,9 @@ SILC_CIPHER_API_ENCRYPT_CBC(rc5) /* Decrypts with the cipher in CBC mode. Source and destination buffers maybe one and same. */ -SILC_CIPHER_API_DECRYPT_CBC(rc5) +SILC_CIPHER_API_DECRYPT(rc5_cbc) { - uint32 tmp[4], tmp2[4], tiv[4]; + SilcUInt32 tmp[4], tmp2[4], tiv[4]; int i; SILC_CBC_GET_IV(tiv, iv); @@ -114,12 +122,12 @@ SILC_CIPHER_API_DECRYPT_CBC(rc5) for (i = 16; i < len; i += 16) { SILC_CBC_DEC_PRE(tmp, src); - rc5_decrypt((RC5Context *)context, tmp, tmp2); + rc5_decrypt((RC5Context *)context, tmp, tmp2); SILC_CBC_DEC_POST(tmp2, dst, src, tmp, tiv); } - + SILC_CBC_PUT_IV(tiv, iv); - + return TRUE; } @@ -139,7 +147,7 @@ SILC_CIPHER_API_DECRYPT_CBC(rc5) /* Sets RC5 key */ -int rc5_set_key(RC5Context *ctx, const uint32 in_key[], int key_len) +int rc5_set_key(RC5Context *ctx, const SilcUInt32 in_key[], int key_len) { u32 i, j, k, A, B, L[c]; u32 *out_key = ctx->out_key; @@ -206,9 +214,9 @@ int rc5_decrypt(RC5Context *ctx, u32 *in, u32 *out) A = in[0]; B = in[1]; - RC5D(32, A, B); RC5D(30, A, B); - RC5D(28, A, B); RC5D(26, A, B); - RC5D(24, A, B); RC5D(22, A, B); + RC5D(32, A, B); RC5D(30, A, B); + RC5D(28, A, B); RC5D(26, A, B); + RC5D(24, A, B); RC5D(22, A, B); RC5D(20, A, B); RC5D(18, A, B); RC5D(16, A, B); RC5D(14, A, B); RC5D(12, A, B); RC5D(10, A, B); @@ -219,4 +227,4 @@ int rc5_decrypt(RC5Context *ctx, u32 *in, u32 *out) out[1] = B - S[1]; return 0; -} +}