*/
/*
- * 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 "silc.h"
+#include "rc5_internal.h"
#include "rc5.h"
-/*
+/*
* SILC Crypto API for RC5
*/
/* Sets the key for the cipher. */
-SILC_CIPHER_API_SET_KEY(aes)
+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);
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(aes)
+SILC_CIPHER_API_SET_IV(rc5_cbc)
{
- /* unsigned char key[md5_hash_len];
- SilcMarsContext *ctx = (SilcMarsContext *)context;
-
- make_md5_hash(string, &key);
- memcpy(&ctx->key, mars_set_key(&key, keylen), keylen);
- memset(&key, 'F', sizeoof(key));
- */
- return 1;
}
/* Returns the size of the cipher context. */
-SILC_CIPHER_API_CONTEXT_LEN(aes)
+SILC_CIPHER_API_CONTEXT_LEN(rc5_cbc)
{
return sizeof(RC5Context);
}
/* Encrypts with the cipher in CBC mode. Source and destination buffers
maybe one and same. */
-SILC_CIPHER_API_ENCRYPT_CBC(aes)
+SILC_CIPHER_API_ENCRYPT(rc5_cbc)
{
- uint32 tiv[4];
+ SilcUInt32 tiv[4];
int i;
SILC_CBC_GET_IV(tiv, iv);
/* Decrypts with the cipher in CBC mode. Source and destination buffers
maybe one and same. */
-SILC_CIPHER_API_DECRYPT_CBC(aes)
+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);
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;
}
/* 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;
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);
out[1] = B - S[1];
return 0;
-}
+}