]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-auth: password-scheme-scram - Move scram_scheme_parse() to auth-scram
authorStephan Bosch <stephan.bosch@open-xchange.com>
Thu, 27 Feb 2025 19:56:20 +0000 (20:56 +0100)
committertimo.sirainen <timo.sirainen@open-xchange.com>
Thu, 9 Oct 2025 08:41:22 +0000 (08:41 +0000)
src/lib-auth/auth-scram.c
src/lib-auth/auth-scram.h
src/lib-auth/password-scheme-scram.c
src/lib-auth/password-scheme.h

index eeb78c3d2090d67ebb6fee131cc08e676ace8083..370d0fd7519853fb64c788b9943a5df60c39dbdd 100644 (file)
@@ -113,3 +113,49 @@ void auth_scram_generate_key_data(const struct hash_method *hmethod,
        safe_memset(salted_password, 0, sizeof(salted_password));
        safe_memset(client_key, 0, sizeof(client_key));
 }
+
+int scram_scheme_parse(const struct hash_method *hmethod, const char *name,
+                      const unsigned char *credentials, size_t size,
+                      unsigned int *iter_count_r, const char **salt_r,
+                      unsigned char stored_key_r[],
+                      unsigned char server_key_r[], const char **error_r)
+{
+       const char *const *fields;
+       buffer_t *buf;
+
+       /* password string format: iter,salt,stored_key,server_key */
+       fields = t_strsplit(t_strndup(credentials, size), ",");
+
+       if (str_array_length(fields) != 4) {
+               *error_r = t_strdup_printf(
+                       "Invalid %s passdb entry format", name);
+               return -1;
+       }
+       if (str_to_uint(fields[0], iter_count_r) < 0 ||
+           *iter_count_r < AUTH_SCRAM_MIN_ITERATE_COUNT ||
+           *iter_count_r > AUTH_SCRAM_MAX_ITERATE_COUNT) {
+               *error_r = t_strdup_printf(
+                       "Invalid %s iteration count in passdb", name);
+               return -1;
+       }
+       *salt_r = fields[1];
+
+       buf = t_buffer_create(hmethod->digest_size);
+       if (base64_decode(fields[2], strlen(fields[2]), buf) < 0 ||
+           buf->used != hmethod->digest_size) {
+               *error_r = t_strdup_printf(
+                       "Invalid %s StoredKey in passdb", name);
+               return -1;
+       }
+       memcpy(stored_key_r, buf->data, hmethod->digest_size);
+
+       buffer_set_used_size(buf, 0);
+       if (base64_decode(fields[3], strlen(fields[3]), buf) < 0 ||
+           buf->used != hmethod->digest_size) {
+               *error_r = t_strdup_printf(
+                       "Invalid %s ServerKey in passdb", name);
+               return -1;
+       }
+       memcpy(server_key_r, buf->data, hmethod->digest_size);
+       return 0;
+}
index 31d9501e35aa7c5f3959200fce7d2f1d40c35ec8..398eb22cc475000d5d2fb899f29db7d02a37e8e8 100644 (file)
@@ -37,4 +37,11 @@ void auth_scram_generate_key_data(const struct hash_method *hmethod,
                                  const char **salt_r,
                                  unsigned char stored_key_r[],
                                  unsigned char server_key_r[]);
+
+int scram_scheme_parse(const struct hash_method *hmethod, const char *name,
+                      const unsigned char *credentials, size_t size,
+                      unsigned int *iter_count_r, const char **salt_r,
+                      unsigned char stored_key_r[],
+                      unsigned char server_key_r[], const char **error_r);
+
 #endif
index c70ff2c607c031de40beb25bf9c79a026d389c1b..2a9d2afe9c022c279a703d1790484b70635c497a 100644 (file)
 #include "auth-scram.h"
 #include "password-scheme.h"
 
-int scram_scheme_parse(const struct hash_method *hmethod, const char *name,
-                      const unsigned char *credentials, size_t size,
-                      unsigned int *iter_count_r, const char **salt_r,
-                      unsigned char stored_key_r[],
-                      unsigned char server_key_r[], const char **error_r)
-{
-       const char *const *fields;
-       buffer_t *buf;
-
-       /* password string format: iter,salt,stored_key,server_key */
-       fields = t_strsplit(t_strndup(credentials, size), ",");
-
-       if (str_array_length(fields) != 4) {
-               *error_r = t_strdup_printf(
-                       "Invalid %s passdb entry format", name);
-               return -1;
-       }
-       if (str_to_uint(fields[0], iter_count_r) < 0 ||
-           *iter_count_r < AUTH_SCRAM_MIN_ITERATE_COUNT ||
-           *iter_count_r > AUTH_SCRAM_MAX_ITERATE_COUNT) {
-               *error_r = t_strdup_printf(
-                       "Invalid %s iteration count in passdb", name);
-               return -1;
-       }
-       *salt_r = fields[1];
-
-       buf = t_buffer_create(hmethod->digest_size);
-       if (base64_decode(fields[2], strlen(fields[2]), buf) < 0 ||
-           buf->used != hmethod->digest_size) {
-               *error_r = t_strdup_printf(
-                       "Invalid %s StoredKey in passdb", name);
-               return -1;
-       }
-       memcpy(stored_key_r, buf->data, hmethod->digest_size);
-
-       buffer_set_used_size(buf, 0);
-       if (base64_decode(fields[3], strlen(fields[3]), buf) < 0 ||
-           buf->used != hmethod->digest_size) {
-               *error_r = t_strdup_printf(
-                       "Invalid %s ServerKey in passdb", name);
-               return -1;
-       }
-       memcpy(server_key_r, buf->data, hmethod->digest_size);
-       return 0;
-}
-
 int scram_verify(const struct hash_method *hmethod, const char *scheme_name,
                 const char *plaintext, const unsigned char *raw_password,
                 size_t size, const char **error_r)
index e45c7a981da3760af5278c5211b4248ce234a8d8..7bc89caa5bce428f46517d5424f6bfea6044de0b 100644 (file)
@@ -102,11 +102,6 @@ int password_generate_otp(const char *pw, const char *state_data,
                          unsigned int algo, const char **result_r)
        ATTR_NULL(2);
 
-int scram_scheme_parse(const struct hash_method *hmethod, const char *name,
-                      const unsigned char *credentials, size_t size,
-                      unsigned int *iter_count_r, const char **salt_r,
-                      unsigned char stored_key_r[],
-                      unsigned char server_key_r[], const char **error_r);
 int scram_verify(const struct hash_method *hmethod, const char *scheme_name,
                 const char *plaintext, const unsigned char *raw_password,
                 size_t size, const char **error_r);