Home | History | Annotate | Download | only in hmac_sha
      1 /*
      2  * FIPS 180-2 SHA-224/256/384/512 implementation
      3  * Last update: 02/02/2007
      4  * Issue date:  04/30/2005
      5  *
      6  * Since this code has been incorporated into a GPLv2 project, it is
      7  * distributed under GPLv2 inside mmc-utils.  The original BSD license
      8  * that the code was released under is included below for clarity.
      9  *
     10  * Copyright (C) 2005, 2007 Olivier Gay <olivier.gay (at) a3.epfl.ch>
     11  * All rights reserved.
     12  *
     13  * Redistribution and use in source and binary forms, with or without
     14  * modification, are permitted provided that the following conditions
     15  * are met:
     16  * 1. Redistributions of source code must retain the above copyright
     17  *    notice, this list of conditions and the following disclaimer.
     18  * 2. Redistributions in binary form must reproduce the above copyright
     19  *    notice, this list of conditions and the following disclaimer in the
     20  *    documentation and/or other materials provided with the distribution.
     21  * 3. Neither the name of the project nor the names of its contributors
     22  *    may be used to endorse or promote products derived from this software
     23  *    without specific prior written permission.
     24  *
     25  * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
     26  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     27  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     28  * ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
     29  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     30  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     31  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     32  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     33  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     34  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     35  * SUCH DAMAGE.
     36  */
     37 
     38 #ifndef SHA2_H
     39 #define SHA2_H
     40 
     41 #define SHA224_DIGEST_SIZE ( 224 / 8)
     42 #define SHA256_DIGEST_SIZE ( 256 / 8)
     43 #define SHA384_DIGEST_SIZE ( 384 / 8)
     44 #define SHA512_DIGEST_SIZE ( 512 / 8)
     45 
     46 #define SHA256_BLOCK_SIZE  ( 512 / 8)
     47 #define SHA512_BLOCK_SIZE  (1024 / 8)
     48 #define SHA384_BLOCK_SIZE  SHA512_BLOCK_SIZE
     49 #define SHA224_BLOCK_SIZE  SHA256_BLOCK_SIZE
     50 
     51 #ifndef SHA2_TYPES
     52 #define SHA2_TYPES
     53 typedef unsigned char uint8;
     54 typedef unsigned int  uint32;
     55 typedef unsigned long long uint64;
     56 #endif
     57 
     58 #ifdef __cplusplus
     59 extern "C" {
     60 #endif
     61 
     62 typedef struct {
     63     unsigned int tot_len;
     64     unsigned int len;
     65     unsigned char block[2 * SHA256_BLOCK_SIZE];
     66     uint32 h[8];
     67 } sha256_ctx;
     68 
     69 typedef struct {
     70     unsigned int tot_len;
     71     unsigned int len;
     72     unsigned char block[2 * SHA512_BLOCK_SIZE];
     73     uint64 h[8];
     74 } sha512_ctx;
     75 
     76 typedef sha512_ctx sha384_ctx;
     77 typedef sha256_ctx sha224_ctx;
     78 
     79 void sha224_init(sha224_ctx *ctx);
     80 void sha224_update(sha224_ctx *ctx, const unsigned char *message,
     81                    unsigned int len);
     82 void sha224_final(sha224_ctx *ctx, unsigned char *digest);
     83 void sha224(const unsigned char *message, unsigned int len,
     84             unsigned char *digest);
     85 
     86 void sha256_init(sha256_ctx * ctx);
     87 void sha256_update(sha256_ctx *ctx, const unsigned char *message,
     88                    unsigned int len);
     89 void sha256_final(sha256_ctx *ctx, unsigned char *digest);
     90 void sha256(const unsigned char *message, unsigned int len,
     91             unsigned char *digest);
     92 
     93 void sha384_init(sha384_ctx *ctx);
     94 void sha384_update(sha384_ctx *ctx, const unsigned char *message,
     95                    unsigned int len);
     96 void sha384_final(sha384_ctx *ctx, unsigned char *digest);
     97 void sha384(const unsigned char *message, unsigned int len,
     98             unsigned char *digest);
     99 
    100 void sha512_init(sha512_ctx *ctx);
    101 void sha512_update(sha512_ctx *ctx, const unsigned char *message,
    102                    unsigned int len);
    103 void sha512_final(sha512_ctx *ctx, unsigned char *digest);
    104 void sha512(const unsigned char *message, unsigned int len,
    105             unsigned char *digest);
    106 
    107 #ifdef __cplusplus
    108 }
    109 #endif
    110 
    111 #endif /* !SHA2_H */
    112 
    113