~ubuntu-branches/ubuntu/lucid/wpasupplicant/lucid-updates

« back to all changes in this revision

Viewing changes to crypto.c

  • Committer: Bazaar Package Importer
  • Author(s): Kel Modderman
  • Date: 2006-10-05 08:04:01 UTC
  • mfrom: (1.1.5 upstream) (3 etch)
  • mto: This revision was merged to the branch mainline in revision 4.
  • Revision ID: james.westby@ubuntu.com-20061005080401-r8lqlix4390yos7b
Tags: 0.5.5-2
* Update madwifi headers to latest SVN. (Closes: #388316)
* Remove failed attempt at action locking. [debian/functions.sh,
  debian/wpa_action.sh]
* Add hysteresis checking functions, to avoid "event loops" while
  using wpa-roam. [debian/functions.sh, debian/wpa_action.sh]
* Change of co-maintainer email address.
* Add ishex() function to functions.sh to determine wpa-psk value type in
  plaintext or hex. This effectively eliminates the need for the bogus and
  somewhat confusing wpa-passphrase contruct specific to our scripts and
  allows wpa-psk to work with either a 8 to 63 character long plaintext
  string or 64 character long hex string.
* Adjust README.modes to not refer to the redundant wpa-passphrase stuff.
* Add big fat NOTE about acceptable wpa-psk's to top of example gallery.
* Strip surrounding quotes from wpa-ssid if present, instead of just whining
  about them.
* Update email address in copyright blurb of functions.sh, ifupdown.sh and
  wpa_action.sh.  

Show diffs side-by-side

added added

removed removed

Lines of Context:
90
90
}
91
91
 
92
92
 
93
 
void sha1_transform(u8 *state, const u8 data[64])
 
93
static void sha1_transform(u8 *state, const u8 data[64])
94
94
{
95
95
        SHA_CTX context;
96
96
        memset(&context, 0, sizeof(context));
100
100
}
101
101
 
102
102
 
 
103
int fips186_2_prf(const u8 *seed, size_t seed_len, u8 *x, size_t xlen)
 
104
{
 
105
        u8 xkey[64];
 
106
        u32 t[5], _t[5];
 
107
        int i, j, m, k;
 
108
        u8 *xpos = x;
 
109
        u32 carry;
 
110
 
 
111
        if (seed_len > sizeof(xkey))
 
112
                seed_len = sizeof(xkey);
 
113
 
 
114
        /* FIPS 186-2 + change notice 1 */
 
115
 
 
116
        memcpy(xkey, seed, seed_len);
 
117
        memset(xkey + seed_len, 0, 64 - seed_len);
 
118
        t[0] = 0x67452301;
 
119
        t[1] = 0xEFCDAB89;
 
120
        t[2] = 0x98BADCFE;
 
121
        t[3] = 0x10325476;
 
122
        t[4] = 0xC3D2E1F0;
 
123
 
 
124
        m = xlen / 40;
 
125
        for (j = 0; j < m; j++) {
 
126
                /* XSEED_j = 0 */
 
127
                for (i = 0; i < 2; i++) {
 
128
                        /* XVAL = (XKEY + XSEED_j) mod 2^b */
 
129
 
 
130
                        /* w_i = G(t, XVAL) */
 
131
                        memcpy(_t, t, 20);
 
132
                        sha1_transform((u8 *) _t, xkey);
 
133
                        _t[0] = host_to_be32(_t[0]);
 
134
                        _t[1] = host_to_be32(_t[1]);
 
135
                        _t[2] = host_to_be32(_t[2]);
 
136
                        _t[3] = host_to_be32(_t[3]);
 
137
                        _t[4] = host_to_be32(_t[4]);
 
138
                        memcpy(xpos, _t, 20);
 
139
 
 
140
                        /* XKEY = (1 + XKEY + w_i) mod 2^b */
 
141
                        carry = 1;
 
142
                        for (k = 19; k >= 0; k--) {
 
143
                                carry += xkey[k] + xpos[k];
 
144
                                xkey[k] = carry & 0xff;
 
145
                                carry >>= 8;
 
146
                        }
 
147
 
 
148
                        xpos += 20;
 
149
                }
 
150
                /* x_j = w_0|w_1 */
 
151
        }
 
152
 
 
153
        return 0;
 
154
}
 
155
 
 
156
 
103
157
void * aes_encrypt_init(const u8 *key, size_t len)
104
158
{
105
159
        AES_KEY *ak;