52
52
#include <openssl/opensslv.h>
53
53
#include <openssl/camellia.h>
54
54
#include "cmll_locl.h"
55
#include <openssl/crypto.h>
57
#include <openssl/fips.h>
60
56
const char CAMELLIA_version[]="CAMELLIA" OPENSSL_VERSION_PTEXT;
62
58
int Camellia_set_key(const unsigned char *userKey, const int bits,
67
FIPS_BAD_ABORT(CAMELLIA)
68
return private_Camellia_set_key(userKey, bits, key);
70
int private_Camellia_set_key(const unsigned char *userKey, const int bits,
82
camellia_setup128(userKey, (unsigned int *)key->rd_key);
83
key->enc = camellia_encrypt128;
84
key->dec = camellia_decrypt128;
87
camellia_setup192(userKey, (unsigned int *)key->rd_key);
88
key->enc = camellia_encrypt256;
89
key->dec = camellia_decrypt256;
92
camellia_setup256(userKey, (unsigned int *)key->rd_key);
93
key->enc = camellia_encrypt256;
94
key->dec = camellia_decrypt256;
63
if(bits != 128 && bits != 192 && bits != 256)
100
key->bitLength = bits;
65
key->grand_rounds = Camellia_Ekeygen(bits , userKey, key->u.rd_key);
104
69
void Camellia_encrypt(const unsigned char *in, unsigned char *out,
105
70
const CAMELLIA_KEY *key)
107
u32 tmp[CAMELLIA_BLOCK_SIZE/sizeof(u32)];
108
const union { long one; char little; } camellia_endian = {1};
110
memcpy(tmp, in, CAMELLIA_BLOCK_SIZE);
111
if (camellia_endian.little) SWAP4WORD(tmp);
112
key->enc(key->rd_key, tmp);
113
if (camellia_endian.little) SWAP4WORD(tmp);
114
memcpy(out, tmp, CAMELLIA_BLOCK_SIZE);
72
Camellia_EncryptBlock_Rounds(key->grand_rounds, in , key->u.rd_key , out);
117
75
void Camellia_decrypt(const unsigned char *in, unsigned char *out,
118
76
const CAMELLIA_KEY *key)
120
u32 tmp[CAMELLIA_BLOCK_SIZE/sizeof(u32)];
121
const union { long one; char little; } camellia_endian = {1};
123
memcpy(tmp, in, CAMELLIA_BLOCK_SIZE);
124
if (camellia_endian.little) SWAP4WORD(tmp);
125
key->dec(key->rd_key, tmp);
126
if (camellia_endian.little) SWAP4WORD(tmp);
127
memcpy(out, tmp, CAMELLIA_BLOCK_SIZE);
78
Camellia_DecryptBlock_Rounds(key->grand_rounds, in , key->u.rd_key , out);