1/** 2 * \file sha1.h 3 * based from http://xyssl.org/code/source/sha1/ 4 * FIPS-180-1 compliant SHA-1 implementation 5 * 6 * Copyright (C) 2003-2006 Christophe Devine 7 * 8 * This library is free software; you can redistribute it and/or 9 * modify it under the terms of the GNU Lesser General Public 10 * License, version 2.1 as published by the Free Software Foundation. 11 * 12 * This library is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 * Lesser General Public License for more details. 16 * 17 * You should have received a copy of the GNU Lesser General Public 18 * License along with this library; if not, write to the Free Software 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 20 * MA 02110-1301 USA 21 */ 22/* 23 * The SHA-1 standard was published by NIST in 1993. 24 * 25 * http://www.itl.nist.gov/fipspubs/fip180-1.htm 26 */ 27#ifndef _SHA1_H 28#define _SHA1_H 29 30#ifdef __cplusplus 31extern "C" { 32#endif 33 34#define SHA1_SUM_POS -0x20 35#define SHA1_SUM_LEN 20 36 37/** 38 * \brief SHA-1 context structure 39 */ 40typedef struct 41{ 42 unsigned long total[2]; /*!< number of bytes processed */ 43 unsigned long state[5]; /*!< intermediate digest state */ 44 unsigned char buffer[64]; /*!< data block being processed */ 45} 46sha1_context; 47 48/** 49 * \brief SHA-1 context setup 50 * 51 * \param ctx SHA-1 context to be initialized 52 */ 53void sha1_starts( sha1_context *ctx ); 54 55/** 56 * \brief SHA-1 process buffer 57 * 58 * \param ctx SHA-1 context 59 * \param input buffer holding the data 60 * \param ilen length of the input data 61 */ 62void sha1_update( sha1_context *ctx, unsigned char *input, int ilen ); 63 64/** 65 * \brief SHA-1 final digest 66 * 67 * \param ctx SHA-1 context 68 * \param output SHA-1 checksum result 69 */ 70void sha1_finish( sha1_context *ctx, unsigned char output[20] ); 71 72/** 73 * \brief Output = SHA-1( input buffer ) 74 * 75 * \param input buffer holding the data 76 * \param ilen length of the input data 77 * \param output SHA-1 checksum result 78 */ 79void sha1_csum( unsigned char *input, int ilen, 80 unsigned char output[20] ); 81 82/** 83 * \brief Output = SHA-1( input buffer ), with watchdog triggering 84 * 85 * \param input buffer holding the data 86 * \param ilen length of the input data 87 * \param output SHA-1 checksum result 88 * \param chunk_sz watchdog triggering period (in bytes of input processed) 89 */ 90void sha1_csum_wd (unsigned char *input, int ilen, 91 unsigned char output[20], unsigned int chunk_sz); 92 93/** 94 * \brief Output = SHA-1( file contents ) 95 * 96 * \param path input file name 97 * \param output SHA-1 checksum result 98 * \return 0 if successful, or 1 if fopen failed 99 */ 100int sha1_file( char *path, unsigned char output[20] ); 101 102/** 103 * \brief Output = HMAC-SHA-1( input buffer, hmac key ) 104 * 105 * \param key HMAC secret key 106 * \param keylen length of the HMAC key 107 * \param input buffer holding the data 108 * \param ilen length of the input data 109 * \param output HMAC-SHA-1 result 110 */ 111void sha1_hmac( unsigned char *key, int keylen, 112 unsigned char *input, int ilen, 113 unsigned char output[20] ); 114 115/** 116 * \brief Checkup routine 117 * 118 * \return 0 if successful, or 1 if the test failed 119 */ 120int sha1_self_test( void ); 121 122#ifdef __cplusplus 123} 124#endif 125 126#endif /* sha1.h */ 127