Updated through tag hostap_2_5 from git://w1.fi/hostap.git
[mech_eap.git] / libeap / src / crypto / sha1.c
index fe00bdb..8fce139 100644 (file)
@@ -2,14 +2,8 @@
  * SHA1 hash implementation and interface functions
  * Copyright (c) 2003-2005, Jouni Malinen <j@w1.fi>
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * Alternatively, this software may be distributed under the terms of BSD
- * license.
- *
- * See README and COPYING for more details.
+ * This software may be distributed under the terms of the BSD license.
+ * See README for more details.
  */
 
 #include "includes.h"
@@ -36,6 +30,7 @@ int hmac_sha1_vector(const u8 *key, size_t key_len, size_t num_elem,
        unsigned char tk[20];
        const u8 *_addr[6];
        size_t _len[6], i;
+       int ret;
 
        if (num_elem > 5) {
                /*
@@ -90,7 +85,9 @@ int hmac_sha1_vector(const u8 *key, size_t key_len, size_t num_elem,
        _len[0] = 64;
        _addr[1] = mac;
        _len[1] = SHA1_MAC_LEN;
-       return sha1_vector(2, _addr, _len, mac);
+       ret = sha1_vector(2, _addr, _len, mac);
+       os_memset(k_pad, 0, sizeof(k_pad));
+       return ret;
 }
 
 
@@ -108,56 +105,3 @@ int hmac_sha1(const u8 *key, size_t key_len, const u8 *data, size_t data_len,
 {
        return hmac_sha1_vector(key, key_len, 1, &data, &data_len, mac);
 }
-
-
-/**
- * sha1_prf - SHA1-based Pseudo-Random Function (PRF) (IEEE 802.11i, 8.5.1.1)
- * @key: Key for PRF
- * @key_len: Length of the key in bytes
- * @label: A unique label for each purpose of the PRF
- * @data: Extra data to bind into the key
- * @data_len: Length of the data
- * @buf: Buffer for the generated pseudo-random key
- * @buf_len: Number of bytes of key to generate
- * Returns: 0 on success, -1 of failure
- *
- * This function is used to derive new, cryptographically separate keys from a
- * given key (e.g., PMK in IEEE 802.11i).
- */
-int sha1_prf(const u8 *key, size_t key_len, const char *label,
-            const u8 *data, size_t data_len, u8 *buf, size_t buf_len)
-{
-       u8 counter = 0;
-       size_t pos, plen;
-       u8 hash[SHA1_MAC_LEN];
-       size_t label_len = os_strlen(label) + 1;
-       const unsigned char *addr[3];
-       size_t len[3];
-
-       addr[0] = (u8 *) label;
-       len[0] = label_len;
-       addr[1] = data;
-       len[1] = data_len;
-       addr[2] = &counter;
-       len[2] = 1;
-
-       pos = 0;
-       while (pos < buf_len) {
-               plen = buf_len - pos;
-               if (plen >= SHA1_MAC_LEN) {
-                       if (hmac_sha1_vector(key, key_len, 3, addr, len,
-                                            &buf[pos]))
-                               return -1;
-                       pos += SHA1_MAC_LEN;
-               } else {
-                       if (hmac_sha1_vector(key, key_len, 3, addr, len,
-                                            hash))
-                               return -1;
-                       os_memcpy(&buf[pos], hash, plen);
-                       break;
-               }
-               counter++;
-       }
-
-       return 0;
-}