Files
m241Neelima/components/ip_net2-6.9/ipfreescale/sec2/1_2/Sec2.h
T
2026-07-30 11:19:44 +05:30

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 */