Home | History | Annotate | Download | only in hmac_sha
      1 /*
      2  * HMAC-SHA-224/256/384/512 implementation
      3  * Last update: 06/15/2005
      4  * Issue date:  06/15/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 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 HMAC_SHA2_H
     39 #define HMAC_SHA2_H
     40 
     41 #include "sha2.h"
     42 
     43 #ifdef __cplusplus
     44 extern "C" {
     45 #endif
     46 
     47 typedef struct {
     48     sha224_ctx ctx_inside;
     49     sha224_ctx ctx_outside;
     50 
     51     /* for hmac_reinit */
     52     sha224_ctx ctx_inside_reinit;
     53     sha224_ctx ctx_outside_reinit;
     54 
     55     unsigned char block_ipad[SHA224_BLOCK_SIZE];
     56     unsigned char block_opad[SHA224_BLOCK_SIZE];
     57 } hmac_sha224_ctx;
     58 
     59 typedef struct {
     60     sha256_ctx ctx_inside;
     61     sha256_ctx ctx_outside;
     62 
     63     /* for hmac_reinit */
     64     sha256_ctx ctx_inside_reinit;
     65     sha256_ctx ctx_outside_reinit;
     66 
     67     unsigned char block_ipad[SHA256_BLOCK_SIZE];
     68     unsigned char block_opad[SHA256_BLOCK_SIZE];
     69 } hmac_sha256_ctx;
     70 
     71 typedef struct {
     72     sha384_ctx ctx_inside;
     73     sha384_ctx ctx_outside;
     74 
     75     /* for hmac_reinit */
     76     sha384_ctx ctx_inside_reinit;
     77     sha384_ctx ctx_outside_reinit;
     78 
     79     unsigned char block_ipad[SHA384_BLOCK_SIZE];
     80     unsigned char block_opad[SHA384_BLOCK_SIZE];
     81 } hmac_sha384_ctx;
     82 
     83 typedef struct {
     84     sha512_ctx ctx_inside;
     85     sha512_ctx ctx_outside;
     86 
     87     /* for hmac_reinit */
     88     sha512_ctx ctx_inside_reinit;
     89     sha512_ctx ctx_outside_reinit;
     90 
     91     unsigned char block_ipad[SHA512_BLOCK_SIZE];
     92     unsigned char block_opad[SHA512_BLOCK_SIZE];
     93 } hmac_sha512_ctx;
     94 
     95 void hmac_sha224_init(hmac_sha224_ctx *ctx, const unsigned char *key,
     96                       unsigned int key_size);
     97 void hmac_sha224_reinit(hmac_sha224_ctx *ctx);
     98 void hmac_sha224_update(hmac_sha224_ctx *ctx, const unsigned char *message,
     99                         unsigned int message_len);
    100 void hmac_sha224_final(hmac_sha224_ctx *ctx, unsigned char *mac,
    101                        unsigned int mac_size);
    102 void hmac_sha224(const unsigned char *key, unsigned int key_size,
    103                  const unsigned char *message, unsigned int message_len,
    104                  unsigned char *mac, unsigned mac_size);
    105 
    106 void hmac_sha256_init(hmac_sha256_ctx *ctx, const unsigned char *key,
    107                       unsigned int key_size);
    108 void hmac_sha256_reinit(hmac_sha256_ctx *ctx);
    109 void hmac_sha256_update(hmac_sha256_ctx *ctx, const unsigned char *message,
    110                         unsigned int message_len);
    111 void hmac_sha256_final(hmac_sha256_ctx *ctx, unsigned char *mac,
    112                        unsigned int mac_size);
    113 void hmac_sha256(const unsigned char *key, unsigned int key_size,
    114                  const unsigned char *message, unsigned int message_len,
    115                  unsigned char *mac, unsigned mac_size);
    116 
    117 void hmac_sha384_init(hmac_sha384_ctx *ctx, const unsigned char *key,
    118                       unsigned int key_size);
    119 void hmac_sha384_reinit(hmac_sha384_ctx *ctx);
    120 void hmac_sha384_update(hmac_sha384_ctx *ctx, const unsigned char *message,
    121                         unsigned int message_len);
    122 void hmac_sha384_final(hmac_sha384_ctx *ctx, unsigned char *mac,
    123                        unsigned int mac_size);
    124 void hmac_sha384(const unsigned char *key, unsigned int key_size,
    125                  const unsigned char *message, unsigned int message_len,
    126                  unsigned char *mac, unsigned mac_size);
    127 
    128 void hmac_sha512_init(hmac_sha512_ctx *ctx, const unsigned char *key,
    129                       unsigned int key_size);
    130 void hmac_sha512_reinit(hmac_sha512_ctx *ctx);
    131 void hmac_sha512_update(hmac_sha512_ctx *ctx, const unsigned char *message,
    132                         unsigned int message_len);
    133 void hmac_sha512_final(hmac_sha512_ctx *ctx, unsigned char *mac,
    134                        unsigned int mac_size);
    135 void hmac_sha512(const unsigned char *key, unsigned int key_size,
    136                  const unsigned char *message, unsigned int message_len,
    137                  unsigned char *mac, unsigned mac_size);
    138 
    139 #ifdef __cplusplus
    140 }
    141 #endif
    142 
    143 #endif /* !HMAC_SHA2_H */
    144 
    145