AuthServerRespond Parameters: - Nn, the nonce length. State: - state, a ServerAkeState structure. Input: - cleartext_credentials, a CleartextCredentials structure. - server_private_key, the server's private key. - client_public_key, the client's public key. - ke1, a KE1 message structure. Output: - auth_response, an AuthResponse structure. def AuthServerRespond(cleartext_credentials, server_private_key, client_public_key, ke1, credential_response): server_nonce = random(Nn) server_keyshare_seed = random(Nseed) (server_private_keyshare, server_public_keyshare) = DeriveDiffieHellmanKeyPair(server_keyshare_seed) preamble = Preamble(cleartext_credentials.client_identity, ke1, cleartext_credentials.server_identity, credential_response, server_nonce, server_public_keyshare) dh1 = DiffieHellman(server_private_keyshare, ke1.auth_request.client_public_keyshare) dh2 = DiffieHellman(server_private_key, ke1.auth_request.client_public_keyshare) dh3 = DiffieHellman(server_private_keyshare, client_public_key) ikm = concat(dh1, dh2, dh3) Km2, Km3, session_key = DeriveKeys(ikm, preamble) server_mac = MAC(Km2, Hash(preamble)) state.expected_client_mac = MAC(Km3, Hash(concat(preamble, server_mac))) state.session_key = session_key auth_response = AuthResponse { server_nonce, server_public_keyshare, server_mac } return auth_response