12b9912e6SJeroen Hofstee /** 22b9912e6SJeroen Hofstee * \file sha1.h 32b9912e6SJeroen Hofstee * based from http://xyssl.org/code/source/sha1/ 42b9912e6SJeroen Hofstee * FIPS-180-1 compliant SHA-1 implementation 52b9912e6SJeroen Hofstee * 62b9912e6SJeroen Hofstee * Copyright (C) 2003-2006 Christophe Devine 72b9912e6SJeroen Hofstee * 8*5b8031ccSTom Rini * SPDX-License-Identifier: LGPL-2.1 92b9912e6SJeroen Hofstee */ 102b9912e6SJeroen Hofstee /* 112b9912e6SJeroen Hofstee * The SHA-1 standard was published by NIST in 1993. 122b9912e6SJeroen Hofstee * 132b9912e6SJeroen Hofstee * http://www.itl.nist.gov/fipspubs/fip180-1.htm 142b9912e6SJeroen Hofstee */ 152b9912e6SJeroen Hofstee #ifndef _SHA1_H 162b9912e6SJeroen Hofstee #define _SHA1_H 172b9912e6SJeroen Hofstee 182b9912e6SJeroen Hofstee #ifdef __cplusplus 192b9912e6SJeroen Hofstee extern "C" { 202b9912e6SJeroen Hofstee #endif 212b9912e6SJeroen Hofstee 222b9912e6SJeroen Hofstee #define SHA1_SUM_POS -0x20 232b9912e6SJeroen Hofstee #define SHA1_SUM_LEN 20 242b9912e6SJeroen Hofstee 252b9912e6SJeroen Hofstee /** 262b9912e6SJeroen Hofstee * \brief SHA-1 context structure 272b9912e6SJeroen Hofstee */ 282b9912e6SJeroen Hofstee typedef struct 292b9912e6SJeroen Hofstee { 302b9912e6SJeroen Hofstee unsigned long total[2]; /*!< number of bytes processed */ 312b9912e6SJeroen Hofstee unsigned long state[5]; /*!< intermediate digest state */ 322b9912e6SJeroen Hofstee unsigned char buffer[64]; /*!< data block being processed */ 332b9912e6SJeroen Hofstee } 342b9912e6SJeroen Hofstee sha1_context; 352b9912e6SJeroen Hofstee 362b9912e6SJeroen Hofstee /** 372b9912e6SJeroen Hofstee * \brief SHA-1 context setup 382b9912e6SJeroen Hofstee * 392b9912e6SJeroen Hofstee * \param ctx SHA-1 context to be initialized 402b9912e6SJeroen Hofstee */ 412b9912e6SJeroen Hofstee void sha1_starts( sha1_context *ctx ); 422b9912e6SJeroen Hofstee 432b9912e6SJeroen Hofstee /** 442b9912e6SJeroen Hofstee * \brief SHA-1 process buffer 452b9912e6SJeroen Hofstee * 462b9912e6SJeroen Hofstee * \param ctx SHA-1 context 472b9912e6SJeroen Hofstee * \param input buffer holding the data 482b9912e6SJeroen Hofstee * \param ilen length of the input data 492b9912e6SJeroen Hofstee */ 502b9912e6SJeroen Hofstee void sha1_update(sha1_context *ctx, const unsigned char *input, 512b9912e6SJeroen Hofstee unsigned int ilen); 522b9912e6SJeroen Hofstee 532b9912e6SJeroen Hofstee /** 542b9912e6SJeroen Hofstee * \brief SHA-1 final digest 552b9912e6SJeroen Hofstee * 562b9912e6SJeroen Hofstee * \param ctx SHA-1 context 572b9912e6SJeroen Hofstee * \param output SHA-1 checksum result 582b9912e6SJeroen Hofstee */ 592b9912e6SJeroen Hofstee void sha1_finish( sha1_context *ctx, unsigned char output[20] ); 602b9912e6SJeroen Hofstee 612b9912e6SJeroen Hofstee /** 622b9912e6SJeroen Hofstee * \brief Output = SHA-1( input buffer ) 632b9912e6SJeroen Hofstee * 642b9912e6SJeroen Hofstee * \param input buffer holding the data 652b9912e6SJeroen Hofstee * \param ilen length of the input data 662b9912e6SJeroen Hofstee * \param output SHA-1 checksum result 672b9912e6SJeroen Hofstee */ 682b9912e6SJeroen Hofstee void sha1_csum(const unsigned char *input, unsigned int ilen, 692b9912e6SJeroen Hofstee unsigned char *output); 702b9912e6SJeroen Hofstee 712b9912e6SJeroen Hofstee /** 722b9912e6SJeroen Hofstee * \brief Output = SHA-1( input buffer ), with watchdog triggering 732b9912e6SJeroen Hofstee * 742b9912e6SJeroen Hofstee * \param input buffer holding the data 752b9912e6SJeroen Hofstee * \param ilen length of the input data 762b9912e6SJeroen Hofstee * \param output SHA-1 checksum result 772b9912e6SJeroen Hofstee * \param chunk_sz watchdog triggering period (in bytes of input processed) 782b9912e6SJeroen Hofstee */ 792b9912e6SJeroen Hofstee void sha1_csum_wd(const unsigned char *input, unsigned int ilen, 802b9912e6SJeroen Hofstee unsigned char *output, unsigned int chunk_sz); 812b9912e6SJeroen Hofstee 822b9912e6SJeroen Hofstee /** 832b9912e6SJeroen Hofstee * \brief Output = HMAC-SHA-1( input buffer, hmac key ) 842b9912e6SJeroen Hofstee * 852b9912e6SJeroen Hofstee * \param key HMAC secret key 862b9912e6SJeroen Hofstee * \param keylen length of the HMAC key 872b9912e6SJeroen Hofstee * \param input buffer holding the data 882b9912e6SJeroen Hofstee * \param ilen length of the input data 892b9912e6SJeroen Hofstee * \param output HMAC-SHA-1 result 902b9912e6SJeroen Hofstee */ 912b9912e6SJeroen Hofstee void sha1_hmac(const unsigned char *key, int keylen, 922b9912e6SJeroen Hofstee const unsigned char *input, unsigned int ilen, 932b9912e6SJeroen Hofstee unsigned char *output); 942b9912e6SJeroen Hofstee 952b9912e6SJeroen Hofstee /** 962b9912e6SJeroen Hofstee * \brief Checkup routine 972b9912e6SJeroen Hofstee * 982b9912e6SJeroen Hofstee * \return 0 if successful, or 1 if the test failed 992b9912e6SJeroen Hofstee */ 1002b9912e6SJeroen Hofstee int sha1_self_test( void ); 1012b9912e6SJeroen Hofstee 1022b9912e6SJeroen Hofstee #ifdef __cplusplus 1032b9912e6SJeroen Hofstee } 1042b9912e6SJeroen Hofstee #endif 1052b9912e6SJeroen Hofstee 1062b9912e6SJeroen Hofstee #endif /* sha1.h */ 107