Files
m241Neelima/components/ip_net2-6.9/ipfreescale/sec4/Sec4.h
T
2026-07-30 11:19:44 +05:30

1384 lines
46 KiB
C

/*
******************************************************************************
* SOURCE FILE
*
* Document no: @(#) $Name: VXWORKS_ITER40_2019102207 $ $RCSfile: Sec4.h,v $ $Revision: 1.5 $
* $Source: /home/interpeak/CVSRoot/ipfreescale/sec4/Sec4.h,v $
* $Author: dhessing $
* $State: Exp $ $Locker: $
*
* INTERPEAK_COPYRIGHT_STRING
******************************************************************************
*/
/*
****************************************************************************
* 1 DESCRIPTION
****************************************************************************
*/
/****************************************************************************
* Sec4.h - Top-level driver include file for SEC4 security processor.
* Based on Sec2.h 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 Mar 11,2011 - Based on Sec2.h ver 1.2
*/
#ifndef SEC4_H
#define SEC4_H
#include <error_ext.h>
#include <sec_ext.h>
#include <sec_dcl_ext.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 SEC4_PROC_REQ (1) /* Process request */
#define SEC4_GET_STATUS (2) /* Read delayed status */
#define SEC4_IOCTL_INDEX (0x800)
/* Computed IOCTL constants for use */
#define IOCTL_PROC_REQ (SEC4_IOCTL_INDEX + SEC4_PROC_REQ)
#define IOCTL_GET_STATUS (SEC4_IOCTL_INDEX + SEC4_GET_STATUS)
#define vxworksDrvName "/dev/sec4"
/* General error/status codes for ioctl() function returns, and for the */
/* status field of the general-purpose part of the request struct */
#define __ERR_MODULE__ MODULE_SEC
#define SEC4_SUCCESS E_OK
/* Error codes as defined in error_ext.h */
#define SEC4_ERROR(errCode) ERROR_CODE(errCode)
#define SEC4_GET_ERROR_TYPE(errCode) GET_ERROR_TYPE(errCode)
/*static char sec4_error_strings[40][60] = {\*/
static const char *sec4_error_strings[] = {\
/* E_OK = 0 */ "Successful", \
/* Invalid Function Calls */ \
/* E_INVALID_STATE */ "The operation is not allowed in current module state", \
/* E_INVALID_OPERATION */ "The operation/command is invalid (unrecognized)", \
/* E_NOT_SUPPORTED */ "The function is not supported or not implemented", \
/* E_NO_DEVICE */ "The associated device is not initialized.", \
/* Invalid Parameters */ \
/* E_INVALID_HANDLE */ "Invalid handle of module or object.", \
/* E_INVALID_ID */ "Invalid module ID (usually enumeration or index)", \
/* E_NULL_POINTER */ "Unexpected NULL pointer.", \
/* E_INVALID_VALUE */ "Invalid value.", \
/* E_INVALID_SELECTION */ "Invalid selection or mode.", \
/* E_INVALID_COMM_MODE */ "Invalid communication mode.", \
/* E_INVALID_BYTE_ORDER */ "Invalid byte order.", \
/* E_INVALID_MEMORY_TYPE */ "Invalid memory type.", \
/* E_INVALID_INTR_QUEUE */ "Invalid interrupt queue.", \
/* E_INVALID_PRIORITY */ "Invalid priority.", \
/* E_INVALID_CLOCK */ "Invalid clock", \
/* E_INVALID_RATE */ "Invalid rate value", \
/* E_INVALID_ADDRESS */ "Invalid address", \
/* E_INVALID_BUS */ "Invalid bus type", \
/* E_BUS_CONFLICT */ "Bus (or memory) type conflicts with another setting", \
/* E_CONFLICT */ "Some setting conflicts with another setting", \
/* E_NOT_ALIGNED */ "Non-aligned address", \
/* E_NOT_IN_RANGE */ "Parameter value is out of range", \
/* Frame/Buffer Errors */ \
/* E_INVALID_FRAME */ "Invalid frame object (NULL handle or missing buffers)", \
/* E_EMPTY_FRAME */ "Frame object is empty (has no buffers)", \
/* E_EMPTY_BUFFER */ "Buffer object is empty (no data, or zero data length)", \
/* Resource Errors */ \
/* E_NO_MEMORY */ "External memory allocation failed", \
/* E_NOT_FOUND */ "Requested resource or item was not found", \
/* E_NOT_AVAILABLE */ "Resource is unavailable", \
/* E_ALREADY_EXISTS */ "Requested resource or item already exists", \
/* E_FULL */ "Resource is full", \
/* E_EMPTY */ "Resource is empty", \
/* E_BUSY */ "Resource or module is busy", \
/* E_ALREADY_FREE */ "Specified resource or item is already free or deleted", \
/* Read/Write Access Errors */ \
/* E_READ_FAILED */ "Read access failed on memory/device", \
/* E_WRITE_FAILED */ "Write access failed on memory/device", \
/* Send/Receive Failures */ \
/* E_SEND_FAILED */ "Send operation failed on device", \
/* E_RECEIVE_FAILED */ "Receive operation failed on device", \
/* Operation time-out */ \
/* E_TIMEOUT */ "The operation timed out", \
/* SEC4_UNKNOWN_ERROR */ "SEC4_UNKNOWN_ERROR", \
/* SEC4_IO_VXWORKS_DRIVER_TABLE_ADD_ERROR */ "SEC4_IO_VXWORKS_DRIVER_TABLE_ADD_ERROR", \
/* SEC4_VXWORKS_CANNOT_CREATE_QUEUE */ "SEC4_VXWORKS_CANNOT_CREATE_QUEUE", \
/* SEC4_INVALID_ADDRESS */ "SEC4_INVALID_ADDRESS", \
/* SEC4_JQ_NOT_AVAIL */ "SEC4_JQ_NOT_AVAIL" \
/* SEC4_JOB_ERROR */ "SEC4 job completed with an error" \
};
#define SEC4_ERRORTYPE_TO_STR(errCode) sec4_error_strings[errCode];
/* Define other errors than in the freescale driver. Start from last defined value */
/* Driver encountered an unidentfiable condition */
#define SEC4_UNKNOWN_ERROR (E_DUMMY_LAST)
/* System can't attach driver to the OS dispatch table */
#define SEC4_IO_VXWORKS_DRIVER_TABLE_ADD_ERROR (E_DUMMY_LAST + 1)
/* Driver can't initialize message queue */
#define SEC4_VXWORKS_CANNOT_CREATE_QUEUE (E_DUMMY_LAST + 2)
/* User passed a null request pointer to IOCTL_PROC_REQ */
#define SEC4_INVALID_ADDRESS (E_DUMMY_LAST + 3)
/* Selected job queue is not available */
#define SEC4_JQ_NOT_AVAIL (E_DUMMY_LAST + 4)
/* SEC job terminated with error */
#define SEC4_JOB_ERROR (E_DUMMY_LAST + 5)
/* SEC4 Scatter Gather Table Entry */
typedef _Packed struct {
uint32_t reserved:28; /* Always 0 */
uint64_t address:36; /* Address to buffer */
uint8_t ext:1; /* Data is another SGT */
uint8_t final:1; /* This entry is last in this SGT */
uint32_t length:30; /* Length of valid data */
uint8_t reserved2; /* Always 0 */
uint8_t bpid; /* Buffer Pool ID */
uint8_t reserved3:3; /* Always 0 */
uint16_t offset:13; /* Offset to valid data */
} _PackedType t_sec4SgtEntry;
/* "Split keys" are used by SEC4 HMAC to increase performance on crypto operations.
* Required for SEC4 IPsec protocol processing */
#define SEC4_SPLITKEY_MAXSIZE (48)
/* SEC4 IPsec SA cache entry */
typedef struct t_sec4IpsecSa
{
uint32_t spi;
//uint32_t seq; /* TODO */
e_IpsecVer ipsecVer;
uint8_t proto; /* Next header protocol */
e_IpsecMode ipsecMode;
e_IpsecAuthenAlg authAlg;
e_IpsecCryptoAlg cryptoAlg;
t_KeyParam authKey;
t_KeyParam cryptoKey;
e_IpsecArs antiReplaySize;
uint8_t *iv;
t_Handle h_ShrJobDesc; /* Shared job descriptor for this SA */
uint8_t splitKey[SEC4_SPLITKEY_MAXSIZE]; /* Pre computed SEC4 "split key" */
uint8_t splitKeySize;
} t_sec4IpsecSa;
#ifdef SEC4_USE_SHARED_JOB_QUEUE
/* Core-core message passing */
#define SEC4_IPC_STATE_IDLE 0
#define SEC4_IPC_STATE_PENDING 1
#define SEC4_IPC_STATE_DONE 2
typedef struct t_sec4IpcMsg
{
int state;
void *req;
} t_sec4IpcMsg;
#endif
/* DCL options to control job execution */
/* Common options */
#define SEC4_OPT_INDATA_IS_SGT (1 << 0)
#define SEC4_OPT_OUTDATA_IS_SGT (1 << 1)
#define SEC4_DCL_OPT_ICV (1 << 2)
/* Operation specific options. Start at bit 16 */
#define SEC4_DCL_OPT_CRC_IEEE802 (1 << 16)
#define SEC4_DCL_OPT_CRC_IETF3385 (1 << 17)
#define SEC4_DCL_OPT_CRC_DIS (1 << 18)
#define SEC4_DCL_OPT_CRC_DOS (1 << 19)
#define SEC4_DCL_OPT_CRC_DOC (1 << 20)
/* IPsec ESP */
#define SEC4_IPSEC_ESP_HEADER_SZ (8)
#define SEC4_IPSEC_ESP_DES_IV_SZ (8)
#define SEC4_IPSEC_ESP_AES_IV_SZ (16)
#define SEC4_IPSEC_ESP_TRAILER_SZ (2)
#define SEC4_IPSEC_ESP_ICV_SZ (12)
#include "Sec4Notify.h"
/***************/
/*
* 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
* notifyFlags - if bits set, notify pointers are actuall PIDs for a completion signal
* jobDesc - SEC4 job descriptor (t_Desc) handle
* 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
*/
#define COMMON_REQ_PREAMBLE \
unsigned long opId; \
unsigned char notifyFlags; \
t_Handle *jobDesc; \
int coreId; \
PSEC4_NOTIFY_ROUTINE notify; \
PSEC4_NOTIFY_CTX pNotifyCtx; \
PSEC4_NOTIFY_ON_ERROR_ROUTINE notify_on_error; \
SEC4_NOTIFY_ON_ERROR_CTX ctxNotifyOnErr; \
int status;
/* 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)
#if 0
/*
* 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)
#endif /* #IF 0 */
/*
* 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)
#if 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)
#endif /* #IF 0 */
#if 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)
#endif /* #IF 0 */
#if 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)
#endif /* #IF 0 */
#if 0
/*
* 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
#endif /* #IF 0 */
#if 0
/*
* 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)
#endif /* #IF 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)
#if 0
/*
* 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)
#endif /* #IF 0 */
#if 0
/*
* 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)
#endif /* #IF 0 */
#define NUM_CUSTOM_DESC (4)
#define DPD_CUSTOM_GROUP (0xF000)
#define DPD_CHKSUM_CRC (DPD_CUSTOM_GROUP + 0)
#define DPD_DMA (DPD_CUSTOM_GROUP + 1)
#define DPD_AESCCM_ENCRYPT (DPD_CUSTOM_GROUP + 2)
#define DPD_AESCCM_DECRYPT (DPD_CUSTOM_GROUP + 3)
typedef struct
{
COMMON_REQ_PREAMBLE
unsigned long inDataBytes;
unsigned char* inData;
unsigned long inCtxDataBytes;
unsigned char* inCtxData;
unsigned short crcOutBytes;
unsigned char* crcOut;
unsigned char* polynomialData;
unsigned long crcOptions;
} CHKSUM_CRC_REQ ;
typedef struct
{
COMMON_REQ_PREAMBLE
unsigned long keyBytes;
unsigned char *keyData;
unsigned long ctxBytes;
unsigned char *ctx;
unsigned long inDataBytes;
unsigned char *inData;
unsigned long AADBytes;
unsigned char *AADData;
unsigned long outDataBytes;
unsigned char *outData;
unsigned long MICBytes;
unsigned char *inMICData;
unsigned char *outMICData;
unsigned long options;
} AESCCM_REQ;
typedef struct
{
COMMON_REQ_PREAMBLE
unsigned long inDataBytes;
unsigned char* inData;
unsigned char* outData;
unsigned long options;
} DMA_REQ ;
#define NUM_SEC4_INTERNAL_DESC (1)
#define DPD_SEC4_INTERNAL_GROUP (0xE000)
#define DPD_SEC4_INTERNAL_CMN (DPD_SEC4_INTERNAL_GROUP + 0)
#ifdef _cplusplus
}
#endif
#endif /* SEC4_H */