]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
Return success/failure result from sha384_prf()
authorJouni Malinen <j@w1.fi>
Sun, 12 Mar 2017 17:40:29 +0000 (19:40 +0200)
committerJouni Malinen <j@w1.fi>
Sun, 12 Mar 2017 18:43:06 +0000 (20:43 +0200)
This makes the function more consistent with sha256_prf().

Signed-off-by: Jouni Malinen <j@w1.fi>
src/crypto/sha384-prf.c
src/crypto/sha384.h

index 653920ba283d2fe3461425f66dbf50aa7a30cabb..03e3cb353a3d0e92a8297e479faa2311a7604ec5 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * SHA384-based KDF (IEEE 802.11ac)
- * Copyright (c) 2003-2015, Jouni Malinen <j@w1.fi>
+ * Copyright (c) 2003-2017, Jouni Malinen <j@w1.fi>
  *
  * This software may be distributed under the terms of the BSD license.
  * See README for more details.
  * @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 on failure
  *
  * This function is used to derive new, cryptographically separate keys from a
  * given key.
  */
-void sha384_prf(const u8 *key, size_t key_len, const char *label,
-               const u8 *data, size_t data_len, u8 *buf, size_t buf_len)
+int sha384_prf(const u8 *key, size_t key_len, const char *label,
+              const u8 *data, size_t data_len, u8 *buf, size_t buf_len)
 {
-       sha384_prf_bits(key, key_len, label, data, data_len, buf, buf_len * 8);
+       return sha384_prf_bits(key, key_len, label, data, data_len, buf,
+                              buf_len * 8);
 }
 
 
@@ -42,15 +44,16 @@ void sha384_prf(const u8 *key, size_t key_len, const char *label,
  * @data_len: Length of the data
  * @buf: Buffer for the generated pseudo-random key
  * @buf_len: Number of bits of key to generate
+ * Returns: 0 on success, -1 on failure
  *
  * This function is used to derive new, cryptographically separate keys from a
  * given key. If the requested buf_len is not divisible by eight, the least
  * significant 1-7 bits of the last octet in the output are not part of the
  * requested output.
  */
-void sha384_prf_bits(const u8 *key, size_t key_len, const char *label,
-                    const u8 *data, size_t data_len, u8 *buf,
-                    size_t buf_len_bits)
+int sha384_prf_bits(const u8 *key, size_t key_len, const char *label,
+                   const u8 *data, size_t data_len, u8 *buf,
+                   size_t buf_len_bits)
 {
        u16 counter = 1;
        size_t pos, plen;
@@ -75,11 +78,14 @@ void sha384_prf_bits(const u8 *key, size_t key_len, const char *label,
                plen = buf_len - pos;
                WPA_PUT_LE16(counter_le, counter);
                if (plen >= SHA384_MAC_LEN) {
-                       hmac_sha384_vector(key, key_len, 4, addr, len,
-                                          &buf[pos]);
+                       if (hmac_sha384_vector(key, key_len, 4, addr, len,
+                                              &buf[pos]) < 0)
+                               return -1;
                        pos += SHA384_MAC_LEN;
                } else {
-                       hmac_sha384_vector(key, key_len, 4, addr, len, hash);
+                       if (hmac_sha384_vector(key, key_len, 4, addr, len,
+                                              hash) < 0)
+                               return -1;
                        os_memcpy(&buf[pos], hash, plen);
                        pos += plen;
                        break;
@@ -97,4 +103,6 @@ void sha384_prf_bits(const u8 *key, size_t key_len, const char *label,
        }
 
        os_memset(hash, 0, sizeof(hash));
+
+       return 0;
 }
index 3deafa59ec290466958bc62a89a89d2a46299eba..74d0da3d7998a2df8f4d02388cca1ba42e450c7d 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * SHA384 hash implementation and interface functions
- * Copyright (c) 2015, Jouni Malinen <j@w1.fi>
+ * Copyright (c) 2015-2017, Jouni Malinen <j@w1.fi>
  *
  * This software may be distributed under the terms of the BSD license.
  * See README for more details.
@@ -15,10 +15,10 @@ int hmac_sha384_vector(const u8 *key, size_t key_len, size_t num_elem,
                       const u8 *addr[], const size_t *len, u8 *mac);
 int hmac_sha384(const u8 *key, size_t key_len, const u8 *data,
                size_t data_len, u8 *mac);
-void sha384_prf(const u8 *key, size_t key_len, const char *label,
-               const u8 *data, size_t data_len, u8 *buf, size_t buf_len);
-void sha384_prf_bits(const u8 *key, size_t key_len, const char *label,
-                    const u8 *data, size_t data_len, u8 *buf,
-                    size_t buf_len_bits);
+int sha384_prf(const u8 *key, size_t key_len, const char *label,
+              const u8 *data, size_t data_len, u8 *buf, size_t buf_len);
+int sha384_prf_bits(const u8 *key, size_t key_len, const char *label,
+                   const u8 *data, size_t data_len, u8 *buf,
+                   size_t buf_len_bits);
 
 #endif /* SHA384_H */