diff options
author | Bodo Möller <bodo@openssl.org> | 2006-07-19 13:38:26 +0000 |
---|---|---|
committer | Bodo Möller <bodo@openssl.org> | 2006-07-19 13:38:26 +0000 |
commit | 413e0853d7457e9ca2dcc18fd2ca15ef9327b04d (patch) | |
tree | 1195519682a1f98675cf4f90ccb0d4eb40c4a20e /crypto/camellia/cmll_misc.c | |
parent | 8e4560c42fde17fd96e62c9321b9611fe4a9ae05 (diff) |
New Camellia implementation (replacing previous version)
Submitted by: NTT
Diffstat (limited to 'crypto/camellia/cmll_misc.c')
-rw-r--r-- | crypto/camellia/cmll_misc.c | 41 |
1 files changed, 35 insertions, 6 deletions
diff --git a/crypto/camellia/cmll_misc.c b/crypto/camellia/cmll_misc.c index 8edead8db8..3c4ec36662 100644 --- a/crypto/camellia/cmll_misc.c +++ b/crypto/camellia/cmll_misc.c @@ -53,16 +53,37 @@ #include <openssl/camellia.h> #include "cmll_locl.h" - const char *CAMELLIA_version="CAMELLIA" OPENSSL_VERSION_PTEXT; +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; - if(bits != 128 && bits != 192 && bits != 256) + } + + 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: return -2; - Camellia_Ekeygen(bits , userKey, key->rd_key); + } + key->bitLength = bits; return 0; } @@ -70,12 +91,20 @@ int Camellia_set_key(const unsigned char *userKey, const int bits, void Camellia_encrypt(const unsigned char *in, unsigned char *out, const CAMELLIA_KEY *key) { - Camellia_EncryptBlock(key->bitLength, in , key->rd_key , out); + uint32_t tmp[UNITSIZE]; + + memcpy(tmp, in, CAMELLIA_BLOCK_SIZE); + key->enc(key->rd_key, tmp); + memcpy(out, tmp, CAMELLIA_BLOCK_SIZE); } void Camellia_decrypt(const unsigned char *in, unsigned char *out, const CAMELLIA_KEY *key) { - Camellia_DecryptBlock(key->bitLength, in , key->rd_key , out); + uint32_t tmp[UNITSIZE]; + + memcpy(tmp, in, CAMELLIA_BLOCK_SIZE); + key->dec(key->rd_key, tmp); + memcpy(out, tmp, CAMELLIA_BLOCK_SIZE); } |