main shrub/shrubtools / randomart / bsd-sha2.h
  1/*	$OpenBSD: sha2.h,v 1.10 2016/09/03 17:00:29 tedu Exp $	*/
  2
  3/*
  4 * FILE:	sha2.h
  5 * AUTHOR:	Aaron D. Gifford <me@aarongifford.com>
  6 * 
  7 * Copyright (c) 2000-2001, Aaron D. Gifford
  8 * All rights reserved.
  9 *
 10 * Redistribution and use in source and binary forms, with or without
 11 * modification, are permitted provided that the following conditions
 12 * are met:
 13 * 1. Redistributions of source code must retain the above copyright
 14 *    notice, this list of conditions and the following disclaimer.
 15 * 2. Redistributions in binary form must reproduce the above copyright
 16 *    notice, this list of conditions and the following disclaimer in the
 17 *    documentation and/or other materials provided with the distribution.
 18 * 3. Neither the name of the copyright holder nor the names of contributors
 19 *    may be used to endorse or promote products derived from this software
 20 *    without specific prior written permission.
 21 * 
 22 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTOR(S) ``AS IS'' AND
 23 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 24 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 25 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTOR(S) BE LIABLE
 26 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 27 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 28 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 29 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 30 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 31 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 32 * SUCH DAMAGE.
 33 *
 34 * $From: sha2.h,v 1.1 2001/11/08 00:02:01 adg Exp adg $
 35 */
 36
 37/* OPENBSD ORIGINAL: include/sha2.h */
 38
 39#ifndef _SSHSHA2_H
 40#define _SSHSHA2_H
 41
 42#include "defs"
 43
 44#if !defined(HAVE_SHA256UPDATE) || !defined(HAVE_SHA384UPDATE) || \
 45    !defined(HAVE_SHA512UPDATE)
 46
 47/*** SHA-256/384/512 Various Length Definitions ***********************/
 48#define SHA224_BLOCK_LENGTH		64
 49#define SHA224_DIGEST_LENGTH		28
 50#define SHA224_DIGEST_STRING_LENGTH	(SHA224_DIGEST_LENGTH * 2 + 1)
 51#define SHA256_BLOCK_LENGTH		64
 52#define SHA256_DIGEST_LENGTH		32
 53#define SHA256_DIGEST_STRING_LENGTH	(SHA256_DIGEST_LENGTH * 2 + 1)
 54#define SHA384_BLOCK_LENGTH		128
 55#define SHA384_DIGEST_LENGTH		48
 56#define SHA384_DIGEST_STRING_LENGTH	(SHA384_DIGEST_LENGTH * 2 + 1)
 57#define SHA512_BLOCK_LENGTH		128
 58#define SHA512_DIGEST_LENGTH		64
 59#define SHA512_DIGEST_STRING_LENGTH	(SHA512_DIGEST_LENGTH * 2 + 1)
 60#define SHA512_256_BLOCK_LENGTH		128
 61#define SHA512_256_DIGEST_LENGTH	32
 62#define SHA512_256_DIGEST_STRING_LENGTH	(SHA512_256_DIGEST_LENGTH * 2 + 1)
 63
 64
 65/*** SHA-224/256/384/512 Context Structure *******************************/
 66typedef struct _SHA2_CTX {
 67	union {
 68		u_int32_t	st32[8];
 69		u_int64_t	st64[8];
 70	} state;
 71	u_int64_t	bitcount[2];
 72	u_int8_t	buffer[SHA512_BLOCK_LENGTH];
 73} SHA2_CTX;
 74
 75#if 0
 76__BEGIN_DECLS
 77void SHA224Init(SHA2_CTX *);
 78void SHA224Transform(u_int32_t state[8], const u_int8_t [SHA224_BLOCK_LENGTH]);
 79void SHA224Update(SHA2_CTX *, const u_int8_t *, size_t)
 80	__attribute__((__bounded__(__string__,2,3)));
 81void SHA224Pad(SHA2_CTX *);
 82void SHA224Final(u_int8_t [SHA224_DIGEST_LENGTH], SHA2_CTX *)
 83	__attribute__((__bounded__(__minbytes__,1,SHA224_DIGEST_LENGTH)));
 84char *SHA224End(SHA2_CTX *, char *)
 85	__attribute__((__bounded__(__minbytes__,2,SHA224_DIGEST_STRING_LENGTH)));
 86char *SHA224File(const char *, char *)
 87	__attribute__((__bounded__(__minbytes__,2,SHA224_DIGEST_STRING_LENGTH)));
 88char *SHA224FileChunk(const char *, char *, off_t, off_t)
 89	__attribute__((__bounded__(__minbytes__,2,SHA224_DIGEST_STRING_LENGTH)));
 90char *SHA224Data(const u_int8_t *, size_t, char *)
 91	__attribute__((__bounded__(__string__,1,2)))
 92	__attribute__((__bounded__(__minbytes__,3,SHA224_DIGEST_STRING_LENGTH)));
 93#endif /* 0 */
 94
 95#ifndef HAVE_SHA256UPDATE
 96void SHA256Init(SHA2_CTX *);
 97void SHA256Transform(u_int32_t state[8], const u_int8_t [SHA256_BLOCK_LENGTH]);
 98void SHA256Update(SHA2_CTX *, const u_int8_t *, size_t)
 99	__attribute__((__bounded__(__string__,2,3)));
