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
23 /* Defines Microchip CRYPTO API layer */
26 #ifndef MC_CRYPTO_API_H
27 #define MC_CRYPTO_API_H
35 typedef struct CRYPT_MD5_CTX {
36 int holder[24]; /* big enough to hold internal, but check on init */
39 int CRYPT_MD5_Initialize(CRYPT_MD5_CTX*);
40 int CRYPT_MD5_DataAdd(CRYPT_MD5_CTX*, const unsigned char*, unsigned int);
41 int CRYPT_MD5_Finalize(CRYPT_MD5_CTX*, unsigned char*);
44 CRYPT_MD5_DIGEST_SIZE = 16
49 typedef struct CRYPT_SHA_CTX {
50 int holder[24]; /* big enough to hold internal, but check on init */
53 int CRYPT_SHA_Initialize(CRYPT_SHA_CTX*);
54 int CRYPT_SHA_DataAdd(CRYPT_SHA_CTX*, const unsigned char*, unsigned int);
55 int CRYPT_SHA_Finalize(CRYPT_SHA_CTX*, unsigned char*);
58 CRYPT_SHA_DIGEST_SIZE = 20
63 typedef struct CRYPT_SHA256_CTX {
64 int holder[28]; /* big enough to hold internal, but check on init */
67 int CRYPT_SHA256_Initialize(CRYPT_SHA256_CTX*);
68 int CRYPT_SHA256_DataAdd(CRYPT_SHA256_CTX*, const unsigned char*, unsigned int);
69 int CRYPT_SHA256_Finalize(CRYPT_SHA256_CTX*, unsigned char*);
72 CRYPT_SHA256_DIGEST_SIZE = 32
77 typedef struct CRYPT_SHA384_CTX {
78 long long holder[32]; /* big enough to hold internal, but check on init */
81 int CRYPT_SHA384_Initialize(CRYPT_SHA384_CTX*);
82 int CRYPT_SHA384_DataAdd(CRYPT_SHA384_CTX*, const unsigned char*, unsigned int);
83 int CRYPT_SHA384_Finalize(CRYPT_SHA384_CTX*, unsigned char*);
86 CRYPT_SHA384_DIGEST_SIZE = 48
91 typedef struct CRYPT_SHA512_CTX {
92 long long holder[36]; /* big enough to hold internal, but check on init */
95 int CRYPT_SHA512_Initialize(CRYPT_SHA512_CTX*);
96 int CRYPT_SHA512_DataAdd(CRYPT_SHA512_CTX*, const unsigned char*, unsigned int);
97 int CRYPT_SHA512_Finalize(CRYPT_SHA512_CTX*, unsigned char*);
100 CRYPT_SHA512_DIGEST_SIZE = 64
105 typedef struct CRYPT_HMAC_CTX {
106 long long holder[67]; /* big enough to hold internal, but check on init */
109 int CRYPT_HMAC_SetKey(CRYPT_HMAC_CTX*, int, const unsigned char*, unsigned int);
110 int CRYPT_HMAC_DataAdd(CRYPT_HMAC_CTX*, const unsigned char*, unsigned int);
111 int CRYPT_HMAC_Finalize(CRYPT_HMAC_CTX*, unsigned char*);
116 CRYPT_HMAC_SHA256 = 2,
117 CRYPT_HMAC_SHA384 = 5,
118 CRYPT_HMAC_SHA512 = 4
123 int CRYPT_HUFFMAN_Compress(unsigned char*, unsigned int, const unsigned char*,
124 unsigned int, unsigned int);
125 int CRYPT_HUFFMAN_DeCompress(unsigned char*, unsigned int, const unsigned char*,
128 /* flag to use static huffman */
130 CRYPT_HUFFMAN_COMPRESS_STATIC = 1
135 typedef struct CRYPT_RNG_CTX {
136 int holder[66]; /* big enough to hold internal, but check on init */
139 int CRYPT_RNG_Initialize(CRYPT_RNG_CTX*);
140 int CRYPT_RNG_Get(CRYPT_RNG_CTX*, unsigned char*);
141 int CRYPT_RNG_BlockGenerate(CRYPT_RNG_CTX*, unsigned char*, unsigned int);
145 typedef struct CRYPT_TDES_CTX {
146 int holder[100]; /* big enough to hold internal, but check on init */
149 int CRYPT_TDES_KeySet(CRYPT_TDES_CTX*, const unsigned char*,
150 const unsigned char*, int);
151 int CRYPT_TDES_IvSet(CRYPT_TDES_CTX*, const unsigned char*);
152 int CRYPT_TDES_CBC_Encrypt(CRYPT_TDES_CTX*, unsigned char*,
153 const unsigned char*, unsigned int);
154 int CRYPT_TDES_CBC_Decrypt(CRYPT_TDES_CTX*, unsigned char*,
155 const unsigned char*, unsigned int);
157 /* key direction flags for setup */
159 CRYPT_TDES_ENCRYPTION = 0,
160 CRYPT_TDES_DECRYPTION = 1
165 typedef struct CRYPT_AES_CTX {
166 int holder[70]; /* big enough to hold internal, but check on init */
170 int CRYPT_AES_KeySet(CRYPT_AES_CTX*, const unsigned char*, unsigned int,
171 const unsigned char*, int);
172 int CRYPT_AES_IvSet(CRYPT_AES_CTX*, const unsigned char*);
175 int CRYPT_AES_CBC_Encrypt(CRYPT_AES_CTX*, unsigned char*,
176 const unsigned char*, unsigned int);
177 int CRYPT_AES_CBC_Decrypt(CRYPT_AES_CTX*, unsigned char*,
178 const unsigned char*, unsigned int);
180 /* ctr (counter), use Encrypt both ways with ENCRYPT key setup */
181 int CRYPT_AES_CTR_Encrypt(CRYPT_AES_CTX*, unsigned char*,
182 const unsigned char*, unsigned int);
184 /* direct, one block at a time */
185 int CRYPT_AES_DIRECT_Encrypt(CRYPT_AES_CTX*, unsigned char*,
186 const unsigned char*);
187 int CRYPT_AES_DIRECT_Decrypt(CRYPT_AES_CTX*, unsigned char*,
188 const unsigned char*);
190 /* key direction flags for setup, ctr always uses ENCRYPT flag */
192 CRYPT_AES_ENCRYPTION = 0,
193 CRYPT_AES_DECRYPTION = 1,
194 CRYPT_AES_BLOCK_SIZE = 16
200 typedef struct CRYPT_RSA_CTX {
205 int CRYPT_RSA_Initialize(CRYPT_RSA_CTX*);
206 int CRYPT_RSA_Free(CRYPT_RSA_CTX*);
209 int CRYPT_RSA_PublicKeyDecode(CRYPT_RSA_CTX*, const unsigned char*,
211 int CRYPT_RSA_PrivateKeyDecode(CRYPT_RSA_CTX*, const unsigned char*,
214 /* encrypt/decrypt */
215 int CRYPT_RSA_PublicEncrypt(CRYPT_RSA_CTX*, unsigned char*,
216 unsigned int, const unsigned char*, unsigned int,
218 int CRYPT_RSA_PrivateDecrypt(CRYPT_RSA_CTX*, unsigned char*,
219 unsigned int, const unsigned char*, unsigned int);
222 int CRYPT_RSA_EncryptSizeGet(CRYPT_RSA_CTX*);
227 typedef struct CRYPT_ECC_CTX {
232 int CRYPT_ECC_Initialize(CRYPT_ECC_CTX*);
233 int CRYPT_ECC_Free(CRYPT_ECC_CTX*);
236 int CRYPT_ECC_PublicExport(CRYPT_ECC_CTX*, unsigned char*, unsigned int,
238 int CRYPT_ECC_PublicImport(CRYPT_ECC_CTX*, const unsigned char*, unsigned int);
239 int CRYPT_ECC_PrivateImport(CRYPT_ECC_CTX*, const unsigned char*, unsigned int,
240 const unsigned char*, unsigned int);
243 int CRYPT_ECC_DHE_KeyMake(CRYPT_ECC_CTX*, CRYPT_RNG_CTX*, int);
244 int CRYPT_ECC_DHE_SharedSecretMake(CRYPT_ECC_CTX*, CRYPT_ECC_CTX*,
245 unsigned char*, unsigned int, unsigned int*);
248 int CRYPT_ECC_DSA_HashSign(CRYPT_ECC_CTX*, CRYPT_RNG_CTX*, unsigned char*,
249 unsigned int, unsigned int*, const unsigned char*, unsigned int);
250 int CRYPT_ECC_DSA_HashVerify(CRYPT_ECC_CTX*, const unsigned char*,
251 unsigned int, unsigned char*, unsigned int, int*);
254 int CRYPT_ECC_KeySizeGet(CRYPT_ECC_CTX*);
255 int CRYPT_ECC_SignatureSizeGet(CRYPT_ECC_CTX*);
258 /* Error string helper, string needs to be >= 80 chars */
259 int CRYPT_ERROR_StringGet(int, char*);
267 #endif /* MC_CRYPTO_API_H */