X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=lib%2Fsilccrypt%2Fmars.c;h=e3c93d682d69e3ca3a1c12819c582971533f0e49;hb=a818c5b5411bbc4436d1c5f011236985c96bb787;hp=addb8bd0eed80bd72b7c6a318dafdb7586832b2a;hpb=72cfa31520ebc0058763a30e21c13f6e9a964aa0;p=silc.git diff --git a/lib/silccrypt/mars.c b/lib/silccrypt/mars.c index addb8bd0..e3c93d68 100644 --- a/lib/silccrypt/mars.c +++ b/lib/silccrypt/mars.c @@ -39,6 +39,7 @@ Mean: 373 cycles = 68.7 mbits/sec */ #include "silcincludes.h" +#include "mars_internal.h" #include "mars.h" /* @@ -49,7 +50,11 @@ Mean: 373 cycles = 68.7 mbits/sec SILC_CIPHER_API_SET_KEY(mars) { - mars_set_key((MarsContext *)context, (uint32 *)key, keylen); + SilcUInt32 k[8]; + + SILC_GET_WORD_KEY(key, k, keylen); + mars_set_key((MarsContext *)context, k, keylen); + return TRUE; } @@ -80,36 +85,22 @@ SILC_CIPHER_API_CONTEXT_LEN(mars) SILC_CIPHER_API_ENCRYPT_CBC(mars) { - uint32 *in, *out, *tiv; - uint32 tmp[4]; + SilcUInt32 tiv[4]; int i; - in = (uint32 *)src; - out = (uint32 *)dst; - tiv = (uint32 *)iv; + SILC_CBC_GET_IV(tiv, iv); - tmp[0] = in[0] ^ tiv[0]; - tmp[1] = in[1] ^ tiv[1]; - tmp[2] = in[2] ^ tiv[2]; - tmp[3] = in[3] ^ tiv[3]; - mars_encrypt((MarsContext *)context, tmp, out); - in += 4; - out += 4; + SILC_CBC_ENC_PRE(tiv, src); + mars_encrypt((MarsContext *)context, tiv, tiv); + SILC_CBC_ENC_POST(tiv, dst, src); for (i = 16; i < len; i += 16) { - tmp[0] = in[0] ^ out[0 - 4]; - tmp[1] = in[1] ^ out[1 - 4]; - tmp[2] = in[2] ^ out[2 - 4]; - tmp[3] = in[3] ^ out[3 - 4]; - mars_encrypt((MarsContext *)context, tmp, out); - in += 4; - out += 4; + SILC_CBC_ENC_PRE(tiv, src); + mars_encrypt((MarsContext *)context, tiv, tiv); + SILC_CBC_ENC_POST(tiv, dst, src); } - tiv[0] = out[0 - 4]; - tiv[1] = out[1 - 4]; - tiv[2] = out[2 - 4]; - tiv[3] = out[3 - 4]; + SILC_CBC_PUT_IV(tiv, iv); return TRUE; } @@ -119,48 +110,22 @@ SILC_CIPHER_API_ENCRYPT_CBC(mars) SILC_CIPHER_API_DECRYPT_CBC(mars) { - uint32 *in, *out, *tiv; - uint32 tmp[4], tmp2[4]; + SilcUInt32 tmp[4], tmp2[4], tiv[4]; int i; - in = (uint32 *)src; - out = (uint32 *)dst; - tiv = (uint32 *)iv; - - tmp[0] = in[0]; - tmp[1] = in[1]; - tmp[2] = in[2]; - tmp[3] = in[3]; - mars_decrypt((MarsContext *)context, in, out); - out[0] ^= tiv[0]; - out[1] ^= tiv[1]; - out[2] ^= tiv[2]; - out[3] ^= tiv[3]; - in += 4; - out += 4; + SILC_CBC_GET_IV(tiv, iv); + + SILC_CBC_DEC_PRE(tmp, src); + mars_decrypt((MarsContext *)context, tmp, tmp2); + SILC_CBC_DEC_POST(tmp2, dst, src, tmp, tiv); for (i = 16; i < len; i += 16) { - tmp2[0] = tmp[0]; - tmp2[1] = tmp[1]; - tmp2[2] = tmp[2]; - tmp2[3] = tmp[3]; - tmp[0] = in[0]; - tmp[1] = in[1]; - tmp[2] = in[2]; - tmp[3] = in[3]; - mars_decrypt((MarsContext *)context, in, out); - out[0] ^= tmp2[0]; - out[1] ^= tmp2[1]; - out[2] ^= tmp2[2]; - out[3] ^= tmp2[3]; - in += 4; - out += 4; + SILC_CBC_DEC_PRE(tmp, src); + mars_decrypt((MarsContext *)context, tmp, tmp2); + SILC_CBC_DEC_POST(tmp2, dst, src, tmp, tiv); } - tiv[0] = tmp[0]; - tiv[1] = tmp[1]; - tiv[2] = tmp[2]; - tiv[3] = tmp[3]; + SILC_CBC_PUT_IV(tiv, iv); return TRUE; }