164064216a8433360745f69edddce19a606659163The Android Open Source Project/** \file mainSecSm.c
264064216a8433360745f69edddce19a606659163The Android Open Source Project *  \brief 802.1X finite state machine header file
364064216a8433360745f69edddce19a606659163The Android Open Source Project *
464064216a8433360745f69edddce19a606659163The Android Open Source Project *  \see mainSecSm.h
564064216a8433360745f69edddce19a606659163The Android Open Source Project */
664064216a8433360745f69edddce19a606659163The Android Open Source Project
764064216a8433360745f69edddce19a606659163The Android Open Source Project/****************************************************************************
864064216a8433360745f69edddce19a606659163The Android Open Source Project**+-----------------------------------------------------------------------+**
964064216a8433360745f69edddce19a606659163The Android Open Source Project**|                                                                       |**
1064064216a8433360745f69edddce19a606659163The Android Open Source Project**| Copyright(c) 1998 - 2008 Texas Instruments. All rights reserved.      |**
1164064216a8433360745f69edddce19a606659163The Android Open Source Project**| All rights reserved.                                                  |**
1264064216a8433360745f69edddce19a606659163The Android Open Source Project**|                                                                       |**
1364064216a8433360745f69edddce19a606659163The Android Open Source Project**| Redistribution and use in source and binary forms, with or without    |**
1464064216a8433360745f69edddce19a606659163The Android Open Source Project**| modification, are permitted provided that the following conditions    |**
1564064216a8433360745f69edddce19a606659163The Android Open Source Project**| are met:                                                              |**
1664064216a8433360745f69edddce19a606659163The Android Open Source Project**|                                                                       |**
1764064216a8433360745f69edddce19a606659163The Android Open Source Project**|  * Redistributions of source code must retain the above copyright     |**
1864064216a8433360745f69edddce19a606659163The Android Open Source Project**|    notice, this list of conditions and the following disclaimer.      |**
1964064216a8433360745f69edddce19a606659163The Android Open Source Project**|  * Redistributions in binary form must reproduce the above copyright  |**
2064064216a8433360745f69edddce19a606659163The Android Open Source Project**|    notice, this list of conditions and the following disclaimer in    |**
2164064216a8433360745f69edddce19a606659163The Android Open Source Project**|    the documentation and/or other materials provided with the         |**
2264064216a8433360745f69edddce19a606659163The Android Open Source Project**|    distribution.                                                      |**
2364064216a8433360745f69edddce19a606659163The Android Open Source Project**|  * Neither the name Texas Instruments nor the names of its            |**
2464064216a8433360745f69edddce19a606659163The Android Open Source Project**|    contributors may be used to endorse or promote products derived    |**
2564064216a8433360745f69edddce19a606659163The Android Open Source Project**|    from this software without specific prior written permission.      |**
2664064216a8433360745f69edddce19a606659163The Android Open Source Project**|                                                                       |**
2764064216a8433360745f69edddce19a606659163The Android Open Source Project**| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS   |**
2864064216a8433360745f69edddce19a606659163The Android Open Source Project**| "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT     |**
2964064216a8433360745f69edddce19a606659163The Android Open Source Project**| LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |**
3064064216a8433360745f69edddce19a606659163The Android Open Source Project**| A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT  |**
3164064216a8433360745f69edddce19a606659163The Android Open Source Project**| OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |**
3264064216a8433360745f69edddce19a606659163The Android Open Source Project**| SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT      |**
3364064216a8433360745f69edddce19a606659163The Android Open Source Project**| LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |**
3464064216a8433360745f69edddce19a606659163The Android Open Source Project**| DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |**
3564064216a8433360745f69edddce19a606659163The Android Open Source Project**| THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT   |**
3664064216a8433360745f69edddce19a606659163The Android Open Source Project**| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |**
3764064216a8433360745f69edddce19a606659163The Android Open Source Project**| OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  |**
3864064216a8433360745f69edddce19a606659163The Android Open Source Project**|                                                                       |**
3964064216a8433360745f69edddce19a606659163The Android Open Source Project**+-----------------------------------------------------------------------+**
4064064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************/
4164064216a8433360745f69edddce19a606659163The Android Open Source Project
4264064216a8433360745f69edddce19a606659163The Android Open Source Project/***************************************************************************/
4364064216a8433360745f69edddce19a606659163The Android Open Source Project/*                                                                         */
4464064216a8433360745f69edddce19a606659163The Android Open Source Project/*      MODULE: mainSecSm.c                                                */
4564064216a8433360745f69edddce19a606659163The Android Open Source Project/*    PURPOSE:  Main Security State Machine API                            */
4664064216a8433360745f69edddce19a606659163The Android Open Source Project/*                                                                         */
4764064216a8433360745f69edddce19a606659163The Android Open Source Project/***************************************************************************/
4864064216a8433360745f69edddce19a606659163The Android Open Source Project
4964064216a8433360745f69edddce19a606659163The Android Open Source Project#include "osApi.h"
5064064216a8433360745f69edddce19a606659163The Android Open Source Project
5164064216a8433360745f69edddce19a606659163The Android Open Source Project#include "paramOut.h"
5264064216a8433360745f69edddce19a606659163The Android Open Source Project/*#include "paramIn.h"*/
5364064216a8433360745f69edddce19a606659163The Android Open Source Project
5464064216a8433360745f69edddce19a606659163The Android Open Source Project#include "utils.h"
5564064216a8433360745f69edddce19a606659163The Android Open Source Project#include "report.h"
5664064216a8433360745f69edddce19a606659163The Android Open Source Project
5764064216a8433360745f69edddce19a606659163The Android Open Source Project#include "DataCtrl_Api.h"
5864064216a8433360745f69edddce19a606659163The Android Open Source Project#include "smeApi.h"
5964064216a8433360745f69edddce19a606659163The Android Open Source Project
6064064216a8433360745f69edddce19a606659163The Android Open Source Project#include "rsn.h"
6164064216a8433360745f69edddce19a606659163The Android Open Source Project#include "rsnApi.h"
6264064216a8433360745f69edddce19a606659163The Android Open Source Project
6364064216a8433360745f69edddce19a606659163The Android Open Source Project#include "mainSecSm.h"
6464064216a8433360745f69edddce19a606659163The Android Open Source Project#include "mainSecNull.h"
6564064216a8433360745f69edddce19a606659163The Android Open Source Project
6664064216a8433360745f69edddce19a606659163The Android Open Source Project
6764064216a8433360745f69edddce19a606659163The Android Open Source Project#include "mainSecKeysOnly.h"
6864064216a8433360745f69edddce19a606659163The Android Open Source Project#include "mainKeysSm.h"
6964064216a8433360745f69edddce19a606659163The Android Open Source Project
7064064216a8433360745f69edddce19a606659163The Android Open Source Project/* Constants */
7164064216a8433360745f69edddce19a606659163The Android Open Source Project
7264064216a8433360745f69edddce19a606659163The Android Open Source Project/** number of events in the state machine */
7364064216a8433360745f69edddce19a606659163The Android Open Source Project#define MAIN_SEC_MAX_NUM_EVENTS     7
7464064216a8433360745f69edddce19a606659163The Android Open Source Project
7564064216a8433360745f69edddce19a606659163The Android Open Source Project/** number of states in the state machine */
7664064216a8433360745f69edddce19a606659163The Android Open Source Project#define MAIN_SEC_MAX_NUM_STATES     6
7764064216a8433360745f69edddce19a606659163The Android Open Source Project
7864064216a8433360745f69edddce19a606659163The Android Open Source Project/* Enumerations */
7964064216a8433360745f69edddce19a606659163The Android Open Source Project
8064064216a8433360745f69edddce19a606659163The Android Open Source Project/* Typedefs */
8164064216a8433360745f69edddce19a606659163The Android Open Source Project
8264064216a8433360745f69edddce19a606659163The Android Open Source Project/* Structures */
8364064216a8433360745f69edddce19a606659163The Android Open Source Project
8464064216a8433360745f69edddce19a606659163The Android Open Source Project/* External data definitions */
8564064216a8433360745f69edddce19a606659163The Android Open Source Project
8664064216a8433360745f69edddce19a606659163The Android Open Source Project/* External functions definitions */
8764064216a8433360745f69edddce19a606659163The Android Open Source Project
8864064216a8433360745f69edddce19a606659163The Android Open Source Project/* Global variables */
8964064216a8433360745f69edddce19a606659163The Android Open Source Project
9064064216a8433360745f69edddce19a606659163The Android Open Source Project/* Local function prototypes */
9164064216a8433360745f69edddce19a606659163The Android Open Source Project
9264064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS mainSec_setKey(struct _mainSec_t *pMainSec, securityKeys_t *pKey);
9364064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS mainSec_removeKey(struct _mainSec_t *pMainSec, securityKeys_t *pKey);
9464064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS mainSec_setDefaultKeyId(struct _mainSec_t *pMainSec, UINT8 keyId);
9564064216a8433360745f69edddce19a606659163The Android Open Source Project
9664064216a8433360745f69edddce19a606659163The Android Open Source Project/* functions */
9764064216a8433360745f69edddce19a606659163The Android Open Source Project
9864064216a8433360745f69edddce19a606659163The Android Open Source Project/**
9964064216a8433360745f69edddce19a606659163The Android Open Source Project*
10064064216a8433360745f69edddce19a606659163The Android Open Source Project* mainSec_create
10164064216a8433360745f69edddce19a606659163The Android Open Source Project*
10264064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
10364064216a8433360745f69edddce19a606659163The Android Open Source Project*
10464064216a8433360745f69edddce19a606659163The Android Open Source Project* Allocate memory for the main security context, and create all the rest of the needed contexts.
10564064216a8433360745f69edddce19a606659163The Android Open Source Project*
10664064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
10764064216a8433360745f69edddce19a606659163The Android Open Source Project*
10864064216a8433360745f69edddce19a606659163The Android Open Source Project*  I - hOs - OS handle for OS operations.
10964064216a8433360745f69edddce19a606659163The Android Open Source Project*
11064064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
11164064216a8433360745f69edddce19a606659163The Android Open Source Project*
11264064216a8433360745f69edddce19a606659163The Android Open Source Project*  pointer to main security context. If failed, returns NULL.
11364064216a8433360745f69edddce19a606659163The Android Open Source Project*
11464064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
11564064216a8433360745f69edddce19a606659163The Android Open Source Project*/
11664064216a8433360745f69edddce19a606659163The Android Open Source ProjectmainSec_t* mainSec_create(TI_HANDLE hOs)
11764064216a8433360745f69edddce19a606659163The Android Open Source Project{
11864064216a8433360745f69edddce19a606659163The Android Open Source Project    mainSec_t   *pHandle;
11964064216a8433360745f69edddce19a606659163The Android Open Source Project    TI_STATUS       status;
12064064216a8433360745f69edddce19a606659163The Android Open Source Project
12164064216a8433360745f69edddce19a606659163The Android Open Source Project    /* allocate association context memory */
12264064216a8433360745f69edddce19a606659163The Android Open Source Project    pHandle = (mainSec_t*)os_memoryAlloc(hOs, sizeof(mainSec_t));
12364064216a8433360745f69edddce19a606659163The Android Open Source Project    if (pHandle == NULL)
12464064216a8433360745f69edddce19a606659163The Android Open Source Project    {
12564064216a8433360745f69edddce19a606659163The Android Open Source Project        return NULL;
12664064216a8433360745f69edddce19a606659163The Android Open Source Project    }
12764064216a8433360745f69edddce19a606659163The Android Open Source Project
12864064216a8433360745f69edddce19a606659163The Android Open Source Project    os_memoryZero(hOs, pHandle, sizeof(mainSec_t));
12964064216a8433360745f69edddce19a606659163The Android Open Source Project
13064064216a8433360745f69edddce19a606659163The Android Open Source Project    /* allocate memory for association state machine */
13164064216a8433360745f69edddce19a606659163The Android Open Source Project    status = fsm_Create(hOs, &pHandle->pMainSecSm, MAIN_SEC_MAX_NUM_STATES, MAIN_SEC_MAX_NUM_EVENTS);
13264064216a8433360745f69edddce19a606659163The Android Open Source Project    if (status != OK)
13364064216a8433360745f69edddce19a606659163The Android Open Source Project    {
13464064216a8433360745f69edddce19a606659163The Android Open Source Project        os_memoryFree(hOs, pHandle, sizeof(mainSec_t));
13564064216a8433360745f69edddce19a606659163The Android Open Source Project        return NULL;
13664064216a8433360745f69edddce19a606659163The Android Open Source Project    }
13764064216a8433360745f69edddce19a606659163The Android Open Source Project
13864064216a8433360745f69edddce19a606659163The Android Open Source Project    pHandle->pMainKeys = mainKeys_create(hOs);
13964064216a8433360745f69edddce19a606659163The Android Open Source Project    if (pHandle->pMainKeys == NULL)
14064064216a8433360745f69edddce19a606659163The Android Open Source Project    {
14164064216a8433360745f69edddce19a606659163The Android Open Source Project        fsm_Unload(hOs, pHandle->pMainSecSm);
14264064216a8433360745f69edddce19a606659163The Android Open Source Project        os_memoryFree(hOs, pHandle, sizeof(mainSec_t));
14364064216a8433360745f69edddce19a606659163The Android Open Source Project        return NULL;
14464064216a8433360745f69edddce19a606659163The Android Open Source Project    }
14564064216a8433360745f69edddce19a606659163The Android Open Source Project
14664064216a8433360745f69edddce19a606659163The Android Open Source Project    pHandle->pKeyParser = pHandle->pMainKeys->pKeyParser;
14764064216a8433360745f69edddce19a606659163The Android Open Source Project
14864064216a8433360745f69edddce19a606659163The Android Open Source Project
14964064216a8433360745f69edddce19a606659163The Android Open Source Project    pHandle->hOs = hOs;
15064064216a8433360745f69edddce19a606659163The Android Open Source Project
15164064216a8433360745f69edddce19a606659163The Android Open Source Project    return pHandle;
15264064216a8433360745f69edddce19a606659163The Android Open Source Project}
15364064216a8433360745f69edddce19a606659163The Android Open Source Project
15464064216a8433360745f69edddce19a606659163The Android Open Source Project/**
15564064216a8433360745f69edddce19a606659163The Android Open Source Project*
15664064216a8433360745f69edddce19a606659163The Android Open Source Project* mainSec_config
15764064216a8433360745f69edddce19a606659163The Android Open Source Project*
15864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
15964064216a8433360745f69edddce19a606659163The Android Open Source Project*
16064064216a8433360745f69edddce19a606659163The Android Open Source Project* Init main security state machine state machine
16164064216a8433360745f69edddce19a606659163The Android Open Source Project*
16264064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
16364064216a8433360745f69edddce19a606659163The Android Open Source Project*
16464064216a8433360745f69edddce19a606659163The Android Open Source Project*  none
16564064216a8433360745f69edddce19a606659163The Android Open Source Project*
16664064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
16764064216a8433360745f69edddce19a606659163The Android Open Source Project*
16864064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK on success, NOK otherwise.
16964064216a8433360745f69edddce19a606659163The Android Open Source Project*
17064064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
17164064216a8433360745f69edddce19a606659163The Android Open Source Project*/
17264064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS mainSec_config(mainSec_t *pMainSec,
17364064216a8433360745f69edddce19a606659163The Android Open Source Project                      mainSecInitData_t *pInitData,
17464064216a8433360745f69edddce19a606659163The Android Open Source Project                      void *pParent,
17564064216a8433360745f69edddce19a606659163The Android Open Source Project                      TI_HANDLE hReport,
17664064216a8433360745f69edddce19a606659163The Android Open Source Project                      TI_HANDLE hOs,
17764064216a8433360745f69edddce19a606659163The Android Open Source Project                      TI_HANDLE hCtrlData,
17864064216a8433360745f69edddce19a606659163The Android Open Source Project                      TI_HANDLE hEvHandler,
17964064216a8433360745f69edddce19a606659163The Android Open Source Project                      TI_HANDLE hConn,
18064064216a8433360745f69edddce19a606659163The Android Open Source Project                      TI_HANDLE hHalCtrl   )
18164064216a8433360745f69edddce19a606659163The Android Open Source Project{
18264064216a8433360745f69edddce19a606659163The Android Open Source Project    TI_STATUS               status;
18364064216a8433360745f69edddce19a606659163The Android Open Source Project
18464064216a8433360745f69edddce19a606659163The Android Open Source Project    pMainSec->setKey = mainSec_setKey;
18564064216a8433360745f69edddce19a606659163The Android Open Source Project    pMainSec->removeKey = mainSec_removeKey;
18664064216a8433360745f69edddce19a606659163The Android Open Source Project    pMainSec->setDefaultKeyId = mainSec_setDefaultKeyId;
18764064216a8433360745f69edddce19a606659163The Android Open Source Project
18864064216a8433360745f69edddce19a606659163The Android Open Source Project    pMainSec->pParent = pParent;
18964064216a8433360745f69edddce19a606659163The Android Open Source Project    pMainSec->hReport = hReport;
19064064216a8433360745f69edddce19a606659163The Android Open Source Project    pMainSec->hOs = hOs;
19164064216a8433360745f69edddce19a606659163The Android Open Source Project
19264064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_REPORT_SM(pMainSec->hReport,RSN_MODULE_LOG,
19364064216a8433360745f69edddce19a606659163The Android Open Source Project				   ("MainSec SM: config, authProtocol = %d, keyExchangeProtocol=%d, unicastSuite=%d, broadcastSuite=%d\n",
19464064216a8433360745f69edddce19a606659163The Android Open Source Project                    pInitData->pPaeConfig->authProtocol, pInitData->pPaeConfig->keyExchangeProtocol,
19564064216a8433360745f69edddce19a606659163The Android Open Source Project                    pInitData->pPaeConfig->unicastSuite, pInitData->pPaeConfig->broadcastSuite));
19664064216a8433360745f69edddce19a606659163The Android Open Source Project
19764064216a8433360745f69edddce19a606659163The Android Open Source Project    switch (pInitData->pPaeConfig->keyExchangeProtocol)
19864064216a8433360745f69edddce19a606659163The Android Open Source Project    {
19964064216a8433360745f69edddce19a606659163The Android Open Source Project    case RSN_KEY_MNG_NONE:
20064064216a8433360745f69edddce19a606659163The Android Open Source Project        status = mainSecSmNull_config(pMainSec, pInitData->pPaeConfig);
20164064216a8433360745f69edddce19a606659163The Android Open Source Project        break;
20264064216a8433360745f69edddce19a606659163The Android Open Source Project    case RSN_KEY_MNG_802_1X:
20364064216a8433360745f69edddce19a606659163The Android Open Source Project        status = mainSecKeysOnly_config(pMainSec, pInitData->pPaeConfig);
20464064216a8433360745f69edddce19a606659163The Android Open Source Project        break;
20564064216a8433360745f69edddce19a606659163The Android Open Source Project    default:
20664064216a8433360745f69edddce19a606659163The Android Open Source Project        status = mainSecSmNull_config(pMainSec, pInitData->pPaeConfig);
20764064216a8433360745f69edddce19a606659163The Android Open Source Project        break;
20864064216a8433360745f69edddce19a606659163The Android Open Source Project    }
20964064216a8433360745f69edddce19a606659163The Android Open Source Project
21064064216a8433360745f69edddce19a606659163The Android Open Source Project    status  = mainKeys_config(pMainSec->pMainKeys, pInitData->pPaeConfig, pMainSec, pMainSec->hReport, pMainSec->hOs,
21164064216a8433360745f69edddce19a606659163The Android Open Source Project                           hCtrlData, hEvHandler, hConn, pMainSec->pParent);
21264064216a8433360745f69edddce19a606659163The Android Open Source Project    if (status != OK)
21364064216a8433360745f69edddce19a606659163The Android Open Source Project    {
21464064216a8433360745f69edddce19a606659163The Android Open Source Project        WLAN_REPORT_ERROR(pMainSec->hReport, RSN_MODULE_LOG,
21564064216a8433360745f69edddce19a606659163The Android Open Source Project                          ("MAIN_SEC_SM: error in configuring mainKeys SM\n"));
21664064216a8433360745f69edddce19a606659163The Android Open Source Project        return status;
21764064216a8433360745f69edddce19a606659163The Android Open Source Project    }
21864064216a8433360745f69edddce19a606659163The Android Open Source Project
21964064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_REPORT_SM(pMainSec->hReport, RSN_MODULE_LOG,
22064064216a8433360745f69edddce19a606659163The Android Open Source Project                          ("MAIN_SEC_SM: successful configuration SM\n"));
22164064216a8433360745f69edddce19a606659163The Android Open Source Project
22264064216a8433360745f69edddce19a606659163The Android Open Source Project    return status;
22364064216a8433360745f69edddce19a606659163The Android Open Source Project}
22464064216a8433360745f69edddce19a606659163The Android Open Source Project
22564064216a8433360745f69edddce19a606659163The Android Open Source Project/**
22664064216a8433360745f69edddce19a606659163The Android Open Source Project*
22764064216a8433360745f69edddce19a606659163The Android Open Source Project* mainSec_config
22864064216a8433360745f69edddce19a606659163The Android Open Source Project*
22964064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
23064064216a8433360745f69edddce19a606659163The Android Open Source Project*
23164064216a8433360745f69edddce19a606659163The Android Open Source Project* Init main security state machine state machine
23264064216a8433360745f69edddce19a606659163The Android Open Source Project*
23364064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
23464064216a8433360745f69edddce19a606659163The Android Open Source Project*
23564064216a8433360745f69edddce19a606659163The Android Open Source Project*  none
23664064216a8433360745f69edddce19a606659163The Android Open Source Project*
23764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
23864064216a8433360745f69edddce19a606659163The Android Open Source Project*
23964064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK on success, NOK otherwise.
24064064216a8433360745f69edddce19a606659163The Android Open Source Project*
24164064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
24264064216a8433360745f69edddce19a606659163The Android Open Source Project*/
24364064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS mainSec_unload(mainSec_t *pMainSec)
24464064216a8433360745f69edddce19a606659163The Android Open Source Project{
24564064216a8433360745f69edddce19a606659163The Android Open Source Project    TI_STATUS   status;
24664064216a8433360745f69edddce19a606659163The Android Open Source Project
24764064216a8433360745f69edddce19a606659163The Android Open Source Project    if (pMainSec == NULL)
24864064216a8433360745f69edddce19a606659163The Android Open Source Project    {
24964064216a8433360745f69edddce19a606659163The Android Open Source Project        return NOK;
25064064216a8433360745f69edddce19a606659163The Android Open Source Project    }
25164064216a8433360745f69edddce19a606659163The Android Open Source Project
25264064216a8433360745f69edddce19a606659163The Android Open Source Project    status = mainKeys_unload(pMainSec->pMainKeys);
25364064216a8433360745f69edddce19a606659163The Android Open Source Project    if (status != OK)
25464064216a8433360745f69edddce19a606659163The Android Open Source Project    {
25564064216a8433360745f69edddce19a606659163The Android Open Source Project        /* report failure but don't stop... */
25664064216a8433360745f69edddce19a606659163The Android Open Source Project        WLAN_REPORT_ERROR(pMainSec->hReport, RSN_MODULE_LOG,
25764064216a8433360745f69edddce19a606659163The Android Open Source Project                          ("MAIN_SEC_SM: Error releasing Main Keys SM memory \n"));
25864064216a8433360745f69edddce19a606659163The Android Open Source Project    }
25964064216a8433360745f69edddce19a606659163The Android Open Source Project
26064064216a8433360745f69edddce19a606659163The Android Open Source Project    status = fsm_Unload(pMainSec->hOs, pMainSec->pMainSecSm);
26164064216a8433360745f69edddce19a606659163The Android Open Source Project    if (status != OK)
26264064216a8433360745f69edddce19a606659163The Android Open Source Project    {
26364064216a8433360745f69edddce19a606659163The Android Open Source Project        /* report failure but don't stop... */
26464064216a8433360745f69edddce19a606659163The Android Open Source Project        WLAN_REPORT_ERROR(pMainSec->hReport, RSN_MODULE_LOG,
26564064216a8433360745f69edddce19a606659163The Android Open Source Project                          ("MAIN_SEC_SM: Error releasing FSM memory \n"));
26664064216a8433360745f69edddce19a606659163The Android Open Source Project    }
26764064216a8433360745f69edddce19a606659163The Android Open Source Project
26864064216a8433360745f69edddce19a606659163The Android Open Source Project    os_memoryFree(pMainSec->hOs, pMainSec, sizeof(mainSec_t));
26964064216a8433360745f69edddce19a606659163The Android Open Source Project
27064064216a8433360745f69edddce19a606659163The Android Open Source Project    return OK;
27164064216a8433360745f69edddce19a606659163The Android Open Source Project}
27264064216a8433360745f69edddce19a606659163The Android Open Source Project
27364064216a8433360745f69edddce19a606659163The Android Open Source Project/**
27464064216a8433360745f69edddce19a606659163The Android Open Source Project*
27564064216a8433360745f69edddce19a606659163The Android Open Source Project* mainSec_setKey
27664064216a8433360745f69edddce19a606659163The Android Open Source Project*
27764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
27864064216a8433360745f69edddce19a606659163The Android Open Source Project*
27964064216a8433360745f69edddce19a606659163The Android Open Source Project* Start the NULL main security SM. Reports success to the rsn module immediately.
28064064216a8433360745f69edddce19a606659163The Android Open Source Project*
28164064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
28264064216a8433360745f69edddce19a606659163The Android Open Source Project*
28364064216a8433360745f69edddce19a606659163The Android Open Source Project*  none
28464064216a8433360745f69edddce19a606659163The Android Open Source Project*
28564064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
28664064216a8433360745f69edddce19a606659163The Android Open Source Project*
28764064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK on success, NOK otherwise.
28864064216a8433360745f69edddce19a606659163The Android Open Source Project*
28964064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
29064064216a8433360745f69edddce19a606659163The Android Open Source Project*/
29164064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS mainSec_setKey(struct _mainSec_t *pMainSec, securityKeys_t *pKey)
29264064216a8433360745f69edddce19a606659163The Android Open Source Project{
29364064216a8433360745f69edddce19a606659163The Android Open Source Project    TI_STATUS               status = OK;
29464064216a8433360745f69edddce19a606659163The Android Open Source Project
29564064216a8433360745f69edddce19a606659163The Android Open Source Project    if ((pMainSec == NULL) || (pKey == NULL))
29664064216a8433360745f69edddce19a606659163The Android Open Source Project    {
29764064216a8433360745f69edddce19a606659163The Android Open Source Project        return NOK;
29864064216a8433360745f69edddce19a606659163The Android Open Source Project    }
29964064216a8433360745f69edddce19a606659163The Android Open Source Project
30064064216a8433360745f69edddce19a606659163The Android Open Source Project    if (pKey->keyType != NULL_KEY)
30164064216a8433360745f69edddce19a606659163The Android Open Source Project    {
30264064216a8433360745f69edddce19a606659163The Android Open Source Project        WLAN_REPORT_INFORMATION(pMainSec->hReport, RSN_MODULE_LOG,
30364064216a8433360745f69edddce19a606659163The Android Open Source Project                                ("MAIN_SEC_SM: setting key #%d, value = 0x%X 0x%X 0x%X 0x%X 0x%X\n",
30464064216a8433360745f69edddce19a606659163The Android Open Source Project                                 pKey->keyIndex, (UINT8)pKey->encKey[0],
30564064216a8433360745f69edddce19a606659163The Android Open Source Project                                 (UINT8)pKey->encKey[1],
30664064216a8433360745f69edddce19a606659163The Android Open Source Project                                 (UINT8)pKey->encKey[2],
30764064216a8433360745f69edddce19a606659163The Android Open Source Project                                 (UINT8)pKey->encKey[3],
30864064216a8433360745f69edddce19a606659163The Android Open Source Project                                 (UINT8)pKey->encKey[4]));
30964064216a8433360745f69edddce19a606659163The Android Open Source Project
31064064216a8433360745f69edddce19a606659163The Android Open Source Project        status = pMainSec->pParent->setKey(pMainSec->pParent, pKey);
31164064216a8433360745f69edddce19a606659163The Android Open Source Project    }
31264064216a8433360745f69edddce19a606659163The Android Open Source Project
31364064216a8433360745f69edddce19a606659163The Android Open Source Project    return status;
31464064216a8433360745f69edddce19a606659163The Android Open Source Project}
31564064216a8433360745f69edddce19a606659163The Android Open Source Project
31664064216a8433360745f69edddce19a606659163The Android Open Source Project/**
31764064216a8433360745f69edddce19a606659163The Android Open Source Project*
31864064216a8433360745f69edddce19a606659163The Android Open Source Project* mainSec_removeKey
31964064216a8433360745f69edddce19a606659163The Android Open Source Project*
32064064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
32164064216a8433360745f69edddce19a606659163The Android Open Source Project*
32264064216a8433360745f69edddce19a606659163The Android Open Source Project* Start the NULL main security SM. Reports success to the rsn module immediately.
32364064216a8433360745f69edddce19a606659163The Android Open Source Project*
32464064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
32564064216a8433360745f69edddce19a606659163The Android Open Source Project*
32664064216a8433360745f69edddce19a606659163The Android Open Source Project*  none
32764064216a8433360745f69edddce19a606659163The Android Open Source Project*
32864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
32964064216a8433360745f69edddce19a606659163The Android Open Source Project*
33064064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK on success, NOK otherwise.
33164064216a8433360745f69edddce19a606659163The Android Open Source Project*
33264064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
33364064216a8433360745f69edddce19a606659163The Android Open Source Project*/
33464064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS mainSec_removeKey(struct _mainSec_t *pMainSec, securityKeys_t *pKey)
33564064216a8433360745f69edddce19a606659163The Android Open Source Project{
33664064216a8433360745f69edddce19a606659163The Android Open Source Project    TI_STATUS               status = OK;
33764064216a8433360745f69edddce19a606659163The Android Open Source Project
33864064216a8433360745f69edddce19a606659163The Android Open Source Project    if ((pMainSec == NULL) || (pKey == NULL))
33964064216a8433360745f69edddce19a606659163The Android Open Source Project    {
34064064216a8433360745f69edddce19a606659163The Android Open Source Project        return NOK;
34164064216a8433360745f69edddce19a606659163The Android Open Source Project    }
34264064216a8433360745f69edddce19a606659163The Android Open Source Project
34364064216a8433360745f69edddce19a606659163The Android Open Source Project    if (pKey->keyType != NULL_KEY)
34464064216a8433360745f69edddce19a606659163The Android Open Source Project    {
34564064216a8433360745f69edddce19a606659163The Android Open Source Project        WLAN_REPORT_INFORMATION(pMainSec->hReport, RSN_MODULE_LOG,
34664064216a8433360745f69edddce19a606659163The Android Open Source Project                                ("MAIN_SEC_SM: removing key #%d, \n",
34764064216a8433360745f69edddce19a606659163The Android Open Source Project                                 pKey->keyIndex));
34864064216a8433360745f69edddce19a606659163The Android Open Source Project
34964064216a8433360745f69edddce19a606659163The Android Open Source Project        status = pMainSec->pParent->removeKey(pMainSec->pParent, pKey);
35064064216a8433360745f69edddce19a606659163The Android Open Source Project    }
35164064216a8433360745f69edddce19a606659163The Android Open Source Project
35264064216a8433360745f69edddce19a606659163The Android Open Source Project    return status;
35364064216a8433360745f69edddce19a606659163The Android Open Source Project}
35464064216a8433360745f69edddce19a606659163The Android Open Source Project
35564064216a8433360745f69edddce19a606659163The Android Open Source Project/**
35664064216a8433360745f69edddce19a606659163The Android Open Source Project*
35764064216a8433360745f69edddce19a606659163The Android Open Source Project* mainSec_setDefaultKeyId
35864064216a8433360745f69edddce19a606659163The Android Open Source Project*
35964064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
36064064216a8433360745f69edddce19a606659163The Android Open Source Project*
36164064216a8433360745f69edddce19a606659163The Android Open Source Project* Start the NULL main security SM. Reports success to the rsn module immediately.
36264064216a8433360745f69edddce19a606659163The Android Open Source Project*
36364064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
36464064216a8433360745f69edddce19a606659163The Android Open Source Project*
36564064216a8433360745f69edddce19a606659163The Android Open Source Project*  none
36664064216a8433360745f69edddce19a606659163The Android Open Source Project*
36764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
36864064216a8433360745f69edddce19a606659163The Android Open Source Project*
36964064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK on success, NOK otherwise.
37064064216a8433360745f69edddce19a606659163The Android Open Source Project*
37164064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
37264064216a8433360745f69edddce19a606659163The Android Open Source Project*/
37364064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS mainSec_setDefaultKeyId(struct _mainSec_t *pMainSec, UINT8 keyId)
37464064216a8433360745f69edddce19a606659163The Android Open Source Project{
37564064216a8433360745f69edddce19a606659163The Android Open Source Project    TI_STATUS               status = OK;
37664064216a8433360745f69edddce19a606659163The Android Open Source Project
37764064216a8433360745f69edddce19a606659163The Android Open Source Project    if (pMainSec == NULL)
37864064216a8433360745f69edddce19a606659163The Android Open Source Project    {
37964064216a8433360745f69edddce19a606659163The Android Open Source Project        return NOK;
38064064216a8433360745f69edddce19a606659163The Android Open Source Project    }
38164064216a8433360745f69edddce19a606659163The Android Open Source Project
38264064216a8433360745f69edddce19a606659163The Android Open Source Project    status = pMainSec->pParent->setDefaultKeyId(pMainSec->pParent, keyId);
38364064216a8433360745f69edddce19a606659163The Android Open Source Project
38464064216a8433360745f69edddce19a606659163The Android Open Source Project    return status;
38564064216a8433360745f69edddce19a606659163The Android Open Source Project}
38664064216a8433360745f69edddce19a606659163The Android Open Source Project
38764064216a8433360745f69edddce19a606659163The Android Open Source Project
388