00001
00058 #ifndef IXCRYPTOACC_H
00059 #define IXCRYPTOACC_H
00060
00061
00062
00063
00064
00065 #include "IxOsBuffMgt.h"
00066 #include "IxTypes.h"
00067
00068
00069
00070
00071
00072
00073
00074 #define IX_CRYPTO_ACC_MAX_CIPHER_KEY_LENGTH 32
00080 #define IX_CRYPTO_ACC_MAX_CIPHER_IV_LENGTH 16
00083 #define IX_CRYPTO_ACC_MAX_AUTH_KEY_LENGTH 64
00099 #define IX_CRYPTO_ACC_MAX_AUTH_IV_LENGTH 20
00105 #define IX_CRYPTO_ACC_MAX_QUEUE_DEPTH 64
00109 #define IX_CRYPTO_ACC_MAX_ACTIVE_SA_TUNNELS 1000
00126
00127
00128
00129
00130 #define IX_CRYPTO_ACC_DES_KEY_64 8
00133 #define IX_CRYPTO_ACC_DES_BLOCK_64 8
00136 #define IX_CRYPTO_ACC_DES_IV_64 8
00140 #define IX_CRYPTO_ACC_3DES_KEY_192 24
00144
00145
00146
00147
00148 #define IX_CRYPTO_ACC_AES_KEY_128 16
00151 #define IX_CRYPTO_ACC_AES_KEY_192 24
00154 #define IX_CRYPTO_ACC_AES_KEY_256 32
00157 #define IX_CRYPTO_ACC_AES_BLOCK_128 16
00160 #define IX_CRYPTO_ACC_AES_CBC_IV_128 16
00164 #define IX_CRYPTO_ACC_AES_CTR_IV_128 16
00169 #define IX_CRYPTO_ACC_CCM_AAD_LEN_384 48
00170
00177 #define IX_CRYPTO_ACC_AES_CCM_IV_512 \
00178 (IX_CRYPTO_ACC_AES_CTR_IV_128 + IX_CRYPTO_ACC_CCM_AAD_LEN_384)
00179
00187
00188
00189
00190
00191 #define IX_CRYPTO_ACC_ARC4_KEY_128 16
00194 #define IX_CRYPTO_ACC_ARC4_BLOCK_8 1
00198
00199
00200
00201
00202 #define IX_CRYPTO_ACC_SHA1_KEY_160 20
00205 #define IX_CRYPTO_ACC_SHA1_DIGEST_160 20
00211
00212
00213
00214
00215 #define IX_CRYPTO_ACC_MD5_KEY_128 16
00218 #define IX_CRYPTO_ACC_MD5_DIGEST_128 16
00223
00224
00225
00226 #define IX_CRYPTO_ACC_CCM_DIGEST_64 8
00234
00235
00236
00237
00238 #define IX_CRYPTO_ACC_WEP_CRC_DIGEST_32 4
00242
00243
00244
00245
00246
00255 typedef enum
00256 {
00257 IX_CRYPTO_ACC_CFG_WEP_XSCALE_ACC_EN,
00262 IX_CRYPTO_ACC_CFG_CRYPTO_NPE_ACC_EN,
00269 IX_CRYPTO_ACC_CFG_WEP_NPE_ACC_EN,
00273 IX_CRYPTO_ACC_CFG_CRYPTO_WEP_NPE_ACC_EN,
00278 IX_CRYPTO_ACC_CFG_TYPE
00282 } IxCryptoAccCfg;
00283
00284
00285
00292 typedef enum
00293 {
00294 IX_CRYPTO_ACC_OP_ENCRYPT = 0,
00295 IX_CRYPTO_ACC_OP_DECRYPT,
00296 IX_CRYPTO_ACC_OP_AUTH_CALC,
00300 IX_CRYPTO_ACC_OP_AUTH_CHECK,
00304 IX_CRYPTO_ACC_OP_ENCRYPT_AUTH,
00309 IX_CRYPTO_ACC_OP_AUTH_DECRYPT,
00313 IX_CRYPTO_ACC_OP_TYPE_OF_OPERATION
00317 } IxCryptoAccOperation;
00318
00319
00320
00328 typedef enum
00329 {
00330 IX_CRYPTO_ACC_CIPHER_NULL = 0,
00331 IX_CRYPTO_ACC_CIPHER_DES,
00332 IX_CRYPTO_ACC_CIPHER_3DES,
00333 IX_CRYPTO_ACC_CIPHER_AES,
00334 IX_CRYPTO_ACC_CIPHER_ARC4,
00335 IX_CRYPTO_ACC_CIPHER_ALGO_TYPE
00339 } IxCryptoAccCipherAlgo;
00340
00341
00342
00350 typedef enum
00351 {
00352 IX_CRYPTO_ACC_MODE_NULL = 0,
00353 IX_CRYPTO_ACC_MODE_ECB,
00354 IX_CRYPTO_ACC_MODE_CBC,
00355 IX_CRYPTO_ACC_MODE_CTR,
00359 IX_CRYPTO_ACC_MODE_CCM,
00362 IX_CRYPTO_ACC_MODE_TYPE
00366 } IxCryptoAccCipherMode;
00367
00368
00369
00378 typedef enum
00379 {
00380 IX_CRYPTO_ACC_AUTH_NULL = 0,
00381 IX_CRYPTO_ACC_AUTH_SHA1,
00382 IX_CRYPTO_ACC_AUTH_MD5,
00383 IX_CRYPTO_ACC_AUTH_CBC_MAC,
00386 IX_CRYPTO_ACC_AUTH_WEP_CRC,
00387 IX_CRYPTO_ACC_AUTH_TYPE
00391 } IxCryptoAccAuthAlgo;
00392
00393
00394
00402 typedef enum
00403 {
00404 IX_CRYPTO_ACC_STATUS_SUCCESS = IX_SUCCESS,
00405 IX_CRYPTO_ACC_STATUS_FAIL = IX_FAIL,
00406 IX_CRYPTO_ACC_STATUS_WAIT,
00407 IX_CRYPTO_ACC_STATUS_RETRY,
00408 IX_CRYPTO_ACC_STATUS_QUEUE_FULL,
00409 IX_CRYPTO_ACC_STATUS_OPERATION_NOT_SUPPORTED,
00410 IX_CRYPTO_ACC_STATUS_CIPHER_ALGO_NOT_SUPPORTED,
00413 IX_CRYPTO_ACC_STATUS_CIPHER_MODE_NOT_SUPPORTED,
00417 IX_CRYPTO_ACC_STATUS_CIPHER_INVALID_KEY_LEN,
00421 IX_CRYPTO_ACC_STATUS_CIPHER_INVALID_IV_LEN,
00424 IX_CRYPTO_ACC_STATUS_CIPHER_INVALID_BLOCK_LEN,
00428 IX_CRYPTO_ACC_STATUS_AUTH_ALGO_NOT_SUPPORTED,
00432 IX_CRYPTO_ACC_STATUS_AUTH_INVALID_DIGEST_LEN,
00436 IX_CRYPTO_ACC_STATUS_AUTH_INVALID_KEY_LEN,
00440 IX_CRYPTO_ACC_STATUS_AUTH_FAIL,
00444 IX_CRYPTO_ACC_STATUS_CRYPTO_CTX_NOT_VALID,
00448 IX_CRYPTO_ACC_STATUS_EXCEED_MAX_TUNNELS ,
00453 IX_CRYPTO_ACC_STATUS_AUTH_INVALID_AAD_LEN
00457 } IxCryptoAccStatus;
00458
00459
00460
00471 typedef struct
00472 {
00473 IxCryptoAccCipherAlgo cipherAlgo;
00476 IxCryptoAccCipherMode cipherMode;
00477 UINT32 cipherKeyLen;
00478 union
00479 {
00480 UINT8 cipherKey[IX_CRYPTO_ACC_MAX_CIPHER_KEY_LENGTH];
00483 UINT8 desKey[IX_CRYPTO_ACC_DES_KEY_64];
00484 UINT8 tripleDesKey[IX_CRYPTO_ACC_3DES_KEY_192];
00485 UINT8 aesKey128[IX_CRYPTO_ACC_AES_KEY_128];
00486 UINT8 aesKey192[IX_CRYPTO_ACC_AES_KEY_192];
00487 UINT8 aesKey256[IX_CRYPTO_ACC_AES_KEY_256];
00488 } key;
00491 UINT32 cipherBlockLen;
00496 UINT32 cipherInitialVectorLen;
00497 } IxCryptoAccCipherCtx;
00498
00499
00500
00508 typedef struct
00509 {
00510 IxCryptoAccAuthAlgo authAlgo;
00513 UINT32 authDigestLen;
00514 UINT32 authKeyLen;
00515 UINT32 aadLen;
00522 union
00523 {
00524 UINT8 authKey[IX_CRYPTO_ACC_MAX_AUTH_KEY_LENGTH];
00527 UINT8 sha1Key[IX_CRYPTO_ACC_MAX_AUTH_KEY_LENGTH];
00528 UINT8 md5Key[IX_CRYPTO_ACC_MAX_AUTH_KEY_LENGTH];
00529 } key;
00530 } IxCryptoAccAuthCtx;
00531
00532
00533
00542 typedef struct
00543 {
00544 IxCryptoAccOperation operation;
00545 IxCryptoAccCipherCtx cipherCtx;
00546 IxCryptoAccAuthCtx authCtx;
00547 BOOL useDifferentSrcAndDestMbufs;
00559 } IxCryptoAccCtx;
00560
00561
00562
00598 typedef void (*IxCryptoAccRegisterCompleteCallback)(
00599 UINT32 cryptoCtxId,
00600 IX_MBUF *pMbuf,
00601 IxCryptoAccStatus status);
00602
00603
00629 typedef void (*IxCryptoAccHashKeyGenCompleteCallback)(
00630 UINT32 hashKeyId,
00631 IX_MBUF *pMbufHashKey,
00632 IxCryptoAccStatus status);
00633
00634
00669 typedef void (*IxCryptoAccPerformCompleteCallback)(
00670 UINT32 cryptoCtxId,
00671 IX_MBUF *pSrcMbuf,
00672 IX_MBUF *pDestMbuf,
00673 IxCryptoAccStatus status);
00674
00675
00703 PUBLIC IxCryptoAccStatus
00704 ixCryptoAccConfig (IxCryptoAccCfg cryptoCfg);
00705
00706
00732 PUBLIC IxCryptoAccStatus
00733 ixCryptoAccInit (void);
00734
00735
00863 PUBLIC IxCryptoAccStatus
00864 ixCryptoAccCtxRegister (
00865 IxCryptoAccCtx *pAccCtx,
00866 IX_MBUF *pMbufPrimaryChainVar,
00867 IX_MBUF *pMbufSecondaryChainVar,
00868 IxCryptoAccRegisterCompleteCallback registerCallbackFn,
00869 IxCryptoAccPerformCompleteCallback performCallbackFn,
00870 UINT32 *pCryptoCtxId);
00871
00872
00873
00909 PUBLIC IxCryptoAccStatus
00910 ixCryptoAccCtxUnregister (UINT32 cryptoCtxId);
00911
00912
00913
01035 PUBLIC IxCryptoAccStatus
01036 ixCryptoAccAuthCryptPerform (
01037 UINT32 cryptoCtxId,
01038 IX_MBUF *pSrcMbuf,
01039 IX_MBUF *pDestMbuf,
01040 UINT16 authStartOffset,
01041 UINT16 authDataLen,
01042 UINT16 cryptStartOffset,
01043 UINT16 cryptDataLen,
01044 UINT16 icvOffset,
01045 UINT8 *pIV);
01046
01047
01119 PUBLIC IxCryptoAccStatus
01120 ixCryptoAccNpeWepPerform (UINT32 cryptoCtxId,
01121 IX_MBUF *pSrcMbuf,
01122 IX_MBUF *pDestMbuf,
01123 UINT16 startOffset,
01124 UINT16 dataLen,
01125 UINT16 icvOffset,
01126 UINT8 *pKey);
01127
01128
01207 PUBLIC IxCryptoAccStatus
01208 ixCryptoAccXScaleWepPerform (
01209 UINT32 cryptoCtxId,
01210 IX_MBUF *pSrcMbuf,
01211 IX_MBUF *pDestMbuf,
01212 UINT16 startOffset,
01213 UINT16 dataLen,
01214 UINT16 icvOffset,
01215 UINT8 *pKey);
01216
01217
01262 PUBLIC IxCryptoAccStatus
01263 ixCryptoAccCtxCipherKeyUpdate (
01264 UINT32 cryptoCtxId,
01265 UINT8 *pCipherKey);
01266
01267
01287 PUBLIC void
01288 ixCryptoAccShow (void);
01289
01290
01291
01312 PUBLIC void
01313 ixCryptoAccShowWithId (UINT32 cryptoCtxId);
01314
01338 PUBLIC IxCryptoAccStatus
01339 ixCryptoAccCryptoServiceStop (void);
01340
01341
01414 PUBLIC IxCryptoAccStatus
01415 ixCryptoAccHashKeyGenerate (
01416 IxCryptoAccAuthAlgo hashAlgo,
01417 IX_MBUF *pMbufHashKey,
01418 IxCryptoAccHashKeyGenCompleteCallback hashKeyCallbackFn,
01419 UINT16 hashKeyStartOffset,
01420 UINT16 hashKeyLen,
01421 UINT16 hashKeyDestOffset,
01422 UINT32 *pHashKeyId);
01423
01424
01425 #endif
01426