1a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/*
2a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * broadcastKey802_1x.c
3a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *
4a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * Copyright(c) 1998 - 2009 Texas Instruments. All rights reserved.
5a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * All rights reserved.
6a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *
7a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * Redistribution and use in source and binary forms, with or without
8a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * modification, are permitted provided that the following conditions
9a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * are met:
10a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *
11a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *  * Redistributions of source code must retain the above copyright
12a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *    notice, this list of conditions and the following disclaimer.
13a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *  * Redistributions in binary form must reproduce the above copyright
14a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *    notice, this list of conditions and the following disclaimer in
15a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *    the documentation and/or other materials provided with the
16a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *    distribution.
17a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *  * Neither the name Texas Instruments nor the names of its
18a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *    contributors may be used to endorse or promote products derived
19a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *    from this software without specific prior written permission.
20a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *
21a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt */
33a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
34a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/** \file broadcastKey802_1x.c
35a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * \brief broadcast key 802.1x implementation
36a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *
37a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * \see broadcastKey802_1x.h
38a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*/
39a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
40a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/****************************************************************************
41a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *                                                                          *
42a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *   MODULE:	802.1x station broadcast key SM                             *
43a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *   PURPOSE:   802.1x station broadcast key SM implementation				*
44a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *                                                                          *
45a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt ****************************************************************************/
46a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
47a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#define __FILE_ID__  FILE_ID_22
48a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#include "osApi.h"
49a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#include "report.h"
50a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#include "rsnApi.h"
51a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
52a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#include "keyDerive.h"
53a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
54a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#include "broadcastKey802_1x.h"
55a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#include "mainKeysSm.h"
56a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
57a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
58a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTI_STATUS broadcastKey802_1x_start(struct _broadcastKey_t *pBroadcastKey);
59a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
60a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTI_STATUS broadcastKey802_1x_stop(struct _broadcastKey_t *pBroadcastKey);
61a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
62a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTI_STATUS broadcastKey802_1x_recvSuccess(struct _broadcastKey_t *pBroadcastKey,
63a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt									encodedKeyMaterial_t *pEncodedKeyMaterial);
64a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
65a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTI_STATUS broadcastKey802_1x_recvFailure(struct _broadcastKey_t *pBroadcastKey);
66a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
67a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTI_STATUS broadcastKey802_1x_distribute(struct _broadcastKey_t *pBroadcastKey);
68a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
69a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTI_STATUS broadcastKey802_1x_redistribute(struct _broadcastKey_t *pBroadcastKey);
70a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
71a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTI_STATUS broadcastKey802_1x_event(struct _broadcastKey_t *pBroadcastKey,
72a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt							  TI_UINT8 event,
73a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt							  void *pData);
74a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
75a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
76a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/**
77a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*
78a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt* Function  - Init KEY Parser module.
79a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*
80a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt* \b Description:
81a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*
82a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt* Called by RSN Manager.
83a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt* Registers the function 'rsn_BroadcastKeyRecv()' at the distributor to receive KEY frames upon receiving a KEY_RECV event.
84a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*
85a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt* \b ARGS:
86a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*
87a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*
88a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt* \b RETURNS:
89a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*
90a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*  TI_STATUS - 0 on success, any other value on failure.
91a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*
92a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*/
93a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
94a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTI_STATUS broadcastKey802_1x_config(struct _broadcastKey_t *pBroadcastKey)
95a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{
96a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	TI_STATUS		status = TI_NOK;
97a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
98a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/** Station broadcast key State Machine matrix */
99a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	fsm_actionCell_t    broadcastKey802_1x_matrix[BCAST_KEY_802_1X_NUM_STATES][BCAST_KEY_802_1X_NUM_EVENTS] =
100a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
101a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		/* next state and actions for IDLE state */
102a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		{	{BCAST_KEY_802_1X_STATE_START, (fsm_Action_t)broadcastKeySmNop},
103a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			{BCAST_KEY_802_1X_STATE_IDLE, (fsm_Action_t)broadcastKeySmNop},
104a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			{BCAST_KEY_802_1X_STATE_IDLE, (fsm_Action_t)broadcastKeySmNop},
105a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			{BCAST_KEY_802_1X_STATE_IDLE, (fsm_Action_t)broadcastKeySmUnexpected}
106a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		},
107a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
108a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		/* next state and actions for START state */
109a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		{	{BCAST_KEY_802_1X_STATE_START, (fsm_Action_t)broadcastKeySmUnexpected},
110a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			{BCAST_KEY_802_1X_STATE_IDLE, (fsm_Action_t)broadcastKeySmNop},
111a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			{BCAST_KEY_802_1X_STATE_COMPLETE, (fsm_Action_t)broadcastKey802_1x_distribute},
112a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			{BCAST_KEY_802_1X_STATE_START, (fsm_Action_t)broadcastKeySmNop}
113a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		},
114a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
115a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		/* next state and actions for COMPLETE state */
116a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		{	{BCAST_KEY_802_1X_STATE_COMPLETE, (fsm_Action_t)broadcastKeySmUnexpected},
117a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			{BCAST_KEY_802_1X_STATE_IDLE, (fsm_Action_t)broadcastKeySmNop},
118a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			{BCAST_KEY_802_1X_STATE_COMPLETE, (fsm_Action_t)broadcastKey802_1x_distribute},
119a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			{BCAST_KEY_802_1X_STATE_COMPLETE, (fsm_Action_t)broadcastKeySmUnexpected}
120a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		}
121a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	};
122a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
123a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
124a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	pBroadcastKey->start = broadcastKey802_1x_start;
125a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	pBroadcastKey->stop = broadcastKey802_1x_stop;
126a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	pBroadcastKey->recvFailure = broadcastKey802_1x_recvFailure;
127a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	pBroadcastKey->recvSuccess = broadcastKey802_1x_recvSuccess;
128a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
129a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	pBroadcastKey->currentState = BCAST_KEY_802_1X_STATE_IDLE;
130a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
131a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	status = fsm_Config(pBroadcastKey->pBcastKeySm,
132a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt						&broadcastKey802_1x_matrix[0][0],
133a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt						BCAST_KEY_802_1X_NUM_STATES,
134a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt						BCAST_KEY_802_1X_NUM_EVENTS,
135a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt						NULL, pBroadcastKey->hOs);
136a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
137a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
138a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
139a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	return status;
140a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt}
141a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
142a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
143a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/**
144a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*
145a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt* broadcastKey802_1x_event
146a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*
147a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt* \b Description:
148a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*
149a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt* broadcast key state machine transition function
150a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*
151a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt* \b ARGS:
152a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*
153a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*  I/O - currentState - current state in the state machine\n
154a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*  I   - event - specific event for the state machine\n
155a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*  I   - pData - Data for state machine action function\n
156a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*
157a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt* \b RETURNS:
158a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*
159a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*  TI_OK on success, TI_NOK otherwise.
160a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*
161a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt* \sa
162a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*/
163a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTI_STATUS broadcastKey802_1x_event(struct _broadcastKey_t *pBroadcastKey, TI_UINT8 event, void *pData)
164a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{
165a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	TI_STATUS 		status;
166a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	TI_UINT8			nextState;
167a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
168a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	status = fsm_GetNextState(pBroadcastKey->pBcastKeySm, pBroadcastKey->currentState, event, &nextState);
169a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if (status != TI_OK)
170a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
171a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTRACE0(pBroadcastKey->hReport, REPORT_SEVERITY_ERROR, "BROADCAST_KEY_SM: ERROR: failed getting next state\n");
172a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		return TI_NOK;
173a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
174a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
175a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTRACE3(pBroadcastKey->hReport, REPORT_SEVERITY_INFORMATION, "STATION_BROADCAST_KEY_SM: <currentState = %d, event = %d> --> nextState = %d\n", pBroadcastKey->currentState, event, nextState);
176a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
177a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	status = fsm_Event(pBroadcastKey->pBcastKeySm, &pBroadcastKey->currentState, event, pData);
178a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
179a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	return status;
180a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt}
181a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
182a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
183a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/**
184a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*
185a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt* broadcastKey802_1x_start
186a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*
187a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt* \b Description:
188a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*
189a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt* START event handler
190a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*
191a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt* \b ARGS:
192a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*
193a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*  I   - pCtrlB - station control block  \n
194a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*
195a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt* \b RETURNS:
196a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*
197a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*  TI_OK on success, TI_NOK otherwise.
198a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*
199a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt* \sa broadcastKey802_1x_stop()
200a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*/
201a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTI_STATUS broadcastKey802_1x_start(struct _broadcastKey_t *pBroadcastKey)
202a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{
203a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	TI_STATUS  status;
204a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
205a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	status = broadcastKey802_1x_event(pBroadcastKey, BCAST_KEY_802_1X_EVENT_START, pBroadcastKey);
206a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
207a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	return status;
208a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt}
209a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
210a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
211a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/**
212a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*
213a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt* broadcastKey802_1x_stop
214a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*
215a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt* \b Description:
216a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*
217a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt* START event handler
218a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*
219a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt* \b ARGS:
220a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*
221a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*  I   - pCtrlB - station control block  \n
222a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*
223a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt* \b RETURNS:
224a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*
225a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*  TI_OK on success, TI_NOK otherwise.
226a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*
227a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt* \sa broadcastKey802_1x_start()
228a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*/
229a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTI_STATUS broadcastKey802_1x_stop(struct _broadcastKey_t *pBroadcastKey)
230a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{
231a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	TI_STATUS  status;
232a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
233a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	status = broadcastKey802_1x_event(pBroadcastKey, BCAST_KEY_802_1X_EVENT_STOP, pBroadcastKey);
234a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
235a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	return status;
236a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt}
237a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
238a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
239a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/**
240a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*
241a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt* broadcastKey802_1x_recvSuccess
242a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*
243a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt* \b Description:
244a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*
245a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt* SUCCESS event handler
246a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*
247a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt* \b ARGS:
248a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*
249a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*  I   - pCtrlB - station control block  \n
250a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*  I   - pEncodedKeyMaterial - Encoded key material \n
251a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*
252a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt* \b RETURNS:
253a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*
254a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*  TI_OK on success, TI_NOK otherwise.
255a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*
256a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*/
257a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTI_STATUS broadcastKey802_1x_recvSuccess(struct _broadcastKey_t *pBroadcastKey, encodedKeyMaterial_t *pEncodedKeyMaterial)
258a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{
259a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	TI_STATUS  status;
260a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
261a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	pBroadcastKey->data.pEncodedKeyMaterial = pEncodedKeyMaterial;
262a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
263a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	status = broadcastKey802_1x_event(pBroadcastKey, BCAST_KEY_802_1X_EVENT_SUCCESS, pBroadcastKey);
264a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
265a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	return status;
266a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt}
267a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
268a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
269a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/**
270a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*
271a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt* broadcastKey802_1x_recvFailure
272a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*
273a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt* \b Description:
274a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*
275a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt* FAILURE event handler
276a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*
277a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt* \b ARGS:
278a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*
279a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*  I   - pCtrlB - station control block  \n
280a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*
281a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt* \b RETURNS:
282a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*
283a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*  TI_OK on success, TI_NOK otherwise.
284a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*
285a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*/
286a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTI_STATUS broadcastKey802_1x_recvFailure(struct _broadcastKey_t *pBroadcastKey)
287a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{
288a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	TI_STATUS  status;
289a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
290a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	status = broadcastKey802_1x_event(pBroadcastKey, BCAST_KEY_802_1X_EVENT_FAILURE, pBroadcastKey);
291a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
292a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	return status;
293a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt}
294a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
295a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
296a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/**
297a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*
298a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt* broadcastKey802_1x_distribute
299a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*
300a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt* \b Description:
301a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*
302a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt* Distribute broadcast key material to the driver and report the main key SM on broadcast complete.
303a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*
304a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt* \b ARGS:
305a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*
306a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*  I   - pData - Encoded key material  \n
307a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*
308a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt* \b RETURNS:
309a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*
310a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*  TI_OK on success, TI_NOK otherwise.
311a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt*/
312a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTI_STATUS broadcastKey802_1x_distribute(struct _broadcastKey_t *pBroadcastKey)
313a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{
314a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	TI_STATUS  status=TI_NOK;
315a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
316a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if (pBroadcastKey->pKeyDerive->derive!=NULL)
317a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    {
318a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	status = pBroadcastKey->pKeyDerive->derive(pBroadcastKey->pKeyDerive,
319a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt											   pBroadcastKey->data.pEncodedKeyMaterial);
320a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    }
321a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if (status != TI_OK)
322a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
323a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		return TI_NOK;
324a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
325a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
326a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if (pBroadcastKey->pParent->reportBcastStatus!=NULL)
327a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    {
328a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	status = pBroadcastKey->pParent->reportBcastStatus(pBroadcastKey->pParent, TI_OK);
329a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    }
330a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
331a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	mainKeys_reAuth(pBroadcastKey->pParent);
332a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
333a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	return status;
334a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt}
335a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
336