100void SHA256Pad(SHA2_CTX *);
101void SHA256Final(u_int8_t [SHA256_DIGEST_LENGTH], SHA2_CTX *)
102	__attribute__((__bounded__(__minbytes__,1,SHA256_DIGEST_LENGTH)));
103char *SHA256End(SHA2_CTX *, char *)
104	__attribute__((__bounded__(__minbytes__,2,SHA256_DIGEST_STRING_LENGTH)));
105char *SHA256File(const char *, char *)
106	__attribute__((__bounded__(__minbytes__,2,SHA256_DIGEST_STRING_LENGTH)));
107char *SHA256FileChunk(const char *, char *, off_t, off_t)
108	__attribute__((__bounded__(__minbytes__,2,SHA256_DIGEST_STRING_LENGTH)));
109char *SHA256Data(const u_int8_t *, size_t, char *)
110	__attribute__((__bounded__(__string__,1,2)))
111	__attribute__((__bounded__(__minbytes__,3,SHA256_DIGEST_STRING_LENGTH)));
112#endif /* HAVE_SHA256UPDATE */
113
114#ifndef HAVE_SHA384UPDATE
115void SHA384Init(SHA2_CTX *);
116void SHA384Transform(u_int64_t state[8], const u_int8_t [SHA384_BLOCK_LENGTH]);
117void SHA384Update(SHA2_CTX *, const u_int8_t *, size_t)
118	__attribute__((__bounded__(__string__,2,3)));
119void SHA384Pad(SHA2_CTX *);
120void SHA384Final(u_int8_t [SHA384_DIGEST_LENGTH], SHA2_CTX *)
121	__attribute__((__bounded__(__minbytes__,1,SHA384_DIGEST_LENGTH)));
122char *SHA384End(SHA2_CTX *, char *)
123	__attribute__((__bounded__(__minbytes__,2,SHA384_DIGEST_STRING_LENGTH)));
124char *SHA384File(const char *, char *)
125	__attribute__((__bounded__(__minbytes__,2,SHA384_DIGEST_STRING_LENGTH)));
126char *SHA384FileChunk(const char *, char *, off_t, off_t)
127	__attribute__((__bounded__(__minbytes__,2,SHA384_DIGEST_STRING_LENGTH)));
128char *SHA384Data(const u_int8_t *, size_t, char *)
129	__attribute__((__bounded__(__string__,1,2)))
130	__attribute__((__bounded__(__minbytes__,3,SHA384_DIGEST_STRING_LENGTH)));
131#endif /* HAVE_SHA384UPDATE */
132
133#ifndef HAVE_SHA512UPDATE
134void SHA512Init(SHA2_CTX *);
135void SHA512Transform(u_int64_t state[8], const u_int8_t [SHA512_BLOCK_LENGTH]);
136void SHA512Update(SHA2_CTX *, const u_int8_t *, size_t)
137	__attribute__((__bounded__(__string__,2,3)));
138void SHA512Pad(SHA2_CTX *);
139void SHA512Final(u_int8_t [SHA512_DIGEST_LENGTH], SHA2_CTX *)
140	__attribute__((__bounded__(__minbytes__,1,SHA512_DIGEST_LENGTH)));
141char *SHA512End(SHA2_CTX *, char *)
142	__attribute__((__bounded__(__minbytes__,2,SHA512_DIGEST_STRING_LENGTH)));
143char *SHA512File(const char *, char *)
144	__attribute__((__bounded__(__minbytes__,2,SHA512_DIGEST_STRING_LENGTH)));
145char *SHA512FileChunk(const char *, char *, off_t, off_t)
146	__attribute__((__bounded__(__minbytes__,2,SHA512_DIGEST_STRING_LENGTH)));
147char *SHA512Data(const u_int8_t *, size_t, char *)
148	__attribute__((__bounded__(__string__,1,2)))
149	__attribute__((__bounded__(__minbytes__,3,SHA512_DIGEST_STRING_LENGTH)));
150#endif /* HAVE_SHA512UPDATE */
151
152#if 0
153void SHA512_256Init(SHA2_CTX *);
154void SHA512_256Transform(u_int64_t state[8], const u_int8_t [SHA512_256_BLOCK_LENGTH]);
155void SHA512_256Update(SHA2_CTX *, const u_int8_t *, size_t)
156	__attribute__((__bounded__(__string__,2,3)));
157void SHA512_256Pad(SHA2_CTX *);
158void SHA512_256Final(u_int8_t [SHA512_256_DIGEST_LENGTH], SHA2_CTX *)
159	__attribute__((__bounded__(__minbytes__,1,SHA512_256_DIGEST_LENGTH)));
160char *SHA512_256End(SHA2_CTX *, char *)
161	__attribute__((__bounded__(__minbytes__,2,SHA512_256_DIGEST_STRING_LENGTH)));
162char *SHA512_256File(const char *, char *)
163	__attribute__((__bounded__(__minbytes__,2,SHA512_256_DIGEST_STRING_LENGTH)));
164char *SHA512_256FileChunk(const char *, char *, off_t, off_t)
165	__attribute__((__bounded__(__minbytes__,2,SHA512_256_DIGEST_STRING_LENGTH)));
166char *SHA512_256Data(const u_int8_t *, size_t, char *)
167	__attribute__((__bounded__(__string__,1,2)))
168	__attribute__((__bounded__(__minbytes__,3,SHA512_256_DIGEST_STRING_LENGTH)));
169__END_DECLS
170#endif /* 0 */
171
172#endif /* HAVE_SHA{256,384,512}UPDATE */
173
174#endif /* _SSHSHA2_H */