/* -*-c-*-
*
- * $Id: sha256.h,v 1.1 2000/10/15 17:48:15 mdw Exp $
+ * $Id$
*
* Implementation of the SHA-256 hash function
*
* (c) 2000 Straylight/Edgeware
*/
-/*----- Licensing notice --------------------------------------------------*
+/*----- Licensing notice --------------------------------------------------*
*
* This file is part of Catacomb.
*
* it under the terms of the GNU Library General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
- *
+ *
* Catacomb is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Library General Public License for more details.
- *
+ *
* You should have received a copy of the GNU Library General Public
* License along with Catacomb; if not, write to the Free
* Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
* MA 02111-1307, USA.
*/
-/*----- Revision history --------------------------------------------------*
- *
- * $Log: sha256.h,v $
- * Revision 1.1 2000/10/15 17:48:15 mdw
- * New SHA variants with longer outputs.
- *
- */
-
-/*----- Notes on the SHA-256 hash function ----------------------------------*
+/*----- Notes on the SHA-256 hash function --------------------------------*
*
* SHA-1 (Secure Hash Algorithm) was designed by the NSA, for use with the
* Digital Signature Algorithm. This is an evolution with a larger output
#ifndef CATACOMB_SHA256_H
#define CATACOMB_SHA256_H
+#define CATACOMB_SHA224_H
#ifdef __cplusplus
extern "C" {
#define SHA256_BUFSZ 64
#define SHA256_HASHSZ 32
+#define SHA256_STATESZ 32
+
+#define SHA224_BUFSZ 64
+#define SHA224_HASHSZ 28
+#define SHA224_STATESZ 32
/*----- Data structures ---------------------------------------------------*/
uint32 nl, nh; /* Byte count so far */
unsigned off; /* Offset into buffer */
octet buf[SHA256_BUFSZ]; /* Accumulation buffer */
-} sha256_ctx;
+} sha256_ctx, sha224_ctx;
/*----- Functions provided ------------------------------------------------*/
-/* --- @sha256_compress@ --- *
+/* --- @sha256_compress@, @sha224_compress@ --- *
*
* Arguments: @sha256_ctx *ctx@ = pointer to context block
* @const void *sbuf@ = pointer to buffer of appropriate size
*/
extern void sha256_compress(sha256_ctx */*ctx*/, const void */*sbuf*/);
+#define sha224_compress sha256_compress
-/* --- @sha256_init@ --- *
+/* --- @sha256_init@, @sha224_init@ --- *
*
* Arguments: @sha256_ctx *ctx@ = pointer to context block to initialize
*
*/
extern void sha256_init(sha256_ctx */*ctx*/);
+extern void sha224_init(sha256_ctx */*ctx*/);
-/* --- @sha256_set@ --- *
+/* --- @sha256_set@, @sha224_set@ --- *
*
* Arguments: @sha256_ctx *ctx@ = pointer to context block
* @const void *buf@ = pointer to state buffer
extern void sha256_set(sha256_ctx */*ctx*/, const void */*buf*/,
unsigned long /*count*/);
+#define sha224_set sha256_set
-/* --- @sha256_hash@ --- *
+/* --- @sha256_hash@, @sha224_hash@ --- *
*
* Arguments: @sha256_ctx *ctx@ = pointer to context block
* @const void *buf@ = buffer of data to hash
extern void sha256_hash(sha256_ctx */*ctx*/,
const void */*buf*/, size_t /*sz*/);
+#define sha224_hash sha256_hash
-/* --- @sha256_done@ --- *
+/* --- @sha256_done@, @sha224_done@ --- *
*
* Arguments: @sha256_ctx *ctx@ = pointer to context block
* @void *hash@ = pointer to output buffer
*/
extern void sha256_done(sha256_ctx */*ctx*/, void */*hash*/);
+extern void sha224_done(sha256_ctx */*ctx*/, void */*hash*/);
-/* --- @sha256_state@ --- *
+/* --- @sha256_state@, @sha224_state@ --- *
*
* Arguments: @sha256_ctx *ctx@ = pointer to context
* @void *state@ = pointer to buffer for current state
*/
extern unsigned long sha256_state(sha256_ctx */*ctx*/, void */*state*/);
+#define sha224_state sha256_state
/*----- Generic hash interface --------------------------------------------*/
extern const gchash sha256;
+extern const gchash sha224;
/*----- That's all, folks -------------------------------------------------*/