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