0
|
1 /* Declarations of functions and data types used for SHA1 sum
|
|
2 library functions.
|
|
3 Copyright (C) 2000, 2001, 2003, 2005, 2006, 2008
|
|
4 Free Software Foundation, Inc.
|
|
5
|
|
6 This program is free software; you can redistribute it and/or modify it
|
|
7 under the terms of the GNU General Public License as published by the
|
|
8 Free Software Foundation; either version 2, or (at your option) any
|
|
9 later version.
|
|
10
|
|
11 This program is distributed in the hope that it will be useful,
|
|
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
14 GNU General Public License for more details.
|
|
15
|
|
16 You should have received a copy of the GNU General Public License
|
|
17 along with this program; if not, write to the Free Software Foundation,
|
|
18 Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
|
|
19
|
|
20 #ifndef SHA1_H
|
|
21 # define SHA1_H 1
|
|
22
|
|
23 #include <stdio.h>
|
|
24
|
|
25 #if defined HAVE_LIMITS_H || _LIBC
|
|
26 # include <limits.h>
|
|
27 #endif
|
|
28
|
|
29 #include "ansidecl.h"
|
|
30
|
|
31 /* The following contortions are an attempt to use the C preprocessor
|
|
32 to determine an unsigned integral type that is 32 bits wide. An
|
|
33 alternative approach is to use autoconf's AC_CHECK_SIZEOF macro, but
|
|
34 doing that would require that the configure script compile and *run*
|
|
35 the resulting executable. Locally running cross-compiled executables
|
|
36 is usually not possible. */
|
|
37
|
|
38 #ifdef _LIBC
|
|
39 # include <sys/types.h>
|
|
40 typedef u_int32_t sha1_uint32;
|
|
41 typedef uintptr_t sha1_uintptr;
|
|
42 #else
|
|
43 # define INT_MAX_32_BITS 2147483647
|
|
44
|
|
45 /* If UINT_MAX isn't defined, assume it's a 32-bit type.
|
|
46 This should be valid for all systems GNU cares about because
|
|
47 that doesn't include 16-bit systems, and only modern systems
|
|
48 (that certainly have <limits.h>) have 64+-bit integral types. */
|
|
49
|
|
50 # ifndef INT_MAX
|
|
51 # define INT_MAX INT_MAX_32_BITS
|
|
52 # endif
|
|
53
|
|
54 # if INT_MAX == INT_MAX_32_BITS
|
|
55 typedef unsigned int sha1_uint32;
|
|
56 # else
|
|
57 # if SHRT_MAX == INT_MAX_32_BITS
|
|
58 typedef unsigned short sha1_uint32;
|
|
59 # else
|
|
60 # if LONG_MAX == INT_MAX_32_BITS
|
|
61 typedef unsigned long sha1_uint32;
|
|
62 # else
|
|
63 /* The following line is intended to evoke an error.
|
|
64 Using #error is not portable enough. */
|
|
65 "Cannot determine unsigned 32-bit data type."
|
|
66 # endif
|
|
67 # endif
|
|
68 # endif
|
|
69 #endif
|
|
70
|
|
71 #ifdef __cplusplus
|
|
72 extern "C" {
|
|
73 #endif
|
|
74
|
|
75 /* Structure to save state of computation between the single steps. */
|
|
76 struct sha1_ctx
|
|
77 {
|
|
78 sha1_uint32 A;
|
|
79 sha1_uint32 B;
|
|
80 sha1_uint32 C;
|
|
81 sha1_uint32 D;
|
|
82 sha1_uint32 E;
|
|
83
|
|
84 sha1_uint32 total[2];
|
|
85 sha1_uint32 buflen;
|
|
86 sha1_uint32 buffer[32];
|
|
87 };
|
|
88
|
|
89
|
|
90 /* Initialize structure containing state of computation. */
|
|
91 extern void sha1_init_ctx (struct sha1_ctx *ctx);
|
|
92
|
|
93 /* Starting with the result of former calls of this function (or the
|
|
94 initialization function update the context for the next LEN bytes
|
|
95 starting at BUFFER.
|
|
96 It is necessary that LEN is a multiple of 64!!! */
|
|
97 extern void sha1_process_block (const void *buffer, size_t len,
|
|
98 struct sha1_ctx *ctx);
|
|
99
|
|
100 /* Starting with the result of former calls of this function (or the
|
|
101 initialization function update the context for the next LEN bytes
|
|
102 starting at BUFFER.
|
|
103 It is NOT required that LEN is a multiple of 64. */
|
|
104 extern void sha1_process_bytes (const void *buffer, size_t len,
|
|
105 struct sha1_ctx *ctx);
|
|
106
|
|
107 /* Process the remaining bytes in the buffer and put result from CTX
|
|
108 in first 20 bytes following RESBUF. The result is always in little
|
|
109 endian byte order, so that a byte-wise output yields to the wanted
|
|
110 ASCII representation of the message digest.
|
|
111
|
|
112 IMPORTANT: On some systems it is required that RESBUF be correctly
|
|
113 aligned for a 32 bits value. */
|
|
114 extern void *sha1_finish_ctx (struct sha1_ctx *ctx, void *resbuf);
|
|
115
|
|
116
|
|
117 /* Put result from CTX in first 20 bytes following RESBUF. The result is
|
|
118 always in little endian byte order, so that a byte-wise output yields
|
|
119 to the wanted ASCII representation of the message digest.
|
|
120
|
|
121 IMPORTANT: On some systems it is required that RESBUF is correctly
|
|
122 aligned for a 32 bits value. */
|
|
123 extern void *sha1_read_ctx (const struct sha1_ctx *ctx, void *resbuf);
|
|
124
|
|
125
|
|
126 /* Compute SHA1 message digest for bytes read from STREAM. The
|
|
127 resulting message digest number will be written into the 20 bytes
|
|
128 beginning at RESBLOCK. */
|
|
129 extern int sha1_stream (FILE *stream, void *resblock);
|
|
130
|
|
131 /* Compute SHA1 message digest for LEN bytes beginning at BUFFER. The
|
|
132 result is always in little endian byte order, so that a byte-wise
|
|
133 output yields to the wanted ASCII representation of the message
|
|
134 digest. */
|
|
135 extern void *sha1_buffer (const char *buffer, size_t len, void *resblock);
|
|
136
|
|
137 #ifdef __cplusplus
|
|
138 }
|
|
139 #endif
|
|
140
|
|
141 #endif
|