164064216a8433360745f69edddce19a606659163The Android Open Source Project/** \file unicastKeyNone.c
264064216a8433360745f69edddce19a606659163The Android Open Source Project * \brief station unicast key None implementation
364064216a8433360745f69edddce19a606659163The Android Open Source Project *
464064216a8433360745f69edddce19a606659163The Android Open Source Project * \see unicastKeyNone.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**| Copyright(c) 1998 - 2008 Texas Instruments. All rights reserved.      |**
1064064216a8433360745f69edddce19a606659163The Android Open Source Project**| All rights reserved.                                                  |**
1164064216a8433360745f69edddce19a606659163The Android Open Source Project**|                                                                       |**
1264064216a8433360745f69edddce19a606659163The Android Open Source Project**| Redistribution and use in source and binary forms, with or without    |**
1364064216a8433360745f69edddce19a606659163The Android Open Source Project**| modification, are permitted provided that the following conditions    |**
1464064216a8433360745f69edddce19a606659163The Android Open Source Project**| are met:                                                              |**
1564064216a8433360745f69edddce19a606659163The Android Open Source Project**|                                                                       |**
1664064216a8433360745f69edddce19a606659163The Android Open Source Project**|  * Redistributions of source code must retain the above copyright     |**
1764064216a8433360745f69edddce19a606659163The Android Open Source Project**|    notice, this list of conditions and the following disclaimer.      |**
1864064216a8433360745f69edddce19a606659163The Android Open Source Project**|  * Redistributions in binary form must reproduce the above copyright  |**
1964064216a8433360745f69edddce19a606659163The Android Open Source Project**|    notice, this list of conditions and the following disclaimer in    |**
2064064216a8433360745f69edddce19a606659163The Android Open Source Project**|    the documentation and/or other materials provided with the         |**
2164064216a8433360745f69edddce19a606659163The Android Open Source Project**|    distribution.                                                      |**
2264064216a8433360745f69edddce19a606659163The Android Open Source Project**|  * Neither the name Texas Instruments nor the names of its            |**
2364064216a8433360745f69edddce19a606659163The Android Open Source Project**|    contributors may be used to endorse or promote products derived    |**
2464064216a8433360745f69edddce19a606659163The Android Open Source Project**|    from this software without specific prior written permission.      |**
2564064216a8433360745f69edddce19a606659163The Android Open Source Project**|                                                                       |**
2664064216a8433360745f69edddce19a606659163The Android Open Source Project**| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS   |**
2764064216a8433360745f69edddce19a606659163The Android Open Source Project**| "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT     |**
2864064216a8433360745f69edddce19a606659163The Android Open Source Project**| LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |**
2964064216a8433360745f69edddce19a606659163The Android Open Source Project**| A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT  |**
3064064216a8433360745f69edddce19a606659163The Android Open Source Project**| OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |**
3164064216a8433360745f69edddce19a606659163The Android Open Source Project**| SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT      |**
3264064216a8433360745f69edddce19a606659163The Android Open Source Project**| LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |**
3364064216a8433360745f69edddce19a606659163The Android Open Source Project**| DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |**
3464064216a8433360745f69edddce19a606659163The Android Open Source Project**| THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT   |**
3564064216a8433360745f69edddce19a606659163The Android Open Source Project**| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |**
3664064216a8433360745f69edddce19a606659163The Android Open Source Project**| OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  |**
3764064216a8433360745f69edddce19a606659163The Android Open Source Project**|                                                                       |**
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 *   MODULE:	station unicast key None		                            *
4464064216a8433360745f69edddce19a606659163The Android Open Source Project *   PURPOSE:   station unicast key None implementation						*
4564064216a8433360745f69edddce19a606659163The Android Open Source Project *                                                                          *
4664064216a8433360745f69edddce19a606659163The Android Open Source Project ****************************************************************************/
4764064216a8433360745f69edddce19a606659163The Android Open Source Project
4864064216a8433360745f69edddce19a606659163The Android Open Source Project#include "osApi.h"
4964064216a8433360745f69edddce19a606659163The Android Open Source Project#include "utils.h"
5064064216a8433360745f69edddce19a606659163The Android Open Source Project#include "report.h"
5164064216a8433360745f69edddce19a606659163The Android Open Source Project#include "rsnApi.h"
5264064216a8433360745f69edddce19a606659163The Android Open Source Project
5364064216a8433360745f69edddce19a606659163The Android Open Source Project#include "unicastKeyNone.h"
5464064216a8433360745f69edddce19a606659163The Android Open Source Project#include "mainKeysSm.h"
5564064216a8433360745f69edddce19a606659163The Android Open Source Project
5664064216a8433360745f69edddce19a606659163The Android Open Source Project
5764064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS unicastKeyNone_start(struct _unicastKey_t *pUnicastKey);
5864064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS unicastKeyNone_distribute(struct _unicastKey_t *pUnicastKey, encodedKeyMaterial_t *pEncodedKeyMaterial);
5964064216a8433360745f69edddce19a606659163The Android Open Source Project
6064064216a8433360745f69edddce19a606659163The Android Open Source Project
6164064216a8433360745f69edddce19a606659163The Android Open Source Project
6264064216a8433360745f69edddce19a606659163The Android Open Source Project/**
6364064216a8433360745f69edddce19a606659163The Android Open Source Project*
6464064216a8433360745f69edddce19a606659163The Android Open Source Project* Function  - Config KEY Parser module.
6564064216a8433360745f69edddce19a606659163The Android Open Source Project*
6664064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
6764064216a8433360745f69edddce19a606659163The Android Open Source Project*
6864064216a8433360745f69edddce19a606659163The Android Open Source Project* Called by RSN Manager.
6964064216a8433360745f69edddce19a606659163The Android Open Source Project* Registers the function 'rsn_UnicastKeyRecv()' at the distributor to receive KEY frames upon receiving a KEY_RECV event.
7064064216a8433360745f69edddce19a606659163The Android Open Source Project*
7164064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
7264064216a8433360745f69edddce19a606659163The Android Open Source Project*
7364064216a8433360745f69edddce19a606659163The Android Open Source Project*
7464064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
7564064216a8433360745f69edddce19a606659163The Android Open Source Project*
7664064216a8433360745f69edddce19a606659163The Android Open Source Project*  TI_STATUS - 0 on success, any other value on failure.
7764064216a8433360745f69edddce19a606659163The Android Open Source Project*
7864064216a8433360745f69edddce19a606659163The Android Open Source Project*/
7964064216a8433360745f69edddce19a606659163The Android Open Source Project
8064064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS unicastKeyNone_config(struct _unicastKey_t *pUnicastKey)
8164064216a8433360745f69edddce19a606659163The Android Open Source Project{
8264064216a8433360745f69edddce19a606659163The Android Open Source Project
8364064216a8433360745f69edddce19a606659163The Android Open Source Project	pUnicastKey->start = unicastKeyNone_start;
8464064216a8433360745f69edddce19a606659163The Android Open Source Project	pUnicastKey->stop = unicastKeySmNop;
8564064216a8433360745f69edddce19a606659163The Android Open Source Project	pUnicastKey->recvFailure = unicastKeySmNop;
8664064216a8433360745f69edddce19a606659163The Android Open Source Project	pUnicastKey->recvSuccess = unicastKeyNone_distribute;
8764064216a8433360745f69edddce19a606659163The Android Open Source Project
8864064216a8433360745f69edddce19a606659163The Android Open Source Project	pUnicastKey->currentState = 0;
8964064216a8433360745f69edddce19a606659163The Android Open Source Project
9064064216a8433360745f69edddce19a606659163The Android Open Source Project
9164064216a8433360745f69edddce19a606659163The Android Open Source Project	return OK;
9264064216a8433360745f69edddce19a606659163The Android Open Source Project}
9364064216a8433360745f69edddce19a606659163The Android Open Source Project
9464064216a8433360745f69edddce19a606659163The Android Open Source Project/**
9564064216a8433360745f69edddce19a606659163The Android Open Source Project*
9664064216a8433360745f69edddce19a606659163The Android Open Source Project* unicastKeyNone_start
9764064216a8433360745f69edddce19a606659163The Android Open Source Project*
9864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
9964064216a8433360745f69edddce19a606659163The Android Open Source Project*
10064064216a8433360745f69edddce19a606659163The Android Open Source Project* report the main key SM of unicast complete, whithout wating for keys.
10164064216a8433360745f69edddce19a606659163The Android Open Source Project*
10264064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
10364064216a8433360745f69edddce19a606659163The Android Open Source Project*
10464064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - pUnicastKey - context  \n
10564064216a8433360745f69edddce19a606659163The Android Open Source Project*
10664064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
10764064216a8433360745f69edddce19a606659163The Android Open Source Project*
10864064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK on success, NOK otherwise.
10964064216a8433360745f69edddce19a606659163The Android Open Source Project*/
11064064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS unicastKeyNone_start(struct _unicastKey_t *pUnicastKey)
11164064216a8433360745f69edddce19a606659163The Android Open Source Project{
11264064216a8433360745f69edddce19a606659163The Android Open Source Project	TI_STATUS	status=NOK;
11364064216a8433360745f69edddce19a606659163The Android Open Source Project
11464064216a8433360745f69edddce19a606659163The Android Open Source Project	if (pUnicastKey->pParent->reportUcastStatus!=NULL)
11564064216a8433360745f69edddce19a606659163The Android Open Source Project    {
11664064216a8433360745f69edddce19a606659163The Android Open Source Project		status = pUnicastKey->pParent->reportUcastStatus(pUnicastKey->pParent, OK);
11764064216a8433360745f69edddce19a606659163The Android Open Source Project    }
11864064216a8433360745f69edddce19a606659163The Android Open Source Project
11964064216a8433360745f69edddce19a606659163The Android Open Source Project	return status;
12064064216a8433360745f69edddce19a606659163The Android Open Source Project}
12164064216a8433360745f69edddce19a606659163The Android Open Source Project
12264064216a8433360745f69edddce19a606659163The Android Open Source Project/**
12364064216a8433360745f69edddce19a606659163The Android Open Source Project*
12464064216a8433360745f69edddce19a606659163The Android Open Source Project* unicastKeyNone_distribute
12564064216a8433360745f69edddce19a606659163The Android Open Source Project*
12664064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
12764064216a8433360745f69edddce19a606659163The Android Open Source Project*
12864064216a8433360745f69edddce19a606659163The Android Open Source Project* Distribute unicast key material to the driver and report the main key SM on unicast complete.
12964064216a8433360745f69edddce19a606659163The Android Open Source Project*
13064064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
13164064216a8433360745f69edddce19a606659163The Android Open Source Project*
13264064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - pData - Encoded key material  \n
13364064216a8433360745f69edddce19a606659163The Android Open Source Project*
13464064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
13564064216a8433360745f69edddce19a606659163The Android Open Source Project*
13664064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK on success, NOK otherwise.
13764064216a8433360745f69edddce19a606659163The Android Open Source Project*/
13864064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS unicastKeyNone_distribute(struct _unicastKey_t *pUnicastKey, encodedKeyMaterial_t *pEncodedKeyMaterial)
13964064216a8433360745f69edddce19a606659163The Android Open Source Project{
14064064216a8433360745f69edddce19a606659163The Android Open Source Project	TI_STATUS  status=NOK;
14164064216a8433360745f69edddce19a606659163The Android Open Source Project
14264064216a8433360745f69edddce19a606659163The Android Open Source Project	if ((pUnicastKey==NULL) || (pEncodedKeyMaterial==NULL))
14364064216a8433360745f69edddce19a606659163The Android Open Source Project    {
14464064216a8433360745f69edddce19a606659163The Android Open Source Project        return NOK;
14564064216a8433360745f69edddce19a606659163The Android Open Source Project    }
14664064216a8433360745f69edddce19a606659163The Android Open Source Project
14764064216a8433360745f69edddce19a606659163The Android Open Source Project    if (pUnicastKey->pKeyDerive->derive!=NULL)
14864064216a8433360745f69edddce19a606659163The Android Open Source Project    {
14964064216a8433360745f69edddce19a606659163The Android Open Source Project        status = pUnicastKey->pKeyDerive->derive(pUnicastKey->pKeyDerive,
15064064216a8433360745f69edddce19a606659163The Android Open Source Project                                                       pEncodedKeyMaterial);
15164064216a8433360745f69edddce19a606659163The Android Open Source Project    }
15264064216a8433360745f69edddce19a606659163The Android Open Source Project	if (status != OK)
15364064216a8433360745f69edddce19a606659163The Android Open Source Project	{
15464064216a8433360745f69edddce19a606659163The Android Open Source Project		return NOK;
15564064216a8433360745f69edddce19a606659163The Android Open Source Project	}
15664064216a8433360745f69edddce19a606659163The Android Open Source Project
15764064216a8433360745f69edddce19a606659163The Android Open Source Project	if (pUnicastKey->pParent->setDefaultKeyId!=NULL)
15864064216a8433360745f69edddce19a606659163The Android Open Source Project    {
15964064216a8433360745f69edddce19a606659163The Android Open Source Project        status = pUnicastKey->pParent->setDefaultKeyId(pUnicastKey->pParent,
16064064216a8433360745f69edddce19a606659163The Android Open Source Project                                                       (UINT8)pEncodedKeyMaterial->keyId);
16164064216a8433360745f69edddce19a606659163The Android Open Source Project    }
16264064216a8433360745f69edddce19a606659163The Android Open Source Project	if (status != OK)
16364064216a8433360745f69edddce19a606659163The Android Open Source Project	{
16464064216a8433360745f69edddce19a606659163The Android Open Source Project		return status;
16564064216a8433360745f69edddce19a606659163The Android Open Source Project	}
16664064216a8433360745f69edddce19a606659163The Android Open Source Project
16764064216a8433360745f69edddce19a606659163The Android Open Source Project	if (pUnicastKey->pParent->reportUcastStatus!=NULL)
16864064216a8433360745f69edddce19a606659163The Android Open Source Project    {
16964064216a8433360745f69edddce19a606659163The Android Open Source Project        status = pUnicastKey->pParent->reportUcastStatus(pUnicastKey->pParent, OK);
17064064216a8433360745f69edddce19a606659163The Android Open Source Project    }
17164064216a8433360745f69edddce19a606659163The Android Open Source Project
17264064216a8433360745f69edddce19a606659163The Android Open Source Project	return status;
17364064216a8433360745f69edddce19a606659163The Android Open Source Project}
174