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