From: Stephan Bosch Date: Mon, 26 Sep 2022 23:37:11 +0000 (+0200) Subject: auth: mech-scram - Move get_scram_server_final() to auth-scram-server.c. X-Git-Tag: 2.4.0~3142 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=835a02ae24ebee2560a38228d5134e7faf869fef;p=thirdparty%2Fdovecot%2Fcore.git auth: mech-scram - Move get_scram_server_final() to auth-scram-server.c. --- diff --git a/src/auth/auth-scram-server.c b/src/auth/auth-scram-server.c index dbe6a1e407..2b90855d1a 100644 --- a/src/auth/auth-scram-server.c +++ b/src/auth/auth-scram-server.c @@ -321,3 +321,42 @@ parse_scram_client_final(struct scram_auth_request *request, return TRUE; } + +static const char *get_scram_server_final(struct scram_auth_request *request) +{ + const struct hash_method *hmethod = request->hash_method; + struct hmac_context ctx; + const char *auth_message; + unsigned char server_signature[hmethod->digest_size]; + string_t *str; + + /* RFC 5802, Section 3: + + AuthMessage := client-first-message-bare + "," + + server-first-message + "," + + client-final-message-without-proof + ServerSignature := HMAC(ServerKey, AuthMessage) + */ + auth_message = t_strconcat(request->client_first_message_bare, ",", + request->server_first_message, ",", + request->client_final_message_without_proof, NULL); + + hmac_init(&ctx, request->server_key, hmethod->digest_size, hmethod); + hmac_update(&ctx, auth_message, strlen(auth_message)); + hmac_final(&ctx, server_signature); + + /* RFC 5802, Section 7: + + server-final-message = (server-error / verifier) + ["," extensions] + + verifier = "v=" base64 + ;; base-64 encoded ServerSignature. + + */ + str = t_str_new(2 + MAX_BASE64_ENCODED_SIZE(sizeof(server_signature))); + str_append(str, "v="); + base64_encode(server_signature, sizeof(server_signature), str); + + return str_c(str); +} diff --git a/src/auth/mech-scram.c b/src/auth/mech-scram.c index 232ae97caa..21970ef6c1 100644 --- a/src/auth/mech-scram.c +++ b/src/auth/mech-scram.c @@ -48,45 +48,6 @@ struct scram_auth_request { unsigned char *server_key; }; -static const char *get_scram_server_final(struct scram_auth_request *request) -{ - const struct hash_method *hmethod = request->hash_method; - struct hmac_context ctx; - const char *auth_message; - unsigned char server_signature[hmethod->digest_size]; - string_t *str; - - /* RFC 5802, Section 3: - - AuthMessage := client-first-message-bare + "," + - server-first-message + "," + - client-final-message-without-proof - ServerSignature := HMAC(ServerKey, AuthMessage) - */ - auth_message = t_strconcat(request->client_first_message_bare, ",", - request->server_first_message, ",", - request->client_final_message_without_proof, NULL); - - hmac_init(&ctx, request->server_key, hmethod->digest_size, hmethod); - hmac_update(&ctx, auth_message, strlen(auth_message)); - hmac_final(&ctx, server_signature); - - /* RFC 5802, Section 7: - - server-final-message = (server-error / verifier) - ["," extensions] - - verifier = "v=" base64 - ;; base-64 encoded ServerSignature. - - */ - str = t_str_new(2 + MAX_BASE64_ENCODED_SIZE(sizeof(server_signature))); - str_append(str, "v="); - base64_encode(server_signature, sizeof(server_signature), str); - - return str_c(str); -} - #include "auth-scram-server.c" static void