[RFC 7/8] cert: add explicit length to l_cert_pkcs5_pbkdf2
James Prestwood <[email protected]> Fri, 18 Nov 2022 13:16:23 -0800
| Newsgroups | dev.linux.lists.ell |
|---|---|
| Message-ID | <[email protected]> |
Rather than assume the password/key is a NULL terminated string pass the length in too. This is more flexible in case of a binary key. --- ell/cert-crypto.c | 7 ++++--- ell/cert.h | 1 + 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/ell/cert-crypto.c b/ell/cert-crypto.c index 42f602e..ec14c04 100644 --- a/ell/cert-crypto.c +++ b/ell/cert-crypto.c @@ -175,7 +175,7 @@ static bool cert_pkcs5_pbkdf2(struct l_checksum *checksum, const uint8_t *salt, /* RFC8018 section 5.2 */ LIB_EXPORT bool l_cert_pkcs5_pbkdf2(enum l_checksum_type type, - const char *password, + const char *password, size_t pass_len, const uint8_t *salt, size_t salt_len, unsigned int iter_count, uint8_t *out_dk, size_t dk_len) @@ -188,7 +188,7 @@ LIB_EXPORT bool l_cert_pkcs5_pbkdf2(enum l_checksum_type type, if (!h_len) return false; - checksum = l_checksum_new_hmac(type, password, strlen(password)); + checksum = l_checksum_new_hmac(type, password, pass_len); if (!checksum) return false; @@ -648,7 +648,8 @@ static struct l_cipher *cipher_from_pkcs5_pbes2_params( /* RFC8018 section 6.2 */ - if (!l_cert_pkcs5_pbkdf2(prf_alg, password, salt, salt_len, iter_count, + if (!l_cert_pkcs5_pbkdf2(prf_alg, password, strlen(password), salt, + salt_len, iter_count, derived_key, key_len)) return NULL; diff --git a/ell/cert.h b/ell/cert.h index ce430fa..8ad57b6 100644 --- a/ell/cert.h +++ b/ell/cert.h @@ -73,6 +73,7 @@ bool l_cert_pkcs5_pbkdf1(enum l_checksum_type type, const char *password, unsigned int iter_count, uint8_t *out_dk, size_t dk_len); bool l_cert_pkcs5_pbkdf2(enum l_checksum_type type, const char *password, + size_t pass_len, const uint8_t *salt, size_t salt_len, unsigned int iter_count, uint8_t *out_dk, size_t dk_len); -- 2.34.3