[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[libmicrohttpd] 09/10: digestauth: avoid repetitive calculations of some
From: |
gnunet |
Subject: |
[libmicrohttpd] 09/10: digestauth: avoid repetitive calculations of some strings' length |
Date: |
Mon, 06 Jun 2022 18:41:35 +0200 |
This is an automated email from the git hooks/post-receive script.
karlson2k pushed a commit to branch master
in repository libmicrohttpd.
commit d9ebd051d2877ba108e369a3c040f29c849ec0e0
Author: Evgeny Grin (Karlson2k) <k2k@narod.ru>
AuthorDate: Mon Jun 6 17:55:00 2022 +0300
digestauth: avoid repetitive calculations of some strings' length
---
src/microhttpd/digestauth.c | 27 +++++++++++++++++++++------
1 file changed, 21 insertions(+), 6 deletions(-)
diff --git a/src/microhttpd/digestauth.c b/src/microhttpd/digestauth.c
index efc53130..c3717d47 100644
--- a/src/microhttpd/digestauth.c
+++ b/src/microhttpd/digestauth.c
@@ -485,7 +485,9 @@ digest_calc_ha1_from_digest (const char *alg,
* @param alg The hash algorithm used, can be "MD5" or "MD5-sess"
* or "SHA-256" or "SHA-256-sess"
* @param username A `char *' pointer to the username value
+ * @param username the length of the @a username
* @param realm A `char *' pointer to the realm value
+ * @param realm_len the length of the @a realm
* @param password A `char *' pointer to the password value
* @param nonce A `char *' pointer to the nonce value
* @param cnonce A `char *' pointer to the cnonce value
@@ -495,7 +497,9 @@ digest_calc_ha1_from_digest (const char *alg,
static void
digest_calc_ha1_from_user (const char *alg,
const char *username,
+ size_t username_len,
const char *realm,
+ size_t realm_len,
const char *password,
const char *nonce,
const char *cnonce,
@@ -504,13 +508,13 @@ digest_calc_ha1_from_user (const char *alg,
digest_init (da);
digest_update (da,
(const unsigned char *) username,
- strlen (username));
+ username_len);
digest_update (da,
(const unsigned char *) ":",
1);
digest_update (da,
(const unsigned char *) realm,
- strlen (realm));
+ realm_len);
digest_update (da,
(const unsigned char *) ":",
1);
@@ -914,6 +918,7 @@ MHD_digest_auth_get_username (struct MHD_Connection
*connection)
* @param rnd_size The size of the random seed array @a rnd
* @param uri HTTP URI (in MHD, without the arguments ("?k=v")
* @param realm A string of characters that describes the realm of auth.
+ * @param realm_len the length of the @a realm.
* @param da digest algorithm to use
* @param[out] nonce A pointer to a character array for the nonce to put in,
* must provide NONCE_STD_LEN(da->digest_size)+1 bytes
@@ -925,6 +930,7 @@ calculate_nonce (uint64_t nonce_time,
size_t rnd_size,
const char *uri,
const char *realm,
+ size_t realm_len,
struct DigestAlgorithm *da,
char *nonce)
{
@@ -969,7 +975,7 @@ calculate_nonce (uint64_t nonce_time,
1);
digest_update (da,
(const unsigned char *) realm,
- strlen (realm));
+ realm_len);
digest_calc_hash (da);
MHD_bin_to_hex (digest_get_bin (da),
digest_get_size (da),
@@ -1045,6 +1051,7 @@ is_slot_available (const struct MHD_NonceNc *const nn,
* @param connection the MHD connection structure
* @param timestamp the current timestamp
* @param realm the string of characters that describes the realm of auth
+ * @param realm_len the lenght of the @a realm
* @param da the digest algorithm to use
* @param[out] nonce the pointer to a character array for the nonce to put in,
* must provide NONCE_STD_LEN(da->digest_size)+1 bytes
@@ -1055,6 +1062,7 @@ static bool
calculate_add_nonce (struct MHD_Connection *const connection,
uint64_t timestamp,
const char *realm,
+ size_t realm_len,
struct DigestAlgorithm *da,
char *nonce)
{
@@ -1072,6 +1080,7 @@ calculate_add_nonce (struct MHD_Connection *const
connection,
daemon->digest_auth_rand_size,
connection->url,
realm,
+ realm_len,
da,
nonce);
@@ -1118,8 +1127,10 @@ calculate_add_nonce_with_retry (struct MHD_Connection
*const connection,
char *nonce)
{
const uint64_t timestamp1 = MHD_monotonic_msec_counter ();
+ const size_t realm_len = strlen (realm);
- if (! calculate_add_nonce (connection, timestamp1, realm, da, nonce))
+ if (! calculate_add_nonce (connection, timestamp1, realm, realm_len, da,
+ nonce))
{
/* Either:
* 1. The same nonce was already generated. If it will be used then one
@@ -1156,9 +1167,10 @@ calculate_add_nonce_with_retry (struct MHD_Connection
*const connection,
/* Use up to 127 ms difference */
timestamp2 -= (base4 & DAUTH_JUMPBACK_MAX);
if (timestamp1 == timestamp2)
- timestamp2 -= 2;
+ timestamp2 -= 2; /* Fallback value */
}
- if (! calculate_add_nonce (connection, timestamp2, realm, da, nonce2))
+ if (! calculate_add_nonce (connection, timestamp2, realm, realm_len, da,
+ nonce2))
{
/* No free slot has been found. Re-tries are expensive, just use
* the generated nonce. As it is not stored in nonce-nc map array,
@@ -1534,6 +1546,7 @@ digest_auth_check_all (struct MHD_Connection *connection,
daemon->digest_auth_rand_size,
connection->url,
realm,
+ realm_len,
da,
noncehashexp);
/*
@@ -1779,7 +1792,9 @@ digest_auth_check_all (struct MHD_Connection *connection,
mhd_assert (NULL != password); /* NULL == digest => password != NULL */
digest_calc_ha1_from_user (digest_get_algo_name (da),
username,
+ username_len,
realm,
+ realm_len,
password,
noncehashexp,
cnonce,
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.
- [libmicrohttpd] branch master updated (56c4b4ae -> 8d5ebaec), gnunet, 2022/06/06
- [libmicrohttpd] 01/10: test_auth_parse: minor formatting imrpovement, gnunet, 2022/06/06
- [libmicrohttpd] 02/10: mhd_str: fixed doxy again, gnunet, 2022/06/06
- [libmicrohttpd] 03/10: MHD_str_equal_quoted_bin_n(): added new internal function, gnunet, 2022/06/06
- [libmicrohttpd] 04/10: test_str_quote: added new test, gnunet, 2022/06/06
- [libmicrohttpd] 06/10: MHD_str_equal_caseless_quoted_bin_n(): added new internal function, gnunet, 2022/06/06
- [libmicrohttpd] 09/10: digestauth: avoid repetitive calculations of some strings' length,
gnunet <=
- [libmicrohttpd] 08/10: Simplified Digest Auth code by using the new string processing functions, gnunet, 2022/06/06
- [libmicrohttpd] 05/10: Excluded build on the new string functions when they are unused, gnunet, 2022/06/06
- [libmicrohttpd] 10/10: gen_auth: simplified value assignment, gnunet, 2022/06/06
- [libmicrohttpd] 07/10: test_str_quote: added testing of the new function, gnunet, 2022/06/06