michael@0: /* michael@0: * sha1.h michael@0: * michael@0: * interface to the Secure Hash Algorithm v.1 (SHA-1), specified in michael@0: * FIPS 180-1 michael@0: * michael@0: * David A. McGrew michael@0: * Cisco Systems, Inc. michael@0: */ michael@0: michael@0: /* michael@0: * michael@0: * Copyright (c) 2001-2006, Cisco Systems, Inc. michael@0: * All rights reserved. michael@0: * michael@0: * Redistribution and use in source and binary forms, with or without michael@0: * modification, are permitted provided that the following conditions michael@0: * are met: michael@0: * michael@0: * Redistributions of source code must retain the above copyright michael@0: * notice, this list of conditions and the following disclaimer. michael@0: * michael@0: * Redistributions in binary form must reproduce the above michael@0: * copyright notice, this list of conditions and the following michael@0: * disclaimer in the documentation and/or other materials provided michael@0: * with the distribution. michael@0: * michael@0: * Neither the name of the Cisco Systems, Inc. nor the names of its michael@0: * contributors may be used to endorse or promote products derived michael@0: * from this software without specific prior written permission. michael@0: * michael@0: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS michael@0: * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT michael@0: * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS michael@0: * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE michael@0: * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, michael@0: * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES michael@0: * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR michael@0: * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) michael@0: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, michael@0: * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) michael@0: * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED michael@0: * OF THE POSSIBILITY OF SUCH DAMAGE. michael@0: * michael@0: */ michael@0: michael@0: #ifndef SHA1_H michael@0: #define SHA1_H michael@0: michael@0: #include "err.h" michael@0: #include "datatypes.h" michael@0: michael@0: typedef struct { michael@0: uint32_t H[5]; /* state vector */ michael@0: uint32_t M[16]; /* message buffer */ michael@0: int octets_in_buffer; /* octets of message in buffer */ michael@0: uint32_t num_bits_in_msg; /* total number of bits in message */ michael@0: } sha1_ctx_t; michael@0: michael@0: /* michael@0: * sha1(&ctx, msg, len, output) hashes the len octets starting at msg michael@0: * into the SHA1 context, then writes the result to the 20 octets at michael@0: * output michael@0: * michael@0: */ michael@0: michael@0: void michael@0: sha1(const uint8_t *message, int octets_in_msg, uint32_t output[5]); michael@0: michael@0: /* michael@0: * sha1_init(&ctx) initializes the SHA1 context ctx michael@0: * michael@0: * sha1_update(&ctx, msg, len) hashes the len octets starting at msg michael@0: * into the SHA1 context michael@0: * michael@0: * sha1_final(&ctx, output) performs the final processing of the SHA1 michael@0: * context and writes the result to the 20 octets at output michael@0: * michael@0: */ michael@0: michael@0: void michael@0: sha1_init(sha1_ctx_t *ctx); michael@0: michael@0: void michael@0: sha1_update(sha1_ctx_t *ctx, const uint8_t *M, int octets_in_msg); michael@0: michael@0: void michael@0: sha1_final(sha1_ctx_t *ctx, uint32_t output[5]); michael@0: michael@0: /* michael@0: * The sha1_core function is INTERNAL to SHA-1, but it is declared michael@0: * here because it is also used by the cipher SEAL 3.0 in its key michael@0: * setup algorithm. michael@0: */ michael@0: michael@0: /* michael@0: * sha1_core(M, H) computes the core sha1 compression function, where M is michael@0: * the next part of the message and H is the intermediate state {H0, michael@0: * H1, ...} michael@0: * michael@0: * this function does not do any of the padding required in the michael@0: * complete sha1 function michael@0: */ michael@0: michael@0: void michael@0: sha1_core(const uint32_t M[16], uint32_t hash_value[5]); michael@0: michael@0: #endif /* SHA1_H */