]> git.sur5r.net Git - freertos/blob - FreeRTOS-Plus/Source/CyaSSL/cyassl/ctaocrypt/sha256.h
c619461a31e227916ccd8b4f04576f312daceb20
[freertos] / FreeRTOS-Plus / Source / CyaSSL / cyassl / ctaocrypt / sha256.h
1 /* sha256.h
2  *
3  * Copyright (C) 2006-2014 wolfSSL Inc.
4  *
5  * This file is part of CyaSSL.
6  *
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.
11  *
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.
16  *
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
20  */
21
22
23 /* code submitted by raphael.huck@efixo.com */
24
25
26 #ifndef NO_SHA256
27
28 #ifndef CTAO_CRYPT_SHA256_H
29 #define CTAO_CRYPT_SHA256_H
30
31 #include <cyassl/ctaocrypt/types.h>
32
33 #ifdef __cplusplus
34     extern "C" {
35 #endif
36
37 #ifdef CYASSL_PIC32MZ_HASH
38 #include "port/pic32/pic32mz-crypt.h"
39 #endif
40
41
42 /* in bytes */
43 enum {
44     SHA256              =  2,   /* hash type unique */
45     SHA256_BLOCK_SIZE   = 64,
46     SHA256_DIGEST_SIZE  = 32,
47     SHA256_PAD_SIZE     = 56
48 };
49
50
51 /* Sha256 digest */
52 typedef struct Sha256 {
53     word32  buffLen;   /* in bytes          */
54     word32  loLen;     /* length in bytes   */
55     word32  hiLen;     /* length in bytes   */
56     word32  digest[SHA256_DIGEST_SIZE / sizeof(word32)];
57     word32  buffer[SHA256_BLOCK_SIZE  / sizeof(word32)];
58     #ifdef CYASSL_PIC32MZ_HASH
59         pic32mz_desc desc ; /* Crypt Engine descripter */
60     #endif
61 } Sha256;
62
63
64 CYASSL_API int InitSha256(Sha256*);
65 CYASSL_API int Sha256Update(Sha256*, const byte*, word32);
66 CYASSL_API int Sha256Final(Sha256*, byte*);
67 CYASSL_API int Sha256Hash(const byte*, word32, byte*);
68
69
70 #ifdef HAVE_FIPS
71     /* fips wrapper calls, user can call direct */
72     CYASSL_API int InitSha256_fips(Sha256*);
73     CYASSL_API int Sha256Update_fips(Sha256*, const byte*, word32);
74     CYASSL_API int Sha256Final_fips(Sha256*, byte*);
75     #ifndef FIPS_NO_WRAPPERS
76         /* if not impl or fips.c impl wrapper force fips calls if fips build */
77         #define InitSha256   InitSha256_fips
78         #define Sha256Update Sha256Update_fips
79         #define Sha256Final  Sha256Final_fips
80     #endif /* FIPS_NO_WRAPPERS */
81
82 #endif /* HAVE_FIPS */
83
84  
85 #ifdef __cplusplus
86     } /* extern "C" */
87 #endif
88
89 #endif /* CTAO_CRYPT_SHA256_H */
90 #endif /* NO_SHA256 */
91