/* -*-c-*-
*
- * $Id: sha256.h,v 1.1 2000/10/15 17:48:15 mdw Exp $
+ * $Id: sha256.h,v 1.4 2004/04/08 01:36:15 mdw Exp $
*
* Implementation of the SHA-256 hash function
*
* 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 ----------------------------------*
*
* SHA-1 (Secure Hash Algorithm) was designed by the NSA, for use with the
#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 -------------------------------------------------*/