152 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			152 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 ---------------------------------------------------------------------------
							 | 
						||
| 
								 | 
							
								 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
							 |