X-Git-Url: https://git.distorted.org.uk/u/mdw/catacomb/blobdiff_plain/c850c0da81ad9f72315f8e6e26bdfbd98daf9d89..7fb0660b6d7237a7ec859459b2e511eebc0dcdb5:/sha256.h diff --git a/sha256.h b/sha256.h index 50d61fa..7b21dd2 100644 --- a/sha256.h +++ b/sha256.h @@ -1,13 +1,13 @@ /* -*-c-*- * - * $Id: sha256.h,v 1.2 2000/10/15 19:09:20 mdw Exp $ + * $Id$ * * Implementation of the SHA-256 hash function * * (c) 2000 Straylight/Edgeware */ -/*----- Licensing notice --------------------------------------------------* +/*----- Licensing notice --------------------------------------------------* * * This file is part of Catacomb. * @@ -15,31 +15,19 @@ * 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.2 2000/10/15 19:09:20 mdw - * Support HMAC mode for hash functions which need to store more state than - * the hash output size. - * - * 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 @@ -49,6 +37,7 @@ #ifndef CATACOMB_SHA256_H #define CATACOMB_SHA256_H +#define CATACOMB_SHA224_H #ifdef __cplusplus extern "C" { @@ -68,6 +57,10 @@ #define SHA256_HASHSZ 32 #define SHA256_STATESZ 32 +#define SHA224_BUFSZ 64 +#define SHA224_HASHSZ 28 +#define SHA224_STATESZ 32 + /*----- Data structures ---------------------------------------------------*/ typedef struct sha256_ctx { @@ -75,11 +68,11 @@ typedef struct sha256_ctx { 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 @@ -90,8 +83,9 @@ typedef struct sha256_ctx { */ 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 * @@ -101,8 +95,9 @@ extern void sha256_compress(sha256_ctx */*ctx*/, const void */*sbuf*/); */ 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 @@ -117,8 +112,9 @@ extern void sha256_init(sha256_ctx */*ctx*/); 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 @@ -132,8 +128,9 @@ extern void sha256_set(sha256_ctx */*ctx*/, const void */*buf*/, 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 @@ -144,8 +141,9 @@ extern void sha256_hash(sha256_ctx */*ctx*/, */ 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 @@ -157,10 +155,12 @@ extern void sha256_done(sha256_ctx */*ctx*/, void */*hash*/); */ 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 -------------------------------------------------*/