2018-02-23 17:43:29 +00:00
|
|
|
/* dot11decrypt_system.h
|
2007-01-12 00:54:13 +00:00
|
|
|
*
|
|
|
|
* Copyright (c) 2006 CACE Technologies, Davis (California)
|
|
|
|
* All rights reserved.
|
|
|
|
*
|
2018-03-08 14:53:58 +00:00
|
|
|
* SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0-only)
|
2007-01-12 00:54:13 +00:00
|
|
|
*/
|
|
|
|
|
2018-02-23 17:43:29 +00:00
|
|
|
#ifndef _DOT11DECRYPT_SYSTEM_H
|
|
|
|
#define _DOT11DECRYPT_SYSTEM_H
|
2006-12-05 21:06:09 +00:00
|
|
|
|
2007-01-02 22:49:57 +00:00
|
|
|
/************************************************************************/
|
|
|
|
/* Constant definitions */
|
|
|
|
|
|
|
|
/* General definitions */
|
2006-12-05 21:06:09 +00:00
|
|
|
#ifndef TRUE
|
|
|
|
#define TRUE 1
|
|
|
|
#endif
|
|
|
|
#ifndef FALSE
|
|
|
|
#define FALSE 0
|
|
|
|
#endif
|
|
|
|
|
2018-02-23 17:43:29 +00:00
|
|
|
#define DOT11DECRYPT_RET_SUCCESS 0
|
|
|
|
#define DOT11DECRYPT_RET_UNSUCCESS 1
|
2006-12-05 21:06:09 +00:00
|
|
|
|
2018-02-23 17:43:29 +00:00
|
|
|
#define DOT11DECRYPT_RET_NO_DATA 1
|
|
|
|
#define DOT11DECRYPT_RET_WRONG_DATA_SIZE 2
|
|
|
|
#define DOT11DECRYPT_RET_REQ_DATA 3
|
|
|
|
#define DOT11DECRYPT_RET_NO_VALID_HANDSHAKE 4
|
|
|
|
#define DOT11DECRYPT_RET_NO_DATA_ENCRYPTED 5
|
2006-12-05 21:06:09 +00:00
|
|
|
|
2018-02-23 17:43:29 +00:00
|
|
|
#define DOT11DECRYPT_RET_SUCCESS_HANDSHAKE -1
|
2006-12-05 21:06:09 +00:00
|
|
|
|
2018-02-23 17:43:29 +00:00
|
|
|
#define DOT11DECRYPT_MAX_KEYS_NR 64
|
|
|
|
#define DOT11DECRYPT_MAX_SEC_ASSOCIATIONS_NR 256
|
2006-12-05 21:06:09 +00:00
|
|
|
|
2007-01-02 22:49:57 +00:00
|
|
|
/* Decryption algorithms fields size definition (bytes) */
|
2018-02-23 17:43:29 +00:00
|
|
|
#define DOT11DECRYPT_WPA_NONCE_LEN 32
|
|
|
|
#define DOT11DECRYPT_WPA_PTK_LEN 64 /* TKIP uses 48 bytes, CCMP uses 64 bytes */
|
|
|
|
#define DOT11DECRYPT_WPA_MICKEY_LEN 16
|
2006-12-05 21:06:09 +00:00
|
|
|
|
2018-02-23 17:43:29 +00:00
|
|
|
#define DOT11DECRYPT_WEP_128_KEY_LEN 16 /* 128 bits */
|
2006-12-05 21:06:09 +00:00
|
|
|
|
2007-01-02 22:49:57 +00:00
|
|
|
/* General 802.11 constants */
|
2018-02-23 17:43:29 +00:00
|
|
|
#define DOT11DECRYPT_MAC_LEN 6
|
|
|
|
#define DOT11DECRYPT_RADIOTAP_HEADER_LEN 24
|
2006-12-05 21:06:09 +00:00
|
|
|
|
2018-06-12 23:02:32 +00:00
|
|
|
#define DOT11DECRYPT_EAPOL_MAX_LEN 1024U
|
2006-12-05 21:06:09 +00:00
|
|
|
|
2018-02-23 17:43:29 +00:00
|
|
|
#define DOT11DECRYPT_TK_LEN 16
|
2006-12-27 23:05:55 +00:00
|
|
|
|
2007-01-02 22:49:57 +00:00
|
|
|
/* Max length of capture data */
|
2018-02-23 17:43:29 +00:00
|
|
|
#define DOT11DECRYPT_MAX_CAPLEN 8192
|
2006-12-05 21:06:09 +00:00
|
|
|
|
2018-02-23 17:43:29 +00:00
|
|
|
#define DOT11DECRYPT_WEP_IVLEN 3 /* 24bit */
|
|
|
|
#define DOT11DECRYPT_WEP_KIDLEN 1 /* 1 octet */
|
|
|
|
#define DOT11DECRYPT_WEP_ICV 4
|
|
|
|
#define DOT11DECRYPT_WEP_HEADER DOT11DECRYPT_WEP_IVLEN + DOT11DECRYPT_WEP_KIDLEN
|
|
|
|
#define DOT11DECRYPT_WEP_TRAILER DOT11DECRYPT_WEP_ICV
|
2006-12-05 21:06:09 +00:00
|
|
|
|
|
|
|
/*
|
2007-01-02 22:49:57 +00:00
|
|
|
* 802.11i defines an extended IV for use with non-WEP ciphers.
|
|
|
|
* When the EXTIV bit is set in the key id byte an additional
|
|
|
|
* 4 bytes immediately follow the IV for TKIP. For CCMP the
|
|
|
|
* EXTIV bit is likewise set but the 8 bytes represent the
|
|
|
|
* CCMP header rather than IV+extended-IV.
|
|
|
|
*/
|
2018-02-23 17:43:29 +00:00
|
|
|
#define DOT11DECRYPT_RSNA_EXTIV 0x20
|
|
|
|
#define DOT11DECRYPT_RSNA_EXTIVLEN 4 /* extended IV length */
|
|
|
|
#define DOT11DECRYPT_RSNA_MICLEN 8 /* trailing MIC */
|
2006-12-05 21:06:09 +00:00
|
|
|
|
2018-02-23 17:43:29 +00:00
|
|
|
#define DOT11DECRYPT_RSNA_HEADER DOT11DECRYPT_WEP_HEADER + DOT11DECRYPT_RSNA_EXTIVLEN
|
2006-12-05 21:06:09 +00:00
|
|
|
|
2018-02-23 17:43:29 +00:00
|
|
|
#define DOT11DECRYPT_CCMP_HEADER DOT11DECRYPT_RSNA_HEADER
|
|
|
|
#define DOT11DECRYPT_CCMP_TRAILER DOT11DECRYPT_RSNA_MICLEN
|
2006-12-05 21:06:09 +00:00
|
|
|
|
2018-02-23 17:43:29 +00:00
|
|
|
#define DOT11DECRYPT_TKIP_HEADER DOT11DECRYPT_RSNA_HEADER
|
|
|
|
#define DOT11DECRYPT_TKIP_TRAILER DOT11DECRYPT_RSNA_MICLEN + DOT11DECRYPT_WEP_ICV
|
2006-12-05 21:06:09 +00:00
|
|
|
|
2018-02-23 17:43:29 +00:00
|
|
|
#define DOT11DECRYPT_CRC_LEN 4
|
2007-01-02 22:49:57 +00:00
|
|
|
|
2015-05-01 20:56:50 +00:00
|
|
|
/************************************************************************/
|
|
|
|
/* File includes */
|
|
|
|
|
2018-02-23 17:43:29 +00:00
|
|
|
#include "dot11decrypt_interop.h"
|
|
|
|
#include "dot11decrypt_user.h"
|
2015-05-01 20:56:50 +00:00
|
|
|
#include "ws_symbol_export.h"
|
|
|
|
|
2007-01-02 22:49:57 +00:00
|
|
|
/************************************************************************/
|
|
|
|
/* Macro definitions */
|
|
|
|
|
|
|
|
/************************************************************************/
|
|
|
|
/* Type definitions */
|
|
|
|
|
2018-02-23 17:43:29 +00:00
|
|
|
typedef struct _DOT11DECRYPT_SEC_ASSOCIATION_ID {
|
|
|
|
UCHAR bssid[DOT11DECRYPT_MAC_LEN];
|
|
|
|
UCHAR sta[DOT11DECRYPT_MAC_LEN];
|
|
|
|
} DOT11DECRYPT_SEC_ASSOCIATION_ID, *PDOT11DECRYPT_SEC_ASSOCIATION_ID;
|
2006-12-05 21:06:09 +00:00
|
|
|
|
2018-02-23 17:43:29 +00:00
|
|
|
typedef struct _DOT11DECRYPT_SEC_ASSOCIATION {
|
2014-02-25 20:42:35 +00:00
|
|
|
/* This is for reassociations. A linked list of old security
|
2009-05-22 17:38:21 +00:00
|
|
|
* associations is kept. GCS
|
|
|
|
*/
|
2018-02-23 17:43:29 +00:00
|
|
|
struct _DOT11DECRYPT_SEC_ASSOCIATION* next;
|
2009-05-22 17:38:21 +00:00
|
|
|
|
2007-01-02 22:49:57 +00:00
|
|
|
/**
|
|
|
|
* This flag define whether this item is used or not. Accepted
|
2009-05-22 17:38:21 +00:00
|
|
|
* values are TRUE and FALSE
|
2007-01-02 22:49:57 +00:00
|
|
|
*/
|
2006-12-05 21:06:09 +00:00
|
|
|
UINT8 used;
|
2018-02-23 17:43:29 +00:00
|
|
|
DOT11DECRYPT_SEC_ASSOCIATION_ID saId;
|
|
|
|
DOT11DECRYPT_KEY_ITEM *key;
|
2006-12-05 21:06:09 +00:00
|
|
|
UINT8 handshake;
|
|
|
|
UINT8 validKey;
|
|
|
|
|
|
|
|
struct {
|
|
|
|
UINT8 key_ver; /* Key descriptor version */
|
2007-01-02 22:49:57 +00:00
|
|
|
UINT64 pn; /* only used with CCMP AES -if needed replay check- */
|
2018-02-23 17:43:29 +00:00
|
|
|
UCHAR nonce[DOT11DECRYPT_WPA_NONCE_LEN];
|
2007-01-02 22:49:57 +00:00
|
|
|
/* used to derive PTK, ANonce stored, SNonce taken */
|
|
|
|
/* the 2nd packet of the 4W handshake */
|
2006-12-05 21:06:09 +00:00
|
|
|
|
2018-02-23 17:43:29 +00:00
|
|
|
UCHAR ptk[DOT11DECRYPT_WPA_PTK_LEN]; /* session key used in decryption algorithm */
|
2006-12-05 21:06:09 +00:00
|
|
|
} wpa;
|
2009-05-22 17:38:21 +00:00
|
|
|
|
|
|
|
|
2018-02-23 17:43:29 +00:00
|
|
|
} DOT11DECRYPT_SEC_ASSOCIATION, *PDOT11DECRYPT_SEC_ASSOCIATION;
|
2006-12-05 21:06:09 +00:00
|
|
|
|
2018-02-23 17:43:29 +00:00
|
|
|
typedef struct _DOT11DECRYPT_CONTEXT {
|
|
|
|
DOT11DECRYPT_SEC_ASSOCIATION sa[DOT11DECRYPT_MAX_SEC_ASSOCIATIONS_NR];
|
2008-03-05 00:57:30 +00:00
|
|
|
INT sa_index;
|
2018-02-23 17:43:29 +00:00
|
|
|
DOT11DECRYPT_KEY_ITEM keys[DOT11DECRYPT_MAX_KEYS_NR];
|
2006-12-05 21:06:09 +00:00
|
|
|
size_t keys_nr;
|
|
|
|
|
2018-02-23 17:43:29 +00:00
|
|
|
CHAR pkt_ssid[DOT11DECRYPT_WPA_SSID_MAX_LEN];
|
2007-01-26 21:54:59 +00:00
|
|
|
size_t pkt_ssid_len;
|
|
|
|
|
2006-12-05 21:06:09 +00:00
|
|
|
INT index;
|
|
|
|
INT first_free_index;
|
2018-02-23 17:43:29 +00:00
|
|
|
} DOT11DECRYPT_CONTEXT, *PDOT11DECRYPT_CONTEXT;
|
2006-12-05 21:06:09 +00:00
|
|
|
|
2007-01-02 22:49:57 +00:00
|
|
|
/************************************************************************/
|
|
|
|
/* Function prototype declarations */
|
|
|
|
|
2006-12-05 21:06:09 +00:00
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C" {
|
|
|
|
#endif
|
|
|
|
|
2006-12-27 23:05:55 +00:00
|
|
|
/**
|
2015-11-22 13:01:23 +00:00
|
|
|
* This will try to decrypt a 802.11 frame. If scanHandshake is
|
|
|
|
* true it will also check if it's a cleartext or encrypted eapol key
|
|
|
|
* frame which can be used to setup TK or GTK decryption keys.
|
2007-06-14 22:09:14 +00:00
|
|
|
* @param ctx [IN] Pointer to the current context
|
|
|
|
* @param data [IN] Pointer to a buffer with an 802.11 frame, including MAC
|
|
|
|
* header and payload
|
|
|
|
* @param data_off [IN] Payload offset (aka the MAC header length)
|
|
|
|
* @param data_len [IN] Total length of the MAC header and the payload
|
|
|
|
* @param decrypt_data [OUT] Pointer to a buffer that will contain
|
2015-11-22 13:01:23 +00:00
|
|
|
* decrypted data. If this parameter is set to NULL, decrypted data will
|
2018-02-23 17:43:29 +00:00
|
|
|
* be discarded. Must have room for at least DOT11DECRYPT_MAX_CAPLEN bytes.
|
2015-11-22 13:01:23 +00:00
|
|
|
* @param decrypt_len [OUT] Length of decrypted data if decrypt_data
|
|
|
|
* is not NULL.
|
2007-06-14 22:09:14 +00:00
|
|
|
* @param key [OUT] Pointer to a preallocated key structure containing
|
|
|
|
* the key used during the decryption process (if done). If this parameter
|
|
|
|
* is set to NULL, the key will be not returned.
|
2015-11-12 17:59:11 +00:00
|
|
|
* @param scanHandshake [IN] If TRUE this function will additional check if
|
|
|
|
* the 802.11 frame data is pointing to has key information and if so use
|
2015-11-22 13:01:23 +00:00
|
|
|
* it to setup potential decryption keys. Enables handshake return codes.
|
2006-12-27 23:05:55 +00:00
|
|
|
* @return
|
2018-02-23 17:43:29 +00:00
|
|
|
* - DOT11DECRYPT_RET_SUCCESS: Decryption has been done (decrypt_data and
|
2007-10-16 23:42:33 +00:00
|
|
|
* decrypt_length will contain the packet data decrypted and the length of
|
2006-12-27 23:05:55 +00:00
|
|
|
* the new packet)
|
2018-02-23 17:43:29 +00:00
|
|
|
* - DOT11DECRYPT_RET_NO_DATA: The packet is not a data packet
|
|
|
|
* - DOT11DECRYPT_RET_WRONG_DATA_SIZE: The size of the packet is below the
|
2006-12-27 23:05:55 +00:00
|
|
|
* accepted minimum
|
2018-02-23 17:43:29 +00:00
|
|
|
* - DOT11DECRYPT_RET_REQ_DATA: Required data is not available and the
|
2015-11-22 13:01:23 +00:00
|
|
|
* processing must be interrupted (can also occur after decryption when
|
|
|
|
* scanHandshake is TRUE)
|
2018-02-23 17:43:29 +00:00
|
|
|
* - DOT11DECRYPT_RET_NO_DATA_ENCRYPTED: Not encrypted and no attempt to
|
2015-11-22 13:01:23 +00:00
|
|
|
* extract key information
|
2018-02-23 17:43:29 +00:00
|
|
|
* - DOT11DECRYPT_RET_UNSUCCESS: Generic unspecified error (decrypt_data
|
2006-12-27 23:05:55 +00:00
|
|
|
* and decrypt_length will be not modified).
|
2018-02-23 17:43:29 +00:00
|
|
|
* - DOT11DECRYPT_RET_SUCCESS_HANDSHAKE: An eapol handshake packet was successfuly parsed
|
2015-11-22 13:01:23 +00:00
|
|
|
* and key information extracted
|
2018-02-23 17:43:29 +00:00
|
|
|
* - DOT11DECRYPT_RET_NO_VALID_HANDSHAKE: The handshake is invalid or was not used
|
2015-11-22 13:01:23 +00:00
|
|
|
* for some reason. For encrypted packets decryption was still successful.
|
2006-12-27 23:05:55 +00:00
|
|
|
* @note
|
|
|
|
* The decrypted buffer should be allocated for a size equal or greater
|
|
|
|
* than the packet data buffer size. Before decryption process original
|
|
|
|
* data is copied in the buffer pointed by decrypt_data not to modify the
|
|
|
|
* original packet.
|
|
|
|
* @note
|
|
|
|
* The length of decrypted data will consider the entire 802.11 frame
|
|
|
|
* (thus the MAC header, the frame body and the recalculated FCS -if
|
|
|
|
* initially present-)
|
|
|
|
* @note
|
|
|
|
* This function is not thread-safe when used in parallel with context
|
|
|
|
* management functions on the same context.
|
|
|
|
*/
|
2018-02-23 17:43:29 +00:00
|
|
|
extern INT Dot11DecryptPacketProcess(
|
|
|
|
PDOT11DECRYPT_CONTEXT ctx,
|
2007-06-14 22:09:14 +00:00
|
|
|
const guint8 *data,
|
|
|
|
const guint data_off,
|
|
|
|
const guint data_len,
|
2006-12-27 23:05:55 +00:00
|
|
|
UCHAR *decrypt_data,
|
2007-06-14 22:09:14 +00:00
|
|
|
guint32 *decrypt_len,
|
2018-02-23 17:43:29 +00:00
|
|
|
PDOT11DECRYPT_KEY_ITEM key,
|
2015-11-01 17:49:42 +00:00
|
|
|
gboolean scanHandshake)
|
2006-12-27 23:05:55 +00:00
|
|
|
;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* It sets a new keys collection to use during packet processing.
|
|
|
|
* Any key should be well-formed, thus: it should have a defined key
|
|
|
|
* type and the specified length should be conforming WEP or WPA/WPA2
|
|
|
|
* standards. A general WEP keys could be of any length (in the range
|
2018-02-23 17:43:29 +00:00
|
|
|
* defined in DOT11DECRYPT_KEY_ITEM), if a specific WEP key is used, the
|
2006-12-27 23:05:55 +00:00
|
|
|
* length of the key will be the one specified in 802.11i-2004 (40 bits or
|
|
|
|
* 104 bits).
|
|
|
|
* For WPA/WPA2 the password (passphrase and SSID), the PSK and the PMK
|
2018-02-23 17:43:29 +00:00
|
|
|
* are in alternative, as explain in the DOT11DECRYPT_KEY_ITEM structure
|
2006-12-27 23:05:55 +00:00
|
|
|
* description.
|
|
|
|
* @param ctx [IN] pointer to the current context
|
|
|
|
* @param keys [IN] an array of keys to set.
|
|
|
|
* @param keys_nr [IN] the size of the keys array
|
|
|
|
* @return The number of keys correctly inserted in the current database.
|
|
|
|
* @note Before inserting new keys, the current database will be cleaned.
|
|
|
|
* @note
|
|
|
|
* This function is not thread-safe when used in parallel with context
|
|
|
|
* management functions and the packet process function on the same
|
|
|
|
* context.
|
|
|
|
*/
|
2018-02-23 17:43:29 +00:00
|
|
|
extern INT Dot11DecryptSetKeys(
|
|
|
|
PDOT11DECRYPT_CONTEXT ctx,
|
|
|
|
DOT11DECRYPT_KEY_ITEM keys[],
|
2006-12-27 23:05:55 +00:00
|
|
|
const size_t keys_nr)
|
|
|
|
;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* It gets the keys collection fom the specified context.
|
|
|
|
* @param ctx [IN] pointer to the current context
|
2010-08-26 15:24:49 +00:00
|
|
|
* @param keys [IN] a preallocated array of keys to be returned
|
2006-12-27 23:05:55 +00:00
|
|
|
* @param keys_nr [IN] the number of keys to return (the key array must
|
|
|
|
* be able to contain at least keys_nr keys)
|
|
|
|
* @return The number of keys returned
|
|
|
|
* @note
|
2018-02-23 17:43:29 +00:00
|
|
|
* Any key could be modified, as stated in the DOT11DECRYPT_KEY_ITEM description.
|
2006-12-27 23:05:55 +00:00
|
|
|
* @note
|
|
|
|
* This function is not thread-safe when used in parallel with context
|
|
|
|
* management functions and the packet process function on the same
|
|
|
|
* context.
|
|
|
|
*/
|
2018-02-23 17:43:29 +00:00
|
|
|
INT Dot11DecryptGetKeys(
|
|
|
|
const PDOT11DECRYPT_CONTEXT ctx,
|
|
|
|
DOT11DECRYPT_KEY_ITEM keys[],
|
2006-12-27 23:05:55 +00:00
|
|
|
const size_t keys_nr)
|
|
|
|
;
|
2007-01-26 21:54:59 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Sets the "last seen" SSID. This allows us to pick up previous
|
|
|
|
* SSIDs and use them when "wildcard" passphrases are specified
|
|
|
|
* in the preferences.
|
|
|
|
* @param ctx [IN|OUT] pointer to a preallocated context structure
|
|
|
|
* @param pkt_ssid [IN] pointer to the packet's SSID
|
|
|
|
* @param pkt_ssid_len [IN] length of the packet's SSID
|
|
|
|
* @return
|
2018-02-23 17:43:29 +00:00
|
|
|
* DOT11DECRYPT_RET_SUCCESS: The key has been set.
|
|
|
|
* DOT11DECRYPT_RET_UNSUCCESS: The has not been set, e.g. the length was
|
2007-01-26 21:54:59 +00:00
|
|
|
* too long.
|
|
|
|
*/
|
2018-02-23 17:43:29 +00:00
|
|
|
INT Dot11DecryptSetLastSSID(
|
|
|
|
PDOT11DECRYPT_CONTEXT ctx,
|
2007-01-26 21:54:59 +00:00
|
|
|
CHAR *pkt_ssid,
|
|
|
|
size_t pkt_ssid_len)
|
|
|
|
;
|
|
|
|
|
2006-12-27 23:05:55 +00:00
|
|
|
/**
|
|
|
|
* Initialize a context used to manage decryption and keys collection.
|
|
|
|
* @param ctx [IN|OUT] pointer to a preallocated context structure
|
|
|
|
* @return
|
2018-02-23 17:43:29 +00:00
|
|
|
* DOT11DECRYPT_RET_SUCCESS: the context has been successfully initialized
|
|
|
|
* DOT11DECRYPT_RET_UNSUCCESS: the context has not been initialized
|
2006-12-27 23:05:55 +00:00
|
|
|
* @note
|
|
|
|
* Only a correctly initialized context can be used to manage decryption
|
|
|
|
* processes and keys.
|
|
|
|
* @note
|
|
|
|
* This function is not thread-safe when used in parallel with context
|
|
|
|
* management functions and the packet process function on the same context.
|
|
|
|
*/
|
2013-03-01 23:53:11 +00:00
|
|
|
WS_DLL_PUBLIC
|
2018-02-23 17:43:29 +00:00
|
|
|
INT Dot11DecryptInitContext(
|
|
|
|
PDOT11DECRYPT_CONTEXT ctx)
|
2006-12-27 23:05:55 +00:00
|
|
|
;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Clean up the specified context. After the cleanup the pointer should
|
|
|
|
* not be used anymore.
|
|
|
|
* @param ctx [IN|OUT] pointer to the current context structure
|
|
|
|
* @return
|
2018-02-23 17:43:29 +00:00
|
|
|
* DOT11DECRYPT_RET_SUCCESS: the context has been successfully initialized
|
|
|
|
* DOT11DECRYPT_RET_UNSUCCESS: the context has not been initialized
|
2006-12-27 23:05:55 +00:00
|
|
|
* @note
|
|
|
|
* This function is not thread-safe when used in parallel with context
|
|
|
|
* management functions and the packet process function on the same
|
|
|
|
* context.
|
|
|
|
*/
|
2013-03-01 23:53:11 +00:00
|
|
|
WS_DLL_PUBLIC
|
2018-02-23 17:43:29 +00:00
|
|
|
INT Dot11DecryptDestroyContext(
|
|
|
|
PDOT11DECRYPT_CONTEXT ctx)
|
2006-12-27 23:05:55 +00:00
|
|
|
;
|
|
|
|
|
2018-02-23 17:43:29 +00:00
|
|
|
extern INT Dot11DecryptCcmpDecrypt(
|
2006-12-27 23:05:55 +00:00
|
|
|
UINT8 *m,
|
2007-06-14 22:09:14 +00:00
|
|
|
gint mac_header_len,
|
2006-12-27 23:05:55 +00:00
|
|
|
INT len,
|
|
|
|
UCHAR TK1[16])
|
|
|
|
;
|
2018-02-23 17:43:29 +00:00
|
|
|
extern INT Dot11DecryptTkipDecrypt(
|
2006-12-27 23:05:55 +00:00
|
|
|
UCHAR *tkip_mpdu,
|
|
|
|
size_t mpdu_len,
|
2018-02-23 17:43:29 +00:00
|
|
|
UCHAR TA[DOT11DECRYPT_MAC_LEN],
|
|
|
|
UCHAR TK[DOT11DECRYPT_TK_LEN])
|
2006-12-27 23:05:55 +00:00
|
|
|
;
|
2006-12-05 21:06:09 +00:00
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
2018-02-23 17:43:29 +00:00
|
|
|
#endif /* _DOT11DECRYPT_SYSTEM_H */
|