OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [include/] [sha1.h] - Blame information for rev 726

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 726 jeremybenn
/* Declarations of functions and data types used for SHA1 sum
2
   library functions.
3
   Copyright (C) 2000, 2001, 2003, 2005, 2006, 2008, 2010
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 3, 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

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.