aboutsummaryrefslogtreecommitdiffstats
path: root/crypto/camellia/cmll_misc.c
diff options
context:
space:
mode:
authorAndy Polyakov <appro@openssl.org>2008-10-28 08:47:24 +0000
committerAndy Polyakov <appro@openssl.org>2008-10-28 08:47:24 +0000
commit27f864e8acd4c495f94363af3074861576af303f (patch)
tree9db6efbb80495e2d008cf9148be487a970ef31ca /crypto/camellia/cmll_misc.c
parent80aa9cc985251463a3ad65b0a4d64bf93c70b175 (diff)
downloadopenssl-27f864e8acd4c495f94363af3074861576af303f.tar.gz
Camellia update. Quoting camellia.c:
/* * This release balances code size and performance. In particular key * schedule setup is fully unrolled, because doing so *significantly* * reduces amount of instructions per setup round and code increase is * justifiable. In block functions on the other hand only inner loops * are unrolled, as full unroll gives only nominal performance boost, * while code size grows 4 or 7 times. Also, unlike previous versions * this one "encourages" compiler to keep intermediate variables in * registers, which should give better "all round" results, in other * words reasonable performance even with not so modern compilers. */
Diffstat (limited to 'crypto/camellia/cmll_misc.c')
-rw-r--r--crypto/camellia/cmll_misc.c47
1 files changed, 5 insertions, 42 deletions
diff --git a/crypto/camellia/cmll_misc.c b/crypto/camellia/cmll_misc.c
index f1047b54e0..9d4dc2a971 100644
--- a/crypto/camellia/cmll_misc.c
+++ b/crypto/camellia/cmll_misc.c
@@ -58,59 +58,22 @@ const char CAMELLIA_version[]="CAMELLIA" OPENSSL_VERSION_PTEXT;
int Camellia_set_key(const unsigned char *userKey, const int bits,
CAMELLIA_KEY *key)
{
- if (!userKey || !key)
- {
+ if(!userKey || !key)
return -1;
- }
-
- switch(bits)
- {
- case 128:
- camellia_setup128(userKey, (unsigned int *)key->rd_key);
- key->enc = camellia_encrypt128;
- key->dec = camellia_decrypt128;
- break;
- case 192:
- camellia_setup192(userKey, (unsigned int *)key->rd_key);
- key->enc = camellia_encrypt256;
- key->dec = camellia_decrypt256;
- break;
- case 256:
- camellia_setup256(userKey, (unsigned int *)key->rd_key);
- key->enc = camellia_encrypt256;
- key->dec = camellia_decrypt256;
- break;
- default:
+ if(bits != 128 && bits != 192 && bits != 256)
return -2;
- }
-
- key->bitLength = bits;
+ key->grand_rounds = Camellia_Ekeygen(bits , userKey, key->u.rd_key);
return 0;
}
void Camellia_encrypt(const unsigned char *in, unsigned char *out,
const CAMELLIA_KEY *key)
{
- u32 tmp[CAMELLIA_BLOCK_SIZE/sizeof(u32)];
- const union { long one; char little; } camellia_endian = {1};
-
- memcpy(tmp, in, CAMELLIA_BLOCK_SIZE);
- if (camellia_endian.little) SWAP4WORD(tmp);
- key->enc(key->rd_key, tmp);
- if (camellia_endian.little) SWAP4WORD(tmp);
- memcpy(out, tmp, CAMELLIA_BLOCK_SIZE);
+ Camellia_EncryptBlock(key->grand_rounds, in , key->u.rd_key , out);
}
void Camellia_decrypt(const unsigned char *in, unsigned char *out,
const CAMELLIA_KEY *key)
{
- u32 tmp[CAMELLIA_BLOCK_SIZE/sizeof(u32)];
- const union { long one; char little; } camellia_endian = {1};
-
- memcpy(tmp, in, CAMELLIA_BLOCK_SIZE);
- if (camellia_endian.little) SWAP4WORD(tmp);
- key->dec(key->rd_key, tmp);
- if (camellia_endian.little) SWAP4WORD(tmp);
- memcpy(out, tmp, CAMELLIA_BLOCK_SIZE);
+ Camellia_DecryptBlock(key->grand_rounds, in , key->u.rd_key , out);
}
-