Document EVP_BytesToKey a bit better

This is a generalized PBKDF1. Also you shouldn't use it unless you want
PBKDF1.

Change-Id: I05313aa775123503391e66697810fda8538d74f7
Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/75628
Reviewed-by: Bob Beck <bbe@google.com>
Commit-Queue: David Benjamin <davidben@google.com>
Auto-Submit: David Benjamin <davidben@google.com>
Commit-Queue: Bob Beck <bbe@google.com>
This commit is contained in:
David Benjamin
2025-01-23 12:52:36 -08:00
committed by Boringssl LUCI CQ
parent 15bab61253
commit 03e6d7e480
+18 -4
View File
@@ -274,11 +274,25 @@ OPENSSL_EXPORT uint32_t EVP_CIPHER_mode(const EVP_CIPHER *cipher);
// Key derivation.
// EVP_BytesToKey generates a key and IV for the cipher |type| by iterating
// |md| |count| times using |data| and |salt|. On entry, the |key| and |iv|
// buffers must have enough space to hold a key and IV for |type|. It returns
// the length of the key on success or zero on error.
// |md| |count| times using |data| and an optional |salt|, writing the result to
// |key| and |iv|. If not NULL, the |key| and |iv| buffers must have enough
// space to hold a key and IV for |type|, as returned by |EVP_CIPHER_key_length|
// and |EVP_CIPHER_iv_length|. This function returns the length of the key
// (without the IV) on success or zero on error.
//
// If |salt| is NULL, the empty string is used as the salt. Salt lengths other
// than 0 and 8 are not supported by this function. Either of |key| or |iv| may
// be NULL to skip that output.
//
// When the total data derived is less than the size of |md|, this function
// implements PBKDF1 from RFC 8018. Otherwise, it generalizes PBKDF1 by
// computing prepending the previous output to |data| and re-running PBKDF1 for
// further output.
//
// This function is provided for compatibility with legacy uses of PBKDF1. New
// applications should use a more modern algorithm, such as |EVP_PBE_scrypt|.
OPENSSL_EXPORT int EVP_BytesToKey(const EVP_CIPHER *type, const EVP_MD *md,
const uint8_t *salt, const uint8_t *data,
const uint8_t salt[8], const uint8_t *data,
size_t data_len, unsigned count, uint8_t *key,
uint8_t *iv);