function Auth_OpenID_associate($qs, $assoc_secret, $assoc_handle) { $query_data = Auth_OpenID_parse($qs); assert(count($query_data) == 6 || count($query_data) == 4); assert($query_data['openid.mode'] == 'associate'); assert($query_data['openid.assoc_type'] == 'HMAC-SHA1'); assert($query_data['openid.session_type'] == 'DH-SHA1'); $reply_dict = array('assoc_type' => 'HMAC-SHA1', 'assoc_handle' => $assoc_handle, 'expires_in' => '600'); $dh_args = Auth_OpenID_DiffieHellman::serverAssociate($query_data, $assoc_secret); $reply_dict = array_merge($reply_dict, $dh_args); return Auth_OpenID_KVForm::fromArray($reply_dict); }