]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
Move SHA1-based PRF function into a separate C file
authorJouni Malinen <j@w1.fi>
Thu, 16 Aug 2012 17:23:12 +0000 (20:23 +0300)
committerJouni Malinen <j@w1.fi>
Thu, 16 Aug 2012 17:26:16 +0000 (20:26 +0300)
This makes it easier to conditionally build in SHA1 functions based
on which TLS/crypto library is used.

Signed-hostap: Jouni Malinen <j@w1.fi>

hostapd/Android.mk
hostapd/Makefile
src/crypto/Makefile
src/crypto/sha1-prf.c [new file with mode: 0644]
src/crypto/sha1.c
wpa_supplicant/Android.mk
wpa_supplicant/Makefile
wpa_supplicant/vs2005/eapol_test/eapol_test.vcproj
wpa_supplicant/vs2005/wpa_passphrase/wpa_passphrase.vcproj
wpa_supplicant/vs2005/wpa_supplicant/wpa_supplicant.vcproj
wpa_supplicant/vs2005/wpasvc/wpasvc.vcproj

index 73caa88b6e5ca99da682c518ab5f3914106a77a1..bc6d689b6369ede40ec6134b76f63a1870d21c78 100644 (file)
@@ -670,6 +670,7 @@ endif
 SHA1OBJS =
 ifdef NEED_SHA1
 SHA1OBJS += src/crypto/sha1.c
+SHA1OBJS += src/crypto/sha1-prf.c
 ifdef CONFIG_INTERNAL_SHA1
 SHA1OBJS += src/crypto/sha1-internal.c
 ifdef NEED_FIPS186_2_PRF
index c58cc79355c28110f4f4bc1df5b757b215d3ba8d..da1517de496319c080be5ebc8c3cffe18355f7bc 100644 (file)
@@ -661,6 +661,7 @@ endif
 
 ifdef NEED_SHA1
 SHA1OBJS += ../src/crypto/sha1.o
+SHA1OBJS += ../src/crypto/sha1-prf.o
 ifdef CONFIG_INTERNAL_SHA1
 SHA1OBJS += ../src/crypto/sha1-internal.o
 ifdef NEED_FIPS186_2_PRF
index b221dd44950f7d335e58dd827a013204ff47b3fe..33d0c343460470b24ca882e87397b02026024e2c 100644 (file)
@@ -38,6 +38,7 @@ LIB_OBJS= \
        sha1.o \
        sha1-internal.o \
        sha1-pbkdf2.o \
+       sha1-prf.o \
        sha1-tlsprf.o \
        sha1-tprf.o \
        sha256.o \
diff --git a/src/crypto/sha1-prf.c b/src/crypto/sha1-prf.c
new file mode 100644 (file)
index 0000000..90b9e74
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+ * SHA1-based PRF
+ * Copyright (c) 2003-2005, Jouni Malinen <j@w1.fi>
+ *
+ * This software may be distributed under the terms of the BSD license.
+ * See README for more details.
+ */
+
+#include "includes.h"
+
+#include "common.h"
+#include "sha1.h"
+#include "crypto.h"
+
+
+/**
+ * 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;
+}
index 274d81fa82e7d5d43a4a2351973d11dad646ea59..d48c77d75c5f003a782d590f6525d2444d90c154 100644 (file)
@@ -102,56 +102,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;
-}
index 94a3d963dcd4b49cfe902c7e270905df1a2274af..5ad2d678eeec5d682ffcd9fdc63ce0d53c94b0af 100644 (file)
@@ -1055,6 +1055,7 @@ endif
 SHA1OBJS =
 ifdef NEED_SHA1
 SHA1OBJS += src/crypto/sha1.c
+SHA1OBJS += src/crypto/sha1-prf.c
 ifdef CONFIG_INTERNAL_SHA1
 SHA1OBJS += src/crypto/sha1-internal.c
 ifdef NEED_FIPS186_2_PRF
index 7a6d8a3002c31c63abd99b203664655ff2d2ae25..63cff71b656bc0c7c67c0803280a0c7495006b8b 100644 (file)
@@ -1082,6 +1082,7 @@ endif
 
 ifdef NEED_SHA1
 SHA1OBJS += ../src/crypto/sha1.o
+SHA1OBJS += ../src/crypto/sha1-prf.o
 ifdef CONFIG_INTERNAL_SHA1
 SHA1OBJS += ../src/crypto/sha1-internal.o
 ifdef NEED_FIPS186_2_PRF
index 38b29c486d5903135a01e9a8cf6400413320ae80..af7b3fe9ceb01fda485cb784b442f933af04e7d0 100755 (executable)
                                RelativePath="..\..\..\src\crypto\sha1-pbkdf2.c"\r
                                >\r
                        </File>\r
+                       <File\r
+                               RelativePath="..\..\..\src\crypto\sha1-prf.c"\r
+                               >\r
+                       </File>\r
                        <File\r
                                RelativePath="..\..\..\src\crypto\sha1-tlsprf.c"\r
                                >\r
index b10784246d715f3b174a3836ab7bff2d1bfc9595..97aa2c5aecb5ecbccf6963f2873631e1fbf9918d 100755 (executable)
                                RelativePath="..\..\..\src\crypto\sha1-internal.c"\r
                                >\r
                        </File>\r
+                       <File\r
+                               RelativePath="..\..\..\src\crypto\sha1-prf.c"\r
+                               >\r
+                       </File>\r
                        <File\r
                                RelativePath="..\..\..\src\crypto\sha1-pbkdf2.c"\r
                                >\r
index e3886b7af13c947767d83f725bace25b92286b89..51acab9270c67e42c4fd2dfda694bf3dfdad4a7a 100755 (executable)
                                RelativePath="..\..\..\src\crypto\sha1-pbkdf2.c"\r
                                >\r
                        </File>\r
+                       <File\r
+                               RelativePath="..\..\..\src\crypto\sha1-prf.c"\r
+                               >\r
+                       </File>\r
                        <File\r
                                RelativePath="..\..\..\src\crypto\sha1-tlsprf.c"\r
                                >\r
index 1034891046bde68aeec1d904108a42ac1ea0ff14..6fd8af80303b052c0db742eaaa9295568b1b1fb4 100755 (executable)
                                RelativePath="..\..\..\src\crypto\sha1-pbkdf2.c"\r
                                >\r
                        </File>\r
+                       <File\r
+                               RelativePath="..\..\..\src\crypto\sha1-prf.c"\r
+                               >\r
+                       </File>\r
                        <File\r
                                RelativePath="..\..\..\src\crypto\sha1-tlsprf.c"\r
                                >\r