summaryrefslogtreecommitdiff
path: root/include/openssl/sha.h
blob: eac7cdbba38299c52540e0a33c90bf5b2eacbb5a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
/*
 * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved.
 *
 * Licensed under the Apache License 2.0 (the "License").  You may not use
 * this file except in compliance with the License.  You can obtain a copy
 * in the file LICENSE in the source distribution or at
 * https://www.openssl.org/source/license.html
 */

#ifndef OPENSSL_SHA_H
# define OPENSSL_SHA_H
# pragma once

# include <openssl/macros.h>
# ifndef OPENSSL_NO_DEPRECATED_3_0
#  define HEADER_SHA_H
# endif

# include <openssl/e_os2.h>
# include <stddef.h>

# ifdef  __cplusplus
extern "C" {
# endif

# define SHA_DIGEST_LENGTH 20

# ifndef OPENSSL_NO_DEPRECATED_3_0
/*-
 * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 * ! SHA_LONG has to be at least 32 bits wide.                    !
 * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 */
#  define SHA_LONG unsigned int

#  define SHA_LBLOCK      16
#  define SHA_CBLOCK      (SHA_LBLOCK*4)/* SHA treats input data as a
                                         * contiguous array of 32 bit wide
                                         * big-endian values. */
#  define SHA_LAST_BLOCK  (SHA_CBLOCK-8)

typedef struct SHAstate_st {
    SHA_LONG h0, h1, h2, h3, h4;
    SHA_LONG Nl, Nh;
    SHA_LONG data[SHA_LBLOCK];
    unsigned int num;
} SHA_CTX;
# endif /* !defined(OPENSSL_NO_DEPRECATED_3_0) */

DEPRECATEDIN_3_0(int SHA1_Init(SHA_CTX *c))
DEPRECATEDIN_3_0(int SHA1_Update(SHA_CTX *c, const void *data, size_t len))
DEPRECATEDIN_3_0(int SHA1_Final(unsigned char *md, SHA_CTX *c))
DEPRECATEDIN_3_0(unsigned char *SHA1(const unsigned char *d, size_t n,
                 unsigned char *md))
DEPRECATEDIN_3_0(void SHA1_Transform(SHA_CTX *c, const unsigned char *data))

# ifndef OPENSSL_NO_DEPRECATED_3_0
#  define SHA256_CBLOCK   (SHA_LBLOCK*4)/* SHA-256 treats input data as a
                                        * contiguous array of 32 bit wide
                                        * big-endian values. */

typedef struct SHA256state_st {
    SHA_LONG h[8];
    SHA_LONG Nl, Nh;
    SHA_LONG data[SHA_LBLOCK];
    unsigned int num, md_len;
} SHA256_CTX;
# endif /* !defined(OPENSSL_NO_DEPRECATED_3_0) */

DEPRECATEDIN_3_0(int SHA224_Init(SHA256_CTX *c))
DEPRECATEDIN_3_0(int SHA224_Update(SHA256_CTX *c, const void *data, size_t len))
DEPRECATEDIN_3_0(int SHA224_Final(unsigned char *md, SHA256_CTX *c))
DEPRECATEDIN_3_0(unsigned char *SHA224(const unsigned char *d, size_t n,
                                       unsigned char *md))
DEPRECATEDIN_3_0(int SHA256_Init(SHA256_CTX *c))
DEPRECATEDIN_3_0(int SHA256_Update(SHA256_CTX *c, const void *data, size_t len))
DEPRECATEDIN_3_0(int SHA256_Final(unsigned char *md, SHA256_CTX *c))
DEPRECATEDIN_3_0(unsigned char *SHA256(const unsigned char *d, size_t n,
                                       unsigned char *md))
DEPRECATEDIN_3_0(void SHA256_Transform(SHA256_CTX *c,
                                       const unsigned char *data))

# define SHA224_DIGEST_LENGTH    28
# define SHA256_DIGEST_LENGTH    32
# define SHA384_DIGEST_LENGTH    48
# define SHA512_DIGEST_LENGTH    64

# ifndef OPENSSL_NO_DEPRECATED_3_0
/*
 * Unlike 32-bit digest algorithms, SHA-512 *relies* on SHA_LONG64
 * being exactly 64-bit wide. See Implementation Notes in sha512.c
 * for further details.
 */
/*
 * SHA-512 treats input data as a
 * contiguous array of 64 bit
 * wide big-endian values.
 */
#  define SHA512_CBLOCK   (SHA_LBLOCK*8)
#  if (defined(_WIN32) || defined(_WIN64)) && !defined(__MINGW32__)
#   define SHA_LONG64 unsigned __int64
#  elif defined(__arch64__)
#   define SHA_LONG64 unsigned long
#  else
#   define SHA_LONG64 unsigned long long
#  endif

typedef struct SHA512state_st {
    SHA_LONG64 h[8];
    SHA_LONG64 Nl, Nh;
    union {
        SHA_LONG64 d[SHA_LBLOCK];
        unsigned char p[SHA512_CBLOCK];
    } u;
    unsigned int num, md_len;
} SHA512_CTX;
# endif /* !defined(OPENSSL_NO_DEPRECATED_3_0) */

DEPRECATEDIN_3_0(int SHA384_Init(SHA512_CTX *c))
DEPRECATEDIN_3_0(int SHA384_Update(SHA512_CTX *c, const void *data, size_t len))
DEPRECATEDIN_3_0(int SHA384_Final(unsigned char *md, SHA512_CTX *c))
DEPRECATEDIN_3_0(unsigned char *SHA384(const unsigned char *d, size_t n,
                                       unsigned char *md))
DEPRECATEDIN_3_0(int SHA512_Init(SHA512_CTX *c))
DEPRECATEDIN_3_0(int SHA512_Update(SHA512_CTX *c, const void *data, size_t len))
DEPRECATEDIN_3_0(int SHA512_Final(unsigned char *md, SHA512_CTX *c))
DEPRECATEDIN_3_0(unsigned char *SHA512(const unsigned char *d, size_t n,
                                       unsigned char *md))
DEPRECATEDIN_3_0(void SHA512_Transform(SHA512_CTX *c,
                                       const unsigned char *data))

# ifdef  __cplusplus
}
# endif

#endif