diff options
Diffstat (limited to 'src/ltc/ciphers/idea.c')
-rw-r--r-- | src/ltc/ciphers/idea.c | 90 |
1 files changed, 45 insertions, 45 deletions
diff --git a/src/ltc/ciphers/idea.c b/src/ltc/ciphers/idea.c index 27db6167..b195a4c9 100644 --- a/src/ltc/ciphers/idea.c +++ b/src/ltc/ciphers/idea.c @@ -35,38 +35,38 @@ const struct ltc_cipher_descriptor idea_desc = { typedef unsigned short int ushort16; -#define _LOW16(x) ((x)&0xffff) /* compiler should be able to optimize this away if x is 16 bits */ -#define _HIGH16(x) ((x)>>16) -#define _MUL(a,b) { \ - ulong32 p = (ulong32)_LOW16(a) * b; \ +#define LOW16(x) ((x)&0xffff) /* compiler should be able to optimize this away if x is 16 bits */ +#define HIGH16(x) ((x)>>16) +#define MUL(a,b) { \ + ulong32 p = (ulong32)LOW16(a) * b; \ if (p) { \ - p = _LOW16(p) - _HIGH16(p); \ - a = (ushort16)p - (ushort16)_HIGH16(p); \ + p = LOW16(p) - HIGH16(p); \ + a = (ushort16)p - (ushort16)HIGH16(p); \ } \ else \ a = 1 - a - b; \ } -#define _STORE16(x,y) { (y)[0] = (unsigned char)(((x)>>8)&255); (y)[1] = (unsigned char)((x)&255); } -#define _LOAD16(x,y) { x = ((ushort16)((y)[0] & 255)<<8) | ((ushort16)((y)[1] & 255)); } +#define STORE16(x,y) { (y)[0] = (unsigned char)(((x)>>8)&255); (y)[1] = (unsigned char)((x)&255); } +#define LOAD16(x,y) { x = ((ushort16)((y)[0] & 255)<<8) | ((ushort16)((y)[1] & 255)); } -static ushort16 _mul_inv(ushort16 x) +static ushort16 s_mul_inv(ushort16 x) { ushort16 y = x; unsigned i; for (i = 0; i < 15; i++) { - _MUL(y, _LOW16(y)); - _MUL(y, x); + MUL(y, LOW16(y)); + MUL(y, x); } - return _LOW16(y); + return LOW16(y); } -static ushort16 _add_inv(ushort16 x) +static ushort16 s_add_inv(ushort16 x) { - return _LOW16(0 - x); + return LOW16(0 - x); } -static int _setup_key(const unsigned char *key, symmetric_key *skey) +static int s_setup_key(const unsigned char *key, symmetric_key *skey) { int i, j; ushort16 *e_key = skey->idea.ek; @@ -74,49 +74,49 @@ static int _setup_key(const unsigned char *key, symmetric_key *skey) /* prepare enc key */ for (i = 0; i < 8; i++) { - _LOAD16(e_key[i], key + 2 * i); + LOAD16(e_key[i], key + 2 * i); } for (; i < LTC_IDEA_KEYLEN; i++) { j = (i - i % 8) - 8; - e_key[i] = _LOW16((e_key[j+(i+1)%8] << 9) | (e_key[j+(i+2)%8] >> 7)); + e_key[i] = LOW16((e_key[j+(i+1)%8] << 9) | (e_key[j+(i+2)%8] >> 7)); } /* prepare dec key */ for (i = 0; i < LTC_IDEA_ROUNDS; i++) { - d_key[i*6+0] = _mul_inv(e_key[(LTC_IDEA_ROUNDS-i)*6+0]); - d_key[i*6+1] = _add_inv(e_key[(LTC_IDEA_ROUNDS-i)*6+1+(i>0 ? 1 : 0)]); - d_key[i*6+2] = _add_inv(e_key[(LTC_IDEA_ROUNDS-i)*6+2-(i>0 ? 1 : 0)]); - d_key[i*6+3] = _mul_inv(e_key[(LTC_IDEA_ROUNDS-i)*6+3]); - d_key[i*6+4] = e_key[(LTC_IDEA_ROUNDS-1-i)*6+4]; - d_key[i*6+5] = e_key[(LTC_IDEA_ROUNDS-1-i)*6+5]; + d_key[i*6+0] = s_mul_inv(e_key[(LTC_IDEA_ROUNDS-i)*6+0]); + d_key[i*6+1] = s_add_inv(e_key[(LTC_IDEA_ROUNDS-i)*6+1+(i>0 ? 1 : 0)]); + d_key[i*6+2] = s_add_inv(e_key[(LTC_IDEA_ROUNDS-i)*6+2-(i>0 ? 1 : 0)]); + d_key[i*6+3] = s_mul_inv(e_key[(LTC_IDEA_ROUNDS-i)*6+3]); + d_key[i*6+4] = e_key[(LTC_IDEA_ROUNDS-1-i)*6+4]; + d_key[i*6+5] = e_key[(LTC_IDEA_ROUNDS-1-i)*6+5]; } - d_key[i*6+0] = _mul_inv(e_key[(LTC_IDEA_ROUNDS-i)*6+0]); - d_key[i*6+1] = _add_inv(e_key[(LTC_IDEA_ROUNDS-i)*6+1]); - d_key[i*6+2] = _add_inv(e_key[(LTC_IDEA_ROUNDS-i)*6+2]); - d_key[i*6+3] = _mul_inv(e_key[(LTC_IDEA_ROUNDS-i)*6+3]); + d_key[i*6+0] = s_mul_inv(e_key[(LTC_IDEA_ROUNDS-i)*6+0]); + d_key[i*6+1] = s_add_inv(e_key[(LTC_IDEA_ROUNDS-i)*6+1]); + d_key[i*6+2] = s_add_inv(e_key[(LTC_IDEA_ROUNDS-i)*6+2]); + d_key[i*6+3] = s_mul_inv(e_key[(LTC_IDEA_ROUNDS-i)*6+3]); return CRYPT_OK; } -static int _process_block(const unsigned char *in, unsigned char *out, const ushort16 *m_key) +static int s_process_block(const unsigned char *in, unsigned char *out, const ushort16 *m_key) { int i; ushort16 x0, x1, x2, x3, t0, t1; - _LOAD16(x0, in + 0); - _LOAD16(x1, in + 2); - _LOAD16(x2, in + 4); - _LOAD16(x3, in + 6); + LOAD16(x0, in + 0); + LOAD16(x1, in + 2); + LOAD16(x2, in + 4); + LOAD16(x3, in + 6); for (i = 0; i < LTC_IDEA_ROUNDS; i++) { - _MUL(x0, m_key[i*6+0]); + MUL(x0, m_key[i*6+0]); x1 += m_key[i*6+1]; x2 += m_key[i*6+2]; - _MUL(x3, m_key[i*6+3]); + MUL(x3, m_key[i*6+3]); t0 = x0^x2; - _MUL(t0, m_key[i*6+4]); + MUL(t0, m_key[i*6+4]); t1 = t0 + (x1^x3); - _MUL(t1, m_key[i*6+5]); + MUL(t1, m_key[i*6+5]); t0 += t1; x0 ^= t1; x3 ^= t0; @@ -125,15 +125,15 @@ static int _process_block(const unsigned char *in, unsigned char *out, const ush x2 = t0; } - _MUL(x0, m_key[LTC_IDEA_ROUNDS*6+0]); + MUL(x0, m_key[LTC_IDEA_ROUNDS*6+0]); x2 += m_key[LTC_IDEA_ROUNDS*6+1]; x1 += m_key[LTC_IDEA_ROUNDS*6+2]; - _MUL(x3, m_key[LTC_IDEA_ROUNDS*6+3]); + MUL(x3, m_key[LTC_IDEA_ROUNDS*6+3]); - _STORE16(x0, out + 0); - _STORE16(x2, out + 2); - _STORE16(x1, out + 4); - _STORE16(x3, out + 6); + STORE16(x0, out + 0); + STORE16(x2, out + 2); + STORE16(x1, out + 4); + STORE16(x3, out + 6); return CRYPT_OK; } @@ -146,12 +146,12 @@ int idea_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_k if (num_rounds != 0 && num_rounds != 8) return CRYPT_INVALID_ROUNDS; if (keylen != 16) return CRYPT_INVALID_KEYSIZE; - return _setup_key(key, skey); + return s_setup_key(key, skey); } int idea_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey) { - int err = _process_block(pt, ct, skey->idea.ek); + int err = s_process_block(pt, ct, skey->idea.ek); #ifdef LTC_CLEAN_STACK burn_stack(sizeof(ushort16) * 6 + sizeof(int)); #endif @@ -160,7 +160,7 @@ int idea_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric int idea_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey) { - int err = _process_block(ct, pt, skey->idea.dk); + int err = s_process_block(ct, pt, skey->idea.dk); #ifdef LTC_CLEAN_STACK burn_stack(sizeof(ushort16) * 6 + sizeof(int)); #endif |