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