1381 lines
45 KiB
C
1381 lines
45 KiB
C
|
|
|
|
/****************************************************************************
|
|
* Sec2.h - Top-level driver include file for SEC2 security processor
|
|
****************************************************************************
|
|
* Copyright (c) 2003-2005 Freescale Semiconductor
|
|
* All Rights Reserved. Proprietary and Confidential.
|
|
*
|
|
* NOTICE: The information contained in this file is proprietary
|
|
* to Freescale Semiconductor and is being made available to
|
|
* Freescale's customers under strict license agreements.
|
|
* Use or disclosure of this information is permissible only
|
|
* under the terms of the existing license agreement.
|
|
***************************************************************************/
|
|
|
|
|
|
/* Revision History:
|
|
* 1.0 Aug 24,2003 dgs adapted from the final version of mpc18x
|
|
* Jun 02,2004 sec - add "generic" linked list for scatter description
|
|
* Aug 23,2004 sec - add TLS support for T2.1
|
|
* 1.1.0 Nov 04,2004 sec - merge linux changes from prior versions
|
|
* 1.1.1 Dec 15,2004 sec - remove old, unused diagnostics
|
|
* 1.2 Jan 27,2005 sec - remove obsolete names and non-pad IPsec request defs,
|
|
* add hash chain support
|
|
*/
|
|
|
|
|
|
#ifndef SEC2_H
|
|
#define SEC2_H
|
|
|
|
#ifdef _cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
|
|
/* General types for the driver, if they don't exist elsewhere */
|
|
|
|
#ifndef BOOLEAN
|
|
#define BOOLEAN int
|
|
#endif
|
|
|
|
#ifndef TRUE
|
|
#define TRUE (1)
|
|
#endif
|
|
#ifndef FALSE
|
|
#define FALSE (0)
|
|
#endif
|
|
|
|
#ifndef offsetof
|
|
#define offsetof(s,m) (size_t)&(((s *)0)->m)
|
|
#endif
|
|
|
|
|
|
|
|
|
|
/* IOCTL function code offsets */
|
|
/* Each defines an IOCTL request to be added to a system-defined offset */
|
|
#define SEC2_PROC_REQ (1) /* Process request */
|
|
#define SEC2_GET_STATUS (2) /* Read delayed status */
|
|
/* Interpeak begin */
|
|
#define SEC2_GET_DONE (3) /* Get done context */
|
|
#define SEC2_GET_ERROR (4) /* Get error context */
|
|
/* Interpeak end */
|
|
#define SEC2_MALLOC (13) /* Allocate driver storage block */
|
|
#define SEC2_FREE (14) /* Free a driver storage block */
|
|
#define SEC2_COPYFROM (15) /* Driver buffer copy function */
|
|
#define SEC2_COPYTO (16) /* Opposing buffer copy function */
|
|
|
|
/* Base IOCTL function index, assume 0 to 0x7ff reserved for the host OS */
|
|
#define SEC2_IOCTL_INDEX (0x800)
|
|
|
|
/* Computed IOCTL constants for use */
|
|
#define IOCTL_PROC_REQ (SEC2_IOCTL_INDEX + SEC2_PROC_REQ)
|
|
#define IOCTL_GET_STATUS (SEC2_IOCTL_INDEX + SEC2_GET_STATUS)
|
|
/* Interpeak begin */
|
|
#define IOCTL_GET_DONE (SEC2_IOCTL_INDEX + SEC2_GET_DONE)
|
|
#define IOCTL_GET_ERROR (SEC2_IOCTL_INDEX + SEC2_GET_ERROR)
|
|
/* Interpeak end */
|
|
#define IOCTL_MALLOC (SEC2_IOCTL_INDEX + SEC2_MALLOC)
|
|
#define IOCTL_FREE (SEC2_IOCTL_INDEX + SEC2_FREE)
|
|
#define IOCTL_COPYFROM (SEC2_IOCTL_INDEX + SEC2_COPYFROM)
|
|
#define IOCTL_COPYTO (SEC2_IOCTL_INDEX + SEC2_COPYTO)
|
|
|
|
/* Defined the internal "geometry* of the security block in question */
|
|
/* Will be obsoleted in the near future in favor of dynamic configuration */
|
|
/* based on the rev mask of the T2.x core */
|
|
|
|
#define NUM_CHANNELS (4) /* Channels configured */
|
|
#define NUM_DESAS (1) /* DES cipher accelerators */
|
|
#define NUM_AESAS (1) /* AES cipher accelerators */
|
|
#define NUM_MDHAS (1) /* MD-x message digest accelerators */
|
|
#define NUM_AFHAS (1) /* ARC-4 accelerators */
|
|
#define NUM_RNGAS (1) /* Random-number generators */
|
|
#define NUM_PKHAS (1) /* Public-key accelerators */
|
|
/* Total number of accelerator blocks configured */
|
|
#define NUM_CHAS (NUM_AFHAS+NUM_DESAS+NUM_MDHAS+NUM_RNGAS+NUM_PKHAS \
|
|
+NUM_AESAS)
|
|
|
|
#ifdef VXWORKS
|
|
#define vxworksDrvName "/dev/sec2"
|
|
#endif
|
|
|
|
|
|
/* General error/status codes for ioctl() function returns, and for the */
|
|
/* status field of the general-purpose part of the request struct */
|
|
|
|
/* all OK */
|
|
#define SEC2_SUCCESS (0x00000000)
|
|
|
|
/* Driver memory allocation problem */
|
|
#define SEC2_MEMORY_ALLOCATION (0xE004FFFF)
|
|
|
|
/* Channel spec out-of-range. Here for legacy */
|
|
/* compatibility, not relevant to SEC2 */
|
|
#define SEC2_INVALID_CHANNEL (0xE004FFFE)
|
|
|
|
/* Requested cipher type not supported on */
|
|
/* this hardware. This technically indicates */
|
|
/* a driver problem of some sort */
|
|
#define SEC2_INVALID_CHA_TYPE (0xE004FFFD)
|
|
|
|
/* Operation type specified in the request */
|
|
/* block does not exist */
|
|
#define SEC2_INVALID_OPERATION_ID (0xE004FFFC)
|
|
|
|
/* Requested channel not available for use */
|
|
/* This error exists for legacy compatibility */
|
|
/* but is meaningless for SEC2 because of the */
|
|
/* lack of static channel support */
|
|
#define SEC2_CHANNEL_NOT_AVAILABLE (0xE004FFFB)
|
|
|
|
/* Requested cipher type already in use by */
|
|
/* some other request */
|
|
#define SEC2_CHA_NOT_AVAILABLE (0xE004FFFA)
|
|
|
|
/* At least one data length in the request is invalid */
|
|
/* This is likely an alignment issue */
|
|
#define SEC2_INVALID_LENGTH (0xE004FFF9)
|
|
|
|
/* An address in the request struct is misaligned */
|
|
#define SEC2_OUTPUT_BUFFER_ALIGNMENT (0xE004FFF8)
|
|
|
|
/* Driver has internal address translation err */
|
|
#define SEC2_ADDRESS_PROBLEM (0xE004FFF6)
|
|
|
|
/* Driver has run out of request entries */
|
|
#define SEC2_INSUFFICIENT_REQS (0xE004FFF5)
|
|
|
|
/* An accelerator is in error state after a request */
|
|
#define SEC2_CHA_ERROR (0xE004FFF2)
|
|
|
|
/* Specified request was NULL */
|
|
#define SEC2_NULL_REQUEST (0xE004FFF1)
|
|
|
|
/* Timeout during request execution */
|
|
#define SEC2_REQUEST_TIMED_OUT (0xE004FFF0)
|
|
|
|
/* Driver ran out of memory in the course of processing */
|
|
#define SEC2_MALLOC_FAILED (0xE004FFEF)
|
|
|
|
/* Driver failed to free a block while processing */
|
|
#define SEC2_FREE_FAILED (0xE004FFEE)
|
|
|
|
/* Driver encountered a parity error in the input data */
|
|
#define SEC2_PARITY_SYSTEM_ERROR (0xE004FFED)
|
|
|
|
#define SEC2_INCOMPLETE_POINTER (0xE004FFEC)
|
|
#define SEC2_TEA_ERROR (0xE004FFEB)
|
|
|
|
/* While trying to build a scatter-gather fragment list */
|
|
/* for a specified request, the driver ran out of */
|
|
/* entries to store into */
|
|
#define SEC2_FRAGMENT_POOL_EXHAUSTED (0xE004FFEA)
|
|
|
|
/* Driver attempted to stuff too many DPDs into the */
|
|
/* fetch FIFO. This indicates an internal driver error */
|
|
#define SEC2_FETCH_FIFO_OVERFLOW (0xE004FFE9)
|
|
|
|
/* Hardware failed while trying to acquire mastership */
|
|
/* of the bus */
|
|
#define SEC2_BUS_MASTER_ERROR (0xE004FFE8)
|
|
|
|
/* While composing a scatter descriptor, the driver */
|
|
/* encountered an error, most likely a bad pointer in */
|
|
/* the specification list */
|
|
#define SEC2_SCATTER_LIST_ERROR (0xE004FFE7)
|
|
|
|
/* Driver encountered an unidentfiable condition */
|
|
#define SEC2_UNKNOWN_ERROR (0xE004FFE6)
|
|
|
|
|
|
/* Security device not found at the specified location */
|
|
/* This is a legacy error left over from earlier revs */
|
|
#define SEC2_IO_CARD_NOT_FOUND (-1000)
|
|
|
|
/* Driver can't allocate a buffer */
|
|
#define SEC2_IO_MEMORY_ALLOCATE_ERROR (-1001)
|
|
|
|
/* Driver has a problem with register I/O */
|
|
#define SEC2_IO_IO_ERROR (-1002)
|
|
|
|
/* System can't attach driver to the OS dispatch table */
|
|
#define SEC2_IO_VXWORKS_DRIVER_TABLE_ADD_ERROR (-1003)
|
|
|
|
/* Driver can't use a needed interrupt ID */
|
|
#define SEC2_IO_INTERRUPT_ALLOCATE_ERROR (-1004)
|
|
|
|
/* Driver can't use peripheral base region */
|
|
#define SEC2_CANNOT_SETUP_BAR0_ERROR (-1008)
|
|
|
|
/* Driver can't initialize message queue */
|
|
#define SEC2_VXWORKS_CANNOT_CREATE_QUEUE (-1009)
|
|
|
|
/* Request was cancelled by external means */
|
|
#define SEC2_CANCELLED_REQUEST (-1010)
|
|
|
|
/* User passed a null request pointer to IOCTL_PROC_REQ */
|
|
#define SEC2_INVALID_ADDRESS (-1011)
|
|
|
|
|
|
#include "Sec2Notify.h"
|
|
|
|
|
|
|
|
|
|
/* MALLOC_REQ
|
|
structure used on allocation requests to the driver
|
|
|
|
Used by KernelMalloc()
|
|
|
|
Used also by the Dispatch function that calls KernelMalloc() and KernelFree()
|
|
*/
|
|
typedef struct
|
|
{
|
|
unsigned long sz; /*!< Number of bytes to allocate
|
|
Zero means to use the default. A value
|
|
of zero can be used to avoid fragmentation.
|
|
*/
|
|
void *ptr; /*!< Pointer to the adress that is to
|
|
be returned by a call to KernelMalloc()
|
|
or a pointer to an address that is to
|
|
be freed when calling KernelFree()
|
|
*/
|
|
char *to; /* copy to */
|
|
char *from; /* copy from */
|
|
int pid; /* pid */
|
|
} MALLOC_REQ;
|
|
|
|
|
|
|
|
|
|
/* Basic scatter/gather linked list form for general-purpose use */
|
|
/* This is used by the requestor to identify scatter buffer fragments to the driver */
|
|
/* for any pointer in a request. It's constructed in common NULL-terminated linked */
|
|
/* list form */
|
|
|
|
typedef struct _sec2scatterFragment
|
|
{
|
|
void *next; /* next fragment in list, NULL if none */
|
|
void *fragment; /* physical location of fragment */
|
|
unsigned short size; /* size of this fragment */
|
|
} EXT_SCATTER_ELEMENT;
|
|
|
|
|
|
|
|
/* Extracts the request type from an OpId */
|
|
#define DESC_TYPE_MASK (0xFF00)
|
|
/* Extracts the request group from an OpId */
|
|
#define DESC_NUM_MASK (0x00FF)
|
|
|
|
|
|
/*
|
|
* Common request block for all request headers
|
|
* This macro contains the common portion of all request blocks
|
|
* It's composed as follows:
|
|
* opId - Type of operation requested
|
|
* scatterBufs - Map of scattered buffers, returned from MarkScatterBuffers()
|
|
* notifyFlags - if bits set, notify pointers are actuall PIDs for a completion signal
|
|
* channel - Obsolete for T2.x, holdover from 2.x
|
|
* notify - Handler for normal completion
|
|
* pNotifyCtx - Context for handler
|
|
* notify_on_error - Handler for error completion
|
|
* ctxNotifyOnErr - returned device context if error
|
|
* status - Driver completion status
|
|
* nextReq - Next request in list, if any
|
|
*/
|
|
|
|
#define COMMON_REQ_PREAMBLE \
|
|
unsigned long opId; \
|
|
unsigned char scatterBufs; \
|
|
unsigned char notifyFlags; \
|
|
unsigned char reserved; \
|
|
unsigned char channel; \
|
|
PSEC2_NOTIFY_ROUTINE notify; \
|
|
PSEC2_NOTIFY_CTX pNotifyCtx; \
|
|
PSEC2_NOTIFY_ON_ERROR_ROUTINE notify_on_error; \
|
|
SEC2_NOTIFY_ON_ERROR_CTX ctxNotifyOnErr; \
|
|
int status; \
|
|
void *nextReq;
|
|
|
|
|
|
|
|
/* This gets used by driver functions that need access to just the request */
|
|
/* header without knowing the remaining request-type-specific content */
|
|
typedef struct { COMMON_REQ_PREAMBLE } GENERIC_REQ;
|
|
|
|
|
|
/* Bits for use with notifyFlags in the request header */
|
|
#define NOTIFY_IS_PID (0x01) /* "notify" is a PID, not a pointer */
|
|
#define NOTIFY_ERROR_IS_PID (0x02) /* "notify_on_error" is a PID, not a pointer */
|
|
|
|
/*
|
|
* RNG_REQ - Random-Number generator request block
|
|
* rngBytes - number of bytes to return
|
|
* rngData - pointer to user's random data buffer
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
COMMON_REQ_PREAMBLE
|
|
unsigned long rngBytes;
|
|
unsigned char *rngData;
|
|
} RNG_REQ;
|
|
|
|
#define NUM_RNGA_DESC (1)
|
|
#define DPD_RNG_GROUP (0x1000)
|
|
|
|
/* Get random data from the RNG */
|
|
#define DPD_RNG_GETRN (DPD_RNG_GROUP + 0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
* DES_LOADCTX_CRYPT_REQ - DES request with context load
|
|
* These are basically CBC (cipher-block-chain) operations
|
|
*
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
COMMON_REQ_PREAMBLE
|
|
unsigned long inIvBytes; /* 0 or 8 bytes */
|
|
unsigned char *inIvData;
|
|
unsigned long keyBytes; /* 8, 16, or 24 bytes */
|
|
unsigned char *keyData;
|
|
unsigned long inBytes; /* multiple of 8 bytes */
|
|
unsigned char *inData;
|
|
unsigned char *outData; /* output length = input length */
|
|
unsigned long outIvBytes; /* 0 or 8 bytes */
|
|
unsigned char *outIvData;
|
|
} DES_CBC_CRYPT_REQ;
|
|
|
|
/* typedef the old name for legacy compatibility */
|
|
typedef DES_CBC_CRYPT_REQ DES_LOADCTX_CRYPT_REQ;
|
|
|
|
#define NUM_DES_CBC_DESC (4)
|
|
#define DPD_DES_CBC_GROUP (0x2500)
|
|
|
|
/* Single-DES CBC encrypt */
|
|
#define DPD_SDES_CBC_CTX_ENCRYPT (DPD_DES_CBC_GROUP + 0)
|
|
|
|
/* Single-DES CBC decrypt */
|
|
#define DPD_SDES_CBC_CTX_DECRYPT (DPD_DES_CBC_GROUP + 1)
|
|
|
|
/* Triple-DES CBC encrypt */
|
|
#define DPD_TDES_CBC_CTX_ENCRYPT (DPD_DES_CBC_GROUP + 2)
|
|
|
|
/* Triple-DES CBC decrypt */
|
|
#define DPD_TDES_CBC_CTX_DECRYPT (DPD_DES_CBC_GROUP + 3)
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
* DES_CRYPT_REQ - non-context DES cipher operation
|
|
* These are ECB-only operations
|
|
*
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
COMMON_REQ_PREAMBLE
|
|
unsigned long keyBytes; /* 8, 16, or 24 bytes */
|
|
unsigned char *keyData;
|
|
unsigned long inBytes; /* multiple of 8 bytes */
|
|
unsigned char *inData;
|
|
unsigned char *outData; /* output length = input length */
|
|
} DES_CRYPT_REQ;
|
|
|
|
#define NUM_DES_DESC (4)
|
|
#define DPD_DES_ECB_GROUP (0x2600)
|
|
|
|
#define DPD_SDES_ECB_ENCRYPT (DPD_DES_ECB_GROUP + 0)
|
|
#define DPD_SDES_ECB_DECRYPT (DPD_DES_ECB_GROUP + 1)
|
|
#define DPD_TDES_ECB_ENCRYPT (DPD_DES_ECB_GROUP + 2)
|
|
#define DPD_TDES_ECB_DECRYPT (DPD_DES_ECB_GROUP + 3)
|
|
|
|
|
|
|
|
|
|
/*
|
|
* AESA_CRYPT_REQ - AES ciphering operations
|
|
*
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
COMMON_REQ_PREAMBLE
|
|
unsigned long keyBytes; /* 8, 16, or 24 bytes */
|
|
unsigned char *keyData;
|
|
unsigned long inIvBytes; /* 0 or 16 bytes */
|
|
unsigned char *inIvData;
|
|
unsigned long inBytes; /* multiple of 8 bytes */
|
|
unsigned char *inData;
|
|
unsigned char *outData; /* output length = input length */
|
|
unsigned long outCtxBytes; /* 0 or 16 bytes */
|
|
unsigned char *outCtxData;
|
|
} AESA_CRYPT_REQ;
|
|
|
|
#define NUM_AESA_CRYPT_DESC (8)
|
|
#define DPD_AESA_CRYPT_GROUP (0x6000)
|
|
|
|
#define DPD_AESA_CBC_ENCRYPT_CRYPT (DPD_AESA_CRYPT_GROUP + 0)
|
|
#define DPD_AESA_CBC_DECRYPT_CRYPT (DPD_AESA_CRYPT_GROUP + 1)
|
|
#define DPD_AESA_CBC_DECRYPT_CRYPT_RDK (DPD_AESA_CRYPT_GROUP + 2)
|
|
#define DPD_AESA_ECB_ENCRYPT_CRYPT (DPD_AESA_CRYPT_GROUP + 3)
|
|
#define DPD_AESA_ECB_DECRYPT_CRYPT (DPD_AESA_CRYPT_GROUP + 4)
|
|
#define DPD_AESA_ECB_DECRYPT_CRYPT_RDK (DPD_AESA_CRYPT_GROUP + 5)
|
|
#define DPD_AESA_CTR_CRYPT (DPD_AESA_CRYPT_GROUP + 6)
|
|
#define DPD_AESA_CTR_HMAC (DPD_AESA_CRYPT_GROUP + 7)
|
|
|
|
|
|
|
|
/*
|
|
* KEA_CRYPT_REQ - Kasumi cipher operations
|
|
* Not present in 2.0
|
|
*
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
COMMON_REQ_PREAMBLE
|
|
unsigned long ivBytes; /* 0 or 8 bytes */
|
|
unsigned char *ivData;
|
|
unsigned long keyBytes; /* 8, 16, or 24 bytes */
|
|
unsigned char *keyData;
|
|
unsigned long inBytes; /* multiple of 8 bytes */
|
|
unsigned char *inData;
|
|
unsigned char *outData; /* output length = input length */
|
|
} KEA_CRYPT_REQ;
|
|
|
|
#define NUM_KEA_CRYPT_DESC (4)
|
|
#define DPD_KEA_CRYPT_GROUP (0xA000)
|
|
|
|
/* Kasumi request types */
|
|
#define DPD_KEA_f8_UPLINK_CRYPT (DPD_KEA_CRYPT_GROUP + 0)
|
|
#define DPD_KEA_f8_DOWNLINK_CRYPT (DPD_KEA_CRYPT_GROUP + 1)
|
|
#define DPD_KEA_f9_UPLINK_CRYPT (DPD_KEA_CRYPT_GROUP + 2)
|
|
#define DPD_KEA_f9_DOWNLINK_CRYPT (DPD_KEA_CRYPT_GROUP + 3)
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
* ARC4_LOADCTX_CRYPT_REQ - ARC4 cipher operation with context load
|
|
*
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
COMMON_REQ_PREAMBLE
|
|
unsigned long inCtxBytes; /* 257 bytes */
|
|
unsigned char *inCtxData;
|
|
unsigned long inBytes;
|
|
unsigned char *inData;
|
|
unsigned char *outData; /* output length = input length */
|
|
unsigned long outCtxBytes; /* 257 bytes */
|
|
unsigned char *outCtxData;
|
|
} ARC4_LOADCTX_CRYPT_REQ;
|
|
|
|
#define NUM_RC4_LOADCTX_UNLOADCTX_DESC (1)
|
|
#define DPD_RC4_LDCTX_CRYPT_ULCTX_GROUP (0x3400)
|
|
|
|
#define DPD_RC4_LDCTX_CRYPT_ULCTX (DPD_RC4_LDCTX_CRYPT_ULCTX_GROUP + 0)
|
|
|
|
|
|
|
|
|
|
/*
|
|
* ARC4_LOADKEY_CRYPT_UNLOADCTX_REQ - ARC4 operation with key load
|
|
* and context save
|
|
*
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
COMMON_REQ_PREAMBLE
|
|
unsigned long keyBytes;
|
|
unsigned char *keyData;
|
|
unsigned long inBytes;
|
|
unsigned char *inData;
|
|
unsigned char *outData; /* output length = input length */
|
|
unsigned long outCtxBytes; /* 257 bytes */
|
|
unsigned char *outCtxData;
|
|
} ARC4_LOADKEY_CRYPT_UNLOADCTX_REQ;
|
|
|
|
#define NUM_RC4_LOADKEY_UNLOADCTX_DESC (1)
|
|
#define DPD_RC4_LDKEY_CRYPT_ULCTX_GROUP (0x3500)
|
|
|
|
#define DPD_RC4_LDKEY_CRYPT_ULCTX (DPD_RC4_LDKEY_CRYPT_ULCTX_GROUP + 0)
|
|
|
|
|
|
|
|
|
|
/*
|
|
* HASH_REQ - combined SHA/MD5 hash operations with context loads
|
|
* and saves
|
|
*
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
COMMON_REQ_PREAMBLE
|
|
unsigned long ctxBytes;
|
|
unsigned char *ctxData;
|
|
unsigned long inBytes;
|
|
unsigned char *inData;
|
|
unsigned long outBytes; /* length is fixed by algorithm */
|
|
unsigned char *outData;
|
|
} HASH_REQ;
|
|
|
|
|
|
#define NUM_MDHA_DESC (9)
|
|
#define DPD_HASH_LDCTX_HASH_ULCTX_GROUP (0x4400)
|
|
|
|
#define DPD_SHA256_LDCTX_HASH_ULCTX (DPD_HASH_LDCTX_HASH_ULCTX_GROUP + 0)
|
|
#define DPD_MD5_LDCTX_HASH_ULCTX (DPD_HASH_LDCTX_HASH_ULCTX_GROUP + 1)
|
|
#define DPD_SHA_LDCTX_HASH_ULCTX (DPD_HASH_LDCTX_HASH_ULCTX_GROUP + 2)
|
|
#define DPD_SHA256_LDCTX_IDGS_HASH_ULCTX (DPD_HASH_LDCTX_HASH_ULCTX_GROUP + 3)
|
|
#define DPD_MD5_LDCTX_IDGS_HASH_ULCTX (DPD_HASH_LDCTX_HASH_ULCTX_GROUP + 4)
|
|
#define DPD_SHA_LDCTX_IDGS_HASH_ULCTX (DPD_HASH_LDCTX_HASH_ULCTX_GROUP + 5)
|
|
#define DPD_SHA256_CONT_HASH_ULCT X (DPD_HASH_LDCTX_HASH_ULCTX_GROUP + 6)
|
|
#define DPD_MD5_CONT_HASH_ULCTX (DPD_HASH_LDCTX_HASH_ULCTX_GROUP + 7)
|
|
#define DPD_SHA_CONT_HASH_ULCTX (DPD_HASH_LDCTX_HASH_ULCTX_GROUP + 8)
|
|
|
|
|
|
|
|
#define NUM_MDHA_PAD_DESC (9)
|
|
#define DPD_HASH_LDCTX_HASH_PAD_ULCTX_GROUP (0x4500)
|
|
|
|
#define DPD_SHA256_LDCTX_HASH_PAD_ULCTX (DPD_HASH_LDCTX_HASH_PAD_ULCTX_GROUP + 0)
|
|
#define DPD_MD5_LDCTX_HASH_PAD_ULCTX (DPD_HASH_LDCTX_HASH_PAD_ULCTX_GROUP + 1)
|
|
#define DPD_SHA_LDCTX_HASH_PAD_ULCTX (DPD_HASH_LDCTX_HASH_PAD_ULCTX_GROUP + 2)
|
|
#define DPD_SHA256_LDCTX_IDGS_HASH_PAD_ULCTX (DPD_HASH_LDCTX_HASH_PAD_ULCTX_GROUP + 3)
|
|
#define DPD_MD5_LDCTX_IDGS_HASH_PAD_ULCTX (DPD_HASH_LDCTX_HASH_PAD_ULCTX_GROUP + 4)
|
|
#define DPD_SHA_LDCTX_IDGS_HASH_PAD_ULCTX (DPD_HASH_LDCTX_HASH_PAD_ULCTX_GROUP + 5)
|
|
#define DPD_SHA256_CONT_HASH_PAD_ULCTX (DPD_HASH_LDCTX_HASH_PAD_ULCTX_GROUP + 6)
|
|
#define DPD_MD5_CONT_HASH_PAD_ULCTX (DPD_HASH_LDCTX_HASH_PAD_ULCTX_GROUP + 7)
|
|
#define DPD_SHA_CONT_HASH_PAD_ULCTX (DPD_HASH_LDCTX_HASH_PAD_ULCTX_GROUP + 8)
|
|
|
|
|
|
|
|
/*
|
|
* HMAC_PAD_REQ - Hash-message authentication code
|
|
*
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
COMMON_REQ_PREAMBLE
|
|
unsigned long keyBytes;
|
|
unsigned char *keyData;
|
|
unsigned long inBytes;
|
|
unsigned char *inData;
|
|
unsigned long outBytes; /* length is fixed by algorithm */
|
|
unsigned char *outData;
|
|
} HMAC_PAD_REQ;
|
|
|
|
#define NUM_HMAC_PAD_DESC (6)
|
|
#define DPD_HASH_LDCTX_HMAC_ULCTX_GROUP (0x4A00)
|
|
|
|
#define DPD_SHA256_LDCTX_HMAC_ULCTX (DPD_HASH_LDCTX_HMAC_ULCTX_GROUP + 0)
|
|
#define DPD_MD5_LDCTX_HMAC_ULCTX (DPD_HASH_LDCTX_HMAC_ULCTX_GROUP + 1)
|
|
#define DPD_SHA_LDCTX_HMAC_ULCTX (DPD_HASH_LDCTX_HMAC_ULCTX_GROUP + 2)
|
|
#define DPD_SHA256_LDCTX_HMAC_PAD_ULCTX (DPD_HASH_LDCTX_HMAC_ULCTX_GROUP + 3)
|
|
#define DPD_MD5_LDCTX_HMAC_PAD_ULCTX (DPD_HASH_LDCTX_HMAC_ULCTX_GROUP + 4)
|
|
#define DPD_SHA_LDCTX_HMAC_PAD_ULCTX (DPD_HASH_LDCTX_HMAC_ULCTX_GROUP + 5)
|
|
|
|
|
|
|
|
|
|
/*
|
|
* MOD_EXP_REQ - integer public key (modular expo) operations
|
|
*
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
COMMON_REQ_PREAMBLE
|
|
unsigned long aDataBytes;
|
|
unsigned char *aData;
|
|
unsigned long expBytes;
|
|
unsigned char *expData;
|
|
unsigned long modBytes;
|
|
unsigned char *modData;
|
|
unsigned long outBytes;
|
|
unsigned char *outData;
|
|
} MOD_EXP_REQ;
|
|
|
|
#define NUM_MM_EXP_DESC (1)
|
|
#define DPD_MM_LDCTX_EXP_ULCTX_GROUP (0x5100)
|
|
|
|
#define DPD_MM_LDCTX_EXP_ULCTX (DPD_MM_LDCTX_EXP_ULCTX_GROUP + 0)
|
|
|
|
|
|
|
|
|
|
/*
|
|
* MOD_SS_EXP_REQ - single-stage RSA operations
|
|
*
|
|
*/
|
|
typedef struct
|
|
{
|
|
COMMON_REQ_PREAMBLE
|
|
unsigned long expBytes;
|
|
unsigned char *expData;
|
|
unsigned long modBytes;
|
|
unsigned char *modData;
|
|
unsigned long aDataBytes;
|
|
unsigned char *aData;
|
|
unsigned long bDataBytes;
|
|
unsigned char *bData;
|
|
} MOD_SS_EXP_REQ;
|
|
|
|
#define NUM_MM_SS_EXP_DESC (1)
|
|
#define DPD_MM_SS_EXP_GROUP (0x5B00)
|
|
|
|
#define DPD_MM_SS_RSA_EXP (DPD_MM_SS_EXP_GROUP + 0)
|
|
|
|
|
|
|
|
/*
|
|
* MOD_R2MODN_REQ - Modular R2 operations
|
|
*
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
COMMON_REQ_PREAMBLE
|
|
unsigned long modBytes;
|
|
unsigned char *modData;
|
|
unsigned long outBytes;
|
|
unsigned char *outData;
|
|
} MOD_R2MODN_REQ;
|
|
|
|
#define NUM_MOD_R2MODN_DESC (1)
|
|
#define DPD_MM_LDCTX_R2MODN_ULCTX_GROUP (0x5200)
|
|
|
|
#define DPD_MM_LDCTX_R2MODN_ULCTX (DPD_MM_LDCTX_R2MODN_ULCTX_GROUP + 0)
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
* MOD_RRMODP_REQ - montgomery precomputation operations
|
|
*
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
COMMON_REQ_PREAMBLE
|
|
unsigned long nBytes;
|
|
unsigned long pBytes;
|
|
unsigned char *pData;
|
|
unsigned long outBytes;
|
|
unsigned char *outData;
|
|
} MOD_RRMODP_REQ;
|
|
|
|
#define NUM_MM_RRMODP_DESC (1)
|
|
#define DPD_MM_LDCTX_RRMODP_ULCTX_GROUP (0x5300)
|
|
|
|
#define DPD_MM_LDCTX_RRMODP_ULCTX (DPD_MM_LDCTX_RRMODP_ULCTX_GROUP + 0)
|
|
|
|
|
|
|
|
|
|
/*
|
|
* MOD_2OP_REQ
|
|
*
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
COMMON_REQ_PREAMBLE
|
|
unsigned long bDataBytes;
|
|
unsigned char *bData;
|
|
unsigned long aDataBytes;
|
|
unsigned char *aData;
|
|
unsigned long modBytes;
|
|
unsigned char *modData;
|
|
unsigned long outBytes;
|
|
unsigned char *outData;
|
|
} MOD_2OP_REQ;
|
|
|
|
#define NUM_MOD_2OP_DESC (52)
|
|
#define DPD_MOD_LDCTX_2OP_ULCTX_GROUP (0x5400)
|
|
|
|
#define DPD_MOD_LDCTX_MUL1_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 0)
|
|
#define DPD_MOD_LDCTX_MUL2_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 1)
|
|
#define DPD_MOD_LDCTX_ADD_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 2)
|
|
#define DPD_MOD_LDCTX_SUB_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 3)
|
|
|
|
/* equivalents for obsolete names */
|
|
#define DPD_MM_LDCTX_MUL1_ULCTX DPD_MOD_LDCTX_MUL1_ULCTX
|
|
#define DPD_MM_LDCTX_MUL2_ULCTX DPD_MOD_LDCTX_MUL2_ULCTX
|
|
#define DPD_MM_LDCTX_ADD_ULCTX DPD_MOD_LDCTX_ADD_ULCTX
|
|
#define DPD_MM_LDCTX_SUB_ULCTX DPD_MOD_LDCTX_SUB_ULCTX
|
|
|
|
/* These constants will likely be removed in a future release in favor */
|
|
/* of a different internal register allocation scheme */
|
|
#define DPD_POLY_LDCTX_A0_B0_MUL1_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 4)
|
|
#define DPD_POLY_LDCTX_A0_B0_MUL2_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 5)
|
|
#define DPD_POLY_LDCTX_A0_B0_ADD_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 6)
|
|
#define DPD_POLY_LDCTX_A1_B0_MUL1_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 7)
|
|
#define DPD_POLY_LDCTX_A1_B0_MUL2_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 8)
|
|
#define DPD_POLY_LDCTX_A1_B0_ADD_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 9)
|
|
#define DPD_POLY_LDCTX_A2_B0_MUL1_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 10)
|
|
#define DPD_POLY_LDCTX_A2_B0_MUL2_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 11)
|
|
#define DPD_POLY_LDCTX_A2_B0_ADD_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 12)
|
|
#define DPD_POLY_LDCTX_A3_B0_MUL1_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 13)
|
|
#define DPD_POLY_LDCTX_A3_B0_MUL2_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 14)
|
|
#define DPD_POLY_LDCTX_A3_B0_ADD_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 15)
|
|
#define DPD_POLY_LDCTX_A0_B1_MUL1_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 16)
|
|
#define DPD_POLY_LDCTX_A0_B1_MUL2_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 17)
|
|
#define DPD_POLY_LDCTX_A0_B1_ADD_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 18)
|
|
#define DPD_POLY_LDCTX_A1_B1_MUL1_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 19)
|
|
#define DPD_POLY_LDCTX_A1_B1_MUL2_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 20)
|
|
#define DPD_POLY_LDCTX_A1_B1_ADD_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 21)
|
|
#define DPD_POLY_LDCTX_A2_B1_MUL1_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 22)
|
|
#define DPD_POLY_LDCTX_A2_B1_MUL2_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 23)
|
|
#define DPD_POLY_LDCTX_A2_B1_ADD_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 24)
|
|
#define DPD_POLY_LDCTX_A3_B1_MUL1_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 25)
|
|
#define DPD_POLY_LDCTX_A3_B1_MUL2_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 26)
|
|
#define DPD_POLY_LDCTX_A3_B1_ADD_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 27)
|
|
#define DPD_POLY_LDCTX_A0_B2_MUL1_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 28)
|
|
#define DPD_POLY_LDCTX_A0_B2_MUL2_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 29)
|
|
#define DPD_POLY_LDCTX_A0_B2_ADD_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 30)
|
|
#define DPD_POLY_LDCTX_A1_B2_MUL1_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 31)
|
|
#define DPD_POLY_LDCTX_A1_B2_MUL2_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 32)
|
|
#define DPD_POLY_LDCTX_A1_B2_ADD_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 33)
|
|
#define DPD_POLY_LDCTX_A2_B2_MUL1_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 34)
|
|
#define DPD_POLY_LDCTX_A2_B2_MUL2_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 35)
|
|
#define DPD_POLY_LDCTX_A2_B2_ADD_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 36)
|
|
#define DPD_POLY_LDCTX_A3_B2_MUL1_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 37)
|
|
#define DPD_POLY_LDCTX_A3_B2_MUL2_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 38)
|
|
#define DPD_POLY_LDCTX_A3_B2_ADD_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 39)
|
|
#define DPD_POLY_LDCTX_A0_B3_MUL1_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 40)
|
|
#define DPD_POLY_LDCTX_A0_B3_MUL2_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 41)
|
|
#define DPD_POLY_LDCTX_A0_B3_ADD_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 42)
|
|
#define DPD_POLY_LDCTX_A1_B3_MUL1_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 43)
|
|
#define DPD_POLY_LDCTX_A1_B3_MUL2_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 44)
|
|
#define DPD_POLY_LDCTX_A1_B3_ADD_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 45)
|
|
#define DPD_POLY_LDCTX_A2_B3_MUL1_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 46)
|
|
#define DPD_POLY_LDCTX_A2_B3_MUL2_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 47)
|
|
#define DPD_POLY_LDCTX_A2_B3_ADD_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 48)
|
|
#define DPD_POLY_LDCTX_A3_B3_MUL1_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 49)
|
|
#define DPD_POLY_LDCTX_A3_B3_MUL2_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 50)
|
|
#define DPD_POLY_LDCTX_A3_B3_ADD_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 51)
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
* ECC_POINT_REQ - elliptic curve point processing
|
|
*
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
COMMON_REQ_PREAMBLE
|
|
unsigned long nDataBytes;
|
|
unsigned char *nData;
|
|
unsigned long eDataBytes;
|
|
unsigned char *eData;
|
|
unsigned long buildDataBytes;
|
|
unsigned char *buildData;
|
|
unsigned long b1DataBytes;
|
|
unsigned char *b1Data;
|
|
unsigned long b2DataBytes;
|
|
unsigned char *b2Data;
|
|
unsigned long b3DataBytes;
|
|
unsigned char *b3Data;
|
|
} ECC_POINT_REQ;
|
|
|
|
#define NUM_EC_POINT_DESC (8)
|
|
#define DPD_EC_LDCTX_kP_ULCTX_GROUP (0x5800)
|
|
|
|
#define DPD_EC_FP_AFF_PT_MULT (DPD_EC_LDCTX_kP_ULCTX_GROUP + 0)
|
|
#define DPD_EC_FP_PROJ_PT_MULT (DPD_EC_LDCTX_kP_ULCTX_GROUP + 1)
|
|
#define DPD_EC_F2M_AFF_PT_MULT (DPD_EC_LDCTX_kP_ULCTX_GROUP + 2)
|
|
#define DPD_EC_F2M_PROJ_PT_MULT (DPD_EC_LDCTX_kP_ULCTX_GROUP + 3)
|
|
#define DPD_EC_FP_LDCTX_ADD_ULCTX (DPD_EC_LDCTX_kP_ULCTX_GROUP + 4)
|
|
#define DPD_EC_FP_LDCTX_DOUBLE_ULCTX (DPD_EC_LDCTX_kP_ULCTX_GROUP + 5)
|
|
#define DPD_EC_F2M_LDCTX_ADD_ULCTX (DPD_EC_LDCTX_kP_ULCTX_GROUP + 6)
|
|
#define DPD_EC_F2M_LDCTX_DOUBLE_ULCTX (DPD_EC_LDCTX_kP_ULCTX_GROUP + 7)
|
|
|
|
/* legacy name definitions */
|
|
#define DPD_EC_FP_AFF_LDCTX_kP_ULCTX DPD_EC_FP_AFF_PT_MULT
|
|
#define DPD_EC_FP_PROJ_LDCTX_kP_ULCTX DPD_EC_FP_PROJ_PT_MULT
|
|
#define DPD_EC_F2M_AFF_LDCTX_kP_ULCTX DPD_EC_F2M_AFF_PT_MULT
|
|
#define DPD_EC_F2M_PROJ_LDCTX_kP_ULCTX DPD_EC_F2M_PROJ_PT_MULT
|
|
|
|
|
|
|
|
/*
|
|
* ECC_2OP_REQ - F2M elliptic curve operations
|
|
*
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
COMMON_REQ_PREAMBLE
|
|
unsigned long bDataBytes;
|
|
unsigned char *bData;
|
|
unsigned long aDataBytes;
|
|
unsigned char *aData;
|
|
unsigned long modBytes;
|
|
unsigned char *modData;
|
|
unsigned long outBytes;
|
|
unsigned char *outData;
|
|
} ECC_2OP_REQ;
|
|
|
|
#define NUM_EC_2OP_DESC (1)
|
|
#define DPD_EC_2OP_GROUP (0x5900)
|
|
|
|
#define DPD_EC_F2M_LDCTX_MUL1_ULCTX (DPD_EC_2OP_GROUP + 0)
|
|
|
|
|
|
|
|
/*
|
|
* ECC_SPKBUILD_REQ - elliptic curve request builder
|
|
*
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
COMMON_REQ_PREAMBLE
|
|
unsigned long a0DataBytes;
|
|
unsigned char *a0Data;
|
|
unsigned long a1DataBytes;
|
|
unsigned char *a1Data;
|
|
unsigned long a2DataBytes;
|
|
unsigned char *a2Data;
|
|
unsigned long a3DataBytes;
|
|
unsigned char *a3Data;
|
|
unsigned long b0DataBytes;
|
|
unsigned char *b0Data;
|
|
unsigned long b1DataBytes;
|
|
unsigned char *b1Data;
|
|
unsigned long buildDataBytes;
|
|
unsigned char *buildData;
|
|
} ECC_SPKBUILD_REQ;
|
|
|
|
#define NUM_EC_SPKBUILD_DESC (1)
|
|
#define DPD_EC_SPKBUILD_GROUP (0x5c00)
|
|
|
|
#define DPD_EC_SPKBUILD (DPD_EC_SPKBUILD_GROUP + 0)
|
|
|
|
|
|
|
|
|
|
/*
|
|
* ECC_PTADD_DBL_REQ - elliptic curve point add
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
COMMON_REQ_PREAMBLE
|
|
unsigned long modBytes;
|
|
unsigned char *modData;
|
|
unsigned long buildDataBytes;
|
|
unsigned char *buildData;
|
|
unsigned long b2InDataBytes;
|
|
unsigned char *b2InData;
|
|
unsigned long b3InDataBytes;
|
|
unsigned char *b3InData;
|
|
unsigned long b1DataBytes;
|
|
unsigned char *b1Data;
|
|
unsigned long b2DataBytes;
|
|
unsigned char *b2Data;
|
|
unsigned long b3DataBytes;
|
|
unsigned char *b3Data;
|
|
} ECC_PTADD_DBL_REQ;
|
|
|
|
#define NUM_EC_PTADD_DBL_DESC (4)
|
|
#define DPD_EC_PTADD_DBL_GROUP (0x5d00)
|
|
|
|
#define DPD_EC_FPADD (DPD_EC_PTADD_DBL_GROUP + 0)
|
|
#define DPD_EC_FPDBL (DPD_EC_PTADD_DBL_GROUP + 0)
|
|
#define DPD_EC_F2MADD (DPD_EC_PTADD_DBL_GROUP + 0)
|
|
#define DPD_EC_F2MDBL (DPD_EC_PTADD_DBL_GROUP + 0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
* IPSEC_CBC_REQ - common IPSec/DES-CBC compound request operations
|
|
*
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
COMMON_REQ_PREAMBLE
|
|
unsigned long hashKeyBytes;
|
|
unsigned char *hashKeyData;
|
|
unsigned long cryptKeyBytes;
|
|
unsigned char *cryptKeyData;
|
|
unsigned long cryptCtxInBytes;
|
|
unsigned char *cryptCtxInData;
|
|
unsigned long hashInDataBytes;
|
|
unsigned char *hashInData;
|
|
unsigned long inDataBytes;
|
|
unsigned char *inData;
|
|
unsigned char *cryptDataOut;
|
|
unsigned long hashDataOutBytes;
|
|
unsigned char *hashDataOut;
|
|
} IPSEC_CBC_REQ;
|
|
|
|
#define NUM_IPSEC_CBC_DESC (24)
|
|
#define DPD_IPSEC_CBC_GROUP (0x7000)
|
|
|
|
#define DPD_IPSEC_CBC_SDES_ENCRYPT_MD5_PAD (DPD_IPSEC_CBC_GROUP + 0)
|
|
#define DPD_IPSEC_CBC_SDES_ENCRYPT_SHA_PAD (DPD_IPSEC_CBC_GROUP + 1)
|
|
#define DPD_IPSEC_CBC_SDES_ENCRYPT_SHA256_PAD (DPD_IPSEC_CBC_GROUP + 2)
|
|
#define DPD_IPSEC_CBC_SDES_DECRYPT_MD5_PAD (DPD_IPSEC_CBC_GROUP + 3)
|
|
#define DPD_IPSEC_CBC_SDES_DECRYPT_SHA_PAD (DPD_IPSEC_CBC_GROUP + 4)
|
|
#define DPD_IPSEC_CBC_SDES_DECRYPT_SHA256_PAD (DPD_IPSEC_CBC_GROUP + 5)
|
|
#define DPD_IPSEC_CBC_TDES_ENCRYPT_MD5_PAD (DPD_IPSEC_CBC_GROUP + 6)
|
|
#define DPD_IPSEC_CBC_TDES_ENCRYPT_SHA_PAD (DPD_IPSEC_CBC_GROUP + 7)
|
|
#define DPD_IPSEC_CBC_TDES_ENCRYPT_SHA256_PAD (DPD_IPSEC_CBC_GROUP + 8)
|
|
#define DPD_IPSEC_CBC_TDES_DECRYPT_MD5_PAD (DPD_IPSEC_CBC_GROUP + 9)
|
|
#define DPD_IPSEC_CBC_TDES_DECRYPT_SHA_PAD (DPD_IPSEC_CBC_GROUP + 10)
|
|
#define DPD_IPSEC_CBC_TDES_DECRYPT_SHA256_PAD (DPD_IPSEC_CBC_GROUP + 11)
|
|
|
|
/* All "standard" legacy request types will autopad, no reason */
|
|
/* to do otherwise */
|
|
#define DPD_IPSEC_CBC_SDES_ENCRYPT_MD5 DPD_IPSEC_CBC_SDES_ENCRYPT_MD5_PAD
|
|
#define DPD_IPSEC_CBC_SDES_ENCRYPT_SHA DPD_IPSEC_CBC_SDES_ENCRYPT_SHA_PAD
|
|
#define DPD_IPSEC_CBC_SDES_ENCRYPT_SHA256 DPD_IPSEC_CBC_SDES_ENCRYPT_SHA256_PAD
|
|
#define DPD_IPSEC_CBC_SDES_DECRYPT_MD5 DPD_IPSEC_CBC_SDES_DECRYPT_MD5_PAD
|
|
#define DPD_IPSEC_CBC_SDES_DECRYPT_SHA DPD_IPSEC_CBC_SDES_DECRYPT_SHA_PAD
|
|
#define DPD_IPSEC_CBC_SDES_DECRYPT_SHA256 DPD_IPSEC_CBC_SDES_DECRYPT_SHA256_PAD
|
|
#define DPD_IPSEC_CBC_TDES_ENCRYPT_MD5 DPD_IPSEC_CBC_TDES_ENCRYPT_MD5_PAD
|
|
#define DPD_IPSEC_CBC_TDES_ENCRYPT_SHA DPD_IPSEC_CBC_TDES_ENCRYPT_SHA_PAD
|
|
#define DPD_IPSEC_CBC_TDES_ENCRYPT_SHA256 DPD_IPSEC_CBC_TDES_ENCRYPT_SHA256_PAD
|
|
#define DPD_IPSEC_CBC_TDES_DECRYPT_MD5 DPD_IPSEC_CBC_TDES_DECRYPT_MD5_PAD
|
|
#define DPD_IPSEC_CBC_TDES_DECRYPT_SHA DPD_IPSEC_CBC_TDES_DECRYPT_SHA_PAD
|
|
#define DPD_IPSEC_CBC_TDES_DECRYPT_SHA256 DPD_IPSEC_CBC_TDES_DECRYPT_SHA256_PAD
|
|
|
|
|
|
|
|
/*
|
|
* IPSEC_ECB_REQ - common IPSec/DES-ECB compound request operations
|
|
*
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
COMMON_REQ_PREAMBLE
|
|
unsigned long hashKeyBytes;
|
|
unsigned char *hashKeyData;
|
|
unsigned long cryptKeyBytes;
|
|
unsigned char *cryptKeyData;
|
|
unsigned long hashInDataBytes;
|
|
unsigned char *hashInData;
|
|
unsigned long inDataBytes;
|
|
unsigned char *inData;
|
|
unsigned long hashDataOutBytes;
|
|
unsigned char *hashDataOut;
|
|
unsigned char *cryptDataOut;
|
|
} IPSEC_ECB_REQ;
|
|
|
|
#define NUM_IPSEC_ECB_DESC (24)
|
|
#define DPD_IPSEC_ECB_GROUP (0x7100)
|
|
|
|
#define DPD_IPSEC_ECB_SDES_ENCRYPT_MD5_PAD (DPD_IPSEC_ECB_GROUP + 0)
|
|
#define DPD_IPSEC_ECB_SDES_ENCRYPT_SHA_PAD (DPD_IPSEC_ECB_GROUP + 1)
|
|
#define DPD_IPSEC_ECB_SDES_ENCRYPT_SHA256_PAD (DPD_IPSEC_ECB_GROUP + 2)
|
|
#define DPD_IPSEC_ECB_SDES_DECRYPT_MD5_PAD (DPD_IPSEC_ECB_GROUP + 3)
|
|
#define DPD_IPSEC_ECB_SDES_DECRYPT_SHA_PAD (DPD_IPSEC_ECB_GROUP + 4)
|
|
#define DPD_IPSEC_ECB_SDES_DECRYPT_SHA256_PAD (DPD_IPSEC_ECB_GROUP + 5)
|
|
#define DPD_IPSEC_ECB_TDES_ENCRYPT_MD5_PAD (DPD_IPSEC_ECB_GROUP + 6)
|
|
#define DPD_IPSEC_ECB_TDES_ENCRYPT_SHA_PAD (DPD_IPSEC_ECB_GROUP + 7)
|
|
#define DPD_IPSEC_ECB_TDES_ENCRYPT_SHA256_PAD (DPD_IPSEC_ECB_GROUP + 8)
|
|
#define DPD_IPSEC_ECB_TDES_DECRYPT_MD5_PAD (DPD_IPSEC_ECB_GROUP + 9)
|
|
#define DPD_IPSEC_ECB_TDES_DECRYPT_SHA_PAD (DPD_IPSEC_ECB_GROUP + 10)
|
|
#define DPD_IPSEC_ECB_TDES_DECRYPT_SHA256_PAD (DPD_IPSEC_ECB_GROUP + 11)
|
|
|
|
#define DPD_IPSEC_ECB_SDES_ENCRYPT_MD5 DPD_IPSEC_ECB_SDES_ENCRYPT_MD5_PAD
|
|
#define DPD_IPSEC_ECB_SDES_ENCRYPT_SHA DPD_IPSEC_ECB_SDES_ENCRYPT_SHA_PAD
|
|
#define DPD_IPSEC_ECB_SDES_ENCRYPT_SHA256 DPD_IPSEC_ECB_SDES_ENCRYPT_SHA256_PAD
|
|
#define DPD_IPSEC_ECB_SDES_DECRYPT_MD5 DPD_IPSEC_ECB_SDES_DECRYPT_MD5_PAD
|
|
#define DPD_IPSEC_ECB_SDES_DECRYPT_SHA DPD_IPSEC_ECB_SDES_DECRYPT_SHA_PAD
|
|
#define DPD_IPSEC_ECB_SDES_DECRYPT_SHA256 DPD_IPSEC_ECB_SDES_DECRYPT_SHA256_PAD
|
|
#define DPD_IPSEC_ECB_TDES_ENCRYPT_MD5 DPD_IPSEC_ECB_TDES_ENCRYPT_MD5_PAD
|
|
#define DPD_IPSEC_ECB_TDES_ENCRYPT_SHA DPD_IPSEC_ECB_TDES_ENCRYPT_SHA_PAD
|
|
#define DPD_IPSEC_ECB_TDES_ENCRYPT_SHA256 DPD_IPSEC_ECB_TDES_ENCRYPT_SHA256_PAD
|
|
#define DPD_IPSEC_ECB_TDES_DECRYPT_MD5 DPD_IPSEC_ECB_TDES_DECRYPT_MD5_PAD
|
|
#define DPD_IPSEC_ECB_TDES_DECRYPT_SHA DPD_IPSEC_ECB_TDES_DECRYPT_SHA_PAD
|
|
#define DPD_IPSEC_ECB_TDES_DECRYPT_SHA256 DPD_IPSEC_ECB_TDES_DECRYPT_SHA256_PAD
|
|
|
|
|
|
|
|
/*
|
|
* IPSEC_AES_CBC_REQ - common IPSec/AES-CBC compound request operations
|
|
*
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
COMMON_REQ_PREAMBLE
|
|
unsigned long hashKeyBytes;
|
|
unsigned char *hashKeyData;
|
|
unsigned long cryptKeyBytes;
|
|
unsigned char *cryptKeyData;
|
|
unsigned long cryptCtxInBytes;
|
|
unsigned char *cryptCtxInData;
|
|
unsigned long hashInDataBytes;
|
|
unsigned char *hashInData;
|
|
unsigned long inDataBytes;
|
|
unsigned char *inData;
|
|
unsigned char *cryptDataOut;
|
|
unsigned long hashDataOutBytes;
|
|
unsigned char *hashDataOut;
|
|
} IPSEC_AES_CBC_REQ;
|
|
|
|
#define NUM_IPSEC_AES_CBC_DESC (12)
|
|
#define DPD_IPSEC_AES_CBC_GROUP (0x8000)
|
|
|
|
#define DPD_IPSEC_AES_CBC_ENCRYPT_MD5_APAD (DPD_IPSEC_AES_CBC_GROUP + 0)
|
|
#define DPD_IPSEC_AES_CBC_ENCRYPT_SHA_APAD (DPD_IPSEC_AES_CBC_GROUP + 1)
|
|
#define DPD_IPSEC_AES_CBC_ENCRYPT_SHA256_APAD (DPD_IPSEC_AES_CBC_GROUP + 2)
|
|
#define DPD_IPSEC_AES_CBC_ENCRYPT_MD5 (DPD_IPSEC_AES_CBC_GROUP + 3)
|
|
#define DPD_IPSEC_AES_CBC_ENCRYPT_SHA (DPD_IPSEC_AES_CBC_GROUP + 4)
|
|
#define DPD_IPSEC_AES_CBC_ENCRYPT_SHA256 (DPD_IPSEC_AES_CBC_GROUP + 5)
|
|
#define DPD_IPSEC_AES_CBC_DECRYPT_MD5_APAD (DPD_IPSEC_AES_CBC_GROUP + 6)
|
|
#define DPD_IPSEC_AES_CBC_DECRYPT_SHA_APAD (DPD_IPSEC_AES_CBC_GROUP + 7)
|
|
#define DPD_IPSEC_AES_CBC_DECRYPT_SHA256_APAD (DPD_IPSEC_AES_CBC_GROUP + 8)
|
|
#define DPD_IPSEC_AES_CBC_DECRYPT_MD5 (DPD_IPSEC_AES_CBC_GROUP + 9)
|
|
#define DPD_IPSEC_AES_CBC_DECRYPT_SHA (DPD_IPSEC_AES_CBC_GROUP + 10)
|
|
#define DPD_IPSEC_AES_CBC_DECRYPT_SHA256 (DPD_IPSEC_AES_CBC_GROUP + 11)
|
|
|
|
|
|
|
|
/*
|
|
* IPSEC_AES_ECB_REQ - common IPSec/AES-ECB compound request operations
|
|
*
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
COMMON_REQ_PREAMBLE
|
|
unsigned long hashKeyBytes;
|
|
unsigned char *hashKeyData;
|
|
unsigned long cryptKeyBytes;
|
|
unsigned char *cryptKeyData;
|
|
unsigned long hashInDataBytes;
|
|
unsigned char *hashInData;
|
|
unsigned long inDataBytes;
|
|
unsigned char *inData;
|
|
unsigned char *cryptDataOut;
|
|
unsigned long hashDataOutBytes;
|
|
unsigned char *hashDataOut;
|
|
} IPSEC_AES_ECB_REQ;
|
|
|
|
#define NUM_IPSEC_AES_ECB_DESC (12)
|
|
#define DPD_IPSEC_AES_ECB_GROUP (0x8100)
|
|
|
|
#define DPD_IPSEC_AES_ECB_ENCRYPT_MD5_APAD (DPD_IPSEC_AES_ECB_GROUP + 0)
|
|
#define DPD_IPSEC_AES_ECB_ENCRYPT_SHA_APAD (DPD_IPSEC_AES_ECB_GROUP + 1)
|
|
#define DPD_IPSEC_AES_ECB_ENCRYPT_SHA256_APAD (DPD_IPSEC_AES_ECB_GROUP + 2)
|
|
#define DPD_IPSEC_AES_ECB_ENCRYPT_MD5 (DPD_IPSEC_AES_ECB_GROUP + 3)
|
|
#define DPD_IPSEC_AES_ECB_ENCRYPT_SHA (DPD_IPSEC_AES_ECB_GROUP + 4)
|
|
#define DPD_IPSEC_AES_ECB_ENCRYPT_SHA256 (DPD_IPSEC_AES_ECB_GROUP + 5)
|
|
#define DPD_IPSEC_AES_ECB_DECRYPT_MD5_APAD (DPD_IPSEC_AES_ECB_GROUP + 6)
|
|
#define DPD_IPSEC_AES_ECB_DECRYPT_SHA_APAD (DPD_IPSEC_AES_ECB_GROUP + 7)
|
|
#define DPD_IPSEC_AES_ECB_DECRYPT_SHA256_APAD (DPD_IPSEC_AES_ECB_GROUP + 8)
|
|
#define DPD_IPSEC_AES_ECB_DECRYPT_MD5 (DPD_IPSEC_AES_ECB_GROUP + 9)
|
|
#define DPD_IPSEC_AES_ECB_DECRYPT_SHA (DPD_IPSEC_AES_ECB_GROUP + 10)
|
|
#define DPD_IPSEC_AES_ECB_DECRYPT_SHA256 (DPD_IPSEC_AES_ECB_GROUP + 11)
|
|
|
|
|
|
|
|
|
|
/*
|
|
* IPSEC_ESP_REQ - IPSec Encapsulated system payload compound operations
|
|
*
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
COMMON_REQ_PREAMBLE
|
|
unsigned long hashKeyBytes;
|
|
unsigned char *hashKeyData;
|
|
unsigned long cryptKeyBytes;
|
|
unsigned char *cryptKeyData;
|
|
unsigned long cryptCtxInBytes;
|
|
unsigned char *cryptCtxInData;
|
|
unsigned long hashInDataBytes;
|
|
unsigned char *hashInData;
|
|
unsigned long inDataBytes;
|
|
unsigned char *inData;
|
|
unsigned char *cryptDataOut;
|
|
unsigned long hashDataOutBytes; /* out ICV is always at the end of cryptDataOut */
|
|
unsigned long cryptCtxOutBytes;
|
|
unsigned char *cryptCtxOutData;
|
|
} IPSEC_ESP_REQ;
|
|
|
|
#define NUM_IPSEC_ESP_DESC (24)
|
|
#define DPD_IPSEC_ESP_GROUP (0x7500)
|
|
|
|
#define DPD_IPSEC_ESP_OUT_SDES_ECB_CRPT_MD5_PAD (DPD_IPSEC_ESP_GROUP + 0)
|
|
#define DPD_IPSEC_ESP_OUT_SDES_ECB_CRPT_SHA_PAD (DPD_IPSEC_ESP_GROUP + 1)
|
|
#define DPD_IPSEC_ESP_OUT_SDES_ECB_CRPT_SHA256_PAD (DPD_IPSEC_ESP_GROUP + 2)
|
|
#define DPD_IPSEC_ESP_IN_SDES_ECB_DCRPT_MD5_PAD (DPD_IPSEC_ESP_GROUP + 3)
|
|
#define DPD_IPSEC_ESP_IN_SDES_ECB_DCRPT_SHA_PAD (DPD_IPSEC_ESP_GROUP + 4)
|
|
#define DPD_IPSEC_ESP_IN_SDES_ECB_DCRPT_SHA256_PAD (DPD_IPSEC_ESP_GROUP + 5)
|
|
#define DPD_IPSEC_ESP_OUT_SDES_CBC_CRPT_MD5_PAD (DPD_IPSEC_ESP_GROUP + 6)
|
|
#define DPD_IPSEC_ESP_OUT_SDES_CBC_CRPT_SHA_PAD (DPD_IPSEC_ESP_GROUP + 7)
|
|
#define DPD_IPSEC_ESP_OUT_SDES_CBC_CRPT_SHA256_PAD (DPD_IPSEC_ESP_GROUP + 8)
|
|
#define DPD_IPSEC_ESP_IN_SDES_CBC_DCRPT_MD5_PAD (DPD_IPSEC_ESP_GROUP + 9)
|
|
#define DPD_IPSEC_ESP_IN_SDES_CBC_DCRPT_SHA_PAD (DPD_IPSEC_ESP_GROUP + 10)
|
|
#define DPD_IPSEC_ESP_IN_SDES_CBC_DCRPT_SHA256_PAD (DPD_IPSEC_ESP_GROUP + 11)
|
|
#define DPD_IPSEC_ESP_OUT_TDES_CBC_CRPT_MD5_PAD (DPD_IPSEC_ESP_GROUP + 12)
|
|
#define DPD_IPSEC_ESP_OUT_TDES_CBC_CRPT_SHA_PAD (DPD_IPSEC_ESP_GROUP + 13)
|
|
#define DPD_IPSEC_ESP_OUT_TDES_CBC_CRPT_SHA256_PAD (DPD_IPSEC_ESP_GROUP + 14)
|
|
#define DPD_IPSEC_ESP_IN_TDES_CBC_DCRPT_MD5_PAD (DPD_IPSEC_ESP_GROUP + 15)
|
|
#define DPD_IPSEC_ESP_IN_TDES_CBC_DCRPT_SHA_PAD (DPD_IPSEC_ESP_GROUP + 16)
|
|
#define DPD_IPSEC_ESP_IN_TDES_CBC_DCRPT_SHA256_PAD (DPD_IPSEC_ESP_GROUP + 17)
|
|
#define DPD_IPSEC_ESP_OUT_TDES_ECB_CRPT_MD5_PAD (DPD_IPSEC_ESP_GROUP + 18)
|
|
#define DPD_IPSEC_ESP_OUT_TDES_ECB_CRPT_SHA_PAD (DPD_IPSEC_ESP_GROUP + 19)
|
|
#define DPD_IPSEC_ESP_OUT_TDES_ECB_CRPT_SHA256_PAD (DPD_IPSEC_ESP_GROUP + 20)
|
|
#define DPD_IPSEC_ESP_IN_TDES_ECB_DCRPT_MD5_PAD (DPD_IPSEC_ESP_GROUP + 21)
|
|
#define DPD_IPSEC_ESP_IN_TDES_ECB_DCRPT_SHA_PAD (DPD_IPSEC_ESP_GROUP + 22)
|
|
#define DPD_IPSEC_ESP_IN_TDES_ECB_DCRPT_SHA256_PAD (DPD_IPSEC_ESP_GROUP + 23)
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
* CCMP_REQ 802.11 counter mode with CBC MAC protocol operation
|
|
*
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
COMMON_REQ_PREAMBLE
|
|
unsigned long keyBytes;
|
|
unsigned char *keyData;
|
|
unsigned long ctxBytes;
|
|
unsigned char *context;
|
|
unsigned long FrameDataBytes;
|
|
unsigned char *FrameData;
|
|
unsigned long AADBytes;
|
|
unsigned char *AADData;
|
|
unsigned long cryptDataBytes;
|
|
unsigned char *cryptDataOut;
|
|
unsigned long MICBytes;
|
|
unsigned char *MICData;
|
|
} CCMP_REQ;
|
|
|
|
#define NUM_CCMP_DESC (2)
|
|
#define DPD_CCMP_GROUP (0x6500)
|
|
|
|
#define DPD_802_11_CCMP_OUTBOUND (DPD_CCMP_GROUP + 0)
|
|
#define DPD_802_11_CCMP_INBOUND (DPD_CCMP_GROUP + 1)
|
|
|
|
|
|
|
|
/*
|
|
* SRTP_REQ - secure RTP compound operations
|
|
*
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
COMMON_REQ_PREAMBLE
|
|
unsigned long hashKeyBytes;
|
|
unsigned char *hashKeyData;
|
|
unsigned long keyBytes;
|
|
unsigned char *keyData;
|
|
unsigned long ivBytes;
|
|
unsigned char *ivData;
|
|
unsigned long HeaderBytes;
|
|
unsigned long inBytes;
|
|
unsigned char *inData;
|
|
unsigned long ROCBytes;
|
|
unsigned long cryptDataBytes;
|
|
unsigned char *cryptDataOut;
|
|
unsigned long digestBytes;
|
|
unsigned char *digestData;
|
|
unsigned long outIvBytes;
|
|
unsigned char *outIvData;
|
|
} SRTP_REQ;
|
|
|
|
#define NUM_SRTP_DESC (2)
|
|
#define DPD_SRTP_GROUP (0x8500)
|
|
|
|
#define DPD_SRTP_OUTBOUND (DPD_SRTP_GROUP + 0)
|
|
#define DPD_SRTP_INBOUND (DPD_SRTP_GROUP + 1)
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
* TLS request types
|
|
*
|
|
* Note that this differs from many similar types of requests
|
|
* on account that there are significant differences is the needed
|
|
* format for a DPD for each of the different types of TLS packets
|
|
*
|
|
* Since DPD's are built according to a translation table that's
|
|
* determined on a group basis (not on individual requests), and
|
|
* since the DPDs have to be constructed differently for each type
|
|
* of TLS packet/payload, there are individual request structs for
|
|
* each
|
|
*/
|
|
|
|
/*
|
|
* TLS_BLOCK_INBOUND_REQ - SSL/TLS block cipher inbound operation
|
|
* This is a 2.1 request type only
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
COMMON_REQ_PREAMBLE
|
|
unsigned long hashKeyBytes;
|
|
unsigned char* hashKeyData;
|
|
unsigned long hashOnlyBytes;
|
|
unsigned char* hashOnlyData;
|
|
unsigned long ivBytes;
|
|
unsigned char* ivData;
|
|
unsigned long cipherKeyBytes;
|
|
unsigned char* cipherKeyData;
|
|
unsigned long inBytes;
|
|
unsigned char* inData;
|
|
unsigned long MACcmpBytes;
|
|
unsigned long outBytes;
|
|
unsigned char* outData;
|
|
unsigned long MACoutBytes;
|
|
unsigned long ivOutBytes;
|
|
unsigned char* ivOutData;
|
|
|
|
} TLS_BLOCK_INBOUND_REQ;
|
|
|
|
#define NUM_TLS_BLOCK_INBOUND_DESC (1)
|
|
#define DPD_TLS_BLOCK_INBOUND_GROUP (0x9000)
|
|
|
|
#define DPD_TLS_BLOCK_INBOUND (DPD_TLS_BLOCK_INBOUND_GROUP)
|
|
|
|
|
|
|
|
/*
|
|
* TLS_BLOCK_OUTBOUND_REQ - SSL/TLS block cipher outbound operation
|
|
* This is a 2.1 request type only
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
COMMON_REQ_PREAMBLE
|
|
unsigned long hashKeyBytes;
|
|
unsigned char* hashKeyData;
|
|
unsigned long ivBytes;
|
|
unsigned char* ivData;
|
|
unsigned long cipherKeyBytes;
|
|
unsigned char* cipherKeyData;
|
|
unsigned long hashOnlyBytes;
|
|
unsigned char* hashOnlyData;
|
|
unsigned long mainDataBytes;
|
|
unsigned long outBytes;
|
|
unsigned char* outData;
|
|
unsigned long MACbytes;
|
|
unsigned long cipherOnlyBytes;
|
|
unsigned char* cipherOnlyData;
|
|
unsigned long ivOutBytes;
|
|
unsigned char* ivOutData;
|
|
|
|
} TLS_BLOCK_OUTBOUND_REQ;
|
|
|
|
#define NUM_TLS_BLOCK_OUTBOUND_DESC (1)
|
|
#define DPD_TLS_BLOCK_OUTBOUND_GROUP (0x9100)
|
|
#define DPD_TLS_BLOCK_OUTBOUND (DPD_TLS_BLOCK_OUTBOUND_GROUP)
|
|
|
|
|
|
/*
|
|
* TLS_STREAM_INBOUND_REQ - SSL/TLS stream cipher inbound operation
|
|
* This is a 2.1 request type only
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
COMMON_REQ_PREAMBLE
|
|
unsigned long hashKeyBytes;
|
|
unsigned char* hashKeyData;
|
|
unsigned long hashOnlyBytes;
|
|
unsigned char* hashOnlyData;
|
|
unsigned long ivBytes;
|
|
unsigned char* ivData;
|
|
unsigned long cipherKeyBytes;
|
|
unsigned char* cipherKeyData;
|
|
unsigned long inBytes;
|
|
unsigned char* inData;
|
|
unsigned long MACcmpBytes;
|
|
unsigned long outBytes;
|
|
unsigned char* outData;
|
|
unsigned long MACoutBytes;
|
|
unsigned long ivOutBytes;
|
|
unsigned char* ivOutData;
|
|
|
|
} TLS_STREAM_INBOUND_REQ;
|
|
|
|
#define NUM_TLS_STREAM_INBOUND_DESC (1)
|
|
#define DPD_TLS_STREAM_INBOUND_GROUP (0x9200)
|
|
|
|
#define DPD_TLS_STREAM_INBOUND (DPD_TLS_STREAM_INBOUND_GROUP)
|
|
|
|
|
|
|
|
|
|
/*
|
|
* TLS_STREAM_OUTBOUND_REQ - SSL/TLS stream cipher outbound operation
|
|
* This is a 2.1 request type only
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
COMMON_REQ_PREAMBLE
|
|
unsigned long hashKeyBytes;
|
|
unsigned char* hashKeyData;
|
|
unsigned long ivBytes;
|
|
unsigned char* ivData;
|
|
unsigned long cipherKeyBytes;
|
|
unsigned char* cipherKeyData;
|
|
unsigned long hashOnlyBytes;
|
|
unsigned char* hashOnlyData;
|
|
unsigned long mainDataBytes;
|
|
unsigned long outBytes;
|
|
unsigned char* outData;
|
|
unsigned long MACbytes;
|
|
unsigned long ivOutBytes;
|
|
unsigned char* ivOutData;
|
|
|
|
} TLS_STREAM_OUTBOUND_REQ;
|
|
|
|
#define NUM_TLS_STREAM_OUTBOUND_DESC (1)
|
|
#define DPD_TLS_STREAM_OUTBOUND_GROUP (0x9300)
|
|
|
|
#define DPD_TLS_STREAM_OUTBOUND (DPD_TLS_STREAM_OUTBOUND_GROUP)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef _cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* SEC2_H */
|