~ubuntu-branches/ubuntu/utopic/openssl/utopic

« back to all changes in this revision

Viewing changes to crypto/camellia/cmll_misc.c

  • Committer: Bazaar Package Importer
  • Author(s): Kurt Roeckx
  • Date: 2011-04-02 13:19:19 UTC
  • mfrom: (1.2.1 upstream) (11.2.2 experimental)
  • mto: This revision was merged to the branch mainline in revision 55.
  • Revision ID: james.westby@ubuntu.com-20110402131919-anszuslper64ey9e
Tags: 1.0.0d-1
* New upstream version
  - Fixes CVE-2011-0014
* Make libssl-doc Replaces/Breaks with old libssl-dev packages
  (Closes: #607609)
* Only export the symbols we should, instead of all.
* Add symbol file.
* Upload to unstable

Show diffs side-by-side

added added

removed removed

Lines of Context:
52
52
#include <openssl/opensslv.h>
53
53
#include <openssl/camellia.h>
54
54
#include "cmll_locl.h"
55
 
#include <openssl/crypto.h>
56
 
#ifdef OPENSSL_FIPS
57
 
#include <openssl/fips.h>
58
 
#endif
59
55
 
60
56
const char CAMELLIA_version[]="CAMELLIA" OPENSSL_VERSION_PTEXT;
61
57
 
62
58
int Camellia_set_key(const unsigned char *userKey, const int bits,
63
59
        CAMELLIA_KEY *key)
64
 
#ifdef OPENSSL_FIPS
65
 
        {
66
 
        if (FIPS_mode())
67
 
                FIPS_BAD_ABORT(CAMELLIA)
68
 
        return private_Camellia_set_key(userKey, bits, key);
69
 
        }
70
 
int private_Camellia_set_key(const unsigned char *userKey, const int bits,
71
 
        CAMELLIA_KEY *key)
72
 
#endif
73
 
        {
74
 
        if (!userKey || !key)
75
 
                {
 
60
        {
 
61
        if(!userKey || !key)
76
62
                return -1;
77
 
                }
78
 
        
79
 
        switch(bits)
80
 
                {
81
 
        case 128:
82
 
                camellia_setup128(userKey, (unsigned int *)key->rd_key);
83
 
                key->enc = camellia_encrypt128;
84
 
                key->dec = camellia_decrypt128;
85
 
                break;
86
 
        case 192:
87
 
                camellia_setup192(userKey, (unsigned int *)key->rd_key);
88
 
                key->enc = camellia_encrypt256;
89
 
                key->dec = camellia_decrypt256;
90
 
                break;
91
 
        case 256:
92
 
                camellia_setup256(userKey, (unsigned int *)key->rd_key);
93
 
                key->enc = camellia_encrypt256;
94
 
                key->dec = camellia_decrypt256;
95
 
                break;
96
 
        default:
 
63
        if(bits != 128 && bits != 192 && bits != 256)
97
64
                return -2;
98
 
                }
99
 
        
100
 
        key->bitLength = bits;
 
65
        key->grand_rounds = Camellia_Ekeygen(bits , userKey, key->u.rd_key);
101
66
        return 0;
102
67
        }
103
68
 
104
69
void Camellia_encrypt(const unsigned char *in, unsigned char *out,
105
70
        const CAMELLIA_KEY *key)
106
71
        {
107
 
        u32 tmp[CAMELLIA_BLOCK_SIZE/sizeof(u32)];
108
 
        const union { long one; char little; } camellia_endian = {1};
109
 
 
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);
115
73
        }
116
74
 
117
75
void Camellia_decrypt(const unsigned char *in, unsigned char *out,
118
76
        const CAMELLIA_KEY *key)
119
77
        {
120
 
        u32 tmp[CAMELLIA_BLOCK_SIZE/sizeof(u32)];
121
 
        const union { long one; char little; } camellia_endian = {1};
122
 
 
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);
128
79
        }
129