projects
/
crypto.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Major restructuring of the internals of SILC Cipher API
[crypto.git]
/
lib
/
silccrypt
/
rc5.c
diff --git
a/lib/silccrypt/rc5.c
b/lib/silccrypt/rc5.c
index 645c88dd8182c70e6f991923fe5c92e32e33e994..3e93da32c49c1b95aa5f5d27372043853f377d82 100644
(file)
--- a/
lib/silccrypt/rc5.c
+++ b/
lib/silccrypt/rc5.c
@@
-30,25
+30,25
@@
*/
/*
*/
/*
- * 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.
*
* 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.
*
*/
* variable key length from 128 and 192 up to 256 bits.
*
*/
-#include "silc
includes
.h"
+#include "silc
crypto
.h"
#include "rc5_internal.h"
#include "rc5.h"
#include "rc5_internal.h"
#include "rc5.h"
-/*
+/*
* SILC Crypto API for RC5
*/
/* Sets the key for the cipher. */
* SILC Crypto API for RC5
*/
/* Sets the key for the cipher. */
-SILC_CIPHER_API_SET_KEY(rc5)
+SILC_CIPHER_API_SET_KEY(rc5
_cbc
)
{
SilcUInt32 k[8];
{
SilcUInt32 k[8];
@@
-58,25
+58,33
@@
SILC_CIPHER_API_SET_KEY(rc5)
return TRUE;
}
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. */
}
/* 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
)
{
SilcUInt32 tiv[4];
int i;
{
SilcUInt32 tiv[4];
int i;
@@
-101,7
+109,7
@@
SILC_CIPHER_API_ENCRYPT_CBC(rc5)
/* Decrypts with the cipher in CBC mode. Source and destination buffers
maybe one and same. */
/* 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
)
{
SilcUInt32 tmp[4], tmp2[4], tiv[4];
int i;
{
SilcUInt32 tmp[4], tmp2[4], tiv[4];
int i;
@@
-114,12
+122,12
@@
SILC_CIPHER_API_DECRYPT_CBC(rc5)
for (i = 16; i < len; i += 16) {
SILC_CBC_DEC_PRE(tmp, src);
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_DEC_POST(tmp2, dst, src, tmp, tiv);
}
-
+
SILC_CBC_PUT_IV(tiv, iv);
SILC_CBC_PUT_IV(tiv, iv);
-
+
return TRUE;
}
return TRUE;
}
@@
-206,9
+214,9
@@
int rc5_decrypt(RC5Context *ctx, u32 *in, u32 *out)
A = in[0];
B = in[1];
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);
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;
out[1] = B - S[1];
return 0;
-}
+}