Annotation of truecrypt/crypto/sha2.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  ---------------------------------------------------------------------------
                      3:  Copyright (c) 2002, Dr Brian Gladman, Worcester, UK.   All rights reserved.
                      4: 
                      5:  LICENSE TERMS
                      6: 
                      7:  The free distribution and use of this software in both source and binary
                      8:  form is allowed (with or without changes) provided that:
                      9: 
                     10:    1. distributions of this source code include the above copyright
                     11:       notice, this list of conditions and the following disclaimer;
                     12: 
                     13:    2. distributions in binary form include the above copyright
                     14:       notice, this list of conditions and the following disclaimer
                     15:       in the documentation and/or other associated materials;
                     16: 
                     17:    3. the copyright holder's name is not used to endorse products
                     18:       built using this software without specific written permission.
                     19: 
                     20:  ALTERNATIVELY, provided that this notice is retained in full, this product
                     21:  may be distributed under the terms of the GNU General Public License (GPL),
                     22:  in which case the provisions of the GPL apply INSTEAD OF those given above.
                     23: 
                     24:  DISCLAIMER
                     25: 
                     26:  This software is provided 'as is' with no explicit or implied warranties
                     27:  in respect of its properties, including, but not limited to, correctness
                     28:  and/or fitness for purpose.
                     29:  ---------------------------------------------------------------------------
                     30:  Issue Date: 01/08/2005
                     31: */
                     32: 
                     33: #ifndef _SHA2_H
                     34: #define _SHA2_H
                     35: 
                     36: #include "Common/Tcdefs.h"
                     37: #include "Common/Endian.h"
                     38: 
                     39: #define SHA_64BIT
                     40: 
                     41: /* define the hash functions that you need  */
                     42: #define SHA_2   /* for dynamic hash length  */
                     43: #define SHA_224
                     44: #define SHA_256
                     45: #ifdef SHA_64BIT
                     46: #  define SHA_384
                     47: #  define SHA_512
                     48: #  define NEED_UINT_64T
                     49: #endif
                     50: 
                     51: #ifndef EXIT_SUCCESS
                     52: #define EXIT_SUCCESS    0
                     53: #define EXIT_FAILURE    1
                     54: #endif
                     55: 
                     56: #define li_64(h) 0x##h##ull
                     57: 
                     58: #define VOID_RETURN    void
                     59: #define INT_RETURN     int
                     60: 
                     61: #if defined(__cplusplus)
                     62: extern "C"
                     63: {
                     64: #endif
                     65: 
                     66: /* Note that the following function prototypes are the same */
                     67: /* for both the bit and byte oriented implementations.  But */
                     68: /* the length fields are in bytes or bits as is appropriate */
                     69: /* for the version used.  Bit sequences are arrays of bytes */
                     70: /* in which bit sequence indexes increase from the most to  */
                     71: /* the least significant end of each byte                   */
                     72: 
                     73: #define SHA224_DIGEST_SIZE  28
                     74: #define SHA224_BLOCK_SIZE   64
                     75: #define SHA256_DIGEST_SIZE  32
                     76: #define SHA256_BLOCK_SIZE   64
                     77: 
                     78: /* type to hold the SHA256 (and SHA224) context */
                     79: 
                     80: typedef struct
                     81: {   uint_32t count[2];
                     82:     uint_32t hash[8];
                     83:     uint_32t wbuf[16];
                     84: } sha256_ctx;
                     85: 
                     86: typedef sha256_ctx  sha224_ctx;
                     87: 
                     88: VOID_RETURN sha256_compile(sha256_ctx ctx[1]);
                     89: 
                     90: VOID_RETURN sha224_begin(sha224_ctx ctx[1]);
                     91: #define sha224_hash sha256_hash
                     92: VOID_RETURN sha224_end(unsigned char hval[], sha224_ctx ctx[1]);
                     93: VOID_RETURN sha224(unsigned char hval[], const unsigned char data[], unsigned long len);
                     94: 
                     95: VOID_RETURN sha256_begin(sha256_ctx ctx[1]);
                     96: VOID_RETURN sha256_hash(const unsigned char data[], unsigned long len, sha256_ctx ctx[1]);
                     97: VOID_RETURN sha256_end(unsigned char hval[], sha256_ctx ctx[1]);
                     98: VOID_RETURN sha256(unsigned char hval[], const unsigned char data[], unsigned long len);
                     99: 
                    100: #ifndef SHA_64BIT
                    101: 
                    102: typedef struct
                    103: {   union
                    104:     { sha256_ctx  ctx256[1];
                    105:     } uu[1];
                    106:     uint_32t    sha2_len;
                    107: } sha2_ctx;
                    108: 
                    109: #define SHA2_MAX_DIGEST_SIZE    SHA256_DIGEST_SIZE
                    110: 
                    111: #else
                    112: 
                    113: #define SHA384_DIGEST_SIZE  48
                    114: #define SHA384_BLOCK_SIZE  128
                    115: #define SHA512_DIGEST_SIZE  64
                    116: #define SHA512_BLOCK_SIZE  128
                    117: #define SHA2_MAX_DIGEST_SIZE    SHA512_DIGEST_SIZE
                    118: 
                    119: /* type to hold the SHA384 (and SHA512) context */
                    120: 
                    121: typedef struct
                    122: {   uint_64t count[2];
                    123:     uint_64t hash[8];
                    124:     uint_64t wbuf[16];
                    125: } sha512_ctx;
                    126: 
                    127: typedef sha512_ctx  sha384_ctx;
                    128: 
                    129: typedef struct
                    130: {   union
                    131:     { sha256_ctx  ctx256[1];
                    132:       sha512_ctx  ctx512[1];
                    133:     } uu[1];
                    134:     uint_32t    sha2_len;
                    135: } sha2_ctx;
                    136: 
                    137: VOID_RETURN sha512_compile(sha512_ctx ctx[1]);
                    138: 
                    139: VOID_RETURN sha384_begin(sha384_ctx ctx[1]);
                    140: #define sha384_hash sha512_hash
                    141: VOID_RETURN sha384_end(unsigned char hval[], sha384_ctx ctx[1]);
                    142: VOID_RETURN sha384(unsigned char hval[], const unsigned char data[], unsigned long len);
                    143: 
                    144: VOID_RETURN sha512_begin(sha512_ctx ctx[1]);
                    145: VOID_RETURN sha512_hash(const unsigned char data[], unsigned long len, sha512_ctx ctx[1]);
                    146: VOID_RETURN sha512_end(unsigned char hval[], sha512_ctx ctx[1]);
                    147: VOID_RETURN sha512(unsigned char hval[], const unsigned char data[], unsigned long len);
                    148: 
                    149: INT_RETURN  sha2_begin(unsigned long size, sha2_ctx ctx[1]);
                    150: VOID_RETURN sha2_hash(const unsigned char data[], unsigned long len, sha2_ctx ctx[1]);
                    151: VOID_RETURN sha2_end(unsigned char hval[], sha2_ctx ctx[1]);
                    152: INT_RETURN  sha2(unsigned char hval[], unsigned long size, const unsigned char data[], unsigned long len);
                    153: 
                    154: #endif
                    155: 
                    156: #if defined(__cplusplus)
                    157: }
                    158: #endif
                    159: 
                    160: #endif

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.