3 * Copyright (C) 2006-2014 wolfSSL Inc.
5 * This file is part of CyaSSL.
7 * CyaSSL is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
12 * CyaSSL is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
25 #ifndef CTAO_CRYPT_DES3_H
26 #define CTAO_CRYPT_DES3_H
29 #include <cyassl/ctaocrypt/types.h>
36 #define CYASSL_3DES_CAVIUM_MAGIC 0xBEEF0003
39 DES_ENC_TYPE = 2, /* cipher unique type */
40 DES3_ENC_TYPE = 3, /* cipher unique type */
51 #define DES3_KEYLEN 24
62 /* DES encryption and decryption */
64 word32 reg[DES_BLOCK_SIZE / sizeof(word32)]; /* for CBC mode */
65 word32 tmp[DES_BLOCK_SIZE / sizeof(word32)]; /* same */
66 word32 key[DES_KS_SIZE];
70 /* DES3 encryption and decryption */
72 word32 key[3][DES_KS_SIZE];
73 word32 reg[DES_BLOCK_SIZE / sizeof(word32)]; /* for CBC mode */
74 word32 tmp[DES_BLOCK_SIZE / sizeof(word32)]; /* same */
76 int devId; /* nitrox device id */
77 word32 magic; /* using cavium magic */
78 word64 contextHandle; /* nitrox context memory handle */
83 CYASSL_API int Des_SetKey(Des* des, const byte* key, const byte* iv, int dir);
84 CYASSL_API void Des_SetIV(Des* des, const byte* iv);
85 CYASSL_API int Des_CbcEncrypt(Des* des, byte* out, const byte* in, word32 sz);
86 CYASSL_API int Des_CbcDecrypt(Des* des, byte* out, const byte* in, word32 sz);
87 CYASSL_API int Des_EcbEncrypt(Des* des, byte* out, const byte* in, word32 sz);
89 CYASSL_API int Des3_SetKey(Des3* des, const byte* key, const byte* iv,int dir);
90 CYASSL_API int Des3_SetIV(Des3* des, const byte* iv);
91 CYASSL_API int Des3_CbcEncrypt(Des3* des, byte* out, const byte* in,word32 sz);
92 CYASSL_API int Des3_CbcDecrypt(Des3* des, byte* out, const byte* in,word32 sz);
96 CYASSL_API int Des3_InitCavium(Des3*, int);
97 CYASSL_API void Des3_FreeCavium(Des3*);
102 /* fips wrapper calls, user can call direct */
103 CYASSL_API int Des3_SetKey_fips(Des3* des, const byte* key, const byte* iv,
105 CYASSL_API int Des3_SetIV_fips(Des3* des, const byte* iv);
106 CYASSL_API int Des3_CbcEncrypt_fips(Des3* des, byte* out, const byte* in,
108 CYASSL_API int Des3_CbcDecrypt_fips(Des3* des, byte* out, const byte* in,
110 #ifndef FIPS_NO_WRAPPERS
111 /* if not impl or fips.c impl wrapper force fips calls if fips build */
112 #define Des3_SetKey Des3_SetKey_fips
113 #define Des3_SetIV Des3_SetIV_fips
114 #define Des3_CbcEncrypt Des3_CbcEncrypt_fips
115 #define Des3_CbcDecrypt Des3_CbcDecrypt_fips
116 #endif /* FIPS_NO_WRAPPERS */
118 #endif /* HAVE_FIPS */
126 #endif /* CTAO_CRYPT_DES3_H */