Return to sha1.h CVS log | Up to [ELWIX - Embedded LightWeight unIX -] / elwix / tools / uboot_mkimage / include |
1.1 ! misho 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 ! 31: extern "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: */ ! 40: typedef 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: } ! 46: sha1_context; ! 47: ! 48: /** ! 49: * \brief SHA-1 context setup ! 50: * ! 51: * \param ctx SHA-1 context to be initialized ! 52: */ ! 53: void 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: */ ! 62: void 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: */ ! 70: void 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: */ ! 79: void 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: */ ! 90: void 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: */ ! 100: int 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: */ ! 111: void 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: */ ! 120: int sha1_self_test( void ); ! 121: ! 122: #ifdef __cplusplus ! 123: } ! 124: #endif ! 125: ! 126: #endif /* sha1.h */