123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- /*
- ---------------------------------------------------------------------------
- Copyright (c) 2002, Dr Brian Gladman, Worcester, UK. All rights reserved.
- LICENSE TERMS
- The free distribution and use of this software in both source and binary
- form is allowed (with or without changes) provided that:
- 1. distributions of this source code include the above copyright
- notice, this list of conditions and the following disclaimer;
- 2. distributions in binary form include the above copyright
- notice, this list of conditions and the following disclaimer
- in the documentation and/or other associated materials;
- 3. the copyright holder's name is not used to endorse products
- built using this software without specific written permission.
- ALTERNATIVELY, provided that this notice is retained in full, this product
- may be distributed under the terms of the GNU General Public License (GPL),
- in which case the provisions of the GPL apply INSTEAD OF those given above.
- DISCLAIMER
- This software is provided 'as is' with no explicit or implied warranties
- in respect of its properties, including, but not limited to, correctness
- and/or fitness for purpose.
- ---------------------------------------------------------------------------
- Issue Date: 01/08/2005
- */
- #ifndef _SHA2_H
- #define _SHA2_H
- #include <stdlib.h>
- #define SHA_64BIT
- /* define the hash functions that you need */
- #define SHA_2 /* for dynamic hash length */
- #define SHA_224
- #define SHA_256
- #ifdef SHA_64BIT
- # define SHA_384
- # define SHA_512
- # define NEED_UINT_64T
- #endif
- #include "brg_types.h"
- #if defined(__cplusplus)
- extern "C"
- {
- #endif
- /* Note that the following function prototypes are the same */
- /* for both the bit and byte oriented implementations. But */
- /* the length fields are in bytes or bits as is appropriate */
- /* for the version used. Bit sequences are arrays of bytes */
- /* in which bit sequence indexes increase from the most to */
- /* the least significant end of each byte */
- #define SHA224_DIGEST_SIZE 28
- #define SHA224_BLOCK_SIZE 64
- #define SHA256_DIGEST_SIZE 32
- #define SHA256_BLOCK_SIZE 64
- /* type to hold the SHA256 (and SHA224) context */
- typedef struct
- { uint_32t count[2];
- uint_32t hash[8];
- uint_32t wbuf[16];
- } sha256_ctx;
- typedef sha256_ctx sha224_ctx;
- VOID_RETURN sha256_compile(sha256_ctx ctx[1]);
- VOID_RETURN sha224_begin(sha224_ctx ctx[1]);
- #define sha224_hash sha256_hash
- VOID_RETURN sha224_end(unsigned char hval[], sha224_ctx ctx[1]);
- VOID_RETURN sha224(unsigned char hval[], const unsigned char data[], unsigned long len);
- VOID_RETURN sha256_begin(sha256_ctx ctx[1]);
- VOID_RETURN sha256_hash(const unsigned char data[], unsigned long len, sha256_ctx ctx[1]);
- VOID_RETURN sha256_end(unsigned char hval[], sha256_ctx ctx[1]);
- VOID_RETURN sha256(unsigned char hval[], const unsigned char data[], unsigned long len);
- #ifndef SHA_64BIT
- typedef struct
- { union
- { sha256_ctx ctx256[1];
- } uu[1];
- uint_32t sha2_len;
- } sha2_ctx;
- #define SHA2_MAX_DIGEST_SIZE SHA256_DIGEST_SIZE
- #else
- #define SHA384_DIGEST_SIZE 48
- #define SHA384_BLOCK_SIZE 128
- #define SHA512_DIGEST_SIZE 64
- #define SHA512_BLOCK_SIZE 128
- #define SHA2_MAX_DIGEST_SIZE SHA512_DIGEST_SIZE
- /* type to hold the SHA384 (and SHA512) context */
- typedef struct
- { uint_64t count[2];
- uint_64t hash[8];
- uint_64t wbuf[16];
- } sha512_ctx;
- typedef sha512_ctx sha384_ctx;
- typedef struct
- { union
- { sha256_ctx ctx256[1];
- sha512_ctx ctx512[1];
- } uu[1];
- uint_32t sha2_len;
- } sha2_ctx;
- VOID_RETURN sha512_compile(sha512_ctx ctx[1]);
- VOID_RETURN sha384_begin(sha384_ctx ctx[1]);
- #define sha384_hash sha512_hash
- VOID_RETURN sha384_end(unsigned char hval[], sha384_ctx ctx[1]);
- VOID_RETURN sha384(unsigned char hval[], const unsigned char data[], unsigned long len);
- VOID_RETURN sha512_begin(sha512_ctx ctx[1]);
- VOID_RETURN sha512_hash(const unsigned char data[], unsigned long len, sha512_ctx ctx[1]);
- VOID_RETURN sha512_end(unsigned char hval[], sha512_ctx ctx[1]);
- VOID_RETURN sha512(unsigned char hval[], const unsigned char data[], unsigned long len);
- INT_RETURN sha2_begin(unsigned long size, sha2_ctx ctx[1]);
- VOID_RETURN sha2_hash(const unsigned char data[], unsigned long len, sha2_ctx ctx[1]);
- VOID_RETURN sha2_end(unsigned char hval[], sha2_ctx ctx[1]);
- INT_RETURN sha2(unsigned char hval[], unsigned long size, const unsigned char data[], unsigned long len);
- #endif
- #if defined(__cplusplus)
- }
- #endif
- #endif
|