1/** \file mainKeysSm.h
2 *  \brief RSN main security SM
3 *
4 *  \see mainKeysSm.c
5 */
6
7/****************************************************************************
8**+-----------------------------------------------------------------------+**
9**|                                                                       |**
10**| Copyright(c) 1998 - 2008 Texas Instruments. All rights reserved.      |**
11**| All rights reserved.                                                  |**
12**|                                                                       |**
13**| Redistribution and use in source and binary forms, with or without    |**
14**| modification, are permitted provided that the following conditions    |**
15**| are met:                                                              |**
16**|                                                                       |**
17**|  * Redistributions of source code must retain the above copyright     |**
18**|    notice, this list of conditions and the following disclaimer.      |**
19**|  * Redistributions in binary form must reproduce the above copyright  |**
20**|    notice, this list of conditions and the following disclaimer in    |**
21**|    the documentation and/or other materials provided with the         |**
22**|    distribution.                                                      |**
23**|  * Neither the name Texas Instruments nor the names of its            |**
24**|    contributors may be used to endorse or promote products derived    |**
25**|    from this software without specific prior written permission.      |**
26**|                                                                       |**
27**| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS   |**
28**| "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT     |**
29**| LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |**
30**| A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT  |**
31**| OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |**
32**| SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT      |**
33**| LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |**
34**| DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |**
35**| THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT   |**
36**| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |**
37**| OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  |**
38**|                                                                       |**
39**+-----------------------------------------------------------------------+**
40****************************************************************************/
41
42/***************************************************************************/
43/*																		   */
44/*		MODULE:	mainKeysSm.h												   */
45/*    PURPOSE:	RSN main security SM									   */
46/*																	 	   */
47/***************************************************************************/
48
49#ifndef _MAIN_KEYS_SM_H
50#define _MAIN_KEYS_SM_H
51
52#include "paramOut.h"
53#include "fsm.h"
54#include "rsnApi.h"
55#include "keyTypes.h"
56#include "keyParser.h"
57#include "unicastKeySM.h"
58#include "broadcastKeySM.h"
59
60/* Constants */
61
62#define MAIN_KEYS_TIMEOUT			20000
63
64/* Enumerations */
65
66/* Typedefs */
67
68typedef struct _mainKeys_t    mainKeys_t;
69
70/* Main Sec SM functions */
71typedef TI_STATUS (*mainKeysSmStart_t)(struct _mainKeys_t *pMainKeys);
72typedef TI_STATUS (*mainKeysSmStop_t)(struct _mainKeys_t *pMainKeys);
73typedef TI_STATUS (*mainKeysSmReportUcastStatus_t)(struct _mainKeys_t *pMainKeys, TI_STATUS authStatus);
74typedef TI_STATUS (*mainKeysSmReportBcastStatus_t)(struct _mainKeys_t *pMainKeys, TI_STATUS authStatus);
75typedef TI_STATUS (*mainKeysSmReportReKey_t)(struct _mainKeys_t *pMainKeys);
76typedef TI_STATUS (*mainKeysSmSetKey_t)(struct _mainKeys_t *pMainKeys, securityKeys_t *pKey);
77typedef TI_STATUS (*mainKeysSmRemoveKey_t)(struct _mainKeys_t *pMainKeys, securityKeys_t *pKey);
78typedef TI_STATUS (*mainKeysSmSetDefaultKeyId_t)(struct _mainKeys_t *pMainKeys, UINT8 keyId);
79typedef TI_STATUS (*mainKeysSmGetSessionKey_t)(struct _mainKeys_t *pMainKeys, UINT8 *pKey, UINT32 *pKeyLen);
80
81/* Structures */
82
83typedef struct
84{
85	TI_STATUS		status;
86} mainKeysData_t;
87
88struct _mainKeys_t
89{
90	UINT8                               currentState;
91	UINT32								keysTimeout;
92    mainKeysData_t						data;
93	fsm_stateMachine_t	                *pMainKeysSm;
94    BOOL			 	                mainKeysTimeoutCounter;
95
96	TI_HANDLE							timer;
97	TI_HANDLE							hCtrlData;
98	TI_HANDLE			                hReport;
99	TI_HANDLE			                hOs;
100    TI_HANDLE                           hEvHandler;
101    TI_HANDLE                           hConn;
102    TI_HANDLE                           hRsn;
103
104	keyParser_t							*pKeyParser;
105	unicastKey_t						*pUcastSm;
106	broadcastKey_t						*pBcastSm;
107    struct _mainSec_t                  	*pParent;
108
109    mainKeysSmStart_t                   start;
110    mainKeysSmStop_t                    stop;
111    mainKeysSmReportUcastStatus_t		reportUcastStatus;
112    mainKeysSmReportBcastStatus_t       reportBcastStatus;
113    mainKeysSmReportReKey_t				reportReKey;
114	mainKeysSmSetKey_t					setKey;
115	mainKeysSmRemoveKey_t				removeKey;
116	mainKeysSmSetDefaultKeyId_t			setDefaultKeyId;
117	mainKeysSmGetSessionKey_t			getSessionKey;
118};
119
120/* External data definitions */
121
122/* External functions definitions */
123
124/* Function prototypes */
125
126mainKeys_t* mainKeys_create(TI_HANDLE hOs);
127
128TI_STATUS mainKeys_unload(mainKeys_t *pmainKeys);
129
130TI_STATUS mainKeys_config(mainKeys_t *pMainKeys,
131                      rsn_paeConfig_t *pPaeConfig,
132                      void *pParent,
133					  TI_HANDLE		hReport,
134					  TI_HANDLE		hOs,
135                      TI_HANDLE     hCtrlData,
136                      TI_HANDLE     hEvHandler,
137                      TI_HANDLE     hConn,
138                      TI_HANDLE     hRsn);
139
140
141#endif
142
